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 10609385B50C; Tue, 21 Feb 2023 11:57:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 10609385B50C 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,315,1669104000"; d="diff'?scan'208";a="101659939" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 21 Feb 2023 03:57:29 -0800 IronPort-SDR: NCrUQxFcwVtJXdRZF9tGK7tI9homfQOOu8ajuZnYu2ciGCpr/nzlVyTuvxRU0tkaZ6oTwItvzD 00RhV9ueQojKDAc0UieX8wfF5Q3P0qO7gk0jqQ37qWr5VYhHoq9FOAEQGh8D4ELGImu0PZdbln sqXw1Rm9KGruQE2oHfx1JB1Ew66+41ja1DVJfmotNJ3Rbj4iq2kqgK4xGACGFLpgvsgpI1gQos Rlgp3xbtP4g04G9grv6yG4ir1NgkcuB29VTjRso131Q7vaIVnQ11saMuxBQ91f985dWBb2TBDH Rw8= Content-Type: multipart/mixed; boundary="------------O84pEURKl60y4ZApWJL7mKmg" Message-ID: Date: Tue, 21 Feb 2023 12:57:22 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.2 Content-Language: en-US To: gcc-patches , Jakub Jelinek , fortran From: Tobias Burnus Subject: [Patch] Fortran/OpenMP: Fix mapping of array descriptors and deferred-length strings 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.3 required=5.0 tests=BAYES_00,GIT_PATCH_0,HEADER_FROM_DIFFERENT_DOMAINS,KAM_DMARC_STATUS,KAM_SHORT,SPF_HELO_PASS,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------O84pEURKl60y4ZApWJL7mKmg Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable 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? 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 d= escr 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 'al= loc' 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 --------------O84pEURKl60y4ZApWJL7mKmg Content-Type: text/x-patch; charset="UTF-8"; name="map-fixes.diff" Content-Disposition: attachment; filename="map-fixes.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 cy1vcGVubXAuY2MKaW5kZXggMmQxNmYzYi4uNWNiMjY2OCAxMDA2NDQKLS0tIGEvZ2NjL2Zv 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+dHMuZGVmZXJyZWQpCisJCSAgICB7CisJCSAgICAgIGlmICghcHJlc2VudCAmJiAh REVDTF9QIChkZWNsKSkKKwkJCXsKKwkJCSAgZ2NjX2Fzc2VydCAoVFJFRV9DT0RFIChkZWNs KSA9PSBJTkRJUkVDVF9SRUYpOworCQkJICBkZWNsID0gVFJFRV9PUEVSQU5EIChkZWNsLCAw KTsKKwkJCX0KKwkJICAgICAgdHJlZSBjb25kID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9s b2NhdGlvbiwgTkVfRVhQUiwKKwkJCQkJCSAgIGJvb2xlYW5fdHlwZV9ub2RlLAorCQkJCQkJ ICAgZGVjbCwgbnVsbF9wb2ludGVyX25vZGUpOworCQkgICAgICBpZiAocHJlc2VudCkKKwkJ CWNvbmQgPSBmb2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLAorCQkJCQkJVFJVVEhf QU5ESUZfRVhQUiwKKwkJCQkJCWJvb2xlYW5fdHlwZV9ub2RlLAorCQkJCQkJcHJlc2VudCwg Y29uZCk7CisJCSAgICAgIHRyZWUgbGVuID0gbi0+c3ltLT50cy51LmNsLT5iYWNrZW5kX2Rl Y2w7CisJCSAgICAgIGxlbiA9IGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25vZGUsIGxlbik7 CisJCSAgICAgIHRyZWUgc2l6ZSA9IGdmY19nZXRfY2hhcl90eXBlIChuLT5zeW0tPnRzLmtp bmQpOworCQkgICAgICBzaXplID0gVFlQRV9TSVpFX1VOSVQgKHNpemUpOworCQkgICAgICBz aXplID0gZm9sZF9idWlsZDIgKE1VTFRfRVhQUiwgc2l6ZV90eXBlX25vZGUsIGxlbiwgc2l6 ZSk7CisJCSAgICAgIHNpemUgPSBidWlsZDNfbG9jIChpbnB1dF9sb2NhdGlvbiwKKwkJCQkJ CQkgQ09ORF9FWFBSLAorCQkJCQkJCSBzaXplX3R5cGVfbm9kZSwKKwkJCQkJCQkgY29uZCwg c2l6ZSwKKwkJCQkJCQkgc2l6ZV96ZXJvX25vZGUpOworCQkgICAgICBzaXplID0gZ2ZjX2V2 YWx1YXRlX25vdyAoc2l6ZSwgYmxvY2spOworCQkgICAgICBPTVBfQ0xBVVNFX1NJWkUgKG5v ZGUpID0gc2l6ZTsKKwkJICAgIH0KIAkJfQogCSAgICAgIGVsc2UgaWYgKG4tPmV4cHIKIAkJ ICAgICAgICYmIG4tPmV4cHItPmV4cHJfdHlwZSA9PSBFWFBSX1ZBUklBQkxFCkBAIC0zMzYx LDcgKzM0ODAsNyBAQCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9j aywgZ2ZjX29tcF9jbGF1c2VzICpjbGF1c2VzLAogCQkgICAgICAmJiAhKFBPSU5URVJfVFlQ RV9QICh0eXBlKQogCQkJICAgJiYgR0ZDX0RFU0NSSVBUT1JfVFlQRV9QIChUUkVFX1RZUEUg KHR5cGUpKSkpCiAJCSAgICBrID0gR09NUF9NQVBfRklSU1RQUklWQVRFX1BPSU5URVI7Ci0J CSAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChibG9jaywgbiwgZGVjbCwgZWxlbWVu dCwgaywKKwkJICBnZmNfdHJhbnNfb21wX2FycmF5X3NlY3Rpb24gKGJsb2NrLCBvcCwgbiwg ZGVjbCwgZWxlbWVudCwgaywKIAkJCQkJICAgICAgIG5vZGUsIG5vZGUyLCBub2RlMywgbm9k ZTQpOwogCQl9CiAJICAgICAgZWxzZSBpZiAobi0+ZXhwcgpAQCAtMzQwOSw5ICszNTI4LDE1 IEBAIGdmY190cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21w X2NsYXVzZXMgKmNsYXVzZXMsCiAJCQkJCSAgIGZvbGRfY29udmVydCAoc2l6ZV90eXBlX25v ZGUsCiAJCQkJCSAgICAgICBzZS5zdHJpbmdfbGVuZ3RoKSwKIAkJCQkJICAgVFlQRV9TSVpF X1VOSVQgKHRtcCkpOworCQkJICBpZiAobi0+dS5tYXBfb3AgPT0gT01QX01BUF9ERUxFVEUp CisJCQkgICAga2luZCA9IEdPTVBfTUFQX0RFTEVURTsKKwkJCSAgZWxzZSBpZiAob3AgPT0g RVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQSkKKwkJCSAgICBraW5kID0gR09NUF9NQVBfUkVM RUFTRTsKKwkJCSAgZWxzZQorCQkJICAgIGtpbmQgPSBHT01QX01BUF9UTzsKIAkJCSAgbm9k ZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwKIAkJCQkJCSAgICBPTVBf Q0xBVVNFX01BUCk7Ci0JCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9LSU5EIChub2RlMywgR09N UF9NQVBfVE8pOworCQkJICBPTVBfQ0xBVVNFX1NFVF9NQVBfS0lORCAobm9kZTMsIGtpbmQp OwogCQkJICBPTVBfQ0xBVVNFX0RFQ0wgKG5vZGUzKSA9IHNlLnN0cmluZ19sZW5ndGg7CiAJ CQkgIE9NUF9DTEFVU0VfU0laRSAobm9kZTMpCiAJCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAo Z2ZjX2NoYXJsZW5fdHlwZV9ub2RlKTsKQEAgLTM1MTUsMTEgKzM2NDAsMTcgQEAgZ2ZjX3Ry YW5zX29tcF9jbGF1c2VzIChzdG10YmxvY2tfdCAqYmxvY2ssIGdmY19vbXBfY2xhdXNlcyAq Y2xhdXNlcywKIAkJCSAgICA9IGdmY19mdWxsX2FycmF5X3NpemUgKGJsb2NrLCBpbm5lciwg cmFuayk7CiAJCQkgIHRyZWUgZWxlbXN6CiAJCQkgICAgPSBUWVBFX1NJWkVfVU5JVCAoZ2Zj X2dldF9lbGVtZW50X3R5cGUgKHR5cGUpKTsKLQkJCSAgaWYgKEdPTVBfTUFQX0NPUFlfVE9f UCAoT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSkpKQotCQkJICAgIG1hcF9raW5kID0gR09N UF9NQVBfVE87CisJCQkgIG1hcF9raW5kID0gT01QX0NMQVVTRV9NQVBfS0lORCAobm9kZSk7 CisJCQkgIGlmIChHT01QX01BUF9DT1BZX1RPX1AgKG1hcF9raW5kKQorCQkJICAgICAgfHwg bWFwX2tpbmQgPT0gR09NUF9NQVBfQUxMT0MpCisJCQkgICAgbWFwX2tpbmQgPSAoKEdPTVBf TUFQX0FMV0FZU19QIChtYXBfa2luZCkKKwkJCQkJIHx8IGdmY19leHByX2F0dHIgKG4tPmV4 cHIpLnBvaW50ZXIpCisJCQkJCT8gR09NUF9NQVBfQUxXQVlTX1RPIDogR09NUF9NQVBfVE8p OwogCQkJICBlbHNlIGlmIChuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX1JFTEVBU0UKIAkJCQkg ICB8fCBuLT51Lm1hcF9vcCA9PSBPTVBfTUFQX0RFTEVURSkKLQkJCSAgICBtYXBfa2luZCA9 IE9NUF9DTEFVU0VfTUFQX0tJTkQgKG5vZGUpOworCQkJICAgIDsKKwkJCSAgZWxzZSBpZiAo b3AgPT0gRVhFQ19PTVBfVEFSR0VUX0VYSVRfREFUQSkKKwkJCSAgICBtYXBfa2luZCA9IEdP TVBfTUFQX1JFTEVBU0U7CiAJCQkgIGVsc2UKIAkJCSAgICBtYXBfa2luZCA9IEdPTVBfTUFQ X0FMTE9DOwogCQkJICBpZiAoIW9wZW5hY2MKQEAgLTM1NjAsNiArMzY5MSw4IEBAIGdmY190 cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMg KmNsYXVzZXMsCiAJCQkgICAgICBub2RlMiA9IG5vZGU7CiAJCQkgICAgICBub2RlID0gZGVz Y19ub2RlOyAgLyogUHV0IGZpcnN0LiAgKi8KIAkJCSAgICB9CisJCQkgIGlmIChvcCA9PSBF WEVDX09NUF9UQVJHRVRfRVhJVF9EQVRBKQorCQkJICAgIGdvdG8gZmluYWxpemVfbWFwX2Ns YXVzZTsKIAkJCSAgbm9kZTMgPSBidWlsZF9vbXBfY2xhdXNlIChpbnB1dF9sb2NhdGlvbiwK IAkJCQkJCSAgICBPTVBfQ0xBVVNFX01BUCk7CiAJCQkgIE9NUF9DTEFVU0VfU0VUX01BUF9L SU5EIChub2RlMywKQEAgLTM1OTAsNyArMzcyMyw3IEBAIGdmY190cmFuc19vbXBfY2xhdXNl cyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMgKmNsYXVzZXMsCiAJCSAg ICAgIGJvb2wgZWxlbWVudCA9IGxhc3RyZWYtPnUuYXIudHlwZSA9PSBBUl9FTEVNRU5UOwog CQkgICAgICBnb21wX21hcF9raW5kIGtpbmQgPSAob3BlbmFjYyA/IEdPTVBfTUFQX0FUVEFD SF9ERVRBQ0gKIAkJCQkJCSAgICA6IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSKTsKLQkJICAg ICAgZ2ZjX3RyYW5zX29tcF9hcnJheV9zZWN0aW9uIChibG9jaywgbiwgaW5uZXIsIGVsZW1l bnQsCisJCSAgICAgIGdmY190cmFuc19vbXBfYXJyYXlfc2VjdGlvbiAoYmxvY2ssIG9wLCBu LCBpbm5lciwgZWxlbWVudCwKIAkJCQkJCSAgIGtpbmQsIG5vZGUsIG5vZGUyLCBub2RlMywK IAkJCQkJCSAgIG5vZGU0KTsKIAkJICAgIH0KQEAgLTM2MDksNiArMzc0Miw4IEBAIGdmY190 cmFuc19vbXBfY2xhdXNlcyAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfb21wX2NsYXVzZXMg KmNsYXVzZXMsCiAJCW9tcF9jbGF1c2VzID0gZ2ZjX3RyYW5zX2FkZF9jbGF1c2UgKG5vZGUz LCBvbXBfY2xhdXNlcyk7CiAJICAgICAgaWYgKG5vZGU0KQogCQlvbXBfY2xhdXNlcyA9IGdm Y190cmFuc19hZGRfY2xhdXNlIChub2RlNCwgb21wX2NsYXVzZXMpOworCSAgICAgIGlmIChu b2RlNSkKKwkJb21wX2NsYXVzZXMgPSBnZmNfdHJhbnNfYWRkX2NsYXVzZSAobm9kZTUsIG9t cF9jbGF1c2VzKTsKIAkgICAgfQogCSAgYnJlYWs7CiAJY2FzZSBPTVBfTElTVF9UTzoKQEAg LTc0NzMsNyArNzYwOCw3IEBAIGdmY190cmFuc19vbXBfdGFyZ2V0X2V4aXRfZGF0YSAoZ2Zj X2NvZGUgKmNvZGUpCiAKICAgZ2ZjX3N0YXJ0X2Jsb2NrICgmYmxvY2spOwogICBvbXBfY2xh dXNlcyA9IGdmY190cmFuc19vbXBfY2xhdXNlcyAoJmJsb2NrLCBjb2RlLT5leHQub21wX2Ns YXVzZXMsCi0JCQkJICAgICAgIGNvZGUtPmxvYyk7CisJCQkJICAgICAgIGNvZGUtPmxvYywg ZmFsc2UsIGZhbHNlLCBjb2RlLT5vcCk7CiAgIHN0bXQgPSBidWlsZDFfbG9jIChpbnB1dF9s b2NhdGlvbiwgT01QX1RBUkdFVF9FWElUX0RBVEEsIHZvaWRfdHlwZV9ub2RlLAogCQkgICAg IG9tcF9jbGF1c2VzKTsKICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmYmxvY2ssIHN0bXQp OwpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsaWZ5LmNjIGIvZ2NjL2dpbXBsaWZ5LmNjCmluZGV4 IDk2ODQ1MTUuLjY0OTZiOTAgMTAwNjQ0Ci0tLSBhL2djYy9naW1wbGlmeS5jYworKysgYi9n Y2MvZ2ltcGxpZnkuY2MKQEAgLTEwNzA3LDcgKzEwNzA3LDcgQEAgZ2ltcGxpZnlfc2Nhbl9v bXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwKIHsKICAgc3Ry dWN0IGdpbXBsaWZ5X29tcF9jdHggKmN0eCwgKm91dGVyX2N0eDsKICAgdHJlZSBjOwotICB0 cmVlICpwcmV2X2xpc3RfcCA9IE5VTEwsICpvcmlnX2xpc3RfcCA9IGxpc3RfcDsKKyAgdHJl ZSAqb3JpZ19saXN0X3AgPSBsaXN0X3A7CiAgIGludCBoYW5kbGVkX2RlcGVuZF9pdGVyYXRv cnMgPSAtMTsKICAgaW50IG5vd2FpdCA9IC0xOwogCkBAIC0xMTEzNCwzMSArMTExMzQsNiBA QCBnaW1wbGlmeV9zY2FuX29tcF9jbGF1c2VzICh0cmVlICpsaXN0X3AsIGdpbXBsZV9zZXEg KnByZV9wLAogCSAgICBkZWZhdWx0OgogCSAgICAgIGJyZWFrOwogCSAgICB9Ci0JICAvKiBG b3IgRm9ydHJhbiwgbm90IG9ubHkgdGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgaXMgbWFwcGVk IGJ1dCBhbHNvCi0JICAgICB0aGUgYWRkcmVzcyBvZiB0aGUgcG9pbnRlciwgdGhlIGFycmF5 IGRlc2NyaXB0b3IgZXRjLjsgZm9yCi0JICAgICAnZXhpdCBkYXRhJyAtIGFuZCBpbiBwYXJ0 aWN1bGFyIGZvciAnZGVsZXRlOicgLSBoYXZpbmcgYW4gJ2FsbG9jOicKLQkgICAgIGRvZXMg bm90IG1ha2Ugc2Vuc2UuICBMaWtld2lzZSwgZm9yICd1cGRhdGUnIG9ubHkgdHJhbnNmZXJy aW5nIHRoZQotCSAgICAgZGF0YSBpdHNlbGYgaXMgbmVlZGVkIGFzIHRoZSByZXN0IGhhcyBi ZWVuIGhhbmRsZWQgaW4gcHJldmlvdXMKLQkgICAgIGRpcmVjdGl2ZXMuICBIb3dldmVyLCBm b3IgJ2V4aXQgZGF0YScsIHRoZSBhcnJheSBkZXNjcmlwdG9yIG5lZWRzCi0JICAgICB0byBi ZSBkZWxldGU7IGhlbmNlLCB3ZSB0dXJuIHRoZSBNQVBfVE9fUFNFVCBpbnRvIGEgTUFQX0RF TEVURS4KLQotCSAgICAgTk9URTogR2VuZXJhbGx5LCBpdCBpcyBub3Qgc2FmZSB0byBwZXJm b3JtICJlbnRlciBkYXRhIiBvcGVyYXRpb25zCi0JICAgICBvbiBhcnJheXMgd2hlcmUgdGhl IGRhdGEgKm9yIHRoZSBkZXNjcmlwdG9yKiBtYXkgZ28gb3V0IG9mIHNjb3BlCi0JICAgICBi ZWZvcmUgYSBjb3JyZXNwb25kaW5nICJleGl0IGRhdGEiIG9wZXJhdGlvbiAtLSBhbmQgc3Vj aCBhCi0JICAgICBkZXNjcmlwdG9yIG1heSBiZSBzeW50aGVzaXplZCB0ZW1wb3JhcmlseSwg ZS5nLiB0byBwYXNzIGFuCi0JICAgICBleHBsaWNpdC1zaGFwZSBhcnJheSB0byBhIGZ1bmN0 aW9uIGV4cGVjdGluZyBhbiBhc3N1bWVkLXNoYXBlCi0JICAgICBhcmd1bWVudC4gIFBlcmZv cm1pbmcgImVudGVyIGRhdGEiIGluc2lkZSB0aGUgY2FsbGVkIGZ1bmN0aW9uCi0JICAgICB3 b3VsZCB0aHVzIGJlIHByb2JsZW1hdGljLiAgKi8KLQkgIGlmIChjb2RlID09IE9NUF9UQVJH RVRfRVhJVF9EQVRBCi0JICAgICAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09N UF9NQVBfVE9fUFNFVCkKLQkgICAgT01QX0NMQVVTRV9TRVRfTUFQX0tJTkQgKGMsIE9NUF9D TEFVU0VfTUFQX0tJTkQgKCpwcmV2X2xpc3RfcCkKLQkJCQkJPT0gR09NUF9NQVBfREVMRVRF Ci0JCQkJCT8gR09NUF9NQVBfREVMRVRFIDogR09NUF9NQVBfUkVMRUFTRSk7Ci0JICBlbHNl IGlmICgoY29kZSA9PSBPTVBfVEFSR0VUX0VYSVRfREFUQSB8fCBjb2RlID09IE9NUF9UQVJH RVRfVVBEQVRFKQotCQkgICAmJiAoT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09NUF9N QVBfUE9JTlRFUgotCQkgICAgICAgfHwgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgPT0gR09N UF9NQVBfVE9fUFNFVCkpCi0JICAgIHJlbW92ZSA9IHRydWU7Ci0KIAkgIGlmIChyZW1vdmUp CiAJICAgIGJyZWFrOwogCSAgaWYgKERFQ0xfUCAoZGVjbCkgJiYgb3V0ZXJfY3R4ICYmIChy ZWdpb25fdHlwZSAmIE9SVF9BQ0MpKQpAQCAtMTE0MTgsMjEgKzExMzkzLDYgQEAgZ2ltcGxp Znlfc2Nhbl9vbXBfY2xhdXNlcyAodHJlZSAqbGlzdF9wLCBnaW1wbGVfc2VxICpwcmVfcCwK IAkJICByZW1vdmUgPSB0cnVlOwogCQkgIGJyZWFrOwogCQl9Ci0KLQkgICAgICBpZiAoIXJl bW92ZQotCQkgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBfTUFQX0FMV0FZ U19QT0lOVEVSCi0JCSAgJiYgT01QX0NMQVVTRV9NQVBfS0lORCAoYykgIT0gR09NUF9NQVBf QVRUQUNIX0RFVEFDSAotCQkgICYmIE9NUF9DTEFVU0VfTUFQX0tJTkQgKGMpICE9IEdPTVBf TUFQX1RPX1BTRVQKLQkJICAmJiBPTVBfQ0xBVVNFX0NIQUlOIChjKQotCQkgICYmIE9NUF9D TEFVU0VfQ09ERSAoT01QX0NMQVVTRV9DSEFJTiAoYykpID09IE9NUF9DTEFVU0VfTUFQCi0J CSAgJiYgKChPTVBfQ0xBVVNFX01BUF9LSU5EIChPTVBfQ0xBVVNFX0NIQUlOIChjKSkKLQkJ ICAgICAgID09IEdPTVBfTUFQX0FMV0FZU19QT0lOVEVSKQotCQkgICAgICB8fCAoT01QX0NM QVVTRV9NQVBfS0lORCAoT01QX0NMQVVTRV9DSEFJTiAoYykpCi0JCQkgID09IEdPTVBfTUFQ X0FUVEFDSF9ERVRBQ0gpCi0JCSAgICAgIHx8IChPTVBfQ0xBVVNFX01BUF9LSU5EIChPTVBf Q0xBVVNFX0NIQUlOIChjKSkKLQkJCSAgPT0gR09NUF9NQVBfVE9fUFNFVCkpKQotCQlwcmV2 X2xpc3RfcCA9IGxpc3RfcDsKLQogCSAgICAgIGJyZWFrOwogCSAgICB9CiAJICBmbGFncyA9 IEdPVkRfTUFQIHwgR09WRF9FWFBMSUNJVDsKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MCBiL2xpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS0zLmY5MAppbmRl eCA1ZDk3NTY2Li4xYjNjZGY5IDEwMDY0NAotLS0gYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtMy5mOTAKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTMuZjkwCkBAIC0xNyw2 ICsxNyw2IEBAIHZhciVwMiA9IFs0Niw2NzksNTRdCiAgIGlmIChhbnkgKHZhciVwMSAvPSBb MjIsNTMsMjgsNiw0XSkpIHN0b3AgMwogICBpZiAoYW55ICh2YXIlcDIgLz0gWzQ2LDY3OSw1 NF0pKSBzdG9wIDQKICEkb21wIGVuZCB0YXJnZXQKLSEhJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOnZhciVwMSwgdmFyJXAyKQorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAo ZnJvbTp2YXIlcDEsIHZhciVwMikKIGVuZAogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAgYi9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0LWVudGVyLWRhdGEtNC5mOTAKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjE5MmJmMgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXIt ZGF0YS00LmY5MApAQCAtMCwwICsxLDU0MCBAQAorISBDaGVjayB0aGF0ICdtYXAoYWxsb2M6 JyBwcm9wZXJseSB3b3JrcyB3aXRoCishIC0gZGVmZXJyZWQtbGVuZ3RoIGNoYXJhY3RlciBz dHJpbmdzCishIC0gYXJyYXlzIHdpdGggYXJyYXkgZGVzY3JpcHRvcnMKKyEgRm9yIHRob3Nl LCB0aGUgYXJyYXkgZGVzY3JpcHRvciAvIHN0cmluZyBsZW5ndGggbXVzdCBiZSBtYXBwZWQg d2l0aCAndG86JworCitwcm9ncmFtIG1haW4KK2ltcGxpY2l0IG5vbmUKKwordHlwZSB0Cisg IGludGVnZXIgOjogaWMoMjo1KSwgaWMyCisgIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3Ry KDM6NCksIGNjc3RyMgorICBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkgOjogY2M0c3RyKDM6 NyksIGNjNHN0cjIKKyAgaW50ZWdlciwgcG9pbnRlciA6OiBwYyg6KSwgcGMyCisgIGNoYXJh Y3RlcihsZW49OiksIHBvaW50ZXIgOjogcGNzdHIoOiksIHBjc3RyMgorICBjaGFyYWN0ZXIo bGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0cjIKK2VuZCB0eXBl IHQKKwordHlwZSh0KSA6OiBkdAorCitpbnRlZ2VyIDo6IGlpKDUpLCBpaTIKK2NoYXJhY3Rl cihsZW49MTEpIDo6IGNsc3RyKC0xOjEpLCBjbHN0cjIKK2NoYXJhY3RlcihsZW49MTEsa2lu ZD00KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgoraW50ZWdlciwgcG9pbnRlciA6OiBpcCg6 KSwgaXAyCitpbnRlZ2VyLCBhbGxvY2F0YWJsZSA6OiBpYSg6KSwgaWEyCitjaGFyYWN0ZXIo bGVuPTopLCBwb2ludGVyIDo6IHBzdHIoOiksIHBzdHIyCitjaGFyYWN0ZXIobGVuPTopLCBh bGxvY2F0YWJsZSA6OiBhc3RyKDopLCBhc3RyMgorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCks IHBvaW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCks IGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopLCBhNHN0cjIKKworYWxsb2NhdGUoZHQlcGMoNSks IGR0JXBjMikKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogZHQlcGNzdHIoMikpCith bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IGR0JXBjc3RyMikKKworYWxsb2NhdGUoY2hh cmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCithbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTUsa2luZD00KSA6OiBkdCVwYzRzdHIyKQorCithbGxvY2F0ZShpcCg1KSwg aXAyLCBpYSg4KSwgaWEyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBwc3RyKC0y OjApKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBwc3RyMikKK2FsbG9jYXRlKGNo YXJhY3RlcihsZW49NikgOjogYXN0cigzOjUpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04 KSA6OiBhc3RyMikKKworYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogcDRz dHIoMjo0KSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IHA0c3RyMikK K2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj05LGtpbmQ9NCkgOjogYTRzdHIyKQorCisKKyEgaW50ZWdl ciA6OiBpYygyOjUpLCBpYzIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9j OiBkdCVpYykKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWljKQorICBpZiAoc2l6ZShk dCVpYykgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBl cnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAg ZHQlaWMgPSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVpYykKK2lmIChzaXplKGR0JWljKSAvPSA0KSBl cnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAo dWJvdW5kKGR0JWljLCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVpYyAvPSBb MjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGR0JWljMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWljMikK KyAgZHQlaWMyID0gNDIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGR0JWljMikKK2lmIChkdCVpYzIgLz0gNDIpIGVycm9yIHN0b3AKKwor CishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCksIGNjc3RyMgorCishJG9tcCB0 YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JWNjc3RyKQorISRvbXAgdGFyZ2V0IG1h cChhbGxvYzogZHQlY2NzdHIpCisgIGlmIChsZW4oZHQlY2NzdHIpIC89IDExKSBlcnJvciBz dG9wCisgIGlmIChzaXplKGR0JWNjc3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQoZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVjY3N0 ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAorICBkdCVjY3N0ciA9IFsiMTIzNDU2Nzg5MDEiLCAi YWJjZGVmZ2hpamsiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogZHQlY2NzdHIpCitpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJyb3Ig c3RvcAoraWYgKHNpemUoZHQlY2NzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo ZHQlY2NzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlY2NzdHIsIDEp IC89IDQpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JWNjc3RyIC89IFsiMTIzNDU2Nzg5MDEi LCAiYWJjZGVmZ2hpamsiXSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRh dGEgbWFwKGFsbG9jOiBkdCVjY3N0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVj Y3N0cjIpCisgIGlmIChsZW4oZHQlY2NzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBkdCVj Y3N0cjIgPSAiQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQg ZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjY3N0cjIpCitpZiAobGVuKGR0JWNjc3RyMikgLz0g MTEpIGVycm9yIHN0b3AKK2lmIChkdCVjY3N0cjIgLz0gIkFCQ0RFRkdISUpLIikgZXJyb3Ig c3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigzOjcpLCBj YzRzdHIyCisKKyEgVmFsdWUgY2hlY2sgZmFpbHMKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogZHQlY2M0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlY2M0 c3RyKQorICBpZiAobGVuKGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNp emUoZHQlY2M0c3RyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlY2M0c3Ry LCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3 KSBlcnJvciBzdG9wCisgIGR0JWNjNHN0ciA9IFs0XyIxMjM0NTY3ODkwMSIsIDRfImFiY2Rl ZmdoaWprIiwgJgorICAgICAgICAgICAgICAgNF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3 Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRfIjQ1bmd3ajU2c2oyIl0KKyEkb21wIGVuZCB0 YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjNHN0cikKK2lm IChsZW4oZHQlY2M0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlY2M0c3Ry KSAvPSA1KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGR0JWNjNHN0ciwgMSkgLz0gMykgZXJy b3Igc3RvcAoraWYgKHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcpIGVycm9yIHN0b3AKK2lm IChkdCVjYzRzdHIoMykgLz0gNF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBzdG9wCitpZiAoZHQl Y2M0c3RyKDQpIC89IDRfImFiY2RlZmdoaWprIikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0 cig1KSAvPSA0XyJxZXJmdGNlYTZkcyIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNikg Lz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDcpIC89IDRf IjQ1bmd3ajU2c2oyIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBt YXAoYWxsb2M6IGR0JWNjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVjYzRz dHIyKQorICBpZiAobGVuKGR0JWNjNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGR0JWNj NHN0cjIgPSA0XyJBQkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNjNHN0cjIpCitpZiAobGVuKGR0JWNjNHN0cjIp IC89IDExKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyMiAvPSA0XyJBQkNERUZHSElKSyIp IGVycm9yIHN0b3AKKworCishIGludGVnZXIsIHBvaW50ZXIgOjogcGMoOiksIHBjMgorISBh bGxvY2F0ZShkdCVwYyg1KSwgZHQlcGMyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2Vu dGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogZHQlcGMpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVw YykKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCisgIGlmIChz aXplKGR0JXBjKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlcGMsIDEpIC89 IDEpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3Rv cAorICBkdCVwYyA9IFsxMSwgMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYykKK2lmICgubm90LiBhc3Nv Y2lhdGVkKGR0JXBjKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9y IHN0b3AKK2lmIChsYm91bmQoZHQlcGMsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91 bmQoZHQlcGMsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGR0JXBjIC89IFsxMSwg MjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0 YSBtYXAoYWxsb2M6IGR0JXBjMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjMikK KyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3RvcAorICBkdCVwYzIg PSA5OQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogZHQlcGMyKQoraWYgKGR0JXBjMiAvPSA5OSkgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFz c29jaWF0ZWQoZHQlcGMyKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwg cG9pbnRlciA6OiBwY3N0cig6KSwgcGNzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49 MikgOjogZHQlcGNzdHIoMikpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkgOjogZHQl cGNzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1bmhh bmRsZWQga2luZCAweDAwCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog ZHQlcGNzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwY3N0cikKKyAgaWYgKC5u b3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGNz dHIpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9y IHN0b3AKKyAgaWYgKGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBp ZiAodWJvdW5kKGR0JXBjc3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGR0JXBjc3RyID0g WyIwMSIsICJqayJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRh IG1hcChmcm9tOiBkdCVwY3N0cikKK2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyKSkg ZXJyb3Igc3RvcAoraWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKHNp emUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQlcGNzdHIsIDEp IC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89IDIpIGVycm9y IHN0b3AKK2lmIChhbnkgKGR0JXBjc3RyIC89IFsiMDEiLCAiamsiXSkpIGVycm9yIHN0b3AK KworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtp bmQgMHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjc3Ry MikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JXBjc3RyMikKKyAgaWYgKC5ub3QuIGFz c29jaWF0ZWQoZHQlcGNzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjc3RyMikg Lz0gNCkgZXJyb3Igc3RvcAorICBkdCVwY3N0cjIgPSAiSElKSyIKKyEkb21wIGVuZCB0YXJn ZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyMikKK2lmICgu bm90LiBhc3NvY2lhdGVkKGR0JXBjc3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGNz dHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAoZHQlcGNzdHIyIC89ICJISUpLIikgZXJyb3Ig c3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIHBvaW50ZXIgOjogcGM0c3Ry KDopLCBwYzRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IGR0 JXBjNHN0cigyOjMpKQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTUsa2luZD00KSA6OiBk dCVwYzRzdHIyKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRfZGF0YSB1 bmhhbmRsZWQga2luZCAweDAwCishIHN0cnVjdHVyZSBlbGVtZW50IHdoZW4gb3RoZXIgbWFw cGVkIGVsZW1lbnRzIGZyb20gdGhlIHNhbWUgc3RydWN0dXJlIHdlcmVuJ3QgbWFwcGVkIHRv Z2V0aGVyIHdpdGggaXQKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogZHQl cGM0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogZHQlcGM0c3RyKQorICBpZiAoLm5v dC4gYXNzb2NpYXRlZChkdCVwYzRzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGM0 c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGR0JXBjNHN0cikgLz0gMikgZXJy b3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAor ICBpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBkdCVwYzRz dHIgPSBbNF8iNDU2IiwgNF8idHp1Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdl dCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjNHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVk KGR0JXBjNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJv ciBzdG9wCitpZiAoc2l6ZShkdCVwYzRzdHIpIC89IDIpIGVycm9yIHN0b3AKK2lmIChsYm91 bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JXBjNHN0 ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cigyKSAvPSA0XyI0NTYiKSBl cnJvciBzdG9wCitpZiAoZHQlcGM0c3RyKDMpIC89IDRfInR6dSIpIGVycm9yIHN0b3AKKwor ISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQg MHgwMQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjNHN0cjIp CishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIyKQorICBpZiAoLm5vdC4gYXNz b2NpYXRlZChkdCVwYzRzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGR0JXBjNHN0cjIp IC89IDUpIGVycm9yIHN0b3AKKyAgZHQlcGM0c3RyMiA9IDRfIjk4NzY1IgorISRvbXAgZW5k IHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3RyMikK K2lmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVu KGR0JXBjNHN0cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChkdCVwYzRzdHIyIC89IDRfIjk4 NzY1IikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdlciA6OiBpaSg1KSwgaWkyCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWkpCishJG9tcCB0YXJnZXQgbWFwKGFs bG9jOiBpaSkKKyAgaWYgKHNpemUoaWkpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3Vu ZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlpLCAxKSAvPSA1KSBl cnJvciBzdG9wCisgIGlpID0gWy0xLCAtMiwgLTMsIC00LCAtNV0KKyEkb21wIGVuZCB0YXJn ZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlpKQoraWYgKHNpemUoaWkp IC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWksIDEpIC89IDEpIGVycm9yIHN0b3AK K2lmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlpIC89IFst MSwgLTIsIC0zLCAtNCwgLTVdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAoYWxsb2M6IGlpMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGlpMikKKyAg aWkyID0gLTQxMAorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogaWkyKQoraWYgKGlpMiAvPSAtNDEwKSBlcnJvciBzdG9wCisKKworISBjaGFy YWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKSwgY2xzdHIyCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcChhbGxvYzogY2xzdHIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBj bHN0cikKKyAgaWYgKGxlbihjbHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUo Y2xzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEp IGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChjbHN0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAor ICBjbHN0ciA9IFsiMTIzNDU2Nzg5MDEiLCAiYWJjZGVmZ2hpamsiLCAiQUJDREVGR0hJSksi XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTog Y2xzdHIpCitpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2xz dHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoY2xzdHIsIDEpIC89IC0xKSBlcnJv ciBzdG9wCitpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAoYW55 IChjbHN0ciAvPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpL Il0pKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzog Y2xzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogY2xzdHIyKQorICBpZiAobGVuKGNs c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKKyAgY2xzdHIyID0gIkFCQ0RFRmdoaWprIgorISRv bXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2xzdHIy KQoraWYgKGxlbihjbHN0cjIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoY2xzdHIyIC89ICJB QkNERUZnaGlqayIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEsa2luZD00 KSA6OiBjbDRzdHIoMDozKSwgY2w0c3RyMgorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBt YXAoYWxsb2M6IGNsNHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGNsNHN0cikKKyAg aWYgKGxlbihjbDRzdHIpIC89IDExKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGNsNHN0cikg Lz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Ig c3RvcAorICBpZiAodWJvdW5kKGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBjbDRz dHIgPSBbNF8iMTIzNDU2Nzg5MDEiLCA0XyJhYmNkZWZnaGlqayIsICYKKyAgICAgICAgICAg IDRfInFlcmZ0Y2VhNmRzIiwgNF8iYTFmOWczN2dhNC4iXQorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogY2w0c3RyKQoraWYgKGxlbihjbDRz dHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShjbDRzdHIpIC89IDQpIGVycm9yIHN0 b3AKK2lmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCitpZiAodWJvdW5k KGNsNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigwKSAvPSA0XyIxMjM0 NTY3ODkwMSIpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMSkgLz0gNF8iYWJjZGVmZ2hpamsi KSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDIpIC89IDRfInFlcmZ0Y2VhNmRzIikgZXJyb3Ig c3RvcAoraWYgKGNsNHN0cigzKSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVycm9yIHN0b3AKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBjbDRzdHIyKQorISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogY2w0c3RyMikKKyAgaWYgKGxlbihjbDRzdHIyKSAvPSAxMSkgZXJy b3Igc3RvcAorICBjbDRzdHIyID0gNF8iQUJDREVGR0hJSksiCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIyKQoraWYgKGxlbihj bDRzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGNsNHN0cjIgLz0gNF8iQUJDREVGR0hJ SksiKSBlcnJvciBzdG9wCisKKworISBhbGxvY2F0ZShpcCg1KSwgaXAyLCBpYSg4KSwgaWEy KQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlwKQorISRvbXAgdGFy Z2V0IG1hcChhbGxvYzogaXApCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Ig c3RvcAorICBpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlw LCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9y IHN0b3AKKyAgaXAgPSBbMTEsIDIyLCAzMywgNDQsIDU1XQorISRvbXAgZW5kIHRhcmdldAor ISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaXApCitpZiAoLm5vdC4gYXNzb2Np YXRlZChpcCkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlwKSAvPSA1KSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlwLCAxKSAv PSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChpcCAvPSBbMTEsIDIyLCAzMywgNDQsIDU1XSkp IGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBpcDIp CishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpcDIpCisgIGlmICgubm90LiBhc3NvY2lhdGVk KGlwMikpIGVycm9yIHN0b3AKKyAgaXAyID0gOTkKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21w IHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwMikKK2lmIChpcDIgLz0gOTkpIGVycm9y IHN0b3AKK2lmICgubm90LiBhc3NvY2lhdGVkKGlwMikpIGVycm9yIHN0b3AKKworCishIGFs bG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCisKKyEkb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcChhbGxvYzogaWEpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpYSkKKyAgaWYg KC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoaWEpIC89IDgp IGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChpYSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBp ZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9wCisgIGlhID0gWzEsMiwzLDQsNSw2 LDcsOF0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGlhKQoraWYgKC5ub3QuIGFsbG9jYXRlZChpYSkpIGVycm9yIHN0b3AKK2lmIChzaXpl KGlhKSAvPSA4KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGlhLCAxKSAvPSAxKSBlcnJvciBz dG9wCitpZiAodWJvdW5kKGlhLCAxKSAvPSA4KSBlcnJvciBzdG9wCitpZiAoYW55IChpYSAv PSBbMSwyLDMsNCw1LDYsNyw4XSkpIGVycm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVy IGRhdGEgbWFwKGFsbG9jOiBpYTIpCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpYTIpCisg IGlmICgubm90LiBhbGxvY2F0ZWQoaWEyKSkgZXJyb3Igc3RvcAorICBpYTIgPSAxMDIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhMikK K2lmIChpYTIgLz0gMTAyKSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYWxsb2NhdGVkKGlhMikp IGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6 KSwgcHN0cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBwc3RyKC0yOjApKQor ISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTQpIDo6IHBzdHIyKQorCishIGxpYmdvbXA6IG52 cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcChhbGxvYzogcHN0cikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IHBzdHIpCisg IGlmICgubm90LiBhc3NvY2lhdGVkKHBzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4ocHN0 cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9w CisgIGlmIChsYm91bmQocHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3Vu ZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIHBzdHIgPSBbIjAxIiwgImprIiwgImFx Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206 IHBzdHIpCitpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAoraWYgKGxl bihwc3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBz dG9wCitpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCitpZiAodWJvdW5k KHBzdHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmIChhbnkgKHBzdHIgLz0gWyIwMSIsICJq ayIsICJhcSJdKSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAo YWxsb2M6IHBzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcHN0cjIpCisgIGlmICgu bm90LiBhc3NvY2lhdGVkKHBzdHIyKSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHBzdHIyKSAv PSA0KSBlcnJvciBzdG9wCisgIHBzdHIyID0gIkhJSksiCishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBwc3RyMikKK2lmICgubm90LiBhc3Nv Y2lhdGVkKHBzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwc3RyMikgLz0gNCkgZXJyb3Ig c3RvcAoraWYgKHBzdHIyIC89ICJISUpLIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVy KGxlbj06KSwgYWxsb2NhdGFibGUgOjogYXN0cig6KSwgYXN0cjIKKyEgYWxsb2NhdGUoY2hh cmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49 OCkgOjogYXN0cjIpCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJyb3I6IG91dCBvZiBt ZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhc3RyKQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhc3Ry KSkgZXJyb3Igc3RvcAorICBpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKKyAgaWYg KHNpemUoYXN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGFzdHIsIDEpIC89 IDMpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9w CisgIGFzdHIgPSBbIjAxZGI0NSIsICJqayREJVMiLCAienV0ZzQ3Il0KKyEkb21wIGVuZCB0 YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGFzdHIpCitpZiAoLm5v dC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFzdHIpIC89IDYpIGVy cm9yIHN0b3AKK2lmIChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQo YXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBl cnJvciBzdG9wCitpZiAoYW55IChhc3RyIC89IFsiMDFkYjQ1IiwgImprJEQlUyIsICJ6dXRn NDciXSkpIGVycm9yIHN0b3AKKworISBsaWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0 IG9mIG1lbW9yeQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGFzdHIy KQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYXN0cjIpCisgIGlmICgubm90LiBhbGxvY2F0 ZWQoYXN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYXN0cjIpIC89IDgpIGVycm9yIHN0 b3AKKyAgYXN0cjIgPSAiSElKS2hpamsiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3RyMikKK2lmICgubm90LiBhbGxvY2F0ZWQoYXN0 cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGFzdHIyKSAvPSA4KSBlcnJvciBzdG9wCitpZiAo YXN0cjIgLz0gIkhJSktoaWprIikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06 LGtpbmQ9NCksIHBvaW50ZXIgOjogcDRzdHIoOiksIHA0c3RyMgorISBhbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorISBhbGxvY2F0ZShjaGFyYWN0 ZXIobGVuPTUsa2luZD00KSA6OiBwNHN0cjIpCisKKyEgRkFJTFMgd2l0aCB2YWx1ZSBjaGVj aworCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IHA0c3RyKQorISRvbXAg dGFyZ2V0IG1hcChhbGxvYzogcDRzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKHA0c3Ry KSkgZXJyb3Igc3RvcAorICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlm IChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQocDRzdHIsIDEp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChwNHN0ciwgMSkgLz0gNCkgZXJyb3Ig c3RvcAorICBwNHN0cig6KSA9IFs0XyJmODUiLCA0XyI4YWYiLCA0XyJBJUYiXQorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIpCitp ZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cikpIGVycm9yIHN0b3AKK2lmIChsZW4ocDRzdHIp IC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKHA0c3RyKSAvPSAzKSBlcnJvciBzdG9wCitp ZiAobGJvdW5kKHA0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKHA0c3Ry LCAxKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocDRzdHIoMikgIC89IDRfImY4NSIpIGVycm9y IHN0b3AKK2lmIChwNHN0cigzKSAgLz0gNF8iOGFmIikgZXJyb3Igc3RvcAoraWYgKHA0c3Ry KDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRh IG1hcChhbGxvYzogcDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogcDRzdHIyKQor ICBpZiAoLm5vdC4gYXNzb2NpYXRlZChwNHN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4o cDRzdHIyKSAvPSA1KSBlcnJvciBzdG9wCisgIHA0c3RyMiA9IDRfIjk4NzVhIgorISRvbXAg ZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcDRzdHIyKQor aWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwNHN0 cjIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChwNHN0cjIgLz0gNF8iOTg3NWEiKSBlcnJvciBz dG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgYWxsb2NhdGFibGUgOjogYTRz dHIoOiksIGE0c3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBh NHN0cigtMjozKSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj05LGtpbmQ9NCkgOjogYTRz dHIyKQorCishIGxpYmdvbXA6IFRyeWluZyB0byBtYXAgaW50byBkZXZpY2UgWzB4MTAyN2Jh MC4uMHgyNTEwNTBiYjljOWViYmEwKSBvYmplY3Qgd2hlbiBbMHg3ZmZkMDI2ZTY3MDguLjB4 N2ZmZDAyNmU2NzEwKSBpcyBhbHJlYWR5IG1hcHBlZAorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAoYWxsb2M6IGE0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChhbGxvYzogYTRzdHIp CisgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4o YTRzdHIpIC89IDcpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9y IHN0b3AKKyAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKKyAgaWYg KHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICAhIFNlZSBQUiBmb3J0cmFu LzEwNzUwOCB3aHkgJyg6KScgaXMgcmVxdWlyZWQKKyAgYTRzdHIoOikgPSBbNF8ic2Y0NTZh cSIsIDRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVzNyIsIDRfImo9OGFmNGQi LCA0XyIuLEElRnN6Il0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGE0c3RyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cikpIGVycm9y IHN0b3AKK2lmIChsZW4oYTRzdHIpIC89IDcpIGVycm9yIHN0b3AKK2lmIChzaXplKGE0c3Ry KSAvPSA2KSBlcnJvciBzdG9wCitpZiAobGJvdW5kKGE0c3RyLCAxKSAvPSAtMikgZXJyb3Ig c3RvcAoraWYgKHVib3VuZChhNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAoraWYgKGE0c3Ry KC0yKSAvPSA0XyJzZjQ1NmFxIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKC0xKSAvPSA0XyIz ZHR6dTI0IikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDApICAvPSA0XyJfNGZoN3NtIikgZXJy b3Igc3RvcAoraWYgKGE0c3RyKDEpICAvPSA0XyI9ZmY4NXM3IikgZXJyb3Igc3RvcAoraWYg KGE0c3RyKDIpICAvPSA0XyJqPThhZjRkIikgZXJyb3Igc3RvcAoraWYgKGE0c3RyKDMpICAv PSA0XyIuLEElRnN6IikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBt YXAoYWxsb2M6IGE0c3RyMikKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGE0c3RyMikKKyAg aWYgKC5ub3QuIGFsbG9jYXRlZChhNHN0cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4oYTRz dHIyKSAvPSA5KSBlcnJvciBzdG9wCisgIGE0c3RyMiA9IDRfIjk4NzY1YTIzZCIKKyEkb21w IGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGE0c3RyMikK K2lmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhNHN0 cjIpIC89IDkpIGVycm9yIHN0b3AKK2lmIChhNHN0cjIgLz0gNF8iOTg3NjVhMjNkIikgZXJy b3Igc3RvcAorCisKK2RlYWxsb2NhdGUoZHQlcGMsIGR0JXBjMikKK2RlYWxsb2NhdGUoZHQl cGNzdHIpCitkZWFsbG9jYXRlKGR0JXBjc3RyMikKKworZGVhbGxvY2F0ZShkdCVwYzRzdHIp CitkZWFsbG9jYXRlKGR0JXBjNHN0cjIpCisKK2RlYWxsb2NhdGUoaXAsIGlwMiwgaWEsIGlh MikKK2RlYWxsb2NhdGUocHN0cikKK2RlYWxsb2NhdGUocHN0cjIpCitkZWFsbG9jYXRlKGFz dHIpCitkZWFsbG9jYXRlKGFzdHIyKQorCitkZWFsbG9jYXRlKHA0c3RyKQorZGVhbGxvY2F0 ZShwNHN0cjIpCitkZWFsbG9jYXRlKGE0c3RyKQorZGVhbGxvY2F0ZShhNHN0cjIpCitlbmQK ZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90YXJnZXQt ZW50ZXItZGF0YS01LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi90 YXJnZXQtZW50ZXItZGF0YS01LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi5jZjc1OTM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTUuZjkwCkBAIC0wLDAgKzEsNTQwIEBA CishIENoZWNrIHRoYXQgJ21hcCgodG8pZnJvbTonIHByb3Blcmx5IHdvcmtzIHdpdGgKKyEg LSBkZWZlcnJlZC1sZW5ndGggY2hhcmFjdGVyIHN0cmluZ3MKKyEgLSBhcnJheXMgd2l0aCBh cnJheSBkZXNjcmlwdG9ycworISBGb3IgdGhvc2UsIHRoZSBhcnJheSBkZXNjcmlwdG9yIC8g c3RyaW5nIGxlbmd0aCBtdXN0IGJlIG1hcHBlZCB3aXRoICd0bzonCisKK3Byb2dyYW0gbWFp bgoraW1wbGljaXQgbm9uZQorCit0eXBlIHQKKyAgaW50ZWdlciA6OiBpYygyOjUpLCBpYzIK KyAgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2NzdHIoMzo0KSwgY2NzdHIyCisgIGNoYXJhY3Rl cihsZW49MTEsa2luZD00KSA6OiBjYzRzdHIoMzo3KSwgY2M0c3RyMgorICBpbnRlZ2VyLCBw b2ludGVyIDo6IHBjKDopLCBwYzIKKyAgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBw Y3N0cig6KSwgcGNzdHIyCisgIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6 IHBjNHN0cig6KSwgcGM0c3RyMgorZW5kIHR5cGUgdAorCit0eXBlKHQpIDo6IGR0CisKK2lu dGVnZXIgOjogaWkoNSksIGlpMgorY2hhcmFjdGVyKGxlbj0xMSkgOjogY2xzdHIoLTE6MSks IGNsc3RyMgorY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpLCBjbDRz dHIyCitpbnRlZ2VyLCBwb2ludGVyIDo6IGlwKDopLCBpcDIKK2ludGVnZXIsIGFsbG9jYXRh YmxlIDo6IGlhKDopLCBpYTIKK2NoYXJhY3RlcihsZW49OiksIHBvaW50ZXIgOjogcHN0cig6 KSwgcHN0cjIKK2NoYXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOiksIGFz dHIyCitjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6OiBwNHN0cig6KSwgcDRz dHIyCitjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOiks IGE0c3RyMgorCithbGxvY2F0ZShkdCVwYyg1KSwgZHQlcGMyKQorYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NCkg OjogZHQlcGNzdHIyKQorCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBk dCVwYzRzdHIoMjozKSkKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IGR0 JXBjNHN0cjIpCisKK2FsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCithbGxvY2F0 ZShjaGFyYWN0ZXIobGVuPTIpIDo6IHBzdHIoLTI6MCkpCithbGxvY2F0ZShjaGFyYWN0ZXIo bGVuPTQpIDo6IHBzdHIyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6 NSkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTgpIDo6IGFzdHIyKQorCithbGxvY2F0ZShj aGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBwNHN0cigyOjQpKQorYWxsb2NhdGUoY2hhcmFj dGVyKGxlbj01LGtpbmQ9NCkgOjogcDRzdHIyKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj03 LGtpbmQ9NCkgOjogYTRzdHIoLTI6MykpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTksa2lu ZD00KSA6OiBhNHN0cjIpCisKKworISBpbnRlZ2VyIDo6IGljKDI6NSksIGljMgorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVpYykKKyEkb21wIHRhcmdldCBt YXAoZnJvbTogZHQlaWMpCisgIGlmIChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoZHQlaWMsIDEpIC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKHVib3VuZChk dCVpYywgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBkdCVpYyA9IFsyMiwgMzMsIDQ0LCA1NV0K KyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0 JWljKQoraWYgKHNpemUoZHQlaWMpIC89IDQpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoZHQl aWMsIDEpIC89IDIpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlaWMsIDEpIC89IDUpIGVy cm9yIHN0b3AKK2lmIChhbnkgKGR0JWljIC89IFsyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBz dG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JWljMikKKyEk b21wIHRhcmdldCBtYXAoZnJvbTogZHQlaWMyKQorICBkdCVpYzIgPSA0MgorISRvbXAgZW5k IHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlaWMyKQoraWYg KGR0JWljMiAvPSA0MikgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSkgOjog Y2NzdHIoMzo0KSwgY2NzdHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zy b206IGR0JWNjc3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVjY3N0cikKKyAgaWYg KGxlbihkdCVjY3N0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2NzdHIp IC89IDIpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJy b3Igc3RvcAorICBpZiAodWJvdW5kKGR0JWNjc3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisg IGR0JWNjc3RyID0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdCishJG9tcCBlbmQg dGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVjY3N0cikKK2lm IChsZW4oZHQlY2NzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVjY3N0cikg Lz0gMikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykgZXJyb3Ig c3RvcAoraWYgKHVib3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGFu eSAoZHQlY2NzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdKSkgZXJyb3Ig c3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBkdCVjY3N0cjIp CishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JWNjc3RyMikKKyAgaWYgKGxlbihkdCVjY3N0 cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGR0JWNjc3RyMiA9ICJBQkNERUZHSElKSyIKKyEk b21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JWNj c3RyMikKK2lmIChsZW4oZHQlY2NzdHIyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKGR0JWNj c3RyMiAvPSAiQUJDREVGR0hJSksiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVu PTExLGtpbmQ9NCkgOjogY2M0c3RyKDM6NyksIGNjNHN0cjIKKworISBWYWx1ZSBjaGVjayBm YWlscworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlY2M0c3RyKQor ISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBkdCVjYzRzdHIpCisgIGlmIChsZW4oZHQlY2M0c3Ry KSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9y IHN0b3AKKyAgaWYgKGxib3VuZChkdCVjYzRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyAg aWYgKHVib3VuZChkdCVjYzRzdHIsIDEpIC89IDcpIGVycm9yIHN0b3AKKyAgZHQlY2M0c3Ry ID0gWzRfIjEyMzQ1Njc4OTAxIiwgNF8iYWJjZGVmZ2hpamsiLCAmCisgICAgICAgICAgICAg ICA0XyJxZXJmdGNlYTZkcyIsIDRfImExZjlnMzdnYTQuIiwgJgorICAgICAgICAgICAgICAg NF8iNDVuZ3dqNTZzajIiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQg ZGF0YSBtYXAoZnJvbTogZHQlY2M0c3RyKQoraWYgKGxlbihkdCVjYzRzdHIpIC89IDExKSBl cnJvciBzdG9wCitpZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9yIHN0b3AKK2lmIChs Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWNj NHN0ciwgMSkgLz0gNykgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cigzKSAvPSA0XyIxMjM0 NTY3ODkwMSIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNCkgLz0gNF8iYWJjZGVmZ2hp amsiKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDUpIC89IDRfInFlcmZ0Y2VhNmRzIikg ZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cig2KSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVycm9y IHN0b3AKK2lmIChkdCVjYzRzdHIoNykgLz0gNF8iNDVuZ3dqNTZzajIiKSBlcnJvciBzdG9w CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JWNjNHN0cjIpCish JG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JWNjNHN0cjIpCisgIGlmIChsZW4oZHQlY2M0c3Ry MikgLz0gMTEpIGVycm9yIHN0b3AKKyAgZHQlY2M0c3RyMiA9IDRfIkFCQ0RFRkdISUpLIgor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQl Y2M0c3RyMikKK2lmIChsZW4oZHQlY2M0c3RyMikgLz0gMTEpIGVycm9yIHN0b3AKK2lmIChk dCVjYzRzdHIyIC89IDRfIkFCQ0RFRkdISUpLIikgZXJyb3Igc3RvcAorCisKKyEgaW50ZWdl ciwgcG9pbnRlciA6OiBwYyg6KSwgcGMyCishIGFsbG9jYXRlKGR0JXBjKDUpLCBkdCVwYzIp CisKKyEgbGliZ29tcDogR09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBr aW5kIDB4MDAKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGMp CishJG9tcCB0YXJnZXQgbWFwKGZyb206IGR0JXBjKQorICBpZiAoLm5vdC4gYXNzb2NpYXRl ZChkdCVwYykpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0 b3AKKyAgaWYgKGxib3VuZChkdCVwYywgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJv dW5kKGR0JXBjLCAxKSAvPSA1KSBlcnJvciBzdG9wCisgIGR0JXBjID0gWzExLCAyMiwgMzMs IDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFw KGZyb206IGR0JXBjKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9w CitpZiAoc2l6ZShkdCVwYykgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVwYywg MSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Ig c3RvcAoraWYgKGFueSAoZHQlcGMgLz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBz dG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JXBjMikKKyEk b21wIHRhcmdldCBtYXAoZnJvbTogZHQlcGMyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChk dCVwYzIpKSBlcnJvciBzdG9wCisgIGR0JXBjMiA9IDk5CishJG9tcCBlbmQgdGFyZ2V0Cish JG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzIpCitpZiAoZHQlcGMyIC89 IDk5KSBlcnJvciBzdG9wCitpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYzIpKSBlcnJvciBz dG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVyIDo6IHBjc3RyKDopLCBwY3N0 cjIKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6OiBkdCVwY3N0cigyKSkKKyEgYWxs b2NhdGUoY2hhcmFjdGVyKGxlbj00KSA6OiBkdCVwY3N0cjIpCisKKyEgbGliZ29tcDogR09N UF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRvbXAg dGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGNzdHIpCishJG9tcCB0YXJnZXQg bWFwKGZyb206IGR0JXBjc3RyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikp IGVycm9yIHN0b3AKKyAgaWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBp ZiAoc2l6ZShkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JXBj c3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGNzdHIsIDEpIC89 IDIpIGVycm9yIHN0b3AKKyAgZHQlcGNzdHIgPSBbIjAxIiwgImprIl0KKyEkb21wIGVuZCB0 YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGR0JXBjc3RyKQoraWYg KC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKGR0JXBj c3RyKSAvPSAyKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVwY3N0cikgLz0gMikgZXJyb3Ig c3RvcAoraWYgKGxib3VuZChkdCVwY3N0ciwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVi b3VuZChkdCVwY3N0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlcGNzdHIg Lz0gWyIwMSIsICJqayJdKSkgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0 X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAxCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JXBjc3RyMikKKyEkb21wIHRhcmdldCBtYXAoZnJv bTogZHQlcGNzdHIyKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cjIpKSBlcnJv ciBzdG9wCisgIGlmIChsZW4oZHQlcGNzdHIyKSAvPSA0KSBlcnJvciBzdG9wCisgIGR0JXBj c3RyMiA9ICJISUpLIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0 YSBtYXAoZnJvbTogZHQlcGNzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGNzdHIy KSkgZXJyb3Igc3RvcAoraWYgKGxlbihkdCVwY3N0cjIpIC89IDQpIGVycm9yIHN0b3AKK2lm IChkdCVwY3N0cjIgLz0gIkhJSksiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVu PTosa2luZD00KSwgcG9pbnRlciA6OiBwYzRzdHIoOiksIHBjNHN0cjIKKyEgYWxsb2NhdGUo Y2hhcmFjdGVyKGxlbj0zLGtpbmQ9NCkgOjogZHQlcGM0c3RyKDI6MykpCishIGFsbG9jYXRl KGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6IGR0JXBjNHN0cjIpCisKKyEgbGliZ29tcDog R09NUF90YXJnZXRfZW50ZXJfZXhpdF9kYXRhIHVuaGFuZGxlZCBraW5kIDB4MDAKKworISRv bXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogZHQlcGM0c3RyKQorISRvbXAgdGFy Z2V0IG1hcChmcm9tOiBkdCVwYzRzdHIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBj NHN0cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihkdCVwYzRzdHIpIC89IDMpIGVycm9yIHN0 b3AKKyAgaWYgKHNpemUoZHQlcGM0c3RyKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmIChsYm91 bmQoZHQlcGM0c3RyLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlcGM0 c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGR0JXBjNHN0ciA9IFs0XyI0NTYiLCA0XyJ0 enUiXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJv bTogZHQlcGM0c3RyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Ig c3RvcAoraWYgKGxlbihkdCVwYzRzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChzaXplKGR0 JXBjNHN0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89 IDIpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoZHQlcGM0c3RyLCAxKSAvPSAzKSBlcnJvciBz dG9wCitpZiAoZHQlcGM0c3RyKDIpIC89IDRfIjQ1NiIpIGVycm9yIHN0b3AKK2lmIChkdCVw YzRzdHIoMykgLz0gNF8idHp1IikgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFy Z2V0X2VudGVyX2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAxCisKKyEkb21wIHRhcmdl dCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGR0JXBjNHN0cjIpCishJG9tcCB0YXJnZXQgbWFw KGZyb206IGR0JXBjNHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cjIp KSBlcnJvciBzdG9wCisgIGlmIChsZW4oZHQlcGM0c3RyMikgLz0gNSkgZXJyb3Igc3RvcAor ICBkdCVwYzRzdHIyID0gNF8iOTg3NjUiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJn ZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYzRzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0 ZWQoZHQlcGM0c3RyMikpIGVycm9yIHN0b3AKK2lmIChsZW4oZHQlcGM0c3RyMikgLz0gNSkg ZXJyb3Igc3RvcAoraWYgKGR0JXBjNHN0cjIgLz0gNF8iOTg3NjUiKSBlcnJvciBzdG9wCisK KworISBpbnRlZ2VyIDo6IGlpKDUpLCBpaTIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEg bWFwKHRvZnJvbTogaWkpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlpKQorICBpZiAoc2l6 ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBlcnJv ciBzdG9wCisgIGlmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaWkgPSBb LTEsIC0yLCAtMywgLTQsIC01XQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4 aXQgZGF0YSBtYXAoZnJvbTogaWkpCitpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAor aWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpaSwgMSkg Lz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoaWkgLz0gWy0xLCAtMiwgLTMsIC00LCAtNV0p KSBlcnJvciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGlp MikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogaWkyKQorICBpaTIgPSAtNDEwCishJG9tcCBl bmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBpaTIpCitpZiAo aWkyIC89IC00MTApIGVycm9yIHN0b3AKKworCishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNs c3RyKC0xOjEpLCBjbHN0cjIKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJv bTogY2xzdHIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGNsc3RyKQorICBpZiAobGVuKGNs c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShjbHN0cikgLz0gMykgZXJyb3Ig c3RvcAorICBpZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkgZXJyb3Igc3RvcAorICBpZiAo dWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGNsc3RyID0gWyIxMjM0NTY3 ODkwMSIsICJhYmNkZWZnaGlqayIsICJBQkNERUZHSElKSyJdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbHN0cikKK2lmIChsZW4oY2xz dHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShjbHN0cikgLz0gMykgZXJyb3Igc3Rv cAoraWYgKGxib3VuZChjbHN0ciwgMSkgLz0gLTEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQo Y2xzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmIChhbnkgKGNsc3RyIC89IFsiMTIzNDU2 Nzg5MDEiLCAiYWJjZGVmZ2hpamsiLCAiQUJDREVGR0hJSksiXSkpIGVycm9yIHN0b3AKKwor ISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogY2xzdHIyKQorISRvbXAgdGFy Z2V0IG1hcChmcm9tOiBjbHN0cjIpCisgIGlmIChsZW4oY2xzdHIyKSAvPSAxMSkgZXJyb3Ig c3RvcAorICBjbHN0cjIgPSAiQUJDREVGZ2hpamsiCishJG9tcCBlbmQgdGFyZ2V0CishJG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbHN0cjIpCitpZiAobGVuKGNsc3RyMikg Lz0gMTEpIGVycm9yIHN0b3AKK2lmIChjbHN0cjIgLz0gIkFCQ0RFRmdoaWprIikgZXJyb3Ig c3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMpLCBj bDRzdHIyCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGNsNHN0cikK KyEkb21wIHRhcmdldCBtYXAoZnJvbTogY2w0c3RyKQorICBpZiAobGVuKGNsNHN0cikgLz0g MTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoY2w0c3RyKSAvPSA0KSBlcnJvciBzdG9wCisg IGlmIChsYm91bmQoY2w0c3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQo Y2w0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCisgIGNsNHN0ciA9IFs0XyIxMjM0NTY3ODkw MSIsIDRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgNF8icWVyZnRjZWE2ZHMiLCA0 XyJhMWY5ZzM3Z2E0LiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBjbDRzdHIpCitpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0 b3AKK2lmIChzaXplKGNsNHN0cikgLz0gNCkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChjbDRz dHIsIDEpIC89IDApIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBl cnJvciBzdG9wCitpZiAoY2w0c3RyKDApIC89IDRfIjEyMzQ1Njc4OTAxIikgZXJyb3Igc3Rv cAoraWYgKGNsNHN0cigxKSAvPSA0XyJhYmNkZWZnaGlqayIpIGVycm9yIHN0b3AKK2lmIChj bDRzdHIoMikgLz0gNF8icWVyZnRjZWE2ZHMiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDMp IC89IDRfImExZjlnMzdnYTQuIikgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIg ZGF0YSBtYXAodG9mcm9tOiBjbDRzdHIyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBjbDRz dHIyKQorICBpZiAobGVuKGNsNHN0cjIpIC89IDExKSBlcnJvciBzdG9wCisgIGNsNHN0cjIg PSA0XyJBQkNERUZHSElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0 IGRhdGEgbWFwKGZyb206IGNsNHN0cjIpCitpZiAobGVuKGNsNHN0cjIpIC89IDExKSBlcnJv ciBzdG9wCitpZiAoY2w0c3RyMiAvPSA0XyJBQkNERUZHSElKSyIpIGVycm9yIHN0b3AKKwor CishIGFsbG9jYXRlKGlwKDUpLCBpcDIsIGlhKDgpLCBpYTIpCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcCh0b2Zyb206IGlwKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBpcCkK KyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoaXApKSBlcnJvciBzdG9wCisgIGlmIChzaXplKGlw KSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoaXAsIDEpIC89IDEpIGVycm9yIHN0 b3AKKyAgaWYgKHVib3VuZChpcCwgMSkgLz0gNSkgZXJyb3Igc3RvcAorICBpcCA9IFsxMSwg MjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0YXJnZXQgZXhpdCBk YXRhIG1hcChmcm9tOiBpcCkKK2lmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Igc3Rv cAoraWYgKHNpemUoaXApIC89IDUpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoaXAsIDEpIC89 IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lm IChhbnkgKGlwIC89IFsxMSwgMjIsIDMzLCA0NCwgNTVdKSkgZXJyb3Igc3RvcAorCishJG9t cCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBpcDIpCishJG9tcCB0YXJnZXQgbWFw KGZyb206IGlwMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQoaXAyKSkgZXJyb3Igc3RvcAor ICBpcDIgPSA5OQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBt YXAoZnJvbTogaXAyKQoraWYgKGlwMiAvPSA5OSkgZXJyb3Igc3RvcAoraWYgKC5ub3QuIGFz c29jaWF0ZWQoaXAyKSkgZXJyb3Igc3RvcAorCisKKyEgYWxsb2NhdGUoaXAoNSksIGlwMiwg aWEoOCksIGlhMikKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogaWEp CishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlhKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGlh KSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShpYSkgLz0gOCkgZXJyb3Igc3RvcAorICBpZiAo bGJvdW5kKGlhLCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaWEsIDEpIC89 IDgpIGVycm9yIHN0b3AKKyAgaWEgPSBbMSwyLDMsNCw1LDYsNyw4XQorISRvbXAgZW5kIHRh cmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWEpCitpZiAoLm5vdC4g YWxsb2NhdGVkKGlhKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0 b3AKK2lmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQoaWEs IDEpIC89IDgpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlhIC89IFsxLDIsMyw0LDUsNiw3LDhd KSkgZXJyb3Igc3RvcAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBp YTIpCishJG9tcCB0YXJnZXQgbWFwKGZyb206IGlhMikKKyAgaWYgKC5ub3QuIGFsbG9jYXRl ZChpYTIpKSBlcnJvciBzdG9wCisgIGlhMiA9IDEwMgorISRvbXAgZW5kIHRhcmdldAorISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogaWEyKQoraWYgKGlhMiAvPSAxMDIpIGVy cm9yIHN0b3AKK2lmICgubm90LiBhbGxvY2F0ZWQoaWEyKSkgZXJyb3Igc3RvcAorCisKKyEg Y2hhcmFjdGVyKGxlbj06KSwgcG9pbnRlciA6OiBwc3RyKDopLCBwc3RyMgorISBhbGxvY2F0 ZShjaGFyYWN0ZXIobGVuPTIpIDo6IHBzdHIoLTI6MCkpCishIGFsbG9jYXRlKGNoYXJhY3Rl cihsZW49NCkgOjogcHN0cjIpCisKKyEgbGliZ29tcDogbnZwdHhfYWxsb2MgZXJyb3I6IG91 dCBvZiBtZW1vcnkKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcHN0 cikKKyEkb21wIHRhcmdldCBtYXAoZnJvbTogcHN0cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0 ZWQocHN0cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBzdG9w CisgIGlmIChzaXplKHBzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChwc3Ry LCAxKSAvPSAtMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKHBzdHIsIDEpIC89IDApIGVy cm9yIHN0b3AKKyAgcHN0ciA9IFsiMDEiLCAiamsiLCAiYXEiXQorISRvbXAgZW5kIHRhcmdl dAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cikKK2lmICgubm90LiBh c3NvY2lhdGVkKHBzdHIpKSBlcnJvciBzdG9wCitpZiAobGVuKHBzdHIpIC89IDIpIGVycm9y IHN0b3AKK2lmIChzaXplKHBzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQocHN0 ciwgMSkgLz0gLTIpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQocHN0ciwgMSkgLz0gMCkgZXJy b3Igc3RvcAoraWYgKGFueSAocHN0ciAvPSBbIjAxIiwgImprIiwgImFxIl0pKSBlcnJvciBz dG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IHBzdHIyKQorISRv bXAgdGFyZ2V0IG1hcChmcm9tOiBwc3RyMikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0 cjIpKSBlcnJvciBzdG9wCisgIGlmIChsZW4ocHN0cjIpIC89IDQpIGVycm9yIHN0b3AKKyAg cHN0cjIgPSAiSElKSyIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IHBzdHIyKQoraWYgKC5ub3QuIGFzc29jaWF0ZWQocHN0cjIpKSBlcnJv ciBzdG9wCitpZiAobGVuKHBzdHIyKSAvPSA0KSBlcnJvciBzdG9wCitpZiAocHN0cjIgLz0g IkhJSksiKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBhbGxvY2F0YWJs ZSA6OiBhc3RyKDopLCBhc3RyMgorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTYpIDo6IGFz dHIoMzo1KSkKKyEgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBhc3RyMikKKworISBs aWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCishJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAodG9mcm9tOiBhc3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9t OiBhc3RyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4oYXN0cikgLz0gNikgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShhc3RyKSAvPSAzKSBl cnJvciBzdG9wCisgIGlmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorICBp ZiAodWJvdW5kKGFzdHIsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgYXN0ciA9IFsiMDFkYjQ1 IiwgImprJEQlUyIsICJ6dXRnNDciXQorISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0 IGV4aXQgZGF0YSBtYXAoZnJvbTogYXN0cikKK2lmICgubm90LiBhbGxvY2F0ZWQoYXN0cikp IGVycm9yIHN0b3AKK2lmIChsZW4oYXN0cikgLz0gNikgZXJyb3Igc3RvcAoraWYgKHNpemUo YXN0cikgLz0gMykgZXJyb3Igc3RvcAoraWYgKGxib3VuZChhc3RyLCAxKSAvPSAzKSBlcnJv ciBzdG9wCitpZiAodWJvdW5kKGFzdHIsIDEpIC89IDUpIGVycm9yIHN0b3AKK2lmIChhbnkg KGFzdHIgLz0gWyIwMWRiNDUiLCAiamskRCVTIiwgInp1dGc0NyJdKSkgZXJyb3Igc3RvcAor CishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5CisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGFzdHIyKQorISRvbXAgdGFyZ2V0IG1h cChmcm9tOiBhc3RyMikKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyMikpIGVycm9yIHN0 b3AKKyAgaWYgKGxlbihhc3RyMikgLz0gOCkgZXJyb3Igc3RvcAorICBhc3RyMiA9ICJISUpL aGlqayIKKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZy b206IGFzdHIyKQoraWYgKC5ub3QuIGFsbG9jYXRlZChhc3RyMikpIGVycm9yIHN0b3AKK2lm IChsZW4oYXN0cjIpIC89IDgpIGVycm9yIHN0b3AKK2lmIChhc3RyMiAvPSAiSElKS2hpamsi KSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwgcG9pbnRlciA6 OiBwNHN0cig6KSwgcDRzdHIyCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQp IDo6IHA0c3RyKDI6NCkpCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NSxraW5kPTQpIDo6 IHA0c3RyMikKKworISBGQUlMUyB3aXRoIHZhbHVlIGNoZWNrCisKKyEkb21wIHRhcmdldCBl bnRlciBkYXRhIG1hcCh0b2Zyb206IHA0c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBw NHN0cikKKyAgaWYgKC5ub3QuIGFzc29jaWF0ZWQocDRzdHIpKSBlcnJvciBzdG9wCisgIGlm IChsZW4ocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUocDRzdHIpIC89IDMp IGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChwNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAor ICBpZiAodWJvdW5kKHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCisgIHA0c3RyKDopID0g WzRfImY4NSIsIDRfIjhhZiIsIDRfIkElRiJdCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBwNHN0cikKK2lmICgubm90LiBhc3NvY2lhdGVk KHA0c3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihwNHN0cikgLz0gMykgZXJyb3Igc3RvcAor aWYgKHNpemUocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQocDRzdHIsIDEp IC89IDIpIGVycm9yIHN0b3AKK2lmICh1Ym91bmQocDRzdHIsIDEpIC89IDQpIGVycm9yIHN0 b3AKK2lmIChwNHN0cigyKSAgLz0gNF8iZjg1IikgZXJyb3Igc3RvcAoraWYgKHA0c3RyKDMp ICAvPSA0XyI4YWYiKSBlcnJvciBzdG9wCitpZiAocDRzdHIoNCkgIC89IDRfIkElRiIpIGVy cm9yIHN0b3AKKworISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKHRvZnJvbTogcDRzdHIy KQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBwNHN0cjIpCisgIGlmICgubm90LiBhc3NvY2lh dGVkKHA0c3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihwNHN0cjIpIC89IDUpIGVycm9y IHN0b3AKKyAgcDRzdHIyID0gNF8iOTg3NWEiCishJG9tcCBlbmQgdGFyZ2V0CishJG9tcCB0 YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBwNHN0cjIpCitpZiAoLm5vdC4gYXNzb2NpYXRl ZChwNHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKHA0c3RyMikgLz0gNSkgZXJyb3Igc3Rv cAoraWYgKHA0c3RyMiAvPSA0XyI5ODc1YSIpIGVycm9yIHN0b3AKKworCishIGNoYXJhY3Rl cihsZW49OixraW5kPTQpLCBhbGxvY2F0YWJsZSA6OiBhNHN0cig6KSwgYTRzdHIyCishIGFs bG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorISBhbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTksa2luZD00KSA6OiBhNHN0cjIpCisKKyEgbGliZ29tcDog VHJ5aW5nIHRvIG1hcCBpbnRvIGRldmljZSBbMHgxMDI3YmEwLi4weDI1MTA1MGJiOWM5ZWJi YTApIG9iamVjdCB3aGVuIFsweDdmZmQwMjZlNjcwOC4uMHg3ZmZkMDI2ZTY3MTApIGlzIGFs cmVhZHkgbWFwcGVkCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGE0 c3RyKQorISRvbXAgdGFyZ2V0IG1hcChmcm9tOiBhNHN0cikKKyAgaWYgKC5ub3QuIGFsbG9j YXRlZChhNHN0cikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihhNHN0cikgLz0gNykgZXJyb3Ig c3RvcAorICBpZiAoc2l6ZShhNHN0cikgLz0gNikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5k KGE0c3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGE0c3RyLCAxKSAv PSAzKSBlcnJvciBzdG9wCisgICEgU2VlIFBSIGZvcnRyYW4vMTA3NTA4IHdoeSAnKDopJyBp cyByZXF1aXJlZAorICBhNHN0cig6KSA9IFs0XyJzZjQ1NmFxIiwgNF8iM2R0enUyNCIsIDRf Il80Zmg3c20iLCA0XyI9ZmY4NXM3IiwgNF8iaj04YWY0ZCIsIDRfIi4sQSVGc3oiXQorISRv bXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYTRzdHIp CitpZiAoLm5vdC4gYWxsb2NhdGVkKGE0c3RyKSkgZXJyb3Igc3RvcAoraWYgKGxlbihhNHN0 cikgLz0gNykgZXJyb3Igc3RvcAoraWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AK K2lmIChsYm91bmQoYTRzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGE0 c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAoYTRzdHIoLTIpIC89IDRfInNmNDU2YXEi KSBlcnJvciBzdG9wCitpZiAoYTRzdHIoLTEpIC89IDRfIjNkdHp1MjQiKSBlcnJvciBzdG9w CitpZiAoYTRzdHIoMCkgIC89IDRfIl80Zmg3c20iKSBlcnJvciBzdG9wCitpZiAoYTRzdHIo MSkgIC89IDRfIj1mZjg1czciKSBlcnJvciBzdG9wCitpZiAoYTRzdHIoMikgIC89IDRfImo9 OGFmNGQiKSBlcnJvciBzdG9wCitpZiAoYTRzdHIoMykgIC89IDRfIi4sQSVGc3oiKSBlcnJv ciBzdG9wCisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcCh0b2Zyb206IGE0c3RyMikK KyEkb21wIHRhcmdldCBtYXAoZnJvbTogYTRzdHIyKQorICBpZiAoLm5vdC4gYWxsb2NhdGVk KGE0c3RyMikpIGVycm9yIHN0b3AKKyAgaWYgKGxlbihhNHN0cjIpIC89IDkpIGVycm9yIHN0 b3AKKyAgYTRzdHIyID0gNF8iOTg3NjVhMjNkIgorISRvbXAgZW5kIHRhcmdldAorISRvbXAg dGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYTRzdHIyKQoraWYgKC5ub3QuIGFsbG9jYXRl ZChhNHN0cjIpKSBlcnJvciBzdG9wCitpZiAobGVuKGE0c3RyMikgLz0gOSkgZXJyb3Igc3Rv cAoraWYgKGE0c3RyMiAvPSA0XyI5ODc2NWEyM2QiKSBlcnJvciBzdG9wCisKKworZGVhbGxv Y2F0ZShkdCVwYywgZHQlcGMyKQorZGVhbGxvY2F0ZShkdCVwY3N0cikKK2RlYWxsb2NhdGUo ZHQlcGNzdHIyKQorCitkZWFsbG9jYXRlKGR0JXBjNHN0cikKK2RlYWxsb2NhdGUoZHQlcGM0 c3RyMikKKworZGVhbGxvY2F0ZShpcCwgaXAyLCBpYSwgaWEyKQorZGVhbGxvY2F0ZShwc3Ry KQorZGVhbGxvY2F0ZShwc3RyMikKK2RlYWxsb2NhdGUoYXN0cikKK2RlYWxsb2NhdGUoYXN0 cjIpCisKK2RlYWxsb2NhdGUocDRzdHIpCitkZWFsbG9jYXRlKHA0c3RyMikKK2RlYWxsb2Nh dGUoYTRzdHIpCitkZWFsbG9jYXRlKGE0c3RyMikKK2VuZApkaWZmIC0tZ2l0IGEvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYuZjkwIGIv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTYu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZDMwZWQKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vdGFyZ2V0 LWVudGVyLWRhdGEtNi5mOTAKQEAgLTAsMCArMSwzOTIgQEAKKyEgQ2hlY2sgdGhhdCAnbWFw KGFsbG9jOicgcHJvcGVybHkgd29ya3Mgd2l0aAorISAtIGRlZmVycmVkLWxlbmd0aCBjaGFy YWN0ZXIgc3RyaW5ncworISAtIGFycmF5cyB3aXRoIGFycmF5IGRlc2NyaXB0b3JzCishIEZv ciB0aG9zZSwgdGhlIGFycmF5IGRlc2NyaXB0b3IgLyBzdHJpbmcgbGVuZ3RoIG11c3QgYmUg bWFwcGVkIHdpdGggJ3RvOicKKworcHJvZ3JhbSBtYWluCitpbXBsaWNpdCBub25lCisKK3R5 cGUgdAorICBpbnRlZ2VyIDo6IGljKDI6NSkKKyAgY2hhcmFjdGVyKGxlbj0xMSkgOjogY2Nz dHIoMzo0KQorICBjaGFyYWN0ZXIobGVuPTExLGtpbmQ9NCkgOjogY2M0c3RyKDM6NykKKyAg aW50ZWdlciwgcG9pbnRlciA6OiBwYyg6KQorICBjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVy IDo6IHBjc3RyKDopCisgIGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBj NHN0cig6KQorZW5kIHR5cGUgdAorCit0eXBlKHQpIDo6IGR0CisKK2ludGVnZXIgOjogaWko NSkKK2NoYXJhY3RlcihsZW49MTEpIDo6IGNsc3RyKC0xOjEpCitjaGFyYWN0ZXIobGVuPTEx LGtpbmQ9NCkgOjogY2w0c3RyKDA6MykKK2ludGVnZXIsIHBvaW50ZXIgOjogaXAoOikKK2lu dGVnZXIsIGFsbG9jYXRhYmxlIDo6IGlhKDopCitjaGFyYWN0ZXIobGVuPTopLCBwb2ludGVy IDo6IHBzdHIoOikKK2NoYXJhY3RlcihsZW49OiksIGFsbG9jYXRhYmxlIDo6IGFzdHIoOikK K2NoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHA0c3RyKDopCitjaGFyYWN0 ZXIobGVuPTosa2luZD00KSwgYWxsb2NhdGFibGUgOjogYTRzdHIoOikKKworYWxsb2NhdGUo ZHQlcGMoNSkpCithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIpIDo6IGR0JXBjc3RyKDIpKQor CithbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRzdHIoMjozKSkK KworYWxsb2NhdGUoaXAoNSksIGlhKDgpKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj0yKSA6 OiBwc3RyKC0yOjApKQorYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj02KSA6OiBhc3RyKDM6NSkp CisKK2FsbG9jYXRlKGNoYXJhY3RlcihsZW49MyxraW5kPTQpIDo6IHA0c3RyKDI6NCkpCith bGxvY2F0ZShjaGFyYWN0ZXIobGVuPTcsa2luZD00KSA6OiBhNHN0cigtMjozKSkKKworCish IGludGVnZXIgOjogaWMoMjo1KQorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxs b2M6IGR0JWljKDM6NSkpCitkdCVpYygyKSA9IDIyCishJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBkdCVpYygzOjUpKQorICBpZiAoc2l6ZShkdCVpYykgLz0gNCkgZXJyb3Igc3RvcAorICBp ZiAobGJvdW5kKGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQl aWMsIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgZHQlaWMoMzo1KSA9IFszMywgNDQsIDU1XQor ISRvbXAgZW5kIHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQl aWMoMzo1KSkKK2lmIChzaXplKGR0JWljKSAvPSA0KSBlcnJvciBzdG9wCitpZiAobGJvdW5k KGR0JWljLCAxKSAvPSAyKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0JWljLCAxKSAvPSA1 KSBlcnJvciBzdG9wCitpZiAoYW55IChkdCVpYyAvPSBbMjIsIDMzLCA0NCwgNTVdKSkgZXJy b3Igc3RvcAorCishIGNoYXJhY3RlcihsZW49MTEpIDo6IGNjc3RyKDM6NCkKKworISRvbXAg dGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBkdCVjY3N0cig0OjQpKQorZHQlY2NzdHIo MykgPSAiMTIzNDU2Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVjY3N0cig0 OjQpKQorICBpZiAobGVuKGR0JWNjc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6 ZShkdCVjY3N0cikgLz0gMikgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGR0JWNjc3RyLCAx KSAvPSAzKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2NzdHIsIDEpIC89IDQpIGVy cm9yIHN0b3AKKyAgZHQlY2NzdHIoNDo0KSA9IFsiYWJjZGVmZ2hpamsiXQorISRvbXAgZW5k IHRhcmdldAorISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlY2NzdHIoNDo0 KSkKK2lmIChsZW4oZHQlY2NzdHIpIC89IDExKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVj Y3N0cikgLz0gMikgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVjY3N0ciwgMSkgLz0gMykg ZXJyb3Igc3RvcAoraWYgKHVib3VuZChkdCVjY3N0ciwgMSkgLz0gNCkgZXJyb3Igc3RvcAor aWYgKGFueSAoZHQlY2NzdHIgLz0gWyIxMjM0NTY3ODkwMSIsICJhYmNkZWZnaGlqayJdKSkg ZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNjNHN0cigz OjcpCisKKyEgVmFsdWUgY2hlY2sgZmFpbHMKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1h cChhbGxvYzogZHQlY2M0c3RyKDQ6NykpCitkdCVjYzRzdHIoMykgPSA0XyIxMjM0NTY3ODkw MSIKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGR0JWNjNHN0cig0OjcpKQorICBpZiAobGVu KGR0JWNjNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoZHQlY2M0c3RyKSAv PSA1KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJv ciBzdG9wCisgIGlmICh1Ym91bmQoZHQlY2M0c3RyLCAxKSAvPSA3KSBlcnJvciBzdG9wCisg IGR0JWNjNHN0cig0OjcpID0gWzRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAgICAgICAg NF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiIsICYKKyAgICAgICAgICAgICAgIDRf IjQ1bmd3ajU2c2oyIl0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGR0JWNjNHN0cig0OjcpKQoraWYgKGxlbihkdCVjYzRzdHIpIC89IDEx KSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVjYzRzdHIpIC89IDUpIGVycm9yIHN0b3AKK2lm IChsYm91bmQoZHQlY2M0c3RyLCAxKSAvPSAzKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGR0 JWNjNHN0ciwgMSkgLz0gNykgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cigzKSAvPSA0XyIx MjM0NTY3ODkwMSIpIGVycm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNCkgLz0gNF8iYWJjZGVm Z2hpamsiKSBlcnJvciBzdG9wCitpZiAoZHQlY2M0c3RyKDUpIC89IDRfInFlcmZ0Y2VhNmRz IikgZXJyb3Igc3RvcAoraWYgKGR0JWNjNHN0cig2KSAvPSA0XyJhMWY5ZzM3Z2E0LiIpIGVy cm9yIHN0b3AKK2lmIChkdCVjYzRzdHIoNykgLz0gNF8iNDVuZ3dqNTZzajIiKSBlcnJvciBz dG9wCisKKyEgaW50ZWdlciwgcG9pbnRlciA6OiBwYyg6KQorISBhbGxvY2F0ZShkdCVwYyg1 KSkKKworISBsaWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVk IGtpbmQgMHgwMAorCishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBj KDI6NSkpCitkdCVwYygxKSA9IDExCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYygy OjUpKQorICBpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwYykpIGVycm9yIHN0b3AKKyAgaWYg KHNpemUoZHQlcGMpIC89IDUpIGVycm9yIHN0b3AKKyAgaWYgKGxib3VuZChkdCVwYywgMSkg Lz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGR0JXBjLCAxKSAvPSA1KSBlcnJvciBz dG9wCisgIGR0JXBjKDI6NSkgPSBbMjIsIDMzLCA0NCwgNTVdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBkdCVwYygyOjUpKQoraWYgKC5u b3QuIGFzc29jaWF0ZWQoZHQlcGMpKSBlcnJvciBzdG9wCitpZiAoc2l6ZShkdCVwYykgLz0g NSkgZXJyb3Igc3RvcAoraWYgKGxib3VuZChkdCVwYywgMSkgLz0gMSkgZXJyb3Igc3RvcAor aWYgKHVib3VuZChkdCVwYywgMSkgLz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoZHQlcGMg Lz0gWzExLCAyMiwgMzMsIDQ0LCA1NV0pKSBlcnJvciBzdG9wCisKKyEgY2hhcmFjdGVyKGxl bj06KSwgcG9pbnRlciA6OiBwY3N0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTIp IDo6IGR0JXBjc3RyKDIpKQorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVyX2V4aXRf ZGF0YSB1bmhhbmRsZWQga2luZCAweDAwCisKKyEgRklYTUU6IERpc2FibGVkIGJlZmF1c2Ug b2YgUFIxMDg4MzcKKyEKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0 JXBjc3RyKDI6MikpCishZHQlcGNzdHIoMSkgPSAiMDEiCishISRvbXAgdGFyZ2V0IG1hcChh bGxvYzogZHQlcGNzdHIoMjoyKSkKKyEgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjc3Ry KSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihkdCVwY3N0cikgLz0gMikgZXJyb3Igc3RvcAor ISAgaWYgKHNpemUoZHQlcGNzdHIpIC89IDIpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQo ZHQlcGNzdHIsIDEpIC89IDEpIGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQoZHQlcGNzdHIs IDEpIC89IDIpIGVycm9yIHN0b3AKKyEgIGR0JXBjc3RyKDI6MikgPSBbImprIl0KKyEhJG9t cCBlbmQgdGFyZ2V0CishISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGNz dHIoMjoyKSkKKyFpZiAoLm5vdC4gYXNzb2NpYXRlZChkdCVwY3N0cikpIGVycm9yIHN0b3AK KyFpZiAobGVuKGR0JXBjc3RyKSAvPSAyKSBlcnJvciBzdG9wCishaWYgKHNpemUoZHQlcGNz dHIpIC89IDIpIGVycm9yIHN0b3AKKyFpZiAobGJvdW5kKGR0JXBjc3RyLCAxKSAvPSAxKSBl cnJvciBzdG9wCishaWYgKHVib3VuZChkdCVwY3N0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAor IWlmIChhbnkgKGR0JXBjc3RyIC89IFsiMDEiLCAiamsiXSkpIGVycm9yIHN0b3AKKworCish IGNoYXJhY3RlcihsZW49OixraW5kPTQpLCBwb2ludGVyIDo6IHBjNHN0cig6KQorISBhbGxv Y2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00KSA6OiBkdCVwYzRzdHIoMjozKSkKKworISBs aWJnb21wOiBHT01QX3RhcmdldF9lbnRlcl9leGl0X2RhdGEgdW5oYW5kbGVkIGtpbmQgMHgw MAorISBzdHJ1Y3R1cmUgZWxlbWVudCB3aGVuIG90aGVyIG1hcHBlZCBlbGVtZW50cyBmcm9t IHRoZSBzYW1lIHN0cnVjdHVyZSB3ZXJlbid0IG1hcHBlZCB0b2dldGhlciB3aXRoIGl0CisK KyEgRklYTUU6IERpc2FibGVkIGJlZmF1c2Ugb2YgUFIxMDg4MzcKKyEKKyEhJG9tcCB0YXJn ZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGR0JXBjNHN0cigzOjMpKQorIWR0JXBjNHN0cigy KSA9IDRfIjQ1NiIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBkdCVwYzRzdHIoMzozKSkK KyEgIGlmICgubm90LiBhc3NvY2lhdGVkKGR0JXBjNHN0cikpIGVycm9yIHN0b3AKKyEgIGlm IChsZW4oZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAoc2l6ZShkdCVwYzRz dHIpIC89IDIpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQoZHQlcGM0c3RyLCAxKSAvPSAy KSBlcnJvciBzdG9wCishICBpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Ig c3RvcAorISAgZHQlcGM0c3RyKDM6MykgPSBbNF8idHp1Il0KKyEhJG9tcCBlbmQgdGFyZ2V0 CishISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogZHQlcGM0c3RyKDM6MykpCish aWYgKC5ub3QuIGFzc29jaWF0ZWQoZHQlcGM0c3RyKSkgZXJyb3Igc3RvcAorIWlmIChsZW4o ZHQlcGM0c3RyKSAvPSAzKSBlcnJvciBzdG9wCishaWYgKHNpemUoZHQlcGM0c3RyKSAvPSAy KSBlcnJvciBzdG9wCishaWYgKGxib3VuZChkdCVwYzRzdHIsIDEpIC89IDIpIGVycm9yIHN0 b3AKKyFpZiAodWJvdW5kKGR0JXBjNHN0ciwgMSkgLz0gMykgZXJyb3Igc3RvcAorIWlmIChk dCVwYzRzdHIoMikgLz0gNF8iNDU2IikgZXJyb3Igc3RvcAorIWlmIChkdCVwYzRzdHIoMykg Lz0gNF8idHp1IikgZXJyb3Igc3RvcAorCishIGxpYmdvbXA6IEdPTVBfdGFyZ2V0X2VudGVy X2V4aXRfZGF0YSB1bmhhbmRsZWQga2luZCAweDAxCisKKyEgaW50ZWdlciA6OiBpaSg1KQor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGlpKDI6NSkpCitpaSgxKSA9 IC0xCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBpaSgyOjUpKQorICBpZiAoc2l6ZShpaSkg Lz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlpLCAxKSAvPSAxKSBlcnJvciBzdG9w CisgIGlmICh1Ym91bmQoaWksIDEpIC89IDUpIGVycm9yIHN0b3AKKyAgaWkoMjo1KSA9IFst MiwgLTMsIC00LCAtNV0KKyEkb21wIGVuZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRh dGEgbWFwKGZyb206IGlpKDI6NSkpCitpZiAoc2l6ZShpaSkgLz0gNSkgZXJyb3Igc3RvcAor aWYgKGxib3VuZChpaSwgMSkgLz0gMSkgZXJyb3Igc3RvcAoraWYgKHVib3VuZChpaSwgMSkg Lz0gNSkgZXJyb3Igc3RvcAoraWYgKGFueSAoaWkgLz0gWy0xLCAtMiwgLTMsIC00LCAtNV0p KSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTExKSA6OiBjbHN0cigtMToxKQor CishJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGNsc3RyKDA6MSkpCitjbHN0 cigtMSkgPSAiMTIzNDU2Nzg5MDEiCishJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBjbHN0cigw OjEpKQorICBpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAorICBpZiAoc2l6ZShj bHN0cikgLz0gMykgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGNsc3RyLCAxKSAvPSAtMSkg ZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCisg IGNsc3RyKDA6MSkgPSBbImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGNsc3RyKDA6MSkp CitpZiAobGVuKGNsc3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2xzdHIpIC89 IDMpIGVycm9yIHN0b3AKK2lmIChsYm91bmQoY2xzdHIsIDEpIC89IC0xKSBlcnJvciBzdG9w CitpZiAodWJvdW5kKGNsc3RyLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAoYW55IChjbHN0 ciAvPSBbIjEyMzQ1Njc4OTAxIiwgImFiY2RlZmdoaWprIiwgIkFCQ0RFRkdISUpLIl0pKSBl cnJvciBzdG9wCisKKyEgY2hhcmFjdGVyKGxlbj0xMSxraW5kPTQpIDo6IGNsNHN0cigwOjMp CisKKyEkb21wIHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogY2w0c3RyKDE6MykpCitj bDRzdHIoMCkgPSA0XyIxMjM0NTY3ODkwMSIKKyEkb21wIHRhcmdldCBtYXAoYWxsb2M6IGNs NHN0cigxOjMpKQorICBpZiAobGVuKGNsNHN0cikgLz0gMTEpIGVycm9yIHN0b3AKKyAgaWYg KHNpemUoY2w0c3RyKSAvPSA0KSBlcnJvciBzdG9wCisgIGlmIChsYm91bmQoY2w0c3RyLCAx KSAvPSAwKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoY2w0c3RyLCAxKSAvPSAzKSBlcnJv ciBzdG9wCisgIGNsNHN0cigxOjMpID0gWzRfImFiY2RlZmdoaWprIiwgJgorICAgICAgICAg ICAgNF8icWVyZnRjZWE2ZHMiLCA0XyJhMWY5ZzM3Z2E0LiJdCishJG9tcCBlbmQgdGFyZ2V0 CishJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBjbDRzdHIoMTozKSkKK2lmIChs ZW4oY2w0c3RyKSAvPSAxMSkgZXJyb3Igc3RvcAoraWYgKHNpemUoY2w0c3RyKSAvPSA0KSBl cnJvciBzdG9wCitpZiAobGJvdW5kKGNsNHN0ciwgMSkgLz0gMCkgZXJyb3Igc3RvcAoraWYg KHVib3VuZChjbDRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMCkgLz0g NF8iMTIzNDU2Nzg5MDEiKSBlcnJvciBzdG9wCitpZiAoY2w0c3RyKDEpIC89IDRfImFiY2Rl ZmdoaWprIikgZXJyb3Igc3RvcAoraWYgKGNsNHN0cigyKSAvPSA0XyJxZXJmdGNlYTZkcyIp IGVycm9yIHN0b3AKK2lmIChjbDRzdHIoMykgLz0gNF8iYTFmOWczN2dhNC4iKSBlcnJvciBz dG9wCisKKworISBhbGxvY2F0ZShpcCg1KSwgaWEoOCkpCisKKyEkb21wIHRhcmdldCBlbnRl ciBkYXRhIG1hcChhbGxvYzogaXAoMjo1KSkKK2lwKDEpID0gMTEKKyEkb21wIHRhcmdldCBt YXAoYWxsb2M6IGlwKDI6NSkpCisgIGlmICgubm90LiBhc3NvY2lhdGVkKGlwKSkgZXJyb3Ig c3RvcAorICBpZiAoc2l6ZShpcCkgLz0gNSkgZXJyb3Igc3RvcAorICBpZiAobGJvdW5kKGlw LCAxKSAvPSAxKSBlcnJvciBzdG9wCisgIGlmICh1Ym91bmQoaXAsIDEpIC89IDUpIGVycm9y IHN0b3AKKyAgaXAoMjo1KSA9IFsyMiwgMzMsIDQ0LCA1NV0KKyEkb21wIGVuZCB0YXJnZXQK KyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlwKDI6NSkpCitpZiAoLm5vdC4g YXNzb2NpYXRlZChpcCkpIGVycm9yIHN0b3AKK2lmIChzaXplKGlwKSAvPSA1KSBlcnJvciBz dG9wCitpZiAobGJvdW5kKGlwLCAxKSAvPSAxKSBlcnJvciBzdG9wCitpZiAodWJvdW5kKGlw LCAxKSAvPSA1KSBlcnJvciBzdG9wCitpZiAoYW55IChpcCAvPSBbMTEsIDIyLCAzMywgNDQs IDU1XSkpIGVycm9yIHN0b3AKKworISBhbGxvY2F0ZShpcCg1KSwgaWEoOCkpCisKKyEkb21w IHRhcmdldCBlbnRlciBkYXRhIG1hcChhbGxvYzogaWEoMjo4KSkKK2lhKDEpID0gMQorISRv bXAgdGFyZ2V0IG1hcChhbGxvYzogaWEoMjo4KSkKKyAgaWYgKC5ub3QuIGFsbG9jYXRlZChp YSkpIGVycm9yIHN0b3AKKyAgaWYgKHNpemUoaWEpIC89IDgpIGVycm9yIHN0b3AKKyAgaWYg KGxib3VuZChpYSwgMSkgLz0gMSkgZXJyb3Igc3RvcAorICBpZiAodWJvdW5kKGlhLCAxKSAv PSA4KSBlcnJvciBzdG9wCisgIGlhKDI6OCkgPSBbMiwzLDQsNSw2LDcsOF0KKyEkb21wIGVu ZCB0YXJnZXQKKyEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGZyb206IGlhKDI6OCkpCitp ZiAoLm5vdC4gYWxsb2NhdGVkKGlhKSkgZXJyb3Igc3RvcAoraWYgKHNpemUoaWEpIC89IDgp IGVycm9yIHN0b3AKK2lmIChsYm91bmQoaWEsIDEpIC89IDEpIGVycm9yIHN0b3AKK2lmICh1 Ym91bmQoaWEsIDEpIC89IDgpIGVycm9yIHN0b3AKK2lmIChhbnkgKGlhIC89IFsxLDIsMyw0 LDUsNiw3LDhdKSkgZXJyb3Igc3RvcAorCisKKyEgY2hhcmFjdGVyKGxlbj06KSwgcG9pbnRl ciA6OiBwc3RyKDopCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49MikgOjogcHN0cigtMjow KSkKKworISBsaWJnb21wOiBudnB0eF9hbGxvYyBlcnJvcjogb3V0IG9mIG1lbW9yeQorCish IEZJWE1FOiBhcnJheSBvZmZzZXQgd3JvbmdseSBjYWxjdWxhdGVkIGFzIGl0IHVzZXMgVFlQ RV9TSVpFX1VOSVQsIHdoaWNoIGlzIGEgU0FWRV9FWFBSCishCishISRvbXAgdGFyZ2V0IGVu dGVyIGRhdGEgbWFwKGFsbG9jOiBwc3RyKC0xOjApKQorIXBzdHIoLTIpID0gIjAxIgorISEk b21wIHRhcmdldCBtYXAoYWxsb2M6IHBzdHIoLTE6MCkpCishICBpZiAoLm5vdC4gYXNzb2Np YXRlZChwc3RyKSkgZXJyb3Igc3RvcAorISAgaWYgKGxlbihwc3RyKSAvPSAyKSBlcnJvciBz dG9wCishICBpZiAoc2l6ZShwc3RyKSAvPSAzKSBlcnJvciBzdG9wCishICBpZiAobGJvdW5k KHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCishICBpZiAodWJvdW5kKHBzdHIsIDEpIC89 IDApIGVycm9yIHN0b3AKKyEgIHBzdHIoLTE6MCkgPSBbImprIiwgImFxIl0KKyEhJG9tcCBl bmQgdGFyZ2V0CishISRvbXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogcHN0cigtMTow KSkKKyFpZiAoLm5vdC4gYXNzb2NpYXRlZChwc3RyKSkgZXJyb3Igc3RvcAorIWlmIChsZW4o cHN0cikgLz0gMikgZXJyb3Igc3RvcAorIWlmIChzaXplKHBzdHIpIC89IDMpIGVycm9yIHN0 b3AKKyFpZiAobGJvdW5kKHBzdHIsIDEpIC89IC0yKSBlcnJvciBzdG9wCishaWYgKHVib3Vu ZChwc3RyLCAxKSAvPSAwKSBlcnJvciBzdG9wCishaWYgKGFueSAocHN0ciAvPSBbIjAxIiwg ImprIiwgImFxIl0pKSBlcnJvciBzdG9wCisKKworISBjaGFyYWN0ZXIobGVuPTopLCBhbGxv Y2F0YWJsZSA6OiBhc3RyKDopCishIGFsbG9jYXRlKGNoYXJhY3RlcihsZW49NikgOjogYXN0 cigzOjUpKQorCishIGxpYmdvbXA6IG52cHR4X2FsbG9jIGVycm9yOiBvdXQgb2YgbWVtb3J5 CisKKyEgRklYTUUKKyEhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAoYWxsb2M6IGFzdHIo NDo1KSkKKyFhc3RyKDMpID0gIjAxZGI0NSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9jOiBh c3RyKDQ6NSkpCishICBpZiAoLm5vdC4gYWxsb2NhdGVkKGFzdHIpKSBlcnJvciBzdG9wCish ICBpZiAobGVuKGFzdHIpIC89IDYpIGVycm9yIHN0b3AKKyEgIGlmIChzaXplKGFzdHIpIC89 IDMpIGVycm9yIHN0b3AKKyEgIGlmIChsYm91bmQoYXN0ciwgMSkgLz0gMykgZXJyb3Igc3Rv cAorISAgaWYgKHVib3VuZChhc3RyLCAxKSAvPSA1KSBlcnJvciBzdG9wCishISEgIGFzdHIo NDo1KSA9IFsiamskRCVTIiwgInp1dGc0NyJdCishISRvbXAgZW5kIHRhcmdldAorISEhJG9t cCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBhc3RyKDQ6NSkpCishIWlmICgubm90LiBh bGxvY2F0ZWQoYXN0cikpIGVycm9yIHN0b3AKKyEhIWlmIChsZW4oYXN0cikgLz0gNikgZXJy b3Igc3RvcAorIWlmIChzaXplKGFzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAobGJvdW5k KGFzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAodWJvdW5kKGFzdHIsIDEpIC89IDUp IGVycm9yIHN0b3AKKyFpZiAoYW55IChhc3RyIC89IFsiMDFkYjQ1IiwgImprJEQlUyIsICJ6 dXRnNDciXSkpIGVycm9yIHN0b3AKKyEKKworISBjaGFyYWN0ZXIobGVuPTosa2luZD00KSwg cG9pbnRlciA6OiBwNHN0cig6KQorISBhbGxvY2F0ZShjaGFyYWN0ZXIobGVuPTMsa2luZD00 KSA6OiBwNHN0cigyOjQpKQorCishIEZBSUxTIHdpdGggdmFsdWUgY2hlY2sKKworISBGSVhN RTogYXJyYXkgb2Zmc2V0IHdyb25nbHkgY2FsY3VsYXRlZCBhcyBpdCB1c2VzIFRZUEVfU0la RV9VTklULCB3aGljaCBpcyBhIFNBVkVfRVhQUgorIQorISEkb21wIHRhcmdldCBlbnRlciBk YXRhIG1hcChhbGxvYzogcDRzdHIoMzo0KSkKKyFwNHN0cigyKSA9IDRfImY4NSIKKyEhJG9t cCB0YXJnZXQgbWFwKGFsbG9jOiBwNHN0cigzOjQpKQorISAgaWYgKC5ub3QuIGFzc29jaWF0 ZWQocDRzdHIpKSBlcnJvciBzdG9wCishICBpZiAobGVuKHA0c3RyKSAvPSAzKSBlcnJvciBz dG9wCishICBpZiAoc2l6ZShwNHN0cikgLz0gMykgZXJyb3Igc3RvcAorISAgaWYgKGxib3Vu ZChwNHN0ciwgMSkgLz0gMikgZXJyb3Igc3RvcAorISAgaWYgKHVib3VuZChwNHN0ciwgMSkg Lz0gNCkgZXJyb3Igc3RvcAorISAgcDRzdHIoMzo0KSA9IFs0XyI4YWYiLCA0XyJBJUYiXQor ISEkb21wIGVuZCB0YXJnZXQKKyEhJG9tcCB0YXJnZXQgZXhpdCBkYXRhIG1hcChmcm9tOiBw NHN0cigzOjQpKQorIWlmICgubm90LiBhc3NvY2lhdGVkKHA0c3RyKSkgZXJyb3Igc3RvcAor IWlmIChsZW4ocDRzdHIpIC89IDMpIGVycm9yIHN0b3AKKyFpZiAoc2l6ZShwNHN0cikgLz0g MykgZXJyb3Igc3RvcAorIWlmIChsYm91bmQocDRzdHIsIDEpIC89IDIpIGVycm9yIHN0b3AK KyFpZiAodWJvdW5kKHA0c3RyLCAxKSAvPSA0KSBlcnJvciBzdG9wCishaWYgKHA0c3RyKDIp ICAvPSA0XyJmODUiKSBlcnJvciBzdG9wCishaWYgKHA0c3RyKDMpICAvPSA0XyI4YWYiKSBl cnJvciBzdG9wCishaWYgKHA0c3RyKDQpICAvPSA0XyJBJUYiKSBlcnJvciBzdG9wCisKKyEg Y2hhcmFjdGVyKGxlbj06LGtpbmQ9NCksIGFsbG9jYXRhYmxlIDo6IGE0c3RyKDopCishIGFs bG9jYXRlKGNoYXJhY3RlcihsZW49NyxraW5kPTQpIDo6IGE0c3RyKC0yOjMpKQorCishIGxp YmdvbXA6IFRyeWluZyB0byBtYXAgaW50byBkZXZpY2UgWzB4MTAyN2JhMC4uMHgyNTEwNTBi YjljOWViYmEwKSBvYmplY3Qgd2hlbiBbMHg3ZmZkMDI2ZTY3MDguLjB4N2ZmZDAyNmU2NzEw KSBpcyBhbHJlYWR5IG1hcHBlZAorCishIEZJWE1FOiBEaXNhYmxlZCBiZWZhdXNlIG9mIFBS MTA4ODM4CishISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsbG9jOiBhNHN0cigtMToz KSkKKyEhYTRzdHIoLTIpID0gNF8ic2Y0NTZhcSIKKyEhJG9tcCB0YXJnZXQgbWFwKGFsbG9j OiBhNHN0cigtMTozKSkKKyEgIGlmICgubm90LiBhbGxvY2F0ZWQoYTRzdHIpKSBlcnJvciBz dG9wCishICBpZiAobGVuKGE0c3RyKSAvPSA3KSBlcnJvciBzdG9wCishICBpZiAoc2l6ZShh NHN0cikgLz0gNikgZXJyb3Igc3RvcAorISAgaWYgKGxib3VuZChhNHN0ciwgMSkgLz0gLTIp IGVycm9yIHN0b3AKKyEgIGlmICh1Ym91bmQoYTRzdHIsIDEpIC89IDMpIGVycm9yIHN0b3AK KyEgIGE0c3RyKC0xOjMpID0gWzRfIjNkdHp1MjQiLCA0XyJfNGZoN3NtIiwgNF8iPWZmODVz NyIsIDRfImo9OGFmNGQiLCA0XyIuLEElRnN6Il0KKyEhJG9tcCBlbmQgdGFyZ2V0CishISRv bXAgdGFyZ2V0IGV4aXQgZGF0YSBtYXAoZnJvbTogYTRzdHIoLTE6MykpCishaWYgKC5ub3Qu IGFsbG9jYXRlZChhNHN0cikpIGVycm9yIHN0b3AKKyFpZiAobGVuKGE0c3RyKSAvPSA3KSBl cnJvciBzdG9wCishaWYgKHNpemUoYTRzdHIpIC89IDYpIGVycm9yIHN0b3AKKyFpZiAobGJv dW5kKGE0c3RyLCAxKSAvPSAtMikgZXJyb3Igc3RvcAorIWlmICh1Ym91bmQoYTRzdHIsIDEp IC89IDMpIGVycm9yIHN0b3AKKyFpZiAoYTRzdHIoLTIpIC89IDRfInNmNDU2YXEiKSBlcnJv ciBzdG9wCishaWYgKGE0c3RyKC0xKSAvPSA0XyIzZHR6dTI0IikgZXJyb3Igc3RvcAorIWlm IChhNHN0cigwKSAgLz0gNF8iXzRmaDdzbSIpIGVycm9yIHN0b3AKKyFpZiAoYTRzdHIoMSkg IC89IDRfIj1mZjg1czciKSBlcnJvciBzdG9wCishaWYgKGE0c3RyKDIpICAvPSA0XyJqPThh ZjRkIikgZXJyb3Igc3RvcAorIWlmIChhNHN0cigzKSAgLz0gNF8iLixBJUZzeiIpIGVycm9y IHN0b3AKKworZGVhbGxvY2F0ZShkdCVwYykKK2RlYWxsb2NhdGUoZHQlcGNzdHIpCisKK2Rl YWxsb2NhdGUoZHQlcGM0c3RyKQorCitkZWFsbG9jYXRlKGlwLCBpYSkKK2RlYWxsb2NhdGUo cHN0cikKK2RlYWxsb2NhdGUoYXN0cikKKworZGVhbGxvY2F0ZShwNHN0cikKK2RlYWxsb2Nh dGUoYTRzdHIpCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Zm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS03LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi90YXJnZXQtZW50ZXItZGF0YS03LmY5MApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5mMTI5ZjU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3RhcmdldC1lbnRlci1kYXRhLTcuZjkwCkBA IC0wLDAgKzEsNzggQEAKK21vZHVsZSBtCisgIGltcGxpY2l0IG5vbmUKKyAgY2hhcmFjdGVy KGxlbj06KSwgYWxsb2NhdGFibGUgOjogc3RyQSg6KSwgc3RyQTIKKyAgY2hhcmFjdGVyKGxl bj06KSwgcG9pbnRlciA6OiBzdHJQKDopLCBzdHJQMgorICAhJG9tcCBkZWNsYXJlIHRhcmdl dCBlbnRlcihzdHJBLHN0ckEyLHN0clAsc3RyUDIpCitjb250YWlucworICBzdWJyb3V0aW5l IG9wdF9tYXAoc3RyMSwgc3RyMiwgc3RyMykKKyAgICBjaGFyYWN0ZXIobGVuPTopLCBhbGxv Y2F0YWJsZSA6OiBzdHIxLCBzdHIyLCBzdHIzLCBzdHI0CisgICAgb3B0aW9uYWwgOjogc3Ry Miwgc3RyMyAKKworICAgIGlmICgubm90LnByZXNlbnQoc3RyMikpIGVycm9yIHN0b3AKKyAg ICBpZiAocHJlc2VudChzdHIzKSkgIGVycm9yIHN0b3AKKworICAgICEkb21wIHRhcmdldCBt YXAoc3RyMSxzdHIyLHN0cjMsc3RyNCkKKyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMSkpIGVy cm9yIHN0b3AKKyAgICAgIGlmIChhbGxvY2F0ZWQoc3RyMikpIGVycm9yIHN0b3AKKyAgICAg IGlmIChwcmVzZW50KHN0cjMpKSBlcnJvciBzdG9wCisgICAgICBpZiAoYWxsb2NhdGVkKHN0 cjQpKSBlcnJvciBzdG9wCisgICAgISRvbXAgZW5kIHRhcmdldAorICBlbmQKKyAgc3Vicm91 dGluZSBjYWxsX29wdCgpCisgICAgY2hhcmFjdGVyKGxlbj06KSwgYWxsb2NhdGFibGUgOjog c3RyMSwgc3RyMgorICAgIGNhbGwgb3B0X21hcChzdHIxLCBzdHIyKQorICBlbmQKKyAgc3Vi cm91dGluZSB0ZXN0CisgICAhJG9tcCBkZWNsYXJlIHRhcmdldAorICAgaWYgKC5ub3QuIGFs bG9jYXRlZChzdHJBKSkgZXJyb3Igc3RvcAorICAgIWlmICgubm90LiBhbGxvY2F0ZWQoc3Ry QTIpKSBlcnJvciBzdG9wCisgICBpZiAoLm5vdC4gYXNzb2NpYXRlZChzdHJQKSkgZXJyb3Ig c3RvcAorICAgIWlmICgubm90LiBhc3NvY2lhdGVkKHN0clAyKSkgZXJyb3Igc3RvcAorCisg ICAgISBlbnN1cmUgbGVuZ3RoIHdhcyB1cGRhdGVkIGFzIHdlbGwKKyAgICBpZiAobGVuKHN0 ckEpIC89IDMpIGVycm9yIHN0b3AKKyAgICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBz dG9wCisgICAgaWYgKGxlbihzdHJQKSAvPSA0KSBlcnJvciBzdG9wCisgICAgaWYgKGxlbihz dHJQMikgLz0gOCkgZXJyb3Igc3RvcAorISAgICBpZiAoYW55IChzdHJBIC89IFsnSGF2Jywg J2UgZicsICd1biEnXSkpIGVycm9yIHN0b3AKKyEgICAgaWYgKHN0ckEyIC89ICdIZWxsbycp IGVycm9yIHN0b3AKKyEgICAgaWYgKGFueSAoc3RyUCAvPSBbJ2FiY2QnLCAnZWZnaCcsICdp amtsJ10pKSBlcnJvciBzdG9wCishICAgIGlmIChzdHJQMiAvPSAnVGVzdENhc2UnKSBlcnJv ciBzdG9wCishCishICAgIHN0ckEgPSBbJzEyMycsICc0NTYnLCAnNzg5J10KKyEgICAgc3Ry QTIgPSAnV29ybGQnCishICAgIHN0clAgPSBbJ0FCQ0QnLCAnRUZHSCcsICdJSktMJ10KKyEg ICAgc3RyUDIgPSAnUGFzc2VkISEnCisgIGVuZAorZW5kCisKK3Byb2dyYW0gbWFpbgorICB1 c2UgbQorICBpbXBsaWNpdCBub25lCisgIGNhbGwgY2FsbF9vcHQKKworICBzdHJBID0gWydI YXYnLCAnZSBmJywgJ3VuISddCisgIHN0ckEyID0gJ0hlbGxvJworICBhbGxvY2F0ZShjaGFy YWN0ZXIobGVuPTQpIDo6IHN0clAoMykpCisgIHN0clAgPSBbJ2FiY2QnLCAnZWZnaCcsICdp amtsJ10KKyAgYWxsb2NhdGUoY2hhcmFjdGVyKGxlbj04KSA6OiBzdHJQMikKKyAgc3RyUDIg PSAnVGVzdENhc2UnCisKKyAgISRvbXAgdGFyZ2V0IGVudGVyIGRhdGEgbWFwKGFsd2F5cywg dG86IHN0ckEsIHN0ckEyKQorICAhJG9tcCB0YXJnZXQgZW50ZXIgZGF0YSBtYXAodG86IHN0 clAsIHN0clAyKQorICAhJG9tcCB0YXJnZXQKKyAgICBjYWxsIHRlc3QoKQorICAhJG9tcCBl bmQgdGFyZ2V0CisgICEkb21wIHRhcmdldCBleGl0IGRhdGEgbWFwKGFsd2F5cywgZnJvbTog c3RyQSwgc3RyQTIsIHN0clAsIHN0clAyKQorCisgIGlmIChsZW4oc3RyQSkgLz0gMykgZXJy b3Igc3RvcAorICBpZiAobGVuKHN0ckEyKSAvPSA1KSBlcnJvciBzdG9wCisgIGlmIChsZW4o c3RyUCkgLz0gNCkgZXJyb3Igc3RvcAorICBpZiAobGVuKHN0clAyKSAvPSA4KSBlcnJvciBz dG9wCishICBpZiAoYW55IChzdHJBIC89IFsnMTIzJywgJzQ1NicsICc3ODknXSkpIGVycm9y IHN0b3AKKyEgIGlmIChzdHJBMiAvPSAnV29ybGQnKSBlcnJvciBzdG9wCishICBpZiAoYW55 KHN0clAgLz0gWydBQkNEJywgJ0VGR0gnLCAnSUpLTCddKSkgZXJyb3Igc3RvcAorISAgaWYg KHN0clAyIC89ICdQYXNzZWQhIScpIGVycm9yIHN0b3AKKworISAgZGVhbGxvY2F0ZShzdHJQ LCBzdHJQMiwgc3RyQSwgc3RyQTIpCitlbmQK --------------O84pEURKl60y4ZApWJL7mKmg--