From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 942DD3858C00; Thu, 23 Feb 2023 16:42:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 942DD3858C00 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,322,1669104000"; d="diff'?scan'208";a="101990473" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 23 Feb 2023 08:42:14 -0800 IronPort-SDR: Ciei4DMaZ3MLDvmL3yqq5eyZGvAVUyj93JYwx7lS8H94ZJz3FGXU28QXHk583ueHTgtlC/hXlU i2ASz94VmRIk8YvyBMUC3nwytWUZ7fyJmN/EvZuOjEd6tzMUjf4sRoQzLCfR1Z7tgdj/aNoXzv t3V48R9+h8FTnecdIyjIVSQAavu3G0KjXqhA0Vo6ZM1u/C01+pmK37wkvvy7TIZMeeuo/oXHxA O1j5AUIuWCOYI9JeDo3OruhJUfIQ89pSihxegUJOOzrdQcvRMRmNMJ7168folRwpT7VwBThcy5 cqk= Content-Type: multipart/mixed; boundary="------------nQxaVZ8sAG5TcExOlDGSvxlL" Message-ID: <57880257-d50f-e72b-5423-932af6c64e92@codesourcery.com> Date: Thu, 23 Feb 2023 17:42:08 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Subject: Re: [Patch] 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: In-Reply-To: X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,NICE_REPLY_A,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: --------------nQxaVZ8sAG5TcExOlDGSvxlL Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable Minor change to previous patch =E2=80=93 it did not affect the mainline bui= ld but it makes more sense this way and on OG12, i.e. with mapping allocatable components (patch posted last year in Q1 during Stage 4), it gave an ICE without this change as one '*' wasn't stripped. --- b/gcc/fortran/trans-openmp.cc +++ b/gcc/fortran/trans-openmp.cc @@ -3439,5 +3439,5 @@ && n->sym->ts.deferred) { - if (!present && !DECL_P (decl)) + if (!DECL_P (decl)) { gcc_assert (TREE_CODE (decl) =3D=3D INDIRECT_REF= ); Otherwise, the same written before applies, see below. (Side note: this patch has been committed to OG12 as http://gcc.gnu.org/g:5= 5a18d47442 ) 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 --------------nQxaVZ8sAG5TcExOlDGSvxlL Content-Type: text/x-patch; charset="UTF-8"; name="map-fixes-v2.diff" Content-Disposition: attachment; filename="map-fixes-v2.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 LmY5MDogTmV3IHRlc3QuCgogZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYyAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKwogZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjICAg ICAgICAgICAgICAgICAgICAgICAgfCAzMjMgKysrKysrKystLS0tCiBnY2MvZ2ltcGxpZnku Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICA0MiArLQogLi4uL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MCAgICAgICAgfCAgIDIgKy0K IC4uLi9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAgICAgICAgIHwg NTQwICsrKysrKysrKysrKysrKysrKysrKwogLi4uL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQt ZW50ZXItZGF0YS01LmY5MCAgICAgICAgfCA1NDAgKysrKysrKysrKysrKysrKysrKysrCiAu Li4vbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwICAgICAgICB8IDM5 MiArKysrKysrKysrKysrKysKIC4uLi9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRh dGEtNy5mOTAgICAgICAgIHwgIDc4ICsrKwogOCBmaWxlcyBjaGFuZ2VkLCAxNzgzIGluc2Vy dGlvbnMoKyksIDEzNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi90 cmFucy1kZWNsLmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtZGVjbC5jYwppbmRleCBmZjY0NTg4 Li5jNDZmZmMxIDEwMDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1kZWNsLmNjCisrKyBi L2djYy9mb3J0cmFuL3RyYW5zLWRlY2wuY2MKQEAgLTE4MjAsNiArMTgyMCw4IEBAIGdmY19n ZXRfc3ltYm9sX2RlY2wgKGdmY19zeW1ib2wgKiBzeW0pCiAgIC8qIEFkZCBhdHRyaWJ1dGVz IHRvIHZhcmlhYmxlcy4gIEZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBlbHNld2hlcmUuICAqLwog ICBhdHRyaWJ1dGVzID0gYWRkX2F0dHJpYnV0ZXNfdG9fZGVjbCAoc3ltLT5hdHRyLCBOVUxM X1RSRUUpOwogICBkZWNsX2F0dHJpYnV0ZXMgKCZkZWNsLCBhdHRyaWJ1dGVzLCAwKTsKKyAg aWYgKHN5bS0+dHMuZGVmZXJyZWQpCisgICAgZGVjbF9hdHRyaWJ1dGVzICgmbGVuZ3RoLCBh dHRyaWJ1dGVzLCAwKTsKIAogICAvKiBTeW1ib2xzIGZyb20gbW9kdWxlcyBzaG91bGQgaGF2 ZSB0aGVpciBhc3NlbWJsZXIgbmFtZXMgbWFuZ2xlZC4KICAgICAgVGhpcyBpcyBkb25lIGhl cmUgcmF0aGVyIHRoYW4gaW4gZ2ZjX2ZpbmlzaF92YXJfZGVjbCBiZWNhdXNlIGl0CmRpZmYg LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1vcGVubXAuY2MgYi9nY2MvZm9ydHJhbi90cmFu cy1vcGVubXAuY2MKaW5kZXggMmQxNmYzYi4uMTFjOWY0OSAxMDA2NDQKLS0tIGEvZ2NjL2Zv cnRyYW4vdHJhbnMtb3Blbm1wLmNjCisrKyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5j YwpAQCAtMjQwMywzMyArMjQwMyw1MCBAQCBzdGF0aWMgdmVjPHRyZWUsIHZhX2hlYXAsIHZs X2VtYmVkPiAqZG9hY3Jvc3Nfc3RlcHM7CiAvKiBUcmFuc2xhdGUgYW4gYXJyYXkgc2VjdGlv biBvciBhcnJheSBlbGVtZW50LiAgKi8KIAogc3RhdGljIHZvaWQKLWdmY190cmFuc19vbXBf YXJyYXlfc2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX25hbWVsaXN0ICpu LAotCQkJICAgICB0cmVlIGRlY2wsIGJvb2wgZWxlbWVudCwgZ29tcF9tYXBfa2luZCBwdHJf a2luZCwKLQkJCSAgICAgdHJlZSAmbm9kZSwgdHJlZSAmbm9kZTIsIHRyZWUgJm5vZGUzLCB0 cmVlICZub2RlNCkKK2dmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoc3RtdGJsb2NrX3Qg KmJsb2NrLCBnZmNfZXhlY19vcCBvcCwKKwkJCSAgICAgZ2ZjX29tcF9uYW1lbGlzdCAqbiwg dHJlZSBkZWNsLCBib29sIGVsZW1lbnQsCisJCQkgICAgIGdvbXBfbWFwX2tpbmQgcHRyX2tp bmQsIHRyZWUgJm5vZGUsIHRyZWUgJm5vZGUyLAorCQkJICAgICB0cmVlICZub2RlMywgdHJl ZSAmbm9kZTQpCiB7CiAgIGdmY19zZSBzZTsKICAgdHJlZSBwdHIsIHB0cjI7CiAgIHRyZWUg ZWxlbXN6ID0gTlVMTF9UUkVFOwogCiAgIGdmY19pbml0X3NlICgmc2UsIE5VTEwpOwotCiAg IGlmIChlbGVtZW50KQogICAgIHsKICAgICAgIGdmY19jb252X2V4cHJfcmVmZXJlbmNlICgm c2UsIG4tPmV4cHIpOwogICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAoYmxvY2ssICZz ZS5wcmUpOwogICAgICAgcHRyID0gc2UuZXhwcjsKLSAgICAgIE9NUF9DTEFVU0VfU0laRSAo bm9kZSkgPSBUWVBFX1NJWkVfVU5JVCAoVFJFRV9UWVBFIChUUkVFX1RZUEUgKHB0cikpKTsK LSAgICAgIGVsZW1zeiA9IE9NUF9DTEFVU0VfU0laRSAobm9kZSk7CiAgICAgfQogICBlbHNl CiAgICAgewogICAgICAgZ2ZjX2NvbnZfZXhwcl9kZXNjcmlwdG9yICgmc2UsIG4tPmV4cHIp OwogICAgICAgcHRyID0gZ2ZjX2NvbnZfYXJyYXlfZGF0YSAoc2UuZXhwcik7CisgICAgfQor ICBpZiAobi0+ZXhwci0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIgJiYgbi0+ZXhwci0+dHMu ZGVmZXJyZWQpCisgICAgeworICAgICAgZ2NjX2Fzc2VydCAoc2Uuc3RyaW5nX2xlbmd0aCk7 CisgICAgICB0cmVlIGxlbiA9IGdmY19ldmFsdWF0ZV9ub3cgKHNlLnN0cmluZ19sZW5ndGgs IGJsb2NrKTsKKyAgICAgIGVsZW1zeiA9IGdmY19nZXRfY2hhcl90eXBlIChuLT5leHByLT50 cy5raW5kKTsKKyAgICAgIGVsZW1zeiA9IFRZUEVfU0laRV9VTklUIChlbGVtc3opOworICAg ICAgZWxlbXN6ID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsCisJ CQkgICAgZm9sZF9jb252ZXJ0IChzaXplX3R5cGVfbm9kZSwgbGVuKSwgZWxlbXN6KTsKKyAg ICB9CisgIGlmIChlbGVtZW50KQorICAgIHsKKyAgICAgIGlmICghZWxlbXN6KQorCWVsZW1z eiA9IFRZUEVfU0laRV9VTklUIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAocHRyKSkpOworICAg ICAgT01QX0NMQVVTRV9TSVpFIChub2RlKSA9IGVsZW1zejsKKyAgICB9CisgIGVsc2UKKyAg ICB7CiAgICAgICB0cmVlIHR5cGUgPSBUUkVFX1RZUEUgKHNlLmV4cHIpOwogICAgICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoYmxvY2ssICZzZS5wcmUpOwogICAgICAgT01QX0NMQVVT RV9TSVpFIChub2RlKSA9IGdmY19mdWxsX2FycmF5X3NpemUgKGJsb2NrLCBzZS5leHByLAog CQkJCQkJICAgIEdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsKLSAgICAgIGVsZW1zeiA9 IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2VsZW1lbnRfdHlwZSAodHlwZSkpOworICAgICAg aWYgKCFlbGVtc3opCisJZWxlbXN6ID0gVFlQRV9TSVpFX1VOSVQgKGdmY19nZXRfZWxlbWVu dF90eXBlICh0eXBlKSk7CiAgICAgICBlbGVtc3ogPSBmb2xkX2NvbnZlcnQgKGdmY19hcnJh eV9pbmRleF90eXBlLCBlbGVtc3opOwogICAgICAgT01QX0NMQVVTRV9TSVpFIChub2RlKSA9 IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBlLAogCQkJCQkg ICAgT01QX0NMQVVTRV9TSVpFIChub2RlKSwgZWxlbXN6KTsKQEAgLTI0NDEsNyArMjQ1OCwx MSBAQCBnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKHN0bXRibG9ja190ICpibG9jaywg Z2ZjX29tcF9uYW1lbGlzdCAqbiwKIAogICBpZiAoUE9JTlRFUl9UWVBFX1AgKFRSRUVfVFlQ RSAoZGVjbCkpCiAgICAgICAmJiBHRkNfREVTQ1JJUFRPUl9UWVBFX1AgKFRSRUVfVFlQRSAo VFJFRV9UWVBFIChkZWNsKSkpCi0gICAgICAmJiBwdHJfa2luZCA9PSBHT01QX01BUF9QT0lO VEVSKQorICAgICAgJiYgcHRyX2tpbmQgPT0gR09NUF9NQVBfUE9JTlRFUgorICAgICAgJiYg b3AgIT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQorICAgICAgJiYgT01QX0NMQVVTRV9N QVBfS0lORCAobm9kZSkgIT0gR09NUF9NQVBfUkVMRUFTRQorICAgICAgJiYgT01QX0NMQVVT RV9NQVBfS0lORCAobm9kZSkgIT0gR09NUF9NQVBfREVMRVRFKQorCiAgICAgewogICAgICAg bm9kZTQgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQlPTVBfQ0xB VVNFX01BUCk7CkBAIC0yNDU1LDEzICsyNDc2LDEzIEBAIGdmY190cmFuc19vbXBfYXJyYXlf c2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX25hbWVsaXN0ICpuLAogCSAg ICYmIG4tPmV4cHItPnRzLmRlZmVycmVkKQogICAgIHsKICAgICAgIGdvbXBfbWFwX2tpbmQg bWFwX2tpbmQ7Ci0gICAgICBpZiAoR09NUF9NQVBfQ09QWV9UT19QIChPTVBfQ0xBVVNFX01B UF9LSU5EIChub2RlKSkpCi0JbWFwX2tpbmQgPSBHT01QX01BUF9UTzsKLSAgICAgIGVsc2Ug aWYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdPTVBfTUFQX1JFTEVBU0UKLQkg ICAgICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSkgPT0gR09NUF9NQVBfREVMRVRF KQorICAgICAgaWYgKE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpID09IEdPTVBfTUFQX0RF TEVURSkKIAltYXBfa2luZCA9IE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpOworICAgICAg ZWxzZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQQorCSAgICAgICB8fCBP TVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSA9PSBHT01QX01BUF9SRUxFQVNFKQorCW1hcF9r aW5kID0gR09NUF9NQVBfUkVMRUFTRTsKICAgICAgIGVsc2UKLQltYXBfa2luZCA9IEdPTVBf TUFQX0FMTE9DOworCW1hcF9raW5kID0gR09NUF9NQVBfVE87CiAgICAgICBnY2NfYXNzZXJ0 IChzZS5zdHJpbmdfbGVuZ3RoKTsKICAgICAgIG5vZGU0ID0gYnVpbGRfb21wX2NsYXVzZSAo aW5wdXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfTUFQKTsKICAgICAgIE9NUF9DTEFVU0VfU0VU X01BUF9LSU5EIChub2RlNCwgbWFwX2tpbmQpOwpAQCAtMjQ3Niw3ICsyNDk3LDE4IEBAIGdm Y190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21w X25hbWVsaXN0ICpuLAogICAgICAgZGVzY19ub2RlID0gYnVpbGRfb21wX2NsYXVzZSAoaW5w dXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfTUFQKTsKICAgICAgIE9NUF9DTEFVU0VfREVDTCAo ZGVzY19ub2RlKSA9IGRlY2w7CiAgICAgICBPTVBfQ0xBVVNFX1NJWkUgKGRlc2Nfbm9kZSkg PSBUWVBFX1NJWkVfVU5JVCAodHlwZSk7Ci0gICAgICBpZiAocHRyX2tpbmQgPT0gR09NUF9N QVBfQUxXQVlTX1BPSU5URVIpCisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9k ZSkgPT0gR09NUF9NQVBfREVMRVRFKQorCXsKKwkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5E IChkZXNjX25vZGUsIEdPTVBfTUFQX0RFTEVURSk7CisJICBub2RlMiA9IGRlc2Nfbm9kZTsK Kwl9CisgICAgICBlbHNlIGlmIChPTVBfQ0xBVVNFX01BUF9LSU5EIChub2RlKSA9PSBHT01Q X01BUF9SRUxFQVNFCisJICAgICAgIHx8IG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RB VEEpCisJeworCSAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGRlc2Nfbm9kZSwgR09NUF9N QVBfUkVMRUFTRSk7CisJICBub2RlMiA9IGRlc2Nfbm9kZTsKKwl9CisgICAgICBlbHNlIGlm IChwdHJfa2luZCA9PSBHT01QX01BUF9BTFdBWVNfUE9JTlRFUikKIAl7CiAJICBPTVBfQ0xB VVNFX1NFVF9NQVBfS0lORCAoZGVzY19ub2RlLCBHT01QX01BUF9UTyk7CiAJICBub2RlMiA9 IG5vZGU7CkBAIC0yNDg3LDExICsyNTE5LDExIEBAIGdmY190cmFuc19vbXBfYXJyYXlfc2Vj dGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX25hbWVsaXN0ICpuLAogCSAgT01Q X0NMQVVTRV9TRVRfTUFQX0tJTkQgKGRlc2Nfbm9kZSwgR09NUF9NQVBfVE9fUFNFVCk7CiAJ ICBub2RlMiA9IGRlc2Nfbm9kZTsKIAl9Ci0gICAgICBub2RlMyA9IGJ1aWxkX29tcF9jbGF1 c2UgKGlucHV0X2xvY2F0aW9uLAotCQkJCU9NUF9DTEFVU0VfTUFQKTsKKyAgICAgIGlmIChv cCA9PSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBKQorCXJldHVybjsKKyAgICAgIG5vZGUz ID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sIE9NUF9DTEFVU0VfTUFQKTsK ICAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgcHRyX2tpbmQpOwotICAg ICAgT01QX0NMQVVTRV9ERUNMIChub2RlMykKLQk9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0 YV9nZXQgKGRlY2wpOworICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlMykgPSBnZmNfY29u dl9kZXNjcmlwdG9yX2RhdGFfZ2V0IChkZWNsKTsKICAgICAgIC8qIFRoaXMgcHVycG9zZWx5 IGRvZXMgbm90IGluY2x1ZGUgR09NUF9NQVBfQUxXQVlTX1BPSU5URVIuICBUaGUgZXh0cmEK IAkgY2FzdCBwcmV2ZW50cyBnaW1wbGlmeS5jYyBmcm9tIHJlY29nbmlzaW5nIGl0IGFzIGJl aW5nIHBhcnQgb2YgdGhlCiAJIHN0cnVjdCAtIGFuZCBhZGRpbmcgYW4gJ2FsbG9jOiBmb3Ig dGhlICdkZXNjLmRhdGEnIHBvaW50ZXIsIHdoaWNoCkBAIC0yNTk1LDcgKzI2MjcsNyBAQCBo YW5kbGVfaXRlcmF0b3IgKGdmY19uYW1lc3BhY2UgKm5zLCBzdG10YmxvY2tfdCAqaXRlcl9i bG9jaywgdHJlZSBibG9jaykKIHN0YXRpYyB0cmVlCiBnZmNfdHJhbnNfb21wX2NsYXVzZXMg KHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAg ICAgbG9jdXMgd2hlcmUsIGJvb2wgZGVjbGFyZV9zaW1kID0gZmFsc2UsCi0JCSAgICAgICBi b29sIG9wZW5hY2MgPSBmYWxzZSkKKwkJICAgICAgIGJvb2wgb3BlbmFjYyA9IGZhbHNlLCBn ZmNfZXhlY19vcCBvcCA9IEVYRUNfTk9QKQogewogICB0cmVlIG9tcF9jbGF1c2VzID0gTlVM TF9UUkVFLCBwcmV2X2NsYXVzZXMsIGNodW5rX3NpemUsIGM7CiAgIHRyZWUgaXRlcmF0b3Ig PSBOVUxMX1RSRUU7CkBAIC0zMDI2LDYgKzMwNTgsNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVz ZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCSAg ICAgIHRyZWUgbm9kZTIgPSBOVUxMX1RSRUU7CiAJICAgICAgdHJlZSBub2RlMyA9IE5VTExf VFJFRTsKIAkgICAgICB0cmVlIG5vZGU0ID0gTlVMTF9UUkVFOworCSAgICAgIHRyZWUgbm9k ZTUgPSBOVUxMX1RSRUU7CiAKIAkgICAgICAvKiBPcGVuTVA6IGF1dG9tYXRpY2FsbHkgbWFw IHBvaW50ZXIgdGFyZ2V0cyB3aXRoIHRoZSBwb2ludGVyOwogCQkgaGVuY2UsIGFsd2F5cyB1 cGRhdGUgdGhlIGRlc2NyaXB0b3IvcG9pbnRlciBpdHNlbGYuICAqLwpAQCAtMzEzMCw2ICsz MTYzLDI0IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBn ZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgfHwgKG4tPmV4cHItPnJlZi0+dHlwZSA9 PSBSRUZfQVJSQVkKIAkJICAgICAgJiYgbi0+ZXhwci0+cmVmLT51LmFyLnR5cGUgPT0gQVJf RlVMTCkpCiAJCXsKKwkJICBnb21wX21hcF9raW5kIG1hcF9raW5kOworCQkgIHRyZWUgdHlw ZSA9IFRSRUVfVFlQRSAoZGVjbCk7CisJCSAgaWYgKG4tPnN5bS0+dHMudHlwZSA9PSBCVF9D SEFSQUNURVIKKwkJICAgICAgJiYgbi0+c3ltLT50cy5kZWZlcnJlZAorCQkgICAgICAmJiBu LT5zeW0tPmF0dHIub21wX2RlY2xhcmVfdGFyZ2V0CisJCSAgICAgICYmIChhbHdheXNfbW9k aWZpZXIgfHwgbi0+c3ltLT5hdHRyLnBvaW50ZXIpCisJCSAgICAgICYmIG9wICE9IEVYRUNf T01QX1RBUkdFVF9FWElUX0RBVEEKKwkJICAgICAgJiYgbi0+dS5tYXBfb3AgIT0gT01QX01B UF9ERUxFVEUKKwkJICAgICAgJiYgbi0+dS5tYXBfb3AgIT0gT01QX01BUF9SRUxFQVNFKQor CQkgICAgeworCQkgICAgICBnY2NfYXNzZXJ0IChuLT5zeW0tPnRzLnUuY2wtPmJhY2tlbmRf ZGVjbCk7CisJCSAgICAgIG5vZGU1ID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRp b24sIE9NUF9DTEFVU0VfTUFQKTsKKwkJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQg KG5vZGU1LCBHT01QX01BUF9BTFdBWVNfVE8pOworCQkgICAgICBPTVBfQ0xBVVNFX0RFQ0wg KG5vZGU1KSA9IG4tPnN5bS0+dHMudS5jbC0+YmFja2VuZF9kZWNsOworCQkgICAgICBPTVBf Q0xBVVNFX1NJWkUgKG5vZGU1KQorCQkJPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2NoYXJsZW5f dHlwZV9ub2RlKTsKKwkJICAgIH0KKwogCQkgIHRyZWUgcHJlc2VudCA9IGdmY19vbXBfY2hl Y2tfb3B0aW9uYWxfYXJndW1lbnQgKGRlY2wsIHRydWUpOwogCQkgIGlmIChvcGVuYWNjICYm IG4tPnN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUykKIAkJICAgIHsKQEAgLTMxNDUsMTMgKzMx OTYsMTIgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICAgICAgT01QX0NMQVVTRV9TSVpFIChub2Rl MikgPSBzaXplX2ludCAoMCk7CiAJCSAgICAgIGdvdG8gZmluYWxpemVfbWFwX2NsYXVzZTsK IAkJICAgIH0KLQkJICBlbHNlIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChkZWNs KSkKKwkJICBlbHNlIGlmIChQT0lOVEVSX1RZUEVfUCAodHlwZSkKIAkJCSAgICYmIChnZmNf b21wX3ByaXZhdGl6ZV9ieV9yZWZlcmVuY2UgKGRlY2wpCiAJCQkgICAgICAgfHwgR0ZDX0RF Q0xfR0VUX1NDQUxBUl9QT0lOVEVSIChkZWNsKQogCQkJICAgICAgIHx8IEdGQ19ERUNMX0dF VF9TQ0FMQVJfQUxMT0NBVEFCTEUgKGRlY2wpCiAJCQkgICAgICAgfHwgR0ZDX0RFQ0xfQ1JB WV9QT0lOVEVFIChkZWNsKQotCQkJICAgICAgIHx8IEdGQ19ERVNDUklQVE9SX1RZUEVfUAot CQkJCQkgICAgIChUUkVFX1RZUEUgKFRSRUVfVFlQRSAoZGVjbCkpKQorCQkJICAgICAgIHx8 IEdGQ19ERVNDUklQVE9SX1RZUEVfUCAoVFJFRV9UWVBFICh0eXBlKSkKIAkJCSAgICAgICB8 fCBuLT5zeW0tPnRzLnR5cGUgPT0gQlRfREVSSVZFRCkpCiAJCSAgICB7CiAJCSAgICAgIHRy ZWUgb3JpZ19kZWNsID0gZGVjbDsKQEAgLTMxNjIsNyArMzIxMiw3IEBAIGdmY190cmFuc19v bXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVz ZXMsCiAJCQkgdG8gYXZvaWQgYWNjZXNzaW5nIHVuZGVmaW5lZCB2YXJpYWJsZXMuICBXZSBj YW5ub3QgdXNlCiAJCQkgYSB0ZW1wb3JhcnkgdmFyaWFibGUgaGVyZSBhcyBvdGhlcndpc2Ug dGhlIHJlcGxhY2VtZW50CiAJCQkgb2YgdGhlIHZhcmlhYmxlcyBpbiBvbXAtbG93LmNjIHdp bGwgbm90IHdvcmsuICAqLwotCQkgICAgICBpZiAocHJlc2VudCAmJiBHRkNfQVJSQVlfVFlQ RV9QIChUUkVFX1RZUEUgKGRlY2wpKSkKKwkJICAgICAgaWYgKHByZXNlbnQgJiYgR0ZDX0FS UkFZX1RZUEVfUCAodHlwZSkpCiAJCQl7CiAJCQkgIHRyZWUgdG1wID0gZm9sZF9idWlsZDJf bG9jIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICAgIE1PRElGWV9FWFBSLApAQCAtMzE3 OSwyMiArMzIyOSwzMiBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpi bG9jaywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkJCQkJCSAgICAgY29uZCwgdG1w LAogCQkJCQkJCSAgICAgTlVMTF9UUkVFKSk7CiAJCQl9Ci0JCSAgICAgIG5vZGU0ID0gYnVp bGRfb21wX2NsYXVzZSAoaW5wdXRfbG9jYXRpb24sCi0JCQkJCQlPTVBfQ0xBVVNFX01BUCk7 Ci0JCSAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlNCwgR09NUF9NQVBfUE9J TlRFUik7Ci0JCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9kZTQpID0gZGVjbDsKLQkJICAg ICAgT01QX0NMQVVTRV9TSVpFIChub2RlNCkgPSBzaXplX2ludCAoMCk7CisJCSAgICAgIGlm IChvcCAhPSBFWEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBCisJCQkgICYmIG4tPnUubWFwX29w ICE9IE9NUF9NQVBfUkVMRUFTRQorCQkJICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX0RF TEVURSkKKwkJCXsKKwkJCSAgbm9kZTQgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2Nh dGlvbiwKKwkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7CisJCQkgIE9NUF9DTEFVU0VfU0VU X01BUF9LSU5EIChub2RlNCwgR09NUF9NQVBfUE9JTlRFUik7CisJCQkgIE9NUF9DTEFVU0Vf REVDTCAobm9kZTQpID0gZGVjbDsKKwkJCSAgT01QX0NMQVVTRV9TSVpFIChub2RlNCkgPSBz aXplX2ludCAoMCk7CisJCQl9CiAJCSAgICAgIGRlY2wgPSBidWlsZF9mb2xkX2luZGlyZWN0 X3JlZiAoZGVjbCk7CiAJCSAgICAgIGlmICgoVFJFRV9DT0RFIChUUkVFX1RZUEUgKG9yaWdf ZGVjbCkpID09IFJFRkVSRU5DRV9UWVBFCiAJCQkgICB8fCBnZmNfb21wX2lzX29wdGlvbmFs X2FyZ3VtZW50IChvcmlnX2RlY2wpKQogCQkJICAmJiAoR0ZDX0RFQ0xfR0VUX1NDQUxBUl9Q T0lOVEVSIChvcmlnX2RlY2wpCiAJCQkgICAgICB8fCBHRkNfREVDTF9HRVRfU0NBTEFSX0FM TE9DQVRBQkxFIChvcmlnX2RlY2wpKSkKIAkJCXsKLQkJCSAgbm9kZTMgPSBidWlsZF9vbXBf Y2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKLQkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7Ci0J CQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgR09NUF9NQVBfUE9JTlRFUik7 Ci0JCQkgIE9NUF9DTEFVU0VfREVDTCAobm9kZTMpID0gZGVjbDsKLQkJCSAgT01QX0NMQVVT RV9TSVpFIChub2RlMykgPSBzaXplX2ludCAoMCk7CisJCQkgIGlmIChvcCAhPSBFWEVDX09N UF9UQVJHRVRfRVhJVF9EQVRBCisJCQkgICAgICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQ X1JFTEVBU0UKKwkJCSAgICAgICYmIG4tPnUubWFwX29wICE9IE9NUF9NQVBfREVMRVRFKQor CQkJICAgIHsKKwkJCSAgICAgIG5vZGUzID0gYnVpbGRfb21wX2NsYXVzZSAoaW5wdXRfbG9j YXRpb24sCisJCQkJCQkJT01QX0NMQVVTRV9NQVApOworCQkJICAgICAgT01QX0NMQVVTRV9T RVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9QT0lOVEVSKTsKKwkJCSAgICAgIE9NUF9D TEFVU0VfREVDTCAobm9kZTMpID0gZGVjbDsKKwkJCSAgICAgIE9NUF9DTEFVU0VfU0laRSAo bm9kZTMpID0gc2l6ZV9pbnQgKDApOworCQkJICAgIH0KIAkJCSAgZGVjbCA9IGJ1aWxkX2Zv bGRfaW5kaXJlY3RfcmVmIChkZWNsKTsKIAkJCX0KIAkJICAgIH0KQEAgLTMyMDgsNTYgKzMy NjgsNzAgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdm Y19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJICAgICAgZ2NjX2Fzc2VydCAoUE9JTlRFUl9U WVBFX1AgKFRSRUVfVFlQRSAocHRyKSkpOwogCQkgICAgICBwdHIgPSBidWlsZF9mb2xkX2lu ZGlyZWN0X3JlZiAocHRyKTsKIAkJICAgICAgT01QX0NMQVVTRV9ERUNMIChub2RlKSA9IHB0 cjsKLQkJICAgICAgbm9kZTIgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwK LQkJCQkJCU9NUF9DTEFVU0VfTUFQKTsKLQkJICAgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJ TkQgKG5vZGUyLCBHT01QX01BUF9UT19QU0VUKTsKKwkJICAgICAgbm9kZTIgPSBidWlsZF9v bXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwgT01QX0NMQVVTRV9NQVApOwogCQkgICAgICBP TVBfQ0xBVVNFX0RFQ0wgKG5vZGUyKSA9IGRlY2w7CiAJCSAgICAgIE9NUF9DTEFVU0VfU0la RSAobm9kZTIpID0gVFlQRV9TSVpFX1VOSVQgKHR5cGUpOwotCQkgICAgICBub2RlMyA9IGJ1 aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAotCQkJCQkJT01QX0NMQVVTRV9NQVAp OwotCQkgICAgICBpZiAocHJlc2VudCkKLQkJCXsKLQkJCSAgcHRyID0gZ2ZjX2NvbnZfZGVz Y3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7Ci0JCQkgIHB0ciA9IGdmY19idWlsZF9hZGRyX2V4 cHIgKE5VTEwsIHB0cik7Ci0JCQkgIHB0ciA9IGdmY19idWlsZF9jb25kX2Fzc2lnbl9leHBy IChibG9jaywgcHJlc2VudCwgcHRyLAotCQkJCQkJCSAgICBudWxsX3BvaW50ZXJfbm9kZSk7 Ci0JCQkgIHB0ciA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmIChwdHIpOwotCQkJICBPTVBf Q0xBVVNFX0RFQ0wgKG5vZGUzKSA9IHB0cjsKLQkJCX0KKwkJICAgICAgaWYgKG4tPnUubWFw X29wID09IE9NUF9NQVBfREVMRVRFKQorCQkJbWFwX2tpbmQgPSBHT01QX01BUF9ERUxFVEU7 CisJCSAgICAgIGVsc2UgaWYgKG9wID09IEVYRUNfT01QX1RBUkdFVF9FWElUX0RBVEEKKwkJ CSAgICAgICB8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX1JFTEVBU0UpCisJCQltYXBfa2lu ZCA9IEdPTVBfTUFQX1JFTEVBU0U7CiAJCSAgICAgIGVsc2UKLQkJCU9NUF9DTEFVU0VfREVD TCAobm9kZTMpCi0JCQkgID0gZ2ZjX2NvbnZfZGVzY3JpcHRvcl9kYXRhX2dldCAoZGVjbCk7 Ci0JCSAgICAgIE9NUF9DTEFVU0VfU0laRSAobm9kZTMpID0gc2l6ZV9pbnQgKDApOwotCQkg ICAgICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9BVFRBQ0gpCi0JCQl7Ci0JCQkgIC8q IFN0YW5kYWxvbmUgYXR0YWNoIGNsYXVzZXMgdXNlZCB3aXRoIGFycmF5cyB3aXRoCi0JCQkg ICAgIGRlc2NyaXB0b3JzIG11c3QgY29weSB0aGUgZGVzY3JpcHRvciB0byB0aGUgdGFyZ2V0 LAotCQkJICAgICBlbHNlIHRoZXkgd29uJ3QgaGF2ZSBhbnl0aGluZyB0byBwZXJmb3JtIHRo ZQotCQkJICAgICBhdHRhY2htZW50IG9udG8gKHNlZSBPcGVuQUNDIDIuNiwgIjIuNi4zLiBE YXRhCi0JCQkgICAgIFN0cnVjdHVyZXMgd2l0aCBQb2ludGVycyIpLiAgKi8KLQkJCSAgT01Q X0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9BVFRBQ0gpOwotCQkJICAv KiBXZSBkb24ndCB3YW50IHRvIG1hcCBQVFIgYXQgYWxsIGluIHRoaXMgY2FzZSwgc28KLQkJ CSAgICAgZGVsZXRlIGl0cyBub2RlIGFuZCBzaHVmZmxlIHRoZSBvdGhlcnMgZG93bi4gICov Ci0JCQkgIG5vZGUgPSBub2RlMjsKLQkJCSAgbm9kZTIgPSBub2RlMzsKLQkJCSAgbm9kZTMg PSBOVUxMOwotCQkJICBnb3RvIGZpbmFsaXplX21hcF9jbGF1c2U7Ci0JCQl9Ci0JCSAgICAg IGVsc2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9NQVBfREVUQUNIKQorCQkJbWFwX2tpbmQg PSBHT01QX01BUF9UT19QU0VUOworCQkgICAgICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAo bm9kZTIsIG1hcF9raW5kKTsKKworCQkgICAgICBpZiAob3AgIT0gRVhFQ19PTVBfVEFSR0VU X0VYSVRfREFUQQorCQkJICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX0RFTEVURQorCQkJ ICAmJiBuLT51Lm1hcF9vcCAhPSBPTVBfTUFQX1JFTEVBU0UpCiAJCQl7Ci0JCQkgIE9NUF9D TEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgR09NUF9NQVBfREVUQUNIKTsKLQkJCSAgLyog U2ltaWxhcmx5IHRvIGFib3ZlLCB3ZSBkb24ndCB3YW50IHRvIHVubWFwIFBUUgotCQkJICAg ICBoZXJlLiAgKi8KLQkJCSAgbm9kZSA9IG5vZGUyOwotCQkJICBub2RlMiA9IG5vZGUzOwot CQkJICBub2RlMyA9IE5VTEw7Ci0JCQkgIGdvdG8gZmluYWxpemVfbWFwX2NsYXVzZTsKKwkJ CSAgbm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkJCSAg ICBPTVBfQ0xBVVNFX01BUCk7CisJCQkgIGlmIChwcmVzZW50KQorCQkJICAgIHsKKwkJCSAg ICAgIHB0ciA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRlY2wpOworCQkJICAg ICAgcHRyID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgcHRyKTsKKwkJCSAgICAgIHB0 ciA9IGdmY19idWlsZF9jb25kX2Fzc2lnbl9leHByICgKKwkJCQkgICAgICBibG9jaywgcHJl c2VudCwgcHRyLCBudWxsX3BvaW50ZXJfbm9kZSk7CisJCQkgICAgICBwdHIgPSBidWlsZF9m b2xkX2luZGlyZWN0X3JlZiAocHRyKTsKKwkJCSAgICAgIE9NUF9DTEFVU0VfREVDTCAobm9k ZTMpID0gcHRyOworCQkJICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIE9NUF9DTEFVU0VfREVD TCAobm9kZTMpCisJCQkgICAgICA9IGdmY19jb252X2Rlc2NyaXB0b3JfZGF0YV9nZXQgKGRl Y2wpOworCQkJICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUzKSA9IHNpemVfaW50ICgwKTsKKwor CQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9BVFRBQ0gpCisJCQkgICAgeworCQkJ ICAgICAgLyogU3RhbmRhbG9uZSBhdHRhY2ggY2xhdXNlcyB1c2VkIHdpdGggYXJyYXlzIHdp dGgKKwkJCQkgZGVzY3JpcHRvcnMgbXVzdCBjb3B5IHRoZSBkZXNjcmlwdG9yIHRvIHRoZQor CQkJCSB0YXJnZXQsIGVsc2UgdGhleSB3b24ndCBoYXZlIGFueXRoaW5nIHRvCisJCQkJIHBl cmZvcm0gdGhlIGF0dGFjaG1lbnQgb250byAoc2VlIE9wZW5BQ0MgMi42LAorCQkJCSAiMi42 LjMuIERhdGEgU3RydWN0dXJlcyB3aXRoIFBvaW50ZXJzIikuICAqLworCQkJICAgICAgT01Q X0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLCBHT01QX01BUF9BVFRBQ0gpOworCQkJICAg ICAgLyogV2UgZG9uJ3Qgd2FudCB0byBtYXAgUFRSIGF0IGFsbCBpbiB0aGlzIGNhc2UsCisJ CQkJIHNvIGRlbGV0ZSBpdHMgbm9kZSBhbmQgc2h1ZmZsZSB0aGUgb3RoZXJzCisJCQkJIGRv d24uICAqLworCQkJICAgICAgbm9kZSA9IG5vZGUyOworCQkJICAgICAgbm9kZTIgPSBub2Rl MzsKKwkJCSAgICAgIG5vZGUzID0gTlVMTDsKKwkJCSAgICAgIGdvdG8gZmluYWxpemVfbWFw X2NsYXVzZTsKKwkJCSAgICB9CisJCQkgIGVsc2UgaWYgKG4tPnUubWFwX29wID09IE9NUF9N QVBfREVUQUNIKQorCQkJICAgIHsKKwkJCSAgICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5E IChub2RlMywgR09NUF9NQVBfREVUQUNIKTsKKwkJCSAgICAgIC8qIFNpbWlsYXJseSB0byBh Ym92ZSwgd2UgZG9uJ3Qgd2FudCB0byB1bm1hcCBQVFIKKwkJCQkgaGVyZS4gICovCisJCQkg ICAgICBub2RlID0gbm9kZTI7CisJCQkgICAgICBub2RlMiA9IG5vZGUzOworCQkJICAgICAg bm9kZTMgPSBOVUxMOworCQkJICAgICAgZ290byBmaW5hbGl6ZV9tYXBfY2xhdXNlOworCQkJ ICAgIH0KKwkJCSAgZWxzZQorCQkJICAgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2Rl MywKKwkJCQkJCSAgICAgYWx3YXlzX21vZGlmaWVyCisJCQkJCQkgICAgID8gR09NUF9NQVBf QUxXQVlTX1BPSU5URVIKKwkJCQkJCSAgICAgOiBHT01QX01BUF9QT0lOVEVSKTsKIAkJCX0K LQkJICAgICAgZWxzZQotCQkJT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKG5vZGUzLAotCQkJ CQkJIGFsd2F5c19tb2RpZmllcgotCQkJCQkJID8gR09NUF9NQVBfQUxXQVlTX1BPSU5URVIK LQkJCQkJCSA6IEdPTVBfTUFQX1BPSU5URVIpOwogCiAJCSAgICAgIC8qIFdlIGhhdmUgdG8g Y2hlY2sgZm9yIG4tPnN5bS0+YXR0ci5kaW1lbnNpb24gYmVjYXVzZQogCQkJIG9mIHNjYWxh ciBjb2FycmF5cy4gICovCkBAIC0zMjczLDYgKzMzNDcsMjMgQEAgZ2ZjX3RyYW5zX29tcF9j bGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywK IAkJCSAgdGVtCiAJCQkgICAgPSBnZmNfZnVsbF9hcnJheV9zaXplICgmY29uZF9ibG9jaywg ZGVjbCwKIAkJCQkJCSAgIEdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsKKwkJCSAgdHJl ZSBlbGVtc3o7CisJCQkgIGlmIChuLT5zeW0tPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSCisJ CQkgICAgICAmJiBuLT5zeW0tPnRzLmRlZmVycmVkKQorCQkJICAgIHsKKwkJCSAgICAgIHRy ZWUgbGVuID0gbi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisJCQkgICAgICBsZW4g PSBmb2xkX2NvbnZlcnQgKHNpemVfdHlwZV9ub2RlLCBsZW4pOworCQkJICAgICAgZWxlbXN6 ID0gZ2ZjX2dldF9jaGFyX3R5cGUgKG4tPnN5bS0+dHMua2luZCk7CisJCQkgICAgICBlbGVt c3ogPSBUWVBFX1NJWkVfVU5JVCAoZWxlbXN6KTsKKwkJCSAgICAgIGVsZW1zeiA9IGZvbGRf YnVpbGQyIChNVUxUX0VYUFIsIHNpemVfdHlwZV9ub2RlLAorCQkJCQkJICAgIGxlbiwgZWxl bXN6KTsKKwkJCSAgICB9CisJCQkgIGVsc2UKKwkJCSAgICBlbGVtc3oKKwkJCSAgICAgID0g VFlQRV9TSVpFX1VOSVQgKGdmY19nZXRfZWxlbWVudF90eXBlICh0eXBlKSk7CisJCQkgIGVs ZW1zeiA9IGZvbGRfY29udmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7CisJ CQkgIHRlbSA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGdmY19hcnJheV9pbmRleF90eXBl LAorCQkJCQkgICAgIHRlbSwgZWxlbXN6KTsKIAkJCSAgZ2ZjX2FkZF9tb2RpZnkgKCZjb25k X2Jsb2NrLCBzaXplLCB0ZW0pOwogCQkJICB0aGVuX2IgPSBnZmNfZmluaXNoX2Jsb2NrICgm Y29uZF9ibG9jayk7CiAJCQkgIGdmY19pbml0X2Jsb2NrICgmY29uZF9ibG9jayk7CkBAIC0z MzAzLDYgKzMzOTQsMTIgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAq YmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJCSAgZ2ZjX2luaXRfYmxvY2sg KCZjb25kX2Jsb2NrKTsKIAkJCSAgdHJlZSBzaXplID0gZ2ZjX2Z1bGxfYXJyYXlfc2l6ZSAo JmNvbmRfYmxvY2ssIGRlY2wsCiAJCQkJCUdGQ19UWVBFX0FSUkFZX1JBTksgKHR5cGUpKTsK KwkJCSAgdHJlZSBlbGVtc3oKKwkJCSAgICA9IFRZUEVfU0laRV9VTklUIChnZmNfZ2V0X2Vs ZW1lbnRfdHlwZSAodHlwZSkpOworCQkJICBlbGVtc3ogPSBmb2xkX2NvbnZlcnQgKGdmY19h cnJheV9pbmRleF90eXBlLCBlbGVtc3opOworCQkJICBzaXplID0gZm9sZF9idWlsZDIgKE1V TFRfRVhQUiwgZ2ZjX2FycmF5X2luZGV4X3R5cGUsCisJCQkJCSAgICAgIHNpemUsIGVsZW1z eik7CisJCQkgIHNpemUgPSBnZmNfZXZhbHVhdGVfbm93IChzaXplLCAmY29uZF9ibG9jayk7 CiAJCQkgIGlmIChwcmVzZW50KQogCQkJICAgIHsKIAkJCSAgICAgIHRyZWUgdmFyID0gZ2Zj X2NyZWF0ZV92YXIgKGdmY19hcnJheV9pbmRleF90eXBlLApAQCAtMzMyMSwxNSArMzQxOCw2 IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21w X2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0g c2l6ZTsKIAkJCSAgICB9CiAJCQl9Ci0JCSAgICAgIGlmIChuLT5zeW0tPmF0dHIuZGltZW5z aW9uKQotCQkJewotCQkJICB0cmVlIGVsZW1zegotCQkJICAgID0gVFlQRV9TSVpFX1VOSVQg KGdmY19nZXRfZWxlbWVudF90eXBlICh0eXBlKSk7Ci0JCQkgIGVsZW1zeiA9IGZvbGRfY29u dmVydCAoZ2ZjX2FycmF5X2luZGV4X3R5cGUsIGVsZW1zeik7Ci0JCQkgIE9NUF9DTEFVU0Vf U0laRSAobm9kZSkKLQkJCSAgICA9IGZvbGRfYnVpbGQyIChNVUxUX0VYUFIsIGdmY19hcnJh eV9pbmRleF90eXBlLAotCQkJCQkgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpLCBlbGVtc3op OwotCQkJfQogCQkgICAgfQogCQkgIGVsc2UgaWYgKHByZXNlbnQKIAkJCSAgICYmIFRSRUVf Q09ERSAoZGVjbCkgPT0gSU5ESVJFQ1RfUkVGCkBAIC0zMzQ1LDYgKzM0MzMsMzcgQEAgZ2Zj X3RyYW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNl cyAqY2xhdXNlcywKIAkJICAgIH0KIAkJICBlbHNlCiAJCSAgICBPTVBfQ0xBVVNFX0RFQ0wg KG5vZGUpID0gZGVjbDsKKworCQkgIGlmICghbi0+c3ltLT5hdHRyLmRpbWVuc2lvbgorCQkg ICAgICAmJiBuLT5zeW0tPnRzLnR5cGUgPT0gQlRfQ0hBUkFDVEVSCisJCSAgICAgICYmIG4t PnN5bS0+dHMuZGVmZXJyZWQpCisJCSAgICB7CisJCSAgICAgIGlmICghREVDTF9QIChkZWNs KSkKKwkJCXsKKwkJCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChkZWNsKSA9PSBJTkRJUkVD VF9SRUYpOworCQkJICBkZWNsID0gVFJFRV9PUEVSQU5EIChkZWNsLCAwKTsKKwkJCX0KKwkJ ICAgICAgdHJlZSBjb25kID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVf RVhQUiwKKwkJCQkJCSAgIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJCQkJICAgZGVjbCwgbnVs bF9wb2ludGVyX25vZGUpOworCQkgICAgICBpZiAocHJlc2VudCkKKwkJCWNvbmQgPSBmb2xk X2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkJVFJVVEhfQU5ESUZfRVhQUiwK KwkJCQkJCWJvb2xlYW5fdHlwZV9ub2RlLAorCQkJCQkJcHJlc2VudCwgY29uZCk7CisJCSAg ICAgIHRyZWUgbGVuID0gbi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2RlY2w7CisJCSAgICAg IGxlbiA9IGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsIGxlbik7CisJCSAgICAgIHRy ZWUgc2l6ZSA9IGdmY19nZXRfY2hhcl90eXBlIChuLT5zeW0tPnRzLmtpbmQpOworCQkgICAg ICBzaXplID0gVFlQRV9TSVpFX1VOSVQgKHNpemUpOworCQkgICAgICBzaXplID0gZm9sZF9i dWlsZDIgKE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsIGxlbiwgc2l6ZSk7CisJCSAgICAg IHNpemUgPSBidWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkJCQkgQ09ORF9FWFBS LAorCQkJCQkJCSBzaXplX3R5cGVfbm9kZSwKKwkJCQkJCQkgY29uZCwgc2l6ZSwKKwkJCQkJ CQkgc2l6ZV96ZXJvX25vZGUpOworCQkgICAgICBzaXplID0gZ2ZjX2V2YWx1YXRlX25vdyAo c2l6ZSwgYmxvY2spOworCQkgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5vZGUpID0gc2l6ZTsK KwkJICAgIH0KIAkJfQogCSAgICAgIGVsc2UgaWYgKG4tPmV4cHIKIAkJICAgICAgICYmIG4t PmV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCkBAIC0zMzYxLDcgKzM0ODAsNyBA QCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9j bGF1c2VzICpjbGF1c2VzLAogCQkgICAgICAmJiAhKFBPSU5URVJfVFlQRV9QICh0eXBlKQog CQkJICAgJiYgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUgKHR5cGUpKSkpCiAJ CSAgICBrID0gR09NUF9NQVBfRklSU1RQUklWQVRFX1BPSU5URVI7Ci0JCSAgZ2ZjX3RyYW5z X29tcF9hcnJheV9zZWN0aW9uIChibG9jaywgbiwgZGVjbCwgZWxlbWVudCwgaywKKwkJICBn ZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBvcCwgbiwgZGVjbCwgZWxlbWVu dCwgaywKIAkJCQkJICAgICAgIG5vZGUsIG5vZGUyLCBub2RlMywgbm9kZTQpOwogCQl9CiAJ ICAgICAgZWxzZSBpZiAobi0+ZXhwcgpAQCAtMzQwOSw5ICszNTI4LDE1IEBAIGdmY190cmFu c19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNs YXVzZXMsCiAJCQkJCSAgIGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsCiAJCQkJCSAg ICAgICBzZS5zdHJpbmdfbGVuZ3RoKSwKIAkJCQkJICAgVFlQRV9TSVpFX1VOSVQgKHRtcCkp OworCQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUpCisJCQkgICAga2lu ZCA9IEdPTVBfTUFQX0RFTEVURTsKKwkJCSAgZWxzZSBpZiAob3AgPT0gRVhFQ19PTVBfVEFS R0VUX0VYSVRfREFUQSkKKwkJCSAgICBraW5kID0gR09NUF9NQVBfUkVMRUFTRTsKKwkJCSAg ZWxzZQorCQkJICAgIGtpbmQgPSBHT01QX01BUF9UTzsKIAkJCSAgbm9kZTMgPSBidWlsZF9v bXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7 Ci0JCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgR09NUF9NQVBfVE8pOwor CQkJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsIGtpbmQpOwogCQkJICBPTVBf Q0xBVVNFX0RFQ0wgKG5vZGUzKSA9IHNlLnN0cmluZ19sZW5ndGg7CiAJCQkgIE9NUF9DTEFV U0VfU0laRSAobm9kZTMpCiAJCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2NoYXJsZW5f dHlwZV9ub2RlKTsKQEAgLTM1MTUsMTEgKzM2NDAsMTcgQEAgZ2ZjX3RyYW5zX29tcF9jbGF1 c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAqY2xhdXNlcywKIAkJ CSAgICA9IGdmY19mdWxsX2FycmF5X3NpemUgKGJsb2NrLCBpbm5lciwgcmFuayk7CiAJCQkg IHRyZWUgZWxlbXN6CiAJCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2ZjX2dldF9lbGVtZW50 X3R5cGUgKHR5cGUpKTsKLQkJCSAgaWYgKEdPTVBfTUFQX0NPUFlfVE9fUCAoT01QX0NMQVVT RV9NQVBfS0lORCAobm9kZSkpKQotCQkJICAgIG1hcF9raW5kID0gR09NUF9NQVBfVE87CisJ CQkgIG1hcF9raW5kID0gT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSk7CisJCQkgIGlmIChH T01QX01BUF9DT1BZX1RPX1AgKG1hcF9raW5kKQorCQkJICAgICAgfHwgbWFwX2tpbmQgPT0g R09NUF9NQVBfQUxMT0MpCisJCQkgICAgbWFwX2tpbmQgPSAoKEdPTVBfTUFQX0FMV0FZU19Q IChtYXBfa2luZCkKKwkJCQkJIHx8IGdmY19leHByX2F0dHIgKG4tPmV4cHIpLnBvaW50ZXIp CisJCQkJCT8gR09NUF9NQVBfQUxXQVlTX1RPIDogR09NUF9NQVBfVE8pOwogCQkJICBlbHNl IGlmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX1JFTEVBU0UKIAkJCQkgICB8fCBuLT51Lm1h cF9vcCA9PSBPTVBfTUFQX0RFTEVURSkKLQkJCSAgICBtYXBfa2luZCA9IE9NUF9DTEFVU0Vf TUFQX0tJTkQgKG5vZGUpOworCQkJICAgIDsKKwkJCSAgZWxzZSBpZiAob3AgPT0gRVhFQ19P TVBfVEFSR0VUX0VYSVRfREFUQSkKKwkJCSAgICBtYXBfa2luZCA9IEdPTVBfTUFQX1JFTEVB U0U7CiAJCQkgIGVsc2UKIAkJCSAgICBtYXBfa2luZCA9IEdPTVBfTUFQX0FMTE9DOwogCQkJ ICBpZiAoIW9wZW5hY2MKQEAgLTM1NjAsNiArMzY5MSw4IEBAIGdmY190cmFuc19vbXBfY2xh dXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJ CQkgICAgICBub2RlMiA9IG5vZGU7CiAJCQkgICAgICBub2RlID0gZGVzY19ub2RlOyAgLyog UHV0IGZpcnN0LiAgKi8KIAkJCSAgICB9CisJCQkgIGlmIChvcCA9PSBFWEVDX09NUF9UQVJH RVRfRVhJVF9EQVRBKQorCQkJICAgIGdvdG8gZmluYWxpemVfbWFwX2NsYXVzZTsKIAkJCSAg bm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICBP TVBfQ0xBVVNFX01BUCk7CiAJCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywK QEAgLTM1OTAsNyArMzcyMyw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2Nr X3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAgICAgIGJvb2wgZWxl bWVudCA9IGxhc3RyZWYtPnUuYXIudHlwZSA9PSBBUl9FTEVNRU5UOwogCQkgICAgICBnb21w X21hcF9raW5kIGtpbmQgPSAob3BlbmFjYyA/IEdPTVBfTUFQX0FUVEFDSF9ERVRBQ0gKIAkJ CQkJCSAgICA6IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSKTsKLQkJICAgICAgZ2ZjX3RyYW5z X29tcF9hcnJheV9zZWN0aW9uIChibG9jaywgbiwgaW5uZXIsIGVsZW1lbnQsCisJCSAgICAg IGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoYmxvY2ssIG9wLCBuLCBpbm5lciwgZWxl bWVudCwKIAkJCQkJCSAgIGtpbmQsIG5vZGUsIG5vZGUyLCBub2RlMywKIAkJCQkJCSAgIG5v ZGU0KTsKIAkJICAgIH0KQEAgLTM2MDksNiArMzc0Miw4IEBAIGdmY190cmFuc19vbXBfY2xh dXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJ CW9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5vZGUzLCBvbXBfY2xhdXNl cyk7CiAJICAgICAgaWYgKG5vZGU0KQogCQlvbXBfY2xhdXNlcyA9IGdmY190cmFuc19hZGRf Y2xhdXNlIChub2RlNCwgb21wX2NsYXVzZXMpOworCSAgICAgIGlmIChub2RlNSkKKwkJb21w X2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZTUsIG9tcF9jbGF1c2VzKTsK IAkgICAgfQogCSAgYnJlYWs7CiAJY2FzZSBPTVBfTElTVF9UTzoKQEAgLTc0NzMsNyArNzYw OCw3IEBAIGdmY190cmFuc19vbXBfdGFyZ2V0X2V4aXRfZGF0YSAoZ2ZjX2NvZGUgKmNvZGUp CiAKICAgZ2ZjX3N0YXJ0X2Jsb2NrICgmYmxvY2spOwogICBvbXBfY2xhdXNlcyA9IGdmY190 cmFuc19vbXBfY2xhdXNlcyAoJmJsb2NrLCBjb2RlLT5leHQub21wX2NsYXVzZXMsCi0JCQkJ ICAgICAgIGNvZGUtPmxvYyk7CisJCQkJICAgICAgIGNvZGUtPmxvYywgZmFsc2UsIGZhbHNl LCBjb2RlLT5vcCk7CiAgIHN0bXQgPSBidWlsZDFfbG9jIChpbnB1dF9sb2NhdGlvbiwgT01Q X1RBUkdFVF9FWElUX0RBVEEsIHZvaWRfdHlwZV9ub2RlLAogCQkgICAgIG9tcF9jbGF1c2Vz KTsKICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmYmxvY2ssIHN0bXQpOwpkaWZmIC0tZ2l0 IGEvZ2NjL2dpbXBsaWZ5LmNjIGIvZ2NjL2dpbXBsaWZ5LmNjCmluZGV4IDk2ODQ1MTUuLjY0 OTZiOTAgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGlmeS5jYworKysgYi9nY2MvZ2ltcGxpZnku Y2MKQEAgLTEwNzA3LDcgKzEwNzA3LDcgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBfY2xhdXNlcyAo dHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIHsKICAgc3RydWN0IGdpbXBsaWZ5 X29tcF9jdHggKmN0eCwgKm91dGVyX2N0eDsKICAgdHJlZSBjOwotICB0cmVlICpwcmV2X2xp c3RfcCA9IE5VTEwsICpvcmlnX2xpc3RfcCA9IGxpc3RfcDsKKyAgdHJlZSAqb3JpZ19saXN0 X3AgPSBsaXN0X3A7CiAgIGludCBoYW5kbGVkX2RlcGVuZF9pdGVyYXRvcnMgPSAtMTsKICAg aW50IG5vd2FpdCA9IC0xOwogCkBAIC0xMTEzNCwzMSArMTExMzQsNiBAQCBnaW1wbGlmeV9z Y2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEgKnByZV9wLAogCSAg ICBkZWZhdWx0OgogCSAgICAgIGJyZWFrOwogCSAgICB9Ci0JICAvKiBGb3IgRm9ydHJhbiwg bm90IG9ubHkgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgaXMgbWFwcGVkIGJ1dCBhbHNvCi0J ICAgICB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciwgdGhlIGFycmF5IGRlc2NyaXB0b3Ig ZXRjLjsgZm9yCi0JICAgICAnZXhpdCBkYXRhJyAtIGFuZCBpbiBwYXJ0aWN1bGFyIGZvciAn ZGVsZXRlOicgLSBoYXZpbmcgYW4gJ2FsbG9jOicKLQkgICAgIGRvZXMgbm90IG1ha2Ugc2Vu c2UuICBMaWtld2lzZSwgZm9yICd1cGRhdGUnIG9ubHkgdHJhbnNmZXJyaW5nIHRoZQotCSAg ICAgZGF0YSBpdHNlbGYgaXMgbmVlZGVkIGFzIHRoZSByZXN0IGhhcyBiZWVuIGhhbmRsZWQg aW4gcHJldmlvdXMKLQkgICAgIGRpcmVjdGl2ZXMuICBIb3dldmVyLCBmb3IgJ2V4aXQgZGF0 YScsIHRoZSBhcnJheSBkZXNjcmlwdG9yIG5lZWRzCi0JICAgICB0byBiZSBkZWxldGU7IGhl bmNlLCB3ZSB0dXJuIHRoZSBNQVBfVE9fUFNFVCBpbnRvIGEgTUFQX0RFTEVURS4KLQotCSAg ICAgTk9URTogR2VuZXJhbGx5LCBpdCBpcyBub3Qgc2FmZSB0byBwZXJmb3JtICJlbnRlciBk YXRhIiBvcGVyYXRpb25zCi0JICAgICBvbiBhcnJheXMgd2hlcmUgdGhlIGRhdGEgKm9yIHRo ZSBkZXNjcmlwdG9yKiBtYXkgZ28gb3V0IG9mIHNjb3BlCi0JICAgICBiZWZvcmUgYSBjb3Jy ZXNwb25kaW5nICJleGl0IGRhdGEiIG9wZXJhdGlvbiAtLSBhbmQgc3VjaCBhCi0JICAgICBk ZXNjcmlwdG9yIG1heSBiZSBzeW50aGVzaXplZCB0ZW1wb3JhcmlseSwgZS5nLiB0byBwYXNz IGFuCi0JICAgICBleHBsaWNpdC1zaGFwZSBhcnJheSB0byBhIGZ1bmN0aW9uIGV4cGVjdGlu ZyBhbiBhc3N1bWVkLXNoYXBlCi0JICAgICBhcmd1bWVudC4gIFBlcmZvcm1pbmcgImVudGVy IGRhdGEiIGluc2lkZSB0aGUgY2FsbGVkIGZ1bmN0aW9uCi0JICAgICB3b3VsZCB0aHVzIGJl IHByb2JsZW1hdGljLiAgKi8KLQkgIGlmIChjb2RlID09IE9NUF9UQVJHRVRfRVhJVF9EQVRB Ci0JICAgICAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfVE9fUFNF VCkKLQkgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMsIE9NUF9DTEFVU0VfTUFQX0tJ TkQgKCpwcmV2X2xpc3RfcCkKLQkJCQkJPT0gR09NUF9NQVBfREVMRVRFCi0JCQkJCT8gR09N UF9NQVBfREVMRVRFIDogR09NUF9NQVBfUkVMRUFTRSk7Ci0JICBlbHNlIGlmICgoY29kZSA9 PSBPTVBfVEFSR0VUX0VYSVRfREFUQSB8fCBjb2RlID09IE9NUF9UQVJHRVRfVVBEQVRFKQot CQkgICAmJiAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfUE9JTlRFUgot CQkgICAgICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9NQVBfVE9fUFNF VCkpCi0JICAgIHJlbW92ZSA9IHRydWU7Ci0KIAkgIGlmIChyZW1vdmUpCiAJICAgIGJyZWFr OwogCSAgaWYgKERFQ0xfUCAoZGVjbCkgJiYgb3V0ZXJfY3R4ICYmIChyZWdpb25fdHlwZSAm IE9SVF9BQ0MpKQpAQCAtMTE0MTgsMjEgKzExMzkzLDYgQEAgZ2ltcGxpZnlfc2Nhbl9vbXBf Y2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIAkJICByZW1vdmUg PSB0cnVlOwogCQkgIGJyZWFrOwogCQl9Ci0KLQkgICAgICBpZiAoIXJlbW92ZQotCQkgICYm IE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSCi0J CSAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgIT0gR09NUF9NQVBfQVRUQUNIX0RFVEFD SAotCQkgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQX1RPX1BTRVQK LQkJICAmJiBPTVBfQ0xBVVNFX0NIQUlOIChjKQotCQkgICYmIE9NUF9DTEFVU0VfQ09ERSAo T01QX0NMQVVTRV9DSEFJTiAoYykpID09IE9NUF9DTEFVU0VfTUFQCi0JCSAgJiYgKChPTVBf Q0xBVVNFX01BUF9LSU5EIChPTVBfQ0xBVVNFX0NIQUlOIChjKSkKLQkJICAgICAgID09IEdP TVBfTUFQX0FMV0FZU19QT0lOVEVSKQotCQkgICAgICB8fCAoT01QX0NMQVVTRV9NQVBfS0lO RCAoT01QX0NMQVVTRV9DSEFJTiAoYykpCi0JCQkgID09IEdPTVBfTUFQX0FUVEFDSF9ERVRB Q0gpCi0JCSAgICAgIHx8IChPTVBfQ0xBVVNFX01BUF9LSU5EIChPTVBfQ0xBVVNFX0NIQUlO IChjKSkKLQkJCSAgPT0gR09NUF9NQVBfVE9fUFNFVCkpKQotCQlwcmV2X2xpc3RfcCA9IGxp c3RfcDsKLQogCSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBmbGFncyA9IEdPVkRfTUFQIHwg R09WRF9FWFBMSUNJVDsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MAppbmRleCA1ZDk3NTY2Li4x YjNjZGY5IDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v dGFyZ2V0LWVudGVyLWRhdGEtMy5mOTAKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCkBAIC0xNyw2ICsxNyw2IEBAIHZh ciVwMiA9IFs0Niw2NzksNTRdCiAgIGlmIChhbnkgKHZhciVwMSAvPSBbMjIsNTMsMjgsNiw0 XSkpIHN0b3AgMwogICBpZiAoYW55ICh2YXIlcDIgLz0gWzQ2LDY3OSw1NF0pKSBzdG9wIDQK ICEkb21wIGVuZCB0YXJnZXQKLSEhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOnZh ciVwMSwgdmFyJXAyKQorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTp2YXIlcDEs IHZhciVwMikKIGVuZAogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21w LmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MmJmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS00LmY5MApA QCAtMCwwICsxLDU0MCBAQAorISBDaGVjayB0aGF0ICdtYXAoYWxsb2M6JyBwcm9wZXJseSB3 b3JrcyB3aXRoCishIC0gZGVmZXJyZWQtbGVuZ3RoIGNoYXJhY3RlciBzdHJpbmdzCishIC0g YXJyYXlzIHdpdGggYXJyYXkgZGVzY3JpcHRvcnMKKyEgRm9yIHRob3NlLCB0aGUgYXJyYXkg ZGVzY3JpcHRvciAvIHN0cmluZyBsZW5ndGggbXVzdCBiZSBtYXBwZWQgd2l0aCAndG86Jwor Citwcm9ncmFtIG1haW4KK2ltcGxpY2l0IG5vbmUKKwordHlwZSB0CisgIGludGVnZXIgOjog aWMoMjo1KSwgaWMyCisgIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCksIGNjc3Ry MgorICBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkgOjogY2M0c3RyKDM6NyksIGNjNHN0cjIK KyAgaW50ZWdlciwgcG9pbnRlciA6OiBwYyg6KSwgcGMyCisgIGNoYXJhY3RlcihsZW49Oiks IHBvaW50ZXIgOjogcGNzdHIoOiksIHBjc3RyMgorICBjaGFyYWN0ZXIobGVuPTosa2luZD00 KSwgcG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0cjIKK2VuZCB0eXBlIHQKKwordHlwZSh0 KSA6OiBkdAorCitpbnRlZ2VyIDo6IGlpKDUpLCBpaTIKK2NoYXJhY3RlcihsZW49MTEpIDo6 IGNsc3RyKC0xOjEpLCBjbHN0cjIKK2NoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjbDRz dHIoMDozKSwgY2w0c3RyMgoraW50ZWdlciwgcG9pbnRlciA6OiBpcCg6KSwgaXAyCitpbnRl Z2VyLCBhbGxvY2F0YWJsZSA6OiBpYSg6KSwgaWEyCitjaGFyYWN0ZXIobGVuPTopLCBwb2lu dGVyIDo6IHBzdHIoOiksIHBzdHIyCitjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6 OiBhc3RyKDopLCBhc3RyMgorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjog cDRzdHIoOiksIHA0c3RyMgorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRhYmxl IDo6IGE0c3RyKDopLCBhNHN0cjIKKworYWxsb2NhdGUoZHQlcGMoNSksIGR0JXBjMikKK2Fs bG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogZHQlcGNzdHIoMikpCithbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTQpIDo6IGR0JXBjc3RyMikKKworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0z LGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUs a2luZD00KSA6OiBkdCVwYzRzdHIyKQorCithbGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwg aWEyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBwc3RyKC0yOjApKQorYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj00KSA6OiBwc3RyMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49 NikgOjogYXN0cigzOjUpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBhc3RyMikK KworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRzdHIoMjo0KSkKK2Fs bG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IHA0c3RyMikKK2FsbG9jYXRlKGNo YXJhY3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj05LGtpbmQ9NCkgOjogYTRzdHIyKQorCisKKyEgaW50ZWdlciA6OiBpYygyOjUp LCBpYzIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVpYykKKyEk b21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWljKQorICBpZiAoc2l6ZShkdCVpYykgLz0gNCkg ZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCisg IGlmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgZHQlaWMgPSBbMjIs IDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBkdCVpYykKK2lmIChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWlj LCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVpYyAvPSBbMjIsIDMzLCA0NCwg NTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6 IGR0JWljMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWljMikKKyAgZHQlaWMyID0g NDIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGR0JWljMikKK2lmIChkdCVpYzIgLz0gNDIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rl cihsZW49MTEpIDo6IGNjc3RyKDM6NCksIGNjc3RyMgorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAoYWxsb2M6IGR0JWNjc3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQl Y2NzdHIpCisgIGlmIChsZW4oZHQlY2NzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChz aXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlY2NzdHIs IDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVjY3N0ciwgMSkgLz0gNCkg ZXJyb3Igc3RvcAorICBkdCVjY3N0ciA9IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsi XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog ZHQlY2NzdHIpCitpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNp emUoZHQlY2NzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlY2NzdHIsIDEp IC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlY2NzdHIsIDEpIC89IDQpIGVycm9y IHN0b3AKK2lmIChhbnkgKGR0JWNjc3RyIC89IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hp amsiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9j OiBkdCVjY3N0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVjY3N0cjIpCisgIGlm IChsZW4oZHQlY2NzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBkdCVjY3N0cjIgPSAiQUJD REVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1h cChmcm9tOiBkdCVjY3N0cjIpCitpZiAobGVuKGR0JWNjc3RyMikgLz0gMTEpIGVycm9yIHN0 b3AKK2lmIChkdCVjY3N0cjIgLz0gIkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEg Y2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigzOjcpLCBjYzRzdHIyCisKKyEg VmFsdWUgY2hlY2sgZmFpbHMKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog ZHQlY2M0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlY2M0c3RyKQorICBpZiAo bGVuKGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2M0c3Ry KSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBl cnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9w CisgIGR0JWNjNHN0ciA9IFs0XyIxMjM0NTY3ODkwMSIsIDRfImFiY2RlZmdoaWprIiwgJgor ICAgICAgICAgICAgICAgNF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAg ICAgICAgICAgICAgIDRfIjQ1bmd3ajU2c2oyIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjNHN0cikKK2lmIChsZW4oZHQlY2M0 c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJv ciBzdG9wCitpZiAobGJvdW5kKGR0JWNjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYg KHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIo MykgLz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDQpIC89 IDRfImFiY2RlZmdoaWprIikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cig1KSAvPSA0XyJx ZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNikgLz0gNF8iYTFmOWcz N2dhNC4iKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDcpIC89IDRfIjQ1bmd3ajU2c2oy IikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0 JWNjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVjYzRzdHIyKQorICBpZiAo bGVuKGR0JWNjNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGR0JWNjNHN0cjIgPSA0XyJB QkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGR0JWNjNHN0cjIpCitpZiAobGVuKGR0JWNjNHN0cjIpIC89IDExKSBlcnJv ciBzdG9wCitpZiAoZHQlY2M0c3RyMiAvPSA0XyJBQkNERUZHSElKSyIpIGVycm9yIHN0b3AK KworCishIGludGVnZXIsIHBvaW50ZXIgOjogcGMoOiksIHBjMgorISBhbGxvY2F0ZShkdCVw Yyg1KSwgZHQlcGMyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0 YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChh bGxvYzogZHQlcGMpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYykKKyAgaWYgKC5u b3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjKSAv PSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0 b3AKKyAgaWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYyA9 IFsxMSwgMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQg ZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYykKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBj KSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKK2lmIChs Ym91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGMsIDEp IC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjIC89IFsxMSwgMjIsIDMzLCA0NCwg NTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6 IGR0JXBjMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjMikKKyAgaWYgKC5ub3Qu IGFzc29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3RvcAorICBkdCVwYzIgPSA5OQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGMyKQor aWYgKGR0JXBjMiAvPSA5OSkgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQl cGMyKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBw Y3N0cig6KSwgcGNzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogZHQlcGNz dHIoMikpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogZHQlcGNzdHIyKQorCish IGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAw eDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGNzdHIpCish JG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwY3N0cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0 ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGNzdHIpIC89IDIpIGVy cm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYg KGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0 JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGR0JXBjc3RyID0gWyIwMSIsICJqayJd CishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBk dCVwY3N0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJyb3Igc3RvcAor aWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGNzdHIp IC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGNzdHIsIDEpIC89IDEpIGVycm9y IHN0b3AKK2lmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKK2lmIChh bnkgKGR0JXBjc3RyIC89IFsiMDEiLCAiamsiXSkpIGVycm9yIHN0b3AKKworISBsaWJnb21w OiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMQorCish JG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyEkb21wIHRh cmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQl cGNzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjc3RyMikgLz0gNCkgZXJyb3Ig c3RvcAorICBkdCVwY3N0cjIgPSAiSElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyMikKK2lmICgubm90LiBhc3NvY2lh dGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGNzdHIyKSAvPSA0KSBl cnJvciBzdG9wCitpZiAoZHQlcGNzdHIyIC89ICJISUpLIikgZXJyb3Igc3RvcAorCisKKyEg Y2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcGM0c3RyKDopLCBwYzRzdHIy CishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IGR0JXBjNHN0cigyOjMp KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBkdCVwYzRzdHIyKQor CishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2lu ZCAweDAwCishIHN0cnVjdHVyZSBlbGVtZW50IHdoZW4gb3RoZXIgbWFwcGVkIGVsZW1lbnRz IGZyb20gdGhlIHNhbWUgc3RydWN0dXJlIHdlcmVuJ3QgbWFwcGVkIHRvZ2V0aGVyIHdpdGgg aXQKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQlcGM0c3RyKQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGM0c3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRl ZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBl cnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAorICBp ZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5k KGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBkdCVwYzRzdHIgPSBbNF8iNDU2 IiwgNF8idHp1Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEg bWFwKGZyb206IGR0JXBjNHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikp IGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAo c2l6ZShkdCVwYzRzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGM0c3Ry LCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykg ZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cigyKSAvPSA0XyI0NTYiKSBlcnJvciBzdG9wCitp ZiAoZHQlcGM0c3RyKDMpIC89IDRfInR6dSIpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBH T01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMQorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjNHN0cjIpCishJG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVw YzRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjNHN0cjIpIC89IDUpIGVycm9y IHN0b3AKKyAgZHQlcGM0c3RyMiA9IDRfIjk4NzY1IgorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3RyMikKK2lmICgubm90LiBh c3NvY2lhdGVkKGR0JXBjNHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjNHN0cjIp IC89IDUpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIyIC89IDRfIjk4NzY1IikgZXJyb3Ig c3RvcAorCisKKyEgaW50ZWdlciA6OiBpaSg1KSwgaWkyCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogaWkpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpaSkKKyAg aWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpaSwgMSkgLz0g MSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlpLCAxKSAvPSA1KSBlcnJvciBzdG9wCisg IGlpID0gWy0xLCAtMiwgLTMsIC00LCAtNV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRh cmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlpKQoraWYgKHNpemUoaWkpIC89IDUpIGVycm9y IHN0b3AKK2lmIChsYm91bmQoaWksIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQo aWksIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlpIC89IFstMSwgLTIsIC0zLCAt NCwgLTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGlpMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlpMikKKyAgaWkyID0gLTQxMAor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWky KQoraWYgKGlpMiAvPSAtNDEwKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTEx KSA6OiBjbHN0cigtMToxKSwgY2xzdHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cChhbGxvYzogY2xzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbHN0cikKKyAgaWYg KGxlbihjbHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2xzdHIpIC89IDMp IGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AK KyAgaWYgKHVib3VuZChjbHN0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBjbHN0ciA9IFsi MTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiLCAiQUJDREVGR0hJSksiXQorISRvbXAgZW5k IHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2xzdHIpCitpZiAo bGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2xzdHIpIC89IDMpIGVy cm9yIHN0b3AKK2lmIChsYm91bmQoY2xzdHIsIDEpIC89IC0xKSBlcnJvciBzdG9wCitpZiAo dWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAoYW55IChjbHN0ciAvPSBb IjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0pKSBlcnJvciBz dG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogY2xzdHIyKQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogY2xzdHIyKQorICBpZiAobGVuKGNsc3RyMikgLz0gMTEp IGVycm9yIHN0b3AKKyAgY2xzdHIyID0gIkFCQ0RFRmdoaWprIgorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2xzdHIyKQoraWYgKGxlbihj bHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoY2xzdHIyIC89ICJBQkNERUZnaGlqayIp IGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEsa2luZD00KSA6OiBjbDRzdHIo MDozKSwgY2w0c3RyMgorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNs NHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGNsNHN0cikKKyAgaWYgKGxlbihjbDRz dHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Ig c3RvcAorICBpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBjbDRzdHIgPSBbNF8iMTIz NDU2Nzg5MDEiLCA0XyJhYmNkZWZnaGlqayIsICYKKyAgICAgICAgICAgIDRfInFlcmZ0Y2Vh NmRzIiwgNF8iYTFmOWczN2dhNC4iXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyKQoraWYgKGxlbihjbDRzdHIpIC89IDExKSBl cnJvciBzdG9wCitpZiAoc2l6ZShjbDRzdHIpIC89IDQpIGVycm9yIHN0b3AKK2lmIChsYm91 bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGNsNHN0ciwgMSkg Lz0gMykgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigwKSAvPSA0XyIxMjM0NTY3ODkwMSIpIGVy cm9yIHN0b3AKK2lmIChjbDRzdHIoMSkgLz0gNF8iYWJjZGVmZ2hpamsiKSBlcnJvciBzdG9w CitpZiAoY2w0c3RyKDIpIC89IDRfInFlcmZ0Y2VhNmRzIikgZXJyb3Igc3RvcAoraWYgKGNs NHN0cigzKSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBjbDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogY2w0c3RyMikKKyAgaWYgKGxlbihjbDRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBj bDRzdHIyID0gNF8iQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIyKQoraWYgKGxlbihjbDRzdHIyKSAvPSAx MSkgZXJyb3Igc3RvcAoraWYgKGNsNHN0cjIgLz0gNF8iQUJDREVGR0hJSksiKSBlcnJvciBz dG9wCisKKworISBhbGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEyKQorCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlwKQorISRvbXAgdGFyZ2V0IG1hcChhbGxv YzogaXApCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Igc3RvcAorICBpZiAo c2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBl cnJvciBzdG9wCisgIGlmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaXAg PSBbMTEsIDIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZnJvbTogaXApCitpZiAoLm5vdC4gYXNzb2NpYXRlZChpcCkpIGVy cm9yIHN0b3AKK2lmIChzaXplKGlwKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlw LCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBlcnJvciBz dG9wCitpZiAoYW55IChpcCAvPSBbMTEsIDIyLCAzMywgNDQsIDU1XSkpIGVycm9yIHN0b3AK KworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBpcDIpCishJG9tcCB0YXJn ZXQgbWFwKGFsbG9jOiBpcDIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGlwMikpIGVycm9y IHN0b3AKKyAgaXAyID0gOTkKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGlwMikKK2lmIChpcDIgLz0gOTkpIGVycm9yIHN0b3AKK2lmICgu bm90LiBhc3NvY2lhdGVkKGlwMikpIGVycm9yIHN0b3AKKworCishIGFsbG9jYXRlKGlwKDUp LCBpcDIsIGlhKDgpLCBpYTIpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogaWEpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpYSkKKyAgaWYgKC5ub3QuIGFsbG9j YXRlZChpYSkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AK KyAgaWYgKGxib3VuZChpYSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlh LCAxKSAvPSA4KSBlcnJvciBzdG9wCisgIGlhID0gWzEsMiwzLDQsNSw2LDcsOF0KKyEkb21w IGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhKQoraWYg KC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlhKSAvPSA4KSBl cnJvciBzdG9wCitpZiAobGJvdW5kKGlhLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJv dW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9wCitpZiAoYW55IChpYSAvPSBbMSwyLDMsNCw1 LDYsNyw4XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFs bG9jOiBpYTIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpYTIpCisgIGlmICgubm90LiBh bGxvY2F0ZWQoaWEyKSkgZXJyb3Igc3RvcAorICBpYTIgPSAxMDIKKyEkb21wIGVuZCB0YXJn ZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhMikKK2lmIChpYTIgLz0g MTAyKSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYWxsb2NhdGVkKGlhMikpIGVycm9yIHN0b3AK KworCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6KSwgcHN0cjIKKyEg YWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBwc3RyKC0yOjApKQorISBhbGxvY2F0ZShj aGFyYWN0ZXIobGVuPTQpIDo6IHBzdHIyKQorCishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVy cm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogcHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IHBzdHIpCisgIGlmICgubm90LiBh c3NvY2lhdGVkKHBzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4ocHN0cikgLz0gMikgZXJy b3Igc3RvcAorICBpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQocHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChwc3RyLCAxKSAv PSAwKSBlcnJvciBzdG9wCisgIHBzdHIgPSBbIjAxIiwgImprIiwgImFxIl0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IHBzdHIpCitpZiAo Lm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwc3RyKSAvPSAy KSBlcnJvciBzdG9wCitpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJv dW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKHBzdHIsIDEpIC89 IDApIGVycm9yIHN0b3AKK2lmIChhbnkgKHBzdHIgLz0gWyIwMSIsICJqayIsICJhcSJdKSkg ZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHBzdHIy KQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lh dGVkKHBzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHBzdHIyKSAvPSA0KSBlcnJvciBz dG9wCisgIHBzdHIyID0gIkhJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQg ZXhpdCBkYXRhIG1hcChmcm9tOiBwc3RyMikKK2lmICgubm90LiBhc3NvY2lhdGVkKHBzdHIy KSkgZXJyb3Igc3RvcAoraWYgKGxlbihwc3RyMikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKHBz dHIyIC89ICJISUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgYWxs b2NhdGFibGUgOjogYXN0cig6KSwgYXN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02 KSA6OiBhc3RyKDM6NSkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49OCkgOjogYXN0cjIp CisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJyb3I6IG91dCBvZiBtZW1vcnkKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhc3RyKQorISRvbXAgdGFyZ2V0IG1h cChhbGxvYzogYXN0cikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyKSkgZXJyb3Igc3Rv cAorICBpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYXN0cikg Lz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGFzdHIsIDEpIC89IDMpIGVycm9yIHN0 b3AKKyAgaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGFzdHIgPSBb IjAxZGI0NSIsICJqayREJVMiLCAienV0ZzQ3Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGFzdHIpCitpZiAoLm5vdC4gYWxsb2NhdGVk KGFzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKK2lm IChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoYXN0ciwgMSkgLz0g MykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCitp ZiAoYW55IChhc3RyIC89IFsiMDFkYjQ1IiwgImprJEQlUyIsICJ6dXRnNDciXSkpIGVycm9y IHN0b3AKKworISBsaWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGFzdHIyKQorISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogYXN0cjIpCisgIGlmICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBl cnJvciBzdG9wCisgIGlmIChsZW4oYXN0cjIpIC89IDgpIGVycm9yIHN0b3AKKyAgYXN0cjIg PSAiSElKS2hpamsiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBhc3RyMikKK2lmICgubm90LiBhbGxvY2F0ZWQoYXN0cjIpKSBlcnJvciBz dG9wCitpZiAobGVuKGFzdHIyKSAvPSA4KSBlcnJvciBzdG9wCitpZiAoYXN0cjIgLz0gIkhJ SktoaWprIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBv aW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMs a2luZD00KSA6OiBwNHN0cigyOjQpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2lu ZD00KSA6OiBwNHN0cjIpCisKKyEgRkFJTFMgd2l0aCB2YWx1ZSBjaGVjaworCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChh bGxvYzogcDRzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Igc3Rv cAorICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChzaXplKHA0c3Ry KSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9y IHN0b3AKKyAgaWYgKHVib3VuZChwNHN0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorICBwNHN0 cig6KSA9IFs0XyJmODUiLCA0XyI4YWYiLCA0XyJBJUYiXQorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIpCitpZiAoLm5vdC4gYXNz b2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4ocDRzdHIpIC89IDMpIGVycm9y IHN0b3AKK2lmIChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitpZiAobGJvdW5kKHA0 c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKHA0c3RyLCAxKSAvPSA0KSBl cnJvciBzdG9wCitpZiAocDRzdHIoMikgIC89IDRfImY4NSIpIGVycm9yIHN0b3AKK2lmIChw NHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3RvcAoraWYgKHA0c3RyKDQpICAvPSA0XyJB JUYiKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog cDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcDRzdHIyKQorICBpZiAoLm5vdC4g YXNzb2NpYXRlZChwNHN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4ocDRzdHIyKSAvPSA1 KSBlcnJvciBzdG9wCisgIHA0c3RyMiA9IDRfIjk4NzVhIgorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIyKQoraWYgKC5ub3QuIGFz c29jaWF0ZWQocDRzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwNHN0cjIpIC89IDUpIGVy cm9yIHN0b3AKK2lmIChwNHN0cjIgLz0gNF8iOTg3NWEiKSBlcnJvciBzdG9wCisKKworISBj aGFyYWN0ZXIobGVuPTosa2luZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOiksIGE0c3Ry MgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkK KyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtpbmQ9NCkgOjogYTRzdHIyKQorCishIGxp YmdvbXA6IFRyeWluZyB0byBtYXAgaW50byBkZXZpY2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBi YjljOWViYmEwKSBvYmplY3Qgd2hlbiBbMHg3ZmZkMDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEw KSBpcyBhbHJlYWR5IG1hcHBlZAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGE0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYTRzdHIpCisgIGlmICgubm90 LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYTRzdHIpIC89IDcp IGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKKyAgaWYg KGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChhNHN0 ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICAhIFNlZSBQUiBmb3J0cmFuLzEwNzUwOCB3aHkg Jyg6KScgaXMgcmVxdWlyZWQKKyAgYTRzdHIoOikgPSBbNF8ic2Y0NTZhcSIsIDRfIjNkdHp1 MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVzNyIsIDRfImo9OGFmNGQiLCA0XyIuLEElRnN6 Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGE0c3RyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cikpIGVycm9yIHN0b3AKK2lmIChs ZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKK2lmIChzaXplKGE0c3RyKSAvPSA2KSBlcnJv ciBzdG9wCitpZiAobGJvdW5kKGE0c3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAoraWYgKHVi b3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGE0c3RyKC0yKSAvPSA0XyJz ZjQ1NmFxIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKC0xKSAvPSA0XyIzZHR6dTI0IikgZXJy b3Igc3RvcAoraWYgKGE0c3RyKDApICAvPSA0XyJfNGZoN3NtIikgZXJyb3Igc3RvcAoraWYg KGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDIpICAv PSA0XyJqPThhZjRkIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDMpICAvPSA0XyIuLEElRnN6 IikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGE0 c3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGE0c3RyMikKKyAgaWYgKC5ub3QuIGFs bG9jYXRlZChhNHN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYTRzdHIyKSAvPSA5KSBl cnJvciBzdG9wCisgIGE0c3RyMiA9IDRfIjk4NzY1YTIzZCIKKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGE0c3RyMikKK2lmICgubm90LiBh bGxvY2F0ZWQoYTRzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhNHN0cjIpIC89IDkpIGVy cm9yIHN0b3AKK2lmIChhNHN0cjIgLz0gNF8iOTg3NjVhMjNkIikgZXJyb3Igc3RvcAorCisK K2RlYWxsb2NhdGUoZHQlcGMsIGR0JXBjMikKK2RlYWxsb2NhdGUoZHQlcGNzdHIpCitkZWFs bG9jYXRlKGR0JXBjc3RyMikKKworZGVhbGxvY2F0ZShkdCVwYzRzdHIpCitkZWFsbG9jYXRl KGR0JXBjNHN0cjIpCisKK2RlYWxsb2NhdGUoaXAsIGlwMiwgaWEsIGlhMikKK2RlYWxsb2Nh dGUocHN0cikKK2RlYWxsb2NhdGUocHN0cjIpCitkZWFsbG9jYXRlKGFzdHIpCitkZWFsbG9j YXRlKGFzdHIyKQorCitkZWFsbG9jYXRlKHA0c3RyKQorZGVhbGxvY2F0ZShwNHN0cjIpCitk ZWFsbG9jYXRlKGE0c3RyKQorZGVhbGxvY2F0ZShhNHN0cjIpCitlbmQKZGlmZiAtLWdpdCBh L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS01 LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXIt ZGF0YS01LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjc1OTM0 Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L3RhcmdldC1lbnRlci1kYXRhLTUuZjkwCkBAIC0wLDAgKzEsNTQwIEBACishIENoZWNrIHRo YXQgJ21hcCgodG8pZnJvbTonIHByb3Blcmx5IHdvcmtzIHdpdGgKKyEgLSBkZWZlcnJlZC1s ZW5ndGggY2hhcmFjdGVyIHN0cmluZ3MKKyEgLSBhcnJheXMgd2l0aCBhcnJheSBkZXNjcmlw dG9ycworISBGb3IgdGhvc2UsIHRoZSBhcnJheSBkZXNjcmlwdG9yIC8gc3RyaW5nIGxlbmd0 aCBtdXN0IGJlIG1hcHBlZCB3aXRoICd0bzonCisKK3Byb2dyYW0gbWFpbgoraW1wbGljaXQg bm9uZQorCit0eXBlIHQKKyAgaW50ZWdlciA6OiBpYygyOjUpLCBpYzIKKyAgY2hhcmFjdGVy KGxlbj0xMSkgOjogY2NzdHIoMzo0KSwgY2NzdHIyCisgIGNoYXJhY3RlcihsZW49MTEsa2lu ZD00KSA6OiBjYzRzdHIoMzo3KSwgY2M0c3RyMgorICBpbnRlZ2VyLCBwb2ludGVyIDo6IHBj KDopLCBwYzIKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwY3N0cig6KSwgcGNz dHIyCisgIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KSwg cGM0c3RyMgorZW5kIHR5cGUgdAorCit0eXBlKHQpIDo6IGR0CisKK2ludGVnZXIgOjogaWko NSksIGlpMgorY2hhcmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSksIGNsc3RyMgorY2hh cmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpLCBjbDRzdHIyCitpbnRlZ2Vy LCBwb2ludGVyIDo6IGlwKDopLCBpcDIKK2ludGVnZXIsIGFsbG9jYXRhYmxlIDo6IGlhKDop LCBpYTIKK2NoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6KSwgcHN0cjIKK2No YXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOiksIGFzdHIyCitjaGFyYWN0 ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwNHN0cig6KSwgcDRzdHIyCitjaGFyYWN0 ZXIobGVuPTosa2luZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOiksIGE0c3RyMgorCith bGxvY2F0ZShkdCVwYyg1KSwgZHQlcGMyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6 OiBkdCVwY3N0cigyKSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogZHQlcGNzdHIy KQorCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRzdHIoMjoz KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IGR0JXBjNHN0cjIpCisK K2FsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCithbGxvY2F0ZShjaGFyYWN0ZXIo bGVuPTIpIDo6IHBzdHIoLTI6MCkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IHBz dHIyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkpCithbGxvY2F0 ZShjaGFyYWN0ZXIobGVuPTgpIDo6IGFzdHIyKQorCithbGxvY2F0ZShjaGFyYWN0ZXIobGVu PTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj01LGtp bmQ9NCkgOjogcDRzdHIyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03LGtpbmQ9NCkgOjog YTRzdHIoLTI6MykpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTksa2luZD00KSA6OiBhNHN0 cjIpCisKKworISBpbnRlZ2VyIDo6IGljKDI6NSksIGljMgorCishJG9tcCB0YXJnZXQgZW50 ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVpYykKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQl aWMpCisgIGlmIChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQo ZHQlaWMsIDEpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVpYywgMSkgLz0g NSkgZXJyb3Igc3RvcAorICBkdCVpYyA9IFsyMiwgMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0 YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWljKQoraWYgKHNp emUoZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlaWMsIDEpIC89IDIp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lm IChhbnkgKGR0JWljIC89IFsyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JWljMikKKyEkb21wIHRhcmdldCBt YXAoZnJvbTogZHQlaWMyKQorICBkdCVpYzIgPSA0MgorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMyKQoraWYgKGR0JWljMiAvPSA0 MikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2NzdHIoMzo0KSwg Y2NzdHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JWNjc3Ry KQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVjY3N0cikKKyAgaWYgKGxlbihkdCVjY3N0 cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9y IHN0b3AKKyAgaWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBp ZiAodWJvdW5kKGR0JWNjc3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisgIGR0JWNjc3RyID0g WyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjY3N0cikKK2lmIChsZW4oZHQlY2Nz dHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVjY3N0cikgLz0gMikgZXJyb3Ig c3RvcAoraWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVi b3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlY2NzdHIg Lz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdKSkgZXJyb3Igc3RvcAorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVjY3N0cjIpCishJG9tcCB0YXJn ZXQgbWFwKGZyb206IGR0JWNjc3RyMikKKyAgaWYgKGxlbihkdCVjY3N0cjIpIC89IDExKSBl cnJvciBzdG9wCisgIGR0JWNjc3RyMiA9ICJBQkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJn ZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjc3RyMikKK2lmIChs ZW4oZHQlY2NzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGR0JWNjc3RyMiAvPSAiQUJD REVGR0hJSksiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkg OjogY2M0c3RyKDM6NyksIGNjNHN0cjIKKworISBWYWx1ZSBjaGVjayBmYWlscworISRvbXAg dGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlY2M0c3RyKQorISRvbXAgdGFyZ2V0 IG1hcChmcm9tOiBkdCVjYzRzdHIpCisgIGlmIChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJy b3Igc3RvcAorICBpZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYg KGxib3VuZChkdCVjYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChk dCVjYzRzdHIsIDEpIC89IDcpIGVycm9yIHN0b3AKKyAgZHQlY2M0c3RyID0gWzRfIjEyMzQ1 Njc4OTAxIiwgNF8iYWJjZGVmZ2hpamsiLCAmCisgICAgICAgICAgICAgICA0XyJxZXJmdGNl YTZkcyIsIDRfImExZjlnMzdnYTQuIiwgJgorICAgICAgICAgICAgICAgNF8iNDVuZ3dqNTZz ajIiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogZHQlY2M0c3RyKQoraWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBlcnJvciBzdG9wCitp ZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlY2M0 c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNjNHN0ciwgMSkgLz0g NykgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cigzKSAvPSA0XyIxMjM0NTY3ODkwMSIpIGVy cm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNCkgLz0gNF8iYWJjZGVmZ2hpamsiKSBlcnJvciBz dG9wCitpZiAoZHQlY2M0c3RyKDUpIC89IDRfInFlcmZ0Y2VhNmRzIikgZXJyb3Igc3RvcAor aWYgKGR0JWNjNHN0cig2KSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVycm9yIHN0b3AKK2lmIChk dCVjYzRzdHIoNykgLz0gNF8iNDVuZ3dqNTZzajIiKSBlcnJvciBzdG9wCisKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JWNjNHN0cjIpCishJG9tcCB0YXJnZXQg bWFwKGZyb206IGR0JWNjNHN0cjIpCisgIGlmIChsZW4oZHQlY2M0c3RyMikgLz0gMTEpIGVy cm9yIHN0b3AKKyAgZHQlY2M0c3RyMiA9IDRfIkFCQ0RFRkdISUpLIgorISRvbXAgZW5kIHRh cmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2M0c3RyMikKK2lm IChsZW4oZHQlY2M0c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIyIC89 IDRfIkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdlciwgcG9pbnRlciA6 OiBwYyg6KSwgcGMyCishIGFsbG9jYXRlKGR0JXBjKDUpLCBkdCVwYzIpCisKKyEgbGliZ29t cDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGMpCishJG9tcCB0YXJn ZXQgbWFwKGZyb206IGR0JXBjKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYykpIGVy cm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxi b3VuZChkdCVwYywgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjLCAx KSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JXBjID0gWzExLCAyMiwgMzMsIDQ0LCA1NV0KKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBj KQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCitpZiAoc2l6ZShk dCVwYykgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVwYywgMSkgLz0gMSkgZXJy b3Igc3RvcAoraWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFu eSAoZHQlcGMgLz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JXBjMikKKyEkb21wIHRhcmdldCBt YXAoZnJvbTogZHQlcGMyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzIpKSBlcnJv ciBzdG9wCisgIGR0JXBjMiA9IDk5CishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQg ZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzIpCitpZiAoZHQlcGMyIC89IDk5KSBlcnJvciBz dG9wCitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzIpKSBlcnJvciBzdG9wCisKKworISBj aGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBjc3RyKDopLCBwY3N0cjIKKyEgYWxsb2Nh dGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKKyEgYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisKKyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50 ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKHRvZnJvbTogZHQlcGNzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0 JXBjc3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9yIHN0b3AK KyAgaWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVw Y3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAx KSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVycm9yIHN0 b3AKKyAgZHQlcGNzdHIgPSBbIjAxIiwgImprIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyKQoraWYgKC5ub3QuIGFzc29j aWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBjc3RyKSAvPSAyKSBl cnJvciBzdG9wCitpZiAoc2l6ZShkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKGxi b3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVwY3N0 ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlcGNzdHIgLz0gWyIwMSIsICJq ayJdKSkgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRf ZGF0YSB1bmhhbmRsZWQga2luZCAweDAxCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cCh0b2Zyb206IGR0JXBjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGNzdHIy KQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cjIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4oZHQlcGNzdHIyKSAvPSA0KSBlcnJvciBzdG9wCisgIGR0JXBjc3RyMiA9ICJISUpL IgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog ZHQlcGNzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIyKSkgZXJyb3Igc3Rv cAoraWYgKGxlbihkdCVwY3N0cjIpIC89IDQpIGVycm9yIHN0b3AKK2lmIChkdCVwY3N0cjIg Lz0gIkhJSksiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwg cG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxl bj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCishIGFsbG9jYXRlKGNoYXJhY3Rlcihs ZW49NSxraW5kPTQpIDo6IGR0JXBjNHN0cjIpCisKKyEgbGliZ29tcDogR09NUF90YXJnZXRf ZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGM0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9t OiBkdCVwYzRzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9y IHN0b3AKKyAgaWYgKGxlbihkdCVwYzRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHNp emUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGM0c3Ry LCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGM0c3RyLCAxKSAvPSAz KSBlcnJvciBzdG9wCisgIGR0JXBjNHN0ciA9IFs0XyI0NTYiLCA0XyJ0enUiXQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3Ry KQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Igc3RvcAoraWYgKGxl bihkdCVwYzRzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0JXBjNHN0cikgLz0g MikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89IDIpIGVycm9yIHN0 b3AKK2lmICh1Ym91bmQoZHQlcGM0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoZHQl cGM0c3RyKDIpIC89IDRfIjQ1NiIpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIoMykgLz0g NF8idHp1IikgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4 aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAxCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcCh0b2Zyb206IGR0JXBjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JXBj NHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIpKSBlcnJvciBzdG9w CisgIGlmIChsZW4oZHQlcGM0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVwYzRzdHIy ID0gNF8iOTg3NjUiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBkdCVwYzRzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3Ry MikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGM0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAor aWYgKGR0JXBjNHN0cjIgLz0gNF8iOTg3NjUiKSBlcnJvciBzdG9wCisKKworISBpbnRlZ2Vy IDo6IGlpKDUpLCBpaTIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTog aWkpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlpKQorICBpZiAoc2l6ZShpaSkgLz0gNSkg ZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlm ICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaWkgPSBbLTEsIC0yLCAtMywg LTQsIC01XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAo ZnJvbTogaWkpCitpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChp aSwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpaSwgMSkgLz0gNSkgZXJyb3Ig c3RvcAoraWYgKGFueSAoaWkgLz0gWy0xLCAtMiwgLTMsIC00LCAtNV0pKSBlcnJvciBzdG9w CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGlpMikKKyEkb21wIHRh cmdldCBtYXAoZnJvbTogaWkyKQorICBpaTIgPSAtNDEwCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaTIpCitpZiAoaWkyIC89IC00MTAp IGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNsc3RyKC0xOjEpLCBj bHN0cjIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogY2xzdHIpCish JG9tcCB0YXJnZXQgbWFwKGZyb206IGNsc3RyKQorICBpZiAobGVuKGNsc3RyKSAvPSAxMSkg ZXJyb3Igc3RvcAorICBpZiAoc2l6ZShjbHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAo bGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGNsc3Ry LCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGNsc3RyID0gWyIxMjM0NTY3ODkwMSIsICJhYmNk ZWZnaGlqayIsICJBQkNERUZHSElKSyJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbHN0cikKK2lmIChsZW4oY2xzdHIpIC89IDExKSBl cnJvciBzdG9wCitpZiAoc2l6ZShjbHN0cikgLz0gMykgZXJyb3Igc3RvcAoraWYgKGxib3Vu ZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoY2xzdHIsIDEpIC89 IDEpIGVycm9yIHN0b3AKK2lmIChhbnkgKGNsc3RyIC89IFsiMTIzNDU2Nzg5MDEiLCAiYWJj ZGVmZ2hpamsiLCAiQUJDREVGR0hJSksiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0 IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogY2xzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9t OiBjbHN0cjIpCisgIGlmIChsZW4oY2xzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBjbHN0 cjIgPSAiQUJDREVGZ2hpamsiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBjbHN0cjIpCitpZiAobGVuKGNsc3RyMikgLz0gMTEpIGVycm9y IHN0b3AKK2lmIChjbHN0cjIgLz0gIkFCQ0RFRmdoaWprIikgZXJyb3Igc3RvcAorCisKKyEg Y2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpLCBjbDRzdHIyCisKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGNsNHN0cikKKyEkb21wIHRhcmdl dCBtYXAoZnJvbTogY2w0c3RyKQorICBpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0 b3AKKyAgaWYgKHNpemUoY2w0c3RyKSAvPSA0KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQo Y2w0c3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoY2w0c3RyLCAxKSAv PSAzKSBlcnJvciBzdG9wCisgIGNsNHN0ciA9IFs0XyIxMjM0NTY3ODkwMSIsIDRfImFiY2Rl ZmdoaWprIiwgJgorICAgICAgICAgICAgNF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0 LiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBjbDRzdHIpCitpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChzaXpl KGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChjbDRzdHIsIDEpIC89IDAp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitp ZiAoY2w0c3RyKDApIC89IDRfIjEyMzQ1Njc4OTAxIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0 cigxKSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMikgLz0g NF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDMpIC89IDRfImExZjln MzdnYTQuIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9m cm9tOiBjbDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBjbDRzdHIyKQorICBpZiAo bGVuKGNsNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGNsNHN0cjIgPSA0XyJBQkNERUZH SElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGNsNHN0cjIpCitpZiAobGVuKGNsNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAo Y2w0c3RyMiAvPSA0XyJBQkNERUZHSElKSyIpIGVycm9yIHN0b3AKKworCishIGFsbG9jYXRl KGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cCh0b2Zyb206IGlwKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBpcCkKKyAgaWYgKC5ub3Qu IGFzc29jaWF0ZWQoaXApKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGlwKSAvPSA1KSBlcnJv ciBzdG9wCisgIGlmIChsYm91bmQoaXAsIDEpIC89IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVi b3VuZChpcCwgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBpcCA9IFsxMSwgMjIsIDMzLCA0NCwg NTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9t OiBpcCkKK2lmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Igc3RvcAoraWYgKHNpemUo aXApIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaXAsIDEpIC89IDEpIGVycm9yIHN0 b3AKK2lmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlwIC89 IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50 ZXIgZGF0YSBtYXAodG9mcm9tOiBpcDIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlwMikK KyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoaXAyKSkgZXJyb3Igc3RvcAorICBpcDIgPSA5OQor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaXAy KQoraWYgKGlwMiAvPSA5OSkgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFzc29jaWF0ZWQoaXAy KSkgZXJyb3Igc3RvcAorCisKKyEgYWxsb2NhdGUoaXAoNSksIGlwMiwgaWEoOCksIGlhMikK KworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogaWEpCishJG9tcCB0YXJn ZXQgbWFwKGZyb206IGlhKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGlhKSkgZXJyb3Igc3Rv cAorICBpZiAoc2l6ZShpYSkgLz0gOCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlhLCAx KSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaWEsIDEpIC89IDgpIGVycm9yIHN0 b3AKKyAgaWEgPSBbMSwyLDMsNCw1LDYsNyw4XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWEpCitpZiAoLm5vdC4gYWxsb2NhdGVkKGlh KSkgZXJyb3Igc3RvcAoraWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AKK2lmIChsYm91 bmQoaWEsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWEsIDEpIC89IDgpIGVy cm9yIHN0b3AKK2lmIChhbnkgKGlhIC89IFsxLDIsMyw0LDUsNiw3LDhdKSkgZXJyb3Igc3Rv cAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBpYTIpCishJG9tcCB0 YXJnZXQgbWFwKGZyb206IGlhMikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChpYTIpKSBlcnJv ciBzdG9wCisgIGlhMiA9IDEwMgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogaWEyKQoraWYgKGlhMiAvPSAxMDIpIGVycm9yIHN0b3AKK2lm ICgubm90LiBhbGxvY2F0ZWQoaWEyKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxl bj06KSwgcG9pbnRlciA6OiBwc3RyKDopLCBwc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIo bGVuPTIpIDo6IHBzdHIoLTI6MCkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjog cHN0cjIpCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJyb3I6IG91dCBvZiBtZW1vcnkK KworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcHN0cikKKyEkb21wIHRh cmdldCBtYXAoZnJvbTogcHN0cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cikpIGVy cm9yIHN0b3AKKyAgaWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChzaXpl KHBzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChwc3RyLCAxKSAvPSAtMikg ZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKKyAg cHN0ciA9IFsiMDEiLCAiamsiLCAiYXEiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKHBz dHIpKSBlcnJvciBzdG9wCitpZiAobGVuKHBzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChz aXplKHBzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQocHN0ciwgMSkgLz0gLTIp IGVycm9yIHN0b3AKK2lmICh1Ym91bmQocHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAoraWYg KGFueSAocHN0ciAvPSBbIjAxIiwgImprIiwgImFxIl0pKSBlcnJvciBzdG9wCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IHBzdHIyKQorISRvbXAgdGFyZ2V0IG1h cChmcm9tOiBwc3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cjIpKSBlcnJvciBz dG9wCisgIGlmIChsZW4ocHN0cjIpIC89IDQpIGVycm9yIHN0b3AKKyAgcHN0cjIgPSAiSElK SyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IHBzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cjIpKSBlcnJvciBzdG9wCitpZiAo bGVuKHBzdHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocHN0cjIgLz0gIkhJSksiKSBlcnJv ciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBhc3RyKDop LCBhc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFzdHIoMzo1KSkKKyEg YWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBhc3RyMikKKworISBsaWJnb21wOiBudnB0 eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAodG9mcm9tOiBhc3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBhc3RyKQorICBp ZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYXN0cikg Lz0gNikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShhc3RyKSAvPSAzKSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGFz dHIsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgYXN0ciA9IFsiMDFkYjQ1IiwgImprJEQlUyIs ICJ6dXRnNDciXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogYXN0cikKK2lmICgubm90LiBhbGxvY2F0ZWQoYXN0cikpIGVycm9yIHN0b3AK K2lmIChsZW4oYXN0cikgLz0gNikgZXJyb3Igc3RvcAoraWYgKHNpemUoYXN0cikgLz0gMykg ZXJyb3Igc3RvcAoraWYgKGxib3VuZChhc3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAo dWJvdW5kKGFzdHIsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGFzdHIgLz0gWyIw MWRiNDUiLCAiamskRCVTIiwgInp1dGc0NyJdKSkgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6 IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcCh0b2Zyb206IGFzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBhc3Ry MikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxl bihhc3RyMikgLz0gOCkgZXJyb3Igc3RvcAorICBhc3RyMiA9ICJISUpLaGlqayIKKyEkb21w IGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGFzdHIyKQor aWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4oYXN0cjIp IC89IDgpIGVycm9yIHN0b3AKK2lmIChhc3RyMiAvPSAiSElKS2hpamsiKSBlcnJvciBzdG9w CisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwNHN0cig6KSwg cDRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IHA0c3RyKDI6 NCkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IHA0c3RyMikKKwor ISBGQUlMUyB3aXRoIHZhbHVlIGNoZWNrCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cCh0b2Zyb206IHA0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBwNHN0cikKKyAgaWYg KC5ub3QuIGFzc29jaWF0ZWQocDRzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4ocDRzdHIp IC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUocDRzdHIpIC89IDMpIGVycm9yIHN0b3AK KyAgaWYgKGxib3VuZChwNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5k KHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisgIHA0c3RyKDopID0gWzRfImY4NSIsIDRf IjhhZiIsIDRfIkElRiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBwNHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJy b3Igc3RvcAoraWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Igc3RvcAoraWYgKHNpemUocDRz dHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9y IHN0b3AKK2lmICh1Ym91bmQocDRzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKK2lmIChwNHN0 cigyKSAgLz0gNF8iZjg1IikgZXJyb3Igc3RvcAoraWYgKHA0c3RyKDMpICAvPSA0XyI4YWYi KSBlcnJvciBzdG9wCitpZiAocDRzdHIoNCkgIC89IDRfIkElRiIpIGVycm9yIHN0b3AKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcDRzdHIyKQorISRvbXAgdGFy Z2V0IG1hcChmcm9tOiBwNHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyMikp IGVycm9yIHN0b3AKKyAgaWYgKGxlbihwNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKKyAgcDRz dHIyID0gNF8iOTg3NWEiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBwNHN0cjIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cjIpKSBl cnJvciBzdG9wCitpZiAobGVuKHA0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAoraWYgKHA0c3Ry MiAvPSA0XyI5ODc1YSIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OixraW5k PTQpLCBhbGxvY2F0YWJsZSA6OiBhNHN0cig6KSwgYTRzdHIyCishIGFsbG9jYXRlKGNoYXJh Y3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorISBhbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTksa2luZD00KSA6OiBhNHN0cjIpCisKKyEgbGliZ29tcDogVHJ5aW5nIHRvIG1h cCBpbnRvIGRldmljZSBbMHgxMDI3YmEwLi4weDI1MTA1MGJiOWM5ZWJiYTApIG9iamVjdCB3 aGVuIFsweDdmZmQwMjZlNjcwOC4uMHg3ZmZkMDI2ZTY3MTApIGlzIGFscmVhZHkgbWFwcGVk CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGE0c3RyKQorISRvbXAg dGFyZ2V0IG1hcChmcm9tOiBhNHN0cikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cikp IGVycm9yIHN0b3AKKyAgaWYgKGxlbihhNHN0cikgLz0gNykgZXJyb3Igc3RvcAorICBpZiAo c2l6ZShhNHN0cikgLz0gNikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGE0c3RyLCAxKSAv PSAtMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGE0c3RyLCAxKSAvPSAzKSBlcnJvciBz dG9wCisgICEgU2VlIFBSIGZvcnRyYW4vMTA3NTA4IHdoeSAnKDopJyBpcyByZXF1aXJlZAor ICBhNHN0cig6KSA9IFs0XyJzZjQ1NmFxIiwgNF8iM2R0enUyNCIsIDRfIl80Zmg3c20iLCA0 XyI9ZmY4NXM3IiwgNF8iaj04YWY0ZCIsIDRfIi4sQSVGc3oiXQorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYTRzdHIpCitpZiAoLm5vdC4g YWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhNHN0cikgLz0gNykgZXJy b3Igc3RvcAoraWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo YTRzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGE0c3RyLCAxKSAvPSAz KSBlcnJvciBzdG9wCitpZiAoYTRzdHIoLTIpIC89IDRfInNmNDU2YXEiKSBlcnJvciBzdG9w CitpZiAoYTRzdHIoLTEpIC89IDRfIjNkdHp1MjQiKSBlcnJvciBzdG9wCitpZiAoYTRzdHIo MCkgIC89IDRfIl80Zmg3c20iKSBlcnJvciBzdG9wCitpZiAoYTRzdHIoMSkgIC89IDRfIj1m Zjg1czciKSBlcnJvciBzdG9wCitpZiAoYTRzdHIoMikgIC89IDRfImo9OGFmNGQiKSBlcnJv ciBzdG9wCitpZiAoYTRzdHIoMykgIC89IDRfIi4sQSVGc3oiKSBlcnJvciBzdG9wCisKKyEk b21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGE0c3RyMikKKyEkb21wIHRhcmdl dCBtYXAoZnJvbTogYTRzdHIyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyMikpIGVy cm9yIHN0b3AKKyAgaWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0b3AKKyAgYTRzdHIy ID0gNF8iOTg3NjVhMjNkIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogYTRzdHIyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cjIpKSBl cnJvciBzdG9wCitpZiAobGVuKGE0c3RyMikgLz0gOSkgZXJyb3Igc3RvcAoraWYgKGE0c3Ry MiAvPSA0XyI5ODc2NWEyM2QiKSBlcnJvciBzdG9wCisKKworZGVhbGxvY2F0ZShkdCVwYywg ZHQlcGMyKQorZGVhbGxvY2F0ZShkdCVwY3N0cikKK2RlYWxsb2NhdGUoZHQlcGNzdHIyKQor CitkZWFsbG9jYXRlKGR0JXBjNHN0cikKK2RlYWxsb2NhdGUoZHQlcGM0c3RyMikKKworZGVh bGxvY2F0ZShpcCwgaXAyLCBpYSwgaWEyKQorZGVhbGxvY2F0ZShwc3RyKQorZGVhbGxvY2F0 ZShwc3RyMikKK2RlYWxsb2NhdGUoYXN0cikKK2RlYWxsb2NhdGUoYXN0cjIpCisKK2RlYWxs b2NhdGUocDRzdHIpCitkZWFsbG9jYXRlKHA0c3RyMikKK2RlYWxsb2NhdGUoYTRzdHIpCitk ZWFsbG9jYXRlKGE0c3RyMikKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDMwZWQKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEt Ni5mOTAKQEAgLTAsMCArMSwzOTIgQEAKKyEgQ2hlY2sgdGhhdCAnbWFwKGFsbG9jOicgcHJv cGVybHkgd29ya3Mgd2l0aAorISAtIGRlZmVycmVkLWxlbmd0aCBjaGFyYWN0ZXIgc3RyaW5n cworISAtIGFycmF5cyB3aXRoIGFycmF5IGRlc2NyaXB0b3JzCishIEZvciB0aG9zZSwgdGhl IGFycmF5IGRlc2NyaXB0b3IgLyBzdHJpbmcgbGVuZ3RoIG11c3QgYmUgbWFwcGVkIHdpdGgg J3RvOicKKworcHJvZ3JhbSBtYWluCitpbXBsaWNpdCBub25lCisKK3R5cGUgdAorICBpbnRl Z2VyIDo6IGljKDI6NSkKKyAgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2NzdHIoMzo0KQorICBj aGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkgOjogY2M0c3RyKDM6NykKKyAgaW50ZWdlciwgcG9p bnRlciA6OiBwYyg6KQorICBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBjc3RyKDop CisgIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KQorZW5k IHR5cGUgdAorCit0eXBlKHQpIDo6IGR0CisKK2ludGVnZXIgOjogaWkoNSkKK2NoYXJhY3Rl cihsZW49MTEpIDo6IGNsc3RyKC0xOjEpCitjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkgOjog Y2w0c3RyKDA6MykKK2ludGVnZXIsIHBvaW50ZXIgOjogaXAoOikKK2ludGVnZXIsIGFsbG9j YXRhYmxlIDo6IGlhKDopCitjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBzdHIoOikK K2NoYXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOikKK2NoYXJhY3Rlcihs ZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHA0c3RyKDopCitjaGFyYWN0ZXIobGVuPTosa2lu ZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOikKKworYWxsb2NhdGUoZHQlcGMoNSkpCith bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3RyKDIpKQorCithbGxvY2F0ZShj aGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRzdHIoMjozKSkKKworYWxsb2NhdGUo aXAoNSksIGlhKDgpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBwc3RyKC0yOjAp KQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkpCisKK2FsbG9jYXRl KGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IHA0c3RyKDI6NCkpCithbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkKKworCishIGludGVnZXIgOjog aWMoMjo1KQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWljKDM6 NSkpCitkdCVpYygyKSA9IDIyCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVpYygzOjUp KQorICBpZiAoc2l6ZShkdCVpYykgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0 JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUp IGVycm9yIHN0b3AKKyAgZHQlaWMoMzo1KSA9IFszMywgNDQsIDU1XQorISRvbXAgZW5kIHRh cmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMoMzo1KSkKK2lm IChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWljLCAxKSAv PSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9w CitpZiAoYW55IChkdCVpYyAvPSBbMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCish IGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCkKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsbG9jOiBkdCVjY3N0cig0OjQpKQorZHQlY2NzdHIoMykgPSAiMTIzNDU2 Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVjY3N0cig0OjQpKQorICBpZiAo bGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVjY3N0cikg Lz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWNjc3RyLCAxKSAvPSAzKSBlcnJv ciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2NzdHIsIDEpIC89IDQpIGVycm9yIHN0b3AKKyAg ZHQlY2NzdHIoNDo0KSA9IFsiYWJjZGVmZ2hpamsiXQorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIoNDo0KSkKK2lmIChsZW4o ZHQlY2NzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVjY3N0cikgLz0gMikg ZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAor aWYgKHVib3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQl Y2NzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdKSkgZXJyb3Igc3RvcAor CisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigzOjcpCisKKyEgVmFs dWUgY2hlY2sgZmFpbHMKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQl Y2M0c3RyKDQ6NykpCitkdCVjYzRzdHIoMykgPSA0XyIxMjM0NTY3ODkwMSIKKyEkb21wIHRh cmdldCBtYXAoYWxsb2M6IGR0JWNjNHN0cig0OjcpKQorICBpZiAobGVuKGR0JWNjNHN0cikg Lz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBz dG9wCisgIGlmIChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlm ICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0cig0 OjcpID0gWzRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgICAgNF8icWVyZnRjZWE2 ZHMiLCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRfIjQ1bmd3ajU2c2oy Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGR0JWNjNHN0cig0OjcpKQoraWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBlcnJvciBzdG9w CitpZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQl Y2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNjNHN0ciwgMSkg Lz0gNykgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cigzKSAvPSA0XyIxMjM0NTY3ODkwMSIp IGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNCkgLz0gNF8iYWJjZGVmZ2hpamsiKSBlcnJv ciBzdG9wCitpZiAoZHQlY2M0c3RyKDUpIC89IDRfInFlcmZ0Y2VhNmRzIikgZXJyb3Igc3Rv cAoraWYgKGR0JWNjNHN0cig2KSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVycm9yIHN0b3AKK2lm IChkdCVjYzRzdHIoNykgLz0gNF8iNDVuZ3dqNTZzajIiKSBlcnJvciBzdG9wCisKKyEgaW50 ZWdlciwgcG9pbnRlciA6OiBwYyg6KQorISBhbGxvY2F0ZShkdCVwYyg1KSkKKworISBsaWJn b21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMAor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjKDI6NSkpCitkdCVw YygxKSA9IDExCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYygyOjUpKQorICBpZiAo Lm5vdC4gYXNzb2NpYXRlZChkdCVwYykpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGMp IC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwYywgMSkgLz0gMSkgZXJyb3Ig c3RvcAorICBpZiAodWJvdW5kKGR0JXBjLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JXBj KDI6NSkgPSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYygyOjUpKQoraWYgKC5ub3QuIGFzc29jaWF0 ZWQoZHQlcGMpKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVwYykgLz0gNSkgZXJyb3Igc3Rv cAoraWYgKGxib3VuZChkdCVwYywgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChk dCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlcGMgLz0gWzExLCAyMiwg MzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRl ciA6OiBwY3N0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3Ry KDIpKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRs ZWQga2luZCAweDAwCisKKyEgRklYTUU6IERpc2FibGVkIGJlZmF1c2Ugb2YgUFIxMDg4MzcK KyEKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjc3RyKDI6Mikp CishZHQlcGNzdHIoMSkgPSAiMDEiCishISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGNz dHIoMjoyKSkKKyEgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyKSkgZXJyb3Igc3Rv cAorISAgaWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHNpemUo ZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQoZHQlcGNzdHIsIDEp IC89IDEpIGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVy cm9yIHN0b3AKKyEgIGR0JXBjc3RyKDI6MikgPSBbImprIl0KKyEhJG9tcCBlbmQgdGFyZ2V0 CishISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGNzdHIoMjoyKSkKKyFp ZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKGR0 JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVy cm9yIHN0b3AKKyFpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCish aWYgKHVib3VuZChkdCVwY3N0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorIWlmIChhbnkgKGR0 JXBjc3RyIC89IFsiMDEiLCAiamsiXSkpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rlcihs ZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRzdHIoMjozKSkKKworISBsaWJnb21wOiBHT01Q X3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgwMAorISBzdHJ1Y3R1 cmUgZWxlbWVudCB3aGVuIG90aGVyIG1hcHBlZCBlbGVtZW50cyBmcm9tIHRoZSBzYW1lIHN0 cnVjdHVyZSB3ZXJlbid0IG1hcHBlZCB0b2dldGhlciB3aXRoIGl0CisKKyEgRklYTUU6IERp c2FibGVkIGJlZmF1c2Ugb2YgUFIxMDg4MzcKKyEKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGR0JXBjNHN0cigzOjMpKQorIWR0JXBjNHN0cigyKSA9IDRfIjQ1NiIK KyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIoMzozKSkKKyEgIGlmICgubm90 LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9yIHN0b3AKKyEgIGlmIChsZW4oZHQlcGM0 c3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAoc2l6ZShkdCVwYzRzdHIpIC89IDIpIGVy cm9yIHN0b3AKKyEgIGlmIChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9w CishICBpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorISAgZHQl cGM0c3RyKDM6MykgPSBbNF8idHp1Il0KKyEhJG9tcCBlbmQgdGFyZ2V0CishISRvbXAgdGFy Z2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3RyKDM6MykpCishaWYgKC5ub3QuIGFz c29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Igc3RvcAorIWlmIChsZW4oZHQlcGM0c3RyKSAv PSAzKSBlcnJvciBzdG9wCishaWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9w CishaWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyFpZiAodWJv dW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorIWlmIChkdCVwYzRzdHIoMikg Lz0gNF8iNDU2IikgZXJyb3Igc3RvcAorIWlmIChkdCVwYzRzdHIoMykgLz0gNF8idHp1Iikg ZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1 bmhhbmRsZWQga2luZCAweDAxCisKKyEgaW50ZWdlciA6OiBpaSg1KQorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlpKDI6NSkpCitpaSgxKSA9IC0xCishJG9tcCB0 YXJnZXQgbWFwKGFsbG9jOiBpaSgyOjUpKQorICBpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Ig c3RvcAorICBpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91 bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaWkoMjo1KSA9IFstMiwgLTMsIC00LCAt NV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IGlpKDI6NSkpCitpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChp aSwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpaSwgMSkgLz0gNSkgZXJyb3Ig c3RvcAoraWYgKGFueSAoaWkgLz0gWy0xLCAtMiwgLTMsIC00LCAtNV0pKSBlcnJvciBzdG9w CisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKQorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsc3RyKDA6MSkpCitjbHN0cigtMSkgPSAiMTIz NDU2Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbHN0cigwOjEpKQorICBpZiAo bGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShjbHN0cikgLz0gMykg ZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkgZXJyb3Igc3RvcAor ICBpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGNsc3RyKDA6MSkg PSBbImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEk b21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsc3RyKDA6MSkpCitpZiAobGVuKGNs c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2xzdHIpIC89IDMpIGVycm9yIHN0 b3AKK2lmIChsYm91bmQoY2xzdHIsIDEpIC89IC0xKSBlcnJvciBzdG9wCitpZiAodWJvdW5k KGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAoYW55IChjbHN0ciAvPSBbIjEyMzQ1 Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0pKSBlcnJvciBzdG9wCisK KyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpCisKKyEkb21wIHRh cmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogY2w0c3RyKDE6MykpCitjbDRzdHIoMCkgPSA0 XyIxMjM0NTY3ODkwMSIKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGNsNHN0cigxOjMpKQor ICBpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2w0c3Ry KSAvPSA0KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJv ciBzdG9wCisgIGlmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGNs NHN0cigxOjMpID0gWzRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgNF8icWVyZnRj ZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIoMTozKSkKK2lmIChsZW4oY2w0c3RyKSAv PSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2w0c3RyKSAvPSA0KSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChjbDRz dHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMCkgLz0gNF8iMTIzNDU2Nzg5 MDEiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDEpIC89IDRfImFiY2RlZmdoaWprIikgZXJy b3Igc3RvcAoraWYgKGNsNHN0cigyKSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AK K2lmIChjbDRzdHIoMykgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCisKKworISBh bGxvY2F0ZShpcCg1KSwgaWEoOCkpCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChh bGxvYzogaXAoMjo1KSkKK2lwKDEpID0gMTEKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlw KDI6NSkpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Igc3RvcAorICBpZiAo c2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBl cnJvciBzdG9wCisgIGlmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaXAo Mjo1KSA9IFsyMiwgMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGZyb206IGlwKDI6NSkpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChp cCkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlwKSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJv dW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlwLCAxKSAvPSA1KSBl cnJvciBzdG9wCitpZiAoYW55IChpcCAvPSBbMTEsIDIyLCAzMywgNDQsIDU1XSkpIGVycm9y IHN0b3AKKworISBhbGxvY2F0ZShpcCg1KSwgaWEoOCkpCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogaWEoMjo4KSkKK2lhKDEpID0gMQorISRvbXAgdGFyZ2V0IG1h cChhbGxvYzogaWEoMjo4KSkKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0 b3AKKyAgaWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpYSwg MSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBz dG9wCisgIGlhKDI6OCkgPSBbMiwzLDQsNSw2LDcsOF0KKyEkb21wIGVuZCB0YXJnZXQKKyEk b21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhKDI6OCkpCitpZiAoLm5vdC4gYWxs b2NhdGVkKGlhKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AK K2lmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWEsIDEp IC89IDgpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlhIC89IFsxLDIsMyw0LDUsNiw3LDhdKSkg ZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3RyKDop CishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjowKSkKKworISBsaWJn b21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishIEZJWE1FOiBhcnJh eSBvZmZzZXQgd3JvbmdseSBjYWxjdWxhdGVkIGFzIGl0IHVzZXMgVFlQRV9TSVpFX1VOSVQs IHdoaWNoIGlzIGEgU0FWRV9FWFBSCishCishISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFw KGFsbG9jOiBwc3RyKC0xOjApKQorIXBzdHIoLTIpID0gIjAxIgorISEkb21wIHRhcmdldCBt YXAoYWxsb2M6IHBzdHIoLTE6MCkpCishICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkg ZXJyb3Igc3RvcAorISAgaWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCishICBpZiAo c2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAobGJvdW5kKHBzdHIsIDEpIC89 IC0yKSBlcnJvciBzdG9wCishICBpZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVycm9yIHN0 b3AKKyEgIHBzdHIoLTE6MCkgPSBbImprIiwgImFxIl0KKyEhJG9tcCBlbmQgdGFyZ2V0Cish ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cigtMTowKSkKKyFpZiAoLm5v dC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAorIWlmIChsZW4ocHN0cikgLz0gMikg ZXJyb3Igc3RvcAorIWlmIChzaXplKHBzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAobGJv dW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCishaWYgKHVib3VuZChwc3RyLCAxKSAv PSAwKSBlcnJvciBzdG9wCishaWYgKGFueSAocHN0ciAvPSBbIjAxIiwgImprIiwgImFxIl0p KSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBh c3RyKDopCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorCish IGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEgRklYTUUK KyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGFzdHIoNDo1KSkKKyFhc3Ry KDMpID0gIjAxZGI0NSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBhc3RyKDQ6NSkpCish ICBpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCishICBpZiAobGVuKGFz dHIpIC89IDYpIGVycm9yIHN0b3AKKyEgIGlmIChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0 b3AKKyEgIGlmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKHVi b3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCishISEgIGFzdHIoNDo1KSA9IFsiamsk RCVTIiwgInp1dGc0NyJdCishISRvbXAgZW5kIHRhcmdldAorISEhJG9tcCB0YXJnZXQgZXhp dCBkYXRhIG1hcChmcm9tOiBhc3RyKDQ6NSkpCishIWlmICgubm90LiBhbGxvY2F0ZWQoYXN0 cikpIGVycm9yIHN0b3AKKyEhIWlmIChsZW4oYXN0cikgLz0gNikgZXJyb3Igc3RvcAorIWlm IChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAobGJvdW5kKGFzdHIsIDEpIC89 IDMpIGVycm9yIHN0b3AKKyFpZiAodWJvdW5kKGFzdHIsIDEpIC89IDUpIGVycm9yIHN0b3AK KyFpZiAoYW55IChhc3RyIC89IFsiMDFkYjQ1IiwgImprJEQlUyIsICJ6dXRnNDciXSkpIGVy cm9yIHN0b3AKKyEKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBw NHN0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigy OjQpKQorCishIEZBSUxTIHdpdGggdmFsdWUgY2hlY2sKKworISBGSVhNRTogYXJyYXkgb2Zm c2V0IHdyb25nbHkgY2FsY3VsYXRlZCBhcyBpdCB1c2VzIFRZUEVfU0laRV9VTklULCB3aGlj aCBpcyBhIFNBVkVfRVhQUgorIQorISEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxv YzogcDRzdHIoMzo0KSkKKyFwNHN0cigyKSA9IDRfImY4NSIKKyEhJG9tcCB0YXJnZXQgbWFw KGFsbG9jOiBwNHN0cigzOjQpKQorISAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIpKSBl cnJvciBzdG9wCishICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAo c2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKGxib3VuZChwNHN0ciwgMSkg Lz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHVib3VuZChwNHN0ciwgMSkgLz0gNCkgZXJyb3Ig c3RvcAorISAgcDRzdHIoMzo0KSA9IFs0XyI4YWYiLCA0XyJBJUYiXQorISEkb21wIGVuZCB0 YXJnZXQKKyEhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBwNHN0cigzOjQpKQor IWlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Igc3RvcAorIWlmIChsZW4ocDRz dHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAoc2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3Rv cAorIWlmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AKKyFpZiAodWJvdW5k KHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCishaWYgKHA0c3RyKDIpICAvPSA0XyJmODUi KSBlcnJvciBzdG9wCishaWYgKHA0c3RyKDMpICAvPSA0XyI4YWYiKSBlcnJvciBzdG9wCish aWYgKHA0c3RyKDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisKKyEgY2hhcmFjdGVyKGxl bj06LGtpbmQ9NCksIGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopCishIGFsbG9jYXRlKGNoYXJh Y3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorCishIGxpYmdvbXA6IFRyeWlu ZyB0byBtYXAgaW50byBkZXZpY2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBiYjljOWViYmEwKSBv YmplY3Qgd2hlbiBbMHg3ZmZkMDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEwKSBpcyBhbHJlYWR5 IG1hcHBlZAorCishIEZJWE1FOiBEaXNhYmxlZCBiZWZhdXNlIG9mIFBSMTA4ODM4CishISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhNHN0cigtMTozKSkKKyEhYTRzdHIo LTIpID0gNF8ic2Y0NTZhcSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBhNHN0cigtMToz KSkKKyEgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBzdG9wCishICBpZiAo bGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCishICBpZiAoc2l6ZShhNHN0cikgLz0gNikg ZXJyb3Igc3RvcAorISAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AK KyEgIGlmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyEgIGE0c3RyKC0x OjMpID0gWzRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVzNyIsIDRfImo9OGFm NGQiLCA0XyIuLEElRnN6Il0KKyEhJG9tcCBlbmQgdGFyZ2V0CishISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogYTRzdHIoLTE6MykpCishaWYgKC5ub3QuIGFsbG9jYXRlZChh NHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCish aWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKKyFpZiAobGJvdW5kKGE0c3RyLCAx KSAvPSAtMikgZXJyb3Igc3RvcAorIWlmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9y IHN0b3AKKyFpZiAoYTRzdHIoLTIpIC89IDRfInNmNDU2YXEiKSBlcnJvciBzdG9wCishaWYg KGE0c3RyKC0xKSAvPSA0XyIzZHR6dTI0IikgZXJyb3Igc3RvcAorIWlmIChhNHN0cigwKSAg Lz0gNF8iXzRmaDdzbSIpIGVycm9yIHN0b3AKKyFpZiAoYTRzdHIoMSkgIC89IDRfIj1mZjg1 czciKSBlcnJvciBzdG9wCishaWYgKGE0c3RyKDIpICAvPSA0XyJqPThhZjRkIikgZXJyb3Ig c3RvcAorIWlmIChhNHN0cigzKSAgLz0gNF8iLixBJUZzeiIpIGVycm9yIHN0b3AKKworZGVh bGxvY2F0ZShkdCVwYykKK2RlYWxsb2NhdGUoZHQlcGNzdHIpCisKK2RlYWxsb2NhdGUoZHQl cGM0c3RyKQorCitkZWFsbG9jYXRlKGlwLCBpYSkKK2RlYWxsb2NhdGUocHN0cikKK2RlYWxs b2NhdGUoYXN0cikKKworZGVhbGxvY2F0ZShwNHN0cikKK2RlYWxsb2NhdGUoYTRzdHIpCitl bmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJn ZXQtZW50ZXItZGF0YS03LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJh bi90YXJnZXQtZW50ZXItZGF0YS03LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi5mMTI5ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTcuZjkwCkBAIC0wLDAgKzEsNzgg QEAKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUKKyAgY2hhcmFjdGVyKGxlbj06KSwgYWxs b2NhdGFibGUgOjogc3RyQSg6KSwgc3RyQTIKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRl ciA6OiBzdHJQKDopLCBzdHJQMgorICAhJG9tcCBkZWNsYXJlIHRhcmdldCBlbnRlcihzdHJB LHN0ckEyLHN0clAsc3RyUDIpCitjb250YWlucworICBzdWJyb3V0aW5lIG9wdF9tYXAoc3Ry MSwgc3RyMiwgc3RyMykKKyAgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJsZSA6OiBz dHIxLCBzdHIyLCBzdHIzLCBzdHI0CisgICAgb3B0aW9uYWwgOjogc3RyMiwgc3RyMyAKKwor ICAgIGlmICgubm90LnByZXNlbnQoc3RyMikpIGVycm9yIHN0b3AKKyAgICBpZiAocHJlc2Vu dChzdHIzKSkgIGVycm9yIHN0b3AKKworICAgICEkb21wIHRhcmdldCBtYXAoc3RyMSxzdHIy LHN0cjMsc3RyNCkKKyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMSkpIGVycm9yIHN0b3AKKyAg ICAgIGlmIChhbGxvY2F0ZWQoc3RyMikpIGVycm9yIHN0b3AKKyAgICAgIGlmIChwcmVzZW50 KHN0cjMpKSBlcnJvciBzdG9wCisgICAgICBpZiAoYWxsb2NhdGVkKHN0cjQpKSBlcnJvciBz dG9wCisgICAgISRvbXAgZW5kIHRhcmdldAorICBlbmQKKyAgc3Vicm91dGluZSBjYWxsX29w dCgpCisgICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjogc3RyMSwgc3RyMgor ICAgIGNhbGwgb3B0X21hcChzdHIxLCBzdHIyKQorICBlbmQKKyAgc3Vicm91dGluZSB0ZXN0 CisgICAhJG9tcCBkZWNsYXJlIHRhcmdldAorICAgaWYgKC5ub3QuIGFsbG9jYXRlZChzdHJB KSkgZXJyb3Igc3RvcAorICAgIWlmICgubm90LiBhbGxvY2F0ZWQoc3RyQTIpKSBlcnJvciBz dG9wCisgICBpZiAoLm5vdC4gYXNzb2NpYXRlZChzdHJQKSkgZXJyb3Igc3RvcAorICAgIWlm ICgubm90LiBhc3NvY2lhdGVkKHN0clAyKSkgZXJyb3Igc3RvcAorCisgICAgISBlbnN1cmUg bGVuZ3RoIHdhcyB1cGRhdGVkIGFzIHdlbGwKKyAgICBpZiAobGVuKHN0ckEpIC89IDMpIGVy cm9yIHN0b3AKKyAgICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgICAgaWYg KGxlbihzdHJQKSAvPSA0KSBlcnJvciBzdG9wCisgICAgaWYgKGxlbihzdHJQMikgLz0gOCkg ZXJyb3Igc3RvcAorISAgICBpZiAoYW55IChzdHJBIC89IFsnSGF2JywgJ2UgZicsICd1biEn XSkpIGVycm9yIHN0b3AKKyEgICAgaWYgKHN0ckEyIC89ICdIZWxsbycpIGVycm9yIHN0b3AK KyEgICAgaWYgKGFueSAoc3RyUCAvPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10pKSBlcnJv ciBzdG9wCishICAgIGlmIChzdHJQMiAvPSAnVGVzdENhc2UnKSBlcnJvciBzdG9wCishCish ICAgIHN0ckEgPSBbJzEyMycsICc0NTYnLCAnNzg5J10KKyEgICAgc3RyQTIgPSAnV29ybGQn CishICAgIHN0clAgPSBbJ0FCQ0QnLCAnRUZHSCcsICdJSktMJ10KKyEgICAgc3RyUDIgPSAn UGFzc2VkISEnCisgIGVuZAorZW5kCisKK3Byb2dyYW0gbWFpbgorICB1c2UgbQorICBpbXBs aWNpdCBub25lCisgIGNhbGwgY2FsbF9vcHQKKworICBzdHJBID0gWydIYXYnLCAnZSBmJywg J3VuISddCisgIHN0ckEyID0gJ0hlbGxvJworICBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQp IDo6IHN0clAoMykpCisgIHN0clAgPSBbJ2FiY2QnLCAnZWZnaCcsICdpamtsJ10KKyAgYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBzdHJQMikKKyAgc3RyUDIgPSAnVGVzdENhc2Un CisKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsd2F5cywgdG86IHN0ckEsIHN0 ckEyKQorICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IHN0clAsIHN0clAyKQor ICAhJG9tcCB0YXJnZXQKKyAgICBjYWxsIHRlc3QoKQorICAhJG9tcCBlbmQgdGFyZ2V0Cisg ICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGFsd2F5cywgZnJvbTogc3RyQSwgc3RyQTIs IHN0clAsIHN0clAyKQorCisgIGlmIChsZW4oc3RyQSkgLz0gMykgZXJyb3Igc3RvcAorICBp ZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsZW4oc3RyUCkgLz0gNCkg ZXJyb3Igc3RvcAorICBpZiAobGVuKHN0clAyKSAvPSA4KSBlcnJvciBzdG9wCishICBpZiAo YW55IChzdHJBIC89IFsnMTIzJywgJzQ1NicsICc3ODknXSkpIGVycm9yIHN0b3AKKyEgIGlm IChzdHJBMiAvPSAnV29ybGQnKSBlcnJvciBzdG9wCishICBpZiAoYW55KHN0clAgLz0gWydB QkNEJywgJ0VGR0gnLCAnSUpLTCddKSkgZXJyb3Igc3RvcAorISAgaWYgKHN0clAyIC89ICdQ YXNzZWQhIScpIGVycm9yIHN0b3AKKworISAgZGVhbGxvY2F0ZShzdHJQLCBzdHJQMiwgc3Ry QSwgc3RyQTIpCitlbmQK --------------nQxaVZ8sAG5TcExOlDGSvxlL--