From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id CF6723858D32; Mon, 27 Feb 2023 12:15:12 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org CF6723858D32 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.97,331,1669104000"; d="diff'?scan'208";a="98328116" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 27 Feb 2023 04:15:11 -0800 IronPort-SDR: pgX2GaWmzg2y70bZlqvvXw6SQbrzx73RUfX/+jwt2K9GDe732P2m+VUdGI+Zya1XEjksU2vhzi /7uoVF7Z87Mnwp1qFff5VQVJUhT6dJvx484rfjUIB36HdrtpLy0OLeJcSmjqaKo5qllNGeUA5k UO2YngjfVd2T+17O/0yFN263AkGoENuQ8tmTRh0TSWuUkUaxF3E6VQ1/PQ9bE90h5aX+LMWqyG 5YA/Dfm3NmcypneCswQQEhxs2sWhpP5uCaXBHz6tlkhIIxgIefnay1oUwek5lt9i0qNH9LcCEz +rc= Content-Type: multipart/mixed; boundary="------------Awz9odA0TK80zDB7NaVxU4cF" Message-ID: Date: Mon, 27 Feb 2023 13:15:04 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: [Patch,v3] Fortran/OpenMP: Fix mapping of array descriptors and deferred-length strings Content-Language: en-US From: Tobias Burnus To: gcc-patches , Jakub Jelinek , fortran References: <57880257-d50f-e72b-5423-932af6c64e92@codesourcery.com> In-Reply-To: <57880257-d50f-e72b-5423-932af6c64e92@codesourcery.com> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-11.mgc.mentorg.com (139.181.222.11) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,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: --------------Awz9odA0TK80zDB7NaVxU4cF Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable And another re-diff for GCC 13/mainline, updating gcc/testsuite/ (The last change is related to the "[OG12,committed] Update dg-dump-scan for ..." discussion + OG12 https://gcc.gnu.org/g:e4de87a2309 / https://gcc.gnu.org/pipermail/gcc-patches/2023-February/612871.html ) On 23.02.23 17:42, Tobias Burnus wrote: > On 21.02.23 12:57, Tobias Burnus wrote: >> This patch moves some generic code for Fortran out of gimplify.cc >> to trans-openmp.cc and fixes several issues related to mapping. >> >> Tested with nvptx offloading. >> OK for mainline? Tobias >> Caveats: >> >> Besides the issues shown in the comment-out code, there remains also an >> issue with implicit mapping - at least for deferred-length strings, >> but I wouldn't be surprised if - at least depending on the used >> 'defaultmap' value (e.g. 'alloc') - there are also issues with array >> descriptors. >> >> Note: >> >> Regarding the declare target check for mapping: Without declare >> target, my assumption is that the hidden length variable will >> get implicitly mapped if needed. Independent of deferred-length >> or not, there is probably an issue with 'defaultmap(none)' and >> the hidden variable. - In any case, I prefer to defer all those >> issues to later (by having them captured in one/several PR). >> >> >> Tobias >> >> PS: This patch is a follow up to >> [Patch] Fortran/OpenMP: Fix DT struct-component with 'alloc' and >> array descr >> https://gcc.gnu.org/pipermail/gcc-patches/2022-November/604887.html >> which fixed part of the problems. But as discussed on IRC, it did >> treat 'alloc' >> as special and missed some other map types. - In addition, this patch >> has a >> much extended test coverage and fixes some more issues found that way. ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------Awz9odA0TK80zDB7NaVxU4cF Content-Type: text/x-patch; charset="UTF-8"; name="map-fixes-v3.diff" Content-Disposition: attachment; filename="map-fixes-v3.diff" Content-Transfer-Encoding: base64 Rm9ydHJhbi9PcGVuTVA6IEZpeCBtYXBwaW5nIG9mIGFycmF5IGRlc2NyaXB0b3JzIGFuZCBk ZWZlcnJlZC1sZW5ndGggc3RyaW5ncwoKUHJldmlvdXNseSwgYXJyYXkgZGVzY3JpcHRvcnMg bWlnaHQgaGF2ZSBiZWVuIG1hcHBlZCBhcyAnYWxsb2MnCmluc3RlYWQgb2YgJ3RvJyBmb3Ig J2FsbG9jJywgbm90IHVwZGF0aW5nIHRoZSBhcnJheSBib3VuZHMuIFRoZQonYWxsb2MnIGNv dWxkIGFsc28gYXBwZWFyIGZvciAnZGF0YSBleGl0JywgZmFpbGluZyB3aXRoIGEgbGliZ29t cAphc3NlcnQuIEluIHNvbWUgY2FzZXMsIGVpdGhlciBhcnJheSBkZXNjcmlwdG9ycyBvciBk ZWZlcnJlZC1sZW5ndGgKc3RyaW5nJ3MgbGVuZ3RoIHZhcmlhYmxlIHdhcyBub3QgbWFwcGVk LiBBbmQsIGZpbmFsbHksIHNvbWUgb2Zmc2V0CmNhbGN1bGF0aW9ucyB3aXRoIGFycmF5LXNl Y3Rpb25zIG1hcHBpbmdzIHdlbnQgd3JvbmcuCgpUaGUgdGVzdGNhc2VzIGNvbnRhaW4gc29t ZSBjb21tZW50LW91dCB0ZXN0cyB3aGljaCByZXF1aXJlIGZvbGxvdy11cAp3b3JrIGFuZCBm b3Igd2hpY2ggUFIgZXhpc3QuIFRob3NlIG1vc3RseSByZWxhdGUgdG8gZGVmZXJyZWQtbGVu Z3RoCnN0cmluZ3Mgd2hpY2ggaGF2ZSBzZXZlcmFsIGlzc3VlcyBiZXlvbmcgT3Blbk1QIHN1 cHBvcnQuCgpnY2MvZm9ydHJhbi9DaGFuZ2VMb2c6CgoJKiB0cmFucy1kZWNsLmNjIChnZmNf Z2V0X3N5bWJvbF9kZWNsKTogQWRkIGF0dHJpYnV0ZXMKCXN1Y2ggYXMgJ2RlY2xhcmUgdGFy Z2V0JyBhbHNvIHRvIGhpZGRlbiBhcnRpZmljaWFsCgl2YXJpYWJsZSBmb3IgZGVmZXJyZWQt bGVuZ3RoIGNoYXJhY3RlciB2YXJpYWJsZXMuCgkqIHRyYW5zLW9wZW5tcC5jYyAoZ2ZjX3Ry YW5zX29tcF9hcnJheV9zZWN0aW9uLAoJZ2ZjX3RyYW5zX29tcF9jbGF1c2VzLCBnZmNfdHJh bnNfb21wX3RhcmdldF9leGl0X2RhdGEpOgoJSW1wcm92ZSBtYXBwaW5nIG9mIGFycmF5IGRl c2NyaXB0b3JzIGFuZCBkZWZlcnJlZC1sZW5ndGgKCXN0cmluZyB2YXJpYWJsZXMuCgpnY2Mv Q2hhbmdlTG9nOgoKCSogZ2ltcGxpZnkuY2MgKGdpbXBsaWZ5X3NjYW5fb21wX2NsYXVzZXMp OiBSZW1vdmUgRm9ydHJhbgoJc3BlY2lhbCBjYXNlLgoKbGliZ29tcC9DaGFuZ2VMb2c6CgoJ KiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwOiBV bmNvbW1lbnQKCSd0YXJnZXQgZXhpdCBkYXRhJy4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9y dHJhbi90YXJnZXQtZW50ZXItZGF0YS00LmY5MDogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9s aWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNS5mOTA6IE5ldyB0ZXN0LgoJKiB0 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwOiBOZXcg dGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS03 LmY5MDogTmV3IHRlc3QuCgpnY2MvdGVzdHN1aXRlLwoJKiBnZm9ydHJhbi5kZy9nb2FjYy9m aW5hbGl6ZS0xLmY6IFVwZGF0ZSBkZy10cmVlOyBzaG93cyBhIGZpeAoJZm9yICdmaW5hbGl6 ZScgYXMgYSBwdHIgaXMgbm93ICdkZWxldGUnIGluc3RlYWQgb2YgJ3JlbGVhc2UnLgoJKiBn Zm9ydHJhbi5kZy9nb21wL3ByNzgyNjAtMi5mOTA6IExpa2V3aXNlIGFzIGVsZW0tc2l6ZSBj YWxjIG1vdmVkCgl0byBpZiAoYWxsb2NhdGVkKSBibG9jawoJKiBnZm9ydHJhbi5kZy9nb21w L3RhcmdldC1leGl0LWRhdGEuZjkwOiBMaWtld2lzZSBhcyBhIHZhciBpcyBub3cgYQoJcmVw bGFjZWQgYnkgYSBNRU08IF8yNSA+IGV4cHJlc3Npb24uCgogZ2NjL2ZvcnRyYW4vdHJhbnMt ZGVjbC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZ2NjL2ZvcnRyYW4v dHJhbnMtb3Blbm1wLmNjICAgICAgICAgICAgICAgICAgICAgICAgfCAzMjMgKysrKysrKyst LS0tCiBnY2MvZ2ltcGxpZnkuY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICA0MyArLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9maW5hbGl6ZS0x LmYgICAgICAgfCAgIDQgKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9wcjc4 MjYwLTIuZjkwICAgICAgIHwgICA2ICstCiAuLi4vZ2ZvcnRyYW4uZGcvZ29tcC90YXJnZXQt ZXhpdC1kYXRhLmY5MCAgICAgICAgICB8ICAgNCArLQogLi4uL2xpYmdvbXAuZm9ydHJhbi90 YXJnZXQtZW50ZXItZGF0YS0zLmY5MCAgICAgICAgfCAgIDIgKy0KIC4uLi9saWJnb21wLmZv cnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAgICAgICAgIHwgNTQwICsrKysrKysrKysr KysrKysrKysrKwogLi4uL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5 MCAgICAgICAgfCA1NDAgKysrKysrKysrKysrKysrKysrKysrCiAuLi4vbGliZ29tcC5mb3J0 cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwICAgICAgICB8IDM5MiArKysrKysrKysrKysr KysKIC4uLi9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNy5mOTAgICAgICAg IHwgIDc4ICsrKwogMTEgZmlsZXMgY2hhbmdlZCwgMTc5MiBpbnNlcnRpb25zKCspLCAxNDIg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYyBi L2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKaW5kZXggNDc0OTIwOTY2ZWMuLmMxMmVlZGZm ZjFiIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1kZWNsLmNjCisrKyBiL2djYy9m b3J0cmFuL3RyYW5zLWRlY2wuY2MKQEAgLTE4MjQsNiArMTgyNCw4IEBAIGdmY19nZXRfc3lt Ym9sX2RlY2wgKGdmY19zeW1ib2wgKiBzeW0pCiAgIC8qIEFkZCBhdHRyaWJ1dGVzIHRvIHZh cmlhYmxlcy4gIEZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBlbHNld2hlcmUuICAqLwogICBhdHRy aWJ1dGVzID0gYWRkX2F0dHJpYnV0ZXNfdG9fZGVjbCAoc3ltLT5hdHRyLCBOVUxMX1RSRUUp OwogICBkZWNsX2F0dHJpYnV0ZXMgKCZkZWNsLCBhdHRyaWJ1dGVzLCAwKTsKKyAgaWYgKHN5 bS0+dHMuZGVmZXJyZWQpCisgICAgZGVjbF9hdHRyaWJ1dGVzICgmbGVuZ3RoLCBhdHRyaWJ1 dGVzLCAwKTsKIAogICAvKiBTeW1ib2xzIGZyb20gbW9kdWxlcyBzaG91bGQgaGF2ZSB0aGVp ciBhc3NlbWJsZXIgbmFtZXMgbWFuZ2xlZC4KICAgICAgVGhpcyBpcyBkb25lIGhlcmUgcmF0 aGVyIHRoYW4gaW4gZ2ZjX2ZpbmlzaF92YXJfZGVjbCBiZWNhdXNlIGl0CmRpZmYgLS1naXQg YS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVu bXAuY2MKaW5kZXggMmQxNmYzYmU4ZWEuLjExYzlmNDkxN2Y1IDEwMDY0NAotLS0gYS9nY2Mv Zm9ydHJhbi90cmFucy1vcGVubXAuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjCkBAIC0yNDAzLDMzICsyNDAzLDUwIEBAIHN0YXRpYyB2ZWM8dHJlZSwgdmFfaGVhcCwg dmxfZW1iZWQ+ICpkb2Fjcm9zc19zdGVwczsKIC8qIFRyYW5zbGF0ZSBhbiBhcnJheSBzZWN0 aW9uIG9yIGFycmF5IGVsZW1lbnQuICAqLwogCiBzdGF0aWMgdm9pZAotZ2ZjX3RyYW5zX29t cF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfbmFtZWxpc3Qg Km4sCi0JCQkgICAgIHRyZWUgZGVjbCwgYm9vbCBlbGVtZW50LCBnb21wX21hcF9raW5kIHB0 cl9raW5kLAotCQkJICAgICB0cmVlICZub2RlLCB0cmVlICZub2RlMiwgdHJlZSAmbm9kZTMs IHRyZWUgJm5vZGU0KQorZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tf dCAqYmxvY2ssIGdmY19leGVjX29wIG9wLAorCQkJICAgICBnZmNfb21wX25hbWVsaXN0ICpu LCB0cmVlIGRlY2wsIGJvb2wgZWxlbWVudCwKKwkJCSAgICAgZ29tcF9tYXBfa2luZCBwdHJf a2luZCwgdHJlZSAmbm9kZSwgdHJlZSAmbm9kZTIsCisJCQkgICAgIHRyZWUgJm5vZGUzLCB0 cmVlICZub2RlNCkKIHsKICAgZ2ZjX3NlIHNlOwogICB0cmVlIHB0ciwgcHRyMjsKICAgdHJl ZSBlbGVtc3ogPSBOVUxMX1RSRUU7CiAKICAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7Ci0K ICAgaWYgKGVsZW1lbnQpCiAgICAgewogICAgICAgZ2ZjX2NvbnZfZXhwcl9yZWZlcmVuY2Ug KCZzZSwgbi0+ZXhwcik7CiAgICAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywg JnNlLnByZSk7CiAgICAgICBwdHIgPSBzZS5leHByOwotICAgICAgT01QX0NMQVVTRV9TSVpF IChub2RlKSA9IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAocHRyKSkp OwotICAgICAgZWxlbXN6ID0gT01QX0NMQVVTRV9TSVpFIChub2RlKTsKICAgICB9CiAgIGVs c2UKICAgICB7CiAgICAgICBnZmNfY29udl9leHByX2Rlc2NyaXB0b3IgKCZzZSwgbi0+ZXhw cik7CiAgICAgICBwdHIgPSBnZmNfY29udl9hcnJheV9kYXRhIChzZS5leHByKTsKKyAgICB9 CisgIGlmIChuLT5leHByLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUiAmJiBuLT5leHByLT50 cy5kZWZlcnJlZCkKKyAgICB7CisgICAgICBnY2NfYXNzZXJ0IChzZS5zdHJpbmdfbGVuZ3Ro KTsKKyAgICAgIHRyZWUgbGVuID0gZ2ZjX2V2YWx1YXRlX25vdyAoc2Uuc3RyaW5nX2xlbmd0 aCwgYmxvY2spOworICAgICAgZWxlbXN6ID0gZ2ZjX2dldF9jaGFyX3R5cGUgKG4tPmV4cHIt PnRzLmtpbmQpOworICAgICAgZWxlbXN6ID0gVFlQRV9TSVpFX1VOSVQgKGVsZW1zeik7Cisg ICAgICBlbGVtc3ogPSBmb2xkX2J1aWxkMiAoTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwK KwkJCSAgICBmb2xkX2NvbnZlcnQgKHNpemVfdHlwZV9ub2RlLCBsZW4pLCBlbGVtc3opOwor ICAgIH0KKyAgaWYgKGVsZW1lbnQpCisgICAgeworICAgICAgaWYgKCFlbGVtc3opCisJZWxl bXN6ID0gVFlQRV9TSVpFX1VOSVQgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChwdHIpKSk7Cisg ICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gZWxlbXN6OworICAgIH0KKyAgZWxzZQor ICAgIHsKICAgICAgIHRyZWUgdHlwZSA9IFRSRUVfVFlQRSAoc2UuZXhwcik7CiAgICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrIChibG9jaywgJnNlLnByZSk7CiAgICAgICBPTVBfQ0xB VVNFX1NJWkUgKG5vZGUpID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAoYmxvY2ssIHNlLmV4cHIs CiAJCQkJCQkgICAgR0ZDX1RZUEVfQVJSQVlfUkFOSyAodHlwZSkpOwotICAgICAgZWxlbXN6 ID0gVFlQRV9TSVpFX1VOSVQgKGdmY19nZXRfZWxlbWVudF90eXBlICh0eXBlKSk7CisgICAg ICBpZiAoIWVsZW1zeikKKwllbGVtc3ogPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVt ZW50X3R5cGUgKHR5cGUpKTsKICAgICAgIGVsZW1zeiA9IGZvbGRfY29udmVydCAoZ2ZjX2Fy cmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CiAgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUp ID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCiAJCQkJ CSAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpLCBlbGVtc3opOwpAQCAtMjQ0MSw3ICsyNDU4 LDExIEBAIGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2Nr LCBnZmNfb21wX25hbWVsaXN0ICpuLAogCiAgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9U WVBFIChkZWNsKSkKICAgICAgICYmIEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBF IChUUkVFX1RZUEUgKGRlY2wpKSkKLSAgICAgICYmIHB0cl9raW5kID09IEdPTVBfTUFQX1BP SU5URVIpCisgICAgICAmJiBwdHJfa2luZCA9PSBHT01QX01BUF9QT0lOVEVSCisgICAgICAm JiBvcCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisgICAgICAmJiBPTVBfQ0xBVVNF X01BUF9LSU5EIChub2RlKSAhPSBHT01QX01BUF9SRUxFQVNFCisgICAgICAmJiBPTVBfQ0xB VVNFX01BUF9LSU5EIChub2RlKSAhPSBHT01QX01BUF9ERUxFVEUpCisKICAgICB7CiAgICAg ICBub2RlNCA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAogCQkJCU9NUF9D TEFVU0VfTUFQKTsKQEAgLTI0NTUsMTMgKzI0NzYsMTMgQEAgZ2ZjX3RyYW5zX29tcF9hcnJh eV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfbmFtZWxpc3QgKm4sCiAJ ICAgJiYgbi0+ZXhwci0+dHMuZGVmZXJyZWQpCiAgICAgewogICAgICAgZ29tcF9tYXBfa2lu ZCBtYXBfa2luZDsKLSAgICAgIGlmIChHT01QX01BUF9DT1BZX1RPX1AgKE9NUF9DTEFVU0Vf TUFQX0tJTkQgKG5vZGUpKSkKLQltYXBfa2luZCA9IEdPTVBfTUFQX1RPOwotICAgICAgZWxz ZSBpZiAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSkgPT0gR09NUF9NQVBfUkVMRUFTRQot CSAgICAgICB8fCBPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSA9PSBHT01QX01BUF9ERUxF VEUpCisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSkgPT0gR09NUF9NQVBf REVMRVRFKQogCW1hcF9raW5kID0gT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSk7CisgICAg ICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisJICAgICAgIHx8 IE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdPTVBfTUFQX1JFTEVBU0UpCisJbWFw X2tpbmQgPSBHT01QX01BUF9SRUxFQVNFOwogICAgICAgZWxzZQotCW1hcF9raW5kID0gR09N UF9NQVBfQUxMT0M7CisJbWFwX2tpbmQgPSBHT01QX01BUF9UTzsKICAgICAgIGdjY19hc3Nl cnQgKHNlLnN0cmluZ19sZW5ndGgpOwogICAgICAgbm9kZTQgPSBidWlsZF9vbXBfY2xhdXNl IChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOwogICAgICAgT01QX0NMQVVTRV9T RVRfTUFQX0tJTkQgKG5vZGU0LCBtYXBfa2luZCk7CkBAIC0yNDc2LDcgKzI0OTcsMTggQEAg Z2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19v bXBfbmFtZWxpc3QgKm4sCiAgICAgICBkZXNjX25vZGUgPSBidWlsZF9vbXBfY2xhdXNlIChp bnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOwogICAgICAgT01QX0NMQVVTRV9ERUNM IChkZXNjX25vZGUpID0gZGVjbDsKICAgICAgIE9NUF9DTEFVU0VfU0laRSAoZGVzY19ub2Rl KSA9IFRZUEVfU0laRV9VTklUICh0eXBlKTsKLSAgICAgIGlmIChwdHJfa2luZCA9PSBHT01Q X01BUF9BTFdBWVNfUE9JTlRFUikKKyAgICAgIGlmIChPTVBfQ0xBVVNFX01BUF9LSU5EIChu b2RlKSA9PSBHT01QX01BUF9ERUxFVEUpCisJeworCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJ TkQgKGRlc2Nfbm9kZSwgR09NUF9NQVBfREVMRVRFKTsKKwkgIG5vZGUyID0gZGVzY19ub2Rl OworCX0KKyAgICAgIGVsc2UgaWYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdP TVBfTUFQX1JFTEVBU0UKKwkgICAgICAgfHwgb3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRf REFUQSkKKwl7CisJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoZGVzY19ub2RlLCBHT01Q X01BUF9SRUxFQVNFKTsKKwkgIG5vZGUyID0gZGVzY19ub2RlOworCX0KKyAgICAgIGVsc2Ug aWYgKHB0cl9raW5kID09IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSKQogCXsKIAkgIE9NUF9D TEFVU0VfU0VUX01BUF9LSU5EIChkZXNjX25vZGUsIEdPTVBfTUFQX1RPKTsKIAkgIG5vZGUy ID0gbm9kZTsKQEAgLTI0ODcsMTEgKzI1MTksMTEgQEAgZ2ZjX3RyYW5zX29tcF9hcnJheV9z ZWN0aW9uIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfbmFtZWxpc3QgKm4sCiAJICBP TVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAoZGVzY19ub2RlLCBHT01QX01BUF9UT19QU0VUKTsK IAkgIG5vZGUyID0gZGVzY19ub2RlOwogCX0KLSAgICAgIG5vZGUzID0gYnVpbGRfb21wX2Ns YXVzZSAoaW5wdXRfbG9jYXRpb24sCi0JCQkJT01QX0NMQVVTRV9NQVApOworICAgICAgaWYg KG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEpCisJcmV0dXJuOworICAgICAgbm9k ZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVAp OwogICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBwdHJfa2luZCk7Ci0g ICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUzKQotCT0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9k YXRhX2dldCAoZGVjbCk7CisgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUzKSA9IGdmY19j b252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlY2wpOwogICAgICAgLyogVGhpcyBwdXJwb3Nl bHkgZG9lcyBub3QgaW5jbHVkZSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUi4gIFRoZSBleHRy YQogCSBjYXN0IHByZXZlbnRzIGdpbXBsaWZ5LmNjIGZyb20gcmVjb2duaXNpbmcgaXQgYXMg YmVpbmcgcGFydCBvZiB0aGUKIAkgc3RydWN0IC0gYW5kIGFkZGluZyBhbiAnYWxsb2M6IGZv ciB0aGUgJ2Rlc2MuZGF0YScgcG9pbnRlciwgd2hpY2gKQEAgLTI1OTUsNyArMjYyNyw3IEBA IGhhbmRsZV9pdGVyYXRvciAoZ2ZjX25hbWVzcGFjZSAqbnMsIHN0bXRibG9ja190ICppdGVy X2Jsb2NrLCB0cmVlIGJsb2NrKQogc3RhdGljIHRyZWUKIGdmY190cmFuc19vbXBfY2xhdXNl cyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAg ICAgICBsb2N1cyB3aGVyZSwgYm9vbCBkZWNsYXJlX3NpbWQgPSBmYWxzZSwKLQkJICAgICAg IGJvb2wgb3BlbmFjYyA9IGZhbHNlKQorCQkgICAgICAgYm9vbCBvcGVuYWNjID0gZmFsc2Us IGdmY19leGVjX29wIG9wID0gRVhFQ19OT1ApCiB7CiAgIHRyZWUgb21wX2NsYXVzZXMgPSBO VUxMX1RSRUUsIHByZXZfY2xhdXNlcywgY2h1bmtfc2l6ZSwgYzsKICAgdHJlZSBpdGVyYXRv ciA9IE5VTExfVFJFRTsKQEAgLTMwMjYsNiArMzA1OCw3IEBAIGdmY190cmFuc19vbXBfY2xh dXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJ ICAgICAgdHJlZSBub2RlMiA9IE5VTExfVFJFRTsKIAkgICAgICB0cmVlIG5vZGUzID0gTlVM TF9UUkVFOwogCSAgICAgIHRyZWUgbm9kZTQgPSBOVUxMX1RSRUU7CisJICAgICAgdHJlZSBu b2RlNSA9IE5VTExfVFJFRTsKIAogCSAgICAgIC8qIE9wZW5NUDogYXV0b21hdGljYWxseSBt YXAgcG9pbnRlciB0YXJnZXRzIHdpdGggdGhlIHBvaW50ZXI7CiAJCSBoZW5jZSwgYWx3YXlz IHVwZGF0ZSB0aGUgZGVzY3JpcHRvci9wb2ludGVyIGl0c2VsZi4gICovCkBAIC0zMTMwLDYg KzMxNjMsMjQgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ss IGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICB8fCAobi0+ZXhwci0+cmVmLT50eXBl ID09IFJFRl9BUlJBWQogCQkgICAgICAmJiBuLT5leHByLT5yZWYtPnUuYXIudHlwZSA9PSBB Ul9GVUxMKSkKIAkJeworCQkgIGdvbXBfbWFwX2tpbmQgbWFwX2tpbmQ7CisJCSAgdHJlZSB0 eXBlID0gVFJFRV9UWVBFIChkZWNsKTsKKwkJICBpZiAobi0+c3ltLT50cy50eXBlID09IEJU X0NIQVJBQ1RFUgorCQkgICAgICAmJiBuLT5zeW0tPnRzLmRlZmVycmVkCisJCSAgICAgICYm IG4tPnN5bS0+YXR0ci5vbXBfZGVjbGFyZV90YXJnZXQKKwkJICAgICAgJiYgKGFsd2F5c19t b2RpZmllciB8fCBuLT5zeW0tPmF0dHIucG9pbnRlcikKKwkJICAgICAgJiYgb3AgIT0gRVhF Q19PTVBfVEFSR0VUX0VYSVRfREFUQQorCQkgICAgICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBf TUFQX0RFTEVURQorCQkgICAgICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX1JFTEVBU0Up CisJCSAgICB7CisJCSAgICAgIGdjY19hc3NlcnQgKG4tPnN5bS0+dHMudS5jbC0+YmFja2Vu ZF9kZWNsKTsKKwkJICAgICAgbm9kZTUgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2Nh dGlvbiwgT01QX0NMQVVTRV9NQVApOworCQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lO RCAobm9kZTUsIEdPTVBfTUFQX0FMV0FZU19UTyk7CisJCSAgICAgIE9NUF9DTEFVU0VfREVD TCAobm9kZTUpID0gbi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisJCSAgICAgIE9N UF9DTEFVU0VfU0laRSAobm9kZTUpCisJCQk9IFRZUEVfU0laRV9VTklUIChnZmNfY2hhcmxl bl90eXBlX25vZGUpOworCQkgICAgfQorCiAJCSAgdHJlZSBwcmVzZW50ID0gZ2ZjX29tcF9j aGVja19vcHRpb25hbF9hcmd1bWVudCAoZGVjbCwgdHJ1ZSk7CiAJCSAgaWYgKG9wZW5hY2Mg JiYgbi0+c3ltLT50cy50eXBlID09IEJUX0NMQVNTKQogCQkgICAgewpAQCAtMzE0NSwxMyAr MzE5NiwxMiBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5v ZGUyKSA9IHNpemVfaW50ICgwKTsKIAkJICAgICAgZ290byBmaW5hbGl6ZV9tYXBfY2xhdXNl OwogCQkgICAgfQotCQkgIGVsc2UgaWYgKFBPSU5URVJfVFlQRV9QIChUUkVFX1RZUEUgKGRl Y2wpKQorCQkgIGVsc2UgaWYgKFBPSU5URVJfVFlQRV9QICh0eXBlKQogCQkJICAgJiYgKGdm Y19vbXBfcHJpdmF0aXplX2J5X3JlZmVyZW5jZSAoZGVjbCkKIAkJCSAgICAgICB8fCBHRkNf REVDTF9HRVRfU0NBTEFSX1BPSU5URVIgKGRlY2wpCiAJCQkgICAgICAgfHwgR0ZDX0RFQ0xf R0VUX1NDQUxBUl9BTExPQ0FUQUJMRSAoZGVjbCkKIAkJCSAgICAgICB8fCBHRkNfREVDTF9D UkFZX1BPSU5URUUgKGRlY2wpCi0JCQkgICAgICAgfHwgR0ZDX0RFU0NSSVBUT1JfVFlQRV9Q Ci0JCQkJCSAgICAgKFRSRUVfVFlQRSAoVFJFRV9UWVBFIChkZWNsKSkpCisJCQkgICAgICAg fHwgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKHR5cGUpKQogCQkJICAgICAg IHx8IG4tPnN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEKSkKIAkJICAgIHsKIAkJICAgICAg dHJlZSBvcmlnX2RlY2wgPSBkZWNsOwpAQCAtMzE2Miw3ICszMjEyLDcgQEAgZ2ZjX3RyYW5z X29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xh dXNlcywKIAkJCSB0byBhdm9pZCBhY2Nlc3NpbmcgdW5kZWZpbmVkIHZhcmlhYmxlcy4gIFdl IGNhbm5vdCB1c2UKIAkJCSBhIHRlbXBvcmFyeSB2YXJpYWJsZSBoZXJlIGFzIG90aGVyd2lz ZSB0aGUgcmVwbGFjZW1lbnQKIAkJCSBvZiB0aGUgdmFyaWFibGVzIGluIG9tcC1sb3cuY2Mg d2lsbCBub3Qgd29yay4gICovCi0JCSAgICAgIGlmIChwcmVzZW50ICYmIEdGQ19BUlJBWV9U WVBFX1AgKFRSRUVfVFlQRSAoZGVjbCkpKQorCQkgICAgICBpZiAocHJlc2VudCAmJiBHRkNf QVJSQVlfVFlQRV9QICh0eXBlKSkKIAkJCXsKIAkJCSAgdHJlZSB0bXAgPSBmb2xkX2J1aWxk Ml9sb2MgKGlucHV0X2xvY2F0aW9uLAogCQkJCQkJICAgICAgTU9ESUZZX0VYUFIsCkBAIC0z MTc5LDIyICszMjI5LDMyIEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3Qg KmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkJCQkJICAgICBjb25kLCB0 bXAsCiAJCQkJCQkJICAgICBOVUxMX1RSRUUpKTsKIAkJCX0KLQkJICAgICAgbm9kZTQgPSBi dWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKLQkJCQkJCU9NUF9DTEFVU0VfTUFQ KTsKLQkJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGU0LCBHT01QX01BUF9Q T0lOVEVSKTsKLQkJICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlNCkgPSBkZWNsOwotCQkg ICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGU0KSA9IHNpemVfaW50ICgwKTsKKwkJICAgICAg aWYgKG9wICE9IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEKKwkJCSAgJiYgbi0+dS5tYXBf b3AgIT0gT01QX01BUF9SRUxFQVNFCisJCQkgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBf REVMRVRFKQorCQkJeworCQkJICBub2RlNCA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xv Y2F0aW9uLAorCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsKKwkJCSAgT01QX0NMQVVTRV9T RVRfTUFQX0tJTkQgKG5vZGU0LCBHT01QX01BUF9QT0lOVEVSKTsKKwkJCSAgT01QX0NMQVVT RV9ERUNMIChub2RlNCkgPSBkZWNsOworCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGU0KSA9 IHNpemVfaW50ICgwKTsKKwkJCX0KIAkJICAgICAgZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJl Y3RfcmVmIChkZWNsKTsKIAkJICAgICAgaWYgKChUUkVFX0NPREUgKFRSRUVfVFlQRSAob3Jp Z19kZWNsKSkgPT0gUkVGRVJFTkNFX1RZUEUKIAkJCSAgIHx8IGdmY19vbXBfaXNfb3B0aW9u YWxfYXJndW1lbnQgKG9yaWdfZGVjbCkpCiAJCQkgICYmIChHRkNfREVDTF9HRVRfU0NBTEFS X1BPSU5URVIgKG9yaWdfZGVjbCkKIAkJCSAgICAgIHx8IEdGQ19ERUNMX0dFVF9TQ0FMQVJf QUxMT0NBVEFCTEUgKG9yaWdfZGVjbCkpKQogCQkJewotCQkJICBub2RlMyA9IGJ1aWxkX29t cF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAotCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQKTsK LQkJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9QT0lOVEVS KTsKLQkJCSAgT01QX0NMQVVTRV9ERUNMIChub2RlMykgPSBkZWNsOwotCQkJICBPTVBfQ0xB VVNFX1NJWkUgKG5vZGUzKSA9IHNpemVfaW50ICgwKTsKKwkJCSAgaWYgKG9wICE9IEVYRUNf T01QX1RBUkdFVF9FWElUX0RBVEEKKwkJCSAgICAgICYmIG4tPnUubWFwX29wICE9IE9NUF9N QVBfUkVMRUFTRQorCQkJICAgICAgJiYgbi0+dS5tYXBfb3AgIT0gT01QX01BUF9ERUxFVEUp CisJCQkgICAgeworCQkJICAgICAgbm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9s b2NhdGlvbiwKKwkJCQkJCQlPTVBfQ0xBVVNFX01BUCk7CisJCQkgICAgICBPTVBfQ0xBVVNF X1NFVF9NQVBfS0lORCAobm9kZTMsIEdPTVBfTUFQX1BPSU5URVIpOworCQkJICAgICAgT01Q X0NMQVVTRV9ERUNMIChub2RlMykgPSBkZWNsOworCQkJICAgICAgT01QX0NMQVVTRV9TSVpF IChub2RlMykgPSBzaXplX2ludCAoMCk7CisJCQkgICAgfQogCQkJICBkZWNsID0gYnVpbGRf Zm9sZF9pbmRpcmVjdF9yZWYgKGRlY2wpOwogCQkJfQogCQkgICAgfQpAQCAtMzIwOCw1NiAr MzI2OCw3MCBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgICBnY2NfYXNzZXJ0IChQT0lOVEVS X1RZUEVfUCAoVFJFRV9UWVBFIChwdHIpKSk7CiAJCSAgICAgIHB0ciA9IGJ1aWxkX2ZvbGRf aW5kaXJlY3RfcmVmIChwdHIpOwogCQkgICAgICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUpID0g cHRyOwotCQkgICAgICBub2RlMiA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9u LAotCQkJCQkJT01QX0NMQVVTRV9NQVApOwotCQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBf S0lORCAobm9kZTIsIEdPTVBfTUFQX1RPX1BTRVQpOworCQkgICAgICBub2RlMiA9IGJ1aWxk X29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLCBPTVBfQ0xBVVNFX01BUCk7CiAJCSAgICAg IE9NUF9DTEFVU0VfREVDTCAobm9kZTIpID0gZGVjbDsKIAkJICAgICAgT01QX0NMQVVTRV9T SVpFIChub2RlMikgPSBUWVBFX1NJWkVfVU5JVCAodHlwZSk7Ci0JCSAgICAgIG5vZGUzID0g YnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCi0JCQkJCQlPTVBfQ0xBVVNFX01B UCk7Ci0JCSAgICAgIGlmIChwcmVzZW50KQotCQkJewotCQkJICBwdHIgPSBnZmNfY29udl9k ZXNjcmlwdG9yX2RhdGFfZ2V0IChkZWNsKTsKLQkJCSAgcHRyID0gZ2ZjX2J1aWxkX2FkZHJf ZXhwciAoTlVMTCwgcHRyKTsKLQkJCSAgcHRyID0gZ2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4 cHIgKGJsb2NrLCBwcmVzZW50LCBwdHIsCi0JCQkJCQkJICAgIG51bGxfcG9pbnRlcl9ub2Rl KTsKLQkJCSAgcHRyID0gYnVpbGRfZm9sZF9pbmRpcmVjdF9yZWYgKHB0cik7Ci0JCQkgIE9N UF9DTEFVU0VfREVDTCAobm9kZTMpID0gcHRyOwotCQkJfQorCQkgICAgICBpZiAobi0+dS5t YXBfb3AgPT0gT01QX01BUF9ERUxFVEUpCisJCQltYXBfa2luZCA9IEdPTVBfTUFQX0RFTEVU RTsKKwkJICAgICAgZWxzZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQor CQkJICAgICAgIHx8IG4tPnUubWFwX29wID09IE9NUF9NQVBfUkVMRUFTRSkKKwkJCW1hcF9r aW5kID0gR09NUF9NQVBfUkVMRUFTRTsKIAkJICAgICAgZWxzZQotCQkJT01QX0NMQVVTRV9E RUNMIChub2RlMykKLQkJCSAgPSBnZmNfY29udl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkZWNs KTsKLQkJICAgICAgT01QX0NMQVVTRV9TSVpFIChub2RlMykgPSBzaXplX2ludCAoMCk7Ci0J CSAgICAgIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0FUVEFDSCkKLQkJCXsKLQkJCSAg LyogU3RhbmRhbG9uZSBhdHRhY2ggY2xhdXNlcyB1c2VkIHdpdGggYXJyYXlzIHdpdGgKLQkJ CSAgICAgZGVzY3JpcHRvcnMgbXVzdCBjb3B5IHRoZSBkZXNjcmlwdG9yIHRvIHRoZSB0YXJn ZXQsCi0JCQkgICAgIGVsc2UgdGhleSB3b24ndCBoYXZlIGFueXRoaW5nIHRvIHBlcmZvcm0g dGhlCi0JCQkgICAgIGF0dGFjaG1lbnQgb250byAoc2VlIE9wZW5BQ0MgMi42LCAiMi42LjMu IERhdGEKLQkJCSAgICAgU3RydWN0dXJlcyB3aXRoIFBvaW50ZXJzIikuICAqLwotCQkJICBP TVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsIEdPTVBfTUFQX0FUVEFDSCk7Ci0JCQkg IC8qIFdlIGRvbid0IHdhbnQgdG8gbWFwIFBUUiBhdCBhbGwgaW4gdGhpcyBjYXNlLCBzbwot CQkJICAgICBkZWxldGUgaXRzIG5vZGUgYW5kIHNodWZmbGUgdGhlIG90aGVycyBkb3duLiAg Ki8KLQkJCSAgbm9kZSA9IG5vZGUyOwotCQkJICBub2RlMiA9IG5vZGUzOwotCQkJICBub2Rl MyA9IE5VTEw7Ci0JCQkgIGdvdG8gZmluYWxpemVfbWFwX2NsYXVzZTsKLQkJCX0KLQkJICAg ICAgZWxzZSBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERVRBQ0gpCisJCQltYXBfa2lu ZCA9IEdPTVBfTUFQX1RPX1BTRVQ7CisJCSAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5E IChub2RlMiwgbWFwX2tpbmQpOworCisJCSAgICAgIGlmIChvcCAhPSBFWEVDX09NUF9UQVJH RVRfRVhJVF9EQVRBCisJCQkgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBfREVMRVRFCisJ CQkgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBfUkVMRUFTRSkKIAkJCXsKLQkJCSAgT01Q X0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9ERVRBQ0gpOwotCQkJICAv KiBTaW1pbGFybHkgdG8gYWJvdmUsIHdlIGRvbid0IHdhbnQgdG8gdW5tYXAgUFRSCi0JCQkg ICAgIGhlcmUuICAqLwotCQkJICBub2RlID0gbm9kZTI7Ci0JCQkgIG5vZGUyID0gbm9kZTM7 Ci0JCQkgIG5vZGUzID0gTlVMTDsKLQkJCSAgZ290byBmaW5hbGl6ZV9tYXBfY2xhdXNlOwor CQkJICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkJ ICAgIE9NUF9DTEFVU0VfTUFQKTsKKwkJCSAgaWYgKHByZXNlbnQpCisJCQkgICAgeworCQkJ ICAgICAgcHRyID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7CisJCQkg ICAgICBwdHIgPSBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMLCBwdHIpOworCQkJICAgICAg cHRyID0gZ2ZjX2J1aWxkX2NvbmRfYXNzaWduX2V4cHIgKAorCQkJCSAgICAgIGJsb2NrLCBw cmVzZW50LCBwdHIsIG51bGxfcG9pbnRlcl9ub2RlKTsKKwkJCSAgICAgIHB0ciA9IGJ1aWxk X2ZvbGRfaW5kaXJlY3RfcmVmIChwdHIpOworCQkJICAgICAgT01QX0NMQVVTRV9ERUNMIChu b2RlMykgPSBwdHI7CisJCQkgICAgfQorCQkJICBlbHNlCisJCQkgICAgT01QX0NMQVVTRV9E RUNMIChub2RlMykKKwkJCSAgICAgID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAo ZGVjbCk7CisJCQkgIE9NUF9DTEFVU0VfU0laRSAobm9kZTMpID0gc2l6ZV9pbnQgKDApOwor CisJCQkgIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0FUVEFDSCkKKwkJCSAgICB7CisJ CQkgICAgICAvKiBTdGFuZGFsb25lIGF0dGFjaCBjbGF1c2VzIHVzZWQgd2l0aCBhcnJheXMg d2l0aAorCQkJCSBkZXNjcmlwdG9ycyBtdXN0IGNvcHkgdGhlIGRlc2NyaXB0b3IgdG8gdGhl CisJCQkJIHRhcmdldCwgZWxzZSB0aGV5IHdvbid0IGhhdmUgYW55dGhpbmcgdG8KKwkJCQkg cGVyZm9ybSB0aGUgYXR0YWNobWVudCBvbnRvIChzZWUgT3BlbkFDQyAyLjYsCisJCQkJICIy LjYuMy4gRGF0YSBTdHJ1Y3R1cmVzIHdpdGggUG9pbnRlcnMiKS4gICovCisJCQkgICAgICBP TVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsIEdPTVBfTUFQX0FUVEFDSCk7CisJCQkg ICAgICAvKiBXZSBkb24ndCB3YW50IHRvIG1hcCBQVFIgYXQgYWxsIGluIHRoaXMgY2FzZSwK KwkJCQkgc28gZGVsZXRlIGl0cyBub2RlIGFuZCBzaHVmZmxlIHRoZSBvdGhlcnMKKwkJCQkg ZG93bi4gICovCisJCQkgICAgICBub2RlID0gbm9kZTI7CisJCQkgICAgICBub2RlMiA9IG5v ZGUzOworCQkJICAgICAgbm9kZTMgPSBOVUxMOworCQkJICAgICAgZ290byBmaW5hbGl6ZV9t YXBfY2xhdXNlOworCQkJICAgIH0KKwkJCSAgZWxzZSBpZiAobi0+dS5tYXBfb3AgPT0gT01Q X01BUF9ERVRBQ0gpCisJCQkgICAgeworCQkJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJ TkQgKG5vZGUzLCBHT01QX01BUF9ERVRBQ0gpOworCQkJICAgICAgLyogU2ltaWxhcmx5IHRv IGFib3ZlLCB3ZSBkb24ndCB3YW50IHRvIHVubWFwIFBUUgorCQkJCSBoZXJlLiAgKi8KKwkJ CSAgICAgIG5vZGUgPSBub2RlMjsKKwkJCSAgICAgIG5vZGUyID0gbm9kZTM7CisJCQkgICAg ICBub2RlMyA9IE5VTEw7CisJCQkgICAgICBnb3RvIGZpbmFsaXplX21hcF9jbGF1c2U7CisJ CQkgICAgfQorCQkJICBlbHNlCisJCQkgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5v ZGUzLAorCQkJCQkJICAgICBhbHdheXNfbW9kaWZpZXIKKwkJCQkJCSAgICAgPyBHT01QX01B UF9BTFdBWVNfUE9JTlRFUgorCQkJCQkJICAgICA6IEdPTVBfTUFQX1BPSU5URVIpOwogCQkJ fQotCQkgICAgICBlbHNlCi0JCQlPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsCi0J CQkJCQkgYWx3YXlzX21vZGlmaWVyCi0JCQkJCQkgPyBHT01QX01BUF9BTFdBWVNfUE9JTlRF UgotCQkJCQkJIDogR09NUF9NQVBfUE9JTlRFUik7CiAKIAkJICAgICAgLyogV2UgaGF2ZSB0 byBjaGVjayBmb3Igbi0+c3ltLT5hdHRyLmRpbWVuc2lvbiBiZWNhdXNlCiAJCQkgb2Ygc2Nh bGFyIGNvYXJyYXlzLiAgKi8KQEAgLTMyNzMsNiArMzM0NywyMyBAQCBnZmNfdHJhbnNfb21w X2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2Vz LAogCQkJICB0ZW0KIAkJCSAgICA9IGdmY19mdWxsX2FycmF5X3NpemUgKCZjb25kX2Jsb2Nr LCBkZWNsLAogCQkJCQkJICAgR0ZDX1RZUEVfQVJSQVlfUkFOSyAodHlwZSkpOworCQkJICB0 cmVlIGVsZW1zejsKKwkJCSAgaWYgKG4tPnN5bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIK KwkJCSAgICAgICYmIG4tPnN5bS0+dHMuZGVmZXJyZWQpCisJCQkgICAgeworCQkJICAgICAg dHJlZSBsZW4gPSBuLT5zeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbDsKKwkJCSAgICAgIGxl biA9IGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsIGxlbik7CisJCQkgICAgICBlbGVt c3ogPSBnZmNfZ2V0X2NoYXJfdHlwZSAobi0+c3ltLT50cy5raW5kKTsKKwkJCSAgICAgIGVs ZW1zeiA9IFRZUEVfU0laRV9VTklUIChlbGVtc3opOworCQkJICAgICAgZWxlbXN6ID0gZm9s ZF9idWlsZDIgKE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJCQkJCQkgICAgbGVuLCBl bGVtc3opOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIGVsZW1zegorCQkJICAgICAg PSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsKKwkJCSAg ZWxlbXN6ID0gZm9sZF9jb252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgZWxlbXN6KTsK KwkJCSAgdGVtID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5 cGUsCisJCQkJCSAgICAgdGVtLCBlbGVtc3opOwogCQkJICBnZmNfYWRkX21vZGlmeSAoJmNv bmRfYmxvY2ssIHNpemUsIHRlbSk7CiAJCQkgIHRoZW5fYiA9IGdmY19maW5pc2hfYmxvY2sg KCZjb25kX2Jsb2NrKTsKIAkJCSAgZ2ZjX2luaXRfYmxvY2sgKCZjb25kX2Jsb2NrKTsKQEAg LTMzMDMsNiArMzM5NCwxMiBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190 ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJICBnZmNfaW5pdF9ibG9j ayAoJmNvbmRfYmxvY2spOwogCQkJICB0cmVlIHNpemUgPSBnZmNfZnVsbF9hcnJheV9zaXpl ICgmY29uZF9ibG9jaywgZGVjbCwKIAkJCQkJR0ZDX1RZUEVfQVJSQVlfUkFOSyAodHlwZSkp OworCQkJICB0cmVlIGVsZW1zegorCQkJICAgID0gVFlQRV9TSVpFX1VOSVQgKGdmY19nZXRf ZWxlbWVudF90eXBlICh0eXBlKSk7CisJCQkgIGVsZW1zeiA9IGZvbGRfY29udmVydCAoZ2Zj X2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CisJCQkgIHNpemUgPSBmb2xkX2J1aWxkMiAo TVVMVF9FWFBSLCBnZmNfYXJyYXlfaW5kZXhfdHlwZSwKKwkJCQkJICAgICAgc2l6ZSwgZWxl bXN6KTsKKwkJCSAgc2l6ZSA9IGdmY19ldmFsdWF0ZV9ub3cgKHNpemUsICZjb25kX2Jsb2Nr KTsKIAkJCSAgaWYgKHByZXNlbnQpCiAJCQkgICAgewogCQkJICAgICAgdHJlZSB2YXIgPSBn ZmNfY3JlYXRlX3ZhciAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsCkBAIC0zMzIxLDE1ICszNDE4 LDYgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19v bXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgICAgIE9NUF9DTEFVU0VfU0laRSAobm9kZSkg PSBzaXplOwogCQkJICAgIH0KIAkJCX0KLQkJICAgICAgaWYgKG4tPnN5bS0+YXR0ci5kaW1l bnNpb24pCi0JCQl7Ci0JCQkgIHRyZWUgZWxlbXN6Ci0JCQkgICAgPSBUWVBFX1NJWkVfVU5J VCAoZ2ZjX2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsKLQkJCSAgZWxlbXN6ID0gZm9sZF9j b252ZXJ0IChnZmNfYXJyYXlfaW5kZXhfdHlwZSwgZWxlbXN6KTsKLQkJCSAgT01QX0NMQVVT RV9TSVpFIChub2RlKQotCQkJICAgID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgZ2ZjX2Fy cmF5X2luZGV4X3R5cGUsCi0JCQkJCSAgIE9NUF9DTEFVU0VfU0laRSAobm9kZSksIGVsZW1z eik7Ci0JCQl9CiAJCSAgICB9CiAJCSAgZWxzZSBpZiAocHJlc2VudAogCQkJICAgJiYgVFJF RV9DT0RFIChkZWNsKSA9PSBJTkRJUkVDVF9SRUYKQEAgLTMzNDUsNiArMzQzMywzNyBAQCBn ZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1 c2VzICpjbGF1c2VzLAogCQkgICAgfQogCQkgIGVsc2UKIAkJICAgIE9NUF9DTEFVU0VfREVD TCAobm9kZSkgPSBkZWNsOworCisJCSAgaWYgKCFuLT5zeW0tPmF0dHIuZGltZW5zaW9uCisJ CSAgICAgICYmIG4tPnN5bS0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIKKwkJICAgICAgJiYg bi0+c3ltLT50cy5kZWZlcnJlZCkKKwkJICAgIHsKKwkJICAgICAgaWYgKCFERUNMX1AgKGRl Y2wpKQorCQkJeworCQkJICBnY2NfYXNzZXJ0IChUUkVFX0NPREUgKGRlY2wpID09IElORElS RUNUX1JFRik7CisJCQkgIGRlY2wgPSBUUkVFX09QRVJBTkQgKGRlY2wsIDApOworCQkJfQor CQkgICAgICB0cmVlIGNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBO RV9FWFBSLAorCQkJCQkJICAgYm9vbGVhbl90eXBlX25vZGUsCisJCQkJCQkgICBkZWNsLCBu dWxsX3BvaW50ZXJfbm9kZSk7CisJCSAgICAgIGlmIChwcmVzZW50KQorCQkJY29uZCA9IGZv bGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sCisJCQkJCQlUUlVUSF9BTkRJRl9FWFBS LAorCQkJCQkJYm9vbGVhbl90eXBlX25vZGUsCisJCQkJCQlwcmVzZW50LCBjb25kKTsKKwkJ ICAgICAgdHJlZSBsZW4gPSBuLT5zeW0tPnRzLnUuY2wtPmJhY2tlbmRfZGVjbDsKKwkJICAg ICAgbGVuID0gZm9sZF9jb252ZXJ0IChzaXplX3R5cGVfbm9kZSwgbGVuKTsKKwkJICAgICAg dHJlZSBzaXplID0gZ2ZjX2dldF9jaGFyX3R5cGUgKG4tPnN5bS0+dHMua2luZCk7CisJCSAg ICAgIHNpemUgPSBUWVBFX1NJWkVfVU5JVCAoc2l6ZSk7CisJCSAgICAgIHNpemUgPSBmb2xk X2J1aWxkMiAoTVVMVF9FWFBSLCBzaXplX3R5cGVfbm9kZSwgbGVuLCBzaXplKTsKKwkJICAg ICAgc2l6ZSA9IGJ1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkJCSBDT05EX0VY UFIsCisJCQkJCQkJIHNpemVfdHlwZV9ub2RlLAorCQkJCQkJCSBjb25kLCBzaXplLAorCQkJ CQkJCSBzaXplX3plcm9fbm9kZSk7CisJCSAgICAgIHNpemUgPSBnZmNfZXZhbHVhdGVfbm93 IChzaXplLCBibG9jayk7CisJCSAgICAgIE9NUF9DTEFVU0VfU0laRSAobm9kZSkgPSBzaXpl OworCQkgICAgfQogCQl9CiAJICAgICAgZWxzZSBpZiAobi0+ZXhwcgogCQkgICAgICAgJiYg bi0+ZXhwci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUKQEAgLTMzNjEsNyArMzQ4MCw3 IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21w X2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICAgICYmICEoUE9JTlRFUl9UWVBFX1AgKHR5cGUp CiAJCQkgICAmJiBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAodHlwZSkpKSkK IAkJICAgIGsgPSBHT01QX01BUF9GSVJTVFBSSVZBVEVfUE9JTlRFUjsKLQkJICBnZmNfdHJh bnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBuLCBkZWNsLCBlbGVtZW50LCBrLAorCQkg IGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoYmxvY2ssIG9wLCBuLCBkZWNsLCBlbGVt ZW50LCBrLAogCQkJCQkgICAgICAgbm9kZSwgbm9kZTIsIG5vZGUzLCBub2RlNCk7CiAJCX0K IAkgICAgICBlbHNlIGlmIChuLT5leHByCkBAIC0zNDA5LDkgKzM1MjgsMTUgQEAgZ2ZjX3Ry YW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAq Y2xhdXNlcywKIAkJCQkJICAgZm9sZF9jb252ZXJ0IChzaXplX3R5cGVfbm9kZSwKIAkJCQkJ ICAgICAgIHNlLnN0cmluZ19sZW5ndGgpLAogCQkJCQkgICBUWVBFX1NJWkVfVU5JVCAodG1w KSk7CisJCQkgIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFTEVURSkKKwkJCSAgICBr aW5kID0gR09NUF9NQVBfREVMRVRFOworCQkJICBlbHNlIGlmIChvcCA9PSBFWEVDX09NUF9U QVJHRVRfRVhJVF9EQVRBKQorCQkJICAgIGtpbmQgPSBHT01QX01BUF9SRUxFQVNFOworCQkJ ICBlbHNlCisJCQkgICAga2luZCA9IEdPTVBfTUFQX1RPOwogCQkJICBub2RlMyA9IGJ1aWxk X29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAogCQkJCQkJICAgIE9NUF9DTEFVU0VfTUFQ KTsKLQkJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9UTyk7 CisJCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywga2luZCk7CiAJCQkgIE9N UF9DTEFVU0VfREVDTCAobm9kZTMpID0gc2Uuc3RyaW5nX2xlbmd0aDsKIAkJCSAgT01QX0NM QVVTRV9TSVpFIChub2RlMykKIAkJCSAgICA9IFRZUEVfU0laRV9VTklUIChnZmNfY2hhcmxl bl90eXBlX25vZGUpOwpAQCAtMzUxNSwxMSArMzY0MCwxNyBAQCBnZmNfdHJhbnNfb21wX2Ns YXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAog CQkJICAgID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAoYmxvY2ssIGlubmVyLCByYW5rKTsKIAkJ CSAgdHJlZSBlbGVtc3oKIAkJCSAgICA9IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1l bnRfdHlwZSAodHlwZSkpOwotCQkJICBpZiAoR09NUF9NQVBfQ09QWV9UT19QIChPTVBfQ0xB VVNFX01BUF9LSU5EIChub2RlKSkpCi0JCQkgICAgbWFwX2tpbmQgPSBHT01QX01BUF9UTzsK KwkJCSAgbWFwX2tpbmQgPSBPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKTsKKwkJCSAgaWYg KEdPTVBfTUFQX0NPUFlfVE9fUCAobWFwX2tpbmQpCisJCQkgICAgICB8fCBtYXBfa2luZCA9 PSBHT01QX01BUF9BTExPQykKKwkJCSAgICBtYXBfa2luZCA9ICgoR09NUF9NQVBfQUxXQVlT X1AgKG1hcF9raW5kKQorCQkJCQkgfHwgZ2ZjX2V4cHJfYXR0ciAobi0+ZXhwcikucG9pbnRl cikKKwkJCQkJPyBHT01QX01BUF9BTFdBWVNfVE8gOiBHT01QX01BUF9UTyk7CiAJCQkgIGVs c2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfUkVMRUFTRQogCQkJCSAgIHx8IG4tPnUu bWFwX29wID09IE9NUF9NQVBfREVMRVRFKQotCQkJICAgIG1hcF9raW5kID0gT01QX0NMQVVT RV9NQVBfS0lORCAobm9kZSk7CisJCQkgICAgOworCQkJICBlbHNlIGlmIChvcCA9PSBFWEVD X09NUF9UQVJHRVRfRVhJVF9EQVRBKQorCQkJICAgIG1hcF9raW5kID0gR09NUF9NQVBfUkVM RUFTRTsKIAkJCSAgZWxzZQogCQkJICAgIG1hcF9raW5kID0gR09NUF9NQVBfQUxMT0M7CiAJ CQkgIGlmICghb3BlbmFjYwpAQCAtMzU2MCw2ICszNjkxLDggQEAgZ2ZjX3RyYW5zX29tcF9j bGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywK IAkJCSAgICAgIG5vZGUyID0gbm9kZTsKIAkJCSAgICAgIG5vZGUgPSBkZXNjX25vZGU7ICAv KiBQdXQgZmlyc3QuICAqLwogCQkJICAgIH0KKwkJCSAgaWYgKG9wID09IEVYRUNfT01QX1RB UkdFVF9FWElUX0RBVEEpCisJCQkgICAgZ290byBmaW5hbGl6ZV9tYXBfY2xhdXNlOwogCQkJ ICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAogCQkJCQkJICAg IE9NUF9DTEFVU0VfTUFQKTsKIAkJCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUz LApAQCAtMzU5MCw3ICszNzIzLDcgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10Ymxv Y2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICAgICAgYm9vbCBl bGVtZW50ID0gbGFzdHJlZi0+dS5hci50eXBlID09IEFSX0VMRU1FTlQ7CiAJCSAgICAgIGdv bXBfbWFwX2tpbmQga2luZCA9IChvcGVuYWNjID8gR09NUF9NQVBfQVRUQUNIX0RFVEFDSAog CQkJCQkJICAgIDogR09NUF9NQVBfQUxXQVlTX1BPSU5URVIpOwotCQkgICAgICBnZmNfdHJh bnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBuLCBpbm5lciwgZWxlbWVudCwKKwkJICAg ICAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChibG9jaywgb3AsIG4sIGlubmVyLCBl bGVtZW50LAogCQkJCQkJICAga2luZCwgbm9kZSwgbm9kZTIsIG5vZGUzLAogCQkJCQkJICAg bm9kZTQpOwogCQkgICAgfQpAQCAtMzYwOSw2ICszNzQyLDggQEAgZ2ZjX3RyYW5zX29tcF9j bGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywK IAkJb21wX2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZTMsIG9tcF9jbGF1 c2VzKTsKIAkgICAgICBpZiAobm9kZTQpCiAJCW9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2Fk ZF9jbGF1c2UgKG5vZGU0LCBvbXBfY2xhdXNlcyk7CisJICAgICAgaWYgKG5vZGU1KQorCQlv bXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRfY2xhdXNlIChub2RlNSwgb21wX2NsYXVzZXMp OwogCSAgICB9CiAJICBicmVhazsKIAljYXNlIE9NUF9MSVNUX1RPOgpAQCAtNzQ3Myw3ICs3 NjA4LDcgQEAgZ2ZjX3RyYW5zX29tcF90YXJnZXRfZXhpdF9kYXRhIChnZmNfY29kZSAqY29k ZSkKIAogICBnZmNfc3RhcnRfYmxvY2sgKCZibG9jayk7CiAgIG9tcF9jbGF1c2VzID0gZ2Zj X3RyYW5zX29tcF9jbGF1c2VzICgmYmxvY2ssIGNvZGUtPmV4dC5vbXBfY2xhdXNlcywKLQkJ CQkgICAgICAgY29kZS0+bG9jKTsKKwkJCQkgICAgICAgY29kZS0+bG9jLCBmYWxzZSwgZmFs c2UsIGNvZGUtPm9wKTsKICAgc3RtdCA9IGJ1aWxkMV9sb2MgKGlucHV0X2xvY2F0aW9uLCBP TVBfVEFSR0VUX0VYSVRfREFUQSwgdm9pZF90eXBlX25vZGUsCiAJCSAgICAgb21wX2NsYXVz ZXMpOwogICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZibG9jaywgc3RtdCk7CmRpZmYgLS1n aXQgYS9nY2MvZ2ltcGxpZnkuY2MgYi9nY2MvZ2ltcGxpZnkuY2MKaW5kZXggOTY4NDUxNTRh OTIuLjZiOTNmOGU5MGYxIDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxpZnkuY2MKKysrIGIvZ2Nj L2dpbXBsaWZ5LmNjCkBAIC0xMDcwNyw3ICsxMDcwOCw3IEBAIGdpbXBsaWZ5X3NjYW5fb21w X2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiB7CiAgIHN0cnVj dCBnaW1wbGlmeV9vbXBfY3R4ICpjdHgsICpvdXRlcl9jdHg7CiAgIHRyZWUgYzsKLSAgdHJl ZSAqcHJldl9saXN0X3AgPSBOVUxMLCAqb3JpZ19saXN0X3AgPSBsaXN0X3A7CisgIHRyZWUg Km9yaWdfbGlzdF9wID0gbGlzdF9wOwogICBpbnQgaGFuZGxlZF9kZXBlbmRfaXRlcmF0b3Jz ID0gLTE7CiAgIGludCBub3dhaXQgPSAtMTsKIApAQCAtMTExMzQsMzEgKzExMTM1LDYgQEAg Z2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpw cmVfcCwKIAkgICAgZGVmYXVsdDoKIAkgICAgICBicmVhazsKIAkgICAgfQotCSAgLyogRm9y IEZvcnRyYW4sIG5vdCBvbmx5IHRoZSBwb2ludGVyIHRvIHRoZSBkYXRhIGlzIG1hcHBlZCBi dXQgYWxzbwotCSAgICAgdGhlIGFkZHJlc3Mgb2YgdGhlIHBvaW50ZXIsIHRoZSBhcnJheSBk ZXNjcmlwdG9yIGV0Yy47IGZvcgotCSAgICAgJ2V4aXQgZGF0YScgLSBhbmQgaW4gcGFydGlj dWxhciBmb3IgJ2RlbGV0ZTonIC0gaGF2aW5nIGFuICdhbGxvYzonCi0JICAgICBkb2VzIG5v dCBtYWtlIHNlbnNlLiAgTGlrZXdpc2UsIGZvciAndXBkYXRlJyBvbmx5IHRyYW5zZmVycmlu ZyB0aGUKLQkgICAgIGRhdGEgaXRzZWxmIGlzIG5lZWRlZCBhcyB0aGUgcmVzdCBoYXMgYmVl biBoYW5kbGVkIGluIHByZXZpb3VzCi0JICAgICBkaXJlY3RpdmVzLiAgSG93ZXZlciwgZm9y ICdleGl0IGRhdGEnLCB0aGUgYXJyYXkgZGVzY3JpcHRvciBuZWVkcwotCSAgICAgdG8gYmUg ZGVsZXRlOyBoZW5jZSwgd2UgdHVybiB0aGUgTUFQX1RPX1BTRVQgaW50byBhIE1BUF9ERUxF VEUuCi0KLQkgICAgIE5PVEU6IEdlbmVyYWxseSwgaXQgaXMgbm90IHNhZmUgdG8gcGVyZm9y bSAiZW50ZXIgZGF0YSIgb3BlcmF0aW9ucwotCSAgICAgb24gYXJyYXlzIHdoZXJlIHRoZSBk YXRhICpvciB0aGUgZGVzY3JpcHRvciogbWF5IGdvIG91dCBvZiBzY29wZQotCSAgICAgYmVm b3JlIGEgY29ycmVzcG9uZGluZyAiZXhpdCBkYXRhIiBvcGVyYXRpb24gLS0gYW5kIHN1Y2gg YQotCSAgICAgZGVzY3JpcHRvciBtYXkgYmUgc3ludGhlc2l6ZWQgdGVtcG9yYXJpbHksIGUu Zy4gdG8gcGFzcyBhbgotCSAgICAgZXhwbGljaXQtc2hhcGUgYXJyYXkgdG8gYSBmdW5jdGlv biBleHBlY3RpbmcgYW4gYXNzdW1lZC1zaGFwZQotCSAgICAgYXJndW1lbnQuICBQZXJmb3Jt aW5nICJlbnRlciBkYXRhIiBpbnNpZGUgdGhlIGNhbGxlZCBmdW5jdGlvbgotCSAgICAgd291 bGQgdGh1cyBiZSBwcm9ibGVtYXRpYy4gICovCi0JICBpZiAoY29kZSA9PSBPTVBfVEFSR0VU X0VYSVRfREFUQQotCSAgICAgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBf TUFQX1RPX1BTRVQpCi0JICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChjLCBPTVBfQ0xB VVNFX01BUF9LSU5EICgqcHJldl9saXN0X3ApCi0JCQkJCT09IEdPTVBfTUFQX0RFTEVURQot CQkJCQk/IEdPTVBfTUFQX0RFTEVURSA6IEdPTVBfTUFQX1JFTEVBU0UpOwotCSAgZWxzZSBp ZiAoKGNvZGUgPT0gT01QX1RBUkdFVF9FWElUX0RBVEEgfHwgY29kZSA9PSBPTVBfVEFSR0VU X1VQREFURSkKLQkJICAgJiYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBfTUFQ X1BPSU5URVIKLQkJICAgICAgIHx8IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpID09IEdPTVBf TUFQX1RPX1BTRVQpKQotCSAgICByZW1vdmUgPSB0cnVlOwotCiAJICBpZiAocmVtb3ZlKQog CSAgICBicmVhazsKIAkgIGlmIChERUNMX1AgKGRlY2wpICYmIG91dGVyX2N0eCAmJiAocmVn aW9uX3R5cGUgJiBPUlRfQUNDKSkKQEAgLTExNDE4LDIxICsxMTM5NCw2IEBAIGdpbXBsaWZ5 X3NjYW5fb21wX2NsYXVzZXMgKHRyZWUgKmxpc3RfcCwgZ2ltcGxlX3NlcSAqcHJlX3AsCiAJ CSAgcmVtb3ZlID0gdHJ1ZTsKIAkJICBicmVhazsKIAkJfQotCi0JICAgICAgaWYgKCFyZW1v dmUKLQkJICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSAhPSBHT01QX01BUF9BTFdBWVNf UE9JTlRFUgotCQkgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQX0FU VEFDSF9ERVRBQ0gKLQkJICAmJiBPTVBfQ0xBVVNFX01BUF9LSU5EIChjKSAhPSBHT01QX01B UF9UT19QU0VUCi0JCSAgJiYgT01QX0NMQVVTRV9DSEFJTiAoYykKLQkJICAmJiBPTVBfQ0xB VVNFX0NPREUgKE9NUF9DTEFVU0VfQ0hBSU4gKGMpKSA9PSBPTVBfQ0xBVVNFX01BUAotCQkg ICYmICgoT01QX0NMQVVTRV9NQVBfS0lORCAoT01QX0NMQVVTRV9DSEFJTiAoYykpCi0JCSAg ICAgICA9PSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUikKLQkJICAgICAgfHwgKE9NUF9DTEFV U0VfTUFQX0tJTkQgKE9NUF9DTEFVU0VfQ0hBSU4gKGMpKQotCQkJICA9PSBHT01QX01BUF9B VFRBQ0hfREVUQUNIKQotCQkgICAgICB8fCAoT01QX0NMQVVTRV9NQVBfS0lORCAoT01QX0NM QVVTRV9DSEFJTiAoYykpCi0JCQkgID09IEdPTVBfTUFQX1RPX1BTRVQpKSkKLQkJcHJldl9s aXN0X3AgPSBsaXN0X3A7Ci0KIAkgICAgICBicmVhazsKIAkgICAgfQogCSAgZmxhZ3MgPSBH T1ZEX01BUCB8IEdPVkRfRVhQTElDSVQ7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2dvYWNjL2ZpbmFsaXplLTEuZiBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvZ29hY2MvZmluYWxpemUtMS5mCmluZGV4IDFlNWJmMGJhMWU2Li4yM2YwZmZjNjI3ZSAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9maW5hbGl6ZS0x LmYKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb2FjYy9maW5hbGl6ZS0xLmYK QEAgLTIwLDggKzIwLDggQEAKICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIoP24pI3ByYWdtYSBvbXAgdGFyZ2V0IG9hY2NfZXhpdF9kYXRhIG1hcFxcKGRlbGV0ZTpk ZWxfZiBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgZmluYWxpemUkIiAxICJnaW1wbGUiIH0g fQogCiAhJEFDQyBFWElUIERBVEEgRklOQUxJWkUgREVMRVRFIChkZWxfZl9wKDI6NSkpCi0h IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGV4 aXQgZGF0YSBtYXBcXChyZWxlYXNlOlxcKlxcKGludGVnZXJcXChraW5kPS5cXClcXFxbMDpc XFxdIFxcKlxcKSBwYXJtXFwuMFxcLmRhdGEgXFxcW2xlbjogXFteXFxcXVxdK1xcXF1cXCkg bWFwXFwodG86ZGVsX2ZfcCBcXFxbcG9pbnRlciBzZXQsIGxlbjogXFswLTlcXStcXFxdXFwp IG1hcFxcKGFsbG9jOlxcKGludGVnZXJcXChraW5kPTFcXClcXFxbMDpcXFxdIFxcKiByZXN0 cmljdFxcKSBkZWxfZl9wXFwuZGF0YSBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IFxcKC4q aW50LipcXCkgcGFybVxcLjBcXC5kYXRhIC0gXFwoLippbnQuKlxcKSBkZWxfZl9wXFwuZGF0 YVxcXF1cXCkgZmluYWxpemU7JCIgMSAib3JpZ2luYWwiIH0gfQotISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIG9tcCB0YXJnZXQgb2FjY19leGl0 X2RhdGEgbWFwXFwoZGVsZXRlOk1FTSA8XFtePlxdKz4gXFxcW1xcKGludGVnZXJcXChraW5k PS5cXClcXFxbMDpcXFxdIFxcKlxcKV9cWzAtOVxdK1xcXF0gXFxcW2xlbjogXFteXFxcXVxd K1xcXF1cXCkgbWFwXFwodG86ZGVsX2ZfcCBcXFxbcG9pbnRlciBzZXQsIGxlbjogXFswLTlc XStcXFxdXFwpIG1hcFxcKGFsbG9jOmRlbF9mX3BcXC5kYXRhIFxcXFtwb2ludGVyIGFzc2ln biwgYmlhczogXFteXFxcXVxdK1xcXF1cXCkgZmluYWxpemUkIiAxICJnaW1wbGUiIH0gfQor ISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBl eGl0IGRhdGEgbWFwXFwocmVsZWFzZTpcXCpcXChpbnRlZ2VyXFwoa2luZD0uXFwpXFxcWzA6 XFxcXSBcXCpcXCkgcGFybVxcLjBcXC5kYXRhIFxcXFtsZW46IFxbXlxcXF1cXStcXFxdXFwp IG1hcFxcKHJlbGVhc2U6ZGVsX2ZfcCBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwo YWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9MVxcKVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwp IGRlbF9mX3BcXC5kYXRhIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogXFwoLippbnQuKlxc KSBwYXJtXFwuMFxcLmRhdGEgLSBcXCguKmludC4qXFwpIGRlbF9mX3BcXC5kYXRhXFxcXVxc KSBmaW5hbGl6ZTskIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgb21wIHRhcmdldCBvYWNjX2V4aXRfZGF0YSBt YXBcXChkZWxldGU6TUVNIDxcW14+XF0rPiBcXFxbXFwoaW50ZWdlclxcKGtpbmQ9LlxcKVxc XFswOlxcXF0gXFwqXFwpX1xbMC05XF0rXFxcXSBcXFxbbGVuOiBcW15cXFxdXF0rXFxcXVxc KSBtYXBcXChkZWxldGU6ZGVsX2ZfcCBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwo YWxsb2M6ZGVsX2ZfcFxcLmRhdGEgXFxcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiBcW15cXFxd XF0rXFxcXVxcKSBmaW5hbGl6ZSQiIDEgImdpbXBsZSIgfSB9CiAKICEkQUNDIEVYSVQgREFU QSBDT1BZT1VUIChjcG9fcikKICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIoP24pI3ByYWdtYSBhY2MgZXhpdCBkYXRhIG1hcFxcKGZyb206Y3BvX3JcXCk7JCIgMSAi b3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL3ByNzgyNjAtMi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvcHI3 ODI2MC0yLmY5MAppbmRleCBmNWQ4ODg1OTJiOS4uY2Q3NzFiMzNhMjUgMTAwNjQ0Ci0tLSBh L2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9wcjc4MjYwLTIuZjkwCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9wcjc4MjYwLTIuZjkwCkBAIC00OCw5ICs0 OCwxMSBAQCBjb250YWlucwogICBlbmQgc3Vicm91dGluZSBzdWIKIGVuZCBtb2R1bGUgbQog Ci0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiI3ByYWdtYSBvbXAgdGFy Z2V0IGRhdGEgbWFwXFwodG9mcm9tOlxcKlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpc XFxdIFxcKiByZXN0cmljdFxcKSBhcnIuZGF0YSBcXFxbbGVuOiBELlxbMC05XF0rIFxcKiA0 XFxcXVxcKSBtYXBcXCh0bzphcnIgXFxcW3BvaW50ZXIgc2V0LCBsZW46IC4uXFxcXVxcKSBt YXBcXChhbGxvYzpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXSBcXCogcmVzdHJp Y3RcXCkgYXJyLmRhdGEgXFxcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgMSAi b3JpZ2luYWwiIH0gfQorISBDaGVjayBmb3IgbXVsdGlwbGljYXRpb246IGxlbiA9IGFycmF5 c19zaXplICogNDxieXRlcz46CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1l cyAiRFxcLlxbMC05XF0rID0gRFxcLlxbMC05XF0rIFxcKiA0OyIgMiAib3JpZ2luYWwiIH0g fQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIiNwcmFnbWEgb21wIHRh cmdldCBkYXRhIG1hcFxcKHRvZnJvbTpcXCpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6 XFxcXSBcXCogcmVzdHJpY3RcXCkgYXJyLmRhdGEgXFxcW2xlbjogRC5cWzAtOVxdK1xcXF1c XCkgbWFwXFwodG86YXJyIFxcXFtwb2ludGVyIHNldCwgbGVuOiAuLlxcXF1cXCkgbWFwXFwo YWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwp IGFyci5kYXRhIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiIDEgIm9yaWdp bmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIjcHJhZ21h IG9tcCB0YXJnZXQgdXBkYXRlIHRvXFwoXFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFsw OlxcXF0gXFwqIHJlc3RyaWN0XFwpIGFyci5kYXRhIFxcXFtsZW46IEQuXFswLTlcXSsgXFwq IDRcXFxdXFwpIiAxICJvcmlnaW5hbCIgfSB9Ci0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiI3ByYWdtYSBvbXAgdGFyZ2V0IGRhdGEgbWFwXFwodG9mcm9tOlxcKlxc KGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxcKSBfX3Jlc3Vs dC0+ZGF0YSBcXFxbbGVuOiBELlxbMC05XF0rIFxcKiA0XFxcXVxcKSBtYXBcXCh0bzpcXCpf X3Jlc3VsdCBcXFxbcG9pbnRlciBzZXQsIGxlbjogLi5cXFxdXFwpIG1hcFxcKGFsbG9jOlxc KGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKiByZXN0cmljdFxcKSBfX3Jlc3Vs dC0+ZGF0YSBcXFxbcG9pbnRlciBhc3NpZ24sIGJpYXM6IDBcXFxdXFwpIG1hcFxcKGFsbG9j Ol9fcmVzdWx0IFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiIDEgIm9yaWdp bmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIjcHJhZ21h IG9tcCB0YXJnZXQgZGF0YSBtYXBcXCh0b2Zyb206XFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxc KVxcXFswOlxcXF0gXFwqIHJlc3RyaWN0XFwpIF9fcmVzdWx0LT5kYXRhIFxcXFtsZW46IEQu XFswLTlcXStcXFxdXFwpIG1hcFxcKHRvOlxcKl9fcmVzdWx0IFxcXFtwb2ludGVyIHNldCwg bGVuOiAuLlxcXF1cXCkgbWFwXFwoYWxsb2M6XFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFsw OlxcXF0gXFwqIHJlc3RyaWN0XFwpIF9fcmVzdWx0LT5kYXRhIFxcXFtwb2ludGVyIGFzc2ln biwgYmlhczogMFxcXF1cXCkgbWFwXFwoYWxsb2M6X19yZXN1bHQgXFxcW3BvaW50ZXIgYXNz aWduLCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIH0gfQogISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIiNwcmFnbWEgb21wIHRhcmdldCB1cGRhdGUgdG9cXChc XCpcXChpbnRlZ2VyXFwoa2luZD00XFwpXFxcWzA6XFxcXSBcXCogcmVzdHJpY3RcXCkgX19y ZXN1bHQtPmRhdGEgXFxcW2xlbjogRC5cWzAtOVxdKyBcXCogNFxcXF1cXCkiIDEgIm9yaWdp bmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIjcHJhZ21h IG9tcCB0YXJnZXQgZGF0YSBtYXBcXCh0b2Zyb206XFwqX19yZXN1bHQuMFxcKSBtYXBcXChh bGxvYzpfX3Jlc3VsdC4wIFxcXFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiIDIg Im9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIj cHJhZ21hIG9tcCB0YXJnZXQgdXBkYXRlIHRvXFwoXFwqX19yZXN1bHQuMFxcKSIgMiAib3Jp Z2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21w L3RhcmdldC1leGl0LWRhdGEuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21w L3RhcmdldC1leGl0LWRhdGEuZjkwCmluZGV4IGVkNTdkMDA3MmQ3Li4yMTlkYzQ2N2M0NiAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3RhcmdldC1leGl0 LWRhdGEuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC90YXJnZXQt ZXhpdC1kYXRhLmY5MApAQCAtMTUsNiArMTUsNiBAQCBpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6 OiBvbmUoOiksIHR3byg6KSwgdGhyZWUoOikKICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206dGhyZWUpCiBlbmQKIAotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIm9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcFxcKGRlbGV0ZTouKlxcKSBtYXBcXChkZWxldGU6b25l IFxcXFtsZW46IC4qXFxcXVxcKSIgIm9tcGxvd2VyIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wICJvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXBcXChyZWxlYXNlOi4qXFwp IG1hcFxcKHJlbGVhc2U6dHdvIFxcXFtsZW46IC4qXFxcXVxcKSIgIm9tcGxvd2VyIiB9IH0K KyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICIjcHJhZ21hIG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcFxcKGRlbGV0ZTpvbmUgXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxc KGRlbGV0ZTpNRU0gIiAib21wbG93ZXIiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAgIiNwcmFnbWEgb21wIHRhcmdldCBleGl0IGRhdGEgbWFwXFwocmVsZWFzZTp0d28g XFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHJlbGVhc2U6TUVNICIgIm9tcGxvd2Vy IiB9IH0KICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICJvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXBcXChmcm9tOi4qXFwpIG1hcFxcKHJlbGVhc2U6dGhyZWUgXFxcW2xlbjogLipc XFxdXFwpIiAib21wbG93ZXIiIH0gfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCmluZGV4IDVk OTc1NjZjNjZjLi4xYjNjZGY5ZTc2YSAxMDA2NDQKLS0tIGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCisrKyBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MApAQCAt MTcsNiArMTcsNiBAQCB2YXIlcDIgPSBbNDYsNjc5LDU0XQogICBpZiAoYW55ICh2YXIlcDEg Lz0gWzIyLDUzLDI4LDYsNF0pKSBzdG9wIDMKICAgaWYgKGFueSAodmFyJXAyIC89IFs0Niw2 NzksNTRdKSkgc3RvcCA0CiAhJG9tcCBlbmQgdGFyZ2V0Ci0hISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTp2YXIlcDEsIHZhciVwMikKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206dmFyJXAxLCB2YXIlcDIpCiBlbmQKIApkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTQuZjkwIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTQuZjkw Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42MTkyYmYyOWQ5YQot LS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90 YXJnZXQtZW50ZXItZGF0YS00LmY5MApAQCAtMCwwICsxLDU0MCBAQAorISBDaGVjayB0aGF0 ICdtYXAoYWxsb2M6JyBwcm9wZXJseSB3b3JrcyB3aXRoCishIC0gZGVmZXJyZWQtbGVuZ3Ro IGNoYXJhY3RlciBzdHJpbmdzCishIC0gYXJyYXlzIHdpdGggYXJyYXkgZGVzY3JpcHRvcnMK KyEgRm9yIHRob3NlLCB0aGUgYXJyYXkgZGVzY3JpcHRvciAvIHN0cmluZyBsZW5ndGggbXVz dCBiZSBtYXBwZWQgd2l0aCAndG86JworCitwcm9ncmFtIG1haW4KK2ltcGxpY2l0IG5vbmUK KwordHlwZSB0CisgIGludGVnZXIgOjogaWMoMjo1KSwgaWMyCisgIGNoYXJhY3RlcihsZW49 MTEpIDo6IGNjc3RyKDM6NCksIGNjc3RyMgorICBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkg OjogY2M0c3RyKDM6NyksIGNjNHN0cjIKKyAgaW50ZWdlciwgcG9pbnRlciA6OiBwYyg6KSwg cGMyCisgIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcGNzdHIoOiksIHBjc3RyMgor ICBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0 cjIKK2VuZCB0eXBlIHQKKwordHlwZSh0KSA6OiBkdAorCitpbnRlZ2VyIDo6IGlpKDUpLCBp aTIKK2NoYXJhY3RlcihsZW49MTEpIDo6IGNsc3RyKC0xOjEpLCBjbHN0cjIKK2NoYXJhY3Rl cihsZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgoraW50ZWdlciwgcG9p bnRlciA6OiBpcCg6KSwgaXAyCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBpYSg6KSwgaWEy CitjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBzdHIoOiksIHBzdHIyCitjaGFyYWN0 ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDopLCBhc3RyMgorY2hhcmFjdGVyKGxl bj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorY2hhcmFjdGVyKGxl bj06LGtpbmQ9NCksIGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopLCBhNHN0cjIKKworYWxsb2Nh dGUoZHQlcGMoNSksIGR0JXBjMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogZHQl cGNzdHIoMikpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IGR0JXBjc3RyMikKKwor YWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCith bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBkdCVwYzRzdHIyKQorCithbGxv Y2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0y KSA6OiBwc3RyKC0yOjApKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBwc3RyMikK K2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorYWxsb2NhdGUoY2hh cmFjdGVyKGxlbj04KSA6OiBhc3RyMikKKworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtp bmQ9NCkgOjogcDRzdHIoMjo0KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQp IDo6IHA0c3RyMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3Ry KC0yOjMpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtpbmQ9NCkgOjogYTRzdHIyKQor CisKKyEgaW50ZWdlciA6OiBpYygyOjUpLCBpYzIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKGFsbG9jOiBkdCVpYykKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWljKQor ICBpZiAoc2l6ZShkdCVpYykgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWlj LCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUpIGVy cm9yIHN0b3AKKyAgZHQlaWMgPSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVpYykKK2lmIChzaXplKGR0 JWljKSAvPSA0KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBlcnJv ciBzdG9wCitpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55 IChkdCVpYyAvPSBbMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWljMikKKyEkb21wIHRhcmdldCBtYXAoYWxs b2M6IGR0JWljMikKKyAgZHQlaWMyID0gNDIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWljMikKK2lmIChkdCVpYzIgLz0gNDIpIGVy cm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCksIGNjc3Ry MgorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjc3RyKQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlY2NzdHIpCisgIGlmIChsZW4oZHQlY2NzdHIpIC89 IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9w CisgIGlmIChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVi b3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVjY3N0ciA9IFsiMTIz NDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIpCitpZiAobGVuKGR0JWNjc3RyKSAv PSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9yIHN0b3AK K2lmIChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQo ZHQlY2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JWNjc3RyIC89IFsi MTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFy Z2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVjY3N0cjIpCishJG9tcCB0YXJnZXQgbWFw KGFsbG9jOiBkdCVjY3N0cjIpCisgIGlmIChsZW4oZHQlY2NzdHIyKSAvPSAxMSkgZXJyb3Ig c3RvcAorICBkdCVjY3N0cjIgPSAiQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjY3N0cjIpCitpZiAobGVuKGR0 JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChkdCVjY3N0cjIgLz0gIkFCQ0RFRkdI SUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNj NHN0cigzOjcpLCBjYzRzdHIyCisKKyEgVmFsdWUgY2hlY2sgZmFpbHMKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlY2M0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChh bGxvYzogZHQlY2M0c3RyKQorICBpZiAobGVuKGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0 b3AKKyAgaWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2M0 c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0ciA9IFs0XyIxMjM0NTY3ODkw MSIsIDRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgICAgNF8icWVyZnRjZWE2ZHMi LCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRfIjQ1bmd3ajU2c2oyIl0K KyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0 JWNjNHN0cikKK2lmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNp emUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWNjNHN0ciwg MSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcpIGVy cm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBz dG9wCitpZiAoZHQlY2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJyb3Igc3RvcAor aWYgKGR0JWNjNHN0cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AKK2lmIChk dCVjYzRzdHIoNikgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0 c3RyKDcpIC89IDRfIjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFs bG9jOiBkdCVjYzRzdHIyKQorICBpZiAobGVuKGR0JWNjNHN0cjIpIC89IDExKSBlcnJvciBz dG9wCisgIGR0JWNjNHN0cjIgPSA0XyJBQkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjNHN0cjIpCitpZiAobGVu KGR0JWNjNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyMiAvPSA0XyJB QkNERUZHSElKSyIpIGVycm9yIHN0b3AKKworCishIGludGVnZXIsIHBvaW50ZXIgOjogcGMo OiksIHBjMgorISBhbGxvY2F0ZShkdCVwYyg1KSwgZHQlcGMyKQorCishIGxpYmdvbXA6IEdP TVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGMpCishJG9tcCB0YXJnZXQgbWFw KGFsbG9jOiBkdCVwYykKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBz dG9wCisgIGlmIChzaXplKGR0JXBjKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQo ZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVwYywgMSkgLz0g NSkgZXJyb3Igc3RvcAorICBkdCVwYyA9IFsxMSwgMjIsIDMzLCA0NCwgNTVdCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYykKK2lm ICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGMp IC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0 b3AKK2lmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0 JXBjIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjMikKKyEkb21wIHRhcmdldCBtYXAoYWxs b2M6IGR0JXBjMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3Rv cAorICBkdCVwYzIgPSA5OQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogZHQlcGMyKQoraWYgKGR0JXBjMiAvPSA5OSkgZXJyb3Igc3RvcAor aWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFj dGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KSwgcGNzdHIyCishIGFsbG9jYXRlKGNo YXJhY3RlcihsZW49MikgOjogZHQlcGNzdHIoMikpCishIGFsbG9jYXRlKGNoYXJhY3Rlcihs ZW49NCkgOjogZHQlcGNzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4 aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogZHQlcGNzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwY3N0 cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4oZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGNzdHIp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJy b3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisg IGR0JXBjc3RyID0gWyIwMSIsICJqayJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwY3N0cikKK2lmICgubm90LiBhc3NvY2lhdGVk KGR0JXBjc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Ig c3RvcAoraWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo ZHQlcGNzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGNzdHIsIDEp IC89IDIpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjc3RyIC89IFsiMDEiLCAiamsiXSkp IGVycm9yIHN0b3AKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEg dW5oYW5kbGVkIGtpbmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGR0JXBjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyAg aWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVu KGR0JXBjc3RyMikgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVwY3N0cjIgPSAiSElKSyIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBj c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKK2lm IChsZW4oZHQlcGNzdHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoZHQlcGNzdHIyIC89ICJI SUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50 ZXIgOjogcGM0c3RyKDopLCBwYzRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49Myxr aW5kPTQpIDo6IGR0JXBjNHN0cigyOjMpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUs a2luZD00KSA6OiBkdCVwYzRzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVy X2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCishIHN0cnVjdHVyZSBlbGVtZW50IHdo ZW4gb3RoZXIgbWFwcGVkIGVsZW1lbnRzIGZyb20gdGhlIHNhbWUgc3RydWN0dXJlIHdlcmVu J3QgbWFwcGVkIHRvZ2V0aGVyIHdpdGggaXQKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cChhbGxvYzogZHQlcGM0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGM0c3Ry KQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjNHN0 cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikg ZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAorICBkdCVwYzRzdHIgPSBbNF8iNDU2IiwgNF8idHp1Il0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjNHN0cikKK2lmICgubm90 LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGM0c3Ry KSAvPSAzKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVwYzRzdHIpIC89IDIpIGVycm9yIHN0 b3AKK2lmIChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJv dW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cigyKSAv PSA0XyI0NTYiKSBlcnJvciBzdG9wCitpZiAoZHQlcGM0c3RyKDMpIC89IDRfInR6dSIpIGVy cm9yIHN0b3AKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5o YW5kbGVkIGtpbmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6 IGR0JXBjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIyKQorICBp ZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVu KGR0JXBjNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKKyAgZHQlcGM0c3RyMiA9IDRfIjk4NzY1 IgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog ZHQlcGM0c3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIpKSBlcnJvciBz dG9wCitpZiAobGVuKGR0JXBjNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRz dHIyIC89IDRfIjk4NzY1IikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdlciA6OiBpaSg1KSwg aWkyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWkpCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBpaSkKKyAgaWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AK KyAgaWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlp LCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGlpID0gWy0xLCAtMiwgLTMsIC00LCAtNV0KKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlpKQor aWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWksIDEpIC89IDEp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChh bnkgKGlpIC89IFstMSwgLTIsIC0zLCAtNCwgLTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlpMikKKyEkb21wIHRhcmdldCBtYXAoYWxs b2M6IGlpMikKKyAgaWkyID0gLTQxMAorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZnJvbTogaWkyKQoraWYgKGlpMiAvPSAtNDEwKSBlcnJvciBzdG9w CisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKSwgY2xzdHIyCisKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogY2xzdHIpCishJG9tcCB0YXJnZXQg bWFwKGFsbG9jOiBjbHN0cikKKyAgaWYgKGxlbihjbHN0cikgLz0gMTEpIGVycm9yIHN0b3AK KyAgaWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChjbHN0 ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChjbHN0ciwgMSkgLz0gMSkg ZXJyb3Igc3RvcAorICBjbHN0ciA9IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiLCAi QUJDREVGR0hJSksiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogY2xzdHIpCitpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAor aWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoY2xzdHIsIDEp IC89IC0xKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBz dG9wCitpZiAoYW55IChjbHN0ciAvPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwg IkFCQ0RFRkdISUpLIl0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogY2xzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2xzdHIyKQor ICBpZiAobGVuKGNsc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKKyAgY2xzdHIyID0gIkFCQ0RF RmdoaWprIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAo ZnJvbTogY2xzdHIyKQoraWYgKGxlbihjbHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAo Y2xzdHIyIC89ICJBQkNERUZnaGlqayIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rlcihs ZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsNHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6 IGNsNHN0cikKKyAgaWYgKGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChz aXplKGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsNHN0ciwgMSkg Lz0gMCkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Ig c3RvcAorICBjbDRzdHIgPSBbNF8iMTIzNDU2Nzg5MDEiLCA0XyJhYmNkZWZnaGlqayIsICYK KyAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFmOWczN2dhNC4iXQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyKQor aWYgKGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShjbDRzdHIpIC89 IDQpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigw KSAvPSA0XyIxMjM0NTY3ODkwMSIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMSkgLz0gNF8i YWJjZGVmZ2hpamsiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDIpIC89IDRfInFlcmZ0Y2Vh NmRzIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigzKSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVy cm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBjbDRzdHIy KQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2w0c3RyMikKKyAgaWYgKGxlbihjbDRzdHIy KSAvPSAxMSkgZXJyb3Igc3RvcAorICBjbDRzdHIyID0gNF8iQUJDREVGR0hJSksiCishJG9t cCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIy KQoraWYgKGxlbihjbDRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGNsNHN0cjIgLz0g NF8iQUJDREVGR0hJSksiKSBlcnJvciBzdG9wCisKKworISBhbGxvY2F0ZShpcCg1KSwgaXAy LCBpYSg4KSwgaWEyKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlw KQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogaXApCisgIGlmICgubm90LiBhc3NvY2lhdGVk KGlwKSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAorICBp ZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaXAsIDEp IC89IDUpIGVycm9yIHN0b3AKKyAgaXAgPSBbMTEsIDIyLCAzMywgNDQsIDU1XQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaXApCitpZiAo Lm5vdC4gYXNzb2NpYXRlZChpcCkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlwKSAvPSA1KSBl cnJvciBzdG9wCitpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJv dW5kKGlwLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChpcCAvPSBbMTEsIDIyLCAz MywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KGFsbG9jOiBpcDIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpcDIpCisgIGlmICgubm90 LiBhc3NvY2lhdGVkKGlwMikpIGVycm9yIHN0b3AKKyAgaXAyID0gOTkKKyEkb21wIGVuZCB0 YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwMikKK2lmIChpcDIg Lz0gOTkpIGVycm9yIHN0b3AKK2lmICgubm90LiBhc3NvY2lhdGVkKGlwMikpIGVycm9yIHN0 b3AKKworCishIGFsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCisKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWEpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBpYSkKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0b3AKKyAgaWYgKHNp emUoaWEpIC89IDgpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpYSwgMSkgLz0gMSkgZXJy b3Igc3RvcAorICBpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9wCisgIGlhID0g WzEsMiwzLDQsNSw2LDcsOF0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGlhKQoraWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0 b3AKK2lmIChzaXplKGlhKSAvPSA4KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlhLCAxKSAv PSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9wCitp ZiAoYW55IChpYSAvPSBbMSwyLDMsNCw1LDYsNyw4XSkpIGVycm9yIHN0b3AKKworISRvbXAg dGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBpYTIpCishJG9tcCB0YXJnZXQgbWFwKGFs bG9jOiBpYTIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoaWEyKSkgZXJyb3Igc3RvcAorICBp YTIgPSAxMDIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGlhMikKK2lmIChpYTIgLz0gMTAyKSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYWxs b2NhdGVkKGlhMikpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50 ZXIgOjogcHN0cig6KSwgcHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBw c3RyKC0yOjApKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IHBzdHIyKQorCish IGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxs b2M6IHBzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIpKSBlcnJvciBzdG9wCisg IGlmIChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShwc3RyKSAvPSAz KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQocHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIHBzdHIgPSBbIjAx IiwgImprIiwgImFxIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IHBzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Ig c3RvcAoraWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAoc2l6ZShwc3RyKSAv PSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmIChhbnkgKHBzdHIg Lz0gWyIwMSIsICJqayIsICJhcSJdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50 ZXIgZGF0YSBtYXAoYWxsb2M6IHBzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcHN0 cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAo bGVuKHBzdHIyKSAvPSA0KSBlcnJvciBzdG9wCisgIHBzdHIyID0gIkhJSksiCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBwc3RyMikKK2lm ICgubm90LiBhc3NvY2lhdGVkKHBzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwc3RyMikg Lz0gNCkgZXJyb3Igc3RvcAoraWYgKHBzdHIyIC89ICJISUpLIikgZXJyb3Igc3RvcAorCisK KyEgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogYXN0cig6KSwgYXN0cjIKKyEg YWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkpCishIGFsbG9jYXRlKGNo YXJhY3RlcihsZW49OCkgOjogYXN0cjIpCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJy b3I6IG91dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9j OiBhc3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cikKKyAgaWYgKC5ub3QuIGFs bG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIpIC89IDYpIGVycm9y IHN0b3AKKyAgaWYgKHNpemUoYXN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5k KGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1 KSBlcnJvciBzdG9wCisgIGFzdHIgPSBbIjAxZGI0NSIsICJqayREJVMiLCAienV0ZzQ3Il0K KyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGFz dHIpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFz dHIpIC89IDYpIGVycm9yIHN0b3AKK2lmIChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AK K2lmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhc3Ry LCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChhc3RyIC89IFsiMDFkYjQ1IiwgImpr JEQlUyIsICJ6dXRnNDciXSkpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBudnB0eF9hbGxv YyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo YWxsb2M6IGFzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cjIpCisgIGlmICgu bm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYXN0cjIpIC89 IDgpIGVycm9yIHN0b3AKKyAgYXN0cjIgPSAiSElKS2hpamsiCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3RyMikKK2lmICgubm90LiBh bGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFzdHIyKSAvPSA4KSBlcnJv ciBzdG9wCitpZiAoYXN0cjIgLz0gIkhJSktoaWprIikgZXJyb3Igc3RvcAorCisKKyEgY2hh cmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorISBh bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorISBhbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBwNHN0cjIpCisKKyEgRkFJTFMgd2l0 aCB2YWx1ZSBjaGVjaworCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0 c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcDRzdHIpCisgIGlmICgubm90LiBhc3Nv Y2lhdGVkKHA0c3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJv ciBzdG9wCisgIGlmIChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQocDRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChwNHN0ciwgMSkg Lz0gNCkgZXJyb3Igc3RvcAorICBwNHN0cig6KSA9IFs0XyJmODUiLCA0XyI4YWYiLCA0XyJB JUYiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogcDRzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKK2lm IChsZW4ocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKHA0c3RyKSAvPSAzKSBl cnJvciBzdG9wCitpZiAobGJvdW5kKHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAo dWJvdW5kKHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocDRzdHIoMikgIC89IDRf ImY4NSIpIGVycm9yIHN0b3AKK2lmIChwNHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3Rv cAoraWYgKHA0c3RyKDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcChhbGxvYzogcDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogcDRzdHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cjIpKSBlcnJvciBzdG9w CisgIGlmIChsZW4ocDRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCisgIHA0c3RyMiA9IDRfIjk4 NzVhIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogcDRzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIyKSkgZXJyb3Igc3RvcAor aWYgKGxlbihwNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChwNHN0cjIgLz0gNF8iOTg3 NWEiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgYWxsb2Nh dGFibGUgOjogYTRzdHIoOiksIGE0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcs a2luZD00KSA6OiBhNHN0cigtMjozKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtp bmQ9NCkgOjogYTRzdHIyKQorCishIGxpYmdvbXA6IFRyeWluZyB0byBtYXAgaW50byBkZXZp Y2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBiYjljOWViYmEwKSBvYmplY3Qgd2hlbiBbMHg3ZmZk MDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEwKSBpcyBhbHJlYWR5IG1hcHBlZAorCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChh bGxvYzogYTRzdHIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBzdG9w CisgIGlmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYTRzdHIp IC89IDYpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9y IHN0b3AKKyAgaWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICAhIFNl ZSBQUiBmb3J0cmFuLzEwNzUwOCB3aHkgJyg6KScgaXMgcmVxdWlyZWQKKyAgYTRzdHIoOikg PSBbNF8ic2Y0NTZhcSIsIDRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVzNyIs IDRfImo9OGFmNGQiLCA0XyIuLEElRnN6Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGE0c3RyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChh NHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKK2lm IChzaXplKGE0c3RyKSAvPSA2KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGE0c3RyLCAxKSAv PSAtMikgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAoraWYgKGE0c3RyKC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAoraWYgKGE0c3Ry KC0xKSAvPSA0XyIzZHR6dTI0IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDApICAvPSA0XyJf NGZoN3NtIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3IikgZXJy b3Igc3RvcAoraWYgKGE0c3RyKDIpICAvPSA0XyJqPThhZjRkIikgZXJyb3Igc3RvcAoraWYg KGE0c3RyKDMpICAvPSA0XyIuLEElRnN6IikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0c3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6 IGE0c3RyMikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cjIpKSBlcnJvciBzdG9wCisg IGlmIChsZW4oYTRzdHIyKSAvPSA5KSBlcnJvciBzdG9wCisgIGE0c3RyMiA9IDRfIjk4NzY1 YTIzZCIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGE0c3RyMikKK2lmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIyKSkgZXJyb3Igc3RvcAor aWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0b3AKK2lmIChhNHN0cjIgLz0gNF8iOTg3 NjVhMjNkIikgZXJyb3Igc3RvcAorCisKK2RlYWxsb2NhdGUoZHQlcGMsIGR0JXBjMikKK2Rl YWxsb2NhdGUoZHQlcGNzdHIpCitkZWFsbG9jYXRlKGR0JXBjc3RyMikKKworZGVhbGxvY2F0 ZShkdCVwYzRzdHIpCitkZWFsbG9jYXRlKGR0JXBjNHN0cjIpCisKK2RlYWxsb2NhdGUoaXAs IGlwMiwgaWEsIGlhMikKK2RlYWxsb2NhdGUocHN0cikKK2RlYWxsb2NhdGUocHN0cjIpCitk ZWFsbG9jYXRlKGFzdHIpCitkZWFsbG9jYXRlKGFzdHIyKQorCitkZWFsbG9jYXRlKHA0c3Ry KQorZGVhbGxvY2F0ZShwNHN0cjIpCitkZWFsbG9jYXRlKGE0c3RyKQorZGVhbGxvY2F0ZShh NHN0cjIpCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9y dHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMC4uY2Y3NTkzNDZhODQKLS0tIC9kZXYvbnVsbAorKysgYi9s aWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNS5m OTAKQEAgLTAsMCArMSw1NDAgQEAKKyEgQ2hlY2sgdGhhdCAnbWFwKCh0bylmcm9tOicgcHJv cGVybHkgd29ya3Mgd2l0aAorISAtIGRlZmVycmVkLWxlbmd0aCBjaGFyYWN0ZXIgc3RyaW5n cworISAtIGFycmF5cyB3aXRoIGFycmF5IGRlc2NyaXB0b3JzCishIEZvciB0aG9zZSwgdGhl IGFycmF5IGRlc2NyaXB0b3IgLyBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgbWFwcGVkIHdpdGgg J3RvOicKKworcHJvZ3JhbSBtYWluCitpbXBsaWNpdCBub25lCisKK3R5cGUgdAorICBpbnRl Z2VyIDo6IGljKDI6NSksIGljMgorICBjaGFyYWN0ZXIobGVuPTExKSA6OiBjY3N0cigzOjQp LCBjY3N0cjIKKyAgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigzOjcpLCBj YzRzdHIyCisgIGludGVnZXIsIHBvaW50ZXIgOjogcGMoOiksIHBjMgorICBjaGFyYWN0ZXIo bGVuPTopLCBwb2ludGVyIDo6IHBjc3RyKDopLCBwY3N0cjIKKyAgY2hhcmFjdGVyKGxlbj06 LGtpbmQ9NCksIHBvaW50ZXIgOjogcGM0c3RyKDopLCBwYzRzdHIyCitlbmQgdHlwZSB0CisK K3R5cGUodCkgOjogZHQKKworaW50ZWdlciA6OiBpaSg1KSwgaWkyCitjaGFyYWN0ZXIobGVu PTExKSA6OiBjbHN0cigtMToxKSwgY2xzdHIyCitjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkg OjogY2w0c3RyKDA6MyksIGNsNHN0cjIKK2ludGVnZXIsIHBvaW50ZXIgOjogaXAoOiksIGlw MgoraW50ZWdlciwgYWxsb2NhdGFibGUgOjogaWEoOiksIGlhMgorY2hhcmFjdGVyKGxlbj06 KSwgcG9pbnRlciA6OiBwc3RyKDopLCBwc3RyMgorY2hhcmFjdGVyKGxlbj06KSwgYWxsb2Nh dGFibGUgOjogYXN0cig6KSwgYXN0cjIKK2NoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2lu dGVyIDo6IHA0c3RyKDopLCBwNHN0cjIKK2NoYXJhY3RlcihsZW49OixraW5kPTQpLCBhbGxv Y2F0YWJsZSA6OiBhNHN0cig6KSwgYTRzdHIyCisKK2FsbG9jYXRlKGR0JXBjKDUpLCBkdCVw YzIpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3RyKDIpKQorYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisKK2FsbG9jYXRlKGNoYXJhY3Rl cihsZW49MyxraW5kPTQpIDo6IGR0JXBjNHN0cigyOjMpKQorYWxsb2NhdGUoY2hhcmFjdGVy KGxlbj01LGtpbmQ9NCkgOjogZHQlcGM0c3RyMikKKworYWxsb2NhdGUoaXAoNSksIGlwMiwg aWEoOCksIGlhMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjowKSkK K2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogcHN0cjIpCithbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49OCkgOjog YXN0cjIpCisKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IHA0c3RyKDI6 NCkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBwNHN0cjIpCithbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkKK2FsbG9jYXRl KGNoYXJhY3RlcihsZW49OSxraW5kPTQpIDo6IGE0c3RyMikKKworCishIGludGVnZXIgOjog aWMoMjo1KSwgaWMyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0 JWljKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVpYykKKyAgaWYgKHNpemUoZHQlaWMp IC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikgZXJyb3Ig c3RvcAorICBpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JWlj ID0gWzIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMpCitpZiAoc2l6ZShkdCVpYykgLz0gNCkgZXJyb3Ig c3RvcAoraWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKHVib3Vu ZChkdCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlaWMgLz0gWzIyLCAz MywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KHRvZnJvbTogZHQlaWMyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVpYzIpCisgIGR0 JWljMiA9IDQyCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChmcm9tOiBkdCVpYzIpCitpZiAoZHQlaWMyIC89IDQyKSBlcnJvciBzdG9wCisKKworISBj aGFyYWN0ZXIobGVuPTExKSA6OiBjY3N0cigzOjQpLCBjY3N0cjIKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlY2NzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZy b206IGR0JWNjc3RyKQorICBpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAor ICBpZiAoc2l6ZShkdCVjY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0 JWNjc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2NzdHIsIDEp IC89IDQpIGVycm9yIHN0b3AKKyAgZHQlY2NzdHIgPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2Rl ZmdoaWprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGR0JWNjc3RyKQoraWYgKGxlbihkdCVjY3N0cikgLz0gMTEpIGVycm9yIHN0b3AK K2lmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWNj c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNjc3RyLCAxKSAvPSA0 KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVjY3N0ciAvPSBbIjEyMzQ1Njc4OTAxIiwgImFi Y2RlZmdoaWprIl0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cCh0b2Zyb206IGR0JWNjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlY2NzdHIy KQorICBpZiAobGVuKGR0JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0b3AKKyAgZHQlY2NzdHIy ID0gIkFCQ0RFRkdISUpLIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIyKQoraWYgKGxlbihkdCVjY3N0cjIpIC89IDExKSBl cnJvciBzdG9wCitpZiAoZHQlY2NzdHIyIC89ICJBQkNERUZHSElKSyIpIGVycm9yIHN0b3AK KworCishIGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIoMzo3KSwgY2M0c3Ry MgorCishIFZhbHVlIGNoZWNrIGZhaWxzCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo dG9mcm9tOiBkdCVjYzRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JWNjNHN0cikK KyAgaWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0 JWNjNHN0cikgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWNjNHN0ciwgMSkg Lz0gMykgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWNjNHN0ciwgMSkgLz0gNykgZXJy b3Igc3RvcAorICBkdCVjYzRzdHIgPSBbNF8iMTIzNDU2Nzg5MDEiLCA0XyJhYmNkZWZnaGlq ayIsICYKKyAgICAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFmOWczN2dhNC4i LCAmCisgICAgICAgICAgICAgICA0XyI0NW5nd2o1NnNqMiJdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjYzRzdHIpCitpZiAobGVu KGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0JWNjNHN0cikgLz0g NSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVjYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0 b3AKK2lmICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCitpZiAoZHQl Y2M0c3RyKDMpIC89IDRfIjEyMzQ1Njc4OTAxIikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0 cig0KSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNSkg Lz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDYpIC89IDRf ImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cig3KSAvPSA0XyI0NW5n d2o1NnNqMiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRv ZnJvbTogZHQlY2M0c3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlY2M0c3RyMikK KyAgaWYgKGxlbihkdCVjYzRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBkdCVjYzRzdHIy ID0gNF8iQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBkdCVjYzRzdHIyKQoraWYgKGxlbihkdCVjYzRzdHIyKSAvPSAx MSkgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cjIgLz0gNF8iQUJDREVGR0hJSksiKSBlcnJv ciBzdG9wCisKKworISBpbnRlZ2VyLCBwb2ludGVyIDo6IHBjKDopLCBwYzIKKyEgYWxsb2Nh dGUoZHQlcGMoNSksIGR0JXBjMikKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9l eGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAodG9mcm9tOiBkdCVwYykKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGMpCisg IGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShk dCVwYykgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjLCAxKSAvPSAxKSBl cnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAg ZHQlcGMgPSBbMTEsIDIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGMpCitpZiAoLm5vdC4gYXNzb2NpYXRl ZChkdCVwYykpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0JXBjKSAvPSA1KSBlcnJvciBzdG9w CitpZiAobGJvdW5kKGR0JXBjLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0 JXBjLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVwYyAvPSBbMTEsIDIyLCAz MywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KHRvZnJvbTogZHQlcGMyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVwYzIpCisgIGlm ICgubm90LiBhc3NvY2lhdGVkKGR0JXBjMikpIGVycm9yIHN0b3AKKyAgZHQlcGMyID0gOTkK KyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0 JXBjMikKK2lmIChkdCVwYzIgLz0gOTkpIGVycm9yIHN0b3AKK2lmICgubm90LiBhc3NvY2lh dGVkKGR0JXBjMikpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50 ZXIgOjogcGNzdHIoOiksIHBjc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6 IGR0JXBjc3RyKDIpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IGR0JXBjc3Ry MikKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVk IGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVw Y3N0cikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGNzdHIpCisgIGlmICgubm90LiBh c3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjc3RyKSAv PSAyKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9w CisgIGlmIChsYm91bmQoZHQlcGNzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVi b3VuZChkdCVwY3N0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorICBkdCVwY3N0ciA9IFsiMDEi LCAiamsiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAo ZnJvbTogZHQlcGNzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9y IHN0b3AKK2lmIChsZW4oZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0 JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAx KSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9w CitpZiAoYW55IChkdCVwY3N0ciAvPSBbIjAxIiwgImprIl0pKSBlcnJvciBzdG9wCisKKyEg bGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4 MDEKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGNzdHIyKQor ISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVwY3N0cjIpCisgIGlmICgubm90LiBhc3NvY2lh dGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihkdCVwY3N0cjIpIC89IDQp IGVycm9yIHN0b3AKKyAgZHQlcGNzdHIyID0gIkhJSksiCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwY3N0cjIpCitpZiAoLm5vdC4g YXNzb2NpYXRlZChkdCVwY3N0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjc3RyMikg Lz0gNCkgZXJyb3Igc3RvcAoraWYgKGR0JXBjc3RyMiAvPSAiSElKSyIpIGVycm9yIHN0b3AK KworCishIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KSwg cGM0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRz dHIoMjozKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj01LGtpbmQ9NCkgOjogZHQlcGM0 c3RyMikKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5k bGVkIGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBk dCVwYzRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JXBjNHN0cikKKyAgaWYgKC5u b3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBj NHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVwYzRzdHIpIC89IDIpIGVy cm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChkdCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgZHQlcGM0 c3RyID0gWzRfIjQ1NiIsIDRfInR6dSJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzRzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRl ZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjNHN0cikgLz0gMykgZXJy b3Igc3RvcAoraWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAobGJv dW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVwYzRz dHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIoMikgLz0gNF8iNDU2Iikg ZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cigzKSAvPSA0XyJ0enUiKSBlcnJvciBzdG9wCisK KyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5k IDB4MDEKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGM0c3Ry MikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGM0c3RyMikKKyAgaWYgKC5ub3QuIGFz c29jaWF0ZWQoZHQlcGM0c3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihkdCVwYzRzdHIy KSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JXBjNHN0cjIgPSA0XyI5ODc2NSIKKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjNHN0cjIp CitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzRzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxl bihkdCVwYzRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoZHQlcGM0c3RyMiAvPSA0XyI5 ODc2NSIpIGVycm9yIHN0b3AKKworCishIGludGVnZXIgOjogaWkoNSksIGlpMgorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBpaSkKKyEkb21wIHRhcmdldCBtYXAo ZnJvbTogaWkpCisgIGlmIChzaXplKGlpKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQoaWksIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChpaSwgMSkgLz0gNSkg ZXJyb3Igc3RvcAorICBpaSA9IFstMSwgLTIsIC0zLCAtNCwgLTVdCishJG9tcCBlbmQgdGFy Z2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaSkKK2lmIChzaXplKGlp KSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKGlpLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChpaSAvPSBb LTEsIC0yLCAtMywgLTQsIC01XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogaWkyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBpaTIpCisg IGlpMiA9IC00MTAKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGlpMikKK2lmIChpaTIgLz0gLTQxMCkgZXJyb3Igc3RvcAorCisKKyEgY2hh cmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSksIGNsc3RyMgorCishJG9tcCB0YXJnZXQg ZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBjbHN0cikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTog Y2xzdHIpCisgIGlmIChsZW4oY2xzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXpl KGNsc3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoY2xzdHIsIDEpIC89IC0x KSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoY2xzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AK KyAgY2xzdHIgPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpL Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGNsc3RyKQoraWYgKGxlbihjbHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXplKGNs c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkgZXJy b3Igc3RvcAoraWYgKHVib3VuZChjbHN0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKGFu eSAoY2xzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayIsICJBQkNERUZHSElK SyJdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9t OiBjbHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGNsc3RyMikKKyAgaWYgKGxlbihj bHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGNsc3RyMiA9ICJBQkNERUZnaGlqayIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsc3Ry MikKK2lmIChsZW4oY2xzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGNsc3RyMiAvPSAi QUJDREVGZ2hpamsiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9 NCkgOjogY2w0c3RyKDA6MyksIGNsNHN0cjIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKHRvZnJvbTogY2w0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBjbDRzdHIpCisg IGlmIChsZW4oY2w0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShjbDRzdHIp IC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChjbDRzdHIsIDEpIC89IDApIGVycm9y IHN0b3AKKyAgaWYgKHVib3VuZChjbDRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgY2w0 c3RyID0gWzRfIjEyMzQ1Njc4OTAxIiwgNF8iYWJjZGVmZ2hpamsiLCAmCisgICAgICAgICAg ICA0XyJxZXJmdGNlYTZkcyIsIDRfImExZjlnMzdnYTQuIl0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsNHN0cikKK2lmIChsZW4oY2w0 c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2w0c3RyKSAvPSA0KSBlcnJvciBz dG9wCitpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAoraWYgKHVib3Vu ZChjbDRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMCkgLz0gNF8iMTIz NDU2Nzg5MDEiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDEpIC89IDRfImFiY2RlZmdoaWpr IikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigyKSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9y IHN0b3AKK2lmIChjbDRzdHIoMykgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCisK KyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGNsNHN0cjIpCishJG9tcCB0 YXJnZXQgbWFwKGZyb206IGNsNHN0cjIpCisgIGlmIChsZW4oY2w0c3RyMikgLz0gMTEpIGVy cm9yIHN0b3AKKyAgY2w0c3RyMiA9IDRfIkFCQ0RFRkdISUpLIgorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyMikKK2lmIChsZW4o Y2w0c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIyIC89IDRfIkFCQ0RFRkdI SUpLIikgZXJyb3Igc3RvcAorCisKKyEgYWxsb2NhdGUoaXAoNSksIGlwMiwgaWEoOCksIGlh MikKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogaXApCishJG9tcCB0 YXJnZXQgbWFwKGZyb206IGlwKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChpcCkpIGVycm9y IHN0b3AKKyAgaWYgKHNpemUoaXApIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChp cCwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBlcnJv ciBzdG9wCisgIGlwID0gWzExLCAyMiwgMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwKQoraWYgKC5ub3QuIGFzc29j aWF0ZWQoaXApKSBlcnJvciBzdG9wCitpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAor aWYgKGxib3VuZChpcCwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpcCwgMSkg Lz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoaXAgLz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0p KSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGlw MikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogaXAyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRl ZChpcDIpKSBlcnJvciBzdG9wCisgIGlwMiA9IDk5CishJG9tcCBlbmQgdGFyZ2V0CishJG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpcDIpCitpZiAoaXAyIC89IDk5KSBlcnJv ciBzdG9wCitpZiAoLm5vdC4gYXNzb2NpYXRlZChpcDIpKSBlcnJvciBzdG9wCisKKworISBh bGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAodG9mcm9tOiBpYSkKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogaWEpCisgIGlm ICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGlhKSAvPSA4 KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAg aWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAorICBpYSA9IFsxLDIsMyw0LDUs Niw3LDhdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChm cm9tOiBpYSkKK2lmICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9wCitpZiAoc2l6 ZShpYSkgLz0gOCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChpYSwgMSkgLz0gMSkgZXJyb3Ig c3RvcAoraWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAoraWYgKGFueSAoaWEg Lz0gWzEsMiwzLDQsNSw2LDcsOF0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcCh0b2Zyb206IGlhMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogaWEyKQor ICBpZiAoLm5vdC4gYWxsb2NhdGVkKGlhMikpIGVycm9yIHN0b3AKKyAgaWEyID0gMTAyCish JG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpYTIp CitpZiAoaWEyIC89IDEwMikgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFsbG9jYXRlZChpYTIp KSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBzdHIo OiksIHBzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjowKSkK KyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBwc3RyMikKKworISBsaWJnb21wOiBu dnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAodG9mcm9tOiBwc3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBwc3RyKQor ICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHBz dHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUocHN0cikgLz0gMykgZXJyb3Igc3Rv cAorICBpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCisgIGlmICh1Ym91 bmQocHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAorICBwc3RyID0gWyIwMSIsICJqayIsICJh cSJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBwc3RyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cikpIGVycm9yIHN0b3AKK2lmIChs ZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKHNpemUocHN0cikgLz0gMykgZXJyb3Ig c3RvcAoraWYgKGxib3VuZChwc3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAoraWYgKHVib3Vu ZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCitpZiAoYW55IChwc3RyIC89IFsiMDEiLCAi amsiLCAiYXEiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KHRvZnJvbTogcHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IHBzdHIyKQorICBpZiAo Lm5vdC4gYXNzb2NpYXRlZChwc3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihwc3RyMikg Lz0gNCkgZXJyb3Igc3RvcAorICBwc3RyMiA9ICJISUpLIgorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cjIpCitpZiAoLm5vdC4gYXNz b2NpYXRlZChwc3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4ocHN0cjIpIC89IDQpIGVycm9y IHN0b3AKK2lmIChwc3RyMiAvPSAiSElKSyIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rl cihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOiksIGFzdHIyCishIGFsbG9jYXRlKGNo YXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVu PTgpIDo6IGFzdHIyKQorCishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2Yg bWVtb3J5CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGFzdHIpCish JG9tcCB0YXJnZXQgbWFwKGZyb206IGFzdHIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYXN0 cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihhc3RyKSAvPSA2KSBlcnJvciBzdG9wCisgIGlm IChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChhc3RyLCAxKSAv PSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoYXN0ciwgMSkgLz0gNSkgZXJyb3Igc3Rv cAorICBhc3RyID0gWyIwMWRiNDUiLCAiamskRCVTIiwgInp1dGc0NyJdCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3RyKQoraWYgKC5u b3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhc3RyKSAvPSA2KSBl cnJvciBzdG9wCitpZiAoc2l6ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5k KGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoYXN0ciwgMSkgLz0gNSkg ZXJyb3Igc3RvcAoraWYgKGFueSAoYXN0ciAvPSBbIjAxZGI0NSIsICJqayREJVMiLCAienV0 ZzQ3Il0pKSBlcnJvciBzdG9wCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJyb3I6IG91 dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogYXN0 cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGFzdHIyKQorICBpZiAoLm5vdC4gYWxsb2Nh dGVkKGFzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIyKSAvPSA4KSBlcnJvciBz dG9wCisgIGFzdHIyID0gIkhJSktoaWprIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYXN0cjIpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGFz dHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhc3RyMikgLz0gOCkgZXJyb3Igc3RvcAoraWYg KGFzdHIyIC89ICJISUpLaGlqayIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49 OixraW5kPTQpLCBwb2ludGVyIDo6IHA0c3RyKDopLCBwNHN0cjIKKyEgYWxsb2NhdGUoY2hh cmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkKKyEgYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj01LGtpbmQ9NCkgOjogcDRzdHIyKQorCishIEZBSUxTIHdpdGggdmFsdWUgY2hl Y2sKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcDRzdHIpCishJG9t cCB0YXJnZXQgbWFwKGZyb206IHA0c3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0 cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBp ZiAoc2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKHA0c3RyLCAx KSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQocDRzdHIsIDEpIC89IDQpIGVycm9y IHN0b3AKKyAgcDRzdHIoOikgPSBbNF8iZjg1IiwgNF8iOGFmIiwgNF8iQSVGIl0KKyEkb21w IGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHA0c3RyKQor aWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKHA0c3Ry KSAvPSAzKSBlcnJvciBzdG9wCitpZiAoc2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3RvcAor aWYgKGxib3VuZChwNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKHVib3VuZChwNHN0 ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAoraWYgKHA0c3RyKDIpICAvPSA0XyJmODUiKSBlcnJv ciBzdG9wCitpZiAocDRzdHIoMykgIC89IDRfIjhhZiIpIGVycm9yIHN0b3AKK2lmIChwNHN0 cig0KSAgLz0gNF8iQSVGIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAodG9mcm9tOiBwNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IHA0c3RyMikK KyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVu KHA0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAorICBwNHN0cjIgPSA0XyI5ODc1YSIKKyEkb21w IGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHA0c3RyMikK K2lmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4ocDRz dHIyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAocDRzdHIyIC89IDRfIjk4NzVhIikgZXJyb3Ig c3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRhYmxlIDo6IGE0 c3RyKDopLCBhNHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03LGtpbmQ9NCkgOjog YTRzdHIoLTI6MykpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49OSxraW5kPTQpIDo6IGE0 c3RyMikKKworISBsaWJnb21wOiBUcnlpbmcgdG8gbWFwIGludG8gZGV2aWNlIFsweDEwMjdi YTAuLjB4MjUxMDUwYmI5YzllYmJhMCkgb2JqZWN0IHdoZW4gWzB4N2ZmZDAyNmU2NzA4Li4w eDdmZmQwMjZlNjcxMCkgaXMgYWxyZWFkeSBtYXBwZWQKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogYTRzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGE0c3Ry KQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAorICBpZiAobGVu KGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCisgIGlmIChzaXplKGE0c3RyKSAvPSA2KSBlcnJv ciBzdG9wCisgIGlmIChsYm91bmQoYTRzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCisgIGlm ICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgISBTZWUgUFIgZm9ydHJh bi8xMDc1MDggd2h5ICcoOiknIGlzIHJlcXVpcmVkCisgIGE0c3RyKDopID0gWzRfInNmNDU2 YXEiLCA0XyIzZHR6dTI0IiwgNF8iXzRmaDdzbSIsIDRfIj1mZjg1czciLCA0XyJqPThhZjRk IiwgNF8iLixBJUZzeiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBhNHN0cikKK2lmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJv ciBzdG9wCitpZiAobGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCitpZiAoc2l6ZShhNHN0 cikgLz0gNikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9y IHN0b3AKK2lmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChhNHN0 cigtMikgLz0gNF8ic2Y0NTZhcSIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigtMSkgLz0gNF8i M2R0enUyNCIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigwKSAgLz0gNF8iXzRmaDdzbSIpIGVy cm9yIHN0b3AKK2lmIChhNHN0cigxKSAgLz0gNF8iPWZmODVzNyIpIGVycm9yIHN0b3AKK2lm IChhNHN0cigyKSAgLz0gNF8iaj04YWY0ZCIpIGVycm9yIHN0b3AKK2lmIChhNHN0cigzKSAg Lz0gNF8iLixBJUZzeiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKHRvZnJvbTogYTRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBhNHN0cjIpCisg IGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGE0 c3RyMikgLz0gOSkgZXJyb3Igc3RvcAorICBhNHN0cjIgPSA0XyI5ODc2NWEyM2QiCishJG9t cCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhNHN0cjIp CitpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4oYTRz dHIyKSAvPSA5KSBlcnJvciBzdG9wCitpZiAoYTRzdHIyIC89IDRfIjk4NzY1YTIzZCIpIGVy cm9yIHN0b3AKKworCitkZWFsbG9jYXRlKGR0JXBjLCBkdCVwYzIpCitkZWFsbG9jYXRlKGR0 JXBjc3RyKQorZGVhbGxvY2F0ZShkdCVwY3N0cjIpCisKK2RlYWxsb2NhdGUoZHQlcGM0c3Ry KQorZGVhbGxvY2F0ZShkdCVwYzRzdHIyKQorCitkZWFsbG9jYXRlKGlwLCBpcDIsIGlhLCBp YTIpCitkZWFsbG9jYXRlKHBzdHIpCitkZWFsbG9jYXRlKHBzdHIyKQorZGVhbGxvY2F0ZShh c3RyKQorZGVhbGxvY2F0ZShhc3RyMikKKworZGVhbGxvY2F0ZShwNHN0cikKK2RlYWxsb2Nh dGUocDRzdHIyKQorZGVhbGxvY2F0ZShhNHN0cikKK2RlYWxsb2NhdGUoYTRzdHIyKQorZW5k CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0 LWVudGVyLWRhdGEtNi5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LWVudGVyLWRhdGEtNi5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjgwZDMwZWRiZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwCkBAIC0wLDAg KzEsMzkyIEBACishIENoZWNrIHRoYXQgJ21hcChhbGxvYzonIHByb3Blcmx5IHdvcmtzIHdp dGgKKyEgLSBkZWZlcnJlZC1sZW5ndGggY2hhcmFjdGVyIHN0cmluZ3MKKyEgLSBhcnJheXMg d2l0aCBhcnJheSBkZXNjcmlwdG9ycworISBGb3IgdGhvc2UsIHRoZSBhcnJheSBkZXNjcmlw dG9yIC8gc3RyaW5nIGxlbmd0aCBtdXN0IGJlIG1hcHBlZCB3aXRoICd0bzonCisKK3Byb2dy YW0gbWFpbgoraW1wbGljaXQgbm9uZQorCit0eXBlIHQKKyAgaW50ZWdlciA6OiBpYygyOjUp CisgIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCkKKyAgY2hhcmFjdGVyKGxlbj0x MSxraW5kPTQpIDo6IGNjNHN0cigzOjcpCisgIGludGVnZXIsIHBvaW50ZXIgOjogcGMoOikK KyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KQorICBjaGFyYWN0ZXIo bGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOikKK2VuZCB0eXBlIHQKKwordHlw ZSh0KSA6OiBkdAorCitpbnRlZ2VyIDo6IGlpKDUpCitjaGFyYWN0ZXIobGVuPTExKSA6OiBj bHN0cigtMToxKQorY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpCitp bnRlZ2VyLCBwb2ludGVyIDo6IGlwKDopCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBpYSg6 KQorY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3RyKDopCitjaGFyYWN0ZXIobGVu PTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDopCitjaGFyYWN0ZXIobGVuPTosa2luZD00KSwg cG9pbnRlciA6OiBwNHN0cig6KQorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRh YmxlIDo6IGE0c3RyKDopCisKK2FsbG9jYXRlKGR0JXBjKDUpKQorYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKKworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0z LGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCisKK2FsbG9jYXRlKGlwKDUpLCBpYSg4KSkK K2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjowKSkKK2FsbG9jYXRlKGNo YXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorCithbGxvY2F0ZShjaGFyYWN0ZXIobGVu PTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03LGtp bmQ9NCkgOjogYTRzdHIoLTI6MykpCisKKworISBpbnRlZ2VyIDo6IGljKDI6NSkKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVpYygzOjUpKQorZHQlaWMoMikg PSAyMgorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlaWMoMzo1KSkKKyAgaWYgKHNpemUo ZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikg ZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9wCisg IGR0JWljKDM6NSkgPSBbMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWljKDM6NSkpCitpZiAoc2l6ZShkdCVpYykg Lz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVpYywgMSkgLz0gMikgZXJyb3Igc3Rv cAoraWYgKHVib3VuZChkdCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQl aWMgLz0gWzIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AKKworISBjaGFyYWN0ZXIobGVu PTExKSA6OiBjY3N0cigzOjQpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogZHQlY2NzdHIoNDo0KSkKK2R0JWNjc3RyKDMpID0gIjEyMzQ1Njc4OTAxIgorISRvbXAg dGFyZ2V0IG1hcChhbGxvYzogZHQlY2NzdHIoNDo0KSkKKyAgaWYgKGxlbihkdCVjY3N0cikg Lz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9yIHN0 b3AKKyAgaWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGR0JWNjc3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisgIGR0JWNjc3RyKDQ6NCkg PSBbImFiY2RlZmdoaWprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGR0JWNjc3RyKDQ6NCkpCitpZiAobGVuKGR0JWNjc3RyKSAvPSAx MSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lm IChsYm91bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQl Y2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JWNjc3RyIC89IFsiMTIz NDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiXSkpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rl cihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIoMzo3KQorCishIFZhbHVlIGNoZWNrIGZhaWxz CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjNHN0cig0OjcpKQor ZHQlY2M0c3RyKDMpID0gNF8iMTIzNDU2Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBkdCVjYzRzdHIoNDo3KSkKKyAgaWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBlcnJvciBz dG9wCisgIGlmIChzaXplKGR0JWNjNHN0cikgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJv dW5kKGR0JWNjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWNj NHN0ciwgMSkgLz0gNykgZXJyb3Igc3RvcAorICBkdCVjYzRzdHIoNDo3KSA9IFs0XyJhYmNk ZWZnaGlqayIsICYKKyAgICAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFmOWcz N2dhNC4iLCAmCisgICAgICAgICAgICAgICA0XyI0NW5nd2o1NnNqMiJdCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjYzRzdHIoNDo3 KSkKK2lmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQl Y2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWNjNHN0ciwgMSkgLz0g MykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcpIGVycm9yIHN0 b3AKK2lmIChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBzdG9wCitp ZiAoZHQlY2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJyb3Igc3RvcAoraWYgKGR0 JWNjNHN0cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRz dHIoNikgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDcp IC89IDRfIjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorCishIGludGVnZXIsIHBvaW50ZXIg OjogcGMoOikKKyEgYWxsb2NhdGUoZHQlcGMoNSkpCisKKyEgbGliZ29tcDogR09NUF90YXJn ZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVwYygyOjUpKQorZHQlcGMoMSkgPSAxMQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGMoMjo1KSkKKyAgaWYgKC5ub3QuIGFzc29jaWF0 ZWQoZHQlcGMpKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjKSAvPSA1KSBlcnJvciBz dG9wCisgIGlmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVi b3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYygyOjUpID0gWzIyLCAz MywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogZHQlcGMoMjo1KSkKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjKSkgZXJy b3Igc3RvcAoraWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo ZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGMsIDEpIC89IDUp IGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkg ZXJyb3Igc3RvcAorCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcGNzdHIoOikK KyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKKworISBsaWJn b21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMAor CishIEZJWE1FOiBEaXNhYmxlZCBiZWZhdXNlIG9mIFBSMTA4ODM3CishCishISRvbXAgdGFy Z2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVwY3N0cigyOjIpKQorIWR0JXBjc3RyKDEp ID0gIjAxIgorISEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyKDI6MikpCishICBp ZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9yIHN0b3AKKyEgIGlmIChsZW4o ZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyEgIGlmIChzaXplKGR0JXBjc3RyKSAvPSAy KSBlcnJvciBzdG9wCishICBpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAxKSBlcnJvciBz dG9wCishICBpZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCishICBk dCVwY3N0cigyOjIpID0gWyJqayJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyKDI6MikpCishaWYgKC5ub3QuIGFzc29j aWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCishaWYgKGxlbihkdCVwY3N0cikgLz0gMikg ZXJyb3Igc3RvcAorIWlmIChzaXplKGR0JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCishaWYg KGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorIWlmICh1Ym91bmQoZHQl cGNzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyFpZiAoYW55IChkdCVwY3N0ciAvPSBbIjAx IiwgImprIl0pKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwg cG9pbnRlciA6OiBwYzRzdHIoOikKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9 NCkgOjogZHQlcGM0c3RyKDI6MykpCisKKyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJf ZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKyEgc3RydWN0dXJlIGVsZW1lbnQgd2hl biBvdGhlciBtYXBwZWQgZWxlbWVudHMgZnJvbSB0aGUgc2FtZSBzdHJ1Y3R1cmUgd2VyZW4n dCBtYXBwZWQgdG9nZXRoZXIgd2l0aCBpdAorCishIEZJWE1FOiBEaXNhYmxlZCBiZWZhdXNl IG9mIFBSMTA4ODM3CishCishISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBk dCVwYzRzdHIoMzozKSkKKyFkdCVwYzRzdHIoMikgPSA0XyI0NTYiCishISRvbXAgdGFyZ2V0 IG1hcChhbGxvYzogZHQlcGM0c3RyKDM6MykpCishICBpZiAoLm5vdC4gYXNzb2NpYXRlZChk dCVwYzRzdHIpKSBlcnJvciBzdG9wCishICBpZiAobGVuKGR0JXBjNHN0cikgLz0gMykgZXJy b3Igc3RvcAorISAgaWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9wCishICBp ZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHVib3Vu ZChkdCVwYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyEgIGR0JXBjNHN0cigzOjMpID0g WzRfInR6dSJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGR0JXBjNHN0cigzOjMpKQorIWlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBj NHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKGR0JXBjNHN0cikgLz0gMykgZXJyb3Igc3Rv cAorIWlmIChzaXplKGR0JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAorIWlmIChsYm91bmQo ZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChkdCVwYzRzdHIs IDEpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAoZHQlcGM0c3RyKDIpIC89IDRfIjQ1NiIpIGVy cm9yIHN0b3AKKyFpZiAoZHQlcGM0c3RyKDMpIC89IDRfInR6dSIpIGVycm9yIHN0b3AKKwor ISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQg MHgwMQorCishIGludGVnZXIgOjogaWkoNSkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKGFsbG9jOiBpaSgyOjUpKQoraWkoMSkgPSAtMQorISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogaWkoMjo1KSkKKyAgaWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxi b3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlpLCAxKSAvPSA1 KSBlcnJvciBzdG9wCisgIGlpKDI6NSkgPSBbLTIsIC0zLCAtNCwgLTVdCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaSgyOjUpKQoraWYg KHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWksIDEpIC89IDEpIGVy cm9yIHN0b3AKK2lmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkg KGlpIC89IFstMSwgLTIsIC0zLCAtNCwgLTVdKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFj dGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKGFsbG9jOiBjbHN0cigwOjEpKQorY2xzdHIoLTEpID0gIjEyMzQ1Njc4OTAxIgorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogY2xzdHIoMDoxKSkKKyAgaWYgKGxlbihjbHN0cikgLz0g MTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAg aWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChj bHN0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBjbHN0cigwOjEpID0gWyJhYmNkZWZnaGlq ayIsICJBQkNERUZHSElKSyJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBjbHN0cigwOjEpKQoraWYgKGxlbihjbHN0cikgLz0gMTEpIGVy cm9yIHN0b3AKK2lmIChzaXplKGNsc3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5k KGNsc3RyLCAxKSAvPSAtMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChjbHN0ciwgMSkgLz0g MSkgZXJyb3Igc3RvcAoraWYgKGFueSAoY2xzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNk ZWZnaGlqayIsICJBQkNERUZHSElKSyJdKSkgZXJyb3Igc3RvcAorCishIGNoYXJhY3Rlcihs ZW49MTEsa2luZD00KSA6OiBjbDRzdHIoMDozKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGNsNHN0cigxOjMpKQorY2w0c3RyKDApID0gNF8iMTIzNDU2Nzg5MDEi CishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbDRzdHIoMTozKSkKKyAgaWYgKGxlbihjbDRz dHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Ig c3RvcAorICBpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBjbDRzdHIoMTozKSA9IFs0 XyJhYmNkZWZnaGlqayIsICYKKyAgICAgICAgICAgIDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFm OWczN2dhNC4iXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogY2w0c3RyKDE6MykpCitpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0 b3AKK2lmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChjbDRz dHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBl cnJvciBzdG9wCitpZiAoY2w0c3RyKDApIC89IDRfIjEyMzQ1Njc4OTAxIikgZXJyb3Igc3Rv cAoraWYgKGNsNHN0cigxKSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0b3AKK2lmIChj bDRzdHIoMikgLz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDMp IC89IDRfImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAorCisKKyEgYWxsb2NhdGUoaXAoNSks IGlhKDgpKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlwKDI6NSkp CitpcCgxKSA9IDExCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpcCgyOjUpKQorICBpZiAo Lm5vdC4gYXNzb2NpYXRlZChpcCkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoaXApIC89IDUp IGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpcCwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBp ZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGlwKDI6NSkgPSBbMjIsIDMz LCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChmcm9tOiBpcCgyOjUpKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoaXApKSBlcnJvciBzdG9w CitpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChpcCwgMSkgLz0g MSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpcCwgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYg KGFueSAoaXAgLz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEgYWxs b2NhdGUoaXAoNSksIGlhKDgpKQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGlhKDI6OCkpCitpYSgxKSA9IDEKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlhKDI6 OCkpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoaWEpKSBlcnJvciBzdG9wCisgIGlmIChzaXpl KGlhKSAvPSA4KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9y IHN0b3AKKyAgaWYgKHVib3VuZChpYSwgMSkgLz0gOCkgZXJyb3Igc3RvcAorICBpYSgyOjgp ID0gWzIsMyw0LDUsNiw3LDhdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBpYSgyOjgpKQoraWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVy cm9yIHN0b3AKK2lmIChzaXplKGlhKSAvPSA4KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlh LCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBz dG9wCitpZiAoYW55IChpYSAvPSBbMSwyLDMsNCw1LDYsNyw4XSkpIGVycm9yIHN0b3AKKwor CishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6KQorISBhbGxvY2F0ZShj aGFyYWN0ZXIobGVuPTIpIDo6IHBzdHIoLTI6MCkpCisKKyEgbGliZ29tcDogbnZwdHhfYWxs b2MgZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISBGSVhNRTogYXJyYXkgb2Zmc2V0IHdyb25n bHkgY2FsY3VsYXRlZCBhcyBpdCB1c2VzIFRZUEVfU0laRV9VTklULCB3aGljaCBpcyBhIFNB VkVfRVhQUgorIQorISEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogcHN0cigt MTowKSkKKyFwc3RyKC0yKSA9ICIwMSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBwc3Ry KC0xOjApKQorISAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cikpIGVycm9yIHN0b3AKKyEg IGlmIChsZW4ocHN0cikgLz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHNpemUocHN0cikgLz0g MykgZXJyb3Igc3RvcAorISAgaWYgKGxib3VuZChwc3RyLCAxKSAvPSAtMikgZXJyb3Igc3Rv cAorISAgaWYgKHVib3VuZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCishICBwc3RyKC0x OjApID0gWyJqayIsICJhcSJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdldCBl eGl0IGRhdGEgbWFwKGZyb206IHBzdHIoLTE6MCkpCishaWYgKC5ub3QuIGFzc29jaWF0ZWQo cHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKHBzdHIpIC89IDIpIGVycm9yIHN0b3AKKyFp ZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCishaWYgKGxib3VuZChwc3RyLCAxKSAv PSAtMikgZXJyb3Igc3RvcAorIWlmICh1Ym91bmQocHN0ciwgMSkgLz0gMCkgZXJyb3Igc3Rv cAorIWlmIChhbnkgKHBzdHIgLz0gWyIwMSIsICJqayIsICJhcSJdKSkgZXJyb3Igc3RvcAor CisKKyEgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogYXN0cig6KQorISBhbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKKworISBsaWJnb21wOiBudnB0 eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishIEZJWE1FCishISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhc3RyKDQ6NSkpCishYXN0cigzKSA9ICIwMWRiNDUi CishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cig0OjUpKQorISAgaWYgKC5ub3QuIGFs bG9jYXRlZChhc3RyKSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihhc3RyKSAvPSA2KSBlcnJv ciBzdG9wCishICBpZiAoc2l6ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAobGJv dW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQoYXN0ciwgMSkg Lz0gNSkgZXJyb3Igc3RvcAorISEhICBhc3RyKDQ6NSkgPSBbImprJEQlUyIsICJ6dXRnNDci XQorISEkb21wIGVuZCB0YXJnZXQKKyEhISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogYXN0cig0OjUpKQorISFpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9w CishISFpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKKyFpZiAoc2l6ZShhc3RyKSAv PSAzKSBlcnJvciBzdG9wCishaWYgKGxib3VuZChhc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9w CishaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCishaWYgKGFueSAoYXN0 ciAvPSBbIjAxZGI0NSIsICJqayREJVMiLCAienV0ZzQ3Il0pKSBlcnJvciBzdG9wCishCisK KyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOikKKyEgYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkKKworISBGQUlM UyB3aXRoIHZhbHVlIGNoZWNrCisKKyEgRklYTUU6IGFycmF5IG9mZnNldCB3cm9uZ2x5IGNh bGN1bGF0ZWQgYXMgaXQgdXNlcyBUWVBFX1NJWkVfVU5JVCwgd2hpY2ggaXMgYSBTQVZFX0VY UFIKKyEKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0c3RyKDM6NCkp CishcDRzdHIoMikgPSA0XyJmODUiCishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcDRzdHIo Mzo0KSkKKyEgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Igc3RvcAorISAg aWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKHNpemUocDRzdHIpIC89 IDMpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9yIHN0 b3AKKyEgIGlmICh1Ym91bmQocDRzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKKyEgIHA0c3Ry KDM6NCkgPSBbNF8iOGFmIiwgNF8iQSVGIl0KKyEhJG9tcCBlbmQgdGFyZ2V0CishISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIoMzo0KSkKKyFpZiAoLm5vdC4gYXNz b2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJv ciBzdG9wCishaWYgKHNpemUocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAobGJvdW5k KHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChwNHN0ciwgMSkgLz0g NCkgZXJyb3Igc3RvcAorIWlmIChwNHN0cigyKSAgLz0gNF8iZjg1IikgZXJyb3Igc3RvcAor IWlmIChwNHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3RvcAorIWlmIChwNHN0cig0KSAg Lz0gNF8iQSVGIikgZXJyb3Igc3RvcAorCishIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBh bGxvY2F0YWJsZSA6OiBhNHN0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2lu ZD00KSA6OiBhNHN0cigtMjozKSkKKworISBsaWJnb21wOiBUcnlpbmcgdG8gbWFwIGludG8g ZGV2aWNlIFsweDEwMjdiYTAuLjB4MjUxMDUwYmI5YzllYmJhMCkgb2JqZWN0IHdoZW4gWzB4 N2ZmZDAyNmU2NzA4Li4weDdmZmQwMjZlNjcxMCkgaXMgYWxyZWFkeSBtYXBwZWQKKworISBG SVhNRTogRGlzYWJsZWQgYmVmYXVzZSBvZiBQUjEwODgzOAorISEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogYTRzdHIoLTE6MykpCishIWE0c3RyKC0yKSA9IDRfInNmNDU2 YXEiCishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYTRzdHIoLTE6MykpCishICBpZiAoLm5v dC4gYWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihhNHN0cikgLz0g NykgZXJyb3Igc3RvcAorISAgaWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKKyEg IGlmIChsYm91bmQoYTRzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCishICBpZiAodWJvdW5k KGE0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCishICBhNHN0cigtMTozKSA9IFs0XyIzZHR6 dTI0IiwgNF8iXzRmaDdzbSIsIDRfIj1mZjg1czciLCA0XyJqPThhZjRkIiwgNF8iLixBJUZz eiJdCishISRvbXAgZW5kIHRhcmdldAorISEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGE0c3RyKC0xOjMpKQorIWlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBz dG9wCishaWYgKGxlbihhNHN0cikgLz0gNykgZXJyb3Igc3RvcAorIWlmIChzaXplKGE0c3Ry KSAvPSA2KSBlcnJvciBzdG9wCishaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9y IHN0b3AKKyFpZiAodWJvdW5kKGE0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCishaWYgKGE0 c3RyKC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAorIWlmIChhNHN0cigtMSkgLz0g NF8iM2R0enUyNCIpIGVycm9yIHN0b3AKKyFpZiAoYTRzdHIoMCkgIC89IDRfIl80Zmg3c20i KSBlcnJvciBzdG9wCishaWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3IikgZXJyb3Igc3Rv cAorIWlmIChhNHN0cigyKSAgLz0gNF8iaj04YWY0ZCIpIGVycm9yIHN0b3AKKyFpZiAoYTRz dHIoMykgIC89IDRfIi4sQSVGc3oiKSBlcnJvciBzdG9wCisKK2RlYWxsb2NhdGUoZHQlcGMp CitkZWFsbG9jYXRlKGR0JXBjc3RyKQorCitkZWFsbG9jYXRlKGR0JXBjNHN0cikKKworZGVh bGxvY2F0ZShpcCwgaWEpCitkZWFsbG9jYXRlKHBzdHIpCitkZWFsbG9jYXRlKGFzdHIpCisK K2RlYWxsb2NhdGUocDRzdHIpCitkZWFsbG9jYXRlKGE0c3RyKQorZW5kCmRpZmYgLS1naXQg YS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEt Ny5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVy LWRhdGEtNy5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmYx MjlmNTU5MzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTcuZjkwCkBAIC0wLDAgKzEsNzggQEAKK21v ZHVsZSBtCisgIGltcGxpY2l0IG5vbmUKKyAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFi bGUgOjogc3RyQSg6KSwgc3RyQTIKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBz dHJQKDopLCBzdHJQMgorICAhJG9tcCBkZWNsYXJlIHRhcmdldCBlbnRlcihzdHJBLHN0ckEy LHN0clAsc3RyUDIpCitjb250YWlucworICBzdWJyb3V0aW5lIG9wdF9tYXAoc3RyMSwgc3Ry Miwgc3RyMykKKyAgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBzdHIxLCBz dHIyLCBzdHIzLCBzdHI0CisgICAgb3B0aW9uYWwgOjogc3RyMiwgc3RyMyAKKworICAgIGlm ICgubm90LnByZXNlbnQoc3RyMikpIGVycm9yIHN0b3AKKyAgICBpZiAocHJlc2VudChzdHIz KSkgIGVycm9yIHN0b3AKKworICAgICEkb21wIHRhcmdldCBtYXAoc3RyMSxzdHIyLHN0cjMs c3RyNCkKKyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMSkpIGVycm9yIHN0b3AKKyAgICAgIGlm IChhbGxvY2F0ZWQoc3RyMikpIGVycm9yIHN0b3AKKyAgICAgIGlmIChwcmVzZW50KHN0cjMp KSBlcnJvciBzdG9wCisgICAgICBpZiAoYWxsb2NhdGVkKHN0cjQpKSBlcnJvciBzdG9wCisg ICAgISRvbXAgZW5kIHRhcmdldAorICBlbmQKKyAgc3Vicm91dGluZSBjYWxsX29wdCgpCisg ICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogc3RyMSwgc3RyMgorICAgIGNh bGwgb3B0X21hcChzdHIxLCBzdHIyKQorICBlbmQKKyAgc3Vicm91dGluZSB0ZXN0CisgICAh JG9tcCBkZWNsYXJlIHRhcmdldAorICAgaWYgKC5ub3QuIGFsbG9jYXRlZChzdHJBKSkgZXJy b3Igc3RvcAorICAgIWlmICgubm90LiBhbGxvY2F0ZWQoc3RyQTIpKSBlcnJvciBzdG9wCisg ICBpZiAoLm5vdC4gYXNzb2NpYXRlZChzdHJQKSkgZXJyb3Igc3RvcAorICAgIWlmICgubm90 LiBhc3NvY2lhdGVkKHN0clAyKSkgZXJyb3Igc3RvcAorCisgICAgISBlbnN1cmUgbGVuZ3Ro IHdhcyB1cGRhdGVkIGFzIHdlbGwKKyAgICBpZiAobGVuKHN0ckEpIC89IDMpIGVycm9yIHN0 b3AKKyAgICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgICAgaWYgKGxlbihz dHJQKSAvPSA0KSBlcnJvciBzdG9wCisgICAgaWYgKGxlbihzdHJQMikgLz0gOCkgZXJyb3Ig c3RvcAorISAgICBpZiAoYW55IChzdHJBIC89IFsnSGF2JywgJ2UgZicsICd1biEnXSkpIGVy cm9yIHN0b3AKKyEgICAgaWYgKHN0ckEyIC89ICdIZWxsbycpIGVycm9yIHN0b3AKKyEgICAg aWYgKGFueSAoc3RyUCAvPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10pKSBlcnJvciBzdG9w CishICAgIGlmIChzdHJQMiAvPSAnVGVzdENhc2UnKSBlcnJvciBzdG9wCishCishICAgIHN0 ckEgPSBbJzEyMycsICc0NTYnLCAnNzg5J10KKyEgICAgc3RyQTIgPSAnV29ybGQnCishICAg IHN0clAgPSBbJ0FCQ0QnLCAnRUZHSCcsICdJSktMJ10KKyEgICAgc3RyUDIgPSAnUGFzc2Vk ISEnCisgIGVuZAorZW5kCisKK3Byb2dyYW0gbWFpbgorICB1c2UgbQorICBpbXBsaWNpdCBu b25lCisgIGNhbGwgY2FsbF9vcHQKKworICBzdHJBID0gWydIYXYnLCAnZSBmJywgJ3VuISdd CisgIHN0ckEyID0gJ0hlbGxvJworICBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IHN0 clAoMykpCisgIHN0clAgPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10KKyAgYWxsb2NhdGUo Y2hhcmFjdGVyKGxlbj04KSA6OiBzdHJQMikKKyAgc3RyUDIgPSAnVGVzdENhc2UnCisKKyAg ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsd2F5cywgdG86IHN0ckEsIHN0ckEyKQor ICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IHN0clAsIHN0clAyKQorICAhJG9t cCB0YXJnZXQKKyAgICBjYWxsIHRlc3QoKQorICAhJG9tcCBlbmQgdGFyZ2V0CisgICEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGFsd2F5cywgZnJvbTogc3RyQSwgc3RyQTIsIHN0clAs IHN0clAyKQorCisgIGlmIChsZW4oc3RyQSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGVu KHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsZW4oc3RyUCkgLz0gNCkgZXJyb3Ig c3RvcAorICBpZiAobGVuKHN0clAyKSAvPSA4KSBlcnJvciBzdG9wCishICBpZiAoYW55IChz dHJBIC89IFsnMTIzJywgJzQ1NicsICc3ODknXSkpIGVycm9yIHN0b3AKKyEgIGlmIChzdHJB MiAvPSAnV29ybGQnKSBlcnJvciBzdG9wCishICBpZiAoYW55KHN0clAgLz0gWydBQkNEJywg J0VGR0gnLCAnSUpLTCddKSkgZXJyb3Igc3RvcAorISAgaWYgKHN0clAyIC89ICdQYXNzZWQh IScpIGVycm9yIHN0b3AKKworISAgZGVhbGxvY2F0ZShzdHJQLCBzdHJQMiwgc3RyQSwgc3Ry QTIpCitlbmQK --------------Awz9odA0TK80zDB7NaVxU4cF--