From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 120827 invoked by alias); 22 Jun 2015 12:39:14 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 120808 invoked by uid 89); 22 Jun 2015 12:39:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=0.6 required=5.0 tests=AWL,BAYES_50,FREEMAIL_FROM,KAM_ASCII_DIVIDERS,RCVD_IN_DNSWL_LOW,SPF_PASS autolearn=no version=3.3.2 X-Spam-User: qpsmtpd, 2 recipients X-HELO: mail-wi0-f169.google.com Received: from mail-wi0-f169.google.com (HELO mail-wi0-f169.google.com) (209.85.212.169) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-GCM-SHA256 encrypted) ESMTPS; Mon, 22 Jun 2015 12:39:06 +0000 Received: by wicnd19 with SMTP id nd19so75300138wic.1; Mon, 22 Jun 2015 05:39:03 -0700 (PDT) MIME-Version: 1.0 X-Received: by 10.180.36.51 with SMTP id n19mr31241516wij.20.1434976743018; Mon, 22 Jun 2015 05:39:03 -0700 (PDT) Received: by 10.180.11.10 with HTTP; Mon, 22 Jun 2015 05:39:02 -0700 (PDT) Date: Mon, 22 Jun 2015 12:41:00 -0000 Message-ID: Subject: [Patch, fortran] PR52846 - [F2008] Support submodules From: Paul Richard Thomas To: "fortran@gcc.gnu.org" , gcc-patches Cc: Damian Rouson , Tobias Burnus , "salvatore.filippone@uniroma2.it" Content-Type: multipart/mixed; boundary=e89a8f50297e07737705191a8fa5 X-SW-Source: 2015-06/txt/msg01419.txt.bz2 --e89a8f50297e07737705191a8fa5 Content-Type: text/plain; charset=UTF-8 Content-length: 6310 Dear All, This patch enables submodule support in gfortran. Submodules are a feature of F2008 but are fully described in ISO/IEC TR 19767:2004(E). The patch has one significant non-conformance (that I know about, anyway!); whilst private derived type components are correctly dealt with, symbols whose access is private within the parent module are not. They should effectively be host associated in descendant submodules. At present gfortran handles private access at the module write stage. This means that when a submodule reads the module file, there is no information present about symbols whose access was private. Since this modification might cause significant fall-out to existing code, I propose to submit a separate patch later on to sort out the non-conformance. However, as required private and public statements are not allowed in submodules. The patch makes maximum possible leverage of existing code to handle modules. Once the submodule is matched, the ancestor module and submodules are first "used" and then all the symbols are set host associated and private derived type components set public. Most of the work involved matching module procedures, with both the traditional form of declaration and the abbreviated one. I have chosen to treat MODULE as a prefix like PURE or ELEMENTAL. This is logical both because of the form of the declaration and because the identification of module procedures is most easily done with an attribute bit. With traditional procedure declarations, the procedure, result and dummy characteristics are compared with those of the interface declaration. The comparison of the dummy characteristics is a bit cobbled together and might be better done by copying the formal_namespace and it's contents to the new symbol and retaining the old for the interface symbol. This patch leaves the old dummy symbols in the formal namespace in the new ones in the formal arglist. I have checked that cleanup occurs for all objects. Note the comment in submodule_1.f90 about the possibility of undetected recursion between procedures in different submodules. I am not at all sure that I know how to deal with this and am open to suggestions. In addition, it should be noted that collisions between the names of entities and procedures, other than module procedures are detected by the linker at present. Apart from this, all is very straightforward and follows the the ChangeLogs. Thanks for testing of an early version of the patch by Damian Rouson, Salvatore Filippone and Tobias Burnus. Bootstrapped and regtested on FC21/x86_64 - OK for trunk? Cheers Paul 2015-06-22 Paul Thomas PR fortran/52846 * decl.c (get_proc_name): Make a partially populated interface symbol to carry the characteristics of a module procedure and its result. (match_attr_spec): Submodule variables have implicit save attribute for F2008 onwards. (gfc_match_prefix): Add 'module' as the a prefix and set the module_procedure attribute. (gfc_match_formal_arglist): For a module procedure keep the interface formal_arglist from the interface, match new the formal arguments and then compare the number and names of each. (gfc_match_procedure): Add case COMP_SUBMODULE. (gfc_match_function_decl, gfc_match_subroutine_decl): Set the module_procedure attribute. (gfc_match_entry, gfc_match_end): Add case COMP_SUBMODULE. (gfc_match_submod_proc): New function to match the abbreviated style of submodule declaration. * gfortran.h : Add ST_SUBMODULE and ST_END_SUBMODULE. Add the attribute bits 'used_in_submodule' and 'module_procedure'. Add prototypes for the functions 'gfc_check_dummy_characteristics' and 'gfc_check_result_characteristics'. * interface.c : Add the prefix 'gfc_' to the names of functions 'check_dummy(result)_characteristics' and all their references. * match.h : Add prototype for 'gfc_match_submod_proc' and 'gfc_match_submodule'. * module.c (gfc_match_submodule): New function. Add handling for the 'module_procedure' attribute bit. * parse.c (decode_statement): Handle a match occurring in 'gfc_match_submod_proc' and a match for 'submodule'. (gfc_enclosing_unit): Include the state COMP_SUBMODULE. (gfc_ascii_statement): Add END SUBMODULE. (accept_statement): Add ST_SUBMODULE. (parse_spec): Disallow statement functions in a submodule specification part. (parse_contained): Add ST_END_SUBMODULE and COMP_SUBMODULE twice each. (set_syms_host_assoc): Make symbols from the ancestor module and submodules use associated, as required by the standard and set all private components public. Module procedures 'external' attribute bit is reset and the 'used_in_submodule' bit is set. (parse_module): If this is a submodule, use the ancestor module and submodules. Traverse the namespace, calling 'set_syms_host_assoc'. Add ST_END_SUBMODULE and COMP_SUBMODULE. * parse.h : Add COMP_SUBMODULE. * primary.c (match_variable): Add COMP_SUBMODULE. * resolve.c (compare_fsyms): New function to compare the dummy characteristics of a module procedure with its interface. (resolve_fl_procedure): Compare the procedure, result and dummy characteristics of a module_procedure with its interface, using 'compare_fsyms' for the dummy arguments. * symbol.c (gfc_add_procedure): Suppress the check for existing procedures in the case of a module procedure. (gfc_add_explicit_interface): Skip checks that must fail for module procedures. (gfc_add_type): Allow a new type to be added to module procedures, their results or their dummy arguments. * trans-decl.c (gfc_sym_mangled_function_id): Module procedures must always have their names mangled as if they are symbols coming from a declaration in a module. (gfc_finish_var_decl): Symbols with the 'used_in_submodule' bit set are set DECL_EXTERNAL as if they were use associated. 2015-06-22 Paul Thomas PR fortran/52846 * gfortran.dg/submodule_1.f90: New test * gfortran.dg/submodule_2.f90: New test * gfortran.dg/submodule_3.f90: New test * gfortran.dg/submodule_4.f90: New test * gfortran.dg/submodule_5.f90: New test --e89a8f50297e07737705191a8fa5 Content-Type: text/plain; charset=US-ASCII; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_ib7vxm7z0 Content-length: 79093 SW5kZXg6IGdjYy9mb3J0cmFuL2RlY2wuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvZm9ydHJhbi9kZWNsLmMJKHJldmlzaW9uIDIyNDcyNCkK LS0tIGdjYy9mb3J0cmFuL2RlY2wuYwkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKiogZ2V0X3Byb2NfbmFtZSAoY29uc3QgY2hhciAqbmFtZSwgZ2Zj X3N5bQoqKiogOTAzLDkwOSAqKioqCiAgCiAgICBzeW0gPSAqcmVzdWx0Owog IAohICAgaWYgKHN5bSAmJiAhc3ltLT5nZmNfbmV3ICYmIGdmY19jdXJyZW50 X3N0YXRlICgpICE9IENPTVBfSU5URVJGQUNFKQogICAgICB7CiAgICAgICAg LyogVHJhcCBhbm90aGVyIGVuY29tcGFzc2VkIHByb2NlZHVyZSB3aXRoIHRo ZSBzYW1lIG5hbWUuICBBbGwKICAJIHRoZXNlIGNvbmRpdGlvbnMgYXJlIG5l Y2Vzc2FyeSB0byBhdm9pZCBwaWNraW5nIHVwIGFuIGVudHJ5Ci0tLSA5MDMs OTM3IC0tLS0KICAKICAgIHN5bSA9ICpyZXN1bHQ7CiAgCiEgICBpZiAoc3lt LT5hdHRyLm1vZHVsZV9wcm9jZWR1cmUKISAgICAgICAmJiBzeW0tPmF0dHIu aWZfc291cmNlID09IElGU1JDX0lGQk9EWSkKISAgICAgewohICAgICAgIC8q IENyZWF0ZSBhIHBhcnRpYWxseSBwb3B1bGF0ZWQgaW50ZXJmYWNlIHN5bWJv bCB0byBjYXJyeSB0aGUKISAJIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgcHJv Y2VkdXJlIGFuZCB0aGUgcmVzdWx0LiAgKi8KISAgICAgICBzeW0tPnRzLmlu dGVyZmFjZSA9IGdmY19uZXdfc3ltYm9sIChuYW1lLCBzeW0tPm5zKTsKISAg ICAgICBnZmNfYWRkX3R5cGUgKHN5bS0+dHMuaW50ZXJmYWNlLCAmKHN5bS0+ dHMpLAohIAkJICAgICZnZmNfY3VycmVudF9sb2N1cyk7CiEgICAgICAgZ2Zj X2NvcHlfYXR0ciAoJnN5bS0+dHMuaW50ZXJmYWNlLT5hdHRyLCAmc3ltLT5h dHRyLCBOVUxMKTsKISAgICAgICBpZiAoc3ltLT5hdHRyLmRpbWVuc2lvbikK ISAJc3ltLT50cy5pbnRlcmZhY2UtPmFzID0gZ2ZjX2NvcHlfYXJyYXlfc3Bl YyAoc3ltLT5hcyk7CiEgCiEgICAgICAgLyogSWRlYWxseSwgYXQgdGhpcyBw b2ludCwgYSBjb3B5IHdvdWxkIGJlIG1hZGUgb2YgdGhlIGZvcm1hbAohIAkg YXJndW1lbnRzIGFuZCB0aGVpciBuYW1lc3BhY2UuIEhvd2V2ZXIsIHRoaXMg ZG9lcyBub3QgYXBwZWFyCiEgCSB0byBiZSBuZWNlc3NhcnksIGFsYmVpdCBh dCB0aGUgZXhwZW5zZSBvZiBub3QgYmVpbmcgYWJsZSB0bwohIAkgdXNlIGdm Y19jb21wYXJlX2ludGVyZmFjZXMgZGlyZWN0bHkuICAqLwohIAohICAgICAg IGlmIChzeW0tPnJlc3VsdCAmJiBzeW0tPnJlc3VsdCAhPSBzeW0pCiEgCXsK ISAJICBzeW0tPnRzLmludGVyZmFjZS0+cmVzdWx0ID0gc3ltLT5yZXN1bHQ7 CiEgCSAgc3ltLT5yZXN1bHQgPSBOVUxMOwohIAl9CiEgICAgICAgZWxzZSBp ZiAoc3ltLT5yZXN1bHQpCiEgCXsKISAJICBzeW0tPnRzLmludGVyZmFjZS0+ cmVzdWx0ID0gc3ltLT50cy5pbnRlcmZhY2U7CiEgCX0KISAgICAgfQohICAg ZWxzZSBpZiAoc3ltICYmICFzeW0tPmdmY19uZXcKISAJICAgJiYgZ2ZjX2N1 cnJlbnRfc3RhdGUgKCkgIT0gQ09NUF9JTlRFUkZBQ0UpCiAgICAgIHsKICAg ICAgICAvKiBUcmFwIGFub3RoZXIgZW5jb21wYXNzZWQgcHJvY2VkdXJlIHdp dGggdGhlIHNhbWUgbmFtZS4gIEFsbAogIAkgdGhlc2UgY29uZGl0aW9ucyBh cmUgbmVjZXNzYXJ5IHRvIGF2b2lkIHBpY2tpbmcgdXAgYW4gZW50cnkKKioq KioqKioqKioqKioqIG1hdGNoX2F0dHJfc3BlYyAodm9pZCkKKioqIDM5MjUs MzkzMSAqKioqCiAgICAgIH0KICAKICAgIC8qIFNpbmNlIEZvcnRyYW4gMjAw OCBtb2R1bGUgdmFyaWFibGVzIGltcGxpY2l0bHkgaGF2ZSB0aGUgU0FWRSBh dHRyaWJ1dGUuICAqLwohICAgaWYgKGdmY19jdXJyZW50X3N0YXRlICgpID09 IENPTVBfTU9EVUxFICYmICFjdXJyZW50X2F0dHIuc2F2ZQogICAgICAgICYm IChnZmNfb3B0aW9uLmFsbG93X3N0ZCAmIEdGQ19TVERfRjIwMDgpICE9IDAp CiAgICAgIGN1cnJlbnRfYXR0ci5zYXZlID0gU0FWRV9JTVBMSUNJVDsKICAK LS0tIDM5NTMsMzk2MSAtLS0tCiAgICAgIH0KICAKICAgIC8qIFNpbmNlIEZv cnRyYW4gMjAwOCBtb2R1bGUgdmFyaWFibGVzIGltcGxpY2l0bHkgaGF2ZSB0 aGUgU0FWRSBhdHRyaWJ1dGUuICAqLwohICAgaWYgKChnZmNfY3VycmVudF9z dGF0ZSAoKSA9PSBDT01QX01PRFVMRQohICAgICAgICB8fCBnZmNfY3VycmVu dF9zdGF0ZSAoKSA9PSBDT01QX1NVQk1PRFVMRSkKISAgICAgICAmJiAhY3Vy cmVudF9hdHRyLnNhdmUKICAgICAgICAmJiAoZ2ZjX29wdGlvbi5hbGxvd19z dGQgJiBHRkNfU1REX0YyMDA4KSAhPSAwKQogICAgICBjdXJyZW50X2F0dHIu c2F2ZSA9IFNBVkVfSU1QTElDSVQ7CiAgCioqKioqKioqKioqKioqKiBnZmNf bWF0Y2hfcHJlZml4IChnZmNfdHlwZXNwZWMgKnRzKQoqKiogNDUxMyw0NTE4 ICoqKioKLS0tIDQ1NDMsNDU2NCAtLS0tCiAgCiAgICAvKiBBdCB0aGlzIHBv aW50LCB0aGUgbmV4dCBpdGVtIGlzIG5vdCBhIHByZWZpeC4gICovCiAgICBn Y2NfYXNzZXJ0IChnZmNfbWF0Y2hpbmdfcHJlZml4KTsKKyAKKyAgIC8qIE1P RFVMRSBzaG91bGQgYmUgdGhlIGxhc3QgcHJlZml4IGJlZm9yZSBGVU5DVElP TiBvciBTVUJST1VUSU5FLgorICAgICAgU2luY2UgdGhpcyBpcyBhIHByZWZp eCBsaWtlIFBVUkUsIEVMRU1FTlRBTCwgZXRjLiwgaGF2aW5nIGEKKyAgICAg IGNvcnJlc3BvbmRpbmcgYXR0cmlidXRlIHNlZW1zIG5hdHVyYWwgYW5kIGRp c3Rpbmd1aXNoZXMgdGhlc2UKKyAgICAgIHByb2NlZHVyZXMgZnJvbSBwcm9j ZWR1cmUgdHlwZXMgb2YgUFJPQ19NT0RVTEUsIHdoaWNoIHRoZXNlIGFyZQor ICAgICAgYXMgd2VsbC4gICovCisgICBpZiAoKGdmY19jdXJyZW50X3N0YXRl ICgpID09IENPTVBfSU5URVJGQUNFCisgICAgICAgIHx8IGdmY19jdXJyZW50 X3N0YXRlICgpID09IENPTVBfQ09OVEFJTlMpCisgICAgICAgJiYgZ2ZjX21h dGNoICgibW9kdWxlJSAiKSA9PSBNQVRDSF9ZRVMpCisgICAgIHsKKyAgICAg ICBpZiAoIWdmY19ub3RpZnlfc3RkIChHRkNfU1REX0YyMDA4LCAiTU9EVUxF IHByZWZpeCBhdCAlQyIpKQorIAlnb3RvIGVycm9yOworICAgICAgIGVsc2UK KyAJY3VycmVudF9hdHRyLm1vZHVsZV9wcm9jZWR1cmUgPSAxOworICAgICB9 CisgCiAgICBnZmNfbWF0Y2hpbmdfcHJlZml4ID0gZmFsc2U7CiAgICByZXR1 cm4gTUFUQ0hfWUVTOwogIAoqKioqKioqKioqKioqKiogZ2ZjX21hdGNoX2Zv cm1hbF9hcmdsaXN0IChnZmNfc3ltYm9sICpwcgoqKiogNDU1MCw0NTU4ICoq KioKLS0tIDQ1OTYsNDYxOSAtLS0tCiAgICBjaGFyIG5hbWVbR0ZDX01BWF9T WU1CT0xfTEVOICsgMV07CiAgICBnZmNfc3ltYm9sICpzeW07CiAgICBtYXRj aCBtOworICAgZ2ZjX2Zvcm1hbF9hcmdsaXN0ICpmb3JtYWwgPSBOVUxMOwog IAogICAgaGVhZCA9IHRhaWwgPSBOVUxMOwogIAorICAgLyogS2VlcCB0aGUg aW50ZXJmYWNlIGZvcm1hbCBhcmd1bWVudCBsaXN0IGFuZCBudWxsIGl0IHNv IHRoYXQgdGhlCisgICAgICBtYXRjaGluZyBmb3IgdGhlIG5ldyBkZWNsYXJh dGlvbiBjYW4gYmUgZG9uZS4gIFRoZSBudW1iZXJzIGFuZAorICAgICAgbmFt ZXMgb2YgdGhlIGFyZ3VtZW50cyBhcmUgY2hlY2tlZCBoZXJlLiBUaGUgaW50 ZXJmYWNlIGZvcm1hbAorICAgICAgYXJndW1lbnRzIGFyZSByZXRhaW5lZCBp biBmb3JtYWxfYXJnbGlzdCBhbmQgdGhlIGNoYXJhY3RlcmlzdGljcworICAg ICAgYXJlIGNvbXBhcmVkIGluIHJlc29sdmUuYyhyZXNvbHZlX2ZsX3Byb2Nl ZHVyZSkuICBTZWUgdGhlIHJlbWFyaworICAgICAgaW4gZ2V0X3Byb2NfbmFt ZSBhYm91dCB0aGUgZXZlbnR1YWwgbmVlZCB0byBjb3B5IHRoZSBmb3JtYWxf YXJnbGlzdAorICAgICAgYW5kIHBvcHVsYXRlIHRoZSBmb3JtYWwgbmFtZXNw YWNlIG9mIHRoZSBpbnRlcmZhY2Ugc3ltYm9sLiAgKi8KKyAgIGlmIChwcm9n bmFtZS0+YXR0ci5tb2R1bGVfcHJvY2VkdXJlCisgICAgICAgJiYgcHJvZ25h bWUtPmF0dHIuaG9zdF9hc3NvYykKKyAgICAgeworICAgICAgIGZvcm1hbCA9 IHByb2duYW1lLT5mb3JtYWw7CisgICAgICAgcHJvZ25hbWUtPmZvcm1hbCA9 IE5VTEw7CisgICAgIH0KKyAKICAgIGlmIChnZmNfbWF0Y2hfY2hhciAoJygn KSAhPSBNQVRDSF9ZRVMpCiAgICAgIHsKICAgICAgICBpZiAobnVsbF9mbGFn KQoqKioqKioqKioqKioqKiogb2s6CioqKiA0NjU4LDQ2NjMgKioqKgotLS0g NDcxOSw0NzQyIC0tLS0KICAgICAgICBnb3RvIGNsZWFudXA7CiAgICAgIH0K ICAKKyAgIGlmIChmb3JtYWwpCisgICAgIHsKKyAgICAgICBmb3IgKHAgPSBm b3JtYWwsIHEgPSBoZWFkOyBwICYmIHE7IHAgPSBwLT5uZXh0LCBxID0gcS0+ bmV4dCkKKyAJeworIAkgIGlmICgocC0+bmV4dCAhPSBOVUxMICYmIHEtPm5l eHQgPT0gTlVMTCkKKyAJICAgICAgfHwgKHAtPm5leHQgPT0gTlVMTCAmJiBx LT5uZXh0ICE9IE5VTEwpKQorIAkgICAgZ2ZjX2Vycm9yX25vdyAoIk1pc21h dGNoIGluIG51bWJlciBvZiBNT0RVTEUgUFJPQ0VEVVJFICIKKyAJCSAgICAg ICAgICAgImZvcm1hbCBhcmd1bWVudHMgYXQgJUMiKTsKKyAJICBlbHNlIGlm ICgocC0+c3ltID09IE5VTEwgJiYgcS0+c3ltID09IE5VTEwpCisgCQkgICAg fHwgc3RyY21wIChwLT5zeW0tPm5hbWUsIHEtPnN5bS0+bmFtZSkgPT0gMCkK KyAJICAgIGNvbnRpbnVlOworIAkgIGVsc2UKKyAJICAgIGdmY19lcnJvcl9u b3cgKCJNaXNtYXRjaCBpbiBNT0RVTEUgUFJPQ0VEVVJFIGZvcm1hbCAiCisg CQkJICAgImFyZ3VtZW50IG5hbWVzICglcy8lcykgYXQgJUMiLAorIAkJCSAg IHAtPnN5bS0+bmFtZSwgcS0+c3ltLT5uYW1lKTsKKyAJfQorICAgICB9Cisg CiAgICByZXR1cm4gTUFUQ0hfWUVTOwogIAogIGNsZWFudXA6CioqKioqKioq KioqKioqKiBnZmNfbWF0Y2hfcHJvY2VkdXJlICh2b2lkKQoqKiogNTI3MSw1 Mjc2ICoqKioKLS0tIDUzNTAsNTM1NiAtLS0tCiAgICAgIGNhc2UgQ09NUF9O T05FOgogICAgICBjYXNlIENPTVBfUFJPR1JBTToKICAgICAgY2FzZSBDT01Q X01PRFVMRToKKyAgICAgY2FzZSBDT01QX1NVQk1PRFVMRToKICAgICAgY2Fz ZSBDT01QX1NVQlJPVVRJTkU6CiAgICAgIGNhc2UgQ09NUF9GVU5DVElPTjoK ICAgICAgY2FzZSBDT01QX0JMT0NLOgoqKioqKioqKioqKioqKiogZG9fd2Fy bl9pbnRyaW5zaWNfc2hhZG93IChjb25zdCBnZmNfc3ltYgoqKiogNTMwOSw1 MzE1ICoqKioKICAgIGJvb2wgaW5fbW9kdWxlOwogIAogICAgaW5fbW9kdWxl ID0gKGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXMKISAJICAgICAgICYmIGdm Y19zdGF0ZV9zdGFjay0+cHJldmlvdXMtPnN0YXRlID09IENPTVBfTU9EVUxF KTsKICAKICAgIGdmY193YXJuX2ludHJpbnNpY19zaGFkb3cgKHN5bSwgaW5f bW9kdWxlLCBmdW5jKTsKICB9Ci0tLSA1Mzg5LDUzOTYgLS0tLQogICAgYm9v bCBpbl9tb2R1bGU7CiAgCiAgICBpbl9tb2R1bGUgPSAoZ2ZjX3N0YXRlX3N0 YWNrLT5wcmV2aW91cwohIAkgICAgICAgJiYgKGdmY19zdGF0ZV9zdGFjay0+ cHJldmlvdXMtPnN0YXRlID09IENPTVBfTU9EVUxFCiEgCQkgICB8fCBnZmNf c3RhdGVfc3RhY2stPnByZXZpb3VzLT5zdGF0ZSA9PSBDT01QX1NVQk1PRFVM RSkpOwogIAogICAgZ2ZjX3dhcm5faW50cmluc2ljX3NoYWRvdyAoc3ltLCBp bl9tb2R1bGUsIGZ1bmMpOwogIH0KKioqKioqKioqKioqKioqIGdmY19tYXRj aF9mdW5jdGlvbl9kZWNsICh2b2lkKQoqKiogNTM0OCw1MzU5ICoqKioKLS0t IDU0MjksNTQ0NCAtLS0tCiAgICAgICAgZ2ZjX2N1cnJlbnRfbG9jdXMgPSBv bGRfbG9jOwogICAgICAgIHJldHVybiBNQVRDSF9OTzsKICAgICAgfQorIAog ICAgaWYgKGdldF9wcm9jX25hbWUgKG5hbWUsICZzeW0sIGZhbHNlKSkKICAg ICAgcmV0dXJuIE1BVENIX0VSUk9SOwogIAogICAgaWYgKGFkZF9oaWRkZW5f cHJvY3B0cl9yZXN1bHQgKHN5bSkpCiAgICAgIHN5bSA9IHN5bS0+cmVzdWx0 OwogIAorICAgaWYgKGN1cnJlbnRfYXR0ci5tb2R1bGVfcHJvY2VkdXJlKQor ICAgICBzeW0tPmF0dHIubW9kdWxlX3Byb2NlZHVyZSA9IDE7CisgCiAgICBn ZmNfbmV3X2Jsb2NrID0gc3ltOwogIAogICAgbSA9IGdmY19tYXRjaF9mb3Jt YWxfYXJnbGlzdCAoc3ltLCAwLCAwKTsKKioqKioqKioqKioqKioqIGdmY19t YXRjaF9lbnRyeSAodm9pZCkKKioqIDU1NDcsNTU1MiAqKioqCi0tLSA1NjMy LDU2NDAgLS0tLQogIAkgIGNhc2UgQ09NUF9NT0RVTEU6CiAgCSAgICBnZmNf ZXJyb3IgKCJFTlRSWSBzdGF0ZW1lbnQgYXQgJUMgY2Fubm90IGFwcGVhciB3 aXRoaW4gYSBNT0RVTEUiKTsKICAJICAgIGJyZWFrOworIAkgIGNhc2UgQ09N UF9TVUJNT0RVTEU6CisgCSAgICBnZmNfZXJyb3IgKCJFTlRSWSBzdGF0ZW1l bnQgYXQgJUMgY2Fubm90IGFwcGVhciB3aXRoaW4gYSBTVUJNT0RVTEUiKTsK KyAJICAgIGJyZWFrOwogIAkgIGNhc2UgQ09NUF9CTE9DS19EQVRBOgogIAkg ICAgZ2ZjX2Vycm9yICgiRU5UUlkgc3RhdGVtZW50IGF0ICVDIGNhbm5vdCBh cHBlYXIgd2l0aGluICIKICAJCSAgICAgICAiYSBCTE9DSyBEQVRBIik7Cioq KioqKioqKioqKioqKiBnZmNfbWF0Y2hfc3Vicm91dGluZSAodm9pZCkKKioq IDU3OTEsNTc5NiAqKioqCi0tLSA1ODc5LDU4ODcgLS0tLQogICAgICAgdGhl IHN5bWJvbCBleGlzdGVkIGJlZm9yZS4gICovCiAgICBzeW0tPmRlY2xhcmVk X2F0ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CiAgCisgICBpZiAoY3VycmVudF9h dHRyLm1vZHVsZV9wcm9jZWR1cmUpCisgICAgIHN5bS0+YXR0ci5tb2R1bGVf cHJvY2VkdXJlID0gMTsKKyAKICAgIGlmIChhZGRfaGlkZGVuX3Byb2NwdHJf cmVzdWx0IChzeW0pKQogICAgICBzeW0gPSBzeW0tPnJlc3VsdDsKICAKKioq KioqKioqKioqKioqIGdmY19tYXRjaF9lbmQgKGdmY19zdGF0ZW1lbnQgKnN0 KQoqKiogNjE3NSw2MTgwICoqKioKLS0tIDYyNjYsNjI3NyAtLS0tCiAgICAg ICAgZW9zX29rID0gMTsKICAgICAgICBicmVhazsKICAKKyAgICAgY2FzZSBD T01QX1NVQk1PRFVMRToKKyAgICAgICAqc3QgPSBTVF9FTkRfU1VCTU9EVUxF OworICAgICAgIHRhcmdldCA9ICIgc3VibW9kdWxlIjsKKyAgICAgICBlb3Nf b2sgPSAxOworICAgICAgIGJyZWFrOworIAogICAgICBjYXNlIENPTVBfSU5U RVJGQUNFOgogICAgICAgICpzdCA9IFNUX0VORF9JTlRFUkZBQ0U7CiAgICAg ICAgdGFyZ2V0ID0gIiBpbnRlcmZhY2UiOwoqKioqKioqKioqKioqKiogc3lu dGF4OgoqKiogNzQxNyw3NDIyICoqKioKLS0tIDc1MTQsNzYyNSAtLS0tCiAg fQogIAogIAorIC8qIE1hdGNoIGEgbW9kdWxlIHByb2NlZHVyZSBzdGF0ZW1l bnQgaW4gYSBzdWJtb2R1bGUuICAqLworIAorIG1hdGNoCisgZ2ZjX21hdGNo X3N1Ym1vZF9wcm9jICh2b2lkKQorIHsKKyAgIGNoYXIgbmFtZVtHRkNfTUFY X1NZTUJPTF9MRU4gKyAxXTsKKyAgIGdmY19zeW1ib2wgKnN5bSwgKmZzeW07 CisgICBtYXRjaCBtOworICAgZ2ZjX2Zvcm1hbF9hcmdsaXN0ICpmb3JtYWws ICpoZWFkLCAqdGFpbDsKKyAgIGludCByYzsKKyAKKyAgIGlmIChnZmNfY3Vy cmVudF9zdGF0ZSAoKSAhPSBDT01QX0NPTlRBSU5TCisgICAgICAgfHwgIShn ZmNfc3RhdGVfc3RhY2stPnByZXZpb3VzCisgCSAgICYmIGdmY19zdGF0ZV9z dGFjay0+cHJldmlvdXMtPnN0YXRlID09IENPTVBfU1VCTU9EVUxFKSkKKyAg ICAgcmV0dXJuIE1BVENIX05POworIAorICAgbSA9IGdmY19tYXRjaCAoIiBt b2R1bGUlIHByb2NlZHVyZSUgJW4iLCBuYW1lKTsKKyAgIGlmIChtICE9IE1B VENIX1lFUykKKyAgICAgcmV0dXJuIG07CisgCisgICBpZiAoIWdmY19ub3Rp Znlfc3RkIChHRkNfU1REX0YyMDA4LCAiTU9EVUxFIFBST0NFRFVSRSBkZWNs YXJhdGlvbiAiCisgCQkJCSAgICAgICJhdCAlQyIpKQorICAgICByZXR1cm4g TUFUQ0hfRVJST1I7CisgCisgICBpZiAoZ2V0X3Byb2NfbmFtZSAobmFtZSwg JnN5bSwgZmFsc2UpKQorICAgICByZXR1cm4gTUFUQ0hfRVJST1I7CisgCisg ICBpZiAoc3ltLT50cy5pbnRlcmZhY2UtPmF0dHIuZnVuY3Rpb24KKyAgICAg ICAmJiBzeW0tPnRzLmludGVyZmFjZS0+cmVzdWx0CisgICAgICAgJiYgc3lt LT50cy5pbnRlcmZhY2UtPnJlc3VsdCAhPSBzeW0tPnRzLmludGVyZmFjZSkK KyAgICAgc3ltLT5yZXN1bHQ9IHN5bS0+dHMuaW50ZXJmYWNlLT5yZXN1bHQ7 CisgICBlbHNlIGlmIChzeW0tPnRzLmludGVyZmFjZS0+YXR0ci5mdW5jdGlv bgorIAkgICAmJiBzeW0tPnRzLmludGVyZmFjZS0+cmVzdWx0KQorICAgICBz eW0tPnJlc3VsdCA9IHN5bTsKKyAKKyAgIC8qIFNldCBkZWNsYXJlZF9hdCBh cyBpdCBtaWdodCBwb2ludCB0bywgZS5nLiwgYSBQVUJMSUMgc3RhdGVtZW50 LCBpZgorICAgICAgdGhlIHN5bWJvbCBleGlzdGVkIGJlZm9yZS4gICovCisg ICBzeW0tPmRlY2xhcmVkX2F0ID0gZ2ZjX2N1cnJlbnRfbG9jdXM7CisgCisg ICBpZiAoIXN5bS0+YXR0ci5tb2R1bGVfcHJvY2VkdXJlKQorICAgICByZXR1 cm4gTUFUQ0hfRVJST1I7CisgCisgICAvKiBDaGFuZ2UgZnJvbSBJRlNSQ19J RkJPRFkgY29taW5nIGZyb20gdGhlIGludGVyZmFjZSBkZWNsYXJhdGlvbi4g ICovCisgICBzeW0tPmF0dHIuaWZfc291cmNlID0gSUZTUkNfREVDTDsKKyAK KyAgIGdmY19uZXdfYmxvY2sgPSBzeW07CisgCisgICAvKiBNYWtlIGEgbmV3 IGZvcm1hbCBhcmdsaXN0IHdpdGggdGhlIHN5bWJvbHMgaW4gdGhlIHByb2Nl ZHVyZQorICAgICAgIG5hbWVzcGFjZS4gICovCisgICBoZWFkID0gdGFpbCA9 IE5VTEw7CisgICBmb3IgKGZvcm1hbCA9IHN5bS0+Zm9ybWFsOyBmb3JtYWwg JiYgZm9ybWFsLT5zeW07IGZvcm1hbCA9IGZvcm1hbC0+bmV4dCkKKyAgICAg eworICAgICAgIGlmIChmb3JtYWwgPT0gc3ltLT5mb3JtYWwpCisgCWhlYWQg PSB0YWlsID0gZ2ZjX2dldF9mb3JtYWxfYXJnbGlzdCAoKTsKKyAgICAgICBl bHNlCisgCXsKKyAJICB0YWlsLT5uZXh0ID0gZ2ZjX2dldF9mb3JtYWxfYXJn bGlzdCAoKTsKKyAJICB0YWlsID0gdGFpbC0+bmV4dDsKKyAJfQorIAorICAg ICAgIHJjID0gZ2ZjX2dldF9zeW1ib2wgKGZvcm1hbC0+c3ltLT5uYW1lLCBO VUxMLCAmZnN5bSk7CisgICAgICAgaWYgKHJjKQorIAlnb3RvIGNsZWFudXA7 CisgCisgICAgICAgaWYgKCFnZmNfYWRkX3R5cGUgKGZzeW0sICYoZm9ybWFs LT5zeW0tPnRzKSwgJmdmY19jdXJyZW50X2xvY3VzKSkKKyAJICBnb3RvIGNs ZWFudXA7CisgCisgICAgICAgaWYgKCFnZmNfY29weV9hdHRyICgmKGZzeW0t PmF0dHIpLCAmKGZvcm1hbC0+c3ltLT5hdHRyKSwKKyAJICAmZ2ZjX2N1cnJl bnRfbG9jdXMpKQorIAlnb3RvIGNsZWFudXA7CisgCisgICAgICAgaWYgKGZz eW0tPmF0dHIuZGltZW5zaW9uKQorIAlmc3ltLT5hcyA9IGdmY19jb3B5X2Fy cmF5X3NwZWMgKGZvcm1hbC0+c3ltLT5hcyk7CisgCisgICAgICAgZnN5bS0+ YXR0ci5jbGFzc19vayA9IGZvcm1hbC0+c3ltLT5hdHRyLmNsYXNzX29rOwor IAorICAgICAgIGlmIChmc3ltICE9IE5VTEwKKyAJICAmJiAoIWdmY19hZGRf ZHVtbXkoJmZzeW0tPmF0dHIsIGZzeW0tPm5hbWUsIE5VTEwpCisgCSAgICAg IHx8ICFnZmNfbWlzc2luZ19hdHRyICgmZnN5bS0+YXR0ciwgTlVMTCkpKQor IAlnb3RvIGNsZWFudXA7CisgCisgICAgICAgdGFpbC0+c3ltID0gZnN5bTsK KyAgICAgICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChmc3ltKTsKKyAgICAg fQorIAorICAgLyogVGhlIGR1bW15IHN5bWJvbHMgZ2V0IGNsZWFuZWQgdXAs IHdoZW4gdGhlIGZvcm1hbF9uYW1lc3BhY2Ugb2YgdGhlCisgICAgICBpbnRl cmZhY2UgZGVjbGFyYXRpb24gaXMgY2xlYXJlZC4gIFRoaXMgYWxsb3dzIHVz IHRvIGFkZCB0aGUKKyAgICAgIGV4cGxpY2l0IGludGVyZmFjZSBhcyBpcyBk b25lIGZvciBvdGhlciB0eXBlIG9mIHByb2NlZHVyZS4gICovCisgICBpZiAo IWdmY19hZGRfZXhwbGljaXRfaW50ZXJmYWNlIChzeW0sIElGU1JDX0RFQ0ws IGhlYWQsCisgCQkJCSAgICZnZmNfY3VycmVudF9sb2N1cykpCisgICAgIHJl dHVybiBNQVRDSF9FUlJPUjsKKyAKKyAgIGlmIChnZmNfbWF0Y2hfZW9zICgp ICE9IE1BVENIX1lFUykKKyAgICAgeworICAgICAgIGdmY19zeW50YXhfZXJy b3IgKFNUX01PRFVMRV9QUk9DKTsKKyAgICAgICByZXR1cm4gTUFUQ0hfRVJS T1I7CisgICAgIH0KKyAKKyAgIHJldHVybiBNQVRDSF9ZRVM7CisgCisgY2xl YW51cDoKKyAgIGdmY19mcmVlX2Zvcm1hbF9hcmdsaXN0IChoZWFkKTsKKyAg IHJldHVybiBNQVRDSF9FUlJPUjsKKyB9CisgCisgCiAgLyogTWF0Y2ggYSBt b2R1bGUgcHJvY2VkdXJlIHN0YXRlbWVudC4gIE5vdGUgdGhhdCB3ZSBoYXZl IHRvIG1vZGlmeQogICAgIHN5bWJvbHMgaW4gdGhlIHBhcmVudCdzIG5hbWVz cGFjZSBiZWNhdXNlIHRoZSBjdXJyZW50IG9uZSB3YXMgdGhlcmUKICAgICB0 byByZWNlaXZlIHN5bWJvbHMgdGhhdCBhcmUgaW4gYW4gaW50ZXJmYWNlJ3Mg Zm9ybWFsIGFyZ3VtZW50IGxpc3QuICAqLwpJbmRleDogZ2NjL2ZvcnRyYW4v Z2ZvcnRyYW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9y dHJhbi9nZm9ydHJhbi5oCShyZXZpc2lvbiAyMjQ3MjQpCi0tLSBnY2MvZm9y dHJhbi9nZm9ydHJhbi5oCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioq KiB0eXBlZGVmIGVudW0KKioqIDIwMSwyMTkgKioqKgogICAgU1RfQ0FMTCwg U1RfQ0FTRSwgU1RfQ0xPU0UsIFNUX0NPTU1PTiwgU1RfQ09OVElOVUUsIFNU X0NPTlRBSU5TLCBTVF9DWUNMRSwKICAgIFNUX0RBVEEsIFNUX0RBVEFfREVD TCwgU1RfREVBTExPQ0FURSwgU1RfRE8sIFNUX0VMU0UsIFNUX0VMU0VJRiwK ICAgIFNUX0VMU0VXSEVSRSwgU1RfRU5EX0FTU09DSUFURSwgU1RfRU5EX0JM T0NLLCBTVF9FTkRfQkxPQ0tfREFUQSwKISAgIFNUX0VORERPLCBTVF9JTVBM SUVEX0VORERPLAohICAgU1RfRU5EX0ZJTEUsIFNUX0ZJTkFMLCBTVF9GTFVT SCwgU1RfRU5EX0ZPUkFMTCwgU1RfRU5EX0ZVTkNUSU9OLCBTVF9FTkRJRiwK ISAgIFNUX0VORF9JTlRFUkZBQ0UsIFNUX0VORF9NT0RVTEUsIFNUX0VORF9Q Uk9HUkFNLCBTVF9FTkRfU0VMRUNULAohICAgU1RfRU5EX1NVQlJPVVRJTkUs IFNUX0VORF9XSEVSRSwgU1RfRU5EX1RZUEUsIFNUX0VOVFJZLCBTVF9FUVVJ VkFMRU5DRSwKISAgIFNUX0VSUk9SX1NUT1AsIFNUX0VYSVQsIFNUX0ZPUkFM TCwgU1RfRk9SQUxMX0JMT0NLLCBTVF9GT1JNQVQsIFNUX0ZVTkNUSU9OLAoh ICAgU1RfR09UTywgU1RfSUZfQkxPQ0ssIFNUX0lNUExJQ0lULCBTVF9JTVBM SUNJVF9OT05FLCBTVF9JTVBPUlQsCiEgICBTVF9JTlFVSVJFLCBTVF9JTlRF UkZBQ0UsIFNUX1NZTkNfQUxMLCBTVF9TWU5DX01FTU9SWSwgU1RfU1lOQ19J TUFHRVMsCiEgICBTVF9QQVJBTUVURVIsIFNUX01PRFVMRSwgU1RfTU9EVUxF X1BST0MsIFNUX05BTUVMSVNULCBTVF9OVUxMSUZZLCBTVF9PUEVOLAohICAg U1RfUEFVU0UsIFNUX1BSSVZBVEUsIFNUX1BST0dSQU0sIFNUX1BVQkxJQywg U1RfUkVBRCwgU1RfUkVUVVJOLCBTVF9SRVdJTkQsCiEgICBTVF9TVE9QLCBT VF9TVUJST1VUSU5FLCBTVF9UWVBFLCBTVF9VU0UsIFNUX1dIRVJFX0JMT0NL LCBTVF9XSEVSRSwgU1RfV0FJVCwKISAgIFNUX1dSSVRFLCBTVF9BU1NJR05N RU5ULCBTVF9QT0lOVEVSX0FTU0lHTk1FTlQsIFNUX1NFTEVDVF9DQVNFLCBT VF9TRVFVRU5DRSwKISAgIFNUX1NJTVBMRV9JRiwgU1RfU1RBVEVNRU5UX0ZV TkNUSU9OLCBTVF9ERVJJVkVEX0RFQ0wsIFNUX0xBQkVMX0FTU0lHTk1FTlQs CiEgICBTVF9FTlVNLCBTVF9FTlVNRVJBVE9SLCBTVF9FTkRfRU5VTSwgU1Rf U0VMRUNUX1RZUEUsIFNUX1RZUEVfSVMsIFNUX0NMQVNTX0lTLAogICAgU1Rf T0FDQ19QQVJBTExFTF9MT09QLCBTVF9PQUNDX0VORF9QQVJBTExFTF9MT09Q LCBTVF9PQUNDX1BBUkFMTEVMLAogICAgU1RfT0FDQ19FTkRfUEFSQUxMRUws IFNUX09BQ0NfS0VSTkVMUywgU1RfT0FDQ19FTkRfS0VSTkVMUywgU1RfT0FD Q19EQVRBLAogICAgU1RfT0FDQ19FTkRfREFUQSwgU1RfT0FDQ19IT1NUX0RB VEEsIFNUX09BQ0NfRU5EX0hPU1RfREFUQSwgU1RfT0FDQ19MT09QLAotLS0g MjAxLDIxOSAtLS0tCiAgICBTVF9DQUxMLCBTVF9DQVNFLCBTVF9DTE9TRSwg U1RfQ09NTU9OLCBTVF9DT05USU5VRSwgU1RfQ09OVEFJTlMsIFNUX0NZQ0xF LAogICAgU1RfREFUQSwgU1RfREFUQV9ERUNMLCBTVF9ERUFMTE9DQVRFLCBT VF9ETywgU1RfRUxTRSwgU1RfRUxTRUlGLAogICAgU1RfRUxTRVdIRVJFLCBT VF9FTkRfQVNTT0NJQVRFLCBTVF9FTkRfQkxPQ0ssIFNUX0VORF9CTE9DS19E QVRBLAohICAgU1RfRU5ERE8sIFNUX0lNUExJRURfRU5ERE8sIFNUX0VORF9G SUxFLCBTVF9GSU5BTCwgU1RfRkxVU0gsIFNUX0VORF9GT1JBTEwsCiEgICBT VF9FTkRfRlVOQ1RJT04sIFNUX0VORElGLCBTVF9FTkRfSU5URVJGQUNFLCBT VF9FTkRfTU9EVUxFLCBTVF9FTkRfU1VCTU9EVUxFLAohICAgU1RfRU5EX1BS T0dSQU0sIFNUX0VORF9TRUxFQ1QsIFNUX0VORF9TVUJST1VUSU5FLCBTVF9F TkRfV0hFUkUsIFNUX0VORF9UWVBFLAohICAgU1RfRU5UUlksIFNUX0VRVUlW QUxFTkNFLCBTVF9FUlJPUl9TVE9QLCBTVF9FWElULCBTVF9GT1JBTEwsIFNU X0ZPUkFMTF9CTE9DSywKISAgIFNUX0ZPUk1BVCwgU1RfRlVOQ1RJT04sIFNU X0dPVE8sIFNUX0lGX0JMT0NLLCBTVF9JTVBMSUNJVCwgU1RfSU1QTElDSVRf Tk9ORSwKISAgIFNUX0lNUE9SVCwgU1RfSU5RVUlSRSwgU1RfSU5URVJGQUNF LCBTVF9TWU5DX0FMTCwgU1RfU1lOQ19NRU1PUlksCiEgICBTVF9TWU5DX0lN QUdFUywgU1RfUEFSQU1FVEVSLCBTVF9NT0RVTEUsIFNUX1NVQk1PRFVMRSwg U1RfTU9EVUxFX1BST0MsCiEgICBTVF9OQU1FTElTVCwgU1RfTlVMTElGWSwg U1RfT1BFTiwgU1RfUEFVU0UsIFNUX1BSSVZBVEUsIFNUX1BST0dSQU0sIFNU X1BVQkxJQywKISAgIFNUX1JFQUQsIFNUX1JFVFVSTiwgU1RfUkVXSU5ELCBT VF9TVE9QLCBTVF9TVUJST1VUSU5FLCBTVF9UWVBFLCBTVF9VU0UsCiEgICBT VF9XSEVSRV9CTE9DSywgU1RfV0hFUkUsIFNUX1dBSVQsIFNUX1dSSVRFLCBT VF9BU1NJR05NRU5ULAohICAgU1RfUE9JTlRFUl9BU1NJR05NRU5ULCBTVF9T RUxFQ1RfQ0FTRSwgU1RfU0VRVUVOQ0UsIFNUX1NJTVBMRV9JRiwKISAgIFNU X1NUQVRFTUVOVF9GVU5DVElPTiwgU1RfREVSSVZFRF9ERUNMLCBTVF9MQUJF TF9BU1NJR05NRU5ULCBTVF9FTlVNLAohICAgU1RfRU5VTUVSQVRPUiwgU1Rf RU5EX0VOVU0sIFNUX1NFTEVDVF9UWVBFLCBTVF9UWVBFX0lTLCBTVF9DTEFT U19JUywKICAgIFNUX09BQ0NfUEFSQUxMRUxfTE9PUCwgU1RfT0FDQ19FTkRf UEFSQUxMRUxfTE9PUCwgU1RfT0FDQ19QQVJBTExFTCwKICAgIFNUX09BQ0Nf RU5EX1BBUkFMTEVMLCBTVF9PQUNDX0tFUk5FTFMsIFNUX09BQ0NfRU5EX0tF Uk5FTFMsIFNUX09BQ0NfREFUQSwKICAgIFNUX09BQ0NfRU5EX0RBVEEsIFNU X09BQ0NfSE9TVF9EQVRBLCBTVF9PQUNDX0VORF9IT1NUX0RBVEEsIFNUX09B Q0NfTE9PUCwKKioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0CioqKiA3 NTEsNzU2ICoqKioKLS0tIDc1MSw3NTkgLS0tLQogICAgdW5zaWduZWQgZGF0 YToxLAkJLyogU3ltYm9sIGlzIG5hbWVkIGluIGEgREFUQSBzdGF0ZW1lbnQu ICAqLwogICAgICBpc19wcm90ZWN0ZWQ6MSwJCS8qIFN5bWJvbCBoYXMgYmVl biBtYXJrZWQgYXMgcHJvdGVjdGVkLiAgKi8KICAgICAgdXNlX2Fzc29jOjEs CQkvKiBTeW1ib2wgaGFzIGJlZW4gdXNlLWFzc29jaWF0ZWQuICAqLworICAg ICB1c2VkX2luX3N1Ym1vZHVsZToxLAkvKiBTeW1ib2wgaGFzIGJlZW4gdXNl LWFzc29jaWF0ZWQgaW4gYQorIAkJCQkgICBzdWJtb2R1bGUuIE5lZWRlZCBz aW5jZSB0aGVzZSBlbnRpdGllcyBtdXN0CisgCQkJCSAgIGJlIHNldCBob3N0 IGFzc29jaWF0ZWQgdG8gYmUgY29tcGxpYW50LiAgKi8KICAgICAgdXNlX29u bHk6MSwJCQkvKiBTeW1ib2wgaGFzIGJlZW4gdXNlLWFzc29jaWF0ZWQsIHdp dGggT05MWS4gICovCiAgICAgIHVzZV9yZW5hbWU6MSwJCS8qIFN5bWJvbCBo YXMgYmVlbiB1c2UtYXNzb2NpYXRlZCBhbmQgcmVuYW1lZC4gICovCiAgICAg IGltcG9ydGVkOjEsCQkJLyogU3ltYm9sIGhhcyBiZWVuIGFzc29jaWF0ZWQg YnkgSU1QT1JULiAgKi8KKioqKioqKioqKioqKioqIHR5cGVkZWYgc3RydWN0 CioqKiA3NzgsNzgzICoqKioKLS0tIDc4MSw3OTAgLS0tLQogICAgLyogRnVu Y3Rpb24vc3Vicm91dGluZSBhdHRyaWJ1dGVzICovCiAgICB1bnNpZ25lZCBz ZXF1ZW5jZToxLCBlbGVtZW50YWw6MSwgcHVyZToxLCByZWN1cnNpdmU6MTsK ICAgIHVuc2lnbmVkIHVubWFza2FibGU6MSwgbWFza2VkOjEsIGNvbnRhaW5l ZDoxLCBtb2RfcHJvYzoxLCBhYnN0cmFjdDoxOworICAgLyogU2V0IGlmIHRo aXMgaXMgYSBtb2R1bGUgZnVuY3Rpb24gb3Igc3Vicm91dGluZS4gTm90ZSB0 aGF0IGl0IGlzIGFuCisgICAgICBhdHRyaWJ1dGUgYmVjYXVzZSBpdCBhcHBl YXJzIGFzIGEgcHJlZml4IGluIHRoZSBkZWNsYXJhdGlvbiBsaWtlCisgICAg ICBQVVJFLCBldGMuLiAgKi8KKyAgIHVuc2lnbmVkIG1vZHVsZV9wcm9jZWR1 cmU6MTsKICAKICAgIC8qIFNldCBpZiBhIChwdWJsaWMpIHN5bWJvbCBbZS5n LiBnZW5lcmljIG5hbWVdIGV4cG9zZXMgdGhpcyBzeW1ib2wsCiAgICAgICB3 aGljaCBpcyByZWxldmFudCBmb3IgcHJpdmF0ZSBtb2R1bGUgcHJvY2VkdXJl cy4gICovCioqKioqKioqKioqKioqKiBib29sIGdmY19yZWZfZGltZW5fc2l6 ZSAoZ2ZjX2FycmF5X3JlZiAqCioqKiAzMDg3LDMwOTIgKioqKgotLS0gMzA5 NCwzMTAzIC0tLS0KICB2b2lkIGdmY19mcmVlX2ludGVyZmFjZSAoZ2ZjX2lu dGVyZmFjZSAqKTsKICBpbnQgZ2ZjX2NvbXBhcmVfZGVyaXZlZF90eXBlcyAo Z2ZjX3N5bWJvbCAqLCBnZmNfc3ltYm9sICopOwogIGludCBnZmNfY29tcGFy ZV90eXBlcyAoZ2ZjX3R5cGVzcGVjICosIGdmY190eXBlc3BlYyAqKTsKKyBi b29sIGdmY19jaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3MgKGdmY19zeW1i b2wgKiwgZ2ZjX3N5bWJvbCAqLAorIAkJCQkgICAgICBib29sLCBjaGFyICos IGludCk7CisgYm9vbCBnZmNfY2hlY2tfcmVzdWx0X2NoYXJhY3RlcmlzdGlj cyAoZ2ZjX3N5bWJvbCAqLCBnZmNfc3ltYm9sICosCisgCQkJCSAgICAgICBj aGFyICosIGludCk7CiAgaW50IGdmY19jb21wYXJlX2ludGVyZmFjZXMgKGdm Y19zeW1ib2wqLCBnZmNfc3ltYm9sKiwgY29uc3QgY2hhciAqLCBpbnQsIGlu dCwKICAJCQkgICAgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3Qg Y2hhciAqKTsKICB2b2lkIGdmY19jaGVja19pbnRlcmZhY2VzIChnZmNfbmFt ZXNwYWNlICopOwpJbmRleDogZ2NjL2ZvcnRyYW4vaW50ZXJmYWNlLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vaW50ZXJmYWNl LmMJKHJldmlzaW9uIDIyNDcyNCkKLS0tIGdjYy9mb3J0cmFuL2ludGVyZmFj ZS5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioqKioqKiBzeW1ib2xfcmFu ayAoZ2ZjX3N5bWJvbCAqc3ltKQoqKiogMTA2NiwxMDc0ICoqKioKICAvKiBD aGVjayBpZiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHR3byBkdW1teSBhcmd1 bWVudHMgbWF0Y2gsCiAgICAgY2YuIEYwODoxMi4zLjIuICAqLwogIAohIHN0 YXRpYyBib29sCiEgY2hlY2tfZHVtbXlfY2hhcmFjdGVyaXN0aWNzIChnZmNf c3ltYm9sICpzMSwgZ2ZjX3N5bWJvbCAqczIsCiEgCQkJICAgICBib29sIHR5 cGVfbXVzdF9hZ3JlZSwgY2hhciAqZXJybXNnLCBpbnQgZXJyX2xlbikKICB7 CiAgICBpZiAoczEgPT0gTlVMTCB8fCBzMiA9PSBOVUxMKQogICAgICByZXR1 cm4gczEgPT0gczIgPyB0cnVlIDogZmFsc2U7Ci0tLSAxMDY2LDEwNzUgLS0t LQogIC8qIENoZWNrIGlmIHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdHdvIGR1 bW15IGFyZ3VtZW50cyBtYXRjaCwKICAgICBjZi4gRjA4OjEyLjMuMi4gICov CiAgCiEgYm9vbAohIGdmY19jaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3Mg KGdmY19zeW1ib2wgKnMxLCBnZmNfc3ltYm9sICpzMiwKISAJCQkJIGJvb2wg dHlwZV9tdXN0X2FncmVlLCBjaGFyICplcnJtc2csCiEgCQkJCSBpbnQgZXJy X2xlbikKICB7CiAgICBpZiAoczEgPT0gTlVMTCB8fCBzMiA9PSBOVUxMKQog ICAgICByZXR1cm4gczEgPT0gczIgPyB0cnVlIDogZmFsc2U7CioqKioqKioq KioqKioqKiBjaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3MgKGdmY19zeW1i b2wKKioqIDEyNzUsMTI4MiAqKioqCiAgLyogQ2hlY2sgaWYgdGhlIGNoYXJh Y3RlcmlzdGljcyBvZiB0d28gZnVuY3Rpb24gcmVzdWx0cyBtYXRjaCwKICAg ICBjZi4gRjA4OjEyLjMuMy4gICovCiAgCiEgc3RhdGljIGJvb2wKISBjaGVj a19yZXN1bHRfY2hhcmFjdGVyaXN0aWNzIChnZmNfc3ltYm9sICpzMSwgZ2Zj X3N5bWJvbCAqczIsCiAgCQkJICAgICAgY2hhciAqZXJybXNnLCBpbnQgZXJy X2xlbikKICB7CiAgICBnZmNfc3ltYm9sICpyMSwgKnIyOwotLS0gMTI3Niwx MjgzIC0tLS0KICAvKiBDaGVjayBpZiB0aGUgY2hhcmFjdGVyaXN0aWNzIG9m IHR3byBmdW5jdGlvbiByZXN1bHRzIG1hdGNoLAogICAgIGNmLiBGMDg6MTIu My4zLiAgKi8KICAKISBib29sCiEgZ2ZjX2NoZWNrX3Jlc3VsdF9jaGFyYWN0 ZXJpc3RpY3MgKGdmY19zeW1ib2wgKnMxLCBnZmNfc3ltYm9sICpzMiwKICAJ CQkJICBjaGFyICplcnJtc2csIGludCBlcnJfbGVuKQogIHsKICAgIGdmY19z eW1ib2wgKnIxLCAqcjI7CioqKioqKioqKioqKioqKiBnZmNfY29tcGFyZV9p bnRlcmZhY2VzIChnZmNfc3ltYm9sICpzMSwKKioqIDE0NzIsMTQ3OSAqKioq CiAgICAgICAgaWYgKHMxLT5hdHRyLmZ1bmN0aW9uICYmIHMyLT5hdHRyLmZ1 bmN0aW9uKQogIAl7CiAgCSAgLyogSWYgYm90aCBhcmUgZnVuY3Rpb25zLCBj aGVjayByZXN1bHQgY2hhcmFjdGVyaXN0aWNzLiAgKi8KISAJICBpZiAoIWNo ZWNrX3Jlc3VsdF9jaGFyYWN0ZXJpc3RpY3MgKHMxLCBzMiwgZXJybXNnLCBl cnJfbGVuKQohIAkgICAgICB8fCAhY2hlY2tfcmVzdWx0X2NoYXJhY3Rlcmlz dGljcyAoczIsIHMxLCBlcnJtc2csIGVycl9sZW4pKQogIAkgICAgcmV0dXJu IDA7CiAgCX0KICAKLS0tIDE0NzMsMTQ4MCAtLS0tCiAgICAgICAgaWYgKHMx LT5hdHRyLmZ1bmN0aW9uICYmIHMyLT5hdHRyLmZ1bmN0aW9uKQogIAl7CiAg CSAgLyogSWYgYm90aCBhcmUgZnVuY3Rpb25zLCBjaGVjayByZXN1bHQgY2hh cmFjdGVyaXN0aWNzLiAgKi8KISAJICBpZiAoIWdmY19jaGVja19yZXN1bHRf Y2hhcmFjdGVyaXN0aWNzIChzMSwgczIsIGVycm1zZywgZXJyX2xlbikKISAJ ICAgICAgfHwgIWdmY19jaGVja19yZXN1bHRfY2hhcmFjdGVyaXN0aWNzIChz MiwgczEsIGVycm1zZywgZXJyX2xlbikpCiAgCSAgICByZXR1cm4gMDsKICAJ fQogIAoqKioqKioqKioqKioqKiogZ2ZjX2NvbXBhcmVfaW50ZXJmYWNlcyAo Z2ZjX3N5bWJvbCAqczEsCioqKiAxNTMzLDE1MzkgKioqKgogIAlpZiAoc3Ry aWN0X2ZsYWcpCiAgCSAgewogIAkgICAgLyogQ2hlY2sgYWxsIGNoYXJhY3Rl cmlzdGljcy4gICovCiEgCSAgICBpZiAoIWNoZWNrX2R1bW15X2NoYXJhY3Rl cmlzdGljcyAoZjEtPnN5bSwgZjItPnN5bSwgdHJ1ZSwgCiAgCQkJCQkgICAg ICBlcnJtc2csIGVycl9sZW4pKQogIAkgICAgICByZXR1cm4gMDsKICAJICB9 Ci0tLSAxNTM0LDE1NDAgLS0tLQogIAlpZiAoc3RyaWN0X2ZsYWcpCiAgCSAg ewogIAkgICAgLyogQ2hlY2sgYWxsIGNoYXJhY3RlcmlzdGljcy4gICovCiEg CSAgICBpZiAoIWdmY19jaGVja19kdW1teV9jaGFyYWN0ZXJpc3RpY3MgKGYx LT5zeW0sIGYyLT5zeW0sIHRydWUsCiAgCQkJCQkJICBlcnJtc2csIGVycl9s ZW4pKQogIAkgICAgICByZXR1cm4gMDsKICAJICB9CioqKioqKioqKioqKioq KiBnZmNfY2hlY2tfdHlwZWJvdW5kX292ZXJyaWRlIChnZmNfc3ltdHJlCioq KiA0MjQxLDQyNDggKioqKgogIAkgIHJldHVybiBmYWxzZTsKICAJfQogIAoh ICAgICAgIGlmICghY2hlY2tfcmVzdWx0X2NoYXJhY3RlcmlzdGljcyAocHJv Y190YXJnZXQsIG9sZF90YXJnZXQsIGVyciwgCiEgCQkJCQkgc2l6ZW9mKGVy cikpKQogIAl7CiAgCSAgZ2ZjX2Vycm9yICgiUmVzdWx0IG1pc21hdGNoIGZv ciB0aGUgb3ZlcnJpZGluZyBwcm9jZWR1cmUgIgogIAkJICAgICAiJXFzIGF0 ICVMOiAlcyIsIHByb2MtPm5hbWUsICZ3aGVyZSwgZXJyKTsKLS0tIDQyNDIs NDI0OSAtLS0tCiAgCSAgcmV0dXJuIGZhbHNlOwogIAl9CiAgCiEgICAgICAg aWYgKCFnZmNfY2hlY2tfcmVzdWx0X2NoYXJhY3RlcmlzdGljcyAocHJvY190 YXJnZXQsIG9sZF90YXJnZXQsCiEgCQkJCQkgICAgIGVyciwgc2l6ZW9mKGVy cikpKQogIAl7CiAgCSAgZ2ZjX2Vycm9yICgiUmVzdWx0IG1pc21hdGNoIGZv ciB0aGUgb3ZlcnJpZGluZyBwcm9jZWR1cmUgIgogIAkJICAgICAiJXFzIGF0 ICVMOiAlcyIsIHByb2MtPm5hbWUsICZ3aGVyZSwgZXJyKTsKKioqKioqKioq KioqKioqIGdmY19jaGVja190eXBlYm91bmRfb3ZlcnJpZGUgKGdmY19zeW10 cmUKKioqIDQyOTMsNDI5OSAqKioqCiAgCX0KICAKICAgICAgICBjaGVja190 eXBlID0gcHJvY19wYXNzX2FyZyAhPSBhcmdwb3MgJiYgb2xkX3Bhc3NfYXJn ICE9IGFyZ3BvczsKISAgICAgICBpZiAoIWNoZWNrX2R1bW15X2NoYXJhY3Rl cmlzdGljcyAocHJvY19mb3JtYWwtPnN5bSwgb2xkX2Zvcm1hbC0+c3ltLCAK ICAJCQkJCWNoZWNrX3R5cGUsIGVyciwgc2l6ZW9mKGVycikpKQogIAl7CiAg CSAgZ2ZjX2Vycm9yICgiQXJndW1lbnQgbWlzbWF0Y2ggZm9yIHRoZSBvdmVy cmlkaW5nIHByb2NlZHVyZSAiCi0tLSA0Mjk0LDQzMDAgLS0tLQogIAl9CiAg CiAgICAgICAgY2hlY2tfdHlwZSA9IHByb2NfcGFzc19hcmcgIT0gYXJncG9z ICYmIG9sZF9wYXNzX2FyZyAhPSBhcmdwb3M7CiEgICAgICAgaWYgKCFnZmNf Y2hlY2tfZHVtbXlfY2hhcmFjdGVyaXN0aWNzIChwcm9jX2Zvcm1hbC0+c3lt LCBvbGRfZm9ybWFsLT5zeW0sCiAgCQkJCQkgICAgY2hlY2tfdHlwZSwgZXJy LCBzaXplb2YoZXJyKSkpCiAgCXsKICAJICBnZmNfZXJyb3IgKCJBcmd1bWVu dCBtaXNtYXRjaCBmb3IgdGhlIG92ZXJyaWRpbmcgcHJvY2VkdXJlICIKSW5k ZXg6IGdjYy9mb3J0cmFuL21hdGNoLmgKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQoqKiogZ2NjL2ZvcnRyYW4vbWF0Y2guaAkocmV2aXNpb24gMjI0NzI0KQot LS0gZ2NjL2ZvcnRyYW4vbWF0Y2guaAkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKiogbWF0Y2ggZ2ZjX21hdGNoX2dlbmVyaWMgKHZvaWQpOwoqKiog MjAzLDIwOCAqKioqCi0tLSAyMDMsMjA5IC0tLS0KICBtYXRjaCBnZmNfbWF0 Y2hfZnVuY3Rpb25fZGVjbCAodm9pZCk7CiAgbWF0Y2ggZ2ZjX21hdGNoX2Vu dHJ5ICh2b2lkKTsKICBtYXRjaCBnZmNfbWF0Y2hfc3Vicm91dGluZSAodm9p ZCk7CisgbWF0Y2ggZ2ZjX21hdGNoX3N1Ym1vZF9wcm9jICh2b2lkKTsKICBt YXRjaCBnZmNfbWF0Y2hfZGVyaXZlZF9kZWNsICh2b2lkKTsKICBtYXRjaCBn ZmNfbWF0Y2hfZmluYWxfZGVjbCAodm9pZCk7CiAgCioqKioqKioqKioqKioq KiBtYXRjaCBnZmNfbWF0Y2hfZXhwciAoZ2ZjX2V4cHIgKiopOwoqKiogMjkx LDI5NiAqKioqCi0tLSAyOTIsMjk4IC0tLS0KICAKICAvKiBtb2R1bGUuYy4g ICovCiAgbWF0Y2ggZ2ZjX21hdGNoX3VzZSAodm9pZCk7CisgbWF0Y2ggZ2Zj X21hdGNoX3N1Ym1vZHVsZSAodm9pZCk7CiAgdm9pZCBnZmNfdXNlX21vZHVs ZXMgKHZvaWQpOwogIAogICNlbmRpZiAgLyogR0ZDX01BVENIX0ggICovCklu ZGV4OiBnY2MvZm9ydHJhbi9tb2R1bGUuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09CioqKiBnY2MvZm9ydHJhbi9tb2R1bGUuYwkocmV2aXNpb24gMjI0NzI0 KQotLS0gZ2NjL2ZvcnRyYW4vbW9kdWxlLmMJKHdvcmtpbmcgY29weSkKKioq KioqKioqKioqKioqIGNsZWFudXA6CioqKiA3MTYsNzIxICoqKioKLS0tIDcx Niw3ODIgLS0tLQogIH0KICAKICAKKyAvKiBNYXRjaCBhIFNVQk1PRFVMRSBz dGF0ZW1lbnQuICAqLworIAorIG1hdGNoCisgZ2ZjX21hdGNoX3N1Ym1vZHVs ZSAodm9pZCkKKyB7CisgICBtYXRjaCBtOworICAgY2hhciBuYW1lW0dGQ19N QVhfU1lNQk9MX0xFTiArIDFdOworICAgZ2ZjX3VzZV9saXN0ICp1c2VfbGlz dDsKKyAKKyAgIGlmICghZ2ZjX25vdGlmeV9zdGQgKEdGQ19TVERfRjIwMDgs ICJTVUJNT0RVTEUgZGVjbGFyYXRpb24gYXQgJUMiKSkKKyAgICAgcmV0dXJu IE1BVENIX0VSUk9SOworIAorICAgZ2ZjX25ld19ibG9jayA9IE5VTEw7Cisg ICBnY2NfYXNzZXJ0IChtb2R1bGVfbGlzdCA9PSBOVUxMKTsKKyAKKyAgIGlm IChnZmNfbWF0Y2hfY2hhciAoJygnKSAhPSBNQVRDSF9ZRVMpCisgICAgIGdv dG8gc3ludGF4OworIAorICAgd2hpbGUgKDEpCisgICAgIHsKKyAgICAgICBt ID0gZ2ZjX21hdGNoICgiICVuIiwgbmFtZSk7CisgICAgICAgaWYgKG0gIT0g TUFUQ0hfWUVTKQorIAlnb3RvIHN5bnRheDsKKyAKKyAgICAgICB1c2VfbGlz dCA9IGdmY19nZXRfdXNlX2xpc3QgKCk7CisgICAgICAgdXNlX2xpc3QtPm1v ZHVsZV9uYW1lID0gZ2ZjX2dldF9zdHJpbmcgKG5hbWUpOworICAgICAgIHVz ZV9saXN0LT53aGVyZSA9IGdmY19jdXJyZW50X2xvY3VzOworIAorICAgICAg IGlmIChtb2R1bGVfbGlzdCkKKyAJeworIAkgIGdmY191c2VfbGlzdCAqbGFz dCA9IG1vZHVsZV9saXN0OworIAkgIHdoaWxlIChsYXN0LT5uZXh0KQorIAkg ICAgbGFzdCA9IGxhc3QtPm5leHQ7CisgCSAgbGFzdC0+bmV4dCA9IHVzZV9s aXN0OworIAl9CisgICAgICAgZWxzZQorIAltb2R1bGVfbGlzdCA9IHVzZV9s aXN0OworIAorICAgICAgIGlmIChnZmNfbWF0Y2hfY2hhciAoJyknKSA9PSBN QVRDSF9ZRVMpCisgCWJyZWFrOworIAorICAgICAgIGlmIChnZmNfbWF0Y2hf Y2hhciAoJzonKSAhPSBNQVRDSF9ZRVMpCisgCWdvdG8gc3ludGF4OworICAg ICB9CisgCisgICBtID0gZ2ZjX21hdGNoICgiICVzJXQiLCAmZ2ZjX25ld19i bG9jayk7CisgICBpZiAobSAhPSBNQVRDSF9ZRVMpCisgICAgIGdvdG8gc3lu dGF4OworIAorICAgaWYgKCFnZmNfYWRkX2ZsYXZvciAoJmdmY19uZXdfYmxv Y2stPmF0dHIsIEZMX01PRFVMRSwKKyAJCSAgICAgICBnZmNfbmV3X2Jsb2Nr LT5uYW1lLCBOVUxMKSkKKyAgICAgcmV0dXJuIE1BVENIX0VSUk9SOworIAor ICAgcmV0dXJuIE1BVENIX1lFUzsKKyAKKyBzeW50YXg6CisgICBnZmNfZXJy b3IgKCJTeW50YXggZXJyb3IgaW4gU1VCTU9EVUxFIHN0YXRlbWVudCBhdCAl QyIpOworICAgcmV0dXJuIE1BVENIX0VSUk9SOworIH0KKyAKKyAKICAvKiBH aXZlbiBhIG5hbWUgYW5kIGEgbnVtYmVyLCBpbnN0LCByZXR1cm4gdGhlIGlu c3QgbmFtZQogICAgIHVuZGVyIHdoaWNoIHRvIGxvYWQgdGhpcyBzeW1ib2wu IFJldHVybnMgTlVMTCBpZiB0aGlzCiAgICAgc3ltYm9sIHNob3VsZG4ndCBi ZSBsb2FkZWQuIElmIGluc3QgaXMgemVybywgcmV0dXJucwoqKioqKioqKioq KioqKiogdHlwZWRlZiBlbnVtCioqKiAxODg3LDE4OTMgKioqKgogICAgQUJf SVNfQ0xBU1MsIEFCX1BST0NFRFVSRSwgQUJfUFJPQ19QT0lOVEVSLCBBQl9B U1lOQ0hST05PVVMsIEFCX0NPRElNRU5TSU9OLAogICAgQUJfQ09BUlJBWV9D T01QLCBBQl9WVFlQRSwgQUJfVlRBQiwgQUJfQ09OVElHVU9VUywgQUJfQ0xB U1NfUE9JTlRFUiwKICAgIEFCX0lNUExJQ0lUX1BVUkUsIEFCX0FSVElGSUNJ QUwsIEFCX1VOTElNSVRFRF9QT0xZLCBBQl9PTVBfREVDTEFSRV9UQVJHRVQs CiEgICBBQl9BUlJBWV9PVVRFUl9ERVBFTkRFTkNZCiAgfQogIGFiX2F0dHJp YnV0ZTsKICAKLS0tIDE5NDgsMTk1NCAtLS0tCiAgICBBQl9JU19DTEFTUywg QUJfUFJPQ0VEVVJFLCBBQl9QUk9DX1BPSU5URVIsIEFCX0FTWU5DSFJPTk9V UywgQUJfQ09ESU1FTlNJT04sCiAgICBBQl9DT0FSUkFZX0NPTVAsIEFCX1ZU WVBFLCBBQl9WVEFCLCBBQl9DT05USUdVT1VTLCBBQl9DTEFTU19QT0lOVEVS LAogICAgQUJfSU1QTElDSVRfUFVSRSwgQUJfQVJUSUZJQ0lBTCwgQUJfVU5M SU1JVEVEX1BPTFksIEFCX09NUF9ERUNMQVJFX1RBUkdFVCwKISAgIEFCX0FS UkFZX09VVEVSX0RFUEVOREVOQ1ksIEFCX01PRFVMRV9QUk9DRURVUkUKICB9 CiAgYWJfYXR0cmlidXRlOwogIAoqKioqKioqKioqKioqKiogc3RhdGljIGNv bnN0IG1zdHJpbmcgYXR0cl9iaXRzW10gPQoqKiogMTk0NCwxOTQ5ICoqKioK LS0tIDIwMDUsMjAxMSAtLS0tCiAgICAgIG1pbml0ICgiVU5MSU1JVEVEX1BP TFkiLCBBQl9VTkxJTUlURURfUE9MWSksCiAgICAgIG1pbml0ICgiT01QX0RF Q0xBUkVfVEFSR0VUIiwgQUJfT01QX0RFQ0xBUkVfVEFSR0VUKSwKICAgICAg bWluaXQgKCJBUlJBWV9PVVRFUl9ERVBFTkRFTkNZIiwgQUJfQVJSQVlfT1VU RVJfREVQRU5ERU5DWSksCisgICAgIG1pbml0ICgiTU9EVUxFX1BST0NFRFVS RSIsIEFCX01PRFVMRV9QUk9DRURVUkUpLAogICAgICBtaW5pdCAoTlVMTCwg LTEpCiAgfTsKICAKKioqKioqKioqKioqKioqIG1pb19zeW1ib2xfYXR0cmli dXRlIChzeW1ib2xfYXR0cmlidXRlICoKKioqIDIxMjYsMjEzMSAqKioqCi0t LSAyMTg4LDIxOTUgLS0tLQogIAlNSU9fTkFNRSAoYWJfYXR0cmlidXRlKSAo QUJfT01QX0RFQ0xBUkVfVEFSR0VULCBhdHRyX2JpdHMpOwogICAgICAgIGlm IChhdHRyLT5hcnJheV9vdXRlcl9kZXBlbmRlbmN5KQogIAlNSU9fTkFNRSAo YWJfYXR0cmlidXRlKSAoQUJfQVJSQVlfT1VURVJfREVQRU5ERU5DWSwgYXR0 cl9iaXRzKTsKKyAgICAgICBpZiAoYXR0ci0+bW9kdWxlX3Byb2NlZHVyZSkK KyAJTUlPX05BTUUgKGFiX2F0dHJpYnV0ZSkgKEFCX01PRFVMRV9QUk9DRURV UkUsIGF0dHJfYml0cyk7CiAgCiAgICAgICAgbWlvX3JwYXJlbiAoKTsKICAK KioqKioqKioqKioqKioqIG1pb19zeW1ib2xfYXR0cmlidXRlIChzeW1ib2xf YXR0cmlidXRlICoKKioqIDIyOTUsMjMwMCAqKioqCi0tLSAyMzU5LDIzNjcg LS0tLQogIAkgICAgY2FzZSBBQl9BUlJBWV9PVVRFUl9ERVBFTkRFTkNZOgog IAkgICAgICBhdHRyLT5hcnJheV9vdXRlcl9kZXBlbmRlbmN5ID0xOwogIAkg ICAgICBicmVhazsKKyAJICAgIGNhc2UgQUJfTU9EVUxFX1BST0NFRFVSRToK KyAJICAgICAgYXR0ci0+bW9kdWxlX3Byb2NlZHVyZSA9MTsKKyAJICAgICAg YnJlYWs7CiAgCSAgICB9CiAgCX0KICAgICAgfQoqKioqKioqKioqKioqKiog Z2ZjX3VzZV9tb2R1bGUgKGdmY191c2VfbGlzdCAqbW9kdWxlKQoqKiogNjc1 Nyw2NzY0ICoqKioKICAKICAgIC8qIE1ha2Ugc3VyZSB3ZSdyZSBub3QgcmVh ZGluZyB0aGUgc2FtZSBtb2R1bGUgdGhhdCB3ZSBtYXkgYmUgYnVpbGRpbmcu ICAqLwogICAgZm9yIChwID0gZ2ZjX3N0YXRlX3N0YWNrOyBwOyBwID0gcC0+ cHJldmlvdXMpCiEgICAgIGlmIChwLT5zdGF0ZSA9PSBDT01QX01PRFVMRSAm JiBzdHJjbXAgKHAtPnN5bS0+bmFtZSwgbW9kdWxlX25hbWUpID09IDApCiEg ICAgICAgZ2ZjX2ZhdGFsX2Vycm9yICgiQ2FuJ3QgVVNFIHRoZSBzYW1lIG1v ZHVsZSB3ZSdyZSBidWlsZGluZyEiKTsKICAKICAgIGluaXRfcGlfdHJlZSAo KTsKICAgIGluaXRfdHJ1ZV9uYW1lX3RyZWUgKCk7Ci0tLSA2ODI0LDY4MzMg LS0tLQogIAogICAgLyogTWFrZSBzdXJlIHdlJ3JlIG5vdCByZWFkaW5nIHRo ZSBzYW1lIG1vZHVsZSB0aGF0IHdlIG1heSBiZSBidWlsZGluZy4gICovCiAg ICBmb3IgKHAgPSBnZmNfc3RhdGVfc3RhY2s7IHA7IHAgPSBwLT5wcmV2aW91 cykKISAgICAgaWYgKChwLT5zdGF0ZSA9PSBDT01QX01PRFVMRSB8fCBwLT5z dGF0ZSA9PSBDT01QX1NVQk1PRFVMRSkKISAJICYmIHN0cmNtcCAocC0+c3lt LT5uYW1lLCBtb2R1bGVfbmFtZSkgPT0gMCkKISAgICAgICBnZmNfZmF0YWxf ZXJyb3IgKCJDYW4ndCBVU0UgdGhlIHNhbWUgJXNtb2R1bGUgd2UncmUgYnVp bGRpbmchIiwKISAJCSAgICAgICBwLT5zdGF0ZSA9PSBDT01QX1NVQk1PRFVM RSA/ICJzdWIiIDogIiIpOwogIAogICAgaW5pdF9waV90cmVlICgpOwogICAg aW5pdF90cnVlX25hbWVfdHJlZSAoKTsKSW5kZXg6IGdjYy9mb3J0cmFuL3Bh cnNlLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4v cGFyc2UuYwkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2NjL2ZvcnRyYW4vcGFy c2UuYwkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZGVjb2RlX3N0 YXRlbWVudCAodm9pZCkKKioqIDM2OSwzNzQgKioqKgotLS0gMzY5LDM4NCAt LS0tCiAgICBnZmNfdW5kb19zeW1ib2xzICgpOwogICAgZ2ZjX2N1cnJlbnRf bG9jdXMgPSBvbGRfbG9jdXM7CiAgCisgICBpZiAoZ2ZjX21hdGNoX3N1Ym1v ZF9wcm9jICgpID09IE1BVENIX1lFUykKKyAgICAgeworICAgICAgIGlmIChn ZmNfbmV3X2Jsb2NrLT5hdHRyLnN1YnJvdXRpbmUpCisgCXJldHVybiBTVF9T VUJST1VUSU5FOworICAgICAgIGVsc2UgaWYgKGdmY19uZXdfYmxvY2stPmF0 dHIuZnVuY3Rpb24pCisgCXJldHVybiBTVF9GVU5DVElPTjsKKyAgICAgfQor ICAgZ2ZjX3VuZG9fc3ltYm9scyAoKTsKKyAgIGdmY19jdXJyZW50X2xvY3Vz ID0gb2xkX2xvY3VzOworIAogICAgLyogQ2hlY2sgZm9yIHRoZSBJRiwgRE8s IFNFTEVDVCwgV0hFUkUsIEZPUkFMTCwgQ1JJVElDQUwsIEJMT0NLIGFuZCBB U1NPQ0lBVEUKICAgICAgIHN0YXRlbWVudHMsIHdoaWNoIG1pZ2h0IGJlZ2lu IHdpdGggYSBibG9jayBsYWJlbC4gIFRoZSBtYXRjaCBmdW5jdGlvbnMgZm9y CiAgICAgICB0aGVzZSBzdGF0ZW1lbnRzIGFyZSB1bnVzdWFsIGluIHRoYXQg dGhlaXIga2V5d29yZCBpcyBub3Qgc2VlbiBiZWZvcmUKKioqKioqKioqKioq KioqIGRlY29kZV9zdGF0ZW1lbnQgKHZvaWQpCioqKiA1MjIsNTI3ICoqKioK LS0tIDUzMiw1MzggLS0tLQogICAgICAgIG1hdGNoICgic2VxdWVuY2UiLCBn ZmNfbWF0Y2hfZW9zLCBTVF9TRVFVRU5DRSk7CiAgICAgICAgbWF0Y2ggKCJz dG9wIiwgZ2ZjX21hdGNoX3N0b3AsIFNUX1NUT1ApOwogICAgICAgIG1hdGNo ICgic2F2ZSIsIGdmY19tYXRjaF9zYXZlLCBTVF9BVFRSX0RFQ0wpOworICAg ICAgIG1hdGNoICgic3VibW9kdWxlIiwgZ2ZjX21hdGNoX3N1Ym1vZHVsZSwg U1RfU1VCTU9EVUxFKTsKICAgICAgICBtYXRjaCAoInN5bmMgYWxsIiwgZ2Zj X21hdGNoX3N5bmNfYWxsLCBTVF9TWU5DX0FMTCk7CiAgICAgICAgbWF0Y2gg KCJzeW5jIGltYWdlcyIsIGdmY19tYXRjaF9zeW5jX2ltYWdlcywgU1RfU1lO Q19JTUFHRVMpOwogICAgICAgIG1hdGNoICgic3luYyBtZW1vcnkiLCBnZmNf bWF0Y2hfc3luY19tZW1vcnksIFNUX1NZTkNfTUVNT1JZKTsKKioqKioqKioq KioqKioqIGdmY19lbmNsb3NpbmdfdW5pdCAoZ2ZjX2NvbXBpbGVfc3RhdGUg KgoqKiogMTUzNCwxNTQxICoqKioKICAKICAgIGZvciAocCA9IGdmY19zdGF0 ZV9zdGFjazsgcDsgcCA9IHAtPnByZXZpb3VzKQogICAgICBpZiAocC0+c3Rh dGUgPT0gQ09NUF9GVU5DVElPTiB8fCBwLT5zdGF0ZSA9PSBDT01QX1NVQlJP VVRJTkUKISAJfHwgcC0+c3RhdGUgPT0gQ09NUF9NT0RVTEUgfHwgcC0+c3Rh dGUgPT0gQ09NUF9CTE9DS19EQVRBCiEgCXx8IHAtPnN0YXRlID09IENPTVBf UFJPR1JBTSkKICAgICAgICB7CiAgCiAgCWlmIChyZXN1bHQgIT0gTlVMTCkK LS0tIDE1NDUsMTU1MiAtLS0tCiAgCiAgICBmb3IgKHAgPSBnZmNfc3RhdGVf c3RhY2s7IHA7IHAgPSBwLT5wcmV2aW91cykKICAgICAgaWYgKHAtPnN0YXRl ID09IENPTVBfRlVOQ1RJT04gfHwgcC0+c3RhdGUgPT0gQ09NUF9TVUJST1VU SU5FCiEgCXx8IHAtPnN0YXRlID09IENPTVBfTU9EVUxFIHx8IHAtPnN0YXRl ID09IENPTVBfU1VCTU9EVUxFCiEgCXx8IHAtPnN0YXRlID09IENPTVBfQkxP Q0tfREFUQSB8fCBwLT5zdGF0ZSA9PSBDT01QX1BST0dSQU0pCiAgICAgICAg ewogIAogIAlpZiAocmVzdWx0ICE9IE5VTEwpCioqKioqKioqKioqKioqKiBn ZmNfYXNjaWlfc3RhdGVtZW50IChnZmNfc3RhdGVtZW50IHN0KQoqKiogMTY2 MCwxNjY1ICoqKioKLS0tIDE2NzEsMTY3OSAtLS0tCiAgICAgIGNhc2UgU1Rf RU5EX01PRFVMRToKICAgICAgICBwID0gIkVORCBNT0RVTEUiOwogICAgICAg IGJyZWFrOworICAgICBjYXNlIFNUX0VORF9TVUJNT0RVTEU6CisgICAgICAg cCA9ICJFTkQgU1VCTU9EVUxFIjsKKyAgICAgICBicmVhazsKICAgICAgY2Fz ZSBTVF9FTkRfUFJPR1JBTToKICAgICAgICBwID0gIkVORCBQUk9HUkFNIjsK ICAgICAgICBicmVhazsKKioqKioqKioqKioqKioqIGdmY19hc2NpaV9zdGF0 ZW1lbnQgKGdmY19zdGF0ZW1lbnQgc3QpCioqKiAxNzQyLDE3NDcgKioqKgot LS0gMTc1NiwxNzY0IC0tLS0KICAgICAgY2FzZSBTVF9NT0RVTEU6CiAgICAg ICAgcCA9ICJNT0RVTEUiOwogICAgICAgIGJyZWFrOworICAgICBjYXNlIFNU X1NVQk1PRFVMRToKKyAgICAgICBwID0gIlNVQk1PRFVMRSI7CisgICAgICAg YnJlYWs7CiAgICAgIGNhc2UgU1RfUEFVU0U6CiAgICAgICAgcCA9ICJQQVVT RSI7CiAgICAgICAgYnJlYWs7CioqKioqKioqKioqKioqKiBhY2NlcHRfc3Rh dGVtZW50IChnZmNfc3RhdGVtZW50IHN0KQoqKiogMjE4NiwyMTkxICoqKioK LS0tIDIyMDMsMjIwOSAtLS0tCiAgICAgIGNhc2UgU1RfRlVOQ1RJT046CiAg ICAgIGNhc2UgU1RfU1VCUk9VVElORToKICAgICAgY2FzZSBTVF9NT0RVTEU6 CisgICAgIGNhc2UgU1RfU1VCTU9EVUxFOgogICAgICAgIGdmY19jdXJyZW50 X25zLT5wcm9jX25hbWUgPSBnZmNfbmV3X2Jsb2NrOwogICAgICAgIGJyZWFr OwogIAoqKioqKioqKioqKioqKiogZGVjbFN0OgoqKiogMzI4MCwzMjg2ICoq KioKICAJICBicmVhazsKICAKICAJY2FzZSBTVF9TVEFURU1FTlRfRlVOQ1RJ T046CiEgCSAgaWYgKGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBfTU9E VUxFKQogIAkgICAgewogIAkgICAgICB1bmV4cGVjdGVkX3N0YXRlbWVudCAo c3QpOwogIAkgICAgICBicmVhazsKLS0tIDMyOTgsMzMwNSAtLS0tCiAgCSAg YnJlYWs7CiAgCiAgCWNhc2UgU1RfU1RBVEVNRU5UX0ZVTkNUSU9OOgohIAkg IGlmIChnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX01PRFVMRQohIAkg ICAgICB8fCBnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX1NVQk1PRFVM RSkKICAJICAgIHsKICAJICAgICAgdW5leHBlY3RlZF9zdGF0ZW1lbnQgKHN0 KTsKICAJICAgICAgYnJlYWs7CioqKioqKioqKioqKioqKiBwYXJzZV9jb250 YWluZWQgKGludCBtb2R1bGUpCioqKiA0OTAzLDQ5MDggKioqKgotLS0gNDky Miw0OTI4IC0tLS0KICAJLyogVGhlc2Ugc3RhdGVtZW50cyBhcmUgYXNzb2Np YXRlZCB3aXRoIHRoZSBlbmQgb2YgdGhlIGhvc3QgdW5pdC4gICovCiAgCWNh c2UgU1RfRU5EX0ZVTkNUSU9OOgogIAljYXNlIFNUX0VORF9NT0RVTEU6Cisg CWNhc2UgU1RfRU5EX1NVQk1PRFVMRToKICAJY2FzZSBTVF9FTkRfUFJPR1JB TToKICAJY2FzZSBTVF9FTkRfU1VCUk9VVElORToKICAJICBhY2NlcHRfc3Rh dGVtZW50IChzdCk7CioqKioqKioqKioqKioqKiBwYXJzZV9jb250YWluZWQg KGludCBtb2R1bGUpCioqKiA0OTE5LDQ5MjUgKioqKgogIAl9CiAgICAgIH0K ICAgIHdoaWxlIChzdCAhPSBTVF9FTkRfRlVOQ1RJT04gJiYgc3QgIT0gU1Rf RU5EX1NVQlJPVVRJTkUKISAJICYmIHN0ICE9IFNUX0VORF9NT0RVTEUgJiYg c3QgIT0gU1RfRU5EX1BST0dSQU0pOwogIAogICAgLyogVGhlIGZpcnN0IG5h bWVzcGFjZSBpbiB0aGUgbGlzdCBpcyBndWFyYW50ZWVkIHRvIG5vdCBoYXZl CiAgICAgICBhbnl0aGluZyAod29ydGh3aGlsZSkgaW4gaXQuICAqLwotLS0g NDkzOSw0OTQ2IC0tLS0KICAJfQogICAgICB9CiAgICB3aGlsZSAoc3QgIT0g U1RfRU5EX0ZVTkNUSU9OICYmIHN0ICE9IFNUX0VORF9TVUJST1VUSU5FCiEg CSAmJiBzdCAhPSBTVF9FTkRfTU9EVUxFICYmIHN0ICE9IFNUX0VORF9TVUJN T0RVTEUKISAJICYmIHN0ICE9IFNUX0VORF9QUk9HUkFNKTsKICAKICAgIC8q IFRoZSBmaXJzdCBuYW1lc3BhY2UgaW4gdGhlIGxpc3QgaXMgZ3VhcmFudGVl ZCB0byBub3QgaGF2ZQogICAgICAgYW55dGhpbmcgKHdvcnRod2hpbGUpIGlu IGl0LiAgKi8KKioqKioqKioqKioqKioqIGNvbnRhaW5zOgoqKiogNTAwNiw1 MDEyICoqKioKICAgICAgaWYgKHAtPnN0YXRlID09IENPTVBfQ09OVEFJTlMp CiAgICAgICAgbisrOwogIAohICAgaWYgKGdmY19maW5kX3N0YXRlIChDT01Q X01PRFVMRSkgPT0gdHJ1ZSkKICAgICAgbi0tOwogIAogICAgaWYgKG4gPiAw KQotLS0gNTAyNyw1MDM0IC0tLS0KICAgICAgaWYgKHAtPnN0YXRlID09IENP TVBfQ09OVEFJTlMpCiAgICAgICAgbisrOwogIAohICAgaWYgKGdmY19maW5k X3N0YXRlIChDT01QX01PRFVMRSkgPT0gdHJ1ZQohICAgICAgIHx8IGdmY19m aW5kX3N0YXRlIChDT01QX1NVQk1PRFVMRSkgPT0gdHJ1ZSkKICAgICAgbi0t OwogIAogICAgaWYgKG4gPiAwKQoqKioqKioqKioqKioqKiogZG9uZToKKioq IDUwMjQsNTAyOSAqKioqCi0tLSA1MDQ2LDUwNTIgLS0tLQogICAgZ2ZjX2N1 cnJlbnRfbnMtPmNvZGUgPSBnZmNfc3RhdGVfc3RhY2stPmhlYWQ7CiAgICBp ZiAoZ2ZjX3N0YXRlX3N0YWNrLT5zdGF0ZSA9PSBDT01QX1BST0dSQU0KICAg ICAgICB8fCBnZmNfc3RhdGVfc3RhY2stPnN0YXRlID09IENPTVBfTU9EVUxF CisgICAgICAgfHwgZ2ZjX3N0YXRlX3N0YWNrLT5zdGF0ZSA9PSBDT01QX1NV Qk1PRFVMRQogICAgICAgIHx8IGdmY19zdGF0ZV9zdGFjay0+c3RhdGUgPT0g Q09NUF9TVUJST1VUSU5FCiAgICAgICAgfHwgZ2ZjX3N0YXRlX3N0YWNrLT5z dGF0ZSA9PSBDT01QX0ZVTkNUSU9OCiAgICAgICAgfHwgZ2ZjX3N0YXRlX3N0 YWNrLT5zdGF0ZSA9PSBDT01QX0JMT0NLKQoqKioqKioqKioqKioqKiogcGFy c2VfYmxvY2tfZGF0YSAodm9pZCkKKioqIDUxMjcsNTEzMiAqKioqCi0tLSA1 MTUwLDUxODUgLS0tLQogIH0KICAKICAKKyAvKiBGb2xsb3dpbmcgdGhlIGFz c29jaWF0aW9uIG9mIHRoZSBhbmNlc3RvciAoc3ViKW1vZHVsZSBzeW1ib2xz LCB0aGV5CisgICAgbXVzdCBiZSBzZXQgaG9zdCByYXRoZXIgdGhhbiB1c2Ug YXNzb2NpYXRlZCBhbmQgYWxsIG11c3QgYmUgcHVibGljLgorICAgIFRoZXkg YXJlIGZsYWdnZWQgdXAgYnkgJ3VzZWRfaW5fc3VibW9kdWxlJyBzbyB0aGF0 IHRoZXkgY2FuIGJlIHNldAorICAgIERFQ0xfRVhURVJOQUwgaW4gdHJhbnNf ZGVjbC5jKGdmY19maW5pc2hfdmFyX2RlY2wpLiAgT3RoZXJ3aXNlIHRoZQor ICAgIGxpbmtlciBjaG9rZXMgb24gbXVsdGlwbGUgc3ltYm9sIGRlZmluaXRp b25zLiAgKi8KKyAKKyBzdGF0aWMgdm9pZAorIHNldF9zeW1zX2hvc3RfYXNz b2MgKGdmY19zeW1ib2wgKnN5bSkKKyB7CisgICBnZmNfY29tcG9uZW50ICpj OworIAorICAgaWYgKHN5bSA9PSBOVUxMKQorICAgICByZXR1cm47CisgCisg ICBpZiAoc3ltLT5hdHRyLm1vZHVsZV9wcm9jZWR1cmUpCisgICAgIHN5bS0+ YXR0ci5leHRlcm5hbCA9IDA7CisgCisgLyogIHN5bS0+YXR0ci5hY2Nlc3Mg PSBBQ0NFU1NfUFVCTElDOyAgKi8KKyAKKyAgIHN5bS0+YXR0ci51c2VfYXNz b2MgPSAwOworICAgc3ltLT5hdHRyLmhvc3RfYXNzb2MgPSAxOworICAgc3lt LT5hdHRyLnVzZWRfaW5fc3VibW9kdWxlID0xOworIAorICAgaWYgKHN5bS0+ YXR0ci5mbGF2b3IgPT0gRkxfREVSSVZFRCkKKyAgICAgeworICAgICAgIGZv ciAoYyA9IHN5bS0+Y29tcG9uZW50czsgYzsgYyA9IGMtPm5leHQpCisgCWMt PmF0dHIuYWNjZXNzID0gQUNDRVNTX1BVQkxJQzsKKyAgICAgfQorIH0KKyAK ICAvKiBQYXJzZSBhIG1vZHVsZSBzdWJwcm9ncmFtLiAgKi8KICAKICBzdGF0 aWMgdm9pZAoqKioqKioqKioqKioqKiogcGFyc2VfbW9kdWxlICh2b2lkKQoq KiogNTE0Niw1MTUxICoqKioKLS0tIDUxOTksNTIxMyAtLS0tCiAgICAgICAg cy0+ZGVmaW5lZCA9IDE7CiAgICAgIH0KICAKKyAgIC8qIFNvbWV0aGluZyBp cyBudWxsaW5nIHRoZSBtb2R1bGVfbGlzdCBhZnRlciB0aGlzIHBvaW50LiBU aGlzIGlzIGdvb2QKKyAgICAgIHNpbmNlIGl0IGFsbG93cyB1cyB0byAnVVNF JyB0aGUgcGFyZW50IG1vZHVsZXMgdGhhdCB0aGUgc3VibW9kdWxlCisgICAg ICBpbmhlcml0cyBhbmQgdG8gc2V0IChtb3N0KSBvZiB0aGUgc3ltYm9scyBh cyBob3N0IGFzc29jaWF0ZWQuICAqLworICAgaWYgKGdmY19jdXJyZW50X3N0 YXRlICgpID09IENPTVBfU1VCTU9EVUxFKQorICAgICB7CisgICAgICAgdXNl X21vZHVsZXMgKCk7CisgICAgICAgZ2ZjX3RyYXZlcnNlX25zIChnZmNfY3Vy cmVudF9ucywgc2V0X3N5bXNfaG9zdF9hc3NvYyk7CisgICAgIH0KKyAKICAg IHN0ID0gcGFyc2Vfc3BlYyAoU1RfTk9ORSk7CiAgCiAgICBlcnJvciA9IGZh bHNlOwoqKioqKioqKioqKioqKiogbG9vcDoKKioqIDUxNjAsNTE2NSAqKioq Ci0tLSA1MjIyLDUyMjggLS0tLQogICAgICAgIGJyZWFrOwogIAogICAgICBj YXNlIFNUX0VORF9NT0RVTEU6CisgICAgIGNhc2UgU1RfRU5EX1NVQk1PRFVM RToKICAgICAgICBhY2NlcHRfc3RhdGVtZW50IChzdCk7CiAgICAgICAgYnJl YWs7CiAgCioqKioqKioqKioqKioqKiBsb29wOgoqKiogNTQ1NSw1NDYwICoq KioKLS0tIDU1MTgsNTUzMSAtLS0tCiAgICAgICAgcGFyc2VfbW9kdWxlICgp OwogICAgICAgIGJyZWFrOwogIAorICAgICBjYXNlIFNUX1NVQk1PRFVMRToK KyAgICAgICBwdXNoX3N0YXRlICgmcywgQ09NUF9TVUJNT0RVTEUsIGdmY19u ZXdfYmxvY2spOworICAgICAgIGFjY2VwdF9zdGF0ZW1lbnQgKHN0KTsKKyAK KyAgICAgICBnZmNfZ2V0X2Vycm9ycyAoTlVMTCwgJmVycm9yc19iZWZvcmUp OworICAgICAgIHBhcnNlX21vZHVsZSAoKTsKKyAgICAgICBicmVhazsKKyAK ICAgICAgLyogQW55dGhpbmcgZWxzZSBzdGFydHMgYSBuYW1lbGVzcyBtYWlu IHByb2dyYW0gYmxvY2suICAqLwogICAgICBkZWZhdWx0OgogICAgICAgIGlm IChzZWVuX3Byb2dyYW0pCioqKioqKioqKioqKioqKiBsb29wOgoqKiogNTQ3 OSw1NDg1ICoqKioKICAgICAgZ2ZjX2R1bXBfcGFyc2VfdHJlZSAoZ2ZjX2N1 cnJlbnRfbnMsIHN0ZG91dCk7CiAgCiAgICBnZmNfZ2V0X2Vycm9ycyAoTlVM TCwgJmVycm9ycyk7CiEgICBpZiAocy5zdGF0ZSA9PSBDT01QX01PRFVMRSkK ICAgICAgewogICAgICAgIGdmY19kdW1wX21vZHVsZSAocy5zeW0tPm5hbWUs IGVycm9yc19iZWZvcmUgPT0gZXJyb3JzKTsKICAgICAgICBnZmNfY3VycmVu dF9ucy0+ZGVyaXZlZF90eXBlcyA9IGdmY19kZXJpdmVkX3R5cGVzOwotLS0g NTU1MCw1NTU2IC0tLS0KICAgICAgZ2ZjX2R1bXBfcGFyc2VfdHJlZSAoZ2Zj X2N1cnJlbnRfbnMsIHN0ZG91dCk7CiAgCiAgICBnZmNfZ2V0X2Vycm9ycyAo TlVMTCwgJmVycm9ycyk7CiEgICBpZiAocy5zdGF0ZSA9PSBDT01QX01PRFVM RSB8fCBzLnN0YXRlID09IENPTVBfU1VCTU9EVUxFKQogICAgICB7CiAgICAg ICAgZ2ZjX2R1bXBfbW9kdWxlIChzLnN5bS0+bmFtZSwgZXJyb3JzX2JlZm9y ZSA9PSBlcnJvcnMpOwogICAgICAgIGdmY19jdXJyZW50X25zLT5kZXJpdmVk X3R5cGVzID0gZ2ZjX2Rlcml2ZWRfdHlwZXM7CkluZGV4OiBnY2MvZm9ydHJh bi9wYXJzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdjYy9mb3J0 cmFuL3BhcnNlLmgJKHJldmlzaW9uIDIyNDcyNCkKLS0tIGdjYy9mb3J0cmFu L3BhcnNlLmgJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioqKioqIGFsb25n IHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuCioqKiAyNSwzMyAq KioqCiAgLyogRW51bSBmb3Igd2hhdCB0aGUgY29tcGlsZXIgaXMgY3VycmVu dGx5IGRvaW5nLiAgKi8KICB0eXBlZGVmIGVudW0KICB7CiEgICBDT01QX05P TkUsIENPTVBfUFJPR1JBTSwgQ09NUF9NT0RVTEUsIENPTVBfU1VCUk9VVElO RSwgQ09NUF9GVU5DVElPTiwKISAgIENPTVBfQkxPQ0tfREFUQSwgQ09NUF9J TlRFUkZBQ0UsIENPTVBfREVSSVZFRCwgQ09NUF9ERVJJVkVEX0NPTlRBSU5T LAohICAgQ09NUF9CTE9DSywgQ09NUF9BU1NPQ0lBVEUsIENPTVBfSUYsCiAg ICBDT01QX0RPLCBDT01QX1NFTEVDVCwgQ09NUF9GT1JBTEwsIENPTVBfV0hF UkUsIENPTVBfQ09OVEFJTlMsIENPTVBfRU5VTSwKICAgIENPTVBfU0VMRUNU X1RZUEUsIENPTVBfT01QX1NUUlVDVFVSRURfQkxPQ0ssIENPTVBfQ1JJVElD QUwsIENPTVBfRE9fQ09OQ1VSUkVOVAogIH0KLS0tIDI1LDMzIC0tLS0KICAv KiBFbnVtIGZvciB3aGF0IHRoZSBjb21waWxlciBpcyBjdXJyZW50bHkgZG9p bmcuICAqLwogIHR5cGVkZWYgZW51bQogIHsKISAgIENPTVBfTk9ORSwgQ09N UF9QUk9HUkFNLCBDT01QX01PRFVMRSwgQ09NUF9TVUJNT0RVTEUsIENPTVBf U1VCUk9VVElORSwKISAgIENPTVBfRlVOQ1RJT04sIENPTVBfQkxPQ0tfREFU QSwgQ09NUF9JTlRFUkZBQ0UsIENPTVBfREVSSVZFRCwKISAgIENPTVBfREVS SVZFRF9DT05UQUlOUywgQ09NUF9CTE9DSywgQ09NUF9BU1NPQ0lBVEUsIENP TVBfSUYsCiAgICBDT01QX0RPLCBDT01QX1NFTEVDVCwgQ09NUF9GT1JBTEws IENPTVBfV0hFUkUsIENPTVBfQ09OVEFJTlMsIENPTVBfRU5VTSwKICAgIENP TVBfU0VMRUNUX1RZUEUsIENPTVBfT01QX1NUUlVDVFVSRURfQkxPQ0ssIENP TVBfQ1JJVElDQUwsIENPTVBfRE9fQ09OQ1VSUkVOVAogIH0KSW5kZXg6IGdj Yy9mb3J0cmFuL3ByaW1hcnkuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cioq KiBnY2MvZm9ydHJhbi9wcmltYXJ5LmMJKHJldmlzaW9uIDIyNDcyNCkKLS0t IGdjYy9mb3J0cmFuL3ByaW1hcnkuYwkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKiogbWF0Y2hfdmFyaWFibGUgKGdmY19leHByICoqcmVzdWx0LCBp bnQgZQoqKiogMzI2NCwzMjY5ICoqKioKLS0tIDMyNjQsMzI3MCAtLS0tCiAg ICAgICBvZiBrZXl3b3Jkcywgc3VjaCBhcyAnZW5kJywgYmVpbmcgdHVybmVk IGludG8gdmFyaWFibGVzIGJ5CiAgICAgICBmYWlsZWQgbWF0Y2hpbmcgdG8g YXNzaWdubWVudHMgZm9yLCBlLmcuLCBFTkQgSU5URVJGQUNFLiAgKi8KICAg IGlmIChnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01QX01PRFVMRQorICAg ICAgIHx8IGdmY19jdXJyZW50X3N0YXRlICgpID09IENPTVBfU1VCTU9EVUxF CiAgICAgICAgfHwgZ2ZjX2N1cnJlbnRfc3RhdGUgKCkgPT0gQ09NUF9JTlRF UkZBQ0UKICAgICAgICB8fCBnZmNfY3VycmVudF9zdGF0ZSAoKSA9PSBDT01Q X0NPTlRBSU5TKQogICAgICBob3N0X2ZsYWcgPSAwOwpJbmRleDogZ2NjL2Zv cnRyYW4vcmVzb2x2ZS5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKioqIGdj Yy9mb3J0cmFuL3Jlc29sdmUuYwkocmV2aXNpb24gMjI0NzI0KQotLS0gZ2Nj L2ZvcnRyYW4vcmVzb2x2ZS5jCSh3b3JraW5nIGNvcHkpCioqKioqKioqKioq KioqKiBub19pbml0X2Vycm9yOgoqKiogMTEzMDEsMTEzMDYgKioqKgotLS0g MTEzMDEsMTEzMzIgLS0tLQogIH0KICAKICAKKyAvKiBDb21wYXJlIHRoZSBk dW1teSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBtb2R1bGUgcHJvY2VkdXJlIGlu dGVyZmFjZQorICAgIGRlY2xhcmF0aW9uIHdpdGggdGhlIGNvcnJlc3BvbmRp bmcgZGVjbGFyYXRpb24gaW4gYSBzdWJtb2R1bGUuICAqLworIHN0YXRpYyBn ZmNfZm9ybWFsX2FyZ2xpc3QgKm5ld19mb3JtYWw7Cisgc3RhdGljIGNoYXIg ZXJybXNnWzIwMF07CisgCisgc3RhdGljIHZvaWQKKyBjb21wYXJlX2ZzeW1z IChnZmNfc3ltYm9sICpzeW0pCisgeworICAgZ2ZjX3N5bWJvbCAqZnN5bTsK KyAKKyAgIGlmIChzeW0gPT0gTlVMTCB8fCBuZXdfZm9ybWFsID09IE5VTEwp CisgICAgIHJldHVybjsKKyAKKyAgIGZzeW0gPSBuZXdfZm9ybWFsLT5zeW07 CisgCisgICBpZiAoc3ltID09IGZzeW0pCisgICAgIHJldHVybjsKKyAKKyAg IGlmIChzdHJjbXAgKHN5bS0+bmFtZSwgZnN5bS0+bmFtZSkgPT0gMCkKKyAg ICAgeworICAgICAgIGlmICghZ2ZjX2NoZWNrX2R1bW15X2NoYXJhY3Rlcmlz dGljcyAoZnN5bSwgc3ltLCB0cnVlLCBlcnJtc2csIDIwMCkpCisgCWdmY19l cnJvciAoIiVzIGF0ICVMIiwgZXJybXNnLCAmZnN5bS0+ZGVjbGFyZWRfYXQp OworICAgICB9CisgfQorIAorIAogIC8qIFJlc29sdmUgYSBwcm9jZWR1cmUu ICAqLwogIAogIHN0YXRpYyBib29sCioqKioqKioqKioqKioqKiByZXNvbHZl X2ZsX3Byb2NlZHVyZSAoZ2ZjX3N5bWJvbCAqc3ltLCBpCioqKiAxMTU2NSwx MTU3MCAqKioqCi0tLSAxMTU5MSwxMTY2MSAtLS0tCiAgICBpZiAoc3ltLT5h dHRyLmlmX3NvdXJjZSAhPSBJRlNSQ19ERUNMKQogICAgICBzeW0tPmF0dHIu YXJyYXlfb3V0ZXJfZGVwZW5kZW5jeSA9IDE7CiAgCisgICAvKiBDb21wYXJl IHRoZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgYSBtb2R1bGUgcHJvY2VkdXJlIHdp dGggdGhlCisgICAgICBpbnRlcmZhY2UgZGVjbGFyYXRpb24uIElkZWFsbHkg dGhpcyB3b3VsZCBiZSBkb25lIHdpdGgKKyAgICAgIGdmY19jb21wYXJlX2lu dGVyZmFjZXMgYnV0LCBhdCBwcmVzZW50LCB0aGUgZm9ybWFsIGludGVyZmFj ZQorICAgICAgY2Fubm90IGJlIGNvcGllZCB0byB0aGUgdHMuaW50ZXJmYWNl LiAgKi8KKyAgIGlmIChzeW0tPmF0dHIubW9kdWxlX3Byb2NlZHVyZQorICAg ICAgICYmIHN5bS0+YXR0ci5pZl9zb3VyY2UgPT0gSUZTUkNfREVDTCkKKyAg ICAgeworICAgICAgIGdmY19zeW1ib2wgKmlmYWNlOworIAorICAgICAgIC8q IFN0b3AgdGhlIGR1bW15IGNoYXJhY3RlcmlzdGljcyB0ZXN0IGZyb20gdXNp bmcgdGhlIGludGVyZmFjZQorIAkgc3ltYm9sIGluc3RlYWQgb2YgJ3N5bScu ICAqLworICAgICAgIGlmYWNlID0gc3ltLT50cy5pbnRlcmZhY2U7CisgICAg ICAgc3ltLT50cy5pbnRlcmZhY2UgPSBOVUxMOworIAorICAgICAgIGlmIChp ZmFjZSA9PSBOVUxMKQorIAlnb3RvIGNoZWNrX2Zvcm1hbDsKKyAKKyAgICAg ICAvKiBDaGVjayB0aGUgcHJvY2VkdXJlIGNoYXJhY3RlcmlzdGljcy4gICov CisgICAgICAgaWYgKHN5bS0+YXR0ci5wdXJlICE9IGlmYWNlLT5hdHRyLnB1 cmUpCisgCXsKKyAJICBnZmNfZXJyb3IgKCJNaXNtYXRjaCBpbiBQVVJFIGF0 dHJpYnV0ZSBiZXR3ZWVuIE1PRFVMRSAiCisgCQkgICAgICJQUk9DRURVUkUg YXQgJUwgYW5kIGl0cyBpbnRlcmZhY2UgaW4gJXMiLAorIAkJICAgICAmc3lt LT5kZWNsYXJlZF9hdCwgaWZhY2UtPm1vZHVsZSk7CisgCSAgcmV0dXJuIGZh bHNlOworIAl9CisgCisgICAgICAgaWYgKHN5bS0+YXR0ci5lbGVtZW50YWwg IT0gaWZhY2UtPmF0dHIuZWxlbWVudGFsKQorIAl7CisgCSAgZ2ZjX2Vycm9y ICgiTWlzbWF0Y2ggaW4gRUxFTUVOVEFMIGF0dHJpYnV0ZSBiZXR3ZWVuIE1P RFVMRSAiCisgCQkgICAgICJQUk9DRURVUkUgYXQgJUwgYW5kIGl0cyBpbnRl cmZhY2UgaW4gJXMiLAorIAkJICAgICAmc3ltLT5kZWNsYXJlZF9hdCwgaWZh Y2UtPm1vZHVsZSk7CisgCSAgcmV0dXJuIGZhbHNlOworIAl9CisgCisgICAg ICAgaWYgKHN5bS0+YXR0ci5yZWN1cnNpdmUgIT0gaWZhY2UtPmF0dHIucmVj dXJzaXZlKQorIAl7CisgCSAgZ2ZjX2Vycm9yICgiTWlzbWF0Y2ggaW4gUkVD VVJTSVZFIGF0dHJpYnV0ZSBiZXR3ZWVuIE1PRFVMRSAiCisgCQkgICAgICJQ Uk9DRURVUkUgYXQgJUwgYW5kIGl0cyBpbnRlcmZhY2UgaW4gJXMiLAorIAkJ ICAgICAmc3ltLT5kZWNsYXJlZF9hdCwgaWZhY2UtPm1vZHVsZSk7CisgCSAg cmV0dXJuIGZhbHNlOworIAl9CisgCisgICAgICAgLyogQ2hlY2sgdGhlIHJl c3VsdCBjaGFyYWN0ZXJpc3RpY3MuICAqLworICAgICAgIGlmICghZ2ZjX2No ZWNrX3Jlc3VsdF9jaGFyYWN0ZXJpc3RpY3MgKHN5bSwgaWZhY2UsIGVycm1z ZywgMjAwKSkKKyAJeworIAkgIGdmY19lcnJvciAoIiVzIGJldHdlZW4gdGhl IE1PRFVMRSBQUk9DRURVUkUgZGVjbGFyYXRpb24gIgorIAkJICAgICAiaW4g bW9kdWxlICVzIGFuZCB0aGUgZGVjbGFyYXRpb24gYXQgJUwgaW4gIgorIAkJ ICAgICAiU1VCTU9EVUxFICVzIiwgZXJybXNnLCBpZmFjZS0+bW9kdWxlLAor IAkJICAgICAmc3ltLT5kZWNsYXJlZF9hdCwgc3ltLT5ucy0+cHJvY19uYW1l LT5uYW1lKTsKKyAJICByZXR1cm4gZmFsc2U7CisgCX0KKyAKKyBjaGVja19m b3JtYWw6CisgICAgICAgLyogQ2hlY2sgdGhlIGNoYXJjYXRlcmlzdGljcyBv ZiB0aGUgZm9ybWFsIGFyZ3VtZW50cy4gICovCisgICAgICAgaWYgKHN5bS0+ Zm9ybWFsICYmIHN5bS0+Zm9ybWFsX25zKQorIAl7CisgCSAgZm9yIChhcmcg PSBzeW0tPmZvcm1hbDsgYXJnICYmIGFyZy0+c3ltOyBhcmcgPSBhcmctPm5l eHQpCisgCSAgICB7CisgCSAgICAgIG5ld19mb3JtYWwgPSBhcmc7CisgCSAg ICAgIGdmY190cmF2ZXJzZV9ucyAoc3ltLT5mb3JtYWxfbnMsIGNvbXBhcmVf ZnN5bXMpOworIAkgICAgfQorIAl9CisgCisgICAgICAgc3ltLT50cy5pbnRl cmZhY2UgPSBpZmFjZTsKKyAgICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQog IApJbmRleDogZ2NjL2ZvcnRyYW4vc3ltYm9sLmMKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoqKiogZ2NjL2ZvcnRyYW4vc3ltYm9sLmMJKHJldmlzaW9uIDIy NDcyNCkKLS0tIGdjYy9mb3J0cmFuL3N5bWJvbC5jCSh3b3JraW5nIGNvcHkp CioqKioqKioqKioqKioqKiBnZmNfYWRkX3Byb2NlZHVyZSAoc3ltYm9sX2F0 dHJpYnV0ZSAqYXR0CioqKiAxNTM5LDE1NDUgKioqKgogICAgaWYgKHdoZXJl ID09IE5VTEwpCiAgICAgIHdoZXJlID0gJmdmY19jdXJyZW50X2xvY3VzOwog IAohICAgaWYgKGF0dHItPnByb2MgIT0gUFJPQ19VTktOT1dOKQogICAgICB7 CiAgICAgICAgZ2ZjX2Vycm9yICgiJXMgcHJvY2VkdXJlIGF0ICVMIGlzIGFs cmVhZHkgZGVjbGFyZWQgYXMgJXMgcHJvY2VkdXJlIiwKICAJCSBnZmNfY29k ZTJzdHJpbmcgKHByb2NlZHVyZXMsIHQpLCB3aGVyZSwKLS0tIDE1MzksMTU0 NSAtLS0tCiAgICBpZiAod2hlcmUgPT0gTlVMTCkKICAgICAgd2hlcmUgPSAm Z2ZjX2N1cnJlbnRfbG9jdXM7CiAgCiEgICBpZiAoYXR0ci0+cHJvYyAhPSBQ Uk9DX1VOS05PV04gJiYgIWF0dHItPm1vZHVsZV9wcm9jZWR1cmUpCiAgICAg IHsKICAgICAgICBnZmNfZXJyb3IgKCIlcyBwcm9jZWR1cmUgYXQgJUwgaXMg YWxyZWFkeSBkZWNsYXJlZCBhcyAlcyBwcm9jZWR1cmUiLAogIAkJIGdmY19j b2RlMnN0cmluZyAocHJvY2VkdXJlcywgdCksIHdoZXJlLAoqKioqKioqKioq KioqKiogYm9vbAoqKiogMTY1NSwxNjY0ICoqKioKICBnZmNfYWRkX2V4cGxp Y2l0X2ludGVyZmFjZSAoZ2ZjX3N5bWJvbCAqc3ltLCBpZnNyYyBzb3VyY2Us CiAgCQkJICAgIGdmY19mb3JtYWxfYXJnbGlzdCAqIGZvcm1hbCwgbG9jdXMg KndoZXJlKQogIHsKLSAKICAgIGlmIChjaGVja191c2VkICgmc3ltLT5hdHRy LCBzeW0tPm5hbWUsIHdoZXJlKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIAog ICAgaWYgKHdoZXJlID09IE5VTEwpCiAgICAgIHdoZXJlID0gJmdmY19jdXJy ZW50X2xvY3VzOwogIAotLS0gMTY1NSwxNjY5IC0tLS0KICBnZmNfYWRkX2V4 cGxpY2l0X2ludGVyZmFjZSAoZ2ZjX3N5bWJvbCAqc3ltLCBpZnNyYyBzb3Vy Y2UsCiAgCQkJICAgIGdmY19mb3JtYWxfYXJnbGlzdCAqIGZvcm1hbCwgbG9j dXMgKndoZXJlKQogIHsKICAgIGlmIChjaGVja191c2VkICgmc3ltLT5hdHRy LCBzeW0tPm5hbWUsIHdoZXJlKSkKICAgICAgcmV0dXJuIGZhbHNlOwogIAor ICAgLyogU2tpcCB0aGUgZm9sbG93aW5nIGNoZWNrcyBpbiB0aGUgY2FzZSBv ZiBhIG1vZHVsZV9wcm9jZWR1cmVzIGluIGEKKyAgICAgIHN1Ym1vZHVsZSBz aW5jZSB0aGV5IHdpbGwgbWFuaWZlc3RseSBmYWlsLiAgKi8KKyAgIGlmIChz eW0tPmF0dHIubW9kdWxlX3Byb2NlZHVyZSA9PSAxCisgICAgICAgJiYgc291 cmNlID09IElGU1JDX0RFQ0wpCisgICAgIGdvdG8gZmluaXNoOworIAogICAg aWYgKHdoZXJlID09IE5VTEwpCiAgICAgIHdoZXJlID0gJmdmY19jdXJyZW50 X2xvY3VzOwogIAoqKioqKioqKioqKioqKiogZ2ZjX2FkZF9leHBsaWNpdF9p bnRlcmZhY2UgKGdmY19zeW1ib2wgKgoqKiogMTY3NywxNjgyICoqKioKLS0t IDE2ODIsMTY4OCAtLS0tCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9 CiAgCisgZmluaXNoOgogICAgc3ltLT5mb3JtYWwgPSBmb3JtYWw7CiAgICBz eW0tPmF0dHIuaWZfc291cmNlID0gc291cmNlOwogIAoqKioqKioqKioqKioq KiogZ2ZjX2FkZF90eXBlIChnZmNfc3ltYm9sICpzeW0sIGdmY190eXBlcwoq KiogMTcwMywxNzA5ICoqKioKICAgIGlmIChzeW0tPmF0dHIucmVzdWx0ICYm IHR5cGUgPT0gQlRfVU5LTk9XTiAmJiBzeW0tPm5zLT5wcm9jX25hbWUpCiAg ICAgIHR5cGUgPSBzeW0tPm5zLT5wcm9jX25hbWUtPnRzLnR5cGU7CiAgCiEg ICBpZiAodHlwZSAhPSBCVF9VTktOT1dOICYmICEoc3ltLT5hdHRyLmZ1bmN0 aW9uICYmIHN5bS0+YXR0ci5pbXBsaWNpdF90eXBlKSkKICAgICAgewogICAg ICAgIGlmIChzeW0tPmF0dHIudXNlX2Fzc29jKQogIAlnZmNfZXJyb3IgKCJT eW1ib2wgJXFzIGF0ICVMIGNvbmZsaWN0cyB3aXRoIHN5bWJvbCBmcm9tIG1v ZHVsZSAlcXMsICIKLS0tIDE3MDksMTcxOCAtLS0tCiAgICBpZiAoc3ltLT5h dHRyLnJlc3VsdCAmJiB0eXBlID09IEJUX1VOS05PV04gJiYgc3ltLT5ucy0+ cHJvY19uYW1lKQogICAgICB0eXBlID0gc3ltLT5ucy0+cHJvY19uYW1lLT50 cy50eXBlOwogIAohICAgaWYgKHR5cGUgIT0gQlRfVU5LTk9XTiAmJiAhKHN5 bS0+YXR0ci5mdW5jdGlvbiAmJiBzeW0tPmF0dHIuaW1wbGljaXRfdHlwZSkK ISAgICAgICAmJiAhKGdmY19zdGF0ZV9zdGFjay0+cHJldmlvdXMgJiYgZ2Zj X3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+cHJldmlvdXMKISAJICAgJiYgZ2Zj X3N0YXRlX3N0YWNrLT5wcmV2aW91cy0+cHJldmlvdXMtPnN0YXRlID09IENP TVBfU1VCTU9EVUxFKQohICAgICAgICYmICFzeW0tPmF0dHIubW9kdWxlX3By b2NlZHVyZSkKICAgICAgewogICAgICAgIGlmIChzeW0tPmF0dHIudXNlX2Fz c29jKQogIAlnZmNfZXJyb3IgKCJTeW1ib2wgJXFzIGF0ICVMIGNvbmZsaWN0 cyB3aXRoIHN5bWJvbCBmcm9tIG1vZHVsZSAlcXMsICIKSW5kZXg6IGdjYy9m b3J0cmFuL3RyYW5zLWRlY2wuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cioq KiBnY2MvZm9ydHJhbi90cmFucy1kZWNsLmMJKHJldmlzaW9uIDIyNDcyNCkK LS0tIGdjYy9mb3J0cmFuL3RyYW5zLWRlY2wuYwkod29ya2luZyBjb3B5KQoq KioqKioqKioqKioqKiogZ2ZjX3N5bV9tYW5nbGVkX2Z1bmN0aW9uX2lkIChn ZmNfc3ltYm9sCioqKiAzNzksMzg3ICoqKioKICAgICAgLyogdXNlIHRoZSBi aW5kaW5nIGxhYmVsIHJhdGhlciB0aGFuIHRoZSBtYW5nbGVkIG5hbWUgKi8K ICAgICAgcmV0dXJuIGdldF9pZGVudGlmaWVyIChzeW0tPmJpbmRpbmdfbGFi ZWwpOwogIAohICAgaWYgKHN5bS0+bW9kdWxlID09IE5VTEwgfHwgc3ltLT5h dHRyLnByb2MgPT0gUFJPQ19FWFRFUk5BTAogICAgICAgIHx8IChzeW0tPm1v ZHVsZSAhPSBOVUxMICYmIChzeW0tPmF0dHIuZXh0ZXJuYWwKICAJICAgIHx8 IHN5bS0+YXR0ci5pZl9zb3VyY2UgPT0gSUZTUkNfSUZCT0RZKSkpCiAgICAg IHsKICAgICAgICAvKiBNYWluIHByb2dyYW0gaXMgbWFuZ2xlZCBpbnRvIE1B SU5fXy4gICovCiAgICAgICAgaWYgKHN5bS0+YXR0ci5pc19tYWluX3Byb2dy YW0pCi0tLSAzNzksMzg4IC0tLS0KICAgICAgLyogdXNlIHRoZSBiaW5kaW5n IGxhYmVsIHJhdGhlciB0aGFuIHRoZSBtYW5nbGVkIG5hbWUgKi8KICAgICAg cmV0dXJuIGdldF9pZGVudGlmaWVyIChzeW0tPmJpbmRpbmdfbGFiZWwpOwog IAohICAgaWYgKChzeW0tPm1vZHVsZSA9PSBOVUxMIHx8IHN5bS0+YXR0ci5w cm9jID09IFBST0NfRVhURVJOQUwKICAgICAgICB8fCAoc3ltLT5tb2R1bGUg IT0gTlVMTCAmJiAoc3ltLT5hdHRyLmV4dGVybmFsCiAgCSAgICB8fCBzeW0t PmF0dHIuaWZfc291cmNlID09IElGU1JDX0lGQk9EWSkpKQorICAgICAgICYm ICFzeW0tPmF0dHIubW9kdWxlX3Byb2NlZHVyZSkKICAgICAgewogICAgICAg IC8qIE1haW4gcHJvZ3JhbSBpcyBtYW5nbGVkIGludG8gTUFJTl9fLiAgKi8K ICAgICAgICBpZiAoc3ltLT5hdHRyLmlzX21haW5fcHJvZ3JhbSkKKioqKioq KioqKioqKioqIGdmY19maW5pc2hfdmFyX2RlY2wgKHRyZWUgZGVjbCwgZ2Zj X3N5bWIKKioqIDYwMSw2MDcgKioqKgogICAgICB9CiAgCiAgICAvKiBJZiBh IHZhcmlhYmxlIGlzIFVTRSBhc3NvY2lhdGVkLCBpdCdzIGFsd2F5cyBleHRl cm5hbC4gICovCiEgICBpZiAoc3ltLT5hdHRyLnVzZV9hc3NvYykKICAgICAg ewogICAgICAgIERFQ0xfRVhURVJOQUwgKGRlY2wpID0gMTsKICAgICAgICBU UkVFX1BVQkxJQyAoZGVjbCkgPSAxOwotLS0gNjAyLDYwOCAtLS0tCiAgICAg IH0KICAKICAgIC8qIElmIGEgdmFyaWFibGUgaXMgVVNFIGFzc29jaWF0ZWQs IGl0J3MgYWx3YXlzIGV4dGVybmFsLiAgKi8KISAgIGlmIChzeW0tPmF0dHIu dXNlX2Fzc29jIHx8IHN5bS0+YXR0ci51c2VkX2luX3N1Ym1vZHVsZSkKICAg ICAgewogICAgICAgIERFQ0xfRVhURVJOQUwgKGRlY2wpID0gMTsKICAgICAg ICBUUkVFX1BVQkxJQyAoZGVjbCkgPSAxOwpJbmRleDogZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9zdWJtb2R1bGVfMS5mOTAKPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zdWJtb2R1 bGVfMS5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL3N1Ym1vZHVsZV8xLmY5MAkod29ya2luZyBjb3B5KQoqKioqKioq KioqKioqKioKKioqIDAgKioqKgotLS0gMSwxNzcgLS0tLQorICEgeyBkZy1k byBydW4gfQorICEKKyAhIEJhc2ljIHRlc3Qgb2Ygc3VibW9kdWxlIGZ1bmN0 aW9uYWxpdHkuCisgIQorICEgQ29udHJpYnV0ZWQgYnkgUGF1bCBUaG9tYXMg IDxwYXVsdEBnY2MuZ251Lm9yZz4KKyAhCisgIG1vZHVsZSBmb29faW50ZXJm YWNlCisgICAgaW1wbGljaXQgbm9uZQorICAgIGNoYXJhY3RlcihsZW4gPSAx MDApIDo6IG1lc3NhZ2UKKyAgICBjaGFyYWN0ZXIobGVuID0gMTAwKSA6OiBt ZXNzYWdlMgorIAorICAgIHR5cGUgZm9vCisgICAgICBjaGFyYWN0ZXIobGVu PTE1KSA6OiBncmVldGluZyA9ICJIZWxsbywgd29ybGQhICAiCisgICAgICBj aGFyYWN0ZXIobGVuPTE1KSwgcHJpdmF0ZSA6OiBieWVieWUgPSAiYWRpZXUs IHdvcmxkISAgIgorICAgIGNvbnRhaW5zCisgICAgICBwcm9jZWR1cmUgOjog Z3JlZXQgPT4gc2F5X2hlbGxvCisgICAgICBwcm9jZWR1cmUgOjogZmFyZXdl bGwgPT4gYnllCisgICAgICBwcm9jZWR1cmUsIHByaXZhdGUgOjogYWRpZXUg PT4gYnllYnllCisgICAgZW5kIHR5cGUgZm9vCisgCisgICAgaW50ZXJmYWNl CisgICAgICBtb2R1bGUgc3Vicm91dGluZSBzYXlfaGVsbG8odGhpcykKKyAg ICAgICAgaW1wb3J0IGZvbworICAgICAgICBjbGFzcyhmb28pLCBpbnRlbnQo aW4pIDo6IHRoaXMKKyAgICAgIGVuZCBzdWJyb3V0aW5lCisgCisgICAgICBt b2R1bGUgc3Vicm91dGluZSBieWUodGhpcykKKyAgICAgICAgaW1wb3J0IGZv bworICAgICAgICBjbGFzcyhmb28pLCBpbnRlbnQoaW4pIDo6IHRoaXMKKyAg ICAgIGVuZCBzdWJyb3V0aW5lCisgCisgICAgICBtb2R1bGUgc3Vicm91dGlu ZSBieWVieWUodGhpcywgdGhhdCkKKyAgICAgICAgaW1wb3J0IGZvbworICAg ICAgICBjbGFzcyhmb28pLCBpbnRlbnQoaW4pIDo6IHRoaXMKKyAgICAgICAg Y2xhc3MoZm9vKSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUgOjogdGhh dAorICAgICAgZW5kIHN1YnJvdXRpbmUKKyAKKyAgICAgIG1vZHVsZSBmdW5j dGlvbiByZWFsZiAoYXJnKSByZXN1bHQgKHJlcykKKyAgICAgICAgcmVhbCA6 OiBhcmcsIHJlcworICAgICAgZW5kIGZ1bmN0aW9uCisgCisgICAgICBpbnRl Z2VyIG1vZHVsZSBmdW5jdGlvbiBpbnRmIChhcmcpCisgICAgICAgIGludGVn ZXIgOjogYXJnCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgICAgIHJlYWwg bW9kdWxlIGZ1bmN0aW9uIHJlYWxnIChhcmcpCisgICAgICAgIHJlYWwgOjog YXJnCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgICAgIGludGVnZXIgbW9k dWxlIGZ1bmN0aW9uIGludGcgKGFyZykKKyAgICAgICAgaW50ZWdlciA6OiBh cmcKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAgIGVuZCBpbnRlcmZhY2UK KyAKKyAgICBpbnRlZ2VyIDo6IGZhY3RvciA9IDUKKyAKKyAgY29udGFpbnMK KyAKKyAgICBzdWJyb3V0aW5lIHNtdXJmCisgICAgICBjbGFzcyhmb28pLCBh bGxvY2F0YWJsZSA6OiB0aGlzCisgICAgICBhbGxvY2F0ZSAodGhpcykKKyAg ICAgIG1lc3NhZ2UgPSAic2F5X2hlbGxvIGZyb20gU01VUkYgLS0tPiIKKyAg ICAgIGNhbGwgc2F5X2hlbGxvICh0aGlzKQorICAgIGVuZCBzdWJyb3V0aW5l CisgIGVuZCBtb2R1bGUKKyAKKyAhCisgICBTVUJNT0RVTEUgKGZvb19pbnRl cmZhY2UpIGZvb19pbnRlcmZhY2Vfc29uCisgIQorICAgY29udGFpbnMKKyAh IFRlc3QgbW9kdWxlIHByb2NlZHVyZSB3aXRoIGNvbnZlbnRpb25hbCBzcGVj aWZpY2F0aW9uIHBhcnQgZm9yIGR1bW1pZXMKKyAgICAgIG1vZHVsZSBzdWJy b3V0aW5lIHNheV9oZWxsbyh0aGlzKQorICAgICAgICBjbGFzcyhmb28pLCBp bnRlbnQoaW4pIDo6IHRoaXMKKyAgICAgICAgY2xhc3MoZm9vKSwgYWxsb2Nh dGFibGUgOjogdGhhdAorICAgICAgICBhbGxvY2F0ZSAodGhhdCwgc291cmNl ID0gdGhpcykKKyAhICAgICAgIGNhbGwgdGhpcyVmYXJld2VsbCAgICAgICAg ICEgTk9URSBXRUxMOiBUaGlzIGNvbXBpbGVzIGFuZCBjYXVzZXMgYSBjcmFz aCBpbiBydW4tdGltZQorICEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGR1ZSB0byByZWN1cnNpb24gdGhyb3VnaCB0 aGUgY2FsbCB0byB0aGlzIHByb2NlZHVyZSBmcm9tCisgISAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2F5IGhlbGxv LgorICAgICAgICBtZXNzYWdlID0gdGhhdCVncmVldGluZworIAorICEgQ2hl Y2sgdGhhdCBkZXNjZW5kYW50IG1vZHVsZSBwcm9jZWR1cmUgaXMgY29ycmVj dGx5IHByb2Nlc3NlZAorICAgICAgICBpZiAoaW50ZiAoNzcpIC5uZS4gZmFj dG9yKjc3KSBjYWxsIGFib3J0CisgICAgICBlbmQgc3Vicm91dGluZQorIAor ICAgICAgbW9kdWxlIGZ1bmN0aW9uIHJlYWxmIChhcmcpIHJlc3VsdCAocmVz KQorICAgICAgICByZWFsIDo6IGFyZywgcmVzCisgICAgICAgIHJlcyA9IDIq YXJnCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgIGVuZCBTVUJNT0RVTEUg Zm9vX2ludGVyZmFjZV9zb24KKyAKKyAhCisgISBDaGVjayB0aGF0IG11bHRp cGxlIGdlbmVyYXRpb25zIG9mIHN1Ym1vZHVsZXMgYXJlIE9LCisgICBTVUJN T0RVTEUgKGZvb19pbnRlcmZhY2U6Zm9vX2ludGVyZmFjZV9zb24pIGZvb19p bnRlcmZhY2VfZ3JhbmRzb24KKyAhCisgICBjb250YWlucworIAorICAgICAg bW9kdWxlIHByb2NlZHVyZSBpbnRmCisgICAgICAgIGludGYgPSBmYWN0b3Iq YXJnCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgIGVuZCBTVUJNT0RVTEUg Zm9vX2ludGVyZmFjZV9ncmFuZHNvbgorIAorICEKKyAgIFNVQk1PRFVMRSAo Zm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFjZV9kYXVnaHRlcgorICEKKyAg IGNvbnRhaW5zCisgISBUZXN0IG1vZHVsZSBwcm9jZWR1cmUgd2l0aCBhYmJy ZXZpYXRlZCBkZWNsYXJhdGlvbiBhbmQgbm8gc3BlY2lmaWNhdGlvbiBvZiBk dW1taWVzCisgICAgICBtb2R1bGUgcHJvY2VkdXJlIGJ5ZQorICAgICAgICBj bGFzcyhmb28pLCBhbGxvY2F0YWJsZSA6OiB0aGF0CisgICAgICAgIGNhbGwg c2F5X2hlbGxvICh0aGlzKQorICEgY2hlY2sgYWNjZXNzIHRvIGEgUFJJVkFU RSBwcm9jZWR1cmUgcG9pbnRlciB0aGF0IGFjY2Vzc2VzIGEgcHJpdmF0ZSBj b21wb25lbnQKKyAgICAgICAgY2FsbCB0aGlzJWFkaWV1ICh0aGF0KQorICAg ICAgICBtZXNzYWdlMiA9IHRoYXQlZ3JlZXRpbmcKKyAgICAgIGVuZCBzdWJy b3V0aW5lCisgCisgISBUZXN0IG1vZHVsZSBwcm9jZWR1cmUgcG9pbnRlZCB0 byBieSBQUklWQVRFIGNvbXBvbmVudCBvZiBmb28KKyAgICAgIG1vZHVsZSBw cm9jZWR1cmUgYnllYnllCisgICAgICAgIGFsbG9jYXRlICh0aGF0LCBzb3Vy Y2UgPSB0aGlzKQorICEgQWNjZXNzIGEgUFJJVkFURSBjb21wb25lbnQgb2Yg Zm9vCisgICAgICAgIHRoYXQlZ3JlZXRpbmcgPSB0aGF0JWJ5ZWJ5ZQorICAg ICAgZW5kIHN1YnJvdXRpbmUKKyAKKyAgICAgIG1vZHVsZSBwcm9jZWR1cmUg aW50ZworICAgICAgICBpbnRnID0gMyphcmcKKyAgICAgIGVuZCBmdW5jdGlv bgorIAorICAgICAgbW9kdWxlIHByb2NlZHVyZSByZWFsZworICAgICAgICBy ZWFsZyA9IDMqYXJnCisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgIGVuZCBT VUJNT0RVTEUgZm9vX2ludGVyZmFjZV9kYXVnaHRlcgorIAorICEKKyAgcHJv Z3JhbSB0cnkKKyAgICB1c2UgZm9vX2ludGVyZmFjZQorICAgIGltcGxpY2l0 IG5vbmUKKyAgICB0eXBlKGZvbykgOjogYmFyCisgCisgICAgY2FsbCBjbGVh cl9tZXNzYWdlcworICAgIGNhbGwgYmFyJWdyZWV0ICEgdHlwZWJvdW5kIGNh bGwKKyAgICBpZiAodHJpbSAobWVzc2FnZSkgLm5lLiAiSGVsbG8sIHdvcmxk ISIpIGNhbGwgYWJvcnQKKyAKKyAgICBjYWxsIGNsZWFyX21lc3NhZ2VzCisg ICAgYmFyJWdyZWV0aW5nID0gIkcnZGF5LCB3b3JsZCEiCisgICAgY2FsbCBz YXlfaGVsbG8oYmFyKSAhIENoZWNrcyB1c2UgYXNzb2NpYXRpb24gb2YgJ3Nh eV9oZWxsbycKKyAgICBpZiAodHJpbSAobWVzc2FnZSkgLm5lLiAiRydkYXks IHdvcmxkISIpIGNhbGwgYWJvcnQKKyAKKyAgICBjYWxsIGNsZWFyX21lc3Nh Z2VzCisgICAgYmFyJWdyZWV0aW5nID0gIkhpLCB3b3JsZCEiCisgICAgY2Fs bCBieWUoYmFyKSAhIENoZWNrcyB1c2UgYXNzb2NpYXRpb24gaW4gYW5vdGhl ciBzdWJtb2R1bGUKKyAgICBpZiAodHJpbSAobWVzc2FnZSkgLm5lLiAiSGks IHdvcmxkISIpIGNhbGwgYWJvcnQKKyAgICBpZiAodHJpbSAobWVzc2FnZTIp IC5uZS4gImFkaWV1LCB3b3JsZCEiKSBjYWxsIGFib3J0CisgCisgICAgY2Fs bCBjbGVhcl9tZXNzYWdlcworICAgIGNhbGwgc211cmYgISBDaGVja3MgaG9z dCBhc3NvY2lhdGlvbiBvZiAnc2F5X2hlbGxvJworICAgIGlmICh0cmltICht ZXNzYWdlKSAubmUuICJIZWxsbywgd29ybGQhIikgY2FsbCBhYm9ydAorIAor ICAgIGNhbGwgY2xlYXJfbWVzc2FnZXMKKyAgICBiYXIlZ3JlZXRpbmcgPSAi ZmFyZXdlbGwgICAgICIKKyAgICBjYWxsIGJhciVmYXJld2VsbAorICAgIGlm ICh0cmltIChtZXNzYWdlKSAubmUuICJmYXJld2VsbCIpIGNhbGwgYWJvcnQK KyAgICBpZiAodHJpbSAobWVzc2FnZTIpIC5uZS4gImFkaWV1LCB3b3JsZCEi KSBjYWxsIGFib3J0CisgCisgICAgaWYgKHJlYWxmKDIuMCkgLm5lLiA0LjAp IGNhbGwgYWJvcnQgISBDaGVjayBtb2R1bGUgcHJvY2VkdXJlIHdpdGggZXhw bGljaXQgcmVzdWx0CisgICAgaWYgKGludGYoMikgLm5lLiAxMCkgY2FsbCBh Ym9ydCAgICAgISBkaXR0bworICAgIGlmIChyZWFsZygzLjApIC5uZS4gOS4w KSBjYWxsIGFib3J0ICEgQ2hlY2sgbW9kdWxlIHByb2NlZHVyZSB3aXRoIGZ1 bmN0aW9uIGRlY2xhcmF0aW9uIHJlc3VsdAorICAgIGlmIChpbnRnKDMpIC5u ZS4gOSkgY2FsbCBhYm9ydCAgICAgICEgZGl0dG8KKyAgY29udGFpbnMKKyAg ICBzdWJyb3V0aW5lIGNsZWFyX21lc3NhZ2VzCisgICAgICBtZXNzYWdlID0g IiIKKyAgICAgIG1lc3NhZ2UyID0gIiIKKyAgICBlbmQgc3Vicm91dGluZQor ICBlbmQgcHJvZ3JhbQorICEKKyAKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvc3VibW9kdWxlXzIuZjkwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzIu ZjkwCShyZXZpc2lvbiAwKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9zdWJtb2R1bGVfMi5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioq KioqCioqKiAwICoqKioKLS0tIDEsMTA2IC0tLS0KKyAhIHsgZGctZG8gcnVu IH0KKyAhCisgISBUZXN0IGR1bW15IGFuZCByZXN1bHQgYXJyYXlzIGluIG1v ZHVsZSBwcm9jZWR1cmVzCisgIQorICEgQ29udHJpYnV0ZWQgYnkgUGF1bCBU aG9tYXMgIDxwYXVsdEBnY2MuZ251Lm9yZz4KKyAhCisgIG1vZHVsZSBmb29f aW50ZXJmYWNlCisgICAgaW1wbGljaXQgbm9uZQorICAgIHR5cGUgZm9vCisg ICAgICBjaGFyYWN0ZXIobGVuPTE2KSA6OiBncmVldGluZyA9ICJIZWxsbywg d29ybGQhICAgIgorICAgICAgY2hhcmFjdGVyKGxlbj0xNiksIHByaXZhdGUg OjogYnllYnllID0gImFkaWV1LCB3b3JsZCEgICAiCisgICAgZW5kIHR5cGUg Zm9vCisgCisgICAgaW50ZXJmYWNlCisgICAgICBtb2R1bGUgZnVuY3Rpb24g YXJyYXkxKHRoaXMpIHJlc3VsdCAodGhhdCkKKyAgICAgICAgaW1wb3J0IGZv bworICAgICAgICB0eXBlKGZvbyksIGludGVudChpbiksIGRpbWVuc2lvbig6 KSA6OiB0aGlzCisgICAgICAgIHR5cGUoZm9vKSwgYWxsb2NhdGFibGUsIGRp bWVuc2lvbig6KSA6OiB0aGF0CisgICAgICBlbmQgZnVuY3Rpb24KKyAgICAg IGNoYXJhY3RlcigxNikgbW9kdWxlIGZ1bmN0aW9uIGFycmF5Mih0aGlzLCB0 aGF0KQorICAgICAgICBpbXBvcnQgZm9vCisgICAgICAgIHR5cGUoZm9vKSwg aW50ZW50KGluKSwgZGltZW5zaW9uKDopIDo6IHRoaXMKKyAgICAgICAgdHlw ZShmb28pLCBhbGxvY2F0YWJsZSwgZGltZW5zaW9uKDopIDo6IHRoYXQKKyAg ICAgIGVuZCBmdW5jdGlvbgorICAgICAgbW9kdWxlIHN1YnJvdXRpbmUgYXJy YXkzKHRoaXMsIHRoYXQpCisgICAgICAgIGltcG9ydCBmb28KKyAgICAgICAg dHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcwor ICAgICAgICB0eXBlKGZvbyksIGludGVudChpbk9VVCksIGFsbG9jYXRhYmxl LCBkaW1lbnNpb24oOikgOjogdGhhdAorICAgICAgZW5kIHN1YnJvdXRpbmUK KyAgICAgIG1vZHVsZSBzdWJyb3V0aW5lIGFycmF5NCh0aGlzLCB0aGF0KQor ICAgICAgICBpbXBvcnQgZm9vCisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50 KGluKSwgZGltZW5zaW9uKDopIDo6IHRoaXMKKyAgICAgICAgdHlwZShmb28p LCBpbnRlbnQoaW5PVVQpLCBhbGxvY2F0YWJsZSwgZGltZW5zaW9uKDopIDo6 IHRoYXQKKyAgICAgIGVuZCBzdWJyb3V0aW5lCisgICAgZW5kIGludGVyZmFj ZQorICBlbmQgbW9kdWxlCisgCisgIQorICAgU1VCTU9EVUxFIChmb29faW50 ZXJmYWNlKSBmb29faW50ZXJmYWNlX3NvbgorICEKKyAgIGNvbnRhaW5zCisg CisgISBUZXN0IGFycmF5IGNoYXJhY3RlcmlzdGljcyBmb3IgZHVtbXkgYW5k IHJlc3VsdCBhcmUgT0sKKyAgICAgIG1vZHVsZSBmdW5jdGlvbiBhcnJheTEg KHRoaXMpIHJlc3VsdCh0aGF0KQorICAgICAgICB0eXBlKGZvbyksIGludGVu dChpbiksIGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5cGUoZm9v KSwgYWxsb2NhdGFibGUsIGRpbWVuc2lvbig6KSA6OiB0aGF0CisgICAgICAg IGFsbG9jYXRlICh0aGF0KHNpemUodGhpcykpLCBzb3VyY2UgPSB0aGlzKQor ICAgICAgICB0aGF0JWdyZWV0aW5nID0gdGhhdCVieWVieWUKKyAgICAgIGVu ZCBmdW5jdGlvbgorIAorICEgVGVzdCBhcnJheSBjaGFyYWN0ZXJpc3RpY3Mg Zm9yIGR1bW15IGFuZCByZXN1bHQgYXJlIE9LIGZvcgorICEgYWJicmV2aWF0 ZWQgbW9kdWxlIHByb2NlZHVyZSBkZWNsYXJhdGlvbi4KKyAgICAgIG1vZHVs ZSBwcm9jZWR1cmUgYXJyYXkyCisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNp emUodGhpcykpLCBzb3VyY2UgPSB0aGlzKQorICAgICAgICB0aGF0JWdyZWV0 aW5nID0gdGhhdCVieWVieWUKKyAgICAgICAgYXJyYXkyID0gdHJpbSAodGhh dChzaXplICh0aGF0KSklZ3JlZXRpbmcoMTo1KSkvLyIsIHBlb3BsZSEiCisg ICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgIGVuZCBTVUJNT0RVTEUgZm9vX2lu dGVyZmFjZV9zb24KKyAKKyAhCisgICBTVUJNT0RVTEUgKGZvb19pbnRlcmZh Y2UpIGZvb19pbnRlcmZhY2VfZGF1Z2h0ZXIKKyAhCisgICBjb250YWlucwor IAorICEgVGVzdCBhcnJheSBjaGFyYWN0ZXJpc3RpY3MgZm9yIGR1bW1pZXMg YXJlIE9LCisgICAgICBtb2R1bGUgc3Vicm91dGluZSBhcnJheTModGhpcywg dGhhdCkKKyAgICAgICAgdHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNp b24oOikgOjogdGhpcworICAgICAgICB0eXBlKGZvbyksIGludGVudChpbk9V VCksIGFsbG9jYXRhYmxlLCBkaW1lbnNpb24oOikgOjogdGhhdAorICAgICAg ICBhbGxvY2F0ZSAodGhhdChzaXplKHRoaXMpKSwgc291cmNlID0gdGhpcykK KyAgICAgICAgdGhhdCVncmVldGluZyA9IHRoYXQlYnllYnllCisgICAgICBl bmQgc3Vicm91dGluZQorIAorICEgVGVzdCBhcnJheSBjaGFyYWN0ZXJpc3Rp Y3MgZm9yIGR1bW1pZXMgYXJlIE9LIGZvcgorICEgYWJicmV2aWF0ZWQgbW9k dWxlIHByb2NlZHVyZSBkZWNsYXJhdGlvbi4KKyAgICAgIG1vZHVsZSBwcm9j ZWR1cmUgYXJyYXk0CisgICAgICAgIGludGVnZXIgOjogaQorICAgICAgICBh bGxvY2F0ZSAodGhhdChzaXplKHRoaXMpKSwgc291cmNlID0gdGhpcykKKyAg ICAgICAgdGhhdCVncmVldGluZyA9IHRoYXQlYnllYnllCisgICAgICAgIGRv IGkgPSAxLCBzaXplICh0aGF0KQorICAgICAgICAgIHRoYXQoaSklZ3JlZXRp bmcgPSB0cmltICh0aGF0KGkpJWdyZWV0aW5nKDE6NSkpLy8iLCBwZW9wbGUh IgorICAgICAgICBlbmQgZG8KKyAgICAgIGVuZCBzdWJyb3V0aW5lCisgCisg ICBlbmQgU1VCTU9EVUxFIGZvb19pbnRlcmZhY2VfZGF1Z2h0ZXIKKyAKKyAh CisgIHByb2dyYW0gdHJ5CisgICAgdXNlIGZvb19pbnRlcmZhY2UKKyAgICBp bXBsaWNpdCBub25lCisgICAgdHlwZShmb28pLCBkaW1lbnNpb24oMikgOjog YmFyCisgICAgdHlwZSAoZm9vKSwgZGltZW5zaW9uKDopLCBhbGxvY2F0YWJs ZSA6OiBhcmcKKyAKKyAgICBhcmcgPSBhcnJheTEoYmFyKSAhIHR5cGVib3Vu ZCBjYWxsCisgICAgaWYgKGFueSAoYXJnJWdyZWV0aW5nIC5uZS4gWyJhZGll dSwgd29ybGQhICAgIiwgImFkaWV1LCB3b3JsZCEgICAiXSkpIGNhbGwgYWJv cnQKKyAgICBkZWFsbG9jYXRlIChhcmcpCisgICAgaWYgKHRyaW0gKGFycmF5 MiAoYmFyLCBhcmcpKSAubmUuICJhZGlldSwgcGVvcGxlISIpIGNhbGwgYWJv cnQKKyAgICBkZWFsbG9jYXRlIChhcmcpCisgICAgY2FsbCBhcnJheTMgKGJh ciwgYXJnKSAhIHR5cGVib3VuZCBjYWxsCisgICAgaWYgKGFueSAoYXJnJWdy ZWV0aW5nIC5uZS4gWyJhZGlldSwgd29ybGQhICAgIiwgImFkaWV1LCB3b3Js ZCEgICAiXSkpIGNhbGwgYWJvcnQKKyAgICBkZWFsbG9jYXRlIChhcmcpCisg ICAgY2FsbCBhcnJheTQgKGJhciwgYXJnKSAhIHR5cGVib3VuZCBjYWxsCisg ICAgaWYgKGFueSAoYXJnJWdyZWV0aW5nIC5uZS4gWyJhZGlldSwgcGVvcGxl ISIsICJhZGlldSwgcGVvcGxlISJdKSkgY2FsbCBhYm9ydAorICBjb250YWlu cworICBlbmQgcHJvZ3JhbQorICEKSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvc3VibW9kdWxlXzMuZjkwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzMu ZjkwCShyZXZpc2lvbiAwKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5k Zy9zdWJtb2R1bGVfMy5mOTAJKHdvcmtpbmcgY29weSkKKioqKioqKioqKioq KioqCioqKiAwICoqKioKLS0tIDEsMzYgLS0tLQorICEgeyBkZy1kbyBjb21w aWxlIH0KKyAhIHsgZGctb3B0aW9ucyAiLXN0ZD1mMjAwMyIgfQorICEKKyAh IENoZWNrIGVuZm9yY2VtZW50IG9mIEYyMDA4IHN0YW5kYXJkIGZvciBNT0RV TEUgUFJPQ0VEVVJFUyBhbmQgU1VCTU9EVUxFUworICEgVGhpcyBpcyByYXRo ZXIgYmFyZS1ib25lcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBlcnJvciBt ZXNzYWdlcyB0b28gdGhlCisgISBlc3NlbnRpYWwgbWluaW11bS4KKyAhCisg ISBDb250cmlidXRlZCBieSBQYXVsIFRob21hcyAgPHBhdWx0QGdjYy5nbnUu b3JnPgorICEKKyAgbW9kdWxlIGZvb19pbnRlcmZhY2UKKyAgICBpbXBsaWNp dCBub25lCisgCisgICAgaW50ZXJmYWNlCisgICAgICBtb2R1bGUgZnVuY3Rp b24gYXJyYXkxKHRoaXMpIHJlc3VsdCAodGhhdCkgISB7IGRnLWVycm9yICJN T0RVTEUgcHJlZml4IiB9CisgICAgICBlbmQgZnVuY3Rpb24gISB7IGRnLWVy cm9yICJFeHBlY3RpbmcgRU5EIElOVEVSRkFDRSIgfQorICAgICAgY2hhcmFj dGVyKDE2KSBtb2R1bGUgZnVuY3Rpb24gYXJyYXkyKHRoaXMsIHRoYXQpICEg eyBkZy1lcnJvciAiTU9EVUxFIHByZWZpeCIgfQorICAgICAgZW5kIGZ1bmN0 aW9uICEgeyBkZy1lcnJvciAiRXhwZWN0aW5nIEVORCBJTlRFUkZBQ0UiIH0K KyAgICBlbmQgaW50ZXJmYWNlCisgIGVuZCBtb2R1bGUKKyAKKyAhCisgICBT VUJNT0RVTEUgKGZvb19pbnRlcmZhY2UpIGZvb19pbnRlcmZhY2Vfc29uICEg eyBkZy1lcnJvciAiU1VCTU9EVUxFIGRlY2xhcmF0aW9uIiB9CisgIQorICAg Y29udGFpbnMKKyAKKyAgICAgIG1vZHVsZSBmdW5jdGlvbiBhcnJheTEgKHRo aXMpIHJlc3VsdCh0aGF0KSAhIHsgZGctZXJyb3IgIk1PRFVMRSBwcmVmaXgi IH0KKyAgICAgIGVuZCBmdW5jdGlvbiAhIHsgZGctZXJyb3IgIkV4cGVjdGlu ZyBFTkQgUFJPR1JBTSIgfQorIAorICEgVGVzdCBhcnJheSBjaGFyYWN0ZXJp c3RpY3MgZm9yIGR1bW15IGFuZCByZXN1bHQgYXJlIE9LIGZvcgorICEgYWJi cmV2aWF0ZWQgbW9kdWxlIHByb2NlZHVyZSBkZWNsYXJhdGlvbi4KKyAgICAg IG1vZHVsZSBwcm9jZWR1cmUgYXJyYXkyICEgeyBkZy1lcnJvciAibXVzdCBi ZSBpbiBhIGdlbmVyaWMgbW9kdWxlIGludGVyZmFjZSIgfQorICAgICAgZW5k IGZ1bmN0aW9uICEgeyBkZy1lcnJvciAiRXhwZWN0aW5nIEVORCBQUk9HUkFN IiB9CisgCisgICBlbmQgU1VCTU9EVUxFIGZvb19pbnRlcmZhY2Vfc29uICEg eyBkZy1lcnJvciAiRXhwZWN0aW5nIEVORCBQUk9HUkFNIiB9CisgCisgZW5k ICEgeyBkZy1lcnJvciAiQ09OVEFJTlMgc3RhdGVtZW50IHdpdGhvdXQgRlVO Q1RJT04gb3IgU1VCUk9VVElORSIgfQpJbmRleDogZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9zdWJtb2R1bGVfNC5mOTAKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQoqKiogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9zdWJtb2R1bGVf NC5mOTAJKHJldmlzaW9uIDApCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFu LmRnL3N1Ym1vZHVsZV80LmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioq KioqKioKKioqIDAgKioqKgotLS0gMSwxMzkgLS0tLQorICEgeyBkZy1kbyBj b21waWxlIH0KKyAhCisgISBUZXN0cyBjb21wYXJpc29ucyBvZiBNT0RVTEUg UFJPQ0VEVVJFIGNoYXJhY3RlcmlzdGljcyBhbmQKKyAhIHRoZSBjaGFyYWN0 ZXJpc3RpY3Mgb2YgdGhlaXIgZHVtbWllcy4KKyAhCisgISBDb250cmlidXRl ZCBieSBQYXVsIFRob21hcyAgPHBhdWx0QGdjYy5nbnUub3JnPgorICEKKyAg bW9kdWxlIGZvb19pbnRlcmZhY2UKKyAgICBpbXBsaWNpdCBub25lCisgICAg dHlwZSBmb28KKyAgICAgIGNoYXJhY3RlcihsZW49MTYpIDo6IGdyZWV0aW5n ID0gIkhlbGxvLCB3b3JsZCEgICAiCisgICAgICBjaGFyYWN0ZXIobGVuPTE2 KSwgcHJpdmF0ZSA6OiBieWVieWUgPSAiYWRpZXUsIHdvcmxkISAgICIKKyAg ICBlbmQgdHlwZSBmb28KKyAKKyAgICBpbnRlcmZhY2UKKyAgICAgIG1vZHVs ZSBmdW5jdGlvbiBhcnJheTEodGhpcykgcmVzdWx0ICh0aGF0KQorICAgICAg ICBpbXBvcnQgZm9vCisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50KGluKSwg ZGltZW5zaW9uKDopIDo6IHRoaXMKKyAgICAgICAgdHlwZShmb28pLCBhbGxv Y2F0YWJsZSwgZGltZW5zaW9uKDopIDo6IHRoYXQKKyAgICAgIGVuZCBmdW5j dGlvbgorICAgICAgY2hhcmFjdGVyKDE2KSBtb2R1bGUgZnVuY3Rpb24gYXJy YXkyKHRoaXMsIHRoYXQpCisgICAgICAgIGltcG9ydCBmb28KKyAgICAgICAg dHlwZShmb28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcwor ICAgICAgICB0eXBlKGZvbyksIGFsbG9jYXRhYmxlLCBkaW1lbnNpb24oOikg OjogdGhhdAorICAgICAgZW5kIGZ1bmN0aW9uCisgICAgICBtb2R1bGUgc3Vi cm91dGluZSBhcnJheTModGhpcywgdGhhdCkKKyAgICAgICAgaW1wb3J0IGZv bworICAgICAgICB0eXBlKGZvbyksIGludGVudChpbiksIGRpbWVuc2lvbig6 KSA6OiB0aGlzCisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50KGluT1VUKSwg YWxsb2NhdGFibGUsIGRpbWVuc2lvbig6KSA6OiB0aGF0CisgICAgICBlbmQg c3Vicm91dGluZQorICAgICAgbW9kdWxlIHN1YnJvdXRpbmUgYXJyYXk0KHRo aXMsIHRoYXQpCisgICAgICAgIGltcG9ydCBmb28KKyAgICAgICAgdHlwZShm b28pLCBpbnRlbnQoaW4pLCBkaW1lbnNpb24oOikgOjogdGhpcworICAgICAg ICB0eXBlKGZvbyksIGludGVudChpbk9VVCksIGFsbG9jYXRhYmxlLCBkaW1l bnNpb24oOikgOjogdGhhdAorICAgICAgZW5kIHN1YnJvdXRpbmUKKyAgICAg IGludGVnZXIgbW9kdWxlIGZ1bmN0aW9uIHNjYWxhcjEgKGFyZykKKyAgICAg ICAgIHJlYWwsIGludGVudChpbikgOjogYXJnCisgICAgICBlbmQgZnVuY3Rp b24KKyAgICAgIG1vZHVsZSBmdW5jdGlvbiBzY2FsYXIyIChhcmcpIHJlc3Vs dChyZXMpCisgICAgICAgICByZWFsLCBpbnRlbnQoaW4pIDo6IGFyZworICAg ICAgICAgcmVhbCA6OiByZXMKKyAgICAgIGVuZCBmdW5jdGlvbgorICAgICAg IG1vZHVsZSBmdW5jdGlvbiBzY2FsYXIzIChhcmcpIHJlc3VsdChyZXMpCisg ICAgICAgICByZWFsLCBpbnRlbnQoaW4pIDo6IGFyZworICAgICAgICAgcmVh bCA6OiByZXMKKyAgICAgIGVuZCBmdW5jdGlvbgorICAgICAgIG1vZHVsZSBm dW5jdGlvbiBzY2FsYXI0IChhcmcpIHJlc3VsdChyZXMpCisgICAgICAgICBy ZWFsLCBpbnRlbnQoaW4pIDo6IGFyZworICAgICAgICAgY29tcGxleCA6OiBy ZXMKKyAgICAgIGVuZCBmdW5jdGlvbgorICAgICAgIG1vZHVsZSBmdW5jdGlv biBzY2FsYXI1IChhcmcpIHJlc3VsdChyZXMpCisgICAgICAgICByZWFsLCBp bnRlbnQoaW4pIDo6IGFyZworICAgICAgICAgcmVhbCwgYWxsb2NhdGFibGUg OjogcmVzCisgICAgICBlbmQgZnVuY3Rpb24KKyAgICAgICBtb2R1bGUgZnVu Y3Rpb24gc2NhbGFyNiAoYXJnKSByZXN1bHQocmVzKQorICAgICAgICAgcmVh bCwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAgICAgIHJlYWwsIGFsbG9jYXRh YmxlIDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9uCisgICAgZW5kIGludGVy ZmFjZQorICBlbmQgbW9kdWxlCisgCisgIQorICAgU1VCTU9EVUxFIChmb29f aW50ZXJmYWNlKSBmb29faW50ZXJmYWNlX3NvbgorICEKKyAgIGNvbnRhaW5z CisgCisgICAgICBtb2R1bGUgZnVuY3Rpb24gYXJyYXkxICh0aGlzKSByZXN1 bHQodGhhdCkgISB7IGRnLWVycm9yICJSYW5rIG1pc21hdGNoIGluIGZ1bmN0 aW9uIHJlc3VsdCIgfQorICAgICAgICB0eXBlKGZvbyksIGludGVudChpbiks IGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5cGUoZm9vKSwgYWxs b2NhdGFibGUgOjogdGhhdAorICAgICAgZW5kIGZ1bmN0aW9uCisgCisgICAg ICBjaGFyYWN0ZXIoMTYpIG1vZHVsZSBmdW5jdGlvbiBhcnJheTIodGhpcykg ISB7IGRnLWVycm9yICJNaXNtYXRjaCBpbiBudW1iZXIgb2YgTU9EVUxFIFBS T0NFRFVSRSBmb3JtYWwgYXJndW1lbnRzIiB9CisgICAgICAgIHR5cGUoZm9v KSwgaW50ZW50KGluKSwgZGltZW5zaW9uKDopIDo6IHRoaXMKKyAgICAgICAg dHlwZShmb28pLCBhbGxvY2F0YWJsZSwgZGltZW5zaW9uKDopIDo6IHRoYXQK KyAgICAgICAgYWxsb2NhdGUgKHRoYXQoMiksIHNvdXJjZSA9IHRoaXMoMSkp CisgICAgICAgIHRoYXQlZ3JlZXRpbmcgPSB0aGF0JWJ5ZWJ5ZQorICAgICAg ICBhcnJheTIgPSB0cmltICh0aGF0KHNpemUgKHRoYXQpKSVncmVldGluZygx OjUpKS8vIiwgcGVvcGxlISIKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAg ICAgbW9kdWxlIHN1YnJvdXRpbmUgYXJyYXkzKHRoaXNzLCB0aGF0KSAhIHsg ZGctZXJyb3IgIk1pc21hdGNoIGluIE1PRFVMRSBQUk9DRURVUkUgZm9ybWFs IGFyZ3VtZW50IG5hbWVzIiB9CisgICAgICAgIHR5cGUoZm9vKSwgaW50ZW50 KGluKSwgZGltZW5zaW9uKDopIDo6IHRoaXNzCisgICAgICAgIHR5cGUoZm9v KSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRpbWVuc2lvbig6KSA6 OiB0aGF0CisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNpemUodGhpc3MpKSwg c291cmNlID0gdGhpc3MpCisgICAgICAgIHRoYXQlZ3JlZXRpbmcgPSB0aGF0 JWJ5ZWJ5ZQorICAgICAgZW5kIHN1YnJvdXRpbmUKKyAKKyAgICAgIG1vZHVs ZSBzdWJyb3V0aW5lIGFycmF5NCh0aGlzLCB0aGF0LCB0aGVfb3RoZXIpICEg eyBkZy1lcnJvciAiTWlzbWF0Y2ggaW4gbnVtYmVyIG9mIE1PRFVMRSBQUk9D RURVUkUgZm9ybWFsIGFyZ3VtZW50cyIgfQorICAgICAgICB0eXBlKGZvbyks IGludGVudChpbiksIGRpbWVuc2lvbig6KSA6OiB0aGlzCisgICAgICAgIHR5 cGUoZm9vKSwgaW50ZW50KGluT1VUKSwgYWxsb2NhdGFibGUsIGRpbWVuc2lv big6KSA6OiB0aGF0LCB0aGVfb3RoZXIKKyAgICAgICAgaW50ZWdlciA6OiBp CisgICAgICAgIGFsbG9jYXRlICh0aGF0KHNpemUodGhpcykpLCBzb3VyY2Ug PSB0aGlzKQorICAgICAgICB0aGF0JWdyZWV0aW5nID0gdGhhdCVieWVieWUK KyAgICAgICAgZG8gaSA9IDEsIHNpemUgKHRoYXQpCisgICAgICAgICAgdGhh dChpKSVncmVldGluZyA9IHRyaW0gKHRoYXQoaSklZ3JlZXRpbmcoMTo1KSkv LyIsIHBlb3BsZSEiCisgICAgICAgIGVuZCBkbworICAgICAgZW5kIHN1YnJv dXRpbmUKKyAKKyAgICAgIHJlY3Vyc2l2ZSBtb2R1bGUgZnVuY3Rpb24gc2Nh bGFyMSAoYXJnKSAhIHsgZGctZXJyb3IgIk1pc21hdGNoIGluIFJFQ1VSU0lW RSIgfQorICAgICAgICAgcmVhbCwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAg IGVuZCBmdW5jdGlvbgorIAorICAgICAgcHVyZSBtb2R1bGUgZnVuY3Rpb24g c2NhbGFyMiAoYXJnKSByZXN1bHQocmVzKSAhIHsgZGctZXJyb3IgIk1pc21h dGNoIGluIFBVUkUiIH0KKyAgICAgICAgIHJlYWwsIGludGVudChpbikgOjog YXJnCisgICAgICAgICByZWFsIDo6IHJlcworICAgICAgZW5kIGZ1bmN0aW9u CisgCisgICBlbmQgU1VCTU9EVUxFIGZvb19pbnRlcmZhY2Vfc29uCisgCisg IQorICAgU1VCTU9EVUxFIChmb29faW50ZXJmYWNlKSBmb29faW50ZXJmYWNl X2RhdWdodGVyCisgIQorICAgY29udGFpbnMKKyAKKyAgICAgICBtb2R1bGUg ZnVuY3Rpb24gc2NhbGFyMyAoYXJnKSByZXN1bHQocmVzKSAhIHsgZGctZXJy b3IgIlR5cGUgbWlzbWF0Y2ggaW4gYXJndW1lbnQiIH0KKyAgICAgICAgIGlu dGVnZXIsIGludGVudChpbikgOjogYXJnCisgICAgICAgICByZWFsIDo6IHJl cworICAgICAgZW5kIGZ1bmN0aW9uCisgCisgICAgICAgbW9kdWxlIGZ1bmN0 aW9uIHNjYWxhcjQgKGFyZykgcmVzdWx0KHJlcykgISB7IGRnLWVycm9yICJU eXBlIG1pc21hdGNoIGluIGZ1bmN0aW9uIHJlc3VsdCIgfQorICAgICAgICAg cmVhbCwgaW50ZW50KGluKSA6OiBhcmcKKyAgICAgICAgIHJlYWwgOjogcmVz CisgICAgICBlbmQgZnVuY3Rpb24KKyAKKyAgICAgICBtb2R1bGUgZnVuY3Rp b24gc2NhbGFyNSAoYXJnKSByZXN1bHQocmVzKSAhIHsgZGctZXJyb3IgIkFM TE9DQVRBQkxFIGF0dHJpYnV0ZSBtaXNtYXRjaCBpbiBmdW5jdGlvbiByZXN1 bHQgIiB9CisgICAgICAgICByZWFsLCBpbnRlbnQoaW4pIDo6IGFyZworICAg ICAgICAgcmVhbCA6OiByZXMKKyAgICAgIGVuZCBmdW5jdGlvbgorIAorICAg ICAgIG1vZHVsZSBmdW5jdGlvbiBzY2FsYXI2IChhcmcpIHJlc3VsdChyZXMp ICEgeyBkZy1lcnJvciAiUmFuayBtaXNtYXRjaCBpbiBhcmd1bWVudCIgfQor ICAgICAgICAgcmVhbCwgaW50ZW50KGluKSwgZGltZW5zaW9uKDIpIDo6IGFy ZworICAgICAgICAgcmVhbCwgYWxsb2NhdGFibGUgOjogcmVzCisgICAgICBl bmQgZnVuY3Rpb24KKyAgIGVuZCBTVUJNT0RVTEUgZm9vX2ludGVyZmFjZV9k YXVnaHRlcgorIAorICEKKyAgcHJvZ3JhbSB0cnkKKyAgICB1c2UgZm9vX2lu dGVyZmFjZQorICBlbmQgcHJvZ3JhbQorICEKSW5kZXg6IGdjYy90ZXN0c3Vp dGUvZ2ZvcnRyYW4uZGcvc3VibW9kdWxlXzUuZjkwCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvc3VibW9k dWxlXzUuZjkwCShyZXZpc2lvbiAwKQotLS0gZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9zdWJtb2R1bGVfNS5mOTAJKHdvcmtpbmcgY29weSkKKioqKioq KioqKioqKioqCioqKiAwICoqKioKLS0tIDEsMzggLS0tLQorICEgeyBkZy1k byBjb21waWxlIH0KKyAhCisgISBDaGVja3MgdGhhdCBQUklWQVRFL1BVQkxJ QyBub3QgYWxsb3dlZCBpbiBzdWJtb2R1bGVzLgorICEKKyAhIENvbnRyaWJ1 dGVkIGJ5IFBhdWwgVGhvbWFzICA8cGF1bHRAZ2NjLmdudS5vcmc+CisgIQor IG1vZHVsZSBmb29faW50ZXJmYWNlCisgICBpbXBsaWNpdCBub25lCisgICB0 eXBlIGZvbworICAgICBjaGFyYWN0ZXIobGVuPTE2KSwgcHJpdmF0ZSA6OiBi eWVieWUgPSAiYWRpZXUsIHdvcmxkISAgICIKKyAgIGVuZCB0eXBlIGZvbwor IGVuZCBtb2R1bGUKKyAKKyBTVUJNT0RVTEUgKGZvb19pbnRlcmZhY2UpIGZv b19pbnRlcmZhY2Vfc29uCisgICBwcml2YXRlICEgeyBkZy1lcnJvciAiUFJJ VkFURSBzdGF0ZW1lbnQiIH0KKyAgIHB1YmxpYyAhIHsgZGctZXJyb3IgIlBV QkxJQyBzdGF0ZW1lbnQiIH0KKyAgIGludGVnZXIsIHB1YmxpYyA6OiBpICEg eyBkZy1lcnJvciAiUFVCTElDIGF0dHJpYnV0ZSIgfQorICAgaW50ZWdlciwg cHJpdmF0ZSA6OiBqICEgeyBkZy1lcnJvciAiUFJJVkFURSBhdHRyaWJ1dGUi IH0KKyAgIHR5cGUgOjogYmFyCisgICAgIHByaXZhdGUgISB7IGRnLWVycm9y ICJQUklWQVRFIHN0YXRlbWVudCIgfQorICAgICBwdWJsaWMgISB7IGRnLWVy cm9yICJQVUJMSUMgc3RhdGVtZW50IiB9CisgICAgIGludGVnZXIsIHByaXZh dGUgOjogaSAhIHsgZGctZXJyb3IgIlBSSVZBVEUgYXR0cmlidXRlIiB9Cisg ICAgIGludGVnZXIsIHB1YmxpYyA6OiBqICEgeyBkZy1lcnJvciAiUFVCTElD IGF0dHJpYnV0ZSIgfQorICAgZW5kIHR5cGUgYmFyCisgY29udGFpbnMKKyAh CisgZW5kIHN1Ym1vZHVsZSBmb29faW50ZXJmYWNlX3NvbgorIAorIFNVQk1P RFVMRSAoZm9vX2ludGVyZmFjZSkgZm9vX2ludGVyZmFjZV9kYXVnaHRlcgor ICEKKyBjb250YWlucworICAgc3Vicm91dGluZSBmb29iYXIgKGFyZykKKyAg ICAgdHlwZShmb28pIDo6IGFyZworICAgICBhcmclYnllYnllID0gImhlbGxv LCB3b3JsZCEgICAiICEgQWNjZXNzIHRvIHByaXZhdGUgY29tcG9uZW50IGlz IE9LCisgICBlbmQgc3Vicm91dGluZQorIGVuZCBTVUJNT0RVTEUgZm9vX2lu dGVyZmFjZV9kYXVnaHRlcgorIAorIGVuZAo= --e89a8f50297e07737705191a8fa5--