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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 6D6FFF31E22 for ; Thu, 9 Apr 2026 14:59:16 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C31F210E0B6; Thu, 9 Apr 2026 14:59:15 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=Nvidia.com header.i=@Nvidia.com header.b="O7sMHnRh"; dkim-atps=neutral Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011045.outbound.protection.outlook.com [40.93.194.45]) by gabe.freedesktop.org (Postfix) with ESMTPS id CD1DE10E80F for ; Thu, 9 Apr 2026 14:59:14 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jVlrwKyrAWtHPhLlqNzVyEPG9hYGLxNvw95ZwcOmpcJLJL/JYUvDjdhqGGrdliB5w4wsqVWF0+NNAAvVgoOos06jT6n8B/Ty9co7mj/jd/8lH7gd/rVtEPtE2EAp2maw/oqt6wirvLhYCs2wmOcpp16xz3yKkPYmg6GaQZlXAQW9BOHSDtpB1FUKMV9DYu0qqiEvf4dAHhK6RT/7LfvhBkszQZEQ8RWDAD1Tw9OCpGYxUTrZp0vmjBS9og16XjF51RM5vXMP9/z/dFdm88bvjEeMqn22tk/13EmoCKyizOFpf1gO/5JRAieqZkIPEcRpxOYfhMylkBrGJRRiL8ooKg== 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=7z2YsToT91058w/5l9DEp07viQW9hZspBoLY9bPR790=; b=GwmSdPx0LO8vN7AVerrJjat4B/P8ogBiv4P60WaQlh/jbaduEgFENqgcXy5YkDPoHAgYnsm/4rLdpdOjWTDR94Ta7h3UN6yHRxw5EmAIe672eWFlmho8hMFRLetMyDkYqYgzAShQsy/nncUyGcvKeKkYN1jfl5NyinnWROtiZX1Al51/X5Aysod+WiLf7NJzXiC4UwiMNvX34zXcTe4UHOTDMFZ59gl3Km8Ynwb5r7bj6KykfW4xPH89XhAJPS0WP4Bp1gfzVTfFeIcZQ9eEXjVCXKD9d6Sgju4GrptMIa3uZhBlkHApACBho2gOIQy82yk9TjsdTknupIqzdoE6Dg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=7z2YsToT91058w/5l9DEp07viQW9hZspBoLY9bPR790=; b=O7sMHnRhy5yzG4LiTWVnH/vsRcwakzzNae38ocMivoZgjQxRG0jyC85s0wFNjv3GLgIB49YC90s6DdVBmhtoprMFkfZ0c17X8M0rPXBJR+VzC0DeZBbuj9IMayLKNAFjufO4fZo5ODTICyzoO1wHqFumFks2zwHCogAgJIRCqfGymxrTF5bg6NP04VPSPe+YtaYsdNd8fQFSUhUjfD7OHhG2TMtYFpdSQQjWw6oDs6bY9Q1E8X1JE+7MkyIJ26P2YkQMGnis4AIGt0Ll4MMcycCZ3IpfqDzDD/c2Dt9lIP/UgvD7C7s3aFIHtcRcOrpvysOZ+DIzB/wmKEpXHotJoA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by SJ2PR12MB8847.namprd12.prod.outlook.com (2603:10b6:a03:546::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.20; Thu, 9 Apr 2026 14:59:05 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%4]) with mapi id 15.20.9769.018; Thu, 9 Apr 2026 14:59:04 +0000 From: Alexandre Courbot Date: Thu, 09 Apr 2026 23:58:47 +0900 Subject: [PATCH v2 1/3] rust: extract `bitfield!` macro from `register!` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Message-Id: <20260409-bitfield-v2-1-23ac400071cb@nvidia.com> References: <20260409-bitfield-v2-0-23ac400071cb@nvidia.com> In-Reply-To: <20260409-bitfield-v2-0-23ac400071cb@nvidia.com> To: Joel Fernandes , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , Eliot Courtney , linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, driver-core@lists.linux.dev, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.15.1 X-ClientProxiedBy: TYCPR01CA0052.jpnprd01.prod.outlook.com (2603:1096:405:2::16) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|SJ2PR12MB8847:EE_ X-MS-Office365-Filtering-Correlation-Id: e5f878d5-0d52-4216-a722-08de96488adc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; ARA:13230040|366016|1800799024|376014|7416014|10070799003|921020|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: 2n3wsLD5sfrEkHIuU6ZPDTRLqnHZAtS0JeVrdzq7LAisteSf1l6mpM6VO1G/Jn0/4dYsx9FVSGQ3Wr01ydxxlGhblbOKjpl4q9zGBX9GU/oL4C8dLt3lUs+MV7uMQopv2K97dVuc3CsFvgy8YXoXU4c3FSAJxVrSTJLe3KQbNWqoxpOgrKkaEPIATEheQnmoPplrnfxqZuaAoxd0Ez4SxOuDUThDJBeof1uXkoI9xixZFCtxL8d9fcXDZUoAYGXoF4p5FH4GoQf4RgISl/l0cmu209B5ScRCGAynGP41kIJ8f2V8zYyL7kFI4m2tUGpfonrpWgRLg7zXj3ppu+Lj1gcYL9ADnAOH2vnI0QlDbHQiPVkYcVeNsu9X0CEHiwC0U2y4e+BS0HEANGLrM902V+6/2f/P7mx8EXNjjk4usDRfooW2TXmNe3pRMKtPhAkg3qZBR/s/hluZ7GODLo2Gs3FnrdJgGCwwcC0gRW43JVhoSPAX1zL7UvUOaMhrkFg2TPTUemcf0mVNP1Oc8S8nhag51TbIIIixkLV2PMiM4stSO1sAvGZCGEAAw/HnU+0GX9Zwr/lqDCUGt/m8v8BsxJ2ZJ8VPKA/r1TgBjc5yk1Vdl0emJca22dSsHbLQxpXpLO5LfhWPS8hlBinjLZ+h4SR2CoRNZn1H+UT/HMFqYriz1GnDg6HL9r+jFHQKmQNodAUuQo215OkA2li4CbmmDXasn4wxQs6xlH0P3ebD1jsAm5it4z92iSViJifzkEGeVu+P76fruNA9LkKyRXA47A== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:CH2PR12MB3990.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(366016)(1800799024)(376014)(7416014)(10070799003)(921020)(18002099003)(56012099003)(22082099003); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YlZEZlhteFNjRm1MdWpPZktTdTQ0OGF5RnZsT3J0RWwrdUR0UCsxeUZ6VDU4?= =?utf-8?B?MjRhcnE2aVc4azQvYUVJc2t4My8yTmZacjVSOTVBTUVGL1NwaEtEemZJOG5j?= =?utf-8?B?RVE4WnBKaVdGb2N4dUtiTG96bVBLVHppTHg3c2VSeFZIY1lncXh2SXJPRWJo?= =?utf-8?B?N0VyU25oSnNYYlhmclpCdnJzQVJhOXNMZ0NtbFBzSSsvb1Z0ck0zREQvK0Ru?= =?utf-8?B?OURMWFRPUmlSOXVYODVYSTBLL3hYWDVuTnJFYmpNdWN4dHVKRDNscC80TTFl?= =?utf-8?B?T3ZLRVNLMUhuNUcrZDkrRWJacERXQ0dKMy9KdGFNL3RJaDVzdUhpZ1A2aDZF?= =?utf-8?B?ekhKL2l5TmJGS2M4T0pmRWMzZFN1N1RMTE5FN0x1VUlFNzZGaEhEQjNqNjVZ?= =?utf-8?B?ZjhEZUFnaWkrSlp5cHUzWjdtV0p2c0d2NlhCL3JSRS80MDhWQ21kaDJ4RHdn?= =?utf-8?B?M0phbmZGSHBEZkxsNjdVQ1ZIK005WVk0YjNkTlZpRGdaKzUwU0QyWllZUnR2?= =?utf-8?B?TE1ES0pQcVMyQlE4ZHhtQXJBdlhnaGp0SFFWbVFhZkkreVY5Um9yQW94bUl4?= =?utf-8?B?a2NmTTA4bnhOZUJJdklucXZLdXR0VFdTK2V2ZTB2WHJFbnR6ZkJNcFQ4M3Vn?= =?utf-8?B?RjNjcURlMDVKU2RzMVFTb0ZudW8xT0hzQSsxclZlR0V0MHRGb0lWL1cvRGtM?= =?utf-8?B?S0lkRk50dEpVM1NhM2FZTWRwV1hreFZDeVFYQkhXUkJxY2lmZlZqRExtRHNr?= =?utf-8?B?M0pVZ2J2bjdtMzhGSU1JVnBGeitNVldxVkxVM2YvYjV3ZDI1dFA4QlBCWENQ?= =?utf-8?B?dWFaRml2ME9iYTdpUkxzN0ZscmRyOHhidWYwdmRYWjR3TVJLbmJhc3NnZXRp?= =?utf-8?B?MTB3OWc5Q3c5anFLVmZleWdsa1duL1AycHhCb3pMWTFIam9RcHMzZHBKN2Rn?= =?utf-8?B?ZXdaZGQ1aktMY2Qza0hSUnZDWHAxUU5CMElJSnpqb1haRy9tcjY3ZGR5cUJR?= =?utf-8?B?LzdadWVZTW5kQnNrWVl2Q0FuOEFhbXArRFluaDJ0NmtkSzV5VVpnZWFTYldl?= =?utf-8?B?cDFXaFRqdmZLQ2VMTVRQdXJqakpML3pTeGR3YUtzYnNjUmRVL2pjWGFtbkJt?= =?utf-8?B?NFJ3WmRqbEhlUkJPM0ZkZW5BeEJPSEE4MWN1ak84bVRQWlpzQkZBVk5KZUVZ?= =?utf-8?B?citNZGlSQ3pLL2FqNFQ2TTZ2RFRhYnNFaEFyMFA0akVadm14WFc1RVliQjkz?= =?utf-8?B?Y2dSYzVFNVV5QUg4NXFhZXgyVmtFWnlyRkRyeVM3d2R3a2R2MU1WcUF3QktV?= =?utf-8?B?KzI0dFNOam5IaUUzVmJsamtoRkxyYVFFYUhTMWVmVU44Sm1MZlFiZUJNUFQ1?= =?utf-8?B?MmFqUk44SHl2SzgxeXYwaXFYZzlTYUU3UXl2TXpvQlZOM1RPd0pZQW5iNzAw?= =?utf-8?B?SnluckIrQTA2TzlvUU4xbVJRQTAzVjNnTlM5WEkxUXFOM0NIZlQxL1hmV0F1?= =?utf-8?B?dWs4eHRpUENnYXhEc09rVmxaZXFJTDJ5Y0FMaUQybEJwU3pzRkJrMUlLeVBj?= =?utf-8?B?bDg5cnYybk1aOUd3SDdoQVNVTWUrQi9HTzREZ3kyWFM3Wkk5YUJ1VTNJdTNY?= =?utf-8?B?N2l4cUJEdWp5WFVxUWwrUEpQMXZ3cXFyUXdMUHdYTDNsZU9Sb2xtMVJTM3BL?= =?utf-8?B?czNzU1lEcGtEOEdmaGlwVEx6ak4rZWREYmF3WHdDNTR1aytRbjdFcFlBSG9r?= =?utf-8?B?UHIySnh2RkVCYzFHWldNY0dzenp5MEhwdnRjR1ptRGl5MjBJeWNPU2hXV0JX?= =?utf-8?B?R21CcWIwMm1UUHVjQ2lVYlR5QmExdkhxZmplN3JxT1ZFaHNTb2x0di9uNmkx?= =?utf-8?B?VWlJK1F4UnU0SUdYanpBaE9Ud1RZaDRWWTIyNENBZk5rOG9ROTVWc3g4RURC?= =?utf-8?B?Q2JNaURweEcyWHV2Rk5EOEM4c0hXb0JjbEJpWnZSZWV3bk1sNmpPbFZ2NnBS?= =?utf-8?B?OHFERTJOQXlRZ1dGYVB0cHNZaGNvaVJ3cHJKSFVKQUZ3UDRsNmhIY1B1cFZi?= =?utf-8?B?QTF2R3RqVW1wMnNzT0h2SFpGUjhCMDJJZ2I1SnBtMXpiVTNsS0x0M0M2Vlpn?= =?utf-8?B?bCtVVTJXTEVlZVpkRHF0ZHBKMUora0F4UmlMZWlGK2JOc0NlS0FyRmk2Ykd4?= =?utf-8?B?R0NhaU0yWTNoTFFSdThDMjJFZFF6dlBLSE5HVnpNeVp5NUxrV3VEV2hzaDRx?= =?utf-8?B?c0pQdUxtUXhzNmFCQnJmOUFlQXNYdDgyV2tIQTAvNzFPbVQzMGVnc3FWeC90?= =?utf-8?B?ek5aZXVTanl0U0JmeVVMVjRKSTRVdE8rUXROd3hhZVoya3NmeVBiNmV4M0JL?= =?utf-8?Q?a+P8QgsreOXinAIHyhY1LQRltMsycrOdAjLvmbbM3jeqf?= X-MS-Exchange-AntiSpam-MessageData-1: HWi2pdxIn8rzFw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e5f878d5-0d52-4216-a722-08de96488adc X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Apr 2026 14:59:04.8104 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: RQNU+6flCi8aA1R3hIgmET1zk26TJjAruieuVVCOkClpM8B8RIe2niEokJyUWjen3OXHdxHcbRADfcpDY8z3rQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ2PR12MB8847 X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" RXh0cmFjdCB0aGUgYml0ZmllbGQtZGVmaW5pbmcgcGFydCBvZiB0aGUgYHJlZ2lzdGVyIWAgbWFj cm8gaW50byBhbgppbmRlcGVuZGVudCBtYWNybyB1c2VkIHRvIGRlZmluZSBiaXRmaWVsZCB0eXBl cyB3aXRoIGJvdW5kcy1jaGVja2VkCmFjY2Vzc29ycy4KCkVhY2ggZmllbGQgaXMgcmVwcmVzZW50 ZWQgYXMgYSBgQm91bmRlZGAgb2YgdGhlIGFwcHJvcHJpYXRlIGJpdCB3aWR0aCwKZW5zdXJpbmcg ZmllbGQgdmFsdWVzIGFyZSBuZXZlciBzaWxlbnRseSB0cnVuY2F0ZWQuCgpGaWVsZHMgY2FuIG9w dGlvbmFsbHkgYmUgY29udmVydGVkIHRvL2Zyb20gY3VzdG9tIHR5cGVzLCBlaXRoZXIgZmFsbGli bHkKb3IgaW5mYWxsaWJseS4KCkFwcHJvcHJpYXRlIGRvY3VtZW50YXRpb24gaXMgYWxzbyBhZGRl ZCwgYW5kIGEgTUFJTlRBSU5FUlMgZW50cnkgY3JlYXRlZApmb3IgdGhlIG5ldyBtb2R1bGUuCgpT aWduZWQtb2ZmLWJ5OiBBbGV4YW5kcmUgQ291cmJvdCA8YWNvdXJib3RAbnZpZGlhLmNvbT4KLS0t CiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICB8ICAgOCArCiBydXN0L2tlcm5lbC9iaXRmaWVs ZC5ycyAgICB8IDQ5MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHJ1c3Qva2VybmVsL2lvL3JlZ2lzdGVyLnJzIHwgMjQ2ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tCiBydXN0L2tlcm5lbC9saWIucnMgICAgICAgICB8ICAgMSArCiA0IGZpbGVzIGNoYW5nZWQs IDUwMiBpbnNlcnRpb25zKCspLCAyNDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvTUFJTlRB SU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCBiMDE3OTE5NjNlMjUuLjc3ZjI2MTdhZGU1ZCAxMDA2 NDQKLS0tIGEvTUFJTlRBSU5FUlMKKysrIGIvTUFJTlRBSU5FUlMKQEAgLTIzMTg2LDYgKzIzMTg2 LDE0IEBAIEY6CXNjcmlwdHMvKnJ1c3QqCiBGOgl0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9ydXN0 LwogSzoJXGIoP2k6cnVzdClcYgogCitSVVNUIFtCSVRGSUVMRF0KK006CUFsZXhhbmRyZSBDb3Vy Ym90IDxhY291cmJvdEBudmlkaWEuY29tPgorTToJSm9lbCBGZXJuYW5kZXMgPGpvZWxhZ25lbGZA bnZpZGlhLmNvbT4KK1I6CVl1cnkgTm9yb3YgPHl1cnkubm9yb3ZAZ21haWwuY29tPgorTDoJcnVz dC1mb3ItbGludXhAdmdlci5rZXJuZWwub3JnCitTOglNYWludGFpbmVkCitGOglydXN0L2tlcm5l bC9iaXRmaWVsZC5ycworCiBSVVNUIFtBTExPQ10KIE06CURhbmlsbyBLcnVtbXJpY2ggPGRha3JA a2VybmVsLm9yZz4KIFI6CUxvcmVuem8gU3RvYWtlcyA8bGpzQGtlcm5lbC5vcmc+CmRpZmYgLS1n aXQgYS9ydXN0L2tlcm5lbC9iaXRmaWVsZC5ycyBiL3J1c3Qva2VybmVsL2JpdGZpZWxkLnJzCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZjU5NDhlZWM4YTc2Ci0tLSAv ZGV2L251bGwKKysrIGIvcnVzdC9rZXJuZWwvYml0ZmllbGQucnMKQEAgLTAsMCArMSw0OTEgQEAK Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKKy8vISBTdXBwb3J0IGZvciBk ZWZpbmluZyBiaXRmaWVsZHMgYXMgUnVzdCBzdHJ1Y3R1cmVzLgorLy8hCisvLyEgVGhlIFtgYml0 ZmllbGQhYF0oa2VybmVsOjpiaXRmaWVsZCEpIG1hY3JvIGRlY2xhcmVzIGludGVnZXIgdHlwZXMg dGhhdCBhcmUgc3BsaXQgaW50byBkaXN0aW5jdAorLy8hIGJpdCBmaWVsZHMgb2YgYXJiaXRyYXJ5 IGxlbmd0aC4gRWFjaCBmaWVsZCBpcyB0eXBlZCB1c2luZyBbYEJvdW5kZWRgXShrZXJuZWw6Om51 bTo6Qm91bmRlZCkgdG8KKy8vISBlbnN1cmUgdmFsdWVzIGFyZSBwcm9wZXJseSB2YWxpZGF0ZWQg YW5kIHRvIGF2b2lkIGltcGxpY2l0IGRhdGEgbG9zcy4KKy8vIQorLy8hICMgRXhhbXBsZQorLy8h CisvLyEgYGBgcnVzdAorLy8hIHVzZSBrZXJuZWw6OmJpdGZpZWxkOworLy8hIHVzZSBrZXJuZWw6 Om51bTo6Qm91bmRlZDsKKy8vIQorLy8hIGJpdGZpZWxkISB7CisvLyEgICAgIHB1YiBzdHJ1Y3Qg UmdiKHUxNikgeworLy8hICAgICAgICAgMTU6MTEgYmx1ZTsKKy8vISAgICAgICAgIDEwOjUgZ3Jl ZW47CisvLyEgICAgICAgICA0OjAgcmVkOworLy8hICAgICB9CisvLyEgfQorLy8hCisvLyEgLy8g VmFsaWQgdmFsdWUgZm9yIHRoZSBgYmx1ZWAgZmllbGQuCisvLyEgbGV0IGJsdWUgPSBCb3VuZGVk Ojo8dTE2LCA1Pjo6bmV3Ojo8MHgxOD4oKTsKKy8vIQorLy8hIC8vIFNldHRlcnMgY2FuIGJlIGNo YWluZWQuIFZhbHVlcyByYW5nZXMgYXJlIGNoZWNrZWQgYXQgY29tcGlsZS10aW1lLgorLy8hIGxl dCBjb2xvciA9IFJnYjo6emVyb2VkKCkKKy8vISAgICAgLy8gQ29tcGlsZS10aW1lIGJvdW5kcyBj aGVjayBvZiBjb25zdGFudCB2YWx1ZS4KKy8vISAgICAgLndpdGhfY29uc3RfcmVkOjo8MHgxMD4o KQorLy8hICAgICAud2l0aF9jb25zdF9ncmVlbjo6PDB4MWY+KCkKKy8vISAgICAgLy8gQSBgQm91 bmRlZGAgY2FuIGFsc28gYmUgcGFzc2VkLgorLy8hICAgICAud2l0aF9ibHVlKGJsdWUpOworLy8h CisvLyEgYXNzZXJ0X2VxIShjb2xvci5yZWQoKSwgMHgxMCk7CisvLyEgYXNzZXJ0X2VxIShjb2xv ci5ncmVlbigpLCAweDFmKTsKKy8vISBhc3NlcnRfZXEhKGNvbG9yLmJsdWUoKSwgMHgxOCk7Cisv LyEgYXNzZXJ0X2VxISgKKy8vISAgICAgY29sb3IuaW50b19yYXcoKSwKKy8vISAgICAgKDB4MTgg PDwgUmdiOjpCTFVFX1NISUZUKSArICgweDFmIDw8IFJnYjo6R1JFRU5fU0hJRlQpICsgMHgxMCwK Ky8vISApOworLy8hCisvLyEgLy8gQ29udmVydCB0by9mcm9tIHRoZSBiYWNraW5nIHN0b3JhZ2Ug dHlwZS4KKy8vISBsZXQgcmF3OiB1MTYgPSBjb2xvci5pbnRvKCk7CisvLyEgYXNzZXJ0X2VxIShS Z2I6OmZyb20ocmF3KSwgY29sb3IpOworLy8hIGBgYAorLy8hCisvLyEgIyBTeW50YXgKKy8vIQor Ly8hIGBgYHRleHQKKy8vISBiaXRmaWVsZCEgeworLy8hICAgICAjW2F0dHJpYnV0ZXNdCisvLyEg ICAgIC8vIERvY3VtZW50YXRpb24gZm9yIGBOYW1lYC4KKy8vISAgICAgcHViIHN0cnVjdCBOYW1l KHN0b3JhZ2VfdHlwZSkgeworLy8hICAgICAgICAgLy8gYGZpZWxkXzFgIGRvY3VtZW50YXRpb24u CisvLyEgICAgICAgICBoaTpsbyBmaWVsZF8xOworLy8hICAgICAgICAgLy8gYGZpZWxkXzJgIGRv Y3VtZW50YXRpb24uCisvLyEgICAgICAgICBoaTpsbyBmaWVsZF8yID0+IENvbnZlcnRlZFR5cGU7 CisvLyEgICAgICAgICAvLyBgZmllbGRfM2AgZG9jdW1lbnRhdGlvbi4KKy8vISAgICAgICAgIGhp OmxvIGZpZWxkXzMgPz0+IENvbnZlcnRlZFR5cGU7CisvLyEgICAgICAgICAuLi4KKy8vISAgICAg fQorLy8hIH0KKy8vISBgYGAKKy8vIQorLy8hIC0gYHN0b3JhZ2VfdHlwZWA6IFRoZSB1bmRlcmx5 aW5nIGludGVnZXIgdHlwZSAoYHU4YCwgYHUxNmAsIGB1MzJgLCBgdTY0YCkuCisvLyEgLSBgaGk6 bG9gOiBCaXQgcmFuZ2UgKGluY2x1c2l2ZSksIHdoZXJlIGBoaSA+PSBsb2AuCisvLyEgLSBgPT4g VHlwZWA6IE9wdGlvbmFsIGluZmFsbGlibGUgY29udmVyc2lvbiAoc2VlIFtiZWxvd10oI2luZmFs bGlibGUtY29udmVyc2lvbi0pKS4KKy8vISAtIGA/PT4gVHlwZWA6IE9wdGlvbmFsIGZhbGxpYmxl IGNvbnZlcnNpb24gKHNlZSBbYmVsb3ddKCNmYWxsaWJsZS1jb252ZXJzaW9uLSkpLgorLy8hIC0g RG9jdW1lbnRhdGlvbiBzdHJpbmdzIGFuZCBhdHRyaWJ1dGVzIGFyZSBvcHRpb25hbC4KKy8vIQor Ly8hICMgR2VuZXJhdGVkIGNvZGUKKy8vIQorLy8hIEVhY2ggZmllbGQgaXMgaW50ZXJuYWxseSBy ZXByZXNlbnRlZCBhcyBhIFtgQm91bmRlZGBdIHBhcmFtZXRlcml6ZWQgYnkgaXRzIGJpdCB3aWR0 aC4gRmllbGQKKy8vISB2YWx1ZXMgY2FuIGVpdGhlciBiZSBzZXQvcmV0cmlldmVkIGRpcmVjdGx5 LCBvciBjb252ZXJ0ZWQgZnJvbS90byBhbm90aGVyIHR5cGUuCisvLyEKKy8vISBUaGUgdXNlIG9m IGBCb3VuZGVkYCBmb3IgZWFjaCBmaWVsZCBlbmZvcmNlcyBib3VuZHMtY2hlY2tpbmcgKGF0IGJ1 aWxkIHRpbWUgb3IgcnVudGltZSkgb2YgZXZlcnkKKy8vISB2YWx1ZSBhc3NpZ25lZCB0byBhIGZp ZWxkLiBUaGlzIGVuc3VyZXMgdGhhdCBkYXRhIGlzIG5ldmVyIGFjY2lkZW50YWxseSB0cnVuY2F0 ZWQuCisvLyEKKy8vISBUaGUgbWFjcm8gZ2VuZXJhdGVzIHRoZSBiaXRmaWVsZCB0eXBlLCBbYEZy b21gXSBhbmQgW2BJbnRvYF0gaW1wbGVtZW50YXRpb25zIGZvciBpdHMgc3RvcmFnZQorLy8hIHR5 cGUsIGFzIHdlbGwgYXMgW2BEZWJ1Z2BdIGFuZCBbYFplcm9hYmxlYF0ocGluX2luaXQ6Olplcm9h YmxlKSBpbXBsZW1lbnRhdGlvbnMuCisvLyEKKy8vISBGb3IgZWFjaCBmaWVsZCwgaXQgYWxzbyBn ZW5lcmF0ZXM6CisvLyEKKy8vISAtIGB3aXRoX2ZpZWxkKHZhbHVlKWAg4oCUIGluZmFsbGlibGUg c2V0dGVyOyB0aGUgYXJndW1lbnQgdHlwZSBtdXN0IGJlIHN0YXRpY2FsbHkga25vd24gdG8gZml0 CisvLyEgICB0aGUgZmllbGQgd2lkdGguCisvLyEgLSBgd2l0aF9jb25zdF9maWVsZDo6PFZBTFVF PigpYCDigJQgY29uc3Qgc2V0dGVyOyB0aGUgdmFsdWUgaXMgdmFsaWRhdGVkIGF0IGNvbXBpbGUg dGltZS4KKy8vISAgIFVzdWFsbHkgc2hvcnRlciB0byB1c2UgdGhhbiBgd2l0aF9maWVsZGAgZm9y IGNvbnN0YW50IHZhbHVlcyBhcyBpdCBkb2Vzbid0IHJlcXVpcmUKKy8vISAgIGNvbnN0cnVjdGlu ZyBhIGBCb3VuZGVkYC4KKy8vISAtIGB0cnlfd2l0aF9maWVsZCh2YWx1ZSlgIOKAlCBmYWxsaWJs ZSBzZXR0ZXIuIFJldHVybnMgYW4gZXJyb3IgaWYgdGhlIHZhbHVlIGlzIG91dCBvZiByYW5nZS4K Ky8vISAtIGBGSUVMRF9NQVNLYCwgYEZJRUxEX1NISUZUYCwgYEZJRUxEX1JBTkdFYCAtIGNvbnN0 YW50cyBmb3IgbWFudWFsIGJpdCBtYW5pcHVsYXRpb24uCisvLyEKKy8vISAjIEltcGxpY2l0IGNv bnZlcnNpb25zCisvLyEKKy8vISBUeXBlcyB0aGF0IGZpdCBlbnRpcmVseSB3aXRoaW4gYSBmaWVs ZCdzIGJpdCB3aWR0aCBjYW4gYmUgdXNlZCBkaXJlY3RseSB3aXRoIHNldHRlcnMuIEZvcgorLy8h IGV4YW1wbGUsIGBib29sYCB3b3JrcyB3aXRoIHNpbmdsZS1iaXQgZmllbGRzLCBhbmQgYHU4YCB3 b3JrcyB3aXRoIDgtYml0IGZpZWxkczoKKy8vIQorLy8hIGBgYHJ1c3QKKy8vISB1c2Uga2VybmVs OjpiaXRmaWVsZDsKKy8vIQorLy8hIGJpdGZpZWxkISB7CisvLyEgICAgIHB1YiBzdHJ1Y3QgRmxh Z3ModTMyKSB7CisvLyEgICAgICAgICAxNTo4IGJ5dGVfZmllbGQ7CisvLyEgICAgICAgICAwOjAg ZmxhZzsKKy8vISAgICAgfQorLy8hIH0KKy8vIQorLy8hIGxldCBmbGFncyA9IEZsYWdzOjp6ZXJv ZWQoKQorLy8hICAgICAud2l0aF9ieXRlX2ZpZWxkKDB4NDJfdTgpCisvLyEgICAgIC53aXRoX2Zs YWcodHJ1ZSk7CisvLyEKKy8vISBhc3NlcnRfZXEhKGZsYWdzLmludG9fcmF3KCksICgweDQyIDw8 IEZsYWdzOjpCWVRFX0ZJRUxEX1NISUZUKSB8IDEpOworLy8hIGBgYAorLy8hCisvLyEgIyBSdW50 aW1lIGJvdW5kcyBjaGVja2luZworLy8hCisvLyEgV2hlbiBhIHZhbHVlIGlzIG5vdCBrbm93biBh dCBjb21waWxlIHRpbWUsIHVzZSBgdHJ5X3dpdGhfZmllbGQoKWAgdG8gY2hlY2sgYm91bmRzIGF0 IHJ1bnRpbWU6CisvLyEKKy8vISBgYGBydXN0CisvLyEgdXNlIGtlcm5lbDo6Yml0ZmllbGQ7Cisv LyEKKy8vISBiaXRmaWVsZCEgeworLy8hICAgICBwdWIgc3RydWN0IENvbmZpZyh1OCkgeworLy8h ICAgICAgICAgMzowIG5pYmJsZTsKKy8vISAgICAgfQorLy8hIH0KKy8vIQorLy8hIGZuIHNldF9u aWJibGUoY29uZmlnOiBDb25maWcsIHZhbHVlOiB1OCkgLT4gUmVzdWx0PENvbmZpZywgRXJyb3I+ IHsKKy8vISAgICAgLy8gUmV0dXJucyBgRU9WRVJGTE9XYCBpZiBgdmFsdWUgPiAweGZgLgorLy8h ICAgICBjb25maWcudHJ5X3dpdGhfbmliYmxlKHZhbHVlKQorLy8hIH0KKy8vISAjIE9rOjo8KCks IEVycm9yPigoKSkKKy8vISBgYGAKKy8vIQorLy8hICMgVHlwZSBjb252ZXJzaW9uCisvLyEKKy8v ISBGaWVsZHMgY2FuIGJlIGF1dG9tYXRpY2FsbHkgY29udmVydGVkIHRvL2Zyb20gYSBjdXN0b20g dHlwZSB1c2luZyBgPT5gIChpbmZhbGxpYmxlKSBvciBgPz0+YAorLy8hIChmYWxsaWJsZSkuIFRo ZSBjdXN0b20gdHlwZSBtdXN0IGltcGxlbWVudCB0aGUgYXBwcm9wcmlhdGUgYEZyb21gIG9yIGBU cnlGcm9tYCB0cmFpdHMgd2l0aAorLy8hIGBCb3VuZGVkYC4KKy8vIQorLy8hICMjIEluZmFsbGli bGUgY29udmVyc2lvbiAoYD0+YCkKKy8vIQorLy8hIFVzZSB0aGlzIHdoZW4gYWxsIHBvc3NpYmxl IGJpdCBwYXR0ZXJucyBvZiBhIGZpZWxkIG1hcCB0byB2YWxpZCB2YWx1ZXM6CisvLyEKKy8vISBg YGBydXN0CisvLyEgdXNlIGtlcm5lbDo6Yml0ZmllbGQ7CisvLyEgdXNlIGtlcm5lbDo6bnVtOjpC b3VuZGVkOworLy8hCisvLyEgI1tkZXJpdmUoRGVidWcsIENsb25lLCBDb3B5LCBQYXJ0aWFsRXEp XQorLy8hIGVudW0gUG93ZXIgeworLy8hICAgICBPZmYsCisvLyEgICAgIE9uLAorLy8hIH0KKy8v IQorLy8hIGltcGwgRnJvbTxCb3VuZGVkPHUzMiwgMT4+IGZvciBQb3dlciB7CisvLyEgICAgIGZu IGZyb20odjogQm91bmRlZDx1MzIsIDE+KSAtPiBTZWxmIHsKKy8vISAgICAgICAgIG1hdGNoICp2 IHsKKy8vISAgICAgICAgICAgICAwID0+IFBvd2VyOjpPZmYsCisvLyEgICAgICAgICAgICAgXyA9 PiBQb3dlcjo6T24sCisvLyEgICAgICAgICB9CisvLyEgICAgIH0KKy8vISB9CisvLyEKKy8vISBp bXBsIEZyb208UG93ZXI+IGZvciBCb3VuZGVkPHUzMiwgMT4geworLy8hICAgICBmbiBmcm9tKHA6 IFBvd2VyKSAtPiBTZWxmIHsKKy8vISAgICAgICAgIChwIGFzIHUzMiAhPSAwKS5pbnRvKCkKKy8v ISAgICAgfQorLy8hIH0KKy8vIQorLy8hIGJpdGZpZWxkISB7CisvLyEgICAgIHB1YiBzdHJ1Y3Qg Q29udHJvbCh1MzIpIHsKKy8vISAgICAgICAgIDA6MCBwb3dlciA9PiBQb3dlcjsKKy8vISAgICAg fQorLy8hIH0KKy8vIQorLy8hIGxldCBjdHJsID0gQ29udHJvbDo6emVyb2VkKCkud2l0aF9wb3dl cihQb3dlcjo6T24pOworLy8hIGFzc2VydF9lcSEoY3RybC5wb3dlcigpLCBQb3dlcjo6T24pOwor Ly8hIGBgYAorLy8hCisvLyEgIyMgRmFsbGlibGUgY29udmVyc2lvbiAoYD89PmApCisvLyEKKy8v ISBVc2UgdGhpcyB3aGVuIHNvbWUgYml0IHBhdHRlcm5zIG9mIGEgZmllbGQgYXJlIGludmFsaWQu IFRoZSBnZXR0ZXIgcmV0dXJucyBhIFtgUmVzdWx0YF06CisvLyEKKy8vISBgYGBydXN0CisvLyEg dXNlIGtlcm5lbDo6Yml0ZmllbGQ7CisvLyEgdXNlIGtlcm5lbDo6bnVtOjpCb3VuZGVkOworLy8h CisvLyEgI1tkZXJpdmUoRGVidWcsIENsb25lLCBDb3B5LCBQYXJ0aWFsRXEpXQorLy8hIGVudW0g TW9kZSB7CisvLyEgICAgIExvdyA9IDAsCisvLyEgICAgIEhpZ2ggPSAxLAorLy8hICAgICBBdXRv ID0gMiwKKy8vISAgICAgLy8gMyBpcyBpbnZhbGlkCisvLyEgfQorLy8hCisvLyEgaW1wbCBUcnlG cm9tPEJvdW5kZWQ8dTMyLCAyPj4gZm9yIE1vZGUgeworLy8hICAgICB0eXBlIEVycm9yID0gdTMy OworLy8hCisvLyEgICAgIGZuIHRyeV9mcm9tKHY6IEJvdW5kZWQ8dTMyLCAyPikgLT4gUmVzdWx0 PFNlbGYsIHUzMj4geworLy8hICAgICAgICAgbWF0Y2ggKnYgeworLy8hICAgICAgICAgICAgIDAg PT4gT2soTW9kZTo6TG93KSwKKy8vISAgICAgICAgICAgICAxID0+IE9rKE1vZGU6OkhpZ2gpLAor Ly8hICAgICAgICAgICAgIDIgPT4gT2soTW9kZTo6QXV0byksCisvLyEgICAgICAgICAgICAgbiA9 PiBFcnIobiksCisvLyEgICAgICAgICB9CisvLyEgICAgIH0KKy8vISB9CisvLyEKKy8vISBpbXBs IEZyb208TW9kZT4gZm9yIEJvdW5kZWQ8dTMyLCAyPiB7CisvLyEgICAgIGZuIGZyb20obTogTW9k ZSkgLT4gU2VsZiB7CisvLyEgICAgICAgICBtYXRjaCBtIHsKKy8vISAgICAgICAgICAgICBNb2Rl OjpMb3cgPT4gQm91bmRlZDo6PHUzMiwgXz46Om5ldzo6PDA+KCksCisvLyEgICAgICAgICAgICAg TW9kZTo6SGlnaCA9PiBCb3VuZGVkOjo8dTMyLCBfPjo6bmV3Ojo8MT4oKSwKKy8vISAgICAgICAg ICAgICBNb2RlOjpBdXRvID0+IEJvdW5kZWQ6Ojx1MzIsIF8+OjpuZXc6OjwyPigpLAorLy8hICAg ICAgICAgfQorLy8hICAgICB9CisvLyEgfQorLy8hCisvLyEgYml0ZmllbGQhIHsKKy8vISAgICAg cHViIHN0cnVjdCBDb25maWcodTMyKSB7CisvLyEgICAgICAgICAxOjAgbW9kZSA/PT4gTW9kZTsK Ky8vISAgICAgfQorLy8hIH0KKy8vIQorLy8hIGxldCBjZmcgPSBDb25maWc6Onplcm9lZCgpLndp dGhfbW9kZShNb2RlOjpBdXRvKTsKKy8vISBhc3NlcnRfZXEhKGNmZy5tb2RlKCksIE9rKE1vZGU6 OkF1dG8pKTsKKy8vIQorLy8hIC8vIEludmFsaWQgYml0IHBhdHRlcm4gcmV0dXJucyBhbiBlcnJv ci4KKy8vISBhc3NlcnRfZXEhKENvbmZpZzo6ZnJvbSgwYjExKS5tb2RlKCksIEVycigzKSk7Cisv LyEgYGBgCisvLyEKKy8vISBbYEJvdW5kZWRgXToga2VybmVsOjpudW06OkJvdW5kZWQKKworLy8v IERlZmluZXMgYSBiaXRmaWVsZCBzdHJ1Y3Qgd2l0aCBib3VuZHMtY2hlY2tlZCBhY2Nlc3NvcnMg Zm9yIGluZGl2aWR1YWwgYml0IHJhbmdlcy4KKy8vLworLy8vIFNlZSB0aGUgW2Btb2RAa2VybmVs OjpiaXRmaWVsZGBdIG1vZHVsZSBmb3IgZnVsbCBkb2N1bWVudGF0aW9uIGFuZCBleGFtcGxlcy4K KyNbbWFjcm9fZXhwb3J0XQorbWFjcm9fcnVsZXMhIGJpdGZpZWxkIHsKKyAgICAvLyBFbnRyeSBw b2ludCBkZWZpbmluZyB0aGUgYml0ZmllbGQgc3RydWN0LCBpdHMgaW1wbGVtZW50YXRpb25zIGFu ZCBpdHMgZmllbGQgYWNjZXNzb3JzLgorICAgICgKKyAgICAgICAgJCgjWyRhdHRyOm1ldGFdKSog JHZpczp2aXMgc3RydWN0ICRuYW1lOmlkZW50KCRzdG9yYWdlOnR5KSB7ICQoJGZpZWxkczp0dCkq IH0KKyAgICApID0+IHsKKyAgICAgICAgJGNyYXRlOjpiaXRmaWVsZCEoQGNvcmUKKyAgICAgICAg ICAgICNbYWxsb3cobm9uX2NhbWVsX2Nhc2VfdHlwZXMpXQorICAgICAgICAgICAgJCgjWyRhdHRy XSkqICR2aXMgJG5hbWUgJHN0b3JhZ2UKKyAgICAgICAgKTsKKyAgICAgICAgJGNyYXRlOjpiaXRm aWVsZCEoQGZpZWxkcyAkdmlzICRuYW1lICRzdG9yYWdlIHsgJCgkZmllbGRzKSogfSk7CisgICAg fTsKKworICAgIC8vIEFsbCBydWxlcyBiZWxvdyBhcmUgaGVscGVycy4KKworICAgIC8vIERlZmlu ZXMgdGhlIHdyYXBwZXIgYCRuYW1lYCB0eXBlIGFuZCBpdHMgY29udmVyc2lvbnMgZnJvbS90byB0 aGUgc3RvcmFnZSB0eXBlLgorICAgIChAY29yZSAkKCNbJGF0dHI6bWV0YV0pKiAkdmlzOnZpcyAk bmFtZTppZGVudCAkc3RvcmFnZTp0eSkgPT4geworICAgICAgICAkKCNbJGF0dHJdKSoKKyAgICAg ICAgI1tyZXByKHRyYW5zcGFyZW50KV0KKyAgICAgICAgI1tkZXJpdmUoQ2xvbmUsIENvcHksIFBh cnRpYWxFcSwgRXEpXQorICAgICAgICAkdmlzIHN0cnVjdCAkbmFtZSB7CisgICAgICAgICAgICBp bm5lcjogJHN0b3JhZ2UsCisgICAgICAgIH0KKworICAgICAgICAjW2FsbG93KGRlYWRfY29kZSld CisgICAgICAgIGltcGwgJG5hbWUgeworICAgICAgICAgICAgLy8vIENyZWF0ZXMgYSBiaXRmaWVs ZCBmcm9tIGEgcmF3IHZhbHVlLgorICAgICAgICAgICAgI1tpbmxpbmUoYWx3YXlzKV0KKyAgICAg ICAgICAgICR2aXMgY29uc3QgZm4gZnJvbV9yYXcodmFsdWU6ICRzdG9yYWdlKSAtPiBTZWxmIHsK KyAgICAgICAgICAgICAgICBTZWxmeyBpbm5lcjogdmFsdWUgfQorICAgICAgICAgICAgfQorCisg ICAgICAgICAgICAvLy8gVHVybnMgdGhpcyBiaXRmaWVsZCBpbnRvIGl0cyByYXcgdmFsdWUuCisg ICAgICAgICAgICAvLy8KKyAgICAgICAgICAgIC8vLyBUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIFtg RnJvbWBdIGltcGxlbWVudGF0aW9uLCBidXQgaXMgc2hvcnRlciB0byBpbnZva2UgaW4KKyAgICAg ICAgICAgIC8vLyBtb3N0IGNhc2VzLgorICAgICAgICAgICAgI1tpbmxpbmUoYWx3YXlzKV0KKyAg ICAgICAgICAgICR2aXMgY29uc3QgZm4gaW50b19yYXcoc2VsZikgLT4gJHN0b3JhZ2UgeworICAg ICAgICAgICAgICAgIHNlbGYuaW5uZXIKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg ICAgIC8vIFNBRkVUWTogYCRzdG9yYWdlYCBpcyBgWmVyb2FibGVgIGFuZCBgJG5hbWVgIGlzIHRy YW5zcGFyZW50LgorICAgICAgICB1bnNhZmUgaW1wbCA6OnBpbl9pbml0OjpaZXJvYWJsZSBmb3Ig JG5hbWUge30KKworICAgICAgICBpbXBsIDo6Y29yZTo6Y29udmVydDo6RnJvbTwkbmFtZT4gZm9y ICRzdG9yYWdlIHsKKyAgICAgICAgICAgICNbaW5saW5lKGFsd2F5cyldCisgICAgICAgICAgICBm biBmcm9tKHZhbDogJG5hbWUpIC0+ICRzdG9yYWdlIHsKKyAgICAgICAgICAgICAgICB2YWwuaW50 b19yYXcoKQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW1wbCA6OmNvcmU6 OmNvbnZlcnQ6OkZyb208JHN0b3JhZ2U+IGZvciAkbmFtZSB7CisgICAgICAgICAgICAjW2lubGlu ZShhbHdheXMpXQorICAgICAgICAgICAgZm4gZnJvbSh2YWw6ICRzdG9yYWdlKSAtPiAkbmFtZSB7 CisgICAgICAgICAgICAgICAgU2VsZjo6ZnJvbV9yYXcodmFsKQorICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfTsKKworICAgIC8vIERlZmluaXRpb25zIHJlcXVpcmluZyBrbm93bGVkZ2Ug b2YgaW5kaXZpZHVhbCBmaWVsZHM6IHByaXZhdGUgYW5kIHB1YmxpYyBmaWVsZCBhY2Nlc3NvcnMs CisgICAgLy8gYW5kIGBEZWJ1Z2AgaW1wbGVtZW50YXRpb24uCisgICAgKEBmaWVsZHMgJHZpczp2 aXMgJG5hbWU6aWRlbnQgJHN0b3JhZ2U6dHkgeworICAgICAgICAkKCQoI1tkb2MgPSAkZG9jOmV4 cHJdKSogJGhpOmxpdGVyYWw6JGxvOmxpdGVyYWwgJGZpZWxkOmlkZW50CisgICAgICAgICAgICAk KD89PiAkdHJ5X2ludG9fdHlwZTp0eSk/CisgICAgICAgICAgICAkKD0+ICRpbnRvX3R5cGU6dHkp PworICAgICAgICA7CisgICAgICAgICkqCisgICAgfQorICAgICkgPT4geworICAgICAgICAjW2Fs bG93KGRlYWRfY29kZSldCisgICAgICAgIGltcGwgJG5hbWUgeworICAgICAgICAkKAorICAgICAg ICAkY3JhdGU6OmJpdGZpZWxkIShAcHJpdmF0ZV9maWVsZF9hY2Nlc3NvcnMgJHZpcyAkbmFtZSAk c3RvcmFnZSA6ICRoaTokbG8gJGZpZWxkKTsKKyAgICAgICAgJGNyYXRlOjpiaXRmaWVsZCEoCisg ICAgICAgICAgICBAcHVibGljX2ZpZWxkX2FjY2Vzc29ycyAkKCNbZG9jID0gJGRvY10pKiAkdmlz ICRuYW1lICRzdG9yYWdlIDogJGhpOiRsbyAkZmllbGQKKyAgICAgICAgICAgICQoPz0+ICR0cnlf aW50b190eXBlKT8KKyAgICAgICAgICAgICQoPT4gJGludG9fdHlwZSk/CisgICAgICAgICk7Cisg ICAgICAgICkqCisgICAgICAgIH0KKworICAgICAgICAkY3JhdGU6OmJpdGZpZWxkIShAZGVidWcg JG5hbWUgeyAkKCRmaWVsZDspKiB9KTsKKyAgICB9OworCisgICAgLy8gUHJpdmF0ZSBmaWVsZCBh Y2Nlc3NvcnMgd29ya2luZyB3aXRoIHRoZSBleGFjdCBgQm91bmRlZGAgdHlwZSBmb3IgdGhlIGZp ZWxkLgorICAgICgKKyAgICAgICAgQHByaXZhdGVfZmllbGRfYWNjZXNzb3JzICR2aXM6dmlzICRu YW1lOmlkZW50ICRzdG9yYWdlOnR5IDogJGhpOnR0OiRsbzp0dCAkZmllbGQ6aWRlbnQKKyAgICAp ID0+IHsKKyAgICAgICAgOjprZXJuZWw6Om1hY3Jvczo6cGFzdGUhKAorICAgICAgICAkdmlzIGNv bnN0IFs8JGZpZWxkOnVwcGVyIF9SQU5HRT5dOiA6OmNvcmU6Om9wczo6UmFuZ2VJbmNsdXNpdmU8 dTg+ID0gJGxvLi49JGhpOworICAgICAgICAkdmlzIGNvbnN0IFs8JGZpZWxkOnVwcGVyIF9NQVNL Pl06ICRzdG9yYWdlID0KKyAgICAgICAgICAgICgoKCgxIDw8ICRoaSkgLSAxKSA8PCAxKSArIDEp IC0gKCgxIDw8ICRsbykgLSAxKTsKKyAgICAgICAgJHZpcyBjb25zdCBbPCRmaWVsZDp1cHBlciBf U0hJRlQ+XTogdTMyID0gJGxvOworICAgICAgICApOworCisgICAgICAgIDo6a2VybmVsOjptYWNy b3M6OnBhc3RlISgKKyAgICAgICAgZm4gWzxfXyAkZmllbGQ+XShzZWxmKSAtPgorICAgICAgICAg ICAgOjprZXJuZWw6Om51bTo6Qm91bmRlZDwkc3RvcmFnZSwgeyAkaGkgKyAxIC0gJGxvIH0+IHsK KyAgICAgICAgICAgIC8vIExlZnQgc2hpZnQgdG8gYWxpZ24gdGhlIGZpZWxkJ3MgTVNCIHdpdGgg dGhlIHN0b3JhZ2UgTVNCLgorICAgICAgICAgICAgY29uc3QgQUxJR05fVE9QOiB1MzIgPSAkc3Rv cmFnZTo6QklUUyAtICgkaGkgKyAxKTsKKyAgICAgICAgICAgIC8vIFJpZ2h0IHNoaWZ0IHRvIG1v dmUgdGhlIHRvcC1hbGlnbmVkIGZpZWxkIHRvIGJpdCAwIG9mIHRoZSBzdG9yYWdlLgorICAgICAg ICAgICAgY29uc3QgQUxJR05fQk9UVE9NOiB1MzIgPSBBTElHTl9UT1AgKyAkbG87CisKKyAgICAg ICAgICAgIC8vIEV4dHJhY3QgdGhlIGZpZWxkIHVzaW5nIHR3byBzaGlmdHMuIGBCb3VuZGVkOjpz aHJgIHByb2R1Y2VzIHRoZSBjb3JyZWN0bHktc2l6ZWQKKyAgICAgICAgICAgIC8vIG91dHB1dCB0 eXBlLgorICAgICAgICAgICAgbGV0IHZhbCA9IDo6a2VybmVsOjpudW06OkJvdW5kZWQ6Ojwkc3Rv cmFnZSwgeyAkc3RvcmFnZTo6QklUUyB9Pjo6ZnJvbSgKKyAgICAgICAgICAgICAgICBzZWxmLmlu bmVyIDw8IEFMSUdOX1RPUAorICAgICAgICAgICAgKTsKKyAgICAgICAgICAgIHZhbC5zaHI6OjxB TElHTl9CT1RUT00sIHsgJGhpICsgMSAtICRsbyB9ID4oKQorICAgICAgICB9CisKKyAgICAgICAg Y29uc3QgZm4gWzxfX3dpdGhfICRmaWVsZD5dKAorICAgICAgICAgICAgbXV0IHNlbGYsCisgICAg ICAgICAgICB2YWx1ZTogOjprZXJuZWw6Om51bTo6Qm91bmRlZDwkc3RvcmFnZSwgeyAkaGkgKyAx IC0gJGxvIH0+LAorICAgICAgICApIC0+IFNlbGYKKyAgICAgICAgeworICAgICAgICAgICAgY29u c3QgTUFTSzogJHN0b3JhZ2UgPSA8JG5hbWU+OjpbPCRmaWVsZDp1cHBlciBfTUFTSz5dOworICAg ICAgICAgICAgY29uc3QgU0hJRlQ6IHUzMiA9IDwkbmFtZT46Ols8JGZpZWxkOnVwcGVyIF9TSElG VD5dOworCisgICAgICAgICAgICBsZXQgdmFsdWUgPSB2YWx1ZS5nZXQoKSA8PCBTSElGVDsKKyAg ICAgICAgICAgIHNlbGYuaW5uZXIgPSAoc2VsZi5pbm5lciAmICFNQVNLKSB8IHZhbHVlOworCisg ICAgICAgICAgICBzZWxmCisgICAgICAgIH0KKyAgICAgICAgKTsKKyAgICB9OworCisgICAgLy8g UHVibGljIGFjY2Vzc29ycyBmb3IgZmllbGRzIGluZmFsbGlibHkgKGA9PmApIGNvbnZlcnRlZCB0 byBhIHR5cGUuCisgICAgKAorICAgICAgICBAcHVibGljX2ZpZWxkX2FjY2Vzc29ycyAkKCNbZG9j ID0gJGRvYzpleHByXSkqICR2aXM6dmlzICRuYW1lOmlkZW50ICRzdG9yYWdlOnR5IDoKKyAgICAg ICAgICAgICRoaTpsaXRlcmFsOiRsbzpsaXRlcmFsICRmaWVsZDppZGVudCA9PiAkaW50b190eXBl OnR5CisgICAgKSA9PiB7CisgICAgICAgIDo6a2VybmVsOjptYWNyb3M6OnBhc3RlISgKKworICAg ICAgICAkKCNbZG9jID0gJGRvY10pKgorICAgICAgICAjW2RvYyA9ICJSZXR1cm5zIHRoZSB2YWx1 ZSBvZiB0aGlzIGZpZWxkLiJdCisgICAgICAgICNbaW5saW5lKGFsd2F5cyldCisgICAgICAgICR2 aXMgZm4gJGZpZWxkKHNlbGYpIC0+ICRpbnRvX3R5cGUKKyAgICAgICAgeworICAgICAgICAgICAg c2VsZi5bPF9fICRmaWVsZD5dKCkuaW50bygpCisgICAgICAgIH0KKworICAgICAgICAkKCNbZG9j ID0gJGRvY10pKgorICAgICAgICAjW2RvYyA9ICJTZXRzIHRoaXMgZmllbGQgdG8gdGhlIGdpdmVu IGB2YWx1ZWAuIl0KKyAgICAgICAgI1tpbmxpbmUoYWx3YXlzKV0KKyAgICAgICAgJHZpcyBmbiBb PHdpdGhfICRmaWVsZD5dKHNlbGYsIHZhbHVlOiAkaW50b190eXBlKSAtPiBTZWxmCisgICAgICAg IHsKKyAgICAgICAgICAgIHNlbGYuWzxfX3dpdGhfICRmaWVsZD5dKHZhbHVlLmludG8oKSkKKyAg ICAgICAgfQorCisgICAgICAgICk7CisgICAgfTsKKworICAgIC8vIFB1YmxpYyBhY2Nlc3NvcnMg Zm9yIGZpZWxkcyBmYWxsaWJseSAoYD89PmApIGNvbnZlcnRlZCB0byBhIHR5cGUuCisgICAgKAor ICAgICAgICBAcHVibGljX2ZpZWxkX2FjY2Vzc29ycyAkKCNbZG9jID0gJGRvYzpleHByXSkqICR2 aXM6dmlzICRuYW1lOmlkZW50ICRzdG9yYWdlOnR5IDoKKyAgICAgICAgICAgICRoaTp0dDokbG86 dHQgJGZpZWxkOmlkZW50ID89PiAkdHJ5X2ludG9fdHlwZTp0eQorICAgICkgPT4geworICAgICAg ICA6Omtlcm5lbDo6bWFjcm9zOjpwYXN0ZSEoCisKKyAgICAgICAgJCgjW2RvYyA9ICRkb2NdKSoK KyAgICAgICAgI1tkb2MgPSAiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZC4iXQorICAg ICAgICAjW2lubGluZShhbHdheXMpXQorICAgICAgICAkdmlzIGZuICRmaWVsZChzZWxmKSAtPgor ICAgICAgICAgICAgUmVzdWx0PAorICAgICAgICAgICAgICAgICR0cnlfaW50b190eXBlLAorICAg ICAgICAgICAgICAgIDwkdHJ5X2ludG9fdHlwZSBhcyA6OmNvcmU6OmNvbnZlcnQ6OlRyeUZyb208 CisgICAgICAgICAgICAgICAgICAgIDo6a2VybmVsOjpudW06OkJvdW5kZWQ8JHN0b3JhZ2UsIHsg JGhpICsgMSAtICRsbyB9PgorICAgICAgICAgICAgICAgID4+OjpFcnJvcgorICAgICAgICAgICAg PgorICAgICAgICB7CisgICAgICAgICAgICBzZWxmLls8X18gJGZpZWxkPl0oKS50cnlfaW50bygp CisgICAgICAgIH0KKworICAgICAgICAkKCNbZG9jID0gJGRvY10pKgorICAgICAgICAjW2RvYyA9 ICJTZXRzIHRoaXMgZmllbGQgdG8gdGhlIGdpdmVuIGB2YWx1ZWAuIl0KKyAgICAgICAgI1tpbmxp bmUoYWx3YXlzKV0KKyAgICAgICAgJHZpcyBmbiBbPHdpdGhfICRmaWVsZD5dKHNlbGYsIHZhbHVl OiAkdHJ5X2ludG9fdHlwZSkgLT4gU2VsZgorICAgICAgICB7CisgICAgICAgICAgICBzZWxmLls8 X193aXRoXyAkZmllbGQ+XSh2YWx1ZS5pbnRvKCkpCisgICAgICAgIH0KKworICAgICAgICApOwor ICAgIH07CisKKyAgICAvLyBQdWJsaWMgYWNjZXNzb3JzIGZvciBmaWVsZHMgbm90IGNvbnZlcnRl ZCB0byBhIHR5cGUuCisgICAgKAorICAgICAgICBAcHVibGljX2ZpZWxkX2FjY2Vzc29ycyAkKCNb ZG9jID0gJGRvYzpleHByXSkqICR2aXM6dmlzICRuYW1lOmlkZW50ICRzdG9yYWdlOnR5IDoKKyAg ICAgICAgICAgICRoaTp0dDokbG86dHQgJGZpZWxkOmlkZW50CisgICAgKSA9PiB7CisgICAgICAg IDo6a2VybmVsOjptYWNyb3M6OnBhc3RlISgKKworICAgICAgICAkKCNbZG9jID0gJGRvY10pKgor ICAgICAgICAjW2RvYyA9ICJSZXR1cm5zIHRoZSB2YWx1ZSBvZiB0aGlzIGZpZWxkLiJdCisgICAg ICAgICNbaW5saW5lKGFsd2F5cyldCisgICAgICAgICR2aXMgZm4gJGZpZWxkKHNlbGYpIC0+Cisg ICAgICAgICAgICA6Omtlcm5lbDo6bnVtOjpCb3VuZGVkPCRzdG9yYWdlLCB7ICRoaSArIDEgLSAk bG8gfT4KKyAgICAgICAgeworICAgICAgICAgICAgc2VsZi5bPF9fICRmaWVsZD5dKCkKKyAgICAg ICAgfQorCisgICAgICAgICQoI1tkb2MgPSAkZG9jXSkqCisgICAgICAgICNbZG9jID0gIlNldHMg dGhpcyBmaWVsZCB0byB0aGUgY29tcGlsZS10aW1lIGNvbnN0YW50IGBWQUxVRWAuIl0KKyAgICAg ICAgI1tpbmxpbmUoYWx3YXlzKV0KKyAgICAgICAgJHZpcyBjb25zdCBmbiBbPHdpdGhfY29uc3Rf ICRmaWVsZD5dPGNvbnN0IFZBTFVFOiAkc3RvcmFnZT4oc2VsZikgLT4gU2VsZiB7CisgICAgICAg ICAgICBzZWxmLls8X193aXRoXyAkZmllbGQ+XSgKKyAgICAgICAgICAgICAgICA6Omtlcm5lbDo6 bnVtOjpCb3VuZGVkOjo8JHN0b3JhZ2UsIHsgJGhpICsgMSAtICRsbyB9Pjo6bmV3Ojo8VkFMVUU+ KCkKKyAgICAgICAgICAgICkKKyAgICAgICAgfQorCisgICAgICAgICQoI1tkb2MgPSAkZG9jXSkq CisgICAgICAgICNbZG9jID0gIlNldHMgdGhpcyBmaWVsZCB0byB0aGUgZ2l2ZW4gYHZhbHVlYC4i XQorICAgICAgICAjW2lubGluZShhbHdheXMpXQorICAgICAgICAkdmlzIGZuIFs8d2l0aF8gJGZp ZWxkPl08VD4oCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgdmFsdWU6IFQsCisgICAg ICAgICkgLT4gU2VsZgorICAgICAgICAgICAgd2hlcmUgVDogSW50bzw6Omtlcm5lbDo6bnVtOjpC b3VuZGVkPCRzdG9yYWdlLCB7ICRoaSArIDEgLSAkbG8gfT4+LAorICAgICAgICB7CisgICAgICAg ICAgICBzZWxmLls8X193aXRoXyAkZmllbGQ+XSh2YWx1ZS5pbnRvKCkpCisgICAgICAgIH0KKwor ICAgICAgICAkKCNbZG9jID0gJGRvY10pKgorICAgICAgICAjW2RvYyA9ICJUcmllcyB0byBzZXQg dGhpcyBmaWVsZCB0byBgdmFsdWVgLCByZXR1cm5pbmcgYW4gZXJyb3IgaWYgaXQgaXMgb3V0IG9m IHJhbmdlLiJdCisgICAgICAgICNbaW5saW5lKGFsd2F5cyldCisgICAgICAgICR2aXMgZm4gWzx0 cnlfd2l0aF8gJGZpZWxkPl08VD4oCisgICAgICAgICAgICBzZWxmLAorICAgICAgICAgICAgdmFs dWU6IFQsCisgICAgICAgICkgLT4gOjprZXJuZWw6OmVycm9yOjpSZXN1bHQ8U2VsZj4KKyAgICAg ICAgICAgIHdoZXJlIFQ6IDo6a2VybmVsOjpudW06OlRyeUludG9Cb3VuZGVkPCRzdG9yYWdlLCB7 ICRoaSArIDEgLSAkbG8gfT4sCisgICAgICAgIHsKKyAgICAgICAgICAgIE9rKAorICAgICAgICAg ICAgICAgIHNlbGYuWzxfX3dpdGhfICRmaWVsZD5dKAorICAgICAgICAgICAgICAgICAgICB2YWx1 ZS50cnlfaW50b19ib3VuZGVkKCkub2tfb3IoOjprZXJuZWw6OmVycm9yOjpjb2RlOjpFT1ZFUkZM T1cpPworICAgICAgICAgICAgICAgICkKKyAgICAgICAgICAgICkKKyAgICAgICAgfQorCisgICAg ICAgICk7CisgICAgfTsKKworICAgIC8vIGBEZWJ1Z2AgaW1wbGVtZW50YXRpb24uCisgICAgKEBk ZWJ1ZyAkbmFtZTppZGVudCB7ICQoJGZpZWxkOmlkZW50OykqIH0pID0+IHsKKyAgICAgICAgaW1w bCA6Omtlcm5lbDo6Zm10OjpEZWJ1ZyBmb3IgJG5hbWUgeworICAgICAgICAgICAgZm4gZm10KCZz ZWxmLCBmOiAmbXV0IDo6a2VybmVsOjpmbXQ6OkZvcm1hdHRlcjwnXz4pIC0+IDo6a2VybmVsOjpm bXQ6OlJlc3VsdCB7CisgICAgICAgICAgICAgICAgZi5kZWJ1Z19zdHJ1Y3Qoc3RyaW5naWZ5ISgk bmFtZSkpCisgICAgICAgICAgICAgICAgICAgIC5maWVsZCgiPHJhdz4iLCAmOjprZXJuZWw6OnBy ZWx1ZGU6OmZtdCEoIns6I3h9Iiwgc2VsZi5pbm5lcikpCisgICAgICAgICAgICAgICAgJCgKKyAg ICAgICAgICAgICAgICAgICAgLmZpZWxkKHN0cmluZ2lmeSEoJGZpZWxkKSwgJnNlbGYuJGZpZWxk KCkpCisgICAgICAgICAgICAgICAgKSoKKyAgICAgICAgICAgICAgICAgICAgLmZpbmlzaCgpCisg ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9OworfQpkaWZmIC0tZ2l0IGEvcnVzdC9rZXJu ZWwvaW8vcmVnaXN0ZXIucnMgYi9ydXN0L2tlcm5lbC9pby9yZWdpc3Rlci5ycwppbmRleCBhYmM0 OTkyNmFiZmUuLjM4ODY0N2YyODI5MiAxMDA2NDQKLS0tIGEvcnVzdC9rZXJuZWwvaW8vcmVnaXN0 ZXIucnMKKysrIGIvcnVzdC9rZXJuZWwvaW8vcmVnaXN0ZXIucnMKQEAgLTk1NiwxMSArOTU2LDEw IEBAIG1hY3JvX3J1bGVzISByZWdpc3RlciB7CiAgICAgKAogICAgICAgICBAYml0ZmllbGQgJCgj WyRhdHRyOm1ldGFdKSogJHZpczp2aXMgc3RydWN0ICRuYW1lOmlkZW50KCRzdG9yYWdlOnR5KSB7 ICQoJGZpZWxkczp0dCkqIH0KICAgICApID0+IHsKLSAgICAgICAgJGNyYXRlOjpyZWdpc3RlciEo QGJpdGZpZWxkX2NvcmUKKyAgICAgICAgJGNyYXRlOjpiaXRmaWVsZCEoCiAgICAgICAgICAgICAj W2FsbG93KG5vbl9jYW1lbF9jYXNlX3R5cGVzKV0KLSAgICAgICAgICAgICQoI1skYXR0cl0pKiAk dmlzICRuYW1lICRzdG9yYWdlCisgICAgICAgICAgICAkKCNbJGF0dHJdKSogJHZpcyBzdHJ1Y3Qg JG5hbWUoJHN0b3JhZ2UpIHsgJCgkZmllbGRzKSogfQogICAgICAgICApOwotICAgICAgICAkY3Jh dGU6OnJlZ2lzdGVyIShAYml0ZmllbGRfZmllbGRzICR2aXMgJG5hbWUgJHN0b3JhZ2UgeyAkKCRm aWVsZHMpKiB9KTsKICAgICB9OwogCiAgICAgLy8gSW1wbGVtZW50YXRpb25zIHNoYXJlZCBieSBh bGwgcmVnaXN0ZXJzIHR5cGVzLgpAQCAtMTAxNiwyNDUgKzEwMTUsNCBAQCBpbXBsICRjcmF0ZTo6 aW86OnJlZ2lzdGVyOjpSZWdpc3RlckFycmF5IGZvciAkbmFtZSB7CiAKICAgICAgICAgaW1wbCAk Y3JhdGU6OmlvOjpyZWdpc3Rlcjo6UmVsYXRpdmVSZWdpc3RlckFycmF5IGZvciAkbmFtZSB7fQog ICAgIH07Ci0KLSAgICAvLyBEZWZpbmVzIHRoZSB3cmFwcGVyIGAkbmFtZWAgdHlwZSBhbmQgaXRz IGNvbnZlcnNpb25zIGZyb20vdG8gdGhlIHN0b3JhZ2UgdHlwZS4KLSAgICAoQGJpdGZpZWxkX2Nv cmUgJCgjWyRhdHRyOm1ldGFdKSogJHZpczp2aXMgJG5hbWU6aWRlbnQgJHN0b3JhZ2U6dHkpID0+ IHsKLSAgICAgICAgJCgjWyRhdHRyXSkqCi0gICAgICAgICNbcmVwcih0cmFuc3BhcmVudCldCi0g ICAgICAgICNbZGVyaXZlKENsb25lLCBDb3B5LCBQYXJ0aWFsRXEsIEVxKV0KLSAgICAgICAgJHZp cyBzdHJ1Y3QgJG5hbWUgewotICAgICAgICAgICAgaW5uZXI6ICRzdG9yYWdlLAotICAgICAgICB9 Ci0KLSAgICAgICAgI1thbGxvdyhkZWFkX2NvZGUpXQotICAgICAgICBpbXBsICRuYW1lIHsKLSAg ICAgICAgICAgIC8vLyBDcmVhdGVzIGEgYml0ZmllbGQgZnJvbSBhIHJhdyB2YWx1ZS4KLSAgICAg ICAgICAgICNbaW5saW5lKGFsd2F5cyldCi0gICAgICAgICAgICAkdmlzIGNvbnN0IGZuIGZyb21f cmF3KHZhbHVlOiAkc3RvcmFnZSkgLT4gU2VsZiB7Ci0gICAgICAgICAgICAgICAgU2VsZnsgaW5u ZXI6IHZhbHVlIH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8vIFR1cm5zIHRoaXMg Yml0ZmllbGQgaW50byBpdHMgcmF3IHZhbHVlLgotICAgICAgICAgICAgLy8vCi0gICAgICAgICAg ICAvLy8gVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBbYEZyb21gXSBpbXBsZW1lbnRhdGlvbiwgYnV0 IGlzIHNob3J0ZXIgdG8gaW52b2tlIGluCi0gICAgICAgICAgICAvLy8gbW9zdCBjYXNlcy4KLSAg ICAgICAgICAgICNbaW5saW5lKGFsd2F5cyldCi0gICAgICAgICAgICAkdmlzIGNvbnN0IGZuIGlu dG9fcmF3KHNlbGYpIC0+ICRzdG9yYWdlIHsKLSAgICAgICAgICAgICAgICBzZWxmLmlubmVyCi0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBTQUZFVFk6IGAkc3RvcmFnZWAg aXMgYFplcm9hYmxlYCBhbmQgYCRuYW1lYCBpcyB0cmFuc3BhcmVudC4KLSAgICAgICAgdW5zYWZl IGltcGwgOjpwaW5faW5pdDo6WmVyb2FibGUgZm9yICRuYW1lIHt9Ci0KLSAgICAgICAgaW1wbCA6 OmNvcmU6OmNvbnZlcnQ6OkZyb208JG5hbWU+IGZvciAkc3RvcmFnZSB7Ci0gICAgICAgICAgICAj W2lubGluZShhbHdheXMpXQotICAgICAgICAgICAgZm4gZnJvbSh2YWw6ICRuYW1lKSAtPiAkc3Rv cmFnZSB7Ci0gICAgICAgICAgICAgICAgdmFsLmludG9fcmF3KCkKLSAgICAgICAgICAgIH0KLSAg ICAgICAgfQotCi0gICAgICAgIGltcGwgOjpjb3JlOjpjb252ZXJ0OjpGcm9tPCRzdG9yYWdlPiBm b3IgJG5hbWUgewotICAgICAgICAgICAgI1tpbmxpbmUoYWx3YXlzKV0KLSAgICAgICAgICAgIGZu IGZyb20odmFsOiAkc3RvcmFnZSkgLT4gJG5hbWUgewotICAgICAgICAgICAgICAgIFNlbGY6OmZy b21fcmF3KHZhbCkKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH07Ci0KLSAgICAvLyBE ZWZpbml0aW9ucyByZXF1aXJpbmcga25vd2xlZGdlIG9mIGluZGl2aWR1YWwgZmllbGRzOiBwcml2 YXRlIGFuZCBwdWJsaWMgZmllbGQgYWNjZXNzb3JzLAotICAgIC8vIGFuZCBgRGVidWdgIGltcGxl bWVudGF0aW9uLgotICAgIChAYml0ZmllbGRfZmllbGRzICR2aXM6dmlzICRuYW1lOmlkZW50ICRz dG9yYWdlOnR5IHsKLSAgICAgICAgJCgkKCNbZG9jID0gJGRvYzpleHByXSkqICRoaTpsaXRlcmFs OiRsbzpsaXRlcmFsICRmaWVsZDppZGVudAotICAgICAgICAgICAgJCg/PT4gJHRyeV9pbnRvX3R5 cGU6dHkpPwotICAgICAgICAgICAgJCg9PiAkaW50b190eXBlOnR5KT8KLSAgICAgICAgOwotICAg ICAgICApKgotICAgIH0KLSAgICApID0+IHsKLSAgICAgICAgI1thbGxvdyhkZWFkX2NvZGUpXQot ICAgICAgICBpbXBsICRuYW1lIHsKLSAgICAgICAgJCgKLSAgICAgICAgJGNyYXRlOjpyZWdpc3Rl ciEoQHByaXZhdGVfZmllbGRfYWNjZXNzb3JzICR2aXMgJG5hbWUgJHN0b3JhZ2UgOiAkaGk6JGxv ICRmaWVsZCk7Ci0gICAgICAgICRjcmF0ZTo6cmVnaXN0ZXIhKAotICAgICAgICAgICAgQHB1Ymxp Y19maWVsZF9hY2Nlc3NvcnMgJCgjW2RvYyA9ICRkb2NdKSogJHZpcyAkbmFtZSAkc3RvcmFnZSA6 ICRoaTokbG8gJGZpZWxkCi0gICAgICAgICAgICAkKD89PiAkdHJ5X2ludG9fdHlwZSk/Ci0gICAg ICAgICAgICAkKD0+ICRpbnRvX3R5cGUpPwotICAgICAgICApOwotICAgICAgICApKgotICAgICAg ICB9Ci0KLSAgICAgICAgJGNyYXRlOjpyZWdpc3RlciEoQGRlYnVnICRuYW1lIHsgJCgkZmllbGQ7 KSogfSk7Ci0gICAgfTsKLQotICAgIC8vIFByaXZhdGUgZmllbGQgYWNjZXNzb3JzIHdvcmtpbmcg d2l0aCB0aGUgZXhhY3QgYEJvdW5kZWRgIHR5cGUgZm9yIHRoZSBmaWVsZC4KLSAgICAoCi0gICAg ICAgIEBwcml2YXRlX2ZpZWxkX2FjY2Vzc29ycyAkdmlzOnZpcyAkbmFtZTppZGVudCAkc3RvcmFn ZTp0eSA6ICRoaTp0dDokbG86dHQgJGZpZWxkOmlkZW50Ci0gICAgKSA9PiB7Ci0gICAgICAgIDo6 a2VybmVsOjptYWNyb3M6OnBhc3RlISgKLSAgICAgICAgJHZpcyBjb25zdCBbPCRmaWVsZDp1cHBl ciBfUkFOR0U+XTogOjpjb3JlOjpvcHM6OlJhbmdlSW5jbHVzaXZlPHU4PiA9ICRsby4uPSRoaTsK LSAgICAgICAgJHZpcyBjb25zdCBbPCRmaWVsZDp1cHBlciBfTUFTSz5dOiAkc3RvcmFnZSA9Ci0g ICAgICAgICAgICAoKCgoMSA8PCAkaGkpIC0gMSkgPDwgMSkgKyAxKSAtICgoMSA8PCAkbG8pIC0g MSk7Ci0gICAgICAgICR2aXMgY29uc3QgWzwkZmllbGQ6dXBwZXIgX1NISUZUPl06IHUzMiA9ICRs bzsKLSAgICAgICAgKTsKLQotICAgICAgICA6Omtlcm5lbDo6bWFjcm9zOjpwYXN0ZSEoCi0gICAg ICAgIGZuIFs8X18gJGZpZWxkPl0oc2VsZikgLT4KLSAgICAgICAgICAgIDo6a2VybmVsOjpudW06 OkJvdW5kZWQ8JHN0b3JhZ2UsIHsgJGhpICsgMSAtICRsbyB9PiB7Ci0gICAgICAgICAgICAvLyBM ZWZ0IHNoaWZ0IHRvIGFsaWduIHRoZSBmaWVsZCdzIE1TQiB3aXRoIHRoZSBzdG9yYWdlIE1TQi4K LSAgICAgICAgICAgIGNvbnN0IEFMSUdOX1RPUDogdTMyID0gJHN0b3JhZ2U6OkJJVFMgLSAoJGhp ICsgMSk7Ci0gICAgICAgICAgICAvLyBSaWdodCBzaGlmdCB0byBtb3ZlIHRoZSB0b3AtYWxpZ25l ZCBmaWVsZCB0byBiaXQgMCBvZiB0aGUgc3RvcmFnZS4KLSAgICAgICAgICAgIGNvbnN0IEFMSUdO X0JPVFRPTTogdTMyID0gQUxJR05fVE9QICsgJGxvOwotCi0gICAgICAgICAgICAvLyBFeHRyYWN0 IHRoZSBmaWVsZCB1c2luZyB0d28gc2hpZnRzLiBgQm91bmRlZDo6c2hyYCBwcm9kdWNlcyB0aGUg Y29ycmVjdGx5LXNpemVkCi0gICAgICAgICAgICAvLyBvdXRwdXQgdHlwZS4KLSAgICAgICAgICAg IGxldCB2YWwgPSA6Omtlcm5lbDo6bnVtOjpCb3VuZGVkOjo8JHN0b3JhZ2UsIHsgJHN0b3JhZ2U6 OkJJVFMgfT46OmZyb20oCi0gICAgICAgICAgICAgICAgc2VsZi5pbm5lciA8PCBBTElHTl9UT1AK LSAgICAgICAgICAgICk7Ci0gICAgICAgICAgICB2YWwuc2hyOjo8QUxJR05fQk9UVE9NLCB7ICRo aSArIDEgLSAkbG8gfSA+KCkKLSAgICAgICAgfQotCi0gICAgICAgIGNvbnN0IGZuIFs8X193aXRo XyAkZmllbGQ+XSgKLSAgICAgICAgICAgIG11dCBzZWxmLAotICAgICAgICAgICAgdmFsdWU6IDo6 a2VybmVsOjpudW06OkJvdW5kZWQ8JHN0b3JhZ2UsIHsgJGhpICsgMSAtICRsbyB9PiwKLSAgICAg ICAgKSAtPiBTZWxmCi0gICAgICAgIHsKLSAgICAgICAgICAgIGNvbnN0IE1BU0s6ICRzdG9yYWdl ID0gPCRuYW1lPjo6WzwkZmllbGQ6dXBwZXIgX01BU0s+XTsKLSAgICAgICAgICAgIGNvbnN0IFNI SUZUOiB1MzIgPSA8JG5hbWU+OjpbPCRmaWVsZDp1cHBlciBfU0hJRlQ+XTsKLQotICAgICAgICAg ICAgbGV0IHZhbHVlID0gdmFsdWUuZ2V0KCkgPDwgU0hJRlQ7Ci0gICAgICAgICAgICBzZWxmLmlu bmVyID0gKHNlbGYuaW5uZXIgJiAhTUFTSykgfCB2YWx1ZTsKLQotICAgICAgICAgICAgc2VsZgot ICAgICAgICB9Ci0gICAgICAgICk7Ci0gICAgfTsKLQotICAgIC8vIFB1YmxpYyBhY2Nlc3NvcnMg Zm9yIGZpZWxkcyBpbmZhbGxpYmx5IChgPT5gKSBjb252ZXJ0ZWQgdG8gYSB0eXBlLgotICAgICgK LSAgICAgICAgQHB1YmxpY19maWVsZF9hY2Nlc3NvcnMgJCgjW2RvYyA9ICRkb2M6ZXhwcl0pKiAk dmlzOnZpcyAkbmFtZTppZGVudCAkc3RvcmFnZTp0eSA6Ci0gICAgICAgICAgICAkaGk6bGl0ZXJh bDokbG86bGl0ZXJhbCAkZmllbGQ6aWRlbnQgPT4gJGludG9fdHlwZTp0eQotICAgICkgPT4gewot ICAgICAgICA6Omtlcm5lbDo6bWFjcm9zOjpwYXN0ZSEoCi0KLSAgICAgICAgJCgjW2RvYyA9ICRk b2NdKSoKLSAgICAgICAgI1tkb2MgPSAiUmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZC4i XQotICAgICAgICAjW2lubGluZShhbHdheXMpXQotICAgICAgICAkdmlzIGZuICRmaWVsZChzZWxm KSAtPiAkaW50b190eXBlCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNlbGYuWzxfXyAkZmllbGQ+ XSgpLmludG8oKQotICAgICAgICB9Ci0KLSAgICAgICAgJCgjW2RvYyA9ICRkb2NdKSoKLSAgICAg ICAgI1tkb2MgPSAiU2V0cyB0aGlzIGZpZWxkIHRvIHRoZSBnaXZlbiBgdmFsdWVgLiJdCi0gICAg ICAgICNbaW5saW5lKGFsd2F5cyldCi0gICAgICAgICR2aXMgZm4gWzx3aXRoXyAkZmllbGQ+XShz ZWxmLCB2YWx1ZTogJGludG9fdHlwZSkgLT4gU2VsZgotICAgICAgICB7Ci0gICAgICAgICAgICBz ZWxmLls8X193aXRoXyAkZmllbGQ+XSh2YWx1ZS5pbnRvKCkpCi0gICAgICAgIH0KLQotICAgICAg ICApOwotICAgIH07Ci0KLSAgICAvLyBQdWJsaWMgYWNjZXNzb3JzIGZvciBmaWVsZHMgZmFsbGli bHkgKGA/PT5gKSBjb252ZXJ0ZWQgdG8gYSB0eXBlLgotICAgICgKLSAgICAgICAgQHB1YmxpY19m aWVsZF9hY2Nlc3NvcnMgJCgjW2RvYyA9ICRkb2M6ZXhwcl0pKiAkdmlzOnZpcyAkbmFtZTppZGVu dCAkc3RvcmFnZTp0eSA6Ci0gICAgICAgICAgICAkaGk6dHQ6JGxvOnR0ICRmaWVsZDppZGVudCA/ PT4gJHRyeV9pbnRvX3R5cGU6dHkKLSAgICApID0+IHsKLSAgICAgICAgOjprZXJuZWw6Om1hY3Jv czo6cGFzdGUhKAotCi0gICAgICAgICQoI1tkb2MgPSAkZG9jXSkqCi0gICAgICAgICNbZG9jID0g IlJldHVybnMgdGhlIHZhbHVlIG9mIHRoaXMgZmllbGQuIl0KLSAgICAgICAgI1tpbmxpbmUoYWx3 YXlzKV0KLSAgICAgICAgJHZpcyBmbiAkZmllbGQoc2VsZikgLT4KLSAgICAgICAgICAgIFJlc3Vs dDwKLSAgICAgICAgICAgICAgICAkdHJ5X2ludG9fdHlwZSwKLSAgICAgICAgICAgICAgICA8JHRy eV9pbnRvX3R5cGUgYXMgOjpjb3JlOjpjb252ZXJ0OjpUcnlGcm9tPAotICAgICAgICAgICAgICAg ICAgICA6Omtlcm5lbDo6bnVtOjpCb3VuZGVkPCRzdG9yYWdlLCB7ICRoaSArIDEgLSAkbG8gfT4K LSAgICAgICAgICAgICAgICA+Pjo6RXJyb3IKLSAgICAgICAgICAgID4KLSAgICAgICAgewotICAg ICAgICAgICAgc2VsZi5bPF9fICRmaWVsZD5dKCkudHJ5X2ludG8oKQotICAgICAgICB9Ci0KLSAg ICAgICAgJCgjW2RvYyA9ICRkb2NdKSoKLSAgICAgICAgI1tkb2MgPSAiU2V0cyB0aGlzIGZpZWxk IHRvIHRoZSBnaXZlbiBgdmFsdWVgLiJdCi0gICAgICAgICNbaW5saW5lKGFsd2F5cyldCi0gICAg ICAgICR2aXMgZm4gWzx3aXRoXyAkZmllbGQ+XShzZWxmLCB2YWx1ZTogJHRyeV9pbnRvX3R5cGUp IC0+IFNlbGYKLSAgICAgICAgewotICAgICAgICAgICAgc2VsZi5bPF9fd2l0aF8gJGZpZWxkPl0o dmFsdWUuaW50bygpKQotICAgICAgICB9Ci0KLSAgICAgICAgKTsKLSAgICB9OwotCi0gICAgLy8g UHVibGljIGFjY2Vzc29ycyBmb3IgZmllbGRzIG5vdCBjb252ZXJ0ZWQgdG8gYSB0eXBlLgotICAg ICgKLSAgICAgICAgQHB1YmxpY19maWVsZF9hY2Nlc3NvcnMgJCgjW2RvYyA9ICRkb2M6ZXhwcl0p KiAkdmlzOnZpcyAkbmFtZTppZGVudCAkc3RvcmFnZTp0eSA6Ci0gICAgICAgICAgICAkaGk6dHQ6 JGxvOnR0ICRmaWVsZDppZGVudAotICAgICkgPT4gewotICAgICAgICA6Omtlcm5lbDo6bWFjcm9z OjpwYXN0ZSEoCi0KLSAgICAgICAgJCgjW2RvYyA9ICRkb2NdKSoKLSAgICAgICAgI1tkb2MgPSAi UmV0dXJucyB0aGUgdmFsdWUgb2YgdGhpcyBmaWVsZC4iXQotICAgICAgICAjW2lubGluZShhbHdh eXMpXQotICAgICAgICAkdmlzIGZuICRmaWVsZChzZWxmKSAtPgotICAgICAgICAgICAgOjprZXJu ZWw6Om51bTo6Qm91bmRlZDwkc3RvcmFnZSwgeyAkaGkgKyAxIC0gJGxvIH0+Ci0gICAgICAgIHsK LSAgICAgICAgICAgIHNlbGYuWzxfXyAkZmllbGQ+XSgpCi0gICAgICAgIH0KLQotICAgICAgICAk KCNbZG9jID0gJGRvY10pKgotICAgICAgICAjW2RvYyA9ICJTZXRzIHRoaXMgZmllbGQgdG8gdGhl IGNvbXBpbGUtdGltZSBjb25zdGFudCBgVkFMVUVgLiJdCi0gICAgICAgICNbaW5saW5lKGFsd2F5 cyldCi0gICAgICAgICR2aXMgY29uc3QgZm4gWzx3aXRoX2NvbnN0XyAkZmllbGQ+XTxjb25zdCBW QUxVRTogJHN0b3JhZ2U+KHNlbGYpIC0+IFNlbGYgewotICAgICAgICAgICAgc2VsZi5bPF9fd2l0 aF8gJGZpZWxkPl0oCi0gICAgICAgICAgICAgICAgOjprZXJuZWw6Om51bTo6Qm91bmRlZDo6PCRz dG9yYWdlLCB7ICRoaSArIDEgLSAkbG8gfT46Om5ldzo6PFZBTFVFPigpCi0gICAgICAgICAgICAp Ci0gICAgICAgIH0KLQotICAgICAgICAkKCNbZG9jID0gJGRvY10pKgotICAgICAgICAjW2RvYyA9 ICJTZXRzIHRoaXMgZmllbGQgdG8gdGhlIGdpdmVuIGB2YWx1ZWAuIl0KLSAgICAgICAgI1tpbmxp bmUoYWx3YXlzKV0KLSAgICAgICAgJHZpcyBmbiBbPHdpdGhfICRmaWVsZD5dPFQ+KAotICAgICAg ICAgICAgc2VsZiwKLSAgICAgICAgICAgIHZhbHVlOiBULAotICAgICAgICApIC0+IFNlbGYKLSAg ICAgICAgICAgIHdoZXJlIFQ6IEludG88OjprZXJuZWw6Om51bTo6Qm91bmRlZDwkc3RvcmFnZSwg eyAkaGkgKyAxIC0gJGxvIH0+PiwKLSAgICAgICAgewotICAgICAgICAgICAgc2VsZi5bPF9fd2l0 aF8gJGZpZWxkPl0odmFsdWUuaW50bygpKQotICAgICAgICB9Ci0KLSAgICAgICAgJCgjW2RvYyA9 ICRkb2NdKSoKLSAgICAgICAgI1tkb2MgPSAiVHJpZXMgdG8gc2V0IHRoaXMgZmllbGQgdG8gYHZh bHVlYCwgcmV0dXJuaW5nIGFuIGVycm9yIGlmIGl0IGlzIG91dCBvZiByYW5nZS4iXQotICAgICAg ICAjW2lubGluZShhbHdheXMpXQotICAgICAgICAkdmlzIGZuIFs8dHJ5X3dpdGhfICRmaWVsZD5d PFQ+KAotICAgICAgICAgICAgc2VsZiwKLSAgICAgICAgICAgIHZhbHVlOiBULAotICAgICAgICAp IC0+IDo6a2VybmVsOjplcnJvcjo6UmVzdWx0PFNlbGY+Ci0gICAgICAgICAgICB3aGVyZSBUOiA6 Omtlcm5lbDo6bnVtOjpUcnlJbnRvQm91bmRlZDwkc3RvcmFnZSwgeyAkaGkgKyAxIC0gJGxvIH0+ LAotICAgICAgICB7Ci0gICAgICAgICAgICBPaygKLSAgICAgICAgICAgICAgICBzZWxmLls8X193 aXRoXyAkZmllbGQ+XSgKLSAgICAgICAgICAgICAgICAgICAgdmFsdWUudHJ5X2ludG9fYm91bmRl ZCgpLm9rX29yKDo6a2VybmVsOjplcnJvcjo6Y29kZTo6RU9WRVJGTE9XKT8KLSAgICAgICAgICAg ICAgICApCi0gICAgICAgICAgICApCi0gICAgICAgIH0KLQotICAgICAgICApOwotICAgIH07Ci0K LSAgICAvLyBgRGVidWdgIGltcGxlbWVudGF0aW9uLgotICAgIChAZGVidWcgJG5hbWU6aWRlbnQg eyAkKCRmaWVsZDppZGVudDspKiB9KSA9PiB7Ci0gICAgICAgIGltcGwgOjprZXJuZWw6OmZtdDo6 RGVidWcgZm9yICRuYW1lIHsKLSAgICAgICAgICAgIGZuIGZtdCgmc2VsZiwgZjogJm11dCA6Omtl cm5lbDo6Zm10OjpGb3JtYXR0ZXI8J18+KSAtPiA6Omtlcm5lbDo6Zm10OjpSZXN1bHQgewotICAg ICAgICAgICAgICAgIGYuZGVidWdfc3RydWN0KHN0cmluZ2lmeSEoJG5hbWUpKQotICAgICAgICAg ICAgICAgICAgICAuZmllbGQoIjxyYXc+IiwgJjo6a2VybmVsOjpwcmVsdWRlOjpmbXQhKCJ7OiN4 fSIsIHNlbGYuaW5uZXIpKQotICAgICAgICAgICAgICAgICQoCi0gICAgICAgICAgICAgICAgICAg IC5maWVsZChzdHJpbmdpZnkhKCRmaWVsZCksICZzZWxmLiRmaWVsZCgpKQotICAgICAgICAgICAg ICAgICkqCi0gICAgICAgICAgICAgICAgICAgIC5maW5pc2goKQotICAgICAgICAgICAgfQotICAg ICAgICB9Ci0gICAgfTsKIH0KZGlmZiAtLWdpdCBhL3J1c3Qva2VybmVsL2xpYi5ycyBiL3J1c3Qv a2VybmVsL2xpYi5ycwppbmRleCA0MGRlMDBjZTRmOTcuLjMxZTVmNTkwOGRmYyAxMDA2NDQKLS0t IGEvcnVzdC9rZXJuZWwvbGliLnJzCisrKyBiL3J1c3Qva2VybmVsL2xpYi5ycwpAQCAtNzcsNiAr NzcsNyBAQAogcHViIG1vZCBhbGxvYzsKICNbY2ZnKENPTkZJR19BVVhJTElBUllfQlVTKV0KIHB1 YiBtb2QgYXV4aWxpYXJ5OworcHViIG1vZCBiaXRmaWVsZDsKIHB1YiBtb2QgYml0bWFwOwogcHVi IG1vZCBiaXRzOwogI1tjZmcoQ09ORklHX0JMT0NLKV0KCi0tIAoyLjUzLjAKCg==