From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 17/49] drm/i915: Implement inter-engine read-read optimisations Date: Mon, 30 Mar 2015 14:52:26 +0100 Message-ID: <5519551A.8040204@linux.intel.com> References: <1427454141-4000-1-git-send-email-chris@chris-wilson.co.uk> <1427454141-4000-18-git-send-email-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id E5A236E5BB for ; Mon, 30 Mar 2015 06:52:28 -0700 (PDT) In-Reply-To: <1427454141-4000-18-git-send-email-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: Lionel Landwerlin List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMDMvMjcvMjAxNSAxMTowMSBBTSwgQ2hyaXMgV2lsc29uIHdyb3RlOgo+IEN1cnJl bnRseSwgd2Ugb25seSB0cmFjayB0aGUgbGFzdCByZXF1ZXN0IGdsb2JhbGx5IGFjcm9zcyBhbGwg ZW5naW5lcy4KPiBUaGlzIHByZXZlbnRzIHVzIGZyb20gaXNzdWluZyBjb25jdXJyZW50IHJlYWQg cmVxdWVzdHMgb24gZS5nLiB0aGUgUkNTCj4gYW5kIEJDUyBlbmdpbmVzIChvciBtb3JlIGxpa2Vs eSB0aGUgcmVuZGVyIGFuZCBtZWRpYSBlbmdpbmVzKS4gV2l0aG91dAo+IHNlbWFwaG9yZXMsIHdl IGluY3VyIGNvc3RseSBzdGFsbHMgYXMgd2Ugc3luY2hyb25pc2UgYmV0d2VlbiByaW5ncyAtCj4g Z3JlYXRseSBpbXBhY3RpbmcgdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2Ugb2YgQnJvYWR3ZWxsIHZl cnN1cyBIYXN3ZWxsIGluCj4gY2VydGFpbiB3b3JrbG9hZHMgKGxpa2UgdmlkZW8gZGVjb2RlKS4g V2l0aCB0aGUgaW50cm9kdWN0aW9uIG9mCj4gcmVmZXJlbmNlIGNvdW50ZWQgcmVxdWVzdHMsIGl0 IGlzIG11Y2ggZWFzaWVyIHRvIHRyYWNrIHRoZSBsYXN0IHJlcXVlc3QKPiBwZXIgcmluZywgYXMg d2VsbCBhcyB0aGUgbGFzdCBnbG9iYWwgd3JpdGUgcmVxdWVzdCBzbyB0aGF0IHdlIGNhbgo+IG9w dGltaXNlIGludGVyLWVuZ2luZSByZWFkIHJlYWQgcmVxdWVzdHMgKGFzIHdlbGwgYXMgYmV0dGVy IG9wdGltaXNlCj4gY2VydGFpbiBDUFUgd2FpdHMpLgo+Cj4gdjI6IEZpeCBpbnZlcnRlZCByZWFk b25seSBjb25kaXRpb24gZm9yIG5vbmJsb2NraW5nIHdhaXRzLgo+IHYzOiBIYW5kbGUgbm9uLWNv bnRpbmd1b3VzIGVuZ2luZSBhcnJheSBhZnRlciB3YWl0cwo+IHY0OiBSZWJhc2UsIHRpZHksIHJl d3JpdGUgcmluZyBsaXN0IGRlYnVnZ2luZwo+IHY1OiBVc2Ugb2JqLT5hY3RpdmUgYXMgYSBiaXRm aWVsZCwgaXQgbG9va3MgY29vbAo+IHY2OiBNaWNyby1vcHRpbWlzZSwgbW9zdGx5IGludm9sdmlu ZyBtb3ZpbmcgY29kZSBhcm91bmQKPgo+IEJlbmNobWFyazogaWd0L2dlbV9yZWFkX3JlYWRfc3Bl ZWQKPiBoc3c6Z3QzZSAod2l0aCBzZW1hcGhvcmVzKToKPiBCZWZvcmU6IFRpbWUgdG8gcmVhZC1y ZWFkIDEwMjRrOgkJMjc1Ljc5NMK1cwo+IEFmdGVyOiAgVGltZSB0byByZWFkLXJlYWQgMTAyNGs6 CQkxMjMuMjYwwrVzCj4KPiBoc3c6Z3QzZSAody9vIHNlbWFwaG9yZXMpOgo+IEJlZm9yZTogVGlt ZSB0byByZWFkLXJlYWQgMTAyNGs6CQkyMzAuNDMzwrVzCj4gQWZ0ZXI6ICBUaW1lIHRvIHJlYWQt cmVhZCAxMDI0azoJCTEyNC41OTPCtXMKPgo+IGJkdy11ICh3L28gc2VtYXBob3Jlcyk6ICAgICAg ICAgICAgIEJlZm9yZSAgICAgICAgICBBZnRlcgo+IFRpbWUgdG8gcmVhZC1yZWFkIDF4MTogICAg ICAgICAgICAyNi4yNzTCtXMgICAgICAgMTAuMzUwwrVzCj4gVGltZSB0byByZWFkLXJlYWQgMTI4 eDEyODogICAgICAgIDQwLjA5N8K1cyAgICAgICAyMS4zNjbCtXMKPiBUaW1lIHRvIHJlYWQtcmVh ZCAyNTZ4MjU2OiAgICAgICAgNzcuMDg3wrVzICAgICAgIDQyLjYwOMK1cwo+IFRpbWUgdG8gcmVh ZC1yZWFkIDUxMng1MTI6ICAgICAgIDI4MS45OTnCtXMgICAgICAxODEuMTU1wrVzCj4gVGltZSB0 byByZWFkLXJlYWQgMTAyNHgxMDI0OiAgICAxMTk2LjE0McK1cyAgICAgMTExOC4yMjPCtXMKPiBU aW1lIHRvIHJlYWQtcmVhZCAyMDQ4eDIwNDg6ICAgIDU2MzkuMDcywrVzICAgICA1MjI1LjgzN8K1 cwo+IFRpbWUgdG8gcmVhZC1yZWFkIDQwOTZ4NDA5NjogICAyMjQwMS42NjLCtXMgICAgMjExMzcu MDY3wrVzCj4gVGltZSB0byByZWFkLXJlYWQgODE5Mng4MTkyOiAgIDg5NjE3LjczNcK1cyAgICA4 NTYzNy42ODHCtXMKPgo+IFRlc3RjYXNlOiBpZ3QvZ2VtX2NvbmN1cnJlbnRfYmxpdCAocmVhZC1y ZWFkIGFuZCBmcmllbmRzKQo+IENjOiBMaW9uZWwgTGFuZHdlcmxpbiA8bGlvbmVsLmcubGFuZHdl cmxpbkBsaW51eC5pbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJp c0BjaHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2RlYnVnZnMuYyAgICAgfCAgMTYgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICB8ICAxOSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyAg ICAgICAgIHwgNTE2ICsrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgfCAgIDIgLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fZGVidWcuYyAgIHwgIDkyICsrLS0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYyAgIHwgIDE5ICstCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9kaXNwbGF5LmMgICAgfCAgIDQgKy0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jICAgICAgICB8ICAxNSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfcmluZ2J1ZmZlci5jIHwgIDEwICstCj4gICA5IGZpbGVzIGNoYW5nZWQsIDM4NiBpbnNlcnRp b25zKCspLCAzMDcgZGVsZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMu Ywo+IGluZGV4IDdlZjYyOTU0MzhlOS4uNWNlYTlhOWMxY2I5IDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kZWJ1Z2ZzLmMKPiBAQCAtMTIwLDEwICsxMjAsMTMgQEAgc3RhdGljIGlubGluZSBj b25zdCBjaGFyICpnZXRfZ2xvYmFsX2ZsYWcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9i aikKPiAgIHN0YXRpYyB2b2lkCj4gICBkZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShvYmotPmJhc2UuZGV2KTsKPiArCXN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKnJpbmc7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gICAJaW50 IHBpbl9jb3VudCA9IDA7Cj4gKwlpbnQgaTsKPgo+IC0Jc2VxX3ByaW50ZihtLCAiJXBLOiAlcyVz JXMlcyAlOHpkS2lCICUwMnggJTAyeCAleCAleCAleCVzJXMlcyIsCj4gKwlzZXFfcHJpbnRmKG0s ICIlcEs6ICVzJXMlcyVzICU4emRLaUIgJTAyeCAlMDJ4IFsgIiwKPiAgIAkJICAgJm9iai0+YmFz ZSwKPiAgIAkJICAgb2JqLT5hY3RpdmUgPyAiKiIgOiAiICIsCj4gICAJCSAgIGdldF9waW5fZmxh ZyhvYmopLAo+IEBAIC0xMzEsOCArMTM0LDExIEBAIGRlc2NyaWJlX29iaihzdHJ1Y3Qgc2VxX2Zp bGUgKm0sIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gICAJCSAgIGdldF9nbG9i YWxfZmxhZyhvYmopLAo+ICAgCQkgICBvYmotPmJhc2Uuc2l6ZSAvIDEwMjQsCj4gICAJCSAgIG9i ai0+YmFzZS5yZWFkX2RvbWFpbnMsCj4gLQkJICAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiwKPiAt CQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXEpLAo+ICsJ CSAgIG9iai0+YmFzZS53cml0ZV9kb21haW4pOwo+ICsJZm9yX2VhY2hfcmluZyhyaW5nLCBkZXZf cHJpdiwgaSkKPiArCQlzZXFfcHJpbnRmKG0sICIleCAiLAo+ICsJCQkJaTkxNV9nZW1fcmVxdWVz dF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3JlYWRfcmVxW2ldKSk7Cj4gKwlzZXFfcHJpbnRmKG0sICJd ICV4ICV4JXMlcyVzIiwKPiAgIAkJICAgaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5s YXN0X3dyaXRlX3JlcSksCj4gICAJCSAgIGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKG9iai0+ bGFzdF9mZW5jZWRfcmVxKSwKPiAgIAkJICAgaTkxNV9jYWNoZV9sZXZlbF9zdHIodG9faTkxNShv YmotPmJhc2UuZGV2KSwgb2JqLT5jYWNoZV9sZXZlbCksCj4gQEAgLTE2OSw5ICsxNzUsOSBAQCBk ZXNjcmliZV9vYmooc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqKQo+ICAgCQkqdCA9ICdcMCc7Cj4gICAJCXNlcV9wcmludGYobSwgIiAoJXMgbWFwcGFi bGUpIiwgcyk7Cj4gICAJfQo+IC0JaWYgKG9iai0+bGFzdF9yZWFkX3JlcSAhPSBOVUxMKQo+ICsJ aWYgKG9iai0+bGFzdF93cml0ZV9yZXEgIT0gTlVMTCkKPiAgIAkJc2VxX3ByaW50ZihtLCAiICgl cykiLAo+IC0JCQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3Jl cSktPm5hbWUpOwo+ICsJCQkgICBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF93 cml0ZV9yZXEpLT5uYW1lKTsKPiAgIAlpZiAob2JqLT5mcm9udGJ1ZmZlcl9iaXRzKQo+ICAgCQlz ZXFfcHJpbnRmKG0sICIgKGZyb250YnVmZmVyOiAweCUwM3gpIiwgb2JqLT5mcm9udGJ1ZmZlcl9i aXRzKTsKPiAgIH0KPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBpbmRleCA4OTZhYWUxYzEwYWMu LjdjZjVkMWIwYTc0OSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IEBAIC01MDAsNyAr NTAwLDcgQEAgc3RydWN0IGRybV9pOTE1X2Vycm9yX3N0YXRlIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5 MTVfZXJyb3JfYnVmZmVyIHsKPiAgIAkJdTMyIHNpemU7Cj4gICAJCXUzMiBuYW1lOwo+IC0JCXUz MiByc2Vxbm8sIHdzZXFubzsKPiArCQl1MzIgcnNlcW5vW0k5MTVfTlVNX1JJTkdTXSwgd3NlcW5v Owo+ICAgCQl1MzIgZ3R0X29mZnNldDsKPiAgIAkJdTMyIHJlYWRfZG9tYWluczsKPiAgIAkJdTMy IHdyaXRlX2RvbWFpbjsKPiBAQCAtMTkwNSw3ICsxOTA1LDcgQEAgc3RydWN0IGRybV9pOTE1X2dl bV9vYmplY3Qgewo+ICAgCXN0cnVjdCBkcm1fbW1fbm9kZSAqc3RvbGVuOwo+ICAgCXN0cnVjdCBs aXN0X2hlYWQgZ2xvYmFsX2xpc3Q7Cj4KPiAtCXN0cnVjdCBsaXN0X2hlYWQgcmluZ19saXN0Owo+ ICsJc3RydWN0IGxpc3RfaGVhZCByaW5nX2xpc3RbSTkxNV9OVU1fUklOR1NdOwo+ICAgCS8qKiBV c2VkIGluIGV4ZWNidWYgdG8gdGVtcG9yYXJpbHkgaG9sZCBhIHJlZiAqLwo+ICAgCXN0cnVjdCBs aXN0X2hlYWQgb2JqX2V4ZWNfbGluazsKPgo+IEBAIC0xOTE2LDcgKzE5MTYsNyBAQCBzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX29iamVjdCB7Cj4gICAJICogcmVuZGVyaW5nIGFuZCBzbyBhIG5vbi16ZXJv IHNlcW5vKSwgYW5kIGlzIG5vdCBzZXQgaWYgaXQgaSBzIG9uCj4gICAJICogaW5hY3RpdmUgKHJl YWR5IHRvIGJlIHVuYm91bmQpIGxpc3QuCj4gICAJICovCj4gLQl1bnNpZ25lZCBpbnQgYWN0aXZl OjE7Cj4gKwl1bnNpZ25lZCBpbnQgYWN0aXZlOkk5MTVfTlVNX1JJTkdTOwo+Cj4gICAJLyoqCj4g ICAJICogVGhpcyBpcyBzZXQgaWYgdGhlIG9iamVjdCBoYXMgYmVlbiB3cml0dGVuIHRvIHNpbmNl IGxhc3QgYm91bmQKPiBAQCAtMTk4Nyw4ICsxOTg3LDE3IEBAIHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0IHsKPiAgIAl2b2lkICpkbWFfYnVmX3ZtYXBwaW5nOwo+ICAgCWludCB2bWFwcGluZ19j b3VudDsKPgo+IC0JLyoqIEJyZWFkY3J1bWIgb2YgbGFzdCByZW5kZXJpbmcgdG8gdGhlIGJ1ZmZl ci4gKi8KPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqbGFzdF9yZWFkX3JlcTsKPiAr CS8qKiBCcmVhZGNydW1iIG9mIGxhc3QgcmVuZGVyaW5nIHRvIHRoZSBidWZmZXIuCj4gKwkgKiBU aGVyZSBjYW4gb25seSBiZSBvbmUgd3JpdGVyLCBidXQgd2UgYWxsb3cgZm9yIG11bHRpcGxlIHJl YWRlcnMuCj4gKwkgKiBJZiB0aGVyZSBpcyBhIHdyaXRlciB0aGF0IG5lY2Vzc2FyaWx5IGltcGxp ZXMgdGhhdCBhbGwgb3RoZXIKPiArCSAqIHJlYWQgcmVxdWVzdHMgYXJlIGNvbXBsZXRlIC0gYnV0 IHdlIG1heSBvbmx5IGJlIGxhemlseSBjbGVhcmluZwo+ICsJICogdGhlIHJlYWQgcmVxdWVzdHMu IEEgcmVhZCByZXF1ZXN0IGlzIG5hdHVyYWxseSB0aGUgbW9zdCByZWNlbnQKPiArCSAqIHJlcXVl c3Qgb24gYSByaW5nLCBzbyB3ZSBtYXkgaGF2ZSB0d28gZGlmZmVyZW50IHdyaXRlIGFuZCByZWFk Cj4gKwkgKiByZXF1ZXN0cyBvbiBvbmUgcmluZyB3aGVyZSB0aGUgd3JpdGUgcmVxdWVzdCBpcyBv bGRlciB0aGFuIHRoZQo+ICsJICogcmVhZCByZXF1ZXN0LiBUaGlzIGFsbG93cyBmb3IgdGhlIENQ VSB0byByZWFkIGZyb20gYW4gYWN0aXZlCj4gKwkgKiBidWZmZXIgYnkgb25seSB3YWl0aW5nIGZv ciB0aGUgd3JpdGUgdG8gY29tcGxldGUuCj4gKwkgKiAqLwo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9yZXF1ZXN0ICpsYXN0X3JlYWRfcmVxW0k5MTVfTlVNX1JJTkdTXTsKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3Rfd3JpdGVfcmVxOwo+ICAgCS8qKiBCcmVhZGNydW1iIG9m IGxhc3QgZmVuY2VkIEdQVSBhY2Nlc3MgdG8gdGhlIGJ1ZmZlci4gKi8KPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX3JlcXVlc3QgKmxhc3RfZmVuY2VkX3JlcTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt LmMKPiBpbmRleCBkYzNlYWZlN2Y3ZDQuLjdlNmYyNTYwYmYzNSAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW0uYwo+IEBAIC0zOCwxNCArMzgsMTcgQEAKPiAgICNpbmNsdWRlIDxsaW51eC9wY2ku aD4KPiAgICNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4KPiArI2RlZmluZSBSUV9CVUdfT04o ZXhwcikKPiArCj4gICBzdGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfZmx1c2hfZ3R0X3dyaXRl X2RvbWFpbihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiAgIHN0YXRpYyB2b2lk IGk5MTVfZ2VtX29iamVjdF9mbHVzaF9jcHVfd3JpdGVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmopOwo+ICtzdGF0aWMgdm9pZAo+ICtpOTE1X2dlbV9vYmplY3RfcmV0aXJl X193cml0ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKTsKPiArc3RhdGljIHZvaWQK PiAraTkxNV9nZW1fb2JqZWN0X3JldGlyZV9fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVj dCAqb2JqLCBpbnQgcmluZyk7Cj4gICBzdGF0aWMgX19tdXN0X2NoZWNrIGludAo+ICAgaTkxNV9n ZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmos Cj4gICAJCQkgICAgICAgYm9vbCByZWFkb25seSk7Cj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfZ2Vt X29iamVjdF9yZXRpcmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gLQo+ICAg c3RhdGljIHZvaWQgaTkxNV9nZW1fd3JpdGVfZmVuY2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldiwg aW50IHJlZywKPiAgIAkJCQkgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaik7Cj4gICBz dGF0aWMgdm9pZCBpOTE1X2dlbV9vYmplY3RfdXBkYXRlX2ZlbmNlKHN0cnVjdCBkcm1faTkxNV9n ZW1fb2JqZWN0ICpvYmosCj4gQEAgLTUxOCw4ICs1MjEsNiBAQCBpbnQgaTkxNV9nZW1fb2JqX3By ZXBhcmVfc2htZW1fcmVhZChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+ICAgCQly ZXQgPSBpOTE1X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmcob2JqLCB0cnVlKTsKPiAgIAkJaWYg KHJldCkKPiAgIAkJCXJldHVybiByZXQ7Cj4gLQo+IC0JCWk5MTVfZ2VtX29iamVjdF9yZXRpcmUo b2JqKTsKPiAgIAl9Cj4KPiAgIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZ2V0X3BhZ2VzKG9iaik7 Cj4gQEAgLTkzOSw4ICs5NDAsNiBAQCBpOTE1X2dlbV9zaG1lbV9wd3JpdGUoc3RydWN0IGRybV9k ZXZpY2UgKmRldiwKPiAgIAkJcmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9i aiwgZmFsc2UpOwo+ICAgCQlpZiAocmV0KQo+ICAgCQkJcmV0dXJuIHJldDsKPiAtCj4gLQkJaTkx NV9nZW1fb2JqZWN0X3JldGlyZShvYmopOwo+ICAgCX0KPiAgIAkvKiBTYW1lIHRyaWNrIGFwcGxp ZXMgdG8gaW52YWxpZGF0ZSBwYXJ0aWFsbHkgd3JpdHRlbiBjYWNoZWxpbmVzIHJlYWQKPiAgIAkg KiBiZWZvcmUgd3JpdGluZy4gKi8KPiBAQCAtMTIzOSw2ICsxMjM4LDkgQEAgaW50IF9faTkxNV93 YWl0X3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEsCj4KPiAgIAlXQVJO KCFpbnRlbF9pcnFzX2VuYWJsZWQoZGV2X3ByaXYpLCAiSVJRcyBkaXNhYmxlZCIpOwo+Cj4gKwlp ZiAobGlzdF9lbXB0eSgmcmVxLT5saXN0KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gICAJaWYgKGk5 MTVfZ2VtX3JlcXVlc3RfY29tcGxldGVkKHJlcSwgdHJ1ZSkpCj4gICAJCXJldHVybiAwOwo+Cj4g QEAgLTEzMzgsNiArMTM0MCw1NiBAQCBvdXQ6Cj4gICAJcmV0dXJuIHJldDsKPiAgIH0KPgo+ICtz dGF0aWMgaW5saW5lIHZvaWQKPiAraTkxNV9nZW1fcmVxdWVzdF9yZW1vdmVfZnJvbV9jbGllbnQo c3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3ByaXYgPSByZXF1ZXN0LT5maWxlX3ByaXY7Cj4gKwo+ ICsJaWYgKCFmaWxlX3ByaXYpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXNwaW5fbG9jaygmZmlsZV9w cml2LT5tbS5sb2NrKTsKPiArCWxpc3RfZGVsKCZyZXF1ZXN0LT5jbGllbnRfbGlzdCk7Cj4gKwly ZXF1ZXN0LT5maWxlX3ByaXYgPSBOVUxMOwo+ICsJc3Bpbl91bmxvY2soJmZpbGVfcHJpdi0+bW0u bG9jayk7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKPiArewo+ICsJdHJhY2VfaTkxNV9n ZW1fcmVxdWVzdF9yZXRpcmUocmVxdWVzdCk7Cj4gKwo+ICsJbGlzdF9kZWxfaW5pdCgmcmVxdWVz dC0+bGlzdCk7Cj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXF1ZXN0 KTsKPiArCj4gKwlwdXRfcGlkKHJlcXVlc3QtPnBpZCk7Cj4gKwo+ICsJaTkxNV9nZW1fcmVxdWVz dF91bnJlZmVyZW5jZShyZXF1ZXN0KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQKPiArX19pOTE1 X2dlbV9yZXF1ZXN0X3JldGlyZV9fdXB0byhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJx KQoKSXQgaXMgYSBiaXQgYW5ub3lpbmcgKGZvciByZWFkYWJpbGl0eSkgdGhhdCBpdCBjYW4gYmUg cnEsIHJlcSBhbmQgcmVxdWVzdC4KCj4gK3sKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSA9IHJxLT5yaW5nOwo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmVuZ2luZS0+ZGV2 LT5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWlmIChsaXN0X2VtcHR5KCZycS0+bGlzdCkpCj4gKwkJ cmV0dXJuOwo+ICsKPiArCXJxLT5yaW5nYnVmLT5sYXN0X3JldGlyZWRfaGVhZCA9IHJxLT5wb3N0 Zml4Owo+ICsKPiArCWRvIHsKPiArCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnByZXYg PQo+ICsJCQlsaXN0X2VudHJ5KHJxLT5saXN0LnByZXYsIHR5cGVvZigqcnEpLCBsaXN0KTsKPiAr Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUocnEpOwo+ICsKPiArCQlycSA9IHByZXY7Cj4g Kwl9IHdoaWxlICgmcnEtPmxpc3QgIT0gJmVuZ2luZS0+cmVxdWVzdF9saXN0KTsKPiArCj4gKwlX QVJOX09OKGk5MTVfdmVyaWZ5X2xpc3RzKGVuZ2luZS0+ZGV2KSk7Cj4gK30KPiArCj4gICAvKioK PiAgICAqIFdhaXRzIGZvciBhIHJlcXVlc3QgdG8gYmUgc2lnbmFsZWQsIGFuZCBjbGVhbnMgdXAg dGhlCj4gICAgKiByZXF1ZXN0IGFuZCBvYmplY3QgbGlzdHMgYXBwcm9wcmlhdGVseSBmb3IgdGhh dCBldmVudC4KPiBAQCAtMTM0OCw3ICsxNDAwLDYgQEAgaTkxNV93YWl0X3JlcXVlc3Qoc3RydWN0 IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpyZXEpCj4gICAJc3RydWN0IGRybV9kZXZpY2UgKmRldjsK PiAgIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXY7Cj4gICAJYm9vbCBpbnRlcnJ1 cHRpYmxlOwo+IC0JdW5zaWduZWQgcmVzZXRfY291bnRlcjsKPiAgIAlpbnQgcmV0Owo+Cj4gICAJ QlVHX09OKHJlcSA9PSBOVUxMKTsKPiBAQCAtMTM2NywyOSArMTQxOCwxMyBAQCBpOTE1X3dhaXRf cmVxdWVzdChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcSkKPiAgIAlpZiAocmV0KQo+ ICAgCQlyZXR1cm4gcmV0Owo+Cj4gLQlyZXNldF9jb3VudGVyID0gYXRvbWljX3JlYWQoJmRldl9w cml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7Cj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3JlZmVy ZW5jZShyZXEpOwo+IC0JcmV0ID0gX19pOTE1X3dhaXRfcmVxdWVzdChyZXEsIHJlc2V0X2NvdW50 ZXIsCj4gKwlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcSwKPiArCQkJCSAgYXRvbWljX3Jl YWQoJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlciksCj4gICAJCQkJICBpbnRlcnJ1 cHRpYmxlLCBOVUxMLCBOVUxMKTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3RfdW5yZWZlcmVuY2UocmVx KTsKPiAtCXJldHVybiByZXQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyBpbnQKPiAtaTkxNV9nZW1fb2Jq ZWN0X3dhaXRfcmVuZGVyaW5nX190YWlsKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmop Cj4gLXsKPiAtCWlmICghb2JqLT5hY3RpdmUpCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0JLyogTWFu dWFsbHkgbWFuYWdlIHRoZSB3cml0ZSBmbHVzaCBhcyB3ZSBtYXkgaGF2ZSBub3QgeWV0Cj4gLQkg KiByZXRpcmVkIHRoZSBidWZmZXIuCj4gLQkgKgo+IC0JICogTm90ZSB0aGF0IHRoZSBsYXN0X3dy aXRlX3JlcSBpcyBhbHdheXMgdGhlIGVhcmxpZXIgb2YKPiAtCSAqIHRoZSB0d28gKHJlYWQvd3Jp dGUpIHJlcXVlc3RzLCBzbyBpZiB3ZSBoYXZlZCBzdWNjZXNzZnVsbHkgd2FpdGVkLAo+IC0JICog d2Uga25vdyB3ZSBoYXZlIHBhc3NlZCB0aGUgbGFzdCB3cml0ZS4KPiAtCSAqLwo+IC0JaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF93cml0ZV9yZXEsIE5VTEwpOwo+ICsJaWYgKHJl dCkKPiArCQlyZXR1cm4gcmV0Owo+Cj4gKwlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRv KHJlcSk7Cj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4KPiBAQCAtMTQwMSwxOCArMTQzNiwzOCBAQCBz dGF0aWMgX19tdXN0X2NoZWNrIGludAo+ICAgaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5n KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkgICAgICAgYm9vbCByZWFk b25seSkKPiAgIHsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxOwo+IC0JaW50 IHJldDsKPiArCWludCByZXQsIGk7Cj4KPiAtCXJlcSA9IHJlYWRvbmx5ID8gb2JqLT5sYXN0X3dy aXRlX3JlcSA6IG9iai0+bGFzdF9yZWFkX3JlcTsKPiAtCWlmICghcmVxKQo+ICsJaWYgKCFvYmot PmFjdGl2ZSkKPiAgIAkJcmV0dXJuIDA7Cj4KPiAtCXJldCA9IGk5MTVfd2FpdF9yZXF1ZXN0KHJl cSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4gKwlpZiAocmVhZG9ubHkpIHsKPiAr CQlpZiAob2JqLT5sYXN0X3dyaXRlX3JlcSAhPSBOVUxMKSB7Cj4gKwkJCXJldCA9IGk5MTVfd2Fp dF9yZXF1ZXN0KG9iai0+bGFzdF93cml0ZV9yZXEpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJcmV0 dXJuIHJldDsKPgo+IC0JcmV0dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fdGFp bChvYmopOwo+ICsJCQlpID0gb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+aWQ7Cj4gKwkJCWlm IChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gb2JqLT5sYXN0X3dyaXRlX3JlcSkKPiArCQkJCWk5 MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQob2JqLCBpKTsKPiArCQkJZWxzZQo+ICsJCQkJaTkx NV9nZW1fb2JqZWN0X3JldGlyZV9fd3JpdGUob2JqKTsKPiArCQl9Cj4gKwl9IGVsc2Ugewo+ICsJ CWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4gKwkJCWlmIChvYmotPmxh c3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKPiArCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJcmV0ID0g aTkxNV93YWl0X3JlcXVlc3Qob2JqLT5sYXN0X3JlYWRfcmVxW2ldKTsKPiArCQkJaWYgKHJldCkK PiArCQkJCXJldHVybiByZXQ7Cj4gKwo+ICsJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX19yZWFk KG9iaiwgaSk7Cj4gKwkJfQo+ICsJCVJRX0JVR19PTihvYmotPmFjdGl2ZSk7Cj4gKwl9Cj4gKwo+ ICsJcmV0dXJuIDA7Cj4gICB9Cj4KPiAgIC8qIEEgbm9uYmxvY2tpbmcgdmFyaWFudCBvZiB0aGUg YWJvdmUgd2FpdC4gVGhpcyBpcyBhIGhpZ2hseSBkYW5nZXJvdXMgcm91dGluZQo+IEBAIC0xNDIz LDM3ICsxNDc4LDcyIEBAIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZ19fbm9uYmxvY2tp bmcoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCQkJICAgIHN0cnVjdCBk cm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiwKPiAgIAkJCQkJICAgIGJvb2wgcmVhZG9u bHkpCj4gICB7Cj4gLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiAgIAlzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2ID0gb2JqLT5iYXNlLmRldjsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVf cHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0c1tJOTE1X05VTV9SSU5HU107Cj4gICAJdW5zaWduZWQgcmVz ZXRfY291bnRlcjsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0LCBpLCBuID0gMDsKPgo+ICAgCUJV R19PTighbXV0ZXhfaXNfbG9ja2VkKCZkZXYtPnN0cnVjdF9tdXRleCkpOwo+ICAgCUJVR19PTigh ZGV2X3ByaXYtPm1tLmludGVycnVwdGlibGUpOwo+Cj4gLQlyZXEgPSByZWFkb25seSA/IG9iai0+ bGFzdF93cml0ZV9yZXEgOiBvYmotPmxhc3RfcmVhZF9yZXE7Cj4gLQlpZiAoIXJlcSkKPiArCWlm ICghb2JqLT5hY3RpdmUpCj4gICAJCXJldHVybiAwOwo+Cj4gICAJcmV0ID0gaTkxNV9nZW1fY2hl Y2tfd2VkZ2UoJmRldl9wcml2LT5ncHVfZXJyb3IsIHRydWUpOwo+ICAgCWlmIChyZXQpCj4gICAJ CXJldHVybiByZXQ7Cj4KPiAtCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihyZXEpOwo+IC0JaWYg KHJldCkKPiAtCQlyZXR1cm4gcmV0Owo+IC0KPiAgIAlyZXNldF9jb3VudGVyID0gYXRvbWljX3Jl YWQoJmRldl9wcml2LT5ncHVfZXJyb3IucmVzZXRfY291bnRlcik7Cj4gLQlpOTE1X2dlbV9yZXF1 ZXN0X3JlZmVyZW5jZShyZXEpOwo+ICsKPiArCWlmIChyZWFkb25seSkgewo+ICsJCXN0cnVjdCBk cm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwo+ICsJCXJxID0gb2JqLT5sYXN0X3dyaXRlX3Jl cTsKPiArCQlpZiAocnEgPT0gTlVMTCkKPiArCQkJcmV0dXJuIDA7Cj4gKwo+ICsJCXJldCA9IGk5 MTVfZ2VtX2NoZWNrX29scihycSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJZ290byBlcnI7Cj4gKwo+ ICsJCXJlcXVlc3RzW24rK10gPSBpOTE1X2dlbV9yZXF1ZXN0X3JlZmVyZW5jZShycSk7Cj4gKwl9 IGVsc2Ugewo+ICsJCWZvciAoaSA9IDA7IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKSB7Cj4gKwkJ CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwo+ICsJCQlycSA9IG9iai0+bGFz dF9yZWFkX3JlcVtpXTsKPiArCQkJaWYgKHJxID09IE5VTEwpCj4gKwkJCQljb250aW51ZTsKPiAr Cj4gKwkJCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihycSk7Cj4gKwkJCWlmIChyZXQpCj4gKwkJ CQlnb3RvIGVycjsKPiArCj4gKwkJCXJlcXVlc3RzW24rK10gPSBpOTE1X2dlbV9yZXF1ZXN0X3Jl ZmVyZW5jZShycSk7Cj4gKwkJfQo+ICsJfQo+ICsKPiAgIAltdXRleF91bmxvY2soJmRldi0+c3Ry dWN0X211dGV4KTsKPiAtCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCByZXNldF9jb3Vu dGVyLCB0cnVlLCBOVUxMLCBmaWxlX3ByaXYpOwo+ICsJZm9yIChpID0gMDsgcmV0ID09IDAgJiYg aSA8IG47IGkrKykKPiArCQlyZXQgPSBfX2k5MTVfd2FpdF9yZXF1ZXN0KHJlcXVlc3RzW2ldLCBy ZXNldF9jb3VudGVyLCB0cnVlLAo+ICsJCQkJCSAgTlVMTCwgZmlsZV9wcml2KTsKPiAgIAltdXRl eF9sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJl bmNlKHJlcSk7Cj4gLQlpZiAocmV0KQo+IC0JCXJldHVybiByZXQ7Cj4KPiAtCXJldHVybiBpOTE1 X2dlbV9vYmplY3Rfd2FpdF9yZW5kZXJpbmdfX3RhaWwob2JqKTsKPiArZXJyOgo+ICsJZm9yIChp ID0gMDsgaSA8IG47IGkrKykgewo+ICsJCWlmIChyZXQgPT0gMCkgewo+ICsJCQlpbnQgcmluZyA9 IHJlcXVlc3RzW2ldLT5yaW5nLT5pZDsKPiArCQkJaWYgKG9iai0+bGFzdF9yZWFkX3JlcVtyaW5n XSA9PSByZXF1ZXN0c1tpXSkKPiArCQkJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQob2Jq LCByaW5nKTsKPiArCQkJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEgPT0gcmVxdWVzdHNbaV0pCj4g KwkJCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShvYmopOwoKQWJvdmUgZm91ciBsaW5l cyBzZWVtIHRvIGJlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IHRvIHNpbWlsYXIgZm91ciBpbiAK X19pOTE1X2dlbV9vYmplY3Rfc3luYy4KCkFsc28sIF9yZXRpcmVfX3JlYWQgd2lsbCBkbyBfcmV0 aXJlX193cml0ZSBpZiB0aGVyZSBpcyBvbmUgb24gdGhlIHNhbWUgCnJpbmcuIEFuZCBoZXJlIGJ5 IGRlZmluaXRpb24gdGhleSBhcmUgc2luY2UgaXQgaXMgdGhlIHNhbWUgcmVxdWVzdCwgbm8/Cgo+ ICsJCQlfX2k5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvKHJlcXVlc3RzW2ldKTsKPiArCQl9 Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZShyZXF1ZXN0c1tpXSk7Cj4gKwl9Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiAgIH0KPgo+ICAgLyoqCj4gQEAgLTIyMDQsNzggKzIyOTQsNTgg QEAgaTkxNV9nZW1fb2JqZWN0X2dldF9wYWdlcyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAq b2JqKQo+ICAgCXJldHVybiAwOwo+ICAgfQo+Cj4gLXN0YXRpYyB2b2lkCj4gLWk5MTVfZ2VtX29i amVjdF9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqLAo+IC0J CQkgICAgICAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiArdm9pZCBpOTE1X3ZtYV9t b3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkxNV92bWEgKnZtYSwKPiArCQkJICAgICBzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgewo+IC0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpyZXE7Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpvbGRfcmluZzsKPiAtCj4gLQlCVUdf T04ocmluZyA9PSBOVUxMKTsKPiAtCj4gLQlyZXEgPSBpbnRlbF9yaW5nX2dldF9yZXF1ZXN0KHJp bmcpOwo+IC0Jb2xkX3JpbmcgPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9y ZWFkX3JlcSk7Cj4gLQo+IC0JaWYgKG9sZF9yaW5nICE9IHJpbmcgJiYgb2JqLT5sYXN0X3dyaXRl X3JlcSkgewo+IC0JCS8qIEtlZXAgdGhlIHJlcXVlc3QgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQg cmluZyAqLwo+IC0JCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVfcmVx LCByZXEpOwo+IC0JfQo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IHZtYS0+ b2JqOwo+Cj4gICAJLyogQWRkIGEgcmVmZXJlbmNlIGlmIHdlJ3JlIG5ld2x5IGVudGVyaW5nIHRo ZSBhY3RpdmUgbGlzdC4gKi8KPiAtCWlmICghb2JqLT5hY3RpdmUpIHsKPiArCWlmIChvYmotPmFj dGl2ZSA9PSAwKQo+ICAgCQlkcm1fZ2VtX29iamVjdF9yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4g LQkJb2JqLT5hY3RpdmUgPSAxOwo+IC0JfQo+ICsJb2JqLT5hY3RpdmUgfD0gaW50ZWxfcmluZ19m bGFnKHJpbmcpOwo+Cj4gLQlsaXN0X21vdmVfdGFpbCgmb2JqLT5yaW5nX2xpc3QsICZyaW5nLT5h Y3RpdmVfbGlzdCk7Cj4gKwlsaXN0X21vdmVfdGFpbCgmb2JqLT5yaW5nX2xpc3RbcmluZy0+aWRd LCAmcmluZy0+YWN0aXZlX2xpc3QpOwo+ICsJaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+ bGFzdF9yZWFkX3JlcVtyaW5nLT5pZF0sCj4gKwkJCQlpbnRlbF9yaW5nX2dldF9yZXF1ZXN0KHJp bmcpKTsKPgo+IC0JaTkxNV9nZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF9yZWFkX3JlcSwg cmVxKTsKPiArCWxpc3RfbW92ZV90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5hY3RpdmVf bGlzdCk7Cj4gICB9Cj4KPiAtdm9pZCBpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShzdHJ1Y3QgaTkx NV92bWEgKnZtYSwKPiAtCQkJICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICtz dGF0aWMgdm9pZAo+ICtpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0JbGlzdF9tb3ZlX3RhaWwoJnZtYS0+bW1fbGlz dCwgJnZtYS0+dm0tPmFjdGl2ZV9saXN0KTsKPiAtCXJldHVybiBpOTE1X2dlbV9vYmplY3RfbW92 ZV90b19hY3RpdmUodm1hLT5vYmosIHJpbmcpOwo+ICsJUlFfQlVHX09OKG9iai0+bGFzdF93cml0 ZV9yZXEgPT0gTlVMTCk7Cj4gKwlSUV9CVUdfT04oIShvYmotPmFjdGl2ZSAmIGludGVsX3Jpbmdf ZmxhZyhvYmotPmxhc3Rfd3JpdGVfcmVxLT5yaW5nKSkpOwo+ICsKPiArCWk5MTVfZ2VtX3JlcXVl c3RfYXNzaWduKCZvYmotPmxhc3Rfd3JpdGVfcmVxLCBOVUxMKTsKPiArCWludGVsX2ZiX29ial9m bHVzaChvYmosIHRydWUpOwo+ICAgfQo+Cj4gICBzdGF0aWMgdm9pZAo+IC1pOTE1X2dlbV9vYmpl Y3RfbW92ZV90b19pbmFjdGl2ZShzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICtp OTE1X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpv YmosIGludCByaW5nKQo+ICAgewo+ICAgCXN0cnVjdCBpOTE1X3ZtYSAqdm1hOwo+Cj4gLQlCVUdf T04ob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIH5JOTE1X0dFTV9HUFVfRE9NQUlOUyk7Cj4gLQlC VUdfT04oIW9iai0+YWN0aXZlKTsKPiArCVJRX0JVR19PTihvYmotPmxhc3RfcmVhZF9yZXFbcmlu Z10gPT0gTlVMTCk7Cj4gKwlSUV9CVUdfT04oIShvYmotPmFjdGl2ZSAmICgxIDw8IHJpbmcpKSk7 Cj4gKwo+ICsJbGlzdF9kZWxfaW5pdCgmb2JqLT5yaW5nX2xpc3RbcmluZ10pOwo+ICsJaTkxNV9n ZW1fcmVxdWVzdF9hc3NpZ24oJm9iai0+bGFzdF9yZWFkX3JlcVtyaW5nXSwgTlVMTCk7Cj4gKwo+ ICsJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEgJiYgb2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZy0+ aWQgPT0gcmluZykKPiArCQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlX193cml0ZShvYmopOwo+ICsK PiArCW9iai0+YWN0aXZlICY9IH4oMSA8PCByaW5nKTsKPiArCWlmIChvYmotPmFjdGl2ZSkKPiAr CQlyZXR1cm47Cj4KPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHZtYSwgJm9iai0+dm1hX2xpc3Qs IHZtYV9saW5rKSB7Cj4gICAJCWlmICghbGlzdF9lbXB0eSgmdm1hLT5tbV9saXN0KSkKPiAgIAkJ CWxpc3RfbW92ZV90YWlsKCZ2bWEtPm1tX2xpc3QsICZ2bWEtPnZtLT5pbmFjdGl2ZV9saXN0KTsK PiAgIAl9Cj4KPiAtCWludGVsX2ZiX29ial9mbHVzaChvYmosIHRydWUpOwo+IC0KPiAtCWxpc3Rf ZGVsX2luaXQoJm9iai0+cmluZ19saXN0KTsKPiAtCj4gLQlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2ln bigmb2JqLT5sYXN0X3JlYWRfcmVxLCBOVUxMKTsKPiAtCWk5MTVfZ2VtX3JlcXVlc3RfYXNzaWdu KCZvYmotPmxhc3Rfd3JpdGVfcmVxLCBOVUxMKTsKPiAtCW9iai0+YmFzZS53cml0ZV9kb21haW4g PSAwOwo+IC0KPiAgIAlpOTE1X2dlbV9yZXF1ZXN0X2Fzc2lnbigmb2JqLT5sYXN0X2ZlbmNlZF9y ZXEsIE5VTEwpOwo+IC0KPiAtCW9iai0+YWN0aXZlID0gMDsKPiAgIAlkcm1fZ2VtX29iamVjdF91 bnJlZmVyZW5jZSgmb2JqLT5iYXNlKTsKPiAtCj4gLQlXQVJOX09OKGk5MTVfdmVyaWZ5X2xpc3Rz KGRldikpOwo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZAo+IC1pOTE1X2dlbV9vYmplY3RfcmV0aXJl KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmopCj4gLXsKPiAtCWlmIChvYmotPmxhc3Rf cmVhZF9yZXEgPT0gTlVMTCkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JaWYgKGk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1ZSkpCj4gLQkJaTkxNV9nZW1fb2Jq ZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKPiAgIH0KPgo+ICAgc3RhdGljIGludAo+IEBAIC0y NDUyLDIwICsyNTIyLDYgQEAgaW50IF9faTkxNV9hZGRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICpyaW5nLAo+ICAgCXJldHVybiAwOwo+ICAgfQo+Cj4gLXN0YXRpYyBpbmxpbmUgdm9p ZAo+IC1pOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJlcXVlc3QpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZh dGUgKmZpbGVfcHJpdiA9IHJlcXVlc3QtPmZpbGVfcHJpdjsKPiAtCj4gLQlpZiAoIWZpbGVfcHJp dikKPiAtCQlyZXR1cm47Cj4gLQo+IC0Jc3Bpbl9sb2NrKCZmaWxlX3ByaXYtPm1tLmxvY2spOwo+ IC0JbGlzdF9kZWwoJnJlcXVlc3QtPmNsaWVudF9saXN0KTsKPiAtCXJlcXVlc3QtPmZpbGVfcHJp diA9IE5VTEw7Cj4gLQlzcGluX3VubG9jaygmZmlsZV9wcml2LT5tbS5sb2NrKTsKPiAtfQo+IC0K PiAgIHN0YXRpYyBib29sIGk5MTVfY29udGV4dF9pc19iYW5uZWQoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2LAo+ICAgCQkJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0ICpj dHgpCj4gICB7Cj4gQEAgLTI1MTEsMTYgKzI1NjcsNiBAQCBzdGF0aWMgdm9pZCBpOTE1X3NldF9y ZXNldF9zdGF0dXMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCX0KPiAg IH0KPgo+IC1zdGF0aWMgdm9pZCBpOTE1X2dlbV9mcmVlX3JlcXVlc3Qoc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0KQo+IC17Cj4gLQlsaXN0X2RlbCgmcmVxdWVzdC0+bGlzdCk7 Cj4gLQlpOTE1X2dlbV9yZXF1ZXN0X3JlbW92ZV9mcm9tX2NsaWVudChyZXF1ZXN0KTsKPiAtCj4g LQlwdXRfcGlkKHJlcXVlc3QtPnBpZCk7Cj4gLQo+IC0JaTkxNV9nZW1fcmVxdWVzdF91bnJlZmVy ZW5jZShyZXF1ZXN0KTsKPiAtfQo+IC0KPiAgIHZvaWQgaTkxNV9nZW1fcmVxdWVzdF9mcmVlKHN0 cnVjdCBrcmVmICpyZXFfcmVmKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVz dCAqcmVxID0gY29udGFpbmVyX29mKHJlcV9yZWYsCj4gQEAgLTI1ODMsOSArMjYyOSw5IEBAIHN0 YXRpYyB2b2lkIGk5MTVfZ2VtX3Jlc2V0X3JpbmdfY2xlYW51cChzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYsCj4KPiAgIAkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0 aXZlX2xpc3QsCj4gICAJCQkJICAgICAgIHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0LAo+IC0J CQkJICAgICAgIHJpbmdfbGlzdCk7Cj4gKwkJCQkgICAgICAgcmluZ19saXN0W3JpbmctPmlkXSk7 Cj4KPiAtCQlpOTE1X2dlbV9vYmplY3RfbW92ZV90b19pbmFjdGl2ZShvYmopOwo+ICsJCWk5MTVf Z2VtX29iamVjdF9yZXRpcmVfX3JlYWQob2JqLCByaW5nLT5pZCk7Cj4gICAJfQo+Cj4gICAJLyoK PiBAQCAtMjYyMiw3ICsyNjY4LDggQEAgc3RhdGljIHZvaWQgaTkxNV9nZW1fcmVzZXRfcmluZ19j bGVhbnVwKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAkJCQkJICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0LAo+ICAgCQkJCQkgICBsaXN0KTsKPgo+IC0JCWk5MTVf Z2VtX2ZyZWVfcmVxdWVzdChyZXF1ZXN0KTsKPiArCQlyZXF1ZXN0LT5yaW5nYnVmLT5sYXN0X3Jl dGlyZWRfaGVhZCA9IHJlcXVlc3QtPnRhaWw7Cj4gKwkJaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUo cmVxdWVzdCk7Cj4gICAJfQoKVGhpcyBsb29wIGxvb2tzIGF3ZnVsbHkgc2ltaWxhciB0byBfX2k5 MTVfZ2VtX3JlcXVlc3RfcmV0aXJlX191cHRvIG9uIAp0aGUgbGFzdCByZXF1ZXN0IG9uIHRoZSBl bmdpbmU/Cgo+ICAgCS8qIFRoaXMgbWF5IG5vdCBoYXZlIGJlZW4gZmx1c2hlZCBiZWZvcmUgdGhl IHJlc2V0LCBzbyBjbGVhbiBpdCBub3cgKi8KPiBAQCAtMjY3MCw2ICsyNzE3LDggQEAgdm9pZCBp OTE1X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAgCWk5MTVfZ2VtX2NvbnRl eHRfcmVzZXQoZGV2KTsKPgo+ICAgCWk5MTVfZ2VtX3Jlc3RvcmVfZmVuY2VzKGRldik7Cj4gKwo+ ICsJV0FSTl9PTihpOTE1X3ZlcmlmeV9saXN0cyhkZXYpKTsKPiAgIH0KPgo+ICAgLyoqCj4gQEAg LTI2NzgsMTEgKzI3MjcsMTEgQEAgdm9pZCBpOTE1X2dlbV9yZXNldChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KQo+ICAgdm9pZAo+ICAgaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jpbmcoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqcmluZykKPiAgIHsKPiAtCWlmIChsaXN0X2VtcHR5KCZyaW5nLT5y ZXF1ZXN0X2xpc3QpKQo+IC0JCXJldHVybjsKPiAtCj4gICAJV0FSTl9PTihpOTE1X3ZlcmlmeV9s aXN0cyhyaW5nLT5kZXYpKTsKPgo+ICsJaWYgKGxpc3RfZW1wdHkoJnJpbmctPmFjdGl2ZV9saXN0 KSkKPiArCQlyZXR1cm47Cj4gKwo+ICAgCS8qIFJldGlyZSByZXF1ZXN0cyBmaXJzdCBhcyB3ZSB1 c2UgaXQgYWJvdmUgZm9yIHRoZSBlYXJseSByZXR1cm4uCj4gICAJICogSWYgd2UgcmV0aXJlIHJl cXVlc3RzIGxhc3QsIHdlIG1heSB1c2UgYSBsYXRlciBzZXFubyBhbmQgc28gY2xlYXIKPiAgIAkg KiB0aGUgcmVxdWVzdHMgbGlzdHMgd2l0aG91dCBjbGVhcmluZyB0aGUgYWN0aXZlIGxpc3QsIGxl YWRpbmcgdG8KPiBAQCAtMjY5OCwxNiArMjc0NywxMyBAQCBpOTE1X2dlbV9yZXRpcmVfcmVxdWVz dHNfcmluZyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nKQo+ICAgCQlpZiAoIWk5MTVfZ2Vt X3JlcXVlc3RfY29tcGxldGVkKHJlcXVlc3QsIHRydWUpKQo+ICAgCQkJYnJlYWs7Cj4KPiAtCQl0 cmFjZV9pOTE1X2dlbV9yZXF1ZXN0X3JldGlyZShyZXF1ZXN0KTsKPiAtCj4gICAJCS8qIFdlIGtu b3cgdGhlIEdQVSBtdXN0IGhhdmUgcmVhZCB0aGUgcmVxdWVzdCB0byBoYXZlCj4gICAJCSAqIHNl bnQgdXMgdGhlIHNlcW5vICsgaW50ZXJydXB0LCBzbyB1c2UgdGhlIHBvc2l0aW9uCj4gICAJCSAq IG9mIHRhaWwgb2YgdGhlIHJlcXVlc3QgdG8gdXBkYXRlIHRoZSBsYXN0IGtub3duIHBvc2l0aW9u Cj4gICAJCSAqIG9mIHRoZSBHUFUgaGVhZC4KPiAgIAkJICovCj4gICAJCXJlcXVlc3QtPnJpbmdi dWYtPmxhc3RfcmV0aXJlZF9oZWFkID0gcmVxdWVzdC0+cG9zdGZpeDsKPiAtCj4gLQkJaTkxNV9n ZW1fZnJlZV9yZXF1ZXN0KHJlcXVlc3QpOwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcmV0aXJlKHJl cXVlc3QpOwo+ICAgCX0KClRoaXMgbG9vcCBjb3VsZCBhbHNvIHVzZSBfX2k5MTVfZ2VtX3JlcXVl c3RfcmV0aXJlX191cHRvIGlmIGl0IGZvdW5kIHRoZSAKZmlyc3QgY29tcGxldGVkIHJlcXVlc3Qg Zmlyc3QuIE5vdCBzdXJlIGhvdyBtdWNoIGNvZGUgd291bGQgdGhhdCBzYXZlIApidXQgd291bGQg bWF1YmUgYmUgbW9yZSByZWFkYWJsZSwgYSBsaXR0bGUgYml0IG1vcmUgc2VsZiBkb2N1bWVudGlu Zy4KCj4KPiAgIAkvKiBNb3ZlIGFueSBidWZmZXJzIG9uIHRoZSBhY3RpdmUgbGlzdCB0aGF0IGFy ZSBubyBsb25nZXIgcmVmZXJlbmNlZAo+IEBAIC0yNzE5LDEyICsyNzY1LDEyIEBAIGk5MTVfZ2Vt X3JldGlyZV9yZXF1ZXN0c19yaW5nKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcpCj4KPiAg IAkJb2JqID0gbGlzdF9maXJzdF9lbnRyeSgmcmluZy0+YWN0aXZlX2xpc3QsCj4gICAJCQkJICAg ICAgc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QsCj4gLQkJCQkgICAgICByaW5nX2xpc3QpOwo+ ICsJCQkJICAgICAgcmluZ19saXN0W3JpbmctPmlkXSk7Cj4KPiAtCQlpZiAoIWk5MTVfZ2VtX3Jl cXVlc3RfY29tcGxldGVkKG9iai0+bGFzdF9yZWFkX3JlcSwgdHJ1ZSkpCj4gKwkJaWYgKCFsaXN0 X2VtcHR5KCZvYmotPmxhc3RfcmVhZF9yZXFbcmluZy0+aWRdLT5saXN0KSkKPiAgIAkJCWJyZWFr Owo+Cj4gLQkJaTkxNV9nZW1fb2JqZWN0X21vdmVfdG9faW5hY3RpdmUob2JqKTsKPiArCQlpOTE1 X2dlbV9vYmplY3RfcmV0aXJlX19yZWFkKG9iaiwgcmluZy0+aWQpOwo+ICAgCX0KPgo+ICAgCWlm ICh1bmxpa2VseShyaW5nLT50cmFjZV9pcnFfcmVxICYmCj4gQEAgLTI4MTMsMTcgKzI4NTksMjMg QEAgaTkxNV9nZW1faWRsZV93b3JrX2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ ICAgc3RhdGljIGludAo+ICAgaTkxNV9nZW1fb2JqZWN0X2ZsdXNoX2FjdGl2ZShzdHJ1Y3QgZHJt X2k5MTVfZ2VtX29iamVjdCAqb2JqKQo+ICAgewo+IC0Jc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZzsKPiAtCWludCByZXQ7Cj4gKwlpbnQgcmV0LCBpOwo+Cj4gLQlpZiAob2JqLT5hY3RpdmUp IHsKPiAtCQlyaW5nID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9y ZXEpOwo+ICsJaWYgKCFvYmotPmFjdGl2ZSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlmb3IgKGkg PSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1f cmVxdWVzdCAqcnE7Cj4gKwo+ICsJCXJxID0gb2JqLT5sYXN0X3JlYWRfcmVxW2ldOwo+ICsJCWlm IChycSA9PSBOVUxMKQo+ICsJCQljb250aW51ZTsKPgo+IC0JCXJldCA9IGk5MTVfZ2VtX2NoZWNr X29scihvYmotPmxhc3RfcmVhZF9yZXEpOwo+ICsJCXJldCA9IGk5MTVfZ2VtX2NoZWNrX29scihy cSk7Cj4gICAJCWlmIChyZXQpCj4gICAJCQlyZXR1cm4gcmV0Owo+Cj4gLQkJaTkxNV9nZW1fcmV0 aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7Cj4gKwkJaTkxNV9nZW1fcmV0aXJlX3JlcXVlc3RzX3Jp bmcocnEtPnJpbmcpOwo+ICAgCX0KPgo+ICAgCXJldHVybiAwOwo+IEBAIC0yODU3LDkgKzI5MDks MTAgQEAgaTkxNV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpk YXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3dh aXQgKmFyZ3MgPSBkYXRhOwo+ICAgCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4g LQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcTsKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcmVxW0k5MTVfTlVNX1JJTkdTXTsKPiAgIAl1bnNpZ25lZCByZXNldF9jb3Vu dGVyOwo+IC0JaW50IHJldCA9IDA7Cj4gKwlpbnQgaSwgbiA9IDA7Cj4gKwlpbnQgcmV0Owo+Cj4g ICAJaWYgKGFyZ3MtPmZsYWdzICE9IDApCj4gICAJCXJldHVybiAtRUlOVkFMOwo+IEBAIC0yODc5 LDExICsyOTMyLDkgQEAgaTkxNV9nZW1fd2FpdF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2 LCB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICAJaWYgKHJldCkKPiAgIAkJ Z290byBvdXQ7Cj4KPiAtCWlmICghb2JqLT5hY3RpdmUgfHwgIW9iai0+bGFzdF9yZWFkX3JlcSkK PiArCWlmICghb2JqLT5hY3RpdmUpCj4gICAJCWdvdG8gb3V0Owo+Cj4gLQlyZXEgPSBvYmotPmxh c3RfcmVhZF9yZXE7Cj4gLQo+ICAgCS8qIERvIHRoaXMgYWZ0ZXIgT0xSIGNoZWNrIHRvIG1ha2Ug c3VyZSB3ZSBtYWtlIGZvcndhcmQgcHJvZ3Jlc3MgcG9sbGluZwo+ICAgCSAqIG9uIHRoaXMgSU9D VEwgd2l0aCBhIHRpbWVvdXQgPT0gMCAobGlrZSBidXN5IGlvY3RsKQo+ICAgCSAqLwo+IEBAIC0y ODk0LDEzICsyOTQ1LDIzIEBAIGk5MTVfZ2VtX3dhaXRfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+Cj4gICAJZHJtX2dlbV9v YmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gICAJcmVzZXRfY291bnRlciA9IGF0b21p Y19yZWFkKCZkZXZfcHJpdi0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpOwo+IC0JaTkxNV9nZW1f cmVxdWVzdF9yZWZlcmVuY2UocmVxKTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1f UklOR1M7IGkrKykgewo+ICsJCWlmIChvYmotPmxhc3RfcmVhZF9yZXFbaV0gPT0gTlVMTCkKPiAr CQkJY29udGludWU7Cj4gKwo+ICsJCXJlcVtuKytdID0gaTkxNV9nZW1fcmVxdWVzdF9yZWZlcmVu Y2Uob2JqLT5sYXN0X3JlYWRfcmVxW2ldKTsKPiArCX0KPiArCj4gICAJbXV0ZXhfdW5sb2NrKCZk ZXYtPnN0cnVjdF9tdXRleCk7Cj4KPiAtCXJldCA9IF9faTkxNV93YWl0X3JlcXVlc3QocmVxLCBy ZXNldF9jb3VudGVyLCB0cnVlLAo+IC0JCQkJICBhcmdzLT50aW1lb3V0X25zID4gMCA/ICZhcmdz LT50aW1lb3V0X25zIDogTlVMTCwKPiAtCQkJCSAgZmlsZS0+ZHJpdmVyX3ByaXYpOwo+IC0JaTkx NV9nZW1fcmVxdWVzdF91bnJlZmVyZW5jZV9fdW5sb2NrZWQocmVxKTsKPiArCWZvciAoaSA9IDA7 IGkgPCBuOyBpKyspIHsKPiArCQlpZiAocmV0ID09IDApCj4gKwkJCXJldCA9IF9faTkxNV93YWl0 X3JlcXVlc3QocmVxW2ldLCByZXNldF9jb3VudGVyLCB0cnVlLAo+ICsJCQkJCQkgIGFyZ3MtPnRp bWVvdXRfbnMgPiAwID8gJmFyZ3MtPnRpbWVvdXRfbnMgOiBOVUxMLAo+ICsJCQkJCQkgIGZpbGUt PmRyaXZlcl9wcml2KTsKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3VucmVmZXJlbmNlX191bmxvY2tl ZChyZXFbaV0pOwo+ICsJfQo+ICAgCXJldHVybiByZXQ7Cj4KPiAgIG91dDoKPiBAQCAtMjkwOSw2 ICsyOTcwLDYyIEBAIG91dDoKPiAgIAlyZXR1cm4gcmV0Owo+ICAgfQo+Cj4gK3N0YXRpYyBpbnQK PiArX19pOTE1X2dlbV9vYmplY3Rfc3luYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29iamVjdCAqb2Jq LAo+ICsJCSAgICAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp0bywKPiArCQkgICAgICAgc3Ry dWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZnJvbTsKPiArCWludCByZXQ7Cj4gKwo+ICsJaWYgKHJxID09IE5VTEwpCj4gKwkJcmV0 dXJuIDA7Cj4gKwo+ICsJZnJvbSA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3JpbmcocnEpOwo+ICsJ aWYgKHRvID09IGZyb20pCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGk5MTVfZ2VtX3JlcXVl c3RfY29tcGxldGVkKHJxLCB0cnVlKSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlyZXQgPSBpOTE1 X2dlbV9jaGVja19vbHIocnEpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsKPiAr CWlmICghaTkxNV9zZW1hcGhvcmVfaXNfZW5hYmxlZChvYmotPmJhc2UuZGV2KSkgewo+ICsJCXJl dCA9IF9faTkxNV93YWl0X3JlcXVlc3QocnEsCj4gKwkJCQkJICBhdG9taWNfcmVhZCgmdG9faTkx NShvYmotPmJhc2UuZGV2KS0+Z3B1X2Vycm9yLnJlc2V0X2NvdW50ZXIpLAo+ICsJCQkJCSAgdG9f aTkxNShvYmotPmJhc2UuZGV2KS0+bW0uaW50ZXJydXB0aWJsZSwgTlVMTCwgTlVMTCk7Cj4gKwkJ aWYgKHJldCkKPiArCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJaWYgKG9iai0+bGFzdF9yZWFkX3Jl cVtmcm9tLT5pZF0gPT0gcnEpCj4gKwkJCWk5MTVfZ2VtX29iamVjdF9yZXRpcmVfX3JlYWQob2Jq LCBmcm9tLT5pZCk7Cj4gKwkJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEgPT0gcnEpCj4gKwkJCWk5 MTVfZ2VtX29iamVjdF9yZXRpcmVfX3dyaXRlKG9iaik7Cj4gKwl9IGVsc2Ugewo+ICsJCWludCBp ZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOwo+ICsJCXUzMiBzZXFubyA9IGk5 MTVfZ2VtX3JlcXVlc3RfZ2V0X3NlcW5vKHJxKTsKPiArCj4gKwkJaWYgKHNlcW5vIDw9IGZyb20t PnNlbWFwaG9yZS5zeW5jX3NlcW5vW2lkeF0pCj4gKwkJCXJldHVybiAwOwo+ICsKPiArCQl0cmFj ZV9pOTE1X2dlbV9yaW5nX3N5bmNfdG8oZnJvbSwgdG8sIHJxKTsKPiArCQlyZXQgPSB0by0+c2Vt YXBob3JlLnN5bmNfdG8odG8sIGZyb20sIHNlcW5vKTsKPiArCQlpZiAocmV0KQo+ICsJCQlyZXR1 cm4gcmV0Owo+ICsKPiArCQkvKiBXZSB1c2UgbGFzdF9yZWFkX3JlcSBiZWNhdXNlIHN5bmNfdG8o KQo+ICsJCSAqIG1pZ2h0IGhhdmUganVzdCBjYXVzZWQgc2Vxbm8gd3JhcCB1bmRlcgo+ICsJCSAq IHRoZSByYWRhci4KPiArCQkgKi8KPiArCQlmcm9tLT5zZW1hcGhvcmUuc3luY19zZXFub1tpZHhd ID0KPiArCQkJaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3JlYWRfcmVxW2Zy b20tPmlkXSk7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICAvKioKPiAgICAq IGk5MTVfZ2VtX29iamVjdF9zeW5jIC0gc3luYyBhbiBvYmplY3QgdG8gYSByaW5nLgo+ICAgICoK PiBAQCAtMjkxNyw3ICszMDM0LDE3IEBAIG91dDoKPiAgICAqCj4gICAgKiBUaGlzIGNvZGUgaXMg bWVhbnQgdG8gYWJzdHJhY3Qgb2JqZWN0IHN5bmNocm9uaXphdGlvbiB3aXRoIHRoZSBHUFUuCj4g ICAgKiBDYWxsaW5nIHdpdGggTlVMTCBpbXBsaWVzIHN5bmNocm9uaXppbmcgdGhlIG9iamVjdCB3 aXRoIHRoZSBDUFUKPiAtICogcmF0aGVyIHRoYW4gYSBwYXJ0aWN1bGFyIEdQVSByaW5nLgo+ICsg KiByYXRoZXIgdGhhbiBhIHBhcnRpY3VsYXIgR1BVIHJpbmcuIENvbmNlcHR1YWxseSB3ZSBzZXJp YWxpc2Ugd3JpdGVzCj4gKyAqIGJldHdlZW4gZW5naW5lcyBpbnNpZGUgdGhlIEdQVS4gV2Ugb25s eSBhbGxvdyBvbiBlbmdpbmUgdG8gd3JpdGUKPiArICogaW50byBhIGJ1ZmZlciBhdCBhbnkgdGlt ZSwgYnV0IG11bHRpcGxlIHJlYWRlcnMuIFRvIGVuc3VyZSBlYWNoIGhhcwo+ICsgKiBhIGNvaGVy ZW50IHZpZXcgb2YgbWVtb3J5LCB3ZSBtdXN0Ogo+ICsgKgo+ICsgKiAtIElmIHRoZXJlIGlzIGFu IG91dHN0YW5kaW5nIHdyaXRlIHJlcXVlc3QgdG8gdGhlIG9iamVjdCwgdGhlIG5ldwo+ICsgKiAg IHJlcXVlc3QgbXVzdCB3YWl0IGZvciBpdCB0byBjb21wbGV0ZSAoZWl0aGVyIENQVSBvciBpbiBo dywgcmVxdWVzdHMKPiArICogICBvbiB0aGUgc2FtZSByaW5nIHdpbGwgYmUgbmF0dXJhbGx5IG9y ZGVyZWQpLgo+ICsgKgo+ICsgKiAtIElmIHdlIGFyZSBhIHdyaXRlIHJlcXVlc3QgKHBlbmRpbmdf d3JpdGVfZG9tYWluIGlzIHNldCksIHRoZSBuZXcKPiArICogICByZXF1ZXN0IG11c3Qgd2FpdCBm b3Igb3V0c3RhbmRpbmcgcmVhZCByZXF1ZXN0cyB0byBjb21wbGV0ZS4KPiAgICAqCj4gICAgKiBS ZXR1cm5zIDAgaWYgc3VjY2Vzc2Z1bCwgZWxzZSBwcm9wYWdhdGVzIHVwIHRoZSBsb3dlciBsYXll ciBlcnJvci4KPiAgICAqLwo+IEBAIC0yOTI1LDM5ICszMDUyLDI1IEBAIGludAo+ICAgaTkxNV9n ZW1fb2JqZWN0X3N5bmMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJICAg ICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICp0bykKPiAgIHsKPiAtCXN0cnVjdCBpbnRlbF9lbmdp bmVfY3MgKmZyb207Cj4gLQl1MzIgc2Vxbm87Cj4gLQlpbnQgcmV0LCBpZHg7Cj4gLQo+IC0JZnJv bSA9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKTsKPiAtCj4g LQlpZiAoZnJvbSA9PSBOVUxMIHx8IHRvID09IGZyb20pCj4gLQkJcmV0dXJuIDA7Cj4gLQo+IC0J aWYgKHRvID09IE5VTEwgfHwgIWk5MTVfc2VtYXBob3JlX2lzX2VuYWJsZWQob2JqLT5iYXNlLmRl dikpCj4gLQkJcmV0dXJuIGk5MTVfZ2VtX29iamVjdF93YWl0X3JlbmRlcmluZyhvYmosIGZhbHNl KTsKPiAtCj4gLQlpZHggPSBpbnRlbF9yaW5nX3N5bmNfaW5kZXgoZnJvbSwgdG8pOwo+ICsJY29u c3QgYm9vbCByZWFkb25seSA9IG9iai0+YmFzZS5wZW5kaW5nX3dyaXRlX2RvbWFpbiA9PSAwOwo+ ICsJaW50IHJldCwgaTsKPgo+IC0Jc2Vxbm8gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhv YmotPmxhc3RfcmVhZF9yZXEpOwo+IC0JLyogT3B0aW1pemF0aW9uOiBBdm9pZCBzZW1hcGhvcmUg c3luYyB3aGVuIHdlIGFyZSBzdXJlIHdlIGFscmVhZHkKPiAtCSAqIHdhaXRlZCBmb3IgYW4gb2Jq ZWN0IHdpdGggaGlnaGVyIHNlcW5vICovCj4gLQlpZiAoc2Vxbm8gPD0gZnJvbS0+c2VtYXBob3Jl LnN5bmNfc2Vxbm9baWR4XSkKPiArCWlmICghb2JqLT5hY3RpdmUpCj4gICAJCXJldHVybiAwOwo+ Cj4gLQlyZXQgPSBpOTE1X2dlbV9jaGVja19vbHIob2JqLT5sYXN0X3JlYWRfcmVxKTsKPiAtCWlm IChyZXQpCj4gLQkJcmV0dXJuIHJldDsKPiAtCj4gLQl0cmFjZV9pOTE1X2dlbV9yaW5nX3N5bmNf dG8oZnJvbSwgdG8sIG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4gLQlyZXQgPSB0by0+c2VtYXBob3Jl LnN5bmNfdG8odG8sIGZyb20sIHNlcW5vKTsKPiAtCWlmICghcmV0KQo+IC0JCS8qIFdlIHVzZSBs YXN0X3JlYWRfcmVxIGJlY2F1c2Ugc3luY190bygpCj4gLQkJICogbWlnaHQgaGF2ZSBqdXN0IGNh dXNlZCBzZXFubyB3cmFwIHVuZGVyCj4gLQkJICogdGhlIHJhZGFyLgo+IC0JCSAqLwo+IC0JCWZy b20tPnNlbWFwaG9yZS5zeW5jX3NlcW5vW2lkeF0gPQo+IC0JCQkJaTkxNV9nZW1fcmVxdWVzdF9n ZXRfc2Vxbm8ob2JqLT5sYXN0X3JlYWRfcmVxKTsKPiArCWlmICh0byA9PSBOVUxMKSB7Cj4gKwkJ cmV0ID0gaTkxNV9nZW1fb2JqZWN0X3dhaXRfcmVuZGVyaW5nKG9iaiwgcmVhZG9ubHkpOwo+ICsJ fSBlbHNlIGlmIChyZWFkb25seSkgewo+ICsJCXJldCA9IF9faTkxNV9nZW1fb2JqZWN0X3N5bmMo b2JqLCB0bywKPiArCQkJCQkgICAgIG9iai0+bGFzdF93cml0ZV9yZXEpOwo+ICsJfSBlbHNlIHsK PiArCQlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykgewo+ICsJCQlyZXQgPSBf X2k5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwgdG8sCj4gKwkJCQkJCSAgICAgb2JqLT5sYXN0X3Jl YWRfcmVxW2ldKTsKPiArCQkJaWYgKHJldCkKPiArCQkJCWJyZWFrOwo+ICsJCX0KPiArCX0KPgo+ ICAgCXJldHVybiByZXQ7Cj4gICB9Cj4gQEAgLTMwNDQsMTAgKzMxNTcsNiBAQCBpbnQgaTkxNV92 bWFfdW5iaW5kKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+ICAgCS8qIFNpbmNlIHRoZSB1bmJvdW5k IGxpc3QgaXMgZ2xvYmFsLCBvbmx5IG1vdmUgdG8gdGhhdCBsaXN0IGlmCj4gICAJICogbm8gbW9y ZSBWTUFzIGV4aXN0LiAqLwo+ICAgCWlmIChsaXN0X2VtcHR5KCZvYmotPnZtYV9saXN0KSkgewo+ IC0JCS8qIFRocm93IGF3YXkgdGhlIGFjdGl2ZSByZWZlcmVuY2UgYmVmb3JlCj4gLQkJICogbW92 aW5nIHRvIHRoZSB1bmJvdW5kIGxpc3QuICovCj4gLQkJaTkxNV9nZW1fb2JqZWN0X3JldGlyZShv YmopOwo+IC0KPiAgIAkJaTkxNV9nZW1fZ3R0X2ZpbmlzaF9vYmplY3Qob2JqKTsKPiAgIAkJbGlz dF9tb3ZlX3RhaWwoJm9iai0+Z2xvYmFsX2xpc3QsICZkZXZfcHJpdi0+bW0udW5ib3VuZF9saXN0 KTsKPiAgIAl9Cj4gQEAgLTMwODAsNiArMzE4OSw3IEBAIGludCBpOTE1X2dwdV9pZGxlKHN0cnVj dCBkcm1fZGV2aWNlICpkZXYpCj4gICAJCQlyZXR1cm4gcmV0Owo+ICAgCX0KPgo+ICsJV0FSTl9P TihpOTE1X3ZlcmlmeV9saXN0cyhkZXYpKTsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+IEBAIC0z NzEzLDggKzM4MjMsNiBAQCBpOTE1X2dlbV9vYmplY3Rfc2V0X3RvX2d0dF9kb21haW4oc3RydWN0 IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgYm9vbCB3cml0ZSkKPiAgIAlpZiAocmV0KQo+ICAg CQlyZXR1cm4gcmV0Owo+Cj4gLQlpOTE1X2dlbV9vYmplY3RfcmV0aXJlKG9iaik7Cj4gLQo+ICAg CS8qIEZsdXNoIGFuZCBhY3F1aXJlIG9iai0+cGFnZXMgc28gdGhhdCB3ZSBhcmUgY29oZXJlbnQg dGhyb3VnaAo+ICAgCSAqIGRpcmVjdCBhY2Nlc3MgaW4gbWVtb3J5IHdpdGggcHJldmlvdXMgY2Fj aGVkIHdyaXRlcyB0aHJvdWdoCj4gICAJICogc2htZW1mcyBhbmQgdGhhdCBvdXIgY2FjaGUgZG9t YWluIHRyYWNraW5nIHJlbWFpbnMgdmFsaWQuCj4gQEAgLTM5NDAsMTEgKzQwNDgsOSBAQCBpOTE1 X2dlbV9vYmplY3RfcGluX3RvX2Rpc3BsYXlfcGxhbmUoc3RydWN0IGRybV9pOTE1X2dlbV9vYmpl Y3QgKm9iaiwKPiAgIAlib29sIHdhc19waW5fZGlzcGxheTsKPiAgIAlpbnQgcmV0Owo+Cj4gLQlp ZiAocGlwZWxpbmVkICE9IGk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRf cmVxKSkgewo+IC0JCXJldCA9IGk5MTVfZ2VtX29iamVjdF9zeW5jKG9iaiwgcGlwZWxpbmVkKTsK PiAtCQlpZiAocmV0KQo+IC0JCQlyZXR1cm4gcmV0Owo+IC0JfQo+ICsJcmV0ID0gaTkxNV9nZW1f b2JqZWN0X3N5bmMob2JqLCBwaXBlbGluZWQpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0 Owo+Cj4gICAJLyogTWFyayB0aGUgcGluX2Rpc3BsYXkgZWFybHkgc28gdGhhdCB3ZSBhY2NvdW50 IGZvciB0aGUKPiAgIAkgKiBkaXNwbGF5IGNvaGVyZW5jeSB3aGlsc3Qgc2V0dGluZyB1cCB0aGUg Y2FjaGUgZG9tYWlucy4KPiBAQCAtNDA0OSw3ICs0MTU1LDYgQEAgaTkxNV9nZW1fb2JqZWN0X3Nl dF90b19jcHVfZG9tYWluKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIGJvb2wgd3Jp dGUpCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPgo+IC0JaTkxNV9nZW1fb2JqZWN0 X3JldGlyZShvYmopOwo+ICAgCWk5MTVfZ2VtX29iamVjdF9mbHVzaF9ndHRfd3JpdGVfZG9tYWlu KG9iaik7Cj4KPiAgIAlvbGRfd3JpdGVfZG9tYWluID0gb2JqLT5iYXNlLndyaXRlX2RvbWFpbjsK PiBAQCAtNDM1OSwxNSArNDQ2NCwxNSBAQCBpOTE1X2dlbV9idXN5X2lvY3RsKHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJICogbmVjZXNzYXJ5IGZsdXNoZXMgaGVyZS4K PiAgIAkgKi8KPiAgIAlyZXQgPSBpOTE1X2dlbV9vYmplY3RfZmx1c2hfYWN0aXZlKG9iaik7Cj4g KwlpZiAocmV0KQo+ICsJCWdvdG8gdW5yZWY7Cj4KPiAtCWFyZ3MtPmJ1c3kgPSBvYmotPmFjdGl2 ZTsKPiAtCWlmIChvYmotPmxhc3RfcmVhZF9yZXEpIHsKPiAtCQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICpyaW5nOwo+IC0JCUJVSUxEX0JVR19PTihJOTE1X05VTV9SSU5HUyA+IDE2KTsKPiAtCQly aW5nID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmluZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+IC0J CWFyZ3MtPmJ1c3kgfD0gaW50ZWxfcmluZ19mbGFnKHJpbmcpIDw8IDE2Owo+IC0JfQo+ICsJQlVJ TERfQlVHX09OKEk5MTVfTlVNX1JJTkdTID4gMTYpOwo+ICsJYXJncy0+YnVzeSA9IG9iai0+YWN0 aXZlIDw8IDE2Owo+ICsJaWYgKG9iai0+bGFzdF93cml0ZV9yZXEpCj4gKwkJYXJncy0+YnVzeSB8 PSBpbnRlbF9yaW5nX2ZsYWcob2JqLT5sYXN0X3dyaXRlX3JlcS0+cmluZyk7Cj4KPiArdW5yZWY6 Cj4gICAJZHJtX2dlbV9vYmplY3RfdW5yZWZlcmVuY2UoJm9iai0+YmFzZSk7Cj4gICB1bmxvY2s6 Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXYtPnN0cnVjdF9tdXRleCk7Cj4gQEAgLTQ0NDEsOCArNDU0 NiwxMSBAQCB1bmxvY2s6Cj4gICB2b2lkIGk5MTVfZ2VtX29iamVjdF9pbml0KHN0cnVjdCBkcm1f aTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICAJCQkgIGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1f b2JqZWN0X29wcyAqb3BzKQo+ICAgewo+ICsJaW50IGk7Cj4gKwo+ICAgCUlOSVRfTElTVF9IRUFE KCZvYmotPmdsb2JhbF9saXN0KTsKPiAtCUlOSVRfTElTVF9IRUFEKCZvYmotPnJpbmdfbGlzdCk7 Cj4gKwlmb3IgKGkgPSAwOyBpIDwgSTkxNV9OVU1fUklOR1M7IGkrKykKPiArCQlJTklUX0xJU1Rf SEVBRCgmb2JqLT5yaW5nX2xpc3RbaV0pOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZvYmotPm9ial9l eGVjX2xpbmspOwo+ICAgCUlOSVRfTElTVF9IRUFEKCZvYmotPnZtYV9saXN0KTsKPiAgIAlJTklU X0xJU1RfSEVBRCgmb2JqLT5iYXRjaF9wb29sX2xpbmspOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dlbV9jb250ZXh0LmMKPiBpbmRleCBmM2U4NGM0NGQwMDkuLjE4OTAwZjc0NWJjNiAxMDA2 NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtNzY4LDggKzc2 OCw2IEBAIHN0YXRpYyBpbnQgZG9fc3dpdGNoKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJpbmcs Cj4gICAJCSAqIHN3YXBwZWQsIGJ1dCB0aGVyZSBpcyBubyB3YXkgdG8gZG8gdGhhdCB5ZXQuCj4g ICAJCSAqLwo+ICAgCQlmcm9tLT5sZWdhY3lfaHdfY3R4LnJjc19zdGF0ZS0+ZGlydHkgPSAxOwo+ IC0JCUJVR19PTihpOTE1X2dlbV9yZXF1ZXN0X2dldF9yaW5nKAo+IC0JCQlmcm9tLT5sZWdhY3lf aHdfY3R4LnJjc19zdGF0ZS0+bGFzdF9yZWFkX3JlcSkgIT0gcmluZyk7Cj4KPiAgIAkJLyogb2Jq IGlzIGtlcHQgYWxpdmUgdW50aWwgdGhlIG5leHQgcmVxdWVzdCBieSBpdHMgYWN0aXZlIHJlZiAq Lwo+ICAgCQlpOTE1X2dlbV9vYmplY3RfZ2d0dF91bnBpbihmcm9tLT5sZWdhY3lfaHdfY3R4LnJj c19zdGF0ZSk7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2Rl YnVnLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9kZWJ1Zy5jCj4gaW5kZXggZjQ2 MmQxYjUxZDk3Li4xNzI5OWQwNDE4OWYgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fZGVidWcuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2RlYnVnLmMKPiBAQCAtMzQsODIgKzM0LDM0IEBAIGludAo+ICAgaTkxNV92ZXJpZnlfbGlzdHMo c3RydWN0IGRybV9kZXZpY2UgKmRldikKPiAgIHsKPiAgIAlzdGF0aWMgaW50IHdhcm5lZDsKPiAt CXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGRldik7Cj4gICAJ c3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKnJpbmc7Cj4gICAJaW50IGVyciA9IDA7Cj4gKwlpbnQgaTsKPgo+ICAgCWlmICh3YXJuZWQp Cj4gICAJCXJldHVybiAwOwo+Cj4gLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KG9iaiwgJmRldl9wcml2 LT5yZW5kZXJfcmluZy5hY3RpdmVfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2 ICE9IGRldiB8fAo+IC0JCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZj b3VudCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJmcmVlZCByZW5kZXIgYWN0aXZlICVwXG4iLCBvYmop Owo+IC0JCQllcnIrKzsKPiAtCQkJYnJlYWs7Cj4gLQkJfSBlbHNlIGlmICghb2JqLT5hY3RpdmUg fHwKPiAtCQkJICAgKG9iai0+YmFzZS5yZWFkX2RvbWFpbnMgJiBJOTE1X0dFTV9HUFVfRE9NQUlO UykgPT0gMCkgewo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgcmVuZGVyIGFjdGl2ZSAlcCAoYSAl ZCByICV4KVxuIiwKPiAtCQkJCSAgb2JqLAo+IC0JCQkJICBvYmotPmFjdGl2ZSwKPiAtCQkJCSAg b2JqLT5iYXNlLnJlYWRfZG9tYWlucyk7Cj4gLQkJCWVycisrOwo+IC0JCX0gZWxzZSBpZiAob2Jq LT5iYXNlLndyaXRlX2RvbWFpbiAmJiBsaXN0X2VtcHR5KCZvYmotPmdwdV93cml0ZV9saXN0KSkg ewo+IC0JCQlEUk1fRVJST1IoImludmFsaWQgcmVuZGVyIGFjdGl2ZSAlcCAodyAleCwgZ3dsICVk KVxuIiwKPiAtCQkJCSAgb2JqLAo+IC0JCQkJICBvYmotPmJhc2Uud3JpdGVfZG9tYWluLAo+IC0J CQkJICAhbGlzdF9lbXB0eSgmb2JqLT5ncHVfd3JpdGVfbGlzdCkpOwo+IC0JCQllcnIrKzsKPiAt CQl9Cj4gLQl9Cj4gLQo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZkZXZfcHJpdi0+bW0u Zmx1c2hpbmdfbGlzdCwgbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+ IC0JCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKPiAt CQkJRFJNX0VSUk9SKCJmcmVlZCBmbHVzaGluZyAlcFxuIiwgb2JqKTsKPiAtCQkJZXJyKys7Cj4g LQkJCWJyZWFrOwo+IC0JCX0gZWxzZSBpZiAoIW9iai0+YWN0aXZlIHx8Cj4gLQkJCSAgIChvYmot PmJhc2Uud3JpdGVfZG9tYWluICYgSTkxNV9HRU1fR1BVX0RPTUFJTlMpID09IDAgfHwKPiAtCQkJ ICAgbGlzdF9lbXB0eSgmb2JqLT5ncHVfd3JpdGVfbGlzdCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJp bnZhbGlkIGZsdXNoaW5nICVwIChhICVkIHcgJXggZ3dsICVkKVxuIiwKPiAtCQkJCSAgb2JqLAo+ IC0JCQkJICBvYmotPmFjdGl2ZSwKPiAtCQkJCSAgb2JqLT5iYXNlLndyaXRlX2RvbWFpbiwKPiAt CQkJCSAgIWxpc3RfZW1wdHkoJm9iai0+Z3B1X3dyaXRlX2xpc3QpKTsKPiAtCQkJZXJyKys7Cj4g LQkJfQo+IC0JfQo+IC0KPiAtCWxpc3RfZm9yX2VhY2hfZW50cnkob2JqLCAmZGV2X3ByaXYtPm1t LmdwdV93cml0ZV9saXN0LCBncHVfd3JpdGVfbGlzdCkgewo+IC0JCWlmIChvYmotPmJhc2UuZGV2 ICE9IGRldiB8fAo+IC0JCSAgICAhYXRvbWljX3JlYWQoJm9iai0+YmFzZS5yZWZjb3VudC5yZWZj b3VudCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJmcmVlZCBncHUgd3JpdGUgJXBcbiIsIG9iaik7Cj4g LQkJCWVycisrOwo+IC0JCQlicmVhazsKPiAtCQl9IGVsc2UgaWYgKCFvYmotPmFjdGl2ZSB8fAo+ IC0JCQkgICAob2JqLT5iYXNlLndyaXRlX2RvbWFpbiAmIEk5MTVfR0VNX0dQVV9ET01BSU5TKSA9 PSAwKSB7Cj4gLQkJCURSTV9FUlJPUigiaW52YWxpZCBncHUgd3JpdGUgJXAgKGEgJWQgdyAleClc biIsCj4gLQkJCQkgIG9iaiwKPiAtCQkJCSAgb2JqLT5hY3RpdmUsCj4gLQkJCQkgIG9iai0+YmFz ZS53cml0ZV9kb21haW4pOwo+IC0JCQllcnIrKzsKPiAtCQl9Cj4gLQl9Cj4gLQo+IC0JbGlzdF9m b3JfZWFjaF9lbnRyeShvYmosICZpOTE1X2d0dF92bS0+aW5hY3RpdmVfbGlzdCwgbGlzdCkgewo+ IC0JCWlmIChvYmotPmJhc2UuZGV2ICE9IGRldiB8fAo+IC0JCSAgICAhYXRvbWljX3JlYWQoJm9i ai0+YmFzZS5yZWZjb3VudC5yZWZjb3VudCkpIHsKPiAtCQkJRFJNX0VSUk9SKCJmcmVlZCBpbmFj dGl2ZSAlcFxuIiwgb2JqKTsKPiAtCQkJZXJyKys7Cj4gLQkJCWJyZWFrOwo+IC0JCX0gZWxzZSBp ZiAob2JqLT5waW5fY291bnQgfHwgb2JqLT5hY3RpdmUgfHwKPiAtCQkJICAgKG9iai0+YmFzZS53 cml0ZV9kb21haW4gJiBJOTE1X0dFTV9HUFVfRE9NQUlOUykpIHsKPiAtCQkJRFJNX0VSUk9SKCJp bnZhbGlkIGluYWN0aXZlICVwIChwICVkIGEgJWQgdyAleClcbiIsCj4gLQkJCQkgIG9iaiwKPiAt CQkJCSAgb2JqLT5waW5fY291bnQsIG9iai0+YWN0aXZlLAo+IC0JCQkJICBvYmotPmJhc2Uud3Jp dGVfZG9tYWluKTsKPiAtCQkJZXJyKys7CgpOaWNlIGFuZCBzdGFsZS4gOikKCj4gKwlmb3JfZWFj aF9yaW5nKHJpbmcsIGRldl9wcml2LCBpKSB7Cj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmos ICZyaW5nLT5hY3RpdmVfbGlzdCwgcmluZ19saXN0W3JpbmctPmlkXSkgewo+ICsJCQlpZiAob2Jq LT5iYXNlLmRldiAhPSBkZXYgfHwKPiArCQkJICAgICFhdG9taWNfcmVhZCgmb2JqLT5iYXNlLnJl ZmNvdW50LnJlZmNvdW50KSkgewo+ICsJCQkJRFJNX0VSUk9SKCIlczogZnJlZWQgYWN0aXZlIG9i aiAlcFxuIiwKPiArCQkJCQkgIHJpbmctPm5hbWUsIG9iaik7Cj4gKwkJCQllcnIrKzsKPiArCQkJ CWJyZWFrOwo+ICsJCQl9IGVsc2UgaWYgKCFvYmotPmFjdGl2ZSB8fAo+ICsJCQkJICAgb2JqLT5s YXN0X3JlYWRfcmVxW3JpbmctPmlkXSA9PSBOVUxMKSB7Cj4gKwkJCQlEUk1fRVJST1IoIiVzOiBp bnZhbGlkIGFjdGl2ZSBvYmogJXBcbiIsCj4gKwkJCQkJICByaW5nLT5uYW1lLCBvYmopOwo+ICsJ CQkJZXJyKys7Cj4gKwkJCX0gZWxzZSBpZiAob2JqLT5iYXNlLndyaXRlX2RvbWFpbikgewo+ICsJ CQkJRFJNX0VSUk9SKCIlczogaW52YWxpZCB3cml0ZSBvYmogJXAgKHcgJXgpXG4iLAo+ICsJCQkJ CSAgcmluZy0+bmFtZSwKPiArCQkJCQkgIG9iaiwgb2JqLT5iYXNlLndyaXRlX2RvbWFpbik7Cj4g KwkJCQllcnIrKzsKPiArCQkJfQo+ICAgCQl9Cj4gICAJfQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dwdV9lcnJvci5jCj4gaW5kZXggMWQ0ZTYwZGY4ODgzLi41Zjc5ODk2MTI2NmYgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiBAQCAtMTkyLDE1ICsxOTIsMjAg QEAgc3RhdGljIHZvaWQgcHJpbnRfZXJyb3JfYnVmZmVycyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3Jf c3RhdGVfYnVmICptLAo+ICAgCQkJCXN0cnVjdCBkcm1faTkxNV9lcnJvcl9idWZmZXIgKmVyciwK PiAgIAkJCQlpbnQgY291bnQpCj4gICB7Cj4gKwlpbnQgaTsKPiArCj4gICAJZXJyX3ByaW50Ziht LCAiICAlcyBbJWRdOlxuIiwgbmFtZSwgY291bnQpOwo+Cj4gICAJd2hpbGUgKGNvdW50LS0pIHsK PiAtCQllcnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAlMDJ4ICV4ICV4IiwKPiArCQll cnJfcHJpbnRmKG0sICIgICAgJTA4eCAlOHUgJTAyeCAlMDJ4IFsgIiwKPiAgIAkJCSAgIGVyci0+ Z3R0X29mZnNldCwKPiAgIAkJCSAgIGVyci0+c2l6ZSwKPiAgIAkJCSAgIGVyci0+cmVhZF9kb21h aW5zLAo+IC0JCQkgICBlcnItPndyaXRlX2RvbWFpbiwKPiAtCQkJICAgZXJyLT5yc2Vxbm8sIGVy ci0+d3NlcW5vKTsKPiArCQkJICAgZXJyLT53cml0ZV9kb21haW4pOwo+ICsJCWZvciAoaSA9IDA7 IGkgPCBJOTE1X05VTV9SSU5HUzsgaSsrKQo+ICsJCQllcnJfcHJpbnRmKG0sICIlMDJ4ICIsIGVy ci0+cnNlcW5vW2ldKTsKPiArCj4gKwkJZXJyX3ByaW50ZihtLCAiXSAlMDJ4IiwgZXJyLT53c2Vx bm8pOwo+ICAgCQllcnJfcHV0cyhtLCBwaW5fZmxhZyhlcnItPnBpbm5lZCkpOwo+ICAgCQllcnJf cHV0cyhtLCB0aWxpbmdfZmxhZyhlcnItPnRpbGluZykpOwo+ICAgCQllcnJfcHV0cyhtLCBkaXJ0 eV9mbGFnKGVyci0+ZGlydHkpKTsKPiBAQCAtNjc5LDEwICs2ODQsMTIgQEAgc3RhdGljIHZvaWQg Y2FwdHVyZV9ibyhzdHJ1Y3QgZHJtX2k5MTVfZXJyb3JfYnVmZmVyICplcnIsCj4gICAJCSAgICAg ICBzdHJ1Y3QgaTkxNV92bWEgKnZtYSkKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX29i amVjdCAqb2JqID0gdm1hLT5vYmo7Cj4gKwlpbnQgaTsKPgo+ICAgCWVyci0+c2l6ZSA9IG9iai0+ YmFzZS5zaXplOwo+ICAgCWVyci0+bmFtZSA9IG9iai0+YmFzZS5uYW1lOwo+IC0JZXJyLT5yc2Vx bm8gPSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+ICsJ Zm9yIChpID0gMDsgaSA8IEk5MTVfTlVNX1JJTkdTOyBpKyspCj4gKwkJZXJyLT5yc2Vxbm9baV0g PSBpOTE1X2dlbV9yZXF1ZXN0X2dldF9zZXFubyhvYmotPmxhc3RfcmVhZF9yZXFbaV0pOwo+ICAg CWVyci0+d3NlcW5vID0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfc2Vxbm8ob2JqLT5sYXN0X3dyaXRl X3JlcSk7Cj4gICAJZXJyLT5ndHRfb2Zmc2V0ID0gdm1hLT5ub2RlLnN0YXJ0Owo+ICAgCWVyci0+ cmVhZF9kb21haW5zID0gb2JqLT5iYXNlLnJlYWRfZG9tYWluczsKPiBAQCAtNjk1LDggKzcwMiw4 IEBAIHN0YXRpYyB2b2lkIGNhcHR1cmVfYm8oc3RydWN0IGRybV9pOTE1X2Vycm9yX2J1ZmZlciAq ZXJyLAo+ICAgCWVyci0+ZGlydHkgPSBvYmotPmRpcnR5Owo+ICAgCWVyci0+cHVyZ2VhYmxlID0g b2JqLT5tYWR2ICE9IEk5MTVfTUFEVl9XSUxMTkVFRDsKPiAgIAllcnItPnVzZXJwdHIgPSBvYmot PnVzZXJwdHIubW0gIT0gTlVMTDsKPiAtCWVyci0+cmluZyA9IG9iai0+bGFzdF9yZWFkX3JlcSA/ Cj4gLQkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3JlYWRfcmVxKS0+aWQg OiAtMTsKPiArCWVyci0+cmluZyA9IG9iai0+bGFzdF93cml0ZV9yZXEgPwo+ICsJCQlpOTE1X2dl bV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF93cml0ZV9yZXEpLT5pZCA6IC0xOwo+ICAgCWVy ci0+Y2FjaGVfbGV2ZWwgPSBvYmotPmNhY2hlX2xldmVsOwo+ICAgfQo+Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2ludGVsX2Rpc3BsYXkuYwo+IGluZGV4IDVlYjE1OWJjZDU5OS4uNjRiNjdkZjk0ZDMzIDEw MDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+ICsrKyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rpc3BsYXkuYwo+IEBAIC05ODk1LDcgKzk4OTUs NyBAQCBzdGF0aWMgYm9vbCB1c2VfbW1pb19mbGlwKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKnJp bmcsCj4gICAJZWxzZSBpZiAoaTkxNS5lbmFibGVfZXhlY2xpc3RzKQo+ICAgCQlyZXR1cm4gdHJ1 ZTsKPiAgIAllbHNlCj4gLQkJcmV0dXJuIHJpbmcgIT0gaTkxNV9nZW1fcmVxdWVzdF9nZXRfcmlu ZyhvYmotPmxhc3RfcmVhZF9yZXEpOwo+ICsJCXJldHVybiByaW5nICE9IGk5MTVfZ2VtX3JlcXVl c3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSk7Cj4gICB9Cj4KPiAgIHN0YXRpYyB2b2lk IHNrbF9kb19tbWlvX2ZsaXAoc3RydWN0IGludGVsX2NydGMgKmludGVsX2NydGMpCj4gQEAgLTEw MTk5LDcgKzEwMTk5LDcgQEAgc3RhdGljIGludCBpbnRlbF9jcnRjX3BhZ2VfZmxpcChzdHJ1Y3Qg ZHJtX2NydGMgKmNydGMsCj4gICAJfSBlbHNlIGlmIChJU19JVllCUklER0UoZGV2KSB8fCBJU19I QVNXRUxMKGRldikpIHsKPiAgIAkJcmluZyA9ICZkZXZfcHJpdi0+cmluZ1tCQ1NdOwo+ICAgCX0g ZWxzZSBpZiAoSU5URUxfSU5GTyhkZXYpLT5nZW4gPj0gNykgewo+IC0JCXJpbmcgPSBpOTE1X2dl bV9yZXF1ZXN0X2dldF9yaW5nKG9iai0+bGFzdF9yZWFkX3JlcSk7Cj4gKwkJcmluZyA9IGk5MTVf Z2VtX3JlcXVlc3RfZ2V0X3Jpbmcob2JqLT5sYXN0X3dyaXRlX3JlcSk7Cj4gICAJCWlmIChyaW5n ID09IE5VTEwgfHwgcmluZy0+aWQgIT0gUkNTKQo+ICAgCQkJcmluZyA9ICZkZXZfcHJpdi0+cmlu Z1tCQ1NdOwo+ICAgCX0gZWxzZSB7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2xyYy5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKPiBpbmRleCAx ZDBmYjg0NTBhZGMuLmZiNGYzNzkyZmQ3OCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9scmMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j Cj4gQEAgLTkwMSw2ICs5MDEsNyBAQCBzdGF0aWMgaW50IGxvZ2ljYWxfcmluZ193YWl0X3JlcXVl c3Qoc3RydWN0IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gICB7Cj4gICAJc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqcmluZyA9IHJpbmdidWYtPnJpbmc7Cj4gICAJc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpyZXF1ZXN0Owo+ICsJdW5zaWduZWQgc3BhY2U7Cj4gICAJaW50IHJldDsK Pgo+ICAgCWlmIChpbnRlbF9yaW5nX3NwYWNlKHJpbmdidWYpID49IGJ5dGVzKQo+IEBAIC05MTIs MTUgKzkxMywxNCBAQCBzdGF0aWMgaW50IGxvZ2ljYWxfcmluZ193YWl0X3JlcXVlc3Qoc3RydWN0 IGludGVsX3JpbmdidWZmZXIgKnJpbmdidWYsCj4gICAJCSAqIGZyb20gbXVsdGlwbGUgcmluZ2J1 ZmZlcnMuIEhlcmUsIHdlIG11c3QgaWdub3JlIGFueSB0aGF0Cj4gICAJCSAqIGFyZW4ndCBmcm9t IHRoZSByaW5nYnVmZmVyIHdlJ3JlIGNvbnNpZGVyaW5nLgo+ICAgCQkgKi8KPiAtCQlzdHJ1Y3Qg aW50ZWxfY29udGV4dCAqY3R4ID0gcmVxdWVzdC0+Y3R4Owo+IC0JCWlmIChjdHgtPmVuZ2luZVty aW5nLT5pZF0ucmluZ2J1ZiAhPSByaW5nYnVmKQo+ICsJCWlmIChyZXF1ZXN0LT5yaW5nYnVmICE9 IHJpbmdidWYpCj4gICAJCQljb250aW51ZTsKPgo+ICAgCQkvKiBXb3VsZCBjb21wbGV0aW9uIG9m IHRoaXMgcmVxdWVzdCBmcmVlIGVub3VnaCBzcGFjZT8gKi8KPiAtCQlpZiAoX19pbnRlbF9yaW5n X3NwYWNlKHJlcXVlc3QtPnRhaWwsIHJpbmdidWYtPnRhaWwsCj4gLQkJCQkgICAgICAgcmluZ2J1 Zi0+c2l6ZSkgPj0gYnl0ZXMpIHsKPiArCQlzcGFjZSA9IF9faW50ZWxfcmluZ19zcGFjZShyZXF1 ZXN0LT50YWlsLCByaW5nYnVmLT50YWlsLAo+ICsJCQkJCSAgIHJpbmdidWYtPnNpemUpOwo+ICsJ CWlmIChzcGFjZSA+PSBieXRlcykKPiAgIAkJCWJyZWFrOwo+IC0JCX0KPiAgIAl9Cj4KPiAgIAlp ZiAoJnJlcXVlc3QtPmxpc3QgPT0gJnJpbmctPnJlcXVlc3RfbGlzdCkKPiBAQCAtOTMwLDkgKzkz MCw4IEBAIHN0YXRpYyBpbnQgbG9naWNhbF9yaW5nX3dhaXRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxf cmluZ2J1ZmZlciAqcmluZ2J1ZiwKPiAgIAlpZiAocmV0KQo+ICAgCQlyZXR1cm4gcmV0Owo+Cj4g LQlpOTE1X2dlbV9yZXRpcmVfcmVxdWVzdHNfcmluZyhyaW5nKTsKPiAtCj4gLQlyZXR1cm4gaW50 ZWxfcmluZ19zcGFjZShyaW5nYnVmKSA+PSBieXRlcyA/IDAgOiAtRU5PU1BDOwo+ICsJcmluZ2J1 Zi0+c3BhY2UgPSBieXRlczsKPiArCXJldHVybiAwOwo+ICAgfQo+Cj4gICBzdGF0aWMgaW50IGxv Z2ljYWxfcmluZ193YWl0X2Zvcl9zcGFjZShzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1 ZiwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmluZ2J1ZmZlci5jCj4gaW5kZXggYTM1MTE3 ODkxM2Y3Li5hMTE4NGU3MDBkMWQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aW50ZWxfcmluZ2J1ZmZlci5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcmlu Z2J1ZmZlci5jCj4gQEAgLTIwNjEsMTYgKzIwNjEsMTcgQEAgc3RhdGljIGludCBpbnRlbF9yaW5n X3dhaXRfcmVxdWVzdChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpyaW5nLCBpbnQgbikKPiAgIHsK PiAgIAlzdHJ1Y3QgaW50ZWxfcmluZ2J1ZmZlciAqcmluZ2J1ZiA9IHJpbmctPmJ1ZmZlcjsKPiAg IAlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3Q7Cj4gKwl1bnNpZ25lZCBzcGFj ZTsKPiAgIAlpbnQgcmV0Owo+Cj4gICAJaWYgKGludGVsX3Jpbmdfc3BhY2UocmluZ2J1ZikgPj0g bikKPiAgIAkJcmV0dXJuIDA7Cj4KPiAgIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlcXVlc3QsICZy aW5nLT5yZXF1ZXN0X2xpc3QsIGxpc3QpIHsKPiAtCQlpZiAoX19pbnRlbF9yaW5nX3NwYWNlKHJl cXVlc3QtPnBvc3RmaXgsIHJpbmdidWYtPnRhaWwsCj4gLQkJCQkgICAgICAgcmluZ2J1Zi0+c2l6 ZSkgPj0gbikgewo+ICsJCXNwYWNlID0gX19pbnRlbF9yaW5nX3NwYWNlKHJlcXVlc3QtPnBvc3Rm aXgsIHJpbmdidWYtPnRhaWwsCj4gKwkJCQkJICAgcmluZ2J1Zi0+c2l6ZSk7Cj4gKwkJaWYgKHNw YWNlID49IG4pCj4gICAJCQlicmVhazsKPiAtCQl9Cj4gICAJfQo+Cj4gICAJaWYgKCZyZXF1ZXN0 LT5saXN0ID09ICZyaW5nLT5yZXF1ZXN0X2xpc3QpCj4gQEAgLTIwODAsOCArMjA4MSw3IEBAIHN0 YXRpYyBpbnQgaW50ZWxfcmluZ193YWl0X3JlcXVlc3Qoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq cmluZywgaW50IG4pCj4gICAJaWYgKHJldCkKPiAgIAkJcmV0dXJuIHJldDsKPgo+IC0JaTkxNV9n ZW1fcmV0aXJlX3JlcXVlc3RzX3JpbmcocmluZyk7Cj4gLQo+ICsJcmluZ2J1Zi0+c3BhY2UgPSBz cGFjZTsKPiAgIAlyZXR1cm4gMDsKPiAgIH0KPgo+CgpTbyBmYXIgaXQgYWxsIGxvb2tzIHJlYXNv bmFibGUgdG8gbWUsIGJ1dCBhcGFydCBmcm9tIHRoZSBjb21tZW50cyBhYm92ZSwgCkkgd2FudCB0 byBkbyBhbm90aGVyIHBhc3MgYW55d2F5LgoKUmVnYXJkcywKClR2cnRrbwoKX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlz dApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK