From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH] drm/i915/execlists: Preempt-to-busy Date: Thu, 20 Jun 2019 15:41:26 +0300 Message-ID: <874l4k77k9.fsf@gaia.fi.intel.com> References: <20190620070559.30076-1-chris@chris-wilson.co.uk> <20190620082428.29524-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4C29C6E42D for ; Thu, 20 Jun 2019 12:41:38 +0000 (UTC) In-Reply-To: <20190620082428.29524-1-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gV2hlbiB1 c2luZyBhIGdsb2JhbCBzZXFubywgd2UgcmVxdWlyZWQgYSBwcmVjaXNlIHN0b3AtdGhlLXdvcmtk IGV2ZW50IHRvCj4gaGFuZGxlIHByZWVtcHRpb24gYW5kIHVud2luZCB0aGUgZ2xvYmFsIHNlcW5v IGNvdW50ZXIuIFRvIGFjY29tcGxpc2gKPiB0aGlzLCB3ZSB3b3VsZCBwcmVlbXB0IHRvIGEgc3Bl Y2lhbCBvdXQtb2YtYmFuZCBjb250ZXh0IGFuZCB3YWl0IGZvciB0aGUKPiBtYWNoaW5lIHRvIHJl cG9ydCB0aGF0IGl0IHdhcyBpZGxlLiBHaXZlbiBhbiBpZGxlIG1hY2hpbmUsIHdlIGNvdWxkIHZl cnkKPiBwcmVjaXNlbHkgc2VlIHdoaWNoIHJlcXVlc3RzIGhhZCBjb21wbGV0ZWQgYW5kIHdoaWNo IHdlIG5lZWRlZCB0byBmZWVkCj4gYmFjayBpbnRvIHRoZSBydW4gcXVldWUuCj4KPiBIb3dldmVy LCBub3cgdGhhdCB3ZSBoYXZlIHNjcmFwcGVkIHRoZSBnbG9iYWwgc2Vxbm8sIHdlIG5vIGxvbmdl ciBuZWVkCj4gdG8gcHJlY2lzZWx5IHVud2luZCB0aGUgZ2xvYmFsIGNvdW50ZXIgYW5kIG9ubHkg dHJhY2sgcmVxdWVzdHMgYnkgdGhlaXIKPiBwZXItY29udGV4dCBzZXFuby4gVGhpcyBhbGxvd3Mg dXMgdG8gbG9vc2VseSB1bndpbmQgaW5mbGlnaHQgcmVxdWVzdHMKPiB3aGlsZSBzY2hlZHVsaW5n IGEgcHJlZW1wdGlvbiwgd2l0aCB0aGUgZW5vcm1vdXMgY2F2ZWF0IHRoYXQgdGhlCj4gcmVxdWVz dHMgd2UgcHV0IGJhY2sgb24gdGhlIHJ1biBxdWV1ZSBhcmUgc3RpbGwgX2luZmxpZ2h0XyAodW50 aWwgdGhlCj4gcHJlZW1wdGlvbiByZXF1ZXN0IGlzIGNvbXBsZXRlKS4gVGhpcyBtYWtlcyByZXF1 ZXN0IHRyYWNraW5nIG11Y2ggbW9yZQo+IG1lc3N5LCBhcyBhdCBhbnkgcG9pbnQgdGhlbiB3ZSBj YW4gc2VlIGEgY29tcGxldGVkIHJlcXVlc3QgdGhhdCB3ZQo+IGJlbGlldmUgaXMgbm90IGN1cnJl bnRseSBzY2hlZHVsZWQgZm9yIGV4ZWN1dGlvbi4gV2UgYWxzbyBoYXZlIHRvIGJlCj4gY2FyZWZ1 bCBub3QgdG8gcmV3aW5kIFJJTkdfVEFJTCBwYXN0IFJJTkdfSEVBRCBvbiBwcmVlbXB0aW5nIHRv IHRoZQo+IHJ1bm5pbmcgY29udGV4dCwgYW5kIGZvciB0aGlzIHdlIHVzZSBhIHNlbWFwaG9yZSB0 byBwcmV2ZW50IGNvbXBsZXRpb24KPiBvZiB0aGUgcmVxdWVzdCBiZWZvcmUgY29udGludWluZy4K Pgo+IFRvIGFjY29tcGxpc2ggdGhpcyBmZWF0LCB3ZSBjaGFuZ2UgaG93IHdlIHRyYWNrIHJlcXVl c3RzIHNjaGVkdWxlZCB0bwo+IHRoZSBIVy4gSW5zdGVhZCBvZiBhcHBlbmRpbmcgb3VyIHJlcXVl c3RzIG9udG8gYSBzaW5nbGUgbGlzdCBhcyB3ZQo+IHN1Ym1pdCwgd2UgdHJhY2sgZWFjaCBzdWJt aXNzaW9uIHRvIEVMU1AgYXMgaXRzIG93biBibG9jay4gVGhlbiB1cG9uCj4gcmVjZWl2aW5nIHRo ZSBDUyBwcmVlbXB0aW9uIGV2ZW50LCB3ZSBwcm9tb3RlIHRoZSBwZW5kaW5nIGJsb2NrIHRvIHRo ZQo+IGluZmxpZ2h0IGJsb2NrIChkaXNjYXJkaW5nIHdoYXQgd2FzIHByZXZpb3VzbHkgYmVpbmcg dHJhY2tlZCkuIEFzIG5vcm1hbAo+IENTIGNvbXBsZXRpb24gZXZlbnRzIGFycml2ZSwgd2UgdGhl biByZW1vdmUgc3RhbGUgZW50cmllcyBmcm9tIHRoZQo+IGluZmxpZ2h0IHRyYWNrZXIuCj4KPiBT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAt LS0KPiBTa2lwIHRoZSBib251cyBhc3NlcnRzIGlmIHRoZSBjb250ZXh0IGlzIGFscmVhZHkgY29t cGxldGVkLgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4 dC5jICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfY29udGV4dF90 eXBlcy5oIHwgICA1ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgg ICAgICAgIHwgIDYxICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9j cy5jICAgICB8ICA2MyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVf dHlwZXMuaCAgfCAgNTIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMg ICAgICAgICAgIHwgNjc4ICsrKysrKysrLS0tLS0tLS0tLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5jICAgICAgICAgfCAgMTkgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZXF1ZXN0LmMgICAgICAgICAgIHwgICA2ICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9yZXF1ZXN0LmggICAgICAgICAgIHwgICAxICsKPiAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9zY2hlZHVsZXIuYyAgICAgICAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfdXRpbHMuaCAgICAgICAgICAgICB8ICAxMiArCj4gIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMgICB8IDE3NSArKy0tLQo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9yZXF1ZXN0LmMgfCAgIDggKy0KPiAgMTMgZmlsZXMgY2hh bmdlZCwgNDc1IGluc2VydGlvbnMoKyksIDYxMCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fY29udGV4dC5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX2NvbnRleHQuYwo+IGluZGV4IDBmMmMyMmEzYmNiNi4u MzU4NzFjOGE0MmE2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1 X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1f Y29udGV4dC5jCj4gQEAgLTY0Niw3ICs2NDYsNyBAQCBzdGF0aWMgdm9pZCBpbml0X2NvbnRleHRz KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAKPiAgc3RhdGljIGJvb2wgbmVlZHNf cHJlZW1wdF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICB7Cj4gLQly ZXR1cm4gSEFTX0VYRUNMSVNUUyhpOTE1KTsKPiArCXJldHVybiBVU0VTX0dVQ19TVUJNSVNTSU9O KGk5MTUpOwo+ICB9Cj4gIAo+ICBpbnQgaTkxNV9nZW1fY29udGV4dHNfaW5pdChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2NvbnRleHRfdHlwZXMuaAo+IGluZGV4IDA4MDQ5ZWU5MWNlZS4uNGMwZTIxMWM3MTVkIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2NvbnRleHRfdHlwZXMuaAo+ IEBAIC0xMyw2ICsxMyw3IEBACj4gICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICAKPiAgI2lu Y2x1ZGUgImk5MTVfYWN0aXZlX3R5cGVzLmgiCj4gKyNpbmNsdWRlICJpOTE1X3V0aWxzLmgiCj4g ICNpbmNsdWRlICJpbnRlbF9lbmdpbmVfdHlwZXMuaCIKPiAgI2luY2x1ZGUgImludGVsX3NzZXUu aCIKPiAgCj4gQEAgLTM4LDYgKzM5LDEwIEBAIHN0cnVjdCBpbnRlbF9jb250ZXh0IHsKPiAgCXN0 cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpnZW1fY29udGV4dDsKPiAgCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZTsKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmluZmxpZ2h0Owo+ICsj ZGVmaW5lIGludGVsX2NvbnRleHRfaW5mbGlnaHQoY2UpIHB0cl9tYXNrX2JpdHMoKGNlKS0+aW5m bGlnaHQsIDIpCj4gKyNkZWZpbmUgaW50ZWxfY29udGV4dF9pbmZsaWdodF9jb3VudChjZSkgIHB0 cl91bm1hc2tfYml0cygoY2UpLT5pbmZsaWdodCwgMikKPiArI2RlZmluZSBpbnRlbF9jb250ZXh0 X2luZmxpZ2h0X2luYyhjZSkgcHRyX2NvdW50X2luYygmKGNlKS0+aW5mbGlnaHQpCj4gKyNkZWZp bmUgaW50ZWxfY29udGV4dF9pbmZsaWdodF9kZWMoY2UpIHB0cl9jb3VudF9kZWMoJihjZSktPmlu ZmxpZ2h0KQoKSnVzdCBjdXJpb3VzIGhlcmUgdGhhdCB3aGF0IHlvdSBjb25zaWRlciB0aGUgYWR2 YW50YWdlcyBvZiBjYXJyeWluZwp0aGlzIGluZm8gd2l0aCB0aGUgcG9pbnRlcj8KCj4gIAo+ICAJ c3RydWN0IGxpc3RfaGVhZCBzaWduYWxfbGluazsKPiAgCXN0cnVjdCBsaXN0X2hlYWQgc2lnbmFs czsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+IGluZGV4IDJmMWM2ODcx ZWU5NS4uOWJiNmZmNzY2ODBlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2VuZ2luZS5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5n aW5lLmgKPiBAQCAtMTI1LDcxICsxMjUsMjYgQEAgaGFuZ2NoZWNrX2FjdGlvbl90b19zdHIoY29u c3QgZW51bSBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrX2FjdGlvbiBhKQo+ICAKPiAgdm9pZCBpbnRl bF9lbmdpbmVzX3NldF9zY2hlZHVsZXJfY2FwcyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSk7Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHZvaWQKPiAtZXhlY2xpc3RzX3NldF9hY3RpdmUoc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywKPiAtCQkgICAgIHVuc2lnbmVk IGludCBiaXQpCj4gLXsKPiAtCV9fc2V0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJmV4ZWNs aXN0cy0+YWN0aXZlKTsKPiAtfQo+IC0KPiAtc3RhdGljIGlubGluZSBib29sCj4gLWV4ZWNsaXN0 c19zZXRfYWN0aXZlX29uY2Uoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0 cywKPiAtCQkJICB1bnNpZ25lZCBpbnQgYml0KQo+IC17Cj4gLQlyZXR1cm4gIV9fdGVzdF9hbmRf c2V0X2JpdChiaXQsICh1bnNpZ25lZCBsb25nICopJmV4ZWNsaXN0cy0+YWN0aXZlKTsKPiAtfQo+ IC0KPiAtc3RhdGljIGlubGluZSB2b2lkCj4gLWV4ZWNsaXN0c19jbGVhcl9hY3RpdmUoc3RydWN0 IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywKPiAtCQkgICAgICAgdW5zaWduZWQg aW50IGJpdCkKPiAtewo+IC0JX19jbGVhcl9iaXQoYml0LCAodW5zaWduZWQgbG9uZyAqKSZleGVj bGlzdHMtPmFjdGl2ZSk7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbmxpbmUgdm9pZAo+IC1leGVjbGlz dHNfY2xlYXJfYWxsX2FjdGl2ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xp c3RzKQo+ICtzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAo+ICtleGVjbGlzdHNfbnVtX3BvcnRz KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQo+ ICB7Cj4gLQlleGVjbGlzdHMtPmFjdGl2ZSA9IDA7Cj4gKwlyZXR1cm4gZXhlY2xpc3RzLT5wb3J0 X21hc2sgKyAxOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIGJvb2wKPiAtZXhlY2xpc3RzX2lz X2FjdGl2ZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLAo+ IC0JCSAgICB1bnNpZ25lZCBpbnQgYml0KQo+ICtzdGF0aWMgaW5saW5lIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKgo+ICtleGVjbGlzdHNfYWN0aXZlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhl Y2xpc3RzICpleGVjbGlzdHMpCj4gIHsKPiAtCXJldHVybiB0ZXN0X2JpdChiaXQsICh1bnNpZ25l ZCBsb25nICopJmV4ZWNsaXN0cy0+YWN0aXZlKTsKPiArCUdFTV9CVUdfT04oZXhlY2xpc3RzLT5h Y3RpdmUgLSBleGVjbGlzdHMtPmluZmxpZ2h0ID4KPiArCQkgICBleGVjbGlzdHNfbnVtX3BvcnRz KGV4ZWNsaXN0cykpOwo+ICsJcmV0dXJuIFJFQURfT05DRSgqZXhlY2xpc3RzLT5hY3RpdmUpOwo+ ICB9Cj4gIAo+IC12b2lkIGV4ZWNsaXN0c191c2VyX2JlZ2luKHN0cnVjdCBpbnRlbF9lbmdpbmVf ZXhlY2xpc3RzICpleGVjbGlzdHMsCj4gLQkJCSAgY29uc3Qgc3RydWN0IGV4ZWNsaXN0X3BvcnQg KnBvcnQpOwo+IC12b2lkIGV4ZWNsaXN0c191c2VyX2VuZChzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4 ZWNsaXN0cyAqZXhlY2xpc3RzKTsKPiAtCj4gIHZvaWQKPiAgZXhlY2xpc3RzX2NhbmNlbF9wb3J0 X3JlcXVlc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3Rz KTsKPiAgCj4gIHN0cnVjdCBpOTE1X3JlcXVlc3QgKgo+ICBleGVjbGlzdHNfdW53aW5kX2luY29t cGxldGVfcmVxdWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cyk7 Cj4gIAo+IC1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAo+IC1leGVjbGlzdHNfbnVtX3BvcnRz KGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQo+ IC17Cj4gLQlyZXR1cm4gZXhlY2xpc3RzLT5wb3J0X21hc2sgKyAxOwo+IC19Cj4gLQo+IC1zdGF0 aWMgaW5saW5lIHN0cnVjdCBleGVjbGlzdF9wb3J0ICoKPiAtZXhlY2xpc3RzX3BvcnRfY29tcGxl dGUoc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMsCj4gLQkJ CXN0cnVjdCBleGVjbGlzdF9wb3J0ICogY29uc3QgcG9ydCkKPiAtewo+IC0JY29uc3QgdW5zaWdu ZWQgaW50IG0gPSBleGVjbGlzdHMtPnBvcnRfbWFzazsKPiAtCj4gLQlHRU1fQlVHX09OKHBvcnRf aW5kZXgocG9ydCwgZXhlY2xpc3RzKSAhPSAwKTsKPiAtCUdFTV9CVUdfT04oIWV4ZWNsaXN0c19p c19hY3RpdmUoZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNUSVZFX1VTRVIpKTsKPiAtCj4gLQltZW1t b3ZlKHBvcnQsIHBvcnQgKyAxLCBtICogc2l6ZW9mKHN0cnVjdCBleGVjbGlzdF9wb3J0KSk7Cj4g LQltZW1zZXQocG9ydCArIG0sIDAsIHNpemVvZihzdHJ1Y3QgZXhlY2xpc3RfcG9ydCkpOwo+IC0K PiAtCXJldHVybiBwb3J0Owo+IC19Cj4gLQo+ICBzdGF0aWMgaW5saW5lIHUzMgo+ICBpbnRlbF9y ZWFkX3N0YXR1c19wYWdlKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgaW50 IHJlZykKPiAgewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9l bmdpbmVfY3MuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4g aW5kZXggN2ZkMzNlODFjMmQ5Li5kNDUzMjhlMjU0ZGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+IEBAIC01MDgsNiArNTA4LDEwIEBAIHZvaWQgaW50 ZWxfZW5naW5lX2luaXRfZXhlY2xpc3RzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgCUdFTV9CVUdfT04oIWlzX3Bvd2VyX29mXzIoZXhlY2xpc3RzX251bV9wb3J0cyhleGVjbGlz dHMpKSk7Cj4gIAlHRU1fQlVHX09OKGV4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKSA+IEVY RUNMSVNUX01BWF9QT1JUUyk7Cj4gIAo+ICsJbWVtc2V0KGV4ZWNsaXN0cy0+cGVuZGluZywgMCwg c2l6ZW9mKGV4ZWNsaXN0cy0+cGVuZGluZykpOwo+ICsJZXhlY2xpc3RzLT5hY3RpdmUgPQo+ICsJ CW1lbXNldChleGVjbGlzdHMtPmluZmxpZ2h0LCAwLCBzaXplb2YoZXhlY2xpc3RzLT5pbmZsaWdo dCkpOwo+ICsKPiAgCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9IElOVF9NSU47Cj4g IAlleGVjbGlzdHMtPnF1ZXVlID0gUkJfUk9PVF9DQUNIRUQ7Cj4gIH0KPiBAQCAtMTE1Miw3ICsx MTU2LDcgQEAgYm9vbCBpbnRlbF9lbmdpbmVfaXNfaWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUpCj4gIAkJcmV0dXJuIHRydWU7Cj4gIAo+ICAJLyogV2FpdGluZyB0byBkcmFpbiBF TFNQPyAqLwo+IC0JaWYgKFJFQURfT05DRShlbmdpbmUtPmV4ZWNsaXN0cy5hY3RpdmUpKSB7Cj4g KwlpZiAoZXhlY2xpc3RzX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMpKSB7Cj4gIAkJc3RydWN0 IHRhc2tsZXRfc3RydWN0ICp0ID0gJmVuZ2luZS0+ZXhlY2xpc3RzLnRhc2tsZXQ7Cj4gIAo+ICAJ CXN5bmNocm9uaXplX2hhcmRpcnEoZW5naW5lLT5pOTE1LT5kcm0uaXJxKTsKPiBAQCAtMTE2OSw3 ICsxMTczLDcgQEAgYm9vbCBpbnRlbF9lbmdpbmVfaXNfaWRsZShzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIAkJLyogT3RoZXJ3aXNlIGZsdXNoIHRoZSB0YXNrbGV0IGlmIGl0IHdh cyBvbiBhbm90aGVyIGNwdSAqLwo+ICAJCXRhc2tsZXRfdW5sb2NrX3dhaXQodCk7Cj4gIAo+IC0J CWlmIChSRUFEX09OQ0UoZW5naW5lLT5leGVjbGlzdHMuYWN0aXZlKSkKPiArCQlpZiAoZXhlY2xp c3RzX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMpKQo+ICAJCQlyZXR1cm4gZmFsc2U7Cj4gIAl9 Cj4gIAo+IEBAIC0xMzY3LDYgKzEzNzEsNyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJp bnRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCX0KPiAgCj4g IAlpZiAoSEFTX0VYRUNMSVNUUyhkZXZfcHJpdikpIHsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0 ICogY29uc3QgKnBvcnQsICpycTsKPiAgCQljb25zdCB1MzIgKmh3cyA9Cj4gIAkJCSZlbmdpbmUt PnN0YXR1c19wYWdlLmFkZHJbSTkxNV9IV1NfQ1NCX0JVRjBfSU5ERVhdOwo+ICAJCWNvbnN0IHU4 IG51bV9lbnRyaWVzID0gZXhlY2xpc3RzLT5jc2Jfc2l6ZTsKPiBAQCAtMTM5OSwyNyArMTQwNCwz MyBAQCBzdGF0aWMgdm9pZCBpbnRlbF9lbmdpbmVfcHJpbnRfcmVnaXN0ZXJzKHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgCQl9Cj4gIAo+ICAJCXNwaW5fbG9ja19pcnFzYXZlKCZl bmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gLQkJZm9yIChpZHggPSAwOyBpZHggPCBleGVj bGlzdHNfbnVtX3BvcnRzKGV4ZWNsaXN0cyk7IGlkeCsrKSB7Cj4gLQkJCXN0cnVjdCBpOTE1X3Jl cXVlc3QgKnJxOwo+IC0JCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwkJZm9yIChwb3J0ID0gZXhl Y2xpc3RzLT5hY3RpdmU7IChycSA9ICpwb3J0KTsgcG9ydCsrKSB7Cj4gKwkJCWNoYXIgaGRyWzgw XTsKPiArCQkJaW50IGxlbjsKPiArCj4gKwkJCWxlbiA9IHNucHJpbnRmKGhkciwgc2l6ZW9mKGhk ciksCj4gKwkJCQkgICAgICAgIlx0XHRBY3RpdmVbJWQ6ICIsCj4gKwkJCQkgICAgICAgKGludCko cG9ydCAtIGV4ZWNsaXN0cy0+YWN0aXZlKSk7Cj4gKwkJCWlmICghaTkxNV9yZXF1ZXN0X3NpZ25h bGVkKHJxKSkKPiArCQkJCWxlbiArPSBzbnByaW50ZihoZHIgKyBsZW4sIHNpemVvZihoZHIpIC0g bGVuLAo+ICsJCQkJCQkicmluZzp7c3RhcnQ6JTA4eCwgaHdzcDolMDh4LCBzZXFubzolMDh4fSwg IiwKPiArCQkJCQkJaTkxNV9nZ3R0X29mZnNldChycS0+cmluZy0+dm1hKSwKPiArCQkJCQkJcnEt PnRpbWVsaW5lLT5od3NwX29mZnNldCwKPiArCQkJCQkJaHdzcF9zZXFubyhycSkpOwo+ICsJCQlz bnByaW50ZihoZHIgKyBsZW4sIHNpemVvZihoZHIpIC0gbGVuLCAicnE6ICIpOwo+ICsJCQlwcmlu dF9yZXF1ZXN0KG0sIHJxLCBoZHIpOwo+ICsJCX0KPiArCQlmb3IgKHBvcnQgPSBleGVjbGlzdHMt PnBlbmRpbmc7IChycSA9ICpwb3J0KTsgcG9ydCsrKSB7Cj4gIAkJCWNoYXIgaGRyWzgwXTsKPiAg Cj4gLQkJCXJxID0gcG9ydF91bnBhY2soJmV4ZWNsaXN0cy0+cG9ydFtpZHhdLCAmY291bnQpOwo+ IC0JCQlpZiAoIXJxKSB7Cj4gLQkJCQlkcm1fcHJpbnRmKG0sICJcdFx0RUxTUFslZF0gaWRsZVxu IiwgaWR4KTsKPiAtCQkJfSBlbHNlIGlmICghaTkxNV9yZXF1ZXN0X3NpZ25hbGVkKHJxKSkgewo+ IC0JCQkJc25wcmludGYoaGRyLCBzaXplb2YoaGRyKSwKPiAtCQkJCQkgIlx0XHRFTFNQWyVkXSBj b3VudD0lZCwgcmluZzp7c3RhcnQ6JTA4eCwgaHdzcDolMDh4LCBzZXFubzolMDh4fSwgcnE6ICIs Cj4gLQkJCQkJIGlkeCwgY291bnQsCj4gLQkJCQkJIGk5MTVfZ2d0dF9vZmZzZXQocnEtPnJpbmct PnZtYSksCj4gLQkJCQkJIHJxLT50aW1lbGluZS0+aHdzcF9vZmZzZXQsCj4gLQkJCQkJIGh3c3Bf c2Vxbm8ocnEpKTsKPiAtCQkJCXByaW50X3JlcXVlc3QobSwgcnEsIGhkcik7Cj4gLQkJCX0gZWxz ZSB7Cj4gLQkJCQlwcmludF9yZXF1ZXN0KG0sIHJxLCAiXHRcdEVMU1BbJWRdIHJxOiAiKTsKPiAt CQkJfQo+ICsJCQlzbnByaW50ZihoZHIsIHNpemVvZihoZHIpLAo+ICsJCQkJICJcdFx0UGVuZGlu Z1slZF0gcmluZzp7c3RhcnQ6JTA4eCwgaHdzcDolMDh4LCBzZXFubzolMDh4fSwgcnE6ICIsCj4g KwkJCQkgKGludCkocG9ydCAtIGV4ZWNsaXN0cy0+cGVuZGluZyksCj4gKwkJCQkgaTkxNV9nZ3R0 X29mZnNldChycS0+cmluZy0+dm1hKSwKPiArCQkJCSBycS0+dGltZWxpbmUtPmh3c3Bfb2Zmc2V0 LAo+ICsJCQkJIGh3c3Bfc2Vxbm8ocnEpKTsKPiArCQkJcHJpbnRfcmVxdWVzdChtLCBycSwgaGRy KTsKPiAgCQl9Cj4gLQkJZHJtX3ByaW50ZihtLCAiXHRcdEhXIGFjdGl2ZT8gMHgleFxuIiwgZXhl Y2xpc3RzLT5hY3RpdmUpOwo+ICAJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0 aXZlLmxvY2ssIGZsYWdzKTsKPiAgCX0gZWxzZSBpZiAoSU5URUxfR0VOKGRldl9wcml2KSA+IDYp IHsKPiAgCQlkcm1fcHJpbnRmKG0sICJcdFBQX0RJUl9CQVNFOiAweCUwOHhcbiIsCj4gQEAgLTE1 ODMsMTUgKzE1OTQsMTkgQEAgaW50IGludGVsX2VuYWJsZV9lbmdpbmVfc3RhdHMoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJfQo+ICAKPiAgCWlmIChlbmdpbmUtPnN0YXRzLmVu YWJsZWQrKyA9PSAwKSB7Cj4gLQkJY29uc3Qgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQgPSBl eGVjbGlzdHMtPnBvcnQ7Cj4gLQkJdW5zaWduZWQgaW50IG51bV9wb3J0cyA9IGV4ZWNsaXN0c19u dW1fcG9ydHMoZXhlY2xpc3RzKTsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICogY29uc3QgKnBv cnQ7Cj4gKwkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gIAo+ICAJCWVuZ2luZS0+c3RhdHMu ZW5hYmxlZF9hdCA9IGt0aW1lX2dldCgpOwo+ICAKPiAgCQkvKiBYWFggc3VibWlzc2lvbiBtZXRo b2Qgb2JsaXZpb3VzPyAqLwo+IC0JCXdoaWxlIChudW1fcG9ydHMtLSAmJiBwb3J0X2lzc2V0KHBv cnQpKSB7Cj4gKwkJZm9yIChwb3J0ID0gZXhlY2xpc3RzLT5hY3RpdmU7IChycSA9ICpwb3J0KTsg cG9ydCsrKQo+ICAJCQllbmdpbmUtPnN0YXRzLmFjdGl2ZSsrOwo+IC0JCQlwb3J0Kys7Cj4gKwo+ ICsJCWZvciAocG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsgKHJxID0gKnBvcnQpOyBwb3J0Kysp IHsKPiArCQkJLyogRXhjbHVkZSBhbnkgY29udGV4dHMgYWxyZWFkeSBjb3VudGVkIGluIGFjdGl2 ZSAqLwo+ICsJCQlpZiAoaW50ZWxfY29udGV4dF9pbmZsaWdodF9jb3VudChycS0+aHdfY29udGV4 dCkgPT0gMSkKPiArCQkJCWVuZ2luZS0+c3RhdHMuYWN0aXZlKys7Cj4gIAkJfQo+ICAKPiAgCQlp ZiAoZW5naW5lLT5zdGF0cy5hY3RpdmUpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50 ZWxfZW5naW5lX3R5cGVzLmgKPiBpbmRleCA0M2U5NzVhMjYwMTYuLjQxMWI3YTgwN2I5OSAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV90eXBlcy5oCj4gQEAg LTE3Miw1MSArMTcyLDEwIEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzIHsKPiAgCSAq Lwo+ICAJdTMyIF9faW9tZW0gKmN0cmxfcmVnOwo+ICAKPiAtCS8qKgo+IC0JICogQHBvcnQ6IGV4 ZWNsaXN0IHBvcnQgc3RhdGVzCj4gLQkgKgo+IC0JICogRm9yIGVhY2ggaGFyZHdhcmUgRUxTUCAo RXhlY0xpc3QgU3VibWlzc2lvbiBQb3J0KSB3ZSBrZWVwCj4gLQkgKiB0cmFjayBvZiB0aGUgbGFz dCByZXF1ZXN0IGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzIHdlIHN1Ym1pdHRlZAo+IC0JICogdGhh dCBwb3J0IHRvIGh3LiBXZSB0aGVuIGNvdW50IHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIGh3IHJl cG9ydHMKPiAtCSAqIGEgY29udGV4dCBjb21wbGV0aW9uIG9yIHByZWVtcHRpb24uIEFzIG9ubHkg b25lIGNvbnRleHQgY2FuCj4gLQkgKiBiZSBhY3RpdmUgb24gaHcsIHdlIGxpbWl0IHJlc3VibWlz c2lvbiBvZiBjb250ZXh0IHRvIHBvcnRbMF0uIFRoaXMKPiAtCSAqIGlzIGNhbGxlZCBMaXRlIFJl c3RvcmUsIG9mIHRoZSBjb250ZXh0Lgo+IC0JICovCj4gLQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCB7 Cj4gLQkJLyoqCj4gLQkJICogQHJlcXVlc3RfY291bnQ6IGNvbWJpbmVkIHJlcXVlc3QgYW5kIHN1 Ym1pc3Npb24gY291bnQKPiAtCQkgKi8KPiAtCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 X2NvdW50Owo+IC0jZGVmaW5lIEVYRUNMSVNUX0NPVU5UX0JJVFMgMgo+IC0jZGVmaW5lIHBvcnRf cmVxdWVzdChwKSBwdHJfbWFza19iaXRzKChwKS0+cmVxdWVzdF9jb3VudCwgRVhFQ0xJU1RfQ09V TlRfQklUUykKPiAtI2RlZmluZSBwb3J0X2NvdW50KHApIHB0cl91bm1hc2tfYml0cygocCktPnJl cXVlc3RfY291bnQsIEVYRUNMSVNUX0NPVU5UX0JJVFMpCj4gLSNkZWZpbmUgcG9ydF9wYWNrKHJx LCBjb3VudCkgcHRyX3BhY2tfYml0cyhycSwgY291bnQsIEVYRUNMSVNUX0NPVU5UX0JJVFMpCj4g LSNkZWZpbmUgcG9ydF91bnBhY2socCwgY291bnQpIHB0cl91bnBhY2tfYml0cygocCktPnJlcXVl c3RfY291bnQsIGNvdW50LCBFWEVDTElTVF9DT1VOVF9CSVRTKQo+IC0jZGVmaW5lIHBvcnRfc2V0 KHAsIHBhY2tlZCkgKChwKS0+cmVxdWVzdF9jb3VudCA9IChwYWNrZWQpKQo+IC0jZGVmaW5lIHBv cnRfaXNzZXQocCkgKChwKS0+cmVxdWVzdF9jb3VudCkKPiAtI2RlZmluZSBwb3J0X2luZGV4KHAs IGV4ZWNsaXN0cykgKChwKSAtIChleGVjbGlzdHMpLT5wb3J0KQo+IC0KPiAtCQkvKioKPiAtCQkg KiBAY29udGV4dF9pZDogY29udGV4dCBJRCBmb3IgcG9ydAo+IC0JCSAqLwo+IC0JCUdFTV9ERUJV R19ERUNMKHUzMiBjb250ZXh0X2lkKTsKPiAtCj4gICNkZWZpbmUgRVhFQ0xJU1RfTUFYX1BPUlRT IDIKPiAtCX0gcG9ydFtFWEVDTElTVF9NQVhfUE9SVFNdOwo+IC0KPiAtCS8qKgo+IC0JICogQGFj dGl2ZTogaXMgdGhlIEhXIGFjdGl2ZT8gV2UgY29uc2lkZXIgdGhlIEhXIGFzIGFjdGl2ZSBhZnRl cgo+IC0JICogc3VibWl0dGluZyBhbnkgY29udGV4dCBmb3IgZXhlY3V0aW9uIGFuZCB1bnRpbCB3 ZSBoYXZlIHNlZW4gdGhlCj4gLQkgKiBsYXN0IGNvbnRleHQgY29tcGxldGlvbiBldmVudC4gQWZ0 ZXIgdGhhdCwgd2UgZG8gbm90IGV4cGVjdCBhbnkKPiAtCSAqIG1vcmUgZXZlbnRzIHVudGlsIHdl IHN1Ym1pdCwgYW5kIHNvIGNhbiBwYXJrIHRoZSBIVy4KPiAtCSAqCj4gLQkgKiBBcyB3ZSBoYXZl IGEgc21hbGwgbnVtYmVyIG9mIGRpZmZlcmVudCBzb3VyY2VzIGZyb20gd2hpY2ggd2UgZmVlZAo+ IC0JICogdGhlIEhXLCB3ZSB0cmFjayB0aGUgc3RhdGUgb2YgZWFjaCBpbnNpZGUgYSBzaW5nbGUg Yml0ZmllbGQuCj4gLQkgKi8KPiAtCXVuc2lnbmVkIGludCBhY3RpdmU7Cj4gLSNkZWZpbmUgRVhF Q0xJU1RTX0FDVElWRV9VU0VSIDAKPiAtI2RlZmluZSBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQg MQo+IC0jZGVmaW5lIEVYRUNMSVNUU19BQ1RJVkVfSFdBQ0sgMgo+ICsJc3RydWN0IGk5MTVfcmVx dWVzdCAqIGNvbnN0ICphY3RpdmU7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICppbmZsaWdodFtF WEVDTElTVF9NQVhfUE9SVFMgKyAxIC8qIHNlbnRpbmVsICovXTsKPiArCXN0cnVjdCBpOTE1X3Jl cXVlc3QgKnBlbmRpbmdbRVhFQ0xJU1RfTUFYX1BPUlRTICsgMV07Cj4gIAo+ICAJLyoqCj4gIAkg KiBAcG9ydF9tYXNrOiBudW1iZXIgb2YgZXhlY2xpc3QgcG9ydHMgLSAxCj4gQEAgLTI1NywxMSAr MjE2LDYgQEAgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgewo+ICAJICovCj4gIAl1MzIg KmNzYl9zdGF0dXM7Cj4gIAo+IC0JLyoqCj4gLQkgKiBAcHJlZW1wdF9jb21wbGV0ZV9zdGF0dXM6 IGV4cGVjdGVkIENTQiB1cG9uIGNvbXBsZXRpbmcgcHJlZW1wdGlvbgo+IC0JICovCj4gLQl1MzIg cHJlZW1wdF9jb21wbGV0ZV9zdGF0dXM7Cj4gLQo+ICAJLyoqCj4gIAkgKiBAY3NiX3NpemU6IGNv bnRleHQgc3RhdHVzIGJ1ZmZlciBGSUZPIHNpemUKPiAgCSAqLwo+IGRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xyYy5jCj4gaW5kZXggODJiN2FjZTYyZDk3Li5iMWU0NWM2NTE2NjAgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+IEBAIC0xNjEsNiArMTYxLDggQEAKPiAgI2Rl ZmluZSBHRU44X0NUWF9TVEFUVVNfQ09NUExFVEVEX01BU0sgXAo+ICAJIChHRU44X0NUWF9TVEFU VVNfQ09NUExFVEUgfCBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKQo+ICAKPiArI2RlZmluZSBD VFhfREVTQ19GT1JDRV9SRVNUT1JFIEJJVF9VTEwoMikKPiArCj4gIC8qIFR5cGljYWwgc2l6ZSBv ZiB0aGUgYXZlcmFnZSByZXF1ZXN0ICgyIHBpcGVjb250cm9scyBhbmQgYSBNSV9CQikgKi8KPiAg I2RlZmluZSBFWEVDTElTVFNfUkVRVUVTVF9TSVpFIDY0IC8qIGJ5dGVzICovCj4gICNkZWZpbmUg V0FfVEFJTF9EV09SRFMgMgo+IEBAIC0yMjEsNiArMjIzLDE0IEBAIHN0YXRpYyB2b2lkIGV4ZWNs aXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKPiAgCQkJCSAgICAgc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJCQkJICAgICBzdHJ1Y3QgaW50ZWxfcmluZyAqcmlu Zyk7Cj4gIAo+ICtzdGF0aWMgaW5saW5lIHUzMiBpbnRlbF9od3NfcHJlZW1wdF9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJcmV0dXJuIChpOTE1X2dndHRf b2Zmc2V0KGVuZ2luZS0+c3RhdHVzX3BhZ2Uudm1hKSArCj4gKwkJSTkxNV9HRU1fSFdTX1BSRUVN UFRfQUREUik7Cj4gK30KPiArCj4gKyNkZWZpbmUgcmluZ19wYXVzZShFKSAoKEUpLT5zdGF0dXNf cGFnZS5hZGRyW0k5MTVfR0VNX0hXU19QUkVFTVBUXSkKClNjYXJ5LiBQbGVhc2UgbGV0cyBtYWtl IGEgZnVuY3Rpb24gb2YgcmluZ19wYXVzZSBhbmQgdXNlCmludGVsX3dyaXRlX3N0YXR1c19wYWdl IGluIGl0LgoKU28gSSBndWVzcyB5b3UgaGF2ZSBhbmQgeW91IHdhbnQgc3F1ZWV6ZSB0aGUgbGF0 ZW5jeSBmcnVpdC4KCldoZW4gd2UgaGF2ZSBldmVyeXRoaW5nIGluIHBsYWNlLCBDSSBpcyBncmVl biBhbmQKZXZlcnlvbmUgaXMgaGFwcHksIHRoZW4gd2UgdGVhciBpdCBkb3duPwoKPiArCj4gIHN0 YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcHJpb2xpc3QgKnRvX3ByaW9saXN0KHN0cnVjdCByYl9u b2RlICpyYikKPiAgewo+ICAJcmV0dXJuIHJiX2VudHJ5KHJiLCBzdHJ1Y3QgaTkxNV9wcmlvbGlz dCwgbm9kZSk7Cj4gQEAgLTI3MSwxMiArMjgxLDYgQEAgc3RhdGljIGlubGluZSBib29sIG5lZWRf cHJlZW1wdChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gIHsKPiAgCWlu dCBsYXN0X3ByaW87Cj4gIAo+IC0JaWYgKCFlbmdpbmUtPnByZWVtcHRfY29udGV4dCkKPiAtCQly ZXR1cm4gZmFsc2U7Cj4gLQo+IC0JaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+IC0J CXJldHVybiBmYWxzZTsKPiAtCj4gIAkvKgo+ICAJICogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgcHJp b3JpdHkgaGludCBtZXJpdHMgYSBwcmVlbXB0aW9uIGF0dGVtcHQuCj4gIAkgKgo+IEBAIC0zMzgs OSArMzQyLDYgQEAgX19tYXliZV91bnVzZWQgc3RhdGljIGlubGluZSBib29sCj4gIGFzc2VydF9w cmlvcml0eV9xdWV1ZShjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2LAo+ICAJCSAgICAg IGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKm5leHQpCj4gIHsKPiAtCWNvbnN0IHN0cnVjdCBp bnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMgPQo+IC0JCSZwcmV2LT5lbmdpbmUtPmV4 ZWNsaXN0czsKPiAtCj4gIAkvKgo+ICAJICogV2l0aG91dCBwcmVlbXB0aW9uLCB0aGUgcHJldiBt YXkgcmVmZXIgdG8gdGhlIHN0aWxsIGFjdGl2ZSBlbGVtZW50Cj4gIAkgKiB3aGljaCB3ZSByZWZ1 c2UgdG8gbGV0IGdvLgo+IEBAIC0zNDgsNyArMzQ5LDcgQEAgYXNzZXJ0X3ByaW9yaXR5X3F1ZXVl KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnByZXYsCj4gIAkgKiBFdmVuIHdpdGggcHJlZW1w dGlvbiwgdGhlcmUgYXJlIHRpbWVzIHdoZW4gd2UgdGhpbmsgaXQgaXMgYmV0dGVyIG5vdAo+ICAJ ICogdG8gcHJlZW1wdCBhbmQgbGVhdmUgYW4gb3N0ZW5zaWJseSBsb3dlciBwcmlvcml0eSByZXF1 ZXN0IGluIGZsaWdodC4KPiAgCSAqLwo+IC0JaWYgKHBvcnRfcmVxdWVzdChleGVjbGlzdHMtPnBv cnQpID09IHByZXYpCj4gKwlpZiAoaTkxNV9yZXF1ZXN0X2lzX2FjdGl2ZShwcmV2KSkKPiAgCQly ZXR1cm4gdHJ1ZTsKPiAgCj4gIAlyZXR1cm4gcnFfcHJpbyhwcmV2KSA+PSBycV9wcmlvKG5leHQp Owo+IEBAIC00NDIsMTMgKzQ0MywxMSBAQCBfX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICpvd25lcjsKPiAgCj4gIAkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+IC0JCQli cmVhazsKPiArCQkJY29udGludWU7IC8qIFhYWCAqLwoKWWVhaCwgYnV0IHdoYXQgaXMgdGhlIHBs YW4gd2l0aCB0aGUgWFhYLgoKCj4gIAo+ICAJCV9faTkxNV9yZXF1ZXN0X3Vuc3VibWl0KHJxKTsK PiAgCQl1bndpbmRfd2FfdGFpbChycSk7Cj4gIAo+IC0JCUdFTV9CVUdfT04ocnEtPmh3X2NvbnRl eHQtPmluZmxpZ2h0KTsKPiAtCj4gIAkJLyoKPiAgCQkgKiBQdXNoIHRoZSByZXF1ZXN0IGJhY2sg aW50byB0aGUgcXVldWUgZm9yIGxhdGVyIHJlc3VibWlzc2lvbi4KPiAgCQkgKiBJZiB0aGlzIHJl cXVlc3QgaXMgbm90IG5hdGl2ZSB0byB0aGlzIHBoeXNpY2FsIGVuZ2luZSAoaS5lLgo+IEBAIC01 MDAsMzIgKzQ5OSwzMiBAQCBleGVjbGlzdHNfY29udGV4dF9zdGF0dXNfY2hhbmdlKHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxLCB1bnNpZ25lZCBsb25nIHN0YXR1cykKPiAgCQkJCSAgIHN0YXR1cywg cnEpOwo+ICB9Cj4gIAo+IC1pbmxpbmUgdm9pZAo+IC1leGVjbGlzdHNfdXNlcl9iZWdpbihzdHJ1 Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLAo+IC0JCSAgICAgY29uc3Qgc3Ry dWN0IGV4ZWNsaXN0X3BvcnQgKnBvcnQpCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfcmVx dWVzdCAqCj4gK2V4ZWNsaXN0c19zY2hlZHVsZV9pbihzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwg aW50IGlkeCkKPiAgewo+IC0JZXhlY2xpc3RzX3NldF9hY3RpdmVfb25jZShleGVjbGlzdHMsIEVY RUNMSVNUU19BQ1RJVkVfVVNFUik7Cj4gLX0KPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9 IHJxLT5od19jb250ZXh0Owo+ICsJaW50IGNvdW50Owo+ICAKPiAtaW5saW5lIHZvaWQKPiAtZXhl Y2xpc3RzX3VzZXJfZW5kKHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMp Cj4gLXsKPiAtCWV4ZWNsaXN0c19jbGVhcl9hY3RpdmUoZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNU SVZFX1VTRVIpOwo+IC19Cj4gKwl0cmFjZV9pOTE1X3JlcXVlc3RfaW4ocnEsIGlkeCk7Cj4gIAo+ IC1zdGF0aWMgaW5saW5lIHZvaWQKPiAtZXhlY2xpc3RzX2NvbnRleHRfc2NoZWR1bGVfaW4oc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gLXsKPiAtCUdFTV9CVUdfT04ocnEtPmh3X2NvbnRleHQt PmluZmxpZ2h0KTsKPiArCWNvdW50ID0gaW50ZWxfY29udGV4dF9pbmZsaWdodF9jb3VudChjZSk7 Cj4gKwlpZiAoIWNvdW50KSB7Cj4gKwkJaW50ZWxfY29udGV4dF9nZXQoY2UpOwo+ICsJCWNlLT5p bmZsaWdodCA9IHJxLT5lbmdpbmU7Cj4gKwo+ICsJCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19j aGFuZ2UocnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfSU4pOwo+ICsJCWludGVsX2VuZ2luZV9j b250ZXh0X2luKGNlLT5pbmZsaWdodCk7Cj4gKwl9Cj4gIAo+IC0JZXhlY2xpc3RzX2NvbnRleHRf c3RhdHVzX2NoYW5nZShycSwgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9JTik7Cj4gLQlpbnRlbF9l bmdpbmVfY29udGV4dF9pbihycS0+ZW5naW5lKTsKPiAtCXJxLT5od19jb250ZXh0LT5pbmZsaWdo dCA9IHJxLT5lbmdpbmU7Cj4gKwlpbnRlbF9jb250ZXh0X2luZmxpZ2h0X2luYyhjZSk7Cj4gKwlH RU1fQlVHX09OKGludGVsX2NvbnRleHRfaW5mbGlnaHQoY2UpICE9IHJxLT5lbmdpbmUpOwo+ICsK PiArCXJldHVybiBpOTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiAgfQo+ICAKPiAtc3RhdGljIHZvaWQg a2lja19zaWJsaW5ncyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArc3RhdGljIHZvaWQga2lj a19zaWJsaW5ncyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgc3RydWN0IGludGVsX2NvbnRleHQg KmNlKQo+ICB7Cj4gLQlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZlID0gdG9fdmlydHVhbF9lbmdp bmUocnEtPmh3X2NvbnRleHQtPmVuZ2luZSk7Cj4gKwlzdHJ1Y3QgdmlydHVhbF9lbmdpbmUgKnZl ID0gY29udGFpbmVyX29mKGNlLCB0eXBlb2YoKnZlKSwgY29udGV4dCk7Cj4gIAlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpuZXh0ID0gUkVBRF9PTkNFKHZlLT5yZXF1ZXN0KTsKPiAgCj4gIAlpZiAobmV4 dCAmJiBuZXh0LT5leGVjdXRpb25fbWFzayAmIH5ycS0+ZXhlY3V0aW9uX21hc2spCj4gQEAgLTUz MywyOSArNTMyLDQyIEBAIHN0YXRpYyB2b2lkIGtpY2tfc2libGluZ3Moc3RydWN0IGk5MTVfcmVx dWVzdCAqcnEpCj4gIH0KPiAgCj4gIHN0YXRpYyBpbmxpbmUgdm9pZAo+IC1leGVjbGlzdHNfY29u dGV4dF9zY2hlZHVsZV9vdXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHVuc2lnbmVkIGxvbmcg c3RhdHVzKQo+ICtleGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+ICB7Cj4gLQlycS0+aHdfY29udGV4dC0+aW5mbGlnaHQgPSBOVUxMOwo+IC0JaW50ZWxfZW5n aW5lX2NvbnRleHRfb3V0KHJxLT5lbmdpbmUpOwo+IC0JZXhlY2xpc3RzX2NvbnRleHRfc3RhdHVz X2NoYW5nZShycSwgc3RhdHVzKTsKPiArCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSA9IHJxLT5o d19jb250ZXh0Owo+ICsKPiArCUdFTV9CVUdfT04oIWludGVsX2NvbnRleHRfaW5mbGlnaHRfY291 bnQoY2UpKTsKPiArCj4gIAl0cmFjZV9pOTE1X3JlcXVlc3Rfb3V0KHJxKTsKPiAgCj4gLQkvKgo+ IC0JICogSWYgdGhpcyBpcyBwYXJ0IG9mIGEgdmlydHVhbCBlbmdpbmUsIGl0cyBuZXh0IHJlcXVl c3QgbWF5IGhhdmUKPiAtCSAqIGJlZW4gYmxvY2tlZCB3YWl0aW5nIGZvciBhY2Nlc3MgdG8gdGhl IGFjdGl2ZSBjb250ZXh0LiBXZSBoYXZlCj4gLQkgKiB0byBraWNrIGFsbCB0aGUgc2libGluZ3Mg YWdhaW4gaW4gY2FzZSB3ZSBuZWVkIHRvIHN3aXRjaCAoZS5nLgo+IC0JICogdGhlIG5leHQgcmVx dWVzdCBpcyBub3QgcnVubmFibGUgb24gdGhpcyBlbmdpbmUpLiBIb3BlZnVsbHksCj4gLQkgKiB3 ZSB3aWxsIGFscmVhZHkgaGF2ZSBzdWJtaXR0ZWQgdGhlIG5leHQgcmVxdWVzdCBiZWZvcmUgdGhl Cj4gLQkgKiB0YXNrbGV0IHJ1bnMgYW5kIGRvIG5vdCBuZWVkIHRvIHJlYnVpbGQgZWFjaCB2aXJ0 dWFsIHRyZWUKPiAtCSAqIGFuZCBraWNrIGV2ZXJ5b25lIGFnYWluLgo+IC0JICovCj4gLQlpZiAo cnEtPmVuZ2luZSAhPSBycS0+aHdfY29udGV4dC0+ZW5naW5lKQo+IC0JCWtpY2tfc2libGluZ3Mo cnEpOwo+ICsJaW50ZWxfY29udGV4dF9pbmZsaWdodF9kZWMoY2UpOwo+ICsJaWYgKCFpbnRlbF9j b250ZXh0X2luZmxpZ2h0X2NvdW50KGNlKSkgewo+ICsJCWludGVsX2VuZ2luZV9jb250ZXh0X291 dChjZS0+aW5mbGlnaHQpOwo+ICsJCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2UocnEs IElOVEVMX0NPTlRFWFRfU0NIRURVTEVfT1VUKTsKPiArCj4gKwkJY2UtPmluZmxpZ2h0ID0gTlVM TDsKPiArCQlpbnRlbF9jb250ZXh0X3B1dChjZSk7Cj4gKwo+ICsJCS8qCj4gKwkJICogSWYgdGhp cyBpcyBwYXJ0IG9mIGEgdmlydHVhbCBlbmdpbmUsIGl0cyBuZXh0IHJlcXVlc3QgbWF5Cj4gKwkJ ICogaGF2ZSBiZWVuIGJsb2NrZWQgd2FpdGluZyBmb3IgYWNjZXNzIHRvIHRoZSBhY3RpdmUgY29u dGV4dC4KPiArCQkgKiBXZSBoYXZlIHRvIGtpY2sgYWxsIHRoZSBzaWJsaW5ncyBhZ2FpbiBpbiBj YXNlIHdlIG5lZWQgdG8KPiArCQkgKiBzd2l0Y2ggKGUuZy4gdGhlIG5leHQgcmVxdWVzdCBpcyBu b3QgcnVubmFibGUgb24gdGhpcwo+ICsJCSAqIGVuZ2luZSkuIEhvcGVmdWxseSwgd2Ugd2lsbCBh bHJlYWR5IGhhdmUgc3VibWl0dGVkIHRoZSBuZXh0Cj4gKwkJICogcmVxdWVzdCBiZWZvcmUgdGhl IHRhc2tsZXQgcnVucyBhbmQgZG8gbm90IG5lZWQgdG8gcmVidWlsZAo+ICsJCSAqIGVhY2ggdmly dHVhbCB0cmVlIGFuZCBraWNrIGV2ZXJ5b25lIGFnYWluLgo+ICsJCSAqLwo+ICsJCWlmIChycS0+ ZW5naW5lICE9IGNlLT5lbmdpbmUpCj4gKwkJCWtpY2tfc2libGluZ3MocnEsIGNlKTsKPiArCX0K PiArCj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiAgfQo+ICAKPiAtc3RhdGljIHU2NCBleGVj bGlzdHNfdXBkYXRlX2NvbnRleHQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3N0YXRpYyB1 NjQgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJx KQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBycS0+aHdfY29udGV4dDsKPiAr CXU2NCBkZXNjOwo+ICAKPiAgCWNlLT5scmNfcmVnX3N0YXRlW0NUWF9SSU5HX1RBSUwgKyAxXSA9 Cj4gIAkJaW50ZWxfcmluZ19zZXRfdGFpbChycS0+cmluZywgcnEtPnRhaWwpOwo+IEBAIC01NzYs NyArNTg4LDExIEBAIHN0YXRpYyB1NjQgZXhlY2xpc3RzX3VwZGF0ZV9jb250ZXh0KHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQo+ICAJICogd21iKS4KPiAgCSAqLwo+ICAJbWIoKTsKPiAtCXJldHVy biBjZS0+bHJjX2Rlc2M7Cj4gKwo+ICsJZGVzYyA9IGNlLT5scmNfZGVzYzsKPiArCWNlLT5scmNf ZGVzYyAmPSB+Q1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsKPiArCj4gKwlyZXR1cm4gZGVzYzsKPiAg fQo+ICAKPiAgc3RhdGljIGlubGluZSB2b2lkIHdyaXRlX2Rlc2Moc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgKmV4ZWNsaXN0cywgdTY0IGRlc2MsIHUzMiBwb3J0KQo+IEBAIC01OTAsMTIg KzYwNiw1OSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgd3JpdGVfZGVzYyhzdHJ1Y3QgaW50ZWxfZW5n aW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLCB1NjQgZGVzYwo+ICAJfQo+ICB9Cj4gIAo+ICtzdGF0 aWMgX19tYXliZV91bnVzZWQgdm9pZAo+ICt0cmFjZV9wb3J0cyhjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzLAo+ICsJICAgIGNvbnN0IGNoYXIgKm1zZywKPiAr CSAgICBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICogY29uc3QgKnBvcnRzKQo+ICt7Cj4gKwljb25zdCBz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUgPQo+ICsJCWNvbnRhaW5lcl9vZihleGVjbGlz dHMsIHR5cGVvZigqZW5naW5lKSwgZXhlY2xpc3RzKTsKPiArCj4gKwlHRU1fVFJBQ0UoIiVzOiAl cyB7ICVsbHg6JWxsZCVzLCAlbGx4OiVsbGQgfVxuIiwKPiArCQkgIGVuZ2luZS0+bmFtZSwgbXNn LAo+ICsJCSAgcG9ydHNbMF0tPmZlbmNlLmNvbnRleHQsCj4gKwkJICBwb3J0c1swXS0+ZmVuY2Uu c2Vxbm8sCj4gKwkJICBpOTE1X3JlcXVlc3RfY29tcGxldGVkKHBvcnRzWzBdKSA/ICIhIiA6Cj4g KwkJICBpOTE1X3JlcXVlc3Rfc3RhcnRlZChwb3J0c1swXSkgPyAiKiIgOgo+ICsJCSAgIiIsCj4g KwkJICBwb3J0c1sxXSA/IHBvcnRzWzFdLT5mZW5jZS5jb250ZXh0IDogMCwKPiArCQkgIHBvcnRz WzFdID8gcG9ydHNbMV0tPmZlbmNlLnNlcW5vIDogMCk7Cj4gK30KPiArCj4gK3N0YXRpYyBfX21h eWJlX3VudXNlZCBib29sCj4gK2Fzc2VydF9wZW5kaW5nX3ZhbGlkKGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMsCj4gKwkJICAgICBjb25zdCBjaGFyICptc2cp Cj4gK3sKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKiBjb25zdCAqcG9ydCwgKnJxOwo+ICsJc3Ry dWN0IGludGVsX2NvbnRleHQgKmNlID0gTlVMTDsKPiArCj4gKwl0cmFjZV9wb3J0cyhleGVjbGlz dHMsIG1zZywgZXhlY2xpc3RzLT5wZW5kaW5nKTsKPiArCj4gKwlpZiAoZXhlY2xpc3RzLT5wZW5k aW5nW2V4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKV0pCj4gKwkJcmV0dXJuIGZhbHNlOwo+ ICsKPiArCWZvciAocG9ydCA9IGV4ZWNsaXN0cy0+cGVuZGluZzsgKHJxID0gKnBvcnQpOyBwb3J0 KyspIHsKPiArCQlpZiAoY2UgPT0gcnEtPmh3X2NvbnRleHQpCj4gKwkJCXJldHVybiBmYWxzZTsK PiArCj4gKwkJY2UgPSBycS0+aHdfY29udGV4dDsKPiArCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBs ZXRlZChycSkpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlHRU1fQlVHX09OKGk5MTVfYWN0aXZl X2lzX2lkbGUoJmNlLT5hY3RpdmUpKTsKPiArCQlHRU1fQlVHX09OKCFpOTE1X3ZtYV9pc19waW5u ZWQoY2UtPnN0YXRlKSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIGNlOwo+ICt9Cj4gKwo+ICBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0X3BvcnRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgewo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cyA9 ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiAtCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhl Y2xpc3RzLT5wb3J0Owo+ICAJdW5zaWduZWQgaW50IG47Cj4gIAo+ICsJR0VNX0JVR19PTighYXNz ZXJ0X3BlbmRpbmdfdmFsaWQoZXhlY2xpc3RzLCAic3VibWl0IikpOwo+ICsKPiAgCS8qCj4gIAkg KiBXZSBjYW4gc2tpcCBhY3F1aXJpbmcgaW50ZWxfcnVudGltZV9wbV9nZXQoKSBoZXJlIGFzIGl0 IHdhcyB0YWtlbgo+ICAJICogb24gb3VyIGJlaGFsZiBieSB0aGUgcmVxdWVzdCAoc2VlIGk5MTVf Z2VtX21hcmtfYnVzeSgpKSBhbmQgaXQgd2lsbAo+IEBAIC02MTMsMzggKzY3NiwxNiBAQCBzdGF0 aWMgdm9pZCBleGVjbGlzdHNfc3VibWl0X3BvcnRzKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPiAgCSAqIG9mIGVsc3EgZW50cmllcywga2VlcCB0aGlzIGluIG1pbmQgYmVmb3JlIGNo YW5naW5nIHRoZSBsb29wIGJlbG93Lgo+ICAJICovCj4gIAlmb3IgKG4gPSBleGVjbGlzdHNfbnVt X3BvcnRzKGV4ZWNsaXN0cyk7IG4tLTsgKSB7Cj4gLQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7 Cj4gLQkJdW5zaWduZWQgaW50IGNvdW50Owo+IC0JCXU2NCBkZXNjOwo+ICsJCXN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxID0gZXhlY2xpc3RzLT5wZW5kaW5nW25dOwo+ICAKPiAtCQlycSA9IHBvcnRf dW5wYWNrKCZwb3J0W25dLCAmY291bnQpOwo+IC0JCWlmIChycSkgewo+IC0JCQlHRU1fQlVHX09O KGNvdW50ID4gIW4pOwo+IC0JCQlpZiAoIWNvdW50KyspCj4gLQkJCQlleGVjbGlzdHNfY29udGV4 dF9zY2hlZHVsZV9pbihycSk7Cj4gLQkJCXBvcnRfc2V0KCZwb3J0W25dLCBwb3J0X3BhY2socnEs IGNvdW50KSk7Cj4gLQkJCWRlc2MgPSBleGVjbGlzdHNfdXBkYXRlX2NvbnRleHQocnEpOwo+IC0J CQlHRU1fREVCVUdfRVhFQyhwb3J0W25dLmNvbnRleHRfaWQgPSB1cHBlcl8zMl9iaXRzKGRlc2Mp KTsKPiAtCj4gLQkJCUdFTV9UUkFDRSgiJXMgaW5bJWRdOiAgY3R4PSVkLiVkLCBmZW5jZSAlbGx4 OiVsbGQgKGN1cnJlbnQgJWQpLCBwcmlvPSVkXG4iLAo+IC0JCQkJICBlbmdpbmUtPm5hbWUsIG4s Cj4gLQkJCQkgIHBvcnRbbl0uY29udGV4dF9pZCwgY291bnQsCj4gLQkJCQkgIHJxLT5mZW5jZS5j b250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCj4gLQkJCQkgIGh3c3Bfc2Vxbm8ocnEpLAo+IC0JCQkJ ICBycV9wcmlvKHJxKSk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJR0VNX0JVR19PTighbik7Cj4gLQkJ CWRlc2MgPSAwOwo+IC0JCX0KPiAtCj4gLQkJd3JpdGVfZGVzYyhleGVjbGlzdHMsIGRlc2MsIG4p Owo+ICsJCXdyaXRlX2Rlc2MoZXhlY2xpc3RzLAo+ICsJCQkgICBycSA/IGV4ZWNsaXN0c191cGRh dGVfY29udGV4dChycSkgOiAwLAo+ICsJCQkgICBuKTsKPiAgCX0KPiAgCj4gIAkvKiB3ZSBuZWVk IHRvIG1hbnVhbGx5IGxvYWQgdGhlIHN1Ym1pdCBxdWV1ZSAqLwo+ICAJaWYgKGV4ZWNsaXN0cy0+ Y3RybF9yZWcpCj4gIAkJd3JpdGVsKEVMX0NUUkxfTE9BRCwgZXhlY2xpc3RzLT5jdHJsX3JlZyk7 Cj4gLQo+IC0JZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJ VkVfSFdBQ0spOwo+ICB9Cj4gIAo+ICBzdGF0aWMgYm9vbCBjdHhfc2luZ2xlX3BvcnRfc3VibWlz c2lvbihjb25zdCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UpCj4gQEAgLTY2OCw2ICs3MDksNyBA QCBzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfY3R4KGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpw cmV2LAo+ICBzdGF0aWMgYm9vbCBjYW5fbWVyZ2VfcnEoY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVz dCAqcHJldiwKPiAgCQkJIGNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKm5leHQpCj4gIHsKPiAr CUdFTV9CVUdfT04ocHJldiA9PSBuZXh0KTsKPiAgCUdFTV9CVUdfT04oIWFzc2VydF9wcmlvcml0 eV9xdWV1ZShwcmV2LCBuZXh0KSk7Cj4gIAo+ICAJaWYgKCFjYW5fbWVyZ2VfY3R4KHByZXYtPmh3 X2NvbnRleHQsIG5leHQtPmh3X2NvbnRleHQpKQo+IEBAIC02NzYsNTggKzcxOCw2IEBAIHN0YXRp YyBib29sIGNhbl9tZXJnZV9ycShjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpwcmV2LAo+ICAJ cmV0dXJuIHRydWU7Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHBvcnRfYXNzaWduKHN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0LCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiAtewo+IC0JR0VN X0JVR19PTihycSA9PSBwb3J0X3JlcXVlc3QocG9ydCkpOwo+IC0KPiAtCWlmIChwb3J0X2lzc2V0 KHBvcnQpKQo+IC0JCWk5MTVfcmVxdWVzdF9wdXQocG9ydF9yZXF1ZXN0KHBvcnQpKTsKPiAtCj4g LQlwb3J0X3NldChwb3J0LCBwb3J0X3BhY2soaTkxNV9yZXF1ZXN0X2dldChycSksIHBvcnRfY291 bnQocG9ydCkpKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaW5qZWN0X3ByZWVtcHRfY29udGV4 dChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBpbnRlbF9l bmdpbmVfZXhlY2xpc3RzICpleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gLQlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UgPSBlbmdpbmUtPnByZWVtcHRfY29udGV4dDsKPiAtCXVuc2ln bmVkIGludCBuOwo+IC0KPiAtCUdFTV9CVUdfT04oZXhlY2xpc3RzLT5wcmVlbXB0X2NvbXBsZXRl X3N0YXR1cyAhPQo+IC0JCSAgIHVwcGVyXzMyX2JpdHMoY2UtPmxyY19kZXNjKSk7Cj4gLQo+IC0J LyoKPiAtCSAqIFN3aXRjaCB0byBvdXIgZW1wdHkgcHJlZW1wdCBjb250ZXh0IHNvCj4gLQkgKiB0 aGUgc3RhdGUgb2YgdGhlIEdQVSBpcyBrbm93biAoaWRsZSkuCj4gLQkgKi8KPiAtCUdFTV9UUkFD RSgiJXNcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQlmb3IgKG4gPSBleGVjbGlzdHNfbnVtX3BvcnRz KGV4ZWNsaXN0cyk7IC0tbjsgKQo+IC0JCXdyaXRlX2Rlc2MoZXhlY2xpc3RzLCAwLCBuKTsKPiAt Cj4gLQl3cml0ZV9kZXNjKGV4ZWNsaXN0cywgY2UtPmxyY19kZXNjLCBuKTsKPiAtCj4gLQkvKiB3 ZSBuZWVkIHRvIG1hbnVhbGx5IGxvYWQgdGhlIHN1Ym1pdCBxdWV1ZSAqLwo+IC0JaWYgKGV4ZWNs aXN0cy0+Y3RybF9yZWcpCj4gLQkJd3JpdGVsKEVMX0NUUkxfTE9BRCwgZXhlY2xpc3RzLT5jdHJs X3JlZyk7Cj4gLQo+IC0JZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNU U19BQ1RJVkVfSFdBQ0spOwo+IC0JZXhlY2xpc3RzX3NldF9hY3RpdmUoZXhlY2xpc3RzLCBFWEVD TElTVFNfQUNUSVZFX1BSRUVNUFQpOwo+IC0KPiAtCSh2b2lkKUk5MTVfU0VMRlRFU1RfT05MWShl eGVjbGlzdHMtPnByZWVtcHRfaGFuZy5jb3VudCsrKTsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQg Y29tcGxldGVfcHJlZW1wdF9jb250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICpl eGVjbGlzdHMpCj4gLXsKPiAtCUdFTV9CVUdfT04oIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xp c3RzLCBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpKTsKPiAtCj4gLQlpZiAoaW5qZWN0X3ByZWVt cHRfaGFuZyhleGVjbGlzdHMpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlleGVjbGlzdHNfY2FuY2Vs X3BvcnRfcmVxdWVzdHMoZXhlY2xpc3RzKTsKPiAtCV9fdW53aW5kX2luY29tcGxldGVfcmVxdWVz dHMoY29udGFpbmVyX29mKGV4ZWNsaXN0cywKPiAtCQkJCQkJICBzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzLAo+IC0JCQkJCQkgIGV4ZWNsaXN0cykpOwo+IC19Cj4gLQo+ICBzdGF0aWMgdm9pZCB2aXJ0 dWFsX3VwZGF0ZV9yZWdpc3Rlcl9vZmZzZXRzKHUzMiAqcmVncywKPiAgCQkJCQkgICAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gQEAgLTc5Miw3ICs3ODIsNyBAQCBzdGF0 aWMgYm9vbCB2aXJ0dWFsX21hdGNoZXMoY29uc3Qgc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSwK PiAgCSAqIHdlIHJldXNlIHRoZSByZWdpc3RlciBvZmZzZXRzKS4gVGhpcyBpcyBhIHZlcnkgc21h bGwKPiAgCSAqIGh5c3RlcnNpcyBvbiB0aGUgZ3JlZWR5IHNlZWxjdGlvbiBhbGdvcml0aG0uCj4g IAkgKi8KPiAtCWluZmxpZ2h0ID0gUkVBRF9PTkNFKHZlLT5jb250ZXh0LmluZmxpZ2h0KTsKPiAr CWluZmxpZ2h0ID0gaW50ZWxfY29udGV4dF9pbmZsaWdodCgmdmUtPmNvbnRleHQpOwo+ICAJaWYg KGluZmxpZ2h0ICYmIGluZmxpZ2h0ICE9IGVuZ2luZSkKPiAgCQlyZXR1cm4gZmFsc2U7Cj4gIAo+ IEBAIC04MTUsMTMgKzgwNSwyMyBAQCBzdGF0aWMgdm9pZCB2aXJ0dWFsX3hmZXJfYnJlYWRjcnVt YnMoc3RydWN0IHZpcnR1YWxfZW5naW5lICp2ZSwKPiAgCXNwaW5fdW5sb2NrKCZvbGQtPmJyZWFk Y3J1bWJzLmlycV9sb2NrKTsKPiAgfQo+ICAKPiArc3RhdGljIHN0cnVjdCBpOTE1X3JlcXVlc3Qg Kgo+ICtsYXN0X2FjdGl2ZShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhl Y2xpc3RzKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICogY29uc3QgKmxhc3QgPSBleGVj bGlzdHMtPmFjdGl2ZTsKPiArCj4gKwl3aGlsZSAoKmxhc3QgJiYgaTkxNV9yZXF1ZXN0X2NvbXBs ZXRlZCgqbGFzdCkpCj4gKwkJbGFzdCsrOwo+ICsKPiArCXJldHVybiAqbGFzdDsKPiArfQo+ICsK PiAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4 ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiAtCXN0cnVjdCBleGVjbGlzdF9wb3J0ICpw b3J0ID0gZXhlY2xpc3RzLT5wb3J0Owo+IC0JY29uc3Qgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKiBj b25zdCBsYXN0X3BvcnQgPQo+IC0JCSZleGVjbGlzdHMtPnBvcnRbZXhlY2xpc3RzLT5wb3J0X21h c2tdOwo+IC0Jc3RydWN0IGk5MTVfcmVxdWVzdCAqbGFzdCA9IHBvcnRfcmVxdWVzdChwb3J0KTsK PiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKipwb3J0ID0gZXhlY2xpc3RzLT5wZW5kaW5nOwo+ICsJ c3RydWN0IGk5MTVfcmVxdWVzdCAqKiBjb25zdCBsYXN0X3BvcnQgPSBwb3J0ICsgZXhlY2xpc3Rz LT5wb3J0X21hc2s7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpsYXN0Owo+ICAJc3RydWN0IHJi X25vZGUgKnJiOwo+ICAJYm9vbCBzdWJtaXQgPSBmYWxzZTsKPiAgCj4gQEAgLTg2Nyw2NSArODY3 LDcyIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgCQlicmVhazsKPiAgCX0KPiAgCj4gKwkvKgo+ICsJICogSWYgdGhlIHF1 ZXVlIGlzIGhpZ2hlciBwcmlvcml0eSB0aGFuIHRoZSBsYXN0Cj4gKwkgKiByZXF1ZXN0IGluIHRo ZSBjdXJyZW50bHkgYWN0aXZlIGNvbnRleHQsIHN1Ym1pdCBhZnJlc2guCj4gKwkgKiBXZSB3aWxs IHJlc3VibWl0IGFnYWluIGFmdGVyd2FyZHMgaW4gY2FzZSB3ZSBuZWVkIHRvIHNwbGl0Cj4gKwkg KiB0aGUgYWN0aXZlIGNvbnRleHQgdG8gaW50ZXJqZWN0IHRoZSBwcmVlbXB0aW9uIHJlcXVlc3Qs Cj4gKwkgKiBpLmUuIHdlIHdpbGwgcmV0cmlnZ2VyIHByZWVtcHRpb24gZm9sbG93aW5nIHRoZSBh Y2sgaW4gY2FzZQo+ICsJICogb2YgdHJvdWJsZS4KPiArCSAqLwo+ICsJbGFzdCA9IGxhc3RfYWN0 aXZlKGV4ZWNsaXN0cyk7Cj4gIAlpZiAobGFzdCkgewo+IC0JCS8qCj4gLQkJICogRG9uJ3QgcmVz dWJtaXQgb3Igc3dpdGNoIHVudGlsIGFsbCBvdXRzdGFuZGluZwo+IC0JCSAqIHByZWVtcHRpb25z IChsaXRlLXJlc3RvcmUpIGFyZSBzZWVuLiBUaGVuIHdlCj4gLQkJICoga25vdyB0aGUgbmV4dCBw cmVlbXB0aW9uIHN0YXR1cyB3ZSBzZWUgY29ycmVzcG9uZHMKPiAtCQkgKiB0byB0aGlzIEVMU1Ag dXBkYXRlLgo+IC0JCSAqLwo+IC0JCUdFTV9CVUdfT04oIWV4ZWNsaXN0c19pc19hY3RpdmUoZXhl Y2xpc3RzLAo+IC0JCQkJCQlFWEVDTElTVFNfQUNUSVZFX1VTRVIpKTsKPiAtCQlHRU1fQlVHX09O KCFwb3J0X2NvdW50KCZwb3J0WzBdKSk7Cj4gLQo+IC0JCS8qCj4gLQkJICogSWYgd2Ugd3JpdGUg dG8gRUxTUCBhIHNlY29uZCB0aW1lIGJlZm9yZSB0aGUgSFcgaGFzIGhhZAo+IC0JCSAqIGEgY2hh bmNlIHRvIHJlc3BvbmQgdG8gdGhlIHByZXZpb3VzIHdyaXRlLCB3ZSBjYW4gY29uZnVzZQo+IC0J CSAqIHRoZSBIVyBhbmQgaGl0ICJ1bmRlZmluZWQgYmVoYXZpb3VyIi4gQWZ0ZXIgd3JpdGluZyB0 byBFTFNQLAo+IC0JCSAqIHdlIG11c3QgdGhlbiB3YWl0IHVudGlsIHdlIHNlZSBhIGNvbnRleHQt c3dpdGNoIGV2ZW50IGZyb20KPiAtCQkgKiB0aGUgSFcgdG8gaW5kaWNhdGUgdGhhdCBpdCBoYXMg aGFkIGEgY2hhbmNlIHRvIHJlc3BvbmQuCj4gLQkJICovCj4gLQkJaWYgKCFleGVjbGlzdHNfaXNf YWN0aXZlKGV4ZWNsaXN0cywgRVhFQ0xJU1RTX0FDVElWRV9IV0FDSykpCj4gLQkJCXJldHVybjsK PiAtCj4gIAkJaWYgKG5lZWRfcHJlZW1wdChlbmdpbmUsIGxhc3QsIHJiKSkgewo+IC0JCQlpbmpl Y3RfcHJlZW1wdF9jb250ZXh0KGVuZ2luZSk7Cj4gLQkJCXJldHVybjsKPiAtCQl9Cj4gKwkJCUdF TV9UUkFDRSgiJXM6IHByZWVtcHRpbmcgbGFzdD0lbGx4OiVsbGQsIHByaW89JWQsIGhpbnQ9JWRc biIsCj4gKwkJCQkgIGVuZ2luZS0+bmFtZSwKPiArCQkJCSAgbGFzdC0+ZmVuY2UuY29udGV4dCwK PiArCQkJCSAgbGFzdC0+ZmVuY2Uuc2Vxbm8sCj4gKwkJCQkgIGxhc3QtPnNjaGVkLmF0dHIucHJp b3JpdHksCj4gKwkJCQkgIGV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCk7Cj4gKwkJCS8q Cj4gKwkJCSAqIERvbid0IGxldCB0aGUgUklOR19IRUFEIGFkdmFuY2UgcGFzdCB0aGUgYnJlYWRj cnVtYgo+ICsJCQkgKiBhcyB3ZSB1bndpbmQgKGFuZCB1bnRpbCB3ZSByZXN1Ym1pdCkgc28gdGhh dCB3ZSBkbwo+ICsJCQkgKiBub3QgYWNjaWRlbnRhbGx5IHRlbGwgaXQgdG8gZ28gYmFja3dhcmRz Lgo+ICsJCQkgKi8KPiArCQkJcmluZ19wYXVzZShlbmdpbmUpID0gMTsKPiAgCj4gLQkJLyoKPiAt CQkgKiBJbiB0aGVvcnksIHdlIGNvdWxkIGNvYWxlc2NlIG1vcmUgcmVxdWVzdHMgb250bwo+IC0J CSAqIHRoZSBzZWNvbmQgcG9ydCAodGhlIGZpcnN0IHBvcnQgaXMgYWN0aXZlLCB3aXRoCj4gLQkJ ICogbm8gcHJlZW1wdGlvbnMgcGVuZGluZykuIEhvd2V2ZXIsIHRoYXQgbWVhbnMgd2UKPiAtCQkg KiB0aGVuIGhhdmUgdG8gZGVhbCB3aXRoIHRoZSBwb3NzaWJsZSBsaXRlLXJlc3RvcmUKPiAtCQkg KiBvZiB0aGUgc2Vjb25kIHBvcnQgKGFzIHdlIHN1Ym1pdCB0aGUgRUxTUCwgdGhlcmUKPiAtCQkg KiBtYXkgYmUgYSBjb250ZXh0LXN3aXRjaCkgYnV0IGFsc28gd2UgbWF5IGNvbXBsZXRlCj4gLQkJ ICogdGhlIHJlc3VibWlzc2lvbiBiZWZvcmUgdGhlIGNvbnRleHQtc3dpdGNoLiBFcmdvLAo+IC0J CSAqIGNvYWxlc2Npbmcgb250byB0aGUgc2Vjb25kIHBvcnQgd2lsbCBjYXVzZSBhCj4gLQkJICog cHJlZW1wdGlvbiBldmVudCwgYnV0IHdlIGNhbm5vdCBwcmVkaWN0IHdoZXRoZXIKPiAtCQkgKiB0 aGF0IHdpbGwgYWZmZWN0IHBvcnRbMF0gb3IgcG9ydFsxXS4KPiAtCQkgKgo+IC0JCSAqIElmIHRo ZSBzZWNvbmQgcG9ydCBpcyBhbHJlYWR5IGFjdGl2ZSwgd2UgY2FuIHdhaXQKPiAtCQkgKiB1bnRp bCB0aGUgbmV4dCBjb250ZXh0LXN3aXRjaCBiZWZvcmUgY29udGVtcGxhdGluZwo+IC0JCSAqIG5l dyByZXF1ZXN0cy4gVGhlIEdQVSB3aWxsIGJlIGJ1c3kgYW5kIHdlIHNob3VsZCBiZQo+IC0JCSAq IGFibGUgdG8gcmVzdWJtaXQgdGhlIG5ldyBFTFNQIGJlZm9yZSBpdCBpZGxlcywKPiAtCQkgKiBh dm9pZGluZyBwaXBlbGluZSBidWJibGVzIChtb21lbnRhcnkgcGF1c2VzIHdoZXJlCj4gLQkJICog dGhlIGRyaXZlciBpcyB1bmFibGUgdG8ga2VlcCB1cCB0aGUgc3VwcGx5IG9mIG5ldwo+IC0JCSAq IHdvcmspLiBIb3dldmVyLCB3ZSBoYXZlIHRvIGRvdWJsZSBjaGVjayB0aGF0IHRoZQo+IC0JCSAq IHByaW9yaXRpZXMgb2YgdGhlIHBvcnRzIGhhdmVuJ3QgYmVlbiBzd2l0Y2guCj4gLQkJICovCj4g LQkJaWYgKHBvcnRfY291bnQoJnBvcnRbMV0pKQo+IC0JCQlyZXR1cm47Cj4gKwkJCS8qCj4gKwkJ CSAqIE5vdGUgdGhhdCB3ZSBoYXZlIG5vdCBzdG9wcGVkIHRoZSBHUFUgYXQgdGhpcyBwb2ludCwK PiArCQkJICogc28gd2UgYXJlIHVud2luZGluZyB0aGUgaW5jb21wbGV0ZSByZXF1ZXN0cyBhcyB0 aGV5Cj4gKwkJCSAqIHJlbWFpbiBpbmZsaWdodCBhbmQgc28gYnkgdGhlIHRpbWUgd2UgZG8gY29t cGxldGUKPiArCQkJICogdGhlIHByZWVtcHRpb24sIHNvbWUgb2YgdGhlIHVud291bmQgcmVxdWVz dHMgbWF5Cj4gKwkJCSAqIGNvbXBsZXRlIQo+ICsJCQkgKi8KPiArCQkJX191bndpbmRfaW5jb21w bGV0ZV9yZXF1ZXN0cyhlbmdpbmUpOwo+ICAKPiAtCQkvKgo+IC0JCSAqIFdhSWRsZUxpdGVSZXN0 b3JlOmJkdyxza2wKPiAtCQkgKiBBcHBseSB0aGUgd2EgTk9PUHMgdG8gcHJldmVudAo+IC0JCSAq IHJpbmc6SEVBRCA9PSBycTpUQUlMIGFzIHdlIHJlc3VibWl0IHRoZQo+IC0JCSAqIHJlcXVlc3Qu IFNlZSBnZW44X2VtaXRfZmluaV9icmVhZGNydW1iKCkgZm9yCj4gLQkJICogd2hlcmUgd2UgcHJl cGFyZSB0aGUgcGFkZGluZyBhZnRlciB0aGUKPiAtCQkgKiBlbmQgb2YgdGhlIHJlcXVlc3QuCj4g LQkJICovCj4gLQkJbGFzdC0+dGFpbCA9IGxhc3QtPndhX3RhaWw7Cj4gKwkJCS8qCj4gKwkJCSAq IElmIHdlIG5lZWQgdG8gcmV0dXJuIHRvIHRoZSBwcmVlbXB0ZWQgY29udGV4dCwgd2UKPiArCQkJ ICogbmVlZCB0byBza2lwIHRoZSBsaXRlLXJlc3RvcmUgYW5kIGZvcmNlIGl0IHRvCj4gKwkJCSAq IHJlbG9hZCB0aGUgUklOR19UQUlMLiBPdGhlcndpc2UsIHRoZSBIVyBoYXMgYQo+ICsJCQkgKiB0 ZW5kZW5jeSB0byBpZ25vcmUgdXMgcmV3aW5kaW5nIHRoZSBUQUlMIHRvIHRoZQo+ICsJCQkgKiBl bmQgb2YgYW4gZWFybGllciByZXF1ZXN0Lgo+ICsJCQkgKi8KPiArCQkJbGFzdC0+aHdfY29udGV4 dC0+bHJjX2Rlc2MgfD0gQ1RYX0RFU0NfRk9SQ0VfUkVTVE9SRTsKPiArCQkJbGFzdCA9IE5VTEw7 Cj4gKwkJfSBlbHNlIHsKPiArCQkJLyoKPiArCQkJICogT3RoZXJ3aXNlIGlmIHdlIGFscmVhZHkg aGF2ZSBhIHJlcXVlc3QgcGVuZGluZwo+ICsJCQkgKiBmb3IgZXhlY3V0aW9uIGFmdGVyIHRoZSBj dXJyZW50IG9uZSwgd2UgY2FuCj4gKwkJCSAqIGp1c3Qgd2FpdCB1bnRpbCB0aGUgbmV4dCBDUyBl dmVudCBiZWZvcmUKPiArCQkJICogcXVldWluZyBtb3JlLiBJbiBlaXRoZXIgY2FzZSB3ZSB3aWxs IGZvcmNlIGEKPiArCQkJICogbGl0ZS1yZXN0b3JlIHByZWVtcHRpb24gZXZlbnQsIGJ1dCBpZiB3 ZSB3YWl0Cj4gKwkJCSAqIHdlIGhvcGVmdWxseSBjb2FsZXNjZSBzZXZlcmFsIHVwZGF0ZXMgaW50 byBhIHNpbmdsZQo+ICsJCQkgKiBzdWJtaXNzaW9uLgo+ICsJCQkgKi8KPiArCQkJaWYgKCFsaXN0 X2lzX2xhc3QoJmxhc3QtPnNjaGVkLmxpbmssCj4gKwkJCQkJICAmZW5naW5lLT5hY3RpdmUucmVx dWVzdHMpKQo+ICsJCQkJcmV0dXJuOwo+ICsKPiArCQkJLyoKPiArCQkJICogV2FJZGxlTGl0ZVJl c3RvcmU6YmR3LHNrbAo+ICsJCQkgKiBBcHBseSB0aGUgd2EgTk9PUHMgdG8gcHJldmVudAo+ICsJ CQkgKiByaW5nOkhFQUQgPT0gcnE6VEFJTCBhcyB3ZSByZXN1Ym1pdCB0aGUKPiArCQkJICogcmVx dWVzdC4gU2VlIGdlbjhfZW1pdF9maW5pX2JyZWFkY3J1bWIoKSBmb3IKPiArCQkJICogd2hlcmUg d2UgcHJlcGFyZSB0aGUgcGFkZGluZyBhZnRlciB0aGUKPiArCQkJICogZW5kIG9mIHRoZSByZXF1 ZXN0Lgo+ICsJCQkgKi8KPiArCQkJbGFzdC0+dGFpbCA9IGxhc3QtPndhX3RhaWw7Cj4gKwkJfQo+ ICAJfQo+ICAKPiAgCXdoaWxlIChyYikgeyAvKiBYWFggdmlydHVhbCBpcyBhbHdheXMgdGFraW5n IHByZWNlZGVuY2UgKi8KPiBAQCAtOTU1LDkgKzk2MiwyNCBAQCBzdGF0aWMgdm9pZCBleGVjbGlz dHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJCQljb250aW51 ZTsKPiAgCQkJfQo+ICAKPiArCQkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7Cj4g KwkJCQl2ZS0+cmVxdWVzdCA9IE5VTEw7Cj4gKwkJCQl2ZS0+YmFzZS5leGVjbGlzdHMucXVldWVf cHJpb3JpdHlfaGludCA9IElOVF9NSU47Cj4gKwkJCQlyYl9lcmFzZV9jYWNoZWQocmIsICZleGVj bGlzdHMtPnZpcnR1YWwpOwo+ICsJCQkJUkJfQ0xFQVJfTk9ERShyYik7Cj4gKwo+ICsJCQkJcnEt PmVuZ2luZSA9IGVuZ2luZTsKPiArCQkJCV9faTkxNV9yZXF1ZXN0X3N1Ym1pdChycSk7Cj4gKwo+ ICsJCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKPiArCj4gKwkJCQlyYiA9 IHJiX2ZpcnN0X2NhY2hlZCgmZXhlY2xpc3RzLT52aXJ0dWFsKTsKPiArCQkJCWNvbnRpbnVlOwo+ ICsJCQl9Cj4gKwo+ICAJCQlpZiAobGFzdCAmJiAhY2FuX21lcmdlX3JxKGxhc3QsIHJxKSkgewo+ ICAJCQkJc3Bpbl91bmxvY2soJnZlLT5iYXNlLmFjdGl2ZS5sb2NrKTsKPiAtCQkJCXJldHVybjsg LyogbGVhdmUgdGhpcyBycSBmb3IgYW5vdGhlciBlbmdpbmUgKi8KPiArCQkJCXJldHVybjsgLyog bGVhdmUgdGhpcyBmb3IgYW5vdGhlciAqLwo+ICAJCQl9Cj4gIAo+ICAJCQlHRU1fVFJBQ0UoIiVz OiB2aXJ0dWFsIHJxPSVsbHg6JWxsZCVzLCBuZXcgZW5naW5lPyAlc1xuIiwKPiBAQCAtMTAwNiw5 ICsxMDI4LDEwIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiAgCQkJfQo+ICAKPiAgCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0 KHJxKTsKPiAtCQkJdHJhY2VfaTkxNV9yZXF1ZXN0X2luKHJxLCBwb3J0X2luZGV4KHBvcnQsIGV4 ZWNsaXN0cykpOwo+IC0JCQlzdWJtaXQgPSB0cnVlOwo+IC0JCQlsYXN0ID0gcnE7Cj4gKwkJCWlm ICghaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKPiArCQkJCXN1Ym1pdCA9IHRydWU7Cj4g KwkJCQlsYXN0ID0gcnE7Cj4gKwkJCX0KPiAgCQl9Cj4gIAo+ICAJCXNwaW5fdW5sb2NrKCZ2ZS0+ YmFzZS5hY3RpdmUubG9jayk7Cj4gQEAgLTEwMjEsNiArMTA0NCw5IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCQlpbnQg aTsKPiAgCj4gIAkJcHJpb2xpc3RfZm9yX2VhY2hfcmVxdWVzdF9jb25zdW1lKHJxLCBybiwgcCwg aSkgewo+ICsJCQlpZiAoaTkxNV9yZXF1ZXN0X2NvbXBsZXRlZChycSkpCj4gKwkJCQlnb3RvIHNr aXA7Cj4gKwo+ICAJCQkvKgo+ICAJCQkgKiBDYW4gd2UgY29tYmluZSB0aGlzIHJlcXVlc3Qgd2l0 aCB0aGUgY3VycmVudCBwb3J0Pwo+ICAJCQkgKiBJdCBoYXMgdG8gYmUgdGhlIHNhbWUgY29udGV4 dC9yaW5nYnVmZmVyIGFuZCBub3QKPiBAQCAtMTA2MCwxOSArMTA4NiwxNCBAQCBzdGF0aWMgdm9p ZCBleGVjbGlzdHNfZGVxdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAkJ CQkgICAgY3R4X3NpbmdsZV9wb3J0X3N1Ym1pc3Npb24ocnEtPmh3X2NvbnRleHQpKQo+ICAJCQkJ CWdvdG8gZG9uZTsKPiAgCj4gLQo+IC0JCQkJaWYgKHN1Ym1pdCkKPiAtCQkJCQlwb3J0X2Fzc2ln bihwb3J0LCBsYXN0KTsKPiArCQkJCSpwb3J0ID0gZXhlY2xpc3RzX3NjaGVkdWxlX2luKGxhc3Qs IHBvcnQgLSBleGVjbGlzdHMtPnBlbmRpbmcpOwo+ICAJCQkJcG9ydCsrOwo+IC0KPiAtCQkJCUdF TV9CVUdfT04ocG9ydF9pc3NldChwb3J0KSk7Cj4gIAkJCX0KPiAgCj4gLQkJCV9faTkxNV9yZXF1 ZXN0X3N1Ym1pdChycSk7Cj4gLQkJCXRyYWNlX2k5MTVfcmVxdWVzdF9pbihycSwgcG9ydF9pbmRl eChwb3J0LCBleGVjbGlzdHMpKTsKPiAtCj4gIAkJCWxhc3QgPSBycTsKPiAgCQkJc3VibWl0ID0g dHJ1ZTsKPiArc2tpcDoKPiArCQkJX19pOTE1X3JlcXVlc3Rfc3VibWl0KHJxKTsKPiAgCQl9Cj4g IAo+ICAJCXJiX2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwgJmV4ZWNsaXN0cy0+cXVldWUpOwo+IEBA IC0xMDk3LDU0ICsxMTE4LDMwIEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19kZXF1ZXVlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgCSAqIGludGVycnVwdCBmb3Igc2Vjb25kYXJ5 IHBvcnRzKS4KPiAgCSAqLwo+ICAJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gcXVl dWVfcHJpbyhleGVjbGlzdHMpOwo+ICsJR0VNX1RSQUNFKCIlczogcXVldWVfcHJpb3JpdHlfaGlu dDolZCwgc3VibWl0OiVzXG4iLAo+ICsJCSAgZW5naW5lLT5uYW1lLCBleGVjbGlzdHMtPnF1ZXVl X3ByaW9yaXR5X2hpbnQsCj4gKwkJICB5ZXNubyhzdWJtaXQpKTsKPiAgCj4gIAlpZiAoc3VibWl0 KSB7Cj4gLQkJcG9ydF9hc3NpZ24ocG9ydCwgbGFzdCk7Cj4gKwkJKnBvcnQgPSBleGVjbGlzdHNf c2NoZWR1bGVfaW4obGFzdCwgcG9ydCAtIGV4ZWNsaXN0cy0+cGVuZGluZyk7Cj4gKwkJbWVtc2V0 KHBvcnQgKyAxLCAwLCAobGFzdF9wb3J0IC0gcG9ydCkgKiBzaXplb2YoKnBvcnQpKTsKPiAgCQll eGVjbGlzdHNfc3VibWl0X3BvcnRzKGVuZ2luZSk7Cj4gIAl9Cj4gLQo+IC0JLyogV2UgbXVzdCBh bHdheXMga2VlcCB0aGUgYmVhc3QgZmVkIGlmIHdlIGhhdmUgd29yayBwaWxlZCB1cCAqLwo+IC0J R0VNX0JVR19PTihyYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpICYmCj4gLQkJICAg IXBvcnRfaXNzZXQoZXhlY2xpc3RzLT5wb3J0KSk7Cj4gLQo+IC0JLyogUmUtZXZhbHVhdGUgdGhl IGV4ZWN1dGluZyBjb250ZXh0IHNldHVwIGFmdGVyIGVhY2ggcHJlZW1wdGl2ZSBraWNrICovCj4g LQlpZiAobGFzdCkKPiAtCQlleGVjbGlzdHNfdXNlcl9iZWdpbihleGVjbGlzdHMsIGV4ZWNsaXN0 cy0+cG9ydCk7Cj4gLQo+IC0JLyogSWYgdGhlIGVuZ2luZSBpcyBub3cgaWRsZSwgc28gc2hvdWxk IGJlIHRoZSBmbGFnOyBhbmQgdmljZSB2ZXJzYS4gKi8KPiAtCUdFTV9CVUdfT04oZXhlY2xpc3Rz X2lzX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMsCj4gLQkJCQkgICAgICAgRVhFQ0xJU1RTX0FD VElWRV9VU0VSKSA9PQo+IC0JCSAgICFwb3J0X2lzc2V0KGVuZ2luZS0+ZXhlY2xpc3RzLnBvcnQp KTsKPiAgfQo+ICAKPiAgdm9pZAo+ICBleGVjbGlzdHNfY2FuY2VsX3BvcnRfcmVxdWVzdHMoc3Ry dWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMpCj4gIHsKPiAtCXN0 cnVjdCBleGVjbGlzdF9wb3J0ICpwb3J0ID0gZXhlY2xpc3RzLT5wb3J0Owo+IC0JdW5zaWduZWQg aW50IG51bV9wb3J0cyA9IGV4ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKTsKPiAtCj4gLQl3 aGlsZSAobnVtX3BvcnRzLS0gJiYgcG9ydF9pc3NldChwb3J0KSkgewo+IC0JCXN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxID0gcG9ydF9yZXF1ZXN0KHBvcnQpOwo+IC0KPiAtCQlHRU1fVFJBQ0UoIiVz OnBvcnQldSBmZW5jZSAlbGx4OiVsbGQsIChjdXJyZW50ICVkKVxuIiwKPiAtCQkJICBycS0+ZW5n aW5lLT5uYW1lLAo+IC0JCQkgICh1bnNpZ25lZCBpbnQpKHBvcnQgLSBleGVjbGlzdHMtPnBvcnQp LAo+IC0JCQkgIHJxLT5mZW5jZS5jb250ZXh0LCBycS0+ZmVuY2Uuc2Vxbm8sCj4gLQkJCSAgaHdz cF9zZXFubyhycSkpOwo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpwb3J0LCAqcnE7 Cj4gIAo+IC0JCUdFTV9CVUdfT04oIWV4ZWNsaXN0cy0+YWN0aXZlKTsKPiAtCQlleGVjbGlzdHNf Y29udGV4dF9zY2hlZHVsZV9vdXQocnEsCj4gLQkJCQkJICAgICAgIGk5MTVfcmVxdWVzdF9jb21w bGV0ZWQocnEpID8KPiAtCQkJCQkgICAgICAgSU5URUxfQ09OVEVYVF9TQ0hFRFVMRV9PVVQgOgo+ IC0JCQkJCSAgICAgICBJTlRFTF9DT05URVhUX1NDSEVEVUxFX1BSRUVNUFRFRCk7Cj4gKwlmb3Ig KHBvcnQgPSBleGVjbGlzdHMtPnBlbmRpbmc7IChycSA9ICpwb3J0KTsgcG9ydCsrKQo+ICsJCWV4 ZWNsaXN0c19zY2hlZHVsZV9vdXQocnEpOwo+ICsJbWVtc2V0KGV4ZWNsaXN0cy0+cGVuZGluZywg MCwgc2l6ZW9mKGV4ZWNsaXN0cy0+cGVuZGluZykpOwo+ICAKPiAtCQlpOTE1X3JlcXVlc3RfcHV0 KHJxKTsKPiAtCj4gLQkJbWVtc2V0KHBvcnQsIDAsIHNpemVvZigqcG9ydCkpOwo+IC0JCXBvcnQr KzsKPiAtCX0KPiAtCj4gLQlleGVjbGlzdHNfY2xlYXJfYWxsX2FjdGl2ZShleGVjbGlzdHMpOwo+ ICsJZm9yIChwb3J0ID0gZXhlY2xpc3RzLT5hY3RpdmU7IChycSA9ICpwb3J0KTsgcG9ydCsrKQo+ ICsJCWV4ZWNsaXN0c19zY2hlZHVsZV9vdXQocnEpOwo+ICsJZXhlY2xpc3RzLT5hY3RpdmUgPQo+ ICsJCW1lbXNldChleGVjbGlzdHMtPmluZmxpZ2h0LCAwLCBzaXplb2YoZXhlY2xpc3RzLT5pbmZs aWdodCkpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgaW5saW5lIHZvaWQKPiBAQCAtMTE2Myw3ICsxMTYw LDYgQEAgcmVzZXRfaW5fcHJvZ3Jlc3MoY29uc3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlz dHMgKmV4ZWNsaXN0cykKPiAgc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+ICB7Cj4gIAlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAq IGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiAtCXN0cnVjdCBleGVjbGlz dF9wb3J0ICpwb3J0ID0gZXhlY2xpc3RzLT5wb3J0Owo+ICAJY29uc3QgdTMyICogY29uc3QgYnVm ID0gZXhlY2xpc3RzLT5jc2Jfc3RhdHVzOwo+ICAJY29uc3QgdTggbnVtX2VudHJpZXMgPSBleGVj bGlzdHMtPmNzYl9zaXplOwo+ICAJdTggaGVhZCwgdGFpbDsKPiBAQCAtMTE5OCw5ICsxMTk0LDcg QEAgc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAJcm1iKCk7Cj4gIAo+ICAJZG8gewo+IC0JCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ ICAJCXVuc2lnbmVkIGludCBzdGF0dXM7Cj4gLQkJdW5zaWduZWQgaW50IGNvdW50Owo+ICAKPiAg CQlpZiAoKytoZWFkID09IG51bV9lbnRyaWVzKQo+ICAJCQloZWFkID0gMDsKPiBAQCAtMTIyMyw2 OCArMTIxNywzNyBAQCBzdGF0aWMgdm9pZCBwcm9jZXNzX2NzYihzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gIAkJICogc3RhdHVzIG5vdGlmaWVyLgo+ICAJCSAqLwo+ICAKPiAtCQlH RU1fVFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1cz0weCUwOHg6MHglMDh4LCBhY3RpdmU9MHgleFxu IiwKPiArCQlHRU1fVFJBQ0UoIiVzIGNzYlslZF06IHN0YXR1cz0weCUwOHg6MHglMDh4XG4iLAo+ ICAJCQkgIGVuZ2luZS0+bmFtZSwgaGVhZCwKPiAtCQkJICBidWZbMiAqIGhlYWQgKyAwXSwgYnVm WzIgKiBoZWFkICsgMV0sCj4gLQkJCSAgZXhlY2xpc3RzLT5hY3RpdmUpOwo+ICsJCQkgIGJ1Zlsy ICogaGVhZCArIDBdLCBidWZbMiAqIGhlYWQgKyAxXSk7Cj4gIAo+ICAJCXN0YXR1cyA9IGJ1Zlsy ICogaGVhZF07Cj4gLQkJaWYgKHN0YXR1cyAmIChHRU44X0NUWF9TVEFUVVNfSURMRV9BQ1RJVkUg fAo+IC0JCQkgICAgICBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKSkKPiAtCQkJZXhlY2xpc3Rz X3NldF9hY3RpdmUoZXhlY2xpc3RzLAo+IC0JCQkJCSAgICAgRVhFQ0xJU1RTX0FDVElWRV9IV0FD Syk7Cj4gLQkJaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19BQ1RJVkVfSURMRSkKPiAtCQkJ ZXhlY2xpc3RzX2NsZWFyX2FjdGl2ZShleGVjbGlzdHMsCj4gLQkJCQkJICAgICAgIEVYRUNMSVNU U19BQ1RJVkVfSFdBQ0spOwo+IC0KPiAtCQlpZiAoIShzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNf Q09NUExFVEVEX01BU0spKQo+IC0JCQljb250aW51ZTsKPiArCQlpZiAoc3RhdHVzICYgR0VOOF9D VFhfU1RBVFVTX0lETEVfQUNUSVZFKSB7Cj4gK3Byb21vdGU6Cj4gKwkJCUdFTV9CVUdfT04oIWFz c2VydF9wZW5kaW5nX3ZhbGlkKGV4ZWNsaXN0cywgInByb21vdGUiKSk7Cj4gKwkJCWV4ZWNsaXN0 cy0+YWN0aXZlID0KPiArCQkJCW1lbWNweShleGVjbGlzdHMtPmluZmxpZ2h0LAo+ICsJCQkJICAg ICAgIGV4ZWNsaXN0cy0+cGVuZGluZywKPiArCQkJCSAgICAgICBleGVjbGlzdHNfbnVtX3BvcnRz KGV4ZWNsaXN0cykgKgo+ICsJCQkJICAgICAgIHNpemVvZigqZXhlY2xpc3RzLT5wZW5kaW5nKSk7 Cj4gKwkJCWV4ZWNsaXN0cy0+cGVuZGluZ1swXSA9IE5VTEw7CgpJIGNhbid0IGRlY2lkZSBpZiBj b21tZW50IG9yIGEgaGVscGVyIGlubGluZSBmdW5jdGlvbiB3b3VsZApzZXJ2ZSBiZXR0ZXIgYXMg ZG9jdW1lbnRhdGlvbiBvZiBiZXR3ZWVuIGluZmxpZ2h0IGFuZCBwZW5kaW5nCm1vdmVtZW50LgoK SSBndWVzcyBpdCBpcyBiZXR0ZXIgdG8gYmUgbGVmdCBhcyBhIGZ1dHVyZSB3b3JrIGFmdGVyCnRo ZSBkdXN0IHNldHRsZXMuCgpKdXN0IGdlbmVyYWwgeWVhcm5pbmcgZm9yIGEgc2ltaWxhciBraW5k IG9mIGxldmVsIG9mIGRvY3VtZW50YXRpb24Kc3RlcHMgYXMgaW4gZGVxdWV1ZS4KCj4gIAo+IC0J CS8qIFdlIHNob3VsZCBuZXZlciBnZXQgYSBDT01QTEVURUQgfCBJRExFX0FDVElWRSEgKi8KPiAt CQlHRU1fQlVHX09OKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19JRExFX0FDVElWRSk7CgpJcyBv dXIgYXNzZXJ0IGNvdmVyYWdlIGdvaW5nIHRvIHN1ZmZlcj8KCj4gKwkJCWlmICghaW5qZWN0X3By ZWVtcHRfaGFuZyhleGVjbGlzdHMpKQo+ICsJCQkJcmluZ19wYXVzZShlbmdpbmUpID0gMDsKPiAr CQl9IGVsc2UgaWYgKHN0YXR1cyAmIEdFTjhfQ1RYX1NUQVRVU19QUkVFTVBURUQpIHsKPiArCQkJ c3RydWN0IGk5MTVfcmVxdWVzdCAqIGNvbnN0ICpwb3J0ID0gZXhlY2xpc3RzLT5hY3RpdmU7Cj4g IAo+IC0JCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfQ09NUExFVEUgJiYKPiAtCQkgICAg YnVmWzIqaGVhZCArIDFdID09IGV4ZWNsaXN0cy0+cHJlZW1wdF9jb21wbGV0ZV9zdGF0dXMpIHsK PiAtCQkJR0VNX1RSQUNFKCIlcyBwcmVlbXB0LWlkbGVcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQkJ CWNvbXBsZXRlX3ByZWVtcHRfY29udGV4dChleGVjbGlzdHMpOwo+IC0JCQljb250aW51ZTsKPiAt CQl9Cj4gLQo+IC0JCWlmIChzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEICYmCj4g LQkJICAgIGV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+IC0JCQkJCUVYRUNMSVNUU19B Q1RJVkVfUFJFRU1QVCkpCj4gLQkJCWNvbnRpbnVlOwo+ICsJCQl0cmFjZV9wb3J0cyhleGVjbGlz dHMsICJwcmVlbXB0ZWQiLCBleGVjbGlzdHMtPmFjdGl2ZSk7Cj4gIAo+IC0JCUdFTV9CVUdfT04o IWV4ZWNsaXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLAo+IC0JCQkJCQlFWEVDTElTVFNfQUNUSVZF X1VTRVIpKTsKPiArCQkJd2hpbGUgKCpwb3J0KQo+ICsJCQkJZXhlY2xpc3RzX3NjaGVkdWxlX291 dCgqcG9ydCsrKTsKPiAgCj4gLQkJcnEgPSBwb3J0X3VucGFjayhwb3J0LCAmY291bnQpOwo+IC0J CUdFTV9UUkFDRSgiJXMgb3V0WzBdOiBjdHg9JWQuJWQsIGZlbmNlICVsbHg6JWxsZCAoY3VycmVu dCAlZCksIHByaW89JWRcbiIsCj4gLQkJCSAgZW5naW5lLT5uYW1lLAo+IC0JCQkgIHBvcnQtPmNv bnRleHRfaWQsIGNvdW50LAo+IC0JCQkgIHJxID8gcnEtPmZlbmNlLmNvbnRleHQgOiAwLAo+IC0J CQkgIHJxID8gcnEtPmZlbmNlLnNlcW5vIDogMCwKPiAtCQkJICBycSA/IGh3c3Bfc2Vxbm8ocnEp IDogMCwKPiAtCQkJICBycSA/IHJxX3ByaW8ocnEpIDogMCk7Cj4gKwkJCWdvdG8gcHJvbW90ZTsK PiArCQl9IGVsc2UgaWYgKCpleGVjbGlzdHMtPmFjdGl2ZSkgewo+ICsJCQlzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpycSA9ICpleGVjbGlzdHMtPmFjdGl2ZSsrOwo+ICAKPiAtCQkvKiBDaGVjayB0aGUg Y29udGV4dC9kZXNjIGlkIGZvciB0aGlzIGV2ZW50IG1hdGNoZXMgKi8KPiAtCQlHRU1fREVCVUdf QlVHX09OKGJ1ZlsyICogaGVhZCArIDFdICE9IHBvcnQtPmNvbnRleHRfaWQpOwo+IC0KPiAtCQlH RU1fQlVHX09OKGNvdW50ID09IDApOwo+IC0JCWlmICgtLWNvdW50ID09IDApIHsKPiAtCQkJLyoK PiAtCQkJICogT24gdGhlIGZpbmFsIGV2ZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlCj4gLQkJCSAq IHN1Ym1pc3Npb24gb2YgdGhpcyBjb250ZXh0LCB3ZSBleHBlY3QgZWl0aGVyCj4gLQkJCSAqIGFu IGVsZW1lbnQtc3dpdGNoIGV2ZW50IG9yIGEgY29tcGxldGlvbgo+IC0JCQkgKiBldmVudCAoYW5k IG9uIGNvbXBsZXRpb24sIHRoZSBhY3RpdmUtaWRsZQo+IC0JCQkgKiBtYXJrZXIpLiBObyBtb3Jl IHByZWVtcHRpb25zLCBsaXRlLXJlc3RvcmUKPiAtCQkJICogb3Igb3RoZXJ3aXNlLgo+IC0JCQkg Ki8KPiAtCQkJR0VNX0JVR19PTihzdGF0dXMgJiBHRU44X0NUWF9TVEFUVVNfUFJFRU1QVEVEKTsK PiAtCQkJR0VNX0JVR19PTihwb3J0X2lzc2V0KCZwb3J0WzFdKSAmJgo+IC0JCQkJICAgIShzdGF0 dXMgJiBHRU44X0NUWF9TVEFUVVNfRUxFTUVOVF9TV0lUQ0gpKTsKPiAtCQkJR0VNX0JVR19PTigh cG9ydF9pc3NldCgmcG9ydFsxXSkgJiYKPiAtCQkJCSAgICEoc3RhdHVzICYgR0VOOF9DVFhfU1RB VFVTX0FDVElWRV9JRExFKSk7Cj4gKwkJCXRyYWNlX3BvcnRzKGV4ZWNsaXN0cywgImNvbXBsZXRl ZCIsCj4gKwkJCQkgICAgZXhlY2xpc3RzLT5hY3RpdmUgLSAxKTsKPiAgCj4gIAkJCS8qCj4gIAkJ CSAqIFdlIHJlbHkgb24gdGhlIGhhcmR3YXJlIGJlaW5nIHN0cm9uZ2x5Cj4gQEAgLTEyOTMsMjEg KzEyNTYsMTAgQEAgc3RhdGljIHZvaWQgcHJvY2Vzc19jc2Ioc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICAJCQkgKiB1c2VyIGludGVycnVwdCBhbmQgQ1NCIGlzIHByb2Nlc3NlZC4K PiAgCQkJICovCj4gIAkJCUdFTV9CVUdfT04oIWk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKTsK PiArCQkJZXhlY2xpc3RzX3NjaGVkdWxlX291dChycSk7Cj4gIAo+IC0JCQlleGVjbGlzdHNfY29u dGV4dF9zY2hlZHVsZV9vdXQocnEsCj4gLQkJCQkJCSAgICAgICBJTlRFTF9DT05URVhUX1NDSEVE VUxFX09VVCk7Cj4gLQkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+IC0KPiAtCQkJR0VNX1RSQUNF KCIlcyBjb21wbGV0ZWQgY3R4PSVkXG4iLAo+IC0JCQkJICBlbmdpbmUtPm5hbWUsIHBvcnQtPmNv bnRleHRfaWQpOwo+IC0KPiAtCQkJcG9ydCA9IGV4ZWNsaXN0c19wb3J0X2NvbXBsZXRlKGV4ZWNs aXN0cywgcG9ydCk7Cj4gLQkJCWlmIChwb3J0X2lzc2V0KHBvcnQpKQo+IC0JCQkJZXhlY2xpc3Rz X3VzZXJfYmVnaW4oZXhlY2xpc3RzLCBwb3J0KTsKPiAtCQkJZWxzZQo+IC0JCQkJZXhlY2xpc3Rz X3VzZXJfZW5kKGV4ZWNsaXN0cyk7Cj4gLQkJfSBlbHNlIHsKPiAtCQkJcG9ydF9zZXQocG9ydCwg cG9ydF9wYWNrKHJxLCBjb3VudCkpOwo+ICsJCQlHRU1fQlVHX09OKGV4ZWNsaXN0cy0+YWN0aXZl IC0gZXhlY2xpc3RzLT5pbmZsaWdodCA+Cj4gKwkJCQkgICBleGVjbGlzdHNfbnVtX3BvcnRzKGV4 ZWNsaXN0cykpOwo+ICAJCX0KPiAgCX0gd2hpbGUgKGhlYWQgIT0gdGFpbCk7Cj4gIAo+IEBAIC0x MzMyLDcgKzEyODQsNyBAQCBzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2ts ZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqY29uc3QgZW5naW5lKQo+ICAJbG9ja2RlcF9hc3Nl cnRfaGVsZCgmZW5naW5lLT5hY3RpdmUubG9jayk7Cj4gIAo+ICAJcHJvY2Vzc19jc2IoZW5naW5l KTsKPiAtCWlmICghZXhlY2xpc3RzX2lzX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMsIEVYRUNM SVNUU19BQ1RJVkVfUFJFRU1QVCkpCj4gKwlpZiAoIWVuZ2luZS0+ZXhlY2xpc3RzLnBlbmRpbmdb MF0pCj4gIAkJZXhlY2xpc3RzX2RlcXVldWUoZW5naW5lKTsKPiAgfQo+ICAKPiBAQCAtMTM0NSwx MSArMTI5Nyw2IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19zdWJtaXNzaW9uX3Rhc2tsZXQodW5z aWduZWQgbG9uZyBkYXRhKQo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqIGNvbnN0IGVuZ2lu ZSA9IChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICopZGF0YTsKPiAgCXVuc2lnbmVkIGxvbmcgZmxh Z3M7Cj4gIAo+IC0JR0VNX1RSQUNFKCIlcyBhd2FrZT89JWQsIGFjdGl2ZT0leFxuIiwKPiAtCQkg IGVuZ2luZS0+bmFtZSwKPiAtCQkgICEhaW50ZWxfd2FrZXJlZl9hY3RpdmUoJmVuZ2luZS0+d2Fr ZXJlZiksCj4gLQkJICBlbmdpbmUtPmV4ZWNsaXN0cy5hY3RpdmUpOwo+IC0KPiAgCXNwaW5fbG9j a19pcnFzYXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gIAlfX2V4ZWNsaXN0c19z dWJtaXNzaW9uX3Rhc2tsZXQoZW5naW5lKTsKPiAgCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmVu Z2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKPiBAQCAtMTM3NiwxMiArMTMyMywxNiBAQCBzdGF0 aWMgdm9pZCBfX3N1Ym1pdF9xdWV1ZV9pbW0oc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAJCXRhc2tsZXRfaGlfc2NoZWR1bGUoJmV4ZWNsaXN0cy0+dGFza2xldCk7Cj4gIH0KPiAg Cj4gLXN0YXRpYyB2b2lkIHN1Ym1pdF9xdWV1ZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUsIGludCBwcmlvKQo+ICtzdGF0aWMgdm9pZCBzdWJtaXRfcXVldWUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLAo+ICsJCQkgY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4g IHsKPiAtCWlmIChwcmlvID4gZW5naW5lLT5leGVjbGlzdHMucXVldWVfcHJpb3JpdHlfaGludCkg ewo+IC0JCWVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBwcmlvOwo+IC0J CV9fc3VibWl0X3F1ZXVlX2ltbShlbmdpbmUpOwo+IC0JfQo+ICsJc3RydWN0IGludGVsX2VuZ2lu ZV9leGVjbGlzdHMgKmV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiArCj4gKwlpZiAo cnFfcHJpbyhycSkgPD0gZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50KQo+ICsJCXJldHVy bjsKPiArCj4gKwlleGVjbGlzdHMtPnF1ZXVlX3ByaW9yaXR5X2hpbnQgPSBycV9wcmlvKHJxKTsK PiArCV9fc3VibWl0X3F1ZXVlX2ltbShlbmdpbmUpOwo+ICB9Cj4gIAo+ICBzdGF0aWMgdm9pZCBl eGVjbGlzdHNfc3VibWl0X3JlcXVlc3Qoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCkKPiBA QCAtMTM5Nyw3ICsxMzQ4LDcgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX3N1Ym1pdF9yZXF1ZXN0 KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QpCj4gIAlHRU1fQlVHX09OKFJCX0VNUFRZX1JP T1QoJmVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlLnJiX3Jvb3QpKTsKPiAgCUdFTV9CVUdfT04obGlz dF9lbXB0eSgmcmVxdWVzdC0+c2NoZWQubGluaykpOwo+ICAKPiAtCXN1Ym1pdF9xdWV1ZShlbmdp bmUsIHJxX3ByaW8ocmVxdWVzdCkpOwo+ICsJc3VibWl0X3F1ZXVlKGVuZ2luZSwgcmVxdWVzdCk7 Cj4gIAo+ICAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxh Z3MpOwo+ICB9Cj4gQEAgLTIwNDgsMjcgKzE5OTksMTMgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3Rz X3Jlc2V0X3ByZXBhcmUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmZW5naW5lLT5hY3RpdmUubG9jaywgZmxhZ3MpOwo+ICB9Cj4gIAo+ IC1zdGF0aWMgYm9vbCBscmNfcmVnc19vayhjb25zdCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkK PiAtewo+IC0JY29uc3Qgc3RydWN0IGludGVsX3JpbmcgKnJpbmcgPSBycS0+cmluZzsKPiAtCWNv bnN0IHUzMiAqcmVncyA9IHJxLT5od19jb250ZXh0LT5scmNfcmVnX3N0YXRlOwo+IC0KPiAtCS8q IFF1aWNrIHNwb3QgY2hlY2sgZm9yIHRoZSBjb21tb24gc2lnbnMgb2YgY29udGV4dCBjb3JydXB0 aW9uICovCj4gLQo+IC0JaWYgKHJlZ3NbQ1RYX1JJTkdfQlVGRkVSX0NPTlRST0wgKyAxXSAhPQo+ IC0JICAgIChSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJRCkpCj4gLQkJcmV0 dXJuIGZhbHNlOwo+IC0KPiAtCWlmIChyZWdzW0NUWF9SSU5HX0JVRkZFUl9TVEFSVCArIDFdICE9 IGk5MTVfZ2d0dF9vZmZzZXQocmluZy0+dm1hKSkKPiAtCQlyZXR1cm4gZmFsc2U7Cj4gLQo+IC0J cmV0dXJuIHRydWU7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIHJlc2V0X2NzYl9wb2ludGVycyhz dHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3RzKQo+ICtzdGF0aWMgdm9pZCBy ZXNldF9jc2JfcG9pbnRlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICB7Cj4g KwlzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0cyA9ICZlbmdp bmUtPmV4ZWNsaXN0czsKPiAgCWNvbnN0IHVuc2lnbmVkIGludCByZXNldF92YWx1ZSA9IGV4ZWNs aXN0cy0+Y3NiX3NpemUgLSAxOwo+ICAKPiArCXJpbmdfcGF1c2UoZW5naW5lKSA9IDA7Cj4gKwo+ ICAJLyoKPiAgCSAqIEFmdGVyIGEgcmVzZXQsIHRoZSBIVyBzdGFydHMgd3JpdGluZyBpbnRvIENT QiBlbnRyeSBbMF0uIFdlCj4gIAkgKiB0aGVyZWZvcmUgaGF2ZSB0byBzZXQgb3VyIEhFQUQgcG9p bnRlciBiYWNrIG9uZSBlbnRyeSBzbyB0aGF0Cj4gQEAgLTIxMTUsMTggKzIwNTIsMjEgQEAgc3Rh dGljIHZvaWQgX19leGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l LCBib29sIHN0YWxsZWQpCj4gIAlwcm9jZXNzX2NzYihlbmdpbmUpOyAvKiBkcmFpbiBwcmVlbXB0 aW9uIGV2ZW50cyAqLwo+ICAKPiAgCS8qIEZvbGxvd2luZyB0aGUgcmVzZXQsIHdlIG5lZWQgdG8g cmVsb2FkIHRoZSBDU0IgcmVhZC93cml0ZSBwb2ludGVycyAqLwo+IC0JcmVzZXRfY3NiX3BvaW50 ZXJzKCZlbmdpbmUtPmV4ZWNsaXN0cyk7Cj4gKwlyZXNldF9jc2JfcG9pbnRlcnMoZW5naW5lKTsK PiAgCj4gIAkvKgo+ICAJICogU2F2ZSB0aGUgY3VycmVudGx5IGV4ZWN1dGluZyBjb250ZXh0LCBl dmVuIGlmIHdlIGNvbXBsZXRlZAo+ICAJICogaXRzIHJlcXVlc3QsIGl0IHdhcyBzdGlsbCBydW5u aW5nIGF0IHRoZSB0aW1lIG9mIHRoZQo+ICAJICogcmVzZXQgYW5kIHdpbGwgaGF2ZSBiZWVuIGNs b2JiZXJlZC4KPiAgCSAqLwo+IC0JaWYgKCFwb3J0X2lzc2V0KGV4ZWNsaXN0cy0+cG9ydCkpCj4g LQkJZ290byBvdXRfY2xlYXI7Cj4gKwlycSA9IGV4ZWNsaXN0c19hY3RpdmUoZXhlY2xpc3RzKTsK PiArCWlmICghcnEpCj4gKwkJcmV0dXJuOwo+ICAKPiAtCXJxID0gcG9ydF9yZXF1ZXN0KGV4ZWNs aXN0cy0+cG9ydCk7Cj4gIAljZSA9IHJxLT5od19jb250ZXh0Owo+ICsJR0VNX0JVR19PTihpOTE1 X2FjdGl2ZV9pc19pZGxlKCZjZS0+YWN0aXZlKSk7Cj4gKwlHRU1fQlVHX09OKCFpOTE1X3ZtYV9p c19waW5uZWQoY2UtPnN0YXRlKSk7Cj4gKwlycSA9IGFjdGl2ZV9yZXF1ZXN0KHJxKTsKPiAgCj4g IAkvKgo+ICAJICogQ2F0Y2ggdXAgd2l0aCBhbnkgbWlzc2VkIGNvbnRleHQtc3dpdGNoIGludGVy cnVwdHMuCj4gQEAgLTIxMzksOSArMjA3OSwxMiBAQCBzdGF0aWMgdm9pZCBfX2V4ZWNsaXN0c19y ZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKPiAgCSAq Lwo+ICAJZXhlY2xpc3RzX2NhbmNlbF9wb3J0X3JlcXVlc3RzKGV4ZWNsaXN0cyk7Cj4gIAo+IC0J cnEgPSBhY3RpdmVfcmVxdWVzdChycSk7Cj4gLQlpZiAoIXJxKQo+ICsJaWYgKCFycSkgewo+ICsJ CWNlLT5yaW5nLT5oZWFkID0gY2UtPnJpbmctPnRhaWw7Cj4gIAkJZ290byBvdXRfcmVwbGF5Owo+ ICsJfQo+ICsKPiArCWNlLT5yaW5nLT5oZWFkID0gaW50ZWxfcmluZ193cmFwKGNlLT5yaW5nLCBy cS0+aGVhZCk7Cj4gIAo+ICAJLyoKPiAgCSAqIElmIHRoaXMgcmVxdWVzdCBoYXNuJ3Qgc3RhcnRl ZCB5ZXQsIGUuZy4gaXQgaXMgd2FpdGluZyBvbiBhCj4gQEAgLTIxNTUsNyArMjA5OCw3IEBAIHN0 YXRpYyB2b2lkIF9fZXhlY2xpc3RzX3Jlc2V0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSwgYm9vbCBzdGFsbGVkKQo+ICAJICogT3RoZXJ3aXNlLCBpZiB3ZSBoYXZlIG5vdCBzdGFydGVk IHlldCwgdGhlIHJlcXVlc3Qgc2hvdWxkIHJlcGxheQo+ICAJICogcGVyZmVjdGx5IGFuZCB3ZSBk byBub3QgbmVlZCB0byBmbGFnIHRoZSByZXN1bHQgYXMgYmVpbmcgZXJyb25lb3VzLgo+ICAJICov Cj4gLQlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSAmJiBscmNfcmVnc19vayhycSkpCj4g KwlpZiAoIWk5MTVfcmVxdWVzdF9zdGFydGVkKHJxKSkKPiAgCQlnb3RvIG91dF9yZXBsYXk7Cj4g IAo+ICAJLyoKPiBAQCAtMjE3MCw3ICsyMTEzLDcgQEAgc3RhdGljIHZvaWQgX19leGVjbGlzdHNf cmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBib29sIHN0YWxsZWQpCj4gIAkg KiBpbWFnZSBiYWNrIHRvIHRoZSBleHBlY3RlZCB2YWx1ZXMgdG8gc2tpcCBvdmVyIHRoZSBndWls dHkgcmVxdWVzdC4KPiAgCSAqLwo+ICAJaTkxNV9yZXNldF9yZXF1ZXN0KHJxLCBzdGFsbGVkKTsK PiAtCWlmICghc3RhbGxlZCAmJiBscmNfcmVnc19vayhycSkpCj4gKwlpZiAoIXN0YWxsZWQpCj4g IAkJZ290byBvdXRfcmVwbGF5Owo+ICAKPiAgCS8qCj4gQEAgLTIxOTAsMTcgKzIxMzMsMTMgQEAg c3RhdGljIHZvaWQgX19leGVjbGlzdHNfcmVzZXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lLCBib29sIHN0YWxsZWQpCj4gIAlleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUocmVncywgY2Us IGVuZ2luZSwgY2UtPnJpbmcpOwo+ICAKPiAgb3V0X3JlcGxheToKPiAtCS8qIFJlcnVuIHRoZSBy ZXF1ZXN0OyBpdHMgcGF5bG9hZCBoYXMgYmVlbiBuZXV0ZXJlZCAoaWYgZ3VpbHR5KS4gKi8KPiAt CWNlLT5yaW5nLT5oZWFkID0KPiAtCQlycSA/IGludGVsX3Jpbmdfd3JhcChjZS0+cmluZywgcnEt PmhlYWQpIDogY2UtPnJpbmctPnRhaWw7Cj4gKwlHRU1fVFJBQ0UoIiVzIHJlcGxheSB7aGVhZDol MDR4LCB0YWlsOiUwNHhcbiIsCj4gKwkJICBlbmdpbmUtPm5hbWUsIGNlLT5yaW5nLT5oZWFkLCBj ZS0+cmluZy0+dGFpbCk7Cj4gIAlpbnRlbF9yaW5nX3VwZGF0ZV9zcGFjZShjZS0+cmluZyk7Cj4g IAlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwo+ICAKPiAgCS8qIFB1 c2ggYmFjayBhbnkgaW5jb21wbGV0ZSByZXF1ZXN0cyBmb3IgcmVwbGF5IGFmdGVyIHRoZSByZXNl dC4gKi8KPiAgCV9fdW53aW5kX2luY29tcGxldGVfcmVxdWVzdHMoZW5naW5lKTsKPiAtCj4gLW91 dF9jbGVhcjoKPiAtCWV4ZWNsaXN0c19jbGVhcl9hbGxfYWN0aXZlKGV4ZWNsaXN0cyk7Cj4gIH0K PiAgCj4gIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19yZXNldChzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsIGJvb2wgc3RhbGxlZCkKPiBAQCAtMjI5Niw3ICsyMjM1LDYgQEAgc3RhdGljIHZv aWQgZXhlY2xpc3RzX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdp bmUpCj4gIAo+ICAJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9oaW50ID0gSU5UX01JTjsKPiAg CWV4ZWNsaXN0cy0+cXVldWUgPSBSQl9ST09UX0NBQ0hFRDsKPiAtCUdFTV9CVUdfT04ocG9ydF9p c3NldChleGVjbGlzdHMtPnBvcnQpKTsKPiAgCj4gIAlHRU1fQlVHX09OKF9fdGFza2xldF9pc19l bmFibGVkKCZleGVjbGlzdHMtPnRhc2tsZXQpKTsKPiAgCWV4ZWNsaXN0cy0+dGFza2xldC5mdW5j ID0gbm9wX3N1Ym1pc3Npb25fdGFza2xldDsKPiBAQCAtMjUxNCwxNSArMjQ1MiwyOSBAQCBzdGF0 aWMgdTMyICpnZW44X2VtaXRfd2FfdGFpbChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0LCB1 MzIgKmNzKQo+ICAJcmV0dXJuIGNzOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdTMyICplbWl0X3ByZWVt cHRfYnVzeXdhaXQoc3RydWN0IGk5MTVfcmVxdWVzdCAqcmVxdWVzdCwgdTMyICpjcykKPiArewo+ ICsJKmNzKysgPSBNSV9TRU1BUEhPUkVfV0FJVCB8Cj4gKwkJTUlfU0VNQVBIT1JFX0dMT0JBTF9H VFQgfAo+ICsJCU1JX1NFTUFQSE9SRV9QT0xMIHwKPiArCQlNSV9TRU1BUEhPUkVfU0FEX0VRX1NE RDsKPiArCSpjcysrID0gMDsKPiArCSpjcysrID0gaW50ZWxfaHdzX3ByZWVtcHRfYWRkcmVzcyhy ZXF1ZXN0LT5lbmdpbmUpOwo+ICsJKmNzKysgPSAwOwo+ICsKPiArCXJldHVybiBjczsKPiArfQo+ ICsKPiAgc3RhdGljIHUzMiAqZ2VuOF9lbWl0X2ZpbmlfYnJlYWRjcnVtYihzdHJ1Y3QgaTkxNV9y ZXF1ZXN0ICpyZXF1ZXN0LCB1MzIgKmNzKQo+ICB7Cj4gIAljcyA9IGdlbjhfZW1pdF9nZ3R0X3dy aXRlKGNzLAo+ICAJCQkJICByZXF1ZXN0LT5mZW5jZS5zZXFubywKPiAgCQkJCSAgcmVxdWVzdC0+ dGltZWxpbmUtPmh3c3Bfb2Zmc2V0LAo+ICAJCQkJICAwKTsKPiAtCj4gIAkqY3MrKyA9IE1JX1VT RVJfSU5URVJSVVBUOwo+ICsKPiAgCSpjcysrID0gTUlfQVJCX09OX09GRiB8IE1JX0FSQl9FTkFC TEU7CgpUaGlzIHdhcyBkaXNjdXNzZWQgaW4gaXJjLCBjb3VsZCB3YXJyYW50IGEgY29tbWVudCBo ZXJlIG9mCndoeSB0aGlzIGlzIG5lZWRlZC4gUHJlY2lvdXMgaW5mby4KCj4gKwljcyA9IGVtaXRf cHJlZW1wdF9idXN5d2FpdChyZXF1ZXN0LCBjcyk7Cj4gIAo+ICAJcmVxdWVzdC0+dGFpbCA9IGlu dGVsX3Jpbmdfb2Zmc2V0KHJlcXVlc3QsIGNzKTsKPiAgCWFzc2VydF9yaW5nX3RhaWxfdmFsaWQo cmVxdWVzdC0+cmluZywgcmVxdWVzdC0+dGFpbCk7Cj4gQEAgLTI1NDMsOSArMjQ5NSwxMCBAQCBz dGF0aWMgdTMyICpnZW44X2VtaXRfZmluaV9icmVhZGNydW1iX3JjcyhzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpyZXF1ZXN0LCB1MzIgKmNzKQo+ICAJCQkJICAgIFBJUEVfQ09OVFJPTF9GTFVTSF9FTkFC TEUgfAo+ICAJCQkJICAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCwKPiAgCQkJCSAgICAwKTsKPiAt Cj4gIAkqY3MrKyA9IE1JX1VTRVJfSU5URVJSVVBUOwo+ICsKPiAgCSpjcysrID0gTUlfQVJCX09O X09GRiB8IE1JX0FSQl9FTkFCTEU7CgpDb21tZW50IGNvdWxkIGJlIGNvcGllZCBoZXJlLiBPciBh IGNvbW1vbiBoZWxwZXIgY3JlYXRlZCBmb3IgY29tbW9uIHBhcnRzLgoKLU1pa2EKCj4gKwljcyA9 IGVtaXRfcHJlZW1wdF9idXN5d2FpdChyZXF1ZXN0LCBjcyk7Cj4gIAo+ICAJcmVxdWVzdC0+dGFp bCA9IGludGVsX3Jpbmdfb2Zmc2V0KHJlcXVlc3QsIGNzKTsKPiAgCWFzc2VydF9yaW5nX3RhaWxf dmFsaWQocmVxdWVzdC0+cmluZywgcmVxdWVzdC0+dGFpbCk7Cj4gQEAgLTI1OTQsOCArMjU0Nyw3 IEBAIHZvaWQgaW50ZWxfZXhlY2xpc3RzX3NldF9kZWZhdWx0X3N1Ym1pc3Npb24oc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJZW5naW5lLT5mbGFncyB8PSBJOTE1X0VOR0lORV9T VVBQT1JUU19TVEFUUzsKPiAgCWlmICghaW50ZWxfdmdwdV9hY3RpdmUoZW5naW5lLT5pOTE1KSkK PiAgCQllbmdpbmUtPmZsYWdzIHw9IEk5MTVfRU5HSU5FX0hBU19TRU1BUEhPUkVTOwo+IC0JaWYg KGVuZ2luZS0+cHJlZW1wdF9jb250ZXh0ICYmCj4gLQkgICAgSEFTX0xPR0lDQUxfUklOR19QUkVF TVBUSU9OKGVuZ2luZS0+aTkxNSkpCj4gKwlpZiAoSEFTX0xPR0lDQUxfUklOR19QUkVFTVBUSU9O KGVuZ2luZS0+aTkxNSkpCj4gIAkJZW5naW5lLT5mbGFncyB8PSBJOTE1X0VOR0lORV9IQVNfUFJF RU1QVElPTjsKPiAgfQo+ICAKPiBAQCAtMjcxOCwxMSArMjY3MCw2IEBAIGludCBpbnRlbF9leGVj bGlzdHNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAg CQkJaTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19FTFNQKGJhc2UpKTsKPiAgCX0KPiAgCj4gLQll eGVjbGlzdHMtPnByZWVtcHRfY29tcGxldGVfc3RhdHVzID0gfjB1Owo+IC0JaWYgKGVuZ2luZS0+ cHJlZW1wdF9jb250ZXh0KQo+IC0JCWV4ZWNsaXN0cy0+cHJlZW1wdF9jb21wbGV0ZV9zdGF0dXMg PQo+IC0JCQl1cHBlcl8zMl9iaXRzKGVuZ2luZS0+cHJlZW1wdF9jb250ZXh0LT5scmNfZGVzYyk7 Cj4gLQo+ICAJZXhlY2xpc3RzLT5jc2Jfc3RhdHVzID0KPiAgCQkmZW5naW5lLT5zdGF0dXNfcGFn ZS5hZGRyW0k5MTVfSFdTX0NTQl9CVUYwX0lOREVYXTsKPiAgCj4gQEAgLTI3MzQsNyArMjY4MSw3 IEBAIGludCBpbnRlbF9leGVjbGlzdHNfc3VibWlzc2lvbl9pbml0KHN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmVuZ2luZSkKPiAgCWVsc2UKPiAgCQlleGVjbGlzdHMtPmNzYl9zaXplID0gR0VOMTFf Q1NCX0VOVFJJRVM7Cj4gIAo+IC0JcmVzZXRfY3NiX3BvaW50ZXJzKGV4ZWNsaXN0cyk7Cj4gKwly ZXNldF9jc2JfcG9pbnRlcnMoZW5naW5lKTsKPiAgCj4gIAlyZXR1cm4gMDsKPiAgfQo+IEBAIC0y OTE3LDExICsyODY0LDYgQEAgcG9wdWxhdGVfbHJfY29udGV4dChzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2UsCj4gIAlpZiAoIWVuZ2luZS0+ZGVmYXVsdF9zdGF0ZSkKPiAgCQlyZWdzW0NUWF9DT05U RVhUX0NPTlRST0wgKyAxXSB8PQo+ICAJCQlfTUFTS0VEX0JJVF9FTkFCTEUoQ1RYX0NUUkxfRU5H SU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpOwo+IC0JaWYgKGNlLT5nZW1fY29udGV4dCA9PSBlbmdp bmUtPmk5MTUtPnByZWVtcHRfY29udGV4dCAmJgo+IC0JICAgIElOVEVMX0dFTihlbmdpbmUtPmk5 MTUpIDwgMTEpCj4gLQkJcmVnc1tDVFhfQ09OVEVYVF9DT05UUk9MICsgMV0gfD0KPiAtCQkJX01B U0tFRF9CSVRfRU5BQkxFKENUWF9DVFJMX0VOR0lORV9DVFhfUkVTVE9SRV9JTkhJQklUIHwKPiAt CQkJCQkgICBDVFhfQ1RSTF9FTkdJTkVfQ1RYX1NBVkVfSU5ISUJJVCk7Cj4gIAo+ICAJcmV0ID0g MDsKPiAgZXJyX3VucGluX2N0eDoKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9ncHVfZXJyb3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMK PiBpbmRleCBiN2U5ZmRkZWYyNzAuLmE0OTdjZjdhY2I2YSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dwdV9lcnJvci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9ncHVfZXJyb3IuYwo+IEBAIC0xMjQ4LDEwICsxMjQ4LDEwIEBAIHN0YXRpYyB2b2lk IGVycm9yX3JlY29yZF9lbmdpbmVfcmVnaXN0ZXJzKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJy b3IsCj4gIAl9Cj4gIH0KPiAgCj4gLXN0YXRpYyB2b2lkIHJlY29yZF9yZXF1ZXN0KHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gK3N0YXRpYyB2b2lkIHJlY29yZF9yZXF1ZXN0KGNvbnN0 IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJlcXVlc3QsCj4gIAkJCSAgIHN0cnVjdCBkcm1faTkxNV9l cnJvcl9yZXF1ZXN0ICplcnEpCj4gIHsKPiAtCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgg PSByZXF1ZXN0LT5nZW1fY29udGV4dDsKPiArCWNvbnN0IHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0 ICpjdHggPSByZXF1ZXN0LT5nZW1fY29udGV4dDsKPiAgCj4gIAllcnEtPmZsYWdzID0gcmVxdWVz dC0+ZmVuY2UuZmxhZ3M7Cj4gIAllcnEtPmNvbnRleHQgPSByZXF1ZXN0LT5mZW5jZS5jb250ZXh0 Owo+IEBAIC0xMzE1LDIwICsxMzE1LDE1IEBAIHN0YXRpYyB2b2lkIGVuZ2luZV9yZWNvcmRfcmVx dWVzdHMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAo+ICAJZWUtPm51bV9yZXF1ZXN0 cyA9IGNvdW50Owo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBlcnJvcl9yZWNvcmRfZW5naW5lX2V4 ZWNsaXN0cyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gK3N0YXRpYyB2b2lkIGVy cm9yX3JlY29yZF9lbmdpbmVfZXhlY2xpc3RzKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mg KmVuZ2luZSwKPiAgCQkJCQkgIHN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVlKQo+ICB7 Cj4gIAljb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqIGNvbnN0IGV4ZWNsaXN0 cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiAtCXVuc2lnbmVkIGludCBuOwo+ICsJc3RydWN0IGk5 MTVfcmVxdWVzdCAqIGNvbnN0ICpwb3J0ID0gZXhlY2xpc3RzLT5hY3RpdmU7Cj4gKwl1bnNpZ25l ZCBpbnQgbiA9IDA7Cj4gIAo+IC0JZm9yIChuID0gMDsgbiA8IGV4ZWNsaXN0c19udW1fcG9ydHMo ZXhlY2xpc3RzKTsgbisrKSB7Cj4gLQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEgPSBwb3J0X3Jl cXVlc3QoJmV4ZWNsaXN0cy0+cG9ydFtuXSk7Cj4gLQo+IC0JCWlmICghcnEpCj4gLQkJCWJyZWFr Owo+IC0KPiAtCQlyZWNvcmRfcmVxdWVzdChycSwgJmVlLT5leGVjbGlzdFtuXSk7Cj4gLQl9Cj4g Kwl3aGlsZSAoKnBvcnQpCj4gKwkJcmVjb3JkX3JlcXVlc3QoKnBvcnQrKywgJmVlLT5leGVjbGlz dFtuKytdKTsKPiAgCj4gIAllZS0+bnVtX3BvcnRzID0gbjsKPiAgfQo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggNzA4M2U2YWI5MmM1Li4wYzk5Njk0ZmFhYjcgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC0yNzYsNiArMjc2LDEyIEBAIHN0 YXRpYyBib29sIGk5MTVfcmVxdWVzdF9yZXRpcmUoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4g IAo+ICAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKPiAgCj4gKwkvKgo+ICsJICogV2Ugb25seSBsb29z ZWx5IHRyYWNrIGluZmxpZ2h0IHJlcXVlc3RzIGFjcm9zcyBwcmVlbXB0aW9uLAo+ICsJICogYW5k IHNvIHdlIG1heSBmaW5kIG91cnNlbHZlcyBhdHRlbXB0aW5nIHRvIHJldGlyZSBhIF9jb21wbGV0 ZWRfCj4gKwkgKiByZXF1ZXN0IHRoYXQgd2UgaGF2ZSByZW1vdmVkIGZyb20gdGhlIEhXIGFuZCBw dXQgYmFjayBvbiBhIHJ1bgo+ICsJICogcXVldWUuCj4gKwkgKi8KPiAgCXNwaW5fbG9jaygmcnEt PmVuZ2luZS0+YWN0aXZlLmxvY2spOwo+ICAJbGlzdF9kZWwoJnJxLT5zY2hlZC5saW5rKTsKPiAg CXNwaW5fdW5sb2NrKCZycS0+ZW5naW5lLT5hY3RpdmUubG9jayk7Cj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9yZXF1ZXN0LmgKPiBpbmRleCBlZGJiZGZlYzI0YWIuLmJlYmMxZTliNGE1ZSAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfcmVxdWVzdC5oCj4gQEAgLTI4LDYgKzI4LDcgQEAKPiAgI2lu Y2x1ZGUgPGxpbnV4L2RtYS1mZW5jZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgo+ ICAKPiArI2luY2x1ZGUgImd0L2ludGVsX2NvbnRleHRfdHlwZXMuaCIKPiAgI2luY2x1ZGUgImd0 L2ludGVsX2VuZ2luZV90eXBlcy5oIgo+ICAKPiAgI2luY2x1ZGUgImk5MTVfZ2VtLmgiCj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5jCj4gaW5kZXggMmU5YjM4YmRjMzNjLi5iMWJh M2U2NWNkNTIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVs ZXIuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmMKPiBAQCAt MTc5LDggKzE3OSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IHJxX3ByaW8oY29uc3Qgc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEpCj4gIAo+ICBzdGF0aWMgdm9pZCBraWNrX3N1Ym1pc3Npb24oc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCBpbnQgcHJpbykKPiAgewo+IC0JY29uc3Qgc3RydWN0 IGk5MTVfcmVxdWVzdCAqaW5mbGlnaHQgPQo+IC0JCXBvcnRfcmVxdWVzdChlbmdpbmUtPmV4ZWNs aXN0cy5wb3J0KTsKPiArCWNvbnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKmluZmxpZ2h0ID0gKmVu Z2luZS0+ZXhlY2xpc3RzLmFjdGl2ZTsKPiAgCj4gIAkvKgo+ICAJICogSWYgd2UgYXJlIGFscmVh ZHkgdGhlIGN1cnJlbnRseSBleGVjdXRpbmcgY29udGV4dCwgZG9uJ3QKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV91dGlscy5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV91dGlscy5oCj4gaW5kZXggMjk4NzIxOWE2MzAwLi40OTIwZmY5YWJhNjIgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV91dGlscy5oCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV91dGlscy5oCj4gQEAgLTEzMSw2ICsxMzEsMTggQEAgX19jaGVja19z dHJ1Y3Rfc2l6ZShzaXplX3QgYmFzZSwgc2l6ZV90IGFyciwgc2l6ZV90IGNvdW50LCBzaXplX3Qg KnNpemUpCj4gIAkoKHR5cGVvZihwdHIpKSgodW5zaWduZWQgbG9uZykocHRyKSB8IF9fYml0cykp OwkJCVwKPiAgfSkKPiAgCj4gKyNkZWZpbmUgcHRyX2NvdW50X2RlYyhwX3B0cikgZG8gewkJCQkJ XAo+ICsJdHlwZW9mKHBfcHRyKSBfX3AgPSAocF9wdHIpOwkJCQkJXAo+ICsJdW5zaWduZWQgbG9u ZyBfX3YgPSAodW5zaWduZWQgbG9uZykoKl9fcCk7CQkJXAo+ICsJKl9fcCA9ICh0eXBlb2YoKnBf cHRyKSkoLS1fX3YpOwkJCQkJXAo+ICt9IHdoaWxlICgwKQo+ICsKPiArI2RlZmluZSBwdHJfY291 bnRfaW5jKHBfcHRyKSBkbyB7CQkJCQlcCj4gKwl0eXBlb2YocF9wdHIpIF9fcCA9IChwX3B0cik7 CQkJCQlcCj4gKwl1bnNpZ25lZCBsb25nIF9fdiA9ICh1bnNpZ25lZCBsb25nKSgqX19wKTsJCQlc Cj4gKwkqX19wID0gKHR5cGVvZigqcF9wdHIpKSgrK19fdik7CQkJCQlcCj4gK30gd2hpbGUgKDAp Cj4gKwo+ICAjZGVmaW5lIHBhZ2VfbWFza19iaXRzKHB0cikgcHRyX21hc2tfYml0cyhwdHIsIFBB R0VfU0hJRlQpCj4gICNkZWZpbmUgcGFnZV91bm1hc2tfYml0cyhwdHIpIHB0cl91bm1hc2tfYml0 cyhwdHIsIFBBR0VfU0hJRlQpCj4gICNkZWZpbmUgcGFnZV9wYWNrX2JpdHMocHRyLCBiaXRzKSBw dHJfcGFja19iaXRzKHB0ciwgYml0cywgUEFHRV9TSElGVCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2d1Y19zdWJtaXNzaW9uLmMKPiBpbmRleCBkYjUzMWViYzc3MDQuLjEyYzIyMzU5 ZmRhYyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ndWNfc3VibWlz c2lvbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfZ3VjX3N1Ym1pc3Npb24u Ywo+IEBAIC0zMiw3ICszMiwxMSBAQAo+ICAjaW5jbHVkZSAiaW50ZWxfZ3VjX3N1Ym1pc3Npb24u aCIKPiAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gIAo+IC0jZGVmaW5lIEdVQ19QUkVFTVBUX0ZJ TklTSEVECQkweDEKPiArZW51bSB7Cj4gKwlHVUNfUFJFRU1QVF9OT05FID0gMCwKPiArCUdVQ19Q UkVFTVBUX0lOUFJPR1JFU1MsCj4gKwlHVUNfUFJFRU1QVF9GSU5JU0hFRCwKPiArfTsKPiAgI2Rl ZmluZSBHVUNfUFJFRU1QVF9CUkVBRENSVU1CX0RXT1JEUwkweDgKPiAgI2RlZmluZSBHVUNfUFJF RU1QVF9CUkVBRENSVU1CX0JZVEVTCVwKPiAgCShzaXplb2YodTMyKSAqIEdVQ19QUkVFTVBUX0JS RUFEQ1JVTUJfRFdPUkRTKQo+IEBAIC01MzcsMTUgKzU0MSwxMSBAQCBzdGF0aWMgdm9pZCBndWNf YWRkX3JlcXVlc3Qoc3RydWN0IGludGVsX2d1YyAqZ3VjLCBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSkKPiAgCXUzMiBjdHhfZGVzYyA9IGxvd2VyXzMyX2JpdHMocnEtPmh3X2NvbnRleHQtPmxyY19k ZXNjKTsKPiAgCXUzMiByaW5nX3RhaWwgPSBpbnRlbF9yaW5nX3NldF90YWlsKHJxLT5yaW5nLCBy cS0+dGFpbCkgLyBzaXplb2YodTY0KTsKPiAgCj4gLQlzcGluX2xvY2soJmNsaWVudC0+d3FfbG9j ayk7Cj4gLQo+ICAJZ3VjX3dxX2l0ZW1fYXBwZW5kKGNsaWVudCwgZW5naW5lLT5ndWNfaWQsIGN0 eF9kZXNjLAo+ICAJCQkgICByaW5nX3RhaWwsIHJxLT5mZW5jZS5zZXFubyk7Cj4gIAlndWNfcmlu Z19kb29yYmVsbChjbGllbnQpOwo+ICAKPiAgCWNsaWVudC0+c3VibWlzc2lvbnNbZW5naW5lLT5p ZF0gKz0gMTsKPiAtCj4gLQlzcGluX3VubG9jaygmY2xpZW50LT53cV9sb2NrKTsKPiAgfQo+ICAK PiAgLyoKPiBAQCAtNjMxLDggKzYzMSw5IEBAIHN0YXRpYyB2b2lkIGluamVjdF9wcmVlbXB0X2Nv bnRleHQoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ICAJZGF0YVs2XSA9IGludGVsX2d1Y19n Z3R0X29mZnNldChndWMsIGd1Yy0+c2hhcmVkX2RhdGEpOwo+ICAKPiAgCWlmIChXQVJOX09OKGlu dGVsX2d1Y19zZW5kKGd1YywgZGF0YSwgQVJSQVlfU0laRShkYXRhKSkpKSB7Cj4gLQkJZXhlY2xp c3RzX2NsZWFyX2FjdGl2ZSgmZW5naW5lLT5leGVjbGlzdHMsCj4gLQkJCQkgICAgICAgRVhFQ0xJ U1RTX0FDVElWRV9QUkVFTVBUKTsKPiArCQlpbnRlbF93cml0ZV9zdGF0dXNfcGFnZShlbmdpbmUs Cj4gKwkJCQkJSTkxNV9HRU1fSFdTX1BSRUVNUFQsCj4gKwkJCQkJR1VDX1BSRUVNUFRfTk9ORSk7 Cj4gIAkJdGFza2xldF9zY2hlZHVsZSgmZW5naW5lLT5leGVjbGlzdHMudGFza2xldCk7Cj4gIAl9 Cj4gIAo+IEBAIC02NzIsOCArNjczLDYgQEAgc3RhdGljIHZvaWQgY29tcGxldGVfcHJlZW1wdF9j b250ZXh0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGlu dGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cyA9ICZlbmdpbmUtPmV4ZWNsaXN0czsKPiAg Cj4gLQlHRU1fQlVHX09OKCFleGVjbGlzdHNfaXNfYWN0aXZlKGV4ZWNsaXN0cywgRVhFQ0xJU1RT X0FDVElWRV9QUkVFTVBUKSk7Cj4gLQo+ICAJaWYgKGluamVjdF9wcmVlbXB0X2hhbmcoZXhlY2xp c3RzKSkKPiAgCQlyZXR1cm47Cj4gIAo+IEBAIC02ODEsODkgKzY4MCw5MCBAQCBzdGF0aWMgdm9p ZCBjb21wbGV0ZV9wcmVlbXB0X2NvbnRleHQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAJZXhlY2xpc3RzX3Vud2luZF9pbmNvbXBsZXRlX3JlcXVlc3RzKGV4ZWNsaXN0cyk7Cj4g IAo+ICAJd2FpdF9mb3JfZ3VjX3ByZWVtcHRfcmVwb3J0KGVuZ2luZSk7Cj4gLQlpbnRlbF93cml0 ZV9zdGF0dXNfcGFnZShlbmdpbmUsIEk5MTVfR0VNX0hXU19QUkVFTVBULCAwKTsKPiArCWludGVs X3dyaXRlX3N0YXR1c19wYWdlKGVuZ2luZSwgSTkxNV9HRU1fSFdTX1BSRUVNUFQsIEdVQ19QUkVF TVBUX05PTkUpOwo+ICB9Cj4gIAo+IC0vKioKPiAtICogZ3VjX3N1Ym1pdCgpIC0gU3VibWl0IGNv bW1hbmRzIHRocm91Z2ggR3VDCj4gLSAqIEBlbmdpbmU6IGVuZ2luZSBhc3NvY2lhdGVkIHdpdGgg dGhlIGNvbW1hbmRzCj4gLSAqCj4gLSAqIFRoZSBvbmx5IGVycm9yIGhlcmUgYXJpc2VzIGlmIHRo ZSBkb29yYmVsbCBoYXJkd2FyZSBpc24ndCBmdW5jdGlvbmluZwo+IC0gKiBhcyBleHBlY3RlZCwg d2hpY2ggcmVhbGx5IHNob3Vsbid0IGhhcHBlbi4KPiAtICovCj4gLXN0YXRpYyB2b2lkIGd1Y19z dWJtaXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBndWNf c3VibWl0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkgICAgICAgc3RydWN0 IGk5MTVfcmVxdWVzdCAqKm91dCwKPiArCQkgICAgICAgc3RydWN0IGk5MTVfcmVxdWVzdCAqKmVu ZCkKPiAgewo+ICAJc3RydWN0IGludGVsX2d1YyAqZ3VjID0gJmVuZ2luZS0+aTkxNS0+Z3VjOwo+ IC0Jc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKiBjb25zdCBleGVjbGlzdHMgPSAmZW5n aW5lLT5leGVjbGlzdHM7Cj4gLQlzdHJ1Y3QgZXhlY2xpc3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0 cy0+cG9ydDsKPiAtCXVuc2lnbmVkIGludCBuOwo+ICsJc3RydWN0IGludGVsX2d1Y19jbGllbnQg KmNsaWVudCA9IGd1Yy0+ZXhlY2J1Zl9jbGllbnQ7Cj4gIAo+IC0JZm9yIChuID0gMDsgbiA8IGV4 ZWNsaXN0c19udW1fcG9ydHMoZXhlY2xpc3RzKTsgbisrKSB7Cj4gLQkJc3RydWN0IGk5MTVfcmVx dWVzdCAqcnE7Cj4gLQkJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJc3Bpbl9sb2NrKCZjbGllbnQt PndxX2xvY2spOwo+ICAKPiAtCQlycSA9IHBvcnRfdW5wYWNrKCZwb3J0W25dLCAmY291bnQpOwo+ IC0JCWlmIChycSAmJiBjb3VudCA9PSAwKSB7Cj4gLQkJCXBvcnRfc2V0KCZwb3J0W25dLCBwb3J0 X3BhY2socnEsICsrY291bnQpKTsKPiArCWRvIHsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpy cSA9ICpvdXQrKzsKPiAgCj4gLQkJCWZsdXNoX2dndHRfd3JpdGVzKHJxLT5yaW5nLT52bWEpOwo+ ICsJCWZsdXNoX2dndHRfd3JpdGVzKHJxLT5yaW5nLT52bWEpOwo+ICsJCWd1Y19hZGRfcmVxdWVz dChndWMsIHJxKTsKPiArCX0gd2hpbGUgKG91dCAhPSBlbmQpOwo+ICAKPiAtCQkJZ3VjX2FkZF9y ZXF1ZXN0KGd1YywgcnEpOwo+IC0JCX0KPiAtCX0KPiArCXNwaW5fdW5sb2NrKCZjbGllbnQtPndx X2xvY2spOwo+ICB9Cj4gIAo+IC1zdGF0aWMgdm9pZCBwb3J0X2Fzc2lnbihzdHJ1Y3QgZXhlY2xp c3RfcG9ydCAqcG9ydCwgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gK3N0YXRpYyBpbmxpbmUg aW50IHJxX3ByaW8oY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gIHsKPiAtCUdFTV9C VUdfT04ocG9ydF9pc3NldChwb3J0KSk7Cj4gLQo+IC0JcG9ydF9zZXQocG9ydCwgaTkxNV9yZXF1 ZXN0X2dldChycSkpOwo+ICsJcmV0dXJuIHJxLT5zY2hlZC5hdHRyLnByaW9yaXR5IHwgX19OT19Q UkVFTVBUSU9OOwo+ICB9Cj4gIAo+IC1zdGF0aWMgaW5saW5lIGludCBycV9wcmlvKGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICtzdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqc2No ZWR1bGVfaW4oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIGludCBpZHgpCj4gIHsKPiAtCXJldHVy biBycS0+c2NoZWQuYXR0ci5wcmlvcml0eTsKPiArCXRyYWNlX2k5MTVfcmVxdWVzdF9pbihycSwg aWR4KTsKPiArCj4gKwlpZiAoIXJxLT5od19jb250ZXh0LT5pbmZsaWdodCkKPiArCQlycS0+aHdf Y29udGV4dC0+aW5mbGlnaHQgPSBycS0+ZW5naW5lOwo+ICsJaW50ZWxfY29udGV4dF9pbmZsaWdo dF9pbmMocnEtPmh3X2NvbnRleHQpOwo+ICsKPiArCXJldHVybiBpOTE1X3JlcXVlc3RfZ2V0KHJx KTsKPiAgfQo+ICAKPiAtc3RhdGljIGlubGluZSBpbnQgcG9ydF9wcmlvKGNvbnN0IHN0cnVjdCBl eGVjbGlzdF9wb3J0ICpwb3J0KQo+ICtzdGF0aWMgdm9pZCBzY2hlZHVsZV9vdXQoc3RydWN0IGk5 MTVfcmVxdWVzdCAqcnEpCj4gIHsKPiAtCXJldHVybiBycV9wcmlvKHBvcnRfcmVxdWVzdChwb3J0 KSkgfCBfX05PX1BSRUVNUFRJT047Cj4gKwl0cmFjZV9pOTE1X3JlcXVlc3Rfb3V0KHJxKTsKPiAr Cj4gKwlpbnRlbF9jb250ZXh0X2luZmxpZ2h0X2RlYyhycS0+aHdfY29udGV4dCk7Cj4gKwlpZiAo IWludGVsX2NvbnRleHRfaW5mbGlnaHRfY291bnQocnEtPmh3X2NvbnRleHQpKQo+ICsJCXJxLT5o d19jb250ZXh0LT5pbmZsaWdodCA9IE5VTEw7Cj4gKwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChycSk7 Cj4gIH0KPiAgCj4gLXN0YXRpYyBib29sIF9fZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKQo+ICtzdGF0aWMgdm9pZCBfX2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9l bmdpbmVfY3MgKmVuZ2luZSkKPiAgewo+ICAJc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMg KiBjb25zdCBleGVjbGlzdHMgPSAmZW5naW5lLT5leGVjbGlzdHM7Cj4gLQlzdHJ1Y3QgZXhlY2xp c3RfcG9ydCAqcG9ydCA9IGV4ZWNsaXN0cy0+cG9ydDsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3Qg Kmxhc3QgPSBOVUxMOwo+IC0JY29uc3Qgc3RydWN0IGV4ZWNsaXN0X3BvcnQgKiBjb25zdCBsYXN0 X3BvcnQgPQo+IC0JCSZleGVjbGlzdHMtPnBvcnRbZXhlY2xpc3RzLT5wb3J0X21hc2tdOwo+ICsJ c3RydWN0IGk5MTVfcmVxdWVzdCAqKmZpcnN0ID0gZXhlY2xpc3RzLT5pbmZsaWdodDsKPiArCXN0 cnVjdCBpOTE1X3JlcXVlc3QgKiogY29uc3QgbGFzdF9wb3J0ID0gZmlyc3QgKyBleGVjbGlzdHMt PnBvcnRfbWFzazsKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmxhc3QgPSBmaXJzdFswXTsKPiAr CXN0cnVjdCBpOTE1X3JlcXVlc3QgKipwb3J0Owo+ICAJYm9vbCBzdWJtaXQgPSBmYWxzZTsKPiAg CXN0cnVjdCByYl9ub2RlICpyYjsKPiAgCj4gIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZlbmdpbmUt PmFjdGl2ZS5sb2NrKTsKPiAgCj4gLQlpZiAocG9ydF9pc3NldChwb3J0KSkgewo+ICsJaWYgKGxh c3QpIHsKPiAgCQlpZiAoaW50ZWxfZW5naW5lX2hhc19wcmVlbXB0aW9uKGVuZ2luZSkpIHsKPiAg CQkJc3RydWN0IGd1Y19wcmVlbXB0X3dvcmsgKnByZWVtcHRfd29yayA9Cj4gIAkJCQkmZW5naW5l LT5pOTE1LT5ndWMucHJlZW1wdF93b3JrW2VuZ2luZS0+aWRdOwo+ICAJCQlpbnQgcHJpbyA9IGV4 ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludDsKPiAgCj4gLQkJCWlmIChpOTE1X3NjaGVkdWxl cl9uZWVkX3ByZWVtcHQocHJpbywKPiAtCQkJCQkJCXBvcnRfcHJpbyhwb3J0KSkpIHsKPiAtCQkJ CWV4ZWNsaXN0c19zZXRfYWN0aXZlKGV4ZWNsaXN0cywKPiAtCQkJCQkJICAgICBFWEVDTElTVFNf QUNUSVZFX1BSRUVNUFQpOwo+ICsJCQlpZiAoaTkxNV9zY2hlZHVsZXJfbmVlZF9wcmVlbXB0KHBy aW8sIHJxX3ByaW8obGFzdCkpKSB7Cj4gKwkJCQlpbnRlbF93cml0ZV9zdGF0dXNfcGFnZShlbmdp bmUsCj4gKwkJCQkJCQlJOTE1X0dFTV9IV1NfUFJFRU1QVCwKPiArCQkJCQkJCUdVQ19QUkVFTVBU X0lOUFJPR1JFU1MpOwo+ICAJCQkJcXVldWVfd29yayhlbmdpbmUtPmk5MTUtPmd1Yy5wcmVlbXB0 X3dxLAo+ICAJCQkJCSAgICZwcmVlbXB0X3dvcmstPndvcmspOwo+IC0JCQkJcmV0dXJuIGZhbHNl Owo+ICsJCQkJcmV0dXJuOwo+ICAJCQl9Cj4gIAkJfQo+ICAKPiAtCQlwb3J0Kys7Cj4gLQkJaWYg KHBvcnRfaXNzZXQocG9ydCkpCj4gLQkJCXJldHVybiBmYWxzZTsKPiArCQlpZiAoKisrZmlyc3Qp Cj4gKwkJCXJldHVybjsKPiArCj4gKwkJbGFzdCA9IE5VTEw7Cj4gIAl9Cj4gLQlHRU1fQlVHX09O KHBvcnRfaXNzZXQocG9ydCkpOwo+ICAKPiArCXBvcnQgPSBmaXJzdDsKPiAgCXdoaWxlICgocmIg PSByYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpKSkgewo+ICAJCXN0cnVjdCBpOTE1 X3ByaW9saXN0ICpwID0gdG9fcHJpb2xpc3QocmIpOwo+ICAJCXN0cnVjdCBpOTE1X3JlcXVlc3Qg KnJxLCAqcm47Cj4gQEAgLTc3NCwxOCArNzc0LDE1IEBAIHN0YXRpYyBib29sIF9fZ3VjX2RlcXVl dWUoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICAJCQkJaWYgKHBvcnQgPT0gbGFz dF9wb3J0KQo+ICAJCQkJCWdvdG8gZG9uZTsKPiAgCj4gLQkJCQlpZiAoc3VibWl0KQo+IC0JCQkJ CXBvcnRfYXNzaWduKHBvcnQsIGxhc3QpOwo+ICsJCQkJKnBvcnQgPSBzY2hlZHVsZV9pbihsYXN0 LAo+ICsJCQkJCQkgICAgcG9ydCAtIGV4ZWNsaXN0cy0+aW5mbGlnaHQpOwo+ICAJCQkJcG9ydCsr Owo+ICAJCQl9Cj4gIAo+ICAJCQlsaXN0X2RlbF9pbml0KCZycS0+c2NoZWQubGluayk7Cj4gLQo+ ICAJCQlfX2k5MTVfcmVxdWVzdF9zdWJtaXQocnEpOwo+IC0JCQl0cmFjZV9pOTE1X3JlcXVlc3Rf aW4ocnEsIHBvcnRfaW5kZXgocG9ydCwgZXhlY2xpc3RzKSk7Cj4gLQo+IC0JCQlsYXN0ID0gcnE7 Cj4gIAkJCXN1Ym1pdCA9IHRydWU7Cj4gKwkJCWxhc3QgPSBycTsKPiAgCQl9Cj4gIAo+ICAJCXJi X2VyYXNlX2NhY2hlZCgmcC0+bm9kZSwgJmV4ZWNsaXN0cy0+cXVldWUpOwo+IEBAIC03OTQsNTgg Kzc5MSw0MSBAQCBzdGF0aWMgYm9vbCBfX2d1Y19kZXF1ZXVlKHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgZG9uZToKPiAgCWV4ZWNsaXN0cy0+cXVldWVfcHJpb3JpdHlfaGludCA9 Cj4gIAkJcmIgPyB0b19wcmlvbGlzdChyYiktPnByaW9yaXR5IDogSU5UX01JTjsKPiAtCWlmIChz dWJtaXQpCj4gLQkJcG9ydF9hc3NpZ24ocG9ydCwgbGFzdCk7Cj4gLQlpZiAobGFzdCkKPiAtCQll eGVjbGlzdHNfdXNlcl9iZWdpbihleGVjbGlzdHMsIGV4ZWNsaXN0cy0+cG9ydCk7Cj4gLQo+IC0J LyogV2UgbXVzdCBhbHdheXMga2VlcCB0aGUgYmVhc3QgZmVkIGlmIHdlIGhhdmUgd29yayBwaWxl ZCB1cCAqLwo+IC0JR0VNX0JVR19PTihwb3J0X2lzc2V0KGV4ZWNsaXN0cy0+cG9ydCkgJiYKPiAt CQkgICAhZXhlY2xpc3RzX2lzX2FjdGl2ZShleGVjbGlzdHMsIEVYRUNMSVNUU19BQ1RJVkVfVVNF UikpOwo+IC0JR0VNX0JVR19PTihyYl9maXJzdF9jYWNoZWQoJmV4ZWNsaXN0cy0+cXVldWUpICYm Cj4gLQkJICAgIXBvcnRfaXNzZXQoZXhlY2xpc3RzLT5wb3J0KSk7Cj4gLQo+IC0JcmV0dXJuIHN1 Ym1pdDsKPiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgZ3VjX2RlcXVldWUoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lKQo+IC17Cj4gLQlpZiAoX19ndWNfZGVxdWV1ZShlbmdpbmUpKQo+IC0J CWd1Y19zdWJtaXQoZW5naW5lKTsKPiArCWlmIChzdWJtaXQpIHsKPiArCQkqcG9ydCA9IHNjaGVk dWxlX2luKGxhc3QsIHBvcnQgLSBleGVjbGlzdHMtPmluZmxpZ2h0KTsKPiArCQkqKytwb3J0ID0g TlVMTDsKPiArCQlndWNfc3VibWl0KGVuZ2luZSwgZmlyc3QsIHBvcnQpOwo+ICsJfQo+ICsJZXhl Y2xpc3RzLT5hY3RpdmUgPSBleGVjbGlzdHMtPmluZmxpZ2h0Owo+ICB9Cj4gIAo+ICBzdGF0aWMg dm9pZCBndWNfc3VibWlzc2lvbl90YXNrbGV0KHVuc2lnbmVkIGxvbmcgZGF0YSkKPiAgewo+ICAJ c3RydWN0IGludGVsX2VuZ2luZV9jcyAqIGNvbnN0IGVuZ2luZSA9IChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICopZGF0YTsKPiAgCXN0cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3Qg ZXhlY2xpc3RzID0gJmVuZ2luZS0+ZXhlY2xpc3RzOwo+IC0Jc3RydWN0IGV4ZWNsaXN0X3BvcnQg KnBvcnQgPSBleGVjbGlzdHMtPnBvcnQ7Cj4gLQlzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycTsKPiAr CXN0cnVjdCBpOTE1X3JlcXVlc3QgKipwb3J0LCAqcnE7Cj4gIAl1bnNpZ25lZCBsb25nIGZsYWdz Owo+ICAKPiAgCXNwaW5fbG9ja19pcnFzYXZlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7 Cj4gIAo+IC0JcnEgPSBwb3J0X3JlcXVlc3QocG9ydCk7Cj4gLQl3aGlsZSAocnEgJiYgaTkxNV9y ZXF1ZXN0X2NvbXBsZXRlZChycSkpIHsKPiAtCQl0cmFjZV9pOTE1X3JlcXVlc3Rfb3V0KHJxKTsK PiAtCQlpOTE1X3JlcXVlc3RfcHV0KHJxKTsKPiArCWZvciAocG9ydCA9IGV4ZWNsaXN0cy0+aW5m bGlnaHQ7IChycSA9ICpwb3J0KTsgcG9ydCsrKSB7Cj4gKwkJaWYgKCFpOTE1X3JlcXVlc3RfY29t cGxldGVkKHJxKSkKPiArCQkJYnJlYWs7Cj4gIAo+IC0JCXBvcnQgPSBleGVjbGlzdHNfcG9ydF9j b21wbGV0ZShleGVjbGlzdHMsIHBvcnQpOwo+IC0JCWlmIChwb3J0X2lzc2V0KHBvcnQpKSB7Cj4g LQkJCWV4ZWNsaXN0c191c2VyX2JlZ2luKGV4ZWNsaXN0cywgcG9ydCk7Cj4gLQkJCXJxID0gcG9y dF9yZXF1ZXN0KHBvcnQpOwo+IC0JCX0gZWxzZSB7Cj4gLQkJCWV4ZWNsaXN0c191c2VyX2VuZChl eGVjbGlzdHMpOwo+IC0JCQlycSA9IE5VTEw7Cj4gLQkJfQo+ICsJCXNjaGVkdWxlX291dChycSk7 Cj4gKwl9Cj4gKwlpZiAocG9ydCAhPSBleGVjbGlzdHMtPmluZmxpZ2h0KSB7Cj4gKwkJaW50IGlk eCA9IHBvcnQgLSBleGVjbGlzdHMtPmluZmxpZ2h0Owo+ICsJCWludCByZW0gPSBBUlJBWV9TSVpF KGV4ZWNsaXN0cy0+aW5mbGlnaHQpIC0gaWR4Owo+ICsJCW1lbW1vdmUoZXhlY2xpc3RzLT5pbmZs aWdodCwgcG9ydCwgcmVtICogc2l6ZW9mKCpwb3J0KSk7Cj4gIAl9Cj4gIAo+IC0JaWYgKGV4ZWNs aXN0c19pc19hY3RpdmUoZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpICYmCj4g LQkgICAgaW50ZWxfcmVhZF9zdGF0dXNfcGFnZShlbmdpbmUsIEk5MTVfR0VNX0hXU19QUkVFTVBU KSA9PQo+ICsJaWYgKGludGVsX3JlYWRfc3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9IV1Nf UFJFRU1QVCkgPT0KPiAgCSAgICBHVUNfUFJFRU1QVF9GSU5JU0hFRCkKPiAgCQljb21wbGV0ZV9w cmVlbXB0X2NvbnRleHQoZW5naW5lKTsKPiAgCj4gLQlpZiAoIWV4ZWNsaXN0c19pc19hY3RpdmUo ZXhlY2xpc3RzLCBFWEVDTElTVFNfQUNUSVZFX1BSRUVNUFQpKQo+IC0JCWd1Y19kZXF1ZXVlKGVu Z2luZSk7Cj4gKwlpZiAoIWludGVsX3JlYWRfc3RhdHVzX3BhZ2UoZW5naW5lLCBJOTE1X0dFTV9I V1NfUFJFRU1QVCkpCj4gKwkJX19ndWNfZGVxdWV1ZShlbmdpbmUpOwo+ICAKPiAgCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmVuZ2luZS0+YWN0aXZlLmxvY2ssIGZsYWdzKTsKPiAgfQo+IEBAIC05 NTksNyArOTM5LDYgQEAgc3RhdGljIHZvaWQgZ3VjX2NhbmNlbF9yZXF1ZXN0cyhzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUpCj4gIAo+ICAJZXhlY2xpc3RzLT5xdWV1ZV9wcmlvcml0eV9o aW50ID0gSU5UX01JTjsKPiAgCWV4ZWNsaXN0cy0+cXVldWUgPSBSQl9ST09UX0NBQ0hFRDsKPiAt CUdFTV9CVUdfT04ocG9ydF9pc3NldChleGVjbGlzdHMtPnBvcnQpKTsKPiAgCj4gIAlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZlbmdpbmUtPmFjdGl2ZS5sb2NrLCBmbGFncyk7Cj4gIH0KPiBAQCAt MTQyMiw3ICsxNDAxLDcgQEAgaW50IGludGVsX2d1Y19zdWJtaXNzaW9uX2VuYWJsZShzdHJ1Y3Qg aW50ZWxfZ3VjICpndWMpCj4gIAkgKiBhbmQgaXQgaXMgZ3VhcmFudGVlZCB0aGF0IGl0IHdpbGwg cmVtb3ZlIHRoZSB3b3JrIGl0ZW0gZnJvbSB0aGUKPiAgCSAqIHF1ZXVlIGJlZm9yZSBvdXIgcmVx dWVzdCBpcyBjb21wbGV0ZWQuCj4gIAkgKi8KPiAtCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGVu Z2luZS0+ZXhlY2xpc3RzLnBvcnQpICoKPiArCUJVSUxEX0JVR19PTihBUlJBWV9TSVpFKGVuZ2lu ZS0+ZXhlY2xpc3RzLmluZmxpZ2h0KSAqCj4gIAkJICAgICBzaXplb2Yoc3RydWN0IGd1Y193cV9p dGVtKSAqCj4gIAkJICAgICBJOTE1X05VTV9FTkdJTkVTID4gR1VDX1dRX1NJWkUpOwo+ICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCj4gaW5kZXgg Mjk4YmI3MTE2YzUxLi4xYTViOWUyODRjYTkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfcmVxdWVzdC5jCj4gQEAgLTM2NiwxMyArMzY2LDE1IEBAIHN0YXRp YyBpbnQgX19pZ3RfYnJlYWRjcnVtYnNfc21va2V0ZXN0KHZvaWQgKmFyZykKPiAgCj4gIAkJaWYg KCF3YWl0X2V2ZW50X3RpbWVvdXQod2FpdC0+d2FpdCwKPiAgCQkJCQlpOTE1X3N3X2ZlbmNlX2Rv bmUod2FpdCksCj4gLQkJCQkJSFogLyAyKSkgewo+ICsJCQkJCTUgKiBIWikpIHsKPiAgCQkJc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEgPSByZXF1ZXN0c1tjb3VudCAtIDFdOwo+ICAKPiAtCQkJcHJf ZXJyKCJ3YWl0aW5nIGZvciAlZCBmZW5jZXMgKGxhc3QgJWxseDolbGxkKSBvbiAlcyB0aW1lZCBv dXQhXG4iLAo+IC0JCQkgICAgICAgY291bnQsCj4gKwkJCXByX2Vycigid2FpdGluZyBmb3IgJWQv JWQgZmVuY2VzIChsYXN0ICVsbHg6JWxsZCkgb24gJXMgdGltZWQgb3V0IVxuIiwKPiArCQkJICAg ICAgIGF0b21pY19yZWFkKCZ3YWl0LT5wZW5kaW5nKSwgY291bnQsCj4gIAkJCSAgICAgICBycS0+ ZmVuY2UuY29udGV4dCwgcnEtPmZlbmNlLnNlcW5vLAo+ICAJCQkgICAgICAgdC0+ZW5naW5lLT5u YW1lKTsKPiArCQkJR0VNX1RSQUNFX0RVTVAoKTsKPiArCj4gIAkJCWk5MTVfZ2VtX3NldF93ZWRn ZWQodC0+ZW5naW5lLT5pOTE1KTsKPiAgCQkJR0VNX0JVR19PTighaTkxNV9yZXF1ZXN0X2NvbXBs ZXRlZChycSkpOwo+ICAJCQlpOTE1X3N3X2ZlbmNlX3dhaXQod2FpdCk7Cj4gLS0gCj4gMi4yMC4x Cj4KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IElu dGVsLWdmeCBtYWlsaW5nIGxpc3QKPiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4g aHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4 IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4