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 1C475CAC5A7 for ; Mon, 22 Sep 2025 09:31:21 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v0crM-0001G2-TG; Mon, 22 Sep 2025 05:29:25 -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 1v0crH-0001FE-0o for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:21 -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 1v0cr8-0007LI-Fq for grub-devel@gnu.org; Mon, 22 Sep 2025 05:29:15 -0400 Received: from pps.filterd (m0353725.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58LN7EH1028147; Mon, 22 Sep 2025 09:29:07 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=pp1; bh=IbNwWxlyCaxxgP/so mhgfS3alk2Vs4Qs/jCtxyPHEjc=; b=WQL3OOVxf6W6wMYE7rCVoNmYeX/hFHEkW +X7xvNGDugwLlSgDlHqMxH6a6Ztx8aq2jxFEMF/TxVtsY8v9LQBqkXiATTR+eClI /YsSlCeDKqo3H9FiW9Z2Q7reuRKwIqOH3twycOSEM0K+YizkHxICGTBU9EhCFymy JEcvYXtnBSEunxL0SwL+QMeUH1wXDwE2HShPhZtiIWXgmqQ7jN4CfBslYYvb3DcJ bT+vbyqSHntmtT7DhDQW0YajiaQS1tngJ+tMG26ccyYg3i+472cgssBpVyoAvfdi vz64Ti/89SgXljl83vFBGw+VV/MkU1J1OI5o+NyNJYiZZ1wrF5Kig== Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 499jpk1kbc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:07 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 58M66RuJ030345; Mon, 22 Sep 2025 09:29:06 GMT Received: from smtprelay05.fra02v.mail.ibm.com ([9.218.2.225]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 49a9a0w4bc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 22 Sep 2025 09:29:06 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay05.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 58M9T2o351773750 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 22 Sep 2025 09:29:03 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id D0F802004B; Mon, 22 Sep 2025 09:29:02 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 2474620040; Mon, 22 Sep 2025 09:29:00 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.218.27]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 22 Sep 2025 09:28:59 +0000 (GMT) From: Sudhakar Kuppusamy To: grub-devel@gnu.org Cc: 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, ssrish@linux.ibm.com, Sudhakar Kuppusamy , sridharm@linux.ibm.com, Daniel Kiper Subject: [PATCH v12 07/22] appended signatures: Parse PKCS#7 signed data Date: Mon, 22 Sep 2025 14:57:48 +0530 Message-ID: <20250922092814.39630-8-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250922092814.39630-1-sudhakar@linux.ibm.com> References: <20250922092814.39630-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=L50dQ/T8 c=1 sm=1 tr=0 ts=68d116e3 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=yJojWOMRYYMA:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=foKWCotKXrICIOwrmvMA:9 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTIwMDAxMCBTYWx0ZWRfX006Z8nRRIzFS 8Jnl7b/MLe4NI/FQOifbz/fIZ4tc2fgAMKidZi4ujy2byHd9yJ4Y9iQmvaQJFF5CqdDbxkGkWVp 5NgHpcqdOXltPkb0fpeLP0KwVm9ssGtIhKcMcq4Z5hxoYZOih4LsA2UqgDPXbkIhaWA5NN1Uoks Vox5TtMv6OJVr6M91UCEjuI0iilLNIRfg9p7OLwctsvzY7OzmWbCEKnmbZ94g8SspB1uirkgFT9 RZRzJnqioE9zM8HnyKrNbYe423DIIv5LKjBL2Ij+ZzP3MCOByfxYIegpuBlGLYdr7zk/mwrs8GY gIRC/ZPVGl6SwslIzaOFMoo0yhM8UApoU5VstRXgoebC4wjIHCj/dgf20LQZtlL9uVdzy6pXVJK wbGJ73Pm X-Proofpoint-ORIG-GUID: RcQ4eo2ZTp1AEX1aXLov3sMw4ufuk-O8 X-Proofpoint-GUID: RcQ4eo2ZTp1AEX1aXLov3sMw4ufuk-O8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-22_01,2025-09-19_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 adultscore=0 phishscore=0 impostorscore=0 spamscore=0 priorityscore=1501 suspectscore=0 clxscore=1015 bulkscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509200010 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_H4=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org Sender: grub-devel-bounces+grub-devel=archiver.kernel.org@gnu.org VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFBLQ1MjNyBzaWduZWQgZGF0YSBtZXNz YWdlcy4gT25seSBhIHNpbmdsZSBzaWduZXIgaW5mbyBpcyBzdXBwb3J0ZWQsCiAgIHdoaWNoIGlz IGFsbCB0aGF0IHRoZSBMaW51eCBzaWduLWZpbGUgdXRpbGl0eSBzdXBwb3J0cyBjcmVhdGluZwog ICBvdXQtb2YtdGhlLWJveC4gT25seSBSU0EsIFNIQS0yNTYgYW5kIFNIQS01MTIgYXJlIHN1cHBv cnRlZC4KICAgQW55IGNlcnRpZmljYXRlIGVtYmVkZGVkIGluIHRoZSBQS0NTIzcgbWVzc2FnZSB3 aWxsIGJlIGlnbm9yZWQuCgpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5z Lm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51eC5p Ym0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJlcmdlciA8c3RlZmFuYkBsaW51eC5pYm0uY29t PgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0uY29tPgpSZXZp ZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4KLS0tCiBncnVi LWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICAzOCArKwogZ3J1Yi1j b3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3LmMgICAgICAgfCA0NTIgKysrKysrKysrKysr KysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0OTAgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUg MTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCgpkaWZmIC0tZ2l0 IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmggYi9ncnViLWNv cmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaAppbmRleCBiNjVkMzhmNzkuLmM2 ZTM1NjBlYiAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVu ZGVkc2lnLmgKKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2ln LmgKQEAgLTE3LDExICsxNyw0OSBAQAogICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2Vl IDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KICAqLwogCisjaW5jbHVkZSA8Z3J1Yi9j cnlwdG8uaD4KICNpbmNsdWRlIDxsaWJ0YXNuMS5oPgogCiBleHRlcm4gYXNuMV9ub2RlIGdydWJf Z251dGxzX2dudXRsc19hc247CiBleHRlcm4gYXNuMV9ub2RlIGdydWJfZ251dGxzX3BraXhfYXNu OwogCisjZGVmaW5lIEdSVUJfTUFYX09JRF9MRU4gICAgICAgICAzMgorCisvKiBBIFBLQ1MjNyBz aWduZWQgZGF0YSBzaWduZXIgaW5mby4gKi8KK3N0cnVjdCBwa2NzN19zaWduZXIKK3sKKyAgY29u c3QgZ2NyeV9tZF9zcGVjX3QgKmhhc2g7CisgIGdjcnlfbXBpX3Qgc2lnX21waTsKK307Cit0eXBl ZGVmIHN0cnVjdCBwa2NzN19zaWduZXIgZ3J1Yl9wa2NzN19zaWduZXJfdDsKKworLyoKKyAqIEEg UEtDUyM3IHNpZ25lZCBkYXRhIG1lc3NhZ2UuCisgKiBXZSBtYWtlIG5vIGF0dGVtcHQgdG8gbWF0 Y2ggaW50ZWxsaWdlbnRseSwgc28gd2UgZG9uJ3Qgc2F2ZSBhbnkgaW5mbyBhYm91dAorICogdGhl IHNpZ25lci4KKyAqLworc3RydWN0IHBrY3M3X2RhdGEKK3sKKyAgZ3J1Yl9pbnQzMl90IHNpZ25l cl9jb3VudDsKKyAgZ3J1Yl9wa2NzN19zaWduZXJfdCAqc2lnbmVyczsKK307Cit0eXBlZGVmIHN0 cnVjdCBwa2NzN19kYXRhIGdydWJfcGtjczdfZGF0YV90OworCisvKgorICogUGFyc2UgYSBQS0NT IzcgbWVzc2FnZSwgd2hpY2ggbXVzdCBiZSBhIHNpZ25lZCBkYXRhIG1lc3NhZ2UuCisgKiBUaGUg bWVzc2FnZSBtdXN0IGJlIGluICdzaWdidWYnIGFuZCBvZiBzaXplICdkYXRhX3NpemUnLiBUaGUg cmVzdWx0IGlzCisgKiBwbGFjZWQgaW4gJ21zZycsIHdoaWNoIG11c3QgYWxyZWFkeSBiZSBhbGxv Y2F0ZWQuCisgKi8KK2V4dGVybiBncnViX2Vycl90CitncnViX3BrY3M3X2RhdGFfcGFyc2UgKGNv bnN0IHZvaWQgKnNpZ2J1ZiwgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLCBncnViX3BrY3M3X2RhdGFf dCAqbXNnKTsKKworLyoKKyAqIFJlbGVhc2UgYWxsIHRoZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0 aCB0aGUgUEtDUyM3IG1lc3NhZ2UuCisgKiBJZiB0aGUgY2FsbGVyIGR5bmFtaWNhbGx5IGFsbG9j YXRlZCB0aGUgbWVzc2FnZSwgaXQgbXVzdCBmcmVlIGl0LgorICovCitleHRlcm4gdm9pZAorZ3J1 Yl9wa2NzN19kYXRhX3JlbGVhc2UgKGdydWJfcGtjczdfZGF0YV90ICptc2cpOworCiAvKiBEbyBs aWJ0YXNuMSBpbml0LiAqLwogZXh0ZXJuIGludAogZ3J1Yl9hc24xX2luaXQgKHZvaWQpOwpkaWZm IC0tZ2l0IGEvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL3BrY3M3LmMgYi9ncnViLWNv cmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAuLjAzMGE0NDNjOAotLS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9jb21t YW5kcy9hcHBlbmRlZHNpZy9wa2NzNy5jCkBAIC0wLDAgKzEsNDUyIEBACisvKgorICogIEdSVUIg IC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIw MjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIw LCAyMDIyLCAyMDI1IElCTSBDb3Jwb3JhdGlvbgorICoKKyAqICBHUlVCIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2Yg dGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiAgR1JVQiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCBH UlVCLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisK KyNpbmNsdWRlICJhcHBlbmRlZHNpZy5oIgorI2luY2x1ZGUgPGdydWIvbWlzYy5oPgorI2luY2x1 ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+CisjaW5j bHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0YXRpYyBjaGFyIGFzbjFfZXJyb3JbQVNOMV9NQVhfRVJS T1JfREVTQ1JJUFRJT05fU0laRV07CisKKy8qIFJGQyA1NjUyIHMgNS4xLiAqLworc3RhdGljIGNv bnN0IGNoYXIgKnNpZ25lZERhdGFfb2lkID0gIjEuMi44NDAuMTEzNTQ5LjEuNy4yIjsKKworLyog UkZDIDQwNTUgcyAyLjEuICovCitzdGF0aWMgY29uc3QgY2hhciAqc2hhMjU2X29pZCA9ICIyLjE2 Ljg0MC4xLjEwMS4zLjQuMi4xIjsKK3N0YXRpYyBjb25zdCBjaGFyICpzaGE1MTJfb2lkID0gIjIu MTYuODQwLjEuMTAxLjMuNC4yLjMiOworCitzdGF0aWMgZ3J1Yl9lcnJfdAorcHJvY2Vzc19jb250 ZW50IChncnViX3VpbnQ4X3QgKmNvbnRlbnQsIGdydWJfaW50MzJfdCBzaXplLCBncnViX3BrY3M3 X2RhdGFfdCAqbXNnKQoreworICBncnViX2ludDMyX3QgcmVzOworICBhc24xX25vZGUgc2lnbmVk X3BhcnQ7CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBhbGdvX29p ZFtHUlVCX01BWF9PSURfTEVOXTsKKyAgZ3J1Yl9pbnQzMl90IGFsZ29fb2lkX3NpemU7CisgIGdy dWJfaW50MzJfdCBhbGdvX2NvdW50OworICBncnViX2ludDMyX3Qgc2lnbmVyX2NvdW50OworICBn cnViX2ludDMyX3QgaTsKKyAgY2hhciB2ZXJzaW9uOworICBncnViX2ludDMyX3QgdmVyc2lvbl9z aXplID0gc2l6ZW9mICh2ZXJzaW9uKTsKKyAgZ3J1Yl91aW50OF90ICpyZXN1bHRfYnVmOworICBn cnViX2ludDMyX3QgcmVzdWx0X3NpemUgPSAwOworICBncnViX2ludDMyX3QgY3Jsc19zaXplID0g MDsKKyAgZ2NyeV9lcnJvcl90IGdjcnlfZXJyOworICBib29sIHNoYTI1Nl9pbl9kYSwgc2hhMjU2 X2luX3NpLCBzaGE1MTJfaW5fZGEsIHNoYTUxMl9pbl9zaTsKKyAgY2hhciAqZGFfcGF0aDsKKyAg Y2hhciAqc2lfc2lnX3BhdGg7CisgIGNoYXIgKnNpX2RhX3BhdGg7CisKKyAgcmVzID0gYXNuMV9j cmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5wa2NzLTctU2lnbmVk RGF0YSIsICZzaWduZWRfcGFydCk7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAg ICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIFBLQ1MjNyBzaWdu ZWQgcGFydCIpOworCisgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnNpZ25lZF9wYXJ0LCBj b250ZW50LCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU04xX0RFQ09ERV9G TEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykK KyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAor ICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHJlYWRpbmcgUEtDUyM3IHNpZ25lZCBkYXRh OiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAg IH0KKworICAvKgorICAgKiBTaWduZWREYXRhIDo6PSBTRVFVRU5DRSB7CisgICAqICAgICB2ZXJz aW9uIENNU1ZlcnNpb24sCisgICAqICAgICBkaWdlc3RBbGdvcml0aG1zIERpZ2VzdEFsZ29yaXRo bUlkZW50aWZpZXJzLAorICAgKiAgICAgZW5jYXBDb250ZW50SW5mbyBFbmNhcHN1bGF0ZWRDb250 ZW50SW5mbywKKyAgICogICAgIGNlcnRpZmljYXRlcyBbMF0gSU1QTElDSVQgQ2VydGlmaWNhdGVT ZXQgT1BUSU9OQUwsCisgICAqICAgICBjcmxzIFsxXSBJTVBMSUNJVCBSZXZvY2F0aW9uSW5mb0No b2ljZXMgT1BUSU9OQUwsCisgICAqICAgICBzaWduZXJJbmZvcyBTaWduZXJJbmZvcyB9CisgICAq LworCisgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2lnbmVkX3BhcnQsICJ2ZXJzaW9uIiwgJnZl cnNpb24sICZ2ZXJzaW9uX3NpemUpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiZXJyb3Ig cmVhZGluZyBzaWduZWREYXRhIHZlcnNpb246ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg IGFzbjFfc3RyZXJyb3IgKHJlcykpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owor ICAgIH0KKworICAvKiBTaWduYXR1cmUgdmVyc2lvbiBtdXN0IGJlIDEgYmVjYXVzZSBhcHBlbmRl ZCBzaWduYXR1cmUgb25seSBzdXBwb3J0IHYxLiAqLworICBpZiAodmVyc2lvbiAhPSAxKQorICAg IHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsCisgICAg ICAgICAgICAgICAgICAgICAgICAidW5leHBlY3RlZCBzaWduYXR1cmUgdmVyc2lvbiB2JWQsIG9u bHkgdjEgc3VwcG9ydGVkIiwgdmVyc2lvbik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3Bh cnQ7CisgICAgfQorCisgIC8qCisgICAqIGRpZ2VzdEFsZ29yaXRobXMgRGlnZXN0QWxnb3JpdGht SWRlbnRpZmllcnMKKyAgICoKKyAgICogRGlnZXN0QWxnb3JpdGhtSWRlbnRpZmllcnMgOjo9IFNF VCBPRiBEaWdlc3RBbGdvcml0aG1JZGVudGlmaWVyCisgICAqIERpZ2VzdEFsZ29yaXRobUlkZW50 aWZlciBpcyBhbiBYLjUwOSBBbGdvcml0aG1JZGVudGlmaWVyICgxMC4xLjEpCisgICAqCisgICAq IFJGQyA0MDU1IHMgMi4xOgorICAgKiBzaGEyNTZJZGVudGlmaWVyICBBbGdvcml0aG1JZGVudGlm aWVyICA6Oj0gIHsgaWQtc2hhMjU2LCBOVUxMIH0KKyAgICogc2hhNTEySWRlbnRpZmllciAgQWxn b3JpdGhtSWRlbnRpZmllciAgOjo9ICB7IGlkLXNoYTUxMiwgTlVMTCB9CisgICAqCisgICAqIFdl IG9ubHkgc3VwcG9ydCAxIGVsZW1lbnQgaW4gdGhlIHNldCwgYW5kIHdlIGRvIG5vdCBjaGVjayBw YXJhbWV0ZXJzIGF0bS4KKyAgICovCisgIHJlcyA9IGFzbjFfbnVtYmVyX29mX2VsZW1lbnRzIChz aWduZWRfcGFydCwgImRpZ2VzdEFsZ29yaXRobXMiLCAmYWxnb19jb3VudCk7CisgIGlmIChyZXMg IT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9TSUdOQVRVUkUsICJlcnJvciBjb3VudGluZyBudW1iZXIgb2YgZGlnZXN0IGFsZ29yaXRo bXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlcykpOwor ICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0KKworICBpZiAoYWxnb19jb3Vu dCA8PSAwKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdO QVRVUkUsICJhIG1pbmltdW0gb2YgMSBkaWdlc3QgYWxnb3JpdGhtIGlzIHJlcXVpcmVkIik7Cisg ICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIGlmIChhbGdvX2NvdW50 ID4gMikKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVN RU5URURfWUVULCAiYSBtYXhpbXVtIG9mIDIgZGlnZXN0IGFsZ29yaXRobXMgaXMgc3VwcG9ydGVk Iik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgfQorCisgIHNoYTI1Nl9p bl9kYSA9IGZhbHNlOworICBzaGE1MTJfaW5fZGEgPSBmYWxzZTsKKworICBmb3IgKGkgPSAwOyBp IDwgYWxnb19jb3VudDsgaSsrKQorICAgIHsKKyAgICAgIGRhX3BhdGggPSBncnViX3hhc3ByaW50 ZiAoImRpZ2VzdEFsZ29yaXRobXMuPyVkLmFsZ29yaXRobSIsIGkgKyAxKTsKKyAgICAgIGlmIChk YV9wYXRoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChH UlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3Vs ZCBub3QgYWxsb2NhdGUgcGF0aCBmb3IgZGlnZXN0IGFsZ29yaXRobSBwYXJzaW5nIHBhdGgiKTsK KyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgIH0KKworICAgICAg YWxnb19vaWRfc2l6ZSA9IHNpemVvZiAoYWxnb19vaWQpOworICAgICAgcmVzID0gYXNuMV9yZWFk X3ZhbHVlIChzaWduZWRfcGFydCwgZGFfcGF0aCwgYWxnb19vaWQsICZhbGdvX29pZF9zaXplKTsK KyAgICAgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgZXJy ID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImVycm9yIHJlYWRpbmcgZGln ZXN0IGFsZ29yaXRobTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3Ry ZXJyb3IgKHJlcykpOworICAgICAgICAgIGdydWJfZnJlZSAoZGFfcGF0aCk7CisgICAgICAgICAg Z290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgICAgICB9CisKKyAgICAgIGlmIChncnViX3N0 cm5jbXAgKHNoYTUxMl9vaWQsIGFsZ29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAwKQorICAgICAg ICB7CisgICAgICAgICAgaWYgKHNoYTUxMl9pbl9kYSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHNo YTUxMl9pbl9kYSA9IHRydWU7CisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTUxMiBzcGVjaWZpZWQgdHdpY2UgaW4gZGln ZXN0IGFsZ29yaXRobSBsaXN0Iik7CisgICAgICAgICAgICAgIGdydWJfZnJlZSAoZGFfcGF0aCk7 CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgICAgZWxzZSBpZiAoZ3J1Yl9zdHJuY21wIChzaGEyNTZfb2lkLCBhbGdv X29pZCwgYWxnb19vaWRfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChzaGEy NTZfaW5fZGEgPT0gZmFsc2UpCisgICAgICAgICAgICBzaGEyNTZfaW5fZGEgPSB0cnVlOworICAg ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIlNIQS0yNTYgc3BlY2lmaWVkIHR3aWNlIGluIGRpZ2VzdCBhbGdvcml0aG0gbGlzdCIpOwor ICAgICAgICAgICAgICBncnViX2ZyZWUgKGRhX3BhdGgpOworICAgICAgICAgICAgICBnb3RvIGNs ZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UK KyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBM RU1FTlRFRF9ZRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9ubHkgU0hBLTI1NiBh bmQgU0hBLTUxMiBoYXNoZXMgYXJlIHN1cHBvcnRlZCwgZm91bmQgT0lEICVzIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhbGdvX29pZCk7CisgICAgICAgICAgZ3J1Yl9mcmVlIChkYV9w YXRoKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVkX3BhcnQ7CisgICAgICAgIH0KKwor ICAgICAgZ3J1Yl9mcmVlIChkYV9wYXRoKTsKKyAgICB9CisKKyAgLyogQXQgdGhpcyBwb2ludCwg YXQgbGVhc3Qgb25lIG9mIHNoYXsyNTYsNTEyfV9pbl9kYSBtdXN0IGJlIHRydWUuICovCisKKyAg LyoKKyAgICogV2UgaWdub3JlIHRoZSBjZXJ0aWZpY2F0ZXMsIGJ1dCB3ZSBkb24ndCBwZXJtaXQg Q1JMcy4KKyAgICogQSBDUkwgZW50cnkgbWlnaHQgYmUgcmV2b2tpbmcgdGhlIGNlcnRpZmljYXRl IHdlJ3JlIHVzaW5nLCBhbmQgd2UgaGF2ZQorICAgKiBubyB3YXkgb2YgZGVhbGluZyB3aXRoIHRo YXQgYXQgdGhlIG1vbWVudC4KKyAgICovCisgIHJlcyA9IGFzbjFfcmVhZF92YWx1ZSAoc2lnbmVk X3BhcnQsICJjcmxzIiwgTlVMTCwgJmNybHNfc2l6ZSk7CisgIGlmIChyZXMgIT0gQVNOMV9FTEVN RU5UX05PVF9GT1VORCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9O T1RfSU1QTEVNRU5URURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAgIlBLQ1MjNyBtZXNz YWdlcyB3aXRoIGVtYmVkZGVkIENSTHMgYXJlIG5vdCBzdXBwb3J0ZWQiKTsKKyAgICAgIGdvdG8g Y2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisKKyAgLyogUmVhZCB0aGUgc2lnbmF0dXJlcyAq LworICByZXMgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoc2lnbmVkX3BhcnQsICJzaWduZXJJ bmZvcyIsICZzaWduZXJfY291bnQpOworICBpZiAocmVzICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLCAiZXJyb3Ig Y291bnRpbmcgbnVtYmVyIG9mIHNpZ25lcnM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAg IGFzbjFfc3RyZXJyb3IgKHJlcykpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0Owor ICAgIH0KKworICBpZiAoc2lnbmVyX2NvdW50IDw9IDApCisgICAgeworICAgICAgZXJyID0gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImEgbWluaW11bSBvZiAxIHNpZ25lciBp cyByZXF1aXJlZCIpOworICAgICAgZ290byBjbGVhbnVwX3NpZ25lZF9wYXJ0OworICAgIH0KKwor ICBtc2ctPnNpZ25lcnMgPSBncnViX2NhbGxvYyAoc2lnbmVyX2NvdW50LCBzaXplb2YgKGdydWJf cGtjczdfc2lnbmVyX3QpKTsKKyAgaWYgKG1zZy0+c2lnbmVycyA9PSBOVUxMKQorICAgIHsKKyAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAg ICAgICAgICAgICAgICAiY291bGQgbm90IGFsbG9jYXRlIHNwYWNlIGZvciAlZCBzaWduZXJzIiwg c2lnbmVyX2NvdW50KTsKKyAgICAgIGdvdG8gY2xlYW51cF9zaWduZWRfcGFydDsKKyAgICB9CisK KyAgbXNnLT5zaWduZXJfY291bnQgPSAwOworICBmb3IgKGkgPSAwOyBpIDwgc2lnbmVyX2NvdW50 OyBpKyspCisgICAgeworICAgICAgc2lfZGFfcGF0aCA9IGdydWJfeGFzcHJpbnRmICgic2lnbmVy SW5mb3MuPyVkLmRpZ2VzdEFsZ29yaXRobS5hbGdvcml0aG0iLCBpICsgMSk7CisgICAgICBpZiAo c2lfZGFfcGF0aCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAi Y291bGQgbm90IGFsbG9jYXRlIHBhdGggZm9yIHNpZ25lciAlZCdzIGRpZ2VzdCBhbGdvcml0aG0g cGFyc2luZyBwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpKTsKKyAgICAgICAg ICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAgYWxnb19vaWRf c2l6ZSA9IHNpemVvZiAoYWxnb19vaWQpOworICAgICAgcmVzID0gYXNuMV9yZWFkX3ZhbHVlIChz aWduZWRfcGFydCwgc2lfZGFfcGF0aCwgYWxnb19vaWQsICZhbGdvX29pZF9zaXplKTsKKyAgICAg IGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiZXJyb3IgcmVhZGluZyBzaWduZXIgJWQncyBkaWdlc3QgYWxnb3JpdGhtOiAlcyIsIGks IGFzbjFfc3RyZXJyb3IgKHJlcykpOworICAgICAgICAgIGdydWJfZnJlZSAoc2lfZGFfcGF0aCk7 CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAgICB9CisKKyAgICAg IGdydWJfZnJlZSAoc2lfZGFfcGF0aCk7CisKKyAgICAgIGlmIChncnViX3N0cm5jbXAgKHNoYTUx Ml9vaWQsIGFsZ29fb2lkLCBhbGdvX29pZF9zaXplKSA9PSAwKQorICAgICAgICB7CisgICAgICAg ICAgaWYgKHNoYTUxMl9pbl9kYSA9PSBmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgInNpZ25lciAlZCBjbGFpbXMgYSBTSEEtNTEyIHNpZ25hdHVy ZSB3aGljaCB3YXMgbm90ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNwZWNp ZmllZCBpbiB0aGUgb3V0ZXIgRGlnZXN0QWxnb3JpdGhtcyIsIGkpOworICAgICAgICAgICAgICBn b3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgICAgICB9CisgICAgICAgICAgZWxzZQor ICAgICAgICAgICAgeworICAgICAgICAgICAgICBzaGE1MTJfaW5fc2kgPSB0cnVlOworICAgICAg ICAgICAgICBtc2ctPnNpZ25lcnNbaV0uaGFzaCA9IGdydWJfY3J5cHRvX2xvb2t1cF9tZF9ieV9u YW1lICgic2hhNTEyIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYg KGdydWJfc3RybmNtcCAoc2hhMjU2X29pZCwgYWxnb19vaWQsIGFsZ29fb2lkX3NpemUpID09IDAp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAoc2hhMjU2X2luX2RhID09IGZhbHNlKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lH TkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2lnbmVyICVkIGNsYWlt cyBhIFNIQS0yNTYgc2lnbmF0dXJlIHdoaWNoIHdhcyBub3QgIgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAic3BlY2lmaWVkIGluIHRoZSBvdXRlciBEaWdlc3RBbGdvcml0aG1zIiwg aSk7CisgICAgICAgICAgICAgIGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIHNoYTI1Nl9p bl9zaSA9IHRydWU7CisgICAgICAgICAgICAgIG1zZy0+c2lnbmVyc1tpXS5oYXNoID0gZ3J1Yl9j cnlwdG9fbG9va3VwX21kX2J5X25hbWUgKCJzaGEyNTYiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAib25seSBTSEEtMjU2IGFuZCBTSEEtNTEyIGhhc2hlcyBhcmUgc3VwcG9ydGVkLCBmb3VuZCBP SUQgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsZ29fb2lkKTsKKyAgICAgICAg ICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgICAgIH0KKworICAgICAgaWYgKG1zZy0+ c2lnbmVyc1tpXS5oYXNoID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICJIYXNoIGFsZ29yaXRobSBmb3Igc2lnbmVyICVkIChPSUQgJXMpIG5vdCBsb2FkZWQiLCBp LCBhbGdvX29pZCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lckluZm9zOworICAgICAg ICB9CisKKyAgICAgIHNpX3NpZ19wYXRoID0gZ3J1Yl94YXNwcmludGYgKCJzaWduZXJJbmZvcy4/ JWQuc2lnbmF0dXJlIiwgaSArIDEpOworICAgICAgaWYgKHNpX3NpZ19wYXRoID09IE5VTEwpCisg ICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgcGF0 aCBmb3Igc2lnbmVyICVkJ3Mgc2lnbmF0dXJlIHBhcnNpbmcgcGF0aCIsIGkpOworICAgICAgICAg IGdvdG8gY2xlYW51cF9zaWduZXJJbmZvczsKKyAgICAgICAgfQorCisgICAgICByZXN1bHRfYnVm ID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChzaWduZWRfcGFydCwgc2lfc2lnX3BhdGgs ICJzaWduYXR1cmUgZGF0YSIsICZyZXN1bHRfc2l6ZSk7CisgICAgICBncnViX2ZyZWUgKHNpX3Np Z19wYXRoKTsKKworICAgICAgaWYgKHJlc3VsdF9idWYgPT0gTlVMTCkKKyAgICAgICAgeworICAg ICAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICAgICAgZ290byBjbGVhbnVwX3NpZ25lcklu Zm9zOworICAgICAgICB9CisKKyAgICAgIGdjcnlfZXJyID0gX2djcnlfbXBpX3NjYW4gKCYobXNn LT5zaWduZXJzW2ldLnNpZ19tcGkpLCBHQ1JZTVBJX0ZNVF9VU0csCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZXN1bHRfYnVmLCByZXN1bHRfc2l6ZSwgTlVMTCk7CisgICAgICBn cnViX2ZyZWUgKHJlc3VsdF9idWYpOworCisgICAgICBpZiAoZ2NyeV9lcnIgIT0gR1BHX0VSUl9O T19FUlJPUikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJS X0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGxvYWRp bmcgc2lnbmF0dXJlICVkIGludG8gTVBJIHN0cnVjdHVyZTogJWQiLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGksIGdjcnlfZXJyKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfc2lnbmVy SW5mb3M7CisgICAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIFVzZSBtc2ctPnNpZ25lcl9j b3VudCB0byB0cmFjayBmdWxseSBwb3B1bGF0ZWQgc2lnbmVySW5mb3Mgc28gd2UKKyAgICAgICAq IGtub3cgaG93IG1hbnkgd2UgbmVlZCB0byBjbGVhbiB1cC4KKyAgICAgICAqLworICAgICAgbXNn LT5zaWduZXJfY291bnQrKzsKKyAgICB9CisKKyAgLyoKKyAgICogRmluYWwgY29uc2lzdGVuY3kg Y2hlY2sgb2Ygc2lnbmVySW5mby4qLmRpZ2VzdEFsZ29yaXRobSB2cworICAgKiBkaWdlc3RBbGdv cml0aG1zLiouYWxnb3JpdGhtLiBBbiBhbGdvcml0aG0gbXVzdCBiZSBwcmVzZW50IGluIGJvdGgK KyAgICogZGlnZXN0QWxnb3JpdGhtcyBhbmQgc2lnbmVySW5mbyBvciBpbiBuZWl0aGVyLiBXZSBo YXZlIGFscmVhZHkgY2hlY2tlZAorICAgKiBmb3IgYW4gYWxnb3JpdGhtIGluIHNpZ25lckluZm8g dGhhdCBpcyBub3QgaW4gZGlnZXN0QWxnb3JpdGhtcywgaGVyZSB3ZQorICAgKiBjaGVjayBmb3Ig YWxnb3JpdGhtcyBpbiBkaWdlc3RBbGdvcml0aG1zIGJ1dCBub3QgaW4gc2lnbmVySW5mb3MuCisg ICAqLworICBpZiAoc2hhNTEyX2luX2RhID09IHRydWUgJiYgc2hhNTEyX2luX3NpID09IGZhbHNl KQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUs CisgICAgICAgICAgICAgICAgICAgICAgICAiU0hBLTUxMiBzcGVjaWZpZWQgaW4gRGlnZXN0QWxn b3JpdGhtcyBidXQgZGlkIG5vdCBhcHBlYXIgaW4gU2lnbmVySW5mb3MiKTsKKyAgICAgIGdvdG8g Y2xlYW51cF9zaWduZXJJbmZvczsKKyAgICB9CisKKyAgaWYgKHNoYTI1Nl9pbl9kYSA9PSB0cnVl ICYmIHNoYTI1Nl9pbl9zaSA9PSBmYWxzZSkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAgICAgICAgIlNIQS0y NTYgc3BlY2lmaWVkIGluIERpZ2VzdEFsZ29yaXRobXMgYnV0IGRpZCBub3QgYXBwZWFyIGluIFNp Z25lckluZm9zIik7CisgICAgICBnb3RvIGNsZWFudXBfc2lnbmVySW5mb3M7CisgICAgfQorCisg IGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJnNpZ25lZF9wYXJ0KTsKKworICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKworIGNsZWFudXBfc2lnbmVySW5mb3M6CisgIGZvciAoaSA9IDA7IGkgPCBtc2ct PnNpZ25lcl9jb3VudDsgaSsrKQorICAgIF9nY3J5X21waV9yZWxlYXNlIChtc2ctPnNpZ25lcnNb aV0uc2lnX21waSk7CisKKyAgZ3J1Yl9mcmVlIChtc2ctPnNpZ25lcnMpOworCisgY2xlYW51cF9z aWduZWRfcGFydDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmc2lnbmVkX3BhcnQpOworCisg IHJldHVybiBlcnI7Cit9CisKK2dydWJfZXJyX3QKK2dydWJfcGtjczdfZGF0YV9wYXJzZSAoY29u c3Qgdm9pZCAqc2lnYnVmLCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfcGtjczdfZGF0YV90 ICptc2cpCit7CisgIGdydWJfaW50MzJfdCByZXM7CisgIGFzbjFfbm9kZSBjb250ZW50X2luZm87 CisgIGdydWJfZXJyX3QgZXJyID0gR1JVQl9FUlJfTk9ORTsKKyAgY2hhciBjb250ZW50X29pZFtH UlVCX01BWF9PSURfTEVOXTsKKyAgZ3J1Yl91aW50OF90ICpjb250ZW50OworICBncnViX2ludDMy X3QgY29udGVudF9zaXplOworICBncnViX2ludDMyX3QgY29udGVudF9vaWRfc2l6ZSA9IHNpemVv ZiAoY29udGVudF9vaWQpOworICBncnViX2ludDMyX3Qgc2l6ZSA9IChncnViX2ludDMyX3QpIGRh dGFfc2l6ZTsKKworICBpZiAoZGF0YV9zaXplID4gR1JVQl9VSU5UX01BWCkKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLAorICAgICAgICAgICAgICAgICAgICAg ICAiY2Fubm90IHBhcnNlIGEgUEtDUyM3IG1lc3NhZ2Ugd2hlcmUgZGF0YSBzaXplID4gR1JVQl9V SU5UX01BWCIpOworCisgIHJlcyA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdydWJfZ251dGxzX3Br aXhfYXNuLCAiUEtJWDEucGtjcy03LUNvbnRlbnRJbmZvIiwgJmNvbnRlbnRfaW5mbyk7CisgIGlm IChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBB U04uMSBzdHJ1Y3R1cmUgZm9yIFBLQ1MjNyBkYXRhOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgIGFzbjFfc3RyZXJyb3IgKHJlcykpOworCisgIHJlcyA9IGFzbjFfZGVyX2RlY29kaW5nMiAo JmNvbnRlbnRfaW5mbywgc2lnYnVmLCAmc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIgfCBBU04xX0RFQ09ERV9GTEFHX0FMTE9XX1BB RERJTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9lcnJvcik7CisgIGlmIChy ZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9TSUdOQVRVUkUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgZGVjb2Rp bmcgUEtDUyM3IG1lc3NhZ2UgREVSOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVh bnVwOworICAgIH0KKworICAvKgorICAgKiBDb250ZW50SW5mbyA6Oj0gU0VRVUVOQ0UgeworICAg KiAgICAgY29udGVudFR5cGUgQ29udGVudFR5cGUsCisgICAqICAgICBjb250ZW50IFswXSBFWFBM SUNJVCBBTlkgREVGSU5FRCBCWSBjb250ZW50VHlwZSB9CisgICAqCisgICAqIENvbnRlbnRUeXBl IDo6PSBPQkpFQ1QgSURFTlRJRklFUgorICAgKi8KKyAgcmVzID0gYXNuMV9yZWFkX3ZhbHVlIChj b250ZW50X2luZm8sICJjb250ZW50VHlwZSIsIGNvbnRlbnRfb2lkLCAmY29udGVudF9vaWRfc2l6 ZSk7CisgIGlmIChyZXMgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJlcnJvciByZWFkaW5nIFBLQ1MjNyBjb250 ZW50IHR5cGU6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJl cykpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICAvKiBPSUQgZm9yIFNpZ25lZERh dGEgZGVmaW5lZCBpbiA1LjEuICovCisgIGlmIChncnViX3N0cm5jbXAgKHNpZ25lZERhdGFfb2lk LCBjb250ZW50X29pZCwgY29udGVudF9vaWRfc2l6ZSkgIT0gMCkKKyAgICB7CisgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfU0lHTkFUVVJFLAorICAgICAgICAgICAgICAgICAg ICAgICAgInVuZXhwZWN0ZWQgY29udGVudCB0eXBlIGluIFBLQ1MjNyBtZXNzYWdlOiBPSUQgJXMi LCBjb250ZW50X29pZCk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGNvbnRlbnQg PSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKGNvbnRlbnRfaW5mbywgImNvbnRlbnQiLCAi UEtDUyM3IG1lc3NhZ2UgY29udGVudCIsICZjb250ZW50X3NpemUpOworICBpZiAoY29udGVudCA9 PSBOVUxMKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFu dXA7CisgICAgfQorCisgIGVyciA9IHByb2Nlc3NfY29udGVudCAoY29udGVudCwgY29udGVudF9z aXplLCBtc2cpOworICBncnViX2ZyZWUgKGNvbnRlbnQpOworCisgY2xlYW51cDoKKyAgYXNuMV9k ZWxldGVfc3RydWN0dXJlICgmY29udGVudF9pbmZvKTsKKworICByZXR1cm4gZXJyOworfQorCisv KgorICogUmVsZWFzZSBhbGwgdGhlIHN0b3JhZ2UgYXNzb2NpYXRlZCB3aXRoIHRoZSBQS0NTIzcg bWVzc2FnZS4KKyAqIElmIHRoZSBjYWxsZXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBtZXNz YWdlLCBpdCBtdXN0IGZyZWUgaXQuCisgKi8KK3ZvaWQKK2dydWJfcGtjczdfZGF0YV9yZWxlYXNl IChncnViX3BrY3M3X2RhdGFfdCAqbXNnKQoreworICBncnViX2ludDMyX3QgaTsKKworICBmb3Ig KGkgPSAwOyBpIDwgbXNnLT5zaWduZXJfY291bnQ7IGkrKykKKyAgICBfZ2NyeV9tcGlfcmVsZWFz ZSAobXNnLT5zaWduZXJzW2ldLnNpZ19tcGkpOworCisgIGdydWJfZnJlZSAobXNnLT5zaWduZXJz KTsKK30KLS0gCjIuNTAuMSAoQXBwbGUgR2l0LTE1NSkKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpHcnViLWRldmVsIG1haWxpbmcgbGlzdApHcnViLWRl dmVsQGdudS5vcmcKaHR0cHM6Ly9saXN0cy5nbnUub3JnL21haWxtYW4vbGlzdGluZm8vZ3J1Yi1k ZXZlbAo=