From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.1.89; helo=eur02-he1-obe.outbound.protection.outlook.com; envelope-from=udit.kumar@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR02-HE1-obe.outbound.protection.outlook.com (mail-eopbgr10089.outbound.protection.outlook.com [40.107.1.89]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id A1F6A2034D8CC for ; Wed, 21 Feb 2018 20:45:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=i3hNRnDjkn3NsEjh7JxqPZ8f5xCKU31WfG+zxmuEB98=; b=dwD+ZBXraNKr8KMD7Q4/zr51pdAziKHg5xh/KLxtfRiRqynxo0XrzyEo+qNexlfxNQSYJDeZumiAbSwX688pgOW6JL7RrHl7ema1TsTEO//bxZBLqsB+8RNrXvZKuu+ge3PPk/2SL//UXOq+RfgJKZdgLpPopFNZOl8aHWQlDfQ= Received: from AM6PR0402MB3334.eurprd04.prod.outlook.com (52.133.18.151) by AM6PR0402MB3367.eurprd04.prod.outlook.com (52.133.18.160) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.527.15; Thu, 22 Feb 2018 04:51:44 +0000 Received: from AM6PR0402MB3334.eurprd04.prod.outlook.com ([fe80::7946:6d51:c827:961d]) by AM6PR0402MB3334.eurprd04.prod.outlook.com ([fe80::7946:6d51:c827:961d%13]) with mapi id 15.20.0527.017; Thu, 22 Feb 2018 04:51:43 +0000 From: Udit Kumar To: Ard Biesheuvel , Leif Lindholm CC: "edk2-devel@lists.01.org" , Michael D Kinney , Liming Gao , Meenakshi Aggarwal , Varun Sethi Thread-Topic: [RFC PATCH] MdePkg: add byte-swapping MMIO BaseIoLibSwap Thread-Index: AQHTqyg17zWBbjbs10u4Syy97d1fsKOvJ88AgACy+QA= Date: Thu, 22 Feb 2018 04:51:43 +0000 Message-ID: References: <20180221152525.23449-1-leif.lindholm@linaro.org> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=udit.kumar@nxp.com; x-originating-ip: [192.88.169.1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM6PR0402MB3367; 6:GcSYg9TwKTTH5BCEuMp1a8q7reocaccW3fR3sc4mSTWWuiXigH3PcxjMFL9nQfrYLQ5ZhywnNW8vM3UYx0DKPL7m+d3AQrqzl5vorkAtm4VQpmxa3tr2wsbSTyqh1x+Yaj46BJ+czTRjrag6u4tN1Ey67xqOBr+NpqOyJOecW8bBiv1trdMtU5c7CoFYZIalWmHpRG91VXi0c/H2g8HrD3Lx1FRh7n4g/r9W7xpd90HkLxJWvvneD05UqKmqTyJj350u+nGM6Z85lPQGiPZVI9UhE0r4G+losGr9ZEpWRMGpZsaavJolXgB7i3V9Pemuc6l1WiAVaqVGcxcsY/rsInEajhWoy2hge4zCXpdFmP0GbK+TYcXe76r9wqy3+bei; 5:olDRB5DdzB8DXvvf9obSaOHhLpaYGpk0vV1pu+t5MpuFwJlL48jD0vzINEi57D/EPzgNKF/EGcMTbd5Jqye6nZ9Z66OlWFdWx44o5AmuETbyxQxlbO0dxNgYIofWNaGkvkfDtkN1CPmceWx8R4L4BMzhX9i7+FW/9gbN4cTnbwI=; 24:bvYrz07raSKHwFPSMr9p2FMu9rbQcbD4pj9eNIHgLruYl4KGj0uNqc5rOLFLJD8qec23y/7yKA6KXUlOD1ykKESN0DYxlezaaeeD9QRGOdQ=; 7:7RcYdBLvZIJZFGAlfBqMep1Ggw1RLanQafjXQ+UAjJzEG3Zug1UzRwc4U3RZbHsgCDQrl7lyS+rzcupiooN9+7FRbyotkvpgY1Hbzh725H620KsMtsj+vHskXQwQmtm6PMoZMXNCuGh3qEjRPz5Aclz1H69Zn3V6y+NQKw/+HeONflpbOT1WGwY6RYPJ7q2noUWjviz0cjhNbctPsoizbKiVnZufSL7DPHpco/pUNNmMpFPFAnxYyNLxmHX06U8+ x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-forefront-antispam-report: SFV:SKI; SCL:-1; SFV:NSPM; SFS:(10009020)(6029001)(39860400002)(376002)(39380400002)(346002)(396003)(366004)(189003)(199004)(13464003)(5660300001)(229853002)(26005)(7696005)(54906003)(3846002)(6116002)(7736002)(6436002)(110136005)(59450400001)(102836004)(5250100002)(8936002)(3280700002)(99286004)(68736007)(2906002)(55016002)(66066001)(106356001)(966005)(81156014)(8676002)(86362001)(575784001)(25786009)(6306002)(33656002)(45080400002)(14454004)(97736004)(6506007)(186003)(6246003)(53546011)(74316002)(53946003)(2950100002)(316002)(105586002)(9686003)(305945005)(478600001)(4326008)(2900100001)(81166006)(16799955002)(76176011)(16200700003)(53936002)(3660700001)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:AM6PR0402MB3367; H:AM6PR0402MB3334.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: a1b0aba6-af43-41dd-4f80-08d579aff828 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(4534165)(4627221)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(3008032)(2017052603307)(7153060)(7193020); SRVR:AM6PR0402MB3367; x-ms-traffictypediagnostic: AM6PR0402MB3367: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(35073007944872)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001075)(6040501)(2401047)(8121501046)(5005006)(10201501046)(3231101)(944501161)(93006095)(93001095)(3002001)(6055026)(6041288)(20161123562045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123558120)(20161123560045)(20161123564045)(6072148)(201708071742011); SRVR:AM6PR0402MB3367; BCL:0; PCL:0; RULEID:; SRVR:AM6PR0402MB3367; x-forefront-prvs: 059185FE08 received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: O06ovZktzQk3ElEm15r9h7GPc8dFXYRCnTT3zFay+tGDNhp4+AflsnnaFNpG90SJ/bj9/o78hv0uNPu1P83HL6nl1hp+CGjd9QnV5sBSC1nsoEE7uOjQkA3L6+297my8ef9uHjZfl2UURlmcnmfkHuaFXt6iyYm41nQBdJWm00w= spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a1b0aba6-af43-41dd-4f80-08d579aff828 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2018 04:51:43.0859 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR0402MB3367 Subject: Re: [RFC PATCH] MdePkg: add byte-swapping MMIO BaseIoLibSwap X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 22 Feb 2018 04:45:48 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgQXJkLiANCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBBcmQgQmll c2hldXZlbCBbbWFpbHRvOmFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmddDQo+IFNlbnQ6IFdlZG5l c2RheSwgRmVicnVhcnkgMjEsIDIwMTggMTE6MzkgUE0NCj4gVG86IExlaWYgTGluZGhvbG0gPGxl aWYubGluZGhvbG1AbGluYXJvLm9yZz4NCj4gQ2M6IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBN aWNoYWVsIEQgS2lubmV5DQo+IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IExpbWluZyBH YW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPjsNCj4gTWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtz aGkuYWdnYXJ3YWxAbnhwLmNvbT47IFVkaXQgS3VtYXINCj4gPHVkaXQua3VtYXJAbnhwLmNvbT47 IFZhcnVuIFNldGhpIDxWLlNldGhpQG54cC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUkZDIFBBVENI XSBNZGVQa2c6IGFkZCBieXRlLXN3YXBwaW5nIE1NSU8gQmFzZUlvTGliU3dhcA0KPiANCj4gT24g MjEgRmVicnVhcnkgMjAxOCBhdCAxNToyNSwgTGVpZiBMaW5kaG9sbSA8bGVpZi5saW5kaG9sbUBs aW5hcm8ub3JnPg0KPiB3cm90ZToNCj4gPiBXaGVuIHBlcmZvcm1pbmcgTU1JTyB0byBhIGRlc3Rp bmF0aW9uIG9mIHRoZSBvcHBvc2l0ZSBlbmRpYW5uZXNzIHRvDQo+ID4gdGhlIGV4ZWN1dGluZyBw cm9jZXNzb3IsIHRoaXMgbGlicmFyeSBwcm92aWRlcyBhdXRvbWF0aWMgYnl0ZSBvcmRlcg0KPiA+ IHJldmVyc2FsIG9uIGlucHV0cyBhbmQgb3V0cHV0cy4NCj4gPg0KPiANCj4gQXMgcG9pbnRlZCBv dXQgYnkgTGFzemxvLCAnb3Bwb3NpdGUnIGlzIGlsbCBkZWZpbmVkLCBhcyBpdCBpcyBub3QgYSBw cm9wZXJ0eSBvZg0KPiB0aGUgZGV2aWNlIG5vciBpcyBpdCBhIHByb3BlcnR5IG9mIHRoZSBDUFUv cGxhdGZvcm0gKGV2ZW4gdGhvdWdoIFVFRkkgaXMNCj4gbGlrZWx5IHRvIHJlbWFpbiBsaXR0bGUg ZW5kaWFuIGZvciB0aGUgZm9yZXNlZWFibGUNCj4gZnV0dXJlKQ0KDQpJcyB0aGlzIGFzc3VtcHRp b24sIG9mIHBhcnQgb2YgVUVGSSBzcGVjcyA/DQogDQo+IFNvIEJpZ0VuZGlhbklvTGliIHNlZW1z IG1vcmUgYXBwcm9wcmlhdGUgYXMgYSBsaWJyYXJ5IGNsYXNzLCBhbmQgaXQgZG9lcw0KPiBuZWVk IHRvIGJlIGEgc2VwYXJhdGUgY2xhc3Mgc28gdGhhdCBhIHNpbmdsZSBkcml2ZXIgY2FuIHBlcmZv cm0gYm90aCBMRSBhbmQNCj4gQkUgTU1JTyAod2hpY2gsIGFzIHdhcyBwb2ludGVkIG91dCwgaXMg dGhlIGNhc2UgZm9yIGFueSBkcml2ZXIgdGhhdCBkcml2ZXMgYQ0KPiBCRSBNTUlPIHBlcmlwaGVy YWwgYnV0IHVzZXMgTEUgTU1JTyBmb3Igc2VyaWFsIHBvcnQgREVCVUcgb3V0cHV0KQ0KDQpZZXMs IFdlIG5lZWQgdHdvIGxpYiBoZXJlLCB3ZSBjYW4gZGlzY3VzcyBvbiBuYW1lLg0KDQpUaGFua3Mg DQpVZGl0IA0KDQo+IA0KPiANCj4gPiBDb250cmlidXRlZC11bmRlcjogVGlhbm9Db3JlIENvbnRy aWJ1dGlvbiBBZ3JlZW1lbnQgMS4xDQo+ID4gU2lnbmVkLW9mZi1ieTogTGVpZiBMaW5kaG9sbSA8 bGVpZi5saW5kaG9sbUBsaW5hcm8ub3JnPg0KPiA+IC0tLQ0KPiA+DQo+ID4gQXMgcHJvbWlzZWQg aW4gdGhlIGRhcmsgYW5kIGRpc3RhbnQgcGFzdDoNCj4gPg0KPiBodHRwczovL2VtZWEwMS5zYWZl bGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHBzJTNBJTJGJTJGd3cNCj4gdw0K PiA+IC5tYWlsLWFyY2hpdmUuY29tJTJGZWRrMi0NCj4gZGV2ZWwlNDBsaXN0cy4wMS5vcmclMkZt c2czMzQ0Ny5odG1sJmRhdGE9MDIlDQo+ID4NCj4gN0MwMSU3Q3VkaXQua3VtYXIlNDBueHAuY29t JTdDNTAzNDMwZmU4MWU1NDRkMWRmOGIwOGQ1Nzk1NjM0NmYlNw0KPiBDNjg2ZWENCj4gPg0KPiAx ZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMCU3QzYzNjU0ODMzMzUyMTA2NTUwOSZz ZGF0YT0NCj4gQVIxZzY0dA0KPiA+IEM0YWc4VjE4TVlHTjViaW1rWGU3RlFqJTJCRVliek9OciUy QkxGWE0lM0QmcmVzZXJ2ZWQ9MA0KPiA+DQo+ID4gVGhpcyBzdGFydHMgb3V0IGFzIGEgY2xvbmUg b2YgTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9Jb0xpYi5oLA0KPiA+IGltcGxlbWVudGluZyBzaW1w bGUgd3JhcHBlcnMgdGhhdCBkZXBlbmQgb24gYW4gSW9MaWIgaW5zdGFuY2UgdG8NCj4gPiBwZXJm b3JtIGFueSBhY3R1YWwgYWNjZXNzZXMuDQo+ID4NCj4gPiBDb21tZW50cyBhcmUgbW9zdGx5IG5v bnNlbnNlLCBzaW5jZSB0aGV5J3ZlIG5vdCBiZWVuIGNoYW5nZWQgZnJvbQ0KPiA+IHRoZWlyIG9y aWdpbmFscyBpbiBJb0xpYi5oLiBJZiBwZW9wbGUgZmVlbCB0aGlzIGxpYnJhcnkgaXMgYSBzZW5z aWJsZQ0KPiA+IGFwcHJvYWNoLCBJJ2xsIGZpeCB0aGF0IHVwIGJlZm9yZSBJIHNlbmQgYSB2MS4N Cj4gPg0KPiA+IEkgaGF2ZSBleHBsaWNpdGx5IGV4Y2x1ZGVkOg0KPiA+IC0gbm9uLU1NSU8gYWNj ZXNzZXMgKGNvdWxkIHlvdSByZWFsbHkgZW5kIHVwIHdpdGggbWl4ZWQgZW5kaWFubmVzcyBpbg0K PiA+ICAgc3VjaCBhIHN5c3RlbT8pDQo+ID4gLSBiaXRmaWVsZHMgKHdvdWxkIGVpdGhlciByZXF1 aXJlIGR1cGxpY2F0aW5nIGNvZGUgb3IgbWVyZ2luZyB0aGlzIGFsbA0KPiA+ICAgaW50byB0aGUg QmFzZUlvTGliSW50cmluc2ljIG1vZHVsZSwgd2hpY2ggaXMgYWxyZWFkeSBhIGJpdCBvbiB0aGUN Cj4gPiAgIGJsb2F0ZWQgc2lkZSkNCj4gPiAtIGJ1ZmZlcnMgb3BlcmF0aW9ucyAobGV0J3MgYXZv aWQgdGhvc2UgdW50aWwgd2UgZmluZCB3ZSBuZWVkIHRoZW0pDQo+ID4NCj4gPiBNZGVQa2cvSW5j bHVkZS9MaWJyYXJ5L0lvTGliU3dhcC5oICAgICAgICAgICAgIHwgMzk1ICsrKysrKysrKysrKysr KysrKysrDQo+IA0KPiBJZiB5b3UgY3JlYXRlIGEgbGlicmFyeSBjbGFzcywgcGxlYXNlIGRlY2xh cmUgaXQgaW4gdGhlIC5kZWMgZmlsZQ0KPiANCj4gPiAgTWRlUGtnL0xpYnJhcnkvQmFzZUlvTGli U3dhcC9CYXNlSW9MaWJTd2FwLmluZiB8ICA0NCArKysNCj4gPiBNZGVQa2cvTGlicmFyeS9CYXNl SW9MaWJTd2FwL0Jhc2VJb0xpYlN3YXAudW5pIHwgIDIzICsrDQo+ID4gIE1kZVBrZy9MaWJyYXJ5 L0Jhc2VJb0xpYlN3YXAvSW9MaWJTd2FwLmMgICAgICAgfCA0OTENCj4gKysrKysrKysrKysrKysr KysrKysrKysrKw0KPiA+ICBNZGVQa2cvTWRlUGtnLmRlYyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICsNCj4gPiAgTWRlUGtnL01kZVBrZy5kc2MgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMSArDQo+ID4gIDYgZmlsZXMgY2hhbmdlZCwgOTU3IGluc2VydGlvbnMo KykNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZVBrZy9JbmNsdWRlL0xpYnJhcnkvSW9MaWJT d2FwLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3 YXAvQmFzZUlvTGliU3dhcC5pbmYNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IE1kZVBrZy9MaWJy YXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dhcC51bmkNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IE1kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvSW9MaWJTd2FwLmMNCj4gPg0KPiA+IGRp ZmYgLS1naXQgYS9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L0lvTGliU3dhcC5oDQo+ID4gYi9NZGVQ a2cvSW5jbHVkZS9MaWJyYXJ5L0lvTGliU3dhcC5oDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPiBpbmRleCAwMDAwMDAwMDAwLi5mMTNjOGQ4NmU3DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvSW9MaWJTd2FwLmgNCj4gPiBAQCAtMCwwICsx LDM5NSBAQA0KPiA+ICsvKiogQGZpbGUNCj4gPiArICBQcm92aWRlIGJ5dGUtc3dhcHBpbmcgc2Vy dmljZXMgdG8gYWNjZXNzIE1NSU8gcmVnaXN0ZXJzLg0KPiA+ICsNCj4gPiArQ29weXJpZ2h0IChj KSAyMDA2IC0gMjAxMiwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gPiArcmVzZXJ2 ZWQuPEJSPiBDb3B5cmlnaHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMN Cj4gPiArcmVzZXJ2ZWQuPEJSPiBDb3B5cmlnaHQgKGMpIDIwMTgsIExpbmFybyBsdGQuIEFsbCBy aWdodHMNCj4gPiArcmVzZXJ2ZWQuPEJSPg0KPiA+ICsNCj4gPiArVGhpcyBwcm9ncmFtIGFuZCB0 aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgYW5kIG1hZGUNCj4gPiArYXZh aWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQlNEIExpY2Vuc2Ug d2hpY2gNCj4gPiArYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24uICBUaGUgZnVsbCB0ZXh0 IG9mIHRoZSBsaWNlbnNlIG1heSBiZQ0KPiA+ICtmb3VuZCBhdA0KPiA+DQo+ICtodHRwczovL2Vt ZWEwMS5zYWZlbGlua3MucHJvdGVjdGlvbi5vdXRsb29rLmNvbS8/dXJsPWh0dHAlM0ElMkYlMkZv cGUNCj4gPiArbnNvdXJjZS5vcmclMkZsaWNlbnNlcyUyRmJzZC0NCj4gbGljZW5zZS5waHAmZGF0 YT0wMiU3QzAxJTdDdWRpdC5rdW1hciU0MA0KPiA+DQo+ICtueHAuY29tJTdDNTAzNDMwZmU4MWU1 NDRkMWRmOGIwOGQ1Nzk1NjM0NmYlN0M2ODZlYTFkM2JjMmI0YzZmYTkNCj4gMmNkOTljDQo+ID4N Cj4gKzVjMzAxNjM1JTdDMCU3QzAlN0M2MzY1NDgzMzM1MjEwNjU1MDkmc2RhdGE9Z1cwaGolMkZS MHJUWGwlMkJsDQo+IEpyNm1BaXUNCj4gPiArYUdTeTdaSG94T2l5MzVXSVJPMjZKRSUzRCZyZXNl cnZlZD0wDQo+ID4gKw0KPiA+ICtUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUg QlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0KPiBCQVNJUywNCj4gPiArV0lUSE9VVCBXQVJSQU5U SUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSDQo+IEVYUFJFU1MgT1Ig SU1QTElFRC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICsNCj4gPiArI2lmbmRlZiBfX0lPX0xJQl9T V0FQX0hfXw0KPiA+ICsjZGVmaW5lIF9fSU9fTElCX1NXQVBfSF9fDQo+ID4gKw0KPiA+ICsvKioN Cj4gPiArICBSZWFkcyBhIDE2LWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBSZWFk cyB0aGUgMTYtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSAxNi1i aXQNCj4gPiArIHJlYWQgdmFsdWUgaXMgIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3Vh cmFudGVlIHRoYXQgYWxsIE1NSU8NCj4gPiArIHJlYWQgYW5kIHdyaXRlICBvcGVyYXRpb25zIGFy ZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiArICBJZiAxNi1iaXQgTU1JTyByZWdpc3RlciBvcGVy YXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJl c3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byByZWFkLg0K PiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSByZWFkLg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK1VJTlQxNg0KPiA+ICtFRklBUEkNCj4gPiArU3dhcE1taW9SZWFkMTYgKA0KPiA+ICsgIElO ICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzDQo+ID4gKyAgKTsNCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFdyaXRlcyBhIDE2LWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsN Cj4gPiArICBXcml0ZXMgdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRy ZXNzIHdpdGggdGhlIHZhbHVlDQo+ID4gKyBzcGVjaWZpZWQgIGJ5IFZhbHVlIGFuZCByZXR1cm5z IFZhbHVlLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlDQo+ID4gKyB0aGF0IGFsbCBNTUlP IHJlYWQgIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiAr ICBJZiAxNi1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVz cyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIFZhbHVlICAgVGhl IHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBAcmV0 dXJuIFZhbHVlLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtFRklBUEkNCj4g PiArU3dhcE1taW9Xcml0ZTE2ICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg VmFsdWUNCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAxNi1iaXQg TU1JTyByZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNlIE9SLCBhbmQgd3JpdGVzIHRoZQ0KPiA+ ICsgIHJlc3VsdCBiYWNrIHRvIHRoZSAxNi1iaXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4g KyAgUmVhZHMgdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBw ZXJmb3JtcyBhDQo+ID4gKyBiaXR3aXNlICBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQg dGhlIHZhbHVlIHNwZWNpZmllZCBieQ0KPiA+ICsgT3JEYXRhLCBhbmQgIHdyaXRlcyB0aGUgcmVz dWx0IHRvIHRoZSAxNi1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQNCj4gPiArIGJ5IEFkZHJl c3MuIFRoZSB2YWx1ZSAgd3JpdHRlbiB0byB0aGUgTU1JTyByZWdpc3RlciBpcyByZXR1cm5lZC4N Cj4gPiArIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCAgYWxsIE1NSU8gcmVhZCBh bmQgd3JpdGUgb3BlcmF0aW9ucw0KPiBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYg MTYtYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBB U1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJv dW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhl IE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBPckRhdGEgIFRoZSB2YWx1 ZSB0byBPUiB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyBy ZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArRUZJQVBJDQo+ID4g K1N3YXBNbWlvT3IxNiAoDQo+ID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IEFkZHJlc3MsDQo+ID4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIE9yRGF0 YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWFkcyBhIDE2LWJpdCBNTUlP IHJlZ2lzdGVyLCBwZXJmb3JtcyBhIGJpdHdpc2UgQU5ELCBhbmQgd3JpdGVzDQo+ID4gK3RoZSBy ZXN1bHQNCj4gPiArICBiYWNrIHRvIHRoZSAxNi1iaXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ ID4gKyAgUmVhZHMgdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNz LCBwZXJmb3JtcyBhDQo+ID4gKyBiaXR3aXNlIEFORCAgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQg YW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkNCj4gPiArIEFuZERhdGEsIGFuZCB3cml0ZXMgdGhl ICByZXN1bHQgdG8gdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyDQo+ID4gKyBzcGVjaWZpZWQgYnkg QWRkcmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gIHRoZSBNTUlPIHJlZ2lzdGVyIGlzDQo+ID4g KyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBNTUlPICBy ZWFkIGFuZCB3cml0ZQ0KPiBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiAr ICBJZiAxNi1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVz cyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIEFuZERhdGEgVGhl IHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0 ZXIuDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUg TU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArRUZJQVBJ DQo+ID4gK1N3YXBNbWlvQW5kMTYgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAg ICBBbmREYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlYWRzIGEgMTYt Yml0IE1NSU8gcmVnaXN0ZXIsIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYQ0K PiA+ICtiaXR3aXNlDQo+ID4gKyAgT1IsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRo ZSAxNi1iaXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgUmVhZHMgdGhlIDE2LWJpdCBN TUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhDQo+ID4gKyBiaXR3 aXNlIEFORCAgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQg YnkNCj4gPiArIEFuZERhdGEsIHBlcmZvcm1zIGEgIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVz dWx0IG9mIHRoZSBBTkQNCj4gPiArIG9wZXJhdGlvbiBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBi eSAgT3JEYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQNCj4gPiArIHRvIHRoZSAxNi1iaXQgTU1J TyByZWdpc3RlciBzcGVjaWZpZWQgYnkgIEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuDQo+ID4g KyB0byB0aGUgTU1JTyByZWdpc3RlciBpcyByZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiAgbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwNCj4gTU1JTyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBz ZXJpYWxpemVkLg0KPiA+ICsNCj4gPiArICBJZiAxNi1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRp b25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3Mg aXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4g Kw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4g PiArICBAcGFyYW0gIEFuZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVl IGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKyAgQHBhcmFtICBPckRhdGEgIFRoZSB2 YWx1ZSB0byBPUiB3aXRoIHRoZSByZXN1bHQgb2YgdGhlIEFORCBvcGVyYXRpb24uDQo+ID4gKw0K PiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rl ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBN bWlvQW5kVGhlbk9yMTYgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBBbmRE YXRhLA0KPiA+ICsgIElOICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4g PiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAzMi1iaXQgTU1JTyByZWdp c3Rlci4NCj4gPiArDQo+ID4gKyAgUmVhZHMgdGhlIDMyLWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNp ZmllZCBieSBBZGRyZXNzLiBUaGUgMzItYml0DQo+ID4gKyByZWFkIHZhbHVlIGlzICByZXR1cm5l ZC4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBNTUlPDQo+ID4gKyByZWFk IGFuZCB3cml0ZSAgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYg MzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBB U1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJv dW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhl IE1NSU8gcmVnaXN0ZXIgdG8gcmVhZC4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUg cmVhZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ID4gK1N3 YXBNbWlvUmVhZDMyICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg QWRkcmVzcw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBXcml0ZXMgYSAzMi1i aXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgV3JpdGVzIHRoZSAzMi1iaXQgTU1JTyBy ZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcyB3aXRoIHRoZSB2YWx1ZQ0KPiA+ICsgc3BlY2lm aWVkICBieSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJh bnRlZQ0KPiA+ICsgdGhhdCBhbGwgTU1JTyByZWFkICBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUg c2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0 aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNz IGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ ID4gKyAgQHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgTU1JTyByZWdp c3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBWYWx1ZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBNbWlvV3JpdGUzMiAoDQo+ID4gKyAgSU4g ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gICAgICBV SU5UMzIgICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFJlYWRzIGEgMzItYml0IE1NSU8gcmVnaXN0ZXIsIHBlcmZvcm1zIGEgYml0d2lz ZSBPUiwgYW5kIHdyaXRlcyB0aGUNCj4gPiArICByZXN1bHQgYmFjayB0byB0aGUgMzItYml0IE1N SU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlYWRzIHRoZSAzMi1iaXQgTU1JTyByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiA+ICsgYml0d2lzZSAgT1IgYmV0 d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkNCj4gPiArIE9y RGF0YSwgYW5kICB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIg c3BlY2lmaWVkDQo+ID4gKyBieSBBZGRyZXNzLiBUaGUgdmFsdWUgIHdyaXR0ZW4gdG8gdGhlIE1N SU8gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuDQo+ID4gKyBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFu dGVlIHRoYXQgIGFsbCBNTUlPIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMNCj4gYXJlIHNlcmlh bGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDMyLWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMg YXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsg IEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9t IHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3 cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr VUlOVDMyDQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb09yMzIgKA0KPiA+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAgVUlOVDMy ICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoqDQo+ ID4gKyAgUmVhZHMgYSAzMi1iaXQgTU1JTyByZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNlIEFO RCwgYW5kIHdyaXRlcw0KPiA+ICt0aGUgcmVzdWx0DQo+ID4gKyAgYmFjayB0byB0aGUgMzItYml0 IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlYWRzIHRoZSAzMi1iaXQgTU1JTyByZWdp c3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiA+ICsgYml0d2lzZSBBTkQg IGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4g KyBBbmREYXRhLCBhbmQgd3JpdGVzIHRoZSAgcmVzdWx0IHRvIHRoZSAzMi1iaXQgTU1JTyByZWdp c3Rlcg0KPiA+ICsgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvICB0 aGUgTU1JTyByZWdpc3RlciBpcw0KPiA+ICsgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwgTU1JTyAgcmVhZCBhbmQgd3JpdGUNCj4gb3BlcmF0aW9ucyBhcmUg c2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0 aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNz IGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ ID4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1 ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2 YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArVUlOVDMyDQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb0FuZDMyICgNCj4gPiArICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAg IFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ ICsvKioNCj4gPiArICBSZWFkcyBhIDMyLWJpdCBNTUlPIHJlZ2lzdGVyLCBwZXJmb3JtcyBhIGJp dHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGENCj4gPiArYml0d2lzZQ0KPiA+ICsgIE9SLCBhbmQgd3Jp dGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0K PiA+ICsgIFJlYWRzIHRoZSAzMi1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVz cywgcGVyZm9ybXMgYQ0KPiA+ICsgYml0d2lzZSBBTkQgIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0 IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gKyBBbmREYXRhLCBwZXJmb3JtcyBhICBi aXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUgQU5EDQo+ID4gKyBvcGVyYXRpb24g YW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgIE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0 DQo+ID4gKyB0byB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5ICBBZGRyZXNz LiBUaGUgdmFsdWUgd3JpdHRlbg0KPiA+ICsgdG8gdGhlIE1NSU8gcmVnaXN0ZXIgaXMgcmV0dXJu ZWQuIFRoaXMgZnVuY3Rpb24gIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsDQo+IE1NSU8gcmVhZCBh bmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMzIt Yml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NF UlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5k YXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1N SU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0 byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0IG9mIHRo ZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVu IGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDMy DQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb0FuZFRoZW5PcjMyICgNCj4gPiArICBJTiAgICAg IFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YSwNCj4gPiArICBJTiAgICAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFJlYWRzIGEgNjQtYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlYWRzIHRoZSA2 NC1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIDY0LWJpdA0KPiA+ ICsgcmVhZCB2YWx1ZSBpcyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUg dGhhdCBhbGwgTU1JTw0KPiA+ICsgcmVhZCBhbmQgd3JpdGUgIG9wZXJhdGlvbnMgYXJlIHNlcmlh bGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDY0LWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMg YXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJlYWQuDQo+ID4gKw0K PiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlO VDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb1JlYWQ2NCAoDQo+ID4gKyAgSU4gICAgICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MNCj4gPiArICApOw0KPiA+ICsNCj4gPiAr LyoqDQo+ID4gKyAgV3JpdGVzIGEgNjQtYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsg IFdyaXRlcyB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3Mgd2l0 aCB0aGUgdmFsdWUNCj4gPiArIHNwZWNpZmllZCAgYnkgVmFsdWUgYW5kIHJldHVybnMgVmFsdWUu IFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUNCj4gPiArIHRoYXQgYWxsIE1NSU8gcmVhZCAg YW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDY0 LWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNT RVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3Vu ZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBN TUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgVmFsdWUgICBUaGUgdmFsdWUg dG8gd3JpdGUgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlO VDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb1dyaXRlNjQgKA0KPiA+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICBWYWx1ZQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4g PiArICBSZWFkcyBhIDY0LWJpdCBNTUlPIHJlZ2lzdGVyLCBwZXJmb3JtcyBhIGJpdHdpc2UgT1Is IGFuZCB3cml0ZXMgdGhlDQo+ID4gKyAgcmVzdWx0IGJhY2sgdG8gdGhlIDY0LWJpdCBNTUlPIHJl Z2lzdGVyLg0KPiA+ICsNCj4gPiArICBSZWFkcyB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIgc3Bl Y2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4gPiArIGJpdHdpc2UgIE9SIGJldHdlZW4g dGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gKyBPckRhdGEs IGFuZCAgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDY0LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNp ZmllZA0KPiA+ICsgYnkgQWRkcmVzcy4gVGhlIHZhbHVlICB3cml0dGVuIHRvIHRoZSBNTUlPIHJl Z2lzdGVyIGlzIHJldHVybmVkLg0KPiA+ICsgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0 aGF0ICBhbGwgTU1JTyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zDQo+IGFyZSBzZXJpYWxpemVk Lg0KPiA+ICsNCj4gPiArICBJZiA2NC1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBu b3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFs aWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsg IEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFy YW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUg TU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ2 NA0KPiA+ICtFRklBUEkNCj4gPiArU3dhcE1taW9PcjY0ICgNCj4gPiArICBJTiAgICAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQ2NCAgICAg ICAgICAgICAgICAgICAgT3JEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IFJlYWRzIGEgNjQtYml0IE1NSU8gcmVnaXN0ZXIsIHBlcmZvcm1zIGEgYml0d2lzZSBBTkQsIGFu ZCB3cml0ZXMNCj4gPiArdGhlIHJlc3VsdA0KPiA+ICsgIGJhY2sgdG8gdGhlIDY0LWJpdCBNTUlP IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBSZWFkcyB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIg c3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4gPiArIGJpdHdpc2UgQU5EICBiZXR3 ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieQ0KPiA+ICsgQW5k RGF0YSwgYW5kIHdyaXRlcyB0aGUgIHJlc3VsdCB0byB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIN Cj4gPiArIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byAgdGhlIE1N SU8gcmVnaXN0ZXIgaXMNCj4gPiArIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFu dGVlIHRoYXQgYWxsIE1NSU8gIHJlYWQgYW5kIHdyaXRlDQo+IG9wZXJhdGlvbnMgYXJlIHNlcmlh bGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDY0LWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMg YXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsg IEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJv bSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUg d3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K1VJTlQ2NA0KPiA+ICtFRklBUEkNCj4gPiArU3dhcE1taW9BbmQ2NCAoDQo+ID4gKyAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gICAgICBVSU5U NjQgICAgICAgICAgICAgICAgICAgIEFuZERhdGENCj4gPiArICApOw0KPiA+ICsNCj4gPiArLyoq DQo+ID4gKyAgUmVhZHMgYSA2NC1iaXQgTU1JTyByZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNl IEFORCBmb2xsb3dlZCBieSBhDQo+ID4gK2JpdHdpc2UNCj4gPiArICBPUiwgYW5kIHdyaXRlcyB0 aGUgcmVzdWx0IGJhY2sgdG8gdGhlIDY0LWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiAr ICBSZWFkcyB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBl cmZvcm1zIGENCj4gPiArIGJpdHdpc2UgQU5EICBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQg dGhlIHZhbHVlIHNwZWNpZmllZCBieQ0KPiA+ICsgQW5kRGF0YSwgcGVyZm9ybXMgYSAgYml0d2lz ZSBPUiBiZXR3ZWVuIHRoZSByZXN1bHQgb2YgdGhlIEFORA0KPiA+ICsgb3BlcmF0aW9uIGFuZCB0 aGUgdmFsdWUgc3BlY2lmaWVkIGJ5ICBPckRhdGEsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdA0KPiA+ ICsgdG8gdGhlIDY0LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSAgQWRkcmVzcy4gVGhl IHZhbHVlIHdyaXR0ZW4NCj4gPiArIHRvIHRoZSBNTUlPIHJlZ2lzdGVyIGlzIHJldHVybmVkLiBU aGlzIGZ1bmN0aW9uICBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbA0KPiBNTUlPIHJlYWQgYW5kIHdy aXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDY0LWJpdCBN TUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCku DQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwg dGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJl Z2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5E IHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArICBA cGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZiB0aGUgQU5E IG9wZXJhdGlvbi4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNr IHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ ICtFRklBUEkNCj4gPiArU3dhcE1taW9BbmRUaGVuT3I2NCAoDQo+ID4gKyAgSU4gICAgICBVSU5U TiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gICAgICBVSU5UNjQgICAg ICAgICAgICAgICAgICAgIEFuZERhdGEsDQo+ID4gKyAgSU4gICAgICBVSU5UNjQgICAgICAgICAg ICAgICAgICAgIE9yRGF0YQ0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPiArDQo+ ID4gZGlmZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dh cC5pbmYNCj4gPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dhcC5p bmYNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLjU5ZDc3 NGRjOTcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZUlv TGliU3dhcC9CYXNlSW9MaWJTd2FwLmluZg0KPiA+IEBAIC0wLDAgKzEsNDQgQEANCj4gPiArIyMg QGZpbGUNCj4gPiArIyAgQnl0ZSBzd2FwcGluZyBJL08gTGlicmFyeS4NCj4gPiArIw0KPiA+ICsj ICBCeXRlIHN3YXBwaW5nIEkvTyBMaWJyYXJ5IGZvciBhbGwgYXJjaGl0ZWN0dXJlcy4gT25seSBN TUlPDQo+ID4gK3N1cHBvcnRlZC4gSS9PICMgIGFjY2Vzc2VzIHRha2UgcGxhY2UgdGhyb3VnaCB0 aGUgbm9ybWFsIElvTGliLCBidXQNCj4gPiArdmFsdWVzIHJlYWQgYW5kIHdyaXR0ZW4gIyAgYXJl IGJ5dGUtcmV2ZXJzZWQgdG8gaW50ZXJhY3Qgd2l0aCBwZXJpcGhlcmFscw0KPiBvZiBub24tbmF0 aXZlIGVuZGlhbm5lc3MuDQo+ID4gKyMNCj4gPiArIyAgQ29weXJpZ2h0IChjKSAyMDA3IC0gMjAx NSwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMNCj4gPiArcmVzZXJ2ZWQuPEJSPiAjICBQ b3J0aW9ucyBjb3B5cmlnaHQgKGMpIDIwMDggLSAyMDA5LCBBcHBsZSBJbmMuIEFsbA0KPiA+ICty aWdodHMgcmVzZXJ2ZWQuPEJSPiAjICBDb3B5cmlnaHQgKGMpIDIwMTcsIEFNRCBJbmNvcnBvcmF0 ZWQuIEFsbA0KPiA+ICtyaWdodHMgcmVzZXJ2ZWQuPEJSPiAjICMgIFRoaXMgcHJvZ3JhbSBhbmQg dGhlIGFjY29tcGFueWluZyBtYXRlcmlhbHMNCj4gPiArIyAgYXJlIGxpY2Vuc2VkIGFuZCBtYWRl IGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YNCj4gPiArdGhlIEJT RCBMaWNlbnNlICMgIHdoaWNoIGFjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiBUaGUgZnVs bCB0ZXh0DQo+ID4gK29mIHRoZSBsaWNlbnNlIG1heSBiZSBmb3VuZCBhdCAjDQo+IGh0dHBzOi8v ZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0cCUzQSUyRiUy Rm9wZW4NCj4gc291cmNlLm9yZyUyRmxpY2Vuc2VzJTJGYnNkLQ0KPiBsaWNlbnNlLnBocCZkYXRh PTAyJTdDMDElN0N1ZGl0Lmt1bWFyJTQwbnhwLmNvbSU3QzUwMzQzMGZlODFlNTQ0ZA0KPiAxZGY4 YjA4ZDU3OTU2MzQ2ZiU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjM1JTdDMCU3QzAl N0M2DQo+IDM2NTQ4MzMzNTIxMDY1NTA5JnNkYXRhPWdXMGhqJTJGUjByVFhsJTJCbEpyNm1BaXVh R1N5N1pIb3hPaXkzNVcNCj4gSVJPMjZKRSUzRCZyZXNlcnZlZD0wLg0KPiA+ICsjICBUSEUgUFJP R1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4gIkFTIElTIg0K PiA+ICtCQVNJUywgIyAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFUSU9OUyBPRiBB TlkgS0lORCwNCj4gRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiArIw0KPiA+ICsjIw0K PiA+ICsNCj4gPiArW0RlZmluZXNdDQo+ID4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAg ICAgID0gMHgwMDAxMDAxYQ0KPiA+ICsgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9 IEJhc2VJb0xpYlN3YXANCj4gPiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBC YXNlSW9MaWJTd2FwLnVuaQ0KPiA+ICsgIEZJTEVfR1VJRCAgICAgICAgICAgICAgICAgICAgICA9 IDA3M2MzZmJkLWZmMGQtNDFiNi1hMjA5LTFlNDJmZDJhM2JhYg0KPiA+ICsgIE1PRFVMRV9UWVBF ICAgICAgICAgICAgICAgICAgICA9IEJBU0UNCj4gPiArICBWRVJTSU9OX1NUUklORyAgICAgICAg ICAgICAgICAgPSAxLjANCj4gPiArICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBJ b0xpYlN3YXANCj4gPiArDQo+ID4gKw0KPiA+ICsjDQo+ID4gKyMgIFZBTElEX0FSQ0hJVEVDVFVS RVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDIElQRiBBUk0gQUFSQ0g2NA0KPiA+ICsjDQo+ID4g Kw0KPiA+ICtbU291cmNlc10NCj4gPiArICBJb0xpYlN3YXAuYw0KPiA+ICsNCj4gPiArW1BhY2th Z2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKw0KPiA+ICtbTGlicmFyeUNsYXNz ZXNdDQo+ID4gKyAgQmFzZUxpYg0KPiA+ICsjICBEZWJ1Z0xpYg0KPiA+ICsgIElvTGliDQo+ID4g ZGlmZiAtLWdpdCBhL01kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dhcC51 bmkNCj4gPiBiL01kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dhcC51bmkN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAuLmUzNWI0YWJl ZjcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZUlvTGli U3dhcC9CYXNlSW9MaWJTd2FwLnVuaQ0KPiA+IEBAIC0wLDAgKzEsMjMgQEANCj4gPiArLy8gLyoq IEBmaWxlDQo+ID4gKy8vIEJ5dGUgc3dhcHBpbmcgSS9PIExpYnJhcnkuDQo+ID4gKy8vDQo+ID4g Ky8vIEJ5dGUgc3dhcHBpbmcgSS9PIExpYnJhcnkgZm9yIGFsbCBhcmNoaXRlY3R1cmVzLiBPbmx5 IE1NSU8NCj4gPiArc3VwcG9ydGVkLiBJL08gLy8gYWNjZXNzZXMgdGFrZSBwbGFjZSB0aHJvdWdo IHRoZSBub3JtYWwgSW9MaWIsIGJ1dA0KPiA+ICt2YWx1ZXMgcmVhZCBhbmQgd3JpdHRlbiAvLyBh cmUgYnl0ZS1yZXZlcnNlZCB0byBpbnRlcmFjdCB3aXRoIHBlcmlwaGVyYWxzDQo+IG9mIG5vbi1u YXRpdmUgZW5kaWFubmVzcy4NCj4gPiArLy8NCj4gPiArLy8gQ29weXJpZ2h0IChjKSAyMDE4LCBM aW5hcm8gbHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4gLy8gLy8NCj4gPiArVGhpcyBwcm9n cmFtIGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyAvLyBhcmUgbGljZW5zZWQgYW5kIG1h ZGUNCj4gPiArYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg QlNEIExpY2Vuc2UgLy8gd2hpY2gNCj4gPiArYWNjb21wYW5pZXMgdGhpcyBkaXN0cmlidXRpb24u IFRoZSBmdWxsIHRleHQgb2YgdGhlIGxpY2Vuc2UgbWF5IGJlDQo+ID4gK2ZvdW5kIGF0IC8vDQo+ IGh0dHBzOi8vZW1lYTAxLnNhZmVsaW5rcy5wcm90ZWN0aW9uLm91dGxvb2suY29tLz91cmw9aHR0 cCUzQSUyRiUyRm9wZW4NCj4gc291cmNlLm9yZyUyRmxpY2Vuc2VzJTJGYnNkLQ0KPiBsaWNlbnNl LnBocCZkYXRhPTAyJTdDMDElN0N1ZGl0Lmt1bWFyJTQwbnhwLmNvbSU3QzUwMzQzMGZlODFlNTQ0 ZA0KPiAxZGY4YjA4ZDU3OTU2MzQ2ZiU3QzY4NmVhMWQzYmMyYjRjNmZhOTJjZDk5YzVjMzAxNjM1 JTdDMCU3QzAlN0M2DQo+IDM2NTQ4MzMzNTIxMDY1NTA5JnNkYXRhPWdXMGhqJTJGUjByVFhsJTJC bEpyNm1BaXVhR1N5N1pIb3hPaXkzNVcNCj4gSVJPMjZKRSUzRCZyZXNlcnZlZD0wLg0KPiA+ICsv LyBUSEUgUFJPR1JBTSBJUyBESVNUUklCVVRFRCBVTkRFUiBUSEUgQlNEIExJQ0VOU0UgT04gQU4g IkFTIElTIg0KPiA+ICtCQVNJUywgLy8gV0lUSE9VVCBXQVJSQU5USUVTIE9SIFJFUFJFU0VOVEFU SU9OUyBPRiBBTlkgS0lORCwNCj4gRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4NCj4gPiArLy8N Cj4gPiArLy8gKiovDQo+ID4gKw0KPiA+ICsNCj4gPiArI3N0cmluZyBTVFJfTU9EVUxFX0FCU1RS QUNUICAgICAgICAgICAgICNsYW5ndWFnZSBlbi1VUyAiQnl0ZSBzd2FwcGluZw0KPiBJL08gTGli cmFyeSINCj4gPiArDQo+ID4gKyNzdHJpbmcgU1RSX01PRFVMRV9ERVNDUklQVElPTiAgICAgICAg ICAjbGFuZ3VhZ2UgZW4tVVMgIkJ5dGUgc3dhcHBpbmcNCj4gSS9PIExpYnJhcnkgZm9yIGFsbCBh cmNoaXRlY3R1cmVzLiBPbmx5IE1NSU8gc3VwcG9ydGVkLiBJL08gYWNjZXNzZXMgdGFrZQ0KPiBw bGFjZSB0aHJvdWdoIHRoZSBub3JtYWwgSW9MaWIsIGJ1dCB2YWx1ZXMgcmVhZCBhbmQgd3JpdHRl biBhcmUgYnl0ZS0NCj4gcmV2ZXJzZWQgdG8gaW50ZXJhY3Qgd2l0aCBwZXJpcGhlcmFscyBvZiBu b24tbmF0aXZlIGVuZGlhbm5lc3MuIg0KPiA+ICsNCj4gPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xp YnJhcnkvQmFzZUlvTGliU3dhcC9Jb0xpYlN3YXAuYw0KPiA+IGIvTWRlUGtnL0xpYnJhcnkvQmFz ZUlvTGliU3dhcC9Jb0xpYlN3YXAuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5k ZXggMDAwMDAwMDAwMC4uNmViNjc1ZGUyMA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9N ZGVQa2cvTGlicmFyeS9CYXNlSW9MaWJTd2FwL0lvTGliU3dhcC5jDQo+ID4gQEAgLTAsMCArMSw0 OTEgQEANCj4gPiArLyoqIEBmaWxlDQo+ID4gKyAgUHJvdmlkZSBieXRlLXN3YXBwaW5nIHNlcnZp Y2VzIHRvIGFjY2VzcyBNTUlPIHJlZ2lzdGVycy4NCj4gPiArDQo+ID4gK0NvcHlyaWdodCAoYykg MjAwNiAtIDIwMTIsIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gK3Jlc2VydmVk LjxCUj4gQ29weXJpZ2h0IChjKSAyMDE3LCBBTUQgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzDQo+ ID4gK3Jlc2VydmVkLjxCUj4gQ29weXJpZ2h0IChjKSAyMDE4LCBMaW5hcm8gbHRkLiBBbGwgcmln aHRzDQo+ID4gK3Jlc2VydmVkLjxCUj4NCj4gPiArDQo+ID4gK1RoaXMgcHJvZ3JhbSBhbmQgdGhl IGFjY29tcGFueWluZyBtYXRlcmlhbHMgYXJlIGxpY2Vuc2VkIGFuZCBtYWRlDQo+ID4gK2F2YWls YWJsZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEJTRCBMaWNlbnNlIHdo aWNoDQo+ID4gK2FjY29tcGFuaWVzIHRoaXMgZGlzdHJpYnV0aW9uLiAgVGhlIGZ1bGwgdGV4dCBv ZiB0aGUgbGljZW5zZSBtYXkgYmUNCj4gPiArZm91bmQgYXQNCj4gPg0KPiAraHR0cHM6Ly9lbWVh MDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwJTNBJTJGJTJGb3Bl DQo+ID4gK25zb3VyY2Uub3JnJTJGbGljZW5zZXMlMkZic2QtDQo+IGxpY2Vuc2UucGhwJmRhdGE9 MDIlN0MwMSU3Q3VkaXQua3VtYXIlNDANCj4gPg0KPiArbnhwLmNvbSU3QzUwMzQzMGZlODFlNTQ0 ZDFkZjhiMDhkNTc5NTYzNDZmJTdDNjg2ZWExZDNiYzJiNGM2ZmE5DQo+IDJjZDk5Yw0KPiA+DQo+ ICs1YzMwMTYzNSU3QzAlN0MwJTdDNjM2NTQ4MzMzNTIxMDY1NTA5JnNkYXRhPWdXMGhqJTJGUjBy VFhsJTJCbA0KPiBKcjZtQWl1DQo+ID4gK2FHU3k3WkhveE9peTM1V0lSTzI2SkUlM0QmcmVzZXJ2 ZWQ9MA0KPiA+ICsNCj4gPiArVEhFIFBST0dSQU0gSVMgRElTVFJJQlVURUQgVU5ERVIgVEhFIEJT RCBMSUNFTlNFIE9OIEFOICJBUyBJUyINCj4gQkFTSVMsDQo+ID4gK1dJVEhPVVQgV0FSUkFOVElF UyBPUiBSRVBSRVNFTlRBVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUg0KPiBFWFBSRVNTIE9SIElN UExJRUQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvSW9MaWIuaD4NCj4gPiArDQo+ID4gKy8q Kg0KPiA+ICsgIFJlYWRzIGEgMTYtYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJl YWRzIHRoZSAxNi1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIDE2 LWJpdA0KPiA+ICsgcmVhZCB2YWx1ZSBpcyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwgTU1JTw0KPiA+ICsgcmVhZCBhbmQgd3JpdGUgIG9wZXJhdGlvbnMg YXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIG9w ZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRk cmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4N Cj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHJlYWQu DQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHJlYWQuDQo+ID4gKw0KPiA+ICsqKi8N Cj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb1JlYWQxNiAoDQo+ID4gKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MNCj4gPiArICApDQo+ID4g K3sNCj4gPiArICByZXR1cm4gU3dhcEJ5dGVzMTYgKE1taW9SZWFkMTYgKEFkZHJlc3MpKTsgfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgV3JpdGVzIGEgMTYtYml0IE1NSU8gcmVnaXN0ZXIuDQo+ ID4gKw0KPiA+ICsgIFdyaXRlcyB0aGUgMTYtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3Mgd2l0aCB0aGUgdmFsdWUNCj4gPiArIHNwZWNpZmllZCAgYnkgVmFsdWUgYW5kIHJl dHVybnMgVmFsdWUuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUNCj4gPiArIHRoYXQgYWxs IE1NSU8gcmVhZCAgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0K PiA+ICsgIElmIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0 ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBh IDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBB ZGRyZXNzIFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgVmFsdWUg ICBUaGUgdmFsdWUgdG8gd3JpdGUgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gVmFsdWUuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDE2DQo+ID4gK0VGSUFQ SQ0KPiA+ICtTd2FwTW1pb1dyaXRlMTYgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAgVUlOVDE2ICAgICAgICAgICAgICAg ICAgICBWYWx1ZQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIChWT0lEKSBNbWlvV3JpdGUxNiAo QWRkcmVzcywgU3dhcEJ5dGVzMTYgKFZhbHVlKSk7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBWYWx1 ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAxNi1iaXQgTU1JTyBy ZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNlIE9SLCBhbmQgd3JpdGVzIHRoZQ0KPiA+ICsgIHJl c3VsdCBiYWNrIHRvIHRoZSAxNi1iaXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgUmVh ZHMgdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3Jt cyBhDQo+ID4gKyBiaXR3aXNlICBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZh bHVlIHNwZWNpZmllZCBieQ0KPiA+ICsgT3JEYXRhLCBhbmQgIHdyaXRlcyB0aGUgcmVzdWx0IHRv IHRoZSAxNi1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQNCj4gPiArIGJ5IEFkZHJlc3MuIFRo ZSB2YWx1ZSAgd3JpdHRlbiB0byB0aGUgTU1JTyByZWdpc3RlciBpcyByZXR1cm5lZC4NCj4gPiAr IFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCAgYWxsIE1NSU8gcmVhZCBhbmQgd3Jp dGUgb3BlcmF0aW9ucw0KPiBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMTYtYml0 IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQo KS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5 LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8g cmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBPckRhdGEgIFRoZSB2YWx1ZSB0byBP UiB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKw0K PiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rl ci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMTYNCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBN bWlvT3IxNiAoDQo+ID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJl c3MsDQo+ID4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIE9yRGF0YQ0KPiA+ ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQxNiBWYWx1ZTsNCj4gPiArDQo+ID4gKyAgVmFsdWUg PSBTd2FwTW1pb1JlYWQxNiAoQWRkcmVzcyk7DQo+ID4gKyAgVmFsdWUgfD0gT3JEYXRhOw0KPiA+ ICsNCj4gPiArICByZXR1cm4gU3dhcE1taW9Xcml0ZTE2IChBZGRyZXNzLCBWYWx1ZSk7IH0NCj4g PiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlYWRzIGEgMTYtYml0IE1NSU8gcmVnaXN0ZXIsIHBlcmZv cm1zIGEgYml0d2lzZSBBTkQsIGFuZCB3cml0ZXMNCj4gPiArdGhlIHJlc3VsdA0KPiA+ICsgIGJh Y2sgdG8gdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBSZWFkcyB0aGUg MTYtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4g PiArIGJpdHdpc2UgQU5EICBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNw ZWNpZmllZCBieQ0KPiA+ICsgQW5kRGF0YSwgYW5kIHdyaXRlcyB0aGUgIHJlc3VsdCB0byB0aGUg MTYtYml0IE1NSU8gcmVnaXN0ZXINCj4gPiArIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgdmFs dWUgd3JpdHRlbiB0byAgdGhlIE1NSU8gcmVnaXN0ZXIgaXMNCj4gPiArIHJldHVybmVkLiBUaGlz IGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIE1NSU8gIHJlYWQgYW5kIHdyaXRlDQo+ IG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDE2LWJpdCBNTUlP IHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCkuDQo+ ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhl biBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJlZ2lz dGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdp dGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rlci4NCj4gPiArDQo+ID4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0K PiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQxNg0KPiA+ICtFRklBUEkNCj4gPiArU3dhcE1taW9B bmQxNiAoDQo+ID4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Ms DQo+ID4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIEFuZERhdGENCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBVSU5UMTYgVmFsdWU7DQo+ID4gKw0KPiA+ICsgIFZhbHVlID0g U3dhcE1taW9SZWFkMTYgKEFkZHJlc3MpOw0KPiA+ICsgIFZhbHVlICY9IEFuZERhdGE7DQo+ID4g Kw0KPiA+ICsgIHJldHVybiBTd2FwTW1pb1dyaXRlMTYgKEFkZHJlc3MsIFZhbHVlKTsgfQ0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAxNi1iaXQgTU1JTyByZWdpc3RlciwgcGVyZm9y bXMgYSBiaXR3aXNlIEFORCBmb2xsb3dlZCBieSBhDQo+ID4gK2JpdHdpc2UNCj4gPiArICBPUiwg YW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyLg0K PiA+ICsNCj4gPiArICBSZWFkcyB0aGUgMTYtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5 IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4gPiArIGJpdHdpc2UgQU5EICBiZXR3ZWVuIHRoZSByZWFk IHJlc3VsdCBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieQ0KPiA+ICsgQW5kRGF0YSwgcGVyZm9y bXMgYSAgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZXN1bHQgb2YgdGhlIEFORA0KPiA+ICsgb3Bl cmF0aW9uIGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5ICBPckRhdGEsIGFuZCB3cml0ZXMgdGhl IHJlc3VsdA0KPiA+ICsgdG8gdGhlIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSAg QWRkcmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4NCj4gPiArIHRvIHRoZSBNTUlPIHJlZ2lzdGVyIGlz IHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uICBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbA0KPiBNTUlP IHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsg IElmIDE2LWJpdCBNTUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRo ZW4gQVNTRVJUKCkuDQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJp dCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNz IFRoZSBNTUlPIHJlZ2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUg dmFsdWUgdG8gQU5EIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdpc3Rl ci4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlc3Vs dCBvZiB0aGUgQU5EIG9wZXJhdGlvbi4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUg d3JpdHRlbiBiYWNrIHRvIHRoZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4g K1VJTlQxNg0KPiA+ICtFRklBUEkNCj4gPiArU3dhcE1taW9BbmRUaGVuT3IxNiAoDQo+ID4gKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gICAg ICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIEFuZERhdGEsDQo+ID4gKyAgSU4gICAgICBVSU5U MTYgICAgICAgICAgICAgICAgICAgIE9yRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJ TlQxNiBWYWx1ZTsNCj4gPiArDQo+ID4gKyAgVmFsdWUgPSBTd2FwTW1pb1JlYWQxNiAoQWRkcmVz cyk7DQo+ID4gKyAgVmFsdWUgJj0gQW5kRGF0YTsNCj4gPiArICBWYWx1ZSB8PSBPckRhdGE7DQo+ ID4gKw0KPiA+ICsgIHJldHVybiBTd2FwTW1pb1dyaXRlMTYgKEFkZHJlc3MsIFZhbHVlKTsgfQ0K PiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAzMi1iaXQgTU1JTyByZWdpc3Rlci4NCj4g PiArDQo+ID4gKyAgUmVhZHMgdGhlIDMyLWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBB ZGRyZXNzLiBUaGUgMzItYml0DQo+ID4gKyByZWFkIHZhbHVlIGlzICByZXR1cm5lZC4gVGhpcyBm dW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBNTUlPDQo+ID4gKyByZWFkIGFuZCB3cml0 ZSAgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMzItYml0IE1N SU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4N Cj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0 aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVn aXN0ZXIgdG8gcmVhZC4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgcmVhZC4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UMzINCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBNbWlvUmVh ZDMyICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0K PiA+ICsgICkNCj4gPiArew0KPiA+ICsgIHJldHVybiBTd2FwQnl0ZXMzMiAoTW1pb1JlYWQzMiAo QWRkcmVzcykpOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBXcml0ZXMgYSAzMi1iaXQgTU1J TyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgV3JpdGVzIHRoZSAzMi1iaXQgTU1JTyByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcyB3aXRoIHRoZSB2YWx1ZQ0KPiA+ICsgc3BlY2lmaWVkICBi eSBWYWx1ZSBhbmQgcmV0dXJucyBWYWx1ZS4gVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZQ0K PiA+ICsgdGhhdCBhbGwgTU1JTyByZWFkICBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFs aXplZC4NCj4gPiArDQo+ID4gKyAgSWYgMzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBh cmUgbm90IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5v dCBhbGlnbmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4g PiArICBAcGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAg QHBhcmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZSB0byB0aGUgTU1JTyByZWdpc3Rlci4N Cj4gPiArDQo+ID4gKyAgQHJldHVybiBWYWx1ZS4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtVSU5U MzINCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBNbWlvV3JpdGUzMiAoDQo+ID4gKyAgSU4gICAgICBV SU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ID4gKyAgSU4gICAgICBVSU5UMzIg ICAgICAgICAgICAgICAgICAgIFZhbHVlDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgKFZPSUQp IE1taW9Xcml0ZTMyIChBZGRyZXNzLCBTd2FwQnl0ZXMzMiAoVmFsdWUpKTsNCj4gPiArDQo+ID4g KyAgcmV0dXJuIFZhbHVlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWFkcyBh IDMyLWJpdCBNTUlPIHJlZ2lzdGVyLCBwZXJmb3JtcyBhIGJpdHdpc2UgT1IsIGFuZCB3cml0ZXMg dGhlDQo+ID4gKyAgcmVzdWx0IGJhY2sgdG8gdGhlIDMyLWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ ICsNCj4gPiArICBSZWFkcyB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFk ZHJlc3MsIHBlcmZvcm1zIGENCj4gPiArIGJpdHdpc2UgIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVz dWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gKyBPckRhdGEsIGFuZCAgd3JpdGVz IHRoZSByZXN1bHQgdG8gdGhlIDMyLWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZA0KPiA+ICsg YnkgQWRkcmVzcy4gVGhlIHZhbHVlICB3cml0dGVuIHRvIHRoZSBNTUlPIHJlZ2lzdGVyIGlzIHJl dHVybmVkLg0KPiA+ICsgVGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0ICBhbGwgTU1J TyByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zDQo+IGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4g PiArICBJZiAzMi1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVk LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAz Mi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRk cmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIE9yRGF0YSAg VGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgTU1JTw0KPiByZWdp c3Rlci4NCj4gPiArDQo+ID4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRo ZSBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQzMg0KPiA+ICtFRklB UEkNCj4gPiArU3dhcE1taW9PcjMyICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAg ICAgT3JEYXRhDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDMyIFZhbHVlOw0KPiA+ICsN Cj4gPiArICBWYWx1ZSA9IFN3YXBNbWlvUmVhZDMyIChBZGRyZXNzKTsNCj4gPiArICBWYWx1ZSB8 PSBPckRhdGE7DQo+ID4gKw0KPiA+ICsgIHJldHVybiBTd2FwTW1pb1dyaXRlMzIgKEFkZHJlc3Ms IFZhbHVlKTsgfQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgUmVhZHMgYSAzMi1iaXQgTU1JTyBy ZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNlIEFORCwgYW5kIHdyaXRlcw0KPiA+ICt0aGUgcmVz dWx0DQo+ID4gKyAgYmFjayB0byB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ ICsgIFJlYWRzIHRoZSAzMi1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywg cGVyZm9ybXMgYQ0KPiA+ICsgYml0d2lzZSBBTkQgIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFu ZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gKyBBbmREYXRhLCBhbmQgd3JpdGVzIHRoZSAg cmVzdWx0IHRvIHRoZSAzMi1iaXQgTU1JTyByZWdpc3Rlcg0KPiA+ICsgc3BlY2lmaWVkIGJ5IEFk ZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvICB0aGUgTU1JTyByZWdpc3RlciBpcw0KPiA+ICsg cmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgTU1JTyAgcmVh ZCBhbmQgd3JpdGUNCj4gb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gPiArDQo+ID4gKyAg SWYgMzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCwgdGhl biBBU1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMzItYml0 IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBAcGFyYW0gIEFkZHJlc3Mg VGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2 YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVy Lg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1N SU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDMyDQo+ID4gK0VGSUFQSQ0K PiA+ICtTd2FwTW1pb0FuZDMyICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAg QW5kRGF0YQ0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIFVJTlQzMiBWYWx1ZTsNCj4gPiArDQo+ ID4gKyAgVmFsdWUgPSBTd2FwTW1pb1JlYWQzMiAoQWRkcmVzcyk7DQo+ID4gKyAgVmFsdWUgJj0g QW5kRGF0YTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN3YXBNbWlvV3JpdGUzMiAoQWRkcmVzcywg VmFsdWUpOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWFkcyBhIDMyLWJpdCBNTUlPIHJl Z2lzdGVyLCBwZXJmb3JtcyBhIGJpdHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGENCj4gPiArYml0d2lz ZQ0KPiA+ICsgIE9SLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgMzItYml0IE1N SU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlYWRzIHRoZSAzMi1iaXQgTU1JTyByZWdpc3Rl ciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiA+ICsgYml0d2lzZSBBTkQgIGJl dHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gKyBB bmREYXRhLCBwZXJmb3JtcyBhICBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUg QU5EDQo+ID4gKyBvcGVyYXRpb24gYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgIE9yRGF0YSwg YW5kIHdyaXRlcyB0aGUgcmVzdWx0DQo+ID4gKyB0byB0aGUgMzItYml0IE1NSU8gcmVnaXN0ZXIg c3BlY2lmaWVkIGJ5ICBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbg0KPiA+ICsgdG8gdGhlIE1N SU8gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gIG11c3QgZ3VhcmFudGVlIHRo YXQgYWxsDQo+IE1NSU8gcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4N Cj4gPiArDQo+ID4gKyAgSWYgMzItYml0IE1NSU8gcmVnaXN0ZXIgb3BlcmF0aW9ucyBhcmUgbm90 IHN1cHBvcnRlZCwgdGhlbiBBU1NFUlQoKS4NCj4gPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGln bmVkIG9uIGEgMzItYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsNCj4gPiArICBA cGFyYW0gIEFkZHJlc3MgVGhlIE1NSU8gcmVnaXN0ZXIgdG8gd3JpdGUuDQo+ID4gKyAgQHBhcmFt ICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBN TUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Ig d2l0aCB0aGUgcmVzdWx0IG9mIHRoZSBBTkQgb3BlcmF0aW9uLg0KPiA+ICsNCj4gPiArICBAcmV0 dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0K PiA+ICsqKi8NCj4gPiArVUlOVDMyDQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1pb0FuZFRoZW5P cjMyICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywN Cj4gPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YSwNCj4gPiAr ICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgT3JEYXRhDQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgVUlOVDMyIFZhbHVlOw0KPiA+ICsNCj4gPiArICBWYWx1ZSA9IFN3YXBNbWlv UmVhZDMyIChBZGRyZXNzKTsNCj4gPiArICBWYWx1ZSAmPSBBbmREYXRhOw0KPiA+ICsgIFZhbHVl IHw9IE9yRGF0YTsNCj4gPiArDQo+ID4gKyAgcmV0dXJuIFN3YXBNbWlvV3JpdGUzMiAoQWRkcmVz cywgVmFsdWUpOyB9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZWFkcyBhIDY0LWJpdCBNTUlP IHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBSZWFkcyB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIg c3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSA2NC1iaXQNCj4gPiArIHJlYWQgdmFsdWUgaXMgIHJl dHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIE1NSU8NCj4gPiAr IHJlYWQgYW5kIHdyaXRlICBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiAr ICBJZiA2NC1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1i aXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVz cyBUaGUgTU1JTyByZWdpc3RlciB0byByZWFkLg0KPiA+ICsNCj4gPiArICBAcmV0dXJuIFRoZSB2 YWx1ZSByZWFkLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtFRklBUEkNCj4g PiArU3dhcE1taW9SZWFkNjQgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAg ICAgICBBZGRyZXNzDQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgcmV0dXJuIFN3YXBCeXRlczY0 IChNbWlvUmVhZDY0IChBZGRyZXNzKSk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFdyaXRl cyBhIDY0LWJpdCBNTUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArICBXcml0ZXMgdGhlIDY0LWJp dCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzIHdpdGggdGhlIHZhbHVlDQo+ID4g KyBzcGVjaWZpZWQgIGJ5IFZhbHVlIGFuZCByZXR1cm5zIFZhbHVlLiBUaGlzIGZ1bmN0aW9uIG11 c3QgZ3VhcmFudGVlDQo+ID4gKyB0aGF0IGFsbCBNTUlPIHJlYWQgIGFuZCB3cml0ZSBvcGVyYXRp b25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiArICBJZiA2NC1iaXQgTU1JTyByZWdpc3Rl ciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0KPiA+ICsgIElm IEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJU KCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3RlciB0byB3 cml0ZS4NCj4gPiArICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHRvIHdyaXRlIHRvIHRoZSBN TUlPIHJlZ2lzdGVyLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1VJTlQ2NA0KPiA+ICtFRklBUEkN Cj4gPiArU3dhcE1taW9Xcml0ZTY0ICgNCj4gPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgQWRkcmVzcywNCj4gPiArICBJTiAgICAgIFVJTlQ2NCAgICAgICAgICAgICAgICAg ICAgVmFsdWUNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICAoVk9JRCkgTW1pb1dyaXRlNjQgKEFk ZHJlc3MsIFN3YXBCeXRlczY0IChWYWx1ZSkpOw0KPiA+ICsNCj4gPiArICByZXR1cm4gVmFsdWU7 DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlYWRzIGEgNjQtYml0IE1NSU8gcmVn aXN0ZXIsIHBlcmZvcm1zIGEgYml0d2lzZSBPUiwgYW5kIHdyaXRlcyB0aGUNCj4gPiArICByZXN1 bHQgYmFjayB0byB0aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsgIFJlYWRz IHRoZSA2NC1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMg YQ0KPiA+ICsgYml0d2lzZSAgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1 ZSBzcGVjaWZpZWQgYnkNCj4gPiArIE9yRGF0YSwgYW5kICB3cml0ZXMgdGhlIHJlc3VsdCB0byB0 aGUgNjQtYml0IE1NSU8gcmVnaXN0ZXIgc3BlY2lmaWVkDQo+ID4gKyBieSBBZGRyZXNzLiBUaGUg dmFsdWUgIHdyaXR0ZW4gdG8gdGhlIE1NSU8gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuDQo+ID4gKyBU aGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgIGFsbCBNTUlPIHJlYWQgYW5kIHdyaXRl IG9wZXJhdGlvbnMNCj4gYXJlIHNlcmlhbGl6ZWQuDQo+ID4gKw0KPiA+ICsgIElmIDY0LWJpdCBN TUlPIHJlZ2lzdGVyIG9wZXJhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQsIHRoZW4gQVNTRVJUKCku DQo+ID4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDY0LWJpdCBib3VuZGFyeSwg dGhlbiBBU1NFUlQoKS4NCj4gPiArDQo+ID4gKyAgQHBhcmFtICBBZGRyZXNzIFRoZSBNTUlPIHJl Z2lzdGVyIHRvIHdyaXRlLg0KPiA+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Ig d2l0aCB0aGUgcmVhZCB2YWx1ZSBmcm9tIHRoZSBNTUlPDQo+IHJlZ2lzdGVyLg0KPiA+ICsNCj4g PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIE1NSU8gcmVnaXN0ZXIu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVUlOVDY0DQo+ID4gK0VGSUFQSQ0KPiA+ICtTd2FwTW1p b09yNjQgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNz LA0KPiA+ICsgIElOICAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4gPiAr ICApDQo+ID4gK3sNCj4gPiArICBVSU5UNjQgVmFsdWU7DQo+ID4gKw0KPiA+ICsgIFZhbHVlID0g U3dhcE1taW9SZWFkNjQgKEFkZHJlc3MpOw0KPiA+ICsgIFZhbHVlIHw9IE9yRGF0YTsNCj4gPiAr DQo+ID4gKyAgcmV0dXJuIFN3YXBNbWlvV3JpdGU2NCAoQWRkcmVzcywgVmFsdWUpOyB9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBSZWFkcyBhIDY0LWJpdCBNTUlPIHJlZ2lzdGVyLCBwZXJmb3Jt cyBhIGJpdHdpc2UgQU5ELCBhbmQgd3JpdGVzDQo+ID4gK3RoZSByZXN1bHQNCj4gPiArICBiYWNr IHRvIHRoZSA2NC1iaXQgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyAgUmVhZHMgdGhlIDY0 LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhDQo+ID4g KyBiaXR3aXNlIEFORCAgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkNCj4gPiArIEFuZERhdGEsIGFuZCB3cml0ZXMgdGhlICByZXN1bHQgdG8gdGhlIDY0 LWJpdCBNTUlPIHJlZ2lzdGVyDQo+ID4gKyBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlIHZhbHVl IHdyaXR0ZW4gdG8gIHRoZSBNTUlPIHJlZ2lzdGVyIGlzDQo+ID4gKyByZXR1cm5lZC4gVGhpcyBm dW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBNTUlPICByZWFkIGFuZCB3cml0ZQ0KPiBv cGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiArICBJZiA2NC1iaXQgTU1JTyBy ZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVuIEFTU0VSVCgpLg0KPiA+ ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQgYm91bmRhcnksIHRoZW4g QVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBUaGUgTU1JTyByZWdpc3Rl ciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIEFuZERhdGEgVGhlIHZhbHVlIHRvIEFORCB3aXRo IHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIuDQo+ID4gKw0KPiA+ICsg IEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4g PiArDQo+ID4gKyoqLw0KPiA+ICtVSU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBNbWlvQW5k NjQgKA0KPiA+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0K PiA+ICsgIElOICAgICAgVUlOVDY0ICAgICAgICAgICAgICAgICAgICBBbmREYXRhDQo+ID4gKyAg KQ0KPiA+ICt7DQo+ID4gKyAgVUlOVDY0IFZhbHVlOw0KPiA+ICsNCj4gPiArICBWYWx1ZSA9IFN3 YXBNbWlvUmVhZDY0IChBZGRyZXNzKTsNCj4gPiArICBWYWx1ZSAmPSBBbmREYXRhOw0KPiA+ICsN Cj4gPiArICByZXR1cm4gU3dhcE1taW9Xcml0ZTY0IChBZGRyZXNzLCBWYWx1ZSk7IH0NCj4gPiAr DQo+ID4gKy8qKg0KPiA+ICsgIFJlYWRzIGEgNjQtYml0IE1NSU8gcmVnaXN0ZXIsIHBlcmZvcm1z IGEgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYQ0KPiA+ICtiaXR3aXNlDQo+ID4gKyAgT1IsIGFu ZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSA2NC1iaXQgTU1JTyByZWdpc3Rlci4NCj4g PiArDQo+ID4gKyAgUmVhZHMgdGhlIDY0LWJpdCBNTUlPIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBB ZGRyZXNzLCBwZXJmb3JtcyBhDQo+ID4gKyBiaXR3aXNlIEFORCAgYmV0d2VlbiB0aGUgcmVhZCBy ZXN1bHQgYW5kIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkNCj4gPiArIEFuZERhdGEsIHBlcmZvcm1z IGEgIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVzdWx0IG9mIHRoZSBBTkQNCj4gPiArIG9wZXJh dGlvbiBhbmQgdGhlIHZhbHVlIHNwZWNpZmllZCBieSAgT3JEYXRhLCBhbmQgd3JpdGVzIHRoZSBy ZXN1bHQNCj4gPiArIHRvIHRoZSA2NC1iaXQgTU1JTyByZWdpc3RlciBzcGVjaWZpZWQgYnkgIEFk ZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuDQo+ID4gKyB0byB0aGUgTU1JTyByZWdpc3RlciBpcyBy ZXR1cm5lZC4gVGhpcyBmdW5jdGlvbiAgbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwNCj4gTU1JTyBy ZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zIGFyZSBzZXJpYWxpemVkLg0KPiA+ICsNCj4gPiArICBJ ZiA2NC1iaXQgTU1JTyByZWdpc3RlciBvcGVyYXRpb25zIGFyZSBub3Qgc3VwcG9ydGVkLCB0aGVu IEFTU0VSVCgpLg0KPiA+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSA2NC1iaXQg Ym91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbSAgQWRkcmVzcyBU aGUgTU1JTyByZWdpc3RlciB0byB3cml0ZS4NCj4gPiArICBAcGFyYW0gIEFuZERhdGEgVGhlIHZh bHVlIHRvIEFORCB3aXRoIHRoZSByZWFkIHZhbHVlIGZyb20gdGhlIE1NSU8NCj4gcmVnaXN0ZXIu DQo+ID4gKyAgQHBhcmFtICBPckRhdGEgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSByZXN1bHQg b2YgdGhlIEFORCBvcGVyYXRpb24uDQo+ID4gKw0KPiA+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdy aXR0ZW4gYmFjayB0byB0aGUgTU1JTyByZWdpc3Rlci4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtV SU5UNjQNCj4gPiArRUZJQVBJDQo+ID4gK1N3YXBNbWlvQW5kVGhlbk9yNjQgKA0KPiA+ICsgIElO ICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiA+ICsgIElOICAgICAg VUlOVDY0ICAgICAgICAgICAgICAgICAgICBBbmREYXRhLA0KPiA+ICsgIElOICAgICAgVUlOVDY0 ICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBVSU5U NjQgVmFsdWU7DQo+ID4gKw0KPiA+ICsgIFZhbHVlID0gU3dhcE1taW9SZWFkNjQgKEFkZHJlc3Mp Ow0KPiA+ICsgIFZhbHVlICY9IEFuZERhdGE7DQo+ID4gKyAgVmFsdWUgfD0gT3JEYXRhOw0KPiA+ ICsNCj4gPiArICByZXR1cm4gU3dhcE1taW9Xcml0ZTY0IChBZGRyZXNzLCBWYWx1ZSk7IH0NCj4g PiBkaWZmIC0tZ2l0IGEvTWRlUGtnL01kZVBrZy5kZWMgYi9NZGVQa2cvTWRlUGtnLmRlYyBpbmRl eA0KPiA+IDBlNjRmMjJmNGEuLjk4MDE2ZjQ3ZTkgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlUGtnL01k ZVBrZy5kZWMNCj4gPiArKysgYi9NZGVQa2cvTWRlUGtnLmRlYw0KPiA+IEBAIC0xNjAsNiArMTYw LDkgQEAgW0xpYnJhcnlDbGFzc2VzXQ0KPiA+ICAgICMjICBAbGlicmFyeWNsYXNzICBQcm92aWRl IHNlcnZpY2VzIHRvIGFjY2VzcyBJL08gUG9ydHMgYW5kIE1NSU8NCj4gcmVnaXN0ZXJzLg0KPiA+ ICAgIElvTGlifEluY2x1ZGUvTGlicmFyeS9Jb0xpYi5oDQo+ID4NCj4gPiArICAjIyAgQGxpYnJh cnljbGFzcyAgUHJvdmlkZSBieXRlLXN3YXBwaW5nIHNlcnZpY2VzIHRvIGFjY2VzcyBNTUlPDQo+ IHJlZ2lzdGVycy4NCj4gPiArICBJb0xpYlN3YXB8SW5jbHVkZS9MaWJyYXJ5L0lvTGliU3dhcC5o DQo+ID4gKw0KPiA+ICAgICMjICBAbGlicmFyeWNsYXNzICBQcm92aWRlIHNlcnZpY2VzIHRvIGNy ZWF0ZSwgZ2V0IGFuZCB1cGRhdGUgSFNUSSB0YWJsZSBpbg0KPiBBSVAgcHJvdG9jb2wuDQo+ID4g ICAgSHN0aUxpYnxJbmNsdWRlL0xpYnJhcnkvSHN0aUxpYi5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0 IGEvTWRlUGtnL01kZVBrZy5kc2MgYi9NZGVQa2cvTWRlUGtnLmRzYyBpbmRleA0KPiA+IDYwZWZk NzIyZTkuLmEyZjI2OTYzOTQgMTAwNjQ0DQo+ID4gLS0tIGEvTWRlUGtnL01kZVBrZy5kc2MNCj4g PiArKysgYi9NZGVQa2cvTWRlUGtnLmRzYw0KPiA+IEBAIC02MCw2ICs2MCw3IEBAIFtDb21wb25l bnRzXQ0KPiA+ICAgIE1kZVBrZy9MaWJyYXJ5L0Jhc2VEZWJ1Z0xpYk51bGwvQmFzZURlYnVnTGli TnVsbC5pbmYNCj4gPiAgICBNZGVQa2cvTGlicmFyeS9CYXNlRGVidWdMaWJTZXJpYWxQb3J0L0Jh c2VEZWJ1Z0xpYlNlcmlhbFBvcnQuaW5mDQo+ID4NCj4gPiBNZGVQa2cvTGlicmFyeS9CYXNlRGVi dWdQcmludEVycm9yTGV2ZWxMaWIvQmFzZURlYnVnUHJpbnRFcnJvckxldmVsTGliDQo+ID4gLmlu Zg0KPiA+ICsgIE1kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYlN3YXAvQmFzZUlvTGliU3dhcC5pbmYN Cj4gPiAgICBNZGVQa2cvTGlicmFyeS9CYXNlTGliL0Jhc2VMaWIuaW5mDQo+ID4gICAgTWRlUGtn L0xpYnJhcnkvQmFzZU1lbW9yeUxpYi9CYXNlTWVtb3J5TGliLmluZg0KPiA+DQo+ID4NCj4gTWRl UGtnL0xpYnJhcnkvQmFzZU9yZGVyZWRDb2xsZWN0aW9uUmVkQmxhY2tUcmVlTGliL0Jhc2VPcmRl cmVkQ29sbGVjdA0KPiA+IGlvblJlZEJsYWNrVHJlZUxpYi5pbmYNCj4gPiAtLQ0KPiA+IDIuMTEu MA0KPiA+DQo=