From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id B81343858D28 for ; Thu, 6 Apr 2023 18:56:58 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org B81343858D28 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.98,323,1673942400"; d="diff'?scan'208";a="1684071" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 06 Apr 2023 10:56:44 -0800 IronPort-SDR: OgMfM2i1Xswo2hmGlomebej+6uY6hAHFuN+nhVuGp+h7DIyVjTr6yJ4ABiE0AJ7kuT06+pXg+h XmQ5gb6nwPhxaD6E9cKBa3QXDn8AdcNsqGj4ghZGVx/JRNlAOkrnZE8uPcCXLj6uHO/ieaRSsf N2TwXU4B0wUJS+yxD/tjHkNhwl8Cgn/K3iHCMXQD1PGoySOrQm3Csa7QiXh+jJHYtvzkHZuiT3 dBHdtzs1Y8AfoLcIzrGr7v3lBXYLuzViKvrektxjp5QTT5KrkE7f9sVFO/1whNqe9mvAm+4mcC na8= Content-Type: multipart/mixed; boundary="------------kQX8sG0qyV8PVSFaopCEM0rF" Message-ID: <14c1739e-4344-1252-cc67-4a4289b1b2e4@codesourcery.com> Date: Thu, 6 Apr 2023 20:56:39 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Content-Language: en-US From: Tobias Burnus Subject: [patch] 'omp scan' struct block seq update for OpenMP 5.x To: gcc-patches X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-13.mgc.mentorg.com (139.181.222.13) 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,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: --------------kQX8sG0qyV8PVSFaopCEM0rF Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable That's scheduled for GCC 13 and was found by Sandra and Frederik, 'omp scan' has undergone quite some transformation: In 5.0 it was added with a preceding and succeeding structured block. In 5.1, 'structured block' was replaced by 'structured-block-sequence' defined as "...a sequence of two or more executable statements..." In 5.2, the s.b.s. became "... a sequence of zero or more executable statements ...". While there are restrictions against orphaned separating directives, having zero statements seems to be fine (albeit odd)= . The C/C++ parser already permitted >=3D executable statements (albeit the testcases didn't use those =E2=80=93 and used {...} to enclose multiple executable statements). The Fortran parser was very strict and did require exactly one single executable statement before/after the scan. =E2= =80=94 Now both accept >=3D0. I have opt for adding a warning if there are zero statements before or after the scan. And [C/C++], while technically 'for (...)' / "#pragma omp scan ..." is valid ("for" is followed by a structured block), the before and with the attached patch there is an error if the final-loop-body does not have enclosing curly braces; I don't feel like changing the parser for such an odd use =E2=80=93 and for any sensible use, the curly braces are require= d. Thoughts? Comments? * * * Warning: It seems as if nearly all warnings related to OpenMP are "0" and on by default with very few exceptions. I am wondering whether we should add a -Wopenmp and change all those 0 to warn_openmp to make it easier for the user to -Wno-openmp or -Werror=3Dopenmp - or just to '2>&1 |grep Wopenmp' to find them. Thoughts? * * * Tobias ----------------- 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 --------------kQX8sG0qyV8PVSFaopCEM0rF Content-Type: text/x-patch; charset="UTF-8"; name="omp-scan-omp52.diff" Content-Disposition: attachment; filename="omp-scan-omp52.diff" Content-Transfer-Encoding: base64 J29tcCBzY2FuJyBzdHJ1Y3QgYmxvY2sgc2VxIHVwZGF0ZSBmb3IgT3Blbk1QIDUueAoKV2hp bGUgT3Blbk1QIDUuMCByZXF1aXJlZCBhIHNpbmdsZSBzdHJ1Y3R1cmVkIGJsb2NrIGJlZm9y ZSBhbmQgYWZ0ZXIgdGhlCidvbXAgc2NhbicgZGlyZWN0aXZlLCBPcGVuTVAgNS4xIGNoYW5n ZWQgdGhpcyB0byBhICdzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlLApkZW5vdGluZyAyIG9y IG1vcmUgZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIGluIE9wZW5NUCA1LjEgKHVwcyEpIGFuZCB6 ZXJvIG9yIG1vcmUKaW4gT3Blbk1QIDUuMi4gVGhpcyB1cGRhdGVkIEMvQysrIHRvIGFjY2Vw dCB6ZXJvIHN0YXRlbWVudHMgKGJ1dCBzdGlsbCByZXF1aXJlcwp0aGUgJ3snIC4uLiAnfScg Zm9yIHRoZSBmaW5hbC1sb29wLWJvZHkpIGFuZCB1cGRhdGVzIEZvcnRyYW4gdG8gYWNjZXB0 IHplcm8gb3IKbW9yZSB0aGFuIG9uZSBzdGF0ZW1lbnRzLgoKSWYgdGhlcmUgaXMgbm8gcHJl Y2VlZGluZyBvciBzdWNjZWVkaW5nIGV4ZWN1dGFibGUgc3RhdGVtZW50LCBhIHdhcm5pbmcg aXMKc2hvd24uCgpnY2MvYy9DaGFuZ2VMb2c6CgoJKiBjLXBhcnNlci5jYyAoY19wYXJzZXJf b21wX3NjYW5fbG9vcF9ib2R5KTogSGFuZGxlCgl6ZXJvIGV4ZWMgc3RhdGVtZW50cyBiZWZv cmUvYWZ0ZXIgJ29tcCBzY2FuJy4KCmdjYy9jcC9DaGFuZ2VMb2c6CgoJKiBwYXJzZXIuY2Mg KGNwX3BhcnNlcl9vbXBfc2Nhbl9sb29wX2JvZHkpOiBIYW5kbGUKCXplcm8gZXhlYyBzdGF0 ZW1lbnRzIGJlZm9yZS9hZnRlciAnb21wIHNjYW4nLgoKZ2NjL2ZvcnRyYW4vQ2hhbmdlTG9n OgoKCSogb3Blbm1wLmNjIChnZmNfcmVzb2x2ZV9vbXBfZG9fYmxvY2tzKTogSGFuZGxlIHpl cm8KCW9yIG1vcmUgdGhhbiBvbmUgZXhlYyBzdGF0ZW1lbnRzIGJlZm9yZS9hZnRlciAnb21w IHNjYW4nLgoJKiB0cmFucy1vcGVubXAuY2MgKGdmY190cmFuc19vbXBfZG8pOiBMaWtld2lz ZS4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSogdGVzdHN1aXRlL2xpYmdvbXAuYy1jKystY29t bW9uL3NjYW4tMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9zY2FuLTIz LmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL3NjYW4tMi5mOTA6 IE5ldyB0ZXN0LgoKZ2NjL3Rlc3RzdWl0ZS9DaGFuZ2VMb2c6CgoJKiBnKysuZGcvZ29tcC9h dHRycy03LkM6IFVwZGF0ZSBkZy1lcnJvci9kZy13YXJuaW5nLgoJKiBnZm9ydHJhbi5kZy9n b21wL2xvb3AtMi5mOTA6IExpa2V3aXNlLgoJKiBnZm9ydHJhbi5kZy9nb21wL3JlZHVjdGlv bjUuZjkwOiBMaWtld2lzZS4KCSogZ2ZvcnRyYW4uZGcvZ29tcC9yZWR1Y3Rpb242LmY5MDog TGlrZXdpc2UuCgkqIGdmb3J0cmFuLmRnL2dvbXAvc2Nhbi0xLmY5MDogTGlrZXdpc2UuCgkq IGdmb3J0cmFuLmRnL2dvbXAvdGFza2xvb3AtMi5mOTA6IExpa2V3aXNlLgoJKiBjLWMrKy1j b21tb24vZ29tcC9zY2FuLTYuYzogTmV3IHRlc3QuCgkqIGdmb3J0cmFuLmRnL2dvbXAvc2Nh bi04LmY5MDogTmV3IHRlc3QuCgogZ2NjL2MvYy1wYXJzZXIuY2MgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgMjIgKysrKy0KIGdjYy9jcC9wYXJzZXIuY2MgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDI0ICsrKystCiBnY2MvZm9ydHJhbi9vcGVubXAu Y2MgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAzNSArKysrKy0tCiBnY2MvZm9ydHJh bi90cmFucy1vcGVubXAuY2MgICAgICAgICAgICAgICAgICAgICB8ICAzMSArKystLS0KIGdj Yy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvbXAvc2Nhbi02LmMgICAgICAgIHwgIDk1ICsr KysrKysrKysrKysrKysrKysKIGdjYy90ZXN0c3VpdGUvZysrLmRnL2dvbXAvYXR0cnMtNy5D ICAgICAgICAgICAgIHwgICA4ICstCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAv bG9vcC0yLmY5MCAgICAgICB8ICAxMCArLQogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL3JlZHVjdGlvbjUuZjkwICAgfCAgIDIgKy0KIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvZ29tcC9yZWR1Y3Rpb242LmY5MCAgIHwgICA0ICstCiBnY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2dvbXAvc2Nhbi0xLmY5MCAgICAgICB8ICAgOSArLQogZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb21wL3NjYW4tOC5mOTAgICAgICAgfCAgOTYgKysrKysrKysrKysrKysr KysrKwogZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3Rhc2tsb29wLTIuZjkwICAg fCAgMTIgKy0tCiBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9zY2Fu LTEuYyB8ICA2OCArKysrKysrKysrKysrCiBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMv c2Nhbi0yMy5jICAgICAgICAgICB8IDEyMSArKysrKysrKysrKysrKysrKysrKysrKysKIGxp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9zY2FuLTIuZjkwICAgIHwgIDU5ICsr KysrKysrKysrKwogMTUgZmlsZXMgY2hhbmdlZCwgNTQ1IGluc2VydGlvbnMoKyksIDUxIGRl bGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9jL2MtcGFyc2VyLmNjIGIvZ2NjL2MvYy1w YXJzZXIuY2MKaW5kZXggMjFiYzMxNjdjZTIuLjkzOThjN2E1MjcxIDEwMDY0NAotLS0gYS9n Y2MvYy9jLXBhcnNlci5jYworKysgYi9nY2MvYy9jLXBhcnNlci5jYwpAQCAtMjAxMTIsNiAr MjAxMTIsNyBAQCBjX3BhcnNlcl9vbXBfc2Nhbl9sb29wX2JvZHkgKGNfcGFyc2VyICpwYXJz ZXIsIGJvb2wgb3Blbl9icmFjZV9wYXJzZWQpCiAgIHRyZWUgc3Vic3RtdDsKICAgbG9jYXRp b25fdCBsb2M7CiAgIHRyZWUgY2xhdXNlcyA9IE5VTExfVFJFRTsKKyAgYm9vbCBmb3VuZF9z Y2FuID0gZmFsc2U7CiAKICAgbG9jID0gY19wYXJzZXJfcGVla190b2tlbiAocGFyc2VyKS0+ bG9jYXRpb247CiAgIGlmICghb3Blbl9icmFjZV9wYXJzZWQKQEAgLTIwMTIyLDcgKzIwMTIz LDE1IEBAIGNfcGFyc2VyX29tcF9zY2FuX2xvb3BfYm9keSAoY19wYXJzZXIgKnBhcnNlciwg Ym9vbCBvcGVuX2JyYWNlX3BhcnNlZCkKICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgc3Vi c3RtdCA9IGNfcGFyc2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrX3NlcXVlbmNlIChwYXJzZXIs IFBSQUdNQV9PTVBfU0NBTik7CisgIGlmIChjX3BhcnNlcl9wZWVrX3Rva2VuIChwYXJzZXIp LT5wcmFnbWFfa2luZCAhPSBQUkFHTUFfT01QX1NDQU4pCisgICAgc3Vic3RtdCA9IGNfcGFy c2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrX3NlcXVlbmNlIChwYXJzZXIsIFBSQUdNQV9PTVBf U0NBTik7CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nX2F0IChjX3BhcnNlcl9wZWVr X3Rva2VuIChwYXJzZXIpLT5sb2NhdGlvbiwgMCwKKwkJICAiJTwjcHJhZ21hIG9tcCBzY2Fu JT4gd2l0aCB6ZXJvIHByZWNlZGluZyBleGVjdXRhYmxlICIKKwkJICAic3RhdGVtZW50cyIp OworICAgICAgc3Vic3RtdCA9IGJ1aWxkX2VtcHR5X3N0bXQgKGxvYyk7CisgICAgfQogICBz dWJzdG10ID0gYnVpbGQyIChPTVBfU0NBTiwgdm9pZF90eXBlX25vZGUsIHN1YnN0bXQsIE5V TExfVFJFRSk7CiAgIFNFVF9FWFBSX0xPQ0FUSU9OIChzdWJzdG10LCBsb2MpOwogICBhZGRf c3RtdCAoc3Vic3RtdCk7CkBAIC0yMDEzMSw2ICsyMDE0MCw3IEBAIGNfcGFyc2VyX29tcF9z Y2FuX2xvb3BfYm9keSAoY19wYXJzZXIgKnBhcnNlciwgYm9vbCBvcGVuX2JyYWNlX3BhcnNl ZCkKICAgaWYgKGNfcGFyc2VyX3BlZWtfdG9rZW4gKHBhcnNlciktPnByYWdtYV9raW5kID09 IFBSQUdNQV9PTVBfU0NBTikKICAgICB7CiAgICAgICBlbnVtIG9tcF9jbGF1c2VfY29kZSBj bGF1c2UgPSBPTVBfQ0xBVVNFX0VSUk9SOworICAgICAgZm91bmRfc2NhbiA9IHRydWU7CiAK ICAgICAgIGNfcGFyc2VyX2NvbnN1bWVfcHJhZ21hIChwYXJzZXIpOwogCkBAIC0yMDE2MCw3 ICsyMDE3MCwxNSBAQCBjX3BhcnNlcl9vbXBfc2Nhbl9sb29wX2JvZHkgKGNfcGFyc2VyICpw YXJzZXIsIGJvb2wgb3Blbl9icmFjZV9wYXJzZWQpCiAgICAgZXJyb3IgKCJleHBlY3RlZCAl PCNwcmFnbWEgb21wIHNjYW4lPiIpOwogCiAgIGNsYXVzZXMgPSBjX2ZpbmlzaF9vbXBfY2xh dXNlcyAoY2xhdXNlcywgQ19PUlRfT01QKTsKLSAgc3Vic3RtdCA9IGNfcGFyc2VyX29tcF9z dHJ1Y3R1cmVkX2Jsb2NrX3NlcXVlbmNlIChwYXJzZXIsIFBSQUdNQV9OT05FKTsKKyAgaWYg KCFjX3BhcnNlcl9uZXh0X3Rva2VuX2lzIChwYXJzZXIsIENQUF9DTE9TRV9CUkFDRSkpCisg ICAgc3Vic3RtdCA9IGNfcGFyc2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrX3NlcXVlbmNlIChw YXJzZXIsIFBSQUdNQV9OT05FKTsKKyAgZWxzZQorICAgIHsKKyAgICAgIGlmIChmb3VuZF9z Y2FuKQorCXdhcm5pbmdfYXQgKGxvYywgMCwgIiU8I3ByYWdtYSBvbXAgc2NhbiU+IHdpdGgg emVybyBzdWNjZWVkaW5nICIKKwkJCSAgICAiZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIik7Cisg ICAgICBzdWJzdG10ID0gYnVpbGRfZW1wdHlfc3RtdCAobG9jKTsKKyAgICB9CiAgIHN1YnN0 bXQgPSBidWlsZDIgKE9NUF9TQ0FOLCB2b2lkX3R5cGVfbm9kZSwgc3Vic3RtdCwgY2xhdXNl cyk7CiAgIFNFVF9FWFBSX0xPQ0FUSU9OIChzdWJzdG10LCBsb2MpOwogICBhZGRfc3RtdCAo c3Vic3RtdCk7CmRpZmYgLS1naXQgYS9nY2MvY3AvcGFyc2VyLmNjIGIvZ2NjL2NwL3BhcnNl ci5jYwppbmRleCBhNjM0MWI5OGFmMi4uNjE3NWZmZGIxMTUgMTAwNjQ0Ci0tLSBhL2djYy9j cC9wYXJzZXIuY2MKKysrIGIvZ2NjL2NwL3BhcnNlci5jYwpAQCAtNDM1MjEsMTkgKzQzNTIx LDI5IEBAIHN0YXRpYyB2b2lkCiBjcF9wYXJzZXJfb21wX3NjYW5fbG9vcF9ib2R5IChjcF9w YXJzZXIgKnBhcnNlcikKIHsKICAgdHJlZSBzdWJzdG10LCBjbGF1c2VzID0gTlVMTF9UUkVF OworICBib29sIGZvdW5kX3NjYW4gPSBmYWxzZTsKIAogICBtYXRjaGluZ19icmFjZXMgYnJh Y2VzOwogICBpZiAoIWJyYWNlcy5yZXF1aXJlX29wZW4gKHBhcnNlcikpCiAgICAgcmV0dXJu OwogCi0gIHN1YnN0bXQgPSBjcF9wYXJzZXJfb21wX3N0cnVjdHVyZWRfYmxvY2tfc2VxdWVu Y2UgKHBhcnNlciwgUFJBR01BX09NUF9TQ0FOKTsKKyAgY3BfdG9rZW4gKnRvayA9IGNwX2xl eGVyX3BlZWtfdG9rZW4gKHBhcnNlci0+bGV4ZXIpOworICBpZiAoY3BfcGFyc2VyX3ByYWdt YV9raW5kICh0b2spICE9IFBSQUdNQV9PTVBfU0NBTikKKyAgICBzdWJzdG10ID0gY3BfcGFy c2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrX3NlcXVlbmNlIChwYXJzZXIsIFBSQUdNQV9PTVBf U0NBTik7CisgIGVsc2UKKyAgICB7CisgICAgICB3YXJuaW5nX2F0ICh0b2stPmxvY2F0aW9u LCAwLCAiJTwjcHJhZ21hIG9tcCBzY2FuJT4gd2l0aCB6ZXJvIHByZWNlZGluZyAiCisJCQkJ ICAgICJleGVjdXRhYmxlIHN0YXRlbWVudHMiKTsKKyAgICAgIHN1YnN0bXQgPSBidWlsZF9l bXB0eV9zdG10ICh0b2stPmxvY2F0aW9uKTsKKyAgICB9CiAgIHN1YnN0bXQgPSBidWlsZDIg KE9NUF9TQ0FOLCB2b2lkX3R5cGVfbm9kZSwgc3Vic3RtdCwgTlVMTF9UUkVFKTsKICAgYWRk X3N0bXQgKHN1YnN0bXQpOwogCi0gIGNwX3Rva2VuICp0b2sgPSBjcF9sZXhlcl9wZWVrX3Rv a2VuIChwYXJzZXItPmxleGVyKTsKKyAgdG9rID0gY3BfbGV4ZXJfcGVla190b2tlbiAocGFy c2VyLT5sZXhlcik7CiAgIGlmIChjcF9wYXJzZXJfcHJhZ21hX2tpbmQgKHRvaykgPT0gUFJB R01BX09NUF9TQ0FOKQogICAgIHsKICAgICAgIGVudW0gb21wX2NsYXVzZV9jb2RlIGNsYXVz ZSA9IE9NUF9DTEFVU0VfRVJST1I7CisgICAgICBmb3VuZF9zY2FuID0gdHJ1ZTsKIAogICAg ICAgY3BfbGV4ZXJfY29uc3VtZV90b2tlbiAocGFyc2VyLT5sZXhlcik7CiAKQEAgLTQzNTY0 LDcgKzQzNTc0LDE1IEBAIGNwX3BhcnNlcl9vbXBfc2Nhbl9sb29wX2JvZHkgKGNwX3BhcnNl ciAqcGFyc2VyKQogICAgIGVycm9yICgiZXhwZWN0ZWQgJTwjcHJhZ21hIG9tcCBzY2FuJT4i KTsKIAogICBjbGF1c2VzID0gZmluaXNoX29tcF9jbGF1c2VzIChjbGF1c2VzLCBDX09SVF9P TVApOwotICBzdWJzdG10ID0gY3BfcGFyc2VyX29tcF9zdHJ1Y3R1cmVkX2Jsb2NrX3NlcXVl bmNlIChwYXJzZXIsIFBSQUdNQV9OT05FKTsKKyAgaWYgKCFjcF9sZXhlcl9uZXh0X3Rva2Vu X2lzIChwYXJzZXItPmxleGVyLCBDUFBfQ0xPU0VfQlJBQ0UpKQorICAgIHN1YnN0bXQgPSBj cF9wYXJzZXJfb21wX3N0cnVjdHVyZWRfYmxvY2tfc2VxdWVuY2UgKHBhcnNlciwgUFJBR01B X05PTkUpOworICBlbHNlCisgICAgeworICAgICAgaWYgKGZvdW5kX3NjYW4pCisJd2Fybmlu Z19hdCAodG9rLT5sb2NhdGlvbiwgMCwgIiU8I3ByYWdtYSBvbXAgc2NhbiU+IHdpdGggemVy byAiCisJCQkJICAgICAgInN1Y2NlZWRpbmcgZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIik7Cisg ICAgICBzdWJzdG10ID0gYnVpbGRfZW1wdHlfc3RtdCAodG9rLT5sb2NhdGlvbik7CisgICAg fQogICBzdWJzdG10ID0gYnVpbGQyX2xvYyAodG9rLT5sb2NhdGlvbiwgT01QX1NDQU4sIHZv aWRfdHlwZV9ub2RlLCBzdWJzdG10LAogCQkJY2xhdXNlcyk7CiAgIGFkZF9zdG10IChzdWJz dG10KTsKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5jYyBiL2djYy9mb3J0cmFu L29wZW5tcC5jYwppbmRleCBiOGI2Njg2OTkwOC4uODZlNDUxNTMxYTYgMTAwNjQ0Ci0tLSBh L2djYy9mb3J0cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi9vcGVubXAuY2MKQEAg LTkwNjcsMTcgKzkwNjcsMzQgQEAgZ2ZjX3Jlc29sdmVfb21wX2RvX2Jsb2NrcyAoZ2ZjX2Nv ZGUgKmNvZGUsIGdmY19uYW1lc3BhY2UgKm5zKQogCSAgaWYgKGNvZGUtPmV4dC5vbXBfY2xh dXNlcy0+c2NoZWRfa2luZCAhPSBPTVBfU0NIRURfTk9ORSkKIAkgICAgZ2ZjX2Vycm9yICgi U0NIRURVTEUgY2xhdXNlIHNwZWNpZmllZCB0b2dldGhlciB3aXRoICU8aW5zY2FuJT4gIgog CQkgICAgICAgIlJFRFVDVElPTiBjbGF1c2UgYXQgJUwiLCBsb2MpOwotCSAgaWYgKCFjLT5i bG9jawotCSAgICAgIHx8ICFjLT5ibG9jay0+bmV4dAotCSAgICAgIHx8ICFjLT5ibG9jay0+ bmV4dC0+bmV4dAotCSAgICAgIHx8IGMtPmJsb2NrLT5uZXh0LT5uZXh0LT5vcCAhPSBFWEVD X09NUF9TQ0FOCi0JICAgICAgfHwgIWMtPmJsb2NrLT5uZXh0LT5uZXh0LT5uZXh0Ci0JICAg ICAgfHwgYy0+YmxvY2stPm5leHQtPm5leHQtPm5leHQtPm5leHQpCisJICBnZmNfY29kZSAq YmxvY2sgPSBjLT5ibG9jayA/IGMtPmJsb2NrLT5uZXh0IDogTlVMTDsKKwkgIGlmIChibG9j ayAmJiBibG9jay0+b3AgIT0gRVhFQ19PTVBfU0NBTikKKwkgICAgd2hpbGUgKGJsb2NrICYm IGJsb2NrLT5uZXh0ICYmIGJsb2NrLT5uZXh0LT5vcCAhPSBFWEVDX09NUF9TQ0FOKQorCSAg ICAgIGJsb2NrID0gYmxvY2stPm5leHQ7CisJICBpZiAoIWJsb2NrCisJICAgICAgfHwgKGJs b2NrLT5vcCAhPSBFWEVDX09NUF9TQ0FOCisJCSAgJiYgKCFibG9jay0+bmV4dCB8fCBibG9j ay0+bmV4dC0+b3AgIT0gRVhFQ19PTVBfU0NBTikpKQogCSAgICBnZmNfZXJyb3IgKCJXaXRo IElOU0NBTiBhdCAlTCwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggISRPTVAgU0NBTiAiCi0J CSAgICAgICAiYmV0d2VlbiB0d28gc3RydWN0dXJlZC1ibG9jay1zZXF1ZW5jZXMiLCBsb2Mp OworCQkgICAgICAgImJldHdlZW4gdHdvIHN0cnVjdHVyZWQgYmxvY2sgc2VxdWVuY2VzIiwg bG9jKTsKIAkgIGVsc2UKLQkgICAgLyogTWFyayBhcyBjaGVja2VkOyBmbGFnIHdpbGwgYmUg dW5zZXQgbGF0ZXIuICAqLwotCSAgICBjLT5ibG9jay0+bmV4dC0+bmV4dC0+ZXh0Lm9tcF9j bGF1c2VzLT5pZl9wcmVzZW50ID0gdHJ1ZTsKKwkgICAgeworCSAgICAgIGlmIChibG9jay0+ b3AgPT0gRVhFQ19PTVBfU0NBTikKKwkJZ2ZjX3dhcm5pbmcgKDAsICIhJE9NUCBTQ0FOIGF0 ICVMIHdpdGggemVybyBleGVjdXRhYmxlICIKKwkJCQkic3RhdGVtZW50cyBpbiBwcmVjZWRp bmcgc3RydWN0dXJlZCBibG9jayAiCisJCQkJInNlcXVlbmNlIiwgJmJsb2NrLT5sb2MpOwor CSAgICAgIGlmICgoYmxvY2stPm9wID09IEVYRUNfT01QX1NDQU4gJiYgIWJsb2NrLT5uZXh0 KQorCQkgIHx8IChibG9jay0+bmV4dCAmJiBibG9jay0+bmV4dC0+b3AgPT0gRVhFQ19PTVBf U0NBTgorCQkgICAgICAmJiAhYmxvY2stPm5leHQtPm5leHQpKQorCQlnZmNfd2FybmluZyAo MCwgIiEkT01QIFNDQU4gYXQgJUwgd2l0aCB6ZXJvIGV4ZWN1dGFibGUgIgorCQkJCSJzdGF0 ZW1lbnRzIGluIHN1Y2NlZWRpbmcgc3RydWN0dXJlZCBibG9jayAiCisJCQkJInNlcXVlbmNl IiwgYmxvY2stPm9wID09IEVYRUNfT01QX1NDQU4KKwkJCQkJICAgID8gJmJsb2NrLT5sb2Mg OiAmYmxvY2stPm5leHQtPmxvYyk7CisJICAgIH0KKwkgIGlmIChibG9jayAmJiBibG9jay0+ b3AgIT0gRVhFQ19PTVBfU0NBTikKKwkgICAgYmxvY2sgPSBibG9jay0+bmV4dDsKKwkgIGlm IChibG9jayAmJiBibG9jay0+b3AgPT0gRVhFQ19PTVBfU0NBTikKKwkgICAgLyogTWFyayAn b21wIHNjYW4nIGFzIGNoZWNrZWQ7IGZsYWcgd2lsbCBiZSB1bnNldCBsYXRlci4gICovCisJ ICAgIGJsb2NrLT5leHQub21wX2NsYXVzZXMtPmlmX3ByZXNlbnQgPSB0cnVlOwogCX0KICAg ICB9CiAgIGdmY19yZXNvbHZlX2Jsb2NrcyAoY29kZS0+YmxvY2ssIG5zKTsKZGlmZiAtLWdp dCBhL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyBiL2djYy9mb3J0cmFuL3RyYW5zLW9w ZW5tcC5jYwppbmRleCA4NGMwMTg0ZjQ4ZS4uNGZmOWM1OWRmNWMgMTAwNjQ0Ci0tLSBhL2dj Yy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi90cmFucy1vcGVu bXAuY2MKQEAgLTU2MDMsMjYgKzU2MDMsMjkgQEAgZ2ZjX3RyYW5zX29tcF9kbyAoZ2ZjX2Nv ZGUgKmNvZGUsIGdmY19leGVjX29wIG9wLCBzdG10YmxvY2tfdCAqcGJsb2NrLAogICAvKiBN YWluIGxvb3AgYm9keS4gICovCiAgIGlmIChjbGF1c2VzLT5saXN0c1tPTVBfTElTVF9SRURV Q1RJT05fSU5TQ0FOXSkKICAgICB7Ci0gICAgICBnY2NfYXNzZXJ0IChjb2RlLT5ibG9jay0+ bmV4dC0+bmV4dC0+b3AgPT0gRVhFQ19PTVBfU0NBTik7Ci0gICAgICBnY2NfYXNzZXJ0IChj b2RlLT5ibG9jay0+bmV4dC0+bmV4dC0+bmV4dC0+bmV4dCA9PSBOVUxMKTsKLSAgICAgIGxv Y3VzICpjbG9jID0gJmNvZGUtPmJsb2NrLT5uZXh0LT5uZXh0LT5sb2M7Ci0gICAgICBsb2Nh dGlvbl90IGxvYyA9IGdmY19nZXRfbG9jYXRpb24gKGNsb2MpOwotCi0gICAgICBnZmNfY29k ZSBjb2RlMiA9ICpjb2RlLT5ibG9jay0+bmV4dDsKLSAgICAgIGNvZGUyLm5leHQgPSBOVUxM OwotICAgICAgdG1wID0gZ2ZjX3RyYW5zX2NvZGUgKCZjb2RlMik7CisgICAgICBnZmNfY29k ZSAqY29kZTEsICpzY2FuLCAqY29kZTIsICp0bXBjb2RlOworICAgICAgY29kZTEgPSB0bXBj b2RlID0gY29kZS0+YmxvY2stPm5leHQ7CisgICAgICBpZiAodG1wY29kZSAmJiB0bXBjb2Rl LT5vcCAhPSBFWEVDX09NUF9TQ0FOKQorCXdoaWxlICh0bXBjb2RlICYmIHRtcGNvZGUtPm5l eHQgJiYgdG1wY29kZS0+bmV4dC0+b3AgIT0gRVhFQ19PTVBfU0NBTikKKwkgIHRtcGNvZGUg PSB0bXBjb2RlLT5uZXh0OworICAgICAgc2NhbiA9IHRtcGNvZGUtPm9wID09IEVYRUNfT01Q X1NDQU4gPyB0bXBjb2RlIDogdG1wY29kZS0+bmV4dDsKKyAgICAgIGlmIChjb2RlMSAhPSBz Y2FuKQorCXRtcGNvZGUtPm5leHQgPSBOVUxMOworICAgICAgY29kZTIgPSBzY2FuLT5uZXh0 OworICAgICAgZ2NjX2Fzc2VydCAoc2Nhbi0+b3AgPT0gRVhFQ19PTVBfU0NBTik7CisgICAg ICBsb2NhdGlvbl90IGxvYyA9IGdmY19nZXRfbG9jYXRpb24gKCZzY2FuLT5sb2MpOworCisg ICAgICB0bXAgPSBjb2RlMSAhPSBzY2FuID8gZ2ZjX3RyYW5zX2NvZGUgKGNvZGUxKSA6IGJ1 aWxkX2VtcHR5X3N0bXQgKGxvYyk7CiAgICAgICB0bXAgPSBidWlsZDIgKE9NUF9TQ0FOLCB2 b2lkX3R5cGVfbm9kZSwgdG1wLCBOVUxMX1RSRUUpOwogICAgICAgU0VUX0VYUFJfTE9DQVRJ T04gKHRtcCwgbG9jKTsKICAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJmJvZHksIHRt cCk7CiAgICAgICBpbnB1dF9sb2NhdGlvbiA9IGxvYzsKLSAgICAgIHRyZWUgYyA9IGdmY190 cmFuc19vbXBfY2xhdXNlcyAoJmJvZHksCi0JCQkJICAgICAgY29kZS0+YmxvY2stPm5leHQt Pm5leHQtPmV4dC5vbXBfY2xhdXNlcywKLQkJCQkgICAgICAqY2xvYyk7Ci0gICAgICBjb2Rl MiA9ICpjb2RlLT5ibG9jay0+bmV4dC0+bmV4dC0+bmV4dDsKLSAgICAgIGNvZGUyLm5leHQg PSBOVUxMOwotICAgICAgdG1wID0gZ2ZjX3RyYW5zX2NvZGUgKCZjb2RlMik7CisgICAgICB0 cmVlIGMgPSBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKCZib2R5LCBzY2FuLT5leHQub21wX2Ns YXVzZXMsIHNjYW4tPmxvYyk7CisgICAgICB0bXAgPSBjb2RlMiA/IGdmY190cmFuc19jb2Rl IChjb2RlMikgOiBidWlsZF9lbXB0eV9zdG10IChsb2MpOwogICAgICAgdG1wID0gYnVpbGQy IChPTVBfU0NBTiwgdm9pZF90eXBlX25vZGUsIHRtcCwgYyk7CiAgICAgICBTRVRfRVhQUl9M T0NBVElPTiAodG1wLCBsb2MpOworICAgICAgaWYgKGNvZGUxICE9IHNjYW4pCisJdG1wY29k ZS0+bmV4dCA9IHNjYW47CiAgICAgfQogICBlbHNlCiAgICAgdG1wID0gZ2ZjX3RyYW5zX29t cF9jb2RlIChjb2RlLT5ibG9jay0+bmV4dCwgdHJ1ZSk7CmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb21wL3NjYW4tNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMr Ky1jb21tb24vZ29tcC9zY2FuLTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOTljMmQ2YTljOGIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2MtYysrLWNvbW1vbi9nb21wL3NjYW4tNi5jCkBAIC0wLDAgKzEsOTUgQEAKK3ZvaWQgZjEg KGludCwgaW50LCBpbnQpOworaW50IGlpaSAoaW50LCBpbnQsIGludCk7CisKK2ludAorczEg KGludCBhMSwgaW50IGEyLCBpbnQgYTMpCit7CisgIGludCByID0gMDsKKyAgI3ByYWdtYSBv bXAgc2ltZCBjb2xsYXBzZSgzKSByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKQorICBmb3IgKGlu dCBpID0gMDsgaSA8IGExOyBpKyspCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhMjsgaisr KQorICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhMzsgaysrKQorCXsKKwkgICNwcmFnbWEg b21wIHNjYW4gZXhjbHVzaXZlIChyKSAgLyogeyBkZy13YXJuaW5nICInI3ByYWdtYSBvbXAg c2Nhbicgd2l0aCB6ZXJvIHByZWNlZGluZyBleGVjdXRhYmxlIHN0YXRlbWVudHMiIH0gKi8K KwkgIGYxICgyLCBrLCByKTsKKwl9CisKKyAgI3ByYWdtYSBvbXAgc2ltZCBjb2xsYXBzZSgz KSByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKQorICBmb3IgKGludCBpID0gMDsgaSA8IGExOyBp KyspCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBhMjsgaisrKQorICAgICAgZm9yIChpbnQg ayA9IDA7IGsgPCBhMzsgaysrKQorCXsKKwkgIHIgKz0gaWlpIChpLCBqLCBrKTsKKwkgICNw cmFnbWEgb21wIHNjYW4gZXhjbHVzaXZlIChyKSAgLyogeyBkZy13YXJuaW5nICInI3ByYWdt YSBvbXAgc2Nhbicgd2l0aCB6ZXJvIHN1Y2NlZWRpbmcgZXhlY3V0YWJsZSBzdGF0ZW1lbnRz IiB9ICovCisJfQorCisgICNwcmFnbWEgb21wIHNpbWQgY29sbGFwc2UoMykgcmVkdWN0aW9u IChpbnNjYW4sICs6cikKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBhMTsgaSsrKQorICAgIGZv ciAoaW50IGogPSAwOyBqIDwgYTI7IGorKykKKyAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwg YTM7IGsrKykKKwl7CisJICAjcHJhZ21hIG9tcCBzY2FuIGluY2x1c2l2ZSAocikKKyAgICAg ICAgICAgLyogeyBkZy13YXJuaW5nICInI3ByYWdtYSBvbXAgc2Nhbicgd2l0aCB6ZXJvIHBy ZWNlZGluZyBleGVjdXRhYmxlIHN0YXRlbWVudHMiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0x IH0gKi8KKyAgICAgICAgICAgLyogeyBkZy13YXJuaW5nICInI3ByYWdtYSBvbXAgc2Nhbicg d2l0aCB6ZXJvIHN1Y2NlZWRpbmcgZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIiAiIiB7IHRhcmdl dCAqLSotKiB9IC4tMiB9ICovCisJfQorICByZXR1cm4gcjsKK30KKworaW50CitzMiAoaW50 IGExLCBpbnQgYTIsIGludCBhMykKK3sKKyAgaW50IHIgPSAwOworICAjcHJhZ21hIG9tcCBz aW1kIGNvbGxhcHNlKDMpIHJlZHVjdGlvbiAoaW5zY2FuLCArOnIpICAvKiB7IGRnLWVycm9y ICIncicgc3BlY2lmaWVkIGluICdpbnNjYW4nICdyZWR1Y3Rpb24nIGNsYXVzZSBidXQgbm90 IGluICdzY2FuJyBkaXJlY3RpdmUgY2xhdXMiIH0gKi8KKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBhMTsgaSsrKQorICAgIGZvciAoaW50IGogPSAwOyBqIDwgYTI7IGorKykKKyAgICAgIGZv ciAoaW50IGsgPSAwOyBrIDwgYTM7IGsrKykKKwl7CisJICBmMSAoMiwgaywgcik7CisJICBy ICs9IGlpaSAoaSwgaiwgayk7ICAvKiB7IGRnLWVycm9yICJleHBlY3RlZCAnI3ByYWdtYSBv bXAgc2NhbiciICIiIHsgdGFyZ2V0IGMrKyB9IH0gKi8KKwl9ICAvKiB7IGRnLWVycm9yICJl eHBlY3RlZCAnI3ByYWdtYSBvbXAgc2NhbiciICIiIHsgdGFyZ2V0IGMgfSB9ICovCisKKyAg ciA9IDA7CisgICNwcmFnbWEgb21wIHNpbWQgY29sbGFwc2UoMykgcmVkdWN0aW9uIChpbnNj YW4sICs6cikgIC8qIHsgZGctZXJyb3IgIidyJyBzcGVjaWZpZWQgaW4gJ2luc2NhbicgJ3Jl ZHVjdGlvbicgY2xhdXNlIGJ1dCBub3QgaW4gJ3NjYW4nIGRpcmVjdGl2ZSBjbGF1cyIgfSAq LworICBmb3IgKGludCBpID0gMDsgaSA8IGExOyBpKyspCisgICAgZm9yIChpbnQgaiA9IDA7 IGogPCBhMjsgaisrKQorICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhMzsgaysrKQorCTsg IC8qIHsgZGctZXJyb3IgImV4cGVjdGVkICdceycgYmVmb3JlICc7JyB0b2tlbiIgfSAqLwor CisgICNwcmFnbWEgb21wIHNpbWQgY29sbGFwc2UoMykgcmVkdWN0aW9uIChpbnNjYW4sICs6 cikgIC8qIHsgZGctZXJyb3IgIidyJyBzcGVjaWZpZWQgaW4gJ2luc2NhbicgJ3JlZHVjdGlv bicgY2xhdXNlIGJ1dCBub3QgaW4gJ3NjYW4nIGRpcmVjdGl2ZSBjbGF1cyIgfSAqLworICBm b3IgKGludCBpID0gMDsgaSA8IGExOyBpKyspCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBh MjsgaisrKQorICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhMzsgaysrKQorCXsKKwl9ICAv KiB7IGRnLWVycm9yICJleHBlY3RlZCBleHByZXNzaW9uIGJlZm9yZSAnXH0nIHRva2VuIiAi IiB7IHRhcmdldCBjIH0gfSAqLworICAgICAgICAgICAvKiB7IGRnLWVycm9yICJleHBlY3Rl ZCBwcmltYXJ5LWV4cHJlc3Npb24gYmVmb3JlICdcfScgdG9rZW4iICIiIHsgdGFyZ2V0IGMr KyB9IC4tMSB9ICovCisJICAgLyogeyBkZy1lcnJvciAiZXhwZWN0ZWQgJyNwcmFnbWEgb21w IHNjYW4nIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMiB9ICovCisKKworICByID0gMDsKKyAg I3ByYWdtYSBvbXAgc2ltZCBjb2xsYXBzZSgzKSByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKQor ICBmb3IgKGludCBpID0gMDsgaSA8IGExOyBpKyspCisgICAgZm9yIChpbnQgaiA9IDA7IGog PCBhMjsgaisrKQorICAgICAgZm9yIChpbnQgayA9IDA7IGsgPCBhMzsgaysrKQorCXsKKwkg IGYxICgyLCBrLCByKTsKKwkgICNwcmFnbWEgb21wIHNjYW4gaW5jbHVzaXZlIChyKQorCSAg I3ByYWdtYSBvbXAgc2NhbiBpbmNsdXNpdmUgKHIpICAvKiB7IGRnLWVycm9yICInI3ByYWdt YSBvbXAgc2NhbicgbWF5IG9ubHkgYmUgdXNlZCBpbiBhIGxvb3AgY29uc3RydWN0IHdpdGgg J2luc2NhbicgJ3JlZHVjdGlvbicgY2xhdXNlIiB9ICovCisJICByICs9IGlpaSAoaSwgaiwg ayk7CisJfQorCisgICNwcmFnbWEgb21wIHNjYW4gaW5jbHVzaXZlIChyKSAgLyogeyBkZy1l cnJvciAiJyNwcmFnbWEgb21wIHNjYW4nIG1heSBvbmx5IGJlIHVzZWQgaW4gYSBsb29wIGNv bnN0cnVjdCB3aXRoICdpbnNjYW4nICdyZWR1Y3Rpb24nIGNsYXVzZSIgfSAqLworCisgIHIg PSAwOworICAjcHJhZ21hIG9tcCBzaW1kIGNvbGxhcHNlKDMpIHJlZHVjdGlvbiAoaW5zY2Fu LCArOnIpICAvKiB7IGRnLWVycm9yICIncicgc3BlY2lmaWVkIGluICdpbnNjYW4nICdyZWR1 Y3Rpb24nIGNsYXVzZSBidXQgbm90IGluICdzY2FuJyBkaXJlY3RpdmUgY2xhdXNlIiB9ICov CisgIGZvciAoaW50IGkgPSAwOyBpIDwgYTE7IGkrKykKKyAgICBmb3IgKGludCBqID0gMDsg aiA8IGEyOyBqKyspCisgICAgICBmb3IgKGludCBrID0gMDsgayA8IGEzOyBrKyspCisJewor CSAgZjEgKDIsIGssIHIpOworCSAgeworCSAgICAjcHJhZ21hIG9tcCBzY2FuIGluY2x1c2l2 ZSAocikgIC8qIHsgZGctZXJyb3IgIicjcHJhZ21hIG9tcCBzY2FuJyBtYXkgb25seSBiZSB1 c2VkIGluIGEgbG9vcCBjb25zdHJ1Y3Qgd2l0aCAnaW5zY2FuJyAncmVkdWN0aW9uJyBjbGF1 c2UiIH0gKi8KKwkgIH0KKwkgIHIgKz0gaWlpIChpLCBqLCBrKTsgIC8qIHsgZGctZXJyb3Ig ImV4cGVjdGVkICcjcHJhZ21hIG9tcCBzY2FuJyIgIiIgeyB0YXJnZXQgYysrIH0gfSAgKi8K Kwl9ICAvKiB7IGRnLWVycm9yICJleHBlY3RlZCAnI3ByYWdtYSBvbXAgc2NhbiciICIiIHsg dGFyZ2V0IGMgfSB9ICAqLworICByZXR1cm4gcjsKK30KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZysrLmRnL2dvbXAvYXR0cnMtNy5DIGIvZ2NjL3Rlc3RzdWl0ZS9nKysuZGcvZ29t cC9hdHRycy03LkMKaW5kZXggOTAwZWY2NjQ5NTcuLjU5Zjk5MmM1MTZjIDEwMDY0NAotLS0g YS9nY2MvdGVzdHN1aXRlL2crKy5kZy9nb21wL2F0dHJzLTcuQworKysgYi9nY2MvdGVzdHN1 aXRlL2crKy5kZy9nb21wL2F0dHJzLTcuQwpAQCAtMzEsNyArMzEsNyBAQCBiYXIgKGludCBh LCBpbnQgKmMsIGludCAqZCwgaW50ICplLCBpbnQgKmYpCiAgICAgICBbW29tcDo6c2VxdWVu Y2UgKG9tcDo6ZGlyZWN0aXZlIChwYXJhbGxlbCksIG9tcDo6ZGlyZWN0aXZlIChzY2FuLCBl eGNsdXNpdmUgKGEpKSldXQkvLyB7IGRnLWVycm9yICJtdXN0IGJlIHRoZSBvbmx5IHNwZWNp ZmllZCBhdHRyaWJ1dGUgb24gYSBzdGF0ZW1lbnQiIH0KIAkJCQkJCQkJCQkJLy8geyBkZy1l cnJvciAiI3ByYWdtYSBvbXAgc2NhbiIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQogICAg ICAgYSArPSBjW2ldOwkJCQkJCQkJCS8vIHsgZGctZXJyb3IgImV4cGVjdGVkIiB9Ci0gICAg fQkJCQkJCQkJCQkJLy8geyBkZy1lcnJvciAiZXhwZWN0ZWQiIH0KKyAgICB9CiAgIFtbb21w OjpkaXJlY3RpdmUgKHBhcmFsbGVsIGZvciByZWR1Y3Rpb24gKGluc2NhbiwgKzogYSkpXV0J CQkJLy8geyBkZy1lcnJvciAiJ2EnIHNwZWNpZmllZCBpbiAnaW5zY2FuJyAncmVkdWN0aW9u JyBjbGF1c2UgYnV0IG5vdCBpbiAnc2NhbicgZGlyZWN0aXZlIGNsYXVzZSIgfQogICBmb3Ig KGkgPSAwOyBpIDwgNjQ7IGkrKykKICAgICB7CkBAIC0zOSw3ICszOSw3IEBAIGJhciAoaW50 IGEsIGludCAqYywgaW50ICpkLCBpbnQgKmUsIGludCAqZikKICAgICAgIFtbb21wOjpzZXF1 ZW5jZSAoZGlyZWN0aXZlIChzY2FuIGluY2x1c2l2ZSAoYSkpLCBkaXJlY3RpdmUgKGNyaXRp Y2FsKSldXQkJLy8geyBkZy1lcnJvciAibXVzdCBiZSB0aGUgb25seSBzcGVjaWZpZWQgYXR0 cmlidXRlIG9uIGEgc3RhdGVtZW50IiB9CiAJCQkJCQkJCQkJCS8vIHsgZGctZXJyb3IgIiNw cmFnbWEgb21wIHNjYW4iICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KICAgICAgIGRbaV0g PSBhOwkJCQkJCQkJCQkvLyB7IGRnLWVycm9yICJleHBlY3RlZCIgfQotICAgIH0JCQkJCQkJ CQkJCS8vIHsgZGctZXJyb3IgImV4cGVjdGVkIiB9CisgICAgfQogICBbW29tcDo6ZGlyZWN0 aXZlIChwYXJhbGxlbCBmb3IgcmVkdWN0aW9uIChpbnNjYW4sICs6IGEpKV1dCQkJCS8vIHsg ZGctZXJyb3IgIidhJyBzcGVjaWZpZWQgaW4gJ2luc2NhbicgJ3JlZHVjdGlvbicgY2xhdXNl IGJ1dCBub3QgaW4gJ3NjYW4nIGRpcmVjdGl2ZSBjbGF1c2UiIH0KICAgZm9yIChpID0gMDsg aSA8IDY0OyBpKyspCiAgICAgewpAQCAtNDcsNyArNDcsNyBAQCBiYXIgKGludCBhLCBpbnQg KmMsIGludCAqZCwgaW50ICplLCBpbnQgKmYpCiAgICAgICBbW2dudTo6Y29sZF1dIFtbb21w OjpkaXJlY3RpdmUgKHNjYW4sIGV4Y2x1c2l2ZSAoYSkpXV0JCQkJLy8geyBkZy1lcnJvciAi bXVzdCBiZSB0aGUgb25seSBzcGVjaWZpZWQgYXR0cmlidXRlIG9uIGEgc3RhdGVtZW50IiB9 CiAJCQkJCQkJCQkJCS8vIHsgZGctZXJyb3IgIiNwcmFnbWEgb21wIHNjYW4iICIiIHsgdGFy Z2V0ICotKi0qIH0gLi0xIH0KICAgICAgIGEgKz0gY1tpXTsJCQkJCQkJCQkvLyB7IGRnLWVy cm9yICJleHBlY3RlZCIgfQotICAgIH0JCQkJCQkJCQkJCS8vIHsgZGctZXJyb3IgImV4cGVj dGVkIiB9CisgICAgfQogICBbW29tcDo6ZGlyZWN0aXZlIChwYXJhbGxlbCBmb3IgcmVkdWN0 aW9uIChpbnNjYW4sICs6IGEpKV1dCQkJCS8vIHsgZGctZXJyb3IgIidhJyBzcGVjaWZpZWQg aW4gJ2luc2NhbicgJ3JlZHVjdGlvbicgY2xhdXNlIGJ1dCBub3QgaW4gJ3NjYW4nIGRpcmVj dGl2ZSBjbGF1c2UiIH0KICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCiAgICAgewpAQCAt NTUsNyArNTUsNyBAQCBiYXIgKGludCBhLCBpbnQgKmMsIGludCAqZCwgaW50ICplLCBpbnQg KmYpCiAgICAgICBbW29tcDo6ZGlyZWN0aXZlIChzY2FuLCBleGNsdXNpdmUgKGEpKSwgZ251 Ojpjb2xkXV0JCQkJLy8geyBkZy1lcnJvciAibXVzdCBiZSB0aGUgb25seSBzcGVjaWZpZWQg YXR0cmlidXRlIG9uIGEgc3RhdGVtZW50IiB9CiAJCQkJCQkJCQkJCS8vIHsgZGctZXJyb3Ig IiNwcmFnbWEgb21wIHNjYW4iICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KICAgICAgIGEg Kz0gY1tpXTsJCQkJCQkJCQkvLyB7IGRnLWVycm9yICJleHBlY3RlZCIgfQotICAgIH0JCQkJ CQkJCQkJCS8vIHsgZGctZXJyb3IgImV4cGVjdGVkIiB9CisgICAgfQogICBbW29tcDo6ZGly ZWN0aXZlIChwYXJhbGxlbCBmb3IgcmVkdWN0aW9uIChpbnNjYW4sICs6IGEpKV1dCQkJCS8v IHsgZGctZXJyb3IgIidhJyBzcGVjaWZpZWQgaW4gJ2luc2NhbicgJ3JlZHVjdGlvbicgY2xh dXNlIGJ1dCBub3QgaW4gJ3NjYW4nIGRpcmVjdGl2ZSBjbGF1c2UiIH0KICAgZm9yIChpID0g MDsgaSA8IDY0OyBpKyspCiAgICAgewpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9y dHJhbi5kZy9nb21wL2xvb3AtMi5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dv bXAvbG9vcC0yLmY5MAppbmRleCAyZDgzZTNhNzUwNy4uOTJhMTdiMjQ3YmIgMTAwNjQ0Ci0t LSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9sb29wLTIuZjkwCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9sb29wLTIuZjkwCkBAIC0xOCwyMyArMTgs MjMgQEAgZG8gaSA9IDEsIDY0CiBlbmQgZG8KIAogISRvbXAgbG9vcCByZWR1Y3Rpb24oaW5z Y2FuLCArOiByKSAgISB7IGRnLWVycm9yICInaW5zY2FuJyBSRURVQ1RJT04gY2xhdXNlIG9u IGNvbnN0cnVjdCBvdGhlciB0aGFuIERPLCBTSU1ELCBETyBTSU1ELCBQQVJBTExFTCBETywg UEFSQUxMRUwgRE8gU0lNRCIgfQotICAhIHsgZGctZXJyb3IgIldpdGggSU5TQ0FOIGF0IC4x LiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1 Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQorICAh IHsgZGctZXJyb3IgIldpdGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdp dGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQogZG8gaSA9IDEsIDY0CiBlbmQgZG8KICEkb21w IHRlYW1zIGxvb3AgcmVkdWN0aW9uKGluc2NhbiwgKzogcikgICEgeyBkZy1lcnJvciAiJ2lu c2NhbicgUkVEVUNUSU9OIGNsYXVzZSBvbiBjb25zdHJ1Y3Qgb3RoZXIgdGhhbiBETywgU0lN RCwgRE8gU0lNRCwgUEFSQUxMRUwgRE8sIFBBUkFMTEVMIERPIFNJTUQiIH0KLSAgISB7IGRn LWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4u T01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZC1ibG9jay1zZXF1ZW5jZXMiICIiIHsg dGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAgISB7IGRnLWVycm9yICJXaXRoIElOU0NBTiBhdCAu MS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4uT01QIFNDQU4gYmV0d2VlbiB0d28gc3Ry dWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KIGRv IGkgPSAxLCA2NAogZW5kIGRvCiAhJG9tcCBwYXJhbGxlbCBsb29wIHJlZHVjdGlvbihpbnNj YW4sICs6IHIpICEgeyBkZy1lcnJvciAiJ2luc2NhbicgUkVEVUNUSU9OIGNsYXVzZSBvbiBj b25zdHJ1Y3Qgb3RoZXIgdGhhbiBETywgU0lNRCwgRE8gU0lNRCwgUEFSQUxMRUwgRE8sIFBB UkFMTEVMIERPIFNJTUQiIH0KLSAgISB7IGRnLWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4s IGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4uT01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0 dXJlZC1ibG9jay1zZXF1ZW5jZXMiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KKyAgISB7 IGRnLWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRo IC4uT01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiICIi IHsgdGFyZ2V0ICotKi0qIH0gLi0xIH0KIGRvIGkgPSAxLCA2NAogZW5kIGRvCiAhJG9tcCB0 YXJnZXQgdGVhbXMgbG9vcCByZWR1Y3Rpb24oaW5zY2FuLCArOiByKSAgISB7IGRnLWVycm9y ICInaW5zY2FuJyBSRURVQ1RJT04gY2xhdXNlIG9uIGNvbnN0cnVjdCBvdGhlciB0aGFuIERP LCBTSU1ELCBETyBTSU1ELCBQQVJBTExFTCBETywgUEFSQUxMRUwgRE8gU0lNRCIgfQotICAh IHsgZGctZXJyb3IgIldpdGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdp dGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQorICAhIHsgZGctZXJyb3IgIldpdGggSU5TQ0FO IGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3 byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEg fQogZG8gaSA9IDEsIDY0CiBlbmQgZG8KICEkb21wIHRhcmdldCBwYXJhbGxlbCBsb29wIHJl ZHVjdGlvbihpbnNjYW4sICs6IHIpICAhIHsgZGctZXJyb3IgIidpbnNjYW4nIFJFRFVDVElP TiBjbGF1c2Ugb24gY29uc3RydWN0IG90aGVyIHRoYW4gRE8sIFNJTUQsIERPIFNJTUQsIFBB UkFMTEVMIERPLCBQQVJBTExFTCBETyBTSU1EIiB9Ci0gICEgeyBkZy1lcnJvciAiV2l0aCBJ TlNDQU4gYXQgLjEuLCBleHBlY3RlZCBsb29wIGJvZHkgd2l0aCAuLk9NUCBTQ0FOIGJldHdl ZW4gdHdvIHN0cnVjdHVyZWQtYmxvY2stc2VxdWVuY2VzIiAiIiB7IHRhcmdldCAqLSotKiB9 IC4tMSB9CisgICEgeyBkZy1lcnJvciAiV2l0aCBJTlNDQU4gYXQgLjEuLCBleHBlY3RlZCBs b29wIGJvZHkgd2l0aCAuLk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVyZWQgYmxvY2sg c2VxdWVuY2VzIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9CiBkbyBpID0gMSwgNjQKIGVu ZCBkbwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvcmVk dWN0aW9uNS5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvcmVkdWN0aW9u NS5mOTAKaW5kZXggNDRmODlkODRjNzguLjg1NDkxZjBiNjQzIDEwMDY0NAotLS0gYS9nY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvcmVkdWN0aW9uNS5mOTAKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3JlZHVjdGlvbjUuZjkwCkBAIC0yMSw3ICsyMSw3 IEBAIGVuZCBkbwogISRvbXAgZW5kIHRhc2sgICEgeyBkZy1lcnJvciAiVW5leHBlY3RlZCAh Lk9NUCBFTkQgVEFTSyBzdGF0ZW1lbnQiIH0KIAogISRvbXAgdGFza2xvb3AgcmVkdWN0aW9u KGluc2NhbiwrOmEpIGluX3JlZHVjdGlvbigrOmIpICEgeyBkZy1lcnJvciAiJ2luc2Nhbicg UkVEVUNUSU9OIGNsYXVzZSBvbiBjb25zdHJ1Y3Qgb3RoZXIgdGhhbiBETywgU0lNRCwgRE8g U0lNRCwgUEFSQUxMRUwgRE8sIFBBUkFMTEVMIERPIFNJTUQiIH0KLSAgISB7IGRnLWVycm9y ICIzNDogV2l0aCBJTlNDQU4gYXQgLjEuLCBleHBlY3RlZCBsb29wIGJvZHkgd2l0aCAuLk9N UCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVyZWQtYmxvY2stc2VxdWVuY2VzIiAiIiB7IHRh cmdldCAqLSotKiB9IC4tMSB9CisgICEgeyBkZy1lcnJvciAiMzQ6IFdpdGggSU5TQ0FOIGF0 IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBz dHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQog ICAhIHsgZGctZXJyb3IgIidpbnNjYW4nIGFuZCBub24tJ2luc2NhbicgJ3JlZHVjdGlvbicg Y2xhdXNlcyBvbiB0aGUgc2FtZSBjb25zdHJ1Y3QiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0y IH0KIGRvIGk9MSwxMAogICBhID0gYSArIDEKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUv Z2ZvcnRyYW4uZGcvZ29tcC9yZWR1Y3Rpb242LmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29tcC9yZWR1Y3Rpb242LmY5MAppbmRleCA2YmY2ODUxMzBhYi4uMzIxZjA5NmUw MmIgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9yZWR1Y3Rp b242LmY5MAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvcmVkdWN0aW9u Ni5mOTAKQEAgLTQsMTMgKzQsMTMgQEAgaW1wbGljaXQgbm9uZQogaW50ZWdlciA6OiBhLCBi LCBpCiBhID0gMAogCi0hJG9tcCBzaW1kIHJlZHVjdGlvbihpbnNjYW4sKzphKSAgISB7IGRn LWVycm9yICIzMDogV2l0aCBJTlNDQU4gYXQgLjEuLCBleHBlY3RlZCBsb29wIGJvZHkgd2l0 aCAuLk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVyZWQtYmxvY2stc2VxdWVuY2VzIiB9 CishJG9tcCBzaW1kIHJlZHVjdGlvbihpbnNjYW4sKzphKSAgISB7IGRnLWVycm9yICIzMDog V2l0aCBJTlNDQU4gYXQgLjEuLCBleHBlY3RlZCBsb29wIGJvZHkgd2l0aCAuLk9NUCBTQ0FO IGJldHdlZW4gdHdvIHN0cnVjdHVyZWQgYmxvY2sgc2VxdWVuY2VzIiB9CiBkbyBpPTEsMTAK ICAgYSA9IGEgKyAxCiBlbmQgZG8KIAogISRvbXAgcGFyYWxsZWwKLSEkb21wIGRvIHJlZHVj dGlvbihpbnNjYW4sKzphKSAgISB7IGRnLWVycm9yICIyODogV2l0aCBJTlNDQU4gYXQgLjEu LCBleHBlY3RlZCBsb29wIGJvZHkgd2l0aCAuLk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVj dHVyZWQtYmxvY2stc2VxdWVuY2VzIiB9CishJG9tcCBkbyByZWR1Y3Rpb24oaW5zY2FuLCs6 YSkgICEgeyBkZy1lcnJvciAiMjg6IFdpdGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9v cCBib2R5IHdpdGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNl cXVlbmNlcyIgfQogZG8gaT0xLDEwCiAgIGEgPSBhICsgMQogZW5kIGRvCmRpZmYgLS1naXQg YS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvc2Nhbi0xLmY5MCBiL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9zY2FuLTEuZjkwCmluZGV4IGY5MWM3ZmFlMDlkLi5h NGY3MTJmMGQyZiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21w L3NjYW4tMS5mOTAKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3NjYW4t MS5mOTAKQEAgLTE3Niw3ICsxNzYsNyBAQCBzdWJyb3V0aW5lIGY4IChjLCBkLCBlLCBmKQog ICB1c2UgbQogICBpbXBsaWNpdCBub25lCiAgIGludGVnZXIgaSwgYyg2NCksIGQoNjQpLCBl KDY0KSwgZig2NCkKLSAgISRvbXAgZG8gcmVkdWN0aW9uIChpbnNjYW4sICs6IGEsIGIpCSAg ISB7IGRnLWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3 aXRoIC4uT01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZC1ibG9jay1zZXF1ZW5jZXMi IH0KKyAgISRvbXAgZG8gcmVkdWN0aW9uIChpbnNjYW4sICs6IGEsIGIpCSAgISB7IGRnLWVy cm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4uT01Q IFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiIH0KICAgZG8g aSA9IDEsIDY0CiAgICAgYmxvY2sKICAgICAgIGEgPSBhICsgYyhpKQpAQCAtMTg5LDcgKzE4 OSw3IEBAIHN1YnJvdXRpbmUgZjggKGMsIGQsIGUsIGYpCiAgICAgZW5kIGJsb2NrCiAgIGVu ZCBkbwogCi0gICEkb21wIGRvIHJlZHVjdGlvbiAoaW5zY2FuLCArOiBhLCBiKSAgISB7IGRn LWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4u T01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZC1ibG9jay1zZXF1ZW5jZXMiIH0KKyAg ISRvbXAgZG8gcmVkdWN0aW9uIChpbnNjYW4sICs6IGEsIGIpICAhIHsgZGctZXJyb3IgIldp dGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBi ZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIgfQogICBkbyBpID0gMSwg NjQKICAgICBibG9jawogICAgICAgYSA9IGEgKyBjKGkpCkBAIC0yMDcsMTIgKzIwNywxMSBA QCBzdWJyb3V0aW5lIGY5CiAgIHVzZSBtCiAgIGltcGxpY2l0IG5vbmUKICAgaW50ZWdlciBp Ci0hIFRoZSBmaXJzdCBlcnJvciAoZXhpdCkgY2F1c2VzIHR3byBmb2xsb3ctdXAgZXJyb3Jz OgotICAhJG9tcCBzaW1kIHJlZHVjdGlvbiAoaW5zY2FuLCArOiBhKSAgISB7IGRnLWVycm9y ICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoIC4uT01QIFND QU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZC1ibG9jay1zZXF1ZW5jZXMiIH0KKyAgISRvbXAg c2ltZCByZWR1Y3Rpb24gKGluc2NhbiwgKzogYSkKICAgZG8gaSA9IDEsIDY0CiAgICAgaWYg KGkgPT0gMjMpICYKICAgICAgIGV4aXQgICEgeyBkZy1lcnJvciAiRVhJVCBzdGF0ZW1lbnQg YXQgLjEuIHRlcm1pbmF0aW5nIC4uT01QIERPIGxvb3AiIH0gKi8KLSAgICAhJG9tcCBzY2Fu IGV4Y2x1c2l2ZSAoYSkgISB7IGRnLWVycm9yICJVbmV4cGVjdGVkIC4uT01QIFNDQU4gYXQg LjEuIG91dHNpZGUgbG9vcCBjb25zdHJ1Y3Qgd2l0aCAnaW5zY2FuJyBSRURVQ1RJT04gY2xh dXNlIiB9CisgICAgISRvbXAgc2NhbiBleGNsdXNpdmUgKGEpICAhIHsgZGctd2FybmluZyAi IS5PTVAgU0NBTiBhdCAuMS4gd2l0aCB6ZXJvIGV4ZWN1dGFibGUgc3RhdGVtZW50cyBpbiBw cmVjZWRpbmcgc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZSIgfQogICAgIGEgPSBhICsgMQog ICBlbmQgZG8KIGVuZApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9n b21wL3NjYW4tOC5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvc2Nhbi04 LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYjcwNmJiYjZk NTcKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAv c2Nhbi04LmY5MApAQCAtMCwwICsxLDk2IEBACitpbnRlZ2VyIGZ1bmN0aW9uIHMxIChhMSwg YTIsIGEzKSByZXN1bHQocikKKyAgaW1wbGljaXQgbm9uZQorICBpbnRlZ2VyIDo6IGExLCBh MiwgYTMKKyAgaW50ZWdlciA6OiBpLCBqLCBrCisgIHByb2NlZHVyZShpbnRlZ2VyKSA6OiBp aWkKKyAgCisgIHIgPSAwCisgICEkb21wIHNpbWQgY29sbGFwc2UoMykgcmVkdWN0aW9uIChp bnNjYW4sICs6cikKKyAgZG8gaSA9IDEsIGExCisgICAgZG8gaiA9IDEsIGEyCisgICAgICBk byBrID0gMSwgYTMKKyAgICAgICAgISRvbXAgc2NhbiBleGNsdXNpdmUgKHIpICAhIHsgZGct d2FybmluZyAiIS5PTVAgU0NBTiBhdCAuMS4gd2l0aCB6ZXJvIGV4ZWN1dGFibGUgc3RhdGVt ZW50cyBpbiBwcmVjZWRpbmcgc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZSIgfQorICAgICAg ICBjYWxsIGYxICgyLCBrLCByKQorICAgICAgZW5kIGRvCisgICAgZW5kIGRvIAorICBlbmQg ZG8KKworICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIHJlZHVjdGlvbiAoaW5zY2FuLCArOnIp CisgIGRvIGkgPSAxLCBhMQorICAgIGRvIGogPSAxLCBhMgorICAgICAgZG8gayA9IDEsIGEz CisgICAgICAgIHIgPSByICsgaWlpIChpLCBqLCBrKQorICAgICAgICAhJG9tcCBzY2FuIGV4 Y2x1c2l2ZSAocikgICEgeyBkZy13YXJuaW5nICIhLk9NUCBTQ0FOIGF0IC4xLiB3aXRoIHpl cm8gZXhlY3V0YWJsZSBzdGF0ZW1lbnRzIGluIHN1Y2NlZWRpbmcgc3RydWN0dXJlZCBibG9j ayBzZXF1ZW5jZSIgfQorICAgICAgZW5kIGRvCisgICAgZW5kIGRvIAorICBlbmQgZG8KKwor ICAhJG9tcCBzaW1kIGNvbGxhcHNlKDMpIHJlZHVjdGlvbiAoaW5zY2FuLCArOnIpCisgIGRv IGkgPSAxLCBhMQorICAgIGRvIGogPSAxLCBhMgorICAgICAgZG8gayA9IDEsIGEzCisgICAg ICAgICEkb21wIHNjYW4gaW5jbHVzaXZlIChyKQorICAgICAgICAgICAhIHsgZGctd2Fybmlu ZyAiIS5PTVAgU0NBTiBhdCAuMS4gd2l0aCB6ZXJvIGV4ZWN1dGFibGUgc3RhdGVtZW50cyBp biBwcmVjZWRpbmcgc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZSIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfQorICAgICAgICAgICAhIHsgZGctd2FybmluZyAiIS5PTVAgU0NBTiBhdCAu MS4gd2l0aCB6ZXJvIGV4ZWN1dGFibGUgc3RhdGVtZW50cyBpbiBzdWNjZWVkaW5nIHN0cnVj dHVyZWQgYmxvY2sgc2VxdWVuY2UiICIiIHsgdGFyZ2V0ICotKi0qIH0gLi0yIH0KKyAgICAg IGVuZCBkbworICAgIGVuZCBkbyAKKyAgZW5kIGRvCitlbmQgZnVuY3Rpb24KKworaW50ZWdl ciBmdW5jdGlvbiBzMiAoYTEsIGEyLCBhMykgcmVzdWx0KHIpCisgIGltcGxpY2l0IG5vbmUK KyAgaW50ZWdlciA6OiBhMSwgYTIsIGEzCisgIGludGVnZXIgOjogaSwgaiwgaworICBwcm9j ZWR1cmUoaW50ZWdlcikgOjogaWlpCisgIAorICByID0gMAorICAhJG9tcCBzaW1kIGNvbGxh cHNlKDMpIHJlZHVjdGlvbiAoaW5zY2FuLCArOnIpICAhIHsgZGctZXJyb3IgIldpdGggSU5T Q0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggIS5PTVAgU0NBTiBiZXR3ZWVu IHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIgfQorICBkbyBpID0gMSwgYTEKKyAg ICBkbyBqID0gMSwgYTIKKyAgICAgIGRvIGsgPSAxLCBhMworICAgICAgICBjYWxsIGYxICgy LCBrLCByKQorICAgICAgICByID0gciArIGlpaSAoaSwgaiwgaykKKyAgICAgIGVuZCBkbwor ICAgIGVuZCBkbyAKKyAgZW5kIGRvCisKKyAgciA9IDAKKyAgISRvbXAgc2ltZCBjb2xsYXBz ZSgzKSByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKSAgISB7IGRnLWVycm9yICJXaXRoIElOU0NB TiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoICEuT01QIFNDQU4gYmV0d2VlbiB0 d28gc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiIH0KKyAgZG8gaSA9IDEsIGExCisgICAg ZG8gaiA9IDEsIGEyCisgICAgICBkbyBrID0gMSwgYTMKKyAgICAgIGVuZCBkbworICAgIGVu ZCBkbyAKKyAgZW5kIGRvCisKKyAgciA9IDAKKyAgISRvbXAgc2ltZCBjb2xsYXBzZSgzKSBy ZWR1Y3Rpb24gKGluc2NhbiwgKzpyKQorICBkbyBpID0gMSwgYTEKKyAgICBkbyBqID0gMSwg YTIKKyAgICAgIGRvIGsgPSAxLCBhMworICAgICAgICBjYWxsIGYxICgyLCBrLCByKQorICAg ICAgICAhJG9tcCBzY2FuIGluY2x1c2l2ZSAocikKKyAgICAgICAgISRvbXAgc2NhbiBpbmNs dXNpdmUgKHIpICAhIHsgZGctZXJyb3IgIlVuZXhwZWN0ZWQgIS5PTVAgU0NBTiBhdCAuMS4g b3V0c2lkZSBsb29wIGNvbnN0cnVjdCB3aXRoICdpbnNjYW4nIFJFRFVDVElPTiBjbGF1c2Ui IH0KKyAgICAgICAgciA9IHIgKyBpaWkgKGksIGosIGspCisgICAgICBlbmQgZG8KKyAgICBl bmQgZG8gCisgIGVuZCBkbworCisgICEkb21wIHNjYW4gaW5jbHVzaXZlIChyKSAgISB7IGRn LWVycm9yICJVbmV4cGVjdGVkICEuT01QIFNDQU4gYXQgLjEuIG91dHNpZGUgbG9vcCBjb25z dHJ1Y3Qgd2l0aCAnaW5zY2FuJyBSRURVQ1RJT04gY2xhdXNlIiB9CisKKyAgciA9IDAKKyAg ISRvbXAgc2ltZCBjb2xsYXBzZSgzKSByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKSAgISB7IGRn LWVycm9yICJXaXRoIElOU0NBTiBhdCAuMS4sIGV4cGVjdGVkIGxvb3AgYm9keSB3aXRoICEu T01QIFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiIH0KKyAg ZG8gaSA9IDEsIGExCisgICAgZG8gaiA9IDEsIGEyCisgICAgICBkbyBrID0gMSwgYTMKKyAg ICAgICAgY2FsbCBmMSAoMiwgaywgcikKKyAgICAgICAgYmxvY2sKKyAgICAgICAgICAhJG9t cCBzY2FuIGluY2x1c2l2ZSAocikgICEgeyBkZy1lcnJvciAiVW5leHBlY3RlZCAhLk9NUCBT Q0FOIGF0IC4xLiBvdXRzaWRlIGxvb3AgY29uc3RydWN0IHdpdGggJ2luc2NhbicgUkVEVUNU SU9OIGNsYXVzZSIgfQorICAgICAgICBlbmQgYmxvY2sKKyAgICAgICAgciA9IHIgKyBpaWkg KGksIGosIGspCisgICAgICBlbmQgZG8KKyAgICBlbmQgZG8gCisgIGVuZCBkbworCisKK2Vu ZCBmdW5jdGlvbgpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21w L3Rhc2tsb29wLTIuZjkwIGIvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3Rhc2ts b29wLTIuZjkwCmluZGV4IDQxYjRkNmQyMTkxLi5kMjAwYTkzYmI0ZiAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL3Rhc2tsb29wLTIuZjkwCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC90YXNrbG9vcC0yLmY5MApAQCAtMjEsMjQg KzIxLDI0IEBAIGRvIGkgPSAxLCA2NAogZW5kIGRvCiAKICEkb21wIHRhc2tsb29wIHJlZHVj dGlvbihpbnNjYW4sICs6IHIpICAhIHsgZGctZXJyb3IgIidpbnNjYW4nIFJFRFVDVElPTiBj bGF1c2Ugb24gY29uc3RydWN0IG90aGVyIHRoYW4gRE8sIFNJTUQsIERPIFNJTUQsIFBBUkFM TEVMIERPLCBQQVJBTExFTCBETyBTSU1EIiB9Ci1kbyBpID0gMSwgNjQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgISB7IGRnLWVycm9yICJPTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1 Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQorZG8g aSA9IDEsIDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICEgeyBkZy1lcnJvciAiT01Q IFNDQU4gYmV0d2VlbiB0d28gc3RydWN0dXJlZCBibG9jayBzZXF1ZW5jZXMiICIiIHsgdGFy Z2V0ICotKi0qIH0gLi0xIH0KIGVuZCBkbwogISRvbXAgdGFza2xvb3Agc2ltZCByZWR1Y3Rp b24oaW5zY2FuLCArOiByKSAgISB7IGRnLWVycm9yICInaW5zY2FuJyBSRURVQ1RJT04gY2xh dXNlIG9uIGNvbnN0cnVjdCBvdGhlciB0aGFuIERPLCBTSU1ELCBETyBTSU1ELCBQQVJBTExF TCBETywgUEFSQUxMRUwgRE8gU0lNRCIgfQotZG8gaSA9IDEsIDY0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgISB7IGRnLWVycm9yICJPTVAgU0NBTiBiZXR3ZWVuIHR3byBz dHJ1Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQor ZG8gaSA9IDEsIDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISB7IGRnLWVy cm9yICJPTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQogZW5kIGRvCiAhJG9tcCBtYXN0ZXIgdGFza2xv b3AgcmVkdWN0aW9uKGluc2NhbiwgKzogcikgISB7IGRnLWVycm9yICInaW5zY2FuJyBSRURV Q1RJT04gY2xhdXNlIG9uIGNvbnN0cnVjdCBvdGhlciB0aGFuIERPLCBTSU1ELCBETyBTSU1E LCBQQVJBTExFTCBETywgUEFSQUxMRUwgRE8gU0lNRCIgfQotICAhIHsgZGctZXJyb3IgIldp dGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBi ZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0q LSogfSAuLTEgfQorICAhIHsgZGctZXJyb3IgIldpdGggSU5TQ0FOIGF0IC4xLiwgZXhwZWN0 ZWQgbG9vcCBib2R5IHdpdGggLi5PTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJs b2NrIHNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQogZG8gaSA9IDEsIDY0 CiBlbmQgZG8KICEkb21wIG1hc3RlciB0YXNrbG9vcCBzaW1kIHJlZHVjdGlvbihpbnNjYW4s ICs6IHIpICAhIHsgZGctZXJyb3IgIidpbnNjYW4nIFJFRFVDVElPTiBjbGF1c2Ugb24gY29u c3RydWN0IG90aGVyIHRoYW4gRE8sIFNJTUQsIERPIFNJTUQsIFBBUkFMTEVMIERPLCBQQVJB TExFTCBETyBTSU1EIiB9Ci0gICEgeyBkZy1lcnJvciAiV2l0aCBJTlNDQU4gYXQgLjEuLCBl eHBlY3RlZCBsb29wIGJvZHkgd2l0aCAuLk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVy ZWQtYmxvY2stc2VxdWVuY2VzIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9CisgICEgeyBk Zy1lcnJvciAiV2l0aCBJTlNDQU4gYXQgLjEuLCBleHBlY3RlZCBsb29wIGJvZHkgd2l0aCAu Lk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVyZWQgYmxvY2sgc2VxdWVuY2VzIiAiIiB7 IHRhcmdldCAqLSotKiB9IC4tMSB9CiBkbyBpID0gMSwgNjQKIGVuZCBkbwogISRvbXAgcGFy YWxsZWwgbWFzdGVyIHRhc2tsb29wIHJlZHVjdGlvbihpbnNjYW4sICs6IHIpICAhIHsgZGct ZXJyb3IgIidpbnNjYW4nIFJFRFVDVElPTiBjbGF1c2Ugb24gY29uc3RydWN0IG90aGVyIHRo YW4gRE8sIFNJTUQsIERPIFNJTUQsIFBBUkFMTEVMIERPLCBQQVJBTExFTCBETyBTSU1EIiB9 Ci1kbyBpID0gMSwgNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhIHsgZGct ZXJyb3IgIk9NUCBTQ0FOIGJldHdlZW4gdHdvIHN0cnVjdHVyZWQtYmxvY2stc2VxdWVuY2Vz IiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9CitkbyBpID0gMSwgNjQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAhIHsgZGctZXJyb3IgIk9NUCBTQ0FOIGJldHdlZW4gdHdv IHN0cnVjdHVyZWQgYmxvY2sgc2VxdWVuY2VzIiAiIiB7IHRhcmdldCAqLSotKiB9IC4tMSB9 CiBlbmQgZG8KICEkb21wIHBhcmFsbGVsIG1hc3RlciB0YXNrbG9vcCBzaW1kIHJlZHVjdGlv bihpbnNjYW4sICs6IHIpICAgISB7IGRnLWVycm9yICInaW5zY2FuJyBSRURVQ1RJT04gY2xh dXNlIG9uIGNvbnN0cnVjdCBvdGhlciB0aGFuIERPLCBTSU1ELCBETyBTSU1ELCBQQVJBTExF TCBETywgUEFSQUxMRUwgRE8gU0lNRCIgfQotZG8gaSA9IDEsIDY0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgISB7IGRnLWVycm9yICJPTVAgU0NBTiBiZXR3ZWVuIHR3byBz dHJ1Y3R1cmVkLWJsb2NrLXNlcXVlbmNlcyIgIiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQor ZG8gaSA9IDEsIDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgISB7IGRnLWVy cm9yICJPTVAgU0NBTiBiZXR3ZWVuIHR3byBzdHJ1Y3R1cmVkIGJsb2NrIHNlcXVlbmNlcyIg IiIgeyB0YXJnZXQgKi0qLSogfSAuLTEgfQogZW5kIGRvCiBlbmQKIApkaWZmIC0tZ2l0IGEv bGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jLWMrKy1jb21tb24vc2Nhbi0xLmMgYi9saWJn b21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9zY2FuLTEuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZDE5NTFhMzQ2OTYKLS0tIC9kZXYvbnVs bAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMtYysrLWNvbW1vbi9zY2FuLTEu YwpAQCAtMCwwICsxLDY4IEBACisjZGVmaW5lIE4gMzAKKyNkZWZpbmUgTSAzCisKK2ludCBh W05dW01dLCBiW05dW01dLCBjW05dW01dOworCitpbnQKK21haW4oKQoreworICBpbnQgeCwg eSwgc2hpZnQ7CisgIGludCBqID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKysp CisgICAgeworICAgICAgYVtpXVswXSA9IChpKzEpKjMyOworICAgICAgYVtpXVsxXSA9IChp KzEpKjE3OworICAgICAgYVtpXVsyXSA9IChpKzEpKjExOworICAgICAgYltpXVswXSA9IChp KzEpKjc7CisgICAgICBiW2ldWzFdID0gKGkrMSkqNTsKKyAgICAgIGJbaV1bMl0gPSAoaSsx KSozOworICAgIH0KKworICB4ID0gMDsKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yIHNp bWQgY29sbGFwc2UoMikgcmVkdWN0aW9uKGluc2NhbiwrOiB4KSBwcml2YXRlKHNoaWZ0KQor ICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKKyAgICBmb3IgKGludCBqID0gMDsgaiA8 IE07IGorKykKKyAgICAgIHsKKwl4ICs9IGFbaV1bal07CisJeCArPSBiW2ldW2pdOworICAg ICAgICAjcHJhZ21hIG9tcCBzY2FuIGluY2x1c2l2ZSh4KQorICAgICAgICBzaGlmdCA9IGkg KyAyOSpqOworICAgICAgICBjW2ldW2pdID0geCArIHNoaWZ0OworICAgICAgfQorCisgIHkg PSAwOworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKKyAgICBmb3IgKGludCBqID0g MDsgaiA8IE07IGorKykKKyAgICAgIHsKKwl5ICs9IGFbaV1bal0gKyBiW2ldW2pdOworCWlm IChjW2ldW2pdICE9IHkgKyBpICsgMjkqaikKKwkgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAg ICAgIH0KKyAgaWYgKHggIT0geSkKKyAgICBfX2J1aWx0aW5fYWJvcnQgKCk7CisKKyAgeCA9 IDA7CisgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvciBzaW1kIGNvbGxhcHNlKDIpIHJlZHVj dGlvbihpbnNjYW4sKzogeCkgcHJpdmF0ZShzaGlmdCkKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCBOOyBpKyspCisgICAgZm9yIChpbnQgaiA9IDA7IGogPCBNOyBqKyspCisgICAgICB7CisJ c2hpZnQgPSBpICsgMjkqajsKKwljW2ldW2pdID0geCArIHNoaWZ0OworCSNwcmFnbWEgb21w IHNjYW4gZXhjbHVzaXZlKHgpCisJeCArPSBhW2ldW2pdOworCXggKz0gYltpXVtqXTsKKyAg ICAgIH0KKworICB5ID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisgICAg Zm9yIChpbnQgaiA9IDA7IGogPCBNOyBqKyspCisgICAgICB7CisJaWYgKGNbaV1bal0gIT0g eSArIGkgKyAyOSpqKQorCSAgX19idWlsdGluX2Fib3J0ICgpOworCXkgKz0gYVtpXVtqXSAr IGJbaV1bal07CisgICAgICB9CisgIGlmICh4ICE9IHkpCisgICAgX19idWlsdGluX2Fib3J0 ICgpOworCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUv bGliZ29tcC5jL3NjYW4tMjMuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9zY2Fu LTIzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU3NjgxYWQx YzM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL3Nj YW4tMjMuYwpAQCAtMCwwICsxLDEyMSBAQAorLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10 YXJnZXQgc2l6ZTMycGx1cyB9ICovCisvKiBTYW1lIGFzIHNjYW4tOS5jLCBpbnN0ZWFkIG9m IHVzaW5nIHsgLi4uIH0gaXQgc2ltcGx5IHVzZXMgbXVsdGlwbGUKKyAgIGV4ZWN1dGFibGUg c3RtdCBiZWZvcmUgJ29tcCBzY2FuJy4gICovCisKK2V4dGVybiB2b2lkIGFib3J0ICh2b2lk KTsKK2ludCByLCBhWzEwMjRdLCBiWzEwMjRdLCB4LCB5LCB6OworCitfX2F0dHJpYnV0ZV9f KChub2lwYSkpIHZvaWQKK2ZvbyAoaW50ICphLCBpbnQgKmIpCit7CisgICNwcmFnbWEgb21w IGZvciByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKSBsYXN0cHJpdmF0ZSAoY29uZGl0aW9uYWw6 IHopIGZpcnN0cHJpdmF0ZSAoeCkgcHJpdmF0ZSAoeSkKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCAxMDI0OyBpKyspCisgICAgeworICAgICAgeSA9IGFbaV07CisgICAgICByICs9IHkgKyB4 ICsgMTI7CisgICAgICAjcHJhZ21hIG9tcCBzY2FuIGluY2x1c2l2ZShyKQorICAgICAgYltp XSA9IHI7CisgICAgICBpZiAoKGkgJiAxKSA9PSAwICYmIGkgPCA5MzcpCisgICAgICAgIHog PSByOworICAgIH0KK30KKworX19hdHRyaWJ1dGVfXygobm9pcGEpKSBpbnQKK2JhciAodm9p ZCkKK3sKKyAgaW50IHMgPSAwOworICAjcHJhZ21hIG9tcCBwYXJhbGxlbAorICAjcHJhZ21h IG9tcCBmb3IgcmVkdWN0aW9uIChpbnNjYW4sICs6cykgZmlyc3Rwcml2YXRlICh4KSBwcml2 YXRlICh5KSBsYXN0cHJpdmF0ZSAoeikKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCAxMDI0OyBp KyspCisgICAgeworICAgICAgeSA9IDIgKiBhW2ldOyBzICs9IHk7IHogPSB5OworICAgICAg I3ByYWdtYSBvbXAgc2NhbiBpbmNsdXNpdmUocykKKyAgICAgIHkgPSBzOyBiW2ldID0geSAr IHggKyAxMjsKKyAgICB9CisgIHJldHVybiBzOworfQorCitfX2F0dHJpYnV0ZV9fKChub2lw YSkpIHZvaWQKK2JheiAoaW50ICphLCBpbnQgKmIpCit7CisgICNwcmFnbWEgb21wIHBhcmFs bGVsIGZvciByZWR1Y3Rpb24gKGluc2NhbiwgKzpyKSBmaXJzdHByaXZhdGUgKHgpIGxhc3Rw cml2YXRlICh4KQorICBmb3IgKGludCBpID0gMDsgaSA8IDEwMjQ7IGkrKykKKyAgICB7Cisg ICAgICByICs9IGFbaV0gKyB4ICsgMTI7IGlmIChpID09IDEwMjMpIHggPSAyOTsKKyAgICAg ICNwcmFnbWEgb21wIHNjYW4gaW5jbHVzaXZlKHIpCisgICAgICBiW2ldID0gcjsKKyAgICB9 Cit9CisKK19fYXR0cmlidXRlX18oKG5vaXBhKSkgaW50CitxdXggKHZvaWQpCit7CisgIGlu dCBzID0gMDsKKyAgI3ByYWdtYSBvbXAgcGFyYWxsZWwgZm9yIHJlZHVjdGlvbiAoaW5zY2Fu LCArOnMpIGxhc3Rwcml2YXRlIChjb25kaXRpb25hbDogeCwgeSkKKyAgZm9yIChpbnQgaSA9 IDA7IGkgPCAxMDI0OyBpKyspCisgICAgeworICAgICAgcyArPSAyICogYVtpXTsgaWYgKChh W2ldICYgMSkgPT0gMSAmJiBpIDwgODI1KSB4ID0gYVtpXTsKKyAgICAgICNwcmFnbWEgb21w IHNjYW4gaW5jbHVzaXZlKHMpCisgICAgICBiW2ldID0gczsgaWYgKChhW2ldICYgMSkgPT0g MCAmJiBpIDwgODI5KSB5ID0gYVtpXTsKKyAgICB9CisgIHJldHVybiBzOworfQorCitpbnQK K21haW4gKCkKK3sKKyAgaW50IHMgPSAwOworICB4ID0gLTEyOworICBmb3IgKGludCBpID0g MDsgaSA8IDEwMjQ7ICsraSkKKyAgICB7CisgICAgICBhW2ldID0gaTsKKyAgICAgIGJbaV0g PSAtMTsKKyAgICAgIGFzbSAoIiIgOiAiK2ciIChpKSk7CisgICAgfQorICAjcHJhZ21hIG9t cCBwYXJhbGxlbAorICBmb28gKGEsIGIpOworICBpZiAociAhPSAxMDI0ICogMTAyMyAvIDIg fHwgeCAhPSAtMTIgfHwgeiAhPSBiWzkzNl0pCisgICAgYWJvcnQgKCk7CisgIGZvciAoaW50 IGkgPSAwOyBpIDwgMTAyNDsgKytpKQorICAgIHsKKyAgICAgIHMgKz0gaTsKKyAgICAgIGlm IChiW2ldICE9IHMpCisJYWJvcnQgKCk7CisgICAgICBlbHNlCisJYltpXSA9IDI1OworICAg IH0KKyAgaWYgKGJhciAoKSAhPSAxMDI0ICogMTAyMyB8fCB4ICE9IC0xMiB8fCB6ICE9IDIg KiAxMDIzKQorICAgIGFib3J0ICgpOworICBzID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCAxMDI0OyArK2kpCisgICAgeworICAgICAgcyArPSAyICogaTsKKyAgICAgIGlmIChiW2ld ICE9IHMpCisJYWJvcnQgKCk7CisgICAgICBlbHNlCisJYltpXSA9IC0xOworICAgIH0KKyAg ciA9IDA7CisgIGJheiAoYSwgYik7CisgIGlmIChyICE9IDEwMjQgKiAxMDIzIC8gMiB8fCB4 ICE9IDI5KQorICAgIGFib3J0ICgpOworICBzID0gMDsKKyAgZm9yIChpbnQgaSA9IDA7IGkg PCAxMDI0OyArK2kpCisgICAgeworICAgICAgcyArPSBpOworICAgICAgaWYgKGJbaV0gIT0g cykKKwlhYm9ydCAoKTsKKyAgICAgIGVsc2UKKwliW2ldID0gLTI1OworICAgIH0KKyAgaWYg KHF1eCAoKSAhPSAxMDI0ICogMTAyMyB8fCB4ICE9IDgyMyB8fCB5ICE9IDgyOCkKKyAgICBh Ym9ydCAoKTsKKyAgcyA9IDA7CisgIGZvciAoaW50IGkgPSAwOyBpIDwgMTAyNDsgKytpKQor ICAgIHsKKyAgICAgIHMgKz0gMiAqIGk7CisgICAgICBpZiAoYltpXSAhPSBzKQorCWFib3J0 ICgpOworICAgIH0KKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmZvcnRyYW4vc2Nhbi0yLmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xp YmdvbXAuZm9ydHJhbi9zY2FuLTIuZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi4yODE1ZWM3NmM4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVz dHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9zY2FuLTIuZjkwCkBAIC0wLDAgKzEsNTkgQEAKK2lt cGxpY2l0IG5vbmUKK2ludGVnZXIsIHBhcmFtZXRlciA6OiBOID0gMzAKK2ludGVnZXIsIHBh cmFtZXRlciA6OiBNID0gMworCitpbnRlZ2VyIDo6IGEoTSxOKSwgYihNLE4pLCBjKE0sTikK K2ludGVnZXIgOjogeCwgeSwgc2hpZnQKK2ludGVnZXIgOjogaSwgagorCitkbyBpID0gMSwg TgorICBhKDEsaSkgPSBpKjMyCisgIGEoMixpKSA9IGkqMTcKKyAgYSgzLGkpID0gaSoxMQor ICBiKDEsaSkgPSBpKjcKKyAgYigyLGkpID0gaSo1CisgIGIoMyxpKSA9IGkqMworZW5kIGRv CisKK3ggPSAwCishJG9tcCBwYXJhbGxlbCBkbyBzaW1kIGNvbGxhcHNlKDIpIHJlZHVjdGlv bihpbnNjYW4sKzogeCkgcHJpdmF0ZShzaGlmdCkKK2RvIGkgPSAxLCBOCisgIGRvIGogPSAx LCBNCisgICAgeCA9IHggKyBhKGosaSkKKyAgICB4ID0geCArIGIoaixpKQorICAgICEkb21w IHNjYW4gaW5jbHVzaXZlKHgpCisgICAgc2hpZnQgPSBpICsgMjkqagorICAgIGMoaixpKSA9 IHggKyBzaGlmdDsKKyAgZW5kIGRvCitlbmQgZG8KKworeSA9IDAKK2RvIGkgPSAxLCBOCisg IGRvIGogPSAxLCBNCisgICAgeSA9IHkgKyAgYShqLGkpICsgYihqLGkpCisgICAgaWYgKGMo aixpKSAvPSB5ICsgaSArIDI5KmopIGVycm9yIHN0b3AgMQorICBlbmQgZG8KK2VuZCBkbwor aWYgKHggLz0geSkgZXJyb3Igc3RvcCAyCisKK3ggPSAwCishJG9tcCBwYXJhbGxlbCBkbyBz aW1kIGNvbGxhcHNlKDIpIHJlZHVjdGlvbihpbnNjYW4sKzogeCkgcHJpdmF0ZShzaGlmdCkK K2RvIGkgPSAxLCBOCisgIGRvIGogPSAxLCBNCisgICAgc2hpZnQgPSBpICsgMjkqagorICAg IGMoaixpKSA9IHggKyBzaGlmdDsKKyAgICAhJG9tcCBzY2FuIGV4Y2x1c2l2ZSh4KQorICAg IHggPSB4ICsgYShqLGkpCisgICAgeCA9IHggKyBiKGosaSkKKyAgZW5kIGRvCitlbmQgZG8K KworeSA9IDAKK2RvIGkgPSAxLCBOCisgIGRvIGogPSAxLCBNCisgICAgaWYgKGMoaixpKSAv PSB5ICsgaSArIDI5KmopIGVycm9yIHN0b3AgMQorICAgIHkgPSB5ICsgYShqLGkpICsgYihq LGkpCisgIGVuZCBkbworZW5kIGRvCitpZiAoeCAvPSB5KSBlcnJvciBzdG9wIDIKK2VuZAo= --------------kQX8sG0qyV8PVSFaopCEM0rF--