From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C293CC19F32 for ; Thu, 27 Feb 2025 15:34:20 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tnftb-00014L-CT; Thu, 27 Feb 2025 10:33:55 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tnftZ-00014A-Jg for grub-devel@gnu.org; Thu, 27 Feb 2025 10:33:53 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tnftV-0001t2-Ed for grub-devel@gnu.org; Thu, 27 Feb 2025 10:33:53 -0500 Received: from pps.filterd (m0360072.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51R7X61I018108; Thu, 27 Feb 2025 15:33:46 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s=pp1; bh=cr/Ck1 sjs/gqSdHVvxreUsr4tFzFo4Jcbyj4V1f75JQ=; b=hVByHX8kMvm3/9Btn3EaW3 2OQlAB82tvIrqHMk4BBKFThR/U7kK9afVqH5I36ox0usnyIxrlkaGeqU9EftoGBj bsG/ra3hgkts0aexRFRhmq8+2yWFLdzOu33ifl3tjWOWRD5zNzRRXuzuVVCdgwJv +eG2M8KnXJWx528XRKotTjD2yAnpJjn1sVbVMRaZePDmNFoytzFGMEFGHBIRg031 oI2AmJ5mYpF/a/ZFSgaKfH8AgHW/GniSYXhN+YMVoqeq0J1GHtXu5VAkPff0pACX 8oYX4N5h8qUcpbIzjf7ITXrsNSJ0nDZWQZNg+++IRpTij03EKxn+XNMgskDeX4ow == Received: from ppma13.dal12v.mail.ibm.com (dd.9e.1632.ip4.static.sl-reverse.com [50.22.158.221]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 452krpaa2n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 27 Feb 2025 15:33:46 +0000 (GMT) Received: from pps.filterd (ppma13.dal12v.mail.ibm.com [127.0.0.1]) by ppma13.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 51RE4JE1002551; Thu, 27 Feb 2025 15:33:45 GMT Received: from smtprelay06.wdc07v.mail.ibm.com ([172.16.1.73]) by ppma13.dal12v.mail.ibm.com (PPS) with ESMTPS id 44yu4k11ac-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 27 Feb 2025 15:33:45 +0000 Received: from smtpav02.wdc07v.mail.ibm.com (smtpav02.wdc07v.mail.ibm.com [10.39.53.229]) by smtprelay06.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 51RFXhGG29426078 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 27 Feb 2025 15:33:43 GMT Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A369B5805F; Thu, 27 Feb 2025 15:33:43 +0000 (GMT) Received: from smtpav02.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id B227E58058; Thu, 27 Feb 2025 15:33:42 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav02.wdc07v.mail.ibm.com (Postfix) with ESMTP; Thu, 27 Feb 2025 15:33:42 +0000 (GMT) MIME-Version: 1.0 Date: Thu, 27 Feb 2025 21:03:42 +0530 From: sudhakar To: Avnish Chouhan Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, stefanb@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, daniel.kiper@oracle.com Subject: Re: [PATCH v1 10/21] appended signatures: support verifying appended signatures In-Reply-To: References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-11-sudhakar@linux.ibm.com> Message-ID: <94b5f9b1f1cd8dbd40a6402c88bbe496@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: 62ZtzmLKUXGWfRv6Dq4xovzh9MqTiaxS X-Proofpoint-GUID: 62ZtzmLKUXGWfRv6Dq4xovzh9MqTiaxS X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1057,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-02-27_06,2025-02-27_01,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 adultscore=0 lowpriorityscore=0 spamscore=0 impostorscore=0 priorityscore=1501 mlxscore=0 bulkscore=0 mlxlogscore=999 clxscore=1011 suspectscore=0 malwarescore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2502100000 definitions=main-2502270117 Received-SPF: pass client-ip=148.163.158.5; envelope-from=sudhakar@linux.ibm.com; helo=mx0b-001b2d01.pphosted.com X-Spam_score_int: -26 X-Spam_score: -2.7 X-Spam_bar: -- X-Spam_report: (-2.7 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org T24gMjAyNS0wMi0wNiAxMTo0MCwgQXZuaXNoIENob3VoYW4gd3JvdGU6Cj4gT24gMjAyNC0xMi0x OCAyMDoyNiwgU3VkaGFrYXIgS3VwcHVzYW15IHdyb3RlOgo+PiBGcm9tOiBEYW5pZWwgQXh0ZW5z IDxkamFAYXh0ZW5zLm5ldD4KPj4gCj4+IEJ1aWxkaW5nIG9uIHRoZSBwYXJzZXJzIGFuZCB0aGUg YWJpbGl0eSB0byBlbWJlZCB4NTA5IGNlcnRpZmljYXRlcywgYXMKPj4gd2VsbCBhcyB0aGUgZXhp c3RpbmcgZ2NyeXB0IGZ1bmN0aW9uYWxpdHksIGFkZCBhIG1vZHVsZSBmb3IgdmVyaWZ5aW5nCj4+ IGFwcGVuZGVkIHNpZ25hdHVyZXMuCj4+IAo+PiBUaGlzIGluY2x1ZGVzIGEgdmVyaWZpZXIgdGhh dCByZXF1aXJlcyB0aGF0IExpbnV4IGtlcm5lbHMgYW5kIGdydWIgCj4+IG1vZHVsZXMKPj4gaGF2 ZSBhcHBlbmRlZCBzaWduYXR1cmVzLCBhbmQgY29tbWFuZHMgdG8gbWFuYWdlIHRoZSBsaXN0IG9m IHRydXN0ZWQKPj4gY2VydGlmaWNhdGVzIGZvciB2ZXJpZmljYXRpb24uCj4+IAo+PiBWZXJpZmlj YXRpb24gbXVzdCBiZSBlbmFibGVkIGJ5IHNldHRpbmcgY2hlY2tfYXBwZW5kZWRfc2lnbmF0dXJl cy4gSWYKPj4gR1JVQiBpcyBsb2NrZWQgZG93biB3aGVuIHRoZSBtb2R1bGUgaXMgbG9hZGVkLCB2 ZXJpZmljYXRpb24gd2lsbCBiZQo+PiBlbmFibGVkIGFuZCBsb2NrZWQgYXV0b21hdGljYWxseS4K Pj4gCj4+IEFzIHdpdGggdGhlIFBHUCB2ZXJpZmllciwgaXQgaXMgbm90IGEgY29tcGxldGUgc2Vj dXJlLWJvb3Qgc29sdXRpb246Cj4+IG90aGVyIG1lY2hhbmlzbXMsIHN1Y2ggYXMgYSBwYXNzd29y ZCBvciBsb2NrZG93biwgbXVzdCBiZSB1c2VkIHRvIAo+PiBlbnN1cmUKPj4gdGhhdCBhIHVzZXIg Y2Fubm90IGRyb3AgdG8gdGhlIGdydWIgc2hlbGwgYW5kIGRpc2FibGUgdmVyaWZpY2F0aW9uLgo+ PiAKPj4gU2lnbmVkLW9mZi1ieTogRGFuaWVsIEF4dGVucyA8ZGphQGF4dGVucy5uZXQ+Cj4+IFNp Z25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2FteSA8c3VkaGFrYXJAbGludXguaWJtLmNvbT4K Pj4gLS0tCj4+ICBncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgICAgICAgICAgICAgICAgICAg fCAgMTQgKwo+PiAgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMg IHwgNjIwIAo+PiArKysrKysrKysrKysrKysrKysKPj4gIGdydWItY29yZS9jb21tYW5kcy9hcHBl bmRlZHNpZy9hcHBlbmRlZHNpZy5oICB8ICAgMiArLQo+PiAgZ3J1Yi1jb3JlL2NvbW1hbmRzL2Fw cGVuZGVkc2lnL2FzbjF1dGlsLmMgICAgIHwgICAyICstCj4+ICAuLi4vY29tbWFuZHMvYXBwZW5k ZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMgICAgfCAgIDIgKy0KPj4gIC4uLi9jb21tYW5kcy9hcHBl bmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMgICAgICB8ICAgMiArLQo+PiAgZ3J1Yi1jb3JlL2NvbW1h bmRzL2FwcGVuZGVkc2lnL3g1MDkuYyAgICAgICAgIHwgICAyICstCj4+ICBpbmNsdWRlL2dydWIv ZmlsZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwo+PiAgOCBmaWxlcyBjaGFu Z2VkLCA2NDEgaW5zZXJ0aW9ucygrKSwgNSBkZWxldGlvbnMoLSkKPj4gIGNyZWF0ZSBtb2RlIDEw MDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwo+PiAKPj4g ZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiBiL2dydWItY29yZS9NYWtl ZmlsZS5jb3JlLmRlZgo+PiBpbmRleCA2MGRiMmFkYzUuLmQ2OTM5ODZjNiAxMDA2NDQKPj4gLS0t IGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCj4+ICsrKyBiL2dydWItY29yZS9NYWtlZmls ZS5jb3JlLmRlZgo+PiBAQCAtOTc5LDYgKzk3OSwyMCBAQCBtb2R1bGUgPSB7Cj4+ICAgIGNwcGZs YWdzID0gJy1JJChzcmNkaXIpL2xpYi9wb3NpeF93cmFwJzsKPj4gIH07Cj4+IAo+PiArbW9kdWxl ID0gewo+PiArICBuYW1lID0gYXBwZW5kZWRzaWc7Cj4+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2Fw cGVuZGVkc2lnL2FwcGVuZGVkc2lnLmM7Cj4+ICsgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVk c2lnL3g1MDkuYzsKPj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYzsK Pj4gKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwuYzsKPj4gKyAgY29t bW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmM7Cj4+ICsgIGNvbW1v biA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3BraXhfYXNuMV90YWIuYzsKPj4gKwo+PiArICAvLyBw b3NpeCB3cmFwcGVyIHJlcXVpcmVkIGZvciBnY3J5IHRvIGdldCBzeXMvdHlwZXMuaAo+PiArICBj ZmxhZ3MgPSAnJChDRkxBR1NfUE9TSVgpJzsKPj4gKyAgY3BwZmxhZ3MgPSAnLUkkKHNyY2Rpcikv bGliL3Bvc2l4X3dyYXAgCj4+IC1JJChzcmNkaXIpL2xpYi9saWJ0YXNuMS1ncnViJzsKPj4gK307 Cj4+ICsKPj4gIG1vZHVsZSA9IHsKPj4gICAgbmFtZSA9IGhkcGFybTsKPj4gICAgY29tbW9uID0g Y29tbWFuZHMvaGRwYXJtLmM7Cj4+IGRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwo+PiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNp Zy9hcHBlbmRlZHNpZy5jCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAw MC4uNWM4MmI5NmE0Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRz L2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKPj4gQEAgLTAsMCArMSw2MjAgQEAKPj4gKy8qCj4+ ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgo+PiArICogIENvcHlyaWdo dCAoQykgMjAyMCwgMjAyMSwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KPj4g KyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEsIDIwMjIgSUJNIENvcnBvcmF0aW9uCj4+ICsg Kgo+PiArICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQo+PiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIAo+PiBieQo+PiArICogIHRoZSBGcmVlIFNv ZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiAg R1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ PiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCj4+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ICsgKiAgYWxv bmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ Lgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+Cj4+ICsjaW5jbHVkZSA8 Z3J1Yi9taXNjLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+PiArI2luY2x1ZGUgPGdydWIv ZXJyLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9kbC5oPgo+PiArI2luY2x1ZGUgPGdydWIvZmlsZS5o Pgo+PiArI2luY2x1ZGUgPGdydWIvY29tbWFuZC5oPgo+PiArI2luY2x1ZGUgPGdydWIvY3J5cHRv Lmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9wa2NzMV92MTUuaD4KPj4gKyNpbmNsdWRlIDxncnViL2kx OG4uaD4KPj4gKyNpbmNsdWRlIDxncnViL2djcnlwdC9nY3J5cHQuaD4KPj4gKyNpbmNsdWRlIDxn cnViL2tlcm5lbC5oPgo+PiArI2luY2x1ZGUgPGdydWIvZXh0Y21kLmg+Cj4+ICsjaW5jbHVkZSA8 Z3J1Yi92ZXJpZnkuaD4KPj4gKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgo+PiArI2luY2x1ZGUgPGdy dWIvZW52Lmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9sb2NrZG93bi5oPgo+PiArCj4+ICsjaW5jbHVk ZSAiYXBwZW5kZWRzaWcuaCIKPj4gKwo+PiArR1JVQl9NT0RfTElDRU5TRSAoIkdQTHYzKyIpOwo+ PiArCj4+ICtjb25zdCBjaGFyIG1hZ2ljW10gPSAifk1vZHVsZSBzaWduYXR1cmUgYXBwZW5kZWR+ XG4iOwo+PiArCj4+ICsvKgo+PiArICogVGhpcyBzdHJ1Y3R1cmUgaXMgZXh0cmFjdGVkIGZyb20g c2NyaXB0cy9zaWduLWZpbGUuYyBpbiB0aGUgbGludXggCj4+IGtlcm5lbAo+PiArICogc291cmNl LiBJdCB3YXMgbGljZW5zZWQgYXMgTEdQTHYyLjErLCB3aGljaCBpcyBHUEx2MysgY29tcGF0aWJs ZS4KPj4gKyAqLwo+PiArc3RydWN0IG1vZHVsZV9zaWduYXR1cmUKPj4gK3sKPj4gKyAgZ3J1Yl91 aW50OF90IGFsZ287ICAgICAgIC8qIFB1YmxpYy1rZXkgY3J5cHRvIGFsZ29yaXRobSBbMF0gKi8K Pj4gKyAgZ3J1Yl91aW50OF90IGhhc2g7ICAgICAgIC8qIERpZ2VzdCBhbGdvcml0aG0gWzBdICov Cj4+ICsgIGdydWJfdWludDhfdCBpZF90eXBlOyAgICAvKiBLZXkgaWRlbnRpZmllciB0eXBlIFtQ S0VZX0lEX1BLQ1M3XSAqLwo+PiArICBncnViX3VpbnQ4X3Qgc2lnbmVyX2xlbjsgLyogTGVuZ3Ro IG9mIHNpZ25lcidzIG5hbWUgWzBdICovCj4+ICsgIGdydWJfdWludDhfdCBrZXlfaWRfbGVuOyAv KiBMZW5ndGggb2Yga2V5IGlkZW50aWZpZXIgWzBdICovCj4+ICsgIGdydWJfdWludDhfdCBfX3Bh ZFszXTsKPj4gKyAgZ3J1Yl91aW50MzJfdCBzaWdfbGVuOyAgIC8qIExlbmd0aCBvZiBzaWduYXR1 cmUgZGF0YSAqLwo+PiArfSBHUlVCX1BBQ0tFRDsKPj4gKwo+PiArLyogVGhpcyByZXByZXNlbnRz IGFuIGVudGlyZSwgcGFyc2VkLCBhcHBlbmRlZCBzaWduYXR1cmUgKi8KPj4gK3N0cnVjdCBncnVi X2FwcGVuZGVkX3NpZ25hdHVyZQo+PiArewo+PiArICBncnViX3NpemVfdCBzaWduYXR1cmVfbGVu OyAgICAgICAgICAgIC8qIExlbmd0aCBvZiBQS0NTIzcgZGF0YSArCj4+IG1ldGFkYXRhICsgbWFn aWMgKi8KPj4gKyAgc3RydWN0IG1vZHVsZV9zaWduYXR1cmUgc2lnX21ldGFkYXRhOyAvKiBNb2R1 bGUgc2lnbmF0dXJlIG1ldGFkYXRhIAo+PiAqLwo+PiArICBzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0 YSBwa2NzNzsgICAgICAgIC8qIFBhcnNlZCBQS0NTIzcgZGF0YSAqLwo+PiArfTsKPj4gKwo+PiAr LyogVHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmeWluZyBhcHBlbmRlZCBzaWduYXR1cmVz ICovCj4+ICtzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqZ3J1Yl90cnVzdGVkX2tleTsKPj4gKwo+ PiArLyoKPj4gKyAqIEZvcmNlIGdjcnlfcnNhIHRvIGJlIGEgbW9kdWxlIGRlcGVuZGVuY3kuCj4+ ICsgKgo+PiArICogSWYgd2UgdXNlIGdydWJfY3J5cHRvX3BrX3JzYSwgdGhlbiB0aGVuIHRoZSBn Y3J5X3JzYSBtb2R1bGUgd29uJ3QgCj4+IGJlIGJ1aWx0Cj4+ICsgKiBpbiBpZiB5b3UgYWRkICdh cHBlbmRlZHNpZycgdG8gZ3J1Yi1pbnN0YWxsIC0tbW9kdWxlcy4gWW91IHdvdWxkIAo+PiBuZWVk IHRvCj4+ICsgKiBhZGQgJ2djcnlfcnNhJyB0b28uIFRoYXQncyBjb25mdXNpbmcgYW5kIHNlZW1z IHN1Ym9wdGltYWwsIAo+PiBlc3BlY2lhbGx5IHdoZW4KPj4gKyAqIHdlIG9ubHkgc3VwcG9ydCBS U0EuCj4+ICsgKgo+PiArICogRHluYW1pYyBsb2FkaW5nIGFsc28gY2F1c2VzIHNvbWUgY29uY2Vy bnMuIFdlIGNhbid0IGxvYWQgZ2NyeV9yc2EgCj4+IGZyb20gdGhlCj4+ICsgKiB0aGUgZmlsZXN5 c3RlbSBhZnRlciB3ZSBpbnN0YWxsIHRoZSB2ZXJpZmllciAtIHdlIHdvbid0IGJlIGFibGUgdG8g Cj4+IHZlcmlmeQo+PiArICogaXQgd2l0aG91dCBoYXZpbmcgaXQgYWxyZWFkeSBwcmVzZW50LiBX ZSBhbHNvIHNob3VsZG4ndCBsb2FkIGl0IAo+PiBiZWZvcmUgd2UKPj4gKyAqIGluc3RhbGwgdGhl IHZlcmlmaWVyLCBiZWNhdXNlIHRoYXQgd291bGQgbWVhbiBpdCB3b3VsZG4ndCBiZSAKPj4gdmVy aWZpZWQgLSBhbgo+PiArICogYXR0YWNrZXIgY291bGQgaW5zZXJ0IGFueSBjb2RlIHRoZXkgd2Fu dGVkIGludG8gdGhlIG1vZHVsZS4KPj4gKyAqCj4+ICsgKiBTbyBpbnN0ZWFkLCByZWZlcmVuY2Ug dGhlIGludGVybmFsIHN5bWJvbCBmcm9tIGdjcnlfcnNhLiBUaGF0IAo+PiBjcmVhdGVzIGEKPj4g KyAqIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGdjcnlfcnNhLCBzbyBpdCB3aWxsIGJlIGJ1aWx0IGlu IHdoZW4gdGhpcyAKPj4gbW9kdWxlCj4+ICsgKiBpcyBidWlsdCBpbi4gQmVpbmcgYnVpbHQgaW4g KGFzc3VtaW5nIHRoZSBjb3JlIGltYWdlIGlzIGl0c2VsZiAKPj4gc2lnbmVkISkKPj4gKyAqIGFs c28gcmVzb2x2ZXMgb3VyIGNvbmNlcm5zIGFib3V0IGxvYWRpbmcgZnJvbSB0aGUgZmlsZXN5c3Rl bS4KPj4gKyAqLwo+PiArZXh0ZXJuIGdjcnlfcGtfc3BlY190IF9nY3J5X3B1YmtleV9zcGVjX3Jz YTsKPj4gKwo+PiArc3RhdGljIGVudW0KPj4gK3sKPj4gKyAgY2hlY2tfc2lnc19ubyA9IDAsCj4+ ICsgIGNoZWNrX3NpZ3NfZW5mb3JjZSA9IDEsCj4+ICsgIGNoZWNrX3NpZ3NfZm9yY2VkID0gMgo+ PiArfSBjaGVja19zaWdzID0gY2hlY2tfc2lnc19ubzsKPj4gKwo+PiArc3RhdGljIGNvbnN0IGNo YXIgKgo+PiArZ3J1Yl9lbnZfcmVhZF9zZWMgKHN0cnVjdCBncnViX2Vudl92YXIgKnZhciBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCj4+ICsgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq dmFsIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKPj4gK3sKPj4gKyAgaWYgKGNoZWNrX3NpZ3Mg PT0gY2hlY2tfc2lnc19mb3JjZWQpCj4+ICsgICAgcmV0dXJuICJmb3JjZWQiOwo+PiArICBlbHNl IGlmIChjaGVja19zaWdzID09IGNoZWNrX3NpZ3NfZW5mb3JjZSkKPj4gKyAgICByZXR1cm4gImVu Zm9yY2UiOwo+PiArICBlbHNlCj4+ICsgICAgcmV0dXJuICJubyI7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBjaGFyICoKPj4gK2dydWJfZW52X3dyaXRlX3NlYyAoc3RydWN0IGdydWJfZW52X3ZhciAq dmFyIF9fYXR0cmlidXRlX18KPj4gKCh1bnVzZWQpKSwgY29uc3QgY2hhciAqdmFsKQo+PiArewo+ PiArICAvKiBEbyBub3QgYWxsb3cgdGhlIHZhbHVlIHRvIGJlIGNoYW5nZWQgaWYgc2V0IHRvIGZv cmNlZCAqLwo+PiArICBpZiAoY2hlY2tfc2lncyA9PSBjaGVja19zaWdzX2ZvcmNlZCkKPj4gKyAg ICByZXR1cm4gZ3J1Yl9zdHJkdXAgKCJmb3JjZWQiKTsKPj4gKwo+PiArICBpZiAoKCp2YWwgPT0g JzInKSB8fCAoKnZhbCA9PSAnZicpKQo+PiArICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX2Zv cmNlZDsKPj4gKyAgZWxzZSBpZiAoKCp2YWwgPT0gJzEnKSB8fCAoKnZhbCA9PSAnZScpKQo+PiAr ICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX2VuZm9yY2U7Cj4+ICsgIGVsc2UgaWYgKCgqdmFs ID09ICcwJykgfHwgKCp2YWwgPT0gJ24nKSkKPj4gKyAgICBjaGVja19zaWdzID0gY2hlY2tfc2ln c19ubzsKPj4gKwo+PiArICByZXR1cm4gZ3J1Yl9zdHJkdXAgKGdydWJfZW52X3JlYWRfc2VjIChO VUxMLCBOVUxMKSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtmaWxlX3Jl YWRfYWxsIChncnViX2ZpbGVfdCBmaWxlLCBncnViX3VpbnQ4X3QgKipidWYsIGdydWJfc2l6ZV90 IAo+PiAqbGVuKQo+PiArewo+PiArICBncnViX29mZl90IGZ1bGxfZmlsZV9zaXplOwo+PiArICBn cnViX3NpemVfdCBmaWxlX3NpemUsIHRvdGFsX3JlYWRfc2l6ZSA9IDA7Cj4+ICsgIGdydWJfc3Np emVfdCByZWFkX3NpemU7Cj4+ICsKPj4gKyAgZnVsbF9maWxlX3NpemUgPSBncnViX2ZpbGVfc2l6 ZSAoZmlsZSk7Cj4+ICsgIGlmIChmdWxsX2ZpbGVfc2l6ZSA9PSBHUlVCX0ZJTEVfU0laRV9VTktO T1dOKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIE5fKCJDYW5ub3QgcmVhZCBhIGZpbGUgb2YgdW5rbm93 biBzaXplIGludG8gYSAKPj4gYnVmZmVyIikpOwo+PiArCj4+ICsgIGlmIChmdWxsX2ZpbGVfc2l6 ZSA+IEdSVUJfU0laRV9NQVgpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9SQU5HRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgTl8oIkZpbGUgaXMgdG9vIGxh cmdlIHRvIHJlYWQ6ICUiCj4+IFBSSXVHUlVCX1VJTlQ2NF9UICIgYnl0ZXMiKSwKPj4gKyAgICAg ICAgICAgICAgICAgICAgICAgZnVsbF9maWxlX3NpemUpOwo+PiArCj4+ICsgIGZpbGVfc2l6ZSA9 IChncnViX3NpemVfdCkgZnVsbF9maWxlX3NpemU7Cj4+ICsKPj4gKyAgKmJ1ZiA9IGdydWJfbWFs bG9jIChmaWxlX3NpemUpOwo+PiArICBpZiAoISpidWYpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgIE5f KCJDb3VsZCBub3QgYWxsb2NhdGUgZmlsZSBkYXRhIGJ1ZmZlciBzaXplCj4+ICUiIFBSSXVHUlVC X1NJWkUpLAo+PiArICAgICAgICAgICAgICAgICAgICAgICBmaWxlX3NpemUpOwo+PiArCj4+ICsg IHdoaWxlICh0b3RhbF9yZWFkX3NpemUgPCBmaWxlX3NpemUpCj4+ICsgICAgewo+PiArICAgICAg cmVhZF9zaXplID0gZ3J1Yl9maWxlX3JlYWQgKGZpbGUsICpidWYgKyB0b3RhbF9yZWFkX3NpemUs Cj4+IGZpbGVfc2l6ZSAtIHRvdGFsX3JlYWRfc2l6ZSk7Cj4+ICsKPj4gKyAgICAgIGlmIChyZWFk X3NpemUgPCAwKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsK Pj4gKyAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKPj4gKyAgICAgICAgfQo+PiArICAgICAg ZWxzZSBpZiAocmVhZF9zaXplID09IDApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBncnVi X2ZyZWUgKCpidWYpOwo+PiArICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9J TywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkNvdWxkIG5vdCByZWFkIGZ1 bGwgZmlsZSBzaXplICIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiglIiBQ Ukl1R1JVQl9TSVpFICIpLCBvbmx5ICUiCj4+IFBSSXVHUlVCX1NJWkUgIiBieXRlcyByZWFkIiks Cj4gCj4gSGksCj4gCj4gSW5kZW50YXRpb24gc2VlbXMgb2ZmIGhlcmUhCj4gCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSwgdG90YWxfcmVhZF9zaXplKTsKPj4gKyAg ICAgICAgfQo+PiArCj4+ICsgICAgICB0b3RhbF9yZWFkX3NpemUgKz0gcmVhZF9zaXplOwo+PiAr ICAgIH0KPj4gKyAgKmxlbiA9IGZpbGVfc2l6ZTsKPj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7 Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtyZWFkX2NlcnRfZnJvbV9maWxl IChncnViX2ZpbGVfdCBmLCBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAKPj4gKmNlcnRpZmljYXRl KQo+PiArewo+PiArICBncnViX2Vycl90IGVycjsKPj4gKyAgZ3J1Yl91aW50OF90ICpidWY7Cj4+ ICsgIGdydWJfc2l6ZV90IGZpbGVfc2l6ZTsKPj4gKwo+PiArICBlcnIgPSBmaWxlX3JlYWRfYWxs IChmLCAmYnVmLCAmZmlsZV9zaXplKTsKPj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+ PiArICAgIHJldHVybiBlcnI7Cj4+ICsKPj4gKyAgZXJyID0gcGFyc2VfeDUwOV9jZXJ0aWZpY2F0 ZSAoYnVmLCBmaWxlX3NpemUsIGNlcnRpZmljYXRlKTsKPj4gKyAgZ3J1Yl9mcmVlIChidWYpOwo+ PiArCj4+ICsgIHJldHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ ICtleHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1Yl91aW50OF90ICpidWYsIGdy dWJfc2l6ZV90IAo+PiBidWZzaXplLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBncnViX2FwcGVuZGVkX3NpZ25hdHVyZSAqc2lnKQo+PiArewo+PiArICBncnViX3NpemVf dCBwa2NzN19zaXplOwo+PiArICBncnViX3NpemVfdCByZW1haW5pbmdfbGVuOwo+PiArICBjb25z dCBncnViX3VpbnQ4X3QgKmFwcHNpZ2RhdGEgPSBidWYgKyBidWZzaXplIC0gZ3J1Yl9zdHJsZW4g Cj4+IChtYWdpYyk7Cj4+ICsKPj4gKyAgaWYgKGJ1ZnNpemUgPCBncnViX3N0cmxlbiAobWFnaWMp KQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCBOXygi RmlsZSB0b28gc2hvcnQgZm9yCj4+IHNpZ25hdHVyZSBtYWdpYyIpKTsKPj4gKwo+PiArICBpZiAo Z3J1Yl9tZW1jbXAgKGFwcHNpZ2RhdGEsIChncnViX3VpbnQ4X3QgKikgbWFnaWMsIGdydWJfc3Ry bGVuIAo+PiAobWFnaWMpKSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X1NJR05BVFVSRSwgTl8oIk1pc3Npbmcgb3IgaW52YWxpZAo+PiBzaWduYXR1cmUgbWFnaWMiKSk7 Cj4+ICsKPj4gKyAgcmVtYWluaW5nX2xlbiA9IGJ1ZnNpemUgLSBncnViX3N0cmxlbiAobWFnaWMp Owo+PiArCj4+ICsgIGlmIChyZW1haW5pbmdfbGVuIDwgc2l6ZW9mIChzdHJ1Y3QgbW9kdWxlX3Np Z25hdHVyZSkpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRV UkUsIE5fKCJGaWxlIHRvbyBzaG9ydCBmb3IKPj4gc2lnbmF0dXJlIG1ldGFkYXRhIikpOwo+PiAr Cj4+ICsgIGFwcHNpZ2RhdGEgLT0gc2l6ZW9mIChzdHJ1Y3QgbW9kdWxlX3NpZ25hdHVyZSk7Cj4+ ICsKPj4gKyAgLyogZXh0cmFjdCB0aGUgbWV0YWRhdGEgKi8KPj4gKyAgZ3J1Yl9tZW1jcHkgKCYo c2lnLT5zaWdfbWV0YWRhdGEpLCBhcHBzaWdkYXRhLCBzaXplb2YgKHN0cnVjdAo+PiBtb2R1bGVf c2lnbmF0dXJlKSk7Cj4+ICsKPj4gKyAgcmVtYWluaW5nX2xlbiAtPSBzaXplb2YgKHN0cnVjdCBt b2R1bGVfc2lnbmF0dXJlKTsKPj4gKwo+PiArICBpZiAoc2lnLT5zaWdfbWV0YWRhdGEuaWRfdHlw ZSAhPSAyKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJF LCBOXygiV3Jvbmcgc2lnbmF0dXJlIAo+PiB0eXBlIikpOwo+PiArCj4+ICsgIHBrY3M3X3NpemUg PSBncnViX2JlX3RvX2NwdTMyIChzaWctPnNpZ19tZXRhZGF0YS5zaWdfbGVuKTsKPj4gKwo+PiAr ICBpZiAocGtjczdfc2l6ZSA+IHJlbWFpbmluZ19sZW4pCj4+ICsgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsIE5fKCJGaWxlIHRvbyBzaG9ydCBmb3IKPj4gUEtD UyM3IG1lc3NhZ2UiKSk7Cj4+ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAi c2lnIGxlbiAlIiBQUkl1R1JVQl9TSVpFICJcbiIsIAo+PiBwa2NzN19zaXplKTsKPj4gKwo+PiAr ICBzaWctPnNpZ25hdHVyZV9sZW4gPSBncnViX3N0cmxlbiAobWFnaWMpICsgc2l6ZW9mIChzdHJ1 Y3QKPj4gbW9kdWxlX3NpZ25hdHVyZSkgKyBwa2NzN19zaXplOwo+PiArCj4+ICsgIC8qIHJld2lu ZCBwb2ludGVyIGFuZCBwYXJzZSBwa2NzNyBkYXRhICovCj4+ICsgIGFwcHNpZ2RhdGEgLT0gcGtj czdfc2l6ZTsKPj4gKwo+PiArICByZXR1cm4gcGFyc2VfcGtjczdfc2lnbmVkRGF0YSAoYXBwc2ln ZGF0YSwgcGtjczdfc2l6ZSwgCj4+ICZzaWctPnBrY3M3KTsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGdydWJfZXJyX3QKPj4gK2dydWJfdmVyaWZ5X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1 Yl91aW50OF90ICpidWYsIGdydWJfc2l6ZV90IAo+PiBidWZzaXplKQo+PiArewo+PiArICBncnVi X2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGdydWJfc2l6ZV90IGRhdGFzaXplOwo+ PiArICB2b2lkICpjb250ZXh0Owo+PiArICB1bnNpZ25lZCBjaGFyICpoYXNoOwo+PiArICBnY3J5 X21waV90IGhhc2htcGk7Cj4+ICsgIGdjcnlfZXJyX2NvZGVfdCByYzsKPj4gKyAgc3RydWN0IHg1 MDlfY2VydGlmaWNhdGUgKnBrOwo+PiArICBzdHJ1Y3QgZ3J1Yl9hcHBlbmRlZF9zaWduYXR1cmUg c2lnOwo+PiArICBzdHJ1Y3QgcGtjczdfc2lnbmVySW5mbyAqc2k7Cj4+ICsgIGludCBpOwo+PiAr Cj4+ICsgIGlmICghZ3J1Yl90cnVzdGVkX2tleSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgTl8oIk5vIHRydXN0ZWQga2V5cyB0bwo+PiB2ZXJpZnkg YWdhaW5zdCIpKTsKPj4gKwo+PiArICBlcnIgPSBleHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAo YnVmLCBidWZzaXplLCAmc2lnKTsKPj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiAr ICAgIHJldHVybiBlcnI7Cj4+ICsKPj4gKyAgZGF0YXNpemUgPSBidWZzaXplIC0gc2lnLnNpZ25h dHVyZV9sZW47Cj4+ICsKPj4gKyAgZm9yIChpID0gMDsgaSA8IHNpZy5wa2NzNy5zaWduZXJJbmZv X2NvdW50OyBpKyspCj4+ICsgICAgewo+PiArICAgICAgLyoKPj4gKyAgICAgICAqIFRoaXMgY291 bGQgYmUgb3B0aW1pc2VkIGluIGEgY291cGxlIG9mIHdheXM6Cj4+ICsgICAgICAgKiAtIHdlIGNv dWxkIG9ubHkgY29tcHV0ZSBoYXNoZXMgb25jZSBwZXIgaGFzaCB0eXBlCj4+ICsgICAgICAgKiAt IHdlIGNvdWxkIHRyYWNrIHNpZ25lciBpbmZvcm1hdGlvbiBhbmQgb25seSB2ZXJpZnkgd2hlcmUg Cj4+IElEcyBtYXRjaAo+PiArICAgICAgICogRm9yIG5vdyB3ZSBkbyB0aGUgbmFpdmUgTyh0cnVz dGVkIGtleXMgKiBwa2NzNyBzaWduZXJzKSAKPj4gYXBwcm9hY2guCj4+ICsgICAgICAgKi8KPj4g KyAgICAgIHNpID0gJnNpZy5wa2NzNy5zaWduZXJJbmZvc1tpXTsKPj4gKyAgICAgIGNvbnRleHQg PSBncnViX3phbGxvYyAoc2ktPmhhc2gtPmNvbnRleHRzaXplKTsKPj4gKyAgICAgIGlmICghY29u dGV4dCkKPj4gKyAgICAgICAgcmV0dXJuIGdydWJfZXJybm87Cj4+ICsKPj4gKyAgICAgIHNpLT5o YXNoLT5pbml0IChjb250ZXh0KTsKPj4gKyAgICAgIHNpLT5oYXNoLT53cml0ZSAoY29udGV4dCwg YnVmLCBkYXRhc2l6ZSk7Cj4+ICsgICAgICBzaS0+aGFzaC0+ZmluYWwgKGNvbnRleHQpOwo+PiAr ICAgICAgaGFzaCA9IHNpLT5oYXNoLT5yZWFkIChjb250ZXh0KTsKPj4gKwo+PiArICAgICAgZ3J1 Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiZGF0YSBzaXplICUiIFBSSXhHUlVCX1NJWkUgIiwK Pj4gc2lnbmVyICVkIGhhc2ggJTAyeCUwMnglMDJ4JTAyeC4uLlxuIiwKPj4gKyAgICAgICAgICAg ICAgICAgICAgZGF0YXNpemUsIGksIGhhc2hbMF0sIGhhc2hbMV0sIGhhc2hbMl0sIGhhc2hbM10p Owo+PiArCj4+ICsgICAgICBlcnIgPSBHUlVCX0VSUl9CQURfU0lHTkFUVVJFOwo+PiArICAgICAg Zm9yIChwayA9IGdydWJfdHJ1c3RlZF9rZXk7IHBrOyBwayA9IHBrLT5uZXh0KQo+PiArICAgICAg ICB7Cj4+ICsgICAgICAgICAgcmMgPSBncnViX2NyeXB0b19yc2FfcGFkICgmaGFzaG1waSwgaGFz aCwgc2ktPmhhc2gsIAo+PiBway0+bXBpc1swXSk7Cj4+ICsgICAgICAgICAgaWYgKHJjKQo+PiAr ICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygi RXJyb3IgcGFkZGluZyBoYXNoIGZvciBSU0EKPj4gdmVyaWZpY2F0aW9uOiAlZCIpLCByYyk7Cj4+ ICsgICAgICAgICAgICAgIGdydWJfZnJlZSAoY29udGV4dCk7Cj4+ICsgICAgICAgICAgICAgIGdv dG8gY2xlYW51cDsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgIHJjID0gX2dj cnlfcHVia2V5X3NwZWNfcnNhLnZlcmlmeSAoMCwgaGFzaG1waSwKPj4gJnNpLT5zaWdfbXBpLCBw ay0+bXBpcywgTlVMTCwgTlVMTCk7Cj4+ICsgICAgICAgICAgZ2NyeV9tcGlfcmVsZWFzZSAoaGFz aG1waSk7Cj4+ICsKPj4gKyAgICAgICAgICBpZiAocmMgPT0gMCkKPj4gKyAgICAgICAgICAgIHsK Pj4gKyAgICAgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZ5IHNp Z25lciAlZCB3aXRoIGtleQo+PiAnJXMnIHN1Y2NlZWRlZFxuIiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpLCBway0+c3ViamVjdCk7Cj4+ICsgICAgICAgICAgICAgIGVyciA9IEdS VUJfRVJSX05PTkU7Cj4+ICsgICAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICAgICAgfQo+ PiArCj4+ICsgICAgICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAidmVyaWZ5IHNp Z25lciAlZCB3aXRoIGtleQo+PiAnJXMnIGZhaWxlZCB3aXRoICVkXG4iLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgaSwgcGstPnN1YmplY3QsIHJjKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ ICsgICAgICBncnViX2ZyZWUgKGNvbnRleHQpOwo+PiArCj4+ICsgICAgICBpZiAoZXJyID09IEdS VUJfRVJSX05PTkUpCj4+ICsgICAgICAgIGJyZWFrOwo+PiArICAgIH0KPj4gKwo+PiArICAvKiBJ ZiB3ZSBkaWRuJ3QgdmVyaWZ5LCBwcm92aWRlIGEgbmVhdCBtZXNzYWdlICovCj4+ICsgIGlmIChl cnIgIT0gR1JVQl9FUlJfTk9ORSkKPj4gKyAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgIE5fKCJGYWlsZWQgdG8gdmVy aWZ5IHNpZ25hdHVyZSBhZ2FpbnN0IGEgCj4+IHRydXN0ZWQga2V5IikpOwo+PiArCj4+ICtjbGVh bnVwOgo+PiArICBwa2NzN19zaWduZWREYXRhX3JlbGVhc2UgKCZzaWcucGtjczcpOwo+PiArCj4+ ICsgIHJldHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtncnVi X2NtZF92ZXJpZnlfc2lnbmF0dXJlIChncnViX2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXwo+ PiAoKHVudXNlZCkpLCBpbnQgYXJnYywgY2hhciAqKmFyZ3MpCj4+ICt7Cj4+ICsgIGdydWJfZmls ZV90IGY7Cj4+ICsgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgZ3J1Yl91 aW50OF90ICpkYXRhOwo+PiArICBncnViX3NpemVfdCBmaWxlX3NpemU7Cj4+ICsKPj4gKyAgaWYg KGFyZ2MgPCAxKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1F TlQsIE5fKCJvbmUgYXJndW1lbnQgCj4+IGV4cGVjdGVkIikpOwo+PiArCj4+ICsgIGdydWJfZHBy aW50ZiAoImFwcGVuZGVkc2lnIiwgInZlcmlmeWluZyAlc1xuIiwgYXJnc1swXSk7Cj4+ICsKPj4g KyAgZiA9IGdydWJfZmlsZV9vcGVuIChhcmdzWzBdLCBHUlVCX0ZJTEVfVFlQRV9WRVJJRllfU0lH TkFUVVJFKTsKPj4gKyAgaWYgKCFmKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJy bm87Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGVyciA9IGZp bGVfcmVhZF9hbGwgKGYsICZkYXRhLCAmZmlsZV9zaXplKTsKPj4gKyAgaWYgKGVyciAhPSBHUlVC X0VSUl9OT05FKQo+PiArICAgIGdvdG8gY2xlYW51cDsKPj4gKwo+PiArICBlcnIgPSBncnViX3Zl cmlmeV9hcHBlbmRlZF9zaWduYXR1cmUgKGRhdGEsIGZpbGVfc2l6ZSk7Cj4+ICsKPj4gKyAgZ3J1 Yl9mcmVlIChkYXRhKTsKPj4gKwo+PiArY2xlYW51cDoKPj4gKyAgaWYgKGYpCj4+ICsgICAgZ3J1 Yl9maWxlX2Nsb3NlIChmKTsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArc3RhdGlj IGdydWJfZXJyX3QKPj4gK2dydWJfY21kX2Rpc3RydXN0IChncnViX2NvbW1hbmRfdCBjbWQgX19h dHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQKPj4gYXJnYywgY2hhciAqKmFyZ3MpCj4+ICt7Cj4+ ICsgIHVuc2lnbmVkIGxvbmcgY2VydF9udW0sIGk7Cj4+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmlj YXRlICpjZXJ0LCAqcHJldjsKPj4gKwo+PiArICBpZiAoYXJnYyAhPSAxKQo+PiArICAgIHJldHVy biBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJPbmUgYXJndW1lbnQgCj4+ IGV4cGVjdGVkIikpOwo+PiArCj4+ICsgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOwo+PiAr ICBjZXJ0X251bSA9IGdydWJfc3RydG91bCAoYXJnc1swXSwgTlVMTCwgMTApOwo+PiArICBpZiAo Z3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIHJldHVybiBncnViX2Vycm5vOwo+ PiArCj4+ICsgIGlmIChjZXJ0X251bSA8IDEpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9BUkdVTUVOVCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgTl8oIkNlcnRp ZmljYXRlIG51bWJlciB0b28gc21hbGwgLSBudW1iZXJzCj4+IHN0YXJ0IGF0IDEiKSk7Cj4+ICsK Pj4gKyAgaWYgKGNlcnRfbnVtID09IDEpCj4+ICsgICAgewo+PiArICAgICAgY2VydCA9IGdydWJf dHJ1c3RlZF9rZXk7Cj4+ICsgICAgICBncnViX3RydXN0ZWRfa2V5ID0gY2VydC0+bmV4dDsKPj4g Kwo+PiArICAgICAgY2VydGlmaWNhdGVfcmVsZWFzZSAoY2VydCk7Cj4+ICsgICAgICBncnViX2Zy ZWUgKGNlcnQpOwo+PiArICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsgICAgfQo+PiAr ICBpID0gMjsKPj4gKyAgcHJldiA9IGdydWJfdHJ1c3RlZF9rZXk7Cj4+ICsgIGNlcnQgPSBncnVi X3RydXN0ZWRfa2V5LT5uZXh0Owo+PiArICB3aGlsZSAoY2VydCkKPj4gKyAgICB7Cj4+ICsgICAg ICBpZiAoaSA9PSBjZXJ0X251bSkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIHByZXYtPm5l eHQgPSBjZXJ0LT5uZXh0Owo+PiArICAgICAgICAgIGNlcnRpZmljYXRlX3JlbGVhc2UgKGNlcnQp Owo+PiArICAgICAgICAgIGdydWJfZnJlZSAoY2VydCk7Cj4+ICsgICAgICAgICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIGkrKzsKPj4gKyAgICAgIHByZXYg PSBjZXJ0Owo+PiArICAgICAgY2VydCA9IGNlcnQtPm5leHQ7Cj4+ICsgICAgfQo+PiArCj4+ICsg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+ICsgICAgICAgICAg ICAgICAgICAgICBOXygiTm8gY2VydGlmaWNhdGUgbnVtYmVyICVsdSBmb3VuZCAtIG9ubHkgJWx1 Cj4+IGNlcnRpZmljYXRlcyBpbiB0aGUgc3RvcmUiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAg IGNlcnRfbnVtLCBpIC0gMSk7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICtn cnViX2NtZF90cnVzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQp KSwgaW50Cj4+IGFyZ2MsIGNoYXIgKiphcmdzKQo+PiArewo+PiArICBncnViX2ZpbGVfdCBjZXJ0 ZjsKPj4gKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQgPSBOVUxMOwo+PiArICBncnVi X2Vycl90IGVycjsKPj4gKwo+PiArICBpZiAoYXJnYyAhPSAxKQo+PiArICAgIHJldHVybiBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJvbmUgYXJndW1lbnQgCj4+IGV4cGVj dGVkIikpOwo+PiArCj4+ICsgIGNlcnRmID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJf RklMRV9UWVBFX0NFUlRJRklDQVRFX1RSVVNUIHwKPj4gR1JVQl9GSUxFX1RZUEVfTk9fREVDT01Q UkVTUyk7Cj4+ICsgIGlmICghY2VydGYpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJybm87Cj4+ICsK Pj4gKyAgY2VydCA9IGdydWJfemFsbG9jIChzaXplb2YgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl KSk7Cj4+ICsgIGlmICghY2VydCkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX01FTU9SWSwgTl8oIkNvdWxkIG5vdCBhbGxvY2F0ZQo+PiBtZW1vcnkgZm9yIGNlcnRp ZmljYXRlIikpOwo+PiArCj4+ICsgIGVyciA9IHJlYWRfY2VydF9mcm9tX2ZpbGUgKGNlcnRmLCBj ZXJ0KTsKPj4gKyAgZ3J1Yl9maWxlX2Nsb3NlIChjZXJ0Zik7Cj4+ICsgIGlmIChlcnIgIT0gR1JV Ql9FUlJfTk9ORSkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX2ZyZWUgKGNlcnQpOwo+PiArICAg ICAgcmV0dXJuIGVycjsKPj4gKyAgICB9Cj4+ICsgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2ln IiwgIkxvYWRlZCBjZXJ0aWZpY2F0ZSB3aXRoIENOOiAlc1xuIiwKPj4gY2VydC0+c3ViamVjdCk7 Cj4+ICsKPj4gKyAgY2VydC0+bmV4dCA9IGdydWJfdHJ1c3RlZF9rZXk7Cj4+ICsgIGdydWJfdHJ1 c3RlZF9rZXkgPSBjZXJ0Owo+PiArCj4+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiArfQo+ PiArCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9jbWRfbGlzdCAoZ3J1Yl9jb21tYW5k X3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IGFyZ2MKPj4gX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpLAo+PiArICAgICAgICAgICAgICAgY2hhciAqKmFyZ3MgX19hdHRyaWJ1dGVf XyAoKHVudXNlZCkpKQo+PiArewo+PiArICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydDsK Pj4gKyAgaW50IGNlcnRfbnVtID0gMTsKPj4gKyAgZ3J1Yl9zaXplX3QgaTsKPj4gKwo+PiArICBm b3IgKGNlcnQgPSBncnViX3RydXN0ZWRfa2V5OyBjZXJ0OyBjZXJ0ID0gY2VydC0+bmV4dCkKPj4g KyAgICB7Cj4+ICsgICAgICBncnViX3ByaW50ZiAoTl8oIkNlcnRpZmljYXRlICVkOlxuIiksIGNl cnRfbnVtKTsKPj4gKwo+PiArICAgICAgZ3J1Yl9wcmludGYgKE5fKCJcdFNlcmlhbDogIikpOwo+ PiArICAgICAgZm9yIChpID0gMDsgaSA8IGNlcnQtPnNlcmlhbF9sZW4gLSAxOyBpKyspCj4+ICsg ICAgICAgIHsKPj4gKyAgICAgICAgICBncnViX3ByaW50ZiAoIiUwMng6IiwgY2VydC0+c2VyaWFs W2ldKTsKPj4gKyAgICAgICAgfQo+PiArICAgICAgZ3J1Yl9wcmludGYgKCIlMDJ4XG4iLCBjZXJ0 LT5zZXJpYWxbY2VydC0+c2VyaWFsX2xlbiAtIDFdKTsKPj4gKwo+PiArICAgICAgZ3J1Yl9wcmlu dGYgKCJcdENOOiAlc1xuXG4iLCBjZXJ0LT5zdWJqZWN0KTsKPj4gKyAgICAgIGNlcnRfbnVtKys7 Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiArfQo+PiArCj4+ ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArYXBwZW5kZWRzaWdfaW5pdCAoZ3J1Yl9maWxlX3QgaW8g X19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBlbnVtCj4+IGdydWJfZmlsZV90eXBlIHR5cGUsCj4+ ICsgICAgICAgICAgICAgICAgICB2b2lkICoqY29udGV4dCBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSksIGVudW0KPj4gZ3J1Yl92ZXJpZnlfZmxhZ3MgKmZsYWdzKQo+PiArewo+PiArICBpZiAoY2hl Y2tfc2lncyA9PSBjaGVja19zaWdzX25vKQo+PiArICAgIHsKPj4gKyAgICAgICpmbGFncyA9IEdS VUJfVkVSSUZZX0ZMQUdTX1NLSVBfVkVSSUZJQ0FUSU9OOwo+PiArICAgICAgcmV0dXJuIEdSVUJf RVJSX05PTkU7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHN3aXRjaCAodHlwZSAmIEdSVUJfRklMRV9U WVBFX01BU0spCj4+ICsgICAgewo+PiArICAgICAgY2FzZSBHUlVCX0ZJTEVfVFlQRV9DRVJUSUZJ Q0FURV9UUlVTVDoKPj4gKyAgICAgICAgLyoKPj4gKyAgICAgICAgICogVGhpcyBpcyBhIGNlcnRp ZmljYXRlIHRvIGFkZCB0byB0cnVzdGVkIGtleWNoYWluLgo+PiArICAgICAgICAgKgo+PiArICAg ICAgICAgKiBUaGlzIG5lZWRzIHRvIGJlIHZlcmlmaWVkIG9yIGJsb2NrZWQuIElkZWFsbHkgd2Un ZCB3cml0ZSAKPj4gYW4geDUwOQo+PiArICAgICAgICAgKiB2ZXJpZmllciwgYnV0IHdlIGxhY2sg dGhlIGh1YnJpcyByZXF1aXJlZCB0byB0YWtlIHRoaXMgb24uIAo+PiBJbnN0ZWFkLAo+PiArICAg ICAgICAgKiByZXF1aXJlIHRoYXQgaXQgaGF2ZSBhbiBhcHBlbmRlZCBzaWduYXR1cmUuCj4+ICsg ICAgICAgICAqLwo+PiArCj4+ICsgICAgICAgIC8qIEZhbGwgdGhyb3VnaCAqLwo+PiArCj4+ICsg ICAgICBjYXNlIEdSVUJfRklMRV9UWVBFX0xJTlVYX0tFUk5FTDoKPj4gKyAgICAgIGNhc2UgR1JV Ql9GSUxFX1RZUEVfR1JVQl9NT0RVTEU6Cj4+ICsgICAgICAgIC8qCj4+ICsgICAgICAgICAqIEFw cGVuZGVkIHNpZ25hdHVyZXMgYXJlIG9ubHkgZGVmaW5lZCBmb3IgRUxGIGJpbmFyaWVzLgo+PiAr ICAgICAgICAgKiBPdXQgb2YgYW4gYWJ1bmRhbmNlIG9mIGNhdXRpb24sIHdlIG9ubHkgdmVyaWZ5 IExpbnV4IAo+PiBrZXJuZWxzIGFuZAo+PiArICAgICAgICAgKiBHUlVCIG1vZHVsZXMgYXQgdGhp cyBwb2ludC4KPj4gKyAgICAgICAgICovCj4+ICsgICAgICAgICpmbGFncyA9IEdSVUJfVkVSSUZZ X0ZMQUdTX1NJTkdMRV9DSFVOSzsKPj4gKyAgICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ ICsKPj4gKyAgICAgIGNhc2UgR1JVQl9GSUxFX1RZUEVfQUNQSV9UQUJMRToKPj4gKyAgICAgIGNh c2UgR1JVQl9GSUxFX1RZUEVfREVWSUNFX1RSRUVfSU1BR0U6Cj4+ICsgICAgICAgIC8qCj4+ICsg ICAgICAgICAqIEl0IGlzIHBvc3NpYmxlIHRvIHVzZSBhcHBlbmRlZCBzaWduYXR1cmUgdmVyaWZp Y2F0aW9uIAo+PiB3aXRob3V0Cj4+ICsgICAgICAgICAqIGxvY2tkb3duIC0gbGlrZSB0aGUgUEdQ IHZlcmlmaWVyLiBXaGVuIGNvbWJpbmVkIHdpdGggYW4gCj4+IGVtYmVkZGVkCj4+ICsgICAgICAg ICAqIGNvbmZpZyBmaWxlIGluIGEgc2lnbmVkIGdydWIgYmluYXJ5LCB0aGlzIGNvdWxkIHN0aWxs IGJlIGEKPj4gbWVhbmluZ2Z1bAo+PiArICAgICAgICAgKiBzZWN1cmUtYm9vdCBjaGFpbiAtIHNv IGxvbmcgYXMgaXQgaXNuJ3Qgc3VidmVydGVkIGJ5Cj4+IHNvbWV0aGluZyBsaWtlIGEKPj4gKyAg ICAgICAgICogcm91Z2UgQUNQSSB0YWJsZSBvciBEVCBpbWFnZS4gRGVmZXIgdGhlbSBleHBsaWNp dGx5Lgo+PiArICAgICAgICAgKi8KPj4gKyAgICAgICAgKmZsYWdzID0gR1JVQl9WRVJJRllfRkxB R1NfREVGRVJfQVVUSDsKPj4gKyAgICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsKPj4g KyAgICAgIGRlZmF1bHQ6Cj4+ICsgICAgICAgICpmbGFncyA9IEdSVUJfVkVSSUZZX0ZMQUdTX1NL SVBfVkVSSUZJQ0FUSU9OOwo+PiArICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKyAg ICB9Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICthcHBlbmRlZHNpZ193cml0 ZSAodm9pZCAqY3R4dCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIHZvaWQgKmJ1ZiwKPj4gZ3J1 Yl9zaXplX3Qgc2l6ZSkKPj4gK3sKPj4gKyAgcmV0dXJuIGdydWJfdmVyaWZ5X2FwcGVuZGVkX3Np Z25hdHVyZSAoYnVmLCBzaXplKTsKPj4gK30KPj4gKwo+PiArc3RydWN0IGdydWJfZmlsZV92ZXJp ZmllciBncnViX2FwcGVuZGVkc2lnX3ZlcmlmaWVyID0gewo+PiArICAubmFtZSA9ICJhcHBlbmRl ZHNpZyIsCj4+ICsgIC5pbml0ID0gYXBwZW5kZWRzaWdfaW5pdCwKPj4gKyAgLndyaXRlID0gYXBw ZW5kZWRzaWdfd3JpdGUsCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgZ3J1Yl9zc2l6ZV90Cj4+ICtw c2V1ZG9fcmVhZCAoc3RydWN0IGdydWJfZmlsZSAqZmlsZSwgY2hhciAqYnVmLCBncnViX3NpemVf dCBsZW4pCj4+ICt7Cj4+ICsgIGdydWJfbWVtY3B5IChidWYsIChncnViX3VpbnQ4X3QgKikgZmls ZS0+ZGF0YSArIGZpbGUtPm9mZnNldCwgbGVuKTsKPj4gKyAgcmV0dXJuIGxlbjsKPj4gK30KPj4g Kwo+PiArLyogRmlsZXN5c3RlbSBkZXNjcmlwdG9yLiAgKi8KPj4gK3N0YXRpYyBzdHJ1Y3QgZ3J1 Yl9mcyBwc2V1ZG9fZnMgPSB7IC5uYW1lID0gInBzZXVkbyIsIC5mc19yZWFkID0gCj4+IHBzZXVk b19yZWFkIH07Cj4+ICsKPj4gK3N0YXRpYyBncnViX2NvbW1hbmRfdCBjbWRfdmVyaWZ5LCBjbWRf bGlzdCwgY21kX2Rpc3RydXN0LCBjbWRfdHJ1c3Q7Cj4+ICsKPj4gK0dSVUJfTU9EX0lOSVQgKGFw cGVuZGVkc2lnKQo+PiArewo+PiArICBpbnQgcmM7Cj4+ICsgIHN0cnVjdCBncnViX21vZHVsZV9o ZWFkZXIgKmhlYWRlcjsKPj4gKwo+PiArICAvKiBJZiBpbiBsb2NrZG93biwgaW1tZWRpYXRlbHkg ZW50ZXIgZm9yY2VkIG1vZGUgKi8KPj4gKyAgaWYgKGdydWJfaXNfbG9ja2Rvd24gKCkgPT0gR1JV Ql9MT0NLRE9XTl9FTkFCTEVEKQo+PiArICAgIGNoZWNrX3NpZ3MgPSBjaGVja19zaWdzX2ZvcmNl ZDsKPj4gKwo+PiArICBncnViX3RydXN0ZWRfa2V5ID0gTlVMTDsKPj4gKyAgZ3J1Yl9yZWdpc3Rl cl92YXJpYWJsZV9ob29rICgiY2hlY2tfYXBwZW5kZWRfc2lnbmF0dXJlcyIsCj4+IGdydWJfZW52 X3JlYWRfc2VjLCBncnViX2Vudl93cml0ZV9zZWMpOwo+PiArICBncnViX2Vudl9leHBvcnQgKCJj aGVja19hcHBlbmRlZF9zaWduYXR1cmVzIik7Cj4+ICsKPj4gKyAgcmMgPSBhc24xX2luaXQgKCk7 Cj4+ICsgIGlmIChyYykKPj4gKyAgICBncnViX2ZhdGFsICgiRXJyb3IgaW5pdGluZyBBU04uMSBk YXRhIHN0cnVjdHVyZXM6ICVkOiAlc1xuIiwgcmMsCj4+IGFzbjFfc3RyZXJyb3IgKHJjKSk7Cj4+ ICsKPj4gKyAgRk9SX01PRFVMRVMgKGhlYWRlcikKPj4gKyAgewo+PiArICAgIHN0cnVjdCBncnVi X2ZpbGUgcHNldWRvX2ZpbGU7Cj4+ICsgICAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnBrID0g TlVMTDsKPj4gKyAgICBncnViX2Vycl90IGVycjsKPj4gKwo+PiArICAgIC8qIE5vdCBhbiBYLjUw OSBjZXJ0aWZpY2F0ZSwgc2tpcC4gKi8KPj4gKyAgICBpZiAoaGVhZGVyLT50eXBlICE9IE9CSl9U WVBFX1g1MDlfUFVCS0VZKQo+PiArICAgICAgY29udGludWU7Cj4+ICsKPj4gKyAgICBncnViX21l bXNldCAoJnBzZXVkb19maWxlLCAwLCBzaXplb2YgKHBzZXVkb19maWxlKSk7Cj4+ICsgICAgcHNl dWRvX2ZpbGUuZnMgPSAmcHNldWRvX2ZzOwo+PiArICAgIHBzZXVkb19maWxlLnNpemUgPSBoZWFk ZXItPnNpemUgLSBzaXplb2YgKHN0cnVjdCAKPj4gZ3J1Yl9tb2R1bGVfaGVhZGVyKTsKPj4gKyAg ICBwc2V1ZG9fZmlsZS5kYXRhID0gKGNoYXIgKikgaGVhZGVyICsgc2l6ZW9mIChzdHJ1Y3QgCj4+ IGdydWJfbW9kdWxlX2hlYWRlcik7Cj4+ICsKPj4gKyAgICBncnViX2RwcmludGYgKCJhcHBlbmRl ZHNpZyIsICJGb3VuZCBhbiB4NTA5IGtleSwgc2l6ZT0lIgo+PiBQUkl1R1JVQl9VSU5UNjRfVCAi XG4iLAo+PiArICAgICAgICAgICAgICAgICAgcHNldWRvX2ZpbGUuc2l6ZSk7Cj4+ICsKPj4gKyAg ICBwayA9IGdydWJfemFsbG9jIChzaXplb2YgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlKSk7Cj4+ ICsgICAgaWYgKCFwaykKPj4gKyAgICAgIHsKPj4gKyAgICAgICAgZ3J1Yl9mYXRhbCAoIk91dCBv ZiBtZW1vcnkgbG9hZGluZyBpbml0aWFsIGNlcnRpZmljYXRlcyIpOwo+PiArICAgICAgfQo+IAo+ IFN1Z2dlc3Rpb24gOiBHb29kIHRvIGhhdmUgd2l0aG91dCBicmFja2V0cyBpZiBqdXN0IG9uZSBs aW5lIGNvbmRpdGlvbiEKPiBUaGFuayB5b3UhCj4gCj4gUmV2aWV3ZWQtYnk6wqBBdm5pc2jCoENo b3VoYW7CoDxhdm5pc2hAbGludXguaWJtLmNvbT4KPiAKPj4gKwo+PiArICAgIGVyciA9IHJlYWRf Y2VydF9mcm9tX2ZpbGUgKCZwc2V1ZG9fZmlsZSwgcGspOwo+PiArICAgIGlmIChlcnIgIT0gR1JV Ql9FUlJfTk9ORSkKPj4gKyAgICAgIGdydWJfZmF0YWwgKCJFcnJvciBsb2FkaW5nIGluaXRpYWwg a2V5OiAlcyIsIGdydWJfZXJybXNnKTsKPj4gKwo+PiArICAgIGdydWJfZHByaW50ZiAoImFwcGVu ZGVkc2lnIiwgImxvYWRlZCBjZXJ0aWZpY2F0ZSBDTj0nJXMnXG4iLCAKPj4gcGstPnN1YmplY3Qp Owo+PiArCj4+ICsgICAgcGstPm5leHQgPSBncnViX3RydXN0ZWRfa2V5Owo+PiArICAgIGdydWJf dHJ1c3RlZF9rZXkgPSBwazsKPj4gKyAgfQo+PiArCj4+ICsgIGNtZF90cnVzdCA9IGdydWJfcmVn aXN0ZXJfY29tbWFuZCAoInRydXN0X2NlcnRpZmljYXRlIiwKPj4gZ3J1Yl9jbWRfdHJ1c3QsIE5f KCJYNTA5X0NFUlRJRklDQVRFIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTl8oIkFkZCBYNTA5X0NFUlRJRklDQVRFIHRvCj4+IHRydXN0ZWQgY2VydGlmaWNhdGVz LiIpKTsKPj4gKyAgY21kX2xpc3QgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJsaXN0X2NlcnRp ZmljYXRlcyIsIAo+PiBncnViX2NtZF9saXN0LCAwLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTl8oIlNob3cgdGhlIGxpc3Qgb2YgdHJ1c3RlZCB4NTA5Cj4+IGNlcnRp ZmljYXRlcy4iKSk7Cj4+ICsgIGNtZF92ZXJpZnkgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ2 ZXJpZnlfYXBwZW5kZWQiLAo+PiBncnViX2NtZF92ZXJpZnlfc2lnbmF0dXJlLCBOXygiRklMRSIp LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiVmVyaWZ5IEZJ TEUgYWdhaW5zdCB0aGUKPj4gdHJ1c3RlZCB4NTA5IGNlcnRpZmljYXRlcy4iKSk7Cj4+ICsgIGNt ZF9kaXN0cnVzdCA9IGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoImRpc3RydXN0X2NlcnRpZmljYXRl IiwKPj4gZ3J1Yl9jbWRfZGlzdHJ1c3QsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgTl8oIkNFUlRfTlVNQkVSIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTl8oIlJlbW92ZSBDRVJUX05VTUJFUiAoYXMKPj4gbGlzdGVkIGJ5 IGxpc3RfY2VydGlmaWNhdGVzKSIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAiIGZyb20gdHJ1c3RlZCAKPj4gY2VydGlmaWNhdGVzLiIpKTsKPj4gKwo+PiAr ICBncnViX3ZlcmlmaWVyX3JlZ2lzdGVyICgmZ3J1Yl9hcHBlbmRlZHNpZ192ZXJpZmllcik7Cj4+ ICsgIGdydWJfZGxfc2V0X3BlcnNpc3RlbnQgKG1vZCk7Cj4+ICt9Cj4+ICsKPj4gK0dSVUJfTU9E X0ZJTkkgKGFwcGVuZGVkc2lnKQo+PiArewo+PiArICAvKgo+PiArICAgKiBncnViX2RsX3NldF9w ZXJzaXN0ZW50IHNob3VsZCBwcmV2ZW50IHRoaXMgZnJvbSBhY3R1YWxseSAKPj4gcnVubmluZywg YnV0Cj4+ICsgICAqIGl0IGRvZXMgc3RpbGwgcnVuIHVuZGVyIGVtdS4KPj4gKyAgICovCj4+ICsK Pj4gKyAgZ3J1Yl92ZXJpZmllcl91bnJlZ2lzdGVyICgmZ3J1Yl9hcHBlbmRlZHNpZ192ZXJpZmll cik7Cj4+ICsgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRfdmVyaWZ5KTsKPj4gKyAgZ3J1 Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF9saXN0KTsKPj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2Nv bW1hbmQgKGNtZF90cnVzdCk7Cj4+ICsgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRfZGlz dHJ1c3QpOwo+PiArfQo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVk c2lnL2FwcGVuZGVkc2lnLmgKPj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBw ZW5kZWRzaWcuaAo+PiBpbmRleCBmYTU5MzAyYzguLjYwZWUwZjJmYSAxMDA2NDQKPj4gLS0tIGEv Z3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPj4gKysrIGIvZ3J1 Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPj4gQEAgLTE4LDcgKzE4 LDcgQEAKPj4gICAqLwo+PiAKPj4gICNpbmNsdWRlIDxncnViL2NyeXB0by5oPgo+PiAtI2luY2x1 ZGUgPGdydWIvbGlidGFzbjEuaD4KPj4gKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgo+PiAKPj4gIGV4 dGVybiBhc24xX25vZGUgX2dudXRsc19nbnV0bHNfYXNuOwo+PiAgZXh0ZXJuIGFzbjFfbm9kZSBf Z251dGxzX3BraXhfYXNuOwo+PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVu ZGVkc2lnL2FzbjF1dGlsLmMKPj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNu MXV0aWwuYwo+PiBpbmRleCA2MDlkMGVjZjIuLmEyYzQ2NzI0YSAxMDA2NDQKPj4gLS0tIGEvZ3J1 Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1dGlsLmMKPj4gKysrIGIvZ3J1Yi1jb3Jl L2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FzbjF1dGlsLmMKPj4gQEAgLTE3LDcgKzE3LDcgQEAKPj4g ICAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCj4+ICAgKi8KPj4gCj4+IC0jaW5jbHVkZSA8Z3J1Yi9saWJ0YXNuMS5oPgo+PiAr I2luY2x1ZGUgPGxpYnRhc24xLmg+Cj4+ICAjaW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgo+PiAgI2lu Y2x1ZGUgPGdydWIvZXJyLmg+Cj4+ICAjaW5jbHVkZSA8Z3J1Yi9tbS5oPgo+PiBkaWZmIC0tZ2l0 IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3RhYi5jCj4+IGIv Z3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3RhYi5jCj4+IGluZGV4 IGRkZDEzMTRlNi4uOGM0ZWI4MWQ3IDEwMDY0NAo+PiAtLS0gYS9ncnViLWNvcmUvY29tbWFuZHMv YXBwZW5kZWRzaWcvZ251dGxzX2FzbjFfdGFiLmMKPj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRz L2FwcGVuZGVkc2lnL2dudXRsc19hc24xX3RhYi5jCj4+IEBAIC0xLDUgKzEsNSBAQAo+PiAgI2lu Y2x1ZGUgPGdydWIvbW0uaD4KPj4gLSNpbmNsdWRlIDxncnViL2xpYnRhc24xLmg+Cj4+ICsjaW5j bHVkZSA8bGlidGFzbjEuaD4KPj4gCj4+ICBjb25zdCBhc24xX3N0YXRpY19ub2RlIGdudXRsc19h c24xX3RhYltdID0gewo+PiAgICB7ICJHTlVUTFMiLCA1MzY4NzI5NzYsIE5VTEwgfSwKPj4gZGlm ZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMK Pj4gYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jCj4+IGlu ZGV4IGFkZWY2OWQ5NS4uOGVlZWFjMDQ3IDEwMDY0NAo+PiAtLS0gYS9ncnViLWNvcmUvY29tbWFu ZHMvYXBwZW5kZWRzaWcvcGtpeF9hc24xX3RhYi5jCj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9wa2l4X2FzbjFfdGFiLmMKPj4gQEAgLTEsNSArMSw1IEBACj4+ICAjaW5j bHVkZSA8Z3J1Yi9tbS5oPgo+PiAtI2luY2x1ZGUgPGdydWIvbGlidGFzbjEuaD4KPj4gKyNpbmNs dWRlIDxsaWJ0YXNuMS5oPgo+PiAKPj4gIGNvbnN0IGFzbjFfc3RhdGljX25vZGUgcGtpeF9hc24x X3RhYltdID0gewo+PiAgICB7ICJQS0lYMSIsIDUzNjg3NTAyNCwgTlVMTCB9LAo+PiBkaWZmIC0t Z2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwo+PiBiL2dydWItY29y ZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKPj4gaW5kZXggZWI5YTFjYTBmLi5iMTEzYWMz OGIgMTAwNjQ0Cj4+IC0tLSBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMK Pj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYwo+PiBAQCAtMTcs NyArMTcsNyBAQAo+PiAgICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPj4gICAqLwo+PiAKPj4gLSNpbmNsdWRlIDxncnViL2xp YnRhc24xLmg+Cj4+ICsjaW5jbHVkZSA8bGlidGFzbjEuaD4KPj4gICNpbmNsdWRlIDxncnViL3R5 cGVzLmg+Cj4+ICAjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KPj4gICNpbmNsdWRlIDxncnViL21tLmg+ Cj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2dydWIvZmlsZS5oIGIvaW5jbHVkZS9ncnViL2ZpbGUu aAo+PiBpbmRleCBhNWJmM2E3OTIuLmQ2NzhkZTA2MyAxMDA2NDQKPj4gLS0tIGEvaW5jbHVkZS9n cnViL2ZpbGUuaAo+PiArKysgYi9pbmNsdWRlL2dydWIvZmlsZS5oCj4+IEBAIC04MCw2ICs4MCw4 IEBAIGVudW0gZ3J1Yl9maWxlX3R5cGUKPj4gICAgICBHUlVCX0ZJTEVfVFlQRV9QVUJMSUNfS0VZ LAo+PiAgICAgIC8qIEZpbGUgaG9sZGluZyBwdWJsaWMga2V5IHRvIGFkZCB0byB0cnVzZWQga2V5 cy4gICovCj4+ICAgICAgR1JVQl9GSUxFX1RZUEVfUFVCTElDX0tFWV9UUlVTVCwKPj4gKyAgICAv KiBGaWxlIGhvbGRpbmcgeDUwOSBjZXJ0aWZpY2lhdGUgdG8gYWRkIHRvIHRydXN0ZWQga2V5cy4g ICovCj4+ICsgICAgR1JVQl9GSUxFX1RZUEVfQ0VSVElGSUNBVEVfVFJVU1QsCj4+ICAgICAgLyog RmlsZSBvZiB3aGljaCB3ZSBpbnRlbmQgdG8gcHJpbnQgYSBibG9ja2xpc3QgdG8gdGhlIHVzZXIu ICAqLwo+PiAgICAgIEdSVUJfRklMRV9UWVBFX1BSSU5UX0JMT0NLTElTVCwKPj4gICAgICAvKiBG aWxlIHdlIGludGVuZCB0byB1c2UgZm9yIHRlc3QgbG9hZGluZyBvciB0ZXN0aW5nIHNwZWVkLiAg Ki8KCgpBZGRyZXNzZWQgYWJvdmUgY29tbWVudHMuIFRoYW5rIHlvdSBBdm5pc2ggQ2hvdWhhbi4K ClRoYW5rcywKU3VkaGFrYXIgS3VwcHVzYW15CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRldmVsQGdu dS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1kZXZlbAo=