From mboxrd@z Thu Jan 1 00:00:00 1970 From: Felix Kuehling Subject: Re: [PATCH] drm/amdgpu: use HMM mirror callback to replace mmu notifier v4 Date: Fri, 14 Sep 2018 16:21:57 -0400 Message-ID: References: <1536871954-8451-1-git-send-email-Philip.Yang@amd.com> <9d6717ac-23f0-7beb-6e41-58c6e32acdf8@amd.com> <58bc3bb9-b7b1-a32f-e355-c78a23d95215@gmail.com> <383388c8-1bff-48d9-1044-f16e66bcbfa5@amd.com> <3850fbeb-5d91-9c14-43c9-45d5d058e15b@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <3850fbeb-5d91-9c14-43c9-45d5d058e15b-5C7GfCeVMHo@public.gmane.org> Content-Language: en-CA List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?Q?Christian_K=c3=b6nig?= , Philip Yang , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Jerome Glisse T24gMjAxOC0wOS0xNCAwMTo1MiBQTSwgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBBbSAxNC4w OS4yMDE4IHVtIDE5OjQ3IHNjaHJpZWIgUGhpbGlwIFlhbmc6Cj4+IE9uIDIwMTgtMDktMTQgMDM6 NTEgQU0sIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4+PiBBbSAxMy4wOS4yMDE4IHVtIDIzOjUx IHNjaHJpZWIgRmVsaXggS3VlaGxpbmc6Cj4+Pj4gT24gMjAxOC0wOS0xMyAwNDo1MiBQTSwgUGhp bGlwIFlhbmcgd3JvdGU6Cj4+Pj4+IFJlcGxhY2Ugb3VyIE1NVSBub3RpZmllciB3aXRoCj4+Pj4+ IGhtbV9taXJyb3Jfb3BzLnN5bmNfY3B1X2RldmljZV9wYWdldGFibGVzCj4+Pj4+IGNhbGxiYWNr LiBFbmFibGUgQ09ORklHX0hNTSBhbmQgQ09ORklHX0hNTV9NSVJST1IgYXMgYSBkZXBlbmRlbmN5 IGluCj4+Pj4+IERSTV9BTURHUFVfVVNFUlBUUiBLY29uZmlnLgo+Pj4+Pgo+Pj4+PiBJdCBzdXBw b3J0cyBib3RoIEtGRCB1c2VycHRyIGFuZCBnZnggdXNlcnB0ciBwYXRocy4KPj4+Pj4KPj4+Pj4g VGhpcyBkZXBlbmRzIG9uIHNldmVyYWwgSE1NIHBhdGNoc2V0IGZyb20gSsOpcsO0bWUgR2xpc3Nl IHF1ZXVlZCBmb3IKPj4+Pj4gdXBzdHJlYW0uCj4+Pj4+Cj4+Pj4+IENoYW5nZS1JZDogSWU2MmMz YzVlM2M1Yjg1MjFhYjNiNDM4ZDFlZmYyYWEyYTAwMzgzNWUKPj4+Pj4gU2lnbmVkLW9mZi1ieTog UGhpbGlwIFlhbmcgPFBoaWxpcC5ZYW5nQGFtZC5jb20+Cj4+Pj4+IC0tLQo+Pj4+PiDCoCBkcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnwqDCoMKgwqAgfMKgwqAgNiArLQo+Pj4+PiDC oCBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9NYWtlZmlsZcKgwqDCoCB8wqDCoCAyICstCj4+ Pj4+IMKgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jIHwgMTIxCj4+Pj4+ ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLQo+Pj4+PiDCoCBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCB8wqDCoCAyICstCj4+Pj4+IMKgIDQgZmlsZXMgY2hh bmdlZCwgNTYgaW5zZXJ0aW9ucygrKSwgNzUgZGVsZXRpb25zKC0pCj4+Pj4+Cj4+Pj4+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnCj4+Pj4+IGIvZHJpdmVy cy9ncHUvZHJtL2FtZC9hbWRncHUvS2NvbmZpZwo+Pj4+PiBpbmRleCA5MjIxZTU0Li45NjBhNjMz IDEwMDY0NAo+Pj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9LY29uZmlnCj4+ Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L0tjb25maWcKPj4+Pj4gQEAgLTI2 LDEwICsyNiwxMCBAQCBjb25maWcgRFJNX0FNREdQVV9DSUsKPj4+Pj4gwqAgY29uZmlnIERSTV9B TURHUFVfVVNFUlBUUgo+Pj4+PiDCoMKgwqDCoMKgIGJvb2wgIkFsd2F5cyBlbmFibGUgdXNlcnB0 ciB3cml0ZSBzdXBwb3J0Igo+Pj4+PiDCoMKgwqDCoMKgIGRlcGVuZHMgb24gRFJNX0FNREdQVQo+ Pj4+PiAtwqDCoMKgIHNlbGVjdCBNTVVfTk9USUZJRVIKPj4+Pj4gK8KgwqDCoCBzZWxlY3QgSE1N X01JUlJPUgo+Pj4+PiDCoMKgwqDCoMKgIGhlbHAKPj4+Pj4gLcKgwqDCoMKgwqAgVGhpcyBvcHRp b24gc2VsZWN0cyBDT05GSUdfTU1VX05PVElGSUVSIGlmIGl0IGlzbid0IGFscmVhZHkKPj4+Pj4g LcKgwqDCoMKgwqAgc2VsZWN0ZWQgdG8gZW5hYmxlZCBmdWxsIHVzZXJwdHIgc3VwcG9ydC4KPj4+ Pj4gK8KgwqDCoMKgwqAgVGhpcyBvcHRpb24gc2VsZWN0cyBDT05GSUdfSE1NIGFuZCBDT05GSUdf SE1NX01JUlJPUiBpZiBpdAo+Pj4+PiArwqDCoMKgwqDCoCBpc24ndCBhbHJlYWR5IHNlbGVjdGVk IHRvIGVuYWJsZWQgZnVsbCB1c2VycHRyIHN1cHBvcnQuCj4+Pj4+IMKgIMKgIGNvbmZpZyBEUk1f QU1ER1BVX0dBUlRfREVCVUdGUwo+Pj4+PiDCoMKgwqDCoMKgIGJvb2wgIkFsbG93IEdBUlQgYWNj ZXNzIHRocm91Z2ggZGVidWdmcyIKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L01ha2VmaWxlCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFr ZWZpbGUKPj4+Pj4gaW5kZXggMTM4Y2I3OC4uYzFlNWQ0MyAxMDA2NDQKPj4+Pj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKPj4+Pj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKPj4+Pj4gQEAgLTE3MSw3ICsxNzEsNyBAQCBlbmRpZgo+ Pj4+PiDCoCBhbWRncHUtJChDT05GSUdfQ09NUEFUKSArPSBhbWRncHVfaW9jMzIubwo+Pj4+PiDC oCBhbWRncHUtJChDT05GSUdfVkdBX1NXSVRDSEVST08pICs9IGFtZGdwdV9hdHB4X2hhbmRsZXIu bwo+Pj4+PiDCoCBhbWRncHUtJChDT05GSUdfQUNQSSkgKz0gYW1kZ3B1X2FjcGkubwo+Pj4+PiAt YW1kZ3B1LSQoQ09ORklHX01NVV9OT1RJRklFUikgKz0gYW1kZ3B1X21uLm8KPj4+Pj4gK2FtZGdw dS0kKENPTkZJR19ITU0pICs9IGFtZGdwdV9tbi5vCj4+Pj4+IMKgIMKgIGluY2x1ZGUgJChGVUxM X0FNRF9QQVRIKS9wb3dlcnBsYXkvTWFrZWZpbGUKPj4+Pj4gwqAgZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5jCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKPj4+Pj4gaW5kZXggZTU1NTA4Yi4uYWQ1MmYzNCAxMDA2 NDQKPj4+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKPj4+ Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMKPj4+Pj4gQEAg LTQ1LDcgKzQ1LDcgQEAKPj4+Pj4gwqAgwqAgI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+Cj4+ Pj4+IMKgICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9t bXVfbm90aWZpZXIuaD4KPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9obW0uaD4KPj4+Pj4gwqAgI2lu Y2x1ZGUgPGxpbnV4L2ludGVydmFsX3RyZWUuaD4KPj4+Pj4gwqAgI2luY2x1ZGUgPGRybS9kcm1Q Lmg+Cj4+Pj4+IMKgICNpbmNsdWRlIDxkcm0vZHJtLmg+Cj4+Pj4+IEBAIC02Niw2ICs2Niw3IEBA Cj4+Pj4gTmVlZCB0byByZW1vdmUgQG1uIGRvY3VtZW50YXRpb24uCj4+Pj4KPj4+Pj4gwqDCoCAq IEBvYmplY3RzOiBpbnRlcnZhbCB0cmVlIGNvbnRhaW5pbmcgYW1kZ3B1X21uX25vZGVzCj4+Pj4+ IMKgwqAgKiBAcmVhZF9sb2NrOiBtdXRleCBmb3IgcmVjdXJzaXZlIGxvY2tpbmcgb2YgQGxvY2sK Pj4+Pj4gwqDCoCAqIEByZWN1cnNpb246IGRlcHRoIG9mIHJlY3Vyc2lvbgo+Pj4+PiArICogQG1p cnJvcjogSE1NIG1pcnJvciBmdW5jdGlvbiBzdXBwb3J0Cj4+Pj4+IMKgwqAgKgo+Pj4+PiDCoMKg ICogRGF0YSBmb3IgZWFjaCBhbWRncHUgZGV2aWNlIGFuZCBwcm9jZXNzIGFkZHJlc3Mgc3BhY2Uu Cj4+Pj4+IMKgwqAgKi8KPj4+Pj4gQEAgLTczLDcgKzc0LDYgQEAgc3RydWN0IGFtZGdwdV9tbiB7 Cj4+Pj4+IMKgwqDCoMKgwqAgLyogY29uc3RhbnQgYWZ0ZXIgaW5pdGlhbGlzYXRpb24gKi8KPj4+ Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgYW1kZ3B1X2RldmljZcKgwqDCoCAqYWRldjsKPj4+Pj4gwqDC oMKgwqDCoCBzdHJ1Y3QgbW1fc3RydWN0wqDCoMKgICptbTsKPj4+Pj4gLcKgwqDCoCBzdHJ1Y3Qg bW11X25vdGlmaWVywqDCoMKgIG1uOwo+Pj4+PiDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1X21uX3R5 cGXCoMKgwqAgdHlwZTsKPj4+Pj4gwqAgwqDCoMKgwqDCoCAvKiBvbmx5IHVzZWQgb24gZGVzdHJ1 Y3Rpb24gKi8KPj4+Pj4gQEAgLTg3LDYgKzg3LDkgQEAgc3RydWN0IGFtZGdwdV9tbiB7Cj4+Pj4+ IMKgwqDCoMKgwqAgc3RydWN0IHJiX3Jvb3RfY2FjaGVkwqDCoMKgIG9iamVjdHM7Cj4+Pj4+IMKg wqDCoMKgwqAgc3RydWN0IG11dGV4wqDCoMKgwqDCoMKgwqAgcmVhZF9sb2NrOwo+Pj4+PiDCoMKg wqDCoMKgIGF0b21pY190wqDCoMKgwqDCoMKgwqAgcmVjdXJzaW9uOwo+Pj4+PiArCj4+Pj4+ICvC oMKgwqAgLyogSE1NIG1pcnJvciAqLwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBobW1fbWlycm9ywqDC oMKgIG1pcnJvcjsKPj4+Pj4gwqAgfTsKPj4+Pj4gwqAgwqAgLyoqCj4+Pj4+IEBAIC0xMDMsNyAr MTA2LDcgQEAgc3RydWN0IGFtZGdwdV9tbl9ub2RlIHsKPj4+Pj4gwqAgfTsKPj4+Pj4gwqAgwqAg LyoqCj4+Pj4+IC0gKiBhbWRncHVfbW5fZGVzdHJveSAtIGRlc3Ryb3kgdGhlIE1NVSBub3RpZmll cgo+Pj4+PiArICogYW1kZ3B1X21uX2Rlc3Ryb3kgLSBkZXN0cm95IHRoZSBITU0gbWlycm9yCj4+ Pj4+IMKgwqAgKgo+Pj4+PiDCoMKgICogQHdvcms6IHByZXZpb3VzbHkgc2hlZHVsZWQgd29yayBp dGVtCj4+Pj4+IMKgwqAgKgo+Pj4+PiBAQCAtMTI5LDI4ICsxMzIsMjYgQEAgc3RhdGljIHZvaWQg YW1kZ3B1X21uX2Rlc3Ryb3koc3RydWN0Cj4+Pj4+IHdvcmtfc3RydWN0ICp3b3JrKQo+Pj4+PiDC oMKgwqDCoMKgIH0KPj4+Pj4gwqDCoMKgwqDCoCB1cF93cml0ZSgmYW1uLT5sb2NrKTsKPj4+Pj4g wqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmFkZXYtPm1uX2xvY2spOwo+Pj4+PiAtwqDCoMKgIG1t dV9ub3RpZmllcl91bnJlZ2lzdGVyX25vX3JlbGVhc2UoJmFtbi0+bW4sIGFtbi0+bW0pOwo+Pj4+ PiArwqDCoMKgIGhtbV9taXJyb3JfdW5yZWdpc3RlcigmYW1uLT5taXJyb3IpOwo+Pj4+PiArCj4+ Pj4+IMKgwqDCoMKgwqAga2ZyZWUoYW1uKTsKPj4+Pj4gwqAgfQo+Pj4+PiDCoCDCoCAvKioKPj4+ Pj4gwqDCoCAqIGFtZGdwdV9tbl9yZWxlYXNlIC0gY2FsbGJhY2sgdG8gbm90aWZ5IGFib3V0IG1t IGRlc3RydWN0aW9uCj4+Pj4gVXBkYXRlIHRoZSBmdW5jdGlvbiBuYW1lIGluIHRoZSBjb21tZW50 Lgo+Pj4+Cj4+Pj4+IMKgwqAgKgo+Pj4+PiAtICogQG1uOiBvdXIgbm90aWZpZXIKPj4+Pj4gLSAq IEBtbTogdGhlIG1tIHRoaXMgY2FsbGJhY2sgaXMgYWJvdXQKPj4+Pj4gKyAqIEBtaXJyb3I6IHRo ZSBITU0gbWlycm9yIChtbSkgdGhpcyBjYWxsYmFjayBpcyBhYm91dAo+Pj4+PiDCoMKgICoKPj4+ Pj4gLSAqIFNoZWR1bGUgYSB3b3JrIGl0ZW0gdG8gbGF6eSBkZXN0cm95IG91ciBub3RpZmllci4K Pj4+Pj4gKyAqIFNoZWR1bGUgYSB3b3JrIGl0ZW0gdG8gbGF6eSBkZXN0cm95IEhNTSBtaXJyb3Iu Cj4+Pj4+IMKgwqAgKi8KPj4+Pj4gLXN0YXRpYyB2b2lkIGFtZGdwdV9tbl9yZWxlYXNlKHN0cnVj dCBtbXVfbm90aWZpZXIgKm1uLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKPj4+Pj4gK3N0YXRpYyB2b2lkIGFtZGdwdV9obW1f bWlycm9yX3JlbGVhc2Uoc3RydWN0IGhtbV9taXJyb3IgKm1pcnJvcikKPj4+Pj4gwqAgewo+Pj4+ PiAtwqDCoMKgIHN0cnVjdCBhbWRncHVfbW4gKmFtbiA9IGNvbnRhaW5lcl9vZihtbiwgc3RydWN0 IGFtZGdwdV9tbiwgbW4pOwo+Pj4+PiArwqDCoMKgIHN0cnVjdCBhbWRncHVfbW4gKmFtbiA9IGNv bnRhaW5lcl9vZihtaXJyb3IsIHN0cnVjdAo+Pj4+PiBhbWRncHVfbW4sIG1pcnJvcik7Cj4+Pj4+ IMKgIMKgwqDCoMKgwqAgSU5JVF9XT1JLKCZhbW4tPndvcmssIGFtZGdwdV9tbl9kZXN0cm95KTsK Pj4+Pj4gwqDCoMKgwqDCoCBzY2hlZHVsZV93b3JrKCZhbW4tPndvcmspOwo+Pj4+PiDCoCB9Cj4+ Pj4+IMKgIC0KPj4+Pj4gwqAgLyoqCj4+Pj4+IMKgwqAgKiBhbWRncHVfbW5fbG9jayAtIHRha2Ug dGhlIHdyaXRlIHNpZGUgbG9jayBmb3IgdGhpcyBub3RpZmllcgo+Pj4+PiDCoMKgICoKPj4+Pj4g QEAgLTIzNywyMSArMjM4LDE5IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV9tbl9pbnZhbGlkYXRlX25v ZGUoc3RydWN0Cj4+Pj4+IGFtZGdwdV9tbl9ub2RlICpub2RlLAo+Pj4+PiDCoCAvKioKPj4+Pj4g wqDCoCAqIGFtZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X2dmeCAtIGNhbGxiYWNrIHRv IG5vdGlmeQo+Pj4+PiBhYm91dCBtbSBjaGFuZ2UKPj4+Pj4gwqDCoCAqCj4+Pj4+IC0gKiBAbW46 IG91ciBub3RpZmllcgo+Pj4+PiAtICogQG1tOiB0aGUgbW0gdGhpcyBjYWxsYmFjayBpcyBhYm91 dAo+Pj4+PiAtICogQHN0YXJ0OiBzdGFydCBvZiB1cGRhdGVkIHJhbmdlCj4+Pj4+IC0gKiBAZW5k OiBlbmQgb2YgdXBkYXRlZCByYW5nZQo+Pj4+PiArICogQG1pcnJvcjogdGhlIGhtbV9taXJyb3Ig KG1tKSBpcyBhYm91dCB0byB1cGRhdGUKPj4+Pj4gKyAqIEB1cGRhdGU6IHRoZSB1cGRhdGUgc3Rh cnQsIGVuZCBhZGRyZXNzCj4+Pj4+IMKgwqAgKgo+Pj4+PiDCoMKgICogQmxvY2sgZm9yIG9wZXJh dGlvbnMgb24gQk9zIHRvIGZpbmlzaCBhbmQgbWFyayBwYWdlcyBhcwo+Pj4+PiBhY2Nlc3NlZCBh bmQKPj4+Pj4gwqDCoCAqIHBvdGVudGlhbGx5IGRpcnR5Lgo+Pj4+PiDCoMKgICovCj4+Pj4+IC1z dGF0aWMgaW50IGFtZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X2dmeChzdHJ1Y3QKPj4+ Pj4gbW11X25vdGlmaWVyICptbiwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwKPj4+Pj4gLcKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1bnNpZ25lZCBsb25nIHN0 YXJ0LAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHVuc2lnbmVkIGxvbmcgZW5kLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJvb2wgYmxvY2thYmxlKQo+Pj4+PiArc3RhdGljIGludCBh bWRncHVfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydF9nZngoc3RydWN0IGhtbV9taXJyb3IKPj4+ Pj4gKm1pcnJvciwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGht bV91cGRhdGUgKnVwZGF0ZSkKPj4+Pj4gwqAgewo+Pj4+PiAtwqDCoMKgIHN0cnVjdCBhbWRncHVf bW4gKmFtbiA9IGNvbnRhaW5lcl9vZihtbiwgc3RydWN0IGFtZGdwdV9tbiwgbW4pOwo+Pj4+PiAr wqDCoMKgIHN0cnVjdCBhbWRncHVfbW4gKmFtbiA9IGNvbnRhaW5lcl9vZihtaXJyb3IsIHN0cnVj dAo+Pj4+PiBhbWRncHVfbW4sIG1pcnJvcik7Cj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBz dGFydCA9IHVwZGF0ZS0+c3RhcnQ7Cj4+Pj4+ICvCoMKgwqAgdW5zaWduZWQgbG9uZyBlbmQgPSB1 cGRhdGUtPmVuZDsKPj4+Pj4gK8KgwqDCoCBib29sIGJsb2NrYWJsZSA9IHVwZGF0ZS0+YmxvY2th YmxlOwo+Pj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBpbnRlcnZhbF90cmVlX25vZGUgKml0Owo+Pj4+ PiDCoCDCoMKgwqDCoMKgIC8qIG5vdGlmaWNhdGlvbiBpcyBleGNsdXNpdmUsIGJ1dCBpbnRlcnZh bCBpcyBpbmNsdXNpdmUgKi8KPj4+Pj4gQEAgLTI3OCwyOCArMjc3LDI4IEBAIHN0YXRpYyBpbnQK Pj4+Pj4gYW1kZ3B1X21uX2ludmFsaWRhdGVfcmFuZ2Vfc3RhcnRfZ2Z4KHN0cnVjdCBtbXVfbm90 aWZpZXIgKm1uLAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X21uX2ludmFsaWRhdGVf bm9kZShub2RlLCBzdGFydCwgZW5kKTsKPj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4+IMKgICvCoMKg wqAgYW1kZ3B1X21uX3JlYWRfdW5sb2NrKGFtbik7Cj4+Pj4+ICsKPj4+PiBhbWRncHVfbW5fcmVh ZF9sb2NrL3VubG9jayBzdXBwb3J0IHJlY3Vyc2l2ZSBsb2NraW5nIGZvciBtdWx0aXBsZQo+Pj4+ IG92ZXJsYXBwaW5nIG9yIG5lc3RlZCBpbnZhbGlkYXRpb24gcmFuZ2VzLiBCdXQgaWYgeW91J3Ig bG9ja2luZyBhbmQKPj4+PiB1bmxvY2tpbmcgaW4gdGhlIHNhbWUgZnVuY3Rpb24uIElzIHRoYXQg c3RpbGwgYSBjb25jZXJuPwo+Pj4KPj4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBwb3NzaWJsZSBy ZWN1cnNpdmUgY2FzZSwgYnV0Cj4+IGFtZGdwdV9tbl9yZWFkX2xvY2soKSBzdGlsbCBzdXBwb3J0 IHJlY3Vyc2l2ZSBsb2NraW5nLgo+Pj4gV2VsbCB0aGUgcmVhbCBwcm9ibGVtIGlzIHRoYXQgdW5s b2NraW5nIHRoZW0gaGVyZSB3b24ndCB3b3JrLgo+Pj4KPj4+IFdlIG5lZWQgdG8gaG9sZCB0aGUg bG9jayB1bnRpbCB3ZSBhcmUgc3VyZSB0aGF0IHRoZSBvcGVyYXRpb24gd2hpY2gKPj4+IHVwZGF0 ZXMgdGhlIHBhZ2UgdGFibGVzIGlzIGNvbXBsZXRlZC4KPj4+Cj4+IFRoZSByZWFzb24gZm9yIHRo aXMgY2hhbmdlIGlzIGJlY2F1c2UgaG1tIG1pcnJvciBoYXMgaW52YWxpZGF0ZV9zdGFydAo+PiBj YWxsYmFjaywgbm8gaW52YWxpZGF0ZV9lbmQgY2FsbGJhY2sKPj4KPj4gQ2hlY2sgbW11X25vdGlm aWVyLmMgYW5kIGhtbS5jIGFnYWluLCBiZWxvdyBpcyBlbnRpcmUgbG9naWMgdG8gdXBkYXRlCj4+ IENQVSBwYWdlIHRhYmxlcyBhbmQgY2FsbGJhY2s6Cj4+Cj4+IG1uIGxvY2sgYW1uLT5sb2NrIGlz IHVzZWQgdG8gcHJvdGVjdCBpbnRlcnZhbCB0cmVlIGFjY2VzcyBiZWNhdXNlCj4+IHVzZXIgbWF5 IHN1Ym1pdC9yZWdpc3RlciBuZXcgdXNlcnB0ciBhbnl0aW1lLgo+PiBUaGlzIGlzIHNhbWUgZm9y IG9sZCBhbmQgbmV3IHdheS4KPj4KPj4gc3RlcCAyIGd1YXJhbnRlZSB0aGUgR1BVIG9wZXJhdGlv biBpcyBkb25lIGJlZm9yZSB1cGRhdGluZyBDUFUgcGFnZQo+PiB0YWJsZS4KPj4KPj4gU28gSSB0 aGluayB0aGUgY2hhbmdlIGlzIHNhZmUuIFdlIGRvbid0IG5lZWQgaG9sZCBtbiBsb2NrIHVudGls IHRoZQo+PiBDUFUgcGFnZSB0YWJsZXMgdXBkYXRlIGlzIGNvbXBsZXRlZC4KPgo+IE5vLCB0aGF0 IGlzbid0IGV2ZW4gcmVtb3RlbHkgY29ycmVjdC4gVGhlIGxvY2sgZG9lc24ndCBwcm90ZWN0cyB0 aGUKPiBpbnRlcnZhbCB0cmVlLgo+Cj4+Cj4+IE9sZDoKPj4gwqDCoCAxLiBkb3duX3JlYWRfbm9u X293bmVyKCZhbW4tPmxvY2spCj4+IMKgwqAgMi4gbG9vcCB0byBoYW5kbGUgQk9zIGZyb20gbm9k ZS0+Ym9zIHRocm91Z2ggaW50ZXJ2YWwgdHJlZQo+PiBhbW4tPm9iamVjdCBub2Rlcwo+PiDCoMKg wqDCoMKgwqAgZ2Z4OiB3YWl0IGZvciBwZW5kaW5nIEJPcyBmZW5jZSBvcGVyYXRpb24gZG9uZSwg bWFyayB1c2VyCj4+IHBhZ2VzIGRpcnR5Cj4+IMKgwqDCoMKgwqDCoCBrZmQ6IGV2aWN0IHVzZXIg cXVldWVzIG9mIHRoZSBwcm9jZXNzLCB3YWl0IGZvciBxdWV1ZQo+PiB1bm1hcC9tYXAgb3BlcmF0 aW9uIGRvbmUKPj4gwqDCoCAzLiB1cGRhdGUgQ1BVIHBhZ2UgdGFibGVzCj4+IMKgwqAgNC4gdXBf cmVhZCgmYW1uLT5sb2NrKQo+Pgo+PiBOZXcsIHN3aXRjaCBzdGVwIDMgYW5kIDQKPj4gwqDCoCAx LiBkb3duX3JlYWRfbm9uX293bmVyKCZhbW4tPmxvY2spCj4+IMKgwqAgMi4gbG9vcCB0byBoYW5k bGUgQk9zIGZyb20gbm9kZS0+Ym9zIHRocm91Z2ggaW50ZXJ2YWwgdHJlZQo+PiBhbW4tPm9iamVj dCBub2Rlcwo+PiDCoMKgwqDCoMKgwqAgZ2Z4OiB3YWl0IGZvciBwZW5kaW5nIEJPcyBmZW5jZSBv cGVyYXRpb24gZG9uZSwgbWFyayB1c2VyCj4+IHBhZ2VzIGRpcnR5Cj4+IMKgwqDCoMKgwqDCoCBr ZmQ6IGV2aWN0IHVzZXIgcXVldWVzIG9mIHRoZSBwcm9jZXNzLCB3YWl0IGZvciBxdWV1ZQo+PiB1 bm1hcC9tYXAgb3BlcmF0aW9uIGRvbmUKPj4gwqDCoCAzLiB1cF9yZWFkKCZhbW4tPmxvY2spCj4+ IMKgwqAgNC4gdXBkYXRlIENQVSBwYWdlIHRhYmxlcwo+Cj4gVGhlIGxvY2sgaXMgdGhlcmUgdG8g bWFrZSBzdXJlIHRoYXQgd2Ugc2VyaWFsaXplIHBhZ2UgdGFibGUgdXBkYXRlcwo+IHdpdGggY29t bWFuZCBzdWJtaXNzaW9uLgoKQXMgSSB1bmRlcnN0YW5kIGl0LCB0aGUgaWRlYSBpcyB0byBwcmV2 ZW50IGNvbW1hbmQgc3VibWlzc2lvbiAoYWRkaW5nCm5ldyBmZW5jZXMgdG8gQk9zKSB3aGlsZSBh IHBhZ2UgdGFibGUgaW52YWxpZGF0aW9uIGlzIGluIHByb2dyZXNzLiBCdXQKZG8gd2UgcmVhbGx5 IG5lZWQgYW5vdGhlciBsb2NrIGZvciB0aGlzPyBXb3VsZG4ndCB0aGUgcmUtdmFsaWRhdGlvbiBv Zgp1c2VycHRyIEJPcyAoY3VycmVudGx5IGNhbGxpbmcgZ2V0X3VzZXJfcGFnZXMpIGZvcmNlIHN5 bmNocm9uaXphdGlvbgp3aXRoIHRoZSBvbmdvaW5nIHBhZ2UgdGFibGUgaW52YWxpZGF0aW9uIHRo cm91Z2ggdGhlIG1tYXBfc2VtIG9yIG90aGVyCk1NIGxvY2tzPwoKUmVnYXJkcywKwqAgRmVsaXgK Cgo+Cj4gSWYgSE1NIGRvZXNuJ3QgcHJvdmlkZSBhIGNhbGxiYWNrIGZvciB0aGUgZW5kIG9mIHRo ZSBpbnZhbGlkYXRpbmcgdGhlbgo+IGl0IGNhbid0IGJlIHVzZWQgZm9yIHRoaXMuCj4KPiBBZGRp bmcgSmVyb21lIGFzIHdlbGwsIHNpbmNlIHdlIGFyZSBjZXJ0YWlubHkgbWlzc2luZyBzb21ldGhp bmcgaGVyZS4KPgo+IFJlZ2FyZHMsCj4gQ2hyaXN0aWFuLgo+Cj4+Cj4+IFJlZ2FyZHMsCj4+IFBo aWxpcAo+Pj4gQ2hyaXN0aWFuLgo+Pj4KPj4+Pgo+Pj4+PiDCoMKgwqDCoMKgIHJldHVybiAwOwo+ Pj4+PiDCoCB9Cj4+Pj4+IMKgIMKgIC8qKgo+Pj4+PiDCoMKgICogYW1kZ3B1X21uX2ludmFsaWRh dGVfcmFuZ2Vfc3RhcnRfaHNhIC0gY2FsbGJhY2sgdG8gbm90aWZ5Cj4+Pj4+IGFib3V0IG1tIGNo YW5nZQo+Pj4+PiDCoMKgICoKPj4+Pj4gLSAqIEBtbjogb3VyIG5vdGlmaWVyCj4+Pj4+IC0gKiBA bW06IHRoZSBtbSB0aGlzIGNhbGxiYWNrIGlzIGFib3V0Cj4+Pj4+IC0gKiBAc3RhcnQ6IHN0YXJ0 IG9mIHVwZGF0ZWQgcmFuZ2UKPj4+Pj4gLSAqIEBlbmQ6IGVuZCBvZiB1cGRhdGVkIHJhbmdlCj4+ Pj4+ICsgKiBAbWlycm9yOiB0aGUgaG1tX21pcnJvciAobW0pIGlzIGFib3V0IHRvIHVwZGF0ZQo+ Pj4+PiArICogQHVwZGF0ZTogdGhlIHVwZGF0ZSBzdGFydCwgZW5kIGFkZHJlc3MKPj4+Pj4gwqDC oCAqCj4+Pj4+IMKgwqAgKiBXZSB0ZW1wb3JhcmlseSBldmljdCBhbGwgQk9zIGJldHdlZW4gc3Rh cnQgYW5kIGVuZC4gVGhpcwo+Pj4+PiDCoMKgICogbmVjZXNzaXRhdGVzIGV2aWN0aW5nIGFsbCB1 c2VyLW1vZGUgcXVldWVzIG9mIHRoZSBwcm9jZXNzLgo+Pj4+PiBUaGUgQk9zCj4+Pj4+IMKgwqAg KiBhcmUgcmVzdG9ydGVkIGluIGFtZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX2VuZF9oc2EuCj4+ Pj4+IMKgwqAgKi8KPj4+Pj4gLXN0YXRpYyBpbnQgYW1kZ3B1X21uX2ludmFsaWRhdGVfcmFuZ2Vf c3RhcnRfaHNhKHN0cnVjdAo+Pj4+PiBtbXVfbm90aWZpZXIgKm1uLAo+Pj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIHVuc2lnbmVkIGxvbmcgc3RhcnQsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBlbmQsCj4+Pj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBibG9ja2FibGUp Cj4+Pj4+ICtzdGF0aWMgaW50IGFtZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX3N0YXJ0X2hzYShz dHJ1Y3QgaG1tX21pcnJvcgo+Pj4+PiAqbWlycm9yLAo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBzdHJ1Y3QgaG1tX3VwZGF0ZSAqdXBkYXRlKQo+Pj4+PiDCoCB7Cj4+Pj4+IC3C oMKgwqAgc3RydWN0IGFtZGdwdV9tbiAqYW1uID0gY29udGFpbmVyX29mKG1uLCBzdHJ1Y3QgYW1k Z3B1X21uLCBtbik7Cj4+Pj4+ICvCoMKgwqAgc3RydWN0IGFtZGdwdV9tbiAqYW1uID0gY29udGFp bmVyX29mKG1pcnJvciwgc3RydWN0Cj4+Pj4+IGFtZGdwdV9tbiwgbWlycm9yKTsKPj4+Pj4gK8Kg wqDCoCB1bnNpZ25lZCBsb25nIHN0YXJ0ID0gdXBkYXRlLT5zdGFydDsKPj4+Pj4gK8KgwqDCoCB1 bnNpZ25lZCBsb25nIGVuZCA9IHVwZGF0ZS0+ZW5kOwo+Pj4+PiArwqDCoMKgIGJvb2wgYmxvY2th YmxlID0gdXBkYXRlLT5ibG9ja2FibGU7Cj4+Pj4+IMKgwqDCoMKgwqAgc3RydWN0IGludGVydmFs X3RyZWVfbm9kZSAqaXQ7Cj4+Pj4+IMKgIMKgwqDCoMKgwqAgLyogbm90aWZpY2F0aW9uIGlzIGV4 Y2x1c2l2ZSwgYnV0IGludGVydmFsIGlzIGluY2x1c2l2ZSAqLwo+Pj4+PiBAQCAtMzI2LDU5ICsz MjUsNDEgQEAgc3RhdGljIGludAo+Pj4+PiBhbWRncHVfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFy dF9oc2Eoc3RydWN0IG1tdV9ub3RpZmllciAqbW4sCj4+Pj4+IMKgIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmIChhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKGJvLT50Ym8udHRtLAo+ Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgc3RhcnQsIGVuZCkpCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYW1kZ3B1X2FtZGtmZF9ldmljdF91c2VycHRyKG1lbSwgbW0pOwo+Pj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9hbWRrZmRfZXZpY3RfdXNlcnB0cihtZW0sIGFt bi0+bW0pOwo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4+PiDCoMKgwqDCoMKgIH0KPj4+ Pj4gwqAgK8KgwqDCoCBhbWRncHVfbW5fcmVhZF91bmxvY2soYW1uKTsKPj4+Pj4gKwo+Pj4+PiDC oMKgwqDCoMKgIHJldHVybiAwOwo+Pj4+PiDCoCB9Cj4+Pj4+IMKgIC0vKioKPj4+Pj4gLSAqIGFt ZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX2VuZCAtIGNhbGxiYWNrIHRvIG5vdGlmeSBhYm91dCBt bQo+Pj4+PiBjaGFuZ2UKPj4+Pj4gLSAqCj4+Pj4+IC0gKiBAbW46IG91ciBub3RpZmllcgo+Pj4+ PiAtICogQG1tOiB0aGUgbW0gdGhpcyBjYWxsYmFjayBpcyBhYm91dAo+Pj4+PiAtICogQHN0YXJ0 OiBzdGFydCBvZiB1cGRhdGVkIHJhbmdlCj4+Pj4+IC0gKiBAZW5kOiBlbmQgb2YgdXBkYXRlZCBy YW5nZQo+Pj4+PiAtICoKPj4+Pj4gLSAqIFJlbGVhc2UgdGhlIGxvY2sgYWdhaW4gdG8gYWxsb3cg bmV3IGNvbW1hbmQgc3VibWlzc2lvbnMuCj4+Pj4+ICsvKiBMb3cgYml0cyBvZiBhbnkgcmVhc29u YWJsZSBtbSBwb2ludGVyIHdpbGwgYmUgdW51c2VkIGR1ZSB0bwo+Pj4+PiBzdHJ1Y3QKPj4+Pj4g KyAqIGFsaWdubWVudC4gVXNlIHRoZXNlIGJpdHMgdG8gbWFrZSBhIHVuaXF1ZSBrZXkgZnJvbSB0 aGUgbW0KPj4+Pj4gcG9pbnRlcgo+Pj4+PiArICogYW5kIG5vdGlmaWVyIHR5cGUuCj4+Pj4+IMKg wqAgKi8KPj4+Pj4gLXN0YXRpYyB2b2lkIGFtZGdwdV9tbl9pbnZhbGlkYXRlX3JhbmdlX2VuZChz dHJ1Y3QgbW11X25vdGlmaWVyICptbiwKPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+Pj4+PiAtwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdW5zaWduZWQgbG9uZyBzdGFydCwK Pj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVuc2ln bmVkIGxvbmcgZW5kKQo+Pj4+PiAtewo+Pj4+PiAtwqDCoMKgIHN0cnVjdCBhbWRncHVfbW4gKmFt biA9IGNvbnRhaW5lcl9vZihtbiwgc3RydWN0IGFtZGdwdV9tbiwgbW4pOwo+Pj4+PiAtCj4+Pj4+ IC3CoMKgwqAgYW1kZ3B1X21uX3JlYWRfdW5sb2NrKGFtbik7Cj4+Pj4+IC19Cj4+Pj4+ICsjZGVm aW5lIEFNREdQVV9NTl9LRVkobW0sIHR5cGUpICgodW5zaWduZWQgbG9uZykobW0pICsgKHR5cGUp KQo+Pj4+PiDCoCAtc3RhdGljIGNvbnN0IHN0cnVjdCBtbXVfbm90aWZpZXJfb3BzIGFtZGdwdV9t bl9vcHNbXSA9IHsKPj4+Pj4gK3N0YXRpYyBzdHJ1Y3QgaG1tX21pcnJvcl9vcHMgYW1kZ3B1X2ht bV9taXJyb3Jfb3BzW10gPSB7Cj4+Pj4+IMKgwqDCoMKgwqAgW0FNREdQVV9NTl9UWVBFX0dGWF0g PSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCAucmVsZWFzZSA9IGFtZGdwdV9tbl9yZWxlYXNlLAo+ Pj4+PiAtwqDCoMKgwqDCoMKgwqAgLmludmFsaWRhdGVfcmFuZ2Vfc3RhcnQgPQo+Pj4+PiBhbWRn cHVfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydF9nZngsCj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCAu aW52YWxpZGF0ZV9yYW5nZV9lbmQgPSBhbWRncHVfbW5faW52YWxpZGF0ZV9yYW5nZV9lbmQsCj4+ Pj4+ICvCoMKgwqDCoMKgwqDCoCAuc3luY19jcHVfZGV2aWNlX3BhZ2V0YWJsZXMgPQo+Pj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9tbl9pbnZhbGlkYXRlX3Jhbmdl X3N0YXJ0X2dmeCwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5yZWxlYXNlID0gYW1kZ3B1X2htbV9t aXJyb3JfcmVsZWFzZQo+Pj4+PiDCoMKgwqDCoMKgIH0sCj4+Pj4+IMKgwqDCoMKgwqAgW0FNREdQ VV9NTl9UWVBFX0hTQV0gPSB7Cj4+Pj4+IC3CoMKgwqDCoMKgwqDCoCAucmVsZWFzZSA9IGFtZGdw dV9tbl9yZWxlYXNlLAo+Pj4+PiAtwqDCoMKgwqDCoMKgwqAgLmludmFsaWRhdGVfcmFuZ2Vfc3Rh cnQgPQo+Pj4+PiBhbWRncHVfbW5faW52YWxpZGF0ZV9yYW5nZV9zdGFydF9oc2EsCj4+Pj4+IC3C oMKgwqDCoMKgwqDCoCAuaW52YWxpZGF0ZV9yYW5nZV9lbmQgPSBhbWRncHVfbW5faW52YWxpZGF0 ZV9yYW5nZV9lbmQsCj4+Pj4+ICvCoMKgwqDCoMKgwqDCoCAuc3luY19jcHVfZGV2aWNlX3BhZ2V0 YWJsZXMgPQo+Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdwdV9tbl9p bnZhbGlkYXRlX3JhbmdlX3N0YXJ0X2hzYSwKPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIC5yZWxlYXNl ID0gYW1kZ3B1X2htbV9taXJyb3JfcmVsZWFzZQo+Pj4+PiDCoMKgwqDCoMKgIH0sCj4+Pj4+IMKg IH07Cj4+Pj4+IMKgIC0vKiBMb3cgYml0cyBvZiBhbnkgcmVhc29uYWJsZSBtbSBwb2ludGVyIHdp bGwgYmUgdW51c2VkIGR1ZSB0bwo+Pj4+PiBzdHJ1Y3QKPj4+Pj4gLSAqIGFsaWdubWVudC4gVXNl IHRoZXNlIGJpdHMgdG8gbWFrZSBhIHVuaXF1ZSBrZXkgZnJvbSB0aGUgbW0KPj4+Pj4gcG9pbnRl cgo+Pj4+PiAtICogYW5kIG5vdGlmaWVyIHR5cGUuCj4+Pj4+IC0gKi8KPj4+Pj4gLSNkZWZpbmUg QU1ER1BVX01OX0tFWShtbSwgdHlwZSkgKCh1bnNpZ25lZCBsb25nKShtbSkgKyAodHlwZSkpCj4+ Pj4+IC0KPj4+Pj4gwqAgLyoqCj4+Pj4+IC0gKiBhbWRncHVfbW5fZ2V0IC0gY3JlYXRlIG5vdGlm aWVyIGNvbnRleHQKPj4+Pj4gKyAqIGFtZGdwdV9tbl9nZXQgLSBjcmVhdGUgSE1NIG1pcnJvciBj b250ZXh0Cj4+Pj4+IMKgwqAgKgo+Pj4+PiDCoMKgICogQGFkZXY6IGFtZGdwdSBkZXZpY2UgcG9p bnRlcgo+Pj4+PiDCoMKgICogQHR5cGU6IHR5cGUgb2YgTU1VIG5vdGlmaWVyIGNvbnRleHQKPj4+ Pj4gwqDCoCAqCj4+Pj4+IC0gKiBDcmVhdGVzIGEgbm90aWZpZXIgY29udGV4dCBmb3IgY3VycmVu dC0+bW0uCj4+Pj4+ICsgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBjdXJyZW50 LT5tbS4KPj4+Pj4gwqDCoCAqLwo+Pj4+PiDCoCBzdHJ1Y3QgYW1kZ3B1X21uICphbWRncHVfbW5f Z2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGVudW0gYW1kZ3B1X21uX3R5cGUgdHlwZSkKPj4+Pj4gQEAgLTQwOCwx MiArMzg5LDEyIEBAIHN0cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0Cj4+Pj4+ IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+Pj4+IMKgwqDCoMKgwqAgYW1uLT5tbSA9IG1tOwo+Pj4+ PiDCoMKgwqDCoMKgIGluaXRfcndzZW0oJmFtbi0+bG9jayk7Cj4+Pj4+IMKgwqDCoMKgwqAgYW1u LT50eXBlID0gdHlwZTsKPj4+Pj4gLcKgwqDCoCBhbW4tPm1uLm9wcyA9ICZhbWRncHVfbW5fb3Bz W3R5cGVdOwo+Pj4+PiDCoMKgwqDCoMKgIGFtbi0+b2JqZWN0cyA9IFJCX1JPT1RfQ0FDSEVEOwo+ Pj4+PiDCoMKgwqDCoMKgIG11dGV4X2luaXQoJmFtbi0+cmVhZF9sb2NrKTsKPj4+Pj4gwqDCoMKg wqDCoCBhdG9taWNfc2V0KCZhbW4tPnJlY3Vyc2lvbiwgMCk7Cj4+Pj4+IMKgIC3CoMKgwqAgciA9 IF9fbW11X25vdGlmaWVyX3JlZ2lzdGVyKCZhbW4tPm1uLCBtbSk7Cj4+Pj4+ICvCoMKgwqAgYW1u LT5taXJyb3Iub3BzID0gJmFtZGdwdV9obW1fbWlycm9yX29wc1t0eXBlXTsKPj4+Pj4gK8KgwqDC oCByID0gaG1tX21pcnJvcl9yZWdpc3RlcigmYW1uLT5taXJyb3IsIG1tKTsKPj4+Pj4gwqDCoMKg wqDCoCBpZiAocikKPj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIGdvdG8gZnJlZV9hbW47Cj4+Pj4+ IMKgIEBAIC00MzksNyArNDIwLDcgQEAgc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChz dHJ1Y3QKPj4+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+Pj4gwqDCoCAqIEBibzogYW1kZ3B1 IGJ1ZmZlciBvYmplY3QKPj4+Pj4gwqDCoCAqIEBhZGRyOiB1c2VycHRyIGFkZHIgd2Ugc2hvdWxk IG1vbml0b3IKPj4+Pj4gwqDCoCAqCj4+Pj4+IC0gKiBSZWdpc3RlcnMgYW4gTU1VIG5vdGlmaWVy IGZvciB0aGUgZ2l2ZW4gQk8gYXQgdGhlIHNwZWNpZmllZAo+Pj4+PiBhZGRyZXNzLgo+Pj4+PiAr ICogUmVnaXN0ZXJzIGFuIEhNTSBtaXJyb3IgZm9yIHRoZSBnaXZlbiBCTyBhdCB0aGUgc3BlY2lm aWVkCj4+Pj4+IGFkZHJlc3MuCj4+Pj4+IMKgwqAgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgLUVS Uk5PIGlmIGFueXRoaW5nIGdvZXMgd3JvbmcuCj4+Pj4+IMKgwqAgKi8KPj4+Pj4gwqAgaW50IGFt ZGdwdV9tbl9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9uZyBhZGRy KQo+Pj4+PiBAQCAtNDk1LDExICs0NzYsMTEgQEAgaW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1 Y3QgYW1kZ3B1X2JvICpibywKPj4+Pj4gdW5zaWduZWQgbG9uZyBhZGRyKQo+Pj4+PiDCoCB9Cj4+ Pj4+IMKgIMKgIC8qKgo+Pj4+PiAtICogYW1kZ3B1X21uX3VucmVnaXN0ZXIgLSB1bnJlZ2lzdGVy IGEgQk8gZm9yIG5vdGlmaWVyIHVwZGF0ZXMKPj4+Pj4gKyAqIGFtZGdwdV9tbl91bnJlZ2lzdGVy IC0gdW5yZWdpc3RlciBhIEJPIGZvciBITU0gbWlycm9yIHVwZGF0ZXMKPj4+Pj4gwqDCoCAqCj4+ Pj4+IMKgwqAgKiBAYm86IGFtZGdwdSBidWZmZXIgb2JqZWN0Cj4+Pj4+IMKgwqAgKgo+Pj4+PiAt ICogUmVtb3ZlIGFueSByZWdpc3RyYXRpb24gb2YgTU1VIG5vdGlmaWVyIHVwZGF0ZXMgZnJvbSB0 aGUKPj4+Pj4gYnVmZmVyIG9iamVjdC4KPj4+Pj4gKyAqIFJlbW92ZSBhbnkgcmVnaXN0cmF0aW9u IG9mIEhNTSBtaXJyb3IgdXBkYXRlcyBmcm9tIHRoZSBidWZmZXIKPj4+Pj4gb2JqZWN0Lgo+Pj4+ PiDCoMKgICovCj4+Pj4+IMKgIHZvaWQgYW1kZ3B1X21uX3VucmVnaXN0ZXIoc3RydWN0IGFtZGdw dV9ibyAqYm8pCj4+Pj4+IMKgIHsKPj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9tbi5oCj4+Pj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X21uLmgKPj4+Pj4gaW5kZXggZWIwZjQzMi4uMGUyNzUyNiAxMDA2NDQKPj4+Pj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPj4+Pj4gKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmgKPj4+Pj4gQEAgLTM0LDcgKzM0LDcg QEAgZW51bSBhbWRncHVfbW5fdHlwZSB7Cj4+Pj4+IMKgwqDCoMKgwqAgQU1ER1BVX01OX1RZUEVf SFNBLAo+Pj4+PiDCoCB9Owo+Pj4+PiDCoCAtI2lmIGRlZmluZWQoQ09ORklHX01NVV9OT1RJRklF UikKPj4+Pj4gKyNpZiBkZWZpbmVkKENPTkZJR19ITU0pCj4+Pj4+IMKgIHZvaWQgYW1kZ3B1X21u X2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOwo+Pj4+PiDCoCB2b2lkIGFtZGdwdV9tbl91bmxv Y2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOwo+Pj4+PiDCoCBzdHJ1Y3QgYW1kZ3B1X21uICphbWRn cHVfbW5fZ2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4+IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCj4+Pj4gYW1kLWdmeCBtYWlsaW5nIGxp c3QKPj4+PiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4+IGh0dHBzOi8vbGlzdHMu ZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo+Pj4KPj4KPgoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5n IGxpc3QKYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==