From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 17/41] drm/i915: Pass around sg_table to get_pages/put_pages backend Date: Mon, 17 Oct 2016 11:55:54 +0100 Message-ID: References: <20161014121833.439-1-chris@chris-wilson.co.uk> <20161014121833.439-18-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id E36896E2F7 for ; Mon, 17 Oct 2016 10:55:58 +0000 (UTC) In-Reply-To: <20161014121833.439-18-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDE0LzEwLzIwMTYgMTM6MTgsIENocmlzIFdpbHNvbiB3cm90ZToKPiBUaGUgcGxhbiBpcyB0 byBtb3ZlIG9iai0+cGFnZXMgb3V0IGZyb20gdW5kZXIgdGhlIHN0cnVjdF9tdXRleCBpbnRvIGl0 cwo+IG93biBwZXItb2JqZWN0IGxvY2suIFdlIG5lZWQgdG8gcHJ1bmUgYW55IGFzc3VtcHRpb24g b2YgdGhlIHN0cnVjdF9tdXRleAo+IGZyb20gdGhlIGdldF9wYWdlcy9wdXRfcGFnZXMgYmFja2Vu ZHMsIGFuZCB0byBtYWtlIGl0IGVhc2llciB3ZSBwYXNzCj4gYXJvdW5kIHRoZSBzZ190YWJsZSB0 byBvcGVyYXRlIG9uIHJhdGhlciB0aGFuIGluZGlyZWN0bHkgdmlhIHRoZSBvYmouCj4KPiBTaWdu ZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiAtLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICAgICAgfCAgMzYgKysrKyst LQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAgICAgICAgICB8IDE3MiArKysr KysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9kbWFidWYuYyAgIHwgIDIwICsrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2ZlbmNlLmMgICAgfCAgMTcgKy0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYyAgICAgIHwgIDE5ICsrLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5oICAgICAgfCAgIDYgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2lu dGVybmFsLmMgfCAgMjMgKystLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3No cmlua2VyLmMgfCAgMTEgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xl bi5jICAgfCAgNDMgKysrKy0tLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Vz ZXJwdHIuYyAgfCAgODggKysrKysrKystLS0tLS0tLQo+ICAgMTAgZmlsZXMgY2hhbmdlZCwgMjI3 IGluc2VydGlvbnMoKyksIDIwOCBkZWxldGlvbnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAo+IGluZGV4IDk1YWQzNTc3M2IyYS4uZWJhZGI1ZTU1NDc2IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oCj4gQEAgLTIxNzIsOCArMjE3Miw4IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0X29wcyB7Cj4gICAJICogYmVpbmcgcmVsZWFzZWQgb3IgdW5kZXIgbWVtb3J5IHByZXNzdXJl ICh3aGVyZSB3ZSBhdHRlbXB0IHRvCj4gICAJICogcmVhcCBwYWdlcyBmb3IgdGhlIHNocmlua2Vy KS4KPiAgIAkgKi8KPiAtCWludCAoKmdldF9wYWdlcykoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKik7Cj4gLQl2b2lkICgqcHV0X3BhZ2VzKShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq KTsKPiArCXN0cnVjdCBzZ190YWJsZSAqKCpnZXRfcGFnZXMpKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICopOwo+ICsJdm9pZCAoKnB1dF9wYWdlcykoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKiwgc3RydWN0IHNnX3RhYmxlICopOwo+ICAgCj4gICAJaW50ICgqZG1hYnVmX2V4cG9ydCko c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKik7Cj4gICAJdm9pZCAoKnJlbGVhc2UpKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICopOwo+IEBAIC0yMzA4LDggKzIzMDgsNiBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX3VzZXJwdHIgewo+ICAg CQl1aW50cHRyX3QgcHRyOwo+ICAgCQl1bnNpZ25lZCByZWFkX29ubHkgOjE7Cj4gLQkJdW5zaWdu ZWQgd29ya2VycyA6NDsKPiAtI2RlZmluZSBJOTE1X0dFTV9VU0VSUFRSX01BWF9XT1JLRVJTIDE1 CgpPcGVuIGluIGFub3RoZXIgdGhyZWFkLgoKPiAgIAo+ICAgCQlzdHJ1Y3QgaTkxNV9tbV9zdHJ1 Y3QgKm1tOwo+ICAgCQlzdHJ1Y3QgaTkxNV9tbXVfb2JqZWN0ICptbXVfb2JqZWN0Owo+IEBAIC0y MzcxLDYgKzIzNjksMTkgQEAgX19kZXByZWNhdGVkCj4gICBleHRlcm4gdm9pZCBkcm1fZ2VtX29i amVjdF91bnJlZmVyZW5jZV91bmxvY2tlZChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKik7Cj4gICAK PiAgIHN0YXRpYyBpbmxpbmUgYm9vbAo+ICtpOTE1X2dlbV9vYmplY3RfaXNfZGVhZChjb25zdCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlyZXR1cm4gYXRvbWljX3Jl YWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkgPT0gMDsKPiArfQo+ICsKPiArI2lmIElT X0VOQUJMRUQoQ09ORklHX0xPQ0tERVApCj4gKyNkZWZpbmUgbG9ja2RlcF9hc3NlcnRfaGVsZF91 bmxlc3MobG9jaywgY29uZCkgXAo+ICsJR0VNX0JVR19PTihkZWJ1Z19sb2NrcyAmJiAhbG9ja2Rl cF9pc19oZWxkKGxvY2spICYmICEoY29uZCkpCj4gKyNlbHNlCj4gKyNkZWZpbmUgbG9ja2RlcF9h c3NlcnRfaGVsZF91bmxlc3MobG9jaywgY29uZCkKPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgaW5s aW5lIGJvb2wKPiAgIGk5MTVfZ2VtX29iamVjdF9oYXNfc3RydWN0X3BhZ2UoY29uc3Qgc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIHsKPiAgIAlyZXR1cm4gb2JqLT5vcHMtPmZs YWdzICYgSTkxNV9HRU1fT0JKRUNUX0hBU19TVFJVQ1RfUEFHRTsKPiBAQCAtMzE5Niw2ICszMjA3 LDggQEAgZG1hX2FkZHJfdAo+ICAgaTkxNV9nZW1fb2JqZWN0X2dldF9kbWFfYWRkcmVzcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJCXVuc2lnbmVkIGxvbmcgbik7Cj4g ICAKPiArdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiArCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKTsKPiAgIGludCBf X2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aik7Cj4gICAKPiAgIHN0YXRpYyBpbmxpbmUgaW50IF9fbXVzdF9jaGVjawo+IEBAIC0zMjEyLDcg KzMyMjUsOCBAQCBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCj4gICBzdGF0aWMgaW5saW5lIHZvaWQKPiAgIF9faTkxNV9nZW1fb2JqZWN0 X3Bpbl9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0JbG9j a2RlcF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiArCWxvY2tk ZXBfYXNzZXJ0X2hlbGRfdW5sZXNzKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgsCj4gKwkJ CQkgICBpOTE1X2dlbV9vYmplY3RfaXNfZGVhZChvYmopKTsKPiAgIAlHRU1fQlVHX09OKCFvYmot Pm1tLnBhZ2VzKTsKPiAgIAo+ICAgCW9iai0+bW0ucGFnZXNfcGluX2NvdW50Kys7Cj4gQEAgLTMy MjcsNyArMzI0MSw4IEBAIGk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICBzdGF0aWMgaW5saW5lIHZvaWQKPiAgIF9faTkx NV9nZW1fb2JqZWN0X3VucGluX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cj4gICB7Cj4gLQlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0 ZXgpOwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZF91bmxlc3MoJm9iai0+YmFzZS5kZXYtPnN0cnVj dF9tdXRleCwKPiArCQkJCSAgIGk5MTVfZ2VtX29iamVjdF9pc19kZWFkKG9iaikpOwo+ICAgCUdF TV9CVUdfT04oIWk5MTVfZ2VtX29iamVjdF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpOwo+ICAgCUdF TV9CVUdfT04oIW9iai0+bW0ucGFnZXMpOwo+ICAgCj4gQEAgLTMyMzksNyArMzI1NCw4IEBAIHN0 YXRpYyBpbmxpbmUgdm9pZCBpOTE1X2dlbV9vYmplY3RfdW5waW5fcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAlfX2k5MTVfZ2VtX29iamVjdF91bnBpbl9wYWdlcyhv YmopOwo+ICAgfQo+ICAgCj4gLWludCBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gK3ZvaWQgX19pOTE1X2dlbV9vYmplY3RfcHV0 X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+ICt2b2lkIF9faTkxNV9n ZW1fb2JqZWN0X2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4g ICAKPiAgIGVudW0gaTkxNV9tYXBfdHlwZSB7Cj4gICAJSTkxNV9NQVBfV0IgPSAwLAo+IEBAIC0z NDYyLDggKzM0NzgsMTAgQEAgaTkxNV92bWFfdW5waW5fZmVuY2Uoc3RydWN0IGk5MTVfdm1hICp2 bWEpCj4gICB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpOwo+ICAgCj4gICB2b2lkIGk5MTVfZ2VtX2RldGVjdF9iaXRfNl9zd2l6emxlKHN0cnVjdCBk cm1fZGV2aWNlICpkZXYpOwo+IC12b2lkIGk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenps ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAtdm9pZCBpOTE1X2dlbV9vYmpl Y3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsK PiArdm9pZCBpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCSAgICAgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKTsK PiArdm9pZCBpOTE1X2dlbV9vYmplY3Rfc2F2ZV9iaXRfMTdfc3dpenpsZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKTsKPiAg IAo+ICAgLyogaTkxNV9nZW1fY29udGV4dC5jICovCj4gICBpbnQgX19tdXN0X2NoZWNrIGk5MTVf Z2VtX2NvbnRleHRfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKPiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfZ2VtLmMKPiBpbmRleCBhZTMyMGEzNTkzMWMuLjRmYWVmNGJkMTM1YiAxMDA2NDQKPiAtLS0g YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW0uYwo+IEBAIC0xNjksNyArMTY5LDcgQEAgaTkxNV9nZW1fZ2V0X2FwZXJ0 dXJlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJcmV0dXJu IDA7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGludAo+ICtzdGF0aWMgc3RydWN0IHNnX3RhYmxlICoK PiAgIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgewo+ICAgCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gb2Jq LT5iYXNlLmZpbHAtPmZfbWFwcGluZzsKPiBAQCAtMTc5LDcgKzE3OSw3IEBAIGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAg CWludCBpOwo+ICAgCj4gICAJaWYgKFdBUk5fT04oaTkxNV9nZW1fb2JqZWN0X25lZWRzX2JpdDE3 X3N3aXp6bGUob2JqKSkpCj4gLQkJcmV0dXJuIC1FSU5WQUw7Cj4gKwkJcmV0dXJuIEVSUl9QVFIo LUVJTlZBTCk7Cj4gICAKPiAgIAlmb3IgKGkgPSAwOyBpIDwgb2JqLT5iYXNlLnNpemUgLyBQQUdF X1NJWkU7IGkrKykgewo+ICAgCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiBAQCAtMTg3LDcgKzE4Nyw3 IEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgCj4gICAJCXBhZ2UgPSBzaG1lbV9yZWFkX21hcHBpbmdfcGFnZShtYXBw aW5nLCBpKTsKPiAgIAkJaWYgKElTX0VSUihwYWdlKSkKPiAtCQkJcmV0dXJuIFBUUl9FUlIocGFn ZSk7Cj4gKwkJCXJldHVybiBFUlJfQ0FTVChwYWdlKTsKPiAgIAo+ICAgCQlzcmMgPSBrbWFwX2F0 b21pYyhwYWdlKTsKPiAgIAkJbWVtY3B5KHZhZGRyLCBzcmMsIFBBR0VfU0laRSk7Cj4gQEAgLTIw MiwxMSArMjAyLDExIEBAIGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfcGh5cyhzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICAJc3QgPSBrbWFsbG9jKHNpemVvZigqc3Qp LCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAoc3QgPT0gTlVMTCkKPiAtCQlyZXR1cm4gLUVOT01FTTsK PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+ICAgCWlmIChzZ19hbGxvY190YWJs ZShzdCwgMSwgR0ZQX0tFUk5FTCkpIHsKPiAgIAkJa2ZyZWUoc3QpOwo+IC0JCXJldHVybiAtRU5P TUVNOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAgCX0KPiAgIAo+ICAgCXNnID0g c3QtPnNnbDsKPiBAQCAtMjE2LDI4ICsyMTYsMzAgQEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdl c19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJc2dfZG1hX2FkZHJl c3Moc2cpID0gb2JqLT5waHlzX2hhbmRsZS0+YnVzYWRkcjsKPiAgIAlzZ19kbWFfbGVuKHNnKSA9 IG9iai0+YmFzZS5zaXplOwo+ICAgCj4gLQlvYmotPm1tLnBhZ2VzID0gc3Q7Cj4gLQlyZXR1cm4g MDsKPiArCXJldHVybiBzdDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiAtaTkxNV9nZW1f b2JqZWN0X3B1dF9wYWdlc19waHlzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4g K19faTkxNV9nZW1fb2JqZWN0X3JlbGVhc2Vfc2htZW0oc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgIHsKPiAtCWludCByZXQ7Cj4gLQo+ICAgCUdFTV9CVUdfT04ob2JqLT5tbS5t YWR2ID09IF9fSTkxNV9NQURWX1BVUkdFRCk7Cj4gICAKPiAtCXJldCA9IGk5MTVfZ2VtX29iamVj dF9zZXRfdG9fY3B1X2RvbWFpbihvYmosIHRydWUpOwo+IC0JaWYgKFdBUk5fT04ocmV0KSkgewo+ IC0JCS8qIEluIHRoZSBldmVudCBvZiBhIGRpc2FzdGVyLCBhYmFuZG9uIGFsbCBjYWNoZXMgYW5k Cj4gLQkJICogaG9wZSBmb3IgdGhlIGJlc3QuCj4gLQkJICovCj4gLQkJb2JqLT5iYXNlLnJlYWRf ZG9tYWlucyA9IG9iai0+YmFzZS53cml0ZV9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+ IC0JfQo+IC0KPiAgIAlpZiAob2JqLT5tbS5tYWR2ID09IEk5MTVfTUFEVl9ET05UTkVFRCkKPiAg IAkJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwo+ICAgCj4gKwlpZiAoKG9iai0+YmFzZS5yZWFkX2Rv bWFpbnMgJiBJOTE1X0dFTV9ET01BSU5fQ1BVKSA9PSAwKQo+ICsJCWk5MTVfZ2VtX2NsZmx1c2hf b2JqZWN0KG9iaiwgZmFsc2UpOwo+ICsKPiArCW9iai0+YmFzZS5yZWFkX2RvbWFpbnMgPSBJOTE1 X0dFTV9ET01BSU5fQ1BVOwo+ICsJb2JqLT5iYXNlLndyaXRlX2RvbWFpbiA9IEk5MTVfR0VNX0RP TUFJTl9DUFU7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkCj4gK2k5MTVfZ2VtX29iamVjdF9wdXRf cGFnZXNfcGh5cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkgICAgICAg c3RydWN0IHNnX3RhYmxlICpwYWdlcykKPiArewo+ICsJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV9zaG1lbShvYmopOwo+ICsKPiAgIAlpZiAob2JqLT5tbS5kaXJ0eSkgewo+ICAgCQlzdHJ1Y3Qg YWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IG9iai0+YmFzZS5maWxwLT5mX21hcHBpbmc7Cj4gICAJ CWNoYXIgKnZhZGRyID0gb2JqLT5waHlzX2hhbmRsZS0+dmFkZHI7Cj4gQEAgLTI2NSw4ICsyNjcs OCBAQCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKPiAgIAkJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwo+ICAgCX0KPiAgIAo+IC0J c2dfZnJlZV90YWJsZShvYmotPm1tLnBhZ2VzKTsKPiAtCWtmcmVlKG9iai0+bW0ucGFnZXMpOwo+ ICsJc2dfZnJlZV90YWJsZShwYWdlcyk7Cj4gKwlrZnJlZShwYWdlcyk7Cj4gICB9Cj4gICAKPiAg IHN0YXRpYyB2b2lkCj4gQEAgLTUxNyw5ICs1MTksOSBAQCBpOTE1X2dlbV9vYmplY3RfYXR0YWNo X3BoeXMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAlpZiAocmV0KQo+ICAg CQlyZXR1cm4gcmV0Owo+ICAgCj4gLQlyZXQgPSBfX2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXMo b2JqKTsKPiAtCWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCV9faTkxNV9nZW1fb2JqZWN0 X3B1dF9wYWdlcyhvYmopOwo+ICsJaWYgKG9iai0+bW0ucGFnZXMpCj4gKwkJcmV0dXJuIC1FQlVT WTsKPiAgIAo+ICAgCS8qIGNyZWF0ZSBhIG5ldyBvYmplY3QgKi8KPiAgIAlwaHlzID0gZHJtX3Bj aV9hbGxvYyhvYmotPmJhc2UuZGV2LCBvYmotPmJhc2Uuc2l6ZSwgYWxpZ24pOwo+IEBAIC01MzUs NyArNTM3LDcgQEAgaTkxNV9nZW1fb2JqZWN0X2F0dGFjaF9waHlzKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gICBzdGF0aWMgaW50Cj4gICBpOTE1X2dlbV9waHlzX3B3cml0ZShz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkgICAgIHN0cnVjdCBkcm1faTkx NV9nZW1fcHdyaXRlICphcmdzLAo+IC0JCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYp Cj4gKwkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gICAJc3RydWN0IGRybV9k ZXZpY2UgKmRldiA9IG9iai0+YmFzZS5kZXY7Cj4gICAJdm9pZCAqdmFkZHIgPSBvYmotPnBoeXNf aGFuZGxlLT52YWRkciArIGFyZ3MtPm9mZnNldDsKPiBAQCAtNTUxLDcgKzU1Myw3IEBAIGk5MTVf Z2VtX3BoeXNfcHdyaXRlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkJ ICAgSTkxNV9XQUlUX0xPQ0tFRCB8Cj4gICAJCQkJICAgSTkxNV9XQUlUX0FMTCwKPiAgIAkJCQkg ICBNQVhfU0NIRURVTEVfVElNRU9VVCwKPiAtCQkJCSAgIHRvX3Jwc19jbGllbnQoZmlsZV9wcml2 KSk7Cj4gKwkJCQkgICB0b19ycHNfY2xpZW50KGZpbGUpKTsKPiAgIAlpZiAocmV0KQo+ICAgCQly ZXR1cm4gcmV0Owo+ICAgCj4gQEAgLTIyNjYsOCArMjI2OCw3IEBAIGk5MTVfZ2VtX29iamVjdF90 cnVuY2F0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgfQo+ICAgCj4gICAv KiBUcnkgdG8gZGlzY2FyZCB1bndhbnRlZCBwYWdlcyAqLwo+IC1zdGF0aWMgdm9pZAo+IC1pOTE1 X2dlbV9vYmplY3RfaW52YWxpZGF0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ ICt2b2lkIF9faTkxNV9nZW1fb2JqZWN0X2ludmFsaWRhdGUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKPiAgIHsKPiAgIAlzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKPiAg IAo+IEBAIC0yMjg2LDMyICsyMjg3LDIwIEBAIGk5MTVfZ2VtX29iamVjdF9pbnZhbGlkYXRlKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lk Cj4gLWk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmopCj4gK2k5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpCj4g ICB7Cj4gICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ICAgCXN0cnVjdCBwYWdlICpwYWdl Owo+IC0JaW50IHJldDsKPiAgIAo+IC0JR0VNX0JVR19PTihvYmotPm1tLm1hZHYgPT0gX19JOTE1 X01BRFZfUFVSR0VEKTsKPiAtCj4gLQlyZXQgPSBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2NwdV9k b21haW4ob2JqLCB0cnVlKTsKPiAtCWlmIChXQVJOX09OKHJldCkpIHsKPiAtCQkvKiBJbiB0aGUg ZXZlbnQgb2YgYSBkaXNhc3RlciwgYWJhbmRvbiBhbGwgY2FjaGVzIGFuZAo+IC0JCSAqIGhvcGUg Zm9yIHRoZSBiZXN0Lgo+IC0JCSAqLwo+IC0JCWk5MTVfZ2VtX2NsZmx1c2hfb2JqZWN0KG9iaiwg dHJ1ZSk7Cj4gLQkJb2JqLT5iYXNlLnJlYWRfZG9tYWlucyA9IG9iai0+YmFzZS53cml0ZV9kb21h aW4gPSBJOTE1X0dFTV9ET01BSU5fQ1BVOwo+IC0JfQo+ICsJX19pOTE1X2dlbV9vYmplY3RfcmVs ZWFzZV9zaG1lbShvYmopOwoKV2FpdGluZyBmb3IgdGhlIG9iamVjdCB0byBiZWNvbWUgaW5hY3Rp dmUgaXMgbm93IGdvbmUuIEl0IGRpZCBub3Qgc3BvdCAKdGhhdCB0aGF0IGNoYW5nZWQgd2l0aCB0 aGlzIHBhdGNoLiBEaWQgaXQ/Cgo+ICAgCj4gLQlpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChv YmopOwo+ICsJaTkxNV9nZW1fZ3R0X2ZpbmlzaF9wYWdlcyhvYmosIHBhZ2VzKTsKPiAgIAo+ICAg CWlmIChpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdfc3dpenpsZShvYmopKQo+IC0JCWk5MTVf Z2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKG9iaik7Cj4gLQo+IC0JaWYgKG9iai0+bW0u bWFkdiA9PSBJOTE1X01BRFZfRE9OVE5FRUQpCj4gLQkJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwo+ ICsJCWk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKG9iaiwgcGFnZXMpOwo+ICAg Cj4gLQlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgb2JqLT5tbS5wYWdlcykgewo+ ICsJZm9yX2VhY2hfc2d0X3BhZ2UocGFnZSwgc2d0X2l0ZXIsIHBhZ2VzKSB7Cj4gICAJCWlmIChv YmotPm1tLmRpcnR5KQo+ICAgCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Cj4gICAKPiBAQCAtMjMy Miw4ICsyMzExLDggQEAgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19ndHQoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAl9Cj4gICAJb2JqLT5tbS5kaXJ0eSA9IGZhbHNlOwo+ ICAgCj4gLQlzZ19mcmVlX3RhYmxlKG9iai0+bW0ucGFnZXMpOwo+IC0Ja2ZyZWUob2JqLT5tbS5w YWdlcyk7Cj4gKwlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKPiArCWtmcmVlKHBhZ2VzKTsKPiAgIH0K PiAgIAo+ICAgc3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKHN0 cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gQEAgLTIzMzUsMjQgKzIzMjQsMjIgQEAg c3RhdGljIHZvaWQgX19pOTE1X2dlbV9vYmplY3RfcmVzZXRfcGFnZV9pdGVyKHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJCXJhZGl4X3RyZWVfZGVsZXRlKCZvYmotPm1tLmdl dF9wYWdlLnJhZGl4LCBpdGVyLmluZGV4KTsKPiAgIH0KPiAgIAo+IC1pbnQgX19pOTE1X2dlbV9v YmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK3ZvaWQg X19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gICB7Cj4gLQljb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdF9vcHMgKm9wcyA9 IG9iai0+b3BzOwo+ICsJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiAgIAo+ICAgCWxvY2tkZXBf YXNzZXJ0X2hlbGQoJm9iai0+YmFzZS5kZXYtPnN0cnVjdF9tdXRleCk7Cj4gICAKPiAtCWlmICgh b2JqLT5tbS5wYWdlcykKPiAtCQlyZXR1cm4gMDsKPiAtCj4gICAJaWYgKGk5MTVfZ2VtX29iamVj dF9oYXNfcGlubmVkX3BhZ2VzKG9iaikpCj4gLQkJcmV0dXJuIC1FQlVTWTsKPiArCQlyZXR1cm47 Cj4gICAKPiAgIAlHRU1fQlVHX09OKG9iai0+YmluZF9jb3VudCk7Cj4gICAKPiAgIAkvKiAtPnB1 dF9wYWdlcyBtaWdodCBuZWVkIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGJpdDE3IHN3aXp6 bGUKPiAgIAkgKiBhcnJheSwgaGVuY2UgcHJvdGVjdCB0aGVtIGZyb20gYmVpbmcgcmVhcGVkIGJ5 IHJlbW92aW5nIHRoZW0gZnJvbSBndHQKPiAgIAkgKiBsaXN0cyBlYXJseS4gKi8KPiAtCWxpc3Rf ZGVsKCZvYmotPmdsb2JhbF9saXN0KTsKPiArCXBhZ2VzID0gZmV0Y2hfYW5kX3plcm8oJm9iai0+ bW0ucGFnZXMpOwo+ICsJR0VNX0JVR19PTighcGFnZXMpOwo+ICAgCj4gICAJaWYgKG9iai0+bW0u bWFwcGluZykgewo+ICAgCQl2b2lkICpwdHI7Cj4gQEAgLTIzNjgsMTIgKzIzNTUsNyBAQCBpbnQg X19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gICAKPiAgIAlfX2k5MTVfZ2VtX29iamVjdF9yZXNldF9wYWdlX2l0ZXIob2JqKTsKPiAg IAo+IC0Jb3BzLT5wdXRfcGFnZXMob2JqKTsKPiAtCW9iai0+bW0ucGFnZXMgPSBOVUxMOwo+IC0K PiAtCWk5MTVfZ2VtX29iamVjdF9pbnZhbGlkYXRlKG9iaik7Cj4gLQo+IC0JcmV0dXJuIDA7Cj4g KwlvYmotPm9wcy0+cHV0X3BhZ2VzKG9iaiwgcGFnZXMpOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg dW5zaWduZWQgbG9uZyBzd2lvdGxiX21heF9zaXplKHZvaWQpCj4gQEAgLTIzODUsNyArMjM2Nyw3 IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHN3aW90bGJfbWF4X3NpemUodm9pZCkKPiAgICNlbmRp Zgo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQKPiArc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4g ICBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRv X2k5MTUob2JqLT5iYXNlLmRldik7Cj4gQEAgLTI0MDQsOCArMjM4Niw4IEBAIGk5MTVfZ2VtX29i amVjdF9nZXRfcGFnZXNfZ3R0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJ ICogd2Fzbid0IGluIHRoZSBHVFQsIHRoZXJlIHNob3VsZG4ndCBiZSBhbnkgd2F5IGl0IGNvdWxk IGhhdmUgYmVlbiBpbgo+ICAgCSAqIGEgR1BVIGNhY2hlCj4gICAJICovCj4gLQlCVUdfT04ob2Jq LT5iYXNlLnJlYWRfZG9tYWlucyAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKTsKPiAtCUJVR19PTihv YmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwo+ICsJR0VNX0JV R19PTihvYmotPmJhc2UucmVhZF9kb21haW5zICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpOwo+ICsJ R0VNX0JVR19PTihvYmotPmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMp Owo+ICAgCj4gICAJbWF4X3NlZ21lbnQgPSBzd2lvdGxiX21heF9zaXplKCk7Cj4gICAJaWYgKCFt YXhfc2VnbWVudCkKPiBAQCAtMjQxMywxMiArMjM5NSwxMiBAQCBpOTE1X2dlbV9vYmplY3RfZ2V0 X3BhZ2VzX2d0dChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICAJc3Qg PSBrbWFsbG9jKHNpemVvZigqc3QpLCBHRlBfS0VSTkVMKTsKPiAgIAlpZiAoc3QgPT0gTlVMTCkK PiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+ ICAgCXBhZ2VfY291bnQgPSBvYmotPmJhc2Uuc2l6ZSAvIFBBR0VfU0laRTsKPiAgIAlpZiAoc2df YWxsb2NfdGFibGUoc3QsIHBhZ2VfY291bnQsIEdGUF9LRVJORUwpKSB7Cj4gICAJCWtmcmVlKHN0 KTsKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAg IAl9Cj4gICAKPiAgIAkvKiBHZXQgdGhlIGxpc3Qgb2YgcGFnZXMgb3V0IG9mIG91ciBzdHJ1Y3Qg ZmlsZS4gIFRoZXknbGwgYmUgcGlubmVkCj4gQEAgLTI0NjksMjAgKzI0NTEsMTkgQEAgaTkxNV9n ZW1fb2JqZWN0X2dldF9wYWdlc19ndHQoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikK PiAgIAl9Cj4gICAJaWYgKHNnKSAvKiBsb29wIHRlcm1pbmF0ZWQgZWFybHk7IHNob3J0IHNnIHRh YmxlICovCj4gICAJCXNnX21hcmtfZW5kKHNnKTsKPiAtCW9iai0+bW0ucGFnZXMgPSBzdDsKPiAg IAo+IC0JcmV0ID0gaTkxNV9nZW1fZ3R0X3ByZXBhcmVfb2JqZWN0KG9iaik7Cj4gKwlyZXQgPSBp OTE1X2dlbV9ndHRfcHJlcGFyZV9wYWdlcyhvYmosIHN0KTsKPiAgIAlpZiAocmV0KQo+ICAgCQln b3RvIGVycl9wYWdlczsKPiAgIAo+ICAgCWlmIChpOTE1X2dlbV9vYmplY3RfbmVlZHNfYml0MTdf c3dpenpsZShvYmopKQo+IC0JCWk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenpsZShvYmop Owo+ICsJCWk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dpenpsZShvYmosIHN0KTsKPiAgIAo+ ICAgCWlmIChpOTE1X2dlbV9vYmplY3RfaXNfdGlsZWQob2JqKSAmJgo+ICAgCSAgICBkZXZfcHJp di0+cXVpcmtzICYgUVVJUktfUElOX1NXSVpaTEVEX1BBR0VTKQo+ICAgCQlfX2k5MTVfZ2VtX29i amVjdF9waW5fcGFnZXMob2JqKTsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gc3Q7Cj4g ICAKPiAgIGVycl9wYWdlczoKPiAgIAlzZ19tYXJrX2VuZChzZyk7Cj4gQEAgLTI1MDIsNyArMjQ4 MywzNSBAQCBlcnJfcGFnZXM6Cj4gICAJaWYgKHJldCA9PSAtRU5PU1BDKQo+ICAgCQlyZXQgPSAt RU5PTUVNOwo+ICAgCj4gLQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAr fQo+ICsKPiArdm9pZCBfX2k5MTVfZ2VtX29iamVjdF9zZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCSBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQo+ICt7Cj4g Kwlsb2NrZGVwX2Fzc2VydF9oZWxkKCZvYmotPmJhc2UuZGV2LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsK PiArCW9iai0+bW0uZ2V0X3BhZ2Uuc2dfcG9zID0gcGFnZXMtPnNnbDsKPiArCW9iai0+bW0uZ2V0 X3BhZ2Uuc2dfaWR4ID0gMDsKPiArCj4gKwlvYmotPm1tLnBhZ2VzID0gcGFnZXM7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgX19fX2k5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXMoc3RydWN0IGRybV9p OTE1X2dlbV9vYmplY3QgKm9iaikKPiArewo+ICsJc3RydWN0IHNnX3RhYmxlICpwYWdlczsKPiAr Cj4gKwlpZiAodW5saWtlbHkob2JqLT5tbS5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRCkpIHsK PiArCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcgdG8gb2J0YWluIGEgcHVyZ2VhYmxlIG9iamVjdFxu Iik7Cj4gKwkJcmV0dXJuIC1FRkFVTFQ7Cj4gKwl9Cj4gKwo+ICsJcGFnZXMgPSBvYmotPm9wcy0+ Z2V0X3BhZ2VzKG9iaik7Cj4gKwlpZiAodW5saWtlbHkoSVNfRVJSKHBhZ2VzKSkpCj4gKwkJcmV0 dXJuIFBUUl9FUlIocGFnZXMpOwo+ICsKPiArCV9faTkxNV9nZW1fb2JqZWN0X3NldF9wYWdlcyhv YmosIHBhZ2VzKTsKPiArCXJldHVybiAwOwo+ICAgfQo+ICAgCj4gICAvKiBFbnN1cmUgdGhhdCB0 aGUgYXNzb2NpYXRlZCBwYWdlcyBhcmUgZ2F0aGVyZWQgZnJvbSB0aGUgYmFja2luZyBzdG9yYWdl Cj4gQEAgLTI1MTQsMzMgKzI1MjMsMTggQEAgZXJyX3BhZ2VzOgo+ICAgICovCj4gICBpbnQgX19p OTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KG9i ai0+YmFzZS5kZXYpOwo+IC0JY29uc3Qgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Rfb3BzICpv cHMgPSBvYmotPm9wczsKPiAtCWludCByZXQ7Cj4gKwlpbnQgZXJyOwo+ICAgCj4gICAJbG9ja2Rl cF9hc3NlcnRfaGVsZCgmb2JqLT5iYXNlLmRldi0+c3RydWN0X211dGV4KTsKPiAgIAo+ICAgCWlm IChvYmotPm1tLnBhZ2VzKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0JaWYgKG9iai0+bW0ubWFk diAhPSBJOTE1X01BRFZfV0lMTE5FRUQpIHsKPiAtCQlEUk1fREVCVUcoIkF0dGVtcHRpbmcgdG8g b2J0YWluIGEgcHVyZ2VhYmxlIG9iamVjdFxuIik7Cj4gLQkJX19pOTE1X2dlbV9vYmplY3RfdW5w aW5fcGFnZXMob2JqKTsKPiAtCQlyZXR1cm4gLUVGQVVMVDsKPiAtCX0KPiAtCj4gLQlyZXQgPSBv cHMtPmdldF9wYWdlcyhvYmopOwo+IC0JaWYgKHJldCkgewo+ICsJZXJyID0gX19fX2k5MTVfZ2Vt X29iamVjdF9nZXRfcGFnZXMob2JqKTsKPiArCWlmIChlcnIpCj4gICAJCV9faTkxNV9nZW1fb2Jq ZWN0X3VucGluX3BhZ2VzKG9iaik7Cj4gLQkJcmV0dXJuIHJldDsKPiAtCX0KPiAgIAo+IC0JbGlz dF9hZGRfdGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwgJmRldl9wcml2LT5tbS51bmJvdW5kX2xpc3Qp OwoKT2JqZWN0cyB3aWxsIG5vIGxvbmdlciBhcHBlYXIgb24gdGhlIHVuYm91bmQgbGlzdCB3aGVu IHRoZXkgaGF2ZSBiYWNraW5nIApzdG9yZT8KCj4gLQo+IC0Jb2JqLT5tbS5nZXRfcGFnZS5zZ19w b3MgPSBvYmotPm1tLnBhZ2VzLT5zZ2w7Cj4gLQlvYmotPm1tLmdldF9wYWdlLnNnX2lkeCA9IDA7 Cj4gLQo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gZXJyOwo+ICAgfQo+ICAgCj4gICAvKiBUaGUg J21hcHBpbmcnIHBhcnQgb2YgaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoKSBiZWxvdyAqLwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2RtYWJ1Zi5jCj4gaW5kZXggMTA0NDFkYzcyZTczLi4y YWJkNTI0YWJhMTQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f ZG1hYnVmLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kbWFidWYuYwo+ IEBAIC0yODksMjIgKzI4OSwxOCBAQCBzdHJ1Y3QgZG1hX2J1ZiAqaTkxNV9nZW1fcHJpbWVfZXhw b3J0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJcmV0dXJuIGRtYV9idWY7Cj4gICB9Cj4g ICAKPiAtc3RhdGljIGludCBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzX2RtYWJ1ZihzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICtzdGF0aWMgc3RydWN0IHNnX3RhYmxlICoKPiAr aTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19kbWFidWYoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiAgIHsKPiAtCXN0cnVjdCBzZ190YWJsZSAqc2c7Cj4gLQo+IC0Jc2cgPSBkbWFf YnVmX21hcF9hdHRhY2htZW50KG9iai0+YmFzZS5pbXBvcnRfYXR0YWNoLCBETUFfQklESVJFQ1RJ T05BTCk7Cj4gLQlpZiAoSVNfRVJSKHNnKSkKPiAtCQlyZXR1cm4gUFRSX0VSUihzZyk7Cj4gLQo+ IC0Jb2JqLT5tbS5wYWdlcyA9IHNnOwo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gZG1hX2J1Zl9t YXBfYXR0YWNobWVudChvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCwKPiArCQkJCSAgICAgIERNQV9C SURJUkVDVElPTkFMKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3Rf cHV0X3BhZ2VzX2RtYWJ1ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICtzdGF0 aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzX2RtYWJ1ZihzdHJ1Y3QgZHJtX2k5MTVf Z2VtX29iamVjdCAqb2JqLAo+ICsJCQkJCSAgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKPiAg IHsKPiAtCWRtYV9idWZfdW5tYXBfYXR0YWNobWVudChvYmotPmJhc2UuaW1wb3J0X2F0dGFjaCwK PiAtCQkJCSBvYmotPm1tLnBhZ2VzLCBETUFfQklESVJFQ1RJT05BTCk7Cj4gKwlkbWFfYnVmX3Vu bWFwX2F0dGFjaG1lbnQob2JqLT5iYXNlLmltcG9ydF9hdHRhY2gsIHBhZ2VzLAo+ICsJCQkJIERN QV9CSURJUkVDVElPTkFMKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0X29wcyBpOTE1X2dlbV9vYmplY3RfZG1hYnVmX29wcyA9IHsKPiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2UuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ZlbmNlLmMKPiBpbmRleCA1YWFkYWI1OWYwNzEuLmNkNTlk YmM2NTg4YyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9mZW5j ZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZmVuY2UuYwo+IEBAIC02 NDQsNiArNjQ0LDcgQEAgaTkxNV9nZW1fc3dpenpsZV9wYWdlKHN0cnVjdCBwYWdlICpwYWdlKQo+ ICAgLyoqCj4gICAgKiBpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUgLSBmaXh1cCBi aXQgMTcgc3dpenpsaW5nCj4gICAgKiBAb2JqOiBpOTE1IEdFTSBidWZmZXIgb2JqZWN0Cj4gKyAq IEBwYWdlczogdGhlIHNjYXR0ZXJnYXRoZXIgbGlzdCBvZiBwaHlzaWNhbCBwYWdlcwo+ICAgICoK PiAgICAqIFRoaXMgZnVuY3Rpb24gZml4ZXMgdXAgdGhlIHN3aXp6bGluZyBpbiBjYXNlIGFueSBw YWdlIGZyYW1lIG51bWJlciBmb3IgdGhpcwo+ICAgICogb2JqZWN0IGhhcyBjaGFuZ2VkIGluIGJp dCAxNyBzaW5jZSB0aGF0IHN0YXRlIGhhcyBiZWVuIHNhdmVkIHdpdGgKPiBAQCAtNjU0LDcgKzY1 NSw4IEBAIGk5MTVfZ2VtX3N3aXp6bGVfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSkKPiAgICAqIGJ5 IHN3YXBwaW5nIHRoZW0gb3V0IGFuZCBiYWNrIGluIGFnYWluKS4KPiAgICAqLwo+ICAgdm9pZAo+ IC1pOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKPiAraTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8xN19zd2l6emxlKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQkgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMp Cj4gICB7Cj4gICAJc3RydWN0IHNndF9pdGVyIHNndF9pdGVyOwo+ICAgCXN0cnVjdCBwYWdlICpw YWdlOwo+IEBAIC02NjQsMTAgKzY2Niw5IEBAIGk5MTVfZ2VtX29iamVjdF9kb19iaXRfMTdfc3dp enpsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCQlyZXR1cm47Cj4gICAK PiAgIAlpID0gMDsKPiAtCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBvYmotPm1t LnBhZ2VzKSB7Cj4gKwlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsK PiAgIAkJY2hhciBuZXdfYml0XzE3ID0gcGFnZV90b19waHlzKHBhZ2UpID4+IDE3Owo+IC0JCWlm ICgobmV3X2JpdF8xNyAmIDB4MSkgIT0KPiAtCQkgICAgKHRlc3RfYml0KGksIG9iai0+Yml0XzE3 KSAhPSAwKSkgewo+ICsJCWlmICgobmV3X2JpdF8xNyAmIDB4MSkgIT0gKHRlc3RfYml0KGksIG9i ai0+Yml0XzE3KSAhPSAwKSkgewo+ICAgCQkJaTkxNV9nZW1fc3dpenpsZV9wYWdlKHBhZ2UpOwo+ ICAgCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Cj4gICAJCX0KPiBAQCAtNjc4LDE3ICs2NzksMTkg QEAgaTkxNV9nZW1fb2JqZWN0X2RvX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0ICpvYmopCj4gICAvKioKPiAgICAqIGk5MTVfZ2VtX29iamVjdF9zYXZlX2JpdF8xN19z d2l6emxlIC0gc2F2ZSBiaXQgMTcgc3dpenpsaW5nCj4gICAgKiBAb2JqOiBpOTE1IEdFTSBidWZm ZXIgb2JqZWN0Cj4gKyAqIEBwYWdlczogdGhlIHNjYXR0ZXJnYXRoZXIgbGlzdCBvZiBwaHlzaWNh bCBwYWdlcwo+ICAgICoKPiAgICAqIFRoaXMgZnVuY3Rpb24gc2F2ZXMgdGhlIGJpdCAxNyBvZiBl YWNoIHBhZ2UgZnJhbWUgbnVtYmVyIHNvIHRoYXQgc3dpenpsaW5nCj4gICAgKiBjYW4gYmUgZml4 ZWQgdXAgbGF0ZXIgb24gd2l0aCBpOTE1X2dlbV9vYmplY3RfZG9fYml0XzE3X3N3aXp6bGUoKS4g VGhpcyBtdXN0Cj4gICAgKiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBiYWNraW5nIHN0b3JhZ2UgY2Fu IGJlIHVucGlubmVkLgo+ICAgICovCj4gICB2b2lkCj4gLWk5MTVfZ2VtX29iamVjdF9zYXZlX2Jp dF8xN19zd2l6emxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gK2k5MTVfZ2Vt X29iamVjdF9zYXZlX2JpdF8xN19zd2l6emxlKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosCj4gKwkJCQkgICAgc3RydWN0IHNnX3RhYmxlICpwYWdlcykKPiAgIHsKPiArCWNvbnN0IHVu c2lnbmVkIGludCBwYWdlX2NvdW50ID0gb2JqLT5iYXNlLnNpemUgPj4gUEFHRV9TSElGVDsKPiAg IAlzdHJ1Y3Qgc2d0X2l0ZXIgc2d0X2l0ZXI7Cj4gICAJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4gLQlp bnQgcGFnZV9jb3VudCA9IG9iai0+YmFzZS5zaXplID4+IFBBR0VfU0hJRlQ7Cj4gICAJaW50IGk7 Cj4gICAKPiAgIAlpZiAob2JqLT5iaXRfMTcgPT0gTlVMTCkgewo+IEBAIC03MDMsNyArNzA2LDcg QEAgaTkxNV9nZW1fb2JqZWN0X3NhdmVfYml0XzE3X3N3aXp6bGUoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaikKPiAgIAo+ICAgCWkgPSAwOwo+ICAgCj4gLQlmb3JfZWFjaF9zZ3RfcGFn ZShwYWdlLCBzZ3RfaXRlciwgb2JqLT5tbS5wYWdlcykgewo+ICsJZm9yX2VhY2hfc2d0X3BhZ2Uo cGFnZSwgc2d0X2l0ZXIsIHBhZ2VzKSB7Cj4gICAJCWlmIChwYWdlX3RvX3BoeXMocGFnZSkgJiAo MSA8PCAxNykpCj4gICAJCQlfX3NldF9iaXQoaSwgb2JqLT5iaXRfMTcpOwo+ICAgCQllbHNlCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBpbmRleCA3OTRjY2M0Y2ZmYWEuLjEwMDgy MDljYTc5NyAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQu Ywo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTIzNzAs MTQgKzIzNzAsMTUgQEAgdm9pZCBpOTE1X2dlbV9zdXNwZW5kX2d0dF9tYXBwaW5ncyhzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2KQo+ICAgCWk5MTVfZ2d0dF9mbHVzaChkZXZfcHJpdik7Cj4gICB9Cj4g ICAKPiAtaW50IGk5MTVfZ2VtX2d0dF9wcmVwYXJlX29iamVjdChzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqKQo+ICtpbnQgaTkxNV9nZW1fZ3R0X3ByZXBhcmVfcGFnZXMoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFn ZXMpCj4gICB7Cj4gLQlpZiAoIWRtYV9tYXBfc2coJm9iai0+YmFzZS5kZXYtPnBkZXYtPmRldiwK PiAtCQkJb2JqLT5tbS5wYWdlcy0+c2dsLCBvYmotPm1tLnBhZ2VzLT5uZW50cywKPiAtCQkJUENJ X0RNQV9CSURJUkVDVElPTkFMKSkKPiAtCQlyZXR1cm4gLUVOT1NQQzsKPiArCWlmIChkbWFfbWFw X3NnKCZvYmotPmJhc2UuZGV2LT5wZGV2LT5kZXYsCj4gKwkJICAgICAgIHBhZ2VzLT5zZ2wsIHBh Z2VzLT5uZW50cywKPiArCQkgICAgICAgUENJX0RNQV9CSURJUkVDVElPTkFMKSkKPiArCQlyZXR1 cm4gMDsKPiAgIAo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gLUVOT1NQQzsKPiAgIH0KPiAgIAo+ ICAgc3RhdGljIHZvaWQgZ2VuOF9zZXRfcHRlKHZvaWQgX19pb21lbSAqYWRkciwgZ2VuOF9wdGVf dCBwdGUpCj4gQEAgLTI2OTYsNyArMjY5Nyw4IEBAIHN0YXRpYyB2b2lkIGdndHRfdW5iaW5kX3Zt YShzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIAkJCQkJIHZtYS0+bm9kZS5zdGFydCwgc2l6ZSk7 Cj4gICB9Cj4gICAKPiAtdm9pZCBpOTE1X2dlbV9ndHRfZmluaXNoX29iamVjdChzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICt2b2lkIGk5MTVfZ2VtX2d0dF9maW5pc2hfcGFnZXMo c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHN0cnVjdCBzZ190 YWJsZSAqcGFnZXMpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgIAlzdHJ1Y3QgZGV2aWNlICprZGV2ID0gJmRl dl9wcml2LT5kcm0ucGRldi0+ZGV2Owo+IEBAIC0yNzEwLDggKzI3MTIsNyBAQCB2b2lkIGk5MTVf Z2VtX2d0dF9maW5pc2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4g ICAJCX0KPiAgIAl9Cj4gICAKPiAtCWRtYV91bm1hcF9zZyhrZGV2LCBvYmotPm1tLnBhZ2VzLT5z Z2wsIG9iai0+bW0ucGFnZXMtPm5lbnRzLAo+IC0JCSAgICAgUENJX0RNQV9CSURJUkVDVElPTkFM KTsKPiArCWRtYV91bm1hcF9zZyhrZGV2LCBwYWdlcy0+c2dsLCBwYWdlcy0+bmVudHMsIFBDSV9E TUFfQklESVJFQ1RJT05BTCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGk5MTVfZ3R0X2Nv bG9yX2FkanVzdChzdHJ1Y3QgZHJtX21tX25vZGUgKm5vZGUsCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9nZW1fZ3R0LmgKPiBpbmRleCBjMjQxZDgxNDMyNTUuLmRiZTZhNmNlYzIwZCAxMDA2NDQKPiAt LS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gQEAgLTYyOCw4ICs2MjgsMTAgQEAgdm9pZCBp OTE1X2NoZWNrX2FuZF9jbGVhcl9mYXVsdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiAgIHZvaWQgaTkxNV9nZW1fc3VzcGVuZF9ndHRfbWFwcGluZ3Moc3RydWN0IGRybV9k ZXZpY2UgKmRldik7Cj4gICB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdzKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpOwo+ICAgCj4gLWludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fZ3R0 X3ByZXBhcmVfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopOwo+IC12b2lk IGk5MTVfZ2VtX2d0dF9maW5pc2hfb2JqZWN0KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopOwo+ICtpbnQgX19tdXN0X2NoZWNrIGk5MTVfZ2VtX2d0dF9wcmVwYXJlX3BhZ2VzKHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCQkJICAgIHN0cnVjdCBzZ190YWJsZSAq cGFnZXMpOwo+ICt2b2lkIGk5MTVfZ2VtX2d0dF9maW5pc2hfcGFnZXMoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJICAgICAgIHN0cnVjdCBzZ190YWJsZSAqcGFnZXMpOwo+ ICAgCj4gICAvKiBGbGFncyB1c2VkIGJ5IHBpbi9iaW5kJmZyaWVuZHMuICovCj4gICAjZGVmaW5l IFBJTl9OT05CTE9DSwkJQklUKDApCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZ2VtX2ludGVybmFsLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9pbnRl cm5hbC5jCj4gaW5kZXggYzkzOTM3Mjk2MDdmLi43NmIzY2YzNDZmM2QgMTAwNjQ0Cj4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1faW50ZXJuYWwuYwo+ICsrKyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ2VtX2ludGVybmFsLmMKPiBAQCAtMzksNyArMzksOCBAQCBzdGF0 aWMgdm9pZCBpbnRlcm5hbF9mcmVlX3BhZ2VzKHN0cnVjdCBzZ190YWJsZSAqc3QpCj4gICAJa2Zy ZWUoc3QpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdl c19pbnRlcm5hbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICtzdGF0aWMgc3Ry dWN0IHNnX3RhYmxlICoKPiAraTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19pbnRlcm5hbChzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiAgIAl1bnNpZ25lZCBpbnQg bnBhZ2VzID0gb2JqLT5iYXNlLnNpemUgLyBQQUdFX1NJWkU7Cj4gQEAgLTUwLDExICs1MSwxMSBA QCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9nZXRfcGFnZXNfaW50ZXJuYWwoc3RydWN0IGRy bV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ICAgCXN0ID0ga21hbGxvYyhzaXplb2YoKnN0 KSwgR0ZQX0tFUk5FTCk7Cj4gICAJaWYgKCFzdCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+ICAgCWlmIChzZ19hbGxvY190YWJsZShzdCwg bnBhZ2VzLCBHRlBfS0VSTkVMKSkgewo+ICAgCQlrZnJlZShzdCk7Cj4gLQkJcmV0dXJuIC1FTk9N RU07Cj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gICAJfQo+ICAgCj4gICAJc2cgPSBz dC0+c2dsOwo+IEBAIC05NiwxMiArOTcsOSBAQCBzdGF0aWMgaW50IGk5MTVfZ2VtX29iamVjdF9n ZXRfcGFnZXNfaW50ZXJuYWwoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAo+ ICAgCQlzZyA9IF9fc2dfbmV4dChzZyk7Cj4gICAJfSB3aGlsZSAoMSk7Cj4gLQlvYmotPm1tLnBh Z2VzID0gc3Q7Cj4gICAKPiAtCWlmIChpOTE1X2dlbV9ndHRfcHJlcGFyZV9vYmplY3Qob2JqKSkg ewo+IC0JCW9iai0+bW0ucGFnZXMgPSBOVUxMOwo+ICsJaWYgKGk5MTVfZ2VtX2d0dF9wcmVwYXJl X3BhZ2VzKG9iaiwgc3QpKQo+ICAgCQlnb3RvIGVycjsKPiAtCX0KPiAgIAo+ICAgCS8qIE1hcmsg dGhlIHBhZ2VzIGFzIGRvbnRuZWVkIHdoaWxzdCB0aGV5IGFyZSBzdGlsbCBwaW5uZWQuIEFzIHNv b24KPiAgIAkgKiBhcyB0aGV5IGFyZSB1bnBpbm5lZCB0aGV5IGFyZSBhbGxvd2VkIHRvIGJlIHJl YXBlZCBieSB0aGUgc2hyaW5rZXIsCj4gQEAgLTEwOSwxOCArMTA3LDE5IEBAIHN0YXRpYyBpbnQg aTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlc19pbnRlcm5hbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqKQo+ICAgCSAqIG9iamVjdCBhcmUgb25seSB2YWxpZCB3aGlsc3QgYWN0aXZlIGFu ZCBwaW5uZWQuCj4gICAJICovCj4gICAJb2JqLT5tbS5tYWR2ID0gSTkxNV9NQURWX0RPTlRORUVE Owo+IC0JcmV0dXJuIDA7Cj4gKwlyZXR1cm4gc3Q7Cj4gICAKPiAgIGVycjoKPiAgIAlzZ19tYXJr X2VuZChzZyk7Cj4gICAJaW50ZXJuYWxfZnJlZV9wYWdlcyhzdCk7Cj4gLQlyZXR1cm4gLUVOT01F TTsKPiArCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lk IGk5MTVfZ2VtX29iamVjdF9wdXRfcGFnZXNfaW50ZXJuYWwoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKPiArc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19pbnRl cm5hbChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICsJCQkJCSAgICAgICBzdHJ1 Y3Qgc2dfdGFibGUgKnBhZ2VzKQo+ICAgewo+IC0JaTkxNV9nZW1fZ3R0X2ZpbmlzaF9vYmplY3Qo b2JqKTsKPiAtCWludGVybmFsX2ZyZWVfcGFnZXMob2JqLT5tbS5wYWdlcyk7Cj4gKwlpOTE1X2dl bV9ndHRfZmluaXNoX3BhZ2VzKG9iaiwgcGFnZXMpOwo+ICsJaW50ZXJuYWxfZnJlZV9wYWdlcyhw YWdlcyk7Cj4gICAKPiAgIAlvYmotPm1tLmRpcnR5ID0gZmFsc2U7Cj4gICAJb2JqLT5tbS5tYWR2 ID0gSTkxNV9NQURWX1dJTExORUVEOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9zaHJpbmtlci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc2hy aW5rZXIuYwo+IGluZGV4IDEyNGY2OWE4MDE2Mi4uZjk1MDYxZmFlYWU2IDEwMDY0NAo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX3Nocmlua2VyLmMKPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zaHJpbmtlci5jCj4gQEAgLTkxLDYgKzkxLDEzIEBAIHN0 YXRpYyBib29sIGNhbl9yZWxlYXNlX3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gICAJcmV0dXJuIHN3YXBfYXZhaWxhYmxlKCkgfHwgb2JqLT5tbS5tYWR2ID09IEk5MTVf TUFEVl9ET05UTkVFRDsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgYm9vbCB1bnNhZmVfZHJvcF9wYWdl cyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICt7Cj4gKwlpZiAoaTkxNV9nZW1f b2JqZWN0X3VuYmluZChvYmopID09IDApCj4gKwkJX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2Vz KG9iaik7Cj4gKwlyZXR1cm4gIW9iai0+bW0ucGFnZXM7Cj4gK30KCkNhbiB3ZSBoYXZlIHNvbWUg Y29tbWVudHMgd2l0aCB0aGlzIGZ1bmN0aW9uPwoKPiArCj4gICAvKioKPiAgICAqIGk5MTVfZ2Vt X3NocmluayAtIFNocmluayBidWZmZXIgb2JqZWN0IGNhY2hlcwo+ICAgICogQGRldl9wcml2OiBp OTE1IGRldmljZQo+IEBAIC0xOTIsOSArMTk5LDcgQEAgaTkxNV9nZW1fc2hyaW5rKHN0cnVjdCBk cm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAo+ICAgCQkJaTkxNV9nZW1fb2JqZWN0X2dl dChvYmopOwo+ICAgCj4gLQkJCS8qIEZvciB0aGUgdW5ib3VuZCBwaGFzZSwgdGhpcyBzaG91bGQg YmUgYSBuby1vcCEgKi8KPiAtCQkJaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopOwo+IC0JCQlp ZiAoX19pOTE1X2dlbV9vYmplY3RfcHV0X3BhZ2VzKG9iaikgPT0gMCkKPiArCQkJaWYgKHVuc2Fm ZV9kcm9wX3BhZ2VzKG9iaikpCj4gICAJCQkJY291bnQgKz0gb2JqLT5iYXNlLnNpemUgPj4gUEFH RV9TSElGVDsKPiAgIAo+ICAgCQkJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX3N0b2xlbi5jCj4gaW5kZXggMGFjYmRjYmQ4ZjNhLi4xYTYzZmZh NGQxODkgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fc3RvbGVu LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9zdG9sZW4uYwo+IEBAIC01 NDYsMTcgKzU0NiwyMCBAQCBpOTE1X3BhZ2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gICAJcmV0dXJuIHN0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgaTkx NV9nZW1fb2JqZWN0X2dldF9wYWdlc19zdG9sZW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3Qg Km9iaikKPiArc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4gK2k5MTVfZ2VtX29iamVjdF9nZXRf cGFnZXNfc3RvbGVuKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICB7Cj4gLQlC VUcoKTsKPiAtCXJldHVybiAtRUlOVkFMOwo+ICsJcmV0dXJuIGk5MTVfcGFnZXNfY3JlYXRlX2Zv cl9zdG9sZW4ob2JqLT5iYXNlLmRldiwKPiArCQkJCQkgICAgb2JqLT5zdG9sZW4tPnN0YXJ0LAo+ ICsJCQkJCSAgICBvYmotPnN0b2xlbi0+c2l6ZSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQg aTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19zdG9sZW4oc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaikKPiArc3RhdGljIHZvaWQgaTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlc19zdG9sZW4o c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiArCQkJCQkgICAgIHN0cnVjdCBzZ190 YWJsZSAqcGFnZXMpCj4gICB7Cj4gICAJLyogU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGR1cmluZyBm cmVlICovCj4gLQlzZ19mcmVlX3RhYmxlKG9iai0+bW0ucGFnZXMpOwo+IC0Ja2ZyZWUob2JqLT5t bS5wYWdlcyk7Cj4gKwlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKPiArCWtmcmVlKHBhZ2VzKTsKPiAg IH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKPiBAQCAtNTkxLDIxICs1OTQsMTMgQEAgX2k5MTVfZ2Vt X29iamVjdF9jcmVhdGVfc3RvbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gICAJZHJtX2dl bV9wcml2YXRlX29iamVjdF9pbml0KGRldiwgJm9iai0+YmFzZSwgc3RvbGVuLT5zaXplKTsKPiAg IAlpOTE1X2dlbV9vYmplY3RfaW5pdChvYmosICZpOTE1X2dlbV9vYmplY3Rfc3RvbGVuX29wcyk7 Cj4gICAKPiAtCW9iai0+bW0ucGFnZXMgPSBpOTE1X3BhZ2VzX2NyZWF0ZV9mb3Jfc3RvbGVuKGRl diwKPiAtCQkJCQkJICAgICBzdG9sZW4tPnN0YXJ0LAo+IC0JCQkJCQkgICAgIHN0b2xlbi0+c2l6 ZSk7Cj4gLQlpZiAoIW9iai0+bW0ucGFnZXMpCj4gLQkJZ290byBjbGVhbnVwOwo+IC0KPiAtCW9i ai0+bW0uZ2V0X3BhZ2Uuc2dfcG9zID0gb2JqLT5tbS5wYWdlcy0+c2dsOwo+IC0Jb2JqLT5tbS5n ZXRfcGFnZS5zZ19pZHggPSAwOwo+IC0KPiAtCV9faTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhv YmopOwo+ICAgCW9iai0+c3RvbGVuID0gc3RvbGVuOwo+IC0KPiAgIAlvYmotPmJhc2UucmVhZF9k b21haW5zID0gSTkxNV9HRU1fRE9NQUlOX0NQVSB8IEk5MTVfR0VNX0RPTUFJTl9HVFQ7Cj4gICAJ b2JqLT5jYWNoZV9sZXZlbCA9IEhBU19MTEMoZGV2KSA/IEk5MTVfQ0FDSEVfTExDIDogSTkxNV9D QUNIRV9OT05FOwo+ICAgCj4gKwlpZiAoaTkxNV9nZW1fb2JqZWN0X3Bpbl9wYWdlcyhvYmopKQo+ ICsJCWdvdG8gY2xlYW51cDsKPiArCj4gICAJcmV0dXJuIG9iajsKPiAgIAo+ICAgY2xlYW51cDoK PiBAQCAtNzAwLDEwICs2OTUsMTQgQEAgaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9zdG9sZW5fZm9y X3ByZWFsbG9jYXRlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ICAgCWlmIChndHRfb2Zmc2V0 ID09IEk5MTVfR1RUX09GRlNFVF9OT05FKQo+ICAgCQlyZXR1cm4gb2JqOwo+ICAgCj4gKwlyZXQg PSBpOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8g ZXJyOwo+ICsKPiAgIAl2bWEgPSBpOTE1X2dlbV9vYmpfbG9va3VwX29yX2NyZWF0ZV92bWEob2Jq LCAmZ2d0dC0+YmFzZSwgTlVMTCk7Cj4gICAJaWYgKElTX0VSUih2bWEpKSB7Cj4gICAJCXJldCA9 IFBUUl9FUlIodm1hKTsKPiAtCQlnb3RvIGVycjsKPiArCQlnb3RvIGVycl9wYWdlczsKPiAgIAl9 Cj4gICAKPiAgIAkvKiBUbyBzaW1wbGlmeSB0aGUgaW5pdGlhbGlzYXRpb24gc2VxdWVuY2UgYmV0 d2VlbiBLTVMgYW5kIEdUVCwKPiBAQCAtNzE3LDIwICs3MTYsMjAgQEAgaTkxNV9nZW1fb2JqZWN0 X2NyZWF0ZV9zdG9sZW5fZm9yX3ByZWFsbG9jYXRlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ICAgCXJldCA9IGRybV9tbV9yZXNlcnZlX25vZGUoJmdndHQtPmJhc2UubW0sICZ2bWEtPm5vZGUp Owo+ICAgCWlmIChyZXQpIHsKPiAgIAkJRFJNX0RFQlVHX0tNUygiZmFpbGVkIHRvIGFsbG9jYXRl IHN0b2xlbiBHVFQgc3BhY2VcbiIpOwo+IC0JCWdvdG8gZXJyOwo+ICsJCWdvdG8gZXJyX3BhZ2Vz Owo+ICAgCX0KPiAgIAo+ICAgCXZtYS0+cGFnZXMgPSBvYmotPm1tLnBhZ2VzOwo+ICAgCXZtYS0+ ZmxhZ3MgfD0gSTkxNV9WTUFfR0xPQkFMX0JJTkQ7Cj4gICAJX19pOTE1X3ZtYV9zZXRfbWFwX2Fu ZF9mZW5jZWFibGUodm1hKTsKPiAgIAlsaXN0X21vdmVfdGFpbCgmdm1hLT52bV9saW5rLCAmZ2d0 dC0+YmFzZS5pbmFjdGl2ZV9saXN0KTsKPiArCWxpc3RfbW92ZV90YWlsKCZvYmotPmdsb2JhbF9s aXN0LCAmZGV2X3ByaXYtPm1tLmJvdW5kX2xpc3QpOwo+ICAgCW9iai0+YmluZF9jb3VudCsrOwo+ ICAgCj4gLQlsaXN0X2FkZF90YWlsKCZvYmotPmdsb2JhbF9saXN0LCAmZGV2X3ByaXYtPm1tLmJv dW5kX2xpc3QpOwo+IC0JX19pOTE1X2dlbV9vYmplY3RfcGluX3BhZ2VzKG9iaik7Cj4gLQo+ICAg CXJldHVybiBvYmo7Cj4gICAKPiArZXJyX3BhZ2VzOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGlu X3BhZ2VzKG9iaik7Cj4gICBlcnI6Cj4gICAJaTkxNV9nZW1fb2JqZWN0X3B1dChvYmopOwo+ICAg CXJldHVybiBOVUxMOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV91c2VycHRyLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiBp bmRleCAwZmRkMWQ2NzIzZDEuLmU5N2M3YjU4OTQzOSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV91c2VycHRyLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV91c2VycHRyLmMKPiBAQCAtNzMsMTEgKzczLDE0IEBAIHN0YXRpYyB2b2lkIGNh bmNlbF91c2VycHRyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKPiAgIAkvKiBDYW5jZWwgYW55 IGFjdGl2ZSB3b3JrZXIgYW5kIGZvcmNlIHVzIHRvIHJlLWV2YWx1YXRlIGd1cCAqLwo+ICAgCW9i ai0+dXNlcnB0ci53b3JrID0gTlVMTDsKPiAgIAo+IC0JaWYgKG9iai0+bW0ucGFnZXMpIHsKPiAt CQkvKiBXZSBhcmUgaW5zaWRlIGEga3RocmVhZCBjb250ZXh0IGFuZCBjYW4ndCBiZSBpbnRlcnJ1 cHRlZCAqLwo+IC0JCVdBUk5fT04oaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopKTsKPiAtCQlX QVJOX09OKF9faTkxNV9nZW1fb2JqZWN0X3B1dF9wYWdlcyhvYmopKTsKPiAtCX0KPiArCS8qIFdl IGFyZSBpbnNpZGUgYSBrdGhyZWFkIGNvbnRleHQgYW5kIGNhbid0IGJlIGludGVycnVwdGVkICov Cj4gKwlpZiAoaTkxNV9nZW1fb2JqZWN0X3VuYmluZChvYmopID09IDApCj4gKwkJX19pOTE1X2dl bV9vYmplY3RfcHV0X3BhZ2VzKG9iaik7Cj4gKwlXQVJOX09OQ0Uob2JqLT5tbS5wYWdlcywKPiAr CQkgICJGYWlsZWQgdG8gcmVsZWFzZSBwYWdlczogYmluZF9jb3VudD0lZCwgcGFnZXNfcGluX2Nv dW50PSVkLCBwaW5fZGlzcGxheT0lZFxuIiwKPiArCQkgIG9iai0+YmluZF9jb3VudCwKPiArCQkg IG9iai0+bW0ucGFnZXNfcGluX2NvdW50LAo+ICsJCSAgb2JqLT5waW5fZGlzcGxheSk7Cj4gICAK PiAgIAlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0 cnVjdF9tdXRleCk7Cj4gQEAgLTQyNiwyNCArNDI5LDI1IEBAIGVycjoKPiAgIAlyZXR1cm4gcmV0 Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQKPiArc3RhdGljIHN0cnVjdCBzZ190YWJsZSAqCj4g ICBfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmosCj4gICAJCQkgICAgIHN0cnVjdCBwYWdlICoqcHZlYywgaW50IG51bV9wYWdlcykKPiAg IHsKPiArCXN0cnVjdCBzZ190YWJsZSAqcGFnZXM7Cj4gICAJaW50IHJldDsKPiAgIAo+IC0JcmV0 ID0gc3Rfc2V0X3BhZ2VzKCZvYmotPm1tLnBhZ2VzLCBwdmVjLCBudW1fcGFnZXMpOwo+ICsJcmV0 ID0gc3Rfc2V0X3BhZ2VzKCZwYWdlcywgcHZlYywgbnVtX3BhZ2VzKTsKPiAgIAlpZiAocmV0KQo+ IC0JCXJldHVybiByZXQ7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgIAo+IC0JcmV0ID0g aTkxNV9nZW1fZ3R0X3ByZXBhcmVfb2JqZWN0KG9iaik7Cj4gKwlyZXQgPSBpOTE1X2dlbV9ndHRf cHJlcGFyZV9wYWdlcyhvYmosIHBhZ2VzKTsKPiAgIAlpZiAocmV0KSB7Cj4gLQkJc2dfZnJlZV90 YWJsZShvYmotPm1tLnBhZ2VzKTsKPiAtCQlrZnJlZShvYmotPm1tLnBhZ2VzKTsKPiAtCQlvYmot Pm1tLnBhZ2VzID0gTlVMTDsKPiArCQlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKPiArCQlrZnJlZShw YWdlcyk7Cj4gKwkJcmV0dXJuIEVSUl9QVFIocmV0KTsKPiAgIAl9Cj4gICAKPiAtCXJldHVybiBy ZXQ7Cj4gKwlyZXR1cm4gcGFnZXM7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyBpbnQKPiBAQCAtNTIx LDIwICs1MjUsMjAgQEAgX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0 IHdvcmtfc3RydWN0ICpfd29yaykKPiAgIAo+ICAgCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211 dGV4KTsKPiAgIAlpZiAob2JqLT51c2VycHRyLndvcmsgPT0gJndvcmstPndvcmspIHsKPiArCQlz dHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzID0gRVJSX1BUUihyZXQpOwo+ICsKPiAgIAkJaWYgKHBpbm5l ZCA9PSBucGFnZXMpIHsKPiAtCQkJcmV0ID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9wYWdlcyhv YmosIHB2ZWMsIG5wYWdlcyk7Cj4gLQkJCWlmIChyZXQgPT0gMCkgewo+IC0JCQkJbGlzdF9hZGRf dGFpbCgmb2JqLT5nbG9iYWxfbGlzdCwKPiAtCQkJCQkgICAgICAmdG9faTkxNShkZXYpLT5tbS51 bmJvdW5kX2xpc3QpOwo+IC0JCQkJb2JqLT5tbS5nZXRfcGFnZS5zZ19wb3MgPSBvYmotPm1tLnBh Z2VzLT5zZ2w7Cj4gLQkJCQlvYmotPm1tLmdldF9wYWdlLnNnX2lkeCA9IDA7Cj4gKwkJCXBhZ2Vz ID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9wYWdlcyhvYmosIHB2ZWMsIG5wYWdlcyk7Cj4gKwkJ CWlmICghSVNfRVJSKHBhZ2VzKSkgewo+ICsJCQkJX19pOTE1X2dlbV9vYmplY3Rfc2V0X3BhZ2Vz KG9iaiwgcGFnZXMpOwo+ICAgCQkJCXBpbm5lZCA9IDA7Cj4gKwkJCQlwYWdlcyA9IE5VTEw7Cj4g ICAJCQl9Cj4gICAJCX0KPiAtCQlvYmotPnVzZXJwdHIud29yayA9IEVSUl9QVFIocmV0KTsKPiAr Cj4gKwkJb2JqLT51c2VycHRyLndvcmsgPSBFUlJfQ0FTVChwYWdlcyk7Cj4gICAJfQo+ICAgCj4g LQlvYmotPnVzZXJwdHIud29ya2Vycy0tOwo+ICAgCWk5MTVfZ2VtX29iamVjdF9wdXQob2JqKTsK PiAgIAltdXRleF91bmxvY2soJmRldi0+c3RydWN0X211dGV4KTsKPiAgIAo+IEBAIC01NDUsNyAr NTQ5LDcgQEAgX19pOTE1X2dlbV91c2VycHRyX2dldF9wYWdlc193b3JrZXIoc3RydWN0IHdvcmtf c3RydWN0ICpfd29yaykKPiAgIAlrZnJlZSh3b3JrKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50 Cj4gK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFibGUgKgo+ICAgX19pOTE1X2dlbV91c2VycHRyX2dldF9w YWdlc19zY2hlZHVsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQkJCSAg ICAgIGJvb2wgKmFjdGl2ZSkKPiAgIHsKPiBAQCAtNTcwLDE1ICs1NzQsMTEgQEAgX19pOTE1X2dl bV91c2VycHRyX2dldF9wYWdlc19zY2hlZHVsZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqLAo+ICAgCSAqIHRoYXQgZXJyb3IgYmFjayB0byB0aGlzIGZ1bmN0aW9uIHRocm91Z2gKPiAg IAkgKiBvYmotPnVzZXJwdHIud29yayA9IEVSUl9QVFIuCj4gICAJICovCj4gLQlpZiAob2JqLT51 c2VycHRyLndvcmtlcnMgPj0gSTkxNV9HRU1fVVNFUlBUUl9NQVhfV09SS0VSUykKPiAtCQlyZXR1 cm4gLUVBR0FJTjsKPiAtCj4gICAJd29yayA9IGttYWxsb2Moc2l6ZW9mKCp3b3JrKSwgR0ZQX0tF Uk5FTCk7Cj4gICAJaWYgKHdvcmsgPT0gTlVMTCkKPiAtCQlyZXR1cm4gLUVOT01FTTsKPiArCQly ZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAgIAo+ICAgCW9iai0+dXNlcnB0ci53b3JrID0gJndv cmstPndvcms7Cj4gLQlvYmotPnVzZXJwdHIud29ya2VycysrOwo+ICAgCj4gICAJd29yay0+b2Jq ID0gaTkxNV9nZW1fb2JqZWN0X2dldChvYmopOwo+ICAgCj4gQEAgLTU4OSwxNCArNTg5LDE1IEBA IF9faTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXNfc2NoZWR1bGUoc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3QgKm9iaiwKPiAgIAlzY2hlZHVsZV93b3JrKCZ3b3JrLT53b3JrKTsKPiAgIAo+ICAg CSphY3RpdmUgPSB0cnVlOwo+IC0JcmV0dXJuIC1FQUdBSU47Cj4gKwlyZXR1cm4gRVJSX1BUUigt RUFHQUlOKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50Cj4gK3N0YXRpYyBzdHJ1Y3Qgc2dfdGFi bGUgKgo+ICAgaTkxNV9nZW1fdXNlcnB0cl9nZXRfcGFnZXMoc3RydWN0IGRybV9pOTE1X2dlbV9v YmplY3QgKm9iaikKPiAgIHsKPiAgIAljb25zdCBpbnQgbnVtX3BhZ2VzID0gb2JqLT5iYXNlLnNp emUgPj4gUEFHRV9TSElGVDsKPiAgIAlzdHJ1Y3QgcGFnZSAqKnB2ZWM7Cj4gKwlzdHJ1Y3Qgc2df dGFibGUgKnBhZ2VzOwo+ICAgCWludCBwaW5uZWQsIHJldDsKPiAgIAlib29sIGFjdGl2ZTsKPiAg IAo+IEBAIC02MjAsMTUgKzYyMSwxNSBAQCBpOTE1X2dlbV91c2VycHRyX2dldF9wYWdlcyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCWlmIChvYmotPnVzZXJwdHIud29yaykg ewo+ICAgCQkvKiBhY3RpdmUgZmxhZyBzaG91bGQgc3RpbGwgYmUgaGVsZCBmb3IgdGhlIHBlbmRp bmcgd29yayAqLwo+ICAgCQlpZiAoSVNfRVJSKG9iai0+dXNlcnB0ci53b3JrKSkKPiAtCQkJcmV0 dXJuIFBUUl9FUlIob2JqLT51c2VycHRyLndvcmspOwo+ICsJCQlyZXR1cm4gRVJSX0NBU1Qob2Jq LT51c2VycHRyLndvcmspOwo+ICAgCQllbHNlCj4gLQkJCXJldHVybiAtRUFHQUlOOwo+ICsJCQly ZXR1cm4gRVJSX1BUUigtRUFHQUlOKTsKPiAgIAl9Cj4gICAKPiAgIAkvKiBMZXQgdGhlIG1tdS1u b3RpZmllciBrbm93IHRoYXQgd2UgaGF2ZSBiZWd1biBhbmQgbmVlZCBjYW5jZWxsYXRpb24gKi8K PiAgIAlyZXQgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIHRydWUpOwo+ICAg CWlmIChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICAg Cj4gICAJcHZlYyA9IE5VTEw7Cj4gICAJcGlubmVkID0gMDsKPiBAQCAtNjM3LDcgKzYzOCw3IEBA IGk5MTVfZ2VtX3VzZXJwdHJfZ2V0X3BhZ2VzKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmopCj4gICAJCQkJICAgICAgR0ZQX1RFTVBPUkFSWSk7Cj4gICAJCWlmIChwdmVjID09IE5VTEwp IHsKPiAgIAkJCV9faTkxNV9nZW1fdXNlcnB0cl9zZXRfYWN0aXZlKG9iaiwgZmFsc2UpOwo+IC0J CQlyZXR1cm4gLUVOT01FTTsKPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gICAJCX0K PiAgIAo+ICAgCQlwaW5uZWQgPSBfX2dldF91c2VyX3BhZ2VzX2Zhc3Qob2JqLT51c2VycHRyLnB0 ciwgbnVtX3BhZ2VzLAo+IEBAIC02NDYsMjEgKzY0NywyMiBAQCBpOTE1X2dlbV91c2VycHRyX2dl dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgCj4gICAJYWN0aXZl ID0gZmFsc2U7Cj4gICAJaWYgKHBpbm5lZCA8IDApCj4gLQkJcmV0ID0gcGlubmVkLCBwaW5uZWQg PSAwOwo+ICsJCXBhZ2VzID0gRVJSX1BUUihwaW5uZWQpLCBwaW5uZWQgPSAwOwo+ICAgCWVsc2Ug aWYgKHBpbm5lZCA8IG51bV9wYWdlcykKPiAtCQlyZXQgPSBfX2k5MTVfZ2VtX3VzZXJwdHJfZ2V0 X3BhZ2VzX3NjaGVkdWxlKG9iaiwgJmFjdGl2ZSk7Cj4gKwkJcGFnZXMgPSBfX2k5MTVfZ2VtX3Vz ZXJwdHJfZ2V0X3BhZ2VzX3NjaGVkdWxlKG9iaiwgJmFjdGl2ZSk7Cj4gICAJZWxzZQo+IC0JCXJl dCA9IF9faTkxNV9nZW1fdXNlcnB0cl9zZXRfcGFnZXMob2JqLCBwdmVjLCBudW1fcGFnZXMpOwo+ IC0JaWYgKHJldCkgewo+ICsJCXBhZ2VzID0gX19pOTE1X2dlbV91c2VycHRyX3NldF9wYWdlcyhv YmosIHB2ZWMsIG51bV9wYWdlcyk7Cj4gKwlpZiAoSVNfRVJSKHBhZ2VzKSkgewo+ICAgCQlfX2k5 MTVfZ2VtX3VzZXJwdHJfc2V0X2FjdGl2ZShvYmosIGFjdGl2ZSk7Cj4gICAJCXJlbGVhc2VfcGFn ZXMocHZlYywgcGlubmVkLCAwKTsKPiAgIAl9Cj4gICAJZHJtX2ZyZWVfbGFyZ2UocHZlYyk7Cj4g LQlyZXR1cm4gcmV0Owo+ICsJcmV0dXJuIHBhZ2VzOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9p ZAo+IC1pOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQo+ICtpOTE1X2dlbV91c2VycHRyX3B1dF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqb2JqLAo+ICsJCQkgICBzdHJ1Y3Qgc2dfdGFibGUgKnBhZ2VzKQo+ICAgewo+ICAg CXN0cnVjdCBzZ3RfaXRlciBzZ3RfaXRlcjsKPiAgIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKPiBAQCAt NjcxLDkgKzY3Myw5IEBAIGk5MTVfZ2VtX3VzZXJwdHJfcHV0X3BhZ2VzKHN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmopCj4gICAJaWYgKG9iai0+bW0ubWFkdiAhPSBJOTE1X01BRFZfV0lM TE5FRUQpCj4gICAJCW9iai0+bW0uZGlydHkgPSBmYWxzZTsKPiAgIAo+IC0JaTkxNV9nZW1fZ3R0 X2ZpbmlzaF9vYmplY3Qob2JqKTsKPiArCWk5MTVfZ2VtX2d0dF9maW5pc2hfcGFnZXMob2JqLCBw YWdlcyk7Cj4gICAKPiAtCWZvcl9lYWNoX3NndF9wYWdlKHBhZ2UsIHNndF9pdGVyLCBvYmotPm1t LnBhZ2VzKSB7Cj4gKwlmb3JfZWFjaF9zZ3RfcGFnZShwYWdlLCBzZ3RfaXRlciwgcGFnZXMpIHsK PiAgIAkJaWYgKG9iai0+bW0uZGlydHkpCj4gICAJCQlzZXRfcGFnZV9kaXJ0eShwYWdlKTsKPiAg IAo+IEBAIC02ODIsOCArNjg0LDggQEAgaTkxNV9nZW1fdXNlcnB0cl9wdXRfcGFnZXMoc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAgIAl9Cj4gICAJb2JqLT5tbS5kaXJ0eSA9IGZh bHNlOwo+ICAgCj4gLQlzZ19mcmVlX3RhYmxlKG9iai0+bW0ucGFnZXMpOwo+IC0Ja2ZyZWUob2Jq LT5tbS5wYWdlcyk7Cj4gKwlzZ19mcmVlX3RhYmxlKHBhZ2VzKTsKPiArCWtmcmVlKHBhZ2VzKTsK PiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQKCkkgZGlkIG5vdCBzcG90IGFueSBpc3N1ZXMgd2l0 aCB0aGUgY29kZSBpdHNlbGYsIGJ1dCBJIHRoaW5rIGl0IGNvdWxkIApoYXZlIGJlZW4gc3BsaXQg dXAgaW4gc21hbGxlciBwYXRjaGVzLiBGb3IgZXhhbXBsZSBqdXN0IGFkZCB0aGUgc2cgdGFibGUg CmZ1bmN0aW9uIHBhcmFtZXRlciBpbiBvbmUgcGF0Y2ggYW5kIHRoZW4gZm9sbG93IHdpdGggYWxs IHRoZSBvdGhlciAKY2hhbmdlcy4gTGlrZSB0aGlzIEkgZm91bmQgaXQgdmVyeSBkaWZmaWN1bHQg dG8gcmV2aWV3IGFuZCBldmVuIHdoZW4gbXkgCnF1ZXN0aW9ucyBhcmUgcmVzb2x2ZWQgbXkgY29u ZmlkZW5jZSBsZXZlbCBmb3IgZ2l2aW5nIGFuIHItYiB3aWxsIGJlIGxvdy4gOkkKClJlZ2FyZHMs CgpUdnJ0a28KCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f CkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeAo=