From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.0.61; helo=eur02-am5-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR02-AM5-obe.outbound.protection.outlook.com (mail-eopbgr00061.outbound.protection.outlook.com [40.107.0.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 3D7482218E927 for ; Tue, 5 Dec 2017 11:58:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=557+qNoI422Eoayw/c+qHZLxmKXxzvHTEHT1/+K17EU=; b=NRvz8PrmJR68hOWJtl0ElRrbcq5rg+ZoE4OGKFDAiWpjGYFi9AHy6YDGRlM4nqJXwZu/56bqW83UtLhNBeFt27UsVgTRh7sdpSz+RWT8SyHnVZFSsDmDdt5ETZDFhp3n+5twmVH1ei6KUIpqcmDKk/Pgsg28gI1h/NNO6Im3Xf0= Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com (10.168.5.24) by AM5PR0801MB1761.eurprd08.prod.outlook.com (10.169.247.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.282.5; Tue, 5 Dec 2017 20:03:21 +0000 Received: from AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418]) by AM4PR0801MB1444.eurprd08.prod.outlook.com ([fe80::2953:37dd:2fcb:a418%14]) with mapi id 15.20.0302.007; Tue, 5 Dec 2017 20:03:21 +0000 From: Evan Lloyd To: Ard Biesheuvel CC: "edk2-devel@lists.01.org" , Matteo Carlini , Leif Lindholm , "Girish Pathak" Thread-Topic: [PATCH 19/19] ArmPlatformPkg: New DP500/DP550/DP650 GOP driver. Thread-Index: AQHTaHUx3AX1mHcpcE2mKjMI81BUrKMtQ2oggAF8goCABm+d8A== Date: Tue, 5 Dec 2017 20:03:21 +0000 Message-ID: References: <20170926201529.11644-1-evan.lloyd@arm.com> <20170926201529.11644-20-evan.lloyd@arm.com> In-Reply-To: Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; AM5PR0801MB1761; 6:ZAyGSPNiMzle9psndmTwVQlZINM2VSsVhGLAtl2Sv8pvXlYWklnN/P196wIVTuI6Qu29y+tyt9Joe7Zr2vWEoDsPhp9R9/3G5vrx/zIkCVL+DeG0yPRVRa0slrBWRQOx3HGvIyndmrEWNdpPeVFiLjs8opIJnO8pJUq9348fi//TwiKXLBl+g/2A1GvXtZkAZ1C9mKMC34kdY2SYtMuOlqMuaqIBssNb6q9ECu6HcJFDUmEJf6ObcqXM3KVBaek2ZOk4xWYgkqt0isJIrTNsDHfV/MblhBOt6Bv74zMwIyGNxdiZ5dogEc1KGVaoitzip34z6KHa2YEVy7zjcZlOhHyfHYezsq92d4kumBJI8lI=; 5:7k6h9hjivbsITg7PXj77KNAW3+HRgF/cd+JfoTh7eWeFj+YNOK1F+v7vd/zH554FXt1J25ZxL42Q+WGpqBClhROQXEqVdt0su6pEqRX7sbS2srrqg1Ip+5gEayjUbxR4H9kVLPxm4rIyMamvyxrZCtg2T1UHUnasBGUzs8eChHI=; 24:NsDyTS456GD+1UANe0BDLuZIGIjFFze8CM3n5O1wIFfA23TIzJVrZ0ZjZ2ot5mIfSxBNubVaPWjFlRBU/AMXcDpGHYXwpc37x7tE9Ohx9J4=; 7:ctZSYzMeSS20W7cqbzgBYrHFb6nnmVpfkFolG1wUS75oLkr9mcyPIeRpvd0jPVQzYCHmfG/vZK1k1VmTuq2hc6L4MyFovN1hC8B25DKArP/qX86fxYJIR0cdcjx6Ip/Xn+j00jSbAPw1h9AAsE5NpRaap6dNCn3h5mIRCNJcosOdd3ARZvoHDygZAyTOrncfG7sPC4Wdx/CZEfeJhIqqlHkWnDgsDpq63szyM7sPcZF0kJnNZg2AQc6CVr8nZBq+ x-ms-exchange-antispam-srfa-diagnostics: SSOS;SSOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 007659b6-77d6-4afc-c972-08d53c1b3c33 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(4534020)(4602075)(4627115)(201703031133081)(201702281549075)(48565401081)(5600026)(4604075)(2017052603286); SRVR:AM5PR0801MB1761; x-ms-traffictypediagnostic: AM5PR0801MB1761: x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(131327999870524)(162533806227266); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(6040450)(2401047)(8121501046)(5005006)(3231022)(10201501046)(93006095)(93001095)(3002001)(6055026)(6041248)(20161123555025)(20161123560025)(20161123558100)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011); SRVR:AM5PR0801MB1761; BCL:0; PCL:0; RULEID:(100000803101)(100110400095); SRVR:AM5PR0801MB1761; x-forefront-prvs: 0512CC5201 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(376002)(346002)(366004)(39860400002)(40434004)(13464003)(24454002)(189003)(199004)(3846002)(66066001)(99286004)(2906002)(102836003)(97736004)(53546010)(33656002)(305945005)(6116002)(5890100001)(74316002)(93886005)(3660700001)(6916009)(3280700002)(76176011)(7696005)(54906003)(2950100002)(5660300001)(316002)(6436002)(101416001)(6506006)(229853002)(6246003)(86362001)(7736002)(4326008)(478600001)(5250100002)(9686003)(2900100001)(105586002)(53936002)(106356001)(8936002)(25786009)(72206003)(81166006)(55016002)(81156014)(68736007)(14454004)(8676002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0801MB1761; H:AM4PR0801MB1444.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 007659b6-77d6-4afc-c972-08d53c1b3c33 X-MS-Exchange-CrossTenant-originalarrivaltime: 05 Dec 2017 20:03:21.3509 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0801MB1761 Subject: Re: [PATCH 19/19] ArmPlatformPkg: New DP500/DP550/DP650 GOP driver. 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: Tue, 05 Dec 2017 19:58:53 -0000 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwg W21haWx0bzphcmQuYmllc2hldXZlbEBsaW5hcm8ub3JnXQ0KPiBTZW50OiAwMSBEZWNlbWJlciAy MDE3IDE3OjE5DQo+IFRvOiBFdmFuIExsb3lkIDxFdmFuLkxsb3lkQGFybS5jb20+DQo+IENjOiBl ZGsyLWRldmVsQGxpc3RzLjAxLm9yZzsgTWF0dGVvIENhcmxpbmkgPE1hdHRlby5DYXJsaW5pQGFy bS5jb20+Ow0KPiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBHaXJp c2ggUGF0aGFrDQo+IDxHaXJpc2guUGF0aGFrQGFybS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFU Q0ggMTkvMTldIEFybVBsYXRmb3JtUGtnOiBOZXcgRFA1MDAvRFA1NTAvRFA2NTANCj4gR09QIGRy aXZlci4NCj4NCj4gT24gMSBEZWNlbWJlciAyMDE3IGF0IDEzOjEyLCBFdmFuIExsb3lkIDxFdmFu Lkxsb3lkQGFybS5jb20+IHdyb3RlOg0KPiA+DQo+ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gPj4gRnJvbTogQXJkIEJpZXNoZXV2ZWwgW21haWx0bzphcmQuYmllc2hldXZl bEBsaW5hcm8ub3JnXQ0KPiA+PiBTZW50OiAyOCBOb3ZlbWJlciAyMDE3IDE4OjE4DQo+ID4+IFRv OiBFdmFuIExsb3lkIDxFdmFuLkxsb3lkQGFybS5jb20+DQo+ID4+IENjOiBlZGsyLWRldmVsQGxp c3RzLjAxLm9yZzsgTWF0dGVvIENhcmxpbmkgPE1hdHRlby5DYXJsaW5pQGFybS5jb20+Ow0KPiA+ PiBMZWlmIExpbmRob2xtIDxsZWlmLmxpbmRob2xtQGxpbmFyby5vcmc+OyBHaXJpc2ggUGF0aGFr DQo+ID4+IDxHaXJpc2guUGF0aGFrQGFybS5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg MTkvMTldIEFybVBsYXRmb3JtUGtnOiBOZXcgRFA1MDAvRFA1NTAvRFA2NTANCj4gR09QDQo+ID4+ IGRyaXZlci4NCj4gPj4NCj4gPj4gT24gMjYgU2VwdGVtYmVyIDIwMTcgYXQgMjE6MTUsICA8ZXZh bi5sbG95ZEBhcm0uY29tPiB3cm90ZToNCj4gPj4gPiBGcm9tOiBHaXJpc2ggUGF0aGFrIDxnaXJp c2gucGF0aGFrQGFybS5jb20+DQo+ID4+ID4NCj4gPj4gPiBUaGlzIGNoYW5nZSBhZGRzIHN1cHBv cnQgZm9yIHRoZSBBUk0gTWFsaSBEUDUwMC9EUDUwMC9EUDY1MA0KPiBkaXNwbGF5DQo+ID4+ID4g cHJvY2Vzc29ycyB1c2luZyB0aGUgR09QIHByb3RvY29sLiBJdCBoYXMgYmVlbiB0ZXN0ZWQgb24g RlZQIGJhc2UNCj4gPj4gPiBtb2RlbHMgKyBEUDU1MCBzdXBwb3J0Lg0KPiA+PiA+DQo+ID4+ID4g VGhpcyBjaGFuZ2UgZG9lcyBub3QgbW9kaWZ5IGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQgYnkgUEwx MTEgb3INCj4gPj4gPiBIRExDRC4gVGhlIGRyaXZlciBzaG91bGQgYmUgc3VpdGFibGUgZm9yIHRo b3NlIHBsYXRmb3JtcyB0aGF0DQo+ID4+ID4gaW1wbGVtZW50IEFSTSBNYWxpIERQNTAwL0RQNTUw L0RQNjUwIHJlcGxhY2luZyBQTDExMS9IRExDRC4NCj4gPj4gPg0KPiA+PiA+IE9ubHkgIkxheWVy IEdyYXBoaWNzIiBvZiB0aGUgQVJNIE1hbGkgRFAgaXMgY29uZmlndXJlZCBmb3INCj4gPj4gPiBy ZW5kZXJpbmcgdGhlIFJHQi9CR1IgZm9ybWF0IGZyYW1lIGJ1ZmZlciB0byBzYXRpc2Z5IHRoZSBV RUZJIEdPUA0KPiA+PiA+IHJlcXVpcmVtZW50cyBPdGhlciBsYXllcnMgZS5nLiB2aWRlbyBsYXll cnMgYXJlIG5vdCBjb25maWd1cmVkLg0KPiA+PiA+DQo+ID4+ID4gTk9URTogVGhpcyBjaGFuZ2Ug aW1wbGVtZW50cyB0aGUgTWFsaSBEUCBvbiBtb2RlbHMuIFZlcnNpb25zIGZvcg0KPiA+PiA+IGFj dHVhbCBoYXJkd2FyZSBhcmUgbGlhYmxlIHRvIHJlcXVpcmUgZXh0cmEgaGFuZGxpbmcgZm9yIGNs b2NrDQo+ID4+ID4gaW5wdXQgY2hhbmdlcywgZXRjLg0KPiA+PiA+DQo+ID4+ID4gQ29udHJpYnV0 ZWQtdW5kZXI6IFRpYW5vQ29yZSBDb250cmlidXRpb24gQWdyZWVtZW50IDEuMQ0KPiA+PiA+IFNp Z25lZC1vZmYtYnk6IEdpcmlzaCBQYXRoYWsgPGdpcmlzaC5wYXRoYWtAYXJtLmNvbT4NCj4gPj4g PiBTaWduZWQtb2ZmLWJ5OiBFdmFuIExsb3lkIDxldmFuLmxsb3lkQGFybS5jb20+DQo+ID4+DQo+ ID4+IEhlbGxvIEdpcmlzaCwgRXZhbiwNCj4gPj4NCj4gPj4gKHJlcGx5aW5nIHRvIDE5LzE5IGJl Y2F1c2UgSSBjYW5ub3QgZmluZCB0aGUgY292ZXIgbGV0dGVyIGluIG15DQo+ID4+IGVkazItZGV2 ZWwgYXJjaGl2ZSBidXQgdGhpcyByZWFsbHkgYXBwbGllcyB0byB0aGUgd2hvbGUgc2VyaWVzKQ0K PiA+Pg0KPiA+PiBJIGhhdmUgYmVlbiBsb29raW5nIGF0IHRoZXNlIHBhdGNoZXMgYWdhaW4gbm93 IHRoYXQgSSBhbSB0cnlpbmcgdG8NCj4gPj4gY2xlYW4gdXAgQXJtUGxhdGZvcm1Qa2csIHdoaWNo IGlzIGN1cnJlbnRseSBhIGR1bXBpbmcgZ3JvdW5kIGZvciBhbGwNCj4gPj4gdGhpbmdzIHZhZ3Vl bHkgQVJNIHJlbGF0ZWQsIGFuZCBpcyBhbHNvIHN0cnVjdHVyZWQgcXVpdGUgZGlmZmVyZW50bHkN Cj4gPj4gZnJvbSBvdGhlciBwYWNrYWdlcy4NCj4gPj4NCj4gPj4gSWRlYWxseSwgQXJtUGxhdGZv cm1Qa2cgc2hvdWxkIG9ubHkgY29udGFpbiB0aGUgZm9sbG93aW5nOg0KPiA+PiAtIGxpYnJhcnkg Y2xhc3MgaW50ZXJmYWNlcyB1bmRlciBJbmNsdWRlL0xpYnJhcnk7IGhlYWRlciBmaWxlcyBrZXB0 DQo+ID4+IGhlcmUgc2hvdWxkIG9ubHkgY29udGFpbiBlbGVtZW50cyB0aGF0IGRlZmluZSBBUEkN Cj4gPj4gLSBkcml2ZXIgc3BlY2lmaWMgaW5jbHVkZSBmaWxlcyBJbmNsdWRlL0luZHVzdHJ5U3Rh bmRhcmQgYnV0ICpvbmx5Kg0KPiA+PiBpZiB0aGV5IGNhbm5vdCBiZSBrZXB0IGxvY2FsbHkgd2l0 aCB0aGUgZHJpdmVyIGluIHF1ZXN0aW9uDQo+ID4+IC0gbGlicmFyaWVzIHVuZGVyIExpYnJhcnkv DQo+ID4+IC0gZHJpdmVycyB1bmRlciBEcml2ZXJzLw0KPiA+Pg0KPiA+PiBUaGlzIGFsaWducyB3 aXRoIHRoZSBjb21tb24gYXJyYW5nZW1lbnQgYWRvcHRlZCBieSBtb3N0IEVESzINCj4gcGFja2Fn ZXMuDQo+ID4+DQo+ID4+IFRoaXMgc2VyaWVzIGRvZXMgbWFueSBkaWZmZXJlbnQgdGhpbmdzLCBh bmQgZG9lcyBub3QgZGlzdGluZ3Vpc2ggYXQNCj4gPj4gYWxsIGJldHdlZW4gY29tbW9uIGNvZGUg YW5kIGNvZGUgbGl2aW5nIHVuZGVyIEFybVZFeHByZXNzUGtnLiBHaXZlbg0KPiA+DQo+ID4gIFtb RXZhbiBMbG95ZF1dIEFsbCBvZiB0aGUgY29tbWl0cyBpbiB0aGUgc2VyaWVzIGFyZSBpbiBBcm1Q bGF0Zm9ybVBrZy4NCj4gPiBZb3UgbWF5IGJlIGluIHRoZSBwcm9jZXNzIG9mIGRpc2VudGFuZ2xp bmcgdGhlIFZFIHNwZWNpZmljIGJpdHMsIGJ1dA0KPiA+IGhpdGhlcnRvIHRoYXQgaGFzIG5vdCBi ZWVuIGEgY29uc2lkZXJhdGlvbi4gIChOb3RlOiBJJ20gbm90IGFyZ3VpbmcgYWdhaW5zdA0KPiB0 aGUgZGlzZW50YW5nbGluZywgb25seSBwb2ludGluZyBvdXQgdGhhdCBpdCB3YXMgbm90IGEgZmFj dG9yIGF0IHRoZSBwb2ludCB3ZQ0KPiBzdWJtaXR0ZWQgdGhlIHBhdGNoZXMpIFRoZSByZWFzb24g dGhlcmUgYXJlIHNvIG1hbnkgY29tbWl0cyBpcyBvbmx5IHRoYXQNCj4gd2UgaGF2ZSBiZWVuIGFz a2VkIHRvIGJyZWFrIHRoaW5ncyB1cCBpbnRvICJiaXRlIHNpemVkIiBjaHVua3MgZm9yIHRoZQ0K PiBjb252ZW5pZW5jZSBvZiBtYWludGFpbmVycy4NCj4gPiBUaGUgYWltIHdhcyB0byBtYWtlIGVh Y2ggYSBjb2hlcmVudCBpdGVtIHdpdGggYSBzaW1wbGUganVzdGlmaWNhdGlvbi4NCj4gPg0KPiA+ PiB0aGF0IEkgYW0gdHJ5aW5nIHRvIG1vdmUgQXJtVkV4cHJlc3NQa2cgb3V0IG9mIEVESzIgaW50 bw0KPiA+PiBlZGsyLXBsYXRmb3JtcyAod2hlcmUgaXQgYXJndWFibHkgYmVsb25ncykgaGF2aW5n IHRoaXMgc2VyaWVzIGluDQo+ID4+IGxpbWJvIGZvciB0d28gbW9udGhzIGlzIGJhc2ljYWxseSBi bG9ja2luZyBteSB3b3JrLCBhbmQgc28gSSB3b3VsZA0KPiA+PiBsaWtlIHRvIGV4cGxvcmUgd2F5 cyB0byBwcm9jZWVkIHdpdGggdGhpcyB3aXRob3V0IGludGVyZmVyaW5nIHdpdGgNCj4gPj4gZWFj aCBvdGhlcidzIHdvcmsgdG9vIG11Y2guIEF0IHRoZSBzYW1lIHRpbWUsIHRoZSB3YXkgdGhlIGNv ZGUgaXMNCj4gPj4gc3RydWN0dXJlZCBpcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgcGF0dGVybiBJ IGFtIHRyeWluZyB0byBnZXQgcmlkDQo+ID4+IG9mLCBzbyB0aGV5IHdpbGwgbmVlZCBzb21lIHJl d29yayBhbnl3YXkgaW4gb3JkZXIgdG8gYmUgdXBzdHJlYW1hYmxlDQo+IElNSE8uDQo+ID4NCj4g PiAgW1tFdmFuIExsb3lkXV0gTm90IGJlaW5nIHBzeWNoaWMsIHdlIGhhZCBub3QgbWFkZSBhbGxv d2FuY2UgZm9yIHlvdXINCj4gcGxhbnMuDQo+ID4gSG93ZXZlciwgaWYgeW91IHRha2UgdGhlIHRy b3VibGUgdG8gbG9vayBhdCB0aGUgY2hhbmdlcywgdGhleSBhY2hpZXZlDQo+IGV4YWN0bHkgdGhl IHNwbGl0IHlvdSBhaW0gZm9yLg0KPiA+IFRoZSBkaXNwbGF5IHR5cGUgY29kZSAoUEwwMTEgYW5k IEhETENEKSBpcyB1bnJhdmVsbGVkIGZyb20gdGhlIFZFIGNvZGUuDQo+ID4gQWxsIHRoYXQgcmVt YWlucyB3b3VsZCBiZSB0byBtb3ZlIHRoZSBWRSBzcGVjaWZpYyBwYXJ0IGludG8gZWRrMi0NCj4g cGxhdGZvcm1zLg0KPiA+DQo+ID4+DQo+ID4+IFNvIGNvdWxkIHdlIHNwbGl0IGl0IHVwIHBsZWFz ZT8gQXNzdW1pbmcgdGhlIGludGVudGlvbiBpcyB0aGUgYWJpbGl0eQ0KPiA+PiB0byByZXVzZSB0 aGUgTWFsaSBjb2RlIG9uIG5vbi1WRXhwcmVzcyBwbGF0Zm9ybXMsIEkgd291bGQgbGlrZSB0byBz ZWUNCj4gPj4gdGhhdCBjb2RlIHByb3Bvc2VkIHNlcGFyYXRlbHksIHdpdGhvdXQgYW55IG1lbnRp b24gb2YgVkV4cHJlc3NQa2cuZGVjDQo+ID4NCj4gPiAgW1tFdmFuIExsb3lkXV0gR2l2ZW4gdGhh dCB0aGUgb3JpZ2luYWwgY29kZSB3YXMgdW5mb3J0dW5hdGUsIEknbSBub3Qgc3VyZQ0KPiB0aGF0 IGl0IG1ha2VzIG11Y2ggZGlmZmVyZW5jZSB3aGF0IG9yZGVyIHRoZSBjaGFuZ2VzIGdldCBtYWRl Lg0KPiA+IEdvaW5nIFdlc3QgdGhlbiBOb3J0aCBnZXRzIHlvdSB0byB0aGUgc2FtZSBwbGFjZSBh cyBOb3J0aCB0aGVuIFdlc3QNCj4gKGV4Y2VwdCBuZWFyIGEgcG9sZSkuDQo+ID4gSWYgeW91IGFj Y2VwdCB0aGF0IHRoZXJlIHdhcyBhIGxvZ2ljYWwgcHJvZ3Jlc3Npb24gaW4gdGhlIGNoYW5nZXMg bWFkZSwNCj4gdGhlbiBpdCBtaWdodCBiZSBiZXR0ZXIgdG8gbm90IHJlamlnIHRoaW5ncyBwb2lu dGxlc3NseS4NCj4gPg0KPiA+PiB3aGF0c29ldmVyLiBJZiB5b3UgaW50cm9kdWNlIGFueSBsaWJy YXJ5IGNsYXNzZXMgdGhhdCBhYnN0cmFjdCBhd2F5DQo+ID4+IHRoZSBkaWZmZXJlbmNlcyBiZXR3 ZWVuIHBsYXRmb3JtcywgeW91IGNhbiBpbmNsdWRlIGEgTnVsbCB2ZXJzaW9uIG9mDQo+ID4+IHN1 Y2ggYSBsaWJyYXJ5IHRoYXQgc2ltcGx5IGRvZXMgQVNTRVJUIChGQUxTRSkgaW4gZXZlcnkgZnVu Y3Rpb246DQo+ID4+IHRoaXMNCj4gPg0KPiA+ICBbW0V2YW4gTGxveWRdXSBPbmUgY291bGQsIGlu ZGVlZCwgZG8gdGhhdC4gIFdlLCBob3dldmVyLCB3b3VsZCBiZSB2ZXJ5DQo+IHJlbHVjdGFudCB0 byBpbmN1ciB0aGUgb3ZlcmhlYWQgb2YgcmV3b3JrIGluIHJlc3BvbnNlIHRvIHNwdXJpb3VzIGNh dmlscw0KPiBmcm9tIGEgbWFpbnRhaW5lciB3aGVuIGl0IGlzIG9mIG5vIGRpcmVjdCByZWxldmFu Y2UgdG8gdXMuDQo+ID4NCj4NCj4gSSBkb24ndCB0aGluayB0aGUgc3VnZ2VzdGlvbiB0aGF0IHdl IGV2aWwgbWFpbnRhaW5lcnMgYXJlIG5vdGhpbmcgYnV0IGFuDQo+IGltcGVkaW1lbnQgdG8gdGhl IGxpa2VzIG9mIHlvdSBhbmQgeW91ciB0ZWFtIG1lbWJlcnMgZG9pbmcgdGhlIGFjdHVhbA0KPiB3 b3JrIGlzIGp1c3RpZmllZC4NCj4NCj4gV2UgYXJlIGFsbCBvbiB0aGUgc2FtZSB0ZWFtIGhlcmUs IGFuZCB0aGUgZ29hbCBpcyB0byBtYWtlIFVFRkkgY29kZQ0KPiByZXVzYWJsZSBmb3IgdGhlIGN1 c3RvbWVycyBvZiAveW91ci8gZW1wbG95ZXIuIFRocm93aW5nIHN0dWZmIG92ZXIgdGhlDQo+IGZl bmNlICE9IHVwc3RyZWFtaW5nLCBhbmQgaXQgaXMgbXkgam9iIGFzIGEgbWFpbnRhaW5lciB0byBl bnN1cmUgdGhhdCBjb2RlIGlzDQo+IHN0aWxsIG1haW50YWluYWJsZSBsb25nIGFmdGVyIHRoZSBv cmlnaW5hbCBhdXRob3JzIGhhdmUgbW92ZWQgb24gdG8NCj4gc29tZXRoaW5nIGVsc2UuDQo+DQo+ IEFybVBsYXRmb3JtUGtnIGlzIGEgcGVyZmVjdCBleGFtcGxlIHdoZXJlIGNvZGUgcmV1c2UgaXMg bXVjaCBtb3JlDQo+IGRpZmZpY3VsdCB0aGFuIGl0IG5lZWRzIHRvIGJlLCBhbmQgd2UgYXMgbWFp bnRhaW5lcnMgbmVlZCB0byBkZWFsIHdpdGgNCj4gY29udHJpYnV0b3JzIGZyb20gb3RoZXIgY29t cGFuaWVzIHRoYXQgaGF2ZSB1c2VkIGl0IGFzICdndWlkYW5jZScgZm9yIGhvdw0KPiB0byBhcmNo aXRlY3QgdGhlaXIgVUVGSSBmaXJtd2FyZSwgd2hpY2ggaXMgdXN1YWxseSBmaWxsZWQgd2l0aCB2 ZXhwcmVzcy1pc21zDQo+IHRoYXQgZGF0ZSBiYWNrIHRvIGJlZm9yZSBhbnlvbmUgY3VycmVudGx5 IGludm9sdmVkIHdpdGggVUVGSSBjYW4gcmVtZW1iZXIuDQo+DQo+IFRoaXMgaXMgd2h5IEkgaGF2 ZSB0YWtlbiB0aGUgdGltZSB0byBzaXQgZG93biwgZ28gdGhyb3VnaCBhbGwgdGhlIGNyYXAgY29k ZSwNCj4gY2xlYW4gaXQgdXAsIHJlZmFjdG9yIGl0IGFuZCBwcm9wb3NlIGl0IG9uIHRoZSBsaXN0 IGFzIGltcHJvdmVtZW50cy4gSSBldmVuDQo+IHdlbnQgc28gZmFyIGFzIHRha2luZyB0aGUgcHJl cGFyYXRvcnkgTWFsaSB3b3JrIG9mIHlvdXIgdGVhbSBhbmQgcmViYXNlIGl0DQo+IHNvIHRoYXQg d2UgY2FuIGtlZXAgdGhlIGJpdHMgdGhhdCB3ZSBtYXkgc2hhcmUsIGFuZCBtb3ZlIHRoZSBiaXRz IG91dCB0aGF0DQo+IHNob3VsZCBub3QgYmUga2VwdCBpbiBtYWluIEVESzIgYmVjYXVzZSB0aGV5 IGFyZSBiZWluZyB0YWtlbiBhcyBnb3NwZWwgYnkNCj4gZW5naW5lZXJzIHRoYXQgYXJlIG5ldyB0 bw0KPiBBUk0rVUVGSS4NCj4NCj4gSWYgdGhpcyBpcyB0b28gbXVjaCB0byBkZWFsIHdpdGggZm9y IHlvdSwgdGhlbiBmaW5lLCBkb24ndCB1cHN0cmVhbSB5b3VyIGNvZGUuDQo+IEJ1dCBpZiB5b3Ug ZG8sIHlvdSBhcmUgZ29pbmcgdG8gaGF2ZSB0byBwbGF5IG5pY2Ugd2l0aCB0aGUgb3RoZXJzLCBp bmNsdWRpbmcNCj4gdGhlIG1haW50YWluZXJzLg0KPg0KW1tFdmFuIExsb3lkXV0gSGkgQXJkLiAg Rmlyc3RseSwgSSBhcG9sb2dpemUsIEkgYXNzdW1lZCBmcm9tIHlvdXIgbmFtZSB0aGF0IHlvdSB3 ZXJlIER1dGNoIGFuZCB3b3VsZCB0aGVyZWZvcmUgcHJvYmFibHkgaGF2ZSBhIGxpdmVseSBzZW5z ZSBvZiBodW1vdXIuICBPZiBjb3Vyc2UsIGlmIEkgaGF2ZSB0b3VjaGVkIGEgbmVydmUsIHRoYXQg aXMgdW5mb3J0dW5hdGUgYW5kIEknbSBzb3JyeS4NCkkgYWdyZWUgdGhhdCBjbGVhbmluZyB1cCB0 aGUgY29kZSBpcyBpbXBvcnRhbnQsIHdvcnRod2hpbGUsIGFuZCBhbiBvYmplY3RpdmUgZm9yIHVz IGFsbC4gIFdoYXQgY2FuIGJlIGEgZGlmZmljdWx0eSBpcyBvdXIgdmVyeSBkaWZmZXJlbnQgY29u Y2VwdGlvbnMgb2Ygd2hhdCBjbGVhbiBtZWFucy4NCg0KWW91IHNob3VsZCBiZSBhd2FyZSB0aG91 Z2ggdGhhdCBhIGNlcnRhaW4gYW1vdW50IG9mIHdoaW5nZWluZyBpcyB0byBiZSBleHBlY3RlZCB3 aGVuIGRlYWxpbmcgd2l0aCBCcml0cy4gKEFzayBMZWlmIC0gaGUga25vd3MhIE9yIGFueSBBdXN0 cmFsaWFuLikNCkkgZG8gbm90IGRpc2FncmVlIHdpdGggeW91ciBpbnRlbnQgLSBidXQgSSBkbyBz b21ldGltZXMgZmVlbCB0aGF0IHRoZSBjcml0ZXJpYSBhcHBsaWVkIGRvIG5vdCB0YWtlIGludG8g YWNjb3VudCB0aGUgY29zdC9iZW5lZml0IGFzcGVjdHMsIGFuZCBzZWVrIHRvIGFpciB0aGF0IHBv aW50LiAgSSBzaGFsbCBlbmRlYXZvdXIgdG8gbWFrZSBzdWNoIHBvaW50cyBpbiBhIGxlc3MgYmFu dGVyaW5nIHdheSBpbiBmdXR1cmUuDQoNClJlZ2FyZHMsDQpFdmFuDQo+IC0tDQo+IEFyZC4NCklN UE9SVEFOVCBOT1RJQ0U6IFRoZSBjb250ZW50cyBvZiB0aGlzIGVtYWlsIGFuZCBhbnkgYXR0YWNo bWVudHMgYXJlIGNvbmZpZGVudGlhbCBhbmQgbWF5IGFsc28gYmUgcHJpdmlsZWdlZC4gSWYgeW91 IGFyZSBub3QgdGhlIGludGVuZGVkIHJlY2lwaWVudCwgcGxlYXNlIG5vdGlmeSB0aGUgc2VuZGVy IGltbWVkaWF0ZWx5IGFuZCBkbyBub3QgZGlzY2xvc2UgdGhlIGNvbnRlbnRzIHRvIGFueSBvdGhl ciBwZXJzb24sIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UsIG9yIHN0b3JlIG9yIGNvcHkgdGhlIGlu Zm9ybWF0aW9uIGluIGFueSBtZWRpdW0uIFRoYW5rIHlvdS4NCg==