From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by mx.groups.io with SMTP id smtpd.web09.10193.1636684934326589995 for ; Thu, 11 Nov 2021 18:42:15 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=NEUSpZ+s; spf=pass (domain: intel.com, ip: 134.134.136.31, mailfrom: jiewen.yao@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10165"; a="293886106" X-IronPort-AV: E=Sophos;i="5.87,227,1631602800"; d="scan'208";a="293886106" Received: from orsmga006.jf.intel.com ([10.7.209.51]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 11 Nov 2021 18:42:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.87,227,1631602800"; d="scan'208";a="452980708" Received: from orsmsx606.amr.corp.intel.com ([10.22.229.19]) by orsmga006.jf.intel.com with ESMTP; 11 Nov 2021 18:42:13 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX606.amr.corp.intel.com (10.22.229.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 11 Nov 2021 18:42:13 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 11 Nov 2021 18:42:13 -0800 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (104.47.73.49) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Thu, 11 Nov 2021 18:42:12 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=RQ9TpvAkxgVQxo24Np2N5xMDHXhDigOinnF4VtJPBb1kcCdrqXJl8XClty+1ePaNmShlcaVQLQah+GUksLmxKN8zrHptyy5J27251jRbcwM4b/DkWpDiuchuQpbCRJTTpP4sqldoqOzI+riyA7IAV3NLvmnZ4npwntljH0IgTTmnj2U90K9WTuZVUamxaKXijYpzOMqoNoa/OoMjV8TvLnjtnmsi2jzyOCtCCx+iBkBxd1u9KDoYF/RaSEZyBTRnjRpDQ2vl1jQZ5gyv+SZAWDzGocCrObT0Hy8i6h2xlA7FCFS2Ce9t4T4b+9/nLve6hZ4YkYGXARuRE3TG1weovg== 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=GYTlhNtirL5gWnQUOGCwRjc0WTthGnZzMmu/EaiWccg=; b=HZTEu2ukjna3SIOOuQ5WCBmnhieJHt97UY9bSzc0No3YDO0X/3yNe3hv6EaiGOOs6lRCMrBexiucGM9aPrDmlWOHe0cbvVtoq01j+ESXhfij+54FUxJi5rO0Ylw7oUaK0VFQ1ZLu7J4sbT+o5zk9lOBeG+d19vy7do0psqo2+jEPm8nh6KZKruI9VxQJOv6OVAmG8xOhEX6miMCBSCfP4zrGTMg5nF4/aBLjCzyhq7EnbitLLe7f51UcASHsFiZgN+q5/qko5P5KCQKGTHmVcoKl4OiE59bCowBPTqk4oStHtf66v6SgpACAHoHPgQ7OVyddjGQp4GC0kbIufZnF6g== 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 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=GYTlhNtirL5gWnQUOGCwRjc0WTthGnZzMmu/EaiWccg=; b=NEUSpZ+saiazJom0fYXHoFGXkHDQEUprt+6cyfiA74hb1D60XnB2iTemp0wx0TjNz49oXQRqrRWiXt4Y76fZWRrfT1kpSIRTOvMyQhK6ijCVMTwCnG7sLmWa4+HuHSDAC9uJI9VCEbYVPlZzxpr9yd2Gy6yPi+Wb2RTf6L7ZAGY= Received: from PH0PR11MB4885.namprd11.prod.outlook.com (2603:10b6:510:35::14) by PH7PR11MB5768.namprd11.prod.outlook.com (2603:10b6:510:131::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4669.13; Fri, 12 Nov 2021 02:42:11 +0000 Received: from PH0PR11MB4885.namprd11.prod.outlook.com ([fe80::c5cb:e37a:9f3:8f80]) by PH0PR11MB4885.namprd11.prod.outlook.com ([fe80::c5cb:e37a:9f3:8f80%6]) with mapi id 15.20.4669.016; Fri, 12 Nov 2021 02:42:11 +0000 From: "Yao, Jiewen" To: "Xu, Min M" , Erdem Aktas CC: "devel@edk2.groups.io" , "Kinney, Michael D" , Liming Gao , "Liu, Zhiguang" , Brijesh Singh , James Bottomley , Tom Lendacky , Gerd Hoffmann Subject: Re: [PATCH V3 02/29] MdePkg: Add TdxLib to wrap Tdx operations Thread-Topic: [PATCH V3 02/29] MdePkg: Add TdxLib to wrap Tdx operations Thread-Index: AQHX125qhnO60COM/EGcMNwCj8A61Kv/LqKg Date: Fri, 12 Nov 2021 02:42:11 +0000 Message-ID: References: <232162e8ee92888f7ac9795ee9baa331ea39c613.1635769996.git.min.m.xu@intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.6.200.16 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 13a52f43-731f-475c-2743-08d9a5860759 x-ms-traffictypediagnostic: PH7PR11MB5768: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ggCYy66aqocLelQDHGHNpAPKAKr6lpNy7tfIYwOBHfNhZL1p35/hyFUwR2OFMx0/PBiJcNPan6HTL8WwIR8LSN/2CXcoL7MpkGadR/R53PgpKxJXsUi11VhwpMFpESYFyZOVs/FEtRC7HVGvbSlXV1+na+vbFL9QtKTO9vQfwXUqFjEUgrXdF/Sm22XMXRZWihDHqC4Pe5hOBX7OVbGBYeP4hAH9FQE7zL7p8wFVb957BOT/v+McPFLXJ24vhHa2+X9OhJ1U15RltLb+m7d+NFVFhxWx2FVVsZ9NAjR2Qqg8gnf41KuvRL45ZBsG7VdGRuw76tpUx0sHuxWXgVr++Y9+n5bqLdnnKmBjhk2onl/OPLNGa/f6QMB3ESo4q7xEG/iCieqG9kqQKAG7trYNWFMPHDibyAnkuizZjquCDsJSQZhG8saqJqt6krzDaUjUDJZD+OfCdGevOZoCAevTQHIU44kHcVU/r3aERMJOPkNKzOLJStdyNQL2Y4sxabIrE1/fvPYSNgzwFbjWIp0WAr9bIy+g7+2khYhTiD54NfqPd3G7HqvEsinUDEdr/GqjsY6q6GBUjYFnubWUwY8gdMLW+zD8jzXoicI/cQEcT/HZ7jmif8oVcEbVQXcedUH3ET7UF9eHAt0u73CHnzkbbwXaPEzJTX3RBq5nedGfO4kRE6X2Opleb2WeLAUUbN5EYw3Heh/a+h8SerUfTsJ+Vk0YLH5SwhrYtNGDHtb23AL6y+g4xBvmFXe3+ELhE67PDqTcilESSXhSc3717FvqG4I1tIlB+zTtgufpB/5rV9CNoNmzcHEILuTzwZ0966e9d8KDeb3i9fBxcuFILZBmYg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PH0PR11MB4885.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(366004)(2906002)(52536014)(53546011)(26005)(186003)(8936002)(4326008)(6506007)(508600001)(38100700002)(9686003)(86362001)(5660300002)(33656002)(82960400001)(7696005)(38070700005)(966005)(30864003)(110136005)(76116006)(316002)(54906003)(71200400001)(66446008)(83380400001)(66946007)(64756008)(8676002)(66556008)(122000001)(66476007)(55016002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VVhRSG5BRGJQNDBRb1g2TXlmODB3TlBDYVRUMUUvZlI4NjRlZWRhdHVYbWpI?= =?utf-8?B?QW40MXM3U2lpNWlJTWJtOW9GNmpBS2JJai81NXBKVW1Ma0ZGejZCY0FsdDhv?= =?utf-8?B?VG04VXROcm9WQ3RTbCtrbXpMUldmMjgzaDRTZkZmVlpWdWNYcFYwTG1TOHhH?= =?utf-8?B?WDF2TTA1djJ3cjhBMWdJTTg1N0hxY1R5ejkwc2dWMVpHVjh5OFJ1aEZ2MUtW?= =?utf-8?B?WDY1WCsyQkk5WU1wYzlkSUVPQ1UzWWJBcHpScmhqSkppNHhlVjJyV3E0VXVh?= =?utf-8?B?NmdwZ24wYmYzRnVZL0ZENDdhNS8xV2NUMUJ5MUpUTmwvL0RMTzRYMS9LSkc2?= =?utf-8?B?VkQ0S2FJS0NqcmltaTA2RWVLU2l4OXVRUm82NnlHOWt1MWVhNWUrR1FUTE9E?= =?utf-8?B?NkRydjQ2V3RvejVVZ3AxL0Uvdy9YdFVTM1AzU2VOanlLanNsNUVxK2NxNk12?= =?utf-8?B?SHFHT2dmWnp5MDRZN21VWnZjQUs2WG1TbmxiRzNwTEJQWjR5Z0J1bTZIS21Y?= =?utf-8?B?ZGxsbHVoZlh1M1ZOblpRbnZXUEVUa2ZINW9xMi8wUHlEbEZmSEJHV3hwNk9i?= =?utf-8?B?TVRTRUFuK1FmTEltRlVFT0FKQ04vdEJUcUJFUlJlNDVyUEw5VWJsL055Z0g5?= =?utf-8?B?Nmd0YlphbGlwZVo1eHJQS0NUZUxicU9vUFdPQTRuai83UEJFVHc1clVBZWNL?= =?utf-8?B?ZDNCTFl2bWI1b0VVSVc1WnhMZXRQYXlDODJ5VUtjN1pRQ0x2OG05VWpKUFRs?= =?utf-8?B?d2xKUUkrWWloUHNvTmdhLzdxZm81OENFVSs1YXREQXFKNUhkSXVCNFJNNXpO?= =?utf-8?B?Y3lJWmFSdlZqcXR0RUphLzVZOTdQbEl5QjJoWHNIcTQzMUFtZytnSTVzeWlO?= =?utf-8?B?WkNzNFM1dUdqRm8zaE40cHVhSnRFS1h5REhZUkVSTzFFVWhFR3daVlpiQ0pj?= =?utf-8?B?RWtOQ2k3a1lTV0F6WXBNWHpNUWhiQkJ0L1JTNi9yTjFkazg5SXBqaW9OcHNI?= =?utf-8?B?Tmp5bmJuM3EwYi8rdUd6aDdycVhsY1FScC9tWUM4dEVJT2EzcTNyaFl6ZGpZ?= =?utf-8?B?VXJxWk1wbitzd2ZFRFA4TElySGYzNVB1ajVlSDd3eEM5aTlTeFpmdW5ObC8w?= =?utf-8?B?bFZMNXF1bG4wSEdNS0pzTVlycVFUbXlKOStmdnA5QW93ZjI4dmNlWVVFc1ZZ?= =?utf-8?B?aElYZUFBazU2MEc1S2g3L1NYSlU0WStLTWRBREVmai9BK2didllOclV6dWVT?= =?utf-8?B?dElOczdEYkhXa2RVQ3hzWUpuc2NmYkFpZ3N1TU9hWTM3MU1ObmtaWjVkSUlX?= =?utf-8?B?OTNYZHR5dHJxMlUzRGg5ZGRhR3RkQXcxRXNaektsdW00WVVJWEgvcWxrckYx?= =?utf-8?B?c1lyYUVpVVFoSkJxbG1JbzNGbTN5UjJrSEVHTEpCWjdURmZYSGlTNStUZGVL?= =?utf-8?B?cWgxdGkwWFdxWjM3bHZlRGNMWVVxdEpqdzZ4MmsxSWJWL1RYTlMzeFAyMW1R?= =?utf-8?B?RzNXcVBNc0o4QTJKNzJwS3dQNDRkYTYwTUhMeHNVeVdIbERheWU0WC91VTJw?= =?utf-8?B?YWd2eE5CZ2xnNGRwLy9XdlBWU29QYzJCdFQrR0NUc29DRE5SK0Zrb1g5UElC?= =?utf-8?B?c1c0dVNwYXZBaVBEVEx5VjMycnBmdDZNN0tXcXBnaGdYcHo1RFlKK3c4QnBu?= =?utf-8?B?OFNKZ1VteTQxQjBlSmFrSWJ3cDlTMFg1SHhjVVFOYllZUHJEcWtPcGVlRXNT?= =?utf-8?B?c0dPN1pWWWFLeTh2K013aTF5Y1lyNlFTM0s0QlRSZndyR21vTUhLYUp4N1B2?= =?utf-8?B?WjRxOVV6bzl4TGwvZ2oyVDV6RkNTQ0Z5V1NUU0NQZXBhcC9vMDZlNGllOS9U?= =?utf-8?B?VjRYajdqQm5pam5RYWxiTWJQM1FNWXJXWDcvbEJiQXVra0tpY1ZCOTBZeGZY?= =?utf-8?B?WGZIQnQ1dTZTNUxiL2dNM3BqTkh2bXFEWVFSdjFML0o2QzZyT3N0OVVBMVlL?= =?utf-8?B?RzBXbnRrR1lwOEl4RDEvZy9LWENEYTRXak1OTTJWMmc3L2gxS2MyZ3IxaHF1?= =?utf-8?B?aE9nRzB3QnJ6K1BxbHF1VXQvWWhtRU5sMWlsd0NqdHcxbkErY2dPdUVZL3FP?= =?utf-8?B?cFQ3Q3Y2V2VRUWJUenlxMFJtL0xqcm5ORTYvRkVjM3pPZVYyS3U2b0RIYlU1?= =?utf-8?Q?LR6OD30JpmHT02fSfv8bJRo=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR11MB4885.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 13a52f43-731f-475c-2743-08d9a5860759 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Nov 2021 02:42:11.6154 (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: IroFqqCFFgScFGZtZTwXfv+eIuR2pYMhKRZxMlesaJG/NkC+gu2iDxxYF1VruOithUNW2pKSmfVDCvLMYJ46uA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR11MB5768 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 QlRXOiBJcyB0aGlzIGludGVybmFsIEFQST8NCkkgZmVlbCB3ZSBzaG91bGQgYWRkIEFTU0VSVCgp IGZvciBpbnZhbGlkIHBhZ2Ugc2l6ZSBhcyB3ZWxsLCB0byBjYXRjaCBpc3N1ZSBlYXJsaWVyLg0K DQpUaGFuayB5b3UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBYdSwg TWluIE0gPG1pbi5tLnh1QGludGVsLmNvbT4NCj4gU2VudDogRnJpZGF5LCBOb3ZlbWJlciAxMiwg MjAyMSAxMDozOSBBTQ0KPiBUbzogRXJkZW0gQWt0YXMgPGVyZGVtYWt0YXNAZ29vZ2xlLmNvbT4N Cj4gQ2M6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBLaW5uZXksIE1pY2hhZWwgRCA8bWljaGFlbC5k Lmtpbm5leUBpbnRlbC5jb20+Ow0KPiBMaW1pbmcgR2FvIDxnYW9saW1pbmdAYnlvc29mdC5jb20u Y24+OyBMaXUsIFpoaWd1YW5nDQo+IDx6aGlndWFuZy5saXVAaW50ZWwuY29tPjsgQnJpamVzaCBT aW5naCA8YnJpamVzaC5zaW5naEBhbWQuY29tPjsgSmFtZXMNCj4gQm90dG9tbGV5IDxqZWpiQGxp bnV4LmlibS5jb20+OyBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBUb20NCj4g TGVuZGFja3kgPFRob21hcy5MZW5kYWNreUBhbWQuY29tPjsgR2VyZCBIb2ZmbWFubiA8a3JheGVs QHJlZGhhdC5jb20+DQo+IFN1YmplY3Q6IFJFOiBbUEFUQ0ggVjMgMDIvMjldIE1kZVBrZzogQWRk IFRkeExpYiB0byB3cmFwIFRkeCBvcGVyYXRpb25zDQo+IA0KPiBPbiBOb3ZlbWJlciAxMCwgMjAy MSA2OjM4IFBNLCBFcmRlbSBBa3RhcyB3cm90ZToNCj4gPiBPbiBNb24sIE5vdiAxLCAyMDIxIGF0 IDY6MTYgQU0gTWluIFh1IDxtaW4ubS54dUBpbnRlbC5jb20+IHdyb3RlOg0KPiA+ID4NCj4gPiA+ IFJGQzogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0zNDI5 DQo+ID4gPg0KPiA+IC4uLi4NCj4gPiA+ICsqKi8NCj4gPiA+ICtVSU5UMzINCj4gPiA+ICtHZXRH cGFQYWdlTGV2ZWwgKA0KPiA+ID4gKyAgVUlOVDMyIFBhZ2VTaXplDQo+ID4gPiArICApDQo+ID4g PiArew0KPiA+ID4gKyAgVUlOVDMyIEluZGV4Ow0KPiA+ID4gKw0KPiA+ID4gKyAgZm9yIChJbmRl eCA9IDA7IEluZGV4IDwgQVJSQVlfU0laRSAobVRkeEFjY2VwdFBhZ2VMZXZlbE1hcCk7IEluZGV4 KyspDQo+ID4gew0KPiA+ID4gKyAgICBpZiAobVRkeEFjY2VwdFBhZ2VMZXZlbE1hcFtJbmRleF0g PT0gUGFnZVNpemUpIHsNCj4gPiA+ICsgICAgICBicmVhazsNCj4gPiA+ICsgICAgfQ0KPiA+ID4g KyAgfQ0KPiA+ID4gKw0KPiA+ID4gKyAgcmV0dXJuIEluZGV4ID09IEFSUkFZX1NJWkUgKG1UZHhB Y2NlcHRQYWdlTGV2ZWxNYXApID8gLTEgOiBJbmRleDsNCj4gPg0KPiA+IElzIHRoaXMgaW50ZW50 aW9uYWw/IFJldHVybmluZyBzaWduZWQgaW50ZWdlciBidXQgdGhlIGZ1bmN0aW9uIHJldHVybnMN Cj4gPiB1bnNpZ25lZCBpbnRlZ2VyLg0KPiBBaCwgLTEgc2hvdWxkIG5vdCBiZSByZXR1cm5lZCBi ZWNhdXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zIHVuc2lnbmVkIGludGVnZXIuDQo+IEl0IHdpbGwg YmUgZml4ZWQgaW4gdGhlIG5leHQgdmVyc2lvbiBsaWtlIHRoaXM6DQo+IA0KPiBVSU5UMzIgIG1U ZHhBY2NlcHRQYWdlTGV2ZWxNYXBbMl0gPSB7DQo+ICAgU0laRV80S0IsDQo+ICAgU0laRV8yTUIN Cj4gfTsNCj4gI2RlZmluZSBJTlZBTElEX0FDQ0VQVF9QQUdFTEVWRUwgIEFSUkFZX1NJWkUobVRk eEFjY2VwdFBhZ2VMZXZlbE1hcCkNCj4gDQo+IFVJTlQzMg0KPiBHZXRHcGFQYWdlTGV2ZWwgKA0K PiAgIFVJTlQzMiBQYWdlU2l6ZQ0KPiAgICkNCj4gew0KPiAgIFVJTlQzMiBJbmRleDsNCj4gICBm b3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpFIChtVGR4QWNjZXB0UGFnZUxldmVsTWFw KTsgSW5kZXgrKykgew0KPiAgICAgaWYgKG1UZHhBY2NlcHRQYWdlTGV2ZWxNYXBbSW5kZXhdID09 IFBhZ2VTaXplKSB7DQo+ICAgICAgIGJyZWFrOw0KPiAgICAgfQ0KPiAgIH0NCj4gICByZXR1cm4g SW5kZXg7DQo+IH0NCj4gLi4uIC4uLg0KPiAgIEdwYVBhZ2VMZXZlbCA9IEdldEdwYVBhZ2VMZXZl bCAoUGFnZVNpemUpOw0KPiAgIGlmIChHcGFQYWdlTGV2ZWwgPT0gSU5WQUxJRF9BQ0NFUFRfUEFH RUxFVkVMKSB7DQo+ICAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiQWNjZXB0IHBhZ2Ugc2l6ZSBt dXN0IGJlIDRLLzJNLiBJbnZhbGlkIHBhZ2Ugc2l6ZSAtDQo+IDB4JWxseFxuIiwgUGFnZVNpemUp KTsNCj4gICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ICAgfQ0KPiA+DQo+ID4g Ky8qKg0KPiA+ICsgIFRoaXMgZnVuY3Rpb24gYWNjZXB0cyBhIHBlbmRpbmcgcHJpdmF0ZSBwYWdl LCBhbmQgaW5pdGlhbGl6ZSB0aGUgcGFnZQ0KPiA+ICt0bw0KPiA+ICsgIGFsbC0wIHVzaW5nIHRo ZSBURCBlcGhlbWVyYWwgcHJpdmF0ZSBrZXkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIFN0 YXJ0QWRkcmVzcyAgICAgR3Vlc3QgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGUgcHJpdmF0ZSBwYWdl DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBhY2NlcHQuDQo+ID4gKyAg QHBhcmFtW2luXSAgTnVtYmVyT2ZQYWdlcyAgICBOdW1iZXIgb2YgdGhlIHBhZ2VzIHRvIGJlIGFj Y2VwdGVkLg0KPiA+ICsgIEBwYXJhbVtpbl0gIFBhZ2VTaXplICAgICAgICAgR1BBIHBhZ2Ugc2l6 ZS4gQWNjZXB0IDFHLzJNLzRLIHBhZ2Ugc2l6ZS4NCj4gPg0KPiA+IFRoZSBjb21tZW50IHNheXMg dGhhdCAxRyBpcyBhY2NlcHRhYmxlIGJ1dCB0aGUgY29kZSBvbmx5IGFjY2VwdHMgMk0gb3IgNEsN Cj4gPiBwYWdlIHNpemVzLg0KPiBDdXJyZW50bHkgMk0vNEsgYWNjZXB0IHBhZ2Ugc2l6ZSBpcyBz dXBwb3J0ZWQuIFRoZSBjb21tZW50cyB3aWxsIGJlIGZpeGVkIGluDQo+IHRoZSBuZXh0IHZlcnNp b24uDQo+ID4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBFRklfU1VDQ0VTUw0KPiA+ID4gK0VGSV9T VEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtUZEFjY2VwdFBhZ2VzICgNCj4gPiA+ICsgIElO IFVJTlQ2NCAgU3RhcnRBZGRyZXNzLA0KPiA+ID4gKyAgSU4gVUlOVDY0ICBOdW1iZXJPZlBhZ2Vz LA0KPiA+ID4gKyAgSU4gVUlOVDMyICBQYWdlU2l6ZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4g PiA+ICsgIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ICsgIFVJTlQ2NCAgICAgIEFkZHJlc3M7 DQo+ID4gPiArICBVSU5UNjQgICAgICBUZHhTdGF0dXM7DQo+ID4gPiArICBVSU5UNjQgICAgICBJ bmRleDsNCj4gPiA+ICsgIFVJTlQzMiAgICAgIEdwYVBhZ2VMZXZlbDsNCj4gPiA+ICsgIFVJTlQz MiAgICAgIFBhZ2VTaXplMjsNCj4gPiA+ICsNCj4gPiA+ICsgIEFkZHJlc3MgPSBTdGFydEFkZHJl c3M7DQo+ID4gPiArDQo+ID4gPiArICBHcGFQYWdlTGV2ZWwgPSBHZXRHcGFQYWdlTGV2ZWwgKFBh Z2VTaXplKTsgIGlmIChHcGFQYWdlTGV2ZWwgPT0gLTEpDQo+ID4gPiArIHsNCj4gPg0KPiA+IENv bXBhcmluZyB1bnNpZ25lZCBpbnQgdG8gc2lnbmVkIGludC4gSSBiZWxpZXZlIHRoaXMgc2hvdWxk IHdvcmsgd2l0aCBHQ0MNCj4gPiB3aXRoIHdhcm5pbmcgbWVzc2FnZXMuDQo+ID4gSnVzdCBjaGVj a2luZyBpZiB0aGlzIGlzIGludGVudGlvbmFsPw0KPiBJdCB3aWxsIGJlIGZpeGVkLiBTZWUgbXkg Zmlyc3QgY29tbWVudHMuDQo+ID4NCj4gPiA+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFj Y2VwdCBwYWdlIHNpemUgbXVzdCBiZSA0Sy8yTS4gSW52YWxpZCBwYWdlDQo+ID4gc2l6ZSAtIDB4 JWxseFxuIiwgUGFnZVNpemUpKTsNCj4gPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiA+ICsgIH0NCj4gPiA+ICsNCj4gPiA+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNT Ow0KPiA+ID4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgTnVtYmVyT2ZQYWdlczsgSW5kZXgr Kykgew0KPiA+ID4gKyAgICBUZHhTdGF0dXMgPSBUZENhbGwgKFREQ0FMTF9UREFDQ0VQVFBBR0Us IEFkZHJlc3MgfCBHcGFQYWdlTGV2ZWwsDQo+ID4gPiArIDAsIDAsIDApOw0KPiA+DQo+ID4gQWRk cmVzc1sxMTozXSBhbmQgWzYzOjUyXSBhcmUgcmVzZXJ2ZWQgYW5kIG11c3QgYmUgMC4gVGhlIGNv ZGUgZG9lcyBub3QNCj4gPiBjaGVjayBpdCwgc3BlYyBpcyBub3QgY2xlYXIgYWJvdXQgdGhlIGJl aGF2aW9yIGJ1dCBJIGFtIGFzc3VtaW5nIHRoYXQgaW4gdGhhdA0KPiA+IGNhc2UsIFREWF9PUEVS QU5EX0lOVkFMSUQgd2lsbCBiZSByZXR1cm5lZCBhcyBlcnJvciBjb2RlIGJ1dCBzaG91bGQgd2UN Cj4gPiBjaGVjayBhbmQgbG9nIGl0IHByb3Blcmx5Pw0KPiBSaWdodC4gVGhlIGlucHV0IGFkZHJl c3Mgc2hvdWxkIGJlIGNoZWNrZWQgd2l0aCBBZGRyZXNzWzExOjNdIGFuZCBbNjM6NTJdLg0KPiBB ZGRyZXNzWzI6MF0gc2hvdWxkIGJlIDAgdG9vLiBCZWNhdXNlIEFkZHJlc3NbMjowXSB3aWxsIGJl IHNldCB3aXRoIEFjY2VwdCBQYWdlDQo+IExldmVsLg0KPiBJdCB3aWxsIGJlIGZpeGVkIGluIHRo ZSBuZXh0IHZlcnNpb24uDQo+ID4NCj4gPiA+ICsgICAgaWYgKFRkeFN0YXR1cyAhPSBURFhfRVhJ VF9SRUFTT05fU1VDQ0VTUykgew0KPiA+ID4gKyAgICAgICAgaWYgKChUZHhTdGF0dXMgJiB+MHhG RkZGVUxMKSA9PQ0KPiA+IFREWF9FWElUX1JFQVNPTl9QQUdFX0FMUkVBRFlfQUNDRVBURUQpIHsN Cj4gPiA+ICsgICAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgICAgLy8gQWxyZWFkeSBhY2NlcHRl ZA0KPiA+ID4gKyAgICAgICAgICAvLw0KPiA+ID4gKyAgICAgICAgICBtTnVtYmVyT2ZEdXBsaWNh dGVkQWNjZXB0ZWRQYWdlcysrOw0KPiA+DQo+ID4gSXMgdGhlcmUgYW55IGxlZ2l0IGNhc2UgdGhh dCBhIHBhZ2Ugc2hvdWxkIGJlIGFjY2VwdGVkIHR3aWNlPyBMb29rcyBsaWtlIG90aGVyDQo+ID4g dGhhbiBkZWJ1ZyBwcmludGluZywgdGhpcyBpbmZvcm1hdGlvbiBpcyBpZ25vcmVkLg0KPiBJZGVh bGx5IGEgcGFnZSBzaG91bGQgYmUgYWNjZXB0ZWQgb25seSBvbmNlLiBCdXQgaWYgYSBwYWdlIGlz IGFjY2VwdGVkIHR3aWNlLCBpdCBpcw0KPiBub3QgYW4gZXJyb3IgKGZyb20gdGhlIHBlcnNwZWN0 aXZlIG9mIFRkQ2FsbF9BY2NlcHQpLiBJbiB0aGUgUG9DIHdlIGRvIHJhbiBpbnRvDQo+IHN1Y2gg Y2FzZXMgKGl0IGlzIGEgYnVnIGluIHRoZSBjb2RlKS4gU28gd2Uga2VlcCBpdCBhcyBkZWJ1ZyBw cmludGluZy4NCj4gPg0KPiA+ID4gKyAgICAgICAgICBERUJVRyAoKERFQlVHX1dBUk4sICJQYWdl IGF0IEFkZHJlc3MgKDB4JWxseCkgaGFzIGFscmVhZHkgYmVlbg0KPiA+IGFjY2VwdGVkLiAtICVk XG4iLCBBZGRyZXNzLCBtTnVtYmVyT2ZEdXBsaWNhdGVkQWNjZXB0ZWRQYWdlcykpOw0KPiA+ID4g KyAgICAgICAgfSBlbHNlIGlmICgoVGR4U3RhdHVzICYgfjB4RkZGRlVMTCkgPT0NCj4gPiBURFhf RVhJVF9SRUFTT05fUEFHRV9TSVpFX01JU01BVENIKSB7DQo+ID4gPiArICAgICAgICAgIC8vDQo+ ID4gPiArICAgICAgICAgIC8vIEdwYVBhZ2VMZXZlbCBpcyBtaXNtYXRjaCwgZmFsbCBiYWNrIHRv IGEgc21hbGxlciBHcGFQYWdlTGV2ZWwgaWYNCj4gPiBwb3NzaWJsZQ0KPiA+ID4gKyAgICAgICAg ICAvLw0KPiA+ID4gKyAgICAgICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICJBZGRyZXNzICVs bHggY2Fubm90IGJlIGFjY2VwdGVkIGluDQo+ID4gPiArIFBhZ2VMZXZlbCBvZiAlZFxuIiwgQWRk cmVzcywgR3BhUGFnZUxldmVsKSk7DQo+ID4gPiArDQo+ID4gPiArICAgICAgICAgIGlmIChHcGFQ YWdlTGV2ZWwgPT0gMCkgew0KPiA+ID4gKyAgICAgICAgICAgIC8vDQo+ID4gPiArICAgICAgICAg ICAgLy8gQ2Fubm90IGZhbGwgYmFjayB0byBzbWFsbGVyIHBhZ2UgbGV2ZWwNCj4gPiA+ICsgICAg ICAgICAgICAvLw0KPiA+DQo+ID4gQ291bGQgeW91IGhlbHAgbWUgdW5kZXJzdGFuZCB0aGlzPyBT byBpZiAsZm9yIHNvbWUgcmVhc29uLCBWTU0gbWFwcyBhDQo+ID4gMk1CIHByaXZhdGUgcGFnZSBh bmQgYSBndWVzdCB3YW50cyB0byBhY2NlcHQgaXQgaW4gNEtCIHBhZ2UgY2h1bmtzLCB0aGlzIHdp bGwNCj4gPiBhbHdheXMgZmFpbC4gSXMgaXQgbm90IGEgcG9zc2libGUgdXNlIGNhc2U/DQo+IEd1 ZXN0IHdhbnQgdG8gYWNjZXB0IHBhZ2Ugd2l0aCAyTSBzaXplLCBidXQgaW4gc29tZSBjYXNlLCB0 aGUgVk1NIGNhbm5vdCBkbw0KPiB0aGF0IHdpdGggMk0gcGFnZSBzaXplLiBJbiB0aGlzIGNhc2Us IEd1ZXN0IHdpbGwgZ2V0IGEgcmV0dXJuZWQgcmVzdWx0DQo+IChURFhfRVhJVF9SRUFTT05fUEFH RV9TSVpFX01JU01BVENIKSBmcm9tIHRoZSBUZENhbGwuIFNvIEd1ZXN0IGZhbGxzDQo+IGJhY2sg dG8gYWNjZXB0IHRoZSBwYWdlIHdpdGggYSBzbWFsbGVyIHBhZ2Ugc2l6ZS4gQ3VycmVudGx5IG9u bHkgMk0vNEsgYWNjZXB0DQo+IHBhZ2Ugc2l6ZSBpcyBzdXBwb3J0ZWQuIEluIHRoZSBmdXR1cmUs IDFHIGFjY2VwdCBwYWdlIHNpemUgd2lsbCBiZSBzdXBwb3J0ZWQuIEluDQo+IHRoYXQgY2FzZSwg dGhlcmUgbWF5IGJlIDIgZmFsbCBiYWNrczogMUctPjJNIGFuZCAyTS0+NEsuIEJ1dCBpZiB0aGUg YWNjZXB0IHBhZ2UNCj4gc2l6ZSBpcyA0SywgaXQgY2Fubm90IGZhbGwgYmFjayB0byBhIHNtYWxs ZXIgc2l6ZS4NCj4gR3Vlc3Qgc3RhcnQgdG8gYWNjZXB0IHBhZ2VzLCBWTU0ganVzdCByZXNwb25z ZSB0byB0aGUgYWNjZXB0IHBhZ2UgY29tbWFuZA0KPiBmcm9tIEd1ZXN0Lg0KPiA+DQo+ID4gPiAr ICAgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFjY2VwdFBhZ2UgY2Fubm90IGZhbGxi YWNrIGZyb20NCj4gPiBQYWdlTGV2ZWwgJWRcbiIsIEdwYVBhZ2VMZXZlbCkpOw0KPiA+ID4gKyAg ICAgICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsgICAgICAg ICAgICBicmVhazsNCj4gPiA+ICsgICAgICAgICAgfSBlbHNlIHsNCj4gPiA+ICsgICAgICAgICAg ICAvLw0KPiA+ID4gKyAgICAgICAgICAgIC8vIEZhbGwgYmFjayB0byBhIHNtYWxsZXIgcGFnZSBz aXplDQo+ID4gPiArICAgICAgICAgICAgLy8NCj4gPiA+ICsgICAgICAgICAgICBQYWdlU2l6ZTIg PSBtVGR4QWNjZXB0UGFnZUxldmVsTWFwIFtHcGFQYWdlTGV2ZWwgLSAxXTsNCj4gPiA+ICsgICAg ICAgICAgICBTdGF0dXMgPSBUZEFjY2VwdFBhZ2VzKEFkZHJlc3MsIDUxMiwgUGFnZVNpemUyKTsN Cj4gPiA+ICsgICAgICAgICAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gPiArICAg ICAgICAgICAgICBicmVhazsNCj4gPiA+ICsgICAgICAgICAgICB9DQo+ID4gPiArICAgICAgICAg IH0NCj4gPiA+ICsgICAgICAgIH1lbHNlIHsNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgICAgLy8N Cj4gPiA+ICsgICAgICAgICAgLy8gT3RoZXIgZXJyb3JzDQo+ID4gPiArICAgICAgICAgIC8vDQo+ ID4NCj4gPiBXaHkgbm90IGhhbmRsZSB0aGUgVERYX09QRVJBTkRfQlVTWT8gIEl0IGlzIG5vdCBh biBlcnJvciBhbmQgdGRhY2NlcHQNCj4gPiBuZWVkcyB0byBiZSByZXRpcmVkLCBJIGd1ZXNzLCBo YW5kbGluZyBpdCBsaWtlIGFuIGVycm9yIG1pZ2h0IGNhdXNlIHJlbGlhYmlsaXR5DQo+ID4gaXNz dWVzLg0KPiBUaGFua3MgZm9yIHJlbWluZGVyLiBJdCB3aWxsIGJlIGZpeGVkIGluIHRoZSBuZXh0 IHZlcnNpb24uDQo+ID4NCj4gPiA+ICsgICAgICAgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkFk ZHJlc3MgJWxseCAoJWQpIGZhaWxlZCB0byBiZSBhY2NlcHRlZC4NCj4gPiBFcnJvciA9IDB4JWxs eFxuIiwNCj4gPiA+ICsgICAgICAgICAgICBBZGRyZXNzLCBJbmRleCwgVGR4U3RhdHVzKSk7DQo+ ID4gPiArICAgICAgICAgIFN0YXR1cyA9IEVGSV9JTlZBTElEX1BBUkFNRVRFUjsNCj4gPiA+ICsg ICAgICAgICAgYnJlYWs7DQo+ID4gPiArICAgICAgICB9DQo+ID4gPiArICAgIH0NCj4gPiA+ICsg ICAgQWRkcmVzcyArPSBQYWdlU2l6ZTsNCj4gPiA+ICsgIH0NCj4gPiA+ICsgIHJldHVybiBTdGF0 dXM7DQo+ID4gPiArfQ0KPiA+DQo+ID4gLi4uLi4NCj4gPg0KPiA+ID4gKyoqLw0KPiA+ID4gK0VG SV9TVEFUVVMNCj4gPiA+ICtFRklBUEkNCj4gPiA+ICtUZEV4dGVuZFJ0bXIgKA0KPiA+ID4gKyAg SU4gIFVJTlQzMiAgKkRhdGEsDQo+ID4gPiArICBJTiAgVUlOVDMyICBEYXRhTGVuLA0KPiA+ID4g KyAgSU4gIFVJTlQ4ICAgSW5kZXgNCj4gPiA+ICsgICkNCj4gPiA+ICt7DQo+ID4gPiArICBFRklf U1RBVFVTICAgICAgICAgICAgU3RhdHVzOw0KPiA+ID4gKyAgVUlOVDY0ICAgICAgICAgICAgICAg IFRkQ2FsbFN0YXR1czsNCj4gPiA+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAqRXh0ZW5kQnVm ZmVyOw0KPiA+ID4gKw0KPiA+ID4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ID4gPiArDQo+ ID4gPiArICBBU1NFUlQgKERhdGEgIT0gTlVMTCk7DQo+ID4gPiArICBBU1NFUlQgKERhdGFMZW4g PT0gU0hBMzg0X0RJR0VTVF9TSVpFKTsgIEFTU0VSVCAoSW5kZXggPj0gMCAmJg0KPiA+ID4gKyBJ bmRleCA8IFJUTVJfQ09VTlQpOw0KPiA+ID4gKw0KPiA+DQo+ID4gQmVjYXVzZSBvZiB0aGUgQXNz ZXJ0cyBhYm92ZSAsIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uIHdpbGwgbmV2ZXIgcnVuLCByaWdo dD8NCj4gQVNTRVJUICgpIGlzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS4gSXQgd2lsbCBiZSBpZ25v cmVkIGluIHJlbGVhc2UgbW9kZS4gU28gdGhlDQo+IGZvbGxvd2luZyBjb25kaXRpb24gd2lsbCBy dW4gaW4gcmVsZWFzZSBtb2RlLg0KPiBTZWUNCj4gaHR0cHM6Ly9naXRodWIuY29tL3RpYW5vY29y ZS9lZGsyL2Jsb2IvbWFzdGVyL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvRGVidQ0KPiBnTGliLmgj TDM4NS1MNDA5DQo+ID4NCj4gPiA+ICsgIGlmIChEYXRhID09IE5VTEwgfHwgRGF0YUxlbiAhPSBT SEEzODRfRElHRVNUX1NJWkUgfHwgSW5kZXggPj0NCj4gPiBSVE1SX0NPVU5UKSB7DQo+ID4gPiAr ICAgIHJldHVybiBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ ID4NCj4gPiAuLi4NCj4gPg0KPiA+ID4gKzsgIFVJTlQ2NA0KPiA+ID4gKzsgIEVGSUFQSQ0KPiA+ ID4gKzsgIFRkVm1DYWxsICgNCj4gPiA+ICs7ICAgIFVJTlQ2NCAgTGVhZiwgIC8vIFJjeA0KPiA+ ID4gKzsgICAgVUlOVDY0ICBQMSwgIC8vIFJkeA0KPiA+ID4gKzsgICAgVUlOVDY0ICBQMiwgIC8v IFI4DQo+ID4gPiArOyAgICBVSU5UNjQgIFAzLCAgLy8gUjkNCj4gPiA+ICs7ICAgIFVJTlQ2NCAg UDQsICAvLyByc3AgKyAweDI4DQo+ID4gPiArOyAgICBVSU5UNjQgICpWYWwgLy8gcnNwICsgMHgz MA0KPiA+ID4gKzsgICAgKQ0KPiA+ID4gK2dsb2JhbCBBU01fUEZYKFRkVm1DYWxsKQ0KPiA+ID4g K0FTTV9QRlgoVGRWbUNhbGwpOg0KPiA+ID4gKyAgICAgICB0ZGNhbGxfcHVzaF9yZWdzDQo+ID4g PiArDQo+ID4gPiArICAgICAgIG1vdiByMTEsIHJjeA0KPiA+ID4gKyAgICAgICBtb3YgcjEyLCBy ZHgNCj4gPiA+ICsgICAgICAgbW92IHIxMywgcjgNCj4gPiA+ICsgICAgICAgbW92IHIxNCwgcjkN Cj4gPiA+ICsgICAgICAgbW92IHIxNSwgW3JzcCArIGZpcnN0X3ZhcmlhYmxlX29uX3N0YWNrX29m ZnNldCBdDQo+ID4gPiArDQo+ID4gPiArICAgICAgIHRkY2FsbF9yZWdzX3ByZWFtYmxlIFREVk1D QUxMLCBURFZNQ0FMTF9FWFBPU0VfUkVHU19NQVNLDQo+ID4gPiArDQo+ID4gPiArICAgICAgIHRk Y2FsbA0KPiA+ID4gKw0KPiA+ID4gKyAgICAgICA7IGlnbm9yZSByZXR1cm4gZGF0YWlmIFREQ0FM TCByZXBvcnRzIGZhaWx1cmUuDQo+ID4NCj4gPiBzaG91bGQgd2Ugbm90IHBhbmljIGhlcmUgYWxz bz8NCj4gSSBkb24ndCB0aGluayB3ZSBzaG91bGQgcGFuaWMgaGVyZS4NCj4gQmVjYXVzZSBUZFZt Q2FsbCBpcyBhIGNvbW1vbiBmdW5jdGlvbiAoc2VlIHN1Yi1sZWFmIG9mIFREVk1DQUxMKS4gVGhl cmUgYXJlDQo+IHZhcmlvdXMgZXJyb3JzLiBTb21lIG9mIHRoZW0gYXJlIG5vdCBzbyBzZXJpb3Vz IHRoYXQgcGFuaWMgaXMgbmVlZGVkLiBDYWxsZXIgb2YNCj4gVGRWbUNhbGwgd2lsbCBoYW5kbGUg dGhlIHJldHVybmVkIHJlc3VsdC4NCj4gPg0KPiA+ID4gKyAgICAgICB0ZXN0IHJheCwgcmF4DQo+ ID4gPiArICAgICAgIGpueiAubm9fcmV0dXJuX2RhdGENCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg OyBQcm9wYWdhdGUgVERWTUNBTEwgc3VjY2Vzcy9mYWlsdXJlIHRvIHJldHVybiB2YWx1ZS4NCj4g PiA+ICsgICAgICAgbW92IHJheCwgcjEwDQo+ID4gPiArDQo+ID4gPiArICAgICAgIDsgUmV0cmll dmUgdGhlIFZhbCBwb2ludGVyLg0KPiA+ID4gKyAgICAgICBtb3YgcjksIFtyc3AgKyBzZWNvbmRf dmFyaWFibGVfb25fc3RhY2tfb2Zmc2V0IF0NCj4gPiA+ICsgICAgICAgdGVzdCByOSwgcjkNCj4g PiA+ICsgICAgICAganogLm5vX3JldHVybl9kYXRhDQo+ID4gPiArDQo+ID4gPiArICAgICAgIDsg T24gc3VjY2VzcywgcHJvcGFnYXRlIFREVk1DQUxMIG91dHB1dCB2YWx1ZSB0byBvdXRwdXQgcGFy YW0NCj4gPiA+ICsgICAgICAgdGVzdCByYXgsIHJheA0KPiA+ID4gKyAgICAgICBqbnogLm5vX3Jl dHVybl9kYXRhDQo+ID4gPiArICAgICAgIG1vdiBbcjldLCByMTENCj4gPiA+ICsubm9fcmV0dXJu X2RhdGE6DQo+ID4gPiArICAgICAgIHRkY2FsbF9yZWdzX3Bvc3RhbWJsZQ0KPiA+ID4gKw0KPiA+ ID4gKyAgICAgICB0ZGNhbGxfcG9wX3JlZ3MNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAgcmV0DQo+ ID4gPiArDQo+ID4gPiArOy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gKzsgMCAgID0+IFJB WCA9IFREQ0FMTCBsZWFmDQo+ID4gPiArOyBNICAgPT4gUkNYID0gVERWTUNBTEwgcmVnaXN0ZXIg YmVoYXZpb3INCj4gPiA+ICs7IDEgICA9PiBSMTAgPSBzdGFuZGFyZCB2cy4gdmVuZG9yDQo+ID4g PiArOyBSREkgPT4gUjExID0gVERWTUNBTEwgZnVuY3Rpb24gLyBuciA7IFJTSSA9ICBSMTIgPSBw MSA7IFJEWCA9PiBSMTMNCj4gPiA+ICs9IHAyIDsgUkNYID0+IFIxNCA9IHAzIDsgUjggID0+IFIx NSA9IHA0DQo+ID4gPiArDQo+ID4NCj4gPiBBYm92ZSBjb21tZW50IGRvZXMgbm90IG1hdGNoIHRo ZSBiZWxvdyBkZWZpbml0aW9uLg0KPiBUaGFua3MgZm9yIHJlbWluZGVyLiBJdCB3aWxsIGJlIHVw ZGF0ZWQgaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gPg0KPiA+ID4gKzsgIFVJTlQ2NA0KPiA+ID4g KzsgIEVGSUFQSQ0KPiA+ID4gKzsgIFRkVm1DYWxsQ3B1aWQgKA0KPiA+ID4gKzsgICAgVUlOVDY0 ICBFYXhJbiwgICAgLy8gUmN4DQo+ID4gPiArOyAgICBVSU5UNjQgIEVjeEluLCAgICAvLyBSZHgN Cj4gPiA+ICs7ICAgIFVJTlQ2NCAgKlJlc3VsdHMgIC8vIFI4DQo+ID4gPiArOyAgICApDQo+ID4g PiArZ2xvYmFsIEFTTV9QRlgoVGRWbUNhbGxDcHVpZCkNCj4gPiA+ICtBU01fUEZYKFRkVm1DYWxs Q3B1aWQpOg0KPiA+ID4gKyAgICAgICB0ZGNhbGxfcHVzaF9yZWdzDQo+ID4gPiArDQo+ID4gPiAr ICAgICAgIG1vdiByMTEsIEVYSVRfUkVBU09OX0NQVUlEDQo+ID4gPiArICAgICAgIG1vdiByMTIs IHJjeA0KPiA+ID4gKyAgICAgICBtb3YgcjEzLCByZHgNCj4gPiA+ICsNCj4gPiA+ICsgICAgICAg OyBTYXZlICpyZXN1bHRzIHBvaW50ZXJzDQo+ID4gPiArICAgICAgIHB1c2ggcjgNCj4gPiA+ICsN Cj4gPg0KPiA+IExvb2tzIGxpa2Ugd2UgYXJlIGxlYWtpbmcgcjE0IGFuZCByMTUgaGVyZS4NCj4g VGhhbmtzIGZvciByZW1pbmRlci4gSXQgd2lsbCBiZSBmaXhlZCBpbiB0aGUgbmV4dCB2ZXJzaW9u Lg0KPiA+DQo+ID4gPiArICAgICAgIHRkY2FsbF9yZWdzX3ByZWFtYmxlIFREVk1DQUxMLCBURFZN Q0FMTF9FWFBPU0VfUkVHU19NQVNLDQo+ID4gPiArDQo+ID4gPiArICAgICAgIHRkY2FsbA0KPiA+ ID4gKw0KPiA+ID4gKyAgICAgICA7IFBhbmljIGlmIFREQ0FMTCByZXBvcnRzIGZhaWx1cmUuDQo+ ID4gPiArICAgICAgIHRlc3QgcmF4LCByYXgNCj4gPiA+ICsgICAgICAgam56IC5ub19yZXR1cm5f ZGF0YQ0KPiA+ID4gKw0K