From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhou, David(ChunMing)" Subject: RE: [PATCH 2/6] [RFC]drm: add syncobj timeline support v7 Date: Thu, 20 Sep 2018 09:45:49 +0000 Message-ID: References: <20180919091742.21827-1-david1.zhou@amd.com> <06306069-08aa-5704-b35d-3739490345a3@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <06306069-08aa-5704-b35d-3739490345a3-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: "Koenig, Christian" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: Dave Airlie , "Rakos, Daniel" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , Daniel Vetter List-Id: dri-devel@lists.freedesktop.org DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogYW1kLWdmeCA8YW1kLWdm eC1ib3VuY2VzQGxpc3RzLmZyZWVkZXNrdG9wLm9yZz4gT24gQmVoYWxmIE9mDQo+IENocmlzdGlh biBLP25pZw0KPiBTZW50OiBUaHVyc2RheSwgU2VwdGVtYmVyIDIwLCAyMDE4IDU6MzUgUE0NCj4g VG86IFpob3UsIERhdmlkKENodW5NaW5nKSA8RGF2aWQxLlpob3VAYW1kLmNvbT47IGRyaS0NCj4g ZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IENjOiBEYXZlIEFpcmxpZSA8YWlybGllZEBy ZWRoYXQuY29tPjsgUmFrb3MsIERhbmllbA0KPiA8RGFuaWVsLlJha29zQGFtZC5jb20+OyBEYW5p ZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+OyBhbWQtDQo+IGdmeEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCAyLzZdIFtSRkNdZHJtOiBhZGQgc3luY29iaiB0 aW1lbGluZSBzdXBwb3J0IHY3DQo+IA0KPiBUaGUgb25seSB0aGluZyBJIGNhbiBzdGlsbCBzZWUg aXMgdGhhdCB5b3UgdXNlIHdhaXRfZXZlbnRfdGltZW91dCgpIGluc3RlYWQgb2YNCj4gd2FpdF9l dmVudF9pbnRlcnJ1cHRpYmxlKCkuDQo+IA0KPiBBbnkgcGFydGljdWxhciByZWFzb24gZm9yIHRo YXQ/DQoNCkkgdHJpZWQgYWdhaW4gYWZ0ZXIgeW91IHNhaWQgbGFzdCB0aHJlYWQsIENUUyBhbHdh eXMgZmFpbCwgYW5kIHN5bmNvYmogdW5pdCB0ZXN0IGZhaWxzIGFzIHdlbGwuDQoNCg0KPiANCj4g QXBhcnQgZnJvbSB0aGF0IGl0IG5vdyBsb29rcyBnb29kIHRvIG1lLg0KDQpUaGFua3MsIENhbiBJ IGdldCB5b3VyIFJCIG9uIGl0Pw0KDQpCdHcsIEkgcmVhbGl6ZSBWdWxrYW4gc3BlYyBuYW1lcyBz ZW1hcGhvcmUgdHlwZSBhcyBiaW5hcnkgYW5kIHRpbWVsaW5lLCBzbyBob3cgYWJvdXQgY2hhbmdl IF9UWVBFX0lORElWSURVQUwgIHRvIF9UWVBFX0JJTkFSWSA/DQoNClJlZ2FyZHMsDQpEYXZpZCBa aG91DQo+IA0KPiBDaHJpc3RpYW4uDQo+IA0KPiBBbSAyMC4wOS4yMDE4IHVtIDExOjI5IHNjaHJp ZWIgWmhvdSwgRGF2aWQoQ2h1bk1pbmcpOg0KPiA+IFBpbmcuLi4NCj4gPg0KPiA+PiAtLS0tLU9y aWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+PiBGcm9tOiBhbWQtZ2Z4IDxhbWQtZ2Z4LWJvdW5jZXNA bGlzdHMuZnJlZWRlc2t0b3Aub3JnPiBPbiBCZWhhbGYgT2YNCj4gPj4gQ2h1bm1pbmcgWmhvdQ0K PiA+PiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAxOSwgMjAxOCA1OjE4IFBNDQo+ID4+IFRv OiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+ID4+IENjOiBaaG91LCBEYXZpZChD aHVuTWluZykgPERhdmlkMS5aaG91QGFtZC5jb20+OyBhbWQtDQo+ID4+IGdmeEBsaXN0cy5mcmVl ZGVza3RvcC5vcmc7IFJha29zLCBEYW5pZWwgPERhbmllbC5SYWtvc0BhbWQuY29tPjsNCj4gPj4g RGFuaWVsIFZldHRlciA8ZGFuaWVsQGZmd2xsLmNoPjsgRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVk aGF0LmNvbT47DQo+ID4+IEtvZW5pZywgQ2hyaXN0aWFuIDxDaHJpc3RpYW4uS29lbmlnQGFtZC5j b20+DQo+ID4+IFN1YmplY3Q6IFtQQVRDSCAyLzZdIFtSRkNdZHJtOiBhZGQgc3luY29iaiB0aW1l bGluZSBzdXBwb3J0IHY3DQo+ID4+DQo+ID4+IFRoaXMgcGF0Y2ggaXMgZm9yIFZLX0tIUl90aW1l bGluZV9zZW1hcGhvcmUgZXh0ZW5zaW9uLCBzZW1hcGhvcmUgaXMNCj4gPj4gY2FsbGVkIHN5bmNv YmogaW4ga2VybmVsIHNpZGU6DQo+ID4+IFRoaXMgZXh0ZW5zaW9uIGludHJvZHVjZXMgYSBuZXcg dHlwZSBvZiBzeW5jb2JqIHRoYXQgaGFzIGFuIGludGVnZXINCj4gPj4gcGF5bG9hZCBpZGVudGlm eWluZyBhIHBvaW50IGluIGEgdGltZWxpbmUuIFN1Y2ggdGltZWxpbmUgc3luY29ianMNCj4gPj4g c3VwcG9ydCB0aGUgZm9sbG93aW5nDQo+ID4+IG9wZXJhdGlvbnM6DQo+ID4+ICAgICAqIENQVSBx dWVyeSAtIEEgaG9zdCBvcGVyYXRpb24gdGhhdCBhbGxvd3MgcXVlcnlpbmcgdGhlIHBheWxvYWQg b2YgdGhlDQo+ID4+ICAgICAgIHRpbWVsaW5lIHN5bmNvYmouDQo+ID4+ICAgICAqIENQVSB3YWl0 IC0gQSBob3N0IG9wZXJhdGlvbiB0aGF0IGFsbG93cyBhIGJsb2NraW5nIHdhaXQgZm9yIGENCj4g Pj4gICAgICAgdGltZWxpbmUgc3luY29iaiB0byByZWFjaCBhIHNwZWNpZmllZCB2YWx1ZS4NCj4g Pj4gICAgICogRGV2aWNlIHdhaXQgLSBBIGRldmljZSBvcGVyYXRpb24gdGhhdCBhbGxvd3Mgd2Fp dGluZyBmb3IgYQ0KPiA+PiAgICAgICB0aW1lbGluZSBzeW5jb2JqIHRvIHJlYWNoIGEgc3BlY2lm aWVkIHZhbHVlLg0KPiA+PiAgICAgKiBEZXZpY2Ugc2lnbmFsIC0gQSBkZXZpY2Ugb3BlcmF0aW9u IHRoYXQgYWxsb3dzIGFkdmFuY2luZyB0aGUNCj4gPj4gICAgICAgdGltZWxpbmUgc3luY29iaiB0 byBhIHNwZWNpZmllZCB2YWx1ZS4NCj4gPj4NCj4gPj4gdjE6DQo+ID4+IFNpbmNlIGl0J3MgYSB0 aW1lbGluZSwgdGhhdCBtZWFucyB0aGUgZnJvbnQgdGltZSBwb2ludChQVCkgYWx3YXlzIGlzDQo+ ID4+IHNpZ25hbGVkIGJlZm9yZSB0aGUgbGF0ZSBQVC4NCj4gPj4gYS4gc2lnbmFsIFBUIGRlc2ln bjoNCj4gPj4gU2lnbmFsIFBUIGZlbmNlIE4gZGVwZW5kcyBvbiBQVFtOLTFdIGZlbmNlIGFuZCBz aWduYWwgb3BlcnRpb24gZmVuY2UsDQo+ID4+IHdoZW4gUFRbTl0gZmVuY2UgaXMgc2lnbmFsZWQs IHRoZSB0aW1lbGluZSB3aWxsIGluY3JlYXNlIHRvIHZhbHVlIG9mIFBUW05dLg0KPiA+PiBiLiB3 YWl0IFBUIGRlc2lnbjoNCj4gPj4gV2FpdCBQVCBmZW5jZSBpcyBzaWduYWxlZCBieSByZWFjaGlu ZyB0aW1lbGluZSBwb2ludCB2YWx1ZSwgd2hlbg0KPiA+PiB0aW1lbGluZSBpcyBpbmNyZWFzaW5n LCB3aWxsIGNvbXBhcmUgd2FpdCBQVHMgdmFsdWUgd2l0aCBuZXcgdGltZWxpbmUNCj4gPj4gdmFs dWUsIGlmIFBUIHZhbHVlIGlzIGxvd2VyIHRoYW4gdGltZWxpbmUgdmFsdWUsIHRoZW4gd2FpdCBQ VCB3aWxsIGJlIHNpZ25hbGVkLA0KPiBvdGhlcndpc2Uga2VlcCBpbiBsaXN0Lg0KPiA+PiBzeW5j b2JqIHdhaXQgb3BlcmF0aW9uIGNhbiB3YWl0IG9uIGFueSBwb2ludCBvZiB0aW1lbGluZSwgc28g bmVlZCBhDQo+ID4+IFJCIHRyZWUgdG8gb3JkZXIgdGhlbS4gQW5kIHdhaXQgUFQgY291bGQgYWhl YWQgb2Ygc2lnbmFsIFBULCB3ZSBuZWVkDQo+ID4+IGEgc3VtaXNzaW9uIGZlbmNlIHRvIHBlcmZv cm0gdGhhdC4NCj4gPj4NCj4gPj4gdjI6DQo+ID4+IDEuIHJlbW92ZSB1bnVzZWQgRFJNX1NZTkNP QkpfQ1JFQVRFX1RZUEVfTk9STUFMLiAoQ2hyaXN0aWFuKSAyLg0KPiA+PiBtb3ZlIHVuZXhwb3Nl ZCBkZW5pdGlvbnMgdG8gLmMgZmlsZS4gKERhbmllbCBWZXR0ZXIpIDMuIHNwbGl0IHVwIHRoZQ0K PiA+PiBjaGFuZ2UgdG8NCj4gPj4gZHJtX3N5bmNvYmpfZmluZF9mZW5jZSgpIGluIGEgc2VwYXJh dGUgcGF0Y2guIChDaHJpc3RpYW4pIDQuIHNwbGl0IHVwDQo+ID4+IHRoZSBjaGFuZ2UgdG8gZHJt X3N5bmNvYmpfcmVwbGFjZV9mZW5jZSgpIGluIGEgc2VwYXJhdGUgcGF0Y2guDQo+ID4+IDUuIGRy b3AgdGhlIHN1Ym1pc3Npb25fZmVuY2UgaW1wbGVtZW50YXRpb24gYW5kIGluc3RlYWQgdXNlDQo+ ID4+IHdhaXRfZXZlbnQoKSBmb3IgdGhhdC4gKENocmlzdGlhbikgNi4gV0FSTl9PTihwb2ludCAh PSAwKSBmb3IgTk9STUFMDQo+IHR5cGUgc3luY29iaiBjYXNlLg0KPiA+PiAoRGFuaWVsIFZldHRl cikNCj4gPj4NCj4gPj4gdjM6DQo+ID4+IDEuIHJlcGxhY2Ugbm9ybWFsIHN5bmNvYmogd2l0aCB0 aW1lbGluZSBpbXBsZW1lbmF0aW9uLiAoVmV0dGVyIGFuZA0KPiBDaHJpc3RpYW4pDQo+ID4+ICAg ICAgYS4gbm9ybWFsIHN5bmNvYmogc2lnbmFsIG9wIHdpbGwgY3JlYXRlIGEgc2lnbmFsIFBUIHRv IHRhaWwgb2Ygc2lnbmFsIHB0IGxpc3QuDQo+ID4+ICAgICAgYi4gbm9ybWFsIHN5bmNvYmogd2Fp dCBvcCB3aWxsIGNyZWF0ZSBhIHdhaXQgcHQgd2l0aCBsYXN0IHNpZ25hbA0KPiA+PiBwb2ludCwg YW5kIHRoaXMgd2FpdCBQVCBpcyBvbmx5IHNpZ25hbGVkIGJ5IHJlbGF0ZWQgc2lnbmFsIHBvaW50 IFBULg0KPiA+PiAyLiBtYW55IGJ1ZyBmaXggYW5kIGNsZWFuIHVwDQo+ID4+IDMuIHN0dWIgZmVu Y2UgbW92aW5nIGlzIG1vdmVkIHRvIG90aGVyIHBhdGNoLg0KPiA+Pg0KPiA+PiB2NO+8mg0KPiA+ PiAxLiBmaXggUkIgdHJlZSBsb29wIHdpdGggd2hpbGUobm9kZT1yYl9maXJzdCguLi4pKS4gKENo cmlzdGlhbikgMi4NCj4gPj4gZml4IHN5bmNvYmogbGlmZWN5Y2xlLiAoQ2hyaXN0aWFuKSAzLiBv bmx5IGVuYWJsZV9zaWduYWxpbmcgd2hlbg0KPiA+PiB0aGVyZSBpcyB3YWl0X3B0LiAoQ2hyaXN0 aWFuKSA0LiBmaXggdGltZWxpbmUgcGF0aCBpc3N1ZXMuDQo+ID4+IDUuIHdyaXRlIGEgdGltZWxp bmUgdGVzdCBpbiBsaWJkcm0NCj4gPj4NCj4gPj4gdjU6IChDaHJpc3RpYW4pDQo+ID4+IDEuIHNl bWFwaG9yZSBpcyBjYWxsZWQgc3luY29iaiBpbiBrZXJuZWwgc2lkZS4NCj4gPj4gMi4gZG9uJ3Qg bmVlZCAndGltZWxpbmUnIGNoYXJhY3RlcnMgaW4gc29tZSBmdW5jdGlvbiBuYW1lLg0KPiA+PiAz LiBrZWVwIHN5bmNvYmogY2IuDQo+ID4+DQo+ID4+IHY2OiAoQ2hyaXN0aWFuKQ0KPiA+PiAxLiBt ZXJnZSBzeW5jb2JqX3RpbWVsaW5lIHRvIHN5bmNvYmogc3RydWN0dXJlLg0KPiA+PiAyLiBzaW1w bGlmeSBzb21lIGNoZWNrIHNlbnRlbmNlcy4NCj4gPj4gMy4gc29tZSBtaXNjIGNoYW5nZS4NCj4g Pj4gNC4gZml4IENUUyBmYWlsZWQgaXNzdWUuDQo+ID4+DQo+ID4+IHY3OiAoQ2hyaXN0aWFuKQ0K PiA+PiAxLiBlcnJvciBoYW5kbGluZyB3aGVuIGNyZWF0aW5nIHNpZ25hbCBwdC4NCj4gPj4gMi4g cmVtb3ZlIHRpbWVsaW5lIG5hbWluZyBpbiBmdW5jLg0KPiA+PiAzLiBleHBvcnQgZmxhZ3MgaW4g ZmluZF9mZW5jZS4NCj4gPj4gNC4gYWxsb3cgcmVzZXQgdGltZWxpbmUuDQo+ID4+DQo+ID4+IGlu ZGl2aWR1YWwgc3luY29iaiBpcyB0ZXN0ZWQgYnkgLi9kZXFwLXZrIC1uIGRFUVAtVksqc2VtYXBo b3JlKg0KPiA+PiB0aW1lbGluZSBzeW5jb2JqIGlzIHRlc3RlZCBieSAuL2FtZGdwdV90ZXN0IC1z IDkNCj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VA YW1kLmNvbT4NCj4gPj4gQ2M6IENocmlzdGlhbiBLb25pZyA8Y2hyaXN0aWFuLmtvZW5pZ0BhbWQu Y29tPg0KPiA+PiBDYzogRGF2ZSBBaXJsaWUgPGFpcmxpZWRAcmVkaGF0LmNvbT4NCj4gPj4gQ2M6 IERhbmllbCBSYWtvcyA8RGFuaWVsLlJha29zQGFtZC5jb20+DQo+ID4+IENjOiBEYW5pZWwgVmV0 dGVyIDxkYW5pZWxAZmZ3bGwuY2g+DQo+ID4+IC0tLQ0KPiA+PiAgIGRyaXZlcnMvZ3B1L2RybS9k cm1fc3luY29iai5jICAgICAgICAgICAgICB8IDI5MyArKysrKysrKysrKysrKysrKystLS0NCj4g Pj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMgfCAgIDIgKy0N Cj4gPj4gICBpbmNsdWRlL2RybS9kcm1fc3luY29iai5oICAgICAgICAgICAgICAgICAgfCAgNjUg KystLS0NCj4gPj4gICBpbmNsdWRlL3VhcGkvZHJtL2RybS5oICAgICAgICAgICAgICAgICAgICAg fCAgIDEgKw0KPiA+PiAgIDQgZmlsZXMgY2hhbmdlZCwgMjg3IGluc2VydGlvbnMoKyksIDc0IGRl bGV0aW9ucygtKQ0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9z eW5jb2JqLmMNCj4gPj4gYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5bmNvYmouYyBpbmRleCBmNzk2 YzlmYzM4NTguLjk1YjYwYWMwNDVjNg0KPiA+PiAxMDA2NDQNCj4gPj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL2RybV9zeW5jb2JqLmMNCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zeW5j b2JqLmMNCj4gPj4gQEAgLTU2LDYgKzU2LDkgQEANCj4gPj4gICAjaW5jbHVkZSAiZHJtX2ludGVy bmFsLmgiDQo+ID4+ICAgI2luY2x1ZGUgPGRybS9kcm1fc3luY29iai5oPg0KPiA+Pg0KPiA+PiAr LyogbWVyZ2Ugbm9ybWFsIHN5bmNvYmogdG8gdGltZWxpbmUgc3luY29iaiwgdGhlIHBvaW50IGlu dGVydmFsIGlzIDENCj4gPj4gKyovICNkZWZpbmUgRFJNX1NZTkNPQkpfSU5ESVZJRFVBTF9QT0lO VCAxDQo+ID4+ICsNCj4gPj4gICBzdHJ1Y3QgZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZSB7DQo+ID4+ ICAgCXN0cnVjdCBkbWFfZmVuY2UgYmFzZTsNCj4gPj4gICAJc3BpbmxvY2tfdCBsb2NrOw0KPiA+ PiBAQCAtODIsNiArODUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWFfZmVuY2Vfb3BzDQo+ ID4+IGRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzID0gew0KPiA+PiAgIAkucmVsZWFzZSA9IGRy bV9zeW5jb2JqX3N0dWJfZmVuY2VfcmVsZWFzZSwgIH07DQo+ID4+DQo+ID4+ICtzdHJ1Y3QgZHJt X3N5bmNvYmpfc2lnbmFsX3B0IHsNCj4gPj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlX2FycmF5ICpiYXNl Ow0KPiA+PiArCXU2NCAgICB2YWx1ZTsNCj4gPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7DQo+ ID4+ICt9Ow0KPiA+Pg0KPiA+PiAgIC8qKg0KPiA+PiAgICAqIGRybV9zeW5jb2JqX2ZpbmQgLSBs b29rdXAgYW5kIHJlZmVyZW5jZSBhIHN5bmMgb2JqZWN0Lg0KPiA+PiBAQCAtMTI0LDggKzEzMiw4 IEBAIHN0YXRpYyBpbnQNCj4gPj4gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0X29yX2FkZF9jYWxsYmFj ayhzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosDQo+IHsNCj4gPj4gICAJaW50IHJldDsNCj4g Pj4NCj4gPj4gLQkqZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29iaik7DQo+ID4+ IC0JaWYgKCpmZW5jZSkNCj4gPj4gKwlyZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3lu Y29iaiwgMCwgMCwgZmVuY2UpOw0KPiA+PiArCWlmICghcmV0KQ0KPiA+PiAgIAkJcmV0dXJuIDE7 DQo+ID4+DQo+ID4+ICAgCXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7DQo+ID4+IEBAIC0xMzMs MTAgKzE0MSwxMiBAQCBzdGF0aWMgaW50DQo+ID4+IGRybV9zeW5jb2JqX2ZlbmNlX2dldF9vcl9h ZGRfY2FsbGJhY2soc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLA0KPiA+PiAgIAkgKiBoYXZl IHRoZSBsb2NrLCB0cnkgb25lIG1vcmUgdGltZSBqdXN0IHRvIGJlIHN1cmUgd2UgZG9uJ3QgYWRk IGENCj4gPj4gICAJICogY2FsbGJhY2sgd2hlbiBhIGZlbmNlIGhhcyBhbHJlYWR5IGJlZW4gc2V0 Lg0KPiA+PiAgIAkgKi8NCj4gPj4gLQlpZiAoc3luY29iai0+ZmVuY2UpIHsNCj4gPj4gLQkJKmZl bmNlID0NCj4gPj4gZG1hX2ZlbmNlX2dldChyY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKHN5bmNv YmotPmZlbmNlLA0KPiA+PiAtDQo+ID4+IGxvY2tkZXBfaXNfaGVsZCgmc3luY29iai0+bG9jaykp KTsNCj4gPj4gLQkJcmV0ID0gMTsNCj4gPj4gKwlpZiAoIWxpc3RfZW1wdHkoJnN5bmNvYmotPnNp Z25hbF9wdF9saXN0KSkgew0KPiA+PiArCQlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7DQo+ ID4+ICsJCWRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzeW5jb2JqLCAwLCAwLCBmZW5jZSk7DQo+ ID4+ICsJCWlmICgqZmVuY2UpDQo+ID4+ICsJCQlyZXR1cm4gMTsNCj4gPj4gKwkJc3Bpbl9sb2Nr KCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gICAJfSBlbHNlIHsNCj4gPj4gICAJCSpmZW5jZSA9IE5V TEw7DQo+ID4+ICAgCQlkcm1fc3luY29ial9hZGRfY2FsbGJhY2tfbG9ja2VkKHN5bmNvYmosIGNi LCBmdW5jKTsgQEAgLQ0KPiA+PiAxNjQsNiArMTc0LDE1OSBAQCB2b2lkIGRybV9zeW5jb2JqX3Jl bW92ZV9jYWxsYmFjayhzdHJ1Y3QNCj4gZHJtX3N5bmNvYmoNCj4gPj4gKnN5bmNvYmosDQo+ID4+ ICAgCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gICB9DQo+ID4+DQo+ID4+ICtz dGF0aWMgdm9pZCBkcm1fc3luY29ial9pbml0KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikg ew0KPiA+PiArCXNwaW5fbG9jaygmc3luY29iai0+bG9jayk7DQo+ID4+ICsJc3luY29iai0+dGlt ZWxpbmVfY29udGV4dCA9IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKDEpOw0KPiA+PiArCXN5bmNv YmotPnRpbWVsaW5lID0gMDsNCj4gPj4gKwlzeW5jb2JqLT5zaWduYWxfcG9pbnQgPSAwOw0KPiA+ PiArCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnN5bmNvYmotPndxKTsNCj4gPj4gKw0KPiA+PiArCUlO SVRfTElTVF9IRUFEKCZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCk7DQo+ID4+ICsJc3Bpbl91bmxv Y2soJnN5bmNvYmotPmxvY2spOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtzdGF0aWMgdm9pZCBk cm1fc3luY29ial9maW5pKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikgew0KPiA+PiArCXN0 cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9IE5VTEwsICp0bXA7DQo+ID4+ ICsNCj4gPj4gKwlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOw0KPiA+PiArCWxpc3RfZm9yX2Vh Y2hfZW50cnlfc2FmZShzaWduYWxfcHQsIHRtcCwNCj4gPj4gKwkJCQkgJnN5bmNvYmotPnNpZ25h bF9wdF9saXN0LCBsaXN0KSB7DQo+ID4+ICsJCWxpc3RfZGVsKCZzaWduYWxfcHQtPmxpc3QpOw0K PiA+PiArCQlkbWFfZmVuY2VfcHV0KCZzaWduYWxfcHQtPmJhc2UtPmJhc2UpOw0KPiA+PiArCQlr ZnJlZShzaWduYWxfcHQpOw0KPiA+PiArCX0NCj4gPj4gKwlzcGluX3VubG9jaygmc3luY29iai0+ bG9jayk7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyBzdHJ1Y3QgZG1hX2ZlbmNlDQo+ ID4+ICsqZHJtX3N5bmNvYmpfZmluZF9zaWduYWxfcHRfZm9yX3BvaW50KHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwNCj4gPj4gKwkJCQkgICAgICB1aW50NjRfdCBwb2ludCkNCj4gPj4gK3sN Cj4gPj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICpzaWduYWxfcHQ7DQo+ID4+ICsN Cj4gPj4gKwlpZiAoKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkg JiYNCj4gPj4gKwkgICAgKHBvaW50IDw9IHN5bmNvYmotPnRpbWVsaW5lKSkgew0KPiA+PiArCQlz dHJ1Y3QgZHJtX3N5bmNvYmpfc3R1Yl9mZW5jZSAqZmVuY2UgPQ0KPiA+PiArCQkJa3phbGxvYyhz aXplb2Yoc3RydWN0IGRybV9zeW5jb2JqX3N0dWJfZmVuY2UpLA0KPiA+PiArCQkJCUdGUF9LRVJO RUwpOw0KPiA+PiArDQo+ID4+ICsJCWlmICghZmVuY2UpDQo+ID4+ICsJCQlyZXR1cm4gTlVMTDsN Cj4gPj4gKwkJc3Bpbl9sb2NrX2luaXQoJmZlbmNlLT5sb2NrKTsNCj4gPj4gKwkJZG1hX2ZlbmNl X2luaXQoJmZlbmNlLT5iYXNlLA0KPiA+PiArCQkJICAgICAgICZkcm1fc3luY29ial9zdHViX2Zl bmNlX29wcywNCj4gPj4gKwkJCSAgICAgICAmZmVuY2UtPmxvY2ssDQo+ID4+ICsJCQkgICAgICAg c3luY29iai0+dGltZWxpbmVfY29udGV4dCwNCj4gPj4gKwkJCSAgICAgICBwb2ludCk7DQo+ID4+ ICsNCj4gPj4gKwkJZG1hX2ZlbmNlX3NpZ25hbCgmZmVuY2UtPmJhc2UpOw0KPiA+PiArCQlyZXR1 cm4gJmZlbmNlLT5iYXNlOw0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCWxpc3RfZm9yX2VhY2hf ZW50cnkoc2lnbmFsX3B0LCAmc3luY29iai0+c2lnbmFsX3B0X2xpc3QsIGxpc3QpIHsNCj4gPj4g KwkJaWYgKHBvaW50ID4gc2lnbmFsX3B0LT52YWx1ZSkNCj4gPj4gKwkJCWNvbnRpbnVlOw0KPiA+ PiArCQlpZiAoKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9JTkRJVklEVUFMKSAm Jg0KPiA+PiArCQkgICAgKHBvaW50ICE9IHNpZ25hbF9wdC0+dmFsdWUpKQ0KPiA+PiArCQkJY29u dGludWU7DQo+ID4+ICsJCXJldHVybiBkbWFfZmVuY2VfZ2V0KCZzaWduYWxfcHQtPmJhc2UtPmJh c2UpOw0KPiA+PiArCX0NCj4gPj4gKwlyZXR1cm4gTlVMTDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+ PiArc3RhdGljIGludCBkcm1fc3luY29ial9jcmVhdGVfc2lnbmFsX3B0KHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwNCj4gPj4gKwkJCQkJc3RydWN0IGRtYV9mZW5jZSAqZmVuY2UsDQo+ID4+ ICsJCQkJCXU2NCBwb2ludCkNCj4gPj4gK3sNCj4gPj4gKwlzdHJ1Y3QgZHJtX3N5bmNvYmpfc2ln bmFsX3B0ICpzaWduYWxfcHQgPQ0KPiA+PiArCQlremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX3N5 bmNvYmpfc2lnbmFsX3B0KSwgR0ZQX0tFUk5FTCk7DQo+ID4+ICsJc3RydWN0IGRybV9zeW5jb2Jq X3NpZ25hbF9wdCAqdGFpbF9wdDsNCj4gPj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2VzOw0K PiA+PiArCWludCBudW1fZmVuY2VzID0gMDsNCj4gPj4gKwlpbnQgcmV0ID0gMCwgaTsNCj4gPj4g Kw0KPiA+PiArCWlmICghc2lnbmFsX3B0KQ0KPiA+PiArCQlyZXR1cm4gLUVOT01FTTsNCj4gPj4g KwlpZiAoIWZlbmNlKQ0KPiA+PiArCQlnb3RvIG91dDsNCj4gPj4gKw0KPiA+PiArCWZlbmNlcyA9 IGttYWxsb2NfYXJyYXkoc2l6ZW9mKHZvaWQgKiksIDIsIEdGUF9LRVJORUwpOw0KPiA+PiArCWlm ICghZmVuY2VzKSB7DQo+ID4+ICsJCXJldCA9IC1FTk9NRU07DQo+ID4+ICsJCWdvdG8gb3V0Ow0K PiA+PiArCX0NCj4gPj4gKwlmZW5jZXNbbnVtX2ZlbmNlcysrXSA9IGRtYV9mZW5jZV9nZXQoZmVu Y2UpOw0KPiA+PiArCS8qIHRpbWVsaW5lIHN5bmNvYmogbXVzdCB0YWtlIHRoaXMgZGVwZW5kZW5j eSAqLw0KPiA+PiArCWlmIChzeW5jb2JqLT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJ TkUpIHsNCj4gPj4gKwkJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gKwkJaWYgKCFs aXN0X2VtcHR5KCZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCkpIHsNCj4gPj4gKwkJCXRhaWxfcHQg PSBsaXN0X2xhc3RfZW50cnkoJnN5bmNvYmotPnNpZ25hbF9wdF9saXN0LA0KPiA+PiArCQkJCQkJ ICBzdHJ1Y3QNCj4gPj4gZHJtX3N5bmNvYmpfc2lnbmFsX3B0LCBsaXN0KTsNCj4gPj4gKwkJCWZl bmNlc1tudW1fZmVuY2VzKytdID0gZG1hX2ZlbmNlX2dldCgmdGFpbF9wdC0NCj4gPj4+IGJhc2Ut PmJhc2UpOw0KPiA+PiArCQl9DQo+ID4+ICsJCXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsN Cj4gPj4gKwl9DQo+ID4+ICsJc2lnbmFsX3B0LT5iYXNlID0gZG1hX2ZlbmNlX2FycmF5X2NyZWF0 ZShudW1fZmVuY2VzLCBmZW5jZXMsDQo+ID4+ICsJCQkJCQkgc3luY29iai0+dGltZWxpbmVfY29u dGV4dCwNCj4gPj4gKwkJCQkJCSBwb2ludCwgZmFsc2UpOw0KPiA+PiArCWlmICghc2lnbmFsX3B0 LT5iYXNlKSB7DQo+ID4+ICsJCXJldCA9IC1FTk9NRU07DQo+ID4+ICsJCWdvdG8gZmFpbDsNCj4g Pj4gKwl9DQo+ID4+ICsNCj4gPj4gKwlzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOw0KPiA+PiAr CWlmIChzeW5jb2JqLT5zaWduYWxfcG9pbnQgPj0gcG9pbnQpIHsNCj4gPj4gKwkJRFJNX1dBUk4o IkEgbGF0ZXIgc2lnbmFsIGlzIHJlYWR5ISIpOw0KPiA+PiArCQlzcGluX3VubG9jaygmc3luY29i ai0+bG9jayk7DQo+ID4+ICsJCWdvdG8gZXhpc3Q7DQo+ID4+ICsJfQ0KPiA+PiArCXNpZ25hbF9w dC0+dmFsdWUgPSBwb2ludDsNCj4gPj4gKwlsaXN0X2FkZF90YWlsKCZzaWduYWxfcHQtPmxpc3Qs ICZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCk7DQo+ID4+ICsJc3luY29iai0+c2lnbmFsX3BvaW50 ID0gcG9pbnQ7DQo+ID4+ICsJc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOw0KPiA+PiArCXdh a2VfdXBfYWxsKCZzeW5jb2JqLT53cSk7DQo+ID4+ICsNCj4gPj4gKwlyZXR1cm4gMDsNCj4gPj4g K2V4aXN0Og0KPiA+PiArCWRtYV9mZW5jZV9wdXQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSk7DQo+ ID4+ICtmYWlsOg0KPiA+PiArCWZvciAoaSA9IDA7IGkgPCBudW1fZmVuY2VzOyBpKyspDQo+ID4+ ICsJCWRtYV9mZW5jZV9wdXQoZmVuY2VzW2ldKTsNCj4gPj4gKwlrZnJlZShmZW5jZXMpOw0KPiA+ PiArb3V0Og0KPiA+PiArCWtmcmVlKHNpZ25hbF9wdCk7DQo+ID4+ICsJcmV0dXJuIHJldDsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHZvaWQgZHJtX3N5bmNvYmpfZ2FyYmFnZV9jb2xs ZWN0aW9uKHN0cnVjdCBkcm1fc3luY29iag0KPiA+PiArKnN5bmNvYmopIHsNCj4gPj4gKwlzdHJ1 Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICpzaWduYWxfcHQsICp0bXAsICp0YWlsX3B0Ow0KPiA+ PiArDQo+ID4+ICsJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gKwl0YWlsX3B0ID0g bGlzdF9sYXN0X2VudHJ5KCZzeW5jb2JqLT5zaWduYWxfcHRfbGlzdCwNCj4gPj4gKwkJCQkgIHN0 cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQsDQo+ID4+ICsJCQkJICBsaXN0KTsNCj4gPj4gKwls aXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc2lnbmFsX3B0LCB0bXAsDQo+ID4+ICsJCQkJICZzeW5j b2JqLT5zaWduYWxfcHRfbGlzdCwgbGlzdCkgew0KPiA+PiArCQlpZiAoc3luY29iai0+dHlwZSA9 PSBEUk1fU1lOQ09CSl9UWVBFX0lORElWSURVQUwgJiYNCj4gPj4gKwkJICAgIHNpZ25hbF9wdCA9 PSB0YWlsX3B0KQ0KPiA+PiArCQkJY29udGludWU7DQo+ID4+ICsJCWlmIChkbWFfZmVuY2VfaXNf c2lnbmFsZWQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSkpIHsNCj4gPj4gKwkJCXN5bmNvYmotPnRp bWVsaW5lID0gc2lnbmFsX3B0LT52YWx1ZTsNCj4gPj4gKwkJCWxpc3RfZGVsKCZzaWduYWxfcHQt Pmxpc3QpOw0KPiA+PiArCQkJZG1hX2ZlbmNlX3B1dCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNlKTsN Cj4gPj4gKwkJCWtmcmVlKHNpZ25hbF9wdCk7DQo+ID4+ICsJCX0gZWxzZSB7DQo+ID4+ICsJCQkv KnNpZ25hbF9wdCBpcyBpbiBvcmRlciBpbiBsaXN0LCBmcm9tIHNtYWxsIHRvIGJpZywgc28NCj4g Pj4gKwkJCSAqIHRoZSBsYXRlciBtdXN0IG5vdCBiZSBzaWduYWwgZWl0aGVyICovDQo+ID4+ICsJ CQlicmVhazsNCj4gPj4gKwkJfQ0KPiA+PiArCX0NCj4gPj4gKw0KPiA+PiArCXNwaW5fdW5sb2Nr KCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gK30NCj4gPj4gICAvKioNCj4gPj4gICAgKiBkcm1fc3lu Y29ial9yZXBsYWNlX2ZlbmNlIC0gcmVwbGFjZSBmZW5jZSBpbiBhIHN5bmMgb2JqZWN0Lg0KPiA+ PiAgICAqIEBzeW5jb2JqOiBTeW5jIG9iamVjdCB0byByZXBsYWNlIGZlbmNlIGluIEBAIC0xNzYs MjggKzMzOSwyOSBAQA0KPiA+PiB2b2lkIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqLA0KPiA+PiAgIAkJCSAgICAgICB1NjQgcG9pbnQsDQo+ID4+ ICAgCQkJICAgICAgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlKQ0KPiA+PiAgIHsNCj4gPj4gLQlz dHJ1Y3QgZG1hX2ZlbmNlICpvbGRfZmVuY2U7DQo+ID4+IC0Jc3RydWN0IGRybV9zeW5jb2JqX2Ni ICpjdXIsICp0bXA7DQo+ID4+IC0NCj4gPj4gLQlpZiAoZmVuY2UpDQo+ID4+IC0JCWRtYV9mZW5j ZV9nZXQoZmVuY2UpOw0KPiA+PiAtDQo+ID4+IC0Jc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2NrKTsN Cj4gPj4gLQ0KPiA+PiAtCW9sZF9mZW5jZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3lu Y29iai0+ZmVuY2UsDQo+ID4+IC0JCQkJCSAgICAgIGxvY2tkZXBfaXNfaGVsZCgmc3luY29iai0+ bG9jaykpOw0KPiA+PiAtCXJjdV9hc3NpZ25fcG9pbnRlcihzeW5jb2JqLT5mZW5jZSwgZmVuY2Up Ow0KPiA+PiArCXU2NCBwdF92YWx1ZSA9IHBvaW50Ow0KPiA+PiArDQo+ID4+ICsJZHJtX3N5bmNv YmpfZ2FyYmFnZV9jb2xsZWN0aW9uKHN5bmNvYmopOw0KPiA+PiArCWlmIChzeW5jb2JqLT50eXBl ID09IERSTV9TWU5DT0JKX1RZUEVfSU5ESVZJRFVBTCkgew0KPiA+PiArCQlpZiAoIWZlbmNlKSB7 DQo+ID4+ICsJCQlkcm1fc3luY29ial9maW5pKHN5bmNvYmopOw0KPiA+PiArCQkJZHJtX3N5bmNv YmpfaW5pdChzeW5jb2JqKTsNCj4gPj4gKwkJCXJldHVybjsNCj4gPj4gKwkJfQ0KPiA+PiArCQlw dF92YWx1ZSA9IHN5bmNvYmotPnNpZ25hbF9wb2ludCArDQo+ID4+ICsJCQlEUk1fU1lOQ09CSl9J TkRJVklEVUFMX1BPSU5UOw0KPiA+PiArCX0NCj4gPj4gKwlkcm1fc3luY29ial9jcmVhdGVfc2ln bmFsX3B0KHN5bmNvYmosIGZlbmNlLCBwdF92YWx1ZSk7DQo+ID4+ICsJaWYgKGZlbmNlKSB7DQo+ ID4+ICsJCXN0cnVjdCBkcm1fc3luY29ial9jYiAqY3VyLCAqdG1wOw0KPiA+Pg0KPiA+PiAtCWlm IChmZW5jZSAhPSBvbGRfZmVuY2UpIHsNCj4gPj4gKwkJc3Bpbl9sb2NrKCZzeW5jb2JqLT5sb2Nr KTsNCj4gPj4gICAJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjdXIsIHRtcCwgJnN5bmNvYmot PmNiX2xpc3QsIG5vZGUpDQo+IHsNCj4gPj4gICAJCQlsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUp Ow0KPiA+PiAgIAkJCWN1ci0+ZnVuYyhzeW5jb2JqLCBjdXIpOw0KPiA+PiAgIAkJfQ0KPiA+PiAr CQlzcGluX3VubG9jaygmc3luY29iai0+bG9jayk7DQo+ID4+ICAgCX0NCj4gPj4gLQ0KPiA+PiAt CXNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsNCj4gPj4gLQ0KPiA+PiAtCWRtYV9mZW5jZV9w dXQob2xkX2ZlbmNlKTsNCj4gPj4gICB9DQo+ID4+ICAgRVhQT1JUX1NZTUJPTChkcm1fc3luY29i al9yZXBsYWNlX2ZlbmNlKTsNCj4gPj4NCj4gPj4gQEAgLTIyMCw2ICszODQsNTIgQEAgc3RhdGlj IGludCBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5kbGUoc3RydWN0DQo+ID4+IGRybV9zeW5j b2JqICpzeW5jb2JqKQ0KPiA+PiAgIAlyZXR1cm4gMDsNCj4gPj4gICB9DQo+ID4+DQo+ID4+ICsj ZGVmaW5lIFdBSVRfRk9SX1NVQk1JVF9NU0VDUyAxMDAwMA0KPiA+PiArDQo+ID4+ICtzdGF0aWMg c3RydWN0IGRtYV9mZW5jZSAqDQo+ID4+ICtkcm1fc3luY29ial9wb2ludF9nZXQoc3RydWN0IGRy bV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsIHU2NA0KPiA+PiArZmxhZ3MpIHsNCj4gPj4g KwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsNCj4gPj4gKwlpbnQgcmV0ID0gMDsNCj4gPj4gKw0K PiA+PiArCWlmIChmbGFncyAmIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlU KSB7DQo+ID4+ICsJCXJldCA9IHdhaXRfZXZlbnRfdGltZW91dChzeW5jb2JqLT53cSwNCj4gPj4g KwkJCQkJIHBvaW50IDw9IHN5bmNvYmotPnNpZ25hbF9wb2ludCwNCj4gPj4gKw0KPiA+PiBtc2Vj c190b19qaWZmaWVzKFdBSVRfRk9SX1NVQk1JVF9NU0VDUykpOw0KPiA+PiArCQlpZiAocmV0IDw9 IDApDQo+ID4+ICsJCQlyZXR1cm4gTlVMTDsNCj4gPj4gKwl9DQo+ID4+ICsJc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsNCj4gPj4gKwlmZW5jZSA9IGRybV9zeW5jb2JqX2ZpbmRfc2lnbmFsX3B0 X2Zvcl9wb2ludChzeW5jb2JqLCBwb2ludCk7DQo+ID4+ICsJc3Bpbl91bmxvY2soJnN5bmNvYmot PmxvY2spOw0KPiA+PiArCXJldHVybiBmZW5jZTsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAraW50 IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2 NCBwb2ludCwNCj4gPj4gKwkJCSAgICAgdTY0IGZsYWdzLCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVu Y2UpIHsNCj4gPj4gKwl1NjQgcHRfdmFsdWUgPSBwb2ludDsNCj4gPj4gKwlpbnQgcmV0ID0gMDsN Cj4gPj4gKw0KPiA+PiArCWlmICghc3luY29iaikNCj4gPj4gKwkJcmV0dXJuIC1FTk9FTlQ7DQo+ ID4+ICsNCj4gPj4gKwlkcm1fc3luY29ial9nYXJiYWdlX2NvbGxlY3Rpb24oc3luY29iaik7DQo+ ID4+ICsJaWYgKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9JTkRJVklEVUFMKSB7 DQo+ID4+ICsJCS8qSU5ESVZJRFVBTCBzeW5jb2JqIGFsd2F5cyB3YWl0IG9uIGxhc3QgcHQgKi8N Cj4gPj4gKwkJcHRfdmFsdWUgPSBzeW5jb2JqLT5zaWduYWxfcG9pbnQ7DQo+ID4+ICsNCj4gPj4g KwkJaWYgKHB0X3ZhbHVlID09IDApDQo+ID4+ICsJCQlwdF92YWx1ZSArPSBEUk1fU1lOQ09CSl9J TkRJVklEVUFMX1BPSU5UOw0KPiA+PiArCX0NCj4gPj4gKwkqZmVuY2UgPSBkcm1fc3luY29ial9w b2ludF9nZXQoc3luY29iaiwgcHRfdmFsdWUsIGZsYWdzKTsNCj4gPj4gKwlpZiAoISpmZW5jZSkg ew0KPiA+PiArCQlyZXQgPSAtRUlOVkFMOw0KPiA+PiArCX0NCj4gPj4gKwlyZXR1cm4gcmV0Ow0K PiA+PiArfQ0KPiA+PiArRVhQT1JUX1NZTUJPTChkcm1fc3luY29ial9zZWFyY2hfZmVuY2UpOw0K PiA+PiArDQo+ID4+ICAgLyoqDQo+ID4+ICAgICogZHJtX3N5bmNvYmpfZmluZF9mZW5jZSAtIGxv b2t1cCBhbmQgcmVmZXJlbmNlIHRoZSBmZW5jZSBpbiBhDQo+ID4+IHN5bmMgb2JqZWN0DQo+ID4+ ICAgICogQGZpbGVfcHJpdmF0ZTogZHJtIGZpbGUgcHJpdmF0ZSBwb2ludGVyIEBAIC0yMjgsNyAr NDM4LDcgQEANCj4gPj4gc3RhdGljIGludCBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5kbGUo c3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqKQ0KPiA+PiAgICAqIEBmZW5jZTogb3V0IHBhcmFt ZXRlciBmb3IgdGhlIGZlbmNlDQo+ID4+ICAgICoNCj4gPj4gICAgKiBUaGlzIGlzIGp1c3QgYSBj b252ZW5pZW5jZSBmdW5jdGlvbiB0aGF0IGNvbWJpbmVzDQo+ID4+IGRybV9zeW5jb2JqX2ZpbmQo KSBhbmQNCj4gPj4gLSAqIGRybV9zeW5jb2JqX2ZlbmNlX2dldCgpLg0KPiA+PiArICogZHJtX3N5 bmNvYmpfbG9va3VwX2ZlbmNlKCkuDQo+ID4+ICAgICoNCj4gPj4gICAgKiBSZXR1cm5zIDAgb24g c3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIHZhbHVlIG9uIGZhaWx1cmUuIE9uDQo+ID4+IHN1 Y2Nlc3MgQGZlbmNlDQo+ID4+ICAgICogY29udGFpbnMgYSByZWZlcmVuY2UgdG8gdGhlIGZlbmNl LCB3aGljaCBtdXN0IGJlIHJlbGVhc2VkIGJ5DQo+ID4+IGNhbGxpbmcgQEAgLQ0KPiA+PiAyMzks MTUgKzQ0OSw5IEBAIGludCBkcm1fc3luY29ial9maW5kX2ZlbmNlKHN0cnVjdCBkcm1fZmlsZQ0K PiAqZmlsZV9wcml2YXRlLA0KPiA+PiAgIAkJCSAgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSkN Cj4gPj4gICB7DQo+ID4+ICAgCXN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiA9IGRybV9zeW5j b2JqX2ZpbmQoZmlsZV9wcml2YXRlLA0KPiA+PiBoYW5kbGUpOw0KPiA+PiAtCWludCByZXQgPSAw Ow0KPiA+PiAtDQo+ID4+IC0JaWYgKCFzeW5jb2JqKQ0KPiA+PiAtCQlyZXR1cm4gLUVOT0VOVDsN Cj4gPj4gKwlpbnQgcmV0Ow0KPiA+Pg0KPiA+PiAtCSpmZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNl X2dldChzeW5jb2JqKTsNCj4gPj4gLQlpZiAoISpmZW5jZSkgew0KPiA+PiAtCQlyZXQgPSAtRUlO VkFMOw0KPiA+PiAtCX0NCj4gPj4gKwlyZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3lu Y29iaiwgcG9pbnQsIGZsYWdzLCBmZW5jZSk7DQo+ID4+ICAgCWRybV9zeW5jb2JqX3B1dChzeW5j b2JqKTsNCj4gPj4gICAJcmV0dXJuIHJldDsNCj4gPj4gICB9DQo+ID4+IEBAIC0yNjQsNyArNDY4 LDcgQEAgdm9pZCBkcm1fc3luY29ial9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQ0KPiA+PiAgIAlz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmogPSBjb250YWluZXJfb2Yoa3JlZiwNCj4gPj4gICAJ CQkJCQkgICBzdHJ1Y3QgZHJtX3N5bmNvYmosDQo+ID4+ICAgCQkJCQkJICAgcmVmY291bnQpOw0K PiA+PiAtCWRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3luY29iaiwgMCwgTlVMTCk7DQo+ID4+ ICsJZHJtX3N5bmNvYmpfZmluaShzeW5jb2JqKTsNCj4gPj4gICAJa2ZyZWUoc3luY29iaik7DQo+ ID4+ICAgfQ0KPiA+PiAgIEVYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfZnJlZSk7DQo+ID4+IEBA IC0yOTQsNiArNDk4LDExIEBAIGludCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRybV9zeW5j b2JqDQo+ID4+ICoqb3V0X3N5bmNvYmosIHVpbnQzMl90IGZsYWdzLA0KPiA+PiAgIAlrcmVmX2lu aXQoJnN5bmNvYmotPnJlZmNvdW50KTsNCj4gPj4gICAJSU5JVF9MSVNUX0hFQUQoJnN5bmNvYmot PmNiX2xpc3QpOw0KPiA+PiAgIAlzcGluX2xvY2tfaW5pdCgmc3luY29iai0+bG9jayk7DQo+ID4+ ICsJaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUpDQo+ID4+ICsJ CXN5bmNvYmotPnR5cGUgPSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FOw0KPiA+PiArCWVsc2UN Cj4gPj4gKwkJc3luY29iai0+dHlwZSA9IERSTV9TWU5DT0JKX1RZUEVfSU5ESVZJRFVBTDsNCj4g Pj4gKwlkcm1fc3luY29ial9pbml0KHN5bmNvYmopOw0KPiA+Pg0KPiA+PiAgIAlpZiAoZmxhZ3Mg JiBEUk1fU1lOQ09CSl9DUkVBVEVfU0lHTkFMRUQpIHsNCj4gPj4gICAJCXJldCA9IGRybV9zeW5j b2JqX2Fzc2lnbl9udWxsX2hhbmRsZShzeW5jb2JqKTsNCj4gPj4gQEAgLTU3Niw3ICs3ODUsOCBA QCBkcm1fc3luY29ial9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwNCj4gPj4g dm9pZCAqZGF0YSwNCj4gPj4gICAJCXJldHVybiAtRU5PREVWOw0KPiA+Pg0KPiA+PiAgIAkvKiBu byB2YWxpZCBmbGFncyB5ZXQgKi8NCj4gPj4gLQlpZiAoYXJncy0+ZmxhZ3MgJiB+RFJNX1NZTkNP QkpfQ1JFQVRFX1NJR05BTEVEKQ0KPiA+PiArCWlmIChhcmdzLT5mbGFncyAmIH4oRFJNX1NZTkNP QkpfQ1JFQVRFX1NJR05BTEVEIHwNCj4gPj4gKwkJCSAgICBEUk1fU1lOQ09CSl9DUkVBVEVfVFlQ RV9USU1FTElORSkpDQo+ID4+ICAgCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4NCj4gPj4gICAJcmV0 dXJuIGRybV9zeW5jb2JqX2NyZWF0ZV9hc19oYW5kbGUoZmlsZV9wcml2YXRlLA0KPiA+PiBAQCAt NjY5LDkgKzg3OSw4IEBAIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2FpdF9zeW5jb2JqX2Z1bmMoc3Ry dWN0DQo+ID4+IGRybV9zeW5jb2JqICpzeW5jb2JqLA0KPiA+PiAgIAlzdHJ1Y3Qgc3luY29ial93 YWl0X2VudHJ5ICp3YWl0ID0NCj4gPj4gICAJCWNvbnRhaW5lcl9vZihjYiwgc3RydWN0IHN5bmNv Ympfd2FpdF9lbnRyeSwgc3luY29ial9jYik7DQo+ID4+DQo+ID4+IC0JLyogVGhpcyBoYXBwZW5z IGluc2lkZSB0aGUgc3luY29iaiBsb2NrICovDQo+ID4+IC0Jd2FpdC0+ZmVuY2UgPSBkbWFfZmVu Y2VfZ2V0KHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0NCj4gPj4+IGZlbmNlLA0K PiA+PiAtDQo+ID4+IGxvY2tkZXBfaXNfaGVsZCgmc3luY29iai0+bG9jaykpKTsNCj4gPj4gKwlk cm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3luY29iaiwgMCwgMCwgJndhaXQtPmZlbmNlKTsNCj4g Pj4gKw0KPiA+PiAgIAl3YWtlX3VwX3Byb2Nlc3Mod2FpdC0+dGFzayk7DQo+ID4+ICAgfQ0KPiA+ Pg0KPiA+PiBAQCAtNjk4LDcgKzkwNyw4IEBAIHN0YXRpYyBzaWduZWQgbG9uZw0KPiA+PiBkcm1f c3luY29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMs DQo+ID4+ICAgCXNpZ25hbGVkX2NvdW50ID0gMDsNCj4gPj4gICAJZm9yIChpID0gMDsgaSA8IGNv dW50OyArK2kpIHsNCj4gPj4gICAJCWVudHJpZXNbaV0udGFzayA9IGN1cnJlbnQ7DQo+ID4+IC0J CWVudHJpZXNbaV0uZmVuY2UgPSBkcm1fc3luY29ial9mZW5jZV9nZXQoc3luY29ianNbaV0pOw0K PiA+PiArCQlyZXQgPSBkcm1fc3luY29ial9zZWFyY2hfZmVuY2Uoc3luY29ianNbaV0sIDAsIDAs DQo+ID4+ICsJCQkJCSAgICAgICAmZW50cmllc1tpXS5mZW5jZSk7DQo+ID4+ICAgCQlpZiAoIWVu dHJpZXNbaV0uZmVuY2UpIHsNCj4gPj4gICAJCQlpZiAoZmxhZ3MgJg0KPiA+PiBEUk1fU1lOQ09C Sl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgew0KPiA+PiAgIAkJCQljb250aW51ZTsNCj4g Pj4gQEAgLTk3MCwxMiArMTE4MCwxMyBAQCBkcm1fc3luY29ial9yZXNldF9pb2N0bChzdHJ1Y3Qg ZHJtX2RldmljZQ0KPiA+PiAqZGV2LCB2b2lkICpkYXRhLA0KPiA+PiAgIAlpZiAocmV0IDwgMCkN Cj4gPj4gICAJCXJldHVybiByZXQ7DQo+ID4+DQo+ID4+IC0JZm9yIChpID0gMDsgaSA8IGFyZ3Mt PmNvdW50X2hhbmRsZXM7IGkrKykNCj4gPj4gLQkJZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShz eW5jb2Jqc1tpXSwgMCwgTlVMTCk7DQo+ID4+IC0NCj4gPj4gKwlmb3IgKGkgPSAwOyBpIDwgYXJn cy0+Y291bnRfaGFuZGxlczsgaSsrKSB7DQo+ID4+ICsJCWRybV9zeW5jb2JqX2Zpbmkoc3luY29i anNbaV0pOw0KPiA+PiArCQlkcm1fc3luY29ial9pbml0KHN5bmNvYmpzW2ldKTsNCj4gPj4gKwl9 DQo+ID4+ICAgCWRybV9zeW5jb2JqX2FycmF5X2ZyZWUoc3luY29ianMsIGFyZ3MtPmNvdW50X2hh bmRsZXMpOw0KPiA+Pg0KPiA+PiAtCXJldHVybiAwOw0KPiA+PiArCXJldHVybiByZXQ7DQo+ID4+ ICAgfQ0KPiA+Pg0KPiA+PiAgIGludA0KPiA+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jDQo+ID4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fZXhlY2J1ZmZlci5jDQo+ID4+IGluZGV4IDBhOGQyZDY0ZjM4MC4uOGE4ZDIxYjI0 MTE5IDEwMDY0NA0KPiA+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVj YnVmZmVyLmMNCj4gPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1 ZmZlci5jDQo+ID4+IEBAIC0yMTM3LDcgKzIxMzcsNyBAQCBhd2FpdF9mZW5jZV9hcnJheShzdHJ1 Y3QgaTkxNV9leGVjYnVmZmVyICplYiwNCj4gPj4gICAJCWlmICghKGZsYWdzICYgSTkxNV9FWEVD X0ZFTkNFX1dBSVQpKQ0KPiA+PiAgIAkJCWNvbnRpbnVlOw0KPiA+Pg0KPiA+PiAtCQlmZW5jZSA9 IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2JqKTsNCj4gPj4gKwkJZHJtX3N5bmNvYmpfc2Vh cmNoX2ZlbmNlKHN5bmNvYmosIDAsIDAsICZmZW5jZSk7DQo+ID4+ICAgCQlpZiAoIWZlbmNlKQ0K PiA+PiAgIAkJCXJldHVybiAtRUlOVkFMOw0KPiA+Pg0KPiA+PiBkaWZmIC0tZ2l0IGEvaW5jbHVk ZS9kcm0vZHJtX3N5bmNvYmouaCBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgNCj4gPj4gaW5k ZXgNCj4gPj4gMmVkYTQ0ZGVmNjM5Li5hY2YxYzNhNDZkOTUgMTAwNjQ0DQo+ID4+IC0tLSBhL2lu Y2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgNCj4gPj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX3N5bmNv YmouaA0KPiA+PiBAQCAtMzAsNiArMzAsMTEgQEANCj4gPj4NCj4gPj4gICBzdHJ1Y3QgZHJtX3N5 bmNvYmpfY2I7DQo+ID4+DQo+ID4+ICtlbnVtIGRybV9zeW5jb2JqX3R5cGUgew0KPiA+PiArCURS TV9TWU5DT0JKX1RZUEVfSU5ESVZJRFVBTCwNCj4gPj4gKwlEUk1fU1lOQ09CSl9UWVBFX1RJTUVM SU5FDQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICAgLyoqDQo+ID4+ICAgICogc3RydWN0IGRybV9z eW5jb2JqIC0gc3luYyBvYmplY3QuDQo+ID4+ICAgICoNCj4gPj4gQEAgLTQxLDE5ICs0NiwzNiBA QCBzdHJ1Y3QgZHJtX3N5bmNvYmogew0KPiA+PiAgIAkgKi8NCj4gPj4gICAJc3RydWN0IGtyZWYg cmVmY291bnQ7DQo+ID4+ICAgCS8qKg0KPiA+PiAtCSAqIEBmZW5jZToNCj4gPj4gLQkgKiBOVUxM IG9yIGEgcG9pbnRlciB0byB0aGUgZmVuY2UgYm91bmQgdG8gdGhpcyBvYmplY3QuDQo+ID4+IC0J ICoNCj4gPj4gLQkgKiBUaGlzIGZpZWxkIHNob3VsZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gVXNl DQo+ID4+IGRybV9zeW5jb2JqX2ZlbmNlX2dldCgpDQo+ID4+IC0JICogYW5kIGRybV9zeW5jb2Jq X3JlcGxhY2VfZmVuY2UoKSBpbnN0ZWFkLg0KPiA+PiArCSAqIEB0eXBlOiBpbmRpY2F0ZSBzeW5j b2JqIHR5cGUNCj4gPj4gKwkgKi8NCj4gPj4gKwllbnVtIGRybV9zeW5jb2JqX3R5cGUgdHlwZTsN Cj4gPj4gKwkvKioNCj4gPj4gKwkgKiBAd3E6IHdhaXQgc2lnbmFsIG9wZXJhdGlvbiB3b3JrIHF1 ZXVlDQo+ID4+ICsJICovDQo+ID4+ICsJd2FpdF9xdWV1ZV9oZWFkX3QJd3E7DQo+ID4+ICsJLyoq DQo+ID4+ICsJICogQHRpbWVsaW5lX2NvbnRleHQ6IGZlbmNlIGNvbnRleHQgdXNlZCBieSB0aW1l bGluZQ0KPiA+PiAgIAkgKi8NCj4gPj4gLQlzdHJ1Y3QgZG1hX2ZlbmNlIF9fcmN1ICpmZW5jZTsN Cj4gPj4gKwl1NjQgdGltZWxpbmVfY29udGV4dDsNCj4gPj4gICAJLyoqDQo+ID4+IC0JICogQGNi X2xpc3Q6IExpc3Qgb2YgY2FsbGJhY2tzIHRvIGNhbGwgd2hlbiB0aGUgJmZlbmNlIGdldHMgcmVw bGFjZWQuDQo+ID4+ICsJICogQHRpbWVsaW5lOiBzeW5jb2JqIHRpbWVsaW5lIHZhbHVlLCB3aGlj aCBpbmRpY2F0ZXMgcG9pbnQgaXMgc2lnbmFsZWQuDQo+ID4+ICAgCSAqLw0KPiA+PiArCXU2NCB0 aW1lbGluZTsNCj4gPj4gKwkvKioNCj4gPj4gKwkgKiBAc2lnbmFsX3BvaW50OiB3aGljaCBpbmRp Y2F0ZXMgdGhlIGxhdGVzdCBzaWduYWxlciBwb2ludC4NCj4gPj4gKwkgKi8NCj4gPj4gKwl1NjQg c2lnbmFsX3BvaW50Ow0KPiA+PiArCS8qKg0KPiA+PiArCSAqIEBzaWduYWxfcHRfbGlzdDogc2ln bmFsZXIgcG9pbnQgbGlzdC4NCj4gPj4gKwkgKi8NCj4gPj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIHNp Z25hbF9wdF9saXN0Ow0KPiA+PiArDQo+ID4+ICsJLyoqDQo+ID4+ICsgICAgICAgICAqIEBjYl9s aXN0OiBMaXN0IG9mIGNhbGxiYWNrcyB0byBjYWxsIHdoZW4gdGhlICZmZW5jZSBnZXRzIHJlcGxh Y2VkLg0KPiA+PiArICAgICAgICAgKi8NCj4gPj4gICAJc3RydWN0IGxpc3RfaGVhZCBjYl9saXN0 Ow0KPiA+PiAgIAkvKioNCj4gPj4gLQkgKiBAbG9jazogUHJvdGVjdHMgJmNiX2xpc3QgYW5kIHdy aXRlLWxvY2tzICZmZW5jZS4NCj4gPj4gKwkgKiBAbG9jazogUHJvdGVjdHMgc3luY29iaiBsaXN0 IGFuZCB3cml0ZS1sb2NrcyAmZmVuY2UuDQo+ID4+ICAgCSAqLw0KPiA+PiAgIAlzcGlubG9ja190 IGxvY2s7DQo+ID4+ICAgCS8qKg0KPiA+PiBAQCAtNjgsNyArOTAsNyBAQCB0eXBlZGVmIHZvaWQg KCpkcm1fc3luY29ial9mdW5jX3QpKHN0cnVjdA0KPiA+PiBkcm1fc3luY29iaiAqc3luY29iaiwN Cj4gPj4gICAvKioNCj4gPj4gICAgKiBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgLSBjYWxsYmFjayBm b3IgZHJtX3N5bmNvYmpfYWRkX2NhbGxiYWNrDQo+ID4+ICAgICogQG5vZGU6IHVzZWQgYnkgZHJt X3N5bmNvYl9hZGRfY2FsbGJhY2sgdG8gYXBwZW5kIHRoaXMgc3RydWN0IHRvDQo+ID4+IC0gKgkg ICZkcm1fc3luY29iai5jYl9saXN0DQo+ID4+ICsgKiAgICAgICAmZHJtX3N5bmNvYmouY2JfbGlz dA0KPiA+PiAgICAqIEBmdW5jOiBkcm1fc3luY29ial9mdW5jX3QgdG8gY2FsbA0KPiA+PiAgICAq DQo+ID4+ICAgICogVGhpcyBzdHJ1Y3Qgd2lsbCBiZSBpbml0aWFsaXplZCBieSBkcm1fc3luY29i al9hZGRfY2FsbGJhY2ssDQo+ID4+IGFkZGl0aW9uYWwgQEANCj4gPj4gLTEwNiwyOSArMTI4LDYg QEAgZHJtX3N5bmNvYmpfcHV0KHN0cnVjdCBkcm1fc3luY29iaiAqb2JqKQ0KPiA+PiAgIAlrcmVm X3B1dCgmb2JqLT5yZWZjb3VudCwgZHJtX3N5bmNvYmpfZnJlZSk7ICB9DQo+ID4+DQo+ID4+IC0v KioNCj4gPj4gLSAqIGRybV9zeW5jb2JqX2ZlbmNlX2dldCAtIGdldCBhIHJlZmVyZW5jZSB0byBh IGZlbmNlIGluIGEgc3luYw0KPiA+PiBvYmplY3QNCj4gPj4gLSAqIEBzeW5jb2JqOiBzeW5jIG9i amVjdC4NCj4gPj4gLSAqDQo+ID4+IC0gKiBUaGlzIGFjcXVpcmVzIGFkZGl0aW9uYWwgcmVmZXJl bmNlIHRvICZkcm1fc3luY29iai5mZW5jZQ0KPiA+PiBjb250YWluZWQgaW4gQG9iaiwNCj4gPj4g LSAqIGlmIG5vdCBOVUxMLiBJdCBpcyBpbGxlZ2FsIHRvIGNhbGwgdGhpcyB3aXRob3V0IGFscmVh ZHkgaG9sZGluZyBhIHJlZmVyZW5jZS4NCj4gPj4gLSAqIE5vIGxvY2tzIHJlcXVpcmVkLg0KPiA+ PiAtICoNCj4gPj4gLSAqIFJldHVybnM6DQo+ID4+IC0gKiBFaXRoZXIgdGhlIGZlbmNlIG9mIEBv Ymogb3IgTlVMTCBpZiB0aGVyZSdzIG5vbmUuDQo+ID4+IC0gKi8NCj4gPj4gLXN0YXRpYyBpbmxp bmUgc3RydWN0IGRtYV9mZW5jZSAqDQo+ID4+IC1kcm1fc3luY29ial9mZW5jZV9nZXQoc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqKSAtew0KPiA+PiAtCXN0cnVjdCBkbWFfZmVuY2UgKmZlbmNl Ow0KPiA+PiAtDQo+ID4+IC0JcmN1X3JlYWRfbG9jaygpOw0KPiA+PiAtCWZlbmNlID0gZG1hX2Zl bmNlX2dldF9yY3Vfc2FmZSgmc3luY29iai0+ZmVuY2UpOw0KPiA+PiAtCXJjdV9yZWFkX3VubG9j aygpOw0KPiA+PiAtDQo+ID4+IC0JcmV0dXJuIGZlbmNlOw0KPiA+PiAtfQ0KPiA+PiAtDQo+ID4+ ICAgc3RydWN0IGRybV9zeW5jb2JqICpkcm1fc3luY29ial9maW5kKHN0cnVjdCBkcm1fZmlsZSAq ZmlsZV9wcml2YXRlLA0KPiA+PiAgIAkJCQkgICAgIHUzMiBoYW5kbGUpOw0KPiA+PiAgIHZvaWQg ZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2 NA0KPiA+PiBwb2ludCwgQEAgLTE0Miw1ICsxNDEsNyBAQCBpbnQgZHJtX3N5bmNvYmpfY3JlYXRl KHN0cnVjdCBkcm1fc3luY29iag0KPiA+PiAqKm91dF9zeW5jb2JqLCB1aW50MzJfdCBmbGFncywg IGludCBkcm1fc3luY29ial9nZXRfaGFuZGxlKHN0cnVjdA0KPiA+PiBkcm1fZmlsZSAqZmlsZV9w cml2YXRlLA0KPiA+PiAgIAkJCSAgIHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTMyICpo YW5kbGUpOyAgaW50DQo+ID4+IGRybV9zeW5jb2JqX2dldF9mZChzdHJ1Y3QgZHJtX3N5bmNvYmog KnN5bmNvYmosIGludCAqcF9mZCk7DQo+ID4+ICtpbnQgZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNl KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTY0IHBvaW50LA0KPiA+PiB1NjQgZmxhZ3Ms DQo+ID4+ICsJCQkgICAgIHN0cnVjdCBkbWFfZmVuY2UgKipmZW5jZSk7DQo+ID4+DQo+ID4+ICAg I2VuZGlmDQo+ID4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybS5oIGIvaW5jbHVk ZS91YXBpL2RybS9kcm0uaCBpbmRleA0KPiA+PiAzMDBmMzM2NjMzZjIuLmNlYmRiMjU0MWViNyAx MDA2NDQNCj4gPj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm0uaA0KPiA+PiArKysgYi9pbmNs dWRlL3VhcGkvZHJtL2RybS5oDQo+ID4+IEBAIC03MTcsNiArNzE3LDcgQEAgc3RydWN0IGRybV9w cmltZV9oYW5kbGUgeyAgc3RydWN0DQo+ID4+IGRybV9zeW5jb2JqX2NyZWF0ZSB7DQo+ID4+ICAg CV9fdTMyIGhhbmRsZTsNCj4gPj4gICAjZGVmaW5lIERSTV9TWU5DT0JKX0NSRUFURV9TSUdOQUxF RCAoMSA8PCAwKQ0KPiA+PiArI2RlZmluZSBEUk1fU1lOQ09CSl9DUkVBVEVfVFlQRV9USU1FTElO RSAoMSA8PCAxKQ0KPiA+PiAgIAlfX3UzMiBmbGFnczsNCj4gPj4gICB9Ow0KPiA+Pg0KPiA+PiAt LQ0KPiA+PiAyLjE3LjENCj4gPj4NCj4gPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4gPj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QNCj4gPj4gYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gPj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQo+IA0KPiBfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdA0KPiBhbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJl ZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGlu Zm8vYW1kLWdmeAo=