From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 0A3A33858D39 for ; Thu, 25 Nov 2021 13:53:08 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 0A3A33858D39 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 8FCB81FB; Thu, 25 Nov 2021 05:53:07 -0800 (PST) Received: from [10.1.29.157] (E121495.Arm.com [10.1.29.157]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 01B313F66F; Thu, 25 Nov 2021 05:53:06 -0800 (PST) Content-Type: multipart/mixed; boundary="------------f3GdpK4W0WDraJApnzBRZSfU" Message-ID: Date: Thu, 25 Nov 2021 13:53:08 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.1 Subject: Re: [AArch64] Enable generation of FRINTNZ instructions Content-Language: en-US To: Richard Biener Cc: "gcc-patches@gcc.gnu.org" , Richard Sandiford References: <8225375c-eb9e-f9b3-6bcd-9fbccf2fc87b@arm.com> <70s9nn94-452-5rrr-4458-q6n3qp563652@fhfr.qr> <36e3469a-3922-d49e-4006-0088eac29157@arm.com> <653o8886-3p5n-sr82-9n83-71q33o8824@fhfr.qr> <6c730f35-10b1-2843-cffc-4ed0851380be@arm.com> <85sr96q-o3s-602o-3436-40713n68pp84@fhfr.qr> <8d593d5f-41a0-6051-0ce0-d72834ecfa25@arm.com> From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-13.5 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LOTSOFHASH, KAM_SHORT, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 25 Nov 2021 13:53:11 -0000 This is a multi-part message in MIME format. --------------f3GdpK4W0WDraJApnzBRZSfU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 22/11/2021 11:41, Richard Biener wrote: > >> On 18/11/2021 11:05, Richard Biener wrote: >>> This is a good shout and made me think about something I hadn't before... I >>> thought I could handle the vector forms later, but the problem is if I add >>> support for the scalar, it will stop the vectorizer. It seems >>> vectorizable_call expects all arguments to have the same type, which doesn't >>> work with passing the integer type as an operand work around. > We already special case some IFNs there (masked load/store and gather) > to ignore some args, so that would just add to this set. > > Richard. Hi, Reworked it to add support of the new IFN to the vectorizer. Was initially trying to make vectorizable_call and vectorizable_internal_function handle IFNs with different inputs more generically, using the information we have in the _direct structs regarding what operands to get the modes from. Unfortunately, that wasn't straightforward because of how vectorizable_call assumes operands have the same type and uses the type of the DEF_STMT_INFO of the non-constant operands (either output operand or non-constant inputs) to determine the type of constants. I assume there is some reason why we use the DEF_STMT_INFO and not always use get_vectype_for_scalar_type on the argument types. That is why I ended up with this sort of half-way mix of both, which still allows room to add more IFNs that don't take inputs of the same type, but require adding a bit of special casing similar to the IFN_FTRUNC_INT and masking ones. Bootstrapped on aarch64-none-linux. OK for trunk? gcc/ChangeLog:         * config/aarch64/aarch64.md (ftrunc2): New pattern.         * config/aarch64/iterators.md (FRINTNZ): New iterator.         (frintnz_mode): New int attribute.         (VSFDF): Make iterator conditional.         * internal-fn.def (FTRUNC_INT): New IFN.         * internal-fn.c (ftrunc_int_direct): New define.         (expand_ftrunc_int_optab_fn): New custom expander.         (direct_ftrunc_int_optab_supported_p): New supported_p.         * match.pd: Add to the existing TRUNC pattern match.         * optabs.def (ftrunc_int): New entry.         * stor-layout.h (element_precision): Moved from here...         * tree.h (element_precision): ... to here.         (element_type): New declaration.         * tree.c (element_type): New function.         (element_precision): Changed to use element_type.         * tree-vect-stmts.c (vectorizable_internal_function): Add support for         IFNs with different input types.         (vectorizable_call): Teach to handle IFN_FTRUNC_INT.         * doc/md.texi: New entry for ftrunc pattern name.         * doc/sourcebuild.texi (aarch64_frintzx_ok): New target. gcc/testsuite/ChangeLog:         * gcc.target/aarch64/merge_trunc1.c: Adapted to skip if frintNz instruction available.         * lib/target-supports.exp: Added arm_v8_5a_frintnzx_ok target.         * gcc.target/aarch64/frintnz.c: New test.         * gcc.target/aarch64/frintnz_vec.c: New test. --------------f3GdpK4W0WDraJApnzBRZSfU Content-Type: text/plain; charset=UTF-8; name="frintnz3.patch" Content-Disposition: attachment; filename="frintnz3.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0Lm1kIGIvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQubWQKaW5kZXggNDAzNWUwNjE3MDY3OTM4NDljNjhhZTA5YmNi MmU0Yjk1ODBhYjdiNi4uYzVjNjBlN2E4MTBlMjJiMGVhOWVkNmJmMDU2ZGRkNjQzMWQ2MDI2 OSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKKysrIGIvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQubWQKQEAgLTczNDUsMTIgKzczNDUsMTggQEAgKGRl ZmluZV9pbnNuICJkZXNwZWN1bGF0ZV9zaW1wbGV0aSIKICAgIChzZXRfYXR0ciAic3BlY3Vs YXRpb25fYmFycmllciIgInRydWUiKV0KICkKIAorKGRlZmluZV9leHBhbmQgImZ0cnVuYzxt b2RlPjxmcmludG56X21vZGU+MiIKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VlNGREYgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKKyAgICAgICAgKHVuc3BlYzpWU0ZERiBbKG1hdGNo X29wZXJhbmQ6VlNGREYgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInciKV0KKwkJICAgICAgRlJJ TlROWikpXQorICAiVEFSR0VUX0ZSSU5UIgorKQorCiAoZGVmaW5lX2luc24gImFhcmNoNjRf PGZyaW50bnpzX29wPjxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VlNGREYgMCAi cmVnaXN0ZXJfb3BlcmFuZCIgIj13IikKIAkodW5zcGVjOlZTRkRGIFsobWF0Y2hfb3BlcmFu ZDpWU0ZERiAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidyIpXQogCQkgICAgICBGUklOVE5aWCkp XQotICAiVEFSR0VUX0ZSSU5UICYmIFRBUkdFVF9GTE9BVAotICAgJiYgIShWRUNUT1JfTU9E RV9QICg8TU9ERT5tb2RlKSAmJiAhVEFSR0VUX1NJTUQpIgorICAiVEFSR0VUX0ZSSU5UIgog ICAiPGZyaW50bnpzX29wPlxcdCU8dj4wPFZtdHlwZT4sICU8dj4xPFZtdHlwZT4iCiAgIFso c2V0X2F0dHIgInR5cGUiICJmX3JpbnQ8c3R5cGU+IildCiApCmRpZmYgLS1naXQgYS9nY2Mv Y29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1kIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2l0ZXJh dG9ycy5tZAppbmRleCBiZGM4YmEzNTc2Y2YyYzliNGFlOTZiNDVhMzgyMjM0ZTRlMjViMTNm Li41MWYwMDM0NGIwMmQwZDFkNGFkZjk3NDYzZjZhNDZmOWZkMGZiNDNmIDEwMDY0NAotLS0g YS9nY2MvY29uZmlnL2FhcmNoNjQvaXRlcmF0b3JzLm1kCisrKyBiL2djYy9jb25maWcvYWFy Y2g2NC9pdGVyYXRvcnMubWQKQEAgLTE2MCw3ICsxNjAsMTEgQEAgKGRlZmluZV9tb2RlX2l0 ZXJhdG9yIFZIU0RGX0hTREYgWyhWNEhGICJUQVJHRVRfU0lNRF9GMTZJTlNUIikKIAkJCQkg IFNGIERGXSkKIAogOzsgU2NhbGFyIGFuZCB2ZXRvciBtb2RlcyBmb3IgU0YsIERGLgotKGRl ZmluZV9tb2RlX2l0ZXJhdG9yIFZTRkRGIFtWMlNGIFY0U0YgVjJERiBERiBTRl0pCisoZGVm aW5lX21vZGVfaXRlcmF0b3IgVlNGREYgWyAoVjJTRiAiVEFSR0VUX1NJTUQiKQorCQkJICAg ICAgKFY0U0YgIlRBUkdFVF9TSU1EIikKKwkJCSAgICAgIChWMkRGICJUQVJHRVRfU0lNRCIp CisJCQkgICAgICAoREYgIlRBUkdFVF9GTE9BVCIpCisJCQkgICAgICAoU0YgIlRBUkdFVF9G TE9BVCIpXSkKIAogOzsgQWR2YW5jZWQgU0lNRCBzaW5nbGUgRmxvYXQgbW9kZXMuCiAoZGVm aW5lX21vZGVfaXRlcmF0b3IgVkRRU0YgW1YyU0YgVjRTRl0pCkBAIC0zMDY3LDYgKzMwNzEs OCBAQCAoZGVmaW5lX2ludF9pdGVyYXRvciBGQ01MQSBbVU5TUEVDX0ZDTUxBCiAoZGVmaW5l X2ludF9pdGVyYXRvciBGUklOVE5aWCBbVU5TUEVDX0ZSSU5UMzJaIFVOU1BFQ19GUklOVDMy WAogCQkJICAgICAgIFVOU1BFQ19GUklOVDY0WiBVTlNQRUNfRlJJTlQ2NFhdKQogCisoZGVm aW5lX2ludF9pdGVyYXRvciBGUklOVE5aIFtVTlNQRUNfRlJJTlQzMlogVU5TUEVDX0ZSSU5U NjRaXSkKKwogKGRlZmluZV9pbnRfaXRlcmF0b3IgU1ZFX0JSS19VTkFSWSBbVU5TUEVDX0JS S0EgVU5TUEVDX0JSS0JdKQogCiAoZGVmaW5lX2ludF9pdGVyYXRvciBTVkVfQlJLX0JJTkFS WSBbVU5TUEVDX0JSS04gVU5TUEVDX0JSS1BBIFVOU1BFQ19CUktQQl0pCkBAIC0zNDgyLDYg KzM0ODgsOCBAQCAoZGVmaW5lX2ludF9hdHRyIGYxNm1hYzEgWyhVTlNQRUNfRk1MQUwgImEi KSAoVU5TUEVDX0ZNTFNMICJzIikKIChkZWZpbmVfaW50X2F0dHIgZnJpbnRuenNfb3AgWyhV TlNQRUNfRlJJTlQzMlogImZyaW50MzJ6IikgKFVOU1BFQ19GUklOVDMyWCAiZnJpbnQzMngi KQogCQkJICAgICAgKFVOU1BFQ19GUklOVDY0WiAiZnJpbnQ2NHoiKSAoVU5TUEVDX0ZSSU5U NjRYICJmcmludDY0eCIpXSkKIAorKGRlZmluZV9pbnRfYXR0ciBmcmludG56X21vZGUgWyhV TlNQRUNfRlJJTlQzMlogInNpIikgKFVOU1BFQ19GUklOVDY0WiAiZGkiKV0pCisKIDs7IFRo ZSBjb25kaXRpb24gYXNzb2NpYXRlZCB3aXRoIGFuIFVOU1BFQ19DT05EXzx4eD4uCiAoZGVm aW5lX2ludF9hdHRyIGNtcF9vcCBbKFVOU1BFQ19DT05EX0NNUEVRX1dJREUgImVxIikKIAkJ CSAoVU5TUEVDX0NPTkRfQ01QR0VfV0lERSAiZ2UiKQpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9t ZC50ZXhpIGIvZ2NjL2RvYy9tZC50ZXhpCmluZGV4IDQxZjE4NTBiZjZlOTUwMDU2NDdjYTk3 YTQ5NWE5N2Q3ZTE4NGQxMzcuLmQ1MGQwOWIwYWU2MGQ5ODUzN2I5YWVjZTQzOTZhNDkwZjMz ZjE3NGMgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvbWQudGV4aQorKysgYi9nY2MvZG9jL21kLnRl eGkKQEAgLTYxNzUsNiArNjE3NSwxNSBAQCBvcGVyYW5kczsgb3RoZXJ3aXNlLCBpdCBtYXkg bm90LgogCiBUaGlzIHBhdHRlcm4gaXMgbm90IGFsbG93ZWQgdG8gQGNvZGV7RkFJTH0uCiAK K0BjaW5kZXggQGNvZGV7ZnRydW5jQHZhcnttfUB2YXJ7bn0yfSBpbnN0cnVjdGlvbiBwYXR0 ZXJuCitAaXRlbSBAc2FtcHtmdHJ1bmNAdmFye219QHZhcntufTJ9CitUcnVuY2F0ZSBvcGVy YW5kIDEgdG8gYSBAdmFye259IG1vZGUgc2lnbmVkIGludGVnZXIsIHRvd2FyZHMgemVybywg YW5kIHN0b3JlCit0aGUgcmVzdWx0IGluIG9wZXJhbmQgMC4gQm90aCBvcGVyYW5kcyBoYXZl IG1vZGUgQHZhcnttfSwgd2hpY2ggaXMgYSBzY2FsYXIgb3IKK3ZlY3RvciBmbG9hdGluZy1w b2ludCBtb2RlLiAgRXhjZXB0aW9uIG11c3QgYmUgdGhyb3duIGlmIG9wZXJhbmQgMSBkb2Vz IG5vdCBmaXQKK2luIGEgQHZhcntufSBtb2RlIHNpZ25lZCBpbnRlZ2VyIGFzIGl0IHdvdWxk IGhhdmUgaWYgdGhlIHRydW5jYXRpb24gaGFwcGVuZWQKK3Rocm91Z2ggc2VwYXJhdGUgZmxv YXRpbmcgcG9pbnQgdG8gaW50ZWdlciBjb252ZXJzaW9uLgorCisKIEBjaW5kZXggQGNvZGV7 cm91bmRAdmFye219Mn0gaW5zdHJ1Y3Rpb24gcGF0dGVybgogQGl0ZW0gQHNhbXB7cm91bmRA dmFye219Mn0KIFJvdW5kIG9wZXJhbmQgMSB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLCByb3Vu ZGluZyBhd2F5IGZyb20gemVybyBpbiB0aGUKZGlmZiAtLWdpdCBhL2djYy9kb2Mvc291cmNl YnVpbGQudGV4aSBiL2djYy9kb2Mvc291cmNlYnVpbGQudGV4aQppbmRleCA0MGIxZTBkODE2 Nzg5YjIyNTA4OWM0MTQzZmI2M2U2MmE2YWY4MTdhLi4xNWQ0ZGUyNGQxNWNjZTY3OTNiM2Ji NjFkNzI4ZTYxY2VhMDA5MjRkIDEwMDY0NAotLS0gYS9nY2MvZG9jL3NvdXJjZWJ1aWxkLnRl eGkKKysrIGIvZ2NjL2RvYy9zb3VyY2VidWlsZC50ZXhpCkBAIC0yMjgyLDYgKzIyODIsMTAg QEAgTGlrZSBAY29kZXthYXJjaDY0X3N2ZV9od30sIGJ1dCBhbHNvIHRlc3QgZm9yIGFuIGV4 YWN0IGhhcmR3YXJlIHZlY3RvciBsZW5ndGguCiBAaXRlbSBhYXJjaDY0X2ZqY3Z0enNfaHcK IEFBcmNoNjQgdGFyZ2V0IHRoYXQgaXMgYWJsZSB0byBnZW5lcmF0ZSBhbmQgZXhlY3V0ZSBh cm12OC4zLWEgRkpDVlRaUwogaW5zdHJ1Y3Rpb24uCisKK0BpdGVtIGFhcmNoNjRfZnJpbnR6 eF9vaworQUFyY2g2NCB0YXJnZXQgdGhhdCBpcyBhYmxlIHRvIGdlbmVyYXRlIHRoZSBBcm12 OC41LWEgRlJJTlQzMlosIEZSSU5UNjRaLAorRlJJTlQzMlggYW5kIEZSSU5UNjRYIGluc3Ry dWN0aW9ucy4KIEBlbmQgdGFibGUKIAogQHN1YnN1YnNlY3Rpb24gTUlQUy1zcGVjaWZpYyBh dHRyaWJ1dGVzCmRpZmYgLS1naXQgYS9nY2MvaW50ZXJuYWwtZm4uYyBiL2djYy9pbnRlcm5h bC1mbi5jCmluZGV4IDBjYmE5NTQxMWE2MzQyMzQ4NGRkYTViMTI1MWY0N2RlMjRlOTI2YmEu LjYwYjQwNGVmNDQzNjBjOGFlMGNkYTExNzZmYjg4ODMwMmRkYmM5OGQgMTAwNjQ0Ci0tLSBh L2djYy9pbnRlcm5hbC1mbi5jCisrKyBiL2djYy9pbnRlcm5hbC1mbi5jCkBAIC0xMzAsNiAr MTMwLDcgQEAgaW5pdF9pbnRlcm5hbF9mbnMgKCkKICNkZWZpbmUgZm9sZF9sZWZ0X2RpcmVj dCB7IDEsIDEsIGZhbHNlIH0KICNkZWZpbmUgbWFza19mb2xkX2xlZnRfZGlyZWN0IHsgMSwg MSwgZmFsc2UgfQogI2RlZmluZSBjaGVja19wdHJzX2RpcmVjdCB7IDAsIDAsIGZhbHNlIH0K KyNkZWZpbmUgZnRydW5jX2ludF9kaXJlY3QgeyAwLCAxLCB0cnVlIH0KIAogY29uc3QgZGly ZWN0X2ludGVybmFsX2ZuX2luZm8gZGlyZWN0X2ludGVybmFsX2ZuX2FycmF5W0lGTl9MQVNU ICsgMV0gPSB7CiAjZGVmaW5lIERFRl9JTlRFUk5BTF9GTihDT0RFLCBGTEFHUywgRk5TUEVD KSBub3RfZGlyZWN0LApAQCAtMTU2LDYgKzE1NywyOSBAQCBnZXRfbXVsdGlfdmVjdG9yX21v dmUgKHRyZWUgYXJyYXlfdHlwZSwgY29udmVydF9vcHRhYiBvcHRhYikKICAgcmV0dXJuIGNv bnZlcnRfb3B0YWJfaGFuZGxlciAob3B0YWIsIGltb2RlLCB2bW9kZSk7CiB9CiAKKy8qIEV4 cGFuZCBGVFJVTkNfSU5UIGNhbGwgU1RNVCB1c2luZyBvcHRhYiBPUFRBQi4gICovCisKK3N0 YXRpYyB2b2lkCitleHBhbmRfZnRydW5jX2ludF9vcHRhYl9mbiAoaW50ZXJuYWxfZm4sIGdj YWxsICpzdG10LCBjb252ZXJ0X29wdGFiIG9wdGFiKQoreworICBjbGFzcyBleHBhbmRfb3Bl cmFuZCBvcHNbMl07CisgIHRyZWUgbGhzLCBmbG9hdF90eXBlLCBpbnRfdHlwZTsKKyAgcnR4 IHRhcmdldCwgb3A7CisKKyAgbGhzID0gZ2ltcGxlX2NhbGxfbGhzIChzdG10KTsKKyAgdGFy Z2V0ID0gZXhwYW5kX25vcm1hbCAobGhzKTsKKyAgb3AgPSBleHBhbmRfbm9ybWFsIChnaW1w bGVfY2FsbF9hcmcgKHN0bXQsIDApKTsKKworICBmbG9hdF90eXBlID0gVFJFRV9UWVBFIChs aHMpOworICBpbnRfdHlwZSA9IGVsZW1lbnRfdHlwZSAoZ2ltcGxlX2NhbGxfYXJnIChzdG10 LCAxKSk7CisKKyAgY3JlYXRlX291dHB1dF9vcGVyYW5kICgmb3BzWzBdLCB0YXJnZXQsIFRZ UEVfTU9ERSAoZmxvYXRfdHlwZSkpOworICBjcmVhdGVfaW5wdXRfb3BlcmFuZCAoJm9wc1sx XSwgb3AsIFRZUEVfTU9ERSAoZmxvYXRfdHlwZSkpOworCisgIGV4cGFuZF9pbnNuIChjb252 ZXJ0X29wdGFiX2hhbmRsZXIgKG9wdGFiLCBUWVBFX01PREUgKGZsb2F0X3R5cGUpLAorCQkJ CSAgICAgIFRZUEVfTU9ERSAoaW50X3R5cGUpKSwgMiwgb3BzKTsKK30KKwogLyogRXhwYW5k IExPQURfTEFORVMgY2FsbCBTVE1UIHVzaW5nIG9wdGFiIE9QVEFCLiAgKi8KIAogc3RhdGlj IHZvaWQKQEAgLTM2ODgsNiArMzcxMiwxNSBAQCBtdWx0aV92ZWN0b3Jfb3B0YWJfc3VwcG9y dGVkX3AgKGNvbnZlcnRfb3B0YWIgb3B0YWIsIHRyZWVfcGFpciB0eXBlcywKIAkgICE9IENP REVfRk9SX25vdGhpbmcpOwogfQogCitzdGF0aWMgYm9vbCBkaXJlY3RfZnRydW5jX2ludF9v cHRhYl9zdXBwb3J0ZWRfcCAoY29udmVydF9vcHRhYiBvcHRhYiwKKwkJCQkJCSB0cmVlX3Bh aXIgdHlwZXMsCisJCQkJCQkgb3B0aW1pemF0aW9uX3R5cGUgb3B0X3R5cGUpCit7CisgIHJl dHVybiAoY29udmVydF9vcHRhYl9oYW5kbGVyIChvcHRhYiwgVFlQRV9NT0RFICh0eXBlcy5m aXJzdCksCisJCQkJVFlQRV9NT0RFIChlbGVtZW50X3R5cGUgKHR5cGVzLnNlY29uZCkpLAor CQkJCW9wdF90eXBlKSAhPSBDT0RFX0ZPUl9ub3RoaW5nKTsKK30KKwogI2RlZmluZSBkaXJl Y3RfdW5hcnlfb3B0YWJfc3VwcG9ydGVkX3AgZGlyZWN0X29wdGFiX3N1cHBvcnRlZF9wCiAj ZGVmaW5lIGRpcmVjdF9iaW5hcnlfb3B0YWJfc3VwcG9ydGVkX3AgZGlyZWN0X29wdGFiX3N1 cHBvcnRlZF9wCiAjZGVmaW5lIGRpcmVjdF90ZXJuYXJ5X29wdGFiX3N1cHBvcnRlZF9wIGRp cmVjdF9vcHRhYl9zdXBwb3J0ZWRfcApkaWZmIC0tZ2l0IGEvZ2NjL2ludGVybmFsLWZuLmRl ZiBiL2djYy9pbnRlcm5hbC1mbi5kZWYKaW5kZXggYmIxM2M2Y2NlMWJmNTU2MzM3NjBiYzE0 OTgwNDAyZjFmMGFjMTY4OS4uZTU4ODkxZTNkM2ViYzgwNWRkNTVhYzZmNzBiYmRhNjE3Yjcz MDJiNyAxMDA2NDQKLS0tIGEvZ2NjL2ludGVybmFsLWZuLmRlZgorKysgYi9nY2MvaW50ZXJu YWwtZm4uZGVmCkBAIC02Niw2ICs2Niw5IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZp bGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCiAKICAgIC0gZm9sZF9sZWZ0OiBmb3Igc2NhbGFy ID0gRk4gKHNjYWxhciwgdmVjdG9yKSwga2V5ZWQgb2ZmIHRoZSB2ZWN0b3IgbW9kZQogICAg LSBjaGVja19wdHJzOiB1c2VkIGZvciBjaGVja197cmF3LHdhcn1fcHRycworICAgLSBmdHJ1 bmNfaW50OiBhIHVuYXJ5IGNvbnZlcnNpb24gb3B0YWIgdGhhdCB0YWtlcyBhbmQgcmV0dXJu cyB2YWx1ZXMgb2YgdGhlCisgICBzYW1lIG1vZGUsIGJ1dCBpbnRlcm5hbGx5IGNvbnZlcnRz IHZpYSBhbm90aGVyIG1vZGUuICBUaGlzIHNlY29uZCBtb2RlIGlzCisgICBzcGVjaWZpZWQg dXNpbmcgYSBkdW1teSBmaW5hbCBmdW5jdGlvbiBhcmd1bWVudC4KIAogICAgREVGX0lOVEVS TkFMX1NJR05FRF9PUFRBQl9GTiBkZWZpbmVzIGFuIGludGVybmFsIGZ1bmN0aW9uIHRoYXQK ICAgIG1hcHMgdG8gb25lIG9mIHR3byBvcHRhYnMsIGRlcGVuZGluZyBvbiB0aGUgc2lnbmVk bmVzcyBvZiBhbiBpbnB1dC4KQEAgLTI2OSw2ICsyNzIsNyBAQCBERUZfSU5URVJOQUxfRkxU X0ZMT0FUTl9GTiAoUklOVCwgRUNGX0NPTlNULCByaW50LCB1bmFyeSkKIERFRl9JTlRFUk5B TF9GTFRfRkxPQVROX0ZOIChST1VORCwgRUNGX0NPTlNULCByb3VuZCwgdW5hcnkpCiBERUZf SU5URVJOQUxfRkxUX0ZMT0FUTl9GTiAoUk9VTkRFVkVOLCBFQ0ZfQ09OU1QsIHJvdW5kZXZl biwgdW5hcnkpCiBERUZfSU5URVJOQUxfRkxUX0ZMT0FUTl9GTiAoVFJVTkMsIEVDRl9DT05T VCwgYnRydW5jLCB1bmFyeSkKK0RFRl9JTlRFUk5BTF9PUFRBQl9GTiAoRlRSVU5DX0lOVCwg RUNGX0NPTlNULCBmdHJ1bmNpbnQsIGZ0cnVuY19pbnQpCiAKIC8qIEJpbmFyeSBtYXRoIGZ1 bmN0aW9ucy4gICovCiBERUZfSU5URVJOQUxfRkxUX0ZOIChBVEFOMiwgRUNGX0NPTlNULCBh dGFuMiwgYmluYXJ5KQpkaWZmIC0tZ2l0IGEvZ2NjL21hdGNoLnBkIGIvZ2NjL21hdGNoLnBk CmluZGV4IGEzMTlhZWZhODA4MWFjMTc3OTgxYWQ0MjVjNDYxZjhhNzcxMTI4ZjQuLjgwNjYw ZTZmZDQwYmM2OTM0ZTFmYTAzMjljMGZiY2FiMTY1OGVkNDQgMTAwNjQ0Ci0tLSBhL2djYy9t YXRjaC5wZAorKysgYi9nY2MvbWF0Y2gucGQKQEAgLTM3MTMsMTIgKzM3MTMsMjEgQEAgREVG SU5FX0lOVF9BTkRfRkxPQVRfUk9VTkRfRk4gKFJJTlQpCiAgICB0cmFwcGluZyBiZWhhdmlv dXIsIHNvIHJlcXVpcmUgIWZsYWdfdHJhcHBpbmdfbWF0aC4gKi8KICNpZiBHSU1QTEUKIChz aW1wbGlmeQotICAgKGZsb2F0IChmaXhfdHJ1bmMgQDApKQotICAgKGlmICghZmxhZ190cmFw cGluZ19tYXRoCi0JJiYgdHlwZXNfbWF0Y2ggKHR5cGUsIFRSRUVfVFlQRSAoQDApKQotCSYm IGRpcmVjdF9pbnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoSUZOX1RSVU5DLCB0eXBlLAotCQkJ CQkgIE9QVElNSVpFX0ZPUl9CT1RIKSkKLSAgICAgIChJRk5fVFJVTkMgQDApKSkKKyAgIChm bG9hdCAoZml4X3RydW5jQDEgQDApKQorICAgKGlmICh0eXBlc19tYXRjaCAodHlwZSwgVFJF RV9UWVBFIChAMCkpKQorICAgICh3aXRoIHsKKyAgICAgIHRyZWUgaW50X3R5cGUgPSBlbGVt ZW50X3R5cGUgKEAxKTsKKyAgICAgfQorICAgICAoaWYgKFRZUEVfU0lHTiAoVFJFRV9UWVBF IChAMSkpID09IFNJR05FRAorCSAgJiYgZGlyZWN0X2ludGVybmFsX2ZuX3N1cHBvcnRlZF9w IChJRk5fRlRSVU5DX0lOVCwgdHlwZSwgaW50X3R5cGUsCisJCQkJCSAgICAgT1BUSU1JWkVf Rk9SX0JPVEgpKQorICAgICAgKElGTl9GVFJVTkNfSU5UIEAwIHsKKyAgICAgICB3aWRlX2lu dF90b190cmVlIChpbnRfdHlwZSwgd2k6Om1heF92YWx1ZSAoVFlQRV9QUkVDSVNJT04gKGlu dF90eXBlKSwKKwkJCQkJCSAgU0lHTkVEKSk7IH0pCisgICAgICAoaWYgKCFmbGFnX3RyYXBw aW5nX21hdGgKKwkgICAmJiBkaXJlY3RfaW50ZXJuYWxfZm5fc3VwcG9ydGVkX3AgKElGTl9U UlVOQywgdHlwZSwKKwkJCQkJICAgICAgT1BUSU1JWkVfRk9SX0JPVEgpKQorICAgICAgIChJ Rk5fVFJVTkMgQDApKSkpKSkKICNlbmRpZgogCiAvKiBJZiB3ZSBoYXZlIGEgbmFycm93aW5n IGNvbnZlcnNpb24gdG8gYW4gaW50ZWdyYWwgdHlwZSB0aGF0IGlzIGZlZCBieSBhCmRpZmYg LS1naXQgYS9nY2Mvb3B0YWJzLmRlZiBiL2djYy9vcHRhYnMuZGVmCmluZGV4IGI4ODlhZDJl NWEwODYxM2RiNTFkMTZkMDcyMDgwYWM2Y2I0ODQwNGYuLjU3ZDI1OWQzMzQwOTI2NWRmM2Fm MTY0NmQxMjNlNGFiMjE2YzM0YzggMTAwNjQ0Ci0tLSBhL2djYy9vcHRhYnMuZGVmCisrKyBi L2djYy9vcHRhYnMuZGVmCkBAIC02Myw2ICs2Myw3IEBAIE9QVEFCX0NYKGZyYWN0dW5zX29w dGFiLCAiZnJhY3R1bnMkUSRiJEkkYTIiKQogT1BUQUJfQ0woc2F0ZnJhY3Rfb3B0YWIsICJz YXRmcmFjdCRiJFEkYTIiLCBTQVRfRlJBQ1QsICJzYXRmcmFjdCIsIGdlbl9zYXRmcmFjdF9j b252X2xpYmZ1bmMpCiBPUFRBQl9DTChzYXRmcmFjdHVuc19vcHRhYiwgInNhdGZyYWN0dW5z JEkkYiRRJGEyIiwgVU5TSUdORURfU0FUX0ZSQUNULCAic2F0ZnJhY3R1bnMiLCBnZW5fc2F0 ZnJhY3R1bnNfY29udl9saWJmdW5jKQogCitPUFRBQl9DRChmdHJ1bmNpbnRfb3B0YWIsICJm dHJ1bmMkYSRiMiIpCiBPUFRBQl9DRChzZml4dHJ1bmNfb3B0YWIsICJmaXhfdHJ1bmMkRiRi JEkkYTIiKQogT1BUQUJfQ0QodWZpeHRydW5jX29wdGFiLCAiZml4dW5zX3RydW5jJEYkYiRJ JGEyIikKIApkaWZmIC0tZ2l0IGEvZ2NjL3N0b3ItbGF5b3V0LmggYi9nY2Mvc3Rvci1sYXlv dXQuaAppbmRleCA5ZTg5MmU1MGM4NTU5ZTQ5N2ZjYWUxYjc3YTM2NDAxZGY4MmZhYmUyLi4x NjVhNTkyZDRkMmM3YmY1MjUwNjBkZDUxY2U2MDk0ZWI0ZjRmNjhhIDEwMDY0NAotLS0gYS9n Y2Mvc3Rvci1sYXlvdXQuaAorKysgYi9nY2Mvc3Rvci1sYXlvdXQuaApAQCAtMzYsNyArMzYs NiBAQCBleHRlcm4gdm9pZCBwbGFjZV9maWVsZCAocmVjb3JkX2xheW91dF9pbmZvLCB0cmVl KTsKIGV4dGVybiB2b2lkIGNvbXB1dGVfcmVjb3JkX21vZGUgKHRyZWUpOwogZXh0ZXJuIHZv aWQgZmluaXNoX2JpdGZpZWxkX2xheW91dCAodHJlZSk7CiBleHRlcm4gdm9pZCBmaW5pc2hf cmVjb3JkX2xheW91dCAocmVjb3JkX2xheW91dF9pbmZvLCBpbnQpOwotZXh0ZXJuIHVuc2ln bmVkIGludCBlbGVtZW50X3ByZWNpc2lvbiAoY29uc3RfdHJlZSk7CiBleHRlcm4gdm9pZCBm aW5hbGl6ZV9zaXplX2Z1bmN0aW9ucyAodm9pZCk7CiBleHRlcm4gdm9pZCBmaXh1cF91bnNp Z25lZF90eXBlICh0cmVlKTsKIGV4dGVybiB2b2lkIGluaXRpYWxpemVfc2l6ZXR5cGVzICh2 b2lkKTsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2Zy aW50bnouYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZyaW50bnouYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwLi4wMDhlMWNmOWY0YTFiMDE0ODEyOGM2NWM5ZWEwZDFiYjExMTQ2N2I3 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv ZnJpbnRuei5jCkBAIC0wLDAgKzEsOTEgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB9ICovCisv KiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFyY2g9YXJtdjguNS1hIiB9ICovCisvKiB7IGRnLXJl cXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhYXJjaDY0X2ZyaW50bnp4X29rIH0gKi8KKy8qIHsg ZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1ib2RpZXMgIioqIiAiIiB9IH0gKi8KKworLyoK KyoqIGYxOgorKioJZnJpbnQzMnoJczAsIHMwCisqKglyZXQKKyovCitmbG9hdAorZjEgKGZs b2F0IHgpCit7CisgIGludCB5ID0geDsKKyAgcmV0dXJuIChmbG9hdCkgeTsKK30KKworLyoK KyoqIGYyOgorKioJZnJpbnQ2NHoJczAsIHMwCisqKglyZXQKKyovCitmbG9hdAorZjIgKGZs b2F0IHgpCit7CisgIGxvbmcgbG9uZyBpbnQgeSA9IHg7CisgIHJldHVybiAoZmxvYXQpIHk7 Cit9CisKKy8qCisqKiBmMzoKKyoqCWZyaW50MzJ6CWQwLCBkMAorKioJcmV0CisqLworZG91 YmxlCitmMyAoZG91YmxlIHgpCit7CisgIGludCB5ID0geDsKKyAgcmV0dXJuIChkb3VibGUp IHk7Cit9CisKKy8qCisqKiBmNDoKKyoqCWZyaW50NjR6CWQwLCBkMAorKioJcmV0CisqLwor ZG91YmxlCitmNCAoZG91YmxlIHgpCit7CisgIGxvbmcgbG9uZyBpbnQgeSA9IHg7CisgIHJl dHVybiAoZG91YmxlKSB5OworfQorCitmbG9hdAorZjFfZG9udCAoZmxvYXQgeCkKK3sKKyAg dW5zaWduZWQgaW50IHkgPSB4OworICByZXR1cm4gKGZsb2F0KSB5OworfQorCitmbG9hdAor ZjJfZG9udCAoZmxvYXQgeCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsb25nIGludCB5ID0geDsK KyAgcmV0dXJuIChmbG9hdCkgeTsKK30KKworZG91YmxlCitmM19kb250IChkb3VibGUgeCkK K3sKKyAgdW5zaWduZWQgaW50IHkgPSB4OworICByZXR1cm4gKGRvdWJsZSkgeTsKK30KKwor ZG91YmxlCitmNF9kb250IChkb3VibGUgeCkKK3sKKyAgdW5zaWduZWQgbG9uZyBsb25nIGlu dCB5ID0geDsKKyAgcmV0dXJuIChkb3VibGUpIHk7Cit9CisKK2RvdWJsZQorZjVfZG9udCAo ZG91YmxlIHgpCit7CisgIHNpZ25lZCBzaG9ydCB5ID0geDsKKyAgcmV0dXJuIChkb3VibGUp IHk7Cit9CisKKy8qIE1ha2Ugc3VyZSB0aGUgJ2RvbnQncyBkb24ndCBnZW5lcmF0ZSBhbnkg ZnJpbnROei4gICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge2Zy aW50MzJ6fSAyIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtmcmludDY0en0gMiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L2ZyaW50bnpfdmVjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9mcmludG56X3ZlYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI5MzMwNGViMmFjYjNkM2Q5 NTRlZWJlZTUxZDc3ZmYyM2ZlZTY4YWMKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mcmludG56X3ZlYy5jCkBAIC0wLDAgKzEsNDcgQEAK Ky8qIHsgZGctZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMyAtbWFyY2g9 YXJtdjguNS1hIiB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhYXJj aDY0X2ZyaW50bnp4X29rIH0gKi8KKy8qIHsgZGctZmluYWwgeyBjaGVjay1mdW5jdGlvbi1i b2RpZXMgIioqIiAiIiB9IH0gKi8KKworI2RlZmluZSBURVNUKG5hbWUsZmxvYXRfdHlwZSxp bnRfdHlwZSkJCQkJCVwKK3ZvaWQJCQkJCQkJCQlcCituYW1lIChmbG9hdF90eXBlICogX19y ZXN0cmljdF9fIHgsIGZsb2F0X3R5cGUgKiBfX3Jlc3RyaWN0X18geSwgaW50IG4pICBcCit7 CQkJCQkJCQkJXAorICBmb3IgKGludCBpID0gMDsgaSA8IG47ICsraSkJCQkJCSAgICAgIFwK KyAgICB7CQkJCQkJCQkgICAgICBcCisgICAgICBpbnRfdHlwZSB4X2kgPSB4W2ldOwkJCQkJ ICAgICAgXAorICAgICAgeVtpXSA9IChmbG9hdF90eXBlKSB4X2k7CQkJCQkgICAgICBcCisg ICAgfQkJCQkJCQkJICAgICAgXAorfQorCisvKgorKiogZjE6CisqKgkuLi4KKyoqCWZyaW50 MzJ6CXYwLjRzLCB2MC40cworKioJLi4uCisqLworVEVTVChmMSwgZmxvYXQsIGludCkKKwor LyoKKyoqIGYyOgorKioJLi4uCisqKglmcmludDY0egl2MC40cywgdjAuNHMKKyoqCS4uLgor Ki8KK1RFU1QoZjIsIGZsb2F0LCBsb25nIGxvbmcpCisKKy8qCisqKiBmMzoKKyoqCS4uLgor KioJZnJpbnQzMnoJdjAuMmQsIHYwLjJkCisqKgkuLi4KKyovCitURVNUKGYzLCBkb3VibGUs IGludCkKKworLyoKKyoqIGY0OgorKioJLi4uCisqKglmcmludDY0egl2MC4yZCwgdjAuMmQK KyoqCS4uLgorKi8KK1RFU1QoZjQsIGRvdWJsZSwgbG9uZyBsb25nKQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWVyZ2VfdHJ1bmMxLmMgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9tZXJnZV90cnVuYzEuYwppbmRleCAwNzIx NzA2NGUyYmE1NGZjZjRmNWVkYzQ0MGU2ZWMxOWRkYWU2NmUxLi4zZDgwODcxYzRjZWJkNWZi NWNhYzA3MTRiM2ZlZWUyNzAzOGYwNWZkIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9tZXJnZV90cnVuYzEuYworKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9tZXJnZV90cnVuYzEuYwpAQCAtMSw1ICsxLDYgQEAKIC8qIHsg ZGctZG8gY29tcGlsZSB9ICovCiAvKiB7IGRnLW9wdGlvbnMgIi1PMiAtZmZhc3QtbWF0aCIg fSAqLworLyogeyBkZy1za2lwLWlmICIiIHsgYWFyY2g2NF9mcmludG56eF9vayB9IH0gKi8K IAogZmxvYXQKIGYxIChmbG9hdCB4KQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9saWIv dGFyZ2V0LXN1cHBvcnRzLmV4cCBiL2djYy90ZXN0c3VpdGUvbGliL3RhcmdldC1zdXBwb3J0 cy5leHAKaW5kZXggOGNiZGExOTJmZTBmYWU1OWVhMjA4ZWU0MzY5NmI0ZDIyYzQzZTYxZS4u NDUwY2E3ODIzMGZhZWJhNDBiODlmYzc5ODdhZjI3YjZiZjBhMGQ1MyAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9saWIvdGFyZ2V0LXN1cHBvcnRzLmV4cAorKysgYi9nY2MvdGVzdHN1 aXRlL2xpYi90YXJnZXQtc3VwcG9ydHMuZXhwCkBAIC0xMTM2NSw2ICsxMTM2NSwzMiBAQCBw cm9jIGNoZWNrX2VmZmVjdGl2ZV90YXJnZXRfYXJtX3Y4XzNhX2JrZXlfZGlyZWN0aXZlIHsg fSB7CiAJfV0KIH0KIAorIyBSZXR1cm4gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIEFybXY4 LjUtQSBzY2FsYXIgYW5kIEFkdmFuY2VkIFNJTUQKKyMgRlJJTlQzMltaWF0gYW5kZCBGUklO VDY0W1pYXSBpbnN0cnVjdGlvbnMsIDAgb3RoZXJ3aXNlLiBUaGUgdGVzdCBpcyB2YWxpZCBm b3IKKyMgQUFyY2g2NC4KK3Byb2MgY2hlY2tfZWZmZWN0aXZlX3RhcmdldF9hYXJjaDY0X2Zy aW50bnp4X29rX25vY2FjaGUgeyB9IHsKKworICAgIGlmIHsgIVtpc3RhcmdldCBhYXJjaDY0 Ki0qLSpdIH0geworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZiB7IFtjaGVj a19ub19jb21waWxlcl9tZXNzYWdlc19ub2NhY2hlIFwKKwkgICAgICBhYXJjaDY0X2ZyaW50 bnp4X29rIGFzc2VtYmx5IHsKKwkjaWYgIWRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfRlJJTlQp CisJI2Vycm9yICJfX0FSTV9GRUFUVVJFX0ZSSU5UIG5vdCBkZWZpbmVkIgorCSNlbmRpZgor ICAgIH0gW2N1cnJlbnRfY29tcGlsZXJfZmxhZ3NdXSB9IHsKKwlyZXR1cm4gMTsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KKworcHJvYyBjaGVja19lZmZlY3RpdmVfdGFyZ2V0X2Fh cmNoNjRfZnJpbnRuenhfb2sgeyB9IHsKKyAgICByZXR1cm4gW2NoZWNrX2NhY2hlZF9lZmZl Y3RpdmVfdGFyZ2V0IGFhcmNoNjRfZnJpbnRuenhfb2sgXAorICAgICAgICAgICAgICAgIGNo ZWNrX2VmZmVjdGl2ZV90YXJnZXRfYWFyY2g2NF9mcmludG56eF9va19ub2NhY2hlXSAKK30K KwogIyBSZXR1cm4gMSBpZiB0aGUgdGFyZ2V0IHN1cHBvcnRzIGV4ZWN1dGluZyB0aGUgQXJt djguMS1NIE1haW5saW5lIExvdwogIyBPdmVyaGVhZCBMb29wLCAwIG90aGVyd2lzZS4gIFRo ZSB0ZXN0IGlzIHZhbGlkIGZvciBBUk0uCiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3Qt c3RtdHMuYyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuYwppbmRleCAwM2NjNzI2N2NmODBkNGNl NzNjMGQ4OWFiODZiMDdlODQ3NTI0NTZhLi4zNWJiMWY3MGY3YjE3M2FkMGQxZTlmNzBjZTBh YzlkYTg5MWRiZTYyIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LXN0bXRzLmMKKysrIGIv Z2NjL3RyZWUtdmVjdC1zdG10cy5jCkBAIC0xNjI1LDcgKzE2MjUsOCBAQCB2ZWN0X2Zpbmlz aF9zdG10X2dlbmVyYXRpb24gKHZlY19pbmZvICp2aW5mbywKIAogc3RhdGljIGludGVybmFs X2ZuCiB2ZWN0b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rpb24gKGNvbWJpbmVkX2ZuIGNmbiwg dHJlZSBmbmRlY2wsCi0JCQkJdHJlZSB2ZWN0eXBlX291dCwgdHJlZSB2ZWN0eXBlX2luKQor CQkJCXRyZWUgdmVjdHlwZV9vdXQsIHRyZWUgdmVjdHlwZV9pbiwKKwkJCQl0cmVlICp2ZWN0 eXBlcykKIHsKICAgaW50ZXJuYWxfZm4gaWZuOwogICBpZiAoaW50ZXJuYWxfZm5fcCAoY2Zu KSkKQEAgLTE2MzcsOCArMTYzOCwxMiBAQCB2ZWN0b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rp b24gKGNvbWJpbmVkX2ZuIGNmbiwgdHJlZSBmbmRlY2wsCiAgICAgICBjb25zdCBkaXJlY3Rf aW50ZXJuYWxfZm5faW5mbyAmaW5mbyA9IGRpcmVjdF9pbnRlcm5hbF9mbiAoaWZuKTsKICAg ICAgIGlmIChpbmZvLnZlY3Rvcml6YWJsZSkKIAl7Ci0JICB0cmVlIHR5cGUwID0gKGluZm8u dHlwZTAgPCAwID8gdmVjdHlwZV9vdXQgOiB2ZWN0eXBlX2luKTsKLQkgIHRyZWUgdHlwZTEg PSAoaW5mby50eXBlMSA8IDAgPyB2ZWN0eXBlX291dCA6IHZlY3R5cGVfaW4pOworCSAgdHJl ZSB0eXBlMCA9IChpbmZvLnR5cGUwIDwgMCA/IHZlY3R5cGVfb3V0IDogdmVjdHlwZXNbaW5m by50eXBlMF0pOworCSAgaWYgKCF0eXBlMCkKKwkgICAgdHlwZTAgPSB2ZWN0eXBlX2luOwor CSAgdHJlZSB0eXBlMSA9IChpbmZvLnR5cGUxIDwgMCA/IHZlY3R5cGVfb3V0IDogdmVjdHlw ZXNbaW5mby50eXBlMV0pOworCSAgaWYgKCF0eXBlMSkKKwkgICAgdHlwZTEgPSB2ZWN0eXBl X2luOwogCSAgaWYgKGRpcmVjdF9pbnRlcm5hbF9mbl9zdXBwb3J0ZWRfcCAoaWZuLCB0cmVl X3BhaXIgKHR5cGUwLCB0eXBlMSksCiAJCQkJCSAgICAgIE9QVElNSVpFX0ZPUl9TUEVFRCkp CiAJICAgIHJldHVybiBpZm47CkBAIC0zMjUyLDE2ICszMjU3LDMxIEBAIHZlY3Rvcml6YWJs ZV9jYWxsICh2ZWNfaW5mbyAqdmluZm8sCiAgICAgICByaHNfdHlwZSA9IHVuc2lnbmVkX3R5 cGVfbm9kZTsKICAgICB9CiAKLSAgaW50IG1hc2tfb3BubyA9IC0xOworICAvKiBUaGUgYXJn dW1lbnQgdGhhdCBpcyBub3Qgb2YgdGhlIHNhbWUgdHlwZSBhcyB0aGUgb3RoZXJzLiAgKi8K KyAgaW50IGRpZmZfb3BubyA9IC0xOworICBib29sIG1hc2tlZCA9IGZhbHNlOwogICBpZiAo aW50ZXJuYWxfZm5fcCAoY2ZuKSkKLSAgICBtYXNrX29wbm8gPSBpbnRlcm5hbF9mbl9tYXNr X2luZGV4IChhc19pbnRlcm5hbF9mbiAoY2ZuKSk7CisgICAgeworICAgICAgaWYgKGNmbiA9 PSBDRk5fRlRSVU5DX0lOVCkKKwkvKiBGb3IgRlRSVU5DIHRoaXMgcmVwcmVzZW50cyB0aGUg YXJndW1lbnQgdGhhdCBjYXJyaWVzIHRoZSB0eXBlIG9mIHRoZQorCSAgIGludGVybWVkaWF0 ZSBzaWduZWQgaW50ZWdlci4gICovCisJZGlmZl9vcG5vID0gMTsKKyAgICAgIGVsc2UKKwl7 CisJICAvKiBGb3IgbWFza2VkIG9wZXJhdGlvbnMgdGhpcyByZXByZXNlbnRzIHRoZSBhcmd1 bWVudCB0aGF0IGNhcnJpZXMgdGhlCisJICAgICBtYXNrLiAgKi8KKwkgIGRpZmZfb3BubyA9 IGludGVybmFsX2ZuX21hc2tfaW5kZXggKGFzX2ludGVybmFsX2ZuIChjZm4pKTsKKwkgIG1h c2tlZCA9IGRpZmZfb3BubyA+PSAgMDsKKwl9CisgICAgfQogCiAgIGZvciAoaSA9IDA7IGkg PCBuYXJnczsgaSsrKQogICAgIHsKLSAgICAgIGlmICgoaW50KSBpID09IG1hc2tfb3BubykK KyAgICAgIGlmICgoaW50KSBpID09IGRpZmZfb3BubyAmJiBtYXNrZWQpCiAJewotCSAgaWYg KCF2ZWN0X2NoZWNrX3NjYWxhcl9tYXNrICh2aW5mbywgc3RtdF9pbmZvLCBzbHBfbm9kZSwg bWFza19vcG5vLAotCQkJCSAgICAgICAmb3AsICZzbHBfb3BbaV0sICZkdFtpXSwgJnZlY3R5 cGVzW2ldKSkKKwkgIGlmICghdmVjdF9jaGVja19zY2FsYXJfbWFzayAodmluZm8sIHN0bXRf aW5mbywgc2xwX25vZGUsCisJCQkJICAgICAgIGRpZmZfb3BubywgJm9wLCAmc2xwX29wW2ld LCAmZHRbaV0sCisJCQkJICAgICAgICZ2ZWN0eXBlc1tpXSkpCiAJICAgIHJldHVybiBmYWxz ZTsKIAkgIGNvbnRpbnVlOwogCX0KQEAgLTMyNzUsMjcgKzMyOTUsMzUgQEAgdmVjdG9yaXph YmxlX2NhbGwgKHZlY19pbmZvICp2aW5mbywKIAkgIHJldHVybiBmYWxzZTsKIAl9CiAKLSAg ICAgIC8qIFdlIGNhbiBvbmx5IGhhbmRsZSBjYWxscyB3aXRoIGFyZ3VtZW50cyBvZiB0aGUg c2FtZSB0eXBlLiAgKi8KLSAgICAgIGlmIChyaHNfdHlwZQotCSAgJiYgIXR5cGVzX2NvbXBh dGlibGVfcCAocmhzX3R5cGUsIFRSRUVfVFlQRSAob3ApKSkKKyAgICAgIGlmICgoaW50KSBp ICE9IGRpZmZfb3BubykKIAl7Ci0JICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCi0JICAgIGR1 bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRpb24s Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmd1bWVudCB0eXBlcyBkaWZmZXIu XG4iKTsKLQkgIHJldHVybiBmYWxzZTsKLQl9Ci0gICAgICBpZiAoIXJoc190eXBlKQotCXJo c190eXBlID0gVFJFRV9UWVBFIChvcCk7CisJICAvKiBXZSBjYW4gb25seSBoYW5kbGUgY2Fs bHMgd2l0aCBhcmd1bWVudHMgb2YgdGhlIHNhbWUgdHlwZS4gICovCisJICBpZiAocmhzX3R5 cGUKKwkgICAgICAmJiAhdHlwZXNfY29tcGF0aWJsZV9wIChyaHNfdHlwZSwgVFJFRV9UWVBF IChvcCkpKQorCSAgICB7CisJICAgICAgaWYgKGR1bXBfZW5hYmxlZF9wICgpKQorCQlkdW1w X3ByaW50Zl9sb2MgKE1TR19NSVNTRURfT1BUSU1JWkFUSU9OLCB2ZWN0X2xvY2F0aW9uLAor CQkJCSAiYXJndW1lbnQgdHlwZXMgZGlmZmVyLlxuIik7CisJICAgICAgcmV0dXJuIGZhbHNl OworCSAgICB9CisJICBpZiAoIXJoc190eXBlKQorCSAgICByaHNfdHlwZSA9IFRSRUVfVFlQ RSAob3ApOwogCi0gICAgICBpZiAoIXZlY3R5cGVfaW4pCi0JdmVjdHlwZV9pbiA9IHZlY3R5 cGVzW2ldOwotICAgICAgZWxzZSBpZiAodmVjdHlwZXNbaV0KLQkgICAgICAgJiYgIXR5cGVz X2NvbXBhdGlibGVfcCAodmVjdHlwZXNbaV0sIHZlY3R5cGVfaW4pKQorCSAgaWYgKCF2ZWN0 eXBlX2luKQorCSAgICB2ZWN0eXBlX2luID0gdmVjdHlwZXNbaV07CisJICBlbHNlIGlmICh2 ZWN0eXBlc1tpXQorCQkgICAmJiAhdHlwZXNfY29tcGF0aWJsZV9wICh2ZWN0eXBlc1tpXSwg dmVjdHlwZV9pbikpCisJICAgIHsKKwkgICAgICBpZiAoZHVtcF9lbmFibGVkX3AgKCkpCisJ CWR1bXBfcHJpbnRmX2xvYyAoTVNHX01JU1NFRF9PUFRJTUlaQVRJT04sIHZlY3RfbG9jYXRp b24sCisJCQkJICJhcmd1bWVudCB2ZWN0b3IgdHlwZXMgZGlmZmVyLlxuIik7CisJICAgICAg cmV0dXJuIGZhbHNlOworCSAgICB9CisJfQorICAgICAgZWxzZQogCXsKLQkgIGlmIChkdW1w X2VuYWJsZWRfcCAoKSkKLQkgICAgZHVtcF9wcmludGZfbG9jIChNU0dfTUlTU0VEX09QVElN SVpBVElPTiwgdmVjdF9sb2NhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ImFyZ3VtZW50IHZlY3RvciB0eXBlcyBkaWZmZXIuXG4iKTsKLQkgIHJldHVybiBmYWxzZTsK KwkgIHZlY3R5cGVzW2ldID0gZ2V0X3ZlY3R5cGVfZm9yX3NjYWxhcl90eXBlICh2aW5mbywg VFJFRV9UWVBFIChvcCksCisJCQkJCQkgICAgIHNscF9ub2RlKTsKIAl9CiAgICAgfQogICAv KiBJZiBhbGwgYXJndW1lbnRzIGFyZSBleHRlcm5hbCBvciBjb25zdGFudCBkZWZzLCBpbmZl ciB0aGUgdmVjdG9yIHR5cGUKQEAgLTMzNzEsOCArMzM5OSw4IEBAIHZlY3Rvcml6YWJsZV9j YWxsICh2ZWNfaW5mbyAqdmluZm8sCiAJICB8fCAobW9kaWZpZXIgPT0gTkFSUk9XCiAJICAg ICAgJiYgc2ltcGxlX2ludGVnZXJfbmFycm93aW5nICh2ZWN0eXBlX291dCwgdmVjdHlwZV9p biwKIAkJCQkJICAgJmNvbnZlcnRfY29kZSkpKSkKLSAgICBpZm4gPSB2ZWN0b3JpemFibGVf aW50ZXJuYWxfZnVuY3Rpb24gKGNmbiwgY2FsbGVlLCB2ZWN0eXBlX291dCwKLQkJCQkJICB2 ZWN0eXBlX2luKTsKKyAgICBpZm4gPSB2ZWN0b3JpemFibGVfaW50ZXJuYWxfZnVuY3Rpb24g KGNmbiwgY2FsbGVlLCB2ZWN0eXBlX291dCwgdmVjdHlwZV9pbiwKKwkJCQkJICAmdmVjdHlw ZXNbMF0pOwogCiAgIC8qIElmIHRoYXQgZmFpbHMsIHRyeSBhc2tpbmcgZm9yIGEgdGFyZ2V0 LXNwZWNpZmljIGJ1aWx0LWluIGZ1bmN0aW9uLiAgKi8KICAgaWYgKGlmbiA9PSBJRk5fTEFT VCkKQEAgLTM0NDYsMTIgKzM0NzQsMTIgQEAgdmVjdG9yaXphYmxlX2NhbGwgKHZlY19pbmZv ICp2aW5mbywKIAlyZWNvcmRfc3RtdF9jb3N0IChjb3N0X3ZlYywgbmNvcGllcyAvIDIsCiAJ CQkgIHZlY19wcm9tb3RlX2RlbW90ZSwgc3RtdF9pbmZvLCAwLCB2ZWN0X2JvZHkpOwogCi0g ICAgICBpZiAobG9vcF92aW5mbyAmJiBtYXNrX29wbm8gPj0gMCkKKyAgICAgIGlmIChsb29w X3ZpbmZvICYmIG1hc2tlZCkKIAl7CiAJICB1bnNpZ25lZCBpbnQgbnZlY3RvcnMgPSAoc2xw X25vZGUKIAkJCQkgICA/IFNMUF9UUkVFX05VTUJFUl9PRl9WRUNfU1RNVFMgKHNscF9ub2Rl KQogCQkJCSAgIDogbmNvcGllcyk7Ci0JICB0cmVlIHNjYWxhcl9tYXNrID0gZ2ltcGxlX2Nh bGxfYXJnIChzdG10X2luZm8tPnN0bXQsIG1hc2tfb3Bubyk7CisJICB0cmVlIHNjYWxhcl9t YXNrID0gZ2ltcGxlX2NhbGxfYXJnIChzdG10X2luZm8tPnN0bXQsIGRpZmZfb3Bubyk7CiAJ ICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3BfdmluZm8sIG1hc2tzLCBudmVjdG9ycywK IAkJCQkgdmVjdHlwZV9vdXQsIHNjYWxhcl9tYXNrKTsKIAl9CkBAIC0zNDk5LDcgKzM1Mjcs NyBAQCB2ZWN0b3JpemFibGVfY2FsbCAodmVjX2luZm8gKnZpbmZvLAogCQkgICAgewogCQkg ICAgICAvKiBXZSBkb24ndCBkZWZpbmUgYW55IG5hcnJvd2luZyBjb25kaXRpb25hbCBmdW5j dGlvbnMKIAkJCSBhdCBwcmVzZW50LiAgKi8KLQkJICAgICAgZ2NjX2Fzc2VydCAobWFza19v cG5vIDwgMCk7CisJCSAgICAgIGdjY19hc3NlcnQgKCFtYXNrZWQpOwogCQkgICAgICB0cmVl IGhhbGZfcmVzID0gbWFrZV9zc2FfbmFtZSAodmVjdHlwZV9pbik7CiAJCSAgICAgIGdjYWxs ICpjYWxsCiAJCQk9IGdpbXBsZV9idWlsZF9jYWxsX2ludGVybmFsX3ZlYyAoaWZuLCB2YXJn cyk7CkBAIC0zNTE5LDE1ICszNTQ3LDE1IEBAIHZlY3Rvcml6YWJsZV9jYWxsICh2ZWNfaW5m byAqdmluZm8sCiAJCSAgICB9CiAJCSAgZWxzZQogCQkgICAgewotCQkgICAgICBpZiAobWFz a19vcG5vID49IDAgJiYgbWFza2VkX2xvb3BfcCkKKwkJICAgICAgaWYgKG1hc2tlZCAmJiBt YXNrZWRfbG9vcF9wKQogCQkJewogCQkJICB1bnNpZ25lZCBpbnQgdmVjX251bSA9IHZlY19v cHJuZHMwLmxlbmd0aCAoKTsKIAkJCSAgLyogQWx3YXlzIHRydWUgZm9yIFNMUC4gICovCiAJ CQkgIGdjY19hc3NlcnQgKG5jb3BpZXMgPT0gMSk7CiAJCQkgIHRyZWUgbWFzayA9IHZlY3Rf Z2V0X2xvb3BfbWFzayAoZ3NpLCBtYXNrcywgdmVjX251bSwKIAkJCQkJCQkgIHZlY3R5cGVf b3V0LCBpKTsKLQkJCSAgdmFyZ3NbbWFza19vcG5vXSA9IHByZXBhcmVfbG9hZF9zdG9yZV9t YXNrCi0JCQkgICAgKFRSRUVfVFlQRSAobWFzayksIG1hc2ssIHZhcmdzW21hc2tfb3Bub10s IGdzaSk7CisJCQkgIHZhcmdzW2RpZmZfb3Bub10gPSBwcmVwYXJlX2xvYWRfc3RvcmVfbWFz aworCQkJICAgIChUUkVFX1RZUEUgKG1hc2spLCBtYXNrLCB2YXJnc1tkaWZmX29wbm9dLCBn c2kpOwogCQkJfQogCiAJCSAgICAgIGdjYWxsICpjYWxsOwpAQCAtMzU1OSwxMyArMzU4Nywx MyBAQCB2ZWN0b3JpemFibGVfY2FsbCAodmVjX2luZm8gKnZpbmZvLAogCSAgICAgIG9yaWdf dmFyZ3NbaV0gPSB2YXJnc1tpXSA9IHZlY19kZWZzW2ldW2pdOwogCSAgICB9CiAKLQkgIGlm IChtYXNrX29wbm8gPj0gMCAmJiBtYXNrZWRfbG9vcF9wKQorCSAgaWYgKG1hc2tlZCAmJiBt YXNrZWRfbG9vcF9wKQogCSAgICB7CiAJICAgICAgdHJlZSBtYXNrID0gdmVjdF9nZXRfbG9v cF9tYXNrIChnc2ksIG1hc2tzLCBuY29waWVzLAogCQkJCQkgICAgICB2ZWN0eXBlX291dCwg aik7Ci0JICAgICAgdmFyZ3NbbWFza19vcG5vXQorCSAgICAgIHZhcmdzW2RpZmZfb3Bub10K IAkJPSBwcmVwYXJlX2xvYWRfc3RvcmVfbWFzayAoVFJFRV9UWVBFIChtYXNrKSwgbWFzaywK LQkJCQkJICAgdmFyZ3NbbWFza19vcG5vXSwgZ3NpKTsKKwkJCQkJICAgdmFyZ3NbZGlmZl9v cG5vXSwgZ3NpKTsKIAkgICAgfQogCiAJICBnaW1wbGUgKm5ld19zdG10OwpAQCAtMzU4NCw3 ICszNjEyLDcgQEAgdmVjdG9yaXphYmxlX2NhbGwgKHZlY19pbmZvICp2aW5mbywKIAkgICAg ewogCSAgICAgIC8qIFdlIGRvbid0IGRlZmluZSBhbnkgbmFycm93aW5nIGNvbmRpdGlvbmFs IGZ1bmN0aW9ucyBhdAogCQkgcHJlc2VudC4gICovCi0JICAgICAgZ2NjX2Fzc2VydCAobWFz a19vcG5vIDwgMCk7CisJICAgICAgZ2NjX2Fzc2VydCAoIW1hc2tlZCk7CiAJICAgICAgdHJl ZSBoYWxmX3JlcyA9IG1ha2Vfc3NhX25hbWUgKHZlY3R5cGVfaW4pOwogCSAgICAgIGdjYWxs ICpjYWxsID0gZ2ltcGxlX2J1aWxkX2NhbGxfaW50ZXJuYWxfdmVjIChpZm4sIHZhcmdzKTsK IAkgICAgICBnaW1wbGVfY2FsbF9zZXRfbGhzIChjYWxsLCBoYWxmX3Jlcyk7CkBAIC0zNjI4 LDcgKzM2NTYsNyBAQCB2ZWN0b3JpemFibGVfY2FsbCAodmVjX2luZm8gKnZpbmZvLAogICAg IHsKICAgICAgIGF1dG9fdmVjPHZlYzx0cmVlPiA+IHZlY19kZWZzIChuYXJncyk7CiAgICAg ICAvKiBXZSBkb24ndCBkZWZpbmUgYW55IG5hcnJvd2luZyBjb25kaXRpb25hbCBmdW5jdGlv bnMgYXQgcHJlc2VudC4gICovCi0gICAgICBnY2NfYXNzZXJ0IChtYXNrX29wbm8gPCAwKTsK KyAgICAgIGdjY19hc3NlcnQgKCFtYXNrZWQpOwogICAgICAgZm9yIChqID0gMDsgaiA8IG5j b3BpZXM7ICsraikKIAl7CiAJICAvKiBCdWlsZCBhcmd1bWVudCBsaXN0IGZvciB0aGUgdmVj dG9yaXplZCBjYWxsLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5o CmluZGV4IGY2MmMwMGJjODcwNzAyOWRiNTJlMmYzZmU1Mjk5NDg3NTUyMzVkM2QuLjMxY2U0 NWE4NGNjMjY3ZWEyMDIyYzhjYTYzMjMzNjhmYmUxNWViOGIgMTAwNjQ0Ci0tLSBhL2djYy90 cmVlLmgKKysrIGIvZ2NjL3RyZWUuaApAQCAtNjU0Nyw0ICs2NTQ3LDEyIEBAIGV4dGVybiB1 bnNpZ25lZCBmbmRlY2xfZGVhbGxvY19hcmdubyAodHJlZSk7CiAgICBvYmplY3Qgb3IgcG9p bnRlci4gIE90aGVyd2lzZSByZXR1cm4gbnVsbC4gICovCiBleHRlcm4gdHJlZSBnZXRfYXR0 cl9ub25zdHJpbmdfZGVjbCAodHJlZSwgdHJlZSAqID0gTlVMTCk7CiAKKy8qIFJldHVybiB0 aGUgdHlwZSwgb3IgZm9yIGEgY29tcGxleCBvciB2ZWN0b3IgdHlwZSB0aGUgdHlwZSBvZiBp dHMKKyAgIGVsZW1lbnRzLiAgKi8KK2V4dGVybiB0cmVlIGVsZW1lbnRfdHlwZSAoY29uc3Rf dHJlZSk7CisKKy8qIFJldHVybiB0aGUgcHJlY2lzaW9uIG9mIHRoZSB0eXBlLCBvciBmb3Ig YSBjb21wbGV4IG9yIHZlY3RvciB0eXBlIHRoZQorICAgcHJlY2lzaW9uIG9mIHRoZSB0eXBl IG9mIGl0cyBlbGVtZW50cy4gICovCitleHRlcm4gdW5zaWduZWQgaW50IGVsZW1lbnRfcHJl Y2lzaW9uIChjb25zdF90cmVlKTsKKwogI2VuZGlmICAvKiBHQ0NfVFJFRV9IICAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUuYyBiL2djYy90cmVlLmMKaW5kZXggODQ1MjI4YTA1NWIyY2Zh YzBjOWNhOGMwY2RhMWI5ZGY0YjAwOTVjNi4uZjFlOWExZWI0ODc2OWNiMTFhYTY5NzMwZTI0 ODBlZDU1MjJmNzhjMSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuYworKysgYi9nY2MvdHJlZS5j CkBAIC02NjQ1LDExICs2NjQ1LDExIEBAIHZhbGlkX2NvbnN0YW50X3NpemVfcCAoY29uc3Rf dHJlZSBzaXplLCBjc3Rfc2l6ZV9lcnJvciAqcGVyciAvKiA9IE5VTEwgKi8pCiAgIHJldHVy biB0cnVlOwogfQogCi0vKiBSZXR1cm4gdGhlIHByZWNpc2lvbiBvZiB0aGUgdHlwZSwgb3Ig Zm9yIGEgY29tcGxleCBvciB2ZWN0b3IgdHlwZSB0aGUKLSAgIHByZWNpc2lvbiBvZiB0aGUg dHlwZSBvZiBpdHMgZWxlbWVudHMuICAqLworLyogUmV0dXJuIHRoZSB0eXBlLCBvciBmb3Ig YSBjb21wbGV4IG9yIHZlY3RvciB0eXBlIHRoZSB0eXBlIG9mIGl0cworICAgZWxlbWVudHMu ICAqLwogCi11bnNpZ25lZCBpbnQKLWVsZW1lbnRfcHJlY2lzaW9uIChjb25zdF90cmVlIHR5 cGUpCit0cmVlCitlbGVtZW50X3R5cGUgKGNvbnN0X3RyZWUgdHlwZSkKIHsKICAgaWYgKCFU WVBFX1AgKHR5cGUpKQogICAgIHR5cGUgPSBUUkVFX1RZUEUgKHR5cGUpOwpAQCAtNjY1Nyw3 ICs2NjU3LDE2IEBAIGVsZW1lbnRfcHJlY2lzaW9uIChjb25zdF90cmVlIHR5cGUpCiAgIGlm IChjb2RlID09IENPTVBMRVhfVFlQRSB8fCBjb2RlID09IFZFQ1RPUl9UWVBFKQogICAgIHR5 cGUgPSBUUkVFX1RZUEUgKHR5cGUpOwogCi0gIHJldHVybiBUWVBFX1BSRUNJU0lPTiAodHlw ZSk7CisgIHJldHVybiAodHJlZSkgdHlwZTsKK30KKworLyogUmV0dXJuIHRoZSBwcmVjaXNp b24gb2YgdGhlIHR5cGUsIG9yIGZvciBhIGNvbXBsZXggb3IgdmVjdG9yIHR5cGUgdGhlCisg ICBwcmVjaXNpb24gb2YgdGhlIHR5cGUgb2YgaXRzIGVsZW1lbnRzLiAgKi8KKwordW5zaWdu ZWQgaW50CitlbGVtZW50X3ByZWNpc2lvbiAoY29uc3RfdHJlZSB0eXBlKQoreworICByZXR1 cm4gVFlQRV9QUkVDSVNJT04gKGVsZW1lbnRfdHlwZSAodHlwZSkpOwogfQogCiAvKiBSZXR1 cm4gdHJ1ZSBpZiBDT0RFIHJlcHJlc2VudHMgYW4gYXNzb2NpYXRpdmUgdHJlZSBjb2RlLiAg T3RoZXJ3aXNlCg== --------------f3GdpK4W0WDraJApnzBRZSfU--