Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ohtbB-0004cB-82 for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Oct 2022 14:17:42 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1ohtb8-0003tM-V9 for pgsql-hackers@arkaria.postgresql.org; Mon, 10 Oct 2022 14:17:38 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ohtb7-0003sM-0V for pgsql-hackers@lists.postgresql.org; Mon, 10 Oct 2022 14:17:38 +0000 Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1ohtb0-0005Jh-2n for pgsql-hackers@postgresql.org; Mon, 10 Oct 2022 14:17:34 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 7BE295C0143 for ; Mon, 10 Oct 2022 10:17:27 -0400 (EDT) Received: from mailfrontend2 ([10.202.2.163]) by compute2.internal (MEProxy); Mon, 10 Oct 2022 10:17:27 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:in-reply-to:message-id :mime-version:references:reply-to:sender:subject:subject:to:to :x-me-proxy:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s= fm3; t=1665411447; x=1665497847; bh=fq9SDehPiMTuCtvxON6Sc19R40go 2mUsESx/VWkVkdo=; b=eIY4WMA9veOTXrQF/FOG3urZ8Q5HNG8JeyRpE9wFCNwr mthqMl8NHxLlF7+k7OQmAP3QXCvjxQQoelqz7Bqv8MCcs9ZFETPv7kCBqAVOYdnB 9fPmf0uKVLGVPkJEjHBajqfSnRWnFo+odCovMbx6o3TdMDuiZBJZj9SrwnaUMCLO Jdw39svfildN7ds8nXTMvEed1ncpu0Nc+b2ObgwhCJcHwELmjBiCGFWiToKAt/fR t9stmgzDBXwnM17bMlYDdrK273p10H2s4lyInbqWDLswdcXB503WFeF4yrLWQzXV Srws479PQ19MQyWfGjeEXIKct/QGJB+cSG8SLyM4/w== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvfedrfeejgedgieelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfuffhvfhfjgesmhdtre ertdefjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdr vghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrth htvghrnhepkeetteefheevhfdvledtfeegleeutdekkeekveeifeeuffevjeeujeehffej ieejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepph gvthgvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Feedback-ID: i131946ab:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 10 Oct 2022 10:17:25 -0400 (EDT) Content-Type: multipart/mixed; boundary="------------W0C2NDqXHAPCfvUE5llrFarU" Message-ID: <071c40f2-15cf-5db3-8799-dbac041bb881@enterprisedb.com> Date: Mon, 10 Oct 2022 16:17:23 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.3.1 Subject: Re: Non-decimal integer literals Content-Language: en-US From: Peter Eisentraut To: pgsql-hackers References: <0d895aa8-d1de-3637-9ad4-de0269918e77@enterprisedb.com> <0f37d2ec-6689-4d23-7ba5-4d2a73c2666f@enterprisedb.com> <577603ec-787b-61b8-23a2-1bd0457ed1c7@enterprisedb.com> <2317133.1643155358@sss.pgh.pa.us> <97aa22d7-b80f-efa1-f368-3dbf73a15980@enterprisedb.com> In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------W0C2NDqXHAPCfvUE5llrFarU Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 16.02.22 11:11, Peter Eisentraut wrote: > The remaining patches are material for PG16 at this point, and I will > set the commit fest item to returned with feedback in the meantime. Time to continue with this. Attached is a rebased and cleaned up patch for non-decimal integer literals. (I don't include the underscores-in-numeric literals patch. I'm keeping that for later.) Two open issues from my notes: Technically, numeric_in() should be made aware of this, but that seems relatively complicated and maybe not necessary for the first iteration. Taking another look around ecpg to see how this interacts with C-syntax integer literals. I'm not aware of any particular issues, but it's understandably tricky. Other than that, this seems pretty complete as a start. --------------W0C2NDqXHAPCfvUE5llrFarU Content-Type: text/plain; charset=UTF-8; name="v9-0001-Non-decimal-integer-literals.patch" Content-Disposition: attachment; filename="v9-0001-Non-decimal-integer-literals.patch" Content-Transfer-Encoding: base64 RnJvbSBkMGJjNzJmYTRjMzM5YmEyZWEwYmI4ZDFlNWEzOTIzZDc2ZWU4MTA1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAxMCBPY3QgMjAyMiAxNjowMzoxNSArMDIwMApTdWJqZWN0 OiBbUEFUQ0ggdjldIE5vbi1kZWNpbWFsIGludGVnZXIgbGl0ZXJhbHMKCkFkZCBzdXBwb3J0 IGZvciBoZXhhZGVjaW1hbCwgb2N0YWwsIGFuZCBiaW5hcnkgaW50ZWdlciBsaXRlcmFsczoK CiAgICAweDQyRgogICAgMG8yNzMKICAgIDBiMTAwMTAxCgpwZXIgU1FMOjIwMnggZHJhZnQu CgpUaGlzIGFkZHMgc3VwcG9ydCBpbiB0aGUgbGV4ZXIgYXMgd2VsbCBhcyBpbiB0aGUgaW50 ZWdlciB0eXBlIGlucHV0CmZ1bmN0aW9ucy4KCkRpc2N1c3Npb246IGh0dHBzOi8vd3d3LnBv c3RncmVzcWwub3JnL21lc3NhZ2UtaWQvZmxhdC9iMjM5NTY0Yy1jYWQwLWIyM2UtYzU3ZS0x NjZkODgzY2I5N2RAZW50ZXJwcmlzZWRiLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9zeW50YXgu c2dtbCAgICAgICAgICAgICAgICAgICB8ICAyNiArKysrCiBzcmMvYmFja2VuZC9jYXRhbG9n L2luZm9ybWF0aW9uX3NjaGVtYS5zcWwgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2NhdGFsb2cv c3FsX2ZlYXR1cmVzLnR4dCAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvc2Nh bi5sICAgICAgICAgICAgICAgICAgfCAgOTkgKysrKysrKysrKystLS0tCiBzcmMvYmFja2Vu ZC91dGlscy9hZHQvbnVtdXRpbHMuYyAgICAgICAgICAgfCAxNDAgKysrKysrKysrKysrKysr KysrKysrCiBzcmMvZmVfdXRpbHMvcHNxbHNjYW4ubCAgICAgICAgICAgICAgICAgICAgfCAg NzggKysrKysrKysrLS0tCiBzcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvcGdjLmwgICAg ICAgICAgfCAxMDggKysrKysrKysrLS0tLS0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbnQyLm91dCAgICAgICAgIHwgIDE5ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbnQ0Lm91dCAgICAgICAgIHwgIDE5ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9pbnQ4Lm91dCAgICAgICAgIHwgIDE5ICsrKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3Rl ZC9udW1lcm9sb2d5Lm91dCAgIHwgIDU5ICsrKysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9z cWwvaW50Mi5zcWwgICAgICAgICAgICAgIHwgICA3ICsrCiBzcmMvdGVzdC9yZWdyZXNzL3Nx bC9pbnQ0LnNxbCAgICAgICAgICAgICAgfCAgIDcgKysKIHNyYy90ZXN0L3JlZ3Jlc3Mvc3Fs L2ludDguc3FsICAgICAgICAgICAgICB8ICAgNyArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwv bnVtZXJvbG9neS5zcWwgICAgICAgIHwgIDIxICsrKy0KIDE1IGZpbGVzIGNoYW5nZWQsIDUy MyBpbnNlcnRpb25zKCspLCA5MyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3Jj L3NnbWwvc3ludGF4LnNnbWwgYi9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwKaW5kZXggOTNh ZDcxNzM3ZjUxLi5iYmE3OGMyMmYxYTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9zeW50 YXguc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvc3ludGF4LnNnbWwKQEAgLTY5NCw2ICs2OTQs MzIgQEAgPHRpdGxlPk51bWVyaWMgQ29uc3RhbnRzPC90aXRsZT4KIDwvbGl0ZXJhbGxheW91 dD4KICAgICA8L3BhcmE+CiAKKyAgICA8cGFyYT4KKyAgICAgQWRkaXRpb25hbGx5LCBub24t ZGVjaW1hbCBpbnRlZ2VyIGNvbnN0YW50cyBjYW4gYmUgdXNlZCBpbiB0aGVzZSBmb3JtczoK KzxzeW5vcHNpcz4KKzB4PHJlcGxhY2VhYmxlPmhleGRpZ2l0czwvcmVwbGFjZWFibGU+Cisw bzxyZXBsYWNlYWJsZT5vY3RkaWdpdHM8L3JlcGxhY2VhYmxlPgorMGI8cmVwbGFjZWFibGU+ YmluZGlnaXRzPC9yZXBsYWNlYWJsZT4KKzwvc3lub3BzaXM+CisgICAgIDxyZXBsYWNlYWJs ZT5oZXhkaWdpdHM8L3JlcGxhY2VhYmxlPiBpcyBvbmUgb3IgbW9yZSBoZXhhZGVjaW1hbCBk aWdpdHMKKyAgICAgKDAtOSwgQS1GKSwgPHJlcGxhY2VhYmxlPm9jdGRpZ2l0czwvcmVwbGFj ZWFibGU+IGlzIG9uZSBvciBtb3JlIG9jdGFsCisgICAgIGRpZ2l0cyAoMC03KSwgPHJlcGxh Y2VhYmxlPmJpbmRpZ2l0czwvcmVwbGFjZWFibGU+IGlzIG9uZSBvciBtb3JlIGJpbmFyeQor ICAgICBkaWdpdHMgKDAgb3IgMSkuICBIZXhhZGVjaW1hbCBkaWdpdHMgYW5kIHRoZSByYWRp eCBwcmVmaXhlcyBjYW4gYmUgaW4KKyAgICAgdXBwZXIgb3IgbG93ZXIgY2FzZS4gIE5vdGUg dGhhdCBvbmx5IGludGVnZXJzIGNhbiBoYXZlIG5vbi1kZWNpbWFsIGZvcm1zLAorICAgICBu b3QgbnVtYmVycyB3aXRoIGZyYWN0aW9uYWwgcGFydHMuCisgICAgPC9wYXJhPgorCisgICAg PHBhcmE+CisgICAgIFRoZXNlIGFyZSBzb21lIGV4YW1wbGVzIG9mIHRoaXM6Cis8bGl0ZXJh bGxheW91dD4wYjEwMDEwMQorMEIxMDAxMTAwMQorMG8yNzMKKzBPNzU1CisweDQyZgorMFhG RkZGCis8L2xpdGVyYWxsYXlvdXQ+CisgICAgPC9wYXJhPgorCiAgICAgPHBhcmE+CiAgICAg IDxpbmRleHRlcm0+PHByaW1hcnk+aW50ZWdlcjwvcHJpbWFyeT48L2luZGV4dGVybT4KICAg ICAgPGluZGV4dGVybT48cHJpbWFyeT5iaWdpbnQ8L3ByaW1hcnk+PC9pbmRleHRlcm0+CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL2luZm9ybWF0aW9uX3NjaGVtYS5zcWwg Yi9zcmMvYmFja2VuZC9jYXRhbG9nL2luZm9ybWF0aW9uX3NjaGVtYS5zcWwKaW5kZXggMTg3 MjVhMDJkMWZiLi45NWMyN2E2MjVlN2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFs b2cvaW5mb3JtYXRpb25fc2NoZW1hLnNxbAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL2lu Zm9ybWF0aW9uX3NjaGVtYS5zcWwKQEAgLTExOSw3ICsxMTksNyBAQCBDUkVBVEUgRlVOQ1RJ T04gX3BnX251bWVyaWNfcHJlY2lzaW9uKHR5cGlkIG9pZCwgdHlwbW9kIGludDQpIFJFVFVS TlMgaW50ZWdlcgogICAgICAgICAgV0hFTiAxNzAwIC8qbnVtZXJpYyovIFRIRU4KICAgICAg ICAgICAgICAgQ0FTRSBXSEVOICQyID0gLTEKICAgICAgICAgICAgICAgICAgICBUSEVOIG51 bGwKLSAgICAgICAgICAgICAgICAgICBFTFNFICgoJDIgLSA0KSA+PiAxNikgJiA2NTUzNQor ICAgICAgICAgICAgICAgICAgIEVMU0UgKCgkMiAtIDQpID4+IDE2KSAmIDB4RkZGRgogICAg ICAgICAgICAgICAgICAgIEVORAogICAgICAgICAgV0hFTiA3MDAgLypmbG9hdDQqLyBUSEVO IDI0IC8qRkxUX01BTlRfRElHKi8KICAgICAgICAgIFdIRU4gNzAxIC8qZmxvYXQ4Ki8gVEhF TiA1MyAvKkRCTF9NQU5UX0RJRyovCkBAIC0xNDcsNyArMTQ3LDcgQEAgQ1JFQVRFIEZVTkNU SU9OIF9wZ19udW1lcmljX3NjYWxlKHR5cGlkIG9pZCwgdHlwbW9kIGludDQpIFJFVFVSTlMg aW50ZWdlcgogICAgICAgIFdIRU4gJDEgSU4gKDE3MDApIFRIRU4KICAgICAgICAgICAgIENB U0UgV0hFTiAkMiA9IC0xCiAgICAgICAgICAgICAgICAgIFRIRU4gbnVsbAotICAgICAgICAg ICAgICAgICBFTFNFICgkMiAtIDQpICYgNjU1MzUKKyAgICAgICAgICAgICAgICAgRUxTRSAo JDIgLSA0KSAmIDB4RkZGRgogICAgICAgICAgICAgICAgICBFTkQKICAgICAgICBFTFNFIG51 bGwKICAgRU5EOwpAQCAtMTYzLDcgKzE2Myw3IEBAIENSRUFURSBGVU5DVElPTiBfcGdfZGF0 ZXRpbWVfcHJlY2lzaW9uKHR5cGlkIG9pZCwgdHlwbW9kIGludDQpIFJFVFVSTlMgaW50ZWdl cgogICAgICAgIFdIRU4gJDEgSU4gKDEwODMsIDExMTQsIDExODQsIDEyNjYpIC8qIHRpbWUs IHRpbWVzdGFtcCwgc2FtZSArIHR6ICovCiAgICAgICAgICAgIFRIRU4gQ0FTRSBXSEVOICQy IDwgMCBUSEVOIDYgRUxTRSAkMiBFTkQKICAgICAgICBXSEVOICQxIElOICgxMTg2KSAvKiBp bnRlcnZhbCAqLwotICAgICAgICAgICBUSEVOIENBU0UgV0hFTiAkMiA8IDAgT1IgJDIgJiA2 NTUzNSA9IDY1NTM1IFRIRU4gNiBFTFNFICQyICYgNjU1MzUgRU5ECisgICAgICAgICAgIFRI RU4gQ0FTRSBXSEVOICQyIDwgMCBPUiAkMiAmIDB4RkZGRiA9IDB4RkZGRiBUSEVOIDYgRUxT RSAkMiAmIDB4RkZGRiBFTkQKICAgICAgICBFTFNFIG51bGwKICAgRU5EOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQgYi9zcmMvYmFja2Vu ZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKaW5kZXggZGE3YzljNzcyZTA5Li5lODk3ZTI4 ZWQxNDggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cvc3FsX2ZlYXR1cmVzLnR4 dAorKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3NxbF9mZWF0dXJlcy50eHQKQEAgLTUyNyw2 ICs1MjcsNyBAQCBUNjUyCVNRTC1keW5hbWljIHN0YXRlbWVudHMgaW4gU1FMIHJvdXRpbmVz CQkJTk8KIFQ2NTMJU1FMLXNjaGVtYSBzdGF0ZW1lbnRzIGluIGV4dGVybmFsIHJvdXRpbmVz CQkJWUVTCQogVDY1NAlTUUwtZHluYW1pYyBzdGF0ZW1lbnRzIGluIGV4dGVybmFsIHJvdXRp bmVzCQkJTk8JCiBUNjU1CUN5Y2xpY2FsbHkgZGVwZW5kZW50IHJvdXRpbmVzCQkJWUVTCQor VDY2MQlOb24tZGVjaW1hbCBpbnRlZ2VyIGxpdGVyYWxzCQkJWUVTCVNRTDoyMDJ4IGRyYWZ0 CiBUODExCUJhc2ljIFNRTC9KU09OIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucwkJCU5PCQogVDgx MglTUUwvSlNPTjogSlNPTl9PQkpFQ1RBR0cJCQlOTwkKIFQ4MTMJU1FML0pTT046IEpTT05f QVJSQVlBR0cgd2l0aCBPUkRFUiBCWQkJCU5PCQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv cGFyc2VyL3NjYW4ubCBiL3NyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwKaW5kZXggZGI4YjBm ZThlYmNjLi44YmI5ZDVmY2M1MmQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9z Y2FuLmwKKysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubApAQCAtMTI0LDcgKzEyNCw3 IEBAIHN0YXRpYyB2b2lkIGFkZGxpdChjaGFyICp5dGV4dCwgaW50IHlsZW5nLCBjb3JlX3l5 c2Nhbl90IHl5c2Nhbm5lcik7CiBzdGF0aWMgdm9pZCBhZGRsaXRjaGFyKHVuc2lnbmVkIGNo YXIgeWNoYXIsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBjaGFyICpsaXRi dWZkdXAoY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpOwogc3RhdGljIHVuc2lnbmVkIGNoYXIg dW5lc2NhcGVfc2luZ2xlX2NoYXIodW5zaWduZWQgY2hhciBjLCBjb3JlX3l5c2Nhbl90IHl5 c2Nhbm5lcik7Ci1zdGF0aWMgaW50CXByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNo YXIgKnRva2VuLCBZWVNUWVBFICpsdmFsKTsKK3N0YXRpYyBpbnQJcHJvY2Vzc19pbnRlZ2Vy X2xpdGVyYWwoY29uc3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwsIGludCBiYXNlKTsK IHN0YXRpYyB2b2lkIGFkZHVuaWNvZGUocGdfd2NoYXIgYywgeXlzY2FuX3QgeXlzY2FubmVy KTsKIAogI2RlZmluZSB5eWVycm9yKG1zZykgIHNjYW5uZXJfeXllcnJvcihtc2csIHl5c2Nh bm5lcikKQEAgLTM4NSwyNSArMzg1LDQwIEBAIG9wZXJhdG9yCQl7b3BfY2hhcnN9KwogICog VW5hcnkgbWludXMgaXMgbm90IHBhcnQgb2YgYSBudW1iZXIgaGVyZS4gIEluc3RlYWQgd2Ug cGFzcyBpdCBzZXBhcmF0ZWx5IHRvCiAgKiB0aGUgcGFyc2VyLCBhbmQgdGhlcmUgaXQgZ2V0 cyBjb2VyY2VkIHZpYSBkb05lZ2F0ZSgpLgogICoKLSAqIHtkZWNpbWFsZmFpbH0gaXMgdXNl ZCBiZWNhdXNlIHdlIHdvdWxkIGxpa2UgIjEuLjEwIiB0byBsZXggYXMgMSwgZG90X2RvdCwg MTAuCisgKiB7bnVtZXJpY2ZhaWx9IGlzIHVzZWQgYmVjYXVzZSB3ZSB3b3VsZCBsaWtlICIx Li4xMCIgdG8gbGV4IGFzIDEsIGRvdF9kb3QsIDEwLgogICoKICAqIHtyZWFsZmFpbH0gaXMg YWRkZWQgdG8gcHJldmVudCB0aGUgbmVlZCBmb3Igc2Nhbm5lcgogICogYmFja3VwIHdoZW4g dGhlIHtyZWFsfSBydWxlIGZhaWxzIHRvIG1hdGNoIGNvbXBsZXRlbHkuCiAgKi8KLWRpZ2l0 CQkJWzAtOV0KLQotaW50ZWdlcgkJCXtkaWdpdH0rCi1kZWNpbWFsCQkJKCh7ZGlnaXR9Klwu e2RpZ2l0fSspfCh7ZGlnaXR9K1wue2RpZ2l0fSopKQotZGVjaW1hbGZhaWwJCXtkaWdpdH0r XC5cLgotcmVhbAkJCSh7aW50ZWdlcn18e2RlY2ltYWx9KVtFZV1bLStdP3tkaWdpdH0rCi1y ZWFsZmFpbAkJKHtpbnRlZ2VyfXx7ZGVjaW1hbH0pW0VlXVstK10KLQotaW50ZWdlcl9qdW5r CXtpbnRlZ2VyfXtpZGVudF9zdGFydH0KLWRlY2ltYWxfanVuawl7ZGVjaW1hbH17aWRlbnRf c3RhcnR9CitkZWNkaWdpdAkJWzAtOV0KK2hleGRpZ2l0CQlbMC05QS1GYS1mXQorb2N0ZGln aXQJCVswLTddCitiaW5kaWdpdAkJWzAtMV0KKworZGVjaW50ZWdlcgkJe2RlY2RpZ2l0fSsK K2hleGludGVnZXIJCTBbeFhde2hleGRpZ2l0fSsKK29jdGludGVnZXIJCTBbb09de29jdGRp Z2l0fSsKK2JpbmludGVnZXIJCTBbYkJde2JpbmRpZ2l0fSsKKworaGV4ZmFpbAkJCTBbeFhd CitvY3RmYWlsCQkJMFtvT10KK2JpbmZhaWwJCQkwW2JCXQorCitudW1lcmljCQkJKCh7ZGVj aW50ZWdlcn1cLntkZWNpbnRlZ2VyfT8pfChcLntkZWNpbnRlZ2VyfSkpCitudW1lcmljZmFp bAkJe2RlY2RpZ2l0fStcLlwuCisKK3JlYWwJCQkoe2RlY2ludGVnZXJ9fHtudW1lcmljfSlb RWVdWy0rXT97ZGVjZGlnaXR9KworcmVhbGZhaWwJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9 KVtFZV1bLStdCisKK2RlY2ludGVnZXJfanVuawl7ZGVjaW50ZWdlcn17aWRlbnRfc3RhcnR9 CitoZXhpbnRlZ2VyX2p1bmsJe2hleGludGVnZXJ9e2lkZW50X3N0YXJ0fQorb2N0aW50ZWdl cl9qdW5rCXtvY3RpbnRlZ2VyfXtpZGVudF9zdGFydH0KK2JpbmludGVnZXJfanVuawl7Ymlu aW50ZWdlcn17aWRlbnRfc3RhcnR9CitudW1lcmljX2p1bmsJe251bWVyaWN9e2lkZW50X3N0 YXJ0fQogcmVhbF9qdW5rCQl7cmVhbH17aWRlbnRfc3RhcnR9CiAKLXBhcmFtCQkJXCR7aW50 ZWdlcn0KLXBhcmFtX2p1bmsJCVwke2ludGVnZXJ9e2lkZW50X3N0YXJ0fQorcGFyYW0JCQlc JHtkZWNpbnRlZ2VyfQorcGFyYW1fanVuawkJXCR7ZGVjaW50ZWdlcn17aWRlbnRfc3RhcnR9 CiAKIG90aGVyCQkJLgogCkBAIC05ODMsMjAgKzk5OCw0NCBAQCBvdGhlcgkJCS4KIAkJCQkJ eXllcnJvcigidHJhaWxpbmcganVuayBhZnRlciBwYXJhbWV0ZXIiKTsKIAkJCQl9CiAKLXtp bnRlZ2VyfQkJewore2RlY2ludGVnZXJ9CXsKKwkJCQkJU0VUX1lZTExPQygpOworCQkJCQly ZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWwsIDEwKTsKKwkJ CQl9Cit7aGV4aW50ZWdlcn0JeworCQkJCQlTRVRfWVlMTE9DKCk7CisJCQkJCXJldHVybiBw cm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQgKyAyLCB5eWx2YWwsIDE2KTsKKwkJCQl9 Cit7b2N0aW50ZWdlcn0JeworCQkJCQlTRVRfWVlMTE9DKCk7CisJCQkJCXJldHVybiBwcm9j ZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQgKyAyLCB5eWx2YWwsIDgpOworCQkJCX0KK3ti aW5pbnRlZ2VyfQl7CisJCQkJCVNFVF9ZWUxMT0MoKTsKKwkJCQkJcmV0dXJuIHByb2Nlc3Nf aW50ZWdlcl9saXRlcmFsKHl5dGV4dCArIDIsIHl5bHZhbCwgMik7CisJCQkJfQore2hleGZh aWx9CQl7CisJCQkJCVNFVF9ZWUxMT0MoKTsKKwkJCQkJeXllcnJvcigiaW52YWxpZCBoZXhh ZGVjaW1hbCBpbnRlZ2VyIik7CisJCQkJfQore29jdGZhaWx9CQl7CiAJCQkJCVNFVF9ZWUxM T0MoKTsKLQkJCQkJcmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCwgeXls dmFsKTsKKwkJCQkJeXllcnJvcigiaW52YWxpZCBvY3RhbCBpbnRlZ2VyIik7CiAJCQkJfQot e2RlY2ltYWx9CQl7Cit7YmluZmFpbH0JCXsKKwkJCQkJU0VUX1lZTExPQygpOworCQkJCQl5 eWVycm9yKCJpbnZhbGlkIGJpbmFyeSBpbnRlZ2VyIik7CisJCQkJfQore251bWVyaWN9CQl7 CiAJCQkJCVNFVF9ZWUxMT0MoKTsKIAkJCQkJeXlsdmFsLT5zdHIgPSBwc3RyZHVwKHl5dGV4 dCk7CiAJCQkJCXJldHVybiBGQ09OU1Q7CiAJCQkJfQote2RlY2ltYWxmYWlsfQl7Cit7bnVt ZXJpY2ZhaWx9CXsKIAkJCQkJLyogdGhyb3cgYmFjayB0aGUgLi4sIGFuZCB0cmVhdCBhcyBp bnRlZ2VyICovCiAJCQkJCXl5bGVzcyh5eWxlbmcgLSAyKTsKIAkJCQkJU0VUX1lZTExPQygp OwotCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWwp OworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0LCB5eWx2YWws IDEwKTsKIAkJCQl9CiB7cmVhbH0JCQl7CiAJCQkJCVNFVF9ZWUxMT0MoKTsKQEAgLTEwMDcs MTEgKzEwNDYsMjMgQEAgb3RoZXIJCQkuCiAJCQkJCVNFVF9ZWUxMT0MoKTsKIAkJCQkJeXll cnJvcigidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwiKTsKIAkJCQl9Ci17 aW50ZWdlcl9qdW5rfQl7Cit7ZGVjaW50ZWdlcl9qdW5rfQl7CisJCQkJCVNFVF9ZWUxMT0Mo KTsKKwkJCQkJeXllcnJvcigidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwi KTsKKwkJCQl9Cit7aGV4aW50ZWdlcl9qdW5rfQl7CisJCQkJCVNFVF9ZWUxMT0MoKTsKKwkJ CQkJeXllcnJvcigidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwiKTsKKwkJ CQl9Cit7b2N0aW50ZWdlcl9qdW5rfQl7CisJCQkJCVNFVF9ZWUxMT0MoKTsKKwkJCQkJeXll cnJvcigidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwiKTsKKwkJCQl9Cit7 YmluaW50ZWdlcl9qdW5rfQl7CiAJCQkJCVNFVF9ZWUxMT0MoKTsKIAkJCQkJeXllcnJvcigi dHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwiKTsKIAkJCQl9Ci17ZGVjaW1h bF9qdW5rfQl7Cit7bnVtZXJpY19qdW5rfQl7CiAJCQkJCVNFVF9ZWUxMT0MoKTsKIAkJCQkJ eXllcnJvcigidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwiKTsKIAkJCQl9 CkBAIC0xMzA3LDE3ICsxMzU4LDE3IEBAIGxpdGJ1ZmR1cChjb3JlX3l5c2Nhbl90IHl5c2Nh bm5lcikKIH0KIAogLyoKLSAqIFByb2Nlc3Mge2ludGVnZXJ9LiAgTm90ZSB0aGlzIHdpbGwg YWxzbyBkbyB0aGUgcmlnaHQgdGhpbmcgd2l0aCB7ZGVjaW1hbH0sCisgKiBQcm9jZXNzIHsq aW50ZWdlcn0uICBOb3RlIHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRo IHtudW1lcmljfSwKICAqIGllIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LgogICovCiBz dGF0aWMgaW50Ci1wcm9jZXNzX2ludGVnZXJfbGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwg WVlTVFlQRSAqbHZhbCkKK3Byb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNoYXIgKnRv a2VuLCBZWVNUWVBFICpsdmFsLCBpbnQgYmFzZSkKIHsKIAlpbnQJCQl2YWw7CiAJY2hhcgkg ICAqZW5kcHRyOwogCiAJZXJybm8gPSAwOwotCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5k cHRyLCAxMCk7CisJdmFsID0gc3RydG9pbnQodG9rZW4sICZlbmRwdHIsIGJhc2UpOwogCWlm ICgqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQogCXsKIAkJLyogaW50ZWdl ciB0b28gbGFyZ2UgKG9yIGNvbnRhaW5zIGRlY2ltYWwgcHQpLCB0cmVhdCBpdCBhcyBhIGZs b2F0ICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYyBi L3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9udW11dGlscy5jCmluZGV4IDgzNGVjMGI1ODgyYy4u NTVmMGEyMDgzOWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRp bHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvbnVtdXRpbHMuYwpAQCAtODUsNiAr ODUsMTcgQEAgZGVjaW1hbExlbmd0aDY0KGNvbnN0IHVpbnQ2NCB2KQogCXJldHVybiB0ICsg KHYgPj0gUG93ZXJzT2ZUZW5bdF0pOwogfQogCitzdGF0aWMgY29uc3QgaW50OCBoZXhsb29r dXBbMTI4XSA9IHsKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwktMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwKKwkwLCAx LCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0x LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwg LTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorfTsKKwogLyoK ICAqIENvbnZlcnQgaW5wdXQgc3RyaW5nIHRvIGEgc2lnbmVkIDE2IGJpdCBpbnRlZ2VyLgog ICoKQEAgLTEyMCw2ICsxMzEsNDggQEAgcGdfc3RydG9pbnQxNihjb25zdCBjaGFyICpzKQog CQlnb3RvIGludmFsaWRfc3ludGF4OwogCiAJLyogcHJvY2VzcyBkaWdpdHMgKi8KKwlpZiAo cHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICd4JyB8fCBwdHJbMV0gPT0gJ1gnKSkKKwl7 CisJCXB0ciArPSAyOworCQl3aGlsZSAoKnB0ciAmJiBpc3hkaWdpdCgodW5zaWduZWQgY2hh cikgKnB0cikpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gaGV4bG9va3VwWyh1bnNpZ25lZCBj aGFyKSAqcHRyXTsKKworCQkJaWYgKHVubGlrZWx5KHBnX211bF9zMTZfb3ZlcmZsb3codG1w LCAxNiwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MxNl9vdmVyZmxvdyh0bXAs IGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisKKwkJCXB0cisrOwor CQl9CisJfQorCWVsc2UgaWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9PSAnbycgfHwg cHRyWzFdID09ICdPJykpCisJeworCQlwdHIgKz0gMjsKKworCQl3aGlsZSAoKnB0ciAmJiAo KnB0ciA+PSAnMCcgJiYgKnB0ciA8PSAnNycpKQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9ICgq cHRyKysgLSAnMCcpOworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MxNl9vdmVyZmxvdyh0 bXAsIDgsICZ0bXApKSB8fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1w LCBkaWdpdCwgJnRtcCkpKQorCQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQl9CisJfQorCWVs c2UgaWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9PSAnYicgfHwgcHRyWzFdID09ICdC JykpCisJeworCQlwdHIgKz0gMjsKKworCQl3aGlsZSAoKnB0ciAmJiAoKnB0ciA+PSAnMCcg JiYgKnB0ciA8PSAnMScpKQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9ICgqcHRyKysgLSAnMCcp OworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MxNl9vdmVyZmxvdyh0bXAsIDIsICZ0bXAp KSB8fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRt cCkpKQorCQkJCWdvdG8gb3V0X29mX3JhbmdlOworCQl9CisJfQorCWVsc2UKKwl7CiAJd2hp bGUgKCpwdHIgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKnB0cikpCiAJewogCQlpbnQ4 CQlkaWdpdCA9ICgqcHRyKysgLSAnMCcpOwpAQCAtMTI4LDYgKzE4MSw3IEBAIHBnX3N0cnRv aW50MTYoY29uc3QgY2hhciAqcykKIAkJCXVubGlrZWx5KHBnX3N1Yl9zMTZfb3ZlcmZsb3co dG1wLCBkaWdpdCwgJnRtcCkpKQogCQkJZ290byBvdXRfb2ZfcmFuZ2U7CiAJfQorCX0KIAog CS8qIGFsbG93IHRyYWlsaW5nIHdoaXRlc3BhY2UsIGJ1dCBub3Qgb3RoZXIgdHJhaWxpbmcg Y2hhcnMgKi8KIAl3aGlsZSAoKnB0ciAhPSAnXDAnICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNo YXIpICpwdHIpKQpAQCAtMTk2LDYgKzI1MCw0OCBAQCBwZ19zdHJ0b2ludDMyKGNvbnN0IGNo YXIgKnMpCiAJCWdvdG8gaW52YWxpZF9zeW50YXg7CiAKIAkvKiBwcm9jZXNzIGRpZ2l0cyAq LworCWlmIChwdHJbMF0gPT0gJzAnICYmIChwdHJbMV0gPT0gJ3gnIHx8IHB0clsxXSA9PSAn WCcpKQorCXsKKwkJcHRyICs9IDI7CisJCXdoaWxlICgqcHRyICYmIGlzeGRpZ2l0KCh1bnNp Z25lZCBjaGFyKSAqcHRyKSkKKwkJeworCQkJaW50OAkJZGlnaXQgPSBoZXhsb29rdXBbKHVu c2lnbmVkIGNoYXIpICpwdHJdOworCisJCQlpZiAodW5saWtlbHkocGdfbXVsX3MzMl9vdmVy Zmxvdyh0bXAsIDE2LCAmdG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJfczMyX292ZXJm bG93KHRtcCwgZGlnaXQsICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5nZTsKKworCQkJ cHRyKys7CisJCX0KKwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09 ICdvJyB8fCBwdHJbMV0gPT0gJ08nKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgq cHRyICYmICgqcHRyID49ICcwJyAmJiAqcHRyIDw9ICc3JykpCisJCXsKKwkJCWludDgJCWRp Z2l0ID0gKCpwdHIrKyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczMyX292 ZXJmbG93KHRtcCwgOCwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVy Zmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0K Kwl9CisJZWxzZSBpZiAocHRyWzBdID09ICcwJyAmJiAocHRyWzFdID09ICdiJyB8fCBwdHJb MV0gPT0gJ0InKSkKKwl7CisJCXB0ciArPSAyOworCisJCXdoaWxlICgqcHRyICYmICgqcHRy ID49ICcwJyAmJiAqcHRyIDw9ICcxJykpCisJCXsKKwkJCWludDgJCWRpZ2l0ID0gKCpwdHIr KyAtICcwJyk7CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxfczMyX292ZXJmbG93KHRtcCwg MiwgJnRtcCkpIHx8CisJCQkJdW5saWtlbHkocGdfc3ViX3MzMl9vdmVyZmxvdyh0bXAsIGRp Z2l0LCAmdG1wKSkpCisJCQkJZ290byBvdXRfb2ZfcmFuZ2U7CisJCX0KKwl9CisJZWxzZQor CXsKIAl3aGlsZSAoKnB0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKIAl7 CiAJCWludDgJCWRpZ2l0ID0gKCpwdHIrKyAtICcwJyk7CkBAIC0yMDQsNiArMzAwLDcgQEAg cGdfc3RydG9pbnQzMihjb25zdCBjaGFyICpzKQogCQkJdW5saWtlbHkocGdfc3ViX3MzMl9v dmVyZmxvdyh0bXAsIGRpZ2l0LCAmdG1wKSkpCiAJCQlnb3RvIG91dF9vZl9yYW5nZTsKIAl9 CisJfQogCiAJLyogYWxsb3cgdHJhaWxpbmcgd2hpdGVzcGFjZSwgYnV0IG5vdCBvdGhlciB0 cmFpbGluZyBjaGFycyAqLwogCXdoaWxlICgqcHRyICE9ICdcMCcgJiYgaXNzcGFjZSgodW5z aWduZWQgY2hhcikgKnB0cikpCkBAIC0yODAsNiArMzc3LDQ4IEBAIHBnX3N0cnRvaW50NjQo Y29uc3QgY2hhciAqcykKIAkJZ290byBpbnZhbGlkX3N5bnRheDsKIAogCS8qIHByb2Nlc3Mg ZGlnaXRzICovCisJaWYgKHB0clswXSA9PSAnMCcgJiYgKHB0clsxXSA9PSAneCcgfHwgcHRy WzFdID09ICdYJykpCisJeworCQlwdHIgKz0gMjsKKwkJd2hpbGUgKCpwdHIgJiYgaXN4ZGln aXQoKHVuc2lnbmVkIGNoYXIpICpwdHIpKQorCQl7CisJCQlpbnQ4CQlkaWdpdCA9IGhleGxv b2t1cFsodW5zaWduZWQgY2hhcikgKnB0cl07CisKKwkJCWlmICh1bmxpa2VseShwZ19tdWxf czY0X292ZXJmbG93KHRtcCwgMTYsICZ0bXApKSB8fAorCQkJCXVubGlrZWx5KHBnX3N1Yl9z NjRfb3ZlcmZsb3codG1wLCBkaWdpdCwgJnRtcCkpKQorCQkJCWdvdG8gb3V0X29mX3Jhbmdl OworCisJCQlwdHIrKzsKKwkJfQorCX0KKwllbHNlIGlmIChwdHJbMF0gPT0gJzAnICYmIChw dHJbMV0gPT0gJ28nIHx8IHB0clsxXSA9PSAnTycpKQorCXsKKwkJcHRyICs9IDI7CisKKwkJ d2hpbGUgKCpwdHIgJiYgKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzcnKSkKKwkJeworCQkJ aW50OAkJZGlnaXQgPSAoKnB0cisrIC0gJzAnKTsKKworCQkJaWYgKHVubGlrZWx5KHBnX211 bF9zNjRfb3ZlcmZsb3codG1wLCA4LCAmdG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJf czY0X292ZXJmbG93KHRtcCwgZGlnaXQsICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5n ZTsKKwkJfQorCX0KKwllbHNlIGlmIChwdHJbMF0gPT0gJzAnICYmIChwdHJbMV0gPT0gJ2In IHx8IHB0clsxXSA9PSAnQicpKQorCXsKKwkJcHRyICs9IDI7CisKKwkJd2hpbGUgKCpwdHIg JiYgKCpwdHIgPj0gJzAnICYmICpwdHIgPD0gJzEnKSkKKwkJeworCQkJaW50OAkJZGlnaXQg PSAoKnB0cisrIC0gJzAnKTsKKworCQkJaWYgKHVubGlrZWx5KHBnX211bF9zNjRfb3ZlcmZs b3codG1wLCAyLCAmdG1wKSkgfHwKKwkJCQl1bmxpa2VseShwZ19zdWJfczY0X292ZXJmbG93 KHRtcCwgZGlnaXQsICZ0bXApKSkKKwkJCQlnb3RvIG91dF9vZl9yYW5nZTsKKwkJfQorCX0K KwllbHNlCisJewogCXdoaWxlICgqcHRyICYmIGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpICpw dHIpKQogCXsKIAkJaW50OAkJZGlnaXQgPSAoKnB0cisrIC0gJzAnKTsKQEAgLTI4OCw2ICs0 MjcsNyBAQCBwZ19zdHJ0b2ludDY0KGNvbnN0IGNoYXIgKnMpCiAJCQl1bmxpa2VseShwZ19z dWJfczY0X292ZXJmbG93KHRtcCwgZGlnaXQsICZ0bXApKSkKIAkJCWdvdG8gb3V0X29mX3Jh bmdlOwogCX0KKwl9CiAKIAkvKiBhbGxvdyB0cmFpbGluZyB3aGl0ZXNwYWNlLCBidXQgbm90 IG90aGVyIHRyYWlsaW5nIGNoYXJzICovCiAJd2hpbGUgKCpwdHIgIT0gJ1wwJyAmJiBpc3Nw YWNlKCh1bnNpZ25lZCBjaGFyKSAqcHRyKSkKZGlmZiAtLWdpdCBhL3NyYy9mZV91dGlscy9w c3Fsc2Nhbi5sIGIvc3JjL2ZlX3V0aWxzL3BzcWxzY2FuLmwKaW5kZXggYWU1MzFlYzI0MDc3 Li5jYjFmYzUyMTM4NDQgMTAwNjQ0Ci0tLSBhL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCisr KyBiL3NyYy9mZV91dGlscy9wc3Fsc2Nhbi5sCkBAIC0zMjMsMjUgKzMyMyw0MCBAQCBvcGVy YXRvcgkJe29wX2NoYXJzfSsKICAqIFVuYXJ5IG1pbnVzIGlzIG5vdCBwYXJ0IG9mIGEgbnVt YmVyIGhlcmUuICBJbnN0ZWFkIHdlIHBhc3MgaXQgc2VwYXJhdGVseSB0bwogICogdGhlIHBh cnNlciwgYW5kIHRoZXJlIGl0IGdldHMgY29lcmNlZCB2aWEgZG9OZWdhdGUoKS4KICAqCi0g KiB7ZGVjaW1hbGZhaWx9IGlzIHVzZWQgYmVjYXVzZSB3ZSB3b3VsZCBsaWtlICIxLi4xMCIg dG8gbGV4IGFzIDEsIGRvdF9kb3QsIDEwLgorICoge251bWVyaWNmYWlsfSBpcyB1c2VkIGJl Y2F1c2Ugd2Ugd291bGQgbGlrZSAiMS4uMTAiIHRvIGxleCBhcyAxLCBkb3RfZG90LCAxMC4K ICAqCiAgKiB7cmVhbGZhaWx9IGlzIGFkZGVkIHRvIHByZXZlbnQgdGhlIG5lZWQgZm9yIHNj YW5uZXIKICAqIGJhY2t1cCB3aGVuIHRoZSB7cmVhbH0gcnVsZSBmYWlscyB0byBtYXRjaCBj b21wbGV0ZWx5LgogICovCi1kaWdpdAkJCVswLTldCi0KLWludGVnZXIJCQl7ZGlnaXR9Kwot ZGVjaW1hbAkJCSgoe2RpZ2l0fSpcLntkaWdpdH0rKXwoe2RpZ2l0fStcLntkaWdpdH0qKSkK LWRlY2ltYWxmYWlsCQl7ZGlnaXR9K1wuXC4KLXJlYWwJCQkoe2ludGVnZXJ9fHtkZWNpbWFs fSlbRWVdWy0rXT97ZGlnaXR9KwotcmVhbGZhaWwJCSh7aW50ZWdlcn18e2RlY2ltYWx9KVtF ZV1bLStdCi0KLWludGVnZXJfanVuawl7aW50ZWdlcn17aWRlbnRfc3RhcnR9Ci1kZWNpbWFs X2p1bmsJe2RlY2ltYWx9e2lkZW50X3N0YXJ0fQorZGVjZGlnaXQJCVswLTldCitoZXhkaWdp dAkJWzAtOUEtRmEtZl0KK29jdGRpZ2l0CQlbMC03XQorYmluZGlnaXQJCVswLTFdCisKK2Rl Y2ludGVnZXIJCXtkZWNkaWdpdH0rCitoZXhpbnRlZ2VyCQkwW3hYXXtoZXhkaWdpdH0rCitv Y3RpbnRlZ2VyCQkwW29PXXtvY3RkaWdpdH0rCitiaW5pbnRlZ2VyCQkwW2JCXXtiaW5kaWdp dH0rCisKK2hleGZhaWwJCQkwW3hYXQorb2N0ZmFpbAkJCTBbb09dCitiaW5mYWlsCQkJMFti Ql0KKworbnVtZXJpYwkJCSgoe2RlY2ludGVnZXJ9XC57ZGVjaW50ZWdlcn0/KXwoXC57ZGVj aW50ZWdlcn0pKQorbnVtZXJpY2ZhaWwJCXtkZWNkaWdpdH0rXC5cLgorCityZWFsCQkJKHtk ZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXVstK10/e2RlY2RpZ2l0fSsKK3JlYWxmYWlsCQko e2RlY2ludGVnZXJ9fHtudW1lcmljfSlbRWVdWy0rXQorCitkZWNpbnRlZ2VyX2p1bmsJe2Rl Y2ludGVnZXJ9e2lkZW50X3N0YXJ0fQoraGV4aW50ZWdlcl9qdW5rCXtoZXhpbnRlZ2VyfXtp ZGVudF9zdGFydH0KK29jdGludGVnZXJfanVuawl7b2N0aW50ZWdlcn17aWRlbnRfc3RhcnR9 CitiaW5pbnRlZ2VyX2p1bmsJe2JpbmludGVnZXJ9e2lkZW50X3N0YXJ0fQorbnVtZXJpY19q dW5rCXtudW1lcmljfXtpZGVudF9zdGFydH0KIHJlYWxfanVuawkJe3JlYWx9e2lkZW50X3N0 YXJ0fQogCi1wYXJhbQkJCVwke2ludGVnZXJ9Ci1wYXJhbV9qdW5rCQlcJHtpbnRlZ2VyfXtp ZGVudF9zdGFydH0KK3BhcmFtCQkJXCR7ZGVjaW50ZWdlcn0KK3BhcmFtX2p1bmsJCVwke2Rl Y2ludGVnZXJ9e2lkZW50X3N0YXJ0fQogCiAvKiBwc3FsLXNwZWNpZmljOiBjaGFyYWN0ZXJz IGFsbG93ZWQgaW4gdmFyaWFibGUgbmFtZXMgKi8KIHZhcmlhYmxlX2NoYXIJW0EtWmEtelwy MDAtXDM3N18wLTldCkBAIC04NDcsMTMgKzg2MiwzMSBAQCBvdGhlcgkJCS4KIAkJCQkJRUNI TzsKIAkJCQl9CiAKLXtpbnRlZ2VyfQkJewore2RlY2ludGVnZXJ9CXsKKwkJCQkJRUNITzsK KwkJCQl9Cit7aGV4aW50ZWdlcn0JeworCQkJCQlFQ0hPOworCQkJCX0KK3tvY3RpbnRlZ2Vy fQl7CisJCQkJCUVDSE87CisJCQkJfQore2JpbmludGVnZXJ9CXsKKwkJCQkJRUNITzsKKwkJ CQl9Cit7aGV4ZmFpbH0JCXsKIAkJCQkJRUNITzsKIAkJCQl9Ci17ZGVjaW1hbH0JCXsKK3tv Y3RmYWlsfQkJewogCQkJCQlFQ0hPOwogCQkJCX0KLXtkZWNpbWFsZmFpbH0Jewore2JpbmZh aWx9CQl7CisJCQkJCUVDSE87CisJCQkJfQore251bWVyaWN9CQl7CisJCQkJCUVDSE87CisJ CQkJfQore251bWVyaWNmYWlsfQl7CiAJCQkJCS8qIHRocm93IGJhY2sgdGhlIC4uLCBhbmQg dHJlYXQgYXMgaW50ZWdlciAqLwogCQkJCQl5eWxlc3MoeXlsZW5nIC0gMik7CiAJCQkJCUVD SE87CkBAIC04NjQsMTAgKzg5NywxOSBAQCBvdGhlcgkJCS4KIHtyZWFsZmFpbH0JCXsKIAkJ CQkJRUNITzsKIAkJCQl9Ci17aW50ZWdlcl9qdW5rfQl7Cit7ZGVjaW50ZWdlcl9qdW5rfQl7 CisJCQkJCUVDSE87CisJCQkJfQore2hleGludGVnZXJfanVua30JeworCQkJCQlFQ0hPOwor CQkJCX0KK3tvY3RpbnRlZ2VyX2p1bmt9CXsKKwkJCQkJRUNITzsKKwkJCQl9Cit7YmluaW50 ZWdlcl9qdW5rfQl7CiAJCQkJCUVDSE87CiAJCQkJfQote2RlY2ltYWxfanVua30Jewore251 bWVyaWNfanVua30JewogCQkJCQlFQ0hPOwogCQkJCX0KIHtyZWFsX2p1bmt9CQl7CmRpZmYg LS1naXQgYS9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvcGdjLmwgYi9zcmMvaW50ZXJm YWNlcy9lY3BnL3ByZXByb2MvcGdjLmwKaW5kZXggYzE0NWM5Njk4ZjFhLi5iNmFkYTZlZjFm NWUgMTAwNjQ0Ci0tLSBhL3NyYy9pbnRlcmZhY2VzL2VjcGcvcHJlcHJvYy9wZ2MubAorKysg Yi9zcmMvaW50ZXJmYWNlcy9lY3BnL3ByZXByb2MvcGdjLmwKQEAgLTU3LDcgKzU3LDcgQEAg c3RhdGljIGJvb2wJCWluY2x1ZGVfbmV4dDsKICNkZWZpbmUgc3RhcnRsaXQoKQkobGl0ZXJh bGJ1ZlswXSA9ICdcMCcsIGxpdGVyYWxsZW4gPSAwKQogc3RhdGljIHZvaWQgYWRkbGl0KGNo YXIgKnl0ZXh0LCBpbnQgeWxlbmcpOwogc3RhdGljIHZvaWQgYWRkbGl0Y2hhcih1bnNpZ25l ZCBjaGFyIHljaGFyKTsKLXN0YXRpYyBpbnQJcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29u c3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwpOworc3RhdGljIGludAlwcm9jZXNzX2lu dGVnZXJfbGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwgWVlTVFlQRSAqbHZhbCwgaW50IGJh c2UpOwogc3RhdGljIHZvaWQgcGFyc2VfaW5jbHVkZSh2b2lkKTsKIHN0YXRpYyBib29sIGVj cGdfaXNzcGFjZShjaGFyIGNoKTsKIHN0YXRpYyBib29sIGlzZGVmaW5lKHZvaWQpOwpAQCAt MzUxLDI1ICszNTEsNDAgQEAgb3BlcmF0b3IJCXtvcF9jaGFyc30rCiAgKiBVbmFyeSBtaW51 cyBpcyBub3QgcGFydCBvZiBhIG51bWJlciBoZXJlLiAgSW5zdGVhZCB3ZSBwYXNzIGl0IHNl cGFyYXRlbHkgdG8KICAqIHRoZSBwYXJzZXIsIGFuZCB0aGVyZSBpdCBnZXRzIGNvZXJjZWQg dmlhIGRvTmVnYXRlKCkuCiAgKgotICoge2RlY2ltYWxmYWlsfSBpcyB1c2VkIGJlY2F1c2Ug d2Ugd291bGQgbGlrZSAiMS4uMTAiIHRvIGxleCBhcyAxLCBkb3RfZG90LCAxMC4KKyAqIHtu dW1lcmljZmFpbH0gaXMgdXNlZCBiZWNhdXNlIHdlIHdvdWxkIGxpa2UgIjEuLjEwIiB0byBs ZXggYXMgMSwgZG90X2RvdCwgMTAuCiAgKgogICoge3JlYWxmYWlsfSBpcyBhZGRlZCB0byBw cmV2ZW50IHRoZSBuZWVkIGZvciBzY2FubmVyCiAgKiBiYWNrdXAgd2hlbiB0aGUge3JlYWx9 IHJ1bGUgZmFpbHMgdG8gbWF0Y2ggY29tcGxldGVseS4KICAqLwotZGlnaXQJCQlbMC05XQot Ci1pbnRlZ2VyCQkJe2RpZ2l0fSsKLWRlY2ltYWwJCQkoKHtkaWdpdH0qXC57ZGlnaXR9Kyl8 KHtkaWdpdH0rXC57ZGlnaXR9KikpCi1kZWNpbWFsZmFpbAkJe2RpZ2l0fStcLlwuCi1yZWFs CQkJKHtpbnRlZ2VyfXx7ZGVjaW1hbH0pW0VlXVstK10/e2RpZ2l0fSsKLXJlYWxmYWlsCQko e2ludGVnZXJ9fHtkZWNpbWFsfSlbRWVdWy0rXQotCi1pbnRlZ2VyX2p1bmsJe2ludGVnZXJ9 e2lkZW50X3N0YXJ0fQotZGVjaW1hbF9qdW5rCXtkZWNpbWFsfXtpZGVudF9zdGFydH0KK2Rl Y2RpZ2l0CQlbMC05XQoraGV4ZGlnaXQJCVswLTlBLUZhLWZdCitvY3RkaWdpdAkJWzAtN10K K2JpbmRpZ2l0CQlbMC0xXQorCitkZWNpbnRlZ2VyCQl7ZGVjZGlnaXR9KworaGV4aW50ZWdl cgkJMFt4WF17aGV4ZGlnaXR9Kworb2N0aW50ZWdlcgkJMFtvT117b2N0ZGlnaXR9KworYmlu aW50ZWdlcgkJMFtiQl17YmluZGlnaXR9KworCitoZXhmYWlsCQkJMFt4WF0KK29jdGZhaWwJ CQkwW29PXQorYmluZmFpbAkJCTBbYkJdCisKK251bWVyaWMJCQkoKHtkZWNpbnRlZ2VyfVwu e2RlY2ludGVnZXJ9Pyl8KFwue2RlY2ludGVnZXJ9KSkKK251bWVyaWNmYWlsCQl7ZGVjZGln aXR9K1wuXC4KKworcmVhbAkJCSh7ZGVjaW50ZWdlcn18e251bWVyaWN9KVtFZV1bLStdP3tk ZWNkaWdpdH0rCityZWFsZmFpbAkJKHtkZWNpbnRlZ2VyfXx7bnVtZXJpY30pW0VlXVstK10K KworZGVjaW50ZWdlcl9qdW5rCXtkZWNpbnRlZ2VyfXtpZGVudF9zdGFydH0KK2hleGludGVn ZXJfanVuawl7aGV4aW50ZWdlcn17aWRlbnRfc3RhcnR9CitvY3RpbnRlZ2VyX2p1bmsJe29j dGludGVnZXJ9e2lkZW50X3N0YXJ0fQorYmluaW50ZWdlcl9qdW5rCXtiaW5pbnRlZ2VyfXtp ZGVudF9zdGFydH0KK251bWVyaWNfanVuawl7bnVtZXJpY317aWRlbnRfc3RhcnR9CiByZWFs X2p1bmsJCXtyZWFsfXtpZGVudF9zdGFydH0KIAotcGFyYW0JCQlcJHtpbnRlZ2VyfQotcGFy YW1fanVuawkJXCR7aW50ZWdlcn17aWRlbnRfc3RhcnR9CitwYXJhbQkJCVwke2RlY2ludGVn ZXJ9CitwYXJhbV9qdW5rCQlcJHtkZWNpbnRlZ2VyfXtpZGVudF9zdGFydH0KIAogLyogc3Bl Y2lhbCBjaGFyYWN0ZXJzIGZvciBvdGhlciBkYm1zICovCiAvKiB3ZSBoYXZlIHRvIHJlYWN0 IGRpZmZlcmVudGx5IGluIGNvbXBhdCBtb2RlICovCkBAIC0zOTksOSArNDE0LDYgQEAgaW5j bHVkZV9uZXh0CVtpSV1bbk5dW2NDXVtsTF1bdVVdW2REXVtlRV1fW25OXVtlRV1beFhdW3RU XQogaW1wb3J0CQkJW2lJXVttTV1bcFBdW29PXVtyUl1bdFRdCiB1bmRlZgkJCVt1VV1bbk5d W2REXVtlRV1bZkZdCiAKLS8qIEMgdmVyc2lvbiBvZiBoZXggbnVtYmVyICovCi14Y2gJCQkJ MFt4WF1bMC05QS1GYS1mXSoKLQogY2NvbW1lbnQJCSIvLyIuKlxuCiAKIGlmCQkJCVtpSV1b ZkZdCkBAIC00MTQsNyArNDI2LDcgQEAgZW5kaWYJCQlbZUVdW25OXVtkRF1baUldW2ZGXQog c3RydWN0CQkJW3NTXVt0VF1bclJdW3VVXVtjQ11bdFRdCiAKIGV4ZWNfc3FsCQl7ZXhlY317 c3BhY2V9KntzcWx9e3NwYWNlfSoKLWlwZGlnaXQJCQkoe2RpZ2l0fXx7ZGlnaXR9e2RpZ2l0 fXx7ZGlnaXR9e2RpZ2l0fXtkaWdpdH0pCitpcGRpZ2l0CQkJKHtkZWNkaWdpdH18e2RlY2Rp Z2l0fXtkZWNkaWdpdH18e2RlY2RpZ2l0fXtkZWNkaWdpdH17ZGVjZGlnaXR9KQogaXAJCQkJ e2lwZGlnaXR9XC57aXBkaWdpdH1cLntpcGRpZ2l0fVwue2lwZGlnaXR9CiAKIC8qIHdlIG1p Z2h0IHdhbnQgdG8gcGFyc2UgYWxsIGNwcCBpbmNsdWRlIGZpbGVzICovCkBAIC05MzIsMTcg Kzk0NCwyMCBAQCBjcHBsaW5lCQkJe3NwYWNlfSojKFteaV1bQS1aYS16XSp8e2lmfXx7aWZk ZWZ9fHtpZm5kZWZ9fHtpbXBvcnR9KSgoXC9cKlteKi9dKlwqKwogfSAgLyogPFNRTD4gKi8K IAogPEMsU1FMPnsKLXtpbnRlZ2VyfQkJewotCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2Vy X2xpdGVyYWwoeXl0ZXh0LCAmYmFzZV95eWx2YWwpOwore2RlY2ludGVnZXJ9CXsKKwkJCQkJ cmV0dXJuIHByb2Nlc3NfaW50ZWdlcl9saXRlcmFsKHl5dGV4dCwgJmJhc2VfeXlsdmFsLCAx MCk7CiAJCQkJfQote2RlY2ltYWx9CQl7Cit7aGV4aW50ZWdlcn0JeworCQkJCQlyZXR1cm4g cHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0ICsgMiwgJmJhc2VfeXlsdmFsLCAxNik7 CisJCQkJfQore251bWVyaWN9CQl7CiAJCQkJCWJhc2VfeXlsdmFsLnN0ciA9IG1tX3N0cmR1 cCh5eXRleHQpOwogCQkJCQlyZXR1cm4gRkNPTlNUOwogCQkJCX0KLXtkZWNpbWFsZmFpbH0J ewore251bWVyaWNmYWlsfQl7CiAJCQkJCS8qIHRocm93IGJhY2sgdGhlIC4uLCBhbmQgdHJl YXQgYXMgaW50ZWdlciAqLwogCQkJCQl5eWxlc3MoeXlsZW5nIC0gMik7Ci0JCQkJCXJldHVy biBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsICZiYXNlX3l5bHZhbCk7CisJCQkJ CXJldHVybiBwcm9jZXNzX2ludGVnZXJfbGl0ZXJhbCh5eXRleHQsICZiYXNlX3l5bHZhbCwg MTApOwogCQkJCX0KIHtyZWFsfQkJCXsKIAkJCQkJYmFzZV95eWx2YWwuc3RyID0gbW1fc3Ry ZHVwKHl5dGV4dCk7CkBAIC05NTEsMjIgKzk2NiwzOCBAQCBjcHBsaW5lCQkJe3NwYWNlfSoj KFteaV1bQS1aYS16XSp8e2lmfXx7aWZkZWZ9fHtpZm5kZWZ9fHtpbXBvcnR9KSgoXC9cKlte Ki9dKlwqKwoge3JlYWxmYWlsfQkJewogCQkJCQkvKgogCQkJCQkgKiB0aHJvdyBiYWNrIHRo ZSBbRWVdWystXSwgYW5kIGZpZ3VyZSBvdXQgd2hldGhlciB3aGF0Ci0JCQkJCSAqIHJlbWFp bnMgaXMgYW4ge2ludGVnZXJ9IG9yIHtkZWNpbWFsfS4KKwkJCQkJICogcmVtYWlucyBpcyBh biB7ZGVjaW50ZWdlcn0gb3Ige251bWVyaWN9LgogCQkJCQkgKi8KIAkJCQkJeXlsZXNzKHl5 bGVuZyAtIDIpOwotCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0 LCAmYmFzZV95eWx2YWwpOworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwo eXl0ZXh0LCAmYmFzZV95eWx2YWwsIDEwKTsKIAkJCQl9CiB9IC8qIDxDLFNRTD4gKi8KIAog PFNRTD57Cit7b2N0aW50ZWdlcn0JeworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xp dGVyYWwoeXl0ZXh0ICsgMiwgJmJhc2VfeXlsdmFsLCA4KTsKKwkJCQl9Cit7YmluaW50ZWdl cn0JeworCQkJCQlyZXR1cm4gcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoeXl0ZXh0ICsgMiwg JmJhc2VfeXlsdmFsLCAyKTsKKwkJCQl9CisKIAkvKgotCSAqIE5vdGUgdGhhdCBzb21lIHRy YWlsaW5nIGp1bmsgaXMgdmFsaWQgaW4gQyAoc3VjaCBhcyAxMDBMTCksIHNvIHdlCi0JICog Y29udGFpbiB0aGlzIHRvIFNRTCBtb2RlLgorCSAqIE5vdGUgdGhhdCBzb21lIHRyYWlsaW5n IGp1bmsgaXMgdmFsaWQgaW4gQyAoc3VjaCBhcyAxMDBMTCksIHNvIHdlIGNvbnRhaW4KKwkg KiB0aGlzIHRvIFNRTCBtb2RlLgogCSAqLwote2ludGVnZXJfanVua30Jewore2RlY2ludGVn ZXJfanVua30JewogCQkJCQltbWZhdGFsKFBBUlNFX0VSUk9SLCAidHJhaWxpbmcganVuayBh ZnRlciBudW1lcmljIGxpdGVyYWwiKTsKIAkJCQl9Ci17ZGVjaW1hbF9qdW5rfQl7Cit7aGV4 aW50ZWdlcl9qdW5rfQl7CisJCQkJCW1tZmF0YWwoUEFSU0VfRVJST1IsICJ0cmFpbGluZyBq dW5rIGFmdGVyIG51bWVyaWMgbGl0ZXJhbCIpOworCQkJCX0KK3tvY3RpbnRlZ2VyX2p1bmt9 CXsKKwkJCQkJbW1mYXRhbChQQVJTRV9FUlJPUiwgInRyYWlsaW5nIGp1bmsgYWZ0ZXIgbnVt ZXJpYyBsaXRlcmFsIik7CisJCQkJfQore2JpbmludGVnZXJfanVua30JeworCQkJCQltbWZh dGFsKFBBUlNFX0VSUk9SLCAidHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwi KTsKKwkJCQl9Cit7bnVtZXJpY19qdW5rfQl7CiAJCQkJCW1tZmF0YWwoUEFSU0VfRVJST1Is ICJ0cmFpbGluZyBqdW5rIGFmdGVyIG51bWVyaWMgbGl0ZXJhbCIpOwogCQkJCX0KIHtyZWFs X2p1bmt9CQl7CkBAIC0xMDM2LDE5ICsxMDY3LDYgQEAgY3BwbGluZQkJCXtzcGFjZX0qIyhb XmldW0EtWmEtel0qfHtpZn18e2lmZGVmfXx7aWZuZGVmfXx7aW1wb3J0fSkoKFwvXCpbXiov XSpcKisKIAkJCQkJCQlyZXR1cm4gU19BTllUSElORzsKIAkJCQkJIH0KIDxDPntjY29tbWVu dH0JCXsgRUNITzsgfQotPEM+e3hjaH0JCQl7Ci0JCQkJCQljaGFyKiBlbmRwdHI7Ci0KLQkJ CQkJCWVycm5vID0gMDsKLQkJCQkJCWJhc2VfeXlsdmFsLml2YWwgPSBzdHJ0b3VsKChjaGFy ICopIHl5dGV4dCwgJmVuZHB0ciwgMTYpOwotCQkJCQkJaWYgKCplbmRwdHIgIT0gJ1wwJyB8 fCBlcnJubyA9PSBFUkFOR0UpCi0JCQkJCQl7Ci0JCQkJCQkJZXJybm8gPSAwOwotCQkJCQkJ CWJhc2VfeXlsdmFsLnN0ciA9IG1tX3N0cmR1cCh5eXRleHQpOwotCQkJCQkJCXJldHVybiBT Q09OU1Q7Ci0JCQkJCQl9Ci0JCQkJCQlyZXR1cm4gSUNPTlNUOwotCQkJCQl9CiA8Qz57Y3Bw aW5jbHVkZX0JCXsKIAkJCQkJCWlmIChzeXN0ZW1faW5jbHVkZXMpCiAJCQkJCQl7CkBAIC0x NTczLDE3ICsxNTkxLDE3IEBAIGFkZGxpdGNoYXIodW5zaWduZWQgY2hhciB5Y2hhcikKIH0K IAogLyoKLSAqIFByb2Nlc3Mge2ludGVnZXJ9LiAgTm90ZSB0aGlzIHdpbGwgYWxzbyBkbyB0 aGUgcmlnaHQgdGhpbmcgd2l0aCB7ZGVjaW1hbH0sCisgKiBQcm9jZXNzIHsqaW50ZWdlcn0u ICBOb3RlIHRoaXMgd2lsbCBhbHNvIGRvIHRoZSByaWdodCB0aGluZyB3aXRoIHtudW1lcmlj fSwKICAqIGllIGRpZ2l0cyBhbmQgYSBkZWNpbWFsIHBvaW50LgogICovCiBzdGF0aWMgaW50 Ci1wcm9jZXNzX2ludGVnZXJfbGl0ZXJhbChjb25zdCBjaGFyICp0b2tlbiwgWVlTVFlQRSAq bHZhbCkKK3Byb2Nlc3NfaW50ZWdlcl9saXRlcmFsKGNvbnN0IGNoYXIgKnRva2VuLCBZWVNU WVBFICpsdmFsLCBpbnQgYmFzZSkKIHsKIAlpbnQJCQl2YWw7CiAJY2hhcgkgICAqZW5kcHRy OwogCiAJZXJybm8gPSAwOwotCXZhbCA9IHN0cnRvaW50KHRva2VuLCAmZW5kcHRyLCAxMCk7 CisJdmFsID0gc3RydG9pbnQodG9rZW4sICZlbmRwdHIsIGJhc2UpOwogCWlmICgqZW5kcHRy ICE9ICdcMCcgfHwgZXJybm8gPT0gRVJBTkdFKQogCXsKIAkJLyogaW50ZWdlciB0b28gbGFy Z2UgKG9yIGNvbnRhaW5zIGRlY2ltYWwgcHQpLCB0cmVhdCBpdCBhcyBhIGZsb2F0ICovCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDIub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9pbnQyLm91dAppbmRleCAxMDljZjliYWFhY2EuLjM5YmQy Njg0YWQzZCAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQyLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDIub3V0CkBAIC0zMDQsMyAr MzA0LDIyIEBAIEZST00gKFZBTFVFUyAoLTIuNTo6bnVtZXJpYyksCiAgIDIuNSB8ICAgICAg ICAgIDMKICg3IHJvd3MpCiAKKy0tIG5vbi1kZWNpbWFsIGxpdGVyYWxzCitTRUxFQ1QgaW50 MiAnMGIxMDAxMDEnOworIGludDIgCistLS0tLS0KKyAgIDM3CisoMSByb3cpCisKK1NFTEVD VCBpbnQyICcwbzI3Myc7CisgaW50MiAKKy0tLS0tLQorICAxODcKKygxIHJvdykKKworU0VM RUNUIGludDIgJzB4NDJGJzsKKyBpbnQyIAorLS0tLS0tCisgMTA3MQorKDEgcm93KQorCmRp ZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDQub3V0IGIvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9pbnQ0Lm91dAppbmRleCBmYmNjMGU4ZDllNjguLjZlYzU0 ODM1YjRhYSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9pbnQ0Lm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDQub3V0CkBAIC00MzEsMyAr NDMxLDIyIEBAIFNFTEVDVCBsY20oKC0yMTQ3NDgzNjQ4KTo6aW50NCwgMTo6aW50NCk7IC0t IG92ZXJmbG93CiBFUlJPUjogIGludGVnZXIgb3V0IG9mIHJhbmdlCiBTRUxFQ1QgbGNtKDIx NDc0ODM2NDc6OmludDQsIDIxNDc0ODM2NDY6OmludDQpOyAtLSBvdmVyZmxvdwogRVJST1I6 ICBpbnRlZ2VyIG91dCBvZiByYW5nZQorLS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKK1NFTEVD VCBpbnQ0ICcwYjEwMDEwMSc7CisgaW50NCAKKy0tLS0tLQorICAgMzcKKygxIHJvdykKKwor U0VMRUNUIGludDQgJzBvMjczJzsKKyBpbnQ0IAorLS0tLS0tCisgIDE4NworKDEgcm93KQor CitTRUxFQ1QgaW50NCAnMHg0MkYnOworIGludDQgCistLS0tLS0KKyAxMDcxCisoMSByb3cp CisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50OC5vdXQgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2ludDgub3V0CmluZGV4IDFhZTIzY2YzZjk0Zi4u NzY1ZGYxZGU1MmFlIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2lu dDgub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvaW50OC5vdXQKQEAgLTky NywzICs5MjcsMjIgQEAgU0VMRUNUIGxjbSgoLTkyMjMzNzIwMzY4NTQ3NzU4MDgpOjppbnQ4 LCAxOjppbnQ4KTsgLS0gb3ZlcmZsb3cKIEVSUk9SOiAgYmlnaW50IG91dCBvZiByYW5nZQog U0VMRUNUIGxjbSg5MjIzMzcyMDM2ODU0Nzc1ODA3OjppbnQ4LCA5MjIzMzcyMDM2ODU0Nzc1 ODA2OjppbnQ4KTsgLS0gb3ZlcmZsb3cKIEVSUk9SOiAgYmlnaW50IG91dCBvZiByYW5nZQor LS0gbm9uLWRlY2ltYWwgbGl0ZXJhbHMKK1NFTEVDVCBpbnQ4ICcwYjEwMDEwMSc7CisgaW50 OCAKKy0tLS0tLQorICAgMzcKKygxIHJvdykKKworU0VMRUNUIGludDggJzBvMjczJzsKKyBp bnQ4IAorLS0tLS0tCisgIDE4NworKDEgcm93KQorCitTRUxFQ1QgaW50OCAnMHg0MkYnOwor IGludDggCistLS0tLS0KKyAxMDcxCisoMSByb3cpCisKZGlmZiAtLWdpdCBhL3NyYy90ZXN0 L3JlZ3Jlc3MvZXhwZWN0ZWQvbnVtZXJvbG9neS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL251bWVyb2xvZ3kub3V0CmluZGV4IDc3ZDQ4NDM0MTczYi4uZDk1YjI0YzdiMzI5 IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL251bWVyb2xvZ3kub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvbnVtZXJvbG9neS5vdXQKQEAgLTMs MTQgKzMsMzMgQEAKIC0tIFRlc3QgdmFyaW91cyBjb21iaW5hdGlvbnMgb2YgbnVtZXJpYyB0 eXBlcyBhbmQgZnVuY3Rpb25zLgogLS0KIC0tCi0tLSBUcmFpbGluZyBqdW5rIGluIG51bWVy aWMgbGl0ZXJhbHMKKy0tIG51bWVyaWMgbGl0ZXJhbHMKIC0tCitTRUxFQ1QgMGIxMDAxMDE7 CisgP2NvbHVtbj8gCistLS0tLS0tLS0tCisgICAgICAgMzcKKygxIHJvdykKKworU0VMRUNU IDBvMjczOworID9jb2x1bW4/IAorLS0tLS0tLS0tLQorICAgICAgMTg3CisoMSByb3cpCisK K1NFTEVDVCAweDQyRjsKKyA/Y29sdW1uPyAKKy0tLS0tLS0tLS0KKyAgICAgMTA3MQorKDEg cm93KQorCistLSBlcnJvciBjYXNlcwogU0VMRUNUIDEyM2FiYzsKIEVSUk9SOiAgdHJhaWxp bmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwgYXQgb3IgbmVhciAiMTIzYSIKIExJTkUg MTogU0VMRUNUIDEyM2FiYzsKICAgICAgICAgICAgICAgIF4KIFNFTEVDVCAweDBvOwotRVJS T1I6ICB0cmFpbGluZyBqdW5rIGFmdGVyIG51bWVyaWMgbGl0ZXJhbCBhdCBvciBuZWFyICIw eCIKK0VSUk9SOiAgdHJhaWxpbmcganVuayBhZnRlciBudW1lcmljIGxpdGVyYWwgYXQgb3Ig bmVhciAiMHgwbyIKIExJTkUgMTogU0VMRUNUIDB4MG87CiAgICAgICAgICAgICAgICBeCiBT RUxFQ1QgMV8yXzM7CkBAIC00NSw2ICs2NCw0MiBAQCBQUkVQQVJFIHAxIEFTIFNFTEVDVCAk MWE7CiBFUlJPUjogIHRyYWlsaW5nIGp1bmsgYWZ0ZXIgcGFyYW1ldGVyIGF0IG9yIG5lYXIg IiQxYSIKIExJTkUgMTogUFJFUEFSRSBwMSBBUyBTRUxFQ1QgJDFhOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBeCitTRUxFQ1QgMGI7CitFUlJPUjogIGludmFsaWQgYmluYXJ5 IGludGVnZXIgYXQgb3IgbmVhciAiMGIiCitMSU5FIDE6IFNFTEVDVCAwYjsKKyAgICAgICAg ICAgICAgIF4KK1NFTEVDVCAxYjsKK0VSUk9SOiAgdHJhaWxpbmcganVuayBhZnRlciBudW1l cmljIGxpdGVyYWwgYXQgb3IgbmVhciAiMWIiCitMSU5FIDE6IFNFTEVDVCAxYjsKKyAgICAg ICAgICAgICAgIF4KK1NFTEVDVCAwYjB4OworRVJST1I6ICB0cmFpbGluZyBqdW5rIGFmdGVy IG51bWVyaWMgbGl0ZXJhbCBhdCBvciBuZWFyICIwYjB4IgorTElORSAxOiBTRUxFQ1QgMGIw eDsKKyAgICAgICAgICAgICAgIF4KK1NFTEVDVCAwbzsKK0VSUk9SOiAgaW52YWxpZCBvY3Rh bCBpbnRlZ2VyIGF0IG9yIG5lYXIgIjBvIgorTElORSAxOiBTRUxFQ1QgMG87CisgICAgICAg ICAgICAgICBeCitTRUxFQ1QgMW87CitFUlJPUjogIHRyYWlsaW5nIGp1bmsgYWZ0ZXIgbnVt ZXJpYyBsaXRlcmFsIGF0IG9yIG5lYXIgIjFvIgorTElORSAxOiBTRUxFQ1QgMW87CisgICAg ICAgICAgICAgICBeCitTRUxFQ1QgMG8weDsKK0VSUk9SOiAgdHJhaWxpbmcganVuayBhZnRl ciBudW1lcmljIGxpdGVyYWwgYXQgb3IgbmVhciAiMG8weCIKK0xJTkUgMTogU0VMRUNUIDBv MHg7CisgICAgICAgICAgICAgICBeCitTRUxFQ1QgMHg7CitFUlJPUjogIGludmFsaWQgaGV4 YWRlY2ltYWwgaW50ZWdlciBhdCBvciBuZWFyICIweCIKK0xJTkUgMTogU0VMRUNUIDB4Owor ICAgICAgICAgICAgICAgXgorU0VMRUNUIDF4OworRVJST1I6ICB0cmFpbGluZyBqdW5rIGFm dGVyIG51bWVyaWMgbGl0ZXJhbCBhdCBvciBuZWFyICIxeCIKK0xJTkUgMTogU0VMRUNUIDF4 OworICAgICAgICAgICAgICAgXgorU0VMRUNUIDB4MHk7CitFUlJPUjogIHRyYWlsaW5nIGp1 bmsgYWZ0ZXIgbnVtZXJpYyBsaXRlcmFsIGF0IG9yIG5lYXIgIjB4MHkiCitMSU5FIDE6IFNF TEVDVCAweDB5OworICAgICAgICAgICAgICAgXgogLS0KIC0tIFRlc3QgaW1wbGljaXQgdHlw ZSBjb252ZXJzaW9ucwogLS0gVGhpcyBmYWlscyBmb3IgUG9zdGdyZXMgdjYuMSAoYW5kIGVh cmxpZXI/KQpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50Mi5zcWwgYi9z cmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQyLnNxbAppbmRleCBlYTI5MDY2Yjc4ZWUuLjQwNTYx N2ZhNzgyOSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50Mi5zcWwKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvaW50Mi5zcWwKQEAgLTEwNCwzICsxMDQsMTAgQEAK ICAgICAgICAgICAgICAoMC41OjpudW1lcmljKSwKICAgICAgICAgICAgICAoMS41OjpudW1l cmljKSwKICAgICAgICAgICAgICAoMi41OjpudW1lcmljKSkgdCh4KTsKKworCistLSBub24t ZGVjaW1hbCBsaXRlcmFscworCitTRUxFQ1QgaW50MiAnMGIxMDAxMDEnOworU0VMRUNUIGlu dDIgJzBvMjczJzsKK1NFTEVDVCBpbnQyICcweDQyRic7CmRpZmYgLS1naXQgYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9pbnQ0LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDQuc3Fs CmluZGV4IGYxOTA3N2YzZGEyMS4uMTg0M2I3MThhNzA1IDEwMDY0NAotLS0gYS9zcmMvdGVz dC9yZWdyZXNzL3NxbC9pbnQ0LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ0 LnNxbApAQCAtMTY0LDMgKzE2NCwxMCBAQAogCiBTRUxFQ1QgbGNtKCgtMjE0NzQ4MzY0OCk6 OmludDQsIDE6OmludDQpOyAtLSBvdmVyZmxvdwogU0VMRUNUIGxjbSgyMTQ3NDgzNjQ3Ojpp bnQ0LCAyMTQ3NDgzNjQ2OjppbnQ0KTsgLS0gb3ZlcmZsb3cKKworCistLSBub24tZGVjaW1h bCBsaXRlcmFscworCitTRUxFQ1QgaW50NCAnMGIxMDAxMDEnOworU0VMRUNUIGludDQgJzBv MjczJzsKK1NFTEVDVCBpbnQ0ICcweDQyRic7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9pbnQ4LnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2ludDguc3FsCmluZGV4 IDM4Yjc3MTk2NGQ3OS4uZGQ4MjA0MGIwYjM3IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9pbnQ4LnNxbAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9pbnQ4LnNxbApA QCAtMjQ1LDMgKzI0NSwxMCBAQAogCiBTRUxFQ1QgbGNtKCgtOTIyMzM3MjAzNjg1NDc3NTgw OCk6OmludDgsIDE6OmludDgpOyAtLSBvdmVyZmxvdwogU0VMRUNUIGxjbSg5MjIzMzcyMDM2 ODU0Nzc1ODA3OjppbnQ4LCA5MjIzMzcyMDM2ODU0Nzc1ODA2OjppbnQ4KTsgLS0gb3ZlcmZs b3cKKworCistLSBub24tZGVjaW1hbCBsaXRlcmFscworCitTRUxFQ1QgaW50OCAnMGIxMDAx MDEnOworU0VMRUNUIGludDggJzBvMjczJzsKK1NFTEVDVCBpbnQ4ICcweDQyRic7CmRpZmYg LS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9udW1lcm9sb2d5LnNxbCBiL3NyYy90ZXN0 L3JlZ3Jlc3Mvc3FsL251bWVyb2xvZ3kuc3FsCmluZGV4IGJlN2Q2ZGZlMGMyNi4uMGUxMmJj YzdiNzA5IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9udW1lcm9sb2d5LnNx bAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9udW1lcm9sb2d5LnNxbApAQCAtMywxMCAr MywxNiBAQAogLS0gVGVzdCB2YXJpb3VzIGNvbWJpbmF0aW9ucyBvZiBudW1lcmljIHR5cGVz IGFuZCBmdW5jdGlvbnMuCiAtLQogCisKIC0tCi0tLSBUcmFpbGluZyBqdW5rIGluIG51bWVy aWMgbGl0ZXJhbHMKKy0tIG51bWVyaWMgbGl0ZXJhbHMKIC0tCiAKK1NFTEVDVCAwYjEwMDEw MTsKK1NFTEVDVCAwbzI3MzsKK1NFTEVDVCAweDQyRjsKKworLS0gZXJyb3IgY2FzZXMKIFNF TEVDVCAxMjNhYmM7CiBTRUxFQ1QgMHgwbzsKIFNFTEVDVCAxXzJfMzsKQEAgLTE4LDYgKzI0 LDE5IEBACiBTRUxFQ1QgMC4wZSthOwogUFJFUEFSRSBwMSBBUyBTRUxFQ1QgJDFhOwogCitT RUxFQ1QgMGI7CitTRUxFQ1QgMWI7CitTRUxFQ1QgMGIweDsKKworU0VMRUNUIDBvOworU0VM RUNUIDFvOworU0VMRUNUIDBvMHg7CisKK1NFTEVDVCAweDsKK1NFTEVDVCAxeDsKK1NFTEVD VCAweDB5OworCisKIC0tCiAtLSBUZXN0IGltcGxpY2l0IHR5cGUgY29udmVyc2lvbnMKIC0t IFRoaXMgZmFpbHMgZm9yIFBvc3RncmVzIHY2LjEgKGFuZCBlYXJsaWVyPykKCmJhc2UtY29t bWl0OiAwNmRiZDYxOWJmYmZlMDNmZWZhNzIyMzgzODY5MGQ0MDEyZjg3NGFkCi0tIAoyLjM3 LjMKCg== --------------W0C2NDqXHAPCfvUE5llrFarU--