From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web09.3596.1648303499980753098 for ; Sat, 26 Mar 2022 07:05:00 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=mGhVNeqk; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: bob.c.feng@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1648303500; x=1679839500; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=6NcGhW0LIRyuYQ0stq7DCdPYp8d6jujc15JX5huqDAA=; b=mGhVNeqkyrbA5DLWDh3L7fRQ3JZvurnN9fWzj/zJSKvAt4ApoYK306Do DK3Zmmh007+Df7i6GaN2kegubeIkgkafb7XuuljXiuGA6OJf2O3j9uOQb Qzj/9Y4RGW+oEJ2uefp3WClOb+3bRIKA5UQoGBZ4XWHXvAyE9V25HEHmK 1KYC1lltfwk6yM7mH4w3XtiAQlt4LTzLQ2mCoGMzV3azcbjRqUsLDjkzc TpRTl+tKkTAsTtKL2KidDVlsiENiR8f0m/HQmvzNU5HfOIPEcBKXDrP+C 0iZJHhz/ppPu4N6eD34bEm5QOp4licIdjlRnUVZsFIcRMocen4grT+mjG g==; X-IronPort-AV: E=McAfee;i="6200,9189,10298"; a="321975879" X-IronPort-AV: E=Sophos;i="5.90,213,1643702400"; d="scan'208";a="321975879" Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Mar 2022 07:04:58 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.90,213,1643702400"; d="scan'208";a="786795461" Received: from orsmsx604.amr.corp.intel.com ([10.22.229.17]) by fmsmga006.fm.intel.com with ESMTP; 26 Mar 2022 07:04:58 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX604.amr.corp.intel.com (10.22.229.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27; Sat, 26 Mar 2022 07:04:57 -0700 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.27 via Frontend Transport; Sat, 26 Mar 2022 07:04:57 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.175) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.21; Sat, 26 Mar 2022 07:04:57 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=TQ46u3GzH4J7H4FfbJ7riOHV+jffKLviI7ncUj8NxR92dzc/iRpTAHL/Mr7Bmzr4EOMur9fLW4gtPM4zgsjS+/XtQ2MQ+/CHMIockF14HOfQk1FrYzbF9tvqa1eQWdTnm/E4Cdk4yMdMJ5/eaL1Qt82S6aez0k24scXCV90I7KuAFUmpbyy9kqxDFhIfifAzQHIlzrFW9kay/+tUMJeujSKwVzrncC1junj7knrw97QjwjxJBrYdhVkk+CjdqZWX9wt0ORU6OP8u3/EI+YS8A950g+0dyHUE971CHH1JpB5wLXzfjllo+5EMoQn+RwKd62VurOcF9+wqaauDLOfd6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=6NcGhW0LIRyuYQ0stq7DCdPYp8d6jujc15JX5huqDAA=; b=VWJqVoorIlgVZO6n5ETAaUzgQXLBrctm8a23kgdHCSJo0L46Iv5W+3T62vQ4F2+eN86wQBmsvnq2/vBQaLxu38Ktjnu9Q8FgAAn3y6Ai0WRHOJhIXqEJvXnvL9shiKxZB13FyfobId1LJ0sB6MDckqpANOETVZqs3S9eNyhOibl50luW6yeyUdwBFkSkg6bbZvg5eq0RrvQoJ1fUOy0bBpAytMSYgoVZOanoMmSfwP4Yd1iaWhoXjSdcLfP86GEXIbZ9X0LzGqBNIlbIs0/1VvedCV2z7fl1fVqjftoJ5WySTNGS1ozKo4aIKyCg3DI/SqiWHRpn04I0V2uNss4t7w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from PH7PR11MB5863.namprd11.prod.outlook.com (2603:10b6:510:135::11) by DM5PR11MB1372.namprd11.prod.outlook.com (2603:10b6:3:11::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5102.22; Sat, 26 Mar 2022 14:04:53 +0000 Received: from PH7PR11MB5863.namprd11.prod.outlook.com ([fe80::9cca:b173:d2c9:1d21]) by PH7PR11MB5863.namprd11.prod.outlook.com ([fe80::9cca:b173:d2c9:1d21%3]) with mapi id 15.20.5102.019; Sat, 26 Mar 2022 14:04:53 +0000 From: "Bob Feng" To: Rebecca Cran , "devel@edk2.groups.io" , Leif Lindholm , "Kinney, Michael D" , "Wu, Hao A" , "Gao, Liming" , "Chen, Christine" CC: Andrew Fish Subject: Re: [PATCH v2 1/3] BaseTools: efi_debugging.py: Add debugger agnostic dbg Python Classes Thread-Topic: [PATCH v2 1/3] BaseTools: efi_debugging.py: Add debugger agnostic dbg Python Classes Thread-Index: AQHYPWFD5gEKqj7exkujCR+W9cw9OazRuhYQ Date: Sat, 26 Mar 2022 14:04:53 +0000 Message-ID: References: <20220321202048.13567-1-quic_rcran@quicinc.com> <20220321202048.13567-2-quic_rcran@quicinc.com> In-Reply-To: <20220321202048.13567-2-quic_rcran@quicinc.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 28c8c50b-0ddf-4dfc-8ec8-08da0f3199b3 x-ms-traffictypediagnostic: DM5PR11MB1372:EE_ x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: fyBNZ66GKZPx7WaxMDcEDqdretBUPL9tm/mFy/xO/ocYW3SVW79C50xIJUf3+Z8yKV5QI3O4oWSZHkTeCMPTTn8SUHC/W71BzILNYMxIn1d8Fwo7vT0VgoEuA6/CQArwOaGfwaXzW83xUO/vERKwUauSJDvmrWg8+AaNNHREOWXlvF+/aK/2pEY/eBrotdXy+4SCLgf5QaR5R76IDoBuM2xeoYj9hVEfpR1l71KEFsXgamZf4f1YyCocyLkgw6vWUO3o+alvn4mxBfzIOiecgH4gs6BTUlrCLT+c40wsfN4xdHLnWAS2iNL5eAVRCPU26LSuo8ajsFpkeJy3PJBNJcrF8HgUmlaY/LM47GfAxaONY78/AXWOrsObSaN8RLI9q8bg6C+j46snBFjH78CsCPDJPwmR1Cr0zng9u6HNVxdYWK0C0OdPWnSignGz/QdJh/4dKeSFRmaxFTK2YNqKJKuNqBi5xFSDLpfbnp0AF0Ca1E0ApvFPeuyNppAxeQ4NVEHxW6CrsdNOY5i1pqU40VU8moQOAG1gfEFzuhC2FQaDOAIGG4TNjbHsQNIGDMFLO/Wci1oJE9igHaswgqYd3K4TJl5Ar/C2hAeu7lHRFXLPmUq+3GO1em2z5jUKFNp4XxdgpkfCV1kNqQOIwTSiJqAo/E/77g2qEOnhHs7VOBhFzsa975KPmgbUfttP/daCEH9kxWRUqk3iKmXHCZzWVEH5oyLBCq5U/wWG8KoefAA= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH7PR11MB5863.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(71200400001)(76116006)(921005)(82960400001)(122000001)(8676002)(4326008)(38100700002)(66946007)(66476007)(66446008)(64756008)(66556008)(2906002)(19627235002)(5660300002)(6636002)(110136005)(30864003)(316002)(86362001)(52536014)(33656002)(8936002)(38070700005)(55016003)(26005)(186003)(508600001)(83380400001)(9686003)(6506007)(7696005)(53546011)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?MVJZdG90dFVyWkt2anp5cGVodllpZHlwRGlkSWgyZnNjV1JlUHhNUE9nSWYr?= =?utf-8?B?c0VqZG1tTmdubndUd1czUktOeGRpVlhhMDFqMDlHLy9HVk1Nd1lFVE51SDlC?= =?utf-8?B?MFhDNFE2cyszYjVITkE5RWJKVk9kaXR2VUJjT3JTQllQZlVBdHAzMXpEQmdt?= =?utf-8?B?YnBoZm1BWUZ3TDZNVHpOSWVla2hmYUJWMjZDeUhQMXdBSVFVTndtYWhyR3VV?= =?utf-8?B?U1JCUkphYlM0R3UrOHo1YjBVdW1HbWtINXdML3lmcERKS2h1RWZoT0xUM05t?= =?utf-8?B?L1BWaFFLL1V4R0ZqYkpFQjJVTmFkQWpkRm1pUlpZZ2orUFNPNzZkQkVFMG9m?= =?utf-8?B?WlV3M01LbzRKZE94amRvVDZraDI1WjMwd1plUkxKQ214V1NiWVM5eTREMlpu?= =?utf-8?B?NmUrOGhFaDkvWGVDTnVQZDZIZU9QWmluNVo1NVhHcUFZY0lKamlyeFpFTTJ6?= =?utf-8?B?NC9iWVU0WHlkSjNOdVEzY25rcjErOWx4SENhME5NZmc0Y3RKZnBQemVreUN2?= =?utf-8?B?c0dVcC9DWmx1SjZHNy82Ym9HTVZLZVpFUTJxNXBycWx5TDR1aTRGSFRBd3Nw?= =?utf-8?B?SXIyekNJcnlLSStsOGtuaktFWDJ5N1Zudnc5TTRFMTN1ZjhJR3I4c0dvZGo5?= =?utf-8?B?M2hVbXZsZUZDY1NQb3p3a2NXRThBUnV4c210bXdGd0QzcmRheWFDekw4dXE2?= =?utf-8?B?dnlGTktqYVZ6d3ZWeE5rZmlZZG5QWGhaU2hWUXlhbEgzb3hEZmNRaWlIVmVa?= =?utf-8?B?UERZdG5Qd2J1cm9ZU1drbkliZzlrNk4wMHBwcWFnbUxmZFVVVFBnTGlIVk41?= =?utf-8?B?N2swSXJiNU1IWWVvQ0F5d2tDY1l0blpsREN4UHJQbUIxSXdiaFovVDVEMjFp?= =?utf-8?B?SWJrQXpCR2UrTjYwNUZIeGRxWG0reXVlYThkRUFNVzFTUHNHTDAzOUpxeU5i?= =?utf-8?B?MWZTTHN1UXpKbG9wd0ZNWFgzVEx1SFBxaUt5b1F2Y3FZYWhtd3R5WG1pSjQ5?= =?utf-8?B?c0lXaGdlcWc0REtoQWZwd3d3VVlNNHJ5U3JVRTc1b1hJQ3BnYmhzTktCUkVE?= =?utf-8?B?RGVBTWpBRHRFeTYxS0RmK2VYUUtBNXM1Z1d6Q3podDY2VE9zNnZSSWh4TXdK?= =?utf-8?B?Q2FvM2laY1VoaEhmWmp6TE5KUThCT1BhWlh2YWRlbDEzRllPcXhXMGJ6dENL?= =?utf-8?B?ajFqWXRQVS9JUCtLRzk3UGUrOVFxTHJvRjUwQ3RLTjZFdk43bnNhWWoxMmtl?= =?utf-8?B?dmJ4QmhhNVVONUZtTHJvcnp6cnAxaU5QTVhueC9GMnFISVV3VnR0emJNdVJu?= =?utf-8?B?YjhkM01YaTNQeUNpS1RTZUY2UFBFL0hxS3hRc09GbGE4ek03MWpXUjhnVHJX?= =?utf-8?B?UVBmLzRBMUlNZ3pZUHRhY0kxbFF2di8yVnNudVhiNE1GOG9OTzNnNi9zZHVV?= =?utf-8?B?UnhWQ0x0ZFFXVDNaSHZPK0VmWS9yeHRkZnZYbHZCSlpTMHEwbGZNYWsxSTlK?= =?utf-8?B?SXhzamkwREJNcVlkNWlXcGFRM2hrQ054UStVKzB3cWZNRTFrNk5qMEZ2VUNT?= =?utf-8?B?L0RYWTdEbi85aHdQakhHRjZlS0JmODV1YVFmdXJrZm9FNXdwMDgwK2xjRzlW?= =?utf-8?B?c2xrUW1xZkZXa0ZmSlg0eEpsWnMzb1FkazByK3VEQTJPcGdmWmxQYlc5T0xv?= =?utf-8?B?dkpOZTFCL3VqQUovcUZYT0VsMVAzczNwV1JOQk4xbjFpWFRPNUR3d0JJUE5J?= =?utf-8?B?RWtySzlZT0F6QkpZYXBKaGFSTVZsYVBJREV4WWR6V2NLRUZrc0U2ZjhtdWdT?= =?utf-8?B?Nkd2VkRxdUpVaTFOdFErdzRtam9nZ3VGajk5TXBRUkk2SkZhNmVoL0VpaEhj?= =?utf-8?B?Rkk3NEhuVjdPdngzRmdFQlp5MUhJRVpQSVJUMHRBaVFHQXFpRVlGVkNudWNn?= =?utf-8?B?a2NZZE5aUldxRWVoVWpSL0krcGNld3E1MThSemNnQWJBMnBwUFFXZHlBNWx6?= =?utf-8?B?T3hReTdSRUIyYXRYaG1EMFFGZjRPRnNCZzJ1aUw2ek1leWI3a1JUaUdwK3lB?= =?utf-8?B?Q1hNTWR1aEZHTWtPWHZlWXBoMWVhNWIxVmg2UCtSc2pCTDY4ZHFGZUR2UDAz?= =?utf-8?B?dlJOUFYvSXRYTFpkWkNGTlFhUXNlWit4QTZOaHllU21INTBmZjBZbTI3NkhC?= =?utf-8?B?MHlHSk1CYlBDWmwxYmJWSWRDWEVsd3BxaHVVNUcveTdjWHd1YXd6cVNRNlNN?= =?utf-8?B?empiNFI3UFVOTWMxdzJoUTBSd3hSUUhGNkVVdERiT2U5cnFkZXMwbVV6SnFn?= =?utf-8?B?YjlXMFJLb3l5NmpCSHNab0E2NGdKa3A0Rk1EU0ZHUldkL1Z4RWFBdz09?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH7PR11MB5863.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28c8c50b-0ddf-4dfc-8ec8-08da0f3199b3 X-MS-Exchange-CrossTenant-originalarrivaltime: 26 Mar 2022 14:04:53.1123 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: cT+6970apNI8xnxPSb9c5TBghNMfXfEQ4cfvVwTlja/U203cwQRTvy5y/3d8SESlH1wT7iP8N1POP8XEo0H46A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1372 Return-Path: bob.c.feng@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 UmV2aWV3ZWQtYnk6IEJvYiBGZW5nPGJvYi5jLmZlbmdAaW50ZWwuY29tPg0KDQotLS0tLU9yaWdp bmFsIE1lc3NhZ2UtLS0tLQ0KRnJvbTogUmViZWNjYSBDcmFuIDxxdWljX3JjcmFuQHF1aWNpbmMu Y29tPiANClNlbnQ6IFR1ZXNkYXksIE1hcmNoIDIyLCAyMDIyIDQ6MjEgQU0NClRvOiBkZXZlbEBl ZGsyLmdyb3Vwcy5pbzsgTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbT47 IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IFd1LCBIYW8g QSA8aGFvLmEud3VAaW50ZWwuY29tPjsgRmVuZywgQm9iIEMgPGJvYi5jLmZlbmdAaW50ZWwuY29t PjsgR2FvLCBMaW1pbmcgPGdhb2xpbWluZ0BieW9zb2Z0LmNvbS5jbj47IENoZW4sIENocmlzdGlu ZSA8eXV3ZWkuY2hlbkBpbnRlbC5jb20+DQpDYzogUmViZWNjYSBDcmFuIDxxdWljX3JjcmFuQHF1 aWNpbmMuY29tPjsgQW5kcmV3IEZpc2ggPGFmaXNoQGFwcGxlLmNvbT4NClN1YmplY3Q6IFtQQVRD SCB2MiAxLzNdIEJhc2VUb29sczogZWZpX2RlYnVnZ2luZy5weTogQWRkIGRlYnVnZ2VyIGFnbm9z dGljIGRiZyBQeXRob24gQ2xhc3Nlcw0KDQpBZGQgU2NyaXB0cy9lZmlfZGVidWdnaW5nLnB5IHRv IHByb3ZpZGUgZGVidWdnZXIgYWdub3N0aWMgZGVidWdnaW5nDQp1dGlsaXR5IFB5dGhvbiBjbGFz c2VzLg0KDQpDYzogTGVpZiBMaW5kaG9sbSA8cXVpY19sbGluZGhvbEBxdWljaW5jLmNvbT4NCkNj OiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCkNjOiBIYW8g QSBXdSA8aGFvLmEud3VAaW50ZWwuY29tPg0KQ2M6IEJvYiBGZW5nIDxib2IuYy5mZW5nQGludGVs LmNvbT4NCkNjOiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20uY24+DQpDYzogWXV3 ZWkgQ2hlbiA8eXV3ZWkuY2hlbkBpbnRlbC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBSZWJlY2NhIENy YW4gPHF1aWNfcmNyYW5AcXVpY2luYy5jb20+DQotLS0NCiBCYXNlVG9vbHMvU2NyaXB0cy9lZmlf ZGVidWdnaW5nLnB5IHwgMjE4NSArKysrKysrKysrKysrKysrKysrKw0KIDEgZmlsZSBjaGFuZ2Vk LCAyMTg1IGluc2VydGlvbnMoKykNCg0KZGlmZiAtLWdpdCBhL0Jhc2VUb29scy9TY3JpcHRzL2Vm aV9kZWJ1Z2dpbmcucHkgYi9CYXNlVG9vbHMvU2NyaXB0cy9lZmlfZGVidWdnaW5nLnB5DQpuZXcg ZmlsZSBtb2RlIDEwMDc1NQ0KaW5kZXggMDAwMDAwMDAwMDAwLi5hZjk3NWY0ZTZjZWINCi0tLSAv ZGV2L251bGwNCisrKyBiL0Jhc2VUb29scy9TY3JpcHRzL2VmaV9kZWJ1Z2dpbmcucHkNCkBAIC0w LDAgKzEsMjE4NSBAQA0KKyMhL3Vzci9iaW4vcHl0aG9uMw0KKycnJw0KK0NvcHlyaWdodCAoYykg QXBwbGUgSW5jLiAyMDIxDQorU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCisNCitDbGFzcyB0aGF0IGFic3RyYWN0cyBQRS9DT0ZGIGRlYnVnIGluZm8gcGFyc2lu ZyB2aWEgYSBQeXRob24gZmlsZSBsaWtlDQorb2JqZWN0LiBZb3UgY2FuIHBvcnQgdGhpcyBjb2Rl IGludG8gYW4gYXJiaXRyYXJ5IGRlYnVnZ2VyIGJ5IGludm9raW5nDQordGhlIGNsYXNzZXMgYW5k IHBhc3NpbmcgaW4gYSBmaWxlIGxpa2Ugb2JqZWN0IHRoYXQgYWJzdHJhY3RzIHRoZSBkZWJ1Z2dl cg0KK3JlYWRpbmcgbWVtb3J5Lg0KKw0KK0lmIHlvdSBydW4gdGhpcyBmaWxlIGRpcmVjdGx5IGl0 IHdpbGwgcGFyc2UgdGhlIHBhc3NlZCBpbiBQRS9DT0ZGIGZpbGVzDQorZm9yIGRlYnVnIGluZm86 DQorcHl0aG9uMyAuL2VmaV9wZWZjb2ZmLnB5IER4ZUNvcmUuZWZpDQorSUEzMmA8cGF0aC4uLj4v RHhlQ29yZS5kbGwgbG9hZCA9IDB4MDAwMDAwMDANCitFbnRyeVBvaW50ID0gMHgwMDAwMzBkMiAg VGV4dEFkZHJlc3MgPSAweDAwMDAwMjQwIERhdGFBZGRyZXNzID0gMHgwMDAwNDJjMA0KKy50ZXh0 ICAgIDB4MDAwMDAyNDAgKDB4MDQwODApIGZsYWdzOjB4NjAwMDAwMjANCisuZGF0YSAgICAweDAw MDA0MkMwICgweDAwMUMwKSBmbGFnczoweEMwMDAwMDQwDQorLnJlbG9jICAgMHgwMDAwNDQ4MCAo MHgwMDI0MCkgZmxhZ3M6MHg0MjAwMDA0MA0KKw0KK05vdGU6IFBlQ29mZkNsYXNzIHVzZXMgdmly dHVhbCBhZGRyZXNzZXMgYW5kIG5vdCBmaWxlIG9mZnNldHMuDQorICAgICAgIEl0IG5lZWRzIHRv IHdvcmsgd2hlbiBpbWFnZXMgYXJlIGxvYWRlZCBpbnRvIG1lbW9yeS4NCisgICAgICAgYXMgbG9u ZyBhcyB2aXJ0dWFsIGFkZHJlc3MgbWFwIHRvIGZpbGUgYWRkcmVzc2VzIHRoaXMNCisgICAgICAg Y29kZSBjYW4gcHJvY2VzcyBiaW5hcnkgZmlsZXMuDQorDQorTm90ZTogVGhpcyBmaWxlIGNhbiBh bHNvIGNvbnRhaW4gZ2VuZXJpYyB3b3JrZXIgZnVuY3Rpb25zIChsaWtlIEd1aWROYW1lcykNCisg ICAgICB0aGF0IGFic3RyYWN0IGRlYnVnZ2VyIGFnbm9zdGljIHNlcnZpY2VzIHRvIHRoZSBkZWJ1 Z2dlci4NCisNCitUaGlzIGZpbGUgc2hvdWxkIG5ldmVyIGltcG9ydCBkZWJ1Z2dlciBzcGVjaWZp YyBtb2R1bGVzLg0KKycnJw0KKw0KK2ltcG9ydCBzeXMNCitpbXBvcnQgb3MNCitpbXBvcnQgdXVp ZA0KK2ltcG9ydCBzdHJ1Y3QNCitpbXBvcnQgcmUNCitmcm9tIGN0eXBlcyBpbXBvcnQgY19jaGFy LCBjX3VpbnQ4LCBjX3VpbnQxNiwgY191aW50MzIsIGNfdWludDY0LCBjX3ZvaWRfcA0KK2Zyb20g Y3R5cGVzIGltcG9ydCBBUlJBWSwgc2l6ZW9mDQorZnJvbSBjdHlwZXMgaW1wb3J0IFN0cnVjdHVy ZSwgTGl0dGxlRW5kaWFuU3RydWN0dXJlDQorDQorIw0KKyMgVGhlIGVtcHR5IExpdHRsZUVuZGlh blN0cnVjdHVyZSBtdXN0IGhhdmUgX2ZpZWxkc18gYXNzaWduZWQgcHJpb3IgdG8gdXNlIG9yDQor IyAgc2l6ZW9mKCkuIEFueXRoaW5nIHRoYXQgaXMgc2l6ZSBVSU5UTiBtYXkgbmVlZCB0byBnZXQg YWRqdXN0ZWQuDQorIw0KKyMgVGhlIGlzc3VlIGlzIGN0eXBlcyBtYXRjaGVzIG91ciBsb2NhbCBt YWNoaW5lLCBub3QgdGhlIG1hY2hpbmUgd2UgYXJlDQorIyAgdHJ5aW5nIHRvIGRlYnVnLiBDYWxs IHBhdGNoX2N0eXBlcygpIHBhc3NpbmcgaW4gdGhlIGJ5dGUgd2lkdGggZnJvbSB0aGUNCisjICBk ZWJ1Z2dlciBweXRob24gdG8gbWFrZSBzdXJlIHlvdSBhcmUgaW4gc3luYy4NCisjDQorIyBTcGxp dHRpbmcgb3V0IHRoZSBfZmllbGRfIGZyb20gdGhlIFN0cnVjdHVyZSAoTGl0dGxlRW5kaWFuU3Ry dWN0dXJlKSBjbGFzcw0KKyMgIGFsbG93cyBpdCB0byBiZSBwYXRjaGVkLg0KKyMNCisNCisNCitj bGFzcyBFRklfTE9BREVEX0lNQUdFX1BST1RPQ09MKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQor ICAgIHBhc3MNCisNCisNCitFRklfTE9BREVEX0lNQUdFX1BST1RPQ09MX2ZpZWxkc18gPSBbDQor ICAgICgnUmV2aXNpb24nLCAgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgn UGFyZW50SGFuZGxlJywgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorICAgICgnU3lzdGVt VGFibGUnLCAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorICAgICgnRGV2aWNlSGFuZGxl JywgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorICAgICgnRmlsZVBhdGgnLCAgICAgICAg ICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorICAgICgnUmVzZXJ2ZWQnLCAgICAgICAgICAgICAg ICAgICAgICBjX3ZvaWRfcCksDQorICAgICgnTG9hZE9wdGlvbnNTaXplJywgICAgICAgICAgICAg ICBjX3VpbnQzMiksDQorICAgICgnTG9hZE9wdGlvbnMnLCAgICAgICAgICAgICAgICAgICBjX3Zv aWRfcCksDQorICAgICgnSW1hZ2VCYXNlJywgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCks DQorICAgICgnSW1hZ2VTaXplJywgICAgICAgICAgICAgICAgICAgICBjX3VpbnQ2NCksDQorICAg ICgnSW1hZ2VDb2RlVHlwZScsICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgnSW1h Z2VEYXRhVHlwZScsICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgnVW5sb2FkJywg ICAgICAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorXQ0KKw0KKw0KK2NsYXNzIEVGSV9H VUlEKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAg KCdEYXRhMScsICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdEYXRhMicsICAg ICAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdEYXRhMycsICAgICAgICAgICAgICAg Y191aW50MTYpLA0KKyAgICAgICAgKCdEYXRhNCcsICAgICAgICAgICAgICAgQVJSQVkoY191aW50 OCwgOCkpDQorICAgIF0NCisNCisNCitjbGFzcyBFRklfU1lTVEVNX1RBQkxFX1BPSU5URVIoTGl0 dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ1NpZ25h dHVyZScsICAgICAgICAgICAgICAgICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdFZmlTeXN0 ZW1UYWJsZUJhc2UnLCAgICAgICAgICAgIGNfdWludDY0KSwNCisgICAgICAgICgnQ3JjMzInLCAg ICAgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMikNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVG SV9ERUJVR19JTUFHRV9JTkZPX05PUk1BTChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBw YXNzDQorDQorDQorRUZJX0RFQlVHX0lNQUdFX0lORk9fTk9STUFMX2ZpZWxkc18gPSBbDQorICAg ICgnSW1hZ2VJbmZvVHlwZScsICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgnTG9h ZGVkSW1hZ2VQcm90b2NvbEluc3RhbmNlJywgICBjX3ZvaWRfcCksDQorICAgICgnSW1hZ2VIYW5k bGUnLCAgICAgICAgICAgICAgICAgICBjX3ZvaWRfcCkNCitdDQorDQorDQorY2xhc3MgRUZJX0RF QlVHX0lNQUdFX0lORk8oTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgcGFzcw0KKw0KKw0K K0VGSV9ERUJVR19JTUFHRV9JTkZPX2ZpZWxkc18gPSBbDQorICAgICgnTm9ybWFsSW1hZ2UnLCAg ICAgICAgICAgICAgICAgICBjX3ZvaWRfcCksDQorXQ0KKw0KKw0KK2NsYXNzIEVGSV9ERUJVR19J TUFHRV9JTkZPX1RBQkxFX0hFQURFUihMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBwYXNz DQorDQorDQorRUZJX0RFQlVHX0lNQUdFX0lORk9fVEFCTEVfSEVBREVSX2ZpZWxkc18gPSBbDQor ICAgICgnVXBkYXRlU3RhdHVzJywgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgn VGFibGVTaXplJywgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICgnRWZpRGVi dWdJbWFnZUluZm9UYWJsZScsICAgICAgICBjX3ZvaWRfcCksDQorXQ0KKw0KKw0KK2NsYXNzIEVG SV9UQUJMRV9IRUFERVIoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBb DQorICAgICAgICAoJ1NpZ25hdHVyZScsICAgICAgICAgICAgICAgICAgICAgY191aW50NjQpLA0K KyAgICAgICAgKCdSZXZpc2lvbicsICAgICAgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisg ICAgICAgICgnSGVhZGVyU2l6ZScsICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAg ICAgICAoJ0NSQzMyJywgICAgICAgICAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAg ICAgKCdSZXNlcnZlZCcsICAgICAgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgXQ0K Kw0KKw0KK2NsYXNzIEVGSV9DT05GSUdVUkFUSU9OX1RBQkxFKExpdHRsZUVuZGlhblN0cnVjdHVy ZSk6DQorICAgIHBhc3MNCisNCisNCitFRklfQ09ORklHVVJBVElPTl9UQUJMRV9maWVsZHNfID0g Ww0KKyAgICAoJ1ZlbmRvckd1aWQnLCAgICAgICAgICAgICAgICAgICAgRUZJX0dVSUQpLA0KKyAg ICAoJ1ZlbmRvclRhYmxlJywgICAgICAgICAgICAgICAgICAgY192b2lkX3ApDQorXQ0KKw0KKw0K K2NsYXNzIEVGSV9TWVNURU1fVEFCTEUoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgcGFz cw0KKw0KKw0KK0VGSV9TWVNURU1fVEFCTEVfZmllbGRzXyA9IFsNCisgICAgKCdIZHInLCAgICAg ICAgICAgICAgICAgICAgICAgICAgIEVGSV9UQUJMRV9IRUFERVIpLA0KKyAgICAoJ0Zpcm13YXJl VmVuZG9yJywgICAgICAgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAoJ0Zpcm13YXJlUmV2aXNp b24nLCAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAoJ0NvbnNvbGVJbkhhbmRsZScsICAg ICAgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAoJ0NvbkluJywgICAgICAgICAgICAgICAgICAg ICAgICAgY192b2lkX3ApLA0KKyAgICAoJ0NvbnNvbGVPdXRIYW5kbGUnLCAgICAgICAgICAgICAg Y192b2lkX3ApLA0KKyAgICAoJ0Nvbk91dCcsICAgICAgICAgICAgICAgICAgICAgICAgY192b2lk X3ApLA0KKyAgICAoJ1N0YW5kYXJkRXJySGFuZGxlJywgICAgICAgICAgICAgY192b2lkX3ApLA0K KyAgICAoJ1N0ZEVycicsICAgICAgICAgICAgICAgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAo J1J1bnRpbWVTZXJ2aWNlJywgICAgICAgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAoJ0Jvb3RT ZXJ2aWNlJywgICAgICAgICAgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAoJ051bWJlck9mVGFi bGVFbnRyaWVzJywgICAgICAgICAgY192b2lkX3ApLA0KKyAgICAoJ0NvbmZpZ3VyYXRpb25UYWJs ZScsICAgICAgICAgICAgY192b2lkX3ApLA0KK10NCisNCisNCitjbGFzcyBFRklfSU1BR0VfREFU QV9ESVJFQ1RPUlkoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQor ICAgICAgICAoJ1ZpcnR1YWxBZGRyZXNzJywgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdT aXplJywgICAgICAgICAgICAgICAgIGNfdWludDMyKQ0KKyAgICBdDQorDQorDQorY2xhc3MgRUZJ X1RFX0lNQUdFX0hFQURFUihMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfZmllbGRzXyA9 IFsNCisgICAgICAgICgnU2lnbmF0dXJlJywgICAgICAgICAgICBBUlJBWShjX2NoYXIsIDIpKSwN CisgICAgICAgICgnTWFjaGluZScsICAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAo J051bWJlck9mU2VjdGlvbnMnLCAgICAgY191aW50OCksDQorICAgICAgICAoJ1N1YnN5c3RlbScs ICAgICAgICAgICAgY191aW50OCksDQorICAgICAgICAoJ1N0cmlwcGVkU2l6ZScsICAgICAgICAg Y191aW50MTYpLA0KKyAgICAgICAgKCdBZGRyZXNzT2ZFbnRyeVBvaW50JywgIGNfdWludDMyKSwN CisgICAgICAgICgnQmFzZU9mQ29kZScsICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAo J0ltYWdlQmFzZScsICAgICAgICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdEYXRhRGlyZWN0 b3J5QmFzZVJlbG9jJywgIEVGSV9JTUFHRV9EQVRBX0RJUkVDVE9SWSksDQorICAgICAgICAoJ0Rh dGFEaXJlY3RvcnlEZWJ1ZycsICAgICAgRUZJX0lNQUdFX0RBVEFfRElSRUNUT1JZKQ0KKyAgICBd DQorDQorDQorY2xhc3MgRUZJX0lNQUdFX0RPU19IRUFERVIoTGl0dGxlRW5kaWFuU3RydWN0dXJl KToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ2VfbWFnaWMnLCAgICAgICAgICAgICAg Y191aW50MTYpLA0KKyAgICAgICAgKCdlX2NibHAnLCAgICAgICAgICAgICAgIGNfdWludDE2KSwN CisgICAgICAgICgnZV9jcCcsICAgICAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAo J2VfY3JsYycsICAgICAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdlX2NwYXJoZHIn LCAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnZV9taW5hbGxvYycsICAgICAgICAg ICBjX3VpbnQxNiksDQorICAgICAgICAoJ2VfbWF4YWxsb2MnLCAgICAgICAgICAgY191aW50MTYp LA0KKyAgICAgICAgKCdlX3NzJywgICAgICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAg ICgnZV9zcCcsICAgICAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ2VfY3N1bScs ICAgICAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdlX2lwJywgICAgICAgICAgICAg ICAgIGNfdWludDE2KSwNCisgICAgICAgICgnZV9jcycsICAgICAgICAgICAgICAgICBjX3VpbnQx NiksDQorICAgICAgICAoJ2VfbGZhcmxjJywgICAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAg ICAgKCdlX292bm8nLCAgICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnZV9yZXMn LCAgICAgICAgICAgICAgICBBUlJBWShjX3VpbnQxNiwgNCkpLA0KKyAgICAgICAgKCdlX29lbWlk JywgICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnZV9vZW1pbmZvJywgICAgICAg ICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ2VfcmVzMicsICAgICAgICAgICAgICAgQVJSQVko Y191aW50MTYsIDEwKSksDQorICAgICAgICAoJ2VfbGZhbmV3JywgICAgICAgICAgICAgY191aW50 MTYpDQorICAgIF0NCisNCisNCitjbGFzcyBFRklfSU1BR0VfRklMRV9IRUFERVIoTGl0dGxlRW5k aWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ01hY2hpbmUnLCAg ICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnTnVtYmVyT2ZTZWN0aW9ucycsICAg ICAgY191aW50MTYpLA0KKyAgICAgICAgKCdUaW1lRGF0ZVN0YW1wJywgICAgICAgICBjX3VpbnQz MiksDQorICAgICAgICAoJ1BvaW50ZXJUb1N5bWJvbFRhYmxlJywgIGNfdWludDMyKSwNCisgICAg ICAgICgnTnVtYmVyT2ZTeW1ib2xzJywgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdTaXpl T2ZPcHRpb25hbEhlYWRlcicsICBjX3VpbnQxNiksDQorICAgICAgICAoJ0NoYXJhY3RlcmlzdGlj cycsICAgICAgIGNfdWludDE2KQ0KKyAgICBdDQorDQorDQorY2xhc3MgRUZJX0lNQUdFX09QVElP TkFMX0hFQURFUjMyKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0K KyAgICAgICAgKCdNYWdpYycsICAgICAgICAgICAgICAgICAgICAgICAgIGNfdWludDE2KSwNCisg ICAgICAgICgnTWFqb3JMaW5rZXJWZXJzaW9uJywgICAgICAgICAgICBjX3VpbnQ4KSwNCisgICAg ICAgICgnTWlub3JMaW5rZXJWZXJzaW9uJywgICAgICAgICAgICBjX3VpbnQ4KSwNCisgICAgICAg ICgnU2l6ZU9mQ29kZScsICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAo J1NpemVPZkluaXRpYWxpemVkRGF0YScsICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdT aXplT2ZVbmluaXRpYWxpemVkRGF0YScsICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnQWRk cmVzc09mRW50cnlQb2ludCcsICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ0Jhc2VP ZkNvZGUnLCAgICAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdCYXNlT2ZE YXRhJywgICAgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnSW1hZ2VCYXNl JywgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1NlY3Rpb25BbGln bm1lbnQnLCAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdGaWxlQWxpZ25tZW50 JywgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnTWFqb3JPcGVyYXRpbmdT eXN0ZW1WZXJzaW9uJywgICBjX3VpbnQxNiksDQorICAgICAgICAoJ01pbm9yT3BlcmF0aW5nU3lz dGVtVmVyc2lvbicsICAgY191aW50MTYpLA0KKyAgICAgICAgKCdNYWpvckltYWdlVmVyc2lvbics ICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnTWlub3JJbWFnZVZlcnNpb24nLCAg ICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ01ham9yU3Vic3lzdGVtVmVyc2lvbics ICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdNaW5vclN1YnN5c3RlbVZlcnNpb24nLCAg ICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnV2luMzJWZXJzaW9uVmFsdWUnLCAgICAgICAg ICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1NpemVPZkltYWdlJywgICAgICAgICAgICAgICAg ICAgY191aW50MzIpLA0KKyAgICAgICAgKCdTaXplT2ZIZWFkZXJzJywgICAgICAgICAgICAgICAg IGNfdWludDMyKSwNCisgICAgICAgICgnQ2hlY2tTdW0nLCAgICAgICAgICAgICAgICAgY191aW50 MzIpLA0KKyAgICAgICAgKCdTdWJzeXN0ZW0nLCAgICAgICAgICAgICAgICAgICAgIGNfdWludDE2 KSwNCisgICAgICAgICgnRGxsQ2hhcmFjdGVyaXN0aWNzJywgICAgICAgICAgICBjX3VpbnQxNiks DQorICAgICAgICAoJ1NpemVPZlN0YWNrUmVzZXJ2ZScsICAgICAgICAgICAgY191aW50MzIpLA0K KyAgICAgICAgKCdTaXplT2ZTdGFja0NvbW1pdCcsICAgICAgICAgICAgY191aW50MzIpLA0KKyAg ICAgICAgKCdTaXplT2ZIZWFwUmVzZXJ2ZScsICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAg ICAgICgnU2l6ZU9mSGVhcENvbW1pdCcsICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAg ICgnTG9hZGVyRmxhZ3MnLCAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdOdW1i ZXJPZlJ2YUFuZFNpemVzJywgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnRGF0YURp cmVjdG9yeScsICAgICAgICAgICAgICAgICBBUlJBWShFRklfSU1BR0VfREFUQV9ESVJFQ1RPUlks IDE2KSkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVGSV9JTUFHRV9OVF9IRUFERVJTMzIoTGl0dGxl RW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ1NpZ25hdHVy ZScsICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdGaWxlSGVhZGVyJywgICAgICAg ICAgIEVGSV9JTUFHRV9GSUxFX0hFQURFUiksDQorICAgICAgICAoJ09wdGlvbmFsSGVhZGVyJywg ICAgICAgRUZJX0lNQUdFX09QVElPTkFMX0hFQURFUjMyKQ0KKyAgICBdDQorDQorDQorY2xhc3Mg RUZJX0lNQUdFX09QVElPTkFMX0hFQURFUjY0KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAg IF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdNYWdpYycsICAgICAgICAgICAgICAgICAgICAgICAg IGNfdWludDE2KSwNCisgICAgICAgICgnTWFqb3JMaW5rZXJWZXJzaW9uJywgICAgICAgICAgICBj X3VpbnQ4KSwNCisgICAgICAgICgnTWlub3JMaW5rZXJWZXJzaW9uJywgICAgICAgICAgICBjX3Vp bnQ4KSwNCisgICAgICAgICgnU2l6ZU9mQ29kZScsICAgICAgICAgICAgICAgICAgICBjX3VpbnQz MiksDQorICAgICAgICAoJ1NpemVPZkluaXRpYWxpemVkRGF0YScsICAgICAgICAgY191aW50MzIp LA0KKyAgICAgICAgKCdTaXplT2ZVbmluaXRpYWxpemVkRGF0YScsICAgICAgIGNfdWludDMyKSwN CisgICAgICAgICgnQWRkcmVzc09mRW50cnlQb2ludCcsICAgICAgICAgICBjX3VpbnQzMiksDQor ICAgICAgICAoJ0Jhc2VPZkNvZGUnLCAgICAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAg ICAgICAgKCdCYXNlT2ZEYXRhJywgICAgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAg ICAgICgnSW1hZ2VCYXNlJywgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAg ICAoJ1NlY3Rpb25BbGlnbm1lbnQnLCAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAg KCdGaWxlQWxpZ25tZW50JywgICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgn TWFqb3JPcGVyYXRpbmdTeXN0ZW1WZXJzaW9uJywgICBjX3VpbnQxNiksDQorICAgICAgICAoJ01p bm9yT3BlcmF0aW5nU3lzdGVtVmVyc2lvbicsICAgY191aW50MTYpLA0KKyAgICAgICAgKCdNYWpv ckltYWdlVmVyc2lvbicsICAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnTWlub3JJ bWFnZVZlcnNpb24nLCAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ01ham9yU3Vi c3lzdGVtVmVyc2lvbicsICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdNaW5vclN1YnN5 c3RlbVZlcnNpb24nLCAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnV2luMzJWZXJzaW9u VmFsdWUnLCAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1NpemVPZkltYWdlJywg ICAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdTaXplT2ZIZWFkZXJzJywg ICAgICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnQ2hlY2tTdW0nLCAgICAgICAg ICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdTdWJzeXN0ZW0nLCAgICAgICAgICAgICAg ICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnRGxsQ2hhcmFjdGVyaXN0aWNzJywgICAgICAg ICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ1NpemVPZlN0YWNrUmVzZXJ2ZScsICAgICAgICAg ICAgY191aW50NjQpLA0KKyAgICAgICAgKCdTaXplT2ZTdGFja0NvbW1pdCcsICAgICAgICAgICAg Y191aW50NjQpLA0KKyAgICAgICAgKCdTaXplT2ZIZWFwUmVzZXJ2ZScsICAgICAgICAgICAgIGNf dWludDY0KSwNCisgICAgICAgICgnU2l6ZU9mSGVhcENvbW1pdCcsICAgICAgICAgICAgIGNfdWlu dDY0KSwNCisgICAgICAgICgnTG9hZGVyRmxhZ3MnLCAgICAgICAgICAgICAgY191aW50MzIpLA0K KyAgICAgICAgKCdOdW1iZXJPZlJ2YUFuZFNpemVzJywgICAgICAgICAgIGNfdWludDMyKSwNCisg ICAgICAgICgnRGF0YURpcmVjdG9yeScsICAgICAgICAgICAgICAgICBBUlJBWShFRklfSU1BR0Vf REFUQV9ESVJFQ1RPUlksIDE2KSkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVGSV9JTUFHRV9OVF9I RUFERVJTNjQoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAg ICAgICAoJ1NpZ25hdHVyZScsICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdGaWxl SGVhZGVyJywgICAgICAgICAgIEVGSV9JTUFHRV9GSUxFX0hFQURFUiksDQorICAgICAgICAoJ09w dGlvbmFsSGVhZGVyJywgICAgICAgRUZJX0lNQUdFX09QVElPTkFMX0hFQURFUjY0KQ0KKyAgICBd DQorDQorDQorY2xhc3MgRUZJX0lNQUdFX0RFQlVHX0RJUkVDVE9SWV9FTlRSWShMaXR0bGVFbmRp YW5TdHJ1Y3R1cmUpOg0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnQ2hhcmFjdGVyaXN0 aWNzJywgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1RpbWVEYXRlU3RhbXAnLCAg ICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdNYWpvclZlcnNpb24nLCAgICAgICAg ICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnTWlub3JWZXJzaW9uJywgICAgICAgICAgICAg ICBjX3VpbnQxNiksDQorICAgICAgICAoJ1R5cGUnLCAgICAgICAgICAgICAgICAgICAgICAgY191 aW50MzIpLA0KKyAgICAgICAgKCdTaXplT2ZEYXRhJywgICAgICAgICAgICAgICAgIGNfdWludDMy KSwNCisgICAgICAgICgnUlZBJywgICAgICAgICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQor ICAgICAgICAoJ0ZpbGVPZmZzZXQnLCAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICBd DQorDQorDQorY2xhc3MgRUZJX0lNQUdFX1NFQ1RJT05fSEVBREVSKExpdHRsZUVuZGlhblN0cnVj dHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdOYW1lJywgICAgICAgICAgICAg ICAgICAgICAgIEFSUkFZKGNfY2hhciwgOCkpLA0KKyAgICAgICAgKCdWaXJ0dWFsU2l6ZScsICAg ICAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgnVmlydHVhbEFkZHJlc3MnLCAgICAg ICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1NpemVPZlJhd0RhdGEnLCAgICAgICAgICAg ICAgY191aW50MzIpLA0KKyAgICAgICAgKCdQb2ludGVyVG9SYXdEYXRhJywgICAgICAgICAgIGNf dWludDMyKSwNCisgICAgICAgICgnUG9pbnRlclRvUmVsb2NhdGlvbnMnLCAgICAgICBjX3VpbnQz MiksDQorICAgICAgICAoJ1BvaW50ZXJUb0xpbmVudW1iZXJzJywgICAgICAgY191aW50MzIpLA0K KyAgICAgICAgKCdOdW1iZXJPZlJlbG9jYXRpb25zJywgICAgICAgIGNfdWludDE2KSwNCisgICAg ICAgICgnTnVtYmVyT2ZMaW5lbnVtYmVycycsICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAo J0NoYXJhY3RlcmlzdGljcycsICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICBdDQorDQorDQor RUZJX0lNQUdFX05UX09QVElPTkFMX0hEUjMyX01BR0lDID0gMHgxMGINCitFRklfSU1BR0VfTlRf T1BUSU9OQUxfSERSNjRfTUFHSUMgPSAweDIwYg0KKw0KK0RJUkVDVE9SWV9ERUJVRyA9IDYNCisN CisNCitpbWFnZV9tYWNoaW5lX2RpY3QgPSB7DQorICAgIDB4MDE0YzogIklBMzIiLA0KKyAgICAw eDAyMDA6ICJJUEYiLA0KKyAgICAweDBFQkM6ICJFQkMiLA0KKyAgICAweDg2NjQ6ICJYNjQiLA0K KyAgICAweDAxYzI6ICJBUk0iLA0KKyAgICAweEFBNjQ6ICJBQXJjaDY0IiwNCisgICAgMHg1MDMy OiAiUklTQzMyIiwNCisgICAgMHg1MDY0OiAiUklTQzY0IiwNCisgICAgMHg1MTI4OiAiUklTQ1Yx MjgiLA0KK30NCisNCisNCitkZWYgcGF0Y2hfdm9pZF9wX3RvX2N0eXBlKHBhdGNoX3R5cGUsIHRv X3BhdGNoKToNCisgICAgJycnT3B0aW9uYWxseSBwYXRjaCBjX3ZvaWRfcCBpbiB0aGUgU3RydWN0 dXJlLl9maWVsZHNfJycnDQorICAgIGlmIHBhdGNoX3R5cGUgaXMgTm9uZToNCisgICAgICAgIHJl dHVybiB0b19wYXRjaA0KKw0KKyAgICByZXN1bHQgPSBbXQ0KKyAgICBmb3IgbmFtZSwgY190eXBl IGluIHRvX3BhdGNoOg0KKyAgICAgICAgaWYgdHlwZShjX3R5cGUpID09IHR5cGUoY192b2lkX3Ap Og0KKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoKG5hbWUsIGNfdWludDMyKSkNCisgICAgICAg IGVsc2U6DQorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgobmFtZSwgY190eXBlKSkNCisgICAg cmV0dXJuIHJlc3VsdA0KKw0KKw0KK2RlZiBwYXRjaF9jdHlwZXMocG9pbnRlcl93aWR0aD04KToN CisgICAgJycnDQorICAgIFBhc3MgaW4gdGhlIHBvaW50ZXIgd2lkdGggb2YgdGhlIHN5c3RlbSBi ZWluZyBkZWJ1Z2dlZC4gSWYgaXQgaXMgbm90DQorICAgIHRoZSBzYW1lIGFzIGNfdm9pZF9wIHRo ZW4gcGF0Y2ggdGhlIF9maWVsZHNfIHdpdGggdGhlIGNvcnJlY3QgdHlwZS4NCisgICAgRm9yIGFu eSBjdHlwZXMgU3RydWN0dXJlIHRoYXQgaGFzIGEgY192b2lkX3AgdGhpcyBmdW5jdGlvbiBuZWVk cyB0byBiZQ0KKyAgICBjYWxsZWQgcHJpb3IgdG8gdXNlIG9yIHNpemVvZigpIHRvIGluaXRpYWxp emUgX2ZpZWxkc18uDQorICAgICcnJw0KKw0KKyAgICBpZiBzaXplb2YoY192b2lkX3ApID09IHBv aW50ZXJfd2lkdGg6DQorICAgICAgICBwYXRjaF90eXBlID0gTm9uZQ0KKyAgICBlbGlmIHBvaW50 ZXJfd2lkdGggPT0gMTY6DQorICAgICAgICBhc3NlcnQgRmFsc2UNCisgICAgZWxpZiBwb2ludGVy X3dpZHRoID09IDg6DQorICAgICAgICBwYXRjaF90eXBlID0gY191aW50NjQNCisgICAgZWxpZiBw b2ludGVyX3dpZHRoID09IDQ6DQorICAgICAgICBwYXRjaF90eXBlID0gY191aW50MzINCisgICAg ZWxzZToNCisgICAgICAgIHJhaXNlIEV4Y2VwdGlvbihmJ0VSUk9SOiBVbmtvd24gcG9pbnRlcl93 aWR0aCA9IHtwb2ludGVyX3dpZHRofScpDQorDQorICAgICMgSWYgeW91IGFkZCBhIGN0eXBlcyBT dHJ1Y3R1cmUgY2xhc3Mgd2l0aCBhIGNfdm9pZF9wIHlvdSBuZWVkIHRvIGFkZA0KKyAgICAjIGl0 IHRvIHRoaXMgbGlzdC4gTm90ZTogeW91IHNob3VsZCB1c2UgY192b2lkX3AgZm9yIFVJTlROIHZh bHVlcy4NCisgICAgRUZJX0xPQURFRF9JTUFHRV9QUk9UT0NPTC5fZmllbGRzXyA9IHBhdGNoX3Zv aWRfcF90b19jdHlwZSgNCisgICAgICAgIHBhdGNoX3R5cGUsIEVGSV9MT0FERURfSU1BR0VfUFJP VE9DT0xfZmllbGRzXykNCisgICAgRUZJX0RFQlVHX0lNQUdFX0lORk9fTk9STUFMLl9maWVsZHNf ID0gcGF0Y2hfdm9pZF9wX3RvX2N0eXBlKA0KKyAgICAgICAgcGF0Y2hfdHlwZSwgRUZJX0RFQlVH X0lNQUdFX0lORk9fTk9STUFMX2ZpZWxkc18pDQorICAgIEVGSV9ERUJVR19JTUFHRV9JTkZPLl9m aWVsZHNfID0gcGF0Y2hfdm9pZF9wX3RvX2N0eXBlKA0KKyAgICAgICAgcGF0Y2hfdHlwZSwgRUZJ X0RFQlVHX0lNQUdFX0lORk9fZmllbGRzXykNCisgICAgRUZJX0RFQlVHX0lNQUdFX0lORk9fVEFC TEVfSEVBREVSLl9maWVsZHNfID0gcGF0Y2hfdm9pZF9wX3RvX2N0eXBlKA0KKyAgICAgICAgcGF0 Y2hfdHlwZSwgRUZJX0RFQlVHX0lNQUdFX0lORk9fVEFCTEVfSEVBREVSX2ZpZWxkc18pDQorICAg IEVGSV9DT05GSUdVUkFUSU9OX1RBQkxFLl9maWVsZHNfID0gcGF0Y2hfdm9pZF9wX3RvX2N0eXBl KA0KKyAgICAgICAgcGF0Y2hfdHlwZSwgRUZJX0NPTkZJR1VSQVRJT05fVEFCTEVfZmllbGRzXykN CisgICAgRUZJX1NZU1RFTV9UQUJMRS5fZmllbGRzXyA9IHBhdGNoX3ZvaWRfcF90b19jdHlwZSgN CisgICAgICAgIHBhdGNoX3R5cGUsIEVGSV9TWVNURU1fVEFCTEVfZmllbGRzXykNCisNCisgICAg IyBwYXRjaCB1cCBhbnl0aGluZyBlbHNlIHRoYXQgbmVlZHMgdG8ga25vdyBwb2ludGVyX3dpZHRo DQorICAgIEVmaVN0YXR1c0NsYXNzKHBvaW50ZXJfd2lkdGgpDQorDQorDQorZGVmIGN0eXBlX3Rv X3N0cihjdHlwZSwgaW5kZW50PScnLCBoaWRlX2xpc3Q9W10pOg0KKyAgICAnJycNCisgICAgR2l2 ZW4gYSBjdHlwZSBvYmplY3QgcHJpbnQgb3V0IGFzIGEgc3RyaW5nIGJ5IHdhbGtpbmcgdGhlIF9m aWVsZHNfDQorICAgIGluIHRoZSBjc3RyaW5nIENsYXNzDQorICAgICAnJycNCisgICAgcmVzdWx0 ID0gJycNCisgICAgZm9yIGZpZWxkIGluIGN0eXBlLl9maWVsZHNfOg0KKyAgICAgICAgYXR0ciA9 IGdldGF0dHIoY3R5cGUsIGZpZWxkWzBdKQ0KKyAgICAgICAgdG5hbWUgPSB0eXBlKGF0dHIpLl9f bmFtZV9fDQorICAgICAgICBpZiBmaWVsZFswXSBpbiBoaWRlX2xpc3Q6DQorICAgICAgICAgICAg Y29udGludWUNCisNCisgICAgICAgIHJlc3VsdCArPSBpbmRlbnQgKyBmJ3tmaWVsZFswXX0gPSAn DQorICAgICAgICBpZiB0bmFtZSA9PSAnRUZJX0dVSUQnOg0KKyAgICAgICAgICAgIHJlc3VsdCAr PSBHdWlkTmFtZXMudG9fbmFtZShHdWlkTmFtZXMudG9fdXVpZChhdHRyKSkgKyAnXG4nDQorICAg ICAgICBlbGlmIGlzc3ViY2xhc3ModHlwZShhdHRyKSwgU3RydWN0dXJlKToNCisgICAgICAgICAg ICByZXN1bHQgKz0gZid7dG5hbWV9XG4nICsgXA0KKyAgICAgICAgICAgICAgICBjdHlwZV90b19z dHIoYXR0ciwgaW5kZW50ICsgJyAgJywgaGlkZV9saXN0KQ0KKyAgICAgICAgZWxpZiBpc2luc3Rh bmNlKGF0dHIsIGludCk6DQorICAgICAgICAgICAgcmVzdWx0ICs9IGYnMHh7YXR0cjp4fVxuJw0K KyAgICAgICAgZWxzZToNCisgICAgICAgICAgICByZXN1bHQgKz0gZid7YXR0cn1cbicNCisNCisg ICAgcmV0dXJuIHJlc3VsdA0KKw0KKw0KK2RlZiBoZXhsaW5lKGFkZHIsIGRhdGEpOg0KKyAgICBo ZXhzdHIgPSAnJw0KKyAgICBwcmludGFibGUgPSAnJw0KKyAgICBmb3IgaSBpbiByYW5nZSgwLCBs ZW4oZGF0YSkpOg0KKyAgICAgICAgaGV4c3RyICs9IGYne2RhdGFbaV06MDJ4fSAnDQorICAgICAg ICBwcmludGFibGUgKz0gY2hyKGRhdGFbaV0pIGlmIGRhdGFbaV0gPiAweDIwIGFuZCBkYXRhW2ld IDwgMHg3ZiBlbHNlICcuJw0KKyAgICByZXR1cm4gZid7YWRkcjowNHh9ICB7aGV4c3RyOjQ4c30g fHtwcmludGFibGU6c318Jw0KKw0KKw0KK2RlZiBoZXhkdW1wKGRhdGEsIGluZGVudD0nJyk6DQor ICAgIGlmIG5vdCBpc2luc3RhbmNlKGRhdGEsIGJ5dGVhcnJheSk6DQorICAgICAgICBkYXRhID0g Ynl0ZWFycmF5KGRhdGEpDQorDQorICAgIHJlc3VsdCA9ICcnDQorICAgIGZvciBpIGluIHJhbmdl KDAsIGxlbihkYXRhKSwgMTYpOg0KKyAgICAgICAgcmVzdWx0ICs9IGluZGVudCArIGhleGxpbmUo aSwgZGF0YVtpOmkrMTZdKSArICdcbicNCisgICAgcmV0dXJuIHJlc3VsdA0KKw0KKw0KK2NsYXNz IEVmaVRwbDoNCisgICAgJycnIFJldHVybiBzdHJpbmcgZm9yIEVGSV9UUEwnJycNCisNCisgICAg ZGVmIF9faW5pdF9fKHNlbGYsIHRwbCk6DQorICAgICAgICBzZWxmLnRwbCA9IHRwbA0KKw0KKyAg ICBkZWYgX19zdHJfXyhzZWxmKToNCisgICAgICAgIGlmIHNlbGYudHBsIDwgNDoNCisgICAgICAg ICAgICByZXN1bHQgPSBmJ3tzZWxmLnRwbDpkfScNCisgICAgICAgIGVsaWYgc2VsZi50cGwgPCA4 Og0KKyAgICAgICAgICAgIHJlc3VsdCA9ICJUUExfQVBQTElDQVRJT04iDQorICAgICAgICAgICAg aWYgc2VsZi50cGwgLSA0ID4gMDoNCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGYnICsge3Nl bGYudHBsIC0gNDpkfScNCisgICAgICAgIGVsaWYgc2VsZi50cGwgPCAxNjoNCisgICAgICAgICAg ICByZXN1bHQgPSAiVFBMX0NBTExCQUNLIg0KKyAgICAgICAgICAgIGlmIHNlbGYudHBsIC0gOCA+ IDA6DQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmJyArIHtzZWxmLnRwbCAtIDg6ZH0nDQor ICAgICAgICBlbGlmIHNlbGYudHBsIDwgMzE6DQorICAgICAgICAgICAgcmVzdWx0ID0gIlRQTF9O T1RJRlkiDQorICAgICAgICAgICAgaWYgc2VsZi50cGwgLSAxNiA+IDA6DQorICAgICAgICAgICAg ICAgIHJlc3VsdCArPSBmJyArIHtzZWxmLnRwbCAtIDE2OmR9Jw0KKyAgICAgICAgZWxpZiBzZWxm LnRwbCA9PSAzMToNCisgICAgICAgICAgICByZXN1bHQgPSAiVFBMX0hJR0hfTEVWRUwiDQorICAg ICAgICBlbHNlOg0KKyAgICAgICAgICAgIHJlc3VsdCA9IGYnSW52YWxpZCBUUEwgPSB7c2VsZi50 cGw6ZH0nDQorICAgICAgICByZXR1cm4gcmVzdWx0DQorDQorDQorY2xhc3MgRWZpQm9vdE1vZGU6 DQorICAgICcnJw0KKyAgICBDbGFzcyB0byByZXR1cm4gaHVtYW4gcmVhZGFibGUgc3RyaW5nIGZv ciBFRklfQk9PVF9NT0RFDQorDQorICAgIE1ldGhvZHMNCisgICAgLS0tLS0tLS0tLS0NCisgICAg dG9fc3RyKGJvb3RfbW9kZSwgZGVmYXVsdCkNCisgICAgICAgIHJldHVybiBzdHJpbmcgZm9yIGJv b3RfbW9kZSwgYW5kIHJldHVybiBkZWZhdWx0IGlmIHRoZXJlIGlzIG5vdCBhDQorICAgICAgICBt YXRjaC4NCisgICAgJycnDQorDQorICAgIEVGSV9CT09UX01PREVfZGljdCA9IHsNCisgICAgICAg IDB4MDA6ICJCT09UX1dJVEhfRlVMTF9DT05GSUdVUkFUSU9OIiwNCisgICAgICAgIDB4MDE6ICJC T09UX1dJVEhfTUlOSU1BTF9DT05GSUdVUkFUSU9OIiwNCisgICAgICAgIDB4MDI6ICJCT09UX0FT U1VNSU5HX05PX0NPTkZJR1VSQVRJT05fQ0hBTkdFUyIsDQorICAgICAgICAweDAzOiAiQk9PVF9X SVRIX0ZVTExfQ09ORklHVVJBVElPTl9QTFVTX0RJQUdOT1NUSUNTIiwNCisgICAgICAgIDB4MDQ6 ICJCT09UX1dJVEhfREVGQVVMVF9TRVRUSU5HUyIsDQorICAgICAgICAweDA1OiAiQk9PVF9PTl9T NF9SRVNVTUUiLA0KKyAgICAgICAgMHgwNjogIkJPT1RfT05fUzVfUkVTVU1FIiwNCisgICAgICAg IDB4MDc6ICJCT09UX1dJVEhfTUZHX01PREVfU0VUVElOR1MiLA0KKyAgICAgICAgMHgxMDogIkJP T1RfT05fUzJfUkVTVU1FIiwNCisgICAgICAgIDB4MTE6ICJCT09UX09OX1MzX1JFU1VNRSIsDQor ICAgICAgICAweDEyOiAiQk9PVF9PTl9GTEFTSF9VUERBVEUiLA0KKyAgICAgICAgMHgyMDogIkJP T1RfSU5fUkVDT1ZFUllfTU9ERSIsDQorICAgIH0NCisNCisgICAgZGVmIF9faW5pdF9fKHNlbGYs IGJvb3RfbW9kZSk6DQorICAgICAgICBzZWxmLl9ib290X21vZGUgPSBib290X21vZGUNCisNCisg ICAgZGVmIF9fc3RyX18oc2VsZik6DQorICAgICAgICByZXR1cm4gc2VsZi50b19zdHIoc2VsZi5f Ym9vdF9tb2RlKQ0KKw0KKyAgICBAY2xhc3NtZXRob2QNCisgICAgZGVmIHRvX3N0cihjbHMsIGJv b3RfbW9kZSwgZGVmYXVsdD0nJyk6DQorICAgICAgICByZXR1cm4gY2xzLkVGSV9CT09UX01PREVf ZGljdC5nZXQoYm9vdF9tb2RlLCBkZWZhdWx0KQ0KKw0KKw0KK2NsYXNzIEVmaVN0YXR1c0NsYXNz Og0KKyAgICAnJycNCisgICAgQ2xhc3MgdG8gZGVjb2RlIEVGSV9TVEFUVVMgdG8gYSBodW1hbiBy ZWFkYWJsZSBzdHJpbmcuIFlvdSBuZWVkIHRvDQorICAgIHBhc3MgaW4gcG9pbnRlcl93aWR0aCB0 byBnZXQgdGhlIGNvcnJldCB2YWx1ZSBzaW5jZSB0aGUgRUZJX1NUQVRVUw0KKyAgICBjb2RlIHZh bHVlcyBhcmUgZGlmZmVyZW50IGJhc2VkIG9uIHRoZSBzaXplb2YgVUlOVE4uIFRoZSBkZWZhdWx0 IGlzDQorICAgIHNpemVvZihVSU5UTikgPT0gOC4NCisNCisgICAgQXR0cmlidXRlcw0KKyAgICDi gJTigJTigJTigJTigJTigJQNCisgICAgX2RpY3RfIDogZGljdGlvbmFyeQ0KKyAgICAgICAgZGlj dGlvbmFyeSBvZiBFRklfU1RBVFVTIHRoYXQgaGFzIGJlZWQgdXBkYXRlZCB0byBtYXRjaA0KKyAg ICAgICAgcG9pbnRlcl93aWR0aC4NCisNCisgICAgTWV0aG9kcw0KKyAgICAtLS0tLS0tLS0tLQ0K KyAgICBwYXRjaF9kaWN0aW9uYXJ5KHBvaW50ZXJfd2lkdGgpDQorDQorICAgIHRvX3N0cihzdGF0 dXMsIGRlZmF1bHQpDQorICAgICcnJw0KKw0KKyAgICBfZGljdF8gPSB7fQ0KKyAgICBfRUZJX1NU QVRVU19VSU5UMzJfZGljdCA9IHsNCisgICAgICAgIDA6ICJTdWNjZXNzIiwNCisgICAgICAgIDE6 ICJXYXJuaW5nIFVua25vd24gR2x5cGgiLA0KKyAgICAgICAgMjogIldhcm5pbmcgRGVsZXRlIEZh aWx1cmUiLA0KKyAgICAgICAgMzogIldhcm5pbmcgV3JpdGUgRmFpbHVyZSIsDQorICAgICAgICA0 OiAiV2FybmluZyBCdWZmZXIgVG9vIFNtYWxsIiwNCisgICAgICAgIDU6ICJXYXJuaW5nIFN0YWxl IERhdGEiLA0KKyAgICAgICAgNjogIldhcm5naW4gRmlsZSBTeXN0ZW0iLA0KKyAgICAgICAgKDB4 MjAwMDAwMDAgfCAwKTogIldhcm5pbmcgaW50ZXJydXB0IHNvdXJjZSBwZW5kaW5nIiwNCisgICAg ICAgICgweDIwMDAwMDAwIHwgMSk6ICJXYXJuaW5nIGludGVycnVwdCBzb3VyY2UgcXVpZXNjZWQi LA0KKw0KKyAgICAgICAgKDB4ODAwMDAwMDAgfCAxKTogIkxvYWQgRXJyb3IiLA0KKyAgICAgICAg KDB4ODAwMDAwMDAgfCAyKTogIkludmFsaWQgUGFyYW1ldGVyIiwNCisgICAgICAgICgweDgwMDAw MDAwIHwgMyk6ICJVbnN1cHBvcnRlZCIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDQpOiAiQmFk IEJ1ZmZlciBTaXplIiwNCisgICAgICAgICgweDgwMDAwMDAwIHwgNSk6ICJCdWZmZXIgVG9vIFNt YWxsIiwNCisgICAgICAgICgweDgwMDAwMDAwIHwgNik6ICJOb3QgUmVhZHkiLA0KKyAgICAgICAg KDB4ODAwMDAwMDAgfCA3KTogIkRldmljZSBFcnJvciIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8 IDgpOiAiV3JpdGUgUHJvdGVjdGVkIiwNCisgICAgICAgICgweDgwMDAwMDAwIHwgOSk6ICJPdXQg b2YgUmVzb3VyY2VzIiwNCisgICAgICAgICgweDgwMDAwMDAwIHwgMTApOiAiVm9sdW1lIENvcnJ1 cHQiLA0KKyAgICAgICAgKDB4ODAwMDAwMDAgfCAxMSk6ICJWb2x1bWUgRnVsbCIsDQorICAgICAg ICAoMHg4MDAwMDAwMCB8IDEyKTogIk5vIE1lZGlhIiwNCisgICAgICAgICgweDgwMDAwMDAwIHwg MTMpOiAiTWVkaWEgY2hhbmdlZCIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDE0KTogIk5vdCBG b3VuZCIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDE1KTogIkFjY2VzcyBEZW5pZWQiLA0KKyAg ICAgICAgKDB4ODAwMDAwMDAgfCAxNik6ICJObyBSZXNwb25zZSIsDQorICAgICAgICAoMHg4MDAw MDAwMCB8IDE3KTogIk5vIG1hcHBpbmciLA0KKyAgICAgICAgKDB4ODAwMDAwMDAgfCAxOCk6ICJU aW1lIG91dCIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDE5KTogIk5vdCBzdGFydGVkIiwNCisg ICAgICAgICgweDgwMDAwMDAwIHwgMjApOiAiQWxyZWFkeSBzdGFydGVkIiwNCisgICAgICAgICgw eDgwMDAwMDAwIHwgMjEpOiAiQWJvcnRlZCIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDIyKTog IklDTVAgRXJyb3IiLA0KKyAgICAgICAgKDB4ODAwMDAwMDAgfCAyMyk6ICJURlRQIEVycm9yIiwN CisgICAgICAgICgweDgwMDAwMDAwIHwgMjQpOiAiUHJvdG9jb2wgRXJyb3IiLA0KKyAgICAgICAg KDB4ODAwMDAwMDAgfCAyNSk6ICJJbmNvbXBhdGlibGUgVmVyc2lvbiIsDQorICAgICAgICAoMHg4 MDAwMDAwMCB8IDI2KTogIlNlY3VyaXR5IFZpb2xhdGlvbiIsDQorICAgICAgICAoMHg4MDAwMDAw MCB8IDI3KTogIkNSQyBFcnJvciIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDI4KTogIkVuZCBv ZiBNZWRpYSIsDQorICAgICAgICAoMHg4MDAwMDAwMCB8IDMxKTogIkVuZCBvZiBGaWxlIiwNCisg ICAgICAgICgweDgwMDAwMDAwIHwgMzIpOiAiSW52YWxpZCBMYW5ndWFnZSIsDQorICAgICAgICAo MHg4MDAwMDAwMCB8IDMzKTogIkNvbXByb21pc2VkIERhdGEiLA0KKyAgICAgICAgKDB4ODAwMDAw MDAgfCAzNSk6ICJIVFRQIEVycm9yIiwNCisNCisgICAgICAgICgweEEwMDAwMDAwIHwgMCk6ICJJ bnRlcnJ1cHQgUGVuZGluZyIsDQorICAgIH0NCisNCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHN0 YXR1cz1Ob25lLCBwb2ludGVyX3dpZHRoPTgpOg0KKyAgICAgICAgc2VsZi5zdGF0dXMgPSBzdGF0 dXMNCisgICAgICAgICMgdGhpcyB3aWxsIGNvbnZlcnQgdG8gNjQtYml0IHZlcnNpb24gaWYgbmVl ZGVkDQorICAgICAgICBzZWxmLnBhdGNoX2RpY3Rpb25hcnkocG9pbnRlcl93aWR0aCkNCisNCisg ICAgZGVmIF9fc3RyX18oc2VsZik6DQorICAgICAgICByZXR1cm4gc2VsZi50b19zdHIoc2VsZi5z dGF0dXMpDQorDQorICAgIEBjbGFzc21ldGhvZA0KKyAgICBkZWYgdG9fc3RyKGNscywgc3RhdHVz LCBkZWZhdWx0PScnKToNCisgICAgICAgIHJldHVybiBjbHMuX2RpY3RfLmdldChzdGF0dXMsIGRl ZmF1bHQpDQorDQorICAgIEBjbGFzc21ldGhvZA0KKyAgICBkZWYgcGF0Y2hfZGljdGlvbmFyeShj bHMsIHBvaW50ZXJfd2lkdGgpOg0KKyAgICAgICAgJycnUGF0Y2ggVUlOVE4gdXBwZXIgYml0cyBs aWtlIHZhbHVlcyAnJycNCisNCisgICAgICAgIGlmIGNscy5fZGljdF86DQorICAgICAgICAgICAg IyBvbmx5IHBhdGNoIHRoZSBjbGFzcyB2YXJpYWJsZSBvbmNlDQorICAgICAgICAgICAgcmV0dXJu IEZhbHNlDQorDQorICAgICAgICBpZiBwb2ludGVyX3dpZHRoID09IDQ6DQorICAgICAgICAgICAg Y2xzLl9kaWN0ID0gY2xzLl9FRklfU1RBVFVTX1VJTlQzMl9kaWN0DQorICAgICAgICBlbGlmIHBv aW50ZXJfd2lkdGggPT0gODoNCisgICAgICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjbHMuX0VG SV9TVEFUVVNfVUlOVDMyX2RpY3QuaXRlbXMoKToNCisgICAgICAgICAgICAgICAgbWFzayA9IChr ZXkgJiAweEUwMDAwMDAwKSA8PCAzMg0KKyAgICAgICAgICAgICAgICBuZXdfa2V5ID0gKGtleSAm IDB4MUZGRkZGRkYpIHwgbWFzaw0KKyAgICAgICAgICAgICAgICBjbHMuX2RpY3RfW25ld19rZXld ID0gdmFsdWUNCisgICAgICAgICAgICByZXR1cm4gVHJ1ZQ0KKyAgICAgICAgZWxzZToNCisgICAg ICAgICAgICByZXR1cm4gRmFsc2UNCisNCisNCitjbGFzcyBHdWlkTmFtZXM6DQorICAgICcnJw0K KyAgICBDbGFzcyB0byBleHBvc2UgdGhlIEMgbmFtZXMgb2YgRUZJX0dVSUQncy4gVGhlIF9kaWN0 XyBzdGFydHMgd2l0aA0KKyAgICBjb21tb24gRUZJIFN5c3RlbSBUYWJsZSBlbnRyeSBFRklfR1VJ RCdzLiBfZGljdF8gY2FuIGdldCB1cGRhdGVkIHdpdGggdGhlDQorICAgIGJ1aWxkIGdlbmVyYXRl ZCBHdWlkLnhyZWYgZmlsZSBpZiBhIHBhdGggdG8gYSBtb2R1bGUgaXMgcGFzc2VkDQorICAgIGlu dG8gYWRkX2J1aWxkX2d1aWRfZmlsZSgpLiBJZiBzeW1ib2xzIGFyZSBsb2FkZWQgZm9yIGFueSBt b2R1bGUNCisgICAgaW4gdGhlIGJ1aWxkIHRoZSBwYXRoIHRoZSBidWlsZCBwcm9kdWN0IHNob3Vs ZCBpbXBseSB0aGUNCisgICAgcmVsYXRpdmUgbG9jYXRpb24gb2YgdGhhdCBidWlsZHMgR3VpZC54 cmVmIGZpbGUuDQorDQorICAgIEF0dHJpYnV0ZXMNCisgICAg4oCU4oCU4oCU4oCU4oCU4oCULS0t LQ0KKyAgICBfZGljdF8gOiBkaWN0aW9uYXJ5DQorICAgICAgICBkaWN0aW9uYXJ5IG9mIEVGSV9H VUlEICh1dWlkKSBzdHJpbmdzIHRvIEMgZ2xvYmFsIG5hbWVzDQorDQorICAgIE1ldGhvZHMNCisg ICAgLS0tLS0tLQ0KKyAgICB0b191dWlkKHV1aWQpDQorICAgICAgICBjb252ZXJ0IGEgaGV4IFVV SUQgc3RyaW5nIG9yIGJ5dGVhcnJheSB0byBhIHV1aWQuVVVJRA0KKyAgICB0b19uYW1lKHV1aWQp DQorICAgICAgICBjb252ZXJ0IGEgVVVJRCBzdHJpbmcgdG8gYSBDIGdsb2JhbCBjb25zdGFudCBu YW1lLg0KKyAgICB0b19ndWlkKGd1aWRfbmFtZSkNCisgICAgICAgIGNvbnZlcnQgYSBDIGdsb2Jh bCBjb25zdGFudCBFRklfR1VJRCBuYW1lIHRvIHV1aWQgaGV4IHN0cmluZy4NCisgICAgaXNfZ3Vp ZF9zdHIobmFtZSkNCisgICAgICAgbmFtZSBpcyBhIGhleCBVVUlEIHN0cmluZy4NCisgICAgICAg RXhhbXBsZTogNDkxNTJFNzctMUFEQS00NzY0LUI3QTItN0FGRUZFRDk1RThCDQorDQorICAgIHRv X2NfZ3VpZCh2YWx1ZSkNCisgICAgICAgIGNvbnZlcnQgYSB1dWlkLlVVSUQgb3IgVVVJRCBzdHJp bmcgdG8gYSBjX2d1aWQgc3RyaW5nDQorICAgICAgICAoc2VlIGlzX2NfZ3VpZCgpKQ0KKyAgICBm cm9tX2NfZ3VpZCh2YWx1ZSkNCisgICAgICAgIGNvdmVydCBhIEMgZ3VpZCBzdHJpbmcgdG8gYSBo ZXggVVVJRCBzdHJpbmcuDQorICAgIGlzX2NfZ3VpZChuYW1lKQ0KKyAgICAgICAgbmFtZSBpcyB0 aGUgQyBpbml0aWFsaXphdGlvbiB2YWx1ZSBmb3IgYW4gRUZJX0dVSUQuIEV4YW1wbGU6DQorICAg ICAgICB7IDB4NDE0ZTZiZGQsIDB4ZTQ3YiwgMHg0N2NjLCB7IDB4YjIsIDB4NDQsIDB4YmIsIDB4 NjEsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDIsIDB4MGMs IDB4ZjUsIDB4MTYgfX0NCisNCisgICAgYWRkX2J1aWxkX2d1aWRfZmlsZShtb2R1bGVfcGF0aCwg Y3VzdG9tX2ZpbGUpOg0KKyAgICAgICAgYXNzdW1lIG1vZHVsZV9wYXRoIGlzIGFuIGVkazIgYnVp bGQgcHJvZHVjdCBhbmQgbG9hZCB0aGUgR3VpZC54cmVmDQorICAgICAgICBmaWxlIGZyb20gdGhh dCBidWlsZCB0byBmaWxsIGluIF9kaWN0Xy4gSWYgeW91IGtub3cgdGhlIHBhdGggYW5kDQorICAg ICAgICBmaWxlIG5hbWUgb2YgYSBjdXN0b20gR3VpZC54cmVmICB5b3UgY2FuIHBhc3MgaXQgaW4g YXMgY3VzdG9tX2ZpbGUuDQorDQorICAgICcnJw0KKyAgICBfZGljdF8gPSB7ICAjIENvbW1vbiBF RkkgU3lzdGVtIFRhYmxlIHZhbHVlcw0KKyAgICAgICAgJzA1QUQzNEJBLTZGMDItNDIxNC05NTJF LTREQTAzOThFMkJCOSc6DQorICAgICAgICAgICAgJ2dFZmlEeGVTZXJ2aWNlc1RhYmxlR3VpZCcs DQorICAgICAgICAnNzczOUYyNEMtOTNENy0xMUQ0LTlBM0EtMDA5MDI3M0ZDMTREJzoNCisgICAg ICAgICAgICAnZ0VmaUhvYkxpc3RHdWlkJywNCisgICAgICAgICc0QzE5MDQ5Ri00MTM3LTRERDMt OUMxMC04Qjk3QTgzRkZERkEnOg0KKyAgICAgICAgICAgICdnRWZpTWVtb3J5VHlwZUluZm9ybWF0 aW9uR3VpZCcsDQorICAgICAgICAnNDkxNTJFNzctMUFEQS00NzY0LUI3QTItN0FGRUZFRDk1RThC JzoNCisgICAgICAgICAgICAnZ0VmaURlYnVnSW1hZ2VJbmZvVGFibGVHdWlkJywNCisgICAgICAg ICcwNjBDQzAyNi00QzBELTREREEtOEY0MS01OTVGRUYwMEE1MDInOg0KKyAgICAgICAgICAgICdn TWVtb3J5U3RhdHVzQ29kZVJlY29yZEd1aWQnLA0KKyAgICAgICAgJ0VCOUQyRDMxLTJEODgtMTFE My05QTE2LTAwOTAyNzNGQzE0RCc6DQorICAgICAgICAgICAgJ2dFZmlTbWJpb3NUYWJsZUd1aWQn LA0KKyAgICAgICAgJ0VCOUQyRDMwLTJEODgtMTFEMy05QTE2LTAwOTAyNzNGQzE0RCc6DQorICAg ICAgICAgICAgJ2dFZmlBY3BpMTBUYWJsZUd1aWQnLA0KKyAgICAgICAgJzg4NjhFODcxLUU0RjEt MTFEMy1CQzIyLTAwODBDNzNDODg4MSc6DQorICAgICAgICAgICAgJ2dFZmlBY3BpMjBUYWJsZUd1 aWQnLA0KKyAgICB9DQorDQorICAgIGd1aWRfZmlsZXMgPSBbXQ0KKw0KKyAgICBkZWYgX19pbml0 X18oc2VsZiwgdXVpZD1Ob25lLCBwb2ludGVyX3dpZHRoPTgpOg0KKyAgICAgICAgc2VsZi51dWlk ID0gTm9uZSBpZiB1dWlkIGlzIE5vbmUgZWxzZSBzZWxmLnRvX3V1aWQodXVpZCkNCisNCisgICAg ZGVmIF9fc3RyX18oc2VsZik6DQorICAgICAgICBpZiBzZWxmLnV1aWQgaXMgTm9uZToNCisgICAg ICAgICAgICByZXN1bHQgPSAnJw0KKyAgICAgICAgICAgIGZvciBrZXksIHZhbHVlIGluIEd1aWRO YW1lcy5fZGljdF8uaXRlbXMoKToNCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGYne2tleX06 IHt2YWx1ZX1cbicNCisgICAgICAgIGVsc2U6DQorICAgICAgICAgICAgcmVzdWx0ID0gc2VsZi50 b19uYW1lKHNlbGYudXVpZCkNCisNCisgICAgICAgIHJldHVybiByZXN1bHQNCisNCisgICAgQGNs YXNzbWV0aG9kDQorICAgIGRlZiB0b191dWlkKGNscywgb2JqKToNCisgICAgICAgIHRyeToNCisg ICAgICAgICAgICByZXR1cm4gdXVpZC5VVUlEKGJ5dGVzX2xlPWJ5dGVzKG9iaikpDQorICAgICAg ICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6DQorICAgICAgICAgICAgdHJ5Og0KKyAg ICAgICAgICAgICAgICByZXR1cm4gdXVpZC5VVUlEKGJ5dGVzX2xlPW9iaikNCisgICAgICAgICAg ICBleGNlcHQgKFZhbHVlRXJyb3IsIFR5cGVFcnJvcik6DQorICAgICAgICAgICAgICAgIHJldHVy biB1dWlkLlVVSUQob2JqKQ0KKw0KKyAgICBAY2xhc3NtZXRob2QNCisgICAgZGVmIHRvX25hbWUo Y2xzLCB1dWlkKToNCisgICAgICAgIGlmIG5vdCBpc2luc3RhbmNlKHV1aWQsIHN0cik6DQorICAg ICAgICAgICAgdXVpZCA9IHN0cih1dWlkKQ0KKyAgICAgICAgaWYgY2xzLmlzX2NfZ3VpZCh1dWlk KToNCisgICAgICAgICAgICB1dWlkID0gY2xzLmZyb21fY19ndWlkKHV1aWQpDQorICAgICAgICBy ZXR1cm4gY2xzLl9kaWN0Xy5nZXQodXVpZC51cHBlcigpLCB1dWlkLnVwcGVyKCkpDQorDQorICAg IEBjbGFzc21ldGhvZA0KKyAgICBkZWYgdG9fZ3VpZChjbHMsIGd1aWRfbmFtZSk6DQorICAgICAg ICBmb3Iga2V5LCB2YWx1ZSBpbiBjbHMuX2RpY3RfLml0ZW1zKCk6DQorICAgICAgICAgICAgaWYg Z3VpZF9uYW1lID09IHZhbHVlOg0KKyAgICAgICAgICAgICAgICByZXR1cm4ga2V5LnVwcGVyKCkN CisgICAgICAgIGVsc2U6DQorICAgICAgICAgICAgcmFpc2UgS2V5RXJyb3Ioa2V5KQ0KKw0KKyAg ICBAY2xhc3NtZXRob2QNCisgICAgZGVmIGlzX2d1aWRfc3RyKGNscywgbmFtZSk6DQorICAgICAg ICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIpOg0KKyAgICAgICAgICAgIHJldHVybiBGYWxz ZQ0KKyAgICAgICAgcmV0dXJuIG5hbWUuY291bnQoJy0nKSA+PSA0DQorDQorICAgIEBjbGFzc21l dGhvZA0KKyAgICBkZWYgdG9fY19ndWlkKGNscywgdmFsdWUpOg0KKyAgICAgICAgaWYgaXNpbnN0 YW5jZSh2YWx1ZSwgdXVpZC5VVUlEKToNCisgICAgICAgICAgICBndWlkID0gdmFsdWUNCisgICAg ICAgIGVsc2U6DQorICAgICAgICAgICAgZ3VpZCA9IHV1aWQuVVVJRCh2YWx1ZSkNCisNCisgICAg ICAgIChkYXRhMSwgZGF0YTIsIGRhdGEzLA0KKyAgICAgICAgIGRhdGE0XzAsIGRhdGE0XzEsIGRh dGE0XzIsIGRhdGE0XzMsDQorICAgICAgICAgZGF0YTRfNCwgZGF0YTRfNSwgZGF0YTRfNiwgZGF0 YTRfNykgPSBzdHJ1Y3QudW5wYWNrKA0KKyAgICAgICAgICAgICc8SUhIOEInLCBndWlkLmJ5dGVz X2xlKQ0KKyAgICAgICAgcmV0dXJuIChmJ3t7IDB4e2RhdGExOjA4WH0sIDB4e2RhdGEyOjA0WH0s IDB4e2RhdGEzOjA0WH0sICcNCisgICAgICAgICAgICAgICAgZid7eyAweHtkYXRhNF8wOjAyWH0s IDB4e2RhdGE0XzE6MDJYfSwgMHh7ZGF0YTRfMjowMlh9LCAnDQorICAgICAgICAgICAgICAgIGYn MHh7ZGF0YTRfMzowMlh9LCAweHtkYXRhNF80OjAyWH0sIDB4e2RhdGE0XzU6MDJYfSwgJw0KKyAg ICAgICAgICAgICAgICBmJzB4e2RhdGE0XzY6MDJYfSwgMHh7ZGF0YTRfNzowMlh9IH19IH19JykN CisNCisgICAgQCBjbGFzc21ldGhvZA0KKyAgICBkZWYgZnJvbV9jX2d1aWQoY2xzLCB2YWx1ZSk6 DQorICAgICAgICB0cnk6DQorICAgICAgICAgICAgaGV4ID0gW2ludCh4LCAxNikgZm9yIHggaW4g cmUuZmluZGFsbChyIltcdyddKyIsIHZhbHVlKV0NCisgICAgICAgICAgICByZXR1cm4gKGYne2hl eFswXTowOFh9LXtoZXhbMV06MDRYfS17aGV4WzJdOjA0WH0nDQorICAgICAgICAgICAgICAgICAg ICArIGYnLXtoZXhbM106MDJYfXtoZXhbNF06MDJYfS17aGV4WzVdOjAyWH17aGV4WzZdOjAyWH0n DQorICAgICAgICAgICAgICAgICAgICArIGYne2hleFs3XTowMlh9e2hleFs4XTowMlh9e2hleFs5 XTowMlh9e2hleFsxMF06MDJYfScpDQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCisgICAg ICAgICAgICByZXR1cm4gdmFsdWUNCisNCisgICAgQCBjbGFzc21ldGhvZA0KKyAgICBkZWYgaXNf Y19ndWlkKGNscywgbmFtZSk6DQorICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShuYW1lLCBzdHIp Og0KKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KKyAgICAgICAgcmV0dXJuIG5hbWUuY291bnQo J3snKSA9PSAyIGFuZCBuYW1lLmNvdW50KCd9JykgPT0gMg0KKw0KKyAgICBAIGNsYXNzbWV0aG9k DQorICAgIGRlZiBhZGRfYnVpbGRfZ3VpZF9maWxlKGNscywgbW9kdWxlX3BhdGgsIGN1c3RvbV9m aWxlPU5vbmUpOg0KKyAgICAgICAgaWYgY3VzdG9tX2ZpbGUgaXMgbm90IE5vbmU6DQorICAgICAg ICAgICAgeHJlZiA9IGN1c3RvbV9maWxlDQorICAgICAgICBlbHNlOg0KKyAgICAgICAgICAgICMg bW9kdWxlX3BhdGggd2lsbCBsb29rIGxpa2U6DQorICAgICAgICAgICAgIyA8cmVwbz4vQnVpbGQv T3ZtZlg2NC9ERUJVR19YQ09ERTUvWDY0Ly4uL0R4ZUNvcmUuZGxsDQorICAgICAgICAgICAgIyBX YWxrIGJhY2t3YXJkcyBsb29raW5nIGZvciBhIHRvb2xjaGFpbiBsaWtlIG5hbWUuDQorICAgICAg ICAgICAgIyBUaGVuIGxvb2sgZm9yIEdVSUQgZGF0YWJhc2U6DQorICAgICAgICAgICAgIyBCdWls ZC9Pdm1mWDY0Ly9ERUJVR19YQ09ERTUvRlYvR3VpZC54cmVmDQorICAgICAgICAgICAgZm9yIGkg aW4gcmV2ZXJzZWQobW9kdWxlX3BhdGguc3BsaXQob3Muc2VwKSk6DQorICAgICAgICAgICAgICAg IGlmIChpLnN0YXJ0c3dpdGgoJ0RFQlVHXycpIG9yDQorICAgICAgICAgICAgICAgICAgICBpLnN0 YXJ0c3dpdGgoJ1JFTEVBU0VfJykgb3INCisgICAgICAgICAgICAgICAgICAgICAgICBpLnN0YXJ0 c3dpdGgoJ05PT1BUXycpKToNCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkX3Jvb3QgPSBvcy5w YXRoLmpvaW4oDQorICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlX3BhdGgucnNwbGl0KGks IDEpWzBdLCBpKQ0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsNCisNCisgICAgICAgICAgICB4 cmVmID0gb3MucGF0aC5qb2luKGJ1aWxkX3Jvb3QsICdGVicsICdHdWlkLnhyZWYnKQ0KKw0KKyAg ICAgICAgaWYgeHJlZiBpbiBjbHMuZ3VpZF9maWxlczoNCisgICAgICAgICAgICAjIG9ubHkgcHJv Y2Vzc2VzIHRoZSBmaWxlIG9uZSB0aW1lDQorICAgICAgICAgICAgcmV0dXJuIFRydWUNCisNCisg ICAgICAgIHdpdGggb3Blbih4cmVmKSBhcyBmOg0KKyAgICAgICAgICAgIGNvbnRlbnQgPSBmLnJl YWRsaW5lcygpDQorICAgICAgICAgICAgY2xzLmd1aWRfZmlsZXMuYXBwZW5kKHhyZWYpDQorDQor ICAgICAgICAgICAgZm9yIGxpbmVzIGluIGNvbnRlbnQ6DQorICAgICAgICAgICAgICAgIHRyeToN CisgICAgICAgICAgICAgICAgICAgIGlmIGNscy5pc19ndWlkX3N0cihsaW5lcyk6DQorICAgICAg ICAgICAgICAgICAgICAgICAgIyBhIHJlZ2V4IHdvdWxkIGJlIG1vcmUgcGVkYW50aWMNCisgICAg ICAgICAgICAgICAgICAgICAgICB3b3JkcyA9IGxpbmVzLnNwbGl0KCkNCisgICAgICAgICAgICAg ICAgICAgICAgICBjbHMuX2RpY3RfW3dvcmRzWzBdLnVwcGVyKCldID0gd29yZHNbMV0uc3RyaXAo J1xuJykNCisgICAgICAgICAgICAgICAgZXhjZXB0IFZhbHVlRXJyb3I6DQorICAgICAgICAgICAg ICAgICAgICBwYXNzDQorDQorICAgICAgICAgICAgcmV0dXJuIFRydWUNCisNCisgICAgICAgIHJl dHVybiBGYWxzZQ0KKw0KKw0KK2NsYXNzIEVGSV9IT0JfR0VORVJJQ19IRUFERVIoTGl0dGxlRW5k aWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hvYlR5cGUnLCAg ICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ0hvYkxlbmd0aCcsICAgICAgICAgICBj X3VpbnQxNiksDQorICAgICAgICAoJ1Jlc2VydmVkJywgICAgICAgICAgICBjX3VpbnQzMikNCisg ICAgXQ0KKw0KKw0KK2NsYXNzIEVGSV9IT0JfSEFORE9GRl9JTkZPX1RBQkxFKExpdHRsZUVuZGlh blN0cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAg ICAgICAgICAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiksDQorICAgICAgICAoJ1ZlcnNpb24nLCAg ICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ0Jvb3RNb2RlJywgICAgICAgICAgICBj X3VpbnQzMiksDQorICAgICAgICAoJ0VmaU1lbW9yeVRvcCcsICAgICAgICBjX3VpbnQ2NCksDQor ICAgICAgICAoJ0VmaU1lbW9yeUJvdHRvbScsICAgICBjX3VpbnQ2NCksDQorICAgICAgICAoJ0Vm aUZyZWVNZW1vcnlUb3AnLCAgICBjX3VpbnQ2NCksDQorICAgICAgICAoJ0VmaUZyZWVNZW1vcnlC b3R0b20nLCBjX3VpbnQ2NCksDQorICAgICAgICAoJ0VmaUVuZE9mSG9iTGlzdCcsICAgICBjX3Vp bnQ2NCksDQorICAgIF0NCisNCisNCitjbGFzcyBFRklfSE9CX01FTU9SWV9BTExPQ0FUSU9OKExp dHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFk ZXInLCAgICAgICAgICAgICAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiksDQorICAgICAgICAoJ05h bWUnLCAgICAgICAgICAgICAgICBFRklfR1VJRCksDQorICAgICAgICAoJ01lbW9yeUJhc2VBZGRy ZXNzJywgICBjX3VpbnQ2NCksDQorICAgICAgICAoJ01lbW9yeUxlbmd0aCcsICAgICAgICBjX3Vp bnQ2NCksDQorICAgICAgICAoJ01lbW9yeVR5cGUnLCAgICAgICAgICBjX3VpbnQzMiksDQorICAg ICAgICAoJ1Jlc2VydmVkJywgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgIF0NCisNCisNCitj bGFzcyBFRklfSE9CX1JFU09VUkNFX0RFU0NSSVBUT1IoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToN CisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklf SE9CX0dFTkVSSUNfSEVBREVSKSwNCisgICAgICAgICgnT3duZXInLCAgICAgICAgICAgICAgIEVG SV9HVUlEKSwNCisgICAgICAgICgnUmVzb3VyY2VUeXBlJywgICAgICAgIGNfdWludDMyKSwNCisg ICAgICAgICgnUmVzb3VyY2VBdHRyaWJ1dGUnLCAgIGNfdWludDMyKSwNCisgICAgICAgICgnUGh5 c2ljYWxTdGFydCcsICAgICAgIGNfdWludDY0KSwNCisgICAgICAgICgnUmVzb3VyY2VMZW5ndGgn LCAgICAgIGNfdWludDY0KSwNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVGSV9IT0JfR1VJRF9UWVBF KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdI ZWFkZXInLCAgICAgICAgICAgICAgRUZJX0hPQl9HRU5FUklDX0hFQURFUiksDQorICAgICAgICAo J05hbWUnLCAgICAgICAgICAgICAgICBFRklfR1VJRCksDQorICAgIF0NCisNCisNCitjbGFzcyBF RklfSE9CX0ZJUk1XQVJFX1ZPTFVNRShMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfZmll bGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVGSV9IT0JfR0VORVJJ Q19IRUFERVIpLA0KKyAgICAgICAgKCdCYXNlQWRkcmVzcycsICAgICAgICAgY191aW50NjQpLA0K KyAgICAgICAgKCdMZW5ndGgnLCAgICAgICAgICAgICAgY191aW50NjQpLA0KKyAgICBdDQorDQor DQorY2xhc3MgRUZJX0hPQl9DUFUoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxk c18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfSE9CX0dFTkVSSUNf SEVBREVSKSwNCisgICAgICAgICgnU2l6ZU9mTWVtb3J5U3BhY2UnLCAgIGNfdWludDgpLA0KKyAg ICAgICAgKCdTaXplT2ZJb1NwYWNlJywgICAgICAgY191aW50OCksDQorICAgICAgICAoJ1Jlc2Vy dmVkJywgICAgICAgICAgICBBUlJBWShjX3VpbnQ4LCA2KSksDQorICAgIF0NCisNCisNCitjbGFz cyBFRklfSE9CX01FTU9SWV9QT09MKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9maWVs ZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0hPQl9HRU5FUklD X0hFQURFUiksDQorICAgIF0NCisNCisNCitjbGFzcyBFRklfSE9CX0ZJUk1XQVJFX1ZPTFVNRTIo TGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hl YWRlcicsICAgICAgICAgICAgICBFRklfSE9CX0dFTkVSSUNfSEVBREVSKSwNCisgICAgICAgICgn QmFzZUFkZHJlc3MnLCAgICAgICAgIGNfdWludDY0KSwNCisgICAgICAgICgnTGVuZ3RoJywgICAg ICAgICAgICAgIGNfdWludDY0KSwNCisgICAgICAgICgnRnZOYW1lJywgICAgICAgICAgICAgIEVG SV9HVUlEKSwNCisgICAgICAgICgnRmlsZU5hbWUnLCAgICAgICAgICAgIEVGSV9HVUlEKQ0KKyAg ICBdDQorDQorDQorY2xhc3MgRUZJX0hPQl9GSVJNV0FSRV9WT0xVTUUzKExpdHRsZUVuZGlhblN0 cnVjdHVyZSk6DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIb2JUeXBlJywgICAgICAg ICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdIb2JMZW5ndGgnLCAgICAgICAgICAgY191aW50 MTYpLA0KKyAgICAgICAgKCdSZXNlcnZlZCcsICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAg ICAgKCdCYXNlQWRkcmVzcycsICAgICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdMZW5ndGgn LCAgICAgICAgICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdBdXRoZW50aWNhdGlvblN0YXR1 cycsIGNfdWludDMyKSwNCisgICAgICAgICgnRXh0cmFjdGVkRnYnLCAgICAgICAgIGNfdWludDgp LA0KKyAgICAgICAgKCdGdk5hbWUnLCAgICAgICAgICAgICAgRUZJX0dVSUQpLA0KKyAgICAgICAg KCdGaWxlTmFtZScsICAgICAgICAgICAgRUZJX0dVSUQpLA0KKyAgICBdDQorDQorDQorY2xhc3Mg RUZJX0hPQl9VRUZJX0NBUFNVTEUoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxk c18gPSBbDQorICAgICAgICAoJ0hvYlR5cGUnLCAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAg ICAgICAoJ0hvYkxlbmd0aCcsICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ1Jlc2Vy dmVkJywgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ0Jhc2VBZGRyZXNzJywgICAg ICAgICBjX3VpbnQ2NCksDQorICAgICAgICAoJ0xlbmd0aCcsICAgICAgICAgICAgICBjX3VpbnQ2 NCksDQorICAgIF0NCisNCisNCitjbGFzcyBFZmlIb2I6DQorICAgICcnJw0KKyAgICBQYXJzZSBF RkkgRGV2aWNlIFBhdGhzIGJhc2VkIG9uIHRoZSBlZGsyIEMgU3RydWN0dXJlcyBkZWZpbmVkIGFi b3ZlLg0KKyAgICBJbiB0aGUgY29udGV4dCBvZiB0aGlzIGNsYXNzIHZlcmJvc2UgbWVhbnMgaGV4 ZHVtcCBleHRyYSBkYXRhLg0KKw0KKw0KKyAgICBBdHRyaWJ1dGVzDQorICAgIOKAlOKAlOKAlOKA lOKAlOKAlA0KKyAgICBIb2IgOiBsaXN0DQorICAgICAgICBMaXN0IG9mIEhPQnMuIEVhY2ggZW50 cnkgY29udGFpbnMgdGhlIG5hbWUsIEhPQiB0eXBlLCBIT0IgbGVuZ3RoLA0KKyAgICAgICAgdGhl IGN0eXBlIHN0cnVjdCBmb3IgdGhlIEhPQiwgYW5kIGFueSBleHRyYSBkYXRhLg0KKw0KKyAgICBN ZXRob2RzDQorICAgIC0tLS0tLS0tLS0tDQorICAgIGdldF9ob2JfYnlfdHlwZShob2JfdHlwZSkN CisgICAgICAgIHJldHVybiBzdHJpbmcgdGhhdCBkZWNvZGVzIHRoZSBIT0JzIG9mIGhvYl90eXBl LiBJZiBob2JfdHlwZSBpcw0KKyAgICAgICAgTm9uZSB0aGVuIHJldHVybiBhbGwgSE9Ccy4NCisg ICAgJycnDQorDQorICAgIEhvYiA9IFtdDQorICAgIHZlcmJvc2UgPSBGYWxzZQ0KKw0KKyAgICBo b2JfZGljdCA9IHsNCisgICAgICAgIDE6IEVGSV9IT0JfSEFORE9GRl9JTkZPX1RBQkxFLA0KKyAg ICAgICAgMjogRUZJX0hPQl9NRU1PUllfQUxMT0NBVElPTiwNCisgICAgICAgIDM6IEVGSV9IT0Jf UkVTT1VSQ0VfREVTQ1JJUFRPUiwNCisgICAgICAgIDQ6IEVGSV9IT0JfR1VJRF9UWVBFLA0KKyAg ICAgICAgNTogRUZJX0hPQl9GSVJNV0FSRV9WT0xVTUUsDQorICAgICAgICA2OiBFRklfSE9CX0NQ VSwNCisgICAgICAgIDc6IEVGSV9IT0JfTUVNT1JZX1BPT0wsDQorICAgICAgICA5OiBFRklfSE9C X0ZJUk1XQVJFX1ZPTFVNRTIsDQorICAgICAgICAweGI6IEVGSV9IT0JfVUVGSV9DQVBTVUxFLA0K KyAgICAgICAgMHhjOiBFRklfSE9CX0ZJUk1XQVJFX1ZPTFVNRTMsDQorICAgICAgICAweGZmZmY6 IEVGSV9IT0JfR0VORVJJQ19IRUFERVIsDQorICAgIH0NCisNCisgICAgZGVmIF9faW5pdF9fKHNl bGYsIGZpbGUsIGFkZHJlc3M9Tm9uZSwgdmVyYm9zZT1GYWxzZSwgY291bnQ9MTAwMCk6DQorICAg ICAgICBzZWxmLl9maWxlID0gZmlsZQ0KKyAgICAgICAgRWZpSG9iLnZlcmJvc2UgPSB2ZXJib3Nl DQorDQorICAgICAgICBpZiBsZW4oRWZpSG9iLkhvYikgIT0gMCBhbmQgYWRkcmVzcyBpcyBOb25l Og0KKyAgICAgICAgICAgIHJldHVybg0KKw0KKyAgICAgICAgaWYgYWRkcmVzcyBpcyBub3QgTm9u ZToNCisgICAgICAgICAgICBob2JfcHRyID0gYWRkcmVzcw0KKyAgICAgICAgZWxzZToNCisgICAg ICAgICAgICBob2JfcHRyID0gRWZpQ29uZmlndXJhdGlvblRhYmxlKGZpbGUpLkdldENvbmZpZ1Rh YmxlKA0KKyAgICAgICAgICAgICAgICAnNzczOUYyNEMtOTNENy0xMUQ0LTlBM0EtMDA5MDI3M0ZD MTREJykNCisNCisgICAgICAgIHNlbGYucmVhZF9ob2JzKGhvYl9wdHIpDQorDQorICAgIEAgY2xh c3NtZXRob2QNCisgICAgZGVmIF9fc3RyX18oY2xzKToNCisgICAgICAgIHJldHVybiBjbHMuZ2V0 X2hvYl9ieV90eXBlKE5vbmUpDQorDQorICAgIEAgY2xhc3NtZXRob2QNCisgICAgZGVmIGdldF9o b2JfYnlfdHlwZShjbHMsIGhvYl90eXBlKToNCisgICAgICAgIHJlc3VsdCA9ICIiDQorICAgICAg ICBmb3IgKE5hbWUsIEhvYlR5cGUsIEhvYkxlbiwgY2hvYiwgZXh0cmEpIGluIGNscy5Ib2I6DQor ICAgICAgICAgICAgaWYgaG9iX3R5cGUgaXMgbm90IE5vbmU6DQorICAgICAgICAgICAgICAgIGlm IGhvYl90eXBlICE9IEhvYlR5cGU6DQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KKw0K KyAgICAgICAgICAgIHJlc3VsdCArPSBmJ1R5cGU6IHtOYW1lOnN9ICgweHtIb2JUeXBlOjAxeH0p IExlbjogMHh7SG9iTGVuOjAzeH1cbicNCisgICAgICAgICAgICByZXN1bHQgKz0gY3R5cGVfdG9f c3RyKGNob2IsICcgICcsIFsnUmVzZXJ2ZWQnXSkNCisgICAgICAgICAgICBpZiBjbHMudmVyYm9z ZToNCisgICAgICAgICAgICAgICAgaWYgZXh0cmEgaXMgbm90IE5vbmU6DQorICAgICAgICAgICAg ICAgICAgICByZXN1bHQgKz0gaGV4ZHVtcChleHRyYSwgJyAgICAnKQ0KKw0KKyAgICAgICAgcmV0 dXJuIHJlc3VsdA0KKw0KKyAgICBkZWYgcmVhZF9ob2JzKHNlbGYsIGhvYl9wdHIsIGNvdW50PTEw MDApOg0KKyAgICAgICAgaWYgaG9iX3B0ciBpcyBOb25lOg0KKyAgICAgICAgICAgIHJldHVybg0K Kw0KKyAgICAgICAgdHJ5Og0KKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGNvdW50KTogICMg d2hpbGUgVHJ1ZQ0KKyAgICAgICAgICAgICAgICBoZHIsIF8gPSBzZWxmLl9jdHlwZV9yZWFkX2V4 KEVGSV9IT0JfR0VORVJJQ19IRUFERVIsIGhvYl9wdHIpDQorICAgICAgICAgICAgICAgIGlmIGhk ci5Ib2JUeXBlID09IDB4ZmZmZjoNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrDQorDQorICAg ICAgICAgICAgICAgIHR5cGVfc3RyID0gc2VsZi5ob2JfZGljdC5nZXQoDQorICAgICAgICAgICAg ICAgICAgICBoZHIuSG9iVHlwZSwgRUZJX0hPQl9HRU5FUklDX0hFQURFUikNCisgICAgICAgICAg ICAgICAgaG9iLCBleHRyYSA9IHNlbGYuX2N0eXBlX3JlYWRfZXgoDQorICAgICAgICAgICAgICAg ICAgICB0eXBlX3N0ciwgaG9iX3B0ciwgaGRyLkhvYkxlbmd0aCkNCisgICAgICAgICAgICAgICAg RWZpSG9iLkhvYi5hcHBlbmQoDQorICAgICAgICAgICAgICAgICAgICAodHlwZShob2IpLl9fbmFt ZV9fLA0KKyAgICAgICAgICAgICAgICAgICAgIGhkci5Ib2JUeXBlLA0KKyAgICAgICAgICAgICAg ICAgICAgIGhkci5Ib2JMZW5ndGgsDQorICAgICAgICAgICAgICAgICAgICAgaG9iLA0KKyAgICAg ICAgICAgICAgICAgICAgIGV4dHJhKSkNCisgICAgICAgICAgICAgICAgaG9iX3B0ciArPSBoZHIu SG9iTGVuZ3RoDQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCisgICAgICAgICAgICBwYXNz DQorDQorICAgIGRlZiBfY3R5cGVfcmVhZF9leChzZWxmLCBjdHlwZV9zdHJ1Y3QsIG9mZnNldD0w LCByc2l6ZT1Ob25lKToNCisgICAgICAgIGlmIG9mZnNldCAhPSAwOg0KKyAgICAgICAgICAgIHNl bGYuX2ZpbGUuc2VlayhvZmZzZXQpDQorDQorICAgICAgICB0eXBlX3NpemUgPSBzaXplb2YoY3R5 cGVfc3RydWN0KQ0KKyAgICAgICAgc2l6ZSA9IHJzaXplIGlmIHJzaXplIGVsc2UgdHlwZV9zaXpl DQorICAgICAgICBkYXRhID0gc2VsZi5fZmlsZS5yZWFkKHNpemUpDQorICAgICAgICBjZGF0YSA9 IGN0eXBlX3N0cnVjdC5mcm9tX2J1ZmZlcihieXRlYXJyYXkoZGF0YSkpDQorDQorICAgICAgICBp ZiBzaXplID4gdHlwZV9zaXplOg0KKyAgICAgICAgICAgIHJldHVybiBjZGF0YSwgZGF0YVt0eXBl X3NpemU6XQ0KKyAgICAgICAgZWxzZToNCisgICAgICAgICAgICByZXR1cm4gY2RhdGEsIE5vbmUN CisNCisNCitjbGFzcyBFRklfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisg ICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnVHlwZScsICAgICAg ICAgICAgICAgIGNfdWludDgpLA0KKyAgICAgICAgKCdTdWJUeXBlJywgICAgICAgICAgICAgY191 aW50OCksDQorDQorICAgICAgICAjIFVJTlQ4IExlbmd0aFsyXQ0KKyAgICAgICAgIyBDaGVhdCBh bmQgdXNlIGNfdWludDE2IHNpbmNlIHdlIGRvbid0IGNhcmUgYWJvdXQgYWxpZ25tZW50DQorICAg ICAgICAoJ0xlbmd0aCcsICAgICAgICAgICAgICBjX3VpbnQxNikNCisgICAgXQ0KKw0KKw0KK2Ns YXNzIFBDSV9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18g PSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAg RUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnRnVuY3Rpb24nLCAgICAgICAgICAgIGNfdWlu dDgpLA0KKyAgICAgICAgKCdEZXZpY2UnLCAgICAgICAgICAgICAgY191aW50OCkNCisgICAgXQ0K Kw0KKw0KK2NsYXNzIFBDQ0FSRF9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0K KyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAg ICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnRnVuY3Rpb25OdW1iZXIn LCAgICAgIGNfdWludDgpLA0KKyAgICBdDQorDQorDQorY2xhc3MgTUVNTUFQX0RFVklDRV9QQVRI KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18g PSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0K KyAgICAgICAgKCdTdGFydGluZ0FkZHJlc3MnLCAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdF bmRpbmdBZGRyZXNzJywgICAgICAgY191aW50NjQpLA0KKyAgICBdDQorDQorDQorY2xhc3MgVkVO RE9SX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDEN CisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklf REVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdHdWlkJywgICAgICAgICAgICAgICAgRUZJX0dVSUQp LA0KKyAgICBdDQorDQorDQorY2xhc3MgQ09OVFJPTExFUl9ERVZJQ0VfUEFUSChMaXR0bGVFbmRp YW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAg ICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgn Q29udHJvbGxlck51bWJlcicsICAgIGNfdWludDMyKSwNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEJN Q19ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQor ICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RF VklDRV9QQVRIKSwNCisgICAgICAgICgnSW50ZXJmYWNlVHlwZScsICAgICAgIGNfdWludDgpLA0K KyAgICAgICAgKCdCYXNlQWRkcmVzcycsICAgICAgICAgQVJSQVkoY191aW50OCwgOCkpLA0KKyAg ICBdDQorDQorDQorY2xhc3MgQkJTX0JCU19ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1 cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFk ZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnRGV2aWNlVHlw ZScsICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnU3RhdHVzRmxhZycsICAgICAgICAg IGNfdWludDE2KQ0KKyAgICBdDQorDQorDQorY2xhc3MgQUNQSV9ISURfREVWSUNFX1BBVEgoTGl0 dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsN CisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAg ICAgICAoJ0hJRCcsICAgICAgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoJ1VJRCcs ICAgICAgICAgICAgICAgICBjX3VpbnQzMikNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEFDUElfRVhU RU5ERURfSElEX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNr XyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAg ICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdISUQnLCAgICAgICAgICAgICAgICAgY191 aW50MzIpLA0KKyAgICAgICAgKCdVSUQnLCAgICAgICAgICAgICAgICAgY191aW50MzIpLA0KKyAg ICAgICAgKCdDSUQnLCAgICAgICAgICAgICAgICAgY191aW50MzIpDQorICAgIF0NCisNCisNCitj bGFzcyBBQ1BJX0FEUl9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBf cGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAg ICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnQVJEJywgICAgICAgICAgICAgICAg IGNfdWludDMyKQ0KKyAgICBdDQorDQorDQorY2xhc3MgQUNQSV9OVkRJTU1fREVWSUNFX1BBVEgo TGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9 IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQor ICAgICAgICAoJ05GSVREZXZpY2VIYW5kbGUnLCAgICBjX3VpbnQzMikNCisgICAgXQ0KKw0KKw0K K2NsYXNzIEFUQVBJX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9w YWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAg ICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJQcmltYXJ5U2Vjb25kYXJ5IiwgICAg Y191aW50OCksDQorICAgICAgICAoIlNsYXZlTWFzdGVyIiwgICAgICAgICBjX3VpbnQ4KSwNCisg ICAgICAgICgiTHVuIiwgICAgICAgICAgICAgICAgIGNfdWludDE2KQ0KKyAgICBdDQorDQorDQor Y2xhc3MgU0NTSV9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFj a18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAg ICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgiUHVuIiwgICAgICAgICAgICAgICAgIGNf dWludDE2KSwNCisgICAgICAgICgiTHVuIiwgICAgICAgICAgICAgICAgIGNfdWludDE2KQ0KKyAg ICBdDQorDQorDQorY2xhc3MgRklCUkVDSEFOTkVMX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0 cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAo J0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJSZXNl cnZlZCIsICAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCJXV04iLCAgICAgICAgICAg ICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCJMdW4iLCAgICAgICAgICAgICAgICAgY191aW50 NjQpDQorICAgIF0NCisNCisNCitjbGFzcyBGMTM5NF9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5T dHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAg KCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgiUmVz ZXJ2ZWQiLCAgICAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgiR3VpZCIsICAgICAgICAg ICAgICAgIGNfdWludDY0KQ0KKyAgICBdDQorDQorDQorY2xhc3MgVVNCX0RFVklDRV9QQVRIKExp dHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBb DQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAg ICAgICAgKCJQYXJlbnRQb3J0TnVtYmVyIiwgICAgY191aW50OCksDQorICAgICAgICAoIkludGVy ZmFjZU51bWJlciIsICAgICBjX3VpbnQ4KSwNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEkyT19ERVZJ Q0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9m aWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9Q QVRIKSwNCisgICAgICAgICgiVGlkIiwgICAgICAgICAgICAgICAgIGNfdWludDMyKQ0KKyAgICBd DQorDQorDQorY2xhc3MgSU5GSU5JQkFORF9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1 cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFk ZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgiUmVzb3VyY2VG bGFncyIsICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgiUG9ydEdpZCIsICAgICAgICAgICAg IEFSUkFZKGNfdWludDgsIDE2KSksDQorICAgICAgICAoIlNlcnZpY2VJZCIsICAgICAgICAgICBj X3VpbnQ2NCksDQorICAgICAgICAoIlRhcmdldFBvcnRJZCIsICAgICAgICBjX3VpbnQ2NCksDQor ICAgICAgICAoIkRldmljZUlkIiwgICAgICAgICAgICBjX3VpbnQ2NCkNCisgICAgXQ0KKw0KKw0K K2NsYXNzIFVBUlRfRkxPV19DT05UUk9MX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVy ZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRl cicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJHdWlkIiwgICAg ICAgICAgICAgICAgRUZJX0dVSUQpLA0KKyAgICAgICAgKCJGbG93Q29udHJvbE1hcCIsICAgICAg Y191aW50MzIpDQorICAgIF0NCisNCisNCitjbGFzcyBTQVNfREVWSUNFX1BBVEgoTGl0dGxlRW5k aWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAg ICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAo Ikd1aWQiLCAgICAgICAgICAgICAgICBFRklfR1VJRCksDQorICAgICAgICAoIlJlc2VydmVkIiwg ICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAgICAoIlNhc0FkZHJlc3MiLCAgICAgICAgICBj X3VpbnQ2NCksDQorICAgICAgICAoIkx1biIsICAgICAgICAgICAgICAgICBjX3VpbnQ2NCksDQor ICAgICAgICAoIkRldmljZVRvcG9sb2d5IiwgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoIlJl bGF0aXZlVGFyZ2V0UG9ydCIsICBjX3VpbnQxNikNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVGSV9N QUNfQUREUkVTUyhMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAg IF9maWVsZHNfID0gWw0KKyAgICAgICAgKCJBZGRyIiwgICAgICAgICAgICAgQVJSQVkoY191aW50 OCwgMzIpKSwNCisgICAgXQ0KKw0KKw0KK2NsYXNzIE1BQ19BRERSX0RFVklDRV9QQVRIKExpdHRs ZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQor ICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAg ICAgKCdNYWNBZGRyZXNzJywgICAgICAgICAgRUZJX01BQ19BRERSRVNTKSwNCisgICAgICAgICgn SWZUeXBlJywgICAgICAgICAgICAgIGNfdWludDgpDQorICAgIF0NCisNCisNCitjbGFzcyBJUHY0 X0FERFJFU1MoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX2ZpZWxkc18gPSBbDQorICAg ICAgICAoIkFkZHIiLCAgICAgICAgICAgICBBUlJBWShjX3VpbnQ4LCA0KSksDQorICAgIF0NCisN CisNCitjbGFzcyBJUHY0X0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAg IF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAg ICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdMb2NhbElwQWRkcmVzcycsICAg ICAgSVB2NF9BRERSRVNTKSwNCisgICAgICAgICgnUmVtb3RlSXBBZGRyZXNzJywgICAgIElQdjRf QUREUkVTUyksDQorICAgICAgICAoJ0xvY2FsUG9ydCcsICAgICAgICAgICBjX3VpbnQxNiksDQor ICAgICAgICAoJ1JlbW90ZVBvcnQnLCAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ1By b3RvY29sJywgICAgICAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ1N0YXRpY0lwQWRkcmVz cycsICAgICBjX3VpbnQ4KSwNCisgICAgICAgICgnR2F0ZXdheUlwQWRkcmVzcycsICAgIElQdjRf QUREUkVTUyksDQorICAgICAgICAoJ1N1Ym5ldE1hc2snLCAgICAgICAgICBJUHY0X0FERFJFU1Mp DQorICAgIF0NCisNCisNCitjbGFzcyBJUHY2X0FERFJFU1MoTGl0dGxlRW5kaWFuU3RydWN0dXJl KToNCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoIkFkZHIiLCAgICAgICAgICAgICBBUlJB WShjX3VpbnQ4LCAxNikpLA0KKyAgICBdDQorDQorDQorY2xhc3MgSVB2Nl9ERVZJQ0VfUEFUSChM aXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0g Ww0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisg ICAgICAgICgnTG9jYWxJcEFkZHJlc3MnLCAgICAgIElQdjZfQUREUkVTUyksDQorICAgICAgICAo J1JlbW90ZUlwQWRkcmVzcycsICAgICBJUHY2X0FERFJFU1MpLA0KKyAgICAgICAgKCdMb2NhbFBv cnQnLCAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAgICAgKCdSZW1vdGVQb3J0JywgICAgICAg ICAgY191aW50MTYpLA0KKyAgICAgICAgKCdQcm90b2NvbCcsICAgICAgICAgICAgY191aW50MTYp LA0KKyAgICAgICAgKCdJcEFkZHJlc3NPcmlnaW4nLCAgICAgY191aW50OCksDQorICAgICAgICAo J1ByZWZpeExlbmd0aCcsICAgICAgICBjX3VpbnQ4KSwNCisgICAgICAgICgnR2F0ZXdheUlwQWRk cmVzcycsICAgIElQdjZfQUREUkVTUykNCisgICAgXQ0KKw0KKw0KK2NsYXNzIFVBUlRfREVWSUNF X1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmll bGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFU SCksDQorICAgICAgICAoJ1Jlc2VydmVkJywgICAgICAgICAgICBjX3VpbnQzMiksDQorICAgICAg ICAoJ0JhdWRSYXRlJywgICAgICAgICAgICBjX3VpbnQ2NCksDQorICAgICAgICAoJ0RhdGFCaXRz JywgICAgICAgICAgICBjX3VpbnQ4KSwNCisgICAgICAgICgnUGFyaXR5JywgICAgICAgICAgICAg IGNfdWludDgpLA0KKyAgICAgICAgKCdTdG9wQml0cycsICAgICAgICAgICAgY191aW50OCkNCisg ICAgXQ0KKw0KKw0KK2NsYXNzIFVTQl9DTEFTU19ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1 Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdI ZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnVmVuZG9y SWQnLCAgICAgICAgICAgIGNfdWludDE2KSwNCisgICAgICAgICgnUHJvZHVjdElkJywgICAgICAg ICAgIGNfdWludDE2KSwNCisgICAgICAgICgnRGV2aWNlQ2xhc3MnLCAgICAgICAgIGNfdWludDgp LA0KKyAgICAgICAgKCdEZXZpY2VDU2pibGFzcycsICAgICAgY191aW50OCksDQorICAgICAgICAo J0RldmljZVByb3RvY29sJywgICAgICBjX3VpbnQ4KSwNCisgICAgXQ0KKw0KKw0KK2NsYXNzIFVT Ql9XV0lEX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9 IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBF RklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdJbnRlcmZhY2VOdW1iZXInLCAgICAgY191aW50 MTYpLA0KKyAgICAgICAgKCdWZW5kb3JJZCcsICAgICAgICAgICAgY191aW50MTYpLA0KKyAgICAg ICAgKCdQcm9kdWN0SWQnLCAgICAgICAgICAgY191aW50MTYpLA0KKyAgICBdDQorDQorDQorY2xh c3MgREVWSUNFX0xPR0lDQUxfVU5JVF9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUp Og0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXIn LCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnTHVuJywgICAgICAg ICAgICAgICAgIGNfdWludDgpDQorICAgIF0NCisNCisNCitjbGFzcyBTQVRBX0RFVklDRV9QQVRI KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18g PSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICAgICAgICAgIEVGSV9ERVZJQ0Vf UEFUSCksDQorICAgICAgICAoJ0hCQVBvcnROdW1iZXInLCAgICAgICAgICAgICAgIGNfdWludDE2 KSwNCisgICAgICAgICgnUG9ydE11bHRpcGxpZXJQb3J0TnVtYmVyJywgICAgY191aW50MTYpLA0K KyAgICAgICAgKCdMdW4nLCAgICAgICAgICAgICAgICAgICAgICAgICBjX3VpbnQxNiksDQorICAg IF0NCisNCisNCitjbGFzcyBJU0NTSV9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUp Og0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXIn LCAgICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdOZXR3b3JrUHJv dG9jb2wnLCAgICAgICBjX3VpbnQxNiksDQorICAgICAgICAoJ0xvZ2luT3B0aW9uJywgICAgICAg ICAgIGNfdWludDE2KSwNCisgICAgICAgICgnTHVuJywgICAgICAgICAgICAgICAgICAgY191aW50 NjQpLA0KKyAgICAgICAgKCdUYXJnZXRQb3J0YWxHcm91cFRhZycsICBjX3VpbnQxNiksDQorICAg IF0NCisNCisNCitjbGFzcyBWTEFOX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6 DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcics ICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJWbGFuZElkIiwgICAg ICAgICAgICAgY191aW50MTYpDQorICAgIF0NCisNCisNCitjbGFzcyBGSUJSRUNIQU5ORUxFWF9E RVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAg IF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklD RV9QQVRIKSwNCisgICAgICAgICgiUmVzZXJ2ZWQiLCAgICAgICAgICAgIGNfdWludDE2KSwNCisg ICAgICAgICgiV1dOIiwgICAgICAgICAgICAgICAgIEFSUkFZKGNfdWludDgsIDgpKSwNCisgICAg ICAgICgiTHVuIiwgICAgICAgICAgICAgICAgIEFSUkFZKGNfdWludDgsIDgpKSwNCisgICAgXQ0K Kw0KKw0KK2NsYXNzIFNBU0VYX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQor ICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAg ICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJTYXNBZGRyZXNzIiwgICAg ICAgICAgQVJSQVkoY191aW50OCwgOCkpLA0KKyAgICAgICAgKCJMdW4iLCAgICAgICAgICAgICAg ICAgQVJSQVkoY191aW50OCwgOCkpLA0KKyAgICAgICAgKCJEZXZpY2VUb3BvbG9neSIsICAgICAg Y191aW50MTYpLA0KKyAgICAgICAgKCJSZWxhdGl2ZVRhcmdldFBvcnQiLCAgY191aW50MTYpDQor ICAgIF0NCisNCisNCitjbGFzcyBOVk1FX05BTUVTUEFDRV9ERVZJQ0VfUEFUSChMaXR0bGVFbmRp YW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0gWw0KKyAgICAg ICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisgICAgICAgICgi TmFtZXNwYWNlSWQiLCAgICAgICAgIGNfdWludDMyKSwNCisgICAgICAgICgiTmFtZXNwYWNlVXVp ZCIsICAgICAgIGNfdWludDY0KQ0KKyAgICBdDQorDQorDQorY2xhc3MgRE5TX0RFVklDRV9QQVRI KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18g PSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0K KyAgICAgICAgKCJJc0lQdjYiLCAgICAgICAgICAgICAgY191aW50OCksDQorICAgICAgICAoIkRu c1NlcnZlcklwIiwgICAgICAgICBJUHY2X0FERFJFU1MpDQorDQorICAgIF0NCisNCisNCitjbGFz cyBVRlNfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0g MQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAgICAgIEVG SV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoIlB1biIsICAgICAgICAgICAgICAgICBjX3VpbnQ4 KSwNCisgICAgICAgICgiTHVuIiwgICAgICAgICAgICAgICAgIGNfdWludDgpLA0KKyAgICBdDQor DQorDQorY2xhc3MgU0RfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAg X3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAg ICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoIlNsb3ROdW1iZXIiLCAgICAgICAg ICBjX3VpbnQ4KQ0KKyAgICBdDQorDQorDQorY2xhc3MgQkxVRVRPT1RIX0FERFJFU1MoTGl0dGxl RW5kaWFuU3RydWN0dXJlKToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisg ICAgICAgICgiQWRkcmVzcyIsICAgICAgICAgICAgIEFSUkFZKGNfdWludDgsIDYpKQ0KKyAgICBd DQorDQorDQorY2xhc3MgQkxVRVRPT1RIX0xFX0FERFJFU1MoTGl0dGxlRW5kaWFuU3RydWN0dXJl KToNCisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgiRm9ybWF0 IiwgICAgICAgICAgY191aW50OCksDQorICAgICAgICAoIkNsYXNzIiwgICAgICAgICAgIGNfdWlu dDE2KQ0KKyAgICBdDQorDQorDQorY2xhc3MgQkxVRVRPT1RIX0RFVklDRV9QQVRIKExpdHRsZUVu ZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAg ICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAg KCJCRF9BRERSIiwgICAgICAgICAgICAgQkxVRVRPT1RIX0FERFJFU1MpDQorICAgIF0NCisNCisN CitjbGFzcyBXSUZJX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9w YWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAg ICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCJTU0lkIiwgICAgICAgICAgICAgICAg QVJSQVkoY191aW50OCwgMzIpKQ0KKyAgICBdDQorDQorDQorY2xhc3MgRU1NQ19ERVZJQ0VfUEFU SChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNf ID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwN CisgICAgICAgICgiU2xvdE51bWJlciIsICAgICAgICAgIGNfdWludDgpDQorICAgIF0NCisNCisN CitjbGFzcyBCTFVFVE9PVEhfTEVfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToN CisgICAgX3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywg ICAgICAgICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoIkJEX0FERFIiLCAgICAg ICAgICAgICBCTFVFVE9PVEhfTEVfQUREUkVTUykNCisgICAgXQ0KKw0KKw0KK2NsYXNzIE5WRElN TV9OQU1FU1BBQ0VfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3Bh Y2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAg ICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoIlV1aWQiLCAgICAgICAgICAgICAgICBF RklfR1VJRCkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIFJFU1RfU0VSVklDRV9ERVZJQ0VfUEFUSChM aXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAgIF9maWVsZHNfID0g Ww0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklDRV9QQVRIKSwNCisg ICAgICAgICgiUkVTVFNlcnZpY2UiLCAgICAgICAgIGNfdWludDgpLA0KKyAgICAgICAgKCJBY2Nl c3NNb2RlIiwgICAgICAgICAgY191aW50OCkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIFJFU1RfVkVO RE9SX1NFUlZJQ0VfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAgX3Bh Y2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAgICAg ICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoIlJFU1RTZXJ2aWNlIiwgICAgICAgICBj X3VpbnQ4KSwNCisgICAgICAgICgiQWNjZXNzTW9kZSIsICAgICAgICAgIGNfdWludDgpLA0KKyAg ICAgICAgKCJHdWlkIiwgICAgICAgICAgICAgICAgRUZJX0dVSUQpLA0KKyAgICBdDQorDQorDQor Y2xhc3MgSEFSRERSSVZFX0RFVklDRV9QQVRIKExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAg IF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAg ICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAgICAgKCdQYXJ0aXRpb25OdW1iZXInLCAg ICAgY191aW50MzIpLA0KKyAgICAgICAgKCdQYXJ0aXRpb25TdGFydCcsICAgICAgY191aW50NjQp LA0KKyAgICAgICAgKCdQYXJ0aXRpb25TaXplJywgICAgICAgY191aW50NjQpLA0KKyAgICAgICAg KCdTaWduYXR1cmUnLCAgICAgICAgICAgQVJSQVkoY191aW50OCwgMTYpKSwNCisgICAgICAgICgn TUJSVHlwZScsICAgICAgICAgICAgIGNfdWludDgpLA0KKyAgICAgICAgKCdTaWduYXR1cmVUeXBl JywgICAgICAgY191aW50OCkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIENEUk9NX0RFVklDRV9QQVRI KExpdHRsZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18g PSBbDQorICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0K KyAgICAgICAgKCdCb290RW50cnknLCAgICAgICAgICAgY191aW50MzIpLA0KKyAgICAgICAgKCdQ YXJ0aXRpb25TdGFydCcsICAgICAgY191aW50NjQpLA0KKyAgICAgICAgKCdQYXJ0aXRpb25TaXpl JywgICAgICAgY191aW50NjQpDQorICAgIF0NCisNCisNCitjbGFzcyBNRURJQV9QUk9UT0NPTF9E RVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAxDQorICAg IF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJX0RFVklD RV9QQVRIKSwNCisgICAgICAgICgnUHJvdG9jb2wnLCAgICAgICAgICAgIEVGSV9HVUlEKQ0KKyAg ICBdDQorDQorDQorY2xhc3MgTUVESUFfRldfVk9MX0ZJTEVQQVRIX0RFVklDRV9QQVRIKExpdHRs ZUVuZGlhblN0cnVjdHVyZSk6DQorICAgIF9wYWNrXyA9IDENCisgICAgX2ZpZWxkc18gPSBbDQor ICAgICAgICAoJ0hlYWRlcicsICAgICAgICAgICAgICBFRklfREVWSUNFX1BBVEgpLA0KKyAgICAg ICAgKCdGdkZpbGVOYW1lJywgICAgICAgICAgRUZJX0dVSUQpDQorICAgIF0NCisNCisNCitjbGFz cyBNRURJQV9GV19WT0xfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAg X3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAg ICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoJ0Z2TmFtZScsICAgICAgICAgICAg ICBFRklfR1VJRCkNCisgICAgXQ0KKw0KKw0KK2NsYXNzIE1FRElBX1JFTEFUSVZFX09GRlNFVF9S QU5HRV9ERVZJQ0VfUEFUSChMaXR0bGVFbmRpYW5TdHJ1Y3R1cmUpOg0KKyAgICBfcGFja18gPSAx DQorICAgIF9maWVsZHNfID0gWw0KKyAgICAgICAgKCdIZWFkZXInLCAgICAgICAgICAgICAgRUZJ X0RFVklDRV9QQVRIKSwNCisgICAgICAgICgnUmVzZXJ2ZWQnLCAgICAgICAgICAgIGNfdWludDMy KSwNCisgICAgICAgICgnU3RhcnRpbmdPZmZzZXQnLCAgICAgIGNfdWludDY0KSwNCisgICAgICAg ICgnRW5kaW5nT2Zmc2V0JywgICAgICAgIGNfdWludDY0KQ0KKyAgICBdDQorDQorDQorY2xhc3Mg TUVESUFfUkFNX0RJU0tfREVWSUNFX1BBVEgoTGl0dGxlRW5kaWFuU3RydWN0dXJlKToNCisgICAg X3BhY2tfID0gMQ0KKyAgICBfZmllbGRzXyA9IFsNCisgICAgICAgICgnSGVhZGVyJywgICAgICAg ICAgICAgIEVGSV9ERVZJQ0VfUEFUSCksDQorICAgICAgICAoJ1N0YXJ0aW5nQWRkcicsICAgICAg ICBjX3VpbnQ2NCksDQorICAgICAgICAoJ0VuZGluZ0FkZHInLCAgICAgICAgICBjX3VpbnQ2NCks DQorICAgICAgICAoJ1R5cGVHdWlkJywgICAgICAgICAgICBFRklfR1VJRCksDQorICAgICAgICAo J0luc3RhbmNlJywgICAgICAgICAgICBjX3VpbnQxNikNCisgICAgXQ0KKw0KKw0KK2NsYXNzIEVm aURldmljZVBhdGg6DQorICAgICcnJw0KKyAgICBQYXJzZSBFRkkgRGV2aWNlIFBhdGhzIGJhc2Vk IG9uIHRoZSBlZGsyIEMgU3RydWN0dXJlcyBkZWZpbmVkIGFib3ZlLg0KKyAgICBJbiB0aGUgY29u dGV4dCBvZiB0aGlzIGNsYXNzIHZlcmJvc2UgbWVhbnMgaGV4ZHVtcCBleHRyYSBkYXRhLg0KKw0K Kw0KKyAgICBBdHRyaWJ1dGVzDQorICAgIOKAlOKAlOKAlOKAlOKAlOKAlA0KKyAgICBEZXZpY2VQ YXRoIDogbGlzdA0KKyAgICAgICAgTGlzdCBvZiBkZXZpeGUgcGF0aCBpbnN0YW5jZXMuIEVhY2gg aW5zdGFuY2UgaXMgYSBsaXN0IG9mIG5vZGVzDQorICAgICAgICBmb3IgdGhlIGdpdmVuIERldmlj ZSBQYXRoIGluc3RhbmNlLg0KKw0KKyAgICBNZXRob2RzDQorICAgIC0tLS0tLS0tLS0tDQorICAg IGRldmljZV9wYXRoX25vZGUoYWRkcmVzcykNCisgICAgICAgIHJldHVybiB0aGUgRGV2aWNlIFBh dGggY3R5cGUgaGRyLCBjdHlwZSwgYW5kIGFueSBleHRyYSBkYXRhIGluDQorICAgICAgICB0aGUg RGV2aWNlIFBhdGggbm9kZS4gVGhpcyBpcyBqdXN0IGEgc2luZ2xlIERldmljZSBQYXRoIG5vZGUs DQorICAgICAgICBub3QgdGhlIGVudGlyZSBEZXZpY2UgUGF0aC4NCisgICAgZGV2aWNlX3BhdGhf bm9kZV9zdHIoYWRkcmVzcykNCisgICAgICAgIHJldHVybiB0aGUgZGV2aWNlIHBhdGggbm9kZSAo bm90IHRoZSBlbnRpcmUgRGV2aWNlIFBhdGgpIGFzIGEgc3RyaW5nDQorICAgICcnJw0KKw0KKyAg ICBEZXZpY2VQYXRoID0gW10NCisNCisgICAgZGV2aWNlX3BhdGhfZGljdCA9IHsNCisgICAgICAg ICMgKCBUeXBlLCBTdWJUeXBlICkgOiBEZXZpY2UgUGF0aCBDIHR5cGVkZWYNCisgICAgICAgICMg SEFSRFdBUkVfREVWSUNFX1BBVEgNCisgICAgICAgICgxLCAgMSk6IFBDSV9ERVZJQ0VfUEFUSCwN CisgICAgICAgICgxLCAgMik6IFBDQ0FSRF9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgxLCAgMyk6 IE1FTU1BUF9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgxLCAgNCk6IFZFTkRPUl9ERVZJQ0VfUEFU SCwNCisgICAgICAgICgxLCAgNSk6IENPTlRST0xMRVJfREVWSUNFX1BBVEgsDQorICAgICAgICAo MSwgIDYpOiBCTUNfREVWSUNFX1BBVEgsDQorDQorICAgICAgICAjIEFDUElfREVWSUNFX1BBVEgN CisgICAgICAgICgyLCAgMSk6IEFDUElfSElEX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDIsICAy KTogQUNQSV9FWFRFTkRFRF9ISURfREVWSUNFX1BBVEgsDQorICAgICAgICAoMiwgIDMpOiBBQ1BJ X0FEUl9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgyLCAgNCk6IEFDUElfTlZESU1NX0RFVklDRV9Q QVRILA0KKw0KKyAgICAgICAgIyBNRVNTQUdJTkdfREVWSUNFX1BBVEgNCisgICAgICAgICgzLCAg MSk6IEFUQVBJX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsICAyKTogU0NTSV9ERVZJQ0VfUEFU SCwNCisgICAgICAgICgzLCAgMyk6IEZJQlJFQ0hBTk5FTF9ERVZJQ0VfUEFUSCwNCisgICAgICAg ICgzLCAgNCk6IEYxMzk0X0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsICA1KTogVVNCX0RFVklD RV9QQVRILA0KKyAgICAgICAgKDMsICA2KTogSTJPX0RFVklDRV9QQVRILA0KKw0KKyAgICAgICAg KDMsICA5KTogSU5GSU5JQkFORF9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAxMCk6IFZFTkRP Ul9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAxMSk6IE1BQ19BRERSX0RFVklDRV9QQVRILA0K KyAgICAgICAgKDMsIDEyKTogSVB2NF9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAxMyk6IElQ djZfREVWSUNFX1BBVEgsDQorICAgICAgICAoMywgMTQpOiBVQVJUX0RFVklDRV9QQVRILA0KKyAg ICAgICAgKDMsIDE1KTogVVNCX0NMQVNTX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsIDE2KTog VVNCX1dXSURfREVWSUNFX1BBVEgsDQorICAgICAgICAoMywgMTcpOiBERVZJQ0VfTE9HSUNBTF9V TklUX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsIDE4KTogU0FUQV9ERVZJQ0VfUEFUSCwNCisg ICAgICAgICgzLCAxOSk6IElTQ1NJX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsIDIwKTogVkxB Tl9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAyMSk6IEZJQlJFQ0hBTk5FTEVYX0RFVklDRV9Q QVRILA0KKyAgICAgICAgKDMsIDIyKTogU0FTRVhfREVWSUNFX1BBVEgsDQorICAgICAgICAoMywg MjMpOiBOVk1FX05BTUVTUEFDRV9ERVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAyNCk6IEROU19E RVZJQ0VfUEFUSCwNCisgICAgICAgICgzLCAyNSk6IFVGU19ERVZJQ0VfUEFUSCwNCisgICAgICAg ICgzLCAyNik6IFNEX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsIDI3KTogQkxVRVRPT1RIX0RF VklDRV9QQVRILA0KKyAgICAgICAgKDMsIDI4KTogV0lGSV9ERVZJQ0VfUEFUSCwNCisgICAgICAg ICgzLCAyOSk6IEVNTUNfREVWSUNFX1BBVEgsDQorICAgICAgICAoMywgMzApOiBCTFVFVE9PVEhf TEVfREVWSUNFX1BBVEgsDQorICAgICAgICAoMywgMzEpOiBETlNfREVWSUNFX1BBVEgsDQorICAg ICAgICAoMywgMzIpOiBOVkRJTU1fTkFNRVNQQUNFX0RFVklDRV9QQVRILA0KKw0KKyAgICAgICAg KDMsIDMzKTogUkVTVF9TRVJWSUNFX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDMsIDM0KTogUkVT VF9WRU5ET1JfU0VSVklDRV9ERVZJQ0VfUEFUSCwNCisNCisgICAgICAgICMgTUVESUFfREVWSUNF X1BBVEgNCisgICAgICAgICg0LCAgMSk6IEhBUkREUklWRV9ERVZJQ0VfUEFUSCwNCisgICAgICAg ICg0LCAgMik6IENEUk9NX0RFVklDRV9QQVRILA0KKyAgICAgICAgKDQsICAzKTogVkVORE9SX0RF VklDRV9QQVRILA0KKyAgICAgICAgKDQsICA0KTogRUZJX0RFVklDRV9QQVRILA0KKyAgICAgICAg KDQsICA1KTogTUVESUFfUFJPVE9DT0xfREVWSUNFX1BBVEgsDQorICAgICAgICAoNCwgIDYpOiBN RURJQV9GV19WT0xfRklMRVBBVEhfREVWSUNFX1BBVEgsDQorICAgICAgICAoNCwgIDcpOiBNRURJ QV9GV19WT0xfREVWSUNFX1BBVEgsDQorICAgICAgICAoNCwgIDgpOiBNRURJQV9SRUxBVElWRV9P RkZTRVRfUkFOR0VfREVWSUNFX1BBVEgsDQorICAgICAgICAoNCwgIDkpOiBNRURJQV9SQU1fRElT S19ERVZJQ0VfUEFUSCwNCisNCisgICAgICAgICMgQkJTX0RFVklDRV9QQVRIDQorICAgICAgICAo NSwgMSk6IEJCU19CQlNfREVWSUNFX1BBVEgsDQorDQorICAgIH0NCisNCisgICAgZ3VpZF9vdmVy cmlkZV9kaWN0ID0gew0KKyAgICAgICAgdXVpZC5VVUlEKCczNzQ5OUE5RC01NDJGLTRDODktQTAy Ni0zNURBMTQyMDk0RTQnKToNCisgICAgICAgICAgICBVQVJUX0ZMT1dfQ09OVFJPTF9ERVZJQ0Vf UEFUSCwNCisgICAgICAgIHV1aWQuVVVJRCgnRDQ4N0REQjQtMDA4Qi0xMUQ5LUFGREMtMDAxMDgz RkZDQTREJyk6DQorICAgICAgICAgICAgU0FTX0RFVklDRV9QQVRILA0KKyAgICB9DQorDQorICAg IGRlZiBfX2luaXRfXyhzZWxmLCBmaWxlLCBwdHI9Tm9uZSwgdmVyYm9zZT1GYWxzZSwgY291bnQ9 NjQpOg0KKyAgICAgICAgJycnDQorICAgICAgICBDb252ZXJ0IHB0ciBpbnRvIGEgbGlzdCBvZiBE ZXZpY2UgUGF0aCBub2Rlcy4gSWYgdmVyYm9zZSBhbHNvIGhleGR1bXANCisgICAgICAgIGV4dHJh IGRhdGEuDQorICAgICAgICAnJycNCisgICAgICAgIHNlbGYuX2ZpbGUgPSBmaWxlDQorICAgICAg ICBzZWxmLl92ZXJib3NlID0gdmVyYm9zZQ0KKyAgICAgICAgaWYgcHRyIGlzIE5vbmU6DQorICAg ICAgICAgICAgcmV0dXJuDQorDQorICAgICAgICB0cnk6DQorICAgICAgICAgICAgaW5zdGFuY2Ug PSBbXQ0KKyAgICAgICAgICAgIGZvciBfIGluIHJhbmdlKGNvdW50KTogICMgd2hpbGUgVHJ1ZQ0K KyAgICAgICAgICAgICAgICBoZHIsIF8gPSBzZWxmLl9jdHlwZV9yZWFkX2V4KEVGSV9ERVZJQ0Vf UEFUSCwgcHRyKQ0KKyAgICAgICAgICAgICAgICBpZiBoZHIuTGVuZ3RoIDwgc2l6ZW9mKEVGSV9E RVZJQ0VfUEFUSCk6DQorICAgICAgICAgICAgICAgICAgICAjIE5vdCBhIHZhbGlkIGRldmljZSBw YXRoDQorICAgICAgICAgICAgICAgICAgICBicmVhaw0KKw0KKyAgICAgICAgICAgICAgICBpZiBo ZHIuVHlwZSA9PSAweDdGOiAgIyBFTkRfREVWSUNFX1BBVEhfVFlQRQ0KKyAgICAgICAgICAgICAg ICAgICAgc2VsZi5EZXZpY2VQYXRoLmFwcGVuZChpbnN0YW5jZSkNCisgICAgICAgICAgICAgICAg ICAgIGlmIGhkci5TdWJUeXBlID09IDB4RkY6ICAjIEVORF9FTlRJUkVfREVWSUNFX1BBVEhfU1VC VFlQRQ0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQorICAgICAgICAgICAgICAgICAg ICBpZiBoZHIuU3ViVHlwZSA9PSAweDAxOiAgIyBFTkRfSU5TVEFOQ0VfREVWSUNFX1BBVEhfU1VC VFlQRQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICMgc3RhcnQgbmV3IGRldmljZSBwYXRoIGlu c3RhbmNlDQorICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgPSBbXQ0KKw0KKyAgICAg ICAgICAgICAgICB0eXBlX3N0ciA9IHNlbGYuZGV2aWNlX3BhdGhfZGljdC5nZXQoDQorICAgICAg ICAgICAgICAgICAgICAoaGRyLlR5cGUsIGhkci5TdWJUeXBlKSwgRUZJX0RFVklDRV9QQVRIKQ0K KyAgICAgICAgICAgICAgICBub2RlLCBleHRyYSA9IHNlbGYuX2N0eXBlX3JlYWRfZXgodHlwZV9z dHIsIHB0ciwgaGRyLkxlbmd0aCkNCisgICAgICAgICAgICAgICAgaWYgJ1ZFTkRPUl9ERVZJQ0Vf UEFUSCcgaW4gdHlwZShub2RlKS5fX25hbWVfXzoNCisgICAgICAgICAgICAgICAgICAgIGd1aWRf dHlwZSA9IHNlbGYuZ3VpZF9vdmVycmlkZV9kaWN0LmdldCgNCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR3VpZE5hbWVzLnRvX3V1aWQobm9kZS5HdWlkKSwgTm9uZSkN CisgICAgICAgICAgICAgICAgICAgIGlmIGd1aWRfdHlwZToNCisgICAgICAgICAgICAgICAgICAg ICAgICAjIHVzZSB0aGUgY3R5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBHVUlEDQorICAgICAgICAg ICAgICAgICAgICAgICAgbm9kZSwgZXh0cmEgPSBzZWxmLl9jdHlwZV9yZWFkX2V4KA0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRfdHlwZSwgcHRy LCBoZHIuTGVuZ3RoKQ0KKw0KKyAgICAgICAgICAgICAgICBpbnN0YW5jZS5hcHBlbmQoKHR5cGUo bm9kZSkuX19uYW1lX18sIGhkci5UeXBlLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaGRyLlN1YlR5cGUsIGhkci5MZW5ndGgsIG5vZGUsIGV4dHJhKSkNCisgICAgICAgICAgICAg ICAgcHRyICs9IGhkci5MZW5ndGgNCisgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yOg0KKyAgICAg ICAgICAgIHBhc3MNCisNCisgICAgZGVmIF9fc3RyX18oc2VsZik6DQorICAgICAgICAnJycgJycn DQorICAgICAgICBpZiBub3Qgc2VsZi52YWxpZCgpOg0KKyAgICAgICAgICAgIHJldHVybiAnPGNs YXNzOiBFZmlEZXZpY2VQYXRoPicNCisNCisgICAgICAgIHJlc3VsdCA9ICIiDQorICAgICAgICBm b3IgaW5zdGFuY2UgaW4gc2VsZi5EZXZpY2VQYXRoOg0KKyAgICAgICAgICAgIGZvciAoTmFtZSwg VHlwZSwgU3ViVHlwZSwgTGVuZ3RoLCBjbm9kZSwgZXh0cmEpIGluIGluc3RhbmNlOg0KKyAgICAg ICAgICAgICAgICByZXN1bHQgKz0gZid7TmFtZTpzfSB7VHlwZToyZH06e1N1YlR5cGU6MmR9IExl bjoge0xlbmd0aDozZH1cbicNCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGN0eXBlX3RvX3N0 cihjbm9kZSwgJyAgJywgWydSZXNlcnZlZCddKQ0KKyAgICAgICAgICAgICAgICBpZiBzZWxmLl92 ZXJib3NlOg0KKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0cmEgaXMgbm90IE5vbmU6DQorICAg ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGhleGR1bXAoZXh0cmEsICcgICAgJykNCisg ICAgICAgICAgICByZXN1bHQgKz0gJ1xuJw0KKw0KKyAgICAgICAgcmV0dXJuIHJlc3VsdA0KKw0K KyAgICBkZWYgdmFsaWQoc2VsZik6DQorICAgICAgICByZXR1cm4gVHJ1ZSBpZiBzZWxmLkRldmlj ZVBhdGggZWxzZSBGYWxzZQ0KKw0KKyAgICBkZWYgZGV2aWNlX3BhdGhfbm9kZShzZWxmLCBhZGRy ZXNzKToNCisgICAgICAgIHRyeToNCisgICAgICAgICAgICBoZHIsIF8gPSBzZWxmLl9jdHlwZV9y ZWFkX2V4KEVGSV9ERVZJQ0VfUEFUSCwgYWRkcmVzcykNCisgICAgICAgICAgICBpZiBoZHIuTGVu Z3RoIDwgc2l6ZW9mKEVGSV9ERVZJQ0VfUEFUSCk6DQorICAgICAgICAgICAgICAgIHJldHVybiBO b25lLCBOb25lLCBOb25lDQorDQorICAgICAgICAgICAgdHlwZV9zdHIgPSBzZWxmLmRldmljZV9w YXRoX2RpY3QuZ2V0KA0KKyAgICAgICAgICAgICAgICAoaGRyLlR5cGUsIGhkci5TdWJUeXBlKSwg RUZJX0RFVklDRV9QQVRIKQ0KKyAgICAgICAgICAgIGNub2RlLCBleHRyYSA9IHNlbGYuX2N0eXBl X3JlYWRfZXgodHlwZV9zdHIsIGFkZHJlc3MsIGhkci5MZW5ndGgpDQorICAgICAgICAgICAgcmV0 dXJuIGhkciwgY25vZGUsIGV4dHJhDQorICAgICAgICBleGNlcHQgVmFsdWVFcnJvcjoNCisgICAg ICAgICAgICByZXR1cm4gTm9uZSwgTm9uZSwgTm9uZQ0KKw0KKyAgICBkZWYgZGV2aWNlX3BhdGhf bm9kZV9zdHIoc2VsZiwgYWRkcmVzcywgdmVyYm9zZT1GYWxzZSk6DQorICAgICAgICBoZHIsIGNu b2RlLCBleHRyYSA9IHNlbGYuZGV2aWNlX3BhdGhfbm9kZShhZGRyZXNzKQ0KKyAgICAgICAgaWYg aGRyIGlzIE5vbmU6DQorICAgICAgICAgICAgcmV0dXJuICcnDQorDQorICAgICAgICBjbmFtZSA9 IHR5cGUoY25vZGUpLl9fbmFtZV9fDQorICAgICAgICByZXN1bHQgPSBmJ3tjbmFtZTpzfSB7aGRy LlR5cGU6MmR9OntoZHIuU3ViVHlwZToyZH0gJw0KKyAgICAgICAgcmVzdWx0ICs9IGYnTGVuOiAw eHtoZHIuTGVuZ3RoOjAzeH1cbicNCisgICAgICAgIHJlc3VsdCArPSBjdHlwZV90b19zdHIoY25v ZGUsICcgICcsIFsnUmVzZXJ2ZWQnXSkNCisgICAgICAgIGlmIHZlcmJvc2U6DQorICAgICAgICAg ICAgaWYgZXh0cmEgaXMgbm90IE5vbmU6DQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBoZXhk dW1wKGV4dHJhLCAnICAgICcpDQorDQorICAgICAgICByZXR1cm4gcmVzdWx0DQorDQorICAgIGRl ZiBfY3R5cGVfcmVhZF9leChzZWxmLCBjdHlwZV9zdHJ1Y3QsIG9mZnNldD0wLCByc2l6ZT1Ob25l KToNCisgICAgICAgIGlmIG9mZnNldCAhPSAwOg0KKyAgICAgICAgICAgIHNlbGYuX2ZpbGUuc2Vl ayhvZmZzZXQpDQorDQorICAgICAgICB0eXBlX3NpemUgPSBzaXplb2YoY3R5cGVfc3RydWN0KQ0K KyAgICAgICAgc2l6ZSA9IHJzaXplIGlmIHJzaXplIGVsc2UgdHlwZV9zaXplDQorICAgICAgICBk YXRhID0gc2VsZi5fZmlsZS5yZWFkKHNpemUpDQorICAgICAgICBpZiBkYXRhIGlzIE5vbmU6DQor ICAgICAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUNCisNCisgICAgICAgIGNkYXRhID0gY3R5cGVf c3RydWN0LmZyb21fYnVmZmVyKGJ5dGVhcnJheShkYXRhKSkNCisNCisgICAgICAgIGlmIHNpemUg PiB0eXBlX3NpemU6DQorICAgICAgICAgICAgcmV0dXJuIGNkYXRhLCBkYXRhW3R5cGVfc2l6ZTpd DQorICAgICAgICBlbHNlOg0KKyAgICAgICAgICAgIHJldHVybiBjZGF0YSwgTm9uZQ0KKw0KKw0K K2NsYXNzIEVmaUNvbmZpZ3VyYXRpb25UYWJsZToNCisgICAgJycnDQorICAgIEEgY2xhc3MgdG8g YWJzdHJhY3QgRUZJIENvbmZpZ3VyYXRpb24gVGFibGVzIGZyb20gZ1NULT5Db25maWd1cmF0aW9u VGFibGUNCisgICAgYW5kIGdTVC0+TnVtYmVyT2ZUYWJsZUVudHJpZXMuIFBhc3MgaW4gdGhlIGdT VCBwb2ludGVyIGZyb20gRUZJLA0KKyAgICBsaWtlbHkgeW91IG5lZWQgdG8gbG9vayB1cCB0aGlz IGFkZHJlc3MgYWZ0ZXIgeW91IGhhdmUgbG9hZGVkIHN5bWJvbHMNCisNCisgICAgQXR0cmlidXRl cw0KKyAgICDigJTigJTigJTigJTigJTigJQNCisgICAgQ29uZmlndXJhdGlvblRhYmxlRGljdCA6 IGRpY3Rpb25hcnkNCisgICAgICAgIGRpY3Rpb25hcnkgb2YgRUZJIENvbmZpZ3VyYXRpb24gVGFi bGUgZW50cmllcw0KKw0KKyAgICBNZXRob2RzDQorICAgIC0tLS0tLS0tLS0tDQorICAgIEdldENv bmZpZ1RhYmxlKHV1aWQpDQorICAgICAgICBwYXNzIGluIFZlbmRvckd1aWQgYW5kIHJldHVybiBW ZW5kb3JUYWJsZSBmcm9tIEVGSSBTeXN0ZW0gVGFibGUNCisgICAgRGVidWdJbWFnZUluZm8odGFi bGUpDQorICAgICAgICByZXR1cm4gdHVwbGUgb2YgbG9hZCBhZGRyZXNzIGFuZCBzaXplIG9mIFBF L0NPRkYgaW1hZ2VzDQorICAgICcnJw0KKw0KKyAgICBDb25maWd1cmF0aW9uVGFibGVEaWN0ID0g e30NCisNCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGdTVF9hZGRyPU5vbmUpOg0KKyAg ICAgICAgc2VsZi5fZmlsZSA9IGZpbGUNCisgICAgICAgIGlmIGdTVF9hZGRyIGlzIE5vbmU6DQor ICAgICAgICAgICAgIyBUb0RvIGFkZCBjb2RlIHRvIHNlYXJjaCBmb3IgZ1NUIHZpYSBFRklfU1lT VEVNX1RBQkxFX1BPSU5URVINCisgICAgICAgICAgICByZXR1cm4NCisNCisgICAgICAgIGdTVCA9 IHNlbGYuX2N0eXBlX3JlYWQoRUZJX1NZU1RFTV9UQUJMRSwgZ1NUX2FkZHIpDQorICAgICAgICBz ZWxmLnJlYWRfZWZpX2NvbmZpZ190YWJsZShnU1QuTnVtYmVyT2ZUYWJsZUVudHJpZXMsDQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnU1QuQ29uZmlndXJhdGlvblRhYmxlLA0K KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5fY3R5cGVfcmVhZCkNCisN CisgICAgQCBjbGFzc21ldGhvZA0KKyAgICBkZWYgX19zdHJfXyhjbHMpOg0KKyAgICAgICAgJycn cmV0dXJuIEVGSV9DT05GSUdVUkFUSU9OX1RBQkxFIGVudHJpZXMgYXMgYSBzdHJpbmcnJycNCisg ICAgICAgIHJlc3VsdCA9ICIiDQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBjbHMuQ29uZmln dXJhdGlvblRhYmxlRGljdC5pdGVtcygpOg0KKyAgICAgICAgICAgIHJlc3VsdCArPSBmJ3tHdWlk TmFtZXMoKS50b19uYW1lKGtleSk6PjM3c306ICcNCisgICAgICAgICAgICByZXN1bHQgKz0gZidW ZW5kb3JUYWJsZSA9IDB4e3ZhbHVlOjA4eH1cbicNCisNCisgICAgICAgIHJldHVybiByZXN1bHQN CisNCisgICAgZGVmIF9jdHlwZV9yZWFkKHNlbGYsIGN0eXBlX3N0cnVjdCwgb2Zmc2V0PTApOg0K KyAgICAgICAgJycnY3R5cGUgd29ya2VyIGZ1bmN0aW9uIHRvIHJlYWQgZGF0YScnJw0KKyAgICAg ICAgaWYgb2Zmc2V0ICE9IDA6DQorICAgICAgICAgICAgc2VsZi5fZmlsZS5zZWVrKG9mZnNldCkN CisNCisgICAgICAgIGRhdGEgPSBzZWxmLl9maWxlLnJlYWQoc2l6ZW9mKGN0eXBlX3N0cnVjdCkp DQorICAgICAgICByZXR1cm4gY3R5cGVfc3RydWN0LmZyb21fYnVmZmVyKGJ5dGVhcnJheShkYXRh KSkNCisNCisgICAgQCBjbGFzc21ldGhvZA0KKyAgICBkZWYgcmVhZF9lZmlfY29uZmlnX3RhYmxl KGNscywgdGFibGVfY250LCB0YWJsZV9wdHIsIGN0eXBlX3JlYWQpOg0KKyAgICAgICAgJycnQ3Jl YXRlIGEgZGljdGlvbmFyeSBvZiBFRkkgQ29uZmlndXJhdGlvbiB0YWJsZSBlbnRyaWVzJycnDQor ICAgICAgICBFbXB0cnlUYWJsZXMgPSBFRklfQ09ORklHVVJBVElPTl9UQUJMRSAqIHRhYmxlX2Nu dA0KKyAgICAgICAgVGFibGVzID0gY3R5cGVfcmVhZChFbXB0cnlUYWJsZXMsIHRhYmxlX3B0cikN CisgICAgICAgIGZvciBpIGluIHJhbmdlKHRhYmxlX2NudCk6DQorICAgICAgICAgICAgY2xzLkNv bmZpZ3VyYXRpb25UYWJsZURpY3Rbc3RyKEd1aWROYW1lcy50b191dWlkKA0KKyAgICAgICAgICAg ICAgICBUYWJsZXNbaV0uVmVuZG9yR3VpZCkpLnVwcGVyKCldID0gVGFibGVzW2ldLlZlbmRvclRh YmxlDQorDQorICAgICAgICByZXR1cm4gY2xzLkNvbmZpZ3VyYXRpb25UYWJsZURpY3QNCisNCisg ICAgZGVmIEdldENvbmZpZ1RhYmxlKHNlbGYsIHV1aWQpOg0KKyAgICAgICAgJycnIFJldHVybiBW ZW5kb3JUYWJsZSBmb3IgVmVuZG9yR3VpZCAodXVpZC5VVUlEKSBvciBOb25lJycnDQorICAgICAg ICByZXR1cm4gc2VsZi5Db25maWd1cmF0aW9uVGFibGVEaWN0LmdldCh1dWlkLnVwcGVyKCkpDQor DQorICAgIGRlZiBEZWJ1Z0ltYWdlSW5mbyhzZWxmLCB0YWJsZT1Ob25lKToNCisgICAgICAgICcn Jw0KKyAgICAgICAgV2FsayB0aGUgZGVidWcgaW1hZ2UgaW5mbyB0YWJsZSB0byBmaW5kIHRoZSBM b2FkZWRJbWFnZSBwcm90b2NvbHMNCisgICAgICAgIGZvciBhbGwgdGhlIGxvYWRlZCBQRS9DT0ZG IGltYWdlcyBhbmQgcmV0dXJuIGEgbGlzdCBvZiBsb2FkIGFkZHJlc3MNCisgICAgICAgIGFuZCBp bWFnZSBzaXplLg0KKyAgICAgICAgJycnDQorICAgICAgICBJbWFnZUxvYWQgPSBbXQ0KKw0KKyAg ICAgICAgaWYgdGFibGUgaXMgTm9uZToNCisgICAgICAgICAgICB0YWJsZSA9IHNlbGYuR2V0Q29u ZmlnVGFibGUoJzQ5MTUyZTc3LTFhZGEtNDc2NC1iN2EyLTdhZmVmZWQ5NWU4YicpDQorDQorICAg ICAgICBEYmdJbmZvSGRyID0gc2VsZi5fY3R5cGVfcmVhZChFRklfREVCVUdfSU1BR0VfSU5GT19U QUJMRV9IRUFERVIsIHRhYmxlKQ0KKyAgICAgICAgTm9ybWFsSW1hZ2VBcnJheSA9IEVGSV9ERUJV R19JTUFHRV9JTkZPICogRGJnSW5mb0hkci5UYWJsZVNpemUNCisgICAgICAgIE5vcm1hbEltYWdl QXJyYXkgPSBzZWxmLl9jdHlwZV9yZWFkKA0KKyAgICAgICAgICAgIE5vcm1hbEltYWdlQXJyYXks IERiZ0luZm9IZHIuRWZpRGVidWdJbWFnZUluZm9UYWJsZSkNCisgICAgICAgIGZvciBpIGluIHJh bmdlKERiZ0luZm9IZHIuVGFibGVTaXplKToNCisgICAgICAgICAgICBJbWFnZUluZm8gPSBzZWxm Ll9jdHlwZV9yZWFkKA0KKyAgICAgICAgICAgICAgICBFRklfREVCVUdfSU1BR0VfSU5GT19OT1JN QUwsIE5vcm1hbEltYWdlQXJyYXlbaV0uTm9ybWFsSW1hZ2UpDQorICAgICAgICAgICAgTG9hZGVk SW1hZ2UgPSBzZWxmLl9jdHlwZV9yZWFkKA0KKyAgICAgICAgICAgICAgICBFRklfTE9BREVEX0lN QUdFX1BST1RPQ09MLA0KKyAgICAgICAgICAgICAgICBJbWFnZUluZm8uTG9hZGVkSW1hZ2VQcm90 b2NvbEluc3RhbmNlKQ0KKyAgICAgICAgICAgIEltYWdlTG9hZC5hcHBlbmQoKExvYWRlZEltYWdl LkltYWdlQmFzZSwgTG9hZGVkSW1hZ2UuSW1hZ2VTaXplKSkNCisNCisgICAgICAgIHJldHVybiBJ bWFnZUxvYWQNCisNCisNCitjbGFzcyBQZVRlSW1hZ2U6DQorICAgICcnJw0KKyAgICBBIGNsYXNz IHRvIGFic3RyYWN0IFBFL0NPRkYgb3IgVEUgaW1hZ2UgcHJvY2Vzc2luZyB2aWEgcGFzc2luZyBp biBhDQorICAgIFB5dGhvbiBmaWxlIGxpa2Ugb2JqZWN0LiBJZiB5b3UgcGFzcyBpbiBhbiBhZGRy ZXNzIHRoZSBQRS9DT0ZGIGlzIHBhcnNlZCwNCisgICAgaWYgeW91IHBhc3MgaW4gTlVMTCBmb3Ig YW4gYWRkcmVzcyB0aGVuIHlvdSBnZXQgYSBjbGFzcyBpbnN0YW5jZSB5b3UgY2FuDQorICAgIHVz ZSB0byBzZWFyY2ggbWVtb3J5IGZvciBhIFBFL0NPRkYgaGFkZXIgZ2l2ZW4gYSBwYyB2YWx1ZS4N CisNCisgICAgQXR0cmlidXRlcw0KKyAgICDigJTigJTigJTigJTigJTigJQNCisgICAgTG9hZEFk ZHJlc3MgOiBpbnQNCisgICAgICAgIExvYWQgYWRkcmVzcyBvZiB0aGUgUEUvQ09GRiBpbWFnZQ0K KyAgICBBZGRyZXNzT2ZFbnRyeVBvaW50IDogaW50DQorICAgICAgICBBZGRyZXNzIG9mIHRoZSBF bnRyeSBwb2ludCBvZiB0aGUgUEUvQ09GRiBpbWFnZQ0KKyAgICBUZXh0QWRkcmVzcyA6IGludA0K KyAgICAgICAgU3RhcnQgb2YgdGhlIFBFL0NPRkYgdGV4dCBzZWN0aW9uDQorICAgIERhdGFBZGRy ZXNzIDogaW50DQorICAgICAgICBTdGFydCBvZiB0aGUgUEUvQ09GRiBkYXRhIHNlY3Rpb24NCisg ICAgQ29kZVZpZXdQZGIgOiBzdHINCisgICAgICAgIEZpbGUgbmFtZSBvZiB0aGUgc3ltYm9scyBm aWxlDQorICAgIENvZGVWaWV3VXVpZCA6IHV1aWQ6VVVJRA0KKyAgICAgICAgR1VJRCBmb3IgIlJT RFMiIERlYnVnIERpcmVjdG9yeSBlbnRyeSwgb3IgTWFjaC1PIFVVSUQgZm9yICJNVE9DIg0KKw0K KyAgICBNZXRob2RzDQorICAgIC0tLS0tLS0tLS0tDQorICAgIHBjVG9QZUNvZmYoYWRkcmVzcywg c3RlcCwgbWF4X3JhbmdlLCByb21fcmFuZ2UpDQorICAgICAgICBHaXZlbiBhbiBhZGRyZXNzKHBj KSBmaW5kIHRoZSBQRS9DT0ZGIGltYWdlIGl0IGlzIGluDQorICAgIHNlY3Rpb25zX3RvX3N0cigp DQorICAgICAgICByZXR1cm4gYSBzdHJpbmcgZ2l2aW5nIGluZm8gZm9yIGFsbCB0aGUgUEUvQ09G RiBzZWN0aW9ucw0KKyAgICAnJycNCisNCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIGZpbGUsIGFk ZHJlc3M9MCk6DQorICAgICAgICBzZWxmLl9maWxlID0gZmlsZQ0KKw0KKyAgICAgICAgIyBib29r IGtlZXBpbmcsIGJ1dCBwdWJsaWMNCisgICAgICAgIHNlbGYuUGVIZHIgPSBOb25lDQorICAgICAg ICBzZWxmLlRlSGRyID0gTm9uZQ0KKyAgICAgICAgc2VsZi5NYWNoaW5lID0gTm9uZQ0KKyAgICAg ICAgc2VsZi5TdWJzeXN0ZW0gPSBOb25lDQorICAgICAgICBzZWxmLkNvZGVWaWV3U2lnID0gTm9u ZQ0KKyAgICAgICAgc2VsZi5lX2xmYW5ldyA9IDANCisgICAgICAgIHNlbGYuTnVtYmVyT2ZTZWN0 aW9ucyA9IDANCisgICAgICAgIHNlbGYuU2VjdGlvbnMgPSBOb25lDQorDQorICAgICAgICAjIFRo aW5ncyBkZWJ1Z2dlcnMgbWF5IHdhbnQgdG8ga25vdw0KKyAgICAgICAgc2VsZi5Mb2FkQWRkcmVz cyA9IDAgaWYgYWRkcmVzcyBpcyBOb25lIGVsc2UgYWRkcmVzcw0KKyAgICAgICAgc2VsZi5FbmRM b2FkQWRkcmVzcyA9IDANCisgICAgICAgIHNlbGYuQWRkcmVzc09mRW50cnlQb2ludCA9IDANCisg ICAgICAgIHNlbGYuVGV4dEFkZHJlc3MgPSAwDQorICAgICAgICBzZWxmLkRhdGFBZGRyZXNzID0g MA0KKyAgICAgICAgc2VsZi5Db2RlVmlld1BkYiA9IE5vbmUNCisgICAgICAgIHNlbGYuQ29kZVZp ZXdVdWlkID0gTm9uZQ0KKyAgICAgICAgc2VsZi5UZUFkanVzdCA9IDANCisNCisgICAgICAgIHNl bGYuZGlyX25hbWUgPSB7DQorICAgICAgICAgICAgMDogJ0V4cG9ydCBUYWJsZScsDQorICAgICAg ICAgICAgMTogJ0ltcG9ydCBUYWJsZScsDQorICAgICAgICAgICAgMjogJ1Jlc291cmNlIFRhYmxl JywNCisgICAgICAgICAgICAzOiAnRXhjZXB0aW9uIFRhYmxlJywNCisgICAgICAgICAgICA0OiAn Q2VydGlmaWNhdGUgVGFibGUnLA0KKyAgICAgICAgICAgIDU6ICdSZWxvY2F0aW9uIFRhYmxlJywN CisgICAgICAgICAgICA2OiAnRGVidWcnLA0KKyAgICAgICAgICAgIDc6ICdBcmNoaXRlY3R1cmUn LA0KKyAgICAgICAgICAgIDg6ICdHbG9iYWwgUHRyJywNCisgICAgICAgICAgICA5OiAnVExTIFRh YmxlJywNCisgICAgICAgICAgICAxMDogJ0xvYWQgQ29uZmlnIFRhYmxlJywNCisgICAgICAgICAg ICAxMTogJ0JvdW5kIEltcG9ydCcsDQorICAgICAgICAgICAgMTI6ICdJQVQnLA0KKyAgICAgICAg ICAgIDEzOiAnRGVsYXkgSW1wb3J0IERlc2NyaXB0b3InLA0KKyAgICAgICAgICAgIDE0OiAnQ0xS IFJ1bnRpbWUgSGVhZGVyJywNCisgICAgICAgICAgICAxNTogJ1Jlc2VydmVkJywNCisgICAgICAg IH0NCisNCisgICAgICAgIGlmIGFkZHJlc3MgaXMgbm90IE5vbmU6DQorICAgICAgICAgICAgaWYg c2VsZi5tYXliZSgpOg0KKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlKCkNCisNCisgICAgZGVm IF9fc3RyX18oc2VsZik6DQorICAgICAgICBpZiBzZWxmLlBlSGRyIGlzIE5vbmUgYW5kIHNlbGYu VGVIZHIgaXMgTm9uZToNCisgICAgICAgICAgICAjIG5vIFBFL0NPRkYgaGVhZGVyIGZvdW5kDQor ICAgICAgICAgICAgcmV0dXJuICI8Y2xhc3M6IFBlVGVJbWFnZT4iDQorDQorICAgICAgICBpZiBz ZWxmLkNvZGVWaWV3UGRiOg0KKyAgICAgICAgICAgIHBkYiA9IGYne3NlbGYuTWFjaGluZX1ge3Nl bGYuQ29kZVZpZXdQZGJ9Jw0KKyAgICAgICAgZWxzZToNCisgICAgICAgICAgICBwZGIgPSAnTm8g RGVidWcgSW5mbzonDQorDQorICAgICAgICBpZiBzZWxmLkNvZGVWaWV3VXVpZDoNCisgICAgICAg ICAgICBndWlkID0gZid7c2VsZi5Db2RlVmlld1V1aWR9OicNCisgICAgICAgIGVsc2U6DQorICAg ICAgICAgICAgZ3VpZCA9ICcnDQorDQorICAgICAgICBzbGlkZSA9IGYnc2xpZGUgPSB7c2VsZi5U ZUFkanVzdDpkfSAnIGlmIHNlbGYuVGVBZGp1c3QgIT0gMCBlbHNlICcgJw0KKyAgICAgICAgcmVz ID0gZ3VpZCArIGYne3BkYn0gbG9hZCA9IDB4e3NlbGYuTG9hZEFkZHJlc3M6MDh4fSAnICsgc2xp ZGUNCisgICAgICAgIHJldHVybiByZXMNCisNCisgICAgZGVmIF9zZWVrKHNlbGYsIG9mZnNldCk6 DQorICAgICAgICAiIiINCisgICAgICAgIHNlZWsoKSByZWxhdGl2ZSB0byBzdGFydCBvZiBQRS9D T0ZGIChURSkgaW1hZ2UNCisgICAgICAgICIiIg0KKyAgICAgICAgc2VsZi5fZmlsZS5zZWVrKHNl bGYuTG9hZEFkZHJlc3MgKyBvZmZzZXQpDQorDQorICAgIGRlZiBfcmVhZF9vZmZzZXQoc2VsZiwg c2l6ZSwgb2Zmc2V0PU5vbmUpOg0KKyAgICAgICAgIiIiDQorICAgICAgICByZWFkKCkgcmVsYXRp dmUgdG8gc3RhcnQgb2YgUEUvQ09GRiAoVEUpIGltYWdlDQorICAgICAgICBpZiBvZmZzZXQgaXMg bm90IE5vbmUgdGhlbiBzZWVrKCkgYmVmb3JlIHRoZSByZWFkDQorICAgICAgICAiIiINCisgICAg ICAgIGlmIG9mZnNldCBpcyBub3QgTm9uZToNCisgICAgICAgICAgICBzZWxmLl9zZWVrKG9mZnNl dCkNCisNCisgICAgICAgIHJldHVybiBzZWxmLl9maWxlLnJlYWQoc2l6ZSkNCisNCisgICAgZGVm IF9yZWFkX2N0eXBlKHNlbGYsIGN0eXBlX3N0cnVjdCwgb2Zmc2V0PU5vbmUpOg0KKyAgICAgICAg ZGF0YSA9IHNlbGYuX3JlYWRfb2Zmc2V0KHNpemVvZihjdHlwZV9zdHJ1Y3QpLCBvZmZzZXQpDQor ICAgICAgICByZXR1cm4gY3R5cGVfc3RydWN0LmZyb21fYnVmZmVyKGJ5dGVhcnJheShkYXRhKSwg MCkNCisNCisgICAgZGVmIF91bnNpZ25lZChzZWxmLCBpKToNCisgICAgICAgICIiInJldHVybiBh IDMyLWJpdCB1bnNpZ25lZCBpbnQgKFVJTlQzMikgIiIiDQorICAgICAgICByZXR1cm4gaW50LmZy b21fYnl0ZXMoaSwgYnl0ZW9yZGVyPSdsaXR0bGUnLCBzaWduZWQ9RmFsc2UpDQorDQorICAgIGRl ZiBwY1RvUGVDb2ZmKHNlbGYsDQorICAgICAgICAgICAgICAgICAgIGFkZHJlc3MsDQorICAgICAg ICAgICAgICAgICAgIHN0ZXA9Tm9uZSwNCisgICAgICAgICAgICAgICAgICAgbWF4X3JhbmdlPU5v bmUsDQorICAgICAgICAgICAgICAgICAgIHJvbV9yYW5nZT1bMHhGRTgwMDAwMCwgMHhGRkZGRkZG Rl0pOg0KKyAgICAgICAgIiIiDQorICAgICAgICBHaXZlbiBhbiBhZGRyZXNzIHNlYXJjaCBiYWNr d2FyZHMgZm9yIFBFL0NPRkYgKFRFKSBoZWFkZXINCisgICAgICAgIEZvciBEWEUgNEsgaXMgcHJv YmFibHkgT0sNCisgICAgICAgIEZvciBQRUkgeW91IG1pZ2h0IGhhdmUgdG8gc2VhcmNoIGV2ZXJ5 IDQgYnl0ZXMuDQorICAgICAgICAiIiINCisgICAgICAgIGlmIHN0ZXAgaXMgTm9uZToNCisgICAg ICAgICAgICBzdGVwID0gMHgxMDAwDQorDQorICAgICAgICBpZiBtYXhfcmFuZ2UgaXMgTm9uZToN CisgICAgICAgICAgICBtYXhfcmFuZ2UgPSAweDIwMDAwMA0KKw0KKyAgICAgICAgaWYgYWRkcmVz cyBpbiByYW5nZSgqcm9tX3JhbmdlKToNCisgICAgICAgICAgICAjIFRoZSBYSVAgY29kZSBpbiB0 aGUgUk9NIGVuZHMgdXAgNCBieXRlIGFsaWduZWQuDQorICAgICAgICAgICAgc3RlcCA9IDQNCisg ICAgICAgICAgICBtYXhfcmFuZ2UgPSBtaW4obWF4X3JhbmdlLCAweDEwMDAwMCkNCisNCisgICAg ICAgICMgQWxpZ24gYWRkcmVzcyB0byBwYWdlIGJvdW5kYXJ5IGZvciBtZW1vcnkgaW1hZ2Ugc2Vh cmNoLg0KKyAgICAgICAgYWRkcmVzcyA9IGFkZHJlc3MgJiB+KHN0ZXAtMSkNCisgICAgICAgICMg U2VhcmNoIGV2ZXJ5IHN0ZXAgYmFja3dhcmQNCisgICAgICAgIG9mZnNldF9yYW5nZSA9IGxpc3Qo cmFuZ2UoMCwgbWluKG1heF9yYW5nZSwgYWRkcmVzcyksIHN0ZXApKQ0KKyAgICAgICAgZm9yIG9m ZnNldCBpbiBvZmZzZXRfcmFuZ2U6DQorICAgICAgICAgICAgaWYgc2VsZi5tYXliZShhZGRyZXNz IC0gb2Zmc2V0KToNCisgICAgICAgICAgICAgICAgaWYgc2VsZi5wYXJzZSgpOg0KKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIFRydWUNCisNCisgICAgICAgIHJldHVybiBGYWxzZQ0KKw0KKyAg ICBkZWYgbWF5YmUoc2VsZiwgb2Zmc2V0PU5vbmUpOg0KKyAgICAgICAgIiIiUHJvYmUgdG8gc2Vl IGlmIHRoaXMgb2Zmc2V0IGlzIGxpa2VseSBhIFBFL0NPRkYgb3IgVEUgZmlsZSAiIiINCisgICAg ICAgIHNlbGYuTG9hZEFkZHJlc3MgPSAwDQorICAgICAgICBlX21hZ2ljID0gc2VsZi5fcmVhZF9v ZmZzZXQoMiwgb2Zmc2V0KQ0KKyAgICAgICAgaGVhZGVyX29rID0gZV9tYWdpYyA9PSBiJ01aJyBv ciBlX21hZ2ljID09IGInVlonDQorICAgICAgICBpZiBvZmZzZXQgaXMgbm90IE5vbmUgYW5kIGhl YWRlcl9vazoNCisgICAgICAgICAgICBzZWxmLkxvYWRBZGRyZXNzID0gb2Zmc2V0DQorICAgICAg ICByZXR1cm4gaGVhZGVyX29rDQorDQorICAgIGRlZiBwYXJzZShzZWxmKToNCisgICAgICAgICIi IlBhcnNlIFBFL0NPRkYgKFRFKSBkZWJ1ZyBkaXJlY3RvcnkgZW50cnkgIiIiDQorICAgICAgICBE b3NIZHIgPSBzZWxmLl9yZWFkX2N0eXBlKEVGSV9JTUFHRV9ET1NfSEVBREVSLCAwKQ0KKyAgICAg ICAgaWYgRG9zSGRyLmVfbWFnaWMgPT0gc2VsZi5fdW5zaWduZWQoYidWWicpOg0KKyAgICAgICAg ICAgICMgVEUgaW1hZ2UNCisgICAgICAgICAgICBzZWxmLlRlSGRyID0gc2VsZi5fcmVhZF9jdHlw ZShFRklfVEVfSU1BR0VfSEVBREVSLCAwKQ0KKw0KKyAgICAgICAgICAgIHNlbGYuVGVBZGp1c3Qg PSBzaXplb2Yoc2VsZi5UZUhkcikgLSBzZWxmLlRlSGRyLlN0cmlwcGVkU2l6ZQ0KKyAgICAgICAg ICAgIHNlbGYuTWFjaGluZSA9IGltYWdlX21hY2hpbmVfZGljdC5nZXQoc2VsZi5UZUhkci5NYWNo aW5lLCBOb25lKQ0KKyAgICAgICAgICAgIHNlbGYuU3Vic3lzdGVtID0gc2VsZi5UZUhkci5TdWJz eXN0ZW0NCisgICAgICAgICAgICBzZWxmLkFkZHJlc3NPZkVudHJ5UG9pbnQgPSBzZWxmLlRlSGRy LkFkZHJlc3NPZkVudHJ5UG9pbnQNCisNCisgICAgICAgICAgICBkZWJ1Z19kaXJfc2l6ZSA9IHNl bGYuVGVIZHIuRGF0YURpcmVjdG9yeURlYnVnLlNpemUNCisgICAgICAgICAgICBkZWJ1Z19kaXJf b2Zmc2V0ID0gKHNlbGYuVGVBZGp1c3QgKw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2VsZi5UZUhkci5EYXRhRGlyZWN0b3J5RGVidWcuVmlydHVhbEFkZHJlc3MpDQorICAgICAg ICBlbHNlOg0KKyAgICAgICAgICAgIGlmIERvc0hkci5lX21hZ2ljID09IHNlbGYuX3Vuc2lnbmVk KGInTVonKToNCisgICAgICAgICAgICAgICAgc2VsZi5lX2xmYW5ldyA9IERvc0hkci5lX2xmYW5l dw0KKyAgICAgICAgICAgIGVsc2U6DQorICAgICAgICAgICAgICAgIHNlbGYuZV9sZmFuZXcgPSAw DQorDQorICAgICAgICAgICAgc2VsZi5QZUhkciA9IHNlbGYuX3JlYWRfY3R5cGUoDQorICAgICAg ICAgICAgICAgIEVGSV9JTUFHRV9OVF9IRUFERVJTNjQsIHNlbGYuZV9sZmFuZXcpDQorICAgICAg ICAgICAgaWYgc2VsZi5QZUhkci5TaWduYXR1cmUgIT0gc2VsZi5fdW5zaWduZWQoYidQRVwwXDAn KToNCisgICAgICAgICAgICAgICAgcmV0dXJuIEZhbHNlDQorDQorICAgICAgICAgICAgaWYgc2Vs Zi5QZUhkci5PcHRpb25hbEhlYWRlci5NYWdpYyA9PSBcDQorICAgICAgICAgICAgICAgICAgICBF RklfSU1BR0VfTlRfT1BUSU9OQUxfSERSMzJfTUFHSUM6DQorICAgICAgICAgICAgICAgIHNlbGYu UGVIZHIgPSBzZWxmLl9yZWFkX2N0eXBlKA0KKyAgICAgICAgICAgICAgICAgICAgRUZJX0lNQUdF X05UX0hFQURFUlMzMiwgc2VsZi5lX2xmYW5ldykNCisNCisgICAgICAgICAgICBpZiBzZWxmLlBl SGRyLk9wdGlvbmFsSGVhZGVyLk51bWJlck9mUnZhQW5kU2l6ZXMgPD0gXA0KKyAgICAgICAgICAg ICAgICAgICAgRElSRUNUT1JZX0RFQlVHOg0KKyAgICAgICAgICAgICAgICByZXR1cm4gRmFsc2UN CisNCisgICAgICAgICAgICBzZWxmLk1hY2hpbmUgPSBpbWFnZV9tYWNoaW5lX2RpY3QuZ2V0KA0K KyAgICAgICAgICAgICAgICBzZWxmLlBlSGRyLkZpbGVIZWFkZXIuTWFjaGluZSwgTm9uZSkNCisg ICAgICAgICAgICBzZWxmLlN1YnN5c3RlbSA9IHNlbGYuUGVIZHIuT3B0aW9uYWxIZWFkZXIuU3Vi c3lzdGVtDQorICAgICAgICAgICAgc2VsZi5BZGRyZXNzT2ZFbnRyeVBvaW50ID0gXA0KKyAgICAg ICAgICAgICAgICBzZWxmLlBlSGRyLk9wdGlvbmFsSGVhZGVyLkFkZHJlc3NPZkVudHJ5UG9pbnQN CisgICAgICAgICAgICBzZWxmLlRlQWRqdXN0ID0gMA0KKw0KKyAgICAgICAgICAgIGRlYnVnX2Rp cl9zaXplID0gc2VsZi5QZUhkci5PcHRpb25hbEhlYWRlci5EYXRhRGlyZWN0b3J5Ww0KKyAgICAg ICAgICAgICAgICBESVJFQ1RPUllfREVCVUddLlNpemUNCisgICAgICAgICAgICBkZWJ1Z19kaXJf b2Zmc2V0ID0gc2VsZi5QZUhkci5PcHRpb25hbEhlYWRlci5EYXRhRGlyZWN0b3J5Ww0KKyAgICAg ICAgICAgICAgICBESVJFQ1RPUllfREVCVUddLlZpcnR1YWxBZGRyZXNzDQorDQorICAgICAgICBp ZiBzZWxmLk1hY2hpbmUgaXMgTm9uZSBvciBzZWxmLlN1YnN5c3RlbSBub3QgaW4gWzAsIDEwLCAx MSwgMTJdOg0KKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KKw0KKyAgICAgICAgc2VsZi5BZGRy ZXNzT2ZFbnRyeVBvaW50ICs9IHNlbGYuTG9hZEFkZHJlc3MNCisNCisgICAgICAgIHNlbGYuc2Vj dGlvbnMoKQ0KKyAgICAgICAgcmV0dXJuIHNlbGYucHJvY2Vzc0RlYnVnRGlyRW50cnkoZGVidWdf ZGlyX29mZnNldCwgZGVidWdfZGlyX3NpemUpDQorDQorICAgIGRlZiBzZWN0aW9ucyhzZWxmKToN CisgICAgICAgICcnJ1BhcnNlIHRoZSBQRS9DT0ZGIChURSkgc2VjdGlvbiB0YWJsZScnJw0KKyAg ICAgICAgaWYgc2VsZi5TZWN0aW9ucyBpcyBub3QgTm9uZToNCisgICAgICAgICAgICByZXR1cm4N CisgICAgICAgIGVsaWYgc2VsZi5UZUhkciBpcyBub3QgTm9uZToNCisgICAgICAgICAgICBzZWxm Lk51bWJlck9mU2VjdGlvbnMgPSBzZWxmLlRlSGRyLk51bWJlck9mU2VjdGlvbnMNCisgICAgICAg ICAgICBvZmZzZXQgPSBzaXplb2YoRUZJX1RFX0lNQUdFX0hFQURFUikNCisgICAgICAgIGVsaWYg c2VsZi5QZUhkciBpcyBub3QgTm9uZToNCisgICAgICAgICAgICBzZWxmLk51bWJlck9mU2VjdGlv bnMgPSBzZWxmLlBlSGRyLkZpbGVIZWFkZXIuTnVtYmVyT2ZTZWN0aW9ucw0KKyAgICAgICAgICAg IG9mZnNldCA9IHNpemVvZihjX3VpbnQzMikgKyBcDQorICAgICAgICAgICAgICAgIHNpemVvZihF RklfSU1BR0VfRklMRV9IRUFERVIpDQorICAgICAgICAgICAgb2Zmc2V0ICs9IHNlbGYuUGVIZHIu RmlsZUhlYWRlci5TaXplT2ZPcHRpb25hbEhlYWRlcg0KKyAgICAgICAgICAgIG9mZnNldCArPSBz ZWxmLmVfbGZhbmV3DQorICAgICAgICBlbHNlOg0KKyAgICAgICAgICAgIHJldHVybg0KKw0KKyAg ICAgICAgc2VsZi5TZWN0aW9ucyA9IEVGSV9JTUFHRV9TRUNUSU9OX0hFQURFUiAqIHNlbGYuTnVt YmVyT2ZTZWN0aW9ucw0KKyAgICAgICAgc2VsZi5TZWN0aW9ucyA9IHNlbGYuX3JlYWRfY3R5cGUo c2VsZi5TZWN0aW9ucywgb2Zmc2V0KQ0KKw0KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uoc2VsZi5O dW1iZXJPZlNlY3Rpb25zKToNCisgICAgICAgICAgICBuYW1lID0gc3RyKHNlbGYuU2VjdGlvbnNb aV0uTmFtZSwgJ2FzY2lpJywgJ2lnbm9yZScpDQorICAgICAgICAgICAgYWRkciA9IHNlbGYuU2Vj dGlvbnNbaV0uVmlydHVhbEFkZHJlc3MNCisgICAgICAgICAgICBhZGRyICs9IHNlbGYuTG9hZEFk ZHJlc3MgKyBzZWxmLlRlQWRqdXN0DQorICAgICAgICAgICAgaWYgbmFtZSA9PSAnLnRleHQnOg0K KyAgICAgICAgICAgICAgICBzZWxmLlRleHRBZGRyZXNzID0gYWRkcg0KKyAgICAgICAgICAgIGVs aWYgbmFtZSA9PSAnLmRhdGEnOg0KKyAgICAgICAgICAgICAgICBzZWxmLkRhdGFBZGRyZXNzID0g YWRkcg0KKw0KKyAgICAgICAgICAgIGVuZF9hZGRyID0gYWRkciArIHNlbGYuU2VjdGlvbnNbaV0u VmlydHVhbFNpemUgLSAxDQorICAgICAgICAgICAgaWYgZW5kX2FkZHIgPiBzZWxmLkVuZExvYWRB ZGRyZXNzOg0KKyAgICAgICAgICAgICAgICBzZWxmLkVuZExvYWRBZGRyZXNzID0gZW5kX2FkZHIN CisNCisgICAgZGVmIHNlY3Rpb25zX3RvX3N0cihzZWxmKToNCisgICAgICAgICMgcmV0dXJuIHRl eHQgc3VtbWFyeSBvZiBzZWN0aW9ucw0KKyAgICAgICAgIyBuYW1lIHZpcnQgYWRkciAodmlydCBz aXplKSBmbGFnczpDaGFyYWN0ZXJpc3RpY3MNCisgICAgICAgIHJlc3VsdCA9ICcnDQorICAgICAg ICBmb3IgaSBpbiByYW5nZShzZWxmLk51bWJlck9mU2VjdGlvbnMpOg0KKyAgICAgICAgICAgIG5h bWUgPSBzdHIoc2VsZi5TZWN0aW9uc1tpXS5OYW1lLCAnYXNjaWknLCAnaWdub3JlJykNCisgICAg ICAgICAgICByZXN1bHQgKz0gZid7bmFtZTo4c30gJw0KKyAgICAgICAgICAgIHJlc3VsdCArPSBm JzB4e3NlbGYuU2VjdGlvbnNbaV0uVmlydHVhbEFkZHJlc3M6MDhYfSAnDQorICAgICAgICAgICAg cmVzdWx0ICs9IGYnKDB4e3NlbGYuU2VjdGlvbnNbaV0uVmlydHVhbFNpemU6MDVYfSkgJw0KKyAg ICAgICAgICAgIHJlc3VsdCArPSBmJ2ZsYWdzOjB4e3NlbGYuU2VjdGlvbnNbaV0uQ2hhcmFjdGVy aXN0aWNzOjA4WH1cbicNCisNCisgICAgICAgIHJldHVybiByZXN1bHQNCisNCisgICAgZGVmIGRp cmVjdG9yeV90b19zdHIoc2VsZik6DQorICAgICAgICByZXN1bHQgPSAnJw0KKyAgICAgICAgaWYg c2VsZi5UZUhkcjoNCisgICAgICAgICAgICBkZWJ1Z19zaXplID0gc2VsZi5UZUhkci5EYXRhRGly ZWN0b3J5RGVidWcuU2l6ZQ0KKyAgICAgICAgICAgIGlmIGRlYnVnX3NpemUgPiAwOg0KKyAgICAg ICAgICAgICAgICBkZWJ1Z19vZmZzZXQgPSAoc2VsZi5UZUFkanVzdA0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKyBzZWxmLlRlSGRyLkRhdGFEaXJlY3RvcnlEZWJ1Zy5WaXJ0dWFs QWRkcmVzcykNCisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGYiRGVidWcgMHh7ZGVidWdfb2Zm c2V0OjA4WH0gMHh7ZGVidWdfc2l6ZX1cbiINCisNCisgICAgICAgICAgICByZWxvY2F0aW9uX3Np emUgPSBzZWxmLlRlSGRyLkRhdGFEaXJlY3RvcnlCYXNlUmVsb2MuU2l6ZQ0KKyAgICAgICAgICAg IGlmIHJlbG9jYXRpb25fc2l6ZSA+IDA6DQorICAgICAgICAgICAgICAgIHJlbG9jYXRpb25fb2Zm c2V0ID0gKA0KKyAgICAgICAgICAgICAgICAgICAgc2VsZi5UZUFkanVzdA0KKyAgICAgICAgICAg ICAgICAgICAgKyBzZWxmLlRlSGRyLkRhdGFEaXJlY3RvcnlCYXNlUmVsb2MuVmlydHVhbEFkZHJl c3MpDQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmJ1JlbG9jYXRpb24gMHh7cmVsb2NhdGlv bl9vZmZzZXQ6MDhYfSAnDQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmJyAweHtyZWxvY2F0 aW9uX3NpemV9XG4nDQorDQorICAgICAgICBlbGlmIHNlbGYuUGVIZHI6DQorICAgICAgICAgICAg Zm9yIGkgaW4gcmFuZ2Uoc2VsZi5QZUhkci5PcHRpb25hbEhlYWRlci5OdW1iZXJPZlJ2YUFuZFNp emVzKToNCisgICAgICAgICAgICAgICAgc2l6ZSA9IHNlbGYuUGVIZHIuT3B0aW9uYWxIZWFkZXIu RGF0YURpcmVjdG9yeVtpXS5TaXplDQorICAgICAgICAgICAgICAgIGlmIHNpemUgPT0gMDoNCisg ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQorDQorICAgICAgICAgICAgICAgIHZpcnRfYWRk ciA9IHNlbGYuUGVIZHIuT3B0aW9uYWxIZWFkZXIuRGF0YURpcmVjdG9yeVsNCisgICAgICAgICAg ICAgICAgICAgIGldLlZpcnR1YWxBZGRyZXNzDQorICAgICAgICAgICAgICAgIG5hbWUgPSBzZWxm LmRpcl9uYW1lLmdldChpLCAnPycpDQorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBmJ3tuYW1l OnN9IDB4e3ZpcnRfYWRkcjowOFh9IDB4e3NpemU6WH1cbicNCisNCisgICAgICAgIHJldHVybiBy ZXN1bHQNCisNCisgICAgZGVmIHByb2Nlc3NEZWJ1Z0RpckVudHJ5KHNlbGYsIHZpcnRfYWRkcmVz cywgdmlydF9zaXplKToNCisgICAgICAgICIiIlByb2Nlc3MgUEUvQ09GRiBEZWJ1ZyBEaXJlY3Rv cnkgRW50cnkiIiINCisgICAgICAgIGlmICh2aXJ0X2FkZHJlc3MgPT0gMCBvcg0KKyAgICAgICAg ICAgICAgICB2aXJ0X3NpemUgPCBzaXplb2YoRUZJX0lNQUdFX0RFQlVHX0RJUkVDVE9SWV9FTlRS WSkpOg0KKyAgICAgICAgICAgIHJldHVybiBGYWxzZQ0KKw0KKyAgICAgICAgZGF0YSA9IGJ5dGVh cnJheShzZWxmLl9yZWFkX29mZnNldCh2aXJ0X3NpemUsIHZpcnRfYWRkcmVzcykpDQorICAgICAg ICBmb3Igb2Zmc2V0IGluIHJhbmdlKDAsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZp cnRfc2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKEVGSV9JTUFHRV9E RUJVR19ESVJFQ1RPUllfRU5UUlkpKToNCisgICAgICAgICAgICBEaXJlY3RvcnlFbnRyeSA9IEVG SV9JTUFHRV9ERUJVR19ESVJFQ1RPUllfRU5UUlkuZnJvbV9idWZmZXIoDQorICAgICAgICAgICAg ICAgIGRhdGFbb2Zmc2V0Ol0pDQorICAgICAgICAgICAgaWYgRGlyZWN0b3J5RW50cnkuVHlwZSAh PSAyOg0KKyAgICAgICAgICAgICAgICBjb250aW51ZQ0KKw0KKyAgICAgICAgICAgIGVudHJ5ID0g c2VsZi5fcmVhZF9vZmZzZXQoDQorICAgICAgICAgICAgICAgIERpcmVjdG9yeUVudHJ5LlNpemVP ZkRhdGEsIERpcmVjdG9yeUVudHJ5LlJWQSArIHNlbGYuVGVBZGp1c3QpDQorICAgICAgICAgICAg c2VsZi5Db2RlVmlld1NpZyA9IGVudHJ5Wzo0XQ0KKyAgICAgICAgICAgIGlmIHNlbGYuQ29kZVZp ZXdTaWcgPT0gYidNVE9DJzoNCisgICAgICAgICAgICAgICAgc2VsZi5Db2RlVmlld1V1aWQgPSB1 dWlkLlVVSUQoYnl0ZXNfbGU9ZW50cnlbNDo0KzE2XSkNCisgICAgICAgICAgICAgICAgUGRiT2Zm c2V0ID0gMjANCisgICAgICAgICAgICBlbGlmIHNlbGYuQ29kZVZpZXdTaWcgPT0gYidSU0RTJzoN CisgICAgICAgICAgICAgICAgc2VsZi5Db2RlVmlld1V1aWQgPSB1dWlkLlVVSUQoYnl0ZXNfbGU9 ZW50cnlbNDo0KzE2XSkNCisgICAgICAgICAgICAgICAgUGRiT2Zmc2V0ID0gMjQNCisgICAgICAg ICAgICBlbGlmIHNlbGYuQ29kZVZpZXdTaWcgPT0gYidOQjEwJzoNCisgICAgICAgICAgICAgICAg UGRiT2Zmc2V0ID0gMTYNCisgICAgICAgICAgICBlbHNlOg0KKyAgICAgICAgICAgICAgICBjb250 aW51ZQ0KKw0KKyAgICAgICAgICAgICMgY2FuJ3QgZmluZCBkb2N1bWVudGF0aW9uIGFib3V0IFBk YiBzdHJpbmcgZW5jb2Rpbmc/DQorICAgICAgICAgICAgIyBndWVzc2luZyB1dGYtOCBzaW5jZSB0 aGF0IHdpbGwgbWF0Y2ggZmlsZSBzeXN0ZW1zIGluIG1hY09TDQorICAgICAgICAgICAgIyBhbmQg TGludXggV2luZG93cyBpcyBVVEYtMTYsIG9yIEFOU0kgYWRqdXN0ZWQgZm9yIGxvY2FsLg0KKyAg ICAgICAgICAgICMgV2UgbWlnaHQgbmVlZCBhIGRpZmZlcmVudCB2YWx1ZSBmb3IgV2luZG93cyBo ZXJlPw0KKyAgICAgICAgICAgIHNlbGYuQ29kZVZpZXdQZGIgPSBlbnRyeVtQZGJPZmZzZXQ6XS5z cGxpdChiJ1x4MDAnKVsNCisgICAgICAgICAgICAgICAgMF0uZGVjb2RlKCd1dGYtOCcpDQorICAg ICAgICAgICAgcmV0dXJuIFRydWUNCisgICAgICAgIHJldHVybiBGYWxzZQ0KKw0KKw0KK2RlZiBt YWluKCk6DQorICAgICcnJ1Byb2Nlc3MgYXJndW1lbnRzIGFzIFBFL0NPRkYgZmlsZXMnJycNCisg ICAgZm9yIGZuYW1lIGluIHN5cy5hcmd2WzE6XToNCisgICAgICAgIHdpdGggb3BlbihmbmFtZSwg J3JiJykgYXMgZjoNCisgICAgICAgICAgICBpbWFnZSA9IFBlVGVJbWFnZShmKQ0KKyAgICAgICAg ICAgIHByaW50KGltYWdlKQ0KKyAgICAgICAgICAgIHJlcyA9IGYnRW50cnlQb2ludCA9IDB4e2lt YWdlLkFkZHJlc3NPZkVudHJ5UG9pbnQ6MDh4fSAgJw0KKyAgICAgICAgICAgIHJlcyArPSBmJ1Rl eHRBZGRyZXNzID0gMHh7aW1hZ2UuVGV4dEFkZHJlc3M6MDh4fSAnDQorICAgICAgICAgICAgcmVz ICs9IGYnRGF0YUFkZHJlc3MgPSAweHtpbWFnZS5EYXRhQWRkcmVzczowOHh9Jw0KKyAgICAgICAg ICAgIHByaW50KHJlcykNCisgICAgICAgICAgICBwcmludChpbWFnZS5zZWN0aW9uc190b19zdHIo KSkNCisgICAgICAgICAgICBwcmludCgnRGF0YSBEaXJlY3RvcmllczonKQ0KKyAgICAgICAgICAg IHByaW50KGltYWdlLmRpcmVjdG9yeV90b19zdHIoKSkNCisNCisNCitpZiBfX25hbWVfXyA9PSAi X19tYWluX18iOg0KKyAgICBtYWluKCkNCi0tIA0KMi4zNC4xDQoNCg==