From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6213AC61DC2 for ; Wed, 26 Aug 2026 08:13:35 +0000 (UTC) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 91F934026D; Wed, 26 Aug 2026 10:13:34 +0200 (CEST) Received: from frasgout.his.huawei.com (frasgout.his.huawei.com [185.176.79.56]) by mails.dpdk.org (Postfix) with ESMTP id 35CE4400EF for ; Wed, 26 Aug 2026 10:13:33 +0200 (CEST) dkim-signature: v=1; a=rsa-sha256; d=huawei.com; s=dkim; c=relaxed/relaxed; q=dns/txt; h=From; bh=o6wo/wr1a2826u2UcTcDTJZvfEr5pGcqRuMRIocmmTM=; b=QppBxdTIO0V4VLAX3tWSoZfYyNUbyqkt2x5V2hhLBNA/CbYPUtfM6dS6tZHlZ/zjUe6ViYJmY cv4MEfdpTT4tejsXtZc3z9FdoNtHwez36071BZRTdffdBd0Oi/Z47iQzj9XyR1hrBTxbg4vrq0j rUIB6LsO/kBeSZKNQtxXBi0= Received: from mail.maildlp.com (unknown [172.18.224.83]) by frasgout.his.huawei.com (SkyGuard) with ESMTPS id 4hVHTJ0BRHzJ46Dk; Wed, 26 Aug 2026 16:13:08 +0800 (CST) Received: from dubpeml100001.china.huawei.com (unknown [7.214.144.137]) by mail.maildlp.com (Postfix) with ESMTPS id 554A240569; Wed, 26 Aug 2026 16:13:27 +0800 (CST) Received: from dubpeml500001.china.huawei.com (7.214.147.241) by dubpeml100001.china.huawei.com (7.214.144.137) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.45; Wed, 26 Aug 2026 09:13:26 +0100 Received: from dubpeml500001.china.huawei.com ([7.214.147.241]) by dubpeml500001.china.huawei.com ([7.214.147.241]) with mapi id 15.02.2562.045; Wed, 26 Aug 2026 09:13:26 +0100 From: Konstantin Ananyev To: =?utf-8?B?TW9ydGVuIEJyw7hydXA=?= , "dev@dpdk.org" Subject: RE: [PATCH] stack: introduce pile Thread-Topic: [PATCH] stack: introduce pile Thread-Index: AQHdKmHxOTsi6KhTAk+e68voB41GrLawDA8A Date: Wed, 26 Aug 2026 08:13:26 +0000 Message-ID: References: <20260812134756.1829613-1-mb@smartsharesystems.com> In-Reply-To: <20260812134756.1829613-1-mb@smartsharesystems.com> Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.48.144.164] Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 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 DQoNCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2suaCBiL2xpYi9zdGFjay9ydGVf c3RhY2suaA0KPiBpbmRleCBmZDE3YWM3OTFkLi5jYTExZjFkMjk2IDEwMDY0NA0KPiAtLS0gYS9s aWIvc3RhY2svcnRlX3N0YWNrLmgNCj4gKysrIGIvbGliL3N0YWNrL3J0ZV9zdGFjay5oDQo+IEBA IC0xLDUgKzEsNiBAQA0KPiAgLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVz ZQ0KPiAgICogQ29weXJpZ2h0KGMpIDIwMTkgSW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqIENvcHly aWdodChjKSAyMDI2IFNtYXJ0U2hhcmUgU3lzdGVtcw0KPiAgICovDQo+IA0KPiAgLyoqDQo+IEBA IC0yOCwxMSArMjksNDcgQEANCj4gICNkZWZpbmUgUlRFX1NUQUNLX05BTUVTSVpFIChSVEVfTUVN Wk9ORV9OQU1FU0laRSAtIFwNCj4gIAkJCSAgIHNpemVvZihSVEVfU1RBQ0tfTVpfUFJFRklYKSAr IDEpDQo+IA0KPiArc3RhdGljX2Fzc2VydCgoKHNpemVvZih2b2lkICopICogUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFKSAmDQo+IFJURV9DQUNIRV9MSU5FX01BU0spID09IDAsDQo+ICsJCSJQaWxl IGJ1bGsgc2l6ZSBtdXN0IGJlIGRpdmlzaWJsZSBieSBDUFUgY2FjaGUgbGluZSBzaXplIik7DQo+ ICtzdGF0aWNfYXNzZXJ0KFJURV9JU19QT1dFUl9PRl8yKFJURV9TVEFDS19QSUxFX0JVTEtfU0la RSksDQo+ICsJCSJQaWxlIGJ1bGsgc2l6ZSBtdXN0IGJlIHBvd2VyIG9mIDIiKTsNCj4gKw0KPiAr LyogTm90ZTogQWxzbyB1c2VkIGFzIHNvbG8gKHNpbmdsZS1vYmplY3QpIHBpbGUgZWxlbWVudC4g Ki8NCj4gIHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSB7DQo+ICAJdm9pZCAqZGF0YTsJCQkvKio8 IERhdGEgcG9pbnRlciAqLw0KPiAgCXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqbmV4dDsJLyoq PCBOZXh0IHBvaW50ZXIgKi8NCj4gIH07DQo+IA0KPiArLyoNCj4gKyAqIEJ1bGsgKG11bHRpLW9i amVjdCkgcGlsZSBlbGVtZW50Lg0KPiArICogSW5oZXJpdGVkIGZyb20gdGhlIHJ0ZV9zdGFja19s Zl9lbGVtIChzaW5nbGUtb2JqZWN0KSBjbGFzcywNCj4gKyAqIGFuZCBleHRlbmRlZCB3aXRoIGFu IGFycmF5IGZvciBob2xkaW5nIGEgYnVsayBvZiBvYmplY3QgcG9pbnRlcnMuDQo+ICsgKi8NCj4g K3N0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gew0KPiArCS8qIFRoZSBmaXJzdCBwYXJ0 IG11c3QgYmUgQUJJIGNvbXBhdGlibGUgd2l0aCB0aGUgcnRlX3N0YWNrX2xmX2VsZW0NCj4gcGFy ZW50IGNsYXNzLiAqLw0KPiArCXZvaWQgKmRhdGE7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAvKio8IFVudXNlZCwgZm9yIHJ0ZV9zdGFja19sZl9lbGVtDQo+IGNvbXBhdGliaWxpdHkgKi8N Cg0KV2h5IHNpbXBseSBub3Q6IA0Kc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSB7DQoJ c3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtIGVsZW07DQogICAgICAgICAgICAgIC4uLi4NCn07DQo/ DQpUaGF0IHdheSB5b3UganVzdCBuZWVkIGEgc3RhdGljX2Fzc2VydCB0aGF0IGVsZW0gYWx3YXlz IGZpcnN0IChvZmZzZXQgPT0gMCkuDQpXb3VsZG4ndCBuZWVkIHRoYXQgY2x1bXN5IGFzc2VydHMg YmVsb3cuDQoNCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICpuZXh0OyAgLyoq PCBOZXh0IHBvaW50ZXIgKi8NCj4gKwkvKiBUaGUgc2Vjb25kIHBhcnQgZGlmZmVycy4gKi8NCj4g KwlhbGlnbmFzKFJURV9DQUNIRV9MSU5FX1NJWkUpDQo+ICsJdm9pZCAqb2Jqc1tSVEVfU1RBQ0tf UElMRV9CVUxLX1NJWkVdOyAgIC8qKjwgQnVsayAobXVsdGktb2JqZWN0KQ0KPiBwb2ludGVycyAq Lw0KPiArfTsNCj4gKw0KPiArc3RhdGljX2Fzc2VydChzaXplb2Yoc3RydWN0IHJ0ZV9zdGFja19s Zl9lbGVtKSA9PQ0KPiArCQlzaXplb2Yoc3RydWN0IHJ0ZV9zdGFja19sZl9lbGVtICopICsgc2l6 ZW9mKHZvaWQgKiksDQo+ICsJCSJQYXJlbnQgdHlwZSBoYXMgY2hhbmdlZCIpOw0KPiArc3RhdGlj X2Fzc2VydChSVEVfU0laRU9GX0ZJRUxEKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgbmV4dCkg PT0NCj4gKwkJUlRFX1NJWkVPRl9GSUVMRChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVt LCBuZXh0KSwNCj4gKwkJIkluaGVyaXRlZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0aWNfYXNz ZXJ0KG9mZnNldG9mKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgbmV4dCkgPT0NCj4gKwkJb2Zm c2V0b2Yoc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSwgbmV4dCksDQo+ICsJCSJJbmhl cml0ZWQgdHlwZSBtaXNtYXRjaCIpOw0KPiArc3RhdGljX2Fzc2VydChSVEVfU0laRU9GX0ZJRUxE KHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJUlRFX1NJWkVPRl9GSUVM RChzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtLCBkYXRhKSwNCj4gKwkJIkluaGVyaXRl ZCB0eXBlIG1pc21hdGNoIik7DQo+ICtzdGF0aWNfYXNzZXJ0KG9mZnNldG9mKHN0cnVjdCBydGVf c3RhY2tfbGZfZWxlbSwgZGF0YSkgPT0NCj4gKwkJb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9zdGFja19w aWxlX2J1bGtfZWxlbSwgZGF0YSksDQo+ICsJCSJJbmhlcml0ZWQgdHlwZSBtaXNtYXRjaCIpOw0K PiArDQo+ICBzdHJ1Y3QgX19ydGVfYWxpZ25lZCgxNikgcnRlX3N0YWNrX2xmX2hlYWQgew0KPiAg CXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqdG9wOyAvKio8IFN0YWNrIHRvcCAqLw0KPiAgCXVp bnQ2NF90IGNudDsgLyoqPCBNb2RpZmljYXRpb24gY291bnRlciBmb3IgYXZvaWRpbmcgQUJBIHBy b2JsZW0gKi8NCj4gQEAgLTUxLDEyICs4OCwzNiBAQCBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xpc3Qg ew0KPiAgc3RydWN0IHJ0ZV9zdGFja19sZiB7DQo+ICAJLyoqIExJRk8gbGlzdCBvZiBlbGVtZW50 cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0ZV9zdGFja19s Zl9saXN0IHVzZWQ7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0KPiAgCS8qKiBMSUZPIGxpc3Qgb2Yg ZnJlZSBlbGVtZW50cyAqLw0KPiAgCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0 IHJ0ZV9zdGFja19sZl9saXN0IGZyZWU7DQo+ICsJUlRFX0NBQ0hFX0dVQVJEOw0KPiAgCS8qKiBM SUZPIGVsZW1lbnRzICovDQo+ICAJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3Qg cnRlX3N0YWNrX2xmX2VsZW0gZWxlbXNbXTsNCj4gIH07DQo+IA0KPiArLyogUGlsZSBzdHJ1Y3R1 cmUgY29udGFpbmluZyB0aHJlZSBsb2NrLWZyZWUgTElGTy1saWtlIGxpc3RzOg0KPiArICogIC0g QSBsaXN0IG9mIGVsZW1lbnRzLCBlYWNoIGVsZW1lbnQgaG9sZGluZyBhIGJ1bGsgb2YgcG9pbnRl cnMgdG8gb2JqZWN0cy4NCj4gKyAqICAtIEEgbGlzdCBvZiBlbGVtZW50cywgZWFjaCBlbGVtZW50 IGhvbGRpbmcgb25lIHBvaW50ZXIgdG8gYW4gb2JqZWN0Lg0KPiArICogIC0gQSBsaXN0IG9mIGZy ZWUgbGlua2VkLWxpc3QgZWxlbWVudHMuDQo+ICsgKi8NCj4gK3N0cnVjdCBydGVfc3RhY2tfcGls ZSB7DQo+ICsJLyoqIExJRk8gbGlzdCBvZiBidWxrIChtdWx0aS1vYmplY3QpIGVsZW1lbnRzICov DQo+ICsJYWxpZ25hcyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xp c3QgYnVsazsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICsJLyoqIExJRk8gbGlzdCBvZiBzb2xv IChzaW5nbGUtb2JqZWN0KSBlbGVtZW50cyAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVf U0laRSkgc3RydWN0IHJ0ZV9zdGFja19sZl9saXN0IHNvbG87DQo+ICsJUlRFX0NBQ0hFX0dVQVJE Ow0KPiArCS8qKiBMSUZPIGxpc3Qgb2YgZnJlZSBidWxrIGVsZW1lbnRzICovDQo+ICsJYWxpZ25h cyhSVEVfQ0FDSEVfTElORV9TSVpFKSBzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xpc3QgZnJlZV9idWxr Ow0KPiArCVJURV9DQUNIRV9HVUFSRDsNCj4gKwkvKiogTElGTyBsaXN0IG9mIGZyZWUgc29sbyBl bGVtZW50cyAqLw0KPiArCWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgc3RydWN0IHJ0ZV9z dGFja19sZl9saXN0IGZyZWVfc29sbzsNCj4gKwlSVEVfQ0FDSEVfR1VBUkQ7DQo+ICsJLyoqIExJ Rk8gZWxlbWVudHMgZm9sbG93LCBmaXJzdCBidWxrLCB0aGVuIHNvbG8gKi8NCj4gKwlhbGlnbmFz KFJURV9DQUNIRV9MSU5FX1NJWkUpIHZvaWQgKmVsZW1zW107DQo+ICt9Ow0KPiArDQo+ICAvKiBT dHJ1Y3R1cmUgY29udGFpbmluZyB0aGUgTElGTywgaXRzIGN1cnJlbnQgbGVuZ3RoLCBhbmQgYSBs b2NrIGZvciBtdXR1YWwNCj4gICAqIGV4Y2x1c2lvbi4NCj4gICAqLw0KPiBAQCAtNzgsNiArMTM5 LDcgQEAgc3RydWN0IF9fcnRlX2NhY2hlX2FsaWduZWQgcnRlX3N0YWNrIHsNCj4gIAl1aW50MzJf dCBmbGFnczsgLyoqPCBGbGFncyBzdXBwbGllZCBhdCBjcmVhdGlvbi4gKi8NCj4gIAl1bmlvbiB7 DQo+ICAJCXN0cnVjdCBydGVfc3RhY2tfbGYgc3RhY2tfbGY7IC8qKjwgTG9jay1mcmVlIExJRk8g c3RydWN0dXJlLiAqLw0KPiArCQlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGUgc3RhY2tfcGlsZTsgLyoq PCBMb2NrLWZyZWUgcGlsZSAoTElGTy1saWtlKQ0KPiBzdHJ1Y3R1cmUuICovDQo+ICAJCXN0cnVj dCBydGVfc3RhY2tfc3RkIHN0YWNrX3N0ZDsJLyoqPCBMSUZPIHN0cnVjdHVyZS4gKi8NCj4gIAl9 Ow0KPiAgfTsNCj4gQEAgLTg4LDggKzE1MCwxOSBAQCBzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25l ZCBydGVfc3RhY2sgew0KPiAgICovDQo+ICAjZGVmaW5lIFJURV9TVEFDS19GX0xGIDB4MDAwMQ0K PiANCj4gKy8qKg0KPiArICogVGhlIHN0YWNrLWxpa2UgcGlsZSB1c2VzIGxvY2stZnJlZSBwdXNo IGFuZCBwb3AgZnVuY3Rpb25zLg0KPiArICogSXQgaXMgb3B0aW1pemVkIGZvciBidWxrcyBvZiBv YmplY3RzLCBhbmQgaXMgbm90IHN0cmljdGx5IExJRk8uDQo+ICsgKiBUaGlzIGZsYWcgaXMgb25s eSBzdXBwb3J0ZWQgb24geDg2XzY0IG9yIGFybTY0IHBsYXRmb3JtcywgY3VycmVudGx5Lg0KPiAr ICoNCj4gKyAqIEB3YXJuaW5nDQo+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBj aGFuZ2UsIG9yIGJlIHJlbW92ZWQsIHdpdGhvdXQgcHJpb3INCj4gbm90aWNlLg0KPiArICovDQo+ ICsjZGVmaW5lIFJURV9TVEFDS19GX1BJTEUgMHgwMDAyDQo+ICsNCj4gICNpbmNsdWRlICJydGVf c3RhY2tfc3RkLmgiDQo+ICAjaW5jbHVkZSAicnRlX3N0YWNrX2xmLmgiDQo+ICsjaW5jbHVkZSAi cnRlX3N0YWNrX3BpbGUuaCINCj4gDQo+ICAjaWZkZWYgX19jcGx1c3BsdXMNCj4gIGV4dGVybiAi QyIgew0KPiBAQCAtMTE1LDYgKzE4OCw4IEBAIHJ0ZV9zdGFja19wdXNoKHN0cnVjdCBydGVfc3Rh Y2sgKnMsIHZvaWQgKiBjb25zdA0KPiAqb2JqX3RhYmxlLCB1bnNpZ25lZCBpbnQgbikNCj4gDQo+ ICAJaWYgKHMtPmZsYWdzICYgUlRFX1NUQUNLX0ZfTEYpDQo+ICAJCXJldHVybiBfX3J0ZV9zdGFj a19sZl9wdXNoKHMsIG9ial90YWJsZSwgbik7DQo+ICsJZWxzZSBpZiAocy0+ZmxhZ3MgJiBSVEVf U1RBQ0tfRl9QSUxFKQ0KPiArCQlyZXR1cm4gX19ydGVfc3RhY2tfcGlsZV9wdXNoKHMsIG9ial90 YWJsZSwgbik7DQoNCkkgdW5kZXJzdGFuZCB0aGF0IHlvdSBmb2xsb3dlZCB0aGUgY29tbW9uIHBh dHRlcm4sIGJ1dCBtaWdodCBiZQ0KY29uc2lkZXIgcHV0dGluZyBydGVfc2Nha19waWxlLSogZnVu Y2lvbnMgaW50byAuYz8NCnBpbGUgcHVzaC9wb3AgZnVuY3Rpb25zIGFyZSBxdWl0ZSBiaWcgYW5k IGhlYXZpbHkgYnJhbmNoZWQsIGRvDQp3ZSByZWFsbHkgd2FudCBhbGwgdGhhdCBjb2RlIHRvIGJl IGFsd2F5cyBpbmxpbmVkIGZvciBhbnkgc3RhY2sgcHVzaHMvcG9wcz8NCkFnYWluLCB3ZSBjYW4g c3RpbGwga2VlcCBpbmxuZWQgdmVyc2lvbiBpbiBpbnRlcm5hbCBoZWFkZXIgZm9yIG1lbXBvb2wg ZHJpdmVyIHVzYWdlLiAgDQoNCj4gIAllbHNlDQo+ICAJCXJldHVybiBfX3J0ZV9zdGFja19zdGRf cHVzaChzLCBvYmpfdGFibGUsIG4pOw0KPiAgfQ0KPiBAQCAtMTM5LDYgKzIxNCw4IEBAIHJ0ZV9z dGFja19wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9pZCAqKm9ial90YWJsZSwNCj4gdW5zaWdu ZWQgaW50IG4pDQo+IA0KPiAgCWlmIChzLT5mbGFncyAmIFJURV9TVEFDS19GX0xGKQ0KPiAgCQly ZXR1cm4gX19ydGVfc3RhY2tfbGZfcG9wKHMsIG9ial90YWJsZSwgbik7DQo+ICsJZWxzZSBpZiAo cy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKQ0KPiArCQlyZXR1cm4gX19ydGVfc3RhY2tfcGls ZV9wb3Aocywgb2JqX3RhYmxlLCBuKTsNCj4gIAllbHNlDQo+ICAJCXJldHVybiBfX3J0ZV9zdGFj a19zdGRfcG9wKHMsIG9ial90YWJsZSwgbik7DQo+ICB9DQo+IEBAIC0xNTgsNiArMjM1LDggQEAg cnRlX3N0YWNrX2NvdW50KHN0cnVjdCBydGVfc3RhY2sgKnMpDQo+IA0KPiAgCWlmIChzLT5mbGFn cyAmIFJURV9TVEFDS19GX0xGKQ0KPiAgCQlyZXR1cm4gX19ydGVfc3RhY2tfbGZfY291bnQocyk7 DQo+ICsJZWxzZSBpZiAocy0+ZmxhZ3MgJiBSVEVfU1RBQ0tfRl9QSUxFKQ0KPiArCQlyZXR1cm4g X19ydGVfc3RhY2tfcGlsZV9jb3VudChzKTsNCj4gIAllbHNlDQo+ICAJCXJldHVybiBfX3J0ZV9z dGFja19zdGRfY291bnQocyk7DQo+ICB9DQo+IGRpZmYgLS1naXQgYS9saWIvc3RhY2svcnRlX3N0 YWNrX2xmLmggYi9saWIvc3RhY2svcnRlX3N0YWNrX2xmLmgNCj4gaW5kZXggZjJiMDEyY2QwZS4u MWVlOTMzMGM1NyAxMDA2NDQNCj4gLS0tIGEvbGliL3N0YWNrL3J0ZV9zdGFja19sZi5oDQo+ICsr KyBiL2xpYi9zdGFjay9ydGVfc3RhY2tfbGYuaA0KPiBAQCAtNzksNiArNzksNyBAQCBfX3J0ZV9z dGFja19sZl9wb3Aoc3RydWN0IHJ0ZV9zdGFjayAqcywgdm9pZCAqKm9ial90YWJsZSwNCj4gdW5z aWduZWQgaW50IG4pDQo+ICAJCXJldHVybiAwOw0KPiANCj4gIAkvKiBQb3AgbiB1c2VkIGVsZW1l bnRzICovDQo+ICsJX19ydGVfYXNzdW1lKG9ial90YWJsZSAhPSBOVUxMKTsNCj4gIAlmaXJzdCA9 IF9fcnRlX3N0YWNrX2xmX3BvcF9lbGVtcygmcy0+c3RhY2tfbGYudXNlZCwNCj4gIAkJCQkJIG4s IG9ial90YWJsZSwgJmxhc3QpOw0KPiAgCWlmICh1bmxpa2VseShmaXJzdCA9PSBOVUxMKSkNCj4g ZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5jIGIvbGliL3N0YWNrL3J0ZV9z dGFja19waWxlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMC4u NTg4NDE2MzMxMw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9zdGFjay9ydGVfc3RhY2tf cGlsZS5jDQo+IEBAIC0wLDAgKzEsMzUgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVy OiBCU0QtMy1DbGF1c2UNCj4gKyAqIENvcHlyaWdodChjKSAyMDI2IFNtYXJ0U2hhcmUgU3lzdGVt cw0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlICJydGVfc3RhY2suaCINCj4gKw0KPiArdm9pZA0K PiArcnRlX3N0YWNrX3BpbGVfaW5pdChzdHJ1Y3QgcnRlX3N0YWNrICpzLCB1bnNpZ25lZCBpbnQg Y291bnQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGJ1bGsgPSAoY291bnQgKyBSVEVfU1RBQ0tf UElMRV9CVUxLX1NJWkUgLSAxKSAvDQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsNCj4gKwlz dHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICpidWxrX2VsZW1zID0NCj4gKwkJCShzdHJ1 Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICopKHMtPnN0YWNrX3BpbGUuZWxlbXMpOw0KPiAr CXN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqc29sb19lbGVtcyA9IChzdHJ1Y3QgcnRlX3N0YWNr X2xmX2VsZW0NCj4gKikmYnVsa19lbGVtc1tidWxrXTsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCBidWxrOyBpKyspDQo+ICsJCV9fcnRlX3N0YWNrX3BpbGVf YnVsa19wdXNoX2VsZW1zKCZzLT5zdGFja19waWxlLmZyZWVfYnVsaywNCj4gKwkJCQkJICAmYnVs a19lbGVtc1tpXSwgJmJ1bGtfZWxlbXNbaV0sIDEpOw0KPiArCWZvciAoaSA9IDA7IGkgPCBjb3Vu dDsgaSsrKQ0KPiArCQlfX3J0ZV9zdGFja19sZl9wdXNoX2VsZW1zKCZzLT5zdGFja19waWxlLmZy ZWVfc29sbywNCj4gKwkJCQkJICAmc29sb19lbGVtc1tpXSwgJnNvbG9fZWxlbXNbaV0sIDEpOw0K PiArfQ0KPiArDQo+ICtzc2l6ZV90DQo+ICtydGVfc3RhY2tfcGlsZV9nZXRfbWVtc2l6ZSh1bnNp Z25lZCBpbnQgY291bnQpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGJ1bGsgPSAoY291bnQgKyBS VEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSAxKSAvDQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0la RTsNCj4gKwlzc2l6ZV90IHN6ID0gb2Zmc2V0b2Yoc3RydWN0IHJ0ZV9zdGFjaywgc3RhY2tfcGls ZS5lbGVtcyk7DQo+ICsJc3ogKz0gYnVsayAqIHNpemVvZihzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVf YnVsa19lbGVtKTsNCj4gKwlzeiArPSBjb3VudCAqIHNpemVvZihzdHJ1Y3QgcnRlX3N0YWNrX2xm X2VsZW0pOw0KPiArCXN6ID0gUlRFX0NBQ0hFX0xJTkVfUk9VTkRVUChzeik7DQo+ICsJc3ogKz0g UlRFX0NBQ0hFX0dVQVJEX0xJTkVTICogUlRFX0NBQ0hFX0xJTkVfU0laRTsNCj4gKw0KPiArCXJl dHVybiBzejsNCj4gK30NCj4gZGlmZiAtLWdpdCBhL2xpYi9zdGFjay9ydGVfc3RhY2tfcGlsZS5o IGIvbGliL3N0YWNrL3J0ZV9zdGFja19waWxlLmgNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4g aW5kZXggMDAwMDAwMDAwMC4uYjc0NzQzNGYzYg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xp Yi9zdGFjay9ydGVfc3RhY2tfcGlsZS5oDQo+IEBAIC0wLDAgKzEsMzM0IEBADQo+ICsvKiBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAy NiBTbWFydFNoYXJlIFN5c3RlbXMNCj4gKyAqLw0KPiArDQo+ICsjaWZuZGVmIF9SVEVfU1RBQ0tf UElMRV9IXw0KPiArI2RlZmluZSBfUlRFX1NUQUNLX1BJTEVfSF8NCj4gKw0KPiArI2luY2x1ZGUg PHJ0ZV9tZW1jcHkuaD4NCj4gKw0KPiArI2luY2x1ZGUgInJ0ZV9zdGFja19sZi5oIg0KPiArI2lm ZGVmIFJURV9TVEFDS19MRl9TVVBQT1JURUQNCj4gKy8qKg0KPiArICogSW5kaWNhdGVzIHRoYXQg UlRFX1NUQUNLX0ZfUElMRSBpcyBzdXBwb3J0ZWQuDQo+ICsgKi8NCj4gKyNkZWZpbmUgUlRFX1NU QUNLX1BJTEVfU1VQUE9SVEVEDQo+ICsjZW5kaWYNCj4gKw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5 c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ICtfX3J0ZV9zdGFja19waWxlX2NvdW50KHN0cnVjdCBy dGVfc3RhY2sgKnMpDQo+ICt7DQo+ICsJLyogc3RhY2tfbGZfcHVzaCgpIGFuZCBzdGFja19sZl9w b3AoKSBkbyBub3QgdXBkYXRlIHRoZSBsaXN0J3MgY29udGVudHMNCj4gKwkgKiBhbmQgc3RhY2tf bGYtPmxlbiBhdG9taWNhbGx5LCB3aGljaCBjYW4gY2F1c2UgdGhlIGxpc3QgdG8gYXBwZWFyDQo+ ICsJICogc2hvcnRlciB0aGFuIGl0IGFjdHVhbGx5IGlzIGlmIHRoaXMgZnVuY3Rpb24gaXMgY2Fs bGVkIHdoaWxlIG90aGVyDQo+ICsJICogdGhyZWFkcyBhcmUgbW9kaWZ5aW5nIHRoZSBsaXN0Lg0K PiArCSAqDQo+ICsJICogSG93ZXZlciwgZ2l2ZW4gdGhlIGluaGVyZW50bHkgYXBwcm94aW1hdGUg bmF0dXJlIG9mIHRoZSBnZXRfY291bnQNCj4gKwkgKiBjYWxsYmFjayAtLSBldmVuIGlmIHRoZSBs aXN0IGFuZCBpdHMgc2l6ZSB3ZXJlIHVwZGF0ZWQgYXRvbWljYWxseSwNCj4gKwkgKiB0aGUgc2l6 ZSBjb3VsZCBjaGFuZ2UgYmV0d2VlbiB3aGVuIGdldF9jb3VudCBleGVjdXRlcyBhbmQgd2hlbg0K PiB0aGUNCj4gKwkgKiB2YWx1ZSBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGVyIC0tIHRoaXMgaXMg YWNjZXB0YWJsZS4NCj4gKwkgKg0KPiArCSAqIFRoZSBzdGFja19sZi0+bGVuIHVwZGF0ZXMgYXJl IHBsYWNlZCBzdWNoIHRoYXQgdGhlIGxpc3QgbWF5IGFwcGVhciB0bw0KPiArCSAqIGhhdmUgZmV3 ZXIgZWxlbWVudHMgdGhhbiBpdCBkb2VzLCBidXQgd2lsbCBuZXZlciBhcHBlYXIgdG8gaGF2ZSBt b3JlDQo+ICsJICogZWxlbWVudHMuIElmIHRoZSBtZW1wb29sIGlzIG5lYXItZW1wdHkgdG8gdGhl IHBvaW50IHRoYXQgdGhpcyBpcyBhDQo+ICsJICogY29uY2VybiwgdGhlIHVzZXIgc2hvdWxkIGNv bnNpZGVyIGluY3JlYXNpbmcgdGhlIG1lbXBvb2wgc2l6ZS4NCj4gKwkgKi8NCj4gKyNpZmRlZiBS VEVfVVNFX0MxMV9NRU1fTU9ERUwNCj4gKwlyZXR1cm4gUlRFX01JTigodW5zaWduZWQgaW50KXMt PmNhcGFjaXR5LA0KPiArCQkJKHVuc2lnbmVkIGludClydGVfYXRvbWljX2xvYWRfZXhwbGljaXQo JnMtDQo+ID5zdGFja19waWxlLmJ1bGsubGVuLA0KPiArCQkJcnRlX21lbW9yeV9vcmRlcl9yZWxh eGVkKSAqDQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSArDQo+ICsJCQkodW5zaWduZWQgaW50 KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0YWNrX3BpbGUuc29sby5sZW4sDQo+ ICsJCQlydGVfbWVtb3J5X29yZGVyX3JlbGF4ZWQpKTsNCj4gKyNlbHNlIC8qIEZJWE1FOiBSZW1v dmUgaWYgcmVtb3ZlZCBmcm9tIGxvY2stZnJlZSBzdGFjay4gKi8NCj4gKwkvKiBOT1RFOiByZXZp ZXcgZm9yIHBvdGVudGlhbCBvcmRlcmluZyBvcHRpbWl6YXRpb24gKi8NCj4gKwlyZXR1cm4gUlRF X01JTigodW5zaWduZWQgaW50KXMtPmNhcGFjaXR5LA0KPiArCQkJKHVuc2lnbmVkIGludClydGVf YXRvbWljX2xvYWRfZXhwbGljaXQoJnMtDQo+ID5zdGFja19waWxlLmJ1bGsubGVuLA0KPiArCQkJ cnRlX21lbW9yeV9vcmRlcl9zZXFfY3N0KSAqDQo+IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSAr DQo+ICsJCQkodW5zaWduZWQgaW50KXJ0ZV9hdG9taWNfbG9hZF9leHBsaWNpdCgmcy0NCj4gPnN0 YWNrX3BpbGUuc29sby5sZW4sDQo+ICsJCQlydGVfbWVtb3J5X29yZGVyX3NlcV9jc3QpKTsNCj4g KyNlbmRpZg0KPiArfQ0KPiArDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ ICtfX3J0ZV9zdGFja19waWxlX2J1bGtfcHVzaF9lbGVtcyhzdHJ1Y3QgcnRlX3N0YWNrX2xmX2xp c3QgKmxpc3QsDQo+ICsJCXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmZpcnN0LA0K PiArCQlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICpsYXN0LA0KPiArCQl1bnNpZ25l ZCBpbnQgbnVtKQ0KPiArew0KPiArCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMobGlzdCwNCj4g KwkJKHN0cnVjdCBydGVfc3RhY2tfbGZfZWxlbSAqKWZpcnN0LA0KPiArCQkoc3RydWN0IHJ0ZV9z dGFja19sZl9lbGVtICopbGFzdCwNCj4gKwkJbnVtKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUgc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqDQo+ICtf X3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKHN0cnVjdCBydGVfc3RhY2tfbGZfbGlzdCAq bGlzdCwNCj4gKwkJdW5zaWduZWQgaW50IG51bSwNCj4gKwkJdm9pZCAqKm9ial90YWJsZSwNCj4g KwkJc3RydWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqKmxhc3QpDQo+ICt7DQo+ICsJc3Ry dWN0IHJ0ZV9zdGFja19waWxlX2J1bGtfZWxlbSAqZmlyc3QgPSAoc3RydWN0IHJ0ZV9zdGFja19w aWxlX2J1bGtfZWxlbQ0KPiAqKQ0KPiArCQkJX19ydGVfc3RhY2tfbGZfcG9wX2VsZW1zKGxpc3Qs IG51bSwgTlVMTCwNCj4gKwkJCShzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0gKiopbGFzdCk7DQo+ ICsJaWYgKGZpcnN0ID09IE5VTEwpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJaWYgKG9i al90YWJsZSAhPSBOVUxMKSB7DQo+ICsJCS8qDQo+ICsJCSAqIFRyYXZlcnNlIHRoZSBsaXN0IHRv IGNvcHkgdGhlIGJ1bGtzLg0KPiArCQkgKiBOb3RlOg0KPiArCQkgKiBEb25lIGhlcmUgdG8gbWlu aW1pemUgdGhlIHRpbWUgc3BlbnQgaW4gdGhlIHJldHJ5IGxvb3AgaW4NCj4gKwkJICogX19ydGVf c3RhY2tfbGZfcG9wX2VsZW1zKCksDQo+ICsJCSAqIGFuZCB0byBhdm9pZCBtb2RpZnlpbmcgX19y dGVfc3RhY2tfbGZfcG9wX2VsZW1zKCkuDQo+ICsJCSAqLw0KPiArCQlzdHJ1Y3QgcnRlX3N0YWNr X3BpbGVfYnVsa19lbGVtICp0bXAgPSBmaXJzdDsNCj4gKwkJZm9yICh1bnNpZ25lZCBpbnQgaSA9 IDA7IGkgPCBudW07IGkrKywgdG1wID0gdG1wLT5uZXh0KQ0KPiArCQkJcnRlX21lbWNweSgmb2Jq X3RhYmxlW2kgKiBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkVdLA0KPiB0bXAtPm9ianMsDQo+ICsJ CQkJCXNpemVvZih2b2lkICopICoNCj4gUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFKTsNCj4gKwl9 DQo+ICsNCj4gKwlyZXR1cm4gZmlyc3Q7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogUHVzaCBz ZXZlcmFsIG9iamVjdHMgb24gdGhlIHBpbGUgKGxvY2stZnJlZSwgTVQtc2FmZSkuDQo+ICsgKg0K PiArICogQHBhcmFtIHMNCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBwaWxlIHN0cnVjdHVyZS4N Cj4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Yg dm9pZCAqIHBvaW50ZXJzIChvYmplY3RzKS4NCj4gKyAqIEBwYXJhbSBuDQo+ICsgKiAgIFRoZSBu dW1iZXIgb2Ygb2JqZWN0cyB0byBwdXNoIG9uIHRoZSBwaWxlIGZyb20gdGhlIG9ial90YWJsZS4N Cj4gKyAqIEByZXR1cm4NCj4gKyAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIHB1c2hlZCAo ZWl0aGVyIDAgb3IgKm4qKS4NCj4gKyAqLw0KPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUg dW5zaWduZWQgaW50DQo+ICtfX3J0ZV9zdGFja19waWxlX3B1c2goc3RydWN0IHJ0ZV9zdGFjayAq cywNCj4gKwkJdm9pZCAqIGNvbnN0ICpvYmpfdGFibGUsDQo+ICsJCXVuc2lnbmVkIGludCBuKQ0K PiArew0KPiArCVJURV9BU1NFUlQocyAhPSBOVUxMKTsNCj4gKwlSVEVfQVNTRVJUKG9ial90YWJs ZSAhPSBOVUxMKTsNCj4gKw0KPiArCXN0cnVjdCBydGVfc3RhY2tfcGlsZSAqcGlsZSA9ICZzLT5z dGFja19waWxlOw0KPiArCXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmJ1bGtfZmly c3QgPSBOVUxMLCAqYnVsa19sYXN0ID0gTlVMTCwNCj4gKnRtcF9idWxrOw0KPiArCXN0cnVjdCBy dGVfc3RhY2tfbGZfZWxlbSAqc29sb19maXJzdCA9IE5VTEwsICpzb2xvX2xhc3QgPSBOVUxMLA0K PiAqdG1wX3NvbG87DQo+ICsJdW5zaWduZWQgaW50IG5fYnVsayA9IG4gLyBSVEVfU1RBQ0tfUElM RV9CVUxLX1NJWkU7DQo+ICsJdW5zaWduZWQgaW50IG5fc29sbyA9IG4gJiAoUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFIC0gMSk7DQo+ICsJdW5zaWduZWQgaW50IGk7DQo+ICsNCj4gKwlpZiAodW5s aWtlbHkobl9idWxrID09IDApKSB7DQo+ICsJCWlmICh1bmxpa2VseShuX3NvbG8gPT0gMCkpDQo+ ICsJCQlyZXR1cm4gMDsNCj4gKwkJZ290byBzb2xvOw0KPiArCX0NCj4gKw0KPiArCS8qIEFsbG9j YXRlIG5fYnVsayBlbGVtZW50cyBmcm9tIHRoZSBmcmVlIGxpc3QuICovDQo+ICsJYnVsa19maXJz dCA9IF9fcnRlX3N0YWNrX3BpbGVfYnVsa19wb3BfZWxlbXMoJnBpbGUtPmZyZWVfYnVsaywgbl9i dWxrLA0KPiBOVUxMLCAmYnVsa19sYXN0KTsNCj4gKwlpZiAodW5saWtlbHkoYnVsa19maXJzdCA9 PSBOVUxMKSkNCj4gKwkJcmV0dXJuIDA7IC8qIEZhaWxlZC4gKi8NCj4gKw0KPiArCWlmIChsaWtl bHkobl9zb2xvID09IDApKQ0KPiArCQlnb3RvIGJ1bGs7DQo+ICsNCj4gK3NvbG86DQo+ICsJLyog QWxsb2NhdGUgbl9zb2xvIGVsZW1lbnRzIGZyb20gdGhlIGZyZWUgbGlzdC4gKi8NCj4gKwlzb2xv X2ZpcnN0ID0gX19ydGVfc3RhY2tfbGZfcG9wX2VsZW1zKCZwaWxlLT5mcmVlX3NvbG8sIG5fc29s bywgTlVMTCwNCj4gJnNvbG9fbGFzdCk7DQo+ICsJaWYgKHVubGlrZWx5KHNvbG9fZmlyc3QgPT0g TlVMTCkpIHsNCj4gKwkJLyogRmFpbGVkLiBSb2xsIGJhY2suICovDQo+ICsJCWlmIChuX2J1bGsg PiAwKQ0KPiArCQkJX19ydGVfc3RhY2tfcGlsZV9idWxrX3B1c2hfZWxlbXMoJnBpbGUtPmZyZWVf YnVsaywNCj4gKwkJCQkJYnVsa19maXJzdCwgYnVsa19sYXN0LCBuX2J1bGspOw0KPiArCQlyZXR1 cm4gMDsNCj4gKwl9DQo+ICsNCj4gKwkvKg0KPiArCSAqIENvbnN0cnVjdCB0aGUgc29sbyBlbGVt ZW50cy4NCj4gKwkgKiBDb3B5IG9iamVjdHMgaW4gcmV2ZXJzZSBvcmRlci4NCj4gKwkgKi8NCj4g Kwl0bXBfc29sbyA9IHNvbG9fZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA+IDApOw0K PiArCV9fcnRlX2Fzc3VtZShuX3NvbG8gPCBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpOw0KPiAr CWZvciAoaSA9IDA7IGkgPCBuX3NvbG87IGkrKywgdG1wX3NvbG8gPSB0bXBfc29sby0+bmV4dCkN Cj4gKwkJdG1wX3NvbG8tPmRhdGEgPSBvYmpfdGFibGVbbl9idWxrICogUlRFX1NUQUNLX1BJTEVf QlVMS19TSVpFDQo+ICsgbl9zb2xvIC0gaSAtIDFdOw0KPiArDQo+ICsJLyogUHVzaCB0aGVtIHRv IHRoZSBzb2xvIGxpc3QuICovDQo+ICsJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+ c29sbywgc29sb19maXJzdCwgc29sb19sYXN0LCBuX3NvbG8pOw0KPiArDQo+ICsJaWYgKHVubGlr ZWx5KG5fYnVsayA9PSAwKSkNCj4gKwkJcmV0dXJuIG47IC8qIERvbmUuICovDQo+ICsNCj4gK2J1 bGs6DQo+ICsJLyoNCj4gKwkgKiBDb25zdHJ1Y3QgdGhlIGJ1bGsgZWxlbWVudHMuDQo+ICsJICog Q29weSBidWxrcyBpbiByZXZlcnNlIG9yZGVyLCBidXQgaWdub3JlIHRoZSBvYmplY3Qgb3JkZXIg d2l0aGluIGVhY2gNCj4gYnVsay4NCj4gKwkgKi8NCj4gKwl0bXBfYnVsayA9IGJ1bGtfZmlyc3Q7 DQo+ICsJX19ydGVfYXNzdW1lKG5fYnVsayA+IDApOw0KPiArCWZvciAoaSA9IDA7IGkgPCBuX2J1 bGs7IGkrKywgdG1wX2J1bGsgPSB0bXBfYnVsay0+bmV4dCkNCj4gKwkJcnRlX21lbWNweSh0bXBf YnVsay0+b2JqcywgJm9ial90YWJsZVsobl9idWxrIC0gaSAtIDEpICoNCj4gUlRFX1NUQUNLX1BJ TEVfQlVMS19TSVpFXSwNCj4gKwkJCQlzaXplb2Yodm9pZCAqKSAqIFJURV9TVEFDS19QSUxFX0JV TEtfU0laRSk7DQo+ICsNCj4gKwkvKiBQdXNoIHRoZW0gdG8gdGhlIGJ1bGsgbGlzdC4gKi8NCj4g KwlfX3J0ZV9zdGFja19waWxlX2J1bGtfcHVzaF9lbGVtcygmcGlsZS0+YnVsaywgYnVsa19maXJz dCwgYnVsa19sYXN0LA0KPiBuX2J1bGspOw0KPiArDQo+ICsJcmV0dXJuIG47DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICogUG9wIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBwaWxlIChsb2NrLWZy ZWUsIE1ULXNhZmUpLg0KPiArICoNCj4gKyAqIEBwYXJhbSBzDQo+ICsgKiAgIEEgcG9pbnRlciB0 byB0aGUgcGlsZSBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ICsgKiAgIEEg cG9pbnRlciB0byBhIHRhYmxlIG9mIHZvaWQgKiBwb2ludGVycyAob2JqZWN0cykuDQo+ICsgKiBA cGFyYW0gbg0KPiArICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSBw aWxlLg0KPiArICogQHJldHVybg0KPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgcG9w cGVkIChlaXRoZXIgMCBvciAqbiopLg0KPiArICovDQo+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB1bnNpZ25lZCBpbnQNCj4gK19fcnRlX3N0YWNrX3BpbGVfcG9wKHN0cnVjdCBydGVfc3Rh Y2sgKnMsDQo+ICsJCXZvaWQgKipvYmpfdGFibGUsDQo+ICsJCXVuc2lnbmVkIGludCBuKQ0KPiAr ew0KPiArCVJURV9BU1NFUlQocyAhPSBOVUxMKTsNCj4gKwlSVEVfQVNTRVJUKG9ial90YWJsZSAh PSBOVUxMKTsNCj4gKw0KPiArCXN0cnVjdCBydGVfc3RhY2tfcGlsZSAqcGlsZSA9ICZzLT5zdGFj a19waWxlOw0KPiArCXN0cnVjdCBydGVfc3RhY2tfcGlsZV9idWxrX2VsZW0gKmJ1bGtfZmlyc3Qg PSBOVUxMLCAqYnVsa19sYXN0ID0gTlVMTDsNCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX2xmX2VsZW0g KnNvbG9fZmlyc3QgPSBOVUxMLCAqc29sb19sYXN0ID0gTlVMTCwNCj4gKnRtcF9zb2xvOw0KPiAr CWFsaWduYXMoUlRFX0NBQ0hFX0xJTkVfU0laRSkgdm9pZA0KPiAqb2JqX2ZyYWdbUlRFX1NUQUNL X1BJTEVfQlVMS19TSVpFXTsNCj4gKwlzdHJ1Y3QgcnRlX3N0YWNrX3BpbGVfYnVsa19lbGVtICpm cmFnID0gTlVMTDsNCj4gKwl1bnNpZ25lZCBpbnQgbl9idWxrID0gbiAvIFJURV9TVEFDS19QSUxF X0JVTEtfU0laRTsNCj4gKwl1bnNpZ25lZCBpbnQgbl9zb2xvID0gbiAmIChSVEVfU1RBQ0tfUElM RV9CVUxLX1NJWkUgLSAxKTsNCj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gKw0KPiArCWlmICh1bmxp a2VseShuX2J1bGsgPT0gMCkpIHsNCj4gKwkJaWYgKHVubGlrZWx5KG5fc29sbyA9PSAwKSkNCj4g KwkJCXJldHVybiAwOw0KPiArCQlnb3RvIHNvbG87DQo+ICsJfQ0KPiArDQo+ICtidWxrOg0KPiAr CS8qIEZldGNoIG5fYnVsayAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSBvYmplY3RzIGFzIGJ1 bGsgZWxlbWVudHMuDQo+ICovDQo+ICsJYnVsa19maXJzdCA9IF9fcnRlX3N0YWNrX3BpbGVfYnVs a19wb3BfZWxlbXMoJnBpbGUtPmJ1bGssIG5fYnVsaywNCj4gb2JqX3RhYmxlLCAmYnVsa19sYXN0 KTsNCj4gKwlpZiAodW5saWtlbHkoYnVsa19maXJzdCA9PSBOVUxMKSkgew0KDQpUaGF0J3MgcXVp dGUgaGVhdnkgY29uc3RydWN0aW9uLi4uDQpJZiBpdCBmYWlsLCBtaWdodCBiZSBnbyBzdHJhaWdo dCB0byBzb2xvIGlzIGJldHRlcj8NCkFzIGFuIGFsdGVybmF0aXZlOiBpbnRyb2R1Y3Rpb24gX2J1 cnN0XyB2ZXJzaW9uIG9mIF9sZl9wb3BfZWxlbXMgLSBpdCB3b3VsZCByZWFsbHkgaGVscCBoZXJl Og0KYm90IGluIHRlcm1zIG9mIHBlcmZvcm1hbmNlIGFuZCBjb2RlIGNvbXBhY3Rpb24uDQogDQo+ ICsJCS8qDQo+ICsJCSAqIE5vdCBhdmFpbGFibGUuDQo+ICsJCSAqIFJldHJ5IHdpdGggZmV3ZXIg YnVsayBlbGVtZW50czsgb2JqZWN0cyB0byBiZSBmZXRjaGVkIGFzIHNvbG8NCj4gZWxlbWVudHMg aW5zdGVhZC4NCj4gKwkJICovDQo+ICsJCW5fc29sbyArPSBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJ WkU7DQo+ICsJCW5fYnVsay0tOw0KPiArCQlpZiAobl9idWxrID4gMCkNCj4gKwkJCWdvdG8gYnVs azsNCj4gKwkJZWxzZQ0KPiArCQkJZ290byBzb2xvOw0KPiArCX0NCj4gKw0KPiArCWlmIChsaWtl bHkobl9zb2xvID09IDApKQ0KPiArCQlnb3RvIGRvbmU7DQo+ICsNCj4gK3NvbG86DQo+ICsJLyog RmV0Y2ggbl9zb2xvIG9iamVjdHMgYXMgc29sbyBlbGVtZW50cy4gKi8NCj4gKwlzb2xvX2ZpcnN0 ID0gX19ydGVfc3RhY2tfbGZfcG9wX2VsZW1zKCZwaWxlLT5zb2xvLCBuX3NvbG8sDQo+ICsJCQkm b2JqX3RhYmxlW25fYnVsayAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRV0sDQo+ICZzb2xvX2xh c3QpOw0KPiArCWlmIChzb2xvX2ZpcnN0ICE9IE5VTEwpDQo+ICsJCWdvdG8gZG9uZTsNCj4gKw0K PiArCS8qIFNvbG8gZWxlbWVudHMgbm90IGF2YWlsYWJsZS4gVHJ5IGZyYWdtZW50YXRpb24uICov DQo+ICsJaWYgKHVubGlrZWx5KG5fc29sbyA+PSBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpKQ0K PiArCQlnb3RvIGZhaWw7IC8qIFJhbiBvdXQgb2YgYnVsayBlbGVtZW50cyBhYm92ZS4gRG9uJ3Qg dHJ5IHRvIGZldGNoDQo+IG9uZSBtb3JlLiAqLw0KPiArDQoNCkZyYWdtZW50YXRpb24gcHJvY2Vk dXJlIGlzIHF1aXRlIGJpZyBwaWVjZSBvZiBjb2RlLCBteSBzdWdnZXN0aW9uIHdvdWxkIGJlDQp0 byBwdXQgaXQgaW50byBzZXBhcmF0ZSBpbmxpbmUgaGVscGVyIGZ1bmN0aW9uIChmb3IgcmVhZGFi aWxpdHkgYW5kIGVhc2UgdG8gbWFpbnRhaW4pLg0KQXMgYSBnZW5lcmljIGNvbW1lbnQgLSB0aGVy ZSBhcmUgYSBsb3QgZm8gZ290b3MsIHByb2JhYmx5IHNvbWUgb2YgdGhlbSB1bmF2b2lkYWJsZSwN CmJ1dCBtYWtlcyBjb2RlIHJlYWxseSBoYXJkIHRvIGZvbGxvdywgcGxlYXNlIGNvbnNpZGVyIHNw bGl0dGluZyBiaWcgZnVuY3Rpb25zIGludG8NCnNtYWxsZXIgY2h1bmtzIHdoZW5ldmVyIHBvc3Np YmxlLiANCg0KPiArCS8qIEZldGNoIGEgZnJhZ21lbnRhdGlvbiBlbGVtZW50IGFzIGEgYnVsayBl bGVtZW50LiAqLw0KPiArCWZyYWcgPSBfX3J0ZV9zdGFja19waWxlX2J1bGtfcG9wX2VsZW1zKCZw aWxlLT5idWxrLCAxLCBvYmpfZnJhZywgTlVMTCk7DQo+ICsJaWYgKHVubGlrZWx5KGZyYWcgPT0g TlVMTCkpDQo+ICsJCWdvdG8gZmFpbDsNCj4gKw0KPiArCS8qIEdldCBuX3NvbG8gb2JqZWN0cyBm cm9tIHRoZSBmcmFnbWVudGF0aW9uIGVsZW1lbnQuICovDQo+ICsJX19ydGVfYXNzdW1lKG5fc29s byA+IDApOw0KPiArCV9fcnRlX2Fzc3VtZShuX3NvbG8gPCBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJ WkUpOw0KPiArCWZvciAoaSA9IDA7IGkgPCBuX3NvbG87IGkrKykNCj4gKwkJb2JqX3RhYmxlW25f YnVsayAqIFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSArIGldID0gb2JqX2ZyYWdbaV07DQo+ICsN Cj4gKwkvKiBGZXRjaCBmcmVlIGVsZW1lbnRzIGZvciB0aGUgZXhjZXNzIG9iamVjdHMuICovDQo+ ICsJX19ydGVfYXNzdW1lKFJURV9TVEFDS19QSUxFX0JVTEtfU0laRSAtIG5fc29sbyA+IDApOw0K PiArCV9fcnRlX2Fzc3VtZShSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUgLSBuX3NvbG8gPA0KPiBS VEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpOw0KPiArCXNvbG9fZmlyc3QgPSBfX3J0ZV9zdGFja19s Zl9wb3BfZWxlbXMoJnBpbGUtPmZyZWVfc29sbywNCj4gKwkJCVJURV9TVEFDS19QSUxFX0JVTEtf U0laRSAtIG5fc29sbywgTlVMTCwgJnNvbG9fbGFzdCk7DQo+ICsJaWYgKHVubGlrZWx5KHNvbG9f Zmlyc3QgPT0gTlVMTCkpDQo+ICsJCWdvdG8gZmFpbDsNCj4gKw0KPiArCS8qIENvbnN0cnVjdCB0 aGUgc29sbyBlbGVtZW50cyBmcm9tIHRoZSBleGNlc3Mgb2JqZWN0cy4gKi8NCj4gKwl0bXBfc29s byA9IHNvbG9fZmlyc3Q7DQo+ICsJX19ydGVfYXNzdW1lKG5fc29sbyA+IDApOw0KPiArCV9fcnRl X2Fzc3VtZShuX3NvbG8gPCBSVEVfU1RBQ0tfUElMRV9CVUxLX1NJWkUpOw0KPiArCWZvciAoaSA9 IG5fc29sbzsgaSA8IFJURV9TVEFDS19QSUxFX0JVTEtfU0laRTsgaSsrLCB0bXBfc29sbyA9IHRt cF9zb2xvLQ0KPiA+bmV4dCkNCj4gKwkJdG1wX3NvbG8tPmRhdGEgPSBvYmpfZnJhZ1tpXTsNCj4g Kw0KPiArCS8qIFB1c2ggdGhlIGV4Y2VzcyBvYmplY3RzIGFzIHNvbG8gZWxlbWVudHMuICovDQo+ ICsJX19ydGVfc3RhY2tfbGZfcHVzaF9lbGVtcygmcGlsZS0+c29sbywgc29sb19maXJzdCwgc29s b19sYXN0LA0KPiArCQkJUlRFX1NUQUNLX1BJTEVfQlVMS19TSVpFIC0gbl9zb2xvKTsNCj4gKwlu X3NvbG8gPSAwOw0KPiArDQo+ICsJLyogQWRkIHRoZSBmcmFnbWVudGF0aW9uIGVsZW1lbnQgdG8g dGhlIGJ1bGsgZWxlbWVudHMsIHNvIGl0IGNhbiBiZQ0KPiBmcmVlZCB3aXRoIHRoZW0uICovDQo+ ICsJaWYgKG5fYnVsayA+IDApDQo+ICsJCWJ1bGtfbGFzdC0+bmV4dCA9IGZyYWc7DQo+ICsJZWxz ZQ0KPiArCQlidWxrX2ZpcnN0ID0gZnJhZzsNCj4gKwlidWxrX2xhc3QgPSBmcmFnOw0KPiArCW5f YnVsaysrOw0KPiArDQo+ICtkb25lOg0KPiArCS8qIFN1Y2Nlc3MuIEZyZWUgdGhlIGVsZW1lbnRz LiAqLw0KPiArCWlmIChuX2J1bGsgPiAwKQ0KPiArCQlfX3J0ZV9zdGFja19waWxlX2J1bGtfcHVz aF9lbGVtcygmcGlsZS0+ZnJlZV9idWxrLCBidWxrX2ZpcnN0LA0KPiBidWxrX2xhc3QsIG5fYnVs ayk7DQo+ICsJaWYgKG5fc29sbyA+IDApDQo+ICsJCV9fcnRlX3N0YWNrX2xmX3B1c2hfZWxlbXMo JnBpbGUtPmZyZWVfc29sbywgc29sb19maXJzdCwNCj4gc29sb19sYXN0LCBuX3NvbG8pOw0KPiAr DQo+ICsJcmV0dXJuIG47DQo+ICsNCj4gK2ZhaWw6DQo+ICsJLyogRmFpbGVkLiBSb2xsIGJhY2su ICovDQo+ICsJaWYgKGZyYWcgIT0gTlVMTCkgew0KPiArCQkvKg0KPiArCQkgKiBObyBmdXJ0aGVy IGFjdGlvbiB0aGFuIHRoaXMgaXMgcmVxdWlyZWQgdG8gcm9sbCB0aGUNCj4gZnJhZ21lbnRhdGlv bg0KPiArCQkgKiBlbGVtZW50IGJhY2sgaW50byB0aGUgcGlsZSBvZiBidWxrIGVsZW1lbnRzLCBh cyB0aGUgb2JqZWN0cyBpbg0KPiArCQkgKiB0aGUgZnJhZ21lbnRhdGlvbiBlbGVtZW50IGFyZSBp bnRhY3QuDQo+ICsJCSAqLw0KPiArCQlpZiAobl9idWxrID4gMCkNCj4gKwkJCWJ1bGtfbGFzdC0+ bmV4dCA9IGZyYWc7DQo+ICsJCWVsc2UNCj4gKwkJCWJ1bGtfZmlyc3QgPSBmcmFnOw0KPiArCQli dWxrX2xhc3QgPSBmcmFnOw0KPiArCQluX2J1bGsgKz0gMTsNCj4gKwl9DQo+ICsJaWYgKG5fYnVs ayA+IDApDQo+ICsJCV9fcnRlX3N0YWNrX3BpbGVfYnVsa19wdXNoX2VsZW1zKCZwaWxlLT5idWxr LCBidWxrX2ZpcnN0LA0KPiBidWxrX2xhc3QsIG5fYnVsayk7DQo+ICsNCj4gKwlyZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBAaW50ZXJuYWwgSW5pdGlhbGl6ZSBhIHBpbGUgc3Rh Y2suDQo+ICsgKg0KPiArICogQHBhcmFtIHMNCj4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSBzdGFj ayBzdHJ1Y3R1cmUuDQo+ICsgKiBAcGFyYW0gY291bnQNCj4gKyAqICAgVGhlIHNpemUgb2YgdGhl IHN0YWNrLg0KPiArICovDQo+ICt2b2lkDQo+ICtydGVfc3RhY2tfcGlsZV9pbml0KHN0cnVjdCBy dGVfc3RhY2sgKnMsIHVuc2lnbmVkIGludCBjb3VudCk7DQo+ICsNCj4gKy8qKg0KPiArICogQGlu dGVybmFsIFJldHVybiB0aGUgbWVtb3J5IHJlcXVpcmVkIGZvciBhIHBpbGUgc3RhY2suDQo+ICsg Kg0KPiArICogQHBhcmFtIGNvdW50DQo+ICsgKiAgIFRoZSBzaXplIG9mIHRoZSBzdGFjay4NCj4g KyAqIEByZXR1cm4NCj4gKyAqICAgVGhlIGJ5dGVzIHRvIGFsbG9jYXRlIGZvciBhIHBpbGUgc3Rh Y2suDQo+ICsgKi8NCj4gK3NzaXplX3QNCj4gK3J0ZV9zdGFja19waWxlX2dldF9tZW1zaXplKHVu c2lnbmVkIGludCBjb3VudCk7DQo+ICsNCj4gKyNlbmRpZiAvKiBfUlRFX1NUQUNLX1BJTEVfSF8g Ki8NCj4gLS0NCj4gMi40My4wDQoNCg==