From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC] WIP: optee: add OP-TEE mediator Date: Fri, 1 Dec 2017 14:58:57 -0800 (PST) Message-ID: References: <92b77e94-00ff-d81b-e4e0-bb7cf4ce5a55@linaro.org> <1511802097-17286-1-git-send-email-volodymyr_babchuk@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from all-amaz-eas1.inumbo.com ([34.197.232.57]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1eKuGx-0001bX-67 for xen-devel@lists.xenproject.org; Fri, 01 Dec 2017 22:59:07 +0000 In-Reply-To: <1511802097-17286-1-git-send-email-volodymyr_babchuk@epam.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Volodymyr Babchuk Cc: xen-devel , Julien Grall , sstabellini@kernel.org, stuart.yoder@arm.com List-Id: xen-devel@lists.xenproject.org T24gTW9uLCAyNyBOb3YgMjAxNywgVm9sb2R5bXlyIEJhYmNodWsgd3JvdGU6Cj4gVGhpcyBpcyBm b2xsb3ctdXAgdG8gb3VyIGNvbnZlcnNhdGlvbiBkdXJpbmcgY29tbXVuaXR5IGNhbGwuCj4gWW91 IGFza2VkIG1lIHRvIHNlbmQgT1AtVEVFIG1lZGlhdG9yIGFzIGEgcGF0Y2gsIHNvIHdlIGNhbgo+ IGRpc2N1c3MgaXQgaW4gdGhlIG1haWxpbmcgbGlzdC4gU28sIHRoZXJlIGl0IGlzLiBJIHNxdWFz aGVkCj4gdHdvIHBhdGNoZXMgaW50byBvbmUgYW5kIHNraXBwZWQgcGF0Y2hlcyB0aGF0IHdlIGFs cmVhZHkKPiBkaXNjdXNzZWQuCj4gCj4gU28sIHRoaXMgaXMgYmFzaWNhbGx5IGFsbCB3aGF0IGlz IG5lZWRlZCB0byBzdXBwb3J0IE9QLVRFRSBpbiBYRU4uCj4gVGhlcmUgYXJlIHNvbWUgVE9ET3Mg bGVmdCBhbGwgb3ZlciB0aGUgY29kZS4gQnV0LCBJIGRvbid0Cj4gZXhwZWN0IHRoYXQgVE9ET3Mg aW1wbGVtZW50YXRpb24gd291bGQgc2lnbmlmaWNhbnRseQo+IGluY3JlYXNlIGNvZGViYXNlLiBD dXJyZW50bHkgbWVkaWF0b3IgcGFyc2VzIHJlcXVlc3RzIHRvIHBlcmZvcm0KPiBhZGRyZXNzZXMg dHJhbnNsYXRpb24gYW5kIHRoYXQncyBhbGwgd2hhdCBpcyBzaG91bGQgYmUgZG9uZQo+IHRvIGFs bG93IGd1ZXN0cyB0byB3b3JrIHdpdGggT1AtVEVFLgo+IAo+IFRoaXMgYmVjb21lIHBvc3NpYmxl IGJlY2F1c2UgSSBjb21wbGV0ZWx5IHJldmlzaXRlZCB2aXJ0dWFsaXphdGlvbgo+IHN1cHBvcnQg aW4gT1AtVEVFLiBJIGhhdmUgZm91bmQgd2F5IHRvIGVuZm9yY2UgY29tcGxldGUgaXNvbGF0aW9u Cj4gYmV0d2VlbiBkaWZmZXJlbnQgZ3Vlc3Qgc3RhdGVzLiBUaGlzIGxpZnRzIG1hbnkgcXVlc3Rp b25zIGxpa2UgdXNhZ2UKPiBxdW90YXMsIFJQQyByb3V0aW5nLCBzdWRkZW4gZ3Vlc3QgZGVhdGgs IGRhdGEgaXNvbGF0aW9uLCBldGMuCj4gCj4gSSdtIGF3YXJlIHRoYXQgSSBkaWRuJ3QgYWRkcmVz c2VkIGFsbCBjb21tZW50cyBmcm9tIHByZXZpb3VzCj4gZGlzY3Vzc2lvbi4gU29ycnkgZm9yIHRo aXMuIEknbSBjdXJyZW50bHkgYnVzeSB3aXRoIE9QLVRFRSwKPiBhbmQgSSB0aGluayBwcm9wZXIg bWVkaWF0b3IgaW1wbGVtZW50YXRpb24gd2lsbCBiZSBwb3NzaWJsZQo+IG9ubHkgYWZ0ZXIgSSds bCBzdGFiaWxpemUgT1AtVEVFIHBhcnQuCj4gCj4gU28gSSBkb24ndCBhc2sgYW55Ym9keSB0byBk byB0aG9yb3VnaCByZXZpZXcuIEkganVzdCB3YW50IHRvCj4gc2hhcmUgbXkgc3RhdHVzIGFuZCBk aXNjdXNzIHRoaXMgY29kZSBhIHdob2xlLgoKVGhhbmsgeW91IGZvciBzaGFyaW5nISBBY3R1YWxs eSwgSSB0aGluayBpdCBpcyBub3QgdG9vIGJhZCBhcyBhIHN0YXJ0aW5nCnBvaW50LgoKSSdsbCBh bHNvIHRyeSB0byBzdW1tYXJpemUgc29tZSBrZXkgY29uY2VwdCB3ZSBoYXZlIGJlZW4gZGlzY3Vz c2luZwphYm91dCBPUC1URUUgc3VwcG9ydCBpbiBYZW4uCgoKPSBYZW4gY2Fubm90IHByb3RlY3Qg dGhlIHN5c3RlbSBmcm9tIGEgYnJva2VuL2luc2VjdXJlIE9QLVRFRSA9CgpPUC1URUUgcnVucyBh dCBhIGhpZ2hlciBwcml2aWxlZ2UgbGV2ZWwgdGhhbiBYZW4sIHRodXMsIHdlIGNhbid0IHJlYWxs eQpleHBlY3QgWGVuIHRvIHByb3RlY3QgdGhlIHN5c3RlbSBmcm9tIGEgYnJva2VuIE9QLVRFRS4g QWxzbywgWGVuIGNhbm5vdApyZWFsbHkgcHJvdGVjdCBPUC1URUUgZnJvbSBhIG1hbGljaW91cyBj YWxsZXIuCgpXaGF0IHdlIGNhbiBhbmQgc2hvdWxkIGRvIGlzIHRvIHByb3RlY3QgWGVuLCB0aGUg T1AtVEVFIG1lZGlhdG9yIGluIFhlbgpzcGVjaWZpY2FsbHksIGZyb20gbWFsaWNpb3VzIGF0dGFj a2Vycy4KCkluIG90aGVyIHdvcmRzLCB3ZSBhcmUgbm90IHJlc3BvbnNpYmxlIGlmIGEgY2FsbCwg Zm9yd2FyZGVkIHRvIE9QLVRFRSBieQpYZW4sIGVuZHMgdXAgY3Jhc2hpbmcgT1AtVEVFLCB0aGVy ZWZvcmUgdGFraW5nIGRvd24gdGhlIHN5c3RlbS4KCkhvd2V2ZXIsIHdlIGhhdmUgdG8gcGF5IHNw ZWNpYWwgY2FyZSB0byBhdm9pZCBjYWxsZXJzIHRvIGNyYXNoIG9yIHRha2UKb3ZlciB0aGUgbWVk aWF0b3IgaW4gWGVuLiBXZSBhbHNvIGhhdmUgdG8gcGF5IGF0dGVudGlvbiBzbyB0aGF0IGEgY2Fs bGVyCndvbid0IGJlIGFibGUgdG8gZXhoYXVzdCBYZW4gcmVzb3VyY2VzIG9yIERPUyBYZW4gKGFs bG9jYXRlIHRvbyBtdWNoCm1lbW9yeSwgaW5maW5pdGUgbG9vcHMgaW4gWGVuLCBldGMpLiBUaGlz IGJyaW5ncyBtZSB0byB0aGUgbmV4dCB0b3BpYy4KCgo9IEVycm9yIGNoZWNraW5nIC8gRE9TIHBy b3RlY3Rpb24gPQoKV2UgbmVlZCBwb3dlcmZ1bCBjaGVja3Mgb24gYXJndW1lbnRzIHBhc3NlZCBi eSB0aGUgY2FsbGVyIGFuZCBldmFsdWF0ZWQKYnkgdGhlIG1lZGlhdG9yLgoKRm9yIGV4YW1wbGUs IHdlIGNhbm5vdCBleHBlY3QgdGhlIGd1ZXN0IHRvIGFjdHVhbGx5IHBhc3MgYXJndW1lbnRzIGlu CnRoZSBmb3JtYXQgZXhwZWN0ZWQgYnkgdHJhbnNsYXRlX3BhcmFtcy4gY3R4LT54ZW5fYXJnIGNv dWxkIGJlCmdpYmJlcmlzaC4KCkZyb20gdGhlIHJlc291cmNlIGFsbG9jYXRpb24gcG9pbnQgb2Yg dmlldywgaXQgbG9va3MgbGlrZSBldmVyeQpoYW5kbGVfc3RkX2NhbGwgYWxsb2NhdGVzIGEgbmV3 IGNvbnRleHQ7IGV2ZXJ5IGNvcHlfc3RkX3JlcXVlc3QKYWxsb2NhdGVzIGEgbmV3IFhlbiBwYWdl LiBJdCB3b3VsZCBiZSBlYXN5IHRvIGV4aGF1c3QgWGVuIHJlc291cmNlcy4KTWF5YmUgd2UgbmVl ZCBhIG1heCBjb25jdXJyZW50IHJlcXVlc3QgbGltaXQgb3IgbWF4IHBhZ2UgYWxsb2NhdGlvbiBw ZXIKZG9tYWluIG9yIHNvbWV0aGluZyBvZiB0aGUga2luZC4KCgo9IExvY2tzIGFuZCBMaXN0cyA9 CgpUaGUgY3VycmVudCBsb2NrIGFuZCBsaXN0IGlzIGdsb2JhbC4gRG8geW91IHRoaW5rIGl0IHNo b3VsZCBhY3R1YWxseSBiZQpnbG9iYWwgb3IgcGVyLWRvbWFpbj8gSSBkbyByZWFsaXplIHRoYXQg b25seSBkb20wIGlzIGFsbG93ZWQgdG8gbWFrZQpjYWxscyBub3cgc28gdGhlIHF1ZXN0aW9uIGZv ciB0aGUgbW9tZW50IGlzIG5vdCB0b28gdXNlZnVsLgoKCj0gWGVuIGNvbW1hbmQgZm9yd2FyZGlu ZyA9CgpJbiB0aGUgY29kZSBiZWxvdywgaXQgbG9va3MgbGlrZSBYZW4gaXMgZm9yd2FyZGluZyBl dmVyeXRoaW5nIHRvIE9QLVRFRS4KQXJlIHRoZXJlIHNvbWUgY29tbWFuZHMgWGVuIHNob3VsZCBh dm9pZCBmb3J3YXJkaW5nPyBTaG91bGQgd2UgaGF2ZSBhCndoaXRlbGlzdCBvciBhIGJsYWNrbGlz dD8KCgo9IExvbmcgcnVubmluZyBPUC1URUUgY29tbWFuZHMgYW5kIGludGVycnVwdGlvbnMgPQoK SSBoYXZlIGJlZW4gdG9sZCB0aGF0IHNvbWUgT1AtVEVFIFJQQyBjb21tYW5kcyBtaWdodCB0YWtl IGxvbmcgdG8KY29tcGxldGUuIElzIHRoYXQgcmlnaHQ/IExpa2UgZm9yIGV4YW1wbGUgb25lIG9m IHRoZQpPUFRFRV9NU0dfUlBDX0NNRF8qPwoKSWYgc28sIHdlIG5lZWQgdG8gdGhpbmsgd2hhdCB0 byBkbyBpbiB0aG9zZSBjYXNlcy4gU3BlY2lmaWNhbGx5LCBkbyB3ZQpuZWVkIGEgdGVjaG5pcXVl IHRvIHJlc3RhcnQgY2VydGFpbiBjb21tYW5kcyBpbiBYZW4sIHNvIHRoYXQgd2hlbiB0aGV5CnJ1 biBmb3IgdG9vIGxvbmcgYW5kIGdldCBpbnRlcnJ1cHRlZCBieSBzb21ldGhpbmcgKHN1Y2ggYXMg YW4KaW50ZXJydXB0KSB3ZSBrbm93IGhvdyB0byByZXN0YXJ0IHRoZW0/IEluIGZhY3QsIGRvIHdl IG5lZWQgdG8gc2V0dXAgYQp0aW1lciBpbnRlcnJ1cHQgdG8gbWFrZSBzdXJlIHRoZSBjb21tYW5k IGRvZXNuJ3QgYmxvY2sgWGVuIGZvciB0b28gbG9uZywKY29uc3VtaW5nIHRoZSBuZXh0IHZjcHUn cyBzbG90IGFzIHdlbGw/CgoKPSBQYWdlIHBpbm5pbmcgPQoKR3Vlc3QgcGFnZXMgcGFzc2VkIHRv IE9QLVRFRSBuZWVkIHRvIGJlIHBpbm5lZCAob3RoZXJ3aXNlIFhlbiBkb2Vzbid0Cmd1YXJhbnRl ZSB0aGV5J2xsIGJlIGF2YWlsYWJsZSkuIEkgdGhpbmsgdGhlIHJpZ2h0IGZ1bmN0aW9uIHRvIGNh bGwgZm9yCnRoYXQgaXMgZ2V0X3BhZ2VfZnJvbV9nZm4gb3IgZ2V0X3BhZ2UuCgoKCj4gLS0tCj4g Cj4gQWRkIE9QLVRFRSBtZWRpYXRvciBhcyBhbiBleGFtcGxlIGhvdyBURUUgbWVkaWF0b3IgZnJh bWV3b3JrCj4gd29ya3MuCj4gCj4gT1AtVEVFIG1lZGlhdG9yIHN1cHBvcnQgYWRkcmVzcyB0cmFu c2xhdGlvbiBmb3IgRG9tVXMuCj4gSXQgdHJhY2tzIGV4ZWN1dGlvbiBvZiBTVEQgY2FsbHMsIGNv cnJlY3RseSBoYW5kbGVzIG1lbW9yeS1yZWxhdGVkIFJQQwo+IHJlcXVlc3RzLCB0cmFja3MgYnVm ZmVyIGFsbG9jYXRlZCBmb3IgUlBDcy4KPiAKPiBXaXRoIHRoaXMgcGF0Y2ggT1AtVEVFIHN1Y2Nl c3NmdWxseSBwYXNzZXMgb3duIHRlc3RzLCB3aGlsZSBjbGllbnQgaXMKPiBydW5uaW5nIGluIERv bVUuIEN1cnJlbnRseSBpdCBsYWNrcyBzb21lIGNvZGUgZm9yIGV4Y2VwdGlvbmFsIGNhc2VzLAo+ IGJlY2F1c2UgdGhpcyBwYXRjaCB3YXMgdXNlZCBtb3N0bHkgdG8gZGVidWcgdmlydHVhbGl6YXRp b24gaW4gT1AtVEVFLgo+IE5ldmVydGhlbGVzcywgaXQgcHJvdmlkZXMgYWxsIGZlYXR1cmVzIG5l ZWRlZCBmb3IgT1AtVEVFIG1lZGlhdGlvbi4KPiAKPiBXQVJOSU5HOiBUaGlzIGlzIGEgZGV2ZWxv cG1lbnQgcGF0Y2gsIGl0IGRvZXMgbm90IGNvdmVyIGFsbCBjb3JuZXIKPiBjYXNlcywgc28sIHBs ZWFzZSBkb24ndCB1c2UgaXQgaW4gcHJvZHVjdGlvbi4KPiAKPiBJdCB3YXMgdGVzdGVkIG9uIFJD QVIgU2FsdmF0b3ItTTMgYm9hcmQuCj4gCj4gU2lnbmVkLW9mZi1ieTogVm9sb2R5bXlyIEJhYmNo dWsgPHZvbG9keW15cl9iYWJjaHVrQGVwYW0uY29tPgo+IC0tLQo+ICB4ZW4vYXJjaC9hcm0vdGVl L0tjb25maWcgICAgIHwgICA0ICsKPiAgeGVuL2FyY2gvYXJtL3RlZS9NYWtlZmlsZSAgICB8ICAg MSArCj4gIHhlbi9hcmNoL2FybS90ZWUvb3B0ZWUuYyAgICAgfCA3NjUgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlX3Nt Yy5oIHwgIDUwICsrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDgyMCBpbnNlcnRpb25zKCspCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMKPiAKPiBkaWZmIC0tZ2l0 IGEveGVuL2FyY2gvYXJtL3RlZS9LY29uZmlnIGIveGVuL2FyY2gvYXJtL3RlZS9LY29uZmlnCj4g aW5kZXggZTY5ZGUyOS4uN2M2YjVjNiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vdGVlL0tj b25maWcKPiArKysgYi94ZW4vYXJjaC9hcm0vdGVlL0tjb25maWcKPiBAQCAtMCwwICsxLDQgQEAK PiArY29uZmlnIEFSTV9PUFRFRQo+ICsJYm9vbCAiRW5hYmxlIE9QLVRFRSBtZWRpYXRvciIKPiAr CWRlZmF1bHQgbgo+ICsJZGVwZW5kcyBvbiBBUk1fVEVFCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNo L2FybS90ZWUvTWFrZWZpbGUgYi94ZW4vYXJjaC9hcm0vdGVlL01ha2VmaWxlCj4gaW5kZXggYzU0 ZDQ3OS4uOWQ5M2I0MiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vdGVlL01ha2VmaWxlCj4g KysrIGIveGVuL2FyY2gvYXJtL3RlZS9NYWtlZmlsZQo+IEBAIC0xICsxLDIgQEAKPiAgb2JqLXkg Kz0gdGVlLm8KPiArb2JqLSQoQ09ORklHX0FSTV9PUFRFRSkgKz0gb3B0ZWUubwo+IGRpZmYgLS1n aXQgYS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMgYi94ZW4vYXJjaC9hcm0vdGVlL29wdGVlLmMK PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAuLjU5YzM2MDAKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4gQEAgLTAsMCArMSw3NjUg QEAKPiArLyoKPiArICogeGVuL2FyY2gvYXJtL3RlZS9vcHRlZS5jCj4gKyAqCj4gKyAqIE9QLVRF RSBtZWRpYXRvcgo+ICsgKgo+ICsgKiBWb2xvZHlteXIgQmFiY2h1ayA8dm9sb2R5bXlyX2JhYmNo dWtAZXBhbS5jb20+Cj4gKyAqIENvcHlyaWdodCAoYykgMjAxNyBFUEFNIFN5c3RlbXMuCj4gKyAq Cj4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCj4gKyAqIHB1Ymxpc2hlZCBieSB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK PiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx4ZW4vZG9tYWluX3BhZ2UuaD4KPiArI2luY2x1 ZGUgPHhlbi90eXBlcy5oPgo+ICsjaW5jbHVkZSA8eGVuL3NjaGVkLmg+Cj4gKwo+ICsjaW5jbHVk ZSA8YXNtL3AybS5oPgo+ICsjaW5jbHVkZSA8YXNtL3RlZS5oPgo+ICsKPiArI2luY2x1ZGUgIm9w dGVlX21zZy5oIgo+ICsjaW5jbHVkZSAib3B0ZWVfc21jLmgiCj4gKwo+ICsvKgo+ICsgKiBHbG9i YWwgVE9ETzoKPiArICogIDEuIENyZWF0ZSBwZXItZG9tYWluIGNvbnRleHQsIHdoZXJlIGNhbGwg YW5kIHNobSB3aWxsIGJlIHN0b3JlZAo+ICsgKiAgMi4gUGluIHBhZ2VzIHNoYXJlZCBiZXR3ZWVu IE9QLVRFRSBhbmQgZ3Vlc3QKPiArICovCj4gKy8qCj4gKyAqIE9QLVRFRSB2aW9sYXRlcyBTTUND QyB3aGVuIGl0IGRlZmluZXMgb3duIFVJRC4gU28gd2UgbmVlZAo+ICsgKiB0byBwbGFjZSBieXRl cyBpbiBjb3JyZWN0IG9yZGVyLgo+ICsgKi8KPiArI2RlZmluZSBPUFRFRV9VSUQgICh4ZW5fdXVp ZF90KXt7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4g KyAgICAodWludDhfdCkoT1BURUVfTVNHX1VJRF8wID4+ICAwKSwgKHVpbnQ4X3QpKE9QVEVFX01T R19VSURfMCA+PiAgOCksICAgICAgICAgXAo+ICsgICAgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURf MCA+PiAxNiksICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzAgPj4gMjQpLCAgICAgICAgIFwKPiAr ICAgICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzEgPj4gIDApLCAodWludDhfdCkoT1BURUVfTVNH X1VJRF8xID4+ICA4KSwgICAgICAgICBcCj4gKyAgICAodWludDhfdCkoT1BURUVfTVNHX1VJRF8x ID4+IDE2KSwgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMSA+PiAyNCksICAgICAgICAgXAo+ICsg ICAgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMiA+PiAgMCksICh1aW50OF90KShPUFRFRV9NU0df VUlEXzIgPj4gIDgpLCAgICAgICAgIFwKPiArICAgICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzIg Pj4gMTYpLCAodWludDhfdCkoT1BURUVfTVNHX1VJRF8yID4+IDI0KSwgICAgICAgICBcCj4gKyAg ICAodWludDhfdCkoT1BURUVfTVNHX1VJRF8zID4+ICAwKSwgKHVpbnQ4X3QpKE9QVEVFX01TR19V SURfMyA+PiAgOCksICAgICAgICAgXAo+ICsgICAgKHVpbnQ4X3QpKE9QVEVFX01TR19VSURfMyA+ PiAxNiksICh1aW50OF90KShPUFRFRV9NU0dfVUlEXzMgPj4gMjQpLCAgICAgICAgIFwKPiArICAg IH19Cj4gKwo+ICsjZGVmaW5lIE1BWF9OT05DT05USUdfRU5UUklFUyAgIDgKPiArCj4gKy8qCj4g KyAqIENhbGwgY29udGV4dC4gT1AtVEVFIGNhbiBpc3N1ZSBtdWxpdHBsZSBSUEMgcmV0dXJucyBk dXJpbmcgb25lIGNhbGwuCj4gKyAqIFdlIG5lZWQgdG8gcHJlc2VydmUgY29udGV4dCBkdXJpbmcg dGhlbS4KPiArICovCj4gK3N0cnVjdCBzdGRfY2FsbF9jdHggewo+ICsgICAgc3RydWN0IGxpc3Rf aGVhZCBsaXN0Owo+ICsgICAgc3RydWN0IG9wdGVlX21zZ19hcmcgKmd1ZXN0X2FyZzsKPiArICAg IHN0cnVjdCBvcHRlZV9tc2dfYXJnICp4ZW5fYXJnOwo+ICsgICAgdm9pZCAqbm9uX2NvbnRpZ1tN QVhfTk9OQ09OVElHX0VOVFJJRVNdOwo+ICsgICAgaW50IG5vbl9jb250aWdfb3JkZXJbTUFYX05P TkNPTlRJR19FTlRSSUVTXTsKPiArICAgIGludCBvcHRlZV90aHJlYWRfaWQ7Cj4gKyAgICBpbnQg cnBjX29wOwo+ICsgICAgZG9taWRfdCBkb21pZDsKPiArfTsKPiArc3RhdGljIExJU1RfSEVBRChj YWxsX2N0eF9saXN0KTsKPiArc3RhdGljIERFRklORV9TUElOTE9DSyhjYWxsX2N0eF9saXN0X2xv Y2spOwo+ICsKPiArLyoKPiArICogQ29tbWFuZCBidWZmZXIgc2hhcmVkIGJldHdlZW4gT1AtVEVF IGFuZCBndWVzdC4KPiArICogV2FybmluZyEgSW4gdGhlIHByb3BlciBpbXBsZW1lbnRhdGlvbiB0 aGlzIFNITSBidWZmZXIgKnByb2JhYmx5KiBzaG91bGQKPiArICogYnkgc2hhZG93ZWQgYnkgWEVO Lgo+ICsgKiBUT0RPOiBSZWNvbnNpZGVyIHRoaXMuCj4gKyAqLwo+ICtzdHJ1Y3Qgc2htIHsKPiAr ICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArICAgIHN0cnVjdCBvcHRlZV9tc2dfYXJnICpn dWVzdF9hcmc7Cj4gKyAgICBzdHJ1Y3QgcGFnZSAqZ3Vlc3RfcGFnZTsKPiArICAgIG1mbl90IGd1 ZXN0X21mbjsKPiArICAgIHVpbnQ2NF90IGNvb2tpZTsKPiArICAgIGRvbWlkX3QgZG9taWQ7Cj4g K307Cj4gKwo+ICtzdGF0aWMgTElTVF9IRUFEKHNobV9saXN0KTsKPiArc3RhdGljIERFRklORV9T UElOTE9DSyhzaG1fbGlzdF9sb2NrKTsKPiArCj4gK3N0YXRpYyBpbnQgb3B0ZWVfaW5pdCh2b2lk KQo+ICt7Cj4gKyAgICBwcmludGsoIk9QLVRFRSBtZWRpYXRvciBpbml0IGRvbmVcbiIpOwo+ICsg ICAgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIG9wdGVlX2RvbWFpbl9jcmVhdGUo c3RydWN0IGRvbWFpbiAqZCkKPiArewo+ICsgICAgcmVnaXN0ZXJfdCByZXNwWzRdOwo+ICsgICAg Y2FsbF9zbWNjY19zbWMoT1BURUVfU01DX1ZNX0NSRUFURUQsCj4gKyAgICAgICAgICAgICAgICAg ICBkLT5kb21haW5faWQgKyAxLCAwLCAwLCAwLCAwLCAwLCAwLCByZXNwKTsKPiArICAgIGlmICgg cmVzcFswXSAhPSBPUFRFRV9TTUNfUkVUVVJOX09LICkKPiArICAgICAgICBncHJpbnRrKFhFTkxP R19XQVJOSU5HLCAiT1AtVEVFIGRvbid0IHdhbnQgdG8gc3VwcG9ydCBkb21haW46ICVkXG4iLAo+ ICsgICAgICAgICAgICAgICAgKHVpbnQzMl90KXJlc3BbMF0pOwo+ICsgICAgLyogVE9ETzogQ2hh bmdlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRvIGJlIGFibGUgdG8gcmV0dW4gZXJyb3IgKi8KPiAr fQo+ICsKPiArc3RhdGljIHZvaWQgb3B0ZWVfZG9tYWluX2Rlc3Ryb3koc3RydWN0IGRvbWFpbiAq ZCkKPiArewo+ICsgICAgcmVnaXN0ZXJfdCByZXNwWzRdOwo+ICsgICAgY2FsbF9zbWNjY19zbWMo T1BURUVfU01DX1ZNX0RFU1RST1lFRCwKPiArICAgICAgICAgICAgICAgICAgIGQtPmRvbWFpbl9p ZCArIDEsIDAsIDAsIDAsIDAsIDAsIDAsIHJlc3ApOwo+ICsgICAgLyogVE9ETzogQ2xlYW4gY2Fs bCBjb250ZXh0cyBhbmQgU0hNcyBhc3NvY2lhdGVkIHdpdGggZG9tYWluICovCj4gK30KPiArCj4g K3N0YXRpYyBib29sIGZvcndhcmRfY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiAr ewo+ICsgICAgcmVnaXN0ZXJfdCByZXNwWzRdOwo+ICsKPiArICAgIC8qIFRPRE86IFVzZSBzZXBh cmF0ZSByZWdpc3RlcnMgc2V0IHRvIHByZXZlbnQgbGVha2FnZSB0byBndWVzdCAqLwo+ICsgICAg Y2FsbF9zbWNjY19zbWMoZ2V0X3VzZXJfcmVnKHJlZ3MsIDApLAo+ICsgICAgICAgICAgICAgICAg ICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpLAo+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJf cmVnKHJlZ3MsIDIpLAo+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDMp LAo+ICsgICAgICAgICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDQpLAo+ICsgICAgICAg ICAgICAgICAgICAgZ2V0X3VzZXJfcmVnKHJlZ3MsIDUpLAo+ICsgICAgICAgICAgICAgICAgICAg Z2V0X3VzZXJfcmVnKHJlZ3MsIDYpLAo+ICsgICAgICAgICAgICAgICAgICAgLyogVk0gaWQgMCBp cyByZXNlcnZlZCBmb3IgaHlwZXJ2aXNvciBpdHNlbGYgKi8KPiArICAgICAgICAgICAgICAgICAg IGN1cnJlbnQtPmRvbWFpbi0+ZG9tYWluX2lkICsgMSwKClRoaXMgZG9lc24ndCBsb29rIGxpa2Ug aXQgd291bGQgd3JhcCBhcm91bmQgc2FmZWx5LgoKCj4gKyAgICAgICAgICAgICAgICAgICByZXNw KTsKPiArCj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgcmVzcFswXSk7Cj4gKyAgICBzZXRf dXNlcl9yZWcocmVncywgMSwgcmVzcFsxXSk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMiwg cmVzcFsyXSk7Cj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMywgcmVzcFszXSk7Cj4gKwo+ICsg ICAgcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICph bGxvY2F0ZV9zdGRfY2FsbF9jdHgodm9pZCkKPiArewo+ICsgICAgc3RydWN0IHN0ZF9jYWxsX2N0 eCAqcmV0Owo+ICsKPiArICAgIHJldCA9IHh6YWxsb2Moc3RydWN0IHN0ZF9jYWxsX2N0eCk7Cj4g KyAgICBpZiAoICFyZXQgKQo+ICsgICAgICAgIHJldHVybiBOVUxMOwo+ICsKPiArICAgIHJldC0+ b3B0ZWVfdGhyZWFkX2lkID0gLTE7Cj4gKyAgICByZXQtPmRvbWlkID0gLTE7Cj4gKwo+ICsgICAg c3Bpbl9sb2NrKCZjYWxsX2N0eF9saXN0X2xvY2spOwo+ICsgICAgbGlzdF9hZGRfdGFpbCgmcmV0 LT5saXN0LCAmY2FsbF9jdHhfbGlzdCk7Cj4gKyAgICBzcGluX3VubG9jaygmY2FsbF9jdHhfbGlz dF9sb2NrKTsKPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBm cmVlX3N0ZF9jYWxsX2N0eChzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgpCj4gK3sKPiArICAgIHNw aW5fbG9jaygmY2FsbF9jdHhfbGlzdF9sb2NrKTsKPiArICAgIGxpc3RfZGVsKCZjdHgtPmxpc3Qp Owo+ICsgICAgc3Bpbl91bmxvY2soJmNhbGxfY3R4X2xpc3RfbG9jayk7Cj4gKwo+ICsgICAgaWYg KGN0eC0+eGVuX2FyZykKPiArICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZShjdHgtPnhlbl9hcmcp Owo+ICsKPiArICAgIGlmIChjdHgtPmd1ZXN0X2FyZykKPiArICAgICAgICB1bm1hcF9kb21haW5f cGFnZShjdHgtPmd1ZXN0X2FyZyk7Cj4gKwo+ICsgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBNQVhf Tk9OQ09OVElHX0VOVFJJRVM7IGkrKykgewo+ICsgICAgICAgIGlmIChjdHgtPm5vbl9jb250aWdb aV0pCj4gKyAgICAgICAgICAgIGZyZWVfeGVuaGVhcF9wYWdlcyhjdHgtPm5vbl9jb250aWdbaV0s IGN0eC0+bm9uX2NvbnRpZ19vcmRlcltpXSk7Cj4gKyAgICB9Cj4gKwo+ICsgICAgeGZyZWUoY3R4 KTsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBzdGRfY2FsbF9jdHggKmZpbmRfY3R4KGludCB0 aHJlYWRfaWQsIGRvbWlkX3QgZG9taWQpCj4gK3sKPiArICAgIHN0cnVjdCBzdGRfY2FsbF9jdHgg KmN0eDsKPiArCj4gKyAgICBzcGluX2xvY2soJmNhbGxfY3R4X2xpc3RfbG9jayk7Cj4gKyAgICBs aXN0X2Zvcl9lYWNoX2VudHJ5KCBjdHgsICZjYWxsX2N0eF9saXN0LCBsaXN0ICkKPiArICAgIHsK PiArICAgICAgICBpZiAgKGN0eC0+ZG9taWQgPT0gZG9taWQgJiYgY3R4LT5vcHRlZV90aHJlYWRf aWQgPT0gdGhyZWFkX2lkICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBzcGluX3Vu bG9jaygmY2FsbF9jdHhfbGlzdF9sb2NrKTsKPiArICAgICAgICAgICAgICAgIHJldHVybiBjdHg7 Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsgICAgc3Bpbl91bmxvY2soJmNhbGxfY3R4X2xpc3Rf bG9jayk7Cj4gKwo+ICsgICAgcmV0dXJuIE5VTEw7Cj4gK30KPiArCj4gKyNkZWZpbmUgUEFHRUxJ U1RfRU5UUklFU19QRVJfUEFHRSAgICAgICAgICAgICAgICAgICAgICAgXAo+ICsgICAgKChPUFRF RV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAvIHNpemVvZih1NjQpKSAtIDEpCj4gKwo+ICtzdGF0 aWMgc2l6ZV90IGdldF9wYWdlc19saXN0X3NpemUoc2l6ZV90IG51bV9lbnRyaWVzKQo+ICt7Cj4g KyAgICBpbnQgcGFnZXMgPSBESVZfUk9VTkRfVVAobnVtX2VudHJpZXMsIFBBR0VMSVNUX0VOVFJJ RVNfUEVSX1BBR0UpOwo+ICsKPiArICAgIHJldHVybiBwYWdlcyAqIE9QVEVFX01TR19OT05DT05U SUdfUEFHRV9TSVpFOwo+ICt9Cj4gKwo+ICtzdGF0aWMgbWZuX3QgbG9va3VwX2d1ZXN0X3JhbV9h ZGRyKHBhZGRyX3QgZ2FkZHIpCj4gK3sKPiArICAgIG1mbl90IG1mbjsKPiArICAgIGdmbl90IGdm bjsKPiArICAgIHAybV90eXBlX3QgdDsKPiArICAgIGdmbiA9IGdhZGRyX3RvX2dmbihnYWRkcik7 Cj4gKyAgICBtZm4gPSBwMm1fbG9va3VwKGN1cnJlbnQtPmRvbWFpbiwgZ2ZuLCAmdCk7Cj4gKyAg ICBpZiAoIHQgIT0gcDJtX3JhbV9ydyB8fCBtZm5fZXEobWZuLCBJTlZBTElEX01GTikgKSB7Cj4g KyAgICAgICAgZ3ByaW50ayhYRU5MT0dfSU5GTywgIkRvbWFpbiB0cmllcyB0byB1c2UgaW52YWxp ZCBnZm5cbiIpOwo+ICsgICAgICAgIHJldHVybiBJTlZBTElEX01GTjsKPiArICAgIH0KPiArICAg IHJldHVybiBtZm47Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qgc2htICphbGxvY2F0ZV9hbmRf bWFwX3NobShwYWRkcl90IGdhZGRyLCB1aW50NjRfdCBjb29raWUpCj4gK3sKPiArICAgIHN0cnVj dCBzaG0gKnJldDsKPiArCj4gKyAgICByZXQgPSB4emFsbG9jKHN0cnVjdCBzaG0pOwo+ICsgICAg aWYgKCAhcmV0ICkKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiArCj4gKyAgICByZXQtPmd1ZXN0 X21mbiA9IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihnYWRkcik7Cj4gKwo+ICsgICAgaWYgKCBtZm5f ZXEocmV0LT5ndWVzdF9tZm4sIElOVkFMSURfTUZOKSApCj4gKyAgICB7Cj4gKyAgICAgICAgeGZy ZWUocmV0KTsKPiArICAgICAgICByZXR1cm4gTlVMTDsKPiArICAgIH0KPiArCj4gKyAgICByZXQt Pmd1ZXN0X2FyZyA9IG1hcF9kb21haW5fcGFnZShyZXQtPmd1ZXN0X21mbik7Cj4gKyAgICBpZiAo ICFyZXQtPmd1ZXN0X2FyZyApCj4gKyAgICB7Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0dfSU5G TywgIkNvdWxkIG5vdCBtYXAgZG9tYWluIHBhZ2VcbiIpOwo+ICsgICAgICAgIHhmcmVlKHJldCk7 Cj4gKyAgICAgICAgcmV0dXJuIE5VTEw7Cj4gKyAgICB9Cj4gKyAgICByZXQtPmNvb2tpZSA9IGNv b2tpZTsKPiArICAgIHJldC0+ZG9taWQgPSBjdXJyZW50LT5kb21haW4tPmRvbWFpbl9pZDsKPiAr Cj4gKyAgICBzcGluX2xvY2soJnNobV9saXN0X2xvY2spOwo+ICsgICAgbGlzdF9hZGRfdGFpbCgm cmV0LT5saXN0LCAmc2htX2xpc3QpOwo+ICsgICAgc3Bpbl91bmxvY2soJnNobV9saXN0X2xvY2sp Owo+ICsgICAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZnJlZV9zaG0odWlu dDY0X3QgY29va2llLCBkb21pZF90IGRvbWlkKQo+ICt7Cj4gKyAgICBzdHJ1Y3Qgc2htICpzaG0s ICpmb3VuZCA9IE5VTEw7Cj4gKyAgICBzcGluX2xvY2soJnNobV9saXN0X2xvY2spOwo+ICsKPiAr ICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIHNobSwgJnNobV9saXN0LCBsaXN0ICkKPiArICAgIHsK PiArICAgICAgICBpZiAgKHNobS0+ZG9taWQgPT0gZG9taWQgJiYgc2htLT5jb29raWUgPT0gY29v a2llICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGZvdW5kID0gc2htOwo+ICsgICAgICAg ICAgICBsaXN0X2RlbCgmZm91bmQtPmxpc3QpOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAg ICAgICB9Cj4gKyAgICB9Cj4gKyAgICBzcGluX3VubG9jaygmc2htX2xpc3RfbG9jayk7Cj4gKwo+ ICsgICAgaWYgKCAhZm91bmQgKSB7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfQo+ICsKPiAr ICAgIGlmICggZm91bmQtPmd1ZXN0X2FyZyApCj4gKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2Uo Zm91bmQtPmd1ZXN0X2FyZyk7Cj4gKwo+ICsgICAgeGZyZWUoZm91bmQpOwo+ICt9Cj4gKwo+ICtz dGF0aWMgc3RydWN0IHNobSAqZmluZF9zaG0odWludDY0X3QgY29va2llLCBkb21pZF90IGRvbWlk KQo+ICt7Cj4gKyAgICBzdHJ1Y3Qgc2htICpzaG07Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZzaG1f bGlzdF9sb2NrKTsKPiArICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoIHNobSwgJnNobV9saXN0LCBs aXN0ICkKPiArICAgIHsKPiArICAgICAgICBpZiAoIHNobS0+ZG9taWQgPT0gZG9taWQgJiYgc2ht LT5jb29raWUgPT0gY29va2llICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgICAgICBzcGlu X3VubG9jaygmc2htX2xpc3RfbG9jayk7Cj4gKyAgICAgICAgICAgICAgICByZXR1cm4gc2htOwo+ ICsgICAgICAgIH0KPiArICAgIH0KPiArICAgIHNwaW5fdW5sb2NrKCZzaG1fbGlzdF9sb2NrKTsK PiArCj4gKyAgICByZXR1cm4gTlVMTDsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdHJhbnNsYXRl X25vbmNvbnRpZyhzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IG9wdGVlX21zZ19wYXJhbSAqcGFyYW0sCj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlkeCkKPiArewo+ICsgICAgLyoKPiArICAgICAq IFJlZmVyIHRvIE9QVEVFX01TR19BVFRSX05PTkNPTlRJRyBkZXNjcmlwdGlvbiBpbiBvcHRlZV9t c2cuaCBmb3IgZGV0YWlscy4KPiArICAgICAqCj4gKyAgICAgKiBXQVJOSU5HOiBUaGlzIGlzIHRl c3QgY29kZS4gSXQgd29ya3Mgb25seSB3aXRoIHhlbiBwYWdlIHNpemUgPT0gNDA5Ngo+ICsgICAg ICovCj4gKyAgICB1aW50NjRfdCBzaXplOwo+ICsgICAgaW50IHBhZ2Vfb2Zmc2V0Owo+ICsgICAg aW50IG51bV9wYWdlczsKPiArICAgIGludCBvcmRlcjsKPiArICAgIGludCBlbnRyaWVzX29uX3Bh Z2UgPSAwOwo+ICsgICAgcGFkZHJfdCBnYWRkcjsKPiArICAgIG1mbl90IGd1ZXN0X21mbjsKPiAr ICAgIHN0cnVjdCB7Cj4gKyAgICAgICAgdWludDY0X3QgcGFnZXNfbGlzdFtQQUdFTElTVF9FTlRS SUVTX1BFUl9QQUdFXTsKPiArICAgICAgICB1aW50NjRfdCBuZXh0X3BhZ2VfZGF0YTsKPiArICAg IH0gKnBhZ2VzX2RhdGFfZ3Vlc3QsICpwYWdlc19kYXRhX3hlbiwgKnBhZ2VzX2RhdGFfeGVuX3N0 YXJ0Owo+ICsKPiArICAgIHBhZ2Vfb2Zmc2V0ID0gcGFyYW0tPnUudG1lbS5idWZfcHRyICYgKE9Q VEVFX01TR19OT05DT05USUdfUEFHRV9TSVpFIC0gMSk7Cj4gKwo+ICsgICAgc2l6ZSA9IFJPVU5E VVAocGFyYW0tPnUudG1lbS5zaXplICsgcGFnZV9vZmZzZXQsCj4gKyAgICAgICAgICAgICAgICAg ICBPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSk7Cj4gKwo+ICsgICAgbnVtX3BhZ2VzID0g RElWX1JPVU5EX1VQKHNpemUsIE9QVEVFX01TR19OT05DT05USUdfUEFHRV9TSVpFKTsKPiArCj4g KyAgICBvcmRlciA9IGdldF9vcmRlcl9mcm9tX2J5dGVzKGdldF9wYWdlc19saXN0X3NpemUobnVt X3BhZ2VzKSk7Cj4gKwo+ICsgICAgcGFnZXNfZGF0YV94ZW5fc3RhcnQgPSBhbGxvY194ZW5oZWFw X3BhZ2VzKG9yZGVyLCAwKTsKPiArICAgIGlmICghcGFnZXNfZGF0YV94ZW5fc3RhcnQpCj4gKyAg ICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIGdhZGRyID0gcGFyYW0tPnUudG1lbS5idWZf cHRyICYgfihPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpOwo+ICsgICAgZ3Vlc3Rf bWZuID0gbG9va3VwX2d1ZXN0X3JhbV9hZGRyKGdhZGRyKTsKPiArICAgIGlmICggbWZuX2VxKGd1 ZXN0X21mbiwgSU5WQUxJRF9NRk4pICkKPiArICAgICAgICBnb3RvIGVycl9mcmVlOwo+ICsKPiAr ICAgIHBhZ2VzX2RhdGFfZ3Vlc3QgPSBtYXBfZG9tYWluX3BhZ2UoZ3Vlc3RfbWZuKTsKPiArICAg IGlmICghcGFnZXNfZGF0YV9ndWVzdCkKPiArICAgICAgICBnb3RvIGVycl9mcmVlOwo+ICsKPiAr ICAgIHBhZ2VzX2RhdGFfeGVuID0gcGFnZXNfZGF0YV94ZW5fc3RhcnQ7Cj4gKyAgICB3aGlsZSAo IG51bV9wYWdlcyApIHsKPiArICAgICAgICBtZm5fdCBlbnRyeV9tZm4gPSBsb29rdXBfZ3Vlc3Rf cmFtX2FkZHIoCj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFfZ3Vlc3QtPnBhZ2VzX2xpc3RbZW50 cmllc19vbl9wYWdlXSk7Cj4gKwo+ICsgICAgICAgIGlmICggbWZuX2VxKGVudHJ5X21mbiwgSU5W QUxJRF9NRk4pICkKPiArICAgICAgICAgICAgZ290byBlcnJfdW5tYXA7Cj4gKwo+ICsgICAgICAg IHBhZ2VzX2RhdGFfeGVuLT5wYWdlc19saXN0W2VudHJpZXNfb25fcGFnZV0gPSBtZm5fdG9fbWFk ZHIoZW50cnlfbWZuKTsKPiArICAgICAgICBlbnRyaWVzX29uX3BhZ2UrKzsKPiArCj4gKyAgICAg ICAgaWYgKCBlbnRyaWVzX29uX3BhZ2UgPT0gUEFHRUxJU1RfRU5UUklFU19QRVJfUEFHRSApIHsK PiArICAgICAgICAgICAgcGFnZXNfZGF0YV94ZW4tPm5leHRfcGFnZV9kYXRhID0gdmlydF90b19t YWRkcihwYWdlc19kYXRhX3hlbiArIDEpOwo+ICsgICAgICAgICAgICBwYWdlc19kYXRhX3hlbisr Owo+ICsgICAgICAgICAgICBnYWRkciA9IHBhZ2VzX2RhdGFfZ3Vlc3QtPm5leHRfcGFnZV9kYXRh Owo+ICsgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKPiAr ICAgICAgICAgICAgZ3Vlc3RfbWZuID0gbG9va3VwX2d1ZXN0X3JhbV9hZGRyKGdhZGRyKTsKPiAr ICAgICAgICAgICAgaWYgKCBtZm5fZXEoZ3Vlc3RfbWZuLCBJTlZBTElEX01GTikgKQo+ICsgICAg ICAgICAgICAgICAgZ290byBlcnJfZnJlZTsKPiArCj4gKyAgICAgICAgICAgIHBhZ2VzX2RhdGFf Z3Vlc3QgPSBtYXBfZG9tYWluX3BhZ2UoZ3Vlc3RfbWZuKTsKPiArICAgICAgICAgICAgaWYgKCAh cGFnZXNfZGF0YV9ndWVzdCApCj4gKyAgICAgICAgICAgICAgICBnb3RvIGVycl9mcmVlOwo+ICsg ICAgICAgICAgICAvKiBSb2xsIG92ZXIgdG8gdGhlIG5leHQgcGFnZSAqLwo+ICsgICAgICAgICAg ICBlbnRyaWVzX29uX3BhZ2UgPSAwOwo+ICsgICAgICAgIH0KPiArICAgICAgICBudW1fcGFnZXMt LTsKPiArICAgIH0KPiArCj4gKyAgICB1bm1hcF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0 KTsKPiArCj4gKyAgICBwYXJhbS0+dS50bWVtLmJ1Zl9wdHIgPSB2aXJ0X3RvX21hZGRyKHBhZ2Vz X2RhdGFfeGVuX3N0YXJ0KSB8IHBhZ2Vfb2Zmc2V0Owo+ICsKPiArICAgIGN0eC0+bm9uX2NvbnRp Z1tpZHhdID0gcGFnZXNfZGF0YV94ZW5fc3RhcnQ7Cj4gKyAgICBjdHgtPm5vbl9jb250aWdfb3Jk ZXJbaWR4XSA9IG9yZGVyOwo+ICsKPiArICAgIHVubWFwX2RvbWFpbl9wYWdlKHBhZ2VzX2RhdGFf Z3Vlc3QpOwo+ICsgICAgcmV0dXJuIHRydWU7Cj4gKwo+ICtlcnJfdW5tYXA6Cj4gKyAgICB1bm1h cF9kb21haW5fcGFnZShwYWdlc19kYXRhX2d1ZXN0KTsKPiArZXJyX2ZyZWU6Cj4gKyAgICBmcmVl X3hlbmhlYXBfcGFnZXMocGFnZXNfZGF0YV94ZW5fc3RhcnQsIG9yZGVyKTsKPiArICAgIHJldHVy biBmYWxzZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgdHJhbnNsYXRlX3BhcmFtcyhzdHJ1Y3Qg c3RkX2NhbGxfY3R4ICpjdHgpCj4gK3sKPiArICAgIHVuc2lnbmVkIGludCBpOwo+ICsgICAgdWlu dDMyX3QgYXR0cjsKPiArCj4gKyAgICBmb3IgKCBpID0gMDsgaSA8IGN0eC0+eGVuX2FyZy0+bnVt X3BhcmFtczsgaSsrICkgewo+ICsgICAgICAgIGF0dHIgPSBjdHgtPnhlbl9hcmctPnBhcmFtc1tp XS5hdHRyOwo+ICsKPiArICAgICAgICBzd2l0Y2ggKCBhdHRyICYgT1BURUVfTVNHX0FUVFJfVFlQ RV9NQVNLICkgewo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX0lOUFVU Ogo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKPiArICAg ICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9JTk9VVDoKPiArICAgICAgICAgICAg aWYgKCBhdHRyICYgT1BURUVfTVNHX0FUVFJfTk9OQ09OVElHICkgewo+ICsgICAgICAgICAgICAg ICAgaWYgKCAhdHJhbnNsYXRlX25vbmNvbnRpZyhjdHgsIGN0eC0+eGVuX2FyZy0+cGFyYW1zICsg aSwgaSkgKQo+ICsgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgICAg ICAgfQo+ICsgICAgICAgICAgICBlbHNlIHsKPiArICAgICAgICAgICAgICAgIGdwcmludGsoWEVO TE9HX1dBUk5JTkcsICJHdWVzdCB0cmllcyB0byB1c2Ugb2xkIHRtZW0gYXJnXG4iKTsKPiArICAg ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgICAgICAgICAgfQo+ICsgICAgICAgICAg ICBicmVhazsKPiArICAgICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfTk9ORToKPiArICAg ICAgICBjYXNlIE9QVEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5QVVQ6Cj4gKyAgICAgICAgY2Fz ZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKPiArICAgICAgICBjYXNlIE9QVEVF X01TR19BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRU Ul9UWVBFX1JNRU1fSU5QVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1JN RU1fT1VUUFVUOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9STUVNX0lOT1VU Ogo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICB9Cj4gKyAgICB9Cj4gKyAgICBy ZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArLyoKPiArICogQ29weSBjb21tYW5kIGJ1ZmZlciBpbnRv IHhlbiBtZW1vcnkgdG86Cj4gKyAqIDEpIEhpZGUgdHJhbnNsYXRlZCBhZGRyZXNzZXMgZnJvbSBn dWVzdAo+ICsgKiAyKSBNYWtlIHN1cmUgdGhhdCBndWVzdCB3b3VsZG4ndCBjaGFuZ2UgZGF0YSBp biBjb21tYW5kIGJ1ZmZlciBkdXJpbmcgY2FsbAo+ICsgKi8KPiArc3RhdGljIGJvb2wgY29weV9z dGRfcmVxdWVzdChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgpCj4gK3sKPiArICAgIHBhZGRy X3QgY21kX2dhZGRyLCB4ZW5fYWRkcjsKPiArICAgIG1mbl90IGNtZF9tZm47Cj4gKwo+ICsgICAg Y21kX2dhZGRyID0gKHBhZGRyX3QpZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpIDw8IDMyIHwKPiArICAg ICAgICBnZXRfdXNlcl9yZWcocmVncywgMik7Cj4gKwo+ICsgICAgLyoKPiArICAgICAqIENvbW1h bmQgYnVmZmVyIHNob3VsZCBzdGFydCBhdCBwYWdlIGJvdW5kYXJ5Lgo+ICsgICAgICogVGhpcyBp cyBPUC1URUUgQUJJIHJlcXVpcmVtZW50Lgo+ICsgICAgICovCj4gKyAgICBpZiAoIGNtZF9nYWRk ciAmIChPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpICkKPiArICAgICAgICByZXR1 cm4gZmFsc2U7Cj4gKwo+ICsgICAgY21kX21mbiA9IGxvb2t1cF9ndWVzdF9yYW1fYWRkcihjbWRf Z2FkZHIpOwo+ICsgICAgaWYgKCBtZm5fZXEoY21kX21mbiwgSU5WQUxJRF9NRk4pICkKPiArICAg ICAgICByZXR1cm4gZmFsc2U7Cj4gKwo+ICsgICAgY3R4LT5ndWVzdF9hcmcgPSBtYXBfZG9tYWlu X3BhZ2UoY21kX21mbik7Cj4gKyAgICBpZiAoICFjdHgtPmd1ZXN0X2FyZyApCj4gKyAgICAgICAg cmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIGN0eC0+eGVuX2FyZyA9IGFsbG9jX3hlbmhlYXBfcGFn ZSgpOwo+ICsgICAgaWYgKCAhY3R4LT54ZW5fYXJnICkKPiArICAgICAgICByZXR1cm4gZmFsc2U7 Cj4gKwo+ICsgICAgbWVtY3B5KGN0eC0+eGVuX2FyZywgY3R4LT5ndWVzdF9hcmcsIE9QVEVFX01T R19OT05DT05USUdfUEFHRV9TSVpFKTsKPiArCj4gKyAgICB4ZW5fYWRkciA9IHZpcnRfdG9fbWFk ZHIoY3R4LT54ZW5fYXJnKTsKPiArCj4gKyAgICBzZXRfdXNlcl9yZWcocmVncywgMSwgeGVuX2Fk ZHIgPj4gMzIpOwo+ICsgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDIsIHhlbl9hZGRyICYgMHhGRkZG RkZGRik7Cj4gKwo+ICsgICAgcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGNv cHlfc3RkX3JlcXVlc3RfYmFjayhzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncywKPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGRfY2FsbF9jdHggKmN0eCkKPiAr ewo+ICsgICAgdW5zaWduZWQgaW50IGk7Cj4gKyAgICB1aW50MzJfdCBhdHRyOwo+ICsKPiArICAg IGN0eC0+Z3Vlc3RfYXJnLT5yZXQgPSBjdHgtPnhlbl9hcmctPnJldDsKPiArICAgIGN0eC0+Z3Vl c3RfYXJnLT5yZXRfb3JpZ2luID0gY3R4LT54ZW5fYXJnLT5yZXRfb3JpZ2luOwo+ICsgICAgY3R4 LT5ndWVzdF9hcmctPnNlc3Npb24gPSBjdHgtPnhlbl9hcmctPnNlc3Npb247Cj4gKyAgICBmb3Ig KCBpID0gMDsgaSA8IGN0eC0+eGVuX2FyZy0+bnVtX3BhcmFtczsgaSsrICkgewo+ICsgICAgICAg IGF0dHIgPSBjdHgtPnhlbl9hcmctPnBhcmFtc1tpXS5hdHRyOwo+ICsKPiArICAgICAgICBzd2l0 Y2ggKCBhdHRyICYgT1BURUVfTVNHX0FUVFJfVFlQRV9NQVNLICkgewo+ICsgICAgICAgIGNhc2Ug T1BURUVfTVNHX0FUVFJfVFlQRV9UTUVNX09VVFBVVDoKPiArICAgICAgICBjYXNlIE9QVEVFX01T R19BVFRSX1RZUEVfVE1FTV9JTk9VVDoKPiArICAgICAgICAgICAgY3R4LT5ndWVzdF9hcmctPnBh cmFtc1tpXS51LnRtZW0uc2l6ZSA9Cj4gKyAgICAgICAgICAgICAgICBjdHgtPnhlbl9hcmctPnBh cmFtc1tpXS51LnRtZW0uc2l6ZTsKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAg Y2FzZSBPUFRFRV9NU0dfQVRUUl9UWVBFX1ZBTFVFX09VVFBVVDoKPiArICAgICAgICBjYXNlIE9Q VEVFX01TR19BVFRSX1RZUEVfVkFMVUVfSU5PVVQ6Cj4gKyAgICAgICAgICAgIGN0eC0+Z3Vlc3Rf YXJnLT5wYXJhbXNbaV0udS52YWx1ZS5hID0KPiArICAgICAgICAgICAgICAgIGN0eC0+eGVuX2Fy Zy0+cGFyYW1zW2ldLnUudmFsdWUuYTsKPiArICAgICAgICAgICAgY3R4LT5ndWVzdF9hcmctPnBh cmFtc1tpXS51LnZhbHVlLmIgPQo+ICsgICAgICAgICAgICAgICAgY3R4LT54ZW5fYXJnLT5wYXJh bXNbaV0udS52YWx1ZS5iOwo+ICsgICAgICAgICAgICBjb250aW51ZTsKPiArICAgICAgICBjYXNl IE9QVEVFX01TR19BVFRSX1RZUEVfUk1FTV9PVVRQVVQ6Cj4gKyAgICAgICAgY2FzZSBPUFRFRV9N U0dfQVRUUl9UWVBFX1JNRU1fSU5PVVQ6Cj4gKyAgICAgICAgICAgIGN0eC0+Z3Vlc3RfYXJnLT5w YXJhbXNbaV0udS5ybWVtLnNpemUgPQo+ICsgICAgICAgICAgICAgICAgY3R4LT54ZW5fYXJnLT5w YXJhbXNbaV0udS5ybWVtLnNpemU7Cj4gKyAgICAgICAgICAgIGNvbnRpbnVlOwo+ICsgICAgICAg IGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9OT05FOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNH X0FUVFJfVFlQRV9UTUVNX0lOUFVUOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQ RV9STUVNX0lOUFVUOgo+ICsgICAgICAgIGNhc2UgT1BURUVfTVNHX0FUVFJfVFlQRV9WQUxVRV9J TlBVVDoKPiArICAgICAgICAgICAgY29udGludWU7Cj4gKyAgICAgICAgfQo+ICsgICAgfQo+ICsg ICAgcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIGV4ZWN1dGVfc3RkX2NhbGwo c3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY3R4KQo+ICt7Cj4gKyAgICByZWdpc3Rlcl90IG9wdGVl X3JldDsKPiArICAgIGZvcndhcmRfY2FsbChyZWdzKTsKPiArICAgIG9wdGVlX3JldCA9IGdldF91 c2VyX3JlZyhyZWdzLCAwKTsKPiArCj4gKyAgICBpZiAoIE9QVEVFX1NNQ19SRVRVUk5fSVNfUlBD KG9wdGVlX3JldCkgKQo+ICsgICAgewo+ICsgICAgICAgIGN0eC0+b3B0ZWVfdGhyZWFkX2lkID0g Z2V0X3VzZXJfcmVnKHJlZ3MsIDMpOwo+ICsgICAgICAgIGN0eC0+cnBjX29wID0gT1BURUVfU01D X1JFVFVSTl9HRVRfUlBDX0ZVTkMob3B0ZWVfcmV0KTsKPiArICAgICAgICByZXR1cm4gdHJ1ZTsK PiArICAgIH0KPiArCj4gKyAgICBjb3B5X3N0ZF9yZXF1ZXN0X2JhY2socmVncywgY3R4KTsKPiAr ICAgIGZyZWVfc3RkX2NhbGxfY3R4KGN0eCk7Cj4gKwo+ICsgICAgcmV0dXJuIHRydWU7Cj4gK30K PiArCj4gK3N0YXRpYyBib29sIGhhbmRsZV9zdGRfY2FsbChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAq cmVncykKPiArewo+ICsgICAgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY3R4Owo+ICsgICAgYm9vbCBy ZXQ7Cj4gKwo+ICsgICAgY3R4ID0gYWxsb2NhdGVfc3RkX2NhbGxfY3R4KCk7Cj4gKwo+ICsgICAg aWYgKCFjdHgpCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsKPiArICAgIGN0eC0+ZG9taWQg PSBjdXJyZW50LT5kb21haW4tPmRvbWFpbl9pZDsKPiArCj4gKyAgICByZXQgPSBjb3B5X3N0ZF9y ZXF1ZXN0KHJlZ3MsIGN0eCk7Cj4gKyAgICBpZiAoICFyZXQgKQo+ICsgICAgICAgIGdvdG8gb3V0 Owo+ICsKPiArICAgIC8qIE5vdyB3ZSBjYW4gc2FmZWx5IGV4YW1pbmUgY29udGVudHMgb2YgY29t bWFuZCBidWZmZXIgKi8KPiArICAgIGlmICggT1BURUVfTVNHX0dFVF9BUkdfU0laRShjdHgtPnhl bl9hcmctPm51bV9wYXJhbXMpID4KPiArICAgICAgICAgT1BURUVfTVNHX05PTkNPTlRJR19QQUdF X1NJWkUgKSB7Cj4gKyAgICAgICAgcmV0ID0gZmFsc2U7Cj4gKyAgICAgICAgZ290byBvdXQ7Cj4g KyAgICB9Cj4gKwo+ICsgICAgc3dpdGNoICggY3R4LT54ZW5fYXJnLT5jbWQgKQo+ICsgICAgewo+ ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX09QRU5fU0VTU0lPTjoKPiArICAgIGNhc2UgT1BURUVf TVNHX0NNRF9DTE9TRV9TRVNTSU9OOgo+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0lOVk9LRV9D T01NQU5EOgo+ICsgICAgY2FzZSBPUFRFRV9NU0dfQ01EX0NBTkNFTDoKPiArICAgIGNhc2UgT1BU RUVfTVNHX0NNRF9SRUdJU1RFUl9TSE06Cj4gKyAgICBjYXNlIE9QVEVFX01TR19DTURfVU5SRUdJ U1RFUl9TSE06Cj4gKyAgICAgICAgcmV0ID0gdHJhbnNsYXRlX3BhcmFtcyhjdHgpOwo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICByZXQgPSBmYWxzZTsKPiArICAg IH0KPiArCj4gKyAgICBpZiAoIXJldCkKPiArICAgICAgICBnb3RvIG91dDsKPiArCj4gKyAgICBy ZXQgPSBleGVjdXRlX3N0ZF9jYWxsKHJlZ3MsIGN0eCk7Cj4gKwo+ICtvdXQ6Cj4gKyAgICBpZiAo IXJldCkKPiArICAgICAgICBmcmVlX3N0ZF9jYWxsX2N0eChjdHgpOwo+ICsKPiArICAgIHJldHVy biByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGhhbmRsZV9ycGNfY21kX2FsbG9jKHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHgsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBzaG0gKnNobSkKPiArewo+ICsgICAgaWYgKCBzaG0tPmd1ZXN0X2FyZy0+ cGFyYW1zWzBdLmF0dHIgIT0gKE9QVEVFX01TR19BVFRSX1RZUEVfVE1FTV9PVVRQVVQgfAo+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9QVEVFX01TR19BVFRS X05PTkNPTlRJRykgKQo+ICsgICAgewo+ICsgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJJbnZhbGlkIGF0dHJzIGZvciBzaGFyZWQgbWVtIGJ1ZmZlclxuIik7Cj4gKyAgICAgICAgcmV0 dXJuOwo+ICsgICAgfQo+ICsKPiArICAgIC8qIExhc3QgZW50cnkgaW4gbm9uX2NvbnRpZyBhcnJh eSBpcyB1c2VkIHRvIGhvbGQgUlBDLWFsbG9jYXRlZCBidWZmZXIgKi8KPiArICAgIGlmICggY3R4 LT5ub25fY29udGlnW01BWF9OT05DT05USUdfRU5UUklFUyAtIDFdICkKPiArICAgIHsKPiArICAg ICAgICBmcmVlX3hlbmhlYXBfcGFnZXMoY3R4LT5ub25fY29udGlnWzddLAo+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICBjdHgtPm5vbl9jb250aWdfb3JkZXJbTUFYX05PTkNPTlRJR19FTlRS SUVTIC0gMV0pOwo+ICsgICAgICAgIGN0eC0+bm9uX2NvbnRpZ1s3XSA9IE5VTEw7Cj4gKyAgICB9 Cj4gKyAgICB0cmFuc2xhdGVfbm9uY29udGlnKGN0eCwgc2htLT5ndWVzdF9hcmctPnBhcmFtcyAr IDAsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIE1BWF9OT05DT05USUdfRU5UUklFUyAtIDEp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoYW5kbGVfcnBjX2NtZChzdHJ1Y3QgY3B1X3VzZXJf cmVncyAqcmVncywgc3RydWN0IHN0ZF9jYWxsX2N0eCAqY3R4KQo+ICt7Cj4gKyAgICBzdHJ1Y3Qg c2htICpzaG07Cj4gKyAgICB1aW50NjRfdCBjb29raWU7Cj4gKwo+ICsgICAgY29va2llID0gZ2V0 X3VzZXJfcmVnKHJlZ3MsIDEpIDw8IDMyIHwgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpOwo+ICsKPiAr ICAgIHNobSA9IGZpbmRfc2htKGNvb2tpZSwgY3VycmVudC0+ZG9tYWluLT5kb21haW5faWQpOwo+ ICsKPiArICAgIGlmICggIXNobSApCj4gKyAgICB7Cj4gKyAgICAgICAgZ3ByaW50ayhYRU5MT0df RVJSLCAiQ2FuJ3QgZmluZCBTSE0gd2l0aCBjb29raWUgJWx4XG4iLCBjb29raWUpOwo+ICsgICAg ICAgIHJldHVybjsKPiArICAgIH0KPiArCj4gKyAgICBzd2l0Y2ggKHNobS0+Z3Vlc3RfYXJnLT5j bWQpIHsKPiArICAgIGNhc2UgT1BURUVfTVNHX1JQQ19DTURfR0VUX1RJTUU6Cj4gKyAgICAgICAg YnJlYWs7Cj4gKyAgICBjYXNlIE9QVEVFX01TR19SUENfQ01EX1dBSVRfUVVFVUU6Cj4gKyAgICAg ICAgYnJlYWs7Cj4gKyAgICBjYXNlIE9QVEVFX01TR19SUENfQ01EX1NVU1BFTkQ6Cj4gKyAgICAg ICAgYnJlYWs7Cj4gKyAgICBjYXNlIE9QVEVFX01TR19SUENfQ01EX1NITV9BTExPQzoKPiArICAg ICAgICBoYW5kbGVfcnBjX2NtZF9hbGxvYyhyZWdzLCBjdHgsIHNobSk7Cj4gKyAgICAgICAgYnJl YWs7Cj4gKyAgICBjYXNlIE9QVEVFX01TR19SUENfQ01EX1NITV9GUkVFOgo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBicmVhazsKPiArICAgIH0KPiArfQo+ICsK PiArc3RhdGljIHZvaWQgaGFuZGxlX3JwY19mdW5jX2FsbG9jKHN0cnVjdCBjcHVfdXNlcl9yZWdz ICpyZWdzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0ZF9j YWxsX2N0eCAqY3R4KQo+ICt7Cj4gKyAgICBwYWRkcl90IHB0ciA9IGdldF91c2VyX3JlZyhyZWdz LCAxKSA8PCAzMiB8IGdldF91c2VyX3JlZyhyZWdzLCAyKTsKPiArCj4gKyAgICBpZiAoIHB0ciAm IChPUFRFRV9NU0dfTk9OQ09OVElHX1BBR0VfU0laRSAtIDEpICkKPiArICAgICAgICBncHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiRG9tYWluIHJldHVybmVkIGludmFsaWQgUlBDIGNvbW1hbmQgYnVm ZmVyXG4iKTsKPiArCj4gKyAgICBpZiAoIHB0ciApIHsKPiArICAgICAgICB1aW50NjRfdCBjb29r aWUgPSBnZXRfdXNlcl9yZWcocmVncywgNCkgPDwgMzIgfCBnZXRfdXNlcl9yZWcocmVncywgNSk7 Cj4gKyAgICAgICAgc3RydWN0IHNobSAqc2htOwo+ICsKPiArICAgICAgICBzaG0gPSBhbGxvY2F0 ZV9hbmRfbWFwX3NobShwdHIsIGNvb2tpZSk7Cj4gKyAgICAgICAgaWYgKCAhc2htICkKPiArICAg ICAgICB7Cj4gKyAgICAgICAgICAgIGdwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsZWQgdG8g Y2FsbG9jYXRlIGFsbG9jYXRlIFNITVxuIik7Cj4gKyAgICAgICAgICAgIHB0ciA9IDA7Cj4gKyAg ICAgICAgfQo+ICsgICAgICAgIGVsc2UKPiArICAgICAgICAgICAgcHRyID0gbWZuX3RvX21hZGRy KHNobS0+Z3Vlc3RfbWZuKTsKPiArCj4gKyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDEsIHB0 ciA+PiAzMik7Cj4gKyAgICAgICAgc2V0X3VzZXJfcmVnKHJlZ3MsIDIsIHB0ciAmIDB4RkZGRkZG RkYpOwo+ICsgICAgfQo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBoYW5kbGVfcnBjKHN0cnVjdCBj cHVfdXNlcl9yZWdzICpyZWdzKQo+ICt7Cj4gKyAgICBzdHJ1Y3Qgc3RkX2NhbGxfY3R4ICpjdHg7 Cj4gKwo+ICsgICAgaW50IG9wdGVlX3RocmVhZF9pZCA9IGdldF91c2VyX3JlZyhyZWdzLCAzKTsK PiArCj4gKyAgICBjdHggPSBmaW5kX2N0eChvcHRlZV90aHJlYWRfaWQsIGN1cnJlbnQtPmRvbWFp bi0+ZG9tYWluX2lkKTsKPiArCj4gKyAgICBpZiAoIWN0eCkKPiArICAgICAgICByZXR1cm4gZmFs c2U7Cj4gKwo+ICsgICAgc3dpdGNoICggY3R4LT5ycGNfb3AgKSB7Cj4gKyAgICBjYXNlIE9QVEVF X1NNQ19SUENfRlVOQ19BTExPQzoKPiArICAgICAgICBoYW5kbGVfcnBjX2Z1bmNfYWxsb2MocmVn cywgY3R4KTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgT1BURUVfU01DX1JQQ19GVU5D X0ZSRUU6Cj4gKyAgICB7Cj4gKyAgICAgICAgdWludDY0X3QgY29va2llID0gZ2V0X3VzZXJfcmVn KHJlZ3MsIDEpIDw8IDMyIHwgZ2V0X3VzZXJfcmVnKHJlZ3MsIDIpOwo+ICsgICAgICAgIGZyZWVf c2htKGNvb2tpZSwgY3VycmVudC0+ZG9tYWluLT5kb21haW5faWQpOwo+ICsgICAgICAgIGJyZWFr Owo+ICsgICAgfQo+ICsgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfRk9SRUlHTl9JTlRSOgo+ ICsgICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBPUFRFRV9TTUNfUlBDX0ZVTkNfQ01EOgo+ICsg ICAgICAgIGhhbmRsZV9ycGNfY21kKHJlZ3MsIGN0eCk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAg ICB9Cj4gKwo+ICsgICAgcmV0dXJuIGV4ZWN1dGVfc3RkX2NhbGwocmVncywgY3R4KTsKPiArfQo+ ICsKPiArc3RhdGljIGJvb2wgaGFuZGxlX2dldF9zaG1fY29uZmlnKHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQo+ICt7Cj4gKyAgICBwYWRkcl90IHNobV9zdGFydDsKPiArICAgIHNpemVfdCBz aG1fc2l6ZTsKPiArICAgIGludCByYzsKPiArCj4gKyAgICAvKiBHaXZlIGFsbCBzdGF0aWMgU0hN IHJlZ2lvbiB0byB0aGUgaGFyZHdhcmUgZG9tYWluICovCj4gKyAgICBpZiAoICFpc19oYXJkd2Fy ZV9kb21haW4oY3VycmVudC0+ZG9tYWluKSApCj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsK PiArICAgIGZvcndhcmRfY2FsbChyZWdzKTsKPiArCj4gKyAgICAvKiBSZXR1cm4gZXJyb3IgYmFj ayB0byB0aGUgZ3Vlc3QgKi8KPiArICAgIGlmICggZ2V0X3VzZXJfcmVnKHJlZ3MsIDApICE9IE9Q VEVFX1NNQ19SRVRVUk5fT0spCj4gKyAgICAgICAgcmV0dXJuIHRydWU7Cj4gKwo+ICsgICAgc2ht X3N0YXJ0ID0gZ2V0X3VzZXJfcmVnKHJlZ3MsIDEpOwo+ICsgICAgc2htX3NpemUgPSBnZXRfdXNl cl9yZWcocmVncywgMik7Cj4gKwo+ICsgICAgLyogSFcgZG9tIGlzIG1hcHBlZCAxOjEgaW5pdGlh bGx5ICovCj4gKyAgICByYyA9IG1hcF9yZWdpb25zX3AybXQoY3VycmVudC0+ZG9tYWluLCBnYWRk cl90b19nZm4oc2htX3N0YXJ0KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBzaG1fc2l6 ZSAvIFBBR0VfU0laRSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBtYWRkcl90b19tZm4o c2htX3N0YXJ0KSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICBwMm1fcmFtX3J3KTsKPiAr ICAgIGlmICggcmMgPCAwICkKPiArICAgIHsKPiArICAgICAgICBncHJpbnRrKFhFTkxPR19JTkZP LCAiT1AtVEVFOiBDYW4ndCBtYXAgc3RhdGljIHNobSBmb3IgRG9tMDogJWRcbiIsIHJjKTsKPiAr ICAgICAgICBzZXRfdXNlcl9yZWcocmVncywgMCwgT1BURUVfU01DX1JFVFVSTl9FTk9UQVZBSUwp Owo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9v bCBoYW5kbGVfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBjcHVfdXNlcl9yZWdzICpyZWdz KQo+ICt7Cj4gKyAgICAgICAgZm9yd2FyZF9jYWxsKHJlZ3MpOwo+ICsKPiArICAgICAgICAvKiBS ZXR1cm4gZXJyb3IgYmFjayB0byB0aGUgZ3Vlc3QgKi8KPiArICAgICAgICBpZiAoIGdldF91c2Vy X3JlZyhyZWdzLCAwKSAhPSBPUFRFRV9TTUNfUkVUVVJOX09LICkKPiArICAgICAgICAgICAgcmV0 dXJuIHRydWU7Cj4gKwo+ICsgICAgICAgIC8qIERvbid0IGFsbG93IGd1ZXN0cyB0byB3b3JrIHdp dGhvdXQgZHluYW1pYyBTSE0gKi8KPiArICAgICAgICBpZiAoICEoZ2V0X3VzZXJfcmVnKHJlZ3Ms IDEpICYgT1BURUVfU01DX1NFQ19DQVBfRFlOQU1JQ19TSE0pICkKPiArICAgICAgICAgICAgc2V0 X3VzZXJfcmVnKHJlZ3MsIDAsIE9QVEVFX1NNQ19SRVRVUk5fRU5PVEFWQUlMKTsKPiArICAgICAg ICByZXR1cm4gdHJ1ZTsKPiArfQo+ICsKPiArc3RhdGljIGJvb2wgb3B0ZWVfaGFuZGxlX3NtYyhz dHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKPiArewo+ICsKPiArICAgIHN3aXRjaCAoIGdldF91 c2VyX3JlZyhyZWdzLCAwKSApCj4gKyAgICB7Cj4gKyAgICBjYXNlIE9QVEVFX1NNQ19HRVRfU0hN X0NPTkZJRzoKPiArICAgICAgICByZXR1cm4gaGFuZGxlX2dldF9zaG1fY29uZmlnKHJlZ3MpOwo+ ICsgICAgY2FzZSBPUFRFRV9TTUNfRVhDSEFOR0VfQ0FQQUJJTElUSUVTOgo+ICsgICAgICAgIHJl dHVybiBoYW5kbGVfZXhjaGFuZ2VfY2FwYWJpbGl0aWVzKHJlZ3MpOwo+ICsgICAgY2FzZSBPUFRF RV9TTUNfQ0FMTF9XSVRIX0FSRzoKPiArICAgICAgICByZXR1cm4gaGFuZGxlX3N0ZF9jYWxsKHJl Z3MpOwo+ICsgICAgY2FzZSBPUFRFRV9TTUNfQ0FMTF9SRVRVUk5fRlJPTV9SUEM6Cj4gKyAgICAg ICAgcmV0dXJuIGhhbmRsZV9ycGMocmVncyk7Cj4gKyAgICBkZWZhdWx0Ogo+ICsgICAgICAgIHJl dHVybiBmb3J3YXJkX2NhbGwocmVncyk7Cj4gKyAgICB9Cj4gKyAgICByZXR1cm4gZmFsc2U7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIG9wdGVlX3JlbW92ZSh2b2lkKQo+ICt7Cj4gK30KPiArCj4g K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGVlX21lZGlhdG9yX29wcyBvcHRlZV9vcHMgPQo+ICt7Cj4g KyAgICAuaW5pdCA9IG9wdGVlX2luaXQsCj4gKyAgICAuZG9tYWluX2NyZWF0ZSA9IG9wdGVlX2Rv bWFpbl9jcmVhdGUsCj4gKyAgICAuZG9tYWluX2Rlc3Ryb3kgPSBvcHRlZV9kb21haW5fZGVzdHJv eSwKPiArICAgIC5oYW5kbGVfc21jID0gb3B0ZWVfaGFuZGxlX3NtYywKPiArICAgIC5yZW1vdmUg PSBvcHRlZV9yZW1vdmUsCj4gK307Cj4gKwo+ICtSRUdJU1RFUl9URUVfTUVESUFUT1Iob3B0ZWUs ICJPUC1URUUiLCBPUFRFRV9VSUQsICZvcHRlZV9vcHMpOwo+ICsKPiArLyoKPiArICogTG9jYWwg dmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKPiArICog Yy1iYXNpYy1vZmZzZXQ6IDQKPiArICogaW5kZW50LXRhYnMtbW9kZTogbmlsCj4gKyAqIEVuZDoK PiArICovCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS90ZWUvb3B0ZWVfc21jLmggYi94ZW4v YXJjaC9hcm0vdGVlL29wdGVlX3NtYy5oCj4gaW5kZXggOTJmNGQ1NC4uMmU5ZGYzNCAxMDA2NDQK PiAtLS0gYS94ZW4vYXJjaC9hcm0vdGVlL29wdGVlX3NtYy5oCj4gKysrIGIveGVuL2FyY2gvYXJt L3RlZS9vcHRlZV9zbWMuaAo+IEBAIC0zMDUsNiArMzA1LDU2IEBAIHN0cnVjdCBvcHRlZV9zbWNf ZGlzYWJsZV9zaG1fY2FjaGVfcmVzdWx0IHsKPiAgCU9QVEVFX1NNQ19GQVNUX0NBTExfVkFMKE9Q VEVFX1NNQ19GVU5DSURfRU5BQkxFX1NITV9DQUNIRSkKPiAgCj4gIC8qCj4gKyAqIEluZm9ybSBP UC1URUUgYWJvdXQgYSBuZXcgdmlydHVhbCBtYWNoaW5lCj4gKyAqCj4gKyAqIEh5cGVydmlzb3Ig aXNzdWVzIHRoaXMgY2FsbCBkdXJpbmcgdmlydHVhbCBtYWNoaW5lIChndWVzdCkgY3JlYXRpb24u Cj4gKyAqIE9QLVRFRSByZWNvcmRzIFZNX0lEIG9mIG5ldyB2aXJ0dWFsIG1hY2hpbmUgYW5kIG1h a2VzIHNlbGYgcmVhZHkKPiArICogdG8gcmVjZWl2ZSByZXF1ZXN0cyBmcm9tIGl0Lgo+ICsgKgo+ ICsgKiBDYWxsIHJlcXVlc3RzIHVzYWdlOgo+ICsgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVF X1NNQ19WTV9DUkVBVEVECj4gKyAqIGExCVZNX0lEIG9mIG5ld2x5IGNyZWF0ZWQgdmlydHVhbCBt YWNoaW5lCj4gKyAqIGEyLTYgTm90IHVzZWQKPiArICogYTcJSHlwZXJ2aXNvciBDbGllbnQgSUQg cmVnaXN0ZXIuIE11c3QgYmUgMCwgYmVjYXVzZSBvbmx5IGh5cGVydmlzb3IKPiArICogICAgICBj YW4gaXNzdWUgdGhpcyBjYWxsCj4gKyAqCj4gKyAqIE5vcm1hbCByZXR1cm4gcmVnaXN0ZXIgdXNh Z2U6Cj4gKyAqIGEwCU9QVEVFX1NNQ19SRVRVUk5fT0sKPiArICogYTEtNwlQcmVzZXJ2ZWQKPiAr ICoKPiArICogRXJyb3IgcmV0dXJuOgo+ICsgKiBhMAlPUFRFRV9TTUNfUkVUVVJOX0VOT1RBVkFJ TAlPUC1URUUgaGFzIG5vIHJlc291cmNlcyBmb3IKPiArICoJCQkJCWFub3RoZXIgVk0KPiArICog YTEtNwlQcmVzZXJ2ZWQKPiArICoKPiArICovCj4gKyNkZWZpbmUgT1BURUVfU01DX0ZVTkNJRF9W TV9DUkVBVEVECTEzCj4gKyNkZWZpbmUgT1BURUVfU01DX1ZNX0NSRUFURUQgXAo+ICsJT1BURUVf U01DX0ZBU1RfQ0FMTF9WQUwoT1BURUVfU01DX0ZVTkNJRF9WTV9DUkVBVEVEKQo+ICsKPiArLyoK PiArICogSW5mb3JtIE9QLVRFRSBhYm91dCBzaHV0ZG93biBvZiBhIHZpcnR1YWwgbWFjaGluZQo+ ICsgKgo+ICsgKiBIeXBlcnZpc29yIGlzc3VlcyB0aGlzIGNhbGwgZHVyaW5nIHZpcnR1YWwgbWFj aGluZSAoZ3Vlc3QpIGRlc3RydWN0aW9uLgo+ICsgKiBPUC1URUUgd2lsbCBjbGVhbiB1cCBhbGwg cmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIFZNLgo+ICsgKgo+ICsgKiBDYWxsIHJlcXVl c3RzIHVzYWdlOgo+ICsgKiBhMAlTTUMgRnVuY3Rpb24gSUQsIE9QVEVFX1NNQ19WTV9ERVNUUk9Z RUQKPiArICogYTEJVk1fSUQgb2YgdmlydHVhbCBtYWNoaW5lIGJlaW5nIHNodXR0ZWQgZG93bgo+ ICsgKiBhMi02IE5vdCB1c2VkCj4gKyAqIGE3CUh5cGVydmlzb3IgQ2xpZW50IElEIHJlZ2lzdGVy LiBNdXN0IGJlIDAsIGJlY2F1c2Ugb25seSBoeXBlcnZpc29yCj4gKyAqICAgICAgY2FuIGlzc3Vl IHRoaXMgY2FsbAo+ICsgKgo+ICsgKiBOb3JtYWwgcmV0dXJuIHJlZ2lzdGVyIHVzYWdlOgo+ICsg KiBhMAlPUFRFRV9TTUNfUkVUVVJOX09LCj4gKyAqIGExLTcJUHJlc2VydmVkCj4gKyAqCj4gKyAq Lwo+ICsjZGVmaW5lIE9QVEVFX1NNQ19GVU5DSURfVk1fREVTVFJPWUVECTE0Cj4gKyNkZWZpbmUg T1BURUVfU01DX1ZNX0RFU1RST1lFRCBcCj4gKwlPUFRFRV9TTUNfRkFTVF9DQUxMX1ZBTChPUFRF RV9TTUNfRlVOQ0lEX1ZNX0RFU1RST1lFRCkKPiArCj4gKy8qCj4gICAqIFJlc3VtZSBmcm9tIFJQ QyAoZm9yIGV4YW1wbGUgYWZ0ZXIgcHJvY2Vzc2luZyBhIGZvcmVpZ24gaW50ZXJydXB0KQo+ICAg Kgo+ICAgKiBDYWxsIHJlZ2lzdGVyIHVzYWdlOgo+IC0tIAo+IDIuNy40Cj4gCj4gCj4gX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBYZW4tZGV2ZWwgbWFp bGluZyBsaXN0Cj4gWGVuLWRldmVsQGxpc3RzLnhlbnByb2plY3Qub3JnCj4gaHR0cHM6Ly9saXN0 cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlz dApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0 Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1kZXZlbA==