From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: mx.groups.io; dkim=pass header.i=@armh.onmicrosoft.com header.s=selector2-armh-onmicrosoft-com header.b=PrHcNSk7; spf=pass (domain: arm.com, ip: 40.107.13.58, mailfrom: jeff.booher-kaeding@arm.com) Received: from EUR01-HE1-obe.outbound.protection.outlook.com (EUR01-HE1-obe.outbound.protection.outlook.com [40.107.13.58]) by groups.io with SMTP; Mon, 05 Aug 2019 14:08:27 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Lok0fsqre8FXNkgC8GH5T6Uza9nmmci8msj2nOIJSca509b8UwzMvfueSzfDtYG/DqIoJvKBXLwQrkk6HpWKct878146j5zGUSDbNs3IWmsfDvmmbRwPzSiIwuByTD6oTppe38TCmdPtdNs6qjE4q+D86JNFQUVC96YLyZ+6D9o7WES4OjI6s+4hkNqfNIv0bU7yhCgin4WnQ4U5O6RmIXhYbLsx4g8vVmgh1klOtt7AHOpKci/S+ETTY5cUIfcG4b5kDoqrujvb1jB2zlAeyb+lLaNBuo//Jn9mfS3TxwuyEriYDCbIQbdIoaiEJUN34vqQwZiawsaOrdOQaTMiQw== 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=11kudnlOu2oHyjqxIDx0c47MsEOLnIF5s+U5zlOIUyw=; b=hg3HYPesZLSv8RXhnsTcZuzKYNVGDToZCi7XpXmxnznDA5Rxa05/eMPd4vpP6nScgXG7QnBV9BRMRorzcQp5ss96y6lFhx1uz50z5nUS3476jS8FB752K4hHpfsgswL/7Gg/fBfyWC66E0UyGVJDATN1QJT0JTWCepc6zJHujYNQRt/qPxAyEh9VQ3fzrYSncosP9OVOOW2+nhyFx2F6XqexhHNd2MicvRfmxfIJbcKrXRMetNK3hGKXOvq05tySsAU5ICMiwwH8voBlBt6UYIa8fMur+yzgEbgnTz2a0YZUJUYMvFb5wsA+WlihMf9gGwF7f1jN60Yw6xxx4W+Lhg== ARC-Authentication-Results: i=1; mx.microsoft.com 1;spf=pass smtp.mailfrom=arm.com;dmarc=pass action=none header.from=arm.com;dkim=pass header.d=arm.com;arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=11kudnlOu2oHyjqxIDx0c47MsEOLnIF5s+U5zlOIUyw=; b=PrHcNSk7P802YnlmvIssjZ3HibIWs8F+YUG80720Tk3wlfrxredVEX9Si6HejZLlmcbeYRACvkskKbgBe1QmQFoPw21yhpyGxBMdNJF+mvrjK8OPB3Zjlyfkr9grKSelNZ7772qrxuZ+vcUexUYQgX7E4zUOXHN+DUd9XYq30zU= Received: from AM0PR08MB5171.eurprd08.prod.outlook.com (10.255.28.153) by AM0PR08MB5281.eurprd08.prod.outlook.com (20.178.117.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2136.14; Mon, 5 Aug 2019 21:08:21 +0000 Received: from AM0PR08MB5171.eurprd08.prod.outlook.com ([fe80::64fb:c65e:471b:dec9]) by AM0PR08MB5171.eurprd08.prod.outlook.com ([fe80::64fb:c65e:471b:dec9%7]) with mapi id 15.20.2136.018; Mon, 5 Aug 2019 21:08:20 +0000 From: Jeff Booher-Kaeding To: shrishail , "devel@edk2.groups.io" CC: "eric.jin@intel.com" , Supreeth Venkatesh Subject: Re: [edk2-test][PATCH V2 1/3] Adding FMP to IHVSCT. Thread-Topic: [edk2-test][PATCH V2 1/3] Adding FMP to IHVSCT. Thread-Index: AQHVSDdqY/jqa/ctckC6GllLdvcnS6btE1QA Date: Mon, 5 Aug 2019 21:08:20 +0000 Message-ID: <5260170f0148b7043925454a1d7f6dfcd0e7f6de.camel@arm.com> References: <20190801070326.1852-1-shrishail.patil@microchip.com> In-Reply-To: <20190801070326.1852-1-shrishail.patil@microchip.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: SN1PR12CA0107.namprd12.prod.outlook.com (2603:10b6:802:21::42) To AM0PR08MB5171.eurprd08.prod.outlook.com (2603:10a6:208:159::25) authentication-results: spf=none (sender IP is ) smtp.mailfrom=Jeff.Booher-Kaeding@arm.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: Evolution 3.28.5-0ubuntu0.18.04.1 x-originating-ip: [217.140.111.135] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 89a528ca-ac1d-4056-b80b-08d719e90b19 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:AM0PR08MB5281; x-ms-traffictypediagnostic: AM0PR08MB5281: x-ms-exchange-purlcount: 1 x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6790; x-forefront-prvs: 01208B1E18 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(396003)(376002)(366004)(136003)(39860400002)(346002)(199004)(189003)(40434004)(6512007)(68736007)(53946003)(6306002)(53936002)(15188155005)(446003)(16799955002)(11346002)(99286004)(6436002)(186003)(53376002)(4326008)(25786009)(486006)(2616005)(476003)(110136005)(54906003)(316002)(102836004)(19627235002)(71190400001)(66066001)(5660300002)(14444005)(5024004)(256004)(71200400001)(6486002)(30864003)(26005)(52116002)(478600001)(76176011)(66446008)(118296001)(966005)(2906002)(50226002)(64756008)(6116002)(3846002)(6246003)(86362001)(66946007)(66556008)(229853002)(66476007)(36756003)(2501003)(8936002)(386003)(7736002)(6506007)(8676002)(81156014)(81166006)(305945005)(14454004)(99106002)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM0PR08MB5281;H:AM0PR08MB5171.eurprd08.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: HRDEmM6J7a4e7IFzvpL+jaFqRj7+aaCKmricBHA92DokFcK60CxwNRngt2lYCcd+9nyyytIrd2p6B1GUzWLk/PruZMBdRBGqbRLbNvVX9MwbOHwPiAkasaw9KIJYa7fQrJHjvutyaXzrGJBc+lwSZ3/j5+DfLSdbmtbnDUkto6iTfXgpTDMCcfXrUxTq34T1pqwPtwhrFSW5elscmwIcovEJHgZQPl9bmIZCh52U8sZLF+59VJzbdIm//EzkZ50MmffjEQ4WZAZcarj4BYVmHaiSjTIVXbN9Wmoh4JZkKTDZvIumcznMTtB/rnAgWDKeiKGCFRDTUq4gb/ctkbldY44tb1dLEzgT+Qymknxm7eyYdzK5/jvdkizWKZCaeXsXNxwCXD0tOEvKoTHMLijVbRJZ06J1ev0fgMEqutWLOOw= MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 89a528ca-ac1d-4056-b80b-08d719e90b19 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Aug 2019 21:08:20.6970 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Jeff.Booher-Kaeding@arm.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM0PR08MB5281 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 TXkgY29tbWVudHMgYXJlIGlubGluZSwgYW5kIG15IHJldmlldyBpcyBjb25kdGlvbmFsIHVwb24g Zml4aW5nIHRoZW0NCg0KUmV2aWV3ZC1ieTogSmVmZiBCb29oZXItS2FlZGluZyA8SmVmZi5Cb29o ZXItS2FlZGluZ0Bhcm0uY29tPg0KDQoNCk9uIFRodSwgMjAxOS0wOC0wMSBhdCAxMjozMyArMDUz MCwgc2hyaXNoYWlsIHdyb3RlOg0KPiBGcm9tOiBTaHJpc2hhaWwgUGF0aWwgPFNocmlzaGFpbC5Q YXRpbEBtaWNyb2NoaXAuY29tPg0KPg0KPiBBZGRpbmcgRmlybXdhcmUgTWFuYWdlbWVudCBQcm90 b2NvbCB0byBJSFZTQ1QuDQo+IFRoaXMgcGF0Y2ggY29udGFpbnMgc291cmNlIGNvZGUgd2hpY2gg aXMgY29waWVkIGZyb20NCj4gVUVGSVNDVCBhbmQgYWRkZWQgaW50byBJSFZTQ1QuDQo+DQo+IENv bnRyaWJ1dGVkLXVuZGVyOiBUaWFub0NvcmUgQ29udHJpYnV0aW9uIEFncmVlbWVudCAxLjENCj4g U2lnbmVkLW9mZi1ieTogc2hyaXNoYWlsIHBhdGlsIDxzaHJpc2hhaWwucGF0aWxAbWljcm9jaGlw LmNvbT4NCj4gLS0tDQo+IC4uLi9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZS5j ICAgICB8IDM2MzINCj4gKysrKysrKysrKysrKysrKysNCj4gLi4uL0Zpcm13YXJlTWFuYWdlbWVu dEJCVGVzdEZ1bmN0aW9uLmMgICAgICAgIHwgIDg5MSArKysrDQo+IC4uLi9GaXJtd2FyZU1hbmFn ZW1lbnRCQlRlc3RNYWluLmMgICAgICAgICAgICB8ICAyMjggKysNCj4gLi4uL0Zpcm13YXJlTWFu YWdlbWVudEJCVGVzdE1haW4uaCAgICAgICAgICAgIHwgIDIyMyArDQo+IC4uLi9GaXJtd2FyZU1h bmFnZW1lbnQvQmxhY2tCb3hUZXN0L0d1aWQuYyAgICB8ICAgNjMgKw0KPiAuLi4vRmlybXdhcmVN YW5hZ2VtZW50L0JsYWNrQm94VGVzdC9HdWlkLmggICAgfCAgMTUzICsNCj4gLi4uL0lodkZpcm13 YXJlTWFuYWdlbWVudEJCVGVzdC5pbmYgICAgICAgICAgIHwgICA1MiArDQo+IDcgZmlsZXMgY2hh bmdlZCwgNTI0MiBpbnNlcnRpb25zKCspDQo+IGNyZWF0ZSBtb2RlIDEwMDY0NCB1ZWZpLXNjdC9T Y3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wvDQo+IEZpcm13YXJlTWFuYWdlbWVudC9C bGFja0JveFRlc3QvRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2UuYw0KPiBjcmVh dGUgbW9kZSAxMDA2NDQgdWVmaS1zY3QvU2N0UGtnL1Rlc3RDYXNlL1VFRkkvSUhWL1Byb3RvY29s Lw0KPiBGaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0L0Zpcm13YXJlTWFuYWdlbWVudEJC VGVzdEZ1bmN0aW9uLmMNCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IHVlZmktc2N0L1NjdFBrZy9UZXN0 Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC8NCj4gRmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVz dC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RNYWluLmMNCj4gY3JlYXRlIG1vZGUgMTAwNjQ0IHVl Zmktc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC8NCj4gRmlybXdhcmVNYW5h Z2VtZW50L0JsYWNrQm94VGVzdC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RNYWluLmgNCj4gY3Jl YXRlIG1vZGUgMTAwNjQ0IHVlZmktc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2Nv bC8NCj4gRmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdC9HdWlkLmMNCj4gY3JlYXRlIG1v ZGUgMTAwNjQ0IHVlZmktc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC8NCj4g RmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdC9HdWlkLmgNCj4gY3JlYXRlIG1vZGUgMTAw NjQ0IHVlZmktc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC8NCj4gRmlybXdh cmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdC9JaHZGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3QuaW5m DQo+DQo+IGRpZmYgLS1naXQgYS91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rlc3RDYXNlL1VFRkkvSUhW L1Byb3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRlc3QNCj4gL0Zpcm13YXJlTWFu YWdlbWVudEJCVGVzdENvbmZvcm1hbmNlLmMgYi91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rlc3RDYXNl L1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRlc3QNCj4gL0Zp cm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggMDAwMDAwMDAuLjk1ZDM2ZGM3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIv dWVmaS0NCj4gc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC9GaXJtd2FyZU1h bmFnZW1lbnQvQmxhY2tCb3hUZXN0DQo+IC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3Jt YW5jZS5jDQo+IEBAIC0wLDAgKzEsMzYzMiBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29w eXJpZ2h0IDIwMDYgLSAyMDE2IFVuaWZpZWQgRUZJLCBJbmMuPEJSPg0KPiArICBDb3B5cmlnaHQg KGMpIDIwMTAgLSAyMDE2LCBEZWxsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsg IENvcHlyaWdodCAoYykgMjAxOSxNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuPEJSPg0KPiArICBU aGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNl bnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9m DQo+IHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1 dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4gbWF5IGJlIGZvdW5kIGF0DQo+ ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0K PiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04g QU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VO VEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4NCj4gKw0K PiArKiovDQo+ICsvKisrDQo+ICsNCj4gK01vZHVsZSBOYW1lOg0KPiArICAgIEZpcm13YXJlTWFu YWdlbWVudEJCVGVzdENvbmZvcm1hbmNlLmMNCj4gKw0KPiArQWJzdHJhY3Q6DQo+ICsgICAgRmly bXdhcmUgTWFuYWdlbWVudCBQcm90b2NvbCdzIGNvbmZvcm1hbmNlIHRlc3RzLg0KPiArDQo+ICst LSovDQo+ICsNCj4gKyNkZWZpbmUgREVCVUdfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwDQo+ICsjZGVmaW5lIERFQlVHX0dFVF9JTUFHRV9JTkZPICAgICAgICAgICAgICAgICAg ICAgMA0KPiArI2RlZmluZSBERUJVR19HRVRfSU1BR0UgICAgICAgICAgICAgICAgICAgICAgICAg IDANCj4gKyNkZWZpbmUgREVCVUdfU0VUX0lNQUdFICAgICAgICAgICAgICAgICAgICAgICAgICAw DQo+ICsjZGVmaW5lIERFQlVHX0NIRUNLX0lNQUdFICAgICAgICAgICAgICAgICAgICAgICAgMA0K PiArI2RlZmluZSBERUJVR19TRVRfUEFDS0FHRV9JTkZPICAgICAgICAgICAgICAgICAgIDANCj4g Kw0KPiArI2luY2x1ZGUgIlNjdExpYi5oIg0KPiArI2luY2x1ZGUgIkZpcm13YXJlTWFuYWdlbWVu dEJCVGVzdE1haW4uaCINCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4g Ky8vICAgU3VwcG9ydCBSb3V0aW5lcw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQ2hlY2tGb3JTdXBwb3J0R2V0SW1hZ2UgKA0KPiArICBJ TiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExp YiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAq RmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0NoZWNr Rm9yU3VwcG9ydFNldEltYWdlICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElCUkFSWV9Q Uk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5B R0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiArICApOw0K PiArDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0NoZWNrRm9yU3VwcG9ydENoZWNrSW1hZ2UgKA0K PiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFu ZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAg ICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4g K0NoZWNrRm9yU3VwcG9ydFNldFBhY2thZ2VJbmZvICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RF U1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9G SVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVu dA0KPiArICApOw0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8g ICBDaGVjayBQb2ludHMNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4g K0VGSV9TVEFUVVMNCj4gK0JCVGVzdEdldEltYWdlSW5mb0NvbmZvcm1hbmNlVGVzdENoZWNrcG9p bnQxICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAg ICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09M ICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtCQlRlc3RHZXRJbWFnZUluZm9Db25mb3JtYW5jZVRlc3RDaGVja3BvaW50MiAoDQo+ ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5k YXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAg ICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr QkJUZXN0R2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MSAoDQo+ICsgIElOIEVGSV9T VEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiAr ICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2Fy ZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1h Z2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MiAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNU X0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklS TVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQN Cj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1hZ2VDb25mb3JtYW5j ZVRlc3RDaGVja3BvaW50MyAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJP VE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdF TUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3Bv aW50NCAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAg ICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NP TCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArQkJUZXN0U2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MSAoDQo+ICsg IElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJk TGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAg ICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJU ZXN0U2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MiAoDQo+ICsgIElOIEVGSV9TVEFO REFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJ TiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1h bmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0U2V0SW1hZ2VD b25mb3JtYW5jZVRlc3RDaGVja3BvaW50MyAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJ QlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdB UkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0U2V0SW1hZ2VDb25mb3JtYW5jZVRl c3RDaGVja3BvaW50NCAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9D T0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVO VF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArQkJUZXN0Q2hlY2tJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9p bnQxICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAg ICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09M ICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiArICApOw0KPiArDQo+ICtFRklfU1RB VFVTDQo+ICtCQlRlc3RDaGVja0ltYWdlQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDIgKA0KPiAr ICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFy ZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAg ICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JC VGVzdFNldFBhY2thZ2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDEgKA0KPiArICBJTiBF RklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwN Cj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmly bXdhcmVNYW5hZ2VtZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNl dFBhY2thZ2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDIgKA0KPiArICBJTiBFRklfU1RB TkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAg SU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVN YW5hZ2VtZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldFBhY2th Z2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDMgKA0KPiArICBJTiBFRklfU1RBTkRBUkRf VEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJ X0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2Vt ZW50DQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldFBhY2thZ2VJbmZv Q29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDQgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9M SUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1X QVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ ICsgICk7DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIFN1 cHBvcnQgUm91dGluZXMNCj4gKy8vDQo+ICsvLw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioNCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgU3Vw cG9ydCBSb3V0aW5lOiBQcm9ncmVzcw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioN Cj4gKw0KPiArRUZJX1NUQVRVUw0KPiArUHJvZ3Jlc3MgKA0KPiArICBJTiBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXBsZXRpb24NCj4gKykNCj4gK3sNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cj4gKioqKioqKg0KPiArLy8gICBTdXBwb3J0IFJvdXRpbmU6IENoZWNrRm9yU3VwcG9ydEdldElt YWdlDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVT DQo+ICtDaGVja0ZvclN1cHBvcnRHZXRJbWFnZSAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNU X0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklS TVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQN Cj4gKykNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4g KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0 TWVzc2FnZURhdGE7DQo+ICsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbWFnZUluZGV4Ow0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gSW5pdA0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArICBB c3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgVGVzdEd1aWQg PSBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VTdXBwb3J0R3VpZDAwMTsNCj4g KyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJHZXRJbWFnZSwgZnVuY3Rpb24gc3VwcG9ydCBjaGVj ayI7DQo+ICsNCj4gKyAgSW1hZ2VJbmRleCA9IDA7DQo+ICsgIEltYWdlID0gTlVMTDsNCj4gKyAg SW1hZ2VTaXplID0gMDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBpZiBmdW5jdGlvbiBp cyBzdXBwb3J0ZWQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1l bnQtPkdldEltYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13 YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdl SW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZVNpemUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9U RVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVE KSB7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZ1bmN0aW9uIGlzIE5PVCBzdXBwb3J0 ZWQiOw0KPiArICB9IGVsc2Ugew0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJmdW5jdGlv biBpcyBzdXBwb3J0ZWQuIjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YW5kYXJkTGliLT5SZWNvcmRB c3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAgICAg ICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAgVGVzdEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwNCj4gKyAgICAgICAgICAgICAg ICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwNCj4gKyAgICAgICAgICAgICAg ICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgIF9fRklMRV9fLA0KPiAr ICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsgICAgICAgICAgICAgICAgIFN0 YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChJbWFnZSAhPSBOVUxM KSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEltYWdlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIGlm IChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQo+ICsgICAgcmV0dXJuIEVGSV9VTlNVUFBP UlRFRDsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICsgIH0N Cj4gK30NCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgU3Vw cG9ydCBSb3V0aW5lOiBDaGVja0ZvclN1cHBvcnRTZXRJbWFnZQ0KPiArLy8NCj4gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQo+ICoqKioqKioNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQ2hlY2tGb3JTdXBwb3J0U2V0 SW1hZ2UgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAg ICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9D T0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICspDQo+ICt7DQo+ICsgIEVGSV9T VEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBF RklfVEVTVF9BU1NFUlRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5 cGU7DQo+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VGVzdEd1aWQ7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlJlc3VsdE1lc3NhZ2VMYWJlbA0KPiA7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VEYXRhOw0KPiArDQo+ICsg IFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmRl eDsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq SW1hZ2U7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW1hZ2VTaXplOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpBYm9ydFJlYXNvbjsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsg IC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUg PSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1h bmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZVN1cHBvcnRHdWlkMDAyOw0KPiArICBSZXN1bHRNZXNz YWdlTGFiZWwgPSBMIlNldEltYWdlLCBmdW5jdGlvbiBzdXBwb3J0IGNoZWNrIjsNCj4gKw0KPiAr ICBJbWFnZUluZGV4ID0gMDsNCj4gKyAgSW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZVNpemUgPSAw Ow0KPiArICBBYm9ydFJlYXNvbiA9IE5VTEw7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sg aWYgZnVuY3Rpb24gaXMgc3VwcG9ydGVkDQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRmly bXdhcmVNYW5hZ2VtZW50LT5TZXRJbWFnZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbWFnZUluZGV4LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW1hZ2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gVmVuZG9yQ29kZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJvZ3Jlc3MsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmQWJvcnRSZWFzb24NCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNU X0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7 DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZ1bmN0aW9uIGlzIE5PVCBzdXBwb3J0ZWQi Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJmdW5jdGlvbiBp cyBzdXBwb3J0ZWQuIjsNCj4gKyAgfQ0KPiArDQo+ICsgIFN0YW5kYXJkTGliLT5SZWNvcmRBc3Nl cnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAgICAgICAg ICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAgVGVzdEd1aWQsDQo+ICsg ICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwNCj4gKyAgICAgICAgICAgICAgICAg TCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwNCj4gKyAgICAgICAgICAgICAgICAg UmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgIF9fRklMRV9fLA0KPiArICAg ICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsgICAgICAgICAgICAgICAgIFN0YXR1 cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChBYm9ydFJlYXNvbiAhPSBO VUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEFib3J0UmVhc29uKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQo+ICsgICAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICByZXR1cm4gRUZJX1NVQ0NFU1M7 DQo+ICsgIH0NCj4gK30NCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4g Ky8vICAgU3VwcG9ydCBSb3V0aW5lOiBDaGVja0ZvclN1cHBvcnRDaGVja0ltYWdlDQo+ICsvLw0K PiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtDaGVja0Zv clN1cHBvcnRDaGVja0ltYWdlICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElCUkFSWV9Q Uk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5B R0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiArKQ0KPiAr ew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0 YXR1czsNCj4gKyAgRUZJX1RFU1RfQVNTRVJUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBBc3NlcnRpb25UeXBlOw0KPiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFRlc3RHdWlkOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0 YTsNCj4gKw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEltYWdlSW5kZXg7DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkltYWdlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVVwZGF0YWJsZTsNCj4gKw0KPiArICAvLw0KPiAr ICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsg IEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3Vp ZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZVN1cHBvcnRHdWlkMDAzOw0K PiArICBSZXN1bHRNZXNzYWdlTGFiZWwgPSBMIkNoZWNrSW1hZ2UsIGZ1bmN0aW9uIHN1cHBvcnQg Y2hlY2siOw0KPiArDQo+ICsgIEltYWdlSW5kZXggPSAwOw0KPiArICBJbWFnZSA9IE5VTEw7DQo+ ICsgIEltYWdlU2l6ZSA9IDA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgaWYgZnVuY3Rp b24gaXMgc3VwcG9ydGVkDQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5h Z2VtZW50LT5DaGVja0ltYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZVVwZGF0YWJsZQ0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBBc3NlcnRpb25UeXBlID0gRUZJ X1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JU RUQpIHsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZnVuY3Rpb24gaXMgTk9UIHN1cHBv cnRlZCI7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZ1bmN0 aW9uIGlzIHN1cHBvcnRlZC4iOw0KPiArICB9DQo+ICsNCj4gKyAgU3RhbmRhcmRMaWItPlJlY29y ZEFzc2VydGlvbiAoDQo+ICsgICAgICAgICAgICAgICAgIFN0YW5kYXJkTGliLA0KPiArICAgICAg ICAgICAgICAgICBBc3NlcnRpb25UeXBlLA0KPiArICAgICAgICAgICAgICAgICBUZXN0R3VpZCwN Cj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZUxhYmVsLA0KPiArICAgICAgICAgICAg ICAgICBMIlJlc3VsdCAtICVzXG4lYTolZDogU3RhdHVzIC0gJXIiLA0KPiArICAgICAgICAgICAg ICAgICBSZXN1bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgX19GSUxFX18sDQo+ ICsgICAgICAgICAgICAgICAgIChVSU5UTilfX0xJTkVfXywNCj4gKyAgICAgICAgICAgICAgICAg U3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBF RklfVU5TVVBQT1JURUQpIHsNCj4gKyAgICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArICB9 IGVsc2Ugew0KPiArICAgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gKyAgfQ0KPiArfQ0KPiArDQo+ ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBTdXBwb3J0IFJvdXRpbmU6 IENoZWNrRm9yU3VwcG9ydFNldFBhY2thZ2VJbmZvDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4g KioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtDaGVja0ZvclN1cHBvcnRTZXRQYWNrYWdl SW5mbyAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAg ICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NP TCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKykNCj4gK3sNCj4gKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVG SV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlw ZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU ZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZURhdGE7DQo+ICsNCj4gKyAg Vk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VT aXplOw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpWZW5kb3JDb2RlOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFBhY2thZ2VWZXJzaW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VT UzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsg IFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlU3VwcG9ydEd1 aWQwMDQ7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9IEwiU2V0UGFja2FnZUluZm8sIGZ1bmN0 aW9uIHN1cHBvcnQgY2hlY2siOw0KPiArDQo+ICsgIEltYWdlID0gTlVMTDsNCj4gKyAgSW1hZ2VT aXplID0gMDsNCj4gKyAgVmVuZG9yQ29kZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uID0g MDsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsNCj4gKw0KPiArICAvLw0KPiArICAv LyBDaGVjayBpZiBmdW5jdGlvbiBpcyBzdXBwb3J0ZWQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0 dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPlNldFBhY2thZ2VJbmZvICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEltYWdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW1hZ2VTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VmVuZG9yQ29kZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VW ZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNp b25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsg IEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBpZiAoU3Rh dHVzID09IEVGSV9VTlNVUFBPUlRFRCkgew0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJm dW5jdGlvbiBpcyBOT1Qgc3VwcG9ydGVkIjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBSZXN1bHRN ZXNzYWdlRGF0YSA9IEwiZnVuY3Rpb24gaXMgc3VwcG9ydGVkLiI7DQo+ICsgIH0NCj4gKw0KPiAr ICBTdGFuZGFyZExpYi0+UmVjb3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3Rh bmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAg ICAgICAgICAgIFRlc3RHdWlkLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFi ZWwsDQo+ICsgICAgICAgICAgICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAl ciIsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAg ICAgICAgICBfX0ZJTEVfXywNCj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0K PiArICAgICAgICAgICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0K PiArICBpZiAoU3RhdHVzID09IEVGSV9VTlNVUFBPUlRFRCkgew0KPiArICAgIHJldHVybiBFRklf VU5TVVBQT1JURUQ7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgcmV0dXJuIEVGSV9TVUNDRVNTOw0K PiArICB9DQo+ICt9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsv LyAgIFRlc3QgQ2FzZXMNCj4gKy8vDQo+ICsvLw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioNCj4gKw0KDQpUaGUgYmVsb3cgaXMgY29tbWVudGVkIG91dCwgd2hpY2ggc2hvdWxkIGJl IHJlbW92ZWQgYmVmb3JlIHVwc3RyZWFtLg0KPiArLyoNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVz dFVuaXRUZXN0ICgNCj4gKyAgSU4gRUZJX0JCX1RFU1RfUFJPVE9DT0wgICAgICAgICAgICAgICAg ICAgICAgICAqVGhpcywNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqQ2xpZW50SW50ZXJmYWNlLA0KPiArICBJTiBFRklfVEVTVF9MRVZFTCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RMZXZlbCwNCj4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdXBwb3J0SGFuZGxlDQo+ICsgICkNCj4g K3sNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArKi8NCg0KDQo+ICsNCj4gKy8v DQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIFRlc3QgQ2FzZTogR2V0SW1hZ2VJ bmZvDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVT DQo+ICtCQlRlc3RHZXRJbWFnZUluZm9Db25mb3JtYW5jZVRlc3QgKA0KPiArICBJTiBFRklfQkJf VEVTVF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICAgICpUaGlzLA0KPiArICBJTiBWT0lE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpDbGllbnRJbnRlcmZhY2Us DQo+ICsgIElOIEVGSV9URVNUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVz dExldmVsLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFN1cHBvcnRIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBTkRBUkRfVEVTVF9M SUJSQVJZX1BST1RPQ09MICAgICAgICAgICAgICpTdGFuZGFyZExpYjsNCj4gKyAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9G SVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdl bWVudA0KPiA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdA0KPiArICAvLw0KPiArDQo+ICsg IEZpcm13YXJlTWFuYWdlbWVudCA9DQo+IChFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NP TCopQ2xpZW50SW50ZXJmYWNlOw0KPiArDQo+ICsgIFN0YXR1cyA9IGd0QlMtPkhhbmRsZVByb3Rv Y29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBTdXBwb3J0SGFuZGxlLA0KPiArICAgICAgICAg ICAgICAgICAgICZnRWZpU3RhbmRhcmRUZXN0TGlicmFyeUd1aWQsDQo+ICsgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopICZTdGFuZGFyZExpYg0KPiArICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsg IH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDYWxsIGNoZWNrIHBvaW50KHMpDQo+ICsgIC8vDQo+ ICsNCj4gKyAgQkJUZXN0R2V0SW1hZ2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDEgKFN0 YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1hbmFnZW1lbnQpOw0KPiArICBCQlRlc3RHZXRJbWFnZUlu Zm9Db25mb3JtYW5jZVRlc3RDaGVja3BvaW50MiAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFu YWdlbWVudCk7DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsv Lw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBUZXN0IENhc2U6IEdldEltYWdl DQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ ICtCQlRlc3RHZXRJbWFnZUNvbmZvcm1hbmNlVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BS T1RPQ09MICAgICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4gKyAg SU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0TGV2ZWws DQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Vw cG9ydEhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllf UFJPVE9DT0wgICAgICAgICAgICAgKlN0YW5kYXJkTGliOw0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJUk1XQVJF X01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ IDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgRmlybXdh cmVNYW5hZ2VtZW50ID0NCj4gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MKilDbGll bnRJbnRlcmZhY2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+SGFuZGxlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICAgJmdFZmlTdGFuZGFyZFRlc3RMaWJyYXJ5R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikgJlN0YW5kYXJkTGliDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYg KEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIGlmIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZA0KPiArICAv Lw0KPiArDQo+ICsgIFN0YXR1cyA9IENoZWNrRm9yU3VwcG9ydEdldEltYWdlIChTdGFuZGFyZExp YiwNCj4gRmlybXdhcmVNYW5hZ2VtZW50KTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfVU5TVVBQ T1JURUQpIHsNCj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gQ2FsbCBjaGVjayBwb2ludChzKQ0KPiArICAvLw0KPiArDQo+ICsgIEJCVGVzdEdldElt YWdlQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDEgKFN0YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1h bmFnZW1lbnQpOw0KPiArICBCQlRlc3RHZXRJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQy IChTdGFuZGFyZExpYiwNCj4gRmlybXdhcmVNYW5hZ2VtZW50KTsNCj4gKyAgQkJUZXN0R2V0SW1h Z2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MyAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFu YWdlbWVudCk7DQo+ICsgIEJCVGVzdEdldEltYWdlQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDQg KFN0YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1hbmFnZW1lbnQpOw0KPiArDQo+ICsgIHJldHVybiBF RklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioN Cj4gKy8vICAgVGVzdCBDYXNlOiBTZXRJbWFnZQ0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0U2V0SW1hZ2VDb25mb3JtYW5jZVRl c3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICAg ICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9URVNUX0xFVkVMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGVzdExldmVsLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiAr ICBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICAgICpTdGFuZGFy ZExpYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAg ICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5p dA0KPiArICAvLw0KPiArDQo+ICsgIEZpcm13YXJlTWFuYWdlbWVudCA9DQo+IChFRklfRklSTVdB UkVfTUFOQUdFTUVOVF9QUk9UT0NPTCopQ2xpZW50SW50ZXJmYWNlOw0KPiArDQo+ICsgIFN0YXR1 cyA9IGd0QlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBTdXBwb3J0 SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICZnRWZpU3RhbmRhcmRUZXN0TGlicmFyeUd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZTdGFuZGFyZExpYg0KPiArICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayBpZiBm dW5jdGlvbiBpcyBzdXBwb3J0ZWQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBDaGVja0Zv clN1cHBvcnRTZXRJbWFnZSAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFuYWdlbWVudCk7DQo+ ICsgIGlmIChTdGF0dXMgPT0gRUZJX1VOU1VQUE9SVEVEKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1 czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGwgY2hlY2sgcG9pbnQocykNCj4g KyAgLy8NCj4gKw0KPiArICBCQlRlc3RTZXRJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQx IChTdGFuZGFyZExpYiwNCj4gRmlybXdhcmVNYW5hZ2VtZW50KTsNCj4gKyAgLy9CQlRlc3RTZXRJ bWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQyIChTdGFuZGFyZExpYiwNCj4gRmlybXdhcmVN YW5hZ2VtZW50KTsNCj4gKyAgQkJUZXN0U2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50 MyAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFuYWdlbWVudCk7DQo+ICsgIEJCVGVzdFNldElt YWdlQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDQgKFN0YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1h bmFnZW1lbnQpOw0KPiArDQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIFRlc3QgQ2FzZTogQ2hlY2tJbWFnZQ0K PiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr QkJUZXN0Q2hlY2tJbWFnZUNvbmZvcm1hbmNlVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BS T1RPQ09MICAgICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4gKyAg SU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0TGV2ZWws DQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3Vw cG9ydEhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllf UFJPVE9DT0wgICAgICAgICAgICAgKlN0YW5kYXJkTGliOw0KPiArICBFRklfU1RBVFVTICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJUk1XQVJF X01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ IDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgRmlybXdh cmVNYW5hZ2VtZW50ID0NCj4gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MKilDbGll bnRJbnRlcmZhY2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+SGFuZGxlUHJvdG9jb2wgKA0K PiArICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAg ICAgJmdFZmlTdGFuZGFyZFRlc3RMaWJyYXJ5R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikgJlN0YW5kYXJkTGliDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYg KEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIGlmIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZA0KPiArICAv Lw0KPiArDQo+ICsgIFN0YXR1cyA9IENoZWNrRm9yU3VwcG9ydENoZWNrSW1hZ2UgKFN0YW5kYXJk TGliLA0KPiBGaXJtd2FyZU1hbmFnZW1lbnQpOw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9VTlNV UFBPUlRFRCkgew0KPiArICAgIHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0K PiArICAvLyBDYWxsIGNoZWNrIHBvaW50KHMpDQo+ICsgIC8vDQo+ICsNCj4gKyAgQkJUZXN0Q2hl Y2tJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQxIChTdGFuZGFyZExpYiwNCj4gRmlybXdh cmVNYW5hZ2VtZW50KTsNCj4gKyAgQkJUZXN0Q2hlY2tJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNr cG9pbnQyIChTdGFuZGFyZExpYiwNCj4gRmlybXdhcmVNYW5hZ2VtZW50KTsNCj4gKw0KPiArICBy ZXR1cm4gU3RhdHVzOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioq Kg0KPiArLy8gICBUZXN0IENhc2U6IFNldFBhY2thZ2VJbmZvDQo+ICsvLw0KPiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RTZXRQYWNrYWdlSW5m b0NvbmZvcm1hbmNlVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BST1RPQ09MICAgICAgICAg ICAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4gKyAgSU4gRUZJX1RFU1RfTEVW RUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydEhhbmRsZQ0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAg ICAgICAgKlN0YW5kYXJkTGliOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJP VE9DT0wgICAgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+IDsNCj4gKw0KPiArICAv Lw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgRmlybXdhcmVNYW5hZ2VtZW50ID0N Cj4gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MKilDbGllbnRJbnRlcmZhY2U7DQo+ ICsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgIFN1cHBvcnRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlTdGFuZGFy ZFRlc3RMaWJyYXJ5R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlN0YW5k YXJkTGliDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0 dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsg IC8vIENoZWNrIGlmIGZ1bmN0aW9uIGlzIHN1cHBvcnRlZA0KPiArICAvLw0KPiArDQo+ICsgIFN0 YXR1cyA9IENoZWNrRm9yU3VwcG9ydFNldFBhY2thZ2VJbmZvIChTdGFuZGFyZExpYiwNCj4gRmly bXdhcmVNYW5hZ2VtZW50KTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfVU5TVVBQT1JURUQpIHsN Cj4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2Fs bCBjaGVjayBwb2ludChzKQ0KPiArICAvLw0KPiArDQo+ICsgIEJCVGVzdFNldFBhY2thZ2VJbmZv Q29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDEgKFN0YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1hbmFn ZW1lbnQpOw0KPiArICBCQlRlc3RTZXRQYWNrYWdlSW5mb0NvbmZvcm1hbmNlVGVzdENoZWNrcG9p bnQyIChTdGFuZGFyZExpYiwNCj4gRmlybXdhcmVNYW5hZ2VtZW50KTsNCj4gKyAgQkJUZXN0U2V0 UGFja2FnZUluZm9Db25mb3JtYW5jZVRlc3RDaGVja3BvaW50MyAoU3RhbmRhcmRMaWIsDQo+IEZp cm13YXJlTWFuYWdlbWVudCk7DQo+ICsgIEJCVGVzdFNldFBhY2thZ2VJbmZvQ29uZm9ybWFuY2VU ZXN0Q2hlY2twb2ludDQgKFN0YW5kYXJkTGliLA0KPiBGaXJtd2FyZU1hbmFnZW1lbnQpOw0KPiAr DQo+ICsgIHJldHVybiBTdGF0dXM7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K PiAqKioqKioqDQo+ICsvLyAgIENoZWNrIFBvaW50cw0KPiArLy8NCj4gKy8vDQo+ICsvLw0KPiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioq KioqKg0KPiArLy8gICBDaGVja3BvaW50OiBHZXRJbWFnZUluZm8sIDENCj4gKy8vDQo+ICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJvdXRpbmU6DQo+ICsg ICAgLSBDYWxscyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFtZXRlcnMsIGV4Y2VwdCBJbWFnZUlu Zm9TaXplID0NCj4gMS4NCj4gKyAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9C VUZGRVJfVE9PX1NNQUxMIGFuZA0KPiBJbWFnZUluZm9TaXplID4gMS4NCj4gKyoqLw0KPiArDQo+ ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJbWFnZUluZm9Db25mb3JtYW5jZVRlc3RDaGVja3Bv aW50MSAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAg ICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NP TCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklf U1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAg RUZJX1RFU1RfQVNTRVJUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25U eXBlOw0KPiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFRlc3RHdWlkOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0YTsNCj4gKw0KPiAr ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5m b1NpemU7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAg ICAgKkltYWdlSW5mbzsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lvbjsNCj4gKyAgVUlOVDggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yQ291bnQ7DQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclNpemU7DQo+ ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2Fn ZVZlcnNpb247DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5p dA0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiArICBBc3NlcnRp b25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgVGVzdEd1aWQgPSBnRmly bXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDAxOw0KPiArICBS ZXN1bHRNZXNzYWdlTGFiZWwgPSBMIkdldEltYWdlSW5mbywgY29uZm9ybWFuY2UgY2hlY2twb2lu dCAjMSI7DQo+ICsgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJjb3JyZWN0bHkgcmV0dXJuZWQgRUZJ X0JVRkZFUl9UT09fU01BTEwuIjsNCj4gKw0KPiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiArICBQ YWNrYWdlVmVyc2lvbk5hbWUgPSBOVUxMOw0KPiArDQo+ICsgIEltYWdlSW5mb1NpemUgPSAoc2l6 ZW9mIChFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUikpICogMjA7DQo+ICsgIFN0YXR1cyA9 IGd0QlMtPkFsbG9jYXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZp Y2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAg ICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEFzc2VydGlvblR5cGUg PSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0g TCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgIGdvdG8gRXhpdDsN Cj4gKyAgfQ0KPiArICBJbWFnZUluZm9TaXplID0gMTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBD aGVjayB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24NCj4gKyAgLy8NCj4gKw0KPiAr ICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsN Cj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAg ICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybiBFRklfQlVGRkVSX1RPT19T TUFMTC4iOw0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiArICBpZiAoSW1hZ2VJbmZvU2l6 ZSA8PSAxKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlM RUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZhaWxlZCB0byB1cGRhdGUgKkltYWdl SW5mb1NpemUuIjsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIFJlcG9ydCB0aGUgY2hl Y2twb2ludCByZXN1bHQNCj4gKyAgLy8NCj4gKw0KPiArRXhpdDoNCj4gKyAgU3RhbmRhcmRMaWIt PlJlY29yZEFzc2VydGlvbiAoDQo+ICsgICAgICAgICAgICAgICAgIFN0YW5kYXJkTGliLA0KPiAr ICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlLA0KPiArICAgICAgICAgICAgICAgICBUZXN0 R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZUxhYmVsLA0KPiArICAgICAg ICAgICAgICAgICBMIlJlc3VsdCAtICVzXG4lYTolZDogU3RhdHVzIC0gJXIiLA0KPiArICAgICAg ICAgICAgICAgICBSZXN1bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgX19GSUxF X18sDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilfX0xJTkVfXywNCj4gKyAgICAgICAgICAg ICAgICAgU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChQYWNrYWdlVmVy c2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChQYWNrYWdlVmVyc2lv bk5hbWUpOw0KPiArICB9DQo+ICsgIGlmIChJbWFnZUluZm8gIT0gTlVMTCkgew0KPiArICAgIGd0 QlMtPkZyZWVQb29sIChJbWFnZUluZm8pOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9T VUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiAr Ly8gICBDaGVja3BvaW50OiBHZXRJbWFnZUluZm8sIDINCj4gKy8vDQo+ICoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0K PiAqKioqKioqDQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJvdXRpbmU6DQo+ICsgICAgLSBDYWxs cyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFtZXRlcnMsIGV4Y2VwdCAmSW1hZ2VJbmZvU2l6ZSA9 DQo+IE5VTEwuDQo+ICsgICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBFRklfSU5WQUxJ RF9QQVJBTUVURVIuDQo+ICsqKi8NCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1h Z2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDIgKA0KPiArICBJTiBFRklfU1RBTkRBUkRf VEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJ X0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2Vt ZW50DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+ IDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq UmVzdWx0TWVzc2FnZURhdGE7DQo+ICsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBFRklfRklSTVdBUkVfSU1B R0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpJbWFnZUluZm87DQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclZlcnNpb247 DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVz Y3JpcHRvckNvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uOw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4g Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9Q QVNTRUQ7DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1h bmNlQXNzZXJ0aW9uR3VpZDAwMjsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJHZXRJbWFn ZUluZm8sIGNvbmZvcm1hbmNlIGNoZWNrcG9pbnQgIzIiOw0KPiArICBSZXN1bHRNZXNzYWdlRGF0 YSA9IEwiY29ycmVjdGx5IHJldHVybmVkIEVGSV9JTlZBTElEX1BBUkFNRVRFUi4iOw0KPiArDQo+ ICsgIEltYWdlSW5mbyA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ ICsNCj4gKyAgSW1hZ2VJbmZvU2l6ZSA9IChzaXplb2YgKEVGSV9GSVJNV0FSRV9JTUFHRV9ERVND UklQVE9SKSkgKiAyMDsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAg ICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiArICAgICAgICAgICAgICAg ICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJbWFn ZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0 dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7 DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBm YWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAg Ly8gQ2hlY2sgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uDQo+ICsgIC8vDQo+ICsN Cj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLy8gJkltYWdlSW5mb1NpemUNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mbywNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChTdGF0dXMgIT0gRUZJX0lOVkFMSURf UEFSQU1FVEVSKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9G QUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZhaWxlZCB0byByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSLiI7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBSZXBv cnQgdGhlIGNoZWNrcG9pbnQgcmVzdWx0DQo+ICsgIC8vDQo+ICsNCj4gK0V4aXQ6DQo+ICsgIFN0 YW5kYXJkTGliLT5SZWNvcmRBc3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFy ZExpYiwNCj4gKyAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAg ICAgICAgVGVzdEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwN Cj4gKyAgICAgICAgICAgICAgICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwN Cj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAg ICAgIF9fRklMRV9fLA0KPiArICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsg ICAgICAgICAgICAgICAgIFN0YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAo UGFja2FnZVZlcnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFj a2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgfQ0KPiArICBpZiAoSW1hZ2VJbmZvICE9IE5VTEwpIHsN Cj4gKyAgICBndEJTLT5GcmVlUG9vbCAoSW1hZ2VJbmZvKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJl dHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioNCj4gKy8vICAgQ2hlY2twb2ludDogR2V0SW1hZ2UsIDENCj4gKy8vDQo+ICoqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKg0KPiAqKioqKioqDQo+ICsNCj4gKy8qKg0KPiArICBUaGlzIHJvdXRpbmU6DQo+ICsgICAg LSBDYWxscyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFtZXRlcnMsIGV4Y2VwdCBJbWFnZVNpemUg PSAxLg0KPiArICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX0JVRkZFUl9UT09f U01BTEwgYW5kIEltYWdlU2l6ZQ0KPiA+IDEuDQo+ICsqKi8NCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArQkJUZXN0R2V0SW1hZ2VDb25mb3JtYW5jZVRlc3RDaGVja3BvaW50MSAoDQo+ICsgIElOIEVG SV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0K PiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJt d2FyZU1hbmFnZW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1RFU1RfQVNTRVJUSU9O ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlOw0KPiArICBFRklfR1VJ RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RHdWlkOw0KPiArICBD SEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNz YWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0YTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RF U0NSSVBUT1IgICAgICAgICAgICAgICAgICAqQnVmZmVySW1hZ2VJbmZvOw0KPiArICBWT0lEICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXJJbWFnZTsNCj4g Kw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElt YWdlSW5mb1NpemU7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAg ICAgICAgICAgKkltYWdlSW5mbzsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lvbjsNCj4gKyAgVUlOVDggICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yQ291bnQ7DQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclNp emU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UGFja2FnZVZlcnNpb247DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiA7DQo+ICsNCj4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPiAr DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsN Cj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAqcDsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5j dGlvblRlc3RlZDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4g KyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9B U1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRl c3RDb25mb3JtYW5jZUFzc2VydGlvbkd1aWQwMDM7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9 IEwiR2V0SW1hZ2UsIGNvbmZvcm1hbmNlIGNoZWNrcG9pbnQgIzEiOw0KPiArDQo+ICsgIEJ1ZmZl ckltYWdlSW5mbyA9IE5VTEw7DQo+ICsgIEJ1ZmZlckltYWdlID0gTlVMTDsNCj4gKyAgSW1hZ2VJ bmZvID0gTlVMTDsNCj4gKyAgSW1hZ2UgPSBOVUxMOw0KPiArICBQYWNrYWdlVmVyc2lvbk5hbWUg PSBOVUxMOw0KPiArICBGdW5jdGlvblRlc3RlZCA9IDA7DQo+ICsNCj4gKyAgLy8gVXNlIGEgc3Vm ZmljaWVudGx5IGxhcmdlIGJ1ZmZlciB0byBvYnRhaW4gRUZJX1NVQ0NFU1MsDQo+ICsgIC8vIHNp bmNlIHNvbWUgaW1wbGVtZW50YXRpb24gZG9lcyBOT1QgY29ycmVjdGx5IHJldHVybg0KPiBFRklf QlVGRkVSX1RPT19TTUFMTC4NCj4gKyAgLy8gQ2hlY2sgZm9yIEVGSV9CVUZGRVJfVE9PX1NNQUxM IGluIGFub3RoZXIgY29uZm9ybWFuY2UgdGVzdC4NCj4gKw0KPiArICBJbWFnZUluZm9TaXplID0g KHNpemVvZiAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IpKSAqIDIwOw0KPiArICBTdGF0 dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgIEVmaUJvb3RT ZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAgICAg ICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBBc3NlcnRpb25U eXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0 YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICBnb3RvIEV4 aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdldElt YWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1h bmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJbmZv U2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mbywNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9CVUZG RVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEltYWdlSW5mbyk7DQo+ICsg ICAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAg IEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9T aXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJbWFnZUluZm8NCj4gKyAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsg ICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1 cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgICAgU3RhdHVzID0gRmly bXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAg ICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJl c3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0K PiArICAgICAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArICAgICAgZ290byBFeGl0 Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBCdWZmZXJJbWFnZUluZm8gPSBJbWFnZUluZm87DQo+ ICsNCj4gKyAgaWYgKERlc2NyaXB0b3JTaXplID09IDApIHsNCj4gKyAgICBBc3NlcnRpb25UeXBl ID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9 IEwiKkRlc2NyaXB0b3JTaXplIGlzIDAuIjsNCj4gKyAgICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRo ZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsgIGlmICgoRGVzY3JpcHRvckNvdW50 ICogRGVzY3JpcHRvclNpemUpID4gSW1hZ2VJbmZvU2l6ZSkgew0KPiArICAgIEFzc2VydGlvblR5 cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRh ID0gTCIoKCpEZXNjcmlwdG9yQ291bnQpICogKCpEZXNjcmlwdG9yU2l6ZSkpID4NCj4gKkltYWdl SW5mb1NpemUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklf U1VDQ0VTUw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgdGhlIGRhdGEgcmV0 dXJuZWQgYnkgdGhlIGZ1bmN0aW9uDQo+ICsgIC8vDQo+ICsNCj4gKyAgZm9yIChpID0gMDsgaSA8 IERlc2NyaXB0b3JDb3VudDsgaSsrKSB7DQo+ICsgICAgcCA9IChFRklfRklSTVdBUkVfSU1BR0Vf REVTQ1JJUFRPUiAqKSAoKChVSU5UOCAqKSBJbWFnZUluZm8pICsNCj4gKGkgKiBEZXNjcmlwdG9y U2l6ZSkpOw0KPiArDQo+ICsgICAgaWYgKCgocC0+QXR0cmlidXRlc1N1cHBvcnRlZCAmDQo+IElN QUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgPT0NCj4gKyAgICAgICAgICBJ TUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICYmDQo+ICsgICAgICAgICgo cC0+QXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05f UkVRVUlSRUQpID09DQo+ICsgICAgICAgICAgSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9O X1JFUVVJUkVEKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmIChw LT5TaXplID09IDApIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAo KHAtPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxF KQ0KPiAhPSBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7DQo+ICsgICAgICBjb250 aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdF X0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpICE9DQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9V UERBVEFCTEUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIElt YWdlU2l6ZSA9IHAtPlNpemU7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAg ICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgJkltYWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJ T05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0 aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiAr ICAgIEJ1ZmZlckltYWdlID0gSW1hZ2U7DQo+ICsNCj4gKyAgICBJbWFnZVNpemUgPSAxOw0KPiAr ICAgIEZ1bmN0aW9uVGVzdGVkKys7DQo+ICsgICAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50 LT5HZXRJbWFnZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13 YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+ SW1hZ2VJbmRleCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2Us DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZVNpemUNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBndEJTLT5GcmVlUG9v bCAoQnVmZmVySW1hZ2UpOw0KPiArICAgIEJ1ZmZlckltYWdlID0gTlVMTDsNCj4gKyAgICBJbWFn ZSA9IE5VTEw7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFJlcG9ydCB0aGUgY2hlY2twb2lu dCByZXN1bHQNCj4gKyAgICAvLw0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfQlVGRkVS X1RPT19TTUFMTCkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElP Tl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVy biBFRklfQlVGRkVSX1RPT19TTUFMTC4iOw0KPiArICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0N Cj4gKyAgICBpZiAoSW1hZ2VJbmZvU2l6ZSA8PSAxKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBl ID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRh ID0gTCJmYWlsZWQgdG8gdXBkYXRlICpJbWFnZVNpemUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnVuY3Rpb25UZXN0ZWQgPT0gMCkgew0K PiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAg IFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IHNraXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3Qg YXBwbHkuIjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1Rf QVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5 IHJldHVybmVkIEVGSV9CVUZGRVJfVE9PX1NNQUxMLiI7DQo+ICsgIH0NCj4gKw0KPiArRXhpdDoN Cj4gKyAgU3RhbmRhcmRMaWItPlJlY29yZEFzc2VydGlvbiAoDQo+ICsgICAgICAgICAgICAgICAg IFN0YW5kYXJkTGliLA0KPiArICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlLA0KPiArICAg ICAgICAgICAgICAgICBUZXN0R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2Fn ZUxhYmVsLA0KPiArICAgICAgICAgICAgICAgICBMIlJlc3VsdCAtICVzXG4lYTolZDogU3RhdHVz IC0gJXIiLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAg ICAgICAgICAgICAgX19GSUxFX18sDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilfX0xJTkVf XywNCj4gKyAgICAgICAgICAgICAgICAgU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ ICsNCj4gKyAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+ RnJlZVBvb2wgKFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlcklt YWdlSW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlSW5m byk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdlICE9IE5VTEwpIHsNCj4gKyAgICAgIGd0 QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZSk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ ICsvLyAgIENoZWNrcG9pbnQ6IEdldEltYWdlLCAyDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4g KioqKioqKg0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gQ2FsbHMg ZnVuY3Rpb24gd2l0aCB2YWxpZCBwYXJhbWV0ZXJzLCBleGNlcHQgSW1hZ2UgPSBOVUxMLg0KPiAr ICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSLg0K PiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdEdldEltYWdlQ29uZm9ybWFuY2VU ZXN0Q2hlY2twb2ludDIgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RP Q09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4gKyAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZURhdGE7 DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgKkJ1 ZmZlckltYWdlSW5mbzsNCj4gKw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemU7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9E RVNDUklQVE9SICAgICAgICAgICAgICAgICAgKkltYWdlSW5mbzsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lvbjsNCj4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlw dG9yQ291bnQ7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpcHRvclNpemU7DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb247DQo+ICsgIENIQVIxNiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiA7DQo+ ICsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq SW1hZ2U7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW1hZ2VTaXplOw0KPiArDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAg ICAgICAgICAgICAgICAqcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBGdW5jdGlvblRlc3RlZDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0 DQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlv blR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJt d2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZUFzc2VydGlvbkd1aWQwMDQ7DQo+ICsgIFJl c3VsdE1lc3NhZ2VMYWJlbCA9IEwiR2V0SW1hZ2UsIGNvbmZvcm1hbmNlIGNoZWNrcG9pbnQgIzIi Ow0KPiArDQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9IE5VTEw7DQo+ICsgIEltYWdlSW5mbyA9IE5V TEw7DQo+ICsgIEltYWdlID0gTlVMTDsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsN Cj4gKyAgRnVuY3Rpb25UZXN0ZWQgPSAwOw0KPiArDQo+ICsgIC8vIFVzZSBhIHN1ZmZpY2llbnRs eSBsYXJnZSBidWZmZXIgdG8gb2J0YWluIEVGSV9TVUNDRVNTLA0KPiArICAvLyBzaW5jZSBzb21l IGltcGxlbWVudGF0aW9uIGRvZXMgTk9UIGNvcnJlY3RseSByZXR1cm4NCj4gRUZJX0JVRkZFUl9U T09fU01BTEwuDQo+ICsgIC8vIENoZWNrIGZvciBFRklfQlVGRkVSX1RPT19TTUFMTCBpbiBhbm90 aGVyIGNvbmZvcm1hbmNlIHRlc3QuDQo+ICsNCj4gKyAgSW1hZ2VJbmZvU2l6ZSA9IChzaXplb2Yg KEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SKSkgKiAyMDsNCj4gKyAgU3RhdHVzID0gZ3RC Uy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNE YXRhLA0KPiArICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAg ICAgICAgICAgKFZPSUQgKiopICZJbWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICApOw0K PiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVG SV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRl c3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiAr ICB9DQo+ICsNCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8g KA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclZlcnNpb24sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19T TUFMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChJbWFnZUluZm8pOw0KPiArICAgIFN0YXR1 cyA9IGd0QlMtPkFsbG9jYXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBFZmlCb290 U2VydmljZXNEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAg ICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAg IEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVz dWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICAgIFN0YXR1cyA9IEZpcm13YXJlTWFu YWdlbWVudC0+R2V0SW1hZ2VJbmZvICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgSW1hZ2VJbmZvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm RGVzY3JpcHRvclZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZEZXNjcmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZEZXNjcmlwdG9yU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JlBhY2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm UGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAgQXNzZXJ0 aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNz YWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAg IEJ1ZmZlckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAg ICB9DQo+ICsgIH0NCj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArDQo+ICsg IGlmIChEZXNjcmlwdG9yU2l6ZSA9PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9U RVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIipEZXNj cmlwdG9yU2l6ZSBpcyAwLiI7DQo+ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVz ID0gRUZJX1NVQ0NFU1MNCj4gKyAgfQ0KPiArICBpZiAoKERlc2NyaXB0b3JDb3VudCAqIERlc2Ny aXB0b3JTaXplKSA+IEltYWdlSW5mb1NpemUpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJ X1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKCgq RGVzY3JpcHRvckNvdW50KSAqICgqRGVzY3JpcHRvclNpemUpKSA+DQo+ICpJbWFnZUluZm9TaXpl LiI7DQo+ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NFU1MN Cj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5 IHRoZSBmdW5jdGlvbg0KPiArICAvLw0KPiArDQo+ICsgIGZvciAoaSA9IDA7IGkgPCBEZXNjcmlw dG9yQ291bnQ7IGkrKykgew0KPiArICAgIHAgPSAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBU T1IgKikgKCgoVUlOVDggKikgSW1hZ2VJbmZvKSArDQo+IChpICogRGVzY3JpcHRvclNpemUpKTsN Cj4gKw0KPiArICAgIGlmICgoKHAtPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRS SUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpID09DQo+ICsgICAgICAgICAgSU1BR0VfQVRU UklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSAmJg0KPiArICAgICAgICAoKHAtPkF0dHJp YnV0ZXNTZXR0aW5nICYNCj4gSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVE KSA9PQ0KPiArICAgICAgICAgIElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJF RCkpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAocC0+U2l6ZSA9 PSAwKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5BdHRy aWJ1dGVzU3VwcG9ydGVkICYgSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSkNCj4gIT0g SU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSkgew0KPiArICAgICAgY29udGludWU7DQo+ ICsgICAgfQ0KPiArICAgIGlmICgocC0+QXR0cmlidXRlc1NldHRpbmcgJiBJTUFHRV9BVFRSSUJV VEVfSU1BR0VfVVBEQVRBQkxFKSAhPQ0KPiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxF KSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICAvLyBVc2UgYSBz dWZmaWNpZW50bHkgbGFyZ2UgYnVmZmVyIHNpemUgdG8gYXZvaWQNCj4gRUZJX0JVRkZFUl9UT09f U01BTEwuDQo+ICsgICAgSW1hZ2VTaXplID0gcC0+U2l6ZSAqIDI7DQo+ICsgICAgSW1hZ2UgPSBO VUxMOw0KPiArICAgIEZ1bmN0aW9uVGVzdGVkKys7DQo+ICsgICAgU3RhdHVzID0gRmlybXdhcmVN YW5hZ2VtZW50LT5HZXRJbWFnZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcC0+SW1hZ2VJbmRleCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgSW1hZ2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZVNp emUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAg IC8vDQo+ICsgICAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAgIC8vDQo+ ICsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAg ICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBS ZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybg0KPiBFRklfSU5WQUxJRF9QQVJB TUVURVIuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiAr ICBpZiAoRnVuY3Rpb25UZXN0ZWQgPT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklf VEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0 IHNraXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3QgYXBwbHkuIjsNCj4gKyAgfSBlbHNlIHsNCj4g KyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgICBS ZXN1bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5IHJldHVybmVkDQo+IEVGSV9JTlZBTElEX1BB UkFNRVRFUi4iOw0KPiArICB9DQo+ICsNCj4gK0V4aXQ6DQo+ICsgIFN0YW5kYXJkTGliLT5SZWNv cmRBc3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAg ICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAgVGVzdEd1aWQs DQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwNCj4gKyAgICAgICAgICAg ICAgICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwNCj4gKyAgICAgICAgICAg ICAgICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgIF9fRklMRV9fLA0K PiArICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsgICAgICAgICAgICAgICAg IFN0YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChQYWNrYWdlVmVy c2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChQYWNrYWdlVmVyc2lv bk5hbWUpOw0KPiArICB9DQo+ICsgIGlmIChCdWZmZXJJbWFnZUluZm8gIT0gTlVMTCkgew0KPiAr ICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZUluZm8pOw0KPiArICB9DQo+ICsNCj4gKyAg cmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4g KioqKioqKg0KPiArLy8gICBDaGVja3BvaW50OiBHZXRJbWFnZSwgMw0KPiArLy8NCj4gKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcm91dGluZToNCj4gKyAg ICAtIENhbGxzIGZ1bmN0aW9uIHdpdGggdmFsaWQgcGFyYW1ldGVycywgZXhjZXB0IEltYWdlSW5k ZXggPSAwIG9yDQo+ICsgICAgICBJbWFnZUluZGV4ID0gRGVzY3JpcHRvckNvdW50ICsgMS4NCj4g KyAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBv cg0KPiBFRklfTk9UX0ZPVU5ELg0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVz dEdldEltYWdlQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDMgKA0KPiArICBJTiBFRklfU1RBTkRB UkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4g RUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5h Z2VtZW50DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVs DQo+IDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqUmVzdWx0TWVzc2FnZURhdGE7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9S ICAgICAgICAgICAgICAgICAgKkJ1ZmZlckltYWdlSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQnVmZmVySW1hZ2U7DQo+ICsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9T aXplOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAg ICpJbWFnZUluZm87DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgRGVzY3JpcHRvclZlcnNpb247DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckNvdW50Ow0KPiArICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VW ZXJzaW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArDQo+ICsgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsNCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZGV4Ow0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7 DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNz ZXJ0aW9uR3VpZDAwNTsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJHZXRJbWFnZSwgY29u Zm9ybWFuY2UgY2hlY2twb2ludCAjMyI7DQo+ICsNCj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gTlVM TDsNCj4gKyAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiAr ICBJbWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsNCj4g KyAgLy8gVXNlIGEgc3VmZmljaWVudGx5IGxhcmdlIGJ1ZmZlciB0byBvYnRhaW4gRUZJX1NVQ0NF U1MsDQo+ICsgIC8vIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb24gZG9lcyBOT1QgY29ycmVjdGx5 IHJldHVybg0KPiBFRklfQlVGRkVSX1RPT19TTUFMTC4NCj4gKyAgLy8gQ2hlY2sgZm9yIEVGSV9C VUZGRVJfVE9PX1NNQUxMIGluIGFub3RoZXIgY29uZm9ybWFuY2UgdGVzdC4NCj4gKw0KPiArICBJ bWFnZUluZm9TaXplID0gKHNpemVvZiAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IpKSAq IDIwOw0KPiArICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgSW1hZ2VJ bmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiAr ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBS ZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsN Cj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGaXJtd2FyZU1h bmFnZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlw dG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlw dG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRv clNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNp b24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25O YW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoU3Rh dHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKElt YWdlSW5mbyk7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAg ICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJ bWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElP Tl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRp YWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsg ICAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUND RVNTKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxF RDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRp b24gZmFpbHVyZS4iOw0KPiArICAgICAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiAr ICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBCdWZmZXJJbWFnZUluZm8g PSBJbWFnZUluZm87DQo+ICsNCj4gKyAgaWYgKERlc2NyaXB0b3JTaXplID09IDApIHsNCj4gKyAg ICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1 bHRNZXNzYWdlRGF0YSA9IEwiKkRlc2NyaXB0b3JTaXplIGlzIDAuIjsNCj4gKyAgICBnb3RvIEV4 aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsgIGlmICgo RGVzY3JpcHRvckNvdW50ICogRGVzY3JpcHRvclNpemUpID4gSW1hZ2VJbmZvU2l6ZSkgew0KPiAr ICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJl c3VsdE1lc3NhZ2VEYXRhID0gTCIoKCpEZXNjcmlwdG9yQ291bnQpICogKCpEZXNjcmlwdG9yU2l6 ZSkpID4NCj4gKkltYWdlSW5mb1NpemUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRo ZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hl Y2sgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uDQo+ICsgIC8vDQo+ICsNCj4gKyAg Ly8gRHVtbXkgaW1hZ2Ugc28gYXMgdG8gZmFpbCBvbiBJbWFnZSA9IE5VTEwNCj4gKyAgLy8gQW55 IHNpemUgc2luY2UgdGhlIGZ1bmN0aW9uIHNob3VsZCBjaGVjayBmb3IgaW5kZXggYmVmb3JlIHNp emUNCj4gKyAgSW1hZ2VTaXplID0gNjQ7DQo+ICsgIFN0YXR1cyA9IGd0QlMtPkFsbG9jYXRlUG9v bCAoDQo+ICsgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAg ICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZPSUQgKiop ICZJbWFnZQ0KPiArICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxF RDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9u IGZhaWx1cmUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgQnVmZmVySW1hZ2Ug PSBJbWFnZTsNCj4gKw0KPiArICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZB SUxFRDsNCj4gKyAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZhaWxlZCB0byByZXR1cm4gRUZJX0lO VkFMSURfUEFSQU1FVEVSIG9yDQo+IEVGSV9OT1RfRk9VTkQuIjsNCj4gKw0KPiArICBJbWFnZUlu ZGV4ID0gMDsNCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZSAoDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZGV4LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmSW1hZ2VTaXplDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICApOw0KPiArICBpZiAoKFN0YXR1cyAhPSBFRklfSU5WQUxJRF9QQVJBTUVURVIpICYmIChT dGF0dXMgIT0NCj4gRUZJX05PVF9GT1VORCkpIHsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0N Cj4gKw0KPiArICBpZiAoKERlc2NyaXB0b3JDb3VudCArIDEpICE9IDApIHsNCj4gKyAgICBJbWFn ZUluZGV4ID0gRGVzY3JpcHRvckNvdW50ICsgMTsNCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1h bmFnZW1lbnQtPkdldEltYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbWFnZUluZGV4LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bWFnZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlU2l6ZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmICgoU3Rh dHVzICE9IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgJiYgKFN0YXR1cyAhPQ0KPiBFRklfTk9UX0ZP VU5EKSkgew0KPiArICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsg IC8vDQo+ICsgIC8vIFJlcG9ydCB0aGUgY2hlY2twb2ludCByZXN1bHQNCj4gKyAgLy8NCj4gKw0K PiArICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgUmVz dWx0TWVzc2FnZURhdGEgPSBMImNvcnJlY3RseSByZXR1cm5lZCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgb3INCj4gRUZJX05PVF9GT1VORC4iOw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExp Yi0+UmVjb3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ ICsgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRl c3RHdWlkLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAg ICAgICAgICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAg ICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJ TEVfXywNCj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAg ICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFj a2FnZVZlcnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2Fn ZVZlcnNpb25OYW1lKTsNCj4gKyAgfQ0KPiArICBpZiAoQnVmZmVySW1hZ2VJbmZvICE9IE5VTEwp IHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoQnVmZmVySW1hZ2VJbmZvKTsNCj4gKyAgfQ0KPiAr ICAgaWYgKEJ1ZmZlckltYWdlICE9IE5VTEwpIHsNCj4gKyAgICAgIGd0QlMtPkZyZWVQb29sIChC dWZmZXJJbWFnZSk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9 DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrcG9p bnQ6IEdldEltYWdlLCA0DQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ ICsvKioNCj4gKyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gVGhlIGZ1bmN0aW9uIHJlcXVpcmVz IGF1dGhlbnRpY2F0aW9uLg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCB2YWxpZCBwYXJh bWV0ZXJzLCBleGNlcHQgSW1hZ2UgaGFzIGR1bW15DQo+ICsgICAgICBhdXRoZW50aWNhdGlvbiBk YXRhLg0KPiArICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJ T0xBVElPTi4NCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJbWFnZUNv bmZvcm1hbmNlVGVzdENoZWNrcG9pbnQ0ICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElC UkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FS RV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBFRklfVEVTVF9BU1NFUlRJT04gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFzc2VydGlvblR5cGU7DQo+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGVzdEd1aWQ7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VMYWJlbA0KPiA7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1l c3NhZ2VEYXRhOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAg ICAgICAgICpCdWZmZXJJbWFnZUluZm87DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlckltYWdlOw0KPiArDQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZTsNCj4gKyAg RUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAqSW1hZ2VJbmZv Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl c2NyaXB0b3JWZXJzaW9uOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaXB0b3JDb3VudDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4g KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2Fn ZVZlcnNpb25OYW1lDQo+IDsNCj4gKw0KPiArICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7DQo+ICsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOw0KPiArICBFRklfRklSTVdBUkVf SU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpwOw0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVGVzdGVkOw0KPiArDQo+ ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VD Q0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0 aW9uR3VpZDAwNjsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJHZXRJbWFnZSwgY29uZm9y bWFuY2UgY2hlY2twb2ludCAjNCI7DQo+ICsNCj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gTlVMTDsN Cj4gKyAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiArICBJ bWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgIEZ1bmN0 aW9uVGVzdGVkID0gMDsNCj4gKw0KPiArICAvLyBVc2UgYSBzdWZmaWNpZW50bHkgbGFyZ2UgYnVm ZmVyIHRvIG9idGFpbiBFRklfU1VDQ0VTUywNCj4gKyAgLy8gc2luY2Ugc29tZSBpbXBsZW1lbnRh dGlvbiBkb2VzIE5PVCBjb3JyZWN0bHkgcmV0dXJuDQo+IEVGSV9CVUZGRVJfVE9PX1NNQUxMLg0K PiArICAvLyBDaGVjayBmb3IgRUZJX0JVRkZFUl9UT09fU01BTEwgaW4gYW5vdGhlciBjb25mb3Jt YW5jZSB0ZXN0Lg0KPiArDQo+ICsgIEltYWdlSW5mb1NpemUgPSAoc2l6ZW9mIChFRklfRklSTVdB UkVfSU1BR0VfREVTQ1JJUFRPUikpICogMjA7DQo+ICsgIFN0YXR1cyA9IGd0QlMtPkFsbG9jYXRl UG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAg ICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgIChW T0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NF UlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5p dGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiArDQo+ ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0SW1hZ2VJbmZvICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZQYWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICk7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4g KyAgICBndEJTLT5GcmVlUG9vbCAoSW1hZ2VJbmZvKTsNCj4gKyAgICBTdGF0dXMgPSBndEJTLT5B bGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0 YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBBc3NlcnRpb25U eXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VE YXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgICAgZ290 byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdl dEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13 YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJklt YWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdl SW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JW ZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRv ckNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRv clNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVy c2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJz aW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAg IGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBF RklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBM InRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBCdWZmZXJJbWFn ZUluZm8gPSBJbWFnZUluZm87DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICB9 DQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKw0KPiArICBpZiAoRGVzY3Jp cHRvclNpemUgPT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJ T05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCIqRGVzY3JpcHRvclNpemUg aXMgMC4iOw0KPiArICAgIGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9TVUND RVNTDQo+ICsgIH0NCj4gKyAgaWYgKChEZXNjcmlwdG9yQ291bnQgKiBEZXNjcmlwdG9yU2l6ZSkg PiBJbWFnZUluZm9TaXplKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VS VElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIigoKkRlc2NyaXB0b3JD b3VudCkgKiAoKkRlc2NyaXB0b3JTaXplKSkgPg0KPiAqSW1hZ2VJbmZvU2l6ZS4iOw0KPiArICAg IGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9TVUNDRVNTDQo+ICsgIH0NCj4g Kw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgZnVuY3Rp b24NCj4gKyAgLy8NCj4gKw0KPiArICBmb3IgKGkgPSAwOyBpIDwgRGVzY3JpcHRvckNvdW50OyBp KyspIHsNCj4gKyAgICBwID0gKEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICopICgoKFVJ TlQ4ICopIEltYWdlSW5mbykgKw0KPiAoaSAqIERlc2NyaXB0b3JTaXplKSk7DQo+ICsNCj4gKyAg ICBpZiAoKHAtPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVO VElDQVRJT05fUkVRVUlSRUQpICE9DQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9S RVFVSVJFRCkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmICgocC0+ QXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVR VUlSRUQpICE9DQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgew0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmIChwLT5TaXplID09IDApIHsN Cj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNT dXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKQ0KPiAhPSBJTUFHRV9B VFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9 DQo+ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9JTUFH RV9VUERBVEFCTEUpICE9DQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpIHsNCj4g KyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIC8vIFVzZSBhIHN1ZmZpY2ll bnRseSBsYXJnZSBidWZmZXIgc2l6ZSB0byBhdm9pZA0KPiBFRklfQlVGRkVSX1RPT19TTUFMTC4N Cj4gKyAgICBJbWFnZVNpemUgPSBwLT5TaXplICogMjsNCj4gKyAgICBTdGF0dXMgPSBndEJTLT5B bGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0 YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmSW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsg ICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVG SV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwi dGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsN Cj4gKyAgICB9DQo+ICsgICAgQnVmZmVySW1hZ2UgPSBJbWFnZTsNCj4gKw0KPiArICAgIEZ1bmN0 aW9uVGVzdGVkKys7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdl dEltYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVN YW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5JbWFn ZUluZGV4LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlU2l6ZQ0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGd0QlMtPkZyZWVQb29sIChC dWZmZXJJbWFnZSk7DQo+ICsgICAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICAgIEltYWdlID0g TlVMTDsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJl c3VsdA0KPiArICAgIC8vDQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TRUNVUklUWV9W SU9MQVRJT04pIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05f RkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZhaWxlZCB0byByZXR1cm4N Cj4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTi4iOw0KPiArICAgICAgZ290byBFeGl0Ow0KPiArICAg IH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGdW5jdGlvblRlc3RlZCA9PSAwKSB7DQo+ICsgICAg QXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0 TWVzc2FnZURhdGEgPSBMInRlc3Qgc2tpcHBlZCAtIHRlc3QgY2FzZSBkb2VzIG5vdCBhcHBseS4i Ow0KPiArICB9IGVsc2Ugew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJ T05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJjb3JyZWN0bHkgcmV0dXJu ZWQNCj4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiI7DQo+ICsgIH0NCj4gKw0KPiArRXhpdDoNCj4g KyAgU3RhbmRhcmRMaWItPlJlY29yZEFzc2VydGlvbiAoDQo+ICsgICAgICAgICAgICAgICAgIFN0 YW5kYXJkTGliLA0KPiArICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlLA0KPiArICAgICAg ICAgICAgICAgICBUZXN0R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZUxh YmVsLA0KPiArICAgICAgICAgICAgICAgICBMIlJlc3VsdCAtICVzXG4lYTolZDogU3RhdHVzIC0g JXIiLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAgICAg ICAgICAgICAgX19GSUxFX18sDQo+ICsgICAgICAgICAgICAgICAgIChVSU5UTilfX0xJTkVfXywN Cj4gKyAgICAgICAgICAgICAgICAgU3RhdHVzDQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsN Cj4gKyAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJl ZVBvb2wgKFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdl SW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlSW5mbyk7 DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdlICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5G cmVlUG9vbCAoQnVmZmVySW1hZ2UpOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUND RVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8g ICBDaGVja3BvaW50OiBTZXRJbWFnZSwgMQ0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioq KioNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcm91dGluZToNCj4gKyAgICAtIENhbGxzIGZ1bmN0 aW9uIHdpdGggdmFsaWQgcGFyYW1ldGVycywgZXhjZXB0IEltYWdlID0gTlVMTC4NCj4gKyAgICAg IFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUi4NCj4gKyoq Lw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RTZXRJbWFnZUNvbmZvcm1hbmNlVGVzdENo ZWNrcG9pbnQxICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElCUkFSWV9QUk9UT0NPTCAg ICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BS T1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiArICApDQo+ICt7DQo+ICsg IEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K PiArICBFRklfVEVTVF9BU1NFUlRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2Vy dGlvblR5cGU7DQo+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVGVzdEd1aWQ7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VMYWJlbA0KPiA7DQo+ICsgIENIQVIxNiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VEYXRhOw0KPiAr ICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpCdWZmZXJJ bWFnZUluZm87DQo+ICsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJ UFRPUiAgICAgICAgICAgICAgICAgICpJbWFnZUluZm87DQo+ICsgIFVJTlQzMiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclZlcnNpb247DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckNv dW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IERlc2NyaXB0b3JTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArDQo+ ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkFib3J0 UmVhc29uOw0KPiArDQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKkltYWdlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEltYWdlU2l6ZTsNCj4gKw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGk7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVND UklQVE9SICAgICAgICAgICAgICAgICAgKnA7DQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25UZXN0ZWQ7DQo+ICsNCj4gKyAgLy8NCj4g KyAgLy8gSW5pdA0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KPiAr ICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgVGVzdEd1 aWQgPSBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA3 Ow0KPiArICBSZXN1bHRNZXNzYWdlTGFiZWwgPSBMIlNldEltYWdlLCBjb25mb3JtYW5jZSBjaGVj a3BvaW50ICMxIjsNCj4gKw0KPiArICBCdWZmZXJJbWFnZUluZm8gPSBOVUxMOw0KPiArICBJbWFn ZUluZm8gPSBOVUxMOw0KPiArICBJbWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFt ZSA9IE5VTEw7DQo+ICsgIEFib3J0UmVhc29uID0gTlVMTDsNCj4gKyAgRnVuY3Rpb25UZXN0ZWQg PSAwOw0KPiArDQo+ICsgIC8vIFVzZSBhIHN1ZmZpY2llbnRseSBsYXJnZSBidWZmZXIgdG8gb2J0 YWluIEVGSV9TVUNDRVNTLA0KPiArICAvLyBzaW5jZSBzb21lIGltcGxlbWVudGF0aW9uIGRvZXMg Tk9UIGNvcnJlY3RseSByZXR1cm4NCj4gRUZJX0JVRkZFUl9UT09fU01BTEwuDQo+ICsgIC8vIENo ZWNrIGZvciBFRklfQlVGRkVSX1RPT19TTUFMTCBpbiBhbm90aGVyIGNvbmZvcm1hbmNlIHRlc3Qu DQo+ICsNCj4gKyAgSW1hZ2VJbmZvU2l6ZSA9IChzaXplb2YgKEVGSV9GSVJNV0FSRV9JTUFHRV9E RVNDUklQVE9SKSkgKiAyMDsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4g KyAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiArICAgICAgICAgICAg ICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJ bWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlM RUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlv biBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgU3RhdHVz ID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmRGVzY3JpcHRvclZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmRGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JlBhY2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBh Y2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiArICAgIGd0QlMt PkZyZWVQb29sIChJbWFnZUluZm8pOw0KPiArICAgIFN0YXR1cyA9IGd0QlMtPkFsbG9jYXRlUG9v bCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiArICAg ICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg IChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBFRklf VEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRl c3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ ICsgICAgfQ0KPiArICAgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0SW1hZ2VJbmZv ICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2Vt ZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJbmZvU2l6 ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclZlcnNpb24sDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6ZSwNCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKFN0YXR1 cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNl IGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIEJ1ZmZlckltYWdlSW5mbyA9IElt YWdlSW5mbzsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKyAgQnVm ZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArDQo+ICsgIGlmIChEZXNjcmlwdG9yU2l6ZSA9 PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7 DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIipEZXNjcmlwdG9yU2l6ZSBpcyAwLiI7DQo+ ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NFU1MNCj4gKyAg fQ0KPiArICBpZiAoKERlc2NyaXB0b3JDb3VudCAqIERlc2NyaXB0b3JTaXplKSA+IEltYWdlSW5m b1NpemUpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxF RDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKCgqRGVzY3JpcHRvckNvdW50KSAqICgq RGVzY3JpcHRvclNpemUpKSA+DQo+ICpJbWFnZUluZm9TaXplLiI7DQo+ICsgICAgZ290byBFeGl0 OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NFU1MNCj4gKyAgfQ0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlvbg0KPiArICAv Lw0KPiArDQo+ICsgIGZvciAoaSA9IDA7IGkgPCBEZXNjcmlwdG9yQ291bnQ7IGkrKykgew0KPiAr ICAgIHAgPSAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikgKCgoVUlOVDggKikgSW1h Z2VJbmZvKSArDQo+IChpICogRGVzY3JpcHRvclNpemUpKTsNCj4gKw0KPiArICAgIGlmICgoKHAt PkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05f UkVRVUlSRUQpID09DQo+ICsgICAgICAgICAgSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9O X1JFUVVJUkVEKSAmJg0KPiArICAgICAgICAoKHAtPkF0dHJpYnV0ZXNTZXR0aW5nICYNCj4gSU1B R0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSA9PQ0KPiArICAgICAgICAgIElN QUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkpIHsNCj4gKyAgICAgIGNvbnRp bnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAocC0+U2l6ZSA9PSAwKSB7DQo+ICsgICAgICBjb250 aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVzU3VwcG9ydGVkICYgSU1B R0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSkNCj4gIT0gSU1BR0VfQVRUUklCVVRFX0lNQUdF X1VQREFUQUJMRSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmICgo cC0+QXR0cmlidXRlc1NldHRpbmcgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSAh PQ0KPiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7DQo+ICsgICAgICBjb250aW51 ZTsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBJbWFnZVNpemUgPSBwLT5TaXplOw0KPiArICAgIElt YWdlID0gTlVMTDsNCj4gKyAgICBGdW5jdGlvblRlc3RlZCsrOw0KPiArICAgIFN0YXR1cyA9IEZp cm13YXJlTWFuYWdlbWVudC0+U2V0SW1hZ2UgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHAtPkltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEltYWdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAv LyBWZW5kb3JDb2RlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dy ZXNzLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWJvcnRSZWFzb24N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICAgIC8v DQo+ICsgICAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAgIC8vDQo+ICsN Cj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgew0KPiArICAgICAg QXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1 bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybg0KPiBFRklfSU5WQUxJRF9QQVJBTUVU RVIuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBp ZiAoRnVuY3Rpb25UZXN0ZWQgPT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVT VF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IHNr aXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3QgYXBwbHkuIjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAg ICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1 bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5IHJldHVybmVkDQo+IEVGSV9JTlZBTElEX1BBUkFN RVRFUi4iOw0KPiArICB9DQo+ICsNCj4gK0V4aXQ6DQo+ICsgIFN0YW5kYXJkTGliLT5SZWNvcmRB c3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAgICAg ICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAgVGVzdEd1aWQsDQo+ ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwNCj4gKyAgICAgICAgICAgICAg ICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwNCj4gKyAgICAgICAgICAgICAg ICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgIF9fRklMRV9fLA0KPiAr ICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsgICAgICAgICAgICAgICAgIFN0 YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChQYWNrYWdlVmVyc2lv bk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChQYWNrYWdlVmVyc2lvbk5h bWUpOw0KPiArICB9DQo+ICsgIGlmIChCdWZmZXJJbWFnZUluZm8gIT0gTlVMTCkgew0KPiArICAg IGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZUluZm8pOw0KPiArICB9DQo+ICsgIGlmIChBYm9y dFJlYXNvbiAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEFib3J0UmVhc29uKTsN Cj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0KPiArLy8N Cj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgQ2hlY2twb2ludDogU2V0SW1hZ2Us IDINCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4gKy8qKg0KPiArICBU aGlzIHJvdXRpbmU6DQo+ICsgICAgLSBDYWxscyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFtZXRl cnMsIGV4Y2VwdCBJbWFnZSBpcyBhIGR1bW15DQo+IGltYWdlLg0KPiArICAgICAgVGhlIGZ1bmN0 aW9uIHNob3VsZCByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSIG9yDQo+IEVGSV9BQk9SVEVE Lg0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldEltYWdlQ29uZm9ybWFu Y2VUZXN0Q2hlY2twb2ludDIgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BS T1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFH RU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICkNCj4g K3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBT dGF0dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4gKyAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZURh dGE7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAg KkJ1ZmZlckltYWdlSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqQnVmZmVySW1hZ2U7DQo+ICsNCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBFRklfRklS TVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpJbWFnZUluZm87DQo+ICsg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRv clZlcnNpb247DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpcHRvckNvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uOw0KPiArICBDSEFS MTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lv bk5hbWUNCj4gOw0KPiArDQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKkFib3J0UmVhc29uOw0KPiArDQo+ICsgIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkltYWdlOw0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZTsNCj4gKw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7DQo+ICsgIEVGSV9G SVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgKnA7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb25UZXN0ZWQ7 DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5pdA0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9 IEVGSV9TVUNDRVNTOw0KPiArICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1BB U1NFRDsNCj4gKyAgVGVzdEd1aWQgPSBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFu Y2VBc3NlcnRpb25HdWlkMDA4Ow0KPiArICBSZXN1bHRNZXNzYWdlTGFiZWwgPSBMIlNldEltYWdl LCBjb25mb3JtYW5jZSBjaGVja3BvaW50ICMyIjsNCj4gKw0KPiArICBCdWZmZXJJbWFnZUluZm8g PSBOVUxMOw0KPiArICBCdWZmZXJJbWFnZSA9IE5VTEw7DQo+ICsgIEltYWdlSW5mbyA9IE5VTEw7 DQo+ICsgIEltYWdlID0gTlVMTDsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsNCj4g KyAgQWJvcnRSZWFzb24gPSBOVUxMOw0KPiArICBGdW5jdGlvblRlc3RlZCA9IDA7DQo+ICsNCj4g KyAgLy8gVXNlIGEgc3VmZmljaWVudGx5IGxhcmdlIGJ1ZmZlciB0byBvYnRhaW4gRUZJX1NVQ0NF U1MsDQo+ICsgIC8vIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb24gZG9lcyBOT1QgY29ycmVjdGx5 IHJldHVybg0KPiBFRklfQlVGRkVSX1RPT19TTUFMTC4NCj4gKyAgLy8gQ2hlY2sgZm9yIEVGSV9C VUZGRVJfVE9PX1NNQUxMIGluIGFub3RoZXIgY29uZm9ybWFuY2UgdGVzdC4NCj4gKw0KPiArICBJ bWFnZUluZm9TaXplID0gKHNpemVvZiAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IpKSAq IDIwOw0KPiArICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgSW1hZ2VJ bmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiAr ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g KyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBS ZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsN Cj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBTdGF0dXMgPSBGaXJtd2FyZU1h bmFnZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlw dG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlw dG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRv clNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNp b24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25O YW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoU3Rh dHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKElt YWdlSW5mbyk7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAgICAg ICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAg ICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJ bWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJP UiAoU3RhdHVzKSkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElP Tl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRp YWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsg ICAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9TVUND RVNTKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxF RDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRp b24gZmFpbHVyZS4iOw0KPiArICAgICAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiAr ICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArICBCdWZmZXJJbWFnZUluZm8g PSBJbWFnZUluZm87DQo+ICsNCj4gKyAgaWYgKERlc2NyaXB0b3JTaXplID09IDApIHsNCj4gKyAg ICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1 bHRNZXNzYWdlRGF0YSA9IEwiKkRlc2NyaXB0b3JTaXplIGlzIDAuIjsNCj4gKyAgICBnb3RvIEV4 aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsgIGlmICgo RGVzY3JpcHRvckNvdW50ICogRGVzY3JpcHRvclNpemUpID4gSW1hZ2VJbmZvU2l6ZSkgew0KPiAr ICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJl c3VsdE1lc3NhZ2VEYXRhID0gTCIoKCpEZXNjcmlwdG9yQ291bnQpICogKCpEZXNjcmlwdG9yU2l6 ZSkpID4NCj4gKkltYWdlSW5mb1NpemUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRo ZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hl Y2sgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0aW9uDQo+ICsgIC8vDQo+ICsNCj4gKyAg Zm9yIChpID0gMDsgaSA8IERlc2NyaXB0b3JDb3VudDsgaSsrKSB7DQo+ICsgICAgcCA9IChFRklf RklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAqKSAoKChVSU5UOCAqKSBJbWFnZUluZm8pICsNCj4g KGkgKiBEZXNjcmlwdG9yU2l6ZSkpOw0KPiArDQo+ICsgICAgaWYgKCgocC0+QXR0cmlidXRlc1N1 cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgPT0N Cj4gKyAgICAgICAgICBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICYm DQo+ICsgICAgICAgICgocC0+QXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVf QVVUSEVOVElDQVRJT05fUkVRVUlSRUQpID09DQo+ICsgICAgICAgICAgSU1BR0VfQVRUUklCVVRF X0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAg fQ0KPiArICAgIGlmIChwLT5TaXplID09IDApIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAg IH0NCj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVf SU1BR0VfVVBEQVRBQkxFKQ0KPiAhPSBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7 DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVz U2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpICE9DQo+IElNQUdFX0FU VFJJQlVURV9JTUFHRV9VUERBVEFCTEUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0N Cj4gKw0KPiArICAgIEltYWdlU2l6ZSA9IHAtPlNpemU7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+ QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0Rh dGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAoVk9JRCAqKikgJkltYWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBF RklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBM InRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBnb3RvIEV4aXQ7 DQo+ICsgICAgfQ0KPiArICAgIEJ1ZmZlckltYWdlID0gSW1hZ2U7DQo+ICsgICAgRnVuY3Rpb25U ZXN0ZWQrKzsNCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPlNldEltYWdlICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5JbWFnZUluZGV4LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gVmVuZG9yQ29kZQ0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmVzcywNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJkFib3J0UmVhc29uDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlKTsNCj4gKyAg ICBCdWZmZXJJbWFnZSA9IE5VTEw7DQo+ICsgICAgSW1hZ2UgPSBOVUxMOw0KPiArDQo+ICsgICAg Ly8NCj4gKyAgICAvLyBSZXBvcnQgdGhlIGNoZWNrcG9pbnQgcmVzdWx0DQo+ICsgICAgLy8NCj4g Kw0KPiArICAgIGlmICgoU3RhdHVzICE9IEVGSV9JTlZBTElEX1BBUkFNRVRFUikgJiYgKFN0YXR1 cyAhPQ0KPiBFRklfQUJPUlRFRCkpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVT VF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImZhaWxl ZCB0byByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSDQo+IG9yIEVGSV9BQk9SVEVELiI7DQo+ ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgaWYgKEZ1bmN0 aW9uVGVzdGVkID09IDApIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJU SU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBza2lwcGVkIC0g dGVzdCBjYXNlIGRvZXMgbm90IGFwcGx5LiI7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQXNzZXJ0 aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2Fn ZURhdGEgPSBMImNvcnJlY3RseSByZXR1cm5lZCBFRklfSU5WQUxJRF9QQVJBTUVURVINCj4gb3Ig RUZJX0FCT1JURUQuIjsNCj4gKyAgfQ0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExpYi0+ UmVjb3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsg ICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRlc3RH dWlkLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAgICAg ICAgICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAgICAg ICAgICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJTEVf XywNCj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAgICAg ICAgICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFja2Fn ZVZlcnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZl cnNpb25OYW1lKTsNCj4gKyAgfQ0KPiArICBpZiAoQnVmZmVySW1hZ2VJbmZvICE9IE5VTEwpIHsN Cj4gKyAgICBndEJTLT5GcmVlUG9vbCAoQnVmZmVySW1hZ2VJbmZvKTsNCj4gKyAgfQ0KPiArICBp ZiAoQnVmZmVySW1hZ2UgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJ bWFnZSk7DQo+ICsgIH0NCj4gKyAgaWYgKEFib3J0UmVhc29uICE9IE5VTEwpIHsNCj4gKyAgICBn dEJTLT5GcmVlUG9vbCAoQWJvcnRSZWFzb24pOw0KPiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0K PiArLy8gICBDaGVja3BvaW50OiBTZXRJbWFnZSwgMw0KPiArLy8NCj4gKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ ICoqKioqKioNCj4gKw0KPiArLyoqDQo+ICsgIFRoaXMgcm91dGluZToNCj4gKyAgICAtIENhbGxz IGZ1bmN0aW9uIHdpdGggdmFsaWQgcGFyYW1ldGVycywgZXhjZXB0IEltYWdlSW5kZXggPSAwIG9y DQo+ICsgICAgICBJbWFnZUluZGV4ID0gRGVzY3JpcHRvckNvdW50ICsgMS4NCj4gKyAgICAgIFRo ZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBvcg0KPiBFRklf QUJPUlRFRC4NCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RTZXRJbWFnZUNv bmZvcm1hbmNlVGVzdENoZWNrcG9pbnQzICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJEX1RFU1RfTElC UkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVGSV9GSVJNV0FS RV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiAr ICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU3RhdHVzOw0KPiArICBFRklfVEVTVF9BU1NFUlRJT04gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEFzc2VydGlvblR5cGU7DQo+ICsgIEVGSV9HVUlEICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgVGVzdEd1aWQ7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VMYWJlbA0KPiA7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1l c3NhZ2VEYXRhOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAg ICAgICAgICpCdWZmZXJJbWFnZUluZm87DQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlckltYWdlOw0KPiArDQo+ICsgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZTsNCj4gKyAg RUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAqSW1hZ2VJbmZv Ow0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERl c2NyaXB0b3JWZXJzaW9uOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaXB0b3JDb3VudDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4g KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2Fn ZVZlcnNpb25OYW1lDQo+IDsNCj4gKw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICpBYm9ydFJlYXNvbjsNCj4gKw0KPiArICBWT0lEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZTsNCj4gKyAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7DQo+ICsgIFVJ TlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmRleDsN Cj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0g RUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFT U0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5j ZUFzc2VydGlvbkd1aWQwMDk7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9IEwiU2V0SW1hZ2Us IGNvbmZvcm1hbmNlIGNoZWNrcG9pbnQgIzMiOw0KPiArDQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9 IE5VTEw7DQo+ICsgIEJ1ZmZlckltYWdlPU5VTEw7DQo+ICsgIEltYWdlSW5mbyA9IE5VTEw7DQo+ ICsgIEltYWdlID0gTlVMTDsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsNCj4gKyAg QWJvcnRSZWFzb24gPSBOVUxMOw0KPiArDQo+ICsgIC8vIFVzZSBhIHN1ZmZpY2llbnRseSBsYXJn ZSBidWZmZXIgdG8gb2J0YWluIEVGSV9TVUNDRVNTLA0KPiArICAvLyBzaW5jZSBzb21lIGltcGxl bWVudGF0aW9uIGRvZXMgTk9UIGNvcnJlY3RseSByZXR1cm4NCj4gRUZJX0JVRkZFUl9UT09fU01B TEwuDQo+ICsgIC8vIENoZWNrIGZvciBFRklfQlVGRkVSX1RPT19TTUFMTCBpbiBhbm90aGVyIGNv bmZvcm1hbmNlIHRlc3QuDQo+ICsNCj4gKyAgSW1hZ2VJbmZvU2l6ZSA9IChzaXplb2YgKEVGSV9G SVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SKSkgKiAyMDsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+QWxs b2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0K PiArICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAg ICAgKFZPSUQgKiopICZJbWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICApOw0KPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNU X0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2Fz ZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ ICsNCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclZlcnNpb24sDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkg ew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChJbWFnZUluZm8pOw0KPiArICAgIFN0YXR1cyA9IGd0 QlMtPkFsbG9jYXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBFZmlCb290U2Vydmlj ZXNEYXRhLA0KPiArICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAg ICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAg ICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFzc2Vy dGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVz c2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAg ICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICAgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVu dC0+R2V0SW1hZ2VJbmZvICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg RmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg SW1hZ2VJbmZvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3Jp cHRvclZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNj cmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNj cmlwdG9yU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2th Z2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2Fn ZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0 YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIEJ1ZmZl ckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ ICsgIH0NCj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArDQo+ICsgIGlmIChE ZXNjcmlwdG9yU2l6ZSA9PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIipEZXNjcmlwdG9y U2l6ZSBpcyAwLiI7DQo+ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJ X1NVQ0NFU1MNCj4gKyAgfQ0KPiArICBpZiAoKERlc2NyaXB0b3JDb3VudCAqIERlc2NyaXB0b3JT aXplKSA+IEltYWdlSW5mb1NpemUpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1Rf QVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKCgqRGVzY3Jp cHRvckNvdW50KSAqICgqRGVzY3JpcHRvclNpemUpKSA+DQo+ICpJbWFnZUluZm9TaXplLiI7DQo+ ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NFU1MNCj4gKyAg fQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBm dW5jdGlvbg0KPiArICAvLw0KPiArDQo+ICsgIC8vIER1bW15IGltYWdlIHNvIGFzIHRvIGZhaWwg b24gSW1hZ2UgPSBOVUxMDQo+ICsgIC8vIEFueSBzaXplIHNpbmNlIHRoZSBmdW5jdGlvbiBzaG91 bGQgY2hlY2sgZm9yIGluZGV4IGJlZm9yZSBzaXplDQo+ICsgIEltYWdlU2l6ZSA9IDY0Ow0KPiAr ICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgIEVm aUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplLA0KPiAr ICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEg PSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0 Ow0KPiArICB9DQo+ICsgIEJ1ZmZlckltYWdlID0gSW1hZ2U7DQo+ICsNCj4gKyAgQXNzZXJ0aW9u VHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgIFJlc3VsdE1lc3NhZ2VEYXRh ID0gTCJmYWlsZWQgdG8gcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBvcg0KPiBFRklfQUJP UlRFRC4iOw0KPiArDQo+ICsgIEltYWdlSW5kZXggPSAwOw0KPiArICBTdGF0dXMgPSBGaXJtd2Fy ZU1hbmFnZW1lbnQtPlNldEltYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6ZSwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAvLyBWZW5kb3JDb2RlDQo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcm9ncmVzcywNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZBYm9ydFJlYXNvbg0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKChTdGF0dXMgIT0gRUZJX0lOVkFMSURfUEFSQU1F VEVSKSAmJiAoU3RhdHVzICE9IEVGSV9BQk9SVEVEKSkNCj4gew0KPiArICAgIGdvdG8gRXhpdDsN Cj4gKyAgfQ0KPiArDQo+ICsgIGlmICgoRGVzY3JpcHRvckNvdW50ICsgMSkgIT0gMCkgew0KPiAr ICAgIEltYWdlSW5kZXggPSBEZXNjcmlwdG9yQ291bnQgKyAxOw0KPiArICAgIFN0YXR1cyA9IEZp cm13YXJlTWFuYWdlbWVudC0+U2V0SW1hZ2UgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEltYWdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn ZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAvLyBW ZW5kb3Jjb2RlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNz LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWJvcnRSZWFzb24NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBpZiAoKFN0YXR1 cyAhPSBFRklfSU5WQUxJRF9QQVJBTUVURVIpICYmIChTdGF0dXMgIT0NCj4gRUZJX0FCT1JURUQp KSB7DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsNCj4gKyAgLy8N Cj4gKyAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAvLw0KPiArDQo+ICsg IEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBSZXN1bHRN ZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5IHJldHVybmVkIEVGSV9JTlZBTElEX1BBUkFNRVRFUiBv cg0KPiBFRklfQUJPUlRFRC4iOw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExpYi0+UmVj b3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAg ICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRlc3RHdWlk LA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAgICAgICAg ICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAgICAgICAg ICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJTEVfXywN Cj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAgICAgICAg ICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFja2FnZVZl cnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZlcnNp b25OYW1lKTsNCj4gKyAgfQ0KPiArICBpZiAoQnVmZmVySW1hZ2VJbmZvICE9IE5VTEwpIHsNCj4g KyAgICBndEJTLT5GcmVlUG9vbCAoQnVmZmVySW1hZ2VJbmZvKTsNCj4gKyAgfQ0KPiArICBpZiAo QnVmZmVySW1hZ2UgIT0gTlVMTCkgew0KPiArICAgICAgZ3RCUy0+RnJlZVBvb2wgKEJ1ZmZlcklt YWdlKTsNCj4gKyAgfQ0KPiArICBpZiAoQWJvcnRSZWFzb24gIT0gTlVMTCkgew0KPiArICAgIGd0 QlMtPkZyZWVQb29sIChBYm9ydFJlYXNvbik7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJ X1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ ICsvLyAgIENoZWNrcG9pbnQ6IFNldEltYWdlLCA0DQo+ICsvLw0KPiAqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4g KioqKioqKg0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gVGhlIGZ1 bmN0aW9uIHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24g d2l0aCB2YWxpZCBwYXJhbWV0ZXJzLCBleGNlcHQgSW1hZ2UgaGFzIGR1bW15DQo+ICsgICAgICBh dXRoZW50aWNhdGlvbiBkYXRhLg0KPiArICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4g RUZJX1NFQ1VSSVRZX1ZJT0xBVElPTi4NCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtC QlRlc3RTZXRJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQ0ICgNCj4gKyAgSU4gRUZJX1NU QU5EQVJEX1RFU1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsg IElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJl TWFuYWdlbWVudA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVEVTVF9BU1NFUlRJT04gICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGU7DQo+ICsgIEVGSV9HVUlEICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEd1aWQ7DQo+ICsgIENIQVIx NiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VM YWJlbA0KPiA7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKlJlc3VsdE1lc3NhZ2VEYXRhOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJ UFRPUiAgICAgICAgICAgICAgICAgICpCdWZmZXJJbWFnZUluZm87DQo+ICsgIFZPSUQgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlckltYWdlOw0KPiArDQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJ bmZvU2l6ZTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAg ICAgICAqSW1hZ2VJbmZvOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIERlc2NyaXB0b3JWZXJzaW9uOw0KPiArICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JDb3VudDsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNr YWdlVmVyc2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAqUGFja2FnZVZlcnNpb25OYW1lDQo+IDsNCj4gKw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpBYm9ydFJlYXNvbjsNCj4gKw0KPiAr ICBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZTsN Cj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn ZVNpemU7DQo+ICsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAg ICAgICAgICpwOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEZ1bmN0aW9uVGVzdGVkOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAg Ly8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9 IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFu YWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0aW9uR3VpZDAxMDsNCj4gKyAgUmVzdWx0TWVz c2FnZUxhYmVsID0gTCJTZXRJbWFnZSwgY29uZm9ybWFuY2UgY2hlY2twb2ludCAjNCI7DQo+ICsN Cj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gTlVMTDsNCj4gKyAgQnVmZmVySW1hZ2UgPSBOVUxMOw0K PiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiArICBJbWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VW ZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgIEFib3J0UmVhc29uID0gTlVMTDsNCj4gKyAgRnVuY3Rp b25UZXN0ZWQgPSAwOw0KPiArDQo+ICsgIC8vIFVzZSBhIHN1ZmZpY2llbnRseSBsYXJnZSBidWZm ZXIgdG8gb2J0YWluIEVGSV9TVUNDRVNTLA0KPiArICAvLyBzaW5jZSBzb21lIGltcGxlbWVudGF0 aW9uIGRvZXMgTk9UIGNvcnJlY3RseSByZXR1cm4NCj4gRUZJX0JVRkZFUl9UT09fU01BTEwuDQo+ ICsgIC8vIENoZWNrIGZvciBFRklfQlVGRkVSX1RPT19TTUFMTCBpbiBhbm90aGVyIGNvbmZvcm1h bmNlIHRlc3QuDQo+ICsNCj4gKyAgSW1hZ2VJbmZvU2l6ZSA9IChzaXplb2YgKEVGSV9GSVJNV0FS RV9JTUFHRV9ERVNDUklQVE9SKSkgKiAyMDsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQ b29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0KPiArICAg ICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZP SUQgKiopICZJbWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VS VElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0 aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4g KyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZUluZm8gKA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmRGVzY3JpcHRvclZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmRGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJlBhY2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfQlVGRkVSX1RPT19TTUFMTCkgew0KPiAr ICAgIGd0QlMtPkZyZWVQb29sIChJbWFnZUluZm8pOw0KPiArICAgIFN0YXR1cyA9IGd0QlMtPkFs bG9jYXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRh LA0KPiArICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAg ICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5 cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURh dGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBnb3Rv IEV4aXQ7DQo+ICsgICAgfQ0KPiArICAgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0 SW1hZ2VJbmZvICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdh cmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1h Z2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJ bmZvLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3JpcHRvclZl cnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9y Q291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9y U2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJz aW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNp b25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAg aWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVG SV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwi dGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIEJ1ZmZlckltYWdl SW5mbyA9IEltYWdlSW5mbzsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgIH0N Cj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArDQo+ICsgIGlmIChEZXNjcmlw dG9yU2l6ZSA9PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElP Tl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIipEZXNjcmlwdG9yU2l6ZSBp cyAwLiI7DQo+ICsgICAgZ290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NF U1MNCj4gKyAgfQ0KPiArICBpZiAoKERlc2NyaXB0b3JDb3VudCAqIERlc2NyaXB0b3JTaXplKSA+ IEltYWdlSW5mb1NpemUpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJU SU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKCgqRGVzY3JpcHRvckNv dW50KSAqICgqRGVzY3JpcHRvclNpemUpKSA+DQo+ICpJbWFnZUluZm9TaXplLiI7DQo+ICsgICAg Z290byBFeGl0OyAgLy8gTm90ZSB0aGUgU3RhdHVzID0gRUZJX1NVQ0NFU1MNCj4gKyAgfQ0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlv bg0KPiArICAvLw0KPiArDQo+ICsgIGZvciAoaSA9IDA7IGkgPCBEZXNjcmlwdG9yQ291bnQ7IGkr Kykgew0KPiArICAgIHAgPSAoRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikgKCgoVUlO VDggKikgSW1hZ2VJbmZvKSArDQo+IChpICogRGVzY3JpcHRvclNpemUpKTsNCj4gKw0KPiArICAg IGlmICgocC0+QXR0cmlidXRlc1N1cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5U SUNBVElPTl9SRVFVSVJFRCkgIT0NCj4gSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JF UVVJUkVEKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5B dHRyaWJ1dGVzU2V0dGluZyAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFV SVJFRCkgIT0NCj4gSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSB7DQo+ ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKHAtPlNpemUgPT0gMCkgew0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmICgocC0+QXR0cmlidXRlc1N1 cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpDQo+ICE9IElNQUdFX0FU VFJJQlVURV9JTUFHRV9VUERBVEFCTEUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0N Cj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lNQUdF X1VQREFUQUJMRSkgIT0NCj4gSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSkgew0KPiAr ICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW1hZ2VTaXplID0gcC0+U2l6 ZTsNCj4gKyAgICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIElt YWdlU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2UNCj4gKyAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsg ICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1 cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgICAgQnVmZmVySW1hZ2Ug PSBJbWFnZTsNCj4gKyAgICBGdW5jdGlvblRlc3RlZCsrOw0KPiArICAgIFN0YXR1cyA9IEZpcm13 YXJlTWFuYWdlbWVudC0+U2V0SW1hZ2UgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHAtPkltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEltYWdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn ZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAvLyBW ZW5kb3JDb2RlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByb2dyZXNz LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmQWJvcnRSZWFzb24NCj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBndEJTLT5GcmVl UG9vbCAoQnVmZmVySW1hZ2UpOw0KPiArICAgIEJ1ZmZlckltYWdlID0gTlVMTDsNCj4gKyAgICBJ bWFnZSA9IE5VTEw7DQo+ICsNCj4gKyAgICAvLw0KPiArICAgIC8vIFJlcG9ydCB0aGUgY2hlY2tw b2ludCByZXN1bHQNCj4gKyAgICAvLw0KPiArDQo+ICsgICAgaWYgKFN0YXR1cyAhPSBFRklfU0VD VVJJVFlfVklPTEFUSU9OKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNT RVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJmYWlsZWQgdG8g cmV0dXJuDQo+IEVGSV9TRUNVUklUWV9WSU9MQVRJT04uIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsN Cj4gKyAgICB9DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnVuY3Rpb25UZXN0ZWQgPT0gMCkgew0K PiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAg IFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IHNraXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3Qg YXBwbHkuIjsNCj4gKyAgfSBlbHNlIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1Rf QVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5 IHJldHVybmVkDQo+IEVGSV9TRUNVUklUWV9WSU9MQVRJT04iOw0KPiArICB9DQo+ICsNCj4gK0V4 aXQ6DQo+ICsgIFN0YW5kYXJkTGliLT5SZWNvcmRBc3NlcnRpb24gKA0KPiArICAgICAgICAgICAg ICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4g KyAgICAgICAgICAgICAgICAgVGVzdEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1l c3NhZ2VMYWJlbCwNCj4gKyAgICAgICAgICAgICAgICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0 YXR1cyAtICVyIiwNCj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsg ICAgICAgICAgICAgICAgIF9fRklMRV9fLA0KPiArICAgICAgICAgICAgICAgICAoVUlOVE4pX19M SU5FX18sDQo+ICsgICAgICAgICAgICAgICAgIFN0YXR1cw0KPiArICAgICAgICAgICAgICAgICAp Ow0KPiArDQo+ICsgIGlmIChQYWNrYWdlVmVyc2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0 QlMtPkZyZWVQb29sIChQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICB9DQo+ICsgIGlmIChCdWZm ZXJJbWFnZUluZm8gIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFn ZUluZm8pOw0KPiArICB9DQo+ICsgIGlmIChCdWZmZXJJbWFnZSAhPSBOVUxMKSB7DQo+ICsgICAg Z3RCUy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlKTsNCj4gKyAgfQ0KPiArICBpZiAoQWJvcnRSZWFz b24gIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChBYm9ydFJlYXNvbik7DQo+ICsg IH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ICoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrcG9pbnQ6IENoZWNrSW1hZ2UsIDEN Cj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4gKy8qKg0KPiArICBUaGlz IHJvdXRpbmU6DQo+ICsgICAgLSBDYWxscyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFtZXRlcnMs IGV4Y2VwdCBJbWFnZSA9IE5VTEwuDQo+ICsgICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVIuDQo+ICsqKi8NCj4gKw0KPiArRUZJX1NUQVRVUw0KPiAr QkJUZXN0Q2hlY2tJbWFnZUNvbmZvcm1hbmNlVGVzdENoZWNrcG9pbnQxICgNCj4gKyAgSU4gRUZJ X1NUQU5EQVJEX1RFU1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ ICsgIElOIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13 YXJlTWFuYWdlbWVudA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVEVTVF9BU1NFUlRJT04g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGU7DQo+ICsgIEVGSV9HVUlE ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEd1aWQ7DQo+ICsgIENI QVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3Nh Z2VMYWJlbA0KPiA7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKlJlc3VsdE1lc3NhZ2VEYXRhOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVT Q1JJUFRPUiAgICAgICAgICAgICAgICAgICpCdWZmZXJJbWFnZUluZm87DQo+ICsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXpl Ow0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpJ bWFnZUluZm87DQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRGVzY3JpcHRvclZlcnNpb247DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvckNvdW50Ow0KPiArICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJz aW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VVcGRhdGFibGU7DQo+ICsNCj4gKyAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ICsg IFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXpl Ow0KPiArDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAg ICAqcDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBGdW5jdGlvblRlc3RlZDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ ICsNCj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklf VEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1l bnRCQlRlc3RDb25mb3JtYW5jZUFzc2VydGlvbkd1aWQwMTE7DQo+ICsgIFJlc3VsdE1lc3NhZ2VM YWJlbCA9IEwiQ2hlY2tJbWFnZSwgY29uZm9ybWFuY2UgY2hlY2twb2ludCAjMSI7DQo+ICsNCj4g KyAgQnVmZmVySW1hZ2VJbmZvID0gTlVMTDsNCj4gKyAgSW1hZ2VJbmZvID0gTlVMTDsNCj4gKyAg SW1hZ2UgPSBOVUxMOw0KPiArICBQYWNrYWdlVmVyc2lvbk5hbWUgPSBOVUxMOw0KPiArICBGdW5j dGlvblRlc3RlZCA9IDA7DQo+ICsNCj4gKyAgLy8gVXNlIGEgc3VmZmljaWVudGx5IGxhcmdlIGJ1 ZmZlciB0byBvYnRhaW4gRUZJX1NVQ0NFU1MsDQo+ICsgIC8vIHNpbmNlIHNvbWUgaW1wbGVtZW50 YXRpb24gZG9lcyBOT1QgY29ycmVjdGx5IHJldHVybg0KPiBFRklfQlVGRkVSX1RPT19TTUFMTC4N Cj4gKyAgLy8gQ2hlY2sgZm9yIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGluIGFub3RoZXIgY29uZm9y bWFuY2UgdGVzdC4NCj4gKw0KPiArICBJbWFnZUluZm9TaXplID0gKHNpemVvZiAoRUZJX0ZJUk1X QVJFX0lNQUdFX0RFU0NSSVBUT1IpKSAqIDIwOw0KPiArICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0 ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsg ICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAo Vk9JRCAqKikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChF RklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNT RVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGlu aXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0K PiArICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmRGVzY3JpcHRvclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICApOw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEltYWdlSW5mbyk7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+ QWxsb2NhdGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0Rh dGEsDQo+ICsgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAg ICAgICAgICAgICAgKFZPSUQgKiopICZJbWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICAg ICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQXNzZXJ0aW9u VHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdl RGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIGdv dG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgICAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5H ZXRJbWFnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJt d2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJ bWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFn ZUluZm8sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9y VmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0 b3JDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0 b3JTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZl cnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVy c2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAg ICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0g RUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0g TCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgICAgQnVmZmVySW1h Z2VJbmZvID0gSW1hZ2VJbmZvOw0KPiArICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAg fQ0KPiArICBCdWZmZXJJbWFnZUluZm8gPSBJbWFnZUluZm87DQo+ICsNCj4gKyAgaWYgKERlc2Ny aXB0b3JTaXplID09IDApIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJU SU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKkRlc2NyaXB0b3JTaXpl IGlzIDAuIjsNCj4gKyAgICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklfU1VD Q0VTUw0KPiArICB9DQo+ICsgIGlmICgoRGVzY3JpcHRvckNvdW50ICogRGVzY3JpcHRvclNpemUp ID4gSW1hZ2VJbmZvU2l6ZSkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NF UlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCIoKCpEZXNjcmlwdG9y Q291bnQpICogKCpEZXNjcmlwdG9yU2l6ZSkpID4NCj4gKkltYWdlSW5mb1NpemUuIjsNCj4gKyAg ICBnb3RvIEV4aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhlIGZ1bmN0 aW9uDQo+ICsgIC8vDQo+ICsNCj4gKyAgZm9yIChpID0gMDsgaSA8IERlc2NyaXB0b3JDb3VudDsg aSsrKSB7DQo+ICsgICAgcCA9IChFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAqKSAoKChV SU5UOCAqKSBJbWFnZUluZm8pICsNCj4gKGkgKiBEZXNjcmlwdG9yU2l6ZSkpOw0KPiArDQo+ICsg ICAgaWYgKCgocC0+QXR0cmlidXRlc1N1cHBvcnRlZCAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRI RU5USUNBVElPTl9SRVFVSVJFRCkgPT0NCj4gKyAgICAgICAgICBJTUFHRV9BVFRSSUJVVEVfQVVU SEVOVElDQVRJT05fUkVRVUlSRUQpICYmDQo+ICsgICAgICAgICgocC0+QXR0cmlidXRlc1NldHRp bmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpID09DQo+ICsg ICAgICAgICAgSU1BR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSkgew0KPiAr ICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmIChwLT5TaXplID09IDApIHsNCj4g KyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTdXBw b3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKQ0KPiAhPSBJTUFHRV9BVFRS SUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7DQo+ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJQlVURV9JTUFHRV9V UERBVEFCTEUpICE9DQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpIHsNCj4gKyAg ICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEltYWdlU2l6ZSA9IHAtPlNpemU7 DQo+ICsgICAgSW1hZ2UgPSBOVUxMOw0KPiArICAgIEZ1bmN0aW9uVGVzdGVkKys7DQo+ICsgICAg U3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5DaGVja0ltYWdlICgNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5JbWFnZUluZGV4LA0KPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW1hZ2VTaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmSW1hZ2VVcGRhdGFibGUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJl c3VsdA0KPiArICAgIC8vDQo+ICsNCj4gKyAgICBpZiAoU3RhdHVzICE9IEVGSV9JTlZBTElEX1BB UkFNRVRFUikgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9G QUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybg0K PiBFRklfSU5WQUxJRF9QQVJBTUVURVIuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9 DQo+ICsgIH0NCj4gKw0KPiArICBpZiAoRnVuY3Rpb25UZXN0ZWQgPT0gMCkgew0KPiArICAgIEFz c2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1l c3NhZ2VEYXRhID0gTCJ0ZXN0IHNraXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3QgYXBwbHkuIjsN Cj4gKyAgfSBlbHNlIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9O X1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5IHJldHVybmVk DQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUi4iOw0KPiArICB9DQo+ICsNCj4gK0V4aXQ6DQo+ICsg IFN0YW5kYXJkTGliLT5SZWNvcmRBc3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFu ZGFyZExpYiwNCj4gKyAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAg ICAgICAgICAgVGVzdEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJl bCwNCj4gKyAgICAgICAgICAgICAgICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVy IiwNCj4gKyAgICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAg ICAgICAgIF9fRklMRV9fLA0KPiArICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ ICsgICAgICAgICAgICAgICAgIFN0YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ ICsgIGlmIChQYWNrYWdlVmVyc2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQ b29sIChQYWNrYWdlVmVyc2lvbk5hbWUpOw0KPiArICB9DQo+ICsgIGlmIChCdWZmZXJJbWFnZUlu Zm8gIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZUluZm8pOw0K PiArICB9DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0K PiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBDaGVja3BvaW50OiBDaGVja0ltYWdl LCAyDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICsvKioNCj4gKyAg VGhpcyByb3V0aW5lOg0KPiArICAgIC0gVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIGF1dGhlbnRpY2F0 aW9uLg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCB2YWxpZCBwYXJhbWV0ZXJzLCBleGNl cHQgSW1hZ2UgaGFzIGR1bW15DQo+ICsgICAgICBhdXRoZW50aWNhdGlvbiBkYXRhLg0KPiArICAg ICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTi4NCj4g KyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RDaGVja0ltYWdlQ29uZm9ybWFuY2VU ZXN0Q2hlY2twb2ludDIgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RP Q09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICkNCj4gK3sN Cj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4gKyAgQ0hBUjE2ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZURhdGE7 DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgKkJ1 ZmZlckltYWdlSW5mbzsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqQnVmZmVySW1hZ2U7DQo+ICsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplOw0KPiArICBFRklfRklSTVdB UkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpJbWFnZUluZm87DQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzY3JpcHRvclZl cnNpb247DQo+ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRGVzY3JpcHRvckNvdW50Ow0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIERlc2NyaXB0b3JTaXplOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uOw0KPiArICBDSEFSMTYg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQYWNrYWdlVmVyc2lvbk5h bWUNCj4gOw0KPiArDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgSW1hZ2VVcGRhdGFibGU7DQo+ICsNCj4gKyAgVk9JRCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ICsgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPiArDQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsNCj4gKyAgRUZJX0ZJ Uk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAqcDsNCj4gKyAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGdW5jdGlvblRlc3RlZDsN Cj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0g RUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFT U0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5j ZUFzc2VydGlvbkd1aWQwMTI7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9IEwiQ2hlY2tJbWFn ZSwgY29uZm9ybWFuY2UgY2hlY2twb2ludCAjMiI7DQo+ICsNCj4gKyAgQnVmZmVySW1hZ2VJbmZv ID0gTlVMTDsNCj4gKyAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZUluZm8gPSBOVUxM Ow0KPiArICBJbWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ ICsgIEZ1bmN0aW9uVGVzdGVkID0gMDsNCj4gKw0KPiArICAvLyBVc2UgYSBzdWZmaWNpZW50bHkg bGFyZ2UgYnVmZmVyIHRvIG9idGFpbiBFRklfU1VDQ0VTUywNCj4gKyAgLy8gc2luY2Ugc29tZSBp bXBsZW1lbnRhdGlvbiBkb2VzIE5PVCBjb3JyZWN0bHkgcmV0dXJuDQo+IEVGSV9CVUZGRVJfVE9P X1NNQUxMLg0KPiArICAvLyBDaGVjayBmb3IgRUZJX0JVRkZFUl9UT09fU01BTEwgaW4gYW5vdGhl ciBjb25mb3JtYW5jZSB0ZXN0Lg0KPiArDQo+ICsgIEltYWdlSW5mb1NpemUgPSAoc2l6ZW9mIChF RklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUikpICogMjA7DQo+ICsgIFN0YXR1cyA9IGd0QlMt PkFsbG9jYXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0 YSwNCj4gKyAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklf VEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0 IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAg fQ0KPiArDQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0SW1hZ2VJbmZvICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13YXJlTWFuYWdlbWVudCwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JWZXJzaW9uLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6ZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01B TEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoSW1hZ2VJbmZvKTsNCj4gKyAgICBTdGF0dXMg PSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNl cnZpY2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsg ICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBB c3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3Vs dE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiAr ICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFn ZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJkltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRl c2NyaXB0b3JWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm RGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm RGVzY3JpcHRvclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQ YWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBh Y2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICAgIEFzc2VydGlv blR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2Fn ZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBC dWZmZXJJbWFnZUluZm8gPSBJbWFnZUluZm87DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAg fQ0KPiArICB9DQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKw0KPiArICBp ZiAoRGVzY3JpcHRvclNpemUgPT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVT VF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCIqRGVzY3Jp cHRvclNpemUgaXMgMC4iOw0KPiArICAgIGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9 IEVGSV9TVUNDRVNTDQo+ICsgIH0NCj4gKyAgaWYgKChEZXNjcmlwdG9yQ291bnQgKiBEZXNjcmlw dG9yU2l6ZSkgPiBJbWFnZUluZm9TaXplKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9U RVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIigoKkRl c2NyaXB0b3JDb3VudCkgKiAoKkRlc2NyaXB0b3JTaXplKSkgPg0KPiAqSW1hZ2VJbmZvU2l6ZS4i Ow0KPiArICAgIGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9TVUNDRVNTDQo+ ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUgZGF0YSByZXR1cm5lZCBieSB0 aGUgZnVuY3Rpb24NCj4gKyAgLy8NCj4gKw0KPiArICBmb3IgKGkgPSAwOyBpIDwgRGVzY3JpcHRv ckNvdW50OyBpKyspIHsNCj4gKyAgICBwID0gKEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9S ICopICgoKFVJTlQ4ICopIEltYWdlSW5mbykgKw0KPiAoaSAqIERlc2NyaXB0b3JTaXplKSk7DQo+ ICsNCj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBJTUFHRV9BVFRSSUJV VEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICE9DQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5U SUNBVElPTl9SRVFVSVJFRCkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAg IGlmICgocC0+QXR0cmlidXRlc1NldHRpbmcgJg0KPiBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElD QVRJT05fUkVRVUlSRUQpICE9DQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFV SVJFRCkgew0KPiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmIChwLT5TaXpl ID09IDApIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKyAgICBpZiAoKHAtPkF0 dHJpYnV0ZXNTdXBwb3J0ZWQgJiBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKQ0KPiAh PSBJTUFHRV9BVFRSSUJVVEVfSU1BR0VfVVBEQVRBQkxFKSB7DQo+ICsgICAgICBjb250aW51ZTsN Cj4gKyAgICB9DQo+ICsgICAgaWYgKChwLT5BdHRyaWJ1dGVzU2V0dGluZyAmIElNQUdFX0FUVFJJ QlVURV9JTUFHRV9VUERBVEFCTEUpICE9DQo+IElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFC TEUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0NCj4gKw0KPiArICAgIEltYWdlU2l6 ZSA9IHAtPlNpemU7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+QWxsb2NhdGVQb29sICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAgICAgICAg ICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJklt YWdlDQo+ICsgICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGlmIChFRklfRVJST1IgKFN0 YXR1cykpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJ TEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXph dGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICAgIEJ1 ZmZlckltYWdlID0gSW1hZ2U7DQo+ICsgICAgRnVuY3Rpb25UZXN0ZWQrKzsNCj4gKyAgICBTdGF0 dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkNoZWNrSW1hZ2UgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHAtPkltYWdlSW5kZXgsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEltYWdlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZJbWFnZVVwZGF0YWJsZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZSk7DQo+ICsgICAgQnVmZmVySW1h Z2UgPSBOVUxMOw0KPiArICAgIEltYWdlID0gTlVMTDsNCj4gKw0KPiArICAgIC8vDQo+ICsgICAg Ly8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAgIC8vDQo+ICsNCj4gKyAgICBp ZiAoU3RhdHVzICE9IEVGSV9TRUNVUklUWV9WSU9MQVRJT04pIHsNCj4gKyAgICAgIEFzc2VydGlv blR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2Fn ZURhdGEgPSBMImZhaWxlZCB0byByZXR1cm4NCj4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTi4iOw0K PiArICAgICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGdW5j dGlvblRlc3RlZCA9PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VS VElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3Qgc2tpcHBlZCAt IHRlc3QgY2FzZSBkb2VzIG5vdCBhcHBseS4iOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEFzc2Vy dGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1lc3Nh Z2VEYXRhID0gTCJjb3JyZWN0bHkgcmV0dXJuZWQNCj4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiI7 DQo+ICsgIH0NCj4gKw0KPiArRXhpdDoNCj4gKyAgU3RhbmRhcmRMaWItPlJlY29yZEFzc2VydGlv biAoDQo+ICsgICAgICAgICAgICAgICAgIFN0YW5kYXJkTGliLA0KPiArICAgICAgICAgICAgICAg ICBBc3NlcnRpb25UeXBlLA0KPiArICAgICAgICAgICAgICAgICBUZXN0R3VpZCwNCj4gKyAgICAg ICAgICAgICAgICAgUmVzdWx0TWVzc2FnZUxhYmVsLA0KPiArICAgICAgICAgICAgICAgICBMIlJl c3VsdCAtICVzXG4lYTolZDogU3RhdHVzIC0gJXIiLA0KPiArICAgICAgICAgICAgICAgICBSZXN1 bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgX19GSUxFX18sDQo+ICsgICAgICAg ICAgICAgICAgIChVSU5UTilfX0xJTkVfXywNCj4gKyAgICAgICAgICAgICAgICAgU3RhdHVzDQo+ ICsgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAh PSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdlSW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+ RnJlZVBvb2wgKEJ1ZmZlckltYWdlSW5mbyk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdl ICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoQnVmZmVySW1hZ2UpOw0KPiArICB9 DQo+ICsNCj4gKyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBDaGVja3BvaW50OiBTZXRQYWNrYWdlSW5mbywg MQ0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArLyoqDQo+ICsgIFRo aXMgcm91dGluZToNCj4gKyAgICAtIEdldHMgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLg0KPiAr ICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCB2YWxpZCBwYXJhbWV0ZXJzLCBleGNlcHQNCj4gUGFj a2FnZVZlcnNpb25OYW1lIGlzIGxvbmdlcg0KPiArICAgICAgdGhhbiB0aGUgdmFsdWUgcmV0dXJu ZWQgaW4gUGFja2FnZVZlcnNpb25OYW1lTGVuLg0KPiArICAgICAgVGhlIGZ1bmN0aW9uIHNob3Vs ZCByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSLg0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFU VVMNCj4gK0JCVGVzdFNldFBhY2thZ2VJbmZvQ29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDEgKA0K PiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFu ZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAg ICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9URVNU X0FTU0VSVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZTsNCj4g KyAgRUZJX0dVSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0R3Vp ZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq UmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZURhdGE7DQo+ICsNCj4gKyAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsN Cj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFj a2FnZVZlcnNpb25OYW1lDQo+IDsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWVNDQo+IGF4TGVuOw0KPiArICBVSU5U NjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTdXBw b3J0ZWQNCj4gOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nOw0KPiArDQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKlRlc3ROYW1lOw0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3ROYW1lTGVuZ3RoOw0KPiArDQo+ ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaTsNCj4g Kw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRUZJ X1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VE Ow0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZUFz c2VydGlvbkd1aWQwMTM7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9IEwiU2V0UGFja2FnZUlu Zm8sIGZ1bmN0aW9uIGNoZWNrcG9pbnQgIzEiOw0KPiArDQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFt ZSA9IE5VTEw7DQo+ICsgIFRlc3ROYW1lID0gTlVMTDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBH ZXQgUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuDQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0g RmlybXdhcmVNYW5hZ2VtZW50LT5HZXRQYWNrYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb25OYW1lLA0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgJlBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiwNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzU3VwcG9ydGVkLA0KPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJkF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNT KSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWls dXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIFJlc3VsdE1lc3NhZ2VEYXRhID0g TCJ0ZXN0IHNraXBwZWQgLSB0ZXN0IGNhc2UgZG9lcyBub3QgYXBwbHkuIjsNCj4gKyAgaWYgKFBh Y2thZ2VWZXJzaW9uTmFtZU1heExlbiA9PSAwKSB7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9 DQo+ICsgIGlmICgoKEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJg0KPiBQQUNLQUdFX0FUVFJJQlVURV9B VVRIRU5USUNBVElPTl9SRVFVSVJFRCkgPT0NCj4gKyAgICAgICAgUEFDS0FHRV9BVFRSSUJVVEVf QVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICYmDQo+ICsgICAgICAoKEF0dHJpYnV0ZXNTZXR0aW5n ICYNCj4gUEFDS0FHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpID09DQo+ICsg ICAgICAgIFBBQ0tBR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSkgew0KPiAr ICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiArICBpZiAoKEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBQ QUNLQUdFX0FUVFJJQlVURV9WRVJTSU9OX1VQREFUQUJMRSkgIT0NCj4gKyAgICAgICBQQUNLQUdF X0FUVFJJQlVURV9WRVJTSU9OX1VQREFUQUJMRSkgew0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAg fQ0KPiArICBpZiAoKEF0dHJpYnV0ZXNTZXR0aW5nICYgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lP Tl9VUERBVEFCTEUpICE9DQo+ICsgICAgICAgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lPTl9VUERB VEFCTEUpIHsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAv LyBDaGVjayB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgZnVuY3Rpb24NCj4gKyAgLy8NCj4gKw0K PiArICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgUGFja2FnZVZl cnNpb25OYW1lID0gTlVMTDsNCj4gKyAgVGVzdE5hbWVMZW5ndGggPSBQYWNrYWdlVmVyc2lvbk5h bWVNYXhMZW4gKyAxOw0KPiArICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAg ICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAg IFRlc3ROYW1lTGVuZ3RoICogMiwgIC8vIFVuaWNvZGUNCj4gKyAgICAgICAgICAgICAgICAgIChW T0lEICoqKSAmVGVzdE5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJU SU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRp YWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgZm9y IChpID0gMDsgaSA8IChUZXN0TmFtZUxlbmd0aCAtIDEpOyBpKyspIHsNCj4gKyAgICBUZXN0TmFt ZVtpXSA9IEwnICc7DQo+ICsgIH0NCj4gKyAgVGVzdE5hbWVbaV0gPSBMJ1wwJzsNCj4gKyAgU3Rh dHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5TZXRQYWNrYWdlSW5mbyAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gSW1hZ2UNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDAsICAvLyBJbWFnZVNpemUNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE5VTEwsICAvLyBWZW5kb3JDb2RlDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAweDAxMDEwMTAxLCAvLyBEdW1teSBQYWNrYWdlVmVyc2lvbg0KPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdE5hbWUNCj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfSU5W QUxJRF9QQVJBTUVURVIpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJU SU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiY29ycmVjdGx5IHJldHVy bmVkDQo+IEVGSV9JTlZBTElEX1BBUkFNRVRFUi4iOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEFz c2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1l c3NhZ2VEYXRhID0gTCJmYWlsZWQgdG8gcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUi4iOw0K PiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3Vs dA0KPiArICAvLw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExpYi0+UmVjb3JkQXNzZXJ0 aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAg ICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRlc3RHdWlkLA0KPiArICAg ICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAgICAgICAgICAgICAgIEwi UmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAgICAgICAgICAgICAgIFJl c3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJTEVfXywNCj4gKyAgICAg ICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAgICAgICAgICBTdGF0dXMN Cj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFja2FnZVZlcnNpb25OYW1l ICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZlcnNpb25OYW1lKTsN Cj4gKyAgfQ0KPiArICBpZiAoVGVzdE5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQ b29sIChUZXN0TmFtZSk7DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ ICt9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNr cG9pbnQ6IFNldFBhY2thZ2VJbmZvLCAyDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioq Kg0KPiArDQo+ICsvKioNCj4gKyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gVGhlIGZ1bmN0aW9u IHJlcXVpcmVzIGF1dGhlbnRpY2F0aW9uLg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCB2 YWxpZCBwYXJhbWV0ZXJzLCBleGNlcHQgSW1hZ2UgaXMgTlVMTC4NCj4gKyAgICAgIFRoZSBmdW5j dGlvbiBzaG91bGQgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT04uDQo+ICsqKi8NCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArQkJUZXN0U2V0UGFja2FnZUluZm9Db25mb3JtYW5jZVRlc3RDaGVj a3BvaW50MiAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAg ICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9U T0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBF RklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4g KyAgRUZJX1RFU1RfQVNTRVJUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnRp b25UeXBlOw0KPiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFRlc3RHdWlkOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0YTsNCj4gKw0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2th Z2VWZXJzaW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArICBVSU5UMzIgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU0NCj4gYXhMZW47 DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0 cmlidXRlc1N1cHBvcnRlZA0KPiA7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ICsgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklf U1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7 DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNz ZXJ0aW9uR3VpZDAxNDsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJTZXRQYWNrYWdlSW5m bywgZnVuY3Rpb24gY2hlY2twb2ludCAjMiI7DQo+ICsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1l ID0gTlVMTDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBHZXQgUGFja2FnZVZlcnNpb25OYW1lTWF4 TGVuDQo+ICsgIC8vDQo+ICsNCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRQ YWNrYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2Fy ZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2Fn ZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZl cnNpb25OYW1lLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VW ZXJzaW9uTmFtZU1heExlbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZB dHRyaWJ1dGVzU3VwcG9ydGVkLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkF0dHJpYnV0ZXNTZXR0aW5nDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAp Ow0KPiArICBpZiAoU3RhdHVzICE9IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEg PSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0 Ow0KPiArICB9DQo+ICsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9Q QVNTRUQ7DQo+ICsgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IHNraXBwZWQgLSB0ZXN0IGNh c2UgZG9lcyBub3QgYXBwbHkuIjsNCj4gKyAgaWYgKChBdHRyaWJ1dGVzU3VwcG9ydGVkICYNCj4g UEFDS0FHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICE9DQo+IFBBQ0tBR0Vf QVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSB7DQo+ICsgICAgZ290byBFeGl0Ow0K PiArICB9DQo+ICsgIGlmICgoQXR0cmlidXRlc1NldHRpbmcgJg0KPiBQQUNLQUdFX0FUVFJJQlVU RV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgIT0NCj4gUEFDS0FHRV9BVFRSSUJVVEVfQVVUSEVO VElDQVRJT05fUkVRVUlSRUQpIHsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgaWYg KChBdHRyaWJ1dGVzU3VwcG9ydGVkICYgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lPTl9VUERBVEFC TEUpICE9DQo+ICsgICAgICAgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lPTl9VUERBVEFCTEUpIHsN Cj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgaWYgKChBdHRyaWJ1dGVzU2V0dGluZyAm IFBBQ0tBR0VfQVRUUklCVVRFX1ZFUlNJT05fVVBEQVRBQkxFKSAhPQ0KPiArICAgICAgIFBBQ0tB R0VfQVRUUklCVVRFX1ZFUlNJT05fVVBEQVRBQkxFKSB7DQo+ICsgICAgZ290byBFeGl0Ow0KPiAr ICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gQ2hlY2sgdGhlIGRhdGEgcmV0dXJuZWQgYnkgdGhl IGZ1bmN0aW9uDQo+ICsgIC8vDQo+ICsNCj4gKyAgSW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZVNp emUgPSA2NDsgIC8vIER1bW15DQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+U2V0 UGFja2FnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdh cmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2Us DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAgLy8gVmVuZG9yQ29kZQ0KPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklf U0VDVVJJVFlfVklPTEFUSU9OKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImNvcnJlY3RseSBy ZXR1cm5lZA0KPiBFRklfU0VDVVJJVFlfVklPTEFUSU9OLiI7DQo+ICsgIH0gZWxzZSB7DQo+ICsg ICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVz dWx0TWVzc2FnZURhdGEgPSBMImZhaWxlZCB0byByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElP Ti4iOw0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50 IHJlc3VsdA0KPiArICAvLw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExpYi0+UmVjb3Jk QXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAg ICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRlc3RHdWlkLA0K PiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAgICAgICAgICAg ICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAgICAgICAgICAg ICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJTEVfXywNCj4g KyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAgICAgICAgICBT dGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFja2FnZVZlcnNp b25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZlcnNpb25O YW1lKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gK30NCj4gKw0K PiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgQ2hlY2twb2ludDogU2V0 UGFja2FnZUluZm8sIDMNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4g Ky8qKg0KPiArICBUaGlzIHJvdXRpbmU6DQo+ICsgICAgLSBUaGUgZnVuY3Rpb24gcmVxdWlyZXMg YXV0aGVudGljYXRpb24uDQo+ICsgICAgLSBDYWxscyBmdW5jdGlvbiB3aXRoIHZhbGlkIHBhcmFt ZXRlcnMsIGV4Y2VwdCBJbWFnZVNpemUgaXMgMC4NCj4gKyAgICAgIFRoZSBmdW5jdGlvbiBzaG91 bGQgcmV0dXJuIEVGSV9TRUNVUklUWV9WSU9MQVRJT04uDQo+ICsqKi8NCj4gKw0KPiArRUZJX1NU QVRVUw0KPiArQkJUZXN0U2V0UGFja2FnZUluZm9Db25mb3JtYW5jZVRlc3RDaGVja3BvaW50MyAo DQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0 YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAg ICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVT ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1RF U1RfQVNTRVJUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlOw0K PiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RH dWlkOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0YTsNCj4gKw0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9u Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpQ YWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU0NCj4gYXhMZW47DQo+ICsgIFVJ TlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1N1 cHBvcnRlZA0KPiA7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqSW1hZ2U7DQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VTaXplOw0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsN Cj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIFRl c3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0aW9uR3Vp ZDAxNTsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJTZXRQYWNrYWdlSW5mbywgZnVuY3Rp b24gY2hlY2twb2ludCAjMyI7DQo+ICsNCj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsN Cj4gKyAgSW1hZ2UgPSBOVUxMOw0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEdldCBQYWNrYWdlVmVy c2lvbk5hbWVNYXhMZW4NCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFn ZW1lbnQtPkdldFBhY2thZ2VJbmZvICgNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZQYWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZQYWNrYWdlVmVyc2lvbk5hbWUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmUGFja2FnZVZlcnNpb25OYW1lTWF4TGVuLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJkF0dHJpYnV0ZXNTdXBwb3J0ZWQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmQXR0cmlidXRlc1NldHRpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICBB c3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRN ZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAg ICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1Rf QVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3Qgc2tpcHBl ZCAtIHRlc3QgY2FzZSBkb2VzIG5vdCBhcHBseS4iOw0KPiArICBpZiAoKEF0dHJpYnV0ZXNTdXBw b3J0ZWQgJg0KPiBQQUNLQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgIT0N Cj4gUEFDS0FHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpIHsNCj4gKyAgICBn b3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgaWYgKChBdHRyaWJ1dGVzU2V0dGluZyAmDQo+IFBBQ0tB R0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSAhPQ0KPiBQQUNLQUdFX0FUVFJJ QlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgew0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAg fQ0KPiArICBpZiAoKEF0dHJpYnV0ZXNTdXBwb3J0ZWQgJiBQQUNLQUdFX0FUVFJJQlVURV9WRVJT SU9OX1VQREFUQUJMRSkgIT0NCj4gKyAgICAgICBQQUNLQUdFX0FUVFJJQlVURV9WRVJTSU9OX1VQ REFUQUJMRSkgew0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiArICBpZiAoKEF0dHJpYnV0 ZXNTZXR0aW5nICYgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lPTl9VUERBVEFCTEUpICE9DQo+ICsg ICAgICAgUEFDS0FHRV9BVFRSSUJVVEVfVkVSU0lPTl9VUERBVEFCTEUpIHsNCj4gKyAgICBnb3Rv IEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUgZGF0YSByZXR1 cm5lZCBieSB0aGUgZnVuY3Rpb24NCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMgPSBndEJTLT5B bGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ ICsgICAgICAgICAgICAgICAgNjQsICAvLyBEdW1teQ0KPiArICAgICAgICAgICAgICAgIChWT0lE ICoqKSAmSW1hZ2UNCj4gKyAgICAgICAgICAgICAgICApOw0KPiArICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlM RUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlv biBmYWlsdXJlLiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsgIEltYWdlU2l6ZSA9 IDA7DQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+U2V0UGFja2FnZUluZm8gKA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2UsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMLCAgLy8gVmVuZG9yQ29kZQ0KPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFN0YXR1cyA9PSBFRklfU0VDVVJJVFlfVklPTEFU SU9OKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7 DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImNvcnJlY3RseSByZXR1cm5lZA0KPiBFRklf U0VDVVJJVFlfVklPTEFUSU9OLiI7DQo+ICsgIH0gZWxzZSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEg PSBMImZhaWxlZCB0byByZXR1cm4gRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTi4iOw0KPiArICB9DQo+ ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAv Lw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFuZGFyZExpYi0+UmVjb3JkQXNzZXJ0aW9uICgNCj4g KyAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAgICAgIEFzc2Vy dGlvblR5cGUsDQo+ICsgICAgICAgICAgICAgICAgIFRlc3RHdWlkLA0KPiArICAgICAgICAgICAg ICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ICsgICAgICAgICAgICAgICAgIEwiUmVzdWx0IC0g JXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3Nh Z2VEYXRhLA0KPiArICAgICAgICAgICAgICAgICBfX0ZJTEVfXywNCj4gKyAgICAgICAgICAgICAg ICAgKFVJTlROKV9fTElORV9fLA0KPiArICAgICAgICAgICAgICAgICBTdGF0dXMNCj4gKyAgICAg ICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoUGFja2FnZVZlcnNpb25OYW1lICE9IE5VTEwp IHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAoUGFja2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgfQ0K PiArICBpZiAoSW1hZ2UgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChJbWFnZSk7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8v DQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrcG9pbnQ6IFNldFBhY2th Z2VJbmZvLCA0DQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICsvKioN Cj4gKyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gVGhlIGZ1bmN0aW9uIHJlcXVpcmVzIGF1dGhl bnRpY2F0aW9uLg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCB2YWxpZCBwYXJhbWV0ZXJz LCBleGNlcHQgSW1hZ2UgaGFzIGEgZHVtbXkNCj4gKyAgICAgIGF1dGhlbnRpY2F0aW9uIGRhdGEu DQo+ICsgICAgICBUaGUgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBFRklfU0VDVVJJVFlfVklPTEFU SU9OLg0KPiArKiovDQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldFBhY2thZ2VJbmZv Q29uZm9ybWFuY2VUZXN0Q2hlY2twb2ludDQgKA0KPiArICBJTiBFRklfU1RBTkRBUkRfVEVTVF9M SUJSQVJZX1BST1RPQ09MICAgICAgICAgICpTdGFuZGFyZExpYiwNCj4gKyAgSU4gRUZJX0ZJUk1X QVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+ ICsgICkNCj4gK3sNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTdGF0dXM7DQo+ICsgIEVGSV9URVNUX0FTU0VSVElPTiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZTsNCj4gKyAgRUZJX0dVSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBUZXN0R3VpZDsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0TWVzc2FnZUxhYmVsDQo+IDsNCj4g KyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmVzdWx0 TWVzc2FnZURhdGE7DQo+ICsNCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZlcnNpb25OYW1lDQo+IDsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVy c2lvbk5hbWVNDQo+IGF4TGVuOw0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTdXBwb3J0ZWQNCj4gOw0KPiArICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZXNTZXR0aW5nOw0K PiArDQo+ICsgIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KkltYWdlOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEltYWdlU2l6ZTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsN Cj4gKyAgU3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVT VF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRC QlRlc3RDb25mb3JtYW5jZUFzc2VydGlvbkd1aWQwMTY7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJl bCA9IEwiU2V0UGFja2FnZUluZm8sIGZ1bmN0aW9uIGNoZWNrcG9pbnQgIzQiOw0KPiArDQo+ICsg IFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgIEltYWdlID0gTlVMTDsNCj4gKyAgSW1h Z2VTaXplID0gNjQ7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gR2V0IFBhY2thZ2VWZXJzaW9uTmFt ZU1heExlbg0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+ R2V0UGFja2FnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmly bXdhcmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBh Y2thZ2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2th Z2VWZXJzaW9uTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNr YWdlVmVyc2lvbk5hbWVNYXhMZW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmQXR0cmlidXRlc1N1cHBvcnRlZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICZBdHRyaWJ1dGVzU2V0dGluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgaWYgKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgew0KPiArICAgIEFzc2VydGlv blR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VE YXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgIGdvdG8g RXhpdDsNCj4gKyAgfQ0KPiArDQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJ T05fUEFTU0VEOw0KPiArICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBza2lwcGVkIC0gdGVz dCBjYXNlIGRvZXMgbm90IGFwcGx5LiI7DQo+ICsgIGlmICgoQXR0cmlidXRlc1N1cHBvcnRlZCAm DQo+IFBBQ0tBR0VfQVRUUklCVVRFX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSAhPQ0KPiBQQUNL QUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgew0KPiArICAgIGdvdG8gRXhp dDsNCj4gKyAgfQ0KPiArICBpZiAoKEF0dHJpYnV0ZXNTZXR0aW5nICYNCj4gUEFDS0FHRV9BVFRS SUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpICE9DQo+IFBBQ0tBR0VfQVRUUklCVVRFX0FV VEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSB7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsg IGlmICgoQXR0cmlidXRlc1N1cHBvcnRlZCAmIFBBQ0tBR0VfQVRUUklCVVRFX1ZFUlNJT05fVVBE QVRBQkxFKSAhPQ0KPiArICAgICAgIFBBQ0tBR0VfQVRUUklCVVRFX1ZFUlNJT05fVVBEQVRBQkxF KSB7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsgIGlmICgoQXR0cmlidXRlc1NldHRp bmcgJiBQQUNLQUdFX0FUVFJJQlVURV9WRVJTSU9OX1VQREFUQUJMRSkgIT0NCj4gKyAgICAgICBQ QUNLQUdFX0FUVFJJQlVURV9WRVJTSU9OX1VQREFUQUJMRSkgew0KPiArICAgIGdvdG8gRXhpdDsN Cj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5 IHRoZSBmdW5jdGlvbg0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IGd0QlMtPkFsbG9jYXRl UG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAg ICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAgKFZPSUQgKiopICZJbWFn ZQ0KPiArICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsN Cj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAg ICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUu IjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKyAgU3RhdHVzID0gRmlybXdhcmVNYW5h Z2VtZW50LT5TZXRQYWNrYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBJbWFnZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEltYWdlU2l6 ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICAvLyBWZW5kb3JD b2RlDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbiwN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZQ0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBpZiAoU3Rh dHVzID09IEVGSV9TRUNVUklUWV9WSU9MQVRJT04pIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0g RUZJX1RFU1RfQVNTRVJUSU9OX1BBU1NFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwi Y29ycmVjdGx5IHJldHVybmVkDQo+IEVGSV9TRUNVUklUWV9WSU9MQVRJT04uIjsNCj4gKyAgfSBl bHNlIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsN Cj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybiBFRklfU0VDVVJJ VFlfVklPTEFUSU9OLiI7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBSZXBvcnQgdGhl IGNoZWNrcG9pbnQgcmVzdWx0DQo+ICsgIC8vDQo+ICsNCj4gK0V4aXQ6DQo+ICsgIFN0YW5kYXJk TGliLT5SZWNvcmRBc3NlcnRpb24gKA0KPiArICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwN Cj4gKyAgICAgICAgICAgICAgICAgQXNzZXJ0aW9uVHlwZSwNCj4gKyAgICAgICAgICAgICAgICAg VGVzdEd1aWQsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VMYWJlbCwNCj4gKyAg ICAgICAgICAgICAgICAgTCJSZXN1bHQgLSAlc1xuJWE6JWQ6IFN0YXR1cyAtICVyIiwNCj4gKyAg ICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZURhdGEsDQo+ICsgICAgICAgICAgICAgICAgIF9f RklMRV9fLA0KPiArICAgICAgICAgICAgICAgICAoVUlOVE4pX19MSU5FX18sDQo+ICsgICAgICAg ICAgICAgICAgIFN0YXR1cw0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsgIGlmIChQ YWNrYWdlVmVyc2lvbk5hbWUgIT0gTlVMTCkgew0KPiArICAgIGd0QlMtPkZyZWVQb29sIChQYWNr YWdlVmVyc2lvbk5hbWUpOw0KPiArICB9DQo+ICsgIGlmIChJbWFnZSAhPSBOVUxMKSB7DQo+ICsg ICAgZ3RCUy0+RnJlZVBvb2wgKEltYWdlKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklf U1VDQ0VTUzsNCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvdWVmaS0NCj4gc2N0L1NjdFBrZy9U ZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0 DQo+IC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbi5jIGIvdWVmaS0NCj4gc2N0L1Nj dFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tC b3hUZXN0DQo+IC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbi5jDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwLi45OWE3NGFhNQ0KPiAtLS0gL2Rldi9udWxs DQo+ICsrKyBiL3VlZmktDQo+IHNjdC9TY3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wv RmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdA0KPiAvRmlybXdhcmVNYW5hZ2VtZW50QkJU ZXN0RnVuY3Rpb24uYw0KPiBAQCAtMCwwICsxLDg5MSBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4g KyAgQ29weXJpZ2h0IDIwMDYgLSAyMDE2IFVuaWZpZWQgRUZJLCBJbmMuPEJSPg0KPiArICBDb3B5 cmlnaHQgKGMpIDIwMTAgLSAyMDE2LCBEZWxsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+ DQo+ICsgIENvcHlyaWdodCAoYykgMjAxOSxNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuPEJSPg0K PiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFy ZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mDQo+IHRoZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRp c3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4gbWF5IGJlIGZvdW5k IGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHAN Cj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VO U0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJF UFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4N Cj4gKw0KPiArKiovDQo+ICsvKisrDQo+ICsNCj4gK01vZHVsZSBOYW1lOg0KPiArICAgIEZpcm13 YXJlTWFuYWdlbWVudEJCVGVzdEZ1bmN0aW9uLmMNCj4gKw0KPiArQWJzdHJhY3Q6DQo+ICsgICAg RmlybXdhcmUgTWFuYWdlbWVudCBQcm90b2NvbCdzIGZ1bmN0aW9uIHRlc3RzLg0KPiArDQo+ICst LSovDQo+ICsNCj4gKyNkZWZpbmUgREVCVUdfQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAwDQo+ICsjZGVmaW5lIERFQlVHX0dFVF9JTUFHRV9JTkZPICAgICAgICAgICAgICAgICAg ICAgMQ0KPiArI2RlZmluZSBERUJVR19HRVRfSU1BR0UgICAgICAgICAgICAgICAgICAgICAgICAg IDANCj4gKyNkZWZpbmUgREVCVUdfR0VUX1BBQ0tBR0VfSU5GTyAgICAgICAgICAgICAgICAgICAx DQo+ICsNCj4gKw0KPiArI2luY2x1ZGUgIlNjdExpYi5oIg0KPiArI2luY2x1ZGUgIkZpcm13YXJl TWFuYWdlbWVudEJCVGVzdE1haW4uaCINCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoq KioqKioNCj4gKy8vICAgQ2hlY2sgUG9pbnRzDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioq KioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJbWFnZUluZm9GdW5jdGlvblRl c3RDaGVja3BvaW50MSAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9D T0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVO VF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0K PiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1hZ2VGdW5jdGlvblRlc3RDaGVja3BvaW50MSAo DQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0 YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAg ICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0K PiArQkJUZXN0R2V0UGFja2FnZUluZm9GdW5jdGlvblRlc3RDaGVja3BvaW50MSAoDQo+ICsgIElO IEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGli LA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpG aXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKTsNCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ ICoqKioqKioNCj4gKy8vICAgVGVzdCBDYXNlcw0KPiArLy8NCj4gKy8vDQo+ICsvLw0KPiAqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioNCj4gKioqKioqKg0KPiArDQoNClRoZSBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCB3 aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBiZWZvcmUgdXBzdHJlYW0uDQo+ICsvKg0KPiArRUZJX1NU QVRVUw0KPiArQkJUZXN0VW5pdFRlc3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAg ICAgICAgICAgICAgICAgICAgICAgICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9U RVNUX0xFVkVMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdExldmVsLA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5k bGUNCj4gKyAgKQ0KPiArew0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsqLw0K DQoNCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgVGVzdCBD YXNlOiBHZXRJbWFnZUluZm8NCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdEdldEltYWdlSW5mb0Z1bmN0aW9uVGVzdCAoDQo+ICsg IElOIEVGSV9CQl9URVNUX1BST1RPQ09MICAgICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQo+ ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVu dEludGVyZmFjZSwNCj4gKyAgSU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBUZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3VwcG9ydEhhbmRsZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFO REFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgICAgKlN0YW5kYXJkTGliOw0KPiAr ICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0wgICAgICAgICAgICAgICAqRmly bXdhcmVNYW5hZ2VtZW50DQo+IDsNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8v DQo+ICsNCj4gKyAgRmlybXdhcmVNYW5hZ2VtZW50ID0NCj4gKEVGSV9GSVJNV0FSRV9NQU5BR0VN RU5UX1BST1RPQ09MKilDbGllbnRJbnRlcmZhY2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+ SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUsDQo+ ICsgICAgICAgICAgICAgICAgICAgJmdFZmlTdGFuZGFyZFRlc3RMaWJyYXJ5R3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgICAoVk9JRCAqKikgJlN0YW5kYXJkTGliDQo+ICsgICAgICAgICAgICAg ICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJPUihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0 YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIENhbGwgY2hlY2sgcG9pbnQocykN Cj4gKyAgLy8NCj4gKw0KPiArICBCQlRlc3RHZXRJbWFnZUluZm9GdW5jdGlvblRlc3RDaGVja3Bv aW50MSAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFuYWdlbWVudCk7DQo+ICsNCj4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioq KioqKg0KPiArLy8gVGVzdCBDYXNlOiBHZXRJbWFnZQ0KPiArLy8NCj4gKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ ICoqKioqKioNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0SW1hZ2VGdW5jdGlvblRl c3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAgICAgICAgICAgICAgICAgICAgICAg ICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9URVNUX0xFVkVMICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgVGVzdExldmVsLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUNCj4gKyAgKQ0KPiArew0KPiAr ICBFRklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX1BST1RPQ09MICAgICAgICAgICAgICpTdGFuZGFy ZExpYjsNCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ICsgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAg ICAgICAgKkZpcm13YXJlTWFuYWdlbWVudA0KPiA7DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gSW5p dA0KPiArICAvLw0KPiArDQo+ICsgIEZpcm13YXJlTWFuYWdlbWVudCA9DQo+IChFRklfRklSTVdB UkVfTUFOQUdFTUVOVF9QUk9UT0NPTCopQ2xpZW50SW50ZXJmYWNlOw0KPiArDQo+ICsgIFN0YXR1 cyA9IGd0QlMtPkhhbmRsZVByb3RvY29sICgNCj4gKyAgICAgICAgICAgICAgICAgICBTdXBwb3J0 SGFuZGxlLA0KPiArICAgICAgICAgICAgICAgICAgICZnRWZpU3RhbmRhcmRUZXN0TGlicmFyeUd1 aWQsDQo+ICsgICAgICAgICAgICAgICAgICAgKFZPSUQgKiopICZTdGFuZGFyZExpYg0KPiArICAg ICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJST1IoU3RhdHVzKSkgew0KPiArICAg IHJldHVybiBTdGF0dXM7DQo+ICsgIH0NCj4gKw0KPiArICAvLw0KPiArICAvLyBDYWxsIGNoZWNr IHBvaW50KHMpDQo+ICsgIC8vDQo+ICsNCj4gKyAgQkJUZXN0R2V0SW1hZ2VGdW5jdGlvblRlc3RD aGVja3BvaW50MSAoU3RhbmRhcmRMaWIsDQo+IEZpcm13YXJlTWFuYWdlbWVudCk7DQo+ICsNCj4g KyAgcmV0dXJuIEVGSV9TVUNDRVNTOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cj4gKioqKioqKg0KPiArLy8gICBUZXN0IENhc2U6IEdldFBhY2thZ2VJbmZvDQo+ICsvLw0KPiAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRQ YWNrYWdlSW5mb0Z1bmN0aW9uVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BST1RPQ09MICAg ICAgICAgICAgICAgICAgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4gKyAgSU4gRUZJX1RF U1RfTEVWRUwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUZXN0TGV2ZWwsDQo+ICsgIElO IEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3VwcG9ydEhhbmRs ZQ0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wg ICAgICAgICAgICAgKlN0YW5kYXJkTGliOw0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfUFJPVE9DT0wgICAgICAgICAgICAgICAqRmlybXdhcmVNYW5hZ2VtZW50DQo+IDsNCj4gKw0K PiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAgRmlybXdhcmVNYW5hZ2Vt ZW50ID0NCj4gKEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MKilDbGllbnRJbnRlcmZh Y2U7DQo+ICsNCj4gKyAgU3RhdHVzID0gZ3RCUy0+SGFuZGxlUHJvdG9jb2wgKA0KPiArICAgICAg ICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUsDQo+ICsgICAgICAgICAgICAgICAgICAgJmdFZmlT dGFuZGFyZFRlc3RMaWJyYXJ5R3VpZCwNCj4gKyAgICAgICAgICAgICAgICAgICAoVk9JRCAqKikg JlN0YW5kYXJkTGliDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYgKEVGSV9FUlJP UihTdGF0dXMpKSB7DQo+ICsgICAgcmV0dXJuIFN0YXR1czsNCj4gKyAgfQ0KPiArDQo+ICsgIC8v DQo+ICsgIC8vIENhbGwgY2hlY2sgcG9pbnQocykNCj4gKyAgLy8NCj4gKw0KPiArICBCQlRlc3RH ZXRQYWNrYWdlSW5mb0Z1bmN0aW9uVGVzdENoZWNrcG9pbnQxIChTdGFuZGFyZExpYiwNCj4gRmly bXdhcmVNYW5hZ2VtZW50KTsNCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrIFBvaW50 cw0KPiArLy8NCj4gKy8vDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBDaGVja3BvaW50OiBHZXRJ bWFnZUluZm8sIDENCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4gKy8q Kg0KPiArICBUaGlzIHJvdXRpbmU6DQo+ICsgICAgLSBDYWxscyBmdW5jdGlvbiB3aXRoIGFsbCB2 YWxpZCBwYXJhbWV0ZXJzLg0KPiArICAgICAgVGhlIGZ1bmN0aW9uIHNob3VsZCByZXR1cm4gRUZJ X1NVQ0NFU1MuDQo+ICsgICAgLSBDaGVja3MgRGVzY3JpcHRvclNpemUgaXMgMC4NCj4gKyAgICAt IENoZWNrcyAoRGVzY3JpcHRvckNvdW50ICogRGVzY3JpcHRvclNpemUpIGlzIDw9IEltYWdlSW5m b1NpemUuDQo+ICsgICAgLSBDaGVja3MgRGVzY3JpcHRvclZlcnNpb24gaXMgPT0gMS4NCj4gKyAg ICAtIENoZWNrcyBJbWFnZUluZGV4IGlzIGJldHdlZW4gMSBhbmQgRGVzY3JpcHRvckNvdW50Lg0K PiArICAgIC0gQ2hlY2tzIEF0dHJpYnV0ZXNTdXBwb3J0ZWQgaGFzIG5vIGJpdHMgc2V0IGJleW9u ZCBiaXQzLg0KPiArICAgIC0gQ2hlY2tzIEF0dHJpYnR1ZXNTZXR0aW5nIGhhcyBubyBiaXRzIHNl dCBiZXlvbmQgYml0My4NCj4gKyAgICAtIENoZWNrcyBDb21wYXRpYmlsaXRpZXMgYml0MSB0aHJ1 IGJpdDE1IGFyZSAwcy4NCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJ bWFnZUluZm9GdW5jdGlvblRlc3RDaGVja3BvaW50MSAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9U RVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAgKlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklf RklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAgICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1l bnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJX1RFU1RfQVNTRVJUSU9OICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBlOw0KPiArICBFRklfR1VJRCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRlc3RHdWlkOw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4g Ow0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpS ZXN1bHRNZXNzYWdlRGF0YTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAg ICAgICAgICAgICAgICAqQnVmZmVySW1hZ2VJbmZvOw0KPiArDQo+ICsgIFVJTlROICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZTsNCj4gKyAgRUZJ X0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAqSW1hZ2VJbmZvOw0K PiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc2Ny aXB0b3JWZXJzaW9uOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIERlc2NyaXB0b3JDb3VudDsNCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCj4gKyAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbjsNCj4gKyAg Q0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUGFja2FnZVZl cnNpb25OYW1lDQo+IDsNCj4gKw0KPiArICBDSEFSMTYqICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEF0dHJpYnV0ZVs0XTsNCj4gKw0KPiArICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGk7DQo+ICsgIEVGSV9GSVJNV0FSRV9JTUFH RV9ERVNDUklQVE9SICAgICAgICAgICAgICAgICAgKnA7DQo+ICsNCj4gKyNpZiAoREVCVUdfQUxM IHx8IERFQlVHX0dFVF9JTUFHRV9JTkZPKQ0KPiArDQo+ICsgIENIQVIxNiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJpdEZpZWxkOw0KPiArICBDSEFSMTYgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpCaXRTZXR0aW5nOw0KPiArDQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgajsNCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrOw0KPiArDQo+ ICsjZW5kaWYNCj4gKw0KPiArICAvLw0KPiArICAvLyBJbml0DQo+ICsgIC8vDQo+ICsNCj4gKyAg U3RhdHVzID0gRUZJX1NVQ0NFU1M7DQo+ICsgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NF UlRJT05fUEFTU0VEOw0KPiArICBUZXN0R3VpZCA9IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RG dW5jdGlvbkFzc2VydGlvbkd1aWQwMDE7DQo+ICsgIFJlc3VsdE1lc3NhZ2VMYWJlbCA9IEwiR2V0 SW1hZ2VJbmZvLCBmdW5jdGlvbiBjaGVja3BvaW50ICMxIjsNCj4gKw0KPiArICBCdWZmZXJJbWFn ZUluZm8gPSBOVUxMOw0KPiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiArICBQYWNrYWdlVmVyc2lv bk5hbWUgPSBOVUxMOw0KPiArDQo+ICsgIEF0dHJpYnV0ZVswXSA9IEwiSW1hZ2UgVXBkYXRhYmxl IjsNCj4gKyAgQXR0cmlidXRlWzFdID0gTCJSZXNldCBSZXF1aXJlZCI7DQo+ICsgIEF0dHJpYnV0 ZVsyXSA9IEwiQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOw0KPiArICBBdHRyaWJ1dGVbM10gPSBM IkluIFVzZSI7DQo+ICsNCj4gKyAgLy8gVXNlIGEgc3VmZmljaWVudGx5IGxhcmdlIGJ1ZmZlciB0 byBvYnRhaW4gRUZJX1NVQ0NFU1MsDQo+ICsgIC8vIHNpbmNlIHNvbWUgaW1wbGVtZW50YXRpb24g ZG9lcyBOT1QgY29ycmVjdGx5IHJldHVybg0KPiBFRklfQlVGRkVSX1RPT19TTUFMTC4NCj4gKyAg Ly8gQ2hlY2sgZm9yIEVGSV9CVUZGRVJfVE9PX1NNQUxMIGluIGFub3RoZXIgY29uZm9ybWFuY2Ug dGVzdC4NCj4gKw0KPiArICBJbWFnZUluZm9TaXplID0gKHNpemVvZiAoRUZJX0ZJUk1XQVJFX0lN QUdFX0RFU0NSSVBUT1IpKSAqIDIwOw0KPiArICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wg KA0KPiArICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ICsgICAgICAg ICAgICAgICAgICAgSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAoVk9JRCAq KikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAgICAgICAgICk7DQo+ICsgIGlmIChFRklfRVJS T1IgKFN0YXR1cykpIHsNCj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9O X0ZBSUxFRDsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxp emF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiArICBT dGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1hbmFnZW1lbnQsDQo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAmSW1hZ2VJbmZvU2l6ZSwNCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEltYWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZEZXNjcmlwdG9yQ291bnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmRGVzY3JpcHRvclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAmUGFja2FnZVZlcnNpb25OYW1lDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICApOw0KPiArICBpZiAoU3RhdHVzID09IEVGSV9CVUZGRVJfVE9PX1NNQUxMKSB7DQo+ICsgICAg Z3RCUy0+RnJlZVBvb2wgKEltYWdlSW5mbyk7DQo+ICsgICAgU3RhdHVzID0gZ3RCUy0+QWxsb2Nh dGVQb29sICgNCj4gKyAgICAgICAgICAgICAgICAgICAgIEVmaUJvb3RTZXJ2aWNlc0RhdGEsDQo+ ICsgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopICZJbWFnZUluZm8NCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9 IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9 IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhp dDsNCj4gKyAgICB9DQo+ICsgICAgU3RhdHVzID0gRmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFn ZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaXJtd2FyZU1h bmFnZW1lbnQsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUlu Zm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZUluZm8s DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yVmVyc2lv biwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3Vu dCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JTaXpl LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmUGFja2FnZVZlcnNpb24s DQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5h bWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgfQ0KPiAr DQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBmdW5jdGlv bg0KPiArICAvLw0KPiArDQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKw0K PiArICBpZiAoU3RhdHVzID09IEVGSV9TVUNDRVNTKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9 IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBM ImNvcnJlY3RseSByZXR1cm5lZCBFRklfU1VDQ0VTUy4iOw0KPiArICB9IGVsc2Ugew0KPiArICAg IEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3Vs dE1lc3NhZ2VEYXRhID0gTCJmYWlsZWQgdG8gcmV0dXJuIEVGSV9TVUNDRVNTLiI7DQo+ICsgICAg Z290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKERlc2NyaXB0b3JTaXplID09IDApIHsN Cj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAg ICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKkRlc2NyaXB0b3JTaXplIGlzIDAuIjsNCj4gKyAgICBn b3RvIEV4aXQ7ICAvLyBOb3RlIHRoZSBTdGF0dXMgPSBFRklfU1VDQ0VTUw0KPiArICB9DQo+ICsN Cj4gKyAgaWYgKChEZXNjcmlwdG9yQ291bnQgKiBEZXNjcmlwdG9yU2l6ZSkgPiBJbWFnZUluZm9T aXplKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7 DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIigoKkRlc2NyaXB0b3JDb3VudCkgKiAoKkRl c2NyaXB0b3JTaXplKSkgPg0KPiAqSW1hZ2VJbmZvU2l6ZS4iOw0KPiArICAgIGdvdG8gRXhpdDsg IC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9TVUNDRVNTDQo+ICsgIH0NCj4gKw0KPiArICBpZiAo RGVzY3JpcHRvclZlcnNpb24gIT0gMSkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVT VF9BU1NFUlRJT05fV0FSTklORzsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiKkRlc2Ny aXB0b3JWZXJzaW9uICE9IDEuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiAr ICBmb3IgKGkgPSAwOyBpIDwgRGVzY3JpcHRvckNvdW50OyBpKyspIHsNCj4gKyAgICBwID0gKEVG SV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICopICgoKFVJTlQ4ICopIEltYWdlSW5mbykgKw0K PiAoaSAqIERlc2NyaXB0b3JTaXplKSk7DQo+ICsNCj4gKyAgICBpZiAocC0+SW1hZ2VJbmRleCA+ IERlc2NyaXB0b3JDb3VudCkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9XQVJOSU5HOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIkltYWdlSW5k ZXggaXMgYmV5b25kIERlc2NyaXB0b3JDb3VudC4iOw0KPiArICAgICAgZ290byBFeGl0Ow0KPiAr ICAgIH0NCj4gKw0KPiArICAgIGlmICgocC0+QXR0cmlidXRlc1N1cHBvcnRlZCAmIDB4RkZGRkZG RkZGRkZGRkZGMCkgIT0gMCkgew0KPiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9XQVJOSU5HOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIkF0dHJpYnV0 ZXNTdXBwb3J0ZWQgaGFzIGJpdChzKSBzZXQNCj4gYmV5b25kIGJpdDMuIjsNCj4gKyAgICAgIGdv dG8gRXhpdDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTZXR0aW5n ICYgMHhGRkZGRkZGRkZGRkZGRkYwKSAhPSAwKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0g RUZJX1RFU1RfQVNTRVJUSU9OX1dBUk5JTkc7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9 IEwiQXR0cmlidXRlc1NldHRpbmcgaGFzIGJpdChzKSBzZXQgYmV5b25kDQo+IGJpdDMuIjsNCj4g KyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsNCj4gKyAgICBpZiAoKHAtPkNvbXBhdGli aWxpdGllcyAmIDB4MDAwMDAwMDAwMDAwRkZGRSkgIT0wKSB7DQo+ICsgICAgICBBc3NlcnRpb25U eXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1dBUk5JTkc7DQo+ICsgICAgICBSZXN1bHRNZXNzYWdl RGF0YSA9IEwiQ29tcGF0aWJpbGl0aWVzIGhhdmUgYml0KHMpIHNldCBiZXR3ZWVuDQo+IGJpdDEg YW5kIGJpdDE1LiI7DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiArICB9DQo+ICsN Cj4gKyNpZiAoREVCVUdfQUxMIHx8IERFQlVHX0dFVF9JTUFHRV9JTkZPKQ0KPiArDQo+ICsgIFN0 YW5kYXJkTGliLT5SZWNvcmRNZXNzYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRM aWIsDQo+ICsgICAgICAgICAgICAgICAgIEVGSV9WRVJCT1NFX0xFVkVMX1FVSUVULA0KPiArICAg ICAgICAgICAgICAgICBMIkZpcm13YXJlIEltYWdlIEluZm8gSGVhZGVyOiBcbiINCj4gKyAgICAg ICAgICAgICAgICAgTCIgIC0gKkltYWdlSW5mb1NpemUgPSAleFxuIg0KPiArICAgICAgICAgICAg ICAgICBMIiAgLSAqRGVzY3JpcHRvclZlcnNpb24gPSAleFxuIg0KPiArICAgICAgICAgICAgICAg ICBMIiAgLSAqRGVzY3JpcHRvckNvdW50ID0gJXhcbiINCj4gKyAgICAgICAgICAgICAgICAgTCIg IC0gKkRlc2NyaXB0b3JTemllID0gJXhcbiINCj4gKyAgICAgICAgICAgICAgICAgTCIgIC0gKlBh Y2thZ2VWZXJzaW9uID0gJTA4eFxuIg0KPiArICAgICAgICAgICAgICAgICBMIiAgLSAqKlBhY2th Z2VWZXJzaW9uTmFtZSA9ICVzXG4iLA0KPiArICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXpl LA0KPiArICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yVmVyc2lvbiwNCj4gKyAgICAgICAgICAg ICAgICAgRGVzY3JpcHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6 ZSwNCj4gKyAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb24sDQo+ICsgICAgICAgICAgICAg ICAgIFBhY2thZ2VWZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICApOw0KPiArDQo+ICsg IGZvciAoaSA9IDA7IGkgPCBEZXNjcmlwdG9yQ291bnQ7IGkrKykgew0KPiArICAgIHAgPSAoRUZJ X0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgKikgKCgoVUlOVDggKikgSW1hZ2VJbmZvKSArDQo+ IChpICogRGVzY3JpcHRvclNpemUpKTsNCj4gKyAgICBTdGFuZGFyZExpYi0+UmVjb3JkTWVzc2Fn ZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAg ICAgICAgRUZJX1ZFUkJPU0VfTEVWRUxfUVVJRVQsDQo+ICsgICAgICAgICAgICAgICAgICAgTCJE ZXNjcmlwdG9yIEluZGV4ID0gJXg6XG4iDQo+ICsgICAgICAgICAgICAgICAgICAgTCIgIC0gSW1h Z2VUeXBlSWQgPSAlMDh4LSUwNHgtJTA0eC0NCj4gJTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAy eCUwMngiLA0KPiArICAgICAgICAgICAgICAgICAgIHAtPkltYWdlSW5kZXgsDQo+ICsgICAgICAg ICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTEsDQo+ICsgICAgICAgICAgICAgICAgICAg cC0+SW1hZ2VUeXBlSWQuRGF0YTIsDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBl SWQuRGF0YTMsDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRbMF0s DQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRbMV0sDQo+ICsgICAg ICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRbMl0sDQo+ICsgICAgICAgICAgICAg ICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRbM10sDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+ SW1hZ2VUeXBlSWQuRGF0YTRbNF0sDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBl SWQuRGF0YTRbNV0sDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRb Nl0sDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VUeXBlSWQuRGF0YTRbN10NCj4gKyAg ICAgICAgICAgICAgICAgICApOw0KPiArICAgIFN0YW5kYXJkTGliLT5SZWNvcmRNZXNzYWdlICgN Cj4gKyAgICAgICAgICAgICAgICAgICBTdGFuZGFyZExpYiwNCj4gKyAgICAgICAgICAgICAgICAg ICBFRklfVkVSQk9TRV9MRVZFTF9RVUlFVCwNCj4gKyAgICAgICAgICAgICAgICAgICBMIiAgLSBJ bWFnZUlkID0gJTAxNlhcbiINCj4gKyAgICAgICAgICAgICAgICAgICBMIiAgLSAqSW1hZ2VJZE5h bWUgPSAlc1xuIg0KPiArICAgICAgICAgICAgICAgICAgIEwiICAtIFZlcnNpb24gPSAlMDh4XG4i DQo+ICsgICAgICAgICAgICAgICAgICAgTCIgIC0gKlZlcnNpb25OYW1lID0gJXNcbiINCj4gKyAg ICAgICAgICAgICAgICAgICBMIiAgLSBTaXplID0gJXgiLA0KPiArICAgICAgICAgICAgICAgICAg IHAtPkltYWdlSWQsDQo+ICsgICAgICAgICAgICAgICAgICAgcC0+SW1hZ2VJZE5hbWUsDQo+ICsg ICAgICAgICAgICAgICAgICAgcC0+VmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICBwLT5W ZXJzaW9uTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICBwLT5TaXplDQo+ICsgICAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgICBTdGFuZGFyZExpYi0+UmVjb3JkTWVzc2FnZSAoDQo+ICsgICAg ICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAgICAgICAgRUZJX1ZF UkJPU0VfTEVWRUxfUVVJRVQsDQo+ICsgICAgICAgICAgICAgICAgICAgTCIgIC0gQXR0cmlidXRl c1N1cHBvcnRlZCA9ICUwMTZ4XG4iDQo+ICsgICAgICAgICAgICAgICAgICAgTCIgIC0gQXR0cmli dXRlc1NldHRpbmcgICA9ICUwMTZ4IiwNCj4gKyAgICAgICAgICAgICAgICAgICBwLT5BdHRyaWJ1 dGVzU3VwcG9ydGVkLA0KPiArICAgICAgICAgICAgICAgICAgIHAtPkF0dHJpYnV0ZXNTZXR0aW5n DQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgICBmb3IgKGogPSAxLCBrID0gMDsgaiA8 PSBJTUFHRV9BVFRSSUJVVEVfSU5fVVNFOyBqID0NCj4gU2N0TFNoaWZ0VTY0KGosIDEpLCBrKysp IHsNCj4gKyAgICAgIEJpdEZpZWxkID0gQXR0cmlidXRlW2tdOw0KPiArICAgICAgaWYgKChwLT5B dHRyaWJ1dGVzU3VwcG9ydGVkICYgaikgIT0gaikgew0KPiArICAgICAgICBCaXRTZXR0aW5nID0g TCJOb3QgU3VwcG9ydGVkIjsNCj4gKyAgICAgIH0gZWxzZSBpZiAoKHAtPkF0dHJpYnV0ZXNTZXR0 aW5nICYgaikgPT0gaikgew0KPiArICAgICAgICBCaXRTZXR0aW5nID0gTCJZZXMiOw0KPiArICAg ICAgfSBlbHNlIHsNCj4gKyAgICAgICAgQml0U2V0dGluZyA9IEwiTm8iOw0KPiArICAgICAgfQ0K PiArICAgICAgU3RhbmRhcmRMaWItPlJlY29yZE1lc3NhZ2UgKA0KPiArICAgICAgICAgICAgICAg ICAgICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAgICAgICAgICBFRklfVkVSQk9TRV9M RVZFTF9RVUlFVCwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEwiICAgIC0gJXMgPSAlcyIsDQo+ ICsgICAgICAgICAgICAgICAgICAgICBCaXRGaWVsZCwNCj4gKyAgICAgICAgICAgICAgICAgICAg IEJpdFNldHRpbmcNCj4gKyAgICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgfQ0KPiArICAg IFN0YW5kYXJkTGliLT5SZWNvcmRNZXNzYWdlICgNCj4gKyAgICAgICAgICAgICAgICAgICBTdGFu ZGFyZExpYiwNCj4gKyAgICAgICAgICAgICAgICAgICBFRklfVkVSQk9TRV9MRVZFTF9RVUlFVCwN Cj4gKyAgICAgICAgICAgICAgICAgICBMIiAgLSBDb21wYXRpYmlsaXRpZXMgPSAlMDE2eFxuIiwN Cj4gKyAgICAgICAgICAgICAgICAgICBwLT5Db21wYXRpYmlsaXRpZXMNCj4gKyAgICAgICAgICAg ICAgICAgICApOw0KPiArICB9DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsgIC8vDQo+ICsgIC8v IFJlcG9ydCB0aGUgY2hlY2twb2ludCByZXN1bHQNCj4gKyAgLy8NCj4gKw0KPiArDQo+ICtFeGl0 Og0KPiArICBTdGFuZGFyZExpYi0+UmVjb3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAg ICAgU3RhbmRhcmRMaWIsDQo+ICsgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsg ICAgICAgICAgICAgICAgIFRlc3RHdWlkLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNz YWdlTGFiZWwsDQo+ICsgICAgICAgICAgICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0 dXMgLSAlciIsDQo+ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAg ICAgICAgICAgICAgICBfX0ZJTEVfXywNCj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElO RV9fLA0KPiArICAgICAgICAgICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsN Cj4gKyAgaWYgKFBhY2thZ2VWZXJzaW9uTmFtZSAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJl ZVBvb2wgKFBhY2thZ2VWZXJzaW9uTmFtZSk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdl SW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlSW5mbyk7 DQo+ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8v DQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrcG9pbnQ6IEdldEltYWdl LCAxDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICsvKioNCj4gKyAg VGhpcyByb3V0aW5lOg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCBhbGwgdmFsaWQgcGFy YW1ldGVycy4NCj4gKyAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9TVUNDRVNT IG9yIEVGSV9VTlNVUFBPUlRFRC4NCj4gKyoqLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRl c3RHZXRJbWFnZUZ1bmN0aW9uVGVzdENoZWNrcG9pbnQxICgNCj4gKyAgSU4gRUZJX1NUQU5EQVJE X1RFU1RfTElCUkFSWV9QUk9UT0NPTCAgICAgICAgICAqU3RhbmRhcmRMaWIsDQo+ICsgIElOIEVG SV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MICAgICAgICAgICAgKkZpcm13YXJlTWFuYWdl bWVudA0KPiArICApDQo+ICt7DQo+ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgU3RhdHVzOw0KPiArICBFRklfVEVTVF9BU1NFUlRJT04gICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGU7DQo+ICsgIEVGSV9HVUlEICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGVzdEd1aWQ7DQo+ICsgIENIQVIxNiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJlc3VsdE1lc3NhZ2VMYWJlbA0K PiA7DQo+ICsgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KlJlc3VsdE1lc3NhZ2VEYXRhOw0KPiArICBFRklfRklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAg ICAgICAgICAgICAgICAgICpCdWZmZXJJbWFnZUluZm87DQo+ICsgIFZPSUQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJ1ZmZlckltYWdlOw0KPiArDQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvU2l6 ZTsNCj4gKyAgRUZJX0ZJUk1XQVJFX0lNQUdFX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAq SW1hZ2VJbmZvOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIERlc2NyaXB0b3JWZXJzaW9uOw0KPiArICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIERlc2NyaXB0b3JDb3VudDsNCj4gKyAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXNjcmlwdG9yU2l6ZTsNCj4gKyAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQYWNrYWdlVmVy c2lvbjsNCj4gKyAgQ0hBUjE2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqUGFja2FnZVZlcnNpb25OYW1lDQo+IDsNCj4gKw0KPiArICBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICpJbWFnZTsNCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemU7DQo+ICsNCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpOw0KPiArICBFRklf RklSTVdBUkVfSU1BR0VfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICAgICpwOw0KPiArICBVSU5U TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uVGVzdGVk Ow0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAgLy8NCj4gKw0KPiArICBTdGF0dXMg PSBFRklfU1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9Q QVNTRUQ7DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdEZ1bmN0aW9u QXNzZXJ0aW9uR3VpZDAwMjsNCj4gKyAgUmVzdWx0TWVzc2FnZUxhYmVsID0gTCJHZXRJbWFnZSwg ZnVuY3Rpb24gY2hlY2twb2ludCAjMSI7DQo+ICsNCj4gKyAgQnVmZmVySW1hZ2VJbmZvID0gTlVM TDsNCj4gKyAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICBJbWFnZUluZm8gPSBOVUxMOw0KPiAr ICBJbWFnZSA9IE5VTEw7DQo+ICsgIFBhY2thZ2VWZXJzaW9uTmFtZSA9IE5VTEw7DQo+ICsgIEZ1 bmN0aW9uVGVzdGVkID0gMDsNCj4gKw0KPiArICAvLyBVc2UgYSBzdWZmaWNpZW50bHkgbGFyZ2Ug YnVmZmVyIHRvIG9idGFpbiBFRklfU1VDQ0VTUywNCj4gKyAgLy8gc2luY2Ugc29tZSBpbXBsZW1l bnRhdGlvbiBkb2VzIE5PVCBjb3JyZWN0bHkgcmV0dXJuDQo+IEVGSV9CVUZGRVJfVE9PX1NNQUxM Lg0KPiArICAvLyBDaGVjayBmb3IgRUZJX0JVRkZFUl9UT09fU01BTEwgaW4gYW5vdGhlciBjb25m b3JtYW5jZSB0ZXN0Lg0KPiArDQo+ICsgIEltYWdlSW5mb1NpemUgPSAoc2l6ZW9mIChFRklfRklS TVdBUkVfSU1BR0VfREVTQ1JJUFRPUikpICogMjA7DQo+ICsgIFN0YXR1cyA9IGd0QlMtPkFsbG9j YXRlUG9vbCAoDQo+ICsgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4g KyAgICAgICAgICAgICAgICAgICBJbWFnZUluZm9TaXplLA0KPiArICAgICAgICAgICAgICAgICAg IChWT0lEICoqKSAmSW1hZ2VJbmZvDQo+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gKyAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9B U1NFUlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJ0ZXN0IGNhc2Ug aW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgIGdvdG8gRXhpdDsNCj4gKyAgfQ0KPiAr DQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0SW1hZ2VJbmZvICgNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZJbWFnZUluZm9TaXplLA0KPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW1hZ2VJbmZvLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0b3JDb3VudCwNCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZEZXNjcmlwdG9yU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZQYWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZQYWNrYWdlVmVyc2lvbk5hbWUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICk7DQo+ICsgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsN Cj4gKyAgICBndEJTLT5GcmVlUG9vbCAoSW1hZ2VJbmZvKTsNCj4gKyAgICBTdGF0dXMgPSBndEJT LT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgRWZpQm9vdFNlcnZpY2Vz RGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIEltYWdlSW5mb1NpemUsDQo+ICsgICAgICAg ICAgICAgICAgICAgICAoVk9JRCAqKikgJkltYWdlSW5mbw0KPiArICAgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ICsgICAgICBBc3NlcnRp b25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3Nh Z2VEYXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgICAg Z290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQt PkdldEltYWdlSW5mbyAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZp cm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JkltYWdlSW5mb1NpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElt YWdlSW5mbywNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJkRlc2NyaXB0 b3JWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3Jp cHRvckNvdW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmRGVzY3Jp cHRvclNpemUsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdl VmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VW ZXJzaW9uTmFtZQ0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KPiAr ICAgIGlmIChTdGF0dXMgIT0gRUZJX1NVQ0NFU1MpIHsNCj4gKyAgICAgIEFzc2VydGlvblR5cGUg PSBFRklfVEVTVF9BU1NFUlRJT05fRkFJTEVEOw0KPiArICAgICAgUmVzdWx0TWVzc2FnZURhdGEg PSBMInRlc3QgY2FzZSBpbml0aWFsaXphdGlvbiBmYWlsdXJlLiI7DQo+ICsgICAgICBCdWZmZXJJ bWFnZUluZm8gPSBJbWFnZUluZm87DQo+ICsgICAgICBnb3RvIEV4aXQ7DQo+ICsgICAgfQ0KPiAr ICB9DQo+ICsgIEJ1ZmZlckltYWdlSW5mbyA9IEltYWdlSW5mbzsNCj4gKw0KPiArICBpZiAoRGVz Y3JpcHRvclNpemUgPT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5cGUgPSBFRklfVEVTVF9BU1NF UlRJT05fRkFJTEVEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCIqRGVzY3JpcHRvclNp emUgaXMgMC4iOw0KPiArICAgIGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9T VUNDRVNTDQo+ICsgIH0NCj4gKyAgaWYgKChEZXNjcmlwdG9yQ291bnQgKiBEZXNjcmlwdG9yU2l6 ZSkgPiBJbWFnZUluZm9TaXplKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FT U0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMIigoKkRlc2NyaXB0 b3JDb3VudCkgKiAoKkRlc2NyaXB0b3JTaXplKSkgPg0KPiAqSW1hZ2VJbmZvU2l6ZS4iOw0KPiAr ICAgIGdvdG8gRXhpdDsgIC8vIE5vdGUgdGhlIFN0YXR1cyA9IEVGSV9TVUNDRVNTDQo+ICsgIH0N Cj4gKw0KPiArICAvLw0KPiArICAvLyBDaGVjayB0aGUgZGF0YSByZXR1cm5lZCBieSB0aGUgZnVu Y3Rpb24NCj4gKyAgLy8NCj4gKw0KPiArICBmb3IgKGkgPSAwOyBpIDwgRGVzY3JpcHRvckNvdW50 OyBpKyspIHsNCj4gKyAgICBwID0gKEVGSV9GSVJNV0FSRV9JTUFHRV9ERVNDUklQVE9SICopICgo KFVJTlQ4ICopIEltYWdlSW5mbykgKw0KPiAoaSAqIERlc2NyaXB0b3JTaXplKSk7DQo+ICsNCj4g KyAgICBpZiAoKChwLT5BdHRyaWJ1dGVzU3VwcG9ydGVkICYNCj4gSU1BR0VfQVRUUklCVVRFX0FV VEhFTlRJQ0FUSU9OX1JFUVVJUkVEKSA9PQ0KPiArICAgICAgICAgIElNQUdFX0FUVFJJQlVURV9B VVRIRU5USUNBVElPTl9SRVFVSVJFRCkgJiYNCj4gKyAgICAgICAgKChwLT5BdHRyaWJ1dGVzU2V0 dGluZyAmDQo+IElNQUdFX0FUVFJJQlVURV9BVVRIRU5USUNBVElPTl9SRVFVSVJFRCkgPT0NCj4g KyAgICAgICAgICBJTUFHRV9BVFRSSUJVVEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQpKSB7DQo+ ICsgICAgICBjb250aW51ZTsNCj4gKyAgICB9DQo+ICsgICAgaWYgKHAtPlNpemUgPT0gMCkgew0K PiArICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArICAgIGlmICgocC0+QXR0cmlidXRlc1N1 cHBvcnRlZCAmIElNQUdFX0FUVFJJQlVURV9JTUFHRV9VUERBVEFCTEUpDQo+ICE9IElNQUdFX0FU VFJJQlVURV9JTUFHRV9VUERBVEFCTEUpIHsNCj4gKyAgICAgIGNvbnRpbnVlOw0KPiArICAgIH0N Cj4gKyAgICBpZiAoKHAtPkF0dHJpYnV0ZXNTZXR0aW5nICYgSU1BR0VfQVRUUklCVVRFX0lNQUdF X1VQREFUQUJMRSkgIT0NCj4gSU1BR0VfQVRUUklCVVRFX0lNQUdFX1VQREFUQUJMRSkgew0KPiAr ICAgICAgY29udGludWU7DQo+ICsgICAgfQ0KPiArDQo+ICsgICAgSW1hZ2VTaXplID0gcC0+U2l6 ZTsNCj4gKyAgICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0ZVBvb2wgKA0KPiArICAgICAgICAgICAg ICAgICAgICAgRWZpQm9vdFNlcnZpY2VzRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIElt YWdlU2l6ZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSAmSW1hZ2UNCj4gKyAg ICAgICAgICAgICAgICAgICAgICk7DQo+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0K PiArICAgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsg ICAgICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwidGVzdCBjYXNlIGluaXRpYWxpemF0aW9uIGZhaWx1 cmUuIjsNCj4gKyAgICAgIGdvdG8gRXhpdDsNCj4gKyAgICB9DQo+ICsgICAgQnVmZmVySW1hZ2Ug PSBJbWFnZTsNCj4gKw0KPiArICAgIEZ1bmN0aW9uVGVzdGVkKys7DQo+ICsgICAgU3RhdHVzID0g RmlybXdhcmVNYW5hZ2VtZW50LT5HZXRJbWFnZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIEZpcm13YXJlTWFuYWdlbWVudCwNCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcC0+SW1hZ2VJbmRleCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgSW1hZ2UsDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZJbWFnZVNpemUNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g Kw0KPiArICAgIGlmIChTdGF0dXMgPT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gKyAgICAg IGd0QlMtPkZyZWVQb29sIChJbWFnZSk7DQo+ICsgICAgICBTdGF0dXMgPSBndEJTLT5BbGxvY2F0 ZVBvb2wgKA0KPiArICAgICAgICAgICAgICAgICAgICAgICBFZmlCb290U2VydmljZXNEYXRhLA0K PiArICAgICAgICAgICAgICAgICAgICAgICBJbWFnZVNpemUsDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgIChWT0lEICoqKSAmSW1hZ2UNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgKTsNCj4g KyAgICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gKyAgICAgICAgQXNzZXJ0aW9uVHlw ZSA9IEVGSV9URVNUX0FTU0VSVElPTl9GQUlMRUQ7DQo+ICsgICAgICAgIFJlc3VsdE1lc3NhZ2VE YXRhID0gTCJ0ZXN0IGNhc2UgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iOw0KPiArICAgICAgICBn b3RvIEV4aXQ7DQo+ICsgICAgICB9DQo+ICsgICAgfQ0KPiArICAgIEJ1ZmZlckltYWdlID0gSW1h Z2U7DQo+ICsNCj4gKyAgICBTdGF0dXMgPSBGaXJtd2FyZU1hbmFnZW1lbnQtPkdldEltYWdlICgN Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdhcmVNYW5hZ2VtZW50 LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwLT5JbWFnZUluZGV4LA0K PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJkltYWdlU2l6ZQ0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICApOw0KPiArICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFn ZSk7DQo+ICsgICAgQnVmZmVySW1hZ2UgPSBOVUxMOw0KPiArICAgIEltYWdlID0gTlVMTDsNCj4g Kw0KPiArICAgIC8vDQo+ICsgICAgLy8gUmVwb3J0IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiAr ICAgIC8vDQo+ICsNCj4gKyAgICBpZiAoKFN0YXR1cyAhPSBFRklfU1VDQ0VTUykgJiYgKFN0YXR1 cyAhPSBFRklfVU5TVVBQT1JURUQpKSB7DQo+ICsgICAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RF U1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhID0gTCJmYWls ZWQgdG8gcmV0dXJuIEVGSV9TVUNDRVNTIG9yDQo+IEVGSV9VTlNVUFBPUlRFRC4iOw0KPiArICAg ICAgZ290byBFeGl0Ow0KPiArICAgIH0NCj4gKyAgfQ0KPiArDQo+ICsgIGlmIChGdW5jdGlvblRl c3RlZCA9PSAwKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VSVElPTl9Q QVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMInRlc3Qgc2tpcHBlZCAtIHRlc3Qg Y2FzZSBkb2VzIG5vdCBhcHBseS4iOw0KPiArICB9IGVsc2Ugew0KPiArICAgIEFzc2VydGlvblR5 cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fUEFTU0VEOw0KPiArICAgIFJlc3VsdE1lc3NhZ2VEYXRh ID0gTCJjb3JyZWN0bHkgcmV0dXJuZWQgRUZJX1NVQ0NFU1Mgb3INCj4gRUZJX1VOU1VQUE9SVEVE LiI7DQo+ICsgIH0NCj4gKw0KPiArRXhpdDoNCj4gKyAgU3RhbmRhcmRMaWItPlJlY29yZEFzc2Vy dGlvbiAoDQo+ICsgICAgICAgICAgICAgICAgIFN0YW5kYXJkTGliLA0KPiArICAgICAgICAgICAg ICAgICBBc3NlcnRpb25UeXBlLA0KPiArICAgICAgICAgICAgICAgICBUZXN0R3VpZCwNCj4gKyAg ICAgICAgICAgICAgICAgUmVzdWx0TWVzc2FnZUxhYmVsLA0KPiArICAgICAgICAgICAgICAgICBM IlJlc3VsdCAtICVzXG4lYTolZDogU3RhdHVzIC0gJXIiLA0KPiArICAgICAgICAgICAgICAgICBS ZXN1bHRNZXNzYWdlRGF0YSwNCj4gKyAgICAgICAgICAgICAgICAgX19GSUxFX18sDQo+ICsgICAg ICAgICAgICAgICAgIChVSU5UTilfX0xJTkVfXywNCj4gKyAgICAgICAgICAgICAgICAgU3RhdHVz DQo+ICsgICAgICAgICAgICAgICAgICk7DQo+ICsNCj4gKyAgaWYgKFBhY2thZ2VWZXJzaW9uTmFt ZSAhPSBOVUxMKSB7DQo+ICsgICAgZ3RCUy0+RnJlZVBvb2wgKFBhY2thZ2VWZXJzaW9uTmFtZSk7 DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlckltYWdlSW5mbyAhPSBOVUxMKSB7DQo+ICsgICAgZ3RC Uy0+RnJlZVBvb2wgKEJ1ZmZlckltYWdlSW5mbyk7DQo+ICsgIH0NCj4gKyAgaWYgKEJ1ZmZlcklt YWdlICE9IE5VTEwpIHsNCj4gKyAgICAgIGd0QlMtPkZyZWVQb29sIChCdWZmZXJJbWFnZSk7DQo+ ICsgIH0NCj4gKw0KPiArICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ICt9DQo+ICsNCj4gKy8vDQo+ ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENoZWNrcG9pbnQ6IEdldFBhY2thZ2VJ bmZvLCAxDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArDQo+ICsvKioNCj4g KyAgVGhpcyByb3V0aW5lOg0KPiArICAgIC0gQ2FsbHMgZnVuY3Rpb24gd2l0aCBhbGwgdmFsaWQg cGFyYW1ldGVycy4NCj4gKyAgICAgIFRoZSBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIEVGSV9TVUND RVNTIG9yIEVGSV9VTlNVUFBPUlRFRC4NCj4gKyAgICAtIENoZWNrcyBBdHRyaWJ1dGVzU3VwcG9y dGVkIGhhcyBubyBiaXRzIHNldCBiZXlvbmQgYml0Mi4NCj4gKyAgICAtIENoZWNrcyBBdHRyaWJ1 dGVzU2V0dGluZyBoYXMgbm8gYml0cyBzZXQgYmV5b25kIGJpdDIuDQo+ICsqKi8NCj4gKw0KPiAr RUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0UGFja2FnZUluZm9GdW5jdGlvblRlc3RDaGVja3BvaW50 MSAoDQo+ICsgIElOIEVGSV9TVEFOREFSRF9URVNUX0xJQlJBUllfUFJPVE9DT0wgICAgICAgICAg KlN0YW5kYXJkTGliLA0KPiArICBJTiBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTCAg ICAgICAgICAgICpGaXJtd2FyZU1hbmFnZW1lbnQNCj4gKyAgKQ0KPiArew0KPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0YXR1czsNCj4gKyAgRUZJ X1RFU1RfQVNTRVJUSU9OICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBc3NlcnRpb25UeXBl Ow0KPiArICBFRklfR1VJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRl c3RHdWlkOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICpSZXN1bHRNZXNzYWdlTGFiZWwNCj4gOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICpSZXN1bHRNZXNzYWdlRGF0YTsNCj4gKw0KPiArICBV SU5UMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJz aW9uOw0KPiArICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICpQYWNrYWdlVmVyc2lvbk5hbWUNCj4gOw0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFBhY2thZ2VWZXJzaW9uTmFtZU0NCj4gYXhMZW47DQo+ICsg IFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRl c1N1cHBvcnRlZA0KPiA7DQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmc7DQo+ICsNCj4gKyAgQ0hBUjE2KiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGVbM107DQo+ICsNCj4gKyNp ZiAoREVCVUdfQUxMIHx8IERFQlVHX0dFVF9QQUNLQUdFX0lORk8pDQo+ICsNCj4gKyAgQ0hBUjE2 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqQml0RmllbGQ7DQo+ICsg IENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKkJpdFNldHRp bmc7DQo+ICsNCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBqOw0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGs7DQo+ICsNCj4gKyNlbmRpZg0KPiArDQo+ICsgIC8vDQo+ICsgIC8vIEluaXQNCj4gKyAg Ly8NCj4gKw0KPiArICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCj4gKyAgQXNzZXJ0aW9uVHlwZSA9 IEVGSV9URVNUX0FTU0VSVElPTl9QQVNTRUQ7DQo+ICsgIFRlc3RHdWlkID0gZ0Zpcm13YXJlTWFu YWdlbWVudEJCVGVzdEZ1bmN0aW9uQXNzZXJ0aW9uR3VpZDAwMzsNCj4gKyAgUmVzdWx0TWVzc2Fn ZUxhYmVsID0gTCJHZXRQYWNrYWdlSW5mbywgZnVuY3Rpb24gY2hlY2twb2ludCAjMSI7DQo+ICsN Cj4gKyAgUGFja2FnZVZlcnNpb25OYW1lID0gTlVMTDsNCj4gKw0KPiArICBBdHRyaWJ1dGVbMF0g PSBMIlZlcnNpb24gVXBkYXRhYmxlIjsNCj4gKyAgQXR0cmlidXRlWzFdID0gTCJSZXNldCBSZXF1 aXJlZCI7DQo+ICsgIEF0dHJpYnV0ZVsyXSA9IEwiQXV0aGVudGljYXRpb24gUmVxdWlyZWQiOw0K PiArDQo+ICsgIC8vDQo+ICsgIC8vIENoZWNrIHRoZSBkYXRhIHJldHVybmVkIGJ5IHRoZSBmdW5j dGlvbg0KPiArICAvLw0KPiArDQo+ICsgIFN0YXR1cyA9IEZpcm13YXJlTWFuYWdlbWVudC0+R2V0 UGFja2FnZUluZm8gKA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlybXdh cmVNYW5hZ2VtZW50LA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2th Z2VWZXJzaW9uLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlBhY2thZ2VW ZXJzaW9uTmFtZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQYWNrYWdl VmVyc2lvbk5hbWVNYXhMZW4sDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAm QXR0cmlidXRlc1N1cHBvcnRlZCwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZBdHRyaWJ1dGVzU2V0dGluZw0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KTsNCj4gKw0KPiArICBpZiAoKFN0YXR1cyA9PSBFRklfU1VDQ0VTUykgfHwgKFN0YXR1cyA9PSBF RklfVU5TVVBQT1JURUQpKSB7DQo+ICsgICAgQXNzZXJ0aW9uVHlwZSA9IEVGSV9URVNUX0FTU0VS VElPTl9QQVNTRUQ7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURhdGEgPSBMImNvcnJlY3RseSByZXR1 cm5lZCBFRklfU1VDQ0VTUyBvcg0KPiBFRklfVU5TVVBQT1JURUQuIjsNCj4gKyAgfSBlbHNlIHsN Cj4gKyAgICBBc3NlcnRpb25UeXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX0ZBSUxFRDsNCj4gKyAg ICBSZXN1bHRNZXNzYWdlRGF0YSA9IEwiZmFpbGVkIHRvIHJldHVybiBFRklfU1VDQ0VTUyBvcg0K PiBFRklfVU5TVVBQT1JURUQuIjsNCj4gKyAgICBnb3RvIEV4aXQ7DQo+ICsgIH0NCj4gKw0KPiAr I2lmIChERUJVR19BTEwgfHwgREVCVUdfR0VUX1BBQ0tBR0VfSU5GTykNCj4gKw0KPiArICBTdGFu ZGFyZExpYi0+UmVjb3JkTWVzc2FnZSAoDQo+ICsgICAgICAgICAgICAgICAgIFN0YW5kYXJkTGli LA0KPiArICAgICAgICAgICAgICAgICBFRklfVkVSQk9TRV9MRVZFTF9RVUlFVCwNCj4gKyAgICAg ICAgICAgICAgICAgTCJGaXJtd2FyZSBQYWNrYWdlIEluZm86IFxuIg0KPiArICAgICAgICAgICAg ICAgICBMIiAgLSAqUGFja2FnZVZlcnNpb24gPSAlMDh4XG4iDQo+ICsgICAgICAgICAgICAgICAg IEwiICAtICoqUGFja2FnZVZlcnNpb25OYW1lID0gJXNcbiINCj4gKyAgICAgICAgICAgICAgICAg TCIgIC0gKlBhY2thZ2VWZXJzaW9uTmFtZU1heExlbiA9ICUwOHgiLA0KPiArICAgICAgICAgICAg ICAgICBQYWNrYWdlVmVyc2lvbiwNCj4gKyAgICAgICAgICAgICAgICAgUGFja2FnZVZlcnNpb25O YW1lLA0KPiArICAgICAgICAgICAgICAgICBQYWNrYWdlVmVyc2lvbk5hbWVNYXhMZW4NCj4gKyAg ICAgICAgICAgICAgICApOw0KPiArICBTdGFuZGFyZExpYi0+UmVjb3JkTWVzc2FnZSAoDQo+ICsg ICAgICAgICAgICAgICAgIFN0YW5kYXJkTGliLA0KPiArICAgICAgICAgICAgICAgICBFRklfVkVS Qk9TRV9MRVZFTF9RVUlFVCwNCj4gKyAgICAgICAgICAgICAgICAgTCIgIC0gKkF0dHJpYnV0ZXNT dXBwb3J0ZWQgPSAlMDE2eFxuIg0KPiArICAgICAgICAgICAgICAgICBMIiAgLSAqQXR0cmlidXRl c1NldHRpbmcgICA9ICUwMTZ4IiwNCj4gKyAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1N1cHBv cnRlZCwNCj4gKyAgICAgICAgICAgICAgICAgQXR0cmlidXRlc1NldHRpbmcNCj4gKyAgICAgICAg ICAgICAgICAgKTsNCj4gKyAgZm9yIChqID0gMSwgayA9IDA7IGogPD0gUEFDS0FHRV9BVFRSSUJV VEVfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQ7DQo+IGogPSBTY3RMU2hpZnRVNjQoaiwgMSksIGsr Kykgew0KPiArICAgIEJpdEZpZWxkID0gQXR0cmlidXRlW2tdOw0KPiArICAgIGlmICgoQXR0cmli dXRlc1N1cHBvcnRlZCAmIGopICE9IGopIHsNCj4gKyAgICAgIEJpdFNldHRpbmcgPSBMIk5vdCBT dXBwb3J0ZWQiOw0KPiArICAgIH0gZWxzZSBpZiAoKEF0dHJpYnV0ZXNTZXR0aW5nICYgaikgPT0g aikgew0KPiArICAgICAgQml0U2V0dGluZyA9IEwiWWVzIjsNCj4gKyAgICB9IGVsc2Ugew0KPiAr ICAgICAgQml0U2V0dGluZyA9IEwiTm8iOw0KPiArICAgIH0NCj4gKyAgICBTdGFuZGFyZExpYi0+ UmVjb3JkTWVzc2FnZSAoDQo+ICsgICAgICAgICAgICAgICAgICAgU3RhbmRhcmRMaWIsDQo+ICsg ICAgICAgICAgICAgICAgICAgRUZJX1ZFUkJPU0VfTEVWRUxfUVVJRVQsDQo+ICsgICAgICAgICAg ICAgICAgICAgTCIgICAgLSAlcyA9ICVzIiwNCj4gKyAgICAgICAgICAgICAgICAgICBCaXRGaWVs ZCwNCj4gKyAgICAgICAgICAgICAgICAgICBCaXRTZXR0aW5nDQo+ICsgICAgICAgICAgICAgICAg ICAgKTsNCj4gKyAgfQ0KPiArDQo+ICsjZW5kaWYNCj4gKw0KPiArICBpZiAoKEF0dHJpYnV0ZXNT dXBwb3J0ZWQgJiAweEZGRkZGRkZGRkZGRkZGRjgpICE9IDApIHsNCj4gKyAgICBBc3NlcnRpb25U eXBlID0gRUZJX1RFU1RfQVNTRVJUSU9OX1dBUk5JTkc7DQo+ICsgICAgUmVzdWx0TWVzc2FnZURh dGEgPSBMIipBdHRyaWJ1dGVzU3VwcG9ydGVkIGhhcyBiaXQocykgc2V0IGJleW9uZA0KPiBiaXQy LiI7DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgaWYgKChBdHRyaWJ1dGVz U2V0dGluZyAmIDB4RkZGRkZGRkZGRkZGRkZGOCkgIT0gMCkgew0KPiArICAgIEFzc2VydGlvblR5 cGUgPSBFRklfVEVTVF9BU1NFUlRJT05fV0FSTklORzsNCj4gKyAgICBSZXN1bHRNZXNzYWdlRGF0 YSA9IEwiKkF0dHJpYnV0ZXNTZXR0aW5nIGhhcyBiaXQocykgc2V0IGJleW9uZA0KPiBiaXQyLiI7 DQo+ICsgICAgZ290byBFeGl0Ow0KPiArICB9DQo+ICsNCj4gKyAgLy8NCj4gKyAgLy8gUmVwb3J0 IHRoZSBjaGVja3BvaW50IHJlc3VsdA0KPiArICAvLw0KPiArDQo+ICtFeGl0Og0KPiArICBTdGFu ZGFyZExpYi0+UmVjb3JkQXNzZXJ0aW9uICgNCj4gKyAgICAgICAgICAgICAgICAgU3RhbmRhcmRM aWIsDQo+ICsgICAgICAgICAgICAgICAgIEFzc2VydGlvblR5cGUsDQo+ICsgICAgICAgICAgICAg ICAgIFRlc3RHdWlkLA0KPiArICAgICAgICAgICAgICAgICBSZXN1bHRNZXNzYWdlTGFiZWwsDQo+ ICsgICAgICAgICAgICAgICAgIEwiUmVzdWx0IC0gJXNcbiVhOiVkOiBTdGF0dXMgLSAlciIsDQo+ ICsgICAgICAgICAgICAgICAgIFJlc3VsdE1lc3NhZ2VEYXRhLA0KPiArICAgICAgICAgICAgICAg ICBfX0ZJTEVfXywNCj4gKyAgICAgICAgICAgICAgICAgKFVJTlROKV9fTElORV9fLA0KPiArICAg ICAgICAgICAgICAgICBTdGF0dXMNCj4gKyAgICAgICAgICAgICAgICAgKTsNCj4gKw0KPiArICBp ZiAoUGFja2FnZVZlcnNpb25OYW1lICE9IE5VTEwpIHsNCj4gKyAgICBndEJTLT5GcmVlUG9vbCAo UGFja2FnZVZlcnNpb25OYW1lKTsNCj4gKyAgfQ0KPiArDQo+ICsgIHJldHVybiBFRklfU1VDQ0VT UzsNCj4gK30NCj4gKw0KPiBkaWZmIC0tZ2l0IGEvdWVmaS0NCj4gc2N0L1NjdFBrZy9UZXN0Q2Fz ZS9VRUZJL0lIVi9Qcm90b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0DQo+IC9G aXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RNYWluLmMgYi91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rlc3RD YXNlL1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRlc3QNCj4g L0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdE1haW4uYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCAwMDAwMDAwMC4uM2NlNjI3OTUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi91ZWZp LQ0KPiBzY3QvU2N0UGtnL1Rlc3RDYXNlL1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJlTWFuYWdl bWVudC9CbGFja0JveFRlc3QNCj4gL0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdE1haW4uYw0KPiBA QCAtMCwwICsxLDIyOCBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0IDIwMDYg LSAyMDE3IFVuaWZpZWQgRUZJLCBJbmMuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTAgLSAy MDE3LCBEZWxsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAo YykgMjAxOSxNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuPEJSPg0KPiArICBUaGlzIHByb2dyYW0g YW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFk ZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQo+IHRoZSBCU0Qg TGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBm dWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4gbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9v cGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJP R1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0K PiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwgRUlUSEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsv KisrDQo+ICsNCj4gK01vZHVsZSBOYW1lOg0KPiArDQo+ICsgIEZpcm13YXJlTWFuYWdlbWVudEJC VGVzdE1haW4uYw0KPiArDQo+ICtBYnN0cmFjdDoNCj4gKw0KPiArICBGaXJtd2FyZSBNYW5hZ2Vt ZW50IFByb3RvY29sIHRlc3QgZHJpdmVyLg0KPiArDQo+ICstLSovDQo+ICsNCj4gKyNpbmNsdWRl ICJTY3RMaWIuaCINCj4gKyNpbmNsdWRlICJGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RNYWluLmgi DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIFZhcmlhYmxl cw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArRUZJX0hBTkRMRSBt SW1hZ2VIYW5kbGU7DQo+ICsNCj4gK0VGSV9CQl9URVNUX1BST1RPQ09MICpnQkJUZXN0UHJvdG9j b2xJbnRlcmZhY2U7DQo+ICsNCj4gK0VGSV9CQl9URVNUX1BST1RPQ09MX0ZJRUxEIGdCQlRlc3RQ cm90b2NvbEZpZWxkID0gew0KPiArICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTF9U RVNUX1JFVklTSU9OLA0KPiArICBJSFZfRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xf R1VJRCwNCj4gKyAgTCJGaXJtd2FyZSBNYW5hZ2VtZW50IFByb3RvY29sIFRlc3QiLA0KPiArICBM IlVFRkkgMi4zIEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9jb2wgQmxhY2stQm94IFRlc3QiDQo+ ICt9Ow0KPiArDQo+ICtFRklfR1VJRCBnU3VwcG9ydFByb3RvY29sR3VpZFtdID0gew0KPiArICBF RklfU1RBTkRBUkRfVEVTVF9MSUJSQVJZX0dVSUQsDQo+ICsgIEVGSV9OVUxMX0dVSUQNCj4gK307 DQo+ICsNCj4gK0VGSV9CQl9URVNUX0VOVFJZX0ZJRUxEIGdCQlRlc3RFbnRyeUZpZWxkW10gPSB7 DQoNClRoZSBiZWxvdyBpcyBjb21tZW50ZWQgb3V0LCB3aGljaCBzaG91bGQgYmUgcmVtb3ZlZCBi ZWZvcmUgdXBzdHJlYW0uDQo+ICsgIC8qDQo+ICsgIC8vVXNlIGZvciB1bml0IHRlc3Qgb25seQ0K PiArICB7DQo+ICsgICAgeyAweDhjZGRhODE2LCAweDNmOTcsIDB4NDE1NSwgeyAweGE2LCAweDcz LCAweDg2LCAweDkzLCAweDc5LA0KPiAweDhmLCAweGIwLCAweDZkIH0gfSwNCj4gKyAgIEwiVW5p dCBUZXN0IE9ubHkiLA0KPiArICAgTCJWZXJpZnkgdGhlIEFzc2lzdGFudCBGdW5jdGlvbiIsDQo+ ICsgICAgRUZJX1RFU1RfTEVWRUxfREVGQVVMVCwNCj4gKyAgICBnU3VwcG9ydFByb3RvY29sR3Vp ZCwNCj4gKyAgICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0VW5pdFRlc3QNCj4g KyAgfSwNCj4gKyAgKi8NCg0KDQo+ICsgIHsNCj4gKyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVO VF9QUk9UT0NPTF9URVNUX0VOVFJZX0dVSUQwMTAxLA0KPiArICAgIEwiRnVuY3Rpb25fVGVzdC1H ZXRJbWFnZUluZm8iLA0KPiArICAgIEwiRnVuY3Rpb24gYXV0byB0ZXN0IGZvciBGaXJtd2FyZSBN YW5hZ2VtZW50IFByb3RvY29sDQo+IEdldEltYWdlSW5mbygpLiIsDQo+ICsgICAgRUZJX1RFU1Rf TEVWRUxfTUlOSU1BTCwNCj4gKyAgICBnU3VwcG9ydFByb3RvY29sR3VpZCwNCj4gKyAgICBFRklf VEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0R2V0SW1hZ2VJbmZvRnVuY3Rpb25UZXN0DQo+ ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTF9U RVNUX0VOVFJZX0dVSUQwMTAyLA0KPiArICAgIEwiRnVuY3Rpb25fVGVzdC1HZXRJbWFnZSIsDQo+ ICsgICAgTCJGdW5jdGlvbiBhdXRvIHRlc3QgZm9yIEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9j b2wNCj4gR2V0SW1hZ2UoKS4iLA0KPiArICAgIEVGSV9URVNUX0xFVkVMX01JTklNQUwsDQo+ICsg ICAgZ1N1cHBvcnRQcm90b2NvbEd1aWQsDQo+ICsgICAgRUZJX1RFU1RfQ0FTRV9BVVRPLA0KPiAr ICAgIEJCVGVzdEdldEltYWdlRnVuY3Rpb25UZXN0DQo+ICsgIH0sDQo+ICsvKisrDQo+ICsgIHsN Cj4gKyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTF9URVNUX0VOVFJZX0dVSUQw MTAzLA0KPiArICAgIEwiRnVuY3Rpb24gVGVzdCAtIFNldEltYWdlIiwNCj4gKyAgICBMIkZ1bmN0 aW9uIGF1dG8gdGVzdCBmb3IgRmlybXdhcmUgTWFuYWdlbWVudCBQcm90b2NvbA0KPiBTZXRJbWFn ZSgpLiIsDQo+ICsgICAgRUZJX1RFU1RfTEVWRUxfTUlOSU1BTCwNCj4gKyAgICBnU3VwcG9ydFBy b3RvY29sR3VpZCwNCj4gKyAgICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0U2V0 SW1hZ2VGdW5jdGlvblRlc3QNCj4gKyAgfSwNCj4gKy0tKi8NCj4gKy8qKysNCj4gKyAgew0KPiAr ICAgIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAxMDQs DQo+ICsgICAgTCJGdW5jdGlvbiBUZXN0IC0gQ2hlY2tJbWFnZSIsDQo+ICsgICAgTCJGdW5jdGlv biBhdXRvIHRlc3QgZm9yIEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9jb2wNCj4gQ2hlY2tJbWFn ZSgpLiIsDQo+ICsgICAgRUZJX1RFU1RfTEVWRUxfTUlOSU1BTCwNCj4gKyAgICBnU3VwcG9ydFBy b3RvY29sR3VpZCwNCj4gKyAgICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0Q2hl Y2tJbWFnZUZ1bmN0aW9uVGVzdA0KPiArICB9LA0KPiArLS0qLw0KPiArICB7DQo+ICsgICAgRUZJ X0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEwNSwNCj4gKyAg ICBMIkZ1bmN0aW9uX1Rlc3QtR2V0UGFja2FnZUluZm8iLA0KPiArICAgIEwiRnVuY3Rpb24gYXV0 byB0ZXN0IGZvciBGaXJtd2FyZSBNYW5hZ2VtZW50IFByb3RvY29sDQo+IEdldFBhY2thZ2VJbmZv KCkuIiwNCj4gKyAgICBFRklfVEVTVF9MRVZFTF9NSU5JTUFMLA0KPiArICAgIGdTdXBwb3J0UHJv dG9jb2xHdWlkLA0KPiArICAgIEVGSV9URVNUX0NBU0VfQVVUTywNCj4gKyAgICBCQlRlc3RHZXRQ YWNrYWdlSW5mb0Z1bmN0aW9uVGVzdA0KPiArICB9LA0KPiArLyorKw0KPiArICB7DQo+ICsgICAg RUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEwNiwNCj4g KyAgICBMIkZ1bmN0aW9uIFRlc3QgLSBTZXRQYWNrYWdlSW5mbyIsDQo+ICsgICAgTCJGdW5jdGlv biBhdXRvIHRlc3QgZm9yIEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9jb2wNCj4gU2V0UGFja2Fn ZUluZm8oKS4iLA0KPiArICAgIEVGSV9URVNUX0xFVkVMX01JTklNQUwsDQo+ICsgICAgZ1N1cHBv cnRQcm90b2NvbEd1aWQsDQo+ICsgICAgRUZJX1RFU1RfQ0FTRV9BVVRPLA0KPiArICAgIEJCVGVz dFNldFBhY2thZ2VJbmZvRnVuY3Rpb25UZXN0DQo+ICsgIH0sDQo+ICstLSovDQo+ICsgIHsNCj4g KyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTF9URVNUX0VOVFJZX0dVSUQwMjAx LA0KPiArICAgIEwiQ29uZm9ybWFuY2VfVGVzdC1HZXRJbWFnZUluZm8iLA0KPiArICAgIEwiQ29u Zm9ybWFuY2UgYXV0byB0ZXN0IGZvciBGaXJtd2FyZSBNYW5hZ2VtZW50IFByb3RvY29sDQo+IEdl dEltYWdlSW5mbygpLiIsDQo+ICsgICAgRUZJX1RFU1RfTEVWRUxfTUlOSU1BTCwNCj4gKyAgICBn U3VwcG9ydFByb3RvY29sR3VpZCwNCj4gKyAgICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAg QkJUZXN0R2V0SW1hZ2VJbmZvQ29uZm9ybWFuY2VUZXN0DQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAg ICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9UT0NPTF9URVNUX0VOVFJZX0dVSUQwMjAyLA0K PiArICAgIEwiQ29uZm9ybWFuY2VfVGVzdC1HZXRJbWFnZSIsDQo+ICsgICAgTCJDb25mb3JtYW5j ZSBhdXRvIHRlc3QgZm9yIEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9jb2wNCj4gR2V0SW1hZ2Uo KS4iLA0KPiArICAgIEVGSV9URVNUX0xFVkVMX01JTklNQUwsDQo+ICsgICAgZ1N1cHBvcnRQcm90 b2NvbEd1aWQsDQo+ICsgICAgRUZJX1RFU1RfQ0FTRV9BVVRPLA0KPiArICAgIEJCVGVzdEdldElt YWdlQ29uZm9ybWFuY2VUZXN0DQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBFRklfRklSTVdBUkVf TUFOQUdFTUVOVF9QUk9UT0NPTF9URVNUX0VOVFJZX0dVSUQwMjAzLA0KPiArICAgIEwiQ29uZm9y bWFuY2VfVGVzdC1TZXRJbWFnZSIsDQo+ICsgICAgTCJDb25mb3JtYW5jZSBhdXRvIHRlc3QgZm9y IEZpcm13YXJlIE1hbmFnZW1lbnQgUHJvdG9jb2wNCj4gU2V0SW1hZ2UoKS4iLA0KPiArICAgIEVG SV9URVNUX0xFVkVMX01JTklNQUwsDQo+ICsgICAgZ1N1cHBvcnRQcm90b2NvbEd1aWQsDQo+ICsg ICAgRUZJX1RFU1RfQ0FTRV9BVVRPLA0KPiArICAgIEJCVGVzdFNldEltYWdlQ29uZm9ybWFuY2VU ZXN0DQo+ICsgIH0sDQo+ICsgIHsNCj4gKyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9U T0NPTF9URVNUX0VOVFJZX0dVSUQwMjA0LA0KPiArICAgIEwiQ29uZm9ybWFuY2VfVGVzdC1DaGVj a0ltYWdlIiwNCj4gKyAgICBMIkNvbmZvcm1hbmNlIGF1dG8gdGVzdCBmb3IgRmlybXdhcmUgTWFu YWdlbWVudCBQcm90b2NvbA0KPiBDaGVja0ltYWdlKCkuIiwNCj4gKyAgICBFRklfVEVTVF9MRVZF TF9NSU5JTUFMLA0KPiArICAgIGdTdXBwb3J0UHJvdG9jb2xHdWlkLA0KPiArICAgIEVGSV9URVNU X0NBU0VfQVVUTywNCj4gKyAgICBCQlRlc3RDaGVja0ltYWdlQ29uZm9ybWFuY2VUZXN0DQo+ICsg IH0sDQo+ICsvKisrDQo+ICsgIHsNCj4gKyAgICBFRklfRklSTVdBUkVfTUFOQUdFTUVOVF9QUk9U T0NPTF9URVNUX0VOVFJZX0dVSUQwMjA1LA0KPiArICAgIEwiQ29uZm9ybWFuY2UgVGVzdCAtIEdl dFBhY2thZ2VJbmZvIiwNCj4gKyAgICBMIkNvbmZvcm1hbmNlIGF1dG8gdGVzdCBmb3IgRmlybXdh cmUgTWFuYWdlbWVudCBQcm90b2NvbA0KPiBHZXRQYWNrYWdlSW5mbygpLiIsDQo+ICsgICAgRUZJ X1RFU1RfTEVWRUxfTUlOSU1BTCwNCj4gKyAgICBnU3VwcG9ydFByb3RvY29sR3VpZCwNCj4gKyAg ICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0R2V0UGFja2FnZUluZm9Db25mb3Jt YW5jZVRlc3QNCj4gKyAgfSwNCj4gKy0tKi8NCj4gKyAgew0KPiArICAgIEVGSV9GSVJNV0FSRV9N QU5BR0VNRU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAyMDYsDQo+ICsgICAgTCJDb25mb3Jt YW5jZV9UZXN0LVNldFBhY2thZ2VJbmZvIiwNCj4gKyAgICBMIkNvbmZvcm1hbmNlIGF1dG8gdGVz dCBmb3IgRmlybXdhcmUgTWFuYWdlbWVudCBQcm90b2NvbA0KPiBTZXRQYWNrYWdlSW5mbygpLiIs DQo+ICsgICAgRUZJX1RFU1RfTEVWRUxfTUlOSU1BTCwNCj4gKyAgICBnU3VwcG9ydFByb3RvY29s R3VpZCwNCj4gKyAgICBFRklfVEVTVF9DQVNFX0FVVE8sDQo+ICsgICAgQkJUZXN0U2V0UGFja2Fn ZUluZm9Db25mb3JtYW5jZVRlc3QNCj4gKyAgfSwNCj4gKyAgMA0KPiArfTsNCj4gKw0KPiArLy8N Cj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgSW5pdGlhbGl6YXRpb24gYW5kIFVu bG9hZCBmdW5jdGlvbnMNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4g Kw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtJbml0aWFsaXplRmlybXdhcmVNYW5hZ2Vt ZW50QkJUZXN0ICgNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBJbWFnZUhh bmRsZSwNCj4gKyAgSU4gRUZJX1NZU1RFTV9UQUJMRSAgICAgICAgICAgICAqU3lzdGVtVGFibGUN Cj4gKyAgKQ0KPiArew0KPiArICBFZmlJbml0aWFsaXplVGVzdExpYiAoSW1hZ2VIYW5kbGUsIFN5 c3RlbVRhYmxlKTsNCj4gKw0KPiArICAvLw0KPiArICAvLyBpbml0aWFsaXplIHRlc3QgdXRpbGl0 eSBsaWINCj4gKyAgLy8NCj4gKw0KPiArICBTY3RJbml0aWFsaXplTGliIChJbWFnZUhhbmRsZSwg U3lzdGVtVGFibGUpOw0KPiArDQo+ICsgIG1JbWFnZUhhbmRsZSA9IEltYWdlSGFuZGxlOw0KPiAr DQo+ICsgIHJldHVybiBFZmlJbml0QW5kSW5zdGFsbElIVkJCVGVzdEludGVyZmFjZSAoDQo+ICsg ICAgICAgICAgICZJbWFnZUhhbmRsZSwNCj4gKyAgICAgICAgICAgJmdCQlRlc3RQcm90b2NvbEZp ZWxkLA0KPiArICAgICAgICAgICBnQkJUZXN0RW50cnlGaWVsZCwNCj4gKyAgICAgICAgICAgVW5s b2FkRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0LA0KPiArICAgICAgICAgICAmZ0JCVGVzdFByb3Rv Y29sSW50ZXJmYWNlDQo+ICsgICAgICAgICAgICk7DQo+ICt9DQo+ICsNCj4gK0VGSV9TVEFUVVMN Cj4gK0VGSUFQSQ0KPiArVW5sb2FkRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0ICgNCj4gKyAgSU4g RUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgICBJbWFnZUhhbmRsZQ0KPiArICApDQo+ICt7DQo+ ICsgIHJldHVybiBFZmlVbmluc3RhbGxBbmRGcmVlSUhWQkJUZXN0SW50ZXJmYWNlICgNCj4gKyAg ICAgICAgICAgSW1hZ2VIYW5kbGUsDQo+ICsgICAgICAgICAgIGdCQlRlc3RQcm90b2NvbEludGVy ZmFjZQ0KPiArICAgICAgICAgICApOw0KPiArfQ0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cj4gKioqKioqKg0KPiArLy8gICBTdXBwb3J0IGZ1bmN0aW9ucw0KPiArLy8NCj4gKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqDQo+ICoqKioqKioNCj4gKw0KPiBkaWZmIC0tZ2l0IGEvdWVmaS0NCj4gc2N0L1NjdFBrZy9U ZXN0Q2FzZS9VRUZJL0lIVi9Qcm90b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0 DQo+IC9GaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RNYWluLmggYi91ZWZpLQ0KPiBzY3QvU2N0UGtn L1Rlc3RDYXNlL1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRl c3QNCj4gL0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdE1haW4uaA0KPiBuZXcgZmlsZSBtb2RlIDEw MDY0NA0KPiBpbmRleCAwMDAwMDAwMC4uOTJhYzNlNDUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysg Yi91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rlc3RDYXNlL1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJl TWFuYWdlbWVudC9CbGFja0JveFRlc3QNCj4gL0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdE1haW4u aA0KPiBAQCAtMCwwICsxLDIyMyBAQA0KPiArLyoqIEBmaWxlDQo+ICsNCj4gKyAgQ29weXJpZ2h0 IDIwMDYgLSAyMDE3IFVuaWZpZWQgRUZJLCBJbmMuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIw MTAgLSAyMDE3LCBEZWxsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHly aWdodCAoYykgMjAxOSxNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuPEJSPg0KPiArICBUaGlzIHBy b2dyYW0gYW5kIHRoZSBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBh bmQgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQo+IHRo ZSBCU0QgTGljZW5zZQ0KPiArICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4g IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UNCj4gbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0 dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBU SEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFT IElTIg0KPiBCQVNJUywNCj4gKyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9O UyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4NCj4gKw0KPiArKiov DQo+ICsvKisrDQo+ICsNCj4gK01vZHVsZSBOYW1lOg0KPiArDQo+ICsgIEZpcm13YXJlTWFuYWdl bWVudEJCVGVzdE1haW4uaA0KPiArDQo+ICtBYnN0cmFjdDoNCj4gKw0KPiArICBIZWFkZXIgZmls ZSBmb3IgRmlybXdhcmUgTWFuYWdlbWVudCBQcm90b2NvbCB0ZXN0IGRyaXZlci4NCj4gKw0KPiAr LS0qLw0KPiArDQo+ICsjaWZuZGVmIF9GSVJNV0FSRV9NQU5BR0VNRU5UX0JCX1RFU1RfTUFJTg0K PiArI2RlZmluZSBfRklSTVdBUkVfTUFOQUdFTUVOVF9CQl9URVNUX01BSU4NCj4gKw0KPiArI2lu Y2x1ZGUgIkVmaS5oIg0KPiArI2luY2x1ZGUgIkd1aWQuaCINCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0VmaVRlc3RMaWIuaD4NCj4gKw0KPiArI2luY2x1ZGUgPFVFRkkvUHJvdG9jb2wvRmlybXdhcmVN YW5hZ2VtZW50Lmg+DQo+ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJP VE9DT0xfVEVTVF9SRVZJU0lPTiAgICAweDAwMDEwMDAwDQo+ICsNCj4gKyNkZWZpbmUgSUhWX0VG SV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MX0dVSUQgXA0KPiAreyAweDk0MWQwMmE4LCAw eDQ5YWQsIDB4NGJkYSwgeyAweDlmLCAweGFlLCAweDBhLCAweDY5LCAweDI0LCAweDU0LA0KPiAw eDFjLCAweDg4IH0gfQ0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAg RW50cnkgR1VJRHMgZm9yIEZ1bmN0aW9uIFRlc3QNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAq KioqKioqDQo+ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xf VEVTVF9FTlRSWV9HVUlEMDEwMSBcDQo+ICt7IDB4N2RkZGRkNTcsIDB4NjhmZiwgMHg0NjBlLCB7 IDB4OTAsIDB4YWQsIDB4YTksIDB4ZDUsIDB4ZjEsIDB4ZjAsDQo+IDB4YTAsIDB4ODcgfSB9DQo+ ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRS WV9HVUlEMDEwMiBcDQo+ICt7IDB4NWI0YzI0YjIsIDB4ODUyZCwgMHg0MThhLCB7IDB4ODIsIDB4 MzQsIDB4YzIsIDB4YzgsIDB4NjMsIDB4NWUsDQo+IDB4OWEsIDB4MmEgfSB9DQo+ICsNCj4gKyNk ZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEw MyBcDQo+ICt7IDB4ODQwNjJlNDQsIDB4ZGFlZSwgMHg0MWE1LCB7IDB4OTQsIDB4ZjgsIDB4NmQs IDB4ZTAsIDB4NzIsIDB4OWIsDQo+IDB4ZmEsIDB4YjQgfSB9DQo+ICsNCj4gKyNkZWZpbmUgRUZJ X0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEwNCBcDQo+ICt7 IDB4ZGViMjYwMjEsIDB4Y2E0ZSwgMHg0ODc2LCB7IDB4OTAsIDB4OTksIDB4Y2EsIDB4N2QsIDB4 NzcsIDB4MmMsDQo+IDB4OTAsIDB4MWQgfSB9DQo+ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJF X01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEwNSBcDQo+ICt7IDB4YWExNjBl Y2MsIDB4ZmMyZiwgMHg0ZjA1LCB7IDB4YWMsIDB4MjAsIDB4NGMsIDB4ZWQsIDB4NDUsIDB4ZGUs DQo+IDB4ZGEsIDB4YWIgfSB9DQo+ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1F TlRfUFJPVE9DT0xfVEVTVF9FTlRSWV9HVUlEMDEwNiBcDQo+ICt7IDB4N2E5YTI3MTQsIDB4ZjMy YiwgMHg0MDgzLCB7IDB4OTAsIDB4ZjIsIDB4MTIsIDB4NTEsIDB4MWEsIDB4ODcsDQo+IDB4NDgs IDB4MWEgfSB9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAg IEVudHJ5IEdVSURzIGZvciBDb25mb3JtYW5jZSBUZXN0DQo+ICsvLw0KPiAqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioN Cj4gKioqKioqKg0KPiArDQo+ICsjZGVmaW5lIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RP Q09MX1RFU1RfRU5UUllfR1VJRDAyMDEgXA0KPiAreyAweDU0ZWUzNDdjLCAweDEwYTMsIDB4NDMx MSwgeyAweDk0LCAweDI3LCAweGE4LCAweDk3LCAweGJmLCAweGRjLA0KPiAweDk4LCAweDggfSB9 DQo+ICsNCj4gKyNkZWZpbmUgRUZJX0ZJUk1XQVJFX01BTkFHRU1FTlRfUFJPVE9DT0xfVEVTVF9F TlRSWV9HVUlEMDIwMiBcDQo+ICt7IDB4NjhhYmE5M2MsIDB4MWQwYywgMHg0MTJmLCB7IDB4YjEs IDB4ZSwgMHhlMywgMHhhNCwgMHg2LCAweGJjLA0KPiAweDQyLCAweGNmIH0gfQ0KPiArDQo+ICsj ZGVmaW5lIEVGSV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAy MDMgXA0KPiAreyAweDEyODM0YTIzLCAweDZjZWYsIDB4NDc4ZSwgeyAweGFmLCAweDQ4LCAweDQ0 LCAweGU1LCAweDkzLCAweDQwLA0KPiAweGFiLCAweGU4IH0gfQ0KPiArDQo+ICsjZGVmaW5lIEVG SV9GSVJNV0FSRV9NQU5BR0VNRU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAyMDQgXA0KPiAr eyAweGM2ZGM5NGIxLCAweGI4MWIsIDB4NGI4NSwgeyAweDhiLCAweDdkLCAweDhmLCAweGJmLCAw eGE2LCAweDhlLA0KPiAweGYzLCAweGU1IH0gfQ0KPiArDQo+ICsjZGVmaW5lIEVGSV9GSVJNV0FS RV9NQU5BR0VNRU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAyMDUgXA0KPiAreyAweDNkMTNm MjNkLCAweDgzMDYsIDB4NDlkNCwgeyAweGEwLCAweGUwLCAweDlhLCAweDliLCAweGY2LCAweDg5 LA0KPiAweDQwLCAweDNjIH0gfQ0KPiArDQo+ICsjZGVmaW5lIEVGSV9GSVJNV0FSRV9NQU5BR0VN RU5UX1BST1RPQ09MX1RFU1RfRU5UUllfR1VJRDAyMDYgXA0KPiAreyAweDI0Y2Y5YWMyLCAweDlh YmMsIDB4NGY1YywgeyAweDljLCAweDdhLCAweGJjLCAweDIyLCAweDI5LCAweGMzLA0KPiAweDIs IDB4N2YgfSB9DQo+ICsNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAg IEluaXRpYWxpemFpdG9uIGFuZCBVbmxvYWQgZnVuY3Rpb25zDQo+ICsvLw0KPiAqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioNCj4gKioqKioqKg0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0luaXRpYWxp emVGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3QgKA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAg ICAgICAgICAgIEltYWdlSGFuZGxlLA0KPiArICBJTiBFRklfU1lTVEVNX1RBQkxFICAgICAgICAg ICAgICpTeXN0ZW1UYWJsZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK1VubG9hZEZpcm13YXJlTWFuYWdlbWVudEJCVGVzdCAoDQo+ICsgIElOIEVGSV9IQU5ETEUg ICAgICAgICAgICAgICAgICAgSW1hZ2VIYW5kbGUNCj4gKyAgKTsNCj4gKw0KPiArLy8NCj4gKy8v IFRlc3QgQ2FzZXMgLSBVbml0IFRlc3QNCj4gKy8vDQo+ICsNCg0KVGhlIGJlbG93IGlzIGNvbW1l bnRlZCBvdXQsIHdoaWNoIHNob3VsZCBiZSByZW1vdmVkIGJlZm9yZSB1cHN0cmVhbS4NCj4gKy8q DQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RVbml0VGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNU X1BST1RPQ09MICAgICAgICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAg ICAqQ2xpZW50SW50ZXJmYWNlLA0KPiArICBJTiBFRklfVEVTVF9MRVZFTCAgICAgICAgICAgICBU ZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5k bGUNCj4gKyAgKTsNCj4gKyovDQoNCg0KPiArDQo+ICsvLw0KPiArLy8gVGVzdCBDYXNlcyAtIEZ1 bmN0aW9uDQo+ICsvLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJbWFnZUluZm9G dW5jdGlvblRlc3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAgICAgICAqVGhpcywN Cj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4g KyAgSU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgVGVzdExldmVsLA0KPiArICBJTiBFRklf SEFORExFICAgICAgICAgICAgICAgICBTdXBwb3J0SGFuZGxlDQo+ICsgICk7DQo+ICsNCj4gK0VG SV9TVEFUVVMNCj4gK0JCVGVzdEdldEltYWdlRnVuY3Rpb25UZXN0ICgNCj4gKyAgSU4gRUZJX0JC X1RFU1RfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAg ICAgICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9URVNUX0xFVkVMICAgICAgICAg ICAgIFRlc3RMZXZlbCwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgU3VwcG9y dEhhbmRsZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RTZXRJbWFnZUZ1 bmN0aW9uVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BST1RPQ09MICAgICAgICpUaGlzLA0K PiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqQ2xpZW50SW50ZXJmYWNlLA0KPiAr ICBJTiBFRklfVEVTVF9MRVZFTCAgICAgICAgICAgICBUZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9I QU5ETEUgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUNCj4gKyAgKTsNCj4gKw0KPiArRUZJ X1NUQVRVUw0KPiArQkJUZXN0Q2hlY2tJbWFnZUZ1bmN0aW9uVGVzdCAoDQo+ICsgIElOIEVGSV9C Ql9URVNUX1BST1RPQ09MICAgICAgICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAg ICAgICAgICAqQ2xpZW50SW50ZXJmYWNlLA0KPiArICBJTiBFRklfVEVTVF9MRVZFTCAgICAgICAg ICAgICBUZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgIFN1cHBv cnRIYW5kbGUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0R2V0UGFja2Fn ZUluZm9GdW5jdGlvblRlc3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAgICAgICAq VGhpcywNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudEludGVyZmFj ZSwNCj4gKyAgSU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgVGVzdExldmVsLA0KPiArICBJ TiBFRklfSEFORExFICAgICAgICAgICAgICAgICBTdXBwb3J0SGFuZGxlDQo+ICsgICk7DQo+ICsN Cj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldFBhY2thZ2VJbmZvRnVuY3Rpb25UZXN0ICgNCj4g KyAgSU4gRUZJX0JCX1RFU1RfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAg ICAgICAgICAgICAgICAgICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9URVNUX0xF VkVMICAgICAgICAgICAgIFRlc3RMZXZlbCwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAg ICAgICAgU3VwcG9ydEhhbmRsZQ0KPiArICApOw0KPiArDQo+ICsvLw0KPiArLy8gVGVzdCBDYXNl cyAtIENvbmZvcm1hbmNlDQo+ICsvLw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtCQlRlc3RHZXRJ bWFnZUluZm9Db25mb3JtYW5jZVRlc3QgKA0KPiArICBJTiBFRklfQkJfVEVTVF9QUk9UT0NPTCAg ICAgICAqVGhpcywNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAgICAgKkNsaWVudElu dGVyZmFjZSwNCj4gKyAgSU4gRUZJX1RFU1RfTEVWRUwgICAgICAgICAgICAgVGVzdExldmVsLA0K PiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICBTdXBwb3J0SGFuZGxlDQo+ICsgICk7 DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdEdldEltYWdlQ29uZm9ybWFuY2VUZXN0ICgN Cj4gKyAgSU4gRUZJX0JCX1RFU1RfUFJPVE9DT0wgICAgICAgKlRoaXMsDQo+ICsgIElOIFZPSUQg ICAgICAgICAgICAgICAgICAgICAgICpDbGllbnRJbnRlcmZhY2UsDQo+ICsgIElOIEVGSV9URVNU X0xFVkVMICAgICAgICAgICAgIFRlc3RMZXZlbCwNCj4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAg ICAgICAgICAgU3VwcG9ydEhhbmRsZQ0KPiArICApOw0KPiArDQo+ICtFRklfU1RBVFVTDQo+ICtC QlRlc3RTZXRJbWFnZUNvbmZvcm1hbmNlVGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BST1RP Q09MICAgICAgICpUaGlzLA0KPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqQ2xp ZW50SW50ZXJmYWNlLA0KPiArICBJTiBFRklfVEVTVF9MRVZFTCAgICAgICAgICAgICBUZXN0TGV2 ZWwsDQo+ICsgIElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUNCj4g KyAgKTsNCj4gKw0KPiArRUZJX1NUQVRVUw0KPiArQkJUZXN0Q2hlY2tJbWFnZUNvbmZvcm1hbmNl VGVzdCAoDQo+ICsgIElOIEVGSV9CQl9URVNUX1BST1RPQ09MICAgICAgICpUaGlzLA0KPiArICBJ TiBWT0lEICAgICAgICAgICAgICAgICAgICAgICAqQ2xpZW50SW50ZXJmYWNlLA0KPiArICBJTiBF RklfVEVTVF9MRVZFTCAgICAgICAgICAgICBUZXN0TGV2ZWwsDQo+ICsgIElOIEVGSV9IQU5ETEUg ICAgICAgICAgICAgICAgIFN1cHBvcnRIYW5kbGUNCj4gKyAgKTsNCj4gKw0KPiArRUZJX1NUQVRV Uw0KPiArQkJUZXN0R2V0UGFja2FnZUluZm9Db25mb3JtYW5jZVRlc3QgKA0KPiArICBJTiBFRklf QkJfVEVTVF9QUk9UT0NPTCAgICAgICAqVGhpcywNCj4gKyAgSU4gVk9JRCAgICAgICAgICAgICAg ICAgICAgICAgKkNsaWVudEludGVyZmFjZSwNCj4gKyAgSU4gRUZJX1RFU1RfTEVWRUwgICAgICAg ICAgICAgVGVzdExldmVsLA0KPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgICAgICBTdXBw b3J0SGFuZGxlDQo+ICsgICk7DQo+ICsNCj4gK0VGSV9TVEFUVVMNCj4gK0JCVGVzdFNldFBhY2th Z2VJbmZvQ29uZm9ybWFuY2VUZXN0ICgNCj4gKyAgSU4gRUZJX0JCX1RFU1RfUFJPVE9DT0wgICAg ICAgKlRoaXMsDQo+ICsgIElOIFZPSUQgICAgICAgICAgICAgICAgICAgICAgICpDbGllbnRJbnRl cmZhY2UsDQo+ICsgIElOIEVGSV9URVNUX0xFVkVMICAgICAgICAgICAgIFRlc3RMZXZlbCwNCj4g KyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAgICAgICAgU3VwcG9ydEhhbmRsZQ0KPiArICApOw0K PiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8gICBTdXBwb3J0IGZ1 bmN0aW9ucw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArI2VuZGlm DQo+IGRpZmYgLS1naXQgYS91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rlc3RDYXNlL1VFRkkvSUhWL1By b3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRlc3QNCj4gL0d1aWQuYyBiL3VlZmkt DQo+IHNjdC9TY3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wvRmlybXdhcmVNYW5hZ2Vt ZW50L0JsYWNrQm94VGVzdA0KPiAvR3VpZC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGlu ZGV4IDAwMDAwMDAwLi5jMzNkNWI3OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL3VlZmktDQo+ IHNjdC9TY3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wvRmlybXdhcmVNYW5hZ2VtZW50 L0JsYWNrQm94VGVzdA0KPiAvR3VpZC5jDQo+IEBAIC0wLDAgKzEsNjMgQEANCj4gKy8qKiBAZmls ZQ0KPiArDQo+ICsgIENvcHlyaWdodCAyMDA2IC0gMjAxMiBVbmlmaWVkIEVGSSwgSW5jLjxCUj4N Cj4gKyAgQ29weXJpZ2h0IChjKSAyMDEwIC0gMjAxMiwgRGVsbCBJbmMuIEFsbCByaWdodHMgcmVz ZXJ2ZWQuPEJSPg0KPiArICBDb3B5cmlnaHQgKGMpIDIwMTksTWljcm9jaGlwIFRlY2hub2xvZ3kg SW5jLjxCUj4NCj4gKyAgVGhpcyBwcm9ncmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFs cw0KPiArICBhcmUgbGljZW5zZWQgYW5kIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZg0KPiB0aGUgQlNEIExpY2Vuc2UNCj4gKyAgd2hpY2ggYWNjb21wYW5p ZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9mIHRoZSBsaWNlbnNlDQo+IG1h eSBiZSBmb3VuZCBhdA0KPiArICBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxp Y2Vuc2UucGhwDQo+ICsNCj4gKyAgVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhF IEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ICsgIFdJVEhPVVQgV0FSUkFO VElFUyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTDQo+IE9S IElNUExJRUQuDQo+ICsNCj4gKyoqLw0KPiArLyorKw0KPiArDQo+ICsgTW9kdWxlIE5hbWU6DQo+ ICsNCj4gKyAgIEd1aWQuYw0KPiArDQo+ICsgQWJzdHJhY3Q6DQo+ICsNCj4gKyAgIEdVSURzIGF1 dG8tZ2VuZXJhdGVkIGZvciBFRkkgdGVzdCBhc3NlcnRpb24uDQo+ICsNCj4gKy0tKi8NCj4gKw0K PiArI2luY2x1ZGUgIkVmaS5oIg0KPiArI2luY2x1ZGUgIkd1aWQuaCINCj4gKw0KPiArLy8NCj4g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKy8vICAgRnVuY3Rpb24NCj4gKy8vDQo+ICoqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKg0KPiAqKioqKioqDQo+ICsNCj4gK0VGSV9HVUlEDQo+IGdGaXJtd2FyZU1hbmFnZW1l bnRCQlRlc3RGdW5jdGlvbkFzc2VydGlvbkd1aWQwMDE9RUZJX1RFU1RfRklSTVdBUkVNQQ0KPiBO QUdFTUVOVEJCVEVTVEZVTkNUSU9OX0FTU0VSVElPTl8wMDFfR1VJRDsNCj4gK0VGSV9HVUlEDQo+ IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbkFzc2VydGlvbkd1aWQwMDI9RUZJX1RF U1RfRklSTVdBUkVNQQ0KPiBOQUdFTUVOVEJCVEVTVEZVTkNUSU9OX0FTU0VSVElPTl8wMDJfR1VJ RDsNCj4gK0VGSV9HVUlEDQo+IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbkFzc2Vy dGlvbkd1aWQwMDM9RUZJX1RFU1RfRklSTVdBUkVNQQ0KPiBOQUdFTUVOVEJCVEVTVEZVTkNUSU9O X0FTU0VSVElPTl8wMDNfR1VJRDsNCj4gKw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioq KioNCj4gKy8vICAgQ29uZm9ybWFuY2UNCj4gKy8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioq DQo+ICsNCj4gK0VGSV9HVUlEDQo+IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5j ZVN1cHBvcnRHdWlkMDAxPUVGSV9URVNUX0ZJUk1XQVJFTQ0KPiBBTkFHRU1FTlRCQlRFU1RDT05G T1JNQU5DRV9TVVBQT1JUXzAwMV9HVUlEOw0KPiArRUZJX0dVSUQNCj4gZ0Zpcm13YXJlTWFuYWdl bWVudEJCVGVzdENvbmZvcm1hbmNlU3VwcG9ydEd1aWQwMDI9RUZJX1RFU1RfRklSTVdBUkVNDQo+ IEFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX1NVUFBPUlRfMDAyX0dVSUQ7DQo+ICtFRklfR1VJ RA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VTdXBwb3J0R3VpZDAwMz1F RklfVEVTVF9GSVJNV0FSRU0NCj4gQU5BR0VNRU5UQkJURVNUQ09ORk9STUFOQ0VfU1VQUE9SVF8w MDNfR1VJRDsNCj4gK0VGSV9HVUlEDQo+IGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3Jt YW5jZVN1cHBvcnRHdWlkMDA0PUVGSV9URVNUX0ZJUk1XQVJFTQ0KPiBBTkFHRU1FTlRCQlRFU1RD T05GT1JNQU5DRV9TVVBQT1JUXzAwNF9HVUlEOw0KPiArDQo+ICtFRklfR1VJRA0KPiBnRmlybXdh cmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDAxPUVGSV9URVNUX0ZJ Uk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDAxX0dVSUQ7 DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3Nl cnRpb25HdWlkMDAyPUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JN QU5DRV9BU1NFUlRJT05fMDAyX0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2Vt ZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDAzPUVGSV9URVNUX0ZJUk1XQVINCj4g RU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDAzX0dVSUQ7DQo+ICtFRklf R1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlk MDA0PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NF UlRJT05fMDA0X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0 Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA1PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1F TlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDA1X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBn RmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA2PUVGSV9U RVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDA2 X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFu Y2VBc3NlcnRpb25HdWlkMDA3PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RD T05GT1JNQU5DRV9BU1NFUlRJT05fMDA3X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVN YW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA4PUVGSV9URVNUX0ZJUk1X QVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDA4X0dVSUQ7DQo+ ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRp b25HdWlkMDA5PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5D RV9BU1NFUlRJT05fMDA5X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50 QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDEwPUVGSV9URVNUX0ZJUk1XQVINCj4gRU1B TkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDEwX0dVSUQ7DQo+ICtFRklfR1VJ RA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDEx PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJ T05fMDExX0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29u Zm9ybWFuY2VBc3NlcnRpb25HdWlkMDEyPUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRC QlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDEyX0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmly bXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDEzPUVGSV9URVNU X0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDEzX0dV SUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VB c3NlcnRpb25HdWlkMDE0PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05G T1JNQU5DRV9BU1NFUlRJT05fMDE0X0dVSUQ7DQo+ICtFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5h Z2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDE1PUVGSV9URVNUX0ZJUk1XQVIN Cj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDE1X0dVSUQ7DQo+ICtF RklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25H dWlkMDE2PUVGSV9URVNUX0ZJUk1XQVINCj4gRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9B U1NFUlRJT05fMDE2X0dVSUQ7DQo+ICsNCj4gZGlmZiAtLWdpdCBhL3VlZmktDQo+IHNjdC9TY3RQ a2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wvRmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94 VGVzdA0KPiAvR3VpZC5oIGIvdWVmaS0NCj4gc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Q cm90b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0DQo+IC9HdWlkLmgNCj4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAuLmQyYjJlNTFkDQo+IC0tLSAvZGV2 L251bGwNCj4gKysrIGIvdWVmaS0NCj4gc2N0L1NjdFBrZy9UZXN0Q2FzZS9VRUZJL0lIVi9Qcm90 b2NvbC9GaXJtd2FyZU1hbmFnZW1lbnQvQmxhY2tCb3hUZXN0DQo+IC9HdWlkLmgNCj4gQEAgLTAs MCArMSwxNTMgQEANCj4gKy8qKiBAZmlsZQ0KPiArDQo+ICsgIENvcHlyaWdodCAyMDA2IC0gMjAx MCBVbmlmaWVkIEVGSSwgSW5jLjxCUj4NCj4gKyAgQ29weXJpZ2h0IChjKSAyMDEwLCBEZWxsIElu Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIENvcHlyaWdodCAoYykgMjAxOSxNaWNy b2NoaXAgVGVjaG5vbG9neSBJbmMuPEJSPg0KPiArICBUaGlzIHByb2dyYW0gYW5kIHRoZSBhY2Nv bXBhbnlpbmcgbWF0ZXJpYWxzDQo+ICsgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQo+IHRoZSBCU0QgTGljZW5zZQ0KPiAr ICB3aGljaCBhY2NvbXBhbmllcyB0aGlzIGRpc3RyaWJ1dGlvbi4gIFRoZSBmdWxsIHRleHQgb2Yg dGhlIGxpY2Vuc2UNCj4gbWF5IGJlIGZvdW5kIGF0DQo+ICsgIGh0dHA6Ly9vcGVuc291cmNlLm9y Zy9saWNlbnNlcy9ic2QtbGljZW5zZS5waHANCj4gKw0KPiArICBUSEUgUFJPR1JBTSBJUyBESVNU UklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4g KyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlU SEVSIEVYUFJFU1MNCj4gT1IgSU1QTElFRC4NCj4gKw0KPiArKiovDQo+ICsvKisrDQo+ICsNCj4g KyBNb2R1bGUgTmFtZToNCj4gKw0KPiArICAgR3VpZC5oDQo+ICsNCj4gKyBBYnN0cmFjdDoNCj4g Kw0KPiArICAgR1VJRHMgYXV0by1nZW5lcmF0ZWQgZm9yIEVGSSB0ZXN0IGFzc2VydGlvbi4NCj4g Kw0KPiArLS0qLw0KPiArDQo+ICsvLw0KPiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gKioqKioqKg0KPiArLy8g ICBGdW5jdGlvbg0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArI2Rl ZmluZSBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RGVU5DVElPTl9BU1NFUlRJT05f MDAxX0dVSUQNCj4gXA0KPiAreyAweGQwMmI0MGFlLCAweDYyZiwgMHg0MTU1LCB7IDB4YmIsIDB4 ZGQsIDB4NCwgMHgyOSwgMHgxOCwgMHg5NCwNCj4gMHhlYSwgMHgzMSB9IH0NCj4gKw0KPiArZXh0 ZXJuIEVGSV9HVUlEIGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbkFzc2VydGlvbkd1 aWQwMDE7DQo+ICsNCj4gKyNkZWZpbmUgRUZJX1RFU1RfRklSTVdBUkVNQU5BR0VNRU5UQkJURVNU RlVOQ1RJT05fQVNTRVJUSU9OXzAwMl9HVUlEDQo+IFwNCj4gK3sgMHhmZjcwNGM0NiwgMHgzOTk5 LCAweDRhMjgsIHsgMHhhMywgMHg2ZSwgMHg3NiwgMHg4YSwgMHhiNiwgMHhhZCwNCj4gMHg4OSwg MHhkOCB9IH0NCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRl c3RGdW5jdGlvbkFzc2VydGlvbkd1aWQwMDI7DQo+ICsNCj4gKyNkZWZpbmUgRUZJX1RFU1RfRklS TVdBUkVNQU5BR0VNRU5UQkJURVNURlVOQ1RJT05fQVNTRVJUSU9OXzAwM19HVUlEDQo+IFwNCj4g K3sgMHg3MDg4NDUzOSwgMHg5YTM0LCAweDQxNDYsIHsgMHg4MywgMHgzYSwgMHg0ZCwgMHg4OSwg MHg4YiwgMHg5YywNCj4gMHg3ZSwgMHhhNCB9IH0NCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdG aXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RGdW5jdGlvbkFzc2VydGlvbkd1aWQwMDM7DQo+ICsNCj4g Ky8vDQo+ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKg0KPiAqKioqKioqDQo+ICsvLyAgIENvbmZvcm1hbmNlIC0gRnVu Y3Rpb24gU3VwcG9ydCBDaGVjaw0KPiArLy8NCj4gKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4g Kw0KPiArI2RlZmluZQ0KPiBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JN QU5DRV9TVVBQT1JUXzAwMV9HVUlEIFwNCj4gK3sgMHhkOWM3ZDAxOCwgMHg2MGJhLCAweDQ0OGQs IHsgMHhiMSwgMHgzYiwgMHg4OCwgMHg4YiwgMHg0MSwgMHhkOSwNCj4gMHhkYywgMHg5IH0gfTsN Cj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3Jt YW5jZVN1cHBvcnRHdWlkMDAxOw0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJF TUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX1NVUFBPUlRfMDAyX0dVSUQgXA0KPiAreyAweDI4 MzEwZjE2LCAweDY5MGUsIDB4NDRhNSwgeyAweDkzLCAweDk4LCAweGUxLCAweGNkLCAweDZhLCAw eGIzLA0KPiAweGUxLCAweDYxIH0gfTsNCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdGaXJtd2Fy ZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZVN1cHBvcnRHdWlkMDAyOw0KPiArDQo+ICsjZGVm aW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX1NVUFBP UlRfMDAzX0dVSUQgXA0KPiAreyAweDkyY2M5NDBhLCAweGRjZjgsIDB4NDJhMCwgeyAweDgxLCAw eGExLCAweGQ3LCAweGRkLCAweDQzLCAweDg3LA0KPiAweGJmLCAweDZkIH0gfTsNCj4gKw0KPiAr ZXh0ZXJuIEVGSV9HVUlEIGdGaXJtd2FyZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZVN1cHBv cnRHdWlkMDAzOw0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVO VEJCVEVTVENPTkZPUk1BTkNFX1NVUFBPUlRfMDA0X0dVSUQgXA0KPiAreyAweDNmOTEwMDQxLCAw eGNkNGQsIDB4NGIzNiwgeyAweGIyLCAweDIzLCAweGZiLCAweDE2LCAweDRlLCAweDdlLA0KPiAw eDZhLCAweDhjIH0gfTsNCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEIGdGaXJtd2FyZU1hbmFnZW1l bnRCQlRlc3RDb25mb3JtYW5jZVN1cHBvcnRHdWlkMDA0Ow0KPiArDQo+ICsvLw0KPiAqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioNCj4gKioqKioqKg0KPiArLy8gICBDb25mb3JtYW5jZSAtIEFzc2VydGlvbg0KPiArLy8N Cj4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqDQo+ICoqKioqKioNCj4gKw0KPiArI2RlZmluZQ0KPiBFRklfVEVTVF9G SVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDAxX0dVSUQgXA0K PiAreyAweDM3ODliODBlLCAweGFiNzAsIDB4NGRjOSwgeyAweGJiLCAweGJkLCAweDcwLCAweDYz LCAweDc2LCAweDM2LA0KPiAweGFiLCAweDUyIH0gfQ0KPiArDQo+ICtleHRlcm4gRUZJX0dVSUQN Cj4gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0aW9uR3VpZDAwMTsN Cj4gKw0KPiArI2RlZmluZQ0KPiBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RDT05G T1JNQU5DRV9BU1NFUlRJT05fMDAyX0dVSUQgXA0KPiAreyAweGNhMWQ3NzA2LCAweDI1NmIsIDB4 NDY0ZSwgeyAweGI2LCAweGVlLCAweDUwLCAweDM0LCAweDFlLCAweGVjLA0KPiAweDNjLCAweDgz IH0gfQ0KPiArDQo+ICtleHRlcm4gRUZJX0dVSUQNCj4gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVz dENvbmZvcm1hbmNlQXNzZXJ0aW9uR3VpZDAwMjsNCj4gKw0KPiArI2RlZmluZQ0KPiBFRklfVEVT VF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDAzX0dVSUQg XA0KPiAreyAweDNjOGQ4N2IyLCAweDZhODksIDB4NGE2YywgeyAweGJjLCAweDc1LCAweGU2LCAw eDg2LCAweGExLCAweDQ5LA0KPiAweDEzLCAweGYwIH0gfQ0KPiArDQo+ICtleHRlcm4gRUZJX0dV SUQNCj4gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0aW9uR3VpZDAw MzsNCj4gKw0KPiArI2RlZmluZQ0KPiBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RD T05GT1JNQU5DRV9BU1NFUlRJT05fMDA0X0dVSUQgXA0KPiAreyAweDg4MDMxYzk2LCAweDk5YmYs IDB4NGQyYywgeyAweDlmLCAweDU3LCAweGE3LCAweDIsIDB4NmEsIDB4YmMsDQo+IDB4ZDMsIDB4 NTEgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJU ZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA0Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9U RVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMDVfR1VJ RCBcDQo+ICt7IDB4N2EzODYzNjEsIDB4M2E1ZCwgMHg0ZTU4LCB7IDB4OGEsIDB4NTEsIDB4NGQs IDB4OTMsIDB4YjYsIDB4NTUsDQo+IDB4OTUsIDB4ZjQgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklf R1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlk MDA1Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVT VENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMDZfR1VJRCBcDQo+ICt7IDB4ZDZhNzc2MjksIDB4NWFm ZCwgMHg0ODU0LCB7IDB4ODcsIDB4YzgsIDB4ZWUsIDB4OWYsIDB4YzUsIDB4M2QsDQo+IDB4YmUs IDB4M2QgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50 QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA2Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVG SV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMDdf R1VJRCBcDQo+ICt7IDB4NGVhMjQ3NjQsIDB4YTZiMSwgMHg0M2I1LCB7IDB4YjgsIDB4YTAsIDB4 ZDMsIDB4M2YsIDB4ZGMsIDB4OGIsDQo+IDB4YzYsIDB4ZTQgfSB9DQo+ICsNCj4gK2V4dGVybiBF RklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25H dWlkMDA3Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJC VEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMDhfR1VJRCBcDQo+ICt7IDB4NzEyY2UxZTksIDB4 ODBkMSwgMHg0MTY4LCB7IDB4YjgsIDB4ZDAsIDB4NzQsIDB4ZDEsIDB4NzIsIDB4N2EsDQo+IDB4 MmYsIDB4MjUgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2Vt ZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDA4Ow0KPiArDQo+ICsjZGVmaW5lDQo+ IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8w MDlfR1VJRCBcDQo+ICt7IDB4YzgyZDEzNzMsIDB4MWY4NywgMHg0NWY0LCB7IDB4YWYsIDB4ZmMs IDB4MTAsIDB4YTcsIDB4ZjcsIDB4YjAsDQo+IDB4OWMsIDB4YjAgfSB9DQo+ICsNCj4gK2V4dGVy biBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRp b25HdWlkMDA5Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVO VEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMTBfR1VJRCBcDQo+ICt7IDB4MjQxMGE4NTks IDB4ZGY2ZiwgMHg0ODU3LCB7IDB4OTIsIDB4NGEsIDB4MjYsIDB4MzcsIDB4NywgMHgxMSwNCj4g MHhmLCAweDFjIH0gfQ0KPiArDQo+ICtleHRlcm4gRUZJX0dVSUQNCj4gZ0Zpcm13YXJlTWFuYWdl bWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0aW9uR3VpZDAxMDsNCj4gKw0KPiArI2RlZmluZQ0K PiBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1FTlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05f MDExX0dVSUQgXA0KPiAreyAweDM5ODcxNzJjLCAweGU2YTAsIDB4NDA5OSwgeyAweGIxLCAweDJi LCAweGQ4LCAweGVmLCAweGYyLCAweDYyLA0KPiAweDc1LCAweDkzIH0gfQ0KPiArDQo+ICtleHRl cm4gRUZJX0dVSUQNCj4gZ0Zpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNlQXNzZXJ0 aW9uR3VpZDAxMTsNCj4gKw0KPiArI2RlZmluZQ0KPiBFRklfVEVTVF9GSVJNV0FSRU1BTkFHRU1F TlRCQlRFU1RDT05GT1JNQU5DRV9BU1NFUlRJT05fMDEyX0dVSUQgXA0KPiAreyAweGQ2ZGFkMjhl LCAweDdmMGYsIDB4NGY1NiwgeyAweDlhLCAweDkzLCAweDE0LCAweDdkLCAweGIzLCAweDc0LA0K PiAweDAsIDB4YzkgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5h Z2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDEyOw0KPiArDQo+ICsjZGVmaW5l DQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElP Tl8wMTNfR1VJRCBcDQo+ICt7IDB4YjUyODhmYzMsIDB4ZTkwNiwgMHg0NDY4LCB7IDB4ODMsIDB4 M2QsIDB4ZDQsIDB4YTYsIDB4NTgsIDB4YTUsDQo+IDB4NGYsIDB4YmQgfSB9DQo+ICsNCj4gK2V4 dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3Nl cnRpb25HdWlkMDEzOw0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdF TUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMTRfR1VJRCBcDQo+ICt7IDB4NTczNTUz MDEsIDB4MTM0MywgMHg0OTdmLCB7IDB4YmUsIDB4ZTAsIDB4OGUsIDB4NWMsIDB4MjcsIDB4ZDIs DQo+IDB4NDAsIDB4MjUgfSB9DQo+ICsNCj4gK2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVN YW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VBc3NlcnRpb25HdWlkMDE0Ow0KPiArDQo+ICsjZGVm aW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFOQUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VS VElPTl8wMTVfR1VJRCBcDQo+ICt7IDB4YWRlYWI4MmQsIDB4NzU5MiwgMHg0MGZlLCB7IDB4ODcs IDB4YTgsIDB4OTMsIDB4MmIsIDB4YWQsIDB4OTcsDQo+IDB4ZmYsIDB4NWUgfSB9DQo+ICsNCj4g K2V4dGVybiBFRklfR1VJRA0KPiBnRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0Q29uZm9ybWFuY2VB c3NlcnRpb25HdWlkMDE1Ow0KPiArDQo+ICsjZGVmaW5lDQo+IEVGSV9URVNUX0ZJUk1XQVJFTUFO QUdFTUVOVEJCVEVTVENPTkZPUk1BTkNFX0FTU0VSVElPTl8wMTZfR1VJRCBcDQo+ICt7IDB4OWJl NjU4ZDIsIDB4MTMxMiwgMHg0MjU0LCB7IDB4OTEsIDB4MTAsIDB4NTksIDB4MCwgMHhkNSwgMHhm ZCwNCj4gMHg2YywgMHg2YyB9IH0NCj4gKw0KPiArZXh0ZXJuIEVGSV9HVUlEDQo+IGdGaXJtd2Fy ZU1hbmFnZW1lbnRCQlRlc3RDb25mb3JtYW5jZUFzc2VydGlvbkd1aWQwMTY7DQo+ICsNCj4gZGlm ZiAtLWdpdCBhL3VlZmktDQo+IHNjdC9TY3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9jb2wv RmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdA0KPiAvSWh2RmlybXdhcmVNYW5hZ2VtZW50 QkJUZXN0LmluZiBiL3VlZmktDQo+IHNjdC9TY3RQa2cvVGVzdENhc2UvVUVGSS9JSFYvUHJvdG9j b2wvRmlybXdhcmVNYW5hZ2VtZW50L0JsYWNrQm94VGVzdA0KPiAvSWh2RmlybXdhcmVNYW5hZ2Vt ZW50QkJUZXN0LmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMC4u NzU2NmEwNDQNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi91ZWZpLQ0KPiBzY3QvU2N0UGtnL1Rl c3RDYXNlL1VFRkkvSUhWL1Byb3RvY29sL0Zpcm13YXJlTWFuYWdlbWVudC9CbGFja0JveFRlc3QN Cj4gL0lodkZpcm13YXJlTWFuYWdlbWVudEJCVGVzdC5pbmYNCj4gQEAgLTAsMCArMSw1MiBAQA0K PiArIyMgQGZpbGUNCj4gKyMNCj4gKyMgIENvcHlyaWdodCAyMDA2IC0gMjAxMiBVbmlmaWVkIEVG SSwgSW5jLjxCUj4NCj4gKyMgIENvcHlyaWdodCAoYykgMjAxMCAtIDIwMTIsIERlbGwgSW5jLiAg QWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsjICBDb3B5cmlnaHQgKGMpIDIwMTksTWljcm9j aGlwIFRlY2hub2xvZ3kgSW5jLjxCUj4NCj4gKyMgIFRoaXMgcHJvZ3JhbSBhbmQgdGhlIGFjY29t cGFueWluZyBtYXRlcmlhbHMNCj4gKyMgIGFyZSBsaWNlbnNlZCBhbmQgbWFkZSBhdmFpbGFibGUg dW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mDQo+IHRoZSBCU0QgTGljZW5zZQ0KPiAr IyAgd2hpY2ggYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0IG9m IHRoZQ0KPiBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdA0KPiArIyAgaHR0cDovL29wZW5zb3VyY2Uu b3JnL2xpY2Vuc2VzL2JzZC1saWNlbnNlLnBocA0KPiArIw0KPiArIyAgVEhFIFBST0dSQU0gSVMg RElTVFJJQlVURUQgVU5ERVIgVEhFIEJTRCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMs DQo+ICsjICBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgUkVQUkVTRU5UQVRJT05TIE9GIEFOWSBLSU5E LCBFSVRIRVIgRVhQUkVTUw0KPiBPUiBJTVBMSUVELg0KPiArIw0KPiArIyMNCj4gKyMvKisrDQo+ ICsjDQo+ICsjIE1vZHVsZSBOYW1lOg0KPiArIw0KPiArIyAgIEZpcm13YXJlTWFuYWdlbWVudEJC VGVzdC5pbmYNCj4gKyMNCj4gKyMgQWJzdHJhY3Q6DQo+ICsjDQo+ICsjICAgQ29tcG9uZW50IGRl c2NyaXB0aW9uIGZpbGUgZm9yIElIViBGaXJtd2FyZSBNYW5hZ2VtZW50IFByb3RvY29sDQo+IEJs YWNrLUJveCBUZXN0Lg0KPiArIw0KPiArIy0tKi8NCj4gKw0KPiArW2RlZmluZXNdDQo+ICsgIElO Rl9WRVJTSU9OICAgICAgICAgID0gMHgwMDAxMDAwNQ0KPiArICBCQVNFX05BTUUgICAgICAgICAg ICA9IElodkZpcm13YXJlTWFuYWdlbWVudEJCVGVzdA0KPiArICBGSUxFX0dVSUQgICAgICAgICAg ICA9IERCMEU4NDJGLTIwMUItNEQ0Ny1CQTc0LTg4NjAyQTQxQzlEMg0KPiArICBNT0RVTEVfVFlQ RSAgICAgICAgICA9IFVFRklfRFJJVkVSDQo+ICsgIENPTVBPTkVOVF9UWVBFICAgICAgID0gQlNf RFJJVkVSDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgID0gMS4wDQo+ICsgIEVOVFJZX1BPSU5U ICAgICAgICAgID0gSW5pdGlhbGl6ZUZpcm13YXJlTWFuYWdlbWVudEJCVGVzdA0KPiArDQo+ICtb c291cmNlcy5jb21tb25dDQo+ICsgIEZpcm13YXJlTWFuYWdlbWVudEJCVGVzdENvbmZvcm1hbmNl LmMNCj4gKyAgRmlybXdhcmVNYW5hZ2VtZW50QkJUZXN0RnVuY3Rpb24uYw0KPiArICBGaXJtd2Fy ZU1hbmFnZW1lbnRCQlRlc3RNYWluLmMNCj4gKyAgR3VpZC5jDQo+ICsNCj4gK1tQYWNrYWdlc10N Cj4gKyAgTWRlUGtnL01kZVBrZy5kZWMNCj4gKyAgU2N0UGtnL1NjdFBrZy5kZWMNCj4gKyAgU2N0 UGtnL1VFRkkvVUVGSS5kZWMNCj4gKw0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiArICBVZWZpRHJp dmVyRW50cnlQb2ludA0KPiArICBTY3RMaWINCj4gKyAgRWZpVGVzdExpYg0KPiArDQo+ICtbUHJv dG9jb2xzXQ0KPiAtLQ0KPiAyLjIyLjAud2luZG93cy4xDQo+DQo+DQoNCklNUE9SVEFOVCBOT1RJ Q0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNobWVudHMgYXJlIGNv bmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91IGFyZSBub3QgdGhl IGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVyIGltbWVkaWF0ZWx5 IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhlciBwZXJzb24sIHVz ZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGluZm9ybWF0aW9uIGlu IGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==