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 93F02CCA471 for ; Mon, 6 Oct 2025 07:27:03 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v5fbm-0007kT-BJ; Mon, 06 Oct 2025 03:26:10 -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 1v5fbe-0007g3-2Q for grub-devel@gnu.org; Mon, 06 Oct 2025 03:26:02 -0400 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 1v5fbZ-0001wP-Ts for grub-devel@gnu.org; Mon, 06 Oct 2025 03:26:01 -0400 Received: from pps.filterd (m0360083.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 595I04Yj008198; Mon, 6 Oct 2025 07:25:54 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=y+9tYATFwnyaAzo0z 89xMXGlIHS0oDTqvi/1Kqxiyl4=; b=tq+cXPDDDkjk0qujf/sCwhys5z1p+A2yR 4AVevWb02wpT/9ND80CJq7F4sKD/Qy/0janKSwKOAmB6ZP92PoNVM1o2xQoH9Mpq YCI0RyKx8VbrZF3X8Khz3w7db42WTHM49QyvEry6c5moYUAwVrcfCr4PNnrTY9zt pmDrckiGiOgChEgOeJYbww9OL7zYthkqR9PhaB3tpFzwX8rYrsHiICCm7WymREEG EOvPpJhVW+3ZBg9u5p1tYhuO1oiyUjaV7UI4xOkYlRgBaFZRSVs8JaKLbB4SA86i tUoJT6M792JOWvJfM4JZSOWQcXYR3wwm1/5KEMU7QR34vt1+M/VTw== 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 49ju3gqwge-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Oct 2025 07:25:53 +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 5965iQxT031419; Mon, 6 Oct 2025 07:25:52 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma23.wdc07v.mail.ibm.com (PPS) with ESMTPS id 49kfdjvrmg-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 06 Oct 2025 07:25:52 +0000 Received: from smtpav07.fra02v.mail.ibm.com (smtpav07.fra02v.mail.ibm.com [10.20.54.106]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 5967PlB014156190 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Mon, 6 Oct 2025 07:25:47 GMT Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 77DA220043; Mon, 6 Oct 2025 07:25:47 +0000 (GMT) Received: from smtpav07.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id A13352004B; Mon, 6 Oct 2025 07:25:44 +0000 (GMT) Received: from localhost.localdomain (unknown [9.124.213.16]) by smtpav07.fra02v.mail.ibm.com (Postfix) with ESMTP; Mon, 6 Oct 2025 07:25:44 +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, Javier Martinez Canillas , Daniel Kiper Subject: [PATCH v18 08/20] appended signatures: Parse X.509 certificates Date: Mon, 6 Oct 2025 12:54:53 +0530 Message-ID: <20251006072508.19088-9-sudhakar@linux.ibm.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20251006072508.19088-1-sudhakar@linux.ibm.com> References: <20251006072508.19088-1-sudhakar@linux.ibm.com> MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDA0MDAxOCBTYWx0ZWRfX1RYlH/SxzWZ0 SjA4YJHmx9J2e5JQQuhhg1IJr1f7D/PA0ZUwCIF22Caxw6Ix3jzmqDArAK1wa+B9TxW0H6Jj6Ko sw1l0YqQNsT9I1LZ+z7BwsqSj0poYgYRt8dFe88M4LRh6Zr1B+gAZ8M4DgWqa1bz539SHfSDjNg Ki1IVc0ka0LTCzTJoZrDqNMs4Yt7L1auomK17BxxJ8hJowdO/YKwuWEoqMVC9aqwqSNG4l6jPsI C9K/t3oGM41urM1hN44Dzs1da0e0o+/VOkv5peHD6VktwmlI9XuI6pfkYz1k+HBi5NqOqH2009w h5cdoJ8xd9s8nh2T1QmtEisC+XynldgCXUAJbplcuxAARwBplB/Tp/jFcHGVNYZou93so+snTIM BpbMcFC5gkWcBu/0Wb1WQWfAf3tVvQ== X-Authority-Analysis: v=2.4 cv=I4dohdgg c=1 sm=1 tr=0 ts=68e36f01 cx=c_pps a=3Bg1Hr4SwmMryq2xdFQyZA==:117 a=3Bg1Hr4SwmMryq2xdFQyZA==:17 a=x6icFKpwvdMA:10 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=iox4zFpeAAAA:8 a=JuTF4qcAAAAA:8 a=VnNF1IyMAAAA:8 a=yPCof4ZbAAAA:8 a=qosfRPILmKXQ9qtQQYMA:9 a=WzC6qhA0u3u7Ye7llzcV:22 a=WlT8qwTXB_Kj6um4hl3b:22 a=cPQSjfK2_nFv0Q5t_7PE:22 X-Proofpoint-GUID: 9wv_vbr-fecMplLcBBO_gfDvviux0J59 X-Proofpoint-ORIG-GUID: 9wv_vbr-fecMplLcBBO_gfDvviux0J59 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-10-06_02,2025-10-02_03,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 lowpriorityscore=0 malwarescore=0 adultscore=0 spamscore=0 bulkscore=0 suspectscore=0 clxscore=1015 priorityscore=1501 phishscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2509150000 definitions=main-2510040018 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_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 VGhpcyBjb2RlIGFsbG93cyB1cyB0byBwYXJzZToKCiAtIFguNTA5IGNlcnRpZmljYXRlczogYXQg bGVhc3QgZW5vdWdoIHRvIHZlcmlmeSB0aGUgc2lnbmF0dXJlcyBvbiB0aGUgUEtDUyM3CiAgIG1l c3NhZ2VzLiBXZSBleHBlY3QgdGhhdCB0aGUgY2VydGlmaWNhdGVzIGVtYmVkZGVkIGluIEdSVUIg d2lsbCBiZSBsZWFmCiAgIGNlcnRpZmljYXRlcywgbm90IENBIGNlcnRpZmljYXRlcy4gVGhlIHBh cnNlciBlbmZvcmNlcyB0aGlzLgoKIC0gWC41MDkgY2VydGlmaWNhdGVzIHN1cHBvcnQgdGhlIEV4 dGVuZGVkIEtleSBVc2FnZSBleHRlbnNpb24gYW5kIGhhbmRsZSBpdCBieQogICB2ZXJpZnlpbmcg dGhhdCB0aGUgY2VydGlmaWNhdGUgaGFzIGEgQ29kZSBTaWduaW5nIHVzYWdlLgoKU2lnbmVkLW9m Zi1ieTogSmF2aWVyIE1hcnRpbmV6IENhbmlsbGFzIDxqYXZpZXJtQHJlZGhhdC5jb20+ICMgRUtV IHN1cHBvcnQKUmVwb3J0ZWQtYnk6IE1pY2hhbCBTdWNoYW5layA8bXN1Y2hhbmVrQHN1c2UuY29t PiAjIGtleSB1c2FnZSBpc3N1ZQpTaWduZWQtb2ZmLWJ5OiBEYW5pZWwgQXh0ZW5zIDxkamFAYXh0 ZW5zLm5ldD4KU2lnbmVkLW9mZi1ieTogU3VkaGFrYXIgS3VwcHVzYW15IDxzdWRoYWthckBsaW51 eC5pYm0uY29tPgpSZXZpZXdlZC1ieTogQXZuaXNoIENob3VoYW4gPGF2bmlzaEBsaW51eC5pYm0u Y29tPgpSZXZpZXdlZC1ieTogRGFuaWVsIEtpcGVyIDxkYW5pZWwua2lwZXJAb3JhY2xlLmNvbT4K LS0tCiBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCB8ICA1MiAr CiBncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jICAgICAgICB8IDk3MCArKysr KysrKysrKysrKysrKysrCiBpbmNsdWRlL2dydWIvY3J5cHRvLmggICAgICAgICAgICAgICAgICAg ICAgICB8ICAgMSArCiAzIGZpbGVzIGNoYW5nZWQsIDEwMjMgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IGdydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMKCmRpZmYg LS1naXQgYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5kZWRzaWcuaCBiL2dy dWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy9hcHBlbmRlZHNpZy5oCmluZGV4IGIwYmViODkz NS4uYzg3NDY1NDRlIDEwMDY0NAotLS0gYS9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcv YXBwZW5kZWRzaWcuaAorKysgYi9ncnViLWNvcmUvY29tbWFuZHMvYXBwZW5kZWRzaWcvYXBwZW5k ZWRzaWcuaApAQCAtMjUsNiArMjUsNDMgQEAgZXh0ZXJuIGFzbjFfbm9kZSBncnViX2dudXRsc19w a2l4X2FzbjsKIAogI2RlZmluZSBHUlVCX01BWF9PSURfTEVOICAgICAgICAgMzIKIAorLyogUlNB IHB1YmxpYyBrZXkuICovCisjZGVmaW5lIEdSVUJfTUFYX01QSSAgICAgICAgICAgICAyCisjZGVm aW5lIEdSVUJfUlNBX1BLX01PRFVMVVMgICAgICAwCisjZGVmaW5lIEdSVUJfUlNBX1BLX0VYUE9O RU5UICAgICAxCisKKy8qIENlcnRpZmljYXRlIGZpbmdlcnByaW50LiAqLworI2RlZmluZSBHUlVC X01BWF9GSU5HRVJQUklOVCAgICAgMworI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTI1NiAg MAorI2RlZmluZSBHUlVCX0ZJTkdFUlBSSU5UX1NIQTM4NCAgMQorI2RlZmluZSBHUlVCX0ZJTkdF UlBSSU5UX1NIQTUxMiAgMgorCisvKiBNYXggc2l6ZSBvZiBoYXNoIGRhdGEuICovCisjZGVmaW5l IEdSVUJfTUFYX0hBU0hfTEVOICAgICAgICA2NAorCisvKgorICogT25lIG9yIG1vcmUgeDUwOSBj ZXJ0aWZpY2F0ZXMuIFdlIGRvIGxpbWl0ZWQgcGFyc2luZzoKKyAqIGV4dHJhY3Rpbmcgb25seSB0 aGUgdmVyc2lvbiwgc2VyaWFsLCBpc3N1ZXIsIHN1YmplY3QsIFJTQSBwdWJsaWMga2V5CisgKiBh bmQga2V5IHNpemUuCisgKiBBbHNvLCBob2xkIHRoZSBzaGEyNTYsIHNoYTM4NCwgYW5kIHNoYTUx MiBmaW5nZXJwcmludCBvZiB0aGUgY2VydGlmaWNhdGUuCisgKi8KK3N0cnVjdCB4NTA5X2NlcnRp ZmljYXRlCit7CisgIHN0cnVjdCB4NTA5X2NlcnRpZmljYXRlICpuZXh0OworICBncnViX3VpbnQ4 X3QgdmVyc2lvbjsKKyAgZ3J1Yl91aW50OF90ICpzZXJpYWw7CisgIGdydWJfc2l6ZV90IHNlcmlh bF9sZW47CisgIGNoYXIgKmlzc3VlcjsKKyAgZ3J1Yl9zaXplX3QgaXNzdWVyX2xlbjsKKyAgY2hh ciAqc3ViamVjdDsKKyAgZ3J1Yl9zaXplX3Qgc3ViamVjdF9sZW47CisgIC8qIFdlIG9ubHkgc3Vw cG9ydCBSU0EgcHVibGljIGtleXMuIFRoaXMgZW5jb2RlcyBbbW9kdWx1cywgcHVibGljRXhwb25l bnRdLiAqLworICBnY3J5X21waV90IG1waXNbR1JVQl9NQVhfTVBJXTsKKyAgZ3J1Yl9pbnQzMl90 IG1vZHVsdXNfc2l6ZTsKKyAgZ3J1Yl91aW50OF90IGZpbmdlcnByaW50W0dSVUJfTUFYX0ZJTkdF UlBSSU5UXVtHUlVCX01BWF9IQVNIX0xFTl07Cit9OwordHlwZWRlZiBzdHJ1Y3QgeDUwOV9jZXJ0 aWZpY2F0ZSBncnViX3g1MDlfY2VydF90OworCiAvKiBBIFBLQ1MjNyBzaWduZWQgZGF0YSBzaWdu ZXIgaW5mby4gKi8KIHN0cnVjdCBwa2NzN19zaWduZXIKIHsKQEAgLTQ0LDYgKzgxLDIxIEBAIHN0 cnVjdCBwa2NzN19kYXRhCiB9OwogdHlwZWRlZiBzdHJ1Y3QgcGtjczdfZGF0YSBncnViX3BrY3M3 X2RhdGFfdDsKIAorLyoKKyAqIEltcG9ydCBhIERFUi1lbmNvZGVkIGNlcnRpZmljYXRlIGF0ICdk YXRhJywgb2Ygc2l6ZSAnc2l6ZScuIFBsYWNlIHRoZSByZXN1bHRzCisgKiBpbnRvICdyZXN1bHRz Jywgd2hpY2ggbXVzdCBiZSBhbHJlYWR5IGFsbG9jYXRlZC4KKyAqLworZXh0ZXJuIGdydWJfZXJy X3QKK2dydWJfeDUwOV9jZXJ0X3BhcnNlIChjb25zdCB2b2lkICpkYXRhLCBncnViX3NpemVfdCBz aXplLCBncnViX3g1MDlfY2VydF90ICpyZXN1bHRzKTsKKworLyoKKyAqIFJlbGVhc2UgYWxsIHRo ZSBzdG9yYWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgeDUwOSBjZXJ0aWZpY2F0ZS4gSWYgdGhlIGNh bGxlcgorICogZHluYW1pY2FsbHkgYWxsb2NhdGVkIHRoZSBjZXJ0aWZpY2F0ZSwgaXQgbXVzdCBm cmVlIGl0LiBUaGUgY2FsbGVyIGlzIGFsc28KKyAqIHJlc3BvbnNpYmxlIGZvciBtYWludGVuYW5j ZSBvZiB0aGUgbGlua2VkIGxpc3QuCisgKi8KK2V4dGVybiB2b2lkCitncnViX3g1MDlfY2VydF9y ZWxlYXNlIChncnViX3g1MDlfY2VydF90ICpjZXJ0KTsKKwogLyoKICAqIFBhcnNlIGEgUEtDUyM3 IG1lc3NhZ2UsIHdoaWNoIG11c3QgYmUgYSBzaWduZWQgZGF0YSBtZXNzYWdlLiBUaGUgbWVzc2Fn ZSBtdXN0CiAgKiBiZSBpbiAnc2lnYnVmJyBhbmQgb2Ygc2l6ZSAnZGF0YV9zaXplJy4gVGhlIHJl c3VsdCBpcyBwbGFjZWQgaW4gJ21zZycsIHdoaWNoCmRpZmYgLS1naXQgYS9ncnViLWNvcmUvY29t bWFuZHMvYXBwZW5kZWRzaWcveDUwOS5jIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2FwcGVuZGVkc2ln L3g1MDkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLmJjMTUyNjYzYQot LS0gL2Rldi9udWxsCisrKyBiL2dydWItY29yZS9jb21tYW5kcy9hcHBlbmRlZHNpZy94NTA5LmMK QEAgLTAsMCArMSw5NzAgQEAKKy8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxv YWRlcgorICogIENvcHlyaWdodCAoQykgMjAyMCwgMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjAsIDIwMjIsIDIwMjUgSUJNIENvcnBvcmF0 aW9uCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQg eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDov L3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGxpYnRhc24xLmg+Cisj aW5jbHVkZSA8Z3J1Yi90eXBlcy5oPgorI2luY2x1ZGUgPGdydWIvZXJyLmg+CisjaW5jbHVkZSA8 Z3J1Yi9tbS5oPgorI2luY2x1ZGUgPGdydWIvY3J5cHRvLmg+CisjaW5jbHVkZSA8Z3J1Yi9taXNj Lmg+CisjaW5jbHVkZSA8Z3J1Yi9nY3J5cHQvZ2NyeXB0Lmg+CisKKyNpbmNsdWRlICJhcHBlbmRl ZHNpZy5oIgorCitzdGF0aWMgY2hhciBhc24xX2Vycm9yW0FTTjFfTUFYX0VSUk9SX0RFU0NSSVBU SU9OX1NJWkVdOworCisKKy8qIFJGQyAzMjc5IDIuMy4xICBSU0EgS2V5cy4gKi8KK3N0YXRpYyBj b25zdCBjaGFyICpyc2FFbmNyeXB0aW9uX29pZCA9ICIxLjIuODQwLjExMzU0OS4xLjEuMSI7CisK Ky8qIFJGQyA1MjgwIEFwcGVuZGl4IEEuICovCitzdGF0aWMgY29uc3QgY2hhciAqY29tbW9uTmFt ZV9vaWQgPSAiMi41LjQuMyI7CisKKy8qIFJGQyA1MjgwIDQuMi4xLjMgS2V5IFVzYWdlLiAqLwor c3RhdGljIGNvbnN0IGNoYXIgKmtleVVzYWdlX29pZCA9ICIyLjUuMjkuMTUiOworCitzdGF0aWMg Y29uc3QgZ3J1Yl91aW50OF90IGRpZ2l0YWxTaWduYXR1cmVVc2FnZSA9IDB4ODA7CisKKy8qIFJG QyA1MjgwIDQuMi4xLjkgQmFzaWMgQ29uc3RyYWludHMuICovCitzdGF0aWMgY29uc3QgY2hhciAq YmFzaWNDb25zdHJhaW50c19vaWQgPSAiMi41LjI5LjE5IjsKKworLyogUkZDIDUyODAgNC4yLjEu MTIgRXh0ZW5kZWQgS2V5IFVzYWdlLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKmV4dGVuZGVkS2V5 VXNhZ2Vfb2lkID0gIjIuNS4yOS4zNyI7CitzdGF0aWMgY29uc3QgY2hhciAqY29kZVNpZ25pbmdV c2FnZV9vaWQgPSAiMS4zLjYuMS41LjUuNy4zLjMiOworCisvKgorICogUkZDIDMyNzkgMi4zLjEK KyAqCisgKiAgVGhlIFJTQSBwdWJsaWMga2V5IE1VU1QgYmUgZW5jb2RlZCB1c2luZyB0aGUgQVNO LjEgdHlwZSBSU0FQdWJsaWNLZXk6CisgKgorICogICAgIFJTQVB1YmxpY0tleSA6Oj0gU0VRVUVO Q0UgeworICogICAgICAgIG1vZHVsdXMgICAgICAgICAgICBJTlRFR0VSLCAgICAtLSBuCisgKiAg ICAgICAgcHVibGljRXhwb25lbnQgICAgIElOVEVHRVIgIH0gIC0tIGUKKyAqCisgKiAgd2hlcmUg bW9kdWx1cyBpcyB0aGUgbW9kdWx1cyBuLCBhbmQgcHVibGljRXhwb25lbnQgaXMgdGhlIHB1Ymxp YyBleHBvbmVudCBlLgorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAorZ3J1Yl9wYXJzZV9yc2FfcHVi a2V5IChncnViX3VpbnQ4X3QgKmRlciwgZ3J1Yl9pbnQzMl90IGRlcnNpemUsIGdydWJfeDUwOV9j ZXJ0X3QgKmNlcnRpZmljYXRlKQoreworICBncnViX2ludDMyX3QgcmVzdWx0OworICBhc24xX25v ZGUgc3BrID0gTlVMTDsKKyAgZ3J1Yl91aW50OF90ICptX2RhdGEsICplX2RhdGE7CisgIGdydWJf aW50MzJfdCBtX3NpemUsIGVfc2l6ZTsKKyAgZ3J1Yl9lcnJfdCBlcnIgPSBHUlVCX0VSUl9OT05F OworICBnY3J5X2Vycm9yX3QgZ2NyeV9lcnI7CisKKyAgcmVzdWx0ID0gYXNuMV9jcmVhdGVfZWxl bWVudCAoZ3J1Yl9nbnV0bHNfZ251dGxzX2FzbiwgIkdOVVRMUy5SU0FQdWJsaWNLZXkiLCAmc3Br KTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qg Y3JlYXRlIHN0b3JhZ2UgZm9yIHB1YmxpYyBrZXkgQVNOLjEgZGF0YSIpOworCisgIHJlc3VsdCA9 IGFzbjFfZGVyX2RlY29kaW5nMiAoJnNwaywgZGVyLCAmZGVyc2l6ZSwgQVNOMV9ERUNPREVfRkxB R19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1Mp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICJjYW5ub3QgZGVjb2RlIGNlcnRpZmljYXRlIHB1Ymxp YyBrZXkgREVSOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0K KworICBtX2RhdGEgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHNwaywgIm1vZHVsdXMi LCAiUlNBIG1vZHVsdXMiLCAmbV9zaXplKTsKKyAgaWYgKG1fZGF0YSA9PSBOVUxMKQorICAgIHsK KyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisg IGVfZGF0YSA9IGdydWJfYXNuMV9hbGxvY2F0ZV9hbmRfcmVhZCAoc3BrLCAicHVibGljRXhwb25l bnQiLCAiUlNBIHB1YmxpYyBleHBvbmVudCIsICZlX3NpemUpOworICBpZiAoZV9kYXRhID09IE5V TEwpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJubzsKKyAgICAgIGdvdG8gY2xlYW51cF9t X2RhdGE7CisgICAgfQorCisgIC8qCisgICAqIENvbnZlcnQgbSwgZSB0byBtcGkKKyAgICoKKyAg ICogbnNjYW5uZWQgaXMgbm90IHNldCBmb3IgRk1UX1VTRywgaXQncyBvbmx5IHNldCBmb3IgRk1U X1BHUCwgc28gd2UgY2FuJ3QKKyAgICogdmVyaWZ5IGl0LgorICAgKi8KKyAgZ2NyeV9lcnIgPSBf Z2NyeV9tcGlfc2NhbiAoJmNlcnRpZmljYXRlLT5tcGlzWzBdLCBHQ1JZTVBJX0ZNVF9VU0csIG1f ZGF0YSwgbV9zaXplLCBOVUxMKTsKKyAgaWYgKGdjcnlfZXJyICE9IEdQR19FUlJfTk9fRVJST1Ip CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBsb2FkaW5nIFJTQSBtb2R1bHVzIGludG8g TVBJIHN0cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7CisgICAgICBnb3RvIGNsZWFudXBfZV9kYXRh OworICAgIH0KKworICBnY3J5X2VyciA9IF9nY3J5X21waV9zY2FuICgmY2VydGlmaWNhdGUtPm1w aXNbMV0sIEdDUllNUElfRk1UX1VTRywgZV9kYXRhLCBlX3NpemUsIE5VTEwpOworICBpZiAoZ2Ny eV9lcnIgIT0gR1BHX0VSUl9OT19FUlJPUikKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9y IChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9y IGxvYWRpbmcgUlNBIGV4cG9uZW50IGludG8gTVBJIHN0cnVjdHVyZTogJWQiLCBnY3J5X2Vycik7 CisgICAgICBnb3RvIGNsZWFudXBfbV9tcGk7CisgICAgfQorCisgIC8qIFJTQSBrZXkgc2l6ZSBp biBiaXRzLiAqLworICBjZXJ0aWZpY2F0ZS0+bW9kdWx1c19zaXplID0gKG1fc2l6ZSAqIDgpIC0g ODsKKworICBncnViX2ZyZWUgKGVfZGF0YSk7CisgIGdydWJfZnJlZSAobV9kYXRhKTsKKyAgYXNu MV9kZWxldGVfc3RydWN0dXJlICgmc3BrKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKKwor IGNsZWFudXBfbV9tcGk6CisgIF9nY3J5X21waV9yZWxlYXNlIChjZXJ0aWZpY2F0ZS0+bXBpc1sw XSk7CisgY2xlYW51cF9lX2RhdGE6CisgIGdydWJfZnJlZSAoZV9kYXRhKTsKKyBjbGVhbnVwX21f ZGF0YToKKyAgZ3J1Yl9mcmVlIChtX2RhdGEpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0 cnVjdHVyZSAoJnNwayk7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFJGQyA1MjgwOgor ICogICBTdWJqZWN0UHVibGljS2V5SW5mbyAgOjo9ICBTRVFVRU5DRSAgeworICogICAgICAgYWxn b3JpdGhtICAgICAgICAgICAgQWxnb3JpdGhtSWRlbnRpZmllciwKKyAqICAgICAgIHN1YmplY3RQ dWJsaWNLZXkgICAgIEJJVCBTVFJJTkcgIH0KKyAqCisgKiBBbGdvcml0aG1JZGVudGlmaWVycyBj b21lIGZyb20gUkZDIDMyNzksIHdlIGFyZSBub3Qgc3RyaWN0bHkgY29tcGlsYW50IGFzIHdlCisg KiBvbmx5IHN1cHBvcnQgUlNBIEVuY3J5cHRpb24uCisgKi8KK3N0YXRpYyBncnViX2Vycl90Citn cnViX3g1MDlfcmVhZF9zdWJqZWN0X3B1YmxpY19rZXkgKGFzbjFfbm9kZSBhc24sIGdydWJfeDUw OV9jZXJ0X3QgKnJlc3VsdHMpCit7CisgIGdydWJfaW50MzJfdCByZXN1bHQ7CisgIGdydWJfZXJy X3QgZXJyOworICBjb25zdCBjaGFyICphbGdvX25hbWUgPSAidGJzQ2VydGlmaWNhdGUuc3ViamVj dFB1YmxpY0tleUluZm8uYWxnb3JpdGhtLmFsZ29yaXRobSI7CisgIGNvbnN0IGNoYXIgKnBhcmFt c19uYW1lID0gInRic0NlcnRpZmljYXRlLnN1YmplY3RQdWJsaWNLZXlJbmZvLmFsZ29yaXRobS5w YXJhbWV0ZXJzIjsKKyAgY29uc3QgY2hhciAqcGtfbmFtZSA9ICJ0YnNDZXJ0aWZpY2F0ZS5zdWJq ZWN0UHVibGljS2V5SW5mby5zdWJqZWN0UHVibGljS2V5IjsKKyAgY2hhciBhbGdvX29pZFtHUlVC X01BWF9PSURfTEVOXTsKKyAgZ3J1Yl9pbnQzMl90IGFsZ29fc2l6ZSA9IHNpemVvZiAoYWxnb19v aWQpOworICBjaGFyIHBhcmFtc192YWx1ZVsyXTsKKyAgZ3J1Yl9pbnQzMl90IHBhcmFtc19zaXpl ID0gc2l6ZW9mIChwYXJhbXNfdmFsdWUpOworICBncnViX3VpbnQ4X3QgKmtleV9kYXRhID0gTlVM TDsKKyAgZ3J1Yl9pbnQzMl90IGtleV9zaXplID0gMDsKKyAgZ3J1Yl91aW50MzJfdCBrZXlfdHlw ZTsKKworICAvKiBBbGdvcml0aG06IHNlZSBub3RlcyBmb3IgcnNhRW5jcnlwdGlvbl9vaWQuICov CisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBhbGdvX25hbWUsIGFsZ29fb2lkLCAm YWxnb19zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHg1MDkgcHVi bGljIGtleSBhbGdvcml0aG06ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJl cnJvciAocmVzdWx0KSk7CisKKyAgaWYgKGdydWJfc3RybmNtcCAoYWxnb19vaWQsIHJzYUVuY3J5 cHRpb25fb2lkLCBzaXplb2YgKHJzYUVuY3J5cHRpb25fb2lkKSkgIT0gMCkKKyAgICByZXR1cm4g Z3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAg ICAgICAgICAgInVuc3VwcG9ydGVkIHg1MDkgcHVibGljIGtleSBhbGdvcml0aG06ICVzIiwgYWxn b19vaWQpOworCisgIC8qCisgICAqIFJGQyAzMjc5IDIuMy4xIDogVGhlIHJzYUVuY3J5cHRpb24g T0lEIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgaW4gdGhlCisgICAqIGFsZ29yaXRobSBmaWVsZCBv ZiBhIHZhbHVlIG9mIHR5cGUgQWxnb3JpdGhtSWRlbnRpZmllci4gVGhlIHBhcmFtZXRlcnMKKyAg ICogZmllbGQgTVVTVCBoYXZlIEFTTi4xIHR5cGUgTlVMTCBmb3IgdGhpcyBhbGdvcml0aG0gaWRl bnRpZmllci4KKyAgICovCisgIHJlc3VsdCA9IGFzbjFfcmVhZF92YWx1ZSAoYXNuLCBwYXJhbXNf bmFtZSwgcGFyYW1zX3ZhbHVlLCAmcGFyYW1zX3NpemUpOworICBpZiAocmVzdWx0ICE9IEFTTjFf U1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwg ImVycm9yIHJlYWRpbmcgeDUwOSBwdWJsaWMga2V5IHBhcmFtZXRlcnM6ICVzIiwKKyAgICAgICAg ICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisKKyAgaWYgKHBhcmFtc192 YWx1ZVswXSAhPSBBU04xX1RBR19OVUxMKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCB4NTA5IHB1 YmxpYyBrZXkgcGFyYW1ldGVyczogZXhwZWN0ZWQgTlVMTCIpOworCisgIC8qCisgICAqIFJGQyAz Mjc5IDIuMy4xOiAgVGhlIERFUiBlbmNvZGVkIFJTQVB1YmxpY0tleSBpcyB0aGUgdmFsdWUgb2Yg dGhlIEJJVAorICAgKiBTVFJJTkcgc3ViamVjdFB1YmxpY0tleS4KKyAgICovCisgIHJlc3VsdCA9 IGFzbjFfcmVhZF92YWx1ZV90eXBlIChhc24sIHBrX25hbWUsIE5VTEwsICZrZXlfc2l6ZSwgJmtl eV90eXBlKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX01FTV9FUlJPUikKKyAgICByZXR1cm4gZ3J1 Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiB4 NTA5IHB1YmxpYyBrZXk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJv ciAocmVzdWx0KSk7CisgIGlmIChrZXlfdHlwZSAhPSBBU04xX0VUWVBFX0JJVF9TVFJJTkcpCisg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJ1bmV4cGVjdGVk IEFTTi4xIHR5cGUgd2hlbiByZWFkaW5nIHg1MDkgcHVibGljIGtleTogJXgiLAorICAgICAgICAg ICAgICAgICAgICAgICBrZXlfdHlwZSk7CisKKyAgLyogTGVuZ3RoIGlzIGluIGJpdHMuICovCisg IGtleV9zaXplID0gKGtleV9zaXplICsgNykgLyA4OworCisgIGtleV9kYXRhID0gZ3J1Yl9tYWxs b2MgKGtleV9zaXplKTsKKyAgaWYgKGtleV9kYXRhID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJvdXQgb2YgbWVtb3J5IGZvciB4NTA5IHB1 YmxpYyBrZXkiKTsKKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgcGtfbmFtZSwg a2V5X2RhdGEsICZrZXlfc2l6ZSk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAg IHsKKyAgICAgIGdydWJfZnJlZSAoa2V5X2RhdGEpOworICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHB1YmxpYyBrZXkgZGF0YSIp OworICAgIH0KKworICBrZXlfc2l6ZSA9IChrZXlfc2l6ZSArIDcpIC8gODsKKyAgZXJyID0gZ3J1 Yl9wYXJzZV9yc2FfcHVia2V5IChrZXlfZGF0YSwga2V5X3NpemUsIHJlc3VsdHMpOworICBncnVi X2ZyZWUgKGtleV9kYXRhKTsKKworICByZXR1cm4gZXJyOworfQorCisvKiBEZWNvZGUgYSBzdHJp bmcgYXMgZGVmaW5lZCBpbiBBcHBlbmRpeCBBLiAqLworc3RhdGljIGdydWJfZXJyX3QKK2RlY29k ZV9zdHJpbmcgKGNoYXIgKmRlciwgZ3J1Yl9pbnQzMl90IGRlcl9zaXplLCBjaGFyICoqc3RyaW5n LCBncnViX3NpemVfdCAqc3RyaW5nX3NpemUpCit7CisgIGFzbjFfbm9kZSBzdHJhc247CisgIGdy dWJfaW50MzJfdCByZXN1bHQ7CisgIGNoYXIgKmNob2ljZTsKKyAgZ3J1Yl9pbnQzMl90IGNob2lj ZV9zaXplID0gMDsKKyAgZ3J1Yl9pbnQzMl90IHRtcF9zaXplID0gMDsKKyAgZ3J1Yl9lcnJfdCBl cnIgPSBHUlVCX0VSUl9OT05FOworCisgIHJlc3VsdCA9IGFzbjFfY3JlYXRlX2VsZW1lbnQgKGdy dWJfZ251dGxzX3BraXhfYXNuLCAiUEtJWDEuRGlyZWN0b3J5U3RyaW5nIiwgJnN0cmFzbik7Cisg IGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJldHVybiBncnViX2Vycm9yIChHUlVC X0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNy ZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIGNlcnRpZmljYXRlOiAlcyIsCisgICAgICAgICAgICAg ICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIHJlc3VsdCA9IGFzbjFfZGVy X2RlY29kaW5nMiAoJnN0cmFzbiwgZGVyLCAmZGVyX3NpemUsIEFTTjFfREVDT0RFX0ZMQUdfU1RS SUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAg IHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAg ICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IHBhcnNlIERFUiBmb3IgRGlyZWN0b3J5U3Ry aW5nOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBj aG9pY2UgPSBncnViX2FzbjFfYWxsb2NhdGVfYW5kX3JlYWQgKHN0cmFzbiwgIiIsICJEaXJlY3Rv cnlTdHJpbmcgY2hvaWNlIiwgJmNob2ljZV9zaXplKTsKKyAgaWYgKGNob2ljZSA9PSBOVUxMKQor ICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICBnb3RvIGNsZWFudXA7CisgICAg fQorCisgIGlmIChncnViX3N0cm5jbXAgKCJ1dGY4U3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6 ZSkgPT0gMCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwg InV0ZjhTdHJpbmciLCBOVUxMLCAmdG1wX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBBU04x X01FTV9FUlJPUikKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIHNpemUgb2YgVVRGLTggc3RyaW5nOiAl cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7 CisgICAgICAgICAgZ290byBjbGVhbnVwX2Nob2ljZTsKKyAgICAgICAgfQorICAgIH0KKyAgZWxz ZSBpZiAoZ3J1Yl9zdHJuY21wICgicHJpbnRhYmxlU3RyaW5nIiwgY2hvaWNlLCBjaG9pY2Vfc2l6 ZSkgPT0gMCkKKyAgICB7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKHN0cmFzbiwg InByaW50YWJsZVN0cmluZyIsIE5VTEwsICZ0bXBfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ICE9 IEFTTjFfTUVNX0VSUk9SKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9yIHJlYWRpbmcgc2l6ZSBvZiBwcmludGFibGVT dHJpbmc6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChy ZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY2hvaWNlOworICAgICAgICB9CisgICAg fQorICBlbHNlCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lN UExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICJvbmx5IFVURi04IGFuZCBw cmludGFibGUgRGlyZWN0b3J5U3RyaW5ncyBhcmUgc3VwcG9ydGVkLCBnb3QgJXMiLAorICAgICAg ICAgICAgICAgICAgICAgICAgY2hvaWNlKTsKKyAgICAgIGdvdG8gY2xlYW51cF9jaG9pY2U7Cisg ICAgfQorCisgIC8qIFJlYWQgc2l6ZSBkb2VzIG5vdCBpbmNsdWRlIHRyYWlsaW5nIE5VTC4gKi8K KyAgdG1wX3NpemUrKzsKKworICAqc3RyaW5nID0gZ3J1Yl9tYWxsb2MgKHRtcF9zaXplKTsKKyAg aWYgKCpzdHJpbmcgPT0gTlVMTCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBhbGxv Y2F0ZSBtZW1vcnkgZm9yIERpcmVjdG9yeVN0cmluZyBjb250ZW50cyIpOworICAgICAgZ290byBj bGVhbnVwX2Nob2ljZTsKKyAgICB9CisKKyAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChzdHJh c24sIGNob2ljZSwgKnN0cmluZywgJnRtcF9zaXplKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NV Q0NFU1MpCisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVf VFlQRSwgImVycm9yIHJlYWRpbmcgb3V0ICVzIGluIERpcmVjdG9yeVN0cmluZzogJXMiLAorICAg ICAgICAgICAgICAgICAgICAgICAgY2hvaWNlLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAg ICAgIGdydWJfZnJlZSAoKnN0cmluZyk7CisgICAgICAqc3RyaW5nID0gTlVMTDsKKyAgICAgIGdv dG8gY2xlYW51cF9jaG9pY2U7CisgICAgfQorCisgICpzdHJpbmdfc2l6ZSA9IHRtcF9zaXplICsg MTsKKyAgKCpzdHJpbmcpW3RtcF9zaXplXSA9ICdcMCc7CisKKyBjbGVhbnVwX2Nob2ljZToKKyAg Z3J1Yl9mcmVlIChjaG9pY2UpOworIGNsZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAo JnN0cmFzbik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIFRCU0NlcnRpZmljYXRlICA6 Oj0gIFNFUVVFTkNFICB7CisgKiAgICAgICB2ZXJzaW9uICAgICAgICAgWzBdICBFWFBMSUNJVCBW ZXJzaW9uIERFRkFVTFQgdjEsCisgKiAuLi4KKyAqCisgKiBWZXJzaW9uICA6Oj0gIElOVEVHRVIg IHsgIHYxKDApLCB2MigxKSwgdjMoMikgIH0KKyAqLworc3RhdGljIGdydWJfZXJyX3QKK2NoZWNr X3ZlcnNpb24gKGFzbjFfbm9kZSBjZXJ0aWZpY2F0ZSwgZ3J1Yl94NTA5X2NlcnRfdCAqcmVzdWx0 cykKK3sKKyAgZ3J1Yl9pbnQzMl90IHJjOworICBjb25zdCBjaGFyICpuYW1lID0gInRic0NlcnRp ZmljYXRlLnZlcnNpb24iOworICBncnViX3VpbnQ4X3QgdmVyc2lvbjsKKyAgZ3J1Yl9pbnQzMl90 IGxlbiA9IHNpemVvZiAodmVyc2lvbik7CisKKyAgcmMgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnRp ZmljYXRlLCBuYW1lLCAmdmVyc2lvbiwgJmxlbik7CisKKyAgLyogUmVxdWlyZSB2ZXJzaW9uIDMu ICovCisgIGlmIChyYyAhPSBBU04xX1NVQ0NFU1MgfHwgbGVuICE9IDEpCisgICAgcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIGNlcnRpZmlj YXRlIHZlcnNpb24iKTsKKworICBpZiAodmVyc2lvbiAhPSAweDAyKQorICAgIHJldHVybiBncnVi X2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAi aW52YWxpZCB4NTA5IGNlcnRpZmljYXRlIHZlcnNpb24sIGV4cGVjdGVkIHYzICgweDAyKSwgZ290 IDB4JTAyeC4iLAorICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uKTsKKworICByZXN1bHRz LT52ZXJzaW9uID0gdmVyc2lvbjsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKworLyog d2UgZXh0cmFjdCBvbmx5IHRoZSBDTiBhbmQgaXNzdWVyLiAqLworc3RhdGljIGdydWJfZXJyX3QK K3JlYWRfbmFtZSAoYXNuMV9ub2RlIGFzbiwgY29uc3QgY2hhciAqbmFtZV9wYXRoLCBjaGFyICoq bmFtZSwgZ3J1Yl9zaXplX3QgKm5hbWVfc2l6ZSkKK3sKKyAgZ3J1Yl9pbnQzMl90IHNlcV9jb21w b25lbnRzLCBzZXRfY29tcG9uZW50czsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9p bnQzMl90IGksIGo7CisgIGNoYXIgKnRvcF9wYXRoLCAqc2V0X3BhdGgsICp0eXBlX3BhdGgsICp2 YWxfcGF0aDsKKyAgY2hhciB0eXBlW0dSVUJfTUFYX09JRF9MRU5dOworICBncnViX2ludDMyX3Qg dHlwZV9sZW4gPSBzaXplb2YgKHR5cGUpOworICBncnViX2ludDMyX3Qgc3RyaW5nX3NpemUgPSAw OworICBjaGFyICpzdHJpbmdfZGVyOworICBncnViX2Vycl90IGVycjsKKworICAqbmFtZSA9IE5V TEw7CisKKyAgdG9wX3BhdGggPSBncnViX3hhc3ByaW50ZiAoIiVzLnJkblNlcXVlbmNlIiwgbmFt ZV9wYXRoKTsKKyAgaWYgKHRvcF9wYXRoID09IE5VTEwpCisgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBu b3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1lIHBhcnNpbmcgcGF0aCIsIG5hbWVfcGF0aCk7 CisKKyAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwgdG9wX3BhdGgsICZz ZXFfY29tcG9uZW50cyk7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAg ICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBjb3Vu dGluZyBuYW1lIGNvbXBvbmVudHM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFf c3RyZXJyb3IgKHJlc3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBmb3Ig KGkgPSAxOyBpIDw9IHNlcV9jb21wb25lbnRzOyBpKyspCisgICAgeworICAgICAgc2V0X3BhdGgg PSBncnViX3hhc3ByaW50ZiAoIiVzLj8lZCIsIHRvcF9wYXRoLCBpKTsKKyAgICAgIGlmIChzZXRf cGF0aCA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQg bm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgJXMgbmFtZSBzZXQgcGFyc2luZyBwYXRoIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBuYW1lX3BhdGgpOworICAgICAgICAgIGdvdG8gY2xlYW51 cF9zZXQ7CisgICAgICAgIH0KKyAgICAgIC8qIFRoaXMgYnJpbmdzIHVzLCBob3BlZnVsbHksIHRv IGEgc2V0LiAqLworICAgICAgcmVzdWx0ID0gYXNuMV9udW1iZXJfb2ZfZWxlbWVudHMgKGFzbiwg c2V0X3BhdGgsICZzZXRfY29tcG9uZW50cyk7CisgICAgICBpZiAocmVzdWx0ICE9IEFTTjFfU1VD Q0VTUykKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JB RF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGNvdW50aW5n IG5hbWUgc3ViLWNvbXBvbmVudHMgY29tcG9uZW50cyAoZWxlbWVudCAlZCk6ICVzIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpLCBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAg ICAgICBnb3RvIGNsZWFudXBfc2V0OworICAgICAgICB9CisgICAgICBmb3IgKGogPSAxOyBqIDw9 IHNldF9jb21wb25lbnRzOyBqKyspCisgICAgICAgIHsKKyAgICAgICAgICB0eXBlX3BhdGggPSBn cnViX3hhc3ByaW50ZiAoIiVzLj8lZC4/JWQudHlwZSIsIHRvcF9wYXRoLCBpLCBqKTsKKyAgICAg ICAgICBpZiAodHlwZV9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1l IGNvbXBvbmVudCB0eXBlIHBhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu YW1lX3BhdGgpOworICAgICAgICAgICAgICBnb3RvIGNsZWFudXBfc2V0OworICAgICAgICAgICAg fQorICAgICAgICAgIHR5cGVfbGVuID0gc2l6ZW9mICh0eXBlKTsKKyAgICAgICAgICByZXN1bHQg PSBhc24xX3JlYWRfdmFsdWUgKGFzbiwgdHlwZV9wYXRoLCB0eXBlLCAmdHlwZV9sZW4pOworICAg ICAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3Ig cmVhZGluZyAlcyBuYW1lIGNvbXBvbmVudCB0eXBlOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIG5hbWVfcGF0aCwgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAg ICAgICAgIGdvdG8gY2xlYW51cF90eXBlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgaWYg KGdydWJfc3RybmNtcCAodHlwZSwgY29tbW9uTmFtZV9vaWQsIHR5cGVfbGVuKSAhPSAwKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICBncnViX2ZyZWUgKHR5cGVfcGF0aCk7CisgICAgICAg ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgdmFsX3BhdGggPSBn cnViX3hhc3ByaW50ZiAoIiVzLj8lZC4/JWQudmFsdWUiLCB0b3BfcGF0aCwgaSwgaik7CisgICAg ICAgICAgaWYgKHZhbF9wYXRoID09IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg IGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciAlcyBuYW1l IGNvbXBvbmVudCB2YWx1ZSBwYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bmFtZV9wYXRoKTsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3R5cGU7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICBzdHJpbmdfZGVyID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFk IChhc24sIHZhbF9wYXRoLCBuYW1lX3BhdGgsICZzdHJpbmdfc2l6ZSk7CisgICAgICAgICAgaWYg KHN0cmluZ19kZXIgPT0gTlVMTCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgZXJyID0g Z3J1Yl9lcnJubzsKKyAgICAgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbF9wYXRoOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgZXJyID0gZGVjb2RlX3N0cmluZyAoc3RyaW5nX2Rlciwgc3Ry aW5nX3NpemUsIG5hbWUsIG5hbWVfc2l6ZSk7CisgICAgICAgICAgaWYgKGVycikKKyAgICAgICAg ICAgIGdvdG8gY2xlYW51cF9zdHJpbmc7CisKKyAgICAgICAgICBncnViX2ZyZWUgKHN0cmluZ19k ZXIpOworICAgICAgICAgIGdydWJfZnJlZSAodHlwZV9wYXRoKTsKKyAgICAgICAgICBncnViX2Zy ZWUgKHZhbF9wYXRoKTsKKyAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICBncnVi X2ZyZWUgKHNldF9wYXRoKTsKKyAgICAgIGlmICgqbmFtZSkKKyAgICAgICAgYnJlYWs7CisgICAg fQorCisgIGdydWJfZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBHUlVCX0VSUl9OT05FOwor CisgY2xlYW51cF9zdHJpbmc6CisgIGdydWJfZnJlZSAoc3RyaW5nX2Rlcik7CisgY2xlYW51cF92 YWxfcGF0aDoKKyAgZ3J1Yl9mcmVlICh2YWxfcGF0aCk7CisgY2xlYW51cF90eXBlOgorICBncnVi X2ZyZWUgKHR5cGVfcGF0aCk7CisgY2xlYW51cF9zZXQ6CisgIGdydWJfZnJlZSAoc2V0X3BhdGgp OworIGNsZWFudXA6CisgIGdydWJfZnJlZSAodG9wX3BhdGgpOworCisgIHJldHVybiBlcnI7Cit9 CisKKy8qIFZlcmlmeSB0aGUgS2V5IFVzYWdlIGV4dGVuc2lvbi4gV2UgcmVxdWlyZSB0aGUgRGln aXRhbCBTaWduYXR1cmUgdXNhZ2UuICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2tleV91 c2FnZSAoZ3J1Yl91aW50OF90ICp2YWx1ZSwgZ3J1Yl9pbnQzMl90IHZhbHVlX3NpemUpCit7Cisg IGFzbjFfbm9kZSB1c2FnZWFzbjsKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9lcnJf dCBlcnIgPSBHUlVCX0VSUl9OT05FOworICBncnViX3VpbnQ4X3QgdXNhZ2UgPSAweGZmOworICBn cnViX2ludDMyX3QgdXNhZ2Vfc2l6ZSA9IHNpemVvZiAodXNhZ2Vfc2l6ZSk7CisKKyAgcmVzdWx0 ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5LZXlV c2FnZSIsICZ1c2FnZWFzbik7CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHJl dHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLAorICAgICAgICAgICAgICAg ICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBBU04uMSBzdHJ1Y3R1cmUgZm9yIGtleSB1c2FnZSIp OworCisgIHJlc3VsdCA9IGFzbjFfZGVyX2RlY29kaW5nMiAoJnVzYWdlYXNuLCB2YWx1ZSwgJnZh bHVlX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOMV9ERUNPREVfRkxB R19TVFJJQ1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1Mp CisgICAgeworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwK KyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIERFUiBmb3IgS2V5IFVzYWdl OiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICByZXN1 bHQgPSBhc24xX3JlYWRfdmFsdWUgKHVzYWdlYXNuLCAiIiwgJnVzYWdlLCAmdXNhZ2Vfc2l6ZSk7 CisgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciByZWFkaW5nIEtleSBVc2FnZSB2 YWx1ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0 KSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQorCisgIGlmICghKHVzYWdlICYgZGlnaXRh bFNpZ25hdHVyZVVzYWdlKSkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VS Ul9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImtleSB1c2FnZSAoMHgl eCkgbWlzc2luZyBEaWdpdGFsIFNpZ25hdHVyZSB1c2FnZSIsIHVzYWdlKTsKKyAgICAgIGdvdG8g Y2xlYW51cDsKKyAgICB9CisKKyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZ1 c2FnZWFzbik7CisKKyAgcmV0dXJuIGVycjsKK30KKworLyoKKyAqIEJhc2ljQ29uc3RyYWludHMg Ojo9IFNFUVVFTkNFIHsKKyAqICAgICAgIGNBICAgICAgICAgICAgICAgICAgICAgIEJPT0xFQU4g REVGQVVMVCBGQUxTRSwKKyAqICAgICAgIHBhdGhMZW5Db25zdHJhaW50ICAgICAgIElOVEVHRVIg KDAuLk1BWCkgT1BUSU9OQUwgfQorICovCitzdGF0aWMgZ3J1Yl9lcnJfdAordmVyaWZ5X2Jhc2lj X2NvbnN0cmFpbnRzIChncnViX3VpbnQ4X3QgKnZhbHVlLCBncnViX2ludDMyX3QgdmFsdWVfc2l6 ZSkKK3sKKyAgYXNuMV9ub2RlIGJhc2ljYXNuOworICBncnViX2ludDMyX3QgcmVzdWx0OworICBn cnViX2Vycl90IGVyciA9IEdSVUJfRVJSX05PTkU7CisgIGNoYXIgY0FbNl07IC8qIEZBTFNFIG9y IFRSVUUuICovCisgIGdydWJfaW50MzJfdCBjQV9zaXplID0gc2l6ZW9mIChjQSk7CisKKyAgcmVz dWx0ID0gYXNuMV9jcmVhdGVfZWxlbWVudCAoZ3J1Yl9nbnV0bHNfcGtpeF9hc24sICJQS0lYMS5C YXNpY0NvbnN0cmFpbnRzIiwgJmJhc2ljYXNuKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NF U1MpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAg ICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3Ig QmFzaWMgQ29uc3RyYWludHMiKTsKKworICByZXN1bHQgPSBhc24xX2Rlcl9kZWNvZGluZzIgKCZi YXNpY2FzbiwgdmFsdWUsICZ2YWx1ZV9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEFTTjFfREVDT0RFX0ZMQUdfU1RSSUNUX0RFUiwgYXNuMV9lcnJvcik7CisgIGlmIChyZXN1 bHQgIT0gQVNOMV9TVUNDRVNTKQorICAgIHsKKyAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2lu ZyBERVIgZm9yIEJhc2ljIENvbnN0cmFpbnRzOiAlcyIsIGFzbjFfZXJyb3IpOworICAgICAgZ290 byBjbGVhbnVwOworICAgIH0KKworICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGJhc2ljYXNu LCAiY0EiLCBjQSwgJmNBX3NpemUpOworICBpZiAocmVzdWx0ID09IEFTTjFfRUxFTUVOVF9OT1Rf Rk9VTkQpCisgICAgeworICAgICAgLyogTm90IHByZXNlbnQsIGRlZmF1bHQgaXMgRmFsc2UsIHNv IHRoaXMgaXMgT0suICovCisgICAgICBlcnIgPSBHUlVCX0VSUl9OT05FOworICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKyAgZWxzZSBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7 CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3Ig cmVhZGluZyBCYXNpYyBDb25zdHJhaW50cyBjQSB2YWx1ZTogJXMiLAorICAgICAgICAgICAgICAg ICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICBnb3RvIGNsZWFudXA7Cisg ICAgfQorCisgIC8qIFRoZSBjZXJ0aWZpY2F0ZSBtdXN0IG5vdCBiZSBhIENBIGNlcnRpZmljYXRl LiAqLworICBpZiAoZ3J1Yl9zdHJuY21wICgiRkFMU0UiLCBjQSwgY0Ffc2l6ZSkgIT0gMCkKKyAg ICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAidW5l eHBlY3RlZCBDQSB2YWx1ZTogJXMiLCBjQSk7CisgICAgICBnb3RvIGNsZWFudXA7CisgICAgfQor CisgY2xlYW51cDoKKyAgYXNuMV9kZWxldGVfc3RydWN0dXJlICgmYmFzaWNhc24pOworCisgIHJl dHVybiBlcnI7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhlIEV4dGVuZGVkIEtleSBVc2FnZSBleHRl bnNpb24uIFdlIHJlcXVpcmUgdGhlIENvZGUgU2lnbmluZyB1c2FnZS4KKyAqCisgKiBFeHRLZXlV c2FnZVN5bnRheCA6Oj0gU0VRVUVOQ0UgU0laRSAoMS4uTUFYKSBPRiBLZXlQdXJwb3NlSWQKKyAq CisgKiBLZXlQdXJwb3NlSWQgOjo9IE9CSkVDVCBJREVOVElGSUVSCisgKi8KK3N0YXRpYyBncnVi X2Vycl90Cit2ZXJpZnlfZXh0ZW5kZWRfa2V5X3VzYWdlIChncnViX3VpbnQ4X3QgKnZhbHVlLCBn cnViX2ludDMyX3QgdmFsdWVfc2l6ZSkKK3sKKyAgYXNuMV9ub2RlIGV4dGVuZGVkYXNuOworICBn cnViX2ludDMyX3QgcmVzdWx0LCBjb3VudCwgaSA9IDA7CisgIGdydWJfZXJyX3QgZXJyID0gR1JV Ql9FUlJfTk9ORTsKKyAgY2hhciB1c2FnZVtHUlVCX01BWF9PSURfTEVOXSwgbmFtZVszXTsKKyAg Z3J1Yl9pbnQzMl90IHVzYWdlX3NpemUgPSBzaXplb2YgKHVzYWdlKTsKKworICByZXN1bHQgPSBh c24xX2NyZWF0ZV9lbGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLkV4dEtleVVz YWdlU3ludGF4IiwgJmV4dGVuZGVkYXNuKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1Mp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksCisgICAgICAg ICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIEFTTi4xIHN0cnVjdHVyZSBmb3IgRXh0 ZW5kZWQgS2V5IFVzYWdlIik7CisKKyAgcmVzdWx0ID0gYXNuMV9kZXJfZGVjb2RpbmcyICgmZXh0 ZW5kZWRhc24sIHZhbHVlLCAmdmFsdWVfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBU04xX0RFQ09ERV9GTEFHX1NUUklDVF9ERVIsIGFzbjFfZXJyb3IpOworICBpZiAocmVz dWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNp bmcgREVSIGZvciBFeHRlbmRlZCBLZXkgVXNhZ2U6ICVzIiwgYXNuMV9lcnJvcik7CisgICAgICBn b3RvIGNsZWFudXA7CisgICAgfQorCisgIC8qIElmIEVLVXMgYXJlIHByZXNlbnQsIGl0IGNoZWNr cyB0aGUgcHJlc2VudHMgb2YgQ29kZSBTaWduaW5nIHVzYWdlLiAqLworICByZXN1bHQgPSBhc24x X251bWJlcl9vZl9lbGVtZW50cyAoZXh0ZW5kZWRhc24sICIiLCAmY291bnQpOworICBpZiAocmVz dWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgY291bnRpbmcgbnVtYmVyIG9mIEV4dGVuZGVkIEtl eSBVc2FnZXM6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzbjFfc3RyZXJyb3IgKHJl c3VsdCkpOworICAgICAgZ290byBjbGVhbnVwOworICAgIH0KKworICBmb3IgKGkgPSAxOyBpIDwg Y291bnQgKyAxOyBpKyspCisgICAgeworICAgICAgZ3J1Yl9tZW1zZXQgKG5hbWUsIDAsIHNpemVv ZiAobmFtZSkpOworICAgICAgZ3J1Yl9zbnByaW50ZiAobmFtZSwgc2l6ZW9mIChuYW1lKSwgIj8l ZCIsIGkpOworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChleHRlbmRlZGFzbiwgbmFt ZSwgdXNhZ2UsICZ1c2FnZV9zaXplKTsKKyAgICAgIGlmIChyZXN1bHQgIT0gQVNOMV9TVUNDRVNT KQorICAgICAgICB7CisgICAgICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJ TEVfVFlQRSwgImVycm9yIHJlYWRpbmcgRXh0ZW5kZWQgS2V5IFVzYWdlOiAlcyIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAgICAgICAg Z290byBjbGVhbnVwOworICAgICAgICB9CisKKyAgICAgIGlmIChncnViX3N0cm5jbXAgKGNvZGVT aWduaW5nVXNhZ2Vfb2lkLCB1c2FnZSwgdXNhZ2Vfc2l6ZSkgPT0gMCkKKyAgICAgICAgZ290byBj bGVhbnVwOworICAgIH0KKworICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9U WVBFLCAiZXh0ZW5kZWQga2V5IHVzYWdlIG1pc3NpbmcgQ29kZSBTaWduaW5nIHVzYWdlIik7CisK KyBjbGVhbnVwOgorICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZleHRlbmRlZGFzbik7CisKKyAg cmV0dXJuIGVycjsKK30KKworLyoKKyAqIEV4dGVuc2lvbnMgIDo6PSAgU0VRVUVOQ0UgU0laRSAo MS4uTUFYKSBPRiBFeHRlbnNpb24KKyAqCisgKiBFeHRlbnNpb24gIDo6PSAgU0VRVUVOQ0UgIHsK KyAqICAgICAgZXh0bklEICAgICAgT0JKRUNUIElERU5USUZJRVIsCisgKiAgICAgIGNyaXRpY2Fs ICAgIEJPT0xFQU4gREVGQVVMVCBGQUxTRSwKKyAqICAgICAgZXh0blZhbHVlICAgT0NURVQgU1RS SU5HCisgKiAgICAgICAgICAgICAgICAgIC0tIGNvbnRhaW5zIHRoZSBERVIgZW5jb2Rpbmcgb2Yg YW4gQVNOLjEgdmFsdWUKKyAqICAgICAgICAgICAgICAgICAgLS0gY29ycmVzcG9uZGluZyB0byB0 aGUgZXh0ZW5zaW9uIHR5cGUgaWRlbnRpZmllZAorICogICAgICAgICAgICAgICAgICAtLSBieSBl eHRuSUQKKyAqIH0KKyAqCisgKiBBIGNlcnRpZmljYXRlIG11c3Q6CisgKiAgLSBjb250YWluIHRo ZSBEaWdpdGFsIFNpZ25hdHVyZSB1c2FnZQorICogIC0gbm90IGJlIGEgQ0EKKyAqICAtIGNvbnRh aW4gbm8gZXh0ZW5kZWQgdXNhZ2VzLCBvciBjb250YWluIHRoZSBDb2RlIFNpZ25pbmcgZXh0ZW5k ZWQgdXNhZ2UKKyAqICAtIG5vdCBjb250YWluIGFueSBvdGhlciBjcml0aWNhbCBleHRlbnNpb25z IChSRkMgNTI4MCBzIDQuMikKKyAqLworc3RhdGljIGdydWJfZXJyX3QKK3ZlcmlmeV9leHRlbnNp b25zIChhc24xX25vZGUgY2VydCkKK3sKKyAgZ3J1Yl9pbnQzMl90IHJlc3VsdDsKKyAgZ3J1Yl9p bnQzMl90IGV4dCwgbnVtX2V4dGVuc2lvbnMgPSAwOworICBncnViX2ludDMyX3QgdXNhZ2VfcHJl c2VudCA9IDAsIGNvbnN0cmFpbnRzX3ByZXNlbnQgPSAwLCBleHRlbmRlZF91c2FnZV9wcmVzZW50 ID0gMDsKKyAgY2hhciAqb2lkX3BhdGgsICpjcml0aWNhbF9wYXRoLCAqdmFsdWVfcGF0aDsKKyAg Y2hhciBleHRuSURbR1JVQl9NQVhfT0lEX0xFTl07CisgIGdydWJfaW50MzJfdCBleHRuSURfc2l6 ZTsKKyAgZ3J1Yl9lcnJfdCBlcnI7CisgIGNoYXIgY3JpdGljYWxbNl07IC8qIFdlIGdldCBlaXRo ZXIgIlRSVUUiIG9yICJGQUxTRSIuICovCisgIGdydWJfaW50MzJfdCBjcml0aWNhbF9zaXplOwor ICBncnViX3VpbnQ4X3QgKnZhbHVlOworICBncnViX2ludDMyX3QgdmFsdWVfc2l6ZTsKKworICBy ZXN1bHQgPSBhc24xX251bWJlcl9vZl9lbGVtZW50cyAoY2VydCwgInRic0NlcnRpZmljYXRlLmV4 dGVuc2lvbnMiLCAmbnVtX2V4dGVuc2lvbnMpOworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VT UykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwgImVycm9y IGNvdW50aW5nIG51bWJlciBvZiBleHRlbnNpb25zOiAlcyIsCisgICAgICAgICAgICAgICAgICAg ICAgIGFzbjFfc3RyZXJyb3IgKHJlc3VsdCkpOworCisgIGlmIChudW1fZXh0ZW5zaW9ucyA8IDIp CisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAg ICAgICAgICAgICAgICAgICJpbnN1ZmZpY2llbnQgbnVtYmVyIG9mIGV4dGVuc2lvbnMgZm9yIGNl cnRpZmljYXRlLCBuZWVkIGF0IGxlYXN0IDIsIGdvdCAlZCIsCisgICAgICAgICAgICAgICAgICAg ICAgIG51bV9leHRlbnNpb25zKTsKKworICBmb3IgKGV4dCA9IDE7IGV4dCA8PSBudW1fZXh0ZW5z aW9uczsgZXh0KyspCisgICAgeworICAgICAgb2lkX3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRi c0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmV4dG5JRCIsIGV4dCk7CisgICAgICBpZiAob2lk X3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdS VUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRlbnNpb24gT0lEIHBhdGggaXMgZW1wdHki KTsKKyAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisKKyAgICAgIGV4dG5JRF9zaXpl ID0gc2l6ZW9mIChleHRuSUQpOworICAgICAgcmVzdWx0ID0gYXNuMV9yZWFkX3ZhbHVlIChjZXJ0 LCBvaWRfcGF0aCwgZXh0bklELCAmZXh0bklEX3NpemUpOworICAgICAgaWYgKHJlc3VsdCAhPSBB U04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVC X0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBleHRlbnNpb24gT0lEOiAlcyIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNuMV9zdHJlcnJvciAocmVzdWx0KSk7CisgICAg ICAgICAgZ290byBjbGVhbnVwX29pZF9wYXRoOworICAgICAgICB9CisKKyAgICAgIGNyaXRpY2Fs X3BhdGggPSBncnViX3hhc3ByaW50ZiAoInRic0NlcnRpZmljYXRlLmV4dGVuc2lvbnMuPyVkLmNy aXRpY2FsIiwgZXh0KTsKKyAgICAgIGlmIChjcml0aWNhbF9wYXRoID09IE5VTEwpCisgICAgICAg IHsKKyAgICAgICAgICBlcnIgPSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAi ZXJyb3IgY3JpdGljYWwgcGF0aCBpcyBlbXB0eSIpOworICAgICAgICAgIGdvdG8gY2xlYW51cF9v aWRfcGF0aDsKKyAgICAgICAgfQorCisgICAgICBjcml0aWNhbF9zaXplID0gc2l6ZW9mIChjcml0 aWNhbCk7CisgICAgICByZXN1bHQgPSBhc24xX3JlYWRfdmFsdWUgKGNlcnQsIGNyaXRpY2FsX3Bh dGgsIGNyaXRpY2FsLCAmY3JpdGljYWxfc2l6ZSk7CisgICAgICBpZiAocmVzdWx0ID09IEFTTjFf RUxFTUVOVF9OT1RfRk9VTkQpCisgICAgICAgIGNyaXRpY2FsWzBdID0gJ1wwJzsKKyAgICAgIGVs c2UgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAgICAgIHsKKyAgICAgICAgICBlcnIg PSBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfRklMRV9UWVBFLCAiZXJyb3IgcmVhZGluZyBleHRl bnNpb24gY3JpdGljYWxpdHk6ICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc24x X3N0cmVycm9yIChyZXN1bHQpKTsKKyAgICAgICAgICBnb3RvIGNsZWFudXBfY3JpdGljYWxfcGF0 aDsKKyAgICAgICAgfQorCisgICAgICB2YWx1ZV9wYXRoID0gZ3J1Yl94YXNwcmludGYgKCJ0YnND ZXJ0aWZpY2F0ZS5leHRlbnNpb25zLj8lZC5leHRuVmFsdWUiLCBleHQpOworICAgICAgaWYgKHZh bHVlX3BhdGggPT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsICJlcnJvciBleHRuVmFsdWUgcGF0aCBpcyBlbXB0eSIp OworICAgICAgICAgIGdvdG8gY2xlYW51cF9jcml0aWNhbF9wYXRoOworICAgICAgICB9CisKKyAg ICAgIHZhbHVlID0gZ3J1Yl9hc24xX2FsbG9jYXRlX2FuZF9yZWFkIChjZXJ0LCB2YWx1ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjZXJ0aWZpY2F0 ZSBleHRlbnNpb24gdmFsdWUiLCAmdmFsdWVfc2l6ZSk7CisgICAgICBpZiAodmFsdWUgPT0gTlVM TCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IGdydWJfZXJybm87CisgICAgICAgICAgZ290 byBjbGVhbnVwX3ZhbHVlX3BhdGg7CisgICAgICAgIH0KKworICAgICAgLyoKKyAgICAgICAqIE5v dyB3ZSBtdXN0IHNlZSBpZiB3ZSByZWNvZ25pc2UgdGhlIE9JRC4gSWYgd2UgaGF2ZSBhbiB1bnJl Y29nbmlzZWQKKyAgICAgICAqIGNyaXRpY2FsIGV4dGVuc2lvbiB3ZSBNVVNUIGJhaWwuCisgICAg ICAgKi8KKyAgICAgIGlmIChncnViX3N0cm5jbXAgKGtleVVzYWdlX29pZCwgZXh0bklELCBleHRu SURfc2l6ZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIGVyciA9IHZlcmlmeV9rZXlfdXNh Z2UgKHZhbHVlLCB2YWx1ZV9zaXplKTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05P TkUpCisgICAgICAgICAgICBnb3RvIGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICB1c2FnZV9w cmVzZW50Kys7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoYmFzaWND b25zdHJhaW50c19vaWQsIGV4dG5JRCwgZXh0bklEX3NpemUpID09IDApCisgICAgICAgIHsKKyAg ICAgICAgICBlcnIgPSB2ZXJpZnlfYmFzaWNfY29uc3RyYWludHMgKHZhbHVlLCB2YWx1ZV9zaXpl KTsKKyAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgICAgICAgICBnb3Rv IGNsZWFudXBfdmFsdWU7CisKKyAgICAgICAgICBjb25zdHJhaW50c19wcmVzZW50Kys7CisgICAg ICAgIH0KKyAgICAgIGVsc2UgaWYgKGdydWJfc3RybmNtcCAoZXh0ZW5kZWRLZXlVc2FnZV9vaWQs IGV4dG5JRCwgZXh0bklEX3NpemUpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICBlcnIgPSB2 ZXJpZnlfZXh0ZW5kZWRfa2V5X3VzYWdlICh2YWx1ZSwgdmFsdWVfc2l6ZSk7CisgICAgICAgICAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVl OworCisgICAgICAgICAgZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCsrOworICAgICAgICB9CisgICAg ICBlbHNlIGlmIChncnViX3N0cm5jbXAgKCJUUlVFIiwgY3JpdGljYWwsIGNyaXRpY2FsX3NpemUp ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIFBlciB0aGUgUkZD LCB3ZSBtdXN0IG5vdCBwcm9jZXNzIGEgY2VydGlmaWNhdGUgd2l0aCBhIGNyaXRpY2FsCisgICAg ICAgICAgICogZXh0ZW5zaW9uIHdlIGRvIG5vdCB1bmRlcnN0YW5kLgorICAgICAgICAgICAqLwor ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgInVuaGFuZGxlZCBjcml0aWNhbCB4NTA5IGV4dGVuc2lv biB3aXRoIE9JRCAlcyIsIGV4dG5JRCk7CisgICAgICAgICAgZ290byBjbGVhbnVwX3ZhbHVlOwor ICAgICAgICB9CisKKyAgICAgIGdydWJfZnJlZSAodmFsdWUpOworICAgICAgZ3J1Yl9mcmVlICh2 YWx1ZV9wYXRoKTsKKyAgICAgIGdydWJfZnJlZSAoY3JpdGljYWxfcGF0aCk7CisgICAgICBncnVi X2ZyZWUgKG9pZF9wYXRoKTsKKyAgICB9CisKKyAgaWYgKHVzYWdlX3ByZXNlbnQgIT0gMSkKKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAg ICAgICAgICAgICAgInVuZXhwZWN0ZWQgbnVtYmVyIG9mIEtleSBVc2FnZSBleHRlbnNpb25zIC0g ZXhwZWN0ZWQgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgdXNhZ2VfcHJlc2Vu dCk7CisKKyAgaWYgKGNvbnN0cmFpbnRzX3ByZXNlbnQgIT0gMSkKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAgICAgICAgICAgICAgICAgICAgInVu ZXhwZWN0ZWQgbnVtYmVyIG9mIGJhc2ljIGNvbnN0cmFpbnRzIGV4dGVuc2lvbnMgLSBleHBlY3Rl ZCAxLCBnb3QgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdHJhaW50c19wcmVzZW50 KTsKKworICBpZiAoZXh0ZW5kZWRfdXNhZ2VfcHJlc2VudCA+IDEpCisgICAgcmV0dXJuIGdydWJf ZXJyb3IgKEdSVUJfRVJSX0JBRF9GSUxFX1RZUEUsCisgICAgICAgICAgICAgICAgICAgICAgICJ1 bmV4cGVjdGVkIG51bWJlciBvZiBFeHRlbmRlZCBLZXkgVXNhZ2UgZXh0ZW5zaW9ucyAtIGV4cGVj dGVkIDAgb3IgMSwgZ290ICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5kZWRfdXNh Z2VfcHJlc2VudCk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBjbGVhbnVwX3ZhbHVl OgorICBncnViX2ZyZWUgKHZhbHVlKTsKKyBjbGVhbnVwX3ZhbHVlX3BhdGg6CisgIGdydWJfZnJl ZSAodmFsdWVfcGF0aCk7CisgY2xlYW51cF9jcml0aWNhbF9wYXRoOgorICBncnViX2ZyZWUgKGNy aXRpY2FsX3BhdGgpOworIGNsZWFudXBfb2lkX3BhdGg6CisgIGdydWJfZnJlZSAob2lkX3BhdGgp OworCisgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyB2b2lkCithZGRfY2VydF9maW5nZXJwcmlu dCAoY29uc3Qgdm9pZCAqZGF0YSwgY29uc3QgZ3J1Yl9zaXplX3QgZGF0YV9zaXplLAorICAgICAg ICAgICAgICAgICAgICAgIGdydWJfeDUwOV9jZXJ0X3QgKmNvbnN0IGNlcnQpCit7CisgIC8qIEFk ZCBTSEEyNTYgaGFzaCBvZiBjZXJ0aWZpY2F0ZS4gKi8KKyAgZ3J1Yl9jcnlwdG9faGFzaCAoKGdj cnlfbWRfc3BlY190ICopICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGEyNTYsCisgICAgICAgICAgICAg ICAgICAgICZjZXJ0LT5maW5nZXJwcmludFtHUlVCX0ZJTkdFUlBSSU5UX1NIQTI1Nl0sIGRhdGEs IGRhdGFfc2l6ZSk7CisgIC8qIEFkZCBTSEEzODQgaGFzaCBvZiBjZXJ0aWZpY2F0ZS4gKi8KKyAg Z3J1Yl9jcnlwdG9faGFzaCAoKGdjcnlfbWRfc3BlY190ICopICZfZ2NyeV9kaWdlc3Rfc3BlY19z aGEzODQsCisgICAgICAgICAgICAgICAgICAgICZjZXJ0LT5maW5nZXJwcmludFtHUlVCX0ZJTkdF UlBSSU5UX1NIQTM4NF0sIGRhdGEsIGRhdGFfc2l6ZSk7CisgIC8qIEFkZCBTSEE1MTIgaGFzaCBv ZiBjZXJ0aWZpY2F0ZS4gKi8KKyAgZ3J1Yl9jcnlwdG9faGFzaCAoKGdjcnlfbWRfc3BlY190ICop ICZfZ2NyeV9kaWdlc3Rfc3BlY19zaGE1MTIsCisgICAgICAgICAgICAgICAgICAgICZjZXJ0LT5m aW5nZXJwcmludFtHUlVCX0ZJTkdFUlBSSU5UX1NIQTUxMl0sIGRhdGEsIGRhdGFfc2l6ZSk7Cit9 CisKKy8qCisgKiBQYXJzZSBhIGNlcnRpZmljYXRlIHdob3NlIERFUi1lbmNvZGVkIGZvcm0gaXMg aW4gQGRhdGEsIG9mIHNpemUgQGRhdGFfc2l6ZS4KKyAqIFJldHVybiB0aGUgcmVzdWx0cyBpbiBA cmVzdWx0cywgd2hpY2ggbXVzdCBwb2ludCB0byBhbiBhbGxvY2F0ZWQgeDUwOQorICogY2VydGlm aWNhdGUuCisgKi8KK2dydWJfZXJyX3QKK2dydWJfeDUwOV9jZXJ0X3BhcnNlIChjb25zdCB2b2lk ICpkYXRhLCBncnViX3NpemVfdCBkYXRhX3NpemUsIGdydWJfeDUwOV9jZXJ0X3QgKnJlc3VsdHMp Cit7CisgIGdydWJfaW50MzJfdCByZXN1bHQgPSAwOworICBhc24xX25vZGUgY2VydDsKKyAgZ3J1 Yl9lcnJfdCBlcnI7CisgIGdydWJfaW50MzJfdCB0bXBfc2l6ZTsKKyAgZ3J1Yl9pbnQzMl90IHNp emUgPSAoZ3J1Yl9pbnQzMl90KSBkYXRhX3NpemU7CisKKyAgaWYgKGRhdGFfc2l6ZSA+IEdSVUJf VUlOVF9NQVgpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwK KyAgICAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBwYXJzZSBhIGNlcnRpZmljYXRlIHdoZXJl IGRhdGEgc2l6ZSA+IEdSVUJfVUlOVF9NQVgiKTsKKworICByZXN1bHQgPSBhc24xX2NyZWF0ZV9l bGVtZW50IChncnViX2dudXRsc19wa2l4X2FzbiwgIlBLSVgxLkNlcnRpZmljYXRlIiwgJmNlcnQp OworICBpZiAocmVzdWx0ICE9IEFTTjFfU1VDQ0VTUykKKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfT1VUX09GX01FTU9SWSwKKyAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5v dCBjcmVhdGUgQVNOLjEgc3RydWN0dXJlIGZvciBjZXJ0aWZpY2F0ZTogJXMiLAorICAgICAgICAg ICAgICAgICAgICAgICBhc24xX3N0cmVycm9yIChyZXN1bHQpKTsKKworICByZXN1bHQgPSBhc24x X2Rlcl9kZWNvZGluZzIgKCZjZXJ0LCBkYXRhLCAmc2l6ZSwgQVNOMV9ERUNPREVfRkxBR19TVFJJ Q1RfREVSLCBhc24xX2Vycm9yKTsKKyAgaWYgKHJlc3VsdCAhPSBBU04xX1NVQ0NFU1MpCisgICAg eworICAgICAgZXJyID0gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0ZJTEVfVFlQRSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgcGFyc2UgREVSIGZvciBjZXJ0aWZpY2F0ZTog JXMiLCBhc24xX2Vycm9yKTsKKyAgICAgIGdvdG8gY2xlYW51cDsKKyAgICB9CisKKyAgLyoKKyAg ICogVEJTQ2VydGlmaWNhdGUgIDo6PSAgU0VRVUVOQ0UgeworICAgKiAgICAgdmVyc2lvbiAgICAg ICAgIFswXSAgRVhQTElDSVQgVmVyc2lvbiBERUZBVUxUIHYxCisgICAqLworICBlcnIgPSBjaGVj a192ZXJzaW9uIChjZXJ0LCByZXN1bHRzKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQor ICAgIGdvdG8gY2xlYW51cDsKKworICAvKgorICAgKiBzZXJpYWxOdW1iZXIgICAgICAgICBDZXJ0 aWZpY2F0ZVNlcmlhbE51bWJlciwKKyAgICoKKyAgICogQ2VydGlmaWNhdGVTZXJpYWxOdW1iZXIg IDo6PSAgSU5URUdFUgorICAgKi8KKyAgcmVzdWx0cy0+c2VyaWFsID0gZ3J1Yl9hc24xX2FsbG9j YXRlX2FuZF9yZWFkIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc2VyaWFsTnVtYmVyIiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2VydGlmaWNhdGUg c2VyaWFsIG51bWJlciIsICZ0bXBfc2l6ZSk7CisgIGlmIChyZXN1bHRzLT5zZXJpYWwgPT0gTlVM TCkKKyAgICB7CisgICAgICBlcnIgPSBncnViX2Vycm5vOworICAgICAgZ290byBjbGVhbnVwOwor ICAgIH0KKyAgLyoKKyAgICogSXQncyBzYWZlIHRvIGNhc3QgdGhlIHNpZ25lZCBpbnQgdG8gYW4g dW5zaWduZWQgaGVyZSwgd2Uga25vdworICAgKiBsZW5ndGggaXMgbm9uLW5lZ2F0aXZlLgorICAg Ki8KKyAgcmVzdWx0cy0+c2VyaWFsX2xlbiA9IHRtcF9zaXplOworCisgIC8qCisgICAqIHNpZ25h dHVyZSAgICAgICAgICAgIEFsZ29yaXRobUlkZW50aWZpZXIsCisgICAqCisgICAqIFdlIGRvbid0 IGxvYWQgdGhlIHNpZ25hdHVyZSBvciBpc3N1ZXIgYXQgdGhlIG1vbWVudCwKKyAgICogYXMgd2Ug ZG9uJ3QgYXR0ZW1wdCB4NTA5IHZlcmlmaWNhdGlvbi4KKyAgICovCisKKyAgLyoKKyAgICogdmFs aWRpdHkgICAgICAgICAgICAgVmFsaWRpdHksCisgICAqCisgICAqIFZhbGlkaXR5IDo6PSBTRVFV RU5DRSB7CisgICAqICAgICBub3RCZWZvcmUgICAgICBUaW1lLAorICAgKiAgICAgbm90QWZ0ZXIg ICAgICAgVGltZSB9CisgICAqCisgICAqIFdlIGNhbid0IHZhbGlkYXRlIHRoaXMgcmVhc29uYWJs eSwgd2UgaGF2ZSBubyB0cnVlIHRpbWUgc291cmNlIG9uIHNldmVyYWwKKyAgICogcGxhdGZvcm1z LiBGb3Igbm93IHdlIGRvIG5vdCBwYXJzZSB0aGVtLgorICAgKi8KKworICAvKgorICAgKiBpc3N1 ZXIgICAgICAgICAgICAgIE5hbWUsCisgICAqCisgICAqIFRoaXMgaXMgYW4gWDUwMSBuYW1lLCB3 ZSBwYXJzZSBvdXQganVzdCB0aGUgaXNzdWVyLgorICAgKi8KKyAgZXJyID0gcmVhZF9uYW1lIChj ZXJ0LCAidGJzQ2VydGlmaWNhdGUuaXNzdWVyIiwgJnJlc3VsdHMtPmlzc3VlciwgJnJlc3VsdHMt Pmlzc3Vlcl9sZW4pOworICBpZiAoZXJyICE9IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVh bnVwX3NlcmlhbDsKKworICAvKgorICAgKiBzdWJqZWN0ICAgICAgICAgICAgICBOYW1lLAorICAg KgorICAgKiBUaGlzIGlzIGFuIFg1MDEgbmFtZSwgd2UgcGFyc2Ugb3V0IGp1c3QgdGhlIENOLgor ICAgKi8KKyAgZXJyID0gcmVhZF9uYW1lIChjZXJ0LCAidGJzQ2VydGlmaWNhdGUuc3ViamVjdCIs ICZyZXN1bHRzLT5zdWJqZWN0LCAmcmVzdWx0cy0+c3ViamVjdF9sZW4pOworICBpZiAoZXJyICE9 IEdSVUJfRVJSX05PTkUpCisgICAgZ290byBjbGVhbnVwX2lzc3VlcjsKKworICAvKgorICAgKiBU QlNDZXJ0aWZpY2F0ZSAgOjo9ICBTRVFVRU5DRSAgeworICAgKiAgICAuLi4KKyAgICogICAgc3Vi amVjdFB1YmxpY0tleUluZm8gU3ViamVjdFB1YmxpY0tleUluZm8sCisgICAqICAgIC4uLgorICAg Ki8KKyAgZXJyID0gZ3J1Yl94NTA5X3JlYWRfc3ViamVjdF9wdWJsaWNfa2V5IChjZXJ0LCByZXN1 bHRzKTsKKyAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQorICAgIGdvdG8gY2xlYW51cF9uYW1l OworCisgIC8qCisgICAqIFRCU0NlcnRpZmljYXRlICA6Oj0gIFNFUVVFTkNFICB7CisgICAqICAg IC4uLgorICAgKiAgICBleHRlbnNpb25zICAgICAgWzNdICBFWFBMSUNJVCBFeHRlbnNpb25zIE9Q VElPTkFMCisgICAqICAgICAgICAgICAgICAgICAgICAgICAgIC0tIElmIHByZXNlbnQsIHZlcnNp b24gTVVTVCBiZSB2MworICAgKiB9CisgICAqLworICBlcnIgPSB2ZXJpZnlfZXh0ZW5zaW9ucyAo Y2VydCk7CisgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkKKyAgICBnb3RvIGNsZWFudXBfbXBp czsKKworICAvKgorICAgKiBXZSBkbyBub3QgcmVhZCBvciBjaGVjayB0aGUgc2lnbmF0dXJlIG9u IHRoZSBjZXJ0aWZpY2F0ZToKKyAgICogYXMgZGlzY3Vzc2VkIHdlIGRvIG5vdCB0cnkgdG8gdmFs aWRhdGUgdGhlIGNlcnRpZmljYXRlIGJ1dCB0cnVzdAorICAgKiBpdCBpbXBsaWN0bHkuCisgICAq LworICBhc24xX2RlbGV0ZV9zdHJ1Y3R1cmUgKCZjZXJ0KTsKKworICAvKiBBZGQgdGhlIGZpbmdl cnByaW50IG9mIHRoZSBjZXJ0aWZpY2F0ZS4gKi8KKyAgYWRkX2NlcnRfZmluZ2VycHJpbnQgKGRh dGEsIGRhdGFfc2l6ZSwgcmVzdWx0cyk7CisKKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7CisKKyBj bGVhbnVwX21waXM6CisgIF9nY3J5X21waV9yZWxlYXNlIChyZXN1bHRzLT5tcGlzW0dSVUJfUlNB X1BLX01PRFVMVVNdKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKHJlc3VsdHMtPm1waXNbR1JVQl9S U0FfUEtfRVhQT05FTlRdKTsKKyBjbGVhbnVwX25hbWU6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+ c3ViamVjdCk7CisgY2xlYW51cF9pc3N1ZXI6CisgIGdydWJfZnJlZSAocmVzdWx0cy0+aXNzdWVy KTsKKyBjbGVhbnVwX3NlcmlhbDoKKyAgZ3J1Yl9mcmVlIChyZXN1bHRzLT5zZXJpYWwpOworIGNs ZWFudXA6CisgIGFzbjFfZGVsZXRlX3N0cnVjdHVyZSAoJmNlcnQpOworCisgIHJldHVybiBlcnI7 Cit9CisKKy8qCisgKiBSZWxlYXNlIGFsbCB0aGUgc3RvcmFnZSBhc3NvY2lhdGVkIHdpdGggdGhl IHg1MDkgY2VydGlmaWNhdGUuIElmIHRoZSBjYWxsZXIKKyAqIGR5bmFtaWNhbGx5IGFsbG9jYXRl ZCB0aGUgY2VydGlmaWNhdGUsIGl0IG11c3QgZnJlZSBpdC4gVGhlIGNhbGxlciBpcyBhbHNvCisg KiByZXNwb25zaWJsZSBmb3IgbWFpbnRlbmFuY2Ugb2YgdGhlIGxpbmtlZCBsaXN0LgorICovCit2 b2lkCitncnViX3g1MDlfY2VydF9yZWxlYXNlIChncnViX3g1MDlfY2VydF90ICpjZXJ0KQorewor ICBncnViX2ZyZWUgKGNlcnQtPmlzc3Vlcik7CisgIGdydWJfZnJlZSAoY2VydC0+c3ViamVjdCk7 CisgIGdydWJfZnJlZSAoY2VydC0+c2VyaWFsKTsKKyAgX2djcnlfbXBpX3JlbGVhc2UgKGNlcnQt Pm1waXNbR1JVQl9SU0FfUEtfTU9EVUxVU10pOworICBfZ2NyeV9tcGlfcmVsZWFzZSAoY2VydC0+ bXBpc1tHUlVCX1JTQV9QS19FWFBPTkVOVF0pOworfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9ncnVi L2NyeXB0by5oIGIvaW5jbHVkZS9ncnViL2NyeXB0by5oCmluZGV4IDZhYjAyMWNiOC4uZTRlMmJk MWE3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2dydWIvY3J5cHRvLmgKKysrIGIvaW5jbHVkZS9ncnVi L2NyeXB0by5oCkBAIC01MTgsNiArNTE4LDcgQEAgZ3J1Yl9jcnlwdG9faG1hY19idWZmZXIgKGNv bnN0IHN0cnVjdCBnY3J5X21kX3NwZWMgKm1kLAogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5 X2RpZ2VzdF9zcGVjX21kNTsKIGV4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3Bl Y19zaGExOwogZXh0ZXJuIGdjcnlfbWRfc3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX3NoYTI1NjsK K2V4dGVybiBnY3J5X21kX3NwZWNfdCBfZ2NyeV9kaWdlc3Rfc3BlY19zaGEzODQ7CiBleHRlcm4g Z2NyeV9tZF9zcGVjX3QgX2djcnlfZGlnZXN0X3NwZWNfc2hhNTEyOwogZXh0ZXJuIGdjcnlfbWRf c3BlY190IF9nY3J5X2RpZ2VzdF9zcGVjX2NyYzMyOwogZXh0ZXJuIGdjcnlfY2lwaGVyX3NwZWNf dCBfZ2NyeV9jaXBoZXJfc3BlY19hZXM7Ci0tIAoyLjUwLjEgKEFwcGxlIEdpdC0xNTUpCgoKX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KR3J1Yi1kZXZlbCBt YWlsaW5nIGxpc3QKR3J1Yi1kZXZlbEBnbnUub3JnCmh0dHBzOi8vbGlzdHMuZ251Lm9yZy9tYWls bWFuL2xpc3RpbmZvL2dydWItZGV2ZWwK