From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH v5 1/2] drm/sched: Refactor ring mirror list handling. Date: Wed, 9 Jan 2019 11:22:23 +0100 Message-ID: <6a2b45d7-0fa3-38fe-98b2-a538b663c6cc@gmail.com> References: <1545333815-29870-1-git-send-email-andrey.grodzovsky@amd.com> <109f33b9-0a24-08e3-053d-57923b4d7e7f@amd.com> <642bdffd-afe9-1a58-4f32-9ef7a4cb22b7@amd.com> <5e256bb1-d4aa-f965-2799-d68c9f925b66@gmail.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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: "Grodzovsky, Andrey" , "Koenig, Christian" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "eric-WhKQ6XTQaPysTnJN9+BGXg@public.gmane.org" , "etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Liu, Monk" List-Id: dri-devel@lists.freedesktop.org QW0gMDcuMDEuMTkgdW0gMjA6NDcgc2NocmllYiBHcm9kem92c2t5LCBBbmRyZXk6Cj4KPiBPbiAw MS8wNy8yMDE5IDA5OjEzIEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBBbSAwMy4wMS4x OSB1bSAxODo0MiBzY2hyaWViIEdyb2R6b3Zza3ksIEFuZHJleToKPj4+IE9uIDAxLzAzLzIwMTkg MTE6MjAgQU0sIEdyb2R6b3Zza3ksIEFuZHJleSB3cm90ZToKPj4+PiBPbiAwMS8wMy8yMDE5IDAz OjU0IEFNLCBLb2VuaWcsIENocmlzdGlhbiB3cm90ZToKPj4+Pj4gQW0gMjEuMTIuMTggdW0gMjE6 MzYgc2NocmllYiBHcm9kem92c2t5LCBBbmRyZXk6Cj4+Pj4+PiBPbiAxMi8yMS8yMDE4IDAxOjM3 IFBNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+Pj4+Pj4+IEFtIDIwLjEyLjE4IHVtIDIwOjIz IHNjaHJpZWIgQW5kcmV5IEdyb2R6b3Zza3k6Cj4+Pj4+Pj4+IERlY2F1cGxlIHNjaGVkIHRocmVh ZHMgc3RvcCBhbmQgc3RhcnQgYW5kIHJpbmcgbWlycm9yCj4+Pj4+Pj4+IGxpc3QgaGFuZGxpbmcg ZnJvbSB0aGUgcG9saWN5IG9mIHdoYXQgdG8gZG8gYWJvdXQgdGhlCj4+Pj4+Pj4+IGd1aWx0eSBq b2JzLgo+Pj4+Pj4+PiBXaGVuIHN0b3BwcGluZyB0aGUgc2NoZWQgdGhyZWFkIGFuZCBkZXRhY2hp bmcgc2NoZWQgZmVuY2VzCj4+Pj4+Pj4+IGZyb20gbm9uIHNpZ25hbGVkIEhXIGZlbmVzIHdhaXQg Zm9yIGFsbCBzaWduYWxlZCBIVyBmZW5jZXMKPj4+Pj4+Pj4gdG8gY29tcGxldGUgYmVmb3JlIHJl cnVubmluZyB0aGUgam9icy4KPj4+Pj4+Pj4KPj4+Pj4+Pj4gdjI6IEZpeCByZXN1Ym1pc3Npb24g b2YgZ3VpbHR5IGpvYiBpbnRvIEhXIGFmdGVyIHJlZmFjdG9yaW5nLgo+Pj4+Pj4+Pgo+Pj4+Pj4+ PiB2NDoKPj4+Pj4+Pj4gRnVsbCByZXN0YXJ0IGZvciBhbGwgdGhlIGpvYnMsIG5vdCBvbmx5IGZy b20gZ3VpbHR5IHJpbmcuCj4+Pj4+Pj4+IEV4dHJhY3Qga2FybWEgaW5jcmVhc2UgaW50byBzdGFu ZGFsb25lIGZ1bmN0aW9uLgo+Pj4+Pj4+Pgo+Pj4+Pj4+PiB2NToKPj4+Pj4+Pj4gUmV3b3JrIHdh aXRpbmcgZm9yIHNpZ25hbGVkIGpvYnMgd2l0aG91dCByZWx5aW5nIG9uIHRoZSBqb2IKPj4+Pj4+ Pj4gc3RydWN0IGl0c2VsZiBhcyB0aG9zZSBtaWdodCBhbHJlYWR5IGJlIGZyZWVkIGZvciBub24g J2d1aWx0eScKPj4+Pj4+Pj4gam9iJ3Mgc2NoZWR1bGVycy4KPj4+Pj4+Pj4gRXhwb3NlIGthcm1h IGluY3JlYXNlIHRvIGRyaXZlcnMuCj4+Pj4+Pj4+Cj4+Pj4+Pj4+IFN1Z2dlc3RlZC1ieTogQ2hy aXN0aWFuIEtvZW5pZyA8Q2hyaXN0aWFuLktvZW5pZ0BhbWQuY29tPgo+Pj4+Pj4+PiBTaWduZWQt b2ZmLWJ5OiBBbmRyZXkgR3JvZHpvdnNreSA8YW5kcmV5Lmdyb2R6b3Zza3lAYW1kLmNvbT4KPj4+ Pj4+Pj4gLS0tCj4+Pj4+Pj4+ICDCoMKgwqAgwqAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2RldmljZS5jIHzCoCAxOCArLS0KPj4+Pj4+Pj4gIMKgwqDCoCDCoCBkcml2ZXJzL2dw dS9kcm0vZXRuYXZpdi9ldG5hdml2X3NjaGVkLmPCoMKgwqAgfMKgIDExICstCj4+Pj4+Pj4+ICDC oMKgwqAgwqAgZHJpdmVycy9ncHUvZHJtL3NjaGVkdWxlci9zY2hlZF9tYWluLmPCoMKgwqDCoCB8 IDE4OAo+Pj4+Pj4+PiArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLQo+Pj4+Pj4+PiAgwqDC oMKgIMKgIGRyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHzCoCAxMiArLQo+Pj4+Pj4+PiAgwqDCoMKgIMKgIGluY2x1ZGUvZHJtL2dwdV9zY2hlZHVs ZXIuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB8wqAgMTAgKy0KPj4+Pj4+Pj4gIMKg wqDCoCDCoCA1IGZpbGVzIGNoYW5nZWQsIDE1MSBpbnNlcnRpb25zKCspLCA4OCBkZWxldGlvbnMo LSkKPj4+Pj4+Pj4KPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9kZXZpY2UuYwo+Pj4+Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9kZXZpY2UuYwo+Pj4+Pj4+PiBpbmRleCA4YTA3OGY0Li5hNGJkMmQzIDEwMDY0NAo+ Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMK Pj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5j Cj4+Pj4+Pj4+IEBAIC0zMjk4LDEyICszMjk4LDEwIEBAIHN0YXRpYyBpbnQKPj4+Pj4+Pj4gYW1k Z3B1X2RldmljZV9wcmVfYXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFyaW5nIHx8ICFyaW5nLT5zY2hl ZC50aHJlYWQpCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29u dGludWU7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgLcKgwqDCoMKgwqDCoMKgIGt0aHJlYWRfcGFyayhy aW5nLT5zY2hlZC50aHJlYWQpOwo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX3N0 b3AoJnJpbmctPnNjaGVkLCBqb2IgPyAmam9iLT5iYXNlIDogTlVMTCk7Cj4+Pj4+Pj4+ICDCoMKg wqAgwqAgLcKgwqDCoMKgwqDCoMKgIGlmIChqb2IgJiYgam9iLT5iYXNlLnNjaGVkICE9ICZyaW5n LT5zY2hlZCkKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+Pj4+ Pj4+IC0KPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9od19qb2JfcmVzZXQoJnJp bmctPnNjaGVkLCBqb2IgPyAmam9iLT5iYXNlIDoKPj4+Pj4+Pj4gTlVMTCk7Cj4+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZihqb2IpCj4+Pj4+Pj4+ICsgZHJtX3NjaGVkX2luY3JlYXNlX2thcm1h KCZqb2ItPmJhc2UpOwo+Pj4+Pj4+IFNpbmNlIHdlIGRyb3BwZWQgdGhlICJqb2IgJiYgam9iLT5i YXNlLnNjaGVkICE9ICZyaW5nLT5zY2hlZCIgY2hlY2sKPj4+Pj4+PiBhYm92ZSB0aGlzIHdpbGwg bm93IGluY3JlYXNlIHRoZSBqb2JzIGthcm1hIG11bHRpcGxlIHRpbWVzLgo+Pj4+Pj4+Cj4+Pj4+ Pj4gTWF5YmUganVzdCBtb3ZlIHRoYXQgb3V0c2lkZSBvZiB0aGUgbG9vcC4KPj4+Pj4+Pgo+Pj4+ Pj4+PiAgwqDCoMKgIMKgIMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBhZnRlciBhbGwgaHcgam9icyBh cmUgcmVzZXQsIGh3IGZlbmNlIGlzCj4+Pj4+Pj4+IG1lYW5pbmdsZXNzLAo+Pj4+Pj4+PiBzbyBm b3JjZV9jb21wbGV0aW9uICovCj4+Pj4+Pj4+IGFtZGdwdV9mZW5jZV9kcml2ZXJfZm9yY2VfY29t cGxldGlvbihyaW5nKTsKPj4+Pj4+Pj4gQEAgLTM0NTQsMTQgKzM0NTIsMTAgQEAgc3RhdGljIHZv aWQKPj4+Pj4+Pj4gYW1kZ3B1X2RldmljZV9wb3N0X2FzaWNfcmVzZXQoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYsCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghcmlu ZyB8fCAhcmluZy0+c2NoZWQudGhyZWFkKQo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgIC3CoMKgwqDCoMKgwqDC oCAvKiBvbmx5IG5lZWQgcmVjb3Zlcnkgc2NoZWQgb2YgdGhlIGdpdmVuIGpvYidzIHJpbmcKPj4+ Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBvciBhbGwgcmluZ3MgKGluIHRoZSBjYXNlIEBqb2Ig aXMgTlVMTCkKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBhZnRlciBhYm92ZSBhbWRncHVf cmVzZXQgYWNjb21wbGlzaGVkCj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+Pj4+ IC3CoMKgwqDCoMKgwqDCoCBpZiAoKCFqb2IgfHwgam9iLT5iYXNlLnNjaGVkID09ICZyaW5nLT5z Y2hlZCkgJiYKPj4+Pj4+Pj4gIWFkZXYtPmFzaWNfcmVzZXRfcmVzKQo+Pj4+Pj4+PiAtIGRybV9z Y2hlZF9qb2JfcmVjb3ZlcnkoJnJpbmctPnNjaGVkKTsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGlmICghYWRldi0+YXNpY19yZXNldF9yZXMpCj4+Pj4+Pj4+ICsgZHJtX3NjaGVkX3Jlc3VibWl0 X2pvYnMoJnJpbmctPnNjaGVkKTsKPj4+Pj4+Pj4gIMKgwqDCoCDCoCAtwqDCoMKgwqDCoMKgwqAg a3RocmVhZF91bnBhcmsocmluZy0+c2NoZWQudGhyZWFkKTsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGRybV9zY2hlZF9zdGFydCgmcmluZy0+c2NoZWQsICFhZGV2LT5hc2ljX3Jlc2V0X3Jlcyk7 Cj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgwqDCoMKg wqDCoCBpZiAoIWFtZGdwdV9kZXZpY2VfaGFzX2RjX3N1cHBvcnQoYWRldikpIHsKPj4+Pj4+Pj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfc2NoZWQuYwo+Pj4+ Pj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9ldG5hdml2L2V0bmF2aXZfc2NoZWQuYwo+Pj4+Pj4+PiBp bmRleCA0OWE2NzYzLi42ZjEyNjhmIDEwMDY0NAo+Pj4+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vZXRuYXZpdi9ldG5hdml2X3NjaGVkLmMKPj4+Pj4+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2V0bmF2aXYvZXRuYXZpdl9zY2hlZC5jCj4+Pj4+Pj4+IEBAIC0xMDksMTYgKzEwOSwxOSBAQCBz dGF0aWMgdm9pZCBldG5hdml2X3NjaGVkX3RpbWVkb3V0X2pvYihzdHJ1Y3QKPj4+Pj4+Pj4gZHJt X3NjaGVkX2pvYiAqc2NoZWRfam9iKQo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgfQo+Pj4+ Pj4+PiAgwqDCoMKgIMKgIMKgwqDCoMKgwqAgLyogYmxvY2sgc2NoZWR1bGVyICovCj4+Pj4+Pj4+ IC3CoMKgwqAga3RocmVhZF9wYXJrKGdwdS0+c2NoZWQudGhyZWFkKTsKPj4+Pj4+Pj4gLcKgwqDC oCBkcm1fc2NoZWRfaHdfam9iX3Jlc2V0KCZncHUtPnNjaGVkLCBzY2hlZF9qb2IpOwo+Pj4+Pj4+ PiArwqDCoMKgIGRybV9zY2hlZF9zdG9wKCZncHUtPnNjaGVkLCBzY2hlZF9qb2IpOwo+Pj4+Pj4+ PiArCj4+Pj4+Pj4+ICvCoMKgwqAgaWYoc2NoZWRfam9iKQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKg wqAgZHJtX3NjaGVkX2luY3JlYXNlX2thcm1hKHNjaGVkX2pvYik7Cj4+Pj4+Pj4+ICDCoMKgwqAg wqAgwqDCoMKgwqDCoCAvKiBnZXQgdGhlIEdQVSBiYWNrIGludG8gdGhlIGluaXQgc3RhdGUgKi8K Pj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIGV0bmF2aXZfY29yZV9kdW1wKGdwdSk7Cj4+Pj4+ Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoCBldG5hdml2X2dwdV9yZWNvdmVyX2hhbmcoZ3B1KTsKPj4+ Pj4+Pj4gIMKgwqDCoCDCoCArIGRybV9zY2hlZF9yZXN1Ym1pdF9qb2JzKCZncHUtPnNjaGVkKTsK Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgLyogcmVzdGFydCBzY2hlZHVs ZXIgYWZ0ZXIgR1BVIGlzIHVzYWJsZSBhZ2FpbiAqLwo+Pj4+Pj4+PiAtwqDCoMKgIGRybV9zY2hl ZF9qb2JfcmVjb3ZlcnkoJmdwdS0+c2NoZWQpOwo+Pj4+Pj4+PiAtwqDCoMKgIGt0aHJlYWRfdW5w YXJrKGdwdS0+c2NoZWQudGhyZWFkKTsKPj4+Pj4+Pj4gK8KgwqDCoCBkcm1fc2NoZWRfc3RhcnQo JmdwdS0+c2NoZWQsIHRydWUpOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgIH0KPj4+Pj4+Pj4gIMKgwqDC oCDCoCDCoCBzdGF0aWMgdm9pZCBldG5hdml2X3NjaGVkX2ZyZWVfam9iKHN0cnVjdCBkcm1fc2No ZWRfam9iCj4+Pj4+Pj4+ICpzY2hlZF9qb2IpCj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vc2NoZWR1bGVyL3NjaGVkX21haW4uYwo+Pj4+Pj4+PiBiL2RyaXZlcnMvZ3B1L2Ry bS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5jCj4+Pj4+Pj4+IGluZGV4IGRiYjY5MDYuLmI1YzViZWUg MTAwNjQ0Cj4+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFp bi5jCj4+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zY2hlZHVsZXIvc2NoZWRfbWFpbi5j Cj4+Pj4+Pj4+IEBAIC02MCw4ICs2MCw2IEBACj4+Pj4+Pj4+ICDCoMKgwqAgwqAgwqAgc3RhdGlj IHZvaWQgZHJtX3NjaGVkX3Byb2Nlc3Nfam9iKHN0cnVjdCBkbWFfZmVuY2UgKmYsCj4+Pj4+Pj4+ IHN0cnVjdAo+Pj4+Pj4+PiBkbWFfZmVuY2VfY2IgKmNiKTsKPj4+Pj4+Pj4gIMKgwqDCoCDCoCAt c3RhdGljIHZvaWQgZHJtX3NjaGVkX2V4cGVsX2pvYl91bmxvY2tlZChzdHJ1Y3QKPj4+Pj4+Pj4g ZHJtX3NjaGVkX2pvYgo+Pj4+Pj4+PiAqc19qb2IpOwo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ICDCoMKg wqAgwqAgLyoqCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoCAqIGRybV9zY2hlZF9ycV9pbml0IC0gaW5p dGlhbGl6ZSBhIGdpdmVuIHJ1biBxdWV1ZSBzdHJ1Y3QKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgICoK Pj4+Pj4+Pj4gQEAgLTMzNSw2ICszMzMsNDIgQEAgc3RhdGljIHZvaWQgZHJtX3NjaGVkX2pvYl90 aW1lZG91dChzdHJ1Y3QKPj4+Pj4+Pj4gd29ya19zdHJ1Y3QgKndvcmspCj4+Pj4+Pj4+IHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBmbGFncyk7Cj4+Pj4+Pj4+ ICDCoMKgwqAgwqAgfQo+Pj4+Pj4+IEtlcm5lbCBkb2MgaGVyZSB3b3VsZCBiZSBuaWNlIHRvIGhh dmUuCj4+Pj4+Pj4KPj4+Pj4+Pj4gK3ZvaWQgZHJtX3NjaGVkX2luY3JlYXNlX2thcm1hKHN0cnVj dCBkcm1fc2NoZWRfam9iICpiYWQpCj4+Pj4+Pj4+ICt7Cj4+Pj4+Pj4+ICvCoMKgwqAgaW50IGk7 Cj4+Pj4+Pj4+ICvCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9lbnRpdHkgKnRtcDsKPj4+Pj4+Pj4g K8KgwqDCoCBzdHJ1Y3QgZHJtX3NjaGVkX2VudGl0eSAqZW50aXR5Owo+Pj4+Pj4+PiArwqDCoMKg IHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQgPSBiYWQtPnNjaGVkOwo+Pj4+Pj4+PiAr Cj4+Pj4+Pj4+ICvCoMKgwqAgLyogZG9uJ3QgaW5jcmVhc2UgQGJhZCdzIGthcm1hIGlmIGl0J3Mg ZnJvbSBLRVJORUwgUlEsCj4+Pj4+Pj4+ICvCoMKgwqDCoCAqIGJlY2F1c2Ugc29tZXRpbWVzIEdQ VSBoYW5nIHdvdWxkIGNhdXNlIGtlcm5lbCBqb2JzIChsaWtlIFZNCj4+Pj4+Pj4+IHVwZGF0aW5n IGpvYnMpCj4+Pj4+Pj4+ICvCoMKgwqDCoCAqIGNvcnJ1cHQgYnV0IGtlZXAgaW4gbWluZCB0aGF0 IGtlcm5lbCBqb2JzIGFsd2F5cyBjb25zaWRlcmVkCj4+Pj4+Pj4+IGdvb2QuCj4+Pj4+Pj4+ICvC oMKgwqDCoCAqLwo+Pj4+Pj4+PiArwqDCoMKgIGlmIChiYWQtPnNfcHJpb3JpdHkgIT0gRFJNX1ND SEVEX1BSSU9SSVRZX0tFUk5FTCkgewo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYXRvbWljX2lu YygmYmFkLT5rYXJtYSk7Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBmb3IgKGkgPSBEUk1fU0NI RURfUFJJT1JJVFlfTUlOOyBpIDwKPj4+Pj4+Pj4gRFJNX1NDSEVEX1BSSU9SSVRZX0tFUk5FTDsK Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpKyspIHsKPj4+Pj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGRybV9zY2hlZF9ycSAqcnEgPSAmc2NoZWQtPnNjaGVk X3JxW2ldOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5f bG9jaygmcnEtPmxvY2spOwo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2Zv cl9lYWNoX2VudHJ5X3NhZmUoZW50aXR5LCB0bXAsICZycS0+ZW50aXRpZXMsCj4+Pj4+Pj4+IGxp c3QpIHsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYmFkLT5z X2ZlbmNlLT5zY2hlZHVsZWQuY29udGV4dCA9PQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgZW50aXR5LT5mZW5jZV9jb250ZXh0KSB7Cj4+Pj4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoYXRvbWljX3JlYWQoJmJh ZC0+a2FybWEpID4KPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgYmFkLT5zY2hlZC0+aGFuZ19saW1pdCkKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGVudGl0eS0+Z3VpbHR5KQo+ Pj4+Pj4+PiArIGF0b21pY19zZXQoZW50aXR5LT5ndWlsdHksIDEpOwo+Pj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCB9Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZycS0+bG9j ayk7Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgmZW50aXR5LT5saXN0ICE9 ICZycS0+ZW50aXRpZXMpCj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YnJlYWs7Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+ICvCoMKgwqAgfQo+Pj4+ Pj4+PiArfQo+Pj4+Pj4+PiArRVhQT1JUX1NZTUJPTChkcm1fc2NoZWRfaW5jcmVhc2Vfa2FybWEp Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICDCoMKgwqAgwqAgLyoqCj4+Pj4+Pj4+ICDCoMKgwqAgwqDC oCAqIGRybV9zY2hlZF9od19qb2JfcmVzZXQgLSBzdG9wIHRoZSBzY2hlZHVsZXIgaWYgaXQKPj4+ Pj4+Pj4gY29udGFpbnMgdGhlCj4+Pj4+Pj4+IGJhZCBqb2IKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKg ICoKPj4+Pj4+Pj4gQEAgLTM0MiwxMyArMzc2LDIyIEBAIHN0YXRpYyB2b2lkIGRybV9zY2hlZF9q b2JfdGltZWRvdXQoc3RydWN0Cj4+Pj4+Pj4+IHdvcmtfc3RydWN0ICp3b3JrKQo+Pj4+Pj4+PiAg wqDCoMKgIMKgwqAgKiBAYmFkOiBiYWQgc2NoZWR1bGVyIGpvYgo+Pj4+Pj4+PiAgwqDCoMKgIMKg wqAgKgo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqAgKi8KPj4+Pj4+Pj4gLXZvaWQgZHJtX3NjaGVkX2h3 X2pvYl9yZXNldChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkLAo+Pj4+Pj4+PiBzdHJ1 Y3QKPj4+Pj4+Pj4gZHJtX3NjaGVkX2pvYiAqYmFkKQo+Pj4+Pj4+PiArdm9pZCBkcm1fc2NoZWRf c3RvcChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkLCBzdHJ1Y3QKPj4+Pj4+Pj4gZHJt X3NjaGVkX2pvYiAqYmFkKQo+Pj4+Pj4+PiAgwqDCoMKgIMKgIHsKPj4+Pj4+Pj4gLcKgwqDCoCBz dHJ1Y3QgZHJtX3NjaGVkX2pvYiAqc19qb2I7Cj4+Pj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRybV9z Y2hlZF9lbnRpdHkgKmVudGl0eSwgKnRtcDsKPj4+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3Nj aGVkX2pvYiAqc19qb2IsICpsYXN0X2pvYjsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIHVu c2lnbmVkIGxvbmcgZmxhZ3M7Cj4+Pj4+Pj4+IC3CoMKgwqAgaW50IGk7Cj4+Pj4+Pj4+ICvCoMKg wqAgc3RydWN0IGRtYV9mZW5jZSAqd2FpdF9mZW5jZSA9wqAgTlVMTDsKPj4+Pj4+Pj4gK8KgwqDC oCBpbnQgcjsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArwqDCoMKgIGt0aHJlYWRfcGFyayhzY2hlZC0+ dGhyZWFkKTsKPj4+Pj4+Pj4gIMKgwqDCoCDCoCArwqDCoMKgIC8qCj4+Pj4+Pj4+ICvCoMKgwqDC oCAqIFZlcmlmeSBhbGwgdGhlIHNpZ25hbGVkIGpvYnMgaW4gbWlycm9yIGxpc3QgYXJlIHJlbW92 ZWQKPj4+Pj4+Pj4gZnJvbQo+Pj4+Pj4+PiB0aGUgcmluZwo+Pj4+Pj4+PiArwqDCoMKgwqAgKiBi eSB3YWl0aW5nIGZvciB0aGVpciByZXNwZWN0aXZlIHNjaGVkdWxlciBmZW5jZXMgdG8gc2lnbmFs Lgo+Pj4+Pj4+PiArwqDCoMKgwqAgKiBDb250aW51YWxsecKgIHJlcGVhdCB0cmF2ZXJzaW5nIHRo ZSByaW5nIG1pcnJvciBsaXN0Cj4+Pj4+Pj4+IHVudGlsIG5vCj4+Pj4+Pj4+IG1vcmUgc2lnbmFs ZWQKPj4+Pj4+Pj4gK8KgwqDCoMKgICogZmVuY2VzIGFyZSBmb3VuZAo+Pj4+Pj4+PiArwqDCoMKg wqAgKi8KPj4+Pj4+Pj4gK3JldHJ5X3dhaXQ6Cj4+Pj4+Pj4+IHNwaW5fbG9ja19pcnFzYXZlKCZz Y2hlZC0+am9iX2xpc3RfbG9jaywgZmxhZ3MpOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAg bGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNfam9iLAo+Pj4+Pj4+PiAmc2NoZWQtPnJpbmdf bWlycm9yX2xpc3QsCj4+Pj4+Pj4+IG5vZGUpIHsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKg wqDCoMKgwqAgaWYgKHNfam9iLT5zX2ZlbmNlLT5wYXJlbnQgJiYKPj4+Pj4+Pj4gQEAgLTM1Nywz NSArNDAwLDQ1IEBAIHZvaWQgZHJtX3NjaGVkX2h3X2pvYl9yZXNldChzdHJ1Y3QKPj4+Pj4+Pj4g ZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkLCBzdHJ1Y3QgZHJtX3NjaGVkX2pvCj4+Pj4+Pj4+IGRt YV9mZW5jZV9wdXQoc19qb2ItPnNfZmVuY2UtPnBhcmVudCk7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc19qb2ItPnNfZmVuY2UtPnBhcmVudCA9IE5VTEw7Cj4+ Pj4+Pj4+IGF0b21pY19kZWMoJnNjaGVkLT5od19ycV9jb3VudCk7Cj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCB9IGVsc2Ugewo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHdhaXRf ZmVuY2UgPQo+Pj4+Pj4+PiBkbWFfZmVuY2VfZ2V0KCZzX2pvYi0+c19mZW5jZS0+ZmluaXNoZWQp Owo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxhc3Rfam9iID0gc19qb2I7Cj4+ Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4+Pj4+ICDCoMKgwqAg wqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIH0KPj4+Pj4+ Pj4gLSBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZC0+am9iX2xpc3RfbG9jaywgZmxhZ3Mp Owo+Pj4+Pj4+PiAgwqDCoMKgIMKgIC3CoMKgwqAgaWYgKGJhZCAmJiBiYWQtPnNfcHJpb3JpdHkg IT0KPj4+Pj4+Pj4gRFJNX1NDSEVEX1BSSU9SSVRZX0tFUk5FTCkgewo+Pj4+Pj4+PiAtwqDCoMKg wqDCoMKgwqAgYXRvbWljX2luYygmYmFkLT5rYXJtYSk7Cj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDC oCAvKiBkb24ndCBpbmNyZWFzZSBAYmFkJ3Mga2FybWEgaWYgaXQncyBmcm9tIEtFUk5FTCBSUSwK Pj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqAgKiBiZWN1YXNlIHNvbWV0aW1lcyBHUFUgaGFuZyB3 b3VsZCBjYXVzZSBrZXJuZWwgam9icwo+Pj4+Pj4+PiAobGlrZQo+Pj4+Pj4+PiBWTSB1cGRhdGlu ZyBqb2JzKQo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoCAqIGNvcnJ1cHQgYnV0IGtlZXAgaW4g bWluZCB0aGF0IGtlcm5lbCBqb2JzIGFsd2F5cwo+Pj4+Pj4+PiBjb25zaWRlcmVkIGdvb2QuCj4+ Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgICovCj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBmb3Ig KGkgPSBEUk1fU0NIRURfUFJJT1JJVFlfTUlOOyBpIDwKPj4+Pj4+Pj4gRFJNX1NDSEVEX1BSSU9S SVRZX0tFUk5FTDsgaSsrICkgewo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1 Y3QgZHJtX3NjaGVkX3JxICpycSA9ICZzY2hlZC0+c2NoZWRfcnFbaV07Cj4+Pj4+Pj4+ICvCoMKg wqAgLyogTm8gc2lnbmFsZWQgam9icyBpbiB0aGUgcmluZywgaXRzIHNhZmUgdG8gcHJvY2VlZCB0 byBBU0lDCj4+Pj4+Pj4+IHJlc2V0ICovCj4+Pj4+Pj4+ICvCoMKgwqAgaWYgKCF3YWl0X2ZlbmNl KSB7Cj4+Pj4+Pj4+ICsgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2NoZWQtPmpvYl9saXN0X2xv Y2ssIGZsYWdzKTsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGdvdG8gZG9uZTsKPj4+Pj4+Pj4g K8KgwqDCoCB9Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bp bl9sb2NrKCZycS0+bG9jayk7Cj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpc3Rf Zm9yX2VhY2hfZW50cnlfc2FmZShlbnRpdHksIHRtcCwgJnJxLT5lbnRpdGllcywKPj4+Pj4+Pj4g bGlzdCkgewo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChiYWQt PnNfZmVuY2UtPnNjaGVkdWxlZC5jb250ZXh0ID09Cj4+Pj4+Pj4+IGVudGl0eS0+ZmVuY2VfY29u dGV4dCkgewo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGF0b21pY19yZWFkKCZiYWQtPmthcm1hKSA+Cj4+Pj4+Pj4+IGJhZC0+c2NoZWQtPmhhbmdf bGltaXQpCj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmIChlbnRpdHktPmd1aWx0eSkKPj4+Pj4+Pj4gLSBhdG9taWNfc2V0KGVudGl0eS0+ Z3VpbHR5LCAxKTsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGJyZWFrOwo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzcGluX3VubG9jaygmcnEtPmxvY2spOwo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpZiAoJmVudGl0eS0+bGlzdCAhPSAmcnEtPmVudGl0aWVzKQo+Pj4+Pj4+PiAtwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+Pj4+Pj4+PiArwqDCoMKgIC8qIFJl c3RvcmUgcmVtb3ZlZCBjYiBzaW5jZSByZW1vdmluZyBhZ2FpbiBhbHJlYWR5IHJlbW92ZWQKPj4+ Pj4+Pj4gY2IgaXMKPj4+Pj4+Pj4gdW5kZWZpbmVkICovCj4+Pj4+Pj4+ICvCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeV9yZXZlcnNlKHNfam9iLCAmc2NoZWQtPnJpbmdfbWlycm9yX2xpc3QsCj4+ Pj4+Pj4+IG5vZGUpIHsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmKHNfam9iID09IGxhc3Rf am9iKQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+Pj4+PiBOZWVk IHRvIGRvdWJsZSBjaGVjayBhZnRlciB0aGUgaG9saWRheXMsIGJ1dCB5b3Ugc2hvdWxkIGJlIGFi bGUKPj4+Pj4+PiB0byB1c2UKPj4+Pj4+PiBsaXN0X2Zvcl9lYWNoX2VudHJ5X2NvbnRpbnVlIGhl cmUuCj4+Pj4+PiBJIHRoaW5rIGl0IHNob3VsZCB3b3JrIC0ga2luZCBvZiB0cmF2ZXJzaW5nIGJh Y2sgb24gYWxsIHRoZSBqb2JzCj4+Pj4+PiB3ZSBqdXN0Cj4+Pj4+PiByZW1vdmVkIHRoZWlyIGNh bGxiYWNrcy4KPj4+Pj4gV3JhcHBpbmcgeW91ciBoZWFkIGFyb3VuZCBzdHVmZiBhZ2FpbiBhZnRl ciB0aGUgaG9saWRheXMgc29tZXRpbWVzCj4+Pj4+IHNob3dzCj4+Pj4+IG5ldyBwcm9ibGVtcyB3 ZSBoYXZlIGNvbXBsZXRlbHkgbWlzc2VkIDopCj4+Pj4+Cj4+Pj4+IEFkZGluZyB0aGUgY2FsbGJh Y2tzIGFnYWluIHdvbid0IHdvcmsgYmVjYXVzZSB3ZSBoYXZlIGZyZWVkIHVwIG91cgo+Pj4+PiBy ZWZlcmVuY2UgdG8gdGhlIGhhcmR3YXJlIGZlbmNlIGFib3ZlOgo+Pj4+Pj4gZG1hX2ZlbmNlX3B1 dChzX2pvYi0+c19mZW5jZS0+cGFyZW50KTsKPj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgc19qb2ItPnNfZmVuY2UtPnBhcmVudCA9IE5VTEw7Cj4+Pj4+IFdlIG5lZWQg dG8gZHJvcCB0aGlzIG9yIHdlIHdvdWxkIG5ldmVyIGJlIGFibGUgdG8gcmUtYWRkIHRoZSBmZW5j ZXMKPj4+PiBZZWEsIHRoYXQgYSBiaWcgbWlzcyBvbiBteSBzaWRlLi4uCj4+Pj4KPj4+Pj4gLgo+ Pj4+Pgo+Pj4+PiBCdXQgSSdtIHN0aWxsIG5vdCBzdXJlIGlmIHdlIHNob3VsZG4ndCByZWx5IG9u IHRoZSBjb3JyZWN0IG9yZGVyIG9mCj4+Pj4+IHNpZ25hbGluZyBhbmQgc2ltcGxpZnkgdGhpcyBp bnN0ZWFkLgo+Pj4+IEFzIHlvdSBzYWlkIGJlZm9yZSwgb25jZSB3ZSBzd2l0Y2hlZCB0byBzaWdu YWxpbmcgdGhlIHBhcmVudCBmcm9tIHRoZQo+Pj4+IGludGVycnVwdCBjb250ZXh0IGluc3RlYWQg b2Ygc2NoZWR1bGVkIHdvcmsgbm8gZGFuZ2VyIG9mIHJhY2UgdGhlcmUKPj4+IENvcnJlY3Rpb24g aGVyZSAtIG9uY2Ugd2Ugc3dpdGNoZWQgcmVtb3ZpbmcgdGhlIGpvYiBmcm9tIG1pcnJvcl9yaW5n Cj4+PiBsaXN0IGRpcmVjdGx5IGluIGludGVycnVwdCBjb250ZXh0IGluc3RlYWQgbGF0ZXIgZnJv bSBzY2hlZHVsZWQgd29yawo+PiBPaywgc28gbGV0J3Mgc3RpY2sgd2l0aCB0aGUgYXBwcm9hY2gg b2Ygb25seSB3YWl0aW5nIGZvciB0aGUgZmlyc3QKPj4gc2lnbmFsZWQgb25lIGZvdW5kLgo+Pgo+ PiBCdXQgd2UgbmVlZCB0byByZW1vdmUgc2V0dGluZyB0aGUgcGFyZW50IGZlbmNlIHRvIE5VTEwg b3Igb3RoZXJ3aXNlIHdlCj4+IHdvbid0IGJlIGFibGUgdG8gYWRkIHRoZSBjYWxsYmFjayBldmVy IGFnYWluLgo+Pgo+PiBDaHJpc3RpYW4uCj4gQnV0IHdlIHdpbGwgbm90IGJlIGFkZGluZyB0aGUg Y2IgYmFjayBpbiBkcm1fc2NoZWRfc3RvcCBhbnltb3JlLCBub3cgd2UKPiBhcmUgb25seSBnb2lu ZyB0byBhZGQgYmFjayB0aGUgY2IgaW4gZHJtX3NjaGVkX3N0YXJ0ciBhZnRlciByZXJ1bm5pbmcK PiB0aG9zZSBqb2JzIGluIGRybV9zY2hlZF9yZXN1Ym1pdF9qb2JzIGFuZCBhc3NpZ24gdGhlbSBh IG5ldyBwYXJlbnQgdGhlcmUKPiBhbnl3YXkuCgpZZWFoLCBidXQgd2hlbiB3ZSBmaW5kIHRoYXQg d2UgZG9uJ3QgbmVlZCB0byByZXNldCBhbnl0aGluZyBhbnltb3JlIHRoZW4gCmFkZGluZyB0aGUg Y2FsbGJhY2tzIGFnYWluIHdvbid0IGJlIHBvc3NpYmxlIGFueSBtb3JlLgoKQ2hyaXN0aWFuLgoK Pgo+IEFuZHJleQo+Cj4+PiBBbmRyZXkKPj4+Cj4+Pj4gLCBzbwo+Pj4+IHdoYXQgaWYgd2Ugc3Vi bWl0IGpvYiBBIGFuZCBhZnRlciBpdCBqb2IgQiBhbmQgQiBjb21wbGV0ZXMgYmVmb3JlIEEKPj4+ PiAobGlrZSB0aGUgc3luYyBkZXBlbmRlbmN5IHRlc3QgaW4gbGliZHJtIGFtZGdwdSB0ZXN0cyBi dXQgd2l0aG91dAo+Pj4+IGFkZGluZwo+Pj4+IGV4cGxpY2l0IGRlcGVuZGVuY3kgdG8gdGhlIHNl Y29uZCBjb21tYW5kIG9uIHRoZSBmaXJzdCkgSSBiZWxpZXZlIHRoYXQKPj4+PiBzdGlsbCBpbiB0 aGlzIGNhc2Ugam9iIEIncyBwYXJlbnQgKEhXKSBmZW5jZSB3aWxsIG5vdCBiZSBzaWduYWxlZAo+ Pj4+IGJlZm9yZQo+Pj4+IGpvYiBBIGNvbXBsZXRlcyBzaW5jZSBFT1AgZXZlbnQgaXMgbm90IHNp Z25hbGVkIHVudGlsIHRoZSBlbnRpcmUgcGlwZQo+Pj4+IGNvbXBsZXRlZCBhbmQgZmx1c2hlZCBp dCdzIGNhc2hlcyBpbmNsdWRpbmcgam9iIEEuIFNvIGZyb20gdGhpcwo+Pj4+IHNlZW1zIHRvCj4+ Pj4gbWUgdGhhdCBpbmRlZWQgaXQncyBlbm91Z2ggdG8gd2FpdCBmb3IgdGhlIGxhc3QgaW5zZXJ0 ZWQgam9iJ3MgcGFyZW50Cj4+Pj4gKEhXKSBmZW5jZSBpbiByaW5nIG1pcnJvciBsaXN0IHRvIHNp Z25hbC4KPj4+PiBMZXQgbWUga25vdyB3aGF0IHlvdSB0aGluayBvbiB0aGF0Lgo+Pj4+Cj4+Pj4g UC5TIFY1IGlzIG5vdCB0aGUgbGFzdCBpdGVyYXRpb24gYW5kIHRoZXJlIHdhcyBWNiBzZXJpZXMu Cj4+Pj4KPj4+PiBBbmRyZXkKPj4+Pgo+Pj4+PiBSZWdhcmRzLAo+Pj4+PiBDaHJpc3RpYW4uCj4+ Pj4+Cj4+Pj4+PiBBbmRyZXkKPj4+Pj4+Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgIGlmIChzX2pvYi0+c19mZW5jZS0+cGFyZW50KSB7Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHIgPSBkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKHNfam9iLT5zX2ZlbmNlLT5wYXJl bnQsCj4+Pj4+Pj4+ICsgJnNfam9iLT5zX2ZlbmNlLT5jYiwKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3NjaGVkX3Byb2Nl c3Nfam9iKTsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIpCj4+Pj4+Pj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJNX0VSUk9SKCJmZW5jZSByZXN0b3Jl IGNhbGxiYWNrIGZhaWxlZCAoJWQpXG4iLAo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcik7 Cj4+Pj4+Pj4gV2hlbiB5b3UgZmFpbCB0byBhZGQgdGhlIGNhbGxiYWNrIHRoaXMgbWVhbnMgdGhh dCB5b3UgbmVlZCB0byBjYWxsCj4+Pj4+Pj4gY2FsbCBkcm1fc2NoZWRfcHJvY2Vzc19qb2IgbWFu dWFsbHkgaGVyZS4KPj4+Pj4+Pgo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+ICsgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc2NoZWQtPmpvYl9saXN0X2xvY2ssIGZsYWdzKTsKPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiArwqDCoMKgIGRtYV9mZW5jZV93YWl0KHdhaXRfZmVuY2UsIGZhbHNlKTsKPj4+Pj4+Pj4gK8Kg wqDCoCBkbWFfZmVuY2VfcHV0KHdhaXRfZmVuY2UpOwo+Pj4+Pj4+PiArwqDCoMKgIHdhaXRfZmVu Y2UgPSBOVUxMOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICvCoMKgwqAgZ290byByZXRyeV93YWl0Owo+ Pj4+Pj4+PiArCj4+Pj4+Pj4+ICtkb25lOgo+Pj4+Pj4+PiArwqDCoMKgIHJldHVybjsKPj4+Pj4+ PiBEcm9wIHRoZSBkb25lOiBsYWJlbCBhbmQgcmV0dXJuIGRpcmVjdGx5IGFib3ZlLgo+Pj4+Pj4+ Cj4+Pj4+Pj4gQXBhcnQgZnJvbSBhbGwgdGhvc2Ugbml0IHBpY2tzIHRoYXQgc3RhcnRzIHRvIGxv b2sgbGlrZSBpdCBzaG91bGQKPj4+Pj4+PiB3b3JrLAo+Pj4+Pj4+IENocmlzdGlhbi4KPj4+Pj4+ Pgo+Pj4+Pj4+PiAgwqDCoMKgIMKgIH0KPj4+Pj4+Pj4gLUVYUE9SVF9TWU1CT0woZHJtX3NjaGVk X2h3X2pvYl9yZXNldCk7Cj4+Pj4+Pj4+ICtFWFBPUlRfU1lNQk9MKGRybV9zY2hlZF9zdG9wKTsK Pj4+Pj4+Pj4gIMKgwqDCoCDCoCDCoCAvKioKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgICogZHJtX3Nj aGVkX2pvYl9yZWNvdmVyeSAtIHJlY292ZXIgam9icyBhZnRlciBhIHJlc2V0Cj4+Pj4+Pj4+IEBA IC0zOTMsMzMgKzQ0NiwyMSBAQCBFWFBPUlRfU1lNQk9MKGRybV9zY2hlZF9od19qb2JfcmVzZXQp Owo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqAgKiBAc2NoZWQ6IHNjaGVkdWxlciBpbnN0YW5jZQo+Pj4+ Pj4+PiAgwqDCoMKgIMKgwqAgKgo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqAgKi8KPj4+Pj4+Pj4gLXZv aWQgZHJtX3NjaGVkX2pvYl9yZWNvdmVyeShzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVk KQo+Pj4+Pj4+PiArdm9pZCBkcm1fc2NoZWRfc3RhcnQoc3RydWN0IGRybV9ncHVfc2NoZWR1bGVy ICpzY2hlZCwgYm9vbAo+Pj4+Pj4+PiBmdWxsX3JlY292ZXJ5KQo+Pj4+Pj4+PiAgwqDCoMKgIMKg IHsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfam9iICpzX2pv YiwgKnRtcDsKPj4+Pj4+Pj4gLcKgwqDCoCBib29sIGZvdW5kX2d1aWx0eSA9IGZhbHNlOwo+Pj4+ Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBmbGFnczsKPj4+Pj4+Pj4gIMKg wqDCoCDCoMKgwqDCoMKgIGludCByOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgICvCoMKgwqAgaWYgKCFm dWxsX3JlY292ZXJ5KQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZ290byB1bnBhcms7Cj4+Pj4+ Pj4+ICsKPj4+Pj4+Pj4gc3Bpbl9sb2NrX2lycXNhdmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBm bGFncyk7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoc19qb2IsIHRtcCwKPj4+Pj4+Pj4gJnNjaGVkLT5yaW5nX21pcnJvcl9saXN0LAo+Pj4+Pj4+ PiBub2RlKSB7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1f c2NoZWRfZmVuY2UgKnNfZmVuY2UgPSBzX2pvYi0+c19mZW5jZTsKPj4+Pj4+Pj4gLcKgwqDCoMKg wqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlOwo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAg dWludDY0X3QgZ3VpbHR5X2NvbnRleHQ7Cj4+Pj4+Pj4+IC0KPj4+Pj4+Pj4gLcKgwqDCoMKgwqDC oMKgIGlmICghZm91bmRfZ3VpbHR5ICYmIGF0b21pY19yZWFkKCZzX2pvYi0+a2FybWEpID4KPj4+ Pj4+Pj4gc2NoZWQtPmhhbmdfbGltaXQpIHsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZm91bmRfZ3VpbHR5ID0gdHJ1ZTsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z3VpbHR5X2NvbnRleHQgPSBzX2pvYi0+c19mZW5jZS0+c2NoZWR1bGVkLmNvbnRleHQ7Cj4+Pj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+IC0KPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKg IGlmIChmb3VuZF9ndWlsdHkgJiYgc19qb2ItPnNfZmVuY2UtPnNjaGVkdWxlZC5jb250ZXh0ID09 Cj4+Pj4+Pj4+IGd1aWx0eV9jb250ZXh0KQo+Pj4+Pj4+PiAtIGRtYV9mZW5jZV9zZXRfZXJyb3Io JnNfZmVuY2UtPmZpbmlzaGVkLCAtRUNBTkNFTEVEKTsKPj4+Pj4+Pj4gLQo+Pj4+Pj4+PiAtIHNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJnNjaGVkLT5qb2JfbGlzdF9sb2NrLCBmbGFncyk7Cj4+Pj4+ Pj4+IC3CoMKgwqDCoMKgwqDCoCBmZW5jZSA9IHNjaGVkLT5vcHMtPnJ1bl9qb2Ioc19qb2IpOwo+ Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgYXRvbWljX2luYygmc2NoZWQtPmh3X3JxX2NvdW50KTsK Pj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gc19qb2It PnNfZmVuY2UtPnBhcmVudDsKPj4+Pj4+Pj4gIMKgwqDCoCDCoCDCoMKgwqDCoMKgwqDCoMKgwqAg aWYgKGZlbmNlKSB7Cj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNfZmVuY2UtPnBh cmVudCA9IGRtYV9mZW5jZV9nZXQoZmVuY2UpOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHIgPSBkbWFfZmVuY2VfYWRkX2NhbGxiYWNrKGZlbmNlLCAmc19mZW5j ZS0+Y2IsCj4+Pj4+Pj4+IGRybV9zY2hlZF9wcm9jZXNzX2pvYik7Cj4+Pj4+Pj4+ICDCoMKgwqAg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIgPT0gLUVOT0VOVCkKPj4+Pj4+Pj4gQEAg LTQyNywxOCArNDY4LDQ3IEBAIHZvaWQgZHJtX3NjaGVkX2pvYl9yZWNvdmVyeShzdHJ1Y3QKPj4+ Pj4+Pj4gZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkKQo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKHIpCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoImZlbmNlIGFkZCBjYWxsYmFjayBm YWlsZWQgKCVkKVxuIiwKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIpOwo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBkbWFfZmVuY2VfcHV0KGZlbmNlKTsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7 Cj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChzX2ZlbmNlLT5maW5pc2hlZC5l cnJvciA8IDApCj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZHJtX3Nj aGVkX2V4cGVsX2pvYl91bmxvY2tlZChzX2pvYik7Cj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9 IGVsc2UKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkcm1fc2No ZWRfcHJvY2Vzc19qb2IoTlVMTCwgJnNfZmVuY2UtPmNiKTsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDC oMKgIH0KPj4+Pj4+Pj4gLSBzcGluX2xvY2tfaXJxc2F2ZSgmc2NoZWQtPmpvYl9saXN0X2xvY2ss IGZsYWdzKTsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIH0KPj4+Pj4+Pj4gKwo+Pj4+Pj4+ PiAgwqDCoMKgIMKgwqDCoMKgwqAgZHJtX3NjaGVkX3N0YXJ0X3RpbWVvdXQoc2NoZWQpOwo+Pj4+ Pj4+PiBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzY2hlZC0+am9iX2xpc3RfbG9jaywgZmxhZ3Mp Owo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICt1bnBhcms6Cj4+Pj4+Pj4+ICvCoMKgwqAga3RocmVhZF91 bnBhcmsoc2NoZWQtPnRocmVhZCk7Cj4+Pj4+Pj4+ICt9Cj4+Pj4+Pj4+ICtFWFBPUlRfU1lNQk9M KGRybV9zY2hlZF9zdGFydCk7Cj4+Pj4+Pj4+ICsKPj4+Pj4+Pj4gKy8qKgo+Pj4+Pj4+PiArICog ZHJtX3NjaGVkX3Jlc3VibWl0X2pvYnMgLSBoZWxwZXIgdG8gcmVsdW5jaCBqb2IgZnJvbSBtaXJy b3IKPj4+Pj4+Pj4gcmluZwo+Pj4+Pj4+PiBsaXN0Cj4+Pj4+Pj4+ICsgKgo+Pj4+Pj4+PiArICog QHNjaGVkOiBzY2hlZHVsZXIgaW5zdGFuY2UKPj4+Pj4+Pj4gKyAqCj4+Pj4+Pj4+ICsgKi8KPj4+ Pj4+Pj4gK3ZvaWQgZHJtX3NjaGVkX3Jlc3VibWl0X2pvYnMoc3RydWN0IGRybV9ncHVfc2NoZWR1 bGVyICpzY2hlZCkKPj4+Pj4+Pj4gK3sKPj4+Pj4+Pj4gK8KgwqDCoCBzdHJ1Y3QgZHJtX3NjaGVk X2pvYiAqc19qb2IsICp0bXA7Cj4+Pj4+Pj4+ICvCoMKgwqAgdWludDY0X3QgZ3VpbHR5X2NvbnRl eHQ7Cj4+Pj4+Pj4+ICvCoMKgwqAgYm9vbCBmb3VuZF9ndWlsdHkgPSBmYWxzZTsKPj4+Pj4+Pj4g Kwo+Pj4+Pj4+PiArwqDCoMKgIC8qVE9ETyBETyB3ZSBuZWVkIHNwaW5sb2NrIGhlcmUgPyAqLwo+ Pj4+Pj4+PiArwqDCoMKgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShzX2pvYiwgdG1wLCAmc2No ZWQtPnJpbmdfbWlycm9yX2xpc3QsCj4+Pj4+Pj4+IG5vZGUpIHsKPj4+Pj4+Pj4gK8KgwqDCoMKg wqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfZmVuY2UgKnNfZmVuY2UgPSBzX2pvYi0+c19mZW5jZTsK Pj4+Pj4+Pj4gKwo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKCFmb3VuZF9ndWlsdHkgJiYg YXRvbWljX3JlYWQoJnNfam9iLT5rYXJtYSkgPgo+Pj4+Pj4+PiBzY2hlZC0+aGFuZ19saW1pdCkg ewo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3VuZF9ndWlsdHkgPSB0cnVlOwo+ Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBndWlsdHlfY29udGV4dCA9IHNfam9iLT5z X2ZlbmNlLT5zY2hlZHVsZWQuY29udGV4dDsKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ Pj4+Pj4gKwo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGZvdW5kX2d1aWx0eSAmJiBzX2pv Yi0+c19mZW5jZS0+c2NoZWR1bGVkLmNvbnRleHQgPT0KPj4+Pj4+Pj4gZ3VpbHR5X2NvbnRleHQp Cj4+Pj4+Pj4+ICsgZG1hX2ZlbmNlX3NldF9lcnJvcigmc19mZW5jZS0+ZmluaXNoZWQsIC1FQ0FO Q0VMRUQpOwo+Pj4+Pj4+PiArCj4+Pj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzX2pvYi0+c19mZW5j ZS0+cGFyZW50ID0gc2NoZWQtPm9wcy0+cnVuX2pvYihzX2pvYik7Cj4+Pj4+Pj4+ICvCoMKgwqDC oMKgwqDCoCBhdG9taWNfaW5jKCZzY2hlZC0+aHdfcnFfY291bnQpOwo+Pj4+Pj4+PiArwqDCoMKg IH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoCB9Cj4+Pj4+Pj4+IC1FWFBPUlRfU1lNQk9MKGRybV9zY2hl ZF9qb2JfcmVjb3ZlcnkpOwo+Pj4+Pj4+PiArRVhQT1JUX1NZTUJPTChkcm1fc2NoZWRfcmVzdWJt aXRfam9icyk7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgwqAgLyoqCj4+Pj4+Pj4+ICDCoMKgwqAgwqDC oCAqIGRybV9zY2hlZF9qb2JfaW5pdCAtIGluaXQgYSBzY2hlZHVsZXIgam9iCj4+Pj4+Pj4+IEBA IC02MzQsMjYgKzcwNCwxNCBAQCBzdGF0aWMgaW50IGRybV9zY2hlZF9tYWluKHZvaWQgKnBhcmFt KQo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgRFJN X0VSUk9SKCJmZW5jZSBhZGQgY2FsbGJhY2sgZmFpbGVkICglZClcbiIsCj4+Pj4+Pj4+ICDCoMKg wqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByKTsKPj4+ Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBkbWFfZmVuY2VfcHV0KGZl bmNlKTsKPj4+Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChzX2ZlbmNlLT5maW5pc2hlZC5lcnJvciA8IDApCj4+Pj4+Pj4+ IC0gZHJtX3NjaGVkX2V4cGVsX2pvYl91bmxvY2tlZChzY2hlZF9qb2IpOwo+Pj4+Pj4+PiArwqDC oMKgwqDCoMKgwqAgfSBlbHNlCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgZHJtX3NjaGVkX3Byb2Nlc3Nfam9iKE5VTEwsICZzX2ZlbmNlLT5jYik7Cj4+Pj4+Pj4+ IC3CoMKgwqDCoMKgwqDCoCB9Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgwqDCoMKgwqDCoMKgwqDCoMKg IHdha2VfdXAoJnNjaGVkLT5qb2Jfc2NoZWR1bGVkKTsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDC oMKgIH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+Pj4+PiAgwqDC oMKgIMKgIH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoCAtc3RhdGljIHZvaWQgZHJtX3NjaGVkX2V4cGVs X2pvYl91bmxvY2tlZChzdHJ1Y3QKPj4+Pj4+Pj4gZHJtX3NjaGVkX2pvYiAqc19qb2IpCj4+Pj4+ Pj4+IC17Cj4+Pj4+Pj4+IC3CoMKgwqAgc3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCA9 IHNfam9iLT5zY2hlZDsKPj4+Pj4+Pj4gLQo+Pj4+Pj4+PiAtwqDCoMKgIHNwaW5fbG9jaygmc2No ZWQtPmpvYl9saXN0X2xvY2spOwo+Pj4+Pj4+PiAtwqDCoMKgIGxpc3RfZGVsX2luaXQoJnNfam9i LT5ub2RlKTsKPj4+Pj4+Pj4gLcKgwqDCoCBzcGluX3VubG9jaygmc2NoZWQtPmpvYl9saXN0X2xv Y2spOwo+Pj4+Pj4+PiAtfQo+Pj4+Pj4+PiAtCj4+Pj4+Pj4+ICDCoMKgwqAgwqAgLyoqCj4+Pj4+ Pj4+ICDCoMKgwqAgwqDCoCAqIGRybV9zY2hlZF9pbml0IC0gSW5pdCBhIGdwdSBzY2hlZHVsZXIg aW5zdGFuY2UKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgICoKPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMKPj4+Pj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0v djNkL3YzZF9zY2hlZC5jCj4+Pj4+Pj4+IGluZGV4IDQ0NWIyZWYuLmY3NmQ5ZWQgMTAwNjQ0Cj4+ Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS92M2QvdjNkX3NjaGVkLmMKPj4+Pj4+Pj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL3YzZC92M2Rfc2NoZWQuYwo+Pj4+Pj4+PiBAQCAtMTc4LDE4ICsx NzgsMjIgQEAgdjNkX2pvYl90aW1lZG91dChzdHJ1Y3QgZHJtX3NjaGVkX2pvYgo+Pj4+Pj4+PiAq c2NoZWRfam9iKQo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgZm9yIChxID0gMDsgcSA8IFYz RF9NQVhfUVVFVUVTOyBxKyspIHsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgwqDCoMKgwqAg c3RydWN0IGRybV9ncHVfc2NoZWR1bGVyICpzY2hlZCA9Cj4+Pj4+Pj4+ICZ2M2QtPnF1ZXVlW3Fd LnNjaGVkOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgIC3CoMKgwqDCoMKgwqDCoCBrdGhyZWFkX3Bhcmso c2NoZWQtPnRocmVhZCk7Cj4+Pj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfaHdfam9i X3Jlc2V0KHNjaGVkLCAoc2NoZWRfam9iLT5zY2hlZCA9PSBzY2hlZCA/Cj4+Pj4+Pj4+ICvCoMKg wqDCoMKgwqDCoCBkcm1fc2NoZWRfc3RvcChzY2hlZCwgKHNjaGVkX2pvYi0+c2NoZWQgPT0gc2No ZWQgPwo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNjaGVkX2pvYiA6IE5VTEwpKTsKPj4+Pj4+Pj4gKwo+Pj4+ Pj4+PiArwqDCoMKgwqDCoMKgwqAgaWYoc2NoZWRfam9iKQo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBkcm1fc2NoZWRfaW5jcmVhc2Vfa2FybWEoc2NoZWRfam9iKTsKPj4+Pj4+Pj4g IMKgwqDCoCDCoMKgwqDCoMKgIH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoCDCoMKgwqDCoMKgIC8qIGdl dCB0aGUgR1BVIGJhY2sgaW50byB0aGUgaW5pdCBzdGF0ZSAqLwo+Pj4+Pj4+PiAgwqDCoMKgIMKg wqDCoMKgwqAgdjNkX3Jlc2V0KHYzZCk7Cj4+Pj4+Pj4+ICDCoMKgwqAgwqAgK8KgwqDCoCBmb3Ig KHEgPSAwOyBxIDwgVjNEX01BWF9RVUVVRVM7IHErKykKPj4+Pj4+Pj4gK8KgwqDCoMKgwqDCoMKg IGRybV9zY2hlZF9yZXN1Ym1pdF9qb2JzKHNjaGVkX2pvYi0+c2NoZWQpOwo+Pj4+Pj4+PiArCj4+ Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoCAvKiBVbmJsb2NrIHNjaGVkdWxlcnMgYW5kIHJlc3Rh cnQgdGhlaXIgam9icy4gKi8KPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIGZvciAocSA9IDA7 IHEgPCBWM0RfTUFYX1FVRVVFUzsgcSsrKSB7Cj4+Pj4+Pj4+IC0gZHJtX3NjaGVkX2pvYl9yZWNv dmVyeSgmdjNkLT5xdWV1ZVtxXS5zY2hlZCk7Cj4+Pj4+Pj4+IC0ga3RocmVhZF91bnBhcmsodjNk LT5xdWV1ZVtxXS5zY2hlZC50aHJlYWQpOwo+Pj4+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZHJtX3Nj aGVkX3N0YXJ0KCZ2M2QtPnF1ZXVlW3FdLnNjaGVkLCB0cnVlKTsKPj4+Pj4+Pj4gIMKgwqDCoCDC oMKgwqDCoMKgIH0KPj4+Pj4+Pj4gIMKgwqDCoCDCoCDCoMKgwqDCoMKgIG11dGV4X3VubG9jaygm djNkLT5yZXNldF9sb2NrKTsKPj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2dwdV9z Y2hlZHVsZXIuaAo+Pj4+Pj4+PiBiL2luY2x1ZGUvZHJtL2dwdV9zY2hlZHVsZXIuaAo+Pj4+Pj4+ PiBpbmRleCA0N2UxOTc5Li41YWIyZDk3IDEwMDY0NAo+Pj4+Pj4+PiAtLS0gYS9pbmNsdWRlL2Ry bS9ncHVfc2NoZWR1bGVyLmgKPj4+Pj4+Pj4gKysrIGIvaW5jbHVkZS9kcm0vZ3B1X3NjaGVkdWxl ci5oCj4+Pj4+Pj4+IEBAIC0xNzUsNiArMTc1LDcgQEAgc3RydWN0IGRybV9zY2hlZF9mZW5jZQo+ Pj4+Pj4+PiAqdG9fZHJtX3NjaGVkX2ZlbmNlKHN0cnVjdAo+Pj4+Pj4+PiBkbWFfZmVuY2UgKmYp Owo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqAgKsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZmlu aXNoZWQgdG8gcmVtb3ZlIHRoZSBqb2IgZnJvbSB0aGUKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgICog QGRybV9ncHVfc2NoZWR1bGVyLnJpbmdfbWlycm9yX2xpc3QuCj4+Pj4+Pj4+ICDCoMKgwqAgwqDC oCAqIEBub2RlOiB1c2VkIHRvIGFwcGVuZCB0aGlzIHN0cnVjdCB0byB0aGUKPj4+Pj4+Pj4gQGRy bV9ncHVfc2NoZWR1bGVyLnJpbmdfbWlycm9yX2xpc3QuCj4+Pj4+Pj4+ICsgKiBAZmluaXNoX25v ZGU6IHVzZWQgaW4gYSBsaXN0IHRvIHdhaXQgb24gYmVmb3JlIHJlc2V0dGluZyB0aGUKPj4+Pj4+ Pj4gc2NoZWR1bGVyCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoCAqIEBpZDogYSB1bmlxdWUgaWQgYXNz aWduZWQgdG8gZWFjaCBqb2Igc2NoZWR1bGVkIG9uIHRoZQo+Pj4+Pj4+PiBzY2hlZHVsZXIuCj4+ Pj4+Pj4+ICDCoMKgwqAgwqDCoCAqIEBrYXJtYTogaW5jcmVtZW50IG9uIGV2ZXJ5IGhhbmcgY2F1 c2VkIGJ5IHRoaXMgam9iLiBJZgo+Pj4+Pj4+PiB0aGlzCj4+Pj4+Pj4+IGV4Y2VlZHMgdGhlIGhh bmcKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgICrCoMKgwqDCoMKgwqDCoMKgIGxpbWl0IG9mIHRoZSBz Y2hlZHVsZXIgdGhlbiB0aGUgam9iIGlzIG1hcmtlZAo+Pj4+Pj4+PiBndWlsdHkgYW5kCj4+Pj4+ Pj4+IHdpbGwgbm90Cj4+Pj4+Pj4+IEBAIC0xOTMsNiArMTk0LDcgQEAgc3RydWN0IGRybV9zY2hl ZF9qb2Igewo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgc3RydWN0IGRtYV9mZW5jZV9jYsKg wqDCoMKgwqDCoMKgIGZpbmlzaF9jYjsKPj4+Pj4+Pj4gIMKgwqDCoCDCoMKgwqDCoMKgIHN0cnVj dCB3b3JrX3N0cnVjdMKgwqDCoMKgwqDCoMKgIGZpbmlzaF93b3JrOwo+Pj4+Pj4+PiAgwqDCoMKg IMKgwqDCoMKgwqAgc3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgIG5vZGU7Cj4+Pj4+Pj4+ ICvCoMKgwqAgc3RydWN0IGxpc3RfaGVhZMKgwqDCoMKgwqDCoMKgIGZpbmlzaF9ub2RlOwo+Pj4+ Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgdWludDY0X3TCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlk Owo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgYXRvbWljX3TCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGthcm1hOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgwqDCoMKgwqAgZW51bSBkcm1fc2NoZWRfcHJp b3JpdHnCoMKgwqDCoMKgwqDCoCBzX3ByaW9yaXR5Owo+Pj4+Pj4+PiBAQCAtMjk4LDkgKzMwMCwx MSBAQCBpbnQgZHJtX3NjaGVkX2pvYl9pbml0KHN0cnVjdCBkcm1fc2NoZWRfam9iCj4+Pj4+Pj4+ ICpqb2IsCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg dm9pZCAqb3duZXIpOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgIHZvaWQgZHJtX3NjaGVkX2pvYl9jbGVh bnVwKHN0cnVjdCBkcm1fc2NoZWRfam9iICpqb2IpOwo+Pj4+Pj4+PiAgwqDCoMKgIMKgIHZvaWQg ZHJtX3NjaGVkX3dha2V1cChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkKTsKPj4+Pj4+ Pj4gLXZvaWQgZHJtX3NjaGVkX2h3X2pvYl9yZXNldChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIg KnNjaGVkLAo+Pj4+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBk cm1fc2NoZWRfam9iICpqb2IpOwo+Pj4+Pj4+PiAtdm9pZCBkcm1fc2NoZWRfam9iX3JlY292ZXJ5 KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQpOwo+Pj4+Pj4+PiArdm9pZCBkcm1fc2No ZWRfc3RvcChzdHJ1Y3QgZHJtX2dwdV9zY2hlZHVsZXIgKnNjaGVkLAo+Pj4+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZHJtX3NjaGVkX2pvYiAqam9iKTsKPj4+Pj4+Pj4gK3Zv aWQgZHJtX3NjaGVkX3N0YXJ0KHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQsIGJvb2wK Pj4+Pj4+Pj4gZnVsbF9yZWNvdmVyeSk7Cj4+Pj4+Pj4+ICt2b2lkIGRybV9zY2hlZF9yZXN1Ym1p dF9qb2JzKHN0cnVjdCBkcm1fZ3B1X3NjaGVkdWxlciAqc2NoZWQpOwo+Pj4+Pj4+PiArdm9pZCBk cm1fc2NoZWRfaW5jcmVhc2Vfa2FybWEoc3RydWN0IGRybV9zY2hlZF9qb2IgKmJhZCk7Cj4+Pj4+ Pj4+ICDCoMKgwqAgwqAgYm9vbCBkcm1fc2NoZWRfZGVwZW5kZW5jeV9vcHRpbWl6ZWQoc3RydWN0 IGRtYV9mZW5jZSogZmVuY2UsCj4+Pj4+Pj4+ICDCoMKgwqAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkcm1fc2NoZWRfZW50aXR5ICplbnRpdHkpOwo+ Pj4+Pj4+PiAgwqDCoMKgIMKgIHZvaWQgZHJtX3NjaGVkX2ZhdWx0KHN0cnVjdCBkcm1fZ3B1X3Nj aGVkdWxlciAqc2NoZWQpOwo+Pj4+Pj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCj4+Pj4+Pj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QKPj4+Pj4+PiBhbWQt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+Pj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0 b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo+Pj4+PiBfX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4+PiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+ Pj4+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+PiBodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngKPj4+PiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4+IGRyaS1kZXZlbCBtYWlsaW5n IGxpc3QKPj4+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4gaHR0cHM6Ly9s aXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPj4+IF9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+PiBkcmktZGV2ZWwg bWFpbGluZyBsaXN0Cj4+PiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+PiBodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbAo+IF9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4gYW1kLWdmeCBt YWlsaW5nIGxpc3QKPiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlz dHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QK YW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==