From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id EDCBD3856082 for ; Mon, 30 May 2022 14:43:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EDCBD3856082 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,263,1647331200"; d="scan'208";a="76553292" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 30 May 2022 06:43:47 -0800 IronPort-SDR: s+gjOk/4VUmnE07Bz7T+tPb6/r7vNgvg7Sh5E/IoNnlEvpriFIjM41mt6boNR0swrzta7Fxrbt rn+wqBy1eRZZnTN22ndKR8rZX5U/rMe3CZCmeObaDtfPofCPmHXg107be1G0FCqQ4GsTea8wSC YdoFRNbdOHC35IRVzQmqpYGnTQ+776LCLnOHFFTDWDg+5kf1UozWcyqQOiK/uvnl0cv3hs/+UU u+OgBI/MQTJdbHQL+n+5hEoisgfFq7n0tV2R93OB9ilYkkMsih05X46eLuNZsT1x5BYnglkGgk nEA= Content-Type: multipart/mixed; boundary="------------85uwWvHHqE7yfoVPhUXWRfNf" Message-ID: Date: Mon, 30 May 2022 22:43:30 +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.1 Subject: Re: [PATCH, OpenMP, v2] Implement uses_allocators clause for target regions Content-Language: en-US To: Jakub Jelinek CC: Tobias Burnus , gcc-patches , Catherine Moore , Andrew Stubbs , Hafiz Abid Qadeer References: <46d77e14-080c-db6c-4032-e12899c5d059@codesourcery.com> <9c0945fa-1054-095e-86ae-a9d8dd1ab625@codesourcery.com> From: Chung-Lin Tang In-Reply-To: X-ClientProxiedBy: svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) To svr-orw-mbx-10.mgc.mentorg.com (147.34.90.210) X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) 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: Mon, 30 May 2022 14:43:56 -0000 --------------85uwWvHHqE7yfoVPhUXWRfNf Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Jakub, this is v3 of the uses_allocators patch. On 2022/5/20 1:46 AM, Jakub Jelinek wrote: > On Tue, May 10, 2022 at 07:29:23PM +0800, Chung-Lin Tang wrote: >> @@ -15624,6 +15626,233 @@ c_parser_omp_clause_allocate (c_parser *parser, tree list) >> return nl; >> } >> >> +/* OpenMP 5.2: >> + uses_allocators ( allocator-list ) > > As uses_allocators is a 5.0 feature already, the above should say > /* OpenMP 5.0: >> + >> + allocator-list: >> + allocator >> + allocator , allocator-list >> + allocator ( traits-array ) >> + allocator ( traits-array ) , allocator-list >> + > > And here it should add > OpenMP 5.2: Done. >> + if (c_parser_next_token_is (parser, CPP_NAME)) >> + { >> + c_token *tok = c_parser_peek_token (parser); >> + const char *p = IDENTIFIER_POINTER (tok->value); >> + >> + if (strcmp ("traits", p) == 0 || strcmp ("memspace", p) == 0) >> + { >> + has_modifiers = true; >> + c_parser_consume_token (parser); >> + matching_parens parens2;; > > Double ;;, should be just ; > But more importantly, it is more complex. > When you see > uses_allocators(traits or > uses_allocators(memspace > it is not given that it has modifiers. While the 5.0/5.1 syntax had > a restriction that when allocator is not a predefined allocator (and > traits or memspace aren't predefined allocators) it must use ()s with > traits, so > uses_allocators(traits) > uses_allocators(memspace) > uses_allocators(traits,memspace) > are all invalid, > omp_allocator_handle_t traits; > uses_allocators(traits(mytraits)) > or > omp_allocator_handle_t memspace; > uses_allocators(memspace(mytraits),omp_default_mem_alloc) > are valid in the old syntax. > > So, I'm afraid to find out if the traits or memspace identifier > seen after uses_allocator ( are modifiers or not we need to > peek (for C with c_parser_peek_nth_token_raw) through all the > modifiers whether we see a : and only in that case say they > are modifiers rather than the old style syntax. The parser parts have been rewritten to allow this kind of use now. New code essentially parses lists of "id(id), id(id), ...", possibly delimited by a ':' marking the modifier/allocator lists. > I don't really like the modifiers handling not done in a loop. > As I said above, there needs to be some check whether there are modifiers or > not, but once we figure out there are modifiers, it should be done in a loop > with say some mask var on which traits have been already handled to diagnose > duplicates, we don't want to do the parsing code twice. Now everything is done in loops. The new code should be considerably simpler now. > This feels like you only accept a single allocator in the new syntax, > but that isn't my reading of the spec, I'd understand it as: > uses_allocators (memspace(omp_high_bw_mem_space), traits(foo_traits) : bar, baz, qux) > being valid too. This patch now allows multiple allocators to be specified in new syntax, although I have to note that the 5.2 specification of uses_allocators (page 181) specifically says "allocator: expression of allocator_handle_type" for the "Arguments" description, not a "list" like the allocate clause. >> + case OMP_CLAUSE_USES_ALLOCATORS: >> + t = OMP_CLAUSE_USES_ALLOCATORS_ALLOCATOR (c); >> + if (bitmap_bit_p (&generic_head, DECL_UID (t)) >> + || bitmap_bit_p (&map_head, DECL_UID (t)) >> + || bitmap_bit_p (&firstprivate_head, DECL_UID (t)) >> + || bitmap_bit_p (&lastprivate_head, DECL_UID (t))) > > You can't just use DECL_UID before you actually verify it is a variable. > So IMHO this particular if should be moved down somewhat. Guarded now. >> + { >> + error_at (OMP_CLAUSE_LOCATION (c), >> + "%qE appears more than once in data clauses", t); >> + remove = true; >> + } >> + else >> + bitmap_set_bit (&generic_head, DECL_UID (t)); >> + if (TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE >> + || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))), >> + "omp_allocator_handle_t") != 0) >> + { >> + error_at (OMP_CLAUSE_LOCATION (c), >> + "allocator must be of % type"); >> + remove = true; >> + } > > I'd add break; after remove = true; Added some such breaks. >> + if (TREE_CODE (t) == CONST_DECL) >> + { >> + if (OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c) >> + || OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c)) >> + error_at (OMP_CLAUSE_LOCATION (c), >> + "modifiers cannot be used with pre-defined " >> + "allocators"); >> + >> + /* Currently for pre-defined allocators in libgomp, we do not >> + require additional init/fini inside target regions, so discard >> + such clauses. */ >> + remove = true; >> + } > > It should be only removed if we emit the error (again with break; too). > IMHO (see the other mail) we should complain here if it has value 0 > (the omp_null_allocator case), dunno if we should error or just warn > if the value is outside of the range of known predefined identifiers (1..8 > currently I think). > But, otherwise, IMHO we need to keep it around, perhaps replacing the > CONST_DECL with INTEGER_CST, for the purposes of checking what predefined > allocators are used in the region. omp_alloc in libgomp does handle the omp_null_allocator case, by converting it to something else. The code already checks if the type is the OpenMP specified 'omp_memspace_handle_t' enumeration type. A CONST_DECL of that type should be guaranteed a pre-defined identifier. >> + t = OMP_CLAUSE_USES_ALLOCATORS_MEMSPACE (c); >> + if (t != NULL_TREE >> + && (TREE_CODE (t) != CONST_DECL >> + || TREE_CODE (TREE_TYPE (t)) != ENUMERAL_TYPE >> + || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (TREE_TYPE (t))), >> + "omp_memspace_handle_t") != 0)) >> + { >> + error_at (OMP_CLAUSE_LOCATION (c), "memspace modifier must be " >> + "constant enum of % type"); >> + remove = true; >> + } > > Again, wonder if it shouldn't after checking it replace the CONST_DECL with > an INTEGER_CST for the purposes of the middle-end. > >> + t = OMP_CLAUSE_USES_ALLOCATORS_TRAITS (c); >> + if (t != NULL_TREE) >> + { >> + bool type_err = false; >> + >> + if (TREE_CODE (TREE_TYPE (t)) != ARRAY_TYPE) >> + type_err = true; >> + else >> + { >> + tree elem_t = TREE_TYPE (TREE_TYPE (t)); >> + if (TREE_CODE (elem_t) != RECORD_TYPE >> + || strcmp (IDENTIFIER_POINTER (TYPE_IDENTIFIER (elem_t)), >> + "omp_alloctrait_t") != 0 >> + || !TYPE_READONLY (elem_t)) > > I'd diagnose if the array is incomplete, say > extern omp_alloctrait_t traits[]; I've added a DECL_SIZE == NULL_TREE check, although the TREE_READONLY check for the element type usually seems to already disqualify this case (because of the 'extern') > For the 5.2 syntax, there is also the restriction that > "be defined in the same scope as the construct on which the clause appears" > which I don't see being checked here. Unclear whether it applies to the > old syntax too. > > But again, it should also check that it is a VAR_DECL, it isn't extern > etc. Our interpretation of the requirement of "same-scope", and that it must be a constant array, is that the traits array is intended to be inlined into the target region (instead of more hassle issues related to transporting it to the offload target), which is what we do right now. In this case "same scope" is probably a little bit of overkill, it only needs to be staticly known/computable by the compiler. > For C++, I have to wonder if at allocator couldn't be a non-static data > member of a class inside of methods, that is something that can be generally > privatized too. Maybe later, I've sorry'ed FIELD_DECLs for now. Asides from the review issues, this patch also includes some fixes for the allocate clause firstprivate transfering on task constructs, triggered by the changes in the Fortran FE. Tested without regressions on mainline. Thanks, Chung-Lin 2022-05-30 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[]. * dump-parse-tree.cc (show_omp_namelist): Handle OMP_LIST_USES_ALLOCATORS. (show_omp_clauses): Likewise. * 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. * omp-low.cc (lower_private_allocate): Adjust receiving of allocator. (lower_rec_input_clauses): Likewise. (create_task_copyfn): Add dereference for allocator if needed. gcc/testsuite/ChangeLog: * c-c++-common/gomp/uses_allocators-1.c: New test. * c-c++-common/gomp/uses_allocators-2.c: New test. * c-c++-common/gomp/uses_allocators-3.c: New test. * gfortran.dg/gomp/allocate-1.f90: Adjust testcase. * 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. --------------85uwWvHHqE7yfoVPhUXWRfNf Content-Type: text/plain; charset="UTF-8"; name="uses_allocators-v3.patch" Content-Disposition: attachment; filename="uses_allocators-v3.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 Y2MvYy1mYW1pbHkvYy1vbXAuY2MKaW5kZXggNjZkMTdhMjY3M2QuLjUwZGI2OTM2NzI4IDEw MDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1vbXAuY2MKKysrIGIvZ2NjL2MtZmFtaWx5L2Mt b21wLmNjCkBAIC0xODczLDYgKzE4NzMsNyBAQCBjX29tcF9zcGxpdF9jbGF1c2VzIChsb2Nh dGlvbl90IGxvYywgZW51bSB0cmVlX2NvZGUgY29kZSwKIAljYXNlIE9NUF9DTEFVU0VfSEFT X0RFVklDRV9BRERSOgogCWNhc2UgT01QX0NMQVVTRV9ERUZBVUxUTUFQOgogCWNhc2UgT01Q X0NMQVVTRV9ERVBFTkQ6CisJY2FzZSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKIAkg IHMgPSBDX09NUF9DTEFVU0VfU1BMSVRfVEFSR0VUOwogCSAgYnJlYWs7CiAJY2FzZSBPTVBf Q0xBVVNFX05VTV9URUFNUzoKZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLXByYWdtYS5o IGIvZ2NjL2MtZmFtaWx5L2MtcHJhZ21hLmgKaW5kZXggNTQ4NjRjMmVjNDEuLjdmODk0NGY4 MWQ2IDEwMDY0NAotLS0gYS9nY2MvYy1mYW1pbHkvYy1wcmFnbWEuaAorKysgYi9nY2MvYy1m YW1pbHkvYy1wcmFnbWEuaApAQCAtMTU0LDYgKzE1NCw3IEBAIGVudW0gcHJhZ21hX29tcF9j bGF1c2UgewogICBQUkFHTUFfT01QX0NMQVVTRV9VTlRJRUQsCiAgIFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSLAogICBQUkFHTUFfT01QX0NMQVVTRV9VU0VfREVWSUNFX0FE RFIsCisgIFBSQUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUywKIAogICAvKiBDbGF1 c2VzIGZvciBPcGVuQUNDLiAgKi8KICAgUFJBR01BX09BQ0NfQ0xBVVNFX0FTWU5DLApkaWZm IC0tZ2l0IGEvZ2NjL2MvYy1wYXJzZXIuY2MgYi9nY2MvYy9jLXBhcnNlci5jYwppbmRleCA0 OTJkOTk1YTI4MS4uMjAyMmMxNjgwMmQgMTAwNjQ0Ci0tLSBhL2djYy9jL2MtcGFyc2VyLmNj CisrKyBiL2djYy9jL2MtcGFyc2VyLmNjCkBAIC0xMjkyMiw2ICsxMjkyMiw4IEBAIGNfcGFy c2VyX29tcF9jbGF1c2VfbmFtZSAoY19wYXJzZXIgKnBhcnNlcikKIAkgICAgcmVzdWx0ID0g UFJBR01BX09NUF9DTEFVU0VfVVNFX0RFVklDRV9BRERSOwogCSAgZWxzZSBpZiAoIXN0cmNt cCAoInVzZV9kZXZpY2VfcHRyIiwgcCkpCiAJICAgIHJlc3VsdCA9IFBSQUdNQV9PTVBfQ0xB VVNFX1VTRV9ERVZJQ0VfUFRSOworCSAgZWxzZSBpZiAoIXN0cmNtcCAoInVzZXNfYWxsb2Nh dG9ycyIsIHApKQorCSAgICByZXN1bHQgPSBQUkFHTUFfT01QX0NMQVVTRV9VU0VTX0FMTE9D QVRPUlM7CiAJICBicmVhazsKIAljYXNlICd2JzoKIAkgIGlmICghc3RyY21wICgidmVjdG9y IiwgcCkpCkBAIC0xNTY1MSw2ICsxNTY1MywxOTkgQEAgY19wYXJzZXJfb21wX2NsYXVzZV9h bGxvY2F0ZSAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4gbmw7CiB9 CiAKKy8qIE9wZW5NUCA1LjA6CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxvY2F0b3ItbGlz dCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2NhdG9yCisgICBhbGxvY2F0b3Ig LCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5ICkKKyAgIGFs bG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9yLWxpc3QKKworICAgT3Blbk1Q IDUuMjoKKworICAgdXNlc19hbGxvY2F0b3JzICggbW9kaWZpZXIgOiBhbGxvY2F0b3ItbGlz dCApCisgICB1c2VzX2FsbG9jYXRvcnMgKCBtb2RpZmllciAsIG1vZGlmaWVyIDogYWxsb2Nh dG9yLWxpc3QgKQorCisgICBtb2RpZmllcjoKKyAgIHRyYWl0cyAoIHRyYWl0cy1hcnJheSAp CisgICBtZW1zcGFjZSAoIG1lbS1zcGFjZS1oYW5kbGUgKSAgKi8KKworc3RhdGljIHRyZWUK K2NfcGFyc2VyX29tcF9jbGF1c2VfdXNlc19hbGxvY2F0b3JzIChjX3BhcnNlciAqcGFyc2Vy LCB0cmVlIGxpc3QpCit7CisgIGxvY2F0aW9uX3QgY2xhdXNlX2xvYyA9IGNfcGFyc2VyX3Bl ZWtfdG9rZW4gKHBhcnNlciktPmxvY2F0aW9uOworICB0cmVlIHQgPSBOVUxMX1RSRUUsIG5s ID0gbGlzdDsKKyAgbWF0Y2hpbmdfcGFyZW5zIHBhcmVuczsKKyAgaWYgKCFwYXJlbnMucmVx dWlyZV9vcGVuIChwYXJzZXIpKQorICAgIHJldHVybiBsaXN0OworCisgIHRyZWUgbWVtc3Bh Y2VfZXhwciA9IE5VTExfVFJFRTsKKyAgdHJlZSB0cmFpdHNfdmFyID0gTlVMTF9UUkVFOwor CisgIHN0cnVjdCBpdGVtX3RvaworICB7CisgICAgbG9jYXRpb25fdCBsb2M7CisgICAgdHJl ZSBpZDsKKyAgICBpdGVtX3RvayAodm9pZCkgOiBsb2MgKFVOS05PV05fTE9DQVRJT04pLCBp ZCAoTlVMTF9UUkVFKSB7fQorICB9OworICBzdHJ1Y3QgaXRlbSB7IGl0ZW1fdG9rIG5hbWUs IGFyZzsgfTsKKyAgYXV0b192ZWM8aXRlbT4gKm1vZGlmaWVycyA9IE5VTEwsICphbGxvY2F0 b3JzID0gTlVMTDsKKyAgYXV0b192ZWM8aXRlbT4gKmN1cl9saXN0ID0gbmV3IGF1dG9fdmVj PGl0ZW0+ICg0KTsKKworICB3aGlsZSAodHJ1ZSkKKyAgICB7CisgICAgICBpdGVtIGl0Owor CisgICAgICBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfTkFNRSkp CisJeworCSAgY190b2tlbiAqdG9rID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKTsK KwkgIGl0Lm5hbWUuaWQgPSB0b2stPnZhbHVlOworCSAgaXQubmFtZS5sb2MgPSB0b2stPmxv Y2F0aW9uOworCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKKworCSAgaWYg KGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX09QRU5fUEFSRU4pKQorCSAg ICB7CisJICAgICAgaWYgKG1vZGlmaWVycykKKwkJeworCQkgIGNfcGFyc2VyX2Vycm9yIChw YXJzZXIsICJtb2RpZmllcnMgY2Fubm90IGJlIHVzZWQgd2l0aCAiCisJCQkJICAiKGRlcHJl Y2F0ZWQpIHRyYWl0cyBhcnJheSBsaXN0IHN5bnRheCIpOworCQkgIGdvdG8gZW5kOworCQl9 CisJICAgICAgbWF0Y2hpbmdfcGFyZW5zIHBhcmVuczI7CisJICAgICAgcGFyZW5zMi5jb25z dW1lX29wZW4gKHBhcnNlcik7CisKKwkgICAgICBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9p cyAocGFyc2VyLCBDUFBfTkFNRSkpCisJCXsKKwkJICB0b2sgPSBjX3BhcnNlcl9wZWVrX3Rv a2VuIChwYXJzZXIpOworCQkgIGl0LmFyZy5pZCA9IHRvay0+dmFsdWU7CisJCSAgaXQuYXJn LmxvYyA9IHRvay0+bG9jYXRpb247CisJCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFy c2VyKTsKKwkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGNfcGFyc2VyX2Vycm9yIChwYXJz ZXIsICJleHBlY3RlZCBpZGVudGlmaWVyIik7CisJCSAgcGFyZW5zMi5za2lwX3VudGlsX2Zv dW5kX2Nsb3NlIChwYXJzZXIpOworCQkgIGdvdG8gZW5kOworCQl9CisJICAgICAgcGFyZW5z Mi5za2lwX3VudGlsX2ZvdW5kX2Nsb3NlIChwYXJzZXIpOworCSAgICB9CisJfQorCisgICAg ICBjdXJfbGlzdC0+c2FmZV9wdXNoIChpdCk7CisKKyAgICAgIGlmIChjX3BhcnNlcl9uZXh0 X3Rva2VuX2lzIChwYXJzZXIsIENQUF9DT01NQSkpCisJY19wYXJzZXJfY29uc3VtZV90b2tl biAocGFyc2VyKTsKKyAgICAgIGVsc2UgaWYgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBh cnNlciwgQ1BQX0NPTE9OKSkKKwl7CisJICBpZiAobW9kaWZpZXJzKQorCSAgICB7CisJICAg ICAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkICU8KSU+Iik7CisJICAgICAg Z290byBlbmQ7CisJICAgIH0KKwkgIGVsc2UKKwkgICAgeworCSAgICAgIGNfcGFyc2VyX2Nv bnN1bWVfdG9rZW4gKHBhcnNlcik7CisJICAgICAgbW9kaWZpZXJzID0gY3VyX2xpc3Q7CisJ ICAgICAgY3VyX2xpc3QgPSBuZXcgYXV0b192ZWM8aXRlbT4gKDQpOworCSAgICB9CisJfQor ICAgICAgZWxzZSBpZiAoY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfQ0xP U0VfUEFSRU4pKQorCXsKKwkgIGdjY19hc3NlcnQgKGFsbG9jYXRvcnMgPT0gTlVMTCk7CisJ ICBhbGxvY2F0b3JzID0gY3VyX2xpc3Q7CisJICBjdXJfbGlzdCA9IE5VTEw7CisJICBicmVh azsKKwl9CisgICAgICBlbHNlCisJeworCSAgY19wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4 cGVjdGVkICU8KSU+Iik7CisJICBnb3RvIGVuZDsKKwl9CisgICAgfQorCisgIGlmIChtb2Rp ZmllcnMpCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1vZGlmaWVycy0+bGVuZ3Ro ICgpOyBpKyspCisgICAgICB7CisJaXRlbSYgaXQgPSAoKm1vZGlmaWVycylbaV07CisJY29u c3QgY2hhciAqcCA9IElERU5USUZJRVJfUE9JTlRFUiAoaXQubmFtZS5pZCk7CisJaW50IHN0 cmNtcF90cmFpdHMgPSAxLCBzdHJjbXBfbWVtc3BhY2UgPSAxOworCisJaWYgKChzdHJjbXBf dHJhaXRzID0gc3RyY21wICgidHJhaXRzIiwgcCkpID09IDAKKwkgICAgfHwgKHN0cmNtcF9t ZW1zcGFjZSA9IHN0cmNtcCAoIm1lbXNwYWNlIiwgcCkpID09IDApCisJICB7CisJICAgIGlm ICgoc3RyY21wX3RyYWl0cyA9PSAwICYmIHRyYWl0c192YXIgIT0gTlVMTF9UUkVFKQorCQl8 fCAoc3RyY21wX21lbXNwYWNlID09IDAgJiYgbWVtc3BhY2VfZXhwciAhPSBOVUxMX1RSRUUp KQorCSAgICAgIHsKKwkJZXJyb3JfYXQgKGl0Lm5hbWUubG9jLCAiZHVwbGljYXRlICVxcyBt b2RpZmllciIsIHApOworCQlnb3RvIGVuZDsKKwkgICAgICB9CisJICAgIHQgPSBsb29rdXBf bmFtZSAoaXQuYXJnLmlkKTsKKwkgICAgaWYgKHQgPT0gTlVMTF9UUkVFKQorCSAgICAgIHsK KwkJdW5kZWNsYXJlZF92YXJpYWJsZSAoaXQuYXJnLmxvYywgaXQuYXJnLmlkKTsKKwkJdCA9 IGVycm9yX21hcmtfbm9kZTsKKwkgICAgICB9CisJICAgIGVsc2UgaWYgKHN0cmNtcF9tZW1z cGFjZSA9PSAwKQorCSAgICAgIG1lbXNwYWNlX2V4cHIgPSB0OworCSAgICBlbHNlIGlmIChz dHJjbXBfdHJhaXRzID09IDApCisJICAgICAgdHJhaXRzX3ZhciA9IHQ7CisJICAgIGVsc2UK KwkgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisJICB9CisJZWxzZQorCSAgeworCSAgICBl cnJvcl9hdCAoaXQubmFtZS5sb2MsICJ1bmtub3duIG1vZGlmaWVyICVxRSIsIGl0Lm5hbWUu aWQpOworCSAgICBnb3RvIGVuZDsKKwkgIH0KKyAgICAgIH0KKworICBpZiAoYWxsb2NhdG9y cykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsb2NhdG9ycy0+bGVuZ3RoICgp OyBpKyspCisgICAgICB7CisJaXRlbSYgaXQgPSAoKmFsbG9jYXRvcnMpW2ldOworCXQgPSBs b29rdXBfbmFtZSAoaXQubmFtZS5pZCk7CisJaWYgKHQgPT0gTlVMTF9UUkVFKQorCSAgewor CSAgICB1bmRlY2xhcmVkX3ZhcmlhYmxlIChpdC5uYW1lLmxvYywgaXQubmFtZS5pZCk7CisJ ICAgIGdvdG8gZW5kOworCSAgfQorCWVsc2UgaWYgKHQgIT0gZXJyb3JfbWFya19ub2RlKQor CSAgeworCSAgICB0cmVlIHQyID0gTlVMTF9UUkVFOworCSAgICBpZiAoaXQuYXJnLmlkKQor CSAgICAgIHsKKwkJdDIgPSBsb29rdXBfbmFtZSAoaXQuYXJnLmlkKTsKKwkJaWYgKHQyID09 IE5VTExfVFJFRSkKKwkJICB7CisJCSAgICB1bmRlY2xhcmVkX3ZhcmlhYmxlIChpdC5hcmcu bG9jLCBpdC5hcmcuaWQpOworCQkgICAgZ290byBlbmQ7CisJCSAgfQorCSAgICAgIH0KKwkg ICAgZWxzZQorCSAgICAgIHQyID0gdHJhaXRzX3ZhcjsKKworCSAgICB0cmVlIGMgPSBidWls ZF9vbXBfY2xhdXNlIChjbGF1c2VfbG9jLAorCQkJCSAgICAgICBPTVBfQ0xBVVNFX1VTRVNf QUxMT0NBVE9SUyk7CisJICAgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX0FMTE9DQVRP UiAoYykgPSB0OworCSAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19NRU1TUEFDRSAo YykgPSBtZW1zcGFjZV9leHByOworCSAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19U UkFJVFMgKGMpID0gdDI7CisJICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gbmw7CisJICAg IG5sID0gYzsKKwkgIH0KKyAgICAgIH0KKworIGVuZDoKKyAgaWYgKGN1cl9saXN0KQorICAg IGRlbGV0ZSBjdXJfbGlzdDsKKyAgaWYgKG1vZGlmaWVycykKKyAgICBkZWxldGUgbW9kaWZp ZXJzOworICBpZiAoYWxsb2NhdG9ycykKKyAgICBkZWxldGUgYWxsb2NhdG9yczsKKyAgcGFy ZW5zLnNraXBfdW50aWxfZm91bmRfY2xvc2UgKHBhcnNlcik7CisgIHJldHVybiBubDsKK30K KwogLyogT3Blbk1QIDQuMDoKICAgIGxpbmVhciAoIHZhcmlhYmxlLWxpc3QgKQogICAgbGlu ZWFyICggdmFyaWFibGUtbGlzdCA6IGV4cHJlc3Npb24gKQpAQCAtMTcwNzksNiArMTcyNzQs MTAgQEAgY19wYXJzZXJfb21wX2FsbF9jbGF1c2VzIChjX3BhcnNlciAqcGFyc2VyLCBvbXBf Y2xhdXNlX21hc2sgbWFzaywKIAkgIGNsYXVzZXMgPSBjX3BhcnNlcl9vbXBfY2xhdXNlX2Fs bG9jYXRlIChwYXJzZXIsIGNsYXVzZXMpOwogCSAgY19uYW1lID0gImFsbG9jYXRlIjsKIAkg IGJyZWFrOworCWNhc2UgUFJBR01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgorCSAg Y2xhdXNlcyA9IGNfcGFyc2VyX29tcF9jbGF1c2VfdXNlc19hbGxvY2F0b3JzIChwYXJzZXIs IGNsYXVzZXMpOworCSAgY19uYW1lID0gInVzZXNfYWxsb2NhdG9ycyI7CisJICBicmVhazsK IAljYXNlIFBSQUdNQV9PTVBfQ0xBVVNFX0xJTkVBUjogCiAJICBjbGF1c2VzID0gY19wYXJz ZXJfb21wX2NsYXVzZV9saW5lYXIgKHBhcnNlciwgY2xhdXNlcyk7IAogCSAgY19uYW1lID0g ImxpbmVhciI7CkBAIC0yMTA5Myw3ICsyMTI5Miw4IEBAIGNfcGFyc2VyX29tcF90YXJnZXRf ZXhpdF9kYXRhIChsb2NhdGlvbl90IGxvYywgY19wYXJzZXIgKnBhcnNlciwKIAl8IChPTVBf Q0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9JTl9SRURVQ1RJT04pCVwKIAl8 IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9USFJFQURfTElNSVQp CVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9JU19ERVZJ Q0VfUFRSKVwKLQl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9I QVNfREVWSUNFX0FERFIpKQorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8IFBSQUdNQV9PTVBf Q0xBVVNFX0hBU19ERVZJQ0VfQUREUilcCisJfCAoT01QX0NMQVVTRV9NQVNLXzEgPDwgUFJB R01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKSkKIAogc3RhdGljIGJvb2wKIGNfcGFy c2VyX29tcF90YXJnZXQgKGNfcGFyc2VyICpwYXJzZXIsIGVudW0gcHJhZ21hX2NvbnRleHQg Y29udGV4dCwgYm9vbCAqaWZfcCkKZGlmZiAtLWdpdCBhL2djYy9jL2MtdHlwZWNrLmNjIGIv Z2NjL2MvYy10eXBlY2suY2MKaW5kZXggNGYzNjExZjFiODkuLmJjZDRjYTcwNzRiIDEwMDY0 NAotLS0gYS9nY2MvYy9jLXR5cGVjay5jYworKysgYi9nY2MvYy9jLXR5cGVjay5jYwpAQCAt MTQ3NjMsNiArMTQ3NjMsMTEwIEBAIGNfZmluaXNoX29tcF9jbGF1c2VzICh0cmVlIGNsYXVz ZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQogCSAgICB9CiAJICBicmVhazsKIAor CWNhc2UgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlM6CisJICB0ID0gT01QX0NMQVVTRV9V U0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjKTsKKwkgIGlmICgoVkFSX1AgKHQpIHx8IFRS RUVfQ09ERSAodCkgPT0gUEFSTV9ERUNMKQorCSAgICAgICYmIChiaXRtYXBfYml0X3AgKCZn ZW5lcmljX2hlYWQsIERFQ0xfVUlEICh0KSkKKwkJICB8fCBiaXRtYXBfYml0X3AgKCZtYXBf aGVhZCwgREVDTF9VSUQgKHQpKQorCQkgIHx8IGJpdG1hcF9iaXRfcCAoJmZpcnN0cHJpdmF0 ZV9oZWFkLCBERUNMX1VJRCAodCkpCisJCSAgfHwgYml0bWFwX2JpdF9wICgmbGFzdHByaXZh dGVfaGVhZCwgREVDTF9VSUQgKHQpKSkpCisJICAgIHsKKwkgICAgICBlcnJvcl9hdCAoT01Q X0NMQVVTRV9MT0NBVElPTiAoYyksCisJCQkiJXFFIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2Ug aW4gZGF0YSBjbGF1c2VzIiwgdCk7CisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgICBi cmVhazsKKwkgICAgfQorCSAgZWxzZQorCSAgICBiaXRtYXBfc2V0X2JpdCAoJmdlbmVyaWNf aGVhZCwgREVDTF9VSUQgKHQpKTsKKwkgIGlmIChUUkVFX0NPREUgKFRSRUVfVFlQRSAodCkp ICE9IEVOVU1FUkFMX1RZUEUKKwkgICAgICB8fCBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRF UiAoVFlQRV9JREVOVElGSUVSIChUUkVFX1RZUEUgKHQpKSksCisJCQkgIm9tcF9hbGxvY2F0 b3JfaGFuZGxlX3QiKSAhPSAwKQorCSAgICB7CisJICAgICAgZXJyb3JfYXQgKE9NUF9DTEFV U0VfTE9DQVRJT04gKGMpLAorCQkJImFsbG9jYXRvciBtdXN0IGJlIG9mICU8b21wX2FsbG9j YXRvcl9oYW5kbGVfdCU+IHR5cGUiKTsKKwkgICAgICByZW1vdmUgPSB0cnVlOworCSAgICAg IGJyZWFrOworCSAgICB9CisJICBpZiAoVFJFRV9DT0RFICh0KSA9PSBDT05TVF9ERUNMKQor CSAgICB7CisJICAgICAgLyogQ3VycmVudGx5IGZvciBwcmUtZGVmaW5lZCBhbGxvY2F0b3Jz IGluIGxpYmdvbXAsIHdlIGRvIG5vdAorCQkgcmVxdWlyZSBhZGRpdGlvbmFsIGluaXQvZmlu aSBpbnNpZGUgdGFyZ2V0IHJlZ2lvbnMsIHNvIGRpc2NhcmQKKwkJIHN1Y2ggY2xhdXNlcy4g ICovCisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKworCSAgICAgIGlmIChPTVBfQ0xBVVNFX1VT RVNfQUxMT0NBVE9SU19NRU1TUEFDRSAoYykKKwkJICB8fCBPTVBfQ0xBVVNFX1VTRVNfQUxM T0NBVE9SU19UUkFJVFMgKGMpKQorCQl7CisJCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9D QVRJT04gKGMpLAorCQkJICAgICJtb2RpZmllcnMgY2Fubm90IGJlIHVzZWQgd2l0aCBwcmUt ZGVmaW5lZCAiCisJCQkgICAgImFsbG9jYXRvcnMiKTsKKwkJICBicmVhazsKKwkJfQorCSAg ICB9CisJICB0ID0gT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpOwor CSAgaWYgKHQgIT0gTlVMTF9UUkVFCisJICAgICAgJiYgKFRSRUVfQ09ERSAodCkgIT0gQ09O U1RfREVDTAorCQkgIHx8IFRSRUVfQ09ERSAoVFJFRV9UWVBFICh0KSkgIT0gRU5VTUVSQUxf VFlQRQorCQkgIHx8IHN0cmNtcCAoSURFTlRJRklFUl9QT0lOVEVSIChUWVBFX0lERU5USUZJ RVIgKFRSRUVfVFlQRSAodCkpKSwKKwkJCSAgICAgIm9tcF9tZW1zcGFjZV9oYW5kbGVfdCIp ICE9IDApKQorCSAgICB7CisJICAgICAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04g KGMpLCAibWVtc3BhY2UgbW9kaWZpZXIgbXVzdCBiZSAiCisJCQkiY29uc3RhbnQgZW51bSBv ZiAlPG9tcF9tZW1zcGFjZV9oYW5kbGVfdCU+IHR5cGUiKTsKKwkgICAgICByZW1vdmUgPSB0 cnVlOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICB0ID0gT01QX0NMQVVTRV9VU0VTX0FM TE9DQVRPUlNfVFJBSVRTIChjKTsKKwkgIGlmICh0ICE9IE5VTExfVFJFRSkKKwkgICAgewor CSAgICAgIGJvb2wgdHlwZV9lcnIgPSBmYWxzZTsKKworCSAgICAgIGlmIChUUkVFX0NPREUg KFRSRUVfVFlQRSAodCkpICE9IEFSUkFZX1RZUEUKKwkJICB8fCBERUNMX1NJWkUgKHQpID09 IE5VTExfVFJFRSkKKwkJdHlwZV9lcnIgPSB0cnVlOworCSAgICAgIGVsc2UKKwkJeworCQkg IHRyZWUgZWxlbV90ID0gVFJFRV9UWVBFIChUUkVFX1RZUEUgKHQpKTsKKwkJICBpZiAoVFJF RV9DT0RFIChlbGVtX3QpICE9IFJFQ09SRF9UWVBFCisJCSAgICAgIHx8IHN0cmNtcCAoSURF TlRJRklFUl9QT0lOVEVSIChUWVBFX0lERU5USUZJRVIgKGVsZW1fdCkpLAorCQkJCSAib21w X2FsbG9jdHJhaXRfdCIpICE9IDAKKwkJICAgICAgfHwgIVRZUEVfUkVBRE9OTFkgKGVsZW1f dCkpCisJCSAgICB0eXBlX2VyciA9IHRydWU7CisJCX0KKwkgICAgICBpZiAodHlwZV9lcnIp CisJCXsKKwkJICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMg YXJyYXkgbXVzdCBiZSBvZiAiCisJCQkgICAgIiU8Y29uc3Qgb21wX2FsbG9jdHJhaXRfdCBb XSU+IHR5cGUiKTsKKwkJICByZW1vdmUgPSB0cnVlOworCQl9CisJICAgICAgZWxzZQorCQl7 CisJCSAgdHJlZSBjc3RfdmFsID0gZGVjbF9jb25zdGFudF92YWx1ZV8xICh0LCB0cnVlKTsK KwkJICBpZiAoY3N0X3ZhbCA9PSB0KQorCQkgICAgeworCQkgICAgICBlcnJvcl9hdCAoT01Q X0NMQVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVzdCBiZSAiCisJCQkJIm9m IGNvbnN0YW50IHZhbHVlcyIpOworCisJCSAgICAgIHJlbW92ZSA9IHRydWU7CisJCSAgICB9 CisJCX0KKwkgICAgfQorCisJICBpZiAocmVtb3ZlKQorCSAgICBicmVhazsKKwkgIGVsc2UK KwkgICAgeworCSAgICAgIC8qIENyZWF0ZSBhIHByaXZhdGUgY2xhdXNlIGZvciB0aGUgYWxs b2NhdG9yIHZhcmlhYmxlLCBwbGFjZWQKKwkJIHByaW9yIHRvIGN1cnJlbnQgdXNlc19hbGxv Y2F0b3JzIGNsYXVzZS4gICovCisJICAgICAgdHJlZSBuYyA9IGJ1aWxkX29tcF9jbGF1c2Ug KE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLAorCQkJCQkgIE9NUF9DTEFVU0VfUFJJVkFURSk7 CisJICAgICAgT01QX0NMQVVTRV9ERUNMIChuYykgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NB VE9SU19BTExPQ0FUT1IgKGMpOworCSAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKG5jKSA9IGM7 CisJICAgICAgKnBjID0gbmM7CisKKwkgICAgICBwYyA9ICZPTVBfQ0xBVVNFX0NIQUlOIChj KTsKKwkgICAgICBjb250aW51ZTsKKwkgICAgfQorCiAJY2FzZSBPTVBfQ0xBVVNFX0RFUEVO RDoKIAkgIHQgPSBPTVBfQ0xBVVNFX0RFQ0wgKGMpOwogCSAgaWYgKHQgPT0gTlVMTF9UUkVF KQpkaWZmIC0tZ2l0IGEvZ2NjL2NwL3BhcnNlci5jYyBiL2djYy9jcC9wYXJzZXIuY2MKaW5k ZXggODY4Yjg2MTBkNjAuLjhhMGI3NzgzZTFjIDEwMDY0NAotLS0gYS9nY2MvY3AvcGFyc2Vy LmNjCisrKyBiL2djYy9jcC9wYXJzZXIuY2MKQEAgLTM2NjQ5LDYgKzM2NjQ5LDggQEAgY3Bf cGFyc2VyX29tcF9jbGF1c2VfbmFtZSAoY3BfcGFyc2VyICpwYXJzZXIpCiAJICAgIHJlc3Vs dCA9IFBSQUdNQV9PTVBfQ0xBVVNFX1VTRV9ERVZJQ0VfQUREUjsKIAkgIGVsc2UgaWYgKCFz dHJjbXAgKCJ1c2VfZGV2aWNlX3B0ciIsIHApKQogCSAgICByZXN1bHQgPSBQUkFHTUFfT01Q X0NMQVVTRV9VU0VfREVWSUNFX1BUUjsKKwkgIGVsc2UgaWYgKCFzdHJjbXAgKCJ1c2VzX2Fs bG9jYXRvcnMiLCBwKSkKKwkgICAgcmVzdWx0ID0gUFJBR01BX09NUF9DTEFVU0VfVVNFU19B TExPQ0FUT1JTOwogCSAgYnJlYWs7CiAJY2FzZSAndic6CiAJICBpZiAoIXN0cmNtcCAoInZl Y3RvciIsIHApKQpAQCAtMzg5MDEsNiArMzg5MDMsMjIwIEBAIGNwX3BhcnNlcl9vbXBfY2xh dXNlX2FsbG9jYXRlIChjcF9wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogICByZXR1cm4g bmxpc3Q7CiB9CiAKKy8qIE9wZW5NUCA1LjA6CisgICB1c2VzX2FsbG9jYXRvcnMgKCBhbGxv Y2F0b3ItbGlzdCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2NhdG9yCisgICBh bGxvY2F0b3IgLCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJhaXRzLWFycmF5 ICkKKyAgIGFsbG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9yLWxpc3QKKwor ICAgT3Blbk1QIDUuMjoKKworICAgdXNlc19hbGxvY2F0b3JzICggbW9kaWZpZXIgOiBhbGxv Y2F0b3ItbGlzdCApCisgICB1c2VzX2FsbG9jYXRvcnMgKCBtb2RpZmllciAsIG1vZGlmaWVy IDogYWxsb2NhdG9yLWxpc3QgKQorCisgICBtb2RpZmllcjoKKyAgIHRyYWl0cyAoIHRyYWl0 cy1hcnJheSApCisgICBtZW1zcGFjZSAoIG1lbS1zcGFjZS1oYW5kbGUgKSAgKi8KKworc3Rh dGljIHRyZWUKK2NwX3BhcnNlcl9vbXBfY2xhdXNlX3VzZXNfYWxsb2NhdG9ycyAoY3BfcGFy c2VyICpwYXJzZXIsIHRyZWUgbGlzdCkKK3sKKyAgbG9jYXRpb25fdCBjbGF1c2VfbG9jCisg ICAgPSBjcF9sZXhlcl9wZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKS0+bG9jYXRpb247Cisg IHRyZWUgdCA9IE5VTExfVFJFRSwgbmwgPSBsaXN0OworICBtYXRjaGluZ19wYXJlbnMgcGFy ZW5zOworICBpZiAoIXBhcmVucy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCisgICAgcmV0dXJu IGxpc3Q7CisKKyAgdHJlZSBtZW1zcGFjZV9leHByID0gTlVMTF9UUkVFOworICB0cmVlIHRy YWl0c192YXIgPSBOVUxMX1RSRUU7CisKKyAgc3RydWN0IGl0ZW1fdG9rCisgIHsKKyAgICBs b2NhdGlvbl90IGxvYzsKKyAgICB0cmVlIGlkOworICAgIGl0ZW1fdG9rICh2b2lkKSA6IGxv YyAoVU5LTk9XTl9MT0NBVElPTiksIGlkIChOVUxMX1RSRUUpIHt9CisgIH07CisgIHN0cnVj dCBpdGVtIHsgaXRlbV90b2sgbmFtZSwgYXJnOyB9OworICBhdXRvX3ZlYzxpdGVtPiAqbW9k aWZpZXJzID0gTlVMTCwgKmFsbG9jYXRvcnMgPSBOVUxMOworICBhdXRvX3ZlYzxpdGVtPiAq Y3VyX2xpc3QgPSBuZXcgYXV0b192ZWM8aXRlbT4gKDQpOworCisgIHdoaWxlICh0cnVlKQor ICAgIHsKKyAgICAgIGl0ZW0gaXQ7CisKKyAgICAgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2Vu X2lzIChwYXJzZXItPmxleGVyLCBDUFBfTkFNRSkpCisJeworCSAgY3BfdG9rZW4gKnRvayA9 IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCSAgaXQubmFtZS5pZCA9 IHRvay0+dS52YWx1ZTsKKwkgIGl0Lm5hbWUubG9jID0gdG9rLT5sb2NhdGlvbjsKKwkgIGNw X2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworCisJICBpZiAoY3BfbGV4 ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX09QRU5fUEFSRU4pKQorCSAg ICB7CisJICAgICAgaWYgKG1vZGlmaWVycykKKwkJeworCQkgIGNwX3BhcnNlcl9lcnJvciAo cGFyc2VyLCAibW9kaWZpZXJzIGNhbm5vdCBiZSB1c2VkIHdpdGggIgorCQkJCSAgICIoZGVw cmVjYXRlZCkgdHJhaXRzIGFycmF5IGxpc3Qgc3ludGF4Iik7CisJCSAgZ290byBlbmQ7CisJ CX0KKwkgICAgICBtYXRjaGluZ19wYXJlbnMgcGFyZW5zMjsKKwkgICAgICBwYXJlbnMyLmNv bnN1bWVfb3BlbiAocGFyc2VyKTsKKworCSAgICAgIGlmIChjcF9sZXhlcl9uZXh0X3Rva2Vu X2lzIChwYXJzZXItPmxleGVyLCBDUFBfTkFNRSkpCisJCXsKKwkJICB0b2sgPSBjcF9sZXhl cl9wZWVrX3Rva2VuIChwYXJzZXItPmxleGVyKTsKKwkJICBpdC5hcmcuaWQgPSB0b2stPnUu dmFsdWU7CisJCSAgaXQuYXJnLmxvYyA9IHRvay0+bG9jYXRpb247CisJCSAgY3BfbGV4ZXJf Y29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsK KwkJICBjcF9wYXJzZXJfZXJyb3IgKHBhcnNlciwgImV4cGVjdGVkIGlkZW50aWZpZXIiKTsK KwkJICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVudGhlc2lzIChwYXJzZXIsCisJ CQkJCQkJIC8qcmVjb3ZlcmluZz0qL3RydWUsCisJCQkJCQkJIC8qb3JfY29tbWE9Ki9mYWxz ZSwKKwkJCQkJCQkgLypjb25zdW1lX3BhcmVuPSovdHJ1ZSk7CisJCSAgZ290byBlbmQ7CisJ CX0KKwkgICAgICBjcF9wYXJzZXJfc2tpcF90b19jbG9zaW5nX3BhcmVudGhlc2lzIChwYXJz ZXIsCisJCQkJCQkgICAgIC8qcmVjb3ZlcmluZz0qL2ZhbHNlLAorCQkJCQkJICAgICAvKm9y X2NvbW1hPSovZmFsc2UsCisJCQkJCQkgICAgIC8qY29uc3VtZV9wYXJlbj0qL3RydWUpOwor CSAgICB9CisJfQorCisgICAgICBjdXJfbGlzdC0+c2FmZV9wdXNoIChpdCk7CisKKyAgICAg IGlmIChjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfQ09NTUEp KQorCWNwX2xleGVyX2NvbnN1bWVfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworICAgICAgZWxz ZSBpZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX0NPTE9O KSkKKwl7CisJICBpZiAobW9kaWZpZXJzKQorCSAgICB7CisJICAgICAgY3BfcGFyc2VyX2Vy cm9yIChwYXJzZXIsICJleHBlY3RlZCAlPCklPiIpOworCSAgICAgIGNwX3BhcnNlcl9za2lw X3RvX2Nsb3NpbmdfcGFyZW50aGVzaXMgKHBhcnNlciwKKwkJCQkJCSAgICAgLypyZWNvdmVy aW5nPSovdHJ1ZSwKKwkJCQkJCSAgICAgLypvcl9jb21tYT0qL2ZhbHNlLAorCQkJCQkJICAg ICAvKmNvbnN1bWVfcGFyZW49Ki90cnVlKTsKKwkgICAgICBnb3RvIGVuZDsKKwkgICAgfQor CSAgZWxzZQorCSAgICB7CisJICAgICAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2Vy LT5sZXhlcik7CisJICAgICAgbW9kaWZpZXJzID0gY3VyX2xpc3Q7CisJICAgICAgY3VyX2xp c3QgPSBuZXcgYXV0b192ZWM8aXRlbT4gKDQpOworCSAgICB9CisJfQorICAgICAgZWxzZSBp ZiAoY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX0NMT1NFX1BB UkVOKSkKKwl7CisJICBnY2NfYXNzZXJ0IChhbGxvY2F0b3JzID09IE5VTEwpOworCSAgYWxs b2NhdG9ycyA9IGN1cl9saXN0OworCSAgY3VyX2xpc3QgPSBOVUxMOworCSAgYnJlYWs7CisJ fQorICAgICAgZWxzZQorCXsKKwkgIGNwX3BhcnNlcl9lcnJvciAocGFyc2VyLCAiZXhwZWN0 ZWQgJTwpJT4iKTsKKwkgIGNwX3BhcnNlcl9za2lwX3RvX2Nsb3NpbmdfcGFyZW50aGVzaXMg KHBhcnNlciwKKwkJCQkJCSAvKnJlY292ZXJpbmc9Ki90cnVlLAorCQkJCQkJIC8qb3JfY29t bWE9Ki9mYWxzZSwKKwkJCQkJCSAvKmNvbnN1bWVfcGFyZW49Ki90cnVlKTsKKwkgIGdvdG8g ZW5kOworCX0KKyAgICB9CisKKyAgaWYgKG1vZGlmaWVycykKKyAgICBmb3IgKHVuc2lnbmVk IGkgPSAwOyBpIDwgbW9kaWZpZXJzLT5sZW5ndGggKCk7IGkrKykKKyAgICAgIHsKKwlpdGVt JiBpdCA9ICgqbW9kaWZpZXJzKVtpXTsKKwljb25zdCBjaGFyICpwID0gSURFTlRJRklFUl9Q T0lOVEVSIChpdC5uYW1lLmlkKTsKKwlpbnQgc3RyY21wX3RyYWl0cyA9IDEsIHN0cmNtcF9t ZW1zcGFjZSA9IDE7CisKKwlpZiAoKHN0cmNtcF90cmFpdHMgPSBzdHJjbXAgKCJ0cmFpdHMi LCBwKSkgPT0gMAorCSAgICB8fCAoc3RyY21wX21lbXNwYWNlID0gc3RyY21wICgibWVtc3Bh Y2UiLCBwKSkgPT0gMCkKKwkgIHsKKwkgICAgaWYgKChzdHJjbXBfdHJhaXRzID09IDAgJiYg dHJhaXRzX3ZhciAhPSBOVUxMX1RSRUUpCisJCXx8IChzdHJjbXBfbWVtc3BhY2UgPT0gMCAm JiBtZW1zcGFjZV9leHByICE9IE5VTExfVFJFRSkpCisJICAgICAgeworCQllcnJvcl9hdCAo aXQubmFtZS5sb2MsICJkdXBsaWNhdGUgJXFzIG1vZGlmaWVyIiwgcCk7CisJCWdvdG8gZW5k OworCSAgICAgIH0KKwkgICAgdCA9IGNwX3BhcnNlcl9sb29rdXBfbmFtZV9zaW1wbGUgKHBh cnNlciwgaXQuYXJnLmlkLCBpdC5hcmcubG9jKTsKKwkgICAgaWYgKHQgPT0gZXJyb3JfbWFy a19ub2RlKQorCSAgICAgIHsKKwkJY3BfcGFyc2VyX25hbWVfbG9va3VwX2Vycm9yIChwYXJz ZXIsIGl0LmFyZy5pZCwgdCwgTkxFX05VTEwsCisJCQkJCSAgICAgaXQuYXJnLmxvYyk7CisJ ICAgICAgfQorCSAgICBlbHNlIGlmIChzdHJjbXBfbWVtc3BhY2UgPT0gMCkKKwkgICAgICBt ZW1zcGFjZV9leHByID0gdDsKKwkgICAgZWxzZSBpZiAoc3RyY21wX3RyYWl0cyA9PSAwKQor CSAgICAgIHRyYWl0c192YXIgPSB0OworCSAgICBlbHNlCisJICAgICAgZ2NjX3VucmVhY2hh YmxlICgpOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgZXJyb3JfYXQgKGl0Lm5hbWUubG9j LCAidW5rbm93biBtb2RpZmllciAlcUUiLCBpdC5uYW1lLmlkKTsKKwkgICAgZ290byBlbmQ7 CisJICB9CisgICAgICB9CisKKyAgaWYgKGFsbG9jYXRvcnMpCisgICAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IGFsbG9jYXRvcnMtPmxlbmd0aCAoKTsgaSsrKQorICAgICAgeworCWl0 ZW0mIGl0ID0gKCphbGxvY2F0b3JzKVtpXTsKKwl0ID0gY3BfcGFyc2VyX2xvb2t1cF9uYW1l X3NpbXBsZSAocGFyc2VyLCBpdC5uYW1lLmlkLCBpdC5uYW1lLmxvYyk7CisJaWYgKHQgPT0g ZXJyb3JfbWFya19ub2RlKQorCSAgeworCSAgICBjcF9wYXJzZXJfbmFtZV9sb29rdXBfZXJy b3IgKHBhcnNlciwgaXQubmFtZS5pZCwgdCwgTkxFX05VTEwsCisJCQkJCSBpdC5uYW1lLmxv Yyk7CisJICAgIGdvdG8gZW5kOworCSAgfQorCWVsc2UgaWYgKHQgIT0gZXJyb3JfbWFya19u b2RlKQorCSAgeworCSAgICB0cmVlIHQyID0gTlVMTF9UUkVFOworCSAgICBpZiAoaXQuYXJn LmlkKQorCSAgICAgIHsKKwkJdDIgPSBjcF9wYXJzZXJfbG9va3VwX25hbWVfc2ltcGxlIChw YXJzZXIsIGl0LmFyZy5pZCwKKwkJCQkJCSAgIGl0LmFyZy5sb2MpOworCQlpZiAodDIgPT0g ZXJyb3JfbWFya19ub2RlKQorCQkgIHsKKwkJICAgIGNwX3BhcnNlcl9uYW1lX2xvb2t1cF9l cnJvciAocGFyc2VyLCBpdC5hcmcuaWQsIHQyLAorCQkJCQkJIE5MRV9OVUxMLCBpdC5hcmcu bG9jKTsKKwkJICAgIGdvdG8gZW5kOworCQkgIH0KKwkgICAgICB9CisJICAgIGVsc2UKKwkg ICAgICB0MiA9IHRyYWl0c192YXI7CisKKwkgICAgdHJlZSBjID0gYnVpbGRfb21wX2NsYXVz ZSAoY2xhdXNlX2xvYywKKwkJCQkgICAgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMp OworCSAgICBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19BTExPQ0FUT1IgKGMpID0gdDsK KwkgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpID0gbWVtc3Bh Y2VfZXhwcjsKKwkgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfVFJBSVRTIChjKSA9 IHQyOworCSAgICBPTVBfQ0xBVVNFX0NIQUlOIChjKSA9IG5sOworCSAgICBubCA9IGM7CisJ ICB9CisgICAgICB9CisKKyBlbmQ6CisgIGlmIChjdXJfbGlzdCkKKyAgICBkZWxldGUgY3Vy X2xpc3Q7CisgIGlmIChtb2RpZmllcnMpCisgICAgZGVsZXRlIG1vZGlmaWVyczsKKyAgaWYg KGFsbG9jYXRvcnMpCisgICAgZGVsZXRlIGFsbG9jYXRvcnM7CisgIGNwX3BhcnNlcl9za2lw X3RvX2Nsb3NpbmdfcGFyZW50aGVzaXMgKHBhcnNlciwKKwkJCQkJIC8qcmVjb3ZlcmluZz0q L2ZhbHNlLAorCQkJCQkgLypvcl9jb21tYT0qL2ZhbHNlLAorCQkJCQkgLypjb25zdW1lX3Bh cmVuPSovdHJ1ZSk7CisgIHJldHVybiBubDsKK30KKwogLyogT3Blbk1QIDIuNToKICAgIGxh c3Rwcml2YXRlICggdmFyaWFibGUtbGlzdCApCiAKQEAgLTQwNDUzLDYgKzQwNjY5LDEwIEBA IGNwX3BhcnNlcl9vbXBfYWxsX2NsYXVzZXMgKGNwX3BhcnNlciAqcGFyc2VyLCBvbXBfY2xh dXNlX21hc2sgbWFzaywKIAkgIGNsYXVzZXMgPSBjcF9wYXJzZXJfb21wX2NsYXVzZV9hbGxv Y2F0ZSAocGFyc2VyLCBjbGF1c2VzKTsKIAkgIGNfbmFtZSA9ICJhbGxvY2F0ZSI7CiAJICBi cmVhazsKKwljYXNlIFBSQUdNQV9PTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUzoKKwkgIGNs YXVzZXMgPSBjcF9wYXJzZXJfb21wX2NsYXVzZV91c2VzX2FsbG9jYXRvcnMgKHBhcnNlciwg Y2xhdXNlcyk7CisJICBjX25hbWUgPSAidXNlc19hbGxvY2F0b3JzIjsKKwkgIGJyZWFrOwog CWNhc2UgUFJBR01BX09NUF9DTEFVU0VfTElORUFSOgogCSAgewogCSAgICBib29sIGRlY2xh cmVfc2ltZCA9IGZhbHNlOwpAQCAtNDQ0NjQsNyArNDQ2ODQsOCBAQCBjcF9wYXJzZXJfb21w X3RhcmdldF91cGRhdGUgKGNwX3BhcnNlciAqcGFyc2VyLCBjcF90b2tlbiAqcHJhZ21hX3Rv aywKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9JTl9SRURV Q1RJT04pCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NMQVVTRV9U SFJFQURfTElNSVQpCVwKIAl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFfT01QX0NM QVVTRV9JU19ERVZJQ0VfUFRSKVwKLQl8IChPTVBfQ0xBVVNFX01BU0tfMSA8PCBQUkFHTUFf T01QX0NMQVVTRV9IQVNfREVWSUNFX0FERFIpKQorCXwgKE9NUF9DTEFVU0VfTUFTS18xIDw8 IFBSQUdNQV9PTVBfQ0xBVVNFX0hBU19ERVZJQ0VfQUREUilcCisJfCAoT01QX0NMQVVTRV9N QVNLXzEgPDwgUFJBR01BX09NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKSkKIAogc3RhdGlj IGJvb2wKIGNwX3BhcnNlcl9vbXBfdGFyZ2V0IChjcF9wYXJzZXIgKnBhcnNlciwgY3BfdG9r ZW4gKnByYWdtYV90b2ssCmRpZmYgLS1naXQgYS9nY2MvY3Avc2VtYW50aWNzLmNjIGIvZ2Nj L2NwL3NlbWFudGljcy5jYwppbmRleCBjZDdhMjgxOGZlYi4uZWJhNzg2YWU1YWYgMTAwNjQ0 Ci0tLSBhL2djYy9jcC9zZW1hbnRpY3MuY2MKKysrIGIvZ2NjL2NwL3NlbWFudGljcy5jYwpA QCAtNzc2Niw2ICs3NzY2LDEwNCBAQCBmaW5pc2hfb21wX2NsYXVzZXMgKHRyZWUgY2xhdXNl cywgZW51bSBjX29tcF9yZWdpb25fdHlwZSBvcnQpCiAJICAgIH0KIAkgIGdvdG8gaGFuZGxl X2ZpZWxkX2RlY2w7CiAKKwljYXNlIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgorCSAg dCA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX0FMTE9DQVRPUiAoYyk7CisJICBpZiAo VFJFRV9DT0RFICh0KSA9PSBGSUVMRF9ERUNMKQorCSAgICB7CisJICAgICAgc29ycnlfYXQg KE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLCAiY2xhc3MgbWVtYmVycyBub3QgeWV0ICIKKwkJ CSJzdXBwb3J0ZWQgaW4gJTx1c2VzX2FsbG9jYXRvcnMlPiBjbGF1c2UiKTsKKwkgICAgICBy ZW1vdmUgPSB0cnVlOworCSAgICAgIGJyZWFrOworCSAgICB9CisJICB0ID0gY29udmVydF9m cm9tX3JlZmVyZW5jZSAodCk7CisJICBpZiAoVFJFRV9DT0RFIChUUkVFX1RZUEUgKHQpKSAh PSBFTlVNRVJBTF9UWVBFCisJICAgICAgfHwgc3RyY21wIChJREVOVElGSUVSX1BPSU5URVIg KFRZUEVfSURFTlRJRklFUiAoVFJFRV9UWVBFICh0KSkpLAorCQkJICJvbXBfYWxsb2NhdG9y X2hhbmRsZV90IikgIT0gMCkKKwkgICAgeworCSAgICAgIGVycm9yX2F0IChPTVBfQ0xBVVNF X0xPQ0FUSU9OIChjKSwKKwkJCSJhbGxvY2F0b3IgbXVzdCBiZSBvZiAlPG9tcF9hbGxvY2F0 b3JfaGFuZGxlX3QlPiB0eXBlIik7CisJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkgICAgICBi cmVhazsKKwkgICAgfQorCSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gQ09OU1RfREVDTCkKKwkg ICAgeworCSAgICAgIC8qIEN1cnJlbnRseSBmb3IgcHJlLWRlZmluZWQgYWxsb2NhdG9ycyBp biBsaWJnb21wLCB3ZSBkbyBub3QKKwkJIHJlcXVpcmUgYWRkaXRpb25hbCBpbml0L2Zpbmkg aW5zaWRlIHRhcmdldCByZWdpb25zLCBzbyBkaXNjYXJkCisJCSBzdWNoIGNsYXVzZXMuICAq LworCSAgICAgIHJlbW92ZSA9IHRydWU7CisKKwkgICAgICBpZiAoT01QX0NMQVVTRV9VU0VT X0FMTE9DQVRPUlNfTUVNU1BBQ0UgKGMpCisJCSAgfHwgT01QX0NMQVVTRV9VU0VTX0FMTE9D QVRPUlNfVFJBSVRTIChjKSkKKwkJeworCQkgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FU SU9OIChjKSwKKwkJCSAgICAibW9kaWZpZXJzIGNhbm5vdCBiZSB1c2VkIHdpdGggcHJlLWRl ZmluZWQgIgorCQkJICAgICJhbGxvY2F0b3JzIik7CisJCSAgYnJlYWs7CisJCX0KKwkgICAg fQorCSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX01FTVNQQUNFIChjKTsKKwkg IGlmICh0ICE9IE5VTExfVFJFRQorCSAgICAgICYmIChUUkVFX0NPREUgKHQpICE9IENPTlNU X0RFQ0wKKwkJICB8fCBUUkVFX0NPREUgKFRSRUVfVFlQRSAodCkpICE9IEVOVU1FUkFMX1RZ UEUKKwkJICB8fCBzdHJjbXAgKElERU5USUZJRVJfUE9JTlRFUiAoVFlQRV9JREVOVElGSUVS IChUUkVFX1RZUEUgKHQpKSksCisJCQkgICAgICJvbXBfbWVtc3BhY2VfaGFuZGxlX3QiKSAh PSAwKSkKKwkgICAgeworCSAgICAgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChj KSwgIm1lbXNwYWNlIG1vZGlmaWVyIG11c3QgYmUgIgorCQkJImNvbnN0YW50IGVudW0gb2Yg JTxvbXBfbWVtc3BhY2VfaGFuZGxlX3QlPiB0eXBlIik7CisJICAgICAgcmVtb3ZlID0gdHJ1 ZTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCSAgdCA9IE9NUF9DTEFVU0VfVVNFU19BTExP Q0FUT1JTX1RSQUlUUyAoYyk7CisJICBpZiAodCAhPSBOVUxMX1RSRUUpCisJICAgIHsKKwkg ICAgICBib29sIHR5cGVfZXJyID0gZmFsc2U7CisKKwkgICAgICBpZiAoVFJFRV9DT0RFIChU UkVFX1RZUEUgKHQpKSAhPSBBUlJBWV9UWVBFCisJCSAgfHwgREVDTF9TSVpFICh0KSA9PSBO VUxMX1RSRUUpCisJCXR5cGVfZXJyID0gdHJ1ZTsKKwkgICAgICBlbHNlCisJCXsKKwkJICB0 cmVlIGVsZW1fdCA9IFRSRUVfVFlQRSAoVFJFRV9UWVBFICh0KSk7CisJCSAgaWYgKFRSRUVf Q09ERSAoZWxlbV90KSAhPSBSRUNPUkRfVFlQRQorCQkgICAgICB8fCBzdHJjbXAgKElERU5U SUZJRVJfUE9JTlRFUiAoVFlQRV9JREVOVElGSUVSIChlbGVtX3QpKSwKKwkJCQkgIm9tcF9h bGxvY3RyYWl0X3QiKSAhPSAwCisJCSAgICAgIHx8ICFUWVBFX1JFQURPTkxZIChlbGVtX3Qp KQorCQkgICAgdHlwZV9lcnIgPSB0cnVlOworCQl9CisJICAgICAgaWYgKHR5cGVfZXJyKQor CQl7CisJCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04gKGMpLCAidHJhaXRzIGFy cmF5ICVxRSBtdXN0IGJlIG9mICIKKwkJCSAgICAiJTxjb25zdCBvbXBfYWxsb2N0cmFpdF90 IFtdJT4gdHlwZSIsIHQpOworCQkgIHJlbW92ZSA9IHRydWU7CisJCX0KKwkgICAgICBlbHNl CisJCXsKKwkJICB0cmVlIGNzdF92YWwgPSBkZWNsX2NvbnN0YW50X3ZhbHVlICh0KTsKKwkJ ICBpZiAoY3N0X3ZhbCA9PSB0KQorCQkgICAgeworCQkgICAgICBlcnJvcl9hdCAoT01QX0NM QVVTRV9MT0NBVElPTiAoYyksICJ0cmFpdHMgYXJyYXkgbXVzdCBiZSAiCisJCQkJIm9mIGNv bnN0YW50IHZhbHVlcyIpOworCisJCSAgICAgIHJlbW92ZSA9IHRydWU7CisJCSAgICB9CisJ CX0KKwkgICAgfQorCSAgaWYgKHJlbW92ZSkKKwkgICAgYnJlYWs7CisJICBlbHNlCisJICAg IHsKKwkgICAgICAvKiBDcmVhdGUgYSBwcml2YXRlIGNsYXVzZSBmb3IgdGhlIGFsbG9jYXRv ciB2YXJpYWJsZSwgcGxhY2VkCisJCSBwcmlvciB0byBjdXJyZW50IHVzZXNfYWxsb2NhdG9y cyBjbGF1c2UuICAqLworCSAgICAgIHRyZWUgbmMgPSBidWlsZF9vbXBfY2xhdXNlIChPTVBf Q0xBVVNFX0xPQ0FUSU9OIChjKSwKKwkJCQkJICBPTVBfQ0xBVVNFX1BSSVZBVEUpOworCSAg ICAgIE9NUF9DTEFVU0VfREVDTCAobmMpID0gT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNf QUxMT0NBVE9SIChjKTsKKwkgICAgICBPTVBfQ0xBVVNFX0NIQUlOIChuYykgPSBjOworCSAg ICAgICpwYyA9IG5jOworCisJICAgICAgcGMgPSAmT01QX0NMQVVTRV9DSEFJTiAoYyk7CisJ ICAgICAgY29udGludWU7CisJICAgIH0KKwogCWNhc2UgT01QX0NMQVVTRV9ERVBFTkQ6CiAJ ICB0ID0gT01QX0NMQVVTRV9ERUNMIChjKTsKIAkgIGlmICh0ID09IE5VTExfVFJFRSkKZGlm ZiAtLWdpdCBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYyBiL2djYy9mb3J0cmFu L2R1bXAtcGFyc2UtdHJlZS5jYwppbmRleCA0ZTg5ODZiZDU5OS4uM2YxMzk2NTQ0Y2EgMTAw NjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYworKysgYi9nY2MvZm9y dHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKQEAgLTE0MjQsNiArMTQyNCwyMCBAQCBzaG93X29t cF9uYW1lbGlzdCAoaW50IGxpc3RfdHlwZSwgZ2ZjX29tcF9uYW1lbGlzdCAqbikKIAkgIGNh c2UgT01QX0xJTkVBUl9VVkFMOiBmcHV0cyAoInV2YWwoIiwgZHVtcGZpbGUpOyBicmVhazsK IAkgIGRlZmF1bHQ6IGJyZWFrOwogCSAgfQorICAgICAgZWxzZSBpZiAobGlzdF90eXBlID09 IE9NUF9MSVNUX1VTRVNfQUxMT0NBVE9SUykKKwl7CisJICBzaG93X3N5bWJvbCAobi0+c3lt KTsKKwkgIGZwdXRzICgiKG1lbXNwYWNlOiIsIGR1bXBmaWxlKTsKKwkgIGlmIChuLT5tZW1z cGFjZV9zeW0pCisJICAgIHNob3dfc3ltYm9sIChuLT50cmFpdHNfc3ltKTsKKwkgIGZwdXRz ICgiLHRyYWl0czoiLCBkdW1wZmlsZSk7CisJICBpZiAobi0+bWVtc3BhY2Vfc3ltKQorCSAg ICBzaG93X3N5bWJvbCAobi0+dHJhaXRzX3N5bSk7CisJICBmcHV0YyAoJyknLCBkdW1wZmls ZSk7CisJICBpZiAobi0+bmV4dCkKKwkgICAgZnB1dGMgKCcsJywgZHVtcGZpbGUpOworCSAg Y29udGludWU7CisJfQogICAgICAgZnByaW50ZiAoZHVtcGZpbGUsICIlcyIsIG4tPnN5bSA/ IG4tPnN5bS0+bmFtZSA6ICJvbXBfYWxsX21lbW9yeSIpOwogICAgICAgaWYgKGxpc3RfdHlw ZSA9PSBPTVBfTElTVF9MSU5FQVIgJiYgbi0+dS5saW5lYXJfb3AgIT0gT01QX0xJTkVBUl9E RUZBVUxUKQogCWZwdXRjICgnKScsIGR1bXBmaWxlKTsKQEAgLTE2OTAsNiArMTcwNCw3IEBA IHNob3dfb21wX2NsYXVzZXMgKGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMpCiAJICBj YXNlIE9NUF9MSVNUX0FMTE9DQVRFOiB0eXBlID0gIkFMTE9DQVRFIjsgYnJlYWs7CiAJICBj YXNlIE9NUF9MSVNUX1NDQU5fSU46IHR5cGUgPSAiSU5DTFVTSVZFIjsgYnJlYWs7CiAJICBj YXNlIE9NUF9MSVNUX1NDQU5fRVg6IHR5cGUgPSAiRVhDTFVTSVZFIjsgYnJlYWs7CisJICBj YXNlIE9NUF9MSVNUX1VTRVNfQUxMT0NBVE9SUzogdHlwZSA9ICJVU0VTX0FMTE9DQVRPUlMi OyBicmVhazsKIAkgIGRlZmF1bHQ6CiAJICAgIGdjY191bnJlYWNoYWJsZSAoKTsKIAkgIH0K ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2dmb3J0cmFuLmggYi9nY2MvZm9ydHJhbi9nZm9y dHJhbi5oCmluZGV4IDVkOTcwYmMxZGYwLi5iMDJjYmY4NzA0OCAxMDA2NDQKLS0tIGEvZ2Nj L2ZvcnRyYW4vZ2ZvcnRyYW4uaAorKysgYi9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCkBAIC0x MzU0LDYgKzEzNTQsOCBAQCB0eXBlZGVmIHN0cnVjdCBnZmNfb21wX25hbWVsaXN0CiAgICAg ICBzdHJ1Y3QgZ2ZjX29tcF9uYW1lbGlzdF91ZHIgKnVkcjsKICAgICAgIGdmY19uYW1lc3Bh Y2UgKm5zOwogICAgIH0gdTI7CisgIHN0cnVjdCBnZmNfc3ltYm9sICptZW1zcGFjZV9zeW07 CisgIHN0cnVjdCBnZmNfc3ltYm9sICp0cmFpdHNfc3ltOwogICBzdHJ1Y3QgZ2ZjX29tcF9u YW1lbGlzdCAqbmV4dDsKICAgbG9jdXMgd2hlcmU7CiB9CkBAIC0xMzk1LDYgKzEzOTcsNyBA QCBlbnVtCiAgIE9NUF9MSVNUX05PTlRFTVBPUkFMLAogICBPTVBfTElTVF9BTExPQ0FURSwK ICAgT01QX0xJU1RfSEFTX0RFVklDRV9BRERSLAorICBPTVBfTElTVF9VU0VTX0FMTE9DQVRP UlMsCiAgIE9NUF9MSVNUX05VTSAvKiBNdXN0IGJlIHRoZSBsYXN0LiAgKi8KIH07CiAKZGlm ZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5jYyBiL2djYy9mb3J0cmFuL29wZW5tcC5j YwppbmRleCA2M2ZkNGRkMjc2Ny4uZGY0ZTVkMDU4OGMgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0 cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKQEAgLTk4Niw2ICs5 ODYsNyBAQCBlbnVtIG9tcF9tYXNrMgogICBPTVBfQ0xBVVNFX0FUVEFDSCwKICAgT01QX0NM QVVTRV9OT0hPU1QsCiAgIE9NUF9DTEFVU0VfSEFTX0RFVklDRV9BRERSLCAgLyogT3Blbk1Q IDUuMSAgKi8KKyAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlMsICAvKiBPcGVuTVAgNS4y ICAqLwogICAvKiBUaGlzIG11c3QgY29tZSBsYXN0LiAgKi8KICAgT01QX01BU0syX0xBU1QK IH07CkBAIC0xNDAyLDYgKzE0MDMsNTAwIEBAIGdmY19tYXRjaF9vbXBfY2xhdXNlX3JlZHVj dGlvbiAoY2hhciBwYywgZ2ZjX29tcF9jbGF1c2VzICpjLCBib29sIG9wZW5hY2MsCiAgIHJl dHVybiBNQVRDSF9ZRVM7CiB9CiAKKy8qIE9wZW5NUCA1LjA6CisgICB1c2VzX2FsbG9jYXRv cnMgKCBhbGxvY2F0b3ItbGlzdCApCisKKyAgIGFsbG9jYXRvci1saXN0OgorICAgYWxsb2Nh dG9yCisgICBhbGxvY2F0b3IgLCBhbGxvY2F0b3ItbGlzdAorICAgYWxsb2NhdG9yICggdHJh aXRzLWFycmF5ICkKKyAgIGFsbG9jYXRvciAoIHRyYWl0cy1hcnJheSApICwgYWxsb2NhdG9y LWxpc3QKKworICAgT3Blbk1QIDUuMjoKKworICAgdXNlc19hbGxvY2F0b3JzICggbW9kaWZp ZXIgOiBhbGxvY2F0b3ItbGlzdCApCisgICB1c2VzX2FsbG9jYXRvcnMgKCBtb2RpZmllciAs IG1vZGlmaWVyIDogYWxsb2NhdG9yLWxpc3QgKQorCisgICBtb2RpZmllcjoKKyAgIHRyYWl0 cyAoIHRyYWl0cy1hcnJheSApCisgICBtZW1zcGFjZSAoIG1lbS1zcGFjZS1oYW5kbGUgKSAg Ki8KKworc3RhdGljIG1hdGNoCitnZmNfbWF0Y2hfb21wX2NsYXVzZV91c2VzX2FsbG9jYXRv cnMgKGdmY19vbXBfY2xhdXNlcyAqYykKK3sKKyAgY2hhciBidWZmZXJbR0ZDX01BWF9TWU1C T0xfTEVOICsgMV07CisgIGdmY19zeW1ib2wgKnN5bTsKKyAgZ2ZjX3N5bWJvbCAqbWVtc3Bh Y2Vfc3ltPSBOVUxMOworICBnZmNfc3ltYm9sICp0cmFpdHNfc3ltPSBOVUxMOworICBsb2N1 cyB0cmFpdHNfc3ltX2xvYzsKKyAgbWF0Y2ggbSwgcmV0ID0gTUFUQ0hfRVJST1I7CisKKyAg aWYgKGdmY19tYXRjaCAoInVzZXNfYWxsb2NhdG9ycyAoICIpICE9IE1BVENIX1lFUykKKyAg ICByZXR1cm4gTUFUQ0hfTk87CisKKyAgc3RydWN0IGl0ZW1fdG9rCisgIHsKKyAgICBsb2N1 cyBsb2M7CisgICAgY2hhciAqc3RyOworICAgIGl0ZW1fdG9rICh2b2lkKSA6IHN0ciAoTlVM TCkge30KKyAgICB+aXRlbV90b2sgKHZvaWQpIHsgaWYgKHN0cikgZnJlZSAoc3RyKTsgfQor ICB9OworICBzdHJ1Y3QgaXRlbSB7IGl0ZW1fdG9rIG5hbWUsIGFyZzsgfTsKKyAgYXV0b192 ZWM8aXRlbT4gKm1vZGlmaWVycyA9IE5VTEwsICphbGxvY2F0b3JzID0gTlVMTDsKKyAgYXV0 b192ZWM8aXRlbT4gKmN1cl9saXN0ID0gbmV3IGF1dG9fdmVjPGl0ZW0+ICg0KTsKKworICBn ZmNfc3ltYm9sICphbGxvY2F0b3JfaGFuZGxlX2tpbmQ7CisKKyAgaWYgKGdmY19maW5kX3N5 bWJvbCAoIm9tcF9hbGxvY2F0b3JfaGFuZGxlX2tpbmQiLCBOVUxMLCAxLCAmc3ltKQorICAg ICAgfHwgc3ltID09IE5VTEwKKyAgICAgIHx8IHN5bS0+YXR0ci5kaW1lbnNpb24KKyAgICAg IHx8IHN5bS0+dmFsdWUgPT0gTlVMTAorICAgICAgfHwgc3ltLT52YWx1ZS0+ZXhwcl90eXBl ICE9IEVYUFJfQ09OU1RBTlQKKyAgICAgIHx8IHN5bS0+dmFsdWUtPnRzLnR5cGUgIT0gQlRf SU5URUdFUikKKyAgICB7CisgICAgICBnZmNfZXJyb3IgKCJPcGVuTVAgJTxvbXBfYWxsb2Nh dG9yX2hhbmRsZV9raW5kJT4gY29uc3RhbnQgbm90IGZvdW5kIGJ5ICIKKwkJICIlPHVzZXNf YWxsb2NhdG9ycyU+IGNsYXVzZSBhdCAlQyIpOworICAgICAgZ290byBlcnJvcjsKKyAgICB9 CisgIGFsbG9jYXRvcl9oYW5kbGVfa2luZCA9IHN5bTsKKworICB3aGlsZSAodHJ1ZSkKKyAg ICB7CisgICAgICBpdGVtIGl0OworCisgICAgICBtID0gZ2ZjX21hdGNoX25hbWUgKGJ1ZmZl cik7CisgICAgICBpZiAobSA9PSBNQVRDSF9ZRVMpCisJeworCSAgaXQubmFtZS5zdHIgPSB4 c3RyZHVwIChidWZmZXIpOworCSAgaXQubmFtZS5sb2MgPSBnZmNfY3VycmVudF9sb2N1czsK Kwl9CisgICAgICBlbHNlCisJeworCSAgZ2ZjX2Vycm9yICgiRXhwZWN0ZWQgaWRlbnRpZmll ciBhdCAlQyIpOworCSAgZ290byBlcnJvcjsKKwl9CisKKyAgICAgIGlmIChnZmNfbWF0Y2hf Y2hhciAoJygnKSA9PSBNQVRDSF9ZRVMpCisJeworCSAgaWYgKG1vZGlmaWVycykKKwkgICAg eworCSAgICAgIGdmY19lcnJvciAoIk1vZGlmaWVycyBjYW5ub3QgYmUgdXNlZCB3aXRoIChk ZXByZWNhdGVkKSB0cmFpdHMgIgorCQkJICJhcnJheSBsaXN0IHN5bnRheCBhdCAlQyIpOwor CSAgICAgIGdvdG8gZXJyb3I7CisJICAgIH0KKwkgIG0gPSBnZmNfbWF0Y2hfbmFtZSAoYnVm ZmVyKTsKKwkgIGlmIChtID09IE1BVENIX1lFUykKKwkgICAgeworCSAgICAgIGl0LmFyZy5z dHIgPSB4c3RyZHVwIChidWZmZXIpOworCSAgICAgIGl0LmFyZy5sb2MgPSBnZmNfY3VycmVu dF9sb2N1czsKKwkgICAgfQorCSAgZWxzZQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgi RXhwZWN0ZWQgaWRlbnRpZmllciBhdCAlQyIpOworCSAgICAgIGdvdG8gZXJyb3I7CisJICAg IH0KKwkgIGlmIChnZmNfbWF0Y2hfY2hhciAoJyknKSAhPSBNQVRDSF9ZRVMpCisJICAgIHsK KwkgICAgICBnZmNfZXJyb3IgKCJFeHBlY3RlZCAlPCklPiBhdCAlQyIpOworCSAgICAgIGdv dG8gZXJyb3I7CisJICAgIH0KKwl9CisKKyAgICAgIGN1cl9saXN0LT5zYWZlX3B1c2ggKGl0 KTsKKyAgICAgIGl0Lm5hbWUuc3RyID0gTlVMTDsKKyAgICAgIGl0LmFyZy5zdHIgPSBOVUxM OworCisgICAgICBpZiAoZ2ZjX21hdGNoICgiICwgIikgPT0gTUFUQ0hfWUVTKQorCWNvbnRp bnVlOworICAgICAgZWxzZSBpZiAoZ2ZjX21hdGNoICgiIDogIikgPT0gTUFUQ0hfWUVTKQor CXsKKwkgIGlmIChtb2RpZmllcnMpCisJICAgIHsKKwkgICAgICBnZmNfZXJyb3IgKCJleHBl Y3RlZCAlPCklPiBhdCAlQyIpOworCSAgICAgIGdvdG8gZXJyb3I7CisJICAgIH0KKwkgIGVs c2UKKwkgICAgeworCSAgICAgIG1vZGlmaWVycyA9IGN1cl9saXN0OworCSAgICAgIGN1cl9s aXN0ID0gbmV3IGF1dG9fdmVjPGl0ZW0+ICg0KTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2Ug aWYgKGdmY19tYXRjaF9jaGFyICgnKScpID09IE1BVENIX1lFUykKKwl7CisJICBnY2NfYXNz ZXJ0IChhbGxvY2F0b3JzID09IE5VTEwpOworCSAgYWxsb2NhdG9ycyA9IGN1cl9saXN0Owor CSAgY3VyX2xpc3QgPSBOVUxMOworCSAgYnJlYWs7CisJfQorICAgICAgZWxzZQorCXsKKwkg IGdmY19lcnJvciAoImV4cGVjdGVkICU8KSU+IGF0ICVDIik7CisJICBnb3RvIGVycm9yOwor CX0KKyAgICB9CisKKyAgaWYgKG1vZGlmaWVycykKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw OyBpIDwgbW9kaWZpZXJzLT5sZW5ndGggKCk7IGkrKykKKyAgICAgIHsKKwlpdGVtJiBpdCA9 ICgqbW9kaWZpZXJzKVtpXTsKKwljb25zdCBjaGFyICpwID0gaXQubmFtZS5zdHI7CisJaW50 IHN0cmNtcF90cmFpdHMgPSAxLCBzdHJjbXBfbWVtc3BhY2UgPSAxOworCWdmY19zeW1ib2wg KnN5bTsKKworCWlmICgoc3RyY21wX3RyYWl0cyA9IHN0cmNtcCAoInRyYWl0cyIsIHApKSA9 PSAwCisJICAgIHx8IChzdHJjbXBfbWVtc3BhY2UgPSBzdHJjbXAgKCJtZW1zcGFjZSIsIHAp KSA9PSAwKQorCSAgeworCSAgICBpZiAoKHN0cmNtcF90cmFpdHMgPT0gMCAmJiB0cmFpdHNf c3ltICE9IE5VTEwpCisJCXx8IChzdHJjbXBfbWVtc3BhY2UgPT0gMCAmJiBtZW1zcGFjZV9z eW0gIT0gTlVMTCkpCisJICAgICAgeworCQlnZmNfZXJyb3IgKCJkdXBsaWNhdGUgJXFzIG1v ZGlmaWVyIGF0ICVMIiwgcCwgJml0Lm5hbWUubG9jKTsKKwkJZ290byBlcnJvcjsKKwkgICAg ICB9CisJICAgIGlmIChnZmNfZmluZF9zeW1ib2wgKGl0LmFyZy5zdHIsIE5VTEwsIDEsICZz eW0pIHx8IHN5bSA9PSBOVUxMKQorCSAgICAgIHsKKwkJZ2ZjX2Vycm9yICgiU3ltYm9sICVx cyBhdCAlTCBpcyBhbWJpZ3VvdXMiLAorCQkJICAgaXQuYXJnLnN0ciwgJml0LmFyZy5sb2Mp OworCQlnb3RvIGVycm9yOworCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoc3RyY21wX21lbXNw YWNlID09IDApCisJICAgICAgeworCQltZW1zcGFjZV9zeW0gPSBzeW07CisKKwkJLyogV2Ug aGF2ZSBhIG1lbXNwYWNlIHNwZWNpZmllZCwgbm93IGNoZWNrIGlmIGl0IGlzIHZhbGlkLgor CQkgICBTdGFydCB3aXRoIGZpbmRpbmcgaWYgd2UgaGF2ZSB0aGUgc3RhbmRhcmRzIHNwZWNp ZmllZAorCQkgICAnb21wX21lbXNwYWNlX2hhbmRsZV9raW5kJyBhdmFpbGFibGUuICAqLwor CQlpZiAoZ2ZjX2ZpbmRfc3ltYm9sICgib21wX21lbXNwYWNlX2hhbmRsZV9raW5kIiwgTlVM TCwgMSwgJnN5bSkKKwkJICAgIHx8IHN5bSA9PSBOVUxMCisJCSAgICB8fCBzeW0tPmF0dHIu ZGltZW5zaW9uCisJCSAgICB8fCBzeW0tPnZhbHVlID09IE5VTEwKKwkJICAgIHx8IHN5bS0+ dmFsdWUtPmV4cHJfdHlwZSAhPSBFWFBSX0NPTlNUQU5UCisJCSAgICB8fCBzeW0tPnZhbHVl LT50cy50eXBlICE9IEJUX0lOVEVHRVIpCisJCSAgeworCQkgICAgZ2ZjX2Vycm9yICgiT3Bl bk1QICU8b21wX21lbXNwYWNlX2hhbmRsZV9raW5kJT4gY29uc3RhbnQgIgorCQkJICAgICAg ICJub3QgZm91bmQgYnkgJTx1c2VzX2FsbG9jYXRvcnMlPiBjbGF1c2UgYXQgJUwiLAorCQkJ ICAgICAgICZpdC5hcmcubG9jKTsKKwkJICAgIGdvdG8gZXJyb3I7CisJCSAgfQorCisJCWdm Y19zeW1ib2wgKm1lbXNwYWNlX2hhbmRsZV9raW5kID0gc3ltOworCisJCWlmIChtZW1zcGFj ZV9zeW0tPnRzLnR5cGUgIT0gQlRfSU5URUdFUgorCQkgICAgfHwgbWVtc3BhY2Vfc3ltLT5h dHRyLmZsYXZvciAhPSBGTF9QQVJBTUVURVIKKwkJICAgIHx8IG1wel9jbXBfc2kgKG1lbXNw YWNlX2hhbmRsZV9raW5kLT52YWx1ZS0+dmFsdWUuaW50ZWdlciwKKwkJCQkgICBtZW1zcGFj ZV9zeW0tPnRzLmtpbmQpICE9IDAKKwkJICAgIC8qIENoZWNrIGlmIGlkZW50aWZpZXIgaXMg b2YgJ29tcF8uLi5fbWVtX3NwYWNlJyBmb3JtYXQuICAqLworCQkgICAgfHwgIXN0YXJ0c3dp dGggKG1lbXNwYWNlX3N5bS0+bmFtZSwgIm9tcF8iKQorCQkgICAgfHwgIWVuZHN3aXRoICht ZW1zcGFjZV9zeW0tPm5hbWUsICJfbWVtX3NwYWNlIikpCisJCSAgeworCQkgICAgZ2ZjX2Vy cm9yICgiJTwlcyU+IGF0ICVMIGlzIG5vdCBhIHByZS1kZWZpbmVkIG1lbW9yeSBzcGFjZSAi CisJCQkgICAgICAgIm5hbWUiLCBtZW1zcGFjZV9zeW0tPm5hbWUsICZpdC5hcmcubG9jKTsK KwkJICAgIGdvdG8gZXJyb3I7CisJCSAgfQorCSAgICAgIH0KKwkgICAgZWxzZSBpZiAoc3Ry Y21wX3RyYWl0cyA9PSAwKQorCSAgICAgIHsKKwkJdHJhaXRzX3N5bSA9IHN5bTsKKwkJdHJh aXRzX3N5bV9sb2MgPSBpdC5hcmcubG9jOworCSAgICAgIH0KKwkgICAgZWxzZQorCSAgICAg IGdjY191bnJlYWNoYWJsZSAoKTsKKwkgIH0KKwllbHNlCisJICB7CisJICAgIGdmY19lcnJv ciAoInVua25vd24gbW9kaWZpZXIgJXFzIGF0ICVMIiwgcCwgJml0Lm5hbWUubG9jKTsKKwkg ICAgZ290byBlcnJvcjsKKwkgIH0KKyAgICAgIH0KKworICBpZiAoYWxsb2NhdG9ycykKKyAg ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYWxsb2NhdG9ycy0+bGVuZ3RoICgpOyBpKysp CisgICAgICB7CisJaXRlbSYgaXQgPSAoKmFsbG9jYXRvcnMpW2ldOworCisJZ2ZjX3N5bWJv bCAqYWxsb2NhdG9yX3N5bTsKKworCWlmIChnZmNfZmluZF9zeW1ib2wgKGl0Lm5hbWUuc3Ry LCBOVUxMLCAxLCAmYWxsb2NhdG9yX3N5bSkgIT0gMAorCSAgICB8fCBhbGxvY2F0b3Jfc3lt ID09IE5VTEwpCisJICB7CisJICAgIGdmY19lcnJvciAoIlN5bWJvbCAlcXMgYXQgJUwgaXMg YW1iaWd1b3VzIiwgaXQubmFtZS5zdHIsICZpdC5uYW1lLmxvYyk7CisJICAgIGdvdG8gZXJy b3I7CisJICB9CisKKwlnZmNfc3ltYm9sICpjdXJyX3RyYWl0c19zeW07CisJbG9jdXMgY3Vy cl90cmFpdHNfc3ltX2xvYzsKKworCWlmIChpdC5hcmcuc3RyKQorCSAgeworCSAgICBpZiAo Z2ZjX2ZpbmRfc3ltYm9sIChpdC5hcmcuc3RyLCBOVUxMLCAxLCAmY3Vycl90cmFpdHNfc3lt KQorCQl8fCBjdXJyX3RyYWl0c19zeW0gPT0gTlVMTCkKKwkgICAgICB7CisJCWdmY19lcnJv ciAoIlN5bWJvbCAlcXMgYXQgJUwgaXMgYW1iaWd1b3VzIiwKKwkJCSAgIGl0LmFyZy5zdHIs ICZpdC5hcmcubG9jKTsKKwkJZ290byBlcnJvcjsKKwkgICAgICB9CisJICAgIGN1cnJfdHJh aXRzX3N5bV9sb2MgPSBpdC5hcmcubG9jOworCSAgfQorCWVsc2UKKwkgIHsKKwkgICAgY3Vy cl90cmFpdHNfc3ltID0gdHJhaXRzX3N5bTsKKwkgICAgY3Vycl90cmFpdHNfc3ltX2xvYyA9 IHRyYWl0c19zeW1fbG9jOworCSAgfQorCisJaWYgKGN1cnJfdHJhaXRzX3N5bSkKKwkgIHsK KwkgICAgaWYgKGN1cnJfdHJhaXRzX3N5bS0+dHMudHlwZSAhPSBCVF9ERVJJVkVECisJCXx8 IHN0cmNtcCAoY3Vycl90cmFpdHNfc3ltLT50cy51LmRlcml2ZWQtPm5hbWUsCisJCQkgICAi b21wX2FsbG9jdHJhaXQiKSAhPSAwCisJCXx8IGN1cnJfdHJhaXRzX3N5bS0+YXR0ci5mbGF2 b3IgIT0gRkxfUEFSQU1FVEVSCisJCXx8IGN1cnJfdHJhaXRzX3N5bS0+YXMtPnJhbmsgIT0g MSkKKwkgICAgICB7CisJCWdmY19lcnJvciAoIiU8JXMlPiBhdCAlTCBtdXN0IGJlIG9mIGNv bnN0YW50ICIKKwkJCSAgICIlPHR5cGUob21wX2FsbG9jdHJhaXQpJT4gYXJyYXkgdHlwZSBh bmQgaGF2ZSBhICIKKwkJCSAgICJjb25zdGFudCBpbml0aWFsaXplciIsIGN1cnJfdHJhaXRz X3N5bS0+bmFtZSwKKwkJCSAgICZjdXJyX3RyYWl0c19zeW1fbG9jKTsKKwkJZ290byBlcnJv cjsKKwkgICAgICB9CisJICAgIGdmY19zZXRfc3ltX3JlZmVyZW5jZWQgKGN1cnJfdHJhaXRz X3N5bSk7CisJICB9CisKKwlpZiAoYWxsb2NhdG9yX3N5bS0+dHMudHlwZSAhPSBCVF9JTlRF R0VSCisJICAgIHx8IG1wel9jbXBfc2kgKGFsbG9jYXRvcl9oYW5kbGVfa2luZC0+dmFsdWUt PnZhbHVlLmludGVnZXIsCisJCQkgICBhbGxvY2F0b3Jfc3ltLT50cy5raW5kKSAhPSAwKQor CSAgeworCSAgICBnZmNfZXJyb3IgKCIlPCVzJT4gYXQgJUMgbXVzdCBiZSBpbnRlZ2VyIG9m ICU8JXMlPiBraW5kIiwKKwkJICAgICAgIGFsbG9jYXRvcl9zeW0tPm5hbWUsIGFsbG9jYXRv cl9oYW5kbGVfa2luZC0+bmFtZSk7CisJICAgIGdvdG8gZXJyb3I7CisJICB9CisKKwlpZiAo YWxsb2NhdG9yX3N5bS0+YXR0ci5mbGF2b3IgPT0gRkxfUEFSQU1FVEVSKQorCSAgeworCSAg ICAvKiBDaGVjayBpZiBpZGVudGlmaWVyIGlzIGEgJ29tcF8uLi5fbWVtX2FsbG9jJyBwcmUt ZGVmaW5lZAorCSAgICAgICBhbGxvY2F0b3IuICAqLworCSAgICBpZiAoIXN0YXJ0c3dpdGgg KGFsbG9jYXRvcl9zeW0tPm5hbWUsICJvbXBfIikKKwkJfHwgIWVuZHN3aXRoIChhbGxvY2F0 b3Jfc3ltLT5uYW1lLCAiX21lbV9hbGxvYyIpKQorCSAgICAgIHsKKwkJZ2ZjX2Vycm9yICgi JTwlcyU+IGF0ICVDIGlzIG5vdCBhIHByZS1kZWZpbmVkIG1lbW9yeSBhbGxvY2F0b3IiLAor CQkJICAgYWxsb2NhdG9yX3N5bS0+bmFtZSk7CisJCWdvdG8gZXJyb3I7CisJICAgICAgfQor CisJICAgIC8qIEN1cnJlbnRseSBmb3IgcHJlLWRlZmluZWQgYWxsb2NhdG9ycyBpbiBsaWJn b21wLCB3ZSBkbyBub3QKKwkgICAgICAgcmVxdWlyZSBhZGRpdGlvbmFsIGluaXQvZmluaSBp bnNpZGUgdGFyZ2V0IHJlZ2lvbnMsCisJICAgICAgIHNvIGRvIG5vdGhpbmcgaGVyZSB0byBk aXNjYXJkIHN1Y2ggY2xhdXNlcy4gICovCisJICB9CisJZWxzZQorCSAgeworCSAgICBnZmNf c2V0X3N5bV9yZWZlcmVuY2VkIChhbGxvY2F0b3Jfc3ltKTsKKworCSAgICBnZmNfb21wX25h bWVsaXN0ICpuID0gZ2ZjX2dldF9vbXBfbmFtZWxpc3QgKCk7CisJICAgIG4tPnN5bSA9IGFs bG9jYXRvcl9zeW07CisJICAgIG4tPm1lbXNwYWNlX3N5bSA9IG1lbXNwYWNlX3N5bTsKKwkg ICAgbi0+dHJhaXRzX3N5bSA9IGN1cnJfdHJhaXRzX3N5bTsKKwkgICAgbi0+d2hlcmUgPSBp dC5uYW1lLmxvYzsKKworCSAgICBuLT5uZXh0ID0gYy0+bGlzdHNbT01QX0xJU1RfVVNFU19B TExPQ0FUT1JTXTsKKwkgICAgYy0+bGlzdHNbT01QX0xJU1RfVVNFU19BTExPQ0FUT1JTXSA9 IG47CisJICB9CisgICAgICB9CisKKyAgcmV0ID0gTUFUQ0hfWUVTOworCisgZW5kOgorICBp ZiAoY3VyX2xpc3QpCisgICAgZGVsZXRlIGN1cl9saXN0OworICBpZiAobW9kaWZpZXJzKQor ICAgIGRlbGV0ZSBtb2RpZmllcnM7CisgIGlmIChhbGxvY2F0b3JzKQorICAgIGRlbGV0ZSBh bGxvY2F0b3JzOworICByZXR1cm4gcmV0OworCisgZXJyb3I6CisgIHJldCA9IE1BVENIX0VS Uk9SOworICBnZmNfZXJyb3JfY2hlY2sgKCk7CisgIGdvdG8gZW5kOworCisjaWYgMAorICBk bworICAgIHsKKyAgICAgIGlmICgrK2kgPiAyKQorCXsKKwkgIGdmY19lcnJvciAoIk9ubHkg dHdvIG1vZGlmaWVycyBhcmUgYWxsb3dlZCBvbiAlPHVzZXNfYWxsb2NhdG9ycyU+ICIKKwkJ ICAgICAiY2xhdXNlIGF0ICVDIik7CisJICBnb3RvIGVycm9yOworCX0KKworICAgICAgaWYg KGdmY19tYXRjaCAoIm1lbXNwYWNlICggIikgPT0gTUFUQ0hfWUVTKQorCXsKKwkgIGlmICht ZW1zcGFjZV9zZWVuKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgiTXVsdGlwbGUgbWVt c3BhY2UgbW9kaWZpZXJzIGF0ICVDIik7CisJICAgICAgZ290byBlcnJvcjsKKwkgICAgfQor CSAgbWVtc3BhY2Vfc2VlbiA9IHRydWU7CisJICBtID0gZ2ZjX21hdGNoX3N5bWJvbCAoJnN5 bSwgMSk7CisJICBpZiAobSA9PSBNQVRDSF9ZRVMpCisJICAgIG1lbXNwYWNlX3N5bSA9IHN5 bTsKKwkgIGVsc2UKKwkgICAgZ290byBlcnJvcjsKKwkgIGlmIChnZmNfbWF0Y2hfY2hhciAo JyknKSAhPSBNQVRDSF9ZRVMpCisJICAgIGdvdG8gZXJyb3I7CisJfQorICAgICAgZWxzZSBp ZiAoZ2ZjX21hdGNoICgidHJhaXRzICggIikgPT0gTUFUQ0hfWUVTKQorCXsKKwkgIGlmICh0 cmFpdHNfc2VlbikKKwkgICAgeworCSAgICAgIGdmY19lcnJvciAoIk11bHRpcGxlIHRyYWl0 cyBtb2RpZmllcnMgYXQgJUMiKTsKKwkgICAgICBnb3RvIGVycm9yOworCSAgICB9CisJICB0 cmFpdHNfc2VlbiA9IHRydWU7CisJICBtID0gZ2ZjX21hdGNoX3N5bWJvbCAoJnN5bSwgMSk7 CisJICBpZiAobSA9PSBNQVRDSF9ZRVMpCisJICAgIHRyYWl0c19zeW0gPSBzeW07CisJICBl bHNlCisJICAgIGdvdG8gZXJyb3I7CisJICBpZiAoZ2ZjX21hdGNoX2NoYXIgKCcpJykgIT0g TUFUQ0hfWUVTKQorCSAgICBnb3RvIGVycm9yOworCX0KKyAgICAgIGVsc2UKKwlicmVhazsK KyAgICB9CisgIHdoaWxlIChnZmNfbWF0Y2ggKCIgLCAiKSA9PSBNQVRDSF9ZRVMpOworCisg IGlmICgobWVtc3BhY2Vfc2VlbiB8fCB0cmFpdHNfc2VlbikKKyAgICAgICYmIGdmY19tYXRj aCAoIiA6ICIpICE9IE1BVENIX1lFUykKKyAgICBnb3RvIGVycm9yOworCisgIHdoaWxlICh0 cnVlKQorICAgIHsKKyAgICAgIG0gPSBnZmNfbWF0Y2hfc3ltYm9sICgmc3ltLCAxKTsKKyAg ICAgIGlmIChtICE9IE1BVENIX1lFUykKKwl7CisJICBnZmNfZXJyb3IgKCJFeHBlY3RlZCBu YW1lIG9mIGFsbG9jYXRvciBhdCAlQyIpOworCSAgZ290byBlcnJvcjsKKwl9CisgICAgICBn ZmNfc3ltYm9sICphbGxvY2F0b3Jfc3ltID0gc3ltOworCisgICAgICBpZiAoZ2ZjX21hdGNo X2NoYXIgKCcoJykgPT0gTUFUQ0hfWUVTKQorCXsKKwkgIGlmIChtZW1zcGFjZV9zZWVuIHx8 IHRyYWl0c19zZWVuKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgiTW9kaWZpZXJzIGNh bm5vdCBiZSB1c2VkIHdpdGggKGRlcHJlY2F0ZWQpIHRyYWl0cyAiCisJCQkgImFycmF5IGxp c3Qgc3ludGF4IGF0ICVDIik7CisJICAgICAgZ290byBlcnJvcjsKKwkgICAgfQorCSAgbSA9 IGdmY19tYXRjaF9zeW1ib2wgKCZzeW0sIDEpOworCSAgaWYgKG0gPT0gTUFUQ0hfWUVTKQor CSAgICB0cmFpdHNfc3ltID0gc3ltOworCSAgZWxzZQorCSAgICBnb3RvIGVycm9yOworCSAg aWYgKGdmY19tYXRjaF9jaGFyICgnKScpICE9IE1BVENIX1lFUykKKwkgICAgZ290byBlcnJv cjsKKwl9CisKKyAgICAgIGlmICh0cmFpdHNfc3ltKQorCXsKKwkgIGlmICh0cmFpdHNfc3lt LT50cy50eXBlICE9IEJUX0RFUklWRUQKKwkgICAgICB8fCBzdHJjbXAgKHRyYWl0c19zeW0t PnRzLnUuZGVyaXZlZC0+bmFtZSwKKwkJCSAib21wX2FsbG9jdHJhaXQiKSAhPSAwCisJICAg ICAgfHwgdHJhaXRzX3N5bS0+YXR0ci5mbGF2b3IgIT0gRkxfUEFSQU1FVEVSCisJICAgICAg fHwgdHJhaXRzX3N5bS0+YXMtPnJhbmsgIT0gMSkKKwkgICAgeworCSAgICAgIGdmY19lcnJv ciAoIiU8JXMlPiBhdCAlQyBtdXN0IGJlIG9mIGNvbnN0YW50ICIKKwkJCSAiJTx0eXBlKG9t cF9hbGxvY3RyYWl0KSU+IGFycmF5IHR5cGUgYW5kIGhhdmUgYSAiCisJCQkgImNvbnN0YW50 IGluaXRpYWxpemVyIiwgdHJhaXRzX3N5bS0+bmFtZSk7CisJICAgICAgZ290byBlcnJvcjsK KwkgICAgfQorCSAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodHJhaXRzX3N5bSk7CisJfQor CisgICAgICBpZiAobWVtc3BhY2Vfc3ltKQorCXsKKwkgIGlmIChnZmNfZmluZF9zeW1ib2wg KCJvbXBfbWVtc3BhY2VfaGFuZGxlX2tpbmQiLCBOVUxMLCAxLCAmc3ltKQorCSAgICAgIHx8 IHN5bSA9PSBOVUxMCisJICAgICAgfHwgc3ltLT5hdHRyLmRpbWVuc2lvbgorCSAgICAgIHx8 IHN5bS0+dmFsdWUgPT0gTlVMTAorCSAgICAgIHx8IHN5bS0+dmFsdWUtPmV4cHJfdHlwZSAh PSBFWFBSX0NPTlNUQU5UCisJICAgICAgfHwgc3ltLT52YWx1ZS0+dHMudHlwZSAhPSBCVF9J TlRFR0VSKQorCSAgICB7CisJICAgICAgZ2ZjX2Vycm9yICgiT3Blbk1QICU8b21wX21lbXNw YWNlX2hhbmRsZV9raW5kJT4gY29uc3RhbnQgbm90ICIKKwkJCSAiZm91bmQgYnkgJTx1c2Vz X2FsbG9jYXRvcnMlPiBjbGF1c2UgYXQgJUMiKTsKKwkgICAgICBnb3RvIGVycm9yOworCSAg ICB9CisJICBnZmNfc3ltYm9sICptZW1zcGFjZV9oYW5kbGVfa2luZCA9IHN5bTsKKworCSAg aWYgKG1lbXNwYWNlX3N5bS0+dHMudHlwZSAhPSBCVF9JTlRFR0VSCisJICAgICAgfHwgbWVt c3BhY2Vfc3ltLT5hdHRyLmZsYXZvciAhPSBGTF9QQVJBTUVURVIKKwkgICAgICB8fCBtcHpf Y21wX3NpIChtZW1zcGFjZV9oYW5kbGVfa2luZC0+dmFsdWUtPnZhbHVlLmludGVnZXIsCisJ CQkgICAgIG1lbXNwYWNlX3N5bS0+dHMua2luZCkgIT0gMAorCSAgICAgIC8qIENoZWNrIGlm IGlkZW50aWZpZXIgaXMgb2YgJ29tcF8uLi5fbWVtX3NwYWNlJyBmb3JtYXQuICAqLworCSAg ICAgIHx8ICFzdGFydHN3aXRoIChtZW1zcGFjZV9zeW0tPm5hbWUsICJvbXBfIikKKwkgICAg ICB8fCAhZW5kc3dpdGggKG1lbXNwYWNlX3N5bS0+bmFtZSwgIl9tZW1fc3BhY2UiKSkKKwkg ICAgeworCSAgICAgIGdmY19lcnJvciAoIiU8JXMlPiBhdCAlQyBpcyBub3QgYSBwcmUtZGVm aW5lZCBtZW1vcnkgc3BhY2UgbmFtZSIsCisJCQkgbWVtc3BhY2Vfc3ltLT5uYW1lKTsKKwkg ICAgICBnb3RvIGVycm9yOworCSAgICB9CisJfQorCisgICAgICBpZiAoYWxsb2NhdG9yX3N5 bS0+dHMudHlwZSAhPSBCVF9JTlRFR0VSCisJICB8fCBtcHpfY21wX3NpIChhbGxvY2F0b3Jf aGFuZGxlX2tpbmQtPnZhbHVlLT52YWx1ZS5pbnRlZ2VyLAorCQkJIGFsbG9jYXRvcl9zeW0t PnRzLmtpbmQpICE9IDApCisJeworCSAgZ2ZjX2Vycm9yICgiJTwlcyU+IGF0ICVDIG11c3Qg YmUgaW50ZWdlciBvZiAlPCVzJT4ga2luZCIsCisJCSAgICAgYWxsb2NhdG9yX3N5bS0+bmFt ZSwgYWxsb2NhdG9yX2hhbmRsZV9raW5kLT5uYW1lKTsKKwkgIGdvdG8gZXJyb3I7CisJfQor CisgICAgICBpZiAoYWxsb2NhdG9yX3N5bS0+YXR0ci5mbGF2b3IgPT0gRkxfUEFSQU1FVEVS KQorCXsKKwkgIC8qIENoZWNrIGlmIGlkZW50aWZpZXIgaXMgYSAnb21wXy4uLl9tZW1fYWxs b2MnIHByZS1kZWZpbmVkCisJICAgICBhbGxvY2F0b3IuICAqLworCSAgaWYgKCFzdGFydHN3 aXRoIChhbGxvY2F0b3Jfc3ltLT5uYW1lLCAib21wXyIpCisJICAgICAgfHwgIWVuZHN3aXRo IChhbGxvY2F0b3Jfc3ltLT5uYW1lLCAiX21lbV9hbGxvYyIpKQorCSAgICB7CisJICAgICAg Z2ZjX2Vycm9yICgiJTwlcyU+IGF0ICVDIGlzIG5vdCBhIHByZS1kZWZpbmVkIG1lbW9yeSBh bGxvY2F0b3IiLAorCQkJIGFsbG9jYXRvcl9zeW0tPm5hbWUpOworCSAgICAgIGdvdG8gZXJy b3I7CisJICAgIH0KKworCSAgLyogQ3VycmVudGx5IGZvciBwcmUtZGVmaW5lZCBhbGxvY2F0 b3JzIGluIGxpYmdvbXAsIHdlIGRvIG5vdAorCSAgICAgcmVxdWlyZSBhZGRpdGlvbmFsIGlu aXQvZmluaSBpbnNpZGUgdGFyZ2V0IHJlZ2lvbnMsCisJICAgICBzbyBkbyBub3RoaW5nIGhl cmUgdG8gZGlzY2FyZCBzdWNoIGNsYXVzZXMuICAqLworCX0KKyAgICAgIGVsc2UKKwl7CisJ ICBnZmNfc2V0X3N5bV9yZWZlcmVuY2VkIChhbGxvY2F0b3Jfc3ltKTsKKworCSAgZ2ZjX29t cF9uYW1lbGlzdCAqbiA9IGdmY19nZXRfb21wX25hbWVsaXN0ICgpOworCSAgbi0+c3ltID0g YWxsb2NhdG9yX3N5bTsKKwkgIG4tPm1lbXNwYWNlX3N5bSA9IG1lbXNwYWNlX3N5bTsKKwkg IG4tPnRyYWl0c19zeW0gPSB0cmFpdHNfc3ltOworCSAgbi0+d2hlcmUgPSBnZmNfY3VycmVu dF9sb2N1czsKKworCSAgbi0+bmV4dCA9IGMtPmxpc3RzW09NUF9MSVNUX1VTRVNfQUxMT0NB VE9SU107CisJICBjLT5saXN0c1tPTVBfTElTVF9VU0VTX0FMTE9DQVRPUlNdID0gbjsKKwl9 CisKKyAgICAgIGlmIChnZmNfbWF0Y2ggKCIgLCAiKSA9PSBNQVRDSF9ZRVMpCisJeworCSAg aWYgKG1lbXNwYWNlX3NlZW4gfHwgdHJhaXRzX3NlZW4pCisJICAgIHsKKwkgICAgICBnZmNf ZXJyb3IgKCJXaGVuIHVzaW5nIG1vZGlmaWVycywgb25seSBhIHNpbmdsZSBhbGxvY2F0b3Ig Y2FuIGJlICIKKwkJCSAic3BlY2lmaWVkIGluIGVhY2ggJTx1c2VzX2FsbG9jYXRvcnMlPiBj bGF1c2UgYXQgJUMiKTsKKwkgICAgICBnb3RvIGVycm9yOworCSAgICB9CisJfQorICAgICAg ZWxzZQorCWJyZWFrOworCisgICAgICBtZW1zcGFjZV9zeW0gPSBOVUxMOworICAgICAgdHJh aXRzX3N5bSA9IE5VTEw7CisgICAgfQorCisgIGlmIChnZmNfbWF0Y2hfY2hhciAoJyknKSAh PSBNQVRDSF9ZRVMpCisgICAgZ290byBlcnJvcjsKKyNlbmRpZgorfQogCiAvKiBNYXRjaCB3 aXRoIGR1cGxpY2F0ZSBjaGVjay4gTWF0Y2hlcyAnbmFtZScuIElmIGV4cHIgIT0gTlVMTCwg aXQKICAgIHRoZW4gbWF0Y2hlcyAnKGV4cHIpJywgb3RoZXJ3aXNlLCBpZiBvcGVuX3BhcmVu cyBpcyB0cnVlLApAQCAtMjk3MSw2ICszNDY2LDkgQEAgZ2ZjX21hdGNoX29tcF9jbGF1c2Vz IChnZmNfb21wX2NsYXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkJICAgKCJ1 c2VfZGV2aWNlX2FkZHIgKCIsICZjLT5saXN0c1tPTVBfTElTVF9VU0VfREVWSUNFX0FERFJd LAogCQkgICAgZmFsc2UsIE5VTEwsIE5VTEwsIHRydWUpID09IE1BVENIX1lFUykKIAkgICAg Y29udGludWU7CisJICBpZiAoKG1hc2sgJiBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUykK KwkgICAgICAmJiBnZmNfbWF0Y2hfb21wX2NsYXVzZV91c2VzX2FsbG9jYXRvcnMgKGMpID09 IE1BVENIX1lFUykKKwkgICAgY29udGludWU7CiAJICBicmVhazsKIAljYXNlICd2JzoKIAkg IC8qIFZFQ1RPUl9MRU5HVEggbXVzdCBiZSBtYXRjaGVkIGJlZm9yZSBWRUNUT1IsIGJlY2F1 c2UgdGhlIGxhdHRlcgpAQCAtMzY5Nyw3ICs0MTk1LDcgQEAgY2xlYW51cDoKICAgIHwgT01Q X0NMQVVTRV9GSVJTVFBSSVZBVEUgfCBPTVBfQ0xBVVNFX0RFRkFVTFRNQVAJCQlcCiAgICB8 IE9NUF9DTEFVU0VfSVNfREVWSUNFX1BUUiB8IE9NUF9DTEFVU0VfSU5fUkVEVUNUSU9OCQkJ XAogICAgfCBPTVBfQ0xBVVNFX1RIUkVBRF9MSU1JVCB8IE9NUF9DTEFVU0VfQUxMT0NBVEUJ CQlcCi0gICB8IE9NUF9DTEFVU0VfSEFTX0RFVklDRV9BRERSKQorICAgfCBPTVBfQ0xBVVNF X0hBU19ERVZJQ0VfQUREUiB8IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKQogI2RlZmlu ZSBPTVBfVEFSR0VUX0RBVEFfQ0xBVVNFUyBcCiAgIChvbXBfbWFzayAoT01QX0NMQVVTRV9E RVZJQ0UpIHwgT01QX0NMQVVTRV9NQVAgfCBPTVBfQ0xBVVNFX0lGCVwKICAgIHwgT01QX0NM QVVTRV9VU0VfREVWSUNFX1BUUiB8IE9NUF9DTEFVU0VfVVNFX0RFVklDRV9BRERSKQpAQCAt NjMzMCw3ICs2ODI4LDcgQEAgcmVzb2x2ZV9vbXBfY2xhdXNlcyAoZ2ZjX2NvZGUgKmNvZGUs IGdmY19vbXBfY2xhdXNlcyAqb21wX2NsYXVzZXMsCiAJIklOX1JFRFVDVElPTiIsICJUQVNL X1JFRFVDVElPTiIsCiAJIkRFVklDRV9SRVNJREVOVCIsICJMSU5LIiwgIlVTRV9ERVZJQ0Ui LAogCSJDQUNIRSIsICJJU19ERVZJQ0VfUFRSIiwgIlVTRV9ERVZJQ0VfUFRSIiwgIlVTRV9E RVZJQ0VfQUREUiIsCi0JIk5PTlRFTVBPUkFMIiwgIkFMTE9DQVRFIiwgIkhBU19ERVZJQ0Vf QUREUiIgfTsKKwkiTk9OVEVNUE9SQUwiLCAiQUxMT0NBVEUiLCAiSEFTX0RFVklDRV9BRERS IiwgIlVTRVNfQUxMT0NBVE9SUyIgfTsKICAgU1RBVElDX0FTU0VSVCAoQVJSQVlfU0laRSAo Y2xhdXNlX25hbWVzKSA9PSBPTVBfTElTVF9OVU0pOwogCiAgIGlmIChvbXBfY2xhdXNlcyA9 PSBOVUxMKQpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtYXJyYXkuY2MgYi9nY2Mv Zm9ydHJhbi90cmFucy1hcnJheS5jYwppbmRleCAwNTEzNDk1MmRiNC4uNDdjNjM2NDIwZDMg MTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLWFycmF5LmNjCisrKyBiL2djYy9mb3J0 cmFuL3RyYW5zLWFycmF5LmNjCkBAIC02MzQzLDEwICs2MzQzLDYgQEAgZ2ZjX2NvbnZfYXJy YXlfaW5pdGlhbGl6ZXIgKHRyZWUgdHlwZSwgZ2ZjX2V4cHIgKiBleHByKQogCQkJICAgICAg ICZleHByLT53aGVyZSwgZmxhZ19tYXhfYXJyYXlfY29uc3RydWN0b3IpOwogCSAgICAgIHJl dHVybiBOVUxMX1RSRUU7CiAJICAgIH0KLSAgICAgICAgICBpZiAobXB6X2NtcF9zaSAoYy0+ b2Zmc2V0LCAwKSAhPSAwKQotICAgICAgICAgICAgaW5kZXggPSBnZmNfY29udl9tcHpfdG9f dHJlZSAoYy0+b2Zmc2V0LCBnZmNfaW5kZXhfaW50ZWdlcl9raW5kKTsKLSAgICAgICAgICBl bHNlCi0gICAgICAgICAgICBpbmRleCA9IE5VTExfVFJFRTsKIAogCSAgaWYgKG1wel9jbXBf c2kgKGMtPnJlcGVhdCwgMSkgPiAwKQogCSAgICB7CkBAIC02MzcxLDYgKzYzNjcsMTEgQEAg Z2ZjX2NvbnZfYXJyYXlfaW5pdGlhbGl6ZXIgKHRyZWUgdHlwZSwgZ2ZjX2V4cHIgKiBleHBy KQogCSAgZWxzZQogCSAgICByYW5nZSA9IE5VTEw7CiAKKwkgIGlmIChyYW5nZSA9PSBOVUxM IHx8IG1wel9jbXBfc2kgKGMtPm9mZnNldCwgMCkgIT0gMCkKKwkgICAgaW5kZXggPSBnZmNf Y29udl9tcHpfdG9fdHJlZSAoYy0+b2Zmc2V0LCBnZmNfaW5kZXhfaW50ZWdlcl9raW5kKTsK KwkgIGVsc2UKKwkgICAgaW5kZXggPSBOVUxMX1RSRUU7CisKICAgICAgICAgICBnZmNfaW5p dF9zZSAoJnNlLCBOVUxMKTsKIAkgIHN3aXRjaCAoYy0+ZXhwci0+ZXhwcl90eXBlKQogCSAg ICB7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9y dHJhbi90cmFucy1vcGVubXAuY2MKaW5kZXggYmZkMjRmOTY0ZWEuLjFkNTAxZDZmNzIwIDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtb3Blbm1wLmNjCkBAIC0yNzE5LDkgKzI3MTksMTYgQEAgZ2ZjX3RyYW5zX29t cF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNl cywKIAkJICAgIGlmIChuLT5leHByKQogCQkgICAgICB7CiAJCQl0cmVlIGFsbG9jYXRvcl87 Ci0JCQlnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKLQkJCWdmY19jb252X2V4cHIgKCZzZSwg bi0+ZXhwcik7Ci0JCQlhbGxvY2F0b3JfID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2UuZXhwciwg YmxvY2spOworCQkJaWYgKG4tPmV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFKQor CQkJICBhbGxvY2F0b3JfCisJCQkgICAgPSBnZmNfdHJhbnNfb21wX3ZhcmlhYmxlIChuLT5l eHByLT5zeW10cmVlLT5uLnN5bSwKKwkJCQkJCSAgICAgIGZhbHNlKTsKKwkJCWVsc2UKKwkJ CSAgeworCQkJICAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOworCQkJICAgIGdmY19jb252 X2V4cHIgKCZzZSwgbi0+ZXhwcik7CisJCQkgICAgYWxsb2NhdG9yXyA9IGdmY19ldmFsdWF0 ZV9ub3cgKHNlLmV4cHIsIGJsb2NrKTsKKwkJCSAgfQogCQkJT01QX0NMQVVTRV9BTExPQ0FU RV9BTExPQ0FUT1IgKG5vZGUpID0gYWxsb2NhdG9yXzsKIAkJICAgICAgfQogCQkgICAgb21w X2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZSwgb21wX2NsYXVzZXMpOwpA QCAtMzcwMSw2ICszNzA4LDI5IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2Nr X3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJICAgICAgb21wX2NsYXVz ZXMgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZSwgb21wX2NsYXVzZXMpOwogCSAgICB9 CiAJICBicmVhazsKKwljYXNlIE9NUF9MSVNUX1VTRVNfQUxMT0NBVE9SUzoKKwkgIGZvciAo OyBuICE9IE5VTEw7IG4gPSBuLT5uZXh0KQorCSAgICB7CisJICAgICAgdHJlZSBhbGxvY2F0 b3IgPSBnZmNfdHJhbnNfb21wX3ZhcmlhYmxlIChuLT5zeW0sIGZhbHNlKTsKKwkgICAgICB0 cmVlIG1lbXNwYWNlID0gKG4tPm1lbXNwYWNlX3N5bQorCQkJICAgICAgID8gZ2ZjX2NvbnZf Y29uc3RhbnRfdG9fdHJlZSAobi0+bWVtc3BhY2Vfc3ltLT52YWx1ZSkKKwkJCSAgICAgICA6 IE5VTExfVFJFRSk7CisJICAgICAgdHJlZSB0cmFpdHMgPSAobi0+dHJhaXRzX3N5bQorCQkJ ICAgICA/IGdmY190cmFuc19vbXBfdmFyaWFibGUgKG4tPnRyYWl0c19zeW0sIGZhbHNlKQor CQkJICAgICA6IE5VTExfVFJFRSk7CisKKwkgICAgICB0cmVlIG5jID0gYnVpbGRfb21wX2Ns YXVzZSAoaW5wdXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfUFJJVkFURSk7CisJICAgICAgT01Q X0NMQVVTRV9ERUNMIChuYykgPSBhbGxvY2F0b3I7CisJICAgICAgb21wX2NsYXVzZXMgPSBn ZmNfdHJhbnNfYWRkX2NsYXVzZSAobmMsIG9tcF9jbGF1c2VzKTsKKworCSAgICAgIG5jID0g YnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCisJCQkJICAgICBPTVBfQ0xBVVNF X1VTRVNfQUxMT0NBVE9SUyk7CisJICAgICAgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNf QUxMT0NBVE9SIChuYykgPSBhbGxvY2F0b3I7CisJICAgICAgT01QX0NMQVVTRV9VU0VTX0FM TE9DQVRPUlNfTUVNU1BBQ0UgKG5jKSA9IG1lbXNwYWNlOworCSAgICAgIE9NUF9DTEFVU0Vf VVNFU19BTExPQ0FUT1JTX1RSQUlUUyAobmMpID0gdHJhaXRzOworCSAgICAgIG9tcF9jbGF1 c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5jLCBvbXBfY2xhdXNlcyk7CisJICAgIH0K KwkgIGJyZWFrOwogCWRlZmF1bHQ6CiAJICBicmVhazsKIAl9CkBAIC02MTI2LDYgKzYxNTYs OCBAQCBnZmNfc3BsaXRfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLAogCSAgICA9IGNv ZGUtPmV4dC5vbXBfY2xhdXNlcy0+ZGV2aWNlOwogCSAgY2xhdXNlc2FbR0ZDX09NUF9TUExJ VF9UQVJHRVRdLnRocmVhZF9saW1pdAogCSAgICA9IGNvZGUtPmV4dC5vbXBfY2xhdXNlcy0+ dGhyZWFkX2xpbWl0OworCSAgY2xhdXNlc2FbR0ZDX09NUF9TUExJVF9UQVJHRVRdLmxpc3Rz W09NUF9MSVNUX1VTRVNfQUxMT0NBVE9SU10KKwkgICAgPSBjb2RlLT5leHQub21wX2NsYXVz ZXMtPmxpc3RzW09NUF9MSVNUX1VTRVNfQUxMT0NBVE9SU107CiAJICBmb3IgKGludCBpID0g MDsgaSA8IE9NUF9ERUZBVUxUTUFQX0NBVF9OVU07IGkrKykKIAkgICAgY2xhdXNlc2FbR0ZD X09NUF9TUExJVF9UQVJHRVRdLmRlZmF1bHRtYXBbaV0KIAkgICAgICA9IGNvZGUtPmV4dC5v bXBfY2xhdXNlcy0+ZGVmYXVsdG1hcFtpXTsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL3R5 cGVzLmRlZiBiL2djYy9mb3J0cmFuL3R5cGVzLmRlZgppbmRleCBjZDc5YWQ0NTE2Ny4uMThh MWJlYzg3MjQgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3R5cGVzLmRlZgorKysgYi9nY2Mv Zm9ydHJhbi90eXBlcy5kZWYKQEAgLTgxLDYgKzgxLDcgQEAgREVGX0ZVTkNUSU9OX1RZUEVf MCAoQlRfRk5fVUlOVCwgQlRfVUlOVCkKIERFRl9GVU5DVElPTl9UWVBFXzAgKEJUX0ZOX1ZP SUQsIEJUX1ZPSUQpCiAKIERFRl9GVU5DVElPTl9UWVBFXzEgKEJUX0ZOX1ZPSURfUFRSLCBC VF9WT0lELCBCVF9QVFIpCitERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9WT0lEX1BUUk1P REUsIEJUX1ZPSUQsIEJUX1BUUk1PREUpCiBERUZfRlVOQ1RJT05fVFlQRV8xIChCVF9GTl9W T0lEX1BUUlBUUiwgQlRfVk9JRCwgQlRfUFRSX1BUUikKIERFRl9GVU5DVElPTl9UWVBFXzEg KEJUX0ZOX1ZPSURfVlBUUiwgQlRfVk9JRCwgQlRfVk9MQVRJTEVfUFRSKQogREVGX0ZVTkNU SU9OX1RZUEVfMSAoQlRfRk5fSU5UX0lOVCwgQlRfSU5ULCBCVF9JTlQpCkBAIC0xNTQsNiAr MTU1LDggQEAgREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5fVk9JRF9TSVpFX1NJWkVfUFRS LCBCVF9WT0lELCBCVF9TSVpFLCBCVF9TSVpFLAogREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRf Rk5fVUlOVF9VSU5UX1BUUl9QVFIsIEJUX1VJTlQsIEJUX1VJTlQsIEJUX1BUUiwgQlRfUFRS KQogREVGX0ZVTkNUSU9OX1RZUEVfMyAoQlRfRk5fUFRSX1NJWkVfU0laRV9QVFJNT0RFLAog CQkgICAgIEJUX1BUUiwgQlRfU0laRSwgQlRfU0laRSwgQlRfUFRSTU9ERSkKK0RFRl9GVU5D VElPTl9UWVBFXzMgKEJUX0ZOX1BUUk1PREVfUFRSTU9ERV9JTlRfUFRSLCBCVF9QVFJNT0RF LCBCVF9QVFJNT0RFLAorCQkgICAgIEJUX0lOVCwgQlRfUFRSKQogCiBERUZfRlVOQ1RJT05f VFlQRV80IChCVF9GTl9WT0lEX09NUEZOX1BUUl9VSU5UX1VJTlQsCiAgICAgICAgICAgICAg ICAgICAgICBCVF9WT0lELCBCVF9QVFJfRk5fVk9JRF9QVFIsIEJUX1BUUiwgQlRfVUlOVCwg QlRfVUlOVCkKZGlmZiAtLWdpdCBhL2djYy9naW1wbGlmeS5jYyBiL2djYy9naW1wbGlmeS5j YwppbmRleCBjZDE3OTY2NDNkNy4uMTZhNDk1YmE1ODYgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGlmeS5jYworKysgYi9nY2MvZ2ltcGxpZnkuY2MKQEAgLTEwODMxLDYgKzEwODMxLDcgQEAg Z2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpw cmVfcCwKIAljYXNlIE9NUF9DTEFVU0VfQklORDoKIAljYXNlIE9NUF9DTEFVU0VfSUZfUFJF U0VOVDoKIAljYXNlIE9NUF9DTEFVU0VfRklOQUxJWkU6CisJY2FzZSBPTVBfQ0xBVVNFX1VT RVNfQUxMT0NBVE9SUzoKIAkgIGJyZWFrOwogCiAJY2FzZSBPTVBfQ0xBVVNFX09SREVSOgpA QCAtMTA5NDUsNiArMTA5NDYsNDkgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJl ZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkgICAgICByZW1vdmUgPSB0cnVlOwog CSAgICAgIGJyZWFrOwogCSAgICB9CisJICBpZiAoKG9tcF9yZXF1aXJlc19tYXNrICYgT01Q X1JFUVVJUkVTX0RZTkFNSUNfQUxMT0NBVE9SUykgPT0gMAorCSAgICAgICYmIE9NUF9DTEFV U0VfQUxMT0NBVEVfQUxMT0NBVE9SIChjKQorCSAgICAgICYmIFRSRUVfQ09ERSAoT01QX0NM QVVTRV9BTExPQ0FURV9BTExPQ0FUT1IgKGMpKSAhPSBJTlRFR0VSX0NTVCkKKwkgICAgewor CSAgICAgIHRyZWUgYWxsb2NhdG9yID0gT01QX0NMQVVTRV9BTExPQ0FURV9BTExPQ0FUT1Ig KGMpOworCSAgICAgIHRyZWUgY2xhdXNlcyA9IE5VTExfVFJFRTsKKworCSAgICAgIC8qIEdl dCBjbGF1c2UgbGlzdCBvZiB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgdGFyZ2V0IGNvbnN0cnVj dC4gICovCisJICAgICAgaWYgKGN0eC0+Y29kZSA9PSBPTVBfVEFSR0VUKQorCQljbGF1c2Vz ID0gKm9yaWdfbGlzdF9wOworCSAgICAgIGVsc2UKKwkJeworCQkgIHN0cnVjdCBnaW1wbGlm eV9vbXBfY3R4ICp0Y3R4ID0gY3R4LT5vdXRlcl9jb250ZXh0OworCQkgIHdoaWxlICh0Y3R4 ICYmIHRjdHgtPmNvZGUgIT0gT01QX1RBUkdFVCkKKwkJICAgIHRjdHggPSB0Y3R4LT5vdXRl cl9jb250ZXh0OworCQkgIGlmICh0Y3R4KQorCQkgICAgY2xhdXNlcyA9IHRjdHgtPmNsYXVz ZXM7CisJCX0KKworCSAgICAgIGlmIChjbGF1c2VzKQorCQl7CisJCSAgdHJlZSB1YzsKKwkJ ICBpZiAoVFJFRV9DT0RFIChhbGxvY2F0b3IpID09IE1FTV9SRUYKKwkJICAgICAgfHwgVFJF RV9DT0RFIChhbGxvY2F0b3IpID09IElORElSRUNUX1JFRikKKwkJICAgIGFsbG9jYXRvciA9 IFRSRUVfT1BFUkFORCAoYWxsb2NhdG9yLCAwKTsKKwkJICBmb3IgKHVjID0gY2xhdXNlczsg dWM7IHVjID0gT01QX0NMQVVTRV9DSEFJTiAodWMpKQorCQkgICAgaWYgKE9NUF9DTEFVU0Vf Q09ERSAodWMpID09IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTKQorCQkgICAgICB7CisJ CQl0cmVlIHVjX2FsbG9jYXRvcgorCQkJICA9IE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JT X0FMTE9DQVRPUiAodWMpOworCQkJaWYgKG9wZXJhbmRfZXF1YWxfcCAoYWxsb2NhdG9yLCB1 Y19hbGxvY2F0b3IpKQorCQkJICBicmVhazsKKwkJICAgICAgfQorCQkgIGlmICh1YyA9PSBO VUxMX1RSRUUpCisJCSAgICB7CisJCSAgICAgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FU SU9OIChjKSwgImFsbG9jYXRvciAlPCVxRSU+ICIKKwkJCQkicmVxdWlyZXMgJTx1c2VzX2Fs bG9jYXRvcnMoJUUpJT4gY2xhdXNlIGluICIKKwkJCQkidGFyZ2V0IHJlZ2lvbiIsIGFsbG9j YXRvciwgYWxsb2NhdG9yKTsKKwkJICAgICAgcmVtb3ZlID0gdHJ1ZTsKKwkJICAgICAgYnJl YWs7CisJCSAgICB9CisJCX0KKwkgICAgfQogCSAgaWYgKGdpbXBsaWZ5X2V4cHIgKCZPTVBf Q0xBVVNFX0FMTE9DQVRFX0FMTE9DQVRPUiAoYyksIHByZV9wLCBOVUxMLAogCQkJICAgICBp c19naW1wbGVfdmFsLCBmYl9ydmFsdWUpID09IEdTX0VSUk9SKQogCSAgICB7CkBAIC0xNDI3 MSw2ICsxNDMxNSw3MyBAQCBnaW1wbGlmeV9vbXBfd29ya3NoYXJlICh0cmVlICpleHByX3As IGdpbXBsZV9zZXEgKnByZV9wKQogCSAgYm9keSA9IE5VTEw7CiAJICBnaW1wbGVfc2VxX2Fk ZF9zdG10ICgmYm9keSwgZyk7CiAJfQorICAgICAgZWxzZSBpZiAoKG9ydCAmIE9SVF9UQVJH RVQpICE9IDAgJiYgKG9ydCAmIE9SVF9BQ0MpID09IDApCisJeworCSAgZ2ltcGxlX3NlcSBp bml0X3NlcSA9IE5VTEw7CisJICBnaW1wbGVfc2VxIGZpbmlfc2VxID0gTlVMTDsKKworCSAg dHJlZSBvbXBfaW5pdF9hbGxvY2F0b3JfZm4KKwkgICAgPSBidWlsdGluX2RlY2xfZXhwbGlj aXQgKEJVSUxUX0lOX09NUF9JTklUX0FMTE9DQVRPUik7CisJICB0cmVlIG9tcF9kZXN0cm95 X2FsbG9jYXRvcl9mbgorCSAgICA9IGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5f T01QX0RFU1RST1lfQUxMT0NBVE9SKTsKKworCSAgZm9yICh0cmVlICpjcCA9ICZPTVBfQ0xB VVNFUyAoZXhwcik7ICpjcCAhPSBOVUxMOykKKwkgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAo KmNwKSA9PSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUykKKwkgICAgICB7CisJCXRyZWUg YyA9ICpjcDsKKwkJdHJlZSBhbGxvY2F0b3IgPSBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9S U19BTExPQ0FUT1IgKGMpOworCQl0cmVlIG1lbXNwYWNlID0gT01QX0NMQVVTRV9VU0VTX0FM TE9DQVRPUlNfTUVNU1BBQ0UgKGMpOworCQl0cmVlIHRyYWl0cyA9IE9NUF9DTEFVU0VfVVNF U19BTExPQ0FUT1JTX1RSQUlUUyAoYyk7CisJCXRyZWUgbnRyYWl0cworCQkgID0gKCh0cmFp dHMKKwkJICAgICAgJiYgREVDTF9JTklUSUFMICh0cmFpdHMpCisJCSAgICAgICYmIFRSRUVf Q09ERSAoREVDTF9JTklUSUFMICh0cmFpdHMpKSA9PSBDT05TVFJVQ1RPUikKKwkJICAgICA/ IGJ1aWxkX2ludF9jc3QgKGludGVnZXJfdHlwZV9ub2RlLAorCQkJCSAgICAgIENPTlNUUlVD VE9SX05FTFRTIChERUNMX0lOSVRJQUwgKHRyYWl0cykpKQorCQkgICAgIDogaW50ZWdlcl96 ZXJvX25vZGUpOworCQl0cmVlIHRyYWl0c192YXIKKwkJICA9ICh0cmFpdHMgIT0gTlVMTF9U UkVFCisJCSAgICAgPyBnZXRfaW5pdGlhbGl6ZWRfdG1wX3ZhciAoREVDTF9JTklUSUFMICh0 cmFpdHMpLAorCQkJCQkJJmluaXRfc2VxLCBOVUxMKQorCQkgICAgIDogbnVsbF9wb2ludGVy X25vZGUpOworCisJCXRyZWUgbWVtc3BhY2VfdmFyID0gY3JlYXRlX3RtcF92YXIgKHBvaW50 ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJCQkgICAgIm1lbXNwYWNlX2VudW0iKTsKKwkJaWYg KG1lbXNwYWNlID09IE5VTExfVFJFRSkKKwkJICBtZW1zcGFjZSA9IGJ1aWxkX2ludF9jc3Qg KHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsIDApOworCQllbHNlCisJCSAgbWVtc3BhY2UgPSBm b2xkX2NvbnZlcnQgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCisJCQkJCSAgIG1lbXNwYWNl KTsKKwkJZyA9IGdpbXBsZV9idWlsZF9hc3NpZ24gKG1lbXNwYWNlX3ZhciwgbWVtc3BhY2Up OworCQlnaW1wbGVfc2VxX2FkZF9zdG10ICgmaW5pdF9zZXEsIGcpOworCisJCXRyZWUgaW5p dGNhbGwgPSBidWlsZF9jYWxsX2V4cHJfbG9jIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwK KwkJCQkJCSAgICAgb21wX2luaXRfYWxsb2NhdG9yX2ZuLCAzLAorCQkJCQkJICAgICBtZW1z cGFjZV92YXIsCisJCQkJCQkgICAgIG50cmFpdHMsCisJCQkJCQkgICAgIHRyYWl0c192YXIp OworCQlpbml0Y2FsbCA9IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChhbGxvY2F0b3IpLCBp bml0Y2FsbCk7CisJCWdpbXBsaWZ5X2Fzc2lnbiAoYWxsb2NhdG9yLCBpbml0Y2FsbCwgJmlu aXRfc2VxKTsKKworCQlnID0gZ2ltcGxlX2J1aWxkX2NhbGwgKG9tcF9kZXN0cm95X2FsbG9j YXRvcl9mbiwgMSwgYWxsb2NhdG9yKTsKKwkJZ2ltcGxlX3NlcV9hZGRfc3RtdCAoJmZpbmlf c2VxLCBnKTsKKworCQkvKiBGaW5pc2hlZCBnZW5lcmF0aW5nIHJ1bnRpbWUgY2FsbHMsIHJl bW92ZSBVU0VTX0FMTE9DQVRPUlMKKwkJICAgY2xhdXNlLiAgKi8KKwkJKmNwID0gT01QX0NM QVVTRV9DSEFJTiAoYyk7CisJICAgICAgfQorCSAgICBlbHNlCisJICAgICAgY3AgPSAmT01Q X0NMQVVTRV9DSEFJTiAoKmNwKTsKKworCSAgaWYgKGZpbmlfc2VxKQorCSAgICB7CisJICAg ICAgZ2JpbmQgKmJpbmQgPSBhc19hPGdiaW5kICo+IChnaW1wbGVfc2VxX2ZpcnN0X3N0bXQg KGJvZHkpKTsKKwkgICAgICBnID0gZ2ltcGxlX2J1aWxkX3RyeSAoZ2ltcGxlX2JpbmRfYm9k eSAoYmluZCksCisJCQkJICAgIGZpbmlfc2VxLCBHSU1QTEVfVFJZX0ZJTkFMTFkpOworCSAg ICAgIGdpbXBsZV9zZXFfYWRkX3N0bXQgKCZpbml0X3NlcSwgZyk7CisJICAgICAgZ2ltcGxl X2JpbmRfc2V0X2JvZHkgKGJpbmQsIGluaXRfc2VxKTsKKwkgICAgfQorCX0KICAgICB9CiAg IGVsc2UKICAgICBnaW1wbGlmeV9hbmRfYWRkIChPTVBfQk9EWSAoZXhwciksICZib2R5KTsK ZGlmZiAtLWdpdCBhL2djYy9vbXAtYnVpbHRpbnMuZGVmIGIvZ2NjL29tcC1idWlsdGlucy5k ZWYKaW5kZXggZWU1MjEzZWVkY2YuLmNjZmQ2YTU0MmVjIDEwMDY0NAotLS0gYS9nY2Mvb21w LWJ1aWx0aW5zLmRlZgorKysgYi9nY2Mvb21wLWJ1aWx0aW5zLmRlZgpAQCAtNzYsNiArNzYs MTAgQEAgREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fT01QX0dFVF9URUFNX05VTSwgIm9t cF9nZXRfdGVhbV9udW0iLAogCQkgIEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RIUk9XX0xF QUZfTElTVCkKIERFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX09NUF9HRVRfTlVNX1RFQU1T LCAib21wX2dldF9udW1fdGVhbXMiLAogCQkgIEJUX0ZOX0lOVCwgQVRUUl9DT05TVF9OT1RI Uk9XX0xFQUZfTElTVCkKK0RFRl9HT01QX0JVSUxUSU4gKEJVSUxUX0lOX09NUF9JTklUX0FM TE9DQVRPUiwgIm9tcF9pbml0X2FsbG9jYXRvciIsCisJCSAgQlRfRk5fUFRSTU9ERV9QVFJN T0RFX0lOVF9QVFIsIEFUVFJfTk9USFJPV19MRUFGX0xJU1QpCitERUZfR09NUF9CVUlMVElO IChCVUlMVF9JTl9PTVBfREVTVFJPWV9BTExPQ0FUT1IsICJvbXBfZGVzdHJveV9hbGxvY2F0 b3IiLAorCQkgIEJUX0ZOX1ZPSURfUFRSTU9ERSwgQVRUUl9OT1RIUk9XX0xFQUZfTElTVCkK IAogREVGX0dPTVBfQlVJTFRJTiAoQlVJTFRfSU5fR09NUF9BVE9NSUNfU1RBUlQsICJHT01Q X2F0b21pY19zdGFydCIsCiAJCSAgQlRfRk5fVk9JRCwgQVRUUl9OT1RIUk9XX0xFQUZfTElT VCkKZGlmZiAtLWdpdCBhL2djYy9vbXAtbG93LmNjIGIvZ2NjL29tcC1sb3cuY2MKaW5kZXgg MTZmNTk2NTg3ZTguLmUyNzg0YTI0MjMyIDEwMDY0NAotLS0gYS9nY2Mvb21wLWxvdy5jYwor KysgYi9nY2Mvb21wLWxvdy5jYwpAQCAtNDg0OSw3ICs0ODQ5LDEyIEBAIGxvd2VyX3ByaXZh dGVfYWxsb2NhdGUgKHRyZWUgdmFyLCB0cmVlIG5ld192YXIsIHRyZWUgJmFsbG9jYXRvciwK ICAgICAgIGFsbG9jYXRvciA9IFRSRUVfUFVSUE9TRSAoYWxsb2NhdG9yKTsKICAgICB9CiAg IGlmIChUUkVFX0NPREUgKGFsbG9jYXRvcikgIT0gSU5URUdFUl9DU1QpCi0gICAgYWxsb2Nh dG9yID0gYnVpbGRfb3V0ZXJfdmFyX3JlZiAoYWxsb2NhdG9yLCBjdHgpOworICAgIHsKKyAg ICAgIGlmIChpc190YXNrX2N0eCAoY3R4KSkKKwlhbGxvY2F0b3IgPSBidWlsZF9yZWNlaXZl cl9yZWYgKGFsbG9jYXRvciwgZmFsc2UsIGN0eCk7CisgICAgICBlbHNlCisJYWxsb2NhdG9y ID0gYnVpbGRfb3V0ZXJfdmFyX3JlZiAoYWxsb2NhdG9yLCBjdHgpOworICAgIH0KICAgYWxs b2NhdG9yID0gZm9sZF9jb252ZXJ0IChwb2ludGVyX3NpemVkX2ludF9ub2RlLCBhbGxvY2F0 b3IpOwogICBpZiAoVFJFRV9DT0RFIChhbGxvY2F0b3IpICE9IElOVEVHRVJfQ1NUKQogICAg IHsKQEAgLTU4MzMsNyArNTgzOCw3IEBAIGxvd2VyX3JlY19pbnB1dF9jbGF1c2VzICh0cmVl IGNsYXVzZXMsIGdpbXBsZV9zZXEgKmlsaXN0LCBnaW1wbGVfc2VxICpkbGlzdCwKIAkJCWlm IChUUkVFX0NPREUgKGFsbG9jYXRvcikgPT0gVFJFRV9MSVNUKQogCQkJICBhbGxvY2F0b3Ig PSBUUkVFX1BVUlBPU0UgKGFsbG9jYXRvcik7CiAJCQlpZiAoVFJFRV9DT0RFIChhbGxvY2F0 b3IpICE9IElOVEVHRVJfQ1NUKQotCQkJICBhbGxvY2F0b3IgPSBidWlsZF9vdXRlcl92YXJf cmVmIChhbGxvY2F0b3IsIGN0eCk7CisJCQkgIGFsbG9jYXRvciA9IGJ1aWxkX3JlY2VpdmVy X3JlZiAoYWxsb2NhdG9yLCBmYWxzZSwgY3R4KTsKIAkJCWFsbG9jYXRvciA9IGZvbGRfY29u dmVydCAocG9pbnRlcl9zaXplZF9pbnRfbm9kZSwKIAkJCQkJCSAgYWxsb2NhdG9yKTsKIAkJ CWFsbG9jYXRlX3B0ciA9IHVuc2hhcmVfZXhwciAoeCk7CkBAIC02MTUzLDcgKzYxNTgsNyBA QCBsb3dlcl9yZWNfaW5wdXRfY2xhdXNlcyAodHJlZSBjbGF1c2VzLCBnaW1wbGVfc2VxICpp bGlzdCwgZ2ltcGxlX3NlcSAqZGxpc3QsCiAJCQkgICAgaWYgKFRSRUVfQ09ERSAoYWxsb2Nh dG9yKSA9PSBUUkVFX0xJU1QpCiAJCQkgICAgICBhbGxvY2F0b3IgPSBUUkVFX1BVUlBPU0Ug KGFsbG9jYXRvcik7CiAJCQkgICAgaWYgKFRSRUVfQ09ERSAoYWxsb2NhdG9yKSAhPSBJTlRF R0VSX0NTVCkKLQkJCSAgICAgIGFsbG9jYXRvciA9IGJ1aWxkX291dGVyX3Zhcl9yZWYgKGFs bG9jYXRvciwgY3R4KTsKKwkJCSAgICAgIGFsbG9jYXRvciA9IGJ1aWxkX3JlY2VpdmVyX3Jl ZiAoYWxsb2NhdG9yLCBmYWxzZSwgY3R4KTsKIAkJCSAgICBhbGxvY2F0b3IgPSBmb2xkX2Nv bnZlcnQgKHBvaW50ZXJfc2l6ZWRfaW50X25vZGUsCiAJCQkJCQkgICAgICBhbGxvY2F0b3Ip OwogCQkJICAgIGFsbG9jYXRlX3B0ciA9IHVuc2hhcmVfZXhwciAoeCk7CkBAIC0xMjIyMyw2 ICsxMjIyOCw4IEBAIGNyZWF0ZV90YXNrX2NvcHlmbiAoZ29tcF90YXNrICp0YXNrX3N0bXQs IG9tcF9jb250ZXh0ICpjdHgpCiAJCQlhbGxvY2F0b3IgPSAqdGNjdHguY2IuZGVjbF9tYXAt PmdldCAoYWxsb2NhdG9yKTsKIAkJICAgICAgdHJlZSBhID0gYnVpbGRfc2ltcGxlX21lbV9y ZWZfbG9jIChsb2MsIHNhcmcpOwogCQkgICAgICBhbGxvY2F0b3IgPSBvbXBfYnVpbGRfY29t cG9uZW50X3JlZiAoYSwgYWxsb2NhdG9yKTsKKwkJICAgICAgaWYgKFBPSU5URVJfVFlQRV9Q IChUUkVFX1RZUEUgKGFsbG9jYXRvcikpKQorCQkJYWxsb2NhdG9yID0gYnVpbGRfc2ltcGxl X21lbV9yZWYgKGFsbG9jYXRvcik7CiAJCSAgICB9CiAJCSAgYWxsb2NhdG9yID0gZm9sZF9j b252ZXJ0IChwb2ludGVyX3NpemVkX2ludF9ub2RlLCBhbGxvY2F0b3IpOwogCQkgIHRyZWUg YSA9IGJ1aWx0aW5fZGVjbF9leHBsaWNpdCAoQlVJTFRfSU5fR09NUF9BTExPQyk7CmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2NhdG9y cy0xLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3VzZXNfYWxsb2NhdG9y cy0xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjI5NTQxYWJk NTI1Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29t cC91c2VzX2FsbG9jYXRvcnMtMS5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIHsgZGctZG8gY29t cGlsZSB9ICovCisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyAiLWZkdW1wLXRyZWUtb3Jp Z2luYWwgLWZkdW1wLXRyZWUtZ2ltcGxlIiB9ICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKwor b21wX2FsbG9jdHJhaXRfa2V5X3QgazsKK29tcF9hbGxvY3RyYWl0X3ZhbHVlX3QgdjsKKwor aW50IG1haW4gKHZvaWQpCit7CisgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgZm9vLCBiYXI7 CisgIGNvbnN0IG9tcF9hbGxvY3RyYWl0X3QgZm9vX3RyYWl0c1tdID0geyB7IG9tcF9hdGtf cGlubmVkLCAgICBvbXBfYXR2X3RydWUgfSwKKyAgCQkJCQkgIHsgb21wX2F0a19wYXJ0aXRp b24sIG9tcF9hdHZfbmVhcmVzdCB9IH07CisgICNwcmFnbWEgb21wIHRhcmdldAorICAgIDsK KyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoYmFyKQorICAgIDsKKyAg I3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoZm9vIChmb29fdHJhaXRzKSkK KyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKGZvbyAoZm9v X3RyYWl0cyksIGJhciAoZm9vX3RyYWl0cykpCisgICAgOworICAjcHJhZ21hIG9tcCB0YXJn ZXQgdXNlc19hbGxvY2F0b3JzIChtZW1zcGFjZShvbXBfaGlnaF9id19tZW1fc3BhY2UpIDog Zm9vKQorICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAodHJh aXRzKGZvb190cmFpdHMpIDogYmFyKQorICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHBh cmFsbGVsIHVzZXNfYWxsb2NhdG9ycyAobWVtc3BhY2Uob21wX2hpZ2hfYndfbWVtX3NwYWNl KSwgdHJhaXRzKGZvb190cmFpdHMpIDogYmFyKQorICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFy Z2V0IHBhcmFsbGVsIHVzZXNfYWxsb2NhdG9ycyAodHJhaXRzKGZvb190cmFpdHMpLCBtZW1z cGFjZShvbXBfaGlnaF9id19tZW1fc3BhY2UpIDogYmFyKSB1c2VzX2FsbG9jYXRvcnMoZm9v KQorICB7CisgICAgdm9pZCAqcCA9IG9tcF9hbGxvYyAoKHVuc2lnbmVkIGxvbmcpIDMyLCBi YXIpOworICAgIG9tcF9mcmVlIChwLCBiYXIpOworICB9CisgIHJldHVybiAwOworfQorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IiAib3Jp Z2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEg b21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGJhcjogbWVt c3BhY2VcXChcXCksIHRyYWl0c1xcKFxcKVxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKy8qIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxc KGZvb1xcKSB1c2VzX2FsbG9jYXRvcnNcXChmb286IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNc XChmb29fdHJhaXRzXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwpIHVz ZXNfYWxsb2NhdG9yc1xcKGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKGZvb190cmFp dHNcXClcXCkgcHJpdmF0ZVxcKGZvb1xcKSB1c2VzX2FsbG9jYXRvcnNcXChmb286IG1lbXNw YWNlXFwoXFwpLCB0cmFpdHNcXChmb29fdHJhaXRzXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBw cml2YXRlXFwoZm9vXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGZvbzogbWVtc3BhY2VcXChvbXBf aGlnaF9id19tZW1fc3BhY2VcXCksIHRyYWl0c1xcKFxcKVxcKSIgIm9yaWdpbmFsIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQg cHJpdmF0ZVxcKGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoXFwp LCB0cmFpdHNcXChmb29fdHJhaXRzXFwpXFwpIiAib3JpZ2luYWwiIH0gfSAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwo YmFyXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGJhcjogbWVtc3BhY2VcXChvbXBfaGlnaF9id19t ZW1fc3BhY2VcXCksIHRyYWl0c1xcKGZvb190cmFpdHNcXClcXCkiICJvcmlnaW5hbCIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0 IHByaXZhdGVcXChiYXJcXCkgdXNlc19hbGxvY2F0b3JzXFwoYmFyOiBtZW1zcGFjZVxcKG9t cF9oaWdoX2J3X21lbV9zcGFjZVxcKSwgdHJhaXRzXFwoZm9vX3RyYWl0c1xcKVxcKSBwcml2 YXRlXFwoZm9vXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGZvbzogbWVtc3BhY2VcXChcXCksIHRy YWl0c1xcKFxcKVxcKSIgIm9yaWdpbmFsIiB9IH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJfX2J1aWx0aW5fb21wX2luaXRfYWxsb2NhdG9yIiA5ICJn aW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJf X2J1aWx0aW5fb21wX2Rlc3Ryb3lfYWxsb2NhdG9yIiA5ICJnaW1wbGUiIH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRv cnMtMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRv cnMtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lNTdiMjkw NmM4MwotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dv bXAvdXNlc19hbGxvY2F0b3JzLTIuYwpAQCAtMCwwICsxLDMzIEBACisvKiB7IGRnLWRvIGNv bXBpbGUgfSAqLworCisjaW5jbHVkZSA8b21wLmg+CisKK29tcF9hbGxvY3RyYWl0X2tleV90 IGs7CitvbXBfYWxsb2N0cmFpdF92YWx1ZV90IHY7CisKK2ludCBtYWluICh2b2lkKQorewor ICBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGZvbywgYmFyOworICBjb25zdCBvbXBfYWxsb2N0 cmFpdF90IHRyYWl0c19hcnJheVtdID0geyB7IG9tcF9hdGtfcGlubmVkLCAgICBvbXBfYXR2 X3RydWUgfSwKKwkJCQkJICAgIHsgb21wX2F0a19wYXJ0aXRpb24sIG9tcF9hdHZfbmVhcmVz dCB9IH07CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAoYmF6KSAv KiB7IGRnLWVycm9yICInYmF6JyB1bmRlY2xhcmVkIC5maXJzdCB1c2UgaW4gdGhpcyBmdW5j dGlvbi4iICIiIHsgdGFyZ2V0IGMgfSB9ICovCisgICAgOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLyogeyBkZy1lcnJvciAiJ2JheicgaGFzIG5vdCBiZWVuIGRl Y2xhcmVkIiAiIiB7IHRhcmdldCBjKysgfSAuLTEgfSAqLworICAjcHJhZ21hIG9tcCB0YXJn ZXQgdXNlc19hbGxvY2F0b3JzIChmb28gKHh5eikpIC8qIHsgZGctZXJyb3IgIid4eXonIHVu ZGVjbGFyZWQgLmZpcnN0IHVzZSBpbiB0aGlzIGZ1bmN0aW9uLiIgIiIgeyB0YXJnZXQgYyB9 IH0gKi8KKyAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKiB7IGRnLWVycm9yICIneHl6JyBoYXMgbm90IGJlZW4gZGVjbGFyZWQiICIiIHsgdGFy Z2V0IGMrKyB9IC4tMSB9ICovCisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRv cnMgKGZvbyAodHJhaXRzX2FycmF5KSwgYmF6ICh0cmFpdHNfYXJyYXkpKSAvKiB7IGRnLWVy cm9yICInYmF6JyBoYXMgbm90IGJlZW4gZGVjbGFyZWQiICIiIHsgdGFyZ2V0IGMrKyB9IH0g Ki8KKyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKG1lbXNw YWNlKG9tcF9ub19zdWNoX3NwYWNlKSA6IGZvbykgLyogeyBkZy1lcnJvciAiJ29tcF9ub19z dWNoX3NwYWNlJyB1bmRlY2xhcmVkIC5maXJzdCB1c2UgaW4gdGhpcyBmdW5jdGlvbi4iICIi IHsgdGFyZ2V0IGMgfSB9ICovCisgICAgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogeyBkZy1lcnJvciAi J29tcF9ub19zdWNoX3NwYWNlJyBoYXMgbm90IGJlZW4gZGVjbGFyZWQiICIiIHsgdGFyZ2V0 IGMrKyB9IC4tMSB9ICovCisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMg KG1lbXNwYWNlKDEpIDogZm9vKSAvKiB7IGRnLWVycm9yICJleHBlY3RlZCBpZGVudGlmaWVy IGJlZm9yZSBudW1lcmljIGNvbnN0YW50IiB9ICovCisgICAgOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB7IGRnLWVycm9yICJleHBl Y3RlZCAnXFxcKScgYmVmb3JlICc6JyB0b2tlbiIgIiIgeyB0YXJnZXQgYyB9IC4tMSB9ICov CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKG1lbXNwYWNlKG9tcF9u b19zdWNoX3NwYWNlKSA6IGZvbywgYmFyKSAvKiB7IGRnLWVycm9yICJtZW1zcGFjZSBtb2Rp ZmllciBtdXN0IGJlIGNvbnN0YW50IGVudW0gb2YgJ29tcF9tZW1zcGFjZV9oYW5kbGVfdCcg dHlwZSIgIiIgeyB0YXJnZXQgYyB9IH0gKi8KKyAgICA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8q IHsgZGctZXJyb3IgIidvbXBfbm9fc3VjaF9zcGFjZScgaGFzIG5vdCBiZWVuIGRlY2xhcmVk IiAiIiB7IHRhcmdldCBjKysgfSAuLTEgfSAqLworICAjcHJhZ21hIG9tcCB0YXJnZXQgdXNl c19hbGxvY2F0b3JzICh0cmFpdHMoeHl6KSA6IGJhcikgLyogeyBkZy1lcnJvciAidHJhaXRz IGFycmF5IG11c3QgYmUgb2YgJ2NvbnN0IG9tcF9hbGxvY3RyYWl0X3QgXFxcW1xcXF0nIHR5 cGUiICIiIHsgdGFyZ2V0IGMgfSB9ICovCisgICAgOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB7IGRnLWVycm9yICIneHl6JyBoYXMg bm90IGJlZW4gZGVjbGFyZWQiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9ICovCisgICNwcmFn bWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKG1lbXNwYWNlKG9tcF9oaWdoX2J3X21l bV9zcGFjZSksIHRyYWl0cyh0cmFpdHNfYXJyYXkpLCBtZW1zcGFjZSAob21wX25vX3N1Y2hf c3BhY2UpIDogYmFyKSAvKiB7IGRnLWVycm9yICJkdXBsaWNhdGUgJ21lbXNwYWNlJyBtb2Rp ZmllciIgfSAqLworICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9y cyAodHJhaXR6KHRyYWl0c19hcnJheSksIG1lbXNwYWNlKG9tcF9oaWdoX2J3X21lbV9zcGFj ZSkgOiBiYXIpIC8qIHsgZGctZXJyb3IgInVua25vd24gbW9kaWZpZXIgJ3RyYWl0eiciIH0g Ki8KKyAgICA7CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRvcnMtMy5jIGIvZ2NjL3Rlc3RzdWl0ZS9j LWMrKy1jb21tb24vZ29tcC91c2VzX2FsbG9jYXRvcnMtMy5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44MGIyODQ0NzI5YQotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdXNlc19hbGxvY2F0b3JzLTMuYwpA QCAtMCwwICsxLDMxIEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1hZGRp dGlvbmFsLW9wdGlvbnMgIi1mZHVtcC10cmVlLW9yaWdpbmFsIC1mZHVtcC10cmVlLWdpbXBs ZSIgfSAqLworCisjaW5jbHVkZSA8b21wLmg+CisKK2ludCBtYWluICh2b2lkKQoreworICBv bXBfYWxsb2NhdG9yX2hhbmRsZV90IG1lbXNwYWNlLCB0cmFpdHM7CisgIGNvbnN0IG9tcF9h bGxvY3RyYWl0X3QgbXl0cmFpdHNbXSA9IHsgeyBvbXBfYXRrX3Bpbm5lZCwgICAgb21wX2F0 dl90cnVlIH0sCisJCQkJCXsgb21wX2F0a19wYXJ0aXRpb24sIG9tcF9hdHZfbmVhcmVzdCB9 IH07CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMgKG1lbXNwYWNlKQor ICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAodHJhaXRzKQor ICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyAodHJhaXRzLCBt ZW1zcGFjZSkKKyAgICA7CisgICNwcmFnbWEgb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMg KHRyYWl0cyAobXl0cmFpdHMpKQorICAgIDsKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVzZXNf YWxsb2NhdG9ycyAobWVtc3BhY2UgKG15dHJhaXRzKSwgb21wX2RlZmF1bHRfbWVtX2FsbG9j KQorICAgIDsKKyAgcmV0dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxcKG1lbXNwYWNlXFwpIHVzZXNfYWxs b2NhdG9yc1xcKG1lbXNwYWNlOiBtZW1zcGFjZVxcKFxcKSwgdHJhaXRzXFwoXFwpXFwpIiAi b3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFn bWEgb21wIHRhcmdldCBwcml2YXRlXFwodHJhaXRzXFwpIHVzZXNfYWxsb2NhdG9yc1xcKHRy YWl0czogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKFxcKVxcKSIgIm9yaWdpbmFsIiB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQg cHJpdmF0ZVxcKG1lbXNwYWNlXFwpIHVzZXNfYWxsb2NhdG9yc1xcKG1lbXNwYWNlOiBtZW1z cGFjZVxcKFxcKSwgdHJhaXRzXFwoXFwpXFwpIHByaXZhdGVcXCh0cmFpdHNcXCkgdXNlc19h bGxvY2F0b3JzXFwodHJhaXRzOiBtZW1zcGFjZVxcKFxcKSwgdHJhaXRzXFwoXFwpXFwpIiAi b3JpZ2luYWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFn bWEgb21wIHRhcmdldCBwcml2YXRlXFwodHJhaXRzXFwpIHVzZXNfYWxsb2NhdG9yc1xcKHRy YWl0czogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKG15dHJhaXRzXFwpXFwpIiAib3JpZ2lu YWwiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21w IHRhcmdldCBwcml2YXRlXFwobWVtc3BhY2VcXCkgdXNlc19hbGxvY2F0b3JzXFwobWVtc3Bh Y2U6IG1lbXNwYWNlXFwoXFwpLCB0cmFpdHNcXChteXRyYWl0c1xcKVxcKSIgIm9yaWdpbmFs IiB9IH0gKi8KKworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJfX2J1 aWx0aW5fb21wX2luaXRfYWxsb2NhdG9yIiA2ICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICJfX2J1aWx0aW5fb21wX2Rlc3Ryb3lfYWxs b2NhdG9yIiA2ICJnaW1wbGUiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb21wL2FsbG9jYXRlLTEuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJh bi5kZy9nb21wL2FsbG9jYXRlLTEuZjkwCmluZGV4IDhiYzZiNzY4Nzc4Li5mNTcwNzg5OWVm ZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2FsbG9jYXRl LTEuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9hbGxvY2F0ZS0x LmY5MApAQCAtODAsNyArODAsOCBAQCBzdWJyb3V0aW5lIGZvbyh4LCB5KQogICAKICAgISRv bXAgdGFyZ2V0IHRlYW1zIGRpc3RyaWJ1dGUgcGFyYWxsZWwgZG8gcHJpdmF0ZSAoeCkgZmly c3Rwcml2YXRlICh5KSAmCiAgICEkb21wIGFsbG9jYXRlICgob21wX2RlZmF1bHRfbWVtX2Fs bG9jICsgMCk6eikgYWxsb2NhdGUgJgotICAhJG9tcCAob21wX2RlZmF1bHRfbWVtX2FsbG9j OiB4LCB5KSBhbGxvY2F0ZSAoaDogcikgbGFzdHByaXZhdGUgKHopIHJlZHVjdGlvbigrOnIp CisgICEkb21wIChvbXBfZGVmYXVsdF9tZW1fYWxsb2M6IHgsIHkpIGFsbG9jYXRlIChoOiBy KSBsYXN0cHJpdmF0ZSAoeikgcmVkdWN0aW9uKCs6cikgJgorICAhJG9tcCB1c2VzX2FsbG9j YXRvcnMgKGgpCiAgIGRvIGkgPSAxLCAxMAogICAgIGNhbGwgYmFyICgwLCB4LCB6KTsKICAg ICBjYWxsIGJhcjIgKDEsIHksIHIpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9nb21wL3VzZXNfYWxsb2NhdG9ycy0xLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2Zv cnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjRjYTc2ZTcwMDRjCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3VzZXNfYWxsb2NhdG9ycy0xLmY5MApA QCAtMCwwICsxLDUzIEBACishIHsgZGctZG8gY29tcGlsZSB9CishIHsgZGctYWRkaXRpb25h bC1vcHRpb25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCAtZmR1bXAtdHJlZS1naW1wbGUiIH0K KworcHJvZ3JhbSBtYWluCisgIHVzZSBvbXBfbGliCisgIGltcGxpY2l0IG5vbmUKKyAgaW50 ZWdlciwgYWxsb2NhdGFibGUgOjogYXJyKDopCisgIGludGVnZXIgKG9tcF9hbGxvY2F0b3Jf aGFuZGxlX2tpbmQpIDo6IGJhciwgZm9vCisKKyAgdHlwZSAob21wX2FsbG9jdHJhaXQpLCBw YXJhbWV0ZXIgOjogdHJhaXRzX2FycmF5KCopID0gJgorICAgICAgIFtvbXBfYWxsb2N0cmFp dChvbXBfYXRrX3Bpbm5lZCxvbXBfYXR2X3RydWUpLCYKKyAgICAgICBvbXBfYWxsb2N0cmFp dChvbXBfYXRrX3BhcnRpdGlvbixvbXBfYXR2X25lYXJlc3QpXQorCisgICEkb21wIHRhcmdl dCBhbGxvY2F0ZShiYXIgOiBhcnIpIHVzZXNfYWxsb2NhdG9ycyhiYXIpCisgIGJsb2NrCisg ICAgYWxsb2NhdGUoYXJyKDEwMCkpCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1 c2VzX2FsbG9jYXRvcnMob21wX2RlZmF1bHRfbWVtX2FsbG9jKQorICBibG9jaworICBlbmQg YmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKGJhcih0cmFpdHNfYXJy YXkpLCBmb28gKHRyYWl0c19hcnJheSkpCisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEk b21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnModHJhaXRzKHRyYWl0c19hcnJheSkgOiBiYXIp CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCBwYXJhbGxlbCB1c2Vz X2FsbG9jYXRvcnMobWVtc3BhY2UgKG9tcF9sb3dfbGF0X21lbV9zcGFjZSkgOiBiYXIpCisg IGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCBwYXJhbGxlbCB1c2VzX2Fs bG9jYXRvcnMobWVtc3BhY2UgKG9tcF9oaWdoX2J3X21lbV9zcGFjZSksIHRyYWl0cyh0cmFp dHNfYXJyYXkpIDogYmFyKQorICBibG9jaworICAgIHVzZSBpc29fY19iaW5kaW5nCisgICAg dHlwZShjX3B0cikgOjogcHRyCisgICAgaW50ZWdlcihjX3NpemVfdCkgOjogc3ogPSAzMgor ICAgIHB0ciA9IG9tcF9hbGxvYyAoc3osIGJhcikKKyAgICBjYWxsIG9tcF9mcmVlIChwdHIs IGJhcikKKyAgZW5kIGJsb2NrCisKK2VuZCBwcm9ncmFtIG1haW4KKworISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAgInByYWdtYSBvbXAgdGFyZ2V0IGFsbG9jYXRlXFwoYWxsb2Nh dG9yXFwoYmFyXFwpOmFyclxcKSBwcml2YXRlXFwoYmFyXFwpIHVzZXNfYWxsb2NhdG9yc1xc KGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKFxcKVxcKSIgIm9yaWdpbmFsIiB9IH0K KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCIgIm9y aWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFnbWEgb21w IHRhcmdldCBwcml2YXRlXFwoZm9vXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGZvbzogbWVtc3Bh Y2VcXChcXCksIHRyYWl0c1xcKHRyYWl0c19hcnJheVxcKVxcKSBwcml2YXRlXFwoYmFyXFwp IHVzZXNfYWxsb2NhdG9yc1xcKGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKHRyYWl0 c19hcnJheVxcKVxcKSIgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICJwcmFnbWEgb21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwpIHVzZXNfYWxsb2Nh dG9yc1xcKGJhcjogbWVtc3BhY2VcXChcXCksIHRyYWl0c1xcKHRyYWl0c19hcnJheVxcKVxc KSIgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJwcmFn bWEgb21wIHRhcmdldCBwcml2YXRlXFwoYmFyXFwpIHVzZXNfYWxsb2NhdG9yc1xcKGJhcjog bWVtc3BhY2VcXCguXFwpLCB0cmFpdHNcXChcXClcXCkiICJvcmlnaW5hbCIgfSB9CishIHsg ZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAicHJhZ21hIG9tcCB0YXJnZXQgcHJpdmF0ZVxc KGJhclxcKSB1c2VzX2FsbG9jYXRvcnNcXChiYXI6IG1lbXNwYWNlXFwoLlxcKSwgdHJhaXRz XFwodHJhaXRzX2FycmF5XFwpXFwpIiAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIl9fYnVpbHRpbl9vbXBfaW5pdF9hbGxvY2F0b3IiIDYg ImdpbXBsZSIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiX19i dWlsdGluX29tcF9kZXN0cm95X2FsbG9jYXRvciIgNiAiZ2ltcGxlIiB9IH0KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMi5m OTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvdXNlc19hbGxvY2F0b3JzLTIu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zNzYyMjUwZWU0 NAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91 c2VzX2FsbG9jYXRvcnMtMi5mOTAKQEAgLTAsMCArMSw0MCBAQAorISB7IGRnLWRvIGNvbXBp bGUgfQorCitwcm9ncmFtIG1haW4KKyAgdXNlIG9tcF9saWIKKyAgaW1wbGljaXQgbm9uZQor ICBpbnRlZ2VyIChvbXBfYWxsb2NhdG9yX2hhbmRsZV9raW5kKSA6OiBiYXIsIGZvbworCisg IHR5cGUgKG9tcF9hbGxvY3RyYWl0KSwgcGFyYW1ldGVyIDo6IHRyYWl0c19hcnJheSgqKSA9 ICYKKyAgICAgICBbb21wX2FsbG9jdHJhaXQob21wX2F0a19waW5uZWQsb21wX2F0dl90cnVl KSwmCisgICAgICAgb21wX2FsbG9jdHJhaXQob21wX2F0a19wYXJ0aXRpb24sb21wX2F0dl9u ZWFyZXN0KV0KKworICAhJG9tcCB0YXJnZXQgdXNlc19hbGxvY2F0b3JzKG9tcF9ub25fZXhp c3RhbnRfYWxsb2MpICEgeyBkZy1lcnJvciAiU3ltYm9sICdvbXBfbm9uX2V4aXN0YW50X2Fs bG9jJyBhdCAuMS4gaXMgYW1iaWd1b3VzIiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisg ICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnMoYmFyKHRyYWl0c19hcnJheSksIGZvbyAo dHJhaXRzX2FycmF5KSwgKSAhIHsgZGctZXJyb3IgIkV4cGVjdGVkIGlkZW50aWZpZXIgYXQg LjEuIiB9CisgIGJsb2NrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAhIHsgZGctZXJyb3IgIkZhaWxlZCB0byBtYXRj aCBjbGF1c2UgYXQgLjEuIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9CisgIGVuZCBibG9j aworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9jYXRvcnModHJhaXRzKHh5eikgOiBiYXIp ICEgeyBkZy1lcnJvciAiU3ltYm9sICd4eXonIGF0IC4xLiBpcyBhbWJpZ3VvdXMiIH0KKyAg YmxvY2sKKyAgZW5kIGJsb2NrCisKKyAgISRvbXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyht ZW1zcGFjZShvbXBfbm9uX2V4aXN0YW50X21lbV9zcGFjZSkgOiBmb28pICEgeyBkZy1lcnJv ciAiU3ltYm9sICdvbXBfbm9uX2V4aXN0YW50X21lbV9zcGFjZScgYXQgLjEuIGlzIGFtYmln dW91cyIgfQorICBibG9jaworICBlbmQgYmxvY2sKKworICAhJG9tcCB0YXJnZXQgdXNlc19h bGxvY2F0b3JzKHRyYWl0cyh0cmFpdHNfYXJyYXkpLCB0cmFpdHModHJhaXRzX2FycmF5KSA6 IGJhcikgISB7IGRnLWVycm9yICJkdXBsaWNhdGUgJ3RyYWl0cycgbW9kaWZpZXIgYXQgLjEu IiB9CisgIGJsb2NrCisgIGVuZCBibG9jaworCisgICEkb21wIHRhcmdldCB1c2VzX2FsbG9j YXRvcnMobWVtc3BhY2Uob21wX2RlZmF1bHRfbWVtX3NwYWNlKSwgbWVtc3BhY2Uob21wX2Rl ZmF1bHRfbWVtX3NwYWNlKSA6IGZvbykgISB7IGRnLWVycm9yICJkdXBsaWNhdGUgJ21lbXNw YWNlJyBtb2RpZmllciBhdCAuMS4iIH0KKyAgYmxvY2sKKyAgZW5kIGJsb2NrCisKKyAgISRv bXAgdGFyZ2V0IHVzZXNfYWxsb2NhdG9ycyhtZW1zcGFjZShvbXBfZGVmYXVsdF9tZW1fc3Bh Y2UpLCB0cmFpdHModHJhaXRzX2FycmF5KSwgdHJhaXRzKHRyYWl0c19hcnJheSkgOiBmb28p ICEgeyBkZy1lcnJvciAiZHVwbGljYXRlICd0cmFpdHMnIG1vZGlmaWVyIGF0IC4xLiIgfQor ICBibG9jaworICBlbmQgYmxvY2sKKworZW5kIHByb2dyYW0gbWFpbgpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3VzZXNfYWxsb2NhdG9ycy0zLmY5MCBi L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC91c2VzX2FsbG9jYXRvcnMtMy5mOTAK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBmMDI0MjY0NzAwCi0t LSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3VzZXNf YWxsb2NhdG9ycy0zLmY5MApAQCAtMCwwICsxLDE0IEBACishIHsgZGctZG8gY29tcGlsZSB9 CisKK3Byb2dyYW0gbWFpbgorICB1c2Ugb21wX2xpYgorICBpbXBsaWNpdCBub25lCisgIGlu dGVnZXIsIGFsbG9jYXRhYmxlIDo6IGFycig6KQorICBpbnRlZ2VyIChvbXBfYWxsb2NhdG9y X2hhbmRsZV9raW5kKSA6OiBiYXIKKworICAhJG9tcCB0YXJnZXQgYWxsb2NhdGUoYmFyIDog YXJyKSAhIHsgZGctZXJyb3IgImFsbG9jYXRvciAnJ2JhcicnIHJlcXVpcmVzICd1c2VzX2Fs bG9jYXRvcnMuYmFyLicgY2xhdXNlIGluIHRhcmdldCByZWdpb24iIH0KKyAgYmxvY2sKKyAg ICBhbGxvY2F0ZShhcnIoMTAwKSkKKyAgZW5kIGJsb2NrCisKK2VuZCBwcm9ncmFtIG1haW4K ZGlmZiAtLWdpdCBhL2djYy90cmVlLWNvcmUuaCBiL2djYy90cmVlLWNvcmUuaAppbmRleCAy MzgzYjU3MGY0OS4uOTEzMDBkNDJiNWEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWNvcmUuaAor KysgYi9nY2MvdHJlZS1jb3JlLmgKQEAgLTUyMiw2ICs1MjIsOSBAQCBlbnVtIG9tcF9jbGF1 c2VfY29kZSB7CiAKICAgLyogT3BlbkFDQyBjbGF1c2U6IG5vaG9zdC4gICovCiAgIE9NUF9D TEFVU0VfTk9IT1NULAorCisgIC8qIE9wZW5NUCBjbGF1c2U6IHVzZXNfYWxsb2NhdG9ycy4g ICovCisgIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTLAogfTsKIAogI3VuZGVmIERFRlRS RUVTVFJVQ1QKZGlmZiAtLWdpdCBhL2djYy90cmVlLXByZXR0eS1wcmludC5jYyBiL2djYy90 cmVlLXByZXR0eS1wcmludC5jYwppbmRleCAzMzNhYzIzYWViMi4uNWY1YTE1YjQ4ZGIgMTAw NjQ0Ci0tLSBhL2djYy90cmVlLXByZXR0eS1wcmludC5jYworKysgYi9nY2MvdHJlZS1wcmV0 dHktcHJpbnQuY2MKQEAgLTc2OSw2ICs3NjksMjAgQEAgZHVtcF9vbXBfY2xhdXNlIChwcmV0 dHlfcHJpbnRlciAqcHAsIHRyZWUgY2xhdXNlLCBpbnQgc3BjLCBkdW1wX2ZsYWdzX3QgZmxh Z3MpCiAgICAgICBwcF9yaWdodF9wYXJlbiAocHApOwogICAgICAgYnJlYWs7CiAKKyAgICBj YXNlIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTOgorICAgICAgcHBfc3RyaW5nIChwcCwg InVzZXNfYWxsb2NhdG9ycygiKTsKKyAgICAgIGR1bXBfZ2VuZXJpY19ub2RlIChwcCwgT01Q X0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfQUxMT0NBVE9SIChjbGF1c2UpLAorCQkJIHNwYywg ZmxhZ3MsIGZhbHNlKTsKKyAgICAgIHBwX3N0cmluZyAocHAsICI6IG1lbXNwYWNlKCIpOwor ICAgICAgZHVtcF9nZW5lcmljX25vZGUgKHBwLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9S U19NRU1TUEFDRSAoY2xhdXNlKSwKKwkJCSBzcGMsIGZsYWdzLCBmYWxzZSk7CisgICAgICBw cF9zdHJpbmcgKHBwLCAiKSwgdHJhaXRzKCIpOworICAgICAgZHVtcF9nZW5lcmljX25vZGUg KHBwLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SU19UUkFJVFMgKGNsYXVzZSksCisJCQkg c3BjLCBmbGFncywgZmFsc2UpOworICAgICAgcHBfcmlnaHRfcGFyZW4gKHBwKTsKKyAgICAg IHBwX3JpZ2h0X3BhcmVuIChwcCk7CisgICAgICBicmVhazsKKwogICAgIGNhc2UgT01QX0NM QVVTRV9BRkZJTklUWToKICAgICAgIHBwX3N0cmluZyAocHAsICJhZmZpbml0eSgiKTsKICAg ICAgIHsKZGlmZiAtLWdpdCBhL2djYy90cmVlLmNjIGIvZ2NjL3RyZWUuY2MKaW5kZXggZGY0 NDFjNmIyMjMuLjQwNzIzM2E1YjZkIDEwMDY0NAotLS0gYS9nY2MvdHJlZS5jYworKysgYi9n Y2MvdHJlZS5jYwpAQCAtMzQ5LDYgKzM0OSw3IEBAIHVuc2lnbmVkIGNvbnN0IGNoYXIgb21w X2NsYXVzZV9udW1fb3BzW10gPQogICAwLCAvKiBPTVBfQ0xBVVNFX0lGX1BSRVNFTlQgKi8K ICAgMCwgLyogT01QX0NMQVVTRV9GSU5BTElaRSAqLwogICAwLCAvKiBPTVBfQ0xBVVNFX05P SE9TVCAqLworICAzLCAvKiBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyAqLwogfTsKIAog Y29uc3QgY2hhciAqIGNvbnN0IG9tcF9jbGF1c2VfY29kZV9uYW1lW10gPQpAQCAtNDM5LDYg KzQ0MCw3IEBAIGNvbnN0IGNoYXIgKiBjb25zdCBvbXBfY2xhdXNlX2NvZGVfbmFtZVtdID0K ICAgImlmX3ByZXNlbnQiLAogICAiZmluYWxpemUiLAogICAibm9ob3N0IiwKKyAgInVzZXNf YWxsb2NhdG9ycyIsCiB9OwogCiAvKiBVbmxlc3Mgc3BlY2lmaWMgdG8gT3BlbkFDQywgd2Ug dGVuZCB0byBpbnRlcm5hbGx5IG1haW50YWluIE9wZW5NUC1jZW50cmljCmRpZmYgLS1naXQg YS9nY2MvdHJlZS5oIGIvZ2NjL3RyZWUuaAppbmRleCBjOTJjNWJmMzQ0Yi4uYzMxY2M5Y2U4 NTkgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtMTg3NCw2 ICsxODc0LDE1IEBAIGNsYXNzIGF1dG9fc3VwcHJlc3NfbG9jYXRpb25fd3JhcHBlcnMKICNk ZWZpbmUgT01QX0NMQVVTRV9BTExPQ0FURV9DT01CSU5FRChOT0RFKSBcCiAgIChPTVBfQ0xB VVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0VfQUxMT0NBVEUpLT5iYXNlLnB1 YmxpY19mbGFnKQogCisjZGVmaW5lIE9NUF9DTEFVU0VfVVNFU19BTExPQ0FUT1JTX0FMTE9D QVRPUihOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RF X0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyksIDApCisKKyNkZWZp bmUgT01QX0NMQVVTRV9VU0VTX0FMTE9DQVRPUlNfTUVNU1BBQ0UoTk9ERSkgXAorICBPTVBf Q0xBVVNFX09QRVJBTkQgKE9NUF9DTEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NM QVVTRV9VU0VTX0FMTE9DQVRPUlMpLCAxKQorCisjZGVmaW5lIE9NUF9DTEFVU0VfVVNFU19B TExPQ0FUT1JTX1RSQUlUUyhOT0RFKSBcCisgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NM QVVTRV9TVUJDT0RFX0NIRUNLIChOT0RFLCBPTVBfQ0xBVVNFX1VTRVNfQUxMT0NBVE9SUyks IDIpCisKICNkZWZpbmUgT01QX0NMQVVTRV9OVU1fVEVBTVNfVVBQRVJfRVhQUihOT0RFKSBc CiAgIE9NUF9DTEFVU0VfT1BFUkFORCAoT01QX0NMQVVTRV9TVUJDT0RFX0NIRUNLIChOT0RF LCBPTVBfQ0xBVVNFX05VTV9URUFNUyksIDApCiAK --------------85uwWvHHqE7yfoVPhUXWRfNf--