From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 98FB3385781D; Tue, 25 May 2021 13:36:42 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 98FB3385781D Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=ChungLin_Tang@mentor.com IronPort-SDR: 6jq5BVkyEmHgsQpi7gZ6z0IlXVyV/95/4HiDJs9ga3XCPaFmEF9lo5ZAWmpoze7DV00MhvSJNj gfqYbgAGZEhTkDaybmmo0NUu+8gU3voHZ15VW4YNb1SZUF5fnIsXEzqeeROTAeQxj/B2B5P/45 HwTg7JVuNDIMvzefZK0cNBOQXKGRnxI37EarGGgDbpEFkK0RkZlbTuMjWHOuLz63F9nqMhAj+V cpiRRt7+t5w07+cuAL0v7uLbzpIE7B6smeU2f2LVc6wyLY0hnU2gWMJ8lZ9OtOB/Tc9cWqox+7 87M= X-IronPort-AV: E=Sophos;i="5.82,328,1613462400"; d="scan'208";a="64023697" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa1.mentor.iphmx.com with ESMTP; 25 May 2021 05:36:40 -0800 IronPort-SDR: HJd8tB5BndLvczoylbvSt1gez9OH5ArtH7muMpbB2Jtq8Cn0G3ajKcuDWu3Mpb5oQ1Ndd1Mb2A OYJUYFUs3aAHktJtTwBWCtAwHAEliUoplJvmnkkOiWiG0rprxOp+BsWyFV3qBjg3Si9RxbfucC DSe8OpZNm3Z4E5J31ayVtxLR404ScBRINAJxHyJQKX/uqgVbzZuMV+14vgCRgfAYa9TXmLEdSX r4YGMdxPOWimjj6qLim4cvtv6uArgC5s07Yyem5QURwwICV6UOlRn4Hugs/FiYvaiFOLWf2+Bx iNU= From: Chung-Lin Tang To: Jakub Jelinek , gcc-patches , Tobias Burnus , Fortran List , Catherine Moore , Thomas Schwinge , Julian Brown Subject: [PATCH, OpenMP 5.0] Remove array section base-pointer mapping semantics, and other front-end adjustments (mainline trunk) Message-ID: <309eb444-6b9b-18b3-90a7-ffd54d0d0335@codesourcery.com> Date: Tue, 25 May 2021 21:36:30 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:78.0) Gecko/20100101 Thunderbird/78.10.2 MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------FA028848BDF46A00EA80C981" Content-Language: en-US X-ClientProxiedBy: svr-orw-mbx-03.mgc.mentorg.com (147.34.90.203) To svr-orw-mbx-02.mgc.mentorg.com (147.34.90.202) X-Spam-Status: No, score=-9.7 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_MANYTO, KAM_SHORT, SCC_5_SHORT_WORD_LINES, SPF_HELO_PASS, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Tue, 25 May 2021 13:36:51 -0000 --------------FA028848BDF46A00EA80C981 Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Hi Jakub, this is a version of this patch: https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570075.html for mainline trunk. This patch largely implements three pieces of functionality: (1) Per discussion and clarification on the omp-lang mailing list, standards conforming behavior for mapping array sections should *NOT* also map the base-pointer, i.e for this code: struct S { int *ptr; ... }; struct S s; #pragma omp target enter data map(to: s.ptr[:100]) Currently we generate after gimplify: #pragma omp target enter data map(struct:s [len: 1]) map(alloc:s.ptr [len: 8]) \ map(to:*_1 [len: 400]) map(attach:s.ptr [bias: 0]) which is deemed incorrect. After this patch, the gimplify results are now adjusted to: #pragma omp target enter data map(to:*_1 [len: 400]) map(attach:s.ptr [bias: 0]) (the attach operation is still generated, and if s.ptr is already mapped prior, attachment will happen) The correct way of achieving the base-pointer-also-mapped behavior would be to use: #pragma omp target enter data map(to: s.ptr, s.ptr[:100]) This adjustment in behavior required a number of small adjustments here and there in gimplify, including to accomodate map sequences for C++ references. There is also a small Fortran front-end patch involved (hence CCing Tobias and fortran@). The new gimplify processing changed behavior in handling GOMP_MAP_ALWAYS_POINTER maps such that the libgomp.fortran/struct-elem-map-1.f90 regressed. It appeared that the Fortran FE was generating a GOMP_MAP_ALWAYS_POINTER for array types, which didn't seem quite correct, and the pre-patch behavior was removing this map anyways. I have a small change in trans-openmp.c:gfc_trans_omp_array_section to not generate the map in this case, and so far no bad test results. (2) The second part (though kind of related to the first above) are fixes in libgomp/target.c to not overwrite attached pointers when handling device<->host copies, mainly for the "always" case. This behavior is also noted in the 5.0 spec, but not yet properly coded before. (3) The third is a set of changes to the C/C++ front-ends to extend the allowed component access syntax in map clauses. This is actually mainly an effort to allow SPEC HPC to compile, so despite in the long term the entire map clause syntax parsing is probably going to be revamped, we're still adding this in for now. These changes are enabled for both OpenACC and OpenMP. Tested on x86_64-linux with nvptx offloading with no regressions. This patch was merged and tested atop of the prior submitted patches: (a) https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570886.html "[PATCH, OpenMP 5.0] Improve OpenMP target support for C++ (includes PR92120 v3)" (b) https://gcc.gnu.org/pipermail/gcc-patches/2021-May/570365.html "[PATCH, OpenMP 5.0] Implement relaxation of implicit map vs. existing device mappings (for mainline trunk)" so you might queued this one later than those for review. Thanks, Chung-Lin 2021-05-25 Chung-Lin Tang gcc/c/ChangeLog: * c-parser.c (struct omp_dim): New struct type for use inside c_parser_omp_variable_list. (c_parser_omp_variable_list): Allow multiple levels of array and component accesses in array section base-pointer expression. (c_parser_omp_clause_to): Set 'allow_deref' to true in call to c_parser_omp_var_list_parens. (c_parser_omp_clause_from): Likewise. * c-typeck.c (handle_omp_array_sections_1): Extend allowed range of base-pointer expressions involving INDIRECT/MEM/ARRAY_REF and POINTER_PLUS_EXPR. (c_finish_omp_clauses): Extend allowed ranged of expressions involving INDIRECT/MEM/ARRAY_REF and POINTER_PLUS_EXPR. gcc/cp/ChangeLog: * parser.c (struct omp_dim): New struct type for use inside cp_parser_omp_var_list_no_open. (cp_parser_omp_var_list_no_open): Allow multiple levels of array and component accesses in array section base-pointer expression. (cp_parser_omp_all_clauses): Set 'allow_deref' to true in call to cp_parser_omp_var_list for to/from clauses. * semantics.c (handle_omp_array_sections_1): Extend allowed range of base-pointer expressions involving INDIRECT/MEM/ARRAY_REF and POINTER_PLUS_EXPR. (handle_omp_array_sections): Adjust pointer map generation of references. (finish_omp_clauses): Extend allowed ranged of expressions involving INDIRECT/MEM/ARRAY_REF and POINTER_PLUS_EXPR. gcc/fortran/ChangeLog: * trans-openmp.c (gfc_trans_omp_array_section): Do not generate GOMP_MAP_ALWAYS_POINTER map for main array maps of ARRAY_TYPE type. gcc/ChangeLog: * gimplify.c (extract_base_bit_offset): Add 'tree *offsetp' parameter, accomodate case where 'offset' return of get_inner_reference is non-NULL. (is_or_contains_p): Further robustify conditions. (omp_target_reorder_clauses): In alloc/to/from sorting phase, also move following GOMP_MAP_ALWAYS_POINTER maps along. Add new sorting phase where we make sure pointers with an attach/detach map are ordered correctly. (gimplify_scan_omp_clauses): Add modifications to avoid creating GOMP_MAP_STRUCT and associated alloc map for attach/detach maps. gcc/testsuite/ChangeLog: * c-c++-common/goacc/deep-copy-arrayofstruct.c: Adjust testcase. * g++.dg/gomp/target-lambda-1.C: Likewise. * g++.dg/gomp/target-this-3.C: Likewise. * g++.dg/gomp/target-this-4.C: Likewise. * c-c++-common/gomp/target-enter-data-1.c: New testcase. * c-c++-common/gomp/target-implicit-map-2.c: New testcase. libgomp/ChangeLog: * target.c (gomp_map_vars_existing): Make sure attached pointer is not overwritten during cross-host/device copying. (gomp_update): Likewise. (gomp_exit_data): Likewise. * testsuite/libgomp.c++/target-11.C: Adjust testcase. * testsuite/libgomp.c++/target-12.C: Likewise. * testsuite/libgomp.c++/target-15.C: Likewise. * testsuite/libgomp.c++/target-16.C: Likewise. * testsuite/libgomp.c++/target-17.C: Likewise. * testsuite/libgomp.c++/target-21.C: Likewise. * testsuite/libgomp.c++/target-23.C: Likewise. * testsuite/libgomp.c/target-23.c: Likewise. * testsuite/libgomp.c/target-29.c: Likewise. * testsuite/libgomp.c-c++-common/target-implicit-map-2.c: New testcase. --------------FA028848BDF46A00EA80C981 Content-Type: text/plain; charset="UTF-8"; x-mac-type=0; x-mac-creator=0; name="omp-fixes.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="omp-fixes.patch" ZGlmZiAtLWdpdCBhL2djYy9jL2MtcGFyc2VyLmMgYi9nY2MvYy9jLXBhcnNlci5jCmluZGV4 IDVmNmQzMTg0ZTFhLi41ODJmODZiOWIzNSAxMDA2NDQKLS0tIGEvZ2NjL2MvYy1wYXJzZXIu YworKysgYi9nY2MvYy9jLXBhcnNlci5jCkBAIC0xMjg4Nyw2ICsxMjg4NywxNSBAQCBjX3Bh cnNlcl9vYWNjX3dhaXRfbGlzdCAoY19wYXJzZXIgKnBhcnNlciwgbG9jYXRpb25fdCBjbGF1 c2VfbG9jLCB0cmVlIGxpc3QpCiAgICBUaGUgb3B0aW9uYWwgQUxMT1dfREVSRUYgYXJndW1l bnQgaXMgdHJ1ZSBpZiBsaXN0IGl0ZW1zIGNhbiB1c2UgdGhlIGRlcmVmCiAgICAoLT4pIG9w ZXJhdG9yLiAgKi8KIAorc3RydWN0IG9tcF9kaW0KK3sKKyAgdHJlZSBsb3dfYm91bmQsIGxl bmd0aDsKKyAgbG9jYXRpb25fdCBsb2M7CisgIGJvb2wgbm9fY29sb247CisgIG9tcF9kaW0g KHRyZWUgbGIsIHRyZWUgbGVuLCBsb2NhdGlvbl90IGxvLCBib29sIG5jKQorICA6IGxvd19i b3VuZCAobGIpLCBsZW5ndGggKGxlbiksIGxvYyAobG8pLCBub19jb2xvbiAobmMpIHt9Cit9 OworCiBzdGF0aWMgdHJlZQogY19wYXJzZXJfb21wX3ZhcmlhYmxlX2xpc3QgKGNfcGFyc2Vy ICpwYXJzZXIsCiAJCQkgICAgbG9jYXRpb25fdCBjbGF1c2VfbG9jLApAQCAtMTI4OTksNiAr MTI5MDgsNyBAQCBjX3BhcnNlcl9vbXBfdmFyaWFibGVfbGlzdCAoY19wYXJzZXIgKnBhcnNl ciwKIAogICB3aGlsZSAoMSkKICAgICB7CisgICAgICBhdXRvX3ZlYzxvbXBfZGltPiBkaW1z OwogICAgICAgYm9vbCBhcnJheV9zZWN0aW9uX3AgPSBmYWxzZTsKICAgICAgIGlmIChraW5k ID09IE9NUF9DTEFVU0VfREVQRU5EKQogCXsKQEAgLTEzMDE4LDYgKzEzMDI4LDcgQEAgY19w YXJzZXJfb21wX3ZhcmlhYmxlX2xpc3QgKGNfcGFyc2VyICpwYXJzZXIsCiAJICAgIGNhc2Ug T01QX0NMQVVTRV9NQVA6CiAJICAgIGNhc2UgT01QX0NMQVVTRV9GUk9NOgogCSAgICBjYXNl IE9NUF9DTEFVU0VfVE86CisJICAgIHN0YXJ0X2NvbXBvbmVudF9yZWY6CiAJICAgICAgd2hp bGUgKGNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX0RPVCkKIAkJICAgICB8 fCAoYWxsb3dfZGVyZWYKIAkJCSAmJiBjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIs IENQUF9ERVJFRikpKQpAQCAtMTMwNDQsOSArMTMwNTUsMTMgQEAgY19wYXJzZXJfb21wX3Zh cmlhYmxlX2xpc3QgKGNfcGFyc2VyICpwYXJzZXIsCiAJICAgIGNhc2UgT01QX0NMQVVTRV9S RURVQ1RJT046CiAJICAgIGNhc2UgT01QX0NMQVVTRV9JTl9SRURVQ1RJT046CiAJICAgIGNh c2UgT01QX0NMQVVTRV9UQVNLX1JFRFVDVElPTjoKKwkgICAgICBhcnJheV9zZWN0aW9uX3Ag PSBmYWxzZTsKKwkgICAgICBkaW1zLnRydW5jYXRlICgwKTsKIAkgICAgICB3aGlsZSAoY19w YXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLCBDUFBfT1BFTl9TUVVBUkUpKQogCQl7CisJ CSAgbG9jYXRpb25fdCBsb2MgPSBVTktOT1dOX0xPQ0FUSU9OOwogCQkgIHRyZWUgbG93X2Jv dW5kID0gTlVMTF9UUkVFLCBsZW5ndGggPSBOVUxMX1RSRUU7CisJCSAgYm9vbCBub19jb2xv biA9IGZhbHNlOwogCiAJCSAgY19wYXJzZXJfY29uc3VtZV90b2tlbiAocGFyc2VyKTsKIAkJ ICBpZiAoIWNfcGFyc2VyX25leHRfdG9rZW5faXMgKHBhcnNlciwgQ1BQX0NPTE9OKSkKQEAg LTEzMDU3LDkgKzEzMDcyLDEzIEBAIGNfcGFyc2VyX29tcF92YXJpYWJsZV9saXN0IChjX3Bh cnNlciAqcGFyc2VyLAogCQkgICAgICBleHByID0gY29udmVydF9sdmFsdWVfdG9fcnZhbHVl IChleHByX2xvYywgZXhwciwKIAkJCQkJCSAgICAgICBmYWxzZSwgdHJ1ZSk7CiAJCSAgICAg IGxvd19ib3VuZCA9IGV4cHIudmFsdWU7CisJCSAgICAgIGxvYyA9IGV4cHJfbG9jOwogCQkg ICAgfQogCQkgIGlmIChjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9DTE9T RV9TUVVBUkUpKQotCQkgICAgbGVuZ3RoID0gaW50ZWdlcl9vbmVfbm9kZTsKKwkJICAgIHsK KwkJICAgICAgbGVuZ3RoID0gaW50ZWdlcl9vbmVfbm9kZTsKKwkJICAgICAgbm9fY29sb24g PSB0cnVlOworCQkgICAgfQogCQkgIGVsc2UKIAkJICAgIHsKIAkJICAgICAgLyogTG9vayBm b3IgYDonLiAgKi8KQEAgLTEzMDg4LDggKzEzMTA3LDM1IEBAIGNfcGFyc2VyX29tcF92YXJp YWJsZV9saXN0IChjX3BhcnNlciAqcGFyc2VyLAogCQkgICAgICBicmVhazsKIAkJICAgIH0K IAotCQkgIHQgPSB0cmVlX2NvbnMgKGxvd19ib3VuZCwgbGVuZ3RoLCB0KTsKKwkJICBkaW1z LnNhZmVfcHVzaCAob21wX2RpbSAobG93X2JvdW5kLCBsZW5ndGgsIGxvYywgbm9fY29sb24p KTsKKwkJfQorCisJICAgICAgaWYgKHQgIT0gZXJyb3JfbWFya19ub2RlKQorCQl7CisJCSAg aWYgKChraW5kID09IE9NUF9DTEFVU0VfTUFQCisJCSAgICAgICB8fCBraW5kID09IE9NUF9D TEFVU0VfRlJPTQorCQkgICAgICAgfHwga2luZCA9PSBPTVBfQ0xBVVNFX1RPKQorCQkgICAg ICAmJiAhYXJyYXlfc2VjdGlvbl9wCisJCSAgICAgICYmIChjX3BhcnNlcl9uZXh0X3Rva2Vu X2lzIChwYXJzZXIsIENQUF9ET1QpCisJCQkgIHx8IChhbGxvd19kZXJlZgorCQkJICAgICAg JiYgY19wYXJzZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLAorCQkJCQkJCSBDUFBfREVSRUYp KSkpCisJCSAgICB7CisJCSAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaW1zLmxl bmd0aCAoKTsgaSsrKQorCQkJeworCQkJICBnY2NfYXNzZXJ0IChkaW1zW2ldLmxlbmd0aCA9 PSBpbnRlZ2VyX29uZV9ub2RlKTsKKwkJCSAgdCA9IGJ1aWxkX2FycmF5X3JlZiAoZGltc1tp XS5sb2MsCisJCQkJCSAgICAgICB0LCBkaW1zW2ldLmxvd19ib3VuZCk7CisJCQl9CisJCSAg ICAgIGdvdG8gc3RhcnRfY29tcG9uZW50X3JlZjsKKwkJICAgIH0KKwkJICBlbHNlCisJCSAg ICB7CisJCSAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBkaW1zLmxlbmd0aCAoKTsg aSsrKQorCQkJdCA9IHRyZWVfY29ucyAoZGltc1tpXS5sb3dfYm91bmQsIGRpbXNbaV0ubGVu Z3RoLCB0KTsKKwkJICAgIH0KIAkJfQorCiAJICAgICAgaWYgKGtpbmQgPT0gT01QX0NMQVVT RV9ERVBFTkQKIAkJICAmJiB0ICE9IGVycm9yX21hcmtfbm9kZQogCQkgICYmIHBhcnNlci0+ dG9rZW5zX2F2YWlsICE9IDIpCkBAIC0xNTk0MSw3ICsxNTk4Nyw3IEBAIGNfcGFyc2VyX29t cF9jbGF1c2VfZGV2aWNlX3R5cGUgKGNfcGFyc2VyICpwYXJzZXIsIHRyZWUgbGlzdCkKIHN0 YXRpYyB0cmVlCiBjX3BhcnNlcl9vbXBfY2xhdXNlX3RvIChjX3BhcnNlciAqcGFyc2VyLCB0 cmVlIGxpc3QpCiB7Ci0gIHJldHVybiBjX3BhcnNlcl9vbXBfdmFyX2xpc3RfcGFyZW5zIChw YXJzZXIsIE9NUF9DTEFVU0VfVE8sIGxpc3QpOworICByZXR1cm4gY19wYXJzZXJfb21wX3Zh cl9saXN0X3BhcmVucyAocGFyc2VyLCBPTVBfQ0xBVVNFX1RPLCBsaXN0LCB0cnVlKTsKIH0K IAogLyogT3Blbk1QIDQuMDoKQEAgLTE1OTUwLDcgKzE1OTk2LDcgQEAgY19wYXJzZXJfb21w X2NsYXVzZV90byAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0KQogc3RhdGljIHRyZWUK IGNfcGFyc2VyX29tcF9jbGF1c2VfZnJvbSAoY19wYXJzZXIgKnBhcnNlciwgdHJlZSBsaXN0 KQogewotICByZXR1cm4gY19wYXJzZXJfb21wX3Zhcl9saXN0X3BhcmVucyAocGFyc2VyLCBP TVBfQ0xBVVNFX0ZST00sIGxpc3QpOworICByZXR1cm4gY19wYXJzZXJfb21wX3Zhcl9saXN0 X3BhcmVucyAocGFyc2VyLCBPTVBfQ0xBVVNFX0ZST00sIGxpc3QsIHRydWUpOwogfQogCiAv KiBPcGVuTVAgNC4wOgpkaWZmIC0tZ2l0IGEvZ2NjL2MvYy10eXBlY2suYyBiL2djYy9jL2Mt dHlwZWNrLmMKaW5kZXggOGYzMmQ4MDhjNjMuLjYyNjRkMzc2ZjIxIDEwMDY0NAotLS0gYS9n Y2MvYy9jLXR5cGVjay5jCisrKyBiL2djYy9jL2MtdHlwZWNrLmMKQEAgLTEzMDcxLDYgKzEz MDcxLDE4IEBAIGhhbmRsZV9vbXBfYXJyYXlfc2VjdGlvbnNfMSAodHJlZSBjLCB0cmVlIHQs IHZlYzx0cmVlPiAmdHlwZXMsCiAJCSAgICB0LCBvbXBfY2xhdXNlX2NvZGVfbmFtZVtPTVBf Q0xBVVNFX0NPREUgKGMpXSk7CiAJICByZXR1cm4gZXJyb3JfbWFya19ub2RlOwogCX0KKyAg ICAgIHdoaWxlIChUUkVFX0NPREUgKHQpID09IElORElSRUNUX1JFRikKKwl7CisJICB0ID0g VFJFRV9PUEVSQU5EICh0LCAwKTsKKwkgIFNUUklQX05PUFMgKHQpOworCSAgaWYgKFRSRUVf Q09ERSAodCkgPT0gUE9JTlRFUl9QTFVTX0VYUFIpCisJICAgIHQgPSBUUkVFX09QRVJBTkQg KHQsIDApOworCX0KKyAgICAgIHdoaWxlIChUUkVFX0NPREUgKHQpID09IENPTVBPVU5EX0VY UFIpCisJeworCSAgdCA9IFRSRUVfT1BFUkFORCAodCwgMSk7CisJICBTVFJJUF9OT1BTICh0 KTsKKwl9CiAgICAgICBpZiAoVFJFRV9DT0RFICh0KSA9PSBDT01QT05FTlRfUkVGCiAJICAm JiAoT01QX0NMQVVTRV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX01BUAogCSAgICAgIHx8IE9N UF9DTEFVU0VfQ09ERSAoYykgPT0gT01QX0NMQVVTRV9UTwpAQCAtMTMwOTIsMTIgKzEzMTA0 LDE2IEBAIGhhbmRsZV9vbXBfYXJyYXlfc2VjdGlvbnNfMSAodHJlZSBjLCB0cmVlIHQsIHZl Yzx0cmVlPiAmdHlwZXMsCiAJCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIAkJfQogCSAg ICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOwotCSAgICAgIGlmICgob3J0ID09IENfT1JU X0FDQyB8fCBvcnQgPT0gQ19PUlRfT01QKQotCQkgICYmIFRSRUVfQ09ERSAodCkgPT0gTUVN X1JFRikKLQkJewotCQkgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOwotCQkgIFNUUklQX05P UFMgKHQpOwotCQl9CisJICAgICAgaWYgKG9ydCA9PSBDX09SVF9BQ0MgfHwgb3J0ID09IENf T1JUX09NUCkKKwkJd2hpbGUgKFRSRUVfQ09ERSAodCkgPT0gTUVNX1JFRgorCQkgICAgICAg fHwgVFJFRV9DT0RFICh0KSA9PSBJTkRJUkVDVF9SRUYKKwkJICAgICAgIHx8IFRSRUVfQ09E RSAodCkgPT0gQVJSQVlfUkVGKQorCQkgIHsKKwkJICAgIHQgPSBUUkVFX09QRVJBTkQgKHQs IDApOworCQkgICAgU1RSSVBfTk9QUyAodCk7CisJCSAgICBpZiAoVFJFRV9DT0RFICh0KSA9 PSBQT0lOVEVSX1BMVVNfRVhQUikKKwkJICAgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisJCSAgfQogCSAgICAgIGlmIChvcnQgPT0gQ19PUlRfQUNDICYmIFRSRUVfQ09ERSAodCkg PT0gTUVNX1JFRikKIAkJewogCQkgIGlmIChtYXliZV9uZSAobWVtX3JlZl9vZmZzZXQgKHQp LCAwKSkKQEAgLTEzMzc4LDE0ICsxMzM5NCwyNCBAQCBoYW5kbGVfb21wX2FycmF5X3NlY3Rp b25zXzEgKHRyZWUgYywgdHJlZSB0LCB2ZWM8dHJlZT4gJnR5cGVzLAogCSAgcmV0dXJuIGVy cm9yX21hcmtfbm9kZTsKIAl9CiAgICAgICAvKiBJZiB0aGVyZSBpcyBhIHBvaW50ZXIgdHlw ZSBhbnl3aGVyZSBidXQgaW4gdGhlIHZlcnkgZmlyc3QKLQkgYXJyYXktc2VjdGlvbi1zdWJz Y3JpcHQsIHRoZSBhcnJheSBzZWN0aW9uIGNhbid0IGJlIGNvbnRpZ3VvdXMuICAqLworCSBh cnJheS1zZWN0aW9uLXN1YnNjcmlwdCwgdGhlIGFycmF5IHNlY3Rpb24gY291bGQgYmUgbm9u LWNvbnRpZ3VvdXMuICAqLwogICAgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoYykgIT0gT01Q X0NMQVVTRV9ERVBFTkQKIAkgICYmIFRSRUVfQ09ERSAoVFJFRV9DSEFJTiAodCkpID09IFRS RUVfTElTVCkKIAl7Ci0JICBlcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAoYyksCi0J CSAgICAiYXJyYXkgc2VjdGlvbiBpcyBub3QgY29udGlndW91cyBpbiAlcXMgY2xhdXNlIiwK LQkJICAgIG9tcF9jbGF1c2VfY29kZV9uYW1lW09NUF9DTEFVU0VfQ09ERSAoYyldKTsKLQkg IHJldHVybiBlcnJvcl9tYXJrX25vZGU7CisJICAvKiBJZiBhbnkgcHJpb3IgZGltZW5zaW9u IGhhcyBhIG5vbi1vbmUgbGVuZ3RoLCB0aGVuIGRlZW0gdGhpcworCSAgICAgYXJyYXkgc2Vj dGlvbiBhcyBub24tY29udGlndW91cy4gICovCisJICBmb3IgKHRyZWUgZCA9IFRSRUVfQ0hB SU4gKHQpOyBUUkVFX0NPREUgKGQpID09IFRSRUVfTElTVDsKKwkgICAgICAgZCA9IFRSRUVf Q0hBSU4gKGQpKQorCSAgICB7CisJICAgICAgdHJlZSBkX2xlbmd0aCA9IFRSRUVfVkFMVUUg KGQpOworCSAgICAgIGlmIChkX2xlbmd0aCA9PSBOVUxMX1RSRUUgfHwgIWludGVnZXJfb25l cCAoZF9sZW5ndGgpKQorCQl7CisJCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJT04g KGMpLAorCQkJICAgICJhcnJheSBzZWN0aW9uIGlzIG5vdCBjb250aWd1b3VzIGluICVxcyBj bGF1c2UiLAorCQkJICAgIG9tcF9jbGF1c2VfY29kZV9uYW1lW09NUF9DTEFVU0VfQ09ERSAo YyldKTsKKwkJICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworCQl9CisJICAgIH0KIAl9CiAg ICAgfQogICBlbHNlCkBAIC0xNDY2NCwxMyArMTQ2OTAsMjAgQEAgY19maW5pc2hfb21wX2Ns YXVzZXMgKHRyZWUgY2xhdXNlcywgZW51bSBjX29tcF9yZWdpb25fdHlwZSBvcnQpCiAJCSAg aWYgKFRSRUVfQ09ERSAodCkgPT0gQ09NUE9ORU5UX1JFRgogCQkgICAgICAmJiBUUkVFX0NP REUgKFRSRUVfVFlQRSAodCkpID09IEFSUkFZX1RZUEUpCiAJCSAgICB7Ci0JCSAgICAgIHdo aWxlIChUUkVFX0NPREUgKHQpID09IENPTVBPTkVOVF9SRUYpCi0JCQl0ID0gVFJFRV9PUEVS QU5EICh0LCAwKTsKLQkJICAgICAgaWYgKFRSRUVfQ09ERSAodCkgPT0gTUVNX1JFRikKKwkJ ICAgICAgZG8KIAkJCXsKIAkJCSAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0JCQkgIFNU UklQX05PUFMgKHQpOworCQkJICBpZiAoVFJFRV9DT0RFICh0KSA9PSBNRU1fUkVGCisJCQkg ICAgICB8fCBUUkVFX0NPREUgKHQpID09IElORElSRUNUX1JFRikKKwkJCSAgICB7CisJCQkg ICAgICB0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkJCSAgICAgIFNUUklQX05PUFMgKHQp OworCQkJICAgICAgaWYgKFRSRUVfQ09ERSAodCkgPT0gUE9JTlRFUl9QTFVTX0VYUFIpCisJ CQkJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CisJCQkgICAgfQogCQkJfQorCQkgICAgICB3 aGlsZSAoVFJFRV9DT0RFICh0KSA9PSBDT01QT05FTlRfUkVGKTsKKwogCQkgICAgICBpZiAo Yml0bWFwX2JpdF9wICgmbWFwX2ZpZWxkX2hlYWQsIERFQ0xfVUlEICh0KSkpCiAJCQlicmVh azsKIAkJICAgICAgaWYgKGJpdG1hcF9iaXRfcCAoJm1hcF9oZWFkLCBERUNMX1VJRCAodCkp KQpAQCAtMTQ3MjcsMTUgKzE0NzYwLDMzIEBAIGNfZmluaXNoX29tcF9jbGF1c2VzICh0cmVl IGNsYXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQogCSAgICAgICBiaWFzKSB0 byB6ZXJvIGhlcmUsIHNvIGl0IGlzIG5vdCBzZXQgZXJyb25lb3VzbHkgdG8gdGhlIHBvaW50 ZXIKIAkgICAgICAgc2l6ZSBsYXRlciBvbiBpbiBnaW1wbGlmeS5jLiAgKi8KIAkgICAgT01Q X0NMQVVTRV9TSVpFIChjKSA9IHNpemVfemVyb19ub2RlOworCSAgd2hpbGUgKFRSRUVfQ09E RSAodCkgPT0gSU5ESVJFQ1RfUkVGCisJCSB8fCBUUkVFX0NPREUgKHQpID09IEFSUkFZX1JF RikKKwkgICAgeworCSAgICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworCSAgICAgIFNU UklQX05PUFMgKHQpOworCSAgICAgIGlmIChUUkVFX0NPREUgKHQpID09IFBPSU5URVJfUExV U19FWFBSKQorCQl0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkgICAgfQorCSAgd2hpbGUg KFRSRUVfQ09ERSAodCkgPT0gQ09NUE9VTkRfRVhQUikKKwkgICAgeworCSAgICAgIHQgPSBU UkVFX09QRVJBTkQgKHQsIDEpOworCSAgICAgIFNUUklQX05PUFMgKHQpOworCSAgICB9CiAJ ICBpbmRpcl9jb21wb25lbnRfcmVmX3AgPSBmYWxzZTsKIAkgIGlmICgob3J0ID09IENfT1JU X0FDQyB8fCBvcnQgPT0gQ19PUlRfT01QKQogCSAgICAgICYmIFRSRUVfQ09ERSAodCkgPT0g Q09NUE9ORU5UX1JFRgotCSAgICAgICYmIFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICh0LCAw KSkgPT0gTUVNX1JFRikKKwkgICAgICAmJiAoVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKHQs IDApKSA9PSBNRU1fUkVGCisJCSAgfHwgVFJFRV9DT0RFIChUUkVFX09QRVJBTkQgKHQsIDAp KSA9PSBJTkRJUkVDVF9SRUYKKwkJICB8fCBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwg MCkpID09IEFSUkFZX1JFRikpCiAJICAgIHsKIAkgICAgICB0ID0gVFJFRV9PUEVSQU5EIChU UkVFX09QRVJBTkQgKHQsIDApLCAwKTsKIAkgICAgICBpbmRpcl9jb21wb25lbnRfcmVmX3Ag PSB0cnVlOwogCSAgICAgIFNUUklQX05PUFMgKHQpOworCSAgICAgIGlmIChUUkVFX0NPREUg KHQpID09IFBPSU5URVJfUExVU19FWFBSKQorCQl0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsK IAkgICAgfQorCiAJICBpZiAoVFJFRV9DT0RFICh0KSA9PSBDT01QT05FTlRfUkVGCiAJICAg ICAgJiYgT01QX0NMQVVTRV9DT0RFIChjKSAhPSBPTVBfQ0xBVVNFX19DQUNIRV8pCiAJICAg IHsKQEAgLTE0NzcxLDcgKzE0ODIyLDggQEAgY19maW5pc2hfb21wX2NsYXVzZXMgKHRyZWUg Y2xhdXNlcywgZW51bSBjX29tcF9yZWdpb25fdHlwZSBvcnQpCiAJCSAgICAgIGJyZWFrOwog CQkgICAgfQogCQkgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOwotCQkgIGlmIChvcnQgPT0g Q19PUlRfQUNDICYmIFRSRUVfQ09ERSAodCkgPT0gTUVNX1JFRikKKwkJICBpZiAoKG9ydCA9 PSBDX09SVF9BQ0MgfHwgb3J0ID09IENfT1JUX09NUCkKKwkJICAgICAgJiYgVFJFRV9DT0RF ICh0KSA9PSBNRU1fUkVGKQogCQkgICAgewogCQkgICAgICBpZiAobWF5YmVfbmUgKG1lbV9y ZWZfb2Zmc2V0ICh0KSwgMCkpCiAJCQllcnJvcl9hdCAoT01QX0NMQVVTRV9MT0NBVElPTiAo YyksCkBAIC0xNDc4MCw2ICsxNDgzMiwxNSBAQCBjX2ZpbmlzaF9vbXBfY2xhdXNlcyAodHJl ZSBjbGF1c2VzLCBlbnVtIGNfb21wX3JlZ2lvbl90eXBlIG9ydCkKIAkJICAgICAgZWxzZQog CQkJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CiAJCSAgICB9CisJCSAgd2hpbGUgKFRSRUVf Q09ERSAodCkgPT0gTUVNX1JFRgorCQkJIHx8IFRSRUVfQ09ERSAodCkgPT0gSU5ESVJFQ1Rf UkVGCisJCQkgfHwgVFJFRV9DT0RFICh0KSA9PSBBUlJBWV9SRUYpCisJCSAgICB7CisJCSAg ICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworCQkgICAgICBTVFJJUF9OT1BTICh0KTsK KwkJICAgICAgaWYgKFRSRUVfQ09ERSAodCkgPT0gUE9JTlRFUl9QTFVTX0VYUFIpCisJCQl0 ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkJICAgIH0KIAkJfQogCSAgICAgIGlmIChyZW1v dmUpCiAJCWJyZWFrOwpAQCAtMTQ4NDQsNyArMTQ5MDUsOCBAQCBjX2ZpbmlzaF9vbXBfY2xh dXNlcyAodHJlZSBjbGF1c2VzLCBlbnVtIGNfb21wX3JlZ2lvbl90eXBlIG9ydCkKIAkJCSAg ICAiJXFEIGFwcGVhcnMgbW9yZSB0aGFuIG9uY2UgaW4gZGF0YSBjbGF1c2VzIiwgdCk7CiAJ CSAgcmVtb3ZlID0gdHJ1ZTsKIAkJfQotCSAgICAgIGVsc2UgaWYgKGJpdG1hcF9iaXRfcCAo Jm1hcF9oZWFkLCBERUNMX1VJRCAodCkpKQorCSAgICAgIGVsc2UgaWYgKGJpdG1hcF9iaXRf cCAoJm1hcF9oZWFkLCBERUNMX1VJRCAodCkpCisJCSAgICAgICAmJiAhYml0bWFwX2JpdF9w ICgmbWFwX2ZpZWxkX2hlYWQsIERFQ0xfVUlEICh0KSkpCiAJCXsKIAkJICBpZiAob3J0ID09 IENfT1JUX0FDQykKIAkJICAgIGVycm9yX2F0IChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwK ZGlmZiAtLWdpdCBhL2djYy9jcC9wYXJzZXIuYyBiL2djYy9jcC9wYXJzZXIuYwppbmRleCBm MjU4MzNmMDc2MS4uN2I3NmI2YzZkNWMgMTAwNjQ0Ci0tLSBhL2djYy9jcC9wYXJzZXIuYwor KysgYi9nY2MvY3AvcGFyc2VyLmMKQEAgLTM1MzQ4LDExICszNTM0OCwyMiBAQCBjaGVja19u b19kdXBsaWNhdGVfY2xhdXNlICh0cmVlIGNsYXVzZXMsIGVudW0gb21wX2NsYXVzZV9jb2Rl IGNvZGUsCiAgICBUaGUgb3B0aW9uYWwgQUxMT1dfREVSRUYgYXJndW1lbnQgaXMgdHJ1ZSBp ZiBsaXN0IGl0ZW1zIGNhbiB1c2UgdGhlIGRlcmVmCiAgICAoLT4pIG9wZXJhdG9yLiAgKi8K IAorc3RydWN0IG9tcF9kaW0KK3sKKyAgdHJlZSBsb3dfYm91bmQsIGxlbmd0aDsKKyAgbG9j YXRpb25fdCBsb2M7CisgIGJvb2wgbm9fY29sb247CisgIG9tcF9kaW0gKHRyZWUgbGIsIHRy ZWUgbGVuLCBsb2NhdGlvbl90IGxvLCBib29sIG5jKQorICAgIDogbG93X2JvdW5kIChsYiks IGxlbmd0aCAobGVuKSwgbG9jIChsbyksIG5vX2NvbG9uIChuYykge30KK307CisKIHN0YXRp YyB0cmVlCiBjcF9wYXJzZXJfb21wX3Zhcl9saXN0X25vX29wZW4gKGNwX3BhcnNlciAqcGFy c2VyLCBlbnVtIG9tcF9jbGF1c2VfY29kZSBraW5kLAogCQkJCXRyZWUgbGlzdCwgYm9vbCAq Y29sb24sCiAJCQkJYm9vbCBhbGxvd19kZXJlZiA9IGZhbHNlKQogeworICBhdXRvX3ZlYzxv bXBfZGltPiBkaW1zOworICBib29sIGFycmF5X3NlY3Rpb25fcDsKICAgY3BfdG9rZW4gKnRv a2VuOwogICBib29sIHNhdmVkX2NvbG9uX2NvcnJlY3RzX3RvX3Njb3BlX3AgPSBwYXJzZXIt PmNvbG9uX2NvcnJlY3RzX3RvX3Njb3BlX3A7CiAgIGlmIChjb2xvbikKQEAgLTM1NDMzLDYg KzM1NDQ0LDcgQEAgY3BfcGFyc2VyX29tcF92YXJfbGlzdF9ub19vcGVuIChjcF9wYXJzZXIg KnBhcnNlciwgZW51bSBvbXBfY2xhdXNlX2NvZGUga2luZCwKIAkgICAgY2FzZSBPTVBfQ0xB VVNFX01BUDoKIAkgICAgY2FzZSBPTVBfQ0xBVVNFX0ZST006CiAJICAgIGNhc2UgT01QX0NM QVVTRV9UTzoKKwkgICAgc3RhcnRfY29tcG9uZW50X3JlZjoKIAkgICAgICB3aGlsZSAoY3Bf bGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5sZXhlciwgQ1BQX0RPVCkKIAkJICAgICB8 fCAoYWxsb3dfZGVyZWYKIAkJCSAmJiBjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIt PmxleGVyLCBDUFBfREVSRUYpKSkKQEAgLTM1NDU1LDE0ICszNTQ2NywxOSBAQCBjcF9wYXJz ZXJfb21wX3Zhcl9saXN0X25vX29wZW4gKGNwX3BhcnNlciAqcGFyc2VyLCBlbnVtIG9tcF9j bGF1c2VfY29kZSBraW5kLAogCSAgICBjYXNlIE9NUF9DTEFVU0VfUkVEVUNUSU9OOgogCSAg ICBjYXNlIE9NUF9DTEFVU0VfSU5fUkVEVUNUSU9OOgogCSAgICBjYXNlIE9NUF9DTEFVU0Vf VEFTS19SRURVQ1RJT046CisJICAgICAgYXJyYXlfc2VjdGlvbl9wID0gZmFsc2U7CisJICAg ICAgZGltcy50cnVuY2F0ZSAoMCk7CiAJICAgICAgd2hpbGUgKGNwX2xleGVyX25leHRfdG9r ZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9PUEVOX1NRVUFSRSkpCiAJCXsKKwkJICBsb2Nh dGlvbl90IGxvYyA9IFVOS05PV05fTE9DQVRJT047CiAJCSAgdHJlZSBsb3dfYm91bmQgPSBO VUxMX1RSRUUsIGxlbmd0aCA9IE5VTExfVFJFRTsKKwkJICBib29sIG5vX2NvbG9uID0gZmFs c2U7CiAKIAkJICBwYXJzZXItPmNvbG9uX2NvcnJlY3RzX3RvX3Njb3BlX3AgPSBmYWxzZTsK IAkJICBjcF9sZXhlcl9jb25zdW1lX3Rva2VuIChwYXJzZXItPmxleGVyKTsKIAkJICBpZiAo IWNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4ZXIsIENQUF9DT0xPTikpCiAJ CSAgICB7CisJCSAgICAgIGxvYyA9IGNwX2xleGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4 ZXIpLT5sb2NhdGlvbjsKIAkJICAgICAgbG93X2JvdW5kID0gY3BfcGFyc2VyX2V4cHJlc3Np b24gKHBhcnNlcik7CiAJCSAgICAgIC8qIExhdGVyIGhhbmRsaW5nIGlzIG5vdCBwcmVwYXJl ZCB0byBzZWUgdGhyb3VnaCB0aGVzZS4gICovCiAJCSAgICAgIGdjY19jaGVja2luZ19hc3Nl cnQgKCFsb2NhdGlvbl93cmFwcGVyX3AgKGxvd19ib3VuZCkpOwpAQCAtMzU0NzEsNyArMzU0 ODgsMTAgQEAgY3BfcGFyc2VyX29tcF92YXJfbGlzdF9ub19vcGVuIChjcF9wYXJzZXIgKnBh cnNlciwgZW51bSBvbXBfY2xhdXNlX2NvZGUga2luZCwKIAkJICAgIHBhcnNlci0+Y29sb25f Y29ycmVjdHNfdG9fc2NvcGVfcAogCQkgICAgICA9IHNhdmVkX2NvbG9uX2NvcnJlY3RzX3Rv X3Njb3BlX3A7CiAJCSAgaWYgKGNwX2xleGVyX25leHRfdG9rZW5faXMgKHBhcnNlci0+bGV4 ZXIsIENQUF9DTE9TRV9TUVVBUkUpKQotCQkgICAgbGVuZ3RoID0gaW50ZWdlcl9vbmVfbm9k ZTsKKwkJICAgIHsKKwkJICAgICAgbGVuZ3RoID0gaW50ZWdlcl9vbmVfbm9kZTsKKwkJICAg ICAgbm9fY29sb24gPSB0cnVlOworCQkgICAgfQogCQkgIGVsc2UKIAkJICAgIHsKIAkJICAg ICAgLyogTG9vayBmb3IgYDonLiAgKi8KQEAgLTM1NDg0LDYgKzM1NTA0LDggQEAgY3BfcGFy c2VyX29tcF92YXJfbGlzdF9ub19vcGVuIChjcF9wYXJzZXIgKnBhcnNlciwgZW51bSBvbXBf Y2xhdXNlX2NvZGUga2luZCwKIAkJCX0KIAkJICAgICAgaWYgKGtpbmQgPT0gT01QX0NMQVVT RV9ERVBFTkQpCiAJCQljcF9wYXJzZXJfY29tbWl0X3RvX3RlbnRhdGl2ZV9wYXJzZSAocGFy c2VyKTsKKwkJICAgICAgZWxzZQorCQkJYXJyYXlfc2VjdGlvbl9wID0gdHJ1ZTsKIAkJICAg ICAgaWYgKCFjcF9sZXhlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLAogCQkJCQkJ ICAgQ1BQX0NMT1NFX1NRVUFSRSkpCiAJCQl7CkBAIC0zNTUwMiw4ICszNTUyNCwzMiBAQCBj cF9wYXJzZXJfb21wX3Zhcl9saXN0X25vX29wZW4gKGNwX3BhcnNlciAqcGFyc2VyLCBlbnVt IG9tcF9jbGF1c2VfY29kZSBraW5kLAogCQkgICAgICBnb3RvIHNraXBfY29tbWE7CiAJCSAg ICB9CiAKLQkJICBkZWNsID0gdHJlZV9jb25zIChsb3dfYm91bmQsIGxlbmd0aCwgZGVjbCk7 CisJCSAgZGltcy5zYWZlX3B1c2ggKG9tcF9kaW0gKGxvd19ib3VuZCwgbGVuZ3RoLCBsb2Ms IG5vX2NvbG9uKSk7CisJCX0KKworCSAgICAgIGlmICgoa2luZCA9PSBPTVBfQ0xBVVNFX01B UAorCQkgICB8fCBraW5kID09IE9NUF9DTEFVU0VfRlJPTQorCQkgICB8fCBraW5kID09IE9N UF9DTEFVU0VfVE8pCisJCSAgJiYgIWFycmF5X3NlY3Rpb25fcAorCQkgICYmIChjcF9sZXhl cl9uZXh0X3Rva2VuX2lzIChwYXJzZXItPmxleGVyLCBDUFBfRE9UKQorCQkgICAgICB8fCAo YWxsb3dfZGVyZWYKKwkJCSAgJiYgY3BfbGV4ZXJfbmV4dF90b2tlbl9pcyAocGFyc2VyLT5s ZXhlciwKKwkJCQkJCSAgICAgQ1BQX0RFUkVGKSkpKQorCQl7CisJCSAgZm9yICh1bnNpZ25l ZCBpID0gMDsgaSA8IGRpbXMubGVuZ3RoICgpOyBpKyspCisJCSAgICB7CisJCSAgICAgIGdj Y19hc3NlcnQgKGRpbXNbaV0ubGVuZ3RoID09IGludGVnZXJfb25lX25vZGUpOworCQkgICAg ICBkZWNsID0gYnVpbGRfYXJyYXlfcmVmIChkaW1zW2ldLmxvYywKKwkJCQkJICAgICAgZGVj bCwgZGltc1tpXS5sb3dfYm91bmQpOworCQkgICAgfQorCQkgIGdvdG8gc3RhcnRfY29tcG9u ZW50X3JlZjsKIAkJfQorCSAgICAgIGVsc2UKKwkJeworCQkgIGZvciAodW5zaWduZWQgaSA9 IDA7IGkgPCBkaW1zLmxlbmd0aCAoKTsgaSsrKQorCQkgICAgZGVjbCA9IHRyZWVfY29ucyAo ZGltc1tpXS5sb3dfYm91bmQsIGRpbXNbaV0ubGVuZ3RoLCBkZWNsKTsKKwkJfQorCiAJICAg ICAgYnJlYWs7CiAJICAgIGRlZmF1bHQ6CiAJICAgICAgYnJlYWs7CkBAIC0zODcwMiwxMSAr Mzg3NDgsMTMgQEAgY3BfcGFyc2VyX29tcF9hbGxfY2xhdXNlcyAoY3BfcGFyc2VyICpwYXJz ZXIsIG9tcF9jbGF1c2VfbWFzayBtYXNrLAogCSAgICBjbGF1c2VzID0gY3BfcGFyc2VyX29t cF92YXJfbGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX1RPX0RFQ0xBUkUsCiAJCQkJCSAgICAg IGNsYXVzZXMpOwogCSAgZWxzZQotCSAgICBjbGF1c2VzID0gY3BfcGFyc2VyX29tcF92YXJf bGlzdCAocGFyc2VyLCBPTVBfQ0xBVVNFX1RPLCBjbGF1c2VzKTsKKwkgICAgY2xhdXNlcyA9 IGNwX3BhcnNlcl9vbXBfdmFyX2xpc3QgKHBhcnNlciwgT01QX0NMQVVTRV9UTywgY2xhdXNl cywKKwkJCQkJICAgICAgdHJ1ZSk7CiAJICBjX25hbWUgPSAidG8iOwogCSAgYnJlYWs7CiAJ Y2FzZSBQUkFHTUFfT01QX0NMQVVTRV9GUk9NOgotCSAgY2xhdXNlcyA9IGNwX3BhcnNlcl9v bXBfdmFyX2xpc3QgKHBhcnNlciwgT01QX0NMQVVTRV9GUk9NLCBjbGF1c2VzKTsKKwkgIGNs YXVzZXMgPSBjcF9wYXJzZXJfb21wX3Zhcl9saXN0IChwYXJzZXIsIE9NUF9DTEFVU0VfRlJP TSwgY2xhdXNlcywKKwkJCQkJICAgIHRydWUpOwogCSAgY19uYW1lID0gImZyb20iOwogCSAg YnJlYWs7CiAJY2FzZSBQUkFHTUFfT01QX0NMQVVTRV9VTklGT1JNOgpkaWZmIC0tZ2l0IGEv Z2NjL2NwL3NlbWFudGljcy5jIGIvZ2NjL2NwL3NlbWFudGljcy5jCmluZGV4IGY0NTcxOWJj N2IxLi5mMWZiNDE5MmMyYSAxMDA2NDQKLS0tIGEvZ2NjL2NwL3NlbWFudGljcy5jCisrKyBi L2djYy9jcC9zZW1hbnRpY3MuYwpAQCAtNDk0Miw2ICs0OTQyLDE4IEBAIGhhbmRsZV9vbXBf YXJyYXlfc2VjdGlvbnNfMSAodHJlZSBjLCB0cmVlIHQsIHZlYzx0cmVlPiAmdHlwZXMsCiAJ ICAmJiBUUkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwgMCkpID09IENPTVBPTkVOVF9SRUYp CiAJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CiAgICAgICByZXQgPSB0OworICAgICAgd2hp bGUgKFRSRUVfQ09ERSAodCkgPT0gSU5ESVJFQ1RfUkVGKQorCXsKKwkgIHQgPSBUUkVFX09Q RVJBTkQgKHQsIDApOworCSAgU1RSSVBfTk9QUyAodCk7CisJICBpZiAoVFJFRV9DT0RFICh0 KSA9PSBQT0lOVEVSX1BMVVNfRVhQUikKKwkgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisJfQorICAgICAgd2hpbGUgKFRSRUVfQ09ERSAodCkgPT0gQ09NUE9VTkRfRVhQUikKKwl7 CisJICB0ID0gVFJFRV9PUEVSQU5EICh0LCAxKTsKKwkgIFNUUklQX05PUFMgKHQpOworCX0K ICAgICAgIGlmIChUUkVFX0NPREUgKHQpID09IENPTVBPTkVOVF9SRUYKIAkgICYmIChPTVBf Q0xBVVNFX0NPREUgKGMpID09IE9NUF9DTEFVU0VfTUFQCiAJICAgICAgfHwgT01QX0NMQVVT RV9DT0RFIChjKSA9PSBPTVBfQ0xBVVNFX1RPCkBAIC00OTY2LDEyICs0OTc4LDE2IEBAIGhh bmRsZV9vbXBfYXJyYXlfc2VjdGlvbnNfMSAodHJlZSBjLCB0cmVlIHQsIHZlYzx0cmVlPiAm dHlwZXMsCiAJCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKIAkJfQogCSAgICAgIHQgPSBU UkVFX09QRVJBTkQgKHQsIDApOwotCSAgICAgIGlmICgob3J0ID09IENfT1JUX0FDQyB8fCBv cnQgPT0gQ19PUlRfT01QKQotCQkgICYmIFRSRUVfQ09ERSAodCkgPT0gSU5ESVJFQ1RfUkVG KQotCQl7Ci0JCSAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0JCSAgU1RSSVBfTk9QUyAo dCk7Ci0JCX0KKwkgICAgICBpZiAob3J0ID09IENfT1JUX0FDQyB8fCBvcnQgPT0gQ19PUlRf T01QKQorCQl3aGlsZSAoVFJFRV9DT0RFICh0KSA9PSBNRU1fUkVGCisJCSAgICAgICB8fCBU UkVFX0NPREUgKHQpID09IElORElSRUNUX1JFRgorCQkgICAgICAgfHwgVFJFRV9DT0RFICh0 KSA9PSBBUlJBWV9SRUYpCisJCSAgeworCQkgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisJCSAgICBTVFJJUF9OT1BTICh0KTsKKwkJICAgIGlmIChUUkVFX0NPREUgKHQpID09IFBP SU5URVJfUExVU19FWFBSKQorCQkgICAgICB0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkJ ICB9CiAJICAgIH0KIAkgIGlmIChSRUZFUkVOQ0VfUkVGX1AgKHQpKQogCSAgICB0ID0gVFJF RV9PUEVSQU5EICh0LCAwKTsKQEAgLTUyNjAsMTQgKzUyNzYsMjQgQEAgaGFuZGxlX29tcF9h cnJheV9zZWN0aW9uc18xICh0cmVlIGMsIHRyZWUgdCwgdmVjPHRyZWU+ICZ0eXBlcywKIAkg IHJldHVybiBlcnJvcl9tYXJrX25vZGU7CiAJfQogICAgICAgLyogSWYgdGhlcmUgaXMgYSBw b2ludGVyIHR5cGUgYW55d2hlcmUgYnV0IGluIHRoZSB2ZXJ5IGZpcnN0Ci0JIGFycmF5LXNl Y3Rpb24tc3Vic2NyaXB0LCB0aGUgYXJyYXkgc2VjdGlvbiBjYW4ndCBiZSBjb250aWd1b3Vz LiAgKi8KKwkgYXJyYXktc2VjdGlvbi1zdWJzY3JpcHQsIHRoZSBhcnJheSBzZWN0aW9uIGNv dWxkIGJlIG5vbi1jb250aWd1b3VzLiAgKi8KICAgICAgIGlmIChPTVBfQ0xBVVNFX0NPREUg KGMpICE9IE9NUF9DTEFVU0VfREVQRU5ECiAJICAmJiBUUkVFX0NPREUgKFRSRUVfQ0hBSU4g KHQpKSA9PSBUUkVFX0xJU1QpCiAJewotCSAgZXJyb3JfYXQgKE9NUF9DTEFVU0VfTE9DQVRJ T04gKGMpLAotCQkgICAgImFycmF5IHNlY3Rpb24gaXMgbm90IGNvbnRpZ3VvdXMgaW4gJXFz IGNsYXVzZSIsCi0JCSAgICBvbXBfY2xhdXNlX2NvZGVfbmFtZVtPTVBfQ0xBVVNFX0NPREUg KGMpXSk7Ci0JICByZXR1cm4gZXJyb3JfbWFya19ub2RlOworCSAgLyogSWYgYW55IHByaW9y IGRpbWVuc2lvbiBoYXMgYSBub24tb25lIGxlbmd0aCwgdGhlbiBkZWVtIHRoaXMKKwkgICAg IGFycmF5IHNlY3Rpb24gYXMgbm9uLWNvbnRpZ3VvdXMuICAqLworCSAgZm9yICh0cmVlIGQg PSBUUkVFX0NIQUlOICh0KTsgVFJFRV9DT0RFIChkKSA9PSBUUkVFX0xJU1Q7CisJICAgICAg IGQgPSBUUkVFX0NIQUlOIChkKSkKKwkgICAgeworCSAgICAgIHRyZWUgZF9sZW5ndGggPSBU UkVFX1ZBTFVFIChkKTsKKwkgICAgICBpZiAoZF9sZW5ndGggPT0gTlVMTF9UUkVFIHx8ICFp bnRlZ2VyX29uZXAgKGRfbGVuZ3RoKSkKKwkJeworCQkgIGVycm9yX2F0IChPTVBfQ0xBVVNF X0xPQ0FUSU9OIChjKSwKKwkJCSAgICAiYXJyYXkgc2VjdGlvbiBpcyBub3QgY29udGlndW91 cyBpbiAlcXMgY2xhdXNlIiwKKwkJCSAgICBvbXBfY2xhdXNlX2NvZGVfbmFtZVtPTVBfQ0xB VVNFX0NPREUgKGMpXSk7CisJCSAgcmV0dXJuIGVycm9yX21hcmtfbm9kZTsKKwkJfQorCSAg ICB9CiAJfQogICAgIH0KICAgZWxzZQpAQCAtNTUzNiwxOCArNTU2MiwzNyBAQCBoYW5kbGVf b21wX2FycmF5X3NlY3Rpb25zICh0cmVlIGMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0 KQogCSAgICAgIGRlZmF1bHQ6CiAJCWJyZWFrOwogCSAgICAgIH0KKwkgIGJvb2wgcmVmZXJl bmNlX2Fsd2F5c19wb2ludGVyID0gdHJ1ZTsKIAkgIHRyZWUgYzIgPSBidWlsZF9vbXBfY2xh dXNlIChPTVBfQ0xBVVNFX0xPQ0FUSU9OIChjKSwKIAkJCQkgICAgICBPTVBfQ0xBVVNFX01B UCk7CiAJICBpZiAoKG9ydCAmIENfT1JUX09NUF9ERUNMQVJFX1NJTUQpICE9IENfT1JUX09N UCAmJiBvcnQgIT0gQ19PUlRfQUNDKQogCSAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAo YzIsIEdPTVBfTUFQX1BPSU5URVIpOwogCSAgZWxzZSBpZiAoVFJFRV9DT0RFICh0KSA9PSBD T01QT05FTlRfUkVGKQotCSAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoYzIsIEdPTVBf TUFQX0FUVEFDSF9ERVRBQ0gpOworCSAgICB7CisJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQ X0tJTkQgKGMyLCBHT01QX01BUF9BVFRBQ0hfREVUQUNIKTsKKworCSAgICAgIGlmIChvcnQg PT0gQ19PUlRfT01QICYmIFRZUEVfUkVGX1AgKFRSRUVfVFlQRSAodCkpKQorCQl7CisJCSAg aWYgKFRSRUVfQ09ERSAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHQpKSkgPT0gQVJSQVlfVFlQ RSkKKwkJICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChjMiwgR09NUF9NQVBfQUxXQVlT X1BPSU5URVIpOworCQkgIGVsc2UKKwkJICAgIHQgPSBjb252ZXJ0X2Zyb21fcmVmZXJlbmNl ICh0KTsKKworCQkgIHJlZmVyZW5jZV9hbHdheXNfcG9pbnRlciA9IGZhbHNlOworCQl9CisJ ICAgIH0KIAkgIGVsc2UgaWYgKFJFRkVSRU5DRV9SRUZfUCAodCkKIAkJICAgJiYgVFJFRV9D T0RFIChUUkVFX09QRVJBTkQgKHQsIDApKSA9PSBDT01QT05FTlRfUkVGKQogCSAgICB7Ci0J ICAgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0JICAgICAgZ29tcF9tYXBfa2luZCBr ID0gKG9ydCA9PSBDX09SVF9BQ0MpID8gR09NUF9NQVBfQVRUQUNIX0RFVEFDSAotCQkJCQkJ ICAgOiBHT01QX01BUF9BTFdBWVNfUE9JTlRFUjsKKwkgICAgICBnb21wX21hcF9raW5kIGs7 CisJICAgICAgaWYgKG9ydCA9PSBDX09SVF9PTVAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUg KHQpKSA9PSBQT0lOVEVSX1RZUEUpCisJCWsgPSBHT01QX01BUF9BVFRBQ0hfREVUQUNIOwor CSAgICAgIGVsc2UKKwkJeworCQkgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworCQkgIGsg PSAob3J0ID09IENfT1JUX0FDQworCQkgICAgICAgPyBHT01QX01BUF9BVFRBQ0hfREVUQUNI IDogR09NUF9NQVBfQUxXQVlTX1BPSU5URVIpOworCQl9CiAJICAgICAgT01QX0NMQVVTRV9T RVRfTUFQX0tJTkQgKGMyLCBrKTsKIAkgICAgfQogCSAgZWxzZQpAQCAtNTU3MCw4ICs1NjE1 LDEwIEBAIGhhbmRsZV9vbXBfYXJyYXlfc2VjdGlvbnMgKHRyZWUgYywgZW51bSBjX29tcF9y ZWdpb25fdHlwZSBvcnQpCiAJICBPTVBfQ0xBVVNFX1NJWkUgKGMyKSA9IHQ7CiAJICBPTVBf Q0xBVVNFX0NIQUlOIChjMikgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKIAkgIE9NUF9DTEFV U0VfQ0hBSU4gKGMpID0gYzI7CisKIAkgIHB0ciA9IE9NUF9DTEFVU0VfREVDTCAoYzIpOwot CSAgaWYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMyKSAhPSBHT01QX01BUF9GSVJTVFBSSVZB VEVfUE9JTlRFUgorCSAgaWYgKHJlZmVyZW5jZV9hbHdheXNfcG9pbnRlcgorCSAgICAgICYm IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMyKSAhPSBHT01QX01BUF9GSVJTVFBSSVZBVEVfUE9J TlRFUgogCSAgICAgICYmIFRZUEVfUkVGX1AgKFRSRUVfVFlQRSAocHRyKSkKIAkgICAgICAm JiBJTkRJUkVDVF9UWVBFX1AgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChwdHIpKSkpCiAJICAg IHsKQEAgLTc2MTQsMTUgKzc2NjEsMjIgQEAgZmluaXNoX29tcF9jbGF1c2VzICh0cmVlIGNs YXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQogCQkgIGlmIChUUkVFX0NPREUg KHQpID09IENPTVBPTkVOVF9SRUYKIAkJICAgICAgJiYgVFJFRV9DT0RFIChUUkVFX1RZUEUg KHQpKSA9PSBBUlJBWV9UWVBFKQogCQkgICAgewotCQkgICAgICB3aGlsZSAoVFJFRV9DT0RF ICh0KSA9PSBDT01QT05FTlRfUkVGKQotCQkJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0J CSAgICAgIGlmIChSRUZFUkVOQ0VfUkVGX1AgKHQpKQotCQkJdCA9IFRSRUVfT1BFUkFORCAo dCwgMCk7Ci0JCSAgICAgIGlmIChUUkVFX0NPREUgKHQpID09IElORElSRUNUX1JFRikKKwkJ ICAgICAgZG8KIAkJCXsKIAkJCSAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7Ci0JCQkgIFNU UklQX05PUFMgKHQpOworCQkJICBpZiAoUkVGRVJFTkNFX1JFRl9QICh0KSkKKwkJCSAgICB0 ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkJCSAgaWYgKFRSRUVfQ09ERSAodCkgPT0gTUVN X1JFRgorCQkJICAgICAgfHwgVFJFRV9DT0RFICh0KSA9PSBJTkRJUkVDVF9SRUYpCisJCQkg ICAgeworCQkJICAgICAgdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7CisJCQkgICAgICBTVFJJ UF9OT1BTICh0KTsKKwkJCSAgICAgIGlmIChUUkVFX0NPREUgKHQpID09IFBPSU5URVJfUExV U19FWFBSKQorCQkJCXQgPSBUUkVFX09QRVJBTkQgKHQsIDApOworCQkJICAgIH0KIAkJCX0K KwkJICAgICAgd2hpbGUgKFRSRUVfQ09ERSAodCkgPT0gQ09NUE9ORU5UX1JFRik7CisKIAkJ ICAgICAgaWYgKGJpdG1hcF9iaXRfcCAoJm1hcF9maWVsZF9oZWFkLCBERUNMX1VJRCAodCkp KQogCQkJYnJlYWs7CiAJCSAgICAgIGlmIChiaXRtYXBfYml0X3AgKCZtYXBfaGVhZCwgREVD TF9VSUQgKHQpKSkKQEAgLTc2ODMsMTYgKzc3MzcsMzQgQEAgZmluaXNoX29tcF9jbGF1c2Vz ICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQogCSAgICAgICYm IFRSRUVfQ09ERSAoVFJFRV9PUEVSQU5EICh0LCAwKSkgPT0gQ09NUE9ORU5UX1JFRikKIAkg ICAgewogCSAgICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDApOwotCSAgICAgIE9NUF9DTEFV U0VfREVDTCAoYykgPSB0OworCSAgICAgIGlmIChPTVBfQ0xBVVNFX0NPREUgKGMpID09IE9N UF9DTEFVU0VfTUFQCisJCSAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgIT0gR09NUF9N QVBfQVRUQUNIX0RFVEFDSCkKKwkJT01QX0NMQVVTRV9ERUNMIChjKSA9IHQ7CisJICAgIH0K KwkgIHdoaWxlIChUUkVFX0NPREUgKHQpID09IElORElSRUNUX1JFRgorCQkgfHwgVFJFRV9D T0RFICh0KSA9PSBBUlJBWV9SRUYpCisJICAgIHsKKwkgICAgICB0ID0gVFJFRV9PUEVSQU5E ICh0LCAwKTsKKwkgICAgICBTVFJJUF9OT1BTICh0KTsKKwkgICAgICBpZiAoVFJFRV9DT0RF ICh0KSA9PSBQT0lOVEVSX1BMVVNfRVhQUikKKwkJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisJICAgIH0KKwkgIHdoaWxlIChUUkVFX0NPREUgKHQpID09IENPTVBPVU5EX0VYUFIpCisJ ICAgIHsKKwkgICAgICB0ID0gVFJFRV9PUEVSQU5EICh0LCAxKTsKKwkgICAgICBTVFJJUF9O T1BTICh0KTsKIAkgICAgfQogCSAgaW5kaXJfY29tcG9uZW50X3JlZl9wID0gZmFsc2U7CiAJ ICBpZiAoKG9ydCA9PSBDX09SVF9BQ0MgfHwgb3J0ID09IENfT1JUX09NUCkKIAkgICAgICAm JiBUUkVFX0NPREUgKHQpID09IENPTVBPTkVOVF9SRUYKLQkgICAgICAmJiBUUkVFX0NPREUg KFRSRUVfT1BFUkFORCAodCwgMCkpID09IElORElSRUNUX1JFRikKKwkgICAgICAmJiAoVFJF RV9DT0RFIChUUkVFX09QRVJBTkQgKHQsIDApKSA9PSBJTkRJUkVDVF9SRUYKKwkJICB8fCBU UkVFX0NPREUgKFRSRUVfT1BFUkFORCAodCwgMCkpID09IEFSUkFZX1JFRikpCiAJICAgIHsK IAkgICAgICB0ID0gVFJFRV9PUEVSQU5EIChUUkVFX09QRVJBTkQgKHQsIDApLCAwKTsKIAkg ICAgICBpbmRpcl9jb21wb25lbnRfcmVmX3AgPSB0cnVlOwogCSAgICAgIFNUUklQX05PUFMg KHQpOworCSAgICAgIGlmIChUUkVFX0NPREUgKHQpID09IFBPSU5URVJfUExVU19FWFBSKQor CQl0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKIAkgICAgfQogCSAgaWYgKFRSRUVfQ09ERSAo dCkgPT0gQ09NUE9ORU5UX1JFRgogCSAgICAgICYmICgob3J0ICYgQ19PUlRfT01QX0RFQ0xB UkVfU0lNRCkgPT0gQ19PUlRfT01QCkBAIC03NzI5LDYgKzc4MDEsMjUgQEAgZmluaXNoX29t cF9jbGF1c2VzICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBfcmVnaW9uX3R5cGUgb3J0KQog CQkgICAgICBicmVhazsKIAkJICAgIH0KIAkJICB0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsK KwkJICBpZiAoKG9ydCA9PSBDX09SVF9BQ0MgfHwgb3J0ID09IENfT1JUX09NUCkKKwkJICAg ICAgJiYgVFJFRV9DT0RFICh0KSA9PSBNRU1fUkVGKQorCQkgICAgeworCQkgICAgICBpZiAo bWF5YmVfbmUgKG1lbV9yZWZfb2Zmc2V0ICh0KSwgMCkpCisJCQllcnJvcl9hdCAoT01QX0NM QVVTRV9MT0NBVElPTiAoYyksCisJCQkJICAiY2Fubm90IGRlcmVmZXJlbmNlICVxRSBpbiAl cXMgY2xhdXNlIiwgdCwKKwkJCQkgIG9tcF9jbGF1c2VfY29kZV9uYW1lW09NUF9DTEFVU0Vf Q09ERSAoYyldKTsKKwkJICAgICAgZWxzZQorCQkJdCA9IFRSRUVfT1BFUkFORCAodCwgMCk7 CisJCSAgICB9CisJCSAgd2hpbGUgKFRSRUVfQ09ERSAodCkgPT0gTUVNX1JFRgorCQkJIHx8 IFRSRUVfQ09ERSAodCkgPT0gSU5ESVJFQ1RfUkVGCisJCQkgfHwgVFJFRV9DT0RFICh0KSA9 PSBBUlJBWV9SRUYpCisJCSAgICB7CisJCSAgICAgIHQgPSBUUkVFX09QRVJBTkQgKHQsIDAp OworCQkgICAgICBTVFJJUF9OT1BTICh0KTsKKwkJICAgICAgaWYgKFRSRUVfQ09ERSAodCkg PT0gUE9JTlRFUl9QTFVTX0VYUFIpCisJCQl0ID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKwkJ ICAgIH0KIAkJfQogCSAgICAgIGlmIChyZW1vdmUpCiAJCWJyZWFrOwpAQCAtNzgyOSw3ICs3 OTIwLDggQEAgZmluaXNoX29tcF9jbGF1c2VzICh0cmVlIGNsYXVzZXMsIGVudW0gY19vbXBf cmVnaW9uX3R5cGUgb3J0KQogCQkJICAgICIlcUQgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBp biBkYXRhIGNsYXVzZXMiLCB0KTsKIAkJICByZW1vdmUgPSB0cnVlOwogCQl9Ci0JICAgICAg ZWxzZSBpZiAoYml0bWFwX2JpdF9wICgmbWFwX2hlYWQsIERFQ0xfVUlEICh0KSkpCisJICAg ICAgZWxzZSBpZiAoYml0bWFwX2JpdF9wICgmbWFwX2hlYWQsIERFQ0xfVUlEICh0KSkKKwkJ ICAgICAgICYmICFiaXRtYXBfYml0X3AgKCZtYXBfZmllbGRfaGVhZCwgREVDTF9VSUQgKHQp KSkKIAkJewogCQkgIGlmIChvcnQgPT0gQ19PUlRfQUNDKQogCQkgICAgZXJyb3JfYXQgKE9N UF9DTEFVU0VfTE9DQVRJT04gKGMpLApAQCAtNzg3Niw4ICs3OTY4LDEzIEBAIGZpbmlzaF9v bXBfY2xhdXNlcyAodHJlZSBjbGF1c2VzLCBlbnVtIGNfb21wX3JlZ2lvbl90eXBlIG9ydCkK IAkgIGVsc2UKIAkgICAgewogCSAgICAgIGJpdG1hcF9zZXRfYml0ICgmbWFwX2hlYWQsIERF Q0xfVUlEICh0KSk7Ci0JICAgICAgaWYgKHQgIT0gT01QX0NMQVVTRV9ERUNMIChjKQotCQkg ICYmIFRSRUVfQ09ERSAoT01QX0NMQVVTRV9ERUNMIChjKSkgPT0gQ09NUE9ORU5UX1JFRikK KworCSAgICAgIHRyZWUgZGVjbCA9IE9NUF9DTEFVU0VfREVDTCAoYyk7CisJICAgICAgaWYg KHQgIT0gZGVjbAorCQkgICYmIChUUkVFX0NPREUgKGRlY2wpID09IENPTVBPTkVOVF9SRUYK KwkJICAgICAgfHwgKElORElSRUNUX1JFRl9QIChkZWNsKQorCQkJICAmJiBUUkVFX0NPREUg KFRSRUVfT1BFUkFORCAoZGVjbCwgMCkpID09IENPTVBPTkVOVF9SRUYKKwkJCSAgJiYgVFlQ RV9SRUZfUCAoVFJFRV9UWVBFIChUUkVFX09QRVJBTkQgKGRlY2wsIDApKSkpKSkKIAkJYml0 bWFwX3NldF9iaXQgKCZtYXBfZmllbGRfaGVhZCwgREVDTF9VSUQgKHQpKTsKIAkgICAgfQog CWhhbmRsZV9tYXBfcmVmZXJlbmNlczoKQEAgLTc5MDYsNyArODAwMyw3IEBAIGZpbmlzaF9v bXBfY2xhdXNlcyAodHJlZSBjbGF1c2VzLCBlbnVtIGNfb21wX3JlZ2lvbl90eXBlIG9ydCkK IAkJICB0cmVlIGMyID0gYnVpbGRfb21wX2NsYXVzZSAoT01QX0NMQVVTRV9MT0NBVElPTiAo YyksCiAJCQkJCSAgICAgIE9NUF9DTEFVU0VfTUFQKTsKIAkJICBpZiAoVFJFRV9DT0RFICh0 KSA9PSBDT01QT05FTlRfUkVGKQotCQkgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMy LCBHT01QX01BUF9BVFRBQ0hfREVUQUNIKTsKKwkJICAgIE9NUF9DTEFVU0VfU0VUX01BUF9L SU5EIChjMiwgR09NUF9NQVBfQUxXQVlTX1BPSU5URVIpOwogCQkgIGVsc2UKIAkJICAgIE9N UF9DTEFVU0VfU0VUX01BUF9LSU5EIChjMiwKIAkJCQkJICAgICBHT01QX01BUF9GSVJTVFBS SVZBVEVfUkVGRVJFTkNFKTsKZGlmZiAtLWdpdCBhL2djYy9mb2xkLWNvbnN0LmMgYi9nY2Mv Zm9sZC1jb25zdC5jCmluZGV4IDNiZTljMTVlNmIyLi5lMTgzMjhiN2I3ZiAxMDA2NDQKLS0t IGEvZ2NjL2ZvbGQtY29uc3QuYworKysgYi9nY2MvZm9sZC1jb25zdC5jCkBAIC0yOTQwLDkg KzI5NDAsOSBAQCBib29sCiBvcGVyYW5kX2NvbXBhcmU6Om9wZXJhbmRfZXF1YWxfcCAoY29u c3RfdHJlZSBhcmcwLCBjb25zdF90cmVlIGFyZzEsCiAJCQkJICB1bnNpZ25lZCBpbnQgZmxh Z3MpCiB7Ci0gIGJvb2wgcjsKLSAgaWYgKHZlcmlmeV9oYXNoX3ZhbHVlIChhcmcwLCBhcmcx LCBmbGFncywgJnIpKQotICAgIHJldHVybiByOworICAvL2Jvb2wgcjsKKyAgLy9pZiAodmVy aWZ5X2hhc2hfdmFsdWUgKGFyZzAsIGFyZzEsIGZsYWdzLCAmcikpCisgIC8vcmV0dXJuIHI7 CiAKICAgU1RSSVBfQU5ZX0xPQ0FUSU9OX1dSQVBQRVIgKGFyZzApOwogICBTVFJJUF9BTllf TE9DQVRJT05fV1JBUFBFUiAoYXJnMSk7CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90cmFu cy1vcGVubXAuYyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jCmluZGV4IDU2NjZjZDY4 YzdlLi43MDhhN2I0MTBlZiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmMKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmMKQEAgLTIyNTYsNiArMjI1Niw5 IEBAIGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBn ZmNfb21wX25hbWVsaXN0ICpuLAogCQkJICAgICAgIFRSRUVfVFlQRSAoVFJFRV9UWVBFIChk ZWNsKSksCiAJCQkgICAgICAgZGVjbCwgb2Zmc2V0LCBOVUxMX1RSRUUsIE5VTExfVFJFRSk7 CiAJICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUpID0gb2Zmc2V0OworCisJICBpZiAocHRyX2tp bmQgPT0gR09NUF9NQVBfQUxXQVlTX1BPSU5URVIpCisJICAgIHJldHVybjsKIAl9CiAgICAg ICBlbHNlCiAJewpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmMgYi9nY2MvZ2ltcGxpZnku YwppbmRleCBhMzE3MTFiMDEyNS4uMTI0MmNkNjIxNWUgMTAwNjQ0Ci0tLSBhL2djYy9naW1w bGlmeS5jCisrKyBiL2djYy9naW1wbGlmeS5jCkBAIC04MzYwLDcgKzgzNjAsNyBAQCBpbnNl cnRfc3RydWN0X2NvbXBfbWFwIChlbnVtIHRyZWVfY29kZSBjb2RlLCB0cmVlIGMsIHRyZWUg c3RydWN0X25vZGUsCiAKIHN0YXRpYyB0cmVlCiBleHRyYWN0X2Jhc2VfYml0X29mZnNldCAo dHJlZSBiYXNlLCB0cmVlICpiYXNlX3JlZiwgcG9seV9pbnQ2NCAqYml0cG9zcCwKLQkJCSBw b2x5X29mZnNldF9pbnQgKnBvZmZzZXRwKQorCQkJIHBvbHlfb2Zmc2V0X2ludCAqcG9mZnNl dHAsIHRyZWUgKm9mZnNldHApCiB7CiAgIHRyZWUgb2Zmc2V0OwogICBwb2x5X2ludDY0IGJp dHNpemUsIGJpdHBvczsKQEAgLTg0MDcsMTAgKzg0MDcsMTEgQEAgZXh0cmFjdF9iYXNlX2Jp dF9vZmZzZXQgKHRyZWUgYmFzZSwgdHJlZSAqYmFzZV9yZWYsIHBvbHlfaW50NjQgKmJpdHBv c3AsCiAgICAgICAmJiBUUkVFX0NPREUgKFRSRUVfVFlQRSAoVFJFRV9PUEVSQU5EIChiYXNl LCAwKSkpID09IFJFRkVSRU5DRV9UWVBFKQogICAgIGJhc2UgPSBUUkVFX09QRVJBTkQgKGJh c2UsIDApOwogCi0gIGdjY19hc3NlcnQgKG9mZnNldCA9PSBOVUxMX1RSRUUgfHwgcG9seV9p bnRfdHJlZV9wIChvZmZzZXQpKTsKLQotICBpZiAob2Zmc2V0KQotICAgIHBvZmZzZXQgPSB3 aTo6dG9fcG9seV9vZmZzZXQgKG9mZnNldCk7CisgIGlmIChvZmZzZXQgJiYgcG9seV9pbnRf dHJlZV9wIChvZmZzZXQpKQorICAgIHsKKyAgICAgIHBvZmZzZXQgPSB3aTo6dG9fcG9seV9v ZmZzZXQgKG9mZnNldCk7CisgICAgICBvZmZzZXQgPSBOVUxMX1RSRUU7CisgICAgfQogICBl bHNlCiAgICAgcG9mZnNldCA9IDA7CiAKQEAgLTg0MTksNiArODQyMCw3IEBAIGV4dHJhY3Rf YmFzZV9iaXRfb2Zmc2V0ICh0cmVlIGJhc2UsIHRyZWUgKmJhc2VfcmVmLCBwb2x5X2ludDY0 ICpiaXRwb3NwLAogCiAgICpiaXRwb3NwID0gYml0cG9zOwogICAqcG9mZnNldHAgPSBwb2Zm c2V0OworICAqb2Zmc2V0cCA9IG9mZnNldDsKIAogICAvKiBTZXQgKkJBU0VfUkVGIGlmIEJB U0Ugd2FzIGEgZGVyZWZlcmVuY2VkIHJlZmVyZW5jZSB2YXJpYWJsZS4gICovCiAgIGlmIChi YXNlX3JlZiAmJiBvcmlnX2Jhc2UgIT0gYmFzZSkKQEAgLTg0MzIsMTIgKzg0MzQsMjIgQEAg ZXh0cmFjdF9iYXNlX2JpdF9vZmZzZXQgKHRyZWUgYmFzZSwgdHJlZSAqYmFzZV9yZWYsIHBv bHlfaW50NjQgKmJpdHBvc3AsCiBzdGF0aWMgYm9vbAogaXNfb3JfY29udGFpbnNfcCAodHJl ZSBleHByLCB0cmVlIGJhc2VfcHRyKQogewotICB3aGlsZSAoZXhwciAhPSBiYXNlX3B0cikK LSAgICBpZiAoVFJFRV9DT0RFIChiYXNlX3B0cikgPT0gQ09NUE9ORU5UX1JFRikKLSAgICAg IGJhc2VfcHRyID0gVFJFRV9PUEVSQU5EIChiYXNlX3B0ciwgMCk7Ci0gICAgZWxzZQotICAg ICAgYnJlYWs7Ci0gIHJldHVybiBleHByID09IGJhc2VfcHRyOworICBpZiAoKFRSRUVfQ09E RSAoZXhwcikgPT0gSU5ESVJFQ1RfUkVGICYmIFRSRUVfQ09ERSAoYmFzZV9wdHIpID09IE1F TV9SRUYpCisgICAgICB8fCAoVFJFRV9DT0RFIChleHByKSA9PSBNRU1fUkVGICYmIFRSRUVf Q09ERSAoYmFzZV9wdHIpID09IElORElSRUNUX1JFRikpCisgICAgcmV0dXJuIG9wZXJhbmRf ZXF1YWxfcCAoVFJFRV9PUEVSQU5EIChleHByLCAwKSwKKwkJCSAgICBUUkVFX09QRVJBTkQg KGJhc2VfcHRyLCAwKSk7CisgIHdoaWxlICghb3BlcmFuZF9lcXVhbF9wIChleHByLCBiYXNl X3B0cikpCisgICAgeworICAgICAgaWYgKFRSRUVfQ09ERSAoYmFzZV9wdHIpID09IENPTVBP VU5EX0VYUFIpCisJYmFzZV9wdHIgPSBUUkVFX09QRVJBTkQgKGJhc2VfcHRyLCAxKTsKKyAg ICAgIGlmIChUUkVFX0NPREUgKGJhc2VfcHRyKSA9PSBDT01QT05FTlRfUkVGCisJICB8fCBU UkVFX0NPREUgKGJhc2VfcHRyKSA9PSBQT0lOVEVSX1BMVVNfRVhQUgorCSAgfHwgVFJFRV9D T0RFIChiYXNlX3B0cikgPT0gU0FWRV9FWFBSKQorCWJhc2VfcHRyID0gVFJFRV9PUEVSQU5E IChiYXNlX3B0ciwgMCk7CisgICAgICBlbHNlCisJYnJlYWs7CisgICAgfQorICByZXR1cm4g b3BlcmFuZF9lcXVhbF9wIChleHByLCBiYXNlX3B0cik7CiB9CiAKIC8qIEltcGxlbWVudCBP cGVuTVAgNS54IG1hcCBvcmRlcmluZyBydWxlcyBmb3IgdGFyZ2V0IGRpcmVjdGl2ZXMuIFRo ZXJlIGFyZQpAQCAtODUxNywyMSArODUyOSwxMDcgQEAgb21wX3RhcmdldF9yZW9yZGVyX2Ns YXVzZXMgKHRyZWUgKmxpc3RfcCkKIAkgICAgdHJlZSBiYXNlX3B0ciA9IFRSRUVfT1BFUkFO RCAoZGVjbCwgMCk7CiAJICAgIFNUUklQX1RZUEVfTk9QUyAoYmFzZV9wdHIpOwogCSAgICBm b3IgKHVuc2lnbmVkIGludCBqID0gaSArIDE7IGogPCBhdGYubGVuZ3RoICgpOyBqKyspCi0J ICAgICAgewotCQl0cmVlICpjcDIgPSBhdGZbal07Ci0JCXRyZWUgZGVjbDIgPSBPTVBfQ0xB VVNFX0RFQ0wgKCpjcDIpOwotCQlpZiAoaXNfb3JfY29udGFpbnNfcCAoZGVjbDIsIGJhc2Vf cHRyKSkKLQkJICB7Ci0JCSAgICAvKiBNb3ZlICpjcDIgdG8gYmVmb3JlICpjcC4gICovCi0J CSAgICB0cmVlIGMgPSAqY3AyOwotCQkgICAgKmNwMiA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMp OwotCQkgICAgT01QX0NMQVVTRV9DSEFJTiAoYykgPSAqY3A7Ci0JCSAgICAqY3AgPSBjOwot CQkgICAgYXRmW2pdID0gTlVMTDsKKwkgICAgICBpZiAoYXRmW2pdKQorCQl7CisJCSAgdHJl ZSAqY3AyID0gYXRmW2pdOworCQkgIHRyZWUgZGVjbDIgPSBPTVBfQ0xBVVNFX0RFQ0wgKCpj cDIpOworCisJCSAgZGVjbDIgPSBPTVBfQ0xBVVNFX0RFQ0wgKCpjcDIpOworCQkgIGlmIChp c19vcl9jb250YWluc19wIChkZWNsMiwgYmFzZV9wdHIpKQorCQkgICAgeworCQkgICAgICAv KiBNb3ZlICpjcDIgdG8gYmVmb3JlICpjcC4gICovCisJCSAgICAgIHRyZWUgYyA9ICpjcDI7 CisJCSAgICAgICpjcDIgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkJICAgICAgT01QX0NM QVVTRV9DSEFJTiAoYykgPSAqY3A7CisJCSAgICAgICpjcCA9IGM7CisKKwkJICAgICAgaWYg KCpjcDIgIT0gTlVMTF9UUkVFCisJCQkgICYmIE9NUF9DTEFVU0VfQ09ERSAoKmNwMikgPT0g T01QX0NMQVVTRV9NQVAKKwkJCSAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoKmNwMikgPT0g R09NUF9NQVBfQUxXQVlTX1BPSU5URVIpCisJCQl7CisJCQkgIHRyZWUgYzIgPSAqY3AyOwor CQkJICAqY3AyID0gT01QX0NMQVVTRV9DSEFJTiAoYzIpOworCQkJICBPTVBfQ0xBVVNFX0NI QUlOIChjMikgPSBPTVBfQ0xBVVNFX0NIQUlOIChjKTsKKwkJCSAgT01QX0NMQVVTRV9DSEFJ TiAoYykgPSBjMjsKKwkJCX0KKworCQkgICAgICBhdGZbal0gPSBOVUxMOwogCQkgIH0KLQkg ICAgICB9CisJCX0KIAkgIH0KICAgICAgIH0KKworICAvKiBGb3IgYXR0YWNoX2RldGFjaCBt YXAgY2xhdXNlcywgaWYgdGhlcmUgaXMgYW5vdGhlciBtYXAgdGhhdCBtYXBzIHRoZQorICAg ICBhdHRhY2hlZC9kZXRhY2hlZCBwb2ludGVyLCBtYWtlIHN1cmUgdGhhdCBtYXAgaXMgb3Jk ZXJlZCBiZWZvcmUgdGhlCisgICAgIGF0dGFjaF9kZXRhY2guICAqLworICBhdGYudHJ1bmNh dGUgKDApOworICBmb3IgKHRyZWUgKmNwID0gbGlzdF9wOyAqY3A7IGNwID0gJk9NUF9DTEFV U0VfQ0hBSU4gKCpjcCkpCisgICAgaWYgKE9NUF9DTEFVU0VfQ09ERSAoKmNwKSA9PSBPTVBf Q0xBVVNFX01BUCkKKyAgICAgIHsKKwkvKiBDb2xsZWN0IGFsbG9jLCB0bywgZnJvbSwgdG8v ZnJvbSBjbGF1c2VzLCBhbmQKKwkgICBhbHdheXNfcG9pbnRlci9hdHRhY2hfZGV0YWNoIGNs YXVzZXMuICAqLworCWdvbXBfbWFwX2tpbmQgayA9IE9NUF9DTEFVU0VfTUFQX0tJTkQgKCpj cCk7CisJaWYgKGsgPT0gR09NUF9NQVBfQUxMT0MKKwkgICAgfHwgayA9PSBHT01QX01BUF9U TworCSAgICB8fCBrID09IEdPTVBfTUFQX0ZST00KKwkgICAgfHwgayA9PSBHT01QX01BUF9U T0ZST00KKwkgICAgfHwgayA9PSBHT01QX01BUF9BTFdBWVNfVE8KKwkgICAgfHwgayA9PSBH T01QX01BUF9BTFdBWVNfRlJPTQorCSAgICB8fCBrID09IEdPTVBfTUFQX0FMV0FZU19UT0ZS T00KKwkgICAgfHwgayA9PSBHT01QX01BUF9BVFRBQ0hfREVUQUNICisJICAgIHx8IGsgPT0g R09NUF9NQVBfQUxXQVlTX1BPSU5URVIpCisJICBhdGYuc2FmZV9wdXNoIChjcCk7CisgICAg ICB9CisKKyAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBhdGYubGVuZ3RoICgpOyBp KyspCisgICAgaWYgKGF0ZltpXSkKKyAgICAgIHsKKwl0cmVlICpjcCA9IGF0ZltpXTsKKwl0 cmVlIHB0ciA9IE9NUF9DTEFVU0VfREVDTCAoKmNwKTsKKwlTVFJJUF9UWVBFX05PUFMgKHB0 cik7CisJaWYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKCpjcCkgPT0gR09NUF9NQVBfQVRUQUNI X0RFVEFDSCkKKwkgIGZvciAodW5zaWduZWQgaW50IGogPSBpICsgMTsgaiA8IGF0Zi5sZW5n dGggKCk7IGorKykKKwkgICAgeworCSAgICAgIHRyZWUgKmNwMiA9IGF0ZltqXTsKKwkgICAg ICB0cmVlIGRlY2wyID0gT01QX0NMQVVTRV9ERUNMICgqY3AyKTsKKwkgICAgICBpZiAoT01Q X0NMQVVTRV9NQVBfS0lORCAoKmNwMikgIT0gR09NUF9NQVBfQVRUQUNIX0RFVEFDSAorCQkg ICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKCpjcDIpICE9IEdPTVBfTUFQX0FMV0FZU19QT0lO VEVSCisJCSAgJiYgaXNfb3JfY29udGFpbnNfcCAoZGVjbDIsIHB0cikpCisJCXsKKwkJICAv KiBNb3ZlICpjcDIgdG8gYmVmb3JlICpjcC4gICovCisJCSAgdHJlZSBjID0gKmNwMjsKKwkJ ICAqY3AyID0gT01QX0NMQVVTRV9DSEFJTiAoYyk7CisJCSAgT01QX0NMQVVTRV9DSEFJTiAo YykgPSAqY3A7CisJCSAgKmNwID0gYzsKKwkJICBhdGZbal0gPSBOVUxMOworCisJCSAgLyog SWYgZGVjbDIgaXMgb2YgdGhlIGZvcm0gJypkZWNsMl9vcG5kMCcsIGFuZCBmb2xsb3dlZCBi eSBhbgorCQkgICAgIEFMV0FZU19QT0lOVEVSIG9yIEFUVEFDSF9ERVRBQ0ggb2YgJ2RlY2wy X29wbmQwJywgbW92ZSB0aGUKKwkJICAgICBwb2ludGVyIG9wZXJhdGlvbiBhbG9uZyB3aXRo ICpjcDIuIFRoaXMgY2FuIGhhcHBlbiBmb3IgQysrCisJCSAgICAgcmVmZXJlbmNlIHNlcXVl bmNlcy4gICovCisJCSAgaWYgKGogKyAxIDwgYXRmLmxlbmd0aCAoKQorCQkgICAgICAmJiAo VFJFRV9DT0RFIChkZWNsMikgPT0gSU5ESVJFQ1RfUkVGCisJCQkgIHx8IFRSRUVfQ09ERSAo ZGVjbDIpID09IE1FTV9SRUYpKQorCQkgICAgeworCQkgICAgICB0cmVlICpjcDMgPSBhdGZb aiArIDFdOworCQkgICAgICB0cmVlIGRlY2wzID0gT01QX0NMQVVTRV9ERUNMICgqY3AzKTsK KwkJICAgICAgdHJlZSBkZWNsMl9vcG5kMCA9IFRSRUVfT1BFUkFORCAoZGVjbDIsIDApOwor CQkgICAgICBpZiAoKE9NUF9DTEFVU0VfTUFQX0tJTkQgKCpjcDMpID09IEdPTVBfTUFQX0FM V0FZU19QT0lOVEVSCisJCQkgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EICgqY3AzKSA9PSBH T01QX01BUF9BVFRBQ0hfREVUQUNIKQorCQkJICAmJiBvcGVyYW5kX2VxdWFsX3AgKGRlY2wz LCBkZWNsMl9vcG5kMCkpCisJCQl7CisJCQkgIC8qIEFsc28gbW92ZSAqY3AzIHRvIGJlZm9y ZSAqY3AuICAqLworCQkJICBjID0gKmNwMzsKKwkJCSAgKmNwMiA9IE9NUF9DTEFVU0VfQ0hB SU4gKGMpOworCQkJICBPTVBfQ0xBVVNFX0NIQUlOIChjKSA9ICpjcDsKKwkJCSAgKmNwID0g YzsKKwkJCSAgYXRmW2ogKyAxXSA9IE5VTEw7CisJCQkgIGogKz0gMTsKKwkJCX0KKwkJICAg IH0KKwkJfQorCSAgICB9CisgICAgICB9CiB9CiAKIC8qIFNjYW4gdGhlIE9NUCBjbGF1c2Vz IGluICpMSVNUX1AsIGluc3RhbGxpbmcgbWFwcGluZ3MgaW50byBhIG5ldwpAQCAtODU0NSw2 ICs4NjQzLDcgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBn aW1wbGVfc2VxICpwcmVfcCwKICAgc3RydWN0IGdpbXBsaWZ5X29tcF9jdHggKmN0eCwgKm91 dGVyX2N0eDsKICAgdHJlZSBjOwogICBoYXNoX21hcDx0cmVlX29wZXJhbmRfaGFzaCwgdHJl ZT4gKnN0cnVjdF9tYXBfdG9fY2xhdXNlID0gTlVMTDsKKyAgaGFzaF9tYXA8dHJlZV9vcGVy YW5kX2hhc2gsIHRyZWUgKj4gKnN0cnVjdF9zZWVuX2NsYXVzZSA9IE5VTEw7CiAgIGhhc2hf c2V0PHRyZWU+ICpzdHJ1Y3RfZGVyZWZfc2V0ID0gTlVMTDsKICAgdHJlZSAqcHJldl9saXN0 X3AgPSBOVUxMLCAqb3JpZ19saXN0X3AgPSBsaXN0X3A7CiAgIGludCBoYW5kbGVkX2RlcGVu ZF9pdGVyYXRvcnMgPSAtMTsKQEAgLTkwNDUsNiArOTE0NCw3IEBAIGdpbXBsaWZ5X3NjYW5f b21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJCX0KIAkg ICAgICBib29sIGluZGlyX3AgPSBmYWxzZTsKIAkgICAgICBib29sIGNvbXBvbmVudF9yZWZf cCA9IGZhbHNlOworCSAgICAgIHRyZWUgaW5kaXJfYmFzZSA9IE5VTExfVFJFRTsKIAkgICAg ICB0cmVlIG9yaWdfZGVjbCA9IGRlY2w7CiAJICAgICAgdHJlZSBkZWNsX3JlZiA9IE5VTExf VFJFRTsKIAkgICAgICBpZiAoKHJlZ2lvbl90eXBlICYgKE9SVF9BQ0MgfCBPUlRfVEFSR0VU IHwgT1JUX1RBUkdFVF9EQVRBKSkgIT0gMApAQCAtOTA2Myw2ICs5MTYzLDcgQEAgZ2ltcGxp Znlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwK IAkJCSAgICAgID09IFBPSU5URVJfVFlQRSkpCiAJCQl7CiAJCQkgIGluZGlyX3AgPSB0cnVl OworCQkJICBpbmRpcl9iYXNlID0gZGVjbDsKIAkJCSAgZGVjbCA9IFRSRUVfT1BFUkFORCAo ZGVjbCwgMCk7CiAJCQkgIFNUUklQX05PUFMgKGRlY2wpOwogCQkJfQpAQCAtOTEwOSw3ICs5 MjEwLDkgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1w bGVfc2VxICpwcmVfcCwKIAkJCSAgICAgICAhPSBHT01QX01BUF9QT0lOVEVSKQogCQkJICAg fHwgT01QX0NMQVVTRV9ERUNMIChuZXh0X2NsYXVzZSkgIT0gZGVjbCkKIAkJICAgICAgJiYg KCFzdHJ1Y3RfZGVyZWZfc2V0Ci0JCQkgIHx8ICFzdHJ1Y3RfZGVyZWZfc2V0LT5jb250YWlu cyAoZGVjbCkpKQorCQkJICB8fCAhc3RydWN0X2RlcmVmX3NldC0+Y29udGFpbnMgKGRlY2wp KQorCQkgICAgICAmJiAoIXN0cnVjdF9tYXBfdG9fY2xhdXNlCisJCQkgIHx8ICFzdHJ1Y3Rf bWFwX3RvX2NsYXVzZS0+Z2V0IChpbmRpcl9iYXNlKSkpCiAJCSAgICB7CiAJCSAgICAgIGlm ICghc3RydWN0X2RlcmVmX3NldCkKIAkJCXN0cnVjdF9kZXJlZl9zZXQgPSBuZXcgaGFzaF9z ZXQ8dHJlZT4gKCk7CkBAIC05MTUzLDcgKzkyNTYsOCBAQCBnaW1wbGlmeV9zY2FuX29tcF9j bGF1c2VzICh0cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCSAgICAgIGlmICgo REVDTF9QIChkZWNsKQogCQkgICB8fCAoY29tcG9uZW50X3JlZl9wCiAJCSAgICAgICAmJiAo SU5ESVJFQ1RfUkVGX1AgKGRlY2wpCi0JCQkgICB8fCBUUkVFX0NPREUgKGRlY2wpID09IE1F TV9SRUYpKSkKKwkJCSAgIHx8IFRSRUVfQ09ERSAoZGVjbCkgPT0gTUVNX1JFRgorCQkJICAg fHwgVFJFRV9DT0RFIChkZWNsKSA9PSBBUlJBWV9SRUYpKSkKIAkJICAmJiBPTVBfQ0xBVVNF X01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9UT19QU0VUCiAJCSAgJiYgT01QX0NMQVVTRV9N QVBfS0lORCAoYykgIT0gR09NUF9NQVBfQVRUQUNICiAJCSAgJiYgT01QX0NMQVVTRV9NQVBf S0lORCAoYykgIT0gR09NUF9NQVBfREVUQUNICkBAIC05MTg4LDcgKzkyOTIsMTUgQEAgZ2lt cGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVf cCwKIAkJCSAgcmVtb3ZlID0gdHJ1ZTsKIAkJCSAgYnJlYWs7CiAJCQl9Ci0JCSAgICAgIGlm IChPTVBfQ0xBVVNFX0NIQUlOICgqcHJldl9saXN0X3ApICE9IGMpCisKKwkJICAgICAgLyog VGhlIGJlbG93IHByZXZfbGlzdF9wIGJhc2VkIGVycm9yIHJlY292ZXJ5IGNvZGUgaXMKKwkJ CSBjdXJyZW50bHkgbm8gbG9uZ2VyIHZhbGlkIGZvciBPcGVuTVAuICAqLworCQkgICAgICBp ZiAoY29kZSAhPSBPTVBfVEFSR0VUCisJCQkgICYmIGNvZGUgIT0gT01QX1RBUkdFVF9EQVRB CisJCQkgICYmIGNvZGUgIT0gT01QX1RBUkdFVF9VUERBVEUKKwkJCSAgJiYgY29kZSAhPSBP TVBfVEFSR0VUX0VOVEVSX0RBVEEKKwkJCSAgJiYgY29kZSAhPSBPTVBfVEFSR0VUX0VYSVRf REFUQQorCQkJICAmJiBPTVBfQ0xBVVNFX0NIQUlOICgqcHJldl9saXN0X3ApICE9IGMpCiAJ CQl7CiAJCQkgIHRyZWUgY2ggPSBPTVBfQ0xBVVNFX0NIQUlOICgqcHJldl9saXN0X3ApOwog CQkJICBpZiAoY2ggPT0gTlVMTF9UUkVFIHx8IE9NUF9DTEFVU0VfQ0hBSU4gKGNoKSAhPSBj KQpAQCAtOTIwMSwxMyArOTMxMywxNSBAQCBnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzICh0 cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCiAJCSAgcG9seV9vZmZzZXRfaW50 IG9mZnNldDE7CiAJCSAgcG9seV9pbnQ2NCBiaXRwb3MxOworCQkgIHRyZWUgdHJlZV9vZmZz ZXQxOwogCQkgIHRyZWUgYmFzZV9yZWY7CiAKIAkJICB0cmVlIGJhc2UKIAkJICAgID0gZXh0 cmFjdF9iYXNlX2JpdF9vZmZzZXQgKE9NUF9DTEFVU0VfREVDTCAoYyksICZiYXNlX3JlZiwK LQkJCQkJICAgICAgICZiaXRwb3MxLCAmb2Zmc2V0MSk7CisJCQkJCSAgICAgICAmYml0cG9z MSwgJm9mZnNldDEsCisJCQkJCSAgICAgICAmdHJlZV9vZmZzZXQxKTsKIAotCQkgIGdjY19h c3NlcnQgKGJhc2UgPT0gZGVjbCk7CisJCSAgYm9vbCBkb19tYXBfc3RydWN0ID0gKGJhc2Ug PT0gZGVjbCAmJiAhdHJlZV9vZmZzZXQxKTsKIAogCQkgIHNwbGF5X3RyZWVfbm9kZSBuCiAJ CSAgICA9IChERUNMX1AgKGRlY2wpCkBAIC05MjM5LDYgKzkzNTMsMzIgQEAgZ2ltcGxpZnlf c2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkJ ICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMsIGspOwogCQkgICAgICBoYXNfYXR0 YWNobWVudHMgPSB0cnVlOwogCQkgICAgfQorCisJCSAgLyogV2UgY3VycmVudGx5IGRvbid0 IGhhbmRsZSBub24tY29uc3RhbnQgb2Zmc2V0IGFjY2Vzc2VzIHdydCB0bworCQkgICAgIEdP TVBfTUFQX1NUUlVDVCBlbGVtZW50cy4gICovCisJCSAgaWYgKCFkb19tYXBfc3RydWN0KQor CQkgICAgZ290byBza2lwX21hcF9zdHJ1Y3Q7CisKKwkJICAvKiBOb3IgZm9yIGF0dGFjaF9k ZXRhY2ggZm9yIE9wZW5NUC4gICovCisJCSAgaWYgKChjb2RlID09IE9NUF9UQVJHRVQKKwkJ ICAgICAgIHx8IGNvZGUgPT0gT01QX1RBUkdFVF9EQVRBCisJCSAgICAgICB8fCBjb2RlID09 IE9NUF9UQVJHRVRfVVBEQVRFCisJCSAgICAgICB8fCBjb2RlID09IE9NUF9UQVJHRVRfRU5U RVJfREFUQQorCQkgICAgICAgfHwgY29kZSA9PSBPTVBfVEFSR0VUX0VYSVRfREFUQSkKKwkJ ICAgICAgJiYgYXR0YWNoX2RldGFjaCkKKwkJICAgIHsKKwkJICAgICAgaWYgKERFQ0xfUCAo ZGVjbCkpCisJCQl7CisJCQkgIGlmIChzdHJ1Y3Rfc2Vlbl9jbGF1c2UgPT0gTlVMTCkKKwkJ CSAgICBzdHJ1Y3Rfc2Vlbl9jbGF1c2UKKwkJCSAgICAgID0gbmV3IGhhc2hfbWFwPHRyZWVf b3BlcmFuZF9oYXNoLCB0cmVlICo+OworCQkJICBpZiAoIXN0cnVjdF9zZWVuX2NsYXVzZS0+ Z2V0IChkZWNsKSkKKwkJCSAgICBzdHJ1Y3Rfc2Vlbl9jbGF1c2UtPnB1dCAoZGVjbCwgbGlz dF9wKTsKKwkJCX0KKworCQkgICAgICBnb3RvIHNraXBfbWFwX3N0cnVjdDsKKwkJICAgIH0K KwogCQkgIGlmICgoREVDTF9QIChkZWNsKQogCQkgICAgICAgJiYgKG4gPT0gTlVMTCB8fCAo bi0+dmFsdWUgJiBHT1ZEX01BUCkgPT0gMCkpCiAJCSAgICAgIHx8ICghREVDTF9QIChkZWNs KQpAQCAtOTI3OCw5ICs5NDE4LDE0IEBAIGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMgKHRy ZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJCSAgICAgIHN0cnVjdF9tYXBfdG9f Y2xhdXNlLT5wdXQgKGRlY2wsIGwpOwogCQkgICAgICBpZiAocHRyIHx8IGF0dGFjaF9kZXRh Y2gpCiAJCQl7Ci0JCQkgIGluc2VydF9zdHJ1Y3RfY29tcF9tYXAgKGNvZGUsIGMsIGwsICpw cmV2X2xpc3RfcCwKKwkJCSAgdHJlZSAqKnNjID0gKHN0cnVjdF9zZWVuX2NsYXVzZQorCQkJ CSAgICAgICA/IHN0cnVjdF9zZWVuX2NsYXVzZS0+Z2V0IChkZWNsKQorCQkJCSAgICAgICA6 IE5VTEwpOworCQkJICB0cmVlICppbnNlcnRfbm9kZV9wb3MgPSBzYyA/ICpzYyA6IHByZXZf bGlzdF9wOworCisJCQkgIGluc2VydF9zdHJ1Y3RfY29tcF9tYXAgKGNvZGUsIGMsIGwsICpp bnNlcnRfbm9kZV9wb3MsCiAJCQkJCQkgIE5VTEwpOwotCQkJICAqcHJldl9saXN0X3AgPSBs OworCQkJICAqaW5zZXJ0X25vZGVfcG9zID0gbDsKIAkJCSAgcHJldl9saXN0X3AgPSBOVUxM OwogCQkJfQogCQkgICAgICBlbHNlCkBAIC05MzY1LDkgKzk1MTAsMTEgQEAgZ2ltcGxpZnlf c2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkJ CSAgICB0cmVlIHNjX2RlY2wgPSBPTVBfQ0xBVVNFX0RFQ0wgKCpzYyk7CiAJCQkgICAgcG9s eV9vZmZzZXRfaW50IG9mZnNldG47CiAJCQkgICAgcG9seV9pbnQ2NCBiaXRwb3NuOworCQkJ ICAgIHRyZWUgdHJlZV9vZmZzZXRuOwogCQkJICAgIHRyZWUgYmFzZQogCQkJICAgICAgPSBl eHRyYWN0X2Jhc2VfYml0X29mZnNldCAoc2NfZGVjbCwgTlVMTCwKLQkJCQkJCQkgJmJpdHBv c24sICZvZmZzZXRuKTsKKwkJCQkJCQkgJmJpdHBvc24sICZvZmZzZXRuLAorCQkJCQkJCSAm dHJlZV9vZmZzZXRuKTsKIAkJCSAgICBpZiAoYmFzZSAhPSBkZWNsKQogCQkJICAgICAgYnJl YWs7CiAJCQkgICAgaWYgKHNjcCkKQEAgLTk0NTUsMTYgKzk2MDIsMjEgQEAgZ2ltcGxpZnlf c2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkJ CSAgY29udGludWU7CiAJCQl9CiAJCSAgICB9CisJCXNraXBfbWFwX3N0cnVjdDoKKwkJICA7 CiAJCX0KIAkgICAgICBlbHNlIGlmICgoY29kZSA9PSBPQUNDX0VOVEVSX0RBVEEKIAkJCXx8 IGNvZGUgPT0gT0FDQ19FWElUX0RBVEEKIAkJCXx8IGNvZGUgPT0gT0FDQ19EQVRBCiAJCQl8 fCBjb2RlID09IE9BQ0NfUEFSQUxMRUwKIAkJCXx8IGNvZGUgPT0gT0FDQ19LRVJORUxTCi0J CQl8fCBjb2RlID09IE9BQ0NfU0VSSUFMKQorCQkJfHwgY29kZSA9PSBPQUNDX1NFUklBTAor CQkJfHwgY29kZSA9PSBPTVBfVEFSR0VUX0VOVEVSX0RBVEEKKwkJCXx8IGNvZGUgPT0gT01Q X1RBUkdFVF9FWElUX0RBVEEpCiAJCSAgICAgICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChj KSA9PSBHT01QX01BUF9BVFRBQ0hfREVUQUNIKQogCQl7Ci0JCSAgZ29tcF9tYXBfa2luZCBr ID0gKGNvZGUgPT0gT0FDQ19FWElUX0RBVEEKKwkJICBnb21wX21hcF9raW5kIGsgPSAoKGNv ZGUgPT0gT0FDQ19FWElUX0RBVEEKKwkJCQkgICAgICB8fCBjb2RlID09IE9NUF9UQVJHRVRf RVhJVF9EQVRBKQogCQkJCSAgICAgPyBHT01QX01BUF9ERVRBQ0ggOiBHT01QX01BUF9BVFRB Q0gpOwogCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChjLCBrKTsKIAkJfQpAQCAtMTAx MTMsNiArMTAyNjUsOCBAQCBnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0 X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCiAgIGN0eC0+Y2xhdXNlcyA9ICpvcmlnX2xpc3Rf cDsKICAgZ2ltcGxpZnlfb21wX2N0eHAgPSBjdHg7CisgIGlmIChzdHJ1Y3Rfc2Vlbl9jbGF1 c2UpCisgICAgZGVsZXRlIHN0cnVjdF9zZWVuX2NsYXVzZTsKICAgaWYgKHN0cnVjdF9tYXBf dG9fY2xhdXNlKQogICAgIGRlbGV0ZSBzdHJ1Y3RfbWFwX3RvX2NsYXVzZTsKICAgaWYgKHN0 cnVjdF9kZXJlZl9zZXQpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9nb2FjYy9kZWVwLWNvcHktYXJyYXlvZnN0cnVjdC5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vZ29hY2MvZGVlcC1jb3B5LWFycmF5b2ZzdHJ1Y3QuYwppbmRleCBkNDExYmNm YThlNy4uNDI0NzYwN2I2MWMgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvYy1jKystY29t bW9uL2dvYWNjL2RlZXAtY29weS1hcnJheW9mc3RydWN0LmMKKysrIGIvZ2NjL3Rlc3RzdWl0 ZS9jLWMrKy1jb21tb24vZ29hY2MvZGVlcC1jb3B5LWFycmF5b2ZzdHJ1Y3QuYwpAQCAtMzcs MTMgKzM3LDEyIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiAgICAgewog ICAgICAgaW50IGosIGs7CiAgICAgICBmb3IgKGsgPSAwOyBrIDwgUzsgaysrKQotI3ByYWdt YSBhY2MgcGFyYWxsZWwgbG9vcCBjb3B5KG1ba10uYVswOk5dKSAvKiB7IGRnLWVycm9yICJl eHBlY3RlZCAuXFxcKS4gYmVmb3JlIC5cXFwuLiB0b2tlbiIgfSAqLworI3ByYWdtYSBhY2Mg cGFyYWxsZWwgbG9vcCBjb3B5KG1ba10uYVswOk5dKQogICAgICAgICBmb3IgKGogPSAwOyBq IDwgTjsgaisrKQogICAgICAgICAgIG1ba10uYVtqXSsrOwogCiAgICAgICBmb3IgKGsgPSAw OyBrIDwgUzsgaysrKQotI3ByYWdtYSBhY2MgcGFyYWxsZWwgbG9vcCBjb3B5KG1ba10uYlsw Ok5dLCBtW2tdLmNbNTpOLTEwXSkgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgLlxcXCkuIGJl Zm9yZSAuXFxcLi4gdG9rZW4iIH0gKi8KLQkvKiB7IGRnLWVycm9yICIubS4gYXBwZWFycyBt b3JlIHRoYW4gb25jZSBpbiBkYXRhIGNsYXVzZXMiICIiIHsgdGFyZ2V0IGMrKyB9IC4tMSB9 ICovCisjcHJhZ21hIGFjYyBwYXJhbGxlbCBsb29wIGNvcHkobVtrXS5iWzA6Tl0sIG1ba10u Y1s1Ok4tMTBdKQogCWZvciAoaiA9IDA7IGogPCBOOyBqKyspCiAJICB7CiAJICAgIG1ba10u YltqXSsrOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1jb21tb24vZ29tcC90 YXJnZXQtZW50ZXItZGF0YS0xLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb21w L3RhcmdldC1lbnRlci1kYXRhLTEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uY2U3NjZkMjllMmQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9nb21wL3RhcmdldC1lbnRlci1kYXRhLTEuYwpAQCAtMCwwICsxLDI0 IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1hZGRpdGlvbmFsLW9wdGlv bnMgIi1mb3Blbm1wIC1mZHVtcC10cmVlLWdpbXBsZSIgfSAqLworCitzdHJ1Y3QgYmFyCit7 CisgIGludCBudW1fdmVjdG9yczsKKyAgZG91YmxlICp2ZWN0b3JzOworfTsKKworc3RydWN0 IGZvbworeworICBpbnQgbnVtX3ZlY3RvcnM7CisgIHN0cnVjdCBiYXIgKmJhcnM7CisgIGRv dWJsZSAqKnZlY3RvcnM7Cit9OworCit2b2lkIGZ1bmMgKHN0cnVjdCBmb28gKmYsIGludCBu LCBpbnQgbSkKK3sKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwICh0bzog Zi0+dmVjdG9yc1ttXVs6bl0pCisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cCAodG86IGYtPmJhcnNbbl0udmVjdG9yc1s6bV0pCisgICNwcmFnbWEgb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcCAodG86IGYtPmJhcnNbbl0udmVjdG9yc1s6Zi0+YmFyc1tuXS5udW1f dmVjdG9yc10pCit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi bWFwXFwodG86XFwqX1xbMC05XF0rIFxcXFtsZW46IF9cWzAtOVxdK1xcXF1cXCkgbWFwXFwo YXR0YWNoOlxbXi1cXSstPnZlY3RvcnMgXFxcW2JpYXM6IFxbXlxdXF0rXFxcXVxcKSIgMyAi Z2ltcGxlIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9u L2dvbXAvdGFyZ2V0LWltcGxpY2l0LW1hcC0yLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNv bW1vbi9nb21wL3RhcmdldC1pbXBsaWNpdC1tYXAtMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi4zYWExYThmYzU1ZQotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvdGFyZ2V0LWltcGxpY2l0LW1hcC0yLmMK QEAgLTAsMCArMSw1MiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItZmR1bXAtdHJlZS1naW1wbGUiIH0gKi8KKyNpbmNsdWRlIDxz dGRsaWIuaD4KKworI2RlZmluZSBOIDEwCisKK3N0cnVjdCBTCit7CisgIGludCBhLCBiOwor ICBpbnQgKnB0cjsKKyAgaW50IGMsIGQ7Cit9OworCitpbnQKK21haW4gKHZvaWQpCit7Cisg IHN0cnVjdCBTIGE7CisgIGEucHRyID0gKGludCAqKSBtYWxsb2MgKHNpemVvZiAoaW50KSAq IE4pOworCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgIGEucHRyW2ldID0g MDsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IGEucHRyLCBh LnB0cls6Tl0pCisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0CisgIGZvciAoaW50IGkgPSAwOyBp IDwgTjsgaSsrKQorICAgIGEucHRyW2ldICs9IDE7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0 IHVwZGF0ZSBmcm9tKGEucHRyWzpOXSkKKworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkr KykKKyAgICBpZiAoYS5wdHJbaV0gIT0gMSkKKyAgICAgIGFib3J0ICgpOworCisgICNwcmFn bWEgb21wIHRhcmdldCBtYXAoYS5wdHJbOk5dKQorICBmb3IgKGludCBpID0gMDsgaSA8IE47 IGkrKykKKyAgICBhLnB0cltpXSArPSAxOworCisgICNwcmFnbWEgb21wIHRhcmdldCB1cGRh dGUgZnJvbShhLnB0cls6Tl0pCisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisg ICAgaWYgKGEucHRyW2ldICE9IDIpCisgICAgICBhYm9ydCAoKTsKKworICAjcHJhZ21hIG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOmEucHRyLCBhLnB0cls6Tl0pCisKKyAgcmV0 dXJuIDA7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCB7I3ByYWdtYSBv bXAgdGFyZ2V0IG51bV90ZWFtcy4qIG1hcFwodG9mcm9tOmEgXFtsZW46IFswLTldK1xdXFtp bXBsaWNpdFxdXCl9ICJnaW1wbGUiIH0gfSAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAgeyNwcmFnbWEgb21wIHRhcmdldCBudW1fdGVhbXMuKiBtYXBcKHRvZnJvbTph IFxbbGVuOiBbMC05XStcXVxbaW1wbGljaXRcXVwpIG1hcFwodG9mcm9tOlwqX1swLTldKyBc W2xlbjogWzAtOV0rXF1cKSBtYXBcKGF0dGFjaDphXC5wdHIgXFtiaWFzOiAwXF1cKX0gImdp bXBsZSIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9nb21wL3Rh cmdldC1sYW1iZGEtMS5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZ29tcC90YXJnZXQtbGFt YmRhLTEuQwppbmRleCA3ZGNlZWY4MGY0Ny4uZTVhMjRkN2FiYzQgMTAwNjQ0Ci0tLSBhL2dj Yy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LWxhbWJkYS0xLkMKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nKysuZGcvZ29tcC90YXJnZXQtbGFtYmRhLTEuQwpAQCAtODcsOCArODcsOCBA QCBpbnQgbWFpbiAodm9pZCkKICAgcmV0dXJuIDA7CiB9CiAKLS8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcCB7I3ByYWdtYSBvbXAgdGFyZ2V0IG51bV90ZWFtcy4qIG1hcFwodG86 XCpfX2Nsb3N1cmUgXFtsZW46IFswLTldK1xdXCkgbWFwXChmaXJzdHByaXZhdGU6X19jbG9z dXJlIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoX3plcm9fbGVu Z3RoX2FycmF5X3NlY3Rpb246X19jbG9zdXJlLT5fX2lwdHIgXFtiaWFzOiAwXF1cKSBtYXBc KHN0cnVjdDpcKl9fY2xvc3VyZSBcW2xlbjogMVxdXCkgbWFwXChhbGxvYzpfX2Nsb3N1cmUt Pl9fdGhpcyBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKHRvZnJvbTpcKl9bMC05XSsgXFtsZW46 IFswLTldK1xdXCkgbWFwXChhbHdheXNfcG9pbnRlcjpfX2Nsb3N1cmUtPl9fdGhpcyBcW3Bv aW50ZXIgYXNzaWduLCBiaWFzOiAwXF1cKSBtYXBcKGF0dGFjaF96ZXJvX2xlbmd0aF9hcnJh eV9zZWN0aW9uOl9bMC05XSstPnB0ciBcW2JpYXM6IDBcXVwpIG1hcFwoZnJvbTptYXBwZWQg XFtsZW46IFswLTldK1xdXCkgbWFwXChhbGxvYzpcKl9bMC05XSsgXFtsZW46IDBcXVwpIG1h cFwoYWxsb2M6XCpfWzAtOV0rIFxbbGVuOiAwXF1cKSBmaXJzdHByaXZhdGVcKGJcKSBtYXBc KGFsbG9jOk1FTS4qIFxbbGVuOiAwXF1cKSBtYXBcKGZpcnN0cHJpdmF0ZTppcHRyIFxbcG9p bnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwoYWxsb2M6TUVNLiogXFtsZW46IDBcXVwp IG1hcFwoZmlyc3Rwcml2YXRlOnRoaXMgXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxdXCl9 ICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wIHsjcHJh Z21hIG9tcCB0YXJnZXQgbnVtX3RlYW1zLiogZmlyc3Rwcml2YXRlXChiXCkgbWFwXChhbGxv YzpNRU0uKiBcW2xlbjogMFxdXCkgbWFwXChmaXJzdHByaXZhdGU6aXB0ciBcW3BvaW50ZXIg YXNzaWduLCBiaWFzOiAwXF1cKSBtYXBcKGFsbG9jOk1FTS4qIFxbbGVuOiAwXF1cKSBtYXBc KGZpcnN0cHJpdmF0ZTp0aGlzIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwo dG86XCpfX2Nsb3N1cmUgXFtsZW46IFswLTldK1xdXCkgbWFwXChmaXJzdHByaXZhdGU6X19j bG9zdXJlIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoX3plcm9f bGVuZ3RoX2FycmF5X3NlY3Rpb246X19jbG9zdXJlLT5fX2lwdHIgXFtiaWFzOiAwXF1cKSBt YXBcKHN0cnVjdDpcKl9fY2xvc3VyZSBcW2xlbjogMVxdXCkgbWFwXChhbGxvYzpfX2Nsb3N1 cmUtPl9fdGhpcyBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKHRvZnJvbTpcKl9bMC05XSsgXFts ZW46IFswLTldK1xdXCkgbWFwXChhbHdheXNfcG9pbnRlcjpfX2Nsb3N1cmUtPl9fdGhpcyBc W3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXF1cKSBtYXBcKGF0dGFjaF96ZXJvX2xlbmd0aF9h cnJheV9zZWN0aW9uOl9bMC05XSstPnB0ciBcW2JpYXM6IDBcXVwpIG1hcFwoZnJvbTptYXBw ZWQgXFtsZW46IFswLTldK1xdXCkgbWFwXChhbGxvYzpcKl9bMC05XSsgXFtsZW46IDBcXVwp IG1hcFwoYWxsb2M6XCpfWzAtOV0rIFxbbGVuOiAwXF1cKX0gImdpbXBsZSIgfSB9ICovCiAK LS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCB7I3ByYWdtYSBvbXAgdGFyZ2V0IG51 bV90ZWFtcy4qIG1hcFwodG86bG9vcCBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKGF0dGFjaF96 ZXJvX2xlbmd0aF9hcnJheV9zZWN0aW9uOmxvb3BcLl9fZGF0YTEgXFtiaWFzOiAwXF1cKSBt YXBcKGFsbG9jOlwqX1swLTldKyBcW2xlbjogMFxdXCkgZmlyc3Rwcml2YXRlXChlbmRcKSBm aXJzdHByaXZhdGVcKGJlZ2luXCl9ICJnaW1wbGUiIH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wIHsjcHJhZ21hIG9tcCB0YXJnZXQgbnVtX3RlYW1zLiogZmlyc3Rw cml2YXRlXChlbmRcKSBmaXJzdHByaXZhdGVcKGJlZ2luXCkgbWFwXCh0bzpsb29wIFxbbGVu OiBbMC05XStcXVwpIG1hcFwoYXR0YWNoX3plcm9fbGVuZ3RoX2FycmF5X3NlY3Rpb246bG9v cFwuX19kYXRhMSBcW2JpYXM6IDBcXVwpIG1hcFwoYWxsb2M6XCpfWzAtOV0rIFxbbGVuOiAw XF1cKX0gImdpbXBsZSIgfSB9ICovCiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cCB7I3ByYWdtYSBvbXAgdGFyZ2V0IG51bV90ZWFtcy4qIG1hcFwodG86bG9vcCBcW2xlbjog WzAtOV0rXF1cKSBtYXBcKGF0dGFjaF96ZXJvX2xlbmd0aF9hcnJheV9zZWN0aW9uOmxvb3Bc Ll9fZGF0YTIgXFtiaWFzOiAwXF1cKSBtYXBcKGFsbG9jOlwqX1swLTldKyBcW2xlbjogMFxd XCkgZmlyc3Rwcml2YXRlXChlbmRcKSBmaXJzdHByaXZhdGVcKGJlZ2luXCl9ICJnaW1wbGUi IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wIHsjcHJhZ21hIG9tcCB0 YXJnZXQgbnVtX3RlYW1zLiogZmlyc3Rwcml2YXRlXChlbmRcKSBmaXJzdHByaXZhdGVcKGJl Z2luXCkgbWFwXCh0bzpsb29wIFxbbGVuOiBbMC05XStcXVwpIG1hcFwoYXR0YWNoX3plcm9f bGVuZ3RoX2FycmF5X3NlY3Rpb246bG9vcFwuX19kYXRhMiBcW2JpYXM6IDBcXVwpIG1hcFwo YWxsb2M6XCpfWzAtOV0rIFxbbGVuOiAwXF1cKX0gImdpbXBsZSIgfSB9ICovCmRpZmYgLS1n aXQgYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9nb21wL3RhcmdldC10aGlzLTMuQyBiL2djYy90 ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LXRoaXMtMy5DCmluZGV4IDA4NTY4ZjkyODRj Li4yNzU1YjRiNThiZCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZ29tcC90 YXJnZXQtdGhpcy0zLkMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZ29tcC90YXJnZXQt dGhpcy0zLkMKQEAgLTEwMCw2ICsxMDAsNiBAQCBpbnQgbWFpbiAodm9pZCkKICAgcmV0dXJu IDA7CiB9CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCB7I3ByYWdtYSBvbXAg dGFyZ2V0IG51bV90ZWFtcy4qIG1hcFwodG9mcm9tOlwqdGhpcyBcW2xlbjogWzAtOV0rXF1c KSBtYXBcKGZpcnN0cHJpdmF0ZTp0aGlzIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwp IG1hcFwoYWxsb2M6XCpfWzAtOV0rIFxbcG9pbnRlciBhc3NpZ24sIHplcm8tbGVuZ3RoIGFy cmF5IHNlY3Rpb24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoOnRoaXMtPnJlZnB0ciBcW2Jp YXM6IDBcXVwpIG1hcFwoZnJvbTptYXBwZWQgXFtsZW46IFswLTldK1xdXCkgbWFwXChhbGxv YzpcKl9bMC05K10gXFtsZW46IDBcXVwpIGZpcnN0cHJpdmF0ZVwoblwpfSAiZ2ltcGxlIiB9 IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCB7I3ByYWdtYSBvbXAgdGFy Z2V0IG51bV90ZWFtcy4qIGZpcnN0cHJpdmF0ZVwoblwpIG1hcFwodG9mcm9tOlwqdGhpcyBc W2xlbjogWzAtOV0rXF1cKSBtYXBcKGZpcnN0cHJpdmF0ZTp0aGlzIFxbcG9pbnRlciBhc3Np Z24sIGJpYXM6IDBcXVwpIG1hcFwoYWxsb2M6XCpfWzAtOV0rIFxbcG9pbnRlciBhc3NpZ24s IHplcm8tbGVuZ3RoIGFycmF5IHNlY3Rpb24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoOnRo aXMtPnJlZnB0ciBcW2JpYXM6IDBcXVwpIG1hcFwoZnJvbTptYXBwZWQgXFtsZW46IFswLTld K1xdXCkgbWFwXChhbGxvYzpcKl9bMC05K10gXFtsZW46IDBcXVwpfSAiZ2ltcGxlIiB9IH0g Ki8KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wIHsjcHJhZ21hIG9tcCB0YXJn ZXQgbnVtX3RlYW1zLiogbWFwXCh0b2Zyb206XCp0aGlzIFxbbGVuOiBbMC05XStcXVwpIG1h cFwoZmlyc3Rwcml2YXRlOnRoaXMgXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxdXCkgbWFw XChhdHRhY2hfemVyb19sZW5ndGhfYXJyYXlfc2VjdGlvbjp0aGlzLT5wdHIgXFtiaWFzOiAw XF1cKSBtYXBcKGZyb206bWFwcGVkIFxbbGVuOiBbMC05XStcXVwpIG1hcFwoYWxsb2M6XCpf WzAtOV0rIFxbbGVuOiAwXF1cKSBmaXJzdHByaXZhdGVcKG5cKX0gImdpbXBsZSIgfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgeyNwcmFnbWEgb21wIHRhcmdldCBu dW1fdGVhbXMuKiBmaXJzdHByaXZhdGVcKG5cKSBtYXBcKHRvZnJvbTpcKnRoaXMgXFtsZW46 IFswLTldK1xdXCkgbWFwXChmaXJzdHByaXZhdGU6dGhpcyBcW3BvaW50ZXIgYXNzaWduLCBi aWFzOiAwXF1cKSBtYXBcKGF0dGFjaF96ZXJvX2xlbmd0aF9hcnJheV9zZWN0aW9uOnRoaXMt PnB0ciBcW2JpYXM6IDBcXVwpIG1hcFwoZnJvbTptYXBwZWQgXFtsZW46IFswLTldK1xdXCkg bWFwXChhbGxvYzpcKl9bMC05XSsgXFtsZW46IDBcXVwpfSAiZ2ltcGxlIiB9IH0gKi8KZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvdGFyZ2V0LXRoaXMtNC5DIGIv Z2NjL3Rlc3RzdWl0ZS9nKysuZGcvZ29tcC90YXJnZXQtdGhpcy00LkMKaW5kZXggM2IyZDU4 MTEzNTAuLjM3MDM3NjJmNDVhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2crKy5kZy9n b21wL3RhcmdldC10aGlzLTQuQworKysgYi9nY2MvdGVzdHN1aXRlL2crKy5kZy9nb21wL3Rh cmdldC10aGlzLTQuQwpAQCAtMTAyLDYgKzEwMiw2IEBAIGludCBtYWluICh2b2lkKQogICBy ZXR1cm4gMDsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wIHsjcHJhZ21h IG9tcCB0YXJnZXQgbnVtX3RlYW1zLiogbWFwXCh0bzpcKl9fY2xvc3VyZSBcW2xlbjogWzAt OV0rXF1cKSBtYXBcKGZpcnN0cHJpdmF0ZTpfX2Nsb3N1cmUgXFtwb2ludGVyIGFzc2lnbiwg YmlhczogMFxdXCkgbWFwXChzdHJ1Y3Q6XCpfX2Nsb3N1cmUgXFtsZW46IDFcXVwpIG1hcFwo YWxsb2M6X19jbG9zdXJlLT5fX3RoaXMgXFtsZW46IFswLTldK1xdXCkgbWFwXCh0b2Zyb206 XCpfWzAtOV0rIFxbbGVuOiBbMC05XStcXVwpIG1hcFwoYWx3YXlzX3BvaW50ZXI6X19jbG9z dXJlLT5fX3RoaXMgXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxdXCkgbWFwXChhdHRhY2hf emVyb19sZW5ndGhfYXJyYXlfc2VjdGlvbjpfWzAtOV0rLT5wdHIgXFtiaWFzOiAwXF1cKSBt YXBcKGZyb206bWFwcGVkIFxbbGVuOiAxXF1cKSBtYXBcKGFsbG9jOlwqX1swLTldKyBcW2xl bjogMFxdXCkgZmlyc3Rwcml2YXRlXChuXCkgbWFwXChhbGxvYzpNRU0uKiBcW2xlbjogMFxd XCkgbWFwXChmaXJzdHByaXZhdGU6dGhpcyBcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXF1c KX0gImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgeyNw cmFnbWEgb21wIHRhcmdldCBudW1fdGVhbXMuKiBmaXJzdHByaXZhdGVcKG5cKSBtYXBcKGFs bG9jOk1FTS4qIFxbbGVuOiAwXF1cKSBtYXBcKGZpcnN0cHJpdmF0ZTp0aGlzIFxbcG9pbnRl ciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwodG86XCpfX2Nsb3N1cmUgXFtsZW46IFswLTld K1xdXCkgbWFwXChmaXJzdHByaXZhdGU6X19jbG9zdXJlIFxbcG9pbnRlciBhc3NpZ24sIGJp YXM6IDBcXVwpIG1hcFwoc3RydWN0OlwqX19jbG9zdXJlIFxbbGVuOiAxXF1cKSBtYXBcKGFs bG9jOl9fY2xvc3VyZS0+X190aGlzIFxbbGVuOiBbMC05XStcXVwpIG1hcFwodG9mcm9tOlwq X1swLTldKyBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKGFsd2F5c19wb2ludGVyOl9fY2xvc3Vy ZS0+X190aGlzIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoX3pl cm9fbGVuZ3RoX2FycmF5X3NlY3Rpb246X1swLTldKy0+cHRyIFxbYmlhczogMFxdXCkgbWFw XChmcm9tOm1hcHBlZCBcW2xlbjogMVxdXCkgbWFwXChhbGxvYzpcKl9bMC05XSsgXFtsZW46 IDBcXVwpfSAiZ2ltcGxlIiB9IH0gKi8KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1k dW1wIHsjcHJhZ21hIG9tcCB0YXJnZXQgbnVtX3RlYW1zLiogbWFwXCh0bzpcKl9fY2xvc3Vy ZSBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKGZpcnN0cHJpdmF0ZTpfX2Nsb3N1cmUgXFtwb2lu dGVyIGFzc2lnbiwgYmlhczogMFxdXCkgbWFwXChzdHJ1Y3Q6XCpfX2Nsb3N1cmUgXFtsZW46 IDFcXVwpIG1hcFwoYWxsb2M6X19jbG9zdXJlLT5fX3RoaXMgXFtsZW46IFswLTldK1xdXCkg bWFwXCh0b2Zyb206XCpfWzAtOV0rIFxbbGVuOiBbMC05XStcXVwpIG1hcFwoYWx3YXlzX3Bv aW50ZXI6X19jbG9zdXJlLT5fX3RoaXMgXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxdXCkg bWFwXChhbGxvYzpcKl9bMC05XSsgXFtwb2ludGVyIGFzc2lnbiwgemVyby1sZW5ndGggYXJy YXkgc2VjdGlvbiwgYmlhczogMFxdXCkgbWFwXChhdHRhY2g6X1swLTldKy0+cmVmcHRyIFxb YmlhczogMFxdXCkgbWFwXChmcm9tOm1hcHBlZCBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKGFs bG9jOlwqX1swLTldKyBcW2xlbjogMFxdXCkgZmlyc3Rwcml2YXRlXChuXCkgbWFwXChhbGxv YzpNRU0uKiBcW2xlbjogMFxdXCkgbWFwXChmaXJzdHByaXZhdGU6dGhpcyBcW3BvaW50ZXIg YXNzaWduLCBiaWFzOiAwXF1cKX0gImdpbXBsZSIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAgeyNwcmFnbWEgb21wIHRhcmdldCBudW1fdGVhbXMuKiBmaXJzdHBy aXZhdGVcKG5cKSBtYXBcKGFsbG9jOk1FTS4qIFxbbGVuOiAwXF1cKSBtYXBcKGZpcnN0cHJp dmF0ZTp0aGlzIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwodG86XCpfX2Ns b3N1cmUgXFtsZW46IFswLTldK1xdXCkgbWFwXChmaXJzdHByaXZhdGU6X19jbG9zdXJlIFxb cG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXVwpIG1hcFwoc3RydWN0OlwqX19jbG9zdXJlIFxb bGVuOiAxXF1cKSBtYXBcKGFsbG9jOl9fY2xvc3VyZS0+X190aGlzIFxbbGVuOiBbMC05XStc XVwpIG1hcFwodG9mcm9tOlwqX1swLTldKyBcW2xlbjogWzAtOV0rXF1cKSBtYXBcKGFsd2F5 c19wb2ludGVyOl9fY2xvc3VyZS0+X190aGlzIFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBc XVwpIG1hcFwoYWxsb2M6XCpfWzAtOV0rIFxbcG9pbnRlciBhc3NpZ24sIHplcm8tbGVuZ3Ro IGFycmF5IHNlY3Rpb24sIGJpYXM6IDBcXVwpIG1hcFwoYXR0YWNoOl9bMC05XSstPnJlZnB0 ciBcW2JpYXM6IDBcXVwpIG1hcFwoZnJvbTptYXBwZWQgXFtsZW46IFswLTldK1xdXCkgbWFw XChhbGxvYzpcKl9bMC05XSsgXFtsZW46IDBcXVwpfSAiZ2ltcGxlIiB9IH0gKi8KZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGFyZ2V0LmMgYi9saWJnb21wL3RhcmdldC5jCmluZGV4IGEzYWFm OGVmNWJhLi5lNTdlOWYwYmFiOCAxMDA2NDQKLS0tIGEvbGliZ29tcC90YXJnZXQuYworKysg Yi9saWJnb21wL3RhcmdldC5jCkBAIC00MDksMTEgKzQwOSwzMCBAQCBnb21wX21hcF92YXJz X2V4aXN0aW5nIChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsCiAJIGFkZHJl c3MvbGVuZ3RoIGFkanVzdG1lbnQgaXMgYSBUT0RPLiAgKi8KICAgICAgIGFzc2VydCAoIWlt cGxpY2l0X3N1YnNldCk7CiAKLSAgICAgIGdvbXBfY29weV9ob3N0MmRldiAoZGV2aWNlcCwg YXEsCi0JCQkgICh2b2lkICopIChvbGRuLT50Z3QtPnRndF9zdGFydCArIG9sZG4tPnRndF9v ZmZzZXQKLQkJCQkgICAgKyBuZXduLT5ob3N0X3N0YXJ0IC0gb2xkbi0+aG9zdF9zdGFydCks Ci0JCQkgICh2b2lkICopIG5ld24tPmhvc3Rfc3RhcnQsCi0JCQkgIG5ld24tPmhvc3RfZW5k IC0gbmV3bi0+aG9zdF9zdGFydCwgY2J1Zik7CisgICAgICBpZiAob2xkbi0+YXV4ICYmIG9s ZG4tPmF1eC0+YXR0YWNoX2NvdW50KQorCXsKKwkgIC8qIFdlIGhhdmUgdG8gYmUgY2FyZWZ1 bCBub3QgdG8gb3ZlcndyaXRlIHN0aWxsIGF0dGFjaGVkIHBvaW50ZXJzCisJICAgICBkdXJp bmcgdGhlIGNvcHliYWNrIHRvIGhvc3QuICAqLworCSAgdWludHB0cl90IGFkZHIgPSBuZXdu LT5ob3N0X3N0YXJ0OworCSAgd2hpbGUgKGFkZHIgPCBuZXduLT5ob3N0X2VuZCkKKwkgICAg eworCSAgICAgIHNpemVfdCBpID0gKGFkZHIgLSBvbGRuLT5ob3N0X3N0YXJ0KSAvIHNpemVv ZiAodm9pZCAqKTsKKwkgICAgICBpZiAob2xkbi0+YXV4LT5hdHRhY2hfY291bnRbaV0gPT0g MCkKKwkJZ29tcF9jb3B5X2hvc3QyZGV2IChkZXZpY2VwLCBhcSwKKwkJCQkgICAgKHZvaWQg KikgKG9sZG4tPnRndC0+dGd0X3N0YXJ0CisJCQkJCSAgICAgICsgb2xkbi0+dGd0X29mZnNl dAorCQkJCQkgICAgICArIGFkZHIgLSBvbGRuLT5ob3N0X3N0YXJ0KSwKKwkJCQkgICAgKHZv aWQgKikgYWRkciwKKwkJCQkgICAgc2l6ZW9mICh2b2lkICopLCBjYnVmKTsKKwkgICAgICBh ZGRyICs9IHNpemVvZiAodm9pZCAqKTsKKwkgICAgfQorCX0KKyAgICAgIGVsc2UKKwlnb21w X2NvcHlfaG9zdDJkZXYgKGRldmljZXAsIGFxLAorCQkJICAgICh2b2lkICopIChvbGRuLT50 Z3QtPnRndF9zdGFydCArIG9sZG4tPnRndF9vZmZzZXQKKwkJCQkgICAgICArIG5ld24tPmhv c3Rfc3RhcnQgLSBvbGRuLT5ob3N0X3N0YXJ0KSwKKwkJCSAgICAodm9pZCAqKSBuZXduLT5o b3N0X3N0YXJ0LAorCQkJICAgIG5ld24tPmhvc3RfZW5kIC0gbmV3bi0+aG9zdF9zdGFydCwg Y2J1Zik7CiAgICAgfQogCiAgIGlmIChvbGRuLT5yZWZjb3VudCAhPSBSRUZDT1VOVF9JTkZJ TklUWSkKQEAgLTE3MzQsMTYgKzE3NTMsNDUgQEAgZ29tcF91cGRhdGUgKHN0cnVjdCBnb21w X2RldmljZV9kZXNjciAqZGV2aWNlcCwgc2l6ZV90IG1hcG51bSwgdm9pZCAqKmhvc3RhZGRy cywKIAkgICAgICB9CiAKIAotCSAgICB2b2lkICpob3N0YWRkciA9ICh2b2lkICopIGN1cl9u b2RlLmhvc3Rfc3RhcnQ7Ci0JICAgIHZvaWQgKmRldmFkZHIgPSAodm9pZCAqKSAobi0+dGd0 LT50Z3Rfc3RhcnQgKyBuLT50Z3Rfb2Zmc2V0Ci0JCQkJICAgICAgKyBjdXJfbm9kZS5ob3N0 X3N0YXJ0IC0gbi0+aG9zdF9zdGFydCk7Ci0JICAgIHNpemVfdCBzaXplID0gY3VyX25vZGUu aG9zdF9lbmQgLSBjdXJfbm9kZS5ob3N0X3N0YXJ0OwotCi0JICAgIGlmIChHT01QX01BUF9D T1BZX1RPX1AgKGtpbmQgJiB0eXBlbWFzaykpCi0JICAgICAgZ29tcF9jb3B5X2hvc3QyZGV2 IChkZXZpY2VwLCBOVUxMLCBkZXZhZGRyLCBob3N0YWRkciwgc2l6ZSwKLQkJCQkgIE5VTEwp OwotCSAgICBpZiAoR09NUF9NQVBfQ09QWV9GUk9NX1AgKGtpbmQgJiB0eXBlbWFzaykpCi0J ICAgICAgZ29tcF9jb3B5X2RldjJob3N0IChkZXZpY2VwLCBOVUxMLCBob3N0YWRkciwgZGV2 YWRkciwgc2l6ZSk7CisJICAgIGlmIChuLT5hdXggJiYgbi0+YXV4LT5hdHRhY2hfY291bnQp CisJICAgICAgeworCQl1aW50cHRyX3QgYWRkciA9IGN1cl9ub2RlLmhvc3Rfc3RhcnQ7CisJ CXdoaWxlIChhZGRyIDwgY3VyX25vZGUuaG9zdF9lbmQpCisJCSAgeworCQkgICAgLyogV2Ug aGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgc3RpbGwgYXR0YWNoZWQKKwkJ ICAgICAgIHBvaW50ZXJzIGR1cmluZyBob3N0PC0+ZGV2aWNlIHVwZGF0ZXMuICAqLworCQkg ICAgc2l6ZV90IGkgPSAoYWRkciAtIGN1cl9ub2RlLmhvc3Rfc3RhcnQpIC8gc2l6ZW9mICh2 b2lkICopOworCQkgICAgaWYgKG4tPmF1eC0+YXR0YWNoX2NvdW50W2ldID09IDApCisJCSAg ICAgIHsKKwkJCXZvaWQgKmRldmFkZHIgPSAodm9pZCAqKSAobi0+dGd0LT50Z3Rfc3RhcnQK KwkJCQkJCSAgKyBuLT50Z3Rfb2Zmc2V0CisJCQkJCQkgICsgYWRkciAtIG4tPmhvc3Rfc3Rh cnQpOworCQkJaWYgKEdPTVBfTUFQX0NPUFlfVE9fUCAoa2luZCAmIHR5cGVtYXNrKSkKKwkJ CSAgZ29tcF9jb3B5X2hvc3QyZGV2IChkZXZpY2VwLCBOVUxMLAorCQkJCQkgICAgICBkZXZh ZGRyLCAodm9pZCAqKSBhZGRyLAorCQkJCQkgICAgICBzaXplb2YgKHZvaWQgKiksIE5VTEwp OworCQkJaWYgKEdPTVBfTUFQX0NPUFlfRlJPTV9QIChraW5kICYgdHlwZW1hc2spKQorCQkJ ICBnb21wX2NvcHlfZGV2Mmhvc3QgKGRldmljZXAsIE5VTEwsCisJCQkJCSAgICAgICh2b2lk ICopIGFkZHIsIGRldmFkZHIsCisJCQkJCSAgICAgIHNpemVvZiAodm9pZCAqKSk7CisJCSAg ICAgIH0KKwkJICAgIGFkZHIgKz0gc2l6ZW9mICh2b2lkICopOworCQkgIH0KKwkgICAgICB9 CisJICAgIGVsc2UKKwkgICAgICB7CisJCXZvaWQgKmhvc3RhZGRyID0gKHZvaWQgKikgY3Vy X25vZGUuaG9zdF9zdGFydDsKKwkJdm9pZCAqZGV2YWRkciA9ICh2b2lkICopIChuLT50Z3Qt PnRndF9zdGFydCArIG4tPnRndF9vZmZzZXQKKwkJCQkJICArIGN1cl9ub2RlLmhvc3Rfc3Rh cnQKKwkJCQkJICAtIG4tPmhvc3Rfc3RhcnQpOworCQlzaXplX3Qgc2l6ZSA9IGN1cl9ub2Rl Lmhvc3RfZW5kIC0gY3VyX25vZGUuaG9zdF9zdGFydDsKKworCQlpZiAoR09NUF9NQVBfQ09Q WV9UT19QIChraW5kICYgdHlwZW1hc2spKQorCQkgIGdvbXBfY29weV9ob3N0MmRldiAoZGV2 aWNlcCwgTlVMTCwgZGV2YWRkciwgaG9zdGFkZHIsIHNpemUsCisJCQkJICAgICAgTlVMTCk7 CisJCWlmIChHT01QX01BUF9DT1BZX0ZST01fUCAoa2luZCAmIHR5cGVtYXNrKSkKKwkJICBn b21wX2NvcHlfZGV2Mmhvc3QgKGRldmljZXAsIE5VTEwsIGhvc3RhZGRyLCBkZXZhZGRyLCBz aXplKTsKKwkgICAgICB9CiAJICB9CiAgICAgICB9CiAgIGdvbXBfbXV0ZXhfdW5sb2NrICgm ZGV2aWNlcC0+bG9jayk7CkBAIC0yNTg3LDExICsyNjM1LDMyIEBAIGdvbXBfZXhpdF9kYXRh IChzdHJ1Y3QgZ29tcF9kZXZpY2VfZGVzY3IgKmRldmljZXAsIHNpemVfdCBtYXBudW0sCiAK IAkgIGlmICgoa2luZCA9PSBHT01QX01BUF9GUk9NICYmIGstPnJlZmNvdW50ID09IDApCiAJ ICAgICAgfHwga2luZCA9PSBHT01QX01BUF9BTFdBWVNfRlJPTSkKLQkgICAgZ29tcF9jb3B5 X2RldjJob3N0IChkZXZpY2VwLCBOVUxMLCAodm9pZCAqKSBjdXJfbm9kZS5ob3N0X3N0YXJ0 LAotCQkJCSh2b2lkICopIChrLT50Z3QtPnRndF9zdGFydCArIGstPnRndF9vZmZzZXQKLQkJ CQkJICArIGN1cl9ub2RlLmhvc3Rfc3RhcnQKLQkJCQkJICAtIGstPmhvc3Rfc3RhcnQpLAot CQkJCWN1cl9ub2RlLmhvc3RfZW5kIC0gY3VyX25vZGUuaG9zdF9zdGFydCk7CisJICAgIHsK KwkgICAgICBpZiAoay0+YXV4ICYmIGstPmF1eC0+YXR0YWNoX2NvdW50KQorCQl7CisJCSAg LyogV2UgaGF2ZSB0byBiZSBjYXJlZnVsIG5vdCB0byBvdmVyd3JpdGUgc3RpbGwgYXR0YWNo ZWQKKwkJICAgICBwb2ludGVycyBkdXJpbmcgdGhlIGNvcHliYWNrIHRvIGhvc3QuICAqLwor CQkgIHVpbnRwdHJfdCBhZGRyID0gay0+aG9zdF9zdGFydDsKKwkJICB3aGlsZSAoYWRkciA8 IGstPmhvc3RfZW5kKQorCQkgICAgeworCQkgICAgICBzaXplX3QgaSA9IChhZGRyIC0gay0+ aG9zdF9zdGFydCkgLyBzaXplb2YgKHZvaWQgKik7CisJCSAgICAgIGlmIChrLT5hdXgtPmF0 dGFjaF9jb3VudFtpXSA9PSAwKQorCQkJZ29tcF9jb3B5X2RldjJob3N0IChkZXZpY2VwLCBO VUxMLCAodm9pZCAqKSBhZGRyLAorCQkJCQkgICAgKHZvaWQgKikgKGstPnRndC0+dGd0X3N0 YXJ0CisJCQkJCQkgICAgICArIGstPnRndF9vZmZzZXQKKwkJCQkJCSAgICAgICsgYWRkciAt IGstPmhvc3Rfc3RhcnQpLAorCQkJCQkgICAgc2l6ZW9mICh2b2lkICopKTsKKwkJICAgICAg YWRkciArPSBzaXplb2YgKHZvaWQgKik7CisJCSAgICB9CisJCX0KKwkgICAgICBlbHNlCisJ CWdvbXBfY29weV9kZXYyaG9zdCAoZGV2aWNlcCwgTlVMTCwgKHZvaWQgKikgY3VyX25vZGUu aG9zdF9zdGFydCwKKwkJCQkgICAgKHZvaWQgKikgKGstPnRndC0+dGd0X3N0YXJ0ICsgay0+ dGd0X29mZnNldAorCQkJCQkgICAgICArIGN1cl9ub2RlLmhvc3Rfc3RhcnQKKwkJCQkJICAg ICAgLSBrLT5ob3N0X3N0YXJ0KSwKKwkJCQkgICAgY3VyX25vZGUuaG9zdF9lbmQgLSBjdXJf bm9kZS5ob3N0X3N0YXJ0KTsKKwkgICAgfQorCiAJICBpZiAoay0+cmVmY291bnQgPT0gMCkK IAkgICAgZ29tcF9yZW1vdmVfdmFyIChkZXZpY2VwLCBrKTsKIAkgIGJyZWFrOwpkaWZmIC0t Z2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTExLkMgYi9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTEuQwppbmRleCBmZTk5NjAzMzUx ZC4uODdjMjk4MGI0YjUgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu YysrL3RhcmdldC0xMS5DCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3Rh cmdldC0xMS5DCkBAIC0yMyw5ICsyMywxMSBAQCBmb28gKCkKICAgZSA9IGMgKyAxODsKICAg RCBzID0geyBhLCBiICsgMiwgeyAwLCBhICsgMTYsIDAsIGQgfSwgYyArIDMsIGUgfTsKICAg aW50IGVyciA9IDA7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBtYXAgKHRvOnMudi5iWzA6eiAr IDddLCBzLnRlbXBsYXRlIHVbeiArIDE6eiArIDRdKSBcCi0JCSAgICAgbWFwICh0b2Zyb206 cy5zWzM6M10sIHMuIHRlbXBsYXRlIHYuIHRlbXBsYXRlIGRbeiArIDE6eiArIDNdKSBcCi0J CSAgICAgbWFwIChmcm9tOiBzLndbejo0XSwgcy54WzE6M10sIGVycikgcHJpdmF0ZSAoaSkK KyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodG86IHMudi5iLCBzLnYuYlswOnogKyA3XSkJ CQlcCisJCSAgICAgbWFwIChzLnRlbXBsYXRlIHUsIHMudGVtcGxhdGUgdVt6ICsgMTp6ICsg NF0pCVwKKwkJICAgICBtYXAgKHRvZnJvbTogcy5zLCBzLnNbMzozXSkJCQlcCisJCSAgICAg bWFwICh0b2Zyb206IHMuIHRlbXBsYXRlIHYuIHRlbXBsYXRlIGRbeiArIDE6eiArIDNdKVwK KwkJICAgICBtYXAgKGZyb206IHMudywgcy53W3o6NF0sIHMueCwgcy54WzE6M10sIGVycikg cHJpdmF0ZSAoaSkKICAgewogICAgIGVyciA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IDc7 IGkrKykKQEAgLTgwLDkgKzgyLDkgQEAgbWFpbiAoKQogICBlID0gYyArIDE4OwogICBTIHMg PSB7IGEsIGIgKyAyLCB7IDAsIGEgKyAxNiwgMCwgZCB9LCBjICsgMywgZSB9OwogICBpbnQg ZXJyID0gMDsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodG86cy52LmJbMDp6ICsgN10s IHMudVt6ICsgMTp6ICsgNF0pIFwKLQkJICAgICBtYXAgKHRvZnJvbTpzLnNbMzozXSwgcy52 LmRbeiArIDE6eiArIDNdKSBcCi0JCSAgICAgbWFwIChmcm9tOiBzLndbejo0XSwgcy54WzE6 M10sIGVycikgcHJpdmF0ZSAoaSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAodG86IHMu di5iLCBzLnYuYlswOnogKyA3XSwgcy51LCBzLnVbeiArIDE6eiArIDRdKSBcCisJCSAgICAg bWFwICh0b2Zyb206IHMucywgcy5zWzM6M10sIHMudi5kW3ogKyAxOnogKyAzXSkJCVwKKwkJ ICAgICBtYXAgKGZyb206IHMudywgcy53W3o6NF0sIHMueCwgcy54WzE6M10sIGVycikgcHJp dmF0ZSAoaSkKICAgewogICAgIGVyciA9IDA7CiAgICAgZm9yIChpID0gMDsgaSA8IDc7IGkr KykKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0x Mi5DIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTEyLkMKaW5kZXgg M2I0ZWQ1N2RmNjguLjQ4MGU0NzljMjYyIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmMrKy90YXJnZXQtMTIuQworKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmMrKy90YXJnZXQtMTIuQwpAQCAtNTMsNyArNTMsNyBAQCBtYWluICgpCiAgIGludCB1 WzEwXSA9IHsgMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSB9LCBlcnIgPSAwOwogICBT IHMgPSB7IDksIHUgKyAzLCB7IDEwLCAxMSwgMTIsIDEzLCAxNCB9IH07CiAgIGludCAqdiA9 IHUgKyA0OwotICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKHRvOiBzLnMs IHMudVswOjVdKSBtYXAgKGFsbG9jOiBzLnZbMTozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwICh0bzogcy5zLCBzLnUsIHMudVswOjVdKSBtYXAgKGFsbG9jOiBz LnZbMTozXSkKICAgcy5zKys7CiAgIHVbM10rKzsKICAgcy52WzFdKys7CmRpZmYgLS1naXQg YS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTUuQyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0xNS5DCmluZGV4IDRiMzIwYzMxMjI5Li41 MzYyNmIyNTQ3ZSAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysv dGFyZ2V0LTE1LkMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0 LTE1LkMKQEAgLTE0LDcgKzE0LDcgQEAgZm9vIChTIHMpCiAgICAgZCA9IGlkOwogCiAgIGlu dCBlcnI7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG9mcm9tOiBzLmEsIHMuYiwgcy5j WzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkgbWFwKHRv OiBzZXApIG1hcChmcm9tOiBlcnIpCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG9mcm9t OiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6 Ml0sIHMuaCwgcy5oWzI6M10pIG1hcCh0bzogc2VwKSBtYXAoZnJvbTogZXJyKQogICB7CiAg ICAgZXJyID0gcy5hICE9IDExIHx8IHMuYlswXSAhPSAxMiB8fCBzLmJbMV0gIT0gMTM7CiAg ICAgZXJyIHw9IHMuY1sxXSAhPSAxNSB8fCBzLmNbMl0gIT0gMTYgfHwgcy5kWy0yXSAhPSAx OCB8fCBzLmRbLTFdICE9IDE5IHx8IHMuZFswXSAhPSAyMDsKQEAgLTQ4LDcgKzQ4LDcgQEAg Zm9vIChTIHMpCiAJICB8fCBvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmgsIGQpCiAJICB8 fCBvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmhbMl0sIGQpKSkKICAgICBhYm9ydCAoKTsK LSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6 Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKKyAgI3ByYWdt YSBvbXAgdGFyZ2V0IGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwg cy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pCiAgIHsKICAg ICBpZiAoIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYSwgZCkKIAl8fCAhb21wX3Rhcmdl dF9pc19wcmVzZW50IChzLmIsIGQpCkBAIC02MSw4ICs2MSw4IEBAIGZvbyAoUyBzKQogCXx8 ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmgsIGQpCiAJfHwgIW9tcF90YXJnZXRfaXNf cHJlc2VudCAoJnMuaFsyXSwgZCkpCiAgICAgICBhYm9ydCAoKTsKLSAgICAjcHJhZ21hIG9t cCB0YXJnZXQgdXBkYXRlIHRvKHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0yOjNdLCBzLmUs IHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKQotICAgICNwcmFnbWEgb21wIHRhcmdldCBtYXAo YWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6 Ml0sIHMuaFsyOjNdKSBtYXAoZnJvbTogZXJyKQorICAgICNwcmFnbWEgb21wIHRhcmdldCB1 cGRhdGUgdG8ocy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYs IHMuZ1sxOjJdLCBzLmgsIHMuaFsyOjNdKQorICAgICNwcmFnbWEgb21wIHRhcmdldCBtYXAo YWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBz LmdbMToyXSwgcy5oLCBzLmhbMjozXSkgbWFwKGZyb206IGVycikKICAgICB7CiAgICAgICBl cnIgPSBzLmEgIT0gNTAgfHwgcy5iWzBdICE9IDQ5IHx8IHMuYlsxXSAhPSA0ODsKICAgICAg IGVyciB8PSBzLmNbMV0gIT0gNDcgfHwgcy5jWzJdICE9IDQ2IHx8IHMuZFstMl0gIT0gNDUg fHwgcy5kWy0xXSAhPSA0NCB8fCBzLmRbMF0gIT0gNDM7CkBAIC03Myw3ICs3Myw3IEBAIGZv byAoUyBzKQogICAgICAgcy5lID0gMjU7IHMuZlswXSA9IDI2OyBzLmZbMV0gPSAyNzsgcy5n WzFdID0gMjg7IHMuZ1syXSA9IDI5OwogICAgICAgcy5oWzJdID0gMzA7IHMuaFszXSA9IDMx OyBzLmhbNF0gPSAzMjsKICAgICB9Ci0gICAgI3ByYWdtYSBvbXAgdGFyZ2V0IHVwZGF0ZSBm cm9tKHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0s IHMuaFsyOjNdKQorICAgICNwcmFnbWEgb21wIHRhcmdldCB1cGRhdGUgZnJvbShzLmEsIHMu Yiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwg cy5oWzI6M10pCiAgIH0KICAgaWYgKHNlcAogICAgICAgJiYgKG9tcF90YXJnZXRfaXNfcHJl c2VudCAoJnMuYSwgZCkKQEAgLTk3LDcgKzk3LDcgQEAgZm9vIChTIHMpCiAgIHMuY1sxXSA9 IDM2OyBzLmNbMl0gPSAzNzsgcy5kWy0yXSA9IDM4OyBzLmRbLTFdID0gMzk7IHMuZFswXSA9 IDQwOwogICBzLmUgPSA0MTsgcy5mWzBdID0gNDI7IHMuZlsxXSA9IDQzOyBzLmdbMV0gPSA0 NDsgcy5nWzJdID0gNDU7CiAgIHMuaFsyXSA9IDQ2OyBzLmhbM10gPSA0Nzsgcy5oWzRdID0g NDg7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcy5hLCBz LmIsIHMuY1sxOjJdLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oWzI6M10p CisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcy5hLCBzLmIs IHMuY1sxOjJdLCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMu aFsyOjNdKQogICBpZiAoIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYSwgZCkKICAgICAg IHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKHMuYiwgZCkKICAgICAgIHx8ICFvbXBfdGFy Z2V0X2lzX3ByZXNlbnQgKCZzLmNbMV0sIGQpCkBAIC0xMDksOCArMTA5LDggQEAgZm9vIChT IHMpCiAgICAgICB8fCAhb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5oLCBkKQogICAgICAg fHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaFsyXSwgZCkpCiAgICAgYWJvcnQgKCk7 Ci0gICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbHdheXMsIHRvOiBzLmEs IHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjoz XSkKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcChhbGxvYzogcy5hLCBzLmIsIHMuY1sxOjJd LCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oWzI6M10pIG1hcChmcm9tOiBl cnIpCisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbHdheXMsIHRvOiBz LmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0s IHMuaCwgcy5oWzI6M10pCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwg cy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5o LCBzLmhbMjozXSkgbWFwKGZyb206IGVycikKICAgewogICAgIGVyciA9IHMuYSAhPSAzMyB8 fCBzLmJbMF0gIT0gMzQgfHwgcy5iWzFdICE9IDM1OwogICAgIGVyciB8PSBzLmNbMV0gIT0g MzYgfHwgcy5jWzJdICE9IDM3IHx8IHMuZFstMl0gIT0gMzggfHwgcy5kWy0xXSAhPSAzOSB8 fCBzLmRbMF0gIT0gNDA7CkBAIC0xMjEsNyArMTIxLDcgQEAgZm9vIChTIHMpCiAgICAgcy5l ID0gMzE7IHMuZlswXSA9IDQwOyBzLmZbMV0gPSAzOTsgcy5nWzFdID0gMzg7IHMuZ1syXSA9 IDM3OwogICAgIHMuaFsyXSA9IDM2OyBzLmhbM10gPSAzNTsgcy5oWzRdID0gMzQ7CiAgIH0K LSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoYWx3YXlzLCBmcm9tOiBzLmEs IHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjoz XSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoYWx3YXlzLCBmcm9tOiBz LmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0s IHMuaCwgcy5oWzI6M10pCiAgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBk KQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAocy5iLCBkKQogICAgICAgfHwg IW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuY1sxXSwgZCkKQEAgLTEzMyw3ICsxMzMsNyBA QCBmb28gKFMgcykKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmgsIGQp CiAgICAgICB8fCAhb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5oWzJdLCBkKSkKICAgICBh Ym9ydCAoKTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAocmVsZWFzZTog cy5hLCBzLmIsIHMuY1sxOjJdLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5o WzI6M10pCisgICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKHJlbGVhc2U6IHMu YSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwg cy5oLCBzLmhbMjozXSkKICAgaWYgKHNlcAogICAgICAgJiYgKG9tcF90YXJnZXRfaXNfcHJl c2VudCAoJnMuYSwgZCkKIAkgIHx8IG9tcF90YXJnZXRfaXNfcHJlc2VudCAocy5iLCBkKQpk aWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE2LkMg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTYuQwppbmRleCBjZDEw MmQ5MDU5NC4uYjhiZTdjYzkyMmYgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuYysrL3RhcmdldC0xNi5DCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu YysrL3RhcmdldC0xNi5DCkBAIC0xNiw3ICsxNiw3IEBAIGZvbyAoUzxDLCBJLCBMLCBVQywg U0g+IHMpCiAgICAgZCA9IGlkOwogCiAgIGludCBlcnI7Ci0gICNwcmFnbWEgb21wIHRhcmdl dCBtYXAodG9mcm9tOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYs IHMuZ1sxOjJdLCBzLmhbMjozXSkgbWFwKHRvOiBzZXApIG1hcChmcm9tOiBlcnIpCisgICNw cmFnbWEgb21wIHRhcmdldCBtYXAodG9mcm9tOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwg cy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pIG1hcCh0bzog c2VwKSBtYXAoZnJvbTogZXJyKQogICB7CiAgICAgZXJyID0gcy5hICE9IDExIHx8IHMuYlsw XSAhPSAxMiB8fCBzLmJbMV0gIT0gMTM7CiAgICAgZXJyIHw9IHMuY1sxXSAhPSAxNSB8fCBz LmNbMl0gIT0gMTYgfHwgcy5kWy0yXSAhPSAxOCB8fCBzLmRbLTFdICE9IDE5IHx8IHMuZFsw XSAhPSAyMDsKQEAgLTUwLDcgKzUwLDcgQEAgZm9vIChTPEMsIEksIEwsIFVDLCBTSD4gcykK IAkgIHx8IG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaCwgZCkKIAkgIHx8IG9tcF90YXJn ZXRfaXNfcHJlc2VudCAoJnMuaFsyXSwgZCkpKQogICAgIGFib3J0ICgpOwotICAjcHJhZ21h IG9tcCB0YXJnZXQgZGF0YSBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0y OjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKQorICAjcHJhZ21hIG9tcCB0YXJn ZXQgZGF0YSBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10s IHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oLCBzLmhbMjozXSkKICAgewogICAgIGlmICghb21w X3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQogCXx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNl bnQgKHMuYiwgZCkKQEAgLTYzLDggKzYzLDggQEAgZm9vIChTPEMsIEksIEwsIFVDLCBTSD4g cykKIAl8fCAhb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5oLCBkKQogCXx8ICFvbXBfdGFy Z2V0X2lzX3ByZXNlbnQgKCZzLmhbMl0sIGQpKQogICAgICAgYWJvcnQgKCk7Ci0gICAgI3By YWdtYSBvbXAgdGFyZ2V0IHVwZGF0ZSB0byhzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjoz XSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKLSAgICAjcHJhZ21hIG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYs IHMuZ1sxOjJdLCBzLmhbMjozXSkgbWFwKGZyb206IGVycikKKyAgICAjcHJhZ21hIG9tcCB0 YXJnZXQgdXBkYXRlIHRvKHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10sIHMu ZSwgcy5mLCBzLmdbMToyXSwgcy5oLCBzLmhbMjozXSkKKyAgICAjcHJhZ21hIG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUs IHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pIG1hcChmcm9tOiBlcnIpCiAgICAgewog ICAgICAgZXJyID0gcy5hICE9IDUwIHx8IHMuYlswXSAhPSA0OSB8fCBzLmJbMV0gIT0gNDg7 CiAgICAgICBlcnIgfD0gcy5jWzFdICE9IDQ3IHx8IHMuY1syXSAhPSA0NiB8fCBzLmRbLTJd ICE9IDQ1IHx8IHMuZFstMV0gIT0gNDQgfHwgcy5kWzBdICE9IDQzOwpAQCAtNzUsNyArNzUs NyBAQCBmb28gKFM8QywgSSwgTCwgVUMsIFNIPiBzKQogICAgICAgcy5lID0gMjU7IHMuZlsw XSA9IDI2OyBzLmZbMV0gPSAyNzsgcy5nWzFdID0gMjg7IHMuZ1syXSA9IDI5OwogICAgICAg cy5oWzJdID0gMzA7IHMuaFszXSA9IDMxOyBzLmhbNF0gPSAzMjsKICAgICB9Ci0gICAgI3By YWdtYSBvbXAgdGFyZ2V0IHVwZGF0ZSBmcm9tKHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0y OjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKQorICAgICNwcmFnbWEgb21wIHRh cmdldCB1cGRhdGUgZnJvbShzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBz LmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pCiAgIH0KICAgaWYgKHNlcAogICAg ICAgJiYgKG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYSwgZCkKQEAgLTk5LDcgKzk5LDcg QEAgZm9vIChTPEMsIEksIEwsIFVDLCBTSD4gcykKICAgcy5jWzFdID0gMzY7IHMuY1syXSA9 IDM3OyBzLmRbLTJdID0gMzg7IHMuZFstMV0gPSAzOTsgcy5kWzBdID0gNDA7CiAgIHMuZSA9 IDQxOyBzLmZbMF0gPSA0Mjsgcy5mWzFdID0gNDM7IHMuZ1sxXSA9IDQ0OyBzLmdbMl0gPSA0 NTsKICAgcy5oWzJdID0gNDY7IHMuaFszXSA9IDQ3OyBzLmhbNF0gPSA0ODsKLSAgI3ByYWdt YSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0s IHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKKyAgI3ByYWdtYSBv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMu ZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pCiAgIGlm ICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQogICAgICAgfHwgIW9tcF90YXJn ZXRfaXNfcHJlc2VudCAocy5iLCBkKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2Vu dCAoJnMuY1sxXSwgZCkKQEAgLTExMSw4ICsxMTEsOCBAQCBmb28gKFM8QywgSSwgTCwgVUMs IFNIPiBzKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaCwgZCkKICAg ICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmhbMl0sIGQpKQogICAgIGFib3J0 ICgpOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWx3YXlzLCB0bzog cy5hLCBzLmIsIHMuY1sxOjJdLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5o WzI6M10pCi0gICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNb MToyXSwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKSBtYXAoZnJv bTogZXJyKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWx3YXlzLCB0 bzogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sx OjJdLCBzLmgsIHMuaFsyOjNdKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBz LmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0s IHMuaCwgcy5oWzI6M10pIG1hcChmcm9tOiBlcnIpCiAgIHsKICAgICBlcnIgPSBzLmEgIT0g MzMgfHwgcy5iWzBdICE9IDM0IHx8IHMuYlsxXSAhPSAzNTsKICAgICBlcnIgfD0gcy5jWzFd ICE9IDM2IHx8IHMuY1syXSAhPSAzNyB8fCBzLmRbLTJdICE9IDM4IHx8IHMuZFstMV0gIT0g MzkgfHwgcy5kWzBdICE9IDQwOwpAQCAtMTIzLDcgKzEyMyw3IEBAIGZvbyAoUzxDLCBJLCBM LCBVQywgU0g+IHMpCiAgICAgcy5lID0gMzE7IHMuZlswXSA9IDQwOyBzLmZbMV0gPSAzOTsg cy5nWzFdID0gMzg7IHMuZ1syXSA9IDM3OwogICAgIHMuaFsyXSA9IDM2OyBzLmhbM10gPSAz NTsgcy5oWzRdID0gMzQ7CiAgIH0KLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoYWx3YXlzLCBmcm9tOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBz LmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoYWx3YXlzLCBmcm9tOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNd LCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pCiAgIGlmICghb21wX3Rhcmdl dF9pc19wcmVzZW50ICgmcy5hLCBkKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2Vu dCAocy5iLCBkKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuY1sxXSwg ZCkKQEAgLTEzNSw3ICsxMzUsNyBAQCBmb28gKFM8QywgSSwgTCwgVUMsIFNIPiBzKQogICAg ICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaCwgZCkKICAgICAgIHx8ICFvbXBf dGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmhbMl0sIGQpKQogICAgIGFib3J0ICgpOwotICAjcHJh Z21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChyZWxlYXNlOiBzLmEsIHMuYiwgcy5jWzE6 Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKKyAgI3ByYWdt YSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAocmVsZWFzZTogcy5hLCBzLmIsIHMuY1sxOjJd LCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMuaFsyOjNdKQog ICBpZiAoc2VwCiAgICAgICAmJiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQog CSAgfHwgb21wX3RhcmdldF9pc19wcmVzZW50IChzLmIsIGQpCmRpZmYgLS1naXQgYS9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMTcuQyBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYysrL3RhcmdldC0xNy5DCmluZGV4IGQ4MWZmMTlhNDExLi5mOTc0NzZh YWZjNCAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0 LTE3LkMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTE3LkMK QEAgLTE2LDcgKzE2LDcgQEAgZm9vIChTPEMsIEksIEwsIFVDUiwgQ0FSLCBTSCwgSVBSPiBz KQogICAgIGQgPSBpZDsKIAogICBpbnQgZXJyOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFw KHRvZnJvbTogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdb MToyXSwgcy5oWzI6M10pIG1hcCh0bzogc2VwKSBtYXAoZnJvbTogZXJyKQorICAjcHJhZ21h IG9tcCB0YXJnZXQgbWFwKHRvZnJvbTogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFst MjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMuaFsyOjNdKSBtYXAodG86IHNlcCkg bWFwKGZyb206IGVycikKICAgewogICAgIGVyciA9IHMuYSAhPSAxMSB8fCBzLmJbMF0gIT0g MTIgfHwgcy5iWzFdICE9IDEzOwogICAgIGVyciB8PSBzLmNbMV0gIT0gMTUgfHwgcy5jWzJd ICE9IDE2IHx8IHMuZFstMl0gIT0gMTggfHwgcy5kWy0xXSAhPSAxOSB8fCBzLmRbMF0gIT0g MjA7CkBAIC01MCw3ICs1MCw3IEBAIGZvbyAoUzxDLCBJLCBMLCBVQ1IsIENBUiwgU0gsIElQ Uj4gcykKIAkgIHx8IG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaCwgZCkKIAkgIHx8IG9t cF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaFsyXSwgZCkpKQogICAgIGFib3J0ICgpOwotICAj cHJhZ21hIG9tcCB0YXJnZXQgZGF0YSBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwg cy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKQorICAjcHJhZ21hIG9t cCB0YXJnZXQgZGF0YSBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRb LTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oLCBzLmhbMjozXSkKICAgewogICAgIGlm ICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQogCXx8ICFvbXBfdGFyZ2V0X2lz X3ByZXNlbnQgKHMuYiwgZCkKQEAgLTYzLDggKzYzLDggQEAgZm9vIChTPEMsIEksIEwsIFVD UiwgQ0FSLCBTSCwgSVBSPiBzKQogCXx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmgs IGQpCiAJfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaFsyXSwgZCkpCiAgICAgICBh Ym9ydCAoKTsKLSAgICAjcHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRlIHRvKHMuYSwgcy5iLCBz LmNbMToyXSwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKQotICAg ICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5k Wy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0sIHMuaFsyOjNdKSBtYXAoZnJvbTogZXJyKQor ICAgICNwcmFnbWEgb21wIHRhcmdldCB1cGRhdGUgdG8ocy5hLCBzLmIsIHMuY1sxOjJdLCBz LmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMuaFsyOjNdKQorICAg ICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5k LCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oLCBzLmhbMjozXSkgbWFwKGZy b206IGVycikKICAgICB7CiAgICAgICBlcnIgPSBzLmEgIT0gNTAgfHwgcy5iWzBdICE9IDQ5 IHx8IHMuYlsxXSAhPSA0ODsKICAgICAgIGVyciB8PSBzLmNbMV0gIT0gNDcgfHwgcy5jWzJd ICE9IDQ2IHx8IHMuZFstMl0gIT0gNDUgfHwgcy5kWy0xXSAhPSA0NCB8fCBzLmRbMF0gIT0g NDM7CkBAIC03NSw3ICs3NSw3IEBAIGZvbyAoUzxDLCBJLCBMLCBVQ1IsIENBUiwgU0gsIElQ Uj4gcykKICAgICAgIHMuZSA9IDI1OyBzLmZbMF0gPSAyNjsgcy5mWzFdID0gMjc7IHMuZ1sx XSA9IDI4OyBzLmdbMl0gPSAyOTsKICAgICAgIHMuaFsyXSA9IDMwOyBzLmhbM10gPSAzMTsg cy5oWzRdID0gMzI7CiAgICAgfQotICAgICNwcmFnbWEgb21wIHRhcmdldCB1cGRhdGUgZnJv bShzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBz LmhbMjozXSkKKyAgICAjcHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRlIGZyb20ocy5hLCBzLmIs IHMuY1sxOjJdLCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMu aFsyOjNdKQogICB9CiAgIGlmIChzZXAKICAgICAgICYmIChvbXBfdGFyZ2V0X2lzX3ByZXNl bnQgKCZzLmEsIGQpCkBAIC05OSw3ICs5OSw3IEBAIGZvbyAoUzxDLCBJLCBMLCBVQ1IsIENB UiwgU0gsIElQUj4gcykKICAgcy5jWzFdID0gMzY7IHMuY1syXSA9IDM3OyBzLmRbLTJdID0g Mzg7IHMuZFstMV0gPSAzOTsgcy5kWzBdID0gNDA7CiAgIHMuZSA9IDQxOyBzLmZbMF0gPSA0 Mjsgcy5mWzFdID0gNDM7IHMuZ1sxXSA9IDQ0OyBzLmdbMl0gPSA0NTsKICAgcy5oWzJdID0g NDY7IHMuaFszXSA9IDQ3OyBzLmhbNF0gPSA0ODsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5l LCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBz LmUsIHMuZiwgcy5nWzE6Ml0sIHMuaCwgcy5oWzI6M10pCiAgIGlmICghb21wX3RhcmdldF9p c19wcmVzZW50ICgmcy5hLCBkKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAo cy5iLCBkKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuY1sxXSwgZCkK QEAgLTExMSw4ICsxMTEsOCBAQCBmb28gKFM8QywgSSwgTCwgVUNSLCBDQVIsIFNILCBJUFI+ IHMpCiAgICAgICB8fCAhb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5oLCBkKQogICAgICAg fHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaFsyXSwgZCkpCiAgICAgYWJvcnQgKCk7 Ci0gICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbHdheXMsIHRvOiBzLmEs IHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmhbMjoz XSkKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcChhbGxvYzogcy5hLCBzLmIsIHMuY1sxOjJd LCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oWzI6M10pIG1hcChmcm9tOiBl cnIpCisgICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbHdheXMsIHRvOiBz LmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdLCBzLmUsIHMuZiwgcy5nWzE6Ml0s IHMuaCwgcy5oWzI6M10pCisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwg cy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10sIHMuZSwgcy5mLCBzLmdbMToyXSwgcy5o LCBzLmhbMjozXSkgbWFwKGZyb206IGVycikKICAgewogICAgIGVyciA9IHMuYSAhPSAzMyB8 fCBzLmJbMF0gIT0gMzQgfHwgcy5iWzFdICE9IDM1OwogICAgIGVyciB8PSBzLmNbMV0gIT0g MzYgfHwgcy5jWzJdICE9IDM3IHx8IHMuZFstMl0gIT0gMzggfHwgcy5kWy0xXSAhPSAzOSB8 fCBzLmRbMF0gIT0gNDA7CkBAIC0xMjMsNyArMTIzLDcgQEAgZm9vIChTPEMsIEksIEwsIFVD UiwgQ0FSLCBTSCwgSVBSPiBzKQogICAgIHMuZSA9IDMxOyBzLmZbMF0gPSA0MDsgcy5mWzFd ID0gMzk7IHMuZ1sxXSA9IDM4OyBzLmdbMl0gPSAzNzsKICAgICBzLmhbMl0gPSAzNjsgcy5o WzNdID0gMzU7IHMuaFs0XSA9IDM0OwogICB9Ci0gICNwcmFnbWEgb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGFsd2F5cywgZnJvbTogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmRbLTI6M10s IHMuZSwgcy5mLCBzLmdbMToyXSwgcy5oWzI6M10pCisgICNwcmFnbWEgb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGFsd2F5cywgZnJvbTogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMu ZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBzLmgsIHMuaFsyOjNdKQogICBpZiAoIW9t cF90YXJnZXRfaXNfcHJlc2VudCAoJnMuYSwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lz X3ByZXNlbnQgKHMuYiwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZz LmNbMV0sIGQpCkBAIC0xMzUsNyArMTM1LDcgQEAgZm9vIChTPEMsIEksIEwsIFVDUiwgQ0FS LCBTSCwgSVBSPiBzKQogICAgICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuaCwg ZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmhbMl0sIGQpKQogICAg IGFib3J0ICgpOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChyZWxlYXNl OiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJdLCBz LmhbMjozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAocmVsZWFzZTog cy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFstMjozXSwgcy5lLCBzLmYsIHMuZ1sxOjJd LCBzLmgsIHMuaFsyOjNdKQogICBpZiAoc2VwCiAgICAgICAmJiAob21wX3RhcmdldF9pc19w cmVzZW50ICgmcy5hLCBkKQogCSAgfHwgb21wX3RhcmdldF9pc19wcmVzZW50IChzLmIsIGQp CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMjEu QyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0yMS5DCmluZGV4IDIx YTJmMjk5YmJiLi5kYTE3YjU3NDVkZSAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5jKysvdGFyZ2V0LTIxLkMKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jKysvdGFyZ2V0LTIxLkMKQEAgLTcsNyArNyw3IEBAIHZvaWQKIGZvbyAoUyBzKQogewog ICBpbnQgZXJyOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwIChzLnhbMDpOXSwgcy55WzA6 Tl0pIG1hcCAocy50LnRbMTY6M10pIG1hcCAoZnJvbTogZXJyKQorICAjcHJhZ21hIG9tcCB0 YXJnZXQgbWFwIChzLnhbMDpOXSwgcy55LCBzLnlbMDpOXSkgbWFwIChzLnQudFsxNjozXSkg bWFwIChmcm9tOiBlcnIpCiAgIHsKICAgICBlcnIgPSBzLnhbMl0gIT0gMjggfHwgcy55WzJd ICE9IDM3IHx8IHMudC50WzE3XSAhPSA4MTsKICAgICBzLnhbMl0rKzsKQEAgLTM4LDcgKzM4 LDcgQEAgdm9pZAogZm9vMiAoUyAmcykKIHsKICAgaW50IGVycjsKLSAgI3ByYWdtYSBvbXAg dGFyZ2V0IG1hcCAocy54W046MTBdLCBzLnlbTjoxMF0pIG1hcCAoZnJvbTogZXJyKSBtYXAg KHMudC50W04rMTY6TiszXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAocy54W046MTBd LCBzLnksIHMueVtOOjEwXSkgbWFwIChmcm9tOiBlcnIpIG1hcCAocy50LnRbTisxNjpOKzNd KQogICB7CiAgICAgZXJyID0gcy54WzJdICE9IDMwIHx8IHMueVsyXSAhPSAzOCB8fCBzLnQu dFsxN10gIT0gODE7CiAgICAgcy54WzJdKys7CkBAIC02OSw3ICs2OSw3IEBAIHZvaWQKIGZv bzMgKFUgcykKIHsKICAgaW50IGVycjsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCAocy54 WzA6MTBdLCBzLnlbMDoxMF0pIG1hcCAoZnJvbTogZXJyKSBtYXAgKHMudC50WzE2OjNdKQor ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwIChzLnhbMDoxMF0sIHMueSwgcy55WzA6MTBdKSBt YXAgKGZyb206IGVycikgbWFwIChzLnQudFsxNjozXSkKICAgewogICAgIGVyciA9IHMueFsy XSAhPSAzMiB8fCBzLnlbMl0gIT0gMzkgfHwgcy50LnRbMTddICE9IDgyOwogICAgIHMueFsy XSsrOwpAQCAtMTAwLDcgKzEwMCw3IEBAIHZvaWQKIGZvbzQgKFUgJnMpCiB7CiAgIGludCBl cnI7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBtYXAgKHMueFswOjEwXSwgcy55WzA6MTBdKSBt YXAgKGZyb206IGVycikgbWFwIChzLnQudFsxNjozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0 IG1hcCAocy54WzA6MTBdLCBzLnksIHMueVswOjEwXSkgbWFwIChmcm9tOiBlcnIpIG1hcCAo cy50LnRbMTY6M10pCiAgIHsKICAgICBlcnIgPSBzLnhbMl0gIT0gMzQgfHwgcy55WzJdICE9 IDQwIHx8IHMudC50WzE3XSAhPSA4MjsKICAgICBzLnhbMl0rKzsKZGlmZiAtLWdpdCBhL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYysrL3RhcmdldC0yMy5DIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jKysvdGFyZ2V0LTIzLkMKaW5kZXggZDRmOWZmM2U5ODMuLjYzZDM0 MzYyNGIwIDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJn ZXQtMjMuQworKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMrKy90YXJnZXQtMjMu QwpAQCAtMTYsMTMgKzE2LDEzIEBAIG1haW4gKHZvaWQpCiAgICAgcy0+ZGF0YVtpXSA9IDA7 CiAKICAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOiBzKQotICAjcHJh Z21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IHMtPmRhdGFbOlNaXSkKKyAgI3By YWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOiBzLT5kYXRhLCBzLT5kYXRhWzpT Wl0pCiAgICNwcmFnbWEgb21wIHRhcmdldAogICB7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBTWjsgaSsrKQogICAgICAgcy0+ZGF0YVtpXSA9IGk7CiAgIH0KLSAgI3ByYWdtYSBvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcy0+ZGF0YVs6U1pdKQorICAjcHJhZ21hIG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBzLT5kYXRhLCBzLT5kYXRhWzpTWl0pCiAg ICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHMpCiAKICAgZm9yIChp bnQgaSA9IDA7IGkgPCBTWjsgaSsrKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5jLWMrKy1jb21tb24vdGFyZ2V0LWltcGxpY2l0LW1hcC0yLmMgYi9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi90YXJnZXQtaW1wbGljaXQtbWFwLTIu YwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTc0YTk3ODZjM2YK LS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNv bW1vbi90YXJnZXQtaW1wbGljaXQtbWFwLTIuYwpAQCAtMCwwICsxLDQ2IEBACisjaW5jbHVk ZSA8c3RkbGliLmg+CisKKyNkZWZpbmUgTiAxMAorCitzdHJ1Y3QgUworeworICBpbnQgYSwg YjsKKyAgaW50ICpwdHI7CisgIGludCBjLCBkOworfTsKKworaW50CittYWluICh2b2lkKQor eworICBzdHJ1Y3QgUyBhOworICBhLnB0ciA9IChpbnQgKikgbWFsbG9jIChzaXplb2YgKGlu dCkgKiBOKTsKKworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKKyAgICBhLnB0cltp XSA9IDA7CisKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvOiBhLnB0 ciwgYS5wdHJbOk5dKQorCisgICNwcmFnbWEgb21wIHRhcmdldAorICBmb3IgKGludCBpID0g MDsgaSA8IE47IGkrKykKKyAgICBhLnB0cltpXSArPSAxOworCisgICNwcmFnbWEgb21wIHRh cmdldCB1cGRhdGUgZnJvbShhLnB0cls6Tl0pCisKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBO OyBpKyspCisgICAgaWYgKGEucHRyW2ldICE9IDEpCisgICAgICBhYm9ydCAoKTsKKworICAj cHJhZ21hIG9tcCB0YXJnZXQgbWFwKGEucHRyWzpOXSkKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBOOyBpKyspCisgICAgYS5wdHJbaV0gKz0gMTsKKworICAjcHJhZ21hIG9tcCB0YXJnZXQg dXBkYXRlIGZyb20oYS5wdHJbOk5dKQorCisgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsr KQorICAgIGlmIChhLnB0cltpXSAhPSAyKQorICAgICAgYWJvcnQgKCk7CisKKyAgI3ByYWdt YSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTphLnB0ciwgYS5wdHJbOk5dKQorCisg IHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5j L3RhcmdldC0yMy5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL3RhcmdldC0yMy5j CmluZGV4IGZiMTUzMmEwN2IyLi5kNTZiMTNhY2Y4MiAxMDA2NDQKLS0tIGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jL3RhcmdldC0yMy5jCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRl L2xpYmdvbXAuYy90YXJnZXQtMjMuYwpAQCAtOCw3ICs4LDcgQEAgbWFpbiAoKQogICBpbnQg dVsxMF0gPSB7IDAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDkgfSwgZXJyID0gMDsKICAg c3RydWN0IFMgcyA9IHsgOSwgdSArIDMsIHsgMTAsIDExLCAxMiwgMTMsIDE0IH0gfTsKICAg aW50ICp2ID0gdSArIDQ7Ci0gICNwcmFnbWEgb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCAo dG86IHMucywgcy51WzA6NV0pIG1hcCAoYWxsb2M6IHMudlsxOjNdKQorICAjcHJhZ21hIG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAgKHRvOiBzLnMsIHMudSwgcy51WzA6NV0pIG1hcCAo YWxsb2M6IHMudlsxOjNdKQogICBzLnMrKzsKICAgdVszXSsrOwogICBzLnZbMV0rKzsKZGlm ZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy90YXJnZXQtMjkuYyBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy90YXJnZXQtMjkuYwppbmRleCBlNTA5NWExYjZi OC4uNGEyODY2NDk4MTEgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy90YXJnZXQtMjkuYworKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvdGFyZ2V0 LTI5LmMKQEAgLTE0LDcgKzE0LDcgQEAgZm9vIChzdHJ1Y3QgUyBzKQogICAgIGQgPSBpZDsK IAogICBpbnQgZXJyOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKHRvZnJvbTogcy5hLCBz LmIsIHMuY1sxOjJdLCBzLmRbLTI6M10pIG1hcCh0bzogc2VwKSBtYXAoZnJvbTogZXJyKQor ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKHRvZnJvbTogcy5hLCBzLmIsIHMuY1sxOjJdLCBz LmQsIHMuZFstMjozXSkgbWFwKHRvOiBzZXApIG1hcChmcm9tOiBlcnIpCiAgIHsKICAgICBl cnIgPSBzLmEgIT0gMTEgfHwgcy5iWzBdICE9IDEyIHx8IHMuYlsxXSAhPSAxMzsKICAgICBl cnIgfD0gcy5jWzFdICE9IDE1IHx8IHMuY1syXSAhPSAxNiB8fCBzLmRbLTJdICE9IDE4IHx8 IHMuZFstMV0gIT0gMTkgfHwgcy5kWzBdICE9IDIwOwpAQCAtMzUsNyArMzUsNyBAQCBmb28g KHN0cnVjdCBTIHMpCiAJICB8fCBvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKHMuZCwgZCkKIAkg IHx8IG9tcF90YXJnZXRfaXNfcHJlc2VudCAoJnMuZFstMl0sIGQpKSkKICAgICBhYm9ydCAo KTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5j WzE6Ml0sIHMuZFstMjozXSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwKGFsbG9j OiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdKQogICB7CiAgICAgaWYgKCFv bXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmEsIGQpCiAJfHwgIW9tcF90YXJnZXRfaXNfcHJl c2VudCAocy5iLCBkKQpAQCAtNDMsMTUgKzQzLDE1IEBAIGZvbyAoc3RydWN0IFMgcykKIAl8 fCAhb21wX3RhcmdldF9pc19wcmVzZW50IChzLmQsIGQpCiAJfHwgIW9tcF90YXJnZXRfaXNf cHJlc2VudCAoJnMuZFstMl0sIGQpKQogICAgICAgYWJvcnQgKCk7Ci0gICAgI3ByYWdtYSBv bXAgdGFyZ2V0IHVwZGF0ZSB0byhzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSkKLSAg ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMu ZFstMjozXSkgbWFwKGZyb206IGVycikKKyAgICAjcHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRl IHRvKHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10pCisgICAgI3ByYWdtYSBv bXAgdGFyZ2V0IG1hcChhbGxvYzogcy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFstMjoz XSkgbWFwKGZyb206IGVycikKICAgICB7CiAgICAgICBlcnIgPSBzLmEgIT0gNTAgfHwgcy5i WzBdICE9IDQ5IHx8IHMuYlsxXSAhPSA0ODsKICAgICAgIGVyciB8PSBzLmNbMV0gIT0gNDcg fHwgcy5jWzJdICE9IDQ2IHx8IHMuZFstMl0gIT0gNDUgfHwgcy5kWy0xXSAhPSA0NCB8fCBz LmRbMF0gIT0gNDM7CiAgICAgICBzLmEgPSAxNzsgcy5iWzBdID0gMTg7IHMuYlsxXSA9IDE5 OwogICAgICAgcy5jWzFdID0gMjA7IHMuY1syXSA9IDIxOyBzLmRbLTJdID0gMjI7IHMuZFst MV0gPSAyMzsgcy5kWzBdID0gMjQ7CiAgICAgfQotICAgICNwcmFnbWEgb21wIHRhcmdldCB1 cGRhdGUgZnJvbShzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjozXSkKKyAgICAjcHJhZ21h IG9tcCB0YXJnZXQgdXBkYXRlIGZyb20ocy5hLCBzLmIsIHMuY1sxOjJdLCBzLmQsIHMuZFst MjozXSkKICAgfQogICBpZiAoc2VwCiAgICAgICAmJiAob21wX3RhcmdldF9pc19wcmVzZW50 ICgmcy5hLCBkKQpAQCAtNjYsMjkgKzY2LDI5IEBAIGZvbyAoc3RydWN0IFMgcykKICAgaWYg KGVycikgYWJvcnQgKCk7CiAgIHMuYSA9IDMzOyBzLmJbMF0gPSAzNDsgcy5iWzFdID0gMzU7 CiAgIHMuY1sxXSA9IDM2OyBzLmNbMl0gPSAzNzsgcy5kWy0yXSA9IDM4OyBzLmRbLTFdID0g Mzk7IHMuZFswXSA9IDQwOwotICAjcHJhZ21hIG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo YWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0yOjNdKQorICAjcHJhZ21hIG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBz LmRbLTI6M10pCiAgIGlmICghb21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQogICAg ICAgfHwgIW9tcF90YXJnZXRfaXNfcHJlc2VudCAocy5iLCBkKQogICAgICAgfHwgIW9tcF90 YXJnZXRfaXNfcHJlc2VudCAoJnMuY1sxXSwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lz X3ByZXNlbnQgKHMuZCwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZz LmRbLTJdLCBkKSkKICAgICBhYm9ydCAoKTsKLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsd2F5cywgdG86IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kWy0yOjNdKQot ICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMu ZFstMjozXSkgbWFwKGZyb206IGVycikKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKGFsd2F5cywgdG86IHMuYSwgcy5iLCBzLmNbMToyXSwgcy5kLCBzLmRbLTI6M10p CisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAoYWxsb2M6IHMuYSwgcy5iLCBzLmNbMToyXSwg cy5kLCBzLmRbLTI6M10pIG1hcChmcm9tOiBlcnIpCiAgIHsKICAgICBlcnIgPSBzLmEgIT0g MzMgfHwgcy5iWzBdICE9IDM0IHx8IHMuYlsxXSAhPSAzNTsKICAgICBlcnIgfD0gcy5jWzFd ICE9IDM2IHx8IHMuY1syXSAhPSAzNyB8fCBzLmRbLTJdICE9IDM4IHx8IHMuZFstMV0gIT0g MzkgfHwgcy5kWzBdICE9IDQwOwogICAgIHMuYSA9IDQ5OyBzLmJbMF0gPSA0ODsgcy5iWzFd ID0gNDc7CiAgICAgcy5jWzFdID0gNDY7IHMuY1syXSA9IDQ1OyBzLmRbLTJdID0gNDQ7IHMu ZFstMV0gPSA0Mzsgcy5kWzBdID0gNDI7CiAgIH0KLSAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoYWx3YXlzLCBmcm9tOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZFstMjoz XSkKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoYWx3YXlzLCBmcm9tOiBz LmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdKQogICBpZiAoIW9tcF90YXJnZXRf aXNfcHJlc2VudCAoJnMuYSwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQg KHMuYiwgZCkKICAgICAgIHx8ICFvbXBfdGFyZ2V0X2lzX3ByZXNlbnQgKCZzLmNbMV0sIGQp CiAgICAgICB8fCAhb21wX3RhcmdldF9pc19wcmVzZW50IChzLmQsIGQpCiAgICAgICB8fCAh b21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5kWy0yXSwgZCkpCiAgICAgYWJvcnQgKCk7Ci0g ICNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKHJlbGVhc2U6IHMuYSwgcy5iLCBz LmNbMToyXSwgcy5kWy0yOjNdKQorICAjcHJhZ21hIG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChyZWxlYXNlOiBzLmEsIHMuYiwgcy5jWzE6Ml0sIHMuZCwgcy5kWy0yOjNdKQogICBpZiAo c2VwCiAgICAgICAmJiAob21wX3RhcmdldF9pc19wcmVzZW50ICgmcy5hLCBkKQogCSAgfHwg b21wX3RhcmdldF9pc19wcmVzZW50IChzLmIsIGQpCg== --------------FA028848BDF46A00EA80C981--