From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 462CA394FC0E for ; Fri, 6 May 2022 13:20:59 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 462CA394FC0E Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.91,203,1647331200"; d="scan'208";a="78055070" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 06 May 2022 05:20:57 -0800 IronPort-SDR: P6ho2BbVBLoKShPxej0AW867VRMyYEXykmcGF4L3bGvR8+2XR5Wq0yJsgbX5HaJXOdQiKFcXgs HC/nZvxKlapNDyE/Nl7x0N2BJYf+zsm4oDJasFoBSx/6kpud/Ofw/qtwgOsV2GIpq0TimybHXc rXywCeyDhUh22DFleoF31Bnxlg+Qq37l1LDonBoQd+DkfoLiF4U+oKAp/f7qye2b8D5cgNE+VS 6i70BLvvomxLkd+e/HHztsvxeL0zdRsRzu2rK5pyBUVJjef5anP43W0OP3ysaqZT5gl2u9m99b XMw= Content-Type: multipart/mixed; boundary="------------PB0pfS5vllZ0Pi2JhusWwpUN" Message-ID: <46d77e14-080c-db6c-4032-e12899c5d059@codesourcery.com> Date: Fri, 6 May 2022 21:20:48 +0800 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Content-Language: en-US From: Chung-Lin Tang To: gcc-patches , Jakub Jelinek , Tobias Burnus , Catherine Moore , Andrew Stubbs , Hafiz Abid Qadeer Subject: [PATCH, OpenMP] Implement uses_allocators clause for target regions X-ClientProxiedBy: svr-orw-mbx-08.mgc.mentorg.com (147.34.90.208) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-10.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_MANYTO, KAM_SHORT, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 May 2022 13:21:05 -0000 --------------PB0pfS5vllZ0Pi2JhusWwpUN Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Jakub, this patch implements the uses_allocators clause for OpenMP target regions. For user defined allocator handles, this allows target regions to assign memory space and traits to allocators, and automatically calls omp_init/destroy_allocator() in the beginning/end of the target region. For pre-defined allocators (i.e. omp_..._mem_alloc names), this is a no-op, such clauses are not created. Asides from the front-end portions, the target region transforms are done in gimplify_omp_workshare. This patch also includes added changes to enforce the "allocate allocator must be also in a uses_allocator clause", as to mentioned in[1]. This is done during gimplify_scan_omp_clauses. [1] https://gcc.gnu.org/pipermail/gcc-patches/2022-May/594039.html Tested on mainline, please see if this is okay. Thanks, Chung-Lin 2022-05-06 Chung-Lin Tang gcc/c-family/ChangeLog: * c-omp.cc (c_omp_split_clauses): Add OMP_CLAUSE_USES_ALLOCATORS case. * c-pragma.h (enum pragma_omp_clause): Add PRAGMA_OMP_CLAUSE_USES_ALLOCATORS. gcc/c/ChangeLog: * c-parser.cc (c_parser_omp_clause_name): Add case for uses_allocators clause. (c_parser_omp_clause_uses_allocators): New function. (c_parser_omp_all_clauses): Add PRAGMA_OMP_CLAUSE_USES_ALLOCATORS case. (OMP_TARGET_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_USES_ALLOCATORS to mask. * c-typeck.cc (c_finish_omp_clauses): Add case handling for OMP_CLAUSE_USES_ALLOCATORS. gcc/cp/ChangeLog: * parser.cc (cp_parser_omp_clause_name): Add case for uses_allocators clause. (cp_parser_omp_clause_uses_allocators): New function. (cp_parser_omp_all_clauses): Add PRAGMA_OMP_CLAUSE_USES_ALLOCATORS case. (OMP_TARGET_CLAUSE_MASK): Add PRAGMA_OMP_CLAUSE_USES_ALLOCATORS to mask. * semantics.cc (finish_omp_clauses): Add case handling for OMP_CLAUSE_USES_ALLOCATORS. fortran/ChangeLog: * gfortran.h (struct gfc_omp_namelist): Add memspace_sym, traits_sym fields. (OMP_LIST_USES_ALLOCATORS): New list enum. * openmp.cc (enum omp_mask2): Add OMP_CLAUSE_USES_ALLOCATORS. (gfc_match_omp_clause_uses_allocators): New function. (gfc_match_omp_clauses): Add case to handle OMP_CLAUSE_USES_ALLOCATORS. (OMP_TARGET_CLAUSES): Add OMP_CLAUSE_USES_ALLOCATORS. (resolve_omp_clauses): Add "USES_ALLOCATORS" to clause_names[]. * trans-array.cc (gfc_conv_array_initializer): Adjust array index to always be a created tree expression instead of NULL_TREE when zero. * trans-openmp.cc (gfc_trans_omp_clauses): For ALLOCATE clause, handle using gfc_trans_omp_variable for EXPR_VARIABLE exprs. Add handling of OMP_LIST_USES_ALLOCATORS case. * types.def (BT_FN_VOID_PTRMODE): Define. (BT_FN_PTRMODE_PTRMODE_INT_PTR): Define. gcc/ChangeLog: * builtin-types.def (BT_FN_VOID_PTRMODE): Define. (BT_FN_PTRMODE_PTRMODE_INT_PTR): Define. * omp-builtins.def (BUILT_IN_OMP_INIT_ALLOCATOR): Define. (BUILT_IN_OMP_DESTROY_ALLOCATOR): Define. * tree-core.h (enum omp_clause_code): Add OMP_CLAUSE_USES_ALLOCATORS. * tree-pretty-print.cc (dump_omp_clause): Handle OMP_CLAUSE_USES_ALLOCATORS. * tree.h (OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR): New macro. (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE): New macro. (OMP_CLAUSE_USES_ALLOCATORS_TRAITS): New macro. * tree.cc (omp_clause_num_ops): Add OMP_CLAUSE_USES_ALLOCATORS. (omp_clause_code_name): Add "uses_allocators". * gimplify.cc (gimplify_scan_omp_clauses): Add checking of OpenMP target region allocate clauses, to require a uses_allocators clause to exist for allocators. (gimplify_omp_workshare): Add handling of OMP_CLAUSE_USES_ALLOCATORS for OpenMP target regions; create calls of omp_init/destroy_allocator around target region body. gcc/testsuite/ChangeLog: * c-c++-common/gomp/uses_allocators-1.c: New test. * c-c++-common/gomp/uses_allocators-2.c: New test. * gfortran.dg/gomp/uses_allocators-1.f90: New test. * gfortran.dg/gomp/uses_allocators-2.f90: New test. * gfortran.dg/gomp/uses_allocators-3.f90: New test. --------------PB0pfS5vllZ0Pi2JhusWwpUN Content-Type: text/plain; charset="UTF-8"; name="uses_allocators-1.patch" Content-Disposition: attachment; filename="uses_allocators-1.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9idWlsdGluLXR5cGVzLmRlZiBiL2djYy9idWlsdGluLXR5cGVz LmRlZgppbmRleCAzYTdjZWNkZjA4Ny4uYmUzZTZmZjY5N2UgMTAwNjQ0Ci0tLSBhL2djYy9i dWlsdGluLXR5cGVzLmRlZgorKysgYi9nY2MvYnVpbHRpbi10eXBlcy5kZWYKQEAgLTI4Myw2 ICsyODMsNyBAQCBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9ERkxPQVQzMl9ERkxPQVQz MiwgQlRfREZMT0FUMzIsIEJUX0RGTE9BVDMyKQogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRf Rk5fREZMT0FUNjRfREZMT0FUNjQsIEJUX0RGTE9BVDY0LCBCVF9ERkxPQVQ2NCkKIERFRl9G VU5DVElPTl9UWVBFXzEgKEJUX0ZOX0RGTE9BVDEyOF9ERkxPQVQxMjgsIEJUX0RGTE9BVDEy OCwgQlRfREZMT0FUMTI4KQogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRfRk5fVk9JRF9WUFRS LCBCVF9WT0lELCBCVF9WT0xBVElMRV9QVFIpCitERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9G Tl9WT0lEX1BUUk1PREUsIEJUX1ZPSUQsIEJUX1BUUk1PREUpCiBERUZfRlVOQ1RJT05fVFlQ RV8xIChCVF9GTl9WT0lEX1BUUlBUUiwgQlRfVk9JRCwgQlRfUFRSX1BUUikKIERFRl9GVU5D VElPTl9UWVBFXzEgKEJUX0ZOX1ZPSURfQ09OU1RfUFRSLCBCVF9WT0lELCBCVF9DT05TVF9Q VFIpCiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9VSU5UX1VJTlQsIEJUX1VJTlQsIEJU X1VJTlQpCkBAIC02NDEsNiArNjQyLDggQEAgREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5f UFRSX1NJWkVfU0laRV9QVFJNT0RFLAogCQkgICAgIEJUX1BUUiwgQlRfU0laRSwgQlRfU0la RSwgQlRfUFRSTU9ERSkKIERFRl9GVU5DVElPTl9UWVBFXzMgKEJUX0ZOX1ZPSURfUFRSX1VJ TlQ4X1BUUk1PREUsIEJUX1ZPSUQsIEJUX1BUUiwgQlRfVUlOVDgsCiAJCSAgICAgQlRfUFRS TU9ERSkKK0RFRl9GVU5DVElPTl9UWVBFXzMgKEJUX0ZOX1BUUk1PREVfUFRSTU9ERV9JTlRf UFRSLCBCVF9QVFJNT0RFLCBCVF9QVFJNT0RFLAorCQkgICAgIEJUX0lOVCwgQlRfUFRSKQog CiBERUZfRlVOQ1RJT05fVFlQRV80IChCVF9GTl9TSVpFX0NPTlNUX1BUUl9TSVpFX1NJWkVf RklMRVBUUiwKIAkJICAgICBCVF9TSVpFLCBCVF9DT05TVF9QVFIsIEJUX1NJWkUsIEJUX1NJ WkUsIEJUX0ZJTEVQVFIpCmRpZmYgLS1naXQgYS9nY2MvYy1mYW1pbHkvYy1vbXAuY2MgYi9n Y2MvYy1mYW1pbHkvYy1vbXAuY2MKaW5kZXggNzc3Y2RjNjU1NzIuLjUwNjZlMTM3Y2Y0IDEw MDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1vbXAuY2MKKysrIGIvZ2NjL2MtZmFtaWx5L2Mt b21wLmNjCkBAIC0xODcwLDYgKzE4NzAsNyBAQCBjX29tcF9zcGxpdF9jbGF1c2VzIChsb2Nh dGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwKIAljYXNlIE9NUF9DTEFVU0VfSEFT X0RFVklDRV9BRERSOgogCWNhc2UgT01QX0NMQVVTRV9ERUZBVUxUTUFQOgogCWNhc2UgT01Q X0NMQVVTRV9ERVBFTkQ6CisJY2FzZSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKIAkg IHMgPSBDX09NUF9DTEFVU0VfU1BMSVRfVEFSR0VUOwogCSAgYnJlYWs7CiAJY2FzZSBPTVBf Q0xBVVNFX05VTV9URUFNUzoKZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLXByYWdtYS5o IGIvZ2NjL2MtZmFtaWx5L2MtcHJhZ21hLmgKaW5kZXggNTQ4NjRjMmVjNDEuLjdmODk0NGY4 MWQ2IDEwMDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1wcmFnbWEuaAorKysgYi9nY2MvYy1m YW1pbHkvYy1wcmFnbWEuaApAQCAtMTU0LDYgKzE1NCw3IEBAIGVudW0gcHJhZ21hX29tcF9j bGF1c2UgewogICBQUkFHTUFfT01QX0NMQVVTRV9VTlRJRUQsCiAgIFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSLAogICBQUkFHTUFfT01QX0NMQVVTRV9VU0VfREVWSUNFX0FE RFIsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUywKIAogICAvKiBDbGF1 c2VzIGZvciBPcGVuQUNDLiAgKi8KICAgUFJBR01BX09BQ0NfQ0xBVVNFX0FTWU5DLApkaWZm IC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuY2MgYi9nY2MvYy9jLXBhcnNlci5jYwppbmRleCAx MjlkZDcyN2VmMy4uMmJlZmFkOTExNTggMTAwNjQ0Ci0tLSBhL2djYy9jL2MtcGFyc2VyLmNj CisrKyBiL2djYy9jL2MtcGFyc2VyLmNjCkBAIC0xMjkwNyw2ICsxMjkwNyw4IEBAIGNfcGFy c2VyX29tcF9jbGF1c2VfbmFtZSAoY19wYXJzZXIgKnBhcnNlcikKIAkgICAgcmVzdWx0ID0g UFJBR01BX09NUF9DTEFVU0VfVVNFX0RFVklDRV9BRERSOwogCSAgZWxzZSBpZiAoIXN0cmNt cCAoInVzZV9kZXZpY2VfcHRyIiwgcCkpCiAJICAgIHJlc3VsdCA9IFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSOworCSAgZWxzZSBpZiAoIXN0cmNtcCAoInVzZXNfYWxsb2Nh dG9ycyIsIHApKQorCSAgICByZXN1bHQgPSBQUkFHTUFfT01QX0NMQVVTRV9VU0VTX0FMTE9D QVRPUlM7CiAJICBicmVhazsKIAljYXNlICd2JzoKIAkgIGlmICghc3RyY21wICgidmVjdG9y IiwgcCkpCkBAIC0xNTYyNCw2ICsxNTYyNiwyMjUgQEAgY19wYXJzZXJfb21wX2NsYXVzZV9h bGxvY2F0ZSAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbmw7CiB9 CiAKKy8qIE9wZW5NUCA1LjI6CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxvY2F0b3ItbGlz dCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2NhdG9yCisgICBhbGxvY2F0b3Ig LCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkKKyAgIGFs bG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9yLWxpc3QKKworICAgdXNlc19h bGxvY2F0b3JzICggbW9kaWZpZXIgOiBhbGxvY2F0b3IgKQorICAgdXNlc19hbGxvY2F0b3Jz ICggbW9kaWZpZXIgLCBtb2RpZmllciA6IGFsbG9jYXRvciApCisKKyAgIG1vZGlmaWVyOgor ICAgdHJhaXRzICggdHJhaXRzLWFycmF5ICkKKyAgIG1lbXNwYWNlICggbWVtLXNwYWNlLWhh bmRsZSApICAqLworCitzdGF0aWMgdHJlZQorY19wYXJzZXJfb21wX2NsYXVzZV91c2VzX2Fs bG9jYXRvcnMgKGNfcGFyc2VyICpwYXJzZXIsIHRyZWUgbGlzdCkKK3sKKyAgbG9jYXRpb25f dCBjbGF1c2VfbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+bG9jYXRpb247 CisgIHRyZWUgbmw7CisgIG1hdGNoaW5nX3BhcmVucyBwYXJlbnM7CisgIGlmICghcGFyZW5z LnJlcXVpcmVfb3BlbiAocGFyc2VyKSkKKyAgICByZXR1cm4gbGlzdDsKKworICBib29sIGhh c19tb2RpZmllcnMgPSBmYWxzZTsKKyAgdHJlZSBtZW1zcGFjZV9leHByID0gTlVMTF9UUkVF OworICB0cmVlIHRyYWl0c192YXIgPSBOVUxMX1RSRUU7CisKKyAgaWYgKGNfcGFyc2VyX25l eHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpKQorICAgIHsKKyAgICAgIGNfdG9rZW4g KnRvayA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlcik7CisgICAgICBjb25zdCBjaGFy ICpwID0gSURFTlRJRklFUl9QT0lOVEVSICh0b2stPnZhbHVlKTsKKworICAgICAgaWYgKHN0 cmNtcCAoInRyYWl0cyIsIHApID09IDAgfHwgc3RyY21wICgibWVtc3BhY2UiLCBwKSA9PSAw KQorCXsKKwkgIGhhc19tb2RpZmllcnMgPSB0cnVlOworCSAgY19wYXJzZXJfY29uc3VtZV90 b2tlbiAocGFyc2VyKTsKKwkgIG1hdGNoaW5nX3BhcmVucyBwYXJlbnMyOzsKKwkgIHBhcmVu czIucmVxdWlyZV9vcGVuIChwYXJzZXIpOworCisJICBpZiAoY19wYXJzZXJfbmV4dF90b2tl bl9pcyAocGFyc2VyLCBDUFBfTkFNRSkKKwkgICAgICAmJiAoY19wYXJzZXJfcGVla190b2tl biAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX0lECisJCSAgfHwgY19wYXJzZXJfcGVla190 b2tlbiAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX1RZUEVOQU1FKSkKKwkgICAgeworCSAg ICAgIHRvayA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlcik7CisJICAgICAgdHJlZSB0 ID0gbG9va3VwX25hbWUgKHRvay0+dmFsdWUpOworCisJICAgICAgaWYgKHQgPT0gTlVMTF9U UkVFKQorCQl7CisJCSAgdW5kZWNsYXJlZF92YXJpYWJsZSAodG9rLT5sb2NhdGlvbiwgdG9r LT52YWx1ZSk7CisJCSAgdCA9IGVycm9yX21hcmtfbm9kZTsKKwkJfQorCSAgICAgIGVsc2UK KwkJeworCQkgIGlmIChzdHJjbXAgKCJtZW1zcGFjZSIsIHApID09IDApCisJCSAgICBtZW1z cGFjZV9leHByID0gdDsKKwkJICBlbHNlCisJCSAgICB0cmFpdHNfdmFyID0gdDsKKwkJfQor CSAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAgIH0KKworCSAg cGFyZW5zMi5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIpOworCisJICBpZiAoY19w YXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfQ09NTUEpKQorCSAgICB7CisJICAg ICAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKwkgICAgICB0b2sgPSBjX3Bh cnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpOworCSAgICAgIGNvbnN0IGNoYXIgKnEgPSAiIjsK KwkgICAgICBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfTkFNRSkp CisJCXEgPSBJREVOVElGSUVSX1BPSU5URVIgKHRvay0+dmFsdWUpOworCSAgICAgIGlmIChz dHJjbXAgKHEsICJtZW1zcGFjZSIpICE9IDAgJiYgc3RyY21wIChxLCAidHJhaXRzIikgIT0g MCkKKwkJeworCQkgIGNfcGFyc2VyX2Vycm9yIChwYXJzZXIsICJleHBlY3RlZCAlPG1lbXNw YWNlJT4gb3IgJTx0cmFpdHMlPiIpOworCQkgIHBhcmVucy5za2lwX3VudGlsX2ZvdW5kX2Ns b3NlIChwYXJzZXIpOworCQkgIHJldHVybiBsaXN0OworCQl9CisJICAgICAgZWxzZSBpZiAo c3RyY21wIChwLCBxKSA9PSAwKQorCQl7CisJCSAgZXJyb3JfYXQgKHRvay0+bG9jYXRpb24s ICJkdXBsaWNhdGUgJXFzIG1vZGlmaWVyIiwgcCk7CisJCSAgcGFyZW5zLnNraXBfdW50aWxf Zm91bmRfY2xvc2UgKHBhcnNlcik7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkgICAgICBj X3BhcnNlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOworCSAgICAgIGlmICghcGFyZW5zMi5y ZXF1aXJlX29wZW4gKHBhcnNlcikpCisJCXsKKwkJICBwYXJlbnMuc2tpcF91bnRpbF9mb3Vu ZF9jbG9zZSAocGFyc2VyKTsKKwkJICByZXR1cm4gbGlzdDsKKwkJfQorCisJICAgICAgaWYg KGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJCSAgJiYgKGNf cGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9JRAorCQkgICAg ICB8fCBjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT5pZF9raW5kID09IENfSURfVFlQ RU5BTUUpKQorCQl7CisJCSAgdG9rID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsK KwkJICB0cmVlIHQgPSBsb29rdXBfbmFtZSAodG9rLT52YWx1ZSk7CisJCSAgaWYgKHQgPT0g TlVMTF9UUkVFKQorCQkgICAgeworCQkgICAgICB1bmRlY2xhcmVkX3ZhcmlhYmxlICh0b2st PmxvY2F0aW9uLCB0b2stPnZhbHVlKTsKKwkJICAgICAgdCA9IGVycm9yX21hcmtfbm9kZTsK KwkJICAgIH0KKwkJICBlbHNlCisJCSAgICB7CisJCSAgICAgIGlmIChzdHJjbXAgKCJtZW1z cGFjZSIsIHEpID09IDApCisJCQltZW1zcGFjZV9leHByID0gdDsKKwkJICAgICAgZWxzZQor CQkJdHJhaXRzX3ZhciA9IHQ7CisJCSAgICB9CisJCSAgY19wYXJzZXJfY29uc3VtZV90b2tl biAocGFyc2VyKTsKKwkJfQorCSAgICAgIHBhcmVuczIuc2tpcF91bnRpbF9mb3VuZF9jbG9z ZSAocGFyc2VyKTsKKwkgICAgfQorCX0KKyAgICB9CisKKyAgaWYgKGhhc19tb2RpZmllcnMp CisgICAgeworICAgICAgaWYgKCFjX3BhcnNlcl9yZXF1aXJlIChwYXJzZXIsIENQUF9DT0xP TiwgImV4cGVjdGVkICU8OiU+IikpCisJeworCSAgcGFyZW5zLnNraXBfdW50aWxfZm91bmRf Y2xvc2UgKHBhcnNlcik7CisJICByZXR1cm4gbGlzdDsKKwl9CisKKyAgICAgIGlmIChjX3Bh cnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1FKQorCSAgJiYgY19wYXJzZXJf cGVla190b2tlbiAocGFyc2VyKS0+aWRfa2luZCA9PSBDX0lEX0lEKQorCXsKKwkgIHRyZWUg dCA9IGxvb2t1cF9uYW1lIChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIpLT52YWx1ZSk7 CisKKwkgIGlmICh0ID09IE5VTExfVFJFRSkKKwkgICAgeworCSAgICAgIHVuZGVjbGFyZWRf dmFyaWFibGUgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmxvY2F0aW9uLAorCQkJ CSAgIGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnZhbHVlKTsKKwkgICAgICB0ID0g ZXJyb3JfbWFya19ub2RlOworCSAgICB9CisJICBlbHNlIGlmICh0ICE9IGVycm9yX21hcmtf bm9kZSkKKwkgICAgeworCSAgICAgIHRyZWUgYyA9IGJ1aWxkX29tcF9jbGF1c2UgKGNsYXVz ZV9sb2MsCisJCQkJCSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyk7CisJICAgICAgT01Q X0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKSA9IHQ7CisJICAgICAgT01Q X0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0gbWVtc3BhY2VfZXhwcjsK KwkgICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKGMpID0gdHJhaXRz X3ZhcjsKKwkgICAgICBPTVBfQ0xBVVNFX0NIQUlOIChjKSA9IGxpc3Q7CisKKwkgICAgICBu bCA9IGM7CisJICAgIH0KKwkgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisK KwkgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9PUEVOX1BBUkVO KSkKKwkgICAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgIm1vZGlmaWVycyBjYW5ub3QgYmUg dXNlZCB3aXRoICIKKwkJCSAgICAibGVnYWN5IGFycmF5IHN5bnRheCIpOworCX0KKyAgICAg IGVsc2UKKwljX3BhcnNlcl9lcnJvciAocGFyc2VyLCAiZXhwZWN0ZWQgaWRlbnRpZmllciIp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRyYWl0c192YXIgPSBOVUxMX1RSRUU7 CisKKyAgICAgIG5sID0gbGlzdDsKKyAgICAgIHdoaWxlICh0cnVlKQorCXsKKwkgIGlmIChj X3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9OQU1FKQorCSAgICAgICYmIGNf cGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9JRCkKKwkgICAg eworCSAgICAgIGNfdG9rZW4gKnRvayA9IGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlcik7 CisJICAgICAgdHJlZSB0ID0gbG9va3VwX25hbWUgKHRvay0+dmFsdWUpOworCisJICAgICAg aWYgKHQgPT0gTlVMTF9UUkVFKQorCQl7CisJCSAgdW5kZWNsYXJlZF92YXJpYWJsZSAodG9r LT5sb2NhdGlvbiwgdG9rLT52YWx1ZSk7CisJCSAgYnJlYWs7CisJCX0KKwkgICAgICBlbHNl IGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKwkJYnJlYWs7CisKKwkgICAgICBjX3BhcnNl cl9jb25zdW1lX3Rva2VuIChwYXJzZXIpOworCisJICAgICAgaWYgKGNfcGFyc2VyX25leHRf dG9rZW5faXMgKHBhcnNlciwgQ1BQX09QRU5fUEFSRU4pKQorCQl7CisJCSAgbWF0Y2hpbmdf cGFyZW5zIHBhcmVuczI7CisJCSAgcGFyZW5zMi5jb25zdW1lX29wZW4gKHBhcnNlcik7CisJ CSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX05BTUUpCisJCSAg ICAgICYmIGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPmlkX2tpbmQgPT0gQ19JRF9J RCkKKwkJICAgIHsKKwkJICAgICAgdG9rID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2Vy KTsKKwkJICAgICAgdHJhaXRzX3ZhciA9IGxvb2t1cF9uYW1lICh0b2stPnZhbHVlKTsKKwkJ ICAgICAgaWYgKHRyYWl0c192YXIgPT0gTlVMTF9UUkVFKQorCQkJeworCQkJICB1bmRlY2xh cmVkX3ZhcmlhYmxlICh0b2stPmxvY2F0aW9uLCB0b2stPnZhbHVlKTsKKwkJCSAgYnJlYWs7 CisJCQl9CisJCSAgICAgIGNfcGFyc2VyX2NvbnN1bWVfdG9rZW4gKHBhcnNlcik7CisJCSAg ICB9CisJCSAgZWxzZQorCQkgICAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVk IGlkZW50aWZpZXIiKTsKKwkJICBwYXJlbnMyLnJlcXVpcmVfY2xvc2UgKHBhcnNlcik7CisJ CX0KKworCSAgICAgIHRyZWUgYyA9IGJ1aWxkX29tcF9jbGF1c2UgKGNsYXVzZV9sb2MsCisJ CQkJCSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyk7CisJICAgICAgT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKSA9IHQ7CisJICAgICAgT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0gTlVMTF9UUkVFOworCSAgICAgIE9NUF9D TEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykgPSB0cmFpdHNfdmFyOworCSAgICAg IE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbmw7CisKKwkgICAgICBubCA9IGM7CisJICAgIH0K KworCSAgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXNfbm90IChwYXJzZXIsIENQUF9DT01N QSkpCisJICAgIGJyZWFrOworCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsK Kwl9CisgICAgfQorCisgIHBhcmVucy5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIp OworICByZXR1cm4gbmw7Cit9CisKIC8qIE9wZW5NUCA0LjA6CiAgICBsaW5lYXIgKCB2YXJp YWJsZS1saXN0ICkKICAgIGxpbmVhciAoIHZhcmlhYmxlLWxpc3QgOiBleHByZXNzaW9uICkK QEAgLTE3MDUwLDYgKzE3MjcxLDEwIEBAIGNfcGFyc2VyX29tcF9hbGxfY2xhdXNlcyAoY19w YXJzZXIgKnBhcnNlciwgb21wX2NsYXVzZV9tYXNrIG1hc2ssCiAJICBjbGF1c2VzID0gY19w YXJzZXJfb21wX2NsYXVzZV9hbGxvY2F0ZSAocGFyc2VyLCBjbGF1c2VzKTsKIAkgIGNfbmFt ZSA9ICJhbGxvY2F0ZSI7CiAJICBicmVhazsKKwljYXNlIFBSQUdNQV9PTVBfQ0xBVVNFX1VT RVNfQUxMT0NBVE9SUzoKKwkgIGNsYXVzZXMgPSBjX3BhcnNlcl9vbXBfY2xhdXNlX3VzZXNf YWxsb2NhdG9ycyAocGFyc2VyLCBjbGF1c2VzKTsKKwkgIGNfbmFtZSA9ICJ1c2VzX2FsbG9j YXRvcnMiOworCSAgYnJlYWs7CiAJY2FzZSBQUkFHTUFfT01QX0NMQVVTRV9MSU5FQVI6IAog CSAgY2xhdXNlcyA9IGNfcGFyc2VyX29tcF9jbGF1c2VfbGluZWFyIChwYXJzZXIsIGNsYXVz ZXMpOyAKIAkgIGNfbmFtZSA9ICJsaW5lYXIiOwpAQCAtMjEwNjEsNyArMjEyODYsOCBAQCBj X3BhcnNlcl9vbXBfdGFyZ2V0X2V4aXRfZGF0YSAobG9jYXRpb25fdCBsb2MsIGNfcGFyc2Vy ICpwYXJzZXIsCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0Vf SU5fUkVEVUNUSU9OKQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9D TEFVU0VfVEhSRUFEX0xJTUlUKQlcCiAJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01B X09NUF9DTEFVU0VfSVNfREVWSUNFX1BUUilcCi0JfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwg UFJBR01BX09NUF9DTEFVU0VfSEFTX0RFVklDRV9BRERSKSkKKwl8IChPTVBfQ0xBVVNFX01B U0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9IQVNfREVWSUNFX0FERFIpXAorCXwgKE9NUF9D TEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUykpCiAK IHN0YXRpYyBib29sCiBjX3BhcnNlcl9vbXBfdGFyZ2V0IChjX3BhcnNlciAqcGFyc2VyLCBl bnVtIHByYWdtYV9jb250ZXh0IGNvbnRleHQsIGJvb2wgKmlmX3ApCmRpZmYgLS1naXQgYS9n Y2MvYy9jLXR5cGVjay5jYyBiL2djYy9jL2MtdHlwZWNrLmNjCmluZGV4IGUxMzAxOTZhM2E3 Li4wZTFmMzNiNjU1ZCAxMDA2NDQKLS0tIGEvZ2NjL2MvYy10eXBlY2suY2MKKysrIGIvZ2Nj L2MvYy10eXBlY2suY2MKQEAgLTE0NzYzLDYgKzE0NzYzLDEwMiBAQCBjX2ZpbmlzaF9vbXBf Y2xhdXNlcyAodHJlZSBjbGF1c2VzLCBlbnVtIGNfb21wX3JlZ2lvbl90eXBlIG9ydCkKIAkg ICAgfQogCSAgYnJlYWs7CiAKKwljYXNlIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgor CSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX0FMTE9DQVRPUiAoYyk7CisJICBp ZiAoYml0bWFwX2JpdF9wICgmZ2VuZXJpY19oZWFkLCBERUNMX1VJRCAodCkpCisJICAgICAg fHwgYml0bWFwX2JpdF9wICgmbWFwX2hlYWQsIERFQ0xfVUlEICh0KSkKKwkgICAgICB8fCBi aXRtYXBfYml0X3AgKCZmaXJzdHByaXZhdGVfaGVhZCwgREVDTF9VSUQgKHQpKQorCSAgICAg IHx8IGJpdG1hcF9iaXRfcCAoJmxhc3Rwcml2YXRlX2hlYWQsIERFQ0xfVUlEICh0KSkpCisJ ICAgIHsKKwkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksCisJCQki JXFFIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gZGF0YSBjbGF1c2VzIiwgdCk7CisJICAg ICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgfQorCSAgZWxzZQorCSAgICBiaXRtYXBfc2V0X2Jp dCAoJmdlbmVyaWNfaGVhZCwgREVDTF9VSUQgKHQpKTsKKwkgIGlmIChUUkVFX0NPREUgKFRS RUVfVFlQRSAodCkpICE9IEVOVU1FUkFMX1RZUEUKKwkgICAgICB8fCBzdHJjbXAgKElERU5U SUZJRVJfUE9JTlRFUiAoVFlQRV9JREVOVElGSUVSIChUUkVFX1RZUEUgKHQpKSksCisJCQkg Im9tcF9hbGxvY2F0b3JfaGFuZGxlX3QiKSAhPSAwKQorCSAgICB7CisJICAgICAgZXJyb3Jf YXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkJImFsbG9jYXRvciBtdXN0IGJlIG9m ICU8b21wX2FsbG9jYXRvcl9oYW5kbGVfdCU+IHR5cGUiKTsKKwkgICAgICByZW1vdmUgPSB0 cnVlOworCSAgICB9CisJICBpZiAoVFJFRV9DT0RFICh0KSA9PSBDT05TVF9ERUNMKQorCSAg ICB7CisJICAgICAgaWYgKE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX01FTVNQQUNFIChj KQorCQkgIHx8IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykpCisJCWVy cm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCSAgIm1vZGlmaWVycyBjYW5u b3QgYmUgdXNlZCB3aXRoIHByZS1kZWZpbmVkICIKKwkJCSAgImFsbG9jYXRvcnMiKTsKKwor CSAgICAgIC8qIEN1cnJlbnRseSBmb3IgcHJlLWRlZmluZWQgYWxsb2NhdG9ycyBpbiBsaWJn b21wLCB3ZSBkbyBub3QKKwkJIHJlcXVpcmUgYWRkaXRpb25hbCBpbml0L2ZpbmkgaW5zaWRl IHRhcmdldCByZWdpb25zLCBzbyBkaXNjYXJkCisJCSBzdWNoIGNsYXVzZXMuICAqLworCSAg ICAgIHJlbW92ZSA9IHRydWU7CisJICAgIH0KKwkgIHQgPSBPTVBfQ0xBVVNFX1VTRVNfQUxM T0NBVE9SU19NRU1TUEFDRSAoYyk7CisJICBpZiAodCAhPSBOVUxMX1RSRUUKKwkgICAgICAm JiAoVFJFRV9DT0RFICh0KSAhPSBDT05TVF9ERUNMCisJCSAgfHwgVFJFRV9DT0RFIChUUkVF X1RZUEUgKHQpKSAhPSBFTlVNRVJBTF9UWVBFCisJCSAgfHwgc3RyY21wIChJREVOVElGSUVS X1BPSU5URVIgKFRZUEVfSURFTlRJRklFUiAoVFJFRV9UWVBFICh0KSkpLAorCQkJICAgICAi b21wX21lbXNwYWNlX2hhbmRsZV90IikgIT0gMCkpCisJICAgIHsKKwkgICAgICBlcnJvcl9h dCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJtZW1zcGFjZSBtb2RpZmllciBtdXN0IGJl ICIKKwkJCSJjb25zdGFudCBlbnVtIG9mICU8b21wX21lbXNwYWNlX2hhbmRsZV90JT4gdHlw ZSIpOworCSAgICAgIHJlbW92ZSA9IHRydWU7CisJICAgIH0KKwkgIHQgPSBPTVBfQ0xBVVNF X1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKGMpOworCSAgaWYgKHQgIT0gTlVMTF9UUkVFKQor CSAgICB7CisJICAgICAgYm9vbCB0eXBlX2VyciA9IGZhbHNlOworCisJICAgICAgaWYgKFRS RUVfQ09ERSAoVFJFRV9UWVBFICh0KSkgIT0gQVJSQVlfVFlQRSkKKwkJdHlwZV9lcnIgPSB0 cnVlOworCSAgICAgIGVsc2UKKwkJeworCQkgIHRyZWUgZWxlbV90ID0gVFJFRV9UWVBFIChU UkVFX1RZUEUgKHQpKTsKKwkJICBpZiAoVFJFRV9DT0RFIChlbGVtX3QpICE9IFJFQ09SRF9U WVBFCisJCSAgICAgIHx8IHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChUWVBFX0lERU5U SUZJRVIgKGVsZW1fdCkpLAorCQkJCSAib21wX2FsbG9jdHJhaXRfdCIpICE9IDAKKwkJICAg ICAgfHwgIVRZUEVfUkVBRE9OTFkgKGVsZW1fdCkpCisJCSAgICB0eXBlX2VyciA9IHRydWU7 CisJCX0KKwkgICAgICBpZiAodHlwZV9lcnIpCisJCXsKKwkJICBlcnJvcl9hdCAoT01QX0NM QVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVzdCBiZSBvZiAiCisJCQkgICAg IiU8Y29uc3Qgb21wX2FsbG9jdHJhaXRfdCBbXSU+IHR5cGUiKTsKKwkJICByZW1vdmUgPSB0 cnVlOworCQl9CisJICAgICAgZWxzZQorCQl7CisJCSAgdHJlZSBjc3RfdmFsID0gZGVjbF9j b25zdGFudF92YWx1ZV8xICh0LCB0cnVlKTsKKwkJICBpZiAoY3N0X3ZhbCA9PSB0KQorCQkg ICAgeworCQkgICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFp dHMgYXJyYXkgbXVzdCBiZSAiCisJCQkJIm9mIGNvbnN0YW50IHZhbHVlcyIpOworCisJCSAg ICAgIHJlbW92ZSA9IHRydWU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCisJICBpZiAocmVt b3ZlKQorCSAgICBicmVhazsKKwkgIGVsc2UKKwkgICAgeworCSAgICAgIC8qIENyZWF0ZSBh IHByaXZhdGUgY2xhdXNlIGZvciB0aGUgYWxsb2NhdG9yIHZhcmlhYmxlLCBwbGFjZWQKKwkJ IHByaW9yIHRvIGN1cnJlbnQgdXNlc19hbGxvY2F0b3JzIGNsYXVzZS4gICovCisJICAgICAg dHJlZSBuYyA9IGJ1aWxkX29tcF9jbGF1c2UgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAor CQkJCQkgIE9NUF9DTEFVU0VfUFJJVkFURSk7CisJICAgICAgT01QX0NMQVVTRV9ERUNMIChu YykgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpOworCSAgICAg IE9NUF9DTEFVU0VfQ0hBSU4gKG5jKSA9IGM7CisJICAgICAgKnBjID0gbmM7CisKKwkgICAg ICBwYyA9ICZPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkgICAgICBjb250aW51ZTsKKwkgICAg fQorCiAJY2FzZSBPTVBfQ0xBVVNFX0RFUEVORDoKIAkgIHQgPSBPTVBfQ0xBVVNFX0RFQ0wg KGMpOwogCSAgaWYgKHQgPT0gTlVMTF9UUkVFKQpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNl ci5jYyBiL2djYy9jcC9wYXJzZXIuY2MKaW5kZXggMjIzNWRhMTBjN2MuLjE0M2M3MGQwYjQ5 IDEwMDY0NAotLS0gYS9nY2MvY3AvcGFyc2VyLmNjCisrKyBiL2djYy9jcC9wYXJzZXIuY2MK QEAgLTM2NDkwLDYgKzM2NDkwLDggQEAgY3BfcGFyc2VyX29tcF9jbGF1c2VfbmFtZSAoY3Bf cGFyc2VyICpwYXJzZXIpCiAJICAgIHJlc3VsdCA9IFBSQUdNQV9PTVBfQ0xBVVNFX1VTRV9E RVZJQ0VfQUREUjsKIAkgIGVsc2UgaWYgKCFzdHJjbXAgKCJ1c2VfZGV2aWNlX3B0ciIsIHAp KQogCSAgICByZXN1bHQgPSBQUkFHTUFfT01QX0NMQVVTRV9VU0VfREVWSUNFX1BUUjsKKwkg IGVsc2UgaWYgKCFzdHJjbXAgKCJ1c2VzX2FsbG9jYXRvcnMiLCBwKSkKKwkgICAgcmVzdWx0 ID0gUFJBR01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOwogCSAgYnJlYWs7CiAJY2Fz ZSAndic6CiAJICBpZiAoIXN0cmNtcCAoInZlY3RvciIsIHApKQpAQCAtMzg3MzMsNiArMzg3 MzUsMjQ2IEBAIGNwX3BhcnNlcl9vbXBfY2xhdXNlX2FsbG9jYXRlIChjcF9wYXJzZXIgKnBh cnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbmxpc3Q7CiB9CiAKKy8qIE9wZW5NUCA1LjI6 CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxvY2F0b3ItbGlzdCApCisKKyAgIGFsbG9jYXRv ci1saXN0OgorICAgYWxsb2NhdG9yCisgICBhbGxvY2F0b3IgLCBhbGxvY2F0b3ItbGlzdAor ICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkKKyAgIGFsbG9jYXRvciAoIHRyYWl0cy1h cnJheSApICwgYWxsb2NhdG9yLWxpc3QKKworICAgdXNlc19hbGxvY2F0b3JzICggbW9kaWZp ZXIgOiBhbGxvY2F0b3IgKQorICAgdXNlc19hbGxvY2F0b3JzICggbW9kaWZpZXIgLCBtb2Rp ZmllciA6IGFsbG9jYXRvciApCisKKyAgIG1vZGlmaWVyOgorICAgdHJhaXRzICggdHJhaXRz LWFycmF5ICkKKyAgIG1lbXNwYWNlICggbWVtLXNwYWNlLWhhbmRsZSApICAqLworCitzdGF0 aWMgdHJlZQorY3BfcGFyc2VyX29tcF9jbGF1c2VfdXNlc19hbGxvY2F0b3JzIChjcF9wYXJz ZXIgKnBhcnNlciwgdHJlZSBsaXN0KQoreworICBsb2NhdGlvbl90IGNsYXVzZV9sb2MKKyAg ICA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpLT5sb2NhdGlvbjsKKyAg dHJlZSB0ID0gTlVMTF9UUkVFLCBubDsKKyAgbWF0Y2hpbmdfcGFyZW5zIHBhcmVuczsKKyAg aWYgKCFwYXJlbnMucmVxdWlyZV9vcGVuIChwYXJzZXIpKQorICAgIHJldHVybiBsaXN0Owor CisgIGJvb2wgaGFzX21vZGlmaWVycyA9IGZhbHNlOworICB0cmVlIG1lbXNwYWNlX2V4cHIg PSBOVUxMX1RSRUU7CisgIHRyZWUgdHJhaXRzX3ZhciA9IE5VTExfVFJFRTsKKworICBpZiAo Y3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX05BTUUpKQorICAg IHsKKyAgICAgIGNwX3Rva2VuICp0b2sgPSBjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXIt PmxleGVyKTsKKyAgICAgIGNvbnN0IGNoYXIgKnAgPSBJREVOVElGSUVSX1BPSU5URVIgKHRv ay0+dS52YWx1ZSk7CisKKyAgICAgIGlmIChzdHJjbXAgKCJ0cmFpdHMiLCBwKSA9PSAwIHx8 IHN0cmNtcCAoIm1lbXNwYWNlIiwgcCkgPT0gMCkKKwl7CisJICBoYXNfbW9kaWZpZXJzID0g dHJ1ZTsKKwkgIGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAg bWF0Y2hpbmdfcGFyZW5zIHBhcmVuczI7OworCSAgcGFyZW5zMi5yZXF1aXJlX29wZW4gKHBh cnNlcik7CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVy LCBDUFBfTkFNRSkpCisJICAgIHsKKwkgICAgICB0b2sgPSBjcF9sZXhlcl9wZWVrX3Rva2Vu IChwYXJzZXItPmxleGVyKTsKKwkgICAgICB0cmVlIGlkID0gdG9rLT51LnZhbHVlOworCisJ ICAgICAgdCA9IGNwX3BhcnNlcl9sb29rdXBfbmFtZV9zaW1wbGUgKHBhcnNlciwgaWQsIHRv ay0+bG9jYXRpb24pOworCSAgICAgIGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKwkJY3Bf cGFyc2VyX25hbWVfbG9va3VwX2Vycm9yIChwYXJzZXIsIGlkLCB0LCBOTEVfTlVMTCwKKwkJ CQkJICAgICB0b2stPmxvY2F0aW9uKTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBpZiAoc3Ry Y21wICgibWVtc3BhY2UiLCBwKSA9PSAwKQorCQkgICAgbWVtc3BhY2VfZXhwciA9IHQ7CisJ CSAgZWxzZQorCQkgICAgdHJhaXRzX3ZhciA9IHQ7CisJCX0KKwkgICAgICBjcF9sZXhlcl9j b25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkgICAgfQorCisJICBpZiAodCA9PSBl cnJvcl9tYXJrX25vZGUgfHwgIXBhcmVucy5yZXF1aXJlX2Nsb3NlIChwYXJzZXIpKQorCSAg ICB7CisJICAgICAgY3BfcGFyc2VyX3NraXBfdG9fY2xvc2luZ19wYXJlbnRoZXNpcyAocGFy c2VyLAorCQkJCQkJICAgICAvKnJlY292ZXJpbmc9Ki90cnVlLAorCQkJCQkJICAgICAvKm9y X2NvbW1hPSovZmFsc2UsCisJCQkJCQkgICAgIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOwor CSAgICAgIHJldHVybiBsaXN0OworCSAgICB9CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rv a2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfQ09NTUEpKQorCSAgICB7CisJICAgICAgY3Bf bGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CisJICAgICAgdG9rID0gY3Bf bGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcik7CisJICAgICAgY29uc3QgY2hhciAq cSA9ICIiOworCisJICAgICAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+ bGV4ZXIsIENQUF9OQU1FKSkKKwkJcSA9IElERU5USUZJRVJfUE9JTlRFUiAodG9rLT51LnZh bHVlKTsKKworCSAgICAgIGlmIChzdHJjbXAgKHEsICJtZW1zcGFjZSIpICE9IDAgJiYgc3Ry Y21wIChxLCAidHJhaXRzIikgIT0gMCkKKwkJeworCQkgIGNwX3BhcnNlcl9lcnJvciAocGFy c2VyLCAiZXhwZWN0ZWQgJTxtZW1zcGFjZSU+IG9yICU8dHJhaXRzJT4iKTsKKwkJICBjcF9w YXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVudGhlc2lzIChwYXJzZXIsCisJCQkJCQkJIC8q cmVjb3ZlcmluZz0qL3RydWUsCisJCQkJCQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJ CQkgLypjb25zdW1lX3BhcmVuPSovdHJ1ZSk7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkg ICAgICBlbHNlIGlmIChzdHJjbXAgKHAsIHEpID09IDApCisJCXsKKwkJICBlcnJvcl9hdCAo dG9rLT5sb2NhdGlvbiwgImR1cGxpY2F0ZSAlcXMgbW9kaWZpZXIiLCBwKTsKKwkJICBjcF9w YXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVudGhlc2lzIChwYXJzZXIsCisJCQkJCQkJIC8q cmVjb3ZlcmluZz0qL3RydWUsCisJCQkJCQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJ CQkgLypjb25zdW1lX3BhcmVuPSovdHJ1ZSk7CisJCSAgcmV0dXJuIGxpc3Q7CisJCX0KKwkg ICAgICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkgICAgICBp ZiAoIXBhcmVuczIucmVxdWlyZV9vcGVuIChwYXJzZXIpKQorCQl7CisJCSAgY3BfcGFyc2Vy X3NraXBfdG9fY2xvc2luZ19wYXJlbnRoZXNpcyAocGFyc2VyLAorCQkJCQkJCSAvKnJlY292 ZXJpbmc9Ki90cnVlLAorCQkJCQkJCSAvKm9yX2NvbW1hPSovZmFsc2UsCisJCQkJCQkJIC8q Y29uc3VtZV9wYXJlbj0qL3RydWUpOworCQkgIHJldHVybiBsaXN0OworCQl9CisKKwkgICAg ICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX05BTUUp KQorCQl7CisJCSAgdG9rID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhlcik7 CisJCSAgdHJlZSBpZCA9IHRvay0+dS52YWx1ZTsKKworCQkgIHQgPSBjcF9wYXJzZXJfbG9v a3VwX25hbWVfc2ltcGxlIChwYXJzZXIsIGlkLCB0b2stPmxvY2F0aW9uKTsKKwkJICBpZiAo dCA9PSBlcnJvcl9tYXJrX25vZGUpCisJCSAgICBjcF9wYXJzZXJfbmFtZV9sb29rdXBfZXJy b3IgKHBhcnNlciwgaWQsIHQsIE5MRV9OVUxMLAorCQkJCQkJIHRvay0+bG9jYXRpb24pOwor CQkgIGVsc2UKKwkJICAgIHsKKwkJICAgICAgaWYgKHN0cmNtcCAoIm1lbXNwYWNlIiwgcSkg PT0gMCkKKwkJCW1lbXNwYWNlX2V4cHIgPSB0OworCQkgICAgICBlbHNlCisJCQl0cmFpdHNf dmFyID0gdDsKKwkJICAgIH0KKwkJICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXIt PmxleGVyKTsKKwkJfQorCisJICAgICAgaWYgKHQgPT0gZXJyb3JfbWFya19ub2RlIHx8ICFw YXJlbnMucmVxdWlyZV9jbG9zZSAocGFyc2VyKSkKKwkJeworCQkgIGNwX3BhcnNlcl9za2lw X3RvX2Nsb3NpbmdfcGFyZW50aGVzaXMgKHBhcnNlciwKKwkJCQkJCQkgLypyZWNvdmVyaW5n PSovdHJ1ZSwKKwkJCQkJCQkgLypvcl9jb21tYT0qL2ZhbHNlLAorCQkJCQkJCSAvKmNvbnN1 bWVfcGFyZW49Ki90cnVlKTsKKwkJICByZXR1cm4gbGlzdDsKKwkJfQorCSAgICB9CisKKwl9 CisgICAgfQorCisgIGlmIChoYXNfbW9kaWZpZXJzKQorICAgIHsKKyAgICAgIGlmICghY3Bf cGFyc2VyX3JlcXVpcmUgKHBhcnNlciwgQ1BQX0NPTE9OLCBSVF9DT0xPTikpCisJeworCSAg Y3BfcGFyc2VyX3NraXBfdG9fY2xvc2luZ19wYXJlbnRoZXNpcyAocGFyc2VyLCAvKnJlY292 ZXJpbmc9Ki90cnVlLAorCQkJCQkJIC8qb3JfY29tbWE9Ki9mYWxzZSwKKwkJCQkJCSAvKmNv bnN1bWVfcGFyZW49Ki90cnVlKTsKKwkgIHJldHVybiBsaXN0OworCX0KKworICAgICAgaWYg KGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9OQU1FKSkKKwl7 CisJICBjcF90b2tlbiAqdG9rID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFyc2VyLT5sZXhl cik7CisJICB0cmVlIGlkID0gdG9rLT51LnZhbHVlOworCSAgdHJlZSB0ID0gY3BfcGFyc2Vy X2xvb2t1cF9uYW1lX3NpbXBsZSAocGFyc2VyLCBpZCwgdG9rLT5sb2NhdGlvbik7CisKKwkg IGlmICh0ID09IGVycm9yX21hcmtfbm9kZSkKKwkgICAgY3BfcGFyc2VyX25hbWVfbG9va3Vw X2Vycm9yIChwYXJzZXIsIGlkLCB0LCBOTEVfTlVMTCwKKwkJCQkJIHRvay0+bG9jYXRpb24p OworCSAgZWxzZQorCSAgICB7CisJICAgICAgdHJlZSBjID0gYnVpbGRfb21wX2NsYXVzZSAo Y2xhdXNlX2xvYywKKwkJCQkJIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKTsKKwkgICAg ICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpID0gdDsKKwkgICAg ICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAoYykgPSBtZW1zcGFjZV9l eHByOworCSAgICAgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYykgPSB0 cmFpdHNfdmFyOworCSAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbGlzdDsKKworCSAg ICAgIG5sID0gYzsKKwkgICAgfQorCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy LT5sZXhlcik7CisKKwkgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxl eGVyLCBDUFBfT1BFTl9QQVJFTikpCisJICAgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAi bW9kaWZpZXJzIGNhbm5vdCBiZSB1c2VkIHdpdGggIgorCQkJICAgICAibGVnYWN5IGFycmF5 IHN5bnRheCIpOworCX0KKyAgICAgIGVsc2UKKwljcF9wYXJzZXJfZXJyb3IgKHBhcnNlciwg ImV4cGVjdGVkIGlkZW50aWZpZXIiKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB0 cmFpdHNfdmFyID0gTlVMTF9UUkVFOworCisgICAgICBubCA9IGxpc3Q7CisgICAgICB3aGls ZSAodHJ1ZSkKKwl7CisJICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5s ZXhlciwgQ1BQX05BTUUpKQorCSAgICB7CisJICAgICAgY3BfdG9rZW4gKnRvayA9IGNwX2xl eGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgICAgIHRyZWUgaWQgPSB0b2st PnUudmFsdWU7CisKKwkgICAgICB0cmVlIHQgPSBjcF9wYXJzZXJfbG9va3VwX25hbWVfc2lt cGxlIChwYXJzZXIsIGlkLCB0b2stPmxvY2F0aW9uKTsKKworCSAgICAgIGlmICh0ID09IGVy cm9yX21hcmtfbm9kZSkKKwkJY3BfcGFyc2VyX25hbWVfbG9va3VwX2Vycm9yIChwYXJzZXIs IGlkLCB0LCBOTEVfTlVMTCwKKwkJCQkJICAgICB0b2stPmxvY2F0aW9uKTsKKwkgICAgICBj cF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKworCSAgICAgIGlmIChj cF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfT1BFTl9QQVJFTikp CisJCXsKKwkJICBtYXRjaGluZ19wYXJlbnMgcGFyZW5zMjsKKwkJICBwYXJlbnMyLmNvbnN1 bWVfb3BlbiAocGFyc2VyKTsKKwkJICBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFy c2VyLT5sZXhlciwgQ1BQX05BTUUpKQorCQkgICAgeworCQkgICAgICB0b2sgPSBjcF9sZXhl cl9wZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkJICAgICAgaWQgPSB0b2stPnUudmFs dWU7CisJCSAgICAgIHRyYWl0c192YXIgPSBjcF9wYXJzZXJfbG9va3VwX25hbWVfc2ltcGxl IChwYXJzZXIsIGlkLAorCQkJCQkJCQkgdG9rLT5sb2NhdGlvbik7CisJCSAgICAgIGlmICh0 cmFpdHNfdmFyID09IGVycm9yX21hcmtfbm9kZSkKKwkJCXsKKwkJCSAgY3BfcGFyc2VyX25h bWVfbG9va3VwX2Vycm9yIChwYXJzZXIsIGlkLCB0cmFpdHNfdmFyLAorCQkJCQkJICAgICAg IE5MRV9OVUxMLCB0b2stPmxvY2F0aW9uKTsKKwkJCSAgYnJlYWs7CisJCQl9CisJCSAgICAg IGNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCQkgICAgfQorCQkg IGVsc2UKKwkJICAgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAiZXhwZWN0ZWQgaWRlbnRp ZmllciIpOworCQkgIHBhcmVuczIucmVxdWlyZV9jbG9zZSAocGFyc2VyKTsKKwkJfQorCisJ ICAgICAgdHJlZSBjID0gYnVpbGRfb21wX2NsYXVzZSAoY2xhdXNlX2xvYywKKwkJCQkJIE9N UF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKTsKKwkgICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxM T0NBVE9SU19BTExPQ0FUT1IgKGMpID0gdDsKKwkgICAgICBPTVBfQ0xBVVNFX1VTRVNfQUxM T0NBVE9SU19NRU1TUEFDRSAoYykgPSBOVUxMX1RSRUU7CisJICAgICAgT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfVFJBSVRTIChjKSA9IHRyYWl0c192YXI7CisJICAgICAgT01QX0NM QVVTRV9DSEFJTiAoYykgPSBubDsKKworCSAgICAgIG5sID0gYzsKKwkgICAgfQorCisJICBp ZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pc19ub3QgKHBhcnNlci0+bGV4ZXIsIENQUF9DT01N QSkpCisJICAgIGJyZWFrOworCSAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5s ZXhlcik7CisJfQorICAgIH0KKworICBwYXJlbnMucmVxdWlyZV9jbG9zZSAocGFyc2VyKTsK KyAgcmV0dXJuIG5sOworfQorCiAvKiBPcGVuTVAgMi41OgogICAgbGFzdHByaXZhdGUgKCB2 YXJpYWJsZS1saXN0ICkKIApAQCAtNDAyODMsNiArNDA1MjUsMTAgQEAgY3BfcGFyc2VyX29t cF9hbGxfY2xhdXNlcyAoY3BfcGFyc2VyICpwYXJzZXIsIG9tcF9jbGF1c2VfbWFzayBtYXNr LAogCSAgY2xhdXNlcyA9IGNwX3BhcnNlcl9vbXBfY2xhdXNlX2FsbG9jYXRlIChwYXJzZXIs IGNsYXVzZXMpOwogCSAgY19uYW1lID0gImFsbG9jYXRlIjsKIAkgIGJyZWFrOworCWNhc2Ug UFJBR01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgorCSAgY2xhdXNlcyA9IGNwX3Bh cnNlcl9vbXBfY2xhdXNlX3VzZXNfYWxsb2NhdG9ycyAocGFyc2VyLCBjbGF1c2VzKTsKKwkg IGNfbmFtZSA9ICJ1c2VzX2FsbG9jYXRvcnMiOworCSAgYnJlYWs7CiAJY2FzZSBQUkFHTUFf T01QX0NMQVVTRV9MSU5FQVI6CiAJICB7CiAJICAgIGJvb2wgZGVjbGFyZV9zaW1kID0gZmFs c2U7CkBAIC00NDI5MSw3ICs0NDUzNyw4IEBAIGNwX3BhcnNlcl9vbXBfdGFyZ2V0X3VwZGF0 ZSAoY3BfcGFyc2VyICpwYXJzZXIsIGNwX3Rva2VuICpwcmFnbWFfdG9rLAogCXwgKE9NUF9D TEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX0lOX1JFRFVDVElPTikJXAogCXwg KE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX1RIUkVBRF9MSU1JVCkJ XAogCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX0lTX0RFVklD RV9QVFIpXAotCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBfQ0xBVVNFX0hB U19ERVZJQ0VfQUREUikpCisJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJBR01BX09NUF9D TEFVU0VfSEFTX0RFVklDRV9BRERSKVwKKwl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFH TUFfT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMpKQogCiBzdGF0aWMgYm9vbAogY3BfcGFy c2VyX29tcF90YXJnZXQgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3Rv aywKZGlmZiAtLWdpdCBhL2djYy9jcC9zZW1hbnRpY3MuY2MgYi9nY2MvY3Avc2VtYW50aWNz LmNjCmluZGV4IDM3N2Y2MTExM2MwLi5hYzhjNGIyZTNlOSAxMDA2NDQKLS0tIGEvZ2NjL2Nw L3NlbWFudGljcy5jYworKysgYi9nY2MvY3Avc2VtYW50aWNzLmNjCkBAIC03NzcyLDYgKzc3 NzIsOTAgQEAgZmluaXNoX29tcF9jbGF1c2VzICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBf cmVnaW9uX3R5cGUgb3J0KQogCSAgICB9CiAJICBnb3RvIGhhbmRsZV9maWVsZF9kZWNsOwog CisJY2FzZSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKKwkgIHQgPSBPTVBfQ0xBVVNF X1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpOworCSAgaWYgKFRSRUVfQ09ERSAoVFJF RV9UWVBFICh0KSkgIT0gRU5VTUVSQUxfVFlQRQorCSAgICAgIHx8IHN0cmNtcCAoSURFTlRJ RklFUl9QT0lOVEVSIChUWVBFX0lERU5USUZJRVIgKFRSRUVfVFlQRSAodCkpKSwKKwkJCSAi b21wX2FsbG9jYXRvcl9oYW5kbGVfdCIpICE9IDApCisJICAgIHsKKwkgICAgICBlcnJvcl9h dCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksCisJCQkiYWxsb2NhdG9yIG11c3QgYmUgb2Yg JTxvbXBfYWxsb2NhdG9yX2hhbmRsZV90JT4gdHlwZSIpOworCSAgICAgIHJlbW92ZSA9IHRy dWU7CisJICAgIH0KKwkgIGlmIChUUkVFX0NPREUgKHQpID09IENPTlNUX0RFQ0wpCisJICAg IHsKKwkgICAgICBpZiAoT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMp CisJCSAgfHwgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfVFJBSVRTIChjKSkKKwkJZXJy b3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkJICAibW9kaWZpZXJzIGNhbm5v dCBiZSB1c2VkIHdpdGggcHJlLWRlZmluZWQgIgorCQkJICAiYWxsb2NhdG9ycyIpOworCisJ ICAgICAgLyogQ3VycmVudGx5IGZvciBwcmUtZGVmaW5lZCBhbGxvY2F0b3JzIGluIGxpYmdv bXAsIHdlIGRvIG5vdAorCQkgcmVxdWlyZSBhZGRpdGlvbmFsIGluaXQvZmluaSBpbnNpZGUg dGFyZ2V0IHJlZ2lvbnMsIHNvIGRpc2NhcmQKKwkJIHN1Y2ggY2xhdXNlcy4gICovCisJICAg ICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgfQorCSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExP Q0FUT1JTX01FTVNQQUNFIChjKTsKKwkgIGlmICh0ICE9IE5VTExfVFJFRQorCSAgICAgICYm IChUUkVFX0NPREUgKHQpICE9IENPTlNUX0RFQ0wKKwkJICB8fCBUUkVFX0NPREUgKFRSRUVf VFlQRSAodCkpICE9IEVOVU1FUkFMX1RZUEUKKwkJICB8fCBzdHJjbXAgKElERU5USUZJRVJf UE9JTlRFUiAoVFlQRV9JREVOVElGSUVSIChUUkVFX1RZUEUgKHQpKSksCisJCQkgICAgICJv bXBfbWVtc3BhY2VfaGFuZGxlX3QiKSAhPSAwKSkKKwkgICAgeworCSAgICAgIGVycm9yX2F0 IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwgIm1lbXNwYWNlIG1vZGlmaWVyIG11c3QgYmUg IgorCQkJImNvbnN0YW50IGVudW0gb2YgJTxvbXBfbWVtc3BhY2VfaGFuZGxlX3QlPiB0eXBl Iik7CisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgfQorCSAgdCA9IE9NUF9DTEFVU0Vf VVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYyk7CisJICBpZiAodCAhPSBOVUxMX1RSRUUpCisJ ICAgIHsKKwkgICAgICBib29sIHR5cGVfZXJyID0gZmFsc2U7CisKKwkgICAgICBpZiAoVFJF RV9DT0RFIChUUkVFX1RZUEUgKHQpKSAhPSBBUlJBWV9UWVBFKQorCQl0eXBlX2VyciA9IHRy dWU7CisJICAgICAgZWxzZQorCQl7CisJCSAgdHJlZSBlbGVtX3QgPSBUUkVFX1RZUEUgKFRS RUVfVFlQRSAodCkpOworCQkgIGlmIChUUkVFX0NPREUgKGVsZW1fdCkgIT0gUkVDT1JEX1RZ UEUKKwkJICAgICAgfHwgc3RyY21wIChJREVOVElGSUVSX1BPSU5URVIgKFRZUEVfSURFTlRJ RklFUiAoZWxlbV90KSksCisJCQkJICJvbXBfYWxsb2N0cmFpdF90IikgIT0gMAorCQkgICAg ICB8fCAhVFlQRV9SRUFET05MWSAoZWxlbV90KSkKKwkJICAgIHR5cGVfZXJyID0gdHJ1ZTsK KwkJfQorCSAgICAgIGlmICh0eXBlX2VycikKKwkJeworCQkgIGVycm9yX2F0IChPTVBfQ0xB VVNFX0xPQ0FUSU9OIChjKSwgInRyYWl0cyBhcnJheSBtdXN0IGJlIG9mICIKKwkJCSAgICAi JTxjb25zdCBvbXBfYWxsb2N0cmFpdF90IFtdJT4gdHlwZSIpOworCQkgIHJlbW92ZSA9IHRy dWU7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICB0cmVlIGNzdF92YWwgPSBkZWNsX2Nv bnN0YW50X3ZhbHVlICh0KTsKKwkJICBpZiAoY3N0X3ZhbCA9PSB0KQorCQkgICAgeworCQkg ICAgICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkg bXVzdCBiZSAiCisJCQkJIm9mIGNvbnN0YW50IHZhbHVlcyIpOworCisJCSAgICAgIHJlbW92 ZSA9IHRydWU7CisJCSAgICB9CisJCX0KKwkgICAgfQorCSAgaWYgKHJlbW92ZSkKKwkgICAg YnJlYWs7CisJICBlbHNlCisJICAgIHsKKwkgICAgICAvKiBDcmVhdGUgYSBwcml2YXRlIGNs YXVzZSBmb3IgdGhlIGFsbG9jYXRvciB2YXJpYWJsZSwgcGxhY2VkCisJCSBwcmlvciB0byBj dXJyZW50IHVzZXNfYWxsb2NhdG9ycyBjbGF1c2UuICAqLworCSAgICAgIHRyZWUgbmMgPSBi dWlsZF9vbXBfY2xhdXNlIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCQkJICBPTVBf Q0xBVVNFX1BSSVZBVEUpOworCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobmMpID0gT01QX0NM QVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKTsKKwkgICAgICBPTVBfQ0xBVVNF X0NIQUlOIChuYykgPSBjOworCSAgICAgICpwYyA9IG5jOworCisJICAgICAgcGMgPSAmT01Q X0NMQVVTRV9DSEFJTiAoYyk7CisJICAgICAgY29udGludWU7CisJICAgIH0KKwogCWNhc2Ug T01QX0NMQVVTRV9ERVBFTkQ6CiAJICB0ID0gT01QX0NMQVVTRV9ERUNMIChjKTsKIAkgIGlm ICh0ID09IE5VTExfVFJFRSkKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmgg Yi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCmluZGV4IDdiZjFkNWEwNDUyLi4xOGU2ODVjYTFi MSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaAorKysgYi9nY2MvZm9ydHJh bi9nZm9ydHJhbi5oCkBAIC0xMzUzLDYgKzEzNTMsOCBAQCB0eXBlZGVmIHN0cnVjdCBnZmNf b21wX25hbWVsaXN0CiAgICAgICBzdHJ1Y3QgZ2ZjX29tcF9uYW1lbGlzdF91ZHIgKnVkcjsK ICAgICAgIGdmY19uYW1lc3BhY2UgKm5zOwogICAgIH0gdTI7CisgIHN0cnVjdCBnZmNfc3lt Ym9sICptZW1zcGFjZV9zeW07CisgIHN0cnVjdCBnZmNfc3ltYm9sICp0cmFpdHNfc3ltOwog ICBzdHJ1Y3QgZ2ZjX29tcF9uYW1lbGlzdCAqbmV4dDsKICAgbG9jdXMgd2hlcmU7CiB9CkBA IC0xMzk0LDYgKzEzOTYsNyBAQCBlbnVtCiAgIE9NUF9MSVNUX05PTlRFTVBPUkFMLAogICBP TVBfTElTVF9BTExPQ0FURSwKICAgT01QX0xJU1RfSEFTX0RFVklDRV9BRERSLAorICBPTVBf TElTVF9VU0VTX0FMTE9DQVRPUlMsCiAgIE9NUF9MSVNUX05VTSAvKiBNdXN0IGJlIHRoZSBs YXN0LiAgKi8KIH07CiAKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5jYyBiL2dj Yy9mb3J0cmFuL29wZW5tcC5jYwppbmRleCA3MTQxNDgxMzhjMi4uNjQwNjYwNDdhMzMgMTAw NjQ0Ci0tLSBhL2djYy9mb3J0cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi9vcGVu bXAuY2MKQEAgLTk0OCw2ICs5NDgsNyBAQCBlbnVtIG9tcF9tYXNrMgogICBPTVBfQ0xBVVNF X0FUVEFDSCwKICAgT01QX0NMQVVTRV9OT0hPU1QsCiAgIE9NUF9DTEFVU0VfSEFTX0RFVklD RV9BRERSLCAgLyogT3Blbk1QIDUuMSAgKi8KKyAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRP UlMsICAvKiBPcGVuTVAgNS4yICAqLwogICAvKiBUaGlzIG11c3QgY29tZSBsYXN0LiAgKi8K ICAgT01QX01BU0syX0xBU1QKIH07CkBAIC0xMzY0LDYgKzEzNjUsMjM4IEBAIGdmY19tYXRj aF9vbXBfY2xhdXNlX3JlZHVjdGlvbiAoY2hhciBwYywgZ2ZjX29tcF9jbGF1c2VzICpjLCBi b29sIG9wZW5hY2MsCiAgIHJldHVybiBNQVRDSF9ZRVM7CiB9CiAKKy8qIHVzZXNfYWxsb2Nh dG9ycyAoIGFsbG9jYXRvci1saXN0ICkKKworICAgYWxsb2NhdG9yLWxpc3Q6CisgICBhbGxv Y2F0b3IKKyAgIGFsbG9jYXRvciAsIGFsbG9jYXRvci1saXN0CisgICBhbGxvY2F0b3IgKCB0 cmFpdHMtYXJyYXkgKQorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkgLCBhbGxvY2F0 b3ItbGlzdAorCisgICB1c2VzX2FsbG9jYXRvcnMgKCBtb2RpZmllciA6IGFsbG9jYXRvciAp CisgICB1c2VzX2FsbG9jYXRvcnMgKCBtb2RpZmllciAsIG1vZGlmaWVyIDogYWxsb2NhdG9y ICkKKworICAgbW9kaWZpZXI6CisgICB0cmFpdHMgKCB0cmFpdHMtYXJyYXkgKQorICAgbWVt c3BhY2UgKCBtZW0tc3BhY2UtaGFuZGxlICkgICovCisKK3N0YXRpYyBtYXRjaAorZ2ZjX21h dGNoX29tcF9jbGF1c2VfdXNlc19hbGxvY2F0b3JzIChnZmNfb21wX2NsYXVzZXMgKmMpCit7 CisgIGdmY19zeW1ib2wgKnN5bTsKKyAgZ2ZjX3N5bWJvbCAqbWVtc3BhY2Vfc3ltPSBOVUxM OworICBnZmNfc3ltYm9sICp0cmFpdHNfc3ltPSBOVUxMOworICBib29sIG1lbXNwYWNlX3Nl ZW4gPSBmYWxzZSwgdHJhaXRzX3NlZW4gPSBmYWxzZTsKKyAgbWF0Y2ggbTsKKyAgaW50IGkg PSAwOworCisgIGlmIChnZmNfbWF0Y2ggKCJ1c2VzX2FsbG9jYXRvcnMgKCAiKSAhPSBNQVRD SF9ZRVMpCisgICAgcmV0dXJuIE1BVENIX05POworCisgIGdmY19zeW1ib2wgKmFsbG9jYXRv cl9oYW5kbGVfa2luZCwgKiBtZW1zcGFjZV9oYW5kbGVfa2luZDsKKworICBpZiAoZ2ZjX2dl dF9zeW1ib2wgKCJvbXBfYWxsb2NhdG9yX2hhbmRsZV9raW5kIiwgTlVMTCwgJnN5bSkKKyAg ICAgIHx8ICFzeW0tPnZhbHVlCisgICAgICB8fCBzeW0tPnZhbHVlLT5leHByX3R5cGUgIT0g RVhQUl9DT05TVEFOVAorICAgICAgfHwgc3ltLT52YWx1ZS0+dHMudHlwZSAhPSBCVF9JTlRF R0VSKQorICAgIHsKKyAgICAgIGdmY19lcnJvciAoIk9wZW5NUCAlPG9tcF9hbGxvY2F0b3Jf aGFuZGxlX2tpbmQlPiBjb25zdGFudCBub3QgZm91bmQgYnkgIgorCQkgIiU8dXNlc19hbGxv Y2F0b3JzJT4gY2xhdXNlIGF0ICVDIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAg YWxsb2NhdG9yX2hhbmRsZV9raW5kID0gc3ltOworCisgIGlmIChnZmNfZ2V0X3N5bWJvbCAo Im9tcF9tZW1zcGFjZV9oYW5kbGVfa2luZCIsIE5VTEwsICZzeW0pCisgICAgICB8fCAhc3lt LT52YWx1ZQorICAgICAgfHwgc3ltLT52YWx1ZS0+ZXhwcl90eXBlICE9IEVYUFJfQ09OU1RB TlQKKyAgICAgIHx8IHN5bS0+dmFsdWUtPnRzLnR5cGUgIT0gQlRfSU5URUdFUikKKyAgICB7 CisgICAgICBnZmNfZXJyb3IgKCJPcGVuTVAgJTxvbXBfbWVtc3BhY2VfaGFuZGxlX2tpbmQl PiBjb25zdGFudCBub3QgZm91bmQgYnkgIgorCQkgIiU8dXNlc19hbGxvY2F0b3JzJT4gY2xh dXNlIGF0ICVDIik7CisgICAgICBnb3RvIGVycm9yOworICAgIH0KKyAgbWVtc3BhY2VfaGFu ZGxlX2tpbmQgPSBzeW07CisKKyAgZG8KKyAgICB7CisgICAgICBpZiAoKytpID4gMikKKwl7 CisJICBnZmNfZXJyb3IgKCJPbmx5IHR3byBtb2RpZmllcnMgYXJlIGFsbG93ZWQgb24gJTx1 c2VzX2FsbG9jYXRvcnMlPiAiCisJCSAgICAgImNsYXVzZSBhdCAlQyIpOworCSAgZ290byBl cnJvcjsKKwl9CisKKyAgICAgIGlmIChnZmNfbWF0Y2ggKCJtZW1zcGFjZSAoICIpID09IE1B VENIX1lFUykKKwl7CisJICBpZiAobWVtc3BhY2Vfc2VlbikKKwkgICAgeworCSAgICAgIGdm Y19lcnJvciAoIk11bHRpcGxlIG1lbXNwYWNlIG1vZGlmaWVycyBhdCAlQyIpOworCSAgICAg IGdvdG8gZXJyb3I7CisJICAgIH0KKwkgIG1lbXNwYWNlX3NlZW4gPSB0cnVlOworCSAgbSA9 IGdmY19tYXRjaF9zeW1ib2wgKCZzeW0sIDEpOworCSAgaWYgKG0gPT0gTUFUQ0hfWUVTKQor CSAgICBtZW1zcGFjZV9zeW0gPSBzeW07CisJICBlbHNlCisJICAgIGdvdG8gZXJyb3I7CisJ ICBpZiAoZ2ZjX21hdGNoX2NoYXIgKCcpJykgIT0gTUFUQ0hfWUVTKQorCSAgICBnb3RvIGVy cm9yOworCX0KKyAgICAgIGVsc2UgaWYgKGdmY19tYXRjaCAoInRyYWl0cyAoICIpID09IE1B VENIX1lFUykKKwl7CisJICBpZiAodHJhaXRzX3NlZW4pCisJICAgIHsKKwkgICAgICBnZmNf ZXJyb3IgKCJNdWx0aXBsZSB0cmFpdHMgbW9kaWZpZXJzIGF0ICVDIik7CisJICAgICAgZ290 byBlcnJvcjsKKwkgICAgfQorCSAgdHJhaXRzX3NlZW4gPSB0cnVlOworCSAgbSA9IGdmY19t YXRjaF9zeW1ib2wgKCZzeW0sIDEpOworCSAgaWYgKG0gPT0gTUFUQ0hfWUVTKQorCSAgICB0 cmFpdHNfc3ltID0gc3ltOworCSAgZWxzZQorCSAgICBnb3RvIGVycm9yOworCSAgaWYgKGdm Y19tYXRjaF9jaGFyICgnKScpICE9IE1BVENIX1lFUykKKwkgICAgZ290byBlcnJvcjsKKwl9 CisgICAgICBlbHNlCisJYnJlYWs7CisgICAgfQorICB3aGlsZSAoZ2ZjX21hdGNoICgiICwg IikgPT0gTUFUQ0hfWUVTKTsKKworICBpZiAoKG1lbXNwYWNlX3NlZW4gfHwgdHJhaXRzX3Nl ZW4pCisgICAgICAmJiBnZmNfbWF0Y2ggKCIgOiAiKSAhPSBNQVRDSF9ZRVMpCisgICAgZ290 byBlcnJvcjsKKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBtID0gZ2ZjX21hdGNo X3N5bWJvbCAoJnN5bSwgMSk7CisgICAgICBpZiAobSAhPSBNQVRDSF9ZRVMpCisJeworCSAg Z2ZjX2Vycm9yICgiRXhwZWN0ZWQgbmFtZSBvZiBhbGxvY2F0b3IgYXQgJUMiKTsKKwkgIGdv dG8gZXJyb3I7CisJfQorICAgICAgZ2ZjX3N5bWJvbCAqYWxsb2NhdG9yX3N5bSA9IHN5bTsK KworICAgICAgaWYgKGdmY19tYXRjaF9jaGFyICgnKCcpID09IE1BVENIX1lFUykKKwl7CisJ ICBpZiAobWVtc3BhY2Vfc2VlbiB8fCB0cmFpdHNfc2VlbikKKwkgICAgeworCSAgICAgIGdm Y19lcnJvciAoIk1vZGlmaWVycyBjYW5ub3QgYmUgdXNlZCB3aXRoIGxlZ2FjeSAiCisJCQkg ImFycmF5IHN5bnRheCBhdCAlQyIpOworCSAgICAgIGdvdG8gZXJyb3I7CisJICAgIH0KKwkg IG0gPSBnZmNfbWF0Y2hfc3ltYm9sICgmc3ltLCAxKTsKKwkgIGlmIChtID09IE1BVENIX1lF UykKKwkgICAgdHJhaXRzX3N5bSA9IHN5bTsKKwkgIGVsc2UKKwkgICAgZ290byBlcnJvcjsK KwkgIGlmIChnZmNfbWF0Y2hfY2hhciAoJyknKSAhPSBNQVRDSF9ZRVMpCisJICAgIGdvdG8g ZXJyb3I7CisJfQorCisgICAgICBpZiAodHJhaXRzX3N5bSkKKwl7CisJICBpZiAodHJhaXRz X3N5bS0+dHMudHlwZSAhPSBCVF9ERVJJVkVECisJICAgICAgfHwgc3RyY21wICh0cmFpdHNf c3ltLT50cy51LmRlcml2ZWQtPm5hbWUsCisJCQkgIm9tcF9hbGxvY3RyYWl0IikgIT0gMAor CSAgICAgIHx8IHRyYWl0c19zeW0tPmF0dHIuZmxhdm9yICE9IEZMX1BBUkFNRVRFUgorCSAg ICAgIHx8IHRyYWl0c19zeW0tPmFzLT5yYW5rICE9IDEKKwkgICAgICB8fCB0cmFpdHNfc3lt LT52YWx1ZSA9PSBOVUxMCisJICAgICAgfHwgIWdmY19pc19jb25zdGFudF9leHByICh0cmFp dHNfc3ltLT52YWx1ZSkpCisJICAgIHsKKwkgICAgICBnZmNfZXJyb3IgKCIlPCVzJT4gYXQg JUMgbXVzdCBiZSBvZiBjb25zdGFudCAiCisJCQkgIiU8dHlwZShvbXBfYWxsb2N0cmFpdCkl PiBhcnJheSB0eXBlIGFuZCBoYXZlIGEgIgorCQkJICJjb25zdGFudCBpbml0aWFsaXplciIs IHRyYWl0c19zeW0tPm5hbWUpOworCSAgICAgIGdvdG8gZXJyb3I7CisJICAgIH0KKwkgIGdm Y19zZXRfc3ltX3JlZmVyZW5jZWQgKHRyYWl0c19zeW0pOworCX0KKworICAgICAgaWYgKG1l bXNwYWNlX3N5bSkKKwl7CisJICBjb25zdCBjaGFyICpwb3M7CisJICBpZiAobWVtc3BhY2Vf c3ltLT50cy50eXBlICE9IEJUX0lOVEVHRVIKKwkgICAgICB8fCBtZW1zcGFjZV9zeW0tPmF0 dHIuZmxhdm9yICE9IEZMX1BBUkFNRVRFUgorCSAgICAgIHx8IG1wel9jbXBfc2kgKG1lbXNw YWNlX2hhbmRsZV9raW5kLT52YWx1ZS0+dmFsdWUuaW50ZWdlciwKKwkJCSAgICAgbWVtc3Bh Y2Vfc3ltLT50cy5raW5kKSAhPSAwCisJICAgICAgLyogQ2hlY2sgaWYgaWRlbnRpZmllciBp cyBvZiAnb21wXy4uLl9tZW1fc3BhY2UnIGZvcm1hdC4gICovCisJICAgICAgfHwgKHBvcyA9 IHN0cnN0ciAobWVtc3BhY2Vfc3ltLT5uYW1lLCAib21wXyIpKSA9PSBOVUxMCisJICAgICAg fHwgcG9zICE9IG1lbXNwYWNlX3N5bS0+bmFtZQorCSAgICAgIHx8IChwb3MgPSBzdHJzdHIg KG1lbXNwYWNlX3N5bS0+bmFtZSwgIl9tZW1fc3BhY2UiKSkgPT0gTlVMTAorCSAgICAgIHx8 ICoocG9zICsgc3RybGVuICgiX21lbV9zcGFjZSIpKSAhPSAnXDAnKQorCSAgICB7CisJICAg ICAgZ2ZjX2Vycm9yICgiJTwlcyU+IGF0ICVDIGlzIG5vdCBhIHByZS1kZWZpbmVkIG1lbW9y eSBzcGFjZSBuYW1lIiwKKwkJCSBtZW1zcGFjZV9zeW0tPm5hbWUpOworCSAgICAgIGdvdG8g ZXJyb3I7CisJICAgIH0KKwl9CisKKyAgICAgIGlmIChhbGxvY2F0b3Jfc3ltLT50cy50eXBl ICE9IEJUX0lOVEVHRVIKKwkgIHx8IG1wel9jbXBfc2kgKGFsbG9jYXRvcl9oYW5kbGVfa2lu ZC0+dmFsdWUtPnZhbHVlLmludGVnZXIsCisJCQkgYWxsb2NhdG9yX3N5bS0+dHMua2luZCkg IT0gMCkKKwl7CisJICBnZmNfZXJyb3IgKCIlPCVzJT4gYXQgJUMgbXVzdCBiZSBpbnRlZ2Vy IG9mICU8JXMlPiBraW5kIiwKKwkJICAgICBhbGxvY2F0b3Jfc3ltLT5uYW1lLCBhbGxvY2F0 b3JfaGFuZGxlX2tpbmQtPm5hbWUpOworCSAgZ290byBlcnJvcjsKKwl9CisKKyAgICAgIGlm IChhbGxvY2F0b3Jfc3ltLT5hdHRyLmZsYXZvciA9PSBGTF9QQVJBTUVURVIpCisJeworCSAg Y29uc3QgY2hhciAqcG9zOworCSAgLyogQ2hlY2sgaWYgaWRlbnRpZmllciBpcyBhICdvbXBf Li4uX21lbV9hbGxvYycgcHJlLWRlZmluZWQKKwkgICAgIGFsbG9jYXRvci4gICovCisJICBp ZiAoKHBvcyA9IHN0cnN0ciAoYWxsb2NhdG9yX3N5bS0+bmFtZSwgIm9tcF8iKSkgPT0gTlVM TAorCSAgICAgIHx8IHBvcyAhPSBhbGxvY2F0b3Jfc3ltLT5uYW1lCisJICAgICAgfHwgKHBv cyA9IHN0cnN0ciAoYWxsb2NhdG9yX3N5bS0+bmFtZSwgIl9tZW1fYWxsb2MiKSkgPT0gTlVM TAorCSAgICAgIHx8ICoocG9zICsgc3RybGVuICgiX21lbV9hbGxvYyIpKSAhPSAnXDAnKQor CSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgiJTwlcyU+IGF0ICVDIGlzIG5vdCBhIHByZS1k ZWZpbmVkIG1lbW9yeSBhbGxvY2F0b3IiLAorCQkJIGFsbG9jYXRvcl9zeW0tPm5hbWUpOwor CSAgICAgIGdvdG8gZXJyb3I7CisJICAgIH0KKworCSAgLyogQ3VycmVudGx5IGZvciBwcmUt ZGVmaW5lZCBhbGxvY2F0b3JzIGluIGxpYmdvbXAsIHdlIGRvIG5vdAorCSAgICAgcmVxdWly ZSBhZGRpdGlvbmFsIGluaXQvZmluaSBpbnNpZGUgdGFyZ2V0IHJlZ2lvbnMsCisJICAgICBz byBkbyBub3RoaW5nIGhlcmUgdG8gZGlzY2FyZCBzdWNoIGNsYXVzZXMuICAqLworCX0KKyAg ICAgIGVsc2UKKwl7CisJICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChhbGxvY2F0b3Jfc3lt KTsKKworCSAgZ2ZjX29tcF9uYW1lbGlzdCAqbiA9IGdmY19nZXRfb21wX25hbWVsaXN0ICgp OworCSAgbi0+c3ltID0gYWxsb2NhdG9yX3N5bTsKKwkgIG4tPm1lbXNwYWNlX3N5bSA9IG1l bXNwYWNlX3N5bTsKKwkgIG4tPnRyYWl0c19zeW0gPSB0cmFpdHNfc3ltOworCSAgbi0+d2hl cmUgPSBnZmNfY3VycmVudF9sb2N1czsKKworCSAgbi0+bmV4dCA9IGMtPmxpc3RzW09NUF9M SVNUX1VTRVNfQUxMT0NBVE9SU107CisJICBjLT5saXN0c1tPTVBfTElTVF9VU0VTX0FMTE9D QVRPUlNdID0gbjsKKwl9CisKKyAgICAgIGlmIChnZmNfbWF0Y2ggKCIgLCAiKSA9PSBNQVRD SF9ZRVMpCisJeworCSAgaWYgKG1lbXNwYWNlX3NlZW4gfHwgdHJhaXRzX3NlZW4pCisJICAg IHsKKwkgICAgICBnZmNfZXJyb3IgKCJXaGVuIHVzaW5nIG1vZGlmaWVycywgb25seSBhIHNp bmdsZSBhbGxvY2F0b3IgY2FuIGJlICIKKwkJCSAic3BlY2lmaWVkIGluIGVhY2ggJTx1c2Vz X2FsbG9jYXRvcnMlPiBjbGF1c2UgYXQgJUMiKTsKKwkgICAgICBnb3RvIGVycm9yOworCSAg ICB9CisJfQorICAgICAgZWxzZQorCWJyZWFrOworCisgICAgICBtZW1zcGFjZV9zeW0gPSBO VUxMOworICAgICAgdHJhaXRzX3N5bSA9IE5VTEw7CisgICAgfQorCisgIGlmIChnZmNfbWF0 Y2hfY2hhciAoJyknKSAhPSBNQVRDSF9ZRVMpCisgICAgZ290byBlcnJvcjsKKworICByZXR1 cm4gTUFUQ0hfWUVTOworCisgZXJyb3I6CisgIHJldHVybiBNQVRDSF9FUlJPUjsKK30KIAog LyogTWF0Y2ggd2l0aCBkdXBsaWNhdGUgY2hlY2suIE1hdGNoZXMgJ25hbWUnLiBJZiBleHBy ICE9IE5VTEwsIGl0CiAgICB0aGVuIG1hdGNoZXMgJyhleHByKScsIG90aGVyd2lzZSwgaWYg b3Blbl9wYXJlbnMgaXMgdHJ1ZSwKQEAgLTI5MjQsNiArMzE1Nyw5IEBAIGdmY19tYXRjaF9v bXBfY2xhdXNlcyAoZ2ZjX29tcF9jbGF1c2VzICoqY3AsIGNvbnN0IG9tcF9tYXNrIG1hc2ss CiAJCSAgICgidXNlX2RldmljZV9hZGRyICgiLCAmYy0+bGlzdHNbT01QX0xJU1RfVVNFX0RF VklDRV9BRERSXSwKIAkJICAgIGZhbHNlLCBOVUxMLCBOVUxMLCB0cnVlKSA9PSBNQVRDSF9Z RVMpCiAJICAgIGNvbnRpbnVlOworCSAgaWYgKChtYXNrICYgT01QX0NMQVVTRV9VU0VTX0FM TE9DQVRPUlMpCisJICAgICAgJiYgZ2ZjX21hdGNoX29tcF9jbGF1c2VfdXNlc19hbGxvY2F0 b3JzIChjKSA9PSBNQVRDSF9ZRVMpCisJICAgIGNvbnRpbnVlOwogCSAgYnJlYWs7CiAJY2Fz ZSAndic6CiAJICAvKiBWRUNUT1JfTEVOR1RIIG11c3QgYmUgbWF0Y2hlZCBiZWZvcmUgVkVD VE9SLCBiZWNhdXNlIHRoZSBsYXR0ZXIKQEAgLTM2NTAsNyArMzg4Niw3IEBAIGNsZWFudXA6 CiAgICB8IE9NUF9DTEFVU0VfRklSU1RQUklWQVRFIHwgT01QX0NMQVVTRV9ERUZBVUxUTUFQ CQkJXAogICAgfCBPTVBfQ0xBVVNFX0lTX0RFVklDRV9QVFIgfCBPTVBfQ0xBVVNFX0lOX1JF RFVDVElPTgkJCVwKICAgIHwgT01QX0NMQVVTRV9USFJFQURfTElNSVQgfCBPTVBfQ0xBVVNF X0FMTE9DQVRFCQkJXAotICAgfCBPTVBfQ0xBVVNFX0hBU19ERVZJQ0VfQUREUikKKyAgIHwg T01QX0NMQVVTRV9IQVNfREVWSUNFX0FERFIgfCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9S UykKICNkZWZpbmUgT01QX1RBUkdFVF9EQVRBX0NMQVVTRVMgXAogICAob21wX21hc2sgKE9N UF9DTEFVU0VfREVWSUNFKSB8IE9NUF9DTEFVU0VfTUFQIHwgT01QX0NMQVVTRV9JRglcCiAg ICB8IE9NUF9DTEFVU0VfVVNFX0RFVklDRV9QVFIgfCBPTVBfQ0xBVVNFX1VTRV9ERVZJQ0Vf QUREUikKQEAgLTYyODIsNyArNjUxOCw3IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19j b2RlICpjb2RlLCBnZmNfb21wX2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogCSJJTl9SRURVQ1RJ T04iLCAiVEFTS19SRURVQ1RJT04iLAogCSJERVZJQ0VfUkVTSURFTlQiLCAiTElOSyIsICJV U0VfREVWSUNFIiwKIAkiQ0FDSEUiLCAiSVNfREVWSUNFX1BUUiIsICJVU0VfREVWSUNFX1BU UiIsICJVU0VfREVWSUNFX0FERFIiLAotCSJOT05URU1QT1JBTCIsICJBTExPQ0FURSIsICJI QVNfREVWSUNFX0FERFIiIH07CisJIk5PTlRFTVBPUkFMIiwgIkFMTE9DQVRFIiwgIkhBU19E RVZJQ0VfQUREUiIsICJVU0VTX0FMTE9DQVRPUlMiIH07CiAgIFNUQVRJQ19BU1NFUlQgKEFS UkFZX1NJWkUgKGNsYXVzZV9uYW1lcykgPT0gT01QX0xJU1RfTlVNKTsKIAogICBpZiAob21w X2NsYXVzZXMgPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5 LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MKaW5kZXggMDUxMzQ5NTJkYjQuLmEy YTJiODg5ZDAzIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYworKysg Yi9nY2MvZm9ydHJhbi90cmFucy1hcnJheS5jYwpAQCAtNjM0MywxMCArNjM0Myw4IEBAIGdm Y19jb252X2FycmF5X2luaXRpYWxpemVyICh0cmVlIHR5cGUsIGdmY19leHByICogZXhwcikK IAkJCSAgICAgICAmZXhwci0+d2hlcmUsIGZsYWdfbWF4X2FycmF5X2NvbnN0cnVjdG9yKTsK IAkgICAgICByZXR1cm4gTlVMTF9UUkVFOwogCSAgICB9Ci0gICAgICAgICAgaWYgKG1wel9j bXBfc2kgKGMtPm9mZnNldCwgMCkgIT0gMCkKLSAgICAgICAgICAgIGluZGV4ID0gZ2ZjX2Nv bnZfbXB6X3RvX3RyZWUgKGMtPm9mZnNldCwgZ2ZjX2luZGV4X2ludGVnZXJfa2luZCk7Ci0g ICAgICAgICAgZWxzZQotICAgICAgICAgICAgaW5kZXggPSBOVUxMX1RSRUU7CisKKwkgIGlu ZGV4ID0gZ2ZjX2NvbnZfbXB6X3RvX3RyZWUgKGMtPm9mZnNldCwgZ2ZjX2luZGV4X2ludGVn ZXJfa2luZCk7CiAKIAkgIGlmIChtcHpfY21wX3NpIChjLT5yZXBlYXQsIDEpID4gMCkKIAkg ICAgewpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjIGIvZ2NjL2Zv cnRyYW4vdHJhbnMtb3Blbm1wLmNjCmluZGV4IDQzZDU5YWJlOWUwLi4xYTNiMWQ1YzM0NyAx MDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0 cmFuL3RyYW5zLW9wZW5tcC5jYwpAQCAtMjY4Niw5ICsyNjg2LDE2IEBAIGdmY190cmFuc19v bXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVz ZXMsCiAJCSAgICBpZiAobi0+ZXhwcikKIAkJICAgICAgewogCQkJdHJlZSBhbGxvY2F0b3Jf OwotCQkJZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7Ci0JCQlnZmNfY29udl9leHByICgmc2Us IG4tPmV4cHIpOwotCQkJYWxsb2NhdG9yXyA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLmV4cHIs IGJsb2NrKTsKKwkJCWlmIChuLT5leHByLT5leHByX3R5cGUgPT0gRVhQUl9WQVJJQUJMRSkK KwkJCSAgYWxsb2NhdG9yXworCQkJICAgID0gZ2ZjX3RyYW5zX29tcF92YXJpYWJsZSAobi0+ ZXhwci0+c3ltdHJlZS0+bi5zeW0sCisJCQkJCQkgICAgICBmYWxzZSk7CisJCQllbHNlCisJ CQkgIHsKKwkJCSAgICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKKwkJCSAgICBnZmNfY29u dl9leHByICgmc2UsIG4tPmV4cHIpOworCQkJICAgIGFsbG9jYXRvcl8gPSBnZmNfZXZhbHVh dGVfbm93IChzZS5leHByLCBibG9jayk7CisJCQkgIH0KIAkJCU9NUF9DTEFVU0VfQUxMT0NB VEVfQUxMT0NBVE9SIChub2RlKSA9IGFsbG9jYXRvcl87CiAJCSAgICAgIH0KIAkJICAgIG9t cF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5vZGUsIG9tcF9jbGF1c2VzKTsK QEAgLTM2NTcsNiArMzY2NCwyOSBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9j a190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCSAgICAgIG9tcF9jbGF1 c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5vZGUsIG9tcF9jbGF1c2VzKTsKIAkgICAg fQogCSAgYnJlYWs7CisJY2FzZSBPTVBfTElTVF9VU0VTX0FMTE9DQVRPUlM6CisJICBmb3Ig KDsgbiAhPSBOVUxMOyBuID0gbi0+bmV4dCkKKwkgICAgeworCSAgICAgIHRyZWUgYWxsb2Nh dG9yID0gZ2ZjX3RyYW5zX29tcF92YXJpYWJsZSAobi0+c3ltLCBmYWxzZSk7CisJICAgICAg dHJlZSBtZW1zcGFjZSA9IChuLT5tZW1zcGFjZV9zeW0KKwkJCSAgICAgICA/IGdmY19jb252 X2NvbnN0YW50X3RvX3RyZWUgKG4tPm1lbXNwYWNlX3N5bS0+dmFsdWUpCisJCQkgICAgICAg OiBOVUxMX1RSRUUpOworCSAgICAgIHRyZWUgdHJhaXRzID0gKG4tPnRyYWl0c19zeW0KKwkJ CSAgICAgPyBnZmNfdHJhbnNfb21wX3ZhcmlhYmxlIChuLT50cmFpdHNfc3ltLCBmYWxzZSkK KwkJCSAgICAgOiBOVUxMX1RSRUUpOworCisJICAgICAgdHJlZSBuYyA9IGJ1aWxkX29tcF9j bGF1c2UgKGlucHV0X2xvY2F0aW9uLCBPTVBfQ0xBVVNFX1BSSVZBVEUpOworCSAgICAgIE9N UF9DTEFVU0VfREVDTCAobmMpID0gYWxsb2NhdG9yOworCSAgICAgIG9tcF9jbGF1c2VzID0g Z2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5jLCBvbXBfY2xhdXNlcyk7CisKKwkgICAgICBuYyA9 IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAorCQkJCSAgICAgT01QX0NMQVVT RV9VU0VTX0FMTE9DQVRPUlMpOworCSAgICAgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JT X0FMTE9DQVRPUiAobmMpID0gYWxsb2NhdG9yOworCSAgICAgIE9NUF9DTEFVU0VfVVNFU19B TExPQ0FUT1JTX01FTVNQQUNFIChuYykgPSBtZW1zcGFjZTsKKwkgICAgICBPTVBfQ0xBVVNF X1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKG5jKSA9IHRyYWl0czsKKwkgICAgICBvbXBfY2xh dXNlcyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChuYywgb21wX2NsYXVzZXMpOworCSAgICB9 CisJICBicmVhazsKIAlkZWZhdWx0OgogCSAgYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZ2Nj L2ZvcnRyYW4vdHlwZXMuZGVmIGIvZ2NjL2ZvcnRyYW4vdHlwZXMuZGVmCmluZGV4IGNkNzlh ZDQ1MTY3Li4xOGExYmVjODcyNCAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHlwZXMuZGVm CisrKyBiL2djYy9mb3J0cmFuL3R5cGVzLmRlZgpAQCAtODEsNiArODEsNyBAQCBERUZfRlVO Q1RJT05fVFlQRV8wIChCVF9GTl9VSU5ULCBCVF9VSU5UKQogREVGX0ZVTkNUSU9OX1RZUEVf MCAoQlRfRk5fVk9JRCwgQlRfVk9JRCkKIAogREVGX0ZVTkNUSU9OX1RZUEVfMSAoQlRfRk5f Vk9JRF9QVFIsIEJUX1ZPSUQsIEJUX1BUUikKK0RFRl9GVU5DVElPTl9UWVBFXzEgKEJUX0ZO X1ZPSURfUFRSTU9ERSwgQlRfVk9JRCwgQlRfUFRSTU9ERSkKIERFRl9GVU5DVElPTl9UWVBF XzEgKEJUX0ZOX1ZPSURfUFRSUFRSLCBCVF9WT0lELCBCVF9QVFJfUFRSKQogREVGX0ZVTkNU SU9OX1RZUEVfMSAoQlRfRk5fVk9JRF9WUFRSLCBCVF9WT0lELCBCVF9WT0xBVElMRV9QVFIp CiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9JTlRfSU5ULCBCVF9JTlQsIEJUX0lOVCkK QEAgLTE1NCw2ICsxNTUsOCBAQCBERUZfRlVOQ1RJT05fVFlQRV8zIChCVF9GTl9WT0lEX1NJ WkVfU0laRV9QVFIsIEJUX1ZPSUQsIEJUX1NJWkUsIEJUX1NJWkUsCiBERUZfRlVOQ1RJT05f VFlQRV8zIChCVF9GTl9VSU5UX1VJTlRfUFRSX1BUUiwgQlRfVUlOVCwgQlRfVUlOVCwgQlRf UFRSLCBCVF9QVFIpCiBERUZfRlVOQ1RJT05fVFlQRV8zIChCVF9GTl9QVFJfU0laRV9TSVpF X1BUUk1PREUsCiAJCSAgICAgQlRfUFRSLCBCVF9TSVpFLCBCVF9TSVpFLCBCVF9QVFJNT0RF KQorREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5fUFRSTU9ERV9QVFJNT0RFX0lOVF9QVFIs IEJUX1BUUk1PREUsIEJUX1BUUk1PREUsCisJCSAgICAgQlRfSU5ULCBCVF9QVFIpCiAKIERF Rl9GVU5DVElPTl9UWVBFXzQgKEJUX0ZOX1ZPSURfT01QRk5fUFRSX1VJTlRfVUlOVCwKICAg ICAgICAgICAgICAgICAgICAgIEJUX1ZPSUQsIEJUX1BUUl9GTl9WT0lEX1BUUiwgQlRfUFRS LCBCVF9VSU5ULCBCVF9VSU5UKQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmNjIGIvZ2Nj L2dpbXBsaWZ5LmNjCmluZGV4IDI1ODg4MjRkY2UyLi40OGEwNzA0NDNiYSAxMDA2NDQKLS0t IGEvZ2NjL2dpbXBsaWZ5LmNjCisrKyBiL2djYy9naW1wbGlmeS5jYwpAQCAtOTE0OCw2ICs5 MTQ4LDEwIEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2lt cGxlX3NlcSAqcHJlX3AsCiAgIGhhc2hfbWFwPHRyZWVfb3BlcmFuZF9oYXNoLCB0cmVlPiAq c3RydWN0X21hcF90b19jbGF1c2UgPSBOVUxMOwogICBoYXNoX21hcDx0cmVlX29wZXJhbmRf aGFzaCwgdHJlZSAqPiAqc3RydWN0X3NlZW5fY2xhdXNlID0gTlVMTDsKICAgaGFzaF9zZXQ8 dHJlZT4gKnN0cnVjdF9kZXJlZl9zZXQgPSBOVUxMOworCisgIGhhc2hfc2V0PHRyZWU+ICph bGxvY2F0ZV9jbGF1c2VzID0gTlVMTDsKKyAgaGFzaF9zZXQ8dHJlZT4gKnVzZXNfYWxsb2Nh dG9yc19hbGxvY2F0b3JzID0gTlVMTDsKKwogICB0cmVlICpwcmV2X2xpc3RfcCA9IE5VTEws ICpvcmlnX2xpc3RfcCA9IGxpc3RfcDsKICAgaW50IGhhbmRsZWRfZGVwZW5kX2l0ZXJhdG9y cyA9IC0xOwogICBpbnQgbm93YWl0ID0gLTE7CkBAIC05MTg1LDYgKzkxODksMTMgQEAgZ2lt cGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVf cCwKICAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdFVF9FWElUX0RBVEEpCiAgICAgb21wX3Rh cmdldF9yZW9yZGVyX2NsYXVzZXMgKGxpc3RfcCk7CiAKKyAgaWYgKGNvZGUgPT0gT01QX1RB UkdFVAorICAgICAgJiYgKG9tcF9yZXF1aXJlc19tYXNrICYgT01QX1JFUVVJUkVTX0RZTkFN SUNfQUxMT0NBVE9SUykgPT0gMCkKKyAgICB7CisgICAgICBhbGxvY2F0ZV9jbGF1c2VzID0g bmV3IGhhc2hfc2V0PHRyZWU+ICgpOworICAgICAgdXNlc19hbGxvY2F0b3JzX2FsbG9jYXRv cnMgPSBuZXcgaGFzaF9zZXQ8dHJlZT4gKCk7CisgICAgfQorCiAgIHdoaWxlICgoYyA9ICps aXN0X3ApICE9IE5VTEwpCiAgICAgewogICAgICAgYm9vbCByZW1vdmUgPSBmYWxzZTsKQEAg LTEwODg0LDYgKzEwODk1LDE4IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUg Kmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJICAgIE9NUF9DTEFVU0VfQUxMT0NBVEVf QUxMT0NBVE9SIChjKQogCSAgICAgID0gZ2V0X2luaXRpYWxpemVkX3RtcF92YXIgKE9NUF9D TEFVU0VfQUxMT0NBVEVfQUxMT0NBVE9SIChjKSwKIAkJCQkJIHByZV9wLCBOVUxMLCBmYWxz ZSk7CisJICBpZiAoYWxsb2NhdGVfY2xhdXNlcworCSAgICAgICYmIE9NUF9DTEFVU0VfQUxM T0NBVEVfQUxMT0NBVE9SIChjKQorCSAgICAgICYmIERFQ0xfUCAoT01QX0NMQVVTRV9BTExP Q0FURV9BTExPQ0FUT1IgKGMpKQorCSAgICAgICYmICFhbGxvY2F0ZV9jbGF1c2VzLT5jb250 YWlucyAoYykpCisJICAgIGFsbG9jYXRlX2NsYXVzZXMtPmFkZCAoYyk7CisJICBicmVhazsK KworCWNhc2UgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlM6CisJICBkZWNsID0gT01QX0NM QVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKTsKKwkgIGlmICh1c2VzX2FsbG9j YXRvcnNfYWxsb2NhdG9ycworCSAgICAgICYmICF1c2VzX2FsbG9jYXRvcnNfYWxsb2NhdG9y cy0+Y29udGFpbnMgKGRlY2wpKQorCSAgICB1c2VzX2FsbG9jYXRvcnNfYWxsb2NhdG9ycy0+ YWRkIChkZWNsKTsKIAkgIGJyZWFrOwogCiAJY2FzZSBPTVBfQ0xBVVNFX0RFRkFVTFQ6CkBA IC0xMDkzNiw2ICsxMDk1OSwyNiBAQCBnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzICh0cmVl ICpsaXN0X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCWxpc3RfcCA9ICZPTVBfQ0xBVVNFX0NI QUlOIChjKTsKICAgICB9CiAKKyAgaWYgKGNvZGUgPT0gT01QX1RBUkdFVAorICAgICAgJiYg KG9tcF9yZXF1aXJlc19tYXNrICYgT01QX1JFUVVJUkVTX0RZTkFNSUNfQUxMT0NBVE9SUykg PT0gMCkKKyAgICB7CisgICAgICBmb3IgKGhhc2hfc2V0PHRyZWU+OjppdGVyYXRvciBpID0g YWxsb2NhdGVfY2xhdXNlcy0+YmVnaW4gKCk7CisJICAgaSAhPSBhbGxvY2F0ZV9jbGF1c2Vz LT5lbmQgKCk7ICsraSkKKwl7CisJICB0cmVlIGFsbG9jYXRvciA9IE9NUF9DTEFVU0VfQUxM T0NBVEVfQUxMT0NBVE9SICgqaSk7CisJICBpZiAodXNlc19hbGxvY2F0b3JzX2FsbG9jYXRv cnMtPmNvbnRhaW5zIChhbGxvY2F0b3IpKQorCSAgICBjb250aW51ZTsKKworCSAgZXJyb3Jf YXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKCppKSwKKwkJICAgICJhbGxvY2F0b3IgJTwlcUUl PmluICU8YWxsb2NhdGUlPiBjbGF1c2Ugb24gdGFyZ2V0IHJlZ2lvbiAiCisJCSAgICAiaXMg bWlzc2luZyAlPHVzZXNfYWxsb2NhdG9ycyglRSklPiBjbGF1c2UiLAorCQkgICAgREVDTF9O QU1FIChhbGxvY2F0b3IpLCBERUNMX05BTUUgKGFsbG9jYXRvcikpOworCX0KKworICAgICAg ZGVsZXRlIGFsbG9jYXRlX2NsYXVzZXM7CisgICAgICBkZWxldGUgdXNlc19hbGxvY2F0b3Jz X2FsbG9jYXRvcnM7CisgICAgfQorCiAgIGN0eC0+Y2xhdXNlcyA9ICpvcmlnX2xpc3RfcDsK ICAgZ2ltcGxpZnlfb21wX2N0eHAgPSBjdHg7CiAgIGlmIChzdHJ1Y3Rfc2Vlbl9jbGF1c2Up CkBAIC0xNDE2NSw2ICsxNDIwOCw3OSBAQCBnaW1wbGlmeV9vbXBfd29ya3NoYXJlICh0cmVl ICpleHByX3AsIGdpbXBsZV9zZXEgKnByZV9wKQogCSAgYm9keSA9IE5VTEw7CiAJICBnaW1w bGVfc2VxX2FkZF9zdG10ICgmYm9keSwgZyk7CiAJfQorICAgICAgZWxzZSBpZiAoKG9ydCAm IE9SVF9UQVJHRVQpICE9IDAgJiYgKG9ydCAmIE9SVF9BQ0MpID09IDApCisJeworCSAgZ2lt cGxlX3NlcSBpbml0X3NlcSA9IE5VTEw7CisJICBnaW1wbGVfc2VxIGZpbmlfc2VxID0gTlVM TDsKKworCSAgdHJlZSBvbXBfaW5pdF9hbGxvY2F0b3JfZm4KKwkgICAgPSBidWlsdGluX2Rl Y2xfZXhwbGljaXQgKEJVSUxUX0lOX09NUF9JTklUX0FMTE9DQVRPUik7CisJICB0cmVlIG9t cF9kZXN0cm95X2FsbG9jYXRvcl9mbgorCSAgICA9IGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAo QlVJTFRfSU5fT01QX0RFU1RST1lfQUxMT0NBVE9SKTsKKworCSAgZm9yICh0cmVlICpjcCA9 ICZPTVBfQ0xBVVNFUyAoZXhwcik7ICpjcCAhPSBOVUxMOykKKwkgICAgaWYgKE9NUF9DTEFV U0VfQ09ERSAoKmNwKSA9PSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUykKKwkgICAgICB7 CisJCXRyZWUgYyA9ICpjcDsKKwkJdHJlZSBhbGxvY2F0b3IgPSBPTVBfQ0xBVVNFX1VTRVNf QUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpOworCQl0cmVlIG1lbXNwYWNlID0gT01QX0NMQVVT RV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpOworCQl0cmVlIHRyYWl0cyA9IE9NUF9D TEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoYyk7CisJCXRyZWUgbnRyYWl0cworCQkg ID0gKCh0cmFpdHMKKwkJICAgICAgJiYgREVDTF9JTklUSUFMICh0cmFpdHMpCisJCSAgICAg ICYmIFRSRUVfQ09ERSAoREVDTF9JTklUSUFMICh0cmFpdHMpKSA9PSBDT05TVFJVQ1RPUikK KwkJICAgICA/IGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLAorCQkJCSAgICAg IENPTlNUUlVDVE9SX05FTFRTIChERUNMX0lOSVRJQUwgKHRyYWl0cykpKQorCQkgICAgIDog aW50ZWdlcl96ZXJvX25vZGUpOworCQl0cmVlIHRyYWl0c192YXIKKwkJICA9ICh0cmFpdHMg IT0gTlVMTF9UUkVFCisJCSAgICAgPyBnZXRfaW5pdGlhbGl6ZWRfdG1wX3ZhciAoREVDTF9J TklUSUFMICh0cmFpdHMpLAorCQkJCQkJJmluaXRfc2VxLCBOVUxMKQorCQkgICAgIDogbnVs bF9wb2ludGVyX25vZGUpOworCisJCXRyZWUgbWVtc3BhY2VfdmFyID0gY3JlYXRlX3RtcF92 YXIgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJCQkgICAgIm1lbXNwYWNlX2VudW0i KTsKKwkJaWYgKG1lbXNwYWNlID09IE5VTExfVFJFRSkKKwkJICBtZW1zcGFjZSA9IGJ1aWxk X2ludF9jc3QgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsIDApOworCQllbHNlCisJCSAgbWVt c3BhY2UgPSBmb2xkX2NvbnZlcnQgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJCSAg IG1lbXNwYWNlKTsKKwkJZyA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG1lbXNwYWNlX3Zhciwg bWVtc3BhY2UpOworCQlnaW1wbGVfc2VxX2FkZF9zdG10ICgmaW5pdF9zZXEsIGcpOworCisJ CS8qCisJCWdpbXBsaWZ5X2Fzc2lnbiAobWVtc3BhY2VfdmFyLAorCQkJCSBmb2xkX2NvbnZl cnQgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJCSAgICAgICBtZW1zcGFjZSksCisJ CQkJICZpbml0X3NlcSk7CisJCSovCisJCXRyZWUgaW5pdGNhbGwgPSBidWlsZF9jYWxsX2V4 cHJfbG9jIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCQkJCSAgICAgb21wX2luaXRf YWxsb2NhdG9yX2ZuLCAzLAorCQkJCQkJICAgICBtZW1zcGFjZV92YXIsCisJCQkJCQkgICAg IG50cmFpdHMsCisJCQkJCQkgICAgIHRyYWl0c192YXIpOworCQlpbml0Y2FsbCA9IGZvbGRf Y29udmVydCAoVFJFRV9UWVBFIChhbGxvY2F0b3IpLCBpbml0Y2FsbCk7CisJCWdpbXBsaWZ5 X2Fzc2lnbiAoYWxsb2NhdG9yLCBpbml0Y2FsbCwgJmluaXRfc2VxKTsKKworCQlnID0gZ2lt cGxlX2J1aWxkX2NhbGwgKG9tcF9kZXN0cm95X2FsbG9jYXRvcl9mbiwgMSwgYWxsb2NhdG9y KTsKKwkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmZpbmlfc2VxLCBnKTsKKworCQkvKiBGaW5p c2hlZCBnZW5lcmF0aW5nIHJ1bnRpbWUgY2FsbHMsIHJlbW92ZSBVU0VTX0FMTE9DQVRPUlMK KwkJICAgY2xhdXNlLiAgKi8KKwkJKmNwID0gT01QX0NMQVVTRV9DSEFJTiAoYyk7CisJICAg ICAgfQorCSAgICBlbHNlCisJICAgICAgY3AgPSAmT01QX0NMQVVTRV9DSEFJTiAoKmNwKTsK KworCSAgaWYgKGZpbmlfc2VxKQorCSAgICB7CisJICAgICAgZ2JpbmQgKmJpbmQgPSBhc19h PGdiaW5kICo+IChnaW1wbGVfc2VxX2ZpcnN0X3N0bXQgKGJvZHkpKTsKKwkgICAgICBnID0g Z2ltcGxlX2J1aWxkX3RyeSAoZ2ltcGxlX2JpbmRfYm9keSAoYmluZCksCisJCQkJICAgIGZp bmlfc2VxLCBHSU1QTEVfVFJZX0ZJTkFMTFkpOworCSAgICAgIGdpbXBsZV9zZXFfYWRkX3N0 bXQgKCZpbml0X3NlcSwgZyk7CisJICAgICAgZ2ltcGxlX2JpbmRfc2V0X2JvZHkgKGJpbmQs IGluaXRfc2VxKTsKKwkgICAgfQorCX0KICAgICB9CiAgIGVsc2UKICAgICBnaW1wbGlmeV9h bmRfYWRkIChPTVBfQk9EWSAoZXhwciksICZib2R5KTsKZGlmZiAtLWdpdCBhL2djYy9vbXAt YnVpbHRpbnMuZGVmIGIvZ2NjL29tcC1idWlsdGlucy5kZWYKaW5kZXggY2ZhNjQ4M2M3YWUu LmUzMTAzY2VhMWMzIDEwMDY0NAotLS0gYS9nY2Mvb21wLWJ1aWx0aW5zLmRlZgorKysgYi9n Y2Mvb21wLWJ1aWx0aW5zLmRlZgpAQCAtNzYsNiArNzYsMTAgQEAgREVGX0dPTVBfQlVJTFRJ TiAoQlVJTFRfSU5fT01QX0dFVF9URUFNX05VTSwgIm9tcF9nZXRfdGVhbV9udW0iLAogCQkg IEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKIERFRl9HT01QX0JV SUxUSU4gKEJVSUxUX0lOX09NUF9HRVRfTlVNX1RFQU1TLCAib21wX2dldF9udW1fdGVhbXMi LAogCQkgIEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xFQUZfTElTVCkKK0RFRl9H T01QX0JVSUxUSU4gKEJVSUxUX0lOX09NUF9JTklUX0FMTE9DQVRPUiwgIm9tcF9pbml0X2Fs bG9jYXRvciIsCisJCSAgQlRfRk5fUFRSTU9ERV9QVFJNT0RFX0lOVF9QVFIsIEFUVFJfTk9U SFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElOIChCVUlMVF9JTl9PTVBfREVTVFJP WV9BTExPQ0FUT1IsICJvbXBfZGVzdHJveV9hbGxvY2F0b3IiLAorCQkgIEJUX0ZOX1ZPSURf UFRSTU9ERSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKIAogREVGX0dPTVBfQlVJTFRJTiAo QlVJTFRfSU5fR09NUF9BVE9NSUNfU1RBUlQsICJHT01QX2F0b21pY19zdGFydCIsCiAJCSAg QlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkKZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuYyBiL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzI4ODE4MWIxZWMKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2Nh dG9ycy0xLmMKQEAgLTAsMCArMSw0NiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8q IHsgZGctYWRkaXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCAtZmR1bXAt dHJlZS1naW1wbGUiIH0gKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCitvbXBfYWxsb2N0cmFp dF9rZXlfdCBrOworb21wX2FsbG9jdHJhaXRfdmFsdWVfdCB2OworCitpbnQgbWFpbiAodm9p ZCkKK3sKKyAgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBmb28sIGJhcjsKKyAgY29uc3Qgb21w X2FsbG9jdHJhaXRfdCBmb29fdHJhaXRzW10gPSB7IHsgb21wX2F0a19waW5uZWQsICAgIG9t cF9hdHZfdHJ1ZSB9LAorICAJCQkJCSAgeyBvbXBfYXRrX3BhcnRpdGlvbiwgb21wX2F0dl9u ZWFyZXN0IH0gfTsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0CisgICAgOworICAjcHJhZ21hIG9t cCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0 YXJnZXQgdXNlc19hbGxvY2F0b3JzIChmb28gKGZvb190cmFpdHMpKQorICAgIDsKKyAgI3By YWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoZm9vIChmb29fdHJhaXRzKSwgYmFy IChmb29fdHJhaXRzKSkKKyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9j YXRvcnMgKG1lbXNwYWNlKG9tcF9oaWdoX2J3X21lbV9zcGFjZSkgOiBmb28pCisgICAgOwor ICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzICh0cmFpdHMoZm9vX3RyYWl0 cykgOiBiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3Jz IChtZW1zcGFjZShvbXBfaGlnaF9id19tZW1fc3BhY2UpLCB0cmFpdHMoZm9vX3RyYWl0cykg OiBiYXIpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzICh0 cmFpdHMoZm9vX3RyYWl0cyksIG1lbXNwYWNlKG9tcF9oaWdoX2J3X21lbV9zcGFjZSkgOiBi YXIpIHVzZXNfYWxsb2NhdG9ycyhmb28pCisgIHsKKyAgICB2b2lkICpwID0gb21wX2FsbG9j ICgodW5zaWduZWQgbG9uZykgMzIsIGJhcik7CisgICAgb21wX2ZyZWUgKHAsIGJhcik7Cisg IH0KKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAi cHJhZ21hIG9tcCB0YXJnZXQiICJvcmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChiYXJcXCkgdXNl c19hbGxvY2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxcKFxcKSwgdHJhaXRzXFwoXFwpXFwpIiAi b3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFn bWEgb21wIHRhcmdldCBwcml2YXRlXFwoZm9vXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGZvbzog bWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190cmFpdHNcXClcXCkiICJvcmlnaW5hbCIg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFy Z2V0IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxc KFxcKSwgdHJhaXRzXFwoZm9vX3RyYWl0c1xcKVxcKSBwcml2YXRlXFwoZm9vXFwpIHVzZXNf YWxsb2NhdG9yc1xcKGZvbzogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190cmFpdHNc XClcXCkiICJvcmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChmb29cXCkgdXNlc19hbGxvY2F0b3Jz XFwoZm9vOiBtZW1zcGFjZVxcKG9tcF9oaWdoX2J3X21lbV9zcGFjZVxcKSwgdHJhaXRzXFwo XFwpXFwpIiAib3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwpIHVzZXNfYWxsb2NhdG9y c1xcKGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190cmFpdHNcXClcXCkiICJv cmlnaW5hbCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdt YSBvbXAgdGFyZ2V0IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwoYmFyOiBt ZW1zcGFjZVxcKG9tcF9oaWdoX2J3X21lbV9zcGFjZVxcKSwgdHJhaXRzXFwoZm9vX3RyYWl0 c1xcKVxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGZvb1xcKSB1c2VzX2FsbG9jYXRv cnNcXChmb286IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXChcXClcXCkgcHJpdmF0ZVxcKGJh clxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwob21wX2hpZ2hfYndfbWVt X3NwYWNlXFwpLCB0cmFpdHNcXChmb29fdHJhaXRzXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAq LworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9v bXBfaW5pdF9hbGxvY2F0b3IiIDkgImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9vbXBfZGVzdHJveV9hbGxvY2F0b3Ii IDkgImdpbXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9nb21wL3VzZXNfYWxsb2NhdG9ycy0yLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9nb21wL3VzZXNfYWxsb2NhdG9ycy0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjc0ZjQxMTM2MGMxCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRvcnMtMi5jCkBAIC0wLDAg KzEsMzIgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisKKyNpbmNsdWRlIDxvbXAuaD4K Kworb21wX2FsbG9jdHJhaXRfa2V5X3QgazsKK29tcF9hbGxvY3RyYWl0X3ZhbHVlX3QgdjsK KworaW50IG1haW4gKHZvaWQpCit7CisgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgZm9vLCBi YXI7CisgIGNvbnN0IG9tcF9hbGxvY3RyYWl0X3QgdHJhaXRzX2FycmF5W10gPSB7IHsgb21w X2F0a19waW5uZWQsICAgIG9tcF9hdHZfdHJ1ZSB9LAorCQkJCQkgICAgeyBvbXBfYXRrX3Bh cnRpdGlvbiwgb21wX2F0dl9uZWFyZXN0IH0gfTsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVz ZXNfYWxsb2NhdG9ycyAoYmF6KSAvKiB7IGRnLWVycm9yICInYmF6JyB1bmRlY2xhcmVkIC5m aXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbi4iIH0gKi8KKyAgICA7CisgICNwcmFnbWEgb21w IHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKGZvbyAoeHl6KSkgLyogeyBkZy1lcnJvciAiJ3h5 eicgdW5kZWNsYXJlZCAuZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24uIiB9ICovCisgICAg OworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChmb28gKHRyYWl0c19h cnJheSksIGJheiAodHJhaXRzX2FycmF5KSkKKyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdl dCB1c2VzX2FsbG9jYXRvcnMgKG1lbXNwYWNlKG9tcF9ub19zdWNoX3NwYWNlKSA6IGZvbykg LyogeyBkZy1lcnJvciAiJ29tcF9ub19zdWNoX3NwYWNlJyB1bmRlY2xhcmVkIiB9ICovCisg ICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzIChtZW1zcGFjZSgx KSA6IGZvbykgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgJ1xcXCknIGJlZm9yZSBudW1lcmlj IGNvbnN0YW50IiB9ICovCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxv Y2F0b3JzIChtZW1zcGFjZShvbXBfbm9fc3VjaF9zcGFjZSkgOiBmb28sIGJhcikgLyogeyBk Zy1lcnJvciAibWVtc3BhY2UgbW9kaWZpZXIgbXVzdCBiZSBjb25zdGFudCBlbnVtIG9mICdv bXBfbWVtc3BhY2VfaGFuZGxlX3QnIHR5cGUiIH0gKi8KKyAgICA7CisgICNwcmFnbWEgb21w IHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKHRyYWl0cyh4eXopIDogYmFyKQorICAgIDsKKyAg I3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAobWVtc3BhY2Uob21wX2hpZ2hf YndfbWVtX3NwYWNlKSwgdHJhaXRzKHRyYWl0c19hcnJheSksIG1lbXNwYWNlIChvbXBfbm9f c3VjaF9zcGFjZSkgOiBiYXIpIC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICc6JyBiZWZvcmUg JywnIHRva2VuIiB9ICovCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNlc19hbGxv Y2F0b3JzICh0cmFpdHoodHJhaXRzX2FycmF5KSwgbWVtc3BhY2Uob21wX2hpZ2hfYndfbWVt X3NwYWNlKSA6IGJhcikgdXNlc19hbGxvY2F0b3JzKGZvbykgLyogeyBkZy1lcnJvciAiJ3Ry YWl0eicgdW5kZWNsYXJlZCAuZmlyc3QgdXNlIGluIHRoaXMgZnVuY3Rpb24uIiB9ICovCisg ICAgOworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTEuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi44YWZlOWM0YzMzMQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMS5mOTAKQEAg LTAsMCArMSw1MyBAQAorISB7IGRnLWRvIGNvbXBpbGUgfQorISB7IGRnLWFkZGl0aW9uYWwt b3B0aW9ucyAiLWZkdW1wLXRyZWUtb3JpZ2luYWwgLWZkdW1wLXRyZWUtZ2ltcGxlIiB9CisK K3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xpYgorICBpbXBsaWNpdCBub25lCisgIGludGVn ZXIsIGFsbG9jYXRhYmxlIDo6IGFycig6KQorICBpbnRlZ2VyIChvbXBfYWxsb2NhdG9yX2hh bmRsZV9raW5kKSA6OiBiYXIsIGZvbworCisgIHR5cGUgKG9tcF9hbGxvY3RyYWl0KSwgcGFy YW1ldGVyIDo6IHRyYWl0c19hcnJheSgqKSA9ICYKKyAgICAgICBbb21wX2FsbG9jdHJhaXQo b21wX2F0a19waW5uZWQsb21wX2F0dl90cnVlKSwmCisgICAgICAgb21wX2FsbG9jdHJhaXQo b21wX2F0a19wYXJ0aXRpb24sb21wX2F0dl9uZWFyZXN0KV0KKworICAhJG9tcCB0YXJnZXQg YWxsb2NhdGUoYmFyIDogYXJyKSB1c2VzX2FsbG9jYXRvcnMoYmFyKQorICBibG9jaworICAg IGFsbG9jYXRlKGFycigxMDApKQorICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNl c19hbGxvY2F0b3JzKG9tcF9kZWZhdWx0X21lbV9hbGxvYykKKyAgYmxvY2sKKyAgZW5kIGJs b2NrCisKKyAgISRvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyhiYXIodHJhaXRzX2FycmF5 KSwgZm9vICh0cmFpdHNfYXJyYXkpKQorICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9t cCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKHRyYWl0cyh0cmFpdHNfYXJyYXkpIDogYmFyKQor ICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3Jz KG1lbXNwYWNlIChvbXBfbG93X2xhdF9tZW1fc3BhY2UpIDogYmFyKQorICBibG9jaworICBl bmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKG1lbXNwYWNlIChv bXBfaGlnaF9id19tZW1fc3BhY2UpLCB0cmFpdHModHJhaXRzX2FycmF5KSA6IGJhcikKKyAg YmxvY2sKKyAgICB1c2UgaXNvX2NfYmluZGluZworICAgIHR5cGUoY19wdHIpIDo6IHB0cgor ICAgIGludGVnZXIoY19zaXplX3QpIDo6IHN6ID0gMzIKKyAgICBwdHIgPSBvbXBfYWxsb2Mg KHN6LCBiYXIpCisgICAgY2FsbCBvbXBfZnJlZSAocHRyLCBiYXIpCisgIGVuZCBibG9jawor CitlbmQgcHJvZ3JhbSBtYWluCisKKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJw cmFnbWEgb21wIHRhcmdldCBhbGxvY2F0ZVxcKGFsbG9jYXRvclxcKGJhclxcKTphcnJcXCkg cHJpdmF0ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoXFwp LCB0cmFpdHNcXChcXClcXCkiICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2Fu LXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQiICJvcmlnaW5hbCIgfSB9CishIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKGZv b1xcKSB1c2VzX2FsbG9jYXRvcnNcXChmb286IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXCh0 cmFpdHNfYXJyYXlcXClcXCkgcHJpdmF0ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChi YXI6IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXCh0cmFpdHNfYXJyYXlcXClcXCkiICJvcmln aW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0 YXJnZXQgcHJpdmF0ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNl XFwoXFwpLCB0cmFpdHNcXCh0cmFpdHNfYXJyYXlcXClcXCkiICJvcmlnaW5hbCIgfSB9Cish IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0 ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoLlxcKSwgdHJh aXRzXFwoXFwpXFwpIiAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0 b3JzXFwoYmFyOiBtZW1zcGFjZVxcKC5cXCksIHRyYWl0c1xcKHRyYWl0c19hcnJheVxcKVxc KSIgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICJfX2J1aWx0aW5fb21wX2luaXRfYWxsb2NhdG9yIiA2ICJnaW1wbGUiIH0gfQorISB7IGRn LWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9vbXBfZGVzdHJveV9h bGxvY2F0b3IiIDYgImdpbXBsZSIgfSB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTIuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb21wL3VzZXNfYWxsb2NhdG9ycy0yLmY5MApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNTMwZDYwNDkwMmYKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTIuZjkw CkBAIC0wLDAgKzEsNDQgQEAKKyEgeyBkZy1kbyBjb21waWxlIH0KKworcHJvZ3JhbSBtYWlu CisgIHVzZSBvbXBfbGliCisgIGltcGxpY2l0IG5vbmUKKyAgaW50ZWdlciAob21wX2FsbG9j YXRvcl9oYW5kbGVfa2luZCkgOjogYmFyLCBmb28KKworICB0eXBlIChvbXBfYWxsb2N0cmFp dCksIHBhcmFtZXRlciA6OiB0cmFpdHNfYXJyYXkoKikgPSAmCisgICAgICAgW29tcF9hbGxv Y3RyYWl0KG9tcF9hdGtfcGlubmVkLG9tcF9hdHZfdHJ1ZSksJgorICAgICAgIG9tcF9hbGxv Y3RyYWl0KG9tcF9hdGtfcGFydGl0aW9uLG9tcF9hdHZfbmVhcmVzdCldCisKKyAgISRvbXAg dGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyhvbXBfbm9uX2V4aXN0YW50X2FsbG9jKSAhIHsgZGct ZXJyb3IgIidvbXBfbm9uX2V4aXN0YW50X2FsbG9jJyBhdCAuMS4gbXVzdCBiZSBpbnRlZ2Vy IG9mICdvbXBfYWxsb2NhdG9yX2hhbmRsZV9raW5kJyBraW5kIiB9CisgIGJsb2NrCisgIGVu ZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMoYmFyKHRyYWl0c19h cnJheSksIGZvbyAodHJhaXRzX2FycmF5KSwgKSAhIHsgZGctZXJyb3IgIkV4cGVjdGVkIG5h bWUgb2YgYWxsb2NhdG9yIGF0IC4xLiIgfQorICBibG9jaworICBlbmQgYmxvY2sKKworICAh JG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKHRyYWl0cyh4eXopIDogYmFyKSAhIHsgZGct ZXJyb3IgIid4eXonIGF0IC4xLiBtdXN0IGJlIG9mIGNvbnN0YW50ICd0eXBlLm9tcF9hbGxv Y3RyYWl0LicgYXJyYXkgdHlwZSBhbmQgaGF2ZSBhIGNvbnN0YW50IGluaXRpYWxpemVyIiB9 CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRv cnMobWVtc3BhY2Uob21wX25vbl9leGlzdGFudF9tZW1fc3BhY2UpIDogZm9vKSAhIHsgZGct ZXJyb3IgIidvbXBfbm9uX2V4aXN0YW50X21lbV9zcGFjZScgYXQgLjEuIGlzIG5vdCBhIHBy ZS1kZWZpbmVkIG1lbW9yeSBzcGFjZSBuYW1lIiB9CisgIGJsb2NrCisgIGVuZCBibG9jawor CisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnModHJhaXRzKHRyYWl0c19hcnJheSks IHRyYWl0cyh0cmFpdHNfYXJyYXkpIDogYmFyKSAhIHsgZGctZXJyb3IgIk11bHRpcGxlIHRy YWl0cyBtb2RpZmllcnMgYXQgLjEuIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEk b21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMobWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3Nw YWNlKSwgbWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3NwYWNlKSA6IGZvbykgISB7IGRnLWVy cm9yICJNdWx0aXBsZSBtZW1zcGFjZSBtb2RpZmllcnMgYXQgLjEuIiB9CisgIGJsb2NrCisg IGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMobWVtc3BhY2Uo b21wX2RlZmF1bHRfbWVtX3NwYWNlKSwgdHJhaXRzKHRyYWl0c19hcnJheSksIHRyYWl0cyh0 cmFpdHNfYXJyYXkpIDogZm9vKSAhIHsgZGctZXJyb3IgIk9ubHkgdHdvIG1vZGlmaWVycyBh cmUgYWxsb3dlZCBvbiAndXNlc19hbGxvY2F0b3JzJyBjbGF1c2UgYXQgLjEuIiB9CisgIGJs b2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMobWVt c3BhY2Uob21wX2RlZmF1bHRfbWVtX3NwYWNlKSwgdHJhaXRzKHRyYWl0c19hcnJheSkgOiBm b28sIGJhcikgISB7IGRnLWVycm9yICJXaGVuIHVzaW5nIG1vZGlmaWVycywgb25seSBhIHNp bmdsZSBhbGxvY2F0b3IgY2FuIGJlIHNwZWNpZmllZCBpbiBlYWNoICd1c2VzX2FsbG9jYXRv cnMnIGNsYXVzZSBhdCAuMS4iIH0KKyAgYmxvY2sKKyAgZW5kIGJsb2NrCisKK2VuZCBwcm9n cmFtIG1haW4KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91 c2VzX2FsbG9jYXRvcnMtMy5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAv dXNlc19hbGxvY2F0b3JzLTMuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4wNjRjY2Y0NTViMQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMy5mOTAKQEAgLTAsMCArMSwxNCBA QAorISB7IGRnLWRvIGNvbXBpbGUgfQorCitwcm9ncmFtIG1haW4KKyAgdXNlIG9tcF9saWIK KyAgaW1wbGljaXQgbm9uZQorICBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBhcnIoOikKKyAg aW50ZWdlciAob21wX2FsbG9jYXRvcl9oYW5kbGVfa2luZCkgOjogYmFyCisKKyAgISRvbXAg dGFyZ2V0IGFsbG9jYXRlKGJhciA6IGFycikgISB7IGRnLWVycm9yICJhbGxvY2F0b3IgJydi YXInJ2luICdhbGxvY2F0ZScgY2xhdXNlIG9uIHRhcmdldCByZWdpb24gaXMgbWlzc2luZyAn dXNlc19hbGxvY2F0b3JzLmJhci4nIGNsYXVzZSIgfQorICBibG9jaworICAgIGFsbG9jYXRl KGFycigxMDApKQorICBlbmQgYmxvY2sKKworZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtY29yZS5oIGIvZ2NjL3RyZWUtY29yZS5oCmluZGV4IGYxYzJiNjQxM2Ez Li43YWMwYjQ3YWMyZCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtY29yZS5oCisrKyBiL2djYy90 cmVlLWNvcmUuaApAQCAtNTIyLDYgKzUyMiw5IEBAIGVudW0gb21wX2NsYXVzZV9jb2RlIHsK IAogICAvKiBPcGVuQUNDIGNsYXVzZTogbm9ob3N0LiAgKi8KICAgT01QX0NMQVVTRV9OT0hP U1QsCisKKyAgLyogT3Blbk1QIGNsYXVzZTogdXNlc19hbGxvY2F0b3JzLiAgKi8KKyAgT01Q X0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMsCiB9OwogCiAjdW5kZWYgREVGVFJFRVNUUlVDVApk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjIGIvZ2NjL3RyZWUtcHJldHR5 LXByaW50LmNjCmluZGV4IDk5YWY5Nzc5NzlkLi5hNDZkYjAyNDE1NyAxMDA2NDQKLS0tIGEv Z2NjL3RyZWUtcHJldHR5LXByaW50LmNjCisrKyBiL2djYy90cmVlLXByZXR0eS1wcmludC5j YwpAQCAtNzY5LDYgKzc2OSwyMCBAQCBkdW1wX29tcF9jbGF1c2UgKHByZXR0eV9wcmludGVy ICpwcCwgdHJlZSBjbGF1c2UsIGludCBzcGMsIGR1bXBfZmxhZ3NfdCBmbGFncykKICAgICAg IHBwX3JpZ2h0X3BhcmVuIChwcCk7CiAgICAgICBicmVhazsKIAorICAgIGNhc2UgT01QX0NM QVVTRV9VU0VTX0FMTE9DQVRPUlM6CisgICAgICBwcF9zdHJpbmcgKHBwLCAidXNlc19hbGxv Y2F0b3JzKCIpOworICAgICAgZHVtcF9nZW5lcmljX25vZGUgKHBwLCBPTVBfQ0xBVVNFX1VT RVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGNsYXVzZSksCisJCQkgc3BjLCBmbGFncywgZmFs c2UpOworICAgICAgcHBfc3RyaW5nIChwcCwgIjogbWVtc3BhY2UoIik7CisgICAgICBkdW1w X2dlbmVyaWNfbm9kZSAocHAsIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX01FTVNQQUNF IChjbGF1c2UpLAorCQkJIHNwYywgZmxhZ3MsIGZhbHNlKTsKKyAgICAgIHBwX3N0cmluZyAo cHAsICIpLCB0cmFpdHMoIik7CisgICAgICBkdW1wX2dlbmVyaWNfbm9kZSAocHAsIE9NUF9D TEFVU0VfVVNFU19BTExPQ0FUT1JTX1RSQUlUUyAoY2xhdXNlKSwKKwkJCSBzcGMsIGZsYWdz LCBmYWxzZSk7CisgICAgICBwcF9yaWdodF9wYXJlbiAocHApOworICAgICAgcHBfcmlnaHRf cGFyZW4gKHBwKTsKKyAgICAgIGJyZWFrOworCiAgICAgY2FzZSBPTVBfQ0xBVVNFX0FGRklO SVRZOgogICAgICAgcHBfc3RyaW5nIChwcCwgImFmZmluaXR5KCIpOwogICAgICAgewpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUuY2MgYi9nY2MvdHJlZS5jYwppbmRleCA0Y2YzNzg1MjcwYi4u OTczYTgzNjYzNzIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmNjCisrKyBiL2djYy90cmVlLmNj CkBAIC0zNDksNiArMzQ5LDcgQEAgdW5zaWduZWQgY29uc3QgY2hhciBvbXBfY2xhdXNlX251 bV9vcHNbXSA9CiAgIDAsIC8qIE9NUF9DTEFVU0VfSUZfUFJFU0VOVCAqLwogICAwLCAvKiBP TVBfQ0xBVVNFX0ZJTkFMSVpFICovCiAgIDAsIC8qIE9NUF9DTEFVU0VfTk9IT1NUICovCisg IDMsIC8qIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTICovCiB9OwogCiBjb25zdCBjaGFy ICogY29uc3Qgb21wX2NsYXVzZV9jb2RlX25hbWVbXSA9CkBAIC00MzksNiArNDQwLDcgQEAg Y29uc3QgY2hhciAqIGNvbnN0IG9tcF9jbGF1c2VfY29kZV9uYW1lW10gPQogICAiaWZfcHJl c2VudCIsCiAgICJmaW5hbGl6ZSIsCiAgICJub2hvc3QiLAorICAidXNlc19hbGxvY2F0b3Jz IiwKIH07CiAKIC8qIFVubGVzcyBzcGVjaWZpYyB0byBPcGVuQUNDLCB3ZSB0ZW5kIHRvIGlu dGVybmFsbHkgbWFpbnRhaW4gT3Blbk1QLWNlbnRyaWMKZGlmZiAtLWdpdCBhL2djYy90cmVl LmggYi9nY2MvdHJlZS5oCmluZGV4IDg4NDQ0NzFlOWE1Li5iZmUyY2Q4MjIzMiAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUuaAorKysgYi9nY2MvdHJlZS5oCkBAIC0xODI0LDYgKzE4MjQsMTUg QEAgY2xhc3MgYXV0b19zdXBwcmVzc19sb2NhdGlvbl93cmFwcGVycwogI2RlZmluZSBPTVBf Q0xBVVNFX0FMTE9DQVRFX0NPTUJJTkVEKE5PREUpIFwKICAgKE9NUF9DTEFVU0VfU1VCQ09E RV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9BTExPQ0FURSktPmJhc2UucHVibGljX2ZsYWcp CiAKKyNkZWZpbmUgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SKE5PREUp IFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5P REUsIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKSwgMCkKKworI2RlZmluZSBPTVBfQ0xB VVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRShOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BF UkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1VTRVNf QUxMT0NBVE9SUyksIDEpCisKKyNkZWZpbmUgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNf VFJBSVRTKE5PREUpIFwKKyAgT01QX0NMQVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNP REVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKSwgMikKKwogI2Rl ZmluZSBPTVBfQ0xBVVNFX05VTV9URUFNU19VUFBFUl9FWFBSKE5PREUpIFwKICAgT01QX0NM QVVTRV9PUEVSQU5EIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFV U0VfTlVNX1RFQU1TKSwgMCkKIAo= --------------PB0pfS5vllZ0Pi2JhusWwpUN--