From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Yang, Philip" Subject: Re: [PATCH 3/3] drm/amdgpu: replace get_user_pages with HMM address mirror helpers v3 Date: Thu, 13 Dec 2018 20:56:49 +0000 Message-ID: References: <20181206210235.12036-1-Philip.Yang@amd.com> <20181206210235.12036-3-Philip.Yang@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: Content-Language: en-US Content-ID: <99ECA0F9E2E98B4CB787615730A305D1-asWib9pRmPqcE4WynfumptQqCkab/8FMAL8bYrjMMd8@public.gmane.org> 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: "Kuehling, Felix" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" T24gMjAxOC0xMi0xMCA3OjEyIHAubS4sIEt1ZWhsaW5nLCBGZWxpeCB3cm90ZToNCj4gVGhpcyBp cyBhIG5pY2UgaW1wcm92ZW1lbnQgZnJvbSB0aGUgbGFzdCB2ZXJzaW9uLiBJIHN0aWxsIHNlZSBz b21lDQo+IHBvdGVudGlhbCBwcm9ibGVtcy4gU2VlIGlubGluZSAuLi4NCj4NCj4gSSdtIHNraXBw aW5nIG92ZXIgdGhlIENTIGFuZCBHRU0gcGFydHMuIEkgaG9wZSBDaHJpc3RpYW4gY2FuIHJldmll dw0KPiB0aG9zZSBwYXJ0cy4NCj4NCj4gT24gMjAxOC0xMi0wNiA0OjAyIHAubS4sIFlhbmcsIFBo aWxpcCB3cm90ZToNCj4+IFVzZSBITU0gaGVscGVyIGZ1bmN0aW9uIGhtbV92bWFfZmF1bHQoKSB0 byBnZXQgcGh5c2ljYWwgcGFnZXMgYmFja2luZw0KPj4gdXNlcnB0ciBhbmQgc3RhcnQgQ1BVIHBh Z2UgdGFibGUgdXBkYXRlIHRyYWNrIG9mIHRob3NlIHBhZ2VzLiBUaGVuIHVzZQ0KPj4gaG1tX3Zt YV9yYW5nZV9kb25lKCkgdG8gY2hlY2sgaWYgdGhvc2UgcGFnZXMgYXJlIHVwZGF0ZWQgYmVmb3Jl DQo+PiBhbWRncHVfY3Nfc3VibWl0IGZvciBnZnggb3IgYmVmb3JlIHVzZXIgcXVldWVzIGFyZSBy ZXN1bWVkIGZvciBrZmQuDQo+Pg0KPj4gSWYgdXNlcnB0ciBwYWdlcyBhcmUgdXBkYXRlZCwgZm9y IGdmeCwgYW1kZ3B1X2NzX2lvY3RsIHdpbGwgcmVzdGFydA0KPj4gZnJvbSBzY3JhdGNoLCBmb3Ig a2ZkLCByZXN0b3JlIHdvcmtlciBpcyByZXNjaGVkdWxlZCB0byByZXRyeS4NCj4+DQo+PiBITU0g c2ltcGxpZnkgdGhlIENQVSBwYWdlIHRhYmxlIGNvbmN1cnJlbnQgdXBkYXRlIGNoZWNrLCBzbyBy ZW1vdmUNCj4+IGd1cHRhc2tsb2NrLCBtbXVfaW52YWxpZGF0aW9ucywgbGFzdF9zZXRfcGFnZXMg ZmllbGRzIGZyb20NCj4+IGFtZGdwdV90dG1fdHQgc3RydWN0Lg0KPj4NCj4+IEhNTSBkb2VzIG5v dCBwaW4gdGhlIHBhZ2UgKGluY3JlYXNlIHBhZ2UgcmVmIGNvdW50KSwgc28gcmVtb3ZlIHJlbGF0 ZWQNCj4+IG9wZXJhdGlvbnMgbGlrZSByZWxlYXNlX3BhZ2VzKCksIHB1dF9wYWdlKCksIG1hcmtf cGFnZV9kaXJ0eSgpLg0KPj4NCj4+IENoYW5nZS1JZDogSWQyZDMxMzAzNzhiNDRhNzc0ZTBkNzcx NTYxMDJhMjBhMjAzYjUwMzYNCj4+IFNpZ25lZC1vZmYtYnk6IFBoaWxpcCBZYW5nIDxQaGlsaXAu WWFuZ0BhbWQuY29tPg0KPj4gLS0tDQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9hbWRrZmQuaCAgICB8ICAgMSAtDQo+PiAgIC4uLi9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2FtZGtmZF9ncHV2bS5jICB8ICA4MSArKy0tLS0tLQ0KPj4gICBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jICAgfCAgIDIgLQ0KPj4gICBkcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oICAgfCAgIDMgKy0NCj4+ICAgZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2NzLmMgICAgICAgIHwgMTg4ICsrKysrKysrKy0tLS0t LS0tLQ0KPj4gICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMgICAgICAg fCAgMTQgKy0NCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMgICAg ICAgIHwgIDM0ICsrKy0NCj4+ICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21u LmggICAgICAgIHwgICA3ICstDQo+PiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV90dG0uYyAgICAgICB8IDE2MCArKysrKystLS0tLS0tLS0NCj4+ICAgZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oICAgICAgIHwgICA0ICstDQo+PiAgIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jICAgICAgICB8ICAgMSAtDQo+PiAgIDExIGZpbGVz IGNoYW5nZWQsIDIwNiBpbnNlcnRpb25zKCspLCAyODkgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaA0KPj4gaW5kZXggYmNmNTg3 YjRiYTk4Li5iNDkyZGQ5ZTU0MWEgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9hbWRrZmQuaA0KPj4gQEAgLTYyLDcgKzYyLDYgQEAgc3RydWN0IGtnZF9tZW0g ew0KPj4gICANCj4+ICAgCWF0b21pY190IGludmFsaWQ7DQo+PiAgIAlzdHJ1Y3QgYW1ka2ZkX3By b2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZvOw0KPj4gLQlzdHJ1Y3QgcGFnZSAqKnVzZXJfcGFnZXM7 DQo+PiAgIA0KPj4gICAJc3RydWN0IGFtZGdwdV9zeW5jIHN5bmM7DQo+PiAgIA0KPj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYyBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYw0KPj4gaW5k ZXggYjI5ZWYwODhmYTE0Li43NTgzM2I0MDUwN2IgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkX2dwdXZtLmMNCj4+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmRfZ3B1dm0uYw0KPj4gQEAgLTU4MCwyOCAr NTgwLDEyIEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICptZW0s IHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPj4gICAJCWdvdG8gb3V0Ow0KPj4gICAJfQ0KPj4gICAN Cj4+IC0JLyogSWYgbm8gcmVzdG9yZSB3b3JrZXIgaXMgcnVubmluZyBjb25jdXJyZW50bHksIHVz ZXJfcGFnZXMNCj4+IC0JICogc2hvdWxkIG5vdCBiZSBhbGxvY2F0ZWQNCj4+IC0JICovDQo+PiAt CVdBUk4obWVtLT51c2VyX3BhZ2VzLCAiTGVha2luZyB1c2VyX3BhZ2VzIGFycmF5Iik7DQo+PiAt DQo+PiAtCW1lbS0+dXNlcl9wYWdlcyA9IGt2bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1f cGFnZXMsDQo+PiAtCQkJCQkgICBzaXplb2Yoc3RydWN0IHBhZ2UgKiksDQo+PiAtCQkJCQkgICBH RlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7DQo+PiAtCWlmICghbWVtLT51c2VyX3BhZ2VzKSB7DQo+ PiAtCQlwcl9lcnIoIiVzOiBGYWlsZWQgdG8gYWxsb2NhdGUgcGFnZXMgYXJyYXlcbiIsIF9fZnVu Y19fKTsNCj4+IC0JCXJldCA9IC1FTk9NRU07DQo+PiAtCQlnb3RvIHVucmVnaXN0ZXJfb3V0Ow0K Pj4gLQl9DQo+PiAtDQo+PiAtCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXMoYm8t PnRiby50dG0sIG1lbS0+dXNlcl9wYWdlcyk7DQo+PiArCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0 X3VzZXJfcGFnZXMoYm8tPnRiby50dG0sIGJvLT50Ym8udHRtLT5wYWdlcyk7DQo+PiAgIAlpZiAo cmV0KSB7DQo+PiAgIAkJcHJfZXJyKCIlczogRmFpbGVkIHRvIGdldCB1c2VyIHBhZ2VzOiAlZFxu IiwgX19mdW5jX18sIHJldCk7DQo+PiAtCQlnb3RvIGZyZWVfb3V0Ow0KPj4gKwkJZ290byB1bnJl Z2lzdGVyX291dDsNCj4+ICAgCX0NCj4+ICAgDQo+PiAtCWFtZGdwdV90dG1fdHRfc2V0X3VzZXJf cGFnZXMoYm8tPnRiby50dG0sIG1lbS0+dXNlcl9wYWdlcyk7DQo+PiAtDQo+PiAgIAlyZXQgPSBh bWRncHVfYm9fcmVzZXJ2ZShibywgdHJ1ZSk7DQo+PiAgIAlpZiAocmV0KSB7DQo+PiAgIAkJcHJf ZXJyKCIlczogRmFpbGVkIHRvIHJlc2VydmUgQk9cbiIsIF9fZnVuY19fKTsNCj4+IEBAIC02MTQs MTEgKzU5OCw3IEBAIHN0YXRpYyBpbnQgaW5pdF91c2VyX3BhZ2VzKHN0cnVjdCBrZ2RfbWVtICpt ZW0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLA0KPj4gICAJYW1kZ3B1X2JvX3VucmVzZXJ2ZShibyk7 DQo+PiAgIA0KPj4gICByZWxlYXNlX291dDoNCj4+IC0JaWYgKHJldCkNCj4+IC0JCXJlbGVhc2Vf cGFnZXMobWVtLT51c2VyX3BhZ2VzLCBiby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsNCj4+IC1mcmVl X291dDoNCj4+IC0Ja3ZmcmVlKG1lbS0+dXNlcl9wYWdlcyk7DQo+PiAtCW1lbS0+dXNlcl9wYWdl cyA9IE5VTEw7DQo+PiArCWFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJv LnR0bSk7DQo+PiAgIHVucmVnaXN0ZXJfb3V0Og0KPj4gICAJaWYgKHJldCkNCj4+ICAgCQlhbWRn cHVfbW5fdW5yZWdpc3Rlcihibyk7DQo+PiBAQCAtNjc3LDcgKzY1Nyw2IEBAIHN0YXRpYyBpbnQg cmVzZXJ2ZV9ib19hbmRfdm0oc3RydWN0IGtnZF9tZW0gKm1lbSwNCj4+ICAgCWN0eC0+a2ZkX2Jv LnByaW9yaXR5ID0gMDsNCj4+ICAgCWN0eC0+a2ZkX2JvLnR2LmJvID0gJmJvLT50Ym87DQo+PiAg IAljdHgtPmtmZF9iby50di5udW1fc2hhcmVkID0gMTsNCj4+IC0JY3R4LT5rZmRfYm8udXNlcl9w YWdlcyA9IE5VTEw7DQo+PiAgIAlsaXN0X2FkZCgmY3R4LT5rZmRfYm8udHYuaGVhZCwgJmN0eC0+ bGlzdCk7DQo+PiAgIA0KPj4gICAJYW1kZ3B1X3ZtX2dldF9wZF9ibyh2bSwgJmN0eC0+bGlzdCwg JmN0eC0+dm1fcGRbMF0pOw0KPj4gQEAgLTc0MSw3ICs3MjAsNiBAQCBzdGF0aWMgaW50IHJlc2Vy dmVfYm9fYW5kX2NvbmRfdm1zKHN0cnVjdCBrZ2RfbWVtICptZW0sDQo+PiAgIAljdHgtPmtmZF9i by5wcmlvcml0eSA9IDA7DQo+PiAgIAljdHgtPmtmZF9iby50di5ibyA9ICZiby0+dGJvOw0KPj4g ICAJY3R4LT5rZmRfYm8udHYubnVtX3NoYXJlZCA9IDE7DQo+PiAtCWN0eC0+a2ZkX2JvLnVzZXJf cGFnZXMgPSBOVUxMOw0KPj4gICAJbGlzdF9hZGQoJmN0eC0+a2ZkX2JvLnR2LmhlYWQsICZjdHgt Pmxpc3QpOw0KPj4gICANCj4+ICAgCWkgPSAwOw0KPj4gQEAgLTEzMjksMTUgKzEzMDcsNiBAQCBp bnQgYW1kZ3B1X2FtZGtmZF9ncHV2bV9mcmVlX21lbW9yeV9vZl9ncHUoDQo+PiAgIAlsaXN0X2Rl bCgmYm9fbGlzdF9lbnRyeS0+aGVhZCk7DQo+PiAgIAltdXRleF91bmxvY2soJnByb2Nlc3NfaW5m by0+bG9jayk7DQo+PiAgIA0KPj4gLQkvKiBGcmVlIHVzZXIgcGFnZXMgaWYgbmVjZXNzYXJ5ICov DQo+PiAtCWlmIChtZW0tPnVzZXJfcGFnZXMpIHsNCj4+IC0JCXByX2RlYnVnKCIlczogRnJlZWlu ZyB1c2VyX3BhZ2VzIGFycmF5XG4iLCBfX2Z1bmNfXyk7DQo+PiAtCQlpZiAobWVtLT51c2VyX3Bh Z2VzWzBdKQ0KPj4gLQkJCXJlbGVhc2VfcGFnZXMobWVtLT51c2VyX3BhZ2VzLA0KPj4gLQkJCQkJ bWVtLT5iby0+dGJvLnR0bS0+bnVtX3BhZ2VzKTsNCj4+IC0JCWt2ZnJlZShtZW0tPnVzZXJfcGFn ZXMpOw0KPj4gLQl9DQo+PiAtDQo+PiAgIAlyZXQgPSByZXNlcnZlX2JvX2FuZF9jb25kX3Ztcyht ZW0sIE5VTEwsIEJPX1ZNX0FMTCwgJmN0eCk7DQo+PiAgIAlpZiAodW5saWtlbHkocmV0KSkNCj4+ ICAgCQlyZXR1cm4gcmV0Ow0KPj4gQEAgLTE3NTEsMjUgKzE3MjAsMTEgQEAgc3RhdGljIGludCB1 cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZvICpwcm9j ZXNzX2luZm8sDQo+PiAgIA0KPj4gICAJCWJvID0gbWVtLT5ibzsNCj4+ICAgDQo+PiAtCQlpZiAo IW1lbS0+dXNlcl9wYWdlcykgew0KPj4gLQkJCW1lbS0+dXNlcl9wYWdlcyA9DQo+PiAtCQkJCWt2 bWFsbG9jX2FycmF5KGJvLT50Ym8udHRtLT5udW1fcGFnZXMsDQo+PiAtCQkJCQkJIHNpemVvZihz dHJ1Y3QgcGFnZSAqKSwNCj4+IC0JCQkJCQkgR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOw0KPj4g LQkJCWlmICghbWVtLT51c2VyX3BhZ2VzKSB7DQo+PiAtCQkJCXByX2VycigiJXM6IEZhaWxlZCB0 byBhbGxvY2F0ZSBwYWdlcyBhcnJheVxuIiwNCj4+IC0JCQkJICAgICAgIF9fZnVuY19fKTsNCj4+ IC0JCQkJcmV0dXJuIC1FTk9NRU07DQo+PiAtCQkJfQ0KPj4gLQkJfSBlbHNlIGlmIChtZW0tPnVz ZXJfcGFnZXNbMF0pIHsNCj4+IC0JCQlyZWxlYXNlX3BhZ2VzKG1lbS0+dXNlcl9wYWdlcywgYm8t PnRiby50dG0tPm51bV9wYWdlcyk7DQo+PiAtCQl9DQo+PiAtDQo+PiAgIAkJLyogR2V0IHVwZGF0 ZWQgdXNlciBwYWdlcyAqLw0KPj4gICAJCXJldCA9IGFtZGdwdV90dG1fdHRfZ2V0X3VzZXJfcGFn ZXMoYm8tPnRiby50dG0sDQo+PiAtCQkJCQkJICAgbWVtLT51c2VyX3BhZ2VzKTsNCj4+ICsJCQkJ CQkgICBiby0+dGJvLnR0bS0+cGFnZXMpOw0KPj4gICAJCWlmIChyZXQpIHsNCj4+IC0JCQltZW0t PnVzZXJfcGFnZXNbMF0gPSBOVUxMOw0KPj4gKwkJCWJvLT50Ym8udHRtLT5wYWdlc1swXSA9IE5V TEw7DQo+PiAgIAkJCXByX2luZm8oIiVzOiBGYWlsZWQgdG8gZ2V0IHVzZXIgcGFnZXM6ICVkXG4i LA0KPj4gICAJCQkJX19mdW5jX18sIHJldCk7DQo+PiAgIAkJCS8qIFByZXRlbmQgaXQgc3VjY2Vl ZGVkLiBJdCB3aWxsIGZhaWwgbGF0ZXINCj4+IEBAIC0xNzc4LDEyICsxNzMzLDYgQEAgc3RhdGlj IGludCB1cGRhdGVfaW52YWxpZF91c2VyX3BhZ2VzKHN0cnVjdCBhbWRrZmRfcHJvY2Vzc19pbmZv ICpwcm9jZXNzX2luZm8sDQo+PiAgIAkJCSAqIHN0YWxsZWQgdXNlciBtb2RlIHF1ZXVlcy4NCj4+ ICAgCQkJICovDQo+PiAgIAkJfQ0KPj4gLQ0KPj4gLQkJLyogTWFyayB0aGUgQk8gYXMgdmFsaWQg dW5sZXNzIGl0IHdhcyBpbnZhbGlkYXRlZA0KPj4gLQkJICogYWdhaW4gY29uY3VycmVudGx5DQo+ PiAtCQkgKi8NCj4+IC0JCWlmIChhdG9taWNfY21weGNoZygmbWVtLT5pbnZhbGlkLCBpbnZhbGlk LCAwKSAhPSBpbnZhbGlkKQ0KPj4gLQkJCXJldHVybiAtRUFHQUlOOw0KPiBJIHRoaW5rIHlvdSdy ZSByZW1vdmluZyB0aGlzIHRvIG1ha2Ugc3VyZSB3ZSBleGFjdGx5IHBhaXIgdXANCj4gYW1kZ3B1 X3R0bV90dF9nZXRfdXNlcl9wYWdlcyBhbmQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlc19k b25lDQo+IGNhbGxzLiBCdXQgdGhlcmUgYXJlIG90aGVyIGVycm9yIGNvbmRpdGlvbnMgaW4NCj4g dmFsaWRhdGVfaW52YWxpZF91c2VyX3BhZ2VzIHRoYXQgd291bGQgc2tpcCB0aGUNCj4gYW1kZ3B1 X3R0bV90dF9nZXRfdXNlcl9wYWdlc19kb25lIGNhbGxzLiBUaGF0IHdpbGwgbmVlZCB0byBiZSBo YW5kbGVkDQo+IHByb3Blcmx5IGluIHRoZSBlcnJvci1oYW5kbGluZyBjb2RlIHBhdGhzIGluIHZh bGlkYXRlX2ludmFsaWRfdXNlcl9wYWdlcy4NCj4NClllcy4gQXQgZW5kIG9mIHZhbGlkYXRlX2lu dmFsaWRfdXNlcl9wYWdlcywgYWRkIGxvb3AgdG8gY2FsbCANCmFtZGdwdV90dG1fdHRfZ2V0X3Vz ZXJfcGFnZXNfZG9uZQ0KZm9yIHByb2Nlc3NfaW5mby0+dXNlcnB0cl9pbnZhbF9saXN0LCB0aGlz IGNvdmVyIGFsbCBlcnJvci1oYW5kbGluZyBwYXRocw0KPj4gICAJfQ0KPj4gICANCj4+ICAgCXJl dHVybiAwOw0KPj4gQEAgLTE4NjMsMTAgKzE4MTIsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2lu dmFsaWRfdXNlcl9wYWdlcyhzdHJ1Y3QgYW1ka2ZkX3Byb2Nlc3NfaW5mbyAqcHJvY2Vzc19pbmZv KQ0KPj4gICANCj4+ICAgCQlibyA9IG1lbS0+Ym87DQo+PiAgIA0KPj4gLQkJLyogQ29weSBwYWdl cyBhcnJheSBhbmQgdmFsaWRhdGUgdGhlIEJPIGlmIHdlIGdvdCB1c2VyIHBhZ2VzICovDQo+PiAt CQlpZiAobWVtLT51c2VyX3BhZ2VzWzBdKSB7DQo+PiAtCQkJYW1kZ3B1X3R0bV90dF9zZXRfdXNl cl9wYWdlcyhiby0+dGJvLnR0bSwNCj4+IC0JCQkJCQkgICAgIG1lbS0+dXNlcl9wYWdlcyk7DQo+ PiArCQkvKiBWYWxpZGF0ZSB0aGUgQk8gaWYgd2UgZ290IHVzZXIgcGFnZXMgKi8NCj4+ICsJCWlm IChiby0+dGJvLnR0bS0+cGFnZXNbMF0pIHsNCj4+ICAgCQkJYW1kZ3B1X2JvX3BsYWNlbWVudF9m cm9tX2RvbWFpbihibywgbWVtLT5kb21haW4pOw0KPj4gICAJCQlyZXQgPSB0dG1fYm9fdmFsaWRh dGUoJmJvLT50Ym8sICZiby0+cGxhY2VtZW50LCAmY3R4KTsNCj4+ICAgCQkJaWYgKHJldCkgew0K Pj4gQEAgLTE4NzUsMTYgKzE4MjIsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9pbnZhbGlkX3Vz ZXJfcGFnZXMoc3RydWN0IGFtZGtmZF9wcm9jZXNzX2luZm8gKnByb2Nlc3NfaW5mbykNCj4+ICAg CQkJfQ0KPj4gICAJCX0NCj4+ICAgDQo+PiAtCQkvKiBWYWxpZGF0ZSBzdWNjZWVkZWQsIG5vdyB0 aGUgQk8gb3ducyB0aGUgcGFnZXMsIGZyZWUNCj4+IC0JCSAqIG91ciBjb3B5IG9mIHRoZSBwb2lu dGVyIGFycmF5LiBQdXQgdGhpcyBCTyBiYWNrIG9uDQo+PiAtCQkgKiB0aGUgdXNlcnB0cl92YWxp ZF9saXN0LiBJZiB3ZSBuZWVkIHRvIHJldmFsaWRhdGUNCj4+IC0JCSAqIGl0LCB3ZSBuZWVkIHRv IHN0YXJ0IGZyb20gc2NyYXRjaC4NCj4+IC0JCSAqLw0KPj4gLQkJa3ZmcmVlKG1lbS0+dXNlcl9w YWdlcyk7DQo+PiAtCQltZW0tPnVzZXJfcGFnZXMgPSBOVUxMOw0KPj4gICAJCWxpc3RfbW92ZV90 YWlsKCZtZW0tPnZhbGlkYXRlX2xpc3QuaGVhZCwNCj4+ICAgCQkJICAgICAgICZwcm9jZXNzX2lu Zm8tPnVzZXJwdHJfdmFsaWRfbGlzdCk7DQo+PiAgIA0KPj4gKwkJLyogU3RvcCBITU0gdHJhY2sg dGhlIHVzZXJwdHIgdXBkYXRlLiBXZSBkb250IGNoZWNrIHRoZSByZXR1cm4NCj4+ICsJCSAqIHZh bHVlIGZvciBjb25jdXJyZW50IENQVSBwYWdlIHRhYmxlIHVwZGF0ZSBiZWNhdXNlIHdlIHdpbGwN Cj4+ICsJCSAqIHJlc2NoZWR1bGUgdGhlIHJlc3RvcmUgd29ya2VyIGlmIHByb2Nlc3NfaW5mby0+ ZXZpY3RlZF9ib3MNCj4+ICsJCSAqIGlzIHVwZGF0ZWQuDQo+PiArCQkgKi8NCj4+ICsJCWFtZGdw dV90dG1fdHRfZ2V0X3VzZXJfcGFnZXNfZG9uZShiby0+dGJvLnR0bSk7DQo+PiArDQo+PiAgIAkJ LyogVXBkYXRlIG1hcHBpbmcuIElmIHRoZSBCTyB3YXMgbm90IHZhbGlkYXRlZA0KPj4gICAJCSAq IChiZWNhdXNlIHdlIGNvdWxkbid0IGdldCB1c2VyIHBhZ2VzKSwgdGhpcyB3aWxsDQo+PiAgIAkJ ICogY2xlYXIgdGhlIHBhZ2UgdGFibGUgZW50cmllcywgd2hpY2ggd2lsbCByZXN1bHQgaW4NCj4+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5j IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2JvX2xpc3QuYw0KPj4gaW5kZXgg NWM3OWRhOGUxMTUwLi4zODQyMTgzOTcwY2MgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5jDQo+PiBAQCAtMjAwLDggKzIwMCw2IEBAIHZvaWQg YW1kZ3B1X2JvX2xpc3RfZ2V0X2xpc3Qoc3RydWN0IGFtZGdwdV9ib19saXN0ICpsaXN0LA0KPj4g ICANCj4+ICAgCQlpZiAoIWJvLT5wYXJlbnQpDQo+PiAgIAkJCWxpc3RfYWRkX3RhaWwoJmUtPnR2 LmhlYWQsICZidWNrZXRbcHJpb3JpdHldKTsNCj4+IC0NCj4+IC0JCWUtPnVzZXJfcGFnZXMgPSBO VUxMOw0KPj4gICAJfQ0KPj4gICANCj4+ICAgCS8qIENvbm5lY3QgdGhlIHNvcnRlZCBidWNrZXRz IGluIHRoZSBvdXRwdXQgbGlzdC4gKi8NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUv YW1kZ3B1X2JvX2xpc3QuaA0KPj4gaW5kZXggN2M1ZjVkMTYwMWU2Li40YmVhYjJkZTA5YjMgMTAw NjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5o DQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYm9fbGlzdC5oDQo+ PiBAQCAtMzUsOCArMzUsNyBAQCBzdHJ1Y3QgYW1kZ3B1X2JvX2xpc3RfZW50cnkgew0KPj4gICAJ c3RydWN0IHR0bV92YWxpZGF0ZV9idWZmZXIJdHY7DQo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X2JvX3Zh CQkqYm9fdmE7DQo+PiAgIAl1aW50MzJfdAkJCXByaW9yaXR5Ow0KPj4gLQlzdHJ1Y3QgcGFnZQkJ CSoqdXNlcl9wYWdlczsNCj4+IC0JaW50CQkJCXVzZXJfaW52YWxpZGF0ZWQ7DQo+PiArCWJvb2wJ CQkJdXNlcl9pbnZhbGlkYXRlZDsNCj4+ICAgfTsNCj4+ICAgDQo+PiAgIHN0cnVjdCBhbWRncHVf Ym9fbGlzdCB7DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X2NzLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfY3MuYw0KPiBbc25p cF0NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Vt LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2VtLmMNCj4gW3NuaXBdDQo+ PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X21uLmMgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uYw0KPj4gaW5kZXggNWQ1MThkMmJi OWJlLi5jODAwMmVlMWQ0MTUgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfbW4uYw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1k Z3B1X21uLmMNCj4+IEBAIC0yMjksOCArMjI5LDYgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X21uX2lu dmFsaWRhdGVfbm9kZShzdHJ1Y3QgYW1kZ3B1X21uX25vZGUgKm5vZGUsDQo+PiAgIAkJCXRydWUs IGZhbHNlLCBNQVhfU0NIRURVTEVfVElNRU9VVCk7DQo+PiAgIAkJaWYgKHIgPD0gMCkNCj4+ICAg CQkJRFJNX0VSUk9SKCIoJWxkKSBmYWlsZWQgdG8gd2FpdCBmb3IgdXNlciBib1xuIiwgcik7DQo+ PiAtDQo+PiAtCQlhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhiby0+dGJvLnR0bSk7DQo+ PiAgIAl9DQo+PiAgIH0NCj4+ICAgDQo+PiBAQCAtMzUzLDE1ICszNTEsMTYgQEAgc3RhdGljIHN0 cnVjdCBobW1fbWlycm9yX29wcyBhbWRncHVfaG1tX21pcnJvcl9vcHNbXSA9IHsNCj4+ICAgLyoq DQo+PiAgICAqIGFtZGdwdV9tbl9nZXQgLSBjcmVhdGUgSE1NIG1pcnJvciBjb250ZXh0DQo+PiAg ICAqDQo+PiArICogQG1tOiB0aGUgbW0gc3RydWN0DQo+PiAgICAqIEBhZGV2OiBhbWRncHUgZGV2 aWNlIHBvaW50ZXINCj4+ICAgICogQHR5cGU6IHR5cGUgb2YgTU1VIG5vdGlmaWVyIGNvbnRleHQN Cj4+ICAgICoNCj4+IC0gKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBjdXJyZW50 LT5tbS4NCj4+ICsgKiBDcmVhdGVzIGEgSE1NIG1pcnJvciBjb250ZXh0IGZvciBtbS4NCj4+ICAg ICovDQo+PiAtc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgYW1kZ3B1X2Rl dmljZSAqYWRldiwNCj4+ICtzdHJ1Y3QgYW1kZ3B1X21uICphbWRncHVfbW5fZ2V0KHN0cnVjdCBt bV9zdHJ1Y3QgKm1tLA0KPiBJIHRoaW5rIHRoaXMgY2hhbmdlIGlzbid0IG5lZWRlZCBhbnkgbW9y ZS4gQWxsIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbg0KPiBzcGVjaWZ5IG1tIGFzIGN1cnJlbnQt Pm1tIGFueXdheS4NCj4NClllcywgcmVtb3ZlZCB0aGlzIGNoYW5nZS4NCj4+ICsJCQkJc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+PiAgIAkJCQllbnVtIGFtZGdwdV9tbl90eXBlIHR5cGUp DQo+PiAgIHsNCj4+IC0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LT5tbTsNCj4+ICAg CXN0cnVjdCBhbWRncHVfbW4gKmFtbjsNCj4+ICAgCXVuc2lnbmVkIGxvbmcga2V5ID0gQU1ER1BV X01OX0tFWShtbSwgdHlwZSk7DQo+PiAgIAlpbnQgcjsNCj4+IEBAIC00MzEsNyArNDMwLDcgQEAg aW50IGFtZGdwdV9tbl9yZWdpc3RlcihzdHJ1Y3QgYW1kZ3B1X2JvICpibywgdW5zaWduZWQgbG9u ZyBhZGRyKQ0KPj4gICAJc3RydWN0IGxpc3RfaGVhZCBib3M7DQo+PiAgIAlzdHJ1Y3QgaW50ZXJ2 YWxfdHJlZV9ub2RlICppdDsNCj4+ICAgDQo+PiAtCWFtbiA9IGFtZGdwdV9tbl9nZXQoYWRldiwg dHlwZSk7DQo+PiArCWFtbiA9IGFtZGdwdV9tbl9nZXQoY3VycmVudC0+bW0sIGFkZXYsIHR5cGUp Ow0KPj4gICAJaWYgKElTX0VSUihhbW4pKQ0KPj4gICAJCXJldHVybiBQVFJfRVJSKGFtbik7DQo+ PiAgIA0KPj4gQEAgLTUxMywzICs1MTIsMjYgQEAgdm9pZCBhbWRncHVfbW5fdW5yZWdpc3Rlcihz dHJ1Y3QgYW1kZ3B1X2JvICpibykNCj4+ICAgCW11dGV4X3VubG9jaygmYWRldi0+bW5fbG9jayk7 DQo+PiAgIH0NCj4+ICAgDQo+PiArLyogZmxhZ3MgdXNlZCBieSBITU0gaW50ZXJuYWwsIG5vdCBy ZWxhdGVkIHRvIENQVS9HUFUgUFRFIGZsYWdzICovDQo+PiArc3RhdGljIGNvbnN0IHVpbnQ2NF90 IGhtbV9yYW5nZV9mbGFnc1tITU1fUEZOX0ZMQUdfTUFYXSA9IHsNCj4+ICsJCSgxIDw8IDApLCAv KiBITU1fUEZOX1ZBTElEICovDQo+PiArCQkoMSA8PCAxKSwgLyogSE1NX1BGTl9XUklURSAqLw0K Pj4gKwkJMCAvKiBITU1fUEZOX0RFVklDRV9QUklWQVRFICovDQo+PiArfTsNCj4+ICsNCj4+ICtz dGF0aWMgY29uc3QgdWludDY0X3QgaG1tX3JhbmdlX3ZhbHVlc1tITU1fUEZOX1ZBTFVFX01BWF0g PSB7DQo+PiArCQkweGZmZmZmZmZmZmZmZmZmZmVVTCwgLyogSE1NX1BGTl9FUlJPUiAqLw0KPj4g KwkJMCwgLyogSE1NX1BGTl9OT05FICovDQo+PiArCQkweGZmZmZmZmZmZmZmZmZmZmNVTCAvKiBI TU1fUEZOX1NQRUNJQUwgKi8NCj4+ICt9Ow0KPj4gKw0KPj4gK3ZvaWQgYW1kZ3B1X2htbV9pbml0 X3JhbmdlKHN0cnVjdCBobW1fcmFuZ2UgKnJhbmdlKQ0KPj4gK3sNCj4+ICsJaWYgKHJhbmdlKSB7 DQo+PiArCQlyYW5nZS0+ZmxhZ3MgPSBobW1fcmFuZ2VfZmxhZ3M7DQo+PiArCQlyYW5nZS0+dmFs dWVzID0gaG1tX3JhbmdlX3ZhbHVlczsNCj4+ICsJCXJhbmdlLT5wZm5fc2hpZnQgPSBQQUdFX1NI SUZUOw0KPj4gKwkJcmFuZ2UtPnBmbnMgPSBOVUxMOw0KPj4gKwkJSU5JVF9MSVNUX0hFQUQoJnJh bmdlLT5saXN0KTsNCj4+ICsJfQ0KPj4gK30NCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9tbi5oDQo+PiBpbmRleCAwYTUxZmQwMDAyMWMuLjRjNWU4Njg0N2EzYiAxMDA2NDQNCj4+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9tbi5oDQo+PiArKysgYi9k cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfbW4uaA0KPj4gQEAgLTI1LDkgKzI1LDEw IEBADQo+PiAgICNkZWZpbmUgX19BTURHUFVfTU5fSF9fDQo+PiAgIA0KPj4gICAvKg0KPj4gLSAq IE1NVSBOb3RpZmllcg0KPj4gKyAqIEhNTSBtaXJyb3INCj4+ICAgICovDQo+PiAgIHN0cnVjdCBh bWRncHVfbW47DQo+PiArc3RydWN0IGhtbV9yYW5nZTsNCj4+ICAgDQo+PiAgIGVudW0gYW1kZ3B1 X21uX3R5cGUgew0KPj4gICAJQU1ER1BVX01OX1RZUEVfR0ZYLA0KPj4gQEAgLTM3LDEwICszOCwx MiBAQCBlbnVtIGFtZGdwdV9tbl90eXBlIHsNCj4+ICAgI2lmIGRlZmluZWQoQ09ORklHX0hNTV9N SVJST1IpDQo+PiAgIHZvaWQgYW1kZ3B1X21uX2xvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOw0K Pj4gICB2b2lkIGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAqbW4pOw0KPj4gLXN0 cnVjdCBhbWRncHVfbW4gKmFtZGdwdV9tbl9nZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYs DQo+PiArc3RydWN0IGFtZGdwdV9tbiAqYW1kZ3B1X21uX2dldChzdHJ1Y3QgbW1fc3RydWN0ICpt bSwNCj4+ICsJCQkJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsDQo+PiAgIAkJCQllbnVtIGFt ZGdwdV9tbl90eXBlIHR5cGUpOw0KPj4gICBpbnQgYW1kZ3B1X21uX3JlZ2lzdGVyKHN0cnVjdCBh bWRncHVfYm8gKmJvLCB1bnNpZ25lZCBsb25nIGFkZHIpOw0KPj4gICB2b2lkIGFtZGdwdV9tbl91 bnJlZ2lzdGVyKHN0cnVjdCBhbWRncHVfYm8gKmJvKTsNCj4+ICt2b2lkIGFtZGdwdV9obW1faW5p dF9yYW5nZShzdHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSk7DQo+PiAgICNlbHNlDQo+PiAgIHN0YXRp YyBpbmxpbmUgdm9pZCBhbWRncHVfbW5fbG9jayhzdHJ1Y3QgYW1kZ3B1X21uICptbikge30NCj4+ ICAgc3RhdGljIGlubGluZSB2b2lkIGFtZGdwdV9tbl91bmxvY2soc3RydWN0IGFtZGdwdV9tbiAq bW4pIHt9DQo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X3R0bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQo+PiBpbmRl eCBjOTFlYzMxMDFkMDAuLjMzMDU3ZDYxMTRjNyAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV90dG0uYw0KPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X3R0bS5jDQo+PiBAQCAtNDMsNiArNDMsNyBAQA0KPj4gICAjaW5jbHVk ZSA8bGludXgvcGFnZW1hcC5oPg0KPj4gICAjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPg0KPj4g ICAjaW5jbHVkZSA8bGludXgvaW9tbXUuaD4NCj4+ICsjaW5jbHVkZSA8bGludXgvaG1tLmg+DQo+ PiAgICNpbmNsdWRlICJhbWRncHUuaCINCj4+ICAgI2luY2x1ZGUgImFtZGdwdV9vYmplY3QuaCIN Cj4+ICAgI2luY2x1ZGUgImFtZGdwdV90cmFjZS5oIg0KPj4gQEAgLTcwNSwxMSArNzA2LDYgQEAg c3RhdGljIHVuc2lnbmVkIGxvbmcgYW1kZ3B1X3R0bV9pb19tZW1fcGZuKHN0cnVjdCB0dG1fYnVm ZmVyX29iamVjdCAqYm8sDQo+PiAgIC8qDQo+PiAgICAqIFRUTSBiYWNrZW5kIGZ1bmN0aW9ucy4N Cj4+ICAgICovDQo+PiAtc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCB7DQo+PiAtCXN0 cnVjdCBsaXN0X2hlYWQJbGlzdDsNCj4+IC0Jc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOw0KPj4g LX07DQo+PiAtDQo+PiAgIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsNCj4+ICAgCXN0cnVjdCB0dG1f ZG1hX3R0CXR0bTsNCj4+ICAgCXU2NAkJCW9mZnNldDsNCj4+IEBAIC03MTgsMTA3ICs3MTQsMTA1 IEBAIHN0cnVjdCBhbWRncHVfdHRtX3R0IHsNCj4+ICAgCXVpbnQzMl90CQl1c2VyZmxhZ3M7DQo+ PiAgIAlzcGlubG9ja190ICAgICAgICAgICAgICBndXB0YXNrbG9jazsNCj4+ICAgCXN0cnVjdCBs aXN0X2hlYWQgICAgICAgIGd1cHRhc2tzOw0KPj4gLQlhdG9taWNfdAkJbW11X2ludmFsaWRhdGlv bnM7DQo+PiAtCXVpbnQzMl90CQlsYXN0X3NldF9wYWdlczsNCj4+ICsJc3RydWN0IGhtbV9yYW5n ZQlyYW5nZTsNCj4+ICAgfTsNCj4+ICAgDQo+PiAgIC8qKg0KPj4gLSAqIGFtZGdwdV90dG1fdHRf Z2V0X3VzZXJfcGFnZXMgLSBQaW4gcGFnZXMgb2YgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYSBVU0VS UFRSDQo+PiAtICogcG9pbnRlciB0byBtZW1vcnkNCj4+ICsgKiBhbWRncHVfdHRtX3R0X2dldF91 c2VyX3BhZ2VzIC0gZ2V0IGRldmljZSBhY2Nlc3NpYmxlIHBhZ2VzIHRoYXQgYmFjayB1c2VyDQo+ PiArICogbWVtb3J5IGFuZCBzdGFydCBITU0gdHJhY2tpbmcgQ1BVIHBhZ2UgdGFibGUgdXBkYXRl DQo+PiAgICAqDQo+PiAtICogQ2FsbGVkIGJ5IGFtZGdwdV9nZW1fdXNlcnB0cl9pb2N0bCgpIGFu ZCBhbWRncHVfY3NfcGFyc2VyX2JvcygpLg0KPj4gLSAqIFRoaXMgcHJvdmlkZXMgYSB3cmFwcGVy IGFyb3VuZCB0aGUgZ2V0X3VzZXJfcGFnZXMoKSBjYWxsIHRvIHByb3ZpZGUNCj4+IC0gKiBkZXZp Y2UgYWNjZXNzaWJsZSBwYWdlcyB0aGF0IGJhY2sgdXNlciBtZW1vcnkuDQo+PiArICogQ2FsbGlu ZyBmdW5jdGlvbiBtdXN0IGNhbGwgYW1kZ3B1X3R0bV90dF91c2VycHRyX3JhbmdlX2RvbmUoKSBv bmNlIGFuZCBvbmx5DQo+PiArICogb25jZSBhZnRlcndhcmRzIHRvIHN0b3AgSE1NIHRyYWNraW5n DQo+PiAgICAqLw0KPj4gICBpbnQgYW1kZ3B1X3R0bV90dF9nZXRfdXNlcl9wYWdlcyhzdHJ1Y3Qg dHRtX3R0ICp0dG0sIHN0cnVjdCBwYWdlICoqcGFnZXMpDQo+PiAgIHsNCj4+ICAgCXN0cnVjdCBh bWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4+ICAgCXN0cnVjdCBtbV9zdHJ1Y3Qg Km1tID0gZ3R0LT51c2VydGFzay0+bW07DQo+PiAtCXVuc2lnbmVkIGludCBmbGFncyA9IDA7DQo+ PiAtCXVuc2lnbmVkIHBpbm5lZCA9IDA7DQo+PiAtCWludCByOw0KPj4gKwl1bnNpZ25lZCBsb25n IGVuZCA9IGd0dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFOw0KPj4gKwlz dHJ1Y3QgaG1tX3JhbmdlICpyYW5nZSA9ICZndHQtPnJhbmdlOw0KPj4gKwlpbnQgciwgaTsNCj4+ ICAgDQo+PiAgIAlpZiAoIW1tKSAvKiBIYXBwZW5zIGR1cmluZyBwcm9jZXNzIHNodXRkb3duICov DQo+PiAgIAkJcmV0dXJuIC1FU1JDSDsNCj4+ICAgDQo+PiAtCWlmICghKGd0dC0+dXNlcmZsYWdz ICYgQU1ER1BVX0dFTV9VU0VSUFRSX1JFQURPTkxZKSkNCj4+IC0JCWZsYWdzIHw9IEZPTExfV1JJ VEU7DQo+PiArCWFtZGdwdV9obW1faW5pdF9yYW5nZShyYW5nZSk7DQo+PiAgIA0KPj4gICAJZG93 bl9yZWFkKCZtbS0+bW1hcF9zZW0pOw0KPj4gICANCj4+ICsJcmFuZ2UtPnZtYSA9IGZpbmRfdm1h KG1tLCBndHQtPnVzZXJwdHIpOw0KPiBUaGVyZSBpcyBzdGlsbCBhbiBhc3N1bXB0aW9uIGhlcmUg dGhhdCBvdXIgdXNlcnB0ciBCT3MgY292ZXIgb25seSBhDQo+IHNpbmdsZSBWTS4gVGhpcyBpcyBh IG5ldyBsaW1pdGF0aW9uIHdpdGggSE1NIHRoYXQgdGhlIHByZXZpb3VzDQo+IGdldF91c2VyX3Bh Z2VzLWJhc2VkIGltcGxlbWVudGF0aW9uIGRpZCBub3QgaGF2ZS4gV2UncmUgcHJvYmFibHkgT0sg d2l0aA0KPiB0aGlzIGZvciBub3cuIEJ1dCB3ZSBtYXkgcnVuIGludG8gcmVncmVzc2lvbnMgaWYg dGhlcmUgYXJlIGFueSBST0NtDQo+IGFwcGxpY2F0aW9uIHRoYXQgcmVnaXN0ZXIgdXNlciBtZW1v cnkgc3Bhbm5pbmcgbXVsdGlwbGUgVk1Bcy4gSWYgdGhhdA0KPiBoYXBwZW5zLCB3ZSBtYXkgbmVl ZCB0byBnZW5lcmFsaXplIHRoaXMgc28gdGhhdCBlYWNoIHVzZXJwdHIgQk8gY2FuIGhhdmUNCj4g bXVsdGlwbGUgSE1NIHJhbmdlcy4NCm9rLCB0aGFua3MuDQo+DQo+PiAgIAlpZiAoZ3R0LT51c2Vy ZmxhZ3MgJiBBTURHUFVfR0VNX1VTRVJQVFJfQU5PTk9OTFkpIHsNCj4+ICAgCQkvKg0KPj4gICAJ CSAqIGNoZWNrIHRoYXQgd2Ugb25seSB1c2UgYW5vbnltb3VzIG1lbW9yeSB0byBwcmV2ZW50IHBy b2JsZW1zDQo+PiAgIAkJICogd2l0aCB3cml0ZWJhY2sNCj4+ICAgCQkgKi8NCj4+IC0JCXVuc2ln bmVkIGxvbmcgZW5kID0gZ3R0LT51c2VycHRyICsgdHRtLT5udW1fcGFnZXMgKiBQQUdFX1NJWkU7 DQo+PiAtCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsNCj4+ICsJCXN0cnVjdCB2bV9hcmVh X3N0cnVjdCAqdm1hID0gcmFuZ2UtPnZtYTsNCj4+ICAgDQo+PiAtCQl2bWEgPSBmaW5kX3ZtYSht bSwgZ3R0LT51c2VycHRyKTsNCj4+IC0JCWlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8fCB2bWEt PnZtX2VuZCA8IGVuZCkgew0KPj4gLQkJCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7DQo+PiAtCQkJ cmV0dXJuIC1FUEVSTTsNCj4+IC0JCX0NCj4+ICsJCWlmICghdm1hIHx8IHZtYS0+dm1fZmlsZSB8 fCB2bWEtPnZtX2VuZCA8IGVuZCkNCj4+ICsJCQlyYW5nZS0+dm1hID0gTlVMTDsNCj4+ICAgCX0N Cj4+ICAgDQo+PiAtCS8qIGxvb3AgZW5vdWdoIHRpbWVzIHVzaW5nIGNvbnRpZ3VvdXMgcGFnZXMg b2YgbWVtb3J5ICovDQo+PiAtCWRvIHsNCj4+IC0JCXVuc2lnbmVkIG51bV9wYWdlcyA9IHR0bS0+ bnVtX3BhZ2VzIC0gcGlubmVkOw0KPj4gLQkJdWludDY0X3QgdXNlcnB0ciA9IGd0dC0+dXNlcnB0 ciArIHBpbm5lZCAqIFBBR0VfU0laRTsNCj4+IC0JCXN0cnVjdCBwYWdlICoqcCA9IHBhZ2VzICsg cGlubmVkOw0KPj4gLQkJc3RydWN0IGFtZGdwdV90dG1fZ3VwX3Rhc2tfbGlzdCBndXB0YXNrOw0K Pj4gLQ0KPj4gLQkJZ3VwdGFzay50YXNrID0gY3VycmVudDsNCj4+IC0JCXNwaW5fbG9jaygmZ3R0 LT5ndXB0YXNrbG9jayk7DQo+PiAtCQlsaXN0X2FkZCgmZ3VwdGFzay5saXN0LCAmZ3R0LT5ndXB0 YXNrcyk7DQo+PiAtCQlzcGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiArCWlmICgh cmFuZ2UtPnZtYSkgew0KPj4gKwkJciA9IC1FUEVSTTsNCj4gWW91J3JlIHRyZWF0aW5nIHBlcm1p c3Npb25zIGVycm9ycyBhbmQgZXJyb3JzIGZpbmRpbmcgYSBWTUEgdGhlIHNhbWUNCj4gd2F5LiBB bmQgSSB0aGluayB5b3UgZG9uJ3QgZGV0ZWN0IGZhaWx1cmVzIHRvIGZpbmQgYSBWTUEgcHJvcGVy bHkgaW4gdGhlDQo+IGZpcnN0IHBsYWNlLiBmaW5kX3ZtYSBtYXkgcmV0dXJuIGEgVk1BIHRoYXQg ZG9lc24ndCBpbmNsdWRlIHRoZSBhZGRyZXNzDQo+IHByb3ZpZGVkLiBJdCdzIGRvY3VtZW50ZWQg YXMgIkxvb2sgdXAgdGhlIGZpcnN0IFZNQSB3aGljaCBzYXRpc2ZpZXMNCj4gYWRkciA8IHZtX2Vu ZCzCoCBOVUxMIGlmIG5vbmUuIiBZb3Ugc2hvdWxkIGFsc28gY2hlY2sgdGhhdCB0aGUgVk1BIGNv dmVycw0KPiB0aGUgZW50aXJlIGFkZHJlc3MgcmFuZ2Ugb2YgdGhlIHVzZXJwdHIgQk8uIFRoZXJl IGlzIGEgaGVscGVyIGZ1bmN0aW9uDQo+IGluIGxpbnV4L21tLmggdGhhdCBkb2VzIHRoYXQ6IHJh bmdlX2luX3ZtYShyYW5nZS0+dm1hLCBndHQtPnVzZXJwdHIsDQo+IGd0dC0+dXNlcnB0ciArIGd0 dC0+dXNlcnB0ciArIHR0bS0+bnVtX3BhZ2VzICogUEFHRV9TSVpFKS4gWW91IHNob3VsZA0KPiBj aGVjayB0aGlzIGNvbmRpdGlvbiBpbiBhbGwgY2FzZXMuDQo+DQo+IFRoZXJlIHNob3VsZCBiZSB0 d28gZGlzdGluY3QgdHlwZXMgb2YgZXJyb3JzLiBJZiBmaW5kX3ZtYSBmYWlscyB0byBmaW5kDQo+ IGEgbWF0Y2hpbmcgVk1BLCB0aGF0IHNob3VsZCBiZSAtRUZBVUxULiBJZiB0aGUgZ3R0LT51c2Vy ZmxhZ3MgZG9uJ3QNCj4gbWF0Y2ggdGhlIFZNQSBwcm9wZXJ0aWVzLCB0aGF0IHNob3VsZCBiZSAt RVBFUk0uDQo+DQpGaXhlZCwgYWRkIHJhbmdlX2luX3ZtYSBjaGVjayBmb3IgYm90aCBjYXNlcw0K Pj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICAgDQo+PiAtCQlpZiAobW0gPT0gY3VycmVudC0+ bW0pDQo+PiAtCQkJciA9IGdldF91c2VyX3BhZ2VzKHVzZXJwdHIsIG51bV9wYWdlcywgZmxhZ3Ms IHAsIE5VTEwpOw0KPj4gLQkJZWxzZQ0KPj4gLQkJCXIgPSBnZXRfdXNlcl9wYWdlc19yZW1vdGUo Z3R0LT51c2VydGFzaywNCj4+IC0JCQkJCW1tLCB1c2VycHRyLCBudW1fcGFnZXMsDQo+PiAtCQkJ CQlmbGFncywgcCwgTlVMTCwgTlVMTCk7DQo+PiArCXJhbmdlLT5wZm5zID0ga3ZtYWxsb2NfYXJy YXkodHRtLT5udW1fcGFnZXMsIHNpemVvZih1aW50NjRfdCksDQo+PiArCQkJCSAgICAgR0ZQX0tF Uk5FTCk7DQo+PiArCWlmIChyYW5nZS0+cGZucyA9PSBOVUxMKSB7DQo+PiArCQlyID0gLUVOT01F TTsNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+PiArCXJhbmdlLT5zdGFydCA9IGd0dC0+dXNl cnB0cjsNCj4+ICsJcmFuZ2UtPmVuZCA9IGVuZDsNCj4+ICAgDQo+PiAtCQlzcGluX2xvY2soJmd0 dC0+Z3VwdGFza2xvY2spOw0KPj4gLQkJbGlzdF9kZWwoJmd1cHRhc2subGlzdCk7DQo+PiAtCQlz cGluX3VubG9jaygmZ3R0LT5ndXB0YXNrbG9jayk7DQo+PiArCWZvciAoaSA9IDA7IGkgPCB0dG0t Pm51bV9wYWdlczsgaSsrKSB7DQo+PiArCQlyYW5nZS0+cGZuc1tpXSA9IHJhbmdlLT5mbGFnc1tI TU1fUEZOX1ZBTElEXTsNCj4+ICsJCXJhbmdlLT5wZm5zW2ldIHw9IGFtZGdwdV90dG1fdHRfaXNf cmVhZG9ubHkodHRtKSA/DQo+PiArCQkJCQkwIDogcmFuZ2UtPmZsYWdzW0hNTV9QRk5fV1JJVEVd Ow0KPj4gKwl9DQo+IFlvdSBjb3VsZCBvcHRpbWl6ZSB0aGlzIHNsaWdodGx5LiBZb3UgZG9uJ3Qg bmVlZCB0byBjYWxsDQo+IGFtZGdwdV90dG1fdHRfaXNfcmVhZG9ubHkgaW4gZWFjaCBsb29wIGl0 ZXJhdGlvbi4gVGhlIGZsYWdzIGFyZSB0aGUgc2FtZQ0KPiBmb3IgYWxsIHBmbnMuIFNvIGRvIHRo ZSBjb25kaXRpb25hbCB0aGluZyBvbiByYW5nZS0+cGZuc1swXSwgYW5kIHRoZW4NCj4ganVzdCBj b3B5IHRoYXQgdG8gYWxsIHRoZSByZW1haW5pbmcgcGZucy4NCj4NCkRvbmUsIHRoYW5rcy4NCj4+ ICAgDQo+PiAtCQlpZiAociA8IDApDQo+PiAtCQkJZ290byByZWxlYXNlX3BhZ2VzOw0KPj4gKwkv KiBUaGlzIG1heSB0cmlnZ2VyIHBhZ2UgdGFibGUgdXBkYXRlICovDQo+PiArCXIgPSBobW1fdm1h X2ZhdWx0KHJhbmdlLCB0cnVlKTsNCj4+ICsJaWYgKHIpDQo+PiArCQlnb3RvIG91dF9mcmVlX3Bm bnM7DQo+PiAgIA0KPj4gLQkJcGlubmVkICs9IHI7DQo+PiArCXVwX3JlYWQoJm1tLT5tbWFwX3Nl bSk7DQo+PiAgIA0KPj4gLQl9IHdoaWxlIChwaW5uZWQgPCB0dG0tPm51bV9wYWdlcyk7DQo+PiAr CWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgaSsrKQ0KPj4gKwkJcGFnZXNbaV0gPSBo bW1fcGZuX3RvX3BhZ2UocmFuZ2UsIHJhbmdlLT5wZm5zW2ldKTsNCj4+ICAgDQo+PiAtCXVwX3Jl YWQoJm1tLT5tbWFwX3NlbSk7DQo+PiAgIAlyZXR1cm4gMDsNCj4+ICAgDQo+PiAtcmVsZWFzZV9w YWdlczoNCj4+IC0JcmVsZWFzZV9wYWdlcyhwYWdlcywgcGlubmVkKTsNCj4+ICtvdXRfZnJlZV9w Zm5zOg0KPj4gKwlrdmZyZWUocmFuZ2UtPnBmbnMpOw0KPj4gKwlyYW5nZS0+cGZucyA9IE5VTEw7 DQo+PiArb3V0Og0KPj4gICAJdXBfcmVhZCgmbW0tPm1tYXBfc2VtKTsNCj4+ICAgCXJldHVybiBy Ow0KPj4gICB9DQo+PiAgIA0KPj4gICAvKioNCj4+IC0gKiBhbWRncHVfdHRtX3R0X3NldF91c2Vy X3BhZ2VzIC0gQ29weSBwYWdlcyBpbiwgcHV0dGluZyBvbGQgcGFnZXMgYXMgbmVjZXNzYXJ5Lg0K Pj4gKyAqIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9yYW5nZV9kb25lIC0gc3RvcCBITU0gdHJhY2sg dGhlIENQVSBwYWdlIHRhYmxlIGNoYW5nZQ0KPj4gKyAqIENoZWNrIGlmIHRoZSBwYWdlcyBiYWNr aW5nIHRoaXMgdHRtIHJhbmdlIGhhdmUgYmVlbiBpbnZhbGlkYXRlZA0KPj4gICAgKg0KPj4gLSAq IENhbGxlZCBieSBhbWRncHVfY3NfbGlzdF92YWxpZGF0ZSgpLiBUaGlzIGNyZWF0ZXMgdGhlIHBh Z2UgbGlzdA0KPj4gLSAqIHRoYXQgYmFja3MgdXNlciBtZW1vcnkgYW5kIHdpbGwgdWx0aW1hdGVs eSBiZSBtYXBwZWQgaW50byB0aGUgZGV2aWNlDQo+PiAtICogYWRkcmVzcyBzcGFjZS4NCj4+ICsg KiBSZXR1cm5zOiB0cnVlIGlmIHBhZ2VzIGFyZSBpbnZhbGlkYXRlZCBzaW5jZSB0aGUgbGFzdCB0 aW1lIHRoZXkndmUgYmVlbiBzZXQNCj4gSSBzdGlsbCBkb24ndCBsaWtlIHRoYXQgeW91J3JlIGlu dmVydGluZyB0aGUgcmV0dXJuIHZhbHVlIG9mDQo+IGhtbV92bWFfcmFuZ2VfZG9uZS4gVGhpcyB3 aWxsIGdldCBjb25mdXNpbmcgaW4gdGhlIGZ1dHVyZS4gQ291bGQgdGhpcw0KPiBmdW5jdGlvbiBp bnN0ZWFkIHJldHVybiAidHJ1ZSBpZiBwYWdlcyBhcmUgc3RpbGwgdmFsaWQiPw0KPg0KRG9uZSwg cmV0dXJuIHRydWUgaWYgcGFnZXMgYXJlIHN0aWxsIHZhbGlkDQo+PiAgICAqLw0KPj4gLXZvaWQg YW1kZ3B1X3R0bV90dF9zZXRfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0dG0sIHN0cnVjdCBw YWdlICoqcGFnZXMpDQo+PiArYm9vbCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUo c3RydWN0IHR0bV90dCAqdHRtKQ0KPj4gICB7DQo+PiAgIAlzdHJ1Y3QgYW1kZ3B1X3R0bV90dCAq Z3R0ID0gKHZvaWQgKil0dG07DQo+PiAtCXVuc2lnbmVkIGk7DQo+PiArCWJvb2wgcjsNCj4+ICAg DQo+PiAtCWd0dC0+bGFzdF9zZXRfcGFnZXMgPSBhdG9taWNfcmVhZCgmZ3R0LT5tbXVfaW52YWxp ZGF0aW9ucyk7DQo+PiAtCWZvciAoaSA9IDA7IGkgPCB0dG0tPm51bV9wYWdlczsgKytpKSB7DQo+ PiAtCQlpZiAodHRtLT5wYWdlc1tpXSkNCj4+IC0JCQlwdXRfcGFnZSh0dG0tPnBhZ2VzW2ldKTsN Cj4+ICsJaWYgKGd0dCA9PSBOVUxMIHx8ICFndHQtPnVzZXJwdHIpDQo+PiArCQlyZXR1cm4gZmFs c2U7DQo+IFVzZSAiIWd0dCIgaW5zdGVhZCBvZiAiZ3R0ID09IE5VTEwiLiBBbHNvLCByZXR1cm5p bmcgImZhbHNlIiBoZXJlIG1lYW5zDQo+IHRoZSBwYWdlcyBhcmUgc3RpbGwgdmFsaWQuIFRoYXQg c2VlbXMgbGlrZSB0aGUgd3JvbmcgYW5zd2VyIGZvciB0aGlzDQo+IGtpbmQgb2YgZmFpbHVyZS4g ImZhbHNlIiB3b3VsZCBtYWtlIHNlbnNlIGhlcmUgaWYgeW91IGZvbGxvd2VkIG15DQo+IHN1Z2dl c3Rpb24gYWJvdmUgdG8gcmV0dXJuIHRydWUsIGlmIHRoZSBwYWdlcyBhcmUgc3RpbGwgdmFsaWQu DQpEb25lLCB0aGFua3MuDQo+DQo+PiAgIA0KPj4gLQkJdHRtLT5wYWdlc1tpXSA9IHBhZ2VzID8g cGFnZXNbaV0gOiBOVUxMOw0KPj4gKwlyID0gaG1tX3ZtYV9yYW5nZV9kb25lKCZndHQtPnJhbmdl KTsNCj4+ICsNCj4+ICsJaWYgKGd0dC0+cmFuZ2UucGZucykgew0KPj4gKwkJa3ZmcmVlKGd0dC0+ cmFuZ2UucGZucyk7DQo+PiArCQlndHQtPnJhbmdlLnBmbnMgPSBOVUxMOw0KPj4gICAJfQ0KPj4g Kw0KPj4gKwlyZXR1cm4gIXI7DQo+IEkgc3RpbGwgZG9uJ3QgbGlrZSB0aGF0IHlvdSdyZSBpbnZl cnRpbmcgdGhlIHJldHVybiB2YWx1ZSBvZg0KPiBobW1fdm1hX3JhbmdlX2RvbmUuIFRoaXMgd2ls bCBnZXQgY29uZnVzaW5nIGluIHRoZSBmdXR1cmUuDQo+DQo+IFJlZ2FyZHMsDQo+ICDCoCBGZWxp eA0KPg0KPg0KPj4gICB9DQo+PiAgIA0KPj4gICAvKioNCj4+IEBAIC05MDMsOSArODk3LDYgQEAg c3RhdGljIHZvaWQgYW1kZ3B1X3R0bV90dF91bnBpbl91c2VycHRyKHN0cnVjdCB0dG1fdHQgKnR0 bSkNCj4+ICAgCS8qIHVubWFwIHRoZSBwYWdlcyBtYXBwZWQgdG8gdGhlIGRldmljZSAqLw0KPj4g ICAJZG1hX3VubWFwX3NnKGFkZXYtPmRldiwgdHRtLT5zZy0+c2dsLCB0dG0tPnNnLT5uZW50cywg ZGlyZWN0aW9uKTsNCj4+ICAgDQo+PiAtCS8qIG1hcmsgdGhlIHBhZ2VzIGFzIGRpcnR5ICovDQo+ PiAtCWFtZGdwdV90dG1fdHRfbWFya191c2VyX3BhZ2VzKHR0bSk7DQo+PiAtDQo+PiAgIAlzZ19m cmVlX3RhYmxlKHR0bS0+c2cpOw0KPj4gICB9DQo+PiAgIA0KPj4gQEAgLTEyMDcsNyArMTE5OCw3 IEBAIHN0YXRpYyB2b2lkIGFtZGdwdV90dG1fdHRfdW5wb3B1bGF0ZShzdHJ1Y3QgdHRtX3R0ICp0 dG0pDQo+PiAgIAlib29sIHNsYXZlID0gISEodHRtLT5wYWdlX2ZsYWdzICYgVFRNX1BBR0VfRkxB R19TRyk7DQo+PiAgIA0KPj4gICAJaWYgKGd0dCAmJiBndHQtPnVzZXJwdHIpIHsNCj4+IC0JCWFt ZGdwdV90dG1fdHRfc2V0X3VzZXJfcGFnZXModHRtLCBOVUxMKTsNCj4+ICsJCW1lbXNldCh0dG0t PnBhZ2VzLCAwLCB0dG0tPm51bV9wYWdlcyAqIHNpemVvZihzdHJ1Y3QgcGFnZSAqKSk7DQo+PiAg IAkJa2ZyZWUodHRtLT5zZyk7DQo+PiAgIAkJdHRtLT5wYWdlX2ZsYWdzICY9IH5UVE1fUEFHRV9G TEFHX1NHOw0KPj4gICAJCXJldHVybjsNCj4+IEBAIC0xMjU4LDggKzEyNDksNiBAQCBpbnQgYW1k Z3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0sIHVpbnQ2NF90IGFkZHIs DQo+PiAgIA0KPj4gICAJc3Bpbl9sb2NrX2luaXQoJmd0dC0+Z3VwdGFza2xvY2spOw0KPj4gICAJ SU5JVF9MSVNUX0hFQUQoJmd0dC0+Z3VwdGFza3MpOw0KPj4gLQlhdG9taWNfc2V0KCZndHQtPm1t dV9pbnZhbGlkYXRpb25zLCAwKTsNCj4+IC0JZ3R0LT5sYXN0X3NldF9wYWdlcyA9IDA7DQo+PiAg IA0KPj4gICAJcmV0dXJuIDA7DQo+PiAgIH0NCj4+IEBAIC0xMjg5LDcgKzEyNzgsNiBAQCBib29s IGFtZGdwdV90dG1fdHRfYWZmZWN0X3VzZXJwdHIoc3RydWN0IHR0bV90dCAqdHRtLCB1bnNpZ25l ZCBsb25nIHN0YXJ0LA0KPj4gICAJCQkJICB1bnNpZ25lZCBsb25nIGVuZCkNCj4+ICAgew0KPj4g ICAJc3RydWN0IGFtZGdwdV90dG1fdHQgKmd0dCA9ICh2b2lkICopdHRtOw0KPj4gLQlzdHJ1Y3Qg YW1kZ3B1X3R0bV9ndXBfdGFza19saXN0ICplbnRyeTsNCj4+ICAgCXVuc2lnbmVkIGxvbmcgc2l6 ZTsNCj4+ICAgDQo+PiAgIAlpZiAoZ3R0ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikNCj4+IEBA IC0xMzAyLDQ4ICsxMjkwLDIwIEBAIGJvb2wgYW1kZ3B1X3R0bV90dF9hZmZlY3RfdXNlcnB0cihz dHJ1Y3QgdHRtX3R0ICp0dG0sIHVuc2lnbmVkIGxvbmcgc3RhcnQsDQo+PiAgIAlpZiAoZ3R0LT51 c2VycHRyID4gZW5kIHx8IGd0dC0+dXNlcnB0ciArIHNpemUgPD0gc3RhcnQpDQo+PiAgIAkJcmV0 dXJuIGZhbHNlOw0KPj4gICANCj4+IC0JLyogU2VhcmNoIHRoZSBsaXN0cyBvZiB0YXNrcyB0aGF0 IGhvbGQgdGhpcyBtYXBwaW5nIGFuZCBzZWUNCj4+IC0JICogaWYgY3VycmVudCBpcyBvbmUgb2Yg dGhlbS4gIElmIGl0IGlzIHJldHVybiBmYWxzZS4NCj4+IC0JICovDQo+PiAtCXNwaW5fbG9jaygm Z3R0LT5ndXB0YXNrbG9jayk7DQo+PiAtCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZndHQt Pmd1cHRhc2tzLCBsaXN0KSB7DQo+PiAtCQlpZiAoZW50cnktPnRhc2sgPT0gY3VycmVudCkgew0K Pj4gLQkJCXNwaW5fdW5sb2NrKCZndHQtPmd1cHRhc2tsb2NrKTsNCj4+IC0JCQlyZXR1cm4gZmFs c2U7DQo+PiAtCQl9DQo+PiAtCX0NCj4+IC0Jc3Bpbl91bmxvY2soJmd0dC0+Z3VwdGFza2xvY2sp Ow0KPj4gLQ0KPj4gLQlhdG9taWNfaW5jKCZndHQtPm1tdV9pbnZhbGlkYXRpb25zKTsNCj4+IC0N Cj4+ICAgCXJldHVybiB0cnVlOw0KPj4gICB9DQo+PiAgIA0KPj4gICAvKioNCj4+IC0gKiBhbWRn cHVfdHRtX3R0X3VzZXJwdHJfaW52YWxpZGF0ZWQgLSBIYXMgdGhlIHR0bV90dCBvYmplY3QgYmVl biBpbnZhbGlkYXRlZD8NCj4+ICsgKiBhbWRncHVfdHRtX3R0X2lzX3VzZXJwdHIgLSBIYXZlIHRo ZSBwYWdlcyBiYWNraW5nIGJ5IHVzZXJwdHI/DQo+PiAgICAqLw0KPj4gLWJvb2wgYW1kZ3B1X3R0 bV90dF91c2VycHRyX2ludmFsaWRhdGVkKHN0cnVjdCB0dG1fdHQgKnR0bSwNCj4+IC0JCQkJICAg ICAgIGludCAqbGFzdF9pbnZhbGlkYXRlZCkNCj4+IC17DQo+PiAtCXN0cnVjdCBhbWRncHVfdHRt X3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4+IC0JaW50IHByZXZfaW52YWxpZGF0ZWQgPSAqbGFz dF9pbnZhbGlkYXRlZDsNCj4+IC0NCj4+IC0JKmxhc3RfaW52YWxpZGF0ZWQgPSBhdG9taWNfcmVh ZCgmZ3R0LT5tbXVfaW52YWxpZGF0aW9ucyk7DQo+PiAtCXJldHVybiBwcmV2X2ludmFsaWRhdGVk ICE9ICpsYXN0X2ludmFsaWRhdGVkOw0KPj4gLX0NCj4+IC0NCj4+IC0vKioNCj4+IC0gKiBhbWRn cHVfdHRtX3R0X3VzZXJwdHJfbmVlZHNfcGFnZXMgLSBIYXZlIHRoZSBwYWdlcyBiYWNraW5nIHRo aXMgdHRtX3R0IG9iamVjdA0KPj4gLSAqIGJlZW4gaW52YWxpZGF0ZWQgc2luY2UgdGhlIGxhc3Qg dGltZSB0aGV5J3ZlIGJlZW4gc2V0Pw0KPj4gLSAqLw0KPj4gLWJvb2wgYW1kZ3B1X3R0bV90dF91 c2VycHRyX25lZWRzX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSkNCj4+ICtib29sIGFtZGdwdV90 dG1fdHRfaXNfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0dG0pDQo+PiAgIHsNCj4+ICAgCXN0cnVj dCBhbWRncHVfdHRtX3R0ICpndHQgPSAodm9pZCAqKXR0bTsNCj4+ICAgDQo+PiAgIAlpZiAoZ3R0 ID09IE5VTEwgfHwgIWd0dC0+dXNlcnB0cikNCj4+ICAgCQlyZXR1cm4gZmFsc2U7DQo+PiAgIA0K Pj4gLQlyZXR1cm4gYXRvbWljX3JlYWQoJmd0dC0+bW11X2ludmFsaWRhdGlvbnMpICE9IGd0dC0+ bGFzdF9zZXRfcGFnZXM7DQo+PiArCXJldHVybiB0cnVlOw0KPj4gICB9DQo+PiAgIA0KPj4gICAv KioNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRt LmggYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdHRtLmgNCj4+IGluZGV4IGI1 YjJkMTAxZjdkYi4uYzVhMWU3OGEwOWIxIDEwMDY0NA0KPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X3R0bS5oDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9hbWRncHVfdHRtLmgNCj4+IEBAIC0xMDIsNyArMTAyLDcgQEAgaW50IGFtZGdwdV90dG1f YWxsb2NfZ2FydChzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QgKmJvKTsNCj4+ICAgaW50IGFtZGdw dV90dG1fcmVjb3Zlcl9nYXJ0KHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqdGJvKTsNCj4+ICAg DQo+PiAgIGludCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0 bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7DQo+PiAtdm9pZCBhbWRncHVfdHRtX3R0X3NldF91c2Vy X3BhZ2VzKHN0cnVjdCB0dG1fdHQgKnR0bSwgc3RydWN0IHBhZ2UgKipwYWdlcyk7DQo+PiArYm9v bCBhbWRncHVfdHRtX3R0X2dldF91c2VyX3BhZ2VzX2RvbmUoc3RydWN0IHR0bV90dCAqdHRtKTsN Cj4+ICAgdm9pZCBhbWRncHVfdHRtX3R0X21hcmtfdXNlcl9wYWdlcyhzdHJ1Y3QgdHRtX3R0ICp0 dG0pOw0KPj4gICBpbnQgYW1kZ3B1X3R0bV90dF9zZXRfdXNlcnB0cihzdHJ1Y3QgdHRtX3R0ICp0 dG0sIHVpbnQ2NF90IGFkZHIsDQo+PiAgIAkJCQkgICAgIHVpbnQzMl90IGZsYWdzKTsNCj4+IEBA IC0xMTIsNyArMTEyLDcgQEAgYm9vbCBhbWRncHVfdHRtX3R0X2FmZmVjdF91c2VycHRyKHN0cnVj dCB0dG1fdHQgKnR0bSwgdW5zaWduZWQgbG9uZyBzdGFydCwNCj4+ICAgCQkJCSAgdW5zaWduZWQg bG9uZyBlbmQpOw0KPj4gICBib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9pbnZhbGlkYXRlZChz dHJ1Y3QgdHRtX3R0ICp0dG0sDQo+PiAgIAkJCQkgICAgICAgaW50ICpsYXN0X2ludmFsaWRhdGVk KTsNCj4+IC1ib29sIGFtZGdwdV90dG1fdHRfdXNlcnB0cl9uZWVkc19wYWdlcyhzdHJ1Y3QgdHRt X3R0ICp0dG0pOw0KPj4gK2Jvb2wgYW1kZ3B1X3R0bV90dF9pc191c2VycHRyKHN0cnVjdCB0dG1f dHQgKnR0bSk7DQo+PiAgIGJvb2wgYW1kZ3B1X3R0bV90dF9pc19yZWFkb25seShzdHJ1Y3QgdHRt X3R0ICp0dG0pOw0KPj4gICB1aW50NjRfdCBhbWRncHVfdHRtX3R0X3BkZV9mbGFncyhzdHJ1Y3Qg dHRtX3R0ICp0dG0sIHN0cnVjdCB0dG1fbWVtX3JlZyAqbWVtKTsNCj4+ICAgdWludDY0X3QgYW1k Z3B1X3R0bV90dF9wdGVfZmxhZ3Moc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIHN0cnVjdCB0 dG1fdHQgKnR0bSwNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9h bWRncHVfdm0uYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jDQo+PiBp bmRleCBmMDU5ZWMzMTRmMmIuLmFiOGZhODRiMjdhNiAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfdm0uYw0KPj4gQEAgLTYxOSw3ICs2MTksNiBAQCB2b2lkIGFtZGdw dV92bV9nZXRfcGRfYm8oc3RydWN0IGFtZGdwdV92bSAqdm0sDQo+PiAgIAllbnRyeS0+dHYuYm8g PSAmdm0tPnJvb3QuYmFzZS5iby0+dGJvOw0KPj4gICAJLyogT25lIGZvciB0aGUgVk0gdXBkYXRl cywgb25lIGZvciBUVE0gYW5kIG9uZSBmb3IgdGhlIENTIGpvYiAqLw0KPj4gICAJZW50cnktPnR2 Lm51bV9zaGFyZWQgPSAzOw0KPj4gLQllbnRyeS0+dXNlcl9wYWdlcyA9IE5VTEw7DQo+PiAgIAls aXN0X2FkZCgmZW50cnktPnR2LmhlYWQsIHZhbGlkYXRlZCk7DQo+PiAgIH0NCj4+ICAgDQoNCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFtZC1nZnggbWFp bGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeAo=