From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH 1/3] [RFC]drm: add syncobj timeline support v4 Date: Thu, 13 Sep 2018 10:15:02 +0800 Message-ID: <241f52a9-cb52-c95a-a4ed-d8852bc43980@amd.com> References: <20180906062523.16542-1-david1.zhou@amd.com> <4374aa17-c659-0c22-a487-c5e236690108@amd.com> <7117b33b-c24f-6cb5-5372-143385f7a7b5@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <7117b33b-c24f-6cb5-5372-143385f7a7b5-Re5JQEeQqe8AvxtiuMwx3w@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: christian.koenig-5C7GfCeVMHo@public.gmane.org, Chunming Zhou , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: Dave Airlie , Daniel Rakos , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org List-Id: dri-devel@lists.freedesktop.org CgpPbiAyMDE45bm0MDnmnIgxMuaXpSAxOTowNSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBB bSAxMi4wOS4yMDE4IHVtIDEyOjIwIHNjaHJpZWIgemhvdWNtMToKPj4gW1NOSVBdCj4+Pj4gRHJv cCB0aGUgdGVybSBzZW1hcGhvcmUgaGVyZSwgYmV0dGVyIHVzZSBzeW5jb2JqLgo+PiBUaGlzIGlz IGZyb20gVktfS0hSX3RpbWVsaW5lX3NlbWFwaG9yZSBleHRlbnNpb24gZGVzY3JpYmUsIG5vdCBt eSAKPj4gaW52ZW50aW9uLCBJIGp1c3QgcXVvdGUgaXQuIEluIGtlcm5lbCBzaWRlLCB3ZSBjYWxs IHN5bmNvYmosIGluIFVNRCwgCj4+IHRoZXkgc3RpbGwgY2FsbCBzZW1hcGhvcmUuCj4KPiBZZWFo LCBidXQgd2UgZG9uJ3QgY2FyZSBhYm91dCBjbG9zZSBzb3VyY2UgVU1EIG5hbWVzIGluIHRoZSBr ZXJuZWwgYW5kJwo+IHRoZSBvcGVuIHNvdXJjZSBVTUQgY2FsbHMgaXQgc3luY29iaiBhcyB3ZWxs Lgo+Cj4+Pj4KPj4+Pj4gW1NOSVBdCj4+Pj4+ICtzdGF0aWMgdm9pZCBkcm1fc3luY29ial9maW5k X3NpZ25hbF9wdF9mb3Jfd2FpdF9wdChzdHJ1Y3QgCj4+Pj4+IGRybV9zeW5jb2JqICpzeW5jb2Jq LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdCkKPj4+Pj4gK3sKPj4+Pgo+ Pj4+IFRoYXQgd2hvbGUgYXBwcm9hY2ggc3RpbGwgbG9va3MgaG9ycmlibGUgY29tcGxpY2F0ZWQg dG8gbWUuCj4+IEl0J3MgYWxyZWFkeSB2ZXJ5IGNsb3NlIHRvIHdoYXQgeW91IHNhaWQgYmVmb3Jl Lgo+Pgo+Pj4+Cj4+Pj4gRXNwZWNpYWxseSB0aGUgc2VwYXJhdGlvbiBvZiBzaWduYWwgYW5kIHdh aXQgcHQgaXMgY29tcGxldGVseSAKPj4+PiB1bm5lY2Vzc2FyeSBhcyBmYXIgYXMgSSBjYW4gc2Vl Lgo+Pj4+IFdoZW4gYSB3YWl0IHB0IGlzIHJlcXVlc3RlZCB3ZSBqdXN0IG5lZWQgdG8gc2VhcmNo IGZvciB0aGUgc2lnbmFsIAo+Pj4+IHBvaW50IHdoaWNoIGl0IHdpbGwgdHJpZ2dlci4KPj4gWWVh aCwgSSB0cmllZCB0aGlzLCBidXQgd2hlbiBJIGltcGxlbWVudCBjcHUgd2FpdCBpb2N0bCBvbiBz cGVjaWZpYyAKPj4gcG9pbnQsIHdlIG5lZWQgYSBhZHZhbmNlZCB3YWl0IHB0IGZlbmNlLCBvdGhl cndpc2UsIHdlIGNvdWxkIHN0aWxsIAo+PiBuZWVkIG9sZCBzeW5jb2JqIGNiLgo+Cj4gV2h5PyBJ IG1lYW4geW91IGp1c3QgbmVlZCB0byBjYWxsIGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoKSBhbmQg d2hlbiAKPiB0aGF0IG9uZSByZXR1cm5zIE5VTEwgeW91IHVzZSB3YWl0X2V2ZW50XyooKSB0byB3 YWl0IGZvciBhIHNpZ25hbCAKPiBwb2ludCA+PSB5b3VyIHdhaXQgcG9pbnQgdG8gYXBwZWFyIGFu ZCB0cnkgYWdhaW4uCmUuZy4gd2hlbiB0aGVyZSBhcmUgMyBzeW5jb2JqcyhBLEIsQykgdG8gd2Fp dCwgYWxsIHN5bmNvYmpBQkMgaGF2ZSBubyAKZmVuY2UgeWV0LCBhcyB5b3Ugc2FpZCwgZHVyaW5n IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2UoQSkgaXMgd29ya2luZyBvbiAKd2FpdF9ldmVudCwgc3lu Y29iakIgYW5kIHN5bmNvYmpDIGNvdWxkIGFscmVhZHkgYmUgc2lnbmFsZWQsIHRoZW4gd2UgCmRv bid0IGtub3cgd2hpY2ggb25lIGlzIGZpcnN0IHNpZ25hbGVkLCB3aGljaCBpcyBuZWVkIHdoZW4g d2FpdCBpb2N0bCAKcmV0dXJucy4KCkJhY2sgdG8gbXkgaW1wbGVtZW50YXRpb24sIGl0IGFscmVh ZHkgZml4ZXMgYWxsIHlvdXIgY29uY2VybnMgYmVmb3JlLCAKYW5kIGNhbiBiZSBhYmxlIHRvIGVh c2lseSB1c2VkIGluIHdhaXRfaW9jdGwuIFdoZW4geW91IGZlZWwgdGhhdCBpcyAKY29tcGxpY2F0 ZWQsIEkgZ3Vlc3MgdGhhdCBpcyBiZWNhdXNlIHdlIG1lcmdlZCBhbGwgbG9naWMgdG8gdGhhdCBh bmQgCm11Y2ggY2xlYW4gdXAgaW4gb25lIHBhdGNoLiBJbiBmYWN0LCBpdCBhbHJlYWR5IGlzIHZl cnkgc2ltcGxlLCAKdGltZWxpbmVfaW5pdC9maW5pLCBjcmVhdGUgc2lnbmFsL3dhaXRfcHQsIGZp bmQgc2lnbmFsX3B0IGZvciB3YWl0X3B0LCAKZ2FyYmFnZSBjb2xsZWN0aW9uLCBqdXN0IHRoZW0u CgpUaGFua3MsCkRhdmlkIFpob3UKPgo+IFJlZ2FyZHMsCj4gQ2hyaXN0aWFuLgo+Cj4+Cj4+Cj4+ IFRoYW5rcywKPj4gRGF2aWQgWmhvdQo+Pj4+Cj4+Pj4gUmVnYXJkcywKPj4+PiBDaHJpc3RpYW4u Cj4+Pj4KPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgKnRpbWVsaW5l ID0gCj4+Pj4+ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lOwo+Pj4+PiArwqDCoMKgIHN0cnVj dCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdDsKPj4+Pj4gK8KgwqDCoCBpbnQgcmV0 Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgaWYgKHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSkgewo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoKHN5 bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgJiYKPj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgICh3YWl0X3B0LT52YWx1ZSA8PSB0aW1lbGluZS0+dGltZWxpbmUpKSB7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFsKCZ3YWl0X3B0LT5iYXNlLmJh c2UpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwo+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJfTk9ERSgmd2FpdF9wdC0+bm9kZSk7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiArwqDC oMKgIGxpc3RfZm9yX2VhY2hfZW50cnkoc2lnbmFsX3B0LCAmdGltZWxpbmUtPnNpZ25hbF9wdF9s aXN0LCAKPj4+Pj4gbGlzdCkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKHdhaXRfcHQtPnZh bHVlIDwgc2lnbmFsX3B0LT52YWx1ZSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u dGludWU7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZ TkNPQkpfVFlQRV9OT1JNQUwpICYmCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICh3YWl0 X3B0LT52YWx1ZSAhPSBzaWduYWxfcHQtPnZhbHVlKSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29udGludWU7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3YWl0X3B0LT5zaWduYWxfcHRf ZmVuY2UgPSAKPj4+Pj4gZG1hX2ZlbmNlX2dldCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNlKTsKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGRtYV9mZW5jZV9hZGRfY2FsbGJhY2sod2FpdF9wdC0+ c2lnbmFsX3B0X2ZlbmNlLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZ3YWl0X3B0LT53YWl0X2NiLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdhaXRfcHRfZnVuYyk7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAocmV0ID09IC1FTk9FTlQpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZG1hX2ZlbmNlX3NpZ25hbCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCh3YWl0X3B0LT5zaWduYWxfcHRfZmVu Y2UpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3YWl0X3B0LT5zaWduYWxfcHRfZmVu Y2UgPSBOVUxMOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByYl9lcmFzZSgmd2FpdF9w dC0+bm9kZSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZ0aW1lbGlu ZS0+d2FpdF9wdF90cmVlKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJf Tk9ERSgmd2FpdF9wdC0+bm9kZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9m ZW5jZV9wdXQoJndhaXRfcHQtPmJhc2UuYmFzZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9IGVs c2UgaWYgKHJldCA8IDApIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNl X3B1dCh3YWl0X3B0LT5zaWduYWxfcHRfZmVuY2UpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBEUk1fRVJST1IoImFkZCBjYWxsYmFjayBlcnJvciEiKTsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIGFmdGVyIGFkZGlu ZyBjYWxsYmFjaywgcmVtb3ZlIGZyb20gcmIgdHJlZSAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByYl9lcmFzZSgmd2FpdF9wdC0+bm9kZSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZ0aW1lbGluZS0+d2FpdF9wdF90cmVlKTsKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJfTk9ERSgmd2FpdF9wdC0+bm9kZSk7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCB9Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm47Cj4+Pj4+ICvCoMKgwqAg fQo+Pj4+PiArwqDCoMKgIC8qIHNpZ25hbGVkIHB0IHdhcyByZWxlYXNlZCAqLwo+Pj4+PiArwqDC oMKgIGlmICghd2FpdF9wdC0+c2lnbmFsX3B0X2ZlbmNlICYmICh3YWl0X3B0LT52YWx1ZSA8PQo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHRpbWVsaW5l LT5zaWduYWxfcG9pbnQpKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2Vfc2lnbmFs KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmJfZXJhc2UoJndh aXRfcHQtPm5vZGUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53 YWl0X3B0X3RyZWUpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJfTk9ERSgmd2FpdF9w dC0+bm9kZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5i YXNlLmJhc2UpOwo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gwqAgfQo+Pj4+PiDCoCAtdm9pZCBkcm1f c3luY29ial9hZGRfY2FsbGJhY2soc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+Pj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2Ig KmNiLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29i al9mdW5jX3QgZnVuYykKPj4+Pj4gK3N0YXRpYyBpbnQgZHJtX3N5bmNvYmpfdGltZWxpbmVfY3Jl YXRlX3NpZ25hbF9wdChzdHJ1Y3QgCj4+Pj4+IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBk bWFfZmVuY2UgKmZlbmNlLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHU2NCBwb2ludCkKPj4+Pj4gwqAgewo+Pj4+PiArwqDCoMKgIHN0cnVj dCBkcm1fc3luY29ial9zaWduYWxfcHQgKnNpZ25hbF9wdCA9Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBremFsbG9jKHNpemVvZihzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0KSwgR0ZQX0tFUk5F TCk7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3NpZ25hbF9wdCAqdGFpbF9wdDsK Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICoqZmVuY2VzOwo+Pj4+PiArwqDCoMKgIHN0 cnVjdCByYl9ub2RlICpub2RlOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial93YWl0 X3B0ICp0YWlsX3dhaXRfcHQgPSBOVUxMOwo+Pj4+PiArwqDCoMKgIGludCBudW1fZmVuY2VzID0g MDsKPj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gMCwgaTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIGlm ICghc2lnbmFsX3B0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FTk9NRU07Cj4+Pj4+ ICvCoMKgwqAgaWYgKHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUuc2lnbmFsX3BvaW50ID49IHBv aW50KSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBEUk1fV0FSTigiQSBsYXRlciBzaWduYWwgaXMg cmVhZHkhIik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+Pj4gK8KgwqDCoCB9 Cj4+Pj4+ICvCoMKgwqAgaWYgKCFmZW5jZSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gb3V0 Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgZmVuY2VzID0ga21hbGxvY19hcnJheShzaXplb2Yodm9p ZCAqKSwgMiwgR0ZQX0tFUk5FTCk7Cj4+Pj4+ICvCoMKgwqAgaWYgKCFmZW5jZXMpCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBnb3RvIG91dDsKPj4+Pj4gK8KgwqDCoCBmZW5jZXNbbnVtX2ZlbmNlcysr XSA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+Pj4+PiArwqDCoMKgIC8qIHRpbWVsaW5lIHN5bmNv YmogbXVzdCB0YWtlIHRoaXMgZGVwZW5kZW5jeSAqLwo+Pj4+PiArwqDCoMKgIGlmIChzeW5jb2Jq LT50eXBlID09IERSTV9TWU5DT0JKX1RZUEVfVElNRUxJTkUpIHsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHNwaW5fbG9jaygmc3luY29iai0+bG9jayk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAK Pj4+Pj4gKCFsaXN0X2VtcHR5KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wdF9s aXN0KSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0YWlsX3B0ID0gCj4+Pj4+IGxp c3RfbGFzdF9lbnRyeSgmc3luY29iai0+c3luY29ial90aW1lbGluZS5zaWduYWxfcHRfbGlzdCwK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkcm1fc3luY29ial9zaWduYWxfcHQsIGxpc3QpOwo+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBmZW5jZXNbbnVtX2ZlbmNlcysrXSA9IAo+Pj4+PiBkbWFfZmVuY2VfZ2V0KCZ0 YWlsX3B0LT5iYXNlLT5iYXNlKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gK8KgwqDC oMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4gK8KgwqDCoCB9Cj4+ Pj4+ICvCoMKgwqAgc2lnbmFsX3B0LT5iYXNlID0gZG1hX2ZlbmNlX2FycmF5X2NyZWF0ZShudW1f ZmVuY2VzLCBmZW5jZXMsCj4+Pj4+ICsgc3luY29iai0+c3luY29ial90aW1lbGluZS50aW1lbGlu ZV9jb250ZXh0LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHBvaW50LCBmYWxzZSk7Cj4+Pj4+ICvCoMKgwqAgaWYgKCFzaWduYWxfcHQtPmJh c2UpCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBnb3RvIGZhaWw7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDC oCBzaWduYWxfcHQtPnZhbHVlID0gcG9pbnQ7Cj4+Pj4+IMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsKPj4+Pj4gLcKgwqDCoCBkcm1fc3luY29ial9hZGRfY2FsbGJhY2tfbG9j a2VkKHN5bmNvYmosIGNiLCBmdW5jKTsKPj4+Pj4gK8KgwqDCoCBzeW5jb2JqLT5zeW5jb2JqX3Rp bWVsaW5lLnNpZ25hbF9wb2ludCA9IHBvaW50Owo+Pj4+PiArwqDCoMKgIElOSVRfTElTVF9IRUFE KCZzaWduYWxfcHQtPmxpc3QpOwo+Pj4+PiArwqDCoMKgIGxpc3RfYWRkX3RhaWwoJnNpZ25hbF9w dC0+bGlzdCwgCj4+Pj4+ICZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnNpZ25hbF9wdF9saXN0 KTsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIGFkdmFuY2VkIHdh aXQgKi8KPj4+Pj4gK8KgwqDCoCBub2RlID0gcmJfbGFzdCgmc3luY29iai0+c3luY29ial90aW1l bGluZS53YWl0X3B0X3RyZWUpOwo+Pj4+PiArwqDCoMKgIGlmIChub2RlKQo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgdGFpbF93YWl0X3B0ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2Jq X3dhaXRfcHQsIAo+Pj4+PiBub2RlKTsKPj4+Pj4gK8KgwqDCoCBpZiAodGFpbF93YWl0X3B0ICYm ICF0YWlsX3dhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg Zm9yIChub2RlID0gCj4+Pj4+IHJiX2ZpcnN0KCZzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLndh aXRfcHRfdHJlZSk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZSAhPSBOVUxM OyBub2RlID0gcmJfbmV4dChub2RlKSkgewo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBz dHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9wdCA9Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmJfZW50cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRf cHQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUp Owo+Pj4+PiArCj4+Pj4+ICsgZHJtX3N5bmNvYmpfZmluZF9zaWduYWxfcHRfZm9yX3dhaXRfcHQo c3luY29iaiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdhaXRfcHQpOwo+Pj4+PiArwqDCoMKgwqDCoMKg wqAgfQo+Pj4+PiArwqDCoMKgIH0KPj4+Pj4gKwo+Pj4+PiDCoMKgwqDCoMKgIHNwaW5fdW5sb2Nr KCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4gK8KgwqDCoCB3YWtlX3VwX2FsbCgmc3luY29iai0+c3lu Y29ial90aW1lbGluZS53cSk7Cj4+Pj4+ICsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gMDsKPj4+Pj4g K2ZhaWw6Cj4+Pj4+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IG51bV9mZW5jZXM7IGkrKykKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9mZW5jZV9wdXQoZmVuY2VzW2ldKTsKPj4+Pj4gK8KgwqDC oCBrZnJlZShmZW5jZXMpOwo+Pj4+PiArb3V0Ogo+Pj4+PiArwqDCoMKgIGtmcmVlKHNpZ25hbF9w dCk7Cj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHJldDsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCAtdm9pZCBk cm1fc3luY29ial9yZW1vdmVfY2FsbGJhY2soc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zeW5jb2Jq X2NiICpjYikKPj4+Pj4gK3N0YXRpYyB2b2lkIGRybV9zeW5jb2JqX3RpbWVsaW5lX2dhcmJhZ2Vf Y29sbGVjdGlvbihzdHJ1Y3QgCj4+Pj4+IGRybV9zeW5jb2JqICpzeW5jb2JqKQo+Pj4+PiDCoCB7 Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lICp0aW1lbGluZSA9IAo+ Pj4+PiAmc3luY29iai0+c3luY29ial90aW1lbGluZTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJf bm9kZSAqbm9kZTsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2Fp dF9wdDsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfc2lnbmFsX3B0ICpzaWduYWxf cHQsICp0bXA7Cj4+Pj4+ICsKPj4+Pj4gwqDCoMKgwqDCoCBzcGluX2xvY2soJnN5bmNvYmotPmxv Y2spOwo+Pj4+PiAtwqDCoMKgIGxpc3RfZGVsX2luaXQoJmNiLT5ub2RlKTsKPj4+Pj4gK8KgwqDC oCBub2RlID0gcmJfZmlyc3QoJnRpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwo+Pj4+PiArwqDCoMKg IHdoaWxlIChub2RlKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3YWl0X3B0ID0gcmJfZW50cnko bm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQsIG5vZGUpOwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgaWYgKCFkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJndhaXRfcHQtPmJhc2UuYmFzZSkpIHsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbm9kZSA9IHJiX25leHQobm9kZSk7Cj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg fQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmJfZXJhc2UoJndhaXRfcHQtPm5vZGUsCj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJnRpbWVsaW5lLT53YWl0X3B0X3RyZWUpOwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgUkJfQ0xFQVJfTk9ERSgmd2FpdF9wdC0+bm9kZSk7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCAvKiBrZnJlZSh3YWl0X3B0KSBpcyBleGN1dGVkIGJ5IGZlbmNlIHB1dCAqLwo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dCgmd2FpdF9wdC0+YmFzZS5iYXNlKTsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIG5vZGUgPSByYl9maXJzdCgmdGltZWxpbmUtPndhaXRfcHRf dHJlZSk7Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnlf c2FmZShzaWduYWxfcHQsIHRtcCwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgICZ0aW1lbGluZS0+c2lnbmFsX3B0X2xpc3QsIGxpc3QpIHsKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGlmIChkbWFfZmVuY2VfaXNfc2lnbmFsZWQoJnNpZ25hbF9wdC0+YmFzZS0+YmFzZSkpIHsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGltZWxpbmUtPnRpbWVsaW5lID0gc2lnbmFs X3B0LT52YWx1ZTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9kZWwoJnNpZ25h bF9wdC0+bGlzdCk7Cj4+Pj4+ICsgZG1hX2ZlbmNlX3B1dCgmc2lnbmFsX3B0LT5iYXNlLT5iYXNl KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAga2ZyZWUoc2lnbmFsX3B0KTsKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8q c2lnbmFsX3B0IGlzIGluIG9yZGVyIGluIGxpc3QsIGZyb20gc21hbGwgdG8gYmlnLCBzbwo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogdGhlIGxhdGVyIG11c3Qgbm90IGJlIHNpZ25h bCBlaXRoZXIgKi8KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgfQo+Pj4+PiArCj4+Pj4+IMKgwqDCoMKgwqAg c3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+PiDCoCB9Cj4+Pj4+IC0KPj4+Pj4gwqAg LyoqCj4+Pj4+IMKgwqAgKiBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNlIC0gcmVwbGFjZSBmZW5j ZSBpbiBhIHN5bmMgb2JqZWN0Lgo+Pj4+PiDCoMKgICogQHN5bmNvYmo6IFN5bmMgb2JqZWN0IHRv IHJlcGxhY2UgZmVuY2UgaW4KPj4+Pj4gQEAgLTE3NiwyOCArMzY4LDI5IEBAIHZvaWQgZHJtX3N5 bmNvYmpfcmVwbGFjZV9mZW5jZShzdHJ1Y3QgCj4+Pj4+IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBwb2ludCwK Pj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1h X2ZlbmNlICpmZW5jZSkKPj4+Pj4gwqAgewo+Pj4+PiAtwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2Ug Km9sZF9mZW5jZTsKPj4+Pj4gLcKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmN1ciwgKnRt cDsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIGlmIChmZW5jZSkKPj4+Pj4gLcKgwqDCoMKgwqDCoMKg IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgc3Bpbl9sb2NrKCZz eW5jb2JqLT5sb2NrKTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIG9sZF9mZW5jZSA9IHJjdV9kZXJl ZmVyZW5jZV9wcm90ZWN0ZWQoc3luY29iai0+ZmVuY2UsCj4+Pj4+IC0gbG9ja2RlcF9pc19oZWxk KCZzeW5jb2JqLT5sb2NrKSk7Cj4+Pj4+IC3CoMKgwqAgcmN1X2Fzc2lnbl9wb2ludGVyKHN5bmNv YmotPmZlbmNlLCBmZW5jZSk7Cj4+Pj4+IC0KPj4+Pj4gLcKgwqDCoCBpZiAoZmVuY2UgIT0gb2xk X2ZlbmNlKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo Y3VyLCB0bXAsICZzeW5jb2JqLT5jYl9saXN0LCAKPj4+Pj4gbm9kZSkgewo+Pj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBsaXN0X2RlbF9pbml0KCZjdXItPm5vZGUpOwo+Pj4+PiAtwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBjdXItPmZ1bmMoc3luY29iaiwgY3VyKTsKPj4+Pj4gK8KgwqDCoCBk cm1fc3luY29ial90aW1lbGluZV9nYXJiYWdlX2NvbGxlY3Rpb24oc3luY29iaik7Cj4+Pj4+ICvC oMKgwqAgaWYgKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORSkgewo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGZlbmNlKQo+Pj4+PiArIGRybV9zeW5jb2JqX3RpbWVs aW5lX2NyZWF0ZV9zaWduYWxfcHQoc3luY29iaiwgZmVuY2UsCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcG9p bnQpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArwqDCoMKgIH0gZWxzZSBp ZiAoc3luY29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX05PUk1BTCkgewo+Pj4+PiArwqDC oMKgwqDCoMKgwqAgdTY0IHB0X3ZhbHVlOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoIWZlbmNlKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3Rp bWVsaW5lX2Zpbmkoc3luY29iaiwKPj4+Pj4gKyAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7 Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3RpbWVsaW5lX2luaXQo c3luY29iaiwKPj4+Pj4gKyAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybjsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHB0X3ZhbHVlID0gc3luY29iai0+c3luY29ial90aW1lbGluZS5z aWduYWxfcG9pbnQgKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fU1lOQ09CSl9O T1JNQUxfUE9JTlQ7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial90aW1lbGluZV9j cmVhdGVfc2lnbmFsX3B0KHN5bmNvYmosIGZlbmNlLCAKPj4+Pj4gcHRfdmFsdWUpOwo+Pj4+PiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+Pj4+PiArwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBEUk1fRVJST1IoInRoZSBzeW5jb2JqIHR5cGUgaXNuJ3Qgc3VwcG9ydFxuIik7 Cj4+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgc3Bpbl91bmxvY2soJnN5 bmNvYmotPmxvY2spOwo+Pj4+PiAtCj4+Pj4+IC3CoMKgwqAgZG1hX2ZlbmNlX3B1dChvbGRfZmVu Y2UpOwo+Pj4+PiDCoCB9Cj4+Pj4+IMKgIEVYUE9SVF9TWU1CT0woZHJtX3N5bmNvYmpfcmVwbGFj ZV9mZW5jZSk7Cj4+Pj4+IMKgIEBAIC0yMjAsNiArNDEzLDEyMCBAQCBzdGF0aWMgaW50IAo+Pj4+ PiBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5kbGUoc3RydWN0IGRybV9zeW5jb2JqICpzeW5j b2JqKQo+Pj4+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+PiDCoCB9Cj4+Pj4+IMKgICtzdGF0 aWMgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKgo+Pj4+PiArZHJtX3N5bmNvYmpfdGltZWxp bmVfbG9va3VwX3dhaXRfcHRfZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqIAo+Pj4+PiAqc3luY29i aiwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQg cG9pbnQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRtYV9mZW5jZSAqKmZlbmNlKQo+Pj4+PiArewo+Pj4+PiArwqDCoMKgIHN0cnVjdCBy Yl9ub2RlICpub2RlID0gCj4+Pj4+IHN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUud2FpdF9wdF90 cmVlLnJiX25vZGU7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQgKndh aXRfcHQgPSBOVUxMOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqAgc3Bpbl9sb2NrKCZzeW5jb2JqLT5s b2NrKTsKPj4+Pj4gK8KgwqDCoCB3aGlsZShub2RlKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBp bnQgcmVzdWx0Owo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB3YWl0X3B0ID0gcmJfZW50 cnkobm9kZSwgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQsIG5vZGUpOwo+Pj4+PiArwqDCoMKg wqDCoMKgwqAgcmVzdWx0ID0gcG9pbnQgLSB3YWl0X3B0LT52YWx1ZTsKPj4+Pj4gK8KgwqDCoMKg wqDCoMKgIGlmIChyZXN1bHQgPCAwKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5v ZGUgPSBub2RlLT5yYl9sZWZ0Owo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgfSBlbHNlIGlmIChyZXN1 bHQgPiAwKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUgPSBub2RlLT5yYl9y aWdodDsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChmZW5jZSkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqZmVuY2UgPSBkbWFfZmVuY2VfZ2V0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+Pj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+Pj4g K8KgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgc3Bpbl91bmxvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+ PiArCj4+Pj4+ICvCoMKgwqAgcmV0dXJuIHdhaXRfcHQ7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqCj4+Pj4+ICtkcm1fc3luY29ial90 aW1lbGluZV9jcmVhdGVfd2FpdF9wdF9hbmRfcmV0dXJuX2ZlbmNlKHN0cnVjdCAKPj4+Pj4gZHJt X3N5bmNvYmogKnN5bmNvYmosCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgcG9pbnQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2Zl bmNlICoqZmVuY2UpCj4+Pj4+ICt7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX3dh aXRfcHQgKndhaXRfcHQgPSBremFsbG9jKHNpemVvZigqd2FpdF9wdCksCj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdGUF9L RVJORUwpOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBkcm1fc3luY29ial9zdHViX2ZlbmNlICpiYXNl Owo+Pj4+PiArwqDCoMKgIHN0cnVjdCByYl9ub2RlICoqbmV3ID0gCj4+Pj4+ICYoc3luY29iai0+ c3luY29ial90aW1lbGluZS53YWl0X3B0X3RyZWUucmJfbm9kZSksICpwYXJlbnQgPSBOVUxMOwo+ Pj4+PiArCj4+Pj4+ICvCoMKgwqAgaWYgKCF3YWl0X3B0KQo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg cmV0dXJuIE5VTEw7Cj4+Pj4+ICvCoMKgwqAgYmFzZSA9ICZ3YWl0X3B0LT5iYXNlOwo+Pj4+PiAr wqDCoMKgIHNwaW5fbG9ja19pbml0KCZiYXNlLT5sb2NrKTsKPj4+Pj4gK8KgwqDCoCBkbWFfZmVu Y2VfaW5pdCgmYmFzZS0+YmFzZSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg JmRybV9zeW5jb2JqX3N0dWJfZmVuY2Vfb3BzLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCAmYmFzZS0+bG9jaywKPj4+Pj4gKyBzeW5jb2JqLT5zeW5jb2JqX3RpbWVsaW5lLnRp bWVsaW5lX2NvbnRleHQsIHBvaW50KTsKPj4+Pj4gK8KgwqDCoCB3YWl0X3B0LT52YWx1ZSA9IHBv aW50Owo+Pj4+PiArwqDCoMKgIHdhaXRfcHQtPnNpZ25hbF9wdF9mZW5jZSA9IE5VTEw7Cj4+Pj4+ ICsKPj4+Pj4gK8KgwqDCoCAvKiB3YWl0IHB0IG11c3QgYmUgaW4gYW4gb3JkZXIsIHNvIHRoYXQg d2UgY2FuIGVhc2lseSBsb29rdXAgCj4+Pj4+IGFuZCBzaWduYWwKPj4+Pj4gK8KgwqDCoMKgICog aXQgKi8KPj4+Pj4gK8KgwqDCoCBzcGluX2xvY2soJnN5bmNvYmotPmxvY2spOwo+Pj4+PiArwqDC oMKgIHdoaWxlKCpuZXcpIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29i al93YWl0X3B0ICp0aGlzID0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmJfZW50cnko Km5ldywgc3RydWN0IGRybV9zeW5jb2JqX3dhaXRfcHQsIG5vZGUpOwo+Pj4+PiArwqDCoMKgwqDC oMKgwqAgaW50IHJlc3VsdCA9IHdhaXRfcHQtPnZhbHVlIC0gdGhpcy0+dmFsdWU7Cj4+Pj4+ICsK Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHBhcmVudCA9ICpuZXc7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAocmVzdWx0IDwgMCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3ID0gJigo Km5ldyktPnJiX2xlZnQpOwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZWxzZSBpZiAocmVzdWx0ID4g MCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmV3ID0gJigoKm5ldyktPnJiX3JpZ2h0 KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZ290byBleGlzdDsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgaWYgKGZlbmNlKQo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gZG1hX2ZlbmNlX2dldCgmd2FpdF9wdC0+YmFz ZS5iYXNlKTsKPj4+Pj4gK8KgwqDCoCByYl9saW5rX25vZGUoJndhaXRfcHQtPm5vZGUsIHBhcmVu dCwgbmV3KTsKPj4+Pj4gK8KgwqDCoCByYl9pbnNlcnRfY29sb3IoJndhaXRfcHQtPm5vZGUsIAo+ Pj4+PiAmc3luY29iai0+c3luY29ial90aW1lbGluZS53YWl0X3B0X3RyZWUpOwo+Pj4+PiArwqDC oMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4gK8KgwqDCoCByZXR1cm4gd2Fp dF9wdDsKPj4+Pj4gK2V4aXN0Ogo+Pj4+PiArwqDCoMKgIHNwaW5fdW5sb2NrKCZzeW5jb2JqLT5s b2NrKTsKPj4+Pj4gK8KgwqDCoCBkbWFfZmVuY2VfcHV0KCZ3YWl0X3B0LT5iYXNlLmJhc2UpOwo+ Pj4+PiArwqDCoMKgIHdhaXRfcHQgPSBkcm1fc3luY29ial90aW1lbGluZV9sb29rdXBfd2FpdF9w dF9mZW5jZShzeW5jb2JqLCAKPj4+Pj4gcG9pbnQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmZW5jZSk7Cj4+Pj4+ ICvCoMKgwqAgcmV0dXJuIHdhaXRfcHQ7Cj4+Pj4+ICt9Cj4+Pj4+ICsKPj4+Pj4gK3N0YXRpYyBz dHJ1Y3QgZG1hX2ZlbmNlICoKPj4+Pj4gK2RybV9zeW5jb2JqX3RpbWVsaW5lX3BvaW50X2dldChz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCAKPj4+Pj4gcG9pbnQsIHU2NCBmbGFncykK Pj4+Pj4gK3sKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfd2FpdF9wdCAqd2FpdF9w dDsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IE5VTEw7Cj4+Pj4+ICsK Pj4+Pj4gK8KgwqDCoCAvKiBjaGVjayBpZiB0aGUgd2FpdCBwdCBleGlzdHMgKi8KPj4+Pj4gK8Kg wqDCoCB3YWl0X3B0ID0gZHJtX3N5bmNvYmpfdGltZWxpbmVfbG9va3VwX3dhaXRfcHRfZmVuY2Uo c3luY29iaiwgCj4+Pj4+IHBvaW50LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmZlbmNlKTsKPj4+Pj4gK8KgwqDC oCBpZiAoIWZlbmNlKSB7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBUaGlzIGlzIGEgbmV3IHdh aXQgcHQsIHNvIGNyZWF0ZSBpdCAqLwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgd2FpdF9wdCA9IAo+ Pj4+PiBkcm1fc3luY29ial90aW1lbGluZV9jcmVhdGVfd2FpdF9wdF9hbmRfcmV0dXJuX2ZlbmNl KHN5bmNvYmosIHBvaW50LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmZW5jZSk7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBpZiAoIWZlbmNlKQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g TlVMTDsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgaWYgKHdhaXRfcHQpIHsKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGludCByZXQgPSAwOwo+Pj4+PiArCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBpZiAoZmxhZ3MgJiBEUk1fU1lOQ09CSl9XQUlUX0ZMQUdTX1dBSVRfRk9SX1NVQk1JVCkgewo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAKPj4+Pj4gd2FpdF9ldmVudF9pbnRl cnJ1cHRpYmxlX3RpbWVvdXQoc3luY29iai0+c3luY29ial90aW1lbGluZS53cSwKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHdhaXRfcHQtPnZhbHVlIDw9IAo+Pj4+PiBzeW5jb2JqLT5zeW5jb2JqX3RpbWVs aW5lLnNpZ25hbF9wb2ludCwKPj4+Pj4gKyBtc2Vjc190b19qaWZmaWVzKDEwMDAwKSk7IC8qIHdh aXQgMTBzICovCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChyZXQgPD0gMCkKPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPj4+Pj4gK8Kg wqDCoMKgwqDCoMKgIH0KPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmc3luY29iai0+ bG9jayk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial9maW5kX3NpZ25hbF9wdF9m b3Jfd2FpdF9wdChzeW5jb2JqLCB3YWl0X3B0KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5f dW5sb2NrKCZzeW5jb2JqLT5sb2NrKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmZW5j ZTsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ICvCoMKgwqAgcmV0dXJuIE5VTEw7Cj4+Pj4+ICt9Cj4+ Pj4+ICsKPj4+Pj4gwqAgLyoqCj4+Pj4+IMKgwqAgKiBkcm1fc3luY29ial9maW5kX2ZlbmNlIC0g bG9va3VwIGFuZCByZWZlcmVuY2UgdGhlIGZlbmNlIGluIGEgCj4+Pj4+IHN5bmMgb2JqZWN0Cj4+ Pj4+IMKgwqAgKiBAZmlsZV9wcml2YXRlOiBkcm0gZmlsZSBwcml2YXRlIHBvaW50ZXIKPj4+Pj4g QEAgLTIzNCwyMCArNTQxLDQ2IEBAIHN0YXRpYyBpbnQgCj4+Pj4+IGRybV9zeW5jb2JqX2Fzc2ln bl9udWxsX2hhbmRsZShzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmopCj4+Pj4+IMKgwqAgKiBj b250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgZmVuY2UsIHdoaWNoIG11c3QgYmUgcmVsZWFzZWQg YnkgCj4+Pj4+IGNhbGxpbmcKPj4+Pj4gwqDCoCAqIGRtYV9mZW5jZV9wdXQoKS4KPj4+Pj4gwqDC oCAqLwo+Pj4+PiAtaW50IGRybV9zeW5jb2JqX2ZpbmRfZmVuY2Uoc3RydWN0IGRybV9maWxlICpm aWxlX3ByaXZhdGUsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUzMiBoYW5k bGUsIHU2NCBwb2ludCwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGRtYV9mZW5jZSAqKmZlbmNlKQo+Pj4+PiAraW50IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShz dHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmosIHU2NCBwb2ludCwKPj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHU2NCBmbGFncywgc3RydWN0IGRtYV9mZW5jZSAqKmZlbmNl KQo+Pj4+PiDCoCB7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqID0g ZHJtX3N5bmNvYmpfZmluZChmaWxlX3ByaXZhdGUsIAo+Pj4+PiBoYW5kbGUpOwo+Pj4+PiDCoMKg wqDCoMKgIGludCByZXQgPSAwOwo+Pj4+PiDCoCDCoMKgwqDCoMKgIGlmICghc3luY29iaikKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PRU5UOwo+Pj4+PiDCoCAtwqDCoMKgICpm ZW5jZSA9IGRybV9zeW5jb2JqX2ZlbmNlX2dldChzeW5jb2JqKTsKPj4+Pj4gK8KgwqDCoCBkcm1f c3luY29ial90aW1lbGluZV9nYXJiYWdlX2NvbGxlY3Rpb24oc3luY29iaik7Cj4+Pj4+ICvCoMKg wqAgaWYgKHN5bmNvYmotPnR5cGUgPT0gRFJNX1NZTkNPQkpfVFlQRV9OT1JNQUwpIHsKPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIC8qTk9STUFMIHN5bmNvYmogYWx3YXlzIHdhaXQgb24gbGFzdCBwdCAq Lwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAgdTY0IHRhaWxfcHRfdmFsdWUgPSBzeW5jb2JqLT5zeW5j b2JqX3RpbWVsaW5lLnNpZ25hbF9wb2ludDsKPj4+Pj4gKwo+Pj4+PiArwqDCoMKgwqDCoMKgwqAg aWYgKHRhaWxfcHRfdmFsdWUgPT0gMCkKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdGFp bF9wdF92YWx1ZSArPSBEUk1fU1lOQ09CSl9OT1JNQUxfUE9JTlQ7Cj4+Pj4+ICvCoMKgwqDCoMKg wqDCoCAvKiBOT1JNQUwgc3luY29iaiBkb2Vzbid0IGNhcmUgcG9pbnQgdmFsdWUgKi8KPj4+Pj4g K8KgwqDCoMKgwqDCoMKgIFdBUk5fT04ocG9pbnQgIT0gMCk7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCAqZmVuY2UgPSBkcm1fc3luY29ial90aW1lbGluZV9wb2ludF9nZXQoc3luY29iaiwgCj4+Pj4+ IHRhaWxfcHRfdmFsdWUsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZmxhZ3MpOwo+Pj4+PiArwqDCoMKgIH0gZWxzZSBpZiAoc3lu Y29iai0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCAqZmVuY2UgPSBkcm1fc3luY29ial90aW1lbGluZV9wb2ludF9nZXQoc3luY29iaiwg cG9pbnQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgZmxhZ3MpOwo+Pj4+PiArwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBEUk1fRVJST1IoIkRvbid0IHN1cHBvcnQgdGhpcyB0eXBlIHN5bmNvYmpcbiIpOwo+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgKmZlbmNlID0gTlVMTDsKPj4+Pj4gK8KgwqDCoCB9Cj4+Pj4+ IMKgwqDCoMKgwqAgaWYgKCEqZmVuY2UpIHsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9 IC1FSU5WQUw7Cj4+Pj4+IMKgwqDCoMKgwqAgfQo+Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+ Pj4+ICt9Cj4+Pj4+ICtFWFBPUlRfU1lNQk9MKGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZSk7Cj4+ Pj4+ICtpbnQgZHJtX3N5bmNvYmpfZmluZF9mZW5jZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJp dmF0ZSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGhhbmRsZSwgdTY0 IHBvaW50LAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2Zl bmNlICoqZmVuY2UpIHsKPj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmogKnN5bmNvYmog PSBkcm1fc3luY29ial9maW5kKGZpbGVfcHJpdmF0ZSwgCj4+Pj4+IGhhbmRsZSk7Cj4+Pj4+ICsK Pj4+Pj4gK8KgwqDCoCBpbnQgcmV0ID0gZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmos IHBvaW50LAo+Pj4+PiArIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlULAo+ Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmVuY2UpOwo+Pj4+ PiDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX3B1dChzeW5jb2JqKTsKPj4+Pj4gwqDCoMKgwqDCoCBy ZXR1cm4gcmV0Owo+Pj4+PiDCoCB9Cj4+Pj4+IEBAIC0yNjQsNyArNTk3LDcgQEAgdm9pZCBkcm1f c3luY29ial9mcmVlKHN0cnVjdCBrcmVmICprcmVmKQo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBk cm1fc3luY29iaiAqc3luY29iaiA9IGNvbnRhaW5lcl9vZihrcmVmLAo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJt X3N5bmNvYmosCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHJlZmNvdW50KTsKPj4+Pj4gLcKgwqDCoCBkcm1fc3luY29ial9yZXBs YWNlX2ZlbmNlKHN5bmNvYmosIDAsIE5VTEwpOwo+Pj4+PiArwqDCoMKgIGRybV9zeW5jb2JqX3Rp bWVsaW5lX2Zpbmkoc3luY29iaiwgJnN5bmNvYmotPnN5bmNvYmpfdGltZWxpbmUpOwo+Pj4+PiDC oMKgwqDCoMKgIGtmcmVlKHN5bmNvYmopOwo+Pj4+PiDCoCB9Cj4+Pj4+IMKgIEVYUE9SVF9TWU1C T0woZHJtX3N5bmNvYmpfZnJlZSk7Cj4+Pj4+IEBAIC0yOTIsOCArNjI1LDEyIEBAIGludCBkcm1f c3luY29ial9jcmVhdGUoc3RydWN0IGRybV9zeW5jb2JqIAo+Pj4+PiAqKm91dF9zeW5jb2JqLCB1 aW50MzJfdCBmbGFncywKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAtRU5PTUVNOwo+ Pj4+PiDCoCDCoMKgwqDCoMKgIGtyZWZfaW5pdCgmc3luY29iai0+cmVmY291bnQpOwo+Pj4+PiAt wqDCoMKgIElOSVRfTElTVF9IRUFEKCZzeW5jb2JqLT5jYl9saXN0KTsKPj4+Pj4gwqDCoMKgwqDC oCBzcGluX2xvY2tfaW5pdCgmc3luY29iai0+bG9jayk7Cj4+Pj4+ICvCoMKgwqAgaWYgKGZsYWdz ICYgRFJNX1NZTkNPQkpfQ1JFQVRFX1RZUEVfVElNRUxJTkUpCj4+Pj4+ICvCoMKgwqDCoMKgwqDC oCBzeW5jb2JqLT50eXBlID0gRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORTsKPj4+Pj4gK8KgwqDC oCBlbHNlCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzeW5jb2JqLT50eXBlID0gRFJNX1NZTkNPQkpf VFlQRV9OT1JNQUw7Cj4+Pj4+ICvCoMKgwqAgZHJtX3N5bmNvYmpfdGltZWxpbmVfaW5pdChzeW5j b2JqLCAmc3luY29iai0+c3luY29ial90aW1lbGluZSk7Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgaWYg KGZsYWdzICYgRFJNX1NZTkNPQkpfQ1JFQVRFX1NJR05BTEVEKSB7Cj4+Pj4+IMKgwqDCoMKgwqDC oMKgwqDCoCByZXQgPSBkcm1fc3luY29ial9hc3NpZ25fbnVsbF9oYW5kbGUoc3luY29iaik7Cj4+ Pj4+IEBAIC02NTEsNyArOTg4LDYgQEAgc3RydWN0IHN5bmNvYmpfd2FpdF9lbnRyeSB7Cj4+Pj4+ IMKgwqDCoMKgwqAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrOwo+Pj4+PiDCoMKgwqDCoMKgIHN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2Vf Y2IgZmVuY2VfY2I7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRybV9zeW5jb2JqX2NiIHN5bmNvYmpf Y2I7Cj4+Pj4+IMKgIH07Cj4+Pj4+IMKgIMKgIHN0YXRpYyB2b2lkIHN5bmNvYmpfd2FpdF9mZW5j ZV9mdW5jKHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlLAo+Pj4+PiBAQCAtNjYzLDE4ICs5OTksNiBA QCBzdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfZmVuY2VfZnVuYyhzdHJ1Y3QgCj4+Pj4+IGRtYV9m ZW5jZSAqZmVuY2UsCj4+Pj4+IMKgwqDCoMKgwqAgd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRhc2sp Owo+Pj4+PiDCoCB9Cj4+Pj4+IMKgIC1zdGF0aWMgdm9pZCBzeW5jb2JqX3dhaXRfc3luY29ial9m dW5jKHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3N5bmNvYmpfY2IgKmNiKQo+Pj4+ PiAtewo+Pj4+PiAtwqDCoMKgIHN0cnVjdCBzeW5jb2JqX3dhaXRfZW50cnkgKndhaXQgPQo+Pj4+ PiAtwqDCoMKgwqDCoMKgwqAgY29udGFpbmVyX29mKGNiLCBzdHJ1Y3Qgc3luY29ial93YWl0X2Vu dHJ5LCBzeW5jb2JqX2NiKTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIC8qIFRoaXMgaGFwcGVucyBp bnNpZGUgdGhlIHN5bmNvYmogbG9jayAqLwo+Pj4+PiAtwqDCoMKgIHdhaXQtPmZlbmNlID0gCj4+ Pj4+IGRtYV9mZW5jZV9nZXQocmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChzeW5jb2JqLT5mZW5j ZSwKPj4+Pj4gLSBsb2NrZGVwX2lzX2hlbGQoJnN5bmNvYmotPmxvY2spKSk7Cj4+Pj4+IC3CoMKg wqAgd2FrZV91cF9wcm9jZXNzKHdhaXQtPnRhc2spOwo+Pj4+PiAtfQo+Pj4+PiAtCj4+Pj4+IMKg IHN0YXRpYyBzaWduZWQgbG9uZyBkcm1fc3luY29ial9hcnJheV93YWl0X3RpbWVvdXQoc3RydWN0 IAo+Pj4+PiBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgY291bnQsCj4+Pj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1 aW50MzJfdCBmbGFncywKPj4+Pj4gQEAgLTY5OCwxNCArMTAyMiwxMSBAQCBzdGF0aWMgc2lnbmVk IGxvbmcgCj4+Pj4+IGRybV9zeW5jb2JqX2FycmF5X3dhaXRfdGltZW91dChzdHJ1Y3QgZHJtX3N5 bmNvYmogKipzeW5jb2JqcywKPj4+Pj4gwqDCoMKgwqDCoCBzaWduYWxlZF9jb3VudCA9IDA7Cj4+ Pj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKPj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGVudHJpZXNbaV0udGFzayA9IGN1cnJlbnQ7Cj4+Pj4+IC3CoMKgwqDCoMKg wqDCoCBlbnRyaWVzW2ldLmZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmpzW2ld KTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IGRybV9zeW5jb2JqX3NlYXJjaF9mZW5jZShz eW5jb2Jqc1tpXSwgMCwgMCwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVudHJpZXNbaV0uZmVuY2UpOwo+Pj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKCFlbnRyaWVzW2ldLmZlbmNlKSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChmbGFncyAmIERSTV9TWU5DT0JKX1dBSVRfRkxBR1NfV0FJVF9GT1JfU1VCTUlU KSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+Pj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZBTDsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBnb3RvIGNsZWFudXBfZW50cmllczsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgfQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSAtRUlOVkFMOwo+Pj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnb3RvIGNsZWFudXBfZW50cmllczsKPj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4gwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChkbWFfZmVu Y2VfaXNfc2lnbmFsZWQoZW50cmllc1tpXS5mZW5jZSkpIHsKPj4+Pj4gQEAgLTczMywxNSArMTA1 NCw2IEBAIHN0YXRpYyBzaWduZWQgbG9uZyAKPj4+Pj4gZHJtX3N5bmNvYmpfYXJyYXlfd2FpdF90 aW1lb3V0KHN0cnVjdCBkcm1fc3luY29iaiAqKnN5bmNvYmpzLAo+Pj4+PiDCoMKgwqDCoMKgwqAg KiBmYWxsdGhvdWdoIGFuZCB0cnkgYSAwIHRpbWVvdXQgd2FpdCEKPj4+Pj4gwqDCoMKgwqDCoMKg ICovCj4+Pj4+IMKgIC3CoMKgwqAgaWYgKGZsYWdzICYgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19X QUlUX0ZPUl9TVUJNSVQpIHsKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBj b3VudDsgKytpKSB7Cj4+Pj4+IC0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0X29yX2FkZF9jYWxsYmFj ayhzeW5jb2Jqc1tpXSwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmZW50cmllc1tpXS5mZW5jZSwKPj4+Pj4g LSAmZW50cmllc1tpXS5zeW5jb2JqX2NiLAo+Pj4+PiAtIHN5bmNvYmpfd2FpdF9zeW5jb2JqX2Z1 bmMpOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiAtwqDCoMKgIH0KPj4+Pj4gLQo+Pj4+ PiDCoMKgwqDCoMKgIGRvIHsKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHNldF9jdXJyZW50X3N0 YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7Cj4+Pj4+IMKgIEBAIC03ODksMTMgKzExMDEsMTAgQEAg c3RhdGljIHNpZ25lZCBsb25nIAo+Pj4+PiBkcm1fc3luY29ial9hcnJheV93YWl0X3RpbWVvdXQo c3RydWN0IGRybV9zeW5jb2JqICoqc3luY29ianMsCj4+Pj4+IMKgIMKgIGNsZWFudXBfZW50cmll czoKPj4+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewo+Pj4+PiAt wqDCoMKgwqDCoMKgwqAgaWYgKGVudHJpZXNbaV0uc3luY29ial9jYi5mdW5jKQo+Pj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial9yZW1vdmVfY2FsbGJhY2soc3luY29ianNb aV0sCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmVudHJpZXNbaV0uc3luY29ial9jYik7Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBk bWFfZmVuY2VfcHV0KGVudHJpZXNbaV0uZmVuY2UpOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGVudHJpZXNbaV0uZmVuY2VfY2IuZnVuYykKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZG1hX2ZlbmNlX3JlbW92ZV9jYWxsYmFjayhlbnRyaWVzW2ldLmZlbmNlLAo+Pj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgJmVu dHJpZXNbaV0uZmVuY2VfY2IpOwo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgZG1hX2ZlbmNlX3B1dChl bnRyaWVzW2ldLmZlbmNlKTsKPj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgwqDCoMKgwqAga2Zy ZWUoZW50cmllcyk7Cj4+Pj4+IMKgIEBAIC05NzAsMTIgKzEyNzksMjEgQEAgZHJtX3N5bmNvYmpf cmVzZXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgCj4+Pj4+ICpkZXYsIHZvaWQgKmRhdGEsCj4+ Pj4+IMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1 cm4gcmV0Owo+Pj4+PiDCoCAtwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBhcmdzLT5jb3VudF9oYW5k bGVzOyBpKyspCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial9yZXBsYWNlX2ZlbmNl KHN5bmNvYmpzW2ldLCAwLCBOVUxMKTsKPj4+Pj4gLQo+Pj4+PiArwqDCoMKgIGZvciAoaSA9IDA7 IGkgPCBhcmdzLT5jb3VudF9oYW5kbGVzOyBpKyspIHsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlm IChzeW5jb2Jqc1tpXS0+dHlwZSA9PSBEUk1fU1lOQ09CSl9UWVBFX1RJTUVMSU5FKSB7Cj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIERSTV9FUlJPUigidGltZWxpbmUgc3luY29iaiBjYW5u b3QgcmVzZXQhXG4iKTsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gLUVJTlZB TDsKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBvdXQ7Cj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCB9Cj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial90aW1lbGluZV9maW5p KHN5bmNvYmpzW2ldLAo+Pj4+PiArICZzeW5jb2Jqc1tpXS0+c3luY29ial90aW1lbGluZSk7Cj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCBkcm1fc3luY29ial90aW1lbGluZV9pbml0KHN5bmNvYmpzW2ld LAo+Pj4+PiArICZzeW5jb2Jqc1tpXS0+c3luY29ial90aW1lbGluZSk7Cj4+Pj4+ICvCoMKgwqAg fQo+Pj4+PiArb3V0Ogo+Pj4+PiDCoMKgwqDCoMKgIGRybV9zeW5jb2JqX2FycmF5X2ZyZWUoc3lu Y29ianMsIGFyZ3MtPmNvdW50X2hhbmRsZXMpOwo+Pj4+PiDCoCAtwqDCoMKgIHJldHVybiAwOwo+ Pj4+PiArwqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4+IMKgIH0KPj4+Pj4gwqAgwqAgaW50Cj4+Pj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMg Cj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+Pj4+ IGluZGV4IDBhOGQyZDY0ZjM4MC4uNTc5ZTkxYTU4NThiIDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9leGVjYnVmZmVyLmMKPj4+Pj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+Pj4+IEBAIC0yMTM3LDcgKzIx MzcsOSBAQCBhd2FpdF9mZW5jZV9hcnJheShzdHJ1Y3QgaTkxNV9leGVjYnVmZmVyICplYiwKPj4+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghKGZsYWdzICYgSTkxNV9FWEVDX0ZFTkNFX1dBSVQp KQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4+Pj4gwqAgLcKg wqDCoMKgwqDCoMKgIGZlbmNlID0gZHJtX3N5bmNvYmpfZmVuY2VfZ2V0KHN5bmNvYmopOwo+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgZHJtX3N5bmNvYmpfc2VhcmNoX2ZlbmNlKHN5bmNvYmosIDAsCj4+ Pj4+ICsgRFJNX1NZTkNPQkpfV0FJVF9GTEFHU19XQUlUX0ZPUl9TVUJNSVQsCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZmZW5jZSk7Cj4+Pj4+IMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAoIWZlbmNlKQo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gLUVJTlZBTDsKPj4+Pj4gwqAgZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9z eW5jb2JqLmggYi9pbmNsdWRlL2RybS9kcm1fc3luY29iai5oCj4+Pj4+IGluZGV4IDQyNTQzMmI4 NWE4Ny4uNjU3Yzk3ZGMyNWVjIDEwMDY0NAo+Pj4+PiAtLS0gYS9pbmNsdWRlL2RybS9kcm1fc3lu Y29iai5oCj4+Pj4+ICsrKyBiL2luY2x1ZGUvZHJtL2RybV9zeW5jb2JqLmgKPj4+Pj4gQEAgLTMw LDYgKzMwLDI1IEBACj4+Pj4+IMKgIMKgIHN0cnVjdCBkcm1fc3luY29ial9jYjsKPj4+Pj4gwqAg K2VudW0gZHJtX3N5bmNvYmpfdHlwZSB7Cj4+Pj4+ICvCoMKgwqAgRFJNX1NZTkNPQkpfVFlQRV9O T1JNQUwsCj4+Pj4+ICvCoMKgwqAgRFJNX1NZTkNPQkpfVFlQRV9USU1FTElORQo+Pj4+PiArfTsK Pj4+Pj4gKwo+Pj4+PiArc3RydWN0IGRybV9zeW5jb2JqX3RpbWVsaW5lIHsKPj4+Pj4gK8KgwqDC oCB3YWl0X3F1ZXVlX2hlYWRfdMKgwqDCoCB3cTsKPj4+Pj4gK8KgwqDCoCB1NjQgdGltZWxpbmVf Y29udGV4dDsKPj4+Pj4gK8KgwqDCoCAvKioKPj4+Pj4gK8KgwqDCoMKgICogQHRpbWVsaW5lOiBz eW5jb2JqIHRpbWVsaW5lCj4+Pj4+ICvCoMKgwqDCoCAqLwo+Pj4+PiArwqDCoMKgIHU2NCB0aW1l bGluZTsKPj4+Pj4gK8KgwqDCoCB1NjQgc2lnbmFsX3BvaW50Owo+Pj4+PiArCj4+Pj4+ICsKPj4+ Pj4gK8KgwqDCoCBzdHJ1Y3QgcmJfcm9vdCB3YWl0X3B0X3RyZWU7Cj4+Pj4+ICvCoMKgwqAgc3Ry dWN0IGxpc3RfaGVhZCBzaWduYWxfcHRfbGlzdDsKPj4+Pj4gK307Cj4+Pj4+ICsKPj4+Pj4gwqAg LyoqCj4+Pj4+IMKgwqAgKiBzdHJ1Y3QgZHJtX3N5bmNvYmogLSBzeW5jIG9iamVjdC4KPj4+Pj4g wqDCoCAqCj4+Pj4+IEBAIC00MSwxOSArNjAsMTYgQEAgc3RydWN0IGRybV9zeW5jb2JqIHsKPj4+ Pj4gwqDCoMKgwqDCoMKgICovCj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGtyZWYgcmVmY291bnQ7 Cj4+Pj4+IMKgwqDCoMKgwqAgLyoqCj4+Pj4+IC3CoMKgwqDCoCAqIEBmZW5jZToKPj4+Pj4gLcKg wqDCoMKgICogTlVMTCBvciBhIHBvaW50ZXIgdG8gdGhlIGZlbmNlIGJvdW5kIHRvIHRoaXMgb2Jq ZWN0Lgo+Pj4+PiAtwqDCoMKgwqAgKgo+Pj4+PiAtwqDCoMKgwqAgKiBUaGlzIGZpZWxkIHNob3Vs ZCBub3QgYmUgdXNlZCBkaXJlY3RseS4gVXNlIAo+Pj4+PiBkcm1fc3luY29ial9mZW5jZV9nZXQo KQo+Pj4+PiAtwqDCoMKgwqAgKiBhbmQgZHJtX3N5bmNvYmpfcmVwbGFjZV9mZW5jZSgpIGluc3Rl YWQuCj4+Pj4+ICvCoMKgwqDCoCAqIEB0eXBlOiBpbmRpY2F0ZSBzeW5jb2JqIHR5cGUKPj4+Pj4g wqDCoMKgwqDCoMKgICovCj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRtYV9mZW5jZSBfX3JjdSAqZmVu Y2U7Cj4+Pj4+ICvCoMKgwqAgZW51bSBkcm1fc3luY29ial90eXBlIHR5cGU7Cj4+Pj4+IMKgwqDC oMKgwqAgLyoqCj4+Pj4+IC3CoMKgwqDCoCAqIEBjYl9saXN0OiBMaXN0IG9mIGNhbGxiYWNrcyB0 byBjYWxsIHdoZW4gdGhlICZmZW5jZSBnZXRzIAo+Pj4+PiByZXBsYWNlZC4KPj4+Pj4gK8KgwqDC oMKgICogQHN5bmNvYmpfdGltZWxpbmU6IHRpbWVsaW5lCj4+Pj4+IMKgwqDCoMKgwqDCoCAqLwo+ Pj4+PiAtwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgY2JfbGlzdDsKPj4+Pj4gK8KgwqDCoCBzdHJ1 Y3QgZHJtX3N5bmNvYmpfdGltZWxpbmUgc3luY29ial90aW1lbGluZTsKPj4+Pj4gKwo+Pj4+PiDC oMKgwqDCoMKgIC8qKgo+Pj4+PiAtwqDCoMKgwqAgKiBAbG9jazogUHJvdGVjdHMgJmNiX2xpc3Qg YW5kIHdyaXRlLWxvY2tzICZmZW5jZS4KPj4+Pj4gK8KgwqDCoMKgICogQGxvY2s6IFByb3RlY3Rz IHRpbWVsaW5lIGxpc3QgYW5kIHdyaXRlLWxvY2tzICZmZW5jZS4KPj4+Pj4gwqDCoMKgwqDCoMKg ICovCj4+Pj4+IMKgwqDCoMKgwqAgc3BpbmxvY2tfdCBsb2NrOwo+Pj4+PiDCoMKgwqDCoMKgIC8q Kgo+Pj4+PiBAQCAtNjIsMjUgKzc4LDYgQEAgc3RydWN0IGRybV9zeW5jb2JqIHsKPj4+Pj4gwqDC oMKgwqDCoCBzdHJ1Y3QgZmlsZSAqZmlsZTsKPj4+Pj4gwqAgfTsKPj4+Pj4gwqAgLXR5cGVkZWYg dm9pZCAoKmRybV9zeW5jb2JqX2Z1bmNfdCkoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLAo+ Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3lu Y29ial9jYiAqY2IpOwo+Pj4+PiAtCj4+Pj4+IC0vKioKPj4+Pj4gLSAqIHN0cnVjdCBkcm1fc3lu Y29ial9jYiAtIGNhbGxiYWNrIGZvciBkcm1fc3luY29ial9hZGRfY2FsbGJhY2sKPj4+Pj4gLSAq IEBub2RlOiB1c2VkIGJ5IGRybV9zeW5jb2JfYWRkX2NhbGxiYWNrIHRvIGFwcGVuZCB0aGlzIHN0 cnVjdCB0bwo+Pj4+PiAtICrCoMKgwqDCoMKgICZkcm1fc3luY29iai5jYl9saXN0Cj4+Pj4+IC0g KiBAZnVuYzogZHJtX3N5bmNvYmpfZnVuY190IHRvIGNhbGwKPj4+Pj4gLSAqCj4+Pj4+IC0gKiBU aGlzIHN0cnVjdCB3aWxsIGJlIGluaXRpYWxpemVkIGJ5IGRybV9zeW5jb2JqX2FkZF9jYWxsYmFj aywgCj4+Pj4+IGFkZGl0aW9uYWwKPj4+Pj4gLSAqIGRhdGEgY2FuIGJlIHBhc3NlZCBhbG9uZyBi eSBlbWJlZGRpbmcgZHJtX3N5bmNvYmpfY2IgaW4gCj4+Pj4+IGFub3RoZXIgc3RydWN0Lgo+Pj4+ PiAtICogVGhlIGNhbGxiYWNrIHdpbGwgZ2V0IGNhbGxlZCB0aGUgbmV4dCB0aW1lIAo+Pj4+PiBk cm1fc3luY29ial9yZXBsYWNlX2ZlbmNlIGlzCj4+Pj4+IC0gKiBjYWxsZWQuCj4+Pj4+IC0gKi8K Pj4+Pj4gLXN0cnVjdCBkcm1fc3luY29ial9jYiB7Cj4+Pj4+IC3CoMKgwqAgc3RydWN0IGxpc3Rf aGVhZCBub2RlOwo+Pj4+PiAtwqDCoMKgIGRybV9zeW5jb2JqX2Z1bmNfdCBmdW5jOwo+Pj4+PiAt fTsKPj4+Pj4gLQo+Pj4+PiDCoCB2b2lkIGRybV9zeW5jb2JqX2ZyZWUoc3RydWN0IGtyZWYgKmty ZWYpOwo+Pj4+PiDCoCDCoCAvKioKPj4+Pj4gQEAgLTEwNiwyOSArMTAzLDYgQEAgZHJtX3N5bmNv YmpfcHV0KHN0cnVjdCBkcm1fc3luY29iaiAqb2JqKQo+Pj4+PiDCoMKgwqDCoMKgIGtyZWZfcHV0 KCZvYmotPnJlZmNvdW50LCBkcm1fc3luY29ial9mcmVlKTsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCAt LyoqCj4+Pj4+IC0gKiBkcm1fc3luY29ial9mZW5jZV9nZXQgLSBnZXQgYSByZWZlcmVuY2UgdG8g YSBmZW5jZSBpbiBhIHN5bmMgCj4+Pj4+IG9iamVjdAo+Pj4+PiAtICogQHN5bmNvYmo6IHN5bmMg b2JqZWN0Lgo+Pj4+PiAtICoKPj4+Pj4gLSAqIFRoaXMgYWNxdWlyZXMgYWRkaXRpb25hbCByZWZl cmVuY2UgdG8gJmRybV9zeW5jb2JqLmZlbmNlIAo+Pj4+PiBjb250YWluZWQgaW4gQG9iaiwKPj4+ Pj4gLSAqIGlmIG5vdCBOVUxMLiBJdCBpcyBpbGxlZ2FsIHRvIGNhbGwgdGhpcyB3aXRob3V0IGFs cmVhZHkgCj4+Pj4+IGhvbGRpbmcgYSByZWZlcmVuY2UuCj4+Pj4+IC0gKiBObyBsb2NrcyByZXF1 aXJlZC4KPj4+Pj4gLSAqCj4+Pj4+IC0gKiBSZXR1cm5zOgo+Pj4+PiAtICogRWl0aGVyIHRoZSBm ZW5jZSBvZiBAb2JqIG9yIE5VTEwgaWYgdGhlcmUncyBub25lLgo+Pj4+PiAtICovCj4+Pj4+IC1z dGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfZmVuY2UgKgo+Pj4+PiAtZHJtX3N5bmNvYmpfZmVuY2Vf Z2V0KHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaikKPj4+Pj4gLXsKPj4+Pj4gLcKgwqDCoCBz dHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZTsKPj4+Pj4gLQo+Pj4+PiAtwqDCoMKgIHJjdV9yZWFkX2xv Y2soKTsKPj4+Pj4gLcKgwqDCoCBmZW5jZSA9IGRtYV9mZW5jZV9nZXRfcmN1X3NhZmUoJnN5bmNv YmotPmZlbmNlKTsKPj4+Pj4gLcKgwqDCoCByY3VfcmVhZF91bmxvY2soKTsKPj4+Pj4gLQo+Pj4+ PiAtwqDCoMKgIHJldHVybiBmZW5jZTsKPj4+Pj4gLX0KPj4+Pj4gLQo+Pj4+PiDCoCBzdHJ1Y3Qg ZHJtX3N5bmNvYmogKmRybV9zeW5jb2JqX2ZpbmQoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZh dGUsCj4+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHUz MiBoYW5kbGUpOwo+Pj4+PiDCoCB2b2lkIGRybV9zeW5jb2JqX3JlcGxhY2VfZmVuY2Uoc3RydWN0 IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgCj4+Pj4+IHBvaW50LAo+Pj4+PiBAQCAtMTQyLDUg KzExNiw3IEBAIGludCBkcm1fc3luY29ial9jcmVhdGUoc3RydWN0IGRybV9zeW5jb2JqIAo+Pj4+ PiAqKm91dF9zeW5jb2JqLCB1aW50MzJfdCBmbGFncywKPj4+Pj4gwqAgaW50IGRybV9zeW5jb2Jq X2dldF9oYW5kbGUoc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXZhdGUsCj4+Pj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc3luY29iaiAqc3luY29iaiwgdTMy ICpoYW5kbGUpOwo+Pj4+PiDCoCBpbnQgZHJtX3N5bmNvYmpfZ2V0X2ZkKHN0cnVjdCBkcm1fc3lu Y29iaiAqc3luY29iaiwgaW50ICpwX2ZkKTsKPj4+Pj4gK2ludCBkcm1fc3luY29ial9zZWFyY2hf ZmVuY2Uoc3RydWN0IGRybV9zeW5jb2JqICpzeW5jb2JqLCB1NjQgcG9pbnQsCj4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgZmxhZ3MsIHN0cnVjdCBkbWFfZmVuY2Ug KipmZW5jZSk7Cj4+Pj4+IMKgIMKgICNlbmRpZgo+Pj4+PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91 YXBpL2RybS9kcm0uaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtLmgKPj4+Pj4gaW5kZXggMzAwZjMz NjYzM2YyLi5jZWJkYjI1NDFlYjcgMTAwNjQ0Cj4+Pj4+IC0tLSBhL2luY2x1ZGUvdWFwaS9kcm0v ZHJtLmgKPj4+Pj4gKysrIGIvaW5jbHVkZS91YXBpL2RybS9kcm0uaAo+Pj4+PiBAQCAtNzE3LDYg KzcxNyw3IEBAIHN0cnVjdCBkcm1fcHJpbWVfaGFuZGxlIHsKPj4+Pj4gwqAgc3RydWN0IGRybV9z eW5jb2JqX2NyZWF0ZSB7Cj4+Pj4+IMKgwqDCoMKgwqAgX191MzIgaGFuZGxlOwo+Pj4+PiDCoCAj ZGVmaW5lIERSTV9TWU5DT0JKX0NSRUFURV9TSUdOQUxFRCAoMSA8PCAwKQo+Pj4+PiArI2RlZmlu ZSBEUk1fU1lOQ09CSl9DUkVBVEVfVFlQRV9USU1FTElORSAoMSA8PCAxKQo+Pj4+PiDCoMKgwqDC oMKgIF9fdTMyIGZsYWdzOwo+Pj4+PiDCoCB9Owo+Pj4+Cj4+Pgo+Pj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPj4+IGFtZC1nZnggbWFpbGluZyBsaXN0 Cj4+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4gaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cj4+Cj4+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+IGRyaS1kZXZlbCBtYWlsaW5nIGxp c3QKPj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+CgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAph bWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK