From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lionel Landwerlin Subject: Re: [PATCH] drm/i915/perf: Wean ourselves off dev_priv Date: Mon, 7 Oct 2019 16:33:02 +0300 Message-ID: <26383ccc-f9ec-9cdc-a263-41a9a1994560@intel.com> References: <20191007130325.7340-1-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 mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 503AD6E5EC for ; Mon, 7 Oct 2019 13:33:00 +0000 (UTC) In-Reply-To: <20191007130325.7340-1-chris@chris-wilson.co.uk> Content-Language: en-US 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 T24gMDcvMTAvMjAxOSAxNjowMywgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IFVzZSB0aGUgbG9jYWwg dW5jb3JlIGFjY2Vzc29ycyBmb3IgdGhlIEdUIHJhdGhlciB0aGFuIHVzaW5nIHRoZSBbbm90LXNv XQo+IG1hZ2ljIGdsb2JhbCBkZXZfcHJpdiBtbWlvIHJvdXRpbmVzLiBJbiB0aGUgcHJvY2Vzcywg d2UgYWxzbyB0ZWFjaCB0aGUKPiBwZXJmIHN0cmVhbSB0byB1c2UgYmFja3BvaW50ZXJzIHRvIHRo ZSBpOTE1X3BlcmYgcmF0aGVyIHRoYW4gZGlnZ2luZyBpdAo+IG91dCBvZiBkZXZfcHJpdi4KPgo+ IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+ IENjOiBVbWVzaCBOZXJsaWdlIFJhbWFwcGEgPHVtZXNoLm5lcmxpZ2UucmFtYXBwYUBpbnRlbC5j b20+Cj4gQ2M6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2VybGluQGludGVsLmNv bT4KCgpMb29rcyBnb29kLCBhcGFydCBmcm9tIHRoZSBmYWN0IHRoYXQgdGhpcyBoYXMgYmVlbiBy ZXZpZXdlZCBieSBVbWVzaCA6IApodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9hcmNoaXZl cy9pbnRlbC1nZngvMjAxOS1TZXB0ZW1iZXIvMjEyMDA4Lmh0bWwKClNob3VsZCBJIGhhdmUgbGFu ZGVkIHRoaXMgb3IgZG8gSSBoYXZlIHRvIHdhaXQgZm9yIHNvbWVvbmUgZWxzZSB0byBhbHNvIApy ZXZpZXc/CgoKUmV2aWV3ZWQtYnk6IExpb25lbCBMYW5kd2VybGluIDxsaW9uZWwuZy5sYW5kd2Vy bGluQGludGVsLmNvbT4KCgpUaGFua3MsCgoKLUxpb25lbAoKCj4gLS0tCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oICB8ICAyMSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9wZXJmLmMgfCA3MjEgKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQo+ICAgMiBm aWxlcyBjaGFuZ2VkLCAzNjcgaW5zZXJ0aW9ucygrKSwgMzc1IGRlbGV0aW9ucygtKQo+Cj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggYjlkYzRiZTRiNmExLi43NzI0YjY4NmM5ZWQgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBAQCAtMTAwNyw2ICsxMDA3LDcgQEAgc3RydWN0 IGk5MTVfb2FfY29uZmlnIHsKPiAgIAlhdG9taWNfdCByZWZfY291bnQ7Cj4gICB9Owo+ICAgCj4g K3N0cnVjdCBpOTE1X3BlcmY7Cj4gICBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbTsKPiAgIAo+ICAg LyoqCj4gQEAgLTEwNzgsOSArMTA3OSwxNCBAQCBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbV9vcHMg ewo+ICAgICovCj4gICBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSB7Cj4gICAJLyoqCj4gLQkgKiBA ZGV2X3ByaXY6IGk5MTUgZHJtIGRldmljZQo+ICsJICogQHBlcmY6IGk5MTVfcGVyZiBiYWNrcG9p bnRlcgo+ICAgCSAqLwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2Owo+ICsJ c3RydWN0IGk5MTVfcGVyZiAqcGVyZjsKPiArCj4gKwkvKioKPiArCSAqIEBndDogaW50ZWxfZ3Qg Y29udGFpbmVyCj4gKwkgKi8KPiArCXN0cnVjdCBpbnRlbF9ndCAqZ3Q7Cj4gICAKPiAgIAkvKioK PiAgIAkgKiBAbGluazogTGlua3MgdGhlIHN0cmVhbSBpbnRvIGBgJmRybV9pOTE1X3ByaXZhdGUt PnN0cmVhbXNgYAo+IEBAIC0xMjIwLDIwICsxMjI2LDE5IEBAIHN0cnVjdCBpOTE1X29hX29wcyB7 Cj4gICAJICogQGlzX3ZhbGlkX2JfY291bnRlcl9yZWc6IFZhbGlkYXRlcyByZWdpc3RlcidzIGFk ZHJlc3MgZm9yCj4gICAJICogcHJvZ3JhbW1pbmcgYm9vbGVhbiBjb3VudGVycyBmb3IgYSBwYXJ0 aWN1bGFyIHBsYXRmb3JtLgo+ICAgCSAqLwo+IC0JYm9vbCAoKmlzX3ZhbGlkX2JfY291bnRlcl9y ZWcpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAtCQkJCSAgICAgICB1MzIg YWRkcik7Cj4gKwlib29sICgqaXNfdmFsaWRfYl9jb3VudGVyX3JlZykoc3RydWN0IGk5MTVfcGVy ZiAqcGVyZiwgdTMyIGFkZHIpOwo+ICAgCj4gICAJLyoqCj4gICAJICogQGlzX3ZhbGlkX211eF9y ZWc6IFZhbGlkYXRlcyByZWdpc3RlcidzIGFkZHJlc3MgZm9yIHByb2dyYW1taW5nIG11eAo+ICAg CSAqIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0uCj4gICAJICovCj4gLQlib29sICgqaXNfdmFs aWRfbXV4X3JlZykoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcik7 Cj4gKwlib29sICgqaXNfdmFsaWRfbXV4X3JlZykoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwgdTMy IGFkZHIpOwo+ICAgCj4gICAJLyoqCj4gICAJICogQGlzX3ZhbGlkX2ZsZXhfcmVnOiBWYWxpZGF0 ZXMgcmVnaXN0ZXIncyBhZGRyZXNzIGZvciBwcm9ncmFtbWluZwo+ICAgCSAqIGZsZXggRVUgZmls dGVyaW5nIGZvciBhIHBhcnRpY3VsYXIgcGxhdGZvcm0uCj4gICAJICovCj4gLQlib29sICgqaXNf dmFsaWRfZmxleF9yZWcpKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIGFk ZHIpOwo+ICsJYm9vbCAoKmlzX3ZhbGlkX2ZsZXhfcmVnKShzdHJ1Y3QgaTkxNV9wZXJmICpwZXJm LCB1MzIgYWRkcik7Cj4gICAKPiAgIAkvKioKPiAgIAkgKiBAZW5hYmxlX21ldHJpY19zZXQ6IFNl bGVjdHMgYW5kIGFwcGxpZXMgYW55IE1VWCBjb25maWd1cmF0aW9uIHRvIHNldAo+IEBAIC0xNjM1 LDggKzE2NDAsOCBAQCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSB7Cj4gICAKPiAgIAlzdHJ1Y3Qg aW50ZWxfcnVudGltZV9wbSBydW50aW1lX3BtOwo+ICAgCj4gLQlzdHJ1Y3Qgewo+IC0JCWJvb2wg aW5pdGlhbGl6ZWQ7Cj4gKwlzdHJ1Y3QgaTkxNV9wZXJmIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqaTkxNTsKPiAgIAo+ICAgCQlzdHJ1Y3Qga29iamVjdCAqbWV0cmljc19rb2JqOwo+ ICAgCQlzdHJ1Y3QgY3RsX3RhYmxlX2hlYWRlciAqc3lzY3RsX2hlYWRlcjsKPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X3BlcmYuYwo+IGluZGV4IDIzMTM4OGQwNmM4Mi4uZWY1ZTQ4ZWJhYWE2IDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMKPiBAQCAtMzY3LDggKzM2Nyw3IEBAIHN0cnVjdCBwZXJm X29wZW5fcHJvcGVydGllcyB7Cj4gICAKPiAgIHN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBv YV9wb2xsX2NoZWNrX3RpbWVyX2NiKHN0cnVjdCBocnRpbWVyICpocnRpbWVyKTsKPiAgIAo+IC1z dGF0aWMgdm9pZCBmcmVlX29hX2NvbmZpZyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYsCj4gLQkJCSAgIHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2FfY29uZmlnKQo+ICtzdGF0aWMg dm9pZCBmcmVlX29hX2NvbmZpZyhzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKm9hX2NvbmZpZykKPiAg IHsKPiAgIAlpZiAoIVBUUl9FUlIob2FfY29uZmlnLT5mbGV4X3JlZ3MpKQo+ICAgCQlrZnJlZShv YV9jb25maWctPmZsZXhfcmVncyk7Cj4gQEAgLTM3OSw1MyArMzc4LDUyIEBAIHN0YXRpYyB2b2lk IGZyZWVfb2FfY29uZmlnKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAlr ZnJlZShvYV9jb25maWcpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIHB1dF9vYV9jb25maWco c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+IC0JCQkgIHN0cnVjdCBpOTE1X29h X2NvbmZpZyAqb2FfY29uZmlnKQo+ICtzdGF0aWMgdm9pZCBwdXRfb2FfY29uZmlnKHN0cnVjdCBp OTE1X29hX2NvbmZpZyAqb2FfY29uZmlnKQo+ICAgewo+ICAgCWlmICghYXRvbWljX2RlY19hbmRf dGVzdCgmb2FfY29uZmlnLT5yZWZfY291bnQpKQo+ICAgCQlyZXR1cm47Cj4gICAKPiAtCWZyZWVf b2FfY29uZmlnKGRldl9wcml2LCBvYV9jb25maWcpOwo+ICsJZnJlZV9vYV9jb25maWcob2FfY29u ZmlnKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50IGdldF9vYV9jb25maWcoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICtzdGF0aWMgaW50IGdldF9vYV9jb25maWcoc3RydWN0 IGk5MTVfcGVyZiAqcGVyZiwKPiAgIAkJCSBpbnQgbWV0cmljc19zZXQsCj4gICAJCQkgc3RydWN0 IGk5MTVfb2FfY29uZmlnICoqb3V0X2NvbmZpZykKPiAgIHsKPiAgIAlpbnQgcmV0Owo+ICAgCj4g ICAJaWYgKG1ldHJpY3Nfc2V0ID09IDEpIHsKPiAtCQkqb3V0X2NvbmZpZyA9ICZkZXZfcHJpdi0+ cGVyZi50ZXN0X2NvbmZpZzsKPiAtCQlhdG9taWNfaW5jKCZkZXZfcHJpdi0+cGVyZi50ZXN0X2Nv bmZpZy5yZWZfY291bnQpOwo+ICsJCSpvdXRfY29uZmlnID0gJnBlcmYtPnRlc3RfY29uZmlnOwo+ ICsJCWF0b21pY19pbmMoJnBlcmYtPnRlc3RfY29uZmlnLnJlZl9jb3VudCk7Cj4gICAJCXJldHVy biAwOwo+ICAgCX0KPiAgIAo+IC0JcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZkZXZf cHJpdi0+cGVyZi5tZXRyaWNzX2xvY2spOwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRp YmxlKCZwZXJmLT5tZXRyaWNzX2xvY2spOwo+ICAgCWlmIChyZXQpCj4gICAJCXJldHVybiByZXQ7 Cj4gICAKPiAtCSpvdXRfY29uZmlnID0gaWRyX2ZpbmQoJmRldl9wcml2LT5wZXJmLm1ldHJpY3Nf aWRyLCBtZXRyaWNzX3NldCk7Cj4gKwkqb3V0X2NvbmZpZyA9IGlkcl9maW5kKCZwZXJmLT5tZXRy aWNzX2lkciwgbWV0cmljc19zZXQpOwo+ICAgCWlmICghKm91dF9jb25maWcpCj4gICAJCXJldCA9 IC1FSU5WQUw7Cj4gICAJZWxzZQo+ICAgCQlhdG9taWNfaW5jKCYoKm91dF9jb25maWcpLT5yZWZf Y291bnQpOwo+ICAgCj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLm1ldHJpY3NfbG9j ayk7Cj4gKwltdXRleF91bmxvY2soJnBlcmYtPm1ldHJpY3NfbG9jayk7Cj4gICAKPiAgIAlyZXR1 cm4gcmV0Owo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdTMyIGdlbjhfb2FfaHdfdGFpbF9yZWFkKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwo+ICAgCj4gLQlyZXR1cm4gSTkxNV9S RUFEKEdFTjhfT0FUQUlMUFRSKSAmIEdFTjhfT0FUQUlMUFRSX01BU0s7Cj4gKwlyZXR1cm4gaW50 ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X09BVEFJTFBUUikgJiBHRU44X09BVEFJTFBUUl9N QVNLOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdTMyIGdlbjdfb2FfaHdfdGFpbF9yZWFkKHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+IC0JdTMyIG9hc3RhdHVzMSA9IEk5 MTVfUkVBRChHRU43X09BU1RBVFVTMSk7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUg PSBzdHJlYW0tPmd0LT51bmNvcmU7Cj4gKwl1MzIgb2FzdGF0dXMxID0gaW50ZWxfdW5jb3JlX3Jl YWQodW5jb3JlLCBHRU43X09BU1RBVFVTMSk7Cj4gICAKPiAgIAlyZXR1cm4gb2FzdGF0dXMxICYg R0VON19PQVNUQVRVUzFfVEFJTF9NQVNLOwo+ICAgfQo+IEBAIC00NTYsNyArNDU0LDYgQEAgc3Rh dGljIHUzMiBnZW43X29hX2h3X3RhaWxfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3Ry ZWFtKQo+ICAgICovCj4gICBzdGF0aWMgYm9vbCBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gICAJaW50IHJlcG9ydF9zaXpl ID0gc3RyZWFtLT5vYV9idWZmZXIuZm9ybWF0X3NpemU7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFn czsKPiAgIAl1bnNpZ25lZCBpbnQgYWdlZF9pZHg7Cj4gQEAgLTQ3OSw3ICs0NzYsNyBAQCBzdGF0 aWMgYm9vbCBvYV9idWZmZXJfY2hlY2tfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0g KnN0cmVhbSkKPiAgIAlhZ2VkX3RhaWwgPSBzdHJlYW0tPm9hX2J1ZmZlci50YWlsc1thZ2VkX2lk eF0ub2Zmc2V0Owo+ICAgCWFnaW5nX3RhaWwgPSBzdHJlYW0tPm9hX2J1ZmZlci50YWlsc1shYWdl ZF9pZHhdLm9mZnNldDsKPiAgIAo+IC0JaHdfdGFpbCA9IGRldl9wcml2LT5wZXJmLm9wcy5vYV9o d190YWlsX3JlYWQoc3RyZWFtKTsKPiArCWh3X3RhaWwgPSBzdHJlYW0tPnBlcmYtPm9wcy5vYV9o d190YWlsX3JlYWQoc3RyZWFtKTsKPiAgIAo+ICAgCS8qIFRoZSB0YWlsIHBvaW50ZXIgaW5jcmVh c2VzIGluIDY0IGJ5dGUgaW5jcmVtZW50cywKPiAgIAkgKiBub3QgaW4gcmVwb3J0X3NpemUgc3Rl cHMuLi4KPiBAQCAtNjU1LDcgKzY1Miw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVw b3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQkJCSAgc2l6ZV90IGNv dW50LAo+ICAgCQkJCSAgc2l6ZV90ICpvZmZzZXQpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGludGVsX3Vu Y29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwo+ICAgCWludCByZXBvcnRfc2l6ZSA9 IHN0cmVhbS0+b2FfYnVmZmVyLmZvcm1hdF9zaXplOwo+ICAgCXU4ICpvYV9idWZfYmFzZSA9IHN0 cmVhbS0+b2FfYnVmZmVyLnZhZGRyOwo+ICAgCXUzMiBndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29m ZnNldChzdHJlYW0tPm9hX2J1ZmZlci52bWEpOwo+IEBAIC03NDAsNyArNzM3LDcgQEAgc3RhdGlj IGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCj4gICAJCXJlYXNvbiA9ICgocmVwb3J0MzJbMF0gPj4gT0FSRVBPUlRfUkVBU09OX1NISUZU KSAmCj4gICAJCQkgIE9BUkVQT1JUX1JFQVNPTl9NQVNLKTsKPiAgIAkJaWYgKHJlYXNvbiA9PSAw KSB7Cj4gLQkJCWlmIChfX3JhdGVsaW1pdCgmZGV2X3ByaXYtPnBlcmYuc3B1cmlvdXNfcmVwb3J0 X3JzKSkKPiArCQkJaWYgKF9fcmF0ZWxpbWl0KCZzdHJlYW0tPnBlcmYtPnNwdXJpb3VzX3JlcG9y dF9ycykpCj4gICAJCQkJRFJNX05PVEUoIlNraXBwaW5nIHNwdXJpb3VzLCBpbnZhbGlkIE9BIHJl cG9ydFxuIik7Cj4gICAJCQljb250aW51ZTsKPiAgIAkJfQo+IEBAIC03NTUsNyArNzUyLDcgQEAg c3RhdGljIGludCBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0sCj4gICAJCSAqIE5vdGU6IHRoYXQgd2UgZG9uJ3QgY2xlYXIgdGhlIHZhbGlkX2N0 eF9iaXQgc28gdXNlcnNwYWNlIGNhbgo+ICAgCQkgKiB1bmRlcnN0YW5kIHRoYXQgdGhlIElEIGhh cyBiZWVuIHNxdWFzaGVkIGJ5IHRoZSBrZXJuZWwuCj4gICAJCSAqLwo+IC0JCWlmICghKHJlcG9y dDMyWzBdICYgZGV2X3ByaXYtPnBlcmYuZ2VuOF92YWxpZF9jdHhfYml0KSkKPiArCQlpZiAoIShy ZXBvcnQzMlswXSAmIHN0cmVhbS0+cGVyZi0+Z2VuOF92YWxpZF9jdHhfYml0KSkKPiAgIAkJCWN0 eF9pZCA9IHJlcG9ydDMyWzJdID0gSU5WQUxJRF9DVFhfSUQ7Cj4gICAKPiAgIAkJLyoKPiBAQCAt Nzg5LDcgKzc4Niw3IEBAIHN0YXRpYyBpbnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3Qg aTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQkgKiBzd2l0Y2hlcyBzaW5jZSBpdCdzIG5v dC11bmNvbW1vbiBmb3IgcGVyaW9kaWMgc2FtcGxlcyB0bwo+ICAgCQkgKiBpZGVudGlmeSBhIHN3 aXRjaCBiZWZvcmUgYW55ICdjb250ZXh0IHN3aXRjaCcgcmVwb3J0Lgo+ICAgCQkgKi8KPiAtCQlp ZiAoIWRldl9wcml2LT5wZXJmLmV4Y2x1c2l2ZV9zdHJlYW0tPmN0eCB8fAo+ICsJCWlmICghc3Ry ZWFtLT5wZXJmLT5leGNsdXNpdmVfc3RyZWFtLT5jdHggfHwKPiAgIAkJICAgIHN0cmVhbS0+c3Bl Y2lmaWNfY3R4X2lkID09IGN0eF9pZCB8fAo+ICAgCQkgICAgc3RyZWFtLT5vYV9idWZmZXIubGFz dF9jdHhfaWQgPT0gc3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgfHwKPiAgIAkJICAgIHJlYXNvbiAm IE9BUkVQT1JUX1JFQVNPTl9DVFhfU1dJVENIKSB7Cj4gQEAgLTc5OCw3ICs3OTUsNyBAQCBzdGF0 aWMgaW50IGdlbjhfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSwKPiAgIAkJCSAqIFdoaWxlIGZpbHRlcmluZyBmb3IgYSBzaW5nbGUgY29udGV4dCB3ZSBh dm9pZAo+ICAgCQkJICogbGVha2luZyB0aGUgSURzIG9mIG90aGVyIGNvbnRleHRzLgo+ICAgCQkJ ICovCj4gLQkJCWlmIChkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtLT5jdHggJiYKPiAr CQkJaWYgKHN0cmVhbS0+cGVyZi0+ZXhjbHVzaXZlX3N0cmVhbS0+Y3R4ICYmCj4gICAJCQkgICAg c3RyZWFtLT5zcGVjaWZpY19jdHhfaWQgIT0gY3R4X2lkKSB7Cj4gICAJCQkJcmVwb3J0MzJbMl0g PSBJTlZBTElEX0NUWF9JRDsKPiAgIAkJCX0KPiBAQCAtODMwLDcgKzgyNyw4IEBAIHN0YXRpYyBp bnQgZ2VuOF9hcHBlbmRfb2FfcmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt LAo+ICAgCQkgKi8KPiAgIAkJaGVhZCArPSBndHRfb2Zmc2V0Owo+ICAgCj4gLQkJSTkxNV9XUklU RShHRU44X09BSEVBRFBUUiwgaGVhZCAmIEdFTjhfT0FIRUFEUFRSX01BU0spOwo+ICsJCWludGVs X3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjhfT0FIRUFEUFRSLAo+ICsJCQkJICAgaGVhZCAmIEdF TjhfT0FIRUFEUFRSX01BU0spOwo+ICAgCQlzdHJlYW0tPm9hX2J1ZmZlci5oZWFkID0gaGVhZDsK PiAgIAo+ICAgCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzdHJlYW0tPm9hX2J1ZmZlci5wdHJf bG9jaywgZmxhZ3MpOwo+IEBAIC04NjQsMTQgKzg2MiwxNCBAQCBzdGF0aWMgaW50IGdlbjhfb2Ff cmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQkJc2l6ZV90IGNvdW50 LAo+ICAgCQkJc2l6ZV90ICpvZmZzZXQpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAq dW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwo+ICAgCXUzMiBvYXN0YXR1czsKPiAgIAlpbnQg cmV0Owo+ICAgCj4gICAJaWYgKFdBUk5fT04oIXN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyKSkKPiAg IAkJcmV0dXJuIC1FSU87Cj4gICAKPiAtCW9hc3RhdHVzID0gSTkxNV9SRUFEKEdFTjhfT0FTVEFU VVMpOwo+ICsJb2FzdGF0dXMgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjhfT0FTVEFU VVMpOwo+ICAgCj4gICAJLyoKPiAgIAkgKiBXZSB0cmVhdCBPQUJVRkZFUl9PVkVSRkxPVyBhcyBh IHNpZ25pZmljYW50IGVycm9yOgo+IEBAIC04OTYsMTQgKzg5NCwxNCBAQCBzdGF0aWMgaW50IGdl bjhfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQlEUk1fREVC VUcoIk9BIGJ1ZmZlciBvdmVyZmxvdyAoZXhwb25lbnQgPSAlZCk6IGZvcmNlIHJlc3RhcnRcbiIs Cj4gICAJCQkgIHN0cmVhbS0+cGVyaW9kX2V4cG9uZW50KTsKPiAgIAo+IC0JCWRldl9wcml2LT5w ZXJmLm9wcy5vYV9kaXNhYmxlKHN0cmVhbSk7Cj4gLQkJZGV2X3ByaXYtPnBlcmYub3BzLm9hX2Vu YWJsZShzdHJlYW0pOwo+ICsJCXN0cmVhbS0+cGVyZi0+b3BzLm9hX2Rpc2FibGUoc3RyZWFtKTsK PiArCQlzdHJlYW0tPnBlcmYtPm9wcy5vYV9lbmFibGUoc3RyZWFtKTsKPiAgIAo+ICAgCQkvKgo+ ICAgCQkgKiBOb3RlOiAub2FfZW5hYmxlKCkgaXMgZXhwZWN0ZWQgdG8gcmUtaW5pdCB0aGUgb2Fi dWZmZXIgYW5kCj4gICAJCSAqIHJlc2V0IEdFTjhfT0FTVEFUVVMgZm9yIHVzCj4gICAJCSAqLwo+ IC0JCW9hc3RhdHVzID0gSTkxNV9SRUFEKEdFTjhfT0FTVEFUVVMpOwo+ICsJCW9hc3RhdHVzID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU44X09BU1RBVFVTKTsKPiAgIAl9Cj4gICAKPiAg IAlpZiAob2FzdGF0dXMgJiBHRU44X09BU1RBVFVTX1JFUE9SVF9MT1NUKSB7Cj4gQEAgLTkxMSw4 ICs5MDksOCBAQCBzdGF0aWMgaW50IGdlbjhfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVh bSAqc3RyZWFtLAo+ICAgCQkJCSAgICAgICBEUk1fSTkxNV9QRVJGX1JFQ09SRF9PQV9SRVBPUlRf TE9TVCk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlyZXR1cm4gcmV0Owo+IC0JCUk5MTVfV1JJVEUo R0VOOF9PQVNUQVRVUywKPiAtCQkJICAgb2FzdGF0dXMgJiB+R0VOOF9PQVNUQVRVU19SRVBPUlRf TE9TVCk7Cj4gKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VOOF9PQVNUQVRVUywKPiAr CQkJCSAgIG9hc3RhdHVzICYgfkdFTjhfT0FTVEFUVVNfUkVQT1JUX0xPU1QpOwo+ICAgCX0KPiAg IAo+ICAgCXJldHVybiBnZW44X2FwcGVuZF9vYV9yZXBvcnRzKHN0cmVhbSwgYnVmLCBjb3VudCwg b2Zmc2V0KTsKPiBAQCAtOTQzLDcgKzk0MSw3IEBAIHN0YXRpYyBpbnQgZ2VuN19hcHBlbmRfb2Ff cmVwb3J0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQkJCSAgc2l6ZV90 IGNvdW50LAo+ICAgCQkJCSAgc2l6ZV90ICpvZmZzZXQpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGludGVs X3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwo+ICAgCWludCByZXBvcnRfc2l6 ZSA9IHN0cmVhbS0+b2FfYnVmZmVyLmZvcm1hdF9zaXplOwo+ICAgCXU4ICpvYV9idWZfYmFzZSA9 IHN0cmVhbS0+b2FfYnVmZmVyLnZhZGRyOwo+ICAgCXUzMiBndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0 X29mZnNldChzdHJlYW0tPm9hX2J1ZmZlci52bWEpOwo+IEBAIC0xMDE3LDcgKzEwMTUsNyBAQCBz dGF0aWMgaW50IGdlbjdfYXBwZW5kX29hX3JlcG9ydHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0g KnN0cmVhbSwKPiAgIAkJICogY29weWluZyBpdCB0byB1c2Vyc3BhY2UuLi4KPiAgIAkJICovCj4g ICAJCWlmIChyZXBvcnQzMlswXSA9PSAwKSB7Cj4gLQkJCWlmIChfX3JhdGVsaW1pdCgmZGV2X3By aXYtPnBlcmYuc3B1cmlvdXNfcmVwb3J0X3JzKSkKPiArCQkJaWYgKF9fcmF0ZWxpbWl0KCZzdHJl YW0tPnBlcmYtPnNwdXJpb3VzX3JlcG9ydF9ycykpCj4gICAJCQkJRFJNX05PVEUoIlNraXBwaW5n IHNwdXJpb3VzLCBpbnZhbGlkIE9BIHJlcG9ydFxuIik7Cj4gICAJCQljb250aW51ZTsKPiAgIAkJ fQo+IEBAIC0xMDQzLDkgKzEwNDEsOSBAQCBzdGF0aWMgaW50IGdlbjdfYXBwZW5kX29hX3JlcG9y dHMoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkJICovCj4gICAJCWhlYWQg Kz0gZ3R0X29mZnNldDsKPiAgIAo+IC0JCUk5MTVfV1JJVEUoR0VON19PQVNUQVRVUzIsCj4gLQkJ CSAgICgoaGVhZCAmIEdFTjdfT0FTVEFUVVMyX0hFQURfTUFTSykgfAo+IC0JCQkgICAgR0VON19P QVNUQVRVUzJfTUVNX1NFTEVDVF9HR1RUKSk7Cj4gKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29y ZSwgR0VON19PQVNUQVRVUzIsCj4gKwkJCQkgICAoaGVhZCAmIEdFTjdfT0FTVEFUVVMyX0hFQURf TUFTSykgfAo+ICsJCQkJICAgR0VON19PQVNUQVRVUzJfTUVNX1NFTEVDVF9HR1RUKTsKPiAgIAkJ c3RyZWFtLT5vYV9idWZmZXIuaGVhZCA9IGhlYWQ7Cj4gICAKPiAgIAkJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmc3RyZWFtLT5vYV9idWZmZXIucHRyX2xvY2ssIGZsYWdzKTsKPiBAQCAtMTA3NSwy MSArMTA3MywyMSBAQCBzdGF0aWMgaW50IGdlbjdfb2FfcmVhZChzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtLAo+ICAgCQkJc2l6ZV90IGNvdW50LAo+ICAgCQkJc2l6ZV90ICpvZmZzZXQp Cj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRl dl9wcml2Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5j b3JlOwo+ICAgCXUzMiBvYXN0YXR1czE7Cj4gICAJaW50IHJldDsKPiAgIAo+ICAgCWlmIChXQVJO X09OKCFzdHJlYW0tPm9hX2J1ZmZlci52YWRkcikpCj4gICAJCXJldHVybiAtRUlPOwo+ICAgCj4g LQlvYXN0YXR1czEgPSBJOTE1X1JFQUQoR0VON19PQVNUQVRVUzEpOwo+ICsJb2FzdGF0dXMxID0g aW50ZWxfdW5jb3JlX3JlYWQodW5jb3JlLCBHRU43X09BU1RBVFVTMSk7Cj4gICAKPiAgIAkvKiBY WFg6IE9uIEhhc3dlbGwgd2UgZG9uJ3QgaGF2ZSBhIHNhZmUgd2F5IHRvIGNsZWFyIG9hc3RhdHVz MQo+ICAgCSAqIGJpdHMgd2hpbGUgdGhlIE9BIHVuaXQgaXMgZW5hYmxlZCAod2hpbGUgdGhlIHRh aWwgcG9pbnRlcgo+ICAgCSAqIG1heSBiZSB1cGRhdGVkIGFzeW5jaHJvbm91c2x5KSBzbyB3ZSBp Z25vcmUgc3RhdHVzIGJpdHMKPiAgIAkgKiB0aGF0IGhhdmUgYWxyZWFkeSBiZWVuIHJlcG9ydGVk IHRvIHVzZXJzcGFjZS4KPiAgIAkgKi8KPiAtCW9hc3RhdHVzMSAmPSB+ZGV2X3ByaXYtPnBlcmYu Z2VuN19sYXRjaGVkX29hc3RhdHVzMTsKPiArCW9hc3RhdHVzMSAmPSB+c3RyZWFtLT5wZXJmLT5n ZW43X2xhdGNoZWRfb2FzdGF0dXMxOwo+ICAgCj4gICAJLyogV2UgdHJlYXQgT0FCVUZGRVJfT1ZF UkZMT1cgYXMgYSBzaWduaWZpY2FudCBlcnJvcjoKPiAgIAkgKgo+IEBAIC0xMTIwLDEwICsxMTE4 LDEwIEBAIHN0YXRpYyBpbnQgZ2VuN19vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpz dHJlYW0sCj4gICAJCURSTV9ERUJVRygiT0EgYnVmZmVyIG92ZXJmbG93IChleHBvbmVudCA9ICVk KTogZm9yY2UgcmVzdGFydFxuIiwKPiAgIAkJCSAgc3RyZWFtLT5wZXJpb2RfZXhwb25lbnQpOwo+ ICAgCj4gLQkJZGV2X3ByaXYtPnBlcmYub3BzLm9hX2Rpc2FibGUoc3RyZWFtKTsKPiAtCQlkZXZf cHJpdi0+cGVyZi5vcHMub2FfZW5hYmxlKHN0cmVhbSk7Cj4gKwkJc3RyZWFtLT5wZXJmLT5vcHMu b2FfZGlzYWJsZShzdHJlYW0pOwo+ICsJCXN0cmVhbS0+cGVyZi0+b3BzLm9hX2VuYWJsZShzdHJl YW0pOwo+ICAgCj4gLQkJb2FzdGF0dXMxID0gSTkxNV9SRUFEKEdFTjdfT0FTVEFUVVMxKTsKPiAr CQlvYXN0YXR1czEgPSBpbnRlbF91bmNvcmVfcmVhZCh1bmNvcmUsIEdFTjdfT0FTVEFUVVMxKTsK PiAgIAl9Cj4gICAKPiAgIAlpZiAodW5saWtlbHkob2FzdGF0dXMxICYgR0VON19PQVNUQVRVUzFf UkVQT1JUX0xPU1QpKSB7Cj4gQEAgLTExMzEsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZ2VuN19v YV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAJCQkJICAgICAgIERS TV9JOTE1X1BFUkZfUkVDT1JEX09BX1JFUE9SVF9MT1NUKTsKPiAgIAkJaWYgKHJldCkKPiAgIAkJ CXJldHVybiByZXQ7Cj4gLQkJZGV2X3ByaXYtPnBlcmYuZ2VuN19sYXRjaGVkX29hc3RhdHVzMSB8 PQo+ICsJCXN0cmVhbS0+cGVyZi0+Z2VuN19sYXRjaGVkX29hc3RhdHVzMSB8PQo+ICAgCQkJR0VO N19PQVNUQVRVUzFfUkVQT1JUX0xPU1Q7Cj4gICAJfQo+ICAgCj4gQEAgLTExOTYsOSArMTE5NCw3 IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9yZWFkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0sCj4gICAJCQlzaXplX3QgY291bnQsCj4gICAJCQlzaXplX3QgKm9mZnNldCkKPiAgIHsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4g LQo+IC0JcmV0dXJuIGRldl9wcml2LT5wZXJmLm9wcy5yZWFkKHN0cmVhbSwgYnVmLCBjb3VudCwg b2Zmc2V0KTsKPiArCXJldHVybiBzdHJlYW0tPnBlcmYtPm9wcy5yZWFkKHN0cmVhbSwgYnVmLCBj b3VudCwgb2Zmc2V0KTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBpbnRlbF9jb250ZXh0 ICpvYV9waW5fY29udGV4dChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+IEBAIC0x MjM5LDE0ICsxMjM1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqb2FfcGluX2Nv bnRleHQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgICAqLwo+ICAgc3RhdGlj IGludCBvYV9nZXRfcmVuZGVyX2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt KQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBzdHJlYW0tPmRldl9w cml2Owo+ICAgCXN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZTsKPiAgIAo+ICAgCWNlID0gb2FfcGlu X2NvbnRleHQoc3RyZWFtKTsKPiAgIAlpZiAoSVNfRVJSKGNlKSkKPiAgIAkJcmV0dXJuIFBUUl9F UlIoY2UpOwo+ICAgCj4gLQlzd2l0Y2ggKElOVEVMX0dFTihpOTE1KSkgewo+ICsJc3dpdGNoIChJ TlRFTF9HRU4oY2UtPmVuZ2luZS0+aTkxNSkpIHsKPiAgIAljYXNlIDc6IHsKPiAgIAkJLyoKPiAg IAkJICogT24gSGFzd2VsbCB3ZSBkb24ndCBkbyBhbnkgcG9zdCBwcm9jZXNzaW5nIG9mIHRoZSBy ZXBvcnRzCj4gQEAgLTEyNjAsNyArMTI1NSw3IEBAIHN0YXRpYyBpbnQgb2FfZ2V0X3JlbmRlcl9j dHhfaWQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIAljYXNlIDg6Cj4gICAJ Y2FzZSA5Ogo+ICAgCWNhc2UgMTA6Cj4gLQkJaWYgKFVTRVNfR1VDX1NVQk1JU1NJT04oaTkxNSkp IHsKPiArCQlpZiAoVVNFU19HVUNfU1VCTUlTU0lPTihjZS0+ZW5naW5lLT5pOTE1KSkgewo+ICAg CQkJLyoKPiAgIAkJCSAqIFdoZW4gdXNpbmcgR3VDLCB0aGUgY29udGV4dCBkZXNjcmlwdG9yIHdl IHdyaXRlIGluCj4gICAJCQkgKiBpOTE1IGlzIHJlYWQgYnkgR3VDIGFuZCByZXdyaXR0ZW4gYmVm b3JlIGl0J3MKPiBAQCAtMTI5Niw3ICsxMjkxLDcgQEAgc3RhdGljIGludCBvYV9nZXRfcmVuZGVy X2N0eF9pZChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgCX0KPiAgIAo+ICAg CWRlZmF1bHQ6Cj4gLQkJTUlTU0lOR19DQVNFKElOVEVMX0dFTihpOTE1KSk7Cj4gKwkJTUlTU0lO R19DQVNFKElOVEVMX0dFTihjZS0+ZW5naW5lLT5pOTE1KSk7Cj4gICAJfQo+ICAgCj4gICAJY2Ut PnRhZyA9IHN0cmVhbS0+c3BlY2lmaWNfY3R4X2lkX21hc2s7Cj4gQEAgLTEzNDAsMzggKzEzMzUs MzggQEAgZnJlZV9vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAg IAo+ICAgc3RhdGljIHZvaWQgaTkxNV9vYV9zdHJlYW1fZGVzdHJveShzdHJ1Y3QgaTkxNV9wZXJm X3N0cmVhbSAqc3RyZWFtKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCXN0cnVjdCBpOTE1X3BlcmYgKnBlcmYgPSBzdHJl YW0tPnBlcmY7Cj4gICAKPiAtCUJVR19PTihzdHJlYW0gIT0gZGV2X3ByaXYtPnBlcmYuZXhjbHVz aXZlX3N0cmVhbSk7Cj4gKwlCVUdfT04oc3RyZWFtICE9IHBlcmYtPmV4Y2x1c2l2ZV9zdHJlYW0p Owo+ICAgCj4gICAJLyoKPiAgIAkgKiBVbnNldCBleGNsdXNpdmVfc3RyZWFtIGZpcnN0LCBpdCB3 aWxsIGJlIGNoZWNrZWQgd2hpbGUgZGlzYWJsaW5nCj4gICAJICogdGhlIG1ldHJpYyBzZXQgb24g Z2VuOCsuCj4gICAJICovCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRl eCk7Cj4gLQlkZXZfcHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtID0gTlVMTDsKPiAtCWRldl9w cml2LT5wZXJmLm9wcy5kaXNhYmxlX21ldHJpY19zZXQoc3RyZWFtKTsKPiAtCW11dGV4X3VubG9j aygmZGV2X3ByaXYtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJbXV0ZXhfbG9jaygmcGVyZi0+aTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlwZXJmLT5leGNsdXNpdmVfc3RyZWFtID0gTlVMTDsK PiArCXBlcmYtPm9wcy5kaXNhYmxlX21ldHJpY19zZXQoc3RyZWFtKTsKPiArCW11dGV4X3VubG9j aygmcGVyZi0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIAlmcmVlX29hX2J1ZmZl cihzdHJlYW0pOwo+ICAgCj4gLQlpbnRlbF91bmNvcmVfZm9yY2V3YWtlX3B1dCgmZGV2X3ByaXYt PnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gLQlpbnRlbF9ydW50aW1lX3BtX3B1dCgmZGV2X3By aXYtPnJ1bnRpbWVfcG0sIHN0cmVhbS0+d2FrZXJlZik7Cj4gKwlpbnRlbF91bmNvcmVfZm9yY2V3 YWtlX3B1dChzdHJlYW0tPmd0LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+ICsJaW50ZWxfcnVu dGltZV9wbV9wdXQoc3RyZWFtLT5ndC0+dW5jb3JlLT5ycG0sIHN0cmVhbS0+d2FrZXJlZik7Cj4g ICAKPiAgIAlpZiAoc3RyZWFtLT5jdHgpCj4gICAJCW9hX3B1dF9yZW5kZXJfY3R4X2lkKHN0cmVh bSk7Cj4gICAKPiAtCXB1dF9vYV9jb25maWcoZGV2X3ByaXYsIHN0cmVhbS0+b2FfY29uZmlnKTsK PiArCXB1dF9vYV9jb25maWcoc3RyZWFtLT5vYV9jb25maWcpOwo+ICAgCj4gLQlpZiAoZGV2X3By aXYtPnBlcmYuc3B1cmlvdXNfcmVwb3J0X3JzLm1pc3NlZCkgewo+ICsJaWYgKHBlcmYtPnNwdXJp b3VzX3JlcG9ydF9ycy5taXNzZWQpIHsKPiAgIAkJRFJNX05PVEUoIiVkIHNwdXJpb3VzIE9BIHJl cG9ydCBub3RpY2VzIHN1cHByZXNzZWQgZHVlIHRvIHJhdGVsaW1pdGluZ1xuIiwKPiAtCQkJIGRl dl9wcml2LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycy5taXNzZWQpOwo+ICsJCQkgcGVyZi0+c3B1 cmlvdXNfcmVwb3J0X3JzLm1pc3NlZCk7Cj4gICAJfQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgdm9p ZCBnZW43X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4g ICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9w cml2Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3Jl Owo+ICAgCXUzMiBndHRfb2Zmc2V0ID0gaTkxNV9nZ3R0X29mZnNldChzdHJlYW0tPm9hX2J1ZmZl ci52bWEpOwo+ICAgCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gICAKPiBAQCAtMTM4MCwxMyArMTM3 NSwxNCBAQCBzdGF0aWMgdm9pZCBnZW43X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0pCj4gICAJLyogUHJlLURldkJEVzogT0FCVUZGRVIgbXVzdCBiZSBzZXQg d2l0aCBjb3VudGVycyBvZmYsCj4gICAJICogYmVmb3JlIE9BU1RBVFVTMSwgYnV0IGFmdGVyIE9B U1RBVFVTMgo+ICAgCSAqLwo+IC0JSTkxNV9XUklURShHRU43X09BU1RBVFVTMiwKPiAtCQkgICBn dHRfb2Zmc2V0IHwgR0VON19PQVNUQVRVUzJfTUVNX1NFTEVDVF9HR1RUKTsgLyogaGVhZCAqLwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19PQVNUQVRVUzIsIC8qIGhlYWQgKi8K PiArCQkJICAgZ3R0X29mZnNldCB8IEdFTjdfT0FTVEFUVVMyX01FTV9TRUxFQ1RfR0dUVCk7Cj4g ICAJc3RyZWFtLT5vYV9idWZmZXIuaGVhZCA9IGd0dF9vZmZzZXQ7Cj4gICAKPiAtCUk5MTVfV1JJ VEUoR0VON19PQUJVRkZFUiwgZ3R0X29mZnNldCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5j b3JlLCBHRU43X09BQlVGRkVSLCBndHRfb2Zmc2V0KTsKPiAgIAo+IC0JSTkxNV9XUklURShHRU43 X09BU1RBVFVTMSwgZ3R0X29mZnNldCB8IE9BQlVGRkVSX1NJWkVfMTZNKTsgLyogdGFpbCAqLwo+ ICsJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19PQVNUQVRVUzEsIC8qIHRhaWwgKi8K PiArCQkJICAgZ3R0X29mZnNldCB8IE9BQlVGRkVSX1NJWkVfMTZNKTsKPiAgIAo+ICAgCS8qIE1h cmsgdGhhdCB3ZSBuZWVkIHVwZGF0ZWQgdGFpbCBwb2ludGVycyB0byByZWFkIGZyb20uLi4gKi8K PiAgIAlzdHJlYW0tPm9hX2J1ZmZlci50YWlsc1swXS5vZmZzZXQgPSBJTlZBTElEX1RBSUxfUFRS Owo+IEBAIC0xMzk4LDcgKzEzOTQsNyBAQCBzdGF0aWMgdm9pZCBnZW43X2luaXRfb2FfYnVmZmVy KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJICogYWxyZWFkeSBzZWVuIHNp bmNlIHRoZXkgY2FuJ3QgYmUgY2xlYXJlZCB3aGlsZSBwZXJpb2RpYwo+ICAgCSAqIHNhbXBsaW5n IGlzIGVuYWJsZWQuCj4gICAJICovCj4gLQlkZXZfcHJpdi0+cGVyZi5nZW43X2xhdGNoZWRfb2Fz dGF0dXMxID0gMDsKPiArCXN0cmVhbS0+cGVyZi0+Z2VuN19sYXRjaGVkX29hc3RhdHVzMSA9IDA7 Cj4gICAKPiAgIAkvKiBOQjogYWx0aG91Z2ggdGhlIE9BIGJ1ZmZlciB3aWxsIGluaXRpYWxseSBi ZSBhbGxvY2F0ZWQKPiAgIAkgKiB6ZXJvZWQgdmlhIHNobWZzIChhbmQgc28gdGhpcyBtZW1zZXQg aXMgcmVkdW5kYW50IHdoZW4KPiBAQCAtMTQyMSwxNyArMTQxNywxNyBAQCBzdGF0aWMgdm9pZCBn ZW43X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAK PiAgIHN0YXRpYyB2b2lkIGdlbjhfaW5pdF9vYV9idWZmZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJl YW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJl YW0tPmd0LT51bmNvcmU7Cj4gICAJdTMyIGd0dF9vZmZzZXQgPSBpOTE1X2dndHRfb2Zmc2V0KHN0 cmVhbS0+b2FfYnVmZmVyLnZtYSk7Cj4gICAJdW5zaWduZWQgbG9uZyBmbGFnczsKPiAgIAo+ICAg CXNwaW5fbG9ja19pcnFzYXZlKCZzdHJlYW0tPm9hX2J1ZmZlci5wdHJfbG9jaywgZmxhZ3MpOwo+ ICAgCj4gLQlJOTE1X1dSSVRFKEdFTjhfT0FTVEFUVVMsIDApOwo+IC0JSTkxNV9XUklURShHRU44 X09BSEVBRFBUUiwgZ3R0X29mZnNldCk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBH RU44X09BU1RBVFVTLCAwKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjhfT0FI RUFEUFRSLCBndHRfb2Zmc2V0KTsKPiAgIAlzdHJlYW0tPm9hX2J1ZmZlci5oZWFkID0gZ3R0X29m ZnNldDsKPiAgIAo+IC0JSTkxNV9XUklURShHRU44X09BQlVGRkVSX1VEVywgMCk7Cj4gKwlpbnRl bF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU44X09BQlVGRkVSX1VEVywgMCk7Cj4gICAKPiAgIAkv Kgo+ICAgCSAqIFBSTSBzYXlzOgo+IEBAIC0xNDQxLDkgKzE0MzcsOSBAQCBzdGF0aWMgdm9pZCBn ZW44X2luaXRfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJ ICogIHRvIGVuYWJsZSBwcm9wZXIgZnVuY3Rpb25hbGl0eSBvZiB0aGUgb3ZlcmZsb3cKPiAgIAkg KiAgYml0LiIKPiAgIAkgKi8KPiAtCUk5MTVfV1JJVEUoR0VOOF9PQUJVRkZFUiwgZ3R0X29mZnNl dCB8Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU44X09BQlVGRkVSLCBndHRfb2Zm c2V0IHwKPiAgIAkJICAgT0FCVUZGRVJfU0laRV8xNk0gfCBHRU44X09BQlVGRkVSX01FTV9TRUxF Q1RfR0dUVCk7Cj4gLQlJOTE1X1dSSVRFKEdFTjhfT0FUQUlMUFRSLCBndHRfb2Zmc2V0ICYgR0VO OF9PQVRBSUxQVFJfTUFTSyk7Cj4gKwlpbnRlbF91bmNvcmVfd3JpdGUodW5jb3JlLCBHRU44X09B VEFJTFBUUiwgZ3R0X29mZnNldCAmIEdFTjhfT0FUQUlMUFRSX01BU0spOwo+ICAgCj4gICAJLyog TWFyayB0aGF0IHdlIG5lZWQgdXBkYXRlZCB0YWlsIHBvaW50ZXJzIHRvIHJlYWQgZnJvbS4uLiAq Lwo+ICAgCXN0cmVhbS0+b2FfYnVmZmVyLnRhaWxzWzBdLm9mZnNldCA9IElOVkFMSURfVEFJTF9Q VFI7Cj4gQEAgLTE0ODIsNyArMTQ3OCw2IEBAIHN0YXRpYyB2b2lkIGdlbjhfaW5pdF9vYV9idWZm ZXIoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHN0YXRpYyBpbnQgYWxsb2Nf b2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gICAJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJvOwo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiAgIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsK PiAgIAlpbnQgcmV0Owo+ICAgCj4gQEAgLTE0OTIsNyArMTQ4Nyw3IEBAIHN0YXRpYyBpbnQgYWxs b2Nfb2FfYnVmZmVyKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJQlVJTERf QlVHX09OX05PVF9QT1dFUl9PRl8yKE9BX0JVRkZFUl9TSVpFKTsKPiAgIAlCVUlMRF9CVUdfT04o T0FfQlVGRkVSX1NJWkUgPCBTWl8xMjhLIHx8IE9BX0JVRkZFUl9TSVpFID4gU1pfMTZNKTsKPiAg IAo+IC0JYm8gPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX3NobWVtKGRldl9wcml2LCBPQV9CVUZG RVJfU0laRSk7Cj4gKwlibyA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfc2htZW0oc3RyZWFtLT5w ZXJmLT5pOTE1LCBPQV9CVUZGRVJfU0laRSk7Cj4gICAJaWYgKElTX0VSUihibykpIHsKPiAgIAkJ RFJNX0VSUk9SKCJGYWlsZWQgdG8gYWxsb2NhdGUgT0EgYnVmZmVyXG4iKTsKPiAgIAkJcmV0dXJu IFBUUl9FUlIoYm8pOwo+IEBAIC0xNTMzLDcgKzE1MjgsNyBAQCBzdGF0aWMgaW50IGFsbG9jX29h X2J1ZmZlcihzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgCXJldHVybiByZXQ7 Cj4gICB9Cj4gICAKPiAtc3RhdGljIHZvaWQgY29uZmlnX29hX3JlZ3Moc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2LAo+ICtzdGF0aWMgdm9pZCBjb25maWdfb2FfcmVncyhzdHJ1Y3Qg aW50ZWxfdW5jb3JlICp1bmNvcmUsCj4gICAJCQkgICBjb25zdCBzdHJ1Y3QgaTkxNV9vYV9yZWcg KnJlZ3MsCj4gICAJCQkgICB1MzIgbl9yZWdzKQo+ICAgewo+IEBAIC0xNTQyLDcgKzE1MzcsNyBA QCBzdGF0aWMgdm9pZCBjb25maWdfb2FfcmVncyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2 X3ByaXYsCj4gICAJZm9yIChpID0gMDsgaSA8IG5fcmVnczsgaSsrKSB7Cj4gICAJCWNvbnN0IHN0 cnVjdCBpOTE1X29hX3JlZyAqcmVnID0gcmVncyArIGk7Cj4gICAKPiAtCQlJOTE1X1dSSVRFKHJl Zy0+YWRkciwgcmVnLT52YWx1ZSk7Cj4gKwkJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgcmVn LT5hZGRyLCByZWctPnZhbHVlKTsKPiAgIAl9Cj4gICB9Cj4gICAKPiBAQCAtMTU3NSw3ICsxNTcw LDcgQEAgc3RhdGljIHZvaWQgZGVsYXlfYWZ0ZXJfbXV4KHZvaWQpCj4gICAKPiAgIHN0YXRpYyBp bnQgaHN3X2VuYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0p Cj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRl dl9wcml2Owo+ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5j b3JlOwo+ICAgCWNvbnN0IHN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2FfY29uZmlnID0gc3RyZWFt LT5vYV9jb25maWc7Cj4gICAKPiAgIAkvKgo+IEBAIC0xNTg4LDE1ICsxNTgzLDE1IEBAIHN0YXRp YyBpbnQgaHN3X2VuYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJl YW0pCj4gICAJICogY291bnQgdGhlIGV2ZW50cyBmcm9tIG5vbi1yZW5kZXIgZG9tYWluLiBVbml0 IGxldmVsIGNsb2NrCj4gICAJICogZ2F0aW5nIGZvciBSQ1Mgc2hvdWxkIGFsc28gYmUgZGlzYWJs ZWQuCj4gICAJICovCj4gLQlJOTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RMLCAoSTkxNV9SRUFEKEdF TjdfTUlTQ0NQQ1RMKSAmCj4gLQkJCQkgICAgfkdFTjdfRE9QX0NMT0NLX0dBVEVfRU5BQkxFKSk7 Cj4gLQlJOTE1X1dSSVRFKEdFTjZfVUNHQ1RMMSwgKEk5MTVfUkVBRChHRU42X1VDR0NUTDEpIHwK PiAtCQkJCSAgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7Cj4gKwlpbnRlbF91bmNv cmVfcm13KHVuY29yZSwgR0VON19NSVNDQ1BDVEwsCj4gKwkJCSBHRU43X0RPUF9DTE9DS19HQVRF X0VOQUJMRSwgMCk7Cj4gKwlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgR0VONl9VQ0dDVEwxLAo+ ICsJCQkgMCwgR0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKTsKPiAgIAo+IC0JY29uZmln X29hX3JlZ3MoZGV2X3ByaXYsIG9hX2NvbmZpZy0+bXV4X3JlZ3MsIG9hX2NvbmZpZy0+bXV4X3Jl Z3NfbGVuKTsKPiArCWNvbmZpZ19vYV9yZWdzKHVuY29yZSwgb2FfY29uZmlnLT5tdXhfcmVncywg b2FfY29uZmlnLT5tdXhfcmVnc19sZW4pOwo+ICAgCWRlbGF5X2FmdGVyX211eCgpOwo+ICAgCj4g LQljb25maWdfb2FfcmVncyhkZXZfcHJpdiwgb2FfY29uZmlnLT5iX2NvdW50ZXJfcmVncywKPiAr CWNvbmZpZ19vYV9yZWdzKHVuY29yZSwgb2FfY29uZmlnLT5iX2NvdW50ZXJfcmVncywKPiAgIAkJ ICAgICAgIG9hX2NvbmZpZy0+Yl9jb3VudGVyX3JlZ3NfbGVuKTsKPiAgIAo+ICAgCXJldHVybiAw Owo+IEBAIC0xNjA0LDE1ICsxNTk5LDE0IEBAIHN0YXRpYyBpbnQgaHN3X2VuYWJsZV9tZXRyaWNf c2V0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAKPiAgIHN0YXRpYyB2b2lk IGhzd19kaXNhYmxlX21ldHJpY19zZXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkK PiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2 X3ByaXY7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNv cmU7Cj4gICAKPiAtCUk5MTVfV1JJVEUoR0VONl9VQ0dDVEwxLCAoSTkxNV9SRUFEKEdFTjZfVUNH Q1RMMSkgJgo+IC0JCQkJICB+R0VONl9DU1VOSVRfQ0xPQ0tfR0FURV9ESVNBQkxFKSk7Cj4gLQlJ OTE1X1dSSVRFKEdFTjdfTUlTQ0NQQ1RMLCAoSTkxNV9SRUFEKEdFTjdfTUlTQ0NQQ1RMKSB8Cj4g LQkJCQkgICAgR0VON19ET1BfQ0xPQ0tfR0FURV9FTkFCTEUpKTsKPiArCWludGVsX3VuY29yZV9y bXcodW5jb3JlLCBHRU42X1VDR0NUTDEsCj4gKwkJCSBHRU42X0NTVU5JVF9DTE9DS19HQVRFX0RJ U0FCTEUsIDApOwo+ICsJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUsIEdFTjdfTUlTQ0NQQ1RMLAo+ ICsJCQkgMCwgR0VON19ET1BfQ0xPQ0tfR0FURV9FTkFCTEUpOwo+ICAgCj4gLQlJOTE1X1dSSVRF KEdEVF9DSElDS0VOX0JJVFMsIChJOTE1X1JFQUQoR0RUX0NISUNLRU5fQklUUykgJgo+IC0JCQkJ ICAgICAgfkdUX05PQV9FTkFCTEUpKTsKPiArCWludGVsX3VuY29yZV9ybXcodW5jb3JlLCBHRFRf Q0hJQ0tFTl9CSVRTLCBHVF9OT0FfRU5BQkxFLCAwKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHUz MiBvYV9jb25maWdfZmxleF9yZWcoY29uc3Qgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9jb25m aWcsCj4gQEAgLTE2NDcsOSArMTY0MSw4IEBAIHN0YXRpYyB2b2lkCj4gICBnZW44X3VwZGF0ZV9y ZWdfc3RhdGVfdW5sb2NrZWQoY29uc3Qgc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+ICAgCQkJ ICAgICAgIGNvbnN0IHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gLQlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGNlLT5lbmdpbmUtPmk5MTU7Cj4gLQl1MzIg Y3R4X29hY3R4Y3RybCA9IGk5MTUtPnBlcmYuY3R4X29hY3R4Y3RybF9vZmZzZXQ7Cj4gLQl1MzIg Y3R4X2ZsZXhldTAgPSBpOTE1LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldDsKPiArCXUzMiBjdHhf b2FjdHhjdHJsID0gc3RyZWFtLT5wZXJmLT5jdHhfb2FjdHhjdHJsX29mZnNldDsKPiArCXUzMiBj dHhfZmxleGV1MCA9IHN0cmVhbS0+cGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0Owo+ICAgCS8qIFRo ZSBNTUlPIG9mZnNldHMgZm9yIEZsZXggRVUgcmVnaXN0ZXJzIGFyZW4ndCBjb250aWd1b3VzICov Cj4gICAJaTkxNV9yZWdfdCBmbGV4X3JlZ3NbXSA9IHsKPiAgIAkJRVVfUEVSRl9DTlRMMCwKPiBA QCAtMTY3Miw3ICsxNjY1LDggQEAgZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGNvbnN0 IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwKPiAgIAkJcmVnX3N0YXRlW2N0eF9mbGV4ZXUwICsg aSAqIDIgKyAxXSA9Cj4gICAJCQlvYV9jb25maWdfZmxleF9yZWcoc3RyZWFtLT5vYV9jb25maWcs IGZsZXhfcmVnc1tpXSk7Cj4gICAKPiAtCXJlZ19zdGF0ZVtDVFhfUl9QV1JfQ0xLX1NUQVRFXSA9 IGludGVsX3NzZXVfbWFrZV9ycGNzKGk5MTUsICZjZS0+c3NldSk7Cj4gKwlyZWdfc3RhdGVbQ1RY X1JfUFdSX0NMS19TVEFURV0gPQo+ICsJCWludGVsX3NzZXVfbWFrZV9ycGNzKGNlLT5lbmdpbmUt Pmk5MTUsICZjZS0+c3NldSk7Cj4gICB9Cj4gICAKPiAgIHN0cnVjdCBmbGV4IHsKPiBAQCAtMTgy Nyw5ICsxODIxLDkgQEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9jb250ZXh0KHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICBzdGF0aWMgaW50IGdlbjhfY29uZmlndXJlX2FsbF9j b250ZXh0cyhzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCQkJCSAgICAgICBj b25zdCBzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKm9hX2NvbmZpZykKPiAgIHsKPiAtCXN0cnVjdCBk cm1faTkxNV9wcml2YXRlICppOTE1ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gc3RyZWFtLT5wZXJmLT5pOTE1Owo+ICAgCS8qIFRoZSBNTUlP IG9mZnNldHMgZm9yIEZsZXggRVUgcmVnaXN0ZXJzIGFyZW4ndCBjb250aWd1b3VzICovCj4gLQlj b25zdCB1MzIgY3R4X2ZsZXhldTAgPSBpOTE1LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldDsKPiAr CWNvbnN0IHUzMiBjdHhfZmxleGV1MCA9IHN0cmVhbS0+cGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0 Owo+ICAgI2RlZmluZSBjdHhfZmxleGV1TihOKSAoY3R4X2ZsZXhldTAgKyAyICogKE4pICsgMSkK PiAgIAlzdHJ1Y3QgZmxleCByZWdzW10gPSB7Cj4gICAJCXsKPiBAQCAtMTgzOCw3ICsxODMyLDcg QEAgc3RhdGljIGludCBnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IGk5MTVfcGVy Zl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkJfSwKPiAgIAkJewo+ICAgCQkJR0VOOF9PQUNUWENPTlRS T0wsCj4gLQkJCWk5MTUtPnBlcmYuY3R4X29hY3R4Y3RybF9vZmZzZXQgKyAxLAo+ICsJCQlzdHJl YW0tPnBlcmYtPmN0eF9vYWN0eGN0cmxfb2Zmc2V0ICsgMSwKPiAgIAkJCSgoc3RyZWFtLT5wZXJp b2RfZXhwb25lbnQgPDwgR0VOOF9PQV9USU1FUl9QRVJJT0RfU0hJRlQpIHwKPiAgIAkJCSAoc3Ry ZWFtLT5wZXJpb2RpYyA/IEdFTjhfT0FfVElNRVJfRU5BQkxFIDogMCkgfAo+ICAgCQkJIEdFTjhf T0FfQ09VTlRFUl9SRVNVTUUpCj4gQEAgLTE5MjIsNyArMTkxNiw3IEBAIHN0YXRpYyBpbnQgZ2Vu OF9jb25maWd1cmVfYWxsX2NvbnRleHRzKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0s Cj4gICAKPiAgIHN0YXRpYyBpbnQgZ2VuOF9lbmFibGVfbWV0cmljX3NldChzdHJ1Y3QgaTkxNV9w ZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9IHN0cmVhbS0+Z3QtPnVuY29yZTsKPiAgIAljb25zdCBzdHJ1Y3QgaTkxNV9vYV9jb25maWcg Km9hX2NvbmZpZyA9IHN0cmVhbS0+b2FfY29uZmlnOwo+ICAgCWludCByZXQ7Cj4gICAKPiBAQCAt MTk0OSwxMCArMTk0MywxMCBAQCBzdGF0aWMgaW50IGdlbjhfZW5hYmxlX21ldHJpY19zZXQoc3Ry dWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIAkgKiBiZSByZWFkIGJhY2sgZnJvbSBh dXRvbWF0aWNhbGx5IHRyaWdnZXJlZCByZXBvcnRzLCBhcyBwYXJ0IG9mIHRoZQo+ICAgCSAqIFJQ VF9JRCBmaWVsZC4KPiAgIAkgKi8KPiAtCWlmIChJU19HRU5fUkFOR0UoZGV2X3ByaXYsIDksIDEx KSkgewo+IC0JCUk5MTVfV1JJVEUoR0VOOF9PQV9ERUJVRywKPiAtCQkJICAgX01BU0tFRF9CSVRf RU5BQkxFKEdFTjlfT0FfREVCVUdfRElTQUJMRV9DTEtfUkFUSU9fUkVQT1JUUyB8Cj4gLQkJCQkJ ICAgICAgR0VOOV9PQV9ERUJVR19JTkNMVURFX0NMS19SQVRJTykpOwo+ICsJaWYgKElTX0dFTl9S QU5HRShzdHJlYW0tPnBlcmYtPmk5MTUsIDksIDExKSkgewo+ICsJCWludGVsX3VuY29yZV93cml0 ZSh1bmNvcmUsIEdFTjhfT0FfREVCVUcsCj4gKwkJCQkgICBfTUFTS0VEX0JJVF9FTkFCTEUoR0VO OV9PQV9ERUJVR19ESVNBQkxFX0NMS19SQVRJT19SRVBPUlRTIHwKPiArCQkJCQkJICAgICAgR0VO OV9PQV9ERUJVR19JTkNMVURFX0NMS19SQVRJTykpOwo+ICAgCX0KPiAgIAo+ICAgCS8qCj4gQEAg LTE5NjQsMTAgKzE5NTgsMTAgQEAgc3RhdGljIGludCBnZW44X2VuYWJsZV9tZXRyaWNfc2V0KHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJu IHJldDsKPiAgIAo+IC0JY29uZmlnX29hX3JlZ3MoZGV2X3ByaXYsIG9hX2NvbmZpZy0+bXV4X3Jl Z3MsIG9hX2NvbmZpZy0+bXV4X3JlZ3NfbGVuKTsKPiArCWNvbmZpZ19vYV9yZWdzKHVuY29yZSwg b2FfY29uZmlnLT5tdXhfcmVncywgb2FfY29uZmlnLT5tdXhfcmVnc19sZW4pOwo+ICAgCWRlbGF5 X2FmdGVyX211eCgpOwo+ICAgCj4gLQljb25maWdfb2FfcmVncyhkZXZfcHJpdiwgb2FfY29uZmln LT5iX2NvdW50ZXJfcmVncywKPiArCWNvbmZpZ19vYV9yZWdzKHVuY29yZSwgb2FfY29uZmlnLT5i X2NvdW50ZXJfcmVncywKPiAgIAkJICAgICAgIG9hX2NvbmZpZy0+Yl9jb3VudGVyX3JlZ3NfbGVu KTsKPiAgIAo+ICAgCXJldHVybiAwOwo+IEBAIC0xOTc1LDMwICsxOTY5LDI4IEBAIHN0YXRpYyBp bnQgZ2VuOF9lbmFibGVfbWV0cmljX3NldChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFt KQo+ICAgCj4gICBzdGF0aWMgdm9pZCBnZW44X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1Y3QgaTkx NV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJpdjsKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVu Y29yZSA9IHN0cmVhbS0+Z3QtPnVuY29yZTsKPiAgIAo+ICAgCS8qIFJlc2V0IGFsbCBjb250ZXh0 cycgc2xpY2VzL3N1YnNsaWNlcyBjb25maWd1cmF0aW9ucy4gKi8KPiAgIAlnZW44X2NvbmZpZ3Vy ZV9hbGxfY29udGV4dHMoc3RyZWFtLCBOVUxMKTsKPiAgIAo+IC0JSTkxNV9XUklURShHRFRfQ0hJ Q0tFTl9CSVRTLCAoSTkxNV9SRUFEKEdEVF9DSElDS0VOX0JJVFMpICYKPiAtCQkJCSAgICAgIH5H VF9OT0FfRU5BQkxFKSk7Cj4gKwlpbnRlbF91bmNvcmVfcm13KHVuY29yZSwgR0RUX0NISUNLRU5f QklUUywgR1RfTk9BX0VOQUJMRSwgMCk7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIGdlbjEw X2Rpc2FibGVfbWV0cmljX3NldChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAg ewo+IC0Jc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gc3RyZWFtLT5kZXZfcHJp djsKPiArCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29yZSA9IHN0cmVhbS0+Z3QtPnVuY29yZTsK PiAgIAo+ICAgCS8qIFJlc2V0IGFsbCBjb250ZXh0cycgc2xpY2VzL3N1YnNsaWNlcyBjb25maWd1 cmF0aW9ucy4gKi8KPiAgIAlnZW44X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RyZWFtLCBOVUxM KTsKPiAgIAo+ICAgCS8qIE1ha2Ugc3VyZSB3ZSBkaXNhYmxlIG5vYSB0byBzYXZlIHBvd2VyLiAq Lwo+IC0JSTkxNV9XUklURShSUE1fQ09ORklHMSwKPiAtCQkgICBJOTE1X1JFQUQoUlBNX0NPTkZJ RzEpICYgfkdFTjEwX0dUX05PQV9FTkFCTEUpOwo+ICsJaW50ZWxfdW5jb3JlX3Jtdyh1bmNvcmUs IFJQTV9DT05GSUcxLCBHRU4xMF9HVF9OT0FfRU5BQkxFLCAwKTsKPiAgIH0KPiAgIAo+ICAgc3Rh dGljIHZvaWQgZ2VuN19vYV9lbmFibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkK PiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2 X3ByaXY7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNv cmU7Cj4gICAJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKmN0eCA9IHN0cmVhbS0+Y3R4Owo+ICAg CXUzMiBjdHhfaWQgPSBzdHJlYW0tPnNwZWNpZmljX2N0eF9pZDsKPiAgIAlib29sIHBlcmlvZGlj ID0gc3RyZWFtLT5wZXJpb2RpYzsKPiBAQCAtMjAxNiwxOSArMjAwOCwxOSBAQCBzdGF0aWMgdm9p ZCBnZW43X29hX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgCSAq Lwo+ICAgCWdlbjdfaW5pdF9vYV9idWZmZXIoc3RyZWFtKTsKPiAgIAo+IC0JSTkxNV9XUklURShH RU43X09BQ09OVFJPTCwKPiAtCQkgICAoY3R4X2lkICYgR0VON19PQUNPTlRST0xfQ1RYX01BU0sp IHwKPiAtCQkgICAocGVyaW9kX2V4cG9uZW50IDw8Cj4gLQkJICAgIEdFTjdfT0FDT05UUk9MX1RJ TUVSX1BFUklPRF9TSElGVCkgfAo+IC0JCSAgIChwZXJpb2RpYyA/IEdFTjdfT0FDT05UUk9MX1RJ TUVSX0VOQUJMRSA6IDApIHwKPiAtCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBHRU43X09BQ09OVFJP TF9GT1JNQVRfU0hJRlQpIHwKPiAtCQkgICAoY3R4ID8gR0VON19PQUNPTlRST0xfUEVSX0NUWF9F TkFCTEUgOiAwKSB8Cj4gLQkJICAgR0VON19PQUNPTlRST0xfRU5BQkxFKTsKPiArCWludGVsX3Vu Y29yZV93cml0ZSh1bmNvcmUsIEdFTjdfT0FDT05UUk9MLAo+ICsJCQkgICAoY3R4X2lkICYgR0VO N19PQUNPTlRST0xfQ1RYX01BU0spIHwKPiArCQkJICAgKHBlcmlvZF9leHBvbmVudCA8PAo+ICsJ CQkgICAgR0VON19PQUNPTlRST0xfVElNRVJfUEVSSU9EX1NISUZUKSB8Cj4gKwkJCSAgIChwZXJp b2RpYyA/IEdFTjdfT0FDT05UUk9MX1RJTUVSX0VOQUJMRSA6IDApIHwKPiArCQkJICAgKHJlcG9y dF9mb3JtYXQgPDwgR0VON19PQUNPTlRST0xfRk9STUFUX1NISUZUKSB8Cj4gKwkJCSAgIChjdHgg PyBHRU43X09BQ09OVFJPTF9QRVJfQ1RYX0VOQUJMRSA6IDApIHwKPiArCQkJICAgR0VON19PQUNP TlRST0xfRU5BQkxFKTsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHZvaWQgZ2VuOF9vYV9lbmFibGUo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlzdHJ1Y3QgaW50ZWxf dW5jb3JlICp1bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7Cj4gICAJdTMyIHJlcG9ydF9mb3Jt YXQgPSBzdHJlYW0tPm9hX2J1ZmZlci5mb3JtYXQ7Cj4gICAKPiAgIAkvKgo+IEBAIC0yMDQ3LDkg KzIwMzksOSBAQCBzdGF0aWMgdm9pZCBnZW44X29hX2VuYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0 cmVhbSAqc3RyZWFtKQo+ICAgCSAqIGZpbHRlcmluZyBhbmQgaW5zdGVhZCBmaWx0ZXIgb24gdGhl IGNwdSBiYXNlZCBvbiB0aGUgY29udGV4dC1pZAo+ICAgCSAqIGZpZWxkIG9mIHJlcG9ydHMKPiAg IAkgKi8KPiAtCUk5MTVfV1JJVEUoR0VOOF9PQUNPTlRST0wsIChyZXBvcnRfZm9ybWF0IDw8Cj4g LQkJCQkgICAgR0VOOF9PQV9SRVBPUlRfRk9STUFUX1NISUZUKSB8Cj4gLQkJCQkgICBHRU44X09B X0NPVU5URVJfRU5BQkxFKTsKPiArCWludGVsX3VuY29yZV93cml0ZSh1bmNvcmUsIEdFTjhfT0FD T05UUk9MLAo+ICsJCQkgICAocmVwb3J0X2Zvcm1hdCA8PCBHRU44X09BX1JFUE9SVF9GT1JNQVRf U0hJRlQpIHwKPiArCQkJICAgR0VOOF9PQV9DT1VOVEVSX0VOQUJMRSk7Cj4gICB9Cj4gICAKPiAg IC8qKgo+IEBAIC0yMDYzLDkgKzIwNTUsNyBAQCBzdGF0aWMgdm9pZCBnZW44X29hX2VuYWJsZShz dHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtKQo+ICAgICovCj4gICBzdGF0aWMgdm9pZCBp OTE1X29hX3N0cmVhbV9lbmFibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAg IHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3By aXY7Cj4gLQo+IC0JZGV2X3ByaXYtPnBlcmYub3BzLm9hX2VuYWJsZShzdHJlYW0pOwo+ICsJc3Ry ZWFtLT5wZXJmLT5vcHMub2FfZW5hYmxlKHN0cmVhbSk7Cj4gICAKPiAgIAlpZiAoc3RyZWFtLT5w ZXJpb2RpYykKPiAgIAkJaHJ0aW1lcl9zdGFydCgmc3RyZWFtLT5wb2xsX2NoZWNrX3RpbWVyLAo+ IEBAIC0yMDc1LDcgKzIwNjUsNyBAQCBzdGF0aWMgdm9pZCBpOTE1X29hX3N0cmVhbV9lbmFibGUo c3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIAo+ICAgc3RhdGljIHZvaWQgZ2Vu N19vYV9kaXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICB7Cj4gLQlz dHJ1Y3QgaW50ZWxfdW5jb3JlICp1bmNvcmUgPSAmc3RyZWFtLT5kZXZfcHJpdi0+dW5jb3JlOwo+ ICsJc3RydWN0IGludGVsX3VuY29yZSAqdW5jb3JlID0gc3RyZWFtLT5ndC0+dW5jb3JlOwo+ICAg Cj4gICAJaW50ZWxfdW5jb3JlX3dyaXRlKHVuY29yZSwgR0VON19PQUNPTlRST0wsIDApOwo+ICAg CWlmIChpbnRlbF93YWl0X2Zvcl9yZWdpc3Rlcih1bmNvcmUsCj4gQEAgLTIwODYsNyArMjA3Niw3 IEBAIHN0YXRpYyB2b2lkIGdlbjdfb2FfZGlzYWJsZShzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAq c3RyZWFtKQo+ICAgCj4gICBzdGF0aWMgdm9pZCBnZW44X29hX2Rpc2FibGUoc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF91bmNvcmUgKnVuY29y ZSA9ICZzdHJlYW0tPmRldl9wcml2LT51bmNvcmU7Cj4gKwlzdHJ1Y3QgaW50ZWxfdW5jb3JlICp1 bmNvcmUgPSBzdHJlYW0tPmd0LT51bmNvcmU7Cj4gICAKPiAgIAlpbnRlbF91bmNvcmVfd3JpdGUo dW5jb3JlLCBHRU44X09BQ09OVFJPTCwgMCk7Cj4gICAJaWYgKGludGVsX3dhaXRfZm9yX3JlZ2lz dGVyKHVuY29yZSwKPiBAQCAtMjEwNSw5ICsyMDk1LDcgQEAgc3RhdGljIHZvaWQgZ2VuOF9vYV9k aXNhYmxlKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gICAgKi8KPiAgIHN0YXRp YyB2b2lkIGk5MTVfb2Ffc3RyZWFtX2Rpc2FibGUoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0 cmVhbSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVh bS0+ZGV2X3ByaXY7Cj4gLQo+IC0JZGV2X3ByaXYtPnBlcmYub3BzLm9hX2Rpc2FibGUoc3RyZWFt KTsKPiArCXN0cmVhbS0+cGVyZi0+b3BzLm9hX2Rpc2FibGUoc3RyZWFtKTsKPiAgIAo+ICAgCWlm IChzdHJlYW0tPnBlcmlvZGljKQo+ICAgCQlocnRpbWVyX2NhbmNlbCgmc3RyZWFtLT5wb2xsX2No ZWNrX3RpbWVyKTsKPiBAQCAtMjE0NCw3ICsyMTMyLDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0 cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAJCQkgICAgICAg c3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0sCj4gICAJCQkgICAgICAgc3Ry dWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcykKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlzdHJ1Y3QgaTkxNV9w ZXJmICpwZXJmID0gc3RyZWFtLT5wZXJmOwo+ICAgCWludCBmb3JtYXRfc2l6ZTsKPiAgIAlpbnQg cmV0Owo+ICAgCj4gQEAgLTIxNTIsNyArMjE0MCw3IEBAIHN0YXRpYyBpbnQgaTkxNV9vYV9zdHJl YW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCSAqIHJlYXNvbiB0 aGVuIGRvbid0IGxldCB1c2Vyc3BhY2UgdHJ5IHRoZWlyIGx1Y2sgd2l0aCBjb25maWcKPiAgIAkg KiBJRHMKPiAgIAkgKi8KPiAtCWlmICghZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKSB7Cj4g KwlpZiAoIXBlcmYtPm1ldHJpY3Nfa29iaikgewo+ICAgCQlEUk1fREVCVUcoIk9BIG1ldHJpY3Mg d2VyZW4ndCBhZHZlcnRpc2VkIHZpYSBzeXNmc1xuIik7Cj4gICAJCXJldHVybiAtRUlOVkFMOwo+ ICAgCX0KPiBAQCAtMjE2Miw3ICsyMTUwLDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9p bml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAJCXJldHVybiAtRUlOVkFM Owo+ICAgCX0KPiAgIAo+IC0JaWYgKCFkZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19z ZXQpIHsKPiArCWlmICghcGVyZi0+b3BzLmVuYWJsZV9tZXRyaWNfc2V0KSB7Cj4gICAJCURSTV9E RUJVRygiT0EgdW5pdCBub3Qgc3VwcG9ydGVkXG4iKTsKPiAgIAkJcmV0dXJuIC1FTk9ERVY7Cj4g ICAJfQo+IEBAIC0yMTcxLDcgKzIxNTksNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffc3RyZWFtX2lu aXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkgKiBjb3VudGVyIHJlcG9y dHMgYW5kIG1hcnNoYWwgdG8gdGhlIGFwcHJvcHJpYXRlIGNsaWVudAo+ICAgCSAqIHdlIGN1cnJl bnRseSBvbmx5IGFsbG93IGV4Y2x1c2l2ZSBhY2Nlc3MKPiAgIAkgKi8KPiAtCWlmIChkZXZfcHJp di0+cGVyZi5leGNsdXNpdmVfc3RyZWFtKSB7Cj4gKwlpZiAocGVyZi0+ZXhjbHVzaXZlX3N0cmVh bSkgewo+ICAgCQlEUk1fREVCVUcoIk9BIHVuaXQgYWxyZWFkeSBpbiB1c2VcbiIpOwo+ICAgCQly ZXR1cm4gLUVCVVNZOwo+ICAgCX0KPiBAQCAtMjE4Myw3ICsyMTcxLDcgQEAgc3RhdGljIGludCBp OTE1X29hX3N0cmVhbV9pbml0KHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAK PiAgIAlzdHJlYW0tPnNhbXBsZV9zaXplID0gc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9wZXJmX3Jl Y29yZF9oZWFkZXIpOwo+ICAgCj4gLQlmb3JtYXRfc2l6ZSA9IGRldl9wcml2LT5wZXJmLm9hX2Zv cm1hdHNbcHJvcHMtPm9hX2Zvcm1hdF0uc2l6ZTsKPiArCWZvcm1hdF9zaXplID0gcGVyZi0+b2Ff Zm9ybWF0c1twcm9wcy0+b2FfZm9ybWF0XS5zaXplOwo+ICAgCj4gICAJc3RyZWFtLT5zYW1wbGVf ZmxhZ3MgfD0gU0FNUExFX09BX1JFUE9SVDsKPiAgIAlzdHJlYW0tPnNhbXBsZV9zaXplICs9IGZv cm1hdF9zaXplOwo+IEBAIC0yMTkzLDcgKzIxODEsNyBAQCBzdGF0aWMgaW50IGk5MTVfb2Ffc3Ry ZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSwKPiAgIAkJcmV0dXJuIC1F SU5WQUw7Cj4gICAKPiAgIAlzdHJlYW0tPm9hX2J1ZmZlci5mb3JtYXQgPQo+IC0JCWRldl9wcml2 LT5wZXJmLm9hX2Zvcm1hdHNbcHJvcHMtPm9hX2Zvcm1hdF0uZm9ybWF0Owo+ICsJCXBlcmYtPm9h X2Zvcm1hdHNbcHJvcHMtPm9hX2Zvcm1hdF0uZm9ybWF0Owo+ICAgCj4gICAJc3RyZWFtLT5wZXJp b2RpYyA9IHByb3BzLT5vYV9wZXJpb2RpYzsKPiAgIAlpZiAoc3RyZWFtLT5wZXJpb2RpYykKPiBA QCAtMjIwNyw3ICsyMTk1LDcgQEAgc3RhdGljIGludCBpOTE1X29hX3N0cmVhbV9pbml0KHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gICAJCX0KPiAgIAl9Cj4gICAKPiAtCXJldCA9 IGdldF9vYV9jb25maWcoZGV2X3ByaXYsIHByb3BzLT5tZXRyaWNzX3NldCwgJnN0cmVhbS0+b2Ff Y29uZmlnKTsKPiArCXJldCA9IGdldF9vYV9jb25maWcocGVyZiwgcHJvcHMtPm1ldHJpY3Nfc2V0 LCAmc3RyZWFtLT5vYV9jb25maWcpOwo+ICAgCWlmIChyZXQpIHsKPiAgIAkJRFJNX0RFQlVHKCJJ bnZhbGlkIE9BIGNvbmZpZyBpZD0laVxuIiwgcHJvcHMtPm1ldHJpY3Nfc2V0KTsKPiAgIAkJZ290 byBlcnJfY29uZmlnOwo+IEBAIC0yMjI1LDI3ICsyMjEzLDI3IEBAIHN0YXRpYyBpbnQgaTkxNV9v YV9zdHJlYW1faW5pdChzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVhbSAqc3RyZWFtLAo+ICAgCSAqICAg SW4gb3VyIGNhc2Ugd2UgYXJlIGV4cGVjdGluZyB0aGF0IHRha2luZyBwbSArIEZPUkNFV0FLRQo+ ICAgCSAqICAgcmVmZXJlbmNlcyB3aWxsIGVmZmVjdGl2ZWx5IGRpc2FibGUgUkM2Lgo+ICAgCSAq Lwo+IC0Jc3RyZWFtLT53YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoJmRldl9wcml2LT5y dW50aW1lX3BtKTsKPiAtCWludGVsX3VuY29yZV9mb3JjZXdha2VfZ2V0KCZkZXZfcHJpdi0+dW5j b3JlLCBGT1JDRVdBS0VfQUxMKTsKPiArCXN0cmVhbS0+d2FrZXJlZiA9IGludGVsX3J1bnRpbWVf cG1fZ2V0KHN0cmVhbS0+Z3QtPnVuY29yZS0+cnBtKTsKPiArCWludGVsX3VuY29yZV9mb3JjZXdh a2VfZ2V0KHN0cmVhbS0+Z3QtPnVuY29yZSwgRk9SQ0VXQUtFX0FMTCk7Cj4gICAKPiAgIAlyZXQg PSBhbGxvY19vYV9idWZmZXIoc3RyZWFtKTsKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIGVycl9v YV9idWZfYWxsb2M7Cj4gICAKPiAtCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZkZXZfcHJpdi0+ZHJtKTsKPiArCXJldCA9IGk5MTVfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZzdHJlYW0tPmd0LT5pOTE1LT5kcm0pOwo+ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gZXJyX2xv Y2s7Cj4gICAKPiAgIAlzdHJlYW0tPm9wcyA9ICZpOTE1X29hX3N0cmVhbV9vcHM7Cj4gLQlkZXZf cHJpdi0+cGVyZi5leGNsdXNpdmVfc3RyZWFtID0gc3RyZWFtOwo+ICsJcGVyZi0+ZXhjbHVzaXZl X3N0cmVhbSA9IHN0cmVhbTsKPiAgIAo+IC0JcmV0ID0gZGV2X3ByaXYtPnBlcmYub3BzLmVuYWJs ZV9tZXRyaWNfc2V0KHN0cmVhbSk7Cj4gKwlyZXQgPSBwZXJmLT5vcHMuZW5hYmxlX21ldHJpY19z ZXQoc3RyZWFtKTsKPiAgIAlpZiAocmV0KSB7Cj4gICAJCURSTV9ERUJVRygiVW5hYmxlIHRvIGVu YWJsZSBtZXRyaWMgc2V0XG4iKTsKPiAgIAkJZ290byBlcnJfZW5hYmxlOwo+ICAgCX0KPiAgIAo+ IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwltdXRleF91 bmxvY2soJnN0cmVhbS0+Z3QtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4gICAJaHJ0 aW1lcl9pbml0KCZzdHJlYW0tPnBvbGxfY2hlY2tfdGltZXIsCj4gICAJCSAgICAgQ0xPQ0tfTU9O T1RPTklDLCBIUlRJTUVSX01PREVfUkVMKTsKPiBAQCAtMjI1NiwxOCArMjI0NCwxOCBAQCBzdGF0 aWMgaW50IGk5MTVfb2Ffc3RyZWFtX2luaXQoc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVh bSwKPiAgIAlyZXR1cm4gMDsKPiAgIAo+ICAgZXJyX2VuYWJsZToKPiAtCWRldl9wcml2LT5wZXJm LmV4Y2x1c2l2ZV9zdHJlYW0gPSBOVUxMOwo+IC0JZGV2X3ByaXYtPnBlcmYub3BzLmRpc2FibGVf bWV0cmljX3NldChzdHJlYW0pOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwlwZXJmLT5leGNsdXNpdmVfc3RyZWFtID0gTlVMTDsKPiArCXBlcmYtPm9w cy5kaXNhYmxlX21ldHJpY19zZXQoc3RyZWFtKTsKPiArCW11dGV4X3VubG9jaygmc3RyZWFtLT5n dC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAKPiAgIGVycl9sb2NrOgo+ICAgCWZyZWVf b2FfYnVmZmVyKHN0cmVhbSk7Cj4gICAKPiAgIGVycl9vYV9idWZfYWxsb2M6Cj4gLQlwdXRfb2Ff Y29uZmlnKGRldl9wcml2LCBzdHJlYW0tPm9hX2NvbmZpZyk7Cj4gKwlwdXRfb2FfY29uZmlnKHN0 cmVhbS0+b2FfY29uZmlnKTsKPiAgIAo+IC0JaW50ZWxfdW5jb3JlX2ZvcmNld2FrZV9wdXQoJmRl dl9wcml2LT51bmNvcmUsIEZPUkNFV0FLRV9BTEwpOwo+IC0JaW50ZWxfcnVudGltZV9wbV9wdXQo JmRldl9wcml2LT5ydW50aW1lX3BtLCBzdHJlYW0tPndha2VyZWYpOwo+ICsJaW50ZWxfdW5jb3Jl X2ZvcmNld2FrZV9wdXQoc3RyZWFtLT5ndC0+dW5jb3JlLCBGT1JDRVdBS0VfQUxMKTsKPiArCWlu dGVsX3J1bnRpbWVfcG1fcHV0KHN0cmVhbS0+Z3QtPnVuY29yZS0+cnBtLCBzdHJlYW0tPndha2Vy ZWYpOwo+ICAgCj4gICBlcnJfY29uZmlnOgo+ICAgCWlmIChzdHJlYW0tPmN0eCkKPiBAQCAtMjM1 OSw3ICsyMzQ3LDcgQEAgc3RhdGljIHNzaXplX3QgaTkxNV9wZXJmX3JlYWQoc3RydWN0IGZpbGUg KmZpbGUsCj4gICAJCQkgICAgICBsb2ZmX3QgKnBwb3MpCj4gICB7Cj4gICAJc3RydWN0IGk5MTVf cGVyZl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2X3ByaXY7Cj4gKwlzdHJ1Y3QgaTkx NV9wZXJmICpwZXJmID0gc3RyZWFtLT5wZXJmOwo+ICAgCXNzaXplX3QgcmV0Owo+ICAgCj4gICAJ LyogVG8gZW5zdXJlIGl0J3MgaGFuZGxlZCBjb25zaXN0ZW50bHkgd2Ugc2ltcGx5IHRyZWF0IGFs bCByZWFkcyBvZiBhCj4gQEAgLTIzODIsMTUgKzIzNzAsMTUgQEAgc3RhdGljIHNzaXplX3QgaTkx NV9wZXJmX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsCj4gICAJCQlpZiAocmV0KQo+ICAgCQkJCXJl dHVybiByZXQ7Cj4gICAKPiAtCQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7Cj4g KwkJCW11dGV4X2xvY2soJnBlcmYtPmxvY2spOwo+ICAgCQkJcmV0ID0gaTkxNV9wZXJmX3JlYWRf bG9ja2VkKHN0cmVhbSwgZmlsZSwKPiAgIAkJCQkJCSAgICBidWYsIGNvdW50LCBwcG9zKTsKPiAt CQkJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiArCQkJbXV0ZXhfdW5sb2Nr KCZwZXJmLT5sb2NrKTsKPiAgIAkJfSB3aGlsZSAocmV0ID09IC1FQUdBSU4pOwo+ICAgCX0gZWxz ZSB7Cj4gLQkJbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBlcmYubG9jayk7Cj4gKwkJbXV0ZXhfbG9j aygmcGVyZi0+bG9jayk7Cj4gICAJCXJldCA9IGk5MTVfcGVyZl9yZWFkX2xvY2tlZChzdHJlYW0s IGZpbGUsIGJ1ZiwgY291bnQsIHBwb3MpOwo+IC0JCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBl cmYubG9jayk7Cj4gKwkJbXV0ZXhfdW5sb2NrKCZwZXJmLT5sb2NrKTsKPiAgIAl9Cj4gICAKPiAg IAkvKiBXZSBhbGxvdyB0aGUgcG9sbCBjaGVja2luZyB0byBzb21ldGltZXMgcmVwb3J0IGZhbHNl IHBvc2l0aXZlIEVQT0xMSU4KPiBAQCAtMjQyOCw3ICsyNDE2LDYgQEAgc3RhdGljIGVudW0gaHJ0 aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhydGltZXIgKmhydGlt ZXIpCj4gICAKPiAgIC8qKgo+ICAgICogaTkxNV9wZXJmX3BvbGxfbG9ja2VkIC0gcG9sbF93YWl0 KCkgd2l0aCBhIHN1aXRhYmxlIHdhaXQgcXVldWUgZm9yIHN0cmVhbQo+IC0gKiBAZGV2X3ByaXY6 IGk5MTUgZGV2aWNlIGluc3RhbmNlCj4gICAgKiBAc3RyZWFtOiBBbiBpOTE1IHBlcmYgc3RyZWFt Cj4gICAgKiBAZmlsZTogQW4gaTkxNSBwZXJmIHN0cmVhbSBmaWxlCj4gICAgKiBAd2FpdDogcG9s bCgpIHN0YXRlIHRhYmxlCj4gQEAgLTI0MzcsMTUgKzI0MjQsMTQgQEAgc3RhdGljIGVudW0gaHJ0 aW1lcl9yZXN0YXJ0IG9hX3BvbGxfY2hlY2tfdGltZXJfY2Ioc3RydWN0IGhydGltZXIgKmhydGlt ZXIpCj4gICAgKiAmaTkxNV9wZXJmX3N0cmVhbV9vcHMtPnBvbGxfd2FpdCB0byBjYWxsIHBvbGxf d2FpdCgpIHdpdGggYSB3YWl0IHF1ZXVlIHRoYXQKPiAgICAqIHdpbGwgYmUgd29rZW4gZm9yIG5l dyBzdHJlYW0gZGF0YS4KPiAgICAqCj4gLSAqIE5vdGU6IFRoZSAmZHJtX2k5MTVfcHJpdmF0ZS0+ cGVyZi5sb2NrIG11dGV4IGhhcyBiZWVuIHRha2VuIHRvIHNlcmlhbGl6ZQo+ICsgKiBOb3RlOiBU aGUgJnBlcmYtPmxvY2sgbXV0ZXggaGFzIGJlZW4gdGFrZW4gdG8gc2VyaWFsaXplCj4gICAgKiB3 aXRoIGFueSBub24tZmlsZS1vcGVyYXRpb24gZHJpdmVyIGhvb2tzLgo+ICAgICoKPiAgICAqIFJl dHVybnM6IGFueSBwb2xsIGV2ZW50cyB0aGF0IGFyZSByZWFkeSB3aXRob3V0IHNsZWVwaW5nCj4g ICAgKi8KPiAtc3RhdGljIF9fcG9sbF90IGk5MTVfcGVyZl9wb2xsX2xvY2tlZChzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJICBzdHJ1Y3QgaTkxNV9wZXJmX3N0cmVh bSAqc3RyZWFtLAo+IC0JCQkJCSAgc3RydWN0IGZpbGUgKmZpbGUsCj4gLQkJCQkJICBwb2xsX3Rh YmxlICp3YWl0KQo+ICtzdGF0aWMgX19wb2xsX3QgaTkxNV9wZXJmX3BvbGxfbG9ja2VkKHN0cnVj dCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0sCj4gKwkJCQkgICAgICBzdHJ1Y3QgZmlsZSAqZmls ZSwKPiArCQkJCSAgICAgIHBvbGxfdGFibGUgKndhaXQpCj4gICB7Cj4gICAJX19wb2xsX3QgZXZl bnRzID0gMDsKPiAgIAo+IEBAIC0yNDc5LDEyICsyNDY1LDEyIEBAIHN0YXRpYyBfX3BvbGxfdCBp OTE1X3BlcmZfcG9sbF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICAgc3RhdGljIF9fcG9sbF90IGk5MTVfcGVyZl9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xs X3RhYmxlICp3YWl0KQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0g PSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9IHN0cmVh bS0+cGVyZjsKPiAgIAlfX3BvbGxfdCByZXQ7Cj4gICAKPiAtCW11dGV4X2xvY2soJmRldl9wcml2 LT5wZXJmLmxvY2spOwo+IC0JcmV0ID0gaTkxNV9wZXJmX3BvbGxfbG9ja2VkKGRldl9wcml2LCBz dHJlYW0sIGZpbGUsIHdhaXQpOwo+IC0JbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2Nr KTsKPiArCW11dGV4X2xvY2soJnBlcmYtPmxvY2spOwo+ICsJcmV0ID0gaTkxNV9wZXJmX3BvbGxf bG9ja2VkKHN0cmVhbSwgZmlsZSwgd2FpdCk7Cj4gKwltdXRleF91bmxvY2soJnBlcmYtPmxvY2sp Owo+ICAgCj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiBAQCAtMjU0Myw3ICsyNTI5LDcgQEAgc3Rh dGljIHZvaWQgaTkxNV9wZXJmX2Rpc2FibGVfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3RyZWFt ICpzdHJlYW0pCj4gICAgKiBAY21kOiB0aGUgaW9jdGwgcmVxdWVzdAo+ICAgICogQGFyZzogdGhl IGlvY3RsIGRhdGEKPiAgICAqCj4gLSAqIE5vdGU6IFRoZSAmZHJtX2k5MTVfcHJpdmF0ZS0+cGVy Zi5sb2NrIG11dGV4IGhhcyBiZWVuIHRha2VuIHRvIHNlcmlhbGl6ZQo+ICsgKiBOb3RlOiBUaGUg JnBlcmYtPmxvY2sgbXV0ZXggaGFzIGJlZW4gdGFrZW4gdG8gc2VyaWFsaXplCj4gICAgKiB3aXRo IGFueSBub24tZmlsZS1vcGVyYXRpb24gZHJpdmVyIGhvb2tzLgo+ICAgICoKPiAgICAqIFJldHVy bnM6IHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuIFJldHVybnMgLUVJ TlZBTCBmb3IKPiBAQCAtMjU4MSwxMiArMjU2NywxMiBAQCBzdGF0aWMgbG9uZyBpOTE1X3BlcmZf aW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCj4gICAJCQkgICAgdW5zaWduZWQgbG9uZyBhcmcpCj4g ICB7Cj4gICAJc3RydWN0IGk5MTVfcGVyZl9zdHJlYW0gKnN0cmVhbSA9IGZpbGUtPnByaXZhdGVf ZGF0YTsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHN0cmVhbS0+ZGV2 X3ByaXY7Cj4gKwlzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmID0gc3RyZWFtLT5wZXJmOwo+ICAgCWxv bmcgcmV0Owo+ICAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2NrKTsKPiArCW11 dGV4X2xvY2soJnBlcmYtPmxvY2spOwo+ICAgCXJldCA9IGk5MTVfcGVyZl9pb2N0bF9sb2NrZWQo c3RyZWFtLCBjbWQsIGFyZyk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2sp Owo+ICsJbXV0ZXhfdW5sb2NrKCZwZXJmLT5sb2NrKTsKPiAgIAo+ICAgCXJldHVybiByZXQ7Cj4g ICB9Cj4gQEAgLTI1OTgsNyArMjU4NCw3IEBAIHN0YXRpYyBsb25nIGk5MTVfcGVyZl9pb2N0bChz dHJ1Y3QgZmlsZSAqZmlsZSwKPiAgICAqIEZyZWVzIGFsbCByZXNvdXJjZXMgYXNzb2NpYXRlZCB3 aXRoIHRoZSBnaXZlbiBpOTE1IHBlcmYgQHN0cmVhbSwgZGlzYWJsaW5nCj4gICAgKiBhbnkgYXNz b2NpYXRlZCBkYXRhIGNhcHR1cmUgaW4gdGhlIHByb2Nlc3MuCj4gICAgKgo+IC0gKiBOb3RlOiBU aGUgJmRybV9pOTE1X3ByaXZhdGUtPnBlcmYubG9jayBtdXRleCBoYXMgYmVlbiB0YWtlbiB0byBz ZXJpYWxpemUKPiArICogTm90ZTogVGhlICZwZXJmLT5sb2NrIG11dGV4IGhhcyBiZWVuIHRha2Vu IHRvIHNlcmlhbGl6ZQo+ICAgICogd2l0aCBhbnkgbm9uLWZpbGUtb3BlcmF0aW9uIGRyaXZlciBo b29rcy4KPiAgICAqLwo+ICAgc3RhdGljIHZvaWQgaTkxNV9wZXJmX2Rlc3Ryb3lfbG9ja2VkKHN0 cnVjdCBpOTE1X3BlcmZfc3RyZWFtICpzdHJlYW0pCj4gQEAgLTI2MzEsMTQgKzI2MTcsMTQgQEAg c3RhdGljIHZvaWQgaTkxNV9wZXJmX2Rlc3Ryb3lfbG9ja2VkKHN0cnVjdCBpOTE1X3BlcmZfc3Ry ZWFtICpzdHJlYW0pCj4gICBzdGF0aWMgaW50IGk5MTVfcGVyZl9yZWxlYXNlKHN0cnVjdCBpbm9k ZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3BlcmZf c3RyZWFtICpzdHJlYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBzdHJlYW0tPmRldl9wcml2Owo+ICsJc3RydWN0IGk5MTVfcGVy ZiAqcGVyZiA9IHN0cmVhbS0+cGVyZjsKPiAgIAo+IC0JbXV0ZXhfbG9jaygmZGV2X3ByaXYtPnBl cmYubG9jayk7Cj4gKwltdXRleF9sb2NrKCZwZXJmLT5sb2NrKTsKPiAgIAlpOTE1X3BlcmZfZGVz dHJveV9sb2NrZWQoc3RyZWFtKTsKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubG9j ayk7Cj4gKwltdXRleF91bmxvY2soJnBlcmYtPmxvY2spOwo+ICAgCj4gICAJLyogUmVsZWFzZSB0 aGUgcmVmZXJlbmNlIHRoZSBwZXJmIHN0cmVhbSBrZXB0IG9uIHRoZSBkcml2ZXIuICovCj4gLQlk cm1fZGV2X3B1dCgmZGV2X3ByaXYtPmRybSk7Cj4gKwlkcm1fZGV2X3B1dCgmcGVyZi0+aTkxNS0+ ZHJtKTsKPiAgIAo+ICAgCXJldHVybiAwOwo+ICAgfQo+IEBAIC0yNjYwLDcgKzI2NDYsNyBAQCBz dGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ICAgCj4gICAvKioK PiAgICAqIGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZCAtIERSTSBpb2N0bCgpIGZvciB1c2Vy c3BhY2UgdG8gb3BlbiBhIHN0cmVhbSBGRAo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2aWNlIGlu c3RhbmNlCj4gKyAqIEBwZXJmOiBpOTE1IHBlcmYgaW5zdGFuY2UKPiAgICAqIEBwYXJhbTogVGhl IG9wZW4gcGFyYW1ldGVycyBwYXNzZWQgdG8gJ0RSTV9JOTE1X1BFUkZfT1BFTmAKPiAgICAqIEBw cm9wczogaW5kaXZpZHVhbGx5IHZhbGlkYXRlZCB1NjQgcHJvcGVydHkgdmFsdWUgcGFpcnMKPiAg ICAqIEBmaWxlOiBkcm0gZmlsZQo+IEBAIC0yNjY4LDcgKzI2NTQsNyBAQCBzdGF0aWMgY29uc3Qg c3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzID0gewo+ICAgICogU2VlIGk5MTVfcGVyZl9pb2N0 bF9vcGVuKCkgZm9yIGludGVyZmFjZSBkZXRhaWxzLgo+ICAgICoKPiAgICAqIEltcGxlbWVudHMg ZnVydGhlciBzdHJlYW0gY29uZmlnIHZhbGlkYXRpb24gYW5kIHN0cmVhbSBpbml0aWFsaXphdGlv biBvbgo+IC0gKiBiZWhhbGYgb2YgaTkxNV9wZXJmX29wZW5faW9jdGwoKSB3aXRoIHRoZSAmZHJt X2k5MTVfcHJpdmF0ZS0+cGVyZi5sb2NrIG11dGV4Cj4gKyAqIGJlaGFsZiBvZiBpOTE1X3BlcmZf b3Blbl9pb2N0bCgpIHdpdGggdGhlICZwZXJmLT5sb2NrIG11dGV4Cj4gICAgKiB0YWtlbiB0byBz ZXJpYWxpemUgd2l0aCBhbnkgbm9uLWZpbGUtb3BlcmF0aW9uIGRyaXZlciBob29rcy4KPiAgICAq Cj4gICAgKiBOb3RlOiBhdCB0aGlzIHBvaW50IHRoZSBAcHJvcHMgaGF2ZSBvbmx5IGJlZW4gdmFs aWRhdGVkIGluIGlzb2xhdGlvbiBhbmQKPiBAQCAtMjY4Myw3ICsyNjY5LDcgQEAgc3RhdGljIGNv bnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZm9wcyA9IHsKPiAgICAqIFJldHVybnM6IHplcm8g b24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUuCj4gICAgKi8KPiAgIHN0YXRpYyBp bnQKPiAtaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiwKPiAraTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBpOTE1X3Bl cmYgKnBlcmYsCj4gICAJCQkgICAgc3RydWN0IGRybV9pOTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFy YW0sCj4gICAJCQkgICAgc3RydWN0IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcywKPiAgIAkJ CSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gQEAgLTI3MjIsNyArMjcwOCw3IEBAIGk5MTVf cGVyZl9vcGVuX2lvY3RsX2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gICAJICogTUlfUkVQT1JUX1BFUkZfQ09VTlQgY29tbWFuZHMgYW5kIHNvIGNvbnNpZGVyIGl0 IGEgcHJpdmlsZWdlZCBvcCB0bwo+ICAgCSAqIGVuYWJsZSB0aGUgT0EgdW5pdCBieSBkZWZhdWx0 Lgo+ICAgCSAqLwo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpICYmIHNwZWNpZmljX2N0eCkK PiArCWlmIChJU19IQVNXRUxMKHBlcmYtPmk5MTUpICYmIHNwZWNpZmljX2N0eCkKPiAgIAkJcHJp dmlsZWdlZF9vcCA9IGZhbHNlOwo+ICAgCj4gICAJLyogU2ltaWxhciB0byBwZXJmJ3Mga2VybmVs LnBlcmZfcGFyYW5vaWRfY3B1IHN5c2N0bCBvcHRpb24KPiBAQCAtMjc0Myw3ICsyNzI5LDggQEAg aTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPiAgIAkJZ290byBlcnJfY3R4Owo+ICAgCX0KPiAgIAo+IC0Jc3RyZWFtLT5kZXZfcHJp diA9IGRldl9wcml2Owo+ICsJc3RyZWFtLT5wZXJmID0gcGVyZjsKPiArCXN0cmVhbS0+Z3QgPSAm cGVyZi0+aTkxNS0+Z3Q7Cj4gICAJc3RyZWFtLT5jdHggPSBzcGVjaWZpY19jdHg7Cj4gICAKPiAg IAlyZXQgPSBpOTE1X29hX3N0cmVhbV9pbml0KHN0cmVhbSwgcGFyYW0sIHByb3BzKTsKPiBAQCAt Mjc1OSw3ICsyNzQ2LDcgQEAgaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJZ290byBlcnJfZmxhZ3M7Cj4gICAJfQo+ICAg Cj4gLQlsaXN0X2FkZCgmc3RyZWFtLT5saW5rLCAmZGV2X3ByaXYtPnBlcmYuc3RyZWFtcyk7Cj4g KwlsaXN0X2FkZCgmc3RyZWFtLT5saW5rLCAmcGVyZi0+c3RyZWFtcyk7Cj4gICAKPiAgIAlpZiAo cGFyYW0tPmZsYWdzICYgSTkxNV9QRVJGX0ZMQUdfRkRfQ0xPRVhFQykKPiAgIAkJZl9mbGFncyB8 PSBPX0NMT0VYRUM7Cj4gQEAgLTI3NzgsNyArMjc2NSw3IEBAIGk5MTVfcGVyZl9vcGVuX2lvY3Rs X2xvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJLyogVGFrZSBh IHJlZmVyZW5jZSBvbiB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBrZXB0IHdpdGggc3RyZWFtX2Zk Cj4gICAJICogdW50aWwgaXRzIHJlbGVhc2UuCj4gICAJICovCj4gLQlkcm1fZGV2X2dldCgmZGV2 X3ByaXYtPmRybSk7Cj4gKwlkcm1fZGV2X2dldCgmcGVyZi0+aTkxNS0+ZHJtKTsKPiAgIAo+ICAg CXJldHVybiBzdHJlYW1fZmQ7Cj4gICAKPiBAQCAtMjc5NiwxNSArMjc4MywxNSBAQCBpOTE1X3Bl cmZfb3Blbl9pb2N0bF9sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHU2NCBvYV9leHBvbmVudF90b19u cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIGludCBleHBvbmVudCkKPiArc3Rh dGljIHU2NCBvYV9leHBvbmVudF90b19ucyhzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCBpbnQgZXhw b25lbnQpCj4gICB7Cj4gICAJcmV0dXJuIGRpdjY0X3U2NCgxMDAwMDAwMDAwVUxMICogKDJVTEwg PDwgZXhwb25lbnQpLAo+IC0JCQkgMTAwMFVMTCAqIFJVTlRJTUVfSU5GTyhkZXZfcHJpdiktPmNz X3RpbWVzdGFtcF9mcmVxdWVuY3lfa2h6KTsKPiArCQkJIDEwMDBVTEwgKiBSVU5USU1FX0lORk8o cGVyZi0+aTkxNSktPmNzX3RpbWVzdGFtcF9mcmVxdWVuY3lfa2h6KTsKPiAgIH0KPiAgIAo+ICAg LyoqCj4gICAgKiByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQgLSB2YWxpZGF0ZSArIGNvcHkgdXNl cnNwYWNlIHN0cmVhbSBvcGVuIHByb3BlcnRpZXMKPiAtICogQGRldl9wcml2OiBpOTE1IGRldmlj ZSBpbnN0YW5jZQo+ICsgKiBAcGVyZjogaTkxNSBwZXJmIGluc3RhbmNlCj4gICAgKiBAdXByb3Bz OiBUaGUgYXJyYXkgb2YgdTY0IGtleSB2YWx1ZSBwYWlycyBnaXZlbiBieSB1c2Vyc3BhY2UKPiAg ICAqIEBuX3Byb3BzOiBUaGUgbnVtYmVyIG9mIGtleSB2YWx1ZSBwYWlycyBleHBlY3RlZCBpbiBA dXByb3BzCj4gICAgKiBAcHJvcHM6IFRoZSBzdHJlYW0gY29uZmlndXJhdGlvbiBidWlsdCB1cCB3 aGlsZSB2YWxpZGF0aW5nIHByb3BlcnRpZXMKPiBAQCAtMjgxNyw3ICsyODA0LDcgQEAgc3RhdGlj IHU2NCBvYV9leHBvbmVudF90b19ucyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs IGludCBleHBvbmVudCkKPiAgICAqIHdlIHNob3VsZG4ndCB2YWxpZGF0ZSBvciBhc3N1bWUgYW55 dGhpbmcgYWJvdXQgb3JkZXJpbmcgaGVyZS4gVGhpcyBkb2Vzbid0Cj4gICAgKiBydWxlIG91dCBk ZWZpbmluZyBuZXcgcHJvcGVydGllcyB3aXRoIG9yZGVyaW5nIHJlcXVpcmVtZW50cyBpbiB0aGUg ZnV0dXJlLgo+ICAgICovCj4gLXN0YXRpYyBpbnQgcmVhZF9wcm9wZXJ0aWVzX3VubG9ja2VkKHN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiArc3RhdGljIGludCByZWFkX3Byb3Bl cnRpZXNfdW5sb2NrZWQoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwKPiAgIAkJCQkgICAgdTY0IF9f dXNlciAqdXByb3BzLAo+ICAgCQkJCSAgICB1MzIgbl9wcm9wcywKPiAgIAkJCQkgICAgc3RydWN0 IHBlcmZfb3Blbl9wcm9wZXJ0aWVzICpwcm9wcykKPiBAQCAtMjg4Myw3ICsyODcwLDcgQEAgc3Rh dGljIGludCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAgCQkJCQkgIHZhbHVlKTsKPiAgIAkJCQlyZXR1cm4gLUVJTlZBTDsKPiAg IAkJCX0KPiAtCQkJaWYgKCFkZXZfcHJpdi0+cGVyZi5vYV9mb3JtYXRzW3ZhbHVlXS5zaXplKSB7 Cj4gKwkJCWlmICghcGVyZi0+b2FfZm9ybWF0c1t2YWx1ZV0uc2l6ZSkgewo+ICAgCQkJCURSTV9E RUJVRygiVW5zdXBwb3J0ZWQgT0EgcmVwb3J0IGZvcm1hdCAlbGx1XG4iLAo+ICAgCQkJCQkgIHZh bHVlKTsKPiAgIAkJCQlyZXR1cm4gLUVJTlZBTDsKPiBAQCAtMjkwNCw3ICsyODkxLDcgQEAgc3Rh dGljIGludCByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAgCQkJICovCj4gICAKPiAgIAkJCUJVSUxEX0JVR19PTihzaXplb2Yob2Ff cGVyaW9kKSAhPSA4KTsKPiAtCQkJb2FfcGVyaW9kID0gb2FfZXhwb25lbnRfdG9fbnMoZGV2X3By aXYsIHZhbHVlKTsKPiArCQkJb2FfcGVyaW9kID0gb2FfZXhwb25lbnRfdG9fbnMocGVyZiwgdmFs dWUpOwo+ICAgCj4gICAJCQkvKiBUaGlzIGNoZWNrIGlzIHByaW1hcmlseSB0byBlbnN1cmUgdGhh dCBvYV9wZXJpb2QgPD0KPiAgIAkJCSAqIFVJTlQzMl9NQVggKGJlZm9yZSBwYXNzaW5nIHRvIGRv X2RpdiB3aGljaCBvbmx5Cj4gQEAgLTI5NTgsNyArMjk0NSw3IEBAIHN0YXRpYyBpbnQgcmVhZF9w cm9wZXJ0aWVzX3VubG9ja2VkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAg ICAqIG11dGV4IHRvIGF2b2lkIGFuIGF3a3dhcmQgbG9ja2RlcCB3aXRoIG1tYXBfc2VtLgo+ICAg ICoKPiAgICAqIE1vc3Qgb2YgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGhhbmRsZWQg YnkKPiAtICogaTkxNV9wZXJmX29wZW5faW9jdGxfbG9ja2VkKCkgYWZ0ZXIgdGFraW5nIHRoZSAm ZHJtX2k5MTVfcHJpdmF0ZS0+cGVyZi5sb2NrCj4gKyAqIGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xv Y2tlZCgpIGFmdGVyIHRha2luZyB0aGUgJnBlcmYtPmxvY2sKPiAgICAqIG11dGV4IGZvciBzZXJp YWxpemluZyB3aXRoIGFueSBub24tZmlsZS1vcGVyYXRpb24gZHJpdmVyIGhvb2tzLgo+ICAgICoK PiAgICAqIFJldHVybjogQSBuZXdseSBvcGVuZWQgaTkxNSBQZXJmIHN0cmVhbSBmaWxlIGRlc2Ny aXB0b3Igb3IgbmVnYXRpdmUKPiBAQCAtMjk2NywxMyArMjk1NCwxMyBAQCBzdGF0aWMgaW50IHJl YWRfcHJvcGVydGllc191bmxvY2tlZChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYs Cj4gICBpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9p ZCAqZGF0YSwKPiAgIAkJCSBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gLQlzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0 IGk5MTVfcGVyZiAqcGVyZiA9ICZ0b19pOTE1KGRldiktPnBlcmY7Cj4gICAJc3RydWN0IGRybV9p OTE1X3BlcmZfb3Blbl9wYXJhbSAqcGFyYW0gPSBkYXRhOwo+ICAgCXN0cnVjdCBwZXJmX29wZW5f cHJvcGVydGllcyBwcm9wczsKPiAgIAl1MzIga25vd25fb3Blbl9mbGFnczsKPiAgIAlpbnQgcmV0 Owo+ICAgCj4gLQlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKSB7Cj4gKwlpZiAoIXBl cmYtPmk5MTUpIHsKPiAgIAkJRFJNX0RFQlVHKCJpOTE1IHBlcmYgaW50ZXJmYWNlIG5vdCBhdmFp bGFibGUgZm9yIHRoaXMgc3lzdGVtXG4iKTsKPiAgIAkJcmV0dXJuIC1FTk9UU1VQUDsKPiAgIAl9 Cj4gQEAgLTI5ODYsMTI0ICsyOTczLDEyNyBAQCBpbnQgaTkxNV9wZXJmX29wZW5faW9jdGwoc3Ry dWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJcmV0dXJuIC1FSU5WQUw7Cj4g ICAJfQo+ICAgCj4gLQlyZXQgPSByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQoZGV2X3ByaXYsCj4g KwlyZXQgPSByZWFkX3Byb3BlcnRpZXNfdW5sb2NrZWQocGVyZiwKPiAgIAkJCQkgICAgICAgdTY0 X3RvX3VzZXJfcHRyKHBhcmFtLT5wcm9wZXJ0aWVzX3B0ciksCj4gICAJCQkJICAgICAgIHBhcmFt LT5udW1fcHJvcGVydGllcywKPiAgIAkJCQkgICAgICAgJnByb3BzKTsKPiAgIAlpZiAocmV0KQo+ ICAgCQlyZXR1cm4gcmV0Owo+ICAgCj4gLQltdXRleF9sb2NrKCZkZXZfcHJpdi0+cGVyZi5sb2Nr KTsKPiAtCXJldCA9IGk5MTVfcGVyZl9vcGVuX2lvY3RsX2xvY2tlZChkZXZfcHJpdiwgcGFyYW0s ICZwcm9wcywgZmlsZSk7Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwo+ ICsJbXV0ZXhfbG9jaygmcGVyZi0+bG9jayk7Cj4gKwlyZXQgPSBpOTE1X3BlcmZfb3Blbl9pb2N0 bF9sb2NrZWQocGVyZiwgcGFyYW0sICZwcm9wcywgZmlsZSk7Cj4gKwltdXRleF91bmxvY2soJnBl cmYtPmxvY2spOwo+ICAgCj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gICAg KiBpOTE1X3BlcmZfcmVnaXN0ZXIgLSBleHBvc2VzIGk5MTUtcGVyZiB0byB1c2Vyc3BhY2UKPiAt ICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+ICsgKiBAaTkxNTogaTkxNSBkZXZp Y2UgaW5zdGFuY2UKPiAgICAqCj4gICAgKiBJbiBwYXJ0aWN1bGFyIE9BIG1ldHJpYyBzZXRzIGFy ZSBhZHZlcnRpc2VkIHVuZGVyIGEgc3lzZnMgbWV0cmljcy8KPiAgICAqIGRpcmVjdG9yeSBhbGxv d2luZyB1c2Vyc3BhY2UgdG8gZW51bWVyYXRlIHZhbGlkIElEcyB0aGF0IGNhbiBiZQo+ICAgICog dXNlZCB0byBvcGVuIGFuIGk5MTUtcGVyZiBzdHJlYW0uCj4gICAgKi8KPiAtdm9pZCBpOTE1X3Bl cmZfcmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt2b2lkIGk5 MTVfcGVyZl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAr CXN0cnVjdCBpOTE1X3BlcmYgKnBlcmYgPSAmaTkxNS0+cGVyZjsKPiAgIAlpbnQgcmV0Owo+ICAg Cj4gLQlpZiAoIWRldl9wcml2LT5wZXJmLmluaXRpYWxpemVkKQo+ICsJaWYgKCFwZXJmLT5pOTE1 KQo+ICAgCQlyZXR1cm47Cj4gICAKPiAgIAkvKiBUbyBiZSBzdXJlIHdlJ3JlIHN5bmNocm9uaXpl ZCB3aXRoIGFuIGF0dGVtcHRlZAo+ICAgCSAqIGk5MTVfcGVyZl9vcGVuX2lvY3RsKCk7IGNvbnNp ZGVyaW5nIHRoYXQgd2UgcmVnaXN0ZXIgYWZ0ZXIKPiAgIAkgKiBiZWluZyBleHBvc2VkIHRvIHVz ZXJzcGFjZS4KPiAgIAkgKi8KPiAtCW11dGV4X2xvY2soJmRldl9wcml2LT5wZXJmLmxvY2spOwo+ ICsJbXV0ZXhfbG9jaygmcGVyZi0+bG9jayk7Cj4gICAKPiAtCWRldl9wcml2LT5wZXJmLm1ldHJp Y3Nfa29iaiA9Cj4gKwlwZXJmLT5tZXRyaWNzX2tvYmogPQo+ICAgCQlrb2JqZWN0X2NyZWF0ZV9h bmRfYWRkKCJtZXRyaWNzIiwKPiAtCQkJCSAgICAgICAmZGV2X3ByaXYtPmRybS5wcmltYXJ5LT5r ZGV2LT5rb2JqKTsKPiAtCWlmICghZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKQo+ICsJCQkJ ICAgICAgICZpOTE1LT5kcm0ucHJpbWFyeS0+a2Rldi0+a29iaik7Cj4gKwlpZiAoIXBlcmYtPm1l dHJpY3Nfa29iaikKPiAgIAkJZ290byBleGl0Owo+ICAgCj4gLQlzeXNmc19hdHRyX2luaXQoJmRl dl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLnN5c2ZzX21ldHJpY19pZC5hdHRyKTsKPiAtCj4gLQlp ZiAoSU5URUxfR0VOKGRldl9wcml2KSA+PSAxMSkgewo+IC0JCWk5MTVfcGVyZl9sb2FkX3Rlc3Rf Y29uZmlnX2ljbChkZXZfcHJpdik7Cj4gLQl9IGVsc2UgaWYgKElTX0NBTk5PTkxBS0UoZGV2X3By aXYpKSB7Cj4gLQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfY25sKGRldl9wcml2KTsKPiAt CX0gZWxzZSBpZiAoSVNfQ09GRkVFTEFLRShkZXZfcHJpdikpIHsKPiAtCQlpZiAoSVNfQ0ZMX0dU MihkZXZfcHJpdikpCj4gLQkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2NmbGd0MihkZXZf cHJpdik7Cj4gLQkJaWYgKElTX0NGTF9HVDMoZGV2X3ByaXYpKQo+IC0JCQlpOTE1X3BlcmZfbG9h ZF90ZXN0X2NvbmZpZ19jZmxndDMoZGV2X3ByaXYpOwo+IC0JfSBlbHNlIGlmIChJU19HRU1JTklM QUtFKGRldl9wcml2KSkgewo+IC0JCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2dsayhkZXZf cHJpdik7Cj4gLQl9IGVsc2UgaWYgKElTX0tBQllMQUtFKGRldl9wcml2KSkgewo+IC0JCWlmIChJ U19LQkxfR1QyKGRldl9wcml2KSkKPiAtCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfa2Js Z3QyKGRldl9wcml2KTsKPiAtCQllbHNlIGlmIChJU19LQkxfR1QzKGRldl9wcml2KSkKPiAtCQkJ aTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfa2JsZ3QzKGRldl9wcml2KTsKPiAtCX0gZWxzZSBp ZiAoSVNfQlJPWFRPTihkZXZfcHJpdikpIHsKPiAtCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZp Z19ieHQoZGV2X3ByaXYpOwo+IC0JfSBlbHNlIGlmIChJU19TS1lMQUtFKGRldl9wcml2KSkgewo+ IC0JCWlmIChJU19TS0xfR1QyKGRldl9wcml2KSkKPiAtCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9j b25maWdfc2tsZ3QyKGRldl9wcml2KTsKPiAtCQllbHNlIGlmIChJU19TS0xfR1QzKGRldl9wcml2 KSkKPiAtCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfc2tsZ3QzKGRldl9wcml2KTsKPiAt CQllbHNlIGlmIChJU19TS0xfR1Q0KGRldl9wcml2KSkKPiAtCQkJaTkxNV9wZXJmX2xvYWRfdGVz dF9jb25maWdfc2tsZ3Q0KGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAoSVNfQ0hFUlJZVklFVyhk ZXZfcHJpdikpIHsKPiAtCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19jaHYoZGV2X3ByaXYp Owo+IC0JfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJaTkxNV9wZXJm X2xvYWRfdGVzdF9jb25maWdfYmR3KGRldl9wcml2KTsKPiAtCX0gZWxzZSBpZiAoSVNfSEFTV0VM TChkZXZfcHJpdikpIHsKPiAtCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19oc3coZGV2X3By aXYpOwo+IC19Cj4gLQo+IC0JaWYgKGRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLmlkID09IDAp Cj4gKwlzeXNmc19hdHRyX2luaXQoJnBlcmYtPnRlc3RfY29uZmlnLnN5c2ZzX21ldHJpY19pZC5h dHRyKTsKPiArCj4gKwlpZiAoSU5URUxfR0VOKGk5MTUpID49IDExKSB7Cj4gKwkJaTkxNV9wZXJm X2xvYWRfdGVzdF9jb25maWdfaWNsKGk5MTUpOwo+ICsJfSBlbHNlIGlmIChJU19DQU5OT05MQUtF KGk5MTUpKSB7Cj4gKwkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfY25sKGk5MTUpOwo+ICsJ fSBlbHNlIGlmIChJU19DT0ZGRUVMQUtFKGk5MTUpKSB7Cj4gKwkJaWYgKElTX0NGTF9HVDIoaTkx NSkpCj4gKwkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX2NmbGd0MihpOTE1KTsKPiArCQlp ZiAoSVNfQ0ZMX0dUMyhpOTE1KSkKPiArCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfY2Zs Z3QzKGk5MTUpOwo+ICsJfSBlbHNlIGlmIChJU19HRU1JTklMQUtFKGk5MTUpKSB7Cj4gKwkJaTkx NV9wZXJmX2xvYWRfdGVzdF9jb25maWdfZ2xrKGk5MTUpOwo+ICsJfSBlbHNlIGlmIChJU19LQUJZ TEFLRShpOTE1KSkgewo+ICsJCWlmIChJU19LQkxfR1QyKGk5MTUpKQo+ICsJCQlpOTE1X3BlcmZf bG9hZF90ZXN0X2NvbmZpZ19rYmxndDIoaTkxNSk7Cj4gKwkJZWxzZSBpZiAoSVNfS0JMX0dUMyhp OTE1KSkKPiArCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfa2JsZ3QzKGk5MTUpOwo+ICsJ fSBlbHNlIGlmIChJU19CUk9YVE9OKGk5MTUpKSB7Cj4gKwkJaTkxNV9wZXJmX2xvYWRfdGVzdF9j b25maWdfYnh0KGk5MTUpOwo+ICsJfSBlbHNlIGlmIChJU19TS1lMQUtFKGk5MTUpKSB7Cj4gKwkJ aWYgKElTX1NLTF9HVDIoaTkxNSkpCj4gKwkJCWk5MTVfcGVyZl9sb2FkX3Rlc3RfY29uZmlnX3Nr bGd0MihpOTE1KTsKPiArCQllbHNlIGlmIChJU19TS0xfR1QzKGk5MTUpKQo+ICsJCQlpOTE1X3Bl cmZfbG9hZF90ZXN0X2NvbmZpZ19za2xndDMoaTkxNSk7Cj4gKwkJZWxzZSBpZiAoSVNfU0tMX0dU NChpOTE1KSkKPiArCQkJaTkxNV9wZXJmX2xvYWRfdGVzdF9jb25maWdfc2tsZ3Q0KGk5MTUpOwo+ ICsJfSBlbHNlIGlmIChJU19DSEVSUllWSUVXKGk5MTUpKSB7Cj4gKwkJaTkxNV9wZXJmX2xvYWRf dGVzdF9jb25maWdfY2h2KGk5MTUpOwo+ICsJfSBlbHNlIGlmIChJU19CUk9BRFdFTEwoaTkxNSkp IHsKPiArCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19iZHcoaTkxNSk7Cj4gKwl9IGVsc2Ug aWYgKElTX0hBU1dFTEwoaTkxNSkpIHsKPiArCQlpOTE1X3BlcmZfbG9hZF90ZXN0X2NvbmZpZ19o c3coaTkxNSk7Cj4gKwl9Cj4gKwo+ICsJaWYgKHBlcmYtPnRlc3RfY29uZmlnLmlkID09IDApCj4g ICAJCWdvdG8gc3lzZnNfZXJyb3I7Cj4gICAKPiAtCXJldCA9IHN5c2ZzX2NyZWF0ZV9ncm91cChk ZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmosCj4gLQkJCQkgJmRldl9wcml2LT5wZXJmLnRlc3Rf Y29uZmlnLnN5c2ZzX21ldHJpYyk7Cj4gKwlyZXQgPSBzeXNmc19jcmVhdGVfZ3JvdXAocGVyZi0+ bWV0cmljc19rb2JqLAo+ICsJCQkJICZwZXJmLT50ZXN0X2NvbmZpZy5zeXNmc19tZXRyaWMpOwo+ ICAgCWlmIChyZXQpCj4gICAJCWdvdG8gc3lzZnNfZXJyb3I7Cj4gICAKPiAtCWF0b21pY19zZXQo JmRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLnJlZl9jb3VudCwgMSk7Cj4gKwlhdG9taWNfc2V0 KCZwZXJmLT50ZXN0X2NvbmZpZy5yZWZfY291bnQsIDEpOwo+ICAgCj4gICAJZ290byBleGl0Owo+ ICAgCj4gICBzeXNmc19lcnJvcjoKPiAtCWtvYmplY3RfcHV0KGRldl9wcml2LT5wZXJmLm1ldHJp Y3Nfa29iaik7Cj4gLQlkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmogPSBOVUxMOwo+ICsJa29i amVjdF9wdXQocGVyZi0+bWV0cmljc19rb2JqKTsKPiArCXBlcmYtPm1ldHJpY3Nfa29iaiA9IE5V TEw7Cj4gICAKPiAgIGV4aXQ6Cj4gLQltdXRleF91bmxvY2soJmRldl9wcml2LT5wZXJmLmxvY2sp Owo+ICsJbXV0ZXhfdW5sb2NrKCZwZXJmLT5sb2NrKTsKPiAgIH0KPiAgIAo+ICAgLyoqCj4gICAg KiBpOTE1X3BlcmZfdW5yZWdpc3RlciAtIGhpZGUgaTkxNS1wZXJmIGZyb20gdXNlcnNwYWNlCj4g LSAqIEBkZXZfcHJpdjogaTkxNSBkZXZpY2UgaW5zdGFuY2UKPiArICogQGk5MTU6IGk5MTUgZGV2 aWNlIGluc3RhbmNlCj4gICAgKgo+ICAgICogaTkxNS1wZXJmIHN0YXRlIGNsZWFudXAgaXMgc3Bs aXQgdXAgaW50byBhbiAndW5yZWdpc3RlcicgYW5kCj4gICAgKiAnZGVpbml0JyBwaGFzZSB3aGVy ZSB0aGUgaW50ZXJmYWNlIGlzIGZpcnN0IGhpZGRlbiBmcm9tCj4gICAgKiB1c2Vyc3BhY2UgYnkg aTkxNV9wZXJmX3VucmVnaXN0ZXIoKSBiZWZvcmUgY2xlYW5pbmcgdXAKPiAgICAqIHJlbWFpbmlu ZyBzdGF0ZSBpbiBpOTE1X3BlcmZfZmluaSgpLgo+ICAgICovCj4gLXZvaWQgaTkxNV9wZXJmX3Vu cmVnaXN0ZXIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2KQo+ICt2b2lkIGk5MTVf cGVyZl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgewo+IC0J aWYgKCFkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2tvYmopCj4gKwlzdHJ1Y3QgaTkxNV9wZXJmICpw ZXJmID0gJmk5MTUtPnBlcmY7Cj4gKwo+ICsJaWYgKCFwZXJmLT5tZXRyaWNzX2tvYmopCj4gICAJ CXJldHVybjsKPiAgIAo+IC0Jc3lzZnNfcmVtb3ZlX2dyb3VwKGRldl9wcml2LT5wZXJmLm1ldHJp Y3Nfa29iaiwKPiAtCQkJICAgJmRldl9wcml2LT5wZXJmLnRlc3RfY29uZmlnLnN5c2ZzX21ldHJp Yyk7Cj4gKwlzeXNmc19yZW1vdmVfZ3JvdXAocGVyZi0+bWV0cmljc19rb2JqLAo+ICsJCQkgICAm cGVyZi0+dGVzdF9jb25maWcuc3lzZnNfbWV0cmljKTsKPiAgIAo+IC0Ja29iamVjdF9wdXQoZGV2 X3ByaXYtPnBlcmYubWV0cmljc19rb2JqKTsKPiAtCWRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29i aiA9IE5VTEw7Cj4gKwlrb2JqZWN0X3B1dChwZXJmLT5tZXRyaWNzX2tvYmopOwo+ICsJcGVyZi0+ bWV0cmljc19rb2JqID0gTlVMTDsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgYm9vbCBnZW44X2lzX3Zh bGlkX2ZsZXhfYWRkcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRy KQo+ICtzdGF0aWMgYm9vbCBnZW44X2lzX3ZhbGlkX2ZsZXhfYWRkcihzdHJ1Y3QgaTkxNV9wZXJm ICpwZXJmLCB1MzIgYWRkcikKPiAgIHsKPiAgIAlzdGF0aWMgY29uc3QgaTkxNV9yZWdfdCBmbGV4 X2V1X3JlZ3NbXSA9IHsKPiAgIAkJRVVfUEVSRl9DTlRMMCwKPiBAQCAtMzEyMyw3ICszMTEzLDcg QEAgc3RhdGljIGJvb2wgZ2VuOF9pc192YWxpZF9mbGV4X2FkZHIoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKPiAgIAlyZXR1cm4gZmFsc2U7Cj4gICB9Cj4gICAK PiAtc3RhdGljIGJvb2wgZ2VuN19pc192YWxpZF9iX2NvdW50ZXJfYWRkcihzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKQo+ICtzdGF0aWMgYm9vbCBnZW43X2lzX3Zh bGlkX2JfY291bnRlcl9hZGRyKHN0cnVjdCBpOTE1X3BlcmYgKnBlcmYsIHUzMiBhZGRyKQo+ICAg ewo+ICAgCXJldHVybiAoYWRkciA+PSBpOTE1X21taW9fcmVnX29mZnNldChPQVNUQVJUVFJJRzEp ICYmCj4gICAJCWFkZHIgPD0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoT0FTVEFSVFRSSUc4KSkgfHwK PiBAQCAtMzEzMyw3ICszMTIzLDcgQEAgc3RhdGljIGJvb2wgZ2VuN19pc192YWxpZF9iX2NvdW50 ZXJfYWRkcihzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMgo+ICAgCQkgYWRk ciA8PSBpOTE1X21taW9fcmVnX29mZnNldChPQUNFQzdfMSkpOwo+ICAgfQo+ICAgCj4gLXN0YXRp YyBib29sIGdlbjdfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRl dl9wcml2LCB1MzIgYWRkcikKPiArc3RhdGljIGJvb2wgZ2VuN19pc192YWxpZF9tdXhfYWRkcihz dHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkcikKPiAgIHsKPiAgIAlyZXR1cm4gYWRkciA9 PSBpOTE1X21taW9fcmVnX29mZnNldChIQUxGX1NMSUNFX0NISUNLRU4yKSB8fAo+ICAgCQkoYWRk ciA+PSBpOTE1X21taW9fcmVnX29mZnNldChNSUNST19CUDBfMCkgJiYKPiBAQCAtMzE0NCwzNCAr MzEzNCwzNCBAQCBzdGF0aWMgYm9vbCBnZW43X2lzX3ZhbGlkX211eF9hZGRyKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiwgdTMyIGFkZHIpCj4gICAJCSBhZGRyIDw9IGk5MTVfbW1p b19yZWdfb2Zmc2V0KE9BX1BFUkZNQVRSSVhfSEkpKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgYm9v bCBnZW44X2lzX3ZhbGlkX211eF9hZGRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJp diwgdTMyIGFkZHIpCj4gK3N0YXRpYyBib29sIGdlbjhfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0 IGk5MTVfcGVyZiAqcGVyZiwgdTMyIGFkZHIpCj4gICB7Cj4gLQlyZXR1cm4gZ2VuN19pc192YWxp ZF9tdXhfYWRkcihkZXZfcHJpdiwgYWRkcikgfHwKPiArCXJldHVybiBnZW43X2lzX3ZhbGlkX211 eF9hZGRyKHBlcmYsIGFkZHIpIHx8Cj4gICAJCWFkZHIgPT0gaTkxNV9tbWlvX3JlZ19vZmZzZXQo V0FJVF9GT1JfUkM2X0VYSVQpIHx8Cj4gICAJCShhZGRyID49IGk5MTVfbW1pb19yZWdfb2Zmc2V0 KFJQTV9DT05GSUcwKSAmJgo+ICAgCQkgYWRkciA8PSBpOTE1X21taW9fcmVnX29mZnNldChOT0Ff Q09ORklHKDgpKSk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wgZ2VuMTBfaXNfdmFsaWRfbXV4 X2FkZHIoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYWRkcikKPiArc3Rh dGljIGJvb2wgZ2VuMTBfaXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwg dTMyIGFkZHIpCj4gICB7Cj4gLQlyZXR1cm4gZ2VuOF9pc192YWxpZF9tdXhfYWRkcihkZXZfcHJp diwgYWRkcikgfHwKPiArCXJldHVybiBnZW44X2lzX3ZhbGlkX211eF9hZGRyKHBlcmYsIGFkZHIp IHx8Cj4gICAJCWFkZHIgPT0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOMTBfTk9BX1dSSVRFX0hJ R0gpIHx8Cj4gICAJCShhZGRyID49IGk5MTVfbW1pb19yZWdfb2Zmc2V0KE9BX1BFUkZDTlQzX0xP KSAmJgo+ICAgCQkgYWRkciA8PSBpOTE1X21taW9fcmVnX29mZnNldChPQV9QRVJGQ05UNF9ISSkp Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBib29sIGhzd19pc192YWxpZF9tdXhfYWRkcihzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsIHUzMiBhZGRyKQo+ICtzdGF0aWMgYm9vbCBoc3df aXNfdmFsaWRfbXV4X2FkZHIoc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwgdTMyIGFkZHIpCj4gICB7 Cj4gLQlyZXR1cm4gZ2VuN19pc192YWxpZF9tdXhfYWRkcihkZXZfcHJpdiwgYWRkcikgfHwKPiAr CXJldHVybiBnZW43X2lzX3ZhbGlkX211eF9hZGRyKHBlcmYsIGFkZHIpIHx8Cj4gICAJCShhZGRy ID49IDB4MjUxMDAgJiYgYWRkciA8PSAweDJGRjkwKSB8fAo+ICAgCQkoYWRkciA+PSBpOTE1X21t aW9fcmVnX29mZnNldChIU1dfTUJWSUQyX05PQTApICYmCj4gICAJCSBhZGRyIDw9IGk5MTVfbW1p b19yZWdfb2Zmc2V0KEhTV19NQlZJRDJfTk9BOSkpIHx8Cj4gICAJCWFkZHIgPT0gaTkxNV9tbWlv X3JlZ19vZmZzZXQoSFNXX01CVklEMl9NSVNSMCk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIGJvb2wg Y2h2X2lzX3ZhbGlkX211eF9hZGRyKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwg dTMyIGFkZHIpCj4gK3N0YXRpYyBib29sIGNodl9pc192YWxpZF9tdXhfYWRkcihzdHJ1Y3QgaTkx NV9wZXJmICpwZXJmLCB1MzIgYWRkcikKPiAgIHsKPiAtCXJldHVybiBnZW43X2lzX3ZhbGlkX211 eF9hZGRyKGRldl9wcml2LCBhZGRyKSB8fAo+ICsJcmV0dXJuIGdlbjdfaXNfdmFsaWRfbXV4X2Fk ZHIocGVyZiwgYWRkcikgfHwKPiAgIAkJKGFkZHIgPj0gMHgxODIzMDAgJiYgYWRkciA8PSAweDE4 MjNBNCk7Cj4gICB9Cj4gICAKPiBAQCAtMzE5NCw4ICszMTg0LDggQEAgc3RhdGljIHUzMiBtYXNr X3JlZ192YWx1ZSh1MzIgcmVnLCB1MzIgdmFsKQo+ICAgCXJldHVybiB2YWw7Cj4gICB9Cj4gICAK PiAtc3RhdGljIHN0cnVjdCBpOTE1X29hX3JlZyAqYWxsb2Nfb2FfcmVncyhzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJIGJvb2wgKCppc192YWxpZCkoc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCB1MzIgYWRkciksCj4gK3N0YXRpYyBzdHJ1Y3QgaTkx NV9vYV9yZWcgKmFsbG9jX29hX3JlZ3Moc3RydWN0IGk5MTVfcGVyZiAqcGVyZiwKPiArCQkJCQkg Ym9vbCAoKmlzX3ZhbGlkKShzdHJ1Y3QgaTkxNV9wZXJmICpwZXJmLCB1MzIgYWRkciksCj4gICAJ CQkJCSB1MzIgX191c2VyICpyZWdzLAo+ICAgCQkJCQkgdTMyIG5fcmVncykKPiAgIHsKPiBAQCAt MzIyNSw3ICszMjE1LDcgQEAgc3RhdGljIHN0cnVjdCBpOTE1X29hX3JlZyAqYWxsb2Nfb2FfcmVn cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICAJCWlmIChlcnIpCj4gICAJ CQlnb3RvIGFkZHJfZXJyOwo+ICAgCj4gLQkJaWYgKCFpc192YWxpZChkZXZfcHJpdiwgYWRkcikp IHsKPiArCQlpZiAoIWlzX3ZhbGlkKHBlcmYsIGFkZHIpKSB7Cj4gICAJCQlEUk1fREVCVUcoIklu dmFsaWQgb2FfcmVnIGFkZHJlc3M6ICVYXG4iLCBhZGRyKTsKPiAgIAkJCWVyciA9IC1FSU5WQUw7 Cj4gICAJCQlnb3RvIGFkZHJfZXJyOwo+IEBAIC0zMjU4LDcgKzMyNDgsNyBAQCBzdGF0aWMgc3Np emVfdCBzaG93X2R5bmFtaWNfaWQoc3RydWN0IGRldmljZSAqZGV2LAo+ICAgCXJldHVybiBzcHJp bnRmKGJ1ZiwgIiVkXG4iLCBvYV9jb25maWctPmlkKTsKPiAgIH0KPiAgIAo+IC1zdGF0aWMgaW50 IGNyZWF0ZV9keW5hbWljX29hX3N5c2ZzX2VudHJ5KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdiwKPiArc3RhdGljIGludCBjcmVhdGVfZHluYW1pY19vYV9zeXNmc19lbnRyeShzdHJ1 Y3QgaTkxNV9wZXJmICpwZXJmLAo+ICAgCQkJCQkgc3RydWN0IGk5MTVfb2FfY29uZmlnICpvYV9j b25maWcpCj4gICB7Cj4gICAJc3lzZnNfYXR0cl9pbml0KCZvYV9jb25maWctPnN5c2ZzX21ldHJp Y19pZC5hdHRyKTsKPiBAQCAtMzI3Myw3ICszMjYzLDcgQEAgc3RhdGljIGludCBjcmVhdGVfZHlu YW1pY19vYV9zeXNmc19lbnRyeShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4g ICAJb2FfY29uZmlnLT5zeXNmc19tZXRyaWMubmFtZSA9IG9hX2NvbmZpZy0+dXVpZDsKPiAgIAlv YV9jb25maWctPnN5c2ZzX21ldHJpYy5hdHRycyA9IG9hX2NvbmZpZy0+YXR0cnM7Cj4gICAKPiAt CXJldHVybiBzeXNmc19jcmVhdGVfZ3JvdXAoZGV2X3ByaXYtPnBlcmYubWV0cmljc19rb2JqLAo+ ICsJcmV0dXJuIHN5c2ZzX2NyZWF0ZV9ncm91cChwZXJmLT5tZXRyaWNzX2tvYmosCj4gICAJCQkJ ICAmb2FfY29uZmlnLT5zeXNmc19tZXRyaWMpOwo+ICAgfQo+ICAgCj4gQEAgLTMyOTMsMTcgKzMy ODMsMTcgQEAgc3RhdGljIGludCBjcmVhdGVfZHluYW1pY19vYV9zeXNmc19lbnRyeShzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gICBpbnQgaTkxNV9wZXJmX2FkZF9jb25maWdf aW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJCSAgICAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9 ICZ0b19pOTE1KGRldiktPnBlcmY7Cj4gICAJc3RydWN0IGRybV9pOTE1X3BlcmZfb2FfY29uZmln ICphcmdzID0gZGF0YTsKPiAgIAlzdHJ1Y3QgaTkxNV9vYV9jb25maWcgKm9hX2NvbmZpZywgKnRt cDsKPiAgIAlpbnQgZXJyLCBpZDsKPiAgIAo+IC0JaWYgKCFkZXZfcHJpdi0+cGVyZi5pbml0aWFs aXplZCkgewo+ICsJaWYgKCFwZXJmLT5pOTE1KSB7Cj4gICAJCURSTV9ERUJVRygiaTkxNSBwZXJm IGludGVyZmFjZSBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHN5c3RlbVxuIik7Cj4gICAJCXJldHVy biAtRU5PVFNVUFA7Cj4gICAJfQo+ICAgCj4gLQlpZiAoIWRldl9wcml2LT5wZXJmLm1ldHJpY3Nf a29iaikgewo+ICsJaWYgKCFwZXJmLT5tZXRyaWNzX2tvYmopIHsKPiAgIAkJRFJNX0RFQlVHKCJP QSBtZXRyaWNzIHdlcmVuJ3QgYWR2ZXJ0aXNlZCB2aWEgc3lzZnNcbiIpOwo+ICAgCQlyZXR1cm4g LUVJTlZBTDsKPiAgIAl9Cj4gQEAgLTMzNDEsOCArMzMzMSw4IEBAIGludCBpOTE1X3BlcmZfYWRk X2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCj4g ICAJb2FfY29uZmlnLT5tdXhfcmVnc19sZW4gPSBhcmdzLT5uX211eF9yZWdzOwo+ICAgCW9hX2Nv bmZpZy0+bXV4X3JlZ3MgPQo+IC0JCWFsbG9jX29hX3JlZ3MoZGV2X3ByaXYsCj4gLQkJCSAgICAg IGRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9tdXhfcmVnLAo+ICsJCWFsbG9jX29hX3JlZ3Mo cGVyZiwKPiArCQkJICAgICAgcGVyZi0+b3BzLmlzX3ZhbGlkX211eF9yZWcsCj4gICAJCQkgICAg ICB1NjRfdG9fdXNlcl9wdHIoYXJncy0+bXV4X3JlZ3NfcHRyKSwKPiAgIAkJCSAgICAgIGFyZ3Mt Pm5fbXV4X3JlZ3MpOwo+ICAgCj4gQEAgLTMzNTQsOCArMzM0NCw4IEBAIGludCBpOTE1X3BlcmZf YWRkX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAg Cj4gICAJb2FfY29uZmlnLT5iX2NvdW50ZXJfcmVnc19sZW4gPSBhcmdzLT5uX2Jvb2xlYW5fcmVn czsKPiAgIAlvYV9jb25maWctPmJfY291bnRlcl9yZWdzID0KPiAtCQlhbGxvY19vYV9yZWdzKGRl dl9wcml2LAo+IC0JCQkgICAgICBkZXZfcHJpdi0+cGVyZi5vcHMuaXNfdmFsaWRfYl9jb3VudGVy X3JlZywKPiArCQlhbGxvY19vYV9yZWdzKHBlcmYsCj4gKwkJCSAgICAgIHBlcmYtPm9wcy5pc192 YWxpZF9iX2NvdW50ZXJfcmVnLAo+ICAgCQkJICAgICAgdTY0X3RvX3VzZXJfcHRyKGFyZ3MtPmJv b2xlYW5fcmVnc19wdHIpLAo+ICAgCQkJICAgICAgYXJncy0+bl9ib29sZWFuX3JlZ3MpOwo+ICAg Cj4gQEAgLTMzNjUsNyArMzM1NSw3IEBAIGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChz dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQlnb3RvIHJlZ19lcnI7Cj4g ICAJfQo+ICAgCj4gLQlpZiAoSU5URUxfR0VOKGRldl9wcml2KSA8IDgpIHsKPiArCWlmIChJTlRF TF9HRU4ocGVyZi0+aTkxNSkgPCA4KSB7Cj4gICAJCWlmIChhcmdzLT5uX2ZsZXhfcmVncyAhPSAw KSB7Cj4gICAJCQllcnIgPSAtRUlOVkFMOwo+ICAgCQkJZ290byByZWdfZXJyOwo+IEBAIC0zMzcz LDggKzMzNjMsOCBAQCBpbnQgaTkxNV9wZXJmX2FkZF9jb25maWdfaW9jdGwoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAl9IGVsc2Ugewo+ICAgCQlvYV9jb25maWctPmZs ZXhfcmVnc19sZW4gPSBhcmdzLT5uX2ZsZXhfcmVnczsKPiAgIAkJb2FfY29uZmlnLT5mbGV4X3Jl Z3MgPQo+IC0JCQlhbGxvY19vYV9yZWdzKGRldl9wcml2LAo+IC0JCQkJICAgICAgZGV2X3ByaXYt PnBlcmYub3BzLmlzX3ZhbGlkX2ZsZXhfcmVnLAo+ICsJCQlhbGxvY19vYV9yZWdzKHBlcmYsCj4g KwkJCQkgICAgICBwZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9yZWcsCj4gICAJCQkJICAgICAgdTY0 X3RvX3VzZXJfcHRyKGFyZ3MtPmZsZXhfcmVnc19wdHIpLAo+ICAgCQkJCSAgICAgIGFyZ3MtPm5f ZmxleF9yZWdzKTsKPiAgIAo+IEBAIC0zMzg1LDE0ICszMzc1LDE0IEBAIGludCBpOTE1X3BlcmZf YWRkX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAg CQl9Cj4gICAJfQo+ICAgCj4gLQllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmRldl9w cml2LT5wZXJmLm1ldHJpY3NfbG9jayk7Cj4gKwllcnIgPSBtdXRleF9sb2NrX2ludGVycnVwdGli bGUoJnBlcmYtPm1ldHJpY3NfbG9jayk7Cj4gICAJaWYgKGVycikKPiAgIAkJZ290byByZWdfZXJy Owo+ICAgCj4gICAJLyogV2Ugc2hvdWxkbid0IGhhdmUgdG9vIG1hbnkgY29uZmlncywgc28gdGhp cyBpdGVyYXRpb24gc2hvdWxkbid0IGJlCj4gICAJICogdG9vIGNvc3RseS4KPiAgIAkgKi8KPiAt CWlkcl9mb3JfZWFjaF9lbnRyeSgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19pZHIsIHRtcCwgaWQp IHsKPiArCWlkcl9mb3JfZWFjaF9lbnRyeSgmcGVyZi0+bWV0cmljc19pZHIsIHRtcCwgaWQpIHsK PiAgIAkJaWYgKCFzdHJjbXAodG1wLT51dWlkLCBvYV9jb25maWctPnV1aWQpKSB7Cj4gICAJCQlE Uk1fREVCVUcoIk9BIGNvbmZpZyBhbHJlYWR5IGV4aXN0cyB3aXRoIHRoaXMgdXVpZFxuIik7Cj4g ICAJCQllcnIgPSAtRUFERFJJTlVTRTsKPiBAQCAtMzQwMCwxNCArMzM5MCwxNCBAQCBpbnQgaTkx NV9wZXJmX2FkZF9jb25maWdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiAgIAkJfQo+ICAgCX0KPiAgIAo+IC0JZXJyID0gY3JlYXRlX2R5bmFtaWNfb2Ffc3lzZnNf ZW50cnkoZGV2X3ByaXYsIG9hX2NvbmZpZyk7Cj4gKwllcnIgPSBjcmVhdGVfZHluYW1pY19vYV9z eXNmc19lbnRyeShwZXJmLCBvYV9jb25maWcpOwo+ICAgCWlmIChlcnIpIHsKPiAgIAkJRFJNX0RF QlVHKCJGYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGVudHJ5IGZvciBPQSBjb25maWdcbiIpOwo+ICAg CQlnb3RvIHN5c2ZzX2VycjsKPiAgIAl9Cj4gICAKPiAgIAkvKiBDb25maWcgaWQgMCBpcyBpbnZh bGlkLCBpZCAxIGZvciBrZXJuZWwgc3RvcmVkIHRlc3QgY29uZmlnLiAqLwo+IC0Jb2FfY29uZmln LT5pZCA9IGlkcl9hbGxvYygmZGV2X3ByaXYtPnBlcmYubWV0cmljc19pZHIsCj4gKwlvYV9jb25m aWctPmlkID0gaWRyX2FsbG9jKCZwZXJmLT5tZXRyaWNzX2lkciwKPiAgIAkJCQkgIG9hX2NvbmZp ZywgMiwKPiAgIAkJCQkgIDAsIEdGUF9LRVJORUwpOwo+ICAgCWlmIChvYV9jb25maWctPmlkIDwg MCkgewo+IEBAIC0zNDE2LDE2ICszNDA2LDE2IEBAIGludCBpOTE1X3BlcmZfYWRkX2NvbmZpZ19p b2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICAgCQlnb3RvIHN5c2Zz X2VycjsKPiAgIAl9Cj4gICAKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubWV0cmlj c19sb2NrKTsKPiArCW11dGV4X3VubG9jaygmcGVyZi0+bWV0cmljc19sb2NrKTsKPiAgIAo+ICAg CURSTV9ERUJVRygiQWRkZWQgY29uZmlnICVzIGlkPSVpXG4iLCBvYV9jb25maWctPnV1aWQsIG9h X2NvbmZpZy0+aWQpOwo+ICAgCj4gICAJcmV0dXJuIG9hX2NvbmZpZy0+aWQ7Cj4gICAKPiAgIHN5 c2ZzX2VycjoKPiAtCW11dGV4X3VubG9jaygmZGV2X3ByaXYtPnBlcmYubWV0cmljc19sb2NrKTsK PiArCW11dGV4X3VubG9jaygmcGVyZi0+bWV0cmljc19sb2NrKTsKPiAgIHJlZ19lcnI6Cj4gLQlw dXRfb2FfY29uZmlnKGRldl9wcml2LCBvYV9jb25maWcpOwo+ICsJcHV0X29hX2NvbmZpZyhvYV9j b25maWcpOwo+ICAgCURSTV9ERUJVRygiRmFpbGVkIHRvIGFkZCBuZXcgT0EgY29uZmlnXG4iKTsK PiAgIAlyZXR1cm4gZXJyOwo+ICAgfQo+IEBAIC0zNDQ0LDEyICszNDM0LDEyIEBAIGludCBpOTE1 X3BlcmZfYWRkX2NvbmZpZ19pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRh LAo+ICAgaW50IGk5MTVfcGVyZl9yZW1vdmVfY29uZmlnX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJCQkJICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7 Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRl Owo+ICsJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9ICZ0b19pOTE1KGRldiktPnBlcmY7Cj4gICAJ dTY0ICphcmcgPSBkYXRhOwo+ICAgCXN0cnVjdCBpOTE1X29hX2NvbmZpZyAqb2FfY29uZmlnOwo+ ICAgCWludCByZXQ7Cj4gICAKPiAtCWlmICghZGV2X3ByaXYtPnBlcmYuaW5pdGlhbGl6ZWQpIHsK PiArCWlmICghcGVyZi0+aTkxNSkgewo+ICAgCQlEUk1fREVCVUcoImk5MTUgcGVyZiBpbnRlcmZh Y2Ugbm90IGF2YWlsYWJsZSBmb3IgdGhpcyBzeXN0ZW1cbiIpOwo+ICAgCQlyZXR1cm4gLUVOT1RT VVBQOwo+ICAgCX0KPiBAQCAtMzQ1OSwxMSArMzQ0OSwxMSBAQCBpbnQgaTkxNV9wZXJmX3JlbW92 ZV9jb25maWdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJ cmV0dXJuIC1FQUNDRVM7Cj4gICAJfQo+ICAgCj4gLQlyZXQgPSBtdXRleF9sb2NrX2ludGVycnVw dGlibGUoJmRldl9wcml2LT5wZXJmLm1ldHJpY3NfbG9jayk7Cj4gKwlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJnBlcmYtPm1ldHJpY3NfbG9jayk7Cj4gICAJaWYgKHJldCkKPiAgIAkJ Z290byBsb2NrX2VycjsKPiAgIAo+IC0Jb2FfY29uZmlnID0gaWRyX2ZpbmQoJmRldl9wcml2LT5w ZXJmLm1ldHJpY3NfaWRyLCAqYXJnKTsKPiArCW9hX2NvbmZpZyA9IGlkcl9maW5kKCZwZXJmLT5t ZXRyaWNzX2lkciwgKmFyZyk7Cj4gICAJaWYgKCFvYV9jb25maWcpIHsKPiAgIAkJRFJNX0RFQlVH KCJGYWlsZWQgdG8gcmVtb3ZlIHVua25vd24gT0EgY29uZmlnXG4iKTsKPiAgIAkJcmV0ID0gLUVO T0VOVDsKPiBAQCAtMzQ3MiwxNyArMzQ2MiwxNyBAQCBpbnQgaTkxNV9wZXJmX3JlbW92ZV9jb25m aWdfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAo+ICAgCUdF TV9CVUdfT04oKmFyZyAhPSBvYV9jb25maWctPmlkKTsKPiAgIAo+IC0Jc3lzZnNfcmVtb3ZlX2dy b3VwKGRldl9wcml2LT5wZXJmLm1ldHJpY3Nfa29iaiwKPiArCXN5c2ZzX3JlbW92ZV9ncm91cChw ZXJmLT5tZXRyaWNzX2tvYmosCj4gICAJCQkgICAmb2FfY29uZmlnLT5zeXNmc19tZXRyaWMpOwo+ ICAgCj4gLQlpZHJfcmVtb3ZlKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2lkciwgKmFyZyk7Cj4g KwlpZHJfcmVtb3ZlKCZwZXJmLT5tZXRyaWNzX2lkciwgKmFyZyk7Cj4gICAKPiAgIAlEUk1fREVC VUcoIlJlbW92ZWQgY29uZmlnICVzIGlkPSVpXG4iLCBvYV9jb25maWctPnV1aWQsIG9hX2NvbmZp Zy0+aWQpOwo+ICAgCj4gLQlwdXRfb2FfY29uZmlnKGRldl9wcml2LCBvYV9jb25maWcpOwo+ICsJ cHV0X29hX2NvbmZpZyhvYV9jb25maWcpOwo+ICAgCj4gICBjb25maWdfZXJyOgo+IC0JbXV0ZXhf dW5sb2NrKCZkZXZfcHJpdi0+cGVyZi5tZXRyaWNzX2xvY2spOwo+ICsJbXV0ZXhfdW5sb2NrKCZw ZXJmLT5tZXRyaWNzX2xvY2spOwo+ICAgbG9ja19lcnI6Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0K PiBAQCAtMzUzMSwxMDMgKzM1MjEsMTA0IEBAIHN0YXRpYyBzdHJ1Y3QgY3RsX3RhYmxlIGRldl9y b290W10gPSB7Cj4gICAKPiAgIC8qKgo+ICAgICogaTkxNV9wZXJmX2luaXQgLSBpbml0aWFsaXpl IGk5MTUtcGVyZiBzdGF0ZSBvbiBtb2R1bGUgbG9hZAo+IC0gKiBAZGV2X3ByaXY6IGk5MTUgZGV2 aWNlIGluc3RhbmNlCj4gKyAqIEBpOTE1OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+ICAgICoKPiAg ICAqIEluaXRpYWxpemVzIGk5MTUtcGVyZiBzdGF0ZSB3aXRob3V0IGV4cG9zaW5nIGFueXRoaW5n IHRvIHVzZXJzcGFjZS4KPiAgICAqCj4gICAgKiBOb3RlOiBpOTE1LXBlcmYgaW5pdGlhbGl6YXRp b24gaXMgc3BsaXQgaW50byBhbiAnaW5pdCcgYW5kICdyZWdpc3RlcicKPiAgICAqIHBoYXNlIHdp dGggdGhlIGk5MTVfcGVyZl9yZWdpc3RlcigpIGV4cG9zaW5nIHN0YXRlIHRvIHVzZXJzcGFjZS4K PiAgICAqLwo+IC12b2lkIGk5MTVfcGVyZl9pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiAtewo+IC0JaWYgKElTX0hBU1dFTEwoZGV2X3ByaXYpKSB7Cj4gLQkJZGV2X3By aXYtPnBlcmYub3BzLmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQo+IC0JCQlnZW43X2lzX3ZhbGlk X2JfY291bnRlcl9hZGRyOwo+IC0JCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9tdXhfcmVn ID0KPiAtCQkJaHN3X2lzX3ZhbGlkX211eF9hZGRyOwo+IC0JCWRldl9wcml2LT5wZXJmLm9wcy5p c192YWxpZF9mbGV4X3JlZyA9IE5VTEw7Cj4gLQkJZGV2X3ByaXYtPnBlcmYub3BzLmVuYWJsZV9t ZXRyaWNfc2V0ID0gaHN3X2VuYWJsZV9tZXRyaWNfc2V0Owo+IC0JCWRldl9wcml2LT5wZXJmLm9w cy5kaXNhYmxlX21ldHJpY19zZXQgPSBoc3dfZGlzYWJsZV9tZXRyaWNfc2V0Owo+IC0JCWRldl9w cml2LT5wZXJmLm9wcy5vYV9lbmFibGUgPSBnZW43X29hX2VuYWJsZTsKPiAtCQlkZXZfcHJpdi0+ cGVyZi5vcHMub2FfZGlzYWJsZSA9IGdlbjdfb2FfZGlzYWJsZTsKPiAtCQlkZXZfcHJpdi0+cGVy Zi5vcHMucmVhZCA9IGdlbjdfb2FfcmVhZDsKPiAtCQlkZXZfcHJpdi0+cGVyZi5vcHMub2FfaHdf dGFpbF9yZWFkID0KPiAtCQkJZ2VuN19vYV9od190YWlsX3JlYWQ7Cj4gLQo+IC0JCWRldl9wcml2 LT5wZXJmLm9hX2Zvcm1hdHMgPSBoc3dfb2FfZm9ybWF0czsKPiAtCX0gZWxzZSBpZiAoSEFTX0xP R0lDQUxfUklOR19DT05URVhUUyhkZXZfcHJpdikpIHsKPiArdm9pZCBpOTE1X3BlcmZfaW5pdChz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJc3RydWN0IGk5MTVfcGVyZiAq cGVyZiA9ICZpOTE1LT5wZXJmOwo+ICsKPiArCS8qIFhYWCBjb25zdCBzdHJ1Y3QgaTkxNV9wZXJm X29wcyEgKi8KPiArCj4gKwlpZiAoSVNfSEFTV0VMTChpOTE1KSkgewo+ICsJCXBlcmYtPm9wcy5p c192YWxpZF9iX2NvdW50ZXJfcmVnID0gZ2VuN19pc192YWxpZF9iX2NvdW50ZXJfYWRkcjsKPiAr CQlwZXJmLT5vcHMuaXNfdmFsaWRfbXV4X3JlZyA9IGhzd19pc192YWxpZF9tdXhfYWRkcjsKPiAr CQlwZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9yZWcgPSBOVUxMOwo+ICsJCXBlcmYtPm9wcy5lbmFi bGVfbWV0cmljX3NldCA9IGhzd19lbmFibGVfbWV0cmljX3NldDsKPiArCQlwZXJmLT5vcHMuZGlz YWJsZV9tZXRyaWNfc2V0ID0gaHN3X2Rpc2FibGVfbWV0cmljX3NldDsKPiArCQlwZXJmLT5vcHMu b2FfZW5hYmxlID0gZ2VuN19vYV9lbmFibGU7Cj4gKwkJcGVyZi0+b3BzLm9hX2Rpc2FibGUgPSBn ZW43X29hX2Rpc2FibGU7Cj4gKwkJcGVyZi0+b3BzLnJlYWQgPSBnZW43X29hX3JlYWQ7Cj4gKwkJ cGVyZi0+b3BzLm9hX2h3X3RhaWxfcmVhZCA9IGdlbjdfb2FfaHdfdGFpbF9yZWFkOwo+ICsKPiAr CQlwZXJmLT5vYV9mb3JtYXRzID0gaHN3X29hX2Zvcm1hdHM7Cj4gKwl9IGVsc2UgaWYgKEhBU19M T0dJQ0FMX1JJTkdfQ09OVEVYVFMoaTkxNSkpIHsKPiAgIAkJLyogTm90ZTogdGhhdCBhbHRob3Vn aCB3ZSBjb3VsZCB0aGVvcmV0aWNhbGx5IGFsc28gc3VwcG9ydCB0aGUKPiAgIAkJICogbGVnYWN5 IHJpbmdidWZmZXIgbW9kZSBvbiBCRFcgKGFuZCBlYXJsaWVyIGl0ZXJhdGlvbnMgb2YKPiAgIAkJ ICogdGhpcyBkcml2ZXIsIGJlZm9yZSB1cHN0cmVhbWluZyBkaWQgdGhpcykgaXQgZGlkbid0IHNl ZW0KPiAgIAkJICogd29ydGggdGhlIGNvbXBsZXhpdHkgdG8gbWFpbnRhaW4gbm93IHRoYXQgQkRX KyBlbmFibGUKPiAgIAkJICogZXhlY2xpc3QgbW9kZSBieSBkZWZhdWx0Lgo+ICAgCQkgKi8KPiAt CQlkZXZfcHJpdi0+cGVyZi5vYV9mb3JtYXRzID0gZ2VuOF9wbHVzX29hX2Zvcm1hdHM7Cj4gKwkJ cGVyZi0+b2FfZm9ybWF0cyA9IGdlbjhfcGx1c19vYV9mb3JtYXRzOwo+ICAgCj4gLQkJZGV2X3By aXYtPnBlcmYub3BzLm9hX2VuYWJsZSA9IGdlbjhfb2FfZW5hYmxlOwo+IC0JCWRldl9wcml2LT5w ZXJmLm9wcy5vYV9kaXNhYmxlID0gZ2VuOF9vYV9kaXNhYmxlOwo+IC0JCWRldl9wcml2LT5wZXJm Lm9wcy5yZWFkID0gZ2VuOF9vYV9yZWFkOwo+IC0JCWRldl9wcml2LT5wZXJmLm9wcy5vYV9od190 YWlsX3JlYWQgPSBnZW44X29hX2h3X3RhaWxfcmVhZDsKPiArCQlwZXJmLT5vcHMub2FfZW5hYmxl ID0gZ2VuOF9vYV9lbmFibGU7Cj4gKwkJcGVyZi0+b3BzLm9hX2Rpc2FibGUgPSBnZW44X29hX2Rp c2FibGU7Cj4gKwkJcGVyZi0+b3BzLnJlYWQgPSBnZW44X29hX3JlYWQ7Cj4gKwkJcGVyZi0+b3Bz Lm9hX2h3X3RhaWxfcmVhZCA9IGdlbjhfb2FfaHdfdGFpbF9yZWFkOwo+ICAgCj4gLQkJaWYgKElT X0dFTl9SQU5HRShkZXZfcHJpdiwgOCwgOSkpIHsKPiAtCQkJZGV2X3ByaXYtPnBlcmYub3BzLmlz X3ZhbGlkX2JfY291bnRlcl9yZWcgPQo+ICsJCWlmIChJU19HRU5fUkFOR0UoaTkxNSwgOCwgOSkp IHsKPiArCQkJcGVyZi0+b3BzLmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQo+ICAgCQkJCWdlbjdf aXNfdmFsaWRfYl9jb3VudGVyX2FkZHI7Cj4gLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxp ZF9tdXhfcmVnID0KPiArCQkJcGVyZi0+b3BzLmlzX3ZhbGlkX211eF9yZWcgPQo+ICAgCQkJCWdl bjhfaXNfdmFsaWRfbXV4X2FkZHI7Cj4gLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9m bGV4X3JlZyA9Cj4gKwkJCXBlcmYtPm9wcy5pc192YWxpZF9mbGV4X3JlZyA9Cj4gICAJCQkJZ2Vu OF9pc192YWxpZF9mbGV4X2FkZHI7Cj4gICAKPiAtCQkJaWYgKElTX0NIRVJSWVZJRVcoZGV2X3By aXYpKSB7Cj4gLQkJCQlkZXZfcHJpdi0+cGVyZi5vcHMuaXNfdmFsaWRfbXV4X3JlZyA9Cj4gKwkJ CWlmIChJU19DSEVSUllWSUVXKGk5MTUpKSB7Cj4gKwkJCQlwZXJmLT5vcHMuaXNfdmFsaWRfbXV4 X3JlZyA9Cj4gICAJCQkJCWNodl9pc192YWxpZF9tdXhfYWRkcjsKPiAgIAkJCX0KPiAgIAo+IC0J CQlkZXZfcHJpdi0+cGVyZi5vcHMuZW5hYmxlX21ldHJpY19zZXQgPSBnZW44X2VuYWJsZV9tZXRy aWNfc2V0Owo+IC0JCQlkZXZfcHJpdi0+cGVyZi5vcHMuZGlzYWJsZV9tZXRyaWNfc2V0ID0gZ2Vu OF9kaXNhYmxlX21ldHJpY19zZXQ7Cj4gKwkJCXBlcmYtPm9wcy5lbmFibGVfbWV0cmljX3NldCA9 IGdlbjhfZW5hYmxlX21ldHJpY19zZXQ7Cj4gKwkJCXBlcmYtPm9wcy5kaXNhYmxlX21ldHJpY19z ZXQgPSBnZW44X2Rpc2FibGVfbWV0cmljX3NldDsKPiAgIAo+IC0JCQlpZiAoSVNfR0VOKGRldl9w cml2LCA4KSkgewo+IC0JCQkJZGV2X3ByaXYtPnBlcmYuY3R4X29hY3R4Y3RybF9vZmZzZXQgPSAw eDEyMDsKPiAtCQkJCWRldl9wcml2LT5wZXJmLmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4MmNlOwo+ ICsJCQlpZiAoSVNfR0VOKGk5MTUsIDgpKSB7Cj4gKwkJCQlwZXJmLT5jdHhfb2FjdHhjdHJsX29m ZnNldCA9IDB4MTIwOwo+ICsJCQkJcGVyZi0+Y3R4X2ZsZXhldTBfb2Zmc2V0ID0gMHgyY2U7Cj4g ICAKPiAtCQkJCWRldl9wcml2LT5wZXJmLmdlbjhfdmFsaWRfY3R4X2JpdCA9IEJJVCgyNSk7Cj4g KwkJCQlwZXJmLT5nZW44X3ZhbGlkX2N0eF9iaXQgPSBCSVQoMjUpOwo+ICAgCQkJfSBlbHNlIHsK PiAtCQkJCWRldl9wcml2LT5wZXJmLmN0eF9vYWN0eGN0cmxfb2Zmc2V0ID0gMHgxMjg7Cj4gLQkJ CQlkZXZfcHJpdi0+cGVyZi5jdHhfZmxleGV1MF9vZmZzZXQgPSAweDNkZTsKPiArCQkJCXBlcmYt PmN0eF9vYWN0eGN0cmxfb2Zmc2V0ID0gMHgxMjg7Cj4gKwkJCQlwZXJmLT5jdHhfZmxleGV1MF9v ZmZzZXQgPSAweDNkZTsKPiAgIAo+IC0JCQkJZGV2X3ByaXYtPnBlcmYuZ2VuOF92YWxpZF9jdHhf Yml0ID0gQklUKDE2KTsKPiArCQkJCXBlcmYtPmdlbjhfdmFsaWRfY3R4X2JpdCA9IEJJVCgxNik7 Cj4gICAJCQl9Cj4gLQkJfSBlbHNlIGlmIChJU19HRU5fUkFOR0UoZGV2X3ByaXYsIDEwLCAxMSkp IHsKPiAtCQkJZGV2X3ByaXYtPnBlcmYub3BzLmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQo+ICsJ CX0gZWxzZSBpZiAoSVNfR0VOX1JBTkdFKGk5MTUsIDEwLCAxMSkpIHsKPiArCQkJcGVyZi0+b3Bz LmlzX3ZhbGlkX2JfY291bnRlcl9yZWcgPQo+ICAgCQkJCWdlbjdfaXNfdmFsaWRfYl9jb3VudGVy X2FkZHI7Cj4gLQkJCWRldl9wcml2LT5wZXJmLm9wcy5pc192YWxpZF9tdXhfcmVnID0KPiArCQkJ cGVyZi0+b3BzLmlzX3ZhbGlkX211eF9yZWcgPQo+ICAgCQkJCWdlbjEwX2lzX3ZhbGlkX211eF9h ZGRyOwo+IC0JCQlkZXZfcHJpdi0+cGVyZi5vcHMuaXNfdmFsaWRfZmxleF9yZWcgPQo+ICsJCQlw ZXJmLT5vcHMuaXNfdmFsaWRfZmxleF9yZWcgPQo+ICAgCQkJCWdlbjhfaXNfdmFsaWRfZmxleF9h ZGRyOwo+ICAgCj4gLQkJCWRldl9wcml2LT5wZXJmLm9wcy5lbmFibGVfbWV0cmljX3NldCA9IGdl bjhfZW5hYmxlX21ldHJpY19zZXQ7Cj4gLQkJCWRldl9wcml2LT5wZXJmLm9wcy5kaXNhYmxlX21l dHJpY19zZXQgPSBnZW4xMF9kaXNhYmxlX21ldHJpY19zZXQ7Cj4gKwkJCXBlcmYtPm9wcy5lbmFi bGVfbWV0cmljX3NldCA9IGdlbjhfZW5hYmxlX21ldHJpY19zZXQ7Cj4gKwkJCXBlcmYtPm9wcy5k aXNhYmxlX21ldHJpY19zZXQgPSBnZW4xMF9kaXNhYmxlX21ldHJpY19zZXQ7Cj4gICAKPiAtCQkJ aWYgKElTX0dFTihkZXZfcHJpdiwgMTApKSB7Cj4gLQkJCQlkZXZfcHJpdi0+cGVyZi5jdHhfb2Fj dHhjdHJsX29mZnNldCA9IDB4MTI4Owo+IC0JCQkJZGV2X3ByaXYtPnBlcmYuY3R4X2ZsZXhldTBf b2Zmc2V0ID0gMHgzZGU7Cj4gKwkJCWlmIChJU19HRU4oaTkxNSwgMTApKSB7Cj4gKwkJCQlwZXJm LT5jdHhfb2FjdHhjdHJsX29mZnNldCA9IDB4MTI4Owo+ICsJCQkJcGVyZi0+Y3R4X2ZsZXhldTBf b2Zmc2V0ID0gMHgzZGU7Cj4gICAJCQl9IGVsc2Ugewo+IC0JCQkJZGV2X3ByaXYtPnBlcmYuY3R4 X29hY3R4Y3RybF9vZmZzZXQgPSAweDEyNDsKPiAtCQkJCWRldl9wcml2LT5wZXJmLmN0eF9mbGV4 ZXUwX29mZnNldCA9IDB4NzhlOwo+ICsJCQkJcGVyZi0+Y3R4X29hY3R4Y3RybF9vZmZzZXQgPSAw eDEyNDsKPiArCQkJCXBlcmYtPmN0eF9mbGV4ZXUwX29mZnNldCA9IDB4NzhlOwo+ICAgCQkJfQo+ IC0JCQlkZXZfcHJpdi0+cGVyZi5nZW44X3ZhbGlkX2N0eF9iaXQgPSBCSVQoMTYpOwo+ICsJCQlw ZXJmLT5nZW44X3ZhbGlkX2N0eF9iaXQgPSBCSVQoMTYpOwo+ICAgCQl9Cj4gICAJfQo+ICAgCj4g LQlpZiAoZGV2X3ByaXYtPnBlcmYub3BzLmVuYWJsZV9tZXRyaWNfc2V0KSB7Cj4gLQkJSU5JVF9M SVNUX0hFQUQoJmRldl9wcml2LT5wZXJmLnN0cmVhbXMpOwo+IC0JCW11dGV4X2luaXQoJmRldl9w cml2LT5wZXJmLmxvY2spOwo+ICsJaWYgKHBlcmYtPm9wcy5lbmFibGVfbWV0cmljX3NldCkgewo+ ICsJCUlOSVRfTElTVF9IRUFEKCZwZXJmLT5zdHJlYW1zKTsKPiArCQltdXRleF9pbml0KCZwZXJm LT5sb2NrKTsKPiAgIAo+ICAgCQlvYV9zYW1wbGVfcmF0ZV9oYXJkX2xpbWl0ID0gMTAwMCAqCj4g LQkJCShSVU5USU1FX0lORk8oZGV2X3ByaXYpLT5jc190aW1lc3RhbXBfZnJlcXVlbmN5X2toeiAv IDIpOwo+IC0JCWRldl9wcml2LT5wZXJmLnN5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9zeXNjdGxf dGFibGUoZGV2X3Jvb3QpOwo+ICsJCQkoUlVOVElNRV9JTkZPKGk5MTUpLT5jc190aW1lc3RhbXBf ZnJlcXVlbmN5X2toeiAvIDIpOwo+ICsJCXBlcmYtPnN5c2N0bF9oZWFkZXIgPSByZWdpc3Rlcl9z eXNjdGxfdGFibGUoZGV2X3Jvb3QpOwo+ICAgCj4gLQkJbXV0ZXhfaW5pdCgmZGV2X3ByaXYtPnBl cmYubWV0cmljc19sb2NrKTsKPiAtCQlpZHJfaW5pdCgmZGV2X3ByaXYtPnBlcmYubWV0cmljc19p ZHIpOwo+ICsJCW11dGV4X2luaXQoJnBlcmYtPm1ldHJpY3NfbG9jayk7Cj4gKwkJaWRyX2luaXQo JnBlcmYtPm1ldHJpY3NfaWRyKTsKPiAgIAo+ICAgCQkvKiBXZSBzZXQgdXAgc29tZSByYXRlbGlt aXQgc3RhdGUgdG8gcG90ZW50aWFsbHkgdGhyb3R0bGUgYW55Cj4gICAJCSAqIF9OT1RFUyBhYm91 dCBzcHVyaW91cywgaW52YWxpZCBPQSByZXBvcnRzIHdoaWNoIHdlIGRvbid0Cj4gQEAgLTM2Mzks NDQgKzM2MzAsNDAgQEAgdm9pZCBpOTE1X3BlcmZfaW5pdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYpCj4gICAJCSAqCj4gICAJCSAqIFVzaW5nIHRoZSBzYW1lIGxpbWl0aW5nIGZh Y3RvcnMgYXMgcHJpbnRrX3JhdGVsaW1pdCgpCj4gICAJCSAqLwo+IC0JCXJhdGVsaW1pdF9zdGF0 ZV9pbml0KCZkZXZfcHJpdi0+cGVyZi5zcHVyaW91c19yZXBvcnRfcnMsCj4gLQkJCQkgICAgIDUg KiBIWiwgMTApOwo+ICsJCXJhdGVsaW1pdF9zdGF0ZV9pbml0KCZwZXJmLT5zcHVyaW91c19yZXBv cnRfcnMsIDUgKiBIWiwgMTApOwo+ICAgCQkvKiBTaW5jZSB3ZSB1c2UgYSBEUk1fTk9URSBmb3Ig c3B1cmlvdXMgcmVwb3J0cyBpdCB3b3VsZCBiZQo+ICAgCQkgKiBpbmNvbnNpc3RlbnQgdG8gbGV0 IF9fcmF0ZWxpbWl0KCkgYXV0b21hdGljYWxseSBwcmludCBhCj4gICAJCSAqIHdhcm5pbmcgZm9y IHRocm90dGxpbmcuCj4gICAJCSAqLwo+IC0JCXJhdGVsaW1pdF9zZXRfZmxhZ3MoJmRldl9wcml2 LT5wZXJmLnNwdXJpb3VzX3JlcG9ydF9ycywKPiArCQlyYXRlbGltaXRfc2V0X2ZsYWdzKCZwZXJm LT5zcHVyaW91c19yZXBvcnRfcnMsCj4gICAJCQkJICAgIFJBVEVMSU1JVF9NU0dfT05fUkVMRUFT RSk7Cj4gICAKPiAtCQlkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCA9IHRydWU7Cj4gKwkJcGVy Zi0+aTkxNSA9IGk5MTU7Cj4gICAJfQo+ICAgfQo+ICAgCj4gICBzdGF0aWMgaW50IGRlc3Ryb3lf Y29uZmlnKGludCBpZCwgdm9pZCAqcCwgdm9pZCAqZGF0YSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRhdGE7Cj4gLQlzdHJ1Y3QgaTkxNV9vYV9jb25maWcg Km9hX2NvbmZpZyA9IHA7Cj4gLQo+IC0JcHV0X29hX2NvbmZpZyhkZXZfcHJpdiwgb2FfY29uZmln KTsKPiAtCj4gKwlwdXRfb2FfY29uZmlnKHApOwo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4g ICAvKioKPiAgICAqIGk5MTVfcGVyZl9maW5pIC0gQ291bnRlciBwYXJ0IHRvIGk5MTVfcGVyZl9p bml0KCkKPiAtICogQGRldl9wcml2OiBpOTE1IGRldmljZSBpbnN0YW5jZQo+ICsgKiBAaTkxNTog aTkxNSBkZXZpY2UgaW5zdGFuY2UKPiAgICAqLwo+IC12b2lkIGk5MTVfcGVyZl9maW5pKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiArdm9pZCBpOTE1X3BlcmZfZmluaShzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgIHsKPiAtCWlmICghZGV2X3ByaXYtPnBlcmYu aW5pdGlhbGl6ZWQpCj4gLQkJcmV0dXJuOwo+ICsJc3RydWN0IGk5MTVfcGVyZiAqcGVyZiA9ICZp OTE1LT5wZXJmOwo+ICAgCj4gLQlpZHJfZm9yX2VhY2goJmRldl9wcml2LT5wZXJmLm1ldHJpY3Nf aWRyLCBkZXN0cm95X2NvbmZpZywgZGV2X3ByaXYpOwo+IC0JaWRyX2Rlc3Ryb3koJmRldl9wcml2 LT5wZXJmLm1ldHJpY3NfaWRyKTsKPiArCWlmICghcGVyZi0+aTkxNSkKPiArCQlyZXR1cm47Cj4g ICAKPiAtCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKGRldl9wcml2LT5wZXJmLnN5c2N0bF9oZWFk ZXIpOwo+ICsJaWRyX2Zvcl9lYWNoKCZwZXJmLT5tZXRyaWNzX2lkciwgZGVzdHJveV9jb25maWcs IHBlcmYpOwo+ICsJaWRyX2Rlc3Ryb3koJnBlcmYtPm1ldHJpY3NfaWRyKTsKPiAgIAo+IC0JbWVt c2V0KCZkZXZfcHJpdi0+cGVyZi5vcHMsIDAsIHNpemVvZihkZXZfcHJpdi0+cGVyZi5vcHMpKTsK PiArCXVucmVnaXN0ZXJfc3lzY3RsX3RhYmxlKHBlcmYtPnN5c2N0bF9oZWFkZXIpOwo+ICAgCj4g LQlkZXZfcHJpdi0+cGVyZi5pbml0aWFsaXplZCA9IGZhbHNlOwo+ICsJbWVtc2V0KCZwZXJmLT5v cHMsIDAsIHNpemVvZihwZXJmLT5vcHMpKTsKPiArCXBlcmYtPmk5MTUgPSBOVUxMOwo+ICAgfQoK Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdm eCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdmeA==