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 2C188C021A4 for ; Wed, 26 Feb 2025 04:27:12 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1tn90J-0001nC-6l; Tue, 25 Feb 2025 23:26:39 -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 1tn90H-0001mn-9r for grub-devel@gnu.org; Tue, 25 Feb 2025 23:26:37 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1tn90C-000481-IK for grub-devel@gnu.org; Tue, 25 Feb 2025 23:26:37 -0500 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 51Q1ksQh027771; Wed, 26 Feb 2025 04:26:27 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=RPn8pt yUkatZZJxUeo8IpRg+4Bt2zS1VpWNaoSa98aw=; b=SWl9me1WCle3LDrXZzmHn9 ocX4HZBvLJXMU1SEtuNLAZ+zCKk/HAtfMY1JtWXa6jG4R1xHeiviVZ5k9a29UGem ihoU3NswLbfl+cMsjSf6N/TSvliqZKj0wofh1LHoi/AbM0Og/0NuP/QzY4gD8qFN pr4U1R9GxWc/dKmUTdsSDUX6efjDfeym86oXal9etQmbIGd8yFcbtqm8oEI8lV7Q CUo5hWFOpJQ7BLh771N6HHLvqUFeDGEZThMYVTzUX/JOxd5BmcHM9N3fAxtTAuH2 z/f0Q/WvsK0ZsnV2byH7J5bC6NtMqPKzj1dvUAduVTtoXQPclnExn82Fv8lAgYGg == Received: from ppma23.wdc07v.mail.ibm.com (5d.69.3da9.ip4.static.sl-reverse.com [169.61.105.93]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 451q5j934m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 26 Feb 2025 04:26:26 +0000 (GMT) Received: from pps.filterd (ppma23.wdc07v.mail.ibm.com [127.0.0.1]) by ppma23.wdc07v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 51Q0gxGE027396; Wed, 26 Feb 2025 04:26:25 GMT Received: from smtprelay05.wdc07v.mail.ibm.com ([172.16.1.72]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 44ytdkgmqm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 26 Feb 2025 04:26:25 +0000 Received: from smtpav05.wdc07v.mail.ibm.com (smtpav05.wdc07v.mail.ibm.com [10.39.53.232]) by smtprelay05.wdc07v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 51Q4QOKY8782526 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 26 Feb 2025 04:26:24 GMT Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E6D1C5805D; Wed, 26 Feb 2025 04:26:23 +0000 (GMT) Received: from smtpav05.wdc07v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E5D3158053; Wed, 26 Feb 2025 04:26:22 +0000 (GMT) Received: from ltc.linux.ibm.com (unknown [9.5.196.140]) by smtpav05.wdc07v.mail.ibm.com (Postfix) with ESMTP; Wed, 26 Feb 2025 04:26:22 +0000 (GMT) MIME-Version: 1.0 Date: Wed, 26 Feb 2025 09:56:22 +0530 From: sudhakar To: Stefan Berger Cc: grub-devel@gnu.org, dja@axtens.net, jan.setjeeilers@oracle.com, julian.klode@canonical.com, mate.kukri@canonical.com, pjones@redhat.com, avnish@linux.ibm.com, nayna@linux.ibm.com, ssrish@linux.ibm.com, Javier Martinez Canillas , Michal Suchanek Subject: Re: [PATCH v1 09/21] appended signatures: parse PKCS#7 signedData and X.509 certificates In-Reply-To: <567a5a08-6f53-40e8-9b9c-26628b18e63e@linux.ibm.com> References: <20241218145647.1390837-1-sudhakar@linux.ibm.com> <20241218145647.1390837-10-sudhakar@linux.ibm.com> <567a5a08-6f53-40e8-9b9c-26628b18e63e@linux.ibm.com> Message-ID: <1d0f2d171bbfd141e9115fb377fd3f6a@linux.ibm.com> X-Sender: sudhakar@linux.ibm.com X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 6vpfgf8kAgX9iYtMp9M7bxqCni9d0Iit X-Proofpoint-ORIG-GUID: 6vpfgf8kAgX9iYtMp9M7bxqCni9d0Iit 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-25_08,2025-02-25_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 suspectscore=0 mlxlogscore=999 phishscore=0 adultscore=0 clxscore=1015 bulkscore=0 priorityscore=1501 mlxscore=0 spamscore=0 lowpriorityscore=0 impostorscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2502100000 definitions=main-2502260029 Received-SPF: pass client-ip=148.163.156.1; envelope-from=sudhakar@linux.ibm.com; helo=mx0a-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 T24gMjAyNC0xMi0yOSAwMToxNiwgU3RlZmFuIEJlcmdlciB3cm90ZToKPiBPbiAxMi8xOC8yNCA5 OjU2IEFNLCBTdWRoYWthciBLdXBwdXNhbXkgd3JvdGU6Cj4+IEZyb206IERhbmllbCBBeHRlbnMg PGRqYUBheHRlbnMubmV0Pgo+PiAKPj4gVGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKPj4g Cj4+ICAgLSBQS0NTIzcgc2lnbmVkRGF0YSBtZXNzYWdlcy4gT25seSBhIHNpbmdsZSBzaWduZXJJ bmZvIGlzIHN1cHBvcnRlZCwKPj4gICAgIHdoaWNoIGlzIGFsbCB0aGF0IHRoZSBMaW51eCBzaWdu LWZpbGUgdXRpbGl0eSBzdXBwb3J0cyBjcmVhdGluZwo+PiAgICAgb3V0LW9mLXRoZS1ib3guIE9u bHkgUlNBLCBTSEEtMjU2IGFuZCBTSEEtNTEyIGFyZSBzdXBwb3J0ZWQuCj4+ICAgICBBbnkgY2Vy dGlmaWNhdGUgZW1iZWRkZWQgaW4gdGhlIFBLQ1MjNyBtZXNzYWdlIHdpbGwgYmUgaWdub3JlZC4K Pj4gCj4+ICAgLSBYLjUwOSBjZXJ0aWZpY2F0ZXM6IGF0IGxlYXN0IGVub3VnaCB0byB2ZXJpZnkg dGhlIHNpZ25hdHVyZXMgb24gCj4+IHRoZQo+PiAgICAgUEtDUyM3IG1lc3NhZ2VzLiBXZSBleHBl Y3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIGdydWIgCj4+IHdpbGwKPj4gICAg IGJlIGxlYWYgY2VydGlmaWNhdGVzLCBub3QgQ0EgY2VydGlmaWNhdGVzLiBUaGUgcGFyc2VyIGVu Zm9yY2VzIAo+PiB0aGlzLgo+PiAKPj4gICAtIFguNTA5IGNlcnRpZmljYXRlcyBzdXBwb3J0IHRo ZSBFeHRlbmRlZCBLZXkgVXNhZ2UgZXh0ZW5zaW9uIGFuZCAKPj4gaGFuZGxlCj4+ICAgICBpdCBi eSB2ZXJpZnlpbmcgdGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgc2luZ2xlIHB1cnBvc2UsIHRo YXQgaXMgCj4+IGNvZGUKPj4gICAgIHNpZ25pbmcuIFRoaXMgaXMgcmVxdWlyZWQgYmVjYXVzZSBS ZWQgSGF0IGNlcnRpZmljYXRlcyBoYXZlIGJvdGggCj4+IEtleQo+PiAgICAgVXNhZ2UgYW5kIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb25zIHByZXNlbnQuCj4+IAo+PiBTaWduZWQtb2ZmLWJ5 OiBKYXZpZXIgTWFydGluZXogQ2FuaWxsYXMgPGphdmllcm1AcmVkaGF0LmNvbT4gIyBFS1UgCj4+ IHN1cHBvcnQKPj4gUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2Uu Y29tPiAjIGtleSB1c2FnZSBpc3N1ZQo+PiBTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxk amFAYXh0ZW5zLm5ldD4KPj4gU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRo YWthckBsaW51eC5pYm0uY29tPgo+PiAtLS0KPj4gICBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5k ZWRzaWcvYXBwZW5kZWRzaWcuaCB8IDExMCArKysKPj4gICBncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvYXNuMXV0aWwuYyAgICB8ICA5OSArKwo+PiAgIGdydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9wa2NzNy5jICAgICAgIHwgNDczICsrKysrKysrKwo+PiAgIGdydWItY29yZS9j b21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMgICAgICAgIHwgOTgxIAo+PiArKysrKysrKysrKysr KysrKysrCj4+ICAgNCBmaWxlcyBjaGFuZ2VkLCAxNjYzIGluc2VydGlvbnMoKykKPj4gICBjcmVh dGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2ln LmgKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L2FzbjF1dGlsLmMKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1hbmRzL2Fw cGVuZGVkc2lnL3BrY3M3LmMKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZ3J1Yi1jb3JlL2NvbW1h bmRzL2FwcGVuZGVkc2lnL3g1MDkuYwo+PiAKPj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oIAo+PiBiL2dydWItY29yZS9jb21tYW5kcy9h cHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4+IGluZGV4 IDAwMDAwMDAwMC4uZmE1OTMwMmM4Cj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvZ3J1Yi1jb3Jl L2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmgKPj4gQEAgLTAsMCArMSwxMTAgQEAK Pj4gKy8qCj4+ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgo+PiArICog IENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4K Pj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgSUJNIENvcnBvcmF0aW9uCj4+ICsgKgo+ PiArICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo+PiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIAo+PiBieQo+PiArICogIHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCj4+ICsg KiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAqCj4+ICsgKiAgR1JV QiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+PiAr ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCj4+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl ZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ICsgKiAgYWxvbmcg d2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+Lgo+ PiArICovCj4+ICsKPj4gKyNpbmNsdWRlIDxncnViL2NyeXB0by5oPgo+PiArI2luY2x1ZGUgPGdy dWIvbGlidGFzbjEuaD4KPj4gKwo+PiArZXh0ZXJuIGFzbjFfbm9kZSBfZ251dGxzX2dudXRsc19h c247Cj4+ICtleHRlcm4gYXNuMV9ub2RlIF9nbnV0bHNfcGtpeF9hc247Cj4+ICsKPj4gKyNkZWZp bmUgTUFYX09JRF9MRU4gMzIKPj4gKwo+PiArLyoKPj4gKyAqIE9uZSBvciBtb3JlIHg1MDkgY2Vy dGlmaWNhdGVzLgo+PiArICogV2UgZG8gbGltaXRlZCBwYXJzaW5nOiBleHRyYWN0aW5nIG9ubHkg dGhlIHNlcmlhbCwgQ04gYW5kIFJTQSAKPj4gcHVibGljIGtleS4KPj4gKyAqLwo+PiArc3RydWN0 IHg1MDlfY2VydGlmaWNhdGUKPj4gK3sKPj4gKyAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKm5l eHQ7Cj4+ICsgIGdydWJfdWludDhfdCAqc2VyaWFsOwo+PiArICBncnViX3NpemVfdCBzZXJpYWxf bGVuOwo+PiArICBjaGFyICpzdWJqZWN0Owo+PiArICBncnViX3NpemVfdCBzdWJqZWN0X2xlbjsK Pj4gKyAgLyogV2Ugb25seSBzdXBwb3J0IFJTQSBwdWJsaWMga2V5cy4gVGhpcyBlbmNvZGVzIFtt b2R1bHVzLCAKPj4gcHVibGljRXhwb25lbnRdICovCj4+ICsgIGdjcnlfbXBpX3QgbXBpc1syXTsK Pj4gK307Cj4+ICsKPj4gKy8qCj4+ICsgKiBBIFBLQ1MjNyBzaWduZWREYXRhIHNpZ25lckluZm8u Cj4+ICsgKi8KPj4gK3N0cnVjdCBwa2NzN19zaWduZXJJbmZvCj4+ICt7Cj4+ICsgIGNvbnN0IGdj cnlfbWRfc3BlY190ICpoYXNoOwo+PiArICBnY3J5X21waV90IHNpZ19tcGk7Cj4+ICt9Owo+PiAr Cj4+ICsvKgo+PiArICogQSBQS0NTIzcgc2lnbmVkRGF0YSBtZXNzYWdlLgo+PiArICogV2UgbWFr ZSBubyBhdHRlbXB0IHRvIG1hdGNoIGludGVsbGlnZW50bHksIHNvIHdlIGRvbid0IHNhdmUgYW55 IAo+PiBpbmZvIGFib3V0Cj4+ICsgKiB0aGUgc2lnbmVyLgo+PiArICovCj4+ICtzdHJ1Y3QgcGtj czdfc2lnbmVkRGF0YQo+PiArewo+PiArICBpbnQgc2lnbmVySW5mb19jb3VudDsKPj4gKyAgc3Ry dWN0IHBrY3M3X3NpZ25lckluZm8gKnNpZ25lckluZm9zOwo+PiArfTsKPj4gKwo+PiArLyogRG8g bGlidGFzbjEgaW5pdCAqLwo+PiAraW50Cj4+ICthc24xX2luaXQgKHZvaWQpOwo+PiArCj4+ICsv Kgo+PiArICogSW1wb3J0IGEgREVSLWVuY29kZWQgY2VydGlmaWNhdGUgYXQgJ2RhdGEnLCBvZiBz aXplICdzaXplJy4KPj4gKyAqIFBsYWNlIHRoZSByZXN1bHRzIGludG8gJ3Jlc3VsdHMnLCB3aGlj aCBtdXN0IGJlIGFscmVhZHkgYWxsb2NhdGVkLgo+PiArICovCj4+ICtncnViX2Vycl90Cj4+ICtw YXJzZV94NTA5X2NlcnRpZmljYXRlIChjb25zdCB2b2lkICpkYXRhLCBncnViX3NpemVfdCBzaXpl LCBzdHJ1Y3QgCj4+IHg1MDlfY2VydGlmaWNhdGUgKnJlc3VsdHMpOwo+PiArCj4+ICsvKgo+PiAr ICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSB4NTA5IGNlcnRp ZmljYXRlLgo+PiArICogSWYgdGhlIGNhbGxlciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdGhlIGNl cnRpZmljYXRlLCBpdCBtdXN0IGZyZWUgCj4+IGl0Lgo+PiArICogVGhlIGNhbGxlciBpcyBhbHNv IHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5jZSBvZiB0aGUgbGlua2VkIGxpc3QuCj4+ICsgKi8K Pj4gK3ZvaWQKPj4gK2NlcnRpZmljYXRlX3JlbGVhc2UgKHN0cnVjdCB4NTA5X2NlcnRpZmljYXRl ICpjZXJ0KTsKPj4gKwo+PiArLyoKPj4gKyAqIFBhcnNlIGEgUEtDUyM3IG1lc3NhZ2UsIHdoaWNo IG11c3QgYmUgYSBzaWduZWREYXRhIG1lc3NhZ2UuCj4+ICsgKiBUaGUgbWVzc2FnZSBtdXN0IGJl IGluICdzaWdidWYnIGFuZCBvZiBzaXplICdkYXRhX3NpemUnLiBUaGUgCj4+IHJlc3VsdCBpcwo+ PiArICogcGxhY2VkIGluICdtc2cnLCB3aGljaCBtdXN0IGFscmVhZHkgYmUgYWxsb2NhdGVkLgo+ PiArICovCj4+ICtncnViX2Vycl90Cj4+ICtwYXJzZV9wa2NzN19zaWduZWREYXRhIChjb25zdCB2 b2lkICpzaWdidWYsIGdydWJfc2l6ZV90IGRhdGFfc2l6ZSwgCj4+IHN0cnVjdCBwa2NzN19zaWdu ZWREYXRhICptc2cpOwo+PiArCj4+ICsvKgo+PiArICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2Ug YXNzb2NpYXRlZCB3aXRoIHRoZSBQS0NTIzcgbWVzc2FnZS4KPj4gKyAqIElmIHRoZSBjYWxsZXIg ZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBtZXNzYWdlLCBpdCBtdXN0IGZyZWUgaXQuCj4+ICsg Ki8KPj4gK3ZvaWQKPj4gK3BrY3M3X3NpZ25lZERhdGFfcmVsZWFzZSAoc3RydWN0IHBrY3M3X3Np Z25lZERhdGEgKm1zZyk7Cj4+ICsKPj4gKy8qCj4+ICsgKiBSZWFkIGEgdmFsdWUgZnJvbSBhbiBB U04xIG5vZGUsIGFsbG9jYXRpbmcgbWVtb3J5IHRvIHN0b3JlIGl0Lgo+PiArICogSXQgd2lsbCB3 b3JrIGZvciBhbnl0aGluZyB3aGVyZSB0aGUgc2l6ZSBsaWJ0YXNuMSByZXR1cm5zIGlzIAo+PiBy aWdodDoKPj4gKyAqICAtIEludGVnZXJzCj4+ICsgKiAgLSBPY3RldCBzdHJpbmdzCj4+ICsgKiAg LSBERVIgZW5jb2Rpbmcgb2Ygb3RoZXIgc3RydWN0dXJlcwo+PiArICogSXQgd2lsbCBfbm90XyB3 b3JrIGZvciB0aGluZ3Mgd2hlcmUgbGlidGFzbjEgc2l6ZSByZXF1aXJlcyAKPj4gYWRqdXN0bWVu dDoKPj4gKyAqICAtIFN0cmluZ3MgdGhhdCByZXF1aXJlIGFuIGV4dHJhIE5VTEwgYnl0ZSBhdCB0 aGUgZW5kCj4gCj4gTlVMIGJ5dGUuCj4gCj4+ICsgKiAgLSBCaXQgc3RyaW5ncyBiZWNhdXNlIGxp YnRhc24xIHJldHVybnMgdGhlIGxlbmd0aCBpbiBiaXRzLCBub3QgCj4+IGJ5dGVzLgo+PiArICoK Pj4gKyAqIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIGEgbm9uLU5VTEwgdmFsdWUsIHRoZSBjYWxs ZXIgbXVzdCBmcmVlIGl0Lgo+PiArICovCj4+ICt2b2lkICoKPj4gK2dydWJfYXNuMV9hbGxvY2F0 ZV9hbmRfcmVhZCAoYXNuMV9ub2RlIG5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IAo+PiBj aGFyICpmcmllbmRseV9uYW1lLCBpbnQgKmNvbnRlbnRfc2l6ZSk7Cj4+IGRpZmYgLS1naXQgYS9n cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwuYyAKPj4gYi9ncnViLWNvcmUv Y29tbWFuZHMvYXBwZW5kZWRzaWcvYXNuMXV0aWwuYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwMDAuLjYwOWQwZWNmMgo+PiAtLS0gL2Rldi9udWxsCj4+ICsrKyBiL2dy dWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hc24xdXRpbC5jCj4+IEBAIC0wLDAgKzEsOTkg QEAKPj4gKy8qCj4+ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgo+PiAr ICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu Yy4KPj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgSUJNIENvcnBvcmF0aW9uCj4+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+ICsKPj4gKyNpbmNsdWRlIDxncnViL2xpYnRhc24xLmg+Cj4+ICsjaW5jbHVk ZSA8Z3J1Yi90eXBlcy5oPgo+PiArI2luY2x1ZGUgPGdydWIvZXJyLmg+Cj4+ICsjaW5jbHVkZSA8 Z3J1Yi9tbS5oPgo+PiArI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1 Yi9taXNjLmg+Cj4+ICsjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+Cj4+ICsKPj4gKyNp bmNsdWRlICJhcHBlbmRlZHNpZy5oIgo+PiArCj4+ICthc24xX25vZGUgX2dudXRsc19nbnV0bHNf YXNuID0gTlVMTDsKPj4gK2FzbjFfbm9kZSBfZ251dGxzX3BraXhfYXNuID0gTlVMTDsKPj4gKwo+ PiArZXh0ZXJuIGNvbnN0IGFzbjFfc3RhdGljX25vZGUgZ251dGxzX2FzbjFfdGFiW107Cj4+ICtl eHRlcm4gY29uc3QgYXNuMV9zdGF0aWNfbm9kZSBwa2l4X2FzbjFfdGFiW107Cj4+ICsKPj4gKy8q Cj4+ICsgKiBSZWFkIGEgdmFsdWUgZnJvbSBhbiBBU04xIG5vZGUsIGFsbG9jYXRpbmcgbWVtb3J5 IHRvIHN0b3JlIGl0Lgo+PiArICogSXQgd2lsbCB3b3JrIGZvciBhbnl0aGluZyB3aGVyZSB0aGUg c2l6ZSBsaWJ0YXNuMSByZXR1cm5zIGlzIAo+PiByaWdodDoKPj4gKyAqICAtIEludGVnZXJzCj4+ ICsgKiAgLSBPY3RldCBzdHJpbmdzCj4+ICsgKiAgLSBERVIgZW5jb2Rpbmcgb2Ygb3RoZXIgc3Ry dWN0dXJlcwo+PiArICogSXQgd2lsbCBfbm90XyB3b3JrIGZvciB0aGluZ3Mgd2hlcmUgbGlidGFz bjEgc2l6ZSByZXF1aXJlcyAKPj4gYWRqdXN0bWVudDoKPj4gKyAqICAtIFN0cmluZ3MgdGhhdCBy ZXF1aXJlIGFuIGV4dHJhIE5VTEwgYnl0ZSBhdCB0aGUgZW5kCj4+ICsgKiAgLSBCaXQgc3RyaW5n cyBiZWNhdXNlIGxpYnRhc24xIHJldHVybnMgdGhlIGxlbmd0aCBpbiBiaXRzLCBub3QgCj4+IGJ5 dGVzLgo+PiArICogSWYgdGhlIGZ1bmN0aW9uIHJldHVybnMgYSBub24tTlVMTCB2YWx1ZSwgdGhl IGNhbGxlciBtdXN0IGZyZWUgaXQuCj4+ICsgKi8KPj4gK3ZvaWQgKgo+PiArZ3J1Yl9hc24xX2Fs bG9jYXRlX2FuZF9yZWFkIChhc24xX25vZGUgbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qg Cj4+IGNoYXIgKmZyaWVuZGx5X25hbWUsIGludCAqY29udGVudF9zaXplKQo+PiArewo+PiArICBp bnQgcmVzdWx0Owo+PiArICBncnViX3VpbnQ4X3QgKnRtcHN0ciA9IE5VTEw7Cj4+ICsgIGludCB0 bXBzdHJfc2l6ZSA9IDA7Cj4+ICsKPj4gKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChub2Rl LCBuYW1lLCBOVUxMLCAmdG1wc3RyX3NpemUpOwo+PiArICBpZiAocmVzdWx0ICE9IEFTTjFfTUVN X0VSUk9SKQo+PiArICAgIHsKPj4gKyAgICAgIGdydWJfc25wcmludGYgKGdydWJfZXJybXNnLCBz aXplb2YgKGdydWJfZXJybXNnKSwKPj4gKyAgICAgICAgICAgICAgICAgICAgIF8oIlJlYWRpbmcg c2l6ZSBvZiAlcyBkaWQgbm90IHJldHVybiBleHBlY3RlZCAKPj4gc3RhdHVzOiAlcyIpLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgZnJpZW5kbHlfbmFtZSwgYXNuMV9zdHJlcnJvciAocmVzdWx0 KSk7Cj4+ICsgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRTsKPj4gKyAg ICAgIHJldHVybiBOVUxMOwo+PiArICAgIH0KPj4gKwo+PiArICB0bXBzdHIgPSBncnViX21hbGxv YyAodG1wc3RyX3NpemUpOwo+PiArICBpZiAodG1wc3RyID09IE5VTEwpCj4+ICsgICAgewo+PiAr ICAgICAgZ3J1Yl9zbnByaW50ZiAoZ3J1Yl9lcnJtc2csIHNpemVvZiAoZ3J1Yl9lcnJtc2cpLAo+ PiArICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgdG8gc3Rv cmUgJXMiLCAKPj4gZnJpZW5kbHlfbmFtZSk7Cj4+ICsgICAgICBncnViX2Vycm5vID0gR1JVQl9F UlJfT1VUX09GX01FTU9SWTsKPj4gKyAgICAgIHJldHVybiBOVUxMOwo+PiArICAgIH0KPj4gKwo+ PiArICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKG5vZGUsIG5hbWUsIHRtcHN0ciwgJnRtcHN0 cl9zaXplKTsKPj4gKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgewo+PiAr ICAgICAgZ3J1Yl9mcmVlICh0bXBzdHIpOwo+PiArICAgICAgZ3J1Yl9zbnByaW50ZiAoZ3J1Yl9l cnJtc2csIHNpemVvZiAoZ3J1Yl9lcnJtc2cpLCAiRXJyb3IgCj4+IHJlYWRpbmcgJXM6ICVzIiwK Pj4gKyAgICAgICAgICAgICAgICAgICAgIGZyaWVuZGx5X25hbWUsIGFzbjFfc3RyZXJyb3IgKHJl c3VsdCkpOwo+PiArICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX0JBRF9GSUxFX1RZUEU7Cj4+ ICsgICAgICByZXR1cm4gTlVMTDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgKmNvbnRlbnRfc2l6ZSA9 IHRtcHN0cl9zaXplOwo+PiArCj4+ICsgIHJldHVybiB0bXBzdHI7Cj4+ICt9Cj4+ICsKPj4gK2lu dAo+PiArYXNuMV9pbml0ICh2b2lkKQo+PiArewo+PiArICBpbnQgcmVzOwo+PiArICByZXMgPSBh c24xX2FycmF5MnRyZWUgKGdudXRsc19hc24xX3RhYiwgJl9nbnV0bHNfZ251dGxzX2FzbiwgTlVM TCk7Cj4+ICsgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIHJl dHVybiByZXM7Cj4+ICsgICAgfQo+PiArICByZXMgPSBhc24xX2FycmF5MnRyZWUgKHBraXhfYXNu MV90YWIsICZfZ251dGxzX3BraXhfYXNuLCBOVUxMKTsKPj4gKyAgcmV0dXJuIHJlczsKPj4gK30K Pj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jIAo+ PiBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCj4+IG5ldyBmaWxlIG1v ZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMC4uNjFlNTYwODU0Cj4+IC0tLSAvZGV2L251bGwK Pj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3LmMKPj4gQEAgLTAs MCArMSw0NzMgQEAKPj4gKy8qCj4+ICsgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxv YWRlcgo+PiArICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KPj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIgSUJNIENvcnBvcmF0 aW9uCj4+ICsgKgo+PiArICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3Ry aWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+PiArICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIAo+PiBieQo+PiArICogIHRo ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vu c2UsIG9yCj4+ICsgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPj4gKyAq Cj4+ICsgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAo+PiArICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+PiArICogIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCj4+ICsgKgo+PiArICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4+ ICsgKiAgYWxvbmcgd2l0aCBHUlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9s aWNlbnNlcy8+Lgo+PiArICovCj4+ICsKPj4gKyNpbmNsdWRlICJhcHBlbmRlZHNpZy5oIgo+PiAr I2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+PiArI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+Cj4+ICsj aW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+Cj4+ICsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+ Cj4+ICsKPj4gK3N0YXRpYyBjaGFyIGFzbjFfZXJyb3JbQVNOMV9NQVhfRVJST1JfREVTQ1JJUFRJ T05fU0laRV07Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNTY1MiBzIDUuMQo+PiArICovCj4+ICtz dGF0aWMgY29uc3QgY2hhciAqc2lnbmVkRGF0YV9vaWQgPSAiMS4yLjg0MC4xMTM1NDkuMS43LjIi Owo+PiArCj4+ICsvKgo+PiArICogUkZDIDQwNTUgcyAyLjEKPj4gKyAqLwo+PiArc3RhdGljIGNv bnN0IGNoYXIgKnNoYTI1Nl9vaWQgPSAiMi4xNi44NDAuMS4xMDEuMy40LjIuMSI7Cj4+ICtzdGF0 aWMgY29uc3QgY2hhciAqc2hhNTEyX29pZCA9ICIyLjE2Ljg0MC4xLjEwMS4zLjQuMi4zIjsKPj4g Kwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK3Byb2Nlc3NfY29udGVudCAoZ3J1Yl91aW50OF90 ICpjb250ZW50LCBpbnQgc2l6ZSwgc3RydWN0IAo+PiBwa2NzN19zaWduZWREYXRhICptc2cpCj4+ ICt7Cj4+ICsgIGludCByZXM7Cj4+ICsgIGFzbjFfbm9kZSBzaWduZWRfcGFydDsKPj4gKyAgZ3J1 Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOwo+PiArICBjaGFyIGFsZ29fb2lkW01BWF9PSURf TEVOXTsKPj4gKyAgaW50IGFsZ29fb2lkX3NpemUgPSBzaXplb2YgKGFsZ29fb2lkKTsKPj4gKyAg aW50IGFsZ29fY291bnQ7Cj4+ICsgIGludCBzaWduZXJfY291bnQ7Cj4+ICsgIGludCBpOwo+PiAr ICBjaGFyIHZlcnNpb247Cj4+ICsgIGludCB2ZXJzaW9uX3NpemUgPSBzaXplb2YgKHZlcnNpb24p Owo+PiArICBncnViX3VpbnQ4X3QgKnJlc3VsdF9idWY7Cj4+ICsgIGludCByZXN1bHRfc2l6ZSA9 IDA7Cj4+ICsgIGludCBjcmxzX3NpemUgPSAwOwo+PiArICBnY3J5X2Vycm9yX3QgZ2NyeV9lcnI7 Cj4+ICsgIGJvb2wgc2hhMjU2X2luX2RhLCBzaGEyNTZfaW5fc2ksIHNoYTUxMl9pbl9kYSwgc2hh NTEyX2luX3NpOwo+PiArICBjaGFyICpkYV9wYXRoOwo+PiArICBjaGFyICpzaV9zaWdfcGF0aDsK Pj4gKyAgY2hhciAqc2lfZGFfcGF0aDsKPj4gKwo+PiArICByZXMgPSBhc24xX2NyZWF0ZV9lbGVt ZW50IChfZ251dGxzX3BraXhfYXNuLCAKPj4gIlBLSVgxLnBrY3MtNy1TaWduZWREYXRhIiwgJnNp Z25lZF9wYXJ0KTsKPj4gKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgewo+PiAr ICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZv ciBQS0NTIzcgCj4+IHNpZ25lZCAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgInBhcnQu Iik7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnNpZ25l ZF9wYXJ0LCBjb250ZW50LCAmc2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBB U04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOwo+PiArICBpZiAocmVzICE9 IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJl YWRpbmcgUEtDUyM3IHNpZ25lZCBkYXRhOiAlcyIsIAo+PiBhc24xX2Vycm9yKTsKPj4gKyAgICAg IGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4gKyAg ICogU2lnbmVkRGF0YSA6Oj0gU0VRVUVOQ0Ugewo+PiArICAgKiAgICAgdmVyc2lvbiBDTVNWZXJz aW9uLAo+PiArICAgKiAgICAgZGlnZXN0QWxnb3JpdGhtcyBEaWdlc3RBbGdvcml0aG1JZGVudGlm aWVycywKPj4gKyAgICogICAgIGVuY2FwQ29udGVudEluZm8gRW5jYXBzdWxhdGVkQ29udGVudElu Zm8sCj4+ICsgICAqICAgICBjZXJ0aWZpY2F0ZXMgWzBdIElNUExJQ0lUIENlcnRpZmljYXRlU2V0 IE9QVElPTkFMLAo+PiArICAgKiAgICAgY3JscyBbMV0gSU1QTElDSVQgUmV2b2NhdGlvbkluZm9D aG9pY2VzIE9QVElPTkFMLAo+PiArICAgKiAgICAgc2lnbmVySW5mb3MgU2lnbmVySW5mb3MgfQo+ PiArICAgKi8KPj4gKwo+PiArICAvKiB2ZXJzaW9uIHBlciB0aGUgYWxnbyBpbiA1LjEsIG11c3Qg YmUgMSAqLwo+PiArICByZXMgPSBhc24xX3JlYWRfdmFsdWUgKHNpZ25lZF9wYXJ0LCAidmVyc2lv biIsICZ2ZXJzaW9uLCAKPj4gJnZlcnNpb25fc2l6ZSk7Cj4+ICsgIGlmIChyZXMgIT0gQVNOMV9T VUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9TSUdOQVRVUkUsICJFcnJvciByZWFkaW5nIAo+PiBzaWduZWREYXRhIHZlcnNpb246ICVzIiwK Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlcykpOwo+PiArICAg ICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owo+PiArICAgIH0KPj4gKwo+PiArICBpZiAodmVy c2lvbiAhPSAxKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9TSUdOQVRVUkUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3RlZCBz aWduYXR1cmUgdmVyc2lvbiB2JWQsIG9ubHkgdjEgCj4+IHN1cHBvcnRlZCIsIHZlcnNpb24pOwo+ PiArICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owo+PiArICAgIH0KPj4gKwo+PiArICAv Kgo+PiArICAgKiBkaWdlc3RBbGdvcml0aG1zIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXJzCj4+ ICsgICAqCj4+ICsgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50aWZpZXJzIDo6PSBTRVQgT0YgRGln ZXN0QWxnb3JpdGhtSWRlbnRpZmllcgo+PiArICAgKiBEaWdlc3RBbGdvcml0aG1JZGVudGlmZXIg aXMgYW4gWC41MDkgQWxnb3JpdGhtSWRlbnRpZmllciAKPj4gKDEwLjEuMSkKPj4gKyAgICoKPj4g KyAgICogUkZDIDQwNTUgcyAyLjE6Cj4+ICsgICAqIHNoYTI1NklkZW50aWZpZXIgIEFsZ29yaXRo bUlkZW50aWZpZXIgIDo6PSAgeyBpZC1zaGEyNTYsIE5VTEwgfQo+PiArICAgKiBzaGE1MTJJZGVu dGlmaWVyICBBbGdvcml0aG1JZGVudGlmaWVyICA6Oj0gIHsgaWQtc2hhNTEyLCBOVUxMIH0KPj4g KyAgICoKPj4gKyAgICogV2Ugb25seSBzdXBwb3J0IDEgZWxlbWVudCBpbiB0aGUgc2V0LCBhbmQg d2UgZG8gbm90IGNoZWNrIAo+PiBwYXJhbWV0ZXJzIGF0bS4KPj4gKyAgICovCj4+ICsgIHJlcyA9 IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChzaWduZWRfcGFydCwgImRpZ2VzdEFsZ29yaXRobXMi LCAKPj4gJmFsZ29fY291bnQpOwo+PiArICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAg ICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAi RXJyb3IgY291bnRpbmcgCj4+IG51bWJlciBvZiBkaWdlc3QgYWxnb3JpdGhtczogJXMiLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAgICBn b3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmIChhbGdvX2Nv dW50IDw9IDApCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX1NJR05BVFVSRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJBIG1pbmltdW0gb2Yg MSBkaWdlc3QgYWxnb3JpdGhtIGlzIAo+PiByZXF1aXJlZCIpOwo+PiArICAgICAgZ290byBjbGVh bnVwX3NpZ25lZF9wYXJ0Owo+PiArICAgIH0KPj4gKwo+PiArICBpZiAoYWxnb19jb3VudCA+IDIp Cj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExF TUVOVEVEX1lFVCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJBIG1heGltdW0gb2YgMiBk aWdlc3QgYWxnb3JpdGhtcyBhcmUgCj4+IHN1cHBvcnRlZCIpOwo+IAo+IHMvYXJlL2lzIC0gaXQn cyB0aGUgbWF4aW11bSB0aGF0ICdpcycgc3VwcG9ydGVkCj4gCj4+ICsgICAgICBnb3RvIGNsZWFu dXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHNoYTI1Nl9pbl9kYSA9IGZhbHNl Owo+PiArICBzaGE1MTJfaW5fZGEgPSBmYWxzZTsKPj4gKwo+PiArICBmb3IgKGkgPSAwOyBpIDwg YWxnb19jb3VudDsgaSsrKQo+PiArICAgIHsKPj4gKyAgICAgIGRhX3BhdGggPSBncnViX3hhc3By aW50ZiAoImRpZ2VzdEFsZ29yaXRobXMuPyVkLmFsZ29yaXRobSIsIGkgKyAKPj4gMSk7Cj4+ICsg ICAgICBpZiAoIWRhX3BhdGgpCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJDb3VsZCBub3QgYWxsb2NhdGUgcGF0aCBmb3IgZGlnZXN0IAo+PiBhbGdvcml0aG0g Igo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwYXJzaW5nIHBhdGgiKTsKPj4gKyAg ICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiAr ICAgICAgYWxnb19vaWRfc2l6ZSA9IHNpemVvZiAoYWxnb19vaWQpOwo+PiArICAgICAgcmVzID0g YXNuMV9yZWFkX3ZhbHVlIChzaWduZWRfcGFydCwgZGFfcGF0aCwgYWxnb19vaWQsIAo+PiAmYWxn b19vaWRfc2l6ZSk7Cj4+ICsgICAgICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICAg ICAgewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRV UkUsICJFcnJvciByZWFkaW5nIAo+PiBkaWdlc3QgYWxnb3JpdGhtOiAlcyIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAgICAgICAg Z3J1Yl9mcmVlIChkYV9wYXRoKTsKPj4gKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3Bh cnQ7Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgaWYgKGdydWJfc3RybmNtcCAoc2hhNTEy X29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDApCj4+ICsgICAgICAgIHsKPj4gKyAg ICAgICAgICBpZiAoIXNoYTUxMl9pbl9kYSkKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAg ICAgICAgc2hhNTEyX2luX2RhID0gdHJ1ZTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAg ICBlbHNlCj4+ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJTSEEtNTEyIHNwZWNpZmllZCB0d2ljZSBpbiBkaWdlc3QgCj4+IGFsZ29yaXRobSAi Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaXN0Iik7Cj4gCj4gTW92ZSAi bGlzdCIgdG8gbGluZSBhYm92ZQo+IAo+PiArICAgICAgICAgICAgICBncnViX2ZyZWUgKGRhX3Bh dGgpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAg ICAgICAgICB9Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAo c2hhMjU2X29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IAo+PiAwKQo+PiArICAgICAg ICB7Cj4+ICsgICAgICAgICAgaWYgKCFzaGEyNTZfaW5fZGEpCj4+ICsgICAgICAgICAgICB7Cj4+ ICsgICAgICAgICAgICAgIHNoYTI1Nl9pbl9kYSA9IHRydWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ ICsgICAgICAgICAgZWxzZQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAiU0hBLTI1NiBzcGVjaWZpZWQgdHdpY2UgaW4gZGlnZXN0IAo+PiBh bGdvcml0aG0gIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibGlzdCIpOwo+ IAo+IFNhbWUgaGVyZQo+IAo+PiArICAgICAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOwo+ PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgICAgICAg ICB9Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIGVsc2UKPj4gKyAgICAgICAgewo+PiArICAgICAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsICJPbmx5 IAo+PiBTSEEtMjU2IGFuZCBTSEEtNTEyIGhhc2hlcyBhcmUgc3VwcG9ydGVkLCBmb3VuZCBPSUQg JXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ29fb2lkKTsKPj4gKyAgICAg ICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOwo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWdu ZWRfcGFydDsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICBncnViX2ZyZWUgKGRhX3BhdGgp Owo+PiArICAgIH0KPj4gKwo+PiArICAvKiBhdCB0aGlzIHBvaW50LCBhdCBsZWFzdCBvbmUgb2Yg c2hhezI1Niw1MTJ9X2luX2RhIG11c3QgYmUgdHJ1ZSAKPj4gKi8KPj4gKwo+PiArICAvKgo+PiAr ICAgKiBXZSBpZ25vcmUgdGhlIGNlcnRpZmljYXRlcywgYnV0IHdlIGRvbid0IHBlcm1pdCBDUkxz Lgo+PiArICAgKiBBIENSTCBlbnRyeSBtaWdodCBiZSByZXZva2luZyB0aGUgY2VydGlmaWNhdGUg d2UncmUgdXNpbmcsIGFuZCAKPj4gd2UgaGF2ZQo+PiArICAgKiBubyB3YXkgb2YgZGVhbGluZyB3 aXRoIHRoYXQgYXQgdGhlIG1vbWVudC4KPj4gKyAgICovCj4+ICsgIHJlcyA9IGFzbjFfcmVhZF92 YWx1ZSAoc2lnbmVkX3BhcnQsICJjcmxzIiwgTlVMTCwgJmNybHNfc2l6ZSk7Cj4+ICsgIGlmIChy ZXMgIT0gQVNOMV9FTEVNRU5UX05PVF9GT1VORCkKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgIlBLQ1MjNyBtZXNzYWdlcyB3aXRoIGVtYmVkZGVkIENSTHMgYXJlIG5vdCAK Pj4gc3VwcG9ydGVkIik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsg ICAgfQo+PiArCj4+ICsgIC8qIHJlYWQgdGhlIHNpZ25hdHVyZXMgKi8KPj4gKwo+PiArICByZXMg PSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoc2lnbmVkX3BhcnQsICJzaWduZXJJbmZvcyIsIAo+ PiAmc2lnbmVyX2NvdW50KTsKPj4gKyAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAg ewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgIkVy cm9yIGNvdW50aW5nIAo+PiBudW1iZXIgb2Ygc2lnbmVyczogJXMiLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAgICBnb3RvIGNsZWFudXBf c2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmIChzaWduZXJfY291bnQgPD0gMCkK Pj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFU VVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkEgbWluaW11bSBvZiAxIHNpZ25lciBp cyByZXF1aXJlZCIpOwo+PiArICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owo+PiArICAg IH0KPj4gKwo+PiArICBtc2ctPnNpZ25lckluZm9zID0gZ3J1Yl9jYWxsb2MgKHNpZ25lcl9jb3Vu dCwgc2l6ZW9mIChzdHJ1Y3QgCj4+IHBrY3M3X3NpZ25lckluZm8pKTsKPj4gKyAgaWYgKCFtc2ct PnNpZ25lckluZm9zKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX09VVF9PRl9NRU1PUlksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90 IGFsbG9jYXRlIHNwYWNlIGZvciAlZCBzaWduZXJzIiwgCj4+IHNpZ25lcl9jb3VudCk7Cj4+ICsg ICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7Cj4+ICsgICAgfQo+PiArCj4+ICsgIG1zZy0+ c2lnbmVySW5mb19jb3VudCA9IDA7Cj4+ICsgIGZvciAoaSA9IDA7IGkgPCBzaWduZXJfY291bnQ7 IGkrKykKPj4gKyAgICB7Cj4+ICsgICAgICBzaV9kYV9wYXRoID0gZ3J1Yl94YXNwcmludGYgCj4+ ICgic2lnbmVySW5mb3MuPyVkLmRpZ2VzdEFsZ29yaXRobS5hbGdvcml0aG0iLCBpICsgMSk7Cj4+ ICsgICAgICBpZiAoIXNpX2RhX3BhdGgpCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAiQ291bGQgbm90IAo+PiBhbGxv Y2F0ZSBwYXRoIGZvciBzaWduZXIgJWQncyBkaWdlc3QgYWxnb3JpdGhtIHBhcnNpbmcgcGF0aCIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSk7Cj4+ICsgICAgICAgICAgZ290byBj bGVhbnVwX3NpZ25lckluZm9zOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIGFsZ29fb2lk X3NpemUgPSBzaXplb2YgKGFsZ29fb2lkKTsKPj4gKyAgICAgIHJlcyA9IGFzbjFfcmVhZF92YWx1 ZSAoc2lnbmVkX3BhcnQsIHNpX2RhX3BhdGgsIGFsZ29fb2lkLCAKPj4gJmFsZ29fb2lkX3NpemUp Owo+PiArICAgICAgaWYgKHJlcyAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgICAgIHsKPj4gKyAg ICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByZWFkaW5nIHNpZ25lciAlZCdzIGRpZ2Vz dCAKPj4gYWxnb3JpdGhtOiAlcyIsIGksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg YXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRo KTsKPj4gKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgICAgZ3J1Yl9mcmVlIChzaV9kYV9wYXRoKTsKPj4gKwo+PiArICAgICAgaWYg KGdydWJfc3RybmNtcCAoc2hhNTEyX29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDAp Cj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBpZiAoIXNoYTUxMl9pbl9kYSkKPj4gKyAgICAg ICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X1NJR05BVFVSRSwgIlNpZ25lciAlZCAKPj4gY2xhaW1zIGEgU0hBLTUxMiBzaWduYXR1cmUgIgo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid2hpY2ggd2FzIG5vdCBzcGVjaWZp ZWQgaW4gdGhlIG91dGVyIAo+PiBEaWdlc3RBbGdvcml0aG1zIiwgaSk7Cj4gCj4gTWVyZ2UgaW50 byBvbmUgc3RyaW5nLgo+IAo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5m b3M7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsgICAgICAgICAgZWxzZQo+PiArICAgICAgICAgICAg ewo+PiArICAgICAgICAgICAgICBzaGE1MTJfaW5fc2kgPSB0cnVlOwo+PiArICAgICAgICAgICAg ICBtc2ctPnNpZ25lckluZm9zW2ldLmhhc2ggPQo+PiArICAgICAgICAgICAgICAgICAgICAgIGdy dWJfY3J5cHRvX2xvb2t1cF9tZF9ieV9uYW1lICgic2hhNTEyIik7Cj4gCj4gTm90IHN1cmUgd2hh dCB0aGUgY2hhci1wZXItbGluZSBsaW1pdCBpcywgYnV0IEkgaGF2ZSBzZWVuIDg3IGNoYXJzLCBz bwo+IHByb2JhYmx5IGNhbiBtb3ZlIHRoaXMgb25lIHVwLgo+IAo+PiArICAgICAgICAgICAgfQo+ PiArICAgICAgICB9Cj4+ICsgICAgICBlbHNlIGlmIChncnViX3N0cm5jbXAgKHNoYTI1Nl9vaWQs IGFsZ29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAKPj4gMCkKPj4gKyAgICAgICAgewo+PiArICAg ICAgICAgIGlmICghc2hhMjU2X2luX2RhKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAg ICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiU2lnbmVyICVk IAo+PiBjbGFpbXMgYSBTSEEtMjU2IHNpZ25hdHVyZSAiCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJ3aGljaCB3YXMgbm90IHNwZWNpZmllZCBpbiB0aGUgb3V0ZXIgCj4+IERp Z2VzdEFsZ29yaXRobXMiLCBpKTsKPiAKPiBNZXJnZSB0aGUgc3RyaW5nPwo+IAo+PiArICAgICAg ICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7Cj4+ICsgICAgICAgICAgICB9Cj4+ICsg ICAgICAgICAgZWxzZQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBzaGEyNTZf aW5fc2kgPSB0cnVlOwo+PiArICAgICAgICAgICAgICBtc2ctPnNpZ25lckluZm9zW2ldLmhhc2gg PQo+PiArICAgICAgICAgICAgICAgICAgICAgIGdydWJfY3J5cHRvX2xvb2t1cF9tZF9ieV9uYW1l ICgic2hhMjU2Iik7Cj4gCj4gYWxzbyB0aGlzIG9uZSB1cAo+IAo+PiArICAgICAgICAgICAgfQo+ PiArICAgICAgICB9Cj4+ICsgICAgICBlbHNlCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBl cnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAo+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICJPbmx5IFNIQS0yNTYgYW5kIFNIQS01MTIgaGFzaGVzIGFy ZSAKPj4gc3VwcG9ydGVkLCBmb3VuZCBPSUQgJXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGFsZ29fb2lkKTsKPj4gKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7 Cj4+ICsgICAgICAgIH0KPj4gKwo+PiArICAgICAgaWYgKCFtc2ctPnNpZ25lckluZm9zW2ldLmhh c2gpCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXNoIGFs Z29yaXRobSBmb3Igc2lnbmVyICVkIChPSUQgJXMpIAo+PiBub3QgbG9hZGVkIiwgaSwgYWxnb19v aWQpOwo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKPj4gKyAgICAgICAg fQo+PiArCj4+ICsgICAgICBzaV9zaWdfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgic2lnbmVySW5m b3MuPyVkLnNpZ25hdHVyZSIsIGkgKyAKPj4gMSk7Cj4+ICsgICAgICBpZiAoIXNpX3NpZ19wYXRo KQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX01FTU9SWSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90 IGFsbG9jYXRlIHBhdGggZm9yIHNpZ25lciAlZCdzIAo+PiBzaWduYXR1cmUgcGFyc2luZyBwYXRo IiwgaSk7Cj4+ICsgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOwo+PiArICAgICAg ICB9Cj4+ICsKPj4gKyAgICAgIHJlc3VsdF9idWYgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3Jl YWQgKHNpZ25lZF9wYXJ0LCAKPj4gc2lfc2lnX3BhdGgsCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmF0dXJlIGRhdGEiLCAKPj4gJnJlc3Vs dF9zaXplKTsKPj4gKyAgICAgIGdydWJfZnJlZSAoc2lfc2lnX3BhdGgpOwo+PiArCj4+ICsgICAg ICBpZiAoIXJlc3VsdF9idWYpCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgICBlcnIgPSBncnVi X2Vycm5vOwo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKPj4gKyAgICAg ICAgfQo+PiArCj4+ICsgICAgICBnY3J5X2VyciA9IGdjcnlfbXBpX3NjYW4gKCYobXNnLT5zaWdu ZXJJbmZvc1tpXS5zaWdfbXBpKSwgCj4+IEdDUllNUElfRk1UX1VTRywKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0X2J1ZiwgcmVzdWx0X3NpemUsIE5VTEwpOwo+PiAr Cj4+ICsgICAgICBncnViX2ZyZWUgKHJlc3VsdF9idWYpOwo+PiArCj4+ICsgICAgICBpZiAoZ2Ny eV9lcnIgIT0gR1BHX0VSUl9OT19FUlJPUikKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIkVycm9yIGxvYWRpbmcgc2lnbmF0dXJlICVkIGludG8gTVBJIAo+PiBz dHJ1Y3R1cmU6ICVkIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBnY3J5X2Vy cik7Cj4+ICsgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgIC8qCj4+ICsgICAgICAgKiB1c2UgbXNnLT5zaWduZXJJbmZvX2NvdW50 IHRvIHRyYWNrIGZ1bGx5IHBvcHVsYXRlZCAKPj4gc2lnbmVySW5mb3Mgc28gd2UKPj4gKyAgICAg ICAqIGtub3cgaG93IG1hbnkgd2UgbmVlZCB0byBjbGVhbiB1cAo+PiArICAgICAgICovCj4+ICsg ICAgICBtc2ctPnNpZ25lckluZm9fY291bnQrKzsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4g KyAgICogRmluYWwgY29uc2lzdGVuY3kgY2hlY2sgb2Ygc2lnbmVySW5mby4qLmRpZ2VzdEFsZ29y aXRobSB2cwo+PiArICAgKiBkaWdlc3RBbGdvcml0aG1zLiouYWxnb3JpdGhtLiBBbiBhbGdvcml0 aG0gbXVzdCBiZSBwcmVzZW50IGluIAo+PiBib3RoCj4+ICsgICAqIGRpZ2VzdEFsZ29yaXRobXMg YW5kIHNpZ25lckluZm8gb3IgaW4gbmVpdGhlci4gV2UgaGF2ZSBhbHJlYWR5IAo+PiBjaGVja2Vk Cj4+ICsgICAqIGZvciBhbiBhbGdvcml0aG0gaW4gc2lnbmVySW5mbyB0aGF0IGlzIG5vdCBpbiBk aWdlc3RBbGdvcml0aG1zLCAKPj4gaGVyZSB3ZQo+PiArICAgKiBjaGVjayBmb3IgYWxnb3JpdGht cyBpbiBkaWdlc3RBbGdvcml0aG1zIGJ1dCBub3QgaW4gc2lnbmVySW5mb3MuCj4+ICsgICAqLwo+ PiArICBpZiAoc2hhNTEyX2luX2RhICYmICFzaGE1MTJfaW5fc2kpCj4+ICsgICAgewo+PiArICAg ICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKPj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICJTSEEtNTEyIHNwZWNpZmllZCBpbiBEaWdlc3RBbGdvcml0aG1zIGJ1 dCAKPj4gZGlkIG5vdCAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAiYXBwZWFyIGluIFNp Z25lckluZm9zIik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7Cj4+ICsgICAg fQo+PiArCj4+ICsgIGlmIChzaGEyNTZfaW5fZGEgJiYgIXNoYTI1Nl9pbl9zaSkKPj4gKyAgICB7 Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIlNIQS0yNTYgc3BlY2lmaWVkIGluIERpZ2VzdEFsZ29y aXRobXMgYnV0IAo+PiBkaWQgbm90ICIKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJhcHBl YXIgaW4gU2lnbmVySW5mb3MiKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmc2lnbmVkX3BhcnQp Owo+PiArICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKwo+PiArY2xlYW51cF9zaWduZXJJbmZv czoKPj4gKyAgZm9yIChpID0gMDsgaSA8IG1zZy0+c2lnbmVySW5mb19jb3VudDsgaSsrKQo+PiAr ICAgIGdjcnlfbXBpX3JlbGVhc2UgKG1zZy0+c2lnbmVySW5mb3NbaV0uc2lnX21waSk7Cj4+ICsg IGdydWJfZnJlZSAobXNnLT5zaWduZXJJbmZvcyk7Cj4+ICtjbGVhbnVwX3NpZ25lZF9wYXJ0Ogo+ PiArICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZzaWduZWRfcGFydCk7Cj4+ICsgIHJldHVybiBl cnI7Cj4+ICt9Cj4+ICsKPj4gK2dydWJfZXJyX3QKPj4gK3BhcnNlX3BrY3M3X3NpZ25lZERhdGEg KGNvbnN0IHZvaWQgKnNpZ2J1ZiwgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLCAKPj4gc3RydWN0IHBr Y3M3X3NpZ25lZERhdGEgKm1zZykKPj4gK3sKPj4gKyAgaW50IHJlczsKPj4gKyAgYXNuMV9ub2Rl IGNvbnRlbnRfaW5mbzsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05FOwo+PiAr ICBjaGFyIGNvbnRlbnRfb2lkW01BWF9PSURfTEVOXTsKPj4gKyAgZ3J1Yl91aW50OF90ICpjb250 ZW50Owo+PiArICBpbnQgY29udGVudF9zaXplOwo+PiArICBpbnQgY29udGVudF9vaWRfc2l6ZSA9 IHNpemVvZiAoY29udGVudF9vaWQpOwo+PiArICBpbnQgc2l6ZTsKPj4gKwo+PiArICBpZiAoZGF0 YV9zaXplID4gR1JVQl9JTlRfTUFYKQo+PiArICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9PVVRfT0ZfUkFOR0UsICJDYW5ub3QgcGFyc2UgYSBQS0NTIzcgCj4+IG1lc3NhZ2UgIgo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aGVyZSBkYXRh IHNpemUgPiAKPj4gSU5UX01BWCIpOwo+PiArICBzaXplID0gKGludCkgZGF0YV9zaXplOwo+PiAr Cj4+ICsgIHJlcyA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKF9nbnV0bHNfcGtpeF9hc24sIAo+PiAi UEtJWDEucGtjcy03LUNvbnRlbnRJbmZvIiwgJmNvbnRlbnRfaW5mbyk7Cj4+ICsgIGlmIChyZXMg IT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJDb3Vs ZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgUEtDUyM3IAo+PiBkYXRhOiAlcyIsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzKSk7Cj4+ICsgICAg fQo+PiArCj4+ICsgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJmNvbnRlbnRfaW5mbywgc2ln YnVmLCAmc2l6ZSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX0RFQ09ERV9G TEFHX1NUUklDVF9ERVIgfCAKPj4gQVNOMV9ERUNPREVfRkxBR19BTExPV19QQURESU5HLAo+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfZXJyb3IpOwo+PiArICBpZiAocmVzICE9 IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfU0lHTkFUVVJFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGRl Y29kaW5nIFBLQ1MjNyBtZXNzYWdlIERFUjogJXMiLCAKPj4gYXNuMV9lcnJvcik7Cj4+ICsgICAg ICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIC8qCj4+ICsgICAqIENvbnRlbnRJ bmZvIDo6PSBTRVFVRU5DRSB7Cj4+ICsgICAqICAgICBjb250ZW50VHlwZSBDb250ZW50VHlwZSwK Pj4gKyAgICogICAgIGNvbnRlbnQgWzBdIEVYUExJQ0lUIEFOWSBERUZJTkVEIEJZIGNvbnRlbnRU eXBlIH0KPj4gKyAgICoKPj4gKyAgICogQ29udGVudFR5cGUgOjo9IE9CSkVDVCBJREVOVElGSUVS Cj4+ICsgICAqLwo+PiArICByZXMgPSBhc24xX3JlYWRfdmFsdWUgKGNvbnRlbnRfaW5mbywgImNv bnRlbnRUeXBlIiwgY29udGVudF9vaWQsIAo+PiAmY29udGVudF9vaWRfc2l6ZSk7Cj4+ICsgIGlm IChyZXMgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJFcnJvciByZWFkaW5nIFBLQ1MjNyAKPj4gY29u dGVudCB0eXBlOiAlcyIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9y IChyZXMpKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyog T0lEIGZvciBTaWduZWREYXRhIGRlZmluZWQgaW4gNS4xICovCj4+ICsgIGlmIChncnViX3N0cm5j bXAgKHNpZ25lZERhdGFfb2lkLCBjb250ZW50X29pZCwgY29udGVudF9vaWRfc2l6ZSkgIT0gCj4+ IDApCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJ R05BVFVSRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGNvbnRlbnQg dHlwZSBpbiBQS0NTIzcgbWVzc2FnZTogCj4+IE9JRCAlcyIsIGNvbnRlbnRfb2lkKTsKPj4gKyAg ICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgY29udGVudCA9IGdydWJfYXNu MV9hbGxvY2F0ZV9hbmRfcmVhZCAoY29udGVudF9pbmZvLCAiY29udGVudCIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJQS0NTIzcgbWVzc2FnZSBjb250ZW50 IiwgCj4+ICZjb250ZW50X3NpemUpOwo+PiArICBpZiAoIWNvbnRlbnQpCj4+ICsgICAgewo+PiAr ICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9 Cj4+ICsKPj4gKyAgZXJyID0gcHJvY2Vzc19jb250ZW50IChjb250ZW50LCBjb250ZW50X3NpemUs IG1zZyk7Cj4+ICsgIGdydWJfZnJlZSAoY29udGVudCk7Cj4+ICsKPj4gK2NsZWFudXA6Cj4+ICsg IGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNvbnRlbnRfaW5mbyk7Cj4+ICsgIHJldHVybiBlcnI7 Cj4+ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lh dGVkIHdpdGggdGhlIFBLQ1MjNyBtZXNzYWdlLgo+PiArICogSWYgdGhlIGNhbGxlciBkeW5hbWlj YWxseSBhbGxvY2F0ZWQgdGhlIG1lc3NhZ2UsIGl0IG11c3QgZnJlZSBpdC4KPj4gKyAqLwo+PiAr dm9pZAo+PiArcGtjczdfc2lnbmVkRGF0YV9yZWxlYXNlIChzdHJ1Y3QgcGtjczdfc2lnbmVkRGF0 YSAqbXNnKQo+PiArewo+PiArICBncnViX3NzaXplX3QgaTsKPj4gKwo+PiArICBmb3IgKGkgPSAw OyBpIDwgbXNnLT5zaWduZXJJbmZvX2NvdW50OyBpKyspCj4+ICsgICAgewo+PiArICAgICAgZ2Ny eV9tcGlfcmVsZWFzZSAobXNnLT5zaWduZXJJbmZvc1tpXS5zaWdfbXBpKTsKPj4gKyAgICB9Cj4+ ICsgIGdydWJfZnJlZSAobXNnLT5zaWduZXJJbmZvcyk7Cj4+ICt9Cj4+IGRpZmYgLS1naXQgYS9n cnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jIAo+PiBiL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4gaW5kZXgg MDAwMDAwMDAwLi5lYjlhMWNhMGYKPj4gLS0tIC9kZXYvbnVsbAo+PiArKysgYi9ncnViLWNvcmUv Y29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jCj4+IEBAIC0wLDAgKzEsOTgxIEBACj4+ICsvKgo+ PiArICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKPj4gKyAqICBDb3B5cmln aHQgKEMpIDIwMjAsIDIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCj4+ICsgKiAg Q29weXJpZ2h0IChDKSAyMDIwLCAyMDIyIElCTSBDb3Jwb3JhdGlvbgo+PiArICoKPj4gKyAqICBH UlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKPj4gKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCAKPj4gYnkKPj4gKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgo+PiArICogIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4+ICsgKgo+PiArICogIEdSVUIgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPj4gKyAqICBidXQg V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv Zgo+PiArICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRS4gIFNlZSB0aGUKPj4gKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+PiArICoKPj4gKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+PiArICogIGFsb25nIHdpdGggR1JV Qi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPj4gKyAqLwo+ PiArCj4+ICsjaW5jbHVkZSA8Z3J1Yi9saWJ0YXNuMS5oPgo+PiArI2luY2x1ZGUgPGdydWIvdHlw ZXMuaD4KPj4gKyNpbmNsdWRlIDxncnViL2Vyci5oPgo+PiArI2luY2x1ZGUgPGdydWIvbW0uaD4K Pj4gKyNpbmNsdWRlIDxncnViL2NyeXB0by5oPgo+PiArI2luY2x1ZGUgPGdydWIvbWlzYy5oPgo+ PiArI2luY2x1ZGUgPGdydWIvZ2NyeXB0L2djcnlwdC5oPgo+PiArCj4+ICsjaW5jbHVkZSAiYXBw ZW5kZWRzaWcuaCIKPj4gKwo+PiArc3RhdGljIGNoYXIgYXNuMV9lcnJvcltBU04xX01BWF9FUlJP Ul9ERVNDUklQVElPTl9TSVpFXTsKPj4gKwo+PiArLyoKPj4gKyAqIFJGQyAzMjc5IDIuMy4xICBS U0EgS2V5cwo+PiArICovCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqcnNhRW5jcnlwdGlvbl9vaWQg PSAiMS4yLjg0MC4xMTM1NDkuMS4xLjEiOwo+PiArCj4+ICsvKgo+PiArICogUkZDIDUyODAgQXBw ZW5kaXggQQo+PiArICovCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqY29tbW9uTmFtZV9vaWQgPSAi Mi41LjQuMyI7Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNTI4MCA0LjIuMS4zIEtleSBVc2FnZQo+ PiArICovCj4+ICtzdGF0aWMgY29uc3QgY2hhciAqa2V5VXNhZ2Vfb2lkID0gIjIuNS4yOS4xNSI7 Cj4+ICsKPj4gK3N0YXRpYyBjb25zdCBncnViX3VpbnQ4X3QgZGlnaXRhbFNpZ25hdHVyZVVzYWdl ID0gMHg4MDsKPj4gKwo+PiArLyoKPj4gKyAqIFJGQyA1MjgwIDQuMi4xLjkgQmFzaWMgQ29uc3Ry YWludHMKPj4gKyAqLwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmJhc2ljQ29uc3RyYWludHNfb2lk ID0gIjIuNS4yOS4xOSI7Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNTI4MCA0LjIuMS4xMiBFeHRl bmRlZCBLZXkgVXNhZ2UKPj4gKyAqLwo+PiArc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVuZGVkS2V5 VXNhZ2Vfb2lkID0gIjIuNS4yOS4zNyI7Cj4+ICtzdGF0aWMgY29uc3QgY2hhciAqY29kZVNpZ25p bmdVc2FnZV9vaWQgPSAiMS4zLjYuMS41LjUuNy4zLjMiOwo+PiArCj4+ICsvKgo+PiArICogUkZD IDMyNzkgMi4zLjEKPj4gKyAqCj4+ICsgKiAgVGhlIFJTQSBwdWJsaWMga2V5IE1VU1QgYmUgZW5j b2RlZCB1c2luZyB0aGUgQVNOLjEgdHlwZSAKPj4gUlNBUHVibGljS2V5Ogo+PiArICoKPj4gKyAq ICAgICBSU0FQdWJsaWNLZXkgOjo9IFNFUVVFTkNFIHsKPj4gKyAqICAgICAgICBtb2R1bHVzICAg ICAgICAgICAgSU5URUdFUiwgICAgLS0gbgo+PiArICogICAgICAgIHB1YmxpY0V4cG9uZW50ICAg ICBJTlRFR0VSICB9ICAtLSBlCj4+ICsgKgo+PiArICogIHdoZXJlIG1vZHVsdXMgaXMgdGhlIG1v ZHVsdXMgbiwgYW5kIHB1YmxpY0V4cG9uZW50IGlzIHRoZSBwdWJsaWMKPj4gKyAqICBleHBvbmVu dCBlLgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZ3J1Yl9wYXJzZV9yc2FfcHVi a2V5IChncnViX3VpbnQ4X3QgKmRlciwgaW50IGRlcnNpemUsIHN0cnVjdCAKPj4geDUwOV9jZXJ0 aWZpY2F0ZSAqY2VydGlmaWNhdGUpCj4+ICt7Cj4+ICsgIGludCByZXN1bHQ7Cj4+ICsgIGFzbjFf bm9kZSBzcGsgPSBOVUxMOwo+PiArICBncnViX3VpbnQ4X3QgKm1fZGF0YSwgKmVfZGF0YTsKPj4g KyAgaW50IG1fc2l6ZSwgZV9zaXplOwo+PiArICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05P TkU7Cj4+ICsgIGdjcnlfZXJyb3JfdCBnY3J5X2VycjsKPj4gKwo+PiArICByZXN1bHQgPSBhc24x X2NyZWF0ZV9lbGVtZW50IChfZ251dGxzX2dudXRsc19hc24sIAo+PiAiR05VVExTLlJTQVB1Ymxp Y0tleSIsICZzcGspOwo+PiArICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7 Cj4+ICsgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGNyZWF0ZSBzdG9yYWdlIGZvciBwdWJs aWMga2V5IEFTTi4xIAo+PiBkYXRhIik7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJlc3VsdCA9IGFz bjFfZGVyX2RlY29kaW5nMiAoJnNwaywgZGVyLCAmZGVyc2l6ZSwgCj4+IEFTTjFfREVDT0RFX0ZM QUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9G SUxFX1RZUEUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IGRlY29kZSBjZXJ0 aWZpY2F0ZSBwdWJsaWMga2V5IERFUjogCj4+ICVzIiwgYXNuMV9lcnJvcik7Cj4+ICsgICAgICBn b3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIG1fZGF0YSA9IGdydWJfYXNuMV9hbGxv Y2F0ZV9hbmRfcmVhZCAoc3BrLCAibW9kdWx1cyIsICJSU0EgCj4+IG1vZHVsdXMiLCAmbV9zaXpl KTsKPj4gKyAgaWYgKCFtX2RhdGEpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJu bzsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgZV9kYXRhID0g Z3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChzcGssICJwdWJsaWNFeHBvbmVudCIsCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJTQSBwdWJsaWMgZXhwb25l bnQiLCAKPj4gJmVfc2l6ZSk7Cj4+ICsgIGlmICghZV9kYXRhKQo+PiArICAgIHsKPj4gKyAgICAg IGVyciA9IGdydWJfZXJybm87Cj4+ICsgICAgICBnb3RvIGNsZWFudXBfbV9kYXRhOwo+PiArICAg IH0KPj4gKwo+PiArICAvKgo+PiArICAgKiBjb252ZXJ0IG0sIGUgdG8gbXBpCj4+ICsgICAqCj4+ ICsgICAqIG5zY2FubmVkIGlzIG5vdCBzZXQgZm9yIEZNVF9VU0csIGl0J3Mgb25seSBzZXQgZm9y IEZNVF9QR1AsCj4+ICsgICAqIHNvIHdlIGNhbid0IHZlcmlmeSBpdAo+PiArICAgKi8KPj4gKyAg Z2NyeV9lcnIgPSBnY3J5X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1waXNbMF0sIEdDUllNUElf Rk1UX1VTRywgCj4+IG1fZGF0YSwgbV9zaXplLCBOVUxMKTsKPj4gKyAgaWYgKGdjcnlfZXJyICE9 IEdQR19FUlJfTk9fRVJST1IpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJv ciBsb2FkaW5nIFJTQSBtb2R1bHVzIGludG8gTVBJIAo+PiBzdHJ1Y3R1cmU6ICVkIiwgZ2NyeV9l cnIpOwo+PiArICAgICAgZ290byBjbGVhbnVwX2VfZGF0YTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg Z2NyeV9lcnIgPSBnY3J5X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1waXNbMV0sIEdDUllNUElf Rk1UX1VTRywgCj4+IGVfZGF0YSwgZV9zaXplLCBOVUxMKTsKPj4gKyAgaWYgKGdjcnlfZXJyICE9 IEdQR19FUlJfTk9fRVJST1IpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJv ciBsb2FkaW5nIFJTQSBleHBvbmVudCBpbnRvIE1QSSAKPj4gc3RydWN0dXJlOiAlZCIsIGdjcnlf ZXJyKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cF9tX21waTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg Z3J1Yl9mcmVlIChlX2RhdGEpOwo+PiArICBncnViX2ZyZWUgKG1fZGF0YSk7Cj4+ICsgIGFzbjFf ZGVsZXRlX3N0cnVjdHVyZSAoJnNwayk7Cj4+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+PiAr Cj4+ICtjbGVhbnVwX21fbXBpOgo+PiArICBnY3J5X21waV9yZWxlYXNlIChjZXJ0aWZpY2F0ZS0+ bXBpc1swXSk7Cj4+ICtjbGVhbnVwX2VfZGF0YToKPj4gKyAgZ3J1Yl9mcmVlIChlX2RhdGEpOwo+ PiArY2xlYW51cF9tX2RhdGE6Cj4+ICsgIGdydWJfZnJlZSAobV9kYXRhKTsKPj4gK2NsZWFudXA6 Cj4+ICsgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnNwayk7Cj4+ICsgIHJldHVybiBlcnI7Cj4+ ICt9Cj4+ICsKPj4gKy8qCj4+ICsgKiBSRkMgNTI4MDoKPj4gKyAqICAgU3ViamVjdFB1YmxpY0tl eUluZm8gIDo6PSAgU0VRVUVOQ0UgIHsKPj4gKyAqICAgICAgIGFsZ29yaXRobSAgICAgICAgICAg IEFsZ29yaXRobUlkZW50aWZpZXIsCj4+ICsgKiAgICAgICBzdWJqZWN0UHVibGljS2V5ICAgICBC SVQgU1RSSU5HICB9Cj4+ICsgKgo+PiArICogQWxnb3JpdGhtSWRlbnRpZmllcnMgY29tZSBmcm9t IFJGQyAzMjc5LCB3ZSBhcmUgbm90IHN0cmljdGx5IAo+PiBjb21waWxhbnQgYXMgd2UKPj4gKyAq IG9ubHkgc3VwcG9ydCBSU0EgRW5jcnlwdGlvbi4KPj4gKyAqLwo+PiArCj4+ICtzdGF0aWMgZ3J1 Yl9lcnJfdAo+PiArZ3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChhc24xX25vZGUg YXNuLCBzdHJ1Y3QgCj4+IHg1MDlfY2VydGlmaWNhdGUgKnJlc3VsdHMpCj4+ICt7Cj4+ICsgIGlu dCByZXN1bHQ7Cj4+ICsgIGdydWJfZXJyX3QgZXJyOwo+PiArICBjb25zdCBjaGFyICphbGdvX25h bWUgPQo+PiArICAgICAgICAgICJ0YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mby5h bGdvcml0aG0uYWxnb3JpdGhtIjsKPj4gKyAgY29uc3QgY2hhciAqcGFyYW1zX25hbWUgPQo+PiAr ICAgICAgICAgICJ0YnNDZXJ0aWZpY2F0ZS5zdWJqZWN0UHVibGljS2V5SW5mby5hbGdvcml0aG0u cGFyYW1ldGVycyI7Cj4+ICsgIGNvbnN0IGNoYXIgKnBrX25hbWUgPSAKPj4gInRic0NlcnRpZmlj YXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLnN1YmplY3RQdWJsaWNLZXkiOwo+PiArICBjaGFyIGFs Z29fb2lkW01BWF9PSURfTEVOXTsKPj4gKyAgaW50IGFsZ29fc2l6ZSA9IHNpemVvZiAoYWxnb19v aWQpOwo+PiArICBjaGFyIHBhcmFtc192YWx1ZVsyXTsKPj4gKyAgaW50IHBhcmFtc19zaXplID0g c2l6ZW9mIChwYXJhbXNfdmFsdWUpOwo+PiArICBncnViX3VpbnQ4X3QgKmtleV9kYXRhID0gTlVM TDsKPj4gKyAgaW50IGtleV9zaXplID0gMDsKPj4gKyAgdW5zaWduZWQgaW50IGtleV90eXBlOwo+ PiArCj4+ICsgIC8qIGFsZ29yaXRobTogc2VlIG5vdGVzIGZvciByc2FFbmNyeXB0aW9uX29pZCAq Lwo+PiArICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgYWxnb19uYW1lLCBhbGdvX29p ZCwgJmFsZ29fc2l6ZSk7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAg IHsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi RXJyb3IgcmVhZGluZyB4NTA5IAo+PiBwdWJsaWMga2V5IGFsZ29yaXRobTogJXMiLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+PiArICAgIH0K Pj4gKwo+PiArICBpZiAoZ3J1Yl9zdHJuY21wIChhbGdvX29pZCwgcnNhRW5jcnlwdGlvbl9vaWQs IHNpemVvZiAKPj4gKHJzYUVuY3J5cHRpb25fb2lkKSkgIT0gMCkKPj4gKyAgICB7Cj4+ICsgICAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKPj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAiVW5zdXBwb3J0ZWQgeDUwOSBwdWJsaWMga2V5IGFsZ29y aXRobTogJXMiLCAKPj4gYWxnb19vaWQpOwo+PiArICAgIH0KPj4gKwo+PiArICAvKgo+PiArICAg KiBSRkMgMzI3OSAyLjMuMQo+PiArICAgKiBUaGUgcnNhRW5jcnlwdGlvbiBPSUQgaXMgaW50ZW5k ZWQgdG8gYmUgdXNlZCBpbiB0aGUgYWxnb3JpdGhtIAo+PiBmaWVsZAo+PiArICAgKiBvZiBhIHZh bHVlIG9mIHR5cGUgQWxnb3JpdGhtSWRlbnRpZmllci4gIFRoZSBwYXJhbWV0ZXJzIGZpZWxkIAo+ PiBNVVNUCj4+ICsgICAqIGhhdmUgQVNOLjEgdHlwZSBOVUxMIGZvciB0aGlzIGFsZ29yaXRobSBp ZGVudGlmaWVyLgo+PiArICAgKi8KPj4gKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChhc24s IHBhcmFtc19uYW1lLCBwYXJhbXNfdmFsdWUsIAo+PiAmcGFyYW1zX3NpemUpOwo+PiArICBpZiAo cmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIkVycm9yIHJlYWRpbmcgeDUwOSAKPj4gcHVi bGljIGtleSBwYXJhbWV0ZXJzOiAlcyIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgYXNu MV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmIChwYXJhbXNfdmFs dWVbMF0gIT0gQVNOMV9UQUdfTlVMTCkKPj4gKyAgICB7Cj4+ICsgICAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAiSW52YWxpZCB4NTA5IHB1YmxpYyBrZXkgcGFyYW1ldGVyczogCj4+IGV4cGVjdGVkIE5VTEwi KTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4gKyAgICogUkZDIDMyNzkgMi4zLjE6ICBUaGUg REVSIGVuY29kZWQgUlNBUHVibGljS2V5IGlzIHRoZSB2YWx1ZSBvZiAKPj4gdGhlIEJJVAo+PiAr ICAgKiBTVFJJTkcgc3ViamVjdFB1YmxpY0tleS4KPj4gKyAgICovCj4+ICsgIHJlc3VsdCA9IGFz bjFfcmVhZF92YWx1ZV90eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZrZXlfc2l6ZSwgCj4+ICZr ZXlfdHlwZSk7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9NRU1fRVJST1IpCj4+ICsgICAgewo+ PiArICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJFcnJv ciByZWFkaW5nIHNpemUgCj4+IG9mIHg1MDkgcHVibGljIGtleTogJXMiLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+PiArICAgIH0KPj4gKyAg aWYgKGtleV90eXBlICE9IEFTTjFfRVRZUEVfQklUX1NUUklORykKPj4gKyAgICB7Cj4+ICsgICAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIlVuZXhwZWN0ZWQg QVNOLjEgCj4+IHR5cGUgd2hlbiByZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgiLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgIGtleV90eXBlKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyog bGVuZ3RoIGlzIGluIGJpdHMgKi8KPj4gKyAga2V5X3NpemUgPSAoa2V5X3NpemUgKyA3KSAvIDg7 Cj4+ICsKPj4gKyAga2V5X2RhdGEgPSBncnViX21hbGxvYyAoa2V5X3NpemUpOwo+PiArICBpZiAo IWtleV9kYXRhKQo+PiArICAgIHsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9PVVRfT0ZfTUVNT1JZLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJPdXQgb2YgbWVt b3J5IGZvciB4NTA5IHB1YmxpYyBrZXkiKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgcmVzdWx0ID0g YXNuMV9yZWFkX3ZhbHVlIChhc24sIHBrX25hbWUsIGtleV9kYXRhLCAma2V5X3NpemUpOwo+PiAr ICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBncnViX2Zy ZWUgKGtleV9kYXRhKTsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciByZWFkaW5nIHB1 YmxpYyBrZXkgZGF0YSIpOwo+PiArICAgIH0KPj4gKyAga2V5X3NpemUgPSAoa2V5X3NpemUgKyA3 KSAvIDg7Cj4+ICsKPj4gKyAgZXJyID0gZ3J1Yl9wYXJzZV9yc2FfcHVia2V5IChrZXlfZGF0YSwg a2V5X3NpemUsIHJlc3VsdHMpOwo+PiArICBncnViX2ZyZWUgKGtleV9kYXRhKTsKPj4gKwo+PiAr ICByZXR1cm4gZXJyOwo+PiArfQo+PiArCj4+ICsvKiBEZWNvZGUgYSBzdHJpbmcgYXMgZGVmaW5l ZCBpbiBBcHBlbmRpeCBBICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArZGVjb2RlX3N0cmlu ZyAoY2hhciAqZGVyLCBpbnQgZGVyX3NpemUsIGNoYXIgKipzdHJpbmcsIGdydWJfc2l6ZV90IAo+ PiAqc3RyaW5nX3NpemUpCj4+ICt7Cj4+ICsgIGFzbjFfbm9kZSBzdHJhc247Cj4+ICsgIGludCBy ZXN1bHQ7Cj4+ICsgIGNoYXIgKmNob2ljZTsKPj4gKyAgaW50IGNob2ljZV9zaXplID0gMDsKPj4g KyAgaW50IHRtcF9zaXplID0gMDsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05F Owo+PiArCj4+ICsgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKF9nbnV0bHNfcGtpeF9h c24sIAo+PiAiUEtJWDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7Cj4+ICsgIGlmIChyZXN1 bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9y IChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJD b3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgCj4+IGNlcnRpZmljYXRlOiAlcyIs Cj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ ICsgICAgfQo+PiArCj4+ICsgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnN0cmFzbiwg ZGVyLCAmZGVyX3NpemUsIAo+PiBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJy b3IpOwo+PiArICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAg ICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAo+PiArICAgICAgICAg ICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBwYXJzZSBERVIgZm9yIERpcmVjdG9yeVN0cmluZzog Cj4+ICVzIiwgYXNuMV9lcnJvcik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+ PiArCj4+ICsgIGNob2ljZSA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoc3RyYXNuLCAi IiwgIkRpcmVjdG9yeVN0cmluZyAKPj4gY2hvaWNlIiwgJmNob2ljZV9zaXplKTsKPj4gKyAgaWYg KCFjaG9pY2UpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKPj4gKyAgICAg IGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgaWYgKGdydWJfc3RybmNtcCAoInV0 ZjhTdHJpbmciLCBjaG9pY2UsIGNob2ljZV9zaXplKSA9PSAwKQo+PiArICAgIHsKPj4gKyAgICAg IHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoc3RyYXNuLCAidXRmOFN0cmluZyIsIE5VTEwsIAo+ PiAmdG1wX3NpemUpOwo+PiArICAgICAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKPj4g KyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9G SUxFX1RZUEUsICJFcnJvciByZWFkaW5nIAo+PiBzaXplIG9mIFVURi04IHN0cmluZzogJXMiLAo+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+ PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9 Cj4+ICsgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoInByaW50YWJsZVN0cmluZyIsIGNob2ljZSwg Y2hvaWNlX3NpemUpID09IAo+PiAwKQo+PiArICAgIHsKPj4gKyAgICAgIHJlc3VsdCA9IGFzbjFf cmVhZF92YWx1ZSAoc3RyYXNuLCAicHJpbnRhYmxlU3RyaW5nIiwgTlVMTCwgCj4+ICZ0bXBfc2l6 ZSk7Cj4+ICsgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfTUVNX0VSUk9SKQo+PiArICAgICAgICB7 Cj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg IkVycm9yIHJlYWRpbmcgCj4+IHNpemUgb2YgVVRGLTggc3RyaW5nOiAlcyIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsgICAgICAg ICAgZ290byBjbGVhbnVwX2Nob2ljZTsKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKyAgZWxz ZQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBM RU1FTlRFRF9ZRVQsICJPbmx5IFVURi04IGFuZCAKPj4gcHJpbnRhYmxlIERpcmVjdG9yeVN0cmlu Z3MgYXJlIHN1cHBvcnRlZCwgZ290ICVzIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGNo b2ljZSk7Cj4+ICsgICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOwo+PiArICAgIH0KPj4gKwo+PiAr ICAvKiByZWFkIHNpemUgZG9lcyBub3QgaW5jbHVkZSB0cmFpbGluZyBudWxsICovCj4+ICsgIHRt cF9zaXplKys7Cj4+ICsKPj4gKyAgKnN0cmluZyA9IGdydWJfbWFsbG9jICh0bXBfc2l6ZSk7Cj4+ ICsgIGlmICghKnN0cmluZykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkNhbm5v dCBhbGxvY2F0ZSBtZW1vcnkgZm9yIERpcmVjdG9yeVN0cmluZyAKPj4gY29udGVudHMiKTsKPj4g KyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJlc3VsdCA9 IGFzbjFfcmVhZF92YWx1ZSAoc3RyYXNuLCBjaG9pY2UsICpzdHJpbmcsICZ0bXBfc2l6ZSk7Cj4+ ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIGVyciA9 IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJFcnJvciByZWFkaW5nIG91dCAl cyAKPj4gaW4gRGlyZWN0b3J5U3RyaW5nOiAlcyIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICBjaG9pY2UsIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+PiArICAgICAgZ3J1Yl9mcmVlICgq c3RyaW5nKTsKPiAKPiAqc3RyaW5nID0gTlVMTDsKPiAKPj4gKyAgICAgIGdvdG8gY2xlYW51cF9j aG9pY2U7Cj4+ICsgICAgfQo+PiArICAqc3RyaW5nX3NpemUgPSB0bXBfc2l6ZSArIDE7Cj4+ICsg ICgqc3RyaW5nKVt0bXBfc2l6ZV0gPSAnXDAnOwo+PiArCj4+ICtjbGVhbnVwX2Nob2ljZToKPj4g KyAgZ3J1Yl9mcmVlIChjaG9pY2UpOwo+PiArY2xlYW51cDoKPj4gKyAgYXNuMV9kZWxldGVfc3Ry dWN0dXJlICgmc3RyYXNuKTsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArLyoKPj4g KyAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7Cj4+ICsgKiAgICAgICB2ZXJzaW9u ICAgICAgICAgWzBdICBFWFBMSUNJVCBWZXJzaW9uIERFRkFVTFQgdjEsCj4+ICsgKiAuLi4KPj4g KyAqCj4+ICsgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIgIHsgIHYxKDApLCB2MigxKSwgdjMoMikg IH0KPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK2NoZWNrX3ZlcnNpb24gKGFzbjFf bm9kZSBjZXJ0aWZpY2F0ZSkKPj4gK3sKPj4gKyAgaW50IHJjOwo+PiArICBjb25zdCBjaGFyICpu YW1lID0gInRic0NlcnRpZmljYXRlLnZlcnNpb24iOwo+PiArICBncnViX3VpbnQ4X3QgdmVyc2lv bjsKPj4gKyAgaW50IGxlbiA9IHNpemVvZiAodmVyc2lvbik7Cj4+ICsKPj4gKyAgcmMgPSBhc24x X3JlYWRfdmFsdWUgKGNlcnRpZmljYXRlLCBuYW1lLCAmdmVyc2lvbiwgJmxlbik7Cj4+ICsKPj4g KyAgLyogcmVxdWlyZSB2ZXJzaW9uIDMgKi8KPj4gKyAgaWYgKHJjICE9IEFTTjFfU1VDQ0VTUyB8 fCBsZW4gIT0gMSkKPj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHJlYWRpbmcgY2VydGlmaWNh dGUgdmVyc2lvbiIpOwo+PiArCj4+ICsgIGlmICh2ZXJzaW9uICE9IDB4MDIpCj4+ICsgICAgcmV0 dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJJbnZhbGlkIHg1MDkgCj4+ IGNlcnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVkIHYzICgweDAyKSwgZ290IDB4JTAyeCIsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHZlcnNpb24pOwo+PiArCj4+ICsgIHJldHVybiBHUlVC X0VSUl9OT05FOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogVGhpcyBpcyBhbiBYLjUwMSBOYW1l LCB3aGljaCBpcyBjb21wbGV4Lgo+PiArICoKPj4gKyAqIEZvciBzaW1wbGljaXR5LCB3ZSBleHRy YWN0IG9ubHkgdGhlIENOLgo+PiArICovCj4+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+PiArcmVhZF9u YW1lIChhc24xX25vZGUgYXNuLCBjb25zdCBjaGFyICpuYW1lX3BhdGgsIGNoYXIgKipuYW1lLCAK Pj4gZ3J1Yl9zaXplX3QgKm5hbWVfc2l6ZSkKPj4gK3sKPj4gKyAgaW50IHNlcV9jb21wb25lbnRz LCBzZXRfY29tcG9uZW50czsKPj4gKyAgaW50IHJlc3VsdDsKPj4gKyAgaW50IGksIGo7Cj4+ICsg IGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgsICp0eXBlX3BhdGgsICp2YWxfcGF0aDsKPj4gKyAg Y2hhciB0eXBlW01BWF9PSURfTEVOXTsKPj4gKyAgaW50IHR5cGVfbGVuID0gc2l6ZW9mICh0eXBl KTsKPj4gKyAgaW50IHN0cmluZ19zaXplID0gMDsKPj4gKyAgY2hhciAqc3RyaW5nX2RlcjsKPj4g KyAgZ3J1Yl9lcnJfdCBlcnI7Cj4+ICsKPj4gKyAgKm5hbWUgPSBOVUxMOwo+PiArCj4+ICsgIHRv cF9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCIlcy5yZG5TZXF1ZW5jZSIsIG5hbWVfcGF0aCk7Cj4+ ICsgIGlmICghdG9wX3BhdGgpCj4+ICsgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9NRU1PUlksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgYWxsb2Nh dGUgbWVtb3J5IGZvciAlcyBuYW1lIHBhcnNpbmcgCj4+IHBhdGgiLCBuYW1lX3BhdGgpOwo+PiAr Cj4+ICsgIHJlc3VsdCA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChhc24sIHRvcF9wYXRoLCAm c2VxX2NvbXBvbmVudHMpOwo+PiArICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAg ICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi RXJyb3IgY291bnRpbmcgbmFtZSAKPj4gY29tcG9uZW50czogJXMiLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsgICAgICBnb3RvIGNsZWFu dXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGZvciAoaSA9IDE7IGkgPD0gc2VxX2NvbXBvbmVudHM7 IGkrKykKPj4gKyAgICB7Cj4+ICsgICAgICBzZXRfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgiJXMu PyVkIiwgdG9wX3BhdGgsIGkpOwo+PiArICAgICAgaWYgKCFzZXRfcGF0aCkKPj4gKyAgICAgICAg ewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlks ICJDb3VsZCBub3QgCj4+IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBzZXQgcGFyc2luZyBw YXRoIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3BhdGgpOwo+PiArICAg ICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIC8qIHRoaXMg YnJpbmdzIHVzLCBob3BlZnVsbHksIHRvIGEgc2V0ICovCj4+ICsgICAgICByZXN1bHQgPSBhc24x X251bWJlcl9vZl9lbGVtZW50cyAoYXNuLCBzZXRfcGF0aCwgCj4+ICZzZXRfY29tcG9uZW50cyk7 Cj4+ICsgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICAgICAgewo+PiAr ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJFcnJv ciBjb3VudGluZyAKPj4gbmFtZSBzdWItY29tcG9uZW50cyBjb21wb25lbnRzIChlbGVtZW50ICVk KTogJXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGFzbjFfc3RyZXJyb3Ig KHJlc3VsdCkpOwo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9zZXQ7Cj4+ICsgICAgICAgIH0K Pj4gKyAgICAgIGZvciAoaiA9IDE7IGogPD0gc2V0X2NvbXBvbmVudHM7IGorKykKPj4gKyAgICAg ICAgewo+PiArICAgICAgICAgIHR5cGVfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgiJXMuPyVkLj8l ZC50eXBlIiwgdG9wX3BhdGgsIGksIAo+PiBqKTsKPj4gKyAgICAgICAgICBpZiAoIXR5cGVfcGF0 aCkKPj4gKyAgICAgICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfT1VUX09GX01FTU9SWSwgIkNvdWxkIG5vdCAKPj4gYWxsb2NhdGUgbWVtb3J5IGZv ciAlcyBuYW1lIGNvbXBvbmVudCB0eXBlIHBhdGgiLAo+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBuYW1lX3BhdGgpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0 Owo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgIHR5cGVfbGVuID0gc2l6ZW9mICh0eXBl KTsKPj4gKyAgICAgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgdHlwZV9wYXRo LCB0eXBlLCAmdHlwZV9sZW4pOwo+PiArICAgICAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUND RVNTKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiRXJyb3IgCj4+IHJlYWRpbmcgJXMgbmFtZSBjb21w b25lbnQgdHlwZTogJXMiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1l X3BhdGgsIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNs ZWFudXBfdHlwZTsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAgIGlmIChncnVi X3N0cm5jbXAgKHR5cGUsIGNvbW1vbk5hbWVfb2lkLCB0eXBlX2xlbikgIT0gMCkKPj4gKyAgICAg ICAgICAgIHsKPj4gKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlICh0eXBlX3BhdGgpOwo+PiArICAg ICAgICAgICAgICBjb250aW51ZTsKPj4gKyAgICAgICAgICAgIH0KPj4gKwo+PiArICAgICAgICAg IHZhbF9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCIlcy4/JWQuPyVkLnZhbHVlIiwgdG9wX3BhdGgs IGksIAo+PiBqKTsKPj4gKyAgICAgICAgICBpZiAoIXZhbF9wYXRoKQo+PiArICAgICAgICAgICAg ewo+PiArICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLCAiQ291bGQgbm90IAo+PiBhbGxvY2F0ZSBtZW1vcnkgZm9yICVzIG5hbWUgY29tcG9uZW50 IHZhbHVlIHBhdGgiLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3Bh dGgpOwo+PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0Owo+IAo+IGdvdG8gY2xlYW51 cF90eXBlOwo+IAo+IAo+PiArICAgICAgICAgICAgfQo+PiArCj4+ICsgICAgICAgICAgc3RyaW5n X2RlciA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoYXNuLCB2YWxfcGF0aCwgCj4+IG5h bWVfcGF0aCwgJnN0cmluZ19zaXplKTsKPj4gKyAgICAgICAgICBpZiAoIXN0cmluZ19kZXIpCj4+ ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgIGVyciA9IGdydWJfZXJybm87Cj4+ICsg ICAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWxfcGF0aDsKPj4gKyAgICAgICAgICAgIH0KPj4g Kwo+PiArICAgICAgICAgIGVyciA9IGRlY29kZV9zdHJpbmcgKHN0cmluZ19kZXIsIHN0cmluZ19z aXplLCBuYW1lLCAKPj4gbmFtZV9zaXplKTsKPj4gKyAgICAgICAgICBpZiAoZXJyKQo+PiArICAg ICAgICAgICAgZ290byBjbGVhbnVwX3N0cmluZzsKPj4gKwo+PiArICAgICAgICAgIGdydWJfZnJl ZSAoc3RyaW5nX2Rlcik7Cj4+ICsgICAgICAgICAgZ3J1Yl9mcmVlICh0eXBlX3BhdGgpOwo+PiAr ICAgICAgICAgIGdydWJfZnJlZSAodmFsX3BhdGgpOwo+PiArICAgICAgICAgIGJyZWFrOwo+PiAr ICAgICAgICB9Cj4+ICsgICAgICBncnViX2ZyZWUgKHNldF9wYXRoKTsKPj4gKwo+PiArICAgICAg aWYgKCpuYW1lKQo+PiArICAgICAgICBicmVhazsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgZ3J1Yl9m cmVlICh0b3BfcGF0aCk7Cj4+ICsKPj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4+ICsKPj4g K2NsZWFudXBfc3RyaW5nOgo+PiArICBncnViX2ZyZWUgKHN0cmluZ19kZXIpOwo+PiArY2xlYW51 cF92YWxfcGF0aDoKPj4gKyAgZ3J1Yl9mcmVlICh2YWxfcGF0aCk7Cj4+ICtjbGVhbnVwX3R5cGU6 Cj4+ICsgIGdydWJfZnJlZSAodHlwZV9wYXRoKTsKPj4gK2NsZWFudXBfc2V0Ogo+PiArICBncnVi X2ZyZWUgKHNldF9wYXRoKTsKPj4gK2NsZWFudXA6Cj4+ICsgIGdydWJfZnJlZSAodG9wX3BhdGgp Owo+PiArICByZXR1cm4gZXJyOwo+PiArfQo+PiArCj4+ICsvKgo+PiArICogVmVyaWZ5IHRoZSBL ZXkgVXNhZ2UgZXh0ZW5zaW9uLgo+PiArICogV2UgcmVxdWlyZSB0aGUgRGlnaXRhbCBzaWduYXR1 cmUgdXNhZ2UuCj4+ICsgKi8KPj4gK3N0YXRpYyBncnViX2Vycl90Cj4+ICt2ZXJpZnlfa2V5X3Vz YWdlIChncnViX3VpbnQ4X3QgKnZhbHVlLCBpbnQgdmFsdWVfc2l6ZSkKPj4gK3sKPj4gKyAgYXNu MV9ub2RlIHVzYWdlYXNuOwo+PiArICBpbnQgcmVzdWx0Owo+PiArICBncnViX2Vycl90IGVyciA9 IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGdydWJfdWludDhfdCB1c2FnZSA9IDB4ZmY7Cj4+ICsgIGlu dCB1c2FnZV9zaXplID0gc2l6ZW9mICh1c2FnZV9zaXplKTsKPj4gKwo+PiArICByZXN1bHQgPSBh c24xX2NyZWF0ZV9lbGVtZW50IChfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuS2V5VXNhZ2UiLCAK Pj4gJnVzYWdlYXNuKTsKPj4gKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAg ewo+PiArICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0 dXJlIGZvciBrZXkgCj4+IHVzYWdlIik7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJlc3VsdCA9IGFz bjFfZGVyX2RlY29kaW5nMiAoJnVzYWdlYXNuLCB2YWx1ZSwgJnZhbHVlX3NpemUsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxBR19TVFJJQ1RfREVSLCAK Pj4gYXNuMV9lcnJvcik7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAg IHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCj4+ ICsgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgcGFyc2luZyBERVIgZm9yIEtleSBVc2Fn ZTogJXMiLCAKPj4gYXNuMV9lcnJvcik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAg fQo+PiArCj4+ICsgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAodXNhZ2Vhc24sICIiLCAmdXNh Z2UsICZ1c2FnZV9zaXplKTsKPj4gKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCj4+ICsg ICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg IkVycm9yIHJlYWRpbmcgS2V5IAo+PiBVc2FnZSB2YWx1ZTogJXMiLAo+PiArICAgICAgICAgICAg ICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsgICAgICBnb3RvIGNsZWFu dXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIGlmICghKHVzYWdlICYgZGlnaXRhbFNpZ25hdHVyZVVz YWdlKSkKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIktleSBVc2FnZSAoMHgleCkg bWlzc2luZyBEaWdpdGFsIFNpZ25hdHVyZSAKPj4gdXNhZ2UiLCB1c2FnZSk7Cj4+ICsgICAgICBn b3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICtjbGVhbnVwOgo+PiArICBhc24xX2RlbGV0 ZV9zdHJ1Y3R1cmUgKCZ1c2FnZWFzbik7Cj4+ICsgIHJldHVybiBlcnI7Cj4+ICt9Cj4+ICsKPj4g Ky8qCj4+ICsgKiBCYXNpY0NvbnN0cmFpbnRzIDo6PSBTRVFVRU5DRSB7Cj4+ICsgKiAgICAgICBj QSAgICAgICAgICAgICAgICAgICAgICBCT09MRUFOIERFRkFVTFQgRkFMU0UsCj4+ICsgKiAgICAg ICBwYXRoTGVuQ29uc3RyYWludCAgICAgICBJTlRFR0VSICgwLi5NQVgpIE9QVElPTkFMIH0KPj4g KyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK3ZlcmlmeV9iYXNpY19jb25zdHJhaW50cyAo Z3J1Yl91aW50OF90ICp2YWx1ZSwgaW50IHZhbHVlX3NpemUpCj4+ICt7Cj4+ICsgIGFzbjFfbm9k ZSBiYXNpY2FzbjsKPj4gKyAgaW50IHJlc3VsdDsKPj4gKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVC X0VSUl9OT05FOwo+PiArICBjaGFyIGNBWzZdOyAvKiBGQUxTRSBvciBUUlVFICovCj4+ICsgIGlu dCBjQV9zaXplID0gc2l6ZW9mIChjQSk7Cj4+ICsKPj4gKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVf ZWxlbWVudCAoX2dudXRsc19wa2l4X2FzbiwgCj4+ICJQS0lYMS5CYXNpY0NvbnN0cmFpbnRzIiwg JmJhc2ljYXNuKTsKPj4gKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAgewo+ PiArICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgQVNOLjEgc3RydWN0dXJl IGZvciBCYXNpYyAKPj4gIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJDb25zdHJhaW50 cyIpOwo+PiArICAgIH0KPj4gKwo+PiArICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZi YXNpY2FzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgCj4+IGFzbjFfZXJyb3IpOwo+PiAr ICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBn cnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAo+PiArICAgICAgICAgICAgICAgICAg ICAgICAgIkVycm9yIHBhcnNpbmcgREVSIGZvciBCYXNpYyBDb25zdHJhaW50czogCj4+ICVzIiwg YXNuMV9lcnJvcik7Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsg IHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYmFzaWNhc24sICJjQSIsIGNBLCAmY0Ffc2l6ZSk7 Cj4+ICsgIGlmIChyZXN1bHQgPT0gQVNOMV9FTEVNRU5UX05PVF9GT1VORCkKPj4gKyAgICB7Cj4+ ICsgICAgICAvKiBOb3QgcHJlc2VudCwgZGVmYXVsdCBpcyBGYWxzZSwgc28gdGhpcyBpcyBPSyAq Lwo+PiArICAgICAgZXJyID0gR1JVQl9FUlJfTk9ORTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsK Pj4gKyAgICB9Cj4+ICsgIGVsc2UgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCj4+ICsgICAg ewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIkVy cm9yIHJlYWRpbmcgQmFzaWMgCj4+IENvbnN0cmFpbnRzIGNBIHZhbHVlOiAlcyIsCj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKPj4gKyAgICAgIGdv dG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyogVGhlIGNlcnRpZmljYXRlIG11c3Qg bm90IGJlIGEgQ0EgY2VydGlmaWNhdGUgKi8KPj4gKyAgaWYgKGdydWJfc3RybmNtcCAoIkZBTFNF IiwgY0EsIGNBX3NpemUpICE9IDApCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIlVuZXhwZWN0ZWQgQ0EgdmFsdWU6IAo+PiAlcyIs IGNBKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gK2NsZWFudXA6 Cj4+ICsgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmJhc2ljYXNuKTsKPj4gKyAgcmV0dXJuIGVy cjsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIEV4dEtleVVzYWdlU3ludGF4IDo6PSBTRVFVRU5D RSBTSVpFICgxLi5NQVgpIE9GIEtleVB1cnBvc2VJZAo+PiArICoKPj4gKyAqIEtleVB1cnBvc2VJ ZCA6Oj0gT0JKRUNUIElERU5USUZJRVIKPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4g K3ZlcmlmeV9leHRlbmRlZF9rZXlfdXNhZ2UgKGdydWJfdWludDhfdCAqdmFsdWUsIGludCB2YWx1 ZV9zaXplKQo+PiArewo+PiArICBhc24xX25vZGUgZXh0ZW5kZWRhc247Cj4+ICsgIGludCByZXN1 bHQsIGNvdW50Owo+PiArICBncnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7Cj4+ICsgIGNo YXIgdXNhZ2VbTUFYX09JRF9MRU5dOwo+PiArICBpbnQgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNh Z2UpOwo+PiArCj4+ICsgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKF9nbnV0bHNfcGtp eF9hc24sIAo+PiAiUEtJWDEuRXh0S2V5VXNhZ2VTeW50YXgiLCAmZXh0ZW5kZWRhc24pOwo+PiAr ICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAiQ291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIAo+PiBFeHRlbmRl ZCBLZXkgIgo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICJVc2FnZSIpOwo+PiArICAgIH0K Pj4gKwo+PiArICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZleHRlbmRlZGFzbiwgdmFs dWUsICZ2YWx1ZV9zaXplLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTjFf REVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgCj4+IGFzbjFfZXJyb3IpOwo+PiArICBpZiAocmVzdWx0 ICE9IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9CQURfRklMRV9UWVBFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9y IHBhcnNpbmcgREVSIGZvciBFeHRlbmRlZCBLZXkgVXNhZ2U6IAo+PiAlcyIsIGFzbjFfZXJyb3Ip Owo+PiArICAgICAgZ290byBjbGVhbnVwOwo+PiArICAgIH0KPj4gKwo+PiArICAvKgo+PiArICAg KiBJZiBFS1VzIGFyZSBwcmVzZW50LCB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgMSB1c2FnZSBhbmQg aXQgbXVzdCAKPj4gYmUgYQo+PiArICAgKiBjb2RlU2lnbmluZyB1c2FnZS4gKElmIHdlIGdldCB0 byB0aGlzIHBvaW50LCB3ZSBhcmUgcGFyc2luZyBhbiAKPj4gRUtVCj4+ICsgICAqIGV4dGVuc2lv biBhbmQgdGhlcmVmb3JlIG11c3QgaGF2ZSBhIHVzYWdlLiBUaGUgY29kZSB0aGF0IG1ha2VzIAo+ PiBoYXZpbmcgYW4KPj4gKyAgICogRUtVIGV4dGVuc2lvbiBvcHRpb25hbCBpcyBpbiB2ZXJpZnlf ZXh0ZW5zaW9ucy4pCj4+ICsgICAqLwo+PiArICByZXN1bHQgPSBhc24xX251bWJlcl9vZl9lbGVt ZW50cyAoZXh0ZW5kZWRhc24sICIiLCAmY291bnQpOwo+PiArICBpZiAocmVzdWx0ICE9IEFTTjFf U1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfRklMRV9UWVBFLCAiRXJyb3IgY291bnRpbmcgCj4+IG51bWJlciBvZiBFeHRlbmRlZCBLZXkg VXNhZ2VzOiAlcyIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChy ZXN1bHQpKTsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgaWYg KGNvdW50ICE9IDEpCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9F UlJfQkFEX0ZJTEVfVFlQRSwgIlVuZXhwZWN0ZWQgbnVtYmVyIG9mIAo+PiBFeHRlbmRlZCBLZXkg VXNhZ2VzOiAlZCwgMSBleHBlY3RlZCIsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBjb3Vu dCk7Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ICsgICAgfQo+PiArCj4+ICsgIHJlc3VsdCA9 IGFzbjFfcmVhZF92YWx1ZSAoZXh0ZW5kZWRhc24sICI/MSIsIHVzYWdlLCAmdXNhZ2Vfc2l6ZSk7 Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAgIHsKPj4gKyAgICAgIGVy ciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJFcnJvciByZWFkaW5nIAo+ PiBFeHRlbmRlZCBLZXkgVXNhZ2U6ICVzIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGFz bjFfc3RyZXJyb3IgKHJlc3VsdCkpOwo+PiArICAgICAgZ290byBjbGVhbnVwOwo+PiArICAgIH0K Pj4gKwo+PiArICBpZiAoZ3J1Yl9zdHJuY21wIChjb2RlU2lnbmluZ1VzYWdlX29pZCwgdXNhZ2Us IHVzYWdlX3NpemUpICE9IDApCj4+ICsgICAgewo+PiArICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICJVbmV4 cGVjdGVkIEV4dGVuZGVkIEtleSBVc2FnZSBPSUQsIGdvdDogJXMiLCAKPj4gdXNhZ2UpOwo+PiAr ICAgICAgZ290byBjbGVhbnVwOwo+PiArICAgIH0KPj4gKwo+PiArY2xlYW51cDoKPj4gKyAgYXNu MV9kZWxldGVfc3RydWN0dXJlICgmZXh0ZW5kZWRhc24pOwo+PiArICByZXR1cm4gZXJyOwo+PiAr fQo+PiArCj4+ICsvKgo+PiArICogRXh0ZW5zaW9ucyAgOjo9ICBTRVFVRU5DRSBTSVpFICgxLi5N QVgpIE9GIEV4dGVuc2lvbgo+PiArICoKPj4gKyAqIEV4dGVuc2lvbiAgOjo9ICBTRVFVRU5DRSAg ewo+PiArICogICAgICBleHRuSUQgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKPj4gKyAqICAgICAg Y3JpdGljYWwgICAgQk9PTEVBTiBERUZBVUxUIEZBTFNFLAo+PiArICogICAgICBleHRuVmFsdWUg ICBPQ1RFVCBTVFJJTkcKPj4gKyAqICAgICAgICAgICAgICAgICAgLS0gY29udGFpbnMgdGhlIERF UiBlbmNvZGluZyBvZiBhbiBBU04uMSB2YWx1ZQo+PiArICogICAgICAgICAgICAgICAgICAtLSBj b3JyZXNwb25kaW5nIHRvIHRoZSBleHRlbnNpb24gdHlwZSBpZGVudGlmaWVkCj4+ICsgKiAgICAg ICAgICAgICAgICAgIC0tIGJ5IGV4dG5JRAo+PiArICogfQo+PiArICoKPj4gKyAqIEEgY2VydGlm aWNhdGUgbXVzdDoKPj4gKyAqICAtIGNvbnRhaW4gdGhlIERpZ2l0YWwgU2lnbmF0dXJlIHVzYWdl IG9ubHkKPj4gKyAqICAtIG5vdCBiZSBhIENBCj4+ICsgKiAgLSBjb250YWluIG5vIGV4dGVuZGVk IHVzYWdlcywgb3Igb25seSBhIGNvZGUgc2lnbmluZyBleHRlbmRlZCAKPj4gdXNhZ2UKPj4gKyAq ICAtIG5vdCBjb250YWluIGFueSBvdGhlciBjcml0aWNhbCBleHRlbnNpb25zIChSRkMgNTI4MCBz IDQuMikKPj4gKyAqLwo+PiArc3RhdGljIGdydWJfZXJyX3QKPj4gK3ZlcmlmeV9leHRlbnNpb25z IChhc24xX25vZGUgY2VydCkKPj4gK3sKPj4gKyAgaW50IHJlc3VsdDsKPj4gKyAgaW50IGV4dCwg bnVtX2V4dGVuc2lvbnMgPSAwOwo+PiArICBpbnQgdXNhZ2VfcHJlc2VudCA9IDAsIGNvbnN0cmFp bnRzX3ByZXNlbnQgPSAwLCAKPj4gZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCA9IDA7Cj4+ICsgIGNo YXIgKm9pZF9wYXRoLCAqY3JpdGljYWxfcGF0aCwgKnZhbHVlX3BhdGg7Cj4+ICsgIGNoYXIgZXh0 bklEW01BWF9PSURfTEVOXTsKPj4gKyAgaW50IGV4dG5JRF9zaXplOwo+PiArICBncnViX2Vycl90 IGVycjsKPj4gKyAgY2hhciBjcml0aWNhbFs2XTsgLyogd2UgZ2V0IGVpdGhlciAiVFJVRSIgb3Ig IkZBTFNFIiAqLwo+PiArICBpbnQgY3JpdGljYWxfc2l6ZTsKPj4gKyAgZ3J1Yl91aW50OF90ICp2 YWx1ZTsKPj4gKyAgaW50IHZhbHVlX3NpemU7Cj4+ICsKPj4gKyAgcmVzdWx0ID0gYXNuMV9udW1i ZXJfb2ZfZWxlbWVudHMgKGNlcnQsIAo+PiAidGJzQ2VydGlmaWNhdGUuZXh0ZW5zaW9ucyIsICZu dW1fZXh0ZW5zaW9ucyk7Cj4+ICsgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+PiArICAg IHsKPj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi RXJyb3IgY291bnRpbmcgCj4+IG51bWJlciBvZiBleHRlbnNpb25zOiAlcyIsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7Cj4+ICsgICAgfQo+PiAr Cj4+ICsgIGlmIChudW1fZXh0ZW5zaW9ucyA8IDIpCj4+ICsgICAgewo+PiArICAgICAgcmV0dXJu IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJJbnN1ZmZpY2llbnQgbnVtYmVy IAo+PiBvZiBleHRlbnNpb25zIGZvciAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgImNl cnRpZmljYXRlLCBuZWVkIGF0IGxlYXN0IDIsIGdvdCAlZCIsCj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgbnVtX2V4dGVuc2lvbnMpOwo+PiArICAgIH0KPj4gKwo+PiArICBmb3IgKGV4dCA9 IDE7IGV4dCA8PSBudW1fZXh0ZW5zaW9uczsgZXh0KyspCj4+ICsgICAgewo+PiArICAgICAgb2lk X3BhdGggPSBncnViX3hhc3ByaW50ZiAKPj4gKCJ0YnNDZXJ0aWZpY2F0ZS5leHRlbnNpb25zLj8l ZC5leHRuSUQiLCBleHQpOwo+IAo+IGlmICghb2lkX3BhdGgpIC4uLgo+ICAgIGVyciA9IC4uLgo+ ICAgIHJldHVybiBlcnI7Cj4gCj4+ICsKPj4gKyAgICAgIGV4dG5JRF9zaXplID0gc2l6ZW9mIChl eHRuSUQpOwo+PiArICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChjZXJ0LCBvaWRfcGF0 aCwgZXh0bklELCAKPj4gJmV4dG5JRF9zaXplKTsKPj4gKyAgICAgIGlmIChyZXN1bHQgIT0gQVNO MV9TVUNDRVNTKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIkVycm9yIHJlYWRpbmcgCj4+IGV4dGVuc2lvbiBPSUQ6 ICVzIiwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1 bHQpKTsKPj4gKyAgICAgICAgICBnb3RvIGNsZWFudXBfb2lkX3BhdGg7Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgICAgY3JpdGljYWxfcGF0aCA9IGdydWJfeGFzcHJpbnRmIAo+PiAoInRic0Nl cnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmNyaXRpY2FsIiwgZXh0KTsKPiAKPiBpZiAoIWNyaXRp Y2FsX3BhdGgpIC4uLgo+ICAgIGVyciA9Cj4gICAgZ290byBjbGVhbnVwX29pZF9wYXRoCj4gCj4+ ICsgICAgICBjcml0aWNhbF9zaXplID0gc2l6ZW9mIChjcml0aWNhbCk7Cj4+ICsgICAgICByZXN1 bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnQsIGNyaXRpY2FsX3BhdGgsIGNyaXRpY2FsLCAKPj4g JmNyaXRpY2FsX3NpemUpOwo+PiArICAgICAgaWYgKHJlc3VsdCA9PSBBU04xX0VMRU1FTlRfTk9U X0ZPVU5EKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgY3JpdGljYWxbMF0gPSAnXDAnOwo+ PiArICAgICAgICB9Cj4+ICsgICAgICBlbHNlIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQo+ PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZJTEVfVFlQRSwgIkVycm9yIHJlYWRpbmcgCj4+IGV4dGVuc2lvbiBjcml0aWNhbGl0eTogJXMi LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkp Owo+PiArICAgICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9wYXRoOwo+PiArICAgICAgICB9 Cj4+ICsKPj4gKyAgICAgIHZhbHVlX3BhdGggPSBncnViX3hhc3ByaW50ZiAKPj4gKCJ0YnNDZXJ0 aWZpY2F0ZS5leHRlbnNpb25zLj8lZC5leHRuVmFsdWUiLCBleHQpOwo+IAo+IGlmICghdmFsdWVf cGF0aCkgLi4uCj4gICAgZXJyID0gLi4uCj4gICAgZ290byBjbGVhbnVwX2NyaXRpY2FsX3BhdGgK PiAKPj4gKyAgICAgIHZhbHVlID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChjZXJ0LCB2 YWx1ZV9wYXRoLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJjZXJ0aWZpY2F0ZSBleHRlbnNpb24gCj4+IHZhbHVlIiwgJnZhbHVlX3NpemUpOwo+PiArICAg ICAgaWYgKCF2YWx1ZSkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IGdydWJfZXJy bm87Cj4+ICsgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVlX3BhdGg7Cj4+ICsgICAgICAgIH0K Pj4gKwo+PiArICAgICAgLyoKPj4gKyAgICAgICAqIE5vdyB3ZSBtdXN0IHNlZSBpZiB3ZSByZWNv Z25pc2UgdGhlIE9JRC4KPj4gKyAgICAgICAqIElmIHdlIGhhdmUgYW4gdW5yZWNvZ25pc2VkIGNy aXRpY2FsIGV4dGVuc2lvbiB3ZSBNVVNUIGJhaWwuCj4+ICsgICAgICAgKi8KPj4gKyAgICAgIGlm IChncnViX3N0cm5jbXAgKGtleVVzYWdlX29pZCwgZXh0bklELCBleHRuSURfc2l6ZSkgPT0gMCkK Pj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IHZlcmlmeV9rZXlfdXNhZ2UgKHZhbHVl LCB2YWx1ZV9zaXplKTsKPj4gKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF92YWx1ZTsKPj4g KyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICB1c2FnZV9wcmVzZW50Kys7Cj4+ICsgICAgICAg IH0KPj4gKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoYmFzaWNDb25zdHJhaW50c19vaWQs IGV4dG5JRCwgCj4+IGV4dG5JRF9zaXplKSA9PSAwKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAg ICAgZXJyID0gdmVyaWZ5X2Jhc2ljX2NvbnN0cmFpbnRzICh2YWx1ZSwgdmFsdWVfc2l6ZSk7Cj4+ ICsgICAgICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgICAgICAgICAgewo+ PiArICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7Cj4+ICsgICAgICAgICAgICB9Cj4+ ICsgICAgICAgICAgY29uc3RyYWludHNfcHJlc2VudCsrOwo+PiArICAgICAgICB9Cj4+ICsgICAg ICBlbHNlIGlmIChncnViX3N0cm5jbXAgKGV4dGVuZGVkS2V5VXNhZ2Vfb2lkLCBleHRuSUQsIAo+ PiBleHRuSURfc2l6ZSkgPT0gMCkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgIGVyciA9IHZl cmlmeV9leHRlbmRlZF9rZXlfdXNhZ2UgKHZhbHVlLCB2YWx1ZV9zaXplKTsKPj4gKyAgICAgICAg ICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgICAgICAgICB7Cj4+ICsgICAgICAg ICAgICAgIGdvdG8gY2xlYW51cF92YWx1ZTsKPj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAg ICBleHRlbmRlZF91c2FnZV9wcmVzZW50Kys7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgIGVsc2Ug aWYgKGdydWJfc3RybmNtcCAoIlRSVUUiLCBjcml0aWNhbCwgY3JpdGljYWxfc2l6ZSkgPT0gMCkK Pj4gKyAgICAgICAgewo+PiArICAgICAgICAgIC8qCj4+ICsgICAgICAgICAgICogcGVyIHRoZSBS RkMsIHdlIG11c3Qgbm90IHByb2Nlc3MgYSBjZXJ0aWZpY2F0ZSB3aXRoCj4+ICsgICAgICAgICAg ICogYSBjcml0aWNhbCBleHRlbnNpb24gd2UgZG8gbm90IHVuZGVyc3RhbmQuCj4+ICsgICAgICAg ICAgICovCj4+ICsgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVW5oYW5kbGVkIGNyaXRpY2Fs IHg1MDkgZXh0ZW5zaW9uIHdpdGggCj4+IE9JRCAlcyIsIGV4dG5JRCk7Cj4+ICsgICAgICAgICAg Z290byBjbGVhbnVwX3ZhbHVlOwo+PiArICAgICAgICB9Cj4+ICsKPj4gKyAgICAgIGdydWJfZnJl ZSAodmFsdWUpOwo+PiArICAgICAgZ3J1Yl9mcmVlICh2YWx1ZV9wYXRoKTsKPj4gKyAgICAgIGdy dWJfZnJlZSAoY3JpdGljYWxfcGF0aCk7Cj4+ICsgICAgICBncnViX2ZyZWUgKG9pZF9wYXRoKTsK Pj4gKyAgICB9Cj4+ICsKPj4gKyAgaWYgKHVzYWdlX3ByZXNlbnQgIT0gMSkKPj4gKyAgICB7Cj4+ ICsgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgIlVuZXhw ZWN0ZWQgbnVtYmVyIAo+PiBvZiBLZXkgVXNhZ2UgZXh0ZW5zaW9ucyAiCj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgIi0gZXhwZWN0ZWQgMSwgZ290ICVkIiwgdXNhZ2VfcHJlc2VudCk7Cj4+ ICsgICAgfQo+PiArICBpZiAoY29uc3RyYWludHNfcHJlc2VudCAhPSAxKQo+PiArICAgIHsKPj4g KyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiVW5leHBl Y3RlZCBudW1iZXIgCj4+IG9mIGJhc2ljIGNvbnN0cmFpbnRzIGV4dGVuc2lvbnMgIgo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICItIGV4cGVjdGVkIDEsIGdvdCAlZCIsIAo+PiBjb25zdHJh aW50c19wcmVzZW50KTsKPj4gKyAgICB9Cj4+ICsgIGlmIChleHRlbmRlZF91c2FnZV9wcmVzZW50 ID4gMSkKPj4gKyAgICB7Cj4+ICsgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0ZJTEVfVFlQRSwgIlVuZXhwZWN0ZWQgbnVtYmVyIAo+PiBvZiBFeHRlbmRlZCBLZXkgVXNhZ2Ug ZXh0ZW5zaW9ucyAiCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIi0gZXhwZWN0ZWQgMCBv ciAxLCBnb3QgJWQiLCAKPj4gZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCk7Cj4+ICsgICAgfQo+PiAr ICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKPj4gKwo+PiArY2xlYW51cF92YWx1ZToKPj4gKyAgZ3J1 Yl9mcmVlICh2YWx1ZSk7Cj4+ICtjbGVhbnVwX3ZhbHVlX3BhdGg6Cj4+ICsgIGdydWJfZnJlZSAo dmFsdWVfcGF0aCk7Cj4+ICtjbGVhbnVwX2NyaXRpY2FsX3BhdGg6Cj4+ICsgIGdydWJfZnJlZSAo Y3JpdGljYWxfcGF0aCk7Cj4+ICtjbGVhbnVwX29pZF9wYXRoOgo+PiArICBncnViX2ZyZWUgKG9p ZF9wYXRoKTsKPj4gKyAgcmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFBhcnNl IGEgY2VydGlmaWNhdGUgd2hvc2UgREVSLWVuY29kZWQgZm9ybSBpcyBpbiBAZGF0YSwgb2Ygc2l6 ZSAKPj4gQGRhdGFfc2l6ZS4KPj4gKyAqIFJldHVybiB0aGUgcmVzdWx0cyBpbiBAcmVzdWx0cywg d2hpY2ggbXVzdCBwb2ludCB0byBhbiBhbGxvY2F0ZWQgCj4+IHg1MDkgY2VydGlmaWNhdGUuCj4+ ICsgKi8KPj4gK2dydWJfZXJyX3QKPj4gK3BhcnNlX3g1MDlfY2VydGlmaWNhdGUgKGNvbnN0IHZv aWQgKmRhdGEsIGdydWJfc2l6ZV90IGRhdGFfc2l6ZSwgCj4+IHN0cnVjdCB4NTA5X2NlcnRpZmlj YXRlICpyZXN1bHRzKQo+PiArewo+PiArICBpbnQgcmVzdWx0ID0gMDsKPj4gKyAgYXNuMV9ub2Rl IGNlcnQ7Cj4+ICsgIGdydWJfZXJyX3QgZXJyOwo+PiArICBpbnQgc2l6ZTsKPj4gKyAgaW50IHRt cF9zaXplOwo+PiArCj4+ICsgIGlmIChkYXRhX3NpemUgPiBHUlVCX0lOVF9NQVgpCj4+ICsgICAg cmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwKPj4gKyAgICAgICAgICAg ICAgICAgICAgICAgIkNhbm5vdCBwYXJzZSBhIGNlcnRpZmljYXRlIHdoZXJlIGRhdGEgc2l6ZSA+ IAo+PiBJTlRfTUFYIik7Cj4+ICsgIHNpemUgPSAoaW50KSBkYXRhX3NpemU7Cj4+ICsKPj4gKyAg cmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoX2dudXRsc19wa2l4X2FzbiwgCj4+ICJQS0lY MS5DZXJ0aWZpY2F0ZSIsICZjZXJ0KTsKPj4gKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1Mp Cj4+ICsgICAgewo+PiArICAgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9N RU1PUlksCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCBjcmVhdGUgQVNO LjEgc3RydWN0dXJlIGZvciAKPj4gY2VydGlmaWNhdGU6ICVzIiwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKPj4gKyAgICB9Cj4+ICsKPj4gKyAg cmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmY2VydCwgZGF0YSwgJnNpemUsIAo+PiBBU04x X0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOwo+PiArICBpZiAocmVzdWx0ICE9 IEFTTjFfU1VDQ0VTUykKPj4gKyAgICB7Cj4+ICsgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5v dCBwYXJzZSBERVIgZm9yIGNlcnRpZmljYXRlOiAlcyIsIAo+PiBhc24xX2Vycm9yKTsKPj4gKyAg ICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4gKyAgICogVEJTQ2Vy dGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0Ugewo+PiArICAgKiAgICAgdmVyc2lvbiAgICAgICAgIFsw XSAgRVhQTElDSVQgVmVyc2lvbiBERUZBVUxUIHYxCj4+ICsgICAqLwo+PiArICBlcnIgPSBjaGVj a192ZXJzaW9uIChjZXJ0KTsKPj4gKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAg IHsKPj4gKyAgICAgIGdvdG8gY2xlYW51cDsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgLyoKPj4gKyAg ICogc2VyaWFsTnVtYmVyICAgICAgICAgQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIsCj4+ICsgICAq Cj4+ICsgICAqIENlcnRpZmljYXRlU2VyaWFsTnVtYmVyICA6Oj0gIElOVEVHRVIKPj4gKyAgICov Cj4+ICsgIHJlc3VsdHMtPnNlcmlhbCA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoY2Vy dCwgCj4+ICJ0YnNDZXJ0aWZpY2F0ZS5zZXJpYWxOdW1iZXIiLAo+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0ZSBzZXJpYWwgCj4+ IG51bWJlciIsICZ0bXBfc2l6ZSk7Cj4+ICsgIGlmICghcmVzdWx0cy0+c2VyaWFsKQo+PiArICAg IHsKPj4gKyAgICAgIGVyciA9IGdydWJfZXJybm87Cj4+ICsgICAgICBnb3RvIGNsZWFudXA7Cj4+ ICsgICAgfQo+PiArICAvKgo+PiArICAgKiBJdCdzIHNhZmUgdG8gY2FzdCB0aGUgc2lnbmVkIGlu dCB0byBhbiB1bnNpZ25lZCBoZXJlLCB3ZSBrbm93Cj4+ICsgICAqIGxlbmd0aCBpcyBub24tbmVn YXRpdmUKPj4gKyAgICovCj4+ICsgIHJlc3VsdHMtPnNlcmlhbF9sZW4gPSB0bXBfc2l6ZTsKPj4g Kwo+PiArICAvKgo+PiArICAgKiBzaWduYXR1cmUgICAgICAgICAgICBBbGdvcml0aG1JZGVudGlm aWVyLAo+PiArICAgKgo+PiArICAgKiBXZSBkb24ndCBsb2FkIHRoZSBzaWduYXR1cmUgb3IgaXNz dWVyIGF0IHRoZSBtb21lbnQsCj4+ICsgICAqIGFzIHdlIGRvbid0IGF0dGVtcHQgeDUwOSB2ZXJp ZmljYXRpb24uCj4+ICsgICAqLwo+PiArCj4+ICsgIC8qCj4+ICsgICAqIGlzc3VlciAgICAgICAg ICAgICAgIE5hbWUsCj4+ICsgICAqCj4+ICsgICAqIFRoZSBSRkMgb25seSByZXF1aXJlcyB0aGUg c2VyaWFsIG51bWJlciB0byBiZSB1bmlxdWUgd2l0aGluCj4+ICsgICAqIGlzc3VlcnMsIHNvIHRv IGF2b2lkIGFtYmlndWl0eSB3ZSBfdGVjaG5pY2FsbHlfIG91Z2h0IHRvIG1ha2UKPj4gKyAgICog dGhpcyBhdmFpbGFibGUuCj4+ICsgICAqLwo+PiArCj4+ICsgIC8qCj4+ICsgICAqIHZhbGlkaXR5 ICAgICAgICAgICAgIFZhbGlkaXR5LAo+PiArICAgKgo+PiArICAgKiBWYWxpZGl0eSA6Oj0gU0VR VUVOQ0Ugewo+PiArICAgKiAgICAgbm90QmVmb3JlICAgICAgVGltZSwKPj4gKyAgICogICAgIG5v dEFmdGVyICAgICAgIFRpbWUgfQo+PiArICAgKgo+PiArICAgKiBXZSBjYW4ndCB2YWxpZGF0ZSB0 aGlzIHJlYXNvbmFibHksIHdlIGhhdmUgbm8gdHJ1ZSB0aW1lIHNvdXJjZSAKPj4gb24gc2V2ZXJh bAo+PiArICAgKiBwbGF0Zm9ybXMuIEZvciBub3cgd2UgZG8gbm90IHBhcnNlIHRoZW0uCj4+ICsg ICAqLwo+PiArCj4+ICsgIC8qCj4+ICsgICAqIHN1YmplY3QgICAgICAgICAgICAgIE5hbWUsCj4+ ICsgICAqCj4+ICsgICAqIFRoaXMgaXMgYW4gWDUwMSBuYW1lLCB3ZSBwYXJzZSBvdXQganVzdCB0 aGUgQ04uCj4+ICsgICAqLwo+PiArICBlcnIgPSByZWFkX25hbWUgKGNlcnQsICJ0YnNDZXJ0aWZp Y2F0ZS5zdWJqZWN0IiwgJnJlc3VsdHMtPnN1YmplY3QsIAo+PiAmcmVzdWx0cy0+c3ViamVjdF9s ZW4pOwo+PiArICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCj4+ICsgICAgZ290byBjbGVhbnVw X3NlcmlhbDsKPj4gKwo+PiArICAvKgo+PiArICAgKiBUQlNDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFV RU5DRSAgewo+PiArICAgKiAgICAuLi4KPj4gKyAgICogICAgc3ViamVjdFB1YmxpY0tleUluZm8g U3ViamVjdFB1YmxpY0tleUluZm8sCj4+ICsgICAqICAgIC4uLgo+PiArICAgKi8KPj4gKyAgZXJy ID0gZ3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChjZXJ0LCByZXN1bHRzKTsKPj4g KyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQo+PiArICAgIGdvdG8gY2xlYW51cF9uYW1lOwo+ PiArCj4+ICsgIC8qCj4+ICsgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7Cj4+ ICsgICAqICAgIC4uLgo+PiArICAgKiAgICBleHRlbnNpb25zICAgICAgWzNdICBFWFBMSUNJVCBF eHRlbnNpb25zIE9QVElPTkFMCj4+ICsgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIElm IHByZXNlbnQsIHZlcnNpb24gTVVTVCBiZSB2Mwo+PiArICAgKiB9Cj4+ICsgICAqLwo+PiArCj4+ ICsgIGVyciA9IHZlcmlmeV9leHRlbnNpb25zIChjZXJ0KTsKPj4gKyAgaWYgKGVyciAhPSBHUlVC X0VSUl9OT05FKQo+PiArICAgIGdvdG8gY2xlYW51cF9tcGlzOwo+PiArCj4+ICsgIC8qCj4+ICsg ICAqIFdlIGRvIG5vdCByZWFkIG9yIGNoZWNrIHRoZSBzaWduYXR1cmUgb24gdGhlIGNlcnRpZmlj YXRlOgo+PiArICAgKiBhcyBkaXNjdXNzZWQgd2UgZG8gbm90IHRyeSB0byB2YWxpZGF0ZSB0aGUg Y2VydGlmaWNhdGUgYnV0IHRydXN0Cj4+ICsgICAqIGl0IGltcGxpY3RseS4KPj4gKyAgICovCj4+ ICsKPj4gKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmY2VydCk7Cj4+ICsgIHJldHVybiBHUlVC X0VSUl9OT05FOwo+PiArCj4+ICtjbGVhbnVwX21waXM6Cj4+ICsgIGdjcnlfbXBpX3JlbGVhc2Ug KHJlc3VsdHMtPm1waXNbMF0pOwo+PiArICBnY3J5X21waV9yZWxlYXNlIChyZXN1bHRzLT5tcGlz WzFdKTsKPj4gK2NsZWFudXBfbmFtZToKPj4gKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zdWJqZWN0 KTsKPj4gK2NsZWFudXBfc2VyaWFsOgo+PiArICBncnViX2ZyZWUgKHJlc3VsdHMtPnNlcmlhbCk7 Cj4+ICtjbGVhbnVwOgo+PiArICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjZXJ0KTsKPj4gKyAg cmV0dXJuIGVycjsKPj4gK30KPj4gKwo+PiArLyoKPj4gKyAqIFJlbGVhc2UgYWxsIHRoZSBzdG9y YWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgeDUwOSBjZXJ0aWZpY2F0ZS4KPj4gKyAqIElmIHRoZSBj YWxsZXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBjZXJ0aWZpY2F0ZSwgaXQgbXVzdCBmcmVl IAo+PiBpdC4KPj4gKyAqIFRoZSBjYWxsZXIgaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgbWFpbnRl bmFuY2Ugb2YgdGhlIGxpbmtlZCBsaXN0Lgo+PiArICovCj4+ICt2b2lkCj4+ICtjZXJ0aWZpY2F0 ZV9yZWxlYXNlIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydCkKPj4gK3sKPj4gKyAgZ3J1 Yl9mcmVlIChjZXJ0LT5zdWJqZWN0KTsKPj4gKyAgZ3J1Yl9mcmVlIChjZXJ0LT5zZXJpYWwpOwo+ PiArICBnY3J5X21waV9yZWxlYXNlIChjZXJ0LT5tcGlzWzBdKTsKPj4gKyAgZ2NyeV9tcGlfcmVs ZWFzZSAoY2VydC0+bXBpc1sxXSk7Cj4+ICt9CgpUaGFuayB5b3UgU3RlZmFuLiBmaXhlZCBpdC4K Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2 ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcv bWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==