From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mx.groups.io with SMTP id smtpd.web10.6297.1628065447021102425 for ; Wed, 04 Aug 2021 01:24:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=cwmS8fVi; spf=pass (domain: intel.com, ip: 192.55.52.115, mailfrom: hao.a.wu@intel.com) X-IronPort-AV: E=McAfee;i="6200,9189,10065"; a="213606709" X-IronPort-AV: E=Sophos;i="5.84,293,1620716400"; d="scan'208";a="213606709" Received: from orsmga004.jf.intel.com ([10.7.209.38]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Aug 2021 01:24:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.84,293,1620716400"; d="scan'208";a="568949002" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by orsmga004.jf.intel.com with ESMTP; 04 Aug 2021 01:24:06 -0700 Received: from orsmsx607.amr.corp.intel.com (10.22.229.20) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Wed, 4 Aug 2021 01:24:06 -0700 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX607.amr.corp.intel.com (10.22.229.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Wed, 4 Aug 2021 01:24:05 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Wed, 4 Aug 2021 01:24:05 -0700 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (104.47.66.44) 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.10; Wed, 4 Aug 2021 01:24:05 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=md+0FAf64P1ygFmEb8aOxVHdCOYfaK/xg+TCnpVQQUMtnwkyTZ2JR62EOe98CktJ3dILZ77oV8kXWMjnYPXyNkdPvWkNR974N72dbgu/vo/My8kccOGYvA027s2f7G1AcBs1h3Rqg62x62YeuBxmhPS+luEIQT1gQf18GGm+y0y1NuPd0yW/ArLTv/hLdCbEF05xbeWCywyyztcILfttNOqHVsY348UPQMimvzDsJGv4bk2g7ZhTouNu3zH6lafhpDl08bIHCW9r65wqX5TqaKFzYVmZDxBuFSdKGk71+cII0kYy5q3dRBzBAc4ugvte970NBEQtWZ4PVyOXSy01FQ== 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-SenderADCheck; bh=YAFTxqHQ0W3aDt30qX0VDV/6gMqkRNOjiIdr41mo3QM=; b=aWKo2xoP0bkkpTVbMrUIB8fut2b8i90bD26VXnor5SSO6ezYdUZSxPgRaZPnQjbOwciem2vpGxy8CKITvaixVRXUx1pP9ZF1qLPdkF8H3ZBkLF2OR5CS3bykk5zCm5x8oe1gUtoHLXOY7XzpkROehp/YcTNtZfDBexLhuJK+m3jdftjv0ywAZ8Fo7nKMxvcq5KdNydKpoA7u/unC6aBZPQ2Hs75abt1G7HQz/iCOX/o/310R+8EDLabfIo4Hz1G6DMpuqkkVi3AanFLdj5CJxkFZkiBzqFU4qAajiq25H9l3gbAqYWMPOXKpf2Ef/8Ad/9k+9bEm0yf8MoFW4UxZcg== 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=YAFTxqHQ0W3aDt30qX0VDV/6gMqkRNOjiIdr41mo3QM=; b=cwmS8fVio1v57SN0qd9JVa2mBhPls///THv2VngPlV8pEGEQVVXluO018PSB3DyMtuUH9WtAh6I61i7eAAv2VvZk973ohhB+xTVYlGhNYd+N3SaVKM6BQs/2q29DKXuXdBz1rGVMxRHMkygEfnki6D3uPmEnE+9LFapn3G+FLNA= Received: from DM6PR11MB3673.namprd11.prod.outlook.com (2603:10b6:5:145::26) by DM5PR11MB1353.namprd11.prod.outlook.com (2603:10b6:3:a::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4373.26; Wed, 4 Aug 2021 08:24:04 +0000 Received: from DM6PR11MB3673.namprd11.prod.outlook.com ([fe80::c1de:ead8:49c6:6acb]) by DM6PR11MB3673.namprd11.prod.outlook.com ([fe80::c1de:ead8:49c6:6acb%7]) with mapi id 15.20.4373.026; Wed, 4 Aug 2021 08:24:04 +0000 From: "Wu, Hao A" To: "xiewenyi (A)" , "Kinney, Michael D" , "devel@edk2.groups.io" CC: "songdongkuang@huawei.com" , "Wang, Jian J" Subject: Re: [edk2-devel] [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test Thread-Topic: [edk2-devel] [PATCH EDK2 v2 1/1] MdeModulePkg/UefiSortLib:Add UefiSortLib unit test Thread-Index: AQHXhFCY+A90Om5Y5UC1zTkAVbhwTqtZneIAgAXbYPCAA4zlgIAABA1w Date: Wed, 4 Aug 2021 08:24:03 +0000 Message-ID: References: <1627545672-84944-1-git-send-email-xiewenyi2@huawei.com> <1627545672-84944-2-git-send-email-xiewenyi2@huawei.com> In-Reply-To: Accept-Language: en-US, zh-CN X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: huawei.com; dkim=none (message not signed) header.d=none;huawei.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 701b062a-6333-44ad-134b-08d957213851 x-ms-traffictypediagnostic: DM5PR11MB1353: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:983; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: A3/CFMRryksZ+FLrRaCAKmu5IMzDShu/tErSfbQa6uDdAWFRfcX91I7cfMThiKZJEFGoPBZ9tI/luxZcGuW7W1HyY1bRfMI17oHkeMeqyNsgRGb5qo+pXxZ2ng+fGyGNNjDtLVeuS4lictS9EUYJsZRpshN+SxixiKUCn5CQsswl46rape5o5N7qDtiPlvmFYcHiaJ0+FbONmXnZy0u6PhzzMpUXy3sG6+jUjccCI8yD8nloiu/cxsd9hhuEGxY6PSJsu8Aj+ODUVd8NbAlog+5Wy20h1Tm937i+YZ7nrTYwJ2izC9RdAnz55jaCcmvv3nXUsPdFANPZtvqqUjsCtWlmWY+pjj/512cbr9xksz18QbgtNqSe/IGieGXI7BjbLXIPHe1fyxHaKugGIO9kxkFRfRQvzYu21X7eHMM+UXtS2ugX0Nu1MaxPCs5hmGDQdkuq+XkgU15ArhcDBvwcPALrsbzkLQwfL3cE72bHadqwxwu5btFBhJ0D+/ReqfrxrzZv0BiuQ5UuRIixMnbU0swEYf6o/Ode4F1AIJHjF3ws1PF7akoPtIVhMEmGJoPz8+Pw6luS2OrK38RX0L1AsItP/hsYCIeowL93zzTiSrMT7jW/6XSlWwA27zimwlwpGr7GuoPdrVMoRz5Km5zxnjrUicnc/1OJcjppheKCNY5aisAEZqYYj7/g7zIXkyYyHIsET3smaiJzBNCwKGrLRvRmGpUDEl9e3g792DN9mX5k8jQC55ygfLZaHYjqMVmMWHK4lHI9WyGBX34Opg9M/quGLrOnT6Jm+9rVbJ/jGDwUruLold5G+K00GK4ENbtDtQPJgvKwlFyZaHEcgrfJkA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM6PR11MB3673.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(346002)(376002)(366004)(39860400002)(396003)(136003)(8936002)(33656002)(186003)(8676002)(71200400001)(26005)(45080400002)(4326008)(110136005)(316002)(54906003)(66476007)(5660300002)(38100700002)(52536014)(66946007)(38070700005)(122000001)(55016002)(86362001)(7696005)(2906002)(478600001)(53546011)(83380400001)(76116006)(64756008)(107886003)(9686003)(66556008)(966005)(6506007)(30864003)(66446008)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eDh1bGVPYlQ5aUo2QU9iTFVQdHoyR2NCRjMvc3RVKzg1Wm90YTRjTnVNNDU4?= =?utf-8?B?eG4zWXhodm8raXY1czA3Vk1TVVhQOGF4NGEvN3J5Tk9kOG5ZejUvcmVHSWFQ?= =?utf-8?B?TmVHSU4rMXVlc1kranpMdFdLMWlQakxhbXg4bXFZZEh0Ykt3aEVSVzdsZmIx?= =?utf-8?B?dVI1NVZwQ1JQTmxLaWNSeFNjbW5oTHRyQTB0TlI5QVhrdnJ3STYxc29qYVl6?= =?utf-8?B?NkZOQlpUdFBHUWl3VlQxbGxleEJWMjE2LzZVaVI1clJ0ZTFqYk1teXRkc21k?= =?utf-8?B?a2VmNGpXYndMV1A3NlQ3aUx1eWd6d1J0TVNoWHh4azZxVVVqSEtEWjI2YXVi?= =?utf-8?B?Mm1aTU9LVUpWSXFmd1NmMmo5Z1Q5dFhZWlBJKzZYVVYyWG9xd2NzbHNNSndF?= =?utf-8?B?TUFNS2NsbkoxbkZCR1JrRElqUWR5UnYvZWtESG9qbVMrWWRMbEVhOXJHUmNC?= =?utf-8?B?bnNHKytzVC9xekxtTGhBYndMUmd2dWhvWGwrd2x1ZjdwdzVWL1FtWVNld3di?= =?utf-8?B?WkpITEp4THEyWkh3anVWL2dEL1hneGcvRXdMNXJUZWcvTWlEUklGUk9ydnFu?= =?utf-8?B?UFRuYTJxSEdQeUNMeHFVcjJjT21TZm1BZFJ4Nm9XTmowTmU5eHczWmNJQ09R?= =?utf-8?B?WktpSlVKUUNOQkt2RHNuakJ2bWp2L25CNmlzT0JhdmpEMmk3djY5WmlzaHBp?= =?utf-8?B?MlZrcGp6ME5icVNhdDNoSDNDZGZpQXBpL09VdUwyM0N0cTlkVjYwRXk4YUZh?= =?utf-8?B?dFpvaDdZaUJxdnNkb1h5d3hvODB2bHplbHRLVGlNa24xOFhjMHM0WUJVYWJP?= =?utf-8?B?UVZRTlZOSDlVK1R3bXFQVjBENGxRTjJ6a1JZamRwR3h5c1doTnhEb2RzUWdj?= =?utf-8?B?bzhtRnkxTTlBcGtDK2ZvMVhuVGRPL0Q0YlM0ZzVLa2diRmk0b0FTUWdEdjN2?= =?utf-8?B?cEtmakQvOFhCcnRIVFV4ZEhQNVArL3dIZ1k2b0RUVmRQR1RnV1laSXdScDRq?= =?utf-8?B?QmdwQmlyZklHT25hN0VwSGJXQW54UXRXV1VlL2l2YVA3UXI4UThic0ZGbjhM?= =?utf-8?B?Y0ZyVGdhdGRKM3JLOTlZQldQNmYwN3NrNDB4TlpHOUpzU3hBVXB1aDAxOW51?= =?utf-8?B?YitsWjFhWkdRZ2NNbWppcVpzWGFkN3hhUU5DYjY1ZVkxMk9lZ2dqL0RPc2ZM?= =?utf-8?B?Nm43cmZVNmlwcnhBalluZEN0VVNkZ2x3ZzRIV3NoZ0VPLyt2TlJtaGZCeEd3?= =?utf-8?B?d3BBUzZMUjhYQTdaRXJIRG56cTZlWHNwUHVadVpSRzdCUUp2cko2NXNEZzZh?= =?utf-8?B?U1NUekZtREc0RDVLd2hvSmg4WTdqZWk3TGdZbi8vVGlWbm1VbHdXS2d5YXhD?= =?utf-8?B?OXloSm5BU3dlY2hhUkcvUXlvWDM3UFhsQzJrK05rQnNoSlFCbkZaYVl6MXkr?= =?utf-8?B?cDBWdDU5RnpWSlVJM3RjVnltNHUwdUdLUWtORkRudm0vNDd6WnVJT1AxQjhW?= =?utf-8?B?bFBZQUNIcmhvQjN6U2J2aUVocnM2Y0VqQnl3U1NWT1N4NFNFTGdrNkxYK3R5?= =?utf-8?B?OEFkamFZR3d6QXFhYUZOWG1UWUtrWmxFV241VW1HSnd1ZnlUZDNpdG9XU2dL?= =?utf-8?B?dHFFTUFhWFFKYVUvRlB5T1NTTDAxeTZPVFJlakxPTnZqSlJlQXRjRFp3eUp4?= =?utf-8?B?dXFSbDJyNGVVamhrRnMvRVhrdVlRRXQ0c1BGNFhmSUhWYktGd3hlSDJMQW1Q?= =?utf-8?Q?WElhlTyNK8KXbVcM8veVq6mbTwv6pjrkVZaO3TT?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM6PR11MB3673.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 701b062a-6333-44ad-134b-08d957213851 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Aug 2021 08:24:03.8251 (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: 8F3AwOM5b4VFFlxiBKCUFJDHolz4qtIsIkBlp/S5Uztiu6OSV81Xmo1/HbfDvKs61O+WAhp/3g/Eoj6mnRFgpw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1353 Return-Path: hao.a.wu@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiB4aWV3ZW55aSAoQSkgPHhpZXdl bnlpMkBodWF3ZWkuY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIEF1Z3VzdCA0LCAyMDIxIDQ6MDUg UE0NCj4gVG86IFd1LCBIYW8gQSA8aGFvLmEud3VAaW50ZWwuY29tPjsgZGV2ZWxAZWRrMi5ncm91 cHMuaW8NCj4gQ2M6IHNvbmdkb25na3VhbmdAaHVhd2VpLmNvbTsgV2FuZywgSmlhbiBKIDxqaWFu Lmoud2FuZ0BpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BBVENIIEVE SzIgdjIgMS8xXSBNZGVNb2R1bGVQa2cvVWVmaVNvcnRMaWI6QWRkDQo+IFVlZmlTb3J0TGliIHVu aXQgdGVzdA0KPiANCj4gDQo+IA0KPiBPbiAyMDIxLzgvMiA5OjU2LCBXdSwgSGFvIEEgd3JvdGU6 DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IGRldmVsQGVkazIu Z3JvdXBzLmlvIDxkZXZlbEBlZGsyLmdyb3Vwcy5pbz4gT24gQmVoYWxmIE9mIFd1LA0KPiA+PiBI YW8gQQ0KPiA+PiBTZW50OiBUaHVyc2RheSwgSnVseSAyOSwgMjAyMSA0OjI2IFBNDQo+ID4+IFRv OiBXZW55aSBYaWUgPHhpZXdlbnlpMkBodWF3ZWkuY29tPjsgZGV2ZWxAZWRrMi5ncm91cHMuaW87 IFdhbmcsDQo+ID4+IEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPg0KPiA+PiBDYzogc29u Z2RvbmdrdWFuZ0BodWF3ZWkuY29tDQo+ID4+IFN1YmplY3Q6IFJlOiBbZWRrMi1kZXZlbF0gW1BB VENIIEVESzIgdjIgMS8xXQ0KPiA+PiBNZGVNb2R1bGVQa2cvVWVmaVNvcnRMaWI6QWRkIFVlZmlT b3J0TGliIHVuaXQgdGVzdA0KPiA+Pg0KPiA+Pj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPj4+IEZyb206IFdlbnlpIFhpZSA8eGlld2VueWkyQGh1YXdlaS5jb20+DQo+ID4+PiBTZW50 OiBUaHVyc2RheSwgSnVseSAyOSwgMjAyMSA0OjAxIFBNDQo+ID4+PiBUbzogZGV2ZWxAZWRrMi5n cm91cHMuaW87IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50ZWwuY29tPjsgV3UsDQo+ID4+ PiBIYW8gQSA8aGFvLmEud3VAaW50ZWwuY29tPg0KPiA+Pj4gQ2M6IHNvbmdkb25na3VhbmdAaHVh d2VpLmNvbTsgeGlld2VueWkyQGh1YXdlaS5jb20NCj4gPj4+IFN1YmplY3Q6IFtQQVRDSCBFREsy IHYyIDEvMV0gTWRlTW9kdWxlUGtnL1VlZmlTb3J0TGliOkFkZA0KPiA+Pj4gVWVmaVNvcnRMaWIg dW5pdCB0ZXN0DQo+ID4+Pg0KPiA+Pj4gQWRkaW5nIHR3byB1bml0IHRlc3QgY2FzZSBmb3IgVWVm aVNvcnRMaWIuIE9uZSBpcyBhIHRlc3Qgb24gc29ydGluZw0KPiA+Pj4gYW4gYXJyYXkgb2YNCj4g Pj4+IFVJTlQzMiBieSB1c2luZyBQZXJmb3JtUXVpY2tTb3J0LCBhbm90aGVyIGlzIGEgdGVzdCBv biBjb21wYXJpbmcgdGhlDQo+ID4+PiBzYW1lIGJ1ZmZlciBieSB1c2luZyBTdHJpbmdDb21wYXJl Lg0KPiA+Pg0KPiA+Pg0KPiA+PiBUaGFua3MuDQo+ID4+IFJldmlld2VkLWJ5OiBIYW8gQSBXdSA8 aGFvLmEud3VAaW50ZWwuY29tPg0KPiA+DQo+ID4NCj4gPiBTb3JyeSwgSSBmb3VuZCB0aGF0IHRo ZXJlIGFyZSBhIGNvdXBsZSBvZiBjb2RpbmcgZm9ybWF0IHN0eWxlIGNoZWNrIGZhaWx1cmVzDQo+ IHdoZW4gbWVyZ2luZyB0aGUgcGF0Y2guDQo+ID4gQ291bGQgeW91IGhlbHAgdG8gcmVzb2x2ZSB0 aGVtIGFuZCB0aGVuIGNyZWF0ZSBhIHRlc3QgcHVsbCByZXF1ZXN0IG9uIHRoZQ0KPiBHaXRIdWIg Zm9yIHZlcmlmaWNhdGlvbj8gVGhhbmtzIGluIGFkdmFuY2UuDQo+ID4gKEkgdGhpbmsgeW91IGNh biB0YWtlIHRoZSBjYXNlIHVuZGVyDQo+ID4gTWRlTW9kdWxlUGtnL1VuaXZlcnNhbC9WYXJpYWJs ZS9SdW50aW1lRHhlL1J1bnRpbWVEeGVVbml0VGVzdC8gZm9yDQo+ID4gcmVmZXJlbmNlLikNCj4g Pg0KPiANCj4gSGksIFd1IEhhbw0KPiANCj4gSSB0cnkgdG8gZGVhbCB3aXRoIHRoZSBjb2Rpbmcg Zm9ybWF0IHN0eWxlIGNoZWNrIGZhaWx1cmVzLCBhbmQgbWVldCBhIGZhaWx1cmUgd2hpY2gNCj4g SSBhbSBub3Qgc3VyZSBob3cgdG8gc29sdmUuDQo+IEkgdGFrZSB0aGUgY2FzZSB5b3UgdG9sZCBm b3IgcmVmZXJlbmNlLCBidXQgc3RpbGwgdGhlcmUncyBhIGZhaWx1cmUgc2FpZCB0aGUgZGVmaW5l DQo+IHNob3VsZCBiZSBjYXBpdGFsIGxldHRlcnMuDQo+IGJ1dCBpZiBjaGFuZ2UgaXQgdG8gY2Fw aXRhbCBsZXR0ZXJzLCB0aGVyZSB3aWxsIGJlIGFub3RoZXIgZXJyb3IgRnVuY3Rpb24gbmFtZSBk b2VzDQo+IG5vdCBmb2xsb3cgdGhlIHJ1bGVzOiAxLiBGaXJzdCBjaGFyYWN0ZXIgc2hvdWxkIGJl IHVwcGVyIGNhc2UgMi4gTXVzdCBjb250YWluDQo+IGxvd2VyIGNhc2UgY2hhcmFjdGVycyAzLiBO byB3aGl0ZSBzcGFjZSBjaGFyYWN0ZXJzDQo+IA0KPiAjZGVmaW5lIE1haW4gbWFpbg0KPiANCj4g SU5UMzINCj4gTWFpbiAoDQo+ICAgSU4gSU5UMzIgIEFyZ2MsDQo+ICAgSU4gQ0hBUjggICpBcmd2 W10NCj4gICApDQo+IHsNCj4gICBVbml0VGVzdGluZ0VudHJ5ICgpOw0KPiAgIHJldHVybiAwOw0K PiB9DQoNCg0KSGVsbG8gTWlrZSwNCg0KSSBzYXcgdGhlIGJlbG93IGNvbW1pdDoNCiAgU0hBLTE6 IGRjYWE5MzkzNjU5MTg4M2FhNzgyNmViNDVlZjAwNDE2YWQ4MmVmMDgNCiAgKiBNZGVNb2R1bGVQ a2cvVmFyaWFibGUvUnVudGltZUR4ZTogQWRkIFZhcmlhYmxlIExvY2sgUHJvdG9jb2wgVW5pdCBU ZXN0cw0KaGFzIGEgc2ltaWxhciBjYXNlIHRoYXQgc2hvdWxkIGludm9sdmUgdGhlIG5hbWluZyBv ZiB0aGUgJ21haW4nIGZ1bmN0aW9uIHdpdGhpbiB0aGUgdW5pdCB0ZXN0IGNvZGVzLg0KDQpJIGFt IHdvbmRlcmluZyBob3cgdGhlIG9wZW4gcmFpc2VkIGJ5IFdlbnlpIHdhcyBoYW5kbGVkIGJhY2sg dGhlbi4NCkRvIHlvdSBoYXZlIHN1Z2dlc3Rpb25zIGZvciB0aGlzIGNhc2U/IFRoYW5rcyBpbiBh ZHZhbmNlLg0KDQpCZXN0IFJlZ2FyZHMsDQpIYW8gV3UNCg0KDQo+IA0KPiBUaGFua3MNCj4gV2Vu eWkNCj4gDQo+ID4gRXJyb3IgZGV0YWlsczoNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI4LjU5NTU4 MjBaICMjW3NlY3Rpb25dU3RhcnRpbmc6IEJ1aWxkIGFuZCBUZXN0DQo+ID4gTWRlTW9kdWxlUGtn IElBMzIsWDY0LEFSTSxBQVJDSDY0LFJJU0NWNjQgMjAyMS0wOC0NCj4gMDJUMDE6MDk6MjguNTk2 MDczM1oNCj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0NCj4gPT09PT09PT09PT09PQ0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6 MjguNTk2MTAxOFogVGFzayAgICAgICAgIDogQ29tbWFuZCBMaW5lDQo+ID4gMjAyMS0wOC0wMlQw MTowOToyOC41OTYxMjU4WiBEZXNjcmlwdGlvbiAgOiBSdW4gYSBjb21tYW5kIGxpbmUgd2l0aA0K PiBhcmd1bWVudHMNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI4LjU5NjE1MDJaIFZlcnNpb24gICAg ICA6IDEuMS4zDQo+ID4gMjAyMS0wOC0wMlQwMTowOToyOC41OTYxODk3WiBBdXRob3IgICAgICAg OiBNaWNyb3NvZnQgQ29ycG9yYXRpb24NCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI4LjU5NjIyNTla IEhlbHAgICAgICAgICA6IFtNb3JlDQo+IEluZm9ybWF0aW9uXShodHRwczovL2dvLm1pY3Jvc29m dC5jb20vZndsaW5rLz9MaW5rSUQ9NjEzNzM1KQ0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MjguNTk2 MjY3OFoNCj4gPg0KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KPiA9PT09PQ0KPiA+ID09PT09PT09IDIwMjEtMDgtMDJU MDE6MDk6MjkuMzUwNDk0NlogKG5vZGU6MzY1OSkgV2FybmluZzogVXNlDQo+ID4gQ2lwaGVyaXYg Zm9yIGNvdW50ZXIgbW9kZSBvZiBhZXMtMjU2LWN0ciAyMDIxLTA4LTAyVDAxOjA5OjI5LjM1MTAw MjBaDQo+ID4gKG5vZGU6MzY1OSkgV2FybmluZzogVXNlIENpcGhlcml2IGZvciBjb3VudGVyIG1v ZGUgb2YgYWVzLTI1Ni1jdHINCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI5LjM1MTE1NTFaIChub2Rl OjM2NTkpIFdhcm5pbmc6IFVzZSBDaXBoZXJpdiBmb3INCj4gPiBjb3VudGVyIG1vZGUgb2YgYWVz LTI1Ni1jdHIgMjAyMS0wOC0wMlQwMTowOToyOS4zNTEzNjA1WiAobm9kZTozNjU5KQ0KPiA+IFdh cm5pbmc6IFVzZSBDaXBoZXJpdiBmb3IgY291bnRlciBtb2RlIG9mIGFlcy0yNTYtY3RyDQo+ID4g MjAyMS0wOC0wMlQwMTowOToyOS4zNTE2Nzk4WiAobm9kZTozNjU5KSBXYXJuaW5nOiBVc2UgQ2lw aGVyaXYgZm9yDQo+ID4gY291bnRlciBtb2RlIG9mIGFlcy0yNTYtY3RyIDIwMjEtMDgtMDJUMDE6 MDk6MjkuMzUxNzUzNlogKG5vZGU6MzY1OSkNCj4gPiBXYXJuaW5nOiBVc2UgQ2lwaGVyaXYgZm9y IGNvdW50ZXIgbW9kZSBvZiBhZXMtMjU2LWN0cg0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MjkuMzUx ODE3OFogKG5vZGU6MzY1OSkgV2FybmluZzogVXNlIENpcGhlcml2IGZvcg0KPiA+IGNvdW50ZXIg bW9kZSBvZiBhZXMtMjU2LWN0ciAyMDIxLTA4LTAyVDAxOjA5OjI5LjM1NDU0NjFaDQo+ID4gW2Nv bW1hbmRdL29wdC9ob3N0ZWR0b29sY2FjaGUvUHl0aG9uLzMuOC4xMS94NjQvYmluL3N0dWFydF9j aV9idWlsZCAtYw0KPiA+IC5weXRvb2wvQ0lTZXR0aW5ncy5weSAtcCBNZGVNb2R1bGVQa2cgLXQg UkVMRUFTRSxOTy1UQVJHRVQgLWENCj4gPiBJQTMyLFg2NCxBUk0sQUFSQ0g2NCxSSVNDVjY0IFRP T0xfQ0hBSU5fVEFHPUdDQzUNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI5LjM1NDY3MDdaIFNFQ1RJ T04gLSBJbml0IFNERQ0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MjkuMzU0NzU3MVogV0FSTklORyAt IFVzaW5nIFBpcCBUb29scyBiYXNlZCBCYXNlVG9vbHMNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjI5 LjM1NDgzOTVaIFNFQ1RJT04gLSBMb2FkaW5nIFBsdWdpbnMNCj4gPiAyMDIxLTA4LTAyVDAxOjA5 OjI5LjM1NDkyMTJaIFNFQ1RJT04gLSBTdGFydCBJbnZvY2FibGUgVG9vbA0KPiA+IDIwMjEtMDgt MDJUMDE6MDk6MjkuMzU1MDAxOFogU0VDVElPTiAtIEdldHRpbmcgRW52aXJvbm1lbnQNCj4gPiAy MDIxLTA4LTAyVDAxOjA5OjI5LjM1NTA3OTRaIFNFQ1RJT04gLSBMb2FkaW5nIHBsdWdpbnMNCj4g PiAyMDIxLTA4LTAyVDAxOjA5OjI5LjM1NTE2NzVaIFNFQ1RJT04gLSBCdWlsZGluZyBNZGVNb2R1 bGVQa2cgUGFja2FnZQ0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MjkuMzU1MjY5M1ogUFJPR1JFU1Mg LSAtLVJ1bm5pbmcgTWRlTW9kdWxlUGtnOg0KPiA+IEVjY0NoZWNrIFRlc3QgTk8tVEFSR0VUIC0t IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDY5NzAwNlogRVJST1IgLQ0KPiA+IDIwMjEtMDgtMDJUMDE6 MDk6MzMuMDY5ODAxOFogRVJST1IgLSBFRkkgY29kaW5nIHN0eWxlIGVycm9yDQo+ID4gMjAyMS0w OC0wMlQwMTowOTozMy4wNjk4NzQ4WiBFUlJPUiAtICpFcnJvciBjb2RlOiA1MDA3DQo+ID4gMjAy MS0wOC0wMlQwMTowOTozMy4wNzAwNjMxWiBFUlJPUiAtICpUaGVyZSBzaG91bGQgYmUgbm8NCj4g PiBpbml0aWFsaXphdGlvbiBvZiBhIHZhcmlhYmxlIGFzIHBhcnQgb2YgaXRzIGRlY2xhcmF0aW9u DQo+ID4gMjAyMS0wOC0wMlQwMTowOTozMy4wNzAyNjc1WiBFUlJPUiAtICpmaWxlOg0KPiA+IC8v aG9tZS92c3RzL3dvcmsvMS9zL01kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlTb3J0TGliL1VuaXRU ZXN0L1VlZmlTb3INCj4gPiB0TGliVW5pdFRlc3QuYyAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3MDM0 MjFaIEVSUk9SIC0gKkxpbmUgbnVtYmVyOiA3Nw0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcw MzkyOVogRVJST1IgLSAqVmFyaWFibGUgTmFtZTogVGVzdENvdW50DQo+ID4gMjAyMS0wOC0wMlQw MTowOTozMy4wNzE1Njg0WiBFUlJPUiAtIDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcxNjYzNFoNCj4g PiBFUlJPUiAtIEVGSSBjb2Rpbmcgc3R5bGUgZXJyb3IgMjAyMS0wOC0wMlQwMTowOTozMy4wNzE3 MzcyWiBFUlJPUiAtDQo+ID4gKkVycm9yIGNvZGU6IDUwMDcgMjAyMS0wOC0wMlQwMTowOTozMy4w NzE4MjE0WiBFUlJPUiAtICpUaGVyZSBzaG91bGQNCj4gPiBiZSBubyBpbml0aWFsaXphdGlvbiBv ZiBhIHZhcmlhYmxlIGFzIHBhcnQgb2YgaXRzIGRlY2xhcmF0aW9uDQo+ID4gMjAyMS0wOC0wMlQw MTowOTozMy4wNzE5MTk1WiBFUlJPUiAtICpmaWxlOg0KPiA+IC8vaG9tZS92c3RzL3dvcmsvMS9z L01kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlTb3J0TGliL1VuaXRUZXN0L1VlZmlTb3INCj4gPiB0 TGliVW5pdFRlc3QuYyAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3MjA2MzFaIEVSUk9SIC0gKkxpbmUg bnVtYmVyOiA3OA0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcyMTQ1MVogRVJST1IgLSAqVmFy aWFibGUgTmFtZTogVGVzdEJ1ZmZlcg0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcyMjExNFog RVJST1IgLSAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3MjQ5NTNaDQo+ID4gRVJST1IgLSBFRkkgY29k aW5nIHN0eWxlIGVycm9yIDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcyNTcxM1ogRVJST1IgLQ0KPiA+ ICpFcnJvciBjb2RlOiA1MDA3IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcyNjU2MlogRVJST1IgLSAq VGhlcmUgc2hvdWxkDQo+ID4gYmUgbm8gaW5pdGlhbGl6YXRpb24gb2YgYSB2YXJpYWJsZSBhcyBw YXJ0IG9mIGl0cyBkZWNsYXJhdGlvbg0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDcyNzUyNlog RVJST1IgLSAqZmlsZToNCj4gPiAvL2hvbWUvdnN0cy93b3JrLzEvcy9NZGVNb2R1bGVQa2cvTGli cmFyeS9VZWZpU29ydExpYi9Vbml0VGVzdC9VZWZpU29yDQo+ID4gdExpYlVuaXRUZXN0LmMgMjAy MS0wOC0wMlQwMTowOTozMy4wNzI4MzQ1WiBFUlJPUiAtICpMaW5lIG51bWJlcjogNzkNCj4gPiAy MDIxLTA4LTAyVDAxOjA5OjMzLjA3MjkwNDZaIEVSUk9SIC0gKlZhcmlhYmxlIE5hbWU6IFRlc3RS ZXN1bHQNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3Mjk2OTRaIEVSUk9SIC0gMjAyMS0wOC0w MlQwMTowOTozMy4wNzMyNDk2Wg0KPiA+IEVSUk9SIC0gRUZJIGNvZGluZyBzdHlsZSBlcnJvciAy MDIxLTA4LTAyVDAxOjA5OjMzLjA3MzMyMjRaIEVSUk9SIC0NCj4gPiAqRXJyb3IgY29kZTogNzAw MSAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3MzQxMTRaIEVSUk9SIC0gKlRoZXJlIHNob3VsZA0KPiA+ IGJlIG5vIHVzZSBvZiBpbnQsIHVuc2lnbmVkLCBjaGFyLCB2b2lkLCBsb25nIGluIGFueSAuYywg Lmggb3IgLmFzbA0KPiA+IGZpbGVzIDIwMjEtMDgtMDJUMDE6MDk6MzMuMDczNzYyMFogRVJST1Ig LSAqZmlsZToNCj4gPiAvL2hvbWUvdnN0cy93b3JrLzEvcy9NZGVNb2R1bGVQa2cvTGlicmFyeS9V ZWZpU29ydExpYi9Vbml0VGVzdC9VZWZpU29yDQo+ID4gdExpYlVuaXRUZXN0LmMgMjAyMS0wOC0w MlQwMTowOTozMy4wNzM5MTg1WiBFUlJPUiAtICpMaW5lIG51bWJlcjogMTE3DQo+ID4gMjAyMS0w OC0wMlQwMTowOTozMy4wNzQxMzAxWiBFUlJPUiAtICpbbWFpbl0gUmV0dXJuIHR5cGUgaW50DQo+ ID4gMjAyMS0wOC0wMlQwMTowOTozMy4wNzQ0MDk5WiBFUlJPUiAtIDIwMjEtMDgtMDJUMDE6MDk6 MzMuMDc0NDgyOVoNCj4gPiBFUlJPUiAtIEVGSSBjb2Rpbmcgc3R5bGUgZXJyb3IgMjAyMS0wOC0w MlQwMTowOTozMy4wNzQ1NDU5WiBFUlJPUiAtDQo+ID4gKkVycm9yIGNvZGU6IDcwMDEgMjAyMS0w OC0wMlQwMTowOTozMy4wNzQ2ODIxWiBFUlJPUiAtICpUaGVyZSBzaG91bGQNCj4gPiBiZSBubyB1 c2Ugb2YgaW50LCB1bnNpZ25lZCwgY2hhciwgdm9pZCwgbG9uZyBpbiBhbnkgLmMsIC5oIG9yIC5h c2wNCj4gPiBmaWxlcyAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3NDc3NzRaIEVSUk9SIC0gKmZpbGU6 DQo+ID4gLy9ob21lL3ZzdHMvd29yay8xL3MvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaVNvcnRM aWIvVW5pdFRlc3QvVWVmaVNvcg0KPiA+IHRMaWJVbml0VGVzdC5jIDIwMjEtMDgtMDJUMDE6MDk6 MzMuMDc0OTA3NlogRVJST1IgLSAqTGluZSBudW1iZXI6IDExNw0KPiA+IDIwMjEtMDgtMDJUMDE6 MDk6MzMuMDc0OTcxM1ogRVJST1IgLSAqUGFyYW1ldGVyIGFyZ2MNCj4gPiAyMDIxLTA4LTAyVDAx OjA5OjMzLjA3NTA5OTlaIEVSUk9SIC0gMjAyMS0wOC0wMlQwMTowOTozMy4wNzUxNjA3Wg0KPiA+ IEVSUk9SIC0gRUZJIGNvZGluZyBzdHlsZSBlcnJvciAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3NTQ1 OTlaIEVSUk9SIC0NCj4gPiAqRXJyb3IgY29kZTogNzAwMSAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3 NjExNzVaIEVSUk9SIC0gKlRoZXJlIHNob3VsZA0KPiA+IGJlIG5vIHVzZSBvZiBpbnQsIHVuc2ln bmVkLCBjaGFyLCB2b2lkLCBsb25nIGluIGFueSAuYywgLmggb3IgLmFzbA0KPiA+IGZpbGVzIDIw MjEtMDgtMDJUMDE6MDk6MzMuMDc2MjE2N1ogRVJST1IgLSAqZmlsZToNCj4gPiAvL2hvbWUvdnN0 cy93b3JrLzEvcy9NZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpU29ydExpYi9Vbml0VGVzdC9VZWZp U29yDQo+ID4gdExpYlVuaXRUZXN0LmMgMjAyMS0wOC0wMlQwMTowOTozMy4wNzYzMTYwWiBFUlJP UiAtICpMaW5lIG51bWJlcjogMTE3DQo+ID4gMjAyMS0wOC0wMlQwMTowOTozMy4wNzYzNzQxWiBF UlJPUiAtICpQYXJhbWV0ZXIgYXJndg0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDc2NDI5MFog RVJST1IgLSAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3NjQ4NDNaDQo+ID4gRVJST1IgLSBFRkkgY29k aW5nIHN0eWxlIGVycm9yIDIwMjEtMDgtMDJUMDE6MDk6MzMuMDc2NjgxMFogRVJST1IgLQ0KPiA+ ICpFcnJvciBjb2RlOiA4MDA2IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDc2NzgxOVogRVJST1IgLSAq RnVuY3Rpb24gbmFtZQ0KPiA+IGRvZXMgbm90IGZvbGxvdyB0aGUgcnVsZXM6IDEuIEZpcnN0IGNo YXJhY3RlciBzaG91bGQgYmUgdXBwZXIgY2FzZSAyLg0KPiA+IE11c3QgY29udGFpbiBsb3dlciBj YXNlIGNoYXJhY3RlcnMgMy4gTm8gd2hpdGUgc3BhY2UgY2hhcmFjdGVycw0KPiA+IDIwMjEtMDgt MDJUMDE6MDk6MzMuMDc2ODg4MVogRVJST1IgLSAqZmlsZToNCj4gPiAvL2hvbWUvdnN0cy93b3Jr LzEvcy9NZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpU29ydExpYi9Vbml0VGVzdC9VZWZpU29yDQo+ ID4gdExpYlVuaXRUZXN0LmMgMjAyMS0wOC0wMlQwMTowOTozMy4wNzY5NjE5WiBFUlJPUiAtICpM aW5lIG51bWJlcjogMTgxDQo+ID4gMjAyMS0wOC0wMlQwMTowOTozMy4wNzczMzI5WiBFUlJPUiAt ICpUaGUgZnVuY3Rpb24gbmFtZSBbbWFpbl0gZG9lcw0KPiA+IG5vdCBmb2xsb3cgdGhlIHJ1bGVz IDIwMjEtMDgtMDJUMDE6MDk6MzMuMDc5MTkzNVogRVJST1IgLQ0KPiA+IDIwMjEtMDgtMDJUMDE6 MDk6MzMuMDc5Mzg2NVogRVJST1IgLSBFRkkgY29kaW5nIHN0eWxlIGVycm9yDQo+ID4gMjAyMS0w OC0wMlQwMTowOTozMy4wNzk0NTU1WiBFUlJPUiAtICpFcnJvciBjb2RlOiA5MDAyDQo+ID4gMjAy MS0wOC0wMlQwMTowOTozMy4wNzk1MzUwWiBFUlJPUiAtICpUaGUgZnVuY3Rpb24gaGVhZGVycyBz aG91bGQNCj4gPiBmb2xsb3cgRG94eWdlbiBzcGVjaWFsIGRvY3VtZW50YXRpb24gYmxvY2tzIGlu IHNlY3Rpb24gMi4zLjUNCj4gPiAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3OTYyNzFaIEVSUk9SIC0g KmZpbGU6DQo+ID4gLy9ob21lL3ZzdHMvd29yay8xL3MvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVm aVNvcnRMaWIvVW5pdFRlc3QvVWVmaVNvcg0KPiA+IHRMaWJVbml0VGVzdC5jIDIwMjEtMDgtMDJU MDE6MDk6MzMuMDc5Njk4NVogRVJST1IgLSAqTGluZSBudW1iZXI6IDE3OA0KPiA+IDIwMjEtMDgt MDJUMDE6MDk6MzMuMDc5NzYxMFogRVJST1IgLSAqTm8gZG94eWdlbiB0YWdzIGluIGNvbW1lbnQN Cj4gPiAyMDIxLTA4LTAyVDAxOjA5OjMzLjA3OTgyMDhaIEVSUk9SIC0gMjAyMS0wOC0wMlQwMTow OTozMy4wNzk4ODU5Wg0KPiA+IEVSUk9SIC0gLS0tPlRlc3QgRmFpbGVkOiBFY2NDaGVjayBUZXN0 IE5PLVRBUkdFVCByZXR1cm5lZCAxDQo+ID4gMjAyMS0wOC0wMlQwMTowOTozMy4wODA3MzUxWiBQ Uk9HUkVTUyAtIC0tUnVubmluZyBNZGVNb2R1bGVQa2c6IERzYw0KPiA+IENvbXBsZXRlIENoZWNr IFRlc3QgTk8tVEFSR0VUIC0tIDIwMjEtMDgtMDJUMDE6MDk6MzMuMTUyNDc5MFoNCj4gUFJPR1JF U1MNCj4gPiAtIC0tLT5UZXN0IFN1Y2Nlc3M6IERzYyBDb21wbGV0ZSBDaGVjayBUZXN0IE5PLVRB UkdFVA0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuMTUzNjAwNFogUFJPR1JFU1MgLSAtLVJ1bm5p bmcgTWRlTW9kdWxlUGtnOiBDaGFyDQo+ID4gRW5jb2RpbmcgQ2hlY2sgVGVzdCBOTy1UQVJHRVQg LS0gMjAyMS0wOC0wMlQwMTowOTozMy42MjgwMzgwWg0KPiBQUk9HUkVTUw0KPiA+IC0gLS0tPlRl c3QgU3VjY2VzczogQ2hhciBFbmNvZGluZyBDaGVjayBUZXN0IE5PLVRBUkdFVA0KPiA+IDIwMjEt MDgtMDJUMDE6MDk6MzMuNjI4OTA3NlogUFJPR1JFU1MgLSAtLVJ1bm5pbmcgTWRlTW9kdWxlUGtn Og0KPiA+IExpY2Vuc2UgQ2hlY2sgVGVzdCBOTy1UQVJHRVQgLS0gMjAyMS0wOC0wMlQwMTowOToz My42NDk1NjQyWiBQUk9HUkVTUw0KPiA+IC0gLS0tPlRlc3QgU3VjY2VzczogTGljZW5zZSBDaGVj ayBUZXN0IE5PLVRBUkdFVA0KPiA+IDIwMjEtMDgtMDJUMDE6MDk6MzMuNjUwODEyNVogUFJPR1JF U1MgLSAtLVJ1bm5pbmcgTWRlTW9kdWxlUGtnOg0KPiA+IENvbXBpbGVyIFBsdWdpbiBSRUxFQVNF IC0tIDIwMjEtMDgtMDJUMDE6MDk6MzMuNjc4NTE3OFogUFJPR1JFU1MgLQ0KPiA+IFN0YXJ0IHRp bWU6IDIwMjEtMDgtMDIgMDE6MDk6MzMuNjc3OTUyIDIwMjEtMDgtMDJUMDE6MDk6MzMuNjc4Nzcx NloNCj4gUFJPR1JFU1MgLSBTZXR0aW5nIHVwIHRoZSBFbnZpcm9ubWVudCAyMDIxLTA4LTAyVDAx OjA5OjMzLjc3MjUyNDRaDQo+IFBST0dSRVNTIC0gUnVubmluZyBQcmUgQnVpbGQgMjAyMS0wOC0w MlQwMTowOTozMy43NzQwMzU3WiBQUk9HUkVTUyAtDQo+IFJ1bm5pbmcgQnVpbGQgUkVMRUFTRSAy MDIxLTA4LTAyVDAxOjE3OjE4LjU0Nzk4ODVaIFBST0dSRVNTIC0gUnVubmluZw0KPiBQb3N0IEJ1 aWxkDQo+ID4gMjAyMS0wOC0wMlQwMToxNzoxOC41NTExODA3WiBQUk9HUkVTUyAtIEVuZCB0aW1l OiAyMDIxLTA4LTAyDQo+IDAxOjE3OjE4LjU0OTk3NAkgVG90YWwgdGltZSBFbGFwc2VkOiAwOjA3 OjQ0DQo+ID4gMjAyMS0wOC0wMlQwMToxNzoxOC41NTEyOTk3WiBQUk9HUkVTUyAtIC0tLT5UZXN0 IFN1Y2Nlc3M6IENvbXBpbGVyDQo+ID4gUGx1Z2luIFJFTEVBU0UgMjAyMS0wOC0wMlQwMToxNzox OC41NTE5Mjg0WiBQUk9HUkVTUyAtIC0tUnVubmluZw0KPiA+IE1kZU1vZHVsZVBrZzogTGlicmFy eSBDbGFzcyBDaGVjayBUZXN0IE5PLVRBUkdFVCAtLQ0KPiA+IDIwMjEtMDgtMDJUMDE6MTc6MTgu NTYzOTIxNlogUFJPR1JFU1MgLSAtLS0+VGVzdCBTdWNjZXNzOiBMaWJyYXJ5DQo+ID4gQ2xhc3Mg Q2hlY2sgVGVzdCBOTy1UQVJHRVQgMjAyMS0wOC0wMlQwMToxNzoxOC41NjQ4NzkxWiBQUk9HUkVT UyAtDQo+ID4gLS1SdW5uaW5nIE1kZU1vZHVsZVBrZzogRGVwZW5kZW5jeSBDaGVjayBUZXN0IE5P LVRBUkdFVCAtLQ0KPiA+IDIwMjEtMDgtMDJUMDE6MTc6MTguNzMwNjYxMVogUFJPR1JFU1MgLSAt LS0+VGVzdCBTdWNjZXNzOiBEZXBlbmRlbmN5DQo+ID4gQ2hlY2sgVGVzdCBOTy1UQVJHRVQgMjAy MS0wOC0wMlQwMToxNzoxOC43MzE2MTYyWiBQUk9HUkVTUyAtIC0tUnVubmluZw0KPiA+IE1kZU1v ZHVsZVBrZzogU3BlbGwgQ2hlY2sgVGVzdCBOTy1UQVJHRVQgLS0NCj4gPiAyMDIxLTA4LTAyVDAx OjE3OjIzLjc5MjIxNjZaIFdBUk5JTkcgLSAtLS0+VGVzdCBTa2lwcGVkOiBpbiBwbHVnaW4hDQo+ ID4gU3BlbGwgQ2hlY2sgVGVzdCBOTy1UQVJHRVQgMjAyMS0wOC0wMlQwMToxNzoyMy43OTM0MTEy WiBQUk9HUkVTUyAtDQo+ID4gLS1SdW5uaW5nIE1kZU1vZHVsZVBrZzogR3VpZCBDaGVjayBUZXN0 IE5PLVRBUkdFVCAtLQ0KPiA+IDIwMjEtMDgtMDJUMDE6MTc6MjcuMTkyODg1MFogUFJPR1JFU1Mg LSAtLS0+VGVzdCBTdWNjZXNzOiBHdWlkIENoZWNrDQo+ID4gVGVzdCBOTy1UQVJHRVQgMjAyMS0w OC0wMlQwMToxNzoyNy4xOTM5MTI5WiBQUk9HUkVTUyAtIC0tUnVubmluZw0KPiA+IE1kZU1vZHVs ZVBrZzogSG9zdCBVbml0IFRlc3QgRHNjIENvbXBsZXRlIENoZWNrIFRlc3QgTk8tVEFSR0VUIC0t DQo+ID4gMjAyMS0wOC0wMlQwMToxNzoyNy4zNzAzNjQwWiBQUk9HUkVTUyAtIC0tLT5UZXN0IFN1 Y2Nlc3M6IEhvc3QgVW5pdA0KPiA+IFRlc3QgRHNjIENvbXBsZXRlIENoZWNrIFRlc3QgTk8tVEFS R0VUIDIwMjEtMDgtMDJUMDE6MTc6MjcuMzczMTY3NloNCj4gPiBFUlJPUiAtIE92ZXJhbGwgQnVp bGQgU3RhdHVzOiBFcnJvciAyMDIxLTA4LTAyVDAxOjE3OjI3LjM3MzMyODNaDQo+ID4gUFJPR1JF U1MgLSBUaGVyZSB3ZXJlIDEgZmFpbHVyZXMgb3V0IG9mIDEwIGF0dGVtcHRzDQo+ID4gMjAyMS0w OC0wMlQwMToxNzoyNy4zNzM0NTAxWiBTRUNUSU9OIC0gU3VtbWFyeQ0KPiA+IDIwMjEtMDgtMDJU MDE6MTc6MjcuMzczNTYxM1ogRVJST1IgLSBFcnJvcg0KPiA+IDIwMjEtMDgtMDJUMDE6MTc6Mjcu NDE1OTg0MloNCj4gPiAjI1tlcnJvcl0vb3B0L2hvc3RlZHRvb2xjYWNoZS9QeXRob24vMy44LjEx L3g2NC9iaW4vc3R1YXJ0X2NpX2J1aWxkDQo+ID4gZmFpbGVkIHdpdGggcmV0dXJuIGNvZGU6IDEg MjAyMS0wOC0wMlQwMToxNzoyNy40MTczMTM0Wg0KPiA+ICMjW2Vycm9yXS9vcHQvaG9zdGVkdG9v bGNhY2hlL1B5dGhvbi8zLjguMTEveDY0L2Jpbi9zdHVhcnRfY2lfYnVpbGQNCj4gPiBmYWlsZWQg d2l0aCBlcnJvcjoNCj4gPiAvb3B0L2hvc3RlZHRvb2xjYWNoZS9QeXRob24vMy44LjExL3g2NC9i aW4vc3R1YXJ0X2NpX2J1aWxkIGZhaWxlZCB3aXRoDQo+ID4gcmV0dXJuIGNvZGU6IDEgMjAyMS0w OC0wMlQwMToxNzoyNy40MTc4MjUyWiAjI1tzZWN0aW9uXUZpbmlzaGluZzoNCj4gPiBCdWlsZCBh bmQgVGVzdCBNZGVNb2R1bGVQa2cgSUEzMixYNjQsQVJNLEFBUkNINjQsUklTQ1Y2NA0KPiA+DQo+ ID4gQmVzdCBSZWdhcmRzLA0KPiA+IEhhbyBXdQ0KPiA+DQo+ID4NCj4gPj4NCj4gPj4gSSB3aWxs IHdhaXQgYSBjb3VwbGUgZGF5cyBiZWZvcmUgbWVyZ2luZyB0byBzZWUgaWYgYW55IGFkZGl0aW9u YWwNCj4gPj4gY29tbWVudCBmcm9tIG90aGVyIHJldmlld2Vycy4NCj4gPj4NCj4gPj4gQmVzdCBS ZWdhcmRzLA0KPiA+PiBIYW8gV3UNCj4gPj4NCj4gPj4NCj4gPj4+DQo+ID4+PiBDYzogSmlhbiBK IFdhbmcgPGppYW4uai53YW5nQGludGVsLmNvbT4NCj4gPj4+IENjOiBIYW8gQSBXdSA8aGFvLmEu d3VAaW50ZWwuY29tPg0KPiA+Pj4gU2lnbmVkLW9mZi1ieTogV2VueWkgWGllIDx4aWV3ZW55aTJA aHVhd2VpLmNvbT4NCj4gPj4+IC0tLQ0KPiA+Pj4gIE1kZU1vZHVsZVBrZy9UZXN0L01kZU1vZHVs ZVBrZ0hvc3RUZXN0LmRzYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICsNCj4gPj4+ICBN ZGVNb2R1bGVQa2cvTGlicmFyeS9VZWZpU29ydExpYi9Vbml0VGVzdC9VZWZpU29ydExpYlVuaXRU ZXN0LmluZiB8DQo+ID4+PiAzMg0KPiA+Pj4gKysrKw0KPiA+Pj4gIE1kZU1vZHVsZVBrZy9MaWJy YXJ5L1VlZmlTb3J0TGliL1VuaXRUZXN0L1VlZmlTb3J0TGliVW5pdFRlc3QuYyAgIHwgMTg4DQo+ ID4+PiArKysrKysrKysrKysrKysrKysrKw0KPiA+Pj4gIDMgZmlsZXMgY2hhbmdlZCwgMjI2IGlu c2VydGlvbnMoKykNCj4gPj4+DQo+ID4+PiBkaWZmIC0tZ2l0IGEvTWRlTW9kdWxlUGtnL1Rlc3Qv TWRlTW9kdWxlUGtnSG9zdFRlc3QuZHNjDQo+ID4+PiBiL01kZU1vZHVsZVBrZy9UZXN0L01kZU1v ZHVsZVBrZ0hvc3RUZXN0LmRzYw0KPiA+Pj4gaW5kZXggNGRhNDY5MmM4NDUxLi5jOWVjODM1ZGY2 NWQgMTAwNjQ0DQo+ID4+PiAtLS0gYS9NZGVNb2R1bGVQa2cvVGVzdC9NZGVNb2R1bGVQa2dIb3N0 VGVzdC5kc2MNCj4gPj4+ICsrKyBiL01kZU1vZHVsZVBrZy9UZXN0L01kZU1vZHVsZVBrZ0hvc3RU ZXN0LmRzYw0KPiA+Pj4gQEAgLTQxLDMgKzQxLDkgQEAgW0NvbXBvbmVudHNdDQo+ID4+PiAgICAg IDxQY2RzRml4ZWRBdEJ1aWxkPg0KPiA+Pj4NCj4gPj4+DQo+ID4+IGdFZmlNZGVNb2R1bGVQa2dU b2tlblNwYWNlR3VpZC5QY2RBbGxvd1ZhcmlhYmxlUG9saWN5RW5mb3JjZW1lbnREaXMNCj4gPj4+ IGFibGV8VFJVRQ0KPiA+Pj4gICAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgTWRlTW9kdWxlUGtnL0xp YnJhcnkvVWVmaVNvcnRMaWIvVW5pdFRlc3QvVWVmaVNvcnRMaWJVbml0VGVzdC5pbmYgew0KPiA+ Pj4gKyAgICA8TGlicmFyeUNsYXNzZXM+DQo+ID4+PiArICAgICAgVWVmaVNvcnRMaWJ8TWRlTW9k dWxlUGtnL0xpYnJhcnkvVWVmaVNvcnRMaWIvVWVmaVNvcnRMaWIuaW5mDQo+ID4+PiArDQo+ID4+ PiArIERldmljZVBhdGhMaWJ8TWRlUGtnL0xpYnJhcnkvVWVmaURldmljZVBhdGhMaWIvVWVmaURl dmljZVBhdGhMaWIuaQ0KPiA+Pj4gKyBEZXZpY2VQYXRoTGlifG5mDQo+ID4+PiArICB9DQo+ID4+ PiBkaWZmIC0tZ2l0DQo+ID4+PiBhL01kZU1vZHVsZVBrZy9MaWJyYXJ5L1VlZmlTb3J0TGliL1Vu aXRUZXN0L1VlZmlTb3J0TGliVW5pdFRlc3QuaW5mDQo+ID4+PiBiL01kZU1vZHVsZVBrZy9MaWJy YXJ5L1VlZmlTb3J0TGliL1VuaXRUZXN0L1VlZmlTb3J0TGliVW5pdFRlc3QuaW5mDQo+ID4+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi44NWQ4ZGNkNjk2 MTkNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKw0KPiA+PiBiL01kZU1vZHVsZVBrZy9M aWJyYXJ5L1VlZmlTb3J0TGliL1VuaXRUZXN0L1VlZmlTb3J0TGliVW5pdFRlc3QuaW4NCj4gPj4+ ICsrKyBmDQo+ID4+PiBAQCAtMCwwICsxLDMyIEBADQo+ID4+PiArIyMgQGZpbGUNCj4gPj4+ICsj IFRoaXMgaXMgYSB1bml0IHRlc3QgZm9yIHRoZSBVZWZpU29ydExpYi4NCj4gPj4+ICsjDQo+ID4+ PiArIyBDb3B5cmlnaHQgKEMpIEh1YXdlaSBUZWNobm9sb2dpZXMgQ28uLCBMdGQuIEFsbCByaWdo dHMgcmVzZXJ2ZWQgIw0KPiA+Pj4gK1NQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50ICMjDQo+ID4+PiArDQo+ID4+PiArW0RlZmluZXNdDQo+ID4+PiArICBJTkZfVkVS U0lPTiAgICAgICAgID0gMHgwMDAxMDAxNw0KPiA+Pj4gKyAgQkFTRV9OQU1FICAgICAgICAgICA9 IFVlZmlTb3J0TGliVW5pdFRlc3QNCj4gPj4+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgPSAyNzEz MzdBMy0wRDc5LUJBM0UtQkMwMy03MTRFNTE4RTNCMUINCj4gPj4+ICsgIFZFUlNJT05fU1RSSU5H ICAgICAgPSAxLjANCj4gPj4+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgPSBIT1NUX0FQUExJQ0FU SU9ODQo+ID4+PiArDQo+ID4+PiArIw0KPiA+Pj4gKyMgVGhlIGZvbGxvd2luZyBpbmZvcm1hdGlv biBpcyBmb3IgcmVmZXJlbmNlIG9ubHkgYW5kIG5vdCByZXF1aXJlZA0KPiA+Pj4gK2J5IHRoZQ0K PiA+Pj4gYnVpbGQgdG9vbHMuDQo+ID4+PiArIw0KPiA+Pj4gKyMgIFZBTElEX0FSQ0hJVEVDVFVS RVMgICAgICAgICAgID0gSUEzMiBYNjQNCj4gPj4+ICsjDQo+ID4+PiArDQo+ID4+PiArW1NvdXJj ZXNdDQo+ID4+PiArICBVZWZpU29ydExpYlVuaXRUZXN0LmMNCj4gPj4+ICsNCj4gPj4+ICtbUGFj a2FnZXNdDQo+ID4+PiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+Pj4gKyAgTWRlTW9kdWxlUGtn L01kZU1vZHVsZVBrZy5kZWMNCj4gPj4+ICsgIFVuaXRUZXN0RnJhbWV3b3JrUGtnL1VuaXRUZXN0 RnJhbWV3b3JrUGtnLmRlYw0KPiA+Pj4gKw0KPiA+Pj4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4gPj4+ ICsgIFVuaXRUZXN0TGliDQo+ID4+PiArICBEZWJ1Z0xpYg0KPiA+Pj4gKyAgVWVmaVNvcnRMaWIN Cj4gPj4+IGRpZmYgLS1naXQNCj4gPj4+IGEvTWRlTW9kdWxlUGtnL0xpYnJhcnkvVWVmaVNvcnRM aWIvVW5pdFRlc3QvVWVmaVNvcnRMaWJVbml0VGVzdC5jDQo+ID4+PiBiL01kZU1vZHVsZVBrZy9M aWJyYXJ5L1VlZmlTb3J0TGliL1VuaXRUZXN0L1VlZmlTb3J0TGliVW5pdFRlc3QuYw0KPiA+Pj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uNzFmMzBkOGI5 ZjdmDQo+ID4+PiAtLS0gL2Rldi9udWxsDQo+ID4+PiArKysgYi9NZGVNb2R1bGVQa2cvTGlicmFy eS9VZWZpU29ydExpYi9Vbml0VGVzdC9VZWZpU29ydExpYlVuaXRUZXN0Lg0KPiA+Pj4gKysrIGMN Cj4gPj4+IEBAIC0wLDAgKzEsMTg4IEBADQo+ID4+PiArLyoqIEBmaWxlDQo+ID4+PiArICBVbml0 IHRlc3RzIG9mIHRoZSBVZWZpU29ydExpYg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQ29weXJpZ2h0IChD KSBIdWF3ZWkgVGVjaG5vbG9naWVzIENvLiwgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkDQo+ID4+ PiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+Pj4g Kw0KPiA+Pj4gKyoqLw0KPiA+Pj4gKw0KPiA+Pj4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+Pj4g KyNpbmNsdWRlIDxzdHJpbmcuaD4NCj4gPj4+ICsjaW5jbHVkZSA8c3RkYXJnLmg+DQo+ID4+PiAr I2luY2x1ZGUgPHN0ZGRlZi5oPg0KPiA+Pj4gKyNpbmNsdWRlIDxzZXRqbXAuaD4NCj4gPj4+ICsj aW5jbHVkZSA8Y21vY2thLmg+DQo+ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgPFVlZmkuaD4NCj4g Pj4+ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+DQo+ID4+PiArI2luY2x1ZGUgPExpYnJh cnkvRGVidWdMaWIuaD4NCj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9NZW1vcnlBbGxvY2F0aW9u TGliLmg+DQo+ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgPExpYnJhcnkvVW5pdFRlc3RMaWIuaD4N Cj4gPj4+ICsjaW5jbHVkZSA8TGlicmFyeS9Tb3J0TGliLmg+DQo+ID4+PiArDQo+ID4+PiArI2Rl ZmluZSBVTklUX1RFU1RfQVBQX05BTUUgICAgICAgICJVZWZpU29ydExpYiBVbml0IFRlc3RzIg0K PiA+Pj4gKyNkZWZpbmUgVU5JVF9URVNUX0FQUF9WRVJTSU9OICAgICAiMS4wIg0KPiA+Pj4gKw0K PiA+Pj4gKyNkZWZpbmUgVEVTVF9BUlJBWV9TSVpFXzkgICAgICAgICA5DQo+ID4+PiArDQo+ID4+ PiArLyoqDQo+ID4+PiArICBUaGUgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IFBlcmZvcm1RdWlja1Nv cnQgdG8gY29tcGFyZSBpbnQgdmFsdWVzLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSBM ZWZ0ICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gZmlyc3QgYnVmZmVyLg0KPiA+Pj4gKyAgQHBh cmFtW2luXSBSaWdodCAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gc2Vjb25kIGJ1ZmZlci4NCj4g Pj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgMCAgICAgICAgICAgICAgICAgIEJ1ZmZlcjEgZXF1YWwg dG8gQnVmZmVyMi4NCj4gPj4+ICsgIEByZXR1cm4gPDAgICAgICAgICAgICAgICAgIEJ1ZmZlcjEg aXMgbGVzcyB0aGFuIEJ1ZmZlcjIuDQo+ID4+PiArICBAcmV0dXJuID4wICAgICAgICAgICAgICAg ICBCdWZmZXIxIGlzIGdyZWF0ZXIgdGhhbiBCdWZmZXIyLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0K PiA+Pj4gK0lOVE4NCj4gPj4+ICtFRklBUEkNCj4gPj4+ICtUZXN0Q29tcGFyZUZ1bmN0aW9uICgN Cj4gPj4+ICsgIElOIENPTlNUIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgKkxlZnQsDQo+ ID4+PiArICBJTiBDT05TVCBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICpSaWdodA0KPiA+ Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIGlmICgqKFVJTlQzMiopUmlnaHQgPiAqKFVJTlQz MiopTGVmdCkgew0KPiA+Pj4gKyAgICByZXR1cm4gMTsNCj4gPj4+ICsgIH0gZWxzZSBpZiAoKihV SU5UMzIqKVJpZ2h0IDwgKihVSU5UMzIqKUxlZnQpIHsNCj4gPj4+ICsgICAgcmV0dXJuIC0xOw0K PiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgcmV0dXJuIDA7DQo+ID4+PiArfQ0KPiA+Pj4g Kw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgVW5pdCB0ZXN0IGZvciBQZXJmb3JtUXVpY2tTb3J0ICgp IEFQSSBvZiB0aGUgVWVmaVNvcnRMaWIuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBD b250ZXh0ICAgIFtPcHRpb25hbF0gQW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgZW5hYmxlczoN Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgMSkgdGVzdC1jYXNlIHJldXNlIHdpdGgg dmFyaWVkIHBhcmFtZXRlcnMgYW5kDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDIp IHRlc3QtY2FzZSByZS1lbnRyeSBmb3IgVGFyZ2V0IHRlc3RzIHRoYXQgbmVlZCBhDQo+ID4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgIHJlYm9vdC4gIFRoaXMgcGFyYW1ldGVyIGlzIGEgVk9J RCogYW5kIGl0IGlzIHRoZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25z aWJpbGl0eSBvZiB0aGUgdGVzdCBhdXRob3IgdG8gZW5zdXJlIHRoYXQgdGhlDQo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRzIGFyZSB3ZWxsIHVuZGVyc3Rvb2QgYnkgYWxs IHRlc3QgY2FzZXMgdGhhdCBtYXkNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3VtZSBpdC4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAg ICAgICAgICAgVGhlIFVuaXQgdGVzdCBoYXMgY29tcGxldGVkIGFuZCB0aGUNCj4gPj4+IHRlc3QN Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMg c3VjY2Vzc2Z1bC4NCj4gPj4+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZBSUxF RCAgQSB0ZXN0IGNhc2UgYXNzZXJ0aW9uIGhhcw0KPiA+PiBmYWlsZWQuDQo+ID4+PiArKiovDQo+ ID4+PiArVU5JVF9URVNUX1NUQVRVUw0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK1NvcnRVSU5UMzJB cnJheVNob3VsZFN1Y2NlZWQgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRl eHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBVSU5UTiBUZXN0Q291bnQgPSBURVNU X0FSUkFZX1NJWkVfOTsNCj4gPj4+ICsgIFVJTlQzMiBUZXN0QnVmZmVyW1RFU1RfQVJSQVlfU0la RV85XSA9IHsxLCAyLCAzLCA0LCA1LCA2LCA3ICw4LA0KPiA+Pj4gKzl9Ow0KPiA+Pj4gKyAgVUlO VDMyIFRlc3RSZXN1bHRbVEVTVF9BUlJBWV9TSVpFXzldID0gezksIDgsIDcsIDYsIDUsIDQsIDMs IDIsDQo+ID4+PiArMX07DQo+ID4+PiArDQo+ID4+PiArICBQZXJmb3JtUXVpY2tTb3J0IChUZXN0 QnVmZmVyLCBUZXN0Q291bnQsIHNpemVvZiAoVUlOVDMyKSwNCj4gPj4+ICsgKFNPUlRfQ09NUEFS RSlUZXN0Q29tcGFyZUZ1bmN0aW9uKTsNCj4gPj4+ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKFRl c3RCdWZmZXIsIFRlc3RSZXN1bHQsIHNpemVvZiAoVUlOVDMyKSAqDQo+ID4+PiArIFRFU1RfQVJS QVlfU0laRV85KTsNCj4gPj4+ICsNCj4gPj4+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0K PiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIFVuaXQgdGVzdCBmb3IgU3Ry aW5nQ29tcGFyZSAoKSBBUEkgb2YgdGhlIFVlZmlTb3J0TGliLg0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHBhcmFtW2luXSAgQ29udGV4dCAgICBbT3B0aW9uYWxdIEFuIG9wdGlvbmFsIHBhcmFtZXRlciB0 aGF0IGVuYWJsZXM6DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgIDEpIHRlc3QtY2Fz ZSByZXVzZSB3aXRoIHZhcmllZCBwYXJhbWV0ZXJzIGFuZA0KPiA+Pj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAyKSB0ZXN0LWNhc2UgcmUtZW50cnkgZm9yIFRhcmdldCB0ZXN0cyB0aGF0IG5l ZWQgYQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICByZWJvb3QuICBUaGlzIHBhcmFt ZXRlciBpcyBhIFZPSUQqIGFuZCBpdCBpcyB0aGUNCj4gPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHRlc3QgYXV0aG9yIHRvIGVuc3VyZSB0aGF0IHRo ZQ0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50cyBhcmUgd2VsbCB1bmRl cnN0b29kIGJ5IGFsbCB0ZXN0IGNhc2VzIHRoYXQgbWF5DQo+ID4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN1bWUgaXQuDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QgaGFzIGNvbXBsZXRlZCBhbmQgdGhl DQo+ID4+PiB0ZXN0DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNhc2Ugd2FzIHN1Y2Nlc3NmdWwuDQo+ID4+PiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJS T1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlIGFzc2VydGlvbiBoYXMNCj4gPj4gZmFpbGVkLg0K PiA+Pj4gKyoqLw0KPiA+Pj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gPj4+ICtFRklBUEkNCj4gPj4+ ICtDb21wYXJlU2FtZUJ1ZmZlclNob3VsZFN1Y2NlZWQgKA0KPiA+Pj4gKyAgSU4gVU5JVF9URVNU X0NPTlRFWFQgIENvbnRleHQNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBJTlROIHJl dHZhbDsNCj4gPj4+ICsgIENPTlNUIENIQVIxNiogVGVzdEJ1ZmZlcltdID0geyBMImFiY2RlZmci IH07DQo+ID4+PiArDQo+ID4+PiArICByZXR2YWwgPSBTdHJpbmdDb21wYXJlIChUZXN0QnVmZmVy LCBUZXN0QnVmZmVyKTsgIFVUX0FTU0VSVF9UUlVFDQo+ID4+PiArIChyZXR2YWwgPT0gMCk7DQo+ ID4+PiArDQo+ID4+PiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gPj4+ICt9DQo+ID4+ PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBJbml0aWFsemUgdGhlIHVuaXQgdGVzdCBmcmFtZXdv cmssIHN1aXRlLCBhbmQgdW5pdCB0ZXN0cyBmb3IgdGhlDQo+ID4+PiArICBVZWZpU29ydExpYiBh bmQgcnVuIHRoZSBVZWZpU29ydExpYiB1bml0IHRlc3QuDQo+ID4+PiArDQo+ID4+PiArICBAcmV0 dmFsICBFRklfU1VDQ0VTUyAgICAgICAgICAgQWxsIHRlc3QgY2FzZXMgd2VyZSBkaXNwYXRjaGVk Lg0KPiA+Pj4gKyAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGFyZSBub3Qg ZW5vdWdoIHJlc291cmNlcw0KPiA+Pj4gYXZhaWxhYmxlIHRvDQo+ID4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5pdGlhbGl6ZSB0aGUgdW5pdCB0ZXN0cy4NCj4gPj4+ICsq Ki8NCj4gPj4+ICtTVEFUSUMNCj4gPj4+ICtFRklfU1RBVFVTDQo+ID4+PiArRUZJQVBJDQo+ID4+ PiArVW5pdFRlc3RpbmdFbnRyeSAoDQo+ID4+PiArICBWT0lEDQo+ID4+PiArICApDQo+ID4+PiAr ew0KPiA+Pj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gPj4+ICsg IFVOSVRfVEVTVF9GUkFNRVdPUktfSEFORExFICBGcmFtZXdvcms7DQo+ID4+PiArICBVTklUX1RF U1RfU1VJVEVfSEFORExFICAgICAgU29ydFRlc3RzOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgRnJhbWV3 b3JrID0gTlVMTDsNCj4gPj4+ICsNCj4gPj4+ICsgIERFQlVHKCggREVCVUdfSU5GTywgIiVhIHYl YVxuIiwgVU5JVF9URVNUX0FQUF9OQU1FLA0KPiA+Pj4gKyBVTklUX1RFU1RfQVBQX1ZFUlNJT04g KSk7DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gU3RhcnQgc2V0dGluZyB1cCB0 aGUgdGVzdCBmcmFtZXdvcmsgZm9yIHJ1bm5pbmcgdGhlIHRlc3RzLg0KPiA+Pj4gKyAgLy8NCj4g Pj4+ICsgIFN0YXR1cyA9IEluaXRVbml0VGVzdEZyYW1ld29yayAoJkZyYW1ld29yaywgVU5JVF9U RVNUX0FQUF9OQU1FLA0KPiA+Pj4gKyBnRWZpQ2FsbGVyQmFzZU5hbWUsIFVOSVRfVEVTVF9BUFBf VkVSU0lPTik7ICBpZiAoRUZJX0VSUk9SDQo+ID4+PiArIChTdGF0dXMpKQ0KPiA+PiB7DQo+ID4+ PiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWlsZWQgaW4gSW5pdFVuaXRUZXN0RnJhbWV3 b3JrLiBTdGF0dXMNCj4gPj4+ID0gJXJcbiIsIFN0YXR1cykpOw0KPiA+Pj4gKyAgICBnb3RvIEVY SVQ7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gUG9wdWxh dGUgdGhlIFVlZmlTb3J0TGliIFVuaXQgVGVzdCBTdWl0ZS4NCj4gPj4+ICsgIC8vDQo+ID4+PiAr ICBTdGF0dXMgPSBDcmVhdGVVbml0VGVzdFN1aXRlICgmU29ydFRlc3RzLCBGcmFtZXdvcmssICJV ZWZpU29ydExpYg0KPiA+Pj4gKyBTb3J0IFRlc3RzIiwgIlVlZmlTb3J0TGliLlNvcnRMaWIiLCBO VUxMLCBOVUxMKTsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPj4+ICsgICAgREVCVUcg KChERUJVR19FUlJPUiwgIkZhaWxlZCBpbiBDcmVhdGVVbml0VGVzdFN1aXRlIGZvcg0KPiA+Pj4g KyBVZWZpU29ydExpYg0KPiA+Pj4gQVBJIFRlc3RzXG4iKSk7DQo+ID4+PiArICAgIFN0YXR1cyA9 IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+Pj4gKyAgICBnb3RvIEVYSVQ7DQo+ID4+PiArICB9 DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgLS0tLS0tLS0tLS0t LS1TdWl0ZS0tLS0tLS0tRGVzY3JpcHRpb24tLS0tLS0tLS0tLS1OYW1lLS0tLS0tLS0tLS0tDQo+ ID4+PiArIC0tDQo+ID4+PiArIEZ1DQo+ID4+PiArIG5jdGlvbi0tLS0tLS0tLS0tLS0tLS1QcmUt LS1Qb3N0LS0tQ29udGV4dC0tLS0tLS0tLS0tDQo+ID4+PiArICAvLw0KPiA+Pj4gKyAgQWRkVGVz dENhc2UgKFNvcnRUZXN0cywgIlNvcnQgdGhlIEFycmF5IiwgICAgICAgICJTb3J0IiwNCj4gPj4+ IFNvcnRVSU5UMzJBcnJheVNob3VsZFN1Y2NlZWQsICAgTlVMTCwgTlVMTCwgTlVMTCk7DQo+ID4+ PiArICBBZGRUZXN0Q2FzZSAoU29ydFRlc3RzLCAiQ29tcGFyZSB0aGUgQnVmZmVyIiwgICAgIkNv bXBhcmUiLA0KPiA+Pj4gQ29tcGFyZVNhbWVCdWZmZXJTaG91bGRTdWNjZWVkLCBOVUxMLCBOVUxM LCBOVUxMKTsNCj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBFeGVjdXRlIHRoZSB0 ZXN0cy4NCj4gPj4+ICsgIC8vDQo+ID4+PiArICBTdGF0dXMgPSBSdW5BbGxUZXN0U3VpdGVzIChG cmFtZXdvcmspOw0KPiA+Pj4gKw0KPiA+Pj4gK0VYSVQ6DQo+ID4+PiArICBpZiAoRnJhbWV3b3Jr KSB7DQo+ID4+PiArICAgIEZyZWVVbml0VGVzdEZyYW1ld29yayAoRnJhbWV3b3JrKTsNCj4gPj4+ ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsgIHJldHVybiBTdGF0dXM7DQo+ID4+PiArfQ0KPiA+Pj4g Kw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgU3RhbmRhcmQgUE9TSVggQyBlbnRyeSBwb2ludCBmb3Ig aG9zdCBiYXNlZCB1bml0IHRlc3QgZXhlY3V0aW9uLg0KPiA+Pj4gKyoqLw0KPiA+Pj4gK2ludA0K PiA+Pj4gK21haW4gKA0KPiA+Pj4gKyAgaW50IGFyZ2MsDQo+ID4+PiArICBjaGFyICphcmd2W10N Cj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICByZXR1cm4gVW5pdFRlc3RpbmdFbnRyeSAo KTsNCj4gPj4+ICt9DQo+ID4+PiAtLQ0KPiA+Pj4gMi4yMC4xLndpbmRvd3MuMQ0KPiA+Pg0KPiA+ Pg0KPiA+Pg0KPiA+PiANCj4gPj4NCj4gPg0KPiA+IC4NCj4gPg0K