From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 5638845956; Tue, 10 Sep 2024 15:07:20 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DF54042DCD; Tue, 10 Sep 2024 15:07:19 +0200 (CEST) Received: from dkmailrelay1.smartsharesystems.com (smartserver.smartsharesystems.com [77.243.40.215]) by mails.dpdk.org (Postfix) with ESMTP id 0FBA9402AB for ; Tue, 10 Sep 2024 15:07:18 +0200 (CEST) Received: from smartserver.smartsharesystems.com (smartserver.smartsharesys.local [192.168.4.10]) by dkmailrelay1.smartsharesystems.com (Postfix) with ESMTP id C4F242097B; Tue, 10 Sep 2024 15:07:18 +0200 (CEST) Content-class: urn:content-classes:message MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 Subject: RE: [PATCH 1/6] eal: add static per-lcore memory allocation facility Date: Tue, 10 Sep 2024 15:07:14 +0200 X-MimeOLE: Produced By Microsoft Exchange V6.5 Message-ID: <98CBD80474FA8B44BF855DF32C47DC35E9F6C5@smartserver.smartshare.dk> In-Reply-To: <7894817a-2ae1-40d8-946d-c1b7de1d63b7@lysator.liu.se> X-MS-Has-Attach: X-MS-TNEF-Correlator: Thread-Topic: [PATCH 1/6] eal: add static per-lcore memory allocation facility Thread-Index: AdsDbnvty6SXNR9VRwmy3kA/aI/2owAC4JKQ References: <20240506082721.120666-2-mattias.ronnblom@ericsson.com> <20240910070344.699183-1-mattias.ronnblom@ericsson.com> <20240910070344.699183-2-mattias.ronnblom@ericsson.com> <98CBD80474FA8B44BF855DF32C47DC35E9F6C4@smartserver.smartshare.dk> <7894817a-2ae1-40d8-946d-c1b7de1d63b7@lysator.liu.se> From: =?UTF-8?B?TW9ydGVuIEJyw7hydXA=?= To: =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , =?UTF-8?B?TWF0dGlhcyBSw7ZubmJsb20=?= , Cc: "Stephen Hemminger" , "Konstantin Ananyev" , "David Marchand" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org PiBGcm9tOiBNYXR0aWFzIFLDtm5uYmxvbSBbbWFpbHRvOmhvZm9yc0BseXNhdG9yLmxpdS5zZV0N Cj4gU2VudDogVHVlc2RheSwgMTAgU2VwdGVtYmVyIDIwMjQgMTIuNDUNCj4gDQo+IE9uIDIwMjQt MDktMTAgMTE6MzIsIE1vcnRlbiBCcsO4cnVwIHdyb3RlOg0KPiA+PiBGcm9tOiBNYXR0aWFzIFLD tm5uYmxvbSBbbWFpbHRvOm1hdHRpYXMucm9ubmJsb21AZXJpY3Nzb24uY29tXQ0KPiA+PiBTZW50 OiBUdWVzZGF5LCAxMCBTZXB0ZW1iZXIgMjAyNCAwOS4wNA0KPiA+Pg0KPiA+PiBJbnRyb2R1Y2Ug RFBESyBwZXItbGNvcmUgaWQgdmFyaWFibGVzLCBvciBsY29yZSB2YXJpYWJsZXMgZm9yIHNob3J0 Lg0KPiA+DQo+ID4gVGhyb3VnaG91dCB0aGUgZGVzY3JpcHRpb25zIGFuZCBjb21tZW50cywNCj4g PiBwbGVhc2UgcmVwbGFjZSAibGNvcmUgaWQiIHdpdGggImxjb3JlIiAoZS5nLiAicGVyLWxjb3Jl IHZhcmlhYmxlcyIpLA0KPiA+IHdoZW4gcmVmZXJyaW5nIHRvIHRoZSBsY29yZSwgYW5kIG5vdCB0 aGUgaW5kZXggb2YgdGhlIGxjb3JlLg0KPiA+IChZb3VyIGludGVudGlvbiBtaWdodCBiZSB0byBo aWdobGlnaHQgdGhhdCBpdCBvbmx5IGNvdmVycyB0aHJlYWRzIHdpdGgNCj4gYW4gbGNvcmUgaWQs DQo+ID4gYnV0IGlmIHRoYXQgd2Fzbid0IHRoZSBjYXNlLCB5b3Ugd291bGQgcmVmZXIgdG8gdGhl bSBhcyAidGhyZWFkcyIgbm90DQo+ICJsY29yZXMiLikNCj4gPiBFeGNlcHQsIG9mIGNvdXJzZSwg d2hlbiByZWZlcnJpbmcgdG8gYW4gYWN0dWFsIGxjb3JlIGlkLCBlLmcuIGxjb3JlX2lkDQo+IGZ1 bmN0aW9uIHBhcmFtZXRlcnMuDQo+IA0KPiAibGNvcmUiIGlzIGp1c3QgYW5vdGhlciB3b3JkIGZv ciAiRUFMIHRocmVhZC4iIFRoZSBsY29yZSB2YXJpYWJsZXMgZXhpc3QNCj4gaW4gb25lIGluc3Rh bmNlIGZvciBldmVyeSB0aHJlYWQgd2l0aCBhbiBsY29yZSBpZCwgdGh1cyBhbHNvIGZvcg0KPiBy ZWdpc3RlcmVkIG5vbi1FQUwgdGhyZWFkcyAoaS5lLiwgdGhyZWFkcyB3aGljaCBhcmUgbm90IGxj b3JlcykuDQo+IA0KPiBJJ3ZlIHRyaWVkIHRvIHN1bW1hcml6ZSB0aGUgKHZlcnkgY29uZnVzaW5n KSB0ZXJtaW5vbG9neSBvZiBEUERLJ3MNCj4gdGhyZWFkaW5nIG1vZGVsIGhlcmU6DQo+IGh0dHBz Oi8vZXJpY3Nzb24uZ2l0aHViLmlvL2RhdGFwbGFuZWJvb2svdGhyZWFkaW5nL3RocmVhZGluZy5o dG1sI2VhbC0NCj4gdGhyZWFkcw0KPiANCj4gU28sIGluIG15IHdvcmxkLCAicGVyLWxjb3JlIGlk IHZhcmlhYmxlcyIgaXMgcHJldHR5IGFjY3VyYXRlLiBZb3UgY291bGQNCj4gc2F5ICJ2YXJpYWJs ZXMgd2l0aCBwZXItbGNvcmUgaWQgdmFsdWVzIiBpZiB5b3Ugd2FudCB0byBtYWtlIGl0IGV2ZW4N Cj4gbW9yZSBjbGVhciwgd2hhdCdzIGdvaW5nIG9uLg0KDQpXaXRoIHlvdXIgcmVmZXJlbmNlIHRl cm1pbm9sb2d5IGluIG1pbmQsICJwZXItbGNvcmUgaWQgdmFyaWFibGVzIiBpcyBPSyB3aXRoIG1l Lg0KDQo8cmFudD4NCkRQREsncyBsY29yZSB0ZXJtaW5vbG9neSBoYXMgZHJpZnRlZCBxdWl0ZSBm YXIgYXdheSBmcm9tIGl0cyBvcmlnaW5hbCAxOjEgbWVhbmluZywgYnV0IEknbSBub3QgZ29pbmcg dG8gdHJ5IHRvIGNsZWFuIGl0IHVwLg0KSXQgYWxzbyBzZWVtcyB0aGUgbWVhbmluZyBvZiAic29j a2V0IiBpcyBkcmlmdGluZy4NCg0KQW5kIHRoZSBEUERLJ3MgcHJvamVjdCdzIEFQSS9BUEkgY29t cGF0aWJpbGl0eSBhbWJpdGlvbnMgc2VlbSB0byBmYXZvciBib2x0aW5nIG9uIG5ldyBmZWF0dXJl cyB0byB0aGUgcGlsZSwgcmF0aGVyIHRoYW4gcmVwbGFjaW5nIEFQSXMgdGhhdCBoYXZlIGdyb3du IG1pc2xlYWRpbmcgd2l0aCBuZXcgQVBJcyBzZXJ2aW5nIG5ldyByZXF1aXJlbWVudHMuDQo8L3Jh bnQ+DQoNCj4gDQo+ID4NCj4gPiBQYXJhcGhyYXNpbmc6DQo+ID4gQ29uc2lkZXIgdGhlIHR5cGUg b2Ygd2hhdCB5b3UgYXJlIHJlZmVycmluZyB0bzsNCj4gPiB1c2UgImxjb3JlIiBpZiBpdHMgdHlw ZSBpcyAidGhyZWFkIiwgYW5kDQo+ID4gdXNlICJsY29yZSBpZCIgaWYgaXRzIHR5cGUgaXMgImlu dCIuDQo+ID4NCj4gPiBJIG1pZ2h0IGJlIHdyb25nIGhlcmUsIGJ1dCBwbGVhc2UgdGhpbmsgaGFy ZCBhYm91dCBpdC4NCj4gPg0KPiA+Pg0KPiA+PiBBbiBsY29yZSB2YXJpYWJsZSBoYXMgb25lIHZh bHVlIGZvciBldmVyeSBjdXJyZW50IGFuZCBmdXR1cmUgbGNvcmUNCj4gPj4gaWQtZXF1aXBwZWQg dGhyZWFkLg0KPiA+Pg0KPiA+PiBUaGUgcHJpbWFyeSA8cnRlX2xjb3JlX3Zhci5oPiB1c2UgY2Fz ZSBpcyBmb3Igc3RhdGljYWxseSBhbGxvY2F0aW5nDQo+ID4+IHNtYWxsLCBmcmVxdWVudGx5LWFj Y2Vzc2VkIGRhdGEgc3RydWN0dXJlcywgZm9yIHdoaWNoIG9uZSBpbnN0YW5jZQ0KPiA+PiBzaG91 bGQgZXhpc3QgZm9yIGVhY2ggbGNvcmUuDQo+ID4+DQo+ID4+IExjb3JlIHZhcmlhYmxlcyBhcmUg c2ltaWxhciB0byB0aHJlYWQtbG9jYWwgc3RvcmFnZSAoVExTLCBlLmcuLCBDMTENCj4gPj4gX1Ro cmVhZF9sb2NhbCksIGJ1dCBkZWNvdXBsaW5nIHRoZSB2YWx1ZXMnIGxpZmUgdGltZSB3aXRoIHRo YXQgb2YgdGhlDQo+ID4+IHRocmVhZHMuDQo+ID4+DQo+ID4+IExjb3JlIHZhcmlhYmxlcyBhcmUg YWxzbyBzaW1pbGFyIGluIHRlcm1zIG9mIGZ1bmN0aW9uYWxpdHkgcHJvdmlkZWQNCj4gYnkNCj4g Pj4gRnJlZUJTRCBrZXJuZWwncyBEUENQVV8qKCkgZmFtaWx5IG9mIG1hY3JvcyBhbmQgdGhlIGFz c29jaWF0ZWQNCj4gPj4gYnVpbGQtdGltZSBtYWNoaW5lcnkuIERQQ1BVIHVzZXMgbGlua2VyIHNj cmlwdHMsIHdoaWNoIGVmZmVjdGl2ZWx5DQo+ID4+IHByZXZlbnRzIHRoZSByZXVzZSBvZiBpdHMs IG90aGVyd2lzZSBzZWVtaW5nbHkgdmlhYmxlLCBhcHByb2FjaC4NCj4gPj4NCj4gPj4gVGhlIGN1 cnJlbnRseS1wcmV2YWlsaW5nIHdheSB0byBzb2x2ZSB0aGUgc2FtZSBwcm9ibGVtIGFzIGxjb3Jl DQo+ID4+IHZhcmlhYmxlcyBpcyB0byBrZWVwIGEgbW9kdWxlJ3MgcGVyLWxjb3JlIGRhdGEgYXMg UlRFX01BWF9MQ09SRS1zaXplZA0KPiA+PiBhcnJheSBvZiBjYWNoZS1hbGlnbmVkLCBSVEVfQ0FD SEVfR1VBUkRlZCBzdHJ1Y3RzLiBUaGUgYmVuZWZpdCBvZg0KPiA+PiBsY29yZSB2YXJpYWJsZXMg b3ZlciB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgZGF0YSByZWxhdGVkIHRvIHRoZSBzYW1lDQo+ID4+ IGxjb3JlIG5vdyBpcyBjbG9zZSAoc3BhdGlhbGx5LCBpbiBtZW1vcnkpLCByYXRoZXIgdGhhbiBk YXRhIHVzZWQgYnkNCj4gPj4gdGhlIHNhbWUgbW9kdWxlLCB3aGljaCBpbiB0dXJuIGF2b2lkIGV4 Y2Vzc2l2ZSB1c2Ugb2YgcGFkZGluZywNCj4gPj4gcG9sbHV0aW5nIGNhY2hlcyB3aXRoIHVudXNl ZCBkYXRhLg0KPiA+Pg0KPiA+PiBTaWduZWQtb2ZmLWJ5OiBNYXR0aWFzIFLDtm5uYmxvbSA8bWF0 dGlhcy5yb25uYmxvbUBlcmljc3Nvbi5jb20+DQo+ID4+IEFja2VkLWJ5OiBNb3J0ZW4gQnLDuHJ1 cCA8bWJAc21hcnRzaGFyZXN5c3RlbXMuY29tPg0KPiA+Pg0KPiA+PiAtLQ0KPiA+DQo+ID4+ICsr KyBiL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCj4gPj4gQEAgLTk5LDYgKzk5LDcgQEAgVGhl IHB1YmxpYyBBUEkgaGVhZGVycyBhcmUgZ3JvdXBlZCBieSB0b3BpY3M6DQo+ID4+ICAgICBbaW50 ZXJydXB0c10oQHJlZiBydGVfaW50ZXJydXB0cy5oKSwNCj4gPj4gICAgIFtsYXVuY2hdKEByZWYg cnRlX2xhdW5jaC5oKSwNCj4gPj4gICAgIFtsY29yZV0oQHJlZiBydGVfbGNvcmUuaCksDQo+ID4+ ICsgIFtsY29yZS12YXJpYmxlXShAcmVmIHJ0ZV9sY29yZV92YXIuaCksDQo+ID4NCj4gPiBUeXBv OiB2YXJpYmxlIC0+IHZhcmlhYmxlDQo+ID4NCj4gPg0KPiANCj4gSSdsbCBjaGFuZ2UgaXQgdG8g Imxjb3JlIHZhcmlhYmxlcyIgKG5vIGRhc2gsIHBsdXJhbCkuDQoNCisxDQoNCj4gDQo+ID4+ICsr KyBiL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2VfMjRfMTEucnN0DQo+ID4+IEBAIC01NSw2 ICs1NSwyMCBAQCBOZXcgRmVhdHVyZXMNCj4gPj4gICAgICAgIEFsc28sIG1ha2Ugc3VyZSB0byBz dGFydCB0aGUgYWN0dWFsIHRleHQgYXQgdGhlIG1hcmdpbi4NCj4gPj4gICAgICAgID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4NCj4g Pj4gKyogKipBZGRlZCBFQUwgcGVyLWxjb3JlIHN0YXRpYyBtZW1vcnkgYWxsb2NhdGlvbiBmYWNp bGl0eS4qKg0KPiA+PiArDQo+ID4+ICsgICAgQWRkZWQgRUFMIEFQSSA8cnRlX2xjb3JlX3Zhci5o PiBmb3Igc3RhdGljYWxseSBhbGxvY2F0aW5nIHNtYWxsLA0KPiA+PiArICAgIGZyZXF1ZW50bHkt YWNjZXNzZWQgZGF0YSBzdHJ1Y3R1cmVzLCBmb3Igd2hpY2ggb25lIGluc3RhbmNlDQo+IHNob3Vs ZA0KPiA+PiArICAgIGV4aXN0IGZvciBlYWNoIGxjb3JlLg0KPiA+PiArDQo+ID4+ICsgICAgV2l0 aCBsY29yZSB2YXJpYWJsZXMsIGRhdGEgaXMgb3JnYW5pemVkIHNwYXRpYWxseSBvbiBhIHBlci1s Y29yZQ0KPiA+PiArICAgIGJhc2lzLCByYXRoZXIgdGhhbiBwZXIgbGlicmFyeSBvciBQTUQsIGF2 b2lkaW5nIHRoZSBuZWVkIGZvcg0KPiBjYWNoZQ0KPiA+PiArICAgIGFsaWduaW5nIChvciBSVEVf Q0FDSEVfR1VBUkRpbmcpIGRhdGEgc3RydWN0dXJlcywgd2hpY2ggaW4gdHVybg0KPiA+PiArICAg IHJlZHVjZXMgQ1BVIGNhY2hlIGludGVybmFsIGZyYWdtZW50YXRpb24sIGltcHJvdmluZyBwZXJm b3JtYW5jZS4NCj4gPj4gKw0KPiA+PiArICAgIExjb3JlIHZhcmlhYmxlcyBhcmUgc2ltaWxhciB0 byB0aHJlYWQtbG9jYWwgc3RvcmFnZSAoVExTLCBlLmcuLA0KPiA+PiArICAgIEMxMSBfVGhyZWFk X2xvY2FsKSwgYnV0IGRlY291cGxpbmcgdGhlIHZhbHVlcycgbGlmZSB0aW1lIGZyb20NCj4gdGhh dA0KPiA+PiArICAgIG9mIHRoZSB0aHJlYWRzLg0KPiA+DQo+ID4gV2hlbiByZWZlcnJpbmcgdG8g VExTLCB5b3UgbWlnaHQgd2FudCB0byBjbGFyaWZ5IHRoYXQgbGNvcmUgdmFyaWFibGVzDQo+IGFy ZSBub3QgaW5zdGFudGlhdGVkIGZvciB1bnJlZ2lzdGVyZWQgdGhyZWFkcy4NCj4gPg0KPiANCj4g SXNuJ3QgdGhhdCBjbGVhciBmcm9tIHRoZSBmaXJzdCBwYXJhZ3JhcGg/IEFsdGhvdWdoIGl0IHNo b3VsZCBzYXkgInBlcg0KPiBsY29yZSBpZCIsIHJhdGhlciB0aGFuICJwZXIgbGNvcmUuIg0KDQpZ ZXMsIGFsbW9zdC4NCkJ1dCBpbiB0aGlzIHBhcmFncmFwaCwgd2hlbiB5b3UgbWVudGlvbiB0aGF0 IHRoZXkgYXJlIHNpbWlsYXIgdG8gVExTLCBzb21lb25lIG1pZ2h0IG5vdCBjYXRjaCB0aGF0IGl0 IHN0aWxsIGFwcGxpZXMgKHRoYXQgdGhleSBvbmx5IGFyZSBpbnN0YW50aWF0ZWQgZm9yIGxjb3Jl cyBhbmQgbm90IGFsbCB0aHJlYWRzKS4gU28gY2xhcmlmeSBvbmUgZXh0cmEgdGltZSwganVzdCB0 byBlbnN1cmUgdGhhdCBldmVyeW9uZSBnZXRzIGl0Lg0KDQo+IA0KPiA+DQo+ID4+ICtzdGF0aWMg dm9pZCAqbGNvcmVfYnVmZmVyOw0KPiA+PiArc3RhdGljIHNpemVfdCBvZmZzZXQgPSBSVEVfTUFY X0xDT1JFX1ZBUjsNCj4gPj4gKw0KPiA+PiArc3RhdGljIHZvaWQgKg0KPiA+PiArbGNvcmVfdmFy X2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pDQo+ID4+ICt7DQo+ID4+ICsJdm9pZCAq aGFuZGxlOw0KPiA+PiArCXZvaWQgKnZhbHVlOw0KPiA+PiArDQo+ID4+ICsJb2Zmc2V0ID0gUlRF X0FMSUdOX0NFSUwob2Zmc2V0LCBhbGlnbik7DQo+ID4+ICsNCj4gPj4gKwlpZiAob2Zmc2V0ICsg c2l6ZSA+IFJURV9NQVhfTENPUkVfVkFSKSB7DQo+ID4+ICsJCWxjb3JlX2J1ZmZlciA9IGFsaWdu ZWRfYWxsb2MoUlRFX0NBQ0hFX0xJTkVfU0laRSwNCj4gPj4gKwkJCQkJICAgICBMQ09SRV9CVUZG RVJfU0laRSk7DQo+ID4+ICsJCVJURV9WRVJJRlkobGNvcmVfYnVmZmVyICE9IE5VTEwpOw0KPiA+ PiArDQo+ID4+ICsJCW9mZnNldCA9IDA7DQo+ID4+ICsJfQ0KPiA+DQo+ID4gVG8gZGV0ZXJtaW5l IGlmIHRoZSBsY29yZV9idWZmZXIgbWVtb3J5IHNob3VsZCBiZSBhbGxvY2F0ZWQsIHdoeSBub3QN Cj4ganVzdCBjaGVjayBpZiBsY29yZV9idWZmZXIgPT0gTlVMTD8NCj4gDQo+IEJlY2F1c2UgaXQg bWF5IGJlIHRoZSBjYXNlLCBsY29yZV9idWZmZXIgaXMgbm9uLU5VTEwgYnV0IHRoZSByZW1haW5p bmcNCj4gc3BhY2UgaXMgdG9vIHNtYWxsIHRvIHNlcnZpY2UgdGhlIGFsbG9jYXRpb24uDQoNClRo ZXJlJ3Mgbm8gZXJyb3IgaGFuZGxpbmcgb2YgdGhhdCBjYXNlLiBZb3Ugc2ltcGx5IGZvcmdldCBh Ym91dCB0aGUgYWxsb2NhdGVkIG1lbW9yeSwgYW5kIGJlaGF2ZSBsaWtlIGluaXRpYWwgYWxsb2Nh dGlvbi9pbml0aWFsaXphdGlvbi4NCg0KPiANCj4gPiBUaGVuIG9mZnNldCB3b3VsZG4ndCBuZWVk IGFuIGluaXRpYWwgdmFsdWUgb2YgUlRFX01BWF9MQ09SRV9WQVIuDQo+ID4NCj4gPj4gKw0KPiA+ PiArCWhhbmRsZSA9IFJURV9QVFJfQUREKGxjb3JlX2J1ZmZlciwgb2Zmc2V0KTsNCj4gPj4gKw0K PiA+PiArCW9mZnNldCArPSBzaXplOw0KPiA+PiArDQo+ID4+ICsJUlRFX0xDT1JFX1ZBUl9GT1JF QUNIX1ZBTFVFKHZhbHVlLCBoYW5kbGUpDQo+ID4+ICsJCW1lbXNldCh2YWx1ZSwgMCwgc2l6ZSk7 DQo+ID4+ICsNCj4gPj4gKwlFQUxfTE9HKERFQlVHLCAiQWxsb2NhdGVkICUiUFJJdVBUUiIgYnl0 ZXMgb2YgcGVyLWxjb3JlIGRhdGEgd2l0aA0KPiBhICINCj4gPj4gKwkJIiUiUFJJdVBUUiItYnl0 ZSBhbGlnbm1lbnQiLCBzaXplLCBhbGlnbik7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gaGFuZGxl Ow0KPiA+PiArfQ0KPiA+DQo+ID4NCj4gPj4gKy8qKg0KPiA+PiArICogQGZpbGUNCj4gPj4gKyAq DQo+ID4+ICsgKiBSVEUgUGVyLWxjb3JlIGlkIHZhcmlhYmxlcw0KPiA+DQo+ID4gU3VnZ2VzdCBt ZW50aW9uaW5nIHRoZSBzaG9ydCBmb3JtIHRvbywgZS5nLjoNCj4gPiAiUlRFIFBlci1sY29yZSBp ZCB2YXJpYWJsZXMgKFJURSBMY29yZSB2YXJpYWJsZXMpIg0KPiANCj4gV2hhdCBhYm91dCBqdXN0 ICJSVEUgTGNvcmUgdmFyaWFibGVzIj8NCg0KKzENCg0KPiANCj4gRXhhY3RseSB3aGF0IHRoZXkg YXJlIGlzIHRob3JvdWdobHkgZGVzY3JpYmVkIGluIHRoZSB0ZXh0IHRoYXQgZm9sbG93cy4NCj4g DQo+ID4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIEFQSSBwcm92aWRlcyBhIG1lY2hhbmlzbSB0 byBjcmVhdGUgYW5kIGFjY2VzcyBwZXItbGNvcmUgaWQNCj4gPj4gKyAqIHZhcmlhYmxlcyBpbiBh IHNwYWNlLSBhbmQgY3ljbGUtZWZmaWNpZW50IG1hbm5lci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBB IHBlci1sY29yZSBpZCB2YXJpYWJsZSAob3IgbGNvcmUgdmFyaWFibGUgZm9yIHNob3J0KSBoYXMg b25lDQo+IHZhbHVlDQo+ID4+ICsgKiBmb3IgZWFjaCBFQUwgdGhyZWFkIGFuZCByZWdpc3RlcmVk IG5vbi1FQUwgdGhyZWFkLg0KPiA+DQo+ID4gQW5kIHNlcnZpY2UgdGhyZWFkLg0KPiANCj4gU2Vy dmljZSB0aHJlYWRzIGFyZSBFQUwgdGhyZWFkcywgb3IsIGF0IGEgYmFyZSBtaW5pbXVtLCBtdXN0 IGhhdmUgYQ0KPiBsY29yZSBpZCwgYW5kIHRodXMgbXVzdCBiZSByZWdpc3RlcmVkLg0KDQpTZXJ2 aWNlIHRocmVhZHMgaGF2ZSBhbiBsY29yZSBpZCwgeWVzLCBidXQgdGhleSBoYXZlIHJ0ZV9sY29y ZV9yb2xlX3QgZW51bSB2YWx1ZSBST0xFX1NFUlZJQ0UsIHdoaWNoIGRpZmZlcnMgZnJvbSB0aGF0 IG9mIEVBTCB0aHJlYWRzIChST0xFX0VBTCkuIFJlZ2lzdGVyZWQgbm9uLUVBTCB0aHJlYWRzIGhh dmUgeWV0IGFub3RoZXIgcm9sZSwgUk9MRV9OT05fRUFMLg0KDQo+IA0KPiA+DQo+ID4+ICsgKiBU aGVyZSBpcyBvbmUNCj4gPj4gKyAqIGNvcHkgZm9yIGVhY2ggY3VycmVudCBhbmQgZnV0dXJlIGxj b3JlIGlkLWVxdWlwcGVkIHRocmVhZCwgd2l0aA0KPiB0aGUNCj4gPg0KPiA+ICJvbmUgY29weSIg LT4gIm9uZSBpbnN0YW5jZSINCj4gPg0KPiANCj4gRml4ZWQuDQo+IA0KPiA+PiArICogdG90YWwg bnVtYmVyIG9mIGNvcGllcyBhbW91bnRpbmcgdG8gQGMgUlRFX01BWF9MQ09SRS4gVGhlIHZhbHVl DQo+IG9mDQo+ID4NCj4gPiAiY29waWVzIiAtPiAiaW5zdGFuY2VzIg0KPiA+DQo+IA0KPiBPSywg SSdsbCByZXBocmFzZSB0aGF0IHNlbnRlbmNlLg0KPiANCj4gPj4gKyAqIGFuIGxjb3JlIHZhcmlh YmxlIGZvciBhIHBhcnRpY3VsYXIgbGNvcmUgaWQgaXMgaW5kZXBlbmRlbnQgZnJvbQ0KPiA+PiAr ICogb3RoZXIgdmFsdWVzIChmb3Igb3RoZXIgbGNvcmUgaWRzKSB3aXRoaW4gdGhlIHNhbWUgbGNv cmUNCj4gdmFyaWFibGUuDQo+ID4+ICsgKg0KPiA+PiArICogSW4gb3JkZXIgdG8gYWNjZXNzIHRo ZSB2YWx1ZXMgb2YgYW4gbGNvcmUgdmFyaWFibGUsIGEgaGFuZGxlIGlzDQo+ID4+ICsgKiB1c2Vk LiBUaGUgdHlwZSBvZiB0aGUgaGFuZGxlIGlzIGEgcG9pbnRlciB0byB0aGUgdmFsdWUncyB0eXBl DQo+ID4+ICsgKiAoZS5nLiwgZm9yIEBjIHVpbnQzMl90IGxjb3JlIHZhcmlhYmxlLCB0aGUgaGFu ZGxlIGlzIGENCj4gPj4gKyAqIDxjb2RlPnVpbnQzMl90ICo8L2NvZGU+LiBUaGUgaGFuZGxlciB0 eXBlIGlzIHVzZWQgdG8gaW5mb3JtIHRoZQ0KPiA+DQo+ID4gVHlwbzogImhhbmRsZXIiIC0+ICJo YW5kbGUiLCBJIHRoaW5rIDotLw0KPiA+IEZvdW5kIHRoaXMgdHlwbyBtdWx0aXBsZSB0aW1lczsg c2VhcmNoLXJlcGxhY2UuDQo+IA0KPiBGaXhlZC4NCj4gDQo+ID4NCj4gPj4gKyAqIGFjY2VzcyBt YWNyb3MgdGhlIHR5cGUgb2YgdGhlIHZhbHVlcy4gQSBoYW5kbGUgbWF5IGJlIHBhc3NlZA0KPiA+ PiArICogYmV0d2VlbiBtb2R1bGVzIGFuZCB0aHJlYWRzIGp1c3QgbGlrZSBhbnkgcG9pbnRlciwg YnV0IGl0cyB2YWx1ZQ0KPiA+PiArICogbXVzdCBiZSB0cmVhdGVkIGFzIGEgYW4gb3BhcXVlIGlk ZW50aWZpZXIuIEFuIGFsbG9jYXRlZCBoYW5kbGUNCj4gPj4gKyAqIG5ldmVyIGhhcyB0aGUgdmFs dWUgTlVMTC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAYiBDcmVhdGlvbg0KPiA+PiArICoNCj4gPj4g KyAqIEFuIGxjb3JlIHZhcmlhYmxlIGlzIGNyZWF0ZWQgaW4gdHdvIHN0ZXBzOg0KPiA+PiArICog IDEuIERlZmluZSBhIGxjb3JlIHZhcmlhYmxlIGhhbmRsZSBieSB1c2luZyBAcmVmDQo+IFJURV9M Q09SRV9WQVJfSEFORExFLg0KPiA+PiArICogIDIuIEFsbG9jYXRlIGxjb3JlIHZhcmlhYmxlIHN0 b3JhZ2UgYW5kIGluaXRpYWxpemUgdGhlIGhhbmRsZQ0KPiB3aXRoDQo+ID4+ICsgKiAgICAgYSB1 bmlxdWUgaWRlbnRpZmllciBieSBAcmVmIFJURV9MQ09SRV9WQVJfQUxMT0Mgb3INCj4gPj4gKyAq ICAgICBAcmVmIFJURV9MQ09SRV9WQVJfSU5JVC4gQWxsb2NhdGlvbiBnZW5lcmFsbHkgb2NjdXJz IHRoZSB0aW1lDQo+IG9mDQo+ID4+ICsgKiAgICAgbW9kdWxlIGluaXRpYWxpemF0aW9uLCBidXQg bWF5IGJlIGRvbmUgYXQgYW55IHRpbWUuDQo+ID4+ICsgKg0KPiA+PiArICogQW4gbGNvcmUgdmFy aWFibGUgaXMgbm90IHRpZWQgdG8gdGhlIG93bmluZyB0aHJlYWQncyBsaWZldGltZS4NCj4gSXQn cw0KPiA+PiArICogYXZhaWxhYmxlIGZvciB1c2UgYnkgYW55IHRocmVhZCBpbW1lZGlhdGVseSBh ZnRlciBoYXZpbmcgYmVlbg0KPiA+PiArICogYWxsb2NhdGVkLCBhbmQgY29udGludWVzIHRvIGJl IGF2YWlsYWJsZSB0aHJvdWdob3V0IHRoZSBsaWZldGltZQ0KPiBvZg0KPiA+PiArICogdGhlIEVB TC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBMY29yZSB2YXJpYWJsZXMgY2Fubm90IGFuZCBuZWVkIG5v dCBiZSBmcmVlZC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAYiBBY2Nlc3MNCj4gPj4gKyAqDQo+ID4+ ICsgKiBUaGUgdmFsdWUgb2YgYW55IGxjb3JlIHZhcmlhYmxlIGZvciBhbnkgbGNvcmUgaWQgbWF5 IGJlIGFjY2Vzc2VkDQo+ID4+ICsgKiBmcm9tIGFueSB0aHJlYWQgKGluY2x1ZGluZyB1bnJlZ2lz dGVyZWQgdGhyZWFkcyksIGJ1dCBpdCBzaG91bGQNCj4gPj4gKyAqIG9ubHkgYmUgKmZyZXF1ZW50 bHkqIHJlYWQgZnJvbSBvciB3cml0dGVuIHRvIGJ5IHRoZSBvd25lci4NCj4gPj4gKyAqDQo+ID4+ ICsgKiBWYWx1ZXMgb2YgdGhlIHNhbWUgbGNvcmUgdmFyaWFibGUgYnV0IG93bmVkIGJ5IHRvIGRp ZmZlcmVudCBsY29yZQ0KPiA+DQo+ID4gVHlwbzogdG8gLT4gdHdvDQo+ID4NCj4gDQo+IEZpeGVk Lg0KPiANCj4gPj4gKyAqIGlkcyBtYXkgYmUgZnJlcXVlbnRseSByZWFkIG9yIHdyaXR0ZW4gYnkg dGhlIG93bmVycyB3aXRob3V0DQo+IHJpc2tpbmcNCj4gPj4gKyAqIGZhbHNlIHNoYXJpbmcuDQo+ ID4+ICsgKg0KPiA+PiArICogQW4gYXBwcm9wcmlhdGUgc3luY2hyb25pemF0aW9uIG1lY2hhbmlz bSAoZS5nLiwgYXRvbWljIGxvYWRzIGFuZA0KPiA+PiArICogc3RvcmVzKSBzaG91bGQgZW1wbG95 ZWQgdG8gYXNzdXJlIHRoZXJlIGFyZSBubyBkYXRhIHJhY2VzIGJldHdlZW4NCj4gPj4gKyAqIHRo ZSBvd25pbmcgdGhyZWFkIGFuZCBhbnkgbm9uLW93bmVyIHRocmVhZHMgYWNjZXNzaW5nIHRoZSBz YW1lDQo+ID4+ICsgKiBsY29yZSB2YXJpYWJsZSBpbnN0YW5jZS4NCj4gPj4gKyAqDQo+ID4+ICsg KiBUaGUgdmFsdWUgb2YgdGhlIGxjb3JlIHZhcmlhYmxlIGZvciBhIHBhcnRpY3VsYXIgbGNvcmUg aWQgaXMNCj4gPj4gKyAqIGFjY2Vzc2VkIHVzaW5nIEByZWYgUlRFX0xDT1JFX1ZBUl9MQ09SRV9W QUxVRS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBBIGNvbW1vbiBwYXR0ZXJuIGlzIGZvciBhbiBFQUwg dGhyZWFkIG9yIGEgcmVnaXN0ZXJlZCBub24tRUFMDQo+ID4+ICsgKiB0aHJlYWQgdG8gYWNjZXNz IGl0cyBvd24gbGNvcmUgdmFyaWFibGUgdmFsdWUuIEZvciB0aGlzIHB1cnBvc2UsDQo+IGENCj4g Pj4gKyAqIHNob3J0LWhhbmQgZXhpc3RzIGluIHRoZSBmb3JtIG9mIEByZWYgUlRFX0xDT1JFX1ZB Ul9WQUxVRS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBBbHRob3VnaCB0aGUgaGFuZGxlIChhcyBkZWZp bmVkIGJ5IEByZWYgUlRFX0xDT1JFX1ZBUl9IQU5ETEUpIGlzDQo+IGENCj4gPj4gKyAqIHBvaW50 ZXIgd2l0aCB0aGUgc2FtZSB0eXBlIGFzIHRoZSB2YWx1ZSwgaXQgbWF5IG5vdCBiZSBkaXJlY3Rs eQ0KPiA+PiArICogZGVyZWZlcmVuY2VkIGFuZCBtdXN0IGJlIHRyZWF0ZWQgYXMgYW4gb3BhcXVl IGlkZW50aWZpZXIuDQo+ID4+ICsgKg0KPiA+PiArICogTGNvcmUgdmFyaWFibGUgaGFuZGxlcyBh bmQgdmFsdWUgcG9pbnRlcnMgbWF5IGJlIGZyZWVseSBwYXNzZWQNCj4gPj4gKyAqIGJldHdlZW4g ZGlmZmVyZW50IHRocmVhZHMuDQo+ID4+ICsgKg0KPiA+PiArICogQGIgU3RvcmFnZQ0KPiA+PiAr ICoNCj4gPj4gKyAqIEFuIGxjb3JlIHZhcmlhYmxlJ3MgdmFsdWVzIG1heSBieSBvZiBhIHByaW1p dGl2ZSB0eXBlIGxpa2UgQGMNCj4gaW50LA0KPiA+DQo+ID4gVHdvIHR5cG9zOiAidmFsdWVzIG1h eSBieSIgLT4gInZhbHVlIG1heSBiZSINCj4gPg0KPiANCj4gVGhhdCdzIG5vdCBhIHR5cG8uIEFu IGxjb3JlIHZhcmlhYmxlIHRha2Ugb24gbXVsdGlwbGUgdmFsdWVzLCBvbmUgZm9yDQo+IGVhY2gg bGNvcmUgaWQuIFRoYXQgc2FpZCwgSSBndWVzcyB5b3UgY291bGQgcmVmZXIgdG8gdGhlIHdob2xl IHRoaW5nDQo+ICh0aGUgc2V0IG9mIHZhbHVlcykgYXMgdGhlICJ2YWx1ZSIgYXMgd2VsbC4NCg0K T0suIFJlYWRpbmcgaXQgdGhlIHdheSB5b3UgZXhwbGFpbiwgSSBnZXQgaXQuIE5vIHR5cG8uDQoN Cj4gDQo+ID4+ICsgKiBidXQgd291bGQgbW9yZSB0eXBpY2FsbHkgYmUgYSBAYyBzdHJ1Y3QuDQo+ ID4+ICsgKg0KPiA+PiArICogVGhlIGxjb3JlIHZhcmlhYmxlIGhhbmRsZSBpbnRyb2R1Y2VzIGEg cGVyLXZhcmlhYmxlIChub3QNCj4gPj4gKyAqIHBlci12YWx1ZS9wZXItbGNvcmUgaWQpIG92ZXJo ZWFkIG9mIEBjIHNpemVvZih2b2lkICopIGJ5dGVzLCBzbw0KPiA+PiArICogdGhlcmUgYXJlIHNv bWUgbWVtb3J5IGZvb3RwcmludCBnYWlucyB0byBiZSBtYWRlIGJ5IG9yZ2FuaXppbmcNCj4gYWxs DQo+ID4+ICsgKiBwZXItbGNvcmUgaWQgZGF0YSBmb3IgYSBwYXJ0aWN1bGFyIG1vZHVsZSBhcyBv bmUgbGNvcmUgdmFyaWFibGUNCj4gPj4gKyAqIChlLmcuLCBhcyBhIHN0cnVjdCkuDQo+ID4+ICsg Kg0KPiA+PiArICogQW4gYXBwbGljYXRpb24gbWF5IGNob29zZSB0byBkZWZpbmUgYW4gbGNvcmUg dmFyaWFibGUgaGFuZGxlLA0KPiB3aGljaA0KPiA+PiArICogaXQgdGhlbiBpdCBnb2VzIG9uIHRv IG5ldmVyIGFsbG9jYXRlLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBzaXplIG9mIGEgbGNvcmUg dmFyaWFibGUncyB2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiB0aGUgRFBESw0KPiA+PiArICogYnVp bGQtdGltZSBjb25zdGFudCBAYyBSVEVfTUFYX0xDT1JFX1ZBUi4NCj4gPj4gKyAqDQo+ID4+ICsg KiBUaGUgbGNvcmUgdmFyaWFibGUgYXJlIHN0b3JlZCBpbiBhIHNlcmllcyBvZiBsY29yZSBidWZm ZXJzLCB3aGljaA0KPiA+PiArICogYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBsaWJjIGhlYXAuIEhl YXAgYWxsb2NhdGlvbiBmYWlsdXJlcyBhcmUNCj4gPj4gKyAqIHRyZWF0ZWQgYXMgZmF0YWwuDQo+ ID4+ICsgKg0KPiA+PiArICogTGNvcmUgdmFyaWFibGVzIHNob3VsZCBnZW5lcmFsbHkgKm5vdCog YmUgQHJlZg0KPiBfX3J0ZV9jYWNoZV9hbGlnbmVkDQo+ID4+ICsgKiBhbmQgbmVlZCAqbm90KiBp bmNsdWRlIGEgQHJlZiBSVEVfQ0FDSEVfR1VBUkQgZmllbGQsIHNpbmNlIHRoZQ0KPiB1c2UNCj4g Pj4gKyAqIG9mIHRoZXNlIGNvbnN0cnVjdHMgYXJlIGRlc2lnbmVkIHRvIGF2b2lkIGZhbHNlIHNo YXJpbmcuIEluIHRoZQ0KPiA+PiArICogY2FzZSBvZiBhbiBsY29yZSB2YXJpYWJsZSBpbnN0YW5j ZSwgdGhlIHRocmVhZCBtb3N0IHJlY2VudGx5DQo+ID4+ICsgKiBhY2Nlc3NpbmcgbmVhcmJ5IGRh dGEgc3RydWN0dXJlcyBzaG91bGQgYWxtb3N0LWFsd2F5cyB0aGUgbGNvcmUNCj4gPg0KPiA+IE1p c3Npbmcgd29yZDogc2hvdWxkIGFsbW9zdC1hbHdheXMgKmJlKiB0aGUgbGNvcmUgdmFyaWFibGVz JyBvd25lci4NCj4gPg0KPiANCj4gRml4ZWQuDQo+IA0KPiA+DQo+ID4+ICsgKiB2YXJpYWJsZXMn IG93bmVyLiBBZGRpbmcgcGFkZGluZyB3aWxsIGluY3JlYXNlIHRoZSBlZmZlY3RpdmUNCj4gbWVt b3J5DQo+ID4+ICsgKiB3b3JraW5nIHNldCBzaXplLCBwb3RlbnRpYWxseSByZWR1Y2luZyBwZXJm b3JtYW5jZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBMY29yZSB2YXJpYWJsZSB2YWx1ZXMgdGFrZSBv biBhbiBpbml0aWFsIHZhbHVlIG9mIHplcm8uDQo+ID4+ICsgKg0KPiA+PiArICogQGIgRXhhbXBs ZQ0KPiA+PiArICoNCj4gPj4gKyAqIEJlbG93IGlzIGFuIGV4YW1wbGUgb2YgdGhlIHVzZSBvZiBh biBsY29yZSB2YXJpYWJsZToNCj4gPj4gKyAqDQo+ID4+ICsgKiBAY29kZXsuY30NCj4gPj4gKyAq IHN0cnVjdCBmb29fbGNvcmVfc3RhdGUgew0KPiA+PiArICogICAgICAgICBpbnQgYTsNCj4gPj4g KyAqICAgICAgICAgbG9uZyBiOw0KPiA+PiArICogfTsNCj4gPj4gKyAqDQo+ID4+ICsgKiBzdGF0 aWMgUlRFX0xDT1JFX1ZBUl9IQU5ETEUoc3RydWN0IGZvb19sY29yZV9zdGF0ZSwNCj4gbGNvcmVf c3RhdGVzKTsNCj4gPj4gKyAqDQo+ID4+ICsgKiBsb25nIGZvb19nZXRfYV9wbHVzX2Iodm9pZCkN Cj4gPj4gKyAqIHsNCj4gPj4gKyAqICAgICAgICAgc3RydWN0IGZvb19sY29yZV9zdGF0ZSAqc3Rh dGUgPQ0KPiBSVEVfTENPUkVfVkFSX1ZBTFVFKGxjb3JlX3N0YXRlcyk7DQo+ID4+ICsgKg0KPiA+ PiArICogICAgICAgICByZXR1cm4gc3RhdGUtPmEgKyBzdGF0ZS0+YjsNCj4gPj4gKyAqIH0NCj4g Pj4gKyAqDQo+ID4+ICsgKiBSVEVfSU5JVChydGVfZm9vX2luaXQpDQo+ID4+ICsgKiB7DQo+ID4+ ICsgKiAgICAgICAgIFJURV9MQ09SRV9WQVJfQUxMT0MobGNvcmVfc3RhdGVzKTsNCj4gPj4gKyAq DQo+ID4+ICsgKiAgICAgICAgIHN0cnVjdCBmb29fbGNvcmVfc3RhdGUgKnN0YXRlOw0KPiA+PiAr ICogICAgICAgICBSVEVfTENPUkVfVkFSX0ZPUkVBQ0hfVkFMVUUoc3RhdGUsIGxjb3JlX3N0YXRl cykgew0KPiA+PiArICogICAgICAgICAgICAgICAgIChpbml0aWFsaXplICdzdGF0ZScpDQo+ID4N Cj4gPiBDb25zaWRlcjogKGluaXRpYWxpemUgJ3N0YXRlJykgLT4gLyogaW5pdGlhbGl6ZSAnc3Rh dGUnICovDQo+ID4NCj4gDQo+IEkgdGhpbmsgSSB0cmllZCB0aGF0LCBhbmQgaXQgZmFpbGVkIGJl Y2F1c2UgdGhlIGNvbXBpbGVyIGRpZG4ndCBsaWtlDQo+IG5lc3RlZCBjb21tZW50cy4NCg0KT0ss IG5vIG9iamVjdGlvbnMuIEp1c3QgbGVhdmUgaXQgYXMgaXMuDQoNCj4gDQo+ID4+ICsgKiAgICAg ICAgIH0NCj4gPj4gKyAqDQo+ID4+ICsgKiAgICAgICAgIChvdGhlciBpbml0aWFsaXphdGlvbikN Cj4gPg0KPiA+IENvbnNpZGVyOiAob3RoZXIgaW5pdGlhbGl6YXRpb24pIC0+IC8qIG90aGVyIGlu aXRpYWxpemF0aW9uICovDQo+ID4NCj4gPj4gKyAqIH0NCj4gPj4gKyAqIEBlbmRjb2RlDQo+ID4+ ICsgKg0KPiA+PiArICoNCj4gPj4gKyAqIEBiIEFsdGVybmF0aXZlcw0KPiA+PiArICoNCj4gPj4g KyAqIExjb3JlIHZhcmlhYmxlcyBhcmUgZGVzaWduZWQgdG8gcmVwbGFjZSBhIHBhdHRlcm4gZXhl bXBsaWZpZWQNCj4gYmVsb3c6DQo+ID4+ICsgKiBAY29kZXsuY30NCj4gPj4gKyAqIHN0cnVjdCBf X3J0ZV9jYWNoZV9hbGlnbmVkIGZvb19sY29yZV9zdGF0ZSB7DQo+ID4+ICsgKiAgICAgICAgIGlu dCBhOw0KPiA+PiArICogICAgICAgICBsb25nIGI7DQo+ID4+ICsgKiAgICAgICAgIFJURV9DQUNI RV9HVUFSRDsNCj4gPj4gKyAqIH07DQo+ID4+ICsgKg0KPiA+PiArICogc3RhdGljIHN0cnVjdCBm b29fbGNvcmVfc3RhdGUgbGNvcmVfc3RhdGVzW1JURV9NQVhfTENPUkVdOw0KPiA+PiArICogQGVu ZGNvZGUNCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIHNjaGVtZSBpcyBzaW1wbGUgYW5kIGVmZmVj dGl2ZSwgYnV0IGhhcyBvbmUgZHJhd2JhY2s6IHRoZQ0KPiBkYXRhDQo+ID4+ICsgKiBpcyBvcmdh bml6ZWQgc28gdGhhdCBvYmplY3RzIHJlbGF0ZWQgdG8gYWxsIGxjb3JlcyBmb3IgYQ0KPiBwYXJ0 aWN1bGFyDQo+ID4+ICsgKiBtb2R1bGUgaXMga2VwdCBjbG9zZSBpbiBtZW1vcnkuIEF0IGEgYmFy ZSBtaW5pbXVtLCB0aGlzIGZvcmNlcw0KPiB0aGUNCj4gPj4gKyAqIHVzZSBvZiBjYWNoZS1saW5l IGFsaWdubWVudCB0byBhdm9pZCBmYWxzZSBzaGFyaW5nLiBXaXRoIENQVQ0KPiA+DQo+ID4gQ29u c2lkZXIgYWRkaW5nOiB1c2Ugb2YgKnBhZGRpbmcgdG8qIGNhY2hlLWxpbmUgYWxpZ25tZW50DQo+ ID4gTXkgcG9pbnQgaGVyZSBpczoNCj4gPiBUaGlzIHNlbnRlbmNlIHNob3VsZCBzb21laG93IGlu Y2x1ZGUgdGhlIHdvcmQgInBhZGRpbmciLg0KPiANCj4gSSdtIG5vdCBzdXJlIGV2ZXJ5b25lIHRo aW5rcyBhYm91dCBfX3J0ZV9jYWNoZV9hbGlnbmVkIG9yIGNhY2hlLWFsaWduZWQNCj4gaGVhcCBh bGxvY2F0aW9ucyBhcyAicGFkZGVkLiINCj4gDQo+ID4gVGhpcyBwYXJhZ3JhcGggaXMgbm90IG9u bHkgYWJvdWQgY2FjaGUgbGluZSBhbGlnbm1lbnQsIGl0IGlzIHByaW1hcmlseQ0KPiBhYm91dCBw YWRkaW5nLg0KPiA+DQo+IA0KPiAiQXQgYSBiYXJlIG1pbmltdW0sIHRoaXMgcmVxdWlyZXMgc2l6 aW5nIGRhdGEgc3RydWN0dXJlcyAoZS5nLiwgdXNpbmcNCj4gYF9fcnRlX2NhY2hlX2FsaWduZWRg KSB0byBhbiBldmVuIG51bWJlciBvZiBjYWNoZSBsaW5lcyB0byBhdm9pZCBmYWxzZQ0KPiBzaGFy aW5nLiINCj4gDQo+IEhvdyBhYm91dCB0aGlzPw0KDQpPSy4gU2l6aW5nIG1pZ2h0IGltcGx5IHBh ZGRpbmcsIHNvIGl0IHNlcnZlcyB0aGUgcG9pbnQgSSB3YXMgdGFyZ2V0aW5nLg0KQnV0ICJldmVu IG51bWJlciIgLT4gIndob2xlIG51bWJlciIuIFRoZSBudW1iZXIgbWlnaHQgYmUgb2RkLiA6LSkN Cg0KPiANCj4gPj4gKyAqIGhhcmR3YXJlIHByZWZldGNoaW5nIGFuZCBtZW1vcnkgbG9hZHMgcmVz dWx0aW5nIGZyb20gc3BlY3VsYXRpdmUNCj4gPj4gKyAqIGV4ZWN1dGlvbiAoZnVuY3Rpb25zIHdo aWNoIHNlZW1pbmdseSBhcmUgZ2V0dGluZyBtb3JlIGVhZ2VyDQo+IGZhc3Rlcg0KPiA+PiArICog dGhhbiB0aGV5IGFyZSBnZXR0aW5nIG1vcmUgaW50ZWxsaWdlbnQpLCBvbmUgb3IgbW9yZSAiZ3Vh cmQiDQo+IGNhY2hlDQo+ID4+ICsgKiBsaW5lcyBtYXkgYmUgcmVxdWlyZWQgdG8gc2VwYXJhdGUg b25lIGxjb3JlJ3MgZGF0YSBmcm9tDQo+IGFub3RoZXIncy4NCj4gPj4gKyAqDQo+ID4+ICsgKiBM Y29yZSB2YXJpYWJsZXMgaGFzIHRoZSB1cHNpZGUgb2Ygd29ya2luZyB3aXRoLCBub3QgYWdhaW5z dCwgdGhlDQo+ID4NCj4gPiBUeXBvOiBoYXMgLT4gaGF2ZQ0KPiA+DQo+IA0KPiBGaXhlZC4NCj4g DQo+ID4+ICsgKiBDUFUncyBhc3N1bXB0aW9ucyBhbmQgZm9yIGV4YW1wbGUgbmV4dC1saW5lIHBy ZWZldGNoZXJzIG1heSB3ZWxsDQo+ID4+ICsgKiB3b3JrIHRoZSB3YXkgaXRzIGRlc2lnbmVycyBp bnRlbmRlZCAoaS5lLiwgdG8gdGhlIGJlbmVmaXQsIG5vdA0KPiA+PiArICogZGV0cmltZW50LCBv ZiBzeXN0ZW0gcGVyZm9ybWFuY2UpLg0KPiA+PiArICoNCj4gPj4gKyAqIEFub3RoZXIgYWx0ZXJu YXRpdmUgdG8gQHJlZiBydGVfbGNvcmVfdmFyLmggaXMgdGhlIEByZWYNCj4gPj4gKyAqIHJ0ZV9w ZXJfbGNvcmUuaCBBUEksIHdoaWNoIG1ha2UgdXNlIG9mIHRocmVhZC1sb2NhbCBzdG9yYWdlIChU TFMsDQo+ID4NCj4gPiBUeXBvOiBtYWtlIC0+IG1ha2VzID4NCj4gDQo+IEZpeGVkLg0KPiANCj4g Pj4gKyAqIGUuZy4sIEdDQyBfX3RocmVhZCBvciBDMTEgX1RocmVhZF9sb2NhbCkuIFRoZSBtYWlu IGRpZmZlcmVuY2VzDQo+ID4+ICsgKiBiZXR3ZWVuIGJ5IHVzaW5nIHRoZSB2YXJpb3VzIGZvcm1z IG9mIFRMUyAoZS5nLiwgQHJlZg0KPiA+PiArICogUlRFX0RFRklORV9QRVJfTENPUkUgb3IgX1Ro cmVhZF9sb2NhbCkgYW5kIHRoZSB1c2Ugb2YgbGNvcmUNCj4gPj4gKyAqIHZhcmlhYmxlcyBhcmU6 DQo+ID4+ICsgKg0KPiA+PiArICogICAqIFRoZSBleGlzdGVuY2UgYW5kIG5vbi1leGlzdGVuY2Ug b2YgYSB0aHJlYWQtbG9jYWwgdmFyaWFibGUNCj4gPj4gKyAqICAgICBpbnN0YW5jZSBmb2xsb3cg dGhhdCBvZiBwYXJ0aWN1bGFyIHRocmVhZCdzLiBUaGUgZGF0YSBjYW5ub3QNCj4gYmUNCj4gPg0K PiA+IFR5cG86ICJ0aHJlYWQncyIgLT4gInRocmVhZHMiLCBJIHRoaW5rLiA6LS8NCj4gPg0KPiAN Cj4gSXQncyBub3QgYSB0eXBvLg0KDQpPSy4NCg0KPiANCj4gPj4gKyAqICAgICBhY2Nlc3NlZCBi ZWZvcmUgdGhlIHRocmVhZCBoYXMgYmVlbiBjcmVhdGVkLCBub3IgYWZ0ZXIgaXQgaGFzDQo+ID4+ ICsgKiAgICAgZXhpdGVkLiBBcyBhIHJlc3VsdCwgdGhyZWFkLWxvY2FsIHZhcmlhYmxlcyBtdXN0 IGluaXRpYWxpemVkDQo+IGluDQo+ID4NCj4gPiBNaXNzaW5nIHdvcmQ6IG11c3QgKmJlKiBpbml0 aWFsaXplZA0KPiA+DQo+IA0KPiBGaXhlZC4NCj4gDQo+ID4+ICsgKiAgICAgYSAibGF6eSIgbWFu bmVyIChlLmcuLCBhdCB0aGUgcG9pbnQgb2YgdGhyZWFkIGNyZWF0aW9uKS4NCj4gTGNvcmUNCj4g Pj4gKyAqICAgICB2YXJpYWJsZXMgbWF5IGJlIGFjY2Vzc2VkIGltbWVkaWF0ZWx5IGFmdGVyIGhh dmluZyBiZWVuDQo+ID4+ICsgKiAgICAgYWxsb2NhdGVkICh3aGljaCBtYXkgYmUgcHJpb3IgYW55 IHRocmVhZCBiZXlvbmQgdGhlIG1haW4NCj4gPj4gKyAqICAgICB0aHJlYWQgaXMgcnVubmluZyku DQo+ID4+ICsgKiAgICogQSB0aHJlYWQtbG9jYWwgdmFyaWFibGUgaXMgZHVwbGljYXRlZCBhY3Jv c3MgYWxsIHRocmVhZHMgaW4NCj4gdGhlDQo+ID4+ICsgKiAgICAgcHJvY2VzcywgaW5jbHVkaW5n IHVucmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZHMgKGkuZS4sDQo+ID4+ICsgKiAgICAgInJlZ3Vs YXIiIHRocmVhZHMpLiBGb3IgRFBESyBhcHBsaWNhdGlvbnMgaGVhdmlseSByZWx5aW5nIG9uDQo+ ID4+ICsgKiAgICAgbXVsdGktdGhyZWFkaW5nIChpbiBjb25qdW5jdGlvbiB0byBEUERLJ3MgIm9u ZSB0aHJlYWQgcGVyDQo+IGNvcmUiDQo+ID4+ICsgKiAgICAgcGF0dGVybiksIGVpdGhlciBieSBo YXZpbmcgbWFueSBjb25jdXJyZW50IHRocmVhZHMgb3INCj4gPj4gKyAqICAgICBjcmVhdGluZy9k ZXN0cm95aW5nIHRocmVhZHMgYXQgYSBoaWdoIHJhdGUsIGFuIGV4Y2Vzc2l2ZSB1c2UNCj4gb2YN Cj4gPj4gKyAqICAgICB0aHJlYWQtbG9jYWwgdmFyaWFibGVzIG1heSBjYXVzZSBpbmVmZmljaWVu Y2llcyAoZS5nLiwNCj4gPj4gKyAqICAgICBpbmNyZWFzZWQgdGhyZWFkIGNyZWF0aW9uIG92ZXJo ZWFkIGR1ZSB0byB0aHJlYWQtbG9jYWwNCj4gc3RvcmFnZQ0KPiA+PiArICogICAgIGluaXRpYWxp emF0aW9uIG9yIGluY3JlYXNlZCB0b3RhbCBSQU0gZm9vdHByaW50IHVzYWdlKS4gTGNvcmUNCj4g Pj4gKyAqICAgICB2YXJpYWJsZXMgKm9ubHkqIGV4aXN0IGZvciB0aHJlYWRzIHdpdGggYW4gbGNv cmUgaWQuDQo+ID4+ICsgKiAgICogSWYgZGF0YSBpbiB0aHJlYWQtbG9jYWwgc3RvcmFnZSBtYXkg YmUgc2hhcmVkIGJldHdlZW4gdGhyZWFkcw0KPiA+PiArICogICAgIChpLmUuLCBjYW4gYSBwb2lu dGVyIHRvIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlIGJlIHBhc3NlZCB0bw0KPiA+PiArICogICAg IGFuZCBzdWNjZXNzZnVsbHkgZGVyZWZlcmVuY2VkIGJ5IG5vbi1vd25pbmcgdGhyZWFkKSBkZXBl bmRzDQo+IG9uDQo+ID4+ICsgKiAgICAgdGhlIGRldGFpbHMgb2YgdGhlIFRMUyBpbXBsZW1lbnRh dGlvbi4gV2l0aCBHQ0MgX190aHJlYWQgYW5kDQo+ID4+ICsgKiAgICAgR0NDIF9UaHJlYWRfbG9j YWwsIHN1Y2ggZGF0YSBzaGFyaW5nIGlzIHN1cHBvcnRlZC4gSW4gdGhlIEMxMQ0KPiA+PiArICog ICAgIHN0YW5kYXJkLCB0aGUgcmVzdWx0IG9mIGFjY2Vzc2luZyBhbm90aGVyIHRocmVhZCdzDQo+ ID4+ICsgKiAgICAgX1RocmVhZF9sb2NhbCBvYmplY3QgaXMgaW1wbGVtZW50YXRpb24tZGVmaW5l ZC4gTGNvcmUNCj4gdmFyaWFibGUNCj4gPj4gKyAqICAgICBpbnN0YW5jZXMgbWF5IGJlIGFjY2Vz c2VkIHJlbGlhYmx5IGJ5IGFueSB0aHJlYWQuDQo+ID4+ICsgKi8NCj4gPj4gKw0KPiA+PiArI2lu Y2x1ZGUgPHN0ZGRlZi5oPg0KPiA+PiArI2luY2x1ZGUgPHN0ZGFsaWduLmg+DQo+ID4+ICsNCj4g Pj4gKyNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX2NvbmZpZy5o Pg0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9sY29yZS5oPg0KPiA+PiArDQo+ID4+ICsjaWZkZWYgX19j cGx1c3BsdXMNCj4gPj4gK2V4dGVybiAiQyIgew0KPiA+PiArI2VuZGlmDQo+ID4+ICsNCj4gPj4g Ky8qKg0KPiA+PiArICogR2l2ZW4gdGhlIGxjb3JlIHZhcmlhYmxlIHR5cGUsIHByb2R1Y2VzIHRo ZSB0eXBlIG9mIHRoZSBsY29yZQ0KPiA+PiArICogdmFyaWFibGUgaGFuZGxlLg0KPiA+PiArICov DQo+ID4+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSEFORExFX1RZUEUodHlwZSkJCVwNCj4gPj4g Kwl0eXBlICoNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBEZWZpbmUgYSBsY29yZSB2YXJp YWJsZSBoYW5kbGUuDQo+ID4NCj4gPiBUeXBvOiAiYSBsY29yZSIgLT4gImFuIGxjb3JlIg0KPiA+ IEZvdW5kIHRoaXMgdHlwbyBtdWx0aXBsZSB0aW1lczsgc2VhcmNoLXJlcGxhY2UgImEgbGNvcmUi Lg0KPiA+DQo+IA0KPiBZZXMsIGZpeGVkLg0KPiANCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGlzIG1h Y3JvIGRlZmluZXMgYSB2YXJpYWJsZSB3aGljaCBpcyB1c2VkIGFzIGEgaGFuZGxlIHRvIGFjY2Vz cw0KPiA+PiArICogdGhlIHZhcmlvdXMgcGVyLWxjb3JlIGlkIGluc3RhbmNlcyBvZiBhIHBlci1s Y29yZSBpZCB2YXJpYWJsZS4NCj4gPg0KPiA+IFN1Z2dlc3Q6DQo+ID4gInRoZSB2YXJpb3VzIHBl ci1sY29yZSBpZCBpbnN0YW5jZXMgb2YgYSBwZXItbGNvcmUgaWQgdmFyaWFibGUiIC0+DQo+ID4g InRoZSB2YXJpb3VzIGluc3RhbmNlcyBvZiBhIHBlci1sY29yZSBpZCB2YXJpYWJsZSIgPg0KPiAN Cj4gU291bmRzIGdvb2QuDQo+IA0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBhaW0gd2l0aCB0aGlz IG1hY3JvIGlzIHRvIG1ha2UgY2xlYXIgYXQgdGhlIHBvaW50IG9mDQo+ID4+ICsgKiBkZWNsYXJh dGlvbiB0aGF0IHRoaXMgaXMgYW4gbGNvcmUgaGFuZGxlciwgcmF0aGVyIHRoYW4gYSByZWd1bGFy DQo+ID4+ICsgKiBwb2ludGVyLg0KPiA+PiArICoNCj4gPj4gKyAqIEFkZCBAYiBzdGF0aWMgYXMg YSBwcmVmaXggaW4gY2FzZSB0aGUgbGNvcmUgdmFyaWFibGUgYXJlIG9ubHkgdG8NCj4gYmUNCj4g Pg0KPiA+IFR5cG86IGFyZSAtPiBpcw0KPiA+DQo+IA0KPiBGaXhlZC4NCj4gDQo+ID4+ICsgKiBh Y2Nlc3NlZCBmcm9tIGEgcGFydGljdWxhciB0cmFuc2xhdGlvbiB1bml0Lg0KPiA+PiArICovDQo+ ID4+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSEFORExFKHR5cGUsIG5hbWUpCVwNCj4gPj4gKwlS VEVfTENPUkVfVkFSX0hBTkRMRV9UWVBFKHR5cGUpIG5hbWUNCj4gPj4gKw0KPiA+PiArLyoqDQo+ ID4+ICsgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gbGNvcmUgdmFyaWFibGUsIGFuZCBpbml0aWFs aXplIGl0cyBoYW5kbGUuDQo+ID4+ICsgKg0KPiA+PiArICogVGhlIHZhbHVlcyBvZiB0aGUgbGNv cmUgdmFyaWFibGUgYXJlIGluaXRpYWxpemVkIHRvIHplcm8uDQo+ID4NCj4gPiBDb25zaWRlciBh ZGRpbmc6ICJ0aGUgbGNvcmUgdmFyaWFibGUgKmluc3RhbmNlcyogYXJlIGluaXRpYWxpemVkIg0K PiA+IEZvdW5kIHRoaXMgdHlwbyBtdWx0aXBsZSB0aW1lczsgc2VhcmNoLXJlcGxhY2UuDQo+ID4N Cj4gDQo+IEl0J3Mgbm90IGEgdHlwby4gIlZhbHVlcyIgaXMganVzdCBzaG9ydCBmb3IgImluc3Rh bmNlcyBvZiB0aGUgdmFsdWUiLA0KPiBqdXN0IGxpa2UgImluc3RhbmNlcyIgaXMuIFVzaW5nIGlu c3RhbmNlcyBldmVyeXdoZXJlIG1heSBjb25mdXNlIHRoZQ0KPiByZWFkZXIgdGhhdCBhbiBpbnN0 YW5jZSBib3RoIGEgbmFtZSBhbmQgYSB2YWx1ZSwgd2hpY2ggaXMgbm90IHRoZSBjYXNlLg0KPiBJ IGRvbid0IGtub3csIG1heWJlIEkgc2hvdWxkIGJlIHVzaW5nICJ2YWx1ZXMiIGV2ZXJ5d2hlcmUg aW5zdGVhZCBvZg0KPiAiaW5zdGFuY2VzIi4NCj4gDQo+IEkgYWdyZWUgdGhlcmUncyBzb21lIGxh Y2sgb2YgY29uc2lzdGVuY3kgaGVyZSBhbmQgcG90ZW50aWFsIHJvb20gZm9yDQo+IGltcHJvdmVt ZW50LCBidXQgSSdtIG5vdCBzdXJlIGV4YWN0bHkgaG93IGltcHJvdmVtZW50IGxvb2tzIGxpa2Uu DQoNClllcywgcGVyaGFwcyB1c2luZyAidmFsdWVzIiAoaW5zdGVhZCBvZiAiaW5zdGFuY2VzIG9m IHRoZSB2YWx1ZSIpIGV2ZXJ5d2hlcmUsDQphbmQgYXZvaWRpbmcgImluc3RhbmNlcyIsIG1pZ2h0 IGJlIGJldHRlci4NCg0KSWYgeW91IHJlcGVhdC9wYXJhcGhyYXNlIHlvdXIgYWJvdmUgZXhwbGFu YXRpb24gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIHNvdXJjZSBjb2RlLCBpdCBzaG91bGQg Y292ZXIgaXQuDQoNCj4gDQo+ID4+ICsgKi8NCj4gPj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9B TExPQ19TSVpFX0FMSUdOKGhhbmRsZSwgc2l6ZSwgYWxpZ24pCVwNCj4gPj4gKwloYW5kbGUgPSBy dGVfbGNvcmVfdmFyX2FsbG9jKHNpemUsIGFsaWduKQ0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4g KyAqIEFsbG9jYXRlIHNwYWNlIGZvciBhbiBsY29yZSB2YXJpYWJsZSwgYW5kIGluaXRpYWxpemUg aXRzIGhhbmRsZSwNCj4gPj4gKyAqIHdpdGggdmFsdWVzIGFsaWduZWQgZm9yIGFueSB0eXBlIG9m IG9iamVjdC4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGUgdmFsdWVzIG9mIHRoZSBsY29yZSB2YXJp YWJsZSBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4NCj4gPj4gKyAqLw0KPiA+PiArI2RlZmluZSBS VEVfTENPUkVfVkFSX0FMTE9DX1NJWkUoaGFuZGxlLCBzaXplKQlcDQo+ID4+ICsJUlRFX0xDT1JF X1ZBUl9BTExPQ19TSVpFX0FMSUdOKGhhbmRsZSwgc2l6ZSwgMCkNCj4gPj4gKw0KPiA+PiArLyoq DQo+ID4+ICsgKiBBbGxvY2F0ZSBzcGFjZSBmb3IgYW4gbGNvcmUgdmFyaWFibGUgb2YgdGhlIHNp emUgYW5kIGFsaWdubWVudA0KPiA+PiByZXF1aXJlbWVudHMNCj4gPj4gKyAqIHN1Z2dlc3RlZCBi eSB0aGUgaGFuZGxlciBwb2ludGVyIHR5cGUsIGFuZCBpbml0aWFsaXplIGl0cyBoYW5kbGUuDQo+ ID4+ICsgKg0KPiA+PiArICogVGhlIHZhbHVlcyBvZiB0aGUgbGNvcmUgdmFyaWFibGUgYXJlIGlu aXRpYWxpemVkIHRvIHplcm8uDQo+ID4+ICsgKi8NCj4gPj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZB Ul9BTExPQyhoYW5kbGUpCQkJCQlcDQo+ID4+ICsJUlRFX0xDT1JFX1ZBUl9BTExPQ19TSVpFX0FM SUdOKGhhbmRsZSwgc2l6ZW9mKCooaGFuZGxlKSksCVwNCj4gPj4gKwkJCQkgICAgICAgYWxpZ25v Zih0eXBlb2YoKihoYW5kbGUpKSkpDQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogQWxsb2Nh dGUgYW4gZXhwbGljaXRseS1zaXplZCwgZXhwbGljaXRseS1hbGlnbmVkIGxjb3JlIHZhcmlhYmxl DQo+IGJ5DQo+ID4+ICsgKiBtZWFucyBvZiBhIEByZWYgUlRFX0lOSVQgY29uc3RydWN0b3IuDQo+ ID4+ICsgKg0KPiA+PiArICogVGhlIHZhbHVlcyBvZiB0aGUgbGNvcmUgdmFyaWFibGUgYXJlIGlu aXRpYWxpemVkIHRvIHplcm8uDQo+ID4+ICsgKi8NCj4gPj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZB Ul9JTklUX1NJWkVfQUxJR04obmFtZSwgc2l6ZSwgYWxpZ24pCQlcDQo+ID4+ICsJUlRFX0lOSVQo cnRlX2xjb3JlX3Zhcl9pbml0XyAjIyBuYW1lKQkJCQlcDQo+ID4+ICsJewkJCQkJCQkJXA0KPiA+ PiArCQlSVEVfTENPUkVfVkFSX0FMTE9DX1NJWkVfQUxJR04obmFtZSwgc2l6ZSwgYWxpZ24pOwlc DQo+ID4+ICsJfQ0KPiA+PiArDQo+ID4+ICsvKioNCj4gPj4gKyAqIEFsbG9jYXRlIGFuIGV4cGxp Y2l0bHktc2l6ZWQgbGNvcmUgdmFyaWFibGUgYnkgbWVhbnMgb2YgYSBAcmVmDQo+ID4+ICsgKiBS VEVfSU5JVCBjb25zdHJ1Y3Rvci4NCj4gPj4gKyAqDQo+ID4+ICsgKiBUaGUgdmFsdWVzIG9mIHRo ZSBsY29yZSB2YXJpYWJsZSBhcmUgaW5pdGlhbGl6ZWQgdG8gemVyby4NCj4gPj4gKyAqLw0KPiA+ PiArI2RlZmluZSBSVEVfTENPUkVfVkFSX0lOSVRfU0laRShuYW1lLCBzaXplKQkJXA0KPiA+PiAr CVJURV9MQ09SRV9WQVJfSU5JVF9TSVpFX0FMSUdOKG5hbWUsIHNpemUsIDApDQo+ID4+ICsNCj4g Pj4gKy8qKg0KPiA+PiArICogQWxsb2NhdGUgYW4gbGNvcmUgdmFyaWFibGUgYnkgbWVhbnMgb2Yg YSBAcmVmIFJURV9JTklUDQo+IGNvbnN0cnVjdG9yLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSB2 YWx1ZXMgb2YgdGhlIGxjb3JlIHZhcmlhYmxlIGFyZSBpbml0aWFsaXplZCB0byB6ZXJvLg0KPiA+ PiArICovDQo+ID4+ICsjZGVmaW5lIFJURV9MQ09SRV9WQVJfSU5JVChuYW1lKQkJCQkJXA0KPiA+ PiArCVJURV9JTklUKHJ0ZV9sY29yZV92YXJfaW5pdF8gIyMgbmFtZSkJCQkJXA0KPiA+PiArCXsJ CQkJCQkJCVwNCj4gPj4gKwkJUlRFX0xDT1JFX1ZBUl9BTExPQyhuYW1lKTsJCQkJXA0KPiA+PiAr CX0NCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBHZXQgdm9pZCBwb2ludGVyIHRvIGxjb3Jl IHZhcmlhYmxlIGluc3RhbmNlIHdpdGggdGhlIHNwZWNpZmllZA0KPiA+PiArICogbGNvcmUgaWQu DQo+ID4+ICsgKg0KPiA+PiArICogQHBhcmFtIGxjb3JlX2lkDQo+ID4+ICsgKiAgIFRoZSBsY29y ZSBpZCBzcGVjaWZ5aW5nIHdoaWNoIG9mIHRoZSBAYyBSVEVfTUFYX0xDT1JFIHZhbHVlDQo+ID4+ ICsgKiAgIGluc3RhbmNlcyBzaG91bGQgYmUgYWNjZXNzZWQuIFRoZSBsY29yZSBpZCBuZWVkIG5v dCBiZSB2YWxpZA0KPiA+PiArICogICAoZS5nLiwgbWF5IGJlIEByZWYgTENPUkVfSURfQU5ZKSwg YnV0IGluIHN1Y2ggYSBjYXNlLCB0aGUNCj4gcG9pbnRlcg0KPiA+PiArICogICBpcyBhbHNvIG5v dCB2YWxpZCAoYW5kIHRodXMgc2hvdWxkIG5vdCBiZSBkZXJlZmVyZW5jZWQpLg0KPiA+PiArICog QHBhcmFtIGhhbmRsZQ0KPiA+PiArICogICBUaGUgbGNvcmUgdmFyaWFibGUgaGFuZGxlLg0KPiA+ PiArICovDQo+ID4+ICtzdGF0aWMgaW5saW5lIHZvaWQgKg0KPiA+PiArcnRlX2xjb3JlX3Zhcl9s Y29yZV9wdHIodW5zaWduZWQgaW50IGxjb3JlX2lkLCB2b2lkICpoYW5kbGUpDQo+ID4+ICt7DQo+ ID4+ICsJcmV0dXJuIFJURV9QVFJfQUREKGhhbmRsZSwgbGNvcmVfaWQgKiBSVEVfTUFYX0xDT1JF X1ZBUik7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiArICogR2V0IHBvaW50ZXIg dG8gbGNvcmUgdmFyaWFibGUgaW5zdGFuY2Ugd2l0aCB0aGUgc3BlY2lmaWVkIGxjb3JlDQo+IGlk Lg0KPiA+PiArICoNCj4gPj4gKyAqIEBwYXJhbSBsY29yZV9pZA0KPiA+PiArICogICBUaGUgbGNv cmUgaWQgc3BlY2lmeWluZyB3aGljaCBvZiB0aGUgQGMgUlRFX01BWF9MQ09SRSB2YWx1ZQ0KPiA+ PiArICogICBpbnN0YW5jZXMgc2hvdWxkIGJlIGFjY2Vzc2VkLiBUaGUgbGNvcmUgaWQgbmVlZCBu b3QgYmUgdmFsaWQNCj4gPj4gKyAqICAgKGUuZy4sIG1heSBiZSBAcmVmIExDT1JFX0lEX0FOWSks IGJ1dCBpbiBzdWNoIGEgY2FzZSwgdGhlDQo+IHBvaW50ZXINCj4gPj4gKyAqICAgaXMgYWxzbyBu b3QgdmFsaWQgKGFuZCB0aHVzIHNob3VsZCBub3QgYmUgZGVyZWZlcmVuY2VkKS4NCj4gPj4gKyAq IEBwYXJhbSBoYW5kbGUNCj4gPj4gKyAqICAgVGhlIGxjb3JlIHZhcmlhYmxlIGhhbmRsZS4NCj4g Pj4gKyAqLw0KPiA+PiArI2RlZmluZSBSVEVfTENPUkVfVkFSX0xDT1JFX1ZBTFVFKGxjb3JlX2lk LCBoYW5kbGUpDQo+IAlcDQo+ID4+ICsJKCh0eXBlb2YoaGFuZGxlKSlydGVfbGNvcmVfdmFyX2xj b3JlX3B0cihsY29yZV9pZCwgaGFuZGxlKSkNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBH ZXQgcG9pbnRlciB0byBsY29yZSB2YXJpYWJsZSBpbnN0YW5jZSBvZiB0aGUgY3VycmVudCB0aHJl YWQuDQo+ID4+ICsgKg0KPiA+PiArICogTWF5IG9ubHkgYmUgdXNlZCBieSBFQUwgdGhyZWFkcyBh bmQgcmVnaXN0ZXJlZCBub24tRUFMIHRocmVhZHMuDQo+ID4+ICsgKi8NCj4gPj4gKyNkZWZpbmUg UlRFX0xDT1JFX1ZBUl9WQUxVRShoYW5kbGUpIFwNCj4gPj4gKwlSVEVfTENPUkVfVkFSX0xDT1JF X1ZBTFVFKHJ0ZV9sY29yZV9pZCgpLCBoYW5kbGUpDQo+ID4+ICsNCj4gPj4gKy8qKg0KPiA+PiAr ICogSXRlcmF0ZSBvdmVyIGVhY2ggbGNvcmUgaWQncyB2YWx1ZSBmb3IgYSBsY29yZSB2YXJpYWJs ZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gdmFsdWUNCj4gPj4gKyAqICAgQSBwb2ludGVy IHNldCBzdWNjZXNzaXZseSBzZXQgdG8gcG9pbnQgdG8gbGNvcmUgdmFyaWFibGUgdmFsdWUNCj4g Pg0KPiA+ICJzZXQgc3VjY2Vzc2l2bHkgc2V0IiAtPiAic3VjY2Vzc2l2bHkgc2V0Ig0KDQpEb24n dCBmb3JnZXQuDQoNCj4gPg0KPiA+IFRoaW5raW5nIG91dCBsb3VkLCBpZ25vcmUgYXQgeW91ciBw cmVmZXJlbmNlOg0KPiA+IER1cmluZyB0aGUgUkZDIGRpc2N1c3Npb25zLCB0aGUgdGVybSB1c2Vk IGZvciByZWZlcnJpbmcgdG8gYW4gbGNvcmUNCj4gdmFyaWFibGUgd2FzIGRpc2N1c3NlZDsNCj4g PiB3ZSBjb25zaWRlcmVkICJwb2ludGVyIiwgYnV0IHNldHRsZWQgZm9yICJ2YWx1ZSIuDQo+ID4g UGVyaGFwcyAiaW5zdGFuY2UiIHdvdWxkIGJlIHVzYWJsZSBpbiBjb21tZW50cyBsaWtlIGxpa2Ug dGhlIG9uZQ0KPiBkZXNjcmliaW5nIHRoaXMgZnVuY3Rpb24uLi4NCj4gPiAiQSBwb2ludGVyIHNl dCBzdWNjZXNzaXZseSBzZXQgdG8gcG9pbnQgdG8gbGNvcmUgdmFyaWFibGUgdmFsdWUiIC0+DQo+ ID4gIkEgcG9pbnRlciBzZXQgc3VjY2Vzc2l2bHkgc2V0IHRvIHBvaW50IHRvIGxjb3JlIHZhcmlh YmxlIGluc3RhbmNlIi4NCj4gPiBJIGRvbid0IGtub3cuDQo+ID4NCj4gDQo+IEkgYWxzbyBkb24n dCBrbm93Lg0KDQpSZWZlcnJpbmcgdG8gdGhlIHRlcm1pbm9sb2d5IGFib3ZlLCBpZiB5b3UgZ28g Zm9yICJ2YWx1ZSIgcmF0aGVyIHRoYW4gImluc3RhbmNlIiAob3IgImluc3RhbmNlIG9mIHRoZSB2 YWx1ZSIpLCBzdGljayB3aXRoICJ2YWx1ZSIgaGVyZSB0b28uDQoNCj4gDQo+ID4NCj4gPj4gKyAq ICAgY29ycmVzcG9uZGluZyB0byBldmVyeSBsY29yZSBpZCAodXAgdG8gQGMgUlRFX01BWF9MQ09S RSkuDQo+ID4+ICsgKiBAcGFyYW0gaGFuZGxlDQo+ID4+ICsgKiAgIFRoZSBsY29yZSB2YXJpYWJs ZSBoYW5kbGUuDQo+ID4+ICsgKi8NCj4gPj4gKyNkZWZpbmUgUlRFX0xDT1JFX1ZBUl9GT1JFQUNI X1ZBTFVFKHZhbHVlLCBoYW5kbGUpCQkJXA0KPiA+PiArCWZvciAodW5zaWduZWQgaW50IGxjb3Jl X2lkID0JCQkJCVwNCj4gPj4gKwkJICAgICAoKCh2YWx1ZSkgPSBSVEVfTENPUkVfVkFSX0xDT1JF X1ZBTFVFKDAsIGhhbmRsZSkpLCAwKTsNCj4gXA0KPiA+PiArCSAgICAgbGNvcmVfaWQgPCBSVEVf TUFYX0xDT1JFOwkJCQkJXA0KPiA+PiArCSAgICAgbGNvcmVfaWQrKywgKHZhbHVlKSA9IFJURV9M Q09SRV9WQVJfTENPUkVfVkFMVUUobGNvcmVfaWQsDQo+IGhhbmRsZSkpDQo+ID4+ICsNCj4gPj4g Ky8qKg0KPiA+PiArICogQWxsb2NhdGUgc3BhY2UgaW4gdGhlIHBlci1sY29yZSBpZCBidWZmZXJz IGZvciBhIGxjb3JlIHZhcmlhYmxlLg0KPiA+PiArICoNCj4gPj4gKyAqIFRoZSBwb2ludGVyIHJl dHVybmVkIGlzIG9ubHkgYW4gb3BhcXVlIGlkZW50aWZlciBvZiB0aGUgdmFyaWFibGUuDQo+IFRv DQo+ID4+ICsgKiBnZXQgYW4gYWN0dWFsIHBvaW50ZXIgdG8gYSBwYXJ0aWN1bGFyIGluc3RhbmNl IG9mIHRoZSB2YXJpYWJsZQ0KPiB1c2UNCj4gPj4gKyAqIEByZWYgUlRFX0xDT1JFX1ZBUl9WQUxV RSBvciBAcmVmIFJURV9MQ09SRV9WQVJfTENPUkVfVkFMVUUuDQo+ID4+ICsgKg0KPiA+PiArICog VGhlIGxjb3JlIHZhcmlhYmxlIHZhbHVlcycgbWVtb3J5IGlzIHNldCB0byB6ZXJvLg0KPiA+PiAr ICoNCj4gPj4gKyAqIFRoZSBhbGxvY2F0aW9uIGlzIGFsd2F5cyBzdWNjZXNzZnVsLCBiYXJyaW5n IGEgZmF0YWwgZXhoYXVzdGlvbg0KPiBvZg0KPiA+PiArICogdGhlIHBlci1sY29yZSBpZCBidWZm ZXIgc3BhY2UuDQo+ID4+ICsgKg0KPiA+PiArICogcnRlX2xjb3JlX3Zhcl9hbGxvYygpIGlzIG5v dCBtdWx0aS10aHJlYWQgc2FmZS4NCj4gPj4gKyAqDQo+ID4+ICsgKiBAcGFyYW0gc2l6ZQ0KPiA+ PiArICogICBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSB2YXJpYWJsZSdzIHBlci1sY29yZSBp ZCB2YWx1ZS4gTXVzdA0KPiBiZSA+IDAuDQo+ID4+ICsgKiBAcGFyYW0gYWxpZ24NCj4gPj4gKyAq ICAgSWYgMCwgdGhlIHZhbHVlcyB3aWxsIGJlIHN1aXRhYmx5IGFsaWduZWQgZm9yIGFueSBraW5k IG9mIHR5cGUNCj4gPj4gKyAqICAgKGkuZS4sIGFsaWdub2YobWF4X2FsaWduX3QpKS4gT3RoZXJ3 aXNlLCB0aGUgdmFsdWVzIHdpbGwgYmUNCj4gYWxpZ25lZA0KPiA+PiArICogICBvbiBhIG11bHRp cGxlIG9mICphbGlnbiosIHdoaWNoIG11c3QgYmUgYSBwb3dlciBvZiAyIGFuZCBlcXVhbA0KPiBv cg0KPiA+PiArICogICBsZXNzIHRoYW4gQGMgUlRFX0NBQ0hFX0xJTkVfU0laRS4NCj4gPj4gKyAq IEByZXR1cm4NCj4gPj4gKyAqICAgVGhlIGlkIG9mIHRoZSB2YXJpYWJsZSwgc3RvcmVkIGluIGEg dm9pZCBwb2ludGVyIHZhbHVlLiBUaGUNCj4gdmFsdWUNCj4gPg0KPiA+ICJpZCIgLT4gImhhbmRs ZSINCj4gPg0KPiANCj4gRml4ZWQuDQo+IA0KPiA+PiArICogICBpcyBhbHdheXMgbm9uLU5VTEwu DQo+ID4+ICsgKi8NCj4gPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPiA+PiArdm9pZCAqDQo+ID4+ ICtydGVfbGNvcmVfdmFyX2FsbG9jKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pOw0KPiA+PiAr DQo+ID4+ICsjaWZkZWYgX19jcGx1c3BsdXMNCj4gPj4gK30NCj4gPj4gKyNlbmRpZg0KPiA+PiAr DQo+ID4+ICsjZW5kaWYgLyogX1JURV9MQ09SRV9WQVJfSF8gKi8NCj4gPj4gZGlmZiAtLWdpdCBh L2xpYi9lYWwvdmVyc2lvbi5tYXAgYi9saWIvZWFsL3ZlcnNpb24ubWFwDQo+ID4+IGluZGV4IGUz ZmY0MTI2ODMuLjVmNWEzNTIyYzAgMTAwNjQ0DQo+ID4+IC0tLSBhL2xpYi9lYWwvdmVyc2lvbi5t YXANCj4gPj4gKysrIGIvbGliL2VhbC92ZXJzaW9uLm1hcA0KPiA+PiBAQCAtMzk2LDYgKzM5Niw5 IEBAIEVYUEVSSU1FTlRBTCB7DQo+ID4+DQo+ID4+ICAgCSMgYWRkZWQgaW4gMjQuMDMNCj4gPj4g ICAJcnRlX3ZmaW9fZ2V0X2RldmljZV9pbmZvOyAjIFdJTkRPV1NfTk9fRVhQT1JUDQo+ID4+ICsN Cj4gPj4gKwlydGVfbGNvcmVfdmFyX2FsbG9jOw0KPiA+PiArCXJ0ZV9sY29yZV92YXI7DQo+ID4N Cj4gPiBObyBzdWNoIGZ1bmN0aW9uOiBydGVfbGNvcmVfdmFyDQo+IA0KPiBJbmRlZWQuIFRoYXQg dmFyaWFibGUgaXMgZ29uZS4gRml4ZWQuDQo+IA0KPiBUaGFua3MgYSBsb3Qgb2YgeW91ciByZXZp ZXcgTW9ydGVuLg0KDQpUaGFua3MgYSBsb3QgZm9yIHlvdXIgY29udHJpYnV0aW9uLCBNYXR0aWFz LiA6LSkNCg0KPiANCj4gPg0KPiA+PiAgIH07DQo+ID4+DQo+ID4+ICAgSU5URVJOQUwgew0KPiA+ PiAtLQ0KPiA+PiAyLjM0LjENCj4gPg0K