From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by mx.groups.io with SMTP id smtpd.web12.8324.1595554427924650273 for ; Thu, 23 Jul 2020 18:33:48 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=gk0SSvHc; spf=pass (domain: intel.com, ip: 134.134.136.24, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: HnnodOaBHW/+QRhD/KeyoDySCux/IrVwuOIQ+IVTNNWXCdOvnhxMOez47RxwBAhru/RNx0Na7+ lKCoQ4PpZgZQ== X-IronPort-AV: E=McAfee;i="6000,8403,9691"; a="151938909" X-IronPort-AV: E=Sophos;i="5.75,388,1589266800"; d="scan'208";a="151938909" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga004.fm.intel.com ([10.253.24.48]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Jul 2020 18:33:46 -0700 IronPort-SDR: dRZe5toYebANTIbRntnHao1oycLOU6E3RByYDGCY8WIb/rOhyZWrkRhyujGl9gujiSplmvmOOZ eMCS94TGw+lg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,388,1589266800"; d="scan'208";a="311235391" Received: from orsmsx102.amr.corp.intel.com ([10.22.225.129]) by fmsmga004.fm.intel.com with ESMTP; 23 Jul 2020 18:33:45 -0700 Received: from orsmsx158.amr.corp.intel.com (10.22.240.20) by ORSMSX102.amr.corp.intel.com (10.22.225.129) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 23 Jul 2020 18:33:45 -0700 Received: from ORSEDG001.ED.cps.intel.com (10.7.248.4) by ORSMSX158.amr.corp.intel.com (10.22.240.20) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 23 Jul 2020 18:33:44 -0700 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (104.47.57.173) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 23 Jul 2020 18:33:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=CZ3FaJTRZEsEjeSfJdg7eXXmIyQ/FnjvCHKyu/zW4yT+edWLKscQ3R2r6c/mevavGl0KnjiEJOAoFTrMidLOWm2WRaonYLY5yWrgK9n9z4MzPyKm4wYKT0GVknIgf/JR77Z9ao4dSOQIl+7ltf1IVvNJCbrY2+3Nhk8mhIJ4DPFOuvQEETJ4tqNeVaFHjCn2lzvrTBKBPQF878Bs0fj0ww9Dg5JI7Ju3OsCqrsu/zXeZ/UO6zgUvbUiPztutt+GsvsuWwvCnsVoF2t38M2FfhI0DNZ9t+jtMO+gYJ4bfDxQebosyB3Wir5AOtCv4OJSJvOHYdQtmLcpED4bwEKW10w== 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=OhNhJI7UaDqAlP3by0NYWGrgp+LRY9PGlDDHuHZ3BnA=; b=c5jML40Hm0CEfJ6GTA96Wmnh7flTw+yHcNUmzGfIlA85t5StVd7ivxMVPXRrRnTU+jMpzcYd6qlDIlPHjEOjUz8wjYFI1vTkweFdOwTNqJhQHHIXwj/7FR44NUuxsX4ahGOQ2EN6CE2W+Q01PQS3daCIH77ntTs4nPnns2p2iVNK3DsUfPLFwJBFogKxrblRq7BcLqNs9l5G3kr3Tsko03wB1OFLmz88ocBiR8ulGpChYfaJX4uRSgiR1c5J15SlqNnq6pAldhcVOxgfjs4AFPlGD05PgAFDvk48V/e189iuJ+7Fry927NX5UYk8ZcahZXrvX8AQ/vqt8ZB9LITWqA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=OhNhJI7UaDqAlP3by0NYWGrgp+LRY9PGlDDHuHZ3BnA=; b=gk0SSvHcT31kYUoChHckEKepV33FUwBRH+ltrC1dyfoYz8J88veqbr9EtB79dE01cgR3aaguhsBNlZmxeNwtpdQUlTtDlNNXjGOlUuT8WGds+q6v4UQfwQzfD/lqUBnaF1TKE0zsuCw4/r3/WbMhchB9RJrCEU94lO/utvgje/s= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by BL0PR11MB3217.namprd11.prod.outlook.com (2603:10b6:208:63::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.21; Fri, 24 Jul 2020 01:33:41 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::201e:29f2:a02:c260%4]) with mapi id 15.20.3216.024; Fri, 24 Jul 2020 01:33:41 +0000 From: "Michael D Kinney" To: "Ni, Ray" , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "Shao, Ming" , "Dong, Eric" , Laszlo Ersek , Sean Brogan , Bret Barkelew , "Yao, Jiewen" Subject: Re: [PATCH] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Topic: [PATCH] UefiCpuPkg/MtrrLib/UnitTest: Add host based unit test Thread-Index: AQHWXAy3VXl959YFJEantVyqGGdAE6kV+qGQ Date: Fri, 24 Jul 2020 01:33:41 +0000 Message-ID: References: <20200717073318.877-1-ray.ni@intel.com> In-Reply-To: <20200717073318.877-1-ray.ni@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [24.19.191.44] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: acacec0a-e5a9-41ba-1275-08d82f7198f1 x-ms-traffictypediagnostic: BL0PR11MB3217: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 9xqF/vvDK5kHVrQDsAjpCs26N9PMvv67n5hc2isb03VbxXhejMHkVIbZrHtMZ5aJF2jEcUTe3Mhb/M6OQWZhKT88kLhQgkEw/bB0bRYnmmqJ8X7JgSAvJc3fbXAnP2dL46T6/zrcXaqMLdcXdXmxi8Ygu+inSG0liAkNuK3J1yxGX/MlYgibgx7/z2Be/mC5bfbdr04iQm0q9FbNmEv/3B0rrKbTZOXVzMa0y5Z1aUUpuLUghtTeE2ozubQoGhUG2aNoHWxylg1NfE3vsMq72hvVHQFDGdR5PbfNRPDIXAFTRzf7r/AGybek4EWUcIHK x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(39860400002)(136003)(366004)(346002)(396003)(376002)(86362001)(66946007)(19627235002)(52536014)(53546011)(6506007)(64756008)(26005)(66446008)(71200400001)(2906002)(76116006)(66476007)(66556008)(186003)(478600001)(7696005)(110136005)(4326008)(55016002)(83380400001)(8676002)(54906003)(30864003)(107886003)(9686003)(316002)(33656002)(5660300002)(8936002)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: LSlMX4XtMsrnFw/Za2meGbY/BJWQoP5D7XLHNyyIBhA2/gHjMayh/n/kOq9Zn1vr9DOoTHUH7vDrPQztM/ox7ttpj71D7fh9DIHKNMeTBUAWlMXZVp4H4wqMqNXjEnl2RyPrqiIEyDBnkYHS6Ai11UOGUUBHVE2fpGM1RRNLOmZBqEbDuneGk08BB7yiElw4HT83s8WfIX3VPoO5lisEhXT8k8oEWRx7N2cMF6tG3ADs7FqXBFY8gwZl/iJyYmnguiCd7m/74c62DJp7yCzazRIfkSBuKfeBjICuIjq6ctfoHuwb3eheVgIuRM3bUnASGFtfMjQ0+HXkA2+Ekr8ga3qG/iT1dZcu2HmIKmcJzl7hw+yRRIGgw9n9pOtBHJ6p5mF1EkDuIhhSljQbcspfl+CmXIbqto7l1EIPMhCb8erqcWlPgJRPGAPldizCfCfcNKMZKXgGpBgnR3gdGDdRr2mikuRKidQQL75NAeG5fnQ= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MN2PR11MB4461.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: acacec0a-e5a9-41ba-1275-08d82f7198f1 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Jul 2020 01:33:41.5091 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: whNiYQ343PK8hf+tCJ6n7hDsHfBdE08rYcOXrrAVL1ZJva8ntdy9fDQLZHps7zQ5Ltfs/FIV/YTX/uhplBggj7iaa4xgXwIySP1OlL+aRmw= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL0PR11MB3217 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgUmF5LA0KDQpJbiB0aGUgZm9sbG93aW5nIFVuaXQgVGVzdCBGdW5jdGlvbnMsIEkgcmVjb21t ZW5kIHBhc3NpbmcgaW4NCm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyIGFzIHRoZSBDb250ZXh0IHBh cmFtZXRlciB0byByZWR1Y2UgdGhlDQp1c2Ugb2YgYSBnbG9iYWwgdmFyaWFibGVzLg0KDQoqIFVu aXRUZXN0SXNNdHJyU3VwcG9ydGVkKCkNCiogVW5pdFRlc3RHZXRWYXJpYWJsZU10cnJDb3VudCgp DQoqIFVuaXRUZXN0R2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCgpDQoqIFVuaXRUZXN0TXRy ckdldEZpeGVkTXRycigpDQoqIFVuaXRUZXN0TXRyckdldEFsbE10cnJzKCkNCiogVW5pdFRlc3RN dHJyU2V0QWxsTXRycnMoKQ0KKiBVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlh YmxlTXRycigpDQoqIFVuaXRUZXN0TXRyckdldERlZmF1bHRNZW1vcnlUeXBlKCkNCg0KVGhlIHVz ZSBvZiByYW5kb20gbWVtb3J5IG1hcHMgaXMgYSBnb29kIHdheSB0byB0ZXN0IGNvbXBsZXgNCnNl cnZpY2VzIGxpa2UgdGhlc2UuICBIb3dldmVyLCB0aGUgaXNzdWVzIHdpdGggcmFuZG9tIHRlc3QN CnZlY3RvcnMgaXMgdGhhdCBhIHRlc3QgZmFpbHVyZSBpcyBkaWZmaWN1bHQgdG8gcmVwcm9kdWNl Lg0KWW91IGNhbiBhbHNvIGhhdmUgY2FzZXMgd2hlcmUgb25lIHJ1biB0aHJvdWdoIENJIGZhaWxz IGFuZA0KdGhlIG5leHQgcnVuIHdpdGggZGlmZmVyZW50IHJhbmRvbSB2YWx1ZXMgcGFzc2VzLg0K DQpJIGxpa2UgdGhlIGlkZWEgb2YgdXNpbmcgY29kZSB0aGF0IGdlbmVyYXRlcyByYW5kb20gdGVz dA0KdmVjdG9ycyB0byBnZW5lcmF0ZSBhIGZpeGVkIHNldCBvZiB0ZXN0IHZlY3RvcnMgdGhhdCBh cmUNCmJ1aWx0IGludG8gdGhlIHVuaXQgdGVzdCBzbyB3ZSBoYXZlIHRoZSBzYW1lIHRlc3QgdmVj dG9ycw0KZm9yIGV2ZXJ5IENJIGNoZWNrLg0KDQpUaGVuLCB3ZSBjYW4gc3BsaXQgb3V0IHRoZSB1 bml0IHRlc3QgdGhhdCBkb2VzIHJhbmRvbSB0ZXN0DQp2ZWN0b3JzIGludG8gaXRzIG93biB0ZXN0 IHRoYXQgYSBkZXZlbG9wZXIgY2FuIGNob29zZSB0bw0KcnVuIHdpdGggYSBoaWdoIG51bWJlciBv ZiBpdGVyYXRpb25zIHdoZW4gdGhlcmUgaXMgYW4gYWxnbw0KY2hhbmdlIG9yIHdlIGFyZSBkb2lu ZyByZWxlYXNlIHRlc3RpbmcuICBUaGlzIHVuaXQgdGVzdCANCndvdWxkIG5vdCBiZSB1c2UgZm9y IENJIHRlc3RpbmcuDQoNCkkgYW0gb2sgd2l0aCB0aGUgZmlyc3QgdmVyc2lvbiB1c2luZyByYW5k b20sIGJ1dCBwbGVhc2UNCmVudGVyIGEgQlogdG8gc3BsaXQgaXQgb3V0Lg0KDQpUaGFua3MsDQoN Ck1pa2UNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBOaSwgUmF5IDxy YXkubmlAaW50ZWwuY29tPg0KPiBTZW50OiBGcmlkYXksIEp1bHkgMTcsIDIwMjAgMTI6MzMgQU0N Cj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBLaW5uZXksIE1pY2hhZWwgRCA8bWlj aGFlbC5kLmtpbm5leUBpbnRlbC5jb20+Ow0KPiBTaGFvLCBNaW5nIDxtaW5nLnNoYW9AaW50ZWwu Y29tPjsgRG9uZywgRXJpYw0KPiA8ZXJpYy5kb25nQGludGVsLmNvbT47IExhc3psbyBFcnNlaw0K PiA8bGVyc2VrQHJlZGhhdC5jb20+OyBTZWFuIEJyb2dhbg0KPiA8c2Vhbi5icm9nYW5AbWljcm9z b2Z0LmNvbT47IEJyZXQgQmFya2VsZXcNCj4gPEJyZXQuQmFya2VsZXdAbWljcm9zb2Z0LmNvbT47 IFlhbywgSmlld2VuDQo+IDxqaWV3ZW4ueWFvQGludGVsLmNvbT4NCj4gU3ViamVjdDogW1BBVENI XSBVZWZpQ3B1UGtnL010cnJMaWIvVW5pdFRlc3Q6IEFkZCBob3N0DQo+IGJhc2VkIHVuaXQgdGVz dA0KPiANCj4gQWRkIGhvc3QgYmFzZWQgdW5pdCB0ZXN0cyBmb3IgdGhlIE10cnJMaWIgc2Vydmlj ZXMuDQo+IFRoZSBCYXNlTGliIHNlcnZpY2VzIEFzbUNwdWlkKCksIEFzbVJlYWRNc3I2NCgpLCBh bmQNCj4gQXNtV3JpdGVNc3I2NCgpIGFyZSBob29rZWQgYW5kIHByb3ZpZGUgc2ltcGxlIGVtdWxh dGlvbg0KPiBvZiB0aGUgQ1BVSUQgbGVhZnMgYW5kIE1TUnMgcmVxdWlyZWQgYnkgdGhlIE10cnJM aWIgdG8NCj4gcnVuIGFzIGEgaG9zdCBiYXNlZCB1bml0IHRlc3QuDQo+IA0KPiBUZXN0IGNhc2Vz IGFyZSBkZXZlbG9wZWQgZm9yIGVhY2ggb2YgdGhlIEFQSS4NCj4gDQo+IEZvciB0aGUgbW9zdCBp bXBvcnRhbnQgQVBJcw0KPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzKCkN Cj4gYW5kIE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJTZXR0aW5ncygpLCByYW5kb20NCj4g aW5wdXRzIGFyZQ0KPiBnZW5lcmF0ZWQgYW5kIGZlZCB0byB0aGUgQVBJcyB0byBtYWtlIHN1cmUg dGhlDQo+IGltcGxlbWVudGF0aW9uIGlzDQo+IGdvb2QuIFRoZSB0ZXN0IGFwcGxpY2F0aW9uIGFj Y2VwdHMgYW4gb3B0aW9uYWwNCj4gcGFyYW1ldGVyIHdoaWNoDQo+IHNwZWNpZmllcyBob3cgbWFu eSBpdGVyYXRpb25zIG9mIGZlZWRpbmcgcmFuZG9tIGlucHV0cw0KPiB0byB0aGUgdHdvDQo+IEFQ SXMuIFRoZSBvdmVyYWxsIG51bWJlciBvZiB0ZXN0IGNhc2VzIGluY3JlYXNlcyB3aGVuDQo+IHRo ZSBpdGVyYXRpb24NCj4gaW5jcmVhc2VzLiBEZWZhdWx0IGl0ZXJhdGlvbiBpcyAxMCB3aGVuIG5v IHBhcmFtZXRlciBpcw0KPiBzcGVjaWZpZWQuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBSYXkgTmkg PHJheS5uaUBpbnRlbC5jb20+DQo+IFNpZ25lZC1vZmYtYnk6IE1pY2hhZWwgRCBLaW5uZXkNCj4g PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBTaWduZWQtb2ZmLWJ5OiBNaW5nIFNoYW8g PG1pbmcuc2hhb0BpbnRlbC5jb20+DQo+IENjOiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQu a2lubmV5QGludGVsLmNvbT4NCj4gQ2M6IE1pbmcgU2hhbyA8bWluZy5zaGFvQGludGVsLmNvbT4N Cj4gQ2M6IEVyaWMgRG9uZyA8ZXJpYy5kb25nQGludGVsLmNvbT4NCj4gQ2M6IFJheSBOaSA8cmF5 Lm5pQGludGVsLmNvbT4NCj4gQ2M6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+DQo+ IENjOiBTZWFuIEJyb2dhbiA8c2Vhbi5icm9nYW5AbWljcm9zb2Z0LmNvbT4NCj4gQ2M6IEJyZXQg QmFya2VsZXcgPEJyZXQuQmFya2VsZXdAbWljcm9zb2Z0LmNvbT4NCj4gQ2M6IEppZXdlbiBZYW8g PGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiAtLS0NCj4gIC4uLi9NdHJyTGliL1VuaXRUZXN0L010 cnJMaWJVbml0VGVzdC5jICAgICAgICB8IDEwOTQNCj4gKysrKysrKysrKysrKysrKysNCj4gIC4u Li9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oICAgICAgICB8ICAxNzENCj4gKysr DQo+ICAuLi4vTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIb3N0LmluZiAgfCAgIDM5 ICsNCj4gIFVlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L1N1cHBvcnQuYyB8ICA5 MTMNCj4gKysrKysrKysrKysrKysNCj4gIFVlZmlDcHVQa2cvVGVzdC9VZWZpQ3B1UGtnSG9zdFRl c3QuZHNjICAgICAgICB8ICAgMzEgKw0KPiAgNSBmaWxlcyBjaGFuZ2VkLCAyMjQ4IGluc2VydGlv bnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NA0KPiBVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxp Yi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3QuYw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IFVl ZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oDQo+ICBj cmVhdGUgbW9kZSAxMDA2NDQNCj4gVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3Qv TXRyckxpYlVuaXRUZXN0SG9zdA0KPiAuaW5mDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4gVWVm aUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvU3VwcG9ydC5jDQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQNCj4gVWVmaUNwdVBrZy9UZXN0L1VlZmlDcHVQa2dIb3N0VGVzdC5kc2MNCj4gDQo+ IGRpZmYgLS1naXQNCj4gYS9VZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJy TGliVW5pdFRlc3QuYw0KPiBiL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010 cnJMaWJVbml0VGVzdC5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAw MDAuLmIwNjIzZGRlYTcNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9VZWZpQ3B1UGtnL0xp YnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3QuYw0KPiBAQCAtMCwwICsxLDEw OTQgQEANCj4gKy8qKiBAZmlsZQ0KPiANCj4gKyAgVW5pdCB0ZXN0cyBvZiB0aGUgTXRyckxpYiBp bnN0YW5jZSBvZiB0aGUgTXRyckxpYg0KPiBjbGFzcw0KPiANCj4gKw0KPiANCj4gKyAgQ29weXJp Z2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cw0KPiByZXNlcnZlZC48 QlI+DQo+IA0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVu dA0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4gKyNpbmNsdWRlICJNdHJyTGli VW5pdFRlc3QuaCINCj4gDQo+ICsNCj4gDQo+ICtDT05TVCBNVFJSX0xJQl9TWVNURU1fUEFSQU1F VEVSDQo+IG1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyID0gew0KPiANCj4gKyAgNDIsIFRSVUUsIFRS VUUsIENhY2hlVW5jYWNoZWFibGUsIDEyDQo+IA0KPiArICB9Ow0KPiANCj4gKw0KPiANCj4gK01U UlJfTElCX1NZU1RFTV9QQVJBTUVURVIgbVN5c3RlbVBhcmFtZXRlcnNbXSA9IHsNCj4gDQo+ICsg IHsgMzgsIFRSVUUsIFRSVUUsIENhY2hlVW5jYWNoZWFibGUsICAgIDEyIH0sDQo+IA0KPiArICB7 IDM4LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlQmFjaywgICAgICAxMiB9LA0KPiANCj4gKyAgeyAz OCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVRocm91Z2gsICAgMTIgfSwNCj4gDQo+ICsgIHsgMzgs IFRSVUUsIFRSVUUsIENhY2hlV3JpdGVQcm90ZWN0ZWQsIDEyIH0sDQo+IA0KPiArICB7IDM4LCBU UlVFLCBUUlVFLCBDYWNoZVdyaXRlQ29tYmluaW5nLCAxMiB9LA0KPiANCj4gKw0KPiANCj4gKyAg eyA0MiwgVFJVRSwgVFJVRSwgQ2FjaGVVbmNhY2hlYWJsZSwgICAgMTIgfSwNCj4gDQo+ICsgIHsg NDIsIFRSVUUsIFRSVUUsIENhY2hlV3JpdGVCYWNrLCAgICAgIDEyIH0sDQo+IA0KPiArICB7IDQy LCBUUlVFLCBUUlVFLCBDYWNoZVdyaXRlVGhyb3VnaCwgICAxMiB9LA0KPiANCj4gKyAgeyA0Miwg VFJVRSwgVFJVRSwgQ2FjaGVXcml0ZVByb3RlY3RlZCwgMTIgfSwNCj4gDQo+ICsgIHsgNDIsIFRS VUUsIFRSVUUsIENhY2hlV3JpdGVDb21iaW5pbmcsIDEyIH0sDQo+IA0KPiArDQo+IA0KPiArICB7 IDQ4LCBUUlVFLCBUUlVFLCBDYWNoZVVuY2FjaGVhYmxlLCAgICAxMiB9LA0KPiANCj4gKyAgeyA0 OCwgVFJVRSwgVFJVRSwgQ2FjaGVXcml0ZUJhY2ssICAgICAgMTIgfSwNCj4gDQo+ICsgIHsgNDgs IFRSVUUsIFRSVUUsIENhY2hlV3JpdGVUaHJvdWdoLCAgIDEyIH0sDQo+IA0KPiArICB7IDQ4LCBU UlVFLCBUUlVFLCBDYWNoZVdyaXRlUHJvdGVjdGVkLCAxMiB9LA0KPiANCj4gKyAgeyA0OCwgVFJV RSwgVFJVRSwgQ2FjaGVXcml0ZUNvbWJpbmluZywgMTIgfSwNCj4gDQo+ICt9Ow0KPiANCj4gKw0K PiANCj4gK1VJTlQzMiAgICAgICAgICAgICAgICAgICAgbUZpeGVkTXRycnNJbmRleFtdID0gew0K PiANCj4gKyAgTVNSX0lBMzJfTVRSUl9GSVg2NEtfMDAwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9N VFJSX0ZJWDE2S184MDAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJfRklYMTZLX0EwMDAwLA0K PiANCj4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0S19DMDAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01U UlJfRklYNEtfQzgwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0QwMDAwLA0KPiAN Cj4gKyAgTVNSX0lBMzJfTVRSUl9GSVg0S19EODAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJf RklYNEtfRTAwMDAsDQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX0ZJWDRLX0U4MDAwLA0KPiANCj4g KyAgTVNSX0lBMzJfTVRSUl9GSVg0S19GMDAwMCwNCj4gDQo+ICsgIE1TUl9JQTMyX01UUlJfRklY NEtfRjgwMDANCj4gDQo+ICt9Ow0KPiANCj4gK1NUQVRJQ19BU1NFUlQgKA0KPiANCj4gKyAgKEFS UkFZX1NJWkUgKG1GaXhlZE10cnJzSW5kZXgpID09DQo+IE1UUlJfTlVNQkVSX09GX0ZJWEVEX01U UlIpLA0KPiANCj4gKyAgImdGaXhlZE10cnJJbmRleCBkb2VzIE5PVCBjb250YWluIGFsbCB0aGUg Zml4ZWQNCj4gTVRSUnMhIg0KPiANCj4gKyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsNCj4gDQo+ICtD SEFSOCAqbUNhY2hlRGVzY3JpcHRpb25bXSA9IHsgIlVDIiwgIldDIiwgIk4vQSIsDQo+ICJOL0Ei LCAiV1QiLCAiV1AiLCAiV0IiIH07DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBDb21w YXJlIHRoZSBhY3R1YWwgbWVtb3J5IHJhbmdlcyBhZ2FpbnN0IGV4cGVjdGVkDQo+IG1lbW9yeSBy YW5nZXMgYW5kIHJldHVybiBQQVNTIHdoZW4gdGhleSBtYXRjaC4NCj4gDQo+ICsNCj4gDQo+ICsg IEBwYXJhbSBFeHBlY3RlZE1lbW9yeVJhbmdlcyAgICAgRXhwZWN0ZWQgbWVtb3J5DQo+IHJhbmdl cy4NCj4gDQo+ICsgIEBwYXJhbSBFeHBlY3RlZE1lbW9yeVJhbmdlQ291bnQgQ291bnQgb2YgZXhw ZWN0ZWQNCj4gbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBBY3R1YWxSYW5nZXMgICAg ICAgICAgICAgQWN0dWFsIG1lbW9yeQ0KPiByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gQWN0dWFs UmFuZ2VDb3VudCAgICAgICAgIENvdW50IG9mIGFjdHVhbA0KPiBtZW1vcnkgcmFuZ2VzLg0KPiAN Cj4gKw0KPiANCj4gKyAgQHJldHZhbCBVTklUX1RFU1RfUEFTU0VEICBUZXN0IHBhc3NlZC4NCj4g DQo+ICsgIEByZXR2YWwgb3RoZXJzICAgICAgICAgICAgVGVzdCBmYWlsZWQuDQo+IA0KPiArKiov DQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK1ZlcmlmeU1lbW9yeVJhbmdlcyAoDQo+ IA0KPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAgKkV4cGVjdGVkTWVtb3J5UmFuZ2VzLA0KPiAN Cj4gKyAgSU4gVUlOVE4gICAgICAgICAgICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VDb3VudCwNCj4g DQo+ICsgIElOIE1UUlJfTUVNT1JZX1JBTkdFICAqQWN0dWFsUmFuZ2VzLA0KPiANCj4gKyAgSU4g VUlOVE4gICAgICAgICAgICAgIEFjdHVhbFJhbmdlQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7 DQo+IA0KPiArICBVSU5UTiAgSW5kZXg7DQo+IA0KPiArICBVVF9BU1NFUlRfRVFVQUwgKEV4cGVj dGVkTWVtb3J5UmFuZ2VDb3VudCwNCj4gQWN0dWFsUmFuZ2VDb3VudCk7DQo+IA0KPiArICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBFeHBlY3RlZE1lbW9yeVJhbmdlQ291bnQ7DQo+IEluZGV4Kysp IHsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VRVUFMDQo+IChFeHBlY3RlZE1lbW9yeVJhbmdlc1tJ bmRleF0uQmFzZUFkZHJlc3MsDQo+IEFjdHVhbFJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3MpOw0K PiANCj4gKyAgICBVVF9BU1NFUlRfRVFVQUwNCj4gKEV4cGVjdGVkTWVtb3J5UmFuZ2VzW0luZGV4 XS5MZW5ndGgsDQo+IEFjdHVhbFJhbmdlc1tJbmRleF0uTGVuZ3RoKTsNCj4gDQo+ICsgICAgVVRf QVNTRVJUX0VRVUFMIChFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uVHlwZSwNCj4gQWN0dWFs UmFuZ2VzW0luZGV4XS5UeXBlKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVy biBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ ICsgIER1bXAgdGhlIG1lbW9yeSByYW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gUmFu Z2VzICAgICAgIE1lbW9yeSByYW5nZXMgdG8gZHVtcC4NCj4gDQo+ICsgIEBwYXJhbSBSYW5nZUNv dW50ICAgQ291bnQgb2YgbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsqKi8NCj4gDQo+ICtWT0lEDQo+ IA0KPiArRHVtcE1lbW9yeVJhbmdlcyAoDQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5HRSAgICAq UmFuZ2VzLA0KPiANCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgUmFuZ2VDb3VudA0KPiANCj4g KyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlROICAgICBJbmRleDsNCj4gDQo+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IFJhbmdlQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ICsgICAgVVRf TE9HX0lORk8gKCJcdHsgMHglMDE2bGx4LCAweCUwMTZsbHgsICVhIH0sXG4iLA0KPiBSYW5nZXNb SW5kZXhdLkJhc2VBZGRyZXNzLCBSYW5nZXNbSW5kZXhdLkxlbmd0aCwNCj4gbUNhY2hlRGVzY3Jp cHRpb25bUmFuZ2VzW0luZGV4XS5UeXBlXSk7DQo+IA0KPiArICB9DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAg R2VuZXJhdGUgcmFuZG9tIGNvdW50IG9mIE1UUlJzIGZvciBlYWNoIGNhY2hlIHR5cGUuDQo+IA0K PiArDQo+IA0KPiArICBAcGFyYW0gVG90YWxDb3VudCBUb3RhbCBNVFJSIGNvdW50Lg0KPiANCj4g KyAgQHBhcmFtIFVjQ291bnQgICAgUmV0dXJuIGNvdW50IG9mIFVuY2FjaGVhYmxlIHR5cGUuDQo+ IA0KPiArICBAcGFyYW0gV3RDb3VudCAgICBSZXR1cm4gY291bnQgb2YgV3JpdGUgVGhyb3VnaA0K PiB0eXBlLg0KPiANCj4gKyAgQHBhcmFtIFdiQ291bnQgICAgUmV0dXJuIGNvdW50IG9mIFdyaXRl IEJhY2sgdHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBXcENvdW50ICAgIFJldHVybiBjb3VudCBvZiBX cml0ZSBQcm90ZWN0ZWQNCj4gdHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBXY0NvdW50ICAgIFJldHVy biBjb3VudCBvZiBXcml0ZSBDb21iaW5pbmcNCj4gdHlwZS4NCj4gDQo+ICsqKi8NCj4gDQo+ICtW T0lEDQo+IA0KPiArR2VuZXJhdGVSYW5kb21NZW1vcnlUeXBlQ29tYmluYXRpb24gKA0KPiANCj4g KyAgSU4gIFVJTlQzMiBUb3RhbENvdW50LA0KPiANCj4gKyAgT1VUIFVJTlQzMiAqVWNDb3VudCwN Cj4gDQo+ICsgIE9VVCBVSU5UMzIgKld0Q291bnQsDQo+IA0KPiArICBPVVQgVUlOVDMyICpXYkNv dW50LA0KPiANCj4gKyAgT1VUIFVJTlQzMiAqV3BDb3VudCwNCj4gDQo+ICsgIE9VVCBVSU5UMzIg KldjQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBVSU5UTiAgSW5kZXg7DQo+ IA0KPiArICBVSU5UMzIgVG90YWxNdHJyQ291bnQ7DQo+IA0KPiArICBVSU5UMzIgKkNvdW50UGVy VHlwZVs1XTsNCj4gDQo+ICsNCj4gDQo+ICsgIENvdW50UGVyVHlwZVswXSA9IFVjQ291bnQ7DQo+ IA0KPiArICBDb3VudFBlclR5cGVbMV0gPSBXdENvdW50Ow0KPiANCj4gKyAgQ291bnRQZXJUeXBl WzJdID0gV2JDb3VudDsNCj4gDQo+ICsgIENvdW50UGVyVHlwZVszXSA9IFdwQ291bnQ7DQo+IA0K PiArICBDb3VudFBlclR5cGVbNF0gPSBXY0NvdW50Ow0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4g DQo+ICsgIC8vIEluaXRpYWxpemUgdGhlIGNvdW50IG9mIGVhY2ggY2FjaGUgdHlwZSB0byAwLg0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFSUkFZX1NJWkUg KENvdW50UGVyVHlwZSk7DQo+IEluZGV4KyspIHsNCj4gDQo+ICsgICAgKihDb3VudFBlclR5cGVb SW5kZXhdKSA9IDA7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAg Ly8gUGljayBhIHJhbmRvbSBjb3VudCBvZiBNVFJScw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFRv dGFsTXRyckNvdW50ID0gUmFuZG9tMzIgKDEsIFRvdGFsQ291bnQpOw0KPiANCj4gKyAgZm9yIChJ bmRleCA9IDA7IEluZGV4IDwgVG90YWxNdHJyQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ICsgICAg Ly8NCj4gDQo+ICsgICAgLy8gRm9yIGVhY2ggb2YgdGhlbSwgcGljayBhIHJhbmRvbSBjYWNoZSB0 eXBlLg0KPiANCj4gKyAgICAvLw0KPiANCj4gKyAgICAoKihDb3VudFBlclR5cGVbUmFuZG9tMzIg KDAsIEFSUkFZX1NJWkUNCj4gKENvdW50UGVyVHlwZSkgLSAxKV0pKSsrOw0KPiANCj4gKyAgfQ0K PiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJy TGliIHNlcnZpY2UNCj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZSgpDQo+IA0KPiArDQo+IA0KPiAr ICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2 YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29t cGxldGVkIGFuZCB0aGUgdGVzdA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAgVU5J VF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZh aWxlZC4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0K PiArRUZJQVBJDQo+IA0KPiArVW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNl dHRpbmdzICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiAr ICApDQo+IA0KPiArew0KPiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqU3lzdGVt UGFyYW1ldGVyOw0KPiANCj4gKyAgUkVUVVJOX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+ IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFVjQ291bnQ7DQo+IA0KPiArICBVSU5U MzIgICAgICAgICAgICAgICAgICAgIFd0Q291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAg ICAgICAgICAgIFdiQ291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdw Q291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdjQ291bnQ7DQo+IA0K PiArDQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE10cnJJbmRleDsNCj4gDQo+ ICsgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgKlNjcmF0Y2g7DQo+IA0KPiArICBVSU5UTiAg ICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hTaXplOw0KPiANCj4gKyAgTVRSUl9TRVRUSU5HUyAg ICAgICAgICAgICBMb2NhbE10cnJzOw0KPiANCj4gKw0KPiANCj4gKyAgTVRSUl9NRU1PUllfUkFO R0UNCj4gUmF3TXRyclJhbmdlW01UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlJdOw0KPiANCj4g KyAgTVRSUl9NRU1PUllfUkFOR0UNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNbTVRSUl9OVU1CRVJf T0ZfRklYRURfTVRSUiAqIHNpemVvZg0KPiAoVUlOVDY0KSArIDIgKiBNVFJSX05VTUJFUl9PRl9W QVJJQUJMRV9NVFJSICsgMV07DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEV4 cGVjdGVkVmFyaWFibGVNdHJyVXNhZ2U7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQ7DQo+IA0KPiArDQo+IA0KPiArICBNVFJSX01F TU9SWV9SQU5HRQ0KPiBBY3R1YWxNZW1vcnlSYW5nZXNbTVRSUl9OVU1CRVJfT0ZfRklYRURfTVRS UiAgICogc2l6ZW9mDQo+IChVSU5UNjQpICsgMiAqIE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlIgKyAxXTsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQWN0dWFsVmFyaWFi bGVNdHJyVXNhZ2U7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFjdHVhbE1l bW9yeVJhbmdlc0NvdW50Ow0KPiANCj4gKw0KPiANCj4gKyAgTVRSUl9TRVRUSU5HUyAgICAgICAg ICAgICAqTXRycnNbMl07DQo+IA0KPiArDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIgPSAoTVRS Ul9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqKQ0KPiBDb250ZXh0Ow0KPiANCj4gKyAgR2VuZXJhdGVS YW5kb21NZW1vcnlUeXBlQ29tYmluYXRpb24gKA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0ZXIt PlZhcmlhYmxlTXRyckNvdW50IC0gUGF0Y2hQY2RHZXQzMg0KPiAoUGNkQ3B1TnVtYmVyT2ZSZXNl cnZlZFZhcmlhYmxlTXRycnMpLA0KPiANCj4gKyAgICAmVWNDb3VudCwgJld0Q291bnQsICZXYkNv dW50LCAmV3BDb3VudCwgJldjQ291bnQNCj4gDQo+ICsgICAgKTsNCj4gDQo+ICsgIEdlbmVyYXRl VmFsaWRBbmRDb25maWd1cmFibGVNdHJyUGFpcnMgKA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0 ZXItPlBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IFJhd010cnJSYW5nZSwNCj4gDQo+ICsgICAgVWND b3VudCwgV3RDb3VudCwgV2JDb3VudCwgV3BDb3VudCwgV2NDb3VudA0KPiANCj4gKyAgICApOw0K PiANCj4gKw0KPiANCj4gKyAgRXhwZWN0ZWRWYXJpYWJsZU10cnJVc2FnZSA9IFVjQ291bnQgKyBX dENvdW50ICsNCj4gV2JDb3VudCArIFdwQ291bnQgKyBXY0NvdW50Ow0KPiANCj4gKyAgRXhwZWN0 ZWRNZW1vcnlSYW5nZXNDb3VudCA9IEFSUkFZX1NJWkUNCj4gKEV4cGVjdGVkTWVtb3J5UmFuZ2Vz KTsNCj4gDQo+ICsgIEdldEVmZmVjdGl2ZU1lbW9yeVJhbmdlcyAoDQo+IA0KPiArICAgIFN5c3Rl bVBhcmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZSwNCj4gDQo+ICsgICAgU3lzdGVtUGFyYW1ldGVy LT5QaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiANCj4gKyAgICBSYXdNdHJyUmFuZ2UsIEV4cGVjdGVk VmFyaWFibGVNdHJyVXNhZ2UsDQo+IA0KPiArICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzLCAmRXhw ZWN0ZWRNZW1vcnlSYW5nZXNDb3VudA0KPiANCj4gKyAgICApOw0KPiANCj4gKw0KPiANCj4gKyAg VVRfTE9HX0lORk8gKA0KPiANCj4gKyAgICAiVG90YWwgTVRSUiBbJWRdOiBVQz0lZCwgV1Q9JWQs IFdCPSVkLCBXUD0lZCwNCj4gV0M9JWRcbiIsDQo+IA0KPiArICAgIEV4cGVjdGVkVmFyaWFibGVN dHJyVXNhZ2UsIFVjQ291bnQsIFd0Q291bnQsDQo+IFdiQ291bnQsIFdwQ291bnQsIFdjQ291bnQN Cj4gDQo+ICsgICAgKTsNCj4gDQo+ICsgIFVUX0xPR19JTkZPICgiLS0tIEV4cGVjdGVkIE1lbW9y eSBSYW5nZXMgWyVkXSAtLS0NCj4gXG4iLCBFeHBlY3RlZE1lbW9yeVJhbmdlc0NvdW50KTsNCj4g DQo+ICsgIER1bXBNZW1vcnlSYW5nZXMgKEV4cGVjdGVkTWVtb3J5UmFuZ2VzLA0KPiBFeHBlY3Rl ZE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBE ZWZhdWx0IGNhY2hlIHR5cGUgaXMgYWx3YXlzIGFuIElOUFVUDQo+IA0KPiArICAvLw0KPiANCj4g KyAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiANCj4gKyAg TG9jYWxNdHJycy5NdHJyRGVmVHlwZSA9IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZQ0KPiAoKTsN Cj4gDQo+ICsgIFNjcmF0Y2hTaXplICAgICAgICAgICAgPSBTQ1JBVENIX0JVRkZFUl9TSVpFOw0K PiANCj4gKyAgTXRycnNbMF0gICAgICAgICAgICAgICA9ICZMb2NhbE10cnJzOw0KPiANCj4gKyAg TXRycnNbMV0gICAgICAgICAgICAgICA9IE5VTEw7DQo+IA0KPiArDQo+IA0KPiArICBmb3IgKE10 cnJJbmRleCA9IDA7IE10cnJJbmRleCA8IEFSUkFZX1NJWkUgKE10cnJzKTsNCj4gTXRyckluZGV4 KyspIHsNCj4gDQo+ICsgICAgU2NyYXRjaCA9IGNhbGxvYyAoU2NyYXRjaFNpemUsIHNpemVvZiAo VUlOVDgpKTsNCj4gDQo+ICsgICAgU3RhdHVzID0gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10 cnJTZXR0aW5ncw0KPiAoTXRycnNbTXRyckluZGV4XSwgU2NyYXRjaCwgJlNjcmF0Y2hTaXplLA0K PiBFeHBlY3RlZE1lbW9yeVJhbmdlcywgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0K PiArICAgIGlmIChTdGF0dXMgPT0gUkVUVVJOX0JVRkZFUl9UT09fU01BTEwpIHsNCj4gDQo+ICsg ICAgICBTY3JhdGNoID0gcmVhbGxvYyAoU2NyYXRjaCwgU2NyYXRjaFNpemUpOw0KPiANCj4gKyAg ICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVzSW5NdHJyU2V0dGluZ3MNCj4gKE10 cnJzW010cnJJbmRleF0sIFNjcmF0Y2gsICZTY3JhdGNoU2l6ZSwNCj4gRXhwZWN0ZWRNZW1vcnlS YW5nZXMsIEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgICB9DQo+IA0KPiAr ICAgIFVUX0FTU0VSVF9TVEFUVVNfRVFVQUwgKFN0YXR1cywgUkVUVVJOX1NVQ0NFU1MpOw0KPiAN Cj4gKw0KPiANCj4gKyAgICBpZiAoTXRycnNbTXRyckluZGV4XSA9PSBOVUxMKSB7DQo+IA0KPiAr ICAgICAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiANCj4g KyAgICAgIE10cnJHZXRBbGxNdHJycyAoJkxvY2FsTXRycnMpOw0KPiANCj4gKyAgICB9DQo+IA0K PiArICAgIEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50ID0gQVJSQVlfU0laRQ0KPiAoQWN0dWFsTWVt b3J5UmFuZ2VzKTsNCj4gDQo+ICsgICAgQ29sbGVjdFRlc3RSZXN1bHQgKA0KPiANCj4gKyAgICAg IFN5c3RlbVBhcmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZSwNCj4gU3lzdGVtUGFyYW1ldGVyLT5Q aHlzaWNhbEFkZHJlc3NCaXRzLCBTeXN0ZW1QYXJhbWV0ZXItDQo+ID5WYXJpYWJsZU10cnJDb3Vu dCwNCj4gDQo+ICsgICAgICAmTG9jYWxNdHJycywgQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiAmQWN0 dWFsTWVtb3J5UmFuZ2VzQ291bnQsICZBY3R1YWxWYXJpYWJsZU10cnJVc2FnZQ0KPiANCj4gKyAg ICAgICk7DQo+IA0KPiArDQo+IA0KPiArICAgIFVUX0xPR19JTkZPICgiLS0tIEFjdHVhbCBNZW1v cnkgUmFuZ2VzIFslZF0gLS0tDQo+IFxuIiwgQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiAN Cj4gKyAgICBEdW1wTWVtb3J5UmFuZ2VzIChBY3R1YWxNZW1vcnlSYW5nZXMsDQo+IEFjdHVhbE1l bW9yeVJhbmdlc0NvdW50KTsNCj4gDQo+ICsgICAgVmVyaWZ5TWVtb3J5UmFuZ2VzIChFeHBlY3Rl ZE1lbW9yeVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudCwgQWN0dWFsTWVtb3J5 UmFuZ2VzLA0KPiBBY3R1YWxNZW1vcnlSYW5nZXNDb3VudCk7DQo+IA0KPiArICAgIFVUX0FTU0VS VF9UUlVFIChFeHBlY3RlZFZhcmlhYmxlTXRyclVzYWdlID49DQo+IEFjdHVhbFZhcmlhYmxlTXRy clVzYWdlKTsNCj4gDQo+ICsNCj4gDQo+ICsgICAgWmVyb01lbSAoJkxvY2FsTXRycnMsIHNpemVv ZiAoTG9jYWxNdHJycykpOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgZnJlZSAoU2Ny YXRjaCk7DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBUZXN0IHJvdXRpbmUgdG8gY2hlY2sg d2hldGhlciBpbnZhbGlkIGJhc2Uvc2l6ZSBjYW4NCj4gYmUgcmVqZWN0ZWQuDQo+IA0KPiArDQo+ IA0KPiArICBAcGFyYW0gQ29udGV4dCAgIFBvaW50ZXIgdG8NCj4gTVRSUl9MSUJfU1lTVEVNX1BB UkFNRVRFUi4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR1cm4gVGVzdCBzdGF0dXMuDQo+IA0KPiAr KiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRU ZXN0SW52YWxpZE1lbW9yeUxheW91dHMgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQg ICAgICAgICAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIE1UUlJfTElC X1NZU1RFTV9QQVJBTUVURVIgICAgICpTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBNVFJSX01F TU9SWV9SQU5HRQ0KPiBSYW5nZXNbTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiAqIDIgKyAx XTsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAgIFJhbmdlQ291bnQ7DQo+ IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAgICBNYXhBZGRyZXNzOw0KPiANCj4g KyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBVSU5UNjQg ICAgICAgICAgICAgICAgICAgICAgICBCYXNlQWRkcmVzczsNCj4gDQo+ICsgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgICAgIExlbmd0aDsNCj4gDQo+ICsgIFJFVFVSTl9TVEFUVVMgICAgICAg ICAgICAgICAgIFN0YXR1czsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICAg IFNjcmF0Y2hTaXplOw0KPiANCj4gKw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyID0gKE1UUlJf TElCX1NZU1RFTV9QQVJBTUVURVIgKikNCj4gQ29udGV4dDsNCj4gDQo+ICsNCj4gDQo+ICsgIFJh bmdlQ291bnQgPSBSYW5kb20zMiAoMSwgQVJSQVlfU0laRSAoUmFuZ2VzKSk7DQo+IA0KPiArICBN YXhBZGRyZXNzID0gMXVsbCA8PCBTeXN0ZW1QYXJhbWV0ZXItDQo+ID5QaHlzaWNhbEFkZHJlc3NC aXRzOw0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmFuZ2VDb3Vu dDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBkbyB7DQo+IA0KPiArICAgICAgQmFzZUFkZHJlc3Mg PSBSYW5kb202NCAoMCwgTWF4QWRkcmVzcyk7DQo+IA0KPiArICAgICAgTGVuZ3RoICAgICAgPSBS YW5kb202NCAoMSwgTWF4QWRkcmVzcyAtDQo+IEJhc2VBZGRyZXNzKTsNCj4gDQo+ICsgICAgfSB3 aGlsZSAoKChCYXNlQWRkcmVzcyAmIDB4RkZGKSA9PSAwKSB8fCAoKExlbmd0aA0KPiAmIDB4RkZG KSA9PSAwKSk7DQo+IA0KPiArDQo+IA0KPiArICAgIFJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3Mg PSBCYXNlQWRkcmVzczsNCj4gDQo+ICsgICAgUmFuZ2VzW0luZGV4XS5MZW5ndGggICAgICA9IExl bmd0aDsNCj4gDQo+ICsgICAgUmFuZ2VzW0luZGV4XS5UeXBlICAgICAgICA9DQo+IEdlbmVyYXRl UmFuZG9tQ2FjaGVUeXBlICgpOw0KPiANCj4gKw0KPiANCj4gKyAgICBTdGF0dXMgPSBNdHJyU2V0 TWVtb3J5QXR0cmlidXRlICgNCj4gDQo+ICsgICAgICBSYW5nZXNbSW5kZXhdLkJhc2VBZGRyZXNz LCBSYW5nZXNbSW5kZXhdLkxlbmd0aCwNCj4gUmFuZ2VzW0luZGV4XS5UeXBlDQo+IA0KPiArICAg ICAgKTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX1RSVUUgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSk7 DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBTY3JhdGNoU2l6ZSA9IDA7DQo+IA0KPiAr ICBTdGF0dXMgPSBNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0luTXRyclNldHRpbmdzDQo+IChOVUxM LCBOVUxMLCAmU2NyYXRjaFNpemUsIFJhbmdlcywgUmFuZ2VDb3VudCk7DQo+IA0KPiArICBVVF9B U1NFUlRfVFJVRSAoUkVUVVJOX0VSUk9SIChTdGF0dXMpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIHJl dHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4g DQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UgSXNNdHJyU3VwcG9ydGVkKCkNCj4g DQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0K PiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0 ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiAr ICBAcmV0dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFz c2VydGlvbiBoYXMgZmFpbGVkLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVT VF9TVEFUVVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdElzTXRyclN1cHBvcnRlZCAo DQo+IA0KPiArICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiAN Cj4gK3sNCj4gDQo+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIgIFN5c3RlbVBhcmFtZXRl cjsNCj4gDQo+ICsNCj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsICZtRGVmYXVs dFN5c3RlbVBhcmFtZXRlciwNCj4gc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ICsg IC8vDQo+IA0KPiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb2ZmIGluIENQVUlEIGxlYWYuDQo+IA0K PiArICAvLw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsN Cj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiAr ICBVVF9BU1NFUlRfRkFMU0UgKElzTXRyclN1cHBvcnRlZCAoKSk7DQo+IA0KPiArDQo+IA0KPiAr ICAvLw0KPiANCj4gKyAgLy8gTVRSUiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYsIGJ1dCBu byB2YXJpYWJsZQ0KPiBvciBmaXhlZCBNVFJScy4NCj4gDQo+ICsgIC8vDQo+IA0KPiArICBTeXN0 ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0 ZXIuVmFyaWFibGVNdHJyQ291bnQgPSAwOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVk TXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lz dGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9GQUxTRSAoSXNNdHJyU3VwcG9ydGVk ICgpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBNVFJSIGNhcGFiaWxpdHkg b24gaW4gQ1BVSUQgbGVhZiwgYnV0IG5vIHZhcmlhYmxlDQo+IE1UUlJzLg0KPiANCj4gKyAgLy8N Cj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsg IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IDA7DQo+IA0KPiArICBTeXN0ZW1Q YXJhbWV0ZXIuRml4ZWRNdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIEluaXRpYWxpemVN dHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9BU1NFUlRfRkFMU0UgKElz TXRyclN1cHBvcnRlZCAoKSk7DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gTVRS UiBjYXBhYmlsaXR5IG9uIGluIENQVUlEIGxlYWYsIGJ1dCBubyBmaXhlZA0KPiBNVFJScy4NCj4g DQo+ICsgIC8vDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IFRSVUU7 DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQgPSA3Ow0KPiANCj4g KyAgU3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAg SW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFVUX0FTU0VS VF9GQUxTRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0K PiArICAvLyBNVFJSIGNhcGFiaWxpdHkgb24gaW4gQ1BVSUQgbGVhZiB3aXRoIGJvdGgNCj4gdmFy aWFibGUgYW5kIGZpeGVkIE1UUlJzLg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFt ZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJp YWJsZU10cnJDb3VudCA9IDc7DQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuRml4ZWRNdHJyU3Vw cG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFt ZXRlcik7DQo+IA0KPiArICBVVF9BU1NFUlRfVFJVRSAoSXNNdHJyU3VwcG9ydGVkICgpKTsNCj4g DQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UgR2V0 VmFyaWFibGVNdHJyQ291bnQoKQ0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2luXSAgQ29udGV4 dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfUEFTU0VE ICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQgdGhlIHRlc3QN Cj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB3YXMN Cj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJPUl9URVNUX0ZB SUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+IA0KPiArDQo+IA0K PiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1Vu aXRUZXN0R2V0VmFyaWFibGVNdHJyQ291bnQgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRF WFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIFJlc3VsdDsNCj4gDQo+ICsgIE1UUlJfTElCX1NZU1RFTV9QQVJBTUVURVIg U3lzdGVtUGFyYW1ldGVyOw0KPiANCj4gKw0KPiANCj4gKyAgQ29weU1lbSAoJlN5c3RlbVBhcmFt ZXRlciwgJm1EZWZhdWx0U3lzdGVtUGFyYW1ldGVyLA0KPiBzaXplb2YgKFN5c3RlbVBhcmFtZXRl cikpOw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIElmIE1UUlIgY2FwYWJpbGl0eSBvZmYgaW4g Q1BVSUQgbGVhZiwgdGhlbiB0aGUNCj4gY291bnQgaXMgYWx3YXlzIDAuDQo+IA0KPiArICAvLw0K PiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gDQo+ICsg IGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gMTsNCj4gU3lzdGVtUGFy YW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlI7DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCsrKSB7DQo+IA0KPiArICAg IEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICAgIFJlc3Vs dCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAgICBVVF9BU1NFUlRfRVFVQUwg KFJlc3VsdCwgMCk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAg Ly8gVHJ5IGFsbCBzdXBwb3J0ZWQgdmFyaWFibGUgTVRSUiBjb3VudHMuDQo+IA0KPiArICAvLyBJ ZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRS UiwgdGhlbiBhbiBBU1NFUlQoKQ0KPiANCj4gKyAgLy8gaXMgZ2VuZXJhdGVkLg0KPiANCj4gKyAg Ly8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ ICsgIGZvciAoU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0gMTsNCj4gU3lzdGVt UGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50IDw9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxF X01UUlI7DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCsrKSB7DQo+IA0KPiAr ICAgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICAgIFJl c3VsdCA9IEdldFZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAgICBVVF9BU1NFUlRfRVFV QUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50KTsNCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBFeHBlY3QgQVNTRVJUKCkg aWYgdmFyaWFibGUgTVRSUiBjb3VudCBpcyA+DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01U UlINCj4gDQo+ICsgIC8vDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291 bnQgPQ0KPiBNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSICsgMTsNCj4gDQo+ICsgIEluaXRp YWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9FWFBFQ1RfQVNT RVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50ICgpLA0KPiBOVUxMKTsNCj4gDQo+ICsN Cj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsg IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCA9IE1BWF9VSU5UODsNCj4gDQo+ICsg IEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBVVF9FWFBF Q1RfQVNTRVJUX0ZBSUxVUkUgKEdldFZhcmlhYmxlTXRyckNvdW50ICgpLA0KPiBOVUxMKTsNCj4g DQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4g R2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCgpDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1b aW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRf VEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFu ZCB0aGUgdGVzdA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VS Uk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4g DQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJQVBJ DQo+IA0KPiArVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgNCj4gDQo+ICsg IElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiAN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBSZXN1bHQ7DQo+IA0KPiArICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFJlc2VydmVkTXRycnM7DQo+IA0KPiArICBNVFJSX0xJQl9TWVNU RU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ICsNCj4gDQo+ICsgIENvcHlNZW0g KCZTeXN0ZW1QYXJhbWV0ZXIsICZtRGVmYXVsdFN5c3RlbVBhcmFtZXRlciwNCj4gc2l6ZW9mIChT eXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAo JlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gUG9zaXRpdmUgdGVz dCBjYXNlcyBmb3IgVkNOVCA9IDEwIGFuZCBSZXNlcnZlZA0KPiBQQ0QgaW4gcmFuZ2UgMC4uMTAN Cj4gDQo+ICsgIC8vDQo+IA0KPiArICBmb3IgKFJlc2VydmVkTXRycnMgPSAwOyBSZXNlcnZlZE10 cnJzIDw9DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgUmVzZXJ2ZWRNdHJy cysrKSB7DQo+IA0KPiArICAgIFBhdGNoUGNkU2V0MzINCj4gKFBjZENwdU51bWJlck9mUmVzZXJ2 ZWRWYXJpYWJsZU10cnJzLCBSZXNlcnZlZE10cnJzKTsNCj4gDQo+ICsgICAgUmVzdWx0ID0gR2V0 RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAoKTsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VRVUFM IChSZXN1bHQsDQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCAtIFJlc2VydmVk TXRycnMpOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIE5l Z2F0aXZlIHRlc3QgY2FzZXMgd2hlbiBSZXNlcnZlZCBQQ0QgaXMgbGFyZ2VyDQo+IHRoYW4gVkNO VA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAoUmVzZXJ2ZWRNdHJycyA9DQo+IFN5c3RlbVBh cmFtZXRlci5WYXJpYWJsZU10cnJDb3VudCArIDE7IFJlc2VydmVkTXRycnMgPD0NCj4gMjU1OyBS ZXNlcnZlZE10cnJzKyspIHsNCj4gDQo+ICsgICAgUGF0Y2hQY2RTZXQzMg0KPiAoUGNkQ3B1TnVt YmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMsIFJlc2VydmVkTXRycnMpOw0KPiANCj4gKyAgICBS ZXN1bHQgPSBHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAgICBVVF9B U1NFUlRfRVFVQUwgKFJlc3VsdCwgMCk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAv Lw0KPiANCj4gKyAgLy8gTmVnYXRpdmUgdGVzdCBjYXNlcyB3aGVuIFJlc2VydmVkIFBDRCBpcyBs YXJnZXINCj4gdGhhbiBWQ05UDQo+IA0KPiArICAvLw0KPiANCj4gKyAgUGF0Y2hQY2RTZXQzMiAo UGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMsDQo+IE1BWF9VSU5UMzIpOw0KPiAN Cj4gKyAgUmVzdWx0ID0gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAoKTsNCj4gDQo+ICsg IFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAwKTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0K PiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBNVFJScyBhcmUgbm90IHN1cHBvcnRlZA0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gRkFM U0U7DQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiAN Cj4gKyAgUGF0Y2hQY2RTZXQzMiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmxlTXRycnMs DQo+IDIpOw0KPiANCj4gKyAgUmVzdWx0ID0gR2V0RmlybXdhcmVWYXJpYWJsZU10cnJDb3VudCAo KTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAwKTsNCj4gDQo+ICsNCj4gDQo+ ICsgIC8vDQo+IA0KPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBGaXhlZCBNVFJScyBh cmUgbm90DQo+IHN1cHBvcnRlZA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRl ci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10 cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3Rl bVBhcmFtZXRlcik7DQo+IA0KPiArICBQYXRjaFBjZFNldDMyIChQY2RDcHVOdW1iZXJPZlJlc2Vy dmVkVmFyaWFibGVNdHJycywNCj4gMik7DQo+IA0KPiArICBSZXN1bHQgPSBHZXRGaXJtd2FyZVZh cmlhYmxlTXRyckNvdW50ICgpOw0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIDAp Ow0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIEV4cGVjdCBBU1NFUlQoKSBpZiB2 YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUg0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10cnJTdXBwb3J0ZWQg PSBUUlVFOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRyckNvdW50ID0NCj4g TVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiArIDE7DQo+IA0KPiArICBJbml0aWFsaXplTXRy clJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4gKyAgVVRfRVhQRUNUX0FTU0VSVF9GQUlM VVJFDQo+IChHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50ICgpLCBOVUxMKTsNCj4gDQo+ICsN Cj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4g DQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UNCj4gTXRyckdl dE1lbW9yeUF0dHJpYnV0ZSgpDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW1baW5dICBDb250ZXh0 ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQg ICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMgY29tcGxldGVkIGFuZCB0aGUgdGVzdA0K PiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIHdhcw0K PiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJ TEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFzIGZhaWxlZC4NCj4gDQo+ICsNCj4gDQo+ ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArVW5p dFRlc3RNdHJyR2V0TWVtb3J5QXR0cmlidXRlICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05U RVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgcmV0dXJuIFVOSVRf VEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgVW5p dCB0ZXN0IG9mIE10cnJMaWIgc2VydmljZSBNdHJyR2V0Rml4ZWRNdHJyKCkNCj4gDQo+ICsNCj4g DQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0KPiANCj4gKyAg QHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhh cyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiArICBAcmV0dmFs ICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBo YXMgZmFpbGVkLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMN Cj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10cnJHZXRGaXhlZE10cnIgKA0KPiANCj4g KyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+ IA0KPiArICBNVFJSX0ZJWEVEX1NFVFRJTkdTICAgICAgICpSZXN1bHQ7DQo+IA0KPiArICBNVFJS X0ZJWEVEX1NFVFRJTkdTICAgICAgIEV4cGVjdGVkRml4ZWRTZXR0aW5nczsNCj4gDQo+ICsgIE1U UlJfRklYRURfU0VUVElOR1MgICAgICAgRml4ZWRTZXR0aW5nczsNCj4gDQo+ICsgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAg ICAgIE1zckluZGV4Ow0KPiANCj4gKyAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBCeXRlSW5k ZXg7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgIE1zclZhbHVlOw0KPiANCj4g KyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiBTeXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArDQo+ IA0KPiArICBDb3B5TWVtICgmU3lzdGVtUGFyYW1ldGVyLCAmbURlZmF1bHRTeXN0ZW1QYXJhbWV0 ZXIsDQo+IHNpemVvZiAoU3lzdGVtUGFyYW1ldGVyKSk7DQo+IA0KPiArICBJbml0aWFsaXplTXRy clJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFNldCBy YW5kb20gY2FjaGUgdHlwZSB0byBkaWZmZXJlbnQgcmFuZ2VzIHVuZGVyDQo+IDFNQiBhbmQgbWFr ZSBzdXJlDQo+IA0KPiArICAvLyB0aGUgZml4ZWQgTVRSUiBzZXR0aW5ncyBhcmUgZXhwZWN0ZWQu DQo+IA0KPiArICAvLyBUcnkgMTAwIHRpbWVzLg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAo SW5kZXggPSAwOyBJbmRleCA8IDEwMDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBmb3IgKE1zcklu ZGV4ID0gMDsgTXNySW5kZXggPCBBUlJBWV9TSVpFDQo+IChtRml4ZWRNdHJyc0luZGV4KTsgTXNy SW5kZXgrKykgew0KPiANCj4gKyAgICAgIE1zclZhbHVlID0gMDsNCj4gDQo+ICsgICAgICBmb3Ig KEJ5dGVJbmRleCA9IDA7IEJ5dGVJbmRleCA8IHNpemVvZiAoVUlOVDY0KTsNCj4gQnl0ZUluZGV4 KyspIHsNCj4gDQo+ICsgICAgICAgIE1zclZhbHVlID0gTXNyVmFsdWUgfCBMU2hpZnRVNjQNCj4g KEdlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgpLCBCeXRlSW5kZXggKiA4KTsNCj4gDQo+ICsgICAg ICB9DQo+IA0KPiArICAgICAgRXhwZWN0ZWRGaXhlZFNldHRpbmdzLk10cnJbTXNySW5kZXhdID0g TXNyVmFsdWU7DQo+IA0KPiArICAgICAgQXNtV3JpdGVNc3I2NCAobUZpeGVkTXRycnNJbmRleFtN c3JJbmRleF0sDQo+IE1zclZhbHVlKTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKw0KPiANCj4gKyAg ICBSZXN1bHQgPSBNdHJyR2V0Rml4ZWRNdHJyICgmRml4ZWRTZXR0aW5ncyk7DQo+IA0KPiArICAg IFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAmRml4ZWRTZXR0aW5ncyk7DQo+IA0KPiArICAgIFVU X0FTU0VSVF9NRU1fRVFVQUwgKCZGaXhlZFNldHRpbmdzLA0KPiAmRXhwZWN0ZWRGaXhlZFNldHRp bmdzLCBzaXplb2YgKEZpeGVkU2V0dGluZ3MpKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ ICsgIC8vDQo+IA0KPiArICAvLyBOZWdhdGl2ZSB0ZXN0IGNhc2Ugd2hlbiBNVFJScyBhcmUgbm90 IHN1cHBvcnRlZA0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3Vw cG9ydGVkID0gRkFMU0U7DQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJh bWV0ZXIpOw0KPiANCj4gKw0KPiANCj4gKyAgWmVyb01lbSAoJkZpeGVkU2V0dGluZ3MsIHNpemVv ZiAoRml4ZWRTZXR0aW5ncykpOw0KPiANCj4gKyAgWmVyb01lbSAoJkV4cGVjdGVkRml4ZWRTZXR0 aW5ncywgc2l6ZW9mDQo+IChFeHBlY3RlZEZpeGVkU2V0dGluZ3MpKTsNCj4gDQo+ICsgIFJlc3Vs dCA9IE10cnJHZXRGaXhlZE10cnIgKCZGaXhlZFNldHRpbmdzKTsNCj4gDQo+ICsgIFVUX0FTU0VS VF9FUVVBTCAoUmVzdWx0LCAmRml4ZWRTZXR0aW5ncyk7DQo+IA0KPiArICBVVF9BU1NFUlRfTUVN X0VRVUFMICgmRXhwZWN0ZWRGaXhlZFNldHRpbmdzLA0KPiAmRml4ZWRTZXR0aW5ncywgc2l6ZW9m IChFeHBlY3RlZEZpeGVkU2V0dGluZ3MpKTsNCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklU X1RFU1RfUEFTU0VEOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVu aXQgdGVzdCBvZiBNdHJyTGliIHNlcnZpY2UgTXRyckdldEFsbE10cnJzKCkNCj4gDQo+ICsNCj4g DQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0KPiANCj4gKyAg QHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhh cyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiArICBAcmV0dmFs ICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBo YXMgZmFpbGVkLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMN Cj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10cnJHZXRBbGxNdHJycyAoDQo+IA0KPiAr ICBJTiBVTklUX1RFU1RfQ09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4g DQo+ICsgIE1UUlJfU0VUVElOR1MgICpSZXN1bHQ7DQo+IA0KPiArICBNVFJSX1NFVFRJTkdTICBN dHJyczsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1MgIEV4cGVjdGVkTXRycnM7DQo+IA0KPiArICBN VFJSX1ZBUklBQkxFX1NFVFRJTkcNCj4gVmFyaWFibGVNdHJyW01UUlJfTlVNQkVSX09GX1ZBUklB QkxFX01UUlJdOw0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgSW5kZXg7DQo+IA0KPiArDQo+IA0K PiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSIFN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ICsN Cj4gDQo+ICsgIENvcHlNZW0gKCZTeXN0ZW1QYXJhbWV0ZXIsICZtRGVmYXVsdFN5c3RlbVBhcmFt ZXRlciwNCj4gc2l6ZW9mIChTeXN0ZW1QYXJhbWV0ZXIpKTsNCj4gDQo+ICsgIEluaXRpYWxpemVN dHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArDQo+IA0KPiArICBmb3IgKEluZGV4 ID0gMDsgSW5kZXggPA0KPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQ7IEluZGV4 KyspIHsNCj4gDQo+ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpcg0KPiAoU3lzdGVtUGFyYW1l dGVyLlBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IEdlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgpLCAm VmFyaWFibGVNdHJyW0luZGV4XSwNCj4gTlVMTCk7DQo+IA0KPiArICAgIEFzbVdyaXRlTXNyNjQg KE1TUl9JQTMyX01UUlJfUEhZU0JBU0UwICsgKEluZGV4IDw8DQo+IDEpLCBWYXJpYWJsZU10cnJb SW5kZXhdLkJhc2UpOw0KPiANCj4gKyAgICBBc21Xcml0ZU1zcjY0IChNU1JfSUEzMl9NVFJSX1BI WVNNQVNLMCArIChJbmRleCA8PA0KPiAxKSwgVmFyaWFibGVNdHJyW0luZGV4XS5NYXNrKTsNCj4g DQo+ICsgIH0NCj4gDQo+ICsgIFJlc3VsdCA9IE10cnJHZXRBbGxNdHJycyAoJk10cnJzKTsNCj4g DQo+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVzdWx0LCAmTXRycnMpOw0KPiANCj4gKyAgVVRfQVNT RVJUX01FTV9FUVVBTCAoTXRycnMuVmFyaWFibGVzLk10cnIsDQo+IFZhcmlhYmxlTXRyciwgc2l6 ZW9mIChNVFJSX1ZBUklBQkxFX1NFVFRJTkcpICoNCj4gU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxl TXRyckNvdW50KTsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAvLyBOZWdhdGl2ZSB0 ZXN0IGNhc2Ugd2hlbiBNVFJScyBhcmUgbm90IHN1cHBvcnRlZA0KPiANCj4gKyAgLy8NCj4gDQo+ ICsgIFplcm9NZW0gKCZFeHBlY3RlZE10cnJzLCBzaXplb2YgKEV4cGVjdGVkTXRycnMpKTsNCj4g DQo+ICsgIFplcm9NZW0gKCZNdHJycywgc2l6ZW9mIChNdHJycykpOw0KPiANCj4gKw0KPiANCj4g KyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBGQUxTRTsNCj4gDQo+ICsgIEluaXRp YWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRlcik7DQo+IA0KPiArICBSZXN1bHQgPSBNdHJy R2V0QWxsTXRycnMgKCZNdHJycyk7DQo+IA0KPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwg Jk10cnJzKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9NRU1fRVFVQUwgKCZFeHBlY3RlZE10cnJzLCAm TXRycnMsIHNpemVvZg0KPiAoRXhwZWN0ZWRNdHJycykpOw0KPiANCj4gKw0KPiANCj4gKyAgLy8N Cj4gDQo+ICsgIC8vIEV4cGVjdCBBU1NFUlQoKSBpZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4N Cj4gTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5 c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFt ZXRlci5WYXJpYWJsZU10cnJDb3VudCA9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIg KyAxOw0KPiANCj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4g DQo+ICsgIFVUX0VYUEVDVF9BU1NFUlRfRkFJTFVSRSAoTXRyckdldEFsbE10cnJzICgmTXRycnMp LA0KPiBOVUxMKTsNCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBVTklUX1RFU1RfUEFTU0VEOw0K PiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFVuaXQgdGVzdCBvZiBNdHJy TGliIHNlcnZpY2UgTXRyclNldEFsbE10cnJzKCkNCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbVtp bl0gIENvbnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0KPiANCj4gKyAgQHJldHZhbCAgVU5JVF9U RVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+IGhhcyBjb21wbGV0ZWQgYW5k IHRoZSB0ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNhc2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RFU1RfRVJS T1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlvbiBoYXMgZmFpbGVkLg0KPiAN Cj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gDQo+ICtFRklBUEkN Cj4gDQo+ICtVbml0VGVzdE10cnJTZXRBbGxNdHJycyAoDQo+IA0KPiArICBJTiBVTklUX1RFU1Rf Q09OVEVYVCAgQ29udGV4dA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIE1UUlJfU0VU VElOR1MgICAgICAgICAgICAgICAgICAgKlJlc3VsdDsNCj4gDQo+ICsgIE1UUlJfU0VUVElOR1Mg ICAgICAgICAgICAgICAgICAgTXRycnM7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgICAgICAgIEluZGV4Ow0KPiANCj4gKyAgTVNSX0lBMzJfTVRSUl9ERUZfVFlQRV9SRUdJU1RF UiBEZWZhdWx0Ow0KPiANCj4gKw0KPiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiBT eXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArDQo+IA0KPiArICBDb3B5TWVtICgmU3lzdGVtUGFyYW1l dGVyLCAmbURlZmF1bHRTeXN0ZW1QYXJhbWV0ZXIsDQo+IHNpemVvZiAoU3lzdGVtUGFyYW1ldGVy KSk7DQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIpOw0KPiAN Cj4gKw0KPiANCj4gKyAgRGVmYXVsdC5VaW50NjQgPSAwOw0KPiANCj4gKyAgRGVmYXVsdC5CaXRz LkUgPSAxOw0KPiANCj4gKyAgRGVmYXVsdC5CaXRzLkZFID0gMTsNCj4gDQo+ICsgIERlZmF1bHQu Qml0cy5UeXBlID0gR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKCk7DQo+IA0KPiArDQo+IA0KPiAr ICBaZXJvTWVtICgmTXRycnMsIHNpemVvZiAoTXRycnMpKTsNCj4gDQo+ICsgIE10cnJzLk10cnJE ZWZUeXBlID0gRGVmYXVsdC5VaW50NjQ7DQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXgg PA0KPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFibGVNdHJyQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpcg0KPiAoU3lzdGVtUGFyYW1ldGVyLlBoeXNpY2Fs QWRkcmVzc0JpdHMsDQo+IEdlbmVyYXRlUmFuZG9tQ2FjaGVUeXBlICgpLA0KPiAmTXRycnMuVmFy aWFibGVzLk10cnJbSW5kZXhdLCBOVUxMKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsgIFJlc3VsdCA9 IE10cnJTZXRBbGxNdHJycyAoJk10cnJzKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVz dWx0LCAmTXRycnMpOw0KPiANCj4gKw0KPiANCj4gKyAgVVRfQVNTRVJUX0VRVUFMIChBc21SZWFk TXNyNjQNCj4gKE1TUl9JQTMyX01UUlJfREVGX1RZUEUpLCBNdHJycy5NdHJyRGVmVHlwZSk7DQo+ IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPA0KPiBTeXN0ZW1QYXJhbWV0ZXIuVmFyaWFi bGVNdHJyQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ICsgICAgVVRfQVNTRVJUX0VRVUFMIChBc21S ZWFkTXNyNjQNCj4gKE1TUl9JQTMyX01UUlJfUEhZU0JBU0UwICsgKEluZGV4IDw8IDEpKSwNCj4g TXRycnMuVmFyaWFibGVzLk10cnJbSW5kZXhdLkJhc2UpOw0KPiANCj4gKyAgICBVVF9BU1NFUlRf RVFVQUwgKEFzbVJlYWRNc3I2NA0KPiAoTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzAgKyAoSW5kZXgg PDwgMSkpLA0KPiBNdHJycy5WYXJpYWJsZXMuTXRycltJbmRleF0uTWFzayk7DQo+IA0KPiArICB9 DQo+IA0KPiArDQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ICt9DQo+ IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNl DQo+IE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlhYmxlTXRycigpDQo+IA0KPiArDQo+IA0K PiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgIElnbm9yZWQNCj4gDQo+ICsNCj4gDQo+ICsgIEBy ZXR2YWwgIFVOSVRfVEVTVF9QQVNTRUQgICAgICAgICAgICAgVGhlIFVuaXQgdGVzdA0KPiBoYXMg Y29tcGxldGVkIGFuZCB0aGUgdGVzdA0KPiANCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjYXNlIHdhcw0KPiBzdWNjZXNzZnVsLg0KPiANCj4gKyAgQHJldHZhbCAg VU5JVF9URVNUX0VSUk9SX1RFU1RfRkFJTEVEICBBIHRlc3QgY2FzZQ0KPiBhc3NlcnRpb24gaGFz IGZhaWxlZC4NCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICtVTklUX1RFU1RfU1RBVFVTDQo+ IA0KPiArRUZJQVBJDQo+IA0KPiArVW5pdFRlc3RNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJp YWJsZU10cnIgKA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICAgICAg IFN5c3RlbVBhcmFtZXRlcjsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAgUmVzdWx0Ow0KPiANCj4gKyAgTVRSUl9WQVJJQUJMRV9TRVRUSU5HDQo+IFZhcmlhYmxlU2V0 dGluZ1tNVFJSX05VTUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gDQo+ICsgIFZBUklBQkxFX01U UlINCj4gVmFyaWFibGVNdHJyW01UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlJdOw0KPiANCj4g KyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZE10cnJCaXRzTWFzazsNCj4g DQo+ICsgIFVJTlQ2NA0KPiBWYWxpZE10cnJBZGRyZXNzTWFzazsNCj4gDQo+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX1BI WVNCQVNFX1JFR0lTVEVSIEJhc2U7DQo+IA0KPiArICBNU1JfSUEzMl9NVFJSX1BIWVNNQVNLX1JF R0lTVEVSIE1hc2s7DQo+IA0KPiArDQo+IA0KPiArICBDb3B5TWVtICgmU3lzdGVtUGFyYW1ldGVy LCAmbURlZmF1bHRTeXN0ZW1QYXJhbWV0ZXIsDQo+IHNpemVvZiAoU3lzdGVtUGFyYW1ldGVyKSk7 DQo+IA0KPiArDQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIp Ow0KPiANCj4gKw0KPiANCj4gKyAgVmFsaWRNdHJyQml0c01hc2sgICAgPSAoMXVsbCA8PA0KPiBT eXN0ZW1QYXJhbWV0ZXIuUGh5c2ljYWxBZGRyZXNzQml0cykgLSAxOw0KPiANCj4gKyAgVmFsaWRN dHJyQWRkcmVzc01hc2sgPSBWYWxpZE10cnJCaXRzTWFzayAmDQo+IDB4ZmZmZmZmZmZmZmZmZjAw MFVMTDsNCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8DQo+IFN5c3Rl bVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBHZW5l cmF0ZVJhbmRvbU10cnJQYWlyDQo+IChTeXN0ZW1QYXJhbWV0ZXIuUGh5c2ljYWxBZGRyZXNzQml0 cywNCj4gR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKCksICZWYXJpYWJsZVNldHRpbmdbSW5kZXhd LA0KPiBOVUxMKTsNCj4gDQo+ICsgICAgQXNtV3JpdGVNc3I2NCAoTVNSX0lBMzJfTVRSUl9QSFlT QkFTRTAgKyAoSW5kZXggPDwNCj4gMSksIFZhcmlhYmxlU2V0dGluZ1tJbmRleF0uQmFzZSk7DQo+ IA0KPiArICAgIEFzbVdyaXRlTXNyNjQgKE1TUl9JQTMyX01UUlJfUEhZU01BU0swICsgKEluZGV4 IDw8DQo+IDEpLCBWYXJpYWJsZVNldHRpbmdbSW5kZXhdLk1hc2spOw0KPiANCj4gKyAgfQ0KPiAN Cj4gKyAgUmVzdWx0ID0gTXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFyaWFibGVNdHJyDQo+IChW YWxpZE10cnJCaXRzTWFzaywgVmFsaWRNdHJyQWRkcmVzc01hc2ssDQo+IFZhcmlhYmxlTXRycik7 DQo+IA0KPiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLlZh cmlhYmxlTXRyckNvdW50KTsNCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8DQo+IFN5c3RlbVBhcmFtZXRlci5WYXJpYWJsZU10cnJDb3VudDsgSW5kZXgrKykgew0KPiAN Cj4gKyAgICBCYXNlLlVpbnQ2NCAgICA9IFZhcmlhYmxlTXRycltJbmRleF0uQmFzZUFkZHJlc3M7 DQo+IA0KPiArICAgIEJhc2UuQml0cy5UeXBlID0gKFVJTlQzMikNCj4gVmFyaWFibGVNdHJyW0lu ZGV4XS5UeXBlOw0KPiANCj4gKyAgICBVVF9BU1NFUlRfRVFVQUwgKEJhc2UuVWludDY0LA0KPiBW YXJpYWJsZVNldHRpbmdbSW5kZXhdLkJhc2UpOw0KPiANCj4gKw0KPiANCj4gKyAgICBNYXNrLlVp bnQ2NCAgICA9IH4oVmFyaWFibGVNdHJyW0luZGV4XS5MZW5ndGggLSAxKQ0KPiAmIFZhbGlkTXRy ckJpdHNNYXNrOw0KPiANCj4gKyAgICBNYXNrLkJpdHMuViAgICA9IDE7DQo+IA0KPiArICAgIFVU X0FTU0VSVF9FUVVBTCAoTWFzay5VaW50NjQsDQo+IFZhcmlhYmxlU2V0dGluZ1tJbmRleF0uTWFz ayk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gTmVnYXRp dmUgdGVzdCBjYXNlIHdoZW4gTVRSUnMgYXJlIG5vdCBzdXBwb3J0ZWQNCj4gDQo+ICsgIC8vDQo+ IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIuTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAg SW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFJlc3VsdCA9 IE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlhYmxlTXRycg0KPiAoVmFsaWRNdHJyQml0c01h c2ssIFZhbGlkTXRyckFkZHJlc3NNYXNrLA0KPiBWYXJpYWJsZU10cnIpOw0KPiANCj4gKyAgVVRf QVNTRVJUX0VRVUFMIChSZXN1bHQsIDApOw0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsg IC8vIEV4cGVjdCBBU1NFUlQoKSBpZiB2YXJpYWJsZSBNVFJSIGNvdW50IGlzID4NCj4gTVRSUl9O VU1CRVJfT0ZfVkFSSUFCTEVfTVRSUg0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFt ZXRlci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5WYXJp YWJsZU10cnJDb3VudCA9DQo+IE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIgKyAxOw0KPiAN Cj4gKyAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFVU X0VYUEVDVF9BU1NFUlRfRkFJTFVSRQ0KPiAoTXRyckdldE1lbW9yeUF0dHJpYnV0ZUluVmFyaWFi bGVNdHJyDQo+IChWYWxpZE10cnJCaXRzTWFzaywgVmFsaWRNdHJyQWRkcmVzc01hc2ssDQo+IFZh cmlhYmxlTXRyciksIE5VTEwpOw0KPiANCj4gKw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9Q QVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgVW5pdCB0ZXN0 IG9mIE10cnJMaWIgc2VydmljZQ0KPiBNdHJyRGVidWdQcmludEFsbE10cnJzKCkNCj4gDQo+ICsN Cj4gDQo+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgSWdub3JlZA0KPiANCj4gKw0KPiANCj4g KyAgQHJldHZhbCAgVU5JVF9URVNUX1BBU1NFRCAgICAgICAgICAgICBUaGUgVW5pdCB0ZXN0DQo+ IGhhcyBjb21wbGV0ZWQgYW5kIHRoZSB0ZXN0DQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2Ugd2FzDQo+IHN1Y2Nlc3NmdWwuDQo+IA0KPiArICBAcmV0 dmFsICBVTklUX1RFU1RfRVJST1JfVEVTVF9GQUlMRUQgIEEgdGVzdCBjYXNlDQo+IGFzc2VydGlv biBoYXMgZmFpbGVkLg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFU VVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtVbml0VGVzdE10cnJEZWJ1Z1ByaW50QWxsTXRycnMg KA0KPiANCj4gKyAgSU4gVU5JVF9URVNUX0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4g DQo+ICt7DQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ICt9DQo+IA0K PiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+ IE10cnJHZXREZWZhdWx0TWVtb3J5VHlwZSgpLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtW2lu XSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBVTklUX1RF U1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRlZCBhbmQg dGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVTVF9FUlJP Ul9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQuDQo+IA0K PiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0K PiANCj4gK1VuaXRUZXN0TXRyckdldERlZmF1bHRNZW1vcnlUeXBlICgNCj4gDQo+ICsgIElOIFVO SVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX0NB Q0hFX1RZUEUgICAgUmVzdWx0Ow0KPiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiBT eXN0ZW1QYXJhbWV0ZXI7DQo+IA0KPiArICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFICAgIENhY2hl VHlwZVs1XTsNCj4gDQo+ICsNCj4gDQo+ICsgIENhY2hlVHlwZVswXSA9IENhY2hlVW5jYWNoZWFi bGU7DQo+IA0KPiArICBDYWNoZVR5cGVbMV0gPSBDYWNoZVdyaXRlQ29tYmluaW5nOw0KPiANCj4g KyAgQ2FjaGVUeXBlWzJdID0gQ2FjaGVXcml0ZVRocm91Z2g7DQo+IA0KPiArICBDYWNoZVR5cGVb M10gPSBDYWNoZVdyaXRlUHJvdGVjdGVkOw0KPiANCj4gKyAgQ2FjaGVUeXBlWzRdID0gQ2FjaGVX cml0ZUJhY2s7DQo+IA0KPiArDQo+IA0KPiArICBDb3B5TWVtICgmU3lzdGVtUGFyYW1ldGVyLCAm bURlZmF1bHRTeXN0ZW1QYXJhbWV0ZXIsDQo+IHNpemVvZiAoU3lzdGVtUGFyYW1ldGVyKSk7DQo+ IA0KPiArICAvLw0KPiANCj4gKyAgLy8gSWYgTVRSUnMgYXJlIHN1cHBvcnRlZCwgdGhlbiBhbHdh eXMgcmV0dXJuIHRoZQ0KPiBjYWNoZSB0eXBlIGluIHRoZSBNU1INCj4gDQo+ICsgIC8vIE1TUl9J QTMyX01UUlJfREVGX1RZUEUNCj4gDQo+ICsgIC8vDQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsg SW5kZXggPCBBUlJBWV9TSVpFIChDYWNoZVR5cGUpOw0KPiBJbmRleCsrKSB7DQo+IA0KPiArICAg IFN5c3RlbVBhcmFtZXRlci5EZWZhdWx0Q2FjaGVUeXBlID0NCj4gQ2FjaGVUeXBlW0luZGV4XTsN Cj4gDQo+ICsgICAgSW5pdGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ ICsgICAgUmVzdWx0ID0gTXRyckdldERlZmF1bHRNZW1vcnlUeXBlICgpOw0KPiANCj4gKyAgICBV VF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwNCj4gU3lzdGVtUGFyYW1ldGVyLkRlZmF1bHRDYWNoZVR5 cGUpOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIElmIE1U UlJzIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIGFsd2F5cyByZXR1cm4NCj4gQ2FjaGVVbmNhY2hl YWJsZQ0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5NdHJyU3VwcG9ydGVk ID0gRkFMU0U7DQo+IA0KPiArICBJbml0aWFsaXplTXRyclJlZ3MgKCZTeXN0ZW1QYXJhbWV0ZXIp Ow0KPiANCj4gKyAgUmVzdWx0ID0gTXRyckdldERlZmF1bHRNZW1vcnlUeXBlICgpOw0KPiANCj4g KyAgVVRfQVNTRVJUX0VRVUFMIChSZXN1bHQsIENhY2hlVW5jYWNoZWFibGUpOw0KPiANCj4gKw0K PiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLk10cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAg U3lzdGVtUGFyYW1ldGVyLkZpeGVkTXRyclN1cHBvcnRlZCA9IEZBTFNFOw0KPiANCj4gKyAgSW5p dGlhbGl6ZU10cnJSZWdzICgmU3lzdGVtUGFyYW1ldGVyKTsNCj4gDQo+ICsgIFJlc3VsdCA9IE10 cnJHZXREZWZhdWx0TWVtb3J5VHlwZSAoKTsNCj4gDQo+ICsgIFVUX0FTU0VSVF9FUVVBTCAoUmVz dWx0LCBDYWNoZVVuY2FjaGVhYmxlKTsNCj4gDQo+ICsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRl ci5NdHJyU3VwcG9ydGVkID0gVFJVRTsNCj4gDQo+ICsgIFN5c3RlbVBhcmFtZXRlci5GaXhlZE10 cnJTdXBwb3J0ZWQgPSBUUlVFOw0KPiANCj4gKyAgU3lzdGVtUGFyYW1ldGVyLlZhcmlhYmxlTXRy ckNvdW50ID0gMDsNCj4gDQo+ICsgIEluaXRpYWxpemVNdHJyUmVncyAoJlN5c3RlbVBhcmFtZXRl cik7DQo+IA0KPiArICBSZXN1bHQgPSBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUgKCk7DQo+IA0K PiArICBVVF9BU1NFUlRfRVFVQUwgKFJlc3VsdCwgQ2FjaGVVbmNhY2hlYWJsZSk7DQo+IA0KPiAr DQo+IA0KPiArICByZXR1cm4gVU5JVF9URVNUX1BBU1NFRDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+ IA0KPiArLyoqDQo+IA0KPiArICBVbml0IHRlc3Qgb2YgTXRyckxpYiBzZXJ2aWNlDQo+IE10cnJT ZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJTZXR0aW5ncygpLg0KPiANCj4gKw0KPiANCj4gKyAgQHBh cmFtW2luXSAgQ29udGV4dCAgICBJZ25vcmVkDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dmFsICBV TklUX1RFU1RfUEFTU0VEICAgICAgICAgICAgIFRoZSBVbml0IHRlc3QNCj4gaGFzIGNvbXBsZXRl ZCBhbmQgdGhlIHRlc3QNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2FzZSB3YXMNCj4gc3VjY2Vzc2Z1bC4NCj4gDQo+ICsgIEByZXR2YWwgIFVOSVRfVEVT VF9FUlJPUl9URVNUX0ZBSUxFRCAgQSB0ZXN0IGNhc2UNCj4gYXNzZXJ0aW9uIGhhcyBmYWlsZWQu DQo+IA0KPiArDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9URVNUX1NUQVRVUw0KPiANCj4gK0VG SUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdz ICgNCj4gDQo+ICsgIElOIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+ IA0KPiArew0KPiANCj4gKyAgTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAqU3lzdGVtUGFyYW1l dGVyOw0KPiANCj4gKyAgUkVUVVJOX1NUQVRVUyAgICAgICAgICAgICBTdGF0dXM7DQo+IA0KPiAr ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFVjQ291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAg ICAgICAgICAgICAgICAgIFd0Q291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAg ICAgIFdiQ291bnQ7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdwQ291bnQ7 DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdjQ291bnQ7DQo+IA0KPiArDQo+ IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIE10cnJJbmRleDsNCj4gDQo+ICsgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgSW5kZXg7DQo+IA0KPiArICBNVFJSX1NFVFRJTkdTICAg ICAgICAgICAgIExvY2FsTXRycnM7DQo+IA0KPiArDQo+IA0KPiArICBNVFJSX01FTU9SWV9SQU5H RQ0KPiBSYXdNdHJyUmFuZ2VbTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUl07DQo+IA0KPiAr ICBNVFJSX01FTU9SWV9SQU5HRQ0KPiBFeHBlY3RlZE1lbW9yeVJhbmdlc1tNVFJSX05VTUJFUl9P Rl9GSVhFRF9NVFJSICogc2l6ZW9mDQo+IChVSU5UNjQpICsgMiAqIE1UUlJfTlVNQkVSX09GX1ZB UklBQkxFX01UUlIgKyAxXTsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgRXhw ZWN0ZWRWYXJpYWJsZU10cnJVc2FnZTsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudDsNCj4gDQo+ICsNCj4gDQo+ICsgIE1UUlJfTUVN T1JZX1JBTkdFDQo+IEFjdHVhbE1lbW9yeVJhbmdlc1tNVFJSX05VTUJFUl9PRl9GSVhFRF9NVFJS ICogc2l6ZW9mDQo+IChVSU5UNjQpICsgMiAqIE1UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlIg KyAxXTsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQWN0dWFsVmFyaWFibGVN dHJyVXNhZ2U7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFjdHVhbE1lbW9y eVJhbmdlc0NvdW50Ow0KPiANCj4gKw0KPiANCj4gKyAgTVRSUl9TRVRUSU5HUyAgICAgICAgICAg ICAqTXRycnNbMl07DQo+IA0KPiArDQo+IA0KPiArICBTeXN0ZW1QYXJhbWV0ZXIgPSAoTVRSUl9M SUJfU1lTVEVNX1BBUkFNRVRFUiAqKQ0KPiBDb250ZXh0Ow0KPiANCj4gKyAgR2VuZXJhdGVSYW5k b21NZW1vcnlUeXBlQ29tYmluYXRpb24gKA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0ZXItPlZh cmlhYmxlTXRyckNvdW50IC0gUGF0Y2hQY2RHZXQzMg0KPiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZl ZFZhcmlhYmxlTXRycnMpLA0KPiANCj4gKyAgICAmVWNDb3VudCwgJld0Q291bnQsICZXYkNvdW50 LCAmV3BDb3VudCwgJldjQ291bnQNCj4gDQo+ICsgICAgKTsNCj4gDQo+ICsgIEdlbmVyYXRlVmFs aWRBbmRDb25maWd1cmFibGVNdHJyUGFpcnMgKA0KPiANCj4gKyAgICBTeXN0ZW1QYXJhbWV0ZXIt PlBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IFJhd010cnJSYW5nZSwNCj4gDQo+ICsgICAgVWNDb3Vu dCwgV3RDb3VudCwgV2JDb3VudCwgV3BDb3VudCwgV2NDb3VudA0KPiANCj4gKyAgICApOw0KPiAN Cj4gKw0KPiANCj4gKyAgRXhwZWN0ZWRWYXJpYWJsZU10cnJVc2FnZSA9IFVjQ291bnQgKyBXdENv dW50ICsNCj4gV2JDb3VudCArIFdwQ291bnQgKyBXY0NvdW50Ow0KPiANCj4gKyAgRXhwZWN0ZWRN ZW1vcnlSYW5nZXNDb3VudCA9IEFSUkFZX1NJWkUNCj4gKEV4cGVjdGVkTWVtb3J5UmFuZ2VzKTsN Cj4gDQo+ICsgIEdldEVmZmVjdGl2ZU1lbW9yeVJhbmdlcyAoDQo+IA0KPiArICAgIFN5c3RlbVBh cmFtZXRlci0+RGVmYXVsdENhY2hlVHlwZSwNCj4gDQo+ICsgICAgU3lzdGVtUGFyYW1ldGVyLT5Q aHlzaWNhbEFkZHJlc3NCaXRzLA0KPiANCj4gKyAgICBSYXdNdHJyUmFuZ2UsIEV4cGVjdGVkVmFy aWFibGVNdHJyVXNhZ2UsDQo+IA0KPiArICAgIEV4cGVjdGVkTWVtb3J5UmFuZ2VzLCAmRXhwZWN0 ZWRNZW1vcnlSYW5nZXNDb3VudA0KPiANCj4gKyAgICApOw0KPiANCj4gKw0KPiANCj4gKyAgVVRf TE9HX0lORk8gKCItLS0gRXhwZWN0ZWQgTWVtb3J5IFJhbmdlcyBbJWRdIC0tLQ0KPiBcbiIsIEV4 cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgRHVtcE1lbW9yeVJhbmdlcyAoRXhw ZWN0ZWRNZW1vcnlSYW5nZXMsDQo+IEV4cGVjdGVkTWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4g KyAgLy8NCj4gDQo+ICsgIC8vIERlZmF1bHQgY2FjaGUgdHlwZSBpcyBhbHdheXMgYW4gSU5QVVQN Cj4gDQo+ICsgIC8vDQo+IA0KPiArICBaZXJvTWVtICgmTG9jYWxNdHJycywgc2l6ZW9mIChMb2Nh bE10cnJzKSk7DQo+IA0KPiArICBMb2NhbE10cnJzLk10cnJEZWZUeXBlID0gTXRyckdldERlZmF1 bHRNZW1vcnlUeXBlDQo+ICgpOw0KPiANCj4gKyAgTXRycnNbMF0gICAgICAgICAgICAgICA9ICZM b2NhbE10cnJzOw0KPiANCj4gKyAgTXRycnNbMV0gICAgICAgICAgICAgICA9IE5VTEw7DQo+IA0K PiArDQo+IA0KPiArICBmb3IgKE10cnJJbmRleCA9IDA7IE10cnJJbmRleCA8IEFSUkFZX1NJWkUg KE10cnJzKTsNCj4gTXRyckluZGV4KyspIHsNCj4gDQo+ICsgICAgZm9yIChJbmRleCA9IDA7IElu ZGV4IDwgRXhwZWN0ZWRNZW1vcnlSYW5nZXNDb3VudDsNCj4gSW5kZXgrKykgew0KPiANCj4gKyAg ICAgIFN0YXR1cyA9IE10cnJTZXRNZW1vcnlBdHRyaWJ1dGVJbk10cnJTZXR0aW5ncyAoDQo+IA0K PiArICAgICAgICAgICAgICAgICBNdHJyc1tNdHJySW5kZXhdLA0KPiANCj4gKw0KPiBFeHBlY3Rl ZE1lbW9yeVJhbmdlc1tJbmRleF0uQmFzZUFkZHJlc3MsDQo+IA0KPiArICAgICAgICAgICAgICAg ICBFeHBlY3RlZE1lbW9yeVJhbmdlc1tJbmRleF0uTGVuZ3RoLA0KPiANCj4gKyAgICAgICAgICAg ICAgICAgRXhwZWN0ZWRNZW1vcnlSYW5nZXNbSW5kZXhdLlR5cGUNCj4gDQo+ICsgICAgICAgICAg ICAgICAgICk7DQo+IA0KPiArICAgICAgVVRfQVNTRVJUX1RSVUUgKFN0YXR1cyA9PSBSRVRVUk5f U1VDQ0VTUyB8fA0KPiBTdGF0dXMgPT0gUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgfHwgU3RhdHVz ID09DQo+IFJFVFVSTl9CVUZGRVJfVE9PX1NNQUxMKTsNCj4gDQo+ICsgICAgICBpZiAoU3RhdHVz ID09IFJFVFVSTl9PVVRfT0ZfUkVTT1VSQ0VTIHx8IFN0YXR1cw0KPiA9PSBSRVRVUk5fQlVGRkVS X1RPT19TTUFMTCkgew0KPiANCj4gKyAgICAgICAgcmV0dXJuIFVOSVRfVEVTVF9TS0lQUEVEOw0K PiANCj4gKyAgICAgIH0NCj4gDQo+ICsgICAgfQ0KPiANCj4gKw0KPiANCj4gKyAgICBpZiAoTXRy cnNbTXRyckluZGV4XSA9PSBOVUxMKSB7DQo+IA0KPiArICAgICAgWmVyb01lbSAoJkxvY2FsTXRy cnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiANCj4gKyAgICAgIE10cnJHZXRBbGxNdHJycyAo JkxvY2FsTXRycnMpOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICAgIEFjdHVhbE1lbW9yeVJhbmdl c0NvdW50ID0gQVJSQVlfU0laRQ0KPiAoQWN0dWFsTWVtb3J5UmFuZ2VzKTsNCj4gDQo+ICsgICAg Q29sbGVjdFRlc3RSZXN1bHQgKA0KPiANCj4gKyAgICAgIFN5c3RlbVBhcmFtZXRlci0+RGVmYXVs dENhY2hlVHlwZSwNCj4gU3lzdGVtUGFyYW1ldGVyLT5QaHlzaWNhbEFkZHJlc3NCaXRzLCBTeXN0 ZW1QYXJhbWV0ZXItDQo+ID5WYXJpYWJsZU10cnJDb3VudCwNCj4gDQo+ICsgICAgICAmTG9jYWxN dHJycywgQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiAmQWN0dWFsTWVtb3J5UmFuZ2VzQ291bnQsICZB Y3R1YWxWYXJpYWJsZU10cnJVc2FnZQ0KPiANCj4gKyAgICAgICk7DQo+IA0KPiArICAgIFVUX0xP R19JTkZPICgiLS0tIEFjdHVhbCBNZW1vcnkgUmFuZ2VzIFslZF0gLS0tDQo+IFxuIiwgQWN0dWFs TWVtb3J5UmFuZ2VzQ291bnQpOw0KPiANCj4gKyAgICBEdW1wTWVtb3J5UmFuZ2VzIChBY3R1YWxN ZW1vcnlSYW5nZXMsDQo+IEFjdHVhbE1lbW9yeVJhbmdlc0NvdW50KTsNCj4gDQo+ICsgICAgVmVy aWZ5TWVtb3J5UmFuZ2VzIChFeHBlY3RlZE1lbW9yeVJhbmdlcywNCj4gRXhwZWN0ZWRNZW1vcnlS YW5nZXNDb3VudCwgQWN0dWFsTWVtb3J5UmFuZ2VzLA0KPiBBY3R1YWxNZW1vcnlSYW5nZXNDb3Vu dCk7DQo+IA0KPiArICAgIFVUX0FTU0VSVF9UUlVFIChFeHBlY3RlZFZhcmlhYmxlTXRyclVzYWdl ID49DQo+IEFjdHVhbFZhcmlhYmxlTXRyclVzYWdlKTsNCj4gDQo+ICsNCj4gDQo+ICsgICAgWmVy b01lbSAoJkxvY2FsTXRycnMsIHNpemVvZiAoTG9jYWxNdHJycykpOw0KPiANCj4gKyAgfQ0KPiAN Cj4gKw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUHJlcCByb3V0aW5lIGZvcg0KPiBVbml0VGVzdEdldEZp cm13YXJlVmFyaWFibGVNdHJyQ291bnQoKS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBDb250 ZXh0ICBQb2ludCB0byBhIFVJTlQzMiBkYXRhIHRvIHNhdmUgdGhlDQo+IFBjZENwdU51bWJlck9m UmVzZXJ2ZWRWYXJpYWJsZU10cnJzLg0KPiANCj4gKyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFU VVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtTYXZlUGNkVmFsdWUgKA0KPiANCj4gKyAgVU5JVF9U RVNUX0NPTlRFWFQgIENvbnRleHQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICAqKFVJ TlQzMiAqKSBDb250ZXh0ID0gUGF0Y2hQY2RHZXQzMg0KPiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZl ZFZhcmlhYmxlTXRycnMpOw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0K PiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ2xlYW4gdXAgcm91dGluZSBmb3IN Cj4gVW5pdFRlc3RHZXRGaXJtd2FyZVZhcmlhYmxlTXRyckNvdW50KCkuDQo+IA0KPiArDQo+IA0K PiArICBAcGFyYW0gQ29udGV4dCAgUG9pbnQgdG8gYSBVSU5UMzIgZGF0YSB0byBzYXZlIHRoZQ0K PiBQY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibGVNdHJycy4NCj4gDQo+ICsqKi8NCj4gDQo+ ICtVTklUX1RFU1RfU1RBVFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArUmVzdG9yZVBjZFZhbHVl ICgNCj4gDQo+ICsgIFVOSVRfVEVTVF9DT05URVhUICBDb250ZXh0DQo+IA0KPiArICApDQo+IA0K PiArew0KPiANCj4gKyAgUGF0Y2hQY2RTZXQzMiAoUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlh YmxlTXRycnMsDQo+ICooVUlOVDMyICopIENvbnRleHQpOw0KPiANCj4gKyAgcmV0dXJuIFVOSVRf VEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgSW5p dGlhbGl6ZSB0aGUgdW5pdCB0ZXN0IGZyYW1ld29yaywgc3VpdGUsIGFuZCB1bml0DQo+IHRlc3Rz IGZvciB0aGUNCj4gDQo+ICsgIFJlc2V0U3lzdGVtTGliIGFuZCBydW4gdGhlIFJlc2V0U3lzdGVt TGliIHVuaXQgdGVzdC4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBJdGVyYXRpb24gICAgICAg ICAgICAgICBJdGVyYXRpb24gb2YgdGVzdGluZw0KPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5N dHJyU2V0dGluZ3MNCj4gDQo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQN Cj4gTXRyclNldE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyB1c2luZyByYW5kb20NCj4g aW5wdXRzLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAg IEFsbCB0ZXN0IGNhc2VzIHdlcmUNCj4gZGlzcGF0Y2hlZC4NCj4gDQo+ICsgIEByZXR2YWwgIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTICBUaGVyZSBhcmUgbm90IGVub3VnaA0KPiByZXNvdXJjZXMgYXZh aWxhYmxlIHRvDQo+IA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5pdGlh bGl6ZSB0aGUgdW5pdA0KPiB0ZXN0cy4NCj4gDQo+ICsqKi8NCj4gDQo+ICtTVEFUSUMNCj4gDQo+ ICtFRklfU1RBVFVTDQo+IA0KPiArRUZJQVBJDQo+IA0KPiArVW5pdFRlc3RpbmdFbnRyeSAoDQo+ IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSXRlcmF0aW9uDQo+IA0KPiArICAp DQo+IA0KPiArew0KPiANCj4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAgIFN0YXR1czsN Cj4gDQo+ICsgIFVOSVRfVEVTVF9GUkFNRVdPUktfSEFORExFICBGcmFtZXdvcms7DQo+IA0KPiAr ICBVTklUX1RFU1RfU1VJVEVfSEFORExFICAgICAgTXRyckFwaVRlc3RzOw0KPiANCj4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KPiANCj4gKyAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICAgIFN5c3RlbUluZGV4Ow0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAg ICAgICAgIE9yaWdpbmFsUGNkVmFsdWU7DQo+IA0KPiArDQo+IA0KPiArICBGcmFtZXdvcmsgPSBO VUxMOw0KPiANCj4gKw0KPiANCj4gKyAgREVCVUcgKChERUJVR19JTkZPLCAiJWEgdiVhXG4iLCBV TklUX1RFU1RfQVBQX05BTUUsDQo+IFVOSVRfVEVTVF9BUFBfVkVSU0lPTikpOw0KPiANCj4gKw0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFNldHVwIHRoZSB0ZXN0IGZyYW1ld29yayBmb3IgcnVu bmluZyB0aGUgdGVzdHMuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3RhdHVzID0gSW5pdFVuaXRU ZXN0RnJhbWV3b3JrICgmRnJhbWV3b3JrLA0KPiBVTklUX1RFU1RfQVBQX05BTUUsIGdFZmlDYWxs ZXJCYXNlTmFtZSwNCj4gVU5JVF9URVNUX0FQUF9WRVJTSU9OKTsNCj4gDQo+ICsgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCj4gDQo+ICsgICAgREVCVUcgKChERUJVR19FUlJPUiwgIkZhaWxl ZCBpbg0KPiBJbml0VW5pdFRlc3RGcmFtZXdvcmsuIFN0YXR1cyA9ICVyXG4iLCBTdGF0dXMpKTsN Cj4gDQo+ICsgICAgZ290byBFWElUOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgLy8N Cj4gDQo+ICsgIC8vIC0tLS0tLS0tLS0tLS0tU3VpdGUtLS0tLS0tLS0tLURlc2NyaXB0aW9uLS0t LS0tLS0NCj4gLS0tLS0tTmFtZS0tLS0tLS0tLS1GdW5jdGlvbi0tLS0tLS0tUHJlLS0tUG9zdC0t LS0tLS0tLQ0KPiAtLS0tLS0tLS0tQ29udGV4dC0tLS0tLS0tLS0tDQo+IA0KPiArICAvLw0KPiAN Cj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFBvcHVsYXRlIHRoZSBNdHJyTGliIEFQSSBV bml0IFRlc3QgU3VpdGUuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgU3RhdHVzID0gQ3JlYXRlVW5p dFRlc3RTdWl0ZSAoJk10cnJBcGlUZXN0cywNCj4gRnJhbWV3b3JrLCAiTXRyckxpYiBBUEkgVGVz dHMiLCAiTXRyckxpYi5NdHJyTGliIiwNCj4gTlVMTCwgTlVMTCk7DQo+IA0KPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+IA0KPiArICAgIERFQlVHICgoREVCVUdfRVJST1IsICJGYWls ZWQgaW4NCj4gQ3JlYXRlVW5pdFRlc3RTdWl0ZSBmb3IgTXRyckxpYiBBUEkgVGVzdHNcbiIpKTsN Cj4gDQo+ICsgICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+IA0KPiArICAgIGdv dG8gRVhJVDsNCj4gDQo+ICsgIH0NCj4gDQo+ICsgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMs ICJUZXN0IElzTXRyclN1cHBvcnRlZCIsDQo+ICJNdHJyU3VwcG9ydGVkIiwNCj4gVW5pdFRlc3RJ c010cnJTdXBwb3J0ZWQsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsIE5VTEwp Ow0KPiANCj4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4gR2V0VmFyaWFi bGVNdHJyQ291bnQiLA0KPiAiR2V0VmFyaWFibGVNdHJyQ291bnQiLA0KPiBVbml0VGVzdEdldFZh cmlhYmxlTXRyckNvdW50LCAgICAgICAgICAgICAgICAgTlVMTCwNCj4gTlVMTCwgTlVMTCk7DQo+ IA0KPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBHZXRGaXJtd2FyZVZh cmlhYmxlTXRyckNvdW50IiwNCj4gIkdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQiLA0KPiBV bml0VGVzdEdldEZpcm13YXJlVmFyaWFibGVNdHJyQ291bnQsDQo+IFNhdmVQY2RWYWx1ZSwgUmVz dG9yZVBjZFZhbHVlLCAmT3JpZ2luYWxQY2RWYWx1ZSk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAo TXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyR2V0TWVtb3J5QXR0cmlidXRlIiwNCj4gIk10cnJH ZXRNZW1vcnlBdHRyaWJ1dGUiLA0KPiBVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGUsICAg ICAgICAgICAgICAgTlVMTCwNCj4gTlVMTCwgTlVMTCk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAo TXRyckFwaVRlc3RzLCAiVGVzdCBNdHJyR2V0Rml4ZWRNdHJyIiwNCj4gIk10cnJHZXRGaXhlZE10 cnIiLA0KPiBVbml0VGVzdE10cnJHZXRGaXhlZE10cnIsICAgICAgICAgICAgICAgICAgICAgTlVM TCwNCj4gTlVMTCwgTlVMTCk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAi VGVzdCBNdHJyR2V0QWxsTXRycnMiLA0KPiAiTXRyckdldEFsbE10cnJzIiwNCj4gVW5pdFRlc3RN dHJyR2V0QWxsTXRycnMsICAgICAgICAgICAgICAgICAgICAgIE5VTEwsDQo+IE5VTEwsIE5VTEwp Ow0KPiANCj4gKyAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QgTXRyclNldEFsbE10 cnJzIiwNCj4gIk10cnJTZXRBbGxNdHJycyIsDQo+IFVuaXRUZXN0TXRyclNldEFsbE10cnJzLCAg ICAgICAgICAgICAgICAgICAgICBOVUxMLA0KPiBOVUxMLCBOVUxMKTsNCj4gDQo+ICsgIEFkZFRl c3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0DQo+IE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZh cmlhYmxlTXRyciIsDQo+ICJNdHJyR2V0TWVtb3J5QXR0cmlidXRlSW5WYXJpYWJsZU10cnIiLA0K PiBVbml0VGVzdE10cnJHZXRNZW1vcnlBdHRyaWJ1dGVJblZhcmlhYmxlTXRyciwgTlVMTCwNCj4g TlVMTCwgTlVMTCk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0K PiBNdHJyRGVidWdQcmludEFsbE10cnJzIiwNCj4gIk10cnJEZWJ1Z1ByaW50QWxsTXRycnMiLA0K PiBVbml0VGVzdE10cnJEZWJ1Z1ByaW50QWxsTXRycnMsICAgICAgICAgICAgICAgTlVMTCwNCj4g TlVMTCwgTlVMTCk7DQo+IA0KPiArICBBZGRUZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0K PiBNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUiLA0KPiAiTXRyckdldERlZmF1bHRNZW1vcnlUeXBl IiwNCj4gVW5pdFRlc3RNdHJyR2V0RGVmYXVsdE1lbW9yeVR5cGUsICAgICAgICAgICAgIE5VTEws DQo+IE5VTEwsIE5VTEwpOw0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChTeXN0ZW1JbmRleCA9IDA7 IFN5c3RlbUluZGV4IDwgQVJSQVlfU0laRQ0KPiAobVN5c3RlbVBhcmFtZXRlcnMpOyBTeXN0ZW1J bmRleCsrKSB7DQo+IA0KPiArICAgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEl0ZXJhdGlvbjsg SW5kZXgrKykgew0KPiANCj4gKyAgICAgIEFkZFRlc3RDYXNlIChNdHJyQXBpVGVzdHMsICJUZXN0 DQo+IEludmFsaWRNZW1vcnlMYXlvdXRzIiwNCj4gIkludmFsaWRNZW1vcnlMYXlvdXRzIiwNCj4g VW5pdFRlc3RJbnZhbGlkTWVtb3J5TGF5b3V0cywNCj4gSW5pdGlhbGl6ZU10cnJSZWdzLCBOVUxM LA0KPiAmbVN5c3RlbVBhcmFtZXRlcnNbU3lzdGVtSW5kZXhdKTsNCj4gDQo+ICsgICAgICBBZGRU ZXN0Q2FzZSAoTXRyckFwaVRlc3RzLCAiVGVzdA0KPiBNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5N dHJyU2V0dGluZ3MiLA0KPiAiTXRyclNldE1lbW9yeUF0dHJpYnV0ZUluTXRyclNldHRpbmdzIiwN Cj4gVW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlSW5NdHJyU2V0dGluZ3MsDQo+IEluaXRp YWxpemVNdHJyUmVncywgTlVMTCwNCj4gJm1TeXN0ZW1QYXJhbWV0ZXJzW1N5c3RlbUluZGV4XSk7 DQo+IA0KPiArICAgICAgQWRkVGVzdENhc2UgKE10cnJBcGlUZXN0cywgIlRlc3QNCj4gTXRyclNl dE1lbW9yeUF0dHJpYnV0ZXNJbk10cnJTZXR0aW5ncyIsDQo+ICJNdHJyU2V0TWVtb3J5QXR0cmli dXRlc0luTXRyclNldHRpbmdzIiwNCj4gVW5pdFRlc3RNdHJyU2V0TWVtb3J5QXR0cmlidXRlc0lu TXRyclNldHRpbmdzLA0KPiBJbml0aWFsaXplTXRyclJlZ3MsIE5VTEwsDQo+ICZtU3lzdGVtUGFy YW1ldGVyc1tTeXN0ZW1JbmRleF0pOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiAr ICAvLw0KPiANCj4gKyAgLy8gRXhlY3V0ZSB0aGUgdGVzdHMuDQo+IA0KPiArICAvLw0KPiANCj4g KyAgc3JhbmQgKCh1bnNpZ25lZCBpbnQpIHRpbWUgKE5VTEwpKTsNCj4gDQo+ICsgIFN0YXR1cyA9 IFJ1bkFsbFRlc3RTdWl0ZXMgKEZyYW1ld29yayk7DQo+IA0KPiArDQo+IA0KPiArRVhJVDoNCj4g DQo+ICsgIGlmIChGcmFtZXdvcmsgIT0gTlVMTCkgew0KPiANCj4gKyAgICBGcmVlVW5pdFRlc3RG cmFtZXdvcmsgKEZyYW1ld29yayk7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICByZXR1 cm4gU3RhdHVzOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFN0YW5k YXJkIFBPU0lYIEMgZW50cnkgcG9pbnQgZm9yIGhvc3QgYmFzZWQgdW5pdA0KPiB0ZXN0IGV4ZWN1 dGlvbi4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBBcmdjICBOdW1iZXIgb2YgYXJndW1lbnRz Lg0KPiANCj4gKyAgQHBhcmFtIEFyZ3YgIEFycmF5IG9mIGFyZ3VtZW50cy4NCj4gDQo+ICsNCj4g DQo+ICsgIEByZXR1cm4gVGVzdCBhcHBsaWNhdGlvbiBleGl0IGNvZGUuDQo+IA0KPiArKiovDQo+ IA0KPiArSU5UMzINCj4gDQo+ICttYWluICgNCj4gDQo+ICsgIElOVDMyIEFyZ2MsDQo+IA0KPiAr ICBDSEFSOCAqQXJndltdDQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVE4gICAg SXRlcmF0aW9uOw0KPiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIEZpcnN0IHBhcmFt ZXRlciBzcGVjaWZpZXMgdGhlIHRlc3QgaXRlcmF0aW9ucy4NCj4gDQo+ICsgIC8vIERlZmF1bHQg aXMgMTAuDQo+IA0KPiArICAvLw0KPiANCj4gKyAgSXRlcmF0aW9uID0gMTA7DQo+IA0KPiArICBp ZiAoQXJnYyA9PSAyKSB7DQo+IA0KPiArICAgIEl0ZXJhdGlvbiA9IGF0b2kgKEFyZ3ZbMV0pOw0K PiANCj4gKyAgfQ0KPiANCj4gKyAgcmV0dXJuIFVuaXRUZXN0aW5nRW50cnkgKEl0ZXJhdGlvbik7 DQo+IA0KPiArfQ0KPiANCj4gZGlmZiAtLWdpdA0KPiBhL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJy TGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5oDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010 cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0LmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gaW5kZXggMDAwMDAwMDAwMC4uMjVkNDI2OTU4OQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKw0K PiBiL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJMaWJVbml0VGVzdC5o DQo+IEBAIC0wLDAgKzEsMTcxIEBADQo+ICsvKiogQGZpbGUNCj4gDQo+ICsNCj4gDQo+ICsgIENv cHlyaWdodCAoYykgMjAyMCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gcmVzZXJ2 ZWQuPEJSPg0KPiANCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gDQo+ICsNCj4gDQo+ICsqKi8NCj4gDQo+ICsNCj4gDQo+ICsjaWZuZGVmIF9NVFJS X1NVUFBPUlRfSF8NCj4gDQo+ICsjZGVmaW5lIF9NVFJSX1NVUFBPUlRfSF8NCj4gDQo+ICsNCj4g DQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gDQo+ICsjaW5jbHVkZSA8c3RkbGliLmg+DQo+IA0K PiArI2luY2x1ZGUgPHN0cmluZy5oPg0KPiANCj4gKyNpbmNsdWRlIDxzdGRhcmcuaD4NCj4gDQo+ ICsjaW5jbHVkZSA8c3RkZGVmLmg+DQo+IA0KPiArI2luY2x1ZGUgPHNldGptcC5oPg0KPiANCj4g KyNpbmNsdWRlIDxjbW9ja2EuaD4NCj4gDQo+ICsjaW5jbHVkZSA8dGltZS5oPg0KPiANCj4gKw0K PiANCj4gKyNpbmNsdWRlIDxVZWZpLmg+DQo+IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxp Yi5oPg0KPiANCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4NCj4gDQo+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiANCj4gKyNpbmNsdWRlIDxMaWJyYXJ5L1Vu aXRUZXN0TGliLmg+DQo+IA0KPiArI2luY2x1ZGUgPExpYnJhcnkvTXRyckxpYi5oPg0KPiANCj4g KyNpbmNsdWRlIDxMaWJyYXJ5L1VuaXRUZXN0SG9zdEJhc2VMaWIuaD4NCj4gDQo+ICsNCj4gDQo+ ICsjaW5jbHVkZSA8UmVnaXN0ZXIvQXJjaGl0ZWN0dXJhbE1zci5oPg0KPiANCj4gKyNpbmNsdWRl IDxSZWdpc3Rlci9DcHVpZC5oPg0KPiANCj4gKyNpbmNsdWRlIDxSZWdpc3Rlci9Nc3IuaD4NCj4g DQo+ICsNCj4gDQo+ICsjZGVmaW5lIFVOSVRfVEVTVF9BUFBfTkFNRSAgICAgICAgIk10cnJMaWIg VW5pdCBUZXN0cyINCj4gDQo+ICsjZGVmaW5lIFVOSVRfVEVTVF9BUFBfVkVSU0lPTiAgICAgIjEu MCINCj4gDQo+ICsNCj4gDQo+ICsjZGVmaW5lIFNDUkFUQ0hfQlVGRkVSX1NJWkUgICAgICAgU0la RV8xNktCDQo+IA0KPiArDQo+IA0KPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiANCj4gKyAgVUlOVDgg ICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzOw0KPiANCj4gKyAgQk9PTEVBTiAg ICAgICAgICAgICAgICBNdHJyU3VwcG9ydGVkOw0KPiANCj4gKyAgQk9PTEVBTiAgICAgICAgICAg ICAgICBGaXhlZE10cnJTdXBwb3J0ZWQ7DQo+IA0KPiArICBNVFJSX01FTU9SWV9DQUNIRV9UWVBF IERlZmF1bHRDYWNoZVR5cGU7DQo+IA0KPiArICBVSU5UMzIgICAgICAgICAgICAgICAgIFZhcmlh YmxlTXRyckNvdW50Ow0KPiANCj4gK30gTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUjsNCj4gDQo+ ICsNCj4gDQo+ICtleHRlcm4gVUlOVDMyDQo+IG1GaXhlZE10cnJzSW5kZXhbXTsNCj4gDQo+ICsN Cj4gDQo+ICsvKioNCj4gDQo+ICsgIEluaXRpYWxpemUgdGhlIE1UUlIgcmVnaXN0ZXJzLg0KPiAN Cj4gKw0KPiANCj4gKyAgQHBhcmFtIFN5c3RlbVBhcmFtZXRlciBTeXN0ZW0gcGFyYW1ldGVyIHRo YXQNCj4gY29udHJvbHMgdGhlIE1UUlIgcmVnaXN0ZXJzIGluaXRpYWxpemF0aW9uLg0KPiANCj4g KyoqLw0KPiANCj4gK1VOSVRfVEVTVF9TVEFUVVMNCj4gDQo+ICtFRklBUEkNCj4gDQo+ICtJbml0 aWFsaXplTXRyclJlZ3MgKA0KPiANCj4gKyAgSU4gTVRSUl9MSUJfU1lTVEVNX1BBUkFNRVRFUiAg KlN5c3RlbVBhcmFtZXRlcg0KPiANCj4gKyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ ICsgIFJldHVybiBhIHJhbmRvbSBtZW1vcnkgY2FjaGUgdHlwZS4NCj4gDQo+ICsqKi8NCj4gDQo+ ICtNVFJSX01FTU9SWV9DQUNIRV9UWVBFDQo+IA0KPiArR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUg KA0KPiANCj4gKyAgVk9JRA0KPiANCj4gKyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJScy4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBQaHlz aWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+IA0KPiArICBAcGFyYW0g UmF3TWVtb3J5UmFuZ2VzICAgICAgUmV0dXJuIHRoZSByYW5kb21seQ0KPiBnZW5lcmF0ZWQgTVRS UnMuDQo+IA0KPiArICBAcGFyYW0gVWNDb3VudCAgICAgICAgICAgICAgQ291bnQgb2YgVW5jYWNo ZWFibGUNCj4gTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gV3RDb3VudCAgICAgICAgICAgICAgQ291 bnQgb2YgV3JpdGUgVGhyb3VnaA0KPiBNVFJScy4NCj4gDQo+ICsgIEBwYXJhbSBXYkNvdW50ICAg ICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBCYWNrDQo+IE1UUlJzLg0KPiANCj4gKyAgQHBhcmFt IFdwQ291bnQgICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlIFByb3RlY3RlZA0KPiBNVFJScy4N Cj4gDQo+ICsgIEBwYXJhbSBXY0NvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBDb21i aW5pbmcNCj4gTVRSUnMuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0dlbmVyYXRl VmFsaWRBbmRDb25maWd1cmFibGVNdHJyUGFpcnMgKA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMg0K PiBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiANCj4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdF ICAgICAgICAgKlJhd01lbW9yeVJhbmdlcywNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAg ICAgICAgICAgICAgIFVjQ291bnQsDQo+IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAg ICAgICAgICBXdENvdW50LA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgV2JDb3VudCwNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdw Q291bnQsDQo+IA0KPiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXY0NvdW50 DQo+IA0KPiArICApOw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29udmVydCB0aGUg TVRSUiBCQVNFL01BU0sgYXJyYXkgdG8gbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsg IEBwYXJhbSBEZWZhdWx0VHlwZSAgICAgICAgICBEZWZhdWx0IG1lbW9yeSB0eXBlLg0KPiANCj4g KyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4g DQo+ICsgIEBwYXJhbSBSYXdNZW1vcnlSYW5nZXMgICAgICBSYXcgbWVtb3J5IHJhbmdlcy4NCj4g DQo+ICsgIEBwYXJhbSBSYXdNZW1vcnlSYW5nZUNvdW50ICBDb3VudCBvZiByYXcgbWVtb3J5DQo+ IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBNZW1vcnlSYW5nZXMgICAgICAgICBNZW1vcnkgcmFu Z2VzLg0KPiANCj4gKyAgQHBhcmFtIE1lbW9yeVJhbmdlQ291bnQgICAgIENvdW50IG9mIG1lbW9y eSByYW5nZXMuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0dldEVmZmVjdGl2ZU1l bW9yeVJhbmdlcyAoDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRU eXBlLA0KPiANCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NC aXRzLA0KPiANCj4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgICAgICAqUmF3TWVtb3J5UmFuZ2Vz LA0KPiANCj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICBSYXdNZW1vcnlSYW5nZUNvdW50 LA0KPiANCj4gKyAgT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAqTWVtb3J5UmFuZ2VzLA0KPiAN Cj4gKyAgT1VUIFVJTlROICAgICAgICAgICAgICAgICAqTWVtb3J5UmFuZ2VDb3VudA0KPiANCj4g KyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIEdlbmVyYXRlIHJhbmRvbSBNVFJS IEJBU0UvTUFTSyBmb3IgYSBzcGVjaWZpZWQgdHlwZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJh bSBQaHlzaWNhbEFkZHJlc3NCaXRzIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gDQo+ICsgIEBw YXJhbSBDYWNoZVR5cGUgICAgICAgICAgIENhY2hlIHR5cGUuDQo+IA0KPiArICBAcGFyYW0gTXRy clBhaXIgICAgICAgICAgICBSZXR1cm4gdGhlIHJhbmRvbSBNVFJSLg0KPiANCj4gKyAgQHBhcmFt IE10cnJNZW1vcnlSYW5nZSAgICAgUmV0dXJuIHRoZSByYW5kb20gbWVtb3J5DQo+IHJhbmdlLg0K PiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtHZW5lcmF0ZVJhbmRvbU10cnJQYWlyICgN Cj4gDQo+ICsgIElOICBVSU5UMzIgICAgICAgICAgICAgICAgIFBoeXNpY2FsQWRkcmVzc0JpdHMs DQo+IA0KPiArICBJTiAgTVRSUl9NRU1PUllfQ0FDSEVfVFlQRSBDYWNoZVR5cGUsDQo+IA0KPiAr ICBPVVQgTVRSUl9WQVJJQUJMRV9TRVRUSU5HICAqTXRyclBhaXIsICAgICAgIE9QVElPTkFMDQo+ IA0KPiArICBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqTXRyck1lbW9yeVJhbmdlIE9QVElP TkFMDQo+IA0KPiArICApOw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29sbGVjdCB0 aGUgdGVzdCByZXN1bHQuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAg ICAgICAgRGVmYXVsdCBtZW1vcnkgdHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJl c3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJpdHMuDQo+IA0KPiArICBAcGFyYW0gVmFyaWFibGVN dHJyQ291bnQgICAgQ291bnQgb2YgdmFyaWFibGUgTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gTXRy cnMgICAgICAgICAgICAgICAgTVRSUiBzZXR0aW5ncyB0byBjb2xsZWN0DQo+IGZyb20uDQo+IA0K PiArICBAcGFyYW0gUmFuZ2VzICAgICAgICAgICAgICAgUmV0dXJuIHRoZSBtZW1vcnkNCj4gcmFu Z2VzLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlQ291bnQgICAgICAgICAgIFJldHVybiB0aGUgY291 bnQgb2YNCj4gbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsgIEBwYXJhbSBNdHJyQ291bnQgICAgICAg ICAgICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+IHZhcmlhYmxlIE1UUlJzIGJlaW5nIHVzZWQuDQo+ IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0NvbGxlY3RUZXN0UmVzdWx0ICgNCj4gDQo+ ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0KPiANCj4gKyAg SU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgIFZhcmlhYmxlTXRyckNvdW50LA0KPiAN Cj4gKyAgSU4gICAgIE1UUlJfU0VUVElOR1MgICAgICAgICAgKk10cnJzLA0KPiANCj4gKyAgT1VU ICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgKlJhbmdlcywNCj4gDQo+ICsgIElOIE9VVCBVSU5U TiAgICAgICAgICAgICAgICAgICpSYW5nZUNvdW50LA0KPiANCj4gKyAgT1VUICAgIFVJTlQzMiAg ICAgICAgICAgICAgICAgKk10cnJDb3VudA0KPiANCj4gKyAgKTsNCj4gDQo+ICsNCj4gDQo+ICsv KioNCj4gDQo+ICsgIFJldHVybiBhIDY0Yml0IHJhbmRvbSBudW1iZXIuDQo+IA0KPiArDQo+IA0K PiArICBAcGFyYW0gU3RhcnQgIFN0YXJ0IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiAN Cj4gKyAgQHBhcmFtIExpbWl0ICBMaW1pdCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4g DQo+ICsgIEByZXR1cm4gNjRiaXQgcmFuZG9tIG51bWJlcg0KPiANCj4gKyoqLw0KPiANCj4gK1VJ TlQ2NA0KPiANCj4gK1JhbmRvbTY0ICgNCj4gDQo+ICsgIFVJTlQ2NCAgU3RhcnQsDQo+IA0KPiAr ICBVSU5UNjQgIExpbWl0DQo+IA0KPiArICApOw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4g KyAgUmV0dXJuIGEgMzJiaXQgcmFuZG9tIG51bWJlci4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJh bSBTdGFydCAgU3RhcnQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+IA0KPiArICBAcGFy YW0gTGltaXQgIExpbWl0IG9mIHRoZSByYW5kb20gbnVtYmVyIHJhbmdlLg0KPiANCj4gKyAgQHJl dHVybiAzMmJpdCByYW5kb20gbnVtYmVyDQo+IA0KPiArKiovDQo+IA0KPiArVUlOVDMyDQo+IA0K PiArUmFuZG9tMzIgKA0KPiANCj4gKyAgVUlOVDMyICBTdGFydCwNCj4gDQo+ICsgIFVJTlQzMiAg TGltaXQNCj4gDQo+ICsgICk7DQo+IA0KPiArI2VuZGlmDQo+IA0KPiBkaWZmIC0tZ2l0DQo+IGEv VWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVuaXRUZXN0SG8NCj4g c3QuaW5mDQo+IGIvVWVmaUNwdVBrZy9MaWJyYXJ5L010cnJMaWIvVW5pdFRlc3QvTXRyckxpYlVu aXRUZXN0SG8NCj4gc3QuaW5mDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAuLjQ0NzIzOGRjODENCj4gLS0tIC9kZXYvbnVsbA0KPiArKysNCj4gYi9VZWZpQ3B1UGtn L0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9NdHJyTGliVW5pdFRlc3RIbw0KPiBzdC5pbmYNCj4g QEAgLTAsMCArMSwzOSBAQA0KPiArIyMgQGZpbGUNCj4gDQo+ICsjIFVuaXQgdGVzdHMgb2YgdGhl IE10cnJMaWIgaW5zdGFuY2Ugb2YgdGhlIE10cnJMaWINCj4gY2xhc3MNCj4gDQo+ICsjDQo+IA0K PiArIyBDb3B5cmlnaHQgKGMpIDIwMjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ IHJlc2VydmVkLjxCUj4NCj4gDQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQo+IA0KPiArIyMNCj4gDQo+ICsNCj4gDQo+ICtbRGVmaW5lc10NCj4gDQo+ ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMDYNCj4gDQo+ICsg IEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9IE10cnJMaWJVbml0VGVzdEhvc3QNCj4g DQo+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEExNTQyRDg0LUI2NEQtNDg0 Ny0NCj4gODg1RS0wNTA5MDg0Mzc2QUINCj4gDQo+ICsgIE1PRFVMRV9UWVBFICAgICAgICAgICAg ICAgICAgICA9IEhPU1RfQVBQTElDQVRJT04NCj4gDQo+ICsgIFZFUlNJT05fU1RSSU5HICAgICAg ICAgICAgICAgICA9IDEuMA0KPiANCj4gKw0KPiANCj4gKyMNCj4gDQo+ICsjIFRoZSBmb2xsb3dp bmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZA0KPiBub3QgcmVxdWlyZWQg YnkgdGhlIGJ1aWxkIHRvb2xzLg0KPiANCj4gKyMNCj4gDQo+ICsjICBWQUxJRF9BUkNISVRFQ1RV UkVTICAgICAgICAgICA9IElBMzIgWDY0DQo+IA0KPiArIw0KPiANCj4gKw0KPiANCj4gK1tTb3Vy Y2VzXQ0KPiANCj4gKyAgTXRyckxpYlVuaXRUZXN0LmMNCj4gDQo+ICsgIE10cnJMaWJVbml0VGVz dC5oDQo+IA0KPiArICBTdXBwb3J0LmMNCj4gDQo+ICsNCj4gDQo+ICtbUGFja2FnZXNdDQo+IA0K PiArICBNZGVQa2cvTWRlUGtnLmRlYw0KPiANCj4gKyAgVWVmaUNwdVBrZy9VZWZpQ3B1UGtnLmRl Yw0KPiANCj4gKyAgVW5pdFRlc3RGcmFtZXdvcmtQa2cvVW5pdFRlc3RGcmFtZXdvcmtQa2cuZGVj DQo+IA0KPiArDQo+IA0KPiArW0xpYnJhcnlDbGFzc2VzXQ0KPiANCj4gKyAgQmFzZUxpYg0KPiAN Cj4gKyAgQmFzZU1lbW9yeUxpYg0KPiANCj4gKyAgRGVidWdMaWINCj4gDQo+ICsgIE10cnJMaWIN Cj4gDQo+ICsgIFVuaXRUZXN0TGliDQo+IA0KPiArDQo+IA0KPiArW1BjZF0NCj4gDQo+ICsNCj4g Z1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5QY2RDcHVOdW1iZXJPZlJlc2VydmVkVmFyaWFibA0K PiBlTXRycnMgICAjIyBTT01FVElNRVNfQ09OU1VNRVMNCj4gDQo+IGRpZmYgLS1naXQNCj4gYS9V ZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gYi9VZWZpQ3B1 UGtnL0xpYnJhcnkvTXRyckxpYi9Vbml0VGVzdC9TdXBwb3J0LmMNCj4gbmV3IGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4uOWZlNGIwMjc4ZQ0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL1VlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L1N1cHBvcnQuYw0KPiBA QCAtMCwwICsxLDkxMyBAQA0KPiArLyoqIEBmaWxlDQo+IA0KPiArICBVbml0IHRlc3RzIG9mIHRo ZSBNdHJyTGliIGluc3RhbmNlIG9mIHRoZSBNdHJyTGliDQo+IGNsYXNzDQo+IA0KPiArDQo+IA0K PiArICBDb3B5cmlnaHQgKGMpIDIwMTggLSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsDQo+ IHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+IA0KPiArICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog QlNELTItQ2xhdXNlLVBhdGVudA0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4g KyNpbmNsdWRlICJNdHJyTGliVW5pdFRlc3QuaCINCj4gDQo+ICsNCj4gDQo+ICtNVFJSX01FTU9S WV9DQUNIRV9UWVBFIG1NZW1vcnlDYWNoZVR5cGVzW10gPSB7DQo+IA0KPiArICBDYWNoZVVuY2Fj aGVhYmxlLCBDYWNoZVdyaXRlQ29tYmluaW5nLA0KPiBDYWNoZVdyaXRlVGhyb3VnaCwgQ2FjaGVX cml0ZVByb3RlY3RlZCwgQ2FjaGVXcml0ZUJhY2sNCj4gDQo+ICsgIH07DQo+IA0KPiArDQo+IA0K PiArVUlOVDY0DQo+IG1GaXhlZE10cnJzVmFsdWVbTVRSUl9OVU1CRVJfT0ZfRklYRURfTVRSUl07 DQo+IA0KPiArTVNSX0lBMzJfTVRSUl9QSFlTQkFTRV9SRUdJU1RFUg0KPiBtVmFyaWFibGVNdHJy c1BoeXNCYXNlW01UUlJfTlVNQkVSX09GX1ZBUklBQkxFX01UUlJdOw0KPiANCj4gK01TUl9JQTMy X01UUlJfUEhZU01BU0tfUkVHSVNURVINCj4gbVZhcmlhYmxlTXRycnNQaHlzTWFza1tNVFJSX05V TUJFUl9PRl9WQVJJQUJMRV9NVFJSXTsNCj4gDQo+ICtNU1JfSUEzMl9NVFJSX0RFRl9UWVBFX1JF R0lTVEVSICBtRGVmVHlwZU1zcjsNCj4gDQo+ICtNU1JfSUEzMl9NVFJSQ0FQX1JFR0lTVEVSICAg ICAgICBtTXRyckNhcE1zcjsNCj4gDQo+ICtDUFVJRF9WRVJTSU9OX0lORk9fRURYICAgICAgICAg ICBtQ3B1aWRWZXJzaW9uSW5mb0VkeDsNCj4gDQo+ICtDUFVJRF9WSVJfUEhZX0FERFJFU1NfU0la RV9FQVgNCj4gbUNwdWlkVmlyUGh5QWRkcmVzc1NpemVFYXg7DQo+IA0KPiArDQo+IA0KPiArLyoq DQo+IA0KPiArICBSZXRyaWV2ZXMgQ1BVSUQgaW5mb3JtYXRpb24uDQo+IA0KPiArDQo+IA0KPiAr ICBFeGVjdXRlcyB0aGUgQ1BVSUQgaW5zdHJ1Y3Rpb24gd2l0aCBFQVggc2V0IHRvIHRoZQ0KPiB2 YWx1ZSBzcGVjaWZpZWQgYnkgSW5kZXguDQo+IA0KPiArICBUaGlzIGZ1bmN0aW9uIGFsd2F5cyBy ZXR1cm5zIEluZGV4Lg0KPiANCj4gKyAgSWYgRWF4IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB2YWx1 ZSBvZiBFQVggYWZ0ZXINCj4gQ1BVSUQgaXMgcmV0dXJuZWQgaW4gRWF4Lg0KPiANCj4gKyAgSWYg RWJ4IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB2YWx1ZSBvZiBFQlggYWZ0ZXINCj4gQ1BVSUQgaXMg cmV0dXJuZWQgaW4gRWJ4Lg0KPiANCj4gKyAgSWYgRWN4IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB2 YWx1ZSBvZiBFQ1ggYWZ0ZXINCj4gQ1BVSUQgaXMgcmV0dXJuZWQgaW4gRWN4Lg0KPiANCj4gKyAg SWYgRWR4IGlzIG5vdCBOVUxMLCB0aGVuIHRoZSB2YWx1ZSBvZiBFRFggYWZ0ZXINCj4gQ1BVSUQg aXMgcmV0dXJuZWQgaW4gRWR4Lg0KPiANCj4gKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWls YWJsZSBvbiBJQS0zMiBhbmQgeDY0Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtICBJbmRleCBU aGUgMzItYml0IHZhbHVlIHRvIGxvYWQgaW50byBFQVgNCj4gcHJpb3IgdG8gaW52b2tpbmcgdGhl IENQVUlEDQo+IA0KPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLg0KPiANCj4gKyAgQHBh cmFtICBFYXggICBUaGUgcG9pbnRlciB0byB0aGUgMzItYml0IEVBWCB2YWx1ZQ0KPiByZXR1cm5l ZCBieSB0aGUgQ1BVSUQNCj4gDQo+ICsgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24uIFRoaXMg aXMgYW4gb3B0aW9uYWwNCj4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+IA0KPiArICBA cGFyYW0gIEVieCAgIFRoZSBwb2ludGVyIHRvIHRoZSAzMi1iaXQgRUJYIHZhbHVlDQo+IHJldHVy bmVkIGJ5IHRoZSBDUFVJRA0KPiANCj4gKyAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbi4gVGhp cyBpcyBhbiBvcHRpb25hbA0KPiBwYXJhbWV0ZXIgdGhhdCBtYXkgYmUgTlVMTC4NCj4gDQo+ICsg IEBwYXJhbSAgRWN4ICAgVGhlIHBvaW50ZXIgdG8gdGhlIDMyLWJpdCBFQ1ggdmFsdWUNCj4gcmV0 dXJuZWQgYnkgdGhlIENQVUlEDQo+IA0KPiArICAgICAgICAgICAgICAgIGluc3RydWN0aW9uLiBU aGlzIGlzIGFuIG9wdGlvbmFsDQo+IHBhcmFtZXRlciB0aGF0IG1heSBiZSBOVUxMLg0KPiANCj4g KyAgQHBhcmFtICBFZHggICBUaGUgcG9pbnRlciB0byB0aGUgMzItYml0IEVEWCB2YWx1ZQ0KPiBy ZXR1cm5lZCBieSB0aGUgQ1BVSUQNCj4gDQo+ICsgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb24u IFRoaXMgaXMgYW4gb3B0aW9uYWwNCj4gcGFyYW1ldGVyIHRoYXQgbWF5IGJlIE5VTEwuDQo+IA0K PiArDQo+IA0KPiArICBAcmV0dXJuIEluZGV4Lg0KPiANCj4gKw0KPiANCj4gKyoqLw0KPiANCj4g K1VJTlQzMg0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRUZXN0TXRyckxpYkFzbUNwdWlkICgN Cj4gDQo+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJbmRleCwNCj4gDQo+ ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWF4LCAgT1BUSU9OQUwNCj4g DQo+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWJ4LCAgT1BUSU9OQUwN Cj4gDQo+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWN4LCAgT1BUSU9O QUwNCj4gDQo+ICsgIE9VVCAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAqRWR4ICAgT1BU SU9OQUwNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBzd2l0Y2ggKEluZGV4KSB7DQo+ IA0KPiArICBjYXNlIENQVUlEX1ZFUlNJT05fSU5GTzoNCj4gDQo+ICsgICAgaWYgKEVkeCAhPSBO VUxMKSB7DQo+IA0KPiArICAgICAgKkVkeCA9IG1DcHVpZFZlcnNpb25JbmZvRWR4LlVpbnQzMjsN Cj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgICByZXR1cm4gSW5kZXg7DQo+IA0KPiArICAgIGJyZWFr Ow0KPiANCj4gKyAgY2FzZSBDUFVJRF9FWFRFTkRFRF9GVU5DVElPTjoNCj4gDQo+ICsgICAgaWYg KEVheCAhPSBOVUxMKSB7DQo+IA0KPiArICAgICAgKkVheCA9IENQVUlEX1ZJUl9QSFlfQUREUkVT U19TSVpFOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICAgIHJldHVybiBJbmRleDsNCj4gDQo+ICsg ICAgYnJlYWs7DQo+IA0KPiArICBjYXNlIENQVUlEX1ZJUl9QSFlfQUREUkVTU19TSVpFOg0KPiAN Cj4gKyAgICBpZiAoRWF4ICE9IE5VTEwpIHsNCj4gDQo+ICsgICAgICAqRWF4ID0gbUNwdWlkVmly UGh5QWRkcmVzc1NpemVFYXguVWludDMyOw0KPiANCj4gKyAgICB9DQo+IA0KPiArICAgIHJldHVy biBJbmRleDsNCj4gDQo+ICsgICAgYnJlYWs7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiAr ICAvLw0KPiANCj4gKyAgLy8gU2hvdWxkIG5ldmVyIGZhbGwgdGhyb3VnaCB0byBoZXJlDQo+IA0K PiArICAvLw0KPiANCj4gKyAgQVNTRVJUKEZBTFNFKTsNCj4gDQo+ICsgIHJldHVybiBJbmRleDsN Cj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBSZXR1cm5zIGEgNjQtYml0 IE1hY2hpbmUgU3BlY2lmaWMgUmVnaXN0ZXIoTVNSKS4NCj4gDQo+ICsNCj4gDQo+ICsgIFJlYWRz IGFuZCByZXR1cm5zIHRoZSA2NC1iaXQgTVNSIHNwZWNpZmllZCBieSBJbmRleC4NCj4gTm8gcGFy YW1ldGVyIGNoZWNraW5nIGlzDQo+IA0KPiArICBwZXJmb3JtZWQgb24gSW5kZXgsIGFuZCBzb21l IEluZGV4IHZhbHVlcyBtYXkgY2F1c2UNCj4gQ1BVIGV4Y2VwdGlvbnMuIFRoZQ0KPiANCj4gKyAg Y2FsbGVyIG11c3QgZWl0aGVyIGd1YXJhbnRlZSB0aGF0IEluZGV4IGlzIHZhbGlkLCBvcg0KPiB0 aGUgY2FsbGVyIG11c3Qgc2V0IHVwDQo+IA0KPiArICBleGNlcHRpb24gaGFuZGxlcnMgdG8gY2F0 Y2ggdGhlIGV4Y2VwdGlvbnMuIFRoaXMNCj4gZnVuY3Rpb24gaXMgb25seSBhdmFpbGFibGUNCj4g DQo+ICsgIG9uIElBLTMyIGFuZCB4NjQuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gIE1zcklu ZGV4IFRoZSAzMi1iaXQgTVNSIGluZGV4IHRvIHJlYWQuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0 dXJuIFRoZSB2YWx1ZSBvZiB0aGUgTVNSIGlkZW50aWZpZWQgYnkgTXNySW5kZXguDQo+IA0KPiAr DQo+IA0KPiArKiovDQo+IA0KPiArVUlOVDY0DQo+IA0KPiArRUZJQVBJDQo+IA0KPiArVW5pdFRl c3RNdHJyTGliQXNtUmVhZE1zcjY0KA0KPiANCj4gKyAgSU4gVUlOVDMyICBNc3JJbmRleA0KPiAN Cj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlQzMiBJbmRleDsNCj4gDQo+ICsNCj4gDQo+ ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFSUkFZX1NJWkUNCj4gKG1GaXhlZE10cnJzVmFs dWUpOyBJbmRleCsrKSB7DQo+IA0KPiArICAgIGlmIChNc3JJbmRleCA9PSBtRml4ZWRNdHJyc0lu ZGV4W0luZGV4XSkgew0KPiANCj4gKyAgICAgIHJldHVybiBtRml4ZWRNdHJyc1ZhbHVlW0luZGV4 XTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgaWYgKChNc3JJ bmRleCA+PSBNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkgJiYNCj4gDQo+ICsgICAgICAoTXNySW5k ZXggPD0gTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzAgKw0KPiAoTVRSUl9OVU1CRVJfT0ZfVkFSSUFC TEVfTVRSUiA8PCAxKSkpIHsNCj4gDQo+ICsgICAgaWYgKE1zckluZGV4ICUgMiA9PSAwKSB7DQo+ IA0KPiArICAgICAgSW5kZXggPSAoTXNySW5kZXggLSBNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkg Pj4NCj4gMTsNCj4gDQo+ICsgICAgICByZXR1cm4gbVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJbmRl eF0uVWludDY0Ow0KPiANCj4gKyAgICB9IGVsc2Ugew0KPiANCj4gKyAgICAgIEluZGV4ID0gKE1z ckluZGV4IC0gTVNSX0lBMzJfTVRSUl9QSFlTTUFTSzApID4+DQo+IDE7DQo+IA0KPiArICAgICAg cmV0dXJuIG1WYXJpYWJsZU10cnJzUGh5c01hc2tbSW5kZXhdLlVpbnQ2NDsNCj4gDQo+ICsgICAg fQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgaWYgKE1zckluZGV4ID09IE1TUl9JQTMy X01UUlJfREVGX1RZUEUpIHsNCj4gDQo+ICsgICAgcmV0dXJuIG1EZWZUeXBlTXNyLlVpbnQ2NDsN Cj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGlmIChNc3JJbmRleCA9PSBNU1JfSUEzMl9N VFJSQ0FQKSB7DQo+IA0KPiArICAgIHJldHVybiBtTXRyckNhcE1zci5VaW50NjQ7DQo+IA0KPiAr ICB9DQo+IA0KPiArDQo+IA0KPiArICAvLw0KPiANCj4gKyAgLy8gU2hvdWxkIG5ldmVyIGZhbGwg dGhyb3VnaCB0byBoZXJlDQo+IA0KPiArICAvLw0KPiANCj4gKyAgQVNTRVJUKEZBTFNFKTsNCj4g DQo+ICsgIHJldHVybiAwOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsg IFdyaXRlcyBhIDY0LWJpdCB2YWx1ZSB0byBhIE1hY2hpbmUgU3BlY2lmaWMNCj4gUmVnaXN0ZXIo TVNSKSwgYW5kIHJldHVybnMgdGhlDQo+IA0KPiArICB2YWx1ZS4NCj4gDQo+ICsNCj4gDQo+ICsg IFdyaXRlcyB0aGUgNjQtYml0IHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZSB0byB0aGUNCj4gTVNS IHNwZWNpZmllZCBieSBJbmRleC4gVGhlDQo+IA0KPiArICA2NC1iaXQgdmFsdWUgd3JpdHRlbiB0 byB0aGUgTVNSIGlzIHJldHVybmVkLiBObw0KPiBwYXJhbWV0ZXIgY2hlY2tpbmcgaXMNCj4gDQo+ ICsgIHBlcmZvcm1lZCBvbiBJbmRleCBvciBWYWx1ZSwgYW5kIHNvbWUgb2YgdGhlc2UgbWF5DQo+ IGNhdXNlIENQVSBleGNlcHRpb25zLiBUaGUNCj4gDQo+ICsgIGNhbGxlciBtdXN0IGVpdGhlciBn dWFyYW50ZWUgdGhhdCBJbmRleCBhbmQgVmFsdWUNCj4gYXJlIHZhbGlkLCBvciB0aGUgY2FsbGVy DQo+IA0KPiArICBtdXN0IGVzdGFibGlzaCBwcm9wZXIgZXhjZXB0aW9uIGhhbmRsZXJzLiBUaGlz DQo+IGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIG9uDQo+IA0KPiArICBJQS0zMiBhbmQgeDY0 Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtICBNc3JJbmRleCBUaGUgMzItYml0IE1TUiBpbmRl eCB0byB3cml0ZS4NCj4gDQo+ICsgIEBwYXJhbSAgVmFsdWUgVGhlIDY0LWJpdCB2YWx1ZSB0byB3 cml0ZSB0byB0aGUgTVNSLg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBWYWx1ZQ0KPiANCj4g Kw0KPiANCj4gKyoqLw0KPiANCj4gK1VJTlQ2NA0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK1VuaXRU ZXN0TXRyckxpYkFzbVdyaXRlTXNyNjQoDQo+IA0KPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAg ICAgICAgICAgICAgTXNySW5kZXgsDQo+IA0KPiArICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgVmFsdWUNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBVSU5UMzIgSW5k ZXg7DQo+IA0KPiArDQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBBUlJBWV9TSVpF DQo+IChtRml4ZWRNdHJyc1ZhbHVlKTsgSW5kZXgrKykgew0KPiANCj4gKyAgICBpZiAoTXNySW5k ZXggPT0gbUZpeGVkTXRycnNJbmRleFtJbmRleF0pIHsNCj4gDQo+ICsgICAgICBtRml4ZWRNdHJy c1ZhbHVlW0luZGV4XSA9IFZhbHVlOw0KPiANCj4gKyAgICAgIHJldHVybiBWYWx1ZTsNCj4gDQo+ ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgaWYgKChNc3JJbmRleCA+PSBN U1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkgJiYNCj4gDQo+ICsgICAgICAoTXNySW5kZXggPD0gTVNS X0lBMzJfTVRSUl9QSFlTTUFTSzAgKw0KPiAoTVRSUl9OVU1CRVJfT0ZfVkFSSUFCTEVfTVRSUiA8 PCAxKSkpIHsNCj4gDQo+ICsgICAgaWYgKE1zckluZGV4ICUgMiA9PSAwKSB7DQo+IA0KPiArICAg ICAgSW5kZXggPSAoTXNySW5kZXggLSBNU1JfSUEzMl9NVFJSX1BIWVNCQVNFMCkgPj4NCj4gMTsN Cj4gDQo+ICsgICAgICBtVmFyaWFibGVNdHJyc1BoeXNCYXNlW0luZGV4XS5VaW50NjQgPSBWYWx1 ZTsNCj4gDQo+ICsgICAgICByZXR1cm4gVmFsdWU7DQo+IA0KPiArICAgIH0gZWxzZSB7DQo+IA0K PiArICAgICAgSW5kZXggPSAoTXNySW5kZXggLSBNU1JfSUEzMl9NVFJSX1BIWVNNQVNLMCkgPj4N Cj4gMTsNCj4gDQo+ICsgICAgICBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5VaW50NjQg PSBWYWx1ZTsNCj4gDQo+ICsgICAgICByZXR1cm4gVmFsdWU7DQo+IA0KPiArICAgIH0NCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIGlmIChNc3JJbmRleCA9PSBNU1JfSUEzMl9NVFJSX0RF Rl9UWVBFKSB7DQo+IA0KPiArICAgIG1EZWZUeXBlTXNyLlVpbnQ2NCA9IFZhbHVlOw0KPiANCj4g KyAgICByZXR1cm4gVmFsdWU7DQo+IA0KPiArICB9DQo+IA0KPiArDQo+IA0KPiArICBpZiAoTXNy SW5kZXggPT0gTVNSX0lBMzJfTVRSUkNBUCkgew0KPiANCj4gKyAgICBtTXRyckNhcE1zci5VaW50 NjQgPSBWYWx1ZTsNCj4gDQo+ICsgICAgcmV0dXJuIFZhbHVlOw0KPiANCj4gKyAgfQ0KPiANCj4g Kw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIFNob3VsZCBuZXZlciBmYWxsIHRocm91Z2ggdG8g aGVyZQ0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIEFTU0VSVChGQUxTRSk7DQo+IA0KPiArICByZXR1 cm4gMDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBJbml0aWFsaXpl IE1UUlIgcmVnaXN0ZXJzLg0KPiANCj4gKyoqLw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4g KyAgSW5pdGlhbGl6ZSB0aGUgTVRSUiByZWdpc3RlcnMuDQo+IA0KPiArDQo+IA0KPiArICBAcGFy YW0gU3lzdGVtUGFyYW1ldGVyIFN5c3RlbSBwYXJhbWV0ZXIgdGhhdA0KPiBjb250cm9scyB0aGUg TVRSUiByZWdpc3RlcnMgaW5pdGlhbGl6YXRpb24uDQo+IA0KPiArKiovDQo+IA0KPiArVU5JVF9U RVNUX1NUQVRVUw0KPiANCj4gK0VGSUFQSQ0KPiANCj4gK0luaXRpYWxpemVNdHJyUmVncyAoDQo+ IA0KPiArICBJTiBNVFJSX0xJQl9TWVNURU1fUEFSQU1FVEVSICAqU3lzdGVtUGFyYW1ldGVyDQo+ IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBJ bmRleDsNCj4gDQo+ICsNCj4gDQo+ICsgIFNldE1lbSAobUZpeGVkTXRycnNWYWx1ZSwgc2l6ZW9m IChtRml4ZWRNdHJyc1ZhbHVlKSwNCj4gU3lzdGVtUGFyYW1ldGVyLT5EZWZhdWx0Q2FjaGVUeXBl KTsNCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IEFSUkFZX1NJWkUN Cj4gKG1WYXJpYWJsZU10cnJzUGh5c0Jhc2UpOyBJbmRleCsrKSB7DQo+IA0KPiArICAgIG1WYXJp YWJsZU10cnJzUGh5c0Jhc2VbSW5kZXhdLlVpbnQ2NCAgICAgICAgID0gMDsNCj4gDQo+ICsgICAg bVZhcmlhYmxlTXRycnNQaHlzQmFzZVtJbmRleF0uQml0cy5UeXBlICAgICAgPQ0KPiBTeXN0ZW1Q YXJhbWV0ZXItPkRlZmF1bHRDYWNoZVR5cGU7DQo+IA0KPiArICAgIG1WYXJpYWJsZU10cnJzUGh5 c0Jhc2VbSW5kZXhdLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gDQo+ICsNCj4gDQo+ICsgICAgbVZh cmlhYmxlTXRycnNQaHlzTWFza1tJbmRleF0uVWludDY0ICAgICAgICAgPSAwOw0KPiANCj4gKyAg ICBtVmFyaWFibGVNdHJyc1BoeXNNYXNrW0luZGV4XS5CaXRzLlYgICAgICAgICA9IDA7DQo+IA0K PiArICAgIG1WYXJpYWJsZU10cnJzUGh5c01hc2tbSW5kZXhdLkJpdHMuUmVzZXJ2ZWQxID0gMDsN Cj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIG1EZWZUeXBlTXNyLkJpdHMuRSAgICAgICAg ID0gMTsNCj4gDQo+ICsgIG1EZWZUeXBlTXNyLkJpdHMuRkUgICAgICAgID0gMTsNCj4gDQo+ICsg IG1EZWZUeXBlTXNyLkJpdHMuVHlwZSAgICAgID0gU3lzdGVtUGFyYW1ldGVyLQ0KPiA+RGVmYXVs dENhY2hlVHlwZTsNCj4gDQo+ICsgIG1EZWZUeXBlTXNyLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4g DQo+ICsgIG1EZWZUeXBlTXNyLkJpdHMuUmVzZXJ2ZWQyID0gMDsNCj4gDQo+ICsgIG1EZWZUeXBl TXNyLkJpdHMuUmVzZXJ2ZWQzID0gMDsNCj4gDQo+ICsNCj4gDQo+ICsgIG1NdHJyQ2FwTXNyLkJp dHMuU01SUiAgICAgID0gMDsNCj4gDQo+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuV0MgICAgICAgID0g MDsNCj4gDQo+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuVkNOVCAgICAgID0gU3lzdGVtUGFyYW1ldGVy LQ0KPiA+VmFyaWFibGVNdHJyQ291bnQ7DQo+IA0KPiArICBtTXRyckNhcE1zci5CaXRzLkZJWCAg ICAgICA9IFN5c3RlbVBhcmFtZXRlci0NCj4gPkZpeGVkTXRyclN1cHBvcnRlZDsNCj4gDQo+ICsg IG1NdHJyQ2FwTXNyLkJpdHMuUmVzZXJ2ZWQxID0gMDsNCj4gDQo+ICsgIG1NdHJyQ2FwTXNyLkJp dHMuUmVzZXJ2ZWQyID0gMDsNCj4gDQo+ICsgIG1NdHJyQ2FwTXNyLkJpdHMuUmVzZXJ2ZWQzID0g MDsNCj4gDQo+ICsNCj4gDQo+ICsgIG1DcHVpZFZlcnNpb25JbmZvRWR4LkJpdHMuTVRSUg0KPiA9 IFN5c3RlbVBhcmFtZXRlci0+TXRyclN1cHBvcnRlZDsNCj4gDQo+ICsgIG1DcHVpZFZpclBoeUFk ZHJlc3NTaXplRWF4LkJpdHMuUGh5c2ljYWxBZGRyZXNzQml0cw0KPiA9IFN5c3RlbVBhcmFtZXRl ci0+UGh5c2ljYWxBZGRyZXNzQml0czsNCj4gDQo+ICsNCj4gDQo+ICsgIC8vDQo+IA0KPiArICAv LyBIb29rIEJhc2VMaWIgZnVuY3Rpb25zIHVzZWQgYnkgTXRyckxpYiB0aGF0DQo+IHJlcXVpcmUg c29tZSBlbXVsYXRpb24uDQo+IA0KPiArICAvLw0KPiANCj4gKyAgZ1VuaXRUZXN0SG9zdEJhc2VM aWIuWDg2LT5Bc21DcHVpZCAgICAgID0NCj4gVW5pdFRlc3RNdHJyTGliQXNtQ3B1aWQ7DQo+IA0K PiArICBnVW5pdFRlc3RIb3N0QmFzZUxpYi5YODYtPkFzbVJlYWRNc3I2NCAgPQ0KPiBVbml0VGVz dE10cnJMaWJBc21SZWFkTXNyNjQ7DQo+IA0KPiArICBnVW5pdFRlc3RIb3N0QmFzZUxpYi5YODYt PkFzbVdyaXRlTXNyNjQgPQ0KPiBVbml0VGVzdE10cnJMaWJBc21Xcml0ZU1zcjY0Ow0KPiANCj4g Kw0KPiANCj4gKyAgcmV0dXJuIFVOSVRfVEVTVF9QQVNTRUQ7DQo+IA0KPiArfQ0KPiANCj4gKw0K PiANCj4gKy8qKg0KPiANCj4gKyAgQ29sbGVjdCB0aGUgdGVzdCByZXN1bHQuDQo+IA0KPiArDQo+ IA0KPiArICBAcGFyYW0gRGVmYXVsdFR5cGUgICAgICAgICAgRGVmYXVsdCBtZW1vcnkgdHlwZS4N Cj4gDQo+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICBQaHlzaWNhbCBhZGRyZXNzIGJp dHMuDQo+IA0KPiArICBAcGFyYW0gVmFyaWFibGVNdHJyQ291bnQgICAgQ291bnQgb2YgdmFyaWFi bGUgTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gTXRycnMgICAgICAgICAgICAgICAgTVRSUiBzZXR0 aW5ncyB0byBjb2xsZWN0DQo+IGZyb20uDQo+IA0KPiArICBAcGFyYW0gUmFuZ2VzICAgICAgICAg ICAgICAgUmV0dXJuIHRoZSBtZW1vcnkNCj4gcmFuZ2VzLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdl Q291bnQgICAgICAgICAgIFJldHVybiB0aGUgY291bnQgb2YNCj4gbWVtb3J5IHJhbmdlcy4NCj4g DQo+ICsgIEBwYXJhbSBNdHJyQ291bnQgICAgICAgICAgICBSZXR1cm4gdGhlIGNvdW50IG9mDQo+ IHZhcmlhYmxlIE1UUlJzIGJlaW5nIHVzZWQuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiAN Cj4gK0NvbGxlY3RUZXN0UmVzdWx0ICgNCj4gDQo+ICsgIElOICAgICBNVFJSX01FTU9SWV9DQUNI RV9UWVBFIERlZmF1bHRUeXBlLA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAg ICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAg ICAgICAgIFZhcmlhYmxlTXRyckNvdW50LA0KPiANCj4gKyAgSU4gICAgIE1UUlJfU0VUVElOR1Mg ICAgICAgICAgKk10cnJzLA0KPiANCj4gKyAgT1VUICAgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAg KlJhbmdlcywNCj4gDQo+ICsgIElOIE9VVCBVSU5UTiAgICAgICAgICAgICAgICAgICpSYW5nZUNv dW50LA0KPiANCj4gKyAgT1VUICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgKk10cnJDb3VudA0K PiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgIEluZGV4Ow0K PiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgTXRyclZhbGlkQml0c01hc2s7DQo+IA0KPiArICBV SU5UNjQgICAgICAgICAgICBNdHJyVmFsaWRBZGRyZXNzTWFzazsNCj4gDQo+ICsgIE1UUlJfTUVN T1JZX1JBTkdFIFJhd01lbW9yeVJhbmdlc1tBUlJBWV9TSVpFIChNdHJycy0NCj4gPlZhcmlhYmxl cy5NdHJyKV07DQo+IA0KPiArDQo+IA0KPiArICBBU1NFUlQgKE10cnJzICE9IE5VTEwpOw0KPiAN Cj4gKyAgQVNTRVJUIChWYXJpYWJsZU10cnJDb3VudCA8PSBBUlJBWV9TSVpFIChNdHJycy0NCj4g PlZhcmlhYmxlcy5NdHJyKSk7DQo+IA0KPiArDQo+IA0KPiArICBNdHJyVmFsaWRCaXRzTWFzayA9 ICgxdWxsIDw8IFBoeXNpY2FsQWRkcmVzc0JpdHMpIC0NCj4gMTsNCj4gDQo+ICsgIE10cnJWYWxp ZEFkZHJlc3NNYXNrID0gTXRyclZhbGlkQml0c01hc2sgJg0KPiB+MHhGRkZ1bGw7DQo+IA0KPiAr DQo+IA0KPiArICAqTXRyckNvdW50ID0gMDsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRl eCA8IFZhcmlhYmxlTXRyckNvdW50OyBJbmRleCsrKQ0KPiB7DQo+IA0KPiArICAgIGlmICgoKE1T Ul9JQTMyX01UUlJfUEhZU01BU0tfUkVHSVNURVIgKikgJk10cnJzLQ0KPiA+VmFyaWFibGVzLk10 cnJbSW5kZXhdLk1hc2spLT5CaXRzLlYgPT0gMSkgew0KPiANCj4gKyAgICAgIFJhd01lbW9yeVJh bmdlc1sqTXRyckNvdW50XS5CYXNlQWRkcmVzcyA9IE10cnJzLQ0KPiA+VmFyaWFibGVzLk10cnJb SW5kZXhdLkJhc2UgJiBNdHJyVmFsaWRBZGRyZXNzTWFzazsNCj4gDQo+ICsgICAgICBSYXdNZW1v cnlSYW5nZXNbKk10cnJDb3VudF0uVHlwZSAgICAgICAgPQ0KPiANCj4gKyAgICAgICAgKChNU1Jf SUEzMl9NVFJSX1BIWVNCQVNFX1JFR0lTVEVSICopICZNdHJycy0NCj4gPlZhcmlhYmxlcy5NdHJy W0luZGV4XS5CYXNlKS0+Qml0cy5UeXBlOw0KPiANCj4gKyAgICAgIFJhd01lbW9yeVJhbmdlc1sq TXRyckNvdW50XS5MZW5ndGggICAgICA9DQo+IA0KPiArICAgICAgICAgICgofihNdHJycy0+VmFy aWFibGVzLk10cnJbSW5kZXhdLk1hc2sgJg0KPiBNdHJyVmFsaWRBZGRyZXNzTWFzaykpICYgTXRy clZhbGlkQml0c01hc2spICsgMTsNCj4gDQo+ICsgICAgICAoKk10cnJDb3VudCkrKzsNCj4gDQo+ ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgR2V0RWZmZWN0aXZlTWVtb3J5 UmFuZ2VzIChEZWZhdWx0VHlwZSwNCj4gUGh5c2ljYWxBZGRyZXNzQml0cywgUmF3TWVtb3J5UmFu Z2VzLCAqTXRyckNvdW50LA0KPiBSYW5nZXMsIFJhbmdlQ291bnQpOw0KPiANCj4gK30NCj4gDQo+ ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFJldHVybiBhIDMyYml0IHJhbmRvbSBudW1iZXIuDQo+ IA0KPiArDQo+IA0KPiArICBAcGFyYW0gU3RhcnQgIFN0YXJ0IG9mIHRoZSByYW5kb20gbnVtYmVy IHJhbmdlLg0KPiANCj4gKyAgQHBhcmFtIExpbWl0ICBMaW1pdCBvZiB0aGUgcmFuZG9tIG51bWJl ciByYW5nZS4NCj4gDQo+ICsgIEByZXR1cm4gMzJiaXQgcmFuZG9tIG51bWJlcg0KPiANCj4gKyoq Lw0KPiANCj4gK1VJTlQzMg0KPiANCj4gK1JhbmRvbTMyICgNCj4gDQo+ICsgIFVJTlQzMiAgU3Rh cnQsDQo+IA0KPiArICBVSU5UMzIgIExpbWl0DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4g KyAgcmV0dXJuIChVSU5UMzIpICgoKGRvdWJsZSkgcmFuZCAoKSAvIFJBTkRfTUFYKSAqDQo+IChM aW1pdCAtIFN0YXJ0KSkgKyBTdGFydDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+ IA0KPiArICBSZXR1cm4gYSA2NGJpdCByYW5kb20gbnVtYmVyLg0KPiANCj4gKw0KPiANCj4gKyAg QHBhcmFtIFN0YXJ0ICBTdGFydCBvZiB0aGUgcmFuZG9tIG51bWJlciByYW5nZS4NCj4gDQo+ICsg IEBwYXJhbSBMaW1pdCAgTGltaXQgb2YgdGhlIHJhbmRvbSBudW1iZXIgcmFuZ2UuDQo+IA0KPiAr ICBAcmV0dXJuIDY0Yml0IHJhbmRvbSBudW1iZXINCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UNjQN Cj4gDQo+ICtSYW5kb202NCAoDQo+IA0KPiArICBVSU5UNjQgIFN0YXJ0LA0KPiANCj4gKyAgVUlO VDY0ICBMaW1pdA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIHJldHVybiAoVUlOVDY0 KSAoKChkb3VibGUpIHJhbmQgKCkgLyBSQU5EX01BWCkgKg0KPiAoTGltaXQgLSBTdGFydCkpICsg U3RhcnQ7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgR2VuZXJhdGUg cmFuZG9tIE1UUlIgQkFTRS9NQVNLIGZvciBhIHNwZWNpZmllZCB0eXBlLg0KPiANCj4gKw0KPiAN Cj4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgUGh5c2ljYWwgYWRkcmVzcyBiaXRzLg0K PiANCj4gKyAgQHBhcmFtIENhY2hlVHlwZSAgICAgICAgICAgQ2FjaGUgdHlwZS4NCj4gDQo+ICsg IEBwYXJhbSBNdHJyUGFpciAgICAgICAgICAgIFJldHVybiB0aGUgcmFuZG9tIE1UUlIuDQo+IA0K PiArICBAcGFyYW0gTXRyck1lbW9yeVJhbmdlICAgICBSZXR1cm4gdGhlIHJhbmRvbSBtZW1vcnkN Cj4gcmFuZ2UuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0dlbmVyYXRlUmFuZG9t TXRyclBhaXIgKA0KPiANCj4gKyAgSU4gIFVJTlQzMiAgICAgICAgICAgICAgICAgUGh5c2ljYWxB ZGRyZXNzQml0cywNCj4gDQo+ICsgIElOICBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIENhY2hlVHlw ZSwNCj4gDQo+ICsgIE9VVCBNVFJSX1ZBUklBQkxFX1NFVFRJTkcgICpNdHJyUGFpciwgICAgICAg T1BUSU9OQUwNCj4gDQo+ICsgIE9VVCBNVFJSX01FTU9SWV9SQU5HRSAgICAgICpNdHJyTWVtb3J5 UmFuZ2UgT1BUSU9OQUwNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBNU1JfSUEzMl9N VFJSX1BIWVNCQVNFX1JFR0lTVEVSIFBoeXNCYXNlOw0KPiANCj4gKyAgTVNSX0lBMzJfTVRSUl9Q SFlTTUFTS19SRUdJU1RFUiBQaHlzTWFzazsNCj4gDQo+ICsgIFVJTlQzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgU2l6ZVNoaWZ0Ow0KPiANCj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAg ICAgICAgICBCYXNlU2hpZnQ7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAgICAgICAg ICAgIFJhbmRvbUJvdW5kYXJ5Ow0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICAg ICAgICBNYXhQaHlzaWNhbEFkZHJlc3M7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAgICAgICAg ICAgICAgICAgIFJhbmdlU2l6ZTsNCj4gDQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAg ICAgICAgUmFuZ2VCYXNlOw0KPiANCj4gKyAgVUlOVDY0DQo+IFBoeXNCYXNlUGh5TWFza1ZhbGlk Qml0c01hc2s7DQo+IA0KPiArDQo+IA0KPiArICBNYXhQaHlzaWNhbEFkZHJlc3MgPSAxdWxsIDw8 IFBoeXNpY2FsQWRkcmVzc0JpdHM7DQo+IA0KPiArICBkbyB7DQo+IA0KPiArICAgIFNpemVTaGlm dCA9IFJhbmRvbTMyICgxMiwgUGh5c2ljYWxBZGRyZXNzQml0cyAtDQo+IDEpOw0KPiANCj4gKyAg ICBSYW5nZVNpemUgPSAxdWxsIDw8IFNpemVTaGlmdDsNCj4gDQo+ICsNCj4gDQo+ICsgICAgQmFz ZVNoaWZ0ID0gUmFuZG9tMzIgKFNpemVTaGlmdCwNCj4gUGh5c2ljYWxBZGRyZXNzQml0cyAtIDEp Ow0KPiANCj4gKyAgICBSYW5kb21Cb3VuZGFyeSA9IFJhbmRvbTY0ICgwLCAxdWxsIDw8DQo+IChQ aHlzaWNhbEFkZHJlc3NCaXRzIC0gQmFzZVNoaWZ0KSk7DQo+IA0KPiArICAgIFJhbmdlQmFzZSA9 IFJhbmRvbUJvdW5kYXJ5IDw8IEJhc2VTaGlmdDsNCj4gDQo+ICsgIH0gd2hpbGUgKFJhbmdlQmFz ZSA8IFNJWkVfMU1CIHx8IFJhbmdlQmFzZSA+DQo+IE1heFBoeXNpY2FsQWRkcmVzcyAtIDEpOw0K PiANCj4gKw0KPiANCj4gKyAgUGh5c0Jhc2VQaHlNYXNrVmFsaWRCaXRzTWFzayA9IChNYXhQaHlz aWNhbEFkZHJlc3MgLQ0KPiAxKSAmIDB4ZmZmZmZmZmZmZmZmZjAwMFVMTDsNCj4gDQo+ICsNCj4g DQo+ICsgIFBoeXNCYXNlLlVpbnQ2NCAgICA9IDA7DQo+IA0KPiArICBQaHlzQmFzZS5CaXRzLlR5 cGUgPSBDYWNoZVR5cGU7DQo+IA0KPiArICBQaHlzQmFzZS5VaW50NjQgICB8PSBSYW5nZUJhc2Ug Jg0KPiBQaHlzQmFzZVBoeU1hc2tWYWxpZEJpdHNNYXNrOw0KPiANCj4gKyAgUGh5c01hc2suVWlu dDY0ICAgID0gMDsNCj4gDQo+ICsgIFBoeXNNYXNrLkJpdHMuViAgICA9IDE7DQo+IA0KPiArICBQ aHlzTWFzay5VaW50NjQgICB8PSAoKH5SYW5nZVNpemUpICsgMSkgJg0KPiBQaHlzQmFzZVBoeU1h c2tWYWxpZEJpdHNNYXNrOw0KPiANCj4gKw0KPiANCj4gKyAgaWYgKE10cnJQYWlyICE9IE5VTEwp IHsNCj4gDQo+ICsgICAgTXRyclBhaXItPkJhc2UgPSBQaHlzQmFzZS5VaW50NjQ7DQo+IA0KPiAr ICAgIE10cnJQYWlyLT5NYXNrID0gUGh5c01hc2suVWludDY0Ow0KPiANCj4gKyAgfQ0KPiANCj4g Kw0KPiANCj4gKyAgaWYgKE10cnJNZW1vcnlSYW5nZSAhPSBOVUxMKSB7DQo+IA0KPiArICAgIE10 cnJNZW1vcnlSYW5nZS0+QmFzZUFkZHJlc3MgPSBSYW5nZUJhc2U7DQo+IA0KPiArICAgIE10cnJN ZW1vcnlSYW5nZS0+TGVuZ3RoICAgICAgPSBSYW5nZVNpemU7DQo+IA0KPiArICAgIE10cnJNZW1v cnlSYW5nZS0+VHlwZSAgICAgICAgPSBDYWNoZVR5cGU7DQo+IA0KPiArICB9DQo+IA0KPiArfQ0K PiANCj4gKw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ2hlY2sgd2hldGhlciB0aGUg UmFuZ2Ugb3ZlcmxhcHMgd2l0aCBhbnkgb25lIGluDQo+IFJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ ICsgIEBwYXJhbSBSYW5nZSAgVGhlIG1lbW9yeSByYW5nZSB0byBjaGVjay4NCj4gDQo+ICsgIEBw YXJhbSBSYW5nZXMgVGhlIG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gQ291bnQgIENv dW50IG9mIG1lbW9yeSByYW5nZXMuDQo+IA0KPiArDQo+IA0KPiArICBAcmV0dXJuIFRSVUUgd2hl biBvdmVybGFwIGV4aXN0cy4NCj4gDQo+ICsqKi8NCj4gDQo+ICtCT09MRUFODQo+IA0KPiArUmFu Z2VzT3ZlcmxhcCAoDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmFuZ2UsDQo+IA0K PiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmFuZ2VzLA0KPiANCj4gKyAgSU4gVUlOVE4gICAg ICAgICAgICAgQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICB3aGlsZSAoQ291 bnQtLSAhPSAwKSB7DQo+IA0KPiArICAgIC8vDQo+IA0KPiArICAgIC8vIFR3byByYW5nZXMgb3Zl cmxhcCB3aGVuOg0KPiANCj4gKyAgICAvLyAxLiByYW5nZSMyLmJhc2UgaXMgaW4gdGhlIG1pZGRs ZSBvZiByYW5nZSMxDQo+IA0KPiArICAgIC8vIDIuIHJhbmdlIzEuYmFzZSBpcyBpbiB0aGUgbWlk ZGxlIG9mIHJhbmdlIzINCj4gDQo+ICsgICAgLy8NCj4gDQo+ICsgICAgaWYgKChSYW5nZS0+QmFz ZUFkZHJlc3MgPD0NCj4gUmFuZ2VzW0NvdW50XS5CYXNlQWRkcmVzcyAmJiBSYW5nZXNbQ291bnRd LkJhc2VBZGRyZXNzDQo+IDwgUmFuZ2UtPkJhc2VBZGRyZXNzICsgUmFuZ2UtPkxlbmd0aCkNCj4g DQo+ICsgICAgIHx8IChSYW5nZXNbQ291bnRdLkJhc2VBZGRyZXNzIDw9IFJhbmdlLQ0KPiA+QmFz ZUFkZHJlc3MgJiYgUmFuZ2UtPkJhc2VBZGRyZXNzIDwNCj4gUmFuZ2VzW0NvdW50XS5CYXNlQWRk cmVzcyArIFJhbmdlc1tDb3VudF0uTGVuZ3RoKSkgew0KPiANCj4gKyAgICAgIHJldHVybiBUUlVF Ow0KPiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiArICByZXR1cm4gRkFMU0U7DQo+IA0K PiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgR2VuZXJhdGUgcmFuZG9tIE1UUlJz Lg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIFBoeXNpY2FsQWRkcmVzc0JpdHMgIFBoeXNpY2Fs IGFkZHJlc3MgYml0cy4NCj4gDQo+ICsgIEBwYXJhbSBSYXdNZW1vcnlSYW5nZXMgICAgICBSZXR1 cm4gdGhlIHJhbmRvbWx5DQo+IGdlbmVyYXRlZCBNVFJScy4NCj4gDQo+ICsgIEBwYXJhbSBVY0Nv dW50ICAgICAgICAgICAgICBDb3VudCBvZiBVbmNhY2hlYWJsZQ0KPiBNVFJScy4NCj4gDQo+ICsg IEBwYXJhbSBXdENvdW50ICAgICAgICAgICAgICBDb3VudCBvZiBXcml0ZSBUaHJvdWdoDQo+IE1U UlJzLg0KPiANCj4gKyAgQHBhcmFtIFdiQ291bnQgICAgICAgICAgICAgIENvdW50IG9mIFdyaXRl IEJhY2sNCj4gTVRSUnMuDQo+IA0KPiArICBAcGFyYW0gV3BDb3VudCAgICAgICAgICAgICAgQ291 bnQgb2YgV3JpdGUgUHJvdGVjdGVkDQo+IE1UUlJzLg0KPiANCj4gKyAgQHBhcmFtIFdjQ291bnQg ICAgICAgICAgICAgIENvdW50IG9mIFdyaXRlIENvbWJpbmUNCj4gTVRSUnMuDQo+IA0KPiArKiov DQo+IA0KPiArVk9JRA0KPiANCj4gK0dlbmVyYXRlVmFsaWRBbmRDb25maWd1cmFibGVNdHJyUGFp cnMgKA0KPiANCj4gKyAgSU4gICAgIFVJTlQzMg0KPiBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiAN Cj4gKyAgSU4gT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgKlJhd01lbW9yeVJhbmdlcywN Cj4gDQo+ICsgIElOICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFVjQ291bnQsDQo+IA0K PiArICBJTiAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBXdENvdW50LA0KPiANCj4gKyAg SU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgV2JDb3VudCwNCj4gDQo+ICsgIElOICAg ICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFdwQ291bnQsDQo+IA0KPiArICBJTiAgICAgVUlO VDMyICAgICAgICAgICAgICAgICAgICBXY0NvdW50DQo+IA0KPiArICApDQo+IA0KPiArew0KPiAN Cj4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsNCj4g DQo+ICsgIC8vDQo+IA0KPiArICAvLyAxLiBHZW5lcmF0ZSBVQywgV1QsIFdCIGluIG9yZGVyLg0K PiANCj4gKyAgLy8NCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFVjQ291bnQ7IElu ZGV4KyspIHsNCj4gDQo+ICsgICAgR2VuZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRy ZXNzQml0cywNCj4gQ2FjaGVVbmNhY2hlYWJsZSwgTlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRl eF0pOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChJbmRleCA9IFVjQ291bnQ7 IEluZGV4IDwgVWNDb3VudCArIFd0Q291bnQ7DQo+IEluZGV4KyspIHsNCj4gDQo+ICsgICAgR2Vu ZXJhdGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gQ2FjaGVXcml0ZVRo cm91Z2gsIE5VTEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsgIH0NCj4gDQo+ ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSBVY0NvdW50ICsgV3RDb3VudDsgSW5kZXggPCBVY0Nv dW50ICsNCj4gV3RDb3VudCArIFdiQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ICsgICAgR2VuZXJh dGVSYW5kb21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gQ2FjaGVXcml0ZUJhY2ss IE5VTEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4g DQo+ICsgIC8vDQo+IA0KPiArICAvLyAyLiBHZW5lcmF0ZSBXUCBNVFJSIGFuZCBETyBOT1Qgb3Zl cmxhcCB3aXRoIFdULA0KPiBXQi4NCj4gDQo+ICsgIC8vDQo+IA0KPiArICBmb3IgKEluZGV4ID0g VWNDb3VudCArIFd0Q291bnQgKyBXYkNvdW50OyBJbmRleCA8DQo+IFVjQ291bnQgKyBXdENvdW50 ICsgV2JDb3VudCArIFdwQ291bnQ7IEluZGV4KyspIHsNCj4gDQo+ICsgICAgR2VuZXJhdGVSYW5k b21NdHJyUGFpciAoUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gQ2FjaGVXcml0ZVByb3RlY3RlZCwg TlVMTCwgJlJhd01lbW9yeVJhbmdlc1tJbmRleF0pOw0KPiANCj4gKyAgICB3aGlsZSAoUmFuZ2Vz T3ZlcmxhcCAoJlJhd01lbW9yeVJhbmdlc1tJbmRleF0sDQo+ICZSYXdNZW1vcnlSYW5nZXNbVWND b3VudF0sIFd0Q291bnQgKyBXYkNvdW50KSkgew0KPiANCj4gKyAgICAgIEdlbmVyYXRlUmFuZG9t TXRyclBhaXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVQcm90ZWN0ZWQsIE5V TEwsICZSYXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0K PiANCj4gKw0KPiANCj4gKyAgLy8NCj4gDQo+ICsgIC8vIDMuIEdlbmVyYXRlIFdDIE1UUlIgYW5k IERPIE5PVCBvdmVybGFwIHdpdGggV1QsDQo+IFdCLCBXUC4NCj4gDQo+ICsgIC8vDQo+IA0KPiAr ICBmb3IgKEluZGV4ID0gVWNDb3VudCArIFd0Q291bnQgKyBXYkNvdW50ICsgV3BDb3VudDsNCj4g SW5kZXggPCBVY0NvdW50ICsgV3RDb3VudCArIFdiQ291bnQgKyBXcENvdW50ICsNCj4gV2NDb3Vu dDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBHZW5lcmF0ZVJhbmRvbU10cnJQYWlyIChQaHlzaWNh bEFkZHJlc3NCaXRzLA0KPiBDYWNoZVdyaXRlQ29tYmluaW5nLCBOVUxMLCAmUmF3TWVtb3J5UmFu Z2VzW0luZGV4XSk7DQo+IA0KPiArICAgIHdoaWxlIChSYW5nZXNPdmVybGFwICgmUmF3TWVtb3J5 UmFuZ2VzW0luZGV4XSwNCj4gJlJhd01lbW9yeVJhbmdlc1tVY0NvdW50XSwgV3RDb3VudCArIFdi Q291bnQgKw0KPiBXcENvdW50KSkgew0KPiANCj4gKyAgICAgIEdlbmVyYXRlUmFuZG9tTXRyclBh aXIgKFBoeXNpY2FsQWRkcmVzc0JpdHMsDQo+IENhY2hlV3JpdGVDb21iaW5pbmcsIE5VTEwsICZS YXdNZW1vcnlSYW5nZXNbSW5kZXhdKTsNCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4g K30NCj4gDQo+ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIFJldHVybiBhIHJhbmRvbSBtZW1vcnkg Y2FjaGUgdHlwZS4NCj4gDQo+ICsqKi8NCj4gDQo+ICtNVFJSX01FTU9SWV9DQUNIRV9UWVBFDQo+ IA0KPiArR2VuZXJhdGVSYW5kb21DYWNoZVR5cGUgKA0KPiANCj4gKyAgVk9JRA0KPiANCj4gKyAg KQ0KPiANCj4gK3sNCj4gDQo+ICsgICAgcmV0dXJuIG1NZW1vcnlDYWNoZVR5cGVzW1JhbmRvbTMy ICgwLCBBUlJBWV9TSVpFDQo+IChtTWVtb3J5Q2FjaGVUeXBlcykgLSAxKV07DQo+IA0KPiArfQ0K PiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29tcGFyZSBmdW5jdGlvbiB1c2VkIGJ5IHFz b3J0KCkuDQo+IA0KPiArKiovDQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBDb21wYXJl IGZ1bmN0aW9uIHVzZWQgYnkgcXNvcnQoKS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBMZWZ0 ICAgTGVmdCBvcGVyYW5kIHRvIGNvbXBhcmUuDQo+IA0KPiArICBAcGFyYW0gUmlnaHQgIFJpZ2h0 IG9wZXJhbmQgdG8gY29tcGFyZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgMCAgTGVmdCA9 PSBSaWdodA0KPiANCj4gKyAgQHJldHZhbCAtMSBMZWZ0IDwgUmlnaHQNCj4gDQo+ICsgIEByZXR2 YWwgMSAgTGVmdCA+IFJpZ2h0DQo+IA0KPiArKiovDQo+IA0KPiArSU5UMzINCj4gDQo+ICtDb21w YXJlRnVuY1VpbnQ2NCAoDQo+IA0KPiArICBDT05TVCBWT0lEICogTGVmdCwNCj4gDQo+ICsgIENP TlNUIFZPSUQgKiBSaWdodA0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgICAgSU5UNjQg RGVsdGE7DQo+IA0KPiArICAgIERlbHRhID0gKCooVUlOVDY0KilMZWZ0IC0gKihVSU5UNjQqKVJp Z2h0KTsNCj4gDQo+ICsgICAgaWYgKERlbHRhID4gMCkgew0KPiANCj4gKyAgICAgIHJldHVybiAx Ow0KPiANCj4gKyAgICB9IGVsc2UgaWYgKERlbHRhID09IDApIHsNCj4gDQo+ICsgICAgICByZXR1 cm4gMDsNCj4gDQo+ICsgICAgfSBlbHNlIHsNCj4gDQo+ICsgICAgICByZXR1cm4gLTE7DQo+IA0K PiArICAgIH0NCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBEZXRlcm1p biB0aGUgbWVtb3J5IGNhY2hlIHR5cGUgZm9yIHRoZSBSYW5nZS4NCj4gDQo+ICsNCj4gDQo+ICsg IEBwYXJhbSBEZWZhdWx0VHlwZSBEZWZhdWx0IGNhY2hlIHR5cGUuDQo+IA0KPiArICBAcGFyYW0g UmFuZ2UgICAgICAgVGhlIG1lbW9yeSByYW5nZSB0byBkZXRlcm1pbiB0aGUNCj4gY2FjaGUgdHlw ZS4NCj4gDQo+ICsgIEBwYXJhbSBSYW5nZXMgICAgICBUaGUgZW50aXJlIG1lbW9yeSByYW5nZXMu DQo+IA0KPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgQ291bnQgb2YgdGhlIGVudGlyZSBtZW1vcnkN Cj4gcmFuZ2VzLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtEZXRlcm1pbmVNZW1v cnlDYWNoZVR5cGUgKA0KPiANCj4gKyAgSU4gICAgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUgRGVm YXVsdFR5cGUsDQo+IA0KPiArICBJTiBPVVQgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqUmFuZ2Us DQo+IA0KPiArICBJTiAgICAgTVRSUl9NRU1PUllfUkFOR0UgICAgICAqUmFuZ2VzLA0KPiANCj4g KyAgSU4gICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgUmFuZ2VDb3VudA0KPiANCj4gKyAgKQ0K PiANCj4gK3sNCj4gDQo+ICsgIFVJTlQzMiBJbmRleDsNCj4gDQo+ICsgIFJhbmdlLT5UeXBlID0g Q2FjaGVJbnZhbGlkOw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgUmFuZ2VDb3Vu dDsgSW5kZXgrKykgew0KPiANCj4gKyAgICBpZiAoUmFuZ2VzT3ZlcmxhcCAoUmFuZ2UsICZSYW5n ZXNbSW5kZXhdLCAxKSkgew0KPiANCj4gKyAgICAgIGlmIChSYW5nZXNbSW5kZXhdLlR5cGUgPCBS YW5nZS0+VHlwZSkgew0KPiANCj4gKyAgICAgICAgUmFuZ2UtPlR5cGUgPSBSYW5nZXNbSW5kZXhd LlR5cGU7DQo+IA0KPiArICAgICAgfQ0KPiANCj4gKyAgICB9DQo+IA0KPiArICB9DQo+IA0KPiAr DQo+IA0KPiArICBpZiAoUmFuZ2UtPlR5cGUgPT0gQ2FjaGVJbnZhbGlkKSB7DQo+IA0KPiArICAg IFJhbmdlLT5UeXBlID0gRGVmYXVsdFR5cGU7DQo+IA0KPiArICB9DQo+IA0KPiArfQ0KPiANCj4g Kw0KPiANCj4gKy8qKg0KPiANCj4gKyAgR2V0IHRoZSBpbmRleCBvZiB0aGUgZWxlbWVudCB0aGF0 IGRvZXMgTk9UIGVxdWFscyB0bw0KPiBBcnJheVtJbmRleF0uDQo+IA0KPiArDQo+IA0KPiArICBA cGFyYW0gSW5kZXggICBDdXJyZW50IGVsZW1lbnQuDQo+IA0KPiArICBAcGFyYW0gQXJyYXkgICBB cnJheSB0byBzY2FuLg0KPiANCj4gKyAgQHBhcmFtIENvdW50ICAgQ291bnQgb2YgdGhlIGFycmF5 Lg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHVybiBOZXh0IGVsZW1lbnQgdGhhdCBkb2Vzbid0IGVx dWFsIHRvIGN1cnJlbnQNCj4gb25lLg0KPiANCj4gKyoqLw0KPiANCj4gK1VJTlQzMg0KPiANCj4g K0dldE5leHREaWZmZXJlbnRFbGVtZW50SW5Tb3J0ZWRBcnJheSAoDQo+IA0KPiArICBJTiBVSU5U MzIgSW5kZXgsDQo+IA0KPiArICBJTiBVSU5UNjQgKkFycmF5LA0KPiANCj4gKyAgSU4gVUlOVDMy IENvdW50DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAgVUlOVDY0IEN1cnJlbnRFbGVt ZW50Ow0KPiANCj4gKyAgQ3VycmVudEVsZW1lbnQgPSBBcnJheVtJbmRleF07DQo+IA0KPiArICB3 aGlsZSAoQ3VycmVudEVsZW1lbnQgPT0gQXJyYXlbSW5kZXhdICYmIEluZGV4IDwNCj4gQ291bnQp IHsNCj4gDQo+ICsgICAgSW5kZXgrKzsNCj4gDQo+ICsgIH0NCj4gDQo+ICsgIHJldHVybiBJbmRl eDsNCj4gDQo+ICt9DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBSZW1vdmUgdGhlIGR1 cGxpY2F0ZXMgZnJvbSB0aGUgYXJyYXkuDQo+IA0KPiArDQo+IA0KPiArICBAcGFyYW0gQXJyYXkg IFRoZSBhcnJheSB0byBvcGVyYXRlIG9uLg0KPiANCj4gKyAgQHBhcmFtIENvdW50ICBDb3VudCBv ZiB0aGUgYXJyYXkuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK1JlbW92ZUR1cGxp Y2F0ZXNJblNvcnRlZEFycmF5ICgNCj4gDQo+ICsgIElOIE9VVCBVSU5UNjQgKkFycmF5LA0KPiAN Cj4gKyAgSU4gT1VUIFVJTlQzMiAqQ291bnQNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiAr ICBVSU5UMzIgSW5kZXg7DQo+IA0KPiArICBVSU5UMzIgTmV3Q291bnQ7DQo+IA0KPiArDQo+IA0K PiArICBJbmRleCAgICA9IDA7DQo+IA0KPiArICBOZXdDb3VudCA9IDA7DQo+IA0KPiArICB3aGls ZSAoSW5kZXggPCAqQ291bnQpIHsNCj4gDQo+ICsgICAgQXJyYXlbTmV3Q291bnRdID0gQXJyYXlb SW5kZXhdOw0KPiANCj4gKyAgICBOZXdDb3VudCsrOw0KPiANCj4gKyAgICBJbmRleCA9IEdldE5l eHREaWZmZXJlbnRFbGVtZW50SW5Tb3J0ZWRBcnJheQ0KPiAoSW5kZXgsIEFycmF5LCAqQ291bnQp Ow0KPiANCj4gKyAgfQ0KPiANCj4gKyAgKkNvdW50ID0gTmV3Q291bnQ7DQo+IA0KPiArfQ0KPiAN Cj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgUmV0dXJuIFRSVUUgd2hlbiBBZGRyZXNzIGlzIGlu IHRoZSBSYW5nZS4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBBZGRyZXNzIFRoZSBhZGRyZXNz IHRvIGNoZWNrLg0KPiANCj4gKyAgQHBhcmFtIFJhbmdlICAgVGhlIHJhbmdlIHRvIGNoZWNrLg0K PiANCj4gKyAgQHJldHVybiBUUlVFIHdoZW4gQWRkcmVzcyBpcyBpbiB0aGUgUmFuZ2UuDQo+IA0K PiArKiovDQo+IA0KPiArQk9PTEVBTg0KPiANCj4gK0FkZHJlc3NJblJhbmdlICgNCj4gDQo+ICsg IElOIFVJTlQ2NCAgICAgICAgICAgIEFkZHJlc3MsDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9S QU5HRSBSYW5nZQ0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgICAgcmV0dXJuIChBZGRy ZXNzID49IFJhbmdlLkJhc2VBZGRyZXNzKSAmJiAoQWRkcmVzcw0KPiA8PSBSYW5nZS5CYXNlQWRk cmVzcyArIFJhbmdlLkxlbmd0aCAtIDEpOw0KPiANCj4gK30NCj4gDQo+ICsNCj4gDQo+ICsvKioN Cj4gDQo+ICsgIEdldCB0aGUgb3ZlcmxhcCBiaXQgZmxhZy4NCj4gDQo+ICsNCj4gDQo+ICsgIEBw YXJhbSBSYXdNZW1vcnlSYW5nZXMgICAgIFJhdyBtZW1vcnkgcmFuZ2VzLg0KPiANCj4gKyAgQHBh cmFtIFJhd01lbW9yeVJhbmdlQ291bnQgQ291bnQgb2YgcmF3IG1lbW9yeQ0KPiByYW5nZXMuDQo+ IA0KPiArICBAcGFyYW0gQWRkcmVzcyAgICAgICAgICAgICBUaGUgYWRkcmVzcyB0byBjaGVjay4N Cj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UNjQNCj4gDQo+ICtHZXRPdmVybGFwQml0RmxhZyAoDQo+ IA0KPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmF3TWVtb3J5UmFuZ2VzLA0KPiANCj4gKyAg SU4gVUlOVDMyICAgICAgICAgICAgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4gDQo+ICsgIElOIFVJ TlQ2NCAgICAgICAgICAgIEFkZHJlc3MNCj4gDQo+ICsgICkNCj4gDQo+ICt7DQo+IA0KPiArICBV SU5UNjQgT3ZlcmxhcEJpdEZsYWc7DQo+IA0KPiArICBVSU5UMzIgSW5kZXg7DQo+IA0KPiArICBP dmVybGFwQml0RmxhZyA9IDA7DQo+IA0KPiArICBmb3IgKEluZGV4ID0gMDsgSW5kZXggPCBSYXdN ZW1vcnlSYW5nZUNvdW50Ow0KPiBJbmRleCsrKSB7DQo+IA0KPiArICAgIGlmIChBZGRyZXNzSW5S YW5nZSAoQWRkcmVzcywNCj4gUmF3TWVtb3J5UmFuZ2VzW0luZGV4XSkpIHsNCj4gDQo+ICsgICAg ICBPdmVybGFwQml0RmxhZyB8PSAoMXVsbCA8PCBJbmRleCk7DQo+IA0KPiArICAgIH0NCj4gDQo+ ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIHJldHVybiBPdmVybGFwQml0RmxhZzsNCj4gDQo+ICt9 DQo+IA0KPiArDQo+IA0KPiArLyoqDQo+IA0KPiArICBSZXR1cm4gdGhlIHJlbGF0aW9uc2hpcCBi ZXR3ZWVuIGZsYWdzLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIEZsYWcxIEZsYWcgMQ0KPiAN Cj4gKyAgQHBhcmFtIEZsYWcyIEZsYWcgMg0KPiANCj4gKw0KPiANCj4gKyAgQHJldHZhbCAwICAg RmxhZzEgPT0gRmxhZzINCj4gDQo+ICsgIEByZXR2YWwgMSAgIEZsYWcxIGlzIGEgc3Vic2V0IG9m IEZsYWcyDQo+IA0KPiArICBAcmV0dmFsIDIgICBGbGFnMiBpcyBhIHN1YnNldCBvZiBGbGFnMQ0K PiANCj4gKyAgQHJldHZhbCAzICAgTm8gc3Vic2V0IHJlbGF0aW9ucyBiZXR3ZWVuIEZsYWcxIGFu ZA0KPiBGbGFnMi4NCj4gDQo+ICsqKi8NCj4gDQo+ICtVSU5UMzINCj4gDQo+ICtDaGVja092ZXJs YXBCaXRGbGFnc1JlbGF0aW9uICgNCj4gDQo+ICsgIElOIFVJTlQ2NCBGbGFnMSwNCj4gDQo+ICsg IElOIFVJTlQ2NCBGbGFnMg0KPiANCj4gKyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgICAgaWYgKEZs YWcxID09IEZsYWcyKSByZXR1cm4gMDsNCj4gDQo+ICsgICAgaWYgKChGbGFnMSB8IEZsYWcyKSA9 PSBGbGFnMikgcmV0dXJuIDE7DQo+IA0KPiArICAgIGlmICgoRmxhZzEgfCBGbGFnMikgPT0gRmxh ZzEpIHJldHVybiAyOw0KPiANCj4gKyAgICByZXR1cm4gMzsNCj4gDQo+ICt9DQo+IA0KPiArDQo+ IA0KPiArLyoqDQo+IA0KPiArICBSZXR1cm4gVFJVRSB3aGVuIHRoZSBFbmRwb2ludCBpcyBpbiBh bnkgb2YgdGhlDQo+IFJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBFbmRwb2ludCAg ICBUaGUgZW5kcG9pbnQgdG8gY2hlY2suDQo+IA0KPiArICBAcGFyYW0gUmFuZ2VzICAgICAgVGhl IG1lbW9yeSByYW5nZXMuDQo+IA0KPiArICBAcGFyYW0gUmFuZ2VDb3VudCAgQ291bnQgb2YgbWVt b3J5IHJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsgIEByZXR2YWwgVFJVRSAgRW5kcG9pbnQgaXMg aW4gb25lIG9mIHRoZSByYW5nZS4NCj4gDQo+ICsgIEByZXR2YWwgRkFMU0UgRW5kcG9pbnQgaXMg bm90IGluIGFueSBvZiB0aGUgcmFuZ2VzLg0KPiANCj4gKyoqLw0KPiANCj4gK0JPT0xFQU4NCj4g DQo+ICtJc0VuZHBvaW50SW5SYW5nZXMgKA0KPiANCj4gKyAgSU4gVUlOVDY0ICAgICAgICAgICAg RW5kcG9pbnQsDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9SQU5HRSAqUmFuZ2VzLA0KPiANCj4g KyAgSU4gVUlOVE4gICAgICAgICAgICAgUmFuZ2VDb3VudA0KPiANCj4gKyAgKQ0KPiANCj4gK3sN Cj4gDQo+ICsgICAgVUlOVDMyIEluZGV4Ow0KPiANCj4gKyAgICBmb3IgKEluZGV4ID0gMDsgSW5k ZXggPCBSYW5nZUNvdW50OyBJbmRleCsrKSB7DQo+IA0KPiArICAgICAgaWYgKEFkZHJlc3NJblJh bmdlIChFbmRwb2ludCwgUmFuZ2VzW0luZGV4XSkpIHsNCj4gDQo+ICsgICAgICAgIHJldHVybiBU UlVFOw0KPiANCj4gKyAgICAgIH0NCj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgICByZXR1cm4gRkFM U0U7DQo+IA0KPiArfQ0KPiANCj4gKw0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29t cGFjdCBhZGphY2VudCByYW5nZXMgb2YgdGhlIHNhbWUgdHlwZS4NCj4gDQo+ICsNCj4gDQo+ICsg IEBwYXJhbSBEZWZhdWx0VHlwZSAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBtZW1vcnkNCj4g dHlwZS4NCj4gDQo+ICsgIEBwYXJhbSBQaHlzaWNhbEFkZHJlc3NCaXRzICAgICAgICAgICAgUGh5 c2ljYWwNCj4gYWRkcmVzcyBiaXRzLg0KPiANCj4gKyAgQHBhcmFtIEVmZmVjdGl2ZU10cnJNZW1v cnlSYW5nZXMgICAgICBNZW1vcnkgcmFuZ2VzDQo+IHRvIGNvbXBhY3QuDQo+IA0KPiArICBAcGFy YW0gRWZmZWN0aXZlTXRyck1lbW9yeVJhbmdlc0NvdW50IFJldHVybiB0aGUgbmV3DQo+IGNvdW50 IG9mIG1lbW9yeSByYW5nZXMuDQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0NvbXBh Y3RBbmRFeHRlbmRFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzICgNCj4gDQo+ICsgIElOICAgICBN VFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0KPiANCj4gKyAgSU4gICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgUGh5c2ljYWxBZGRyZXNzQml0cywNCj4gDQo+ICsgIElOIE9VVCBN VFJSX01FTU9SWV9SQU5HRQ0KPiAqKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXMsDQo+IA0KPiAr ICBJTiBPVVQgVUlOVE4NCj4gKkVmZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXNDb3VudA0KPiANCj4g KyAgKQ0KPiANCj4gK3sNCj4gDQo+ICsgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAgIE1h eEFkZHJlc3M7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOZXdSYW5n ZXNDb3VudEF0TW9zdDsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAgICAgICAgICAgICpO ZXdSYW5nZXM7DQo+IA0KPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgICBOZXdSYW5n ZXNDb3VudEFjdHVhbDsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JBTkdFDQo+ICpDdXJyZW50UmFu Z2VJbk5ld1JhbmdlczsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX0NBQ0hFX1RZUEUNCj4gQ3VycmVu dFJhbmdlVHlwZUluT2xkUmFuZ2VzOw0KPiANCj4gKw0KPiANCj4gKyAgTVRSUl9NRU1PUllfUkFO R0UgICAgICAgICAgICAgKk9sZFJhbmdlczsNCj4gDQo+ICsgIE1UUlJfTUVNT1JZX1JBTkdFICAg ICAgICAgICAgIE9sZExhc3RSYW5nZTsNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgICAgIE9sZFJhbmdlc0luZGV4Ow0KPiANCj4gKw0KPiANCj4gKyAgTmV3UmFuZ2VzQ291bnRB Y3R1YWwgPSAwOw0KPiANCj4gKyAgTmV3UmFuZ2VzQ291bnRBdE1vc3QgPQ0KPiAqRWZmZWN0aXZl TXRyck1lbW9yeVJhbmdlc0NvdW50ICsgMjsgICAvLyBBdCBtb3N0IHdpdGgNCj4gMiBtb3JlIHJh bmdlIGVudHJpZXMuDQo+IA0KPiArICBOZXdSYW5nZXMgICAgICAgICAgICA9IChNVFJSX01FTU9S WV9SQU5HRSAqKSBjYWxsb2MNCj4gKE5ld1Jhbmdlc0NvdW50QXRNb3N0LCBzaXplb2YgKE1UUlJf TUVNT1JZX1JBTkdFKSk7DQo+IA0KPiArICBPbGRSYW5nZXMgICAgICAgICAgICA9ICpFZmZlY3Rp dmVNdHJyTWVtb3J5UmFuZ2VzOw0KPiANCj4gKyAgaWYgKE9sZFJhbmdlc1swXS5CYXNlQWRkcmVz cyA+IDApIHsNCj4gDQo+ICsgICAgTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5CYXNl QWRkcmVzcyA9IDA7DQo+IA0KPiArICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0u TGVuZ3RoICAgICAgPQ0KPiBPbGRSYW5nZXNbMF0uQmFzZUFkZHJlc3M7DQo+IA0KPiArICAgIE5l d1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0uVHlwZSAgICAgICAgPQ0KPiBEZWZhdWx0VHlw ZTsNCj4gDQo+ICsgICAgTmV3UmFuZ2VzQ291bnRBY3R1YWwrKzsNCj4gDQo+ICsgIH0NCj4gDQo+ ICsNCj4gDQo+ICsgIE9sZFJhbmdlc0luZGV4ID0gMDsNCj4gDQo+ICsgIHdoaWxlIChPbGRSYW5n ZXNJbmRleCA8DQo+ICpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQpIHsNCj4gDQo+ICsg ICAgQ3VycmVudFJhbmdlVHlwZUluT2xkUmFuZ2VzID0NCj4gT2xkUmFuZ2VzW09sZFJhbmdlc0lu ZGV4XS5UeXBlOw0KPiANCj4gKyAgICBDdXJyZW50UmFuZ2VJbk5ld1JhbmdlcyA9IE5VTEw7DQo+ IA0KPiArICAgIGlmIChOZXdSYW5nZXNDb3VudEFjdHVhbCA+IDApICAgLy8gV2UgbmVlZCB0bw0K PiBjaGVjayBDdXJyZW50TmV3UmFuZ2UgZmlyc3QgYmVmb3JlIGdlbmVyYXRlIGEgbmV3DQo+IE5l d1JhbmdlLg0KPiANCj4gKyAgICB7DQo+IA0KPiArICAgICAgQ3VycmVudFJhbmdlSW5OZXdSYW5n ZXMgPQ0KPiAmTmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsIC0gMV07DQo+IA0KPiArICAg IH0NCj4gDQo+ICsgICAgaWYgKEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzICE9IE5VTEwgJiYNCj4g Q3VycmVudFJhbmdlSW5OZXdSYW5nZXMtPlR5cGUgPT0NCj4gQ3VycmVudFJhbmdlVHlwZUluT2xk UmFuZ2VzKSB7DQo+IA0KPiArICAgICAgQ3VycmVudFJhbmdlSW5OZXdSYW5nZXMtPkxlbmd0aCAr PQ0KPiBPbGRSYW5nZXNbT2xkUmFuZ2VzSW5kZXhdLkxlbmd0aDsNCj4gDQo+ICsgICAgfSBlbHNl IHsNCj4gDQo+ICsgICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkJhc2VBZGRy ZXNzID0NCj4gT2xkUmFuZ2VzW09sZFJhbmdlc0luZGV4XS5CYXNlQWRkcmVzczsNCj4gDQo+ICsg ICAgICBOZXdSYW5nZXNbTmV3UmFuZ2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgKz0NCj4gT2xk UmFuZ2VzW09sZFJhbmdlc0luZGV4XS5MZW5ndGg7DQo+IA0KPiArICAgICAgTmV3UmFuZ2VzW05l d1Jhbmdlc0NvdW50QWN0dWFsXS5UeXBlICAgICAgICA9DQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9s ZFJhbmdlczsNCj4gDQo+ICsgICAgICB3aGlsZSAoT2xkUmFuZ2VzSW5kZXggKyAxIDwNCj4gKkVm ZmVjdGl2ZU10cnJNZW1vcnlSYW5nZXNDb3VudCAmJg0KPiBPbGRSYW5nZXNbT2xkUmFuZ2VzSW5k ZXggKyAxXS5UeXBlID09DQo+IEN1cnJlbnRSYW5nZVR5cGVJbk9sZFJhbmdlcykNCj4gDQo+ICsg ICAgICB7DQo+IA0KPiArICAgICAgICBPbGRSYW5nZXNJbmRleCsrOw0KPiANCj4gKyAgICAgICAg TmV3UmFuZ2VzW05ld1Jhbmdlc0NvdW50QWN0dWFsXS5MZW5ndGggKz0NCj4gT2xkUmFuZ2VzW09s ZFJhbmdlc0luZGV4XS5MZW5ndGg7DQo+IA0KPiArICAgICAgfQ0KPiANCj4gKyAgICAgIE5ld1Jh bmdlc0NvdW50QWN0dWFsKys7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsNCj4gDQo+ICsgICAgT2xk UmFuZ2VzSW5kZXgrKzsNCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsgIE1heEFkZHJlc3Mg PSAoMXVsbCA8PCBQaHlzaWNhbEFkZHJlc3NCaXRzKSAtIDE7DQo+IA0KPiArICBPbGRMYXN0UmFu Z2UgPQ0KPiBPbGRSYW5nZXNbKCpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzQ291bnQpIC0gMV07 DQo+IA0KPiArICBDdXJyZW50UmFuZ2VJbk5ld1JhbmdlcyA9DQo+ICZOZXdSYW5nZXNbTmV3UmFu Z2VzQ291bnRBY3R1YWwgLSAxXTsNCj4gDQo+ICsgIGlmIChPbGRMYXN0UmFuZ2UuQmFzZUFkZHJl c3MgKyBPbGRMYXN0UmFuZ2UuTGVuZ3RoIC0NCj4gMSA8IE1heEFkZHJlc3MpIHsNCj4gDQo+ICsg ICAgaWYgKEN1cnJlbnRSYW5nZUluTmV3UmFuZ2VzLT5UeXBlID09IERlZmF1bHRUeXBlKQ0KPiB7 DQo+IA0KPiArICAgICAgQ3VycmVudFJhbmdlSW5OZXdSYW5nZXMtPkxlbmd0aCA9IE1heEFkZHJl c3MgLQ0KPiBDdXJyZW50UmFuZ2VJbk5ld1Jhbmdlcy0+QmFzZUFkZHJlc3MgKyAxOw0KPiANCj4g KyAgICB9IGVsc2Ugew0KPiANCj4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVh bF0uQmFzZUFkZHJlc3MgPQ0KPiBPbGRMYXN0UmFuZ2UuQmFzZUFkZHJlc3MgKyBPbGRMYXN0UmFu Z2UuTGVuZ3RoOw0KPiANCj4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVhbF0u TGVuZ3RoID0NCj4gTWF4QWRkcmVzcyAtDQo+IE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3VudEFjdHVh bF0uQmFzZUFkZHJlc3MgKyAxOw0KPiANCj4gKyAgICAgIE5ld1Jhbmdlc1tOZXdSYW5nZXNDb3Vu dEFjdHVhbF0uVHlwZSA9DQo+IERlZmF1bHRUeXBlOw0KPiANCj4gKyAgICAgIE5ld1Jhbmdlc0Nv dW50QWN0dWFsKys7DQo+IA0KPiArICAgIH0NCj4gDQo+ICsgIH0NCj4gDQo+ICsNCj4gDQo+ICsg IGZyZWUgKCpFZmZlY3RpdmVNdHJyTWVtb3J5UmFuZ2VzKTsNCj4gDQo+ICsgICpFZmZlY3RpdmVN dHJyTWVtb3J5UmFuZ2VzID0gTmV3UmFuZ2VzOw0KPiANCj4gKyAgKkVmZmVjdGl2ZU10cnJNZW1v cnlSYW5nZXNDb3VudCA9DQo+IE5ld1Jhbmdlc0NvdW50QWN0dWFsOw0KPiANCj4gK30NCj4gDQo+ ICsNCj4gDQo+ICsvKioNCj4gDQo+ICsgIENvbGxlY3QgYWxsIHRoZSBlbmRwb2ludHMgaW4gdGhl IHJhdyBtZW1vcnkgcmFuZ2VzLg0KPiANCj4gKw0KPiANCj4gKyAgQHBhcmFtIEVuZHBvaW50cyAg ICAgICAgICAgUmV0dXJuIHRoZSBjb2xsZWN0ZWQNCj4gZW5kcG9pbnRzLg0KPiANCj4gKyAgQHBh cmFtIEVuZFBvaW50Q291bnQgICAgICAgUmV0dXJuIHRoZSBjb3VudCBvZg0KPiBlbmRwb2ludHMu DQo+IA0KPiArICBAcGFyYW0gUmF3TWVtb3J5UmFuZ2VzICAgICBSYXcgbWVtb3J5IHJhbmdlcy4N Cj4gDQo+ICsgIEBwYXJhbSBSYXdNZW1vcnlSYW5nZUNvdW50IENvdW50IG9mIHJhdyBtZW1vcnkN Cj4gcmFuZ2VzLg0KPiANCj4gKyoqLw0KPiANCj4gK1ZPSUQNCj4gDQo+ICtDb2xsZWN0RW5kcG9p bnRzICgNCj4gDQo+ICsgIElOIE9VVCBVSU5UNjQgICAgICAgICpFbmRwb2ludHMsDQo+IA0KPiAr ICBJTiBPVVQgVUlOVDMyICAgICAgICAqRW5kUG9pbnRDb3VudCwNCj4gDQo+ICsgIElOIE1UUlJf TUVNT1JZX1JBTkdFICpSYXdNZW1vcnlSYW5nZXMsDQo+IA0KPiArICBJTiBVSU5UMzIgICAgICAg ICAgICBSYXdNZW1vcnlSYW5nZUNvdW50DQo+IA0KPiArICApDQo+IA0KPiArew0KPiANCj4gKyAg VUlOVDMyIEluZGV4Ow0KPiANCj4gKyAgVUlOVDMyIFJhd1JhbmdlSW5kZXg7DQo+IA0KPiArDQo+ IA0KPiArICBBU1NFUlQgKChSYXdNZW1vcnlSYW5nZUNvdW50IDw8IDEpID09DQo+ICpFbmRQb2lu dENvdW50KTsNCj4gDQo+ICsNCj4gDQo+ICsgIGZvciAoSW5kZXggPSAwOyBJbmRleCA8ICpFbmRQ b2ludENvdW50OyBJbmRleCArPSAyKQ0KPiB7DQo+IA0KPiArICAgIFJhd1JhbmdlSW5kZXggPSBJ bmRleCA+PiAxOw0KPiANCj4gKyAgICBFbmRwb2ludHNbSW5kZXhdID0NCj4gUmF3TWVtb3J5UmFu Z2VzW1Jhd1JhbmdlSW5kZXhdLkJhc2VBZGRyZXNzOw0KPiANCj4gKyAgICBFbmRwb2ludHNbSW5k ZXggKyAxXSA9DQo+IFJhd01lbW9yeVJhbmdlc1tSYXdSYW5nZUluZGV4XS5CYXNlQWRkcmVzcyAr DQo+IFJhd01lbW9yeVJhbmdlc1tSYXdSYW5nZUluZGV4XS5MZW5ndGggLSAxOw0KPiANCj4gKyAg fQ0KPiANCj4gKw0KPiANCj4gKyAgcXNvcnQgKEVuZHBvaW50cywgKkVuZFBvaW50Q291bnQsIHNp emVvZiAoVUlOVDY0KSwNCj4gQ29tcGFyZUZ1bmNVaW50NjQpOw0KPiANCj4gKyAgUmVtb3ZlRHVw bGljYXRlc0luU29ydGVkQXJyYXkgKEVuZHBvaW50cywNCj4gRW5kUG9pbnRDb3VudCk7DQo+IA0K PiArfQ0KPiANCj4gKw0KPiANCj4gKy8qKg0KPiANCj4gKyAgQ29udmVydCB0aGUgTVRSUiBCQVNF L01BU0sgYXJyYXkgdG8gbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsNCj4gDQo+ICsgIEBwYXJhbSBE ZWZhdWx0VHlwZSAgICAgICAgICBEZWZhdWx0IG1lbW9yeSB0eXBlLg0KPiANCj4gKyAgQHBhcmFt IFBoeXNpY2FsQWRkcmVzc0JpdHMgIFBoeXNpY2FsIGFkZHJlc3MgYml0cy4NCj4gDQo+ICsgIEBw YXJhbSBSYXdNZW1vcnlSYW5nZXMgICAgICBSYXcgbWVtb3J5IHJhbmdlcy4NCj4gDQo+ICsgIEBw YXJhbSBSYXdNZW1vcnlSYW5nZUNvdW50ICBDb3VudCBvZiByYXcgbWVtb3J5DQo+IHJhbmdlcy4N Cj4gDQo+ICsgIEBwYXJhbSBNZW1vcnlSYW5nZXMgICAgICAgICBNZW1vcnkgcmFuZ2VzLg0KPiAN Cj4gKyAgQHBhcmFtIE1lbW9yeVJhbmdlQ291bnQgICAgIENvdW50IG9mIG1lbW9yeSByYW5nZXMu DQo+IA0KPiArKiovDQo+IA0KPiArVk9JRA0KPiANCj4gK0dldEVmZmVjdGl2ZU1lbW9yeVJhbmdl cyAoDQo+IA0KPiArICBJTiBNVFJSX01FTU9SWV9DQUNIRV9UWVBFIERlZmF1bHRUeXBlLA0KPiAN Cj4gKyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICBQaHlzaWNhbEFkZHJlc3NCaXRzLA0KPiAN Cj4gKyAgSU4gTVRSUl9NRU1PUllfUkFOR0UgICAgICAqUmF3TWVtb3J5UmFuZ2VzLA0KPiANCj4g KyAgSU4gVUlOVDMyICAgICAgICAgICAgICAgICBSYXdNZW1vcnlSYW5nZUNvdW50LA0KPiANCj4g KyAgT1VUIE1UUlJfTUVNT1JZX1JBTkdFICAgICAqTWVtb3J5UmFuZ2VzLA0KPiANCj4gKyAgT1VU IFVJTlROICAgICAgICAgICAgICAgICAqTWVtb3J5UmFuZ2VDb3VudA0KPiANCj4gKyAgKQ0KPiAN Cj4gK3sNCj4gDQo+ICsgIFVJTlROICAgICAgICAgICAgICAgICBJbmRleDsNCj4gDQo+ICsgIFVJ TlQzMiAgICAgICAgICAgICAgICBBbGxFbmRQb2ludHNDb3VudDsNCj4gDQo+ICsgIFVJTlQ2NCAg ICAgICAgICAgICAgICAqQWxsRW5kUG9pbnRzSW5jbHVzaXZlOw0KPiANCj4gKyAgVUlOVDMyICAg ICAgICAgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRNYXg7DQo+IA0KPiArICBNVFJSX01FTU9S WV9SQU5HRSAgICAgKkFsbFJhbmdlUGllY2VzOw0KPiANCj4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWw7DQo+IA0KPiArICBVSU5UNjQgICAgICAgICAg ICAgICAgT3ZlcmxhcEJpdEZsYWcxOw0KPiANCj4gKyAgVUlOVDY0ICAgICAgICAgICAgICAgIE92 ZXJsYXBCaXRGbGFnMjsNCj4gDQo+ICsgIElOVDMyICAgICAgICAgICAgICAgICBPdmVybGFwRmxh Z1JlbGF0aW9uOw0KPiANCj4gKw0KPiANCj4gKyAgaWYgKFJhd01lbW9yeVJhbmdlQ291bnQgPT0g MCkgew0KPiANCj4gKyAgICBNZW1vcnlSYW5nZXNbMF0uQmFzZUFkZHJlc3MgPSAwOw0KPiANCj4g KyAgICBNZW1vcnlSYW5nZXNbMF0uTGVuZ3RoICAgICAgPSAoMXVsbCA8PA0KPiBQaHlzaWNhbEFk ZHJlc3NCaXRzKTsNCj4gDQo+ICsgICAgTWVtb3J5UmFuZ2VzWzBdLlR5cGUgICAgICAgID0gRGVm YXVsdFR5cGU7DQo+IA0KPiArICAgICpNZW1vcnlSYW5nZUNvdW50ID0gMTsNCj4gDQo+ICsgICAg cmV0dXJuOw0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgQWxsRW5kUG9pbnRzQ291bnQg ICAgICAgICA9IFJhd01lbW9yeVJhbmdlQ291bnQgPDwNCj4gMTsNCj4gDQo+ICsgIEFsbEVuZFBv aW50c0luY2x1c2l2ZSAgICAgPSBjYWxsb2MNCj4gKEFsbEVuZFBvaW50c0NvdW50LCBzaXplb2Yg KFVJTlQ2NCkpOw0KPiANCj4gKyAgQWxsUmFuZ2VQaWVjZXNDb3VudE1heCAgICA9IFJhd01lbW9y eVJhbmdlQ291bnQgKiAzDQo+ICsgMTsNCj4gDQo+ICsgIEFsbFJhbmdlUGllY2VzICAgICAgICAg ICAgPSBjYWxsb2MNCj4gKEFsbFJhbmdlUGllY2VzQ291bnRNYXgsIHNpemVvZiAoTVRSUl9NRU1P UllfUkFOR0UpKTsNCj4gDQo+ICsgIENvbGxlY3RFbmRwb2ludHMgKEFsbEVuZFBvaW50c0luY2x1 c2l2ZSwNCj4gJkFsbEVuZFBvaW50c0NvdW50LCBSYXdNZW1vcnlSYW5nZXMsDQo+IFJhd01lbW9y eVJhbmdlQ291bnQpOw0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChJbmRleCA9IDAsIEFsbFJhbmdl UGllY2VzQ291bnRBY3R1YWwgPSAwOyBJbmRleA0KPiA8IEFsbEVuZFBvaW50c0NvdW50IC0gMTsg SW5kZXgrKykgew0KPiANCj4gKyAgICBPdmVybGFwQml0RmxhZzEgPSBHZXRPdmVybGFwQml0Rmxh Zw0KPiAoUmF3TWVtb3J5UmFuZ2VzLCBSYXdNZW1vcnlSYW5nZUNvdW50LA0KPiBBbGxFbmRQb2lu dHNJbmNsdXNpdmVbSW5kZXhdKTsNCj4gDQo+ICsgICAgT3ZlcmxhcEJpdEZsYWcyID0gR2V0T3Zl cmxhcEJpdEZsYWcNCj4gKFJhd01lbW9yeVJhbmdlcywgUmF3TWVtb3J5UmFuZ2VDb3VudCwNCj4g QWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4ICsgMV0pOw0KPiANCj4gKyAgICBPdmVybGFwRmxh Z1JlbGF0aW9uID0gQ2hlY2tPdmVybGFwQml0RmxhZ3NSZWxhdGlvbg0KPiAoT3ZlcmxhcEJpdEZs YWcxLCBPdmVybGFwQml0RmxhZzIpOw0KPiANCj4gKyAgICBzd2l0Y2ggKE92ZXJsYXBGbGFnUmVs YXRpb24pIHsNCj4gDQo+ICsgICAgICBjYXNlIDA6ICAgLy8gWzEsIDJdDQo+IA0KPiArDQo+IEFs bFJhbmdlUGllY2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkJhc2VBZGRyZXNzID0NCj4g QWxsRW5kUG9pbnRzSW5jbHVzaXZlW0luZGV4XTsNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNb QWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAgPQ0KPiBBbGxFbmRQb2ludHNJ bmNsdXNpdmVbSW5kZXggKyAxXSAtDQo+IEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF0gKyAx Ow0KPiANCj4gKyAgICAgICAgQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbCsrOw0KPiANCj4gKyAg ICAgICAgYnJlYWs7DQo+IA0KPiArICAgICAgY2FzZSAxOiAgIC8vIFsxLCAyKQ0KPiANCj4gKw0K PiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9 DQo+IEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF07DQo+IA0KPiArDQo+IEFsbFJhbmdlUGll Y2VzW0FsbFJhbmdlUGllY2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gKEFsbEVuZFBv aW50c0luY2x1c2l2ZVtJbmRleCArIDFdIC0gMSkgLQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVb SW5kZXhdICsgMTsNCj4gDQo+ICsgICAgICAgIEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWwrKzsN Cj4gDQo+ICsgICAgICAgIGJyZWFrOw0KPiANCj4gKyAgICAgIGNhc2UgMjogICAvLyAoMSwgMl0N Cj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uQmFz ZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdICsgMTsNCj4gDQo+ICsN Cj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoICAgICAg PQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXggKyAxXSAtDQo+IChBbGxFbmRQb2ludHNJ bmNsdXNpdmVbSW5kZXhdICsgMSkgKyAxOw0KPiANCj4gKyAgICAgICAgQWxsUmFuZ2VQaWVjZXND b3VudEFjdHVhbCsrOw0KPiANCj4gKw0KPiANCj4gKyAgICAgICAgaWYgKCFJc0VuZHBvaW50SW5S YW5nZXMNCj4gKEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF0sIEFsbFJhbmdlUGllY2VzLA0K PiBBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKSkgew0KPiANCj4gKw0KPiBBbGxSYW5nZVBpZWNl c1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+IEFsbEVuZFBvaW50 c0luY2x1c2l2ZVtJbmRleF07DQo+IA0KPiArDQo+IEFsbFJhbmdlUGllY2VzW0FsbFJhbmdlUGll Y2VzQ291bnRBY3R1YWxdLkxlbmd0aCAgICAgID0NCj4gMTsNCj4gDQo+ICsgICAgICAgICAgQWxs UmFuZ2VQaWVjZXNDb3VudEFjdHVhbCsrOw0KPiANCj4gKyAgICAgICAgfQ0KPiANCj4gKyAgICAg ICAgYnJlYWs7DQo+IA0KPiArICAgICAgY2FzZSAzOiAgIC8vICgxLCAyKQ0KPiANCj4gKw0KPiBB bGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5CYXNlQWRkcmVzcyA9DQo+ IEFsbEVuZFBvaW50c0luY2x1c2l2ZVtJbmRleF0gKyAxOw0KPiANCj4gKw0KPiBBbGxSYW5nZVBp ZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsXS5MZW5ndGggICAgICA9DQo+IChBbGxFbmRQ b2ludHNJbmNsdXNpdmVbSW5kZXggKyAxXSAtIDEpIC0NCj4gKEFsbEVuZFBvaW50c0luY2x1c2l2 ZVtJbmRleF0gKyAxKSArIDE7DQo+IA0KPiArICAgICAgICBpZg0KPiAoQWxsUmFuZ2VQaWVjZXNb QWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbF0uTGVuZ3RoID09IDApDQo+IC8vIE9ubHkgaW4gY2Fz ZSAzIGNhbiBleGlzdHMgTGVuZ3RoPTAsIHdlIHNob3VsZCBza2lwDQo+IHN1Y2ggInNlZ21lbnQi Lg0KPiANCj4gKyAgICAgICAgICBicmVhazsNCj4gDQo+ICsgICAgICAgIEFsbFJhbmdlUGllY2Vz Q291bnRBY3R1YWwrKzsNCj4gDQo+ICsgICAgICAgIGlmICghSXNFbmRwb2ludEluUmFuZ2VzDQo+ IChBbGxFbmRQb2ludHNJbmNsdXNpdmVbSW5kZXhdLCBBbGxSYW5nZVBpZWNlcywNCj4gQWxsUmFu Z2VQaWVjZXNDb3VudEFjdHVhbCkpIHsNCj4gDQo+ICsNCj4gQWxsUmFuZ2VQaWVjZXNbQWxsUmFu Z2VQaWVjZXNDb3VudEFjdHVhbF0uQmFzZUFkZHJlc3MgPQ0KPiBBbGxFbmRQb2ludHNJbmNsdXNp dmVbSW5kZXhdOw0KPiANCj4gKw0KPiBBbGxSYW5nZVBpZWNlc1tBbGxSYW5nZVBpZWNlc0NvdW50 QWN0dWFsXS5MZW5ndGggICAgICA9DQo+IDE7DQo+IA0KPiArICAgICAgICAgIEFsbFJhbmdlUGll Y2VzQ291bnRBY3R1YWwrKzsNCj4gDQo+ICsgICAgICAgIH0NCj4gDQo+ICsgICAgICAgIGJyZWFr Ow0KPiANCj4gKyAgICAgIGRlZmF1bHQ6DQo+IA0KPiArICAgICAgICBBU1NFUlQgKEZBTFNFKTsN Cj4gDQo+ICsgICAgfQ0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgZm9yIChJbmRleCA9 IDA7IEluZGV4IDwgQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVhbDsNCj4gSW5kZXgrKykgew0KPiAN Cj4gKyAgICBEZXRlcm1pbmVNZW1vcnlDYWNoZVR5cGUgKERlZmF1bHRUeXBlLA0KPiAmQWxsUmFu Z2VQaWVjZXNbSW5kZXhdLCBSYXdNZW1vcnlSYW5nZXMsDQo+IFJhd01lbW9yeVJhbmdlQ291bnQp Ow0KPiANCj4gKyAgfQ0KPiANCj4gKw0KPiANCj4gKyAgQ29tcGFjdEFuZEV4dGVuZEVmZmVjdGl2 ZU10cnJNZW1vcnlSYW5nZXMNCj4gKERlZmF1bHRUeXBlLCBQaHlzaWNhbEFkZHJlc3NCaXRzLCAm QWxsUmFuZ2VQaWVjZXMsDQo+ICZBbGxSYW5nZVBpZWNlc0NvdW50QWN0dWFsKTsNCj4gDQo+ICsg IEFTU0VSVCAoKk1lbW9yeVJhbmdlQ291bnQgPj0NCj4gQWxsUmFuZ2VQaWVjZXNDb3VudEFjdHVh bCk7DQo+IA0KPiArICBtZW1jcHkgKE1lbW9yeVJhbmdlcywgQWxsUmFuZ2VQaWVjZXMsDQo+IEFs bFJhbmdlUGllY2VzQ291bnRBY3R1YWwgKiBzaXplb2YNCj4gKE1UUlJfTUVNT1JZX1JBTkdFKSk7 DQo+IA0KPiArICAqTWVtb3J5UmFuZ2VDb3VudCA9IEFsbFJhbmdlUGllY2VzQ291bnRBY3R1YWw7 DQo+IA0KPiArDQo+IA0KPiArICBmcmVlIChBbGxFbmRQb2ludHNJbmNsdXNpdmUpOw0KPiANCj4g KyAgZnJlZSAoQWxsUmFuZ2VQaWVjZXMpOw0KPiANCj4gK30NCj4gDQo+IGRpZmYgLS1naXQgYS9V ZWZpQ3B1UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0LmRzYw0KPiBiL1VlZmlDcHVQa2cvVGVz dC9VZWZpQ3B1UGtnSG9zdFRlc3QuZHNjDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IDAwMDAwMDAwMDAuLjhhNWM0NTY4MzANCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9VZWZpQ3B1 UGtnL1Rlc3QvVWVmaUNwdVBrZ0hvc3RUZXN0LmRzYw0KPiBAQCAtMCwwICsxLDMxIEBADQo+ICsj IyBAZmlsZQ0KPiANCj4gKyMgVWVmaUNwdVBrZyBEU0MgZmlsZSB1c2VkIHRvIGJ1aWxkIGhvc3Qt YmFzZWQgdW5pdA0KPiB0ZXN0cy4NCj4gDQo+ICsjDQo+IA0KPiArIyBDb3B5cmlnaHQgKGMpIDIw MjAsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+IHJlc2VydmVkLjxCUj4NCj4gDQo+ ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+IA0KPiAr Iw0KPiANCj4gKyMjDQo+IA0KPiArDQo+IA0KPiArW0RlZmluZXNdDQo+IA0KPiArICBQTEFURk9S TV9OQU1FICAgICAgICAgICA9IFVlZmlDcHVQa2dIb3N0VGVzdA0KPiANCj4gKyAgUExBVEZPUk1f R1VJRCAgICAgICAgICAgPSBFMDBCOTU5OS01Qjc0LTRGRjctQUI5Ri0NCj4gODE4M0ZCMTNCMkY5 DQo+IA0KPiArICBQTEFURk9STV9WRVJTSU9OICAgICAgICA9IDAuMQ0KPiANCj4gKyAgRFNDX1NQ RUNJRklDQVRJT04gICAgICAgPSAweDAwMDEwMDA1DQo+IA0KPiArICBPVVRQVVRfRElSRUNUT1JZ ICAgICAgICA9IEJ1aWxkL1VlZmlDcHVQa2cvSG9zdFRlc3QNCj4gDQo+ICsgIFNVUFBPUlRFRF9B UkNISVRFQ1RVUkVTID0gSUEzMnxYNjQNCj4gDQo+ICsgIEJVSUxEX1RBUkdFVFMgICAgICAgICAg ID0gTk9PUFQNCj4gDQo+ICsgIFNLVUlEX0lERU5USUZJRVIgICAgICAgID0gREVGQVVMVA0KPiAN Cj4gKw0KPiANCj4gKyFpbmNsdWRlDQo+IFVuaXRUZXN0RnJhbWV3b3JrUGtnL1VuaXRUZXN0RnJh bWV3b3JrUGtnSG9zdC5kc2MuaW5jDQo+IA0KPiArDQo+IA0KPiArW0xpYnJhcnlDbGFzc2VzXQ0K PiANCj4gKyAgTXRyckxpYnxVZWZpQ3B1UGtnL0xpYnJhcnkvTXRyckxpYi9NdHJyTGliLmluZg0K PiANCj4gKw0KPiANCj4gK1tQY2RzUGF0Y2hhYmxlSW5Nb2R1bGVdDQo+IA0KPiArDQo+IGdVZWZp Q3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TnVtYmVyT2ZSZXNlcnZlZFZhcmlhYmwNCj4gZU10 cnJzfDANCj4gDQo+ICsNCj4gDQo+ICtbQ29tcG9uZW50c10NCj4gDQo+ICsgICMNCj4gDQo+ICsg ICMgQnVpbGQgSE9TVF9BUFBMSUNBVElPTiB0aGF0IHRlc3RzIHRoZSBNdHJyTGliDQo+IA0KPiAr ICAjDQo+IA0KPiArDQo+IFVlZmlDcHVQa2cvTGlicmFyeS9NdHJyTGliL1VuaXRUZXN0L010cnJM aWJVbml0VGVzdEhvc3QNCj4gLmluZg0KPiANCj4gLS0NCj4gMi4yNy4wLndpbmRvd3MuMQ0KDQo=