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 DB618C2D0CD for ; Wed, 21 May 2025 12:49:46 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uHiso-0004QT-4z; Wed, 21 May 2025 08:49:18 -0400 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 1uHisl-0004KW-7L for grub-devel@gnu.org; Wed, 21 May 2025 08:49:15 -0400 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 1uHise-0004Oz-Dh for grub-devel@gnu.org; Wed, 21 May 2025 08:49:13 -0400 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 54L7DXoo012569; Wed, 21 May 2025 12:49:05 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=Avhk6j 6wHPeYMNbJ/u7lHM4YfSZxDUCWCQrALn8s+lw=; b=qecZUnj0E4WdJVGKj9btKI Gdt1Pm3aoXc9AkZv8rK1qRnLjHdzAolNRrxGvu7odC+jpdClseS0oOY+OscLBb6n w6n1bKXBzpgpnD72GcIl64qt78NiBm/uj+lAZ0tgNSQhhFBotXrvKwM+jihha7nP 9wIacQubbD/u4EJcHox6+WnN+2crGflR1VbbvU8pXeC+l/bQXTUf36ZACp5ShY9T 5jpBn0plt8YiAH7J3eYcCArBB7RfobQtcd4T/3UX949S+/AmslZk1s4IQ1QSN1js E/ZC8ol/FIaailPiDPfNMaL5vi/zrWkS4s9xDltIicXJopgBMmzavR+7SEpYAKRA == Received: from ppma21.wdc07v.mail.ibm.com (5b.69.3da9.ip4.static.sl-reverse.com [169.61.105.91]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 46rye6m41h-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 21 May 2025 12:49:05 +0000 (GMT) Received: from pps.filterd (ppma21.wdc07v.mail.ibm.com [127.0.0.1]) by ppma21.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 54L9b7Vc024701; Wed, 21 May 2025 12:49:04 GMT Received: from smtprelay07.dal12v.mail.ibm.com ([172.16.1.9]) by ppma21.wdc07v.mail.ibm.com (PPS) with ESMTPS id 46rwkr47tc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 21 May 2025 12:49:04 +0000 Received: from smtpav01.dal12v.mail.ibm.com (smtpav01.dal12v.mail.ibm.com [10.241.53.100]) by smtprelay07.dal12v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 54LCn3EE27525862 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 21 May 2025 12:49:03 GMT Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1110858061; Wed, 21 May 2025 12:49:03 +0000 (GMT) Received: from smtpav01.dal12v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 5C52A58058; Wed, 21 May 2025 12:49:02 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav01.dal12v.mail.ibm.com (Postfix) with ESMTP; Wed, 21 May 2025 12:49:02 +0000 (GMT) MIME-Version: 1.0 Date: Wed, 21 May 2025 18:19:02 +0530 From: sudhakar To: Gary Lin Cc: The development of GNU GRUB , dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, msuchanek@suse.com, mlewando@redhat.com, stefanb@linux.ibm.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ltcgcw@linux.vnet.ibm.com, ssrish@linux.ibm.com Subject: Re: [PATCH v2 20/21] appendedsig: The grub command's trusted and distrusted support In-Reply-To: References: <20250326193242.703506-1-sudhakar@linux.ibm.com> <20250326193242.703506-21-sudhakar@linux.ibm.com> Message-ID: X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNTIxMDEyMiBTYWx0ZWRfXxu2X1L+1jQNj p/N2ldlV0yl9Sw3sTVec/aXuEiXe1l5F6tSDKfm6r67jpfpnwf72bmoNEZ73iZAtoDYBh1tuhW2 vg78U45Gbjk6P4Ul60xXtJjlomVhv1ZEq5r54QhYjY90bCDP8f3YhHgRUo+MGmqaEkmuO3k9OR3 LcpoG4ydeipxQh+G/k6XlaavRwFkoDVN9Ym5egcddXE5RE9DjIPNN5xQ0PyNaNOvuXU2cyW4UZE VIP7MjR7GdyexU0JkLLl1m8iU2dzOI18n3MmsPCs2GZA9nNpaz5JZuqAV19UJYvP5E+yza6p2rB pJK/ssOMsrMv/KlHioNKNlrqtsxMF3E+O9FDfjDpwCb45CW0zRgx/LzbKMbHyz4reJ0ZxomHQP/ 5MYFQ8pLI7Ju09TtBOe3Z7vwS/ifKIcxsOwkU7oKkZVAoSFWBgXGI7zpNlzCDbXXbg4cb1mW X-Authority-Analysis: v=2.4 cv=esrfzppX c=1 sm=1 tr=0 ts=682dcbc1 cx=c_pps a=GFwsV6G8L6GxiO2Y/PsHdQ==:117 a=GFwsV6G8L6GxiO2Y/PsHdQ==:17 a=kj9zAlcOel0A:10 a=dt9VzEwgFbYA:10 a=mDV3o1hIAAAA:8 a=VnNF1IyMAAAA:8 a=5M31OkAnrpx9GK-Q9m0A:9 a=CjuIK1q_8ugA:10 X-Proofpoint-ORIG-GUID: vaFLTVT-axX8ovCePjH-bAB6WEP78PZb X-Proofpoint-GUID: vaFLTVT-axX8ovCePjH-bAB6WEP78PZb X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-05-21_04,2025-05-20_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 malwarescore=0 lowpriorityscore=0 impostorscore=0 suspectscore=0 spamscore=0 phishscore=0 priorityscore=1501 clxscore=1015 bulkscore=0 mlxscore=0 mlxlogscore=999 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505160000 definitions=main-2505210122 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_H5=0.001, RCVD_IN_MSPIKE_WL=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 T24gMjAyNS0wNC0xNSAxMzo1NCwgR2FyeSBMaW4gd3JvdGU6Cj4gT24gVGh1LCBNYXIgMjcsIDIw MjUgYXQgMDE6MDI6NDFBTSArMDUzMCwgU3VkaGFrYXIgS3VwcHVzYW15IHdyb3RlOgo+PiBUbyBz dXBwb3J0IHRoZSBmb2xsb3dpbmcgdHJ1c3RlZCBhbmQgZGlzdHJ1c3RlZCBjb21tYW5kcwo+PiAK Pj4gICAxLiB0cnVzdGVkX2xpc3Q6Cj4+ICAgICAgICAgSXQgd2lsbCBzaG93IHRoZSBsaXN0IG9m IHRydXN0ZWQgY2VydGlmaWNhdGVzIGFuZCBiaW5hcnkgCj4+IGhhc2hlcwo+PiAgIDIuIGRpc3Ry dXN0ZWRfbGlzdDoKPj4gICAgICAgICBJdCB3aWxsIHNob3cgdGhlIGxpc3Qgb2YgZGlzdHJ1c3Rl ZCBjZXJ0aWZpY2F0ZXMgYW5kIAo+PiBiaW5hcnkvY2VydGlmaWNhdGUgaGFzaGVzCj4+ICAgMy4g dHJ1c3RlZF9jZXJ0aWZpY2F0ZToKPj4gICAgICAgICBJdCB3aWxsIGFkZCB0aGUgdHJ1c3RlZCBj ZXJ0aWZpY2F0ZSB0byB0aGUgdHJ1c3RlZCBsaXN0Cj4+ICAgNC4gdHJ1c3RlZF9zaWduYXR1cmU6 Cj4+ICAgICAgICAgSXQgd2lsbCBhZGQgdGhlIGNlcnRpZmljYXRlL2JpbmFyeSBoYXNoIHRvIHRo ZSB0cnVzdGVkIGxpc3QKPj4gICA1LiBkaXN0cnVzdGVkX2NlcnRpZmljYXRlOgo+PiAgICAgICAg IEl0IHdpbGwgcmVtb3ZlIHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlIGZyb20gdHJzdXRlZCBsaXN0 Cj4+ICAgNi4gZGlzdHJ1c3RlZF9zaWduYXR1cmU6Cj4+ICAgICAgICAgSXQgd2lsbCBhZGQgdGhl IGNlcnRpZmljYXRlL2JpbmFyeSBoYXNoIHRvIHRoZSBkaXN0cnN1dGVkIGxpc3QKPj4gCj4+IE5v dGU6LQo+PiAgICBUaGUgYWRkaXRpb24vZGVsZXRpb24gb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMg YW5kIGJpbmFyeSBoYXNoZXMKPj4gYXJlIG5vdCBhbGxvd2VkIGluIGdydWIgY29tbWFuZCBwcm9t cHQgd2hpbGUgc2VjdXJlIGJvb3QgaXMgZW5hYmxlZC4KPj4gCj4gVGhlIHRlc3QgaW4gUEFUQ0gg MTEgc3RpbGwgcmVsaWVzIG9uICd0cnVzdF9jZXJ0aWZpY2F0ZScgYW5kCj4gJ2Rpc3RydXN0X2Nl cnRpZmljYXRlJy4gUGVyIHRoZSBkZXNjcmlwdGlvbiwgSSBndWVzcyB0aGUgb2xkIHRlc3QgaXMg Cj4gbm90Cj4gd29ya2luZyBhbnltb3JlIHdoaWxlIHNlY3VyZSBib290IGlzIGVuYWJsZWQ/IElm IHNvLCB3ZSB3aWxsIG5lZWQgYSBuZXcKPiB0ZXN0IGZvciBhcHBlbmRlZHNpZy4KPiAKPiBDaGVl cnMsCj4gCj4gR2FyeSBMaW4KPiAKCkhpIEdhcnkgTGluLApUaGFuayB5b3Ugc28gbXVjaCBmb3Ig YSByZXZpZXchLiBJIHdpbGwgd3JpdGUgbmV3IHRlc3QgZm9yIGFwcGVuZGVkc2lnLgoKVGhhbmtz LApTdWRoYWthciBLdXBwdXNhbXkKCj4+IFNpZ25lZC1vZmYtYnk6IFN1ZGhha2FyIEt1cHB1c2Ft eSA8c3VkaGFrYXJAbGludXguaWJtLmNvbT4KPj4gUmV2aWV3ZWQtYnk6IEF2bmlzaCBDaG91aGFu IDxhdm5pc2hAbGludXguaWJtLmNvbT4KPj4gLS0tCj4+ICBncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvYXBwZW5kZWRzaWcuYyB8IDUxOCAKPj4gKysrKysrKysrKysrKy0tLS0tLQo+PiAg MSBmaWxlIGNoYW5nZWQsIDM1MSBpbnNlcnRpb25zKCspLCAxNjcgZGVsZXRpb25zKC0pCj4+IAo+ PiBkaWZmIC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2ln LmMgCj4+IGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKPj4g aW5kZXggNTYzMWYwYWI0Li42ZjY2NWFhYjIgMTAwNjQ0Cj4+IC0tLSBhL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4+ICsrKyBiL2dydWItY29yZS9jb21tYW5k cy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCj4+IEBAIC0xMTcsNiArMTE3LDM2IEBAIHN0YXRp YyBlbnVtCj4+ICAgIGNoZWNrX3NpZ3NfZm9yY2VkID0gMgo+PiAgfSBjaGVja19zaWdzID0gY2hl Y2tfc2lnc19ubzsKPj4gCj4+ICtlbnVtCj4+ICt7Cj4+ICsgIE9QVElPTl9CSU5BUllfSEFTSCA9 IDAsCj4+ICsgIE9QVElPTl9DRVJUX0hBU0ggPSAxCj4+ICt9Owo+PiArCj4+ICtzdGF0aWMgY29u c3Qgc3RydWN0IGdydWJfYXJnX29wdGlvbiBvcHRpb25zW10gPQo+PiArewo+PiArICB7ImJpbmFy eS1oYXNoIiwgJ2InLCAwLCBOXygiaGFzaCBmaWxlIG9mIHRoZSBiaW5hcnkuIiksIDAsIAo+PiBB UkdfVFlQRV9OT05FfSwKPj4gKyAgeyJjZXJ0LWhhc2giLCAnYycsIDEsIE5fKCJoYXNoIGZpbGUg b2YgdGhlIGNlcnRpZmljYXRlLiIpLCAwLCAKPj4gQVJHX1RZUEVfTk9ORX0sCj4+ICsgIHswLCAw LCAwLCAwLCAwLCAwfQo+PiArfTsKPj4gKwo+PiArc3RhdGljIHZvaWQKPj4gK3ByaW50X2hleCAo Y29uc3QgZ3J1Yl91aW50OF90ICpkYXRhLCBjb25zdCBncnViX3NpemVfdCBsZW5ndGgpCj4+ICt7 Cj4+ICsgIGdydWJfc2l6ZV90IGksIGNvdW50ID0gMDsKPj4gKyAgZm9yIChpID0gMDsgaSA8IGxl bmd0aC0xOyBpKyspCj4+ICsgICAgewo+PiArICAgICAgZ3J1Yl9wcmludGYgKCIlMDJ4OiIsIGRh dGFbaV0pOwo+PiArICAgICAgY291bnQrKzsKPj4gKyAgICAgIGlmIChjb3VudCA9PSAxNikKPj4g KyAgICAgICAgewo+PiArICAgICAgICAgIGdydWJfcHJpbnRmICgiXG5cdCAgICAgICIpOwo+PiAr ICAgICAgICAgIGNvdW50ID0gMDsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKyAgZ3J1Yl9w cmludGYgKCIlMDJ4XG4iLCBkYXRhW2ldKTsKPj4gK30KPj4gKwo+PiAgLyoKPj4gICAqIEdVSUQg Y2FuIGJlIHVzZWQgdG8gZGV0ZXJtaW5lIHRoZSBoYXNoaW5nIGZ1bmN0aW9uIGFuZAo+PiAgICog Z2VuZXJhdGUgdGhlIGhhc2ggdXNpbmcgZGV0ZXJtaW5lZCBoYXNoaW5nIGZ1bmN0aW9uLgo+PiBA QCAtMzQ0LDcyICszNzQsNiBAQCBncnViX2Vudl93cml0ZV9zZWMgKHN0cnVjdCBncnViX2Vudl92 YXIgKnZhciAKPj4gX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBjb25zdCBjaGEKPj4gICAgcmV0 dXJuIGdydWJfc3RyZHVwIChncnViX2Vudl9yZWFkX3NlYyAoTlVMTCwgTlVMTCkpOwo+PiAgfQo+ PiAKPj4gLXN0YXRpYyBncnViX2Vycl90Cj4+IC1maWxlX3JlYWRfYWxsIChncnViX2ZpbGVfdCBm aWxlLCBncnViX3VpbnQ4X3QgKipidWYsIGdydWJfc2l6ZV90IAo+PiAqbGVuKQo+PiAtewo+PiAt ICBncnViX29mZl90IGZ1bGxfZmlsZV9zaXplOwo+PiAtICBncnViX3NpemVfdCBmaWxlX3NpemUs IHRvdGFsX3JlYWRfc2l6ZSA9IDA7Cj4+IC0gIGdydWJfc3NpemVfdCByZWFkX3NpemU7Cj4+IC0K Pj4gLSAgZnVsbF9maWxlX3NpemUgPSBncnViX2ZpbGVfc2l6ZSAoZmlsZSk7Cj4+IC0gIGlmIChm dWxsX2ZpbGVfc2l6ZSA9PSBHUlVCX0ZJTEVfU0laRV9VTktOT1dOKQo+PiAtICAgIHJldHVybiBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+IC0gICAgICAgICAgICAgICAgICAg ICAgIE5fKCJDYW5ub3QgcmVhZCBhIGZpbGUgb2YgdW5rbm93biBzaXplIGludG8gYSAKPj4gYnVm ZmVyIikpOwo+PiAtCj4+IC0gIGlmIChmdWxsX2ZpbGVfc2l6ZSA+IEdSVUJfU0laRV9NQVgpCj4+ IC0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwKPj4gLSAgICAg ICAgICAgICAgICAgICAgICAgTl8oIkZpbGUgaXMgdG9vIGxhcmdlIHRvIHJlYWQ6ICUiIAo+PiBQ Ukl1R1JVQl9VSU5UNjRfVCAiIGJ5dGVzIiksCj4+IC0gICAgICAgICAgICAgICAgICAgICAgIGZ1 bGxfZmlsZV9zaXplKTsKPj4gLQo+PiAtICBmaWxlX3NpemUgPSAoZ3J1Yl9zaXplX3QpIGZ1bGxf ZmlsZV9zaXplOwo+PiAtCj4+IC0gICpidWYgPSBncnViX21hbGxvYyAoZmlsZV9zaXplKTsKPj4g LSAgaWYgKCEqYnVmKQo+PiAtICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0Zf TUVNT1JZLAo+PiAtICAgICAgICAgICAgICAgICAgICAgICBOXygiQ291bGQgbm90IGFsbG9jYXRl IGZpbGUgZGF0YSBidWZmZXIgc2l6ZSAKPj4gJSIgUFJJdUdSVUJfU0laRSksCj4+IC0gICAgICAg ICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSk7Cj4+IC0KPj4gLSAgd2hpbGUgKHRvdGFsX3JlYWRf c2l6ZSA8IGZpbGVfc2l6ZSkKPj4gLSAgICB7Cj4+IC0gICAgICByZWFkX3NpemUgPSBncnViX2Zp bGVfcmVhZCAoZmlsZSwgKmJ1ZiArIHRvdGFsX3JlYWRfc2l6ZSwgCj4+IGZpbGVfc2l6ZSAtIHRv dGFsX3JlYWRfc2l6ZSk7Cj4+IC0KPj4gLSAgICAgIGlmIChyZWFkX3NpemUgPCAwKQo+PiAtICAg ICAgICB7Cj4+IC0gICAgICAgICAgZ3J1Yl9mcmVlICgqYnVmKTsKPj4gLSAgICAgICAgICByZXR1 cm4gZ3J1Yl9lcnJubzsKPj4gLSAgICAgICAgfQo+PiAtICAgICAgZWxzZSBpZiAocmVhZF9zaXpl ID09IDApCj4+IC0gICAgICAgIHsKPj4gLSAgICAgICAgICBncnViX2ZyZWUgKCpidWYpOwo+PiAt ICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywKPj4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgTl8oIkNvdWxkIG5vdCByZWFkIGZ1bGwgZmlsZSBzaXplICIKPj4g LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiglIiBQUkl1R1JVQl9TSVpFICIpLCBv bmx5ICUiIAo+PiBQUkl1R1JVQl9TSVpFICIgYnl0ZXMgcmVhZCIpLAo+PiAtICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmaWxlX3NpemUsIHRvdGFsX3JlYWRfc2l6ZSk7Cj4+IC0gICAgICAg IH0KPj4gLQo+PiAtICAgICAgdG90YWxfcmVhZF9zaXplICs9IHJlYWRfc2l6ZTsKPj4gLSAgICB9 Cj4+IC0gICpsZW4gPSBmaWxlX3NpemU7Cj4+IC0gIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiAt fQo+PiAtCj4+IC1zdGF0aWMgZ3J1Yl9lcnJfdAo+PiAtcmVhZF9jZXJ0X2Zyb21fZmlsZSAoZ3J1 Yl9maWxlX3QgZiwgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgCj4+ICpjZXJ0aWZpY2F0ZSkKPj4g LXsKPj4gLSAgZ3J1Yl9lcnJfdCBlcnI7Cj4+IC0gIGdydWJfdWludDhfdCAqYnVmOwo+PiAtICBn cnViX3NpemVfdCBmaWxlX3NpemU7Cj4+IC0KPj4gLSAgZXJyID0gZmlsZV9yZWFkX2FsbCAoZiwg JmJ1ZiwgJmZpbGVfc2l6ZSk7Cj4+IC0gIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKPj4gLSAg ICByZXR1cm4gZXJyOwo+PiAtCj4+IC0gIGVyciA9IHBhcnNlX3g1MDlfY2VydGlmaWNhdGUgKGJ1 ZiwgZmlsZV9zaXplLCBjZXJ0aWZpY2F0ZSk7Cj4+IC0gIGdydWJfZnJlZSAoYnVmKTsKPj4gLQo+ PiAtICByZXR1cm4gZXJyOwo+PiAtfQo+PiAtCj4+ICBzdGF0aWMgZ3J1Yl9lcnJfdAo+PiAgZXh0 cmFjdF9hcHBlbmRlZF9zaWduYXR1cmUgKGNvbnN0IGdydWJfdWludDhfdCAqYnVmLCBncnViX3Np emVfdCAKPj4gYnVmc2l6ZSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg Z3J1Yl9hcHBlbmRlZF9zaWduYXR1cmUgKnNpZykKPj4gQEAgLTYzMCwxNDUgKzU5NCwzNDcgQEAg Z3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJlIChjb25zdCAKPj4gZ3J1Yl91aW50OF90ICpi dWYsIGdydWJfc2l6ZV90IGJ1ZnNpemUpCj4+ICBzdGF0aWMgZ3J1Yl9lcnJfdAo+PiAgZ3J1Yl9j bWRfdmVyaWZ5X3NpZ25hdHVyZSAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18gCj4+ ICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJncykKPj4gIHsKPj4gLSAgZ3J1Yl9maWxl X3QgZjsKPj4gICAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOwo+PiAtICBncnViX3Vp bnQ4X3QgKmRhdGE7Cj4+IC0gIGdydWJfc2l6ZV90IGZpbGVfc2l6ZTsKPj4gKyAgZ3J1Yl9maWxl X3Qgc2lnbmVkX2ZpbGUgPSBOVUxMOwo+PiArICBncnViX3VpbnQ4X3QgKnNpZ25lZF9kYXRhID0g TlVMTDsKPj4gKyAgZ3J1Yl9zc2l6ZV90IHNpZ25lZF9kYXRhX3NpemUgPSAwOwo+PiAKPj4gLSAg aWYgKGFyZ2MgPCAxKQo+PiAtICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJH VU1FTlQsIE5fKCJvbmUgYXJndW1lbnQgCj4+IGV4cGVjdGVkIikpOwo+PiArICBpZiAoYXJnYyAh PSAxKQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiYSBzaWduZWQgZmlsZSBp cyBleHBlY3RlZFxuIgo+PiArICAgICAgICAgICAgICAgICAgICAgICJFeGFtcGxlOlxuXHR2ZXJp ZnlfYXBwZW5kZWQgPFNJR05FRCAKPj4gRklMRT5cbiIpKTsKPj4gKyAgICAgIHJldHVybiBHUlVC X0VSUl9CQURfQVJHVU1FTlQ7Cj4+ICsgICAgfQo+PiAKPj4gICAgZ3J1Yl9kcHJpbnRmICgiYXBw ZW5kZWRzaWciLCAidmVyaWZ5aW5nICVzXG4iLCBhcmdzWzBdKTsKPj4gCj4+IC0gIGYgPSBncnVi X2ZpbGVfb3BlbiAoYXJnc1swXSwgR1JVQl9GSUxFX1RZUEVfVkVSSUZZX1NJR05BVFVSRSk7Cj4+ IC0gIGlmICghZikKPj4gLSAgICB7Cj4+IC0gICAgICBlcnIgPSBncnViX2Vycm5vOwo+PiAtICAg ICAgZ290byBjbGVhbnVwOwo+PiAtICAgIH0KPj4gKyAgc2lnbmVkX2ZpbGUgPSBncnViX2ZpbGVf b3BlbiAoYXJnc1swXSwgCj4+IEdSVUJfRklMRV9UWVBFX1ZFUklGWV9TSUdOQVRVUkUpOwo+PiAr ICBpZiAoc2lnbmVkX2ZpbGUgPT0gTlVMTCkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfRklMRV9OT1RfRk9VTkQsIE5fKCJ1bmFibGUgdG8gb3BlbiBhIAo+PiBzaWduZWQgZmls ZSIpKTsKPj4gCj4+IC0gIGVyciA9IGZpbGVfcmVhZF9hbGwgKGYsICZkYXRhLCAmZmlsZV9zaXpl KTsKPj4gKyAgZXJyID0gZ3J1Yl9yZWFkX2ZpbGUgKHNpZ25lZF9maWxlLCAmc2lnbmVkX2RhdGEs IAo+PiAmc2lnbmVkX2RhdGFfc2l6ZSk7Cj4+ICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkK Pj4gLSAgICBnb3RvIGNsZWFudXA7Cj4+IC0KPj4gLSAgZXJyID0gZ3J1Yl92ZXJpZnlfYXBwZW5k ZWRfc2lnbmF0dXJlIChkYXRhLCBmaWxlX3NpemUpOwo+PiArICAgIHsKPj4gKyAgICAgIGdydWJf ZmlsZV9jbG9zZSAoc2lnbmVkX2ZpbGUpOwo+PiArICAgICAgcmV0dXJuIGVycjsKPj4gKyAgICB9 Cj4+IAo+PiAtICBncnViX2ZyZWUgKGRhdGEpOwo+PiArICBncnViX2ZpbGVfY2xvc2UgKHNpZ25l ZF9maWxlKTsKPj4gKyAgZXJyID0gZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJlIChzaWdu ZWRfZGF0YSwgCj4+IHNpZ25lZF9kYXRhX3NpemUpOwo+PiArICBncnViX2ZyZWUgKHNpZ25lZF9k YXRhKTsKPj4gCj4+IC1jbGVhbnVwOgo+PiAtICBpZiAoZikKPj4gLSAgICBncnViX2ZpbGVfY2xv c2UgKGYpOwo+PiAgICByZXR1cm4gZXJyOwo+PiAgfQo+PiAKPj4gIHN0YXRpYyBncnViX2Vycl90 Cj4+IC1ncnViX2NtZF9kaXN0cnVzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18g KCh1bnVzZWQpKSwgaW50IAo+PiBhcmdjLCBjaGFyICoqYXJncykKPj4gK2dydWJfY21kX3RydXN0 ZWRfbGlzdCAoZ3J1Yl9jb21tYW5kX3QgY21kIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXJnYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwg Y2hhciAqKmFyZ3MgCj4+IF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQo+PiAgewo+PiAtICB1bnNp Z25lZCBsb25nIGNlcnRfbnVtLCBpOwo+PiAtICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2Vy dCwgKnByZXY7Cj4+ICsgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0ID0gTlVMTDsKPj4g KyAgZ3J1Yl9zaXplX3QgaSA9IDAsIGNlcnRfbnVtID0gMTsKPj4gCj4+IC0gIGlmIChhcmdjICE9 IDEpCj4+IC0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8o Ik9uZSBhcmd1bWVudCAKPj4gZXhwZWN0ZWQiKSk7Cj4+ICsgIGZvciAoY2VydCA9IGRiLmtleXM7 IGNlcnQ7IGNlcnQgPSBjZXJ0LT5uZXh0KQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfcHJpbnRm IChOXygidHJ1c3RlZCBjZXJ0aWZpY2F0ZSAlIiBQUkl1R1JVQl9TSVpFICI6XG4iKSwgCj4+IGNl cnRfbnVtKTsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiXHRzZXJpYWw6ICIpKTsKPj4gCj4+ IC0gIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOwo+PiAtICBjZXJ0X251bSA9IGdydWJfc3Ry dG91bCAoYXJnc1swXSwgTlVMTCwgMTApOwo+PiAtICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VS Ul9OT05FKQo+PiAtICAgIHJldHVybiBncnViX2Vycm5vOwo+PiArICAgICAgZm9yIChpID0gMDsg aSA8IGNlcnQtPnNlcmlhbF9sZW4gLSAxOyBpKyspCj4+ICsgICAgICAgIGdydWJfcHJpbnRmICgi JTAyeDoiLCBjZXJ0LT5zZXJpYWxbaV0pOwo+PiAKPj4gLSAgaWYgKGNlcnRfbnVtIDwgMSkKPj4g LSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAo+PiAtICAgICAg ICAgICAgICAgICAgICAgICBOXygiQ2VydGlmaWNhdGUgbnVtYmVyIHRvbyBzbWFsbCAtIG51bWJl cnMgCj4+IHN0YXJ0IGF0IDEiKSk7Cj4+ICsgICAgICBncnViX3ByaW50ZiAoIiUwMnhcbiIsIGNl cnQtPnNlcmlhbFtjZXJ0LT5zZXJpYWxfbGVuIC0gMV0pOwo+PiArICAgICAgZ3J1Yl9wcmludGYg KCJcdENOOiAlc1xuXG4iLCBjZXJ0LT5zdWJqZWN0KTsKPj4gKyAgICAgIGNlcnRfbnVtKys7Cj4+ ICsgICAgfQo+PiAKPj4gLSAgaWYgKGNlcnRfbnVtID09IDEpCj4+ICsgIGZvciAoaSA9IDA7IGkg PCBkYi5zaWduYXR1cmVfZW50cmllczsgaSsrKQo+PiAgICAgIHsKPj4gLSAgICAgIGNlcnQgPSBk Yi5rZXlzOwo+PiAtICAgICAgZGIua2V5cyA9IGNlcnQtPm5leHQ7Cj4+ICsgICAgICBncnViX3By aW50ZiAoTl8oInRydXN0ZWQgYmluYXJ5IGhhc2ggJSIgUFJJdUdSVUJfU0laRSAiOlxuIiksIAo+ PiBpKzEpOwo+PiArICAgICAgZ3J1Yl9wcmludGYgKE5fKCJcdGhhc2g6ICIpKTsKPj4gKyAgICAg IHByaW50X2hleCAoZGIuc2lnbmF0dXJlc1tpXSwgZGIuc2lnbmF0dXJlX3NpemVbaV0pOwo+PiAr ICAgIH0KPj4gCj4+IC0gICAgICBjZXJ0aWZpY2F0ZV9yZWxlYXNlIChjZXJ0KTsKPj4gLSAgICAg IGdydWJfZnJlZSAoY2VydCk7Cj4+IC0gICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKyAg cmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICt9Cj4+ICsKPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ ICtncnViX2NtZF9kaXN0cnVzdGVkX2xpc3QgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0 ZV9fKCh1bnVzZWQpKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ2MgX19h dHRyaWJ1dGVfXygodW51c2VkKSksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg KiphcmdzIF9fYXR0cmlidXRlX18oKHVudXNlZCkpKQo+PiArewo+PiArICBzdHJ1Y3QgeDUwOV9j ZXJ0aWZpY2F0ZSAqY2VydCA9IE5VTEw7Cj4+ICsgIGdydWJfc2l6ZV90IGkgPSAwLCBjZXJ0X251 bSA9IDE7Cj4+ICsKPj4gKyAgZm9yIChjZXJ0ID0gZGJ4LmtleXM7IGNlcnQ7IGNlcnQgPSBjZXJ0 LT5uZXh0KQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiZGlzdHJ1c3RlZCBj ZXJ0aWZpY2F0ZSAlIiBQUkl1R1JVQl9TSVpFIAo+PiAiOlxuIiksIGNlcnRfbnVtKTsKPj4gKyAg ICAgIGdydWJfcHJpbnRmIChOXygiXHRzZXJpYWw6ICIpKTsKPj4gKwo+PiArICAgICAgZm9yIChp ID0gMDsgaSA8IGNlcnQtPnNlcmlhbF9sZW4gLSAxOyBpKyspCj4+ICsgICAgICAgIGdydWJfcHJp bnRmICgiJTAyeDoiLCBjZXJ0LT5zZXJpYWxbaV0pOwo+PiArCj4+ICsgICAgICBncnViX3ByaW50 ZiAoIiUwMnhcbiIsIGNlcnQtPnNlcmlhbFtjZXJ0LT5zZXJpYWxfbGVuIC0gMV0pOwo+PiArICAg ICAgZ3J1Yl9wcmludGYgKCJcdENOOiAlc1xuXG4iLCBjZXJ0LT5zdWJqZWN0KTsKPj4gKyAgICAg IGNlcnRfbnVtKys7Cj4+ICAgICAgfQo+PiAtICBpID0gMjsKPj4gLSAgcHJldiA9IGRiLmtleXM7 Cj4+IC0gIGNlcnQgPSBkYi5rZXlzLT5uZXh0Owo+PiAtICB3aGlsZSAoY2VydCkKPj4gKwo+PiAr ICBmb3IgKGkgPSAwOyBpIDwgZGJ4LnNpZ25hdHVyZV9lbnRyaWVzOyBpKyspCj4+ICAgICAgewo+ PiAtICAgICAgaWYgKGkgPT0gY2VydF9udW0pCj4+IC0gICAgICAgIHsKPj4gLSAgICAgICAgICBw cmV2LT5uZXh0ID0gY2VydC0+bmV4dDsKPj4gLSAgICAgICAgICBjZXJ0aWZpY2F0ZV9yZWxlYXNl IChjZXJ0KTsKPj4gLSAgICAgICAgICBncnViX2ZyZWUgKGNlcnQpOwo+PiAtICAgICAgICAgIHJl dHVybiBHUlVCX0VSUl9OT05FOwo+PiAtICAgICAgICB9Cj4+IC0gICAgICBpKys7Cj4+IC0gICAg ICBwcmV2ID0gY2VydDsKPj4gLSAgICAgIGNlcnQgPSBjZXJ0LT5uZXh0Owo+PiArICAgICAgZ3J1 Yl9wcmludGYgKE5fKCJkaXN0cnVzdGVkIGNlcnRpZmljYXRlL2JpbmFyeSBoYXNoICUiIAo+PiBQ Ukl1R1JVQl9TSVpFICI6XG4iKSwgaSsxKTsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiXHRo YXNoOiAiKSk7Cj4+ICsgICAgICBwcmludF9oZXggKGRieC5zaWduYXR1cmVzW2ldLCBkYnguc2ln bmF0dXJlX3NpemVbaV0pOwo+PiAgICAgIH0KPj4gCj4+IC0gIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+IC0gICAgICAgICAgICAgICAgICAgICBOXygiTm8gY2Vy dGlmaWNhdGUgbnVtYmVyICVsdSBmb3VuZCAtIG9ubHkgJWx1IAo+PiBjZXJ0aWZpY2F0ZXMgaW4g dGhlIHN0b3JlIiksCj4+IC0gICAgICAgICAgICAgICAgICAgICBjZXJ0X251bSwgaSAtIDEpOwo+ PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gIH0KPj4gCj4+ICBzdGF0aWMgZ3J1Yl9lcnJf dAo+PiAtZ3J1Yl9jbWRfdHJ1c3QgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgo dW51c2VkKSksIGludCAKPj4gYXJnYywgY2hhciAqKmFyZ3MpCj4+ICtncnViX2NtZF90cnVzdGVk X2NlcnQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQo+PiAgewo+PiAtICBn cnViX2ZpbGVfdCBjZXJ0ZjsKPj4gLSAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQgPSBO VUxMOwo+PiAtICBncnViX2Vycl90IGVycjsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VS Ul9OT05FOwo+PiArICBncnViX2ZpbGVfdCBjZXJ0X2ZpbGUgPSBOVUxMOwo+PiArICBncnViX3Vp bnQ4X3QgKmNlcnRfZGF0YSA9IE5VTEw7Cj4+ICsgIGdydWJfc3NpemVfdCBjZXJ0X2RhdGFfc2l6 ZSA9IDA7Cj4+IAo+PiAgICBpZiAoYXJnYyAhPSAxKQo+PiAtICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfQVJHVU1FTlQsIE5fKCJvbmUgYXJndW1lbnQgCj4+IGV4cGVjdGVkIikp Owo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiYSB0cnVzdGVkIFguNTA5IGNl cnRpZmljYXRlIGZpbGUgaXMgCj4+IGV4cGVjdGVkXG4iCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIkV4YW1wbGU6XG5cdHRydXN0ZWRfY2VydGlmaWNhdGUgPENFUlQgCj4+IEZJTEU+XG4iKSk7 Cj4+ICsgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwo+PiArICAgIH0KPj4gCj4+ IC0gIGNlcnRmID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklMRV9UWVBFX0NFUlRJ RklDQVRFX1RSVVNUIHwgCj4+IEdSVUJfRklMRV9UWVBFX05PX0RFQ09NUFJFU1MpOwo+PiAtICBp ZiAoIWNlcnRmKQo+PiAtICAgIHJldHVybiBncnViX2Vycm5vOwo+PiArICBpZiAoY2hlY2tfc2ln cyA9PSBjaGVja19zaWdzX2ZvcmNlZCkKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX3ByaW50ZiAo Ildhcm5pbmc6IHNpbmNlIHNlY3VyZSBib290IGlzIGVuYWJsZWQsICIKPj4gKyAgICAgICAgICAg ICAgICAgICAiYWRkaW5nIG9mIHRydXN0ZWQgWC41MDkgY2VydGlmaWNhdGUgaXMgbm90IAo+PiBw ZXJtaXR0ZWQhXG4iKTsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm5vOwo+PiArICAgIH0KPj4g Cj4+IC0gIGNlcnQgPSBncnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0 ZSkpOwo+PiAtICBpZiAoIWNlcnQpCj4+IC0gICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X09VVF9PRl9NRU1PUlksIE5fKCJDb3VsZCBub3QgYWxsb2NhdGUgCj4+IG1lbW9yeSBmb3IgY2Vy dGlmaWNhdGUiKSk7Cj4+ICsgIGlmIChncnViX3N0cmxlbiAoYXJnc1swXSkgPT0gMCkKPj4gKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVOQU1FLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICBOXygibWlzc2luZyB0cnVzdGVkIFguNTA5IGNlcnRpZmljYXRlIGZpbGUi KSk7Cj4+IAo+PiAtICBlcnIgPSByZWFkX2NlcnRfZnJvbV9maWxlIChjZXJ0ZiwgY2VydCk7Cj4+ IC0gIGdydWJfZmlsZV9jbG9zZSAoY2VydGYpOwo+PiArICBjZXJ0X2ZpbGUgPSBncnViX2ZpbGVf b3BlbiAoYXJnc1swXSwgCj4+IEdSVUJfRklMRV9UWVBFX0NFUlRJRklDQVRFX1RSVVNUIHwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdSVUJfRklMRV9UWVBFX05PX0RFQ09NUFJF U1MpOwo+PiArICBpZiAoY2VydF9maWxlID09IE5VTEwpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5ELAo+PiArICAgICAgICAgICAgICAgICAgICAgICBO XygidW5hYmxlIHRvIG9wZW4gdGhlIHRydXN0ZWQgWC41MDkgCj4+IGNlcnRpZmljYXRlIGZpbGUi KSk7Cj4+ICsKPj4gKyAgZXJyID0gZ3J1Yl9yZWFkX2ZpbGUgKGNlcnRfZmlsZSwgJmNlcnRfZGF0 YSwgJmNlcnRfZGF0YV9zaXplKTsKPj4gICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiAg ICAgIHsKPj4gLSAgICAgIGdydWJfZnJlZSAoY2VydCk7Cj4+ICsgICAgICBncnViX2ZpbGVfY2xv c2UgKGNlcnRfZmlsZSk7Cj4+ICAgICAgICByZXR1cm4gZXJyOwo+PiAgICAgIH0KPj4gLSAgZ3J1 Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiTG9hZGVkIGNlcnRpZmljYXRlIHdpdGggQ046ICVz XG4iLCAKPj4gY2VydC0+c3ViamVjdCk7Cj4+IAo+PiAtICBjZXJ0LT5uZXh0ID0gZGIua2V5czsK Pj4gLSAgZGIua2V5cyA9IGNlcnQ7Cj4+ICsgIGdydWJfZmlsZV9jbG9zZSAoY2VydF9maWxlKTsK Pj4gKyAgZXJyID0gYWRkX2NlcnRpZmljYXRlIChjZXJ0X2RhdGEsIGNlcnRfZGF0YV9zaXplLCAm ZGIsIDEpOwo+PiArICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgewo+PiArICAg ICAgZnJlZV90cnVzdGVkX2xpc3QgKCk7Cj4+ICsgICAgICBmcmVlX2Rpc3RydXN0ZWRfbGlzdCAo KTsKPj4gKyAgICAgIGdydWJfZXJyb3IgKGVyciwgImFkZGluZyBvZiB0cnVzdGVkIGNlcnRpZmlj YXRlIGZhaWxlZCIpOwo+PiArICAgIH0KPj4gCj4+IC0gIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ PiArICBncnViX2ZyZWUgKGNlcnRfZGF0YSk7Cj4+ICsKPj4gKyAgcmV0dXJuIGVycjsKPj4gIH0K Pj4gCj4+ICBzdGF0aWMgZ3J1Yl9lcnJfdAo+PiAtZ3J1Yl9jbWRfbGlzdCAoZ3J1Yl9jb21tYW5k X3QgY21kIF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgaW50IGFyZ2MgCj4+IF9fYXR0cmlidXRl X18gKCh1bnVzZWQpKSwKPj4gLSAgICAgICAgICAgICAgIGNoYXIgKiphcmdzIF9fYXR0cmlidXRl X18gKCh1bnVzZWQpKSkKPj4gK2dydWJfY21kX3RydXN0ZWRfaGFzaCAoZ3J1Yl9jb21tYW5kX3Qg Y21kIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCAKPj4gaW50IGFyZ2MsIGNoYXIqKmFyZ3MpCj4+ ICB7Cj4+IC0gIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0Owo+PiAtICBpbnQgY2VydF9u dW0gPSAxOwo+PiAtICBncnViX3NpemVfdCBpOwo+PiArICBncnViX2Vycl90IHJjID0gR1JVQl9F UlJfTk9ORTsKPj4gKyAgZ3J1Yl9maWxlX3QgaGFzaF9maWxlID0gTlVMTDsKPj4gKyAgZ3J1Yl91 aW50OF90ICpoYXNoX2RhdGEgPSBOVUxMOwo+PiArICBncnViX3NzaXplX3QgaGFzaF9kYXRhX3Np emUgPSAwOwo+PiAKPj4gLSAgZm9yIChjZXJ0ID0gZGIua2V5czsgY2VydDsgY2VydCA9IGNlcnQt Pm5leHQpCj4+ICsgIGlmIChhcmdjICE9IDEpCj4+ICAgICAgewo+PiAtICAgICAgZ3J1Yl9wcmlu dGYgKE5fKCJDZXJ0aWZpY2F0ZSAlZDpcbiIpLCBjZXJ0X251bSk7Cj4+ICsgICAgICBncnViX3By aW50ZiAoTl8oImEgdHJ1c3RlZCBiaW5hcnkgaGFzaCBmaWxlIGlzIGV4cGVjdGVkXG4iCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIkV4YW1wbGU6XG5cdHRydXN0ZWRfc2lnbmF0dXJlIDxCSU5B UlkgSEFTSCAKPj4gRklMRT5cbiIpKTsKPj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJH VU1FTlQ7Cj4+ICsgICAgfQo+PiAKPj4gLSAgICAgIGdydWJfcHJpbnRmIChOXygiXHRTZXJpYWw6 ICIpKTsKPj4gLSAgICAgIGZvciAoaSA9IDA7IGkgPCBjZXJ0LT5zZXJpYWxfbGVuIC0gMTsgaSsr KQo+PiArICBpZiAoY2hlY2tfc2lncyA9PSBjaGVja19zaWdzX2ZvcmNlZCkKPj4gKyAgICB7Cj4+ ICsgICAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6IHNpbmNlIHNlY3VyZSBib290IGlzIGVuYWJs ZWQsICIKPj4gKyAgICAgICAgICAgICAgICAgICAiYWRkaW5nIG9mIHRydXN0ZWQgYmluYXJ5IGhh c2ggaXMgbm90IAo+PiBwZXJtaXR0ZWQhXG4iKTsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm5v Owo+PiArICAgIH0KPj4gKwo+PiArICBpZiAoZ3J1Yl9zdHJsZW4gKGFyZ3NbMF0pID09IDApCj4+ ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFTkFNRSwgTl8oIm1pc3Np bmcgdHJ1c3RlZCAKPj4gYmluYXJ5IGhhc2ggZmlsZSIpKTsKPj4gKwo+PiArICBoYXNoX2ZpbGUg PSBncnViX2ZpbGVfb3BlbiAoYXJnc1swXSwgR1JVQl9GSUxFX1RZUEVfVE9fSEFTSCB8IAo+PiBH UlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKPj4gKyAgaWYgKGhhc2hfZmlsZSA9PSBOVUxM KQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9GSUxFX05PVF9GT1VORCwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgTl8oInVuYWJsZSB0byBvcGVuIHRoZSB0cnVzdGVkIGJp bmFyeSBoYXNoIAo+PiBmaWxlIikpOwo+PiArCj4+ICsgIHJjID0gZ3J1Yl9yZWFkX2ZpbGUgKGhh c2hfZmlsZSwgJmhhc2hfZGF0YSwgJmhhc2hfZGF0YV9zaXplKTsKPj4gKyAgaWYgKHJjICE9IEdS VUJfRVJSX05PTkUpCj4+ICsgICAgewo+PiArICAgICAgZ3J1Yl9maWxlX2Nsb3NlIChoYXNoX2Zp bGUpOwo+PiArICAgICAgcmV0dXJuIHJjOwo+PiArICAgIH0KPj4gKwo+PiArICBncnViX2ZpbGVf Y2xvc2UgKGhhc2hfZmlsZSk7Cj4+ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWci LCAiYWRkaW5nIGEgdHJ1c3RlZCBiaW5hcnkgaGFzaCAlc1xuIAo+PiB3aXRoIHNpemUgb2YgJSIg UFJJdUdSVUJfU0laRSAiXG4iLAo+PiArICAgICAgICAgICAgICAgIGhhc2hfZGF0YSwgaGFzaF9k YXRhX3NpemUpOwo+PiArCj4+ICsgIC8qIG9ubHkgYWNjZXB0IFNIQTI1NiwgU0hBMzg0IGFuZCBT SEE1MTIgYmluYXJ5IGhhc2ggKi8KPj4gKyAgaWYgKGhhc2hfZGF0YV9zaXplICE9IDMyICYmIGhh c2hfZGF0YV9zaXplICE9IDQ4ICYmIGhhc2hfZGF0YV9zaXplIAo+PiAhPSA2NCkKPj4gKyAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgTl8oInVuYWNjZXB0YWJs ZSAKPj4gdHJ1c3RlZCBiaW5hcnkgaGFzaCB0eXBlIikpOwo+PiArCj4+ICsgIHJjID0gYWRkX2hh c2ggKChjb25zdCBncnViX3VpbnQ4X3QgKiopICZoYXNoX2RhdGEsIGhhc2hfZGF0YV9zaXplLCAK Pj4gJmRiLnNpZ25hdHVyZXMsCj4+ICsgICAgICAgICAgICAgICAgICZkYi5zaWduYXR1cmVfc2l6 ZSwgJmRiLnNpZ25hdHVyZV9lbnRyaWVzKTsKPj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUp Cj4+ICsgICAgewo+PiArICAgICAgZnJlZV90cnVzdGVkX2xpc3QgKCk7Cj4+ICsgICAgICBmcmVl X2Rpc3RydXN0ZWRfbGlzdCAoKTsKPj4gKyAgICAgIGdydWJfZXJyb3IgKHJjLCAiYWRkaW5nIG9m IHRydXN0ZWQgYmluYXJ5IGhhc2ggZmFpbGVkIik7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGdydWJf ZnJlZSAoaGFzaF9kYXRhKTsKPj4gKwo+PiArICByZXR1cm4gcmM7Cj4+ICt9Cj4+ICsKPj4gK3N0 YXRpYyBncnViX2Vycl90Cj4+ICtncnViX2NtZF9kaXN0cnVzdGVkX2NlcnQgKGdydWJfY29tbWFu ZF90IGNtZCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSwgCj4+IGludCBhcmdjLCBjaGFyICoqYXJn cykKPj4gK3sKPj4gKyAgZ3J1Yl9zaXplX3QgY2VydF9udW0gPSAwLCBpID0gMTsKPj4gKyAgc3Ry dWN0IHg1MDlfY2VydGlmaWNhdGUgKmN1cnJlbnRfY2VydCA9IGRiLmtleXM7Cj4+ICsgIHN0cnVj dCB4NTA5X2NlcnRpZmljYXRlICpwcmV2aW91c19jZXJ0ID0gZGIua2V5czsKPj4gKwo+PiArICBp ZiAoYXJnYyAhPSAxKQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygidHJ1c3Rl ZCBjZXJ0aWZpY2F0ZSBudW1iZXIgaXMgZXhwZWN0ZWRcbiIKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAiRXhhbXBsZTpcblx0ZGlzdHJ1c3RlZF9jZXJ0aWZpY2F0ZSAKPj4gPENFUlRfTlVNRVI+ XG4iKSk7Cj4+ICsgICAgICByZXR1cm4gR1JVQl9FUlJfQkFEX0FSR1VNRU5UOwo+PiArICAgIH0K Pj4gKwo+PiArICBpZiAoY2hlY2tfc2lncyA9PSBjaGVja19zaWdzX2ZvcmNlZCkKPj4gKyAgICB7 Cj4+ICsgICAgICBncnViX3ByaW50ZiAoIldhcm5pbmc6IHNpbmNlIHNlY3VyZSBib290IGlzIGVu YWJsZWQsICIKPj4gKyAgICAgICAgICAgICAgICAgICAicmVtb3Zpbmcgb2YgdHJ1c3RlZCBjZXJ0 aWZpY2F0ZSBpcyBub3QgCj4+IHBlcm1pdHRlZCFcbiIpOwo+PiArICAgICAgcmV0dXJuIGdydWJf ZXJybm87Cj4+ICsgICAgfQo+PiArCj4+ICsgIGNlcnRfbnVtID0gZ3J1Yl9zdHJ0b3VsIChhcmdz WzBdLCBOVUxMLCAxMCk7Cj4+ICsgIGlmIChjZXJ0X251bSA8IDEpCj4+ICsgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKPj4gKyAgICAgICAgICAgICAgICAgICAg ICAgTl8oInRydXN0ZWQgY2VydGlmaWNhdGUgbnVtYmVyIHNob3VsZCB0byBiZWdpbiAKPj4gd2l0 aCAxIikpOwo+PiArCj4+ICsgIGlmIChjZXJ0X251bSA+IGRiLmtleV9lbnRyaWVzKQo+PiArICAg IHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgIE5fKCJ0cnVzdGVkIGNlcnRpZmljYXRlIG51bWJlciBzaG91bGQgbm90IAo+ PiBleGNlZWQgJSIgUFJJdUdSVUJfU0laRSAiIiksCj4+ICsgICAgICAgICAgICAgICAgICAgICAg IGRiLmtleV9lbnRyaWVzKTsKPj4gKyAgZWxzZSBpZiAoY2VydF9udW0gPCBkYi5rZXlfZW50cmll cykKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICBOXygidGhlcmUgaXMgbm8gY2VydGlmaWNhdGUgb24gdGhl IHRydXN0ZWQgCj4+IGxpc3QuIHNvLCBub3QgcGVybWl0dGVkIikpOwo+PiArCj4+ICsgIGZvciAo aSA9IDE7IGkgPCBkYi5rZXlfZW50cmllczsgaSsrKQo+PiArICAgIHsKPj4gKyAgICAgIGlmIChj ZXJ0X251bSA9PSAxKQo+PiAgICAgICAgICB7Cj4+IC0gICAgICAgICAgZ3J1Yl9wcmludGYgKCIl MDJ4OiIsIGNlcnQtPnNlcmlhbFtpXSk7Cj4+ICsgICAgICAgICAgcHJldmlvdXNfY2VydCA9IGN1 cnJlbnRfY2VydC0+bmV4dDsKPj4gKyAgICAgICAgICBicmVhazsKPj4gKyAgICAgICAgfQo+PiAr ICAgICAgZWxzZSBpZiAoY2VydF9udW0gPT0gaSkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAg IHByZXZpb3VzX2NlcnQtPm5leHQgPSBjdXJyZW50X2NlcnQtPm5leHQ7Cj4+ICsgICAgICAgICAg YnJlYWs7Cj4+ICAgICAgICAgIH0KPj4gLSAgICAgIGdydWJfcHJpbnRmICgiJTAyeFxuIiwgY2Vy dC0+c2VyaWFsW2NlcnQtPnNlcmlhbF9sZW4gLSAxXSk7Cj4+IAo+PiAtICAgICAgZ3J1Yl9wcmlu dGYgKCJcdENOOiAlc1xuXG4iLCBjZXJ0LT5zdWJqZWN0KTsKPj4gLSAgICAgIGNlcnRfbnVtKys7 Cj4+ICsgICAgICBwcmV2aW91c19jZXJ0ID0gY3VycmVudF9jZXJ0Owo+PiArICAgICAgY3VycmVu dF9jZXJ0ID0gY3VycmVudF9jZXJ0LT5uZXh0Owo+PiAgICAgIH0KPj4gCj4+ICsgIGNlcnRpZmlj YXRlX3JlbGVhc2UgKGN1cnJlbnRfY2VydCk7Cj4+ICsgIGdydWJfZnJlZSAoY3VycmVudF9jZXJ0 KTsKPj4gKwo+PiAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gIH0KPj4gCj4+ICtzdGF0aWMg Z3J1Yl9lcnJfdAo+PiArZ3J1Yl9jbWRfZGlzdHJ1c3RlZF9oYXNoIChncnViX2V4dGNtZF9jb250 ZXh0X3QgY3R4dCwgaW50IGFyZ2MsIGNoYXIgCj4+ICoqYXJncykKPj4gK3sKPj4gKyAgZ3J1Yl9l cnJfdCByYyA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGdydWJfZmlsZV90IGhhc2hfZmlsZSA9IE5V TEw7Cj4+ICsgIGdydWJfdWludDhfdCAqaGFzaF9kYXRhID0gTlVMTDsKPj4gKyAgZ3J1Yl9zc2l6 ZV90IGhhc2hfZGF0YV9zaXplID0gMDsKPj4gKwo+PiArICBpZiAoYXJnYyAhPSAyKQo+PiArICAg IHsKPj4gKyAgICAgIGdydWJfcHJpbnRmIChOXygiYSBkaXN0cnVzdGVkIGNlcnRpZmljYXRlL2Jp bmFyeSBoYXNoIGZpbGUgaXMgCj4+IGV4cGVjdGVkXG4iCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIkV4YW1wbGU6XG5cdGRpc3RydXN0ZWRfc2lnbmF0dXJlIFtvcHRpb25dIAo+PiA8RklMRT5c biIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAib3B0aW9uOlxuWy1ifC0tYmluYXJ5LWhhc2hd IEZJTEUgW0JJTkFSWSBIQVNIIAo+PiBGSUxFXVxuIgo+PiArICAgICAgICAgICAgICAgICAgICAg ICJbLWN8LS1jZXJ0LWhhc2hdIEZJTEUgW0NFUlRGSUNBVEUgSEFTSCAKPj4gRklMRV1cbiIpKTsK Pj4gKyAgICAgIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7Cj4+ICsgICAgfQo+PiArCj4+ ICsgIGlmIChjaGVja19zaWdzID09IGNoZWNrX3NpZ3NfZm9yY2VkKQo+PiArICAgIHsKPj4gKyAg ICAgIGdydWJfcHJpbnRmICgiV2FybmluZzogc2luY2Ugc2VjdXJlIGJvb3QgaXMgZW5hYmxlZCwg Igo+PiArICAgICAgICAgICAgICAgICAgICJhZGRpbmcgb2YgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0 ZS9iaW5hcnkgaGFzaCBpcyAKPj4gbm90IHBlcm1pdHRlZCFcbiIpOwo+PiArICAgICAgcmV0dXJu IGdydWJfZXJybm87Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmICghY3R4dC0+c3RhdGVbT1BUSU9O X0JJTkFSWV9IQVNIXS5zZXQgJiYgCj4+ICFjdHh0LT5zdGF0ZVtPUFRJT05fQ0VSVF9IQVNIXS5z ZXQpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwgTl8o Im1pc3Npbmcgb3B0aW9ucyBhbmQgCj4+IHVzZSAtLWhlbHAgdG8ga29udyIpKTsKPj4gKwo+PiAr ICBpZiAoZ3J1Yl9zdHJsZW4gKGFyZ3NbMV0pID09IDApCj4+ICsgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9GSUxFTkFNRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgTl8o Im1pc3NpbmcgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFzaCAKPj4gZmlsZSIpKTsK Pj4gKwo+PiArICBoYXNoX2ZpbGUgPSBncnViX2ZpbGVfb3BlbiAoYXJnc1sxXSwgR1JVQl9GSUxF X1RZUEVfVE9fSEFTSCB8IAo+PiBHUlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKPj4gKyAg aWYgKGhhc2hfZmlsZSA9PSBOVUxMKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9GSUxFX05PVF9GT1VORCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgTl8oInVuYWJsZSB0 byBvcGVuIHRoZSBkaXN0cnVzdGVkIAo+PiBjZXJ0aWZpY2F0ZS9iaW5hcnkgaGFzaCBmaWxlIikp Owo+PiArCj4+ICsgIHJjID0gZ3J1Yl9yZWFkX2ZpbGUgKGhhc2hfZmlsZSwgJmhhc2hfZGF0YSwg Jmhhc2hfZGF0YV9zaXplKTsKPj4gKyAgaWYgKHJjICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAg ewo+PiArICAgICAgZ3J1Yl9maWxlX2Nsb3NlIChoYXNoX2ZpbGUpOwo+PiArICAgICAgcmV0dXJu IHJjOwo+PiArICAgIH0KPj4gKwo+PiArICBncnViX2ZpbGVfY2xvc2UgKGhhc2hfZmlsZSk7Cj4+ ICsKPj4gKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAiYWRkaW5nIGEgZGlzdHJ1c3Rl ZCAKPj4gY2VydGlmaWNhdGUvYmluYXJ5IGhhc2ggJXNcbiIKPj4gKyAgICAgICAgICAgICAgICAi IHdpdGggc2l6ZSBvZiAlIiBQUkl1R1JVQl9TSVpFICJcbiIsIGhhc2hfZGF0YSwgCj4+IGhhc2hf ZGF0YV9zaXplKTsKPj4gKwo+PiArICBpZiAoY3R4dC0+c3RhdGVbT1BUSU9OX0JJTkFSWV9IQVNI XS5zZXQpCj4+ICsgICAgewo+PiArICAgICAgLyogb25seSBhY2NlcHQgU0hBMjU2LCBTSEEzODQg YW5kIFNIQTUxMiBiaW5hcnkgaGFzaCAqLwo+PiArICAgICAgaWYgKGhhc2hfZGF0YV9zaXplICE9 IDMyICYmIGhhc2hfZGF0YV9zaXplICE9IDQ4ICYmIAo+PiBoYXNoX2RhdGFfc2l6ZSAhPSA2NCkK Pj4gKyAgICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygidW5hY2NlcHRhYmxlIGRpc3RydXN0ZWQg YmluYXJ5IGhhc2ggCj4+IHR5cGUiKSk7Cj4+ICsgICAgfQo+PiArICBlbHNlIGlmIChjdHh0LT5z dGF0ZVtPUFRJT05fQ0VSVF9IQVNIXS5zZXQpCj4+ICsgICAgewo+PiArICAgICAgLyogb25seSBh Y2NlcHQgU0hBMjU2LCBTSEEzODQgYW5kIFNIQTUxMiBjZXJ0aWZpY2F0ZSBoYXNoICovCj4+ICsg ICAgICBpZiAoaGFzaF9kYXRhX3NpemUgIT0gMzIgJiYgaGFzaF9kYXRhX3NpemUgIT0gNDggJiYg Cj4+IGhhc2hfZGF0YV9zaXplICE9IDY0KQo+PiArICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5f KCJ1bmFjY2VwdGFibGUgZGlzdHJ1c3RlZCBjZXJ0aWZpY2F0ZSAKPj4gaGFzaCB0eXBlIikpOwo+ PiArICAgIH0KPj4gKwo+PiArICByYyA9IGFkZF9oYXNoICgoY29uc3QgZ3J1Yl91aW50OF90ICoq KSAmaGFzaF9kYXRhLCBoYXNoX2RhdGFfc2l6ZSwgCj4+ICZkYnguc2lnbmF0dXJlcywKPj4gKyAg ICAgICAgICAgICAgICAgJmRieC5zaWduYXR1cmVfc2l6ZSwgJmRieC5zaWduYXR1cmVfZW50cmll cyk7Cj4+ICsgIGlmIChyYyAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIHsKPj4gKyAgICAgIGZy ZWVfdHJ1c3RlZF9saXN0ICgpOwo+PiArICAgICAgZnJlZV9kaXN0cnVzdGVkX2xpc3QgKCk7Cj4+ ICsgICAgICBncnViX2Vycm9yIChyYywgImFkZGluZyBvZiBkaXN0cnVzdGVkIGJpbmFyeS9jZXJ0 aWZpY2F0ZSBoYXNoIAo+PiBmYWlsZWQiKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgZ3J1Yl9mcmVl IChoYXNoX2RhdGEpOwo+PiArCj4+ICsgIHJldHVybiByYzsKPj4gK30KPj4gKwo+PiAgc3RhdGlj IGdydWJfZXJyX3QKPj4gIGFwcGVuZGVkc2lnX2luaXQgKGdydWJfZmlsZV90IGlvIF9fYXR0cmli dXRlX18gKCh1bnVzZWQpKSwgZW51bSAKPj4gZ3J1Yl9maWxlX3R5cGUgdHlwZSwKPj4gICAgICAg ICAgICAgICAgICAgIHZvaWQgKipjb250ZXh0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgZW51 bSAKPj4gZ3J1Yl92ZXJpZnlfZmxhZ3MgKmZsYWdzKQo+PiBAQCAtODQyLDggKzEwMDgsNiBAQCBw c2V1ZG9fcmVhZCAoc3RydWN0IGdydWJfZmlsZSAqZmlsZSwgY2hhciAqYnVmLCAKPj4gZ3J1Yl9z aXplX3QgbGVuKQo+PiAgLyogRmlsZXN5c3RlbSBkZXNjcmlwdG9yLiAgKi8KPj4gIHN0YXRpYyBz dHJ1Y3QgZ3J1Yl9mcyBwc2V1ZG9fZnMgPSB7IC5uYW1lID0gInBzZXVkbyIsIC5mc19yZWFkID0g Cj4+IHBzZXVkb19yZWFkIH07Cj4+IAo+PiAtc3RhdGljIGdydWJfY29tbWFuZF90IGNtZF92ZXJp ZnksIGNtZF9saXN0LCBjbWRfZGlzdHJ1c3QsIGNtZF90cnVzdDsKPj4gLQo+PiAgLyoKPj4gICAq IFZlcmlmeSB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBhZ2FpbnN0IHRoZSBjZXJ0aWZpY2F0ZSBo YXNoZXMgZnJvbSAKPj4gcGxhdGZvcm0ga2V5c3RvcmUgYnVmZmVyJ3MKPj4gICAqIGRpc3RydXN0 ZWQgbGlzdC4KPj4gQEAgLTExMzUsNiArMTI5OSwxMCBAQCBsb2FkX3N0YXRpY19rZXlzIChjb25z dCBzdHJ1Y3QgCj4+IGdydWJfbW9kdWxlX2hlYWRlciAqaGVhZGVyLCBjb25zdCBncnViX2Jvb2xf dCBpc18KPj4gICAgcmV0dXJuIHJjOwo+PiAgfQo+PiAKPj4gK3N0YXRpYyBncnViX2V4dGNtZF90 IGNtZF9kaXN0cnVzdGVkX2hhc2g7Cj4+ICtzdGF0aWMgZ3J1Yl9jb21tYW5kX3QgY21kX3Zlcmlm eSwgY21kX3RydXN0ZWRfbGlzdCwgY21kX3RydXN0ZWRfY2VydCwgCj4+IGNtZF90cnVzdGVkX2hh c2gsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgY21kX2Rpc3RydXN0ZWRfbGlzdCwgY21kX2Rp c3RydXN0ZWRfY2VydDsKPj4gKwo+PiAgR1JVQl9NT0RfSU5JVCAoYXBwZW5kZWRzaWcpCj4+ICB7 Cj4+ICAgIGludCByYzsKPj4gQEAgLTExOTYsMTcgKzEzNjQsMzEgQEAgR1JVQl9NT0RfSU5JVCAo YXBwZW5kZWRzaWcpCj4+IAo+PiAgICAgICAgZ3J1Yl9wa3NfZnJlZV9rZXlzdG9yZSAoKTsKPj4g ICAgICB9Cj4+IC0KPj4gLSAgY21kX3RydXN0ID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgidHJ1 c3RfY2VydGlmaWNhdGUiLCAKPj4gZ3J1Yl9jbWRfdHJ1c3QsIE5fKCJYNTA5X0NFUlRJRklDQVRF IiksCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkFkZCBYNTA5 X0NFUlRJRklDQVRFIHRvIAo+PiB0cnVzdGVkIGNlcnRpZmljYXRlcy4iKSk7Cj4+IC0gIGNtZF9s aXN0ID0gZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kICgibGlzdF9jZXJ0aWZpY2F0ZXMiLCAKPj4gZ3J1 Yl9jbWRfbGlzdCwgMCwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5f KCJTaG93IHRoZSBsaXN0IG9mIHRydXN0ZWQgeDUwOSAKPj4gY2VydGlmaWNhdGVzLiIpKTsKPj4g KyAgY21kX3RydXN0ZWRfY2VydCA9IGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoInRydXN0ZWRfY2Vy dGlmaWNhdGUiLCAKPj4gZ3J1Yl9jbWRfdHJ1c3RlZF9jZXJ0LAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiWDUwOV9DRVJUSUZJQ0FURSIpLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiQWRkIFg1MDlf Q0VSVElGSUNBVEUgCj4+IHRvIHRydXN0ZWQgbGlzdC4iKSk7Cj4+ICsgIGNtZF90cnVzdGVkX2hh c2ggPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ0cnVzdGVkX3NpZ25hdHVyZSIsIAo+PiBncnVi X2NtZF90cnVzdGVkX2hhc2gsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5fKCJCSU5BUlkgSEFTSCBGSUxFIiksCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE5fKCJBZGQgdHJ1c3RlZCBCSU5BUlkgCj4+IEhBU0gg dG8gdHJ1c3RlZCBsaXN0LiIpKTsKPj4gKyAgY21kX2Rpc3RydXN0ZWRfY2VydCA9IGdydWJfcmVn aXN0ZXJfY29tbWFuZCAKPj4gKCJkaXN0cnVzdGVkX2NlcnRpZmljYXRlIiwgZ3J1Yl9jbWRfZGlz dHJ1c3RlZF9jZXJ0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBOXygiQ0VSVF9OVU1CRVIiKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTl8oIlJlbW92ZSBDRVJUX05VTUJFUiAKPj4gKGFzIGxpc3Rl ZCBieSBsaXN0X3RydXN0ZWQpIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiIGZyb20gdHJ1c3RlZCAKPj4gbGlzdC4iKSk7Cj4+ICsgIGNtZF9k aXN0cnVzdGVkX2hhc2ggPSBncnViX3JlZ2lzdGVyX2V4dGNtZCAoImRpc3RydXN0ZWRfc2lnbmF0 dXJlIiwgCj4+IGdydWJfY21kX2Rpc3RydXN0ZWRfaGFzaCwgMCwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiWy1ifC0tYmluYXJ5LWhhc2hdIAo+ PiBGSUxFIFtCSU5BUlkgSEFTSCBGSUxFXVxuIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJbLWN8LS1jZXJ0LWhhc2hdIAo+PiBGSUxFIFtDRVJU RklDQVRFIEhBU0ggRklMRV0iKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOXygiQWRkIGRpc3RydXN0ZWQgCj4+IENFUlRGSUNBVEUvQklOQVJZIEhB U0ggIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJ0byBkaXN0cnVzdGVkIAo+PiBsaXN0LiIpLAo+PiArCQkJICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKPj4gKyAgY21kX3RydXN0ZWRfbGlzdCA9IGdy dWJfcmVnaXN0ZXJfY29tbWFuZCAoInRydXN0ZWRfbGlzdCIsIAo+PiBncnViX2NtZF90cnVzdGVk X2xpc3QsIDAsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE5fKCJTaG93IHRoZSBsaXN0IG9mIAo+PiB0cnVzdGVkIHg1MDkgY2VydGlmaWNhdGVzIGFuZCIK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiB0cnVz dGVkIGJpbmFyeSAKPj4gaGFzaGVzLiIpKTsKPj4gKyAgY21kX2Rpc3RydXN0ZWRfbGlzdCA9IGdy dWJfcmVnaXN0ZXJfY29tbWFuZCAoImRpc3RydXN0ZWRfbGlzdCIsIAo+PiBncnViX2NtZF9kaXN0 cnVzdGVkX2xpc3QsIDAsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE5fKCJTaG93IHRoZSBsaXN0IG9mIAo+PiBkaXN0cnVzdGVkIGNlcnRpZmljYXRl cyBhbmQiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICIgCj4+IGNlcnRpZmljYXRlL2JpbmFyeSBoYXNoZXMiKSk7Cj4+ICAgIGNtZF92ZXJpZnkg PSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJ2ZXJpZnlfYXBwZW5kZWQiLCAKPj4gZ3J1Yl9jbWRf dmVyaWZ5X3NpZ25hdHVyZSwgTl8oIkZJTEUiKSwKPj4gLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgTl8oIlZlcmlmeSBGSUxFIGFnYWluc3QgdGhlIAo+PiB0cnVzdGVkIHg1 MDkgY2VydGlmaWNhdGVzLiIpKTsKPj4gLSAgY21kX2Rpc3RydXN0ID0gZ3J1Yl9yZWdpc3Rlcl9j b21tYW5kICgiZGlzdHJ1c3RfY2VydGlmaWNhdGUiLCAKPj4gZ3J1Yl9jbWRfZGlzdHJ1c3QsCj4+ IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIkNFUlRfTlVNQkVS IiksCj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTl8oIlJlbW92 ZSBDRVJUX05VTUJFUiAoYXMgCj4+IGxpc3RlZCBieSBsaXN0X2NlcnRpZmljYXRlcykiCj4+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBmcm9tIHRydXN0ZWQg Cj4+IGNlcnRpZmljYXRlcy4iKSk7Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIE5fKCJWZXJpZnkgRklMRSBhZ2FpbnN0IHRoZSAKPj4gdHJ1c3RlZCB4NTA5IGNlcnRp ZmljYXRlcy8iCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0 cnVzdGVkIGJpbmFyeSBoYXNoZXMuIikpOwo+PiAKPj4gICAgZ3J1Yl92ZXJpZmllcl9yZWdpc3Rl ciAoJmdydWJfYXBwZW5kZWRzaWdfdmVyaWZpZXIpOwo+PiAgICBncnViX2RsX3NldF9wZXJzaXN0 ZW50IChtb2QpOwo+PiBAQCAtMTIxOCwxMCArMTQwMCwxMiBAQCBHUlVCX01PRF9GSU5JIChhcHBl bmRlZHNpZykKPj4gICAgICogZ3J1Yl9kbF9zZXRfcGVyc2lzdGVudCBzaG91bGQgcHJldmVudCB0 aGlzIGZyb20gYWN0dWFsbHkgCj4+IHJ1bm5pbmcsIGJ1dAo+PiAgICAgKiBpdCBkb2VzIHN0aWxs IHJ1biB1bmRlciBlbXUuCj4+ICAgICAqLwo+PiAtCj4+ICAgIGdydWJfdmVyaWZpZXJfdW5yZWdp c3RlciAoJmdydWJfYXBwZW5kZWRzaWdfdmVyaWZpZXIpOwo+PiAgICBncnViX3VucmVnaXN0ZXJf Y29tbWFuZCAoY21kX3ZlcmlmeSk7Cj4+IC0gIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRf bGlzdCk7Cj4+IC0gIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChjbWRfdHJ1c3QpOwo+PiAtICBn cnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2Rpc3RydXN0KTsKPj4gKyAgZ3J1Yl91bnJlZ2lz dGVyX2NvbW1hbmQgKGNtZF90cnVzdGVkX2xpc3QpOwo+PiArICBncnViX3VucmVnaXN0ZXJfY29t bWFuZCAoY21kX2Rpc3RydXN0ZWRfbGlzdCk7Cj4+ICsgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5k IChjbWRfdHJ1c3RlZF9jZXJ0KTsKPj4gKyAgZ3J1Yl91bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF9k aXN0cnVzdGVkX2NlcnQpOwo+PiArICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX3RydXN0 ZWRfaGFzaCk7Cj4+ICsgIGdydWJfdW5yZWdpc3Rlcl9leHRjbWQgKGNtZF9kaXN0cnVzdGVkX2hh c2gpOwo+PiAgfQo+PiAtLQo+PiAyLjQzLjUKPj4gCj4+IAo+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+PiBHcnViLWRldmVsIG1haWxpbmcgbGlzdAo+ PiBHcnViLWRldmVsQGdudS5vcmcKPj4gaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlz dGluZm8vZ3J1Yi1kZXZlbAoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KR3J1Yi1kZXZlbCBtYWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBz Oi8vbGlzdHMuZ251Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK