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 74758C83F26 for ; Tue, 29 Jul 2025 12:43:10 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ugjcM-0003Dl-9t; Tue, 29 Jul 2025 08:39:42 -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 1ugjba-0002De-JG for grub-devel@gnu.org; Tue, 29 Jul 2025 08:38:56 -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 1ugjbV-0003AN-JV for grub-devel@gnu.org; Tue, 29 Jul 2025 08:38:53 -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 56T4YvjB022375; Tue, 29 Jul 2025 12:38:47 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=+bw9i115zX3Bi9GrH 3TFa6dHQP/7kluGTMRXCNavFjI=; b=aP3U7X73qZu41wsRd1Q9EAx5q3wTbk9WE klOwx0BrTuGxmVR/Sg88s4cMZwQjMVDK/qhLCDwLGbWO1I+DB0a/0XigthymYkUY LBRc3OY0I6vKX9ekz2vx5TCVmS7+jFBC1O3ggOu6QCUQeWmBnknBFpEhAgdQTuIb FdC4U6ixD/iEXOPmYtBFlrmF/Q2Xc14Jr+40tAlnSKXqnpsBZlrMaak1b3MHPVUW srV/x+8ruCELJt+0t5nfRoUc4vP3qxQrLOUnRSNamD/DhJZzetHC9gVDn6Q7YCNt ufl7gz1xY/HzfPTRGSka8+uqavNveBuuZ1v+JHBwSzwdkCGNQfnhA== Received: from ppma12.dal12v.mail.ibm.com (dc.9e.1632.ip4.static.sl-reverse.com [50.22.158.220]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 484qd5emju-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 29 Jul 2025 12:38:46 +0000 (GMT) Received: from pps.filterd (ppma12.dal12v.mail.ibm.com [127.0.0.1]) by ppma12.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 56T81hRU017965; Tue, 29 Jul 2025 12:38:45 GMT Received: from smtprelay07.fra02v.mail.ibm.com ([9.218.2.229]) by ppma12.dal12v.mail.ibm.com (PPS) with ESMTPS id 4859btjgrp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 29 Jul 2025 12:38:45 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay07.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 56TCcgs853084434 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 29 Jul 2025 12:38:42 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id EE14E20049; Tue, 29 Jul 2025 12:38:41 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8678120040; Tue, 29 Jul 2025 12:38:39 +0000 (GMT) Received: from localhost.localdomain (unknown [9.39.21.169]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Tue, 29 Jul 2025 12:38:39 +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 Subject: [PATCH v6 10/20] appended signatures: Support verifying appended signatures Date: Tue, 29 Jul 2025 18:06:59 +0530 Message-Id: <20250729123709.83349-11-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.39.5 (Apple Git-154) In-Reply-To: <20250729123709.83349-1-sudhakar@linux.ibm.com> References: <20250729123709.83349-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzI5MDA5NSBTYWx0ZWRfX9/z1WHCvC30M glEZMeJE1Wn997iBdeH2DJ5ofnjbdPJDr4loG6zIOr3Faw5+U4g0sKtR2+RLiYE5YvaLzMxDK0J h1tWZB29kUie1yWPqtQOcCSuXXTp1cEXrCvpkWSOxm4ImJjyz8EWpHfopx7b8O6rXZChszMy3a/ U2IQjzhmOz95hUmtzgdHcYoxbp0WLttBHE1ruIozBtdnp2gYYM6T5vKtQ8cA9suNjKnR3LKzyLN POwihofr6kPGmf9vCQeUkNUfxqjvAUTJxw3x3BeFJx+Sdwarmw3WQHJN3n6uv9U1cG6mT8oSNE6 Ja1M6AqtuZ58npAcpEhhrNMwvlmBZ7Kw+uxaawZrwEySRCYPrIyQJNNjWi7OxCR5cbpFwcqaaCQ TS6VA3dnzdWqDkJN0YINgBbl4byDQFXkIuV9UIOk0vK8sCktNcN42iMc7qMBJ1fD8n/ijWYa X-Proofpoint-ORIG-GUID: onRXKpz3hOOaRGHhuKdR29C-i-1-hLPm X-Authority-Analysis: v=2.4 cv=B9q50PtM c=1 sm=1 tr=0 ts=6888c0d6 cx=c_pps a=bLidbwmWQ0KltjZqbj+ezA==:117 a=bLidbwmWQ0KltjZqbj+ezA==:17 a=Wb1JkmetP80A:10 a=mDV3o1hIAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=L-7r7g6ewRJKgEizkgUA:9 a=WlT8qwTXB_Kj6um4hl3b:22 X-Proofpoint-GUID: onRXKpz3hOOaRGHhuKdR29C-i-1-hLPm X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-07-29_03,2025-07-28_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 priorityscore=1501 mlxscore=0 spamscore=0 mlxlogscore=999 suspectscore=0 clxscore=1015 impostorscore=0 bulkscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507290095 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.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: The development of GNU GRUB Content-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 QnVpbGRpbmcgb24gdGhlIHBhcnNlcnMgYW5kIHRoZSBhYmlsaXR5IHRvIGVtYmVkIFguNTA5IGNl cnRpZmljYXRlcywgYXMKd2VsbCBhcyB0aGUgZXhpc3RpbmcgZ2NyeXB0IGZ1bmN0aW9uYWxpdHks IGFkZCBhIG1vZHVsZSBmb3IgdmVyaWZ5aW5nCmFwcGVuZGVkIHNpZ25hdHVyZXMuCgpUaGlzIGlu Y2x1ZGVzIGEgdmVyaWZpZXIgdGhhdCByZXF1aXJlcyB0aGF0IExpbnV4IGtlcm5lbHMgYW5kCkdS VUIgbW9kdWxlcyBoYXZlIGFwcGVuZGVkIHNpZ25hdHVyZXMsIGFuZCBjb21tYW5kcyB0byBtYW5h Z2UgdGhlCmxpc3Qgb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgZm9yIHZlcmlmaWNhdGlvbi4KClZl cmlmaWNhdGlvbiBtdXN0IGJlIGVuYWJsZWQgYnkgc2V0dGluZyBjaGVja19hcHBlbmRlZF9zaWdu YXR1cmVzLiBJZgpzZWN1cmUgYm9vdCBpcyBlbmFibGVkIHdpdGggZW5mb3JjZWQgbW9kZSB3aGVu IHRoZSBtb2R1bGUgaXMgbG9hZGVkLAp2ZXJpZmljYXRpb24gd2lsbCBiZSBlbmFibGVkIGFuZCBs b2NrZWQgYXV0b21hdGljYWxseS4gSWYgdmVyaWZpY2F0aW9uCmlzIGVuYWJsZWQsIGV4dHJhY3Qg dHJ1c3RlZCBrZXlzIGZyb20gdGhlIEdSVUIgRUxGIE5vdGUgYW5kIHN0b3JlIHRoZW0gaW4gdGhl IGRiLgoKQXMgd2l0aCB0aGUgUEdQIHZlcmlmaWVyLCBpdCBpcyBub3QgYSBjb21wbGV0ZSBzZWN1 cmUtYm9vdCBzb2x1dGlvbjoKb3RoZXIgbWVjaGFuaXNtcywgc3VjaCBhcyBhIHBhc3N3b3JkIG9y IGxvY2tkb3duLCBtdXN0IGJlIHVzZWQgdG8gZW5zdXJlCnRoYXQgYSB1c2VyIGNhbm5vdCBkcm9w IHRvIHRoZSBHUlVCIHNoZWxsIGFuZCBkaXNhYmxlIHZlcmlmaWNhdGlvbi4KCkludHJvZHVjaW5n IHRoZSBmb2xsb3dpbmcgR1JVQiBjb21tYW5kcy4KCiAxLiBhcHBlbmRfbGlzdF9kYjoKICAgICAg U2hvdyB0aGUgbGlzdCBvZiB0cnVzdGVkIGNlcnRpZmljYXRlcyBmcm9tIHRoZSBkYiBsaXN0CiAy LiBhcHBlbmRfYWRkX2RiX2NlcnQ6CiAgICAgIEFkZCB0aGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0 byB0aGUgZGIgbGlzdAogMy4gYXBwZW5kX3JtX2RieF9jZXJ0OgogICAgICBSZW1vdmUgdGhlIGRp c3RydXN0ZWQgY2VydGlmaWNhdGUgZnJvbSB0aGUgZGIgbGlzdAogNC4gYXBwZW5kX3ZlcmlmeToK ICAgICAgVmVyaWZ5IHRoZSBzaWduZWQgZmlsZSB1c2luZyBkYiBsaXN0CgpTaWduZWQtb2ZmLWJ5 OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIg S3VwcHVzYW15IDxzdWRoYWthckBsaW51eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogU3RlZmFuIEJl cmdlciA8c3RlZmFuYkBsaW51eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4g PGF2bmlzaEBsaW51eC5pYm0uY29tPgotLS0KIGdydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZiAg ICAgICAgICAgICAgICAgIHwgIDE0ICsKIGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9h cHBlbmRlZHNpZy5jIHwgNjkxICsrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvZ3J1Yi9maWxl LmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICsKIDMgZmlsZXMgY2hhbmdlZCwgNzA3 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBncnViLWNvcmUvY29tbWFuZHMvYXBw ZW5kZWRzaWcvYXBwZW5kZWRzaWcuYwoKZGlmZiAtLWdpdCBhL2dydWItY29yZS9NYWtlZmlsZS5j b3JlLmRlZiBiL2dydWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgppbmRleCBiNzJmMzIyYjEuLjIz ZmRkYmE5YSAxMDA2NDQKLS0tIGEvZ3J1Yi1jb3JlL01ha2VmaWxlLmNvcmUuZGVmCisrKyBiL2dy dWItY29yZS9NYWtlZmlsZS5jb3JlLmRlZgpAQCAtOTgwLDYgKzk4MCwyMCBAQCBtb2R1bGUgPSB7 CiAgIGNwcGZsYWdzID0gJyQoQ1BQRkxBR1NfR0NSWSknOwogfTsKIAorbW9kdWxlID0geworICBu YW1lID0gYXBwZW5kZWRzaWc7CisgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVu ZGVkc2lnLmM7CisgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3g1MDkuYzsKKyAgY29t bW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcvcGtjczcuYzsKKyAgY29tbW9uID0gY29tbWFuZHMv YXBwZW5kZWRzaWcvYXNuMXV0aWwuYzsKKyAgY29tbW9uID0gY29tbWFuZHMvYXBwZW5kZWRzaWcv Z251dGxzX2FzbjFfdGFiLmM7CisgIGNvbW1vbiA9IGNvbW1hbmRzL2FwcGVuZGVkc2lnL3BraXhf YXNuMV90YWIuYzsKKyAgZW5hYmxlID0gcG93ZXJwY19pZWVlMTI3NTsKKyAgY2ZsYWdzID0gJyQo Q0ZMQUdTX0dDUlkpIC1Xbm8tcmVkdW5kYW50LWRlY2xzJzsKKyAgY3BwZmxhZ3MgPSAnJChDUFBG TEFHU19HQ1JZKSAtSSQoc3JjZGlyKS9saWIvbGlidGFzbjEtZ3J1Yic7CisgIGRlcGVuZHMgPSBj cnlwdG8sIGdjcnlfcnNhLCBnY3J5X3NoYTI1NiwgZ2NyeV9zaGE1MTIsIG1waSwgYXNuMTsKK307 CisKIG1vZHVsZSA9IHsKICAgbmFtZSA9IGhkcGFybTsKICAgY29tbW9uID0gY29tbWFuZHMvaGRw YXJtLmM7CmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5k ZWRzaWcuYyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMC4uNDhmMWVjOTRlCi0tLSAvZGV2L251 bGwKKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2lnL2FwcGVuZGVkc2lnLmMKQEAg LTAsMCArMSw2OTEgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRl cgorICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMSwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjEsIDIwMjIsIDIwMjUgSUJN IENvcnBvcmF0aW9uCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IK KyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNl ZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIv dHlwZXMuaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL21tLmg+Cisj aW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxncnViL2RsLmg+CisjaW5jbHVkZSA8Z3J1 Yi9maWxlLmg+CisjaW5jbHVkZSA8Z3J1Yi9jb21tYW5kLmg+CisjaW5jbHVkZSA8Z3J1Yi9jcnlw dG8uaD4KKyNpbmNsdWRlIDxncnViL2kxOG4uaD4KKyNpbmNsdWRlIDxncnViL2djcnlwdC9nY3J5 cHQuaD4KKyNpbmNsdWRlIDxncnViL2tlcm5lbC5oPgorI2luY2x1ZGUgPGdydWIvZXh0Y21kLmg+ CisjaW5jbHVkZSA8Z3J1Yi92ZXJpZnkuaD4KKyNpbmNsdWRlIDxsaWJ0YXNuMS5oPgorI2luY2x1 ZGUgPGdydWIvZW52Lmg+CisjaW5jbHVkZSA8Z3J1Yi9pZWVlMTI3NS9pZWVlMTI3NS5oPgorCisj aW5jbHVkZSAiYXBwZW5kZWRzaWcuaCIKKworR1JVQl9NT0RfTElDRU5TRSAoIkdQTHYzKyIpOwor CisvKiBQdWJsaWMga2V5IHR5cGUuICovCisjZGVmaW5lIEdSVUJfUEtFWV9JRF9QS0NTNyAyCisK Ky8qIEFwcGVuZGVkIHNpZ25hdHVyZSBtYWdpYyBzdHJpbmcuICovCitzdGF0aWMgY29uc3QgY2hh ciBtYWdpY1tdID0gIn5Nb2R1bGUgc2lnbmF0dXJlIGFwcGVuZGVkflxuIjsKKworLyoKKyAqIFRo aXMgc3RydWN0dXJlIGlzIGV4dHJhY3RlZCBmcm9tIHNjcmlwdHMvc2lnbi1maWxlLmMgaW4gdGhl IGxpbnV4IGtlcm5lbAorICogc291cmNlLiBJdCB3YXMgbGljZW5zZWQgYXMgTEdQTHYyLjErLCB3 aGljaCBpcyBHUEx2MysgY29tcGF0aWJsZS4KKyAqLworc3RydWN0IG1vZHVsZV9zaWduYXR1cmUK K3sKKyAgZ3J1Yl91aW50OF90IGFsZ287ICAgICAgIC8qIFB1YmxpYy1rZXkgY3J5cHRvIGFsZ29y aXRobSBbMF0uICovCisgIGdydWJfdWludDhfdCBoYXNoOyAgICAgICAvKiBEaWdlc3QgYWxnb3Jp dGhtIFswXS4gKi8KKyAgZ3J1Yl91aW50OF90IGlkX3R5cGU7ICAgIC8qIEtleSBpZGVudGlmaWVy IHR5cGUgW0dSVUJfUEtFWV9JRF9QS0NTN10uICovCisgIGdydWJfdWludDhfdCBzaWduZXJfbGVu OyAvKiBMZW5ndGggb2Ygc2lnbmVyJ3MgbmFtZSBbMF0uICovCisgIGdydWJfdWludDhfdCBrZXlf aWRfbGVuOyAvKiBMZW5ndGggb2Yga2V5IGlkZW50aWZpZXIgWzBdLiAqLworICBncnViX3VpbnQ4 X3QgX19wYWRbM107CisgIGdydWJfdWludDMyX3Qgc2lnX2xlbjsgICAvKiBMZW5ndGggb2Ygc2ln bmF0dXJlIGRhdGEuICovCit9IEdSVUJfUEFDS0VEOworCisvKiBUaGlzIHJlcHJlc2VudHMgYW4g ZW50aXJlLCBwYXJzZWQsIGFwcGVuZGVkIHNpZ25hdHVyZS4gKi8KK3N0cnVjdCBncnViX2FwcGVu ZGVkX3NpZ25hdHVyZQoreworICBncnViX3NpemVfdCBzaWduYXR1cmVfbGVuOyAgICAgICAgICAg IC8qIExlbmd0aCBvZiBQS0NTIzcgZGF0YSArIG1ldGFkYXRhICsgbWFnaWMuICovCisgIHN0cnVj dCBtb2R1bGVfc2lnbmF0dXJlIHNpZ19tZXRhZGF0YTsgLyogTW9kdWxlIHNpZ25hdHVyZSBtZXRh ZGF0YS4gKi8KKyAgc3RydWN0IHBrY3M3X3NpZ25lZERhdGEgcGtjczc7ICAgICAgICAvKiBQYXJz ZWQgUEtDUyM3IGRhdGEuICovCit9OworCisvKiBUcnVzdGVkIGNlcnRpZmljYXRlcyBmb3IgdmVy aWZ5aW5nIGFwcGVuZGVkIHNpZ25hdHVyZXMuICovCitzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAq ZGI7CisKKy8qIEFwcGVuZGVkIHNpZ25hdHVyZSBzaXplLiAqLworc3RhdGljIGdydWJfc2l6ZV90 IGFwcGVuZF9zaWdfbGVuID0gMDsKKworLyoKKyAqIFNpZ25hdHVyZSB2ZXJpZmljYXRpb24gZmxh ZyAoY2hlY2tfc2lncykuCisgKiBjaGVja19zaWdzOiBmYWxzZQorICogIC0gTm8gc2lnbmF0dXJl IHZlcmlmaWNhdGlvbi4gVGhpcyBpcyB0aGUgZGVmYXVsdC4KKyAqIGNoZWNrX3NpZ3M6IHRydWUK KyAqICAtIEVuZm9yY2Ugc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiwgYW5kIGlmIHNpZ25hdHVyZSB2 ZXJpZmljYXRpb24gZmFpbHMsCisgKiAgICBwb3N0IHRoZSBlcnJvcnMgYW5kIHN0b3AgdGhlIGJv b3QuCisgKi8KK3N0YXRpYyBib29sIGNoZWNrX3NpZ3MgPSBmYWxzZTsKKworc3RhdGljIGNvbnN0 IGNoYXIgKgorZ3J1Yl9lbnZfcmVhZF9zZWMgKHN0cnVjdCBncnViX2Vudl92YXIgKnZhciBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdmFs IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSkKK3sKKyAgaWYgKGNoZWNrX3NpZ3MgPT0gdHJ1ZSkK KyAgICByZXR1cm4gImVuZm9yY2UiOworCisgIHJldHVybiAibm8iOworfQorCitzdGF0aWMgY2hh ciAqCitncnViX2Vudl93cml0ZV9zZWMgKHN0cnVjdCBncnViX2Vudl92YXIgKnZhciBfX2F0dHJp YnV0ZV9fICgodW51c2VkKSksIGNvbnN0IGNoYXIgKnZhbCkKK3sKKyAgY2hhciAqcmV0OworCisg IC8qCisgICAqIERvIG5vdCBhbGxvdyB0aGUgdmFsdWUgdG8gYmUgY2hhbmdlZCBpZiBjaGVja19z aWdzIGlzIHNldCB0byBlbmZvcmNlIGFuZAorICAgKiBzZWN1cmUgYm9vdCBpcyBlbmFibGVkIHdp dGggZW5mb3JjZWQgbW9kZS4KKyAgICovCisgIGlmIChjaGVja19zaWdzID09IHRydWUgJiYgZ3J1 Yl9pZWVlMTI3NV9pc19zZWN1cmVfYm9vdCAoKSA9PSBHUlVCX1NCX0VORk9SQ0VEKQorICAgIHsK KyAgICAgIHJldCA9IGdydWJfc3RyZHVwICgiZW5mb3JjZSIpOworICAgICAgaWYgKHJldCA9PSBO VUxMKQorICAgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAiY291bGQg bm90IGR1cGxpY2F0ZSBhIHN0cmluZyBlbmZvcmNlIik7CisKKyAgICAgIHJldHVybiByZXQ7Cisg ICAgfQorCisgIGlmICgoKnZhbCA9PSAnMScpIHx8ICgqdmFsID09ICdlJykpCisgICAgY2hlY2tf c2lncyA9IHRydWU7CisgIGVsc2UgaWYgKCgqdmFsID09ICcwJykgfHwgKCp2YWwgPT0gJ24nKSkK KyAgICBjaGVja19zaWdzID0gZmFsc2U7CisKKyAgcmV0ID0gZ3J1Yl9zdHJkdXAgKGdydWJfZW52 X3JlYWRfc2VjIChOVUxMLCBOVUxMKSk7CisgIGlmIChyZXQgPT0gTlVMTCkKKyAgICBncnViX2Vy cm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAiY291bGQgbm90IGR1cGxpY2F0ZSBhIHN0cmlu ZyAlcyIsCisgICAgICAgICAgICAgICAgZ3J1Yl9lbnZfcmVhZF9zZWMgKE5VTEwsIE5VTEwpKTsK KworICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgYm9vbAoraXNfY2VydF9tYXRjaCAoY29uc3Qg c3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmRpc3RydXN0ZWRfY2VydCwKKyAgICAgICAgICAgICAg IGNvbnN0IHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpkYl9jZXJ0KQoreworICBpZiAoZ3J1Yl9t ZW1jbXAgKGRpc3RydXN0ZWRfY2VydC0+c3ViamVjdCwgZGJfY2VydC0+c3ViamVjdCwgZGJfY2Vy dC0+c3ViamVjdF9sZW4pID09IDAKKyAgICAgICYmIGdydWJfbWVtY21wIChkaXN0cnVzdGVkX2Nl cnQtPmlzc3VlciwgZGJfY2VydC0+aXNzdWVyLCBkYl9jZXJ0LT5pc3N1ZXJfbGVuKSA9PSAwCisg ICAgICAmJiBncnViX21lbWNtcCAoZGlzdHJ1c3RlZF9jZXJ0LT5zZXJpYWwsIGRiX2NlcnQtPnNl cmlhbCwgZGJfY2VydC0+c2VyaWFsX2xlbikgPT0gMAorICAgICAgJiYgZ3J1Yl9tZW1jbXAgKGRp c3RydXN0ZWRfY2VydC0+bXBpc1swXSwgZGJfY2VydC0+bXBpc1swXSwgc2l6ZW9mIChkYl9jZXJ0 LT5tcGlzWzBdKSkgPT0gMAorICAgICAgJiYgZ3J1Yl9tZW1jbXAgKGRpc3RydXN0ZWRfY2VydC0+ bXBpc1sxXSwgZGJfY2VydC0+bXBpc1sxXSwgc2l6ZW9mIChkYl9jZXJ0LT5tcGlzWzFdKSkgPT0g MCkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBncnVi X2Vycl90CitmaWxlX3JlYWRfd2hvbGUgKGdydWJfZmlsZV90IGZpbGUsIGdydWJfdWludDhfdCAq KmJ1ZiwgZ3J1Yl9zaXplX3QgKmxlbikKK3sKKyAgZ3J1Yl9vZmZfdCBmdWxsX2ZpbGVfc2l6ZTsK KyAgZ3J1Yl9zaXplX3QgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3NpemUgPSAwOworICBncnViX3Nz aXplX3QgcmVhZF9zaXplOworCisgIGZ1bGxfZmlsZV9zaXplID0gZ3J1Yl9maWxlX3NpemUgKGZp bGUpOworICBpZiAoZnVsbF9maWxlX3NpemUgPT0gR1JVQl9GSUxFX1NJWkVfVU5LTk9XTikKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULAorICAgICAgICAgICAg ICAgICAgICAgICAiY2Fubm90IHJlYWQgYSBmaWxlIG9mIHVua25vd24gc2l6ZSBpbnRvIGEgYnVm ZmVyIik7CisKKyAgaWYgKGZ1bGxfZmlsZV9zaXplID4gR1JVQl9TSVpFX01BWCkKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLAorICAgICAgICAgICAgICAgICAg ICAgICAiZmlsZSBpcyB0b28gbGFyZ2UgdG8gcmVhZDogJSIgUFJJdUdSVUJfVUlOVDY0X1QgIiBi eXRlcyIsCisgICAgICAgICAgICAgICAgICAgICAgIGZ1bGxfZmlsZV9zaXplKTsKKworICBmaWxl X3NpemUgPSAoZ3J1Yl9zaXplX3QpIGZ1bGxfZmlsZV9zaXplOworICAqYnVmID0gZ3J1Yl9tYWxs b2MgKGZpbGVfc2l6ZSk7CisgIGlmICgqYnVmID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3Vs ZCBub3QgYWxsb2NhdGUgZmlsZSBkYXRhIGJ1ZmZlciBzaXplICUiIFBSSXVHUlVCX1NJWkUsCisg ICAgICAgICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSk7CisKKyAgd2hpbGUgKHRvdGFsX3JlYWRf c2l6ZSA8IGZpbGVfc2l6ZSkKKyAgICB7CisgICAgICByZWFkX3NpemUgPSBncnViX2ZpbGVfcmVh ZCAoZmlsZSwgKmJ1ZiArIHRvdGFsX3JlYWRfc2l6ZSwgZmlsZV9zaXplIC0gdG90YWxfcmVhZF9z aXplKTsKKyAgICAgIGlmIChyZWFkX3NpemUgPCAwKQorICAgICAgICB7CisgICAgICAgICAgZ3J1 Yl9mcmVlICgqYnVmKTsKKyAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJubzsKKyAgICAgICAgfQor ICAgICAgZWxzZSBpZiAocmVhZF9zaXplID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBncnVi X2ZyZWUgKCpidWYpOworICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9JTywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCByZWFkIGZ1bGwgZmlsZSBz aXplICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiglIiBQUkl1R1JVQl9TSVpFICIp LCBvbmx5ICUiIFBSSXVHUlVCX1NJWkUgIiBieXRlcyByZWFkIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZmlsZV9zaXplLCB0b3RhbF9yZWFkX3NpemUpOworICAgICAgICB9CisKKyAg ICAgIHRvdGFsX3JlYWRfc2l6ZSArPSByZWFkX3NpemU7CisgICAgfQorCisgICpsZW4gPSBmaWxl X3NpemU7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBncnViX2Vycl90 CitleHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAoY29uc3QgZ3J1Yl91aW50OF90ICpidWYsIGdy dWJfc2l6ZV90IGJ1ZnNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdy dWJfYXBwZW5kZWRfc2lnbmF0dXJlICpzaWcpCit7CisgIGdydWJfc2l6ZV90IHBrY3M3X3NpemU7 CisgIGdydWJfc2l6ZV90IHJlbWFpbmluZ19sZW47CisgIGNvbnN0IGdydWJfdWludDhfdCAqYXBw c2lnZGF0YSA9IGJ1ZiArIGJ1ZnNpemUgLSBncnViX3N0cmxlbiAobWFnaWMpOworCisgIGlmIChi dWZzaXplIDwgZ3J1Yl9zdHJsZW4gKG1hZ2ljKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfQkFEX1NJR05BVFVSRSwgImZpbGUgdG9vIHNob3J0IGZvciBzaWduYXR1cmUgbWFnaWMi KTsKKworICBpZiAoZ3J1Yl9zdHJuY21wICgoY29uc3QgY2hhciAqKSBhcHBzaWdkYXRhLCBtYWdp Yywgc2l6ZW9mIChtYWdpYykgLSAxKSkKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX1NJR05BVFVSRSwgIm1pc3Npbmcgb3IgaW52YWxpZCBzaWduYXR1cmUgbWFnaWMiKTsKKwor ICByZW1haW5pbmdfbGVuID0gYnVmc2l6ZSAtIGdydWJfc3RybGVuIChtYWdpYyk7CisKKyAgaWYg KHJlbWFpbmluZ19sZW4gPCBzaXplb2YgKHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlKSkKKyAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX1NJR05BVFVSRSwgImZpbGUgdG9vIHNob3J0 IGZvciBzaWduYXR1cmUgbWV0YWRhdGEiKTsKKworICBhcHBzaWdkYXRhIC09IHNpemVvZiAoc3Ry dWN0IG1vZHVsZV9zaWduYXR1cmUpOworICAvKiBFeHRyYWN0IHRoZSBtZXRhZGF0YS4gKi8KKyAg Z3J1Yl9tZW1jcHkgKCYoc2lnLT5zaWdfbWV0YWRhdGEpLCBhcHBzaWdkYXRhLCBzaXplb2YgKHN0 cnVjdCBtb2R1bGVfc2lnbmF0dXJlKSk7CisgIHJlbWFpbmluZ19sZW4gLT0gc2l6ZW9mIChzdHJ1 Y3QgbW9kdWxlX3NpZ25hdHVyZSk7CisKKyAgaWYgKHNpZy0+c2lnX21ldGFkYXRhLmlkX3R5cGUg IT0gR1JVQl9QS0VZX0lEX1BLQ1M3KQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9C QURfU0lHTkFUVVJFLCAid3Jvbmcgc2lnbmF0dXJlIHR5cGUiKTsKKworICBwa2NzN19zaXplID0g Z3J1Yl9iZV90b19jcHUzMiAoc2lnLT5zaWdfbWV0YWRhdGEuc2lnX2xlbik7CisKKyAgaWYgKHBr Y3M3X3NpemUgPiByZW1haW5pbmdfbGVuKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfU0lHTkFUVVJFLCAiZmlsZSB0b28gc2hvcnQgZm9yIFBLQ1MjNyBtZXNzYWdlIik7CisK KyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWciLCAic2lnIGxlbiAlIiBQUkl1R1JVQl9TSVpF ICJcbiIsIHBrY3M3X3NpemUpOworCisgIHNpZy0+c2lnbmF0dXJlX2xlbiA9IGdydWJfc3RybGVu IChtYWdpYykgKyBzaXplb2YgKHN0cnVjdCBtb2R1bGVfc2lnbmF0dXJlKSArIHBrY3M3X3NpemU7 CisgIC8qIFJld2luZCBwb2ludGVyIGFuZCBwYXJzZSBwa2NzNyBkYXRhLiAqLworICBhcHBzaWdk YXRhIC09IHBrY3M3X3NpemU7CisKKyAgcmV0dXJuIHBhcnNlX3BrY3M3X3NpZ25lZERhdGEgKGFw cHNpZ2RhdGEsIHBrY3M3X3NpemUsICZzaWctPnBrY3M3KTsKK30KKworLyoKKyAqIEdpdmVuIGEg aGFzaCB2YWx1ZSAnaHZhbCcsIG9mIGhhc2ggc3BlY2lmaWNhdGlvbiAnaGFzaCcsIHByZXBhcmUK KyAqIHRoZSBTLWV4cHJlc3Npb25zIChzZXhwKSBhbmQgcGVyZm9ybSB0aGUgc2lnbmF0dXJlIHZl cmlmaWNhdGlvbi4KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3ZlcmlmeV9zaWduYXR1cmUgKGNv bnN0IGdjcnlfbXBpX3QgKnBrbXBpLCBjb25zdCBnY3J5X21waV90IGhtcGksCisgICAgICAgICAg ICAgICAgICBjb25zdCBnY3J5X21kX3NwZWNfdCAqaGFzaCwgY29uc3QgZ3J1Yl91aW50OF90ICpo dmFsKQoreworICBnY3J5X3NleHBfdCBoc2V4cCwgcHVia2V5LCBzaWc7CisgIGdydWJfc2l6ZV90 IGVycm9mOworCisgIGlmIChfZ2NyeV9zZXhwX2J1aWxkKCZoc2V4cCwgJmVycm9mLCAiKGRhdGEg KGZsYWdzICVzKSAoaGFzaCAlcyAlYikpIiwgInBrY3MxIiwKKyAgICAgICAgICAgICAgICAgICAg ICAgaGFzaC0+bmFtZSwgaGFzaC0+bWRsZW4sIGh2YWwpICE9IEdQR19FUlJfTk9fRVJST1IpCisg ICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9TSUdOQVRVUkU7CisKKyAgaWYgKF9nY3J5X3NleHBfYnVp bGQoJnB1YmtleSwgJmVycm9mLCAiKHB1YmxpYy1rZXkgKGRzYSAobiAlTSkgKGUgJU0pKSkiLAor ICAgICAgICAgICAgICAgICAgICAgICBwa21waVswXSwgcGttcGlbMV0pICE9IEdQR19FUlJfTk9f RVJST1IpCisgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9TSUdOQVRVUkU7CisKKyAgaWYgKF9nY3J5 X3NleHBfYnVpbGQoJnNpZywgJmVycm9mLCAiKHNpZy12YWwgKHJzYSAocyAlTSkpKSIsIGhtcGkp ICE9IEdQR19FUlJfTk9fRVJST1IpCisgICAgcmV0dXJuIEdSVUJfRVJSX0JBRF9TSUdOQVRVUkU7 CisKKyAgX2djcnlfc2V4cF9kdW1wKHNpZyk7CisgIF9nY3J5X3NleHBfZHVtcChoc2V4cCk7Cisg IF9nY3J5X3NleHBfZHVtcChwdWJrZXkpOworCisgIGlmIChncnViX2NyeXB0b19wa19yc2EtPnZl cmlmeSAoc2lnLCBoc2V4cCwgcHVia2V5KSAhPSBHUEdfRVJSX05PX0VSUk9SKQorICAgIHJldHVy biBHUlVCX0VSUl9CQURfU0lHTkFUVVJFOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOworfQor CitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJlIChjb25z dCBncnViX3VpbnQ4X3QgKmJ1ZiwgZ3J1Yl9zaXplX3QgYnVmc2l6ZSkKK3sKKyAgZ3J1Yl9lcnJf dCBlcnI7CisgIGdydWJfc2l6ZV90IGRhdGFzaXplOworICB2b2lkICpjb250ZXh0OworICB1bnNp Z25lZCBjaGFyICpoYXNoOworICBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqcGs7CisgIHN0cnVj dCBncnViX2FwcGVuZGVkX3NpZ25hdHVyZSBzaWc7CisgIHN0cnVjdCBwa2NzN19zaWduZXJJbmZv ICpzaTsKKyAgaW50IGk7CisKKyAgaWYgKGRiID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9TSUdOQVRVUkUsICJubyB0cnVzdGVkIGtleXMgdG8gdmVyaWZ5IGFn YWluc3QiKTsKKworICBlcnIgPSBleHRyYWN0X2FwcGVuZGVkX3NpZ25hdHVyZSAoYnVmLCBidWZz aXplLCAmc2lnKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBlcnI7 CisKKyAgYXBwZW5kX3NpZ19sZW4gPSBzaWcuc2lnbmF0dXJlX2xlbjsKKyAgZGF0YXNpemUgPSBi dWZzaXplIC0gc2lnLnNpZ25hdHVyZV9sZW47CisKKyAgZm9yIChpID0gMDsgaSA8IHNpZy5wa2Nz Ny5zaWduZXJJbmZvX2NvdW50OyBpKyspCisgICAgeworICAgICAgLyoKKyAgICAgICAqIFRoaXMg Y291bGQgYmUgb3B0aW1pc2VkIGluIGEgY291cGxlIG9mIHdheXM6CisgICAgICAgKiAtIHdlIGNv dWxkIG9ubHkgY29tcHV0ZSBoYXNoZXMgb25jZSBwZXIgaGFzaCB0eXBlLgorICAgICAgICogLSB3 ZSBjb3VsZCB0cmFjayBzaWduZXIgaW5mb3JtYXRpb24gYW5kIG9ubHkgdmVyaWZ5IHdoZXJlIElE cyBtYXRjaC4KKyAgICAgICAqIEZvciBub3cgd2UgZG8gdGhlIG5haXZlIE8odHJ1c3RlZCBrZXlz ICogcGtjczcgc2lnbmVycykgYXBwcm9hY2guCisgICAgICAgKi8KKyAgICAgIHNpID0gJnNpZy5w a2NzNy5zaWduZXJJbmZvc1tpXTsKKyAgICAgIGNvbnRleHQgPSBncnViX3phbGxvYyAoc2ktPmhh c2gtPmNvbnRleHRzaXplKTsKKyAgICAgIGlmIChjb250ZXh0ID09IE5VTEwpCisgICAgICAgIHJl dHVybiBncnViX2Vycm5vOworCisgICAgICBzaS0+aGFzaC0+aW5pdCAoY29udGV4dCwgMCk7Cisg ICAgICBzaS0+aGFzaC0+d3JpdGUgKGNvbnRleHQsIGJ1ZiwgZGF0YXNpemUpOworICAgICAgc2kt Pmhhc2gtPmZpbmFsIChjb250ZXh0KTsKKyAgICAgIGhhc2ggPSBzaS0+aGFzaC0+cmVhZCAoY29u dGV4dCk7CisKKyAgICAgIGdydWJfZHByaW50ZiAoImFwcGVuZGVkc2lnIiwgImRhdGEgc2l6ZSAl IiBQUkl1R1JVQl9TSVpFICIsIHNpZ25lciAlZCBoYXNoICUwMnglMDJ4JTAyeCUwMnguLi5cbiIs CisgICAgICAgICAgICAgICAgICAgIGRhdGFzaXplLCBpLCBoYXNoWzBdLCBoYXNoWzFdLCBoYXNo WzJdLCBoYXNoWzNdKTsKKworICAgICAgZm9yIChwayA9IGRiOyBwayAhPSBOVUxMOyBwayA9IHBr LT5uZXh0KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gdmVyaWZ5X3NpZ25hdHVyZSAocGst Pm1waXMsIHNpLT5zaWdfbXBpLCBzaS0+aGFzaCwgaGFzaCk7CisgICAgICAgICAgaWYgKGVyciA9 PSBHUlVCX0VSUl9OT05FKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICBncnViX2Rwcmlu dGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnkgc2lnbmVyICVkIHdpdGgga2V5ICclcycgc3VjY2Vl ZGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHBrLT5zdWJqZWN0KTsKKyAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICBncnViX2Rwcmlu dGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnkgc2lnbmVyICVkIHdpdGgga2V5ICclcycgZmFpbGVk XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaSwgcGstPnN1YmplY3QpOworICAgICAgICB9 CisKKyAgICAgIGdydWJfZnJlZSAoY29udGV4dCk7CisgICAgICBpZiAoZXJyID09IEdSVUJfRVJS X05PTkUpCisgICAgICAgIGJyZWFrOworICAgIH0KKworICBwa2NzN19zaWduZWREYXRhX3JlbGVh c2UgKCZzaWcucGtjczcpOworCisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoZXJyLCAiZmFpbGVkIHRvIHZlcmlmeSBzaWduYXR1cmUgYWdhaW5zdCBh IHRydXN0ZWQga2V5Iik7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGdydWJfZXJyX3QK K3JlYWRfY2VydF9mcm9tX2ZpbGUgKGdydWJfZmlsZV90IGNlcnRfZmlsZSwgc3RydWN0IHg1MDlf Y2VydGlmaWNhdGUgKipjZXJ0KQoreworICBncnViX2Vycl90IGVycjsKKyAgZ3J1Yl91aW50OF90 ICpidWYgPSBOVUxMOworICBncnViX3NpemVfdCBidWZfc2l6ZSA9IDA7CisKKyAgKmNlcnQgPSBn cnViX3phbGxvYyAoc2l6ZW9mIChzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSkpOworICBpZiAoKmNl cnQgPT0gTlVMTCkKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVN T1JZLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY2VydGlmaWNhdGUiKTsKKworICBl cnIgPSBmaWxlX3JlYWRfd2hvbGUgKGNlcnRfZmlsZSwgJmJ1ZiwgJmJ1Zl9zaXplKTsKKyAgaWYg KGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIHJldHVybiBlcnI7CisKKyAgaWYgKGNoZWNrX3Np Z3MgPT0gdHJ1ZSkKKyAgICBidWZfc2l6ZSAtPSBhcHBlbmRfc2lnX2xlbjsKKworICBlcnIgPSBw YXJzZV94NTA5X2NlcnRpZmljYXRlIChidWYsIGJ1Zl9zaXplLCAqY2VydCk7CisgIGdydWJfZnJl ZSAoYnVmKTsKKworICByZXR1cm4gZXJyOworfQorCitzdGF0aWMgYm9vbAoraXNfY2VydF9wcmVz ZW50X2luX2RiIChjb25zdCBzdHJ1Y3QgeDUwOV9jZXJ0aWZpY2F0ZSAqY2VydF9pbikKK3sKKyAg c3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQ7CisKKyAgZm9yIChjZXJ0ID0gZGI7IGNlcnQ7 IGNlcnQgPSBjZXJ0LT5uZXh0KQorICAgIHsKKyAgICAgIGlmIChpc19jZXJ0X21hdGNoIChjZXJ0 LCBjZXJ0X2luKSA9PSB0cnVlKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgcmV0 dXJuIGZhbHNlOworfQorCitzdGF0aWMgYm9vbAoraXNfY2VydF9yZW1vdmVkX2Zyb21fZGIgKGNv bnN0IHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0KQoreworICBpbnQgaSA9IDE7CisgIHN0 cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjdXJyX2NlcnQsICpwcmV2X2NlcnQ7CisKKyAgZm9yIChj dXJyX2NlcnQgPSBwcmV2X2NlcnQgPSBkYjsgY3Vycl9jZXJ0ICE9IE5VTEw7IGN1cnJfY2VydCA9 IGN1cnJfY2VydC0+bmV4dCkKKyAgICB7CisgICAgICBpZiAoaXNfY2VydF9tYXRjaCAoY3Vycl9j ZXJ0LCBjZXJ0KSA9PSB0cnVlKQorICAgICAgICB7CisgICAgICAgICAgaWYgKGkgPT0gMSkgLyog TWF0Y2ggd2l0aCBmaXJzdCBjZXJ0aWZpY2F0ZSBpbiB0aGUgZGIgbGlzdC4gKi8KKyAgICAgICAg ICAgIGRiID0gY3Vycl9jZXJ0LT5uZXh0OworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy ZXZfY2VydC0+bmV4dCA9IGN1cnJfY2VydC0+bmV4dDsKKworICAgICAgICAgIGdydWJfZHByaW50 ZiAoImFwcGVuZGVkc2lnIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVkIGNlcnRp ZmljYXRlIHdpdGggQ046ICVzIGZyb20gdGhlIGRiIGxpc3RcbiIsIGN1cnJfY2VydC0+c3ViamVj dCk7CisgICAgICAgICAgY3Vycl9jZXJ0LT5uZXh0ID0gTlVMTDsKKyAgICAgICAgICBjZXJ0aWZp Y2F0ZV9yZWxlYXNlIChjdXJyX2NlcnQpOworICAgICAgICAgIGdydWJfZnJlZSAoY3Vycl9jZXJ0 KTsKKyAgICAgICAgICByZXR1cm4gdHJ1ZTsKKwl9CisgICAgICBlbHNlCisgICAgICAgIHByZXZf Y2VydCA9IGN1cnJfY2VydDsKKworICAgICAgaSsrOworICAgIH0KKworICByZXR1cm4gZmFsc2U7 Cit9CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2NtZF92ZXJpZnlfc2lnbmF0dXJlIChncnVi X2NvbW1hbmRfdCBjbWQgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgYXJnYywgY2hhciAq KmFyZ3MpCit7CisgIGdydWJfZmlsZV90IHNpZ25lZF9maWxlOworICBncnViX2Vycl90IGVycjsK KyAgZ3J1Yl91aW50OF90ICpzaWduZWRfZGF0YSA9IE5VTEw7CisgIGdydWJfc2l6ZV90IHNpZ25l ZF9kYXRhX3NpemUgPSAwOworCisgIGlmIChhcmdjICE9IDEpCisgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImEgc2ln bmVkIGZpbGUgaXMgZXhwZWN0ZWRcbkV4YW1wbGU6XG5cdGFwcGVuZF92ZXJpZnkgPFNJR05FRCBG SUxFPlxuIik7CisKKyAgaWYgKCphcmdzID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFTkFNRSwgIm1pc3Npbmcgc2lnbmVkIGZpbGUiKTsKKworICBncnVi X2RwcmludGYgKCJhcHBlbmRlZHNpZyIsICJ2ZXJpZnlpbmcgJXNcbiIsIGFyZ3NbMF0pOworCisg IHNpZ25lZF9maWxlID0gZ3J1Yl9maWxlX29wZW4gKGFyZ3NbMF0sIEdSVUJfRklMRV9UWVBFX1ZF UklGWV9TSUdOQVRVUkUpOworICBpZiAoc2lnbmVkX2ZpbGUgPT0gTlVMTCkKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfRklMRV9OT1RfRk9VTkQsICJjb3VsZCBub3Qgb3BlbiAlcyBm aWxlIiwgYXJnc1swXSk7CisKKyAgZXJyID0gZmlsZV9yZWFkX3dob2xlIChzaWduZWRfZmlsZSwg JnNpZ25lZF9kYXRhLCAmc2lnbmVkX2RhdGFfc2l6ZSk7CisgIGlmIChlcnIgPT0gR1JVQl9FUlJf Tk9ORSkKKyAgICBlcnIgPSBncnViX3ZlcmlmeV9hcHBlbmRlZF9zaWduYXR1cmUgKHNpZ25lZF9k YXRhLCBzaWduZWRfZGF0YV9zaXplKTsKKworICBncnViX2ZpbGVfY2xvc2UgKHNpZ25lZF9maWxl KTsKKyAgZ3J1Yl9mcmVlIChzaWduZWRfZGF0YSk7CisKKyAgcmV0dXJuIGVycjsKK30KKworc3Rh dGljIGdydWJfZXJyX3QKK2dydWJfY21kX2RiX2NlcnQgKGdydWJfY29tbWFuZF90IGNtZCBfX2F0 dHJpYnV0ZV9fICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJncykKK3sKKyAgZ3J1Yl9l cnJfdCBlcnI7CisgIGdydWJfZmlsZV90IGNlcnRfZmlsZTsKKyAgc3RydWN0IHg1MDlfY2VydGlm aWNhdGUgKmNlcnQgPSBOVUxMOworCisgIGlmIChhcmdjICE9IDEpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgImEg dHJ1c3RlZCBYLjUwOSBjZXJ0aWZpY2F0ZSBmaWxlIGlzIGV4cGVjdGVkIGluIERFUiBmb3JtYXRc biIKKyAgICAgICAgICAgICAgICAgICAgICAgIkV4YW1wbGU6XG5cdGFwcGVuZF9hZGRfZGJfY2Vy dCA8WDUwOV9DRVJUSUZJQ0FURT5cbiIpOworCisgIGlmICgqYXJncyA9PSBOVUxMKQorICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRU5BTUUsICJtaXNzaW5nIHRydXN0ZWQg WC41MDkgY2VydGlmaWNhdGUgZmlsZSIpOworCisgIGNlcnRfZmlsZSA9IGdydWJfZmlsZV9vcGVu IChhcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1JVQl9GSUxFX1RZUEVf Q0VSVElGSUNBVEVfVFJVU1QgfCBHUlVCX0ZJTEVfVFlQRV9OT19ERUNPTVBSRVNTKTsKKyAgaWYg KGNlcnRfZmlsZSA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURf RklMRV9UWVBFLCAiY291bGQgbm90IG9wZW4gJXMgZmlsZSIsIGFyZ3NbMF0pOworCisgIGVyciA9 IHJlYWRfY2VydF9mcm9tX2ZpbGUgKGNlcnRfZmlsZSwgJmNlcnQpOworICBncnViX2ZpbGVfY2xv c2UgKGNlcnRfZmlsZSk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICB7CisgICAg ICBncnViX2ZyZWUgKGNlcnQpOworICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgaWYgKGlz X2NlcnRfcHJlc2VudF9pbl9kYiAoY2VydCkgPT0gdHJ1ZSkKKyAgICB7CisgICAgICBjZXJ0aWZp Y2F0ZV9yZWxlYXNlIChjZXJ0KTsKKyAgICAgIGdydWJfZnJlZSAoY2VydCk7CisgICAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfU1RJTExfUkVGRVJFTkNFRCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAiY291bGQgbm90IGFkZCB0aGUgY2VydGlmaWNhdGUsIGFzIGl0IGlzIHByZXNl bnQgaW4gdGhlIGRiIGxpc3QiKTsKKyAgICB9CisKKyAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRz aWciLCAiYWRkZWQgY2VydGlmaWNhdGUgd2l0aCBDTjogJXNcbiIsIGNlcnQtPnN1YmplY3QpOwor CisgIGNlcnQtPm5leHQgPSBkYjsKKyAgZGIgPSBjZXJ0OworCisgIHJldHVybiBHUlVCX0VSUl9O T05FOworfQorCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9jbWRfZGJ4X2NlcnQgKGdydWJfY29t bWFuZF90IGNtZCBfX2F0dHJpYnV0ZV9fICgodW51c2VkKSksIGludCBhcmdjLCBjaGFyICoqYXJn cykKK3sKKyAgZ3J1Yl9lcnJfdCBlcnI7CisgIGdydWJfZmlsZV90IGNlcnRfZmlsZTsKKyAgc3Ry dWN0IHg1MDlfY2VydGlmaWNhdGUgKmNlcnQgPSBOVUxMOworCisgIGlmIChhcmdjICE9IDEpCisg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdVTUVOVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgImEgZGlzdHJ1c3RlZCBYLjUwOSBjZXJ0aWZpY2F0ZSBmaWxlIGlzIGV4cGVj dGVkIGluIERFUiBmb3JtYXRcbiIKKyAgICAgICAgICAgICAgICAgICAgICAgIkV4YW1wbGU6XG5c dGFwcGVuZF9ybV9kYnhfY2VydCA8WDUwOV9DRVJUSUZJQ0FURT5cbiIpOworCisgIGlmICgqYXJn cyA9PSBOVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRU5BTUUs ICJtaXNzaW5nIGRpc3RydXN0ZWQgWC41MDkgY2VydGlmaWNhdGUgZmlsZSIpOworCisgIGNlcnRf ZmlsZSA9IGdydWJfZmlsZV9vcGVuIChhcmdzWzBdLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgR1JVQl9GSUxFX1RZUEVfQ0VSVElGSUNBVEVfVFJVU1QgfCBHUlVCX0ZJTEVfVFlQRV9O T19ERUNPTVBSRVNTKTsKKyAgaWYgKGNlcnRfZmlsZSA9PSBOVUxMKQorICAgIHJldHVybiBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiY291bGQgbm90IG9wZW4gJXMgZmlsZSIs IGFyZ3NbMF0pOworCisgIGVyciA9IHJlYWRfY2VydF9mcm9tX2ZpbGUgKGNlcnRfZmlsZSwgJmNl cnQpOworICBncnViX2ZpbGVfY2xvc2UgKGNlcnRfZmlsZSk7CisgIGlmIChlcnIgIT0gR1JVQl9F UlJfTk9ORSkKKyAgICBncnViX2ZyZWUgKGNlcnQpOworCisgIGlmIChpc19jZXJ0X3JlbW92ZWRf ZnJvbV9kYiAoY2VydCkgPT0gZmFsc2UpCisgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJf RU9GLAorICAgICAgICAgICAgICAgICAgICAgICJub3QgZm91bmQgY2VydGlmaWNhdGUgd2l0aCBD TjolcyBpbiB0aGUgZGIgbGlzdCIsIGNlcnQtPnN1YmplY3QpOworCisgIGNlcnRpZmljYXRlX3Jl bGVhc2UgKGNlcnQpOworICBncnViX2ZyZWUgKGNlcnQpOworCisgIHJldHVybiBlcnI7Cit9CisK K3N0YXRpYyBncnViX2Vycl90CitncnViX2NtZF9saXN0X2RiIChncnViX2NvbW1hbmRfdCBjbWQg X19hdHRyaWJ1dGVfXyAoKHVudXNlZCkpLCBpbnQgYXJnYyBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSksCisgICAgICAgICAgICAgICAgICBjaGFyICoqYXJncyBfX2F0dHJpYnV0ZV9fICgodW51c2Vk KSkpCit7CisgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpjZXJ0OworICBpbnQgY2VydF9udW0g PSAxOworICBncnViX3NpemVfdCBpOworCisgIGZvciAoY2VydCA9IGRiOyBjZXJ0ICE9IE5VTEw7 IGNlcnQgPSBjZXJ0LT5uZXh0KQorICAgIHsKKyAgICAgIGdydWJfcHJpbnRmICgiQ2VydGlmaWNh dGUgJWQ6XG4iLCBjZXJ0X251bSk7CisgICAgICBncnViX3ByaW50ZiAoIlx0U2VyaWFsOiAiKTsK KworICAgICAgZm9yIChpID0gMDsgaSA8IGNlcnQtPnNlcmlhbF9sZW4gLSAxOyBpKyspCisgICAg ICAgIGdydWJfcHJpbnRmICgiJTAyeDoiLCBjZXJ0LT5zZXJpYWxbaV0pOworCisgICAgICBncnVi X3ByaW50ZiAoIiUwMnhcbiIsIGNlcnQtPnNlcmlhbFtjZXJ0LT5zZXJpYWxfbGVuIC0gMV0pOwor ICAgICAgZ3J1Yl9wcmludGYgKCJcdGlzc3VlcjogJXNcbiIsIGNlcnQtPmlzc3Vlcik7CisgICAg ICBncnViX3ByaW50ZiAoIlx0Q046ICVzXG5cbiIsIGNlcnQtPnN1YmplY3QpOworICAgICAgY2Vy dF9udW0rKzsKKyAgICB9CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cit9CisKK3N0YXRpYyBn cnViX2Vycl90CithcHBlbmRlZHNpZ19pbml0IChncnViX2ZpbGVfdCBpbyBfX2F0dHJpYnV0ZV9f ICgodW51c2VkKSksIGVudW0gZ3J1Yl9maWxlX3R5cGUgdHlwZSwKKyAgICAgICAgICAgICAgICAg IHZvaWQgKipjb250ZXh0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgZW51bSBncnViX3Zlcmlm eV9mbGFncyAqZmxhZ3MpCit7CisgIGlmIChjaGVja19zaWdzID09IGZhbHNlKQorICAgIHsKKyAg ICAgICpmbGFncyA9IEdSVUJfVkVSSUZZX0ZMQUdTX1NLSVBfVkVSSUZJQ0FUSU9OOworICAgICAg cmV0dXJuIEdSVUJfRVJSX05PTkU7CisgICAgfQorCisgIHN3aXRjaCAodHlwZSAmIEdSVUJfRklM RV9UWVBFX01BU0spCisgICAgeworICAgICAgY2FzZSBHUlVCX0ZJTEVfVFlQRV9DRVJUSUZJQ0FU RV9UUlVTVDoKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBhIGNlcnRpZmljYXRlIHRv IGFkZCB0byB0cnVzdGVkIGtleWNoYWluLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIG5l ZWRzIHRvIGJlIHZlcmlmaWVkIG9yIGJsb2NrZWQuIElkZWFsbHkgd2UnZCB3cml0ZSBhbiB4NTA5 CisgICAgICAgICAqIHZlcmlmaWVyLCBidXQgd2UgbGFjayB0aGUgaHVicmlzIHJlcXVpcmVkIHRv IHRha2UgdGhpcyBvbi4gSW5zdGVhZCwKKyAgICAgICAgICogcmVxdWlyZSB0aGF0IGl0IGhhdmUg YW4gYXBwZW5kZWQgc2lnbmF0dXJlLgorICAgICAgICAgKi8KKyAgICAgIGNhc2UgR1JVQl9GSUxF X1RZUEVfTElOVVhfS0VSTkVMOgorICAgICAgY2FzZSBHUlVCX0ZJTEVfVFlQRV9HUlVCX01PRFVM RToKKyAgICAgICAgLyoKKyAgICAgICAgICogQXBwZW5kZWQgc2lnbmF0dXJlcyBhcmUgb25seSBk ZWZpbmVkIGZvciBFTEYgYmluYXJpZXMuCisgICAgICAgICAqIE91dCBvZiBhbiBhYnVuZGFuY2Ug b2YgY2F1dGlvbiwgd2Ugb25seSB2ZXJpZnkgTGludXgga2VybmVscworICAgICAgICAgKiBhbmQg R1JVQiBtb2R1bGVzIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAqLworICAgICAgICAqZmxhZ3Mg PSBHUlVCX1ZFUklGWV9GTEFHU19TSU5HTEVfQ0hVTks7CisgICAgICAgIHJldHVybiBHUlVCX0VS Ul9OT05FOworCisgICAgICBjYXNlIEdSVUJfRklMRV9UWVBFX0FDUElfVEFCTEU6CisgICAgICBj YXNlIEdSVUJfRklMRV9UWVBFX0RFVklDRV9UUkVFX0lNQUdFOgorICAgICAgICAvKgorICAgICAg ICAgKiBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYXBwZW5kZWQgc2lnbmF0dXJlIHZlcmlmaWNhdGlv biB3aXRob3V0CisgICAgICAgICAqIGxvY2tkb3duIC0gbGlrZSB0aGUgUEdQIHZlcmlmaWVyLiBX aGVuIGNvbWJpbmVkIHdpdGggYW4gZW1iZWRkZWQKKyAgICAgICAgICogY29uZmlnIGZpbGUgaW4g YSBzaWduZWQgR1JVQiBiaW5hcnksIHRoaXMgY291bGQgc3RpbGwgYmUgYSBtZWFuaW5nZnVsCisg ICAgICAgICAqIHNlY3VyZS1ib290IGNoYWluIC0gc28gbG9uZyBhcyBpdCBpc24ndCBzdWJ2ZXJ0 ZWQgYnkgc29tZXRoaW5nIGxpa2UgYQorICAgICAgICAgKiByb3VnZSBBQ1BJIHRhYmxlIG9yIERU IGltYWdlLiBEZWZlciB0aGVtIGV4cGxpY2l0bHkuCisgICAgICAgICAqLworICAgICAgICAqZmxh Z3MgPSBHUlVCX1ZFUklGWV9GTEFHU19ERUZFUl9BVVRIOworICAgICAgICByZXR1cm4gR1JVQl9F UlJfTk9ORTsKKworICAgICAgZGVmYXVsdDoKKyAgICAgICAgKmZsYWdzID0gR1JVQl9WRVJJRllf RkxBR1NfU0tJUF9WRVJJRklDQVRJT047CisgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOwor ICAgIH0KK30KKworc3RhdGljIGdydWJfZXJyX3QKK2FwcGVuZGVkc2lnX3dyaXRlICh2b2lkICpj dHh0IF9fYXR0cmlidXRlX18gKCh1bnVzZWQpKSwgdm9pZCAqYnVmLCBncnViX3NpemVfdCBzaXpl KQoreworICByZXR1cm4gZ3J1Yl92ZXJpZnlfYXBwZW5kZWRfc2lnbmF0dXJlIChidWYsIHNpemUp OworfQorCitzdHJ1Y3QgZ3J1Yl9maWxlX3ZlcmlmaWVyIGdydWJfYXBwZW5kZWRzaWdfdmVyaWZp ZXIgPSB7CisgIC5uYW1lID0gImFwcGVuZGVkc2lnIiwKKyAgLmluaXQgPSBhcHBlbmRlZHNpZ19p bml0LAorICAud3JpdGUgPSBhcHBlbmRlZHNpZ193cml0ZSwKK307CisKK3N0YXRpYyBncnViX3Nz aXplX3QKK3BzZXVkb19yZWFkIChzdHJ1Y3QgZ3J1Yl9maWxlICpmaWxlLCBjaGFyICpidWYsIGdy dWJfc2l6ZV90IGxlbikKK3sKKyAgZ3J1Yl9tZW1jcHkgKGJ1ZiwgKGdydWJfdWludDhfdCAqKSBm aWxlLT5kYXRhICsgZmlsZS0+b2Zmc2V0LCBsZW4pOworICByZXR1cm4gbGVuOworfQorCisvKiBG aWxlc3lzdGVtIGRlc2NyaXB0b3IuICovCitzdGF0aWMgc3RydWN0IGdydWJfZnMgcHNldWRvX2Zz ID0geworICAubmFtZSA9ICJwc2V1ZG8iLAorICAuZnNfcmVhZCA9IHBzZXVkb19yZWFkCit9Owor CitzdGF0aWMgZ3J1Yl9jb21tYW5kX3QgY21kX3ZlcmlmeSwgY21kX2xpc3RfZGIsIGNtZF9kYnhf Y2VydCwgY21kX2RiX2NlcnQ7CisKK0dSVUJfTU9EX0lOSVQgKGFwcGVuZGVkc2lnKQoreworICBp bnQgcmM7CisgIHN0cnVjdCBncnViX21vZHVsZV9oZWFkZXIgKmhlYWRlcjsKKworICAvKgorICAg KiBJZiBzZWN1cmUgYm9vdCBpcyBlbmFibGVkIHdpdGggZW5mb3JjZWQgbW9kZSwKKyAgICogZW5h YmxlIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisgICAqLworICBpZiAoZ3J1Yl9pZWVlMTI3NV9p c19zZWN1cmVfYm9vdCAoKSA9PSBHUlVCX1NCX0VORk9SQ0VEKQorICAgIGNoZWNrX3NpZ3MgPSB0 cnVlOworCisgIGRiID0gTlVMTDsKKyAgZ3J1Yl9yZWdpc3Rlcl92YXJpYWJsZV9ob29rICgiY2hl Y2tfYXBwZW5kZWRfc2lnbmF0dXJlcyIsIGdydWJfZW52X3JlYWRfc2VjLCBncnViX2Vudl93cml0 ZV9zZWMpOworICBncnViX2Vudl9leHBvcnQgKCJjaGVja19hcHBlbmRlZF9zaWduYXR1cmVzIik7 CisKKyAgcmMgPSBhc24xX2luaXQgKCk7CisgIGlmIChyYykKKyAgICBncnViX2ZhdGFsICgiZXJy b3IgaW5pdGluZyBBU04uMSBkYXRhIHN0cnVjdHVyZXM6ICVkOiAlc1xuIiwgcmMsIGFzbjFfc3Ry ZXJyb3IgKHJjKSk7CisKKyAgLyoKKyAgICogSWYgc2lnbmF0dXJlIHZlcmlmaWNhdGlvbiBpcyBl bmFibGVkLAorICAgKiBleHRyYWN0IHRydXN0ZWQga2V5cyBmcm9tIEVMRiBOb3RlIGFuZCBzdG9y ZSB0aGVtIGluIHRoZSBkYi4KKyAgICovCisgIGlmIChjaGVja19zaWdzID09IHRydWUpCisgICAg eworICAgICAgRk9SX01PRFVMRVMgKGhlYWRlcikKKyAgICAgIHsKKyAgICAgICAgc3RydWN0IGdy dWJfZmlsZSBwc2V1ZG9fZmlsZTsKKyAgICAgICAgc3RydWN0IHg1MDlfY2VydGlmaWNhdGUgKnBr ID0gTlVMTDsKKyAgICAgICAgZ3J1Yl9lcnJfdCBlcnI7CisKKyAgICAgICAgLyogTm90IGFuIFgu NTA5IGNlcnRpZmljYXRlLCBza2lwLiAqLworICAgICAgICBpZiAoaGVhZGVyLT50eXBlICE9IE9C Sl9UWVBFX1g1MDlfUFVCS0VZKQorICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGdydWJf bWVtc2V0ICgmcHNldWRvX2ZpbGUsIDAsIHNpemVvZiAocHNldWRvX2ZpbGUpKTsKKyAgICAgICAg cHNldWRvX2ZpbGUuZnMgPSAmcHNldWRvX2ZzOworICAgICAgICBwc2V1ZG9fZmlsZS5zaXplID0g aGVhZGVyLT5zaXplIC0gc2l6ZW9mIChzdHJ1Y3QgZ3J1Yl9tb2R1bGVfaGVhZGVyKTsKKyAgICAg ICAgcHNldWRvX2ZpbGUuZGF0YSA9IChjaGFyICopIGhlYWRlciArIHNpemVvZiAoc3RydWN0IGdy dWJfbW9kdWxlX2hlYWRlcik7CisKKyAgICAgICAgZ3J1Yl9kcHJpbnRmICgiYXBwZW5kZWRzaWci LCAiZm91bmQgYW4geDUwOSBrZXksIHNpemU9JSIgUFJJdUdSVUJfVUlOVDY0X1QgIlxuIiwKKyAg ICAgICAgICAgICAgICAgICAgICBwc2V1ZG9fZmlsZS5zaXplKTsKKworICAgICAgICBlcnIgPSBy ZWFkX2NlcnRfZnJvbV9maWxlICgmcHNldWRvX2ZpbGUsICZwayk7CisgICAgICAgIGlmIChlcnIg IT0gR1JVQl9FUlJfTk9ORSkKKyAgICAgICAgICBncnViX2ZhdGFsICgiZXJyb3IgbG9hZGluZyBp bml0aWFsIGtleTogJXMiLCBncnViX2Vycm1zZyk7CisKKyAgICAgICAgZ3J1Yl9kcHJpbnRmICgi YXBwZW5kZWRzaWciLCAibG9hZGVkIGNlcnRpZmljYXRlIENOPSclcydcbiIsIHBrLT5zdWJqZWN0 KTsKKworICAgICAgICBway0+bmV4dCA9IGRiOworICAgICAgICBkYiA9IHBrOworICAgICAgfQor ICAgIH0KKworICBjbWRfZGJfY2VydCA9IGdydWJfcmVnaXN0ZXJfY29tbWFuZCAoImFwcGVuZF9h ZGRfZGJfY2VydCIsIGdydWJfY21kX2RiX2NlcnQsIE5fKCJYNTA5X0NFUlRJRklDQVRFIiksCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOXygiQWRkIHRydXN0ZWQgWDUw OV9DRVJUSUZJQ0FURSB0byB0aGUgZGIgbGlzdCIpKTsKKyAgY21kX2RieF9jZXJ0ID0gZ3J1Yl9y ZWdpc3Rlcl9jb21tYW5kICgiYXBwZW5kX3JtX2RieF9jZXJ0IiwgZ3J1Yl9jbWRfZGJ4X2NlcnQs IE5fKCJYNTA5X0NFUlRJRklDQVRFIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTl8oIlJlbW92ZSBkaXN0cnVzdGVkIFg1MDlfQ0VSVElGSUNBVEUgZnJvbSB0aGUg ZGIgbGlzdCIpKTsKKyAgY21kX2xpc3RfZGIgPSBncnViX3JlZ2lzdGVyX2NvbW1hbmQgKCJhcHBl bmRfbGlzdF9kYiIsIGdydWJfY21kX2xpc3RfZGIsIDAsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBOXygiU2hvdyB0aGUgbGlzdCBvZiB0cnVzdGVkIFguNTA5IGNlcnRp ZmljYXRlcyBmcm9tIHRoZSBkYiBsaXN0IikpOworICBjbWRfdmVyaWZ5ID0gZ3J1Yl9yZWdpc3Rl cl9jb21tYW5kICgiYXBwZW5kX3ZlcmlmeSIsIGdydWJfY21kX3ZlcmlmeV9zaWduYXR1cmUsIE5f KCJTSUdORURfRklMRSIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBO XygiVmVyaWZ5IFNJR05FRF9GSUxFIGFnYWluc3QgdGhlIHRydXN0ZWQgWC41MDkgY2VydGlmaWNh dGVzIGluIHRoZSBkYiBsaXN0IikpOworCisgIGdydWJfdmVyaWZpZXJfcmVnaXN0ZXIgKCZncnVi X2FwcGVuZGVkc2lnX3ZlcmlmaWVyKTsKKyAgZ3J1Yl9kbF9zZXRfcGVyc2lzdGVudCAobW9kKTsK K30KKworR1JVQl9NT0RfRklOSSAoYXBwZW5kZWRzaWcpCit7CisgIC8qCisgICAqIGdydWJfZGxf c2V0X3BlcnNpc3RlbnQgc2hvdWxkIHByZXZlbnQgdGhpcyBmcm9tIGFjdHVhbGx5IHJ1bm5pbmcs IGJ1dAorICAgKiBpdCBkb2VzIHN0aWxsIHJ1biB1bmRlciBlbXUuCisgICAqLworICBncnViX3Zl cmlmaWVyX3VucmVnaXN0ZXIgKCZncnViX2FwcGVuZGVkc2lnX3ZlcmlmaWVyKTsKKyAgZ3J1Yl91 bnJlZ2lzdGVyX2NvbW1hbmQgKGNtZF92ZXJpZnkpOworICBncnViX3VucmVnaXN0ZXJfY29tbWFu ZCAoY21kX2xpc3RfZGIpOworICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2RiX2NlcnQp OworICBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY21kX2RieF9jZXJ0KTsKK30KZGlmZiAtLWdp dCBhL2luY2x1ZGUvZ3J1Yi9maWxlLmggYi9pbmNsdWRlL2dydWIvZmlsZS5oCmluZGV4IGE1YmYz YTc5Mi4uZDY3OGRlMDYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dydWIvZmlsZS5oCisrKyBiL2lu Y2x1ZGUvZ3J1Yi9maWxlLmgKQEAgLTgwLDYgKzgwLDggQEAgZW51bSBncnViX2ZpbGVfdHlwZQog ICAgIEdSVUJfRklMRV9UWVBFX1BVQkxJQ19LRVksCiAgICAgLyogRmlsZSBob2xkaW5nIHB1Ymxp YyBrZXkgdG8gYWRkIHRvIHRydXNlZCBrZXlzLiAgKi8KICAgICBHUlVCX0ZJTEVfVFlQRV9QVUJM SUNfS0VZX1RSVVNULAorICAgIC8qIEZpbGUgaG9sZGluZyB4NTA5IGNlcnRpZmljaWF0ZSB0byBh ZGQgdG8gdHJ1c3RlZCBrZXlzLiAgKi8KKyAgICBHUlVCX0ZJTEVfVFlQRV9DRVJUSUZJQ0FURV9U UlVTVCwKICAgICAvKiBGaWxlIG9mIHdoaWNoIHdlIGludGVuZCB0byBwcmludCBhIGJsb2NrbGlz dCB0byB0aGUgdXNlci4gICovCiAgICAgR1JVQl9GSUxFX1RZUEVfUFJJTlRfQkxPQ0tMSVNULAog ICAgIC8qIEZpbGUgd2UgaW50ZW5kIHRvIHVzZSBmb3IgdGVzdCBsb2FkaW5nIG9yIHRlc3Rpbmcg c3BlZWQuICAqLwotLSAKMi4zOS41IChBcHBsZSBHaXQtMTU0KQoKCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdydWItZGV2ZWwgbWFpbGluZyBsaXN0Ckdy dWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdudS5vcmcvbWFpbG1hbi9saXN0aW5mby9n cnViLWRldmVsCg==