From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,T_PDS_PRO_TLD autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 13549 invoked from network); 2 Nov 2022 17:14:27 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 2 Nov 2022 17:14:27 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1667409267; b=o42Oo6d5P+U+OgdGM660/f76cMqjfsHb49SigTwcNKhRpOdtiKRiL1xqidL1owG9ZBERh24CqA Oe0Ek/QQLLtJviZuAwaZotIJQQ+TVTOTD9/Op0rpfuZIzxYTAVMF1etqx2TsnH79KEhj3jwUB4 gOVFE9Z0M2V88m3pDKRjbPETDW/fLoUNgsHfG4h7LlOotRkMq6uUGXStFNFtupYNxg/7U79f8T 6RQ/kOO7Y9msAInU6uWsUeEt31NWRIDHzNd5bRL5a6TczfxgqsP3WDEUo+FBEcfbwKUNi0dqe7 rii4Ze1Hw/dOjTHVcuc/j0C5sZnbPQPggSkJIjdZ+mGzSg==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (iris.zentaur.org) smtp.remote-ip=198.58.127.206; dkim=pass header.d=zentaur.org header.s=dkim20200120 header.a=rsa-sha256; dmarc=pass header.from=zentaur.org; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1667409267; bh=UBqCj5dx0FOZYC07isjMxF9Acqe1vNuWdd9MWeWsIRI=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Subject:From:To:MIME-Version:Date:Message-ID:Content-Type: DKIM-Signature:DKIM-Signature; b=pAOPKEjNFXTfEmiMkYijrNZGPtwjINEBWv5bp969KM9dpx7HNAYzcVfOnUPjfsnBZ7O3VihwS7 f5Ynip3IkvQiL/4qRSmhemDTSNwRrE0g89Sp5aQjUFJW9Z0vIR/zAITnJSLgIqzPO+52iAp9kV ywcSUzZTopmSTj6qDBxT3z5WG689gWZVpQlRK2RvbGvgu0ki4oP1NCIRHit0fiIr2Lg2UrWSw4 EBvMfiZsKdb7BKHyGK8ieAkaWY5iq8wqjMDYYTwBbBmqmggsJDG0x2JzzB2/IOl8KTFnTi1Rsn u+A/S+z9gZEbK2LCUen+WMVit5a3nJoTzA3IRMm/KdcGyA==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Subject:From:To:MIME-Version:Date: Message-ID:Content-Type:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=UBqCj5dx0FOZYC07isjMxF9Acqe1vNuWdd9MWeWsIRI=; b=asavZTH2K9OgaPhJL5BAZ3UGnU ByJ0lZLtzuvKiq9nIu8T57jP+9zBgUSkd6KtCe9RzYjiKV4syLSy+Sl8dEj5WKgr/Rv1Vsg0XU5J1 0xaPGDwuIMPc/oM7D4ZWEqcfv8zodqhBP3A0Ws0zLM1wj0rPCpVI4VJbtL5nk/nTU91D3hnltR0T9 pc2AO0tR2LQ2cxeUCTB9jmQUdUYJM3wKF3NN9pVs+p6Qllm+n88+zVU8E3pInU/ng/AbL9fGBDMeL 8o13m/JU+4ZdgAl1G7EQrMBUGlVDK6rqdnHF0Hp+M3rYUN0kplrmGY6/FKxESSHtmPrgf1N1pR35Z sfUoGw0Q==; Received: by zero.zsh.org with local id 1oqHJr-0003qv-Do; Wed, 02 Nov 2022 17:14:27 +0000 Authentication-Results: zsh.org; iprev=pass (iris.zentaur.org) smtp.remote-ip=198.58.127.206; dkim=pass header.d=zentaur.org header.s=dkim20200120 header.a=rsa-sha256; dmarc=pass header.from=zentaur.org; arc=none Received: from iris.zentaur.org ([198.58.127.206]:33722) by zero.zsh.org with esmtps (TLS1.2:ECDHE-RSA-AES256-GCM-SHA384:256) id 1oqHJX-0003WJ-Mg; Wed, 02 Nov 2022 17:14:10 +0000 Received: from iris.zentaur.org (localhost [127.0.0.1]) by iris.zentaur.org (Postfix) with ESMTP id 4N2YQQ2ssRz3wZj for ; Wed, 2 Nov 2022 17:14:06 +0000 (UTC) Authentication-Results: iris.zentaur.org (amavisd-new); dkim=pass (2048-bit key) reason="pass (just generated, assumed good)" header.d=zentaur.org DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=zentaur.org; h= subject:subject:from:from:to:content-language:user-agent :mime-version:date:date:message-id:content-type:content-type; s= dkim20200120; t=1667409242; x=1667412843; bh=UBqCj5dx0FOZYC07isj MxF9Acqe1vNuWdd9MWeWsIRI=; b=ZUalCFdApbprRz9nwyPG8uS9lImSzqgfy4H VRmai8cp5ggBbRzIcYc9TZD3qQ2RKfYKL6R34n9XBwo5fM19b+wrXg6KAYCUY2Fj n5R2tdQIHHOzRX71nQwffZgJ/qEI8mLnoYw4nPSf4Mg+fvTA29FR7g+47Ogbp7yj 0L9mQwi8YrYBl1JIc7ixVVaeLvDXgrGZ80+w7b9IF+G1EKqkM3w5kJ/5AH9SSJll E+/nFboxCz/YxaeDSXU/pFU2hcSl136NlezsrozeEMgpW8ZDScXSVHTO5+BxERec rKSqQwr8lyLnTZl1yf8sBfnjLUNIQJWgerm6MKz7gAhQMx1R2Vg== X-Virus-Scanned: amavisd-new at iris.zentaur.org Received: from iris.zentaur.org ([127.0.0.1]) by iris.zentaur.org (iris.zentaur.org [127.0.0.1]) (amavisd-new, port 10026) with ESMTP id UucqsPGsMC8h for ; Wed, 2 Nov 2022 17:14:02 +0000 (UTC) Received: from [192.168.72.136] (unknown [136.50.213.220]) by iris.zentaur.org (Postfix) with ESMTPSA id 4N2YQL62Rwz3wZb for ; Wed, 2 Nov 2022 17:14:02 +0000 (UTC) Content-Type: multipart/mixed; boundary="------------WnxevEkM2pRY9gPthZ53f1Ag" Message-ID: <741b77be-b679-76cc-f8ec-49c9d89323c1@zentaur.org> Date: Wed, 2 Nov 2022 12:13:31 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Thunderbird/102.3.3 Content-Language: en-US To: "zsh-workers@zsh.org" From: Clinton Bunch Subject: [PATCH] zsh/random module X-Antivirus: Avast (VPS 221102-10, 11/2/2022), Outbound message X-Antivirus-Status: Clean X-Seq: 50858 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: , List-Subscribe: , List-Unsubscribe: , List-Post: List-Owner: List-Archive: This is a multi-part message in MIME format. --------------WnxevEkM2pRY9gPthZ53f1Ag Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable This has been tested on the following platforms against the git/master=20 (and 5.5.1) Solaris 11.4 (x86) Developer Studio FreeBSD 13.1 clang Centos 7 gcc Rocky 8 gcc Rocky 9 gcc HP-UX 11.31 HP ANSI C compiler I'd appreciate if someone would test it on a few other platforms and try=20 to break it.=C2=A0 I tried everything I could think of, but... --------------WnxevEkM2pRY9gPthZ53f1Ag Content-Type: text/plain; charset=UTF-8; name="zsh-random.patch.txt" Content-Disposition: attachment; filename="zsh-random.patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL0RvYy9NYWtlZmlsZS5pbiBiL0RvYy9NYWtlZmlsZS5pbgppbmRleCAy M2U1ZmM3ZTIuLmJhY2VlN2MyNyAxMDA2NDQKLS0tIGEvRG9jL01ha2VmaWxlLmluCisrKyBi L0RvYy9NYWtlZmlsZS5pbgpAQCAtNjYsNyArNjYsNyBAQCBac2gvbW9kX2V4YW1wbGUueW8g WnNoL21vZF9maWxlcy55byBac2gvbW9kX2xhbmdpbmZvLnlvIFwKIFpzaC9tb2RfbWFwZmls ZS55byBac2gvbW9kX21hdGhmdW5jLnlvIFwKIFpzaC9tb2RfbmVhcmNvbG9yLnlvIFpzaC9t b2RfbmV3dXNlci55byBcCiBac2gvbW9kX3BhcmFtZXRlci55byBac2gvbW9kX3BjcmUueW8g WnNoL21vZF9wcml2YXRlLnlvIFwKLVpzaC9tb2RfcmVnZXgueW8gWnNoL21vZF9zY2hlZC55 byBac2gvbW9kX3NvY2tldC55byBcCitac2gvbW9kX3JlZ2V4LnlvIFpzaC9tb2RfcmFuZG9t LnlvIFpzaC9tb2Rfc2NoZWQueW8gWnNoL21vZF9zb2NrZXQueW8gXAogWnNoL21vZF9zdGF0 LnlvICBac2gvbW9kX3N5c3RlbS55byBac2gvbW9kX3RjcC55byBcCiBac2gvbW9kX3Rlcm1j YXAueW8gWnNoL21vZF90ZXJtaW5mby55byBcCiBac2gvbW9kX3dhdGNoLnlvIFwKZGlmZiAt LWdpdCBhL0RvYy9ac2gvbW9kX3JhbmRvbS55byBiL0RvYy9ac2gvbW9kX3JhbmRvbS55bwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmMxODY5NWRkMgotLS0gL2Rl di9udWxsCisrKyBiL0RvYy9ac2gvbW9kX3JhbmRvbS55bwpAQCAtMCwwICsxLDYxIEBACitD T01NRU5UKCFNT0QhenNoL3JhbmRvbQorU29tZSBIaWdoLXF1YWxpdHkgcmFuZG9tbmVzcyBj b21tYW5kcywgcGFyYW1ldGVycywgYW5kIGZ1bmN0aW9ucy4KKyFNT0QhKQorVGhlIHR0KHpz aC9yYW5kb20pIG1vZHVsZSBnZXRzIHJhbmRvbSBkYXRhIGZyb20gdGhlIGtlcm5lbCByYW5k b20gcG9vbC4gSWYgbm8gCitrZXJuZWwgcmFuZG9tIHBvb2wgY2FuIGJlIGZvdW5kLCB0aGUg bW9kdWxlIHdpbGwgbm90IGxvYWQuCisKKworc3Vic2VjdChCdWlsdGlucykKKworc3RhcnRp dGVtKCkKK2ZpbmRleChnZXRyYW5kb20pCitjaW5kZXgocmFuZG9tIGRhdGEsIHByaW50aW5n LCBhcnJheSkKK3hpdGVtKHR0KGdldHJhbmRvbSkgWyB0dCgtbCkgdmFyKGxlbmd0aCkgXSBb IHR0KC1yKSBdIFsgdHQoLXMpIHZhcihzY2FsYXIpIF0gW3R0KC1pKSBdIFsgdHQoLWEpIHZh cihhcnJheSkgXSBbIHR0KC1VKSB2YXIodXBwZXJfYm91bmQpIF0gWyB0dCgtTCkgdmFyKGxv d2VyX2JvdW5kKSBdKSAKK05MKClPdXRwdXRzIGEgcmFuZG9tIGhleC1lbmNvZGVkIHN0cmlu ZyBvZiB2YXIobGVuZ3RoKSBieXRlcyBieSBkZWZhdWx0LiBOTCgpCisKKworc3RhcnRpdGVt KCkKK2l0ZW0odHQoLWwpIHZhcihsZW5ndGgpKSAoCitTZXQgdGhlIGxlbmd0aCBvZiB0aGUg cmV0dXJuZWQgcmFuZG9tIGRhdGEuIERlZmF1bHRzIHRvIDguCispCitpdGVtKHR0KC1yKSkg KAorUmV0dXJuIHRoZSByYXcgYnl0ZXMgcmF0aGVyIHRoYW4gYSBoZXgtZW5jb2RlZCBzdHJp bmcuCispCitpdGVtKHR0KC1zKSB2YXIoc2NhbGFyKSkgKAorU2F2ZSB0aGUgcmFuZG9tIGRh dGEgaW4gdmFyKHNjYWxhcikgaW5zdGVhZCBvZiBwcmludGluZyBpdC4gT25seSB1c2VmdWwg aW4gc3RyaW5nIG1vZGUgb3Igd2hlbiB2YXIobGVuZ3RoKSBpcyAxLgorKQoraXRlbSh0dCgt YSkgdmFyKGFycmF5KSkgKAorU2F2ZSB0aGUgcmFuZG9tIGRhdGEgYXMgYW4gYXJyYXkgdmFy KGFycmF5KSBvZiB2YXIobGVuZ3RoKSBjb250YWluaW5nIGEKK2RlY2ltYWwgcmVwcmVzZW50 YXRpb24gb2YgdGhlIGludGVnZXJzIExQQVIoKXR0KC1pKSwgdHQoLUwpLCBvciB0dCgtVSlS UEFSKCkgCitvciBpbmRpdmlkdWFsIGJ5dGVzLgorKQoraXRlbSh0dCgtaSkpICgKK1Byb2R1 Y2VzIHZhcihsZW5ndGgpIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2Vycy4KKykKK2l0ZW0odHQo LVUpIHZhcih1cHBlcl9ib3VuZCkpICgKK091dHB1dCB2YXIobGVuZ3RoKSBpbnRlZ2VycyBi ZXR3ZWVuIHZhcihsb3dlcl9ib3VuZCkgYW5kIHZhcih1cHBlcl9ib3VuZCkuIAorRGVmYXVs dHMgdG8gNCwyOTQsOTY3LDI5Ni4KKykKK2l0ZW0odHQoLUwpIHZhcihsb3dlcl9ib3VuZCkp ICgKK091dHB1dCB2YXIobGVuZ3RoKSBpbnRlZ2VycyBiZXR3ZWVuIHZhcihsb3dlcl9ib3Vu ZCkgYW5kIHZhcih1cHBlcl9ib3VuZCkuCitEZWZhdWx0cyB0byAwLgorKQorZW5kaXRlbSgp CitlbmRpdGVtKCkKKworc3Vic2VjdChQYXJhbWV0ZXJzKQorCitzdGFydGl0ZW0oKQordmlu ZGV4KFNSQU5ET00pCitpdGVtKHR0KFNSQU5ET00pKSAoCitBIHJhbmRvbSBwb3NpdGl2ZSAz Mi1iaXQgaW50ZWdlciBiZXR3ZWVuIDAgYW5kIDQsMjk0LDk2NywyOTUKKykKK2VuZGl0ZW0o KQorCitzdWJzZWN0KE1hdGggRnVuY3Rpb25zKQorCitzdGFydGl0ZW0oKQoraXRlbSh0dCh6 cmFuZG9tK0xQQVIoKVJQQVIoKSkpICgKK1JldHVybnMgYSByYW5kb20gZmxvYXRpbmcgcG9p bnQgbnVtYmVyIGJldHdlZW4gMCBhbmQgMS4KKykKK2VuZGl0ZW0oKQpkaWZmIC0tZ2l0IGEv U3JjL01vZHVsZXMvcmFuZG9tLmMgYi9TcmMvTW9kdWxlcy9yYW5kb20uYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjJjMTg3MTFmZgotLS0gL2Rldi9udWxsCisr KyBiL1NyYy9Nb2R1bGVzL3JhbmRvbS5jCkBAIC0wLDAgKzEsNjU5IEBACisvKgorICogcmFu ZG9tLmMgLSBtb2R1bGUgdG8gYWNjZXNzIGtlcm5lbCByYW5kb20gc291cmNlcy4KKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiB6c2gsIHRoZSBaIHNoZWxsLgorICoKKyAqIENvcHly aWdodCAoYykgMjAyMiBDbGludG9uIEJ1bmNoCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBh Z3JlZW1lbnQgYW5kIHdpdGhvdXQKKyAqIGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1 c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgYW5k IHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSBmb3Ig YW55CisgKiBwdXJwb3NlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90 aWNlIGFuZCB0aGUgZm9sbG93aW5nCisgKiB0d28gcGFyYWdyYXBocyBhcHBlYXIgaW4gYWxs IGNvcGllcyBvZiB0aGlzIHNvZnR3YXJlLgorICoKKyAqIEluIG5vIGV2ZW50IHNoYWxsIENs aW50b24gQnVuY2ggb3IgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cCBiZSBsaWFibGUKKyAq IHRvIGFueSBwYXJ0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRh bCwgb3IgY29uc2VxdWVudGlhbAorICogZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNl IG9mIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLAorICogZXZlbiBpZiBD bGludG9uIEJ1bmNoIGFuZCB0aGUgWnNoIERldmVsb3BtZW50IEdyb3VwIGhhdmUgYmVlbiBh ZHZpc2VkIG9mCisgKiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisgKgorICog Q2xpbnRvbiBCdW5jaCBhbmQgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cCBzcGVjaWZpY2Fs bHkgZGlzY2xhaW0gYW55CisgKiB3YXJyYW50aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGlt aXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZgorICogbWVyY2hhbnRhYmlsaXR5 IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBzb2Z0d2FyZQor ICogcHJvdmlkZWQgaGVyZXVuZGVyIGlzIG9uIGFuICJhcyBpcyIgYmFzaXMsIGFuZCBDbGlu dG9uIEJ1bmNoIGFuZCB0aGUKKyAqIFpzaCBEZXZlbG9wbWVudCBHcm91cCBoYXZlIG5vIG9i bGlnYXRpb24gdG8gcHJvdmlkZSBtYWludGVuYW5jZSwKKyAqIHN1cHBvcnQsIHVwZGF0ZXMs IGVuaGFuY2VtZW50cywgb3IgbW9kaWZpY2F0aW9ucy4KKyAqCisgKi8KKworI2luY2x1ZGUg InJhbmRvbS5tZGgiCisjaW5jbHVkZSAicmFuZG9tLnBybyIKKworI2luY2x1ZGUgPHN5cy90 eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNp bmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8c3Rk Ym9vbC5oPgorCisjaWZkZWYgSEFWRV9TWVNfUkFORE9NX0gKKyNpbmNsdWRlIDxzeXMvcmFu ZG9tLmg+CisjZW5kaWYKKworLyogU2ltcGxpZnkgc2VsZWN0IFVSQU5ET00gc3BlY2lmaWMg Y29kZSAqLworI2lmICFkZWZpbmVkKEhBVkVfQVJDNFJBTkRPTSkgJiYgIWRlZmluZWQoSEFW RV9HRVRSQU5ET00pCisjZGVmaW5lIFVTRV9VUkFORE9NCisjZW5kaWYKKworLyogYnVmZmVy IHRvIHByZS1sb2FkIGludGVnZXJzIGZvciBTUkFORE9NIHRvIGxlc3NlbiB0aGUgY29udGV4 dCBzd2l0Y2hlcyAqLwordWludDMyX3QgcmFuZF9idWZmWzhdOworc3RhdGljIGludCBidWZf Y250ID0gLTE7CisKKyNpZmRlZiBVU0VfVVJBTkRPTQorLyogRmlsZSBkZXNjcmlwdG9yIGZv ciAvZGV2L3VyYW5kb20gKi8KK2ludCByYW5kZmQgPSAtMTsKKyNlbmRpZiAvKiBVU0VfVVJB TkRPTSAqLworCisvKgorICogIEZ1bmN0aW9uIHRha2VzIGFuIGlucHV0IGJ1ZmZlciBhbmQg Y29udmVydHMgdGhlIGNoYXJhY3RlcnMgdG8gaGV4IGFuZAorICogIHBsYWNlcyB0aGVtIGlu IGFuIG91dGJ1dCBidWZmZXIgdHdpY2UgdGhlIHNpemUuIFJldHVybnMgLTEgaWYgaXQgY2Fu J3QuCisgKiAgUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgb3V0cHV0IG90aGVyd2lzZS4KKyAq LworCisvKiovCitzdGF0aWMgaW50Cit6dHJfdG9faGV4KGNoYXIgKm91dCwgc2l6ZV90IG91 dGxlbiwgdWludDhfdCAqaW5wdXQsIHNpemVfdCBpbmxlbikKK3sKKyAgICBpbnQgaSA9IDAs IGogPSAwOworCisgICAgaWYgKG91dGxlbiA8IChpbmxlbiAqIDIgKyAxKSkKKwlyZXR1cm4g LTE7CisKKyAgICBmb3IoaSA9IDAsIGogPSAwOyBpIDwgaW5sZW47IGkrKywgais9Mikgewor CWlmIChqIDwgb3V0bGVuKSB7CisJICAgIHNwcmludGYoKGNoYXIgKikob3V0ICsgaiksIiUw MlgiLGlucHV0W2ldKTsKKwl9IGVsc2UgeworCSAgICByZXR1cm4gLTE7CisJfQorICAgIH0K KyAgICBvdXRbal09J1wwJzsKKyAgICByZXR1cm4gajsKK30KKworLyoqLworc3RhdGljIHNz aXplX3QKK2dldHJhbmRvbV9idWZmZXIodm9pZCAqYnVmLCBzaXplX3QgbGVuKQoreworICAg IHNzaXplX3QgcmV0OworICAgIHNpemVfdCAgdmFsICAgID0gMDsKKyAgICB1aW50OF90ICpi dWZwdHIgPSBidWY7CisKKyAgICBkbyB7CisjaWZkZWYgSEFWRV9BUkM0UkFORE9NCisJLyog QXBwYXJlbnRseSwgdGhlIGNyZWF0ZXJzIG9mIGFyYzRyYW5kb20gZGlkbid0IGJlbGlldmUg aW4gZXJyb3JzICovCisgICAgICAgIGFyYzRyYW5kb21fYnVmKGJ1ZixsZW4pOworICAgICAg ICByZXQgPSBsZW47CisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUUkFORE9NKQorICAgICAgICBy ZXQ9Z2V0cmFuZG9tKGJ1ZnB0ciwobGVuIC0gdmFsKSwwKTsKKyNlbHNlCisgICAgICAgIHJl dD1yZWFkKHJhbmRmZCxidWZwdHIsKGxlbiAtIHZhbCkpOworI2VuZGlmCisgICAgICAgIGlm IChyZXQgPCAwKSB7CisJICAgIGlmIChlcnJubyAhPSBFSU5UUiB8fCBlcnJmbGFnIHx8IHJl dGZsYWcgfHwgYnJlYWtzIHx8IGNvbnRmbGFnKSB7CisJCXp3YXJuKCJVbmFibGUgdG8gZ2V0 IHJhbmRvbSBkYXRhOiAlZSIsIGVycm5vKTsKKwkgICAgICAgIHJldHVybiAtMTsKKwkgICAg fQorICAgICAgICB9CisJYnVmcHRyICs9IHJldDsKKwl2YWwgICAgKz0gcmV0OworICAgIH0g d2hpbGUgKHJldCA8IGxlbik7CisgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIEltcGxl bWVudHMgdGhlIGdldHJhbmRvbSBidWlsdGluIHRvIHJldHVybiBhIHN0cmluZyBvZiByYW5k b20gYnl0ZXMgb2YKKyAqIHVzZXItc3BlY2lmaWVkIGxlbmd0aC4gIEl0IGVpdGhlciBwcmlu dHMgdGhlbSB0byBzdGRvdXQgb3IgcmV0dXJucyB0aGVtCisgKiBpbiBhIHBhcmFtZXRlciBw YXNzZWQgb24gdGhlIGNvbW1hbmQgbGluZS4KKyAqCisgKi8KKworLyoqLworc3RhdGljIGlu dAorYmluX2dldHJhbmRvbShjaGFyICpuYW1lLCBjaGFyICoqYXJndiwgT3B0aW9ucyBvcHMs IGludCBmdW5jKQoreworCisgICAgenVsb25nIGxlbiAgICAgID0gODsKKyAgICBzaXplX3Qg Ynl0ZV9sZW4gPSAwLCBvdXRsZW47IC8qIGJ1ZmZlciBsZW5ndGhzICovCisgICAgaW50ICAg IHBhZCAgICAgID0gMDsKKworICAgIGJvb2wgaW50ZWdlcl9vdXQgPSBmYWxzZTsgICAgICAg ICAvKiBib29sZWFuICovCisgICAgaW50IGksIGo7ICAgICAgICAgICAgICAgICAgICAgICAv Kmxvb3AgY291bnRlcnMgKi8KKworICAgIC8qbWF4aW11bSBzdHJpbmcgbGVuZ3RoIG9mIGEg MzItYml0IGludGVnZXIgKyBudWxsICovCisgICAgY2hhciBpbnQyc3RyWzExXTsKKworICAg IHVpbnQ4X3QgICAqYnVmOworICAgIHVpbnQzMl90ICAqaW50X2J1ZiA9IE5VTEwsIGludF92 YWwgPSAwOyAvKiBidWZmZXIgZm9yIGludGVnZXIgcmV0dXJuICovCisKKyAgICBjaGFyICpz Y2FsYXIgPSBOVUxMLCAqYXJybmFtZSA9IE5VTEw7IC8qIHBhcmFtZXRlciBuYW1lcyAqLwor CisgICAgY2hhciAqb3V0YnVmZjsgIC8qIGhleCBzdHJpbmcgb3IgbWV0YWZ5J2Qgb3V0cHV0 ICovCisgICAgY2hhciAqKmFycmF5ID0gTlVMTDsgICAvKiBhcnJheSB2YWx1ZSBmb3IgLWEg Ki8KKworICAgIC8qIFZhaWx1ZXMgZm9yIC1VICpuZCAtTCAqLworICAgIHp1bG9uZyAgIHVw cGVyID0gVUlOVDMyX01BWCwgbG93ZXIgPSAwLCBkaWZmID0gVUlOVDMyX01BWDsKKyAgICB1 aW50MzJfdCBtaW4gICA9IDAsIHJlaiA9IDA7ICAvKiBSZWplY3QgYmVsb3cgbWluIGFuZCBj b3VudCAqLworICAgIGJvb2wgICAgIGJvdW5kID0gZmFsc2U7IC8qIGJvb2xlYW4gdG8gc2V0 IGlmIHVwcGVyIG9yIGxvd2VyIGJvdW5kIHNldCAqLworICAgIC8qIEVuZCBvZiB2YXJpYWJs ZSBkZWNsYXJhdGlvbnMgKi8KKworCisgICAgLyogc3RvcmUgb3V0IHB1dCBpbiBhIHNjYWxh ciB2YXJpYWJsZSAqLworICAgIGlmIChPUFRfSVNTRVQob3BzLCAncycpKSB7CisJc2NhbGFy ID0gT1BUX0FSRyhvcHMsICdzJyk7CisJaWYgKCFpc2lkZW50KHNjYWxhcikpIHsKKwkgICAg endhcm5uYW0obmFtZSwgImFyZ3VtZW50IHRvIC1zIG5vdCBhbiBpZGVudGlmaWVyOiAlcyIs IHNjYWxhcik7CisJICAgIHJldHVybiAxOworCX0KKyAgICB9CisKKyAgICAvKiBjcmVhdGUg YXJyYXkgb2YgZGVzY2ltYWwgbnVtYmVycyAqLworICAgIGlmIChPUFRfSVNTRVQob3BzLCdh JykpIHsKKwlhcnJuYW1lID0gT1BUX0FSRyhvcHMsICdhJyk7CisJaWYgKCFpc2lkZW50KGFy cm5hbWUpKSB7CisJICAgIHp3YXJubmFtKG5hbWUsImFyZ3VtZW50IHRvIC1hIG5vdCBhbiBp ZGVudGlmaWVyOiAlcyIsIGFycm5hbWUpOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQor CisgICAgLyogc3BlY2lmeSBudW1iZXIgb2YgcmFuZG9tIGJ5dGVzIG9yIGludGVnZXJzIHRv IG91dHB1dCAqLworICAgIGlmIChPUFRfSVNTRVQob3BzLCAnbCcpKSB7CisKKwlpZiAoenN0 cnRvdWxfdW5kZXJzY29yZShPUFRfQVJHKG9wcywgJ2wnKSwgJmxlbikpIHsKKwkgICAgaWYg KGxlbiA+IDY0IHx8IGxlbiA8PSAwKSB7CisJICAgICAgICB6d2Fybm5hbShuYW1lLAorCQkJ Imxlbmd0aCBtdXN0IGJlIGJldHdlZW4gMSBhbmQgNjQgeW91IHNwZWNpZmllZDogJWQiLAor CQkgICAgICAgIGxlbik7CisJICAgICAgICByZXR1cm4gMTsKKwkgICAgfQorCX0gZWxzZSB7 CisJICAgIHp3YXJubmFtKG5hbWUsICJDb3VsZG4ndCBjb252ZXJ0IC1sICVzIHRvIGEgbnVt YmVyIiwKKwkJICAgIE9QVF9BUkcob3BzLCAnbCcpKTsKKwkgICAgcmV0dXJuIDE7CisJfQor ICAgIH0KKworICAgIGlmIChPUFRfSVNTRVQob3BzLCAnVScpKSB7CisJaWYgKCF6c3RydG91 bF91bmRlcnNjb3JlKE9QVF9BUkcob3BzLCAnVScpLCAmdXBwZXIpKSB7CisJICAgIHp3YXJu bmFtKG5hbWUsICJDb3VsZG4ndCBjb252ZXJ0IC1VICVzIHRvIGEgbnVtYmVyIiwKKwkJICAg IE9QVF9BUkcob3BzLCAnVScpKTsKKwkgICAgcmV0dXJuIDE7CisgICAgICAgIH0gZWxzZSB7 CisJICAgIGJvdW5kID0gdHJ1ZTsKKwl9CisgICAgfQorCisgICAgaWYgKE9QVF9JU1NFVChv cHMsICdMJykpIHsKKwlpZiAoIXpzdHJ0b3VsX3VuZGVyc2NvcmUoT1BUX0FSRyhvcHMsICdM JyksICZsb3dlcikpIHsKKwkgICAgendhcm5uYW0obmFtZSwgIkNvdWxkbid0IGNvbnZlcnQg LUwgJXMgdG8gYSBudW1iZXIiLAorCQkgICAgT1BUX0FSRyhvcHMsICdMJykpOworCSAgICBy ZXR1cm4gMTsKKwl9IGVsc2UgeworCSAgICBib3VuZCA9IHRydWU7CisJfQorICAgIH0KKwor ICAgIC8qIGludGVnZXIgcmF0aGVyIHRoYW4gYnl0ZSBvdXRwdXQgdG8gYXJyYXkgKi8KKyAg ICBpZiAoT1BUX0lTU0VUKG9wcywgJ2knKSkgeworCWlmIChPUFRfSVNTRVQob3BzLCdzJykg JiYgbGVuID4gMSkgeworCSAgICB6d2Fybm5hbShuYW1lLCItaSBvbmx5IG1ha2VzIHNlbnNl IHdpdGggLXMgd2hlbiAxZW5ndGggaXMgMSIpOworCSAgICByZXR1cm4gMTsKKwl9CisJaW50 ZWdlcl9vdXQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChib3VuZCkgeworICAgICAgICBp ZiAoc2NhbGFyICYmIGxlbiA+IDEpIHsKKyAgICAgICAgICAgIHp3YXJubmFtKG5hbWUsIkJv dW5kcyBvbmx5IG1ha2Ugc2Vuc2Ugd2l0aCAtcyB3aGVuIGxlbmd0aCBpcyAxIik7CisJICAg IHJldHVybiAxOworICAgICAgICB9CisKKwlpZiAobG93ZXIgPiB1cHBlcikgeworCSAgICB6 d2Fybm5hbShuYW1lLCItVSBtdXN0IGJlIGxhcmdlciB0aGFuIC1MLiIpOworCSAgICByZXR1 cm4gMTsKKwl9CisKKyAgICAgICAgZGlmZiA9IHVwcGVyIC0gbG93ZXI7CisKKwlpZighZGlm ZikgeworCSAgICB6d2Fybm5hbShuYW1lLCJVcHBlciBhbmQgTG93ZXIgYm91bmRzIGNhbm5v dCBiZSB0aGUgc2FtZS4iKTsKKwkgICAgcmV0dXJuIDE7CisJfQorICAgIH0KKworCisgICAg aWYgKCFieXRlX2xlbikKKwlieXRlX2xlbiA9IGxlbjsKKworCisgICAgaWYgKGJvdW5kKSB7 CisJcGFkID0gbGVuIC8gMTYgKyAxOworICAgICAgICBieXRlX2xlbiA9IChsZW4gKyBwYWQp ICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICB9CisgICAgaWYgKGludGVnZXJfb3V0KQorCWJ5 dGVfbGVuID0gbGVuICogc2l6ZW9mKHVpbnQzMl90KTsKKworICAgIGlmIChieXRlX2xlbiA+ IDI1NikKKwlieXRlX2xlbj0yNTY7CisKKyAgICBidWYgPSB6YWxsb2MoYnl0ZV9sZW4pOwor CisgICAgaWYgKGdldHJhbmRvbV9idWZmZXIoYnVmLCBieXRlX2xlbikgPCAwKSB7CisJendh cm5uYW0obmFtZSwiQ291bGRuJ3QgZ2V0IHJhbmRvbSBkYXRhIik7CisJcmV0dXJuIDE7Cisg ICAgfQorCisgICAgLyogUmF3IG91dHB1dCBvciBoZXggc3RyaW5nICovCisgICAgaWYgKCFp bnRlZ2VyX291dCAmJiAhYm91bmQgJiYgIWFycm5hbWUpIHsKKyAgICAgICAgaWYgKE9QVF9J U1NFVChvcHMsICdyJykpIHsKKwkgICAgb3V0YnVmZiA9IChjaGFyICopIGJ1ZjsKKwkgICAg b3V0bGVuICA9IGxlbjsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgb3V0bGVuPWxlbioyOwor CSAgICBvdXRidWZmID0gKGNoYXIqKSB6YWxsb2Mob3V0bGVuKzEpOworCSAgICB6dHJfdG9f aGV4KG91dGJ1ZmYsIG91dGxlbisxLCBidWYsIGxlbik7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoc2NhbGFyKSB7CisJICAgIHNldHNwYXJhbShzY2FsYXIsIG1ldGFmeShvdXRidWZm LCBvdXRsZW4sIE1FVEFfRFVQKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm d3JpdGUob3V0YnVmZiwxLG91dGxlbixzdGRvdXQpOworCSAgICBpZiAoIU9QVF9JU1NFVChv cHMsICdyJykpCisJCXByaW50ZigiXG4iKTsKKwl9CisgICAgICAgIGlmIChvdXRidWZmICE9 ICAodm9pZCAqKSBidWYpIHsKKwkgICAgemZyZWUob3V0YnVmZixvdXRsZW4rMSk7CisJfQor CXJldHVybiAwOworICAgIH0gZWxzZSB7CisJaWYgKE9QVF9JU1NFVChvcHMsICdyJykpIHsK KwkgICAgendhcm5uYW0obmFtZSwgIi1yIGNhbid0IGJlIHNwZWNpZmllZCB3aXRoIGJvdW5k cyBvciAtaSBvciAtYSIpOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorCisgICAgaWYo YXJybmFtZSkgeworCWFycmF5ID0gKGNoYXIgKiopIHphbGxvYygobGVuKzEpKnNpemVvZihj aGFyICopKTsKKwlhcnJheVtsZW5dID0gTlVMTDsKKyAgICB9CisKKyAgICBpZihpbnRlZ2Vy X291dCB8fCBib3VuZCkKKwlpbnRfYnVmPSh1aW50MzJfdCAqKWJ1ZjsKKworICAgIG1pbiA9 IC1kaWZmICUgZGlmZjsKKworICAgIGogPSAwOyByZWogPSAwOworICAgIGZvcihpID0gMDsg aSA8IGxlbjsgaSsrKSB7CisJaWYoaW50ZWdlcl9vdXQpIHsKKwkgICAgaW50X3ZhbCA9IGlu dF9idWZbaV07CisJfSBlbHNlIGlmICghYm91bmQpIHsKKwkgICAgaW50X3ZhbD1idWZbaV07 CisJfSBlbHNlIHsKKwkgICAgd2hpbGUgKGludF9idWZbal0gPCBtaW4gKSB7IC8qUmVqZWN0 ICovCisJCWorKzsgcmVqKys7CisJCWlmIChqICogc2l6ZW9mKHVpbnQzMl90KSA+PSBieXRl X2xlbiApeworCQkgICAgaWYgKGdldHJhbmRvbV9idWZmZXIoYnVmLCBieXRlX2xlbikgPCAw KSB7CisJCQl6d2Fybm5hbShuYW1lLCJDYW4ndCBnZXQgZW5vdWdoIHJhbmRvbSBkYXRhIik7 CisJCQlyZXR1cm4gMTsKKwkJICAgIH0KKwkJICAgIGogPSAwOworCQl9CisJICAgIH0KKwkg ICAgaW50X3ZhbCA9IGludF9idWZbaisrXSAlIGRpZmYgKyBsb3dlcjsKKwl9CisJc3ByaW50 ZihpbnQyc3RyLCAiJXUiLCBpbnRfdmFsKTsKKwlpZiAoYXJybmFtZSkgeworCSAgICBhcnJh eVtpXT16dHJkdXAoaW50MnN0cik7CisJfSBlbHNlIGlmIChzY2FsYXIgJiYgbGVuID09IDEp IHsKKwkgICAgc2V0aXBhcmFtKHNjYWxhciwgaW50X3ZhbCk7CisJfSBlbHNlIHsKKwkgICAg cHJpbnRmKCIlcyAiLGludDJzdHIpOworCX0KKyAgICB9CisgICAgaWYgKGFycm5hbWUpIHsK KwlzZXRhcGFyYW0oYXJybmFtZSxhcnJheSk7CisgICAgfSBlbHNlIGlmICghc2NhbGFyKSB7 CisJcHJpbnRmKCJcbiIpOworICAgIH0KKworCisgICAgemZyZWUoYnVmLCBieXRlX2xlbik7 CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoKKyAqIFByb3ZpZGVzIGZvciB0aGUgU1JBTkRP TSBwYXJhbWV0ZXIgYW5kIHJldHVybnMgIGEgdW5pc2duZWQgMzItYml0IHJhbmRvbQorICog aW50ZWdlci4KKyAqLworCisvKiovCitzdGF0aWMgemxvbmcKK2dldF9zcmFuZG9tKFVOVVNF RChQYXJhbSBwbSkpIHsKKworICAgIGlmKGJ1Zl9jbnQgPCAwKSB7CisJZ2V0cmFuZG9tX2J1 ZmZlcigodm9pZCopIHJhbmRfYnVmZixzaXplb2YocmFuZF9idWZmKSk7CisJYnVmX2NudD03 OworICAgIH0KKyAgICByZXR1cm4gcmFuZF9idWZmW2J1Zl9jbnQtLV07Cit9CisKKy8qCisg KiBJbXBsZW1lbnRzICB0aGUgbWF0aGZ1bmMgenJhbmRvbSBhbmQgcmV0dXJucyBhIHJhbmRv bSBmbG9hdGluZy1wb2ludAorICogbnVtYmVyIGJldHdlZW4gMCBhbmQgMS4gIERvZXMgdGhp cyBieSBnZXR0aW5nIGEgcmFuZG9tIDMyLWJ0IGludGVnZXIKKyAqIGFuZCBkaXZpZGluZyBp dCBieSBVSU5UMzJfTUFYLgorICoKKyAqLworCisvKiovCitzdGF0aWMgbW51bWJlcgorbWF0 aF96cmFuZG9tKFVOVVNFRChjaGFyICpuYW1lKSwgVU5VU0VEKGludCBhcmdjKSwgVU5VU0VE KG1udW1iZXIgKmFyZ3YpLAorCSAgICAgVU5VU0VEKGludCBpZCkpCit7CisgICAgbW51bWJl ciByZXQ7CisgICAgZG91YmxlIHI7CisKKyAgICByID0gcmFuZG9tX3JlYWwoKTsKKyAgICBp ZiAociA8IDApIHsKKwl6d2Fybm5hbShuYW1lLCJSYW5kb20gRGF0YSBGYWlsZWQiKTsKKyAg ICB9CisgICAgcmV0LnR5cGUgPSBNTl9GTE9BVDsKKyAgICByZXQudS5kID0gcjsKKworICAg IHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgYnVpbHRpbiBiaW50YWJbXSA9IHsK KyAgICBCVUlMVElOKCJnZXRyYW5kb20iLCAwLCBiaW5fZ2V0cmFuZG9tLCAwLCA4LCAwLCAi cmlhOnM6bDolVTolTDolIiwgTlVMTCksCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGdz dV9pbnRlZ2VyIHNyYW5kb21fZ3N1ID0KK3sgZ2V0X3NyYW5kb20sIG51bGxpbnRzZXRmbiwg c3RkdW5zZXRmbiB9OworCitzdGF0aWMgc3RydWN0IHBhcmFtZGVmIHBhdGFiW10gPSB7Cisg ICAgU1BFQ0lBTFBNREVGKCJTUkFORE9NIiwgUE1fSU5URUdFUnxQTV9SRUFET05MWSwgJnNy YW5kb21fZ3N1LE5VTEwsTlVMTCksCit9OworCitzdGF0aWMgc3RydWN0IG1hdGhmdW5jIG1m dGFiW10gPSB7CisgICAgTlVNTUFUSEZVTkMoInpyYW5kb20iLCBtYXRoX3pyYW5kb20sIDAs IDAsIDApLAorfTsKKworc3RhdGljIHN0cnVjdCBmZWF0dXJlcyBtb2R1bGVfZmVhdHVyZXMg PSB7CisgICAgYmludGFiLCBzaXplb2YoYmludGFiKS9zaXplb2YoKmJpbnRhYiksCisgICAg TlVMTCwgMCwKKyAgICBtZnRhYiwgc2l6ZW9mKG1mdGFiKS9zaXplb2YoKm1mdGFiKSwKKyAg ICBwYXRhYiwgc2l6ZW9mKHBhdGFiKS9zaXplb2YoKnBhdGFiKSwKKyAgICAwCit9OworCisv KiovCitpbnQKK3NldHVwXyhVTlVTRUQoTW9kdWxlIG0pKQoreworI2lmZGVmIFVTRV9VUkFO RE9NCisgICAgLyogQ2hlY2sgZm9yIHRoZSBleGlzdGVuY2Ugb2YgL2Rldi91cm5hZG9tICov CisKKyAgICBzdHJ1Y3Qgc3RhdCBzdDsKKworICAgIGlmIChsc3RhdCgiL2Rldi91cmFuZG9t Iiwmc3QpIDwgMCkgeworCXp3YXJuKCJObyBrZXJuZWwgcmFuZG9tIHBvb2wgZm91bmQuIik7 CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKCEoU19JU0NIUihzdC5zdF9tb2RlKSkg KSB7CisJendhcm4oIk5vIGtlcm5lbCByYW5kb20gcG9vbCBmb3VuZC4iKTsKKwlyZXR1cm4g MTsKKyAgICB9CisjZW5kaWYgLyogVVNFX1VSQU5ET00gKi8KKyAgICByZXR1cm4gMDsKK30K KworLyoqLworaW50CitmZWF0dXJlc18oTW9kdWxlIG0sIGNoYXIgKioqZmVhdHVyZXMpCit7 CisgICAgKmZlYXR1cmVzID0gZmVhdHVyZXNhcnJheShtLCAmbW9kdWxlX2ZlYXR1cmVzKTsK KyAgICByZXR1cm4gMDsKK30KKworLyoqLworaW50CitlbmFibGVzXyhNb2R1bGUgbSwgaW50 ICoqZW5hYmxlcykKK3sKKyAgICByZXR1cm4gaGFuZGxlZmVhdHVyZXMobSwgJm1vZHVsZV9m ZWF0dXJlcywgZW5hYmxlcyk7Cit9CisKKy8qKi8KK2ludAorYm9vdF8oTW9kdWxlIG0pCit7 CisjaWZkZWYgVVNFX1VSQU5ET00KKyAgICAvKgorICAgICAqIE9wZW4gL2Rldi91cmFuZG9t LiAgSGVyZSBiZWNhdXNlIG9mIGEgd2VpcmQgaXNzdWUgb24gSFAtVVggMTEuMzEKKyAgICAg KiBXaGVuIG9wZW5pbmcgaW4gc2V0dXBfIG9wZW4gcmV0dXJuZWQgMC4gIEluIGJvb3RfLCBp dCByZXR1cm5zCisgICAgICogYW4gdW51c2VkIGZpbGUgZGVzY3JpcHRvci4gRGVjaWRlZCBh Z2FpbnN0IGlmZGVmIEhQVVggYXMgaXQgd29ya3MKKyAgICAgKiBoZXJlIGp1c3QgYXMgd2Vs bCBmb3Igb3RoZXIgcGxhdGZvcm1zLgorICAgICAqCisgICAgICovCisKKyAgICBpbnQgdG1w ZmQ9LTE7CisKKyAgICBpZiAoKHRtcGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9O TFkpKSA8IDApIHsKKwl6d2FybigiQ291bGQgbm90IGFjY2VzcyBrZXJuZWwgcmFuZG9tIHBv b2wiKTsKKwlyZXR1cm4gMTsKKyAgICB9CisgICAgcmFuZGZkID0gbW92ZWZkKHRtcGZkKTsK KyAgICBhZGRtb2R1bGVmZChyYW5kZmQsRkRUX01PRFVMRSk7CisgICAgaWYgKHJhbmRmZCA8 IDApIHsKKwl6d2FybigiQ291bGQgbm90IGFjY2VzcyBrZXJuZWwgcmFuZG9tIHBvb2wiKTsK KwlyZXR1cm4gMTsKKyAgICB9CisjZW5kaWYgLyogVVNFX1VSQU5ET00gKi8KKyAgICByZXR1 cm4gMDsKK30KKworLyoqLworaW50CitjbGVhbnVwXyhNb2R1bGUgbSkKK3sKKyAgICByZXR1 cm4gc2V0ZmVhdHVyZWVuYWJsZXMobSwgJm1vZHVsZV9mZWF0dXJlcywgTlVMTCk7Cit9CisK Ky8qKi8KK2ludAorZmluaXNoXyhVTlVTRUQoTW9kdWxlIG0pKQoreworI2lmZGVmIFVTRV9V UkFORE9NCisgICAgaWYgKHJhbmRmZCA+PSAwKQorCXpjbG9zZShyYW5kZmQpOworI2VuZGlm IC8qIFVTRV9VUkFORE9NICovCisgICAgcmV0dXJuIDA7Cit9CisKKworLyogQ291bnQgdGhl IG51bWJlciBvZiBsZWFkaW5nIHplcm9zLCBob3BlZnVsbHkgaW4gZ2NjL2NsYW5nIGJ5IEhX CisgKiBpbnN0cnVjdGlvbiAqLworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQo X19jbGFuZ19fKQorI2RlZmluZSBjbHo2NCh4KSBfX2J1aWx0aW5fY2x6bGwoeCkKKyNlbHNl CisjZGVmaW5lIGNsejY0KHgpIF96Y2x6NjQoeCkKKworLyoqLworaW50CitfemNsejY0KHVp bnQ2NF90IHgpIHsKKyAgICBpbnQgbiA9IDA7CisKKyAgICBpZiAoeCA9PSAwKQorCXJldHVy biA2NDsKKworICAgIGlmICghKHggJiAweEZGRkZGRkZGMDAwMDAwMDApKSB7CisJbis9MzI7 CisJeDw8PTMyOworICAgIH0KKyAgICBpZiAoISh4ICYgMHhGRkZGMDAwMDAwMDAwMDAwKSkg eworCW4rPTE2OworCXg8PD0xNjsKKyAgICB9CisgICAgaWYgKCEoeCAmIDB4RkYwMDAwMDAw MDAwMDAwMCkpIHsKKwluKz04OworCXg8PD04OworICAgIH0KKyAgICBpZiAoISh4ICYgMHhG MDAwMDAwMDAwMDAwMDAwKSkgeworCW4rPTQ7CisJeDw8PTQ7CisgICAgfQorICAgIGlmICgh KHggJiAweEMwMDAwMDAwMDAwMDAwMDApKSB7CisJbis9MjsKKwl4PDw9MTsKKyAgICB9Cisg ICAgaWYgKCEoeCAmIDB4ODAwMDAwMDAwMDAwMDAwMCkpIHsKKwluKz0xOworICAgIH0KKyAg ICByZXR1cm4gbjsKK30KKyNlbmRpZiAvKiBfX0dOVV9DX18gb3IgX19jbGFuZ19fICovCisK Ky8qKi8KK3VpbnQ2NF90CityYW5kb202NCh2b2lkKSB7CisgICAgdWludDY0X3QgcjsKKwor ICAgIGlmKGdldHJhbmRvbV9idWZmZXIoJnIsc2l6ZW9mKHIpKSA8IDApIHsKKwl6d2Fybigi enNoL3JhbmRvbTogQ2FuJ3QgZ2V0IHN1ZmZpY2llbnQgcmFuZG9tIGRhdGEiKTsKKwlyZXR1 cm4gMTsgLyogMCB3aWxsIGNhdXNlIGxvb3AgKi8KKyAgICB9CisKKyAgICByZXR1cm4gcjsK K30KKworLyogRm9sbG93aW5nIGNvZGUgaXMgdW5kZXIgdGhlIGJlbG93IGNvcHlyaWdodCwg ZGVzcGl0ZSBjaGFuZ2VzIGZvciBlcnJvcgorICogaGFuZGxpbmcgYW5kIHJlbW92aW5nIEdD Q2lzbXMgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGF5bG9yIFIuIENhbXBi ZWxsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFV VEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g RVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBG T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS WSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS VVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisg KiBVbmlmb3JtIHJhbmRvbSBmbG9hdHM6IEhvdyB0byBnZW5lcmF0ZSBhIGRvdWJsZS1wcmVj aXNpb24KKyAqIGZsb2F0aW5nLXBvaW50IG51bWJlcnMgaW4gWzAsIDFdIHVuaWZvcm1seSBh dCByYW5kb20gZ2l2ZW4gYSB1bmlmb3JtCisgKiByYW5kb20gc291cmNlIG9mIGJpdHMuCisg KgorICogU2VlIDxodHRwOi8vbXVtYmxlLm5ldC9+Y2FtcGJlbGwvMjAxNC8wNC8yOC91bmlm b3JtLXJhbmRvbS1mbG9hdD4KKyAqIGZvciBleHBsYW5hdGlvbi4KKyAqCisgKiBVcGRhdGVk IDIwMTUtMDItMjIgdG8gcmVwbGFjZSBsZGV4cCh4LCA8Y29uc3RhbnQ+KSBieSB4ICogbGRl eHAoMSwKKyAqIDxjb25zdGFudD4pLCBzaW5jZSBnbGliYyBhbmQgTmV0QlNEIGxpYm0gYm90 aCBoYXZlIHNsb3cgc29mdHdhcmUKKyAqIGJpdC10d2lkZGxpbmcgaW1wbGVtZW50YXRpb25z IG9mIGxkZXhwLCBidXQgR0NDIGNhbiBjb25zdGFudC1mb2xkCisgKiB0aGUgbGF0dGVyLgor ICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKy8qCisg KiByYW5kb21fcmVhbDogR2VuZXJhdGUgYSBzdHJlYW0gb2YgYml0cyB1bmlmb3JtbHkgYXQg cmFuZG9tIGFuZAorICogaW50ZXJwcmV0IGl0IGFzIHRoZSBmcmFjdGlvbmFsIHBhcnQgb2Yg dGhlIGJpbmFyeSBleHBhbnNpb24gb2YgYQorICogbnVtYmVyIGluIFswLCAxXSwgMC4wMDAw MTAxMDAxMTExMTAxMDEwMC4uLjsgdGhlbiByb3VuZCBpdC4KKyAqLworCisvKiovCitkb3Vi bGUKK3JhbmRvbV9yZWFsKHZvaWQpCit7CisJaW50IGV4cG9uZW50ID0gMDsKKwl1aW50NjRf dCBzaWduaWZpY2FuZCA9IDA7CisJdWludDY0X3QgciA9IDA7CisJdW5zaWduZWQgc2hpZnQ7 CisKKwkvKgorCSAqIFJlYWQgemVyb3MgaW50byB0aGUgZXhwb25lbnQgdW50aWwgd2UgaGl0 IGEgb25lOyB0aGUgcmVzdAorCSAqIHdpbGwgZ28gaW50byB0aGUgc2lnbmlmaWNhbmQuCisJ ICovCisJd2hpbGUgKHNpZ25pZmljYW5kID09IDApIHsKKwkJZXhwb25lbnQgLT0gNjQ7CisK KwkJLyogR2V0IHJhbmRvbTY0IGFuZCBjaGVjayBmb3IgZXJyb3IgKi8KKwkJZXJybm8gPSAw OworCQlzaWduaWZpY2FuZCA9IHJhbmRvbTY0KCk7CisJCWlmIChlcnJubykKKwkJICAgIHJl dHVybiAtMTsKKwkJLyoKKwkJICogSWYgdGhlIGV4cG9uZW50IGZhbGxzIGJlbG93IC0xMDc0 ID0gZW1pbiArIDEgLSBwLAorCQkgKiB0aGUgZXhwb25lbnQgb2YgdGhlIHNtYWxsZXN0IHN1 Ym5vcm1hbCwgd2UgYXJlCisJCSAqIGd1YXJhbnRlZWQgdGhlIHJlc3VsdCB3aWxsIGJlIHJv dW5kZWQgdG8gemVyby4gIFRoaXMKKwkJICogY2FzZSBpcyBzbyB1bmxpa2VseSBpdCB3aWxs IGhhcHBlbiBpbiByZWFsaXN0aWMKKwkJICogdGVybXMgb25seSBpZiByYW5kb202NCBpcyBi cm9rZW4uCisJCSAqLworCQlpZiAoZXhwb25lbnQgPCAtMTA3NCkKKwkJCXJldHVybiAwOwor CX0KKworCS8qCisJICogVGhlcmUgaXMgYSAxIHNvbWV3aGVyZSBpbiBzaWduaWZpY2FuZCwg bm90IG5lY2Vzc2FyaWx5IGluCisJICogdGhlIG1vc3Qgc2lnbmlmaWNhbnQgcG9zaXRpb24u ICBJZiB0aGVyZSBhcmUgbGVhZGluZyB6ZXJvcywKKwkgKiBzaGlmdCB0aGVtIGludG8gdGhl IGV4cG9uZW50IGFuZCByZWZpbGwgdGhlIGxlc3Mtc2lnbmlmaWNhbnQKKwkgKiBiaXRzIG9m IHRoZSBzaWduaWZpY2FuZC4gIENhbid0IHByZWRpY3Qgb25lIHdheSBvciBhbm90aGVyCisJ ICogd2hldGhlciB0aGVyZSBhcmUgbGVhZGluZyB6ZXJvczogdGhlcmUncyBhIGZpZnR5LWZp ZnR5CisJICogY2hhbmNlLCBpZiByYW5kb202NCBpcyB1bmlmb3JtbHkgZGlzdHJpYnV0ZWQu CisJICovCisJc2hpZnQgPSBjbHo2NChzaWduaWZpY2FuZCk7CisJaWYgKHNoaWZ0ICE9IDAp IHsKKworCQllcnJubyA9IDA7CisJCXIgPSByYW5kb202NCgpOworCQlpZiAoZXJybm8pCisJ CSAgICByZXR1cm4gLTE7CisKKwkJZXhwb25lbnQgLT0gc2hpZnQ7CisJCXNpZ25pZmljYW5k IDw8PSBzaGlmdDsKKwkJc2lnbmlmaWNhbmQgfD0gKHIgPj4gKDY0IC0gc2hpZnQpKTsKKwl9 CisKKwkvKgorCSAqIFNldCB0aGUgc3RpY2t5IGJpdCwgc2luY2UgdGhlcmUgaXMgYWxtb3N0 IHN1cmVseSBhbm90aGVyIDEKKwkgKiBpbiB0aGUgYml0IHN0cmVhbS4gIE90aGVyd2lzZSwg d2UgbWlnaHQgcm91bmQgd2hhdCBsb29rcworCSAqIGxpa2UgYSB0aWUgdG8gZXZlbiB3aGVu LCBhbG1vc3Qgc3VyZWx5LCB3ZXJlIHdlIHRvIGxvb2sKKwkgKiBmdXJ0aGVyIGluIHRoZSBi aXQgc3RyZWFtLCB0aGVyZSB3b3VsZCBiZSBhIDEgYnJlYWtpbmcgdGhlCisJICogdGllLgor CSAqLworCXNpZ25pZmljYW5kIHw9IDE7CisKKwkvKgorCSAqIEZpbmFsbHksIGNvbnZlcnQg dG8gZG91YmxlIChyb3VuZGluZykgYW5kIHNjYWxlIGJ5CisJICogMl5leHBvbmVudC4KKwkg Ki8KKwlyZXR1cm4gbGRleHAoKGRvdWJsZSlzaWduaWZpY2FuZCwgZXhwb25lbnQpOworfQpk aWZmIC0tZ2l0IGEvU3JjL01vZHVsZXMvcmFuZG9tLm1kZCBiL1NyYy9Nb2R1bGVzL3JhbmRv bS5tZGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zODAzYTQ1MzMK LS0tIC9kZXYvbnVsbAorKysgYi9TcmMvTW9kdWxlcy9yYW5kb20ubWRkCkBAIC0wLDAgKzEs NyBAQAorbmFtZT16c2gvcmFuZG9tCitsaW5rPWVpdGhlcgorbG9hZD15ZXMKKworYXV0b2Zl YXR1cmVzPSJiOmdldHJhbmRvbSBwOlNSQU5ET00gZjp6cmFuZG9tIgorCitvYmplY3RzPSJy YW5kb20ubyIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRl eCAwNzQxNDFkMzguLmYxZmEwMTI3NCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBi L2NvbmZpZ3VyZS5hYwpAQCAtNjc1LDYgKzY3NSw3IEBAIGZpCiBBQ19DSEVDS19IRUFERVJT KHN5cy90aW1lLmggc3lzL3RpbWVzLmggc3lzL3NlbGVjdC5oIHRlcm1jYXAuaCB0ZXJtaW8u aCBcCiAJCSB0ZXJtaW9zLmggc3lzL3BhcmFtLmggc3lzL2ZpbGlvLmggc3RyaW5nLmggbWVt b3J5LmggXAogCQkgbGltaXRzLmggZmNudGwuaCBsaWJjLmggc3lzL3V0c25hbWUuaCBzeXMv cmVzb3VyY2UuaCBcCisgICAgICAgICAgICAgICAgIHN5cy9yYW5kb20uaCBcCiAJCSBsb2Nh bGUuaCBlcnJuby5oIHN0ZGlvLmggc3RkYXJnLmggdmFyYXJncy5oIHN0ZGxpYi5oIFwKIAkJ IHVuaXN0ZC5oIHN5cy9jYXBhYmlsaXR5LmggXAogCQkgdXRtcC5oIHV0bXB4Lmggc3lzL3R5 cGVzLmggcHdkLmggZ3JwLmggcG9sbC5oIHN5cy9tbWFuLmggXApAQCAtMTMzNyw2ICsxMzM4 LDcgQEAgQUNfQ0hFQ0tfRlVOQ1Moc3RyZnRpbWUgc3RycHRpbWUgbWt0aW1lIHRpbWVsb2Nh bCBcCiAJICAgICAgIGN5Z3dpbl9jb252X3BhdGggXAogCSAgICAgICBuYW5vc2xlZXAgXAog CSAgICAgICBzcmFuZF9kZXRlcm1pbmlzdGljIFwKKyAgICAgICAgICAgICAgIGdldHJhbmRv bSBhcmM0cmFuZG9tIFwKIAkgICAgICAgc2V0dXR4ZW50IGdldHV0eGVudCBlbmR1dHhlbnQg Z2V0dXRlbnQpCiBBQ19GVU5DX1NUUkNPTEwKIAo= --------------WnxevEkM2pRY9gPthZ53f1Ag--