From mboxrd@z Thu Jan 1 00:00:00 1970 From: Volodymyr Babchuk Subject: Re: [PATCH v4 07/10] xen/arm: optee: add support for arbitrary shared memory Date: Wed, 20 Mar 2019 16:39:31 +0000 Message-ID: <87o9658pq5.fsf@epam.com> References: <20190307210404.12346-1-volodymyr_babchuk@epam.com> <20190307210404.12346-8-volodymyr_babchuk@epam.com> <6b3f372c-ee5a-c162-28a6-e60235b51a1e@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1h6eFe-0007Lm-Aw for xen-devel@lists.xenproject.org; Wed, 20 Mar 2019 16:39:38 +0000 In-Reply-To: <6b3f372c-ee5a-c162-28a6-e60235b51a1e@arm.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Julien Grall Cc: "tee-dev@lists.linaro.org" , "xen-devel@lists.xenproject.org" , Stefano Stabellini , Volodymyr Babchuk , Volodymyr Babchuk List-Id: xen-devel@lists.xenproject.org Ckp1bGllbiBHcmFsbCB3cml0ZXM6Cgo+IE9uIDA3LzAzLzIwMTkgMjE6MDQsIFZvbG9keW15ciBC YWJjaHVrIHdyb3RlOgo+PiBGcm9tOiBWb2xvZHlteXIgQmFiY2h1ayA8dmxhZC5iYWJjaHVrQGdt YWlsLmNvbT4KPgo+IFNvbWUgb2YgdGhlIHBhdGNoZXMgYXJlIHVzaW5nIHlvdXIgRVBBTSBlLW1h aWwgYWRkcmVzc3MuIE90aGVyIGFyZQo+IHVzaW5nIHlvdXIgZ21haWwgYWRkcmVzcy4gQ291bGQg eW91IGNvbmZpcm0gdGhpcyBpcyBleHBlY3RlZD8KCk5vLCBJJ2xsIG1ha2Ugc3VyZSB0aGF0IGFs bCBwYXRjaGVzIGFyZSBhdXRob3JlZCBieQo8dm9sb2R5bXlyX2JhYmNodWtAZXBhbS5jb20+CgoK Pj4KPj4gU2hhcmVkIG1lbW9yeSBpcyB3aWRlbHkgdXNlZCBieSBOVyAoTm9ybWFsIFdvcmxkKSB0 byBjb21tdW5pY2F0ZSB3aXRoCj4+IFRBcyAoVHJ1c3RlZCBBcHBsaWNhdGlvbnMpIGluIE9QLVRF RS4gTlcgY2FuIHNoYXJlIHBhcnQgb2Ygb3duIG1lbW9yeQo+PiB3aXRoIFRBIG9yIHdpdGggT1At VEVFIGNvcmUsIGJ5IHJlZ2lzdGVyaW5nIGl0IGluIE9QLVRFRSwgb3IgYnkKPj4gcHJvdmlkaW5n IGEgdGVtcG9yYWwgcmVmZXJlbmNlLiBBbnl3YXlzLCBpbmZvcm1hdGlvbiBhYm91dCBzdWNoIG1l bW9yeQo+PiBidWZmZXJzIGFyZSBzZW50IHRvIE9QLVRFRSBhcyBhIGxpc3Qgb2YgcGFnZXMuIFRo aXMgbWVjaGFuaXNtIGlzCj4+IGRlc2NyaWJlZCBpbiBvcHRlZV9tc2cuaC4KPj4KPj4gTWVkaWF0 b3Igc2hvdWxkIHN0ZXAgaW4gd2hlbiBOVyB0cmllcyB0byBzaGFyZSBtZW1vcnkgd2l0aAo+PiBP UC1URUUgZm9yIHR3byByZWFzb25zOgo+Pgo+PiAxLiBEbyBhZGRyZXNzIHRyYW5zbGF0aW9uIGZy b20gSVBBIHRvIFBBLgo+PiAyLiBQaW4gZG9tYWluIHBhZ2VzIHdoaWxlIHRoZXkgYXJlIG1hcHBl ZCBpbnRvIE9QLVRFRSBvciBUQQo+PiAgICAgYWRkcmVzcyBzcGFjZSwgc28gZG9tYWluIGNhbid0 IHRyYW5zZmVyIHRoaXMgcGFnZXMgdG8KPj4gICAgIG90aGVyIGRvbWFpbiBvciBiYWxsb29uIG91 dCB0aGVtLgo+Pgo+PiBBZGRyZXNzIHRyYW5zbGF0aW9uIGlzIGRvbmUgYnkgdHJhbnNsYXRlX25v bmNvbnRpZyguLi4pIGZ1bmN0aW9uLgo+PiBJdCBhbGxvY2F0ZXMgbmV3IGJ1ZmZlciBmcm9tIGRv bWhlYXAgYW5kIHRoZW4gd2Fsa3Mgb24gZ3Vlc3QKPj4gcHJvdmlkZWQgbGlzdCBvZiBwYWdlcywg dHJhbnNsYXRlcyBhZGRyZXNzZXMgYW5kIHN0b3JlcyBQQXMgaW50bwo+PiBuZXdseSBhbGxvY2F0 ZWQgYnVmZmVyLiBUaGlzIGJ1ZmZlciB3aWxsIGJlIHByb3ZpZGVkIHRvIE9QLVRFRQo+PiBpbnN0 ZWFkIG9mIG9yaWdpbmFsIGJ1ZmZlciBmcm9tIHRoZSBndWVzdC4gVGhpcyBidWZmZXIgd2lsbAo+ PiBiZSBmcmVlZCBhdCB0aGUgZW5kIG9mIHN0YW5kYXJkIGNhbGwuCj4+Cj4+IEluIHRoZSBzYW1l IHRpbWUgdGhpcyBmdW5jdGlvbiBwaW5zIHBhZ2VzIGFuZCBzdG9yZXMgdGhlbSBpbgo+PiBzdHJ1 Y3Qgb3B0ZWVfc2htX2J1ZiBvYmplY3QuIFRoaXMgb2JqZWN0IHdpbGwgbGl2ZSBhbGwgdGhlIHRp bWUsCj4+IHdoZW4gZ2l2ZW4gU0hNIGJ1ZmZlciBpcyBrbm93biB0byBPUC1URUUuIEl0IHdpbGwg YmUgZnJlZWQKPj4gYWZ0ZXIgZ3Vlc3QgdW5yZWdpc3RlcnMgc2hhcmVkIGJ1ZmZlci4gQXQgdGhp cyB0aW1lIHBhZ2VzCj4+IHdpbGwgYmUgdW5waW5uZWQuCj4+Cj4+IEd1ZXN0IGNhbiBzaGFyZSBi dWZmZXIgd2l0aCBPUC1URUUgZm9yIGR1cmF0aW9uIGZvciBvbmUgY2FsbCwKPj4gb3IgcGVybWFu ZW50bHksIHVzaW5nIE9QVEVFX01TR19DTURfUkVHSVNURVJfU0hNIGNhbGwuIFdlIG5lZWQKPj4g dG8gaGFuZGxlIGJvdGggb3B0aW9ucy4KPj4KPj4gQWxzbyB3ZSB3YW50IHRvIGxpbWl0IHRvdGFs IHNpemUgb2Ygc2hhcmVkIGJ1ZmZlcnMuIEFzIGl0IGlzIG5vdAo+PiBwb3NzaWJsZSB0byBnZXQg bGltaXQgZnJvbSBPUC1URUUsIHdlIG5lZWQgdG8gY2hvb3NlIHNvbWUgYXJiaXRyYXJ5Cj4+IHZh bHVlLiBDdXJyZW50bHkgbGltaXQgaXMgMTYzODQgb2YgNEsgcGFnZXMuCj4KPiBJIGNhbid0IHBy b21pc2UgWGVuIHdpbGwgb25seSBiZSA0SyBvbmx5LiBTbyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8K PiBtYWtlIHRoZSBudW1iZXIgYWdub3N0aWMuIE9yIGF0IGxlYXN0IHdyaXRpbmcgY2xlYXJseSBv biB0b3Agb2YgdGhlCj4gZGVmaW5pdGlvbiB0aGF0IGl0IGlzIGFzc3VtZWQgNEtCIChtYXliZSB3 aXRoIGEgQlVJTERfQlVHX09OKFBBR0VfU0laRQo+ICE9IDQwOTYpIGlmIG5vdCBhbHJlYWR5IGlu IHBsYWNlKS4KCkkgY2FuIHJlcGxhY2UgZGVmaW5lIHdpdGggc29tZXRoaW5nIGxpa2UgKDY3MTA4 ODY0IC8gUEFHRV9TSVpFKS4gV2l0aAphcHByb3ByaWF0ZSBjb21tZW50LCBvZiBjb3Vyc2UuCgo+ Cj4+Cj4+IFNpZ25lZC1vZmYtYnk6IFZvbG9keW15ciBCYWJjaHVrIDx2bGFkLmJhYmNodWtAZ21h aWwuY29tPgo+PiAtLS0KPj4gICBBbGwgdGhlIHBhdGNoZXMgdG8gb3B0ZWUuYyBzaG91bGQgYmUg bWVyZ2VkIHRvZ2V0aGVyLiBUaGV5IHdlcmUKPj4gICBzcGxpdCB0byBlYXNlIHVwIHJldmlldy4g QnV0IHRoZXkgZGVwZW5kIGhlYXZpbHkgb24gZWFjaCBvdGhlci4KPj4KPj4gICBDaGFuZ2VzIGZy b20gdjM6Cj4+ICAgLSBSZXdvcmtlZCBwYWdlbGlzdHMgc3RvcmFnZSAtIHRoZXJlIGlzIG5vIG1v cmUgc3RhdGljIHN0b3JhZ2UgZm9yCj4+ICAgICA1IGJ1ZmZlcnMsIGluc3RlYWQgc3RydWN0dXJl IHdpdGggYWxsIGRhdGEgaXMgYWxsb2NhdGVkIGR5bmFtaWNhbGx5Cj4+ICAgLSBOb3cgdGhpcyBj b2RlIHVzZXMgZG9taGVhcCBpbnN0ZWFkIG9mIHhlbmhlYXAKPj4gICAtIFZhcmlvdXMgc3R5bGUg Zml4ZXMKPj4gICAtIGdkcHJpbnRrKCkgZml4ZXMKPj4KPj4gICBDaGFuZ2VzIGZyb20gdjI6Cj4+ ICAgLSBNYWRlIHN1cmUgdGhhdCBndWVzdCBkb2VzIG5vdCB0cmllcyB0byByZWdpc3RlciBzaGFy ZWQgYnVmZmVyIHdpdGgKPj4gICAgIHRoZSBzYW1lIGNvb2tpZSB0d2ljZQo+PiAgIC0gRml4ZWQg Y29kaW5nIHN0eWxlCj4+ICAgLSBVc2UgYWNjZXNzX2d1ZXN0X21lbW9yeV9ieV9pcGEoKSBpbnN0 ZWFkIG9mIGRpcmVjdCBtZW1vcnkgbWFwcGluZwo+PiAtLS0KPj4gICB4ZW4vYXJjaC9hcm0vdGVl L29wdGVlLmMgfCA0MDQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ ICAgMSBmaWxlIGNoYW5nZWQsIDQwNCBpbnNlcnRpb25zKCspCj4+Cj4+IGRpZmYgLS1naXQgYS94 ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMgYi94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPj4gaW5k ZXggMjkxZWQyZmUyNS4uMTRlMjk1YTQyMiAxMDA2NDQKPj4gLS0tIGEveGVuL2FyY2gvYXJtL3Rl ZS9vcHRlZS5jCj4+ICsrKyBiL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYwo+PiBAQCAtMjQsNiAr MjQsMjIgQEAKPj4gICAjaW5jbHVkZSA8YXNtL3RlZS9vcHRlZV9tc2cuaD4KPj4gICAjaW5jbHVk ZSA8YXNtL3RlZS9vcHRlZV9zbWMuaD4KPj4gICArLyoKPj4gKyAqICJUaGUgcmV0dXJuIGNvZGUg aXMgYW4gZXJyb3IgdGhhdCBvcmlnaW5hdGVkIHdpdGhpbiB0aGUgdW5kZXJseWluZwo+PiArICog Y29tbXVuaWNhdGlvbnMgc3RhY2sgbGlua2luZyB0aGUgcmljaCBPUyB3aXRoIHRoZSBURUUiIGFz IGRlc2NyaWJlZAo+PiArICogaW4gR1AgVEVFIENsaWVudCBBUEkgU3BlY2lmaWNhdGlvbi4KPj4g KyAqLwo+PiArI2RlZmluZSBURUVDX09SSUdJTl9DT01NUyAweDAwMDAwMDAyCj4+ICsKPj4gKy8q Cj4+ICsgKiAiSW5wdXQgcGFyYW1ldGVycyB3ZXJlIGludmFsaWQiIGFzIGRlc2NyaWJlZAo+PiAr ICogaW4gR1AgVEVFIENsaWVudCBBUEkgU3BlY2lmaWNhdGlvbi4KPj4gKyAqLwo+PiArI2RlZmlu ZSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTIDB4RkZGRjAwMDYKPj4gKwo+PiArLyogIlN5c3Rl bSByYW4gb3V0IG9mIHJlc291cmNlcyIgKi8KPj4gKyNkZWZpbmUgVEVFQ19FUlJPUl9PVVRfT0Zf TUVNT1JZIDB4RkZGRjAwMEMKPj4gKwo+PiAgIC8qIENsaWVudCBJRCAwIGlzIHJlc2VydmVkIGZv ciBoeXBlcnZpc29yIGl0c2VsZiAqLwo+PiAgICNkZWZpbmUgT1BURUVfQ0xJRU5UX0lEKGRvbWFp bikgKChkb21haW4pLT5kb21haW5faWQgKyAxKQo+PiAgIEBAIC0zMyw2ICs0OSwxNSBAQAo+PiAg ICAqLwo+PiAgICNkZWZpbmUgREVGX01BWF9PUFRFRV9USFJFQURTIDE2Cj4+ICAgKy8qCj4+ICsg KiBNYXhpbXVtIHRvdGFsIG51bWJlciBvZiBwYWdlcyB0aGF0IGd1ZXN0IGNhbiBzaGFyZSB3aXRo Cj4+ICsgKiBPUC1URUUuIEN1cnJlbnRseSB2YWx1ZSBpcyBzZWxlY3RlZCBhcmJpdHJhcnkuIEFj dHVhbCBudW1iZXIgb2YKPj4gKyAqIHBhZ2VzIGRlcGVuZHMgb24gZnJlZSBoZWFwIGluIE9QLVRF RS4gQXMgd2UgY2FuJ3QgZG8gYW55Cj4+ICsgKiBhc3N1bXB0aW9ucyBhYm91dCBPUC1URUUgaGVh cCB1c2FnZSwgd2UgbGltaXQgbnVtYmVyIG9mIHBhZ2VzCj4+ICsgKiBhcmJpdHJhcnkuCj4+ICsg Ki8KPj4gKyNkZWZpbmUgTUFYX1RPVEFMX1NNSF9CVUZfUEcgICAgMTYzODQKPj4gKwo+PiAgICNk ZWZpbmUgT1BURUVfS05PV05fTlNFQ19DQVBTIE9QVEVFX1NNQ19OU0VDX0NBUF9VTklQUk9DRVNT T1IKPj4gICAjZGVmaW5lIE9QVEVFX0tOT1dOX1NFQ19DQVBTIChPUFRFRV9TTUNfU0VDX0NBUF9I QVZFX1JFU0VSVkVEX1NITSB8IFwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP UFRFRV9TTUNfU0VDX0NBUF9VTlJFR0lTVEVSRURfU0hNIHwgXAo+PiBAQCAtNjUsMTEgKzkwLDMx IEBAIHN0cnVjdCBzaG1fcnBjIHsKPj4gICAgICAgdWludDY0X3QgY29va2llOwo+PiAgIH07Cj4+ ICAgKy8qIFNoYXJlZCBtZW1vcnkgYnVmZmVyIGZvciBhcmJpdHJhcnkgZGF0YSAqLwo+PiArc3Ry dWN0IG9wdGVlX3NobV9idWYgewo+PiArICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPj4gKyAg ICB1aW50NjRfdCBjb29raWU7Cj4+ICsgICAgdW5zaWduZWQgaW50IHBhZ2VfY250Owo+PiArICAg IC8qCj4+ICsgICAgICogU2hhZG93ZWQgY29udGFpbmVyIGZvciBsaXN0IG9mIHBhZ2VzIHRoYXQg Z3Vlc3QgdHJpZXMgdG8gc2hhcmUKPj4gKyAgICAgKiB3aXRoIE9QLVRFRS4gVGhpcyBpcyBub3Qg dGhlIGxpc3Qgb2YgcGFnZXMgdGhhdCBndWVzdCBzaGFyZWQKPj4gKyAgICAgKiB3aXRoIE9QLVRF RSwgYnV0IGNvbnRhaW5lciBmb3IgbGlzdCBvZiB0aG9zZSBwYWdlcy4gQ2hlY2sKPj4gKyAgICAg KiBPUFRFRV9NU0dfQVRUUl9OT05DT05USUcgZGVmaW5pdGlvbiBpbiBvcHRlZV9tc2cuaCBmb3Ig bW9yZQo+PiArICAgICAqIGluZm9ybWF0aW9uLgo+PiArICAgICAqLwo+PiArICAgIHN0cnVjdCBw YWdlX2luZm8gKnBnX2xpc3Q7Cj4+ICsgICAgdW5zaWduZWQgaW50IHBnX2xpc3Rfb3JkZXI7Cj4+ ICsgICAgLyogUGlubmVkIGd1ZXN0IHBhZ2VzIHRoYXQgYXJlIHNoYXJlZCB3aXRoIE9QLVRFRSAq Lwo+PiArICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2VzW107Cj4+ICt9Owo+PiArCj4+ICAgLyog RG9tYWluIGNvbnRleHQgKi8KPj4gICBzdHJ1Y3Qgb3B0ZWVfZG9tYWluIHsKPj4gICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBjYWxsX2xpc3Q7Cj4+ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc2htX3Jw Y19saXN0Owo+PiArICAgIHN0cnVjdCBsaXN0X2hlYWQgb3B0ZWVfc2htX2J1Zl9saXN0Owo+PiAg ICAgICBhdG9taWNfdCBjYWxsX2NvdW50Owo+PiArICAgIGF0b21pY190IG9wdGVlX3NobV9idWZf cGFnZXM7Cj4+ICAgICAgIHNwaW5sb2NrX3QgbG9jazsKPj4gICB9Owo+PiAgIEBAIC0xMzYsNyAr MTgxLDkgQEAgc3RhdGljIGludCBvcHRlZV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQo+ PiAgICAgICAgIElOSVRfTElTVF9IRUFEKCZjdHgtPmNhbGxfbGlzdCk7Cj4+ICAgICAgIElOSVRf TElTVF9IRUFEKCZjdHgtPnNobV9ycGNfbGlzdCk7Cj4+ICsgICAgSU5JVF9MSVNUX0hFQUQoJmN0 eC0+b3B0ZWVfc2htX2J1Zl9saXN0KTsKPj4gICAgICAgYXRvbWljX3NldCgmY3R4LT5jYWxsX2Nv dW50LCAwKTsKPj4gKyAgICBhdG9taWNfc2V0KCZjdHgtPm9wdGVlX3NobV9idWZfcGFnZXMsIDAp Owo+PiAgICAgICBzcGluX2xvY2tfaW5pdCgmY3R4LT5sb2NrKTsKPj4gICAgICAgICBkLT5hcmNo LnRlZSA9IGN0eDsKPj4gQEAgLTM2MywxMCArNDEwLDEzNCBAQCBzdGF0aWMgdm9pZCBmcmVlX3No bV9ycGMoc3RydWN0IG9wdGVlX2RvbWFpbiAqY3R4LCB1aW50NjRfdCBjb29raWUpCj4+ICAgICAg IHhmcmVlKHNobV9ycGMpOwo+PiAgIH0KPj4gICArc3RhdGljIHN0cnVjdCBvcHRlZV9zaG1fYnVm ICphbGxvY2F0ZV9vcHRlZV9zaG1fYnVmKHN0cnVjdAo+PiBvcHRlZV9kb21haW4gKmN0eCwKPj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 NjRfdCBjb29raWUsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IHBhZ2VzX2NudCwKPj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZ19s aXN0LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBwZ19saXN0X29yZGVyKQo+PiArewo+PiArICAgIHN0cnVjdCBvcHRl ZV9zaG1fYnVmICpvcHRlZV9zaG1fYnVmLCAqb3B0ZWVfc2htX2J1Zl90bXA7Cj4+ICsgICAgaW50 IG9sZCwgbmV3Owo+PiArICAgIGludCBlcnJfY29kZTsKPj4gKwo+PiArICAgIGRvCj4+ICsgICAg ewo+PiArICAgICAgICBvbGQgPSBhdG9taWNfcmVhZCgmY3R4LT5vcHRlZV9zaG1fYnVmX3BhZ2Vz KTsKPj4gKyAgICAgICAgbmV3ID0gb2xkICsgcGFnZXNfY250Owo+PiArICAgICAgICBpZiAoIG5l dyA+PSBNQVhfVE9UQUxfU01IX0JVRl9QRyApCj4KPiBBZ2FpbiwgdGhlIGxpbWl0YXRpb24gaXMg aW4gbnVtYmVyIG9mIHBhZ2UgYW5kIHF1aXRlIGhpZ2guIFdoYXQgd291bGQKPiBwcmV2ZW50IGEg Z3Vlc3QgdG8gcmVnaXN0ZXIgc2hhcmVkIG1lbW9yeSBwYWdlIGJ5IHBhZ2U/IElmIG5vdGhpbmcs Cj4gdGhlbiBJIHRoaW5rIHlvdSBjYW4gZW5kIHVwIHRvIGludGVyZXN0aW5nIGlzc3VlcyBpbiBY ZW4gYmVjYXVzZSBvZgo+IHRoZSBncm93aW5nIGxpc3QgYW5kIG1lbW9yeSB1c2VkLgoKT1AtVEVF IHdpbGwgbGltaXQgdGhpcyBvbiBpdCdzIHNpZGUuIEluIG1vc3QgY2FzZXMgWGVuIGhhdmUgbXVj aCBiaWdnZXIKaGVhcCB0aGFuIE9QLVRFRSA6LSkKCkRvIHlvdSB3YW50IG1lIHRvIGxpbWl0IHRo aXMgYm90aCBpbiBtZW1vcnkgc2l6ZSBhbmQgaW4gbnVtYmVyIG9mIGJ1ZmZlcnM/Cgo+Cj4+ICsg ICAgICAgICAgICByZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPj4gKyAgICB9Cj4+ICsgICAgd2hp bGUgKCB1bmxpa2VseShvbGQgIT0gYXRvbWljX2NtcHhjaGcoJmN0eC0+b3B0ZWVfc2htX2J1Zl9w YWdlcywKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGQs IG5ldykpICk7Cj4+ICsKPj4gKyAgICBvcHRlZV9zaG1fYnVmID0geHphbGxvY19ieXRlcyhzaXpl b2Yoc3RydWN0IG9wdGVlX3NobV9idWYpICsKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwYWdlc19jbnQgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKikpOwo+PiArICAgIGlmICgg IW9wdGVlX3NobV9idWYgKQo+PiArICAgIHsKPj4gKyAgICAgICAgZXJyX2NvZGUgPSAtRU5PTUVN Owo+PiArICAgICAgICBnb3RvIGVycjsKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBvcHRlZV9zaG1f YnVmLT5jb29raWUgPSBjb29raWU7Cj4+ICsgICAgb3B0ZWVfc2htX2J1Zi0+cGdfbGlzdCA9IHBn X2xpc3Q7Cj4+ICsgICAgb3B0ZWVfc2htX2J1Zi0+cGdfbGlzdF9vcmRlciA9IHBnX2xpc3Rfb3Jk ZXI7Cj4+ICsKPj4gKyAgICBzcGluX2xvY2soJmN0eC0+bG9jayk7Cj4+ICsgICAgLyogQ2hlY2sg aWYgdGhlcmUgaXMgYWxyZWFkeSBTSE0gd2l0aCB0aGUgc2FtZSBjb29raWUgKi8KPj4gKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KCBvcHRlZV9zaG1fYnVmX3RtcCwgJmN0eC0+b3B0ZWVfc2htX2J1 Zl9saXN0LCBsaXN0ICkKPj4gKyAgICB7Cj4+ICsgICAgICAgIGlmICggb3B0ZWVfc2htX2J1Zl90 bXAtPmNvb2tpZSA9PSBjb29raWUgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICBzcGlu X3VubG9jaygmY3R4LT5sb2NrKTsKPj4gKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiR3Vlc3QgdHJpZXMgdG8gdXNlIHRoZSBzYW1lIFNITSBidWZmZXIgY29va2llICVseFxu IiwKPgo+IFRoZSBsaW5lIGxvb2tzIHRvbyBsb25nLiBQbGVhc2Ugc3BsaXQgYWZ0ZXIgdGhlIGZp cnN0IGNvbW1hLgpBaCwgb2theS4gSSBzZWVuIGJvdGggdmFyaWFudCBpbiB0aGUgY29kZSBhbmQg d2FzIHVuc3VyZSB3aGljaCBvbmUgaXMKcmlnaHQuIFdpbGwgZG8gZm9yIGFsbCBsb25nIG1lc3Nh Z2VzLgoKWy4uLl0KPj4gICBzdGF0aWMgaW50IG9wdGVlX3JlbGlucXVpc2hfcmVzb3VyY2VzKHN0 cnVjdCBkb21haW4gKmQpCj4+ICAgewo+PiAgICAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNh bGwsICpjYWxsX3RtcDsKPj4gICAgICAgc3RydWN0IHNobV9ycGMgKnNobV9ycGMsICpzaG1fcnBj X3RtcDsKPj4gKyAgICBzdHJ1Y3Qgb3B0ZWVfc2htX2J1ZiAqb3B0ZWVfc2htX2J1ZiwgKm9wdGVl X3NobV9idWZfdG1wOwo+PiAgICAgICBzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpjdHggPSBkLT5hcmNo LnRlZTsKPj4gICAgICAgICBpZiAoICFjdHggKQo+PiBAQCAtMzgxLDYgKzU1MiwxMyBAQCBzdGF0 aWMgaW50IG9wdGVlX3JlbGlucXVpc2hfcmVzb3VyY2VzKHN0cnVjdCBkb21haW4gKmQpCj4+ICAg ICAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSggc2htX3JwYywgc2htX3JwY190bXAsICZjdHgt PnNobV9ycGNfbGlzdCwgbGlzdCApCj4+ICAgICAgICAgICBmcmVlX3NobV9ycGMoY3R4LCBzaG1f cnBjLT5jb29raWUpOwo+PiAgICsgICAgaWYgKCBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpICkK Pj4gKyAgICAgICAgcmV0dXJuIC1FUkVTVEFSVDsKPgo+IFNhbWUgcXVlc3Rpb24gYXMgdGhlIG90 aGVyIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkuCgpFeGN1c2UgbWUsIGJ1dCB3aGF0IHF1ZXN0 aW9uPyBJIGxvb2tlZCB0aHJ1IGFsbCB5b3VyIGVtYWlscyBhbmQgY2FuJ3QKZmluZCBvbmUuCgo+ PiArCj4+ICsgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKCBvcHRlZV9zaG1fYnVmLCBvcHRl ZV9zaG1fYnVmX3RtcCwKPj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZjdHgtPm9w dGVlX3NobV9idWZfbGlzdCwgbGlzdCApCj4+ICsgICAgICAgIGZyZWVfb3B0ZWVfc2htX2J1Zihj dHgsIG9wdGVlX3NobV9idWYtPmNvb2tpZSk7Cj4+ICsKPj4gICAgICAgcmV0dXJuIDA7Cj4+ICAg fQo+PiAgIEBAIC00MDYsMTEgKzU4NCwxODYgQEAgc3RhdGljIHZvaWQgb3B0ZWVfZG9tYWluX2Rl c3Ryb3koc3RydWN0Cj4+IGRvbWFpbiAqZCkKPj4gICAgICAgICBBU1NFUlQoIXNwaW5faXNfbG9j a2VkKCZjdHgtPmxvY2spKTsKPj4gICAgICAgQVNTRVJUKCFhdG9taWNfcmVhZCgmY3R4LT5jYWxs X2NvdW50KSk7Cj4+ICsgICAgQVNTRVJUKCFhdG9taWNfcmVhZCgmY3R4LT5vcHRlZV9zaG1fYnVm X3BhZ2VzKSk7Cj4+ICAgICAgIEFTU0VSVChsaXN0X2VtcHR5KCZjdHgtPnNobV9ycGNfbGlzdCkp Owo+PiAgICAgICAgIFhGUkVFKGQtPmFyY2gudGVlKTsKPj4gICB9Cj4+ICAgKyNkZWZpbmUgUEFH RUxJU1RfRU5UUklFU19QRVJfUEFHRSAgICAgICAgICAgICAgICAgICAgICAgXAo+PiArICAgICgo T1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLyBzaXplb2YodTY0KSkgLSAxKQo+PiArCj4+ ICtzdGF0aWMgc2l6ZV90IGdldF9wYWdlc19saXN0X3NpemUoc2l6ZV90IG51bV9lbnRyaWVzKQo+ PiArewo+PiArICAgIGludCBwYWdlcyA9IERJVl9ST1VORF9VUChudW1fZW50cmllcywgUEFHRUxJ U1RfRU5UUklFU19QRVJfUEFHRSk7Cj4+ICsKPj4gKyAgICByZXR1cm4gcGFnZXMgKiBPUFRFRV9N U0dfTk9OQ09OVElHX1BBR0VfU0laRTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGludCB0cmFuc2xh dGVfbm9uY29udGlnKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKPj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2NhbGwgKmNhbGwsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX21zZ19wYXJhbSAqcGFyYW0pCj4+ ICt7Cj4+ICsgICAgdWludDY0X3Qgc2l6ZTsKPj4gKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9vZmZz ZXQ7Cj4+ICsgICAgdW5zaWduZWQgaW50IG51bV9wYWdlczsKPj4gKyAgICB1bnNpZ25lZCBpbnQg b3JkZXI7Cj4+ICsgICAgdW5zaWduZWQgaW50IGVudHJpZXNfb25fcGFnZSA9IDA7Cj4+ICsgICAg Z2ZuX3QgZ2ZuOwo+PiArICAgIHAybV90eXBlX3QgcDJtOwo+PiArICAgIHN0cnVjdCBwYWdlX2lu Zm8gKmd1ZXN0X3BhZ2UsICp4ZW5fcGFnZXM7Cj4+ICsgICAgc3RydWN0IG9wdGVlX3NobV9idWYg Km9wdGVlX3NobV9idWY7Cj4+ICsgICAgLyoKPj4gKyAgICAgKiBUaGlzIGlzIG1lbW9yeSBsYXlv dXQgZm9yIHBhZ2UgbGlzdC4gQmFzaWNhbGx5IGxpc3QgY29uc2lzdHMgb2YgNGsgcGFnZXMsCj4+ ICsgICAgICogZXZlcnkgcGFnZSBzdG9yZSA1MTEgcGFnZSBhZGRyZXNzZXMgb2YgdXNlciBidWZm ZXIgYW5kIHBhZ2UgYWRkcmVzcyBvZgo+PiArICAgICAqIHRoZSBuZXh0IHBhZ2Ugb2YgbGlzdC4K Pj4gKyAgICAgKgo+PiArICAgICAqIFJlZmVyIHRvIE9QVEVFX01TR19BVFRSX05PTkNPTlRJRyBk ZXNjcmlwdGlvbiBpbiBvcHRlZV9tc2cuaCBmb3IgZGV0YWlscy4KPj4gKyAgICAgKi8KPj4gKyAg ICBzdHJ1Y3Qgewo+PiArICAgICAgICB1aW50NjRfdCBwYWdlc19saXN0W1BBR0VMSVNUX0VOVFJJ RVNfUEVSX1BBR0VdOwo+PiArICAgICAgICB1aW50NjRfdCBuZXh0X3BhZ2VfZGF0YTsKPj4gKyAg ICB9ICpwYWdlc19kYXRhX2d1ZXN0LCAqcGFnZXNfZGF0YV94ZW47Cj4+ICsKPj4gKyAgICAvKiBP ZmZzZXQgb2YgdXNlciBidWZmZXIgd2l0aGluZyBwYWdlICovCj4KPiBPZmZzZXQgb2YgdGhlIGJ1 ZmZlciB3aXRoaW4gdGhlIE9QLVRFRSBwYWdlCj4KPj4gKyAgICBwYWdlX29mZnNldCA9IHBhcmFt LT51LnRtZW0uYnVmX3B0ciAmIChPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpOwo+ PiArCj4+ICsgICAgLyogU2l6ZSBvZiB0aGUgdXNlciBidWZmZXIgaW4gYnl0ZXMgKi8KPj4gKyAg ICBzaXplID0gUk9VTkRVUChwYXJhbS0+dS50bWVtLnNpemUgKyBwYWdlX29mZnNldCwKPj4gKyAg ICAgICAgICAgICAgICAgICBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7Cj4+ICsKPj4g KyAgICBudW1fcGFnZXMgPSBESVZfUk9VTkRfVVAoc2l6ZSwgT1BURUVfTVNHX05PTkNPTlRJR19Q QUdFX1NJWkUpOwo+PiArCj4+ICsgICAgb3JkZXIgPSBnZXRfb3JkZXJfZnJvbV9ieXRlcyhnZXRf cGFnZXNfbGlzdF9zaXplKG51bV9wYWdlcykpOwo+PiArCj4+ICsgICAgeGVuX3BhZ2VzID0gYWxs b2NfZG9taGVhcF9wYWdlcyhjdXJyZW50LT5kb21haW4sIG9yZGVyLCAwKTsKPj4gKyAgICBpZiAo ICF4ZW5fcGFnZXMgKQo+PiArICAgICAgICByZXR1cm4gLUVOT01FTTsKPj4gKwo+PiArICAgIG9w dGVlX3NobV9idWYgPSBhbGxvY2F0ZV9vcHRlZV9zaG1fYnVmKGN0eCwgcGFyYW0tPnUudG1lbS5z aG1fcmVmLAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51 bV9wYWdlcywgeGVuX3BhZ2VzLCBvcmRlcik7Cj4KPiBJbiBhbiBlYXJsaWVyIHZlcnNpb24sIEkg cG9pbnRlZCBvdXQgdGhhdCB5b3Ugd2lsbCBhbGxvdyB0byBhbGxvY2F0ZQo+IHVwIHRvIDY0TUIg cGVyIGNhbGwuIFRoaXMgaXMgYSBwb3RlbnRpYWwgc2VjdXJpdHkgaXNzdWUgb24gWGVuLiBXaGls ZQo+IEkgc2FpZCBJIHdvdWxkIGJlIGhhcHB5IHRvIGdldCB0aGlzIGNvZGUgbWVyZ2VkIGFzIGl0 LCBJIHdvdWxkIGV4cGVjdAo+IHRvIGF0IGxlYXN0IHNlZSBhIFRPRE8gaW4gdGhlIGNvZGUgZXhw bGFpbmluZyBwb3RlbnRpYWwgcHJvYmxlbS4gU28gd2UKPiBrbm93IHRoZSBwcm9ibGVtIGV4aXN0 IGFuZCBjYW4ndCBzZWN1cml0eSBzdXBwb3J0IHVudGlsIHRoaXMgaXMgZml4ZWQuClN1cmUuIFlv dSB3YW50IG1lIHRvIGFkZCB0aGlzIFRPRE8gdGhlcmUgb3IgaW5zaWRlCmFsbG9jYXRlX29wdGVl X3NobV9idWYoKSBmdW5jdGlvbiwgd2hlcmUgaXQgYWN0dWFsbHkgZG9lcyBhbGxvY2F0aW9uPwoK PiBJIG1heSBoYXZlIG1pc3NlZCBvdGhlciBwbGFjZXMgd2hpbGUgcmV2aWV3aW5nIHRoaXMgdmVy c2lvbi4gUGxlYXNlIGdvCj4gYmFjayBpbiB0aGUgcmV2aWV3IEkgaGF2ZSBtYWRlIGluIHRoZSBw YXN0IGFuZCBkb2N1bWVudCBhbGwgdGhlCj4gcG90ZW50aWFsIHNlY3VyaXR5IGhvbGVzLgpPa2F5 LCB3aWxsIGRvLgoKPj4gKyAgICBpZiAoIElTX0VSUihvcHRlZV9zaG1fYnVmKSApCj4+ICsgICAg ICAgIHJldHVybiBQVFJfRVJSKG9wdGVlX3NobV9idWYpOwo+PiArCj4+ICsgICAgZ2ZuID0gZ2Fk ZHJfdG9fZ2ZuKHBhcmFtLT51LnRtZW0uYnVmX3B0ciAmCj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIH4oT1BURUVfTVNHX05PTkNPTlRJR19QQUdFX1NJWkUgLSAxKSk7Cj4+ICsKPj4gKyAgICBn dWVzdF9wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBnZm5feChnZm4p LCAmcDJtLCBQMk1fQUxMT0MpOwo+PiArICAgIGlmICggIWd1ZXN0X3BhZ2UgfHwgcDJtICE9IHAy bV9yYW1fcncgKQo+PiArICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAgIHBhZ2Vz X2RhdGFfZ3Vlc3QgPSBfX21hcF9kb21haW5fcGFnZShndWVzdF9wYWdlKTsKPj4gKyAgICBwYWdl c19kYXRhX3hlbiA9IF9fbWFwX2RvbWFpbl9wYWdlKHhlbl9wYWdlcyk7Cj4+ICsKPj4gKyAgICB3 aGlsZSAoIG51bV9wYWdlcyApCj4+ICsgICAgewo+PiArICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlOwo+Cj4gTmV3bGluZSBoZXJlIHBsZWFzZS4KPgo+PiArICAgICAgICBwYWdlID0gZ2V0 X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLAo+PiArICAgICAgICAgICAgICAgICAgcGFk ZHJfdG9fcGZuKHBhZ2VzX2RhdGFfZ3Vlc3QtPnBhZ2VzX2xpc3RbZW50cmllc19vbl9wYWdlXSks Cj4+ICsgICAgICAgICAgICAgICAgICAmcDJtLCBQMk1fQUxMT0MpOwo+Cj4gVGhlIGluZGVudGF0 aW9uIGlzIHdyb25nIGhlcmUuIEJ1dCB0aGUgcHJvYmxlbSBpcyBkdWUgdG8gdGhlIGxvbmcKPiBu YW1lLiBGb3IgaW5zdGFuY2UsIHlvdSBoYXZlIDMgdGltZXMgdGhlIHdvcmQgInBhZ2UiIG9uIHRo ZSBzYW1lCj4gbGluZS4gSXMgdGhhdCBuZWNlc3Nhcnk/CkNvZGUgaXMgcXVpdGUgY29tcGxleC4g SSB3YW50IGV2ZXJ5IHZhcmlhYmxlIHRvIGJlIGFzIGRlc2NyaXB0aXZlIGFzCnBvc3NpYmxlLiBJ biBzb21lIGNhc2VzIGl0IGxlYWRzIHRvIGlzc3VlcyBsaWtlIHRoaXMgOi0pCgpJJ2xsIHNlZSB3 aGF0IGNhbiBiZSBkb25lIHRoZXJlLgoKCj4+ICsKPj4gKyAgICAgICAgaWYgKCAhcGFnZSB8fCBw Mm0gIT0gcDJtX3JhbV9ydyApCj4+ICsgICAgICAgICAgICBnb3RvIGVycl91bm1hcDsKPj4gKwo+ PiArICAgICAgICBvcHRlZV9zaG1fYnVmLT5wYWdlc1tvcHRlZV9zaG1fYnVmLT5wYWdlX2NudCsr XSA9IHBhZ2U7Cj4+ICsgICAgICAgIHBhZ2VzX2RhdGFfeGVuLT5wYWdlc19saXN0W2VudHJpZXNf b25fcGFnZV0gPSBwYWdlX3RvX21hZGRyKHBhZ2UpOwo+PiArICAgICAgICBlbnRyaWVzX29uX3Bh Z2UrKzsKPj4gKwo+PiArICAgICAgICBpZiAoIGVudHJpZXNfb25fcGFnZSA9PSBQQUdFTElTVF9F TlRSSUVTX1BFUl9QQUdFICkKPj4gKyAgICAgICAgewo+PiArICAgICAgICAgICAgcGFnZXNfZGF0 YV94ZW4tPm5leHRfcGFnZV9kYXRhID0gcGFnZV90b19tYWRkcih4ZW5fcGFnZXMgKyAxKTsKPj4g KyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFfeGVuKTsKPj4gKyAgICAg ICAgICAgIHhlbl9wYWdlcysrOwo+PiArCj4+ICsgICAgICAgICAgICBnZm4gPSBnYWRkcl90b19n Zm4ocGFnZXNfZGF0YV9ndWVzdC0+bmV4dF9wYWdlX2RhdGEpOwo+PiArCj4+ICsgICAgICAgICAg ICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKPj4gKyAgICAgICAgICAgIHB1 dF9wYWdlKGd1ZXN0X3BhZ2UpOwo+PiArCj4+ICsgICAgICAgICAgICBndWVzdF9wYWdlID0gZ2V0 X3BhZ2VfZnJvbV9nZm4oY3VycmVudC0+ZG9tYWluLCBnZm5feChnZm4pLCAmcDJtLAo+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyTV9BTExPQyk7Cj4+ICsg ICAgICAgICAgICBpZiAoICFndWVzdF9wYWdlIHx8IHAybSAhPSBwMm1fcmFtX3J3ICkKPj4gKyAg ICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKPj4gKwo+PiArICAgICAgICAgICAgcGFnZXNf ZGF0YV9ndWVzdCA9IF9fbWFwX2RvbWFpbl9wYWdlKGd1ZXN0X3BhZ2UpOwo+PiArICAgICAgICAg ICAgcGFnZXNfZGF0YV94ZW4gPSBfX21hcF9kb21haW5fcGFnZSh4ZW5fcGFnZXMpOwo+PiArICAg ICAgICAgICAgLyogUm9sbCBvdmVyIHRvIHRoZSBuZXh0IHBhZ2UgKi8KPj4gKyAgICAgICAgICAg IGVudHJpZXNfb25fcGFnZSA9IDA7Cj4+ICsgICAgICAgIH0KPj4gKyAgICAgICAgbnVtX3BhZ2Vz LS07Cj4+ICsgICAgfQo+PiArCj4+ICsgICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV9n dWVzdCk7Cj4+ICsgICAgdW5tYXBfZG9tYWluX3BhZ2UocGFnZXNfZGF0YV94ZW4pOwo+PiArICAg IHB1dF9wYWdlKGd1ZXN0X3BhZ2UpOwo+PiArCj4+ICsgICAgcGFyYW0tPnUudG1lbS5idWZfcHRy ID0gcGFnZV90b19tYWRkcihvcHRlZV9zaG1fYnVmLT5wZ19saXN0KSB8Cj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcGFnZV9vZmZzZXQ7Cj4+ICsKPj4gKyAgICByZXR1cm4gMDsKPj4g Kwo+PiArZXJyX3VubWFwOgo+PiArICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFfZ3Vl c3QpOwo+PiArICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFfeGVuKTsKPj4gKyAgICBw dXRfcGFnZShndWVzdF9wYWdlKTsKPj4gKyAgICBmcmVlX29wdGVlX3NobV9idWYoY3R4LCBvcHRl ZV9zaG1fYnVmLT5jb29raWUpOwo+PiArCj4+ICsgICAgcmV0dXJuIC1FSU5WQUw7Cj4+ICt9Cj4+ ICsKPj4gK3N0YXRpYyBpbnQgdHJhbnNsYXRlX3BhcmFtcyhzdHJ1Y3Qgb3B0ZWVfZG9tYWluICpj dHgsCj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX3N0ZF9jYWxs ICpjYWxsKQo+PiArewo+PiArICAgIHVuc2lnbmVkIGludCBpOwo+PiArICAgIHVpbnQzMl90IGF0 dHI7Cj4+ICsgICAgaW50IHJldCA9IDA7Cj4+ICsKPj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGNh bGwtPnhlbl9hcmctPm51bV9wYXJhbXM7IGkrKyApCj4+ICsgICAgewo+PiArICAgICAgICBhdHRy ID0gY2FsbC0+eGVuX2FyZy0+cGFyYW1zW2ldLmF0dHI7Cj4+ICsKPj4gKyAgICAgICAgc3dpdGNo ICggYXR0ciAmIE9QVEVFX01TR19BVFRSX1RZUEVfTUFTSyApCj4+ICsgICAgICAgIHsKPj4gKyAg ICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ6Cj4+ICsgICAgICAgIGNh c2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKPj4gKyAgICAgICAgY2FzZSBPUFRF RV9NU0dfQVRUUl9UWVBFX1RNRU1fSU5PVVQ6Cj4+ICsgICAgICAgICAgICBpZiAoIGF0dHIgJiBP UFRFRV9NU0dfQVRUUl9OT05DT05USUcgKQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAg ICAgICAgIHJldCA9IHRyYW5zbGF0ZV9ub25jb250aWcoY3R4LCBjYWxsLCBjYWxsLT54ZW5fYXJn LT5wYXJhbXMgKyBpKTsKPj4gKyAgICAgICAgICAgICAgICBpZiAoIHJldCApCj4+ICsgICAgICAg ICAgICAgICAgICAgIGdvdG8gb3V0Owo+PiArICAgICAgICAgICAgfQo+PiArICAgICAgICAgICAg ZWxzZQo+PiArICAgICAgICAgICAgewo+PiArICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLCAiR3Vlc3QgdHJpZXMgdG8gdXNlIG9sZCB0bWVtIGFyZ1xuIik7Cj4+ICsgICAg ICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPj4gKyAgICAgICAgICAgICAgICBnb3RvIG91dDsK Pj4gKyAgICAgICAgICAgIH0KPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICBjYXNl IE9QVEVFX01TR19BVFRSX1RZUEVfTk9ORToKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRU Ul9UWVBFX1ZBTFVFX0lOUFVUOgo+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVf VkFMVUVfT1VUUFVUOgo+PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVf SU5PVVQ6Cj4+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX0lOUFVUOgo+ PiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9PVVRQVVQ6Cj4+ICsgICAg ICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX0lOT1VUOgo+PiArICAgICAgICAgICAg Y29udGludWU7Cj4+ICsgICAgICAgIH0KPj4gKyAgICB9Cj4+ICsKPj4gK291dDoKPj4gKyAgICBp ZiAoIHJldCApCj4+ICsgICAgewo+PiArICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXRfb3JpZ2lu ID0gVEVFQ19PUklHSU5fQ09NTVM7Cj4+ICsgICAgICAgIGlmICggcmV0ID09IC1FTk9NRU0gKQo+ PiArICAgICAgICAgICAgY2FsbC0+eGVuX2FyZy0+cmV0ID0gVEVFQ19FUlJPUl9PVVRfT0ZfTUVN T1JZOwo+PiArICAgICAgICBlbHNlCj4+ICsgICAgICAgICAgICBjYWxsLT54ZW5fYXJnLT5yZXQg PSBURUVDX0VSUk9SX0JBRF9QQVJBTUVURVJTOwo+PiArICAgIH0KPj4gKwo+PiArICAgIHJldHVy biByZXQ7Cj4+ICt9Cj4+ICsKPj4gICAvKgo+PiAgICAqIENvcHkgY29tbWFuZCBidWZmZXIgaW50 byBkb21oZWFwIG1lbW9yeSB0bzoKPj4gICAgKiAxKSBIaWRlIHRyYW5zbGF0ZWQgYWRkcmVzc2Vz IGZyb20gZ3Vlc3QKPj4gQEAgLTUzNyw2ICs4OTAsMjcgQEAgc3RhdGljIHZvaWQgY29weV9zdGRf cmVxdWVzdF9iYWNrKHN0cnVjdCBvcHRlZV9kb21haW4gKmN0eCwKPj4gICAgICAgcHV0X3BhZ2Uo cGFnZSk7Cj4+ICAgfQo+PiAgICsKPj4gK3N0YXRpYyB2b2lkIGZyZWVfc2htX2J1ZmZlcnMoc3Ry dWN0IG9wdGVlX2RvbWFpbiAqY3R4LAo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgb3B0ZWVfbXNnX2FyZyAqYXJnKQo+PiArewo+PiArICAgIHVuc2lnbmVkIGludCBpOwo+ PiArCj4+ICsgICAgZm9yICggaSA9IDA7IGkgPCBhcmctPm51bV9wYXJhbXM7IGkgKysgKQo+PiAr ICAgIHsKPj4gKyAgICAgICAgc3dpdGNoICggYXJnLT5wYXJhbXNbaV0uYXR0ciAmIE9QVEVFX01T R19BVFRSX1RZUEVfTUFTSyApCj4+ICsgICAgICAgIHsKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9N U0dfQVRUUl9UWVBFX1RNRU1fSU5QVVQ6Cj4+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJf VFlQRV9UTUVNX09VVFBVVDoKPj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1RN RU1fSU5PVVQ6Cj4+ICsgICAgICAgICAgICBmcmVlX29wdGVlX3NobV9idWYoY3R4LCBhcmctPnBh cmFtc1tpXS51LnRtZW0uc2htX3JlZik7Cj4+ICsgICAgICAgICAgICBicmVhazsKPj4gKyAgICAg ICAgZGVmYXVsdDoKPj4gKyAgICAgICAgICAgIGJyZWFrOwo+PiArICAgICAgICB9Cj4+ICsgICAg fQo+PiArfQo+PiArCj4+ICAgLyogSGFuZGxlIFJQQyByZXR1cm4gZnJvbSBPUC1URUUgKi8KPj4g ICBzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX3JldHVybihzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVn cywKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb3B0ZWVfc3RkX2Nh bGwgKmNhbGwpCj4+IEBAIC01NTYsNiArOTMwLDggQEAgc3RhdGljIHZvaWQgaGFuZGxlX3JwY19y ZXR1cm4oc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCj4+ICAgICogSWYgdGhpcyBpcyBSUEMg LSB3ZSBuZWVkIHRvIHN0b3JlIGNhbGwgY29udGV4dCBhbmQgcmV0dXJuIGJhY2sgdG8gZ3Vlc3Qu Cj4+ICAgICogSWYgY2FsbCBpcyBjb21wbGV0ZSAtIHdlIG5lZWQgdG8gcmV0dXJuIHJlc3VsdHMg d2l0aCBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soKQo+PiAgICAqIGFuZCB0aGVuIHdlIHdpbGwgZGVz dHJveSB0aGUgY2FsbCBjb250ZXh0IGFzIGl0IGlzIG5vdCBuZWVkZWQgYW55bW9yZS4KPj4gKyAq Cj4+ICsgKiBTaGFyZWQgYnVmZmVycyBzaG91bGQgYmUgaGFuZGxlZCBpbiBhIHNwZWNpYWwgd2F5 Lgo+PiAgICAqLwo+PiAgIHN0YXRpYyB2b2lkIGV4ZWN1dGVfc3RkX2NhbGwoc3RydWN0IG9wdGVl X2RvbWFpbiAqY3R4LAo+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MsCj4+IEBAIC01NzYsNiArOTUyLDIzIEBAIHN0YXRpYyB2b2lkIGV4 ZWN1dGVfc3RkX2NhbGwoc3RydWN0IG9wdGVlX2RvbWFpbiAqY3R4LAo+PiAgICAgICAgIGNvcHlf c3RkX3JlcXVlc3RfYmFjayhjdHgsIHJlZ3MsIGNhbGwpOwo+PiAgICsgICAgc3dpdGNoICggY2Fs bC0+eGVuX2FyZy0+Y21kICkKPj4gKyAgICB7Cj4+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX1JF R0lTVEVSX1NITToKPj4gKyAgICAgICAgaWYgKCBjYWxsLT54ZW5fYXJnLT5yZXQgPT0gMCApCj4+ ICsgICAgICAgICAgICBmcmVlX29wdGVlX3NobV9idWZfcGdfbGlzdChjdHgsCj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGwtPnhlbl9hcmctPnBhcmFtc1swXS51LnRt ZW0uc2htX3JlZik7Cj4+ICsgICAgICAgIGVsc2UKPj4gKyAgICAgICAgICAgIGZyZWVfb3B0ZWVf c2htX2J1ZihjdHgsIGNhbGwtPnhlbl9hcmctPnBhcmFtc1swXS51LnRtZW0uc2htX3JlZik7Cj4+ ICsgICAgICAgIGJyZWFrOwo+PiArICAgIGNhc2UgT1BURUVfTVNHX0NNRF9VTlJFR0lTVEVSX1NI TToKPj4gKyAgICAgICAgaWYgKCBjYWxsLT54ZW5fYXJnLT5yZXQgPT0gMCApCj4+ICsgICAgICAg ICAgICBmcmVlX29wdGVlX3NobV9idWYoY3R4LCBjYWxsLT54ZW5fYXJnLT5wYXJhbXNbMF0udS5y bWVtLnNobV9yZWYpOwo+PiArICAgICAgICBicmVhazsKPj4gKyAgICBkZWZhdWx0Ogo+PiArICAg ICAgICBmcmVlX3NobV9idWZmZXJzKGN0eCwgY2FsbC0+eGVuX2FyZyk7Cj4+ICsgICAgfQo+Cj4g VGhpcyBzd2l0Y2ggc2VlbXMgdG8gYmUgbmV3LiBDb3VsZCB5b3UgZXhwbGFpbiBpbiBhIGNvbW1l bnQgd2hhdCB0aGV5Cj4gYXJlIHN1cHBvc2VkIHRvIGRvPyBGb3IgaW5zdGFuY2UsIHdoeSBkbyB5 b3UgbmVlZCB0byBtYWtlCj4gVU5SRUdJU1RFUl9TSE0gYW5kIFJFR0lTVEVSX1NITSBzcGVpZmlj IGJ5IHNwZWNpZnlpbmcgdGhlIGV4YWN0Cj4gYnVmZmVyPwpUaGlzIGlzIHBhcnRpYWxseSBjb3Zl cmVkIGluIGNvbW1lbnQgYWJvdmUgZXhlY3V0ZV9zdGRfY2FsbCgpIGZ1bmN0aW9uCmRlZmluaXRp b24uIEJhc2ljYWxseSwgdGhlcmUgYXJlIGNhc2VzIHdoZW4gZ3Vlc3Qgc2hhcmVzIG1lbW9yeSB0 ZW1wb3JhcnksIGZvcgpkdXJhdGlvbiBvZiBvbmUgY2FsbC4gQW5kIHRoZXJlIGlzIGEgY2FzZSB3 aGVuIGd1ZXN0IHJlZ2lzdGVycyBzaGFyZWQKbWVtb3J5IGJ1ZmZlciBvbiBPUC1URUUsIHNvIHRo ZW4gdGhlIGd1ZXN0IGNhbiByZWZlciB0aGUgYnVmZmVyIGluCnN1YnNlcXVlbnQgY2FsbHMuIEkn bGwgcHV0IHRoaXMgaW4gdGhlIGNvbW1lbnQuCgo+PiArCj4+ICAgICAgIHB1dF9zdGRfY2FsbChj dHgsIGNhbGwpOwo+PiAgICAgICBmcmVlX3N0ZF9jYWxsKGN0eCwgY2FsbCk7Cj4+ICAgfQo+PiBA QCAtNjA2LDYgKzk5OSwxNyBAQCBzdGF0aWMgdm9pZCBoYW5kbGVfc3RkX2NhbGwoc3RydWN0IG9w dGVlX2RvbWFpbiAqY3R4LAo+PiAgICAgICBjYXNlIE9QVEVFX01TR19DTURfQ0FOQ0VMOgo+PiAg ICAgICBjYXNlIE9QVEVFX01TR19DTURfUkVHSVNURVJfU0hNOgo+PiAgICAgICBjYXNlIE9QVEVF X01TR19DTURfVU5SRUdJU1RFUl9TSE06Cj4+ICsgICAgICAgIGlmKCB0cmFuc2xhdGVfcGFyYW1z KGN0eCwgY2FsbCkgKQo+PiArICAgICAgICB7Cj4+ICsgICAgICAgICAgICAvKgo+PiArICAgICAg ICAgICAgICogdHJhbnNsYXRlX3BhcmFtcygpIHNldHMgeGVuX2FyZy0+cmV0IHZhbHVlIHRvIG5v bi16ZXJvLgo+PiArICAgICAgICAgICAgICogU28sIHRlY2huaWNhbGx5LCBTTUMgd2FzIHN1Y2Nl c3NmdWwsIGJ1dCB0aGVyZSB3YXMgYW4gZXJyb3IKPj4gKyAgICAgICAgICAgICAqIGR1cmluZyBo YW5kbGluZyBzdGFuZGFyZCBjYWxsIGVuY2Fwc3VsYXRlZCBpbnRvIHRoaXMgU01DLgo+PiArICAg ICAgICAgICAgICovCj4+ICsgICAgICAgICAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2soY3R4LCBy ZWdzLCBjYWxsKTsKPj4gKyAgICAgICAgICAgIHNldF9yZXR1cm4ocmVncywgT1BURUVfU01DX1JF VFVSTl9PSyk7Cj4+ICsgICAgICAgICAgICBnb3RvIGVycjsKPj4gKyAgICAgICAgfQo+PiAgICAg ICAgICAgZXhlY3V0ZV9zdGRfY2FsbChjdHgsIHJlZ3MsIGNhbGwpOwo+PiAgICAgICAgICAgcmV0 dXJuOwo+PiAgICAgICBkZWZhdWx0Ogo+Pgo+Cj4gQ2hlZXJzLAoKCi0tIApCZXN0IHJlZ2FyZHMs Vm9sb2R5bXlyIEJhYmNodWsKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==