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 A23E3C5AE59 for ; Thu, 5 Jun 2025 19:24:42 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uNGC9-0003Dl-Pn; Thu, 05 Jun 2025 15:24: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 1uNGC6-00035Q-Vb for grub-devel@gnu.org; Thu, 05 Jun 2025 15:24:07 -0400 Received: from mx0a-00069f02.pphosted.com ([205.220.165.32]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uNGC1-0006aJ-9C for grub-devel@gnu.org; Thu, 05 Jun 2025 15:24:06 -0400 Received: from pps.filterd (m0246627.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 555FtU0o022583; Thu, 5 Jun 2025 19:23:21 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:subject:to; s=corp-2025-04-25; bh=XJ5GfyVPSNh7C8nc5k o5dJW/IF198KnPNpv7smjy5Vc=; b=BlDwxmutVsE8ZxU7H9Qw/S9OYA/0m0Lub1 ai9KCnKhnv3atGAjkYtv+pTfNGkxrFjJVkHLupJDDaFGcbZgGQdcrDR1sKUP4qNJ CnCQHETyJNA6IGzjq9FMjsB1hPyDMC4JhVc2WLkjUBtlDq+cM/9YUecT8kwaRlLB YycB7p1DW9AZkLC5xYRzEgG/xYnsQvBrBq7w/BqtmSkM5aC4FwVelyglZpDB9lib idE4alapfY/lSljYql40qCfSAGAIHkch3PEapP3ISxgLXFj4r3Gf/y/Q5bHxt0Hw UgjZDAjo1ErkUD83drMgr7yE+PVLeKI34K9/WsmeycW92YZS2bAg== Received: from iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta01.appoci.oracle.com [130.35.100.223]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 471g8cxt2c-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 05 Jun 2025 19:23:20 +0000 (GMT) Received: from pps.filterd (iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 555JCEH1040095; Thu, 5 Jun 2025 19:23:19 GMT Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12on2083.outbound.protection.outlook.com [40.107.243.83]) by iadpaimrmta01.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 46yr7cq9e7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Thu, 05 Jun 2025 19:23:18 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=vUxgJxVP+iuFnoqSyA+tgePOssvco4z5Mm5hPH9HKHZZEqYRN/r4aCJyZw9OmLTKIfUSurIwTvucMHOECfOU2iG8LyvEJBNBpg0vq86+xomKCdIWkJvaJpH/v5XoxSzxAxNDIFVlhubP/jiNZXMWLSJV9qKTygHetU4IBOUdDNtXpXfnxRwYBFw3J7IuF+cWr/W0WFb51swKcKSopeTNi9ow0u1PQpeil5IMU9LL2V9cecp6DR2ttr5kxie2HqXaCFb8eJhaAfAbHgwguwz82BKTNAv5oD+8l+QKjuPpDPJHcnsnVlq3poKOpTsv9VKKOjG2QMO/xDd289R8FjsVkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=XJ5GfyVPSNh7C8nc5ko5dJW/IF198KnPNpv7smjy5Vc=; b=iNsIdKM/hlKJQnv1ickO3hj2MyH9rx13d18xrgnCQYtQeT+aA8kIjvLpHeYnRP2cEYtqcAs9Fhhiko2kzcwWoLq/YPXet1Dy5lpiLHtUsoWItVaJdB/NgNBN32rcf2eqkUiWBnMhJac2e12tuEC0jXn0AfhCuWebN7eA5VDVNJuZzzPt3J15eSvE6SLbZ+T3wYhoY4Ngh5yFthwadSawU1Y/K1rY/B5kKlzzSCpa/xaJVgYN+L5rsxoSjya0+XyeNjJVH23YCXKHcULz7LtoolMc6rIeZFEBF/Z1Q/beRGhinpfAiaeQC+4x+x39mXTTnBsWVjva/n6XJwjairUnjQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XJ5GfyVPSNh7C8nc5ko5dJW/IF198KnPNpv7smjy5Vc=; b=aTxoYjo2ImubdtyVkzp+7nVY2m2K/SEVoWzZ5FWipR36u36m9AVR+RsEXecFrMdFRi+s+57cuyXojTKneW7uA9GLoY5SkKmAH92R8ZhqkHDT6ElMZ3JDqGdSZjPBauwQq0Xy9TlZE1YiG5S7rYHdscrVboXVYs4ZG8mx8xWZmM4= Received: from DM6PR10MB4124.namprd10.prod.outlook.com (2603:10b6:5:218::18) by CY8PR10MB6441.namprd10.prod.outlook.com (2603:10b6:930:63::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8746.40; Thu, 5 Jun 2025 19:23:16 +0000 Received: from DM6PR10MB4124.namprd10.prod.outlook.com ([fe80::b254:4bfb:b53:233b]) by DM6PR10MB4124.namprd10.prod.outlook.com ([fe80::b254:4bfb:b53:233b%5]) with mapi id 15.20.8813.020; Thu, 5 Jun 2025 19:23:16 +0000 Date: Thu, 5 Jun 2025 21:23:09 +0200 To: Alec Brown Subject: Re: [PATCH v4 2/4] blsuki: Add blscfg command to parse Boot Loader Specification snippets Message-ID: References: <20250521125126.3928350-1-alec.r.brown@oracle.com> <20250521125126.3928350-3-alec.r.brown@oracle.com> Content-Disposition: inline In-Reply-To: <20250521125126.3928350-3-alec.r.brown@oracle.com> X-ClientProxiedBy: WA2P291CA0035.POLP291.PROD.OUTLOOK.COM (2603:10a6:1d0:1f::11) To DM6PR10MB4124.namprd10.prod.outlook.com (2603:10b6:5:218::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM6PR10MB4124:EE_|CY8PR10MB6441:EE_ X-MS-Office365-Filtering-Correlation-Id: bdaf4524-e9b3-496d-af23-08dda4666b80 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|376014|1800799024|366016|13003099007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?ag3BSJVeCbnn4H2vfiINNFScXwByO6rvVmyEmWR99hHA8C2KQeeUVU7zcNM7?= =?us-ascii?Q?zoHfKX9wB3oYjypWh1mr7zh1Gm8tz7tMcKHj+iEdF+zQOaKeldaS5UsiB9/x?= =?us-ascii?Q?uIFcNrp9DWl4mxvC7ZRb5K2pV+8kzI/CTfHAZxUqU2b/zAwnZAP1x/bRWZQS?= =?us-ascii?Q?GxDBf1zMi/VOHdyEreVreJFwb+ReQyxYf3ZvuyGd2yAdq7KXdybW3YsllItH?= =?us-ascii?Q?e3kiaYU1XT1NVx9DcLt+KppjrMvHoqx3r9vz1b0MSxe/6XibXcIc2ZoHHqgL?= =?us-ascii?Q?Dsd5OIPOUcEfDGaqyhZXEtDyzZkG5iv4b5O5oTHAf6soeskid6xV6L4XJIQb?= =?us-ascii?Q?Wo6Xnb+U+HCajM0RNXDeIE0Xqrv0mhDd7EbaAY7FPyPFeywL7sbTrMymjf/g?= =?us-ascii?Q?Wm8ZtDBM3EO6NurCok/v1hjlgyp1J768gBSzdXiVh+95gdGOcIxeoEOyh0p2?= =?us-ascii?Q?LLyaasGt2Dj9S+Y8nbpLL6HsaEc28ZZX5t8WrTcj1mKwJ6RaLDA5HOMkiFbO?= =?us-ascii?Q?69R2VzmkCqFbbPxbS9CtPhjQ0LizXoNB88Y5W716dYCp5pswGGUMx3CTKf9S?= =?us-ascii?Q?XSP2/LxvbC67FxzxM9nMYX2wp6Lbn1L1SNvtwA5lv+AEAP5a3n7sl1E8MMie?= =?us-ascii?Q?P3GGYWLLm3M6dQBbBaoQshLjcnUaKUdoLu7uDIfDzS10c4DsFWGBBcWcgOqK?= =?us-ascii?Q?+zM7dM2kG9XUV2YVJwXGL1o0dzN9DKwLzCt3l+/TbGZSo1syxL/ZbtvxP3Nk?= =?us-ascii?Q?3me+ODsaQNYif+KXoMumHSOCu2FD68nz3eJhT5MWSCIOPMpeDThFHzEwYmRi?= =?us-ascii?Q?XIdAb6udd61h9oKN86OGvhbf9VY0ihsUuZ1u+Atl9VW6brD9wwbkRkjQUsiE?= =?us-ascii?Q?3WoHm3AdetVTYd27DVgajZDoLDCDEcvivqVA8+73dx2AAcK93GEkiy4az+Hb?= =?us-ascii?Q?V/DSgxGKXAVi2K8bOExnfGyxCpvH9FMTSqpdZDQXJrFj00Ck/ghIOY1lXCnJ?= =?us-ascii?Q?eMgMAwFJrHgK1/vQLP5cRnPmRNUEWsNUcc2nURjFI7PgkQnLbIlOCOTQMPH+?= =?us-ascii?Q?DVrlGn1QursU2pLRUOwfYtxJEBQw2LWvNIrMY1MzL4Sc0RNybMwxXLvMVyf3?= =?us-ascii?Q?wdAOfmgl/dLPaHJbmhD97/4iTQgyFs13EXuIUNKTdQKuAle4LggLkhH+bCyv?= =?us-ascii?Q?WAot6WGqkWtw4+fBI3Whg9rTToSPpd+wrTySP19edR5JH5Xk6TtEMWUKRxCv?= =?us-ascii?Q?81EsjE440Vy3KudLlqhbDEhWEzWFDGLarwcYHG2vtV7HOwDm8efMbgXJe8n3?= =?us-ascii?Q?OS+wYOZQhK73rZn+aX4OgYrxABnyBFpP4kIwehWFus4yxcDuwaeXtShGWpL/?= =?us-ascii?Q?9orOzBDgVNUuZJ9o6ug+ijO8ERkz?= X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM6PR10MB4124.namprd10.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(376014)(1800799024)(366016)(13003099007); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?2z5hEkyBWKN3ETt7I07zsfmjFbr7iyPZQhxLzqLgcHYHDOXN+6Mvnz/fVvaS?= =?us-ascii?Q?fFbuQyNxSrT7rtJm6nytl2mmof2wC/ev51xXYVtWLjsJk58HZl9w7WYjSzJL?= =?us-ascii?Q?Rhvvxh2eJ7ltHAOpBeI1Pejzfm6KE1wIgzPOsOCVWYZ6QiJK6tZFtavkwkmW?= =?us-ascii?Q?jb3NVqjiwDqFMfzfcHeG/0KEdS6bT5XuUt+sAjPmZDdzMRIOW2YBAfSWw1f8?= =?us-ascii?Q?Hy15ceencGOKjcarVjYx1YZ3neax/J4iE/lMCOsQP5+H9hj1nzcxyWyFM1lO?= =?us-ascii?Q?6ktYZqyKpdu15pdMZlHE7b6OPBpFKajCRFoK1LZ+aMayMNxGDqZIl9BU0kfi?= =?us-ascii?Q?MFBdzOBPl3GlTrChv00qQDL+atxbVLDnnAIDgeul+N3zMGYuAEGkrEdQKkdu?= =?us-ascii?Q?eYE6FGFVZf2O9pmM4+Y5Q2uTQgdaU+KroxhbinXrTm/rWH6YMAmBogt3m2FP?= =?us-ascii?Q?pfBPfXTCk6nUJ8jGTWkCbAWU4Vqd97UtKTHbmIWe9jwcBa7ueENk8kW2UlSq?= =?us-ascii?Q?oY++SB8fEK74aWnEkCrFT7jUYtXJ+94COAIbLSdL4wbmeMdMhWRnZsNkF/+H?= =?us-ascii?Q?+ItF/44cYlg3SSQq04E/AdSvJNZoFZYK7Ou/bSeiLAmOncULPcovbhBkm//S?= =?us-ascii?Q?BRu3pz0Dffj8fdRzi9vCEJxF7P5bBHW1Nef8PGOkwOQ9d+uODmBu0Q/WWT8j?= =?us-ascii?Q?wtCsI+nfeduWX+p7bRXmU+fp7Zr2hc82MtDNWg2ftREtyGS2sW7A4BWDV74n?= =?us-ascii?Q?15dMe87SrIbmHsUo/EKnvAM7VPKyWta/5YrH7w8eNuI6TFRGpfHwyFvRpypx?= =?us-ascii?Q?z3dvv7Z1+lqnXUWWG0VXQzIfYo6vQDIXvz0aGJXFAsb333z85lZb2HoCw2um?= =?us-ascii?Q?gPAhCb/HEx03vVI2IlvHUqdhCLL11NYp2eHOSE64d6/oZ9rU5gmQt+q3LMru?= =?us-ascii?Q?EdmZC41CQ92I4ocB4PcE6Iz6ipO74HWL/b6AuR5rAxAS/2uYPEMrxAAwcWvU?= =?us-ascii?Q?IENZOTT/rvxGv4KOs98xF22QjVOMZrWjJaOJy9C22XkfwDSL7cRdyQPa9aDI?= =?us-ascii?Q?862j0xqKbAT0XDJODjJ4dCbY3jawrFjgtKU8jCYDFss23TAKv7RVkzEX/l64?= =?us-ascii?Q?6euDQPcpmGH6zPIB/kEW5Vr33ZNEiM94NmbUXvEDbp2gIkAinRau4YbLUFvY?= =?us-ascii?Q?kY09VIBiNdysrk7lM/K0vuGhzExKklRgNwmdIAdSrSaxpHEcoclBpcBeU1Kc?= =?us-ascii?Q?nGHutm+RZ6XS0YlYiyXY3aJuXkGFwubVvfKjaXKMMwaeXPTCybyXlgpcL+lV?= =?us-ascii?Q?lga2r/AkOffBrdc1PE7yW21H3WU/+ifWhGk+7g6eRJmMHUClm6BFik0VBJ3d?= =?us-ascii?Q?MdIc2SRjkEC2QW52jf0eAhA34kB9h2Sfsy95TwvNdiXMBQf7GejKn3nD7sUX?= =?us-ascii?Q?xe1f1QxrG6metyXwAtQW5S7m8OQ6iq+9IqaLJx728AAdL1J0FFVz4UdQP9gb?= =?us-ascii?Q?XSFtKe5pB5EP9XqlK8EFyE6nAXjd64OjotIlWeZs+7o3A54qbY6iaJWUVFrm?= =?us-ascii?Q?oYGpQVF7QYPzt2URm00pFV9UzW9bzJJei2r5sjH/?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: r7W7tsulgwhl9tULiXkQ7yIO2Dwvmf6MR5Irf3YiL9pNmHZ++e+Ru9788MgAD5hrnzdKaw6IItHdgWnLUPcmXeQFp4ZGhmRXjDGN8TV+jV9EBvTSINdbPTmH5MWgY7yFRABCaGzvGJ/6EOmt8RMkELIWlxfsQz5le0SkazjrTlbqKQ3Az97tpZshgSSEqUlpfHL9rL3YmOnJpLtUI/2j9vOfWd4DLEXiVI9dm29UJnZzCNyemh+l8SKmdTh4jvDcoQLE3D022pSpKSEYUBzeGJ9xKgn+K4NRqSHJgZe4lxzTGC+Y8UnYDG4n8LVSBDtt6p7osSxWnKjq+yhuUBdFyPHYZSRF6vALeGChCuc6lDmxtOumjN65yUbO04SbssE+kaRWprtxinnPqLPE0j2KCBAynzHzIegQ/Gy/LwFeFLIzq9jxj/wRkqZpWZ7il5IYRekP9e5uNtezan8go05rbQef99Mq8b/8VejyNNJz/e6uvVgIFsCj0srx8AIU7KFgOaB1fdKjpU5zyCOWBj/RzXc7ySSpIbijHGD1XeCylmDdrxwvxiW7bVdZycbea/tG1GOzhF2zf8lRJkdCy/hS9HbkGk8M9bYGUnwuTlzfhgI= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: bdaf4524-e9b3-496d-af23-08dda4666b80 X-MS-Exchange-CrossTenant-AuthSource: DM6PR10MB4124.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 05 Jun 2025 19:23:16.0524 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 9zxwL5x1n1+GWWHDsAn5g0Y6FUG2d7YZ7PRN2OwyUAMfVYjyGPr4yxHp+5qNO8Desha6R5yQw8HzSoO775bp3A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR10MB6441 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.0.736,FMLib:17.12.80.40 definitions=2025-06-05_05,2025-06-05_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 spamscore=0 adultscore=0 malwarescore=0 phishscore=0 mlxscore=0 mlxlogscore=999 suspectscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2505160000 definitions=main-2506050174 X-Proofpoint-GUID: PIbSK2URPFALjEC3GIACEwrK02eBEVci X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNjA1MDE3NCBTYWx0ZWRfX86Y1PHuCooJt QFGqj6Hi52iiJSf6bK/8PW8VQVXVaWLfCjNCCYGJaoNlgcGPbV9EN7CD+BauX9fAYoxnb9EBiY+ vTl5hyTEyW2DgcINB3pfeEIqyffuGBgRS/7CFmCIX7R0TEdhy+jq3Gxuyxcb9i9T5PrRGcb0awi uCyN4wi5djnPFauegTRlUgidUloFWi0xEWh68WowYFOWKSGeieOZh+IszBpCpqqCqyZWzWaVqFu ejL+4imahUVB4UxWNHI1onfhpCOgnI110gruPViGUe7xbGHhLW3kFQNuqiE63pL5NRctZsnrO3q WscShq+fR7JZ919dgasPtTy5EobchFp7nEPR/2oOtcThhECtu1nc3ZikHwbI23d8jy16aBWkjrc zbi6Wmo9qORW05JaIDAKoTvj570B/MUjhOact62MNegQ9skmlu0SSQSkJZgCaAJCfUh8hT8k X-Authority-Analysis: v=2.4 cv=KaTSsRYD c=1 sm=1 tr=0 ts=6841eea8 b=1 cx=c_pps a=zPCbziy225d3KhSqZt3L1A==:117 a=zPCbziy225d3KhSqZt3L1A==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=wKuvFiaSGQ0qltdbU6+NXLB8nM8=:19 a=Ol13hO9ccFRV9qXi2t6ftBPywas=:19 a=xqWC_Br6kY4A:10 a=kj9zAlcOel0A:10 a=6IFa9wvqVegA:10 a=GoEa3M9JfhUA:10 a=nv23E9fyAAAA:8 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=EqdPLkY1AAAA:8 a=yPCof4ZbAAAA:8 a=8ESwzBPI0rBoUH9CvBUA:9 a=QuQnEcDgLPeqfLC4:21 a=CjuIK1q_8ugA:10 a=ehkDpipTsgk7cDPTKqUC:22 a=dfeKg4RqpEhWThG6bP4-:22 cc=ntf awl=host:13206 X-Proofpoint-ORIG-GUID: PIbSK2URPFALjEC3GIACEwrK02eBEVci Received-SPF: pass client-ip=205.220.165.32; envelope-from=daniel.kiper@oracle.com; helo=mx0a-00069f02.pphosted.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Daniel Kiper via Grub-devel Reply-To: The development of GNU GRUB Cc: Daniel Kiper , grub-devel@gnu.org, christopher.obbard@linaro.org, jan.setjeeilers@oracle.com, mate.kukri@canonical.com, pjones@redhat.com, ross.philipson@oracle.com, 93sam@debian.org, phcoder@gmail.com 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 T24gV2VkLCBNYXkgMjEsIDIwMjUgYXQgMTI6NTE6MjRQTSArMDAwMCwgQWxlYyBCcm93biB3cm90 ZToKPiBGcm9tOiBQZXRlciBKb25lcyA8cGpvbmVzQHJlZGhhdC5jb20+Cj4KPiBUaGUgQm9vdExv YWRlclNwZWMgKEJMUykgZGVmaW5lcyBhIHNjaGVtZSB3aGVyZSBkaWZmZXJlbnQgYm9vdGxvYWRl cnMgY2FuCj4gc2hhcmUgYSBmb3JtYXQgZm9yIGJvb3QgaXRlbXMgYW5kIGEgY29uZmlndXJhdGlv biBkaXJlY3RvcnkgdGhhdCBhY2NlcHRzCj4gdGhlc2UgY29tbW9uIGNvbmZpZ3VyYXRpb25zIGFz IGRyb3AtaW4gZmlsZXMuCj4KPiBUaGUgQkxTIFNwZWNpZmljYXRpb246Cj4gaHR0cHM6Ly91YXBp LWdyb3VwLm9yZy9zcGVjaWZpY2F0aW9ucy9zcGVjcy9ib290X2xvYWRlcl9zcGVjaWZpY2F0aW9u Lwo+Cj4gU2lnbmVkLW9mZi1ieTogUGV0ZXIgSm9uZXMgPHBqb25lc0ByZWRoYXQuY29tPgo+IFNp Z25lZC1vZmYtYnk6IEphdmllciBNYXJ0aW5leiBDYW5pbGxhcyA8amF2aWVybUByZWRoYXQuY29t Pgo+IFNpZ25lZC1vZmYtYnk6IFdpbGwgVGhvbXBzb24gPHdqdEBlbmRsZXNzbS5jb20+Cj4gU2ln bmVkLW9mZi1ieTogQWxlYyBCcm93biA8YWxlYy5yLmJyb3duQG9yYWNsZS5jb20+Cj4gLS0tCj4g IGRvY3MvZ3J1Yi50ZXhpICAgICAgICAgICAgICAgICB8ICAgNDcgKysKPiAgZ3J1Yi1jb3JlL01h a2VmaWxlLmNvcmUuZGVmICAgIHwgICAxMCArCj4gIGdydWItY29yZS9jb21tYW5kcy9ibHN1a2ku YyAgICB8IDExOTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZ3J1Yi1jb3Jl L2NvbW1hbmRzL2xlZ2FjeWNmZy5jIHwgICAgNCArLQo+ICBncnViLWNvcmUvY29tbWFuZHMvbWVu dWVudHJ5LmMgfCAgICA4ICstCj4gIGdydWItY29yZS9ub3JtYWwvbWFpbi5jICAgICAgICB8ICAg IDYgKwo+ICBpbmNsdWRlL2dydWIvbWVudS5oICAgICAgICAgICAgfCAgIDE1ICsKPiAgaW5jbHVk ZS9ncnViL25vcm1hbC5oICAgICAgICAgIHwgICAgMiArLQo+ICA4IGZpbGVzIGNoYW5nZWQsIDEy ODQgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGdy dWItY29yZS9jb21tYW5kcy9ibHN1a2kuYwo+Cj4gZGlmZiAtLWdpdCBhL2RvY3MvZ3J1Yi50ZXhp IGIvZG9jcy9ncnViLnRleGkKPiBpbmRleCBkOWIyNmZhMzYuLmFkYWI5MzY2OCAxMDA2NDQKPiAt LS0gYS9kb2NzL2dydWIudGV4aQo+ICsrKyBiL2RvY3MvZ3J1Yi50ZXhpCj4gQEAgLTY0MTcsNiAr NjQxNyw3IEBAIHlvdSBmb3JnZXQgYSBjb21tYW5kLCB5b3UgY2FuIHJ1biB0aGUgY29tbWFuZCBA Y29tbWFuZHtoZWxwfQo+ICAqIGJhY2tncm91bmRfaW1hZ2U6OiAgICAgICAgICAgIExvYWQgYmFj a2dyb3VuZCBpbWFnZSBmb3IgYWN0aXZlIHRlcm1pbmFsCj4gICogYmFkcmFtOjogICAgICAgICAg ICAgICAgICAgICAgRmlsdGVyIG91dCBiYWQgcmVnaW9ucyBvZiBSQU0KPiAgKiBibG9ja2xpc3Q6 OiAgICAgICAgICAgICAgICAgICBQcmludCBhIGJsb2NrIGxpc3QKPiArKiBibHNjZmc6OiAgICAg ICAgICAgICAgICAgICAgICBMb2FkIEJvb3QgTG9hZGVyIFNwZWNpZmljYXRpb24gbWVudSBlbnRy aWVzCj4gICogYm9vdDo6ICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdXAgeW91ciBvcGVy YXRpbmcgc3lzdGVtCj4gICogY2F0OjogICAgICAgICAgICAgICAgICAgICAgICAgU2hvdyB0aGUg Y29udGVudHMgb2YgYSBmaWxlCj4gICogY2xlYXI6OiAgICAgICAgICAgICAgICAgICAgICAgQ2xl YXIgdGhlIHNjcmVlbgo+IEBAIC02NjAzLDYgKzY2MDQsNTIgQEAgUHJpbnQgYSBibG9jayBsaXN0 IChAcHhyZWZ7QmxvY2sgbGlzdCBzeW50YXh9KSBmb3IgQHZhcntmaWxlfS4KPiAgQGVuZCBkZWZm bgo+Cj4KPiArQG5vZGUgYmxzY2ZnCj4gK0BzdWJzZWN0aW9uIGJsc2NmZwo+ICsKPiArQGRlZmZu IENvbW1hbmQgYmxzY2ZnIFtAb3B0aW9uey1wfC0tcGF0aH0gZGlyXSBbQG9wdGlvbnstZnwtLWVu YWJsZS1mYWxsYmFja31dIFtAb3B0aW9uey1kfC0tc2hvdy1kZWZhdWx0fV0gW0BvcHRpb257LW58 LS1zaG93LW5vbi1kZWZhdWx0fV0gW0BvcHRpb257LWV8LS1lbnRyeX0gZmlsZV0KPiArTG9hZCBC b290IExvYWRlciBTcGVjaWZpY2F0aW9uIChCTFMpIGVudHJpZXMgaW50byB0aGUgR1JVQiBtZW51 LiBCb290IGVudHJpZXMKPiArZ2VuZXJhdGVkIGZyb20gQGNvbW1hbmR7YmxzY2ZnfSB3b24ndCBp bnRlcmZlcmUgd2l0aCBlbnRyaWVzIGZyb20gQGZpbGV7Z3J1Yi5jZmd9IGFwcGVhcmluZyBpbgo+ ICt0aGUgR1JVQiBtZW51LiBBbHNvLCBlbnRyaWVzIGdlbmVyYXRlZCBmcm9tIEBjb21tYW5ke2Js c2NmZ30gb25seSBnZW5lcmF0ZSBpbiBtZW1vcnkgYW5kCgpzL29ubHkgZ2VuZXJhdGUvZXhpc3Qg b25seS8KCj4gK2Rvbid0IHVwZGF0ZSBAZmlsZXtncnViLmNmZ30uCj4gKwo+ICtUaGUgQG9wdGlv bnstLXBhdGh9IG9wdGlvbiBvdmVycmlkZXMgdGhlIGRlZmF1bHQgcGF0aCB0byB0aGUgZGlyZWN0 b3J5IGNvbnRhaW5pbmcKPiArdGhlIEJMUyBlbnRyaWVzLiBJZiB0aGlzIG9wdGlvbiBpc24ndCB1 c2VkLCB0aGUgZGVmYXVsdCBsb2NhdGlvbiBpcwo+ICsvbG9hZGVyL2VudHJpZXMgaW4gQGNvZGV7 JEJPT1R9LiBJZiBubyBCTFMgZW50cmllcyBhcmUgZm91bmQsIHRoZQoKV2hhdCBpcyAiJEJPT1Qi PyBBSVVJIHRoaXMgY29tZXMgZnJvbSBCTFMgc3BlYy4gVGhvdWdoIGl0IGhhcyB0byBiZQpjbGVh cmx5IGV4cGxhaW5lZCBvciBCTFMgc3BlYyBwcm9wZXJseSByZWZlcmVuY2VkIGhlcmUuCgo+ICtA b3B0aW9uey0tZW5hYmxlLWZhbGxiYWNrfSBvcHRpb24gY2FuIGJlIHVzZWQgdG8gY2hlY2sgZm9y IGVudHJpZXMgaW4gdGhlIGRlZmF1bHQKPiArZGlyZWN0b3J5LgoKV2hhdCBpcyBhIGRlZmF1bHQg ZGlyZWN0b3J5PwoKPiArVGhlIEBvcHRpb257LS1zaG93LWRlZmF1bHR9IG9wdGlvbiBhbGxvd3Mg dGhlIGRlZmF1bHQgYm9vdCBlbnRyeSB0byBiZSBhZGRlZCB0byB0aGUKPiArR1JVQiBtZW51IGZy b20gdGhlIEJMUyBlbnRyaWVzLgo+ICsKPiArVGhlIEBvcHRpb257LS1zaG93LW5vbi1kZWZhdWx0 fSBvcHRpb24gYWxsb3dzIG5vbi1kZWZhdWx0IGJvb3QgZW50cmllcyB0byBiZSBhZGRlZCB0bwo+ ICt0aGUgR1JVQiBtZW51IGZyb20gdGhlIEJMUyBlbnRyaWVzLgo+ICsKPiArVGhlIEBvcHRpb257 LS1lbnRyeX0gb3B0aW9uIGFsbG93cyBzcGVjaWZpYyBib290IGVudHJpZXMgdG8gYmUgYWRkZWQg dG8gdGhlIEdSVUIgbWVudQo+ICtmcm9tIHRoZSBCTFMgZW50cmllcy4KPiArCj4gK1RoZSBAb3B0 aW9uey0tZW50cnl9LCBAb3B0aW9uey0tc2hvdy1kZWZhdWx0fSwgYW5kIEBvcHRpb257LS1zaG93 LW5vbi1kZWZhdWx0fSBvcHRpb25zCj4gK2FyZSB1c2VkIHRvIGZpbHRlciB3aGljaCBCTFMgZW50 cmllcyBhcmUgYWRkZWQgdG8gdGhlIEdSVUIgbWVudS4gSWYgbm9uZSBhcmUKPiArdXNlZCwgYWxs IGVudHJpZXMgaW4gdGhlIGRlZmF1bHQgbG9jYXRpb24gb3IgdGhlIGxvY2F0aW9uIHNwZWNpZmll ZCBieSBAb3B0aW9uey0tcGF0aH0KPiArd2lsbCBiZSBhZGRlZCB0byB0aGUgR1JVQiBtZW51Lgo+ ICsKPiArQSBCTFMgY29uZmlnIGZpbGUgZXhhbXBsZToKPiArQGV4YW1wbGUKPiArIyAvYm9vdC9s b2FkZXIvZW50cmllcy82YTk4NTdhMzkzNzI0YjdhOTgxZWJiNWI4NDk1YjllYS0zLjguMC0yLmZj MTkueDg2XzY0LmNvbmYKPiArdGl0bGUgICAgICAgIEZlZG9yYSAxOSAoUmF3aGlkZSkKPiArc29y dC1rZXkgICAgIGZlZG9yYQo+ICttYWNoaW5lLWlkICAgNmE5ODU3YTM5MzcyNGI3YTk4MWViYjVi ODQ5NWI5ZWEKPiArdmVyc2lvbiAgICAgIDMuOC4wLTIuZmMxOS54ODZfNjQKPiArb3B0aW9ucyAg ICAgIHJvb3Q9VVVJRD02ZDMzNzZlNC1mYzkzLTQ1MDktOTVlYy1hMjFkNjgwMTFkYTIgcXVpZXQK PiArYXJjaGl0ZWN0dXJlIHg2NAo+ICtsaW51eCAgICAgICAgLzZhOTg1N2EzOTM3MjRiN2E5ODFl YmI1Yjg0OTViOWVhLzMuOC4wLTIuZmMxOS54ODZfNjQvbGludXgKPiAraW5pdHJkICAgICAgIC82 YTk4NTdhMzkzNzI0YjdhOTgxZWJiNWI4NDk1YjllYS8zLjguMC0yLmZjMTkueDg2XzY0L2luaXRy ZAo+ICtAZW5kIGV4YW1wbGUKPiArCj4gK1JlZmVyZW5jZXM6IEB1cmVme2h0dHBzOi8vdWFwaS1n cm91cC5vcmcvc3BlY2lmaWNhdGlvbnMvc3BlY3MvYm9vdF9sb2FkZXJfc3BlY2lmaWNhdGlvbi8s IFRoZSBCb290IExvYWRlciBTcGVjaWZpY2F0aW9ufQoKTmljZSwgYnV0IGl0IGhhcyB0byBiZSBj bGVhcmx5IHJlZmVyZW5jZWQgZnJvbSB0aGUgdGV4dCBhYm92ZS4KCj4gK0BlbmQgZGVmZm4KPiAr Cj4gKwo+ICBAbm9kZSBib290Cj4gIEBzdWJzZWN0aW9uIGJvb3QKPgo+IGRpZmYgLS1naXQgYS9n cnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYK PiBpbmRleCBmNzBlMDJlNjkuLjY3NjI4ZjY1ZiAxMDA2NDQKPiAtLS0gYS9ncnViLWNvcmUvTWFr ZWZpbGUuY29yZS5kZWYKPiArKysgYi9ncnViLWNvcmUvTWFrZWZpbGUuY29yZS5kZWYKPiBAQCAt ODQ1LDYgKzg0NSwxNiBAQCBtb2R1bGUgPSB7Cj4gICAgY29tbW9uID0gY29tbWFuZHMvYmxvY2ts aXN0LmM7Cj4gIH07Cj4KPiArbW9kdWxlID0gewo+ICsgIG5hbWUgPSBibHN1a2k7Cj4gKyAgY29t bW9uID0gY29tbWFuZHMvYmxzdWtpLmM7Cj4gKyAgY29tbW9uID0ga2Vybi92ZXJjbXAuYzsKCkkg dGhpbmsgdGhpcyBzaG91bGQgbm90IGJlIGEgcGFydCBvZiB0aGUgbW9kdWxlIGJ1dCB0aGUga2Vy bmVsLgoKPiArICBlbmFibGUgPSBwb3dlcnBjX2llZWUxMjc1Owo+ICsgIGVuYWJsZSA9IGVmaTsK PiArICBlbmFibGUgPSBpMzg2X3BjOwo+ICsgIGVuYWJsZSA9IGVtdTsKPiArfTsKPiArCj4gIG1v ZHVsZSA9IHsKPiAgICBuYW1lID0gYm9vdDsKPiAgICBjb21tb24gPSBjb21tYW5kcy9ib290LmM7 Cj4gZGlmZiAtLWdpdCBhL2dydWItY29yZS9jb21tYW5kcy9ibHN1a2kuYyBiL2dydWItY29yZS9j b21tYW5kcy9ibHN1a2kuYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAw Li4yYWQ5NjBhZTMKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZ3J1Yi1jb3JlL2NvbW1hbmRzL2Js c3VraS5jCj4gQEAgLTAsMCArMSwxMTk4IEBACj4gKy8qCj4gKyAqICBHUlVCICAtLSAgR1JhbmQg VW5pZmllZCBCb290bG9hZGVyCj4gKyAqICBDb3B5cmlnaHQgKEMpIDIwMjUgIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbiwgSW5jLgo+ICsgKgo+ICsgKiAgR1JVQiBpcyBmcmVlIHNvZnR3YXJlOiB5 b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ ICsgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKPiArICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u Cj4gKyAqCj4gKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCj4gKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgo+ICsgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQo+ICsgKiAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogIFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4g KyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xp Y2Vuc2VzLz4uCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPGdydWIvbGlzdC5oPgo+ICsjaW5jbHVk ZSA8Z3J1Yi90eXBlcy5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+Cj4gKyNpbmNsdWRlIDxn cnViL21tLmg+Cj4gKyNpbmNsdWRlIDxncnViL2Vyci5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9kbC5o Pgo+ICsjaW5jbHVkZSA8Z3J1Yi9leHRjbWQuaD4KPiArI2luY2x1ZGUgPGdydWIvaTE4bi5oPgo+ ICsjaW5jbHVkZSA8Z3J1Yi9mcy5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9lbnYuaD4KPiArI2luY2x1 ZGUgPGdydWIvZmlsZS5oPgo+ICsjaW5jbHVkZSA8Z3J1Yi9ub3JtYWwuaD4KPiArI2luY2x1ZGUg PGdydWIvc2FmZW1hdGguaD4KPiArI2luY2x1ZGUgPGdydWIvdmVyY21wLmg+Cj4gKyNpbmNsdWRl IDxncnViL2xpYi9lbnZibGsuaD4KPiArCj4gK0dSVUJfTU9EX0xJQ0VOU0UgKCJHUEx2MysiKTsK PiArCj4gKyNkZWZpbmUgR1JVQl9CTFNfQ09ORklHX1BBVEggIi9sb2FkZXIvZW50cmllcy8iCj4g Kwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGdydWJfYXJnX29wdGlvbiBibHNfb3B0W10gPQo+ICsg IHsKPiArICAgIHsicGF0aCIsICdwJywgMCwgIlNwZWNpZnkgcGF0aCB0byBmaW5kIEJMUyBlbnRy aWVzLiIsIE5fKCJESVIiKSwgQVJHX1RZUEVfUEFUSE5BTUV9LAo+ICsgICAgeyJlbmFibGUtZmFs bGJhY2siLCAnZicsIDAsICJGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBCTFMgcGF0aCBpZiAtLXBh dGggZmFpbHMgdG8gZmluZCBCTFMgZW50cmllcy4iLCAwLCBBUkdfVFlQRV9OT05FfSwKPiArICAg IHsic2hvdy1kZWZhdWx0IiwgJ2QnLCAwLCAiQWxsb3cgdGhlIGRlZmF1bHQgQkxTIGVudHJ5IHRv IGJlIGFkZGVkIHRvIHRoZSBHUlVCIG1lbnUuIiwgMCwgQVJHX1RZUEVfTk9ORX0sCj4gKyAgICB7 InNob3ctbm9uLWRlZmF1bHQiLCAnbicsIDAsICJBbGxvdyB0aGUgbm9uLWRlZmF1bHQgQkxTIGVu dHJpZXMgdG8gYmUgYWRkZWQgdG8gdGhlIEdSVUIgbWVudS4iLCAwLCBBUkdfVFlQRV9OT05FfSwK PiArICAgIHsiZW50cnkiLCAnZScsIDAsICJBbGxvdyBzcGVjaWZpYyBCTFMgZW50cmllcyB0byBi ZSBhZGRlZCB0byB0aGUgR1JVQiBtZW51LiIsIE5fKCJGSUxFIiksIEFSR19UWVBFX0ZJTEV9LAo+ ICsgICAgezAsIDAsIDAsIDAsIDAsIDB9Cj4gKyAgfTsKPiArCj4gK3N0cnVjdCBrZXl2YWwKPiAr ewo+ICsgIGNvbnN0IGNoYXIgKmtleTsKPiArICBjaGFyICp2YWw7Cj4gK307Cj4gKwo+ICtzdGF0 aWMgZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cmllcyA9IE5VTEw7Cj4gKwo+ICsjZGVmaW5lIEZP Ul9CTFNVS0lfRU5UUklFUyh2YXIpIEZPUl9MSVNUX0VMRU1FTlRTICh2YXIsIGVudHJpZXMpCj4g Kwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWRkIGEgbmV3IGtleXZhbCBwYWlyIHRv IGEgbGlzdCBvZiBrZXl2YWxzIHN0b3JlZCBpbiB0aGUKPiArICogZW50cnkgcGFyYW1ldGVyLgo+ ICsgKi8KPiArc3RhdGljIGdydWJfZXJyX3QKPiArYmxzdWtpX2FkZF9rZXl2YWwgKGdydWJfYmxz dWtpX2VudHJ5X3QgKmVudHJ5LCBjaGFyICprZXksIGNoYXIgKnZhbCkKPiArewo+ICsgIGNoYXIg KmssICp2Owo+ICsgIHN0cnVjdCBrZXl2YWwgKiprdnMsICprdjsKPiArICBncnViX3NpemVfdCBz aXplOwo+ICsgIGludCBuZXdfbiA9IGVudHJ5LT5ua2V5dmFscyArIDE7Cj4gKwo+ICsgIGlmIChl bnRyeS0+a2V5dmFsc19zaXplID09IDApCj4gKyAgICB7Cj4gKyAgICAgIHNpemUgPSBzaXplb2Yg KHN0cnVjdCBrZXl2YWwgKik7Cj4gKyAgICAgIGt2cyA9IGdydWJfbWFsbG9jIChzaXplKTsKPiAr ICAgICAgaWYgKGt2cyA9PSBOVUxMKQo+ICsJcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9NRU1PUlksICJjb3VsZG4ndCBhbGxvY2F0ZSBzcGFjZSBmb3IgQkxTIGtleSB2YWx1ZXMi KTsKPiArCj4gKyAgICAgIGVudHJ5LT5rZXl2YWxzID0ga3ZzOwo+ICsgICAgICBlbnRyeS0+a2V5 dmFsc19zaXplID0gc2l6ZTsKPiArICAgIH0KPiArICBlbHNlIGlmIChlbnRyeS0+a2V5dmFsc19z aXplIDwgbmV3X24gKiBzaXplb2YgKHN0cnVjdCBrZXl2YWwgKikpCj4gKyAgICB7Cj4gKyAgICAg IHNpemUgPSBlbnRyeS0+a2V5dmFsc19zaXplICogMjsKPiArICAgICAga3ZzID0gZ3J1Yl9yZWFs bG9jIChlbnRyeS0+a2V5dmFscywgc2l6ZSk7Cj4gKyAgICAgIGlmIChrdnMgPT0gTlVMTCkKPiAr CXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAiY291bGRuJ3QgcmVh bGxvY2F0ZSBzcGFjZSBmb3IgQkxTIGtleSB2YWx1ZXMiKTsKPiArCj4gKyAgICAgIGVudHJ5LT5r ZXl2YWxzID0ga3ZzOwo+ICsgICAgICBlbnRyeS0+a2V5dmFsc19zaXplID0gc2l6ZTsKPiArICAg IH0KPiArCj4gKyAga3YgPSBncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1Y3Qga2V5dmFsKSk7Cj4g KyAgaWYgKGt2ID09IE5VTEwpCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VU X09GX01FTU9SWSwgImNvdWxkbid0IGZpbmQgc3BhY2UgZm9yIG5ldyBCTFMga2V5IHZhbHVlIik7 Cj4gKwo+ICsgIGsgPSBncnViX3N0cmR1cCAoa2V5KTsKPiArICBpZiAoayA9PSBOVUxMKQo+ICsg ICAgewo+ICsgICAgICBncnViX2ZyZWUgKGt2KTsKPiArICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJjb3VsZG4ndCBmaW5kIHNwYWNlIGZvciBuZXcgQkxT IGtleSB2YWx1ZSIpOwo+ICsgICAgfQo+ICsKPiArICB2ID0gZ3J1Yl9zdHJkdXAgKHZhbCk7Cj4g KyAgaWYgKHYgPT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgZ3J1Yl9mcmVlIChrKTsKPiArICAg ICAgZ3J1Yl9mcmVlIChrdik7Cj4gKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9P VVRfT0ZfTUVNT1JZLCAiY291bGRuJ3QgZmluZCBzcGFjZSBmb3IgbmV3IEJMUyBrZXkgdmFsdWUi KTsKPiArICAgIH0KPiArCj4gKyAga3YtPmtleSA9IGs7Cj4gKyAga3YtPnZhbCA9IHY7Cj4gKwo+ ICsgIGVudHJ5LT5rZXl2YWxzW2VudHJ5LT5ua2V5dmFsc10gPSBrdjsKPiArICBlbnRyeS0+bmtl eXZhbHMgPSBuZXdfbjsKPiArCj4gKyAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gK30KPiArCj4g Ky8qCj4gKyAqIEZpbmQgdGhlIHZhbHVlIG9mIHRoZSBrZXkgbmFtZWQgYnkga2V5bmFtZS4gSWYg dGhlcmUgYXJlIGFsbG93ZWQgdG8gYmUKPiArICogbW9yZSB0aGFuIG9uZSwgcGFzcyBhIHBvaW50 ZXIgdG8gYW4gaW50IHNldCB0byAtMSB0aGUgZmlyc3QgdGltZSwgYW5kIHBhc3MKCnMvaW50L2xh c3QvPwoKPiArICogdGhlIHNhbWUgcG9pbnRlciB0aHJvdWdoIGVhY2ggdGltZSBhZnRlciwgYW5k IGl0J2xsIHJldHVybiB0aGVtIGluIHNvcnRlZAo+ICsgKiBvcmRlciBhcyBkZWZpbmVkIGluIHRo ZSBCTFMgZnJhZ21lbnQgZmlsZS4KPiArICovCj4gK3N0YXRpYyBjaGFyICoKPiArYmxzdWtpX2dl dF92YWwgKGdydWJfYmxzdWtpX2VudHJ5X3QgKmVudHJ5LCBjb25zdCBjaGFyICprZXluYW1lLCBp bnQgKmxhc3QpCj4gK3sKPiArICBpbnQgaWR4LCBzdGFydCA9IDA7CgpzdGFydCA9IChsYXN0ICE9 IE5VTEwpID8gKCpsYXN0ICsgMSkgOiAwOwoKPiArICBzdHJ1Y3Qga2V5dmFsICprdiA9IE5VTEw7 Cj4gKyAgY2hhciAqcmV0ID0gTlVMTDsKPiArCj4gKyAgaWYgKGxhc3QgIT0gTlVMTCkKPiArICAg IHN0YXJ0ID0gKmxhc3QgKyAxOwoKLi4uIGFuZCB5b3UgY2FuIGRyb3AgdGhpcyB0aGVuLi4uCgo+ ICsgIGZvciAoaWR4ID0gc3RhcnQ7IGlkeCA8IGVudHJ5LT5ua2V5dmFsczsgaWR4KyspCj4gKyAg ICB7Cj4gKyAgICAgIGt2ID0gZW50cnktPmtleXZhbHNbaWR4XTsKPiArCj4gKyAgICAgIGlmIChn cnViX3N0cmNtcCAoa2V5bmFtZSwga3YtPmtleSkgPT0gMCkKPiArCXsKPiArCSAgcmV0ID0ga3Yt PnZhbDsKPiArCSAgYnJlYWs7Cj4gKwl9Cj4gKyAgICB9Cj4gKwo+ICsgIGlmIChsYXN0ICE9IE5V TEwpCj4gKyAgICB7Cj4gKyAgICAgIGlmIChpZHggPT0gZW50cnktPm5rZXl2YWxzKQo+ICsJKmxh c3QgPSAtMTsKPiArICAgICAgZWxzZQo+ICsJKmxhc3QgPSBpZHg7Cj4gKyAgICB9Cj4gKwo+ICsg IHJldHVybiByZXQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIEFkZCBhIG5ldyBncnViX2Jsc3VraV9l bnRyeV90IHN0cnVjdCB0byB0aGUgZW50cmllcyBsaXN0IGFuZCBzb3J0IGl0J3MKPiArICogcG9z aXRpb24gb24gdGhlIGxpc3QuCj4gKyAqLwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtibHN1a2lf YWRkX2VudHJ5IChncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeSkKPiArewo+ICsgIGdydWJfYmxz dWtpX2VudHJ5X3QgKmUsICpsYXN0ID0gTlVMTDsKPiArICBncnViX2Vycl90IGVycjsKPiArICBp bnQgcmM7Cj4gKwo+ICsgIGlmIChlbnRyaWVzID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGdy dWJfZHByaW50ZiAoImJsc3VraSIsICJBZGQgZW50cnkgd2l0aCBpZCBcIiVzXCJcbiIsIGVudHJ5 LT5maWxlbmFtZSk7Cj4gKyAgICAgIGVudHJpZXMgPSBlbnRyeTsKPiArICAgICAgcmV0dXJuIEdS VUJfRVJSX05PTkU7Cj4gKyAgICB9Cj4gKwo+ICsgIEZPUl9CTFNVS0lfRU5UUklFUyAoZSkKPiAr ICAgIHsKPiArICAgICAgZXJyID0gZ3J1Yl9zcGxpdF92ZXJjbXAgKGVudHJ5LT5maWxlbmFtZSwg ZS0+ZmlsZW5hbWUsIHRydWUsICZyYyk7Cj4gKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9O RSkKPiArCXJldHVybiBlcnI7Cj4gKwo+ICsgICAgICBpZiAocmMgPT0gR1JVQl9WRVJDTVBfU0FN RSkKPiArCXJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJkdXBsaWNh dGUgZmlsZSIpOwoKSSB3b3VsZCBhZGQgZmlsZSBuYW1lIHRvIHRoZSBlcnJvciBtZXNzYWdlLi4u IFRob3VnaCBJIGFtIG5vdCBzdXJlIGhvdwp0aGlzIGVycm9yIGNhbiBiZSB0cmlnZ2VyZWQuLi4K Cj4gKyAgICAgIGlmIChyYyA9PSBHUlVCX1ZFUkNNUF9ORVdFUikKPiArCXsKPiArCSAgZ3J1Yl9k cHJpbnRmICgiYmxzdWtpIiwgIkFkZCBlbnRyeSB3aXRoIGlkIFwiJXNcIlxuIiwgZW50cnktPmZp bGVuYW1lKTsKPiArCSAgZ3J1Yl9saXN0X3B1c2ggKEdSVUJfQVNfTElTVF9QICgmZSksIEdSVUJf QVNfTElTVCAoZW50cnkpKTsKPiArCSAgaWYgKGVudHJ5LT5uZXh0ID09IGVudHJpZXMpCj4gKwkg ICAgewo+ICsJICAgICAgZW50cmllcyA9IGVudHJ5Owo+ICsJICAgICAgZW50cnktPnByZXYgPSBO VUxMOwo+ICsJICAgIH0KPiArCSAgZWxzZQo+ICsJICAgIGxhc3QtPm5leHQgPSBlbnRyeTsKPiAr CSAgcmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gKwl9Cj4gKyAgICAgIGxhc3QgPSBlOwo+ICsgICAg fQo+ICsKPiArICBpZiAobGFzdCAhPSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBncnViX2Rwcmlu dGYgKCJibHN1a2kiLCAiQWRkIGVudHJ5IHdpdGggaWQgXCIlc1wiXG4iLCBlbnRyeS0+ZmlsZW5h bWUpOwo+ICsgICAgICBsYXN0LT5uZXh0ID0gZW50cnk7Cj4gKyAgICAgIGVudHJ5LT5wcmV2ID0g Jmxhc3Q7Cj4gKyAgICB9Cj4gKwo+ICsgIHJldHVybiBHUlVCX0VSUl9OT05FOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHBhcnNlcyBlYWNoIGxpbmUgb2YgYSBCTFMgY29uZmln IGZpbGUgdG8gb2J0YWluIHRoZSBrZXkgdmFsdWUKPiArICogcGFpcnMgdGhhdCB3aWxsIGJlIHVz ZWQgdG8gc2V0dXAgdGhlIEdSVUIgbWVudSBlbnRyaWVzLiBUaGUga2V5IHZhbHVlIHBhaXIKPiAr ICogd2lsbCBiZSBzdG9yZWQgaW4gYSBsaXN0IGluIHRoZSBlbnRyeSBwYXJhbWV0ZXIuCj4gKyAq Lwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtibHNfcGFyc2Vfa2V5dmFscyAoZ3J1Yl9maWxlX3Qg ZiwgZ3J1Yl9ibHN1a2lfZW50cnlfdCAqZW50cnkpCj4gK3sKPiArICBncnViX2Vycl90IGVyciA9 IEdSVUJfRVJSX05PTkU7Cj4gKwo+ICsgIGZvciAoOzspCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIg KmJ1ZjsKPiArICAgICAgY2hhciAqc2VwYXJhdG9yOwo+ICsKPiArICAgICAgYnVmID0gZ3J1Yl9m aWxlX2dldGxpbmUgKGYpOwo+ICsgICAgICBpZiAoYnVmID09IE5VTEwpCj4gKwlicmVhazsKPiAr Cj4gKyAgICAgIHdoaWxlIChidWYgIT0gTlVMTCAmJiBidWZbMF0gIT0gJ1wwJyAmJiAoYnVmWzBd ID09ICcgJyB8fCBidWZbMF0gPT0gJ1x0JykpCgoiYnVmICE9IE5VTEwiIHNlZW1zIHJlZHVuZGFu dCBoZXJlLi4uCgpBbmQgSSB0aGluayBidWZbMF0gaXMgY29uZnVzaW5nIGhlcmUgYW5kIHNob3Vs ZCBiZSByZXBsYWNlZCB3aXRoICpidWYuCgo+ICsJYnVmKys7Cj4gKyAgICAgIGlmIChidWZbMF0g PT0gJyMnKQoKRGl0dG8uCgo+ICsJewo+ICsJICBncnViX2ZyZWUgKGJ1Zik7CgpZb3UgZG8gbm90 IGZyZWUgd2hhdCB5b3Ugd2FudCBoZXJlLi4uCgo+ICsJICBjb250aW51ZTsKPiArCX0KPiArCj4g KyAgICAgIHNlcGFyYXRvciA9IGdydWJfc3RyY2hyIChidWYsICcgJyk7Cj4gKwo+ICsgICAgICBp ZiAoc2VwYXJhdG9yID09IE5VTEwpCj4gKwlzZXBhcmF0b3IgPSBncnViX3N0cmNociAoYnVmLCAn XHQnKTsKPiArCj4gKyAgICAgIGlmIChzZXBhcmF0b3IgPT0gTlVMTCB8fCBzZXBhcmF0b3JbMV0g PT0gJ1wwJykKCkhtbW0uLi4gQ291bGQgbm90IHlvdSBpbXBsZW1lbnQgZ3J1Yl9zdHJ0b2soKT8g Im1hbiBzdHJ0b2siIGlzIHlvdXIgZnJpZW5kLgpDb3B5IGZyb20gZ251bGliPwoKPiArCXsKPiAr CSAgZ3J1Yl9mcmVlIChidWYpOwo+ICsJICBicmVhazsKPiArCX0KPiArCj4gKyAgICAgIHNlcGFy YXRvclswXSA9ICdcMCc7CgpFdmVuIGlmICdzZXBhcmF0b3JbMF0nIHdvcmsgKnNlcGFyYXRvciBp cyBtb3JlIGFwcHJvcHJpYXRlIGhlcmUuCgo+ICsgICAgICBkbwo+ICsJewo+ICsJICBzZXBhcmF0 b3IrKzsKPiArCX0KPiArICAgICAgd2hpbGUgKCpzZXBhcmF0b3IgPT0gJyAnIHx8ICpzZXBhcmF0 b3IgPT0gJ1x0Jyk7Cj4gKwo+ICsgICAgICBlcnIgPSBibHN1a2lfYWRkX2tleXZhbCAoZW50cnks IGJ1Ziwgc2VwYXJhdG9yKTsKPiArICAgICAgZ3J1Yl9mcmVlIChidWYpOwoKQWdhaW4sIGJ1ZiBt YXkgcG9pbnQgdG8gbm90IHdoYXQgeW91IGV4cGVjdC4uLgoKPiArICAgICAgaWYgKGVyciAhPSBH UlVCX0VSUl9OT05FKQo+ICsJYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgIHJldHVybiBlcnI7Cj4g K30KPiArCj4gK3N0cnVjdCByZWFkX2VudHJ5X2luZm8KPiArewo+ICsgIGNvbnN0IGNoYXIgKmRl dmlkOwo+ICsgIGNvbnN0IGNoYXIgKmRpcm5hbWU7Cj4gKyAgZ3J1Yl9maWxlX3QgZmlsZTsKPiAr fTsKCkkgd291bGQgcHJlZmVyIGlmIHlvdSBkZWZpbmUgYWxsIHN0cnVjdHMgYW5kIHZhcmlhYmxl cyBhdCB0aGUgYmVnaW5uaW5nCm9mIHRoZSBmaWxlLgoKPiArLyoKPiArICogSWYgYSBmaWxlIGhh c24ndCBhbHJlYWR5IGJlZW4gb3BlbmVkLCB0aGlzIGZ1bmN0aW9uIG9wZW5zIGEgQkxTIGNvbmZp ZyBmaWxlCj4gKyAqIGFuZCBpbml0aWFsaXplcyBlbnRyeSBkYXRhIGJlZm9yZSBwYXJzaW5nIGtl eXZhbHMgYW5kIGFkZGluZyB0aGUgZW50cnkgdG8KPiArICogdGhlIGxpc3Qgb2YgQkxTIGVudHJp ZXMuCj4gKyAqLwo+ICtzdGF0aWMgaW50Cj4gK2Jsc3VraV9yZWFkX2VudHJ5IChjb25zdCBjaGFy ICpmaWxlbmFtZSwKPiArCQkgICBjb25zdCBzdHJ1Y3QgZ3J1Yl9kaXJob29rX2luZm8gKmRpcmhv b2tfaW5mbyBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpLAo+ICsJCSAgIHZvaWQgKmRhdGEp Cj4gK3sKPiArICBncnViX3NpemVfdCBwcmVmaXhfbGVuID0gMCwgZmlsZW5hbWVfbGVuLCBleHRf bGVuID0gNTsKPiArICBncnViX2Vycl90IGVycjsKPiArICBjaGFyICpwID0gTlVMTDsKPiArICBn cnViX2ZpbGVfdCBmID0gTlVMTDsKPiArICBncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeTsKPiAr ICBzdHJ1Y3QgcmVhZF9lbnRyeV9pbmZvICppbmZvID0gKHN0cnVjdCByZWFkX2VudHJ5X2luZm8g KikgZGF0YTsKPiArCj4gKyAgZ3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgImZpbGVuYW1lOiBcIiVz XCJcbiIsIGZpbGVuYW1lKTsKPiArCj4gKyAgZmlsZW5hbWVfbGVuID0gZ3J1Yl9zdHJsZW4gKGZp bGVuYW1lKTsKPiArCj4gKyAgaWYgKGluZm8tPmZpbGUgIT0gTlVMTCkKPiArICAgIGYgPSBpbmZv LT5maWxlOwo+ICsgIGVsc2UKPiArICAgIHsKPiArICAgICAgaWYgKGZpbGVuYW1lX2xlbiA8IGV4 dF9sZW4gfHwgZ3J1Yl9zdHJjbXAgKGZpbGVuYW1lICsgZmlsZW5hbWVfbGVuIC0gZXh0X2xlbiwg Ii5jb25mIikgIT0gMCkKClBsZWFzZSB1c2UgJ3NpemVvZiAoIi5jb25mIikgLSAxJyBpbnN0ZWFk IG9mIGV4dF9sZW4uCgo+ICsJcmV0dXJuIDA7Cj4gKwo+ICsgICAgICBwID0gZ3J1Yl94YXNwcmlu dGYgKCIoJXMpJXMvJXMiLCBpbmZvLT5kZXZpZCwgaW5mby0+ZGlybmFtZSwgZmlsZW5hbWUpOwo+ ICsKPiArICAgICAgZiA9IGdydWJfZmlsZV9vcGVuIChwLCBHUlVCX0ZJTEVfVFlQRV9DT05GSUcp Owo+ICsgICAgICBncnViX2ZyZWUgKHApOwo+ICsgICAgICBpZiAoZiA9PSBOVUxMKQo+ICsJZ290 byBmaW5pc2g7Cj4gKyAgICB9Cj4gKwo+ICsgIGVudHJ5ID0gZ3J1Yl96YWxsb2MgKHNpemVvZiAo KmVudHJ5KSk7Cj4gKyAgaWYgKGVudHJ5ID09IE5VTEwpCj4gKyAgICBnb3RvIGZpbmlzaDsKPiAr Cj4gKyAgLyoKPiArICAgKiBJZiBhIGZpbGUgaXMgb3BlbmVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9u LCB0aGUgZmlsZW5hbWUgbWF5IGhhdmUgYSBwcmVmaXguCgpJIHRoaW5rIHlvdSBtZWFuICJwYXRo IiBpbnN0ZWFkIG9mICJwcmVmaXgiIGhlcmUuCgpBZGRpdGlvbmFsbHksIGNvdWxkIG5vdCB5b3Ug dXNlIGdydWJfZ2V0X2Rpcm5hbWUoKSBmcm9tCmdydWItY29yZS9nZnhtZW51L2d1aV9zdHJpbmdf dXRpbC5jIG9yIGZpbmQgYmV0dGVyIGFsdGVybmF0aXZlIGluIHRoZQpHUlVCPyBPZiBjb3Vyc2Ug aWYgeW91IHVzZSBncnViX2dldF9kaXJuYW1lKCkgdGhlbiBpdCBzaG91bGQgYmUgbW92ZWQgdG8K dGhlIGtlcm5lbC4uLgoKPiArICAgKiBTaW5jZSB0aGUgZmlsZW5hbWUgaXMgdXNlZCBmb3IgdGhl IElEIG9mIHRoZSBHUlVCIG1lbnUgZW50cnksIHdlIGNhbgo+ICsgICAqIHJlbW92ZSB0aGUgcHJl Zml4Lgo+ICsgICAqLwo+ICsgIGlmIChpbmZvLT5maWxlICE9IE5VTEwpCj4gKyAgICB7Cj4gKyAg ICAgIGNoYXIgKnNsYXNoOwo+ICsKPiArICAgICAgc2xhc2ggPSBncnViX3N0cnJjaHIgKGZpbGVu YW1lLCAnLycpOwo+ICsgICAgICBpZiAoc2xhc2ggPT0gTlVMTCkKPiArCXNsYXNoID0gZ3J1Yl9z dHJyY2hyIChmaWxlbmFtZSwgJ1xcJyk7CgpJIGFtIG5vdCBlbnRpcmVseSBzdXJlIHdoeSB3ZSBj YXJlIGFib3V0ICJcIi4uLgoKPiArICAgICAgaWYgKHNsYXNoICE9IE5VTEwpCj4gKwl7Cj4gKwkg IHdoaWxlICgqc2xhc2ggPT0gJy8nIHx8ICpzbGFzaCA9PSAnXFwnKQo+ICsJICAgIHNsYXNoKys7 Cj4gKwo+ICsJICBwcmVmaXhfbGVuID0gc2xhc2ggLSBmaWxlbmFtZTsKPiArCX0KPiArICAgIH0K PiArICBmaWxlbmFtZV9sZW4gLT0gcHJlZml4X2xlbjsKPiArCj4gKyAgZW50cnktPmZpbGVuYW1l ID0gZ3J1Yl9zdHJuZHVwIChmaWxlbmFtZSArIHByZWZpeF9sZW4sIGZpbGVuYW1lX2xlbik7Cj4g KyAgaWYgKGVudHJ5LT5maWxlbmFtZSA9PSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBncnViX2Zy ZWUgKGVudHJ5KTsKPiArICAgICAgZ290byBmaW5pc2g7Cj4gKyAgICB9Cj4gKwo+ICsgIGVyciA9 IGJsc19wYXJzZV9rZXl2YWxzIChmLCBlbnRyeSk7Cj4gKwo+ICsgIGlmIChlcnIgPT0gR1JVQl9F UlJfTk9ORSkKPiArICAgIGJsc3VraV9hZGRfZW50cnkgKGVudHJ5KTsKPiArICBlbHNlCj4gKyAg ICBncnViX2ZyZWUgKGVudHJ5KTsKPiArCj4gKyBmaW5pc2g6Cj4gKyAgaWYgKGYgIT0gTlVMTCkK PiArICAgIGdydWJfZmlsZV9jbG9zZSAoZik7Cj4gKwo+ICsgIHJldHVybiAwOwo+ICt9Cj4gKwo+ ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBsaXN0IG9mIHZhbHVlcyB0aGF0IGhh ZCB0aGUgc2FtZSBrZXkgaW4gdGhlIEJMUwo+ICsgKiBjb25maWcgZmlsZS4gVGhlIG51bWJlciBv ZiBlbnRyaWVzIGluIHRoaXMgbGlzdCBpcyByZXR1cm5lZCBieSB0aGUgbGVuCj4gKyAqIHBhcmFt ZXRlci4KPiArICovCj4gK3N0YXRpYyBjaGFyICoqCj4gK2Jsc3VraV9tYWtlX2xpc3QgKGdydWJf YmxzdWtpX2VudHJ5X3QgKmVudHJ5LCBjb25zdCBjaGFyICprZXksIGludCAqbGVuKQo+ICt7Cj4g KyAgaW50IGxhc3QgPSAtMTsKPiArICBjaGFyICp2YWw7Cj4gKyAgaW50IG5saXN0ID0gMDsKPiAr ICBjaGFyICoqbGlzdDsKPiArCj4gKyAgbGlzdCA9IGdydWJfemFsbG9jIChzaXplb2YgKGNoYXIg KikpOwo+ICsgIGlmIChsaXN0ID09IE5VTEwpCj4gKyAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAg d2hpbGUgKDEpCj4gKyAgICB7Cj4gKyAgICAgIGNoYXIgKipuZXc7Cj4gKwo+ICsgICAgICAvKgo+ ICsgICAgICAgKiBTaW5jZSB0aGUgc2FtZSBrZXkgbWlnaHQgYXBwZWFyIG1vcmUgdGhhbiBvbmNl LCB0aGUgJ2xhc3QnIHZhcmlhYmxlCj4gKyAgICAgICAqIHN0YXJ0cyBhdCAtMSBhbmQgaW5jcmVt ZW50cyB0byBpbmRpY2F0ZSB0aGUgbGFzdCBpbmRleCBpbiB0aGUgbGlzdAo+ICsgICAgICAgKiB3 ZSBvYnRhaW5lZCBmcm9tIGJsc3VraV9nZXRfdmFsKCkuCj4gKyAgICAgICAqLwo+ICsgICAgICB2 YWwgPSBibHN1a2lfZ2V0X3ZhbCAoZW50cnksIGtleSwgJmxhc3QpOwo+ICsgICAgICBpZiAodmFs ID09IE5VTEwpCj4gKwlicmVhazsKPiArCj4gKyAgICAgIG5ldyA9IGdydWJfcmVhbGxvYyAobGlz dCwgKG5saXN0ICsgMikgKiBzaXplb2YgKGNoYXIgKikpOwo+ICsgICAgICBpZiAobmV3ID09IE5V TEwpCj4gKwlicmVhazsKPiArCj4gKyAgICAgIGxpc3QgPSBuZXc7Cj4gKyAgICAgIGxpc3Rbbmxp c3QrK10gPSB2YWw7CgpTaG91bGQgbm90IHdlIGFydGlmaWNpYWxseSBsaW1pdCBudW1iZXIgb2Yg dmFsdWVzIHRvIGF2b2lkIG92ZXJmbG93cz8KMTAwMDA/Cgo+ICsgICAgICBsaXN0W25saXN0XSA9 IE5VTEw7Cj4gKyAgfQo+ICsKPiArICBpZiAobmxpc3QgPT0gMCkKPiArICAgIHsKPiArICAgICAg Z3J1Yl9mcmVlIChsaXN0KTsKPiArICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKwo+ICsg IGlmIChsZW4gIT0gTlVMTCkKPiArICAgICpsZW4gPSBubGlzdDsKPiArCj4gKyAgcmV0dXJuIGxp c3Q7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gYXBwZW5kcyBhIGZpZWxkIHRv IHRoZSBlbmQgb2YgYSBidWZmZXIuIElmIHRoZSBmaWVsZCBnaXZlbiBpcwo+ICsgKiBhbiBlbnZp b3JubWVudGFsIHZhcmlhYmxlLCBpdCBnZXRzIHRoZSB2YWx1ZSBzdG9yZWQgZm9yIHRoYXQgdmFy aWFibGUgYW5kCj4gKyAqIGFwcGVuZHMgdGhhdCB0byB0aGUgYnVmZmVyIGluc3RlYWQuCj4gKyAq Lwo+ICtzdGF0aWMgY2hhciAqCj4gK2Jsc3VraV9maWVsZF9hcHBlbmQgKGJvb2wgaXNfZW52X3Zh ciwgY2hhciAqYnVmZmVyLCBjb25zdCBjaGFyICpzdGFydCwgY29uc3QgY2hhciAqZW5kKQo+ICt7 Cj4gKyAgY2hhciAqdG1wOwo+ICsgIGNvbnN0IGNoYXIgKmZpZWxkOwo+ICsgIGludCB0ZXJtID0g KGlzX2Vudl92YXIgPT0gdHJ1ZSkgPyAyIDogMTsKCldoYXQgaXMgdGVybT8KCj4gKyAgZ3J1Yl9z aXplX3Qgc2l6ZSA9IDA7Cj4gKwo+ICsgIHRtcCA9IGdydWJfc3RybmR1cCAoc3RhcnQsIGVuZCAt IHN0YXJ0ICsgMSk7Cj4gKyAgaWYgKHRtcCA9PSBOVUxMKQo+ICsgICAgcmV0dXJuIE5VTEw7Cj4g Kwo+ICsgIGZpZWxkID0gdG1wOwo+ICsKPiArICBpZiAoaXNfZW52X3ZhciA9PSB0cnVlKQo+ICsg ICAgewo+ICsgICAgICBmaWVsZCA9IGdydWJfZW52X2dldCAodG1wKTsKClRoaXMgbG9va3MgbGlr ZSBHUlVCIGV4dGVuc2lvbiBub3QgY29tcGF0aWJsZSB3aXRoIEJMUyBzcGVjLiBJIHRoaW5rIGl0 CnNob3VsZCBiZSBkb2N1bWVudGVkIGluIHRoZSBHUlVCIGRvY3MuIEFuZCBvZiBjb3Vyc2UgaXQg c2hvdWxkIGJlCm1lbnRpb25lZCBpdCBpcyBub3QgY29tcGF0aWJsZSB3aXRoIG90aGVyIGJvb3Rs b2FkZXJzLgoKPiArICAgICAgaWYgKGZpZWxkID09IE5VTEwpCj4gKwlyZXR1cm4gYnVmZmVyOwo+ ICsgICAgfQo+ICsKPiArICBpZiAoZ3J1Yl9hZGQgKGdydWJfc3RybGVuIChmaWVsZCksIHRlcm0s ICZzaXplKSkKPiArICAgIHJldHVybiBOVUxMOwo+ICsKPiArICBpZiAoYnVmZmVyID09IE5VTEwp Cj4gKyAgICBidWZmZXIgPSBncnViX3phbGxvYyAoc2l6ZSk7Cj4gKyAgZWxzZQo+ICsgICAgewo+ ICsgICAgICBpZiAoZ3J1Yl9hZGQgKHNpemUsIGdydWJfc3RybGVuIChidWZmZXIpLCAmc2l6ZSkp Cj4gKwlyZXR1cm4gTlVMTDsKPiArICAgICAgYnVmZmVyID0gZ3J1Yl9yZWFsbG9jIChidWZmZXIs IHNpemUpOwo+ICsgICAgfQo+ICsKPiArICBpZiAoYnVmZmVyID09IE5VTEwpCj4gKyAgICByZXR1 cm4gTlVMTDsKPiArCj4gKyAgdG1wID0gYnVmZmVyICsgZ3J1Yl9zdHJsZW4gKGJ1ZmZlcik7Cj4g KyAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgZmllbGQpOwo+ICsKPiArICBpZiAoaXNfZW52X3Zh ciA9PSB0cnVlKQo+ICsgICAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgIiAiKTsKPiArCj4gKyAg cmV0dXJuIGJ1ZmZlcjsKPiArfQo+ICsKPiArLyoKPiArICogVGhpcyBmdW5jdGlvbiB0YWtlcyBh IHZhbHVlIHN0cmluZywgY2hlY2tzIGZvciBlbnZpcm9ubWVudGFsIHZhcmlhYmxlcywgYW5kCj4g KyAqIHJldHVybnMgdGhlIHZhbHVlIHN0cmluZyB3aXRoIGFsbCBlbnZpcm9ubWVudGFsIHZhcmlh YmxlcyByZXBsYWNlZCB3aXRoIHRoZQo+ICsgKiB2YWx1ZSBzdG9yZWQgaW4gdGhlIHZhcmlhYmxl Lgo+ICsgKi8KPiArc3RhdGljIGNoYXIgKgo+ICtibHN1a2lfZXhwYW5kX3ZhbCAoY29uc3QgY2hh ciAqdmFsdWUpCj4gK3sKPiArICBjaGFyICpidWZmZXIgPSBOVUxMOwo+ICsgIGNvbnN0IGNoYXIg KnN0YXJ0ID0gdmFsdWU7Cj4gKyAgY29uc3QgY2hhciAqZW5kID0gdmFsdWU7Cj4gKyAgYm9vbCBp c19lbnZfdmFyID0gZmFsc2U7Cj4gKwo+ICsgIGlmICh2YWx1ZSA9PSBOVUxMKQo+ICsgICAgcmV0 dXJuIE5VTEw7Cj4gKwo+ICsgIHdoaWxlICgqdmFsdWUgIT0gJ1wwJykKPiArICAgIHsKPiArICAg ICAgaWYgKCp2YWx1ZSA9PSAnJCcpCj4gKwl7Cj4gKwkgIGlmIChzdGFydCAhPSBlbmQpCj4gKwkg ICAgewo+ICsJICAgICAgYnVmZmVyID0gYmxzdWtpX2ZpZWxkX2FwcGVuZCAoaXNfZW52X3Zhciwg YnVmZmVyLCBzdGFydCwgZW5kKTsKPiArCSAgICAgIGlmIChidWZmZXIgPT0gTlVMTCkKPiArCQly ZXR1cm4gTlVMTDsKPiArCSAgICB9Cj4gKwo+ICsJICBpc19lbnZfdmFyID0gdHJ1ZTsKPiArCSAg c3RhcnQgPSB2YWx1ZSArIDE7Cj4gKwl9Cj4gKyAgICAgIGVsc2UgaWYgKGlzX2Vudl92YXIgPT0g dHJ1ZSkKPiArCXsKPiArCSAgaWYgKGdydWJfaXNhbG51bSAoKnZhbHVlKSA9PSAwICYmICp2YWx1 ZSAhPSAnXycpCj4gKwkgICAgewo+ICsJICAgICAgYnVmZmVyID0gYmxzdWtpX2ZpZWxkX2FwcGVu ZCAoaXNfZW52X3ZhciwgYnVmZmVyLCBzdGFydCwgZW5kKTsKPiArCSAgICAgIGlzX2Vudl92YXIg PSBmYWxzZTsKPiArCSAgICAgIHN0YXJ0ID0gdmFsdWU7Cj4gKwkgICAgICBpZiAoKnN0YXJ0ID09 ICcgJykKPiArCQlzdGFydCsrOwo+ICsJICAgIH0KPiArCX0KPiArCj4gKyAgICAgIGVuZCA9IHZh bHVlOwo+ICsgICAgICB2YWx1ZSsrOwoKUHJvYmFibHkgc3BhY2VzIHNob3VsZCBiZSByZXBsYWNl ZCB3aXRoIHRhYiBoZXJlLi4uCgo+ICsgICAgfQo+ICsKPiArICBpZiAoc3RhcnQgIT0gZW5kKQo+ ICsgICAgewo+ICsgICAgICBidWZmZXIgPSBibHN1a2lfZmllbGRfYXBwZW5kIChpc19lbnZfdmFy LCBidWZmZXIsIHN0YXJ0LCBlbmQpOwo+ICsgICAgICBpZiAoYnVmZmVyID09IE5VTEwpCj4gKwly ZXR1cm4gTlVMTDsKPiArICAgIH0KPiArCj4gKyAgcmV0dXJuIGJ1ZmZlcjsKPiArfQo+ICsKPiAr LyoKPiArICogVGhpcyBmdW5jdGlvbiBwYXJzZXMgYSBzdHJpbmcgY29udGFpbmluZyBpbml0cmQg cGF0aHMgYW5kIHJldHVybnMgaXQgYXMgYQo+ICsgKiBsaXN0Lgo+ICsgKi8KPiArc3RhdGljIGNo YXIgKioKPiArYmxzdWtpX2Vhcmx5X2luaXRyZF9saXN0IChjb25zdCBjaGFyICppbml0cmQpCj4g K3sKPiArICBpbnQgbmxpc3QgPSAwOwo+ICsgIGNoYXIgKipsaXN0ID0gTlVMTDsKPiArICBjb25z dCBjaGFyICpzZXBhcmF0b3IgPSBpbml0cmQ7Cj4gKyAgY2hhciAqdG1wOwo+ICsKPiArICBmb3Ig KDs7KQo+ICsgICAgewo+ICsgICAgICB3aGlsZSAoKnNlcGFyYXRvciAhPSAnXDAnICYmICpzZXBh cmF0b3IgIT0gJyAnICYmICpzZXBhcmF0b3IgIT0gJ1x0JykKPiArCXNlcGFyYXRvcisrOwo+ICsg ICAgICBpZiAoKnNlcGFyYXRvciA9PSAnXDAnKQo+ICsJYnJlYWs7CgpncnViX3N0cnRvaygpPwoK PiArICAgICAgbGlzdCA9IGdydWJfcmVhbGxvYyAobGlzdCwgKG5saXN0ICsgMikgKiBzaXplb2Yg KGNoYXIgKikpOwo+ICsgICAgICBpZiAobGlzdCA9PSBOVUxMKQo+ICsJcmV0dXJuIE5VTEw7Cj4g Kwo+ICsgICAgICB0bXAgPSBncnViX3N0cm5kdXAgKGluaXRyZCwgc2VwYXJhdG9yIC0gaW5pdHJk KTsKPiArICAgICAgaWYgKHRtcCA9PSBOVUxMKQo+ICsJewo+ICsJICBncnViX2ZyZWUgKGxpc3Qp Owo+ICsJICByZXR1cm4gTlVMTDsKPiArCX0KPiArICAgICAgbGlzdFtubGlzdCsrXSA9IHRtcDsK PiArICAgICAgbGlzdFtubGlzdF0gPSBOVUxMOwo+ICsgICAgICBzZXBhcmF0b3IrKzsKPiArICAg ICAgaW5pdHJkID0gc2VwYXJhdG9yOwo+ICsgICAgfQo+ICsKPiArICBsaXN0ID0gZ3J1Yl9yZWFs bG9jIChsaXN0LCAobmxpc3QgKyAyKSAqIHNpemVvZiAoY2hhciAqKSk7Cj4gKyAgaWYgKGxpc3Qg PT0gTlVMTCkKPiArICAgIHJldHVybiBOVUxMOwo+ICsKPiArICB0bXAgPSBncnViX3N0cm5kdXAg KGluaXRyZCwgZ3J1Yl9zdHJsZW4gKGluaXRyZCkpOwo+ICsgIGlmICh0bXAgPT0gTlVMTCkKPiAr ICAgIHsKPiArICAgICAgZ3J1Yl9mcmVlIChsaXN0KTsKPiArICAgICAgcmV0dXJuIE5VTEw7Cj4g KyAgICB9Cj4gKyAgbGlzdFtubGlzdCsrXSA9IHRtcDsKPiArICBsaXN0W25saXN0XSA9IE5VTEw7 Cj4gKwo+ICsgIHJldHVybiBsaXN0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9u IHJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgY29tbWFuZCB0byBsb2FkIGEgbGludXgga2VybmVs IHdpdGgKPiArICoga2VybmVsIGNvbW1hbmQtbGluZSBvcHRpb25zIGJhc2VkIG9uIHdoYXQgd2Fz IHNwZWNpZmllZCBpbiB0aGUgQkxTIGNvbmZpZwo+ICsgKiBmaWxlLgo+ICsgKi8KPiArc3RhdGlj IGNoYXIgKgo+ICtibHNfZ2V0X2xpbnV4IChncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeSkKPiAr ewo+ICsgIGNoYXIgKmxpbnV4X3BhdGg7Cj4gKyAgY2hhciAqbGludXhfY21kID0gTlVMTDsKPiAr ICBjaGFyICpvcHRpb25zID0gTlVMTDsKPiArICBjaGFyICp0bXA7Cj4gKyAgZ3J1Yl9zaXplX3Qg c2l6ZTsKPiArCj4gKyAgbGludXhfcGF0aCA9IGJsc3VraV9nZXRfdmFsIChlbnRyeSwgImxpbnV4 IiwgTlVMTCk7Cj4gKyAgb3B0aW9ucyA9IGJsc3VraV9leHBhbmRfdmFsIChibHN1a2lfZ2V0X3Zh bCAoZW50cnksICJvcHRpb25zIiwgTlVMTCkpOwo+ICsKPiArICBpZiAob3B0aW9ucyA9PSBOVUxM KQo+ICsgICAgb3B0aW9ucyA9IGJsc3VraV9leHBhbmRfdmFsIChncnViX2Vudl9nZXQgKCJkZWZh dWx0X2tlcm5lbG9wdHMiKSk7CgpUaGlzIHZhcmlhYmxlIGhhcyB0byBiZSBkb2N1bWVudGVkLiBJ biBnZW5lcmFsIGFsbCBuZXcgdmFyaWFibGVzIGhhdmUgdG8KYmUgZG9jdW1lbnRlZC4uLgoKPiAr ICBpZiAoZ3J1Yl9hZGQgKGdydWJfc3RybGVuICgibGludXggIiksIGdydWJfc3RybGVuIChsaW51 eF9wYXRoKSwgJnNpemUpKQoKRG8geW91IG5lZWQgdG8gZ2V0IGludG8gYWNjb3VudCBOVUwgYXQg dGhlIGVuZCBvZiBzdHJpbmc/CgpzL2dydWJfc3RybGVuICgibGludXggIikvc2l6ZW9mICgibGlu dXggIikvPwoKVGhvdWdoIHlvdSBoYXZlIHRvIHJlbWVtYmVyIHRoYXQgc2l6ZW9mKCkgY291bnRz IE5VTCBhdCB0aGUgZW5kIG9mIHN0cmluZy4KCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9SQU5HRSwgIm92ZXJmbG93IGRldGVjdGVkIHdoaWxlIGNhbGN1bGF0 aW5nIGxpbnV4IGJ1ZmZlciBzaXplIik7Cj4gKyAgICAgIGdvdG8gZmluaXNoOwo+ICsgICAgfQo+ ICsKPiArICBpZiAob3B0aW9ucyAhPSBOVUxMKQo+ICsgICAgewo+ICsgICAgICBpZiAoZ3J1Yl9h ZGQgKHNpemUsIGdydWJfc3RybGVuIChvcHRpb25zKSwgJnNpemUpIHx8Cj4gKwkgIGdydWJfYWRk IChzaXplLCAxLCAmc2l6ZSkpCj4gKwl7Cj4gKwkgIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9P Rl9SQU5HRSwgIm92ZXJmbG93IGRldGVjdGVkIHdoaWxlIGNhbGN1bGF0aW5nIGxpbnV4IGJ1ZmZl ciBzaXplIik7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJfQo+ICsgICAgfQo+ICsKPiArICBsaW51 eF9jbWQgPSBncnViX21hbGxvYyAoc2l6ZSk7Cj4gKyAgaWYgKGxpbnV4X2NtZCA9PSBOVUxMKQo+ ICsgICAgZ290byBmaW5pc2g7Cj4gKwo+ICsgIHRtcCA9IGxpbnV4X2NtZDsKPiArICB0bXAgPSBn cnViX3N0cGNweSAodG1wLCAibGludXggIik7Cj4gKyAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwg bGludXhfcGF0aCk7Cj4gKyAgaWYgKG9wdGlvbnMgIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAg dG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgIiAiKTsKPiArICAgICAgdG1wID0gZ3J1Yl9zdHBjcHkg KHRtcCwgb3B0aW9ucyk7Cj4gKyAgICB9Cj4gKyAgdG1wID0gZ3J1Yl9zdHBjcHkgKHRtcCwgIlxu Iik7Cj4gKwo+ICsgZmluaXNoOgo+ICsgIGdydWJfZnJlZSAob3B0aW9ucyk7Cj4gKwo+ICsgIHJl dHVybiBsaW51eF9jbWQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyBhIHN0cmluZyB3aXRoIHRoZSBjb21tYW5kIHRvIGxvYWQgYWxsIGluaXRyZHMgZm9yIGEKPiAr ICogbGludXgga2VybmVsIGltYWdlIGJhc2VkIG9uIHRoZSBsaXN0IHByb3ZpZGVkIGJ5IHRoZSBC TFMgY29uZmlnIGZpbGUuCj4gKyAqLwo+ICtzdGF0aWMgY2hhciAqCj4gK2Jsc19nZXRfaW5pdHJk IChncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeSkKPiArewo+ICsgIGNoYXIgKippbml0cmRfbGlz dDsKPiArICBjaGFyICppbml0cmRfY21kID0gTlVMTDsKPiArICBjb25zdCBjaGFyICplYXJseV9p bml0cmQ7Cj4gKyAgY2hhciAqKmVhcmx5X2luaXRyZF9saXN0ID0gTlVMTDsKPiArICBjaGFyICp0 bXA7Cj4gKyAgY2hhciAqc2xhc2g7Cj4gKyAgY2hhciAqcHJlZml4ID0gTlVMTDsKPiArICBncnVi X3NpemVfdCBwcmVmaXhfbGVuID0gMDsKPiArICBjaGFyICpsaW51eF9wYXRoOwo+ICsgIGdydWJf c2l6ZV90IHNpemU7Cj4gKyAgaW50IGk7Cj4gKwo+ICsgIGluaXRyZF9saXN0ID0gYmxzdWtpX21h a2VfbGlzdCAoZW50cnksICJpbml0cmQiLCBOVUxMKTsKPiArICBlYXJseV9pbml0cmQgPSBncnVi X2Vudl9nZXQgKCJlYXJseV9pbml0cmQiKTsKCkFnYWluLCB0aGlzIHZhcmlhYmxlIGhhcyB0byBi ZSBkb2N1bWVudGVkLi4uCgo+ICsgIGlmIChlYXJseV9pbml0cmQgIT0gTlVMTCkKPiArICAgIHsK PiArICAgICAgZWFybHlfaW5pdHJkX2xpc3QgPSBibHN1a2lfZWFybHlfaW5pdHJkX2xpc3QgKGVh cmx5X2luaXRyZCk7Cj4gKyAgICAgIGlmIChlYXJseV9pbml0cmRfbGlzdCA9PSBOVUxMKQo+ICsJ ewo+ICsJICBncnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCBOXygiZmFpbGVkIHRv IGNyZWF0ZSBlYXJseSBpbml0cmQgbGlzdCIpKTsKPiArCSAgZ290byBmaW5pc2g7Cj4gKwl9Cj4g Kwo+ICsgICAgICBpZiAoaW5pdHJkX2xpc3QgIT0gTlVMTCAmJiBpbml0cmRfbGlzdFswXSAhPSBO VUxMKQo+ICsJewo+ICsJICBzbGFzaCA9IGdydWJfc3RycmNociAoaW5pdHJkX2xpc3RbMF0sICcv Jyk7Cj4gKwkgIGlmIChzbGFzaCA9PSBOVUxMKQo+ICsJICAgIHByZWZpeF9sZW4gPSBzbGFzaCAt IGluaXRyZF9saXN0WzBdICsgMTsKPiArCSAgcHJlZml4ID0gZ3J1Yl9zdHJuZHVwIChpbml0cmRf bGlzdFswXSwgcHJlZml4X2xlbik7Cj4gKwl9Cj4gKyAgICAgIGVsc2UKPiArCXsKPiArCSAgbGlu dXhfcGF0aCA9IGJsc3VraV9nZXRfdmFsIChlbnRyeSwgImxpbnV4IiwgTlVMTCk7Cj4gKwkgIHNs YXNoID0gZ3J1Yl9zdHJyY2hyIChsaW51eF9wYXRoLCAnLycpOwo+ICsJICBpZiAoc2xhc2ggIT0g TlVMTCkKPiArCSAgICBwcmVmaXhfbGVuID0gc2xhc2ggLSBsaW51eF9wYXRoICsgMTsKPiArCSAg cHJlZml4ID0gZ3J1Yl9zdHJuZHVwIChsaW51eF9wYXRoLCBwcmVmaXhfbGVuKTsKPiArCX0KPiAr Cj4gKyAgICAgIGlmIChwcmVmaXggPT0gTlVMTCkKPiArCXsKPiArCSAgZ3J1Yl9lcnJvciAoR1JV Ql9FUlJfT1VUX09GX01FTU9SWSwgTl8oImZhaWxlZCB0byBhbGxvY2F0ZSBpbml0cmQgcHJlZml4 IGJ1ZmZlciIpKTsKPiArCSAgZ290byBmaW5pc2g7Cj4gKwl9Cj4gKyAgICB9Cj4gKwo+ICsgIGlm IChlYXJseV9pbml0cmRfbGlzdCAhPSBOVUxMIHx8IGluaXRyZF9saXN0ICE9IE5VTEwpCj4gKyAg ICB7Cj4gKwo+ICsgICAgICBzaXplID0gZ3J1Yl9zdHJsZW4gKCJpbml0cmQiKTsKPiArCj4gKyAg ICAgIGZvciAoaSA9IDA7IGVhcmx5X2luaXRyZF9saXN0ICE9IE5VTEwgJiYgZWFybHlfaW5pdHJk X2xpc3RbaV0gIT0gTlVMTDsgaSsrKQo+ICsJewo+ICsJICBpZiAoZ3J1Yl9hZGQgKHNpemUsIDEs ICZzaXplKSB8fAo+ICsJICAgICAgZ3J1Yl9hZGQgKHNpemUsIGdydWJfc3RybGVuIChwcmVmaXgp LCAmc2l6ZSkgfHwKPiArCSAgICAgIGdydWJfYWRkIChzaXplLCBncnViX3N0cmxlbiAoZWFybHlf aW5pdHJkX2xpc3RbaV0pLCAmc2l6ZSkpCj4gKwkgICAgewo+ICsJICAgICAgZ3J1Yl9lcnJvciAo R1JVQl9FUlJfT1VUX09GX1JBTkdFLCAib3ZlcmZsb3cgZGV0ZWN0ZWQgY2FsY3VsYXRpbmcgaW5p dHJkIGJ1ZmZlciBzaXplIik7Cj4gKwkgICAgICBnb3RvIGZpbmlzaDsKPiArCSAgICB9Cj4gKwl9 Cj4gKwo+ICsgICAgICBmb3IgKGkgPSAwOyBpbml0cmRfbGlzdCAhPSBOVUxMICYmIGluaXRyZF9s aXN0W2ldICE9IE5VTEw7IGkrKykKPiArCXsKPiArCSAgaWYgKGdydWJfYWRkIChzaXplLCAxLCAm c2l6ZSkgfHwKPiArCSAgICAgIGdydWJfYWRkIChzaXplLCBncnViX3N0cmxlbiAoaW5pdHJkX2xp c3RbaV0pLCAmc2l6ZSkpCj4gKwkgICAgewo+ICsJICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJf T1VUX09GX1JBTkdFLCAib3ZlcmZsb3cgZGV0ZWN0ZWQgY2FsY3VsYXRpbmcgaW5pdHJkIGJ1ZmZl ciBzaXplIik7Cj4gKwkgICAgICBnb3RvIGZpbmlzaDsKPiArCSAgICB9Cj4gKwl9Cj4gKwo+ICsg ICAgICBpZiAoZ3J1Yl9hZGQgKHNpemUsIDEsICZzaXplKSkKPiArCXsKPiArCSAgZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAib3ZlcmZsb3cgZGV0ZWN0ZWQgY2FsY3VsYXRpbmcg aW5pdHJkIGJ1ZmZlciBzaXplIik7Cj4gKwkgIGdvdG8gZmluaXNoOwo+ICsJfQo+ICsKPiArICAg ICAgaW5pdHJkX2NtZCA9IGdydWJfbWFsbG9jIChzaXplKTsKPiArICAgICAgaWYgKGluaXRyZF9j bWQgPT0gTlVMTCkKPiArCWdvdG8gZmluaXNoOwo+ICsKPiArICAgICAgdG1wID0gZ3J1Yl9zdHBj cHkgKGluaXRyZF9jbWQsICJpbml0cmQiKTsKPiArICAgICAgZm9yIChpID0gMDsgZWFybHlfaW5p dHJkX2xpc3QgIT0gTlVMTCAmJiBlYXJseV9pbml0cmRfbGlzdFtpXSAhPSBOVUxMOyBpKyspCj4g Kwl7Cj4gKwkgIGdydWJfZHByaW50ZiAoImJsc3VraSIsICJhZGRpbmcgZWFybHkgaW5pdHJkICVz XG4iLCBlYXJseV9pbml0cmRfbGlzdFtpXSk7Cj4gKwkgIHRtcCA9IGdydWJfc3RwY3B5ICh0bXAs ICIgIik7Cj4gKwkgIHRtcCA9IGdydWJfc3RwY3B5ICh0bXAsIHByZWZpeCk7Cj4gKwkgIHRtcCA9 IGdydWJfc3RwY3B5ICh0bXAsIGVhcmx5X2luaXRyZF9saXN0W2ldKTsKPiArCX0KPiArCj4gKyAg ICAgIGZvciAoaSA9IDA7IGluaXRyZF9saXN0ICE9IE5VTEwgJiYgaW5pdHJkX2xpc3RbaV0gIT0g TlVMTDsgaSsrKQo+ICsJewo+ICsJICBncnViX2RwcmludGYgKCJibHN1a2kiLCAiYWRkaW5nIGlu aXRyZCAlc1xuIiwgaW5pdHJkX2xpc3RbaV0pOwo+ICsJICB0bXAgPSBncnViX3N0cGNweSAodG1w LCAiICIpOwo+ICsJICB0bXAgPSBncnViX3N0cGNweSAodG1wLCBpbml0cmRfbGlzdFtpXSk7Cj4g Kwl9Cj4gKyAgICAgIHRtcCA9IGdydWJfc3RwY3B5ICh0bXAsICJcbiIpOwo+ICsgICAgfQo+ICsK PiArIGZpbmlzaDoKPiArICBmb3IgKGkgPSAwOyBlYXJseV9pbml0cmRfbGlzdCAhPSBOVUxMICYm IGVhcmx5X2luaXRyZF9saXN0W2ldICE9IE5VTEw7IGkrKykKPiArICAgIGdydWJfZnJlZSAoZWFy bHlfaW5pdHJkX2xpc3RbaV0pOwo+ICsgIGdydWJfZnJlZSAocHJlZml4KTsKPiArCj4gKyAgcmV0 dXJuIGluaXRyZF9jbWQ7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gcmV0dXJu cyBhIHN0cmluZyB3aXRoIHRoZSBjb21tYW5kIHRvIGxvYWQgYSBkZXZpY2UgdHJlZSBibG9iCj4g KyAqIGZyb20gdGhlIEJMUyBjb25maWcgZmlsZS4KPiArICovCj4gK3N0YXRpYyBjaGFyICoKPiAr YmxzX2dldF9kZXZpY2V0cmVlIChncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeSkKPiArewo+ICsg IGNoYXIgKmR0X3BhdGg7Cj4gKyAgY2hhciAqZHRfY21kID0gTlVMTDsKPiArICBjaGFyICp0bXA7 Cj4gKyAgY2hhciAqbGludXhfcGF0aDsKPiArICBjaGFyICpzbGFzaDsKPiArICBjaGFyICpwcmVm aXggPSBOVUxMOwo+ICsgIGdydWJfc2l6ZV90IHByZWZpeF9sZW4gPSAwOwo+ICsgIGdydWJfc2l6 ZV90IHNpemU7Cj4gKyAgYm9vbCBhZGRfZHRfcHJlZml4ID0gZmFsc2U7Cj4gKwo+ICsgIGR0X3Bh dGggPSBibHN1a2lfZXhwYW5kX3ZhbCAoYmxzdWtpX2dldF92YWwgKGVudHJ5LCAiZGV2aWNldHJl ZSIsIE5VTEwpKTsKPiArCj4gKyAgaWYgKGR0X3BhdGggPT0gTlVMTCkKPiArICAgIHsKPiArICAg ICAgZHRfcGF0aCA9IGJsc3VraV9leHBhbmRfdmFsIChncnViX2Vudl9nZXQgKCJkZXZpY2V0cmVl IikpOwoKVGhlIEdSVUIgZG9jdW1lbnRhdGlvbiBzaG91bGQgYmUgZXhwYW5kZWQgZm9yIHRoaXMg dmFyaWFibGUuCgo+ICsgICAgICBhZGRfZHRfcHJlZml4ID0gdHJ1ZTsKPiArICAgIH0KPiArCj4g KyAgaWYgKGR0X3BhdGggIT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgaWYgKGFkZF9kdF9wcmVm aXggPT0gdHJ1ZSkKPiArCXsKPiArCSAgbGludXhfcGF0aCA9IGJsc3VraV9nZXRfdmFsIChlbnRy eSwgImxpbnV4IiwgTlVMTCk7Cj4gKwkgIHNsYXNoID0gZ3J1Yl9zdHJjaHIgKGxpbnV4X3BhdGgs ICcvJyk7Cj4gKwkgIGlmIChzbGFzaCAhPSBOVUxMKQo+ICsJICAgIHByZWZpeF9sZW4gPSBzbGFz aCAtIGxpbnV4X3BhdGggKyAxOwo+ICsJICBwcmVmaXggPSBncnViX3N0cm5kdXAgKGxpbnV4X3Bh dGgsIHByZWZpeF9sZW4pOwo+ICsJICBpZiAocHJlZml4ID09IE5VTEwpCj4gKwkgICAgewo+ICsJ ICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgTl8oImZhaWxlZCB0byBh bGxvY2F0ZSBwcmVmaXggYnVmZmVyIikpOwo+ICsJICAgICAgZ290byBmaW5pc2g7Cj4gKwkgICAg fQo+ICsJfQo+ICsKPiArICAgICAgaWYgKGdydWJfYWRkIChncnViX3N0cmxlbiAoImRldmljZXRy ZWUgIiksIGdydWJfc3RybGVuIChkdF9wYXRoKSwgJnNpemUpIHx8CgpzL2dydWJfc3RybGVuICgi ZGV2aWNldHJlZSAiKS9zaXplb2YgKCJkZXZpY2V0cmVlICIpIC0gMS8/CgpQbGVhc2UgY2hlY2sg c2ltaWxhciBwbGFjZXMgdG9vLgoKPiArCSAgZ3J1Yl9hZGQgKHNpemUsIDEsICZzaXplKSkKPiAr CXsKPiArCSAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAib3ZlcmZsb3cgZGV0 ZWN0ZWQgY2FsY3VsYXRpbmcgZGV2aWNlIHRyZWUgYnVmZmVyIHNpemUiKTsKPiArCSAgZ290byBm aW5pc2g7Cj4gKwl9Cj4gKwo+ICsgICAgICBpZiAoYWRkX2R0X3ByZWZpeCA9PSB0cnVlKQo+ICsJ ewo+ICsJICBpZiAoZ3J1Yl9hZGQgKHNpemUsIGdydWJfc3RybGVuIChwcmVmaXgpLCAmc2l6ZSkp Cj4gKwkgICAgewo+ICsJICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAi b3ZlcmZsb3cgZGV0ZWN0ZWQgY2FsY3VsYXRpbmcgZGV2aWNlIHRyZWUgYnVmZmVyIHNpemUiKTsK PiArCSAgICAgIGdvdG8gZmluaXNoOwo+ICsJICAgIH0KPiArCX0KPiArICAgICAgZHRfY21kID0g Z3J1Yl9tYWxsb2MgKHNpemUpOwo+ICsgICAgICBpZiAoZHRfY21kID09IE5VTEwpCj4gKwlnb3Rv IGZpbmlzaDsKPiArICAgICAgdG1wID0gZHRfY21kOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNw eSAoZHRfY21kLCAiZGV2aWNldHJlZSIpOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNweSAodG1w LCAiICIpOwo+ICsgICAgICBpZiAoYWRkX2R0X3ByZWZpeCA9PSB0cnVlKQo+ICsgICAgICAgIHRt cCA9IGdydWJfc3RwY3B5ICh0bXAsIHByZWZpeCk7Cj4gKyAgICAgIHRtcCA9IGdydWJfc3RwY3B5 ICh0bXAsIGR0X3BhdGgpOwo+ICsgICAgICB0bXAgPSBncnViX3N0cGNweSAodG1wLCAiXG4iKTsK PiArICAgIH0KPiArCj4gKyBmaW5pc2g6Cj4gKyAgZ3J1Yl9mcmVlIChwcmVmaXgpOwo+ICsKPiAr ICByZXR1cm4gZHRfY21kOwo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBUaGlzIGZ1bmN0aW9uIHB1dHMg dG9nZXRoZXIgYWxsIG9mIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgZnJvbSB0aGUgY29udGVudHMK PiArICogb2YgdGhlIEJMUyBjb25maWcgZmlsZSBhbmQgY3JlYXRlcyBhIG5ldyBlbnRyeSBpbiB0 aGUgR1JVQiBib290IG1lbnUuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZAo+ICtibHNfY3JlYXRlX2Vu dHJ5IChncnViX2Jsc3VraV9lbnRyeV90ICplbnRyeSkKPiArewo+ICsgIGludCBhcmdjID0gMDsK PiArICBjb25zdCBjaGFyICoqYXJndiA9IE5VTEw7Cj4gKyAgY2hhciAqdGl0bGUgPSBOVUxMOwo+ ICsgIGNoYXIgKmxpbnV4X3BhdGggPSBOVUxMOwo+ICsgIGNoYXIgKmxpbnV4X2NtZCA9IE5VTEw7 Cj4gKyAgY2hhciAqaW5pdHJkX2NtZCA9IE5VTEw7Cj4gKyAgY2hhciAqZHRfY21kID0gTlVMTDsK PiArICBjaGFyICppZCA9IGVudHJ5LT5maWxlbmFtZTsKPiArICBncnViX3NpemVfdCBpZF9sZW47 Cj4gKyAgY2hhciAqaG90a2V5ID0gTlVMTDsKPiArICBjaGFyICp1c2VycyA9IE5VTEw7Cj4gKyAg Y2hhciAqKmNsYXNzZXMgPSBOVUxMOwo+ICsgIGNoYXIgKiphcmdzID0gTlVMTDsKPiArICBjaGFy ICpzcmMgPSBOVUxMOwo+ICsgIGNvbnN0IGNoYXIgKnNkdmFsID0gTlVMTDsKPiArICBpbnQgaTsK PiArICBncnViX3NpemVfdCBzaXplOwo+ICsgIGJvb2wgc2F2ZWRlZmF1bHQ7Cj4gKwo+ICsgIGxp bnV4X3BhdGggPSBibHN1a2lfZ2V0X3ZhbCAoZW50cnksICJsaW51eCIsIE5VTEwpOwo+ICsgIGlm IChsaW51eF9wYXRoID09IE5VTEwpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZHByaW50ZiAoImJs c3VraSIsICJTa2lwcGluZyBmaWxlICVzIHdpdGggbm8gJ2xpbnV4JyBrZXkuXG4iLCBlbnRyeS0+ ZmlsZW5hbWUpOwo+ICsgICAgICBnb3RvIGZpbmlzaDsKPiArICAgIH0KPiArCj4gKyAgaWRfbGVu ID0gZ3J1Yl9zdHJsZW4gKGlkKTsKPiArICBpZiAoaWRfbGVuID49IDUgJiYgZ3J1Yl9zdHJjbXAg KGlkICsgaWRfbGVuIC0gNSwgIi5jb25mIikgPT0gMCkKPiArICAgIGlkW2lkX2xlbiAtIDVdID0g J1wwJzsKClBsZWFzZSBhdm9pZCBjcnlwdGljIGNvbnN0YW50cy4gSSB0aGluayA1IHNob3VsZCBi ZSByZXBsYWNlZCB3aXRoCidzaXplb2YgKCIuY29uZiIpIC0gMScuIE1heWJlIGl0IGlzIHdvcnRo IGRlZmluaW5nIGNvbnN0YW50IGZvciB0aGlzCnZhbHVlIGJlY2F1c2UgYXMgSSBjYW4gc2VlIGl0 IGlzIHVzZWQgaW4gYSBmZXcgcGxhY2VzLiBZb3UgY2FuIHVzZQpleHByZXNzaW9uIGdpdmVuIGFi b3ZlIHRvIGRlZmluZSBhIGNvbnN0YW50LgoKPiArICB0aXRsZSA9IGJsc3VraV9nZXRfdmFsIChl bnRyeSwgInRpdGxlIiwgTlVMTCk7Cj4gKyAgaG90a2V5ID0gYmxzdWtpX2dldF92YWwgKGVudHJ5 LCAiZ3J1Yl9ob3RrZXkiLCBOVUxMKTsKPiArICB1c2VycyA9IGJsc3VraV9leHBhbmRfdmFsIChi bHN1a2lfZ2V0X3ZhbCAoZW50cnksICJncnViX3VzZXJzIiwgTlVMTCkpOwo+ICsgIGNsYXNzZXMg PSBibHN1a2lfbWFrZV9saXN0IChlbnRyeSwgImdydWJfY2xhc3MiLCBOVUxMKTsKPiArICBhcmdz ID0gYmxzdWtpX21ha2VfbGlzdCAoZW50cnksICJncnViX2FyZyIsICZhcmdjKTsKClRoZXNlIHNt ZWxsIGxpa2Ugbm9uLXN0YW5kYXJkIGV4dGVuc2lvbnMuIFRoZXkgYmVnIGZvciBkb2N1bWVudGF0 aW9uLgoKPiArICBhcmdjKys7Cj4gKyAgaWYgKGdydWJfbXVsIChhcmdjICsgMSwgc2l6ZW9mIChj aGFyICopLCAmc2l6ZSkpCj4gKyAgICB7Cj4gKyAgICAgIGdydWJfZXJyb3IgKEdSVUJfRVJSX09V VF9PRl9SQU5HRSwgTl8oIm92ZXJmbG93IGRldGVjdGVkIGNyZWF0aW5nIGFyZ3YgbGlzdCIpKTsK PiArICAgICAgZ290byBmaW5pc2g7Cj4gKyAgICB9Cj4gKwo+ICsgIGFyZ3YgPSBncnViX21hbGxv YyAoc2l6ZSk7Cj4gKyAgaWYgKGFyZ3YgPT0gTlVMTCkKPiArICAgIGdvdG8gZmluaXNoOwo+ICsg IGFyZ3ZbMF0gPSB0aXRsZSA/IHRpdGxlIDogbGludXhfcGF0aDsKCih0aXRsZSAhPSBOVUxMKSA/ IHRpdGxlIDogbGludXhfcGF0aDsKCj4gKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKPiAr ICAgIGFyZ3ZbaV0gPSBhcmdzW2ktMV07Cj4gKyAgYXJndlthcmdjXSA9IE5VTEw7Cj4gKwo+ICsg IGxpbnV4X2NtZCA9IGJsc19nZXRfbGludXggKGVudHJ5KTsKPiArICBpZiAobGludXhfY21kID09 IE5VTEwpCj4gKyAgICBnb3RvIGZpbmlzaDsKPiArCj4gKyAgaW5pdHJkX2NtZCA9IGJsc19nZXRf aW5pdHJkIChlbnRyeSk7Cj4gKyAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9FUlJfTk9ORSkKPiAr ICAgIGdvdG8gZmluaXNoOwo+ICsKPiArICBkdF9jbWQgPSBibHNfZ2V0X2RldmljZXRyZWUgKGVu dHJ5KTsKPiArICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQo+ICsgICAgZ290byBm aW5pc2g7Cj4gKwo+ICsgIHNkdmFsID0gZ3J1Yl9lbnZfZ2V0ICgic2F2ZV9kZWZhdWx0Iik7Cj4g KyAgc2F2ZWRlZmF1bHQgPSAoKE5VTEwgIT0gc2R2YWwpICYmIChncnViX3N0cmNtcCAoc2R2YWws ICJ0cnVlIikgPT0gMCkpOwo+ICsgIHNyYyA9IGdydWJfeGFzcHJpbnRmICgiJXMlcyVzJXMiLAo+ ICsJCQlzYXZlZGVmYXVsdCA/ICJzYXZlZGVmYXVsdFxuIiA6ICIiLAo+ICsJCQlsaW51eF9jbWQs IGluaXRyZF9jbWQgPyBpbml0cmRfY21kIDogIiIsCj4gKwkJCWR0X2NtZCA/IGR0X2NtZCA6ICIi KTsKPiArCj4gKyAgZ3J1Yl9ub3JtYWxfYWRkX21lbnVfZW50cnkgKGFyZ2MsIGFyZ3YsIGNsYXNz ZXMsIGlkLCB1c2VycywgaG90a2V5LCBOVUxMLCBzcmMsIDAsIGVudHJ5KTsKPiArCj4gKyBmaW5p c2g6Cj4gKyAgZ3J1Yl9mcmVlIChsaW51eF9jbWQpOwo+ICsgIGdydWJfZnJlZSAoZHRfY21kKTsK PiArICBncnViX2ZyZWUgKGluaXRyZF9jbWQpOwo+ICsgIGdydWJfZnJlZSAoY2xhc3Nlcyk7Cj4g KyAgZ3J1Yl9mcmVlIChhcmdzKTsKPiArICBncnViX2ZyZWUgKGFyZ3YpOwo+ICsgIGdydWJfZnJl ZSAoc3JjKTsKPiArfQo+ICsKPiArc3RydWN0IGZpbmRfZW50cnlfaW5mbwo+ICt7Cj4gKyAgY29u c3QgY2hhciAqZGlybmFtZTsKPiArICBjb25zdCBjaGFyICpkZXZpZDsKPiArICBncnViX2Rldmlj ZV90IGRldjsKPiArICBncnViX2ZzX3QgZnM7Cj4gK307CgpQbGVhc2UgZGVmaW5lIHRoaXMgYXQg dGhlIGJlZ2lubmluZyBvZiB0aGUgZmlsZS4KCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24gZmls bHMgYSBmaW5kX2VudHJ5X2luZm8gc3RydWN0IHBhc3NlZCBpbiBieSB0aGUgaW5mbyBwYXJhbWV0 ZXIuCj4gKyAqIElmIHRoZSBkaXJuYW1lIG9yIGRldmlkIHBhcmFtZXRlcnMgYXJlIHNldCB0byBO VUxMLCB0aGUgZGlybmFtZSBhbmQgZGV2aWQKPiArICogZmllbGRzIGluIHRoZSBpbmZvIHBhcmFt ZXRlciB3aWxsIGJlIHNldCB0byBkZWZhdWx0IHZhbHVlcy4gSWYgaW5mbyBhbHJlYWR5Cj4gKyAq IGhhcyBhIHZhbHVlIGluIHRoZSBkZXYgZmllbGRzLCB3ZSBjYW4gY29tcGFyZSBpdCB0byB0aGUg dmFsdWUgcGFzc2VkIGluIGJ5Cj4gKyAqIHRoZSBkZXZpZCBwYXJhbWV0ZXIgb3IgdGhlIGRlZmF1 bHQgZGV2aWQgdG8gc2VlIGlmIHdlIG5lZWQgdG8gb3BlbiBhIG5ldwo+ICsgKiBkZXZpY2UuCj4g KyAqLwo+ICtzdGF0aWMgZ3J1Yl9lcnJfdAo+ICtibHN1a2lfc2V0X2ZpbmRfZW50cnlfaW5mbyAo c3RydWN0IGZpbmRfZW50cnlfaW5mbyAqaW5mbywgY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3Qg Y2hhciAqZGV2aWQpCj4gK3sKPiArICBncnViX2RldmljZV90IGRldjsKPiArICBncnViX2ZzX3Qg ZnM7Cj4gKwo+ICsgIGlmIChpbmZvID09IE5VTEwpCj4gKyAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiaW5mbyBwYXJhbWV0ZXIgaXMgbm90IHNldCIpOwo+ICsK PiArICBpZiAoZGV2aWQgPT0gTlVMTCkKPiArICAgIHsKPiArICAgICAgZGV2aWQgPSBncnViX2Vu dl9nZXQgKCJyb290Iik7Cj4gKyAgICAgIGlmIChkZXZpZCA9PSBOVUxMKQo+ICsJcmV0dXJuIGdy dWJfZXJyb3IgKEdSVUJfRVJSX0ZJTEVfTk9UX0ZPVU5ELCBOXygidmFyaWFibGUgYCVzJyBpc24n dCBzZXQiKSwgInJvb3QiKTsKPiArICAgIH0KPiArCj4gKyAgLyogQ2hlY2sgdGhhdCB3ZSBhcmVu J3QgY2xvc2luZyBhbmQgb3BlbmluZyB0aGUgc2FtZSBkZXZpY2UuICovCj4gKyAgaWYgKGluZm8t PmRldiAhPSBOVUxMICYmIGdydWJfc3RyY21wIChpbmZvLT5kZXZpZCwgZGV2aWQpICE9IDApCj4g KyAgICB7Cj4gKyAgICAgIGdydWJfZGV2aWNlX2Nsb3NlIChpbmZvLT5kZXYpOwo+ICsgICAgICBp bmZvLT5kZXYgPSBOVUxMOwo+ICsgICAgfQo+ICsgIC8qIElmIHdlIGFyZSB1c2luZyB0aGUgc2Ft ZSBkZXZpY2UsIHRoZW4gd2UgY2FuIHNraXAgdGhpcyBzdGVwIGFuZCBvbmx5IHNldCB0aGUgZGly ZWN0b3J5LiAqLwo+ICsgIGlmIChpbmZvLT5kZXYgPT0gTlVMTCkKPiArICAgIHsKPiArICAgICAg Z3J1Yl9kcHJpbnRmICgiYmxzdWtpIiwgIm9wZW5pbmcgJXNcbiIsIGRldmlkKTsKPiArICAgICAg ZGV2ID0gZ3J1Yl9kZXZpY2Vfb3BlbiAoZGV2aWQpOwo+ICsgICAgICBpZiAoZGV2ID09IE5VTEwp Cj4gKwlyZXR1cm4gZ3J1Yl9lcnJubzsKPiArCj4gKyAgICAgIGdydWJfZHByaW50ZiAoImJsc3Vr aSIsICJwcm9iaW5nIGZzXG4iKTsKPiArICAgICAgZnMgPSBncnViX2ZzX3Byb2JlIChkZXYpOwo+ ICsgICAgICBpZiAoZnMgPT0gTlVMTCkKPiArCXsKPiArCSAgZ3J1Yl9kZXZpY2VfY2xvc2UgKGRl dik7Cj4gKwkgIHJldHVybiBncnViX2Vycm5vOwo+ICsJfQo+ICsKPiArICAgICAgaW5mby0+ZGV2 aWQgPSBkZXZpZDsKPiArICAgICAgaW5mby0+ZGV2ID0gZGV2Owo+ICsgICAgICBpbmZvLT5mcyA9 IGZzOwo+ICsgICAgfQo+ICsKPiArICBpbmZvLT5kaXJuYW1lID0gZGlybmFtZTsKPiArCj4gKyAg cmV0dXJuIEdSVUJfRVJSX05PTkU7Cj4gK30KPiArCj4gKy8qCj4gKyAqIFRoaXMgZnVuY3Rpb24g c2VhcmNoZXMgZm9yIEJMUyBjb25maWcgZmlsZXMgYmFzZWQgb24gdGhlIGRhdGEgaW4gdGhlIGlu Zm8KPiArICogcGFyYW1ldGVyLiBJZiB0aGUgZmFsbGJhY2sgb3B0aW9uIGlzIGVuYWJsZWQsIHRo ZSBkZWZhdWx0IGxvY2F0aW9uIHdpbGwgYmUKPiArICogY2hlY2tlZCBmb3IgQkxTIGNvbmZpZyBm aWxlcyBpZiB0aGUgZmlyc3QgYXR0ZW1wdCBmYWlscy4KPiArICovCj4gK3N0YXRpYyB2b2lkCj4g K2Jsc3VraV9maW5kX2VudHJ5IChzdHJ1Y3QgZmluZF9lbnRyeV9pbmZvICppbmZvLCBib29sIGVu YWJsZV9mYWxsYmFjaykKPiArewo+ICsgIHN0cnVjdCByZWFkX2VudHJ5X2luZm8gcmVhZF9lbnRy eV9pbmZvOwo+ICsgIGdydWJfZnNfdCBkaXJfZnMgPSBOVUxMOwo+ICsgIGdydWJfZGV2aWNlX3Qg ZGlyX2RldiA9IE5VTEw7Cj4gKyAgYm9vbCBmYWxsYmFjayA9IGZhbHNlOwo+ICsgIGludCByOwo+ ICsKPiArICBkbwo+ICsgICAgewo+ICsgICAgICByZWFkX2VudHJ5X2luZm8uZmlsZSA9IE5VTEw7 Cj4gKyAgICAgIHJlYWRfZW50cnlfaW5mby5kaXJuYW1lID0gaW5mby0+ZGlybmFtZTsKPiArCj4g KyAgICAgIGdydWJfZHByaW50ZiAoImJsc3VraSIsICJzY2FubmluZyBkaXI6ICVzXG4iLCBpbmZv LT5kaXJuYW1lKTsKPiArICAgICAgZGlyX2RldiA9IGluZm8tPmRldjsKPiArICAgICAgZGlyX2Zz ID0gaW5mby0+ZnM7Cj4gKyAgICAgIHJlYWRfZW50cnlfaW5mby5kZXZpZCA9IGluZm8tPmRldmlk Owo+ICsKPiArICAgICAgciA9IGRpcl9mcy0+ZnNfZGlyIChkaXJfZGV2LCByZWFkX2VudHJ5X2lu Zm8uZGlybmFtZSwgYmxzdWtpX3JlYWRfZW50cnksCj4gKwkJCSAgJnJlYWRfZW50cnlfaW5mbyk7 Cj4gKyAgICAgIGlmIChyICE9IDApCj4gKwl7Cj4gKwkgIGdydWJfZHByaW50ZiAoImJsc3VraSIs ICJibHN1a2lfcmVhZF9lbnRyeSByZXR1cm5lZCBlcnJvclxuIik7Cj4gKwkgIGdydWJfZXJybm8g PSBHUlVCX0VSUl9OT05FOwo+ICsJfQo+ICsKPiArICAgICAgLyoKPiArICAgICAgICogSWYgd2Ug YXJlbid0IGFibGUgdG8gZmluZCBCTFMgZW50cmllcyBpbiB0aGUgZGlyZWN0b3J5IGdpdmVuIGJ5 IGluZm8tPmRpcm5hbWUsCj4gKyAgICAgICAqIHdlIGNhbiBmYWxsYmFjayB0byB0aGUgZGVmYXVs dCBsb2NhdGlvbiAiL2Jvb3QvbG9hZGVyL2VudHJpZXMvIiBhbmQgc2VlIGlmIHdlCj4gKyAgICAg ICAqIGNhbiBmaW5kIHRoZSBmaWxlcyB0aGVyZS4KPiArICAgICAgICovCj4gKyAgICAgIGlmIChl bnRyaWVzID09IE5VTEwgJiYgZmFsbGJhY2sgPT0gZmFsc2UgJiYgZW5hYmxlX2ZhbGxiYWNrID09 IHRydWUpCj4gKwl7Cj4gKwkgIGJsc3VraV9zZXRfZmluZF9lbnRyeV9pbmZvIChpbmZvLCBHUlVC X0JMU19DT05GSUdfUEFUSCwgTlVMTCk7Cj4gKwkgIGdydWJfZHByaW50ZiAoImJsc3VraSIsICJF bnRyaWVzIHdlcmVuJ3QgZm91bmQgaW4gJXMsIGZhbGxiYWNrIHRvICVzXG4iLAo+ICsJCQlyZWFk X2VudHJ5X2luZm8uZGlybmFtZSwgaW5mby0+ZGlybmFtZSk7Cj4gKwkgIGZhbGxiYWNrID0gdHJ1 ZTsKPiArCX0KPiArICAgICAgZWxzZQo+ICsJZmFsbGJhY2sgPSBmYWxzZTsKPiArICAgIH0KPiAr ICB3aGlsZSAoZmFsbGJhY2sgPT0gdHJ1ZSk7Cj4gK30KPiArCj4gK3N0YXRpYyBncnViX2Vycl90 Cj4gK2Jsc3VraV9sb2FkX2VudHJpZXMgKGNoYXIgKnBhdGgsIGJvb2wgZW5hYmxlX2ZhbGxiYWNr KQo+ICt7Cj4gKyAgZ3J1Yl9zaXplX3QgbGVuOwo+ICsgIHN0YXRpYyBncnViX2Vycl90IHI7Cj4g KyAgY29uc3QgY2hhciAqZGV2aWQgPSBOVUxMOwo+ICsgIGNoYXIgKmRpciA9IE5VTEw7Cj4gKyAg c3RydWN0IGZpbmRfZW50cnlfaW5mbyBpbmZvID0gewo+ICsgICAgICAuZGV2ID0gTlVMTCwKPiAr ICAgICAgLmZzID0gTlVMTCwKPiArICAgICAgLmRpcm5hbWUgPSBOVUxMLAo+ICsgIH07Cj4gKyAg c3RydWN0IHJlYWRfZW50cnlfaW5mbyByZWkgPSB7Cj4gKyAgICAgIC5kZXZpZCA9IE5VTEwsCj4g KyAgICAgIC5kaXJuYW1lID0gTlVMTCwKPiArICB9Owo+ICsKPiArICBpZiAocGF0aCAhPSBOVUxM KQo+ICsgICAgewo+ICsgICAgICBsZW4gPSBncnViX3N0cmxlbiAocGF0aCk7Cj4gKyAgICAgIGlm IChsZW4gPj0gNSAmJiBncnViX3N0cmNtcCAocGF0aCArIGxlbiAtIDUsICIuY29uZiIpID09IDAp CgpBZ2FpbiwgcGxlYXNlIHJlcGxhY2UgNSB3aXRoIGEgY29uc3RhbnQvc2l6ZW9mKCkuLi4KCj4g Kwl7Cj4gKwkgIHJlaS5maWxlID0gZ3J1Yl9maWxlX29wZW4gKHBhdGgsIEdSVUJfRklMRV9UWVBF X0NPTkZJRyk7Cj4gKwkgIGlmIChyZWkuZmlsZSA9PSBOVUxMKQo+ICsJICAgIHJldHVybiBncnVi X2Vycm5vOwo+ICsKPiArCSAgLyogYmxzdWtpX3JlYWRfZW50cnkoKSBjbG9zZXMgdGhlIGZpbGUu ICovCj4gKwkgIHJldHVybiBibHN1a2lfcmVhZF9lbnRyeSAocGF0aCwgTlVMTCwgJnJlaSk7Cj4g Kwl9Cj4gKyAgICAgIGVsc2UgaWYgKHBhdGhbMF0gPT0gJygnKQo+ICsJewo+ICsJICBkZXZpZCA9 IHBhdGggKyAxOwo+ICsKPiArCSAgZGlyID0gZ3J1Yl9zdHJjaHIgKHBhdGgsICcpJyk7Cj4gKwkg IGlmIChkaXIgPT0gTlVMTCkKPiArCSAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0FSR1VNRU5ULCBOXygiaW52YWxpZCBmaWxlIG5hbWUgYCVzJyIpLCBwYXRoKTsKPiArCj4gKwkg ICpkaXIgPSAnXDAnOwo+ICsKPiArCSAgLyogQ2hlY2sgaWYgdGhlcmUgaXMgbW9yZSB0aGFuIHRo ZSBkZXZpZCBpbiB0aGUgcGF0aC4gKi8KPiArCSAgaWYgKGRpciArIDEgPCBwYXRoICsgbGVuKQo+ ICsJICAgIGRpciA9IGRpciArIDE7Cj4gKwl9Cj4gKyAgICAgIGVsc2UgaWYgKHBhdGhbMF0gPT0g Jy8nKQo+ICsJZGlyID0gcGF0aDsKPiArICAgIH0KPiArCj4gKyAgaWYgKGRpciA9PSBOVUxMKQo+ ICsgICAgZGlyID0gKGNoYXIgKikgR1JVQl9CTFNfQ09ORklHX1BBVEg7Cj4gKwo+ICsgIHIgPSBi bHN1a2lfc2V0X2ZpbmRfZW50cnlfaW5mbyAoJmluZm8sIGRpciwgZGV2aWQpOwo+ICsgIGlmIChy ID09IEdSVUJfRVJSX05PTkUpCj4gKyAgICBibHN1a2lfZmluZF9lbnRyeSAoJmluZm8sIGVuYWJs ZV9mYWxsYmFjayk7Cj4gKwo+ICsgIGlmIChpbmZvLmRldiAhPSBOVUxMKQo+ICsgICAgZ3J1Yl9k ZXZpY2VfY2xvc2UgKGluZm8uZGV2KTsKPiArCj4gKyAgcmV0dXJuIHI7Cj4gK30KPiArCj4gK3N0 YXRpYyBib29sCj4gK2Jsc3VraV9pc19kZWZhdWx0X2VudHJ5IChjb25zdCBjaGFyICpkZWZfZW50 cnksIGdydWJfYmxzdWtpX2VudHJ5X3QgKmVudHJ5LCBpbnQgaWR4KQo+ICt7Cj4gKyAgY29uc3Qg Y2hhciAqdGl0bGU7Cj4gKyAgY29uc3QgY2hhciAqZGVmX2VudHJ5X2VuZDsKPiArICBpbnQgZGVm X2lkeDsKPiArCj4gKyAgaWYgKGRlZl9lbnRyeSA9PSBOVUxMKQo+ICsgICAgcmV0dXJuIGZhbHNl Owo+ICsKPiArICBpZiAoZ3J1Yl9zdHJjbXAgKGRlZl9lbnRyeSwgZW50cnktPmZpbGVuYW1lKSA9 PSAwKQo+ICsgICAgcmV0dXJuIHRydWU7Cj4gKwo+ICsgIHRpdGxlID0gYmxzdWtpX2dldF92YWwg KGVudHJ5LCAidGl0bGUiLCBOVUxMKTsKPiArCj4gKyAgaWYgKHRpdGxlICE9IE5VTEwgJiYgZ3J1 Yl9zdHJjbXAgKGRlZl9lbnRyeSwgdGl0bGUpID09IDApCj4gKyAgICByZXR1cm4gdHJ1ZTsKPiAr Cj4gKyAgZGVmX2lkeCA9IChpbnQpIGdydWJfc3RydG9sIChkZWZfZW50cnksICZkZWZfZW50cnlf ZW5kLCAwKTsKPiArICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FKQoKVGhpcyBlcnJv ciBjaGVjayBpcyB1bnJlbGlhYmxlLiBQbGVhc2UgdGFrZSBhIGxvb2sgYXQgY29tbWl0IGFjOGEz N2RkYQoobmV0L2h0dHA6IEFsbG93IHVzZSBvZiBub24tc3RhbmRhcmQgVENQL0lQIHBvcnRzKS4g SXQgaXMgZ29vZCBleGFtcGxlCmhvdyBpdCBzaG91bGQgYmUgZG9uZSBwcm9wZXJseS4KCj4gKyAg ICB7Cj4gKyAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOwo+ICsgICAgICByZXR1cm4g ZmFsc2U7Cj4gKyAgICB9Cj4gKyAgaWYgKCpkZWZfZW50cnkgPT0gJ1wwJyB8fCAqZGVmX2VudHJ5 X2VuZCAhPSAnXDAnKQo+ICsgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICBpZiAoZGVmX2lkeCA9 PSBpZHgpCj4gKyAgICByZXR1cm4gdHJ1ZTsKPiArCj4gKyAgcmV0dXJuIGZhbHNlOwo+ICt9CgpE YW5pZWwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkdy dWItZGV2ZWwgbWFpbGluZyBsaXN0CkdydWItZGV2ZWxAZ251Lm9yZwpodHRwczovL2xpc3RzLmdu dS5vcmcvbWFpbG1hbi9saXN0aW5mby9ncnViLWRldmVsCg==