From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by dpdk.space (Postfix) with ESMTP id DF378A00E6 for ; Mon, 15 Apr 2019 18:51:34 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id AEE5C1B39D; Mon, 15 Apr 2019 18:51:34 +0200 (CEST) Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by dpdk.org (Postfix) with ESMTP id 7EA941B2B3 for ; Mon, 15 Apr 2019 18:51:32 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga005.jf.intel.com ([10.7.209.41]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 15 Apr 2019 09:51:31 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.60,354,1549958400"; d="scan'208";a="316160932" Received: from irsmsx153.ger.corp.intel.com ([163.33.192.75]) by orsmga005.jf.intel.com with ESMTP; 15 Apr 2019 09:51:29 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.31]) by IRSMSX153.ger.corp.intel.com ([169.254.9.61]) with mapi id 14.03.0415.000; Mon, 15 Apr 2019 17:51:28 +0100 From: "Ananyev, Konstantin" To: Honnappa Nagarahalli , "paulmck@linux.ibm.com" CC: "stephen@networkplumber.org" , "Kovacevic, Marko" , "dev@dpdk.org" , "Gavin Hu (Arm Technology China)" , Dharmik Thakkar , Malvika Gupta , nd , nd Thread-Topic: [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism Thread-Index: AQHU749t3HDp00bO3kqLUXp8vwQ1CKY1opsAgACtYACAALXtgIAB5LsAgASARdA= Date: Mon, 15 Apr 2019 16:51:27 +0000 Message-ID: <2601191342CEEE43887BDE71AB9772580148A9800A@irsmsx105.ger.corp.intel.com> References: <20181122033055.3431-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-1-honnappa.nagarahalli@arm.com> <20190410112006.21644-2-honnappa.nagarahalli@arm.com> <20190410181432.GO14111@linux.ibm.com> <20190411152613.GZ14111@linux.ibm.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-titus-metadata-40: eyJDYXRlZ29yeUxhYmVscyI6IiIsIk1ldGFkYXRhIjp7Im5zIjoiaHR0cDpcL1wvd3d3LnRpdHVzLmNvbVwvbnNcL0ludGVsMyIsImlkIjoiMWUyYmE5NTktNGJlMS00MmQ4LWJhMWItZTg0ZjNjMzdjNTczIiwicHJvcHMiOlt7Im4iOiJDVFBDbGFzc2lmaWNhdGlvbiIsInZhbHMiOlt7InZhbHVlIjoiQ1RQX05UIn1dfV19LCJTdWJqZWN0TGFiZWxzIjpbXSwiVE1DVmVyc2lvbiI6IjE3LjEwLjE4MDQuNDkiLCJUcnVzdGVkTGFiZWxIYXNoIjoib3J4emszRjYwY3ZSRmlyMkdFUVVsWGMzdG04ajhPK25HaEl2TzVKbkkxcjE5eWZEZVVcL0N4aGhsS3VzNnZQN2MifQ== x-ctpclassification: CTP_NT dlp-product: dlpe-windows dlp-version: 11.0.600.7 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] [PATCH v4 1/3] rcu: add RCU library supporting QSBR mechanism 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Message-ID: <20190415165127.67GuYToAD2P7O4dNOKrXkTRnlUjcSxkgki_symdTnSs@z> DQoNCj4gPiA+ID4NCj4gPiA+ID4gT24gV2VkLCBBcHIgMTAsIDIwMTkgYXQgMDY6MjA6MDRBTSAt MDUwMCwgSG9ubmFwcGEgTmFnYXJhaGFsbGkNCj4gPiB3cm90ZToNCj4gPiA+ID4gPiBBZGQgUkNV IGxpYnJhcnkgc3VwcG9ydGluZyBxdWllc2NlbnQgc3RhdGUgYmFzZWQgbWVtb3J5DQo+ID4gPiA+ ID4gcmVjbGFtYXRpb24NCj4gPiA+ID4gbWV0aG9kLg0KPiA+ID4gPiA+IFRoaXMgbGlicmFyeSBo ZWxwcyBpZGVudGlmeSB0aGUgcXVpZXNjZW50IHN0YXRlIG9mIHRoZSByZWFkZXINCj4gPiA+ID4g PiB0aHJlYWRzIHNvIHRoYXQgdGhlIHdyaXRlcnMgY2FuIGZyZWUgdGhlIG1lbW9yeSBhc3NvY2lh dGVkIHdpdGgNCj4gPiA+ID4gPiB0aGUgbG9jayBsZXNzIGRhdGEgc3RydWN0dXJlcy4NCj4gPiA+ ID4NCj4gPiA+ID4gSSBkb24ndCBzZWUgYW55IHNpZ24gb2YgcmVhZC1zaWRlIG1hcmtlcnMgKHJj dV9yZWFkX2xvY2soKSBhbmQNCj4gPiA+ID4gcmN1X3JlYWRfdW5sb2NrKCkgaW4gdGhlIExpbnV4 IGtlcm5lbCwgdXNlcnNwYWNlIFJDVSwgZXRjLikuDQo+ID4gPiA+DQo+ID4gPiA+IFllcywgc3Ry aWN0bHkgc3BlYWtpbmcsIHRoZXNlIGFyZSBub3QgbmVlZGVkIGZvciBRU0JSIHRvIG9wZXJhdGUs DQo+ID4gPiA+IGJ1dCB0aGV5DQo+ID4gPiBUaGVzZSBBUElzIHdvdWxkIGJlIGVtcHR5IGZvciBR U0JSLg0KPiA+ID4NCj4gPiA+ID4gbWFrZSBpdCB3YXkgZWFzaWVyIHRvIG1haW50YWluIGFuZCBk ZWJ1ZyBjb2RlIHVzaW5nIFJDVS4gIEZvcg0KPiA+ID4gPiBleGFtcGxlLCBnaXZlbiB0aGUgcmVh ZC1zaWRlIG1hcmtlcnMsIHlvdSBjYW4gY2hlY2sgZm9yIGVycm9ycyBsaWtlDQo+ID4gPiA+IGhh dmluZyBhIGNhbGwgdG8NCj4gPiA+ID4gcnRlX3JjdV9xc2JyX3F1aWVzY2VudCgpIGluIHRoZSBt aWRkbGUgb2YgYSByZWFkZXIgcXVpdGUgZWFzaWx5Lg0KPiA+ID4gPiBXaXRob3V0IHRob3NlIHJl YWQtc2lkZSBtYXJrZXJzLCBsaWZlIGNhbiBiZSBxdWl0ZSBoYXJkIGFuZCB5b3Ugd2lsbA0KPiA+ ID4gPiByZWFsbHkgaGF0ZSB5b3Vyc2VsZiBmb3IgZmFpbGluZyB0byBoYXZlIHByb3ZpZGVkIHRo ZW0uDQo+ID4gPg0KPiA+ID4gV2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0b29kIHRoaXMsIGRv IHlvdSBtZWFuIHRoZSBhcHBsaWNhdGlvbg0KPiA+IHdvdWxkIG1hcmsgYmVmb3JlIGFuZCBhZnRl ciBhY2Nlc3NpbmcgdGhlIHNoYXJlZCBkYXRhIHN0cnVjdHVyZSBvbiB0aGUNCj4gPiByZWFkZXIg c2lkZT8NCj4gPiA+DQo+ID4gPiBydGVfcmN1X3FzYnJfbG9jaygpDQo+ID4gPiA8YmVnaW4gYWNj ZXNzIHNoYXJlZCBkYXRhIHN0cnVjdHVyZT4NCj4gPiA+IC4uLg0KPiA+ID4gLi4uDQo+ID4gPiA8 ZW5kIGFjY2VzcyBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmU+DQo+ID4gPiBydGVfcmN1X3FzYnJfdW5s b2NrKCkNCj4gPg0KPiA+IFllcywgdGhhdCBpcyB0aGUgaWRlYS4NCj4gPg0KPiA+ID4gSWYgc29t ZW9uZSBpcyBkZWJ1Z2dpbmcgdGhpcyBjb2RlLCB0aGV5IGhhdmUgdG8gbWFrZSBzdXJlIHRoYXQg dGhlcmUgaXMNCj4gPiBhbiB1bmxvY2sgZm9yIGV2ZXJ5IGxvY2sgYW5kIHRoZXJlIGlzIG5vIGNh bGwgdG8gcnRlX3JjdV9xc2JyX3F1aWVzY2VudCBpbg0KPiA+IGJldHdlZW4uDQo+ID4gPiBJdCBz b3VuZHMgZ29vZCB0byBtZS4gT2J2aW91c2x5LCB0aGV5IHdpbGwgbm90IGFkZCBhbnkgYWRkaXRp b25hbCBjeWNsZXMNCj4gPiBhcyB3ZWxsLg0KPiA+ID4gUGxlYXNlIGxldCBtZSBrbm93IGlmIG15 IHVuZGVyc3RhbmRpbmcgaXMgY29ycmVjdC4NCj4gPg0KPiA+IFllcy4gIEFuZCBpbiBzb21lIHNv cnQgb2YgZGVidWcgbW9kZSwgeW91IGNvdWxkIGNhcHR1cmUgdGhlIGNvdW50ZXIgYXQNCj4gPiBy dGVfcmN1X3FzYnJfbG9jaygpIHRpbWUgYW5kIGNoZWNrIGl0IGF0IHJ0ZV9yY3VfcXNicl91bmxv Y2soKSB0aW1lLiAgSWYgdGhlDQo+ID4gY291bnRlciBoYXMgYWR2YW5jZWQgdG9vIGZhciAobW9y ZSB0aGFuIG9uZSwgaWYgSSBhbSBub3QgdG9vIGNvbmZ1c2VkKQ0KPiA+IHRoZXJlIGlzIGEgYnVn LiAgQWxzbyBpbiBkZWJ1ZyBtb2RlLCB5b3UgY291bGQgaGF2ZSBydGVfcmN1X3FzYnJfbG9jaygp DQo+ID4gaW5jcmVtZW50IGEgcGVyLXRocmVhZCBjb3VudGVyIGFuZCBydGVfcmN1X3FzYnJfdW5s b2NrKCkgZGVjcmVtZW50IGl0Lg0KPiA+IElmIHRoZSBjb3VudGVyIGlzIG5vbi16ZXJvIGF0IGEg cXVpZXNjZW50IHN0YXRlLCB0aGVyZSBpcyBhIGJ1Zy4NCj4gPiBBbmQgc28gb24uDQo+ID4NCj4g QWRkZWQgdGhpcyBpbiBWNQ0KPiANCj4gPHNuaXA+DQo+IA0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArLyogR2V0IHRoZSBtZW1vcnkgc2l6ZSBvZiBRU0JSIHZhcmlhYmxlICovIHNpemVfdA0KPiA+ ID4gPiA+ICtfX3J0ZV9leHBlcmltZW50YWwgcnRlX3JjdV9xc2JyX2dldF9tZW1zaXplKHVpbnQz Ml90DQo+ID4gbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gPiArCXNpemVfdCBzejsNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKwlpZiAobWF4X3RocmVhZHMgPT0gMCkgew0KPiA+ID4gPiA+ICsJCXJ0 ZV9sb2coUlRFX0xPR19FUlIsIHJjdV9sb2dfdHlwZSwNCj4gPiA+ID4gPiArCQkJIiVzKCk6IElu dmFsaWQgbWF4X3RocmVhZHMgJXVcbiIsDQo+ID4gPiA+ID4gKwkJCV9fZnVuY19fLCBtYXhfdGhy ZWFkcyk7DQo+ID4gPiA+ID4gKwkJcnRlX2Vycm5vID0gRUlOVkFMOw0KPiA+ID4gPiA+ICsNCj4g PiA+ID4gPiArCQlyZXR1cm4gMTsNCj4gPiA+ID4gPiArCX0NCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKwlzeiA9IHNpemVvZihzdHJ1Y3QgcnRlX3JjdV9xc2JyKTsNCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwkvKiBBZGQgdGhlIHNpemUgb2YgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgYXJyYXkg Ki8NCj4gPiA+ID4gPiArCXN6ICs9IHNpemVvZihzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCkgKiBt YXhfdGhyZWFkczsNCj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwkvKiBBZGQgdGhlIHNpemUgb2Yg dGhlIHJlZ2lzdGVyZWQgdGhyZWFkIElEIGJpdG1hcCBhcnJheSAqLw0KPiA+ID4gPiA+ICsJc3og Kz0gUlRFX1FTQlJfVEhSSURfQVJSQVlfU0laRShtYXhfdGhyZWFkcyk7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJcmV0dXJuIFJURV9BTElHTihzeiwgUlRFX0NBQ0hFX0xJTkVfU0laRSk7DQo+ ID4gPiA+DQo+ID4gPiA+IEdpdmVuIHRoYXQgeW91IGFsaWduIGhlcmUsIHNob3VsZCB5b3UgYWxz byBhbGlnbiBpbiB0aGUgZWFybGllcg0KPiA+ID4gPiBzdGVwcyBpbiB0aGUgY29tcHV0YXRpb24g b2Ygc3o/DQo+ID4gPg0KPiA+ID4gQWdyZWUuIEkgd2lsbCByZW1vdmUgdGhlIGFsaWduIGhlcmUg YW5kIGtlZXAgdGhlIGVhcmxpZXIgb25lIGFzIHRoZSBpbnRlbnQNCj4gPiBpcyB0byBhbGlnbiB0 aGUgdGhyZWFkIElEIGFycmF5Lg0KPiA+DQo+ID4gU291bmRzIGdvb2QhDQo+IEFkZGVkIHRoaXMg aW4gVjUNCj4gDQo+ID4NCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArLyog SW5pdGlhbGl6ZSBhIHF1aWVzY2VudCBzdGF0ZSB2YXJpYWJsZSAqLyBpbnQNCj4gPiA+ID4gPiAr X19ydGVfZXhwZXJpbWVudGFsIHJ0ZV9yY3VfcXNicl9pbml0KHN0cnVjdCBydGVfcmN1X3FzYnIg KnYsDQo+ID4gdWludDMyX3QgbWF4X3RocmVhZHMpIHsNCj4gPiA+ID4gPiArCXNpemVfdCBzejsN Cj4gPiA+ID4gPiArDQo+ID4gPiA+ID4gKwlpZiAodiA9PSBOVUxMKSB7DQo+ID4gPiA+ID4gKwkJ cnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBlLA0KPiA+ID4gPiA+ICsJCQkiJXMoKTog SW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9fZnVuY19fKTsNCj4gPiA+ID4gPiArCQlydGVf ZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXN6ID0gcnRlX3JjdV9xc2JyX2dl dF9tZW1zaXplKG1heF90aHJlYWRzKTsNCj4gPiA+ID4gPiArCWlmIChzeiA9PSAxKQ0KPiA+ID4g PiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCS8qIFNldCBhbGwgdGhl IHRocmVhZHMgdG8gb2ZmbGluZSAqLw0KPiA+ID4gPiA+ICsJbWVtc2V0KHYsIDAsIHN6KTsNCj4g PiA+ID4NCj4gPiA+ID4gV2UgY2FsY3VsYXRlIHN6IGhlcmUsIGJ1dCBpdCBsb29rcyBsaWtlIHRo ZSBjYWxsZXIgbXVzdCBhbHNvDQo+ID4gPiA+IGNhbGN1bGF0ZSBpdCBpbiBvcmRlciB0byBjb3Jy ZWN0bHkgYWxsb2NhdGUgdGhlIG1lbW9yeSByZWZlcmVuY2VkIGJ5DQo+ID4gPiA+IHRoZSAidiIg YXJndW1lbnQgdG8gdGhpcyBmdW5jdGlvbiwgd2l0aCBiYWQgdGhpbmdzIGhhcHBlbmluZyBpZiB0 aGUNCj4gPiA+ID4gdHdvIGNhbGN1bGF0aW9ucyBnZXQgZGlmZmVyZW50IHJlc3VsdHMuICBTaG91 bGQgInYiIGluc3RlYWQgYmUNCj4gPiA+ID4gYWxsb2NhdGVkIHdpdGhpbiB0aGlzIGZ1bmN0aW9u IHRvIGF2b2lkIHRoaXMgc29ydCBvZiBwcm9ibGVtPw0KPiA+ID4NCj4gPiA+IEVhcmxpZXIgdmVy c2lvbiBhbGxvY2F0ZWQgdGhlIG1lbW9yeSB3aXRoLWluIHRoaXMgbGlicmFyeS4gSG93ZXZlciwg aXQgd2FzDQo+ID4gZGVjaWRlZCB0byBnbyB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9u IGFzIGl0IHByb3ZpZGVzIGZsZXhpYmlsaXR5IGZvcg0KPiA+IHRoZSBhcHBsaWNhdGlvbiB0byBt YW5hZ2UgdGhlIG1lbW9yeSBhcyBpdCBzZWVzIGZpdC4gRm9yIGV4OiBpdCBjb3VsZA0KPiA+IGFs bG9jYXRlIHRoaXMgYXMgcGFydCBvZiBhbm90aGVyIHN0cnVjdHVyZSBpbiBhIHNpbmdsZSBhbGxv Y2F0aW9uLiBUaGlzIGFsc28NCj4gPiBmYWxscyBpbmxpbmUgd2l0aCBzaW1pbGFyIGFwcHJvYWNo IHRha2VuIGluIG90aGVyIGxpYnJhcmllcy4NCj4gPg0KPiA+IFNvIHRoZSBhbGxvY2F0b3IgQVBJ cyB2YXJ5IHRvbyBtdWNoIHRvIGFsbG93IGEgcG9pbnRlciB0byB0aGUgZGVzaXJlZA0KPiA+IGFs bG9jYXRvciBmdW5jdGlvbiB0byBiZSBwYXNzZWQgaW4/ICBPciBkbyB5b3UgYWxzbyB3YW50IHRv IGFsbG93IHN0YXRpYw0KPiA+IGFsbG9jYXRpb24/ICBJZiB0aGUgbGF0dGVyLCB3b3VsZCBhIERF RklORV9SVEVfUkNVX1FTQlIoKSBiZSBvZiB1c2U/DQo+ID4NCj4gVGhpcyBpcyBkb25lIHRvIGFs bG93IGZvciBhbGxvY2F0aW9uIG9mIG1lbW9yeSBmb3IgUVMgdmFyaWFibGUgYXMgcGFydCBvZiBh IGFub3RoZXIgYmlnZ2VyIGRhdGEgc3RydWN0dXJlLiBUaGlzIHdpbGwgaGVscCBpbiBub3QgZnJh Z21lbnRpbmcNCj4gdGhlIG1lbW9yeS4gRm9yIGV4Og0KPiANCj4gc3RydWN0IHh5eiB7DQo+ICAg ICBydGVfcmluZyAqcmluZzsNCj4gICAgIHJ0ZV9yY3VfcXNiciAqdjsNCj4gICAgIGFiYyAqdDsN Cj4gfTsNCj4gc3RydWN0IHh5eiBjOw0KPiANCj4gTWVtb3J5IGZvciB0aGUgYWJvdmUgc3RydWN0 dXJlIGNhbiBiZSBhbGxvY2F0ZWQgaW4gb25lIGNodW5rIGJ5IGNhbGN1bGF0aW5nIHRoZSBzaXpl IHJlcXVpcmVkLg0KPiANCj4gSW4gc29tZSB1c2UgY2FzZXMgc3RhdGljIGFsbG9jYXRpb24gbWln aHQgYmUgZW5vdWdoIGFzICdtYXhfdGhyZWFkcycgbWlnaHQgYmUgYSBjb21waWxlIHRpbWUgY29u c3RhbnQuIEkgYW0gbm90IHN1cmUgb24gaG93IHRvIHN1cHBvcnQNCj4gYm90aCBkeW5hbWljIGFu ZCBzdGF0aWMgJ21heF90aHJlYWRzJy4NCg0KU2FtZSB0aG91Z2h0IGhlcmUtICB3b3VsZCBiZSBn b29kIHRvIGhhdmUgYSBzdGF0aWMgaW5pdGlhbGl6ZXIgKERFRklORV9SVEVfUkNVX1FTQlIpLA0K YnV0IHRoYXQgbWVhbnMgbmV3IGNvbXBpbGUgdGltZSBsaW1pdCAoJ21heF90aHJlYWRzJykgLSB0 aGluZyB0aGF0IHdlIHRyeSB0byBhdm9pZC4NCg0KPiANCj4gPiA+ID4gPiArCXYtPm1heF90aHJl YWRzID0gbWF4X3RocmVhZHM7DQo+ID4gPiA+ID4gKwl2LT5udW1fZWxlbXMgPSBSVEVfQUxJR05f TVVMX0NFSUwobWF4X3RocmVhZHMsDQo+ID4gPiA+ID4gKwkJCVJURV9RU0JSX1RIUklEX0FSUkFZ X0VMTV9TSVpFKSAvDQo+ID4gPiA+ID4gKwkJCVJURV9RU0JSX1RIUklEX0FSUkFZX0VMTV9TSVpF Ow0KPiA+ID4gPiA+ICsJdi0+dG9rZW4gPSBSVEVfUVNCUl9DTlRfSU5JVDsNCj4gPiA+ID4gPiAr DQo+ID4gPiA+ID4gKwlyZXR1cm4gMDsNCj4gPiA+ID4gPiArfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ ID4gPiArLyogUmVnaXN0ZXIgYSByZWFkZXIgdGhyZWFkIHRvIHJlcG9ydCBpdHMgcXVpZXNjZW50 IHN0YXRlDQo+ID4gPiA+ID4gKyAqIG9uIGEgUVMgdmFyaWFibGUuDQo+ID4gPiA+ID4gKyAqLw0K PiA+ID4gPiA+ICtpbnQgX19ydGVfZXhwZXJpbWVudGFsDQo+ID4gPiA+ID4gK3J0ZV9yY3VfcXNi cl90aHJlYWRfcmVnaXN0ZXIoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdW5zaWduZWQgaW50DQo+ ID4gPiA+ID4gK3RocmVhZF9pZCkgew0KPiA+ID4gPiA+ICsJdW5zaWduZWQgaW50IGksIGlkLCBz dWNjZXNzOw0KPiA+ID4gPiA+ICsJdWludDY0X3Qgb2xkX2JtYXAsIG5ld19ibWFwOw0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArCWlmICh2ID09IE5VTEwgfHwgdGhyZWFkX2lkID49IHYtPm1heF90 aHJlYWRzKSB7DQo+ID4gPiA+ID4gKwkJcnRlX2xvZyhSVEVfTE9HX0VSUiwgcmN1X2xvZ190eXBl LA0KPiA+ID4gPiA+ICsJCQkiJXMoKTogSW52YWxpZCBpbnB1dCBwYXJhbWV0ZXJcbiIsIF9fZnVu Y19fKTsNCj4gPiA+ID4gPiArCQlydGVfZXJybm8gPSBFSU5WQUw7DQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsJCXJldHVybiAxOw0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4g PiArCWlkID0gdGhyZWFkX2lkICYgUlRFX1FTQlJfVEhSSURfTUFTSzsNCj4gPiA+ID4gPiArCWkg PSB0aHJlYWRfaWQgPj4gUlRFX1FTQlJfVEhSSURfSU5ERVhfU0hJRlQ7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsJLyogTWFrZSBzdXJlIHRoYXQgdGhlIGNvdW50ZXIgZm9yIHJlZ2lzdGVyZWQg dGhyZWFkcyBkb2VzIG5vdA0KPiA+ID4gPiA+ICsJICogZ28gb3V0IG9mIHN5bmMuIEhlbmNlLCBh ZGRpdGlvbmFsIGNoZWNrcyBhcmUgcmVxdWlyZWQuDQo+ID4gPiA+ID4gKwkgKi8NCj4gPiA+ID4g PiArCS8qIENoZWNrIGlmIHRoZSB0aHJlYWQgaXMgYWxyZWFkeSByZWdpc3RlcmVkICovDQo+ID4g PiA+ID4gKwlvbGRfYm1hcCA9IF9fYXRvbWljX2xvYWRfbihSVEVfUVNCUl9USFJJRF9BUlJBWV9F TE0odiwgaSksDQo+ID4gPiA+ID4gKwkJCQkJX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4gPiA+ID4g KwlpZiAob2xkX2JtYXAgJiAxVUwgPDwgaWQpDQo+ID4gPiA+ID4gKwkJcmV0dXJuIDA7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJZG8gew0KPiA+ID4gPiA+ICsJCW5ld19ibWFwID0gb2xkX2Jt YXAgfCAoMVVMIDw8IGlkKTsNCj4gPiA+ID4gPiArCQlzdWNjZXNzID0gX19hdG9taWNfY29tcGFy ZV9leGNoYW5nZSgNCj4gPiA+ID4gPiArCQkJCQlSVEVfUVNCUl9USFJJRF9BUlJBWV9FTE0odiwg aSksDQo+ID4gPiA+ID4gKwkJCQkJJm9sZF9ibWFwLCAmbmV3X2JtYXAsIDAsDQo+ID4gPiA+ID4g KwkJCQkJX19BVE9NSUNfUkVMRUFTRSwNCj4gPiA+ID4gX19BVE9NSUNfUkVMQVhFRCk7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJCWlmIChzdWNjZXNzKQ0KPiA+ID4gPiA+ICsJCQlfX2F0b21p Y19mZXRjaF9hZGQoJnYtPm51bV90aHJlYWRzLA0KPiA+ID4gPiA+ICsJCQkJCQkxLCBfX0FUT01J Q19SRUxBWEVEKTsNCj4gPiA+ID4gPiArCQllbHNlIGlmIChvbGRfYm1hcCAmICgxVUwgPDwgaWQp KQ0KPiA+ID4gPiA+ICsJCQkvKiBTb21lb25lIGVsc2UgcmVnaXN0ZXJlZCB0aGlzIHRocmVhZC4N Cj4gPiA+ID4gPiArCQkJICogQ291bnRlciBzaG91bGQgbm90IGJlIGluY3JlbWVudGVkLg0KPiA+ ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gPiArCQkJcmV0dXJuIDA7DQo+ID4gPiA+ID4gKwl9IHdo aWxlIChzdWNjZXNzID09IDApOw0KPiA+ID4gPg0KPiA+ID4gPiBUaGlzIHdvdWxkIGJlIHNpbXBs ZXIgaWYgdGhyZWFkcyB3ZXJlIHJlcXVpcmVkIHRvIHJlZ2lzdGVyIHRoZW1zZWx2ZXMuDQo+ID4g PiA+IE1heWJlIHlvdSBoYXZlIHVzZSBjYXNlcyByZXF1aXJpbmcgcmVnaXN0cmF0aW9uIG9mIG90 aGVyIHRocmVhZHMsDQo+ID4gPiA+IGJ1dCB0aGlzIGNhcGFiaWxpdHkgaXMgYWRkaW5nIHNpZ25p ZmljYW50IGNvbXBsZXhpdHksIHNvIGl0IG1pZ2h0IGJlDQo+ID4gPiA+IHdvcnRoIHNvbWUgdGhv dWdodC4NCj4gPiA+ID4NCj4gPiA+IEl0IHdhcyBzaW1wbGUgZWFybGllciAoX19hdG9taWNfZmV0 Y2hfb3IpLiBUaGUgY29tcGxleGl0eSBpcyBhZGRlZCBhcw0KPiA+ICdudW1fdGhyZWFkcycgc2hv dWxkIG5vdCBnbyBvdXQgb2Ygc3luYy4NCj4gPg0KPiA+IEhtbW0uLi4NCj4gPg0KPiA+IFNvIHRo cmVhZHMgYXJlIGFsbG93ZWQgdG8gcmVnaXN0ZXIgb3RoZXIgdGhyZWFkcz8gIE9yIGlzIHRoZXJl IHNvbWUgb3RoZXINCj4gPiByZWFzb24gdGhhdCBjb25jdXJyZW50IHJlZ2lzdHJhdGlvbiBpcyBy ZXF1aXJlZD8NCj4gPg0KPiBZZXMsIGNvbnRyb2wgcGxhbmUgdGhyZWFkcyBjYW4gcmVnaXN0ZXIg dGhlIGZhc3QgcGF0aCB0aHJlYWRzLiBUaG91Z2gsIEkgYW0gbm90IHN1cmUgaG93IHVzZWZ1bCBp dCBpcy4gSSBkaWQgbm90IHdhbnQgdG8gYWRkIHRoZSByZXN0cmljdGlvbi4gSQ0KPiBleHBlY3Qg dGhhdCByZWFkZXIgdGhyZWFkcyB3aWxsIHJlZ2lzdGVyIHRoZW1zZWx2ZXMuIFRoZSByZWFkZXIg dGhyZWFkcyByZXF1aXJlIGNvbmN1cnJlbnQgcmVnaXN0cmF0aW9uIGFzIHRoZXkgYWxsIHdpbGwg YmUgcnVubmluZyBpbiBwYXJhbGxlbC4NCj4gSWYgdGhlIHJlcXVpcmVtZW50IG9mIGtlZXBpbmcg dHJhY2sgb2YgdGhlIG51bWJlciBvZiB0aHJlYWRzIHJlZ2lzdGVyZWQgY3VycmVudGx5IGdvZXMg YXdheSwgdGhlbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgc2ltcGxlLg0KPiANCj4gPHNuaXA+DQo+ IA0KPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIuaA0K PiA+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yY3UvcnRlX3JjdV9xc2JyLmggbmV3IGZpbGUgbW9kZSAx MDA2NDQgaW5kZXgNCj4gPiA+ID4gPiAwMDAwMDAwMDAuLmZmNjk2YWVhYg0KPiA+ID4gPiA+IC0t LSAvZGV2L251bGwNCj4gPiA+ID4gPiArKysgYi9saWIvbGlicnRlX3JjdS9ydGVfcmN1X3FzYnIu aA0KPiA+ID4gPiA+IEBAIC0wLDAgKzEsNTU0IEBADQo+ID4gPiA+ID4gKy8qIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gPiA+ID4gPiArICogQ29weXJpZ2h0IChjKSAy MDE4IEFybSBMaW1pdGVkICAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lmbmRlZiBfUlRF X1JDVV9RU0JSX0hfDQo+ID4gPiA+ID4gKyNkZWZpbmUgX1JURV9SQ1VfUVNCUl9IXw0KPiA+ID4g PiA+ICsNCj4gPiA+ID4gPiArLyoqDQo+ID4gPiA+ID4gKyAqIEBmaWxlDQo+ID4gPiA+ID4gKyAq IFJURSBRdWllc2NlbnQgU3RhdGUgQmFzZWQgUmVjbGFtYXRpb24gKFFTQlIpDQo+ID4gPiA+ID4g KyAqDQo+ID4gPiA+ID4gKyAqIFF1aWVzY2VudCBTdGF0ZSAoUVMpIGlzIGFueSBwb2ludCBpbiB0 aGUgdGhyZWFkIGV4ZWN1dGlvbg0KPiA+ID4gPiA+ICsgKiB3aGVyZSB0aGUgdGhyZWFkIGRvZXMg bm90IGhvbGQgYSByZWZlcmVuY2UgdG8gYSBkYXRhIHN0cnVjdHVyZQ0KPiA+ID4gPiA+ICsgKiBp biBzaGFyZWQgbWVtb3J5LiBXaGlsZSB1c2luZyBsb2NrLWxlc3MgZGF0YSBzdHJ1Y3R1cmVzLCB0 aGUNCj4gPiA+ID4gPiArd3JpdGVyDQo+ID4gPiA+ID4gKyAqIGNhbiBzYWZlbHkgZnJlZSBtZW1v cnkgb25jZSBhbGwgdGhlIHJlYWRlciB0aHJlYWRzIGhhdmUNCj4gPiA+ID4gPiArZW50ZXJlZA0K PiA+ID4gPiA+ICsgKiBxdWllc2NlbnQgc3RhdGUuDQo+ID4gPiA+ID4gKyAqDQo+ID4gPiA+ID4g KyAqIFRoaXMgbGlicmFyeSBwcm92aWRlcyB0aGUgYWJpbGl0eSBmb3IgdGhlIHJlYWRlcnMgdG8g cmVwb3J0DQo+ID4gPiA+ID4gK3F1aWVzY2VudA0KPiA+ID4gPiA+ICsgKiBzdGF0ZSBhbmQgZm9y IHRoZSB3cml0ZXJzIHRvIGlkZW50aWZ5IHdoZW4gYWxsIHRoZSByZWFkZXJzDQo+ID4gPiA+ID4g K2hhdmUNCj4gPiA+ID4gPiArICogZW50ZXJlZCBxdWllc2NlbnQgc3RhdGUuDQo+ID4gPiA+ID4g KyAqLw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+ID4gPiA+ ID4gK2V4dGVybiAiQyIgew0KPiA+ID4gPiA+ICsjZW5kaWYNCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gKyNpbmNsdWRlIDxzdGRpby5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8c3RkaW50Lmg+DQo+ ID4gPiA+ID4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX2Nv bW1vbi5oPg0KPiA+ID4gPiA+ICsjaW5jbHVkZSA8cnRlX21lbW9yeS5oPg0KPiA+ID4gPiA+ICsj aW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4gPiA+ID4gKyNpbmNsdWRlIDxydGVfZGVidWcuaD4N Cj4gPiA+ID4gPiArI2luY2x1ZGUgPHJ0ZV9hdG9taWMuaD4NCj4gPiA+ID4gPiArDQo+ID4gPiA+ ID4gK2V4dGVybiBpbnQgcmN1X2xvZ190eXBlOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArI2lm IFJURV9MT0dfRFBfTEVWRUwgPj0gUlRFX0xPR19ERUJVRyAjZGVmaW5lDQo+ID4gUkNVX0RQX0xP RyhsZXZlbCwNCj4gPiA+ID4gZm10LA0KPiA+ID4gPiA+ICthcmdzLi4uKSBcDQo+ID4gPiA+ID4g KwlydGVfbG9nKFJURV9MT0dfICMjIGxldmVsLCByY3VfbG9nX3R5cGUsIFwNCj4gPiA+ID4gPiAr CQkiJXMoKTogIiBmbXQgIlxuIiwgX19mdW5jX18sICMjIGFyZ3MpICNlbHNlICNkZWZpbmUNCj4g PiA+ID4gPiArUkNVX0RQX0xPRyhsZXZlbCwgZm10LCBhcmdzLi4uKSAjZW5kaWYNCj4gPiA+ID4g PiArDQo+ID4gPiA+ID4gKy8qIFJlZ2lzdGVyZWQgdGhyZWFkIElEcyBhcmUgc3RvcmVkIGFzIGEg Yml0bWFwIG9mIDY0YiBlbGVtZW50DQo+ID4gYXJyYXkuDQo+ID4gPiA+ID4gKyAqIEdpdmVuIHRo cmVhZCBpZCBuZWVkcyB0byBiZSBjb252ZXJ0ZWQgdG8gaW5kZXggaW50byB0aGUgYXJyYXkNCj4g PiA+ID4gPiArYW5kDQo+ID4gPiA+ID4gKyAqIHRoZSBpZCB3aXRoaW4gdGhlIGFycmF5IGVsZW1l bnQuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICsjZGVmaW5lIFJURV9RU0JSX1RIUklEX0FS UkFZX0VMTV9TSVpFIChzaXplb2YodWludDY0X3QpICogOCkNCj4gPiA+ID4gI2RlZmluZQ0KPiA+ ID4gPiA+ICtSVEVfUVNCUl9USFJJRF9BUlJBWV9TSVpFKG1heF90aHJlYWRzKSBcDQo+ID4gPiA+ ID4gKwlSVEVfQUxJR04oUlRFX0FMSUdOX01VTF9DRUlMKG1heF90aHJlYWRzLCBcDQo+ID4gPiA+ ID4gKwkJUlRFX1FTQlJfVEhSSURfQVJSQVlfRUxNX1NJWkUpID4+IDMsDQo+ID4gPiA+IFJURV9D QUNIRV9MSU5FX1NJWkUpICNkZWZpbmUNCj4gPiA+ID4gPiArUlRFX1FTQlJfVEhSSURfQVJSQVlf RUxNKHYsIGkpICgodWludDY0X3QgKikgXA0KPiA+ID4gPiA+ICsJKChzdHJ1Y3QgcnRlX3JjdV9x c2JyX2NudCAqKSh2ICsgMSkgKyB2LT5tYXhfdGhyZWFkcykgKyBpKQ0KPiA+ID4gPiA+ICsjZGVm aW5lIFJURV9RU0JSX1RIUklEX0lOREVYX1NISUZUIDYgI2RlZmluZQ0KPiA+IFJURV9RU0JSX1RI UklEX01BU0sNCj4gPiA+ID4gPiArMHgzZg0KPiA+ID4gPiAjZGVmaW5lDQo+ID4gPiA+ID4gK1JU RV9RU0JSX1RIUklEX0lOVkFMSUQgMHhmZmZmZmZmZg0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr LyogV29ya2VyIHRocmVhZCBjb3VudGVyICovDQo+ID4gPiA+ID4gK3N0cnVjdCBydGVfcmN1X3Fz YnJfY250IHsNCj4gPiA+ID4gPiArCXVpbnQ2NF90IGNudDsNCj4gPiA+ID4gPiArCS8qKjwgUXVp ZXNjZW50IHN0YXRlIGNvdW50ZXIuIFZhbHVlIDAgaW5kaWNhdGVzIHRoZSB0aHJlYWQgaXMNCj4g PiA+ID4gPiArb2ZmbGluZSAqLyB9IF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ID4gKw0K PiA+ID4gPiA+ICsjZGVmaW5lIFJURV9RU0JSX0NOVF9USFJfT0ZGTElORSAwICNkZWZpbmUNCj4g PiBSVEVfUVNCUl9DTlRfSU5JVCAxDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBSVEUgUXVp ZXNjZW50IFN0YXRlIHZhcmlhYmxlIHN0cnVjdHVyZS4NCj4gPiA+ID4gPiArICogVGhpcyBzdHJ1 Y3R1cmUgaGFzIHR3byBlbGVtZW50cyB0aGF0IHZhcnkgaW4gc2l6ZSBiYXNlZCBvbiB0aGUNCj4g PiA+ID4gPiArICogJ21heF90aHJlYWRzJyBwYXJhbWV0ZXIuDQo+ID4gPiA+ID4gKyAqIDEpIFF1 aWVzY2VudCBzdGF0ZSBjb3VudGVyIGFycmF5DQo+ID4gPiA+ID4gKyAqIDIpIFJlZ2lzdGVyIHRo cmVhZCBJRCBhcnJheQ0KPiA+ID4gPiA+ICsgKi8NCj4gPiA+ID4gPiArc3RydWN0IHJ0ZV9yY3Vf cXNiciB7DQo+ID4gPiA+ID4gKwl1aW50NjRfdCB0b2tlbiBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0K PiA+ID4gPiA+ICsJLyoqPCBDb3VudGVyIHRvIGFsbG93IGZvciBtdWx0aXBsZSBjb25jdXJyZW50 IHF1aWVzY2VudCBzdGF0ZQ0KPiA+ID4gPiA+ICtxdWVyaWVzICovDQo+ID4gPiA+ID4gKw0KPiA+ ID4gPiA+ICsJdWludDMyX3QgbnVtX2VsZW1zIF9fcnRlX2NhY2hlX2FsaWduZWQ7DQo+ID4gPiA+ ID4gKwkvKio8IE51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgdGhyZWFkIElEIGFycmF5ICovDQo+ ID4gPiA+ID4gKwl1aW50MzJfdCBudW1fdGhyZWFkczsNCj4gPiA+ID4gPiArCS8qKjwgTnVtYmVy IG9mIHRocmVhZHMgY3VycmVudGx5IHVzaW5nIHRoaXMgUVMgdmFyaWFibGUgKi8NCj4gPiA+ID4g PiArCXVpbnQzMl90IG1heF90aHJlYWRzOw0KPiA+ID4gPiA+ICsJLyoqPCBNYXhpbXVtIG51bWJl ciBvZiB0aHJlYWRzIHVzaW5nIHRoaXMgUVMgdmFyaWFibGUgKi8NCj4gPiA+ID4gPiArDQo+ID4g PiA+ID4gKwlzdHJ1Y3QgcnRlX3JjdV9xc2JyX2NudCBxc2JyX2NudFswXSBfX3J0ZV9jYWNoZV9h bGlnbmVkOw0KPiA+ID4gPiA+ICsJLyoqPCBRdWllc2NlbnQgc3RhdGUgY291bnRlciBhcnJheSBv ZiAnbWF4X3RocmVhZHMnIGVsZW1lbnRzICovDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJLyoq PCBSZWdpc3RlcmVkIHRocmVhZCBJRHMgYXJlIHN0b3JlZCBpbiBhIGJpdG1hcCBhcnJheSwNCj4g PiA+ID4gPiArCSAqICAgYWZ0ZXIgdGhlIHF1aWVzY2VudCBzdGF0ZSBjb3VudGVyIGFycmF5Lg0K PiA+ID4gPiA+ICsJICovDQo+ID4gPiA+ID4gK30gX19ydGVfY2FjaGVfYWxpZ25lZDsNCj4gPiA+ ID4gPiArDQo+IA0KPiA8c25pcD4NCj4gDQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBDaGVj ayB0aGUgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXIgZm9yIHJlZ2lzdGVyZWQgdGhyZWFkcyBvbmx5 LA0KPiA+ID4gPiA+ICthc3N1bWluZw0KPiA+ID4gPiA+ICsgKiB0aGF0IG5vdCBhbGwgdGhyZWFk cyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gKyAqLw0KPiA+ID4gPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSBpbnQNCj4gPiA+ID4gPiArX19yY3VfcXNicl9jaGVja19zZWxlY3Rp dmUoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0X3QgdCwNCj4gPiA+ID4gPiArYm9vbA0K PiA+ID4gPiA+ICt3YWl0KSB7DQo+ID4gPiA+ID4gKwl1aW50MzJfdCBpLCBqLCBpZDsNCj4gPiA+ ID4gPiArCXVpbnQ2NF90IGJtYXA7DQo+ID4gPiA+ID4gKwl1aW50NjRfdCBjOw0KPiA+ID4gPiA+ ICsJdWludDY0X3QgKnJlZ190aHJlYWRfaWQ7DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsJZm9y IChpID0gMCwgcmVnX3RocmVhZF9pZCA9IFJURV9RU0JSX1RIUklEX0FSUkFZX0VMTSh2LCAwKTsN Cj4gPiA+ID4gPiArCQlpIDwgdi0+bnVtX2VsZW1zOw0KPiA+ID4gPiA+ICsJCWkrKywgcmVnX3Ro cmVhZF9pZCsrKSB7DQo+ID4gPiA+ID4gKwkJLyogTG9hZCB0aGUgY3VycmVudCByZWdpc3RlcmVk IHRocmVhZCBiaXQgbWFwIGJlZm9yZQ0KPiA+ID4gPiA+ICsJCSAqIGxvYWRpbmcgdGhlIHJlYWRl ciB0aHJlYWQgcXVpZXNjZW50IHN0YXRlIGNvdW50ZXJzLg0KPiA+ID4gPiA+ICsJCSAqLw0KPiA+ ID4gPiA+ICsJCWJtYXAgPSBfX2F0b21pY19sb2FkX24ocmVnX3RocmVhZF9pZCwNCj4gPiA+ID4g X19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gPiA+ID4gKwkJaWQgPSBpIDw8IFJURV9RU0JSX1RIUklE X0lOREVYX1NISUZUOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCQl3aGlsZSAoYm1hcCkgew0K PiA+ID4gPiA+ICsJCQlqID0gX19idWlsdGluX2N0emwoYm1hcCk7DQo+ID4gPiA+ID4gKwkJCVJD VV9EUF9MT0coREVCVUcsDQo+ID4gPiA+ID4gKwkJCQkiJXM6IGNoZWNrOiB0b2tlbiA9ICVsdSwg d2FpdCA9ICVkLCBCaXQgTWFwDQo+ID4gPiA+ID0gMHglbHgsIFRocmVhZCBJRCA9ICVkIiwNCj4g PiA+ID4gPiArCQkJCV9fZnVuY19fLCB0LCB3YWl0LCBibWFwLCBpZCArIGopOw0KPiA+ID4gPiA+ ICsJCQljID0gX19hdG9taWNfbG9hZF9uKA0KPiA+ID4gPiA+ICsJCQkJCSZ2LT5xc2JyX2NudFtp ZCArIGpdLmNudCwNCj4gPiA+ID4gPiArCQkJCQlfX0FUT01JQ19BQ1FVSVJFKTsNCj4gPiA+ID4g PiArCQkJUkNVX0RQX0xPRyhERUJVRywNCj4gPiA+ID4gPiArCQkJCSIlczogc3RhdHVzOiB0b2tl biA9ICVsdSwgd2FpdCA9ICVkLCBUaHJlYWQNCj4gPiA+ID4gUVMgY250ID0gJWx1LCBUaHJlYWQg SUQgPSAlZCIsDQo+ID4gPiA+ID4gKwkJCQlfX2Z1bmNfXywgdCwgd2FpdCwgYywgaWQraik7DQo+ ID4gPiA+ID4gKwkJCS8qIENvdW50ZXIgaXMgbm90IGNoZWNrZWQgZm9yIHdyYXAtYXJvdW5kDQo+ ID4gPiA+IGNvbmRpdGlvbg0KPiA+ID4gPiA+ICsJCQkgKiBhcyBpdCBpcyBhIDY0YiBjb3VudGVy Lg0KPiA+ID4gPiA+ICsJCQkgKi8NCj4gPiA+ID4gPiArCQkJaWYgKHVubGlrZWx5KGMgIT0gUlRF X1FTQlJfQ05UX1RIUl9PRkZMSU5FICYmIGMNCj4gPiA+ID4gPCB0KSkgew0KPiA+ID4gPg0KPiA+ ID4gPiBUaGlzIGFzc3VtZXMgdGhhdCBhIDY0LWJpdCBjb3VudGVyIHdvbid0IG92ZXJmbG93LCB3 aGljaCBpcyBjbG9zZQ0KPiA+ID4gPiBlbm91Z2ggdG8gdHJ1ZSBnaXZlbiBjdXJyZW50IENQVSBj bG9jayBmcmVxdWVuY2llcy4gIDstKQ0KPiA+ID4gPg0KPiA+ID4gPiA+ICsJCQkJLyogVGhpcyB0 aHJlYWQgaXMgbm90IGluIHF1aWVzY2VudCBzdGF0ZSAqLw0KPiA+ID4gPiA+ICsJCQkJaWYgKCF3 YWl0KQ0KPiA+ID4gPiA+ICsJCQkJCXJldHVybiAwOw0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiAr CQkJCXJ0ZV9wYXVzZSgpOw0KPiA+ID4gPiA+ICsJCQkJLyogVGhpcyB0aHJlYWQgbWlnaHQgaGF2 ZSB1bnJlZ2lzdGVyZWQuDQo+ID4gPiA+ID4gKwkJCQkgKiBSZS1yZWFkIHRoZSBiaXRtYXAuDQo+ ID4gPiA+ID4gKwkJCQkgKi8NCj4gPiA+ID4gPiArCQkJCWJtYXAgPSBfX2F0b21pY19sb2FkX24o cmVnX3RocmVhZF9pZCwNCj4gPiA+ID4gPiArCQkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4g PiA+ID4gKw0KPiA+ID4gPiA+ICsJCQkJY29udGludWU7DQo+ID4gPiA+ID4gKwkJCX0NCj4gPiA+ ID4gPiArDQo+ID4gPiA+ID4gKwkJCWJtYXAgJj0gfigxVUwgPDwgaik7DQo+ID4gPiA+ID4gKwkJ fQ0KPiA+ID4gPiA+ICsJfQ0KPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiArCXJldHVybiAxOw0KPiA+ ID4gPiA+ICt9DQo+ID4gPiA+ID4gKw0KPiA+ID4gPiA+ICsvKiBDaGVjayB0aGUgcXVpZXNjZW50 IHN0YXRlIGNvdW50ZXIgZm9yIGFsbCB0aHJlYWRzLCBhc3N1bWluZw0KPiA+ID4gPiA+ICt0aGF0 DQo+ID4gPiA+ID4gKyAqIGFsbCB0aGUgdGhyZWFkcyBoYXZlIHJlZ2lzdGVyZWQuDQo+ID4gPiA+ ID4gKyAqLw0KPiA+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSBpbnQNCj4gPiA+ ID4gPiArX19yY3VfcXNicl9jaGVja19hbGwoc3RydWN0IHJ0ZV9yY3VfcXNiciAqdiwgdWludDY0 X3QgdCwgYm9vbA0KPiA+ID4gPiA+ICt3YWl0KQ0KPiA+ID4gPg0KPiA+ID4gPiBEb2VzIGNoZWNr aW5nIHRoZSBiaXRtYXAgcmVhbGx5IHRha2UgbG9uZyBlbm91Z2ggdG8gbWFrZSB0aGlzDQo+ID4g PiA+IHdvcnRod2hpbGUgYXMgYSBzZXBhcmF0ZSBmdW5jdGlvbj8gIEkgd291bGQgdGhpbmsgdGhh dCB0aGUNCj4gPiA+ID4gYml0bWFwLWNoZWNraW5nIHRpbWUgd291bGQgYmUgbG9zdCBpbiB0aGUg bm9pc2Ugb2YgY2FjaGUgbWlzc2VzIGZyb20NCj4gPiB0aGUgLT5jbnQgbG9hZHMuDQo+ID4gPg0K PiA+ID4gSXQgYXZvaWRzIGFjY2Vzc2luZyBvbmUgY2FjaGUgbGluZS4gSSB0aGluayB0aGlzIGlz IHdoZXJlIHRoZSBzYXZpbmdzIGFyZQ0KPiA+IChtYXkgYmUgaW4gdGhlb3J5KS4gVGhpcyBpcyB0 aGUgbW9zdCBwcm9iYWJsZSB1c2UgY2FzZS4NCj4gPiA+IE9uIHRoZSBvdGhlciBoYW5kLCBfX3Jj dV9xc2JyX2NoZWNrX3NlbGVjdGl2ZSgpIHdpbGwgcmVzdWx0IGluIHNhdmluZ3MNCj4gPiAoZGVw ZW5kaW5nIG9uIGhvdyBtYW55IHRocmVhZHMgYXJlIGN1cnJlbnRseSByZWdpc3RlcmVkKSBieSBh dm9pZGluZw0KPiA+IGFjY2Vzc2luZyB1bndhbnRlZCBjb3VudGVycy4NCj4gPg0KPiA+IERvIHlv dSByZWFsbHkgZXhwZWN0IHRvIGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiBvbiBhbnkga2luZCBv ZiBmYXN0cGF0aD8NCj4gDQo+IFllcy4gRm9yIHNvbWUgb2YgdGhlIGxpYnJhcmllcyAocnRlX2hh c2gpLCB0aGUgd3JpdGVyIGlzIG9uIHRoZSBmYXN0IHBhdGguDQo+IA0KPiA+DQo+ID4gPiA+IFN1 cmUsIGlmIHlvdSBpbnZva2UgX19yY3VfcXNicl9jaGVja19zZWxlY3RpdmUoKSBpbiBhIHRpZ2h0 IGxvb3AgaW4NCj4gPiA+ID4gdGhlIGFic2VuY2Ugb2YgcmVhZGVycywgeW91IG1pZ2h0IHNlZSBf X3JjdV9xc2JyX2NoZWNrX2FsbCgpIGJlaW5nIGENCj4gPiA+ID4gYml0IGZhc3Rlci4gIEJ1dCBp cyB0aGF0IHJlYWxseSB3aGF0IERQREsgZG9lcz8NCj4gPiA+IEkgc2VlIGltcHJvdmVtZW50cyBp biB0aGUgc3ludGhldGljIHRlc3QgY2FzZSAoc2ltaWxhciB0byB0aGUgb25lIHlvdQ0KPiA+IGhh dmUgZGVzY3JpYmVkLCBhcm91bmQgMjclKS4gSG93ZXZlciwgaW4gdGhlIG1vcmUgcHJhY3RpY2Fs IHRlc3QgY2FzZXMgSQ0KPiA+IGRvIG5vdCBzZWUgYW55IGRpZmZlcmVuY2UuDQo+ID4NCj4gPiBJ ZiB0aGUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgb25seSBvY2N1cnMgaW4gYSBzeW50aGV0aWMg dGVzdCBjYXNlLCBkb2VzDQo+ID4gaXQgcmVhbGx5IG1ha2Ugc2Vuc2UgdG8gb3B0aW1pemUgZm9y IGl0Pw0KPiBJIGhhZCB0byBmaXggZmV3IGlzc3VlcyBpbiB0aGUgcGVyZm9ybWFuY2UgdGVzdCBj YXNlcyBhbmQgYWRkZWQgbW9yZSB0byBkbyB0aGUgY29tcGFyaXNvbi4gVGhlc2UgY2hhbmdlcyBh cmUgaW4gdjUuDQo+IFRoZXJlIGFyZSA0IHBlcmZvcm1hbmNlIHRlc3RzIGludm9sdmluZyB0aGlz IEFQSS4NCj4gMSkgMSBXcml0ZXIsICdOJyByZWFkZXJzDQo+ICAgICAgV3JpdGVyOiBxc2JyX3N0 YXJ0LCBxc2JyX2NoZWNrKHdhaXQgPSB0cnVlKQ0KPiAgICAgIFJlYWRlcnM6IHFzYnJfcXVpZXNj ZW50DQo+IDIpICdOJyB3cml0ZXJzDQo+ICAgICAgV3JpdGVyczogcXNicl9zdGFydCwgcXNicl9j aGVjayh3YWl0ID09IGZhbHNlKQ0KPiAzKSAxIFdyaXRlciwgJ04nIHJlYWRlcnMgKHRoaXMgdGVz dCB1c2VzIHRoZSBsb2NrLWZyZWUgcnRlX2hhc2ggZGF0YSBzdHJ1Y3R1cmUpDQo+ICAgICAgV3Jp dGVyOiBoYXNoX2RlbCwgcXNicl9zdGFydCwgcXNicl9jaGVjayh3YWl0ID0gdHJ1ZSksIHZhbGlk YXRlIHRoYXQgdGhlIHJlYWRlciB3YXMgYWJsZSB0byBjb21wbGV0ZSBpdHMgd29yayBzdWNjZXNz ZnVsbHkNCj4gICAgICBSZWFkZXJzOiB0aHJlYWRfb25saW5lLCBoYXNoX2xvb2t1cCwgYWNjZXNz IHRoZSBwb2ludGVyIC0gZG8gc29tZSB3b3JrIG9uIGl0LCBxc2JyX3F1aWVzY2VudCwgdGhyZWFk X29mZmxpbmUNCj4gNCkgU2FtZSBhcyB0ZXN0IDMpIGJ1dCBxc2JyX2NoZWNrICh3YWl0ID09IGZh bHNlKQ0KPiANCj4gVGhlcmUgYXJlIDIgc2V0cyBvZiB0aGVzZSB0ZXN0cy4NCj4gYSkgUVMgdmFy aWFibGUgaXMgY3JlYXRlZCB3aXRoIG51bWJlciBvZiB0aHJlYWRzIHNhbWUgYXMgbnVtYmVyIG9m IHJlYWRlcnMgLSB0aGlzIHdpbGwgZXhlcmNpc2UgX19yY3VfcXNicl9jaGVja19hbGwNCj4gYikg UVMgdmFyaWFibGUgaXMgY3JlYXRlZCB3aXRoIDEyOCB0aHJlYWRzLCBudW1iZXIgb2YgcmVnaXN0 ZXJlZCB0aHJlYWRzIGlzIHNhbWUgYXMgaW4gYSkgLSB0aGlzIHdpbGwgZXhlcmNpc2UgX19yY3Vf cXNicl9jaGVja19zZWxlY3RpdmUNCj4gDQo+IEZvbGxvd2luZyBhcmUgdGhlIHJlc3VsdHMgb24g eDg2IChFNS0yNjYwIHY0IEAgMi4wMEdIeikgY29tcGFyaW5nIGZyb20gYSkgdG8gYikgKG9uIHg4 NiBpbiBteSBzZXR1cCwgdGhlIHJlc3VsdHMgYXJlIG5vdCB2ZXJ5IHN0YWJsZQ0KPiBiZXR3ZWVu IHJ1bnMpDQo+IDEpIDI1JQ0KPiAyKSAtMyUNCj4gMykgLTAuNCUNCj4gNCkgMS4zOCUNCj4gDQo+ IEZvbGxvd2luZyBhcmUgdGhlIHJlc3VsdHMgb24gYW4gQXJtIHN5c3RlbSBjb21wYXJpbmcgZnJv bSBhKSB0byBiKSAocmVzdWx0cyBhcmUgbm90IHByZXR0eSBzdGFibGUgYmV0d2VlbiBydW5zKQ0K PiAxKSAtMy40NSUNCj4gMikgMCUNCj4gMykgLTAuMDMlDQo+IDQpIC0wLjA0JQ0KPiANCj4gS29u c3RhbnRpbiwgaXMgaXQgcG9zc2libGUgdG8gcnVuIHRoZSB0ZXN0cyBvbiB5b3VyIHNldHVwIGFu ZCBsb29rIGF0IHRoZSByZXN1bHRzPw0KDQpJIGRpZCBydW4gVjUgb24gbXkgYm94IChTS1ggMi4x IEdIeikgd2l0aCAxNyBsY29yZXMgKDEgcGh5c2ljYWwgY29yZSBwZXIgdGhyZWFkKS4NCkRpZG4n dCBub3RpY2UgYW55IHNpZ2luaWZjYXRuIGZsdWN0dWF0aW9ucyBiZXR3ZWVuIHJ1bnMsIG91dHB1 dCBiZWxvdy4NCg0KPnJjdV9xc2JyX3BlcmZfYXV0b3Rlc0VTQ1swS3QNCk51bWJlciBvZiBjb3Jl cyBwcm92aWRlZCA9IDE3DQpQZXJmIHRlc3Qgd2l0aCBhbGwgcmVhZGVyIHRocmVhZHMgcmVnaXN0 ZXJlZA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KUGVy ZiBUZXN0OiAxNiBSZWFkZXJzLzEgV3JpdGVyKCd3YWl0JyBpbiBxc2JyX2NoZWNrID09IHRydWUp DQpUb3RhbCBSQ1UgdXBkYXRlcyA9IDY1NzA3MjMyODk5DQpDeWNsZXMgcGVyIDEwMDAgdXBkYXRl czogMTg0ODINClRvdGFsIFJDVSBjaGVja3MgPSAyMDAwMDAwMA0KQ3ljbGVzIHBlciAxMDAwIGNo ZWNrczogMzc5NDk5MQ0KDQpQZXJmIFRlc3Q6IDE3IFJlYWRlcnMNClRvdGFsIFJDVSB1cGRhdGVz ID0gMTcwMDAwMDAwMA0KQ3ljbGVzIHBlciAxMDAwIHVwZGF0ZXM6IDIxMjgNCg0KUGVyZiB0ZXN0 OiAxNyBXcml0ZXJzICgnd2FpdCcgaW4gcXNicl9jaGVjayA9PSBmYWxzZSkNClRvdGFsIFJDVSBj aGVja3MgPSAzNDAwMDAwMDANCkN5Y2xlcyBwZXIgMTAwMCBjaGVja3M6IDEwMDMwDQoNClBlcmYg dGVzdDogMSB3cml0ZXIsIDE3IHJlYWRlcnMsIDEgUVNCUiB2YXJpYWJsZSwgMSBRU0JSIFF1ZXJ5 LCBCbG9ja2luZyBRU0JSIENoZWNrDQpGb2xsb3dpbmcgbnVtYmVycyBpbmNsdWRlIGNhbGxzIHRv IHJ0ZV9oYXNoIGZ1bmN0aW9ucw0KQ3ljbGVzIHBlciAxIHVwZGF0ZShvbmxpbmUvdXBkYXRlL29m ZmxpbmUpOiAxOTg0Njk2DQpDeWNsZXMgcGVyIDEgY2hlY2soc3RhcnQsIGNoZWNrKTogMjYxOTAw Mg0KDQpQZXJmIHRlc3Q6IDEgd3JpdGVyLCAxNyByZWFkZXJzLCAxIFFTQlIgdmFyaWFibGUsIDEg UVNCUiBRdWVyeSwgTm9uLUJsb2NraW5nIFFTQlIgY2hlY2sNCkZvbGxvd2luZyBudW1iZXJzIGlu Y2x1ZGUgY2FsbHMgdG8gcnRlX2hhc2ggZnVuY3Rpb25zDQpDeWNsZXMgcGVyIDEgdXBkYXRlKG9u bGluZS91cGRhdGUvb2ZmbGluZSk6IDIwMjgwMzANCkN5Y2xlcyBwZXIgMSBjaGVjayhzdGFydCwg Y2hlY2spOiAyODc2NjY3DQoNClBlcmYgdGVzdCB3aXRoIHNvbWUgb2YgcmVhZGVyIHRocmVhZHMg cmVnaXN0ZXJlZA0KLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQoNClBlcmYgVGVzdDogMTYgUmVhZGVycy8xIFdyaXRlcignd2FpdCcgaW4gcXNicl9jaGVj ayA9PSB0cnVlKQ0KVG90YWwgUkNVIHVwZGF0ZXMgPSA2ODg1MDA3MzA1NQ0KQ3ljbGVzIHBlciAx MDAwIHVwZGF0ZXM6IDI1NDkwDQpUb3RhbCBSQ1UgY2hlY2tzID0gMjAwMDAwMDANCkN5Y2xlcyBw ZXIgMTAwMCBjaGVja3M6IDU0ODQ0MDMNCg0KUGVyZiBUZXN0OiAxNyBSZWFkZXJzDQpUb3RhbCBS Q1UgdXBkYXRlcyA9IDE3MDAwMDAwMDANCkN5Y2xlcyBwZXIgMTAwMCB1cGRhdGVzOiAyMTI3DQoN ClBlcmYgdGVzdDogMTcgV3JpdGVycyAoJ3dhaXQnIGluIHFzYnJfY2hlY2sgPT0gZmFsc2UpDQpU b3RhbCBSQ1UgY2hlY2tzID0gMzQwMDAwMDAwDQpDeWNsZXMgcGVyIDEwMDAgY2hlY2tzOiAxMDAz NA0KDQpQZXJmIHRlc3Q6IDEgd3JpdGVyLCAxNyByZWFkZXJzLCAxIFFTQlIgdmFyaWFibGUsIDEg UVNCUiBRdWVyeSwgQmxvY2tpbmcgUVNCUiBDaGVjaw0KRm9sbG93aW5nIG51bWJlcnMgaW5jbHVk ZSBjYWxscyB0byBydGVfaGFzaCBmdW5jdGlvbnMNCkN5Y2xlcyBwZXIgMSB1cGRhdGUob25saW5l L3VwZGF0ZS9vZmZsaW5lKTogMzYwNDQ4OQ0KQ3ljbGVzIHBlciAxIGNoZWNrKHN0YXJ0LCBjaGVj ayk6IDcwNzczNzINCg0KUGVyZiB0ZXN0OiAxIHdyaXRlciwgMTcgcmVhZGVycywgMSBRU0JSIHZh cmlhYmxlLCAxIFFTQlIgUXVlcnksIE5vbi1CbG9ja2luZyBRU0JSIGNoZWNrDQpGb2xsb3dpbmcg bnVtYmVycyBpbmNsdWRlIGNhbGxzIHRvIHJ0ZV9oYXNoIGZ1bmN0aW9ucw0KQ3ljbGVzIHBlciAx IHVwZGF0ZShvbmxpbmUvdXBkYXRlL29mZmxpbmUpOiAzOTM2ODMxDQpDeWNsZXMgcGVyIDEgY2hl Y2soc3RhcnQsIGNoZWNrKTogNzI2MjczOA0KDQoNClRlc3QgT0sNCg0KS29uc3RhbnRpbg0KDQo=