From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ola Liljedahl Subject: Re: [PATCH v3 2/5] ring: add a non-blocking implementation Date: Mon, 28 Jan 2019 22:31:14 +0000 Message-ID: <1548714685.11472.81.camel@arm.com> References: <20190115235227.14013-1-gage.eads@intel.com> <20190118152326.22686-1-gage.eads@intel.com> <20190118152326.22686-3-gage.eads@intel.com> <1548168583.31150.32.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CA46E@FMSMSX108.amr.corp.intel.com> <1548238575.31150.73.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CB6FE@FMSMSX108.amr.corp.intel.com> <1548671766.3076.16.camel@arm.com> <9184057F7FC11744A2107296B6B8EB1E541CC312@FMSMSX108.amr.corp.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: "olivier.matz@6wind.com" , "stephen@networkplumber.org" , nd , "bruce.richardson@intel.com" , "arybchenko@solarflare.com" , "konstantin.ananyev@intel.com" To: "jerinj@marvell.com" , "mczekaj@marvell.com" , "gage.eads@intel.com" , "dev@dpdk.org" Return-path: Received: from EUR04-DB3-obe.outbound.protection.outlook.com (mail-eopbgr60063.outbound.protection.outlook.com [40.107.6.63]) by dpdk.org (Postfix) with ESMTP id 30DA95F36 for ; Mon, 28 Jan 2019 23:31:18 +0100 (CET) In-Reply-To: <9184057F7FC11744A2107296B6B8EB1E541CC312@FMSMSX108.amr.corp.intel.com> Content-Language: en-US Content-ID: <9C7935FF3C70474F848B6D14BD0E626F@eurprd08.prod.outlook.com> List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" T24gTW9uLCAyMDE5LTAxLTI4IGF0IDE4OjU0ICswMDAwLCBFYWRzLCBHYWdlIHdyb3RlOg0KPiAN Cj4gPiANCj4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+IEZyb206IE9sYSBMaWxq ZWRhaGwgW21haWx0bzpPbGEuTGlsamVkYWhsQGFybS5jb21dDQo+ID4gU2VudDogTW9uZGF5LCBK YW51YXJ5IDI4LCAyMDE5IDQ6MzYgQU0NCj4gPiBUbzogamVyaW5qQG1hcnZlbGwuY29tOyBtY3pl a2FqQG1hcnZlbGwuY29tOyBFYWRzLCBHYWdlDQo+ID4gPGdhZ2UuZWFkc0BpbnRlbC5jb20+OyBk ZXZAZHBkay5vcmcNCj4gPiBDYzogb2xpdmllci5tYXR6QDZ3aW5kLmNvbTsgc3RlcGhlbkBuZXR3 b3JrcGx1bWJlci5vcmc7IG5kDQo+ID4gPG5kQGFybS5jb20+OyBSaWNoYXJkc29uLCBCcnVjZSA8 YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+Ow0KPiA+IGFyeWJjaGVua29Ac29sYXJmbGFyZS5j b207IEFuYW55ZXYsIEtvbnN0YW50aW4NCj4gPiA8a29uc3RhbnRpbi5hbmFueWV2QGludGVsLmNv bT4NCj4gPiBTdWJqZWN0OiBSZTogW2RwZGstZGV2XSBbUEFUQ0ggdjMgMi81XSByaW5nOiBhZGQg YSBub24tYmxvY2tpbmcNCj4gPiBpbXBsZW1lbnRhdGlvbg0KPiA+IA0KPiA+IE9uIEZyaSwgMjAx OS0wMS0yNSBhdCAxNzoyMSArMDAwMCwgRWFkcywgR2FnZSB3cm90ZToNCj4gPiA+IA0KPiA+ID4g DQo+ID4gPiA+IA0KPiA+ID4gPiANCj4gPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPiA+ID4gRnJvbTogT2xhIExpbGplZGFobCBbbWFpbHRvOk9sYS5MaWxqZWRhaGxAYXJtLmNv bV0NCj4gPiA+ID4gU2VudDogV2VkbmVzZGF5LCBKYW51YXJ5IDIzLCAyMDE5IDQ6MTYgQU0NCj4g PiA+ID4gVG86IEVhZHMsIEdhZ2UgPGdhZ2UuZWFkc0BpbnRlbC5jb20+OyBkZXZAZHBkay5vcmcN Cj4gPiA+ID4gQ2M6IG9saXZpZXIubWF0ekA2d2luZC5jb207IHN0ZXBoZW5AbmV0d29ya3BsdW1i ZXIub3JnOyBuZA0KPiA+ID4gPiA8bmRAYXJtLmNvbT47IFJpY2hhcmRzb24sIEJydWNlIDxicnVj ZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+ID4gPiA+IGFyeWJjaGVua29Ac29sYXJmbGFyZS5j b207IEFuYW55ZXYsIEtvbnN0YW50aW4NCj4gPiA+ID4gPGtvbnN0YW50aW4uYW5hbnlldkBpbnRl bC5jb20+DQo+ID4gPiA+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRDSCB2MyAyLzVdIHJp bmc6IGFkZCBhIG5vbi1ibG9ja2luZw0KPiA+ID4gPiBpbXBsZW1lbnRhdGlvbg0KPiA+ID4gPiAN Cj4gPiA+ID4gT24gVHVlLCAyMDE5LTAxLTIyIGF0IDIxOjMxICswMDAwLCBFYWRzLCBHYWdlIHdy b3RlOg0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IA0KPiA+ID4gPiA+IEhpIE9sYSwNCj4gPiA+ID4g PiANCj4gPiA+ID4gPiA8c25pcD4NCj4gPiA+ID4gPiANCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ ID4gDQo+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+IA0KPiA+ID4g PiA+ID4gPiANCj4gPiA+ID4gPiA+ID4gQEAgLTMzMSw2ICs0MzMsMzE5IEBAIHZvaWQgcnRlX3Jp bmdfZHVtcChGSUxFICpmLCBjb25zdCBzdHJ1Y3QNCj4gPiA+ID4gPiA+ID4gcnRlX3JpbmcgKnIp Ow0KPiA+ID4gPiA+ID4gPiDCoCNlbmRpZg0KPiA+ID4gPiA+ID4gPiDCoCNpbmNsdWRlICJydGVf cmluZ19nZW5lcmljXzY0LmgiDQo+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiArLyogQGlu dGVybmFsIDEyOC1iaXQgc3RydWN0dXJlIHVzZWQgYnkgdGhlIG5vbi1ibG9ja2luZyByaW5nDQo+ ID4gPiA+ID4gPiA+ICsqLyBzdHJ1Y3QgbmJfcmluZ19lbnRyeSB7DQo+ID4gPiA+ID4gPiA+ICsJ dm9pZCAqcHRyOyAvKio8IERhdGEgcG9pbnRlciAqLw0KPiA+ID4gPiA+ID4gPiArCXVpbnQ2NF90 IGNudDsgLyoqPCBNb2RpZmljYXRpb24gY291bnRlciAqLw0KPiA+ID4gPiA+ID4gV2h5IG5vdCBt YWtlICdjbnQnIHVpbnRwdHJfdD8gVGhpcyB3YXkgMzItYml0IGFyY2hpdGVjdHVyZXMgd2lsbA0K PiA+ID4gPiA+ID4gYWxzbyBiZSBzdXBwb3J0ZWQuIEkgdGhpbmsgdGhlcmUgYXJlIHNvbWUgY2xh aW1zIHRoYXQgRFBESyBzdGlsbA0KPiA+ID4gPiA+ID4gc3VwcG9ydHMgZS5nLg0KPiA+ID4gPiA+ ID4gQVJNdjdhDQo+ID4gPiA+ID4gPiBhbmQgcG9zc2libHkgYWxzbyAzMi1iaXQgeDg2Pw0KPiA+ ID4gPiA+IEkgY2hvc2UgYSA2NC1iaXQgbW9kaWZpY2F0aW9uIGNvdW50ZXIgYmVjYXVzZSAocHJh Y3RpY2FsbHkNCj4gPiA+ID4gPiBzcGVha2luZykgdGhlIEFCQSBwcm9ibGVtIHdpbGwgbm90IG9j Y3VyIHdpdGggc3VjaCBhIGxhcmdlIGNvdW50ZXINCj4gPiA+ID4gPiAtLSBkZWZpbml0ZWx5IG5v dCB3aXRoaW4gbXkgbGlmZXRpbWUuIFNlZSB0aGUgIkRpc2N1c3Npb24iIHNlY3Rpb24NCj4gPiA+ ID4gPiBvZiB0aGUgY29tbWl0IG1lc3NhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uDQo+ID4gPiA+ ID4gDQo+ID4gPiA+ID4gV2l0aCBhIDMyLWJpdCBjb3VudGVyLCB0aGVyZSBpcyBhIHZlcnkgKHZl cnkpIGxvdyBsaWtlbGlob29kIG9mDQo+ID4gPiA+ID4gaXQsIGJ1dCBpdCBpcyBwb3NzaWJsZS4g UGVyc29uYWxseSwgSSBkb24ndCBmZWVsIGNvbWZvcnRhYmxlDQo+ID4gPiA+ID4gcHJvdmlkaW5n IHN1Y2ggY29kZSwgYmVjYXVzZSBhKSBJIGRvdWJ0IGFsbCB1c2VycyB3b3VsZCB1bmRlcnN0YW5k DQo+ID4gPiA+ID4gdGhlIGltcGxlbWVudGF0aW9uIHdlbGwgZW5vdWdoIHRvIGRvIHRoZSByaXNr L3Jld2FyZCBhbmFseXNpcywgYW5kDQo+ID4gPiA+ID4gYikgc3VjaCBhIGJ1ZyB3b3VsZCBiZSBu ZWFyIGltcG9zc2libGUgdG8gcmVwcm9kdWNlIGFuZCByb290LWNhdXNlDQo+ID4gPiA+ID4gaWYg aXQgZGlkIG9jY3VyLg0KPiA+ID4gPiBXaXRoIGEgNjQtYml0IGNvdW50ZXIgKGFuZCAzMi1iaXQg cG9pbnRlciksIDMyLWJpdCBhcmNoaXRlY3R1cmVzIChlLmcuDQo+ID4gPiA+IEFSTXY3YSBhbmQN Cj4gPiA+ID4gcHJvYmFibHkgeDg2IGFzIHdlbGwpIHdvbid0IGJlIGFibGUgdG8gc3VwcG9ydCB0 aGlzIGFzIHRoZXkgYXQgYmVzdA0KPiA+ID4gPiBzdXBwb3J0IDY0LWJpdCBDQVMgKEFSTXY3YSBo YXMgTERSRVhEL1NUUkVYRCkuIFNvIHlvdSBhcmUNCj4gPiA+ID4gZXNzZW50aWFsbHkgcHV0dGlu ZyBhIDY0LWJpdCAoYW5kIDEyOC1iaXQgQ0FTKSByZXF1aXJlbWVudCBvbiB0aGUNCj4gPiA+ID4g aW1wbGVtZW50YXRpb24uDQo+ID4gPiA+IA0KPiA+ID4gWWVzLCBJIGFtLiBJIHRyaWVkIHRvIG1h a2UgdGhhdCBjbGVhciBpbiB0aGUgY292ZXIgbGV0dGVyLg0KPiA+ID4gDQo+ID4gPiA+IA0KPiA+ ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiANCj4gPiA+ID4gPiA+IA0K PiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiANCj4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiAN Cj4gPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gPiA+IA0KPiA+ID4gPiA+ID4gPiArfTsNCj4gPiA+ ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArLyogVGhlIG5vbi1ibG9ja2luZyByaW5nIGFsZ29y aXRobSBpcyBiYXNlZCBvbiB0aGUgb3JpZ2luYWwNCj4gPiA+ID4gPiA+ID4gK3J0ZSByaW5nIChk ZXJpdmVkDQo+ID4gPiA+ID4gPiA+ICsgKiBmcm9tIEZyZWVCU0QncyBidWZyaW5nLmgpIGFuZCBp bnNwaXJlZCBieSBNaWNoYWVsIGFuZA0KPiA+ID4gPiA+ID4gPiArU2NvdHQncyBub24tYmxvY2tp bmcNCj4gPiA+ID4gPiA+ID4gKyAqIGNvbmN1cnJlbnQgcXVldWUuDQo+ID4gPiA+ID4gPiA+ICsg Ki8NCj4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gPiA+ICsg KiBAaW50ZXJuYWwNCj4gPiA+ID4gPiA+ID4gKyAqwqDCoMKgRW5xdWV1ZSBzZXZlcmFsIG9iamVj dHMgb24gdGhlIG5vbi1ibG9ja2luZyByaW5nDQo+ID4gPiA+ID4gPiA+ICsoc2luZ2xlLXByb2R1 Y2VyIG9ubHkpDQo+ID4gPiA+ID4gPiA+ICsgKg0KPiA+ID4gPiA+ID4gPiArICogQHBhcmFtIHIN Cj4gPiA+ID4gPiA+ID4gKyAqwqDCoMKgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4N Cj4gPiA+ID4gPiA+ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gPiA+ID4gKyAqwqDC oMKgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygdm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4g PiA+ID4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ID4gPiA+ICsgKsKgwqDCoFRoZSBudW1i ZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJvbSB0aGUgb2JqX3RhYmxlLg0KPiA+ ID4gPiA+ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ID4gPiA+ICsgKsKgwqDCoFJU RV9SSU5HX1FVRVVFX0ZJWEVEOsKgwqDCoMKgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVt cw0KPiA+ID4gPiA+ID4gPiArdG8gdGhlIHJpbmcNCj4gPiA+ID4gPiA+ID4gKyAqwqDCoMKgUlRF X1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcw0KPiA+ID4gPiA+ ID4gPiArcG9zc2libGUgdG8gdGhlIHJpbmcNCj4gPiA+ID4gPiA+ID4gKyAqIEBwYXJhbSBmcmVl X3NwYWNlDQo+ID4gPiA+ID4gPiA+ICsgKsKgwqDCoHJldHVybnMgdGhlIGFtb3VudCBvZiBzcGFj ZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24NCj4gPiA+ID4gPiA+ID4gK2hhcyBmaW5pc2hl ZA0KPiA+ID4gPiA+ID4gPiArICogQHJldHVybg0KPiA+ID4gPiA+ID4gPiArICrCoMKgwqBBY3R1 YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1ZWQuDQo+ID4gPiA+ID4gPiA+ICsgKsKgwqDCoElm IGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuDQo+ ID4gPiA+ID4gPiA+IG9ubHkuDQo+ID4gPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiA+ID4gK3N0 YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiA+ID4gPiArX19y dGVfcmluZ19kb19uYl9lbnF1ZXVlX3NwKHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqIGNvbnN0 DQo+ID4gPiA+ID4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+ID4gPiA+ICsJCQnCoMKgwqDCoHVu c2lnbmVkIGludCBuLA0KPiA+ID4gPiA+ID4gPiArCQkJwqDCoMKgwqBlbnVtIHJ0ZV9yaW5nX3F1 ZXVlX2JlaGF2aW9yDQo+ID4gPiA+ID4gPiA+IGJlaGF2aW9yLA0KPiA+ID4gPiA+ID4gPiArCQkJ wqDCoMKgwqB1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpIHsNCj4gPiA+ID4gPiA+ID4gKwl1aW50 MzJfdCBmcmVlX2VudHJpZXM7DQo+ID4gPiA+ID4gPiA+ICsJc2l6ZV90IGhlYWQsIG5leHQ7DQo+ ID4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ID4gKwluID0gX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZF82NChyLCAxLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gPiA+ID4gKwkJCQkJwqAmaGVhZCwg Jm5leHQsDQo+ID4gPiA+ID4gPiA+ICZmcmVlX2VudHJpZXMpOw0KPiA+ID4gPiA+ID4gPiArCWlm IChuID09IDApDQo+ID4gPiA+ID4gPiA+ICsJCWdvdG8gZW5kOw0KPiA+ID4gPiA+ID4gPiArDQo+ ID4gPiA+ID4gPiA+ICsJRU5RVUVVRV9QVFJTX05CKHIsICZyWzFdLCBoZWFkLCBvYmpfdGFibGUs IG4pOw0KPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ICsJci0+cHJvZF82NC50YWlsICs9 IG47DQo+ID4gPiA+ID4gPiBEb24ndCB3ZSBuZWVkIHJlbGVhc2Ugb3JkZXIgd2hlbiAob3Igc21w X3dtYiBiZXR3ZWVuKSB3cml0aW5nIG9mDQo+ID4gPiA+ID4gPiB0aGUgcmluZyBwb2ludGVycyBh bmQgdGhlIHVwZGF0ZSBvZiB0YWlsPyBCeSB1cGRhdGluZyB0aGUgdGFpbA0KPiA+ID4gPiA+ID4g cG9pbnRlciwgd2UgYXJlIHN5bmNocm9uaXNpbmcgd2l0aCBhIGNvbnN1bWVyLg0KPiA+ID4gPiA+ ID4gDQo+ID4gPiA+ID4gPiBJIHByZWZlciB1c2luZyBfX2F0b21pYyBvcGVyYXRpb25zIGV2ZW4g Zm9yIGxvYWQgYW5kIHN0b3JlLiBZb3UNCj4gPiA+ID4gPiA+IGNhbiBzZWUgd2hpY2ggcGFydHMg b2YgdGhlIGNvZGUgdGhhdCBzeW5jaHJvbmlzZSB3aXRoIGVhY2ggb3RoZXIsDQo+ID4gPiA+ID4g PiBlLmcuDQo+ID4gPiA+ID4gPiBzdG9yZS1yZWxlYXNlIHRvIHNvbWUgbG9jYXRpb24gc3luY2hy b25pc2VzIHdpdGggbG9hZC1hY3F1aXJlDQo+ID4gPiA+ID4gPiBmcm9tIHRoZSBzYW1lIGxvY2F0 aW9uLiBJZiB5b3UgZG9uJ3Qga25vdyBob3cgZGlmZmVyZW50IHRocmVhZHMNCj4gPiA+ID4gPiA+ IHN5bmNocm9uaXNlIHdpdGggZWFjaCBvdGhlciwgeW91IGFyZSB2ZXJ5IGxpa2VseSB0byBtYWtl IG1pc3Rha2VzLg0KPiA+ID4gPiA+ID4gDQo+ID4gPiA+ID4gWW91IGNhbiB0ZWxsIHRoaXMgY29k ZSB3YXMgd3JpdHRlbiB3aGVuIEkgdGhvdWdodCB4ODYtNjQgd2FzIHRoZQ0KPiA+ID4gPiA+IG9u bHkgdmlhYmxlIHRhcmdldCA6KS4gWWVzLCB5b3UgYXJlIGNvcnJlY3QuDQo+ID4gPiA+ID4gDQo+ ID4gPiA+ID4gV2l0aCByZWdhcmRzIHRvIHVzaW5nIF9fYXRvbWljIGludHJpbnNpY3MsIEknbSBw bGFubmluZyBvbiB0YWtpbmcNCj4gPiA+ID4gPiBhIHNpbWlsYXIgYXBwcm9hY2ggdG8gdGhlIGZ1 bmN0aW9ucyBkdXBsaWNhdGVkIGluDQo+ID4gPiA+ID4gcnRlX3JpbmdfZ2VuZXJpYy5oIGFuZA0K PiA+ID4gPiA+IHJ0ZV9yaW5nX2MxMV9tZW0uaDogb25lIHZlcnNpb24gdGhhdCB1c2VzIHJ0ZV9h dG9taWMgZnVuY3Rpb25zDQo+ID4gPiA+ID4gKGFuZCB0aHVzIHN0cmljdGVyIG1lbW9yeSBvcmRl cmluZykgYW5kIG9uZSB0aGF0IHVzZXMgX19hdG9taWMNCj4gPiA+ID4gPiBpbnRyaW5zaWNzIChh bmQgdGh1cyBjYW4gYmVuZWZpdCBmcm9tIG1vcmUgcmVsYXhlZCBtZW1vcnkgb3JkZXJpbmcpLg0K PiA+IEZyb20gYSBjb2RlIHBvaW50IG9mIHZpZXcsIEkgc3Ryb25nbHkgcHJlZmVyIHRoZSBhdG9t aWMgb3BlcmF0aW9ucyB0byBiZQ0KPiA+IHZpc2libGUNCj4gPiBpbiB0aGUgdG9wIGxldmVsIGNv ZGUsIG5vdCBoaWRkZW4gaW4gc3Vicm91dGluZXMuIEZvciBjb3JyZWN0bmVzcywgaXQgaXMNCj4g PiB2aXRhbCB0aGF0DQo+ID4gbWVtb3J5IGFjY2Vzc2VzIGFyZSBwZXJmb3JtZWQgd2l0aCB0aGUg cmVxdWlyZWQgb3JkZXJpbmcgYW5kIHRoYXQgYWNxdWlyZQ0KPiA+IGFuZA0KPiA+IHJlbGVhc2Ug bWF0Y2hlcyB1cC4gSGlkaW5nIGUuZy4gbG9hZC1hY3F1aXJlIGFuZCBzdG9yZS1yZWxlYXNlIGlu DQo+ID4gc3Vicm91dGluZXMgKGluDQo+ID4gYSBkaWZmZXJlbnQgZmlsZSEpIG1ha2UgdGhpcyBk aWZmaWN1bHQuIFRoZXJlIGhhdmUgYWxyZWFkeSBiZWVuIHN1Y2ggYnVncw0KPiA+IGZvdW5kIGlu DQo+ID4gcnRlX3JpbmcuDQo+ID4gDQo+IEFmdGVyIHdvcmtpbmcgb24gdGhlIGFjcS9yZWwgb3Jk ZXJpbmcgdGhpcyB3ZWVrZW5kLCBJIGFncmVlLiBUaGlzJ2xsIGJlDQo+IGVhc2llci9jbGVhbmVy IGlmIHdlIGVuZCB1cCBvbmx5IHVzaW5nIHRoZSBDMTEgdmVyc2lvbi4NCkZhYnVsb3VzIQ0KDQpB cyBJIHdyb3RlIGluIGEgcmVzcG9uc2UgdG8gSmVyaW4sIHdpdGggYSBzbWFsbCBjaGVhdCAoTG9h ZFN0b3JlIGZlbmNlK3N0b3JlLQ0KcmVsYXhlZCBpbnN0ZWFkIG9mIHN0b3JlLXJlbGVhc2UgaW4g dGhlIGRlcXVldWUgZnVuY3Rpb24gd2hlcmUgd2Ugb25seSByZWFkDQpzaGFyZWQgZGF0YSBpbiB0 aGUgY3JpdGljYWwgc2VjdGlvbiksIEMxMSBzaG91bGQgcHJvdmlkZSB0aGUgc2FtZSBvcmRlcmlu ZyBhbmQNCnRodXMgdGhlIHNhbWUgcGVyZm9ybWFuY2UgYXMgdGhlIGV4cGxpY2l0IGJhcnJpZXIg dmVyc2lvbi4gQmVuY2htYXJraW5nIHdpbGwNCnNob3cuDQoNCj4gDQo+ID4gDQo+ID4gPiANCj4g PiA+ID4gDQo+ID4gPiA+IFdoYXQncyB0aGUgYWR2YW50YWdlIG9mIGhhdmluZyB0d28gZGlmZmVy ZW50IGltcGxlbWVudGF0aW9ucz8gV2hhdA0KPiA+ID4gPiBpcyB0aGUgZGlzYWR2YW50YWdlPw0K PiA+ID4gPiANCj4gPiA+ID4gVGhlIGV4aXN0aW5nIHJpbmcgYnVmZmVyIGNvZGUgb3JpZ2luYWxs eSBoYWQgb25seSB0aGUgImxlZ2FjeSINCj4gPiA+ID4gaW1wbGVtZW50YXRpb24NCj4gPiA+ID4g d2hpY2ggd2FzIGtlcHQgd2hlbiB0aGUgX19hdG9taWMgaW1wbGVtZW50YXRpb24gd2FzIGFkZGVk LiBUaGUNCj4gPiA+ID4gcmVhc29uIGNsYWltZWQgd2FzIHRoYXQgc29tZSBvbGRlciBjb21waWxl cnMgZm9yIHg4NiBkbyBub3Qgc3VwcG9ydA0KPiA+ID4gPiBHQ0MgX19hdG9taWMgYnVpbHRpbnMu IEJ1dCBJIHRob3VnaHQgdGhlcmUgd2FzIGNvbnNlbnN1cyB0aGF0IG5ldw0KPiA+ID4gPiBmdW5j dGlvbmFsaXR5IGNvdWxkIGhhdmUgb25seSBfX2F0b21pYyBpbXBsZW1lbnRhdGlvbnMuDQo+ID4g PiA+IA0KPiA+ID4gV2hlbiBDT05GSUdfUlRFX1JJTkdfVVNFX0MxMV9NRU1fTU9ERUwgd2FzIGlu dHJvZHVjZWQsIGl0IHdhcyBsZWZ0DQo+ID4gPiBkaXNhYmxlZCBmb3IgdGh1bmRlcnhbMV0gZm9y IHBlcmZvcm1hbmNlIHJlYXNvbnMuIEFzc3VtaW5nIHRoYXQgaGFzbid0DQo+ID4gPiBjaGFuZ2Vk LCB0aGUgYWR2YW50YWdlIHRvIGhhdmluZyB0d28gdmVyc2lvbnMgaXMgdG8gYmVzdCBzdXBwb3J0 IGFsbCBvZg0KPiA+ID4gRFBESydzDQo+ID4gcGxhdGZvcm1zLg0KPiA+ID4gDQo+ID4gPiBUaGUg ZGlzYWR2YW50YWdlIGlzIG9mIGNvdXJzZSBkdXBsaWNhdGVkIGNvZGUgYW5kIHRoZSBhZGRpdGlv bmFsDQo+ID4gPiBtYWludGVuYW5jZSBidXJkZW4uDQo+ID4gVGhlIG9ubHkgd2F5IEkgc2VlIHRo YXQgYSBDMTEgbWVtb3J5IG1vZGVsIGltcGxlbWVudGF0aW9uIGNhbiBiZSBzbG93ZXINCj4gPiB0 aGFuIHVzaW5nIHNtcF93bWIvcm1iIGlzIGlmIHlvdSBuZWVkIHRvIG9yZGVyIGxvYWRzIGJlZm9y ZSBhIHN5bmNocm9uaXppbmcNCj4gPiBzdG9yZSBhbmQgdGhlcmUgYXJlIGFsc28gb3V0c3RhbmRp bmcgc3RvcmVzIHdoaWNoIGRvIG5vdCByZXF1aXJlIG9yZGVyaW5nLg0KPiA+IHNtcF9ybWIoKSBo YW5kbGVzIHRoaXMgd2hpbGUgc3RvcmUtcmVsZWFzZSB3aWxsIGFsc28gKHVubmVjZXNzYXJpbHkp IG9yZGVyDQo+ID4gdGhvc2UNCj4gPiBvdXRzdGFuZGluZyBzdG9yZXMuIFRoaXMgc2l0dWF0aW9u IG9jY3VycyBlLmcuIGluIHJpbmcgYnVmZmVyIGRlcXVldWUNCj4gPiBvcGVyYXRpb25zDQo+ID4g d2hlcmUgcmluZyBzbG90cyBhcmUgcmVhZCAoYW5kIHBvc3NpYmx5IHdyaXR0ZW4gdG8gdGhyZWFk LXByaXZhdGUgbWVtb3J5KQ0KPiA+IGJlZm9yZQ0KPiA+IHRoZSByaW5nIHNsb3RzIGFyZSByZWxl YXNlIChlLmcuIHVzaW5nIENBUy1yZWxlYXNlIG9yIHN0b3JlLXJlbGVhc2UpLg0KPiA+IA0KPiA+ IEkgaW1hZ2luZSB0aGF0IHRoZSBMU1UvY2FjaGUgc3Vic3lzdGVtIG9uIFRodW5kZXJYL09DVEVP Ti1UWCBhbHNvIGhhdmUNCj4gPiBzb21ldGhpbmcgdG8gZG8gd2l0aCB0aGlzIHByb2JsZW0uIElm IHRoZXJlIGFyZSBhIGxhcmdlIGFtb3VudHMgb2Ygc3RvcmVzDQo+ID4gcGVuZGluZyBpbiB0aGUg bG9hZC9zdG9yZSB1bml0LCBzdG9yZS1yZWxlYXNlIG1pZ2h0IGhhdmUgdG8gd2FpdCBmb3IgYSBs b25nDQo+ID4gdGltZQ0KPiA+IGJlZm9yZSB0aGUgc3luY2hyb25pemluZyBzdG9yZSBjYW4gY29t cGxldGUuDQo+ID4gDQo+ID4gPiANCj4gPiA+IA0KPiA+ID4gVGhhdCBzYWlkLCBpZiB0aGUgdGh1 bmRlcnggbWFpbnRhaW5lcnMgYXJlIG9rIHdpdGggaXQsIEknbSBjZXJ0YWlubHkNCj4gPiA+IG9w ZW4gdG8gb25seSBkb2luZyB0aGUgX19hdG9taWMgdmVyc2lvbi4gTm90ZSB0aGF0IGV2ZW4gaW4g dGhlDQo+ID4gPiBfX2F0b21pYyB2ZXJzaW9uLCBiYXNlZCBvbiBIb25uYXBhJ3MgZmluZGluZ3Nb Ml0sIHVzaW5nIGEgRFBESy1kZWZpbmVkDQo+ID4gPiBydGVfYXRvbWljMTI4X2NtcHNldCgpICh3 aXRoIGFkZGl0aW9uYWwgYXJndW1lbnRzIHRvIHN1cHBvcnQgbWFjaGluZXMNCj4gPiA+IHdpdGgg d2VhayBjb25zaXN0ZW5jeSkgYXBwZWFycyB0byBiZSBhIGJldHRlciBvcHRpb24gdGhhbg0KPiA+ IF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMTYuDQo+ID4gX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV8xNigpIGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlIGxvY2stZnJlZS4gSXQgaXMgbm90DQo+ ID4gbG9jay1mcmVlIG9uIEFSTS9BQXJjaDY0IGFuZCB0aGUgc3VwcG9ydCBpbiBHQ0MgaXMgZm9y bWFsbHkgYnJva2VuIChjYW4ndA0KPiA+IHVzZQ0KPiA+IGNtcGV4Y2hnMTZiIHRvIGltcGxlbWVu dCBfX2F0b21pY19sb2FkXzE2KS4NCj4gPiANCj4gPiBTbyB5ZXMsIEkgdGhpbmsgRFBESyB3aWxs IGhhdmUgdG8gZGVmaW5lIGFuZCBpbXBsZW1lbnQgdGhlIDEyOC1iaXQgYXRvbWljDQo+ID4gY29t cGFyZSBhbmQgZXhjaGFuZ2Ugb3BlcmF0aW9uICh3aGF0ZXZlciBpdCB3aWxsIGJlIGNhbGxlZCku IEZvcg0KPiA+IGNvbXBhdGliaWxpdHkNCj4gPiB3aXRoIEFSTXY4LjAsIHdlIGNhbid0IHJlcXVp cmUgdGhlICJvbGQiIHZhbHVlIHJldHVybmVkIGJ5IGEgZmFpbGVkIGNvbXBhcmUtDQo+ID4gZXhj aGFuZ2Ugb3BlcmF0aW9uIHRvIGJlIHJlYWQgYXRvbWljYWxseSAoTERYUCBkb2VzIG5vdCBndWFy YW50ZWVkIGF0b21pY2l0eQ0KPiA+IGJ5IGl0c2VsZikuIEJ1dCB0aGlzIGlzIHNlbGRvbSBhIHBy b2JsZW0sIG1hbnkgZGVzaWducyByZWFkIHRoZSBtZW1vcnkNCj4gPiBsb2NhdGlvbg0KPiA+IHVz aW5nIHR3byBzZXBhcmF0ZSA2NC1iaXQgbG9hZHMgKHNvIG5vdCBhdG9taWMpIGFueXdheSwgaXQg aXMgYSBzdWNjZXNzZnVsDQo+ID4gYXRvbWljDQo+ID4gY29tcGFyZSBleGNoYW5nZSBvcGVyYXRp b24gd2hpY2ggcHJvdmlkZXMgYXRvbWljaXR5Lg0KPiA+IA0KPiBPay4gSSBhZ3JlZSwgSSBkb24n dCBleHBlY3QgdGhhdCB0byBiZSBhIHByb2JsZW0uIFRoZSAxMjgtYml0IENBUyBwYXRjaCBJIGp1 c3QNCj4gc3VibWl0dGVkWzFdICh3aGljaCB3YXMgZGV2ZWxvcGVkIGJlZm9yZSByZWFkaW5nIHRo aXMpIHdpbGwgaGF2ZSB0byBiZQ0KPiBjaGFuZ2VkLg0KPiANCj4gWzFdIGh0dHA6Ly9tYWlscy5k cGRrLm9yZy9hcmNoaXZlcy9kZXYvMjAxOS1KYW51YXJ5LzEyNDE1OS5odG1sDQpJIHdpbGwgdGFr ZSBhIGxvb2sgYW5kIGNvbW5tZW50IG9uIHRoaXMuDQoNCj4gDQo+IFRoYW5rcywNCj4gR2FnZQ0K PiANCj4gPC9zbmlwPg0KLS0gDQpPbGEgTGlsamVkYWhsLCBOZXR3b3JraW5nIFN5c3RlbSBBcmNo aXRlY3QsIEFybQ0KUGhvbmUgKzQ2NzA2ODY2MzczLCBTa3lwZSBvbGEubGlsamVkYWhsDQoNCg==