From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 4437C2C0C for ; Wed, 3 Oct 2018 01:56:28 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga006.fm.intel.com ([10.253.24.20]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 02 Oct 2018 16:56:27 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.54,333,1534834800"; d="scan'208";a="268987619" Received: from irsmsx154.ger.corp.intel.com ([163.33.192.96]) by fmsmga006.fm.intel.com with ESMTP; 02 Oct 2018 16:56:25 -0700 Received: from irsmsx106.ger.corp.intel.com ([169.254.8.45]) by IRSMSX154.ger.corp.intel.com ([169.254.12.130]) with mapi id 14.03.0319.002; Wed, 3 Oct 2018 00:56:24 +0100 From: "Ananyev, Konstantin" To: Jerin Jacob CC: "Joseph, Anoob" , "dev@dpdk.org" , "Awal, Mohammad Abdul" , "Doherty, Declan" , Narayana Prasad , "akhil.goyal@nxp.com" , "hemant.agrawal@nxp.com" , "shreyansh.jain@nxp.com" Thread-Topic: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing Thread-Index: AQHUO8sQ1vNhPIIy2kCq+ieD7nPPdqTefpOAgABfO7CAAuY7AIALGZsggAAAuDCABMYgAIABKxCAgAHAZSCAAdkHgIAHoQHQgATz/oCACdi0gA== Date: Tue, 2 Oct 2018 23:56:23 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772580102FE113C@IRSMSX106.ger.corp.intel.com> References: <358d1b6c-26f2-b125-07a4-cfb1c0e2a57b@caviumnetworks.com> <2601191342CEEE43887BDE71AB977258EA95089D@irsmsx105.ger.corp.intel.com> <475cf471-b46a-671a-5485-0042c652430c@caviumnetworks.com> <2601191342CEEE43887BDE71AB977258EA954BAD@irsmsx105.ger.corp.intel.com> <2601191342CEEE43887BDE71AB977258EA954E9D@irsmsx105.ger.corp.intel.com> <20180916105640.GA4803@jerin> <2601191342CEEE43887BDE71AB977258EA95724C@irsmsx105.ger.corp.intel.com> <20180918175433.GA16116@jerin> <2601191342CEEE43887BDE71AB977258EA95A68A@irsmsx105.ger.corp.intel.com> <20180926180256.GA3069@jerin> In-Reply-To: <20180926180256.GA3069@jerin> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiOGM4MmYwYzAtZGUwOS00ZWQ3LTk2OWUtMjIyMjA3M2M4M2EwIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoicnpDXC9SbnNKKzJmVEcxZFA0SlNocDJoWUYwNTRLNWpiSGNTTzNQcVg2MFFcL3FvTVVTUDNMUTFBaU5WTVNkRkJOIn0= x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.400.15 dlp-reaction: no-action x-originating-ip: [163.33.239.182] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC] ipsec: new library for IPsec data-path processing X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 02 Oct 2018 23:56:30 -0000 SGkgSmVyaW4sDQoNCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gQW55d2F5LCBsZXQncyBw cmV0ZW5kIHdlIGZvdW5kIHNvbWUgc21hcnQgd2F5IHRvIGRpc3RyaWJ1dGUgaW5ib3VuZCBwYWNr ZXRzIGZvciB0aGUgc2FtZSBTQSB0byBtdWx0aXBsZSBIVyBxdWV1ZXMvQ1BVDQo+ID4gPiA+ID4g Y29yZXMuDQo+ID4gPiA+ID4gPiA+IFRvIG1ha2UgaXBzZWMgcHJvY2Vzc2luZyBmb3Igc3VjaCBj YXNlIHRvIHdvcmsgY29ycmVjdGx5IGp1c3QgYXRvbWljaXR5IG9uIGNoZWNrL3VwZGF0ZSBzZWdu L3JlcGxheV93aW5kb3cgaXMgbm90IGVub3VnaC4NCj4gPiA+ID4gPiA+ID4gSSB0aGluayBpdCB3 b3VsZCByZXF1aXJlIHNvbWUgZXh0cmEgc3luY2hyb25pemF0aW9uOg0KPiA+ID4gPiA+ID4gPiBt YWtlIHN1cmUgdGhhdCB3ZSBkbyBmaW5hbCBwYWNrZXQgcHJvY2Vzc2luZyAoc2VxIGNoZWNrL3Vw ZGF0ZSkgYXQgdGhlIHNhbWUgb3JkZXIgYXMgd2UgcmVjZWl2ZWQgdGhlIHBhY2tldHMNCj4gPiA+ ID4gPiA+ID4gKHBhY2tldHMgZW50ZXJlZCBpcHNlYyBwcm9jZXNzaW5nKS4NCj4gPiA+ID4gPiA+ ID4gSSBkb24ndCByZWFsbHkgbGlrZSB0byBpbnRyb2R1Y2Ugc3VjaCBoZWF2eSBtZWNoYW5pc21z IG9uIFNBIGxldmVsLCAgYWZ0ZXIgYWxsIGl0IHN1cHBvc2VkIHRvIGJlIGxpZ2h0IGFuZCBzaW1w bGUuDQo+ID4gPiA+ID4gPiA+IFRob3VnaCB3ZSBwbGFuIENUWCBsZXZlbCBBUEkgdG8gc3VwcG9y dCBzdWNoIHNjZW5hcmlvLg0KPiA+ID4gPiA+ID4gPiBXaGF0IEkgdGhpbmsgd291bGQgYmUgdXNl ZnVsIGFkZGl0aW9uIGZvciBTQSBsZXZlbCBBUEkgLSBoYXZlIGFuIGFiaWxpdHkgdG8gZG8gb25l IHVwZGF0ZSBzZXFuL3JlcGxheV93aW5kb3cgYW5kIG11bHRpcGxlIGNoZWNrcw0KPiA+ID4gPiA+ IGNvbmN1cnJlbnRseS4NCj4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBJbiBjYXNlIG9m IGluZ3Jlc3MgYWxzbywgdGhlIHNhbWUgcHJvYmxlbSBleGlzdHMuIFdlIHdpbGwgbm90IGJlIGFi bGUgdG8gdXNlIFJTUyBhbmQgc3ByZWFkIHRoZSB0cmFmZmljIHRvIG11bHRpcGxlIGNvcmVzLg0K PiA+ID4gPiA+IENvbnNpZGVyaW5nDQo+ID4gPiA+ID4gPiA+ID4gSVBzZWMgYmVpbmcgQ1BVIGlu dGVuc2l2ZSwgdGhpcyB3b3VsZCBsaW1pdCB0aGUgbmV0IG91dHB1dCBvZiB0aGUgY2hpcC4NCj4g PiA+ID4gPiA+ID4gVGhhdCdzIHRydWUgLSBidXQgZnJvbSBvdGhlciBzaWRlIGltcGxlbWVudGF0 aW9uIGNhbiBvZmZsb2FkIGhlYXZ5IHBhcnQNCj4gPiA+ID4gPiA+ID4gKGVuY3J5cHQvZGVjcnlw dCwgYXV0aCkgdG8gc3BlY2lhbCBIVyAoY3J5cHRvZGV2KS4NCj4gPiA+ID4gPiA+ID4gSW4gdGhh dCBjYXNlIHNpbmdsZSBjb3JlIG1pZ2h0IGJlIGVub3VnaCBmb3IgU0EgYW5kIGV4dHJhIHN5bmNo cm9uaXphdGlvbiB3b3VsZCBqdXN0IHNsb3dkb3duIHRoaW5ncy4NCj4gPiA+ID4gPiA+ID4gVGhh dCdzIHdoeSBJIHRoaW5rIGl0IHNob3VsZCBiZSBjb25maWd1cmFibGUgIHdoYXQgYmVoYXZpb3Ig KFNUIG9yIE1UKSB0byB1c2UuDQo+ID4gPiA+ID4gPiBJIGRvIGFncmVlIHRoYXQgdGhlc2UgYXJl IHRoZSBpc3N1ZXMgdGhhdCB3ZSBuZWVkIHRvIGFkZHJlc3MgdG8gbWFrZSB0aGUNCj4gPiA+ID4g PiA+IGxpYnJhcnkgTVQgc2FmZS4gV2hldGhlciB0aGUgZXh0cmEgc3luY2hyb25pemF0aW9uIHdv dWxkIHNsb3cgZG93biB0aGluZ3MgaXMNCj4gPiA+ID4gPiA+IGEgdmVyeSBzdWJqZWN0aXZlIHF1 ZXN0aW9uIGFuZCB3aWxsIGhlYXZpbHkgZGVwZW5kIG9uIHRoZSBwbGF0Zm9ybS4gVGhlDQo+ID4g PiA+ID4gPiBsaWJyYXJ5IHNob3VsZCBoYXZlIGVub3VnaCBwcm92aXNpb25zIHRvIGJlIGFibGUg dG8gc3VwcG9ydCBNVCB3aXRob3V0DQo+ID4gPiA+ID4gPiBjYXVzaW5nIG92ZXJoZWFkcyB0byBT VC4gUmlnaHQgbm93LCB0aGUgbGlicmFyeSBhc3N1bWVzIFNULg0KPiA+ID4gPiA+DQo+ID4gPiA+ ID4NCj4gPiA+ID4gPiBJIGFncmVlIHdpdGggQW5vb2IgaGVyZS4NCj4gPiA+ID4gPg0KPiA+ID4g PiA+IEkgaGF2ZSB0d28gY29uY2VybnMgd2l0aCBsaWJydGVfaXBzZWMgYXMgYSBzZXBhcmF0ZSBs aWJyYXJ5DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAxKSBUaGVyZSBpcyBhbiBvdmVybGFwIHdpdGgg cnRlX3NlY3VyaXR5IGFuZCBuZXcgcHJvcG9zZWQgbGlicmFyeS4NCj4gPiA+ID4NCj4gPiA+ID4g SSBkb24ndCB0aGluayB0aGVyZSByZWFsbHkgaXMgYW4gb3ZlcmxhcC4NCj4gPiA+DQo+ID4gPiBB cyBtZW50aW9uZWQgaW4geW91ciBvdGhlciBlbWFpbC4gSU1PLCBUaGVyZSBpcyBhbiBvdmVybGFw IGFzDQo+ID4gPiBSVEVfU0VDVVJJVFlfQUNUSU9OX1RZUEVfSU5MSU5FX1BST1RPQ09MIGNhbiBz dXBwb3J0IGFsbW9zdCBldmVyeXRoaW5nDQo+ID4gPiBpbiBIVyBvciBIVyArIFNXIGlmIHNvbWUg UE1EIHdpc2hlcyB0byBkbyBzby4NCj4gPiA+DQo+ID4gPiBBbnN3ZXJpbmcgc29tZSBvZiB0aGUg cXVlc3Rpb25zLCB5b3UgaGF2ZSBhc2tlZCBpbiBvdGhlciB0aHJlYWQgYmFzZWQgb24NCj4gPiA+ IG15IHVuZGVyc3RhbmRpbmcuDQo+ID4gPg0KPiA+ID4gUmVnYXJkaW5nIFJURV9TRUNVUklUWV9B Q1RJT05fVFlQRV9JTkxJTkVfUFJPVE9DT0wgc3VwcG9ydCwNCj4gPiA+IE1hcnZlbGwvQ2F2aXVt IENQVCBoYXJkd2FyZSBvbiBuZXh0IGdlbmVyYXRpb24gSFcoUGxhbm5pbmcgdG8gdXBzdHJlYW0N Cj4gPiA+IGFyb3VuZCB2MTkuMDIpIGNhbiBzdXBwb3J0IFJURV9TRUNVUklUWV9BQ1RJT05fVFlQ RV9JTkxJTkVfUFJPVE9DT0wgYW5kDQo+ID4gPiBBbm9vYiBhbHJlYWR5IHB1c2hlZCB0aGUgYXBw bGljYXRpb24gY2hhbmdlcyBpbiBpcHNlYy1ndy4NCj4gPg0KPiA+IE9rIGdvb2QgdG8ga25vdy4N Cj4gPg0KPiA+ID4NCj4gPiA+IEluIG91ciB1bmRlcnN0YW5kaW5nIG9mIEhXL1NXIHJvbGVzL3Jl c3BvbnNpYmlsaXRpZXMgZm9yIHRoYXQgdHlwZSBvZg0KPiA+ID4gZGV2aWNlcyBhcmU6DQo+ID4g Pg0KPiA+ID4gSU5MSU5FX1BST1RPQ09MDQo+ID4gPiAtLS0tLS0tLS0tLS0tLS0tDQo+ID4gPiBJ biBjb250cm9sIHBhdGgsIHNlY3VyaXR5IHNlc3Npb24gaXMgY3JlYXRlZCB3aXRoIHRoZSBnaXZl biBTQSBhbmQNCj4gPiA+IHJ0ZV9mbG93IGNvbmZpZ3VyYXRpb24gZXRjLg0KPiA+ID4NCj4gPiA+ IEZvciBvdXRib3VuZCB0cmFmZmljLCB0aGUgYXBwbGljYXRpb24gd2lsbCBoYXZlIHRvIGRvIFNB IGxvb2t1cCBhbmQNCj4gPiA+IGlkZW50aWZ5IHRoZSBzZWN1cml0eSBhY3Rpb24gKGlubGluZS9s b29rIGFzaWRlIGNyeXB0by9wcm90b2NvbCkuIEZvcg0KPiA+ID4gcGFja2V0cyBpZGVudGlmaWVk IGZvciBpbmxpbmUgcHJvdG9jb2wgcHJvY2Vzc2luZywgdGhlIGFwcGxpY2F0aW9uIHdvdWxkDQo+ ID4gPiBzdWJtaXQgYXMgcGxhaW4gcGFja2V0cyB0byB0aGUgZXRoZXJuZXQgZGV2aWNlIGFuZCB0 aGUgc2VjdXJpdHkgY2FwYWJsZQ0KPiA+ID4gZXRoZXJuZXQgZGV2aWNlIHdvdWxkIHBlcmZvcm0g SVBTZWMgYW5kIHNlbmQgb3V0IHRoZSBwYWNrZXQuIEZvciBQTURzDQo+ID4gPiB3aGljaCB3b3Vs ZCBuZWVkIGV4dHJhIG1ldGFkYXRhIChjYXBhYmlsaXR5IGZsYWcpLCBzZXRfcGt0X21ldGFkYXRh DQo+ID4gPiBmdW5jdGlvbiBwb2ludGVyIHdvdWxkIGJlIGNhbGxlZCAoZnJvbSBhcHBsaWNhdGlv bikuDQo+ID4gPiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBzb21lIHBlciBwYWNrZXQgZmllbGQg dG8gaWRlbnRpZnkgdGhlIHNlY3VyaXR5IHNlc3Npb24gdG8gYmUgdXNlZCB0bw0KPiA+ID4gcHJv Y2VzcyB0aGUgcGFja2V0Lg0KPiA+DQo+ID4gWWVzLCBhcyBJIGNhbiBzZWUsIHRoYXQncyB3aGF0 IGlwc2VjLWd3IGlzIGRvaW5nIHJpZ2h0IG5vdyBhbmQgaXQgd291bGRuJ3QgYmUNCj4gPiBhIHBy b2JsZW0gdG8gZG8gdGhlIHNhbWUgaW4gaXBzZWMgbGliLg0KPiA+DQo+ID4gPiBTZXF1ZW5jZSBu dW1iZXIgdXBkYXRpb24gd2lsbCBiZSBkb25lIGJ5IHRoZSBQTUQuDQo+ID4NCj4gPiBPaywgc28g Zm9yIElOTElORV9QUk9UT0NPTCB1cHBlciBsYXllciB3b3VsZG4ndCBuZWVkIHRvIGtlZXAgdHJh Y2sgZm9yIFNRTiB2YWx1ZXMgYXQgYWxsPw0KPiA+IFlvdSBkb27igJl0JyBjb25zaWRlciBhIHBv c3NpYmlsaXR5IHRoYXQgYnkgc29tZSByZWFzb24gdGhhdCBTQSB3b3VsZCBuZWVkIHRvDQo+ID4g YmUgbW92ZWQgZnJvbSBkZXZpY2UgdGhhdCBzdXBwb3J0IElOTElORV9QUk9UT0NPTCB0byB0aGUg ZGV2aWNlIHRoYXQgZG9lc24ndD8NCj4gDQo+IEZvciBJTkxJTkVfUFJPVE9DT0wsIHRoZSBhcHBs aWNhdGlvbiB3b24ndCBoYXZlIGFueSBjb250cm9sIG92ZXIgc3VjaA0KPiBwZXIgcGFja2V0IGZp ZWxkcy4gQXMgZm9yIG1vdmluZyB0aGUgU0EgdG8gYSBkaWZmZXJlbnQgZGV2aWNlLCByaWdodCBu b3cNCj4gcnRlX3NlY3VyaXR5IHNwZWMgZG9lc24ndCBhbGxvdyB0aGF0LiBNYXkgYmUgd2Ugc2hv dWxkIGZpeCB0aGUgc3BlYyB0bw0KPiBhbGxvdyBtdWx0aXBsZSBkZXZpY2VzIHRvIHNoYXJlIHRo ZSBzYW1lIHNlY3VyaXR5IHNlc3Npb24uIFRoYXQgd2F5LCBpZg0KPiB0aGVyZSBpcyBlcnJvciBp biB0aGUgaW5saW5lIHByb2Nlc3NpbmcsIGFwcGxpY2F0aW9uIHdpbGwgYmUgYWJsZSB0bw0KPiBz dWJtaXQgdGhlIHBhY2tldCB0byBMT09LQVNJREVfUFJPVE9DT0wgY3J5cHRvIGRldmljZSAoc2hh cmluZyB0aGUNCj4gc2Vzc2lvbikgYW5kIGdldCB0aGUgcGFja2V0IHByb2Nlc3NlZC4NCj4gDQoN ClllcCwgdGhhdCBteSB0aG91Z2h0IHRvby4NCklmIHdlIHdhbnQgdG8gc3VwcG9ydCBzdWNoIHNj ZW5hcmlvcyB3aXRoIGxvb2thc2lkZS1wcm90byBhbmQgaW5saW5lLXByb3RvIGRldmljZXMsDQp0 aGVuIHJ0ZV9zZWN1cml0eSBuZWVkIHRvIGJlIGNoYW5nZWQvZXh0ZW5kZWQuDQoNCj4gDQo+ID4N Cj4gPiA+IEZvciBpbmJvdW5kIHRyYWZmaWMsIHRoZSBwYWNrZXRzIGZvciBJUFNlYyB3b3VsZCBi ZSBpZGVudGlmaWVkIGJ5IHVzaW5nDQo+ID4gPiBydGVfZmxvdyAoaGFyZHdhcmUgYWNjZWxlcmF0 ZWQgcGFja2V0IGZpbHRlcmluZykuIEZvciB0aGUgcGFja2V0cw0KPiA+ID4gaWRlbnRpZmllZCBm b3IgaW5saW5lIG9mZmxvYWQgKFNFQ1VSSVRZIGFjdGlvbiksIGhhcmR3YXJlIHdvdWxkIHBlcmZv cm0NCj4gPiA+IHRoZSBwcm9jZXNzaW5nLiBGb3IgaW5saW5lIHByb3RvY29sIHByb2Nlc3NlZCBJ UFNlYyBwYWNrZXRzLCBQTUQgd291bGQNCj4gPiA+IHNldCDigJx1c2VyIGRhdGHigJ0gc28gdGhh dCBhcHBsaWNhdGlvbiBjYW4gZ2V0IHRoZSBkZXRhaWxzIG9mIHRoZSBzZWN1cml0eQ0KPiA+ID4g cHJvY2Vzc2luZyBkb25lIG9uIHRoZSBwYWNrZXQuIE9uY2UgdGhlIHBsYWluIHBhY2tldCAoYWZ0 ZXIgSVBTZWMNCj4gPiA+IHByb2Nlc3NpbmcpIGlzIHJlY2VpdmVkLCBhIHNlbGVjdG9yIGNoZWNr IG5lZWQgdG8gYmUgcGVyZm9ybWVkIHRvIG1ha2UNCj4gPiA+IHN1cmUgd2UgaGF2ZSBhIHZhbGlk IHBhY2tldCBhZnRlciBJUFNlYyBwcm9jZXNzaW5nLiBUaGUgdXNlciBkYXRhIGlzIHVzZWQNCj4g PiA+IGZvciB0aGF0LiBBbnRpLXJlcGxheSBjaGVjayBpcyBoYW5kbGVkIGJ5IHRoZSBQTUQuIFRo ZSBQTUQgd291bGQgcmFpc2UNCj4gPiA+IGFuIGV0aCBldmVudCBpbiBjYXNlIG9mIHNlcXVlbmNl IG51bWJlciBleHBpcnkgb3IgYW55IFNBIGV4cGlyeS4NCj4gPg0KPiA+IEZldyBxdWVzdGlvbnMg aGVyZToNCj4gPiAxKSBpZiBJIHVuZGVyc3RhbmQgdGhpbmdzIHJpZ2h0IC0gdG8gc3BlY2lmeSB0 aGF0IGl0IHdhcyBhbiBJUHNlYyBwYWNrZXQgLQ0KPiA+IFBLVF9SWF9TRUNfT0ZGTE9BRCB3aWxs IGJlIHNldCBpbiBtYnVmIG9sX2ZsYWdzPw0KPiA+IDIpIEJhc2ljYWxseSAndXNlcmRhdGEnIHdp bGwgY29udGFpbiBqdXN0IGEgdXNlciBwcm92aWRlZCBhdCBydGVfc2VjdXJpdHlfc2Vzc2lvbl9j cmVhdGUgcG9pbnRlcg0KPiA+IChtb3N0IGxpa2VseSBwb2ludGVyIHRvIHRoZSBTQSwgYXMgaXQg aXMgZG9uZSByaWdodCBub3cgaW4gaXBzZWMtc2VjZ3cpLCBjb3JyZWN0Pw0KPiANCj4gWWVzIHRv IDEgJiAyLg0KPiANCj4gDQo+ID4gMykgaW4gY3VycmVudCBydGVfc2VjdXJpdHkgQVBJIHNpIHRo ZXJlIGEgd2F5IHRvIGdldC9zZXQgcmVwbGF5IHdpbmRvdyBzaXplLCBldGM/DQo+IA0KPiBOb3Qg cmlnaHQgbm93LiBCdXQgQWtoaWwgbWVudGlvbmVkIHRoYXQgaXQgd2lsbCBiZSBhZGRlZCBzb29u Lg0KPiANCj4gDQo+ID4gNCkgICBTYW1lIHF1ZXN0aW9uIGFzIGZvciBUWDogeW91IGRvbid0IHBs YW4gdG8gc3VwcG9ydCBmYWxsYmFjayB0byBvdGhlciB0eXBlIG9mIGRldmljZXMvU1c/DQo+ID4g SS5FLiBIVyB3YXMgbm90IGFibGUgdG8gcHJvY2VzcyBpcHNlYyBwYWNrZXQgYnkgc29tZSByZWFz b24gKGxldCBzYXkgZnJhZ21lbnRlZCBwYWNrZXQpDQo+ID4gYW5kIG5vdyBpdCBpcyBTVyByZXNw b25zaWJpbGl0eSB0byBkbyBzbz8NCj4gPiBUaGUgcmVhc29uIEkgYW0gYXNraW5nIGZvciB0aGF0 IC0gaXQgc2VlbXMgcmlnaHQgbm93IHRoZXJlIGlzIG5vIGRlZmluZWQgd2F5DQo+ID4gdG8gc2hh cmUgU1FOIHJlbGF0ZWQgaW5mb3JtYXRpb24gYmV0d2VlbiBIVy9QTUQgYW5kIHVwcGVyIGxheWVy IFNXLg0KPiA+IElzIHRoYXQgb2ssIG9yIHdvdWxkIHdlIG5lZWQgc3VjaCBjYXBhYmlsaXR5Pw0K PiA+IElmIHdlIHdvdWxkLCBhbmQgdXBwZXIgbGF5ZXIgU1cgd291bGQgbmVlZCB0byBrZWVwIHRy YWNrIG9uIFNRTiBhbnl3YXksDQo+ID4gdGhlbiB0aGVyZSBpcyBwcm9iYWJseSBubyBwb2ludCB0 byBkbyBzYW1lIHRoaW5nIGluIFBNRCBpdGVsZj8NCj4gPiBJbiB0aGF0IGNhc2UgUE1EIGp1c3Qg bmVlZCB0byBwcm92aWRlIFNRTiBpbmZvcm1hdGlvbiB0byB0aGUgdXBwZXIgbGF5ZXINCj4gPiAo cHJvYmFibHkgb25lIGVhc3kgd2F5IHRvIGRvIGl0IC0gcmV1c2UgcnRlXyxidWYuc2VxbiBmb3Ig dGhhdCBwdXJwb3NlLA0KPiA+IHRob3VnaCBmb3IgdGhhdCB3aWxsIHByb2JhYmx5IG5lZWQgbWFr ZSBpdCA2NC1iaXQgbG9uZykuDQo+IA0KPiBUaGUgc3BlYyBkb2Vzbid0IGFsbG93IGRvaW5nIElQ c2VjIHBhcnRpYWxseSBvbiBIVyAmIFNXLiBUaGUgd2F5IHNwZWMgaXMNCj4gd3JpdHRlbiAoYW5k IGltcGxlbWVudGVkIGluIGlwc2VjLXNlY2d3KSB0byBhbGxvdyBvbmUga2luZCBvZg0KPiBSVEVf U0VDVVJJVFlfQUNUSU9OX1RZUEUgZm9yIG9uZSBTQS4gSWYgSFcgaXMgbm90IGFibGUgdG8gcHJv Y2VzcyBwYWNrZXQNCj4gcmVjZWl2ZWQgb24gSU5MSU5FX1BST1RPQ09MIFNBLCB0aGVuIGl0IGlz IHRyZWF0ZWQgYXMgZXJyb3IuIEhhbmRsaW5nDQo+IGZyYWdtZW50YXRpb24gaXMgYSB2ZXJ5IHZh bGlkIHNjZW5hcmlvLiBXZSB3aWxsIGhhdmUgdG8gZWRpdCB0aGUgc3BlYyBpZg0KPiB3ZSBuZWVk IHRvIGhhbmRsZSB0aGlzIHNjZW5hcmlvLg0KPiANCj4gPg0KPiA+ID4NCj4gPiA+DQo+ID4gPiBM T09LQVNJREVfUFJPVE9DT0wNCj4gPiA+IC0tLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gSW4gY29u dHJvbCBwYXRoLCBzZWN1cml0eSBzZXNzaW9uIGlzIGNyZWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gU0Eu DQo+ID4gPg0KPiA+ID4gRW5xdWV1ZS9kZXF1ZXVlIGlzIHNpbWlsYXIgdG8gd2hhdCBpcyBkb25l IGZvciByZWd1bGFyIGNyeXB0bw0KPiA+ID4gKFJURV9TRUNVUklUWV9BQ1RJT05fVFlQRV9OT05F KSBidXQgYWxsIHRoZSBwcm90b2NvbCByZWxhdGVkIHByb2Nlc3NpbmcNCj4gPiA+IHdvdWxkIGJl IG9mZmxvYWRlZC4gQXBwbGljYXRpb24gd2lsbCBuZWVkIHRvIGRvIFNBIGxvb2t1cCBhbmQgaWRl bnRpZnkNCj4gPiA+IHRoZSBwcm9jZXNzaW5nIHRvIGJlIGRvbmUgKGJvdGggaW4gY2FzZSBvZiBv dXRib3VuZCAmIGluYm91bmQpLCBhbmQNCj4gPiA+IHN1Ym1pdCBwYWNrZXQgdG8gY3J5cHRvIGRl dmljZS4gQXBwbGljYXRpb24gbmVlZCBub3QgZG8gYW55IElQU2VjDQo+ID4gPiByZWxhdGVkIHRy YW5zZm9ybWF0aW9ucyBvdGhlciB0aGFuIHRoZSBsb29rdXAuIEFudGktcmVwbGF5IG5lZWQgdG8g YmUNCj4gPiA+IGhhbmRsZWQgaW4gdGhlIFBNRCAodGhlIHNwZWMgc2F5cyB0aGUgZGV2aWNlIOKA nG1heSBiZSBoYW5kbGVk4oCdIGRvIGFudGktcmVwbGF5IGNoZWNrLA0KPiA+ID4gYnV0IGEgY29t cGxldGUgcHJvdG9jb2wgb2ZmbG9hZCB3b3VsZCBuZWVkIGFudGktcmVwbGF5IGNoZWNrIGFsc28p Lg0KPiA+DQo+ID4gU2FtZSBxdWVzdGlvbiBoZXJlIC0gd291bGRuJ3QgdGhlcmUgYmUgYSBzaXR1 YXRpb25zIHdoZW4gSFcvUE1EIHdvdWxkIG5lZWQgdG8NCj4gPiBzaGFyZSBTUU4gaW5mb3JtYXRp b24gd2l0aCB1cHBlciBsYXllcj8NCj4gPiBMZXQgc2F5IGlmIHVwcGVyIGxheWVyIFNXIHdvdWxk IG5lZWQgdG8gZG8gbG9hZCBiYWxhbmNpbmcgYmV0d2VlbiBjcnlwdG8tZGV2aWNlcw0KPiA+IHdp dGggTE9PS0FTSURFX1BST1RPQ09MIGFuZCB3aXRob3V0Pw0KPiANCj4gU2FtZSBhbnN3ZXIgYXMg YWJvdmUuIEFDVElPTiBpcyB0aWVkIHRvIHNlY3VyaXR5IHNlc3Npb24gd2hpY2ggaXMgdGllZA0K PiB0byBTQS4gU1FOIGV0YyBpcyBpbnRlcm5hbCB0byB0aGUgc2Vzc2lvbiBhbmQgc28gbG9hZCBi YWxhbmNpbmcgYmV0d2Vlbg0KPiBjcnlwdG8tZGV2aWNlcyBpcyBub3Qgc3VwcG9ydGVkLg0KPiAN Cj4gPg0KPiA+ID4NCj4gPiA+DQo+ID4gPiA+IHJ0ZV9zZWN1cml0eSBpcyBhICdmcmFtZXdvcmsg Zm9yIG1hbmFnZW1lbnQgYW5kIHByb3Zpc2lvbmluZyBvZiBzZWN1cml0eSBwcm90b2NvbCBvcGVy YXRpb25zIG9mZmxvYWRlZCB0byBoYXJkd2FyZSBiYXNlZCBkZXZpY2VzJy4NCj4gPiA+ID4gV2hp bGUgcnRlX2lwc2VjIGlzIGFpbWVkIHRvIGJlIGEgbGlicmFyeSBmb3IgSVBzZWMgZGF0YS1wYXRo IHByb2Nlc3NpbmcuDQo+ID4gPiA+IFRoZXJlIGlzIG5vIHBsYW5zIGZvciBydGVfaXBzZWMgdG8g J29ic29sZXRlJyBydGVfc2VjdXJpdHkuDQo+ID4gPiA+IFF1aXRlIG9wcG9zaXRlIHJ0ZV9pcHNl YyBzdXBwb3NlZCB0byB3b3JrIHdpdGggYm90aCBydGVfY3J5cHRvZGV2IGFuZCBydGVfc2VjdXJp dHkgQVBJcyAoZGV2aWNlcykuDQo+ID4gPiA+IEl0IGlzIHBvc3NpYmxlIHRvIGhhdmUgYW4gU0Eg dGhhdCB3b3VsZCB1c2UgYm90aCBjcnlwdG8gYW5kICBzZWN1cml0eSBkZXZpY2VzLg0KPiA+ID4g PiBPciB0byBoYXZlIGFuIFNBIHRoYXQgd291bGQgdXNlIG11bHRpcGxlIGNyeXB0byBkZXZzDQo+ ID4gPiA+ICh0aG91Z2ggcmlnaHQgbm93IGl0IGlzIHVwIHRoZSB1c2VyIGxldmVsIHRvIGRvIGxv YWQtYmFsYW5jaW5nIGxvZ2ljKS4NCj4gPiA+ID4NCj4gPiA+ID4gPiBGb3IgSVBzZWMsIElmIGFu IGFwcGxpY2F0aW9uIG5lZWRzIHRvIHVzZSBydGVfc2VjdXJpdHkgZm9yIEhXDQo+ID4gPiA+ID4g aW1wbGVtZW50YXRpb24gYW5kIGFuZCBhcHBsaWNhdGlvbiBuZWVkcyB0byB1c2UgbGlicnRlX2lw c2VjIGZvcg0KPiA+ID4gPiA+ICBTVyBpbXBsZW1lbnRhdGlvbiB0aGVuIGl0IGlzIGJhZCBhbmQg YSBsb3QgZHVwbGljYXRpb24gb2Ygd29yayBvbg0KPiA+ID4gPiA+IGhlIHNsb3cgcGF0aCB0b28u DQo+ID4gPiA+DQo+ID4gPiA+IFRoZSBwbGFuIGlzIHRoYXQgYXBwbGljYXRpb24gd291bGQgbmVl ZCB0byB1c2UganVzdCBydGVfaXBzZWMgQVBJIGZvciBhbGwgZGF0YS1wYXRocw0KPiA+ID4gPiAo SFcvU1csIGxvb2thc2lkZS9pbmxpbmUpLg0KPiA+ID4gPiBMZXQgc2F5IHJpZ2h0IG5vdyB0aGVy ZSBpcyBydGVfaXBzZWNfaW5saW5lX3Byb2Nlc3MoKSBmdW5jdGlvbiBpZiB1c2VyDQo+ID4gPiA+ IHByZWZlcnMgdG8gdXNlIGlubGluZSBzZWN1cml0eSBkZXZpY2UgdG8gcHJvY2VzcyBnaXZlbiBn cm91cCBwYWNrZXRzLA0KPiA+ID4gPiBhbmQgcnRlX2lwc2VjX2NyeXB0b19wcm9jZXNzKC9wcmVw YXJlKSBpZiB1c2VyIGRlY2lkZXMgdG8gdXNlDQo+ID4gPiA+IGxvb2thc2lkZSBzZWN1cml0eSBv ciBzaW1wbGUgY3J5cHRvIGRldmljZSBmb3IgaXQuDQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ ID4gPiBUaGUgcnRlX3NlY3VyaXR5IHNwZWMgY2FuIHN1cHBvcnQgYm90aCBpbmxpbmUgYW5kIGxv b2stYXNpZGUgSVBTZWMNCj4gPiA+ID4gPiBwcm90b2NvbCBzdXBwb3J0Lg0KPiA+ID4gPg0KPiA+ ID4gPiBBRkFJSyByaWdodCBub3cgcnRlX3NlY3VyaXR5IGp1c3QgcHJvdmlkZXMgQVBJIHRvIGNy ZWF0ZS9mcmVlL21hbmlwdWxhdGUgc2VjdXJpdHkgc2Vzc2lvbnMuDQo+ID4gPiA+IEkgZG9uJ3Qg c2VlIGhvdyBpdCBjYW4gc3VwcG9ydCBhbGwgdGhlIGZ1bmN0aW9uYWxpdHkgbWVudGlvbmVkIGFi b3ZlLA0KPiA+ID4gPiBwbHVzIFNBRCBhbmQgU1BELg0KPiA+ID4NCj4gPiA+DQo+ID4gPiBBdCBs ZWFzdCBmb3IgSU5MSU5FX1BST1RPQ09MIGNhc2UgU0EgbG9va3VwIGZvciBpbmJvdW5kIHRyYWZm aWMgZG9lcyBieQ0KPiA+ID4gSFcuDQo+ID4NCj4gPiBGb3IgaW5ib3VuZCB5ZXMsIGZvciBvdXRi b3VuZCBJIHN1cHBvc2UgeW91IHN0aWxsIHdvdWxkIG5lZWQgdG8gZG8gYSBsb29rdXAgaW4gU1cu DQo+IA0KPiBZZXMNCj4gDQo+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4g PiAyKSBUaGlzIGxpYnJhcnkgaXMgdHVuZWQgZm9yIGZhdCBDUFUgY29yZSBpbiBtaW5kIGxpa2Ug c2luZ2xlIFNBIG9uIGNvcmUNCj4gPiA+ID4gPiBldGMuIFdoaWNoIGlzIGZpbmUgZm9yIHg4NiBz ZXJ2ZXJzIGFuZCBhcm02NCBzZXJ2ZXIgY2F0ZWdvcnkgb2YgbWFjaGluZXMNCj4gPiA+ID4gPiBi dXQgaXQgZG9lcyBub3Qgd29yayB2ZXJ5IHdlbGwgd2l0aCBOUFUgY2xhc3Mgb2YgU29DIG9yIEZQ R0EuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBBcyB0aGVyZSAgYXJlIHRoZSBkaWZmZXJlbnQgd2F5 cyB0byBpbXBsZW1lbnQgdGhlIElQU2VjLCBGb3IgaW5zdGFuY2UsDQo+ID4gPiA+ID4gdXNlIG9m IGV2ZW50ZGV2IGNhbiBoZWxwIGluIHNpdHVhdGlvbiBmb3IgaGFuZGxpbmcgbWlsbGlvbnMgb2Yg U0EgYW5kDQo+ID4gPiA+ID4gZXF1ZW5jZSBudW1iZXIgb2YgdXBkYXRlIGFuZCBhbnRpIHJlcGx5 IGNoZWNrIGNhbiBiZSBkb25lIGJ5IGxldmVyYWdpbmcNCj4gPiA+ID4gPiBzb21lIG9mIHRoZSBI VyBzcGVjaWZpYyBmZWF0dXJlcyBsaWtlDQo+ID4gPiA+ID4gT1JERVJFRCwgQVRPTUlDIHNjaGVk dWxlIHR5cGUobWFwcGVkIGFzIGV2ZW50ZGV2IGZlYXR1cmUpaW4gSFcgd2l0aCBQSVBFTElORSBt b2RlbC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+ICMgSXNzdWVzIHdpdGggaGF2aW5nIG9uZSBTQSBv bmUgY29yZSwNCj4gPiA+ID4gPiAtIEluIHRoZSBvdXRib3VuZCBzaWRlLCB0aGVyZSBjb3VsZCBi ZSBtdWx0aXBsZSBmbG93cyB1c2luZyB0aGUgc2FtZSBTQS4NCj4gPiA+ID4gPiAgIE11bHRpcGxl IGZsb3dzIGNvdWxkIGJlIHByb2Nlc3NlZCBwYXJhbGxlbCBvbiBkaWZmZXJlbnQgbGNvcmVzLA0K PiA+ID4gPiA+IGJ1dCB0eWluZyBvbmUgU0EgdG8gb25lIGNvcmUgd291bGQgbWVhbiB3ZSB3b24n dCBiZSBhYmxlIHRvIGRvIHRoYXQuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAtIEluIHRoZSBpbmJv dW5kIHNpZGUsIHdlIHdpbGwgaGF2ZSBhIGZhdCBmbG93IGhpdHRpbmcgb25lIGNvcmUuIElmDQo+ ID4gPiA+ID4gICBJUHNlYyBsaWJyYXJ5IGFzc3VtZXMgc2luZ2xlIGNvcmUsIHdlIHdpbGwgbm90 IGJlIGFibGUgdG8gdG8gc3ByZWFkDQo+ID4gPiA+ID4gZmF0IGZsb3cgdG8gbXVsdGlwbGUgY29y ZXMuIEFuZCBvbmUgU0Etb25lIGNvcmUgd291bGQgbWVhbiBhbGwgcG9ydHMgb24NCj4gPiA+ID4g PiB3aGljaCB3ZSB3b3VsZCBleHBlY3QgSVBzZWMgdHJhZmZpYyBoYXMgdG8gYmUgaGFuZGxlZCBi eSB0aGF0IGNvcmUuDQo+ID4gPiA+DQo+ID4gPiA+IEkgc3VwcG9zZSB0aGF0IGFsbCByZWZlcnMg dG8gdGhlIGRpc2N1c3Npb24gYWJvdXQgTVQgc2FmZSBBUEkgZm9yIHJ0ZV9pcHNlYywgcmlnaHQ/ DQo+ID4gPiA+IElmIHNvLCB0aGVuIGFzIEkgc2FpZCBpbiBteSByZXBseSB0byBBbm9vYjoNCj4g PiA+ID4gV2Ugd2lsbCB0cnkgdG8gbWFrZSBBUEkgdXNhYmxlIGluIE1UIGVudmlyb25tZW50IGZv ciB2MSwNCj4gPiA+ID4gc28geW91IGNhbiByZXZpZXcgYW5kIHByb3ZpZGUgY29tbWVudHMgYXQg ZWFybHkgc3RhZ2VzLg0KPiA+ID4NCj4gPiA+IE9LDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiA+ DQo+ID4gPiA+ID4gSSBoYXZlIG1hZGUgYSBzaW1wbGUgcHJlc2VudGF0aW9uLiBUaGlzIHByZXNl bnRhdGlvbiBkZXRhaWxzIE9ORSBXQVkgdG8NCj4gPiA+ID4gPiBpbXBsZW1lbnQgdGhlIElQU2Vj IHdpdGggSFcgc3VwcG9ydCBvbiBOUFUuDQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBodHRwczovL2Rv Y3MuZ29vZ2xlLmNvbS9wcmVzZW50YXRpb24vZC8xZTNJRGY5UjdaUUI4Rk4xNk52dTdLSU51TFNX TWR5S0V3OF8wSDA1cmpqNC9lZGl0P3VzcD1zaGFyaW5nDQo+ID4gPiA+ID4NCj4gPiA+ID4NCj4g PiA+ID4gVGhhbmtzLCBxdWl0ZSBoZWxwZnVsLg0KPiA+ID4gPiBBY3R1YWxseSBmcm9tIHBhZ2Ug MywgaXQgbG9va3MgbGlrZSB5b3VyIGV4cGVjdGF0aW9ucyBkb24ndCBjb250cmFkaWN0IGluIGdl bmVyYWwgd2l0aCBwcm9wb3NlZCBBUEk6DQo+ID4gPiA+DQo+ID4gPiA+IC4uLg0KPiA+ID4gPiB9 IGVsc2UgaWYgKGV2LmV2ZW50X3R5cGUgPT0gUlRFX0VWRU5UX1RZUEVfTENPUkUgJiYgZXYuc3Vi X2V2ZW50X2lkID09IEFQUF9TVEFURV9TRVFfVVBEQVRFKSB7DQo+ID4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgIHNhID0gZXYuZmxvd19xdWV1ZV9pZDsNCj4gPiA+ID4gICAgICAgICAgICAg ICAgICAgICAgICAgLyogZG8gY3JpdGljYWwgc2VjdGlvbiB3b3JrIHBlciBzYSAqLw0KPiA+ID4g PiAgICAgICAgICAgICAgICAgICAgICAgICBkb19jcml0aWNhbF9zZWN0aW9uX3dvcmsoc2EpOw0K PiA+ID4gPg0KPiA+ID4gPiBbS0FdIHRoYXQncyB0aGUgcGxhY2Ugd2hlcmUgSSBleHBlY3QgZWl0 aGVyDQo+ID4gPiA+IHJ0ZV9pcHNlY19pbmxpbmVfcHJvY2VzcyhzYSwgLi4uKTsgT1IgcnRlX2lw c2VjX2NyeXB0b19wcmVwYXJlKHNhLCAuLi4pOw0KPiA+ID4gPiB3b3VsZCBiZSBjYWxsZWQuDQo+ ID4gPg0KPiA+ID4gTWFrZXMgc2Vuc2UuIEJ1dCBjdXJyZW50bHksIHRoZSBsaWJyYXJ5IGRlZmlu ZXMgd2hhdCBpcw0KPiA+ID4gcnRlX2lwc2VjX2lubGluZV9wcm9jZXNzKCkgYW5kIHJ0ZV9pcHNl Y19jcnlwdG9fcHJlcGFyZSgpLCBidXQgaXQgc2hvdWxkDQo+ID4gPiBiZSBiYXNlZCBvbiB1bmRl cm5lYXRoIHNlY3VyaXR5IGRldmljZSBvciBjcnlwdG8gZGV2aWNlLg0KPiA+DQo+ID4gUmVhc29u IGZvciB0aGF0IC0gdGhlaXIgY29kZS1wYXRocyBhcmUgcXVpdGUgZGlmZmVyZW50Og0KPiA+IGZv ciBpbmxpbmUgZGV2aWNlcyB3ZSBjYW4gZG8gd2hvbGUgcHJvY2Vzc2luZyBzeW5jaHJvbm91c2x5 KHdpdGhpbiBwcm9jZXNzKCkgZnVuY3Rpb24pLA0KPiA+IHdoaWxlIGZybyBjcnlwdG8gaXQgaXMg c29ydCBvZiBzcGxpdCBpbnRvIHR3IHBhcnRzIC0NCj4gPiB3ZSBmaXJzdCBoYXZlIHRvIGRvIHBy ZXBhcmUoKTtlbnF1ZXVlKCkgdGhlbSB0byBjcnlwdG8tZGV2LCBhbmQgdGhlbiBkZXF1ZXVlKCk7 cHJvY2VzcygpLg0KPiA+IEFub3RoZXIgZ29vZCB0aGluZyB3aXRoIHRoYXQgd2F5IC0gaXQgYWxs b3dzIHRoZSBzYW1lIFNBIHRvIHdvcmsgd2l0aCBkaWZmZXJlbnQgZGV2aWNlcy4NCj4gPg0KPiA+ ID4NCj4gPiA+IFNvLCBJTU8gZm9yIGJldHRlciBjb250cm9sLCB0aGVzZSBmdW5jdGlvbnMgc2hv dWxkIGJlIHRoZSBmdW5jdGlvbiBwb2ludGVyDQo+ID4gPiBiYXNlZCBhbmQgYmFzZWQgb24gdW5k ZXJseWluZyBkZXZpY2UsIGxpYnJhcnkgY2FuIGZpbGwgdGhlDQo+ID4gPiBpbXBsZW1lbnRhdGlv bi4NCj4gPiA+DQo+ID4gPiBJTU8sIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBjcmVhdGUgInN0YXRp YyBpbmxpbmUgZnVuY3Rpb24iIHdpdGggYWxsICJpZiINCj4gPiA+IGNoZWNrcy4gSSB0aGluaywg d2UgY2FuIGhhdmUgZm91ciBpcHNlYyBmdW5jdGlvbnMgd2l0aCBmdW5jdGlvbiBwb2ludGVyDQo+ ID4gPiBzY2hlbWUuDQo+ID4gPg0KPiA+ID4gcnRlX2lwc2VjX2luYm91bmRfcHJlcGFyZSgpDQo+ ID4gPiBydGVfaXBzZWNfaW5ib3VuZF9wcm9jZXNzKCkNCj4gPiA+IHJ0ZV9pcHNlY19vdXRib3Vu ZF9wcmVwYXJlKCkNCj4gPiA+IHJ0ZV9pcHNlY19vdXRib3VuZF9wcm9jZXNzKCkNCj4gPiA+DQo+ ID4gPiBTb21lIG9mIHRoZSBvdGhlciBjb25jZXJuczoNCj4gPiA+IDEpIEZvciBIVyBpbXBsZW1l bnRhdGlvbiwgcnRlX2lwc2VjX3NhIG5lZWRzIHRvIG9wYXF1ZSBsaWtlIHJ0ZV9zZWN1cml0eQ0K PiA+ID4gYXMgc29tZSBvZiB0aGUgc3RydWN0dXJlIGRlZmluZWQgYnkgSFcgb3IgTWljcm9jb2Rl LiBXZSBjYW4gY2hvb3NlDQo+ID4gPiBhYnNvbHV0ZSBnZW5lcmljIGl0ZW1zIGFzIGNvbW1vbiBh bmQgZGV2aWNlL3J0ZV9zZWN1cml0eSBzcGVjaWZpYyBjYW4gYmUgb3BhcXVlLg0KPiA+DQo+ID4g SSBkb24ndCB0aGluayBpdCB3b3VsZCBiZSBhIHByb2JsZW0sIHJ0ZV9pcHNlY19zYSAgZG9lcyBj b250YWluIGEgcG9pbnRlciB0bw0KPiA+IHJ0ZV9zZWN1cml0eV9zZXNzaW9uLCBzbyBpdCBjYW4g cHJvdmlkZSBpdCBhcyBhbiBhcmd1bWVudCB0byB0aGVzZSBmdW5jdGlvbnMuDQo+IA0KPiBUaGUg cnRlX2lwc2VjX3NhIHdvdWxkIG5lZWQgc29tZSBwcml2YXRlIHNwYWNlIGZvciBhcHBsaWNhdGlv biB0byBzdG9yZQ0KPiBpdCdzIG1ldGFkYXRhLiBUaGVyZSBjYW4gYmUgU0EgaW1wbGVtZW50YXRp b25zIHdpdGggYWRkaXRpb25hbCBmaWVsZHMNCj4gZm9yIGZhc3RlciBsb29rdXBzLiBUbyByZXBo cmFzZSwgdGhlIGFwcGxpY2F0aW9uIHNob3VsZCBiZSBnaXZlbiBzb21lDQo+IHByb3Zpc2lvbiB0 byBzdG9yZSBzb21lIG1ldGFkYXRhIGl0IHdvdWxkIG5lZWQgZm9yIGZhc3RlciBsb29rdXBzLg0K PiBtYXkgc2FfaW5pdCBBUEkgY2FuIGdpdmUgYW1vdW50IHByaXZhdGUgc2l6ZSByZXF1aXJlZC4N Cj4gDQo+IA0KPiA+DQo+ID4gPg0KPiA+ID4gMilJIHRoaW5rLCBpbiBvcmRlciB0byBhY2NvbW1v ZGF0ZSB0aGUgZXZlbnQgZHJpdmVybiBtb2RlbC4gV2UgbmVlZCB0byBwYXNzDQo+ID4gPiB2b2lk ICoqIGluIHByZXBhcmUoKSBhbmQgcHJvY2VzcygpIGZ1bmN0aW9uIHdpdGggYW4gYWRkaXRpb25h bCBhcmd1bWVudA0KPiA+ID4gb2YgdHlwZShUWVBFX0VWRU5UL1RZUEVfTUJVRikgY2FuIGJlIHBh c3NlZCB0byBkZXRlY3QgcGFja2V0IG9iamVjdA0KPiA+ID4gdHlwZSBhcyBzb21lIG9mIHRoZSBm dW5jdGlvbnMgaW4gcHJlcGFyZSgpIGFuZCBwcm9jZXNzKCkgbWF5IG5lZWQNCj4gPiA+IHJ0ZV9l dmVudCB0byBvcGVyYXRlIG9uLg0KPiA+DQo+ID4gWW91IGFyZSB0YWxraW5nIGhlcmUgYWJvdXQg c2VjdXJpdHkgZGV2aWNlIHNwZWNpZmljIGZ1bmN0aW9ucyBkZXNjcmliZWQgYmVsb3csIGNvcnJl Y3Q/DQo+ID4NCj4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgIC8q IElzc3VlIHRoZSBjcnlwdG8gcmVxdWVzdCBhbmQgZ2VuZXJhdGUgdGhlIGZvbGxvd2luZyBvbiBj cnlwdG8gd29yayBjb21wbGV0aW9uICovDQo+ID4gPiA+IFtLQV0gdGhhdCdzIHRoZSBwbGFjZSB3 aGVyZSBJIGV4cGVjdCBydGVfaXBzZWNfY3J5cHRvX3Byb2Nlc3MoLi4uKSBiZSBpbnZva2VkLg0K PiA+ID4gPg0KPiA+ID4gPiAgICAgICAgICAgICAgICAgICAgICAgICBldi5mbG93X3F1ZXVlX2lk ID0gdHhfcG9ydDsNCj4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgZXYuc3ViX2V2ZW50 X2lkID0gdHhfcXVldWVfaWQ7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICAgICAgICAgIGV2LnNj aGVkX3N5bmMgPSBSVEVfU0NIRURfU1lOQ19BVE9NSUM7DQo+ID4gPiA+ICAgICAgICAgICAgICAg ICAgICAgICAgIHJ0ZV9jcnlwdG9kZXZfZXZlbnRfZW5xdWV1ZShjcnlwdG9kZXYsIGV2Lm1idWYs IGV2ZW50ZGV2LCBldik7DQo+ID4gPiA+ICAgICAgICAgICAgICAgICB9DQo+ID4gPiA+DQo+ID4g PiA+DQo+ID4gPiA+ID4gSSBhbSBub3Qgc2F5aW5nIHRoaXMgc2hvdWxkIGJlIHRoZSBPTkxZIHdh eSB0byBkbyBhcyBpdCBkb2VzIG5vdCB3b3JrDQo+ID4gPiA+ID4gdmVyeSB3ZWxsIHdpdGggbm9u IE5QVS9GUEdBIGNsYXNzIG9mIFNvQy4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFNvIGhvdyBhYm91 dCBtYWtpbmcgdGhlIHByb3Bvc2VkIElQU2VjIGxpYnJhcnkgYXMgcGx1Z2luL2RyaXZlciB0bw0K PiA+ID4gPiA+IHJ0ZV9zZWN1cml0eS4NCj4gPiA+ID4NCj4gPiA+ID4gQXMgSSBtZW50aW9uZWQg YWJvdmUsIEkgZG9uJ3QgdGhpbmsgdGhhdCBwdXNoaW5nIHdob2xlIElQU2VjIGRhdGEtcGF0aCBp bnRvIHJ0ZV9zZWN1cml0eQ0KPiA+ID4gPiBpcyB0aGUgYmVzdCBwb3NzaWJsZSBhcHByb2FjaC4N Cj4gPiA+ID4gVGhvdWdoIEkgcHJvYmFibHkgdW5kZXJzdGFuZCB5b3VyIGNvbmNlcm46DQo+ID4g PiA+IEluIFJGQyBjb2RlIHdlIGFsd2F5cyBkbyB3aG9sZSBwcmVwYXJlL3Byb2Nlc3MgaW4gU1cg KGF0dGFjaC9yZW1vdmUgRVNQIGhlYWRlcnMvdHJhaWxlcnMsIHNvIHBhZGRpbmdzIGV0Yy4pLA0K PiA+ID4gPiBpLmUuIHJpZ2h0IG5vdyBvbmx5IGRldmljZSB0eXBlczogUlRFX1NFQ1VSSVRZX0FD VElPTl9UWVBFX05PTkUgYW5kIFJURV9TRUNVUklUWV9BQ1RJT05fVFlQRV9JTkxJTkVfQ1JZUFRP IGFyZQ0KPiBjb3ZlcmVkLg0KPiA+ID4gPiBUaG91Z2ggdGhlcmUgYXJlIGRldmljZXMgd2hlcmUg bW9zdCBvZiBwcmVwYXJlL3Byb2Nlc3MgY2FuIGJlIGRvbmUgaW4gSFcNCj4gPiA+ID4gKFJURV9T RUNVUklUWV9BQ1RJT05fVFlQRV9JTkxJTkVfUFJPVE9DT0wvUlRFX1NFQ1VSSVRZX0FDVElPTl9U WVBFX0xPT0tBU0lERV9QUk9UT0NPTCksDQo+ID4gPiA+IHBsdXMgaW4gZnV0dXJlIGNvdWxkIGJl IGRldmljZXMgd2hlcmUgcHJlcGFyZS9wcm9jZXNzIHdvdWxkIGJlIHNwbGl0IGJldHdlZW4gSFcv U1cgaW4gYSBjdXN0b20gd2F5Lg0KPiA+ID4gPiBJcyB0aGF0IHNvPw0KPiA+ID4gPiBUbyBhZGRy ZXNzIHRoYXQgaXNzdWUgSSBzdXBwb3NlIHdlIGNhbiBkbzoNCj4gPiA+ID4gMS4gQWRkIHN1cHBv cnQgZm9yIFJURV9TRUNVUklUWV9BQ1RJT05fVFlQRV9JTkxJTkVfUFJPVE9DT0wgYW5kIFJURV9T RUNVUklUWV9BQ1RJT05fVFlQRV9MT09LQVNJREVfUFJPVE9DT0wNCj4gPiA+ID4gICAgIHNlY3Vy aXR5IGRldmljZXMgaW50byBpcHNlYy4NCj4gPiA+ID4gICAgIFdlIHBsYW5uZWQgdG8gZG8gaXQg YW55d2F5LCBqdXN0IGRvbid0IGhhdmUgaXQgZG9uZSB5ZXQuDQo+ID4gPiA+IDIuIEZvciBjdXN0 b20gY2FzZSAtIGludHJvZHVjZSBSVEVfU0VDVVJJVFlfQUNUSU9OX1RZUEVfSU5MSU5FX0NVU1RP TSBhbmQNCj4gUlRFX1NFQ1VSSVRZX0FDVElPTl9UWVBFX0xPT0tBU0lERV9DVVNUT00NCj4gPiA+ DQo+ID4gPiBUaGUgcHJvYmxlbSBpcywgQ1VTVE9NIG1heSBoYXZlIGRpZmZlcmVudCB2YXJpYW50 cyBhbmQgImlmIiBjb25kaXRpb25zIHdvbid0DQo+ID4gPiBzY2FsZSBpZiB3ZSBjaG9vc2UgdG8g aGF2ZSBub24gZnVuY3Rpb24gcG9pbnRlciBzY2hlbWUuIE90aGVyd2lzZSwgaXQNCj4gPiA+IGxv b2tzIE9LIHRvIGNyZWF0ZSBuZXcgU0VDVVJJVFkgVFlQRSBhbmQgYXNzb2NpYXRlZCBwbHVnaW4g Zm9yIHByZXBhcmUoKSBhbmQgcHJvY2VzcygpDQo+ID4gPiBmdW5jdGlvbiBpbiBsaWJydGVfaXBz ZWMgbGlicmFyeS4NCj4gPg0KPiA+IEluIHByaW5jaXBsZSwgSSBkb24ndCBtaW5kIHRvIGFsd2F5 cyB1c2UgZnVuY3Rpb24gcG9pbnRlcnMgZm9yIHByZXBhcmUoKS9wcm9jZXNzKCksIGJ1dDoNCj4g PiBmcm9tIHlvdXIgZGVzY3JpcHRpb24gYWJvdmUgb2YgSU5MSU5FX1BST1RPQ09MIGFuZCBMT09L QVNJREVfUFJPVE9DT0wNCj4gPiB0aGUgcHJvY2VzcygpL3ByZXBhcmUoKSBmb3Igc3VjaCBkZXZp Y2VzIGxvb2tzIHdlbGwgZGVmaW5lZCBhbmQNCj4gPiBzdHJhaWdodGZvcndhcmQgdG8gaW1wbGVt ZW50Lg0KPiA+IE5vdCBzdXJlIHdlJ2xsIG5lZWQgYSBmdW5jdGlvbiBwb2ludGVyIGZvciBzdWNo IHNpbXBsZSBhbmQgbGlnaHR3ZWlnaHQgY2FzZToNCj4gPiBzZXQvY2hlY2sgb2xfZmxhZ3MsIHNl dC9yZWFkIHVzZXJkYXRhIHZhbHVlLg0KPiA+IEkgdGhpbmsgZXh0cmEgZnVuY3Rpb24gY2FsbCBo ZXJlIGlzIGtpbmQgb2Ygb3ZlcmtpbGwgYW5kIHdpbGwgb25seSBzbG93ZG93biB0aGluZ3MuDQo+ ID4gQnV0IGlmIHRoYXQgd291bGQgYmUgbWFqb3JpdHkgcHJlZmVyZW5jZSAtIEkgd291bGRuJ3Qg YXJndWUuDQo+ID4gQlRXIGlmIHdlJ2xsIGFncmVlIHRvIGFsd2F5cyB1c2UgZnVuY3Rpb24gcG9p bnRlcnMgZm9yIHByb2Nlc3MvcHJlcGFyZSwNCj4gPiB0aGVuIHRoZXJlIGlzIG5vIHBvaW50IHRv IGhhdmUgdGhhdCBhbGwgZXhpc3RpbmcgYWN0aW9uIHR5cGVzIC0NCj4gPiBhbGwgd2UgbmVlZCBp cyBhbiBpbmRpY2F0aW9uIGlzIGl0IGlubGluZSBvciBsb29rYXNpZGUgZGV2aWNlIGFuZA0KPiA+ IGZ1bmN0aW9uIHBvaW50ZXJzIGZvciBwcmVwYXJlL3Byb2Nlc3MoKS4NCj4gDQo+IE1lIHRvbyBu b3QgYSBmYW4gb2YgZnVuY3Rpb24gcG9pbnRlciBzY2hlbWUuIEJ1dCBvcHRpb25zIGFyZSBsaW1p dGVkLg0KPiANCj4gVGhvdWdoIHRoZSBnZW5lcmljIHVzYWdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2Fy ZCwgdGhlIGltcGxlbWVudGF0aW9uIG9mDQo+IHRoZSBhYm92ZSBtb2RlcyBjYW4gYmUgdmVyeSBk aWZmZXJlbnQuIFZlbmRvcnMgY291bGQgb3B0aW1pemUgdmFyaW91cw0KPiBvcGVyYXRpb25zIChT UU4gdXBkYXRlIGZvciBleGFtcGxlKSBmb3IgYmV0dGVyIHBlcmZvcm1hbmNlIG9uIHRoZWlyDQo+ IGhhcmR3YXJlLiBTdGlja2luZyB0byBvbmUgYXBwcm9hY2ggd291bGQgbmVnYXRlIHRoYXQgYWR2 YW50YWdlLg0KPiANCj4gQW5vdGhlciBvcHRpb24gd291bGQgYmUgdG8gdXNlIG11bHRpcGxlLXdv cmtlciBtb2RlbCB0aGF0IEFub29iIGhhZA0KPiBwcm9wb3NlZCBzb21lIHRpbWUgYmFjay4NCj4g aHR0cHM6Ly9tYWlscy5kcGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxOC1KdW5lLzEwMzgwOC5odG1s DQo+IA0KPiBJZGVhIHdvdWxkIGJlIHRvIG1ha2UgYWxsIGxpYl9pcHNlYyBmdW5jdGlvbnMgYWRk ZWQgYXMgc3RhdGljIGlubGluZQ0KPiBmdW5jdGlvbnMuDQo+IA0KPiBzdGF0aWMgaW5saW5lIHJ0 ZV9pcHNlY19hZGRfdHVubmVsX2hkcihzdHJ1Y3QgcnRlX21idWYgKm1idWYpOw0KPiBzdGF0aWMg aW5saW5lIHJ0ZV9pcHNlY191cGRhdGVfc3FuKHN0cnVjdCBydGVfbWJ1ZiAqbWJ1ZiwgJnNlcV9u byk7DQo+IC4uLg0KPiANCj4gRm9yIHRoZSByZWd1bGFyIHVzZSBjYXNlLCBhIGZhdA0KPiBydGVf aXBzZWNfKGluYm91bmQvb3V0Ym91bmQpXyhwcmVwYXJlL3Byb2Nlc3MpIGNhbiBiZSBwcm92aWRl ZC4gVGhlDQo+IHdvcmtlciBpbXBsZW1lbnRlZCBmb3IgdGhhdCBjYXNlIGNhbiBkaXJlY3RseSBj YWxsIHRoZSBmdW5jdGlvbiBhbmQNCj4gZm9yZ2V0IGFib3V0IHRoZSBvdGhlciBtb2Rlcy4gRm9y IG90aGVyIHZlbmRvcnMgd2l0aCB2YXJ5aW5nDQo+IGNhcGFiaWxpdGllcywgdGhlcmUgY2FuIGJl IG11bHRpcGxlIHdvcmtlcnMgdGFraW5nIGFkdmFudGFnZSBvZiB0aGUgaHcNCj4gZmVhdHVyZXMu IEZvciBzdWNoIHdvcmtlcnMsIHRoZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBjYW4gYmUgdXNl ZCBhcw0KPiByZXF1aXJlZC4gVGhpcyBnaXZlcyB2ZW5kb3JzIG9wcG9ydHVuaXR5IHRvIHBpY2sg YW5kIGNob29zZSB3aGF0IHRoZXkNCj4gd2FudCBmcm9tIHRoZSBpcHNlYyBsaWIuIFRoZSB3b3Jr ZXIgdG8gYmUgdXNlZCBmb3IgdGhhdCBjYXNlIHdpbGwgYmUNCj4gZGV0ZXJtaW5lZCBiYXNlZCBv biB0aGUgY2FwYWJpbGl0aWVzIGV4cG9zZWQgYnkgdGhlIFBNRHMuDQo+IA0KPiBodHRwczovL21h aWxzLmRwZGsub3JnL2FyY2hpdmVzL2Rldi8yMDE4LUp1bmUvMTAzODI4Lmh0bWwNCj4gDQo+IFRo ZSBhYm92ZSBlbWFpbCBleHBsYWlucyBob3cgbXVsdGlwbGUgd29ya2VycyBjYW4gYmUgdXNlZCB3 aXRoIGwyZndkLg0KPiANCj4gRm9yIHRoaXMgdG8gd29yaywgdGhlIGFwcGxpY2F0aW9uICYgbGli cmFyeSBjb2RlIG5lZWQgdG8gYmUgbW9kdWxhcmlzZWQuDQo+IExpa2Ugd2hhdCBpcyBiZWluZyBk b25lIGluIHRoZSBmb2xsb3dpbmcgc2VyaWVzLA0KPiBodHRwczovL21haWxzLmRwZGsub3JnL2Fy Y2hpdmVzL2Rldi8yMDE4LUp1bmUvMTAzNzg2Lmh0bWwNCj4gDQo+IFRoaXMgd2F5IG9uZSBhcHBs aWNhdGlvbiBjYW4gYmUgbWFkZSB0byBydW4gb24gbXVsdGlwbGUgcGxhdGZvcm1zLCB3aXRoDQo+ IHRoZSBhcHAgYmVpbmcgb3B0aW1pemVkIGZvciB0aGUgcGxhdGZvcm0gb24gd2hpY2ggaXQgd291 bGQgcnVuLg0KPiANCj4gLyogU1QgU0EgLSBSVEVfU0VDVVJJVFlfQUNUSU9OX1RZUEVfTk9ORSAt IENSWVBUT0RFViAtIE5PIEVWRU5UREVWKi8NCj4gd29ya2VyMSgpDQo+IHsNCj4gICAgICB3aGls ZSh0cnVlKSB7DQo+ICAgICAgICAgIG5iX3BrdHMgPSBydGVfZXRoX3J4X2J1cnN0KCk7DQo+IA0K PiAgICAgICAgICBpZiAobmJfcGt0cyAhPSAwKSB7DQo+ICAgICAgICAgICAgICAvKiBEbyBsb29r dXAgKi8NCj4gICAgICAgICAgICAgIHJ0ZV9pcHNlY19pbmJvdW5kX3ByZXBhcmUoKTsNCj4gICAg ICAgICAgICAgIHJ0ZV9jcnlwdG9kZXZfZW5xdWV1ZV9idXJzdCgpOw0KPiAgICAgICAgICAgICAg LyogVXBkYXRlIGluLWZsaWdodCAqLw0KPiAgICAgICAgICB9DQo+IA0KPiAgICAgICAgICBpZiAo aW5fZmxpZ2h0KSB7DQo+ICAgICAgICAgICAgICBydGVfY3J5cHRvZGV2X2RlcXVldWVfYnVyc3Qo KTsNCj4gICAgICAgICAgICAgIHJ0ZV9pcHNlY19vdXRib3VuZF9wcm9jZXNzKCk7DQo+ICAgICAg ICAgIH0NCj4gICAgICAgICAgLyogcm91dGUgcGFja2V0ICovDQo+IH0NCj4gDQo+ICNpbmNsdWRl IDxydGVfaXBzZWMuaD4gICAvKiBGb3IgSVBzZWMgbGliIHN0YXRpYyBpbmxpbmVzICovDQo+IA0K PiBzdGF0aWMgaW5saW5lIHJ0ZV9ldmVudF9lbnF1ZXVlKHN0cnVjdCBydGVfZXZlbnQgKmV2KQ0K PiB7DQo+ICAgICAgLi4uDQo+IH0NCj4gDQo+IC8qIE1UIHNhZmUgU0EgLSBSVEVfU0VDVVJJVFlf QUNUSU9OX1RZUEVfTk9ORSAtIENSWVBUT0RFViAtIEVWRU5UREVWKQ0KPiB3b3JrZXIyKCkNCj4g ew0KPiAgICAgIHdoaWxlKHRydWUpIHsNCj4gICAgICAgICAgbmJfcGt0cyA9IHJ0ZV9ldGhfcnhf YnVyc3QoKTsNCj4gDQo+ICAgICAgICAgIGlmIChuYl9wa3RzICE9IDApIHsNCj4gICAgICAgICAg ICAgIC8qIERvIGxvb2t1cCAqLw0KPiAgICAgICAgICAgICBydGVfaXBzZWNfYWRkIHR1bm5lbChl di0+bWJ1Zik7DQo+ICAgICAgICAgICAgIHJ0ZV9ldmVudF9lbnF1ZXVlKGV2KQ0KPiAgICAgICAg ICAgICBydGVfY3J5cHRvZGV2X2VucXVldWVfYnVyc3QoZXYtPm1idWYpOw0KPiAgICAgICAgICAg ICAgLyogVXBkYXRlIGluLWZsaWdodCAqLw0KPiAgICAgICAgICB9DQo+IA0KPiAgICAgICAgICBp ZiAoaW5fZmxpZ2h0KSB7DQo+ICAgICAgICAgICAgICBydGVfY3J5cHRvZGV2X2RlcXVldWVfYnVy c3QoKTsNCj4gICAgICAgICAgICAgIHJ0ZV9pcHNlY19vdXRib3VuZF9wcm9jZXNzKCk7DQo+ICAg ICAgICAgIH0NCj4gICAgICAgICAgLyogcm91dGUgcGFja2V0ICovDQo+IH0NCg0KSG1tLCBub3Qg c3VyZSBob3cgdGhlc2UgMiBjYXNlcyByZWFsbHkgZGlmZmVycyBpbiB0ZXJtcyBvZiBpcHNlYyBw cm9jZXNzaW5nLg0KSSBkbyB1bmRlcnN0YW5kIHRoZSBpbiBzZWNvbmQgb25lIHdlIHVzZSBldmVu dHMgdG8gcHJvcGFnYXRlIHBhY2tldHMgdGhyb3VnaCB0aGUgc3lzdGVtLA0KYW5kIHRoYXQgZXZl bnRkZXYgbWlnaHQgYmUgc21hcnQgZW5vdWdoIHRvIHByZXNlcnZlIHBhY2tldCBvcmRlcmluZywg ZXRjLg0KQnV0IGluIHRlcm1zIG9mIGlwc2VjIHByb2Nlc3Npbmcgd2UgaGF2ZSB0byBkbyBleGFj dGx5IHRoZSBzYW1lIGZvciBib3RoIGNhc2VzLg0KTGV0IHNheSBmb3IgdGhlIGV4YW1wbGUgYWJv dmUgKG91dGJvdW5kLCBjcnl0cG9kZXYpOg0KYSkgbG9va3VwIGFuIFNBDQpiKSBpbmNyZW1lbnQg U0EuU1FOIGFuZCBjaGVjayBmb3Igb3ZlcmZsb3cNCmQpIGdlbmVyYXRlIElWDQplKSBnZW5lcmF0 ZSAmIGZpbGwgRVNQIGhlYWRlci90cmFpbGVyLCB0dW5uZWwgaGVhZGVyDQpmKSBwZXJmb3JtIGFj dHVhbCBlbmNyeXB0LCBnZW5lcmF0ZSBkaWdlc3QNCg0KU28gY3J5cHRvX3ByZXBhcmUoKSAtIGRl YWxzIHdpdGggYiktZSkuDQpmKSBpcyBoYW5kbGVkIGJ5IGNyeXB0b2Rldi4gDQpZZXMsIHN0ZXAg YikgbWlnaHQgbmVlZCB0byBiZSBhdG9taWMsIG9yIG1pZ2h0IG5vdCAtDQpkZXBlbmRzIG9uIHBh cnRpY3VsYXIgYXBwbGljYXRpb24gZGVzaWduLg0KQnV0IGluIGJvdGggY2FzZXMgKHBvbGxpbmcv ZXZlbnRkZXYpIHdlIGRvIG5lZWQgYWxsIHRoZXNlIHN0ZXBzIHRvIGJlIHBlcmZvcm1lZC4NCktv bnN0YW50aW4NCg0KPiANCj4gSW4gc2hvcnQsDQo+IA0KPiAxKSBIYXZlIHNlcGFyYXRlIHNtYWxs IGlubGluZSBmdW5jdGlvbnMgaW4gbGlicmFyeQ0KPiAyKSBJZiBzb21ldGhpbmcgY2FuIGJlIGdy b3VwZWQsIGl0IGNhbiBiZSBleHBvc2VkIGEgc3BlY2lmaWMgZnVuY3Rpb24NCj4gdG8gYWRkcmVz cyBhIHNwZWNpZmljIHVzZWNhc2VzDQo+IDMpIExldCByZW1haW5pbmcgY29kZSwgY2FuIGdvIGlu IGFwcGxpY2F0aW9uIGFzIGRpZmZlcmVudCB3b3JrZXIoKSB0bw0KPiBhZGRyZXNzIGFsbCB0aGUg dXNlY2FzZXMuDQo+IA0KPiA+DQo+ID4gS29uc3RhbnRpbg0KPiA+DQo+ID4gPg0KPiA+ID4NCj4g PiA+ID4gICAgIGFuZCBhZGQgaW50byBydGVfc2VjdXJpdHlfb3BzICAgbmV3IGZ1bmN0aW9uczoN Cj4gPiA+ID4gICAgIHVpbnQxNl90IGxvb2thc2lkZV9wcmVwYXJlKHN0cnVjdCBydGVfc2VjdXJp dHlfc2Vzc2lvbiAqc2Vzcywgc3RydWN0IHJ0ZV9tYnVmICptYltdLCBzdHJ1Y3Qgc3RydWN0IHJ0 ZV9jcnlwdG9fb3AgKmNvcFtdLCB1aW50MTZfdA0KPiBudW0pOw0KPiA+ID4gPiAgICAgdWludDE2 X3QgbG9va2FzaWRlX3Byb2Nlc3Moc3RydWN0IHJ0ZV9zZWN1cml0eV9zZXNzaW9uICpzZXNzLCBz dHJ1Y3QgcnRlX21idWYgKm1iW10sIHN0cnVjdCBzdHJ1Y3QgcnRlX2NyeXB0b19vcCAqY29wW10s IHVpbnQxNl90DQo+IG51bSk7DQo+ID4gPiA+ICAgICB1aW50MTZfdCBpbmxpbmVfcHJvY2Vzcyhz dHJ1Y3QgcnRlX3NlY3VyaXR5X3Nlc3Npb24gKnNlc3MsIHN0cnVjdCBydGVfbWJ1ZiAqbWJbXSwg c3RydWN0IHN0cnVjdCBydGVfY3J5cHRvX29wICpjb3BbXSwgdWludDE2X3QgbnVtKTsNCj4gPiA+ ID4gICAgIFNvIGZvciBjdXN0b20gSFcsIFBNRCBjYW4gb3ZlcndyaXRlIG5vcm1hbCBwcmVwYXJl L3Byb2Nlc3MgYmVoYXZpb3IuDQo+ID4gPiA+DQo+ID4gPiA+ID4gVGhpcyB3b3VsZCBnaXZlIGZs ZXhpYmx5IGZvciBlYWNoIHZlbmRvci9wbGF0Zm9ybSBjaG9vc2UgdG8gZGlmZmVyZW50DQo+ID4g PiA+ID4gSVBzZSBpbXBsZW1lbnRhdGlvbiBiYXNlZCBvbiBIVyBzdXBwb3J0IFdJVEhPVVQgQ0hB TkdJTkcgVEhFIEFQUExJQ0FUSU9ODQo+ID4gPiA+ID4gSU5URVJGQUNFLg0KPiA+ID4gPg0KPiA+ ID4gPiBOb3Qgc3VyZSB3aGF0IEFQSSBjaGFuZ2VzIHlvdSBhcmUgcmVmZXJyaW5nIHRvPw0KPiA+ ID4gPiBBcyBJIGFtIGF3YXJlIHdlIGRvIGludHJvZHVjZSBuZXcgQVBJLCBidXQgYWxsIGV4aXN0 aW5nIEFQSXMgcmVtYWluIGluIHBsYWNlLg0KPiA+ID4NCj4gPiA+DQo+ID4gPiBXaGF0IEkgbWVh bnQgd2FzLCBTaW5nbGUgYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIHRvIGVuYWJs ZSBJUFNlYyBwcm9jZXNzaW5nIHRvDQo+ID4gPiBhcHBsaWNhdGlvbi4NCj4gPiA+DQo+ID4gPg0K PiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSU1PLCBydGVfc2VjdXJpdHkgSVBzZWMgbG9v ayBhc2lkZSBzdXBwb3J0IGNhbiBiZSBzaW1wbHkgYWRkZWQgYnkNCj4gPiA+ID4gPiBjcmVhdGlu ZyB0aGUgdmlydHVhbCBjcnlwdG8gZGV2aWNlKGkuZSBtb3ZlIHRoZSBwcm9wb3NlZCBjb2RlIHRv IHRoZSB2aXJ0dWFsIGNyeXB0byBkZXZpY2UpDQo+ID4gPiA+ID4gbGlrZXdpc2UgaW5saW5lIHN1 cHBvcnQNCj4gPiA+ID4gPiBjYW4gYmUgYWRkZWQgYnkgdGhlIHZpcnR1YWwgZXRoZGV2IGRldmlj ZS4NCj4gPiA+ID4NCj4gPiA+ID4gVGhhdCdzIHByb2JhYmx5IHBvc3NpYmxlIGFuZCBpZiBzb21l b25lIHdvdWxkIGxpa2UgdG8gaW50cm9kdWNlIHN1Y2ggYWJzdHJhY3Rpb24gLSBOUCBpbiBnZW5l cmFsDQo+ID4gPiA+ICh0aG91Z2ggbXkgc3VzcGljaW9uIC0gaXQgbWlnaHQgYmUgdG9vIGhlYXZ5 IHRvIGJlIHJlYWxseSB1c2VmdWwpLg0KPiA+ID4gPiBUaG91Z2ggSSBkb24ndCB0aGluayBpdCBz aG91bGQgYmUgdGhlIG9ubHkgcG9zc2libGUgd2F5IGZvciB0aGUgdXNlciB0byBlbmFibGUgSVBz ZWMgZGF0YS1wcm9jZXNzaW5nIGluc2lkZSBoaXMgYXBwLg0KPiA+ID4gPiBBZ2FpbiBJIGd1ZXNz IHN1Y2ggdmlydHVhbC1kZXYgd2lsbCBzdGlsbCB1c2UgcnRlX2lwc2VjIGluc2lkZS4NCj4gPiA+ DQo+ID4gPiBJIGRvbid0IGhhdmUgc3Ryb25nIG9waW5pb24gb24gdmlydHVhbCBkZXZpY2VzIFZT IGZ1bmN0aW9uIHBvaW50ZXIgYmFzZWQNCj4gPiA+IHByZXBhcmUoKSBhbmQgcHJvY2VzcygpIGZ1 bmN0aW9uIGluIGxpYnJ0ZV9pcHNlYyBsaWJyYXJ5Lg0KPiA+ID4NCj4gPiA+ID4NCj4gPiA+ID4g PiBUaGlzIHdvdWxkIGF2b2lkIHRoZSBuZWVkIGZvcg0KPiA+ID4gPiA+IHVwZGF0aW5nIGlwc2Vj LWd3IGFwcGxpY2F0aW9uIGFzIHdlbGwgaS5lIHVuaWZpZWQgaW50ZXJmYWNlIHRvIGFwcGxpY2F0 aW9uLg0KPiA+ID4gPg0KPiA+ID4gPiBJIHRoaW5rIC0gaXQgd291bGQgIHJlYWxseSBnb29kIHRv IHNpbXBsaWZ5IGV4aXN0aW5nIGlwc2VjLXNlY2d3IHNhbXBsZSBhcHAuDQo+ID4gPiA+IFNvbWUg cGFydHMgb2YgaXQgc2VlbXMgdW5uZWNlc3NhcnkgY29tcGxleCB0byBtZS4NCj4gPiA+ID4gT25l IG9mIHRoZSByZWFzb25zIGZvciBpdCAtICB3ZSBkb24ndCByZWFsbHkgaGF2ZSBhbiB1bmlmaWVk IChhbmQgdHJhbnNwYXJlbnQpIEFQSSBmb3IgaXBzZWMgZGF0YS1wYXRoLg0KPiA+ID4gPiBMZXQn cyBsb29rIGF0IGlwc2VjX2VucXVldWUoKSBhbmQgcmVsYXRlZCBjb2RlIChleGFtcGxlcy9pcHNl Yy1zZWNndy9pcHNlYy5jOjM2NSkNCj4gPiA+ID4gSXQgaXMgaHVnZSAoYW5kIHVnbHkpIC0gIHVz ZXIgaGFzIHRvIGhhbmRsZSBkb3plbiBkaWZmZXJlbnQgY2FzZXMganVzdCB0byBlbnF1ZXVlIHBh Y2tldCBmb3IgSVBzZWMgcHJvY2Vzc2luZy4NCj4gPiA+ID4gT25lIG9mIHRoZSBhaW1zIG9mIHJ0 ZV9pcHNlYyBsaWJyYXJ5IC0gaGlkZSBhbGwgdGhhdCBjb21wbGV4aXRpZXMgaW5zaWRlIHRoZSBs aWJyYXJ5IGFuZCBwcm92aWRlIHRvDQo+ID4gPiA+IHRoZSB1cHBlciBsYXllciBjbGVhbiBhbmQg dHJhbnNwYXJlbnQgQVBJLg0KPiA+ID4gPg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSWYgeW91IGRv bid0IGxpa2UgdGhlIGFib3ZlIGlkZWEsIGFueSBzY2hlbWUgb2YgcGx1Z2luIGJhc2VkDQo+ID4g PiA+ID4gaW1wbGVtZW50YXRpb24gd291bGQgYmUgZmluZSBzbyB0aGF0IHZlbmRvciBvciBwbGF0 Zm9ybSBjYW4gY2hvb3NlIGl0cyBvd24gaW1wbGVtZW50YXRpb24uDQo+ID4gPiA+ID4gSXQgY2Fu IGJlIGJhc2VkIG9uIHBhcnRpYWwgSFcgaW1wbGVtZW50IHRvby4gaS5lIFNBIGxvb2sgY2FuIGJl IHVzZWQgaW4gU1csIHJlbWFpbmluZyBzdHVmZiBpbiBIVw0KPiA+ID4gPiA+IChmb3IgZXhhbXBs ZSBJUHNlYyBpbmxpbmUgY2FzZSkNCj4gPiA+ID4NCj4gPiA+ID4gSSBhbSBzdXJlbHkgb2sgd2l0 aCB0aGUgaWRlYSB0byBnaXZlIHZlbmRvcnMgYW4gYWJpbGl0eSB0byBjdXN0b21pemUgaW1wbGVt ZW50YXRpb24NCj4gPiA+ID4gYW5kIGVuYWJsZSB0aGVpciBIVyBjYXBhYmlsaXRpZXMuDQo+ID4g Pg0KPiA+ID4gSSB0aGluaywgV2UgYXJlIG9uIHRoZSBzYW1lIHBhZ2UsIGp1c3QgdGhhdCB0aGUg ZmluZSBkZXRhaWxzIG9mICJmcmFtZXdvcmsiDQo+ID4gPiBmb3IgY3VzdG9taXppbmcgaW1wbGVt ZW50YXRpb24gYmFzZWQgb24gdGhlaXIgSFcgY2FwYWJpbGl0aWVzIG5lZWQgdG8NCj4gPiA+IGly b24gb3V0Lg0KPiA+ID4NCj4gPiA+ID4gRG8geW91IHRoaW5rIHByb3Bvc2VkIGFkZGl0aW9ucyB0 byB0aGUgcnRlX3NlY3VyaXR5IHdvdWxkIGJlICBlbm91Z2gsDQo+ID4gPiA+IG9yIHNvbWV0aGlu ZyBleHRyYSBpcyBuZWVkZWQ/DQo+ID4gPg0KPiA+ID4gU2VlIGFib3ZlLg0KPiA+ID4NCj4gPiA+ IEplcmluDQo+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiBLb25zdGFudGluDQo+ID4gPiA+DQo+ID4g PiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiAjIEZvciBwcm90b2NvbHMgbGlrZSBVRFAsIGl0IG1h a2VzIHNlbnNlIHRvIGNyZWF0ZSBsaWJydGVfdWRwIGFzIHRoZXJlDQo+ID4gPiA+ID4gbm8gbXVj aCBIVyBzcGVjaWZpYyBvZmZsb2FkIG90aGVyIHRoYW4gZXRoZGV2IHByb3ZpZGVzLg0KPiA+ID4g PiA+DQo+ID4gPiA+ID4gIyBQRENQIGNvdWxkIGJlIGFub3RoZXIgbGlicmFyeSB0byBvZmZsb2Fk IHRvIEhXLCBTbyB0YWxraW5nDQo+ID4gPiA+ID4gcnRlX3NlY3VyaXR5IHBhdGggbWFrZXMgbW9y ZSBzZW5zZSBpbiB0aGF0IGNhc2UgdG9vLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSmVyaW4NCg==