From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 17/38] drm/i915: Create/destroy VM (ppGTT) for use with contexts Date: Wed, 6 Mar 2019 11:27:37 +0000 Message-ID: <8af6b0e7-9cf5-2de8-2e86-ff5f0bef8267@linux.intel.com> References: <20190301140404.26690-1-chris@chris-wilson.co.uk> <20190301140404.26690-17-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 mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1417D6E09F for ; Wed, 6 Mar 2019 11:27:40 +0000 (UTC) In-Reply-To: <20190301140404.26690-17-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 Ck9uIDAxLzAzLzIwMTkgMTQ6MDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBJbiBwcmVwYXJhdGlv biB0byBtYWtpbmcgdGhlIHBwR1RUIGJpbmRpbmcgZm9yIGEgY29udGV4dCBleHBsaWNpdCAodG8K PiBmYWNpbGl0YXRlIHJldXNpbmcgdGhlIHNhbWUgcHBHVFQgYmV0d2VlbiBkaWZmZXJlbnQgY29u dGV4dHMpLCBhbGxvdyB0aGUKPiB1c2VyIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBuYW1lZCBwcEdU VC4KPiAKPiB2MjogUmVwbGFjZSBnbG9iYWwgYmFycmllciBmb3Igc3dhcHBpbmcgb3ZlciB0aGUg cHBndHQgYW5kIHRsYnMgd2l0aCBhCj4gbG9jYWwgY29udGV4dCBiYXJyaWVyIChUdnJ0a28pCj4g djM6IHNlcmlhbGlzZSB3aXRoIHN0cnVjdF9tdXRleDsgaXQncyBsYXp5IGJ1dCByZXF1aXJlZCBk YW1taXQKPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNv bi5jby51az4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgICAgICAg ICAgICAgICB8ICAgMiArCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAg ICAgICAgICAgfCAgIDMgKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4 dC5jICAgICAgIHwgMjU0ICsrKysrKysrKysrKysrKysrLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9nZW1fY29udGV4dC5oICAgICAgIHwgICA1ICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfZ2VtX2d0dC5jICAgICAgICAgICB8ICAxNyArLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9nZW1fZ3R0LmggICAgICAgICAgIHwgIDE2ICstCj4gICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jICAgfCAgIDEgLQo+ICAgLi4uL2dwdS9kcm0v aTkxNS9zZWxmdGVzdHMvaTkxNV9nZW1fY29udGV4dC5jIHwgMjM5ICsrKysrKysrKysrKy0tLS0K PiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8ICAgMSAt Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmMgfCAgIDgg Ky0KPiAgIGluY2x1ZGUvdWFwaS9kcm0vaTkxNV9kcm0uaCAgICAgICAgICAgICAgICAgICB8ICAz NiArKysKPiAgIDExIGZpbGVzIGNoYW5nZWQsIDUxMSBpbnNlcnRpb25zKCspLCA3MSBkZWxldGlv bnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiBpbmRleCAyMjRiYjk2Yjc4NzcuLjZi NzVkMWI3YjhiZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5j Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+IEBAIC0zMDA4LDYgKzMw MDgsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pb2N0bF9kZXNjIGk5MTVfaW9jdGxzW10g PSB7Cj4gICAJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9QRVJGX0FERF9DT05GSUcsIGk5MTVfcGVy Zl9hZGRfY29uZmlnX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJ RFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcsIGk5MTVfcGVyZl9yZW1v dmVfY29uZmlnX2lvY3RsLCBEUk1fVU5MT0NLRUR8RFJNX1JFTkRFUl9BTExPVyksCj4gICAJRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9RVUVSWSwgaTkxNV9xdWVyeV9pb2N0bCwgRFJNX1VOTE9DS0VE fERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJNX0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVk1fQ1JF QVRFLCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwsIERSTV9SRU5ERVJfQUxMT1cpLAo+ICsJRFJN X0lPQ1RMX0RFRl9EUlYoSTkxNV9HRU1fVk1fREVTVFJPWSwgaTkxNV9nZW1fdm1fZGVzdHJveV9p b2N0bCwgRFJNX1JFTkRFUl9BTExPVyksCj4gICB9Owo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGRy bV9kcml2ZXIgZHJpdmVyID0gewo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+IGluZGV4IDE5NWU3 MWJiNGE0Zi4uY2JjMmI1OTcyMmFlIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAg LTIxOCw2ICsyMTgsOSBAQCBzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlIHsKPiAgIAl9IG1t Owo+ICAgCXN0cnVjdCBpZHIgY29udGV4dF9pZHI7Cj4gICAKPiArCXN0cnVjdCBtdXRleCB2bV9s b2NrOwo+ICsJc3RydWN0IGlkciB2bV9pZHI7Cj4gKwo+ICAgCXVuc2lnbmVkIGludCBic2RfZW5n aW5lOwo+ICAgCj4gICAvKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMK PiBpbmRleCA5MTkyNmE0MDc1NDguLjhjMzViNjAxOWYwZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPiBAQCAtMTI0LDYgKzEyNCw4IEBAIHN0YXRpYyB2b2lk IGx1dF9jbG9zZShzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4KQo+ICAgCQlzdHJ1Y3QgaTkx NV92bWEgKnZtYSA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoKnNsb3QpOwo+ICAgCj4gICAJCXJhZGl4 X3RyZWVfaXRlcl9kZWxldGUoJmN0eC0+aGFuZGxlc192bWEsICZpdGVyLCBzbG90KTsKPiArCj4g KwkJdm1hLT5vcGVuX2NvdW50LS07CgpBc3N1bWluZyBub25lIG9mIHRoZSBuZXcgY29kZSBpbiB0 aGlzIHBhdGNoIGdldHMgY2FsbGVkLCB0aGVuIHRoaXMgCmNoYW5nZSBsb29rcyBsaWtlIHN0YW5k YWxvbmU/IFdoYXQgYW0gSSBtaXNzaW5nPwoKPiAgIAkJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV91bmxlc3NfYWN0aXZlKHZtYS0+b2JqKTsKPiAgIAl9Cj4gICAJcmN1X3JlYWRfdW5sb2NrKCk7 Cj4gQEAgLTMwOCw3ICszMTAsNyBAQCBzdGF0aWMgdm9pZCBjb250ZXh0X2Nsb3NlKHN0cnVjdCBp OTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gICAJICovCj4gICAJbHV0X2Nsb3NlKGN0eCk7Cj4gICAJ aWYgKGN0eC0+cHBndHQpCj4gLQkJaTkxNV9wcGd0dF9jbG9zZSgmY3R4LT5wcGd0dC0+dm0pOwo+ ICsJCWk5MTVfcHBndHRfY2xvc2UoY3R4LT5wcGd0dCk7Cj4gICAKPiAgIAljdHgtPmZpbGVfcHJp diA9IEVSUl9QVFIoLUVCQURGKTsKPiAgIAlpOTE1X2dlbV9jb250ZXh0X3B1dChjdHgpOwo+IEBA IC00NDcsNiArNDQ5LDMyIEBAIHN0YXRpYyB2b2lkIF9fZGVzdHJveV9od19jb250ZXh0KHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gICAJY29udGV4dF9jbG9zZShjdHgpOwo+ICAgfQo+ ICAgCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9od19wcGd0dCAqCj4gK19fc2V0X3BwZ3R0KHN0cnVj dCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsIHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAr ewo+ICsJc3RydWN0IGk5MTVfaHdfcHBndHQgKm9sZCA9IGN0eC0+cHBndHQ7Cj4gKwo+ICsJaTkx NV9wcGd0dF9vcGVuKHBwZ3R0KTsKPiArCWN0eC0+cHBndHQgPSBpOTE1X3BwZ3R0X2dldChwcGd0 dCk7Cj4gKwo+ICsJY3R4LT5kZXNjX3RlbXBsYXRlID0gZGVmYXVsdF9kZXNjX3RlbXBsYXRlKGN0 eC0+aTkxNSwgcHBndHQpOwo+ICsKPiArCXJldHVybiBvbGQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2 b2lkIF9fYXNzaWduX3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJCSAg IHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiArewo+ICsJaWYgKHBwZ3R0ID09IGN0eC0+ cHBndHQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCXBwZ3R0ID0gX19zZXRfcHBndHQoY3R4LCBwcGd0 dCk7Cj4gKwlpZiAocHBndHQpIHsKPiArCQlpOTE1X3BwZ3R0X2Nsb3NlKHBwZ3R0KTsKPiArCQlp OTE1X3BwZ3R0X3B1dChwcGd0dCk7Cj4gKwl9Cj4gK30KPiArCj4gICBzdGF0aWMgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKgo+ICAgaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoc3RydWN0IGRybV9p OTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCQkJc3RydWN0IGRybV9pOTE1X2ZpbGVfcHJpdmF0 ZSAqZmlsZV9wcml2KQo+IEBAIC00NzMsOCArNTAxLDggQEAgaTkxNV9nZW1fY3JlYXRlX2NvbnRl eHQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LAo+ICAgCQkJcmV0dXJuIEVSUl9D QVNUKHBwZ3R0KTsKPiAgIAkJfQo+ICAgCj4gLQkJY3R4LT5wcGd0dCA9IHBwZ3R0Owo+IC0JCWN0 eC0+ZGVzY190ZW1wbGF0ZSA9IGRlZmF1bHRfZGVzY190ZW1wbGF0ZShkZXZfcHJpdiwgcHBndHQp Owo+ICsJCV9fYXNzaWduX3BwZ3R0KGN0eCwgcHBndHQpOwo+ICsJCWk5MTVfcHBndHRfcHV0KHBw Z3R0KTsKPiAgIAl9Cj4gICAKPiAgIAl0cmFjZV9pOTE1X2NvbnRleHRfY3JlYXRlKGN0eCk7Cj4g QEAgLTY1NSwxOSArNjgzLDI5IEBAIHN0YXRpYyBpbnQgY29udGV4dF9pZHJfY2xlYW51cChpbnQg aWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCj4gICAJcmV0dXJuIDA7Cj4gICB9Cj4gICAKPiArc3Rh dGljIGludCB2bV9pZHJfY2xlYW51cChpbnQgaWQsIHZvaWQgKnAsIHZvaWQgKmRhdGEpCj4gK3sK PiArCWk5MTVfcHBndHRfcHV0KHApOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gICBpbnQgaTkx NV9nZW1fY29udGV4dF9vcGVuKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCQkJ ICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X2ZpbGVf cHJpdmF0ZSAqZmlsZV9wcml2ID0gZmlsZS0+ZHJpdmVyX3ByaXY7Cj4gICAJc3RydWN0IGk5MTVf Z2VtX2NvbnRleHQgKmN0eDsKPiAgIAo+ICsJbXV0ZXhfaW5pdCgmZmlsZV9wcml2LT52bV9sb2Nr KTsKPiArCj4gICAJaWRyX2luaXQoJmZpbGVfcHJpdi0+Y29udGV4dF9pZHIpOwo+ICsJaWRyX2lu aXRfYmFzZSgmZmlsZV9wcml2LT52bV9pZHIsIDEpOwo+ICAgCj4gICAJbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gICAJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQo aTkxNSwgZmlsZV9wcml2KTsKPiAgIAltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+ICAgCWlmIChJU19FUlIoY3R4KSkgewo+ICAgCQlpZHJfZGVzdHJveSgmZmlsZV9wcml2 LT5jb250ZXh0X2lkcik7Cj4gKwkJaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdi0+dm1faWRyKTsKPiAg IAkJcmV0dXJuIFBUUl9FUlIoY3R4KTsKPiAgIAl9Cj4gICAKPiBAQCAtNjg0LDYgKzcyMiw4OSBA QCB2b2lkIGk5MTVfZ2VtX2NvbnRleHRfY2xvc2Uoc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICAg Cj4gICAJaWRyX2Zvcl9lYWNoKCZmaWxlX3ByaXYtPmNvbnRleHRfaWRyLCBjb250ZXh0X2lkcl9j bGVhbnVwLCBOVUxMKTsKPiAgIAlpZHJfZGVzdHJveSgmZmlsZV9wcml2LT5jb250ZXh0X2lkcik7 Cj4gKwo+ICsJaWRyX2Zvcl9lYWNoKCZmaWxlX3ByaXYtPnZtX2lkciwgdm1faWRyX2NsZWFudXAs IE5VTEwpOwo+ICsJaWRyX2Rlc3Ryb3koJmZpbGVfcHJpdi0+dm1faWRyKTsKPiArCj4gKwltdXRl eF9kZXN0cm95KCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9nZW1f dm1fY3JlYXRlX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gKwkJ CSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSA9IHRvX2k5MTUoZGV2KTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fdm1fY29u dHJvbCAqYXJncyA9IGRhdGE7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxl X3ByaXYgPSBmaWxlLT5kcml2ZXJfcHJpdjsKPiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dDsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKCFIQVNfRlVMTF9QUEdUVChpOTE1KSkKPiArCQly ZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlpZiAoYXJncy0+ZmxhZ3MpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJaWYgKGFyZ3MtPmV4dGVuc2lvbnMpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJcHBndHQgPSBpOTE1X3BwZ3R0X2NyZWF0ZShpOTE1LCBmaWxlX3ByaXYpOwo+ICsJaWYg KElTX0VSUihwcGd0dCkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocHBndHQpOwo+ICsKPiArCWVyciA9 IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmlsZV9wcml2LT52bV9sb2NrKTsKPiArCWlmIChl cnIpCj4gKwkJZ290byBlcnJfcHV0Owo+ICsKPiArCWVyciA9IGlkcl9hbGxvYygmZmlsZV9wcml2 LT52bV9pZHIsIHBwZ3R0LCAwLCAwLCBHRlBfS0VSTkVMKTsKPiArCW11dGV4X3VubG9jaygmZmls ZV9wcml2LT52bV9sb2NrKTsKPiArCWlmIChlcnIgPCAwKQo+ICsJCWdvdG8gZXJyX3B1dDsKPiAr Cj4gKwlHRU1fQlVHX09OKGVyciA9PSAwKTsgLyogcmVzZXJ2ZWQgZm9yIGRlZmF1bHQvdW5hc3Np Z25lZCBwcGd0dCAqLwo+ICsJcHBndHQtPnVzZXJfaGFuZGxlID0gZXJyOwo+ICsJYXJncy0+aWQg PSBlcnI7Cj4gKwlyZXR1cm4gMDsKPiArCj4gK2Vycl9wdXQ6Cj4gKwlpOTE1X3BwZ3R0X3B1dChw cGd0dCk7Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtpbnQgaTkxNV9nZW1fdm1fZGVzdHJv eV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAo+ICsJCQkgICAgICBz dHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZh dGUgKmZpbGVfcHJpdiA9IGZpbGUtPmRyaXZlcl9wcml2Owo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV92bV9jb250cm9sICphcmdzID0gZGF0YTsKPiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0 dDsKPiArCWludCBlcnI7Cj4gKwl1MzIgaWQ7Cj4gKwoKRG8gd2Ugd2FudCBhbiAtRU5PREVWIGNo ZWNrIGhlcmUgYXMgd2VsbD8KCj4gKwlpZiAoYXJncy0+ZmxhZ3MpCj4gKwkJcmV0dXJuIC1FSU5W QUw7Cj4gKwo+ICsJaWYgKGFyZ3MtPmV4dGVuc2lvbnMpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g Kwo+ICsJaWQgPSBhcmdzLT5pZDsKPiArCWlmICghaWQpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4g Kwo+ICsJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2xvY2sp Owo+ICsJaWYgKGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCXBwZ3R0ID0gaWRyX3JlbW92 ZSgmZmlsZV9wcml2LT52bV9pZHIsIGlkKTsKPiArCWlmIChwcGd0dCkgewo+ICsJCUdFTV9CVUdf T04oIXBwZ3R0LT51c2VyX2hhbmRsZSk7Cj4gKwkJcHBndHQtPnVzZXJfaGFuZGxlID0gMDsKPiAr CX0KPiArCj4gKwltdXRleF91bmxvY2soJmZpbGVfcHJpdi0+dm1fbG9jayk7CgpOaXQgLSBtb3Zl IHRvIGp1c3QgYWZ0ZXIgaWRyX3JlbW92ZSBmb3Igc3ltbWV0cnkgd2l0aCBjcmVhdGU/Cgo+ICsJ aWYgKCFwcGd0dCkKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwlpOTE1X3BwZ3R0X3B1dChw cGd0dCk7Cj4gKwlyZXR1cm4gMDsKPiAgIH0KPiAgIAo+ICAgc3RhdGljIHN0cnVjdCBpOTE1X3Jl cXVlc3QgKgo+IEBAIC04MzEsNiArOTUyLDEyMCBAQCBpbnQgaTkxNV9nZW1fc3dpdGNoX3RvX2tl cm5lbF9jb250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCXJldHVybiAw Owo+ICAgfQo+ICAgCj4gK3N0YXRpYyBpbnQgZ2V0X3BwZ3R0KHN0cnVjdCBpOTE1X2dlbV9jb250 ZXh0ICpjdHgsCj4gKwkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0gKmFy Z3MpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdiA9IGN0 eC0+ZmlsZV9wcml2Owo+ICsJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+ICsJaW50IHJl dDsKPiArCj4gKwlpZiAoIWN0eC0+cHBndHQpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJ LyogWFhYIHJjdSBhY3F1aXJlPyAqLwo+ICsJcmV0ID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxl KCZjdHgtPmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4g cmV0Owo+ICsKPiArCXBwZ3R0ID0gaTkxNV9wcGd0dF9nZXQoY3R4LT5wcGd0dCk7Cj4gKwltdXRl eF91bmxvY2soJmN0eC0+aTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwo+ICsJcmV0ID0gbXV0 ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaWxlX3ByaXYtPnZtX2xvY2spOwo+ICsJaWYgKHJldCkK PiArCQlnb3RvIGVycl9wdXQ7Cj4gKwo+ICsJaWYgKCFwcGd0dC0+dXNlcl9oYW5kbGUpIHsKPiAr CQlyZXQgPSBpZHJfYWxsb2MoJmZpbGVfcHJpdi0+dm1faWRyLCBwcGd0dCwgMCwgMCwgR0ZQX0tF Uk5FTCk7Cj4gKwkJR0VNX0JVR19PTighcmV0KTsKPiArCQlpZiAocmV0IDwgMCkKPiArCQkJZ290 byBlcnJfdW5sb2NrOwo+ICsKPiArCQlwcGd0dC0+dXNlcl9oYW5kbGUgPSByZXQ7Cj4gKwkJaTkx NV9wcGd0dF9nZXQocHBndHQpOwo+ICsJfQo+ICsKPiArCWFyZ3MtPnNpemUgPSAwOwo+ICsJYXJn cy0+dmFsdWUgPSBwcGd0dC0+dXNlcl9oYW5kbGU7Cj4gKwo+ICsJcmV0ID0gMDsKPiArZXJyX3Vu bG9jazoKPiArCW11dGV4X3VubG9jaygmZmlsZV9wcml2LT52bV9sb2NrKTsKPiArZXJyX3B1dDoK PiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0 YXRpYyB2b2lkIHNldF9wcGd0dF9iYXJyaWVyKHZvaWQgKmRhdGEpCj4gK3sKPiArCXN0cnVjdCBp OTE1X2h3X3BwZ3R0ICpvbGQgPSBkYXRhOwo+ICsKPiArCWk5MTVfcHBndHRfY2xvc2Uob2xkKTsK PiArCWk5MTVfcHBndHRfcHV0KG9sZCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgc2V0X3BwZ3R0 KHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgsCj4gKwkJICAgICBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2NvbnRleHRfcGFyYW0gKmFyZ3MpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9maWxlX3By aXZhdGUgKmZpbGVfcHJpdiA9IGN0eC0+ZmlsZV9wcml2Owo+ICsJc3RydWN0IGk5MTVfaHdfcHBn dHQgKnBwZ3R0LCAqb2xkOwo+ICsJaW50IGVycjsKPiArCj4gKwlpZiAoYXJncy0+c2l6ZSkKPiAr CQlyZXR1cm4gLUVJTlZBTDsKPiArCj4gKwlpZiAodXBwZXJfMzJfYml0cyhhcmdzLT52YWx1ZSkp Cj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ICsJaWYgKCFjdHgtPnBwZ3R0KQo+ICsJCXJldHVy biAtRU5PREVWOwo+ICsKPiArCWVyciA9IG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmlsZV9w cml2LT52bV9sb2NrKTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwlwcGd0 dCA9IGlkcl9maW5kKCZmaWxlX3ByaXYtPnZtX2lkciwgYXJncy0+dmFsdWUpOwo+ICsJaWYgKHBw Z3R0KSB7Cj4gKwkJR0VNX0JVR19PTihwcGd0dC0+dXNlcl9oYW5kbGUgIT0gYXJncy0+dmFsdWUp Owo+ICsJCWk5MTVfcHBndHRfZ2V0KHBwZ3R0KTsKPiArCX0KPiArCW11dGV4X3VubG9jaygmZmls ZV9wcml2LT52bV9sb2NrKTsKPiArCWlmICghcHBndHQpCj4gKwkJcmV0dXJuIC1FTk9FTlQ7Cj4g Kwo+ICsJZXJyID0gbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZjdHgtPmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gKwlpZiAocHBndHQg PT0gY3R4LT5wcGd0dCkKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwkvKiBUZWFyZG93biB0aGUg ZXhpc3Rpbmcgb2JqOnZtYSBjYWNoZSwgaXQgd2lsbCBoYXZlIHRvIGJlIHJlYnVpbHQuICovCj4g KwlsdXRfY2xvc2UoY3R4KTsKPiArCj4gKwlvbGQgPSBfX3NldF9wcGd0dChjdHgsIHBwZ3R0KTsK PiArCj4gKwkvKgo+ICsJICogV2UgbmVlZCB0byBmbHVzaCBhbnkgcmVxdWVzdHMgdXNpbmcgdGhl IGN1cnJlbnQgcHBndHQgYmVmb3JlCj4gKwkgKiB3ZSByZWxlYXNlIGl0IGFzIHRoZSByZXF1ZXN0 cyBkbyBub3QgaG9sZCBhIHJlZmVyZW5jZSB0aGVtc2VsdmVzLAo+ICsJICogb25seSBpbmRpcmVj dGx5IHRocm91Z2ggdGhlIGNvbnRleHQuCj4gKwkgKi8KPiArCWVyciA9IGNvbnRleHRfYmFycmll cl90YXNrKGN0eCwgLTEsIHNldF9wcGd0dF9iYXJyaWVyLCBvbGQpOwoKcy8tMS9BTExfRU5HSU5F Uy8gPwoKPiArCWlmIChlcnIpIHsKPiArCQljdHgtPnBwZ3R0ID0gb2xkOwo+ICsJCWN0eC0+ZGVz Y190ZW1wbGF0ZSA9IGRlZmF1bHRfZGVzY190ZW1wbGF0ZShjdHgtPmk5MTUsIG9sZCk7Cj4gKwo+ ICsJCWk5MTVfcHBndHRfY2xvc2UocHBndHQpOwo+ICsJCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsK PiArCX0KPiArCj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmY3R4LT5pOTE1LT5kcm0uc3Ry dWN0X211dGV4KTsKPiArCj4gK291dDoKPiArCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiArCXJl dHVybiBlcnI7Cj4gK30KPiArCj4gICBzdGF0aWMgYm9vbCBjbGllbnRfaXNfYmFubmVkKHN0cnVj dCBkcm1faTkxNV9maWxlX3ByaXZhdGUgKmZpbGVfcHJpdikKPiAgIHsKPiAgIAlyZXR1cm4gYXRv bWljX3JlYWQoJmZpbGVfcHJpdi0+YmFuX3Njb3JlKSA+PSBJOTE1X0NMSUVOVF9TQ09SRV9CQU5O RUQ7Cj4gQEAgLTEwMDksNiArMTI0NCw5IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2dldHBhcmFt X2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCj4gICAJY2FzZSBJOTE1 X0NPTlRFWFRfUEFSQU1fU1NFVToKPiAgIAkJcmV0ID0gZ2V0X3NzZXUoY3R4LCBhcmdzKTsKPiAg IAkJYnJlYWs7Cj4gKwljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9WTToKPiArCQlyZXQgPSBnZXRf cHBndHQoY3R4LCBhcmdzKTsKPiArCQlicmVhazsKPiAgIAlkZWZhdWx0Ogo+ICAgCQlyZXQgPSAt RUlOVkFMOwo+ICAgCQlicmVhazsKPiBAQCAtMTMwNiw5ICsxNTQ0LDYgQEAgaW50IGk5MTVfZ2Vt X2NvbnRleHRfc2V0cGFyYW1faW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiAgIAkJcmV0dXJuIC1FTk9FTlQ7Cj4gICAKPiAgIAlzd2l0Y2ggKGFyZ3MtPnBhcmFtKSB7 Cj4gLQljYXNlIEk5MTVfQ09OVEVYVF9QQVJBTV9CQU5fUEVSSU9EOgo+IC0JCXJldCA9IC1FSU5W QUw7Cj4gLQkJYnJlYWs7Cj4gICAJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fTk9fWkVST01BUDoK PiAgIAkJaWYgKGFyZ3MtPnNpemUpCj4gICAJCQlyZXQgPSAtRUlOVkFMOwo+IEBAIC0xMzY0LDkg KzE1OTksMTYgQEAgaW50IGk5MTVfZ2VtX2NvbnRleHRfc2V0cGFyYW1faW9jdGwoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKPiAgIAkJCQkJSTkxNV9VU0VSX1BSSU9SSVRZKHBy aW9yaXR5KTsKPiAgIAkJfQo+ICAgCQlicmVhazsKPiArCj4gICAJY2FzZSBJOTE1X0NPTlRFWFRf UEFSQU1fU1NFVToKPiAgIAkJcmV0ID0gc2V0X3NzZXUoY3R4LCBhcmdzKTsKPiAgIAkJYnJlYWs7 Cj4gKwo+ICsJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1fVk06Cj4gKwkJcmV0ID0gc2V0X3BwZ3R0 KGN0eCwgYXJncyk7Cj4gKwkJYnJlYWs7Cj4gKwo+ICsJY2FzZSBJOTE1X0NPTlRFWFRfUEFSQU1f QkFOX1BFUklPRDoKPiAgIAlkZWZhdWx0Ogo+ICAgCQlyZXQgPSAtRUlOVkFMOwo+ICAgCQlicmVh azsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5oCj4gaW5kZXggZGY0ODAx M2I1ODFlLi45N2NmOWQzZDA3YWUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9nZW1fY29udGV4dC5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1f Y29udGV4dC5oCj4gQEAgLTM4NCw2ICszODQsMTEgQEAgdm9pZCBpOTE1X2dlbV9jb250ZXh0X3Jl bGVhc2Uoc3RydWN0IGtyZWYgKmN0eF9yZWYpOwo+ICAgc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQg Kgo+ICAgaTkxNV9nZW1fY29udGV4dF9jcmVhdGVfZ3Z0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+ICAgCj4gK2ludCBpOTE1X2dlbV92bV9jcmVhdGVfaW9jdGwoc3RydWN0IGRybV9kZXZpY2Ug KmRldiwgdm9pZCAqZGF0YSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICtp bnQgaTkxNV9nZW1fdm1fZGVzdHJveV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGUpOwo+ICsKPiAgIGludCBp OTE1X2dlbV9jb250ZXh0X2NyZWF0ZV9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lk ICpkYXRhLAo+ICAgCQkJCSAgc3RydWN0IGRybV9maWxlICpmaWxlKTsKPiAgIGludCBpOTE1X2dl bV9jb250ZXh0X2Rlc3Ryb3lfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0 YSwKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+IGluZGV4IDk5MDIyNzM4Y2M4OS4u ZDNmODBkYmYxM2VmIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2Vt X2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMKPiBAQCAt MjEwMywxMCArMjEwMywyMSBAQCBpOTE1X3BwZ3R0X2NyZWF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqaTkxNSwKPiAgIAlyZXR1cm4gcHBndHQ7Cj4gICB9Cj4gICAKPiAtdm9pZCBpOTE1X3Bw Z3R0X2Nsb3NlKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+ICt2b2lkIGk5MTVfcHBn dHRfb3BlbihzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gICB7Cj4gLQlHRU1fQlVHX09O KHZtLT5jbG9zZWQpOwo+IC0Jdm0tPmNsb3NlZCA9IHRydWU7Cj4gKwlHRU1fQlVHX09OKHBwZ3R0 LT52bS5jbG9zZWQpOwo+ICsKPiArCXBwZ3R0LT5vcGVuX2NvdW50Kys7Cj4gK30KPiArCj4gK3Zv aWQgaTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4gK3sKPiAr CUdFTV9CVUdfT04oIXBwZ3R0LT5vcGVuX2NvdW50KTsKPiArCWlmICgtLXBwZ3R0LT5vcGVuX2Nv dW50KQo+ICsJCXJldHVybjsKPiArCj4gKwlHRU1fQlVHX09OKHBwZ3R0LT52bS5jbG9zZWQpOwo+ ICsJcHBndHQtPnZtLmNsb3NlZCA9IHRydWU7Cj4gICB9Cj4gICAKPiAgIHN0YXRpYyB2b2lkIHBw Z3R0X2Rlc3Ryb3lfdm1hKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZtKQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4gaW5kZXggMDNhZGU3MWI4ZDlhLi5iYjc1MDMxOGY1MmEg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC0zOTEsMTEgKzM5MSwx NSBAQCBzdHJ1Y3QgaTkxNV9od19wcGd0dCB7Cj4gICAJc3RydWN0IGtyZWYgcmVmOwo+ICAgCj4g ICAJdW5zaWduZWQgbG9uZyBwZF9kaXJ0eV9yaW5nczsKPiArCXVuc2lnbmVkIGludCBvcGVuX2Nv dW50Owo+ICsKPiAgIAl1bmlvbiB7Cj4gICAJCXN0cnVjdCBpOTE1X3BtbDQgcG1sNDsJCS8qIEdF TjgrICYgNDhiIFBQR1RUICovCj4gICAJCXN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X3BvaW50 ZXIgcGRwOwkvKiBHRU44KyAqLwo+ICAgCQlzdHJ1Y3QgaTkxNV9wYWdlX2RpcmVjdG9yeSBwZDsJ CS8qIEdFTjYtNyAqLwo+ICAgCX07Cj4gKwo+ICsJdTMyIHVzZXJfaGFuZGxlOwo+ICAgfTsKPiAg IAo+ICAgc3RydWN0IGdlbjZfaHdfcHBndHQgewo+IEBAIC02MDYsMTIgKzYxMCwxNiBAQCBpbnQg aTkxNV9wcGd0dF9pbml0X2h3KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4g ICB2b2lkIGk5MTVfcHBndHRfcmVsZWFzZShzdHJ1Y3Qga3JlZiAqa3JlZik7Cj4gICBzdHJ1Y3Qg aTkxNV9od19wcGd0dCAqaTkxNV9wcGd0dF9jcmVhdGUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg KmRldl9wcml2LAo+ICAgCQkJCQlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmcHJpdik7 Cj4gLXZvaWQgaTkxNV9wcGd0dF9jbG9zZShzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSk7 Cj4gLXN0YXRpYyBpbmxpbmUgdm9pZCBpOTE1X3BwZ3R0X2dldChzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQpCj4gKwo+ICt2b2lkIGk5MTVfcHBndHRfb3BlbihzdHJ1Y3QgaTkxNV9od19wcGd0 dCAqcHBndHQpOwo+ICt2b2lkIGk5MTVfcHBndHRfY2xvc2Uoc3RydWN0IGk5MTVfaHdfcHBndHQg KnBwZ3R0KTsKPiArCj4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IGk5MTVfaHdfcHBndHQgKmk5MTVf cHBndHRfZ2V0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgIHsKPiAtCWlmIChwcGd0 dCkKPiAtCQlrcmVmX2dldCgmcHBndHQtPnJlZik7Cj4gKwlrcmVmX2dldCgmcHBndHQtPnJlZik7 Cj4gKwlyZXR1cm4gcHBndHQ7Cj4gICB9Cj4gKwo+ICAgc3RhdGljIGlubGluZSB2b2lkIGk5MTVf cHBndHRfcHV0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPiAgIHsKPiAgIAlpZiAocHBn dHQpCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9odWdlX3Bh Z2VzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaHVnZV9wYWdlcy5jCj4gaW5k ZXggNGI5ZGVkNGNhMGY1Li5jNTFhYTA5NjY4Y2MgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvc2VsZnRlc3RzL2h1Z2VfcGFnZXMuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9odWdlX3BhZ2VzLmMKPiBAQCAtMTczNCw3ICsxNzM0LDYgQEAgaW50IGk5 MTVfZ2VtX2h1Z2VfcGFnZV9tb2NrX3NlbGZ0ZXN0cyh2b2lkKQo+ICAgCWVyciA9IGk5MTVfc3Vi dGVzdHModGVzdHMsIHBwZ3R0KTsKPiAgIAo+ICAgb3V0X2Nsb3NlOgo+IC0JaTkxNV9wcGd0dF9j bG9zZSgmcHBndHQtPnZtKTsKPiAgIAlpOTE1X3BwZ3R0X3B1dChwcGd0dCk7Cj4gICAKPiAgIG91 dF91bmxvY2s6Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbV9jb250ZXh0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9n ZW1fY29udGV4dC5jCj4gaW5kZXggNGY3YzA0MjQ3MzU0Li45MTMzYWZjMDMxMzUgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2NvbnRleHQuYwo+ ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9jb250ZXh0LmMK PiBAQCAtMzcyLDcgKzM3Miw4IEBAIHN0YXRpYyBpbnQgY3B1X2ZpbGwoc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iaiwgdTMyIHZhbHVlKQo+ICAgCXJldHVybiAwOwo+ICAgfQo+ICAgCj4g LXN0YXRpYyBpbnQgY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosIHVu c2lnbmVkIGludCBtYXgpCj4gK3N0YXRpYyBub2lubGluZSBpbnQgY3B1X2NoZWNrKHN0cnVjdCBk cm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBpZHgsIHVu c2lnbmVkIGludCBtYXgpCj4gICB7Cj4gICAJdW5zaWduZWQgaW50IG4sIG0sIG5lZWRzX2ZsdXNo Owo+ICAgCWludCBlcnI7Cj4gQEAgLTM5MCw4ICszOTEsMTAgQEAgc3RhdGljIGludCBjcHVfY2hl Y2soc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwgdW5zaWduZWQgaW50IG1heCkKPiAg IAo+ICAgCQlmb3IgKG0gPSAwOyBtIDwgbWF4OyBtKyspIHsKPiAgIAkJCWlmIChtYXBbbV0gIT0g bSkgewo+IC0JCQkJcHJfZXJyKCJJbnZhbGlkIHZhbHVlIGF0IHBhZ2UgJWQsIG9mZnNldCAlZDog Zm91bmQgJXggZXhwZWN0ZWQgJXhcbiIsCj4gLQkJCQkgICAgICAgbiwgbSwgbWFwW21dLCBtKTsK PiArCQkJCXByX2VycigiJXBTOiBJbnZhbGlkIHZhbHVlIGF0IG9iamVjdCAlZCBwYWdlICVkLyVs ZCwgb2Zmc2V0ICVkLyVkOiBmb3VuZCAleCBleHBlY3RlZCAleFxuIiwKPiArCQkJCSAgICAgICBf X2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGlkeCwKPiArCQkJCSAgICAgICBuLCByZWFsX3Bh Z2VfY291bnQob2JqKSwgbSwgbWF4LAo+ICsJCQkJICAgICAgIG1hcFttXSwgbSk7Cj4gICAJCQkJ ZXJyID0gLUVJTlZBTDsKPiAgIAkJCQlnb3RvIG91dF91bm1hcDsKPiAgIAkJCX0KPiBAQCAtMzk5 LDggKzQwMiw5IEBAIHN0YXRpYyBpbnQgY3B1X2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fb2Jq ZWN0ICpvYmosIHVuc2lnbmVkIGludCBtYXgpCj4gICAKPiAgIAkJZm9yICg7IG0gPCBEV19QRVJf UEFHRTsgbSsrKSB7Cj4gICAJCQlpZiAobWFwW21dICE9IFNUQUNLX01BR0lDKSB7Cj4gLQkJCQlw cl9lcnIoIkludmFsaWQgdmFsdWUgYXQgcGFnZSAlZCwgb2Zmc2V0ICVkOiBmb3VuZCAleCBleHBl Y3RlZCAleFxuIiwKPiAtCQkJCSAgICAgICBuLCBtLCBtYXBbbV0sIFNUQUNLX01BR0lDKTsKPiAr CQkJCXByX2VycigiJXBTOiBJbnZhbGlkIHZhbHVlIGF0IG9iamVjdCAlZCBwYWdlICVkLCBvZmZz ZXQgJWQ6IGZvdW5kICV4IGV4cGVjdGVkICV4ICh1bmluaXRpYWxpc2VkKVxuIiwKPiArCQkJCSAg ICAgICBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCksIGlkeCwgbiwgbSwKPiArCQkJCSAgICAg ICBtYXBbbV0sIFNUQUNLX01BR0lDKTsKPiAgIAkJCQllcnIgPSAtRUlOVkFMOwo+ICAgCQkJCWdv dG8gb3V0X3VubWFwOwo+ICAgCQkJfQo+IEBAIC00NzgsMTIgKzQ4Miw4IEBAIHN0YXRpYyB1bnNp Z25lZCBsb25nIG1heF9kd29yZHMoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaikKPiAg IHN0YXRpYyBpbnQgaWd0X2N0eF9leGVjKHZvaWQgKmFyZykKPiAgIHsKPiAgIAlzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiAtCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmogPSBOVUxMOwo+IC0JdW5zaWduZWQgbG9uZyBuY29udGV4dHMsIG5kd29yZHMsIGR3Owo+ IC0Jc3RydWN0IGlndF9saXZlX3Rlc3QgdDsKPiAtCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiAt CUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiAtCUxJU1RfSEVBRChvYmplY3RzKTsKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ ICAgCWludCBlcnIgPSAtRU5PREVWOwo+ICAgCj4gICAJLyoKPiBAQCAtNDk1LDM4ICs0OTUsNDIg QEAgc3RhdGljIGludCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+ICAgCWlmICghRFJJVkVSX0NB UFMoaTkxNSktPmhhc19sb2dpY2FsX2NvbnRleHRzKQo+ICAgCQlyZXR1cm4gMDsKPiAgIAo+IC0J ZmlsZSA9IG1vY2tfZmlsZShpOTE1KTsKPiAtCWlmIChJU19FUlIoZmlsZSkpCj4gLQkJcmV0dXJu IFBUUl9FUlIoZmlsZSk7Cj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOwo+ICsJCXVuc2lnbmVk IGxvbmcgbmNvbnRleHRzLCBuZHdvcmRzLCBkdzsKPiArCQlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0 Owo+ICsJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiArCQlJR1RfVElNRU9VVChlbmRfdGltZSk7 Cj4gKwkJTElTVF9IRUFEKG9iamVjdHMpOwo+ICAgCj4gLQltdXRleF9sb2NrKCZpOTE1LT5kcm0u c3RydWN0X211dGV4KTsKPiArCQlpZiAoIWludGVsX2VuZ2luZV9jYW5fc3RvcmVfZHdvcmQoZW5n aW5lKSkKPiArCQkJY29udGludWU7Cj4gICAKPiAtCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4o JnQsIGk5MTUsIF9fZnVuY19fLCAiIik7Cj4gLQlpZiAoZXJyKQo+IC0JCWdvdG8gb3V0X3VubG9j azsKPiArCQlpZiAoIWVuZ2luZS0+Y29udGV4dF9zaXplKQo+ICsJCQljb250aW51ZTsgLyogTm8g bG9naWNhbCBjb250ZXh0IHN1cHBvcnQgaW4gSFcgKi8KPiAgIAo+IC0JbmNvbnRleHRzID0gMDsK PiAtCW5kd29yZHMgPSAwOwo+IC0JZHcgPSAwOwo+IC0Jd2hpbGUgKCF0aW1lX2FmdGVyKGppZmZp ZXMsIGVuZF90aW1lKSkgewo+IC0JCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAt CQlzdHJ1Y3QgaTkxNV9nZW1fY29udGV4dCAqY3R4Owo+IC0JCXVuc2lnbmVkIGludCBpZDsKPiAr CQlmaWxlID0gbW9ja19maWxlKGk5MTUpOwo+ICsJCWlmIChJU19FUlIoZmlsZSkpCj4gKwkJCXJl dHVybiBQVFJfRVJSKGZpbGUpOwo+ICAgCj4gLQkJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRl eHQoaTkxNSwgZmlsZS0+ZHJpdmVyX3ByaXYpOwo+IC0JCWlmIChJU19FUlIoY3R4KSkgewo+IC0J CQllcnIgPSBQVFJfRVJSKGN0eCk7Cj4gKwkJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwo+ICsJCWVyciA9IGlndF9saXZlX3Rlc3RfYmVnaW4oJnQsIGk5MTUsIF9fZnVu Y19fLCBlbmdpbmUtPm5hbWUpOwo+ICsJCWlmIChlcnIpCj4gICAJCQlnb3RvIG91dF91bmxvY2s7 Cj4gLQkJfQo+ICAgCj4gLQkJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwgaWQpIHsKPiAr CQluY29udGV4dHMgPSAwOwo+ICsJCW5kd29yZHMgPSAwOwo+ICsJCWR3ID0gMDsKPiArCQl3aGls ZSAoIXRpbWVfYWZ0ZXIoamlmZmllcywgZW5kX3RpbWUpKSB7Cj4gKwkJCXN0cnVjdCBpOTE1X2dl bV9jb250ZXh0ICpjdHg7Cj4gICAJCQlpbnRlbF93YWtlcmVmX3Qgd2FrZXJlZjsKPiAgIAo+IC0J CQlpZiAoIWVuZ2luZS0+Y29udGV4dF9zaXplKQo+IC0JCQkJY29udGludWU7IC8qIE5vIGxvZ2lj YWwgY29udGV4dCBzdXBwb3J0IGluIEhXICovCj4gLQo+IC0JCQlpZiAoIWludGVsX2VuZ2luZV9j YW5fc3RvcmVfZHdvcmQoZW5naW5lKSkKPiAtCQkJCWNvbnRpbnVlOwo+ICsJCQljdHggPSBpOTE1 X2dlbV9jcmVhdGVfY29udGV4dChpOTE1LCBmaWxlLT5kcml2ZXJfcHJpdik7Cj4gKwkJCWlmIChJ U19FUlIoY3R4KSkgewo+ICsJCQkJZXJyID0gUFRSX0VSUihjdHgpOwo+ICsJCQkJZ290byBvdXRf dW5sb2NrOwo+ICsJCQl9Cj4gICAKPiAgIAkJCWlmICghb2JqKSB7Cj4gICAJCQkJb2JqID0gY3Jl YXRlX3Rlc3Rfb2JqZWN0KGN0eCwgZmlsZSwgJm9iamVjdHMpOwo+IEBAIC01MzYsNyArNTQwLDYg QEAgc3RhdGljIGludCBpZ3RfY3R4X2V4ZWModm9pZCAqYXJnKQo+ICAgCQkJCX0KPiAgIAkJCX0K PiAgIAo+IC0JCQllcnIgPSAwOwo+ICAgCQkJd2l0aF9pbnRlbF9ydW50aW1lX3BtKGk5MTUsIHdh a2VyZWYpCj4gICAJCQkJZXJyID0gZ3B1X2ZpbGwob2JqLCBjdHgsIGVuZ2luZSwgZHcpOwo+ICAg CQkJaWYgKGVycikgewo+IEBAIC01NTEsMzIgKzU1NCwxNTggQEAgc3RhdGljIGludCBpZ3RfY3R4 X2V4ZWModm9pZCAqYXJnKQo+ICAgCQkJCW9iaiA9IE5VTEw7Cj4gICAJCQkJZHcgPSAwOwo+ICAg CQkJfQo+ICsKPiAgIAkJCW5kd29yZHMrKzsKPiArCQkJbmNvbnRleHRzKys7Cj4gICAJCX0KPiAt CQluY29udGV4dHMrKzsKPiArCj4gKwkJcHJfaW5mbygiU3VibWl0dGVkICVsdSBjb250ZXh0cyB0 byAlcywgZmlsbGluZyAlbHUgZHdvcmRzXG4iLAo+ICsJCQluY29udGV4dHMsIGVuZ2luZS0+bmFt ZSwgbmR3b3Jkcyk7Cj4gKwo+ICsJCW5jb250ZXh0cyA9IGR3ID0gMDsKPiArCQlsaXN0X2Zvcl9l YWNoX2VudHJ5KG9iaiwgJm9iamVjdHMsIHN0X2xpbmspIHsKPiArCQkJdW5zaWduZWQgaW50IHJl bSA9Cj4gKwkJCQltaW5fdCh1bnNpZ25lZCBpbnQsIG5kd29yZHMgLSBkdywgbWF4X2R3b3Jkcyhv YmopKTsKPiArCj4gKwkJCWVyciA9IGNwdV9jaGVjayhvYmosIG5jb250ZXh0cysrLCByZW0pOwo+ ICsJCQlpZiAoZXJyKQo+ICsJCQkJYnJlYWs7Cj4gKwo+ICsJCQlkdyArPSByZW07Cj4gKwkJfQo+ ICsKPiArb3V0X3VubG9jazoKPiArCQlpZiAoaWd0X2xpdmVfdGVzdF9lbmQoJnQpKQo+ICsJCQll cnIgPSAtRUlPOwo+ICsJCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g Kwo+ICsJCW1vY2tfZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+ICsJCWlmIChlcnIpCj4gKwkJCXJl dHVybiBlcnI7Cj4gICAJfQo+IC0JcHJfaW5mbygiU3VibWl0dGVkICVsdSBjb250ZXh0cyAoYWNy b3NzICV1IGVuZ2luZXMpLCBmaWxsaW5nICVsdSBkd29yZHNcbiIsCj4gLQkJbmNvbnRleHRzLCBS VU5USU1FX0lORk8oaTkxNSktPm51bV9lbmdpbmVzLCBuZHdvcmRzKTsKPiAgIAo+IC0JZHcgPSAw Owo+IC0JbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZvYmplY3RzLCBzdF9saW5rKSB7Cj4gLQkJ dW5zaWduZWQgaW50IHJlbSA9Cj4gLQkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3 LCBtYXhfZHdvcmRzKG9iaikpOwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aWd0X3NoYXJlZF9jdHhfZXhlYyh2b2lkICphcmcpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnQgZXJyID0gLUVOT0RFVjsKPiArCj4g KwkvKgo+ICsJICogQ3JlYXRlIGEgZmV3IGRpZmZlcmVudCBjb250ZXh0cyB3aXRoIHRoZSBzYW1l IG1tIGFuZCB3cml0ZQo+ICsJICogdGhyb3VnaCBlYWNoIGN0eCB1c2luZyB0aGUgR1BVIG1ha2lu ZyBzdXJlIHRob3NlIHdyaXRlcyBlbmQKPiArCSAqIHVwIGluIHRoZSBleHBlY3RlZCBwYWdlcyBv ZiBvdXIgb2JqLgo+ICsJICovCj4gKwo+ICsJZm9yX2VhY2hfZW5naW5lKGVuZ2luZSwgaTkxNSwg aWQpIHsKPiArCQl1bnNpZ25lZCBsb25nIG5jb250ZXh0cywgbmR3b3JkcywgZHc7Cj4gKwkJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiA9IE5VTEw7Cj4gKwkJc3RydWN0IGk5MTVfZ2Vt X2NvbnRleHQgKmN0eCA9IE5VTEw7Cj4gKwkJc3RydWN0IGk5MTVfZ2VtX2NvbnRleHQgKnBhcmVu dDsKPiArCQlzdHJ1Y3QgaWd0X2xpdmVfdGVzdCB0Owo+ICsJCXN0cnVjdCBkcm1fZmlsZSAqZmls ZTsKPiArCQlJR1RfVElNRU9VVChlbmRfdGltZSk7Cj4gKwkJTElTVF9IRUFEKG9iamVjdHMpOwo+ ICAgCj4gLQkJZXJyID0gY3B1X2NoZWNrKG9iaiwgcmVtKTsKPiArCQlpZiAoIWludGVsX2VuZ2lu ZV9jYW5fc3RvcmVfZHdvcmQoZW5naW5lKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWZpbGUg PSBtb2NrX2ZpbGUoaTkxNSk7Cj4gKwkJaWYgKElTX0VSUihmaWxlKSkKPiArCQkJcmV0dXJuIFBU Ul9FUlIoZmlsZSk7Cj4gKwo+ICsJCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+ICsKPiArCQllcnIgPSBpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBpOTE1LCBfX2Z1bmNfXywg ZW5naW5lLT5uYW1lKTsKPiAgIAkJaWYgKGVycikKPiAtCQkJYnJlYWs7Cj4gKwkJCWdvdG8gb3V0 X3VubG9jazsKPiAgIAo+IC0JCWR3ICs9IHJlbTsKPiAtCX0KPiArCQlwYXJlbnQgPSBpOTE1X2dl bV9jcmVhdGVfY29udGV4dChpOTE1LCBmaWxlLT5kcml2ZXJfcHJpdik7Cj4gKwkJaWYgKElTX0VS UihwYXJlbnQpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIocGFyZW50KTsKPiArCQkJaWYgKGVyciA9 PSAtRU5PREVWKSAvKiBubyBsb2dpY2FsIGN0eCBzdXBwb3J0ICovCgpDaGVjayBpdCBlYXJsaWVy IGxpa2UgaWd0X2N0eF9leGVjPwoKPiArCQkJCWVyciA9IDA7Cj4gKwkJCWdvdG8gb3V0X3VubG9j azsKPiArCQl9Cj4gKwo+ICsJCWlmICghcGFyZW50LT5wcGd0dCkgewo+ICsJCQllcnIgPSAwOwo+ ICsJCQlnb3RvIG91dF91bmxvY2s7Cj4gKwkJfQo+ICsKPiArCQluY29udGV4dHMgPSAwOwo+ICsJ CW5kd29yZHMgPSAwOwo+ICsJCWR3ID0gMDsKPiArCQl3aGlsZSAoIXRpbWVfYWZ0ZXIoamlmZmll cywgZW5kX3RpbWUpKSB7Cj4gKwkJCWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+ICsKPiArCQkJ aWYgKGN0eCkKPiArCQkJCV9fZGVzdHJveV9od19jb250ZXh0KGN0eCwgZmlsZS0+ZHJpdmVyX3By aXYpOwo+ICsKPiArCQkJY3R4ID0gaTkxNV9nZW1fY3JlYXRlX2NvbnRleHQoaTkxNSwgZmlsZS0+ ZHJpdmVyX3ByaXYpOwo+ICsJCQlpZiAoSVNfRVJSKGN0eCkpIHsKPiArCQkJCWVyciA9IFBUUl9F UlIoY3R4KTsKPiArCQkJCWdvdG8gb3V0X3VubG9jazsKPiArCQkJfQo+ICsKPiArCQkJX19hc3Np Z25fcHBndHQoY3R4LCBwYXJlbnQtPnBwZ3R0KTsKPiArCj4gKwkJCWlmICghb2JqKSB7Cj4gKwkJ CQlvYmogPSBjcmVhdGVfdGVzdF9vYmplY3QocGFyZW50LCBmaWxlLCAmb2JqZWN0cyk7Cj4gKwkJ CQlpZiAoSVNfRVJSKG9iaikpIHsKPiArCQkJCQllcnIgPSBQVFJfRVJSKG9iaik7Cj4gKwkJCQkJ Z290byBvdXRfdW5sb2NrOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwo+ICsJCQllcnIgPSAwOwo+ICsJ CQl3aXRoX2ludGVsX3J1bnRpbWVfcG0oaTkxNSwgd2FrZXJlZikKPiArCQkJCWVyciA9IGdwdV9m aWxsKG9iaiwgY3R4LCBlbmdpbmUsIGR3KTsKPiArCQkJaWYgKGVycikgewo+ICsJCQkJcHJfZXJy KCJGYWlsZWQgdG8gZmlsbCBkd29yZCAlbHUgWyVsdS8lbHVdIHdpdGggZ3B1ICglcykgaW4gY3R4 ICV1IFtmdWxsLXBwZ3R0PyAlc10sIGVycj0lZFxuIiwKPiArCQkJCSAgICAgICBuZHdvcmRzLCBk dywgbWF4X2R3b3JkcyhvYmopLAo+ICsJCQkJICAgICAgIGVuZ2luZS0+bmFtZSwgY3R4LT5od19p ZCwKPiArCQkJCSAgICAgICB5ZXNubyghIWN0eC0+cHBndHQpLCBlcnIpOwo+ICsJCQkJZ290byBv dXRfdW5sb2NrOwo+ICsJCQl9Cj4gKwo+ICsJCQlpZiAoKytkdyA9PSBtYXhfZHdvcmRzKG9iaikp IHsKPiArCQkJCW9iaiA9IE5VTEw7Cj4gKwkJCQlkdyA9IDA7Cj4gKwkJCX0KPiArCj4gKwkJCW5k d29yZHMrKzsKPiArCQkJbmNvbnRleHRzKys7Cj4gKwkJfQo+ICsJCXByX2luZm8oIlN1Ym1pdHRl ZCAlbHUgY29udGV4dHMgdG8gJXMsIGZpbGxpbmcgJWx1IGR3b3Jkc1xuIiwKPiArCQkJbmNvbnRl eHRzLCBlbmdpbmUtPm5hbWUsIG5kd29yZHMpOwo+ICsKPiArCQluY29udGV4dHMgPSBkdyA9IDA7 Cj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShvYmosICZvYmplY3RzLCBzdF9saW5rKSB7Cj4gKwkJ CXVuc2lnbmVkIGludCByZW0gPQo+ICsJCQkJbWluX3QodW5zaWduZWQgaW50LCBuZHdvcmRzIC0g ZHcsIG1heF9kd29yZHMob2JqKSk7Cj4gKwo+ICsJCQllcnIgPSBjcHVfY2hlY2sob2JqLCBuY29u dGV4dHMrKywgcmVtKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWJyZWFrOwo+ICsKPiArCQkJZHcg Kz0gcmVtOwo+ICsJCX0KPiAgIAo+ICAgb3V0X3VubG9jazoKPiAtCWlmIChpZ3RfbGl2ZV90ZXN0 X2VuZCgmdCkpCj4gLQkJZXJyID0gLUVJTzsKPiAtCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0 cnVjdF9tdXRleCk7Cj4gKwkJaWYgKGlndF9saXZlX3Rlc3RfZW5kKCZ0KSkKPiArCQkJZXJyID0g LUVJTzsKPiArCQltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICAgCj4g LQltb2NrX2ZpbGVfZnJlZShpOTE1LCBmaWxlKTsKPiAtCXJldHVybiBlcnI7Cj4gKwkJbW9ja19m aWxlX2ZyZWUoaTkxNSwgZmlsZSk7Cj4gKwkJaWYgKGVycikKPiArCQkJcmV0dXJuIGVycjsKPiAr CX0KPiArCj4gKwlyZXR1cm4gMDsKPiAgIH0KCklzIG15IGV5ZWJhbGxpbmcgaWd0X2N0eF9leGVj IGFuZCBpZ3RfY3R4X3NoYXJlZF9leGVjIGNvcnJlY3QgaW4gCm5vdGljaW5nIHRoZSB0ZXN0cyBh cmUgYmFzaWNhbGx5IHRoZSBzYW1lIGFwYXJ0IGZyb20gcHBndHQgc2hhcmluZyBiaXQ/IApDb3Vs ZCB5b3UgY29uc29saWRhdGUgYW5kIHVzZSB0ZXN0IGZsYWdzIHRvIGNvbnRyb2wgd2hldGhlciBv ciBub3QgdG8gc2hhcmU/Cgo+ICAgCj4gICBzdGF0aWMgc3RydWN0IGk5MTVfdm1hICpycGNzX3F1 ZXJ5X2JhdGNoKHN0cnVjdCBpOTE1X3ZtYSAqdm1hKQo+IEBAIC0xMDQ4LDcgKzExNzcsNyBAQCBz dGF0aWMgaW50IGlndF9jdHhfcmVhZG9ubHkodm9pZCAqYXJnKQo+ICAgCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmogPSBOVUxMOwo+ICAgCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpj dHg7Cj4gICAJc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0Owo+IC0JdW5zaWduZWQgbG9uZyBu ZHdvcmRzLCBkdzsKPiArCXVuc2lnbmVkIGxvbmcgaWR4LCBuZHdvcmRzLCBkdzsKPiAgIAlzdHJ1 Y3QgaWd0X2xpdmVfdGVzdCB0Owo+ICAgCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiAgIAlJOTE1 X1JORF9TVEFURShwcm5nKTsKPiBAQCAtMTEyOSw2ICsxMjU4LDcgQEAgc3RhdGljIGludCBpZ3Rf Y3R4X3JlYWRvbmx5KHZvaWQgKmFyZykKPiAgIAkJbmR3b3JkcywgUlVOVElNRV9JTkZPKGk5MTUp LT5udW1fZW5naW5lcyk7Cj4gICAKPiAgIAlkdyA9IDA7Cj4gKwlpZHggPSAwOwo+ICAgCWxpc3Rf Zm9yX2VhY2hfZW50cnkob2JqLCAmb2JqZWN0cywgc3RfbGluaykgewo+ICAgCQl1bnNpZ25lZCBp bnQgcmVtID0KPiAgIAkJCW1pbl90KHVuc2lnbmVkIGludCwgbmR3b3JkcyAtIGR3LCBtYXhfZHdv cmRzKG9iaikpOwo+IEBAIC0xMTM4LDcgKzEyNjgsNyBAQCBzdGF0aWMgaW50IGlndF9jdHhfcmVh ZG9ubHkodm9pZCAqYXJnKQo+ICAgCQlpZiAoaTkxNV9nZW1fb2JqZWN0X2lzX3JlYWRvbmx5KG9i aikpCj4gICAJCQludW1fd3JpdGVzID0gMDsKPiAgIAo+IC0JCWVyciA9IGNwdV9jaGVjayhvYmos IG51bV93cml0ZXMpOwo+ICsJCWVyciA9IGNwdV9jaGVjayhvYmosIGlkeCsrLCBudW1fd3JpdGVz KTsKPiAgIAkJaWYgKGVycikKPiAgIAkJCWJyZWFrOwo+ICAgCj4gQEAgLTE3MjMsNiArMTg1Myw3 IEBAIGludCBpOTE1X2dlbV9jb250ZXh0X2xpdmVfc2VsZnRlc3RzKHN0cnVjdCBkcm1faTkxNV9w cml2YXRlICpkZXZfcHJpdikKPiAgIAkJU1VCVEVTVChpZ3RfY3R4X2V4ZWMpLAo+ICAgCQlTVUJU RVNUKGlndF9jdHhfcmVhZG9ubHkpLAo+ICAgCQlTVUJURVNUKGlndF9jdHhfc3NldSksCj4gKwkJ U1VCVEVTVChpZ3Rfc2hhcmVkX2N0eF9leGVjKSwKPiAgIAkJU1VCVEVTVChpZ3Rfdm1faXNvbGF0 aW9uKSwKPiAgIAl9Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3Nl bGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2dlbV9ndHQuYwo+IGluZGV4IDgyNmZkNTFjMzMxZS4uNTdiM2Q5ODY3MDcwIDEwMDY0NAo+ IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYwo+IEBAIC0x MDIwLDcgKzEwMjAsNiBAQCBzdGF0aWMgaW50IGV4ZXJjaXNlX3BwZ3R0KHN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiwKPiAgIAo+ICAgCWVyciA9IGZ1bmMoZGV2X3ByaXYsICZwcGd0 dC0+dm0sIDAsIHBwZ3R0LT52bS50b3RhbCwgZW5kX3RpbWUpOwo+ICAgCj4gLQlpOTE1X3BwZ3R0 X2Nsb3NlKCZwcGd0dC0+dm0pOwo+ICAgCWk5MTVfcHBndHRfcHV0KHBwZ3R0KTsKPiAgIG91dF91 bmxvY2s6Cj4gICAJbXV0ZXhfdW5sb2NrKCZkZXZfcHJpdi0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQu YyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+IGluZGV4 IDM1M2IzN2I5Zjc4ZS4uNWVkZGY5ZmNmZThhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L3NlbGZ0ZXN0cy9tb2NrX2NvbnRleHQuYwo+IEBAIC01NSwxMyArNTUsMTcgQEAgbW9ja19j b250ZXh0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LAo+ICAgCQlnb3RvIGVycl9oYW5k bGVzOwo+ICAgCj4gICAJaWYgKG5hbWUpIHsKPiArCQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBn dHQ7Cj4gKwo+ICAgCQljdHgtPm5hbWUgPSBrc3RyZHVwKG5hbWUsIEdGUF9LRVJORUwpOwo+ICAg CQlpZiAoIWN0eC0+bmFtZSkKPiAgIAkJCWdvdG8gZXJyX3B1dDsKPiAgIAo+IC0JCWN0eC0+cHBn dHQgPSBtb2NrX3BwZ3R0KGk5MTUsIG5hbWUpOwo+IC0JCWlmICghY3R4LT5wcGd0dCkKPiArCQlw cGd0dCA9IG1vY2tfcHBndHQoaTkxNSwgbmFtZSk7Cj4gKwkJaWYgKCFwcGd0dCkKPiAgIAkJCWdv dG8gZXJyX3B1dDsKPiArCj4gKwkJX19zZXRfcHBndHQoY3R4LCBwcGd0dCk7Cj4gICAJfQo+ICAg Cj4gICAJcmV0dXJuIGN0eDsKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2Ry bS5oIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gaW5kZXggZjRmYTA4MjU3MjJhLi45 ZmNmYjU0YTEzZjIgMTAwNjQ0Cj4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4g KysrIGIvaW5jbHVkZS91YXBpL2RybS9pOTE1X2RybS5oCj4gQEAgLTM0MSw2ICszNDEsOCBAQCB0 eXBlZGVmIHN0cnVjdCBfZHJtX2k5MTVfc2FyZWEgewo+ICAgI2RlZmluZSBEUk1fSTkxNV9QRVJG X0FERF9DT05GSUcJMHgzNwo+ICAgI2RlZmluZSBEUk1fSTkxNV9QRVJGX1JFTU9WRV9DT05GSUcJ MHgzOAo+ICAgI2RlZmluZSBEUk1fSTkxNV9RVUVSWQkJCTB4MzkKPiArI2RlZmluZSBEUk1fSTkx NV9HRU1fVk1fQ1JFQVRFCQkweDNhCj4gKyNkZWZpbmUgRFJNX0k5MTVfR0VNX1ZNX0RFU1RST1kJ CTB4M2IKPiAgIC8qIE11c3QgYmUga2VwdCBjb21wYWN0IC0tIG5vIGhvbGVzICovCj4gICAKPiAg ICNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfSU5JVAkJRFJNX0lPVyggRFJNX0NPTU1BTkRfQkFTRSAr IERSTV9JOTE1X0lOSVQsIGRybV9pOTE1X2luaXRfdCkKPiBAQCAtNDAwLDYgKzQwMiw4IEBAIHR5 cGVkZWYgc3RydWN0IF9kcm1faTkxNV9zYXJlYSB7Cj4gICAjZGVmaW5lIERSTV9JT0NUTF9JOTE1 X1BFUkZfQUREX0NPTkZJRwlEUk1fSU9XKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkxNV9QRVJG X0FERF9DT05GSUcsIHN0cnVjdCBkcm1faTkxNV9wZXJmX29hX2NvbmZpZykKPiAgICNkZWZpbmUg RFJNX0lPQ1RMX0k5MTVfUEVSRl9SRU1PVkVfQ09ORklHCURSTV9JT1coRFJNX0NPTU1BTkRfQkFT RSArIERSTV9JOTE1X1BFUkZfUkVNT1ZFX0NPTkZJRywgX191NjQpCj4gICAjZGVmaW5lIERSTV9J T0NUTF9JOTE1X1FVRVJZCQkJRFJNX0lPV1IoRFJNX0NPTU1BTkRfQkFTRSArIERSTV9JOTE1X1FV RVJZLCBzdHJ1Y3QgZHJtX2k5MTVfcXVlcnkpCj4gKyNkZWZpbmUgRFJNX0lPQ1RMX0k5MTVfR0VN X1ZNX0NSRUFURQlEUk1fSU9XUihEUk1fQ09NTUFORF9CQVNFICsgRFJNX0k5MTVfR0VNX1ZNX0NS RUFURSwgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sKQo+ICsjZGVmaW5lIERSTV9JT0NU TF9JOTE1X0dFTV9WTV9ERVNUUk9ZCURSTV9JT1cgKERSTV9DT01NQU5EX0JBU0UgKyBEUk1fSTkx NV9HRU1fVk1fREVTVFJPWSwgc3RydWN0IGRybV9pOTE1X2dlbV92bV9jb250cm9sKQo+ICAgCj4g ICAvKiBBbGxvdyBkcml2ZXJzIHRvIHN1Ym1pdCBiYXRjaGJ1ZmZlcnMgZGlyZWN0bHkgdG8gaGFy ZHdhcmUsIHJlbHlpbmcKPiAgICAqIG9uIHRoZSBzZWN1cml0eSBtZWNoYW5pc21zIHByb3ZpZGVk IGJ5IGhhcmR3YXJlLgo+IEBAIC0xNDQ5LDYgKzE0NTMsMjYgQEAgc3RydWN0IGRybV9pOTE1X2dl bV9jb250ZXh0X2Rlc3Ryb3kgewo+ICAgCV9fdTMyIHBhZDsKPiAgIH07Cj4gICAKPiArLyoKPiAr ICogRFJNX0k5MTVfR0VNX1ZNX0NSRUFURSAtCj4gKyAqCj4gKyAqIENyZWF0ZSBhIG5ldyB2aXJ0 dWFsIG1lbW9yeSBhZGRyZXNzIHNwYWNlIChwcEdUVCkgZm9yIHVzZSB3aXRoaW4gYSBjb250ZXh0 Cj4gKyAqIG9uIHRoZSBzYW1lIGZpbGUuIEV4dGVuc2lvbnMgY2FuIGJlIHByb3ZpZGVkIHRvIGNv bmZpZ3VyZSBleGFjdGx5IGhvdyB0aGUKPiArICogYWRkcmVzcyBzcGFjZSBpcyBzZXR1cCB1cG9u IGNyZWF0aW9uLgo+ICsgKgo+ICsgKiBUaGUgaWQgb2YgbmV3IFZNIChib3VuZCB0byB0aGUgZmQp IGZvciB1c2Ugd2l0aCBJOTE1X0NPTlRFWFRfUEFSQU1fVk0gaXMKPiArICogcmV0dXJuZWQuCj4g KyAqCj4gKyAqIERSTV9JOTE1X0dFTV9WTV9ERVNUUk9ZIC0KPiArICoKPiArICogRGVzdHJveXMg YSBwcmV2aW91c2x5IGNyZWF0ZWQgVk0gaWQuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X3ZtX2NvbnRyb2wgewo+ICsJX191NjQgZXh0ZW5zaW9uczsKPiArCV9fdTMyIGZsYWdzOwo+ICsJ X191MzIgaWQ7Cj4gK307Cj4gKwo+ICAgc3RydWN0IGRybV9pOTE1X3JlZ19yZWFkIHsKPiAgIAkv Kgo+ICAgCSAqIFJlZ2lzdGVyIG9mZnNldC4KPiBAQCAtMTUzOCw3ICsxNTYyLDE5IEBAIHN0cnVj dCBkcm1faTkxNV9nZW1fY29udGV4dF9wYXJhbSB7Cj4gICAgKiBPbiBjcmVhdGlvbiwgYWxsIG5l dyBjb250ZXh0cyBhcmUgbWFya2VkIGFzIHJlY292ZXJhYmxlLgo+ICAgICovCj4gICAjZGVmaW5l IEk5MTVfQ09OVEVYVF9QQVJBTV9SRUNPVkVSQUJMRQkweDgKPiArCj4gKwkvKgo+ICsJICogVGhl IGlkIG9mIHRoZSBhc3NvY2lhdGVkIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3Mgc3BhY2UgKHBwR1RU KSBvZgo+ICsJICogdGhpcyBjb250ZXh0LiBDYW4gYmUgcmV0cmlldmVkIGFuZCBwYXNzZWQgdG8g YW5vdGhlciBjb250ZXh0Cj4gKwkgKiAob24gdGhlIHNhbWUgZmQpIGZvciBib3RoIHRvIHVzZSB0 aGUgc2FtZSBwcEdUVCBhbmQgc28gc2hhcmUKPiArCSAqIGFkZHJlc3MgbGF5b3V0cywgYW5kIGF2 b2lkIHJlbG9hZGluZyB0aGUgcGFnZSB0YWJsZXMgb24gY29udGV4dAo+ICsJICogc3dpdGNoZXMg YmV0d2VlbiB0aGVtc2VsdmVzLgo+ICsJICoKPiArCSAqIFNlZSBEUk1fSTkxNV9HRU1fVk1fQ1JF QVRFIGFuZCBEUk1fSTkxNV9HRU1fVk1fREVTVFJPWS4KPiArCSAqLwo+ICsjZGVmaW5lIEk5MTVf Q09OVEVYVF9QQVJBTV9WTQkJMHg5Cj4gICAvKiBNdXN0IGJlIGtlcHQgY29tcGFjdCAtLSBubyBo b2xlcyBhbmQgd2VsbCBkb2N1bWVudGVkICovCj4gKwo+ICAgCV9fdTY0IHZhbHVlOwo+ICAgfTsK PiAgIAo+IAoKUmVnYXJkcywKClR2cnRrbwpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5m cmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZng=