From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.3.55; helo=eur03-am5-obe.outbound.protection.outlook.com; envelope-from=meenakshi.aggarwal@nxp.com; receiver=edk2-devel@lists.01.org Received: from EUR03-AM5-obe.outbound.protection.outlook.com (mail-eopbgr30055.outbound.protection.outlook.com [40.107.3.55]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 4C06F21A10960 for ; Wed, 29 Nov 2017 20:11:20 -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=+lmnh6AyNYAwxa1NYxJ/edj2z+fxwPKtgYmSKEiDjts=; b=LG+jjM7T8nkkVTvKjDI6yQv7SAVzqn7KFeKVpgKsWJKTPzux9YVEB+mg7kE/tR5smAROC+xTcBLekDGj1Z4ypB8GHsjPKxTH/LRVmOLVMhN2vrGnE4Cdm4KcRWCa6vW8TIGmQGQIKXUNF3qJHPaBOBgbi5nENs2fnKkqZrszD3A= Received: from DB5PR04MB0998.eurprd04.prod.outlook.com (10.161.199.12) by DB5PR04MB0997.eurprd04.prod.outlook.com (10.161.199.11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.260.4; Thu, 30 Nov 2017 04:15:39 +0000 Received: from DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::1d9f:72df:a04f:ddb6]) by DB5PR04MB0998.eurprd04.prod.outlook.com ([fe80::1d9f:72df:a04f:ddb6%17]) with mapi id 15.20.0260.006; Thu, 30 Nov 2017 04:15:39 +0000 From: Meenakshi Aggarwal To: Leif Lindholm , "Kinney, Michael D" CC: "Gao, Liming" , "edk2-devel@lists.01.org" , Ard Biesheuvel Thread-Topic: [edk2] [PATCH 1/1] MdePkg/IoLib: Add support for big-endian MMIO Thread-Index: AQHSJf8g4WbKjSWeTUGVohhhcxe8iqCr++gAgAAQ+YCAADsgAIAAJeEAgjcV3KCABIjHYIAAVAOQgEHVTuCAA5+mAIAAbgqAgAAGkgCAAIrCwA== Date: Thu, 30 Nov 2017 04:15:38 +0000 Message-ID: References: <4A89E2EF3DFEDB4C8BFDE51014F606A14B49505E@shsmsx102.ccr.corp.intel.com> <4A89E2EF3DFEDB4C8BFDE51014F606A14E16B65D@SHSMSX104.ccr.corp.intel.com> <20171129125114.i3y446ds4qrkohxl@bivouac.eciton.net> <20171129194836.dqsbtbqi5budvppl@bivouac.eciton.net> In-Reply-To: <20171129194836.dqsbtbqi5budvppl@bivouac.eciton.net> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=meenakshi.aggarwal@nxp.com; x-originating-ip: [192.88.169.1] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; DB5PR04MB0997; 6:xE4SR7MwqZ3XU6hQ2FlZ+X9YrlUTw2vmx2Cca2sjrS6ZifPUN40LWdwYUO4QtSaD2M1iQkysmpPQ4ZtSTPQ3Sc8xJhnDVws7URfEi7U/NSjio8sbD0knalPsHpnbSBPFVqQdMolg6EEzCBMGG1/vOfiL+zSwc3hJ/Kn8Jt1Av67sKF8I/sgx9v0X9iamfOa0irZyrokTsJEvNRWNoe4XcHJ7e3BysMALAE3y2yX9+d+XM6oCydhBMLYrMUncyJ4vwWYv8j74rmYNk6LsgQmC8ponadQag6xlEdBBHKjkb3Zt9TQY+iKo6EEYgENNa6HR9kfhOBDwTugLo3qwpcDg2N/jT9utajnJvgep6HhpitU=; 5:vLL4xdJ58G04u6OuPZVQbWfUSu93D/k3A6vu4N/g3Y0Nun2+JC9Xc4EYtrTegEWxCCT+hh3A5LYdEkIFUrc5MKua88YhIo/JRcpy/D/0PZ2Ar4pmasrhRjfIgZpcGLUHbpoozrdhjnZ1rmdBOwZyM5YrFepatGXq6l0aQx67FCU=; 24:2BaCmAzHsjLRuj3qiURlDTWaN4Q7CS2q13DxPmCGKP5TnXEgnN5JbAtYfkeG8KVSFl5c01amUKeCyK5ntmBAXWMsYb3otqgdFK/EMXaJRvQ=; 7:jDU6WDBZ9VbETkZvVT7ucbk/INzAanVHHOOBqAp69ZO39D9PQGGFNlVokGGpEI6gSNPckC+Hw6cwuFEm3sPafOIB5mXWhY9bDnan8jCLSsC4XeT3IedCS260MpeW1OOgPsiYAS8e8/7vVZmHN89XNFYthBPqXztIYS+Cty7Rp3ZjBw6y8b5CpnJs/QZI1s5OerSp2MFvjr0krkxEe+FYIFPfOOz2H60w8PZ5O2ZJoRmCGg5mOQCqE/d0ATgjPcKs x-ms-exchange-antispam-srfa-diagnostics: SSOS; x-ms-office365-filtering-correlation-id: a8f834d6-9f12-4672-c846-08d537a9037d x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(5600026)(4604075)(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(2017052603199); SRVR:DB5PR04MB0997; x-ms-traffictypediagnostic: DB5PR04MB0997: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(189930954265078)(185117386973197)(162533806227266)(45079756050767)(228905959029699); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(5005006)(8121501046)(3002001)(93006095)(93001095)(3231022)(10201501046)(6055026)(6041248)(20161123558100)(20161123564025)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(6072148)(201708071742011); SRVR:DB5PR04MB0997; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:DB5PR04MB0997; x-forefront-prvs: 05079D8470 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(6029001)(6009001)(39860400002)(346002)(366004)(376002)(24454002)(13464003)(199003)(53754006)(189002)(43544003)(478600001)(97736004)(54906003)(6306002)(2950100002)(9686003)(6246003)(7696005)(99286004)(8936002)(25786009)(53546010)(316002)(110136005)(53946003)(5660300001)(53936002)(50986010)(74316002)(76176010)(54356010)(4326008)(45080400002)(102836003)(6116002)(2900100001)(3846002)(189998001)(7736002)(5250100002)(86362001)(106356001)(81166006)(6436002)(8676002)(33656002)(305945005)(81156014)(68736007)(3280700002)(6506006)(105586002)(229853002)(66066001)(55016002)(3660700001)(101416001)(966005)(93886005)(2906002)(14454004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB5PR04MB0997; H:DB5PR04MB0998.eurprd04.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: a8f834d6-9f12-4672-c846-08d537a9037d X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Nov 2017 04:15:38.8650 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB5PR04MB0997 Subject: Re: [PATCH 1/1] MdePkg/IoLib: Add support for big-endian MMIO X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.22 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 30 Nov 2017 04:11:22 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTGVpZiwgTWlrZSwNCg0KDQpOWFAgYm9hcmRzLCBhdCBwcmVzZW50LCBoYXZlIGZldyBjb250 cm9sbGVycyB3aXRoIGJpZyBlbmRpYW4gYW5kIG90aGVyIHdpdGggbGl0dGxlIGVuZGlhbiBtZW1v cnkgYWNjZXNzLg0KDQpNYXhpbXVtIGNvbnRyb2xsZXJzIGRlcGVuZCBvbiBTb2NMaWIgbGlicmFy eSBmb3IgY2xvY2sgaW5mb3JtYXRpb24gYW5kIGVuZGlhbm5lc3MgZm9yIFNvY0xpYiBhbmQNCmNv bnRyb2xsZXJzIGlzIGRpZmZlcmVudC4NCg0KU28gdGhpcyBvcHRpb24gd2lsbCBub3Qgd29yayBm b3IgdXMsDQogIFlvdSB3b3VsZCB0aGVuIGp1c3QgZG8gKGluIHlvdXIgLmRzYyk6DQogIFBsYXRm b3JtL05YUC9Ecml2ZXJzL1dhdGNoRG9nL1dhdGNoRG9nRHhlLmluZiB7DQogICAgICBJb0xpYnw8 cGF0aCB0byBCZUlvTGliIC5pbmY+DQogIH0NCg0KQmVjYXVzZSBhbGwgbGlicmFyaWVzIGluY2x1 ZGVkIGJ5IFdhdGNoRG9nIHdpbGwgdGhlbiBhY2Nlc3MgQkUgbW9kZSBNbWlvIEFQSXMuDQoNCg0K QW5kIGJyZWFraW5nIGNvZGUgaW50byBzZXBhcmF0ZSBtb2R1bGVzIHdpdGggZGlmZmVyZW50IGFj Y2VzcyB3aWxsIGJlIHZlcnkgZGlmZmljdWx0Lg0KV2F0Y2hkb2cgaXMgbm90IHRoZSBvbmx5IG1v ZHVsZSB3aGljaCBuZWVkIEJFIE1taW8gQVBJcywgd2UgaGF2ZSBNTUMgYW5kIG90aGVyIGNvbnRy b2xsZXJzIGFsc28gd2l0aCBzYW1lIHJlcXVpcmVtZW50Lg0KDQpXZSBuZWVkIEJFIE1taW8gQVBJ cyB3aXRoIGEgZGlmZmVyZW50IG5hbWUuDQoNClBsZWFzZSBzZWUgdGhlIHBvc3NpYmlsaXR5Lg0K DQoNClRoYW5rcyAmIFJlZ2FyZHMsDQpNZWVuYWtzaGkNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3Nh Z2UtLS0tLQ0KPiBGcm9tOiBMZWlmIExpbmRob2xtIFttYWlsdG86bGVpZi5saW5kaG9sbUBsaW5h cm8ub3JnXQ0KPiBTZW50OiBUaHVyc2RheSwgTm92ZW1iZXIgMzAsIDIwMTcgMToxOSBBTQ0KPiBU bzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiBDYzog TWVlbmFrc2hpIEFnZ2Fyd2FsIDxtZWVuYWtzaGkuYWdnYXJ3YWxAbnhwLmNvbT47IEdhbywgTGlt aW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IGVkazItZGV2ZWxAbGlzdHMuMDEub3JnOyBB cmQgQmllc2hldXZlbA0KPiA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4NCj4gU3ViamVjdDog UmU6IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFkZCBzdXBwb3J0IGZvciBiaWct ZW5kaWFuDQo+IE1NSU8NCj4gDQo+IEkgZ3Vlc3MgdGhlcmUgaXMgbm8gc3RyaWN0IHJ1bGUgYWJv dXQgYSBkcml2ZXIgb25seSBkaXJlY3RseSBhY2Nlc3NpbmcNCj4gb25lIHBpZWNlIG9mIEhXPw0K PiANCj4gU3RpbGwsIHRoYXQgd291bGQgYmUgb25lIHBvc3NpYmxlIHNvbHV0aW9uOiBicmVha2lu ZyBhY2Nlc3NlcyB0byBhDQo+IHNlcGFyYXRlIEhXIGluIG5lZWQgb2YgYnl0ZXN3YXBwaW5nIG91 dCBpbnRvIGl0cyBvd24gbW9kdWxlIGFuZA0KPiBsZXR0aW5nIGl0IG92ZXJyaWRlIElvTGliIHZl cnNpb24gdGhlcmUuDQo+IA0KPiBSZWdhcmRzLA0KPiANCj4gTGVpZg0KPiANCj4gT24gV2VkLCBO b3YgMjksIDIwMTcgYXQgMDc6MjU6MDVQTSArMDAwMCwgS2lubmV5LCBNaWNoYWVsIEQgd3JvdGU6 DQo+ID4gTGVpZiwNCj4gPg0KPiA+IEkgYWdyZWUgdGhhdCB0aGlzIHNob3VsZCBiZSBkZXNjcmli ZWQgYXMgYnl0ZSBzd2FwcGluZy4NCj4gPg0KPiA+IFdoYXQgYWJvdXQgYSBtb2R1bGUgdGhhdCBu ZWVkcyB0byBhY2Nlc3MgSFcgd2l0aCBhbmQNCj4gPiB3aXRob3V0IHRoZSBieXRlcyBzd2FwcGVk PyAgSXQgZ2V0cyBtb3JlIGNvbXBsZXggaWYgYQ0KPiA+IG1vZHVsZSBpcyBsaW5rZWQgYWdhaW5z dCBzZXZlcmFsIGxpYnMgYW5kIHNvbWUgbGlicw0KPiA+IGFjY2VzcyBIVyB3aXRoIGJ5dGVzIHN3 YXBwZWQgYW5kIHNvbWUgZG8gbm90Lg0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+DQo+ID4gTWlrZQ0K PiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJvbTogZWRrMi1k ZXZlbCBbbWFpbHRvOmVkazItZGV2ZWwtDQo+ID4gPiBib3VuY2VzQGxpc3RzLjAxLm9yZ10gT24g QmVoYWxmIE9mIExlaWYgTGluZGhvbG0NCj4gPiA+IFNlbnQ6IFdlZG5lc2RheSwgTm92ZW1iZXIg MjksIDIwMTcgNDo1MSBBTQ0KPiA+ID4gVG86IE1lZW5ha3NoaSBBZ2dhcndhbCA8bWVlbmFrc2hp LmFnZ2Fyd2FsQG54cC5jb20+Ow0KPiA+ID4gR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwu Y29tPg0KPiA+ID4gQ2M6IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVs LmNvbT47DQo+ID4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgQXJkIEJpZXNoZXV2ZWwNCj4g PiA+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPg0KPiA+ID4gU3ViamVjdDogUmU6IFtlZGsy XSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFkZA0KPiA+ID4gc3VwcG9ydCBmb3IgYmlnLWVu ZGlhbiBNTUlPDQo+ID4gPg0KPiA+ID4gSGkgTWVlbmFrc2hpLA0KPiA+ID4NCj4gPiA+IEkgZmlu YWxseSBnb3QgYXJvdW5kIHRvIGxvb2tpbmcgYXQgdGhlIHdhdGNoZG9nIGNvZGUNCj4gPiA+ICh0 aGF0IHVzZXMgdGhpcw0KPiA+ID4gbGlicmFyeSksIGFuZCB0aGF0IGhhcyBjb252aW5jZWQgbWUg dGhlIGJlc3Qgc29sdXRpb24NCj4gPiA+IGlzIHRvIGRvIHdoYXQNCj4gPiA+IExpbWluZyBwcm9w b3NlZC4NCj4gPiA+DQo+ID4gPiBMb29raW5nIGF0IHRoaXMgc25pcHBldDoNCj4gPiA+DQo+ID4g PiA+ICtTVEFUSUMNCj4gPiA+ID4gK1VJTlQxNg0KPiA+ID4gPiArRUZJQVBJDQo+ID4gPiA+ICtX ZG9nUmVhZCAoDQo+ID4gPiA+ICsgwqBJTiDCoFVJTlROIMKgIMKgIEFkZHJlc3MNCj4gPiA+ID4g KyDCoCkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKyDCoGlmIChGaXhlZFBjZEdldEJvb2wgKFBjZFdk b2dCaWdFbmRpYW4pKSB7DQo+ID4gPiA+ICsgwqAgwqByZXR1cm4gQmVNbWlvUmVhZDE2IChBZGRy ZXNzKTsNCj4gPiA+ID4gKyDCoH0gZWxzZSB7DQo+ID4gPiA+ICsgwqAgwqByZXR1cm4gTW1pb1Jl YWQxNihBZGRyZXNzKTsNCj4gPiA+ID4gKyDCoH0NCj4gPiA+DQo+ID4gPiBUaGlzIGlzIGFjdHVh bGx5IGEgcHJldHR5IGdvb2QgZGVtb25zdHJhdGlvbiBvZiB0aGUNCj4gPiA+IGFyZ3VtZW50cyB0 aGF0DQo+ID4gPiB3ZXJlIG1hZGUgd2l0aCByZWdhcmRzIHRvIGhvdyB0aGUgQmVJb0xpYiBjb3Vs ZCBiZSBqdXN0DQo+ID4gPiBhbm90aGVyDQo+ID4gPiBpbXBsZW1lbnRhdGlvbiBvZiBJb0xpYi4N Cj4gPiA+DQo+ID4gPiBZb3Ugd291bGQgdGhlbiBqdXN0IGRvIChpbiB5b3VyIC5kc2MpOg0KPiA+ ID4gwqAgUGxhdGZvcm0vTlhQL0RyaXZlcnMvV2F0Y2hEb2cvV2F0Y2hEb2dEeGUuaW5mIHsNCj4g PiA+IMKgIMKgIElvTGlifDxwYXRoIHRvIEJlSW9MaWIgLmluZj4NCj4gPiA+IMKgIH0NCj4gPiA+ DQo+ID4gPiBUaGlzIGNhdXNlcyB0aGUgYmlnLWVuZGlhbiB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5 IHRvIGJlDQo+ID4gPiB1c2VkIGZvciB0aGlzDQo+ID4gPiBjb21wb25lbnQuIFRoaXMgbWFrZXMg dGhlc2UgV2RvZzxhY2Nlc3M+IGZ1bmN0aW9ucyBhbmQNCj4gPiA+IHRoZSBQY2QNCj4gPiA+IHJl ZHVuZGFudCwgYW5kIHRoZSByZXN0IG9mIHRoZSBjb2RlIGNhbiB1c2UNCj4gPiA+IE1taW9SZWFk MTYoKS9NbWlvV3JpdGUxNigpDQo+ID4gPiBkaXJlY3RseS4NCj4gPiA+DQo+ID4gPiBCdXQgdGhl biwgaXQgaXMgbm90IHJlYWxseSBhIGJpZy1lbmRpYW4gb3IgbGl0dGUtZW5kaWFuDQo+ID4gPiB2 ZXJzaW9uIG9mIHRoZQ0KPiA+ID4gbGlicmFyeSB3ZSBuZWVkLiBXZSBhbHdheXMga25vdyB3aGlj aCBlbmRpYW5uZXNzIHdlIGFyZQ0KPiA+ID4gYnVpbGRpbmcgZm9yLg0KPiA+ID4gV2hhdCB3ZSBu ZWVkIGlzIGEgYnl0ZXN3YXBwaW5nIGZsYXZvdXIgb2YgSW9MaWIuDQo+ID4gPg0KPiA+ID4gU28g TGltaW5nLCB3aGF0IGlmIHdlIGRvIHNvbWV0aGluZyBsaWtlIGFkZGluZyBhDQo+ID4gPiBNZGVQ a2cvTGlicmFyeS9CYXNlSW9MaWJJbnRyaW5zaWMvQmFzZUlvTGliSW50cmluc2ljU3dhDQo+ID4g PiBwLmluZg0KPiA+ID4gLS0tDQo+ID4gPiBbRGVmaW5lc10NCj4gPiA+ICAgSU5GX1ZFUlNJT04g ICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxQQ0KPiA+ID4gICBCQVNFX05BTUUgICAgICAg ICAgICAgICAgICAgICAgPQ0KPiA+ID4gQmFzZUlvTGliSW50cmluc2ljU3dhcA0KPiA+ID4gICBN T0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPQ0KPiA+ID4gQmFzZUlvTGliSW50cmluc2lj LnVuaQ0KPiA+ID4gICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICAgICAgPSBkNGE2MGQ0NC0z Njg4LTRhNTAtDQo+ID4gPiBiMmQwLTVjNmZjMjQyMjUyMw0KPiA+ID4gICBNT0RVTEVfVFlQRSAg ICAgICAgICAgICAgICAgICAgPSBCQVNFDQo+ID4gPiAgIFZFUlNJT05fU1RSSU5HICAgICAgICAg ICAgICAgICA9IDEuMA0KPiA+ID4gICBMSUJSQVJZX0NMQVNTICAgICAgICAgICAgICAgICAgPSBJ b0xpYg0KPiA+ID4NCj4gPiA+DQo+ID4gPiAjDQo+ID4gPiAjICBWQUxJRF9BUkNISVRFQ1RVUkVT ICAgICAgICAgICA9IElBMzIgWDY0IEVCQyBJUEYgQVJNDQo+ID4gPiBBQVJDSDY0DQo+ID4gPiAj DQo+ID4gPg0KPiA+ID4gW1NvdXJjZXNdDQo+ID4gPiAgIEJhc2VJb0xpYkludHJpbnNpY0ludGVy bmFsLmgNCj4gPiA+ICAgSW9IaWdoTGV2ZWwuYw0KPiA+ID4gICBJb0xpYi5jDQo+ID4gPiAgIElv TGliRWJjLmMgICAgICAgICAjIEFzc2VydHMgb24gYWxsIGkvbyBwb3J0IGFjY2Vzc2VzDQo+ID4g PiAgIElvTGliTW1pb0J1ZmZlci5jDQo+ID4gPg0KPiA+ID4gW1BhY2thZ2VzXQ0KPiA+ID4gICBN ZGVQa2cvTWRlUGtnLmRlYw0KPiA+ID4NCj4gPiA+IFtMaWJyYXJ5Q2xhc3Nlc10NCj4gPiA+ICAg RGVidWdMaWINCj4gPiA+ICAgQmFzZUxpYg0KPiA+ID4NCj4gPiA+IFtCdWlsZE9wdGlvbnNdDQo+ ID4gPiAgIEdDQzoqXypfKl9DQ19GTEFHUyAgPSAtRFNXQVBfQllURVMNCj4gPiA+IC0tLQ0KPiA+ ID4NCj4gPiA+IEFuZCB0aGVuIGFkZA0KPiA+ID4NCj4gPiA+ICNpZmRlZiBTV0FQX0JZVEVTDQo+ ID4gPiAgIHJldHVybiBTd2FwQnl0ZXNYWCAoVmFsdWUpOw0KPiA+ID4gI2Vsc2UNCj4gPiA+ICAg cmV0dXJuIFZhbHVlOw0KPiA+ID4gI2ZpDQo+ID4gPg0KPiA+ID4gZm9yIHRoZSByZWFkIG9wZXJh dGlvbnMgYW5kDQo+ID4gPg0KPiA+ID4gI2lmZGVmIFNXQVBfQllURVMNCj4gPiA+ICAgKih0eXBl KUFkZHJlc3MgPSBTd2FwQnl0ZXNYWCAoVmFsdWUpOw0KPiA+ID4gI2Vsc2UNCj4gPiA+ICAgKih0 eXBlKUFkZHJlc3MgPSBWYWx1ZTsNCj4gPiA+ICNmaQ0KPiA+ID4NCj4gPiA+IGZvciB0aGUgd3Jp dGUgb3BlcmF0aW9ucyBpbiBJb0xpYi5jPw0KPiA+ID4NCj4gPiA+IC8NCj4gPiA+ICAgICBMZWlm DQo+ID4gPg0KPiA+ID4gT24gTW9uLCBOb3YgMjcsIDIwMTcgYXQgMDY6MDY6MzNBTSArMDAwMCwg TWVlbmFrc2hpDQo+ID4gPiBBZ2dhcndhbCB3cm90ZToNCj4gPiA+ID4gSGkgTGVpZiwNCj4gPiA+ ID4NCj4gPiA+ID4gVGhpcyBpcyByZWdhcmRpbmcgQmlnLUVuZGlhbiBMaWJyYXJ5IHBhdGNoIChb UEFUQ0ggdjINCj4gPiA+IDEvOV0NCj4gPiA+ID4gUGxhdGZvcm0vTlhQOiBBZGQgc3VwcG9ydCBm b3IgQmlnIEVuZGlhbiBNbWlvIEFQSXMpDQo+ID4gPiA+DQo+ID4gPiA+IFdlIGhhdmUgc3RhcnRl ZCB0aGlzIGRpc2N1c3Npb24gYmVmb3JlIGFuZCB0aGUNCj4gPiA+IHN1Z2dlc3Rpb24gd2FzIHRv DQo+ID4gPiA+IGNyZWF0ZSBhIHNlcGFyYXRlIC5pbmYgZmlsZSBrZWVwaW5nIEFQSXMgbmFtZSBz YW1lDQo+ID4gPiA+IGUuZy4gTW1pb1JlYWQvTW1pb1dyaXRlIGluIE1kZVBrZy4NCj4gPiA+ID4N Cj4gPiA+ID4gQnV0IHdlIGNhbid0IGdvIHdpdGggdGhpcyBhcHByb2FjaCAocmVhc29uIG1lbnRp b25lZA0KPiA+ID4gYnkgVWRpdCkuDQo+ID4gPiA+DQo+ID4gPiA+IFNvIHBsZWFzZSBzdWdnZXN0 IGlmIHdlIHNob3VsZCBrZWVwIHRoaXMgbGlicmFyeQ0KPiA+ID4gdW5kZXIgUGxhdGZvcm0vTlhQ DQo+ID4gPiA+IG9yIEkgc2VuZCBhIG5ldyBwYXRjaCBtb3ZpbmcgdGhpcyBsaWJyYXJ5IGluIE1k ZVBrZy4NCj4gPiA+ID4NCj4gPiA+ID4gQnV0IHdlIGhhdmUgdG8ga2VlcCBhIGRpZmZlcmVudCBu YW1lIGZvciBCaWcgRW5kaWFuDQo+ID4gPiBNTUlPIEFQSXMuDQo+ID4gPiA+DQo+ID4gPiA+DQo+ ID4gPiA+IFRoYW5rcywNCj4gPiA+ID4gTWVlbmFrc2hpDQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4g PiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBVZGl0IEt1 bWFyDQo+ID4gPiA+ID4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDIzLCAyMDE3IDEyOjM4IFBNDQo+ ID4gPiA+ID4gVG86IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IE1lZW5ha3No aQ0KPiA+ID4gQWdnYXJ3YWwNCj4gPiA+ID4gPiA8bWVlbmFrc2hpLmFnZ2Fyd2FsQG54cC5jb20+ OyBBcmQgQmllc2hldXZlbA0KPiA+ID4gPiA+IDxhcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnPjsg S2lubmV5LCBNaWNoYWVsIEQNCj4gPiA+ID4gPiA8bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+ OyBlZGsyLQ0KPiA+ID4gZGV2ZWxAbGlzdHMuMDEub3JnDQo+ID4gPiA+ID4gU3ViamVjdDogUkU6 IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFkZA0KPiA+ID4gc3VwcG9ydCBmb3Ig YmlnLWVuZGlhbg0KPiA+ID4gPiA+IE1NSU8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEhpIE1lZW5h a3NoaS9MaW1pbmcsDQo+ID4gPiA+ID4gTXkgMiBjZW50cywgYXJvdW5kIHRoaXMuDQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiAxKQ0KPiA+ID4gPiA+IEhhdmluZyBhIG5ldyBsaWIgZm9yIEJFIHJlYWQg bWlnaHQgbm90IGJlIGhlbHBmdWwNCj4gPiA+IGZvciB1cywgZS5nLiBhIElQIHdoaWNoIGlzIGlu DQo+ID4gPiA+ID4gQkUgbW9kZSBhY2Nlc3MgdGhlIFVBUlQgZm9yIHByaW50IG9yIHN5c3RlbQ0K PiA+ID4gcmVnaXN0ZXJzIHdoaWNoIGFyZSBpbiBMRSwgdGhlbg0KPiA+ID4gPiA+IHdpdGggbmV3 IExpYiwgd2Ugd2lsbCBnZXQgYWxsIHJlYWQvd3JpdGUgaW4gQkUgbW9kZQ0KPiA+ID4gPiA+DQo+ ID4gPiA+ID4gMikNCj4gPiA+ID4gPiBFc3BlY2lhbGx5IGZvciBvdXIgSVBzLCB3aGljaCBhcmUg Y2hhbmdpbmcgZnJvbSBCRQ0KPiA+ID4gdG8gTEUgZGVwZW5kaW5nIG9uDQo+ID4gPiA+ID4gcGxh dGZvcm0uDQo+ID4gPiA+ID4gQXMgc2FpZCBiZWZvcmUsIGhhdmluZyBCRSByZWFkIGxpYiB3aXRo IEFQSSBuYW1lIG9mDQo+ID4gPiBNbWlvUmVhZDMyIGV0Yywgd2lsbCBub3QNCj4gPiA+ID4gPiBo ZWxwIChJIGd1ZXNzIE1lZW5ha3NoaSBhbHJlYWR5IHNlZW4gc29tZSBwcm9ibGVtcw0KPiA+ID4g YXJvdW5kIHRoaXMpIEFkZGluZyBhDQo+ID4gPiA+ID4gbmV3IGxpYiB3aXRoIE1taW9SZWFkMzJC RSBBUEkgbmFtZSBjb3VsZCBoZWxwLCBidXQNCj4gPiA+IElQIGRyaXZlciB3ZSBuZWVkIHRvDQo+ ID4gPiA+ID4gdGFrZSBjYXJlIG9mIElQIG1vZGUgZWl0aGVyIGJ5IFBjZCBvciAjZGVmaW5lLCB0 bw0KPiA+ID4gc2VsZWN0IE1taW9SZWFkMzIgb3INCj4gPiA+ID4gPiBNbWlvUmVhZDMyQkUuDQo+ ID4gPiA+ID4gVGhpcyBjb25kaXRpb25hbCBjb21waWxlIG5lZWRzIHRvIGJlIGRvbmUgZm9yIGFs bA0KPiA+ID4gSVBzICh3aGljaCB3b3JrcyBpbiBCRS9MRQ0KPiA+ID4gPiA+IG1vZGUgb24gZGlm ZmVyZW50IHBsYXRmb3JtcykuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBNeSBwcmVmZXJyZWQgd2F5 IG9mIGltcGxlbWVudGF0aW9uIHRvIHVzZSBvbmUNCj4gPiA+IGZ1bmN0aW9uIGluIElQIGRyaXZl ciwgQW5kDQo+ID4gPiA+ID4gYmFzZWQgb24gSVAgbW9kZSwgZG8gdGhlIHN3aXRjaC4NCj4gPiA+ ID4gPg0KPiA+ID4gPiA+IE5ldyBMaWIgY291bGQgaGF2ZSBmdW5jdGlvbiBsaWtlIGJlbG93DQo+ ID4gPiA+ID4gTW1pb1JlYWQzMkdlbmVyaWMoSU4gIFVJTlROICAgICBBZGRyZXNzLCBCT09MDQo+ ID4gPiBJc0lQQkUpIHsNCj4gPiA+ID4gPiAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgVmFsdWU7DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAgICBBU1NFUlQgKChBZGRyZXNzICYg MykgPT0gMCk7DQo+ID4gPiA+ID4gICAgVmFsdWUgPSAqKHZvbGF0aWxlIFVJTlQzMiopQWRkcmVz czsNCj4gPiA+ID4gPiAgICBJZihJc0lQQkUpDQo+ID4gPiA+ID4gICAgICBWYWx1ZSA9IFN3YXBC eXRlczMyKFZhbHVlKTsNCj4gPiA+ID4gPiAgcmV0dXJuICBWYWx1ZTsNCj4gPiA+ID4gPiB9DQo+ ID4gPiA+ID4NCj4gPiA+ID4gPiBBbmQgSVAgZHJpdmVyIGNhbiB1c2UgaXQNCj4gPiA+ID4gPiBN bWlvUmVhZDMyR2VuZXJpYyhBRERSLA0KPiA+ID4gPiA+IEZpeGVkUGNkR2V0KFRoaXNfSVBfTW9k ZV9Gb3JfVGhpc19wbGF0Zm9ybSkNCj4gPiA+ID4gPg0KPiA+ID4gPiA+IENvbW1lbnRzIGFyZSB3 ZWxjb21lLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gUmVnYXJkcw0KPiA+ID4gPiA+IFVkaXQNCj4g PiA+ID4gPg0KPiA+ID4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4g PiA+IEZyb206IGVkazItZGV2ZWwgW21haWx0bzplZGsyLWRldmVsLQ0KPiA+ID4gYm91bmNlc0Bs aXN0cy4wMS5vcmddIE9uIEJlaGFsZiBPZg0KPiA+ID4gPiA+ID4gR2FvLCBMaW1pbmcNCj4gPiA+ ID4gPiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxNiwgMjAxNyA4OjQ4IEFNDQo+ID4gPiA+ID4g PiBUbzogTWVlbmFrc2hpIEFnZ2Fyd2FsDQo+ID4gPiA8bWVlbmFrc2hpLmFnZ2Fyd2FsQG54cC5j b20+OyBBcmQgQmllc2hldXZlbA0KPiA+ID4gPiA+ID4gPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5v cmc+OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPiA+ID4gPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPjsgZWRrMi0NCj4gPiA+IGRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4gPiA+ID4gU3Vi amVjdDogUmU6IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6IEFkZA0KPiA+ID4gc3Vw cG9ydCBmb3INCj4gPiA+ID4gPiA+IGJpZy1lbmRpYW4gTU1JTw0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+IE1lZW5ha3NoaToNCj4gPiA+ID4gPiA+ICAgSSBzdWdnZXN0IHRvIGludHJvZHVjZSBu ZXcgSW9MaWIgbGlicmFyeQ0KPiA+ID4gaW5zdGFuY2UsIG5vdCB0byBhZGQgbmV3IElvTGliDQo+ ID4gPiA+ID4gQVBJcy4NCj4gPiA+ID4gPiA+IE5ldyBJb0xpYiBsaWJyYXJ5IGluc3RhbmNlIHdp bGwgcGVyZm9ybSBJTw0KPiA+ID4gb3BlcmF0aW9uIGFzIHRoZSBiaWcNCj4gPiA+ID4gPiA+IGVu ZGlhbi4gWW91IGNhbiB1cGRhdGUNCj4gPiA+IE1kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYkludHJp bnNpYyBpbnN0YW5jZSwgYWRkDQo+ID4gPiA+ID4gPiBuZXcgc291cmNlIGZpbGUgYW5kIG5ldyBJ TkYgZm9yIGl0Lg0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IFVJTlQzMg0KPiA+ID4gPiA+ID4g RUZJQVBJDQo+ID4gPiA+ID4gPiBNbWlvUmVhZDMyICgNCj4gPiA+ID4gPiA+ICAgSU4gIFVJTlRO ICAgICBBZGRyZXNzDQo+ID4gPiA+ID4gPiAgICkNCj4gPiA+ID4gPiA+IHsNCj4gPiA+ID4gPiA+ ICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbHVlOw0KPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ICAgQVNTRVJUICgoQWRkcmVzcyAmIDMpID09IDApOw0KPiA+ID4gPiA+ID4g ICBWYWx1ZSA9ICoodm9sYXRpbGUgVUlOVDMyKilBZGRyZXNzOw0KPiA+ID4gPiA+ID4gICByZXR1 cm4gU3dhcEJ5dGVzMzIoVmFsdWUpOw0KPiA+ID4gPiA+ID4gfQ0KPiA+ID4gPiA+ID4NCj4gPiA+ ID4gPiA+IFRoYW5rcw0KPiA+ID4gPiA+ID4gTGltaW5nDQo+ID4gPiA+ID4gPiA+LS0tLS1Pcmln aW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiA+ID5Gcm9tOiBNZWVuYWtzaGkgQWdnYXJ3YWwN Cj4gPiA+IFttYWlsdG86bWVlbmFrc2hpLmFnZ2Fyd2FsQG54cC5jb21dDQo+ID4gPiA+ID4gPiA+ U2VudDogRnJpZGF5LCBPY3RvYmVyIDEzLCAyMDE3IDI6MDcgUE0NCj4gPiA+ID4gPiA+ID5Ubzog QXJkIEJpZXNoZXV2ZWwgPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+Ow0KPiA+ID4gS2lubmV5 LCBNaWNoYWVsIEQNCj4gPiA+ID4gPiA+ID48bWljaGFlbC5kLmtpbm5leUBpbnRlbC5jb20+OyBl ZGsyLQ0KPiA+ID4gZGV2ZWxAbGlzdHMuMDEub3JnOyBHYW8sIExpbWluZw0KPiA+ID4gPiA+ID4g PjxsaW1pbmcuZ2FvQGludGVsLmNvbT4NCj4gPiA+ID4gPiA+ID5TdWJqZWN0OiBSRTogW2VkazJd IFtQQVRDSCAxLzFdIE1kZVBrZy9Jb0xpYjoNCj4gPiA+IEFkZCBzdXBwb3J0IGZvcg0KPiA+ID4g PiA+ID4gPmJpZy1lbmRpYW4gTU1JTw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPkhpIEFs bCwNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID5JdOKAmXMgYSBw cmV0dHkgb2xkIGRpc2N1c3Npb24sIHdlIGhhdmUgbGVmdCB0aGUNCj4gPiA+IHVwc3RyZWFtaW5n IG9mIE5YUA0KPiA+ID4gPiA+ID4gPnBhY2thZ2UgaW4gYmV0d2VlbiBiZWNhdXNlIG9mIHNvbWUg b3RoZXIgd29yaywNCj4gPiA+IGJ1dCBoYXZlIHN0YXJ0ZWQgaXQNCj4gPiA+ID4gPiA+ID5hZ2Fp bg0KPiA+ID4gPiA+ID4gbm93Lg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4g PiA+ID4gPklzc3VlICA6IEZldyBOWFAgbW9kdWxlcyBzdXBwb3J0IEJpZyBFbmRpYW4NCj4gPiA+ IE1NSU9zIGFzIHRoZXNlIGFyZSBwb3J0ZWQNCj4gPiA+ID4gPiA+ID5mcm9tIFBvd2VyUEMuDQo+ ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+U29sdXRpb24gc3VnZ2VzdGVkIDogQ3JlYXRlIGEg c2VwYXJhdGUgbGlicmFyeQ0KPiA+ID4gZm9yIEJFIE1NSU8gQVBJcy4NCj4gPiA+ID4gPiA+ID4N Cj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID5TbyB3aGF0IEkgaGF2ZSBkb25lIGlzLCBJIGhh dmUgY3JlYXRlZCBhDQo+ID4gPiBzZXBhcmF0ZSBsaWJyYXJ5IHRvIHN1cHBvcnQNCj4gPiA+ID4g PiA+ID5CRSBNTUlPIEFQSXMgYW5kIGN1cnJlbnRseSBrZWVwaW5nIGl0IHRvIG15DQo+ID4gPiBw YWNrYWdlLg0KPiA+ID4gPiA+ID4gPlRoaXMgbGlicmFyeSBpcyBiYXNpY2FsbHkgYSB3cmFwcGVy IG92ZXINCj4gPiA+IGV4aXN0aW5nIE1NSU8gQVBJcy4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4g PiA+ID5VSU5UMzINCj4gPiA+ID4gPiA+ID5FRklBUEkNCj4gPiA+ID4gPiA+ID5CZU1taW9SZWFk MzIgKA0KPiA+ID4gPiA+ID4gPiAgSU4gIFVJTlROICAgICBBZGRyZXNzDQo+ID4gPiA+ID4gPiA+ ICApDQo+ID4gPiA+ID4gPiA+ew0KPiA+ID4gPiA+ID4gPiAgVUlOVDMyICBWYWx1ZTsNCj4gPiA+ ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gIFZhbHVlID0gTW1pb1JlYWQzMihBZGRyZXNzKTsNCj4g PiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gIHJldHVybiBTd2FwQnl0ZXMzMihWYWx1ZSk7DQo+ ID4gPiA+ID4gPiA+fQ0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g Pk5lZWQgeW91ciBvcGluaW9uIG9uIGJlbG93IG9wdGlub3M6DQo+ID4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiA+MS4gV2lsbCB0aGlzIGJlIGEgZ29vZCBpZGVhIHRvIG1ha2UgdGhpcyBsaWJyYXJ5 DQo+ID4gPiBhIHBhcnQgb2YgTWRlUGtnPyBPUg0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4g PjIuIEFkZCBhIG5ldyBmaWxlIGUuZy4gSW9CZU1taW8uYyBsaWtlDQo+ID4gPiBJb0hpZ2hMZXZl bC5jIGluDQo+ID4gPiA+ID4gPiA+TWRlUGtnL0xpYnJhcnkvQmFzZUlvTGliSW50cmluc2ljLw0K PiA+ID4gPiA+ID4gPiBBbmQgbWFkZSB0aGVzZSBBUElzIGEgcGFydCBvZiBJb0xpYiBpdHNlbGYu IE9SDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+My4gS2VlcCB0aGlzIGxpYnJhcnkgaW50 ZXJuYWwgdG8gTlhQIHBhY2thZ2UuDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiA+UGxlYXNlIHByb3ZpZGUgeW91ciBpbnB1dHMuDQo+ID4gPiA+ID4gPiA+DQo+ID4g PiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+VGhhbmtzICYgUmVnYXJkcywNCj4gPiA+ID4gPiA+ID5N ZWVuYWtzaGkNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4+IC0tLS0tT3JpZ2luYWwgTWVz c2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+PiBGcm9tOiBCaHVwZXNoIFNoYXJtYQ0KPiA+ID4gPiA+ ID4gPj4gU2VudDogTW9uZGF5LCBPY3RvYmVyIDE3LCAyMDE2IDM6MjggUE0NCj4gPiA+ID4gPiA+ ID4+IFRvOiBBcmQgQmllc2hldXZlbA0KPiA+ID4gPGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+ OyBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4gPiA+ID4gPj4gPG1pY2hhZWwuZC5raW5uZXlAaW50 ZWwuY29tPg0KPiA+ID4gPiA+ID4gPj4gQ2M6IEdhbywgTGltaW5nIDxsaW1pbmcuZ2FvQGludGVs LmNvbT47IGVkazItDQo+ID4gPiBkZXZlbEBtbDAxLjAxLm9yZzsNCj4gPiA+ID4gPiA+ID4+IE1l ZW5ha3NoaSBBZ2dhcndhbA0KPiA+ID4gPG1lZW5ha3NoaS5hZ2dhcndhbEBueHAuY29tPg0KPiA+ ID4gPiA+ID4gPj4gU3ViamVjdDogUkU6IFtlZGsyXSBbUEFUQ0ggMS8xXSBNZGVQa2cvSW9MaWI6 DQo+ID4gPiBBZGQgc3VwcG9ydCBmb3INCj4gPiA+ID4gPiA+ID4+IGJpZy1lbmRpYW4gTU1JTw0K PiA+ID4gPiA+ID4gPj4NCj4gPiA+ID4gPiA+ID4+IEhpIEFyZCwNCj4gPiA+ID4gPiA+ID4+DQo+ ID4gPiA+ID4gPiA+PiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+ PiA+IEZyb206IEFyZCBCaWVzaGV1dmVsDQo+ID4gPiBbbWFpbHRvOmFyZC5iaWVzaGV1dmVsQGxp bmFyby5vcmddDQo+ID4gPiA+ID4gPiA+PiA+IFNlbnQ6IE1vbmRheSwgT2N0b2JlciAxNywgMjAx NiAxOjEyIFBNDQo+ID4gPiA+ID4gPiA+PiA+IFRvOiBLaW5uZXksIE1pY2hhZWwgRA0KPiA+ID4g PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gPiA+ID4gPj4gPiBDYzogR2FvLCBM aW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29tPjsNCj4gPiA+IEJodXBlc2ggU2hhcm1hDQo+ID4g PiA+ID4gPiA+PiA+IDxiaHVwZXNoLnNoYXJtYUBueHAuY29tPjsgZWRrMi0NCj4gPiA+IGRldmVs QG1sMDEuMDEub3JnDQo+ID4gPiA+ID4gPiA+PiA+IFN1YmplY3Q6IFJlOiBbZWRrMl0gW1BBVENI IDEvMV0NCj4gPiA+IE1kZVBrZy9Jb0xpYjogQWRkIHN1cHBvcnQgZm9yDQo+ID4gPiA+ID4gPiA+ PiA+IGJpZy0gZW5kaWFuIE1NSU8NCj4gPiA+ID4gPiA+ID4+ID4NCj4gPiA+ID4gPiA+ID4+ID4g T24gMTcgT2N0b2JlciAyMDE2IGF0IDA1OjEwLCBLaW5uZXksIE1pY2hhZWwNCj4gPiA+IEQNCj4g PiA+ID4gPiA+ID4+ID4gPG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPiB3cm90ZToNCj4gPiA+ ID4gPiA+ID4+ID4gPiBCaHVwZXNoLA0KPiA+ID4gPiA+ID4gPj4gPiA+DQo+ID4gPiA+ID4gPiA+ PiA+ID4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBhZGQgYW4gQVJNIHNwZWNpZmljDQo+ID4gPiBQ Q0QgdG8gc2VsZWN0DQo+ID4gPiA+ID4gPiA+PiA+ID4gZW5kaWFubmVzcyBhbmQgdXBkYXRlDQo+ ID4gPiA+ID4gPiA+PiA+ID4NCj4gPiA+IE1kZVBrZy9MaWJyYXJ5L0Jhc2VJb0xpYkludHJpbnNp Yy9Jb0xpYkFybS5jIHRvIHVzZQ0KPiA+ID4gdGhhdCBQQ0QgaW4NCj4gPiA+ID4gPiA+ID4+ID4g PiBNbWlvUmVhZC9Xcml0ZSgpIEFQSXMgaW4gdGhhdCBmaWxlIHRvDQo+ID4gPiBzdXBwb3J0IGJv dGggZW5kaWFuIHR5cGVzLg0KPiA+ID4gPiA+ID4gPj4gPiA+IFlvdSBjYW4gdXNlIHRoZSBTd2Fw Qnl0ZXN4eCgpIGZ1bmN0aW9ucw0KPiA+ID4gZnJvbSBCYXNlTGliKGFzDQo+ID4gPiA+ID4gPiA+ PiA+IExhc3psbw0KPiA+ID4gPiA+ID4gPj4gPiA+IHN1Z2dlc3RlZCkgYmFzZWQgb24gdGhlIHNl dHRpbmcgb2YgdGhpcw0KPiA+ID4gQVJNIHNwZWNpZmljIFBDRC4NCj4gPiA+ID4gPiA+ID4+ID4g Pg0KPiA+ID4gPiA+ID4gPj4gPiA+IE1vZHVsZXMgdGhhdCBsaW5rIGFnYWluc3QgdGhpcyBsaWIg Y2FuDQo+ID4gPiBzZWxlY3QgZW5kaWFubmVzcyBieQ0KPiA+ID4gPiA+ID4gPj4gPiA+IHNldHRp bmcgUENEIGluIHRoZSBzY29wZSBvZiB0aGF0IG1vZHVsZS4NCj4gPiA+ID4gPiA+ID4+ID4gPg0K PiA+ID4gPiA+ID4gPj4gPiA+IFRoZSBJUEYgdmVyc2lvbiBvZiBJb0xpYiB1c2VzIGFuIElQRg0K PiA+ID4gc3BlY2lmaWMgUENEIHRvIHRyYW5zbGF0ZQ0KPiA+ID4gPiA+ID4gPj4gPiA+IEkvTyBw b3J0IGFjY2Vzc2VzIHRvIE1NSU8gYWNjZXNzZXMuICBTbw0KPiA+ID4gdGhlcmUgaXMgYWxyZWFk eSBhbg0KPiA+ID4gPiA+ID4gPj4gPiA+IGV4YW1wbGUgb2YgYW4gYXJjaCBzcGVjaWZpYyBQQ0Qg aW4gdGhpcw0KPiA+ID4gbGliIGluc3RhbmNlLg0KPiA+ID4gPiA+ID4gPj4gPiA+DQo+ID4gPiA+ ID4gPiA+PiA+DQo+ID4gPiA+ID4gPiA+PiA+IFRoaXMgaXMgbm90IGEgcGxhdGZvcm0gd2lkZSB0 aGluZywgaXQgaXMgYQ0KPiA+ID4gcGVyLWRldmljZSBwcm9wZXJ0eQ0KPiA+ID4gPiA+ID4gPj4g PiB3aGV0aGVyIHRoZSBNTUlPIG9jY3VycyBpbiBiaWcgZW5kaWFuIG9yDQo+ID4gPiBsaXR0bGUg ZW5kaWFuIG1hbm5lci4NCj4gPiA+ID4gPiA+ID4+ID4NCj4gPiA+ID4gPiA+ID4+ID4gU28gSSB0 aGluayBMaW1pbmcncyBzdWdnZXN0aW9uIG1ha2VzIHNlbnNlOg0KPiA+ID4gY3JlYXRlIGFuIElv TGliDQo+ID4gPiA+ID4gPiA+PiA+IGltcGxlbWVudGF0aW9uIHRoYXQgcGVyZm9ybXMgdGhlIGJ5 dGUNCj4gPiA+IHN3YXBwaW5nLCBhbmQgc2VsZWN0aXZlbHkNCj4gPiA+ID4gPiA+ID4+ID4gaW5j b3Jwb3JhdGUgaXQgaW50byBkcml2ZXJzIHRoYXQgcmVxdWlyZSBpdA0KPiA+ID4gdXNpbmcNCj4g PiA+ID4gPiA+ID4+ID4NCj4gPiA+ID4gPiA+ID4+ID4gQmVNbWlvRGV2aWNlRHhlLmluZiB7DQo+ ID4gPiA+ID4gPiA+PiA+ICAgPExpYnJhcnlDbGFzc2VzPg0KPiA+ID4gPiA+ID4gPj4gPiAgICAg SW9MaWJ8U29tZVBrZy9MaWJyYXJ5L0JpZ0VuZGlhbklvTGliLmluZg0KPiA+ID4gPiA+ID4gPj4g PiB9DQo+ID4gPiA+ID4gPiA+Pg0KPiA+ID4gPiA+ID4gPj4gVGhhdCdzIGNvcnJlY3QuIEkgdGhp bmsgY3JlYXRpbmcgYSBzZXBhcmF0ZQ0KPiA+ID4gSW9MaWIgZm9yIGJ5dGUtc3dhcHBpbmcNCj4g PiA+ID4gPiA+ID4+IG1ha2VzIHNlbnNlLg0KPiA+ID4gPiA+ID4gPj4NCj4gPiA+ID4gPiA+ID4+ IFdlIHdpbGwgcmV3b3JrIHRoZSBwYXRjaCBhY2NvcmRpbmdseS4NCj4gPiA+ID4gPiA+ID4+DQo+ ID4gPiA+ID4gPiA+PiBSZWdhcmRzLA0KPiA+ID4gPiA+ID4gPj4gQmh1cGVzaA0KPiA+ID4gPiA+ ID4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+ ID4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBsaXN0DQo+ID4gPiA+ID4gPiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZw0KPiA+ID4gPiA+ID4NCj4gaHR0cHM6Ly9lbWVhMDEuc2FmZWxpbmtzLnByb3Rl Y3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmxpc3QNCj4gcy4wMS5vcmclMkZt YWlsbWFuJTJGbGlzdGluZm8lMkZlZGsyLQ0KPiBkZXZlbCZkYXRhPTAyJTdDMDElN0NtZWVuYWtz aGkuYWdnYXJ3YWwlNDBueHAuY29tJTdDNjk1ZTQzY2JiNTENCj4gYTQ3MWNkNDQ2MDhkNTM3NjIz MGIwJTdDNjg2ZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUlN0MwJTdDMA0KPiAlN0M2MzY0 NzU4MTcyMjA2NjM2MTImc2RhdGE9aHdRaDhkZlVrVkd6bTd1UUI5JTJGaXJleG1ZRWtkRVENCj4g JTJCdTk3NjA2TCUyRkhFZmclM0QmcmVzZXJ2ZWQ9MA0KPiA+ID4gX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gPiA+IGVkazItZGV2ZWwgbWFpbGluZyBs aXN0DQo+ID4gPiBlZGsyLWRldmVsQGxpc3RzLjAxLm9yZw0KPiA+ID4NCj4gaHR0cHM6Ly9lbWVh MDEuc2FmZWxpbmtzLnByb3RlY3Rpb24ub3V0bG9vay5jb20vP3VybD1odHRwcyUzQSUyRiUyRmxp c3QNCj4gcy4wMS5vcmclMkZtYWlsbWFuJTJGbGlzdGluZm8lMkZlZGsyLQ0KPiBkZXZlbCZkYXRh PTAyJTdDMDElN0NtZWVuYWtzaGkuYWdnYXJ3YWwlNDBueHAuY29tJTdDNjk1ZTQzY2JiNTENCj4g YTQ3MWNkNDQ2MDhkNTM3NjIzMGIwJTdDNjg2ZWExZDNiYzJiNGM2ZmE5MmNkOTljNWMzMDE2MzUl N0MwJTdDMA0KPiAlN0M2MzY0NzU4MTcyMjA2NjM2MTImc2RhdGE9aHdRaDhkZlVrVkd6bTd1UUI5 JTJGaXJleG1ZRWtkRVENCj4gJTJCdTk3NjA2TCUyRkhFZmclM0QmcmVzZXJ2ZWQ9MA0K