From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id 8D5B93858C52 for ; Thu, 22 Sep 2022 03:17:26 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 8D5B93858C52 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.93,335,1654588800"; d="scan'208,223";a="83293778" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa3.mentor.iphmx.com with ESMTP; 21 Sep 2022 19:17:25 -0800 IronPort-SDR: h5jFrpV5g281YkOkMmpNu36ynGtF4eTgAPAioyfTPWDxm8P2aRSJKPysGfPA4NR4W59Gnx9Lsz qTpB2U3t+523mCzE3eX7pXPP2gtmpaXcXD8M6zXjsk9R5XYInxWoE8OJwg+6QpD93+6KZz4VBl mENLXcH62Vji6fbkGG4fb1dku+jx96y51C/jPB5TYALaJK2x+nArGYW0y4dksG2hi4KGGv8j+S Rk1GZ/BRW+knNAkthLcRxUns32SXPMkJ26uotJMNA9vyrtfDUcJGZPMqPH6BIqFobWlV4pcoV9 +LY= Content-Type: multipart/mixed; boundary="------------roBbYshk2DawUtTGqRTtMUT4" Message-ID: <001679b1-814a-c1db-5611-c663f6931d11@codesourcery.com> Date: Wed, 21 Sep 2022 21:17:18 -0600 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.11.0 Subject: [PATCH v2] Re: OpenMP: Generate SIMD clones for functions with "declare target" Content-Language: en-US To: Jakub Jelinek , Thomas Schwinge CC: "gcc-patches@gcc.gnu.org" References: <0b64e323-63f9-e4b7-eb7f-83f3b5e3125b@codesourcery.com> From: Sandra Loosemore In-Reply-To: X-ClientProxiedBy: SVR-ORW-MBX-07.mgc.mentorg.com (147.34.90.207) To svr-orw-mbx-13.mgc.mentorg.com (147.34.90.213) X-Spam-Status: No, score=-10.0 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------roBbYshk2DawUtTGqRTtMUT4 Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit On 9/14/22 12:12, Jakub Jelinek wrote: > If it is pure optimization thing and purely keyed on the definition, > all the simd clones should be local to the TU, never exported from it. OK, here is a revised patch that addresses that. x86_64 target also generates a different set of clones for functions with internal linkage vs external so I hacked that to treat these implicit clones in the same way as other internal clones. There is an existing problem with internal "declare simd" clones in that nothing ever DCEs clones that end up not being useful, or does a scan of the code in the compilation unit before clone generation to avoid generating useless clones in the first place. I haven't tried to solve that problem, but I did attempt to mitigate it for these implicit "declare target" clones by tagging the option OPT_LEVELS_2_PLUS_SPEED_ONLY (instead of enabling it by default all the time) so the clones are not generated by default at -Os and -Og. I added a couple new test cases to check this. On 9/14/22 15:45, Thomas Schwinge wrote: > However, OpenACC and OpenMP support may be active at the same time... > >> + if (attr == NULL_TREE >> + && flag_openmp_target_simd_clone && !flag_openacc) > > ..., so '!flag_openacc' is not the right check here. Instead you'd do > '!oacc_get_fn_attrib (DECL_ATTRIBUTES (node->decl))' (untested) or > similar. This is fixed now too. OK to check in? -Sandra --------------roBbYshk2DawUtTGqRTtMUT4 Content-Type: text/x-patch; charset="UTF-8"; name="declare-target-simd-clones-v2.patch" Content-Disposition: attachment; filename="declare-target-simd-clones-v2.patch" Content-Transfer-Encoding: base64 RnJvbSBkZmRiOWEyMTYyOTc4Yjk2NDg2M2YzNTFjODE0MjExZGNhOGU5YTNmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBTYW5kcmEgTG9vc2Vtb3JlIDxzYW5kcmFAY29kZXNv dXJjZXJ5LmNvbT4KRGF0ZTogVGh1LCAyMiBTZXAgMjAyMiAwMjoxNjo0MiArMDAwMApTdWJq ZWN0OiBbUEFUQ0hdIE9wZW5NUDogR2VuZXJhdGUgU0lNRCBjbG9uZXMgZm9yIGZ1bmN0aW9u cyB3aXRoICJkZWNsYXJlCiB0YXJnZXQiCgpUaGlzIHBhdGNoIGNhdXNlcyB0aGUgSVBBIHNp bWRjbG9uZSBwYXNzIHRvIGdlbmVyYXRlIGNsb25lcyBmb3IKZnVuY3Rpb25zIHdpdGggdGhl ICJvbXAgZGVjbGFyZSB0YXJnZXQiIGF0dHJpYnV0ZSBhcyBpZiB0aGV5IGhhZAoib21wIGRl Y2xhcmUgc2ltZCIsIHByb3ZpZGVkIHRoZSBmdW5jdGlvbiBhcHBlYXJzIHRvIGJlIHN1aXRh YmxlIGZvcgpTSU1EIGV4ZWN1dGlvbi4gIFRoZSBmaWx0ZXIgaXMgY29uc2VydmF0aXZlLCBy ZWplY3RpbmcgZnVuY3Rpb25zCnRoYXQgd3JpdGUgbWVtb3J5IG9yIHRoYXQgY2FsbCBvdGhl ciBmdW5jdGlvbnMgbm90IGtub3duIHRvIGJlIHNhZmUuCkEgbmV3IG9wdGlvbiAtZm9wZW5t cC10YXJnZXQtc2ltZC1jbG9uZSBpcyBhZGRlZCB0byBjb250cm9sIHRoaXMKdHJhbnNmb3Jt YXRpb247IGl0J3MgZW5hYmxlZCBhdCAtTzIgYW5kIGhpZ2hlci4KCmdjYy9DaGFuZ2VMb2c6 CgoJKiBjb21tb24ub3B0IChmb3Blbm1wLXRhcmdldC1zaW1kLWNsb25lKTogTmV3IG9wdGlv bi4KCSogb3B0cy5jYyAoZGVmYXVsdF9vcHRpb25zX3RhYmxlKTogQWRkIC1mb3Blbm1wLXRh cmdldC1zaW1kLWNsb25lLgoJKiBkb2MvaW52b2tlLnRleGkgKC1mb3Blbm1wLXRhcmdldC1z aW1kLWNsb25lKTogRG9jdW1lbnQuCgkqIG9tcC1zaW1kLWNsb25lLmNjIChhdXRvX3NpbWRf Y2hlY2tfc3RtdCk6IE5ldyBmdW5jdGlvbi4KCShtYXJrX2F1dG9fc2ltZF9jbG9uZSk6IE5l dyBmdW5jdGlvbi4KCShzaW1kX2Nsb25lX2NyZWF0ZSk6IEFkZCBmb3JjZV9sb2NhbCBhcmd1 bWVudCwgbWFrZSB0aGUgc3ltYm9sCgloYXZlIGludGVybmFsIGxpbmthZ2UgaWYgaXQgaXMg dHJ1ZS4KCShleHBhbmRfc2ltZF9jbG9uZXMpOiBBbHNvIGNoZWNrIGZvciBjbG9uZWFibGUg ZnVuY3Rpb25zIHdpdGgKCSJvbXAgZGVjbGFyZSB0YXJnZXQiLiAgUGFzcyBleHBsaWNpdF9w IGFyZ3VtZW50IHRvCglzaW1kX2Nsb25lLmNvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiB0 YXJnZXQgaG9vay4KCSogdGFyZ2V0LmRlZiAoVEFSR0VUX1NJTURfQ0xPTkVfQ09NUFVURV9W RUNTSVpFX0FORF9TSU1ETEVOKToKCUFkZCBib29sIGV4cGxpY2l0X3AgYXJndW1lbnQuCgkq IGRvYy90bS50ZXhpOiBSZWdlbmVyYXRlZC4KCSogY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5j YwoJKGFhcmNoNjRfc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4pOiBV cGRhdGUuCgkqIGNvbmZpZy9nY24vZ2NuLmNjCgkoZ2NuX3NpbWRfY2xvbmVfY29tcHV0ZV92 ZWNzaXplX2FuZF9zaW1kbGVuKTogVXBkYXRlLgoJKiBjb25maWcvaTM4Ni9pMzg2LmNjCgko aXg4Nl9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbik6IFVwZGF0ZS4K CmdjYy90ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQt Y2xvbmUtMS5jOiBOZXcuCgkqIGdjYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuYzog TmV3LgoJKiBnY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS0zLmM6IE5ldy4KCSogZ2Nj LmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNC5jOiBOZXcuCgkqIGdjYy5kZy9nb21wL3Rh cmdldC1zaW1kLWNsb25lLTUuYzogTmV3LgoJKiBnY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1j bG9uZS02LmM6IE5ldy4KLS0tCiBnY2MvY29tbW9uLm9wdCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDQgKwogZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MgICAg ICAgICAgICAgICAgIHwgIDI0ICstCiBnY2MvY29uZmlnL2djbi9nY24uY2MgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMTAgKy0KIGdjYy9jb25maWcvaTM4Ni9pMzg2LmNjICAgICAg ICAgICAgICAgICAgICAgICB8ICAyNyArLQogZ2NjL2RvYy9pbnZva2UudGV4aSAgICAgICAg ICAgICAgICAgICAgICAgICAgIHwgIDEyICstCiBnY2MvZG9jL3RtLnRleGkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGdjYy9vbXAtc2ltZC1jbG9uZS5jYyAg ICAgICAgICAgICAgICAgICAgICAgICB8IDIzNyArKysrKysrKysrKysrKysrLS0KIGdjYy9v cHRzLmNjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMSArCiBnY2Mv dGFyZ2V0LmRlZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIC4u Li9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS0xLmMgICAgICAgICB8ICAxOCArKwog Li4uL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuYyAgICAgICAgIHwgIDE4ICsr CiAuLi4vZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMy5jICAgICAgICAgfCAgMTcg KysKIC4uLi9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS00LmMgICAgICAgICB8ICAx NiArKwogLi4uL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTUuYyAgICAgICAgIHwg IDEzICsKIC4uLi9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS02LmMgICAgICAgICB8 ICAxMyArCiAxNSBmaWxlcyBjaGFuZ2VkLCAzNjIgaW5zZXJ0aW9ucygrKSwgNTIgZGVsZXRp b25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90 YXJnZXQtc2ltZC1jbG9uZS0xLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRl L2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IGdjYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMy5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1j bG9uZS00LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy5kZy9nb21w L3RhcmdldC1zaW1kLWNsb25lLTUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNi5jCgpkaWZmIC0tZ2l0IGEvZ2Nj L2NvbW1vbi5vcHQgYi9nY2MvY29tbW9uLm9wdAppbmRleCBmYmE5MGZmNmRjYi4uYzczNWM2 MmE4ZDQgMTAwNjQ0Ci0tLSBhL2djYy9jb21tb24ub3B0CisrKyBiL2djYy9jb21tb24ub3B0 CkBAIC0yMjE3LDYgKzIyMTcsMTAgQEAgZm9taXQtZnJhbWUtcG9pbnRlcgogQ29tbW9uIFZh cihmbGFnX29taXRfZnJhbWVfcG9pbnRlcikgT3B0aW1pemF0aW9uCiBXaGVuIHBvc3NpYmxl IGRvIG5vdCBnZW5lcmF0ZSBzdGFjayBmcmFtZXMuCiAKK2ZvcGVubXAtdGFyZ2V0LXNpbWQt Y2xvbmUKK0NvbW1vbiBWYXIoZmxhZ19vcGVubXBfdGFyZ2V0X3NpbWRfY2xvbmUpIE9wdGlt aXphdGlvbgorR2VuZXJhdGUgU0lNRCBjbG9uZXMgZm9yIGZ1bmN0aW9ucyB3aXRoIHRoZSBP cGVuTVAgZGVjbGFyZSB0YXJnZXQgZGlyZWN0aXZlLgorCiBmb3B0LWluZm8KIENvbW1vbiBW YXIoZmxhZ19vcHRfaW5mbykgT3B0aW1pemF0aW9uCiBFbmFibGUgYWxsIG9wdGltaXphdGlv biBpbmZvIGR1bXBzIG9uIHN0ZGVyci4KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2 NC9hYXJjaDY0LmNjIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuY2MKaW5kZXggZjE5 OWU3N2NkNDIuLmM2ZDI4MmM1NWVmIDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FhcmNoNjQv YWFyY2g2NC5jYworKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC5jYwpAQCAtMjY2 MTIsNyArMjY2MTIsOCBAQCBjdXJyZW50bHlfc3VwcG9ydGVkX3NpbWRfdHlwZSAodHJlZSB0 LCB0cmVlIGIpCiBzdGF0aWMgaW50CiBhYXJjaDY0X3NpbWRfY2xvbmVfY29tcHV0ZV92ZWNz aXplX2FuZF9zaW1kbGVuIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAJCQkJCXN0cnVj dCBjZ3JhcGhfc2ltZF9jbG9uZSAqY2xvbmVpLAotCQkJCQl0cmVlIGJhc2VfdHlwZSwgaW50 IG51bSkKKwkJCQkJdHJlZSBiYXNlX3R5cGUsIGludCBudW0sCisJCQkJCWJvb2wgZXhwbGlj aXRfcCkKIHsKICAgdHJlZSB0LCByZXRfdHlwZTsKICAgdW5zaWduZWQgaW50IGVsdF9iaXRz LCBjb3VudDsKQEAgLTI2NjMwLDggKzI2NjMxLDkgQEAgYWFyY2g2NF9zaW1kX2Nsb25lX2Nv bXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAog CSAgfHwgY29uc3Rfc2ltZGxlbiA+IDEwMjQKIAkgIHx8IChjb25zdF9zaW1kbGVuICYgKGNv bnN0X3NpbWRsZW4gLSAxKSkgIT0gMCkpCiAgICAgewotICAgICAgd2FybmluZ19hdCAoREVD TF9TT1VSQ0VfTE9DQVRJT04gKG5vZGUtPmRlY2wpLCAwLAotCQkgICJ1bnN1cHBvcnRlZCBz aW1kbGVuICV3ZCIsIGNvbnN0X3NpbWRsZW4pOworICAgICAgaWYgKGV4cGxpY2l0X3ApCisJ d2FybmluZ19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04gKG5vZGUtPmRlY2wpLCAwLAorCQkg ICAgInVuc3VwcG9ydGVkIHNpbWRsZW4gJXdkIiwgY29uc3Rfc2ltZGxlbik7CiAgICAgICBy ZXR1cm4gMDsKICAgICB9CiAKQEAgLTI2NjM5LDcgKzI2NjQxLDkgQEAgYWFyY2g2NF9zaW1k X2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2Rl ICpub2RlLAogICBpZiAoVFJFRV9DT0RFIChyZXRfdHlwZSkgIT0gVk9JRF9UWVBFCiAgICAg ICAmJiAhY3VycmVudGx5X3N1cHBvcnRlZF9zaW1kX3R5cGUgKHJldF90eXBlLCBiYXNlX3R5 cGUpKQogICAgIHsKLSAgICAgIGlmIChUWVBFX1NJWkUgKHJldF90eXBlKSAhPSBUWVBFX1NJ WkUgKGJhc2VfdHlwZSkpCisgICAgICBpZiAoIWV4cGxpY2l0X3ApCisJOworICAgICAgZWxz ZSBpZiAoVFlQRV9TSVpFIChyZXRfdHlwZSkgIT0gVFlQRV9TSVpFIChiYXNlX3R5cGUpKQog CXdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKIAkJ ICAgICJHQ0MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgbWl4ZWQgc2l6ZSB0eXBlcyAi CiAJCSAgICAiZm9yICU8c2ltZCU+IGZ1bmN0aW9ucyIpOwpAQCAtMjY2NjYsNyArMjY2NzAs OSBAQCBhYXJjaDY0X3NpbWRfY2xvbmVfY29tcHV0ZV92ZWNzaXplX2FuZF9zaW1kbGVuIChz dHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAgICAgICBpZiAoY2xvbmVpLT5hcmdzW2ldLmFy Z190eXBlICE9IFNJTURfQ0xPTkVfQVJHX1RZUEVfVU5JRk9STQogCSAgJiYgIWN1cnJlbnRs eV9zdXBwb3J0ZWRfc2ltZF90eXBlIChhcmdfdHlwZSwgYmFzZV90eXBlKSkKIAl7Ci0JICBp ZiAoVFlQRV9TSVpFIChhcmdfdHlwZSkgIT0gVFlQRV9TSVpFIChiYXNlX3R5cGUpKQorCSAg aWYgKCFleHBsaWNpdF9wKQorCSAgICA7CisJICBlbHNlIGlmIChUWVBFX1NJWkUgKGFyZ190 eXBlKSAhPSBUWVBFX1NJWkUgKGJhc2VfdHlwZSkpCiAJICAgIHdhcm5pbmdfYXQgKERFQ0xf U09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKIAkJCSJHQ0MgZG9lcyBub3QgY3Vy cmVudGx5IHN1cHBvcnQgbWl4ZWQgc2l6ZSB0eXBlcyAiCiAJCQkiZm9yICU8c2ltZCU+IGZ1 bmN0aW9ucyIpOwpAQCAtMjY2OTYsOSArMjY3MDIsMTEgQEAgYWFyY2g2NF9zaW1kX2Nsb25l X2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2Rl LAogICAgICAgaWYgKGNsb25laS0+c2ltZGxlbi5pc19jb25zdGFudCAoJmNvbnN0X3NpbWRs ZW4pCiAJICAmJiBtYXliZV9uZSAodmVjX2JpdHMsIDY0VSkgJiYgbWF5YmVfbmUgKHZlY19i aXRzLCAxMjhVKSkKIAl7Ci0JICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAo bm9kZS0+ZGVjbCksIDAsCi0JCSAgICAgICJHQ0MgZG9lcyBub3QgY3VycmVudGx5IHN1cHBv cnQgc2ltZGxlbiAld2QgZm9yIHR5cGUgJXFUIiwKLQkJICAgICAgY29uc3Rfc2ltZGxlbiwg YmFzZV90eXBlKTsKKwkgIGlmIChleHBsaWNpdF9wKQorCSAgICB3YXJuaW5nX2F0IChERUNM X1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAsCisJCQkiR0NDIGRvZXMgbm90IGN1 cnJlbnRseSBzdXBwb3J0IHNpbWRsZW4gJXdkIGZvciAiCisJCQkidHlwZSAlcVQiLAorCQkJ Y29uc3Rfc2ltZGxlbiwgYmFzZV90eXBlKTsKIAkgIHJldHVybiAwOwogCX0KICAgICB9CmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2djbi9nY24uY2MgYi9nY2MvY29uZmlnL2djbi9nY24u Y2MKaW5kZXggY2ViNjkwMDA4MDcuLjVjODBiOGRmODUyIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2djbi9nY24uY2MKKysrIGIvZ2NjL2NvbmZpZy9nY24vZ2NuLmNjCkBAIC00NTYyLDcg KzQ1NjIsOCBAQCBzdGF0aWMgaW50CiBnY25fc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVf YW5kX3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqQVJHX1VOVVNFRCAobm9kZSksCiAJ CQkJCSAgICBzdHJ1Y3QgY2dyYXBoX3NpbWRfY2xvbmUgKmNsb25laSwKIAkJCQkJICAgIHRy ZWUgYmFzZV90eXBlLAotCQkJCQkgICAgaW50IEFSR19VTlVTRUQgKG51bSkpCisJCQkJCSAg ICBpbnQgQVJHX1VOVVNFRCAobnVtKSwKKwkJCQkJICAgIGJvb2wgZXhwbGljaXRfcCkKIHsK ICAgdW5zaWduZWQgaW50IGVsdF9iaXRzID0gR0VUX01PREVfQklUU0laRSAoU0NBTEFSX1RZ UEVfTU9ERSAoYmFzZV90eXBlKSk7CiAKQEAgLTQ1NzIsOSArNDU3MywxMCBAQCBnY25fc2lt ZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9k ZSAqQVJHX1VOVVNFRCAobm9kZQogICAgIHsKICAgICAgIC8qIE5vdGUgdGhhdCB4ODYgaGFz IGEgc2ltaWxhciBtZXNzYWdlIHRoYXQgaXMgbGlrZWx5IHRvIHRyaWdnZXIgb24KIAkgc2l6 ZXMgdGhhdCBhcmUgT0sgZm9yIGdjbjsgdGhlIHVzZXIgY2FuJ3Qgd2luLiAgKi8KLSAgICAg IHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKLQkJ ICAidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2QgKGFtZGdjbikiLAotCQkgIGNsb25laS0+c2lt ZGxlbi50b19jb25zdGFudCAoKSk7CisgICAgICBpZiAoZXhwbGljaXRfcCkKKwl3YXJuaW5n X2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAsCisJCSAgICAidW5z dXBwb3J0ZWQgc2ltZGxlbiAld2QgKGFtZGdjbikiLAorCQkgICAgY2xvbmVpLT5zaW1kbGVu LnRvX2NvbnN0YW50ICgpKTsKICAgICAgIHJldHVybiAwOwogICAgIH0KIApkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYuY2MgYi9nY2MvY29uZmlnL2kzODYvaTM4Ni5jYwpp bmRleCBjNGQwZTM2ZTljMC4uOTlhZTM4OGFkNTYgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcv aTM4Ni9pMzg2LmNjCisrKyBiL2djYy9jb25maWcvaTM4Ni9pMzg2LmNjCkBAIC0yMzY0Nyw3 ICsyMzY0Nyw4IEBAIGl4ODZfbWVtbW9kZWxfY2hlY2sgKHVuc2lnbmVkIEhPU1RfV0lERV9J TlQgdmFsKQogc3RhdGljIGludAogaXg4Nl9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9h bmRfc2ltZGxlbiAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogCQkJCQkgICAgIHN0cnVj dCBjZ3JhcGhfc2ltZF9jbG9uZSAqY2xvbmVpLAotCQkJCQkgICAgIHRyZWUgYmFzZV90eXBl LCBpbnQgbnVtKQorCQkJCQkgICAgIHRyZWUgYmFzZV90eXBlLCBpbnQgbnVtLAorCQkJCQkg ICAgIGJvb2wgZXhwbGljaXRfcCkKIHsKICAgaW50IHJldCA9IDE7CiAKQEAgLTIzNjU2LDgg KzIzNjU3LDkgQEAgaXg4Nl9zaW1kX2Nsb25lX2NvbXB1dGVfdmVjc2l6ZV9hbmRfc2ltZGxl biAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlLAogCSAgfHwgY2xvbmVpLT5zaW1kbGVuID4g MTAyNAogCSAgfHwgKGNsb25laS0+c2ltZGxlbiAmIChjbG9uZWktPnNpbWRsZW4gLSAxKSkg IT0gMCkpCiAgICAgewotICAgICAgd2FybmluZ19hdCAoREVDTF9TT1VSQ0VfTE9DQVRJT04g KG5vZGUtPmRlY2wpLCAwLAotCQkgICJ1bnN1cHBvcnRlZCBzaW1kbGVuICV3ZCIsIGNsb25l aS0+c2ltZGxlbi50b19jb25zdGFudCAoKSk7CisgICAgICBpZiAoZXhwbGljaXRfcCkKKwl3 YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAsCisJCSAg ICAidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2QiLCBjbG9uZWktPnNpbWRsZW4udG9fY29uc3Rh bnQgKCkpOwogICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0yMzY3Nyw4ICsyMzY3OSw5 IEBAIGl4ODZfc2ltZF9jbG9uZV9jb21wdXRlX3ZlY3NpemVfYW5kX3NpbWRsZW4gKHN0cnVj dCBjZ3JhcGhfbm9kZSAqbm9kZSwKIAkgIGJyZWFrOwogCS8qIEZBTExUSFJVICovCiAgICAg ICBkZWZhdWx0OgotCXdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5k ZWNsKSwgMCwKLQkJICAgICJ1bnN1cHBvcnRlZCByZXR1cm4gdHlwZSAlcVQgZm9yIHNpbWQi LCByZXRfdHlwZSk7CisJaWYgKGV4cGxpY2l0X3ApCisJICB3YXJuaW5nX2F0IChERUNMX1NP VVJDRV9MT0NBVElPTiAobm9kZS0+ZGVjbCksIDAsCisJCSAgICAgICJ1bnN1cHBvcnRlZCBy ZXR1cm4gdHlwZSAlcVQgZm9yIHNpbWQiLCByZXRfdHlwZSk7CiAJcmV0dXJuIDA7CiAgICAg ICB9CiAKQEAgLTIzNzA3LDEzICsyMzcxMCwxNCBAQCBpeDg2X3NpbWRfY2xvbmVfY29tcHV0 ZV92ZWNzaXplX2FuZF9zaW1kbGVuIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUsCiAJZGVm YXVsdDoKIAkgIGlmIChjbG9uZWktPmFyZ3NbaV0uYXJnX3R5cGUgPT0gU0lNRF9DTE9ORV9B UkdfVFlQRV9VTklGT1JNKQogCSAgICBicmVhazsKLQkgIHdhcm5pbmdfYXQgKERFQ0xfU09V UkNFX0xPQ0FUSU9OIChub2RlLT5kZWNsKSwgMCwKLQkJICAgICAgInVuc3VwcG9ydGVkIGFy Z3VtZW50IHR5cGUgJXFUIGZvciBzaW1kIiwgYXJnX3R5cGUpOworCSAgaWYgKGV4cGxpY2l0 X3ApCisJICAgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChub2RlLT5kZWNs KSwgMCwKKwkJCSJ1bnN1cHBvcnRlZCBhcmd1bWVudCB0eXBlICVxVCBmb3Igc2ltZCIsIGFy Z190eXBlKTsKIAkgIHJldHVybiAwOwogCX0KICAgICB9CiAKLSAgaWYgKCFUUkVFX1BVQkxJ QyAobm9kZS0+ZGVjbCkpCisgIGlmICghVFJFRV9QVUJMSUMgKG5vZGUtPmRlY2wpIHx8ICFl eHBsaWNpdF9wKQogICAgIHsKICAgICAgIC8qIElmIHRoZSBmdW5jdGlvbiBpc24ndCBleHBv cnRlZCwgd2UgY2FuIHBpY2sgdXAganVzdCBvbmUgSVNBCiAJIGZvciB0aGUgY2xvbmVzLiAg Ki8KQEAgLTIzNzg0LDkgKzIzNzg4LDEwIEBAIGl4ODZfc2ltZF9jbG9uZV9jb21wdXRlX3Zl Y3NpemVfYW5kX3NpbWRsZW4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwKIAljbnQgLz0g Y2xvbmVpLT52ZWNzaXplX2Zsb2F0OwogICAgICAgaWYgKGNudCA+IChUQVJHRVRfNjRCSVQg PyAxNiA6IDgpKQogCXsKLQkgIHdhcm5pbmdfYXQgKERFQ0xfU09VUkNFX0xPQ0FUSU9OIChu b2RlLT5kZWNsKSwgMCwKLQkJICAgICAgInVuc3VwcG9ydGVkIHNpbWRsZW4gJXdkIiwKLQkJ ICAgICAgY2xvbmVpLT5zaW1kbGVuLnRvX2NvbnN0YW50ICgpKTsKKwkgIGlmIChleHBsaWNp dF9wKQorCSAgICB3YXJuaW5nX2F0IChERUNMX1NPVVJDRV9MT0NBVElPTiAobm9kZS0+ZGVj bCksIDAsCisJCQkidW5zdXBwb3J0ZWQgc2ltZGxlbiAld2QiLAorCQkJY2xvbmVpLT5zaW1k bGVuLnRvX2NvbnN0YW50ICgpKTsKIAkgIHJldHVybiAwOwogCX0KICAgICAgIH0KZGlmZiAt LWdpdCBhL2djYy9kb2MvaW52b2tlLnRleGkgYi9nY2MvZG9jL2ludm9rZS50ZXhpCmluZGV4 IDhkZWY2YmFhOTA0Li5lMDU3MzlhMzM0YyAxMDA2NDQKLS0tIGEvZ2NjL2RvYy9pbnZva2Uu dGV4aQorKysgYi9nY2MvZG9jL2ludm9rZS50ZXhpCkBAIC0yMDQsNyArMjA0LDcgQEAgaW4g dGhlIGZvbGxvd2luZyBzZWN0aW9ucy4KIC1mbGF4LXZlY3Rvci1jb252ZXJzaW9ucyAgLWZt cy1leHRlbnNpb25zIEBnb2wKIC1mb2ZmbG9hZD1AdmFye2FyZ30gIC1mb2ZmbG9hZC1vcHRp b25zPUB2YXJ7YXJnfSBAZ29sCiAtZm9wZW5hY2MgIC1mb3BlbmFjYy1kaW09QHZhcntnZW9t fSBAZ29sCi0tZm9wZW5tcCAgLWZvcGVubXAtc2ltZCBAZ29sCistZm9wZW5tcCAgLWZvcGVu bXAtc2ltZCAgLWZvcGVubXAtdGFyZ2V0LXNpbWQtY2xvbmUgQGdvbAogLWZwZXJtaXR0ZWQt Zmx0LWV2YWwtbWV0aG9kcz1AdmFye3N0YW5kYXJkfSBAZ29sCiAtZnBsYW45LWV4dGVuc2lv bnMgIC1mc2lnbmVkLWJpdGZpZWxkcyAgLWZ1bnNpZ25lZC1iaXRmaWVsZHMgQGdvbAogLWZz aWduZWQtY2hhciAgLWZ1bnNpZ25lZC1jaGFyICAtZnNzby1zdHJ1Y3Q9QHZhcntlbmRpYW5u ZXNzfX0KQEAgLTI3NDksNiArMjc0OSwxNiBAQCBFbmFibGUgaGFuZGxpbmcgb2YgT3Blbk1Q J3MgU0lNRCBkaXJlY3RpdmVzIHdpdGggQGNvZGV7I3ByYWdtYSBvbXB9CiBpbiBDL0MrKyBh bmQgQGNvZGV7ISRvbXB9IGluIEZvcnRyYW4uIE90aGVyIE9wZW5NUCBkaXJlY3RpdmVzCiBh cmUgaWdub3JlZC4KIAorQGl0ZW0gLWZvcGVubXAtdGFyZ2V0LXNpbWQtY2xvbmUKK0BvcGlu ZGV4IGZvcGVubXAtdGFyZ2V0LXNpbWQtY2xvbmUKK0BjaW5kZXggT3Blbk1QIHRhcmdldCBT SU1EIGNsb25lCitJbiBhZGRpdGlvbiB0byBnZW5lcmF0aW5nIFNJTUQgY2xvbmVzIGZvciBm dW5jdGlvbnMgbWFya2VkIHdpdGggdGhlCitAY29kZXtkZWNsYXJlIHNpbWR9IGRpcmVjdGl2 ZSwgR0NDIGFsc28gZ2VuZXJhdGVzIGNsb25lcworZm9yIGZ1bmN0aW9ucyBtYXJrZWQgd2l0 aCB0aGUgT3Blbk1QIEBjb2Rle2RlY2xhcmUgdGFyZ2V0fSBkaXJlY3RpdmUKK3RoYXQgYXJl IHN1aXRhYmxlIGZvciB2ZWN0b3JpemF0aW9uIHdoZW4gdGhpcyBvcHRpb24gaXMgaW4gZWZm ZWN0LgorSXQgaXMgZW5hYmxlZCBieSBkZWZhdWx0IGF0IEBvcHRpb257LU8yfSBhbmQgaGln aGVyIChidXQgbm90IEBvcHRpb257LU9zfQorb3IgQG9wdGlvbnstT2d9KS4KKwogQGl0ZW0g LWZwZXJtaXR0ZWQtZmx0LWV2YWwtbWV0aG9kcz1AdmFye3N0eWxlfQogQG9waW5kZXggZnBl cm1pdHRlZC1mbHQtZXZhbC1tZXRob2RzCiBAb3BpbmRleCBmcGVybWl0dGVkLWZsdC1ldmFs LW1ldGhvZHM9YzExCmRpZmYgLS1naXQgYS9nY2MvZG9jL3RtLnRleGkgYi9nY2MvZG9jL3Rt LnRleGkKaW5kZXggYzMwMDFjNmRlZDkuLmQwYTM2NmYxOTA4IDEwMDY0NAotLS0gYS9nY2Mv ZG9jL3RtLnRleGkKKysrIGIvZ2NjL2RvYy90bS50ZXhpCkBAIC02MjQ5LDcgKzYyNDksNyBA QCBUaGUgZGVmYXVsdCBpcyBAY29kZXtOVUxMX1RSRUV9IHdoaWNoIG1lYW5zIHRvIG5vdCB2 ZWN0b3JpemUgc2NhdHRlcgogc3RvcmVzLgogQGVuZCBkZWZ0eXBlZm4KIAotQGRlZnR5cGVm biB7VGFyZ2V0IEhvb2t9IGludCBUQVJHRVRfU0lNRF9DTE9ORV9DT01QVVRFX1ZFQ1NJWkVf QU5EX1NJTURMRU4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqQHZhcnt9LCBzdHJ1Y3QgY2dyYXBo X3NpbWRfY2xvbmUgKkB2YXJ7fSwgQHZhcnt0cmVlfSwgQHZhcntpbnR9KQorQGRlZnR5cGVm biB7VGFyZ2V0IEhvb2t9IGludCBUQVJHRVRfU0lNRF9DTE9ORV9DT01QVVRFX1ZFQ1NJWkVf QU5EX1NJTURMRU4gKHN0cnVjdCBjZ3JhcGhfbm9kZSAqQHZhcnt9LCBzdHJ1Y3QgY2dyYXBo X3NpbWRfY2xvbmUgKkB2YXJ7fSwgQHZhcnt0cmVlfSwgQHZhcntpbnR9LCBAdmFye2Jvb2x9 KQogVGhpcyBob29rIHNob3VsZCBzZXQgQHZhcnt2ZWNzaXplX21hbmdsZX0sIEB2YXJ7dmVj c2l6ZV9pbnR9LCBAdmFye3ZlY3NpemVfZmxvYXR9CiBmaWVsZHMgaW4gQHZhcntzaW1kX2Ns b25lfSBzdHJ1Y3R1cmUgcG9pbnRlZCBieSBAdmFye2Nsb25lX2luZm99IGFyZ3VtZW50IGFu ZCBhbHNvCiBAdmFye3NpbWRsZW59IGZpZWxkIGlmIGl0IHdhcyBwcmV2aW91c2x5IDAuCmRp ZmYgLS1naXQgYS9nY2Mvb21wLXNpbWQtY2xvbmUuY2MgYi9nY2Mvb21wLXNpbWQtY2xvbmUu Y2MKaW5kZXggMzRjYmVlNWFmY2QuLmY5ZTk4YjA5OWQxIDEwMDY0NAotLS0gYS9nY2Mvb21w LXNpbWQtY2xvbmUuY2MKKysrIGIvZ2NjL29tcC1zaW1kLWNsb25lLmNjCkBAIC01MSw2ICs1 MSwxNTIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpbmNsdWRlICJzdHJpbmdwb29sLmgiCiAjaW5jbHVkZSAiYXR0cmlicy5oIgog I2luY2x1ZGUgIm9tcC1zaW1kLWNsb25lLmgiCisjaW5jbHVkZSAib21wLWxvdy5oIgorI2lu Y2x1ZGUgIm9tcC1nZW5lcmFsLmgiCisKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgbWFya19h dXRvX3NpbWRfY2xvbmU7IHJldHVybiBmYWxzZSBpZiB0aGUgc3RhdGVtZW50CisgICB2aW9s YXRlcyByZXN0cmljdGlvbnMgZm9yIGFuICJvbXAgZGVjbGFyZSBzaW1kIiBmdW5jdGlvbi4g IFNwZWNpZmljYWxseSwKKyAgIHRoZSBmdW5jdGlvbiBtdXN0IG5vdAorICAgLSB0aHJvdyBv ciBjYWxsIHNldGptcC9sb25nam1wCisgICAtIHdyaXRlIG1lbW9yeSB0aGF0IGNvdWxkIGFs aWFzIHBhcmFsbGVsIGNhbGxzCisgICAtIGluY2x1ZGUgb3Blbm1wIGRpcmVjdGl2ZXMgb3Ig Y2FsbHMKKyAgIC0gY2FsbCBmdW5jdGlvbnMgdGhhdCBtaWdodCBkbyB0aG9zZSB0aGluZ3Mg Ki8KKworc3RhdGljIGJvb2wKK2F1dG9fc2ltZF9jaGVja19zdG10IChnaW1wbGUgKnN0bXQs IHRyZWUgb3V0ZXIpCit7CisgIHRyZWUgZGVjbDsKKworICBzd2l0Y2ggKGdpbXBsZV9jb2Rl IChzdG10KSkKKyAgICB7CisgICAgY2FzZSBHSU1QTEVfQ0FMTDoKKyAgICAgIGRlY2wgPSBn aW1wbGVfY2FsbF9mbmRlY2wgKHN0bXQpOworCisgICAgICAvKiBXZSBjYW4ndCBrbm93IHdo ZXRoZXIgaW5kaXJlY3QgY2FsbHMgYXJlIHNhZmUuICAqLworICAgICAgaWYgKGRlY2wgPT0g TlVMTF9UUkVFKQorCXJldHVybiBmYWxzZTsKKworICAgICAgLyogQ2FsbHMgdG8gZnVuY3Rp b25zIHRoYXQgYXJlIENPTlNUIG9yIFBVUkUgYXJlIG9rLiAgKi8KKyAgICAgIGlmIChnaW1w bGVfY2FsbF9mbGFncyAoc3RtdCkgJiAoRUNGX0NPTlNUIHwgRUNGX1BVUkUpKQorCWJyZWFr OworCisgICAgICAvKiBDYWxscyB0byBmdW5jdGlvbnMgdGhhdCBhcmUgYWxyZWFkeSBtYXJr ZWQgIm9tcCBkZWNsYXJlIHNpbWQiIGFyZQorCSBPSy4gICovCisgICAgICBpZiAobG9va3Vw X2F0dHJpYnV0ZSAoIm9tcCBkZWNsYXJlIHNpbWQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wp KSkKKwlicmVhazsKKworICAgICAgLyogTGV0IHJlY3Vyc2l2ZSBjYWxscyB0byB0aGUgY3Vy cmVudCBmdW5jdGlvbiB0aHJvdWdoLiAgKi8KKyAgICAgIGlmIChkZWNsID09IG91dGVyKQor CWJyZWFrOworCisgICAgICAvKiBPdGhlciBmdW5jdGlvbiBjYWxscyBhcmUgbm90IHBlcm1p dHRlZC4gICovCisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIC8qIE9wZW5NUCBkaXJl Y3RpdmVzIGFyZSBub3QgcGVybWl0dGVkLiAgKi8KKyAgICBDQVNFX0dJTVBMRV9PTVA6Cisg ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgIC8qIENvbnNlcnZhdGl2ZWx5IHJlamVjdCBh bGwgRUgtcmVsYXRlZCBjb25zdHJ1Y3RzLiAgKi8KKyAgICBjYXNlIEdJTVBMRV9DQVRDSDoK KyAgICBjYXNlIEdJTVBMRV9FSF9GSUxURVI6CisgICAgY2FzZSBHSU1QTEVfRUhfTVVTVF9O T1RfVEhST1c6CisgICAgY2FzZSBHSU1QTEVfRUhfRUxTRToKKyAgICBjYXNlIEdJTVBMRV9F SF9ESVNQQVRDSDoKKyAgICBjYXNlIEdJTVBMRV9SRVNYOgorICAgIGNhc2UgR0lNUExFX1RS WToKKyAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgLyogQXNtcyBhcmUgbm90IHBlcm1p dHRlZCBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdGhleSBkby4gICovCisgICAgY2FzZSBH SU1QTEVfQVNNOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZGVmYXVsdDoKKyAgICAg IGJyZWFrOworICAgIH0KKworICAvKiBNZW1vcnkgd3JpdGVzIGFyZSBub3QgcGVybWl0dGVk LgorICAgICBGSVhNRTogdGhpcyBjb3VsZCBiZSByZWxheGVkIGEgbGl0dGxlIHRvIHBlcm1p dCB3cml0ZXMgdG8KKyAgICAgZnVuY3Rpb24tbG9jYWwgdmFyaWFibGVzIHRoYXQgY291bGQg bm90IGFsaWFzIG90aGVyIGluc3RhbmNlcworICAgICBvZiB0aGUgZnVuY3Rpb24gcnVubmlu ZyBpbiBwYXJhbGxlbC4gICovCisgIGlmIChnaW1wbGVfc3RvcmVfcCAoc3RtdCkpCisgICAg cmV0dXJuIGZhbHNlOworICBlbHNlCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8qIElmIHRo ZSBmdW5jdGlvbiBOT0RFIGFwcGVhcnMgc3VpdGFibGUgZm9yIGF1dG8tYW5ub3RhdGlvbiB3 aXRoICJkZWNsYXJlCisgICBzaW1kIiwgYWRkIGFuZCByZXR1cm4gc3VjaCBhbiBhdHRyaWJ1 dGUsIG90aGVyd2lzZSByZXR1cm4gbnVsbC4gICovCisKK3N0YXRpYyB0cmVlCittYXJrX2F1 dG9fc2ltZF9jbG9uZSAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQoreworICB0cmVlIGRl Y2wgPSBub2RlLT5kZWNsOworICB0cmVlIHQ7CisgIG1hY2hpbmVfbW9kZSBtOworICB0cmVl IHJlc3VsdDsKKyAgYmFzaWNfYmxvY2sgYmI7CisKKyAgLyogTm90aGluZyB0byBkbyBpZiB0 aGUgZnVuY3Rpb24gaXNuJ3QgYSBkZWZpbml0aW9uIG9yIGRvZXNuJ3QKKyAgICAgaGF2ZSBh IGJvZHkuICAqLworICBpZiAoIW5vZGUtPmRlZmluaXRpb24gfHwgIW5vZGUtPmhhc19naW1w bGVfYm9keV9wICgpKQorICAgIHJldHVybiBOVUxMX1RSRUU7CisKKyAgLyogTm90aGluZyB0 byBkbyBpZiB0aGUgZnVuY3Rpb24gYWxyZWFkeSBoYXMgdGhlICJvbXAgZGVjbGFyZSBzaW1k IgorICAgICBhdHRyaWJ1dGUsIGlzIG1hcmtlZCBub2Nsb25lLCBvciBpcyBub3QgIm9tcCBk ZWNsYXJlIHRhcmdldCIuICAqLworICBpZiAobG9va3VwX2F0dHJpYnV0ZSAoIm9tcCBkZWNs YXJlIHNpbWQiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKQorICAgICAgfHwgbG9va3VwX2F0 dHJpYnV0ZSAoIm5vY2xvbmUiLCBERUNMX0FUVFJJQlVURVMgKGRlY2wpKQorICAgICAgfHwg IWxvb2t1cF9hdHRyaWJ1dGUgKCJvbXAgZGVjbGFyZSB0YXJnZXQiLCBERUNMX0FUVFJJQlVU RVMgKGRlY2wpKSkKKyAgICByZXR1cm4gTlVMTF9UUkVFOworCisgIC8qIEJhY2tlbmRzIHdp bGwgY2hlY2sgZm9yIHZlY3Rvcml6YWJsZSBhcmd1bWVudHMvcmV0dXJuIHR5cGVzIGluIGEK KyAgICAgdGFyZ2V0LXNwZWNpZmljIHdheSwgYnV0IHdlIGNhbiBpbW1lZGlhdGVseSBmaWx0 ZXIgb3V0IGZ1bmN0aW9ucworICAgICB0aGF0IGhhdmUgbm9uLXNjYWxhciBhcmd1bWVudHMv cmV0dXJuIHR5cGVzLiAgQWxzbywgYXRvbWljIHR5cGVzCisgICAgIHRyaWdnZXIgd2Fybmlu Z3MgaW4gc2ltZF9jbG9uZV9jbGF1c2VzX2V4dHJhY3QuICAqLworICB0ID0gVFJFRV9UWVBF IChUUkVFX1RZUEUgKGRlY2wpKTsKKyAgbSA9IFRZUEVfTU9ERSAodCk7CisgIGlmICghKFZP SURfVFlQRV9QICh0KSB8fCBpc19hIDxzY2FsYXJfbW9kZT4gKG0pKSB8fCBUWVBFX0FUT01J QyAodCkpCisgICAgcmV0dXJuIE5VTExfVFJFRTsKKworICBpZiAoVFlQRV9BUkdfVFlQRVMg KFRSRUVfVFlQRSAoZGVjbCkpKQorICAgIHsKKyAgICAgIGZvciAodHJlZSB0ZW1wID0gVFlQ RV9BUkdfVFlQRVMgKFRSRUVfVFlQRSAoZGVjbCkpOworCSAgIHRlbXA7IHRlbXAgPSBUUkVF X0NIQUlOICh0ZW1wKSkKKwl7CisJICB0ID0gVFJFRV9WQUxVRSAodGVtcCk7CisJICBtID0g VFlQRV9NT0RFICh0KTsKKwkgIGlmICghKFZPSURfVFlQRV9QICh0KSB8fCBpc19hIDxzY2Fs YXJfbW9kZT4gKG0pKSB8fCBUWVBFX0FUT01JQyAodCkpCisJICAgIHJldHVybiBOVUxMX1RS RUU7CisJfQorICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIGZvciAodHJlZSB0ZW1wID0g REVDTF9BUkdVTUVOVFMgKGRlY2wpOyB0ZW1wOyB0ZW1wID0gREVDTF9DSEFJTiAodGVtcCkp CisJeworCSAgdCA9IFRSRUVfVFlQRSAodGVtcCk7CisJICBtID0gVFlQRV9NT0RFICh0KTsK KwkgIGlmICghKFZPSURfVFlQRV9QICh0KSB8fCBpc19hIDxzY2FsYXJfbW9kZT4gKG0pKSB8 fCBUWVBFX0FUT01JQyAodCkpCisJICAgIHJldHVybiBOVUxMX1RSRUU7CisJfQorICAgIH0K KworICAvKiBTY2FuIHRoZSBmdW5jdGlvbiBib2R5IHRvIHNlZSBpZiBpdCBpcyBzdWl0YWJs ZSBmb3IgU0lNRC1pemF0aW9uLiAgKi8KKyAgbm9kZS0+Z2V0X2JvZHkgKCk7CisKKyAgRk9S X0VBQ0hfQkJfRk4gKGJiLCBERUNMX1NUUlVDVF9GVU5DVElPTiAoZGVjbCkpCisgICAgewor ICAgICAgZm9yIChnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2kgPSBnc2lfc3RhcnRfYmIgKGJi KTsgIWdzaV9lbmRfcCAoZ3NpKTsKKwkgICBnc2lfbmV4dCAoJmdzaSkpCisJaWYgKCFhdXRv X3NpbWRfY2hlY2tfc3RtdCAoZ3NpX3N0bXQgKGdzaSksIGRlY2wpKQorCSAgcmV0dXJuIE5V TExfVFJFRTsKKyAgICB9CisKKyAgLyogQWxsIGlzIGdvb2QuICAqLworICByZXN1bHQgPSB0 cmVlX2NvbnMgKGdldF9pZGVudGlmaWVyICgib21wIGRlY2xhcmUgc2ltZCIpLCBOVUxMLAor CQkgICAgICBERUNMX0FUVFJJQlVURVMgKGRlY2wpKTsKKyAgREVDTF9BVFRSSUJVVEVTIChk ZWNsKSA9IHJlc3VsdDsKKyAgcmV0dXJuIHJlc3VsdDsKK30KKwogCiAvKiBSZXR1cm4gdGhl IG51bWJlciBvZiBlbGVtZW50cyBpbiB2ZWN0b3IgdHlwZSBWRUNUWVBFLCB3aGljaCBpcyBh c3NvY2lhdGVkCiAgICB3aXRoIGEgU0lNRCBjbG9uZS4gIEF0IHByZXNlbnQgdGhlc2UgYWx3 YXlzIGhhdmUgYSBjb25zdGFudCBsZW5ndGguICAqLwpAQCAtNDMwLDEwICs1NzYsMTIgQEAg c2ltZF9jbG9uZV9tYW5nbGUgKHN0cnVjdCBjZ3JhcGhfbm9kZSAqbm9kZSwKICAgcmV0dXJu IGdldF9pZGVudGlmaWVyIChzdHIpOwogfQogCi0vKiBDcmVhdGUgYSBzaW1kIGNsb25lIG9m IE9MRF9OT0RFIGFuZCByZXR1cm4gaXQuICAqLworLyogQ3JlYXRlIGEgc2ltZCBjbG9uZSBv ZiBPTERfTk9ERSBhbmQgcmV0dXJuIGl0LiAgSWYgRk9SQ0VfTE9DQUwgaXMgdHJ1ZSwKKyAg IGNyZWF0ZSBpdCBhcyBhIGxvY2FsIHN5bWJvbCwgb3RoZXJ3aXNlIGNvcHkgdGhlIHN5bWJv bCBsaW5rYWdlIGFuZAorICAgdmlzaWJpbGl0eSBhdHRyaWJ1dGVzIGZyb20gT0xEX05PREUu ICAqLwogCiBzdGF0aWMgc3RydWN0IGNncmFwaF9ub2RlICoKLXNpbWRfY2xvbmVfY3JlYXRl IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm9sZF9ub2RlKQorc2ltZF9jbG9uZV9jcmVhdGUgKHN0 cnVjdCBjZ3JhcGhfbm9kZSAqb2xkX25vZGUsIGJvb2wgZm9yY2VfbG9jYWwpCiB7CiAgIHN0 cnVjdCBjZ3JhcGhfbm9kZSAqbmV3X25vZGU7CiAgIGlmIChvbGRfbm9kZS0+ZGVmaW5pdGlv bikKQEAgLTQ2MywyMyArNjExLDM4IEBAIHNpbWRfY2xvbmVfY3JlYXRlIChzdHJ1Y3QgY2dy YXBoX25vZGUgKm9sZF9ub2RlKQogICAgIHJldHVybiBuZXdfbm9kZTsKIAogICBzZXRfZGVj bF9idWlsdF9pbl9mdW5jdGlvbiAobmV3X25vZGUtPmRlY2wsIE5PVF9CVUlMVF9JTiwgMCk7 Ci0gIFRSRUVfUFVCTElDIChuZXdfbm9kZS0+ZGVjbCkgPSBUUkVFX1BVQkxJQyAob2xkX25v ZGUtPmRlY2wpOwotICBERUNMX0NPTURBVCAobmV3X25vZGUtPmRlY2wpID0gREVDTF9DT01E QVQgKG9sZF9ub2RlLT5kZWNsKTsKLSAgREVDTF9XRUFLIChuZXdfbm9kZS0+ZGVjbCkgPSBE RUNMX1dFQUsgKG9sZF9ub2RlLT5kZWNsKTsKLSAgREVDTF9FWFRFUk5BTCAobmV3X25vZGUt PmRlY2wpID0gREVDTF9FWFRFUk5BTCAob2xkX25vZGUtPmRlY2wpOwotICBERUNMX1ZJU0lC SUxJVFlfU1BFQ0lGSUVEIChuZXdfbm9kZS0+ZGVjbCkKLSAgICA9IERFQ0xfVklTSUJJTElU WV9TUEVDSUZJRUQgKG9sZF9ub2RlLT5kZWNsKTsKLSAgREVDTF9WSVNJQklMSVRZIChuZXdf bm9kZS0+ZGVjbCkgPSBERUNMX1ZJU0lCSUxJVFkgKG9sZF9ub2RlLT5kZWNsKTsKLSAgREVD TF9ETExJTVBPUlRfUCAobmV3X25vZGUtPmRlY2wpID0gREVDTF9ETExJTVBPUlRfUCAob2xk X25vZGUtPmRlY2wpOwotICBpZiAoREVDTF9PTkVfT05MWSAob2xkX25vZGUtPmRlY2wpKQot ICAgIG1ha2VfZGVjbF9vbmVfb25seSAobmV3X25vZGUtPmRlY2wsIERFQ0xfQVNTRU1CTEVS X05BTUUgKG5ld19ub2RlLT5kZWNsKSk7Ci0KLSAgLyogVGhlIG1ldGhvZCBjZ3JhcGhfdmVy c2lvbl9jbG9uZV93aXRoX2JvZHkgKCkgd2lsbCBmb3JjZSB0aGUgbmV3Ci0gICAgIHN5bWJv bCBsb2NhbC4gIFVuZG8gdGhpcywgYW5kIGluaGVyaXQgZXh0ZXJuYWwgdmlzaWJpbGl0eSBm cm9tCi0gICAgIHRoZSBvbGQgbm9kZS4gICovCi0gIG5ld19ub2RlLT5sb2NhbCA9IG9sZF9u b2RlLT5sb2NhbDsKLSAgbmV3X25vZGUtPmV4dGVybmFsbHlfdmlzaWJsZSA9IG9sZF9ub2Rl LT5leHRlcm5hbGx5X3Zpc2libGU7Ci0gIG5ld19ub2RlLT5jYWxsc19kZWNsYXJlX3Zhcmlh bnRfYWx0ID0gb2xkX25vZGUtPmNhbGxzX2RlY2xhcmVfdmFyaWFudF9hbHQ7CisgIGlmIChm b3JjZV9sb2NhbCkKKyAgICB7CisgICAgICBUUkVFX1BVQkxJQyAobmV3X25vZGUtPmRlY2wp ID0gMDsKKyAgICAgIERFQ0xfQ09NREFUIChuZXdfbm9kZS0+ZGVjbCkgPSAwOworICAgICAg REVDTF9XRUFLIChuZXdfbm9kZS0+ZGVjbCkgPSAwOworICAgICAgREVDTF9FWFRFUk5BTCAo bmV3X25vZGUtPmRlY2wpID0gMDsKKyAgICAgIERFQ0xfVklTSUJJTElUWV9TUEVDSUZJRUQg KG5ld19ub2RlLT5kZWNsKSA9IDA7CisgICAgICBERUNMX1ZJU0lCSUxJVFkgKG5ld19ub2Rl LT5kZWNsKSA9IFZJU0lCSUxJVFlfREVGQVVMVDsKKyAgICAgIERFQ0xfRExMSU1QT1JUX1Ag KG5ld19ub2RlLT5kZWNsKSA9IDA7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgVFJF RV9QVUJMSUMgKG5ld19ub2RlLT5kZWNsKSA9IFRSRUVfUFVCTElDIChvbGRfbm9kZS0+ZGVj bCk7CisgICAgICBERUNMX0NPTURBVCAobmV3X25vZGUtPmRlY2wpID0gREVDTF9DT01EQVQg KG9sZF9ub2RlLT5kZWNsKTsKKyAgICAgIERFQ0xfV0VBSyAobmV3X25vZGUtPmRlY2wpID0g REVDTF9XRUFLIChvbGRfbm9kZS0+ZGVjbCk7CisgICAgICBERUNMX0VYVEVSTkFMIChuZXdf bm9kZS0+ZGVjbCkgPSBERUNMX0VYVEVSTkFMIChvbGRfbm9kZS0+ZGVjbCk7CisgICAgICBE RUNMX1ZJU0lCSUxJVFlfU1BFQ0lGSUVEIChuZXdfbm9kZS0+ZGVjbCkKKwk9IERFQ0xfVklT SUJJTElUWV9TUEVDSUZJRUQgKG9sZF9ub2RlLT5kZWNsKTsKKyAgICAgIERFQ0xfVklTSUJJ TElUWSAobmV3X25vZGUtPmRlY2wpID0gREVDTF9WSVNJQklMSVRZIChvbGRfbm9kZS0+ZGVj bCk7CisgICAgICBERUNMX0RMTElNUE9SVF9QIChuZXdfbm9kZS0+ZGVjbCkgPSBERUNMX0RM TElNUE9SVF9QIChvbGRfbm9kZS0+ZGVjbCk7CisgICAgICBpZiAoREVDTF9PTkVfT05MWSAo b2xkX25vZGUtPmRlY2wpKQorCW1ha2VfZGVjbF9vbmVfb25seSAobmV3X25vZGUtPmRlY2ws CisJCQkgICAgREVDTF9BU1NFTUJMRVJfTkFNRSAobmV3X25vZGUtPmRlY2wpKTsKKworICAg ICAgLyogVGhlIG1ldGhvZCBjZ3JhcGhfdmVyc2lvbl9jbG9uZV93aXRoX2JvZHkgKCkgd2ls bCBmb3JjZSB0aGUgbmV3CisJIHN5bWJvbCBsb2NhbC4gIFVuZG8gdGhpcywgYW5kIGluaGVy aXQgZXh0ZXJuYWwgdmlzaWJpbGl0eSBmcm9tCisJIHRoZSBvbGQgbm9kZS4gICovCisgICAg ICBuZXdfbm9kZS0+bG9jYWwgPSBvbGRfbm9kZS0+bG9jYWw7CisgICAgICBuZXdfbm9kZS0+ ZXh0ZXJuYWxseV92aXNpYmxlID0gb2xkX25vZGUtPmV4dGVybmFsbHlfdmlzaWJsZTsKKyAg ICAgIG5ld19ub2RlLT5jYWxsc19kZWNsYXJlX3ZhcmlhbnRfYWx0CisJPSBvbGRfbm9kZS0+ Y2FsbHNfZGVjbGFyZV92YXJpYW50X2FsdDsKKyAgICB9CiAKICAgcmV0dXJuIG5ld19ub2Rl OwogfQpAQCAtMTY4MywxMyArMTg0NiwzMiBAQCBzaW1kX2Nsb25lX2FkanVzdCAoc3RydWN0 IGNncmFwaF9ub2RlICpub2RlKQogdm9pZAogZXhwYW5kX3NpbWRfY2xvbmVzIChzdHJ1Y3Qg Y2dyYXBoX25vZGUgKm5vZGUpCiB7Ci0gIHRyZWUgYXR0ciA9IGxvb2t1cF9hdHRyaWJ1dGUg KCJvbXAgZGVjbGFyZSBzaW1kIiwKLQkJCQlERUNMX0FUVFJJQlVURVMgKG5vZGUtPmRlY2wp KTsKLSAgaWYgKGF0dHIgPT0gTlVMTF9UUkVFCi0gICAgICB8fCBub2RlLT5pbmxpbmVkX3Rv CisgIHRyZWUgYXR0cjsKKyAgYm9vbCBleHBsaWNpdF9wID0gdHJ1ZTsKKworICBpZiAobm9k ZS0+aW5saW5lZF90bwogICAgICAgfHwgbG9va3VwX2F0dHJpYnV0ZSAoIm5vY2xvbmUiLCBE RUNMX0FUVFJJQlVURVMgKG5vZGUtPmRlY2wpKSkKICAgICByZXR1cm47CiAKKyAgYXR0ciA9 IGxvb2t1cF9hdHRyaWJ1dGUgKCJvbXAgZGVjbGFyZSBzaW1kIiwKKwkJCSAgIERFQ0xfQVRU UklCVVRFUyAobm9kZS0+ZGVjbCkpOworCisgIC8qIFNlZSBpZiB3ZSBjYW4gYWRkIGFuICJv bXAgZGVjbGFyZSBzaW1kIiBkaXJlY3RpdmUgaW1wbGljaXRseQorICAgICBiZWZvcmUgZ2l2 aW5nIHVwLiAgKi8KKyAgLyogRklYTUU6IE9wZW5BQ0MgIiNwcmFnbWEgYWNjIHJvdXRpbmUi IHRyYW5zbGF0ZXMgaW50bworICAgICAib21wIGRlY2xhcmUgdGFyZ2V0IiwgYnV0IGFwcGVh cnMgYWxzbyB0byBoYXZlIHNvbWUgb3RoZXIgZWZmZWN0cworICAgICB0aGF0IGNvbmZsaWN0 IHdpdGggZ2VuZXJhdGluZyBTSU1EIGNsb25lcywgY2F1c2luZyBJQ0VzLiAgU28gZG9uJ3QK KyAgICAgZG8gdGhpcyBpZiB3ZSd2ZSBnb3QgT3BlbkFDQyBpbnN0ZWFkIG9mIE9wZW5NUC4g ICovCisgIGlmIChhdHRyID09IE5VTExfVFJFRQorICAgICAgJiYgZmxhZ19vcGVubXBfdGFy Z2V0X3NpbWRfY2xvbmUKKyAgICAgICYmICFvYWNjX2dldF9mbl9hdHRyaWIgKG5vZGUtPmRl Y2wpKQorICAgIHsKKyAgICAgIGF0dHIgPSBtYXJrX2F1dG9fc2ltZF9jbG9uZSAobm9kZSk7 CisgICAgICBleHBsaWNpdF9wID0gZmFsc2U7CisgICAgfQorICBpZiAoYXR0ciA9PSBOVUxM X1RSRUUpCisgICAgcmV0dXJuOworCiAgIC8qIElnbm9yZQogICAgICAjcHJhZ21hIG9tcCBk ZWNsYXJlIHNpbWQKICAgICAgZXh0ZXJuIGludCBmb28gKCk7CkBAIC0xNzE0LDEzICsxODk2 LDE1IEBAIGV4cGFuZF9zaW1kX2Nsb25lcyAoc3RydWN0IGNncmFwaF9ub2RlICpub2RlKQog CiAgICAgICBwb2x5X3VpbnQ2NCBvcmlnX3NpbWRsZW4gPSBjbG9uZV9pbmZvLT5zaW1kbGVu OwogICAgICAgdHJlZSBiYXNlX3R5cGUgPSBzaW1kX2Nsb25lX2NvbXB1dGVfYmFzZV9kYXRh X3R5cGUgKG5vZGUsIGNsb25lX2luZm8pOworCiAgICAgICAvKiBUaGUgdGFyZ2V0IGNhbiBy ZXR1cm4gMCAobm8gc2ltZCBjbG9uZXMgc2hvdWxkIGJlIGNyZWF0ZWQpLAogCSAxIChqdXN0 IG9uZSBJU0Egb2Ygc2ltZCBjbG9uZXMgc2hvdWxkIGJlIGNyZWF0ZWQpIG9yIGhpZ2hlcgog CSBjb3VudCBvZiBJU0EgdmFyaWFudHMuICBJbiB0aGF0IGNhc2UsIGNsb25lX2luZm8gaXMg aW5pdGlhbGl6ZWQKIAkgZm9yIHRoZSBmaXJzdCBJU0EgdmFyaWFudC4gICovCiAgICAgICBp bnQgY291bnQKIAk9IHRhcmdldG0uc2ltZF9jbG9uZS5jb21wdXRlX3ZlY3NpemVfYW5kX3Np bWRsZW4gKG5vZGUsIGNsb25lX2luZm8sCi0JCQkJCQkJICBiYXNlX3R5cGUsIDApOworCQkJ CQkJCSAgYmFzZV90eXBlLCAwLAorCQkJCQkJCSAgZXhwbGljaXRfcCk7CiAgICAgICBpZiAo Y291bnQgPT0gMCkKIAljb250aW51ZTsKIApAQCAtMTc0NSw3ICsxOTI5LDggQEAgZXhwYW5k X3NpbWRfY2xvbmVzIChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5vZGUpCiAJICAgICAgLyogQW5k IGNhbGwgdGhlIHRhcmdldCBob29rIGFnYWluIHRvIGdldCB0aGUgcmlnaHQgSVNBLiAgKi8K IAkgICAgICB0YXJnZXRtLnNpbWRfY2xvbmUuY29tcHV0ZV92ZWNzaXplX2FuZF9zaW1kbGVu IChub2RlLCBjbG9uZSwKIAkJCQkJCQkgICAgICBiYXNlX3R5cGUsCi0JCQkJCQkJICAgICAg aSAvIDIpOworCQkJCQkJCSAgICAgIGkgLyAyLAorCQkJCQkJCSAgICAgIGV4cGxpY2l0X3Ap OwogCSAgICAgIGlmICgoaSAmIDEpICE9IDApCiAJCWNsb25lLT5pbmJyYW5jaCA9IDE7CiAJ ICAgIH0KQEAgLTE3NjMsNyArMTk0OCw3IEBAIGV4cGFuZF9zaW1kX2Nsb25lcyAoc3RydWN0 IGNncmFwaF9ub2RlICpub2RlKQogCSAgLyogT25seSB3aGVuIHdlIGFyZSBzdXJlIHdlIHdh bnQgdG8gY3JlYXRlIHRoZSBjbG9uZSBhY3R1YWxseQogCSAgICAgY2xvbmUgdGhlIGZ1bmN0 aW9uIChvciBkZWZpbml0aW9ucykgb3IgY3JlYXRlIGFub3RoZXIKIAkgICAgIGV4dGVybiBG VU5DVElPTl9ERUNMIChmb3IgcHJvdG90eXBlcyB3aXRob3V0IGRlZmluaXRpb25zKS4gICov Ci0JICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm4gPSBzaW1kX2Nsb25lX2NyZWF0ZSAobm9kZSk7 CisJICBzdHJ1Y3QgY2dyYXBoX25vZGUgKm4gPSBzaW1kX2Nsb25lX2NyZWF0ZSAobm9kZSwg IWV4cGxpY2l0X3ApOwogCSAgaWYgKG4gPT0gTlVMTCkKIAkgICAgewogCSAgICAgIGlmIChp ID09IDApCmRpZmYgLS1naXQgYS9nY2Mvb3B0cy5jYyBiL2djYy9vcHRzLmNjCmluZGV4IDU0 ZTU3ZjM2NzU1Li5iOGNhNmZkY2E4MiAxMDA2NDQKLS0tIGEvZ2NjL29wdHMuY2MKKysrIGIv Z2NjL29wdHMuY2MKQEAgLTY1OCw2ICs2NTgsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRl ZmF1bHRfb3B0aW9ucyBkZWZhdWx0X29wdGlvbnNfdGFibGVbXSA9CiAgICAgICBSRU9SREVS X0JMT0NLU19BTEdPUklUSE1fU1RDIH0sCiAgICAgeyBPUFRfTEVWRUxTXzJfUExVU19TUEVF RF9PTkxZLCBPUFRfZnRyZWVfbG9vcF92ZWN0b3JpemUsIE5VTEwsIDEgfSwKICAgICB7IE9Q VF9MRVZFTFNfMl9QTFVTX1NQRUVEX09OTFksIE9QVF9mdHJlZV9zbHBfdmVjdG9yaXplLCBO VUxMLCAxIH0sCisgICAgeyBPUFRfTEVWRUxTXzJfUExVU19TUEVFRF9PTkxZLCBPUFRfZm9w ZW5tcF90YXJnZXRfc2ltZF9jbG9uZSwgTlVMTCwgMSB9LAogI2lmZGVmIElOU05fU0NIRURV TElORwogICAvKiBPbmx5IHJ1biB0aGUgcHJlLXJlZ2FsbG9jIHNjaGVkdWxpbmcgcGFzcyBp ZiBvcHRpbWl6aW5nIGZvciBzcGVlZC4gICovCiAgICAgeyBPUFRfTEVWRUxTXzJfUExVU19T UEVFRF9PTkxZLCBPUFRfZnNjaGVkdWxlX2luc25zLCBOVUxMLCAxIH0sCmRpZmYgLS1naXQg YS9nY2MvdGFyZ2V0LmRlZiBiL2djYy90YXJnZXQuZGVmCmluZGV4IDRkNDlmZmMyYzg4Li42 ZTgzMGJlZDUyYSAxMDA2NDQKLS0tIGEvZ2NjL3RhcmdldC5kZWYKKysrIGIvZ2NjL3Rhcmdl dC5kZWYKQEAgLTE2MzQsNyArMTYzNCw3IEBAIGZpZWxkcyBpbiBAdmFye3NpbWRfY2xvbmV9 IHN0cnVjdHVyZSBwb2ludGVkIGJ5IEB2YXJ7Y2xvbmVfaW5mb30gYXJndW1lbnQgYW5kIGFs CiBub3QgZGV0ZXJtaW5lZCBieSB0aGUgYml0c2l6ZSAoaW4gd2hpY2ggY2FzZSBAdmFye3Np bWRsZW59IGlzIGFsd2F5cyB1c2VkKS5cblwKIFRoZSBob29rIHNob3VsZCByZXR1cm4gMCBp ZiBTSU1EIGNsb25lcyBzaG91bGRuJ3QgYmUgZW1pdHRlZCxcblwKIG9yIG51bWJlciBvZiBA dmFye3ZlY3NpemVfbWFuZ2xlfSB2YXJpYW50cyB0aGF0IHNob3VsZCBiZSBlbWl0dGVkLiIs Ci1pbnQsIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgc3RydWN0IGNncmFwaF9zaW1kX2Nsb25l ICosIHRyZWUsIGludCksIE5VTEwpCitpbnQsIChzdHJ1Y3QgY2dyYXBoX25vZGUgKiwgc3Ry dWN0IGNncmFwaF9zaW1kX2Nsb25lICosIHRyZWUsIGludCwgYm9vbCksIE5VTEwpCiAKIERF RkhPT0sKIChhZGp1c3QsCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21w L3RhcmdldC1zaW1kLWNsb25lLTEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFy Z2V0LXNpbWQtY2xvbmUtMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi5hYjAyN2E2MDk3MAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMS5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsg ZGctb3B0aW9ucyAiLWZvcGVubXAgLU8yIiB9ICovCisKKy8qIFRlc3QgdGhhdCBzaW1kIGNs b25lcyBhcmUgZ2VuZXJhdGVkIGZvciBmdW5jdGlvbnMgd2l0aCAiZGVjbGFyZSB0YXJnZXQi LiAgKi8KKworI3ByYWdtYSBvbXAgZGVjbGFyZSB0YXJnZXQKK2ludCBhZGRpdChpbnQgYSwg aW50IGIsIGludCBjKQoreworICByZXR1cm4gYSArIGI7Cit9CisjcHJhZ21hIG9tcCBlbmQg ZGVjbGFyZSB0YXJnZXQKKworLyogQWx0aG91Z2ggYWRkaXQgaGFzIGV4dGVybmFsIGxpbmth Z2UsIHdlIGV4cGVjdCBjbG9uZXMgdG8gYmUgZ2VuZXJhdGVkIGFzCisgICBmb3IgYSBmdW5j dGlvbiB3aXRoIGludGVybmFsIGxpbmthZ2UuICAqLworCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXIgIlxcLnR5cGUuKl9aR1ZiTjR2dnZfYWRkaXQsLipmdW5jdGlvbiIgeyB0 YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyICJcXC50eXBlLipfWkdWYk00dnZ2X2FkZGl0LC4qZnVuY3Rpb24iIHsg dGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci1ub3QgIlxcLmdsb2JsLipfWkdWYk40dnZ2X2FkZGl0IiB7IHRhcmdl dCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICJcXC5nbG9ibC4qX1pHVmJNNHZ2dl9hZGRpdCIgeyB0YXJnZXQgaT84 Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Y2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS0yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy5k Zy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMGNjYmZlMWQ3NjUKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTIuYwpAQCAtMCwwICsxLDE4 IEBACisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1wIC1PMiIgfSAqLworCisvKiBUZXN0IHRo YXQgc2ltZCBjbG9uZXMgYXJlIG5vdCBnZW5lcmF0ZWQgZm9yIGZ1bmN0aW9ucyB3aXRoIAor ICAgImRlY2xhcmUgdGFyZ2V0IiBidXQgdW5zdWl0YWJsZSBhcmd1bWVudHMuICAqLworCitz dHJ1Y3QgcyB7CisgIGludCBhOworICBpbnQgYjsKK307CisgIAorI3ByYWdtYSBvbXAgZGVj bGFyZSB0YXJnZXQKK2ludCBhZGRpdCAoc3RydWN0IHMgeCkKK3sKKyAgcmV0dXJuIHguYSAr IHguYjsKK30KKyNwcmFnbWEgb21wIGVuZCBkZWNsYXJlIHRhcmdldAorCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJfWi4qX2FkZGl0IiB7IHRhcmdldCBpPzg2LSot KiB4ODZfNjQtKi0qIH0gfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5k Zy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTMuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dv bXAvdGFyZ2V0LXNpbWQtY2xvbmUtMy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5jMzEzY2ZlNTNiMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtMy5jCkBAIC0wLDAgKzEsMTcgQEAK Ky8qIHsgZGctb3B0aW9ucyAiLWZvcGVubXAgLU8yIiB9ICovCisKKy8qIFRlc3QgdGhhdCBz aW1kIGNsb25lcyBhcmUgbm90IGdlbmVyYXRlZCBmb3IgZnVuY3Rpb25zIHdpdGggCisgICAi ZGVjbGFyZSB0YXJnZXQiIGJ1dCB0aGF0IGNhbGwgcG9zc2libHkgc2lkZS1lZmZlY3Rpbmcg ZnVuY3Rpb25zIAorICAgaW4gdGhlIGJvZHkuICAqLworCitleHRlcm4gaW50IGYgKGludCk7 CisKKyNwcmFnbWEgb21wIGRlY2xhcmUgdGFyZ2V0CitpbnQgYWRkaXQoaW50IGEsIGludCBi LCBpbnQgYykKK3sKKyAgcmV0dXJuIGYoYSkgKyBiOworfQorI3ByYWdtYSBvbXAgZW5kIGRl Y2xhcmUgdGFyZ2V0CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIl9a LipfYWRkaXQiIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KKwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS00 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25lLTQuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZTMyYjIyZjZhNTkKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1k LWNsb25lLTQuYwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLW9wdGlvbnMgIi1mb3Blbm1w IC1PMiIgfSAqLworCisvKiBUZXN0IHRoYXQgc2ltZCBjbG9uZXMgYXJlIG5vdCBnZW5lcmF0 ZWQgZm9yIGZ1bmN0aW9ucyB3aXRoIAorICAgImRlY2xhcmUgdGFyZ2V0IiBidXQgdGhhdCB3 cml0ZSBtZW1vcnkgaW4gdGhlIGJvZHkuICAqLworCitleHRlcm4gaW50IHNhdmU7CisKKyNw cmFnbWEgb21wIGRlY2xhcmUgdGFyZ2V0CitpbnQgYWRkaXQoaW50IGEsIGludCBiLCBpbnQg YykKK3sKKyAgc2F2ZSA9IGM7CisgIHJldHVybiBhICsgYjsKK30KKyNwcmFnbWEgb21wIGVu ZCBkZWNsYXJlIHRhcmdldAorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90 ICJfWi4qX2FkZGl0IiB7IHRhcmdldCBpPzg2LSotKiB4ODZfNjQtKi0qIH0gfSB9ICovCmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy5kZy9nb21wL3RhcmdldC1zaW1kLWNsb25l LTUuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kMzlhOWFiNzM3Zgot LS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNp bWQtY2xvbmUtNS5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qIHsgZGctb3B0aW9ucyAiLWZvcGVu bXAgLU9zIiB9ICovCisKKy8qIFRlc3QgdGhhdCBzaW1kIGNsb25lcyBhcmUgbm90IGdlbmVy YXRlZCBmb3IgZnVuY3Rpb25zIHdpdGggCisgICAiZGVjbGFyZSB0YXJnZXQiIGF0IC1Pcy4g ICovCisKKyNwcmFnbWEgb21wIGRlY2xhcmUgdGFyZ2V0CitpbnQgYWRkaXQoaW50IGEsIGlu dCBiLCBpbnQgYykKK3sKKyAgcmV0dXJuIGEgKyBiOworfQorI3ByYWdtYSBvbXAgZW5kIGRl Y2xhcmUgdGFyZ2V0CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIl9a LipfYWRkaXQiIHsgdGFyZ2V0IGk/ODYtKi0qIHg4Nl82NC0qLSogfSB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2dvbXAvdGFyZ2V0LXNpbWQtY2xvbmUtNi5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1jbG9uZS02LmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEwYzUyOWIxYzRlCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvZ29tcC90YXJnZXQtc2ltZC1j bG9uZS02LmMKQEAgLTAsMCArMSwxMyBAQAorLyogeyBkZy1vcHRpb25zICItZm9wZW5tcCAt T2ciIH0gKi8KKworLyogVGVzdCB0aGF0IHNpbWQgY2xvbmVzIGFyZSBub3QgZ2VuZXJhdGVk IGZvciBmdW5jdGlvbnMgd2l0aCAKKyAgICJkZWNsYXJlIHRhcmdldCIgYXQgLU9nLiAgKi8K KworI3ByYWdtYSBvbXAgZGVjbGFyZSB0YXJnZXQKK2ludCBhZGRpdChpbnQgYSwgaW50IGIs IGludCBjKQoreworICByZXR1cm4gYSArIGI7Cit9CisjcHJhZ21hIG9tcCBlbmQgZGVjbGFy ZSB0YXJnZXQKKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiX1ouKl9h ZGRpdCIgeyB0YXJnZXQgaT84Ni0qLSogeDg2XzY0LSotKiB9IH0gfSAqLwotLSAKMi4zMS4x Cgo= --------------roBbYshk2DawUtTGqRTtMUT4--