From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [RFC v3 09/12] drm: Add API for in-kernel clients Date: Tue, 6 Mar 2018 09:56:04 +0100 Message-ID: <20180306085604.GH22212@phenom.ffwll.local> References: <20180222200653.19453-1-noralf@tronnes.org> <20180222200653.19453-10-noralf@tronnes.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180222200653.19453-10-noralf@tronnes.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Noralf =?iso-8859-1?Q?Tr=F8nnes?= Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, laurent.pinchart@ideasonboard.com List-Id: intel-gfx@lists.freedesktop.org T24gVGh1LCBGZWIgMjIsIDIwMTggYXQgMDk6MDY6NTBQTSArMDEwMCwgTm9yYWxmIFRyw7hubmVz IHdyb3RlOgo+IFRoaXMgYWRkcyBhbiBBUEkgZm9yIHdyaXRpbmcgaW4ta2VybmVsIGNsaWVudHMu Cj4gCj4gVE9ETzoKPiAtIEZsZXNoIG91dCBhbmQgY29tcGxldGUgZG9jdW1lbnRhdGlvbi4KPiAt IENsb25lZCBkaXNwbGF5cyBpcyBub3QgdGVzdGVkLgo+IC0gQ29tcGxldGUgdGlsZWQgZGlzcGxh eSBzdXBwb3J0IGFuZCB0ZXN0IGl0Lgo+IC0gVGVzdCBwbHVnL3VucGx1ZyBkaWZmZXJlbnQgbW9u aXRvcnMuCj4gLSBBIHJ1bnRpbWUga25vYiB0byBwcmV2ZW50IGNsaWVudHMgZnJvbSBhdHRhY2hp bmcgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcy4KPiAtIE1heWJlIGEgd2F5IHRvIHVuYmluZCBpbmRp dmlkdWFsIGNsaWVudCBpbnN0YW5jZXMuCj4gLSBNYXliZSB0YWtlIHRoZSBzeXNycSBzdXBwb3J0 IGluIGRybV9mYl9oZWxwZXIgYW5kIG1vdmUgaXQgaGVyZSBzb21laG93Lgo+IC0gQWRkIHN1c3Bl bmQvcmVzdW1lIGNhbGxiYWNrcy4KPiAgIERvZXMgYW55b25lIGtub3cgd2h5IGZiZGV2IHJlcXVp cmVzIHN1c3BlbmQvcmVzdW1lPwo+IAo+IFNpZ25lZC1vZmYtYnk6IE5vcmFsZiBUcsO4bm5lcyA8 bm9yYWxmQHRyb25uZXMub3JnPgoKVGhlIGNvcmUgY2xpZW50IGFwaSBJIGxpa2UuIFNvbWUgb2Yg dGhlIG9wZW5zIEknbSBzZWVpbmc6CgotIElmIHdlIGdvIHdpdGggdXNpbmcgdGhlIGludGVybmFs IGttcyBhcGkgZGlyZWN0bHkgaW5zdGVhZCBvZiBJT0NUTAogIHdyYXBwZXJzIHRoZW4gYSBodWdl IHBpbGUgb2YgdGhlIGZ1bmN0aW9ucyB5b3UgaGF2ZSBoZXJlIGFyZW4ndCBuZWVkZWQKICAoZS5n LiBhbGwgdGhlIGV2ZW50IHN0dWZmIHdlIGNhbiBqdXN0IGRpcmVjdGx5IHVzZSB2YmxhbmsgZXZl bnRzIGluc3RlYWQKICBvZiBhbGwgdGhlIHdyYXBwaW5nKS4gSSdtIGxlYW5pbmcgZXZlciBtb3Jl IGludG8gdGhhdCBkaXJlY3Rpb24sIHNpbmNlCiAgbXVjaCBsZXNzIGNvZGUgdG8gYWRkLgoKLSBU aGUgcmVnaXN0ZXIvdW5yZWdpc3RlciBtb2RlbCBuZWVkcyBtb3JlIHRob3VnaHQuIEFsbG93aW5n IGJvdGggY2xpZW50cwogIHRvIHJlZ2lzdGVyIHdoZW5ldmVyIHRoZXkgd2FudCB0bywgYW5kIGRy bV9kZXZpY2UgaW5zdGFuY2VzIHRvIGNvbWUgYW5kCiAgZ28gaXMgd2hhdCBmYmNvbiBoYXMgZG9u ZSwgYW5kIHRoZSByZXN1bHRpbmcgbG9ja2luZyBpcyBhIGhvcnJvciBzaG93LgoKICBJIHRoaW5r IGlmIHdlIHJlcXVpcmUgdGhhdCBhbGwgaW4ta2VybmVsIGRybV9jbGllbnRzIGFyZSByZWdpc3Rl cnMgd2hlbgogIGxvYWRpbmcgZHJtLmtvIChhbmQgZW5hYmxlZC9kaXNhYmxlZCBvbmx5IHBlciBt b2R1bGUgb3B0aW9ucyBhbmQKICBLY29uZmlnKSwgdGhlbiB3ZSBjYW4gdGhyb3cgb3V0IGFsbCB0 aGUgbG9ja2luZy4gVGhhdCBhdm9pZHMgYSBsb3Qgb2YKICB0aGUgaGVhZGFjaGVzLgoKICAybmQs IGlmIHRoZSBsaXN0IG9mIGNsaWVudHMgaXMgc3RhdGljIG92ZXIgdGhlIGxpZmV0aW1lIG9mIGRy bS5rbywgd2UKICBhbHNvIGRvbid0IG5lZWQgdG8gaXRlcmF0ZSBleGlzdGluZyBkcml2ZXJzLiBX aGljaCBhdm9pZHMgbWUgaGF2aW5nIHRvCiAgcmV2aWV3IHRoZSBpdGVyYXRvciBwYXRjaCAodGhh dCdzIHRoZSBvdGhlciBhc3BlY3Qgd2hlcmUgZmJjb24gdG90YWxseQogIGZhbGxzIG92ZXIgYW5k IGVzc2VudGlhbGx5IGp1c3QgaWdub3JlcyBhIGJ1bmNoIG9mIHJhY2VzKS4KCj4gLS0tCj4gIGRy aXZlcnMvZ3B1L2RybS9LY29uZmlnICAgICAgICAgICAgIHwgICAgMiArCj4gIGRyaXZlcnMvZ3B1 L2RybS9NYWtlZmlsZSAgICAgICAgICAgIHwgICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vY2xp ZW50L0tjb25maWcgICAgICB8ICAgIDQgKwo+ICBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2Vm aWxlICAgICB8ICAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L2RybV9jbGllbnQuYyB8 IDE2MTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKCkknZCBtb3ZlIHRoaXMg aW50byBtYWluIGRybS8gZGlyZWN0b3J5LCBpdCdzIGZhaXJseSBjb3JlIHN0dWZmLgoKPiAgZHJp dmVycy9ncHUvZHJtL2RybV9kcnYuYyAgICAgICAgICAgfCAgICA2ICsKPiAgZHJpdmVycy9ncHUv ZHJtL2RybV9maWxlLmMgICAgICAgICAgfCAgICAzICsKPiAgZHJpdmVycy9ncHUvZHJtL2RybV9w cm9iZV9oZWxwZXIuYyAgfCAgICAzICsKPiAgaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oICAgICAg ICAgICAgfCAgMTkyICsrKysrCj4gIGluY2x1ZGUvZHJtL2RybV9kZXZpY2UuaCAgICAgICAgICAg IHwgICAgMSArCj4gIGluY2x1ZGUvZHJtL2RybV9maWxlLmggICAgICAgICAgICAgIHwgICAgNyAr Cj4gIDExIGZpbGVzIGNoYW5nZWQsIDE4MzMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnCj4gIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L01ha2VmaWxlCj4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0vY2xpZW50L2RybV9jbGllbnQuYwo+ICBjcmVh dGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnIGIvZHJpdmVycy9ncHUvZHJtL0tjb25maWcKPiBpbmRl eCBkZWVlZmE3YTE3NzMuLmQ0YWUxNWY5ZWU5ZiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vS2NvbmZpZwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gQEAgLTE1NCw2ICsx NTQsOCBAQCBjb25maWcgRFJNX1NDSEVECj4gIAl0cmlzdGF0ZQo+ICAJZGVwZW5kcyBvbiBEUk0K PiAgCj4gK3NvdXJjZSAiZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnIgo+ICsKPiAgc291 cmNlICJkcml2ZXJzL2dwdS9kcm0vaTJjL0tjb25maWciCj4gIAo+ICBzb3VyY2UgImRyaXZlcnMv Z3B1L2RybS9hcm0vS2NvbmZpZyIKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL01ha2Vm aWxlIGIvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gaW5kZXggNTAwOTNmZjQ0NzliLi44ZTA2 ZGM3ZWVjYTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gQEAgLTE4LDcgKzE4LDcgQEAgZHJtLXkgICAgICAg Oj0JZHJtX2F1dGgubyBkcm1fYnVmcy5vIGRybV9jYWNoZS5vIFwKPiAgCQlkcm1fZW5jb2Rlci5v IGRybV9tb2RlX29iamVjdC5vIGRybV9wcm9wZXJ0eS5vIFwKPiAgCQlkcm1fcGxhbmUubyBkcm1f Y29sb3JfbWdtdC5vIGRybV9wcmludC5vIFwKPiAgCQlkcm1fZHVtYl9idWZmZXJzLm8gZHJtX21v ZGVfY29uZmlnLm8gZHJtX3ZibGFuay5vIFwKPiAtCQlkcm1fc3luY29iai5vIGRybV9sZWFzZS5v Cj4gKwkJZHJtX3N5bmNvYmoubyBkcm1fbGVhc2UubyBjbGllbnQvZHJtX2NsaWVudC5vCj4gIAo+ ICBkcm0tJChDT05GSUdfRFJNX0xJQl9SQU5ET00pICs9IGxpYi9kcm1fcmFuZG9tLm8KPiAgZHJt LSQoQ09ORklHX0RSTV9WTSkgKz0gZHJtX3ZtLm8KPiBAQCAtMTAzLDMgKzEwMyw0IEBAIG9iai0k KENPTkZJR19EUk1fTVhTRkIpCSs9IG14c2ZiLwo+ICBvYmotJChDT05GSUdfRFJNX1RJTllEUk0p ICs9IHRpbnlkcm0vCj4gIG9iai0kKENPTkZJR19EUk1fUEwxMTEpICs9IHBsMTExLwo+ICBvYmot JChDT05GSUdfRFJNX1RWRTIwMCkgKz0gdHZlMjAwLwo+ICtvYmoteQkJCSs9IGNsaWVudC8KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9LY29uZmlnIGIvZHJpdmVycy9ncHUv ZHJtL2NsaWVudC9LY29uZmlnCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAw MDAwMDAuLjRiYjhlNDY1NWZmNwo+IC0tLSAvZGV2L251bGwKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vY2xpZW50L0tjb25maWcKPiBAQCAtMCwwICsxLDQgQEAKPiArbWVudSAiRFJNIENsaWVudHMi Cj4gKwlkZXBlbmRzIG9uIERSTQo+ICsKPiArZW5kbWVudQo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vY2xpZW50L01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmls ZQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mNjY1NTRjZDVj NDUKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2NsaWVudC9NYWtlZmls ZQo+IEBAIC0wLDAgKzEgQEAKPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vY2xpZW50L2RybV9jbGllbnQuYyBiL2RyaXZl cnMvZ3B1L2RybS9jbGllbnQvZHJtX2NsaWVudC5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBp bmRleCAwMDAwMDAwMDAwMDAuLmE2MzNiZjc0NzMxNgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vY2xpZW50L2RybV9jbGllbnQuYwo+IEBAIC0wLDAgKzEsMTYxMiBAQAo+ ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsvLyBDb3B5cmlnaHQgMjAx OCBOb3JhbGYgVHLDuG5uZXMKPiArCj4gKyNpbmNsdWRlIDxsaW51eC9kbWEtYnVmLmg+Cj4gKyNp bmNsdWRlIDxsaW51eC9saXN0Lmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsjaW5j bHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Cj4gKwo+ICsj aW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fY29ubmVjdG9y Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9maWxl Lmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsKPiArI2luY2x1ZGUgImRybV9jcnRjX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJkcm1f aW50ZXJuYWwuaCIKPiArCj4gK3N0cnVjdCBkcm1fY2xpZW50X2Z1bmNzX2VudHJ5IHsKPiArCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCWNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpm dW5jczsKPiArfTsKPiArCj4gK3N0YXRpYyBMSVNUX0hFQUQoZHJtX2NsaWVudF9saXN0KTsKCkkg dGhpbmsgdGhlIGNsaWVudCBsaXN0IGl0c2VsZiBzaG91bGQgYmUgb24gdGhlIGRybV9kZXZpY2Us IG5vdCBpbiBvbmUKZ2xvYmFsIGxpc3QgdGhhdCBtaXhlcyB1cCBhbGwgdGhlIGNsaWVudHMgb2Yg YWxsIHRoZSBkcm1fZGV2aWNlcy4KCkknbGwgc2tpcCByZXZpZXdpbmcgZGV0YWlscyBzaW5jZSB3 ZSBoYXZlIGEgYnVuY2ggb2YgaGlnaC1sZXZlbCBxdWVzdGlvbnMKdG8gZmlndXJlIG91dCBmaXJz dC4KLURhbmllbAoKPiArc3RhdGljIExJU1RfSEVBRChkcm1fY2xpZW50X2Z1bmNzX2xpc3QpOwo+ ICtzdGF0aWMgREVGSU5FX01VVEVYKGRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiArCj4gK3N0YXRp YyB2b2lkIGRybV9jbGllbnRfbmV3KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gKwkJCSAgIGNv bnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzICpmdW5jcykKPiArewo+ICsJc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWxvY2tkZXBfYXNzZXJ0X2hl bGQoJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiArCj4gKwljbGllbnQgPSBremFsbG9jKHNpemVv ZigqY2xpZW50KSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAoIWNsaWVudCkKPiArCQlyZXR1cm47Cj4g Kwo+ICsJbXV0ZXhfaW5pdCgmY2xpZW50LT5sb2NrKTsKPiArCWNsaWVudC0+ZGV2ID0gZGV2Owo+ ICsJY2xpZW50LT5mdW5jcyA9IGZ1bmNzOwo+ICsKPiArCXJldCA9IGZ1bmNzLT5uZXcoY2xpZW50 KTsKPiArCURSTV9ERVZfREVCVUdfS01TKGRldi0+ZGV2LCAiJXM6IHJldD0lZFxuIiwgZnVuY3Mt Pm5hbWUsIHJldCk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZHJtX2NsaWVudF9mcmVlKGNsaWVudCk7 Cj4gKwkJcmV0dXJuOwo+ICsJfQo+ICsKPiArCWxpc3RfYWRkKCZjbGllbnQtPmxpc3QsICZkcm1f Y2xpZW50X2xpc3QpOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2NsaWVudF9mcmVlIC0gRnJl ZSBEUk0gY2xpZW50IHJlc291cmNlcwo+ICsgKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4gKyAqCj4g KyAqIFRoaXMgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgb24gY2xpZW50IHJlbW92YWwgdW5sZXNz IHRoZSBjbGllbnQgcmV0dXJucwo+ICsgKiBub24temVybyBpbiB0aGUgJmRybV9jbGllbnRfZnVu Y3MtPnJlbW92ZSBjYWxsYmFjay4gVGhlIGZiZGV2IGNsaWVudCBkb2VzCj4gKyAqIHRoaXMgd2hl biBpdCBjYW4ndCBjbG9zZSAmZHJtX2ZpbGUgYmVjYXVzZSB1c2Vyc3BhY2UgaGFzIGFuIG9wZW4g ZmQuCj4gKyAqLwo+ICt2b2lkIGRybV9jbGllbnRfZnJlZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYg KmNsaWVudCkKPiArewo+ICsJRFJNX0RFVl9ERUJVR19LTVMoY2xpZW50LT5kZXYtPmRldiwgIiVz XG4iLCBjbGllbnQtPmZ1bmNzLT5uYW1lKTsKPiArCWlmIChXQVJOX09OKGNsaWVudC0+ZmlsZSkp IHsKPiArCQljbGllbnQtPmZpbGVfcmVmX2NvdW50ID0gMTsKPiArCQlkcm1fY2xpZW50X3B1dF9m aWxlKGNsaWVudCk7Cj4gKwl9Cj4gKwltdXRleF9kZXN0cm95KCZjbGllbnQtPmxvY2spOwo+ICsJ a2ZyZWUoY2xpZW50LT5jcnRjcyk7Cj4gKwlrZnJlZShjbGllbnQpOwo+ICt9Cj4gK0VYUE9SVF9T WU1CT0woZHJtX2NsaWVudF9mcmVlKTsKPiArCj4gK3N0YXRpYyB2b2lkIGRybV9jbGllbnRfcmVt b3ZlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KQo+ICt7Cj4gKwlsb2NrZGVwX2Fzc2Vy dF9oZWxkKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gKwo+ICsJbGlzdF9kZWwoJmNsaWVudC0+ bGlzdCk7Cj4gKwo+ICsJaWYgKCFjbGllbnQtPmZ1bmNzLT5yZW1vdmUgfHwgIWNsaWVudC0+ZnVu Y3MtPnJlbW92ZShjbGllbnQpKQo+ICsJCWRybV9jbGllbnRfZnJlZShjbGllbnQpOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogZHJtX2NsaWVudF9yZWdpc3RlciAtIFJlZ2lzdGVyIGEgRFJNIGNsaWVu dAo+ICsgKiBAZnVuY3M6IENsaWVudCBjYWxsYmFja3MKPiArICoKPiArICogUmV0dXJuczoKPiAr ICogWmVybyBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAq Lwo+ICtpbnQgZHJtX2NsaWVudF9yZWdpc3Rlcihjb25zdCBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5j cyAqZnVuY3MpCj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpZW50X2Z1bmNzX2VudHJ5ICpmdW5jc19l bnRyeTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlX2xpc3RfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRy bV9kZXZpY2UgKmRldjsKPiArCj4gKwlmdW5jc19lbnRyeSA9IGt6YWxsb2Moc2l6ZW9mKCpmdW5j c19lbnRyeSksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFmdW5jc19lbnRyeSkKPiArCQlyZXR1cm4g LUVOT01FTTsKPiArCj4gKwlmdW5jc19lbnRyeS0+ZnVuY3MgPSBmdW5jczsKPiArCj4gKwltdXRl eF9sb2NrKCZkcm1fZ2xvYmFsX211dGV4KTsKPiArCW11dGV4X2xvY2soJmRybV9jbGllbnRfbGlz dF9sb2NrKTsKPiArCj4gKwlkcm1fZGV2aWNlX2xpc3RfaXRlcl9iZWdpbigmaXRlcik7Cj4gKwlk cm1fZm9yX2VhY2hfZGV2aWNlX2l0ZXIoZGV2LCAmaXRlcikKPiArCQlpZiAoZHJtX2NvcmVfY2hl Y2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiArCQkJZHJtX2NsaWVudF9uZXcoZGV2 LCBmdW5jcyk7Cj4gKwlkcm1fZGV2aWNlX2xpc3RfaXRlcl9lbmQoJml0ZXIpOwo+ICsKPiArCWxp c3RfYWRkKCZmdW5jc19lbnRyeS0+bGlzdCwgJmRybV9jbGllbnRfZnVuY3NfbGlzdCk7Cj4gKwo+ ICsJbXV0ZXhfdW5sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gKwltdXRleF91bmxvY2so JmRybV9nbG9iYWxfbXV0ZXgpOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzXG4iLCBmdW5jcy0+ bmFtZSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50 X3JlZ2lzdGVyKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fY2xpZW50X3VucmVnaXN0ZXIgLSBVbnJl Z2lzdGVyIGEgRFJNIGNsaWVudAo+ICsgKiBAZnVuY3M6IENsaWVudCBjYWxsYmFja3MKPiArICov Cj4gK3ZvaWQgZHJtX2NsaWVudF91bnJlZ2lzdGVyKGNvbnN0IHN0cnVjdCBkcm1fY2xpZW50X2Z1 bmNzICpmdW5jcykKPiArewo+ICsJc3RydWN0IGRybV9jbGllbnRfZnVuY3NfZW50cnkgKmZ1bmNz X2VudHJ5Owo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsICp0bXA7Cj4gKwo+ICsJ bXV0ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICsKPiArCWxpc3RfZm9yX2VhY2hf ZW50cnlfc2FmZShjbGllbnQsIHRtcCwgJmRybV9jbGllbnRfbGlzdCwgbGlzdCkgewo+ICsJCWlm IChjbGllbnQtPmZ1bmNzID09IGZ1bmNzKQo+ICsJCQlkcm1fY2xpZW50X3JlbW92ZShjbGllbnQp Owo+ICsJfQo+ICsKPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoZnVuY3NfZW50cnksICZkcm1fY2xp ZW50X2Z1bmNzX2xpc3QsIGxpc3QpIHsKPiArCQlpZiAoZnVuY3NfZW50cnktPmZ1bmNzID09IGZ1 bmNzKSB7Cj4gKwkJCWxpc3RfZGVsKCZmdW5jc19lbnRyeS0+bGlzdCk7Cj4gKwkJCWtmcmVlKGZ1 bmNzX2VudHJ5KTsKPiArCQkJYnJlYWs7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCW11dGV4X3VubG9j aygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICsKPiArCURSTV9ERUJVR19LTVMoIiVzXG4iLCBm dW5jcy0+bmFtZSk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X3VucmVnaXN0ZXIp Owo+ICsKPiArdm9pZCBkcm1fY2xpZW50X2Rldl9yZWdpc3RlcihzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jc19lbnRyeSAqZnVuY3NfZW50cnk7 Cj4gKwo+ICsJLyoKPiArCSAqIE1pbm9ycyBhcmUgY3JlYXRlZCBhdCB0aGUgYmVnaW5uaW5nIG9m IGRybV9kZXZfcmVnaXN0ZXIoKSwgYnV0IGNhbgo+ICsJICogYmUgcmVtb3ZlZCBhZ2FpbiBpZiB0 aGUgZnVuY3Rpb24gZmFpbHMuIFNpbmNlIHdlIGl0ZXJhdGUgRFJNIGRldmljZXMKPiArCSAqIGJ5 IHdhbGtpbmcgRFJNIG1pbm9ycywgd2UgbmVlZCB0byBzdGF5IHVuZGVyIHRoaXMgbG9jay4KPiAr CSAqLwo+ICsJbG9ja2RlcF9hc3NlcnRfaGVsZCgmZHJtX2dsb2JhbF9tdXRleCk7Cj4gKwo+ICsJ aWYgKCFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ICsJCXJl dHVybjsKPiArCj4gKwltdXRleF9sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gKwlsaXN0 X2Zvcl9lYWNoX2VudHJ5KGZ1bmNzX2VudHJ5LCAmZHJtX2NsaWVudF9mdW5jc19saXN0LCBsaXN0 KQo+ICsJCWRybV9jbGllbnRfbmV3KGRldiwgZnVuY3NfZW50cnktPmZ1bmNzKTsKPiArCW11dGV4 X3VubG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICt9Cj4gKwo+ICt2b2lkIGRybV9jbGll bnRfZGV2X3VucmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0 IGRybV9jbGllbnRfZGV2ICpjbGllbnQsICp0bXA7Cj4gKwo+ICsJaWYgKCFkcm1fY29yZV9jaGVj a19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQo+ICsJCXJldHVybjsKPiArCj4gKwltdXRl eF9sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4gKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3Nh ZmUoY2xpZW50LCB0bXAsICZkcm1fY2xpZW50X2xpc3QsIGxpc3QpCj4gKwkJaWYgKGNsaWVudC0+ ZGV2ID09IGRldikKPiArCQkJZHJtX2NsaWVudF9yZW1vdmUoY2xpZW50KTsKPiArCW11dGV4X3Vu bG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICt9Cj4gKwo+ICt2b2lkIGRybV9jbGllbnRf ZGV2X2hvdHBsdWcoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghZHJtX2NvcmVfY2hl Y2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0 ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeShj bGllbnQsICZkcm1fY2xpZW50X2xpc3QsIGxpc3QpCj4gKwkJaWYgKGNsaWVudC0+ZGV2ID09IGRl diAmJiBjbGllbnQtPmZ1bmNzLT5ob3RwbHVnKSB7Cj4gKwkJCXJldCA9IGNsaWVudC0+ZnVuY3Mt PmhvdHBsdWcoY2xpZW50KTsKPiArCQkJRFJNX0RFVl9ERUJVR19LTVMoZGV2LT5kZXYsICIlczog cmV0PSVkXG4iLAo+ICsJCQkJCSAgY2xpZW50LT5mdW5jcy0+bmFtZSwgcmV0KTsKPiArCQl9Cj4g KwltdXRleF91bmxvY2soJmRybV9jbGllbnRfbGlzdF9sb2NrKTsKPiArfQo+ICsKPiArdm9pZCBk cm1fY2xpZW50X2Rldl9sYXN0Y2xvc2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKPiArewo+ICsJ c3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQ7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICgh ZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkZXYsIERSSVZFUl9NT0RFU0VUKSkKPiArCQlyZXR1cm47 Cj4gKwo+ICsJbXV0ZXhfbG9jaygmZHJtX2NsaWVudF9saXN0X2xvY2spOwo+ICsJbGlzdF9mb3Jf ZWFjaF9lbnRyeShjbGllbnQsICZkcm1fY2xpZW50X2xpc3QsIGxpc3QpCj4gKwkJaWYgKGNsaWVu dC0+ZGV2ID09IGRldiAmJiBjbGllbnQtPmZ1bmNzLT5sYXN0Y2xvc2UpIHsKPiArCQkJcmV0ID0g Y2xpZW50LT5mdW5jcy0+bGFzdGNsb3NlKGNsaWVudCk7Cj4gKwkJCURSTV9ERVZfREVCVUdfS01T KGRldi0+ZGV2LCAiJXM6IHJldD0lZFxuIiwKPiArCQkJCQkgIGNsaWVudC0+ZnVuY3MtPm5hbWUs IHJldCk7Cj4gKwkJfQo+ICsJbXV0ZXhfdW5sb2NrKCZkcm1fY2xpZW50X2xpc3RfbG9jayk7Cj4g K30KPiArCj4gKy8qIEdldCBzdGF0aWMgaW5mbyAqLwo+ICtzdGF0aWMgaW50IGRybV9jbGllbnRf aW5pdChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgc3RydWN0IGRybV9maWxlICpmaWxl KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMgY2FyZF9yZXMgPSB7fTsKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiArCXUzMiAqY3J0Y3M7Cj4gKwlp bnQgcmV0Owo+ICsKPiArCXJldCA9IGRybV9tb2RlX2dldHJlc291cmNlcyhkZXYsICZjYXJkX3Jl cywgZmlsZSwgZmFsc2UpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gcmV0Owo+ICsJaWYgKCFj YXJkX3Jlcy5jb3VudF9jcnRjcykKPiArCQlyZXR1cm4gLUVOT0VOVDsKPiArCj4gKwljcnRjcyA9 IGttYWxsb2NfYXJyYXkoY2FyZF9yZXMuY291bnRfY3J0Y3MsIHNpemVvZigqY3J0Y3MpLCBHRlBf S0VSTkVMKTsKPiArCWlmICghY3J0Y3MpCj4gKwkJcmV0dXJuIC1FTk9NRU07Cj4gKwo+ICsJY2Fy ZF9yZXMuY291bnRfZmJzID0gMDsKPiArCWNhcmRfcmVzLmNvdW50X2Nvbm5lY3RvcnMgPSAwOwo+ ICsJY2FyZF9yZXMuY291bnRfZW5jb2RlcnMgPSAwOwo+ICsJY2FyZF9yZXMuY3J0Y19pZF9wdHIg PSAodW5zaWduZWQgbG9uZyljcnRjczsKPiArCj4gKwlyZXQgPSBkcm1fbW9kZV9nZXRyZXNvdXJj ZXMoZGV2LCAmY2FyZF9yZXMsIGZpbGUsIGZhbHNlKTsKPiArCWlmIChyZXQpIHsKPiArCQlrZnJl ZShjcnRjcyk7Cj4gKwkJcmV0dXJuIHJldDsKPiArCX0KPiArCj4gKwljbGllbnQtPmNydGNzID0g Y3J0Y3M7Cj4gKwljbGllbnQtPm51bV9jcnRjcyA9IGNhcmRfcmVzLmNvdW50X2NydGNzOwo+ICsJ Y2xpZW50LT5taW5fd2lkdGggPSBjYXJkX3Jlcy5taW5fd2lkdGg7Cj4gKwljbGllbnQtPm1heF93 aWR0aCA9IGNhcmRfcmVzLm1heF93aWR0aDsKPiArCWNsaWVudC0+bWluX2hlaWdodCA9IGNhcmRf cmVzLm1pbl9oZWlnaHQ7Cj4gKwljbGllbnQtPm1heF9oZWlnaHQgPSBjYXJkX3Jlcy5tYXhfaGVp Z2h0Owo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsvKioKPiArICogZHJtX2NsaWVudF9n ZXRfZmlsZSAtIEdldCBhIERSTSBmaWxlCj4gKyAqIEBjbGllbnQ6IERSTSBjbGllbnQKPiArICoK PiArICogVGhpcyBmdW5jdGlvbiBtYWtlcyBzdXJlIHRoZSBjbGllbnQgaGFzIGEgJmRybV9maWxl IGF2YWlsYWJsZS4gVGhlIGNsaWVudAo+ICsgKiBkb2Vzbid0IG5vcm1hbGx5IG5lZWQgdG8gY2Fs bCB0aGlzLCBzaW5jZSBhbGwgY2xpZW50IGZ1bmN0aW9ucyB0aGF0IGRlcGVuZHMKPiArICogb24g YSBEUk0gZmlsZSB3aWxsIGNhbGwgaXQuIEEgbWF0Y2hpbmcgY2FsbCB0byBkcm1fY2xpZW50X3B1 dF9maWxlKCkgaXMKPiArICogbmVjZXNzYXJ5Lgo+ICsgKgo+ICsgKiBUaGUgcmVhc29uIGZvciBu b3Qgb3BlbmluZyBhIERSTSBmaWxlIHdoZW4gYSBAY2xpZW50IGlzIGNyZWF0ZWQgaXMgYmVjYXVz ZQo+ICsgKiB3ZSBoYXZlIHRvIHRha2UgYSByZWYgb24gdGhlIGRyaXZlciBtb2R1bGUgZHVlIHRv ICZkcm1fZHJpdmVyLT5wb3N0Y2xvc2UKPiArICogYmVpbmcgY2FsbGVkIGluIGRybV9maWxlX2Zy ZWUoKS4gSGF2aW5nIGEgRFJNIGZpbGUgb3BlbiBmb3IgdGhlIGxpZmV0aW1lIG9mCj4gKyAqIHRo ZSBjbGllbnQgaW5zdGFuY2Ugd291bGQgYmxvY2sgZHJpdmVyIG1vZHVsZSB1bmxvYWQuCj4gKyAq Cj4gKyAqIFJldHVybnM6Cj4gKyAqIFplcm8gb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29k ZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9jbGllbnRfZ2V0X2ZpbGUoc3RydWN0IGRy bV9jbGllbnRfZGV2ICpjbGllbnQpCj4gK3sKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBj bGllbnQtPmRldjsKPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiArCWludCByZXQgPSAwOwo+ ICsKPiArCW11dGV4X2xvY2soJmNsaWVudC0+bG9jayk7Cj4gKwo+ICsJaWYgKGNsaWVudC0+Zmls ZV9yZWZfY291bnQrKykgewo+ICsJCW11dGV4X3VubG9jaygmY2xpZW50LT5sb2NrKTsKPiArCQly ZXR1cm4gMDsKPiArCX0KPiArCj4gKwlpZiAoIXRyeV9tb2R1bGVfZ2V0KGRldi0+ZHJpdmVyLT5m b3BzLT5vd25lcikpIHsKPiArCQlyZXQgPSAtRU5PREVWOwo+ICsJCWdvdG8gZXJyX3VubG9jazsK PiArCX0KPiArCj4gKwlkcm1fZGV2X2dldChkZXYpOwo+ICsKPiArCWZpbGUgPSBkcm1fZmlsZV9h bGxvYyhkZXYtPnByaW1hcnkpOwo+ICsJaWYgKElTX0VSUihmaWxlKSkgewo+ICsJCXJldCA9IFBU Ul9FUlIoZmlsZSk7Cj4gKwkJZ290byBlcnJfcHV0Owo+ICsJfQo+ICsKPiArCWlmICghY2xpZW50 LT5jcnRjcykgewo+ICsJCXJldCA9IGRybV9jbGllbnRfaW5pdChjbGllbnQsIGZpbGUpOwo+ICsJ CWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJbXV0ZXhfbG9jaygm ZGV2LT5maWxlbGlzdF9tdXRleCk7Cj4gKwlsaXN0X2FkZCgmZmlsZS0+bGhlYWQsICZkZXYtPmZp bGVsaXN0X2ludGVybmFsKTsKPiArCW11dGV4X3VubG9jaygmZGV2LT5maWxlbGlzdF9tdXRleCk7 Cj4gKwo+ICsJY2xpZW50LT5maWxlID0gZmlsZTsKPiArCj4gKwltdXRleF91bmxvY2soJmNsaWVu dC0+bG9jayk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfZnJlZToKPiArCWRybV9maWxl X2ZyZWUoZmlsZSk7Cj4gK2Vycl9wdXQ6Cj4gKwlkcm1fZGV2X3B1dChkZXYpOwo+ICsJbW9kdWxl X3B1dChkZXYtPmRyaXZlci0+Zm9wcy0+b3duZXIpOwo+ICtlcnJfdW5sb2NrOgo+ICsJY2xpZW50 LT5maWxlX3JlZl9jb3VudCA9IDA7Cj4gKwltdXRleF91bmxvY2soJmNsaWVudC0+bG9jayk7Cj4g Kwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfZ2V0X2Zp bGUpOwo+ICsKPiArdm9pZCBkcm1fY2xpZW50X3B1dF9maWxlKHN0cnVjdCBkcm1fY2xpZW50X2Rl diAqY2xpZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7 Cj4gKwo+ICsJaWYgKCFjbGllbnQpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW11dGV4X2xvY2soJmNs aWVudC0+bG9jayk7Cj4gKwo+ICsJaWYgKFdBUk5fT04oIWNsaWVudC0+ZmlsZV9yZWZfY291bnQp KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwlpZiAoLS1jbGllbnQtPmZpbGVfcmVmX2Nv dW50KQo+ICsJCWdvdG8gb3V0X3VubG9jazsKPiArCj4gKwltdXRleF9sb2NrKCZkZXYtPmZpbGVs aXN0X211dGV4KTsKPiArCWxpc3RfZGVsKCZjbGllbnQtPmZpbGUtPmxoZWFkKTsKPiArCW11dGV4 X3VubG9jaygmZGV2LT5maWxlbGlzdF9tdXRleCk7Cj4gKwo+ICsJZHJtX2ZpbGVfZnJlZShjbGll bnQtPmZpbGUpOwo+ICsJY2xpZW50LT5maWxlID0gTlVMTDsKPiArCWRybV9kZXZfcHV0KGRldik7 Cj4gKwltb2R1bGVfcHV0KGRldi0+ZHJpdmVyLT5mb3BzLT5vd25lcik7Cj4gK291dF91bmxvY2s6 Cj4gKwltdXRleF91bmxvY2soJmNsaWVudC0+bG9jayk7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChk cm1fY2xpZW50X3B1dF9maWxlKTsKPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3BlbmRpbmdfZXZl bnQgKgo+ICtkcm1fY2xpZW50X3JlYWRfZ2V0X3BlbmRpbmdfZXZlbnQoc3RydWN0IGRybV9kZXZp Y2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX3BlbmRp bmdfZXZlbnQgKmUgPSBOVUxMOwo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBtdXRleF9sb2Nr X2ludGVycnVwdGlibGUoJmZpbGUtPmV2ZW50X3JlYWRfbG9jayk7Cj4gKwlpZiAocmV0KQo+ICsJ CXJldHVybiBFUlJfUFRSKHJldCk7Cj4gKwo+ICsJc3Bpbl9sb2NrX2lycSgmZGV2LT5ldmVudF9s b2NrKTsKPiArCWlmICghbGlzdF9lbXB0eSgmZmlsZS0+ZXZlbnRfbGlzdCkpIHsKPiArCQllID0g bGlzdF9maXJzdF9lbnRyeSgmZmlsZS0+ZXZlbnRfbGlzdCwKPiArCQkJCSAgICAgc3RydWN0IGRy bV9wZW5kaW5nX2V2ZW50LCBsaW5rKTsKPiArCQlmaWxlLT5ldmVudF9zcGFjZSArPSBlLT5ldmVu dC0+bGVuZ3RoOwo+ICsJCWxpc3RfZGVsKCZlLT5saW5rKTsKPiArCX0KPiArCXNwaW5fdW5sb2Nr X2lycSgmZGV2LT5ldmVudF9sb2NrKTsKPiArCj4gKwltdXRleF91bmxvY2soJmZpbGUtPmV2ZW50 X3JlYWRfbG9jayk7Cj4gKwo+ICsJcmV0dXJuIGU7Cj4gK30KPiArCj4gK3N0cnVjdCBkcm1fZXZl bnQgKgo+ICtkcm1fY2xpZW50X3JlYWRfZXZlbnQoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGll bnQsIGJvb2wgYmxvY2spCj4gK3sKPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSA9IGNsaWVudC0+ ZmlsZTsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiArCXN0cnVj dCBkcm1fcGVuZGluZ19ldmVudCAqZTsKPiArCXN0cnVjdCBkcm1fZXZlbnQgKmV2ZW50Owo+ICsJ aW50IHJldDsKPiArCj4gKwkvKiBBbGxvY2F0ZSBzbyBpdCBmaXRzIGFsbCBldmVudHMsIHRoZXJl J3MgYSBzYW5pdHkgY2hlY2sgbGF0ZXIgKi8KPiArCWV2ZW50ID0ga3phbGxvYygxMjgsIEdGUF9L RVJORUwpOwo+ICsJaWYgKCFldmVudCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiAr Cj4gKwllID0gZHJtX2NsaWVudF9yZWFkX2dldF9wZW5kaW5nX2V2ZW50KGRldiwgZmlsZSk7Cj4g KwlpZiAoSVNfRVJSKGUpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUihlKTsKPiArCQlnb3RvIGVycl9m cmVlOwo+ICsJfQo+ICsKPiArCWlmICghZSAmJiAhYmxvY2spIHsKPiArCQlyZXQgPSAwOwo+ICsJ CWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0ID0gd2FpdF9ldmVudF9pbnRlcnJ1cHRp YmxlX3RpbWVvdXQoZmlsZS0+ZXZlbnRfd2FpdCwKPiArCQkJCQkgICAgICAgIWxpc3RfZW1wdHko JmZpbGUtPmV2ZW50X2xpc3QpLAo+ICsJCQkJCSAgICAgICA1ICogSFopOwo+ICsJaWYgKCFyZXQp Cj4gKwkJcmV0ID0gLUVUSU1FRE9VVDsKPiArCWlmIChyZXQgPCAwKQo+ICsJCWdvdG8gZXJyX2Zy ZWU7Cj4gKwo+ICsJZSA9IGRybV9jbGllbnRfcmVhZF9nZXRfcGVuZGluZ19ldmVudChkZXYsIGZp bGUpOwo+ICsJaWYgKElTX0VSUl9PUl9OVUxMKGUpKSB7Cj4gKwkJcmV0ID0gUFRSX0VSUl9PUl9a RVJPKGUpOwo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJaWYgKFdBUk5fT04oZS0+ ZXZlbnQtPmxlbmd0aCA+IDEyOCkpIHsKPiArCQkvKiBJbmNyZWFzZSBidWZmZXIgaWYgdGhpcyBo YXBwZW5zICovCj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsJfQo+ ICsKPiArCW1lbWNweShldmVudCwgZS0+ZXZlbnQsIGUtPmV2ZW50LT5sZW5ndGgpOwo+ICsJa2Zy ZWUoZSk7Cj4gKwo+ICsJcmV0dXJuIGV2ZW50Owo+ICsKPiArZXJyX2ZyZWU6Cj4gKwlrZnJlZShl dmVudCk7Cj4gKwo+ICsJcmV0dXJuIHJldCA/IEVSUl9QVFIocmV0KSA6IE5VTEw7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X3JlYWRfZXZlbnQpOwo+ICsKPiArc3RhdGljIHZvaWQg ZHJtX2NsaWVudF9jb25uZWN0b3JfZnJlZShzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKmNv bm5lY3RvcikKPiArewo+ICsJaWYgKCFjb25uZWN0b3IpCj4gKwkJcmV0dXJuOwo+ICsJa2ZyZWUo Y29ubmVjdG9yLT5tb2Rlcyk7Cj4gKwlrZnJlZShjb25uZWN0b3IpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoKPiArZHJtX2NsaWVudF9nZXRfY29ubmVj dG9yKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCB1bnNpZ25lZCBpbnQgaWQpCj4gK3sK PiArCXN0cnVjdCBkcm1fbW9kZV9nZXRfY29ubmVjdG9yIHJlcSA9IHsKPiArCQkuY29ubmVjdG9y X2lkID0gaWQsCj4gKwl9Owo+ICsJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGVzID0gTlVMTDsKPiArCXN0cnVj dCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiArCXN0cnVjdCBkcm1fY29ubmVjdG9y ICpjb25uOwo+ICsJYm9vbCBub25fZGVza3RvcDsKPiArCWludCByZXQ7Cj4gKwo+ICsJY29ubmVj dG9yID0ga3phbGxvYyhzaXplb2YoKmNvbm5lY3RvciksIEdGUF9LRVJORUwpOwo+ICsJaWYgKCFj b25uZWN0b3IpCj4gKwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gKwo+ICsJcmV0ID0gZHJt X21vZGVfZ2V0Y29ubmVjdG9yKGRldiwgJnJlcSwgY2xpZW50LT5maWxlLCBmYWxzZSk7Cj4gKwlp ZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJY29ubmVjdG9yLT5jb25uX2lkID0g aWQ7Cj4gKwljb25uZWN0b3ItPnN0YXR1cyA9IHJlcS5jb25uZWN0aW9uOwo+ICsKPiArCWNvbm4g PSBkcm1fY29ubmVjdG9yX2xvb2t1cChkZXYsIGNsaWVudC0+ZmlsZSwgaWQpOwo+ICsJaWYgKCFj b25uKSB7Cj4gKwkJcmV0ID0gLUVOT0VOVDsKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsJfQo+ICsK PiArCW5vbl9kZXNrdG9wID0gY29ubi0+ZGlzcGxheV9pbmZvLm5vbl9kZXNrdG9wOwo+ICsKPiAr CWNvbm5lY3Rvci0+aGFzX3RpbGUgPSBjb25uLT5oYXNfdGlsZTsKPiArCWNvbm5lY3Rvci0+dGls ZV9oX2xvYyA9IGNvbm4tPnRpbGVfaF9sb2M7Cj4gKwljb25uZWN0b3ItPnRpbGVfdl9sb2MgPSBj b25uLT50aWxlX3ZfbG9jOwo+ICsJaWYgKGNvbm4tPnRpbGVfZ3JvdXApCj4gKwkJY29ubmVjdG9y LT50aWxlX2dyb3VwID0gY29ubi0+dGlsZV9ncm91cC0+aWQ7Cj4gKwo+ICsJZHJtX2Nvbm5lY3Rv cl9wdXQoY29ubik7Cj4gKwo+ICsJaWYgKG5vbl9kZXNrdG9wKSB7Cj4gKwkJa2ZyZWUoY29ubmVj dG9yKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiArCj4gKwlpZiAoIXJlcS5jb3VudF9tb2Rl cykKPiArCQlyZXR1cm4gY29ubmVjdG9yOwo+ICsKPiArCW1vZGVzID0ga2NhbGxvYyhyZXEuY291 bnRfbW9kZXMsIHNpemVvZigqbW9kZXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghbW9kZXMpIHsK PiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJY29u bmVjdG9yLT5tb2RlcyA9IG1vZGVzOwo+ICsJY29ubmVjdG9yLT5udW1fbW9kZXMgPSByZXEuY291 bnRfbW9kZXM7Cj4gKwo+ICsJcmVxLmNvdW50X3Byb3BzID0gMDsKPiArCXJlcS5jb3VudF9lbmNv ZGVycyA9IDA7Cj4gKwlyZXEubW9kZXNfcHRyID0gKHVuc2lnbmVkIGxvbmcpbW9kZXM7Cj4gKwo+ ICsJcmV0ID0gZHJtX21vZGVfZ2V0Y29ubmVjdG9yKGRldiwgJnJlcSwgY2xpZW50LT5maWxlLCBm YWxzZSk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwo+ICsJcmV0dXJuIGNv bm5lY3RvcjsKPiArCj4gK2Vycl9mcmVlOgo+ICsJa2ZyZWUobW9kZXMpOwo+ICsJa2ZyZWUoY29u bmVjdG9yKTsKPiArCj4gKwlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGRybV9jbGllbnRfZ2V0X2Nvbm5lY3RvcnMoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGll bnQsCj4gKwkJCQkgICAgIHN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqKipjb25uZWN0b3Jz KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfY2FyZF9yZXMgY2FyZF9yZXMgPSB7fTsKPiArCXN0 cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBjbGllbnQtPmRldjsKPiArCWludCByZXQsIG51bV9jb25u ZWN0b3JzOwo+ICsJdTMyICpjb25uZWN0b3JfaWRzOwo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ ICsJcmV0ID0gZHJtX21vZGVfZ2V0cmVzb3VyY2VzKGRldiwgJmNhcmRfcmVzLCBjbGllbnQtPmZp bGUsIGZhbHNlKTsKPiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCWlmICghY2FyZF9y ZXMuY291bnRfY29ubmVjdG9ycykKPiArCQlyZXR1cm4gMDsKPiArCj4gKwludW1fY29ubmVjdG9y cyA9IGNhcmRfcmVzLmNvdW50X2Nvbm5lY3RvcnM7Cj4gKwljb25uZWN0b3JfaWRzID0ga2NhbGxv YyhudW1fY29ubmVjdG9ycywKPiArCQkJCXNpemVvZigqY29ubmVjdG9yX2lkcyksIEdGUF9LRVJO RUwpOwo+ICsJaWYgKCFjb25uZWN0b3JfaWRzKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsKPiAr CWNhcmRfcmVzLmNvdW50X2ZicyA9IDA7Cj4gKwljYXJkX3Jlcy5jb3VudF9jcnRjcyA9IDA7Cj4g KwljYXJkX3Jlcy5jb3VudF9lbmNvZGVycyA9IDA7Cj4gKwljYXJkX3Jlcy5jb25uZWN0b3JfaWRf cHRyID0gKHVuc2lnbmVkIGxvbmcpY29ubmVjdG9yX2lkczsKPiArCj4gKwlyZXQgPSBkcm1fbW9k ZV9nZXRyZXNvdXJjZXMoZGV2LCAmY2FyZF9yZXMsIGNsaWVudC0+ZmlsZSwgZmFsc2UpOwo+ICsJ aWYgKHJldCkKPiArCQlnb3RvIGVycl9mcmVlOwo+ICsKPiArCSpjb25uZWN0b3JzID0ga2NhbGxv YyhudW1fY29ubmVjdG9ycywgc2l6ZW9mKCoqY29ubmVjdG9ycyksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCEoKmNvbm5lY3RvcnMpKSB7Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9m cmVlOwo+ICsJfQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7 Cj4gKwkJc3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gKwo+ICsJCWNv bm5lY3RvciA9IGRybV9jbGllbnRfZ2V0X2Nvbm5lY3RvcihjbGllbnQsIGNvbm5lY3Rvcl9pZHNb aV0pOwo+ICsJCWlmIChJU19FUlIoY29ubmVjdG9yKSkgewo+ICsJCQlyZXQgPSBQVFJfRVJSKGNv bm5lY3Rvcik7Cj4gKwkJCWdvdG8gZXJyX2ZyZWU7Cj4gKwkJfQo+ICsJCWlmIChjb25uZWN0b3Ip Cj4gKwkJCSgqY29ubmVjdG9ycylbaV0gPSBjb25uZWN0b3I7Cj4gKwkJZWxzZQo+ICsJCQludW1f Y29ubmVjdG9ycy0tOwo+ICsJfQo+ICsKPiArCWlmICghbnVtX2Nvbm5lY3RvcnMpIHsKPiArCQly ZXQgPSAwOwo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIG51bV9jb25u ZWN0b3JzOwo+ICsKPiArZXJyX2ZyZWU6Cj4gKwlpZiAoY29ubmVjdG9ycykKPiArCQlmb3IgKGkg PSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykKPiArCQkJZHJtX2NsaWVudF9jb25uZWN0b3Jf ZnJlZSgoKmNvbm5lY3RvcnMpW2ldKTsKPiArCj4gKwlrZnJlZShjb25uZWN0b3JzKTsKPiArCWtm cmVlKGNvbm5lY3Rvcl9pZHMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRp YyBib29sCj4gK2RybV9jbGllbnRfY29ubmVjdG9yX2lzX2VuYWJsZWQoc3RydWN0IGRybV9jbGll bnRfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gKwkJCQlib29sIHN0cmljdCkKPiArewo+ICsJaWYg KHN0cmljdCkKPiArCQlyZXR1cm4gY29ubmVjdG9yLT5zdGF0dXMgPT0gY29ubmVjdG9yX3N0YXR1 c19jb25uZWN0ZWQ7Cj4gKwllbHNlCj4gKwkJcmV0dXJuIGNvbm5lY3Rvci0+c3RhdHVzICE9IGNv bm5lY3Rvcl9zdGF0dXNfZGlzY29ubmVjdGVkOwo+ICt9Cj4gKwo+ICtzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKgo+ICtkcm1fY2xpZW50X2Rpc3BsYXlfZmlyc3RfbW9kZShzdHJ1Y3QgZHJtX2Ns aWVudF9kaXNwbGF5ICpkaXNwbGF5KQo+ICt7Cj4gKwlpZiAoIWRpc3BsYXktPm51bV9tb2RlcykK PiArCQlyZXR1cm4gTlVMTDsKPiArCXJldHVybiBkaXNwbGF5LT5tb2RlczsKPiArfQo+ICtFWFBP UlRfU1lNQk9MKGRybV9jbGllbnRfZGlzcGxheV9maXJzdF9tb2RlKTsKPiArCj4gK3N0cnVjdCBk cm1fbW9kZV9tb2RlaW5mbyAqCj4gK2RybV9jbGllbnRfZGlzcGxheV9uZXh0X21vZGUoc3RydWN0 IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyAqbW9kZXMg PSBkaXNwbGF5LT5tb2RlczsKPiArCj4gKwlpZiAoKyttb2RlIDwgJm1vZGVzW2Rpc3BsYXktPm51 bV9tb2Rlc10pCj4gKwkJcmV0dXJuIG1vZGU7Cj4gKwo+ICsJcmV0dXJuIE5VTEw7Cj4gK30KPiAr RVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfbmV4dF9tb2RlKTsKPiArCj4gK3N0YXRp YyB2b2lkCj4gK2RybV9jbGllbnRfZGlzcGxheV9maWxsX3RpbGVfbW9kZXMoc3RydWN0IGRybV9j bGllbnRfZGlzcGxheSAqZGlzcGxheSwKPiArCQkJCSAgIHN0cnVjdCBkcm1fbW9kZV9tb2RlaW5m byAqdGlsZV9tb2RlcykKPiArewo+ICsJdW5zaWduZWQgaW50IGksIGosIG51bV9tb2RlcyA9IGRp c3BsYXktPmNvbm5lY3RvcnNbMF0tPm51bV9tb2RlczsKPiArCXN0cnVjdCBkcm1fbW9kZV9tb2Rl aW5mbyAqdGlsZV9tb2RlLCAqY29ubl9tb2RlOwo+ICsKPiArCWlmICghbnVtX21vZGVzKSB7Cj4g KwkJa2ZyZWUodGlsZV9tb2Rlcyk7Cj4gKwkJa2ZyZWUoZGlzcGxheS0+bW9kZXMpOwo+ICsJCWRp c3BsYXktPm1vZGVzID0gTlVMTDsKPiArCQlkaXNwbGF5LT5udW1fbW9kZXMgPSAwOwo+ICsJCXJl dHVybjsKPiArCX0KPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX21vZGVzOyBpKyspIHsKPiAr CQl0aWxlX21vZGUgPSAmdGlsZV9tb2Rlc1tpXTsKPiArCj4gKwkJY29ubl9tb2RlID0gJmRpc3Bs YXktPmNvbm5lY3RvcnNbMF0tPm1vZGVzW2ldOwo+ICsJCXRpbGVfbW9kZS0+Y2xvY2sgPSBjb25u X21vZGUtPmNsb2NrOwo+ICsJCXRpbGVfbW9kZS0+dnNjYW4gPSBjb25uX21vZGUtPnZzY2FuOwo+ ICsJCXRpbGVfbW9kZS0+dnJlZnJlc2ggPSBjb25uX21vZGUtPnZyZWZyZXNoOwo+ICsJCXRpbGVf bW9kZS0+ZmxhZ3MgPSBjb25uX21vZGUtPmZsYWdzOwo+ICsJCXRpbGVfbW9kZS0+dHlwZSA9IGNv bm5fbW9kZS0+dHlwZTsKPiArCj4gKwkJZm9yIChqID0gMDsgaiA8IGRpc3BsYXktPm51bV9jb25u ZWN0b3JzOyBqKyspIHsKPiArCQkJY29ubl9tb2RlID0gJmRpc3BsYXktPmNvbm5lY3RvcnNbal0t Pm1vZGVzW2ldOwo+ICsKPiArCQkJaWYgKCFkaXNwbGF5LT5jb25uZWN0b3JzW2pdLT50aWxlX2hf bG9jKSB7Cj4gKwkJCQl0aWxlX21vZGUtPmhkaXNwbGF5ICs9IGNvbm5fbW9kZS0+aGRpc3BsYXk7 Cj4gKwkJCQl0aWxlX21vZGUtPmhzeW5jX3N0YXJ0ICs9IGNvbm5fbW9kZS0+aHN5bmNfc3RhcnQ7 Cj4gKwkJCQl0aWxlX21vZGUtPmhzeW5jX2VuZCArPSBjb25uX21vZGUtPmhzeW5jX2VuZDsKPiAr CQkJCXRpbGVfbW9kZS0+aHRvdGFsICs9IGNvbm5fbW9kZS0+aHRvdGFsOwo+ICsJCQl9Cj4gKwo+ ICsJCQlpZiAoIWRpc3BsYXktPmNvbm5lY3RvcnNbal0tPnRpbGVfdl9sb2MpIHsKPiArCQkJCXRp bGVfbW9kZS0+dmRpc3BsYXkgKz0gY29ubl9tb2RlLT52ZGlzcGxheTsKPiArCQkJCXRpbGVfbW9k ZS0+dnN5bmNfc3RhcnQgKz0gY29ubl9tb2RlLT52c3luY19zdGFydDsKPiArCQkJCXRpbGVfbW9k ZS0+dnN5bmNfZW5kICs9IGNvbm5fbW9kZS0+dnN5bmNfZW5kOwo+ICsJCQkJdGlsZV9tb2RlLT52 dG90YWwgKz0gY29ubl9tb2RlLT52dG90YWw7Cj4gKwkJCX0KPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ a2ZyZWUoZGlzcGxheS0+bW9kZXMpOwo+ICsJZGlzcGxheS0+bW9kZXMgPSB0aWxlX21vZGVzOwo+ ICsJZGlzcGxheS0+bnVtX21vZGVzID0gbnVtX21vZGVzOwo+ICt9Cj4gKwo+ICsvKioKPiArICog ZHJtX2NsaWVudF9kaXNwbGF5X3VwZGF0ZV9tb2RlcyAtIEZldGNoIGRpc3BsYXkgbW9kZXMKPiAr ICogQGRpc3BsYXk6IENsaWVudCBkaXNwbGF5Cj4gKyAqIEBtb2RlX2NoYW5nZWQ6IE9wdGlvbmFs IHBvaW50ZXIgdG8gYm9vbGVuIHdoaWNoIHJldHVybiB3aGV0aGVyIHRoZSBtb2Rlcwo+ICsgKiAg ICAgICAgICAgICAgICBoYXZlIGNoYW5nZWQgb3Igbm90Lgo+ICsgKgo+ICsgKiBUaGlzIGZ1bmN0 aW9uIGNhbiBiZSB1c2VkIGluIHRoZSBjbGllbnQgaG90cGx1ZyBjYWxsYmFjayB0byBjaGVjayBp ZiB0aGUKPiArICogdmlkZW8gbW9kZXMgaGF2ZSBjaGFuZ2VkIGFuZCBnZXQgdGhlbSB1cC10by1k YXRlLgo+ICsgKgo+ICsgKiBSZXR1cm5zOgo+ICsgKiBOdW1iZXIgb2YgbW9kZXMgb24gc3VjY2Vz cywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ICsgKi8KPiAraW50IGRybV9jbGll bnRfZGlzcGxheV91cGRhdGVfbW9kZXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxh eSwKPiArCQkJCSAgICBib29sICptb2RlX2NoYW5nZWQpCj4gK3sKPiArCXVuc2lnbmVkIGludCBu dW1fY29ubmVjdG9ycyA9IGRpc3BsYXktPm51bV9jb25uZWN0b3JzOwo+ICsJc3RydWN0IGRybV9j bGllbnRfZGV2ICpjbGllbnQgPSBkaXNwbGF5LT5jbGllbnQ7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKmRpc3BsYXlfdGlsZV9tb2RlczsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5l Y3RvciAqKmNvbm5lY3RvcnM7Cj4gKwl1bnNpZ25lZCBpbnQgaSwgbnVtX21vZGVzID0gMDsKPiAr CWJvb2wgZHVtbXlfY2hhbmdlZCA9IGZhbHNlOwo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAobW9k ZV9jaGFuZ2VkKQo+ICsJCSptb2RlX2NoYW5nZWQgPSBmYWxzZTsKPiArCWVsc2UKPiArCQltb2Rl X2NoYW5nZWQgPSAmZHVtbXlfY2hhbmdlZDsKPiArCj4gKwlpZiAoZGlzcGxheS0+Y2xvbmVkKQo+ ICsJCXJldHVybiAyOwo+ICsKPiArCXJldCA9IGRybV9jbGllbnRfZ2V0X2ZpbGUoY2xpZW50KTsK PiArCWlmIChyZXQpCj4gKwkJcmV0dXJuIHJldDsKPiArCj4gKwljb25uZWN0b3JzID0ga2NhbGxv YyhudW1fY29ubmVjdG9ycywgc2l6ZW9mKCpjb25uZWN0b3JzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlp ZiAoIWNvbm5lY3RvcnMpIHsKPiArCQlyZXQgPSAtRU5PTUVNOwo+ICsJCWdvdG8gb3V0X3B1dF9m aWxlOwo+ICsJfQo+ICsKPiArCS8qIEdldCBhIG5ldyBzZXQgZm9yIGNvbXBhcmlzb24gKi8KPiAr CWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsrKSB7Cj4gKwkJY29ubmVjdG9yc1tp XSA9IGRybV9jbGllbnRfZ2V0X2Nvbm5lY3RvcihjbGllbnQsIGRpc3BsYXktPmNvbm5lY3RvcnNb aV0tPmNvbm5faWQpOwo+ICsJCWlmIChJU19FUlJfT1JfTlVMTChjb25uZWN0b3JzW2ldKSkgewo+ ICsJCQlyZXQgPSBQVFJfRVJSX09SX1pFUk8oY29ubmVjdG9yc1tpXSk7Cj4gKwkJCWlmICghcmV0 KQo+ICsJCQkJcmV0ID0gLUVOT0VOVDsKPiArCQkJZ290byBvdXRfY2xlYW51cDsKPiArCQl9Cj4g Kwl9Cj4gKwo+ICsJLyogQWxsIGNvbm5lY3RvcnMgc2hvdWxkIGhhdmUgdGhlIHNhbWUgbnVtYmVy IG9mIG1vZGVzICovCj4gKwludW1fbW9kZXMgPSBjb25uZWN0b3JzWzBdLT5udW1fbW9kZXM7Cj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWlmIChudW1fbW9k ZXMgIT0gY29ubmVjdG9yc1tpXS0+bnVtX21vZGVzKSB7Cj4gKwkJCXJldCA9IC1FSU5WQUw7Cj4g KwkJCWdvdG8gb3V0X2NsZWFudXA7Cj4gKwkJfQo+ICsJfQo+ICsKPiArCWlmIChudW1fY29ubmVj dG9ycyA+IDEpIHsKPiArCQlkaXNwbGF5X3RpbGVfbW9kZXMgPSBrY2FsbG9jKG51bV9tb2Rlcywg c2l6ZW9mKCpkaXNwbGF5X3RpbGVfbW9kZXMpLCBHRlBfS0VSTkVMKTsKPiArCQlpZiAoIWRpc3Bs YXlfdGlsZV9tb2Rlcykgewo+ICsJCQlyZXQgPSAtRU5PTUVNOwo+ICsJCQlnb3RvIG91dF9jbGVh bnVwOwo+ICsJCX0KPiArCX0KPiArCj4gKwltdXRleF9sb2NrKCZkaXNwbGF5LT5tb2Rlc19sb2Nr KTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWRp c3BsYXktPmNvbm5lY3RvcnNbaV0tPnN0YXR1cyA9IGNvbm5lY3RvcnNbaV0tPnN0YXR1czsKPiAr CQlpZiAoZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+bnVtX21vZGVzICE9IGNvbm5lY3RvcnNbaV0t Pm51bV9tb2Rlcykgewo+ICsJCQlkaXNwbGF5LT5jb25uZWN0b3JzW2ldLT5udW1fbW9kZXMgPSBj b25uZWN0b3JzW2ldLT5udW1fbW9kZXM7Cj4gKwkJCWtmcmVlKGRpc3BsYXktPmNvbm5lY3RvcnNb aV0tPm1vZGVzKTsKPiArCQkJZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+bW9kZXMgPSBjb25uZWN0 b3JzW2ldLT5tb2RlczsKPiArCQkJY29ubmVjdG9yc1tpXS0+bW9kZXMgPSBOVUxMOwo+ICsJCQkq bW9kZV9jaGFuZ2VkID0gdHJ1ZTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJaWYgKG51bV9jb25uZWN0 b3JzID4gMSkKPiArCQlkcm1fY2xpZW50X2Rpc3BsYXlfZmlsbF90aWxlX21vZGVzKGRpc3BsYXks IGRpc3BsYXlfdGlsZV9tb2Rlcyk7Cj4gKwllbHNlCj4gKwkJZGlzcGxheS0+bW9kZXMgPSBkaXNw bGF5LT5jb25uZWN0b3JzWzBdLT5tb2RlczsKPiArCj4gKwltdXRleF91bmxvY2soJmRpc3BsYXkt Pm1vZGVzX2xvY2spOwo+ICsKPiArb3V0X2NsZWFudXA6Cj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVt X2Nvbm5lY3RvcnM7IGkrKykKPiArCQlkcm1fY2xpZW50X2Nvbm5lY3Rvcl9mcmVlKGNvbm5lY3Rv cnNbaV0pOwo+ICsJa2ZyZWUoY29ubmVjdG9ycyk7Cj4gK291dF9wdXRfZmlsZToKPiArCWRybV9j bGllbnRfcHV0X2ZpbGUoY2xpZW50KTsKPiArCj4gKwlyZXR1cm4gcmV0ID8gcmV0IDogbnVtX21v ZGVzOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X3VwZGF0ZV9tb2Rl cyk7Cj4gKwo+ICt2b2lkIGRybV9jbGllbnRfZGlzcGxheV9mcmVlKHN0cnVjdCBkcm1fY2xpZW50 X2Rpc3BsYXkgKmRpc3BsYXkpCj4gK3sKPiArCXVuc2lnbmVkIGludCBpOwo+ICsKPiArCWlmICgh ZGlzcGxheSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJLyogdGlsZSBtb2Rlcz8gKi8KPiArCWlmIChk aXNwbGF5LT5tb2RlcyAhPSBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5tb2RlcykKPiArCQlrZnJl ZShkaXNwbGF5LT5tb2Rlcyk7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXktPm51bV9j b25uZWN0b3JzOyBpKyspCj4gKwkJZHJtX2NsaWVudF9jb25uZWN0b3JfZnJlZShkaXNwbGF5LT5j b25uZWN0b3JzW2ldKTsKPiArCj4gKwlrZnJlZShkaXNwbGF5LT5jb25uZWN0b3JzKTsKPiArCW11 dGV4X2Rlc3Ryb3koJmRpc3BsYXktPm1vZGVzX2xvY2spOwo+ICsJa2ZyZWUoZGlzcGxheSk7Cj4g K30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZSk7Cj4gKwo+ICtzdGF0 aWMgc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqCj4gK2RybV9jbGllbnRfZGlzcGxheV9hbGxv YyhzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiArCQkJIHVuc2lnbmVkIGludCBudW1f Y29ubmVjdG9ycykKPiArewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsK PiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnM7Cj4gKwo+ICsJZGlz cGxheSA9IGt6YWxsb2Moc2l6ZW9mKCpkaXNwbGF5KSwgR0ZQX0tFUk5FTCk7Cj4gKwljb25uZWN0 b3JzID0ga2NhbGxvYyhudW1fY29ubmVjdG9ycywgc2l6ZW9mKCpjb25uZWN0b3JzKSwgR0ZQX0tF Uk5FTCk7Cj4gKwlpZiAoIWRpc3BsYXkgfHwgIWNvbm5lY3RvcnMpIHsKPiArCQlrZnJlZShkaXNw bGF5KTsKPiArCQlrZnJlZShjb25uZWN0b3JzKTsKPiArCQlyZXR1cm4gTlVMTDsKPiArCX0KPiAr Cj4gKwltdXRleF9pbml0KCZkaXNwbGF5LT5tb2Rlc19sb2NrKTsKPiArCWRpc3BsYXktPmNsaWVu dCA9IGNsaWVudDsKPiArCWRpc3BsYXktPmNvbm5lY3RvcnMgPSBjb25uZWN0b3JzOwo+ICsJZGlz cGxheS0+bnVtX2Nvbm5lY3RvcnMgPSBudW1fY29ubmVjdG9yczsKPiArCj4gKwlyZXR1cm4gZGlz cGxheTsKPiArfQo+ICsKPiArLyogTG9naWMgaXMgZnJvbSBkcm1fZmJfaGVscGVyICovCj4gK3N0 YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiArZHJtX2NsaWVudF9jb25uZWN0b3Jf cGlja19jbG9uZWQoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQsCj4gKwkJCQkgc3RydWN0 IGRybV9jbGllbnRfY29ubmVjdG9yICoqY29ubmVjdG9ycywKPiArCQkJCSB1bnNpZ25lZCBpbnQg bnVtX2Nvbm5lY3RvcnMpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9tb2RlaW5mbyBtb2Rlc1sy XSwgdWRtdF9tb2RlLCAqbW9kZSwgKnRtcDsKPiArCXN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICpk bXRfZGlzcGxheV9tb2RlID0gTlVMTDsKPiArCXVuc2lnbmVkIGludCBpLCBqLCBjb25uc1syXSwg bnVtX2Nvbm5zID0gMDsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2Nvbm5lY3RvciAqY29ubmVjdG9y Owo+ICsJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IGNsaWVudC0+ZGV2Owo+ICsJc3RydWN0IGRy bV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKPiArCj4gKwkvKiBvbmx5IGNvbnRlbXBsYXRlIGNs b25pbmcgaW4gdGhlIHNpbmdsZSBjcnRjIGNhc2UgKi8KPiArCWlmIChkZXYtPm1vZGVfY29uZmln Lm51bV9jcnRjID4gMSkKPiArCQlyZXR1cm4gTlVMTDsKPiArcmV0cnk6Cj4gKwlmb3IgKGkgPSAw OyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWNvbm5lY3RvciA9IGNvbm5lY3RvcnNb aV07Cj4gKwkJaWYgKCFjb25uZWN0b3IgfHwgY29ubmVjdG9yLT5oYXNfdGlsZSB8fCAhY29ubmVj dG9yLT5udW1fbW9kZXMpCj4gKwkJCWNvbnRpbnVlOwo+ICsKPiArCQlmb3IgKGogPSAwOyBqIDwg Y29ubmVjdG9yLT5udW1fbW9kZXM7IGorKykgewo+ICsJCQltb2RlID0gJmNvbm5lY3Rvci0+bW9k ZXNbal07Cj4gKwkJCWlmIChkbXRfZGlzcGxheV9tb2RlKSB7Cj4gKwkJCQlpZiAoZHJtX3Vtb2Rl X2VxdWFsKCZ1ZG10X21vZGUsIG1vZGUpKSB7Cj4gKwkJCQkJY29ubnNbbnVtX2Nvbm5zXSA9IGk7 Cj4gKwkJCQkJbW9kZXNbbnVtX2Nvbm5zKytdID0gKm1vZGU7Cj4gKwkJCQkJYnJlYWs7Cj4gKwkJ CQl9Cj4gKwkJCX0gZWxzZSB7Cj4gKwkJCQlpZiAobW9kZS0+dHlwZSAmIERSTV9NT0RFX1RZUEVf VVNFUkRFRikgewo+ICsJCQkJCWNvbm5zW251bV9jb25uc10gPSBpOwo+ICsJCQkJCW1vZGVzW251 bV9jb25ucysrXSA9ICptb2RlOwo+ICsJCQkJCWJyZWFrOwo+ICsJCQkJfQo+ICsJCQl9Cj4gKwkJ fQo+ICsJCWlmIChudW1fY29ubnMgPT0gMikKPiArCQkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYg KG51bV9jb25ucyA9PSAyKQo+ICsJCWdvdG8gZm91bmQ7Cj4gKwo+ICsJaWYgKGRtdF9kaXNwbGF5 X21vZGUpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZG10X2Rpc3BsYXlfbW9kZSA9IGRybV9t b2RlX2ZpbmRfZG10KGRldiwgMTAyNCwgNzY4LCA2MCwgZmFsc2UpOwo+ICsJZHJtX21vZGVfY29u dmVydF90b191bW9kZSgmdWRtdF9tb2RlLCBkbXRfZGlzcGxheV9tb2RlKTsKPiArCWRybV9tb2Rl X2Rlc3Ryb3koZGV2LCBkbXRfZGlzcGxheV9tb2RlKTsKPiArCj4gKwlnb3RvIHJldHJ5Owo+ICsK PiArZm91bmQ6Cj4gKwl0bXAgPSBrY2FsbG9jKDIsIHNpemVvZigqdG1wKSwgR0ZQX0tFUk5FTCk7 Cj4gKwlpZiAoIXRtcCkKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlkaXNw bGF5ID0gZHJtX2NsaWVudF9kaXNwbGF5X2FsbG9jKGNsaWVudCwgMik7Cj4gKwlpZiAoIWRpc3Bs YXkpIHsKPiArCQlrZnJlZSh0bXApOwo+ICsJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwo+ICsJ fQo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsKPiArCQljb25uZWN0b3IgPSBjb25u ZWN0b3JzW2Nvbm5zW2ldXTsKPiArCQlkaXNwbGF5LT5jb25uZWN0b3JzW2ldID0gY29ubmVjdG9y Owo+ICsJCWNvbm5lY3RvcnNbY29ubnNbaV1dID0gTlVMTDsKPiArCQlrZnJlZShjb25uZWN0b3It Pm1vZGVzKTsKPiArCQl0bXBbaV0gPSBtb2Rlc1tpXTsKPiArCQljb25uZWN0b3ItPm1vZGVzID0g JnRtcFtpXTsKPiArCQljb25uZWN0b3ItPm51bV9tb2RlcyA9IDE7Cj4gKwl9Cj4gKwo+ICsJZGlz cGxheS0+Y2xvbmVkID0gdHJ1ZTsKPiArCWRpc3BsYXktPm1vZGVzID0gJnRtcFswXTsKPiArCWRp c3BsYXktPm51bV9tb2RlcyA9IDE7Cj4gKwo+ICsJcmV0dXJuIGRpc3BsYXk7Cj4gK30KPiArCj4g K3N0YXRpYyBzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiArZHJtX2NsaWVudF9jb25uZWN0 b3JfcGlja190aWxlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LAo+ICsJCQkgICAgICAg c3RydWN0IGRybV9jbGllbnRfY29ubmVjdG9yICoqY29ubmVjdG9ycywKPiArCQkJICAgICAgIHVu c2lnbmVkIGludCBudW1fY29ubmVjdG9ycykKPiArewo+ICsJdW5zaWduZWQgaW50IGksIG51bV9j b25ucywgbnVtX21vZGVzLCB0aWxlX2dyb3VwID0gMDsKPiArCXN0cnVjdCBkcm1fbW9kZV9tb2Rl aW5mbyAqdGlsZV9tb2RlcyA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3Ig KmNvbm5lY3RvcjsKPiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4gKwl1 MTYgY29ubnNbMzJdOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY29ubmVjdG9yczsgaSsr KSB7Cj4gKwkJY29ubmVjdG9yID0gY29ubmVjdG9yc1tpXTsKPiArCQlpZiAoIWNvbm5lY3RvciB8 fCAhY29ubmVjdG9yLT50aWxlX2dyb3VwKQo+ICsJCQljb250aW51ZTsKPiArCj4gKwkJaWYgKCF0 aWxlX2dyb3VwKSB7Cj4gKwkJCXRpbGVfZ3JvdXAgPSBjb25uZWN0b3ItPnRpbGVfZ3JvdXA7Cj4g KwkJCW51bV9tb2RlcyA9IGNvbm5lY3Rvci0+bnVtX21vZGVzOwo+ICsJCX0KPiArCj4gKwkJaWYg KGNvbm5lY3Rvci0+dGlsZV9ncm91cCAhPSB0aWxlX2dyb3VwKQo+ICsJCQljb250aW51ZTsKPiAr Cj4gKwkJaWYgKG51bV9tb2RlcyAhPSBjb25uZWN0b3ItPm51bV9tb2Rlcykgewo+ICsJCQlEUk1f RVJST1IoIlRpbGUgY29ubmVjdG9ycyBtdXN0IGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIG1vZGVz XG4iKTsKPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7Cj4gKwkJfQo+ICsKPiArCQljb25u c1tudW1fY29ubnMrK10gPSBpOwo+ICsJCWlmIChXQVJOX09OKG51bV9jb25ucyA9PSAzMykpCj4g KwkJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ICsJfQo+ICsKPiArCWlmICghbnVtX2Nvbm5z KQo+ICsJCXJldHVybiBOVUxMOwo+ICsKPiArCWlmIChudW1fbW9kZXMpIHsKPiArCQl0aWxlX21v ZGVzID0ga2NhbGxvYyhudW1fbW9kZXMsIHNpemVvZigqdGlsZV9tb2RlcyksIEdGUF9LRVJORUwp Owo+ICsJCWlmICghdGlsZV9tb2RlcykKPiArCQkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4g Kwl9Cj4gKwo+ICsJZGlzcGxheSA9IGRybV9jbGllbnRfZGlzcGxheV9hbGxvYyhjbGllbnQsIG51 bV9jb25ucyk7Cj4gKwlpZiAoIWRpc3BsYXkpIHsKPiArCQlrZnJlZSh0aWxlX21vZGVzKTsKPiAr CQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCX0KPiArCj4gKwlpZiAobnVtX21vZGVzKQo+ ICsJCWRybV9jbGllbnRfZGlzcGxheV9maWxsX3RpbGVfbW9kZXMoZGlzcGxheSwgdGlsZV9tb2Rl cyk7Cj4gKwo+ICsJcmV0dXJuIGRpc3BsYXk7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJt X2NsaWVudF9kaXNwbGF5ICoKPiArZHJtX2NsaWVudF9jb25uZWN0b3JfcGlja19ub3RfdGlsZShz dHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwKPiArCQkJCSAgIHN0cnVjdCBkcm1fY2xpZW50 X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnMsCj4gKwkJCQkgICB1bnNpZ25lZCBpbnQgbnVtX2Nvbm5l Y3RvcnMpCj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXk7Cj4gKwl1 bnNpZ25lZCBpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkr Kykgewo+ICsJCWlmICghY29ubmVjdG9yc1tpXSB8fCBjb25uZWN0b3JzW2ldLT5oYXNfdGlsZSkK PiArCQkJY29udGludWU7Cj4gKwkJYnJlYWs7Cj4gKwl9Cj4gKwo+ICsJaWYgKGkgPT0gbnVtX2Nv bm5lY3RvcnMpCj4gKwkJcmV0dXJuIE5VTEw7Cj4gKwo+ICsJZGlzcGxheSA9IGRybV9jbGllbnRf ZGlzcGxheV9hbGxvYyhjbGllbnQsIDEpOwo+ICsJaWYgKCFkaXNwbGF5KQo+ICsJCXJldHVybiBF UlJfUFRSKC1FTk9NRU0pOwo+ICsKPiArCWRpc3BsYXktPmNvbm5lY3RvcnNbMF0gPSBjb25uZWN0 b3JzW2ldOwo+ICsJY29ubmVjdG9yc1tpXSA9IE5VTEw7Cj4gKwlkaXNwbGF5LT5tb2RlcyA9IGRp c3BsYXktPmNvbm5lY3RvcnNbMF0tPm1vZGVzOwo+ICsJZGlzcGxheS0+bnVtX21vZGVzID0gZGlz cGxheS0+Y29ubmVjdG9yc1swXS0+bnVtX21vZGVzOwo+ICsKPiArCXJldHVybiBkaXNwbGF5Owo+ ICt9Cj4gKwo+ICsvKiBHZXQgY29ubmVjdG9ycyBhbmQgYnVuZGxlIHRoZW0gdXAgaW50byBkaXNw bGF5cyAqLwo+ICtzdGF0aWMgaW50IGRybV9jbGllbnRfZ2V0X2Rpc3BsYXlzKHN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50LAo+ICsJCQkJICAgc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAq KipkaXNwbGF5cykKPiArewo+ICsJaW50IHJldCwgbnVtX2Nvbm5lY3RvcnMsIG51bV9kaXNwbGF5 cyA9IDA7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3IgKipjb25uZWN0b3JzOwo+ICsJ c3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheTsKPiArCXVuc2lnbmVkIGludCBpOwo+ ICsKPiArCXJldCA9IGRybV9jbGllbnRfZ2V0X2ZpbGUoY2xpZW50KTsKPiArCWlmIChyZXQpCj4g KwkJcmV0dXJuIHJldDsKPiArCj4gKwludW1fY29ubmVjdG9ycyA9IGRybV9jbGllbnRfZ2V0X2Nv bm5lY3RvcnMoY2xpZW50LCAmY29ubmVjdG9ycyk7Cj4gKwlpZiAobnVtX2Nvbm5lY3RvcnMgPD0g MCkgewo+ICsJCXJldCA9IG51bV9jb25uZWN0b3JzOwo+ICsJCWdvdG8gZXJyX3B1dF9maWxlOwo+ ICsJfQo+ICsKPiArCSpkaXNwbGF5cyA9IGtjYWxsb2MobnVtX2Nvbm5lY3RvcnMsIHNpemVvZigq ZGlzcGxheXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghKCpkaXNwbGF5cykpIHsKPiArCQlyZXQg PSAtRU5PTUVNOwo+ICsJCWdvdG8gZXJyX2ZyZWU7Cj4gKwl9Cj4gKwo+ICsJZGlzcGxheSA9IGRy bV9jbGllbnRfY29ubmVjdG9yX3BpY2tfY2xvbmVkKGNsaWVudCwgY29ubmVjdG9ycywKPiArCQkJ CQkJICAgbnVtX2Nvbm5lY3RvcnMpOwo+ICsJaWYgKElTX0VSUihkaXNwbGF5KSkgewo+ICsJCXJl dCA9IFBUUl9FUlIoZGlzcGxheSk7Cj4gKwkJZ290byBlcnJfZnJlZTsKPiArCX0KPiArCWlmIChk aXNwbGF5KQo+ICsJCSgqZGlzcGxheXMpW251bV9kaXNwbGF5cysrXSA9IGRpc3BsYXk7Cj4gKwo+ ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3JzOyBpKyspIHsKPiArCQlkaXNwbGF5ID0g ZHJtX2NsaWVudF9jb25uZWN0b3JfcGlja190aWxlKGNsaWVudCwgY29ubmVjdG9ycywKPiArCQkJ CQkJCSBudW1fY29ubmVjdG9ycyk7Cj4gKwkJaWYgKElTX0VSUihkaXNwbGF5KSkgewo+ICsJCQly ZXQgPSBQVFJfRVJSKGRpc3BsYXkpOwo+ICsJCQlnb3RvIGVycl9mcmVlOwo+ICsJCX0KPiArCQlp ZiAoIWRpc3BsYXkpCj4gKwkJCWJyZWFrOwo+ICsJCSgqZGlzcGxheXMpW251bV9kaXNwbGF5cysr XSA9IGRpc3BsYXk7Cj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9jb25uZWN0b3Jz OyBpKyspIHsKPiArCQlkaXNwbGF5ID0gZHJtX2NsaWVudF9jb25uZWN0b3JfcGlja19ub3RfdGls ZShjbGllbnQsIGNvbm5lY3RvcnMsCj4gKwkJCQkJCQkgICAgIG51bV9jb25uZWN0b3JzKTsKPiAr CQlpZiAoSVNfRVJSKGRpc3BsYXkpKSB7Cj4gKwkJCXJldCA9IFBUUl9FUlIoZGlzcGxheSk7Cj4g KwkJCWdvdG8gZXJyX2ZyZWU7Cj4gKwkJfQo+ICsJCWlmICghZGlzcGxheSkKPiArCQkJYnJlYWs7 Cj4gKwkJKCpkaXNwbGF5cylbbnVtX2Rpc3BsYXlzKytdID0gZGlzcGxheTsKPiArCX0KPiArCj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykgewo+ICsJCWlmIChjb25uZWN0 b3JzW2ldKSB7Cj4gKwkJCURSTV9JTkZPKCJDb25uZWN0b3IgJXUgZmVsbCB0aHJvdWdoIHRoZSBj cmFja3MuXG4iLAo+ICsJCQkJIGNvbm5lY3RvcnNbaV0tPmNvbm5faWQpOwo+ICsJCQlkcm1fY2xp ZW50X2Nvbm5lY3Rvcl9mcmVlKGNvbm5lY3RvcnNbaV0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwlk cm1fY2xpZW50X3B1dF9maWxlKGNsaWVudCk7Cj4gKwlrZnJlZShjb25uZWN0b3JzKTsKPiArCj4g KwlyZXR1cm4gbnVtX2Rpc3BsYXlzOwo+ICsKPiArZXJyX2ZyZWU6Cj4gKwlmb3IgKGkgPSAwOyBp IDwgbnVtX2Rpc3BsYXlzOyBpKyspCj4gKwkJZHJtX2NsaWVudF9kaXNwbGF5X2ZyZWUoKCpkaXNw bGF5cylbaV0pOwo+ICsJa2ZyZWUoKmRpc3BsYXlzKTsKPiArCSpkaXNwbGF5cyA9IE5VTEw7Cj4g Kwlmb3IgKGkgPSAwOyBpIDwgbnVtX2Nvbm5lY3RvcnM7IGkrKykKPiArCQlkcm1fY2xpZW50X2Nv bm5lY3Rvcl9mcmVlKGNvbm5lY3RvcnNbaV0pOwo+ICsJa2ZyZWUoY29ubmVjdG9ycyk7Cj4gK2Vy cl9wdXRfZmlsZToKPiArCWRybV9jbGllbnRfcHV0X2ZpbGUoY2xpZW50KTsKPiArCj4gKwlyZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbAo+ICtkcm1fY2xpZW50X2Rpc3BsYXlfaXNf ZW5hYmxlZChzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5LCBib29sIHN0cmljdCkK PiArewo+ICsJdW5zaWduZWQgaW50IGk7Cj4gKwo+ICsJaWYgKCFkaXNwbGF5LT5udW1fbW9kZXMp Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBkaXNwbGF5LT5udW1f Y29ubmVjdG9yczsgaSsrKQo+ICsJCWlmICghZHJtX2NsaWVudF9jb25uZWN0b3JfaXNfZW5hYmxl ZChkaXNwbGF5LT5jb25uZWN0b3JzW2ldLCBzdHJpY3QpKQo+ICsJCQlyZXR1cm4gZmFsc2U7Cj4g Kwo+ICsJcmV0dXJuIHRydWU7Cj4gK30KPiArCj4gKy8qKgo+ICsgKiBkcm1fY2xpZW50X2Rpc3Bs YXlfZ2V0X2ZpcnN0X2VuYWJsZWQgLSBHZXQgZmlyc3QgZW5hYmxlZCBkaXNwbGF5Cj4gKyAqIEBj bGllbnQ6IERSTSBjbGllbnQKPiArICogQHN0cmljdDogSWYgdHJ1ZSB0aGUgY29ubmVjdG9yKHMp IGhhdmUgdG8gYmUgY29ubmVjdGVkLCBpZiBmYWxzZSB0aGV5IGNhbgo+ICsgKiAgICAgICAgICBh bHNvIGhhdmUgdW5rbm93biBzdGF0dXMuCj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gZ2V0cyBh bGwgY29ubmVjdG9ycyBhbmQgYnVuZGxlcyB0aGVtIGludG8gZGlzcGxheXMKPiArICogKHRpbGVk L2Nsb25lZCkuIEl0IHRoZW4gcGlja3MgdGhlIGZpcnN0IG9uZSB3aXRoIGNvbm5lY3RvcnMgdGhh dCBpcyBlbmFibGVkCj4gKyAqIGFjY29yZGluZyB0byBAc3RyaWN0Lgo+ICsgKgo+ICsgKiBSZXR1 cm5zOgo+ICsgKiBQb2ludGVyIHRvIGEgY2xpZW50IGRpc3BsYXkgaWYgc3VjaCBhIGRpc3BsYXkg d2FzIGZvdW5kLCBOVUxMIGlmIG5vdCBmb3VuZAo+ICsgKiBvciBhbiBlcnJvciBwb2ludGVyIG9u IGZhaWx1cmUuCj4gKyAqLwo+ICtzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiArZHJtX2Ns aWVudF9kaXNwbGF5X2dldF9maXJzdF9lbmFibGVkKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xp ZW50LCBib29sIHN0cmljdCkKPiArewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqKmRp c3BsYXlzLCAqZGlzcGxheSA9IE5VTEw7Cj4gKwlpbnQgbnVtX2Rpc3BsYXlzOwo+ICsJdW5zaWdu ZWQgaW50IGk7Cj4gKwo+ICsJbnVtX2Rpc3BsYXlzID0gZHJtX2NsaWVudF9nZXRfZGlzcGxheXMo Y2xpZW50LCAmZGlzcGxheXMpOwo+ICsJaWYgKG51bV9kaXNwbGF5cyA8IDApCj4gKwkJcmV0dXJu IEVSUl9QVFIobnVtX2Rpc3BsYXlzKTsKPiArCWlmICghbnVtX2Rpc3BsYXlzKQo+ICsJCXJldHVy biBOVUxMOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fZGlzcGxheXM7IGkrKykgewo+ICsJ CWlmICghZGlzcGxheSAmJgo+ICsJCSAgICBkcm1fY2xpZW50X2Rpc3BsYXlfaXNfZW5hYmxlZChk aXNwbGF5c1tpXSwgc3RyaWN0KSkgewo+ICsJCQlkaXNwbGF5ID0gZGlzcGxheXNbaV07Cj4gKwkJ CWNvbnRpbnVlOwo+ICsJCX0KPiArCQlkcm1fY2xpZW50X2Rpc3BsYXlfZnJlZShkaXNwbGF5c1tp XSk7Cj4gKwl9Cj4gKwo+ICsJa2ZyZWUoZGlzcGxheXMpOwo+ICsKPiArCXJldHVybiBkaXNwbGF5 Owo+ICt9Cj4gK0VYUE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2dldF9maXJzdF9lbmFi bGVkKTsKPiArCj4gK3Vuc2lnbmVkIGludAo+ICtkcm1fY2xpZW50X2Rpc3BsYXlfcHJlZmVycmVk X2RlcHRoKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCj4gK3sKPiArCXN0cnVj dCBkcm1fY29ubmVjdG9yICpjb25uOwo+ICsJdW5zaWduZWQgaW50IHJldDsKPiArCj4gKwljb25u ID0gZHJtX2Nvbm5lY3Rvcl9sb29rdXAoZGlzcGxheS0+Y2xpZW50LT5kZXYsIE5VTEwsCj4gKwkJ CQkgICAgZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y29ubl9pZCk7Cj4gKwlpZiAoIWNvbm4pCj4g KwkJcmV0dXJuIDA7Cj4gKwo+ICsJaWYgKGNvbm4tPmNtZGxpbmVfbW9kZS5icHBfc3BlY2lmaWVk KQo+ICsJCXJldCA9IGNvbm4tPmNtZGxpbmVfbW9kZS5icHA7Cj4gKwllbHNlCj4gKwkJcmV0ID0g ZGlzcGxheS0+Y2xpZW50LT5kZXYtPm1vZGVfY29uZmlnLnByZWZlcnJlZF9kZXB0aDsKPiArCj4g Kwlkcm1fY29ubmVjdG9yX3B1dChjb25uKTsKPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X3ByZWZlcnJlZF9kZXB0aCk7Cj4gKwo+ICtp bnQgZHJtX2NsaWVudF9kaXNwbGF5X2RwbXMoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlz cGxheSwgaW50IG1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1fbW9kZV9vYmpfc2V0X3Byb3BlcnR5 IHByb3A7Cj4gKwo+ICsJcHJvcC52YWx1ZSA9IG1vZGU7Cj4gKwlwcm9wLnByb3BfaWQgPSBkaXNw bGF5LT5jbGllbnQtPmRldi0+bW9kZV9jb25maWcuZHBtc19wcm9wZXJ0eS0+YmFzZS5pZDsKPiAr CXByb3Aub2JqX2lkID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y29ubl9pZDsKPiArCXByb3Au b2JqX3R5cGUgPSBEUk1fTU9ERV9PQkpFQ1RfQ09OTkVDVE9SOwo+ICsKPiArCXJldHVybiBkcm1f bW9kZV9vYmpfc2V0X3Byb3BlcnR5KGRpc3BsYXktPmNsaWVudC0+ZGV2LCAmcHJvcCwKPiArCQkJ CQkgZGlzcGxheS0+Y2xpZW50LT5maWxlKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGll bnRfZGlzcGxheV9kcG1zKTsKPiArCj4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfd2FpdF92Ymxh bmsoc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkKPiArewo+ICsJc3RydWN0IGRy bV9jcnRjICpjcnRjOwo+ICsJdW5pb24gZHJtX3dhaXRfdmJsYW5rIHZibGFua19yZXEgPSB7Cj4g KwkJLnJlcXVlc3QgPSB7Cj4gKwkJCS50eXBlID0gX0RSTV9WQkxBTktfUkVMQVRJVkUsCj4gKwkJ CS5zZXF1ZW5jZSA9IDEsCj4gKwkJfSwKPiArCX07Cj4gKwo+ICsJY3J0YyA9IGRybV9jcnRjX2Zp bmQoZGlzcGxheS0+Y2xpZW50LT5kZXYsIGRpc3BsYXktPmNsaWVudC0+ZmlsZSwKPiArCQkJICAg ICBkaXNwbGF5LT5jb25uZWN0b3JzWzBdLT5jcnRjX2lkKTsKPiArCWlmICghY3J0YykKPiArCQly ZXR1cm4gLUVOT0VOVDsKPiArCj4gKwl2YmxhbmtfcmVxLnJlcXVlc3QudHlwZSB8PSBkcm1fY3J0 Y19pbmRleChjcnRjKSA8PCBfRFJNX1ZCTEFOS19ISUdIX0NSVENfU0hJRlQ7Cj4gKwo+ICsJcmV0 dXJuIGRybV93YWl0X3ZibGFuayhkaXNwbGF5LT5jbGllbnQtPmRldiwgJnZibGFua19yZXEsCj4g KwkJCSAgICAgICBkaXNwbGF5LT5jbGllbnQtPmZpbGUpOwo+ICt9Cj4gK0VYUE9SVF9TWU1CT0wo ZHJtX2NsaWVudF9kaXNwbGF5X3dhaXRfdmJsYW5rKTsKPiArCj4gK3N0YXRpYyBpbnQgZHJtX2Ns aWVudF9nZXRfY3J0Y19pbmRleChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgdTMyIGlk KQo+ICt7Cj4gKwlpbnQgaTsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgY2xpZW50LT5udW1fY3J0 Y3M7IGkrKykKPiArCQlpZiAoY2xpZW50LT5jcnRjc1tpXSA9PSBpZCkKPiArCQkJcmV0dXJuIGk7 Cj4gKwo+ICsJcmV0dXJuIC1FTk9FTlQ7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgZHJtX2NsaWVu dF9kaXNwbGF5X2ZpbmRfY3J0Y3Moc3RydWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSkK PiArewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQgPSBkaXNwbGF5LT5jbGllbnQ7 Cj4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gY2xpZW50LT5kZXY7Cj4gKwlzdHJ1Y3QgZHJt X2ZpbGUgKmZpbGUgPSBjbGllbnQtPmZpbGU7Cj4gKwl1MzIgZW5jb2Rlcl9pZHNbRFJNX0NPTk5F Q1RPUl9NQVhfRU5DT0RFUl07Cj4gKwl1bnNpZ25lZCBpbnQgaSwgaiwgYXZhaWxhYmxlX2NydGNz ID0gfjA7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfZ2V0X2Nvbm5lY3RvciBjb25uX3JlcTsKPiArCXN0 cnVjdCBkcm1fbW9kZV9nZXRfZW5jb2RlciBlbmNfcmVxOwo+ICsJaW50IHJldDsKPiArCj4gKwkv KiBBbHJlYWR5IGRvbmU/ICovCj4gKwlpZiAoZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y3J0Y19p ZCkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlmb3IgKGkgPSAwOyBpIDwgZGlzcGxheS0+bnVtX2Nv bm5lY3RvcnM7IGkrKykgewo+ICsJCXUzMiBhY3RpdmVfY3J0Y3MgPSAwLCBjcnRjc19mb3JfY29u bmVjdG9yID0gMDsKPiArCQlpbnQgY3J0Y19pZHg7Cj4gKwo+ICsJCW1lbXNldCgmY29ubl9yZXEs IDAsIHNpemVvZihjb25uX3JlcSkpOwo+ICsJCWNvbm5fcmVxLmNvbm5lY3Rvcl9pZCA9IGRpc3Bs YXktPmNvbm5lY3RvcnNbaV0tPmNvbm5faWQ7Cj4gKwkJY29ubl9yZXEuZW5jb2RlcnNfcHRyID0g KHVuc2lnbmVkIGxvbmcpKGVuY29kZXJfaWRzKTsKPiArCQljb25uX3JlcS5jb3VudF9lbmNvZGVy cyA9IERSTV9DT05ORUNUT1JfTUFYX0VOQ09ERVI7Cj4gKwkJcmV0ID0gZHJtX21vZGVfZ2V0Y29u bmVjdG9yKGRldiwgJmNvbm5fcmVxLCBmaWxlLCBmYWxzZSk7Cj4gKwkJaWYgKHJldCkKPiArCQkJ cmV0dXJuIHJldDsKPiArCj4gKwkJaWYgKGNvbm5fcmVxLmVuY29kZXJfaWQpIHsKPiArCQkJbWVt c2V0KCZlbmNfcmVxLCAwLCBzaXplb2YoZW5jX3JlcSkpOwo+ICsJCQllbmNfcmVxLmVuY29kZXJf aWQgPSBjb25uX3JlcS5lbmNvZGVyX2lkOwo+ICsJCQlyZXQgPSBkcm1fbW9kZV9nZXRlbmNvZGVy KGRldiwgJmVuY19yZXEsIGZpbGUpOwo+ICsJCQlpZiAocmV0KQo+ICsJCQkJcmV0dXJuIHJldDsK PiArCQkJY3J0Y3NfZm9yX2Nvbm5lY3RvciB8PSBlbmNfcmVxLnBvc3NpYmxlX2NydGNzOwo+ICsJ CQlpZiAoY3J0Y3NfZm9yX2Nvbm5lY3RvciAmIGF2YWlsYWJsZV9jcnRjcykKPiArCQkJCWdvdG8g Zm91bmQ7Cj4gKwkJfQo+ICsKPiArCQlmb3IgKGogPSAwOyBqIDwgY29ubl9yZXEuY291bnRfZW5j b2RlcnM7IGorKykgewo+ICsJCQltZW1zZXQoJmVuY19yZXEsIDAsIHNpemVvZihlbmNfcmVxKSk7 Cj4gKwkJCWVuY19yZXEuZW5jb2Rlcl9pZCA9IGVuY29kZXJfaWRzW2pdOwo+ICsJCQlyZXQgPSBk cm1fbW9kZV9nZXRlbmNvZGVyKGRldiwgJmVuY19yZXEsIGZpbGUpOwo+ICsJCQlpZiAocmV0KQo+ ICsJCQkJcmV0dXJuIHJldDsKPiArCj4gKwkJCWNydGNzX2Zvcl9jb25uZWN0b3IgfD0gZW5jX3Jl cS5wb3NzaWJsZV9jcnRjczsKPiArCj4gKwkJCWlmIChlbmNfcmVxLmNydGNfaWQpIHsKPiArCQkJ CWNydGNfaWR4ID0gZHJtX2NsaWVudF9nZXRfY3J0Y19pbmRleChjbGllbnQsIGVuY19yZXEuY3J0 Y19pZCk7Cj4gKwkJCQlpZiAoY3J0Y19pZHggPj0gMCkKPiArCQkJCQlhY3RpdmVfY3J0Y3MgfD0g MSA8PCBjcnRjX2lkeDsKPiArCQkJfQo+ICsJCX0KPiArCj4gK2ZvdW5kOgo+ICsJCWNydGNzX2Zv cl9jb25uZWN0b3IgJj0gYXZhaWxhYmxlX2NydGNzOwo+ICsJCWFjdGl2ZV9jcnRjcyAmPSBhdmFp bGFibGVfY3J0Y3M7Cj4gKwo+ICsJCWlmICghY3J0Y3NfZm9yX2Nvbm5lY3RvcikKPiArCQkJcmV0 dXJuIC1FTk9FTlQ7Cj4gKwo+ICsJCWlmIChhY3RpdmVfY3J0Y3MpCj4gKwkJCWNydGNfaWR4ID0g ZmZzKGFjdGl2ZV9jcnRjcykgLSAxOwo+ICsJCWVsc2UKPiArCQkJY3J0Y19pZHggPSBmZnMoY3J0 Y3NfZm9yX2Nvbm5lY3RvcikgLSAxOwo+ICsKPiArCQlpZiAoY3J0Y19pZHggPj0gY2xpZW50LT5u dW1fY3J0Y3MpCj4gKwkJCXJldHVybiAtRUlOVkFMOwo+ICsKPiArCQlkaXNwbGF5LT5jb25uZWN0 b3JzW2ldLT5jcnRjX2lkID0gY2xpZW50LT5jcnRjc1tjcnRjX2lkeF07Cj4gKwkJYXZhaWxhYmxl X2NydGNzICY9IH5CSVQoY3J0Y19pZHgpOwo+ICsJfQo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4g Kwo+ICsvKioKPiArICogZHJtX2NsaWVudF9kaXNwbGF5X2NvbW1pdF9tb2RlIC0gQ29tbWl0IGEg bW9kZSB0byB0aGUgY3J0YyhzKQo+ICsgKiBAZGlzcGxheTogQ2xpZW50IGRpc3BsYXkKPiArICog QGZiX2lkOiBGcmFtZWJ1ZmZlciBpZAo+ICsgKiBAbW9kZTogVmlkZW8gbW9kZQo+ICsgKgo+ICsg KiBSZXR1cm5zOgo+ICsgKiBaZXJvIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZS4KPiArICovCj4gK2ludCBkcm1fY2xpZW50X2Rpc3BsYXlfY29tbWl0X21vZGUoc3Ry dWN0IGRybV9jbGllbnRfZGlzcGxheSAqZGlzcGxheSwKPiArCQkJCSAgIHUzMiBmYl9pZCwgc3Ry dWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9k ZXYgKmNsaWVudCA9IGRpc3BsYXktPmNsaWVudDsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYg PSBjbGllbnQtPmRldjsKPiArCXVuc2lnbmVkIGludCBudW1fY3J0Y3MgPSBjbGllbnQtPm51bV9j cnRjczsKPiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZSA9IGNsaWVudC0+ZmlsZTsKPiArCXVuc2ln bmVkIGludCAqeG9mZnNldHMgPSBOVUxMLCAqeW9mZnNldHMgPSBOVUxMOwo+ICsJc3RydWN0IGRy bV9tb2RlX2NydGMgKmNydGNfcmVxcywgKnJlcTsKPiArCXUzMiBjbG9uZWRfY29ubl9pZHNbMl07 Cj4gKwl1bnNpZ25lZCBpbnQgaTsKPiArCWludCBpZHgsIHJldDsKPiArCj4gKwlyZXQgPSBkcm1f Y2xpZW50X2Rpc3BsYXlfZmluZF9jcnRjcyhkaXNwbGF5KTsKPiArCWlmIChyZXQpCj4gKwkJcmV0 dXJuIHJldDsKPiArCj4gKwljcnRjX3JlcXMgPSBrY2FsbG9jKG51bV9jcnRjcywgc2l6ZW9mKCpj cnRjX3JlcXMpLCBHRlBfS0VSTkVMKTsKPiArCWlmICghY3J0Y19yZXFzKQo+ICsJCXJldHVybiAt RU5PTUVNOwo+ICsKPiArCWZvciAoaSA9IDA7IGkgPCBudW1fY3J0Y3M7IGkrKykKPiArCQljcnRj X3JlcXNbaV0uY3J0Y19pZCA9IGNsaWVudC0+Y3J0Y3NbaV07Cj4gKwo+ICsJaWYgKGRybV9jbGll bnRfZGlzcGxheV9pc190aWxlZChkaXNwbGF5KSkgewo+ICsJCS8qIFRPRE8gY2FsY3VsYXRlIHRp bGUgY3J0YyBvZmZzZXRzICovCj4gKwl9Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGRpc3BsYXkt Pm51bV9jb25uZWN0b3JzOyBpKyspIHsKPiArCQlpZHggPSBkcm1fY2xpZW50X2dldF9jcnRjX2lu ZGV4KGNsaWVudCwgZGlzcGxheS0+Y29ubmVjdG9yc1tpXS0+Y3J0Y19pZCk7Cj4gKwkJaWYgKGlk eCA8IDApCj4gKwkJCXJldHVybiAtRU5PRU5UOwo+ICsKPiArCQlyZXEgPSAmY3J0Y19yZXFzW2lk eF07Cj4gKwo+ICsJCXJlcS0+ZmJfaWQgPSBmYl9pZDsKPiArCQlpZiAoeG9mZnNldHMpIHsKPiAr CQkJcmVxLT54ID0geG9mZnNldHNbaV07Cj4gKwkJCXJlcS0+eSA9IHlvZmZzZXRzW2ldOwo+ICsJ CX0KPiArCQlyZXEtPm1vZGVfdmFsaWQgPSAxOwo+ICsJCXJlcS0+bW9kZSA9ICptb2RlOwo+ICsK PiArCQlpZiAoZGlzcGxheS0+Y2xvbmVkKSB7Cj4gKwkJCWNsb25lZF9jb25uX2lkc1swXSA9IGRp c3BsYXktPmNvbm5lY3RvcnNbMF0tPmNvbm5faWQ7Cj4gKwkJCWNsb25lZF9jb25uX2lkc1sxXSA9 IGRpc3BsYXktPmNvbm5lY3RvcnNbMV0tPmNvbm5faWQ7Cj4gKwkJCXJlcS0+c2V0X2Nvbm5lY3Rv cnNfcHRyID0gKHVuc2lnbmVkIGxvbmcpKGNsb25lZF9jb25uX2lkcyk7Cj4gKwkJCXJlcS0+Y291 bnRfY29ubmVjdG9ycyA9IDI7Cj4gKwkJCWJyZWFrOwo+ICsJCX0KPiArCj4gKwkJcmVxLT5zZXRf Y29ubmVjdG9yc19wdHIgPSAodW5zaWduZWQgbG9uZykoJmRpc3BsYXktPmNvbm5lY3RvcnNbaV0t PmNvbm5faWQpOwo+ICsJCXJlcS0+Y291bnRfY29ubmVjdG9ycyA9IDE7Cj4gKwl9Cj4gKwo+ICsJ Zm9yIChpID0gMDsgaSA8IG51bV9jcnRjczsgaSsrKSB7Cj4gKwkJcmV0ID0gZHJtX21vZGVfc2V0 Y3J0YyhkZXYsICZjcnRjX3JlcXNbaV0sIGZpbGUsIGZhbHNlKTsKPiArCQlpZiAocmV0KQo+ICsJ CQlicmVhazsKPiArCX0KPiArCj4gKwlrZnJlZSh4b2Zmc2V0cyk7Cj4gKwlrZnJlZSh5b2Zmc2V0 cyk7Cj4gKwlrZnJlZShjcnRjX3JlcXMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQ T1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfY29tbWl0X21vZGUpOwo+ICsKPiArdW5zaWdu ZWQgaW50IGRybV9jbGllbnRfZGlzcGxheV9jdXJyZW50X2ZiKHN0cnVjdCBkcm1fY2xpZW50X2Rp c3BsYXkgKmRpc3BsYXkpCj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0g ZGlzcGxheS0+Y2xpZW50Owo+ICsJaW50IHJldDsKPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjIGNy dGNfcmVxID0gewo+ICsJCS5jcnRjX2lkID0gZGlzcGxheS0+Y29ubmVjdG9yc1swXS0+Y3J0Y19p ZCwKPiArCX07Cj4gKwo+ICsJcmV0ID0gZHJtX21vZGVfZ2V0Y3J0YyhjbGllbnQtPmRldiwgJmNy dGNfcmVxLCBjbGllbnQtPmZpbGUpOwo+ICsJaWYgKHJldCkKPiArCQlyZXR1cm4gMDsKPiArCj4g KwlyZXR1cm4gY3J0Y19yZXEuZmJfaWQ7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50 X2Rpc3BsYXlfY3VycmVudF9mYik7Cj4gKwo+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X2ZsdXNo KHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksIHUzMiBmYl9pZCwKPiArCQkJICAg ICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsIHVuc2lnbmVkIGludCBudW1fY2xpcHMpCj4g K3sKPiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50ID0gZGlzcGxheS0+Y2xpZW50Owo+ ICsJc3RydWN0IGRybV9tb2RlX2ZiX2RpcnR5X2NtZCBkaXJ0eV9yZXEgPSB7Cj4gKwkJLmZiX2lk ID0gZmJfaWQsCj4gKwkJLmNsaXBzX3B0ciA9ICh1bnNpZ25lZCBsb25nKWNsaXBzLAo+ICsJCS5u dW1fY2xpcHMgPSBudW1fY2xpcHMsCj4gKwl9Owo+ICsJaW50IHJldDsKPiArCj4gKwlpZiAoZGlz cGxheS0+bm9fZmx1c2hpbmcpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJcmV0ID0gZHJtX21vZGVf ZGlydHlmYihjbGllbnQtPmRldiwgJmRpcnR5X3JlcSwgY2xpZW50LT5maWxlLCBmYWxzZSk7Cj4g KwlpZiAocmV0ID09IC1FTk9TWVMpIHsKPiArCQlyZXQgPSAwOwo+ICsJCWRpc3BsYXktPm5vX2Zs dXNoaW5nID0gdHJ1ZTsKPiArCX0KPiArCj4gKwlyZXR1cm4gcmV0Owo+ICt9Cj4gK0VYUE9SVF9T WU1CT0woZHJtX2NsaWVudF9kaXNwbGF5X2ZsdXNoKTsKPiArCj4gK2ludCBkcm1fY2xpZW50X2Rp c3BsYXlfcGFnZV9mbGlwKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksIHUzMiBm Yl9pZCwKPiArCQkJCSBib29sIGV2ZW50KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2NsaWVudF9kZXYg KmNsaWVudCA9IGRpc3BsYXktPmNsaWVudDsKPiArCXN0cnVjdCBkcm1fbW9kZV9jcnRjX3BhZ2Vf ZmxpcF90YXJnZXQgcGFnZV9mbGlwX3JlcSA9IHsKPiArCQkuY3J0Y19pZCA9IGRpc3BsYXktPmNv bm5lY3RvcnNbMF0tPmNydGNfaWQsCj4gKwkJLmZiX2lkID0gZmJfaWQsCj4gKwl9Owo+ICsKPiAr CWlmIChldmVudCkKPiArCQlwYWdlX2ZsaXBfcmVxLmZsYWdzID0gRFJNX01PREVfUEFHRV9GTElQ X0VWRU5UOwo+ICsKPiArCXJldHVybiBkcm1fbW9kZV9wYWdlX2ZsaXAoY2xpZW50LT5kZXYsICZw YWdlX2ZsaXBfcmVxLCBjbGllbnQtPmZpbGUpOwo+ICsJLyoKPiArCSAqIFRPRE86Cj4gKwkgKiBX aGVyZSBkbyB3ZSBmbHVzaCBvbiBwYWdlIGZsaXA/IFNob3VsZCB0aGUgZHJpdmVyIGhhbmRsZSB0 aGF0Pwo+ICsJICovCj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Rpc3BsYXlfcGFn ZV9mbGlwKTsKPiArCj4gKy8qKgo+ICsgKiBkcm1fY2xpZW50X2ZyYW1lYnVmZmVyX2NyZWF0ZSAt IENyZWF0ZSBhIGNsaWVudCBmcmFtZWJ1ZmZlcgo+ICsgKiBAY2xpZW50OiBEUk0gY2xpZW50Cj4g KyAqIEBtb2RlOiBEaXNwbGF5IG1vZGUgdG8gY3JlYXRlIGEgYnVmZmVyIGZvcgo+ICsgKiBAZm9y bWF0OiBCdWZmZXIgZm9ybWF0Cj4gKyAqCj4gKyAqIFRoaXMgZnVuY3Rpb24gY3JlYXRlcyBhICZk cm1fY2xpZW50X2J1ZmZlciB3aGljaCBjb25zaXN0cyBvZiBhCj4gKyAqICZkcm1fZnJhbWVidWZm ZXIgYmFja2VkIGJ5IGEgZHVtYiBidWZmZXIuIFRoZSBkdW1iIGJ1ZmZlciBpcyAmZG1hX2J1Zgo+ ICsgKiBleHBvcnRlZCB0byBhcXVpcmUgYSB2aXJ0dWFsIGFkZHJlc3Mgd2hpY2ggaXMgc3RvcmVk IGluCj4gKyAqICZkcm1fY2xpZW50X2J1ZmZlci0+dmFkZHIuCj4gKyAqIENhbGwgZHJtX2NsaWVu dF9mcmFtZWJ1ZmZlcl9kZWxldGUoKSB0byBmcmVlIHRoZSBidWZmZXIuCj4gKyAqCj4gKyAqIFJl dHVybnM6Cj4gKyAqIFBvaW50ZXIgdG8gYSBjbGllbnQgYnVmZmVyIG9yIGFuIGVycm9yIHBvaW50 ZXIgb24gZmFpbHVyZS4KPiArICovCj4gK3N0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqCj4gK2Ry bV9jbGllbnRfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50 LAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUsIHUzMiBmb3JtYXQp Cj4gK3sKPiArCXN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyOwo+ICsJaW50IHJldDsK PiArCj4gKwlidWZmZXIgPSBkcm1fY2xpZW50X2J1ZmZlcl9jcmVhdGUoY2xpZW50LCBtb2RlLT5o ZGlzcGxheSwKPiArCQkJCQkgIG1vZGUtPnZkaXNwbGF5LCBmb3JtYXQpOwo+ICsJaWYgKElTX0VS UihidWZmZXIpKQo+ICsJCXJldHVybiBidWZmZXI7Cj4gKwo+ICsJcmV0ID0gZHJtX2NsaWVudF9i dWZmZXJfYWRkZmIoYnVmZmVyLCBtb2RlKTsKPiArCWlmIChyZXQpIHsKPiArCQlkcm1fY2xpZW50 X2J1ZmZlcl9kZWxldGUoYnVmZmVyKTsKPiArCQlyZXR1cm4gRVJSX1BUUihyZXQpOwo+ICsJfQo+ ICsKPiArCXJldHVybiBidWZmZXI7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2Zy YW1lYnVmZmVyX2NyZWF0ZSk7Cj4gKwo+ICt2b2lkIGRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVs ZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKQo+ICt7Cj4gKwlkcm1fY2xpZW50 X2J1ZmZlcl9ybWZiKGJ1ZmZlcik7Cj4gKwlkcm1fY2xpZW50X2J1ZmZlcl9kZWxldGUoYnVmZmVy KTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVsZXRlKTsK PiArCj4gK3N0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqCj4gK2RybV9jbGllbnRfYnVmZmVyX2Ny ZWF0ZShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgdTMyIHdpZHRoLCB1MzIgaGVpZ2h0 LAo+ICsJCQkgdTMyIGZvcm1hdCkKPiArewo+ICsJc3RydWN0IGRybV9tb2RlX2NyZWF0ZV9kdW1i IGR1bWJfYXJncyA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9wcmltZV9oYW5kbGUgcHJpbWVfYXJn cyA9IHsgMCB9Owo+ICsJc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXI7Cj4gKwlzdHJ1 Y3QgZG1hX2J1ZiAqZG1hX2J1ZjsKPiArCXZvaWQgKnZhZGRyOwo+ICsJaW50IHJldDsKPiArCj4g KwlidWZmZXIgPSBremFsbG9jKHNpemVvZigqYnVmZmVyKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IWJ1ZmZlcikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKPiArCj4gKwlyZXQgPSBkcm1f Y2xpZW50X2dldF9maWxlKGNsaWVudCk7Cj4gKwlpZiAocmV0KQo+ICsJCWdvdG8gZXJyX2ZyZWU7 Cj4gKwo+ICsJYnVmZmVyLT5jbGllbnQgPSBjbGllbnQ7Cj4gKwlidWZmZXItPndpZHRoID0gd2lk dGg7Cj4gKwlidWZmZXItPmhlaWdodCA9IGhlaWdodDsKPiArCWJ1ZmZlci0+Zm9ybWF0ID0gZm9y bWF0Owo+ICsKPiArCWR1bWJfYXJncy53aWR0aCA9IGJ1ZmZlci0+d2lkdGg7Cj4gKwlkdW1iX2Fy Z3MuaGVpZ2h0ID0gYnVmZmVyLT5oZWlnaHQ7Cj4gKwlkdW1iX2FyZ3MuYnBwID0gZHJtX2Zvcm1h dF9wbGFuZV9jcHAoZm9ybWF0LCAwKSAqIDg7Cj4gKwlyZXQgPSBkcm1fbW9kZV9jcmVhdGVfZHVt YihjbGllbnQtPmRldiwgJmR1bWJfYXJncywgY2xpZW50LT5maWxlKTsKPiArCWlmIChyZXQpCj4g KwkJZ290byBlcnJfcHV0X2ZpbGU7Cj4gKwo+ICsJYnVmZmVyLT5oYW5kbGUgPSBkdW1iX2FyZ3Mu aGFuZGxlOwo+ICsJYnVmZmVyLT5waXRjaCA9IGR1bWJfYXJncy5waXRjaDsKPiArCWJ1ZmZlci0+ c2l6ZSA9IGR1bWJfYXJncy5zaXplOwo+ICsKPiArCXByaW1lX2FyZ3MuaGFuZGxlID0gZHVtYl9h cmdzLmhhbmRsZTsKPiArCXJldCA9IGRybV9wcmltZV9oYW5kbGVfdG9fZmQoY2xpZW50LT5kZXYs ICZwcmltZV9hcmdzLCBjbGllbnQtPmZpbGUpOwo+ICsJaWYgKHJldCkKPiArCQlnb3RvIGVycl9k ZWxldGU7Cj4gKwo+ICsJZG1hX2J1ZiA9IGRtYV9idWZfZ2V0KHByaW1lX2FyZ3MuZmQpOwo+ICsJ aWYgKElTX0VSUihkbWFfYnVmKSkgewo+ICsJCXJldCA9IFBUUl9FUlIoZG1hX2J1Zik7Cj4gKwkJ Z290byBlcnJfZGVsZXRlOwo+ICsJfQo+ICsKPiArCWJ1ZmZlci0+ZG1hX2J1ZiA9IGRtYV9idWY7 Cj4gKwo+ICsJdmFkZHIgPSBkbWFfYnVmX3ZtYXAoZG1hX2J1Zik7Cj4gKwlpZiAoIXZhZGRyKSB7 Cj4gKwkJcmV0ID0gLUVOT01FTTsKPiArCQlnb3RvIGVycl9kZWxldGU7Cj4gKwl9Cj4gKwo+ICsJ YnVmZmVyLT52YWRkciA9IHZhZGRyOwo+ICsKPiArCXJldHVybiBidWZmZXI7Cj4gKwo+ICtlcnJf ZGVsZXRlOgo+ICsJZHJtX2NsaWVudF9idWZmZXJfZGVsZXRlKGJ1ZmZlcik7Cj4gK2Vycl9wdXRf ZmlsZToKPiArCWRybV9jbGllbnRfcHV0X2ZpbGUoY2xpZW50KTsKPiArZXJyX2ZyZWU6Cj4gKwlr ZnJlZShidWZmZXIpOwo+ICsKPiArCXJldHVybiBFUlJfUFRSKHJldCk7Cj4gK30KPiArRVhQT1JU X1NZTUJPTChkcm1fY2xpZW50X2J1ZmZlcl9jcmVhdGUpOwo+ICsKPiArdm9pZCBkcm1fY2xpZW50 X2J1ZmZlcl9kZWxldGUoc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIpCj4gK3sKPiAr CWlmICghYnVmZmVyKQo+ICsJCXJldHVybjsKPiArCj4gKwlpZiAoYnVmZmVyLT52YWRkcikKPiAr CQlkbWFfYnVmX3Z1bm1hcChidWZmZXItPmRtYV9idWYsIGJ1ZmZlci0+dmFkZHIpOwo+ICsKPiAr CWlmIChidWZmZXItPmRtYV9idWYpCj4gKwkJZG1hX2J1Zl9wdXQoYnVmZmVyLT5kbWFfYnVmKTsK PiArCj4gKwlkcm1fbW9kZV9kZXN0cm95X2R1bWIoYnVmZmVyLT5jbGllbnQtPmRldiwgYnVmZmVy LT5oYW5kbGUsCj4gKwkJCSAgICAgIGJ1ZmZlci0+Y2xpZW50LT5maWxlKTsKPiArCWRybV9jbGll bnRfcHV0X2ZpbGUoYnVmZmVyLT5jbGllbnQpOwo+ICsJa2ZyZWUoYnVmZmVyKTsKPiArfQo+ICtF WFBPUlRfU1lNQk9MKGRybV9jbGllbnRfYnVmZmVyX2RlbGV0ZSk7Cj4gKwo+ICtpbnQgZHJtX2Ns aWVudF9idWZmZXJfYWRkZmIoc3RydWN0IGRybV9jbGllbnRfYnVmZmVyICpidWZmZXIsCj4gKwkJ CSAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGUpCj4gK3sKPiArCXN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50ID0gYnVmZmVyLT5jbGllbnQ7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf ZmJfY21kMiBmYl9yZXEgPSB7IH07Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2ZicywgKmZiX2lkczsK PiArCWludCBpLCByZXQ7Cj4gKwo+ICsJaWYgKGJ1ZmZlci0+bnVtX2ZicykKPiArCQlyZXR1cm4g LUVJTlZBTDsKPiArCj4gKwlpZiAobW9kZS0+aGRpc3BsYXkgPiBidWZmZXItPndpZHRoIHx8IG1v ZGUtPnZkaXNwbGF5ID4gYnVmZmVyLT5oZWlnaHQpCj4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gKwo+ ICsJbnVtX2ZicyA9IGJ1ZmZlci0+aGVpZ2h0IC8gbW9kZS0+dmRpc3BsYXk7Cj4gKwlmYl9pZHMg PSBrY2FsbG9jKG51bV9mYnMsIHNpemVvZigqZmJfaWRzKSwgR0ZQX0tFUk5FTCk7Cj4gKwlpZiAo IWZiX2lkcykKPiArCQlyZXR1cm4gLUVOT01FTTsKPiArCj4gKwlmYl9yZXEud2lkdGggPSBtb2Rl LT5oZGlzcGxheTsKPiArCWZiX3JlcS5oZWlnaHQgPSBtb2RlLT52ZGlzcGxheTsKPiArCWZiX3Jl cS5waXhlbF9mb3JtYXQgPSBidWZmZXItPmZvcm1hdDsKPiArCWZiX3JlcS5oYW5kbGVzWzBdID0g YnVmZmVyLT5oYW5kbGU7Cj4gKwlmYl9yZXEucGl0Y2hlc1swXSA9IGJ1ZmZlci0+cGl0Y2g7Cj4g Kwo+ICsJZm9yIChpID0gMDsgaSA8IG51bV9mYnM7IGkrKykgewo+ICsJCWZiX3JlcS5vZmZzZXRz WzBdID0gaSAqIG1vZGUtPnZkaXNwbGF5ICogYnVmZmVyLT5waXRjaDsKPiArCQlyZXQgPSBkcm1f bW9kZV9hZGRmYjIoY2xpZW50LT5kZXYsICZmYl9yZXEsIGNsaWVudC0+ZmlsZSwKPiArCQkJCSAg ICAgIGNsaWVudC0+ZnVuY3MtPm5hbWUpOwo+ICsJCWlmIChyZXQpCj4gKwkJCWdvdG8gZXJyX3Jl bW92ZTsKPiArCQlmYl9pZHNbaV0gPSBmYl9yZXEuZmJfaWQ7Cj4gKwl9Cj4gKwo+ICsJYnVmZmVy LT5mYl9pZHMgPSBmYl9pZHM7Cj4gKwlidWZmZXItPm51bV9mYnMgPSBudW1fZmJzOwo+ICsKPiAr CXJldHVybiAwOwo+ICsKPiArZXJyX3JlbW92ZToKPiArCWZvciAoaS0tOyBpID49IDA7IGktLSkK PiArCQlkcm1fbW9kZV9ybWZiKGNsaWVudC0+ZGV2LCBmYl9pZHNbaV0sIGNsaWVudC0+ZmlsZSk7 Cj4gKwlrZnJlZShmYl9pZHMpOwo+ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArRVhQT1JUX1NZ TUJPTChkcm1fY2xpZW50X2J1ZmZlcl9hZGRmYik7Cj4gKwo+ICtpbnQgZHJtX2NsaWVudF9idWZm ZXJfcm1mYihzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgKmJ1ZmZlcikKPiArewo+ICsJdW5zaWdu ZWQgaW50IGk7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCWlmICghYnVmZmVyIHx8ICFidWZmZXItPm51 bV9mYnMpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJZm9yIChpID0gMDsgaSA8IGJ1ZmZlci0+bnVt X2ZiczsgaSsrKSB7Cj4gKwkJcmV0ID0gZHJtX21vZGVfcm1mYihidWZmZXItPmNsaWVudC0+ZGV2 LCBidWZmZXItPmZiX2lkc1tpXSwKPiArCQkJCSAgICBidWZmZXItPmNsaWVudC0+ZmlsZSk7Cj4g KwkJaWYgKHJldCkKPiArCQkJRFJNX0RFVl9FUlJPUihidWZmZXItPmNsaWVudC0+ZGV2LT5kZXYs Cj4gKwkJCQkgICAgICAiRXJyb3IgcmVtb3ZpbmcgRkI6JXUgKCVkKVxuIiwKPiArCQkJCSAgICAg IGJ1ZmZlci0+ZmJfaWRzW2ldLCByZXQpOwo+ICsJfQo+ICsKPiArCWtmcmVlKGJ1ZmZlci0+ZmJf aWRzKTsKPiArCWJ1ZmZlci0+ZmJfaWRzID0gTlVMTDsKPiArCWJ1ZmZlci0+bnVtX2ZicyA9IDA7 Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fY2xpZW50X2J1ZmZl cl9ybWZiKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHJ2LmMKPiBpbmRleCBmODY5ZGUxODU5ODYuLmRiMTYxMzM3ZDg3YyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2RybV9kcnYuYwo+IEBAIC0zMyw2ICszMyw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9t b3VudC5oPgo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICAKPiArI2luY2x1ZGUgPGRybS9k cm1fY2xpZW50Lmg+Cj4gICNpbmNsdWRlIDxkcm0vZHJtX2Rydi5oPgo+ICAjaW5jbHVkZSA8ZHJt L2RybVAuaD4KPiAgCj4gQEAgLTQ2Myw2ICs0NjQsNyBAQCBpbnQgZHJtX2Rldl9pbml0KHN0cnVj dCBkcm1fZGV2aWNlICpkZXYsCj4gIAlkZXYtPmRyaXZlciA9IGRyaXZlcjsKPiAgCj4gIAlJTklU X0xJU1RfSEVBRCgmZGV2LT5maWxlbGlzdCk7Cj4gKwlJTklUX0xJU1RfSEVBRCgmZGV2LT5maWxl bGlzdF9pbnRlcm5hbCk7Cj4gIAlJTklUX0xJU1RfSEVBRCgmZGV2LT5jdHhsaXN0KTsKPiAgCUlO SVRfTElTVF9IRUFEKCZkZXYtPnZtYWxpc3QpOwo+ICAJSU5JVF9MSVNUX0hFQUQoJmRldi0+bWFw bGlzdCk7Cj4gQEAgLTc4Nyw2ICs3ODksOCBAQCBpbnQgZHJtX2Rldl9yZWdpc3RlcihzdHJ1Y3Qg ZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWdzKQo+ICAJCSBkZXYtPmRldiA/IGRl dl9uYW1lKGRldi0+ZGV2KSA6ICJ2aXJ0dWFsIGRldmljZSIsCj4gIAkJIGRldi0+cHJpbWFyeS0+ aW5kZXgpOwo+ICAKPiArCWRybV9jbGllbnRfZGV2X3JlZ2lzdGVyKGRldik7Cj4gKwo+ICAJZ290 byBvdXRfdW5sb2NrOwo+ICAKPiAgZXJyX21pbm9yczoKPiBAQCAtODM5LDYgKzg0Myw4IEBAIHZv aWQgZHJtX2Rldl91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4gIAlkcm1fbWlu b3JfdW5yZWdpc3RlcihkZXYsIERSTV9NSU5PUl9QUklNQVJZKTsKPiAgCWRybV9taW5vcl91bnJl Z2lzdGVyKGRldiwgRFJNX01JTk9SX1JFTkRFUik7Cj4gIAlkcm1fbWlub3JfdW5yZWdpc3Rlcihk ZXYsIERSTV9NSU5PUl9DT05UUk9MKTsKPiArCj4gKwlkcm1fY2xpZW50X2Rldl91bnJlZ2lzdGVy KGRldik7Cj4gIH0KPiAgRVhQT1JUX1NZTUJPTChkcm1fZGV2X3VucmVnaXN0ZXIpOwo+ICAKPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2RybV9maWxlLmMgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX2ZpbGUuYwo+IGluZGV4IDU1NTA1Mzc4ZGY0Ny4uYmNjNjg4ZTU4Nzc2IDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZmlsZS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9maWxlLmMKPiBAQCAtMzUsNiArMzUsNyBAQAo+ICAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ ICAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gIAo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGll bnQuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fZmlsZS5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybVAu aD4KPiAgCj4gQEAgLTQ0Myw2ICs0NDQsOCBAQCB2b2lkIGRybV9sYXN0Y2xvc2Uoc3RydWN0IGRy bV9kZXZpY2UgKiBkZXYpCj4gIAo+ICAJaWYgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBE UklWRVJfTEVHQUNZKSkKPiAgCQlkcm1fbGVnYWN5X2Rldl9yZWluaXQoZGV2KTsKPiArCj4gKwlk cm1fY2xpZW50X2Rldl9sYXN0Y2xvc2UoZGV2KTsKPiAgfQo+ICAKPiAgLyoqCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9kcm0v ZHJtX3Byb2JlX2hlbHBlci5jCj4gaW5kZXggMmQxNjQzYmRhZTc4Li41ZDJhNmM2NzE3ZjUgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9wcm9iZV9oZWxwZXIuYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9kcm1fcHJvYmVfaGVscGVyLmMKPiBAQCAtMzMsNiArMzMsNyBAQAo+ICAj aW5jbHVkZSA8bGludXgvbW9kdWxlcGFyYW0uaD4KPiAgCj4gICNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICsjaW5jbHVkZSA8ZHJtL2RybV9jbGllbnQuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mb3VyY2MuaD4KPiAgI2luY2x1ZGUgPGRybS9kcm1f Y3J0Y19oZWxwZXIuaD4KPiBAQCAtNTYzLDYgKzU2NCw4IEBAIHZvaWQgZHJtX2ttc19oZWxwZXJf aG90cGx1Z19ldmVudChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ICAJZHJtX3N5c2ZzX2hvdHBs dWdfZXZlbnQoZGV2KTsKPiAgCWlmIChkZXYtPm1vZGVfY29uZmlnLmZ1bmNzLT5vdXRwdXRfcG9s bF9jaGFuZ2VkKQo+ICAJCWRldi0+bW9kZV9jb25maWcuZnVuY3MtPm91dHB1dF9wb2xsX2NoYW5n ZWQoZGV2KTsKPiArCj4gKwlkcm1fY2xpZW50X2Rldl9ob3RwbHVnKGRldik7Cj4gIH0KPiAgRVhQ T1JUX1NZTUJPTChkcm1fa21zX2hlbHBlcl9ob3RwbHVnX2V2ZW50KTsKPiAgCj4gZGlmZiAtLWdp dCBhL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaCBiL2luY2x1ZGUvZHJtL2RybV9jbGllbnQuaAo+ IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi44OGY2Zjg3OTE5YzUK PiAtLS0gL2Rldi9udWxsCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2NsaWVudC5oCj4gQEAgLTAs MCArMSwxOTIgQEAKPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiAr Cj4gKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgo+ICsKPiArc3RydWN0IGRtYV9idWY7Cj4gK3N0 cnVjdCBkcm1fY2xpcF9yZWN0Owo+ICtzdHJ1Y3QgZHJtX2RldmljZTsKPiArc3RydWN0IGRybV9m aWxlOwo+ICtzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm87Cj4gKwo+ICtzdHJ1Y3QgZHJtX2NsaWVu dF9kZXY7Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV9jbGllbnRfZnVuY3MgLSBEUk0gY2xp ZW50ICBjYWxsYmFja3MKPiArICovCj4gK3N0cnVjdCBkcm1fY2xpZW50X2Z1bmNzIHsKPiArCS8q Kgo+ICsJICogQG5hbWU6Cj4gKwkgKgo+ICsJICogTmFtZSBvZiB0aGUgY2xpZW50Lgo+ICsJICov Cj4gKwljb25zdCBjaGFyICpuYW1lOwo+ICsKPiArCS8qKgo+ICsJICogQG5ldzoKPiArCSAqCj4g KwkgKiBDYWxsZWQgd2hlbiBhIGNsaWVudCBvciBhICZkcm1fZGV2aWNlIGlzIHJlZ2lzdGVyZWQu Cj4gKwkgKiBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbnl0aGluZyBidXQgemVybywgdGhlbiB0 aGlzIGNsaWVudCBpbnN0YW5jZQo+ICsJICogaXMgZHJvcHBlZC4KPiArCSAqCj4gKwkgKiBUaGlz IGNhbGxiYWNrIGlzIG1hbmRhdG9yeS4KPiArCSAqLwo+ICsJaW50ICgqbmV3KShzdHJ1Y3QgZHJt X2NsaWVudF9kZXYgKmNsaWVudCk7Cj4gKwo+ICsJLyoqCj4gKwkgKiBAcmVtb3ZlOgo+ICsJICoK PiArCSAqIENhbGxlZCB3aGVuIGEgJmRybV9kZXZpY2UgaXMgdW5yZWdpc3RlcmVkIG9yIHRoZSBj bGllbnQgaXMKPiArCSAqIHVucmVnaXN0ZXJlZC4gSWYgemVybyBpcyByZXR1cm5lZCBkcm1fY2xp ZW50X2ZyZWUoKSBpcyBjYWxsZWQKPiArCSAqIGF1dG9tYXRpY2FsbHkuIElmIHRoZSBjbGllbnQg Y2FuJ3QgZHJvcCBpdCdzIHJlc291cmNlcyBpdCBzaG91bGQKPiArCSAqIHJldHVybiBub24temVy byBhbmQgY2FsbCBkcm1fY2xpZW50X2ZyZWUoKSBsYXRlci4KPiArCSAqCj4gKwkgKiBUaGlzIGNh bGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwlpbnQgKCpyZW1vdmUpKHN0cnVjdCBkcm1f Y2xpZW50X2RldiAqY2xpZW50KTsKPiArCj4gKwkvKioKPiArCSAqIEBsYXN0Y2xvc2U6Cj4gKwkg Kgo+ICsJICogQ2FsbGVkIG9uIGRybV9sYXN0Y2xvc2UoKS4gVGhlIGZpcnN0IGNsaWVudCBpbnN0 YW5jZSBpbiB0aGUgbGlzdAo+ICsJICogdGhhdCByZXR1cm5zIHplcm8gZ2V0cyB0aGUgcHJpdmls ZWdlIHRvIHJlc3RvcmUgYW5kIG5vIG1vcmUgY2xpZW50cwo+ICsJICogYXJlIGNhbGxlZC4KPiAr CSAqCj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLgo+ICsJICovCj4gKwlpbnQgKCps YXN0Y2xvc2UpKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiArCj4gKwkvKioKPiAr CSAqIEBob3RwbHVnOgo+ICsJICoKPiArCSAqIENhbGxlZCBvbiBkcm1fa21zX2hlbHBlcl9ob3Rw bHVnX2V2ZW50KCkuCj4gKwkgKgo+ICsJICogVGhpcyBjYWxsYmFjayBpcyBvcHRpb25hbC4KPiAr CSAqLwo+ICsJaW50ICgqaG90cGx1Zykoc3RydWN0IGRybV9jbGllbnRfZGV2ICpjbGllbnQpOwo+ ICsKPiArLy8gVE9ETwo+ICsvLwl2b2lkICgqc3VzcGVuZCkoc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQpOwo+ICsvLwl2b2lkICgqcmVzdW1lKShzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNs aWVudCk7Cj4gK307Cj4gKwo+ICsvKioKPiArICogc3RydWN0IGRybV9jbGllbnRfZGV2IC0gRFJN IGNsaWVudCBpbnN0YW5jZQo+ICsgKi8KPiArc3RydWN0IGRybV9jbGllbnRfZGV2IHsKPiArCXN0 cnVjdCBsaXN0X2hlYWQgbGlzdDsKPiArCXN0cnVjdCBkcm1fZGV2aWNlICpkZXY7Cj4gKwljb25z dCBzdHJ1Y3QgZHJtX2NsaWVudF9mdW5jcyAqZnVuY3M7Cj4gKwlzdHJ1Y3QgbXV0ZXggbG9jazsK PiArCXN0cnVjdCBkcm1fZmlsZSAqZmlsZTsKPiArCXVuc2lnbmVkIGludCBmaWxlX3JlZl9jb3Vu dDsKPiArCXUzMiAqY3J0Y3M7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOwo+ICsJdTMyIG1p bl93aWR0aDsKPiArCXUzMiBtYXhfd2lkdGg7Cj4gKwl1MzIgbWluX2hlaWdodDsKPiArCXUzMiBt YXhfaGVpZ2h0Owo+ICsJdm9pZCAqcHJpdmF0ZTsKPiArfTsKPiArCj4gK3ZvaWQgZHJtX2NsaWVu dF9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50KTsKPiAraW50IGRybV9jbGllbnRf cmVnaXN0ZXIoY29uc3Qgc3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1bmNzKTsKPiArdm9pZCBk cm1fY2xpZW50X3VucmVnaXN0ZXIoY29uc3Qgc3RydWN0IGRybV9jbGllbnRfZnVuY3MgKmZ1bmNz KTsKPiArCj4gK3ZvaWQgZHJtX2NsaWVudF9kZXZfcmVnaXN0ZXIoc3RydWN0IGRybV9kZXZpY2Ug KmRldik7Cj4gK3ZvaWQgZHJtX2NsaWVudF9kZXZfdW5yZWdpc3RlcihzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiArdm9pZCBkcm1fY2xpZW50X2Rldl9ob3RwbHVnKHN0cnVjdCBkcm1fZGV2aWNl ICpkZXYpOwo+ICt2b2lkIGRybV9jbGllbnRfZGV2X2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPiArCj4gK2ludCBkcm1fY2xpZW50X2dldF9maWxlKHN0cnVjdCBkcm1fY2xpZW50 X2RldiAqY2xpZW50KTsKPiArdm9pZCBkcm1fY2xpZW50X3B1dF9maWxlKHN0cnVjdCBkcm1fY2xp ZW50X2RldiAqY2xpZW50KTsKPiArc3RydWN0IGRybV9ldmVudCAqCj4gK2RybV9jbGllbnRfcmVh ZF9ldmVudChzdHJ1Y3QgZHJtX2NsaWVudF9kZXYgKmNsaWVudCwgYm9vbCBibG9jayk7Cj4gKwo+ ICtzdHJ1Y3QgZHJtX2NsaWVudF9jb25uZWN0b3Igewo+ICsJdW5zaWduZWQgaW50IGNvbm5faWQ7 Cj4gKwl1bnNpZ25lZCBpbnQgc3RhdHVzOwo+ICsJdW5zaWduZWQgaW50IGNydGNfaWQ7Cj4gKwlz dHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1vZGVzOwo+ICsJdW5zaWduZWQgaW50IG51bV9tb2Rl czsKPiArCWJvb2wgaGFzX3RpbGU7Cj4gKwlpbnQgdGlsZV9ncm91cDsKPiArCXU4IHRpbGVfaF9s b2MsIHRpbGVfdl9sb2M7Cj4gK307Cj4gKwo+ICtzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5IHsK PiArCXN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50Owo+ICsKPiArCXN0cnVjdCBkcm1fY2xp ZW50X2Nvbm5lY3RvciAqKmNvbm5lY3RvcnM7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2Nvbm5lY3Rv cnM7Cj4gKwo+ICsJc3RydWN0IG11dGV4IG1vZGVzX2xvY2s7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf bW9kZWluZm8gKm1vZGVzOwo+ICsJdW5zaWduZWQgaW50IG51bV9tb2RlczsKPiArCj4gKwlib29s IGNsb25lZDsKPiArCWJvb2wgbm9fZmx1c2hpbmc7Cj4gK307Cj4gKwo+ICt2b2lkIGRybV9jbGll bnRfZGlzcGxheV9mcmVlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ICtz dHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICoKPiArZHJtX2NsaWVudF9kaXNwbGF5X2dldF9maXJz dF9lbmFibGVkKHN0cnVjdCBkcm1fY2xpZW50X2RldiAqY2xpZW50LCBib29sIHN0cmljdCk7Cj4g Kwo+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3VwZGF0ZV9tb2RlcyhzdHJ1Y3QgZHJtX2NsaWVu dF9kaXNwbGF5ICpkaXNwbGF5LAo+ICsJCQkJICAgIGJvb2wgKm1vZGVfY2hhbmdlZCk7Cj4gKwo+ ICtzdGF0aWMgaW5saW5lIGJvb2wKPiArZHJtX2NsaWVudF9kaXNwbGF5X2lzX3RpbGVkKHN0cnVj dCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpCj4gK3sKPiArCXJldHVybiAhZGlzcGxheS0+ Y2xvbmVkICYmIGRpc3BsYXktPm51bV9jb25uZWN0b3JzID4gMTsKPiArfQo+ICsKPiAraW50IGRy bV9jbGllbnRfZGlzcGxheV9kcG1zKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXks IGludCBtb2RlKTsKPiAraW50IGRybV9jbGllbnRfZGlzcGxheV93YWl0X3ZibGFuayhzdHJ1Y3Qg ZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KTsKPiArCj4gK3N0cnVjdCBkcm1fbW9kZV9tb2Rl aW5mbyAqCj4gK2RybV9jbGllbnRfZGlzcGxheV9maXJzdF9tb2RlKHN0cnVjdCBkcm1fY2xpZW50 X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ICtzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKgo+ICtkcm1f Y2xpZW50X2Rpc3BsYXlfbmV4dF9tb2RlKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3Bs YXksCj4gKwkJCSAgICAgc3RydWN0IGRybV9tb2RlX21vZGVpbmZvICptb2RlKTsKPiArCj4gKyNk ZWZpbmUgZHJtX2NsaWVudF9kaXNwbGF5X2Zvcl9lYWNoX21vZGUoZGlzcGxheSwgbW9kZSkgXAo+ ICsJZm9yIChtb2RlID0gZHJtX2NsaWVudF9kaXNwbGF5X2ZpcnN0X21vZGUoZGlzcGxheSk7IG1v ZGU7IFwKPiArCSAgICAgbW9kZSA9IGRybV9jbGllbnRfZGlzcGxheV9uZXh0X21vZGUoZGlzcGxh eSwgbW9kZSkpCj4gKwo+ICt1bnNpZ25lZCBpbnQKPiArZHJtX2NsaWVudF9kaXNwbGF5X3ByZWZl cnJlZF9kZXB0aChzdHJ1Y3QgZHJtX2NsaWVudF9kaXNwbGF5ICpkaXNwbGF5KTsKPiArCj4gK2lu dCBkcm1fY2xpZW50X2Rpc3BsYXlfY29tbWl0X21vZGUoc3RydWN0IGRybV9jbGllbnRfZGlzcGxh eSAqZGlzcGxheSwKPiArCQkJCSAgIHUzMiBmYl9pZCwgc3RydWN0IGRybV9tb2RlX21vZGVpbmZv ICptb2RlKTsKPiArdW5zaWduZWQgaW50IGRybV9jbGllbnRfZGlzcGxheV9jdXJyZW50X2ZiKHN0 cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXkpOwo+ICtpbnQgZHJtX2NsaWVudF9kaXNw bGF5X2ZsdXNoKHN0cnVjdCBkcm1fY2xpZW50X2Rpc3BsYXkgKmRpc3BsYXksIHUzMiBmYl9pZCwK PiArCQkJICAgICBzdHJ1Y3QgZHJtX2NsaXBfcmVjdCAqY2xpcHMsIHVuc2lnbmVkIGludCBudW1f Y2xpcHMpOwo+ICtpbnQgZHJtX2NsaWVudF9kaXNwbGF5X3BhZ2VfZmxpcChzdHJ1Y3QgZHJtX2Ns aWVudF9kaXNwbGF5ICpkaXNwbGF5LCB1MzIgZmJfaWQsCj4gKwkJCQkgYm9vbCBldmVudCk7Cj4g Kwo+ICtzdHJ1Y3QgZHJtX2NsaWVudF9idWZmZXIgewo+ICsJc3RydWN0IGRybV9jbGllbnRfZGV2 ICpjbGllbnQ7Cj4gKwl1MzIgd2lkdGg7Cj4gKwl1MzIgaGVpZ2h0Owo+ICsJdTMyIGZvcm1hdDsK PiArCXUzMiBoYW5kbGU7Cj4gKwl1MzIgcGl0Y2g7Cj4gKwl1NjQgc2l6ZTsKPiArCXN0cnVjdCBk bWFfYnVmICpkbWFfYnVmOwo+ICsJdm9pZCAqdmFkZHI7Cj4gKwo+ICsJdW5zaWduZWQgaW50ICpm Yl9pZHM7Cj4gKwl1bnNpZ25lZCBpbnQgbnVtX2ZiczsKPiArfTsKPiArCj4gK3N0cnVjdCBkcm1f Y2xpZW50X2J1ZmZlciAqCj4gK2RybV9jbGllbnRfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBk cm1fY2xpZW50X2RldiAqY2xpZW50LAo+ICsJCQkgICAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWlu Zm8gKm1vZGUsIHUzMiBmb3JtYXQpOwo+ICt2b2lkIGRybV9jbGllbnRfZnJhbWVidWZmZXJfZGVs ZXRlKHN0cnVjdCBkcm1fY2xpZW50X2J1ZmZlciAqYnVmZmVyKTsKPiArc3RydWN0IGRybV9jbGll bnRfYnVmZmVyICoKPiArZHJtX2NsaWVudF9idWZmZXJfY3JlYXRlKHN0cnVjdCBkcm1fY2xpZW50 X2RldiAqY2xpZW50LCB1MzIgd2lkdGgsIHUzMiBoZWlnaHQsCj4gKwkJCSB1MzIgZm9ybWF0KTsK PiArdm9pZCBkcm1fY2xpZW50X2J1ZmZlcl9kZWxldGUoc3RydWN0IGRybV9jbGllbnRfYnVmZmVy ICpidWZmZXIpOwo+ICtpbnQgZHJtX2NsaWVudF9idWZmZXJfYWRkZmIoc3RydWN0IGRybV9jbGll bnRfYnVmZmVyICpidWZmZXIsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfbW9kZWluZm8gKm1v ZGUpOwo+ICtpbnQgZHJtX2NsaWVudF9idWZmZXJfcm1mYihzdHJ1Y3QgZHJtX2NsaWVudF9idWZm ZXIgKmJ1ZmZlcik7Cj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaCBiL2lu Y2x1ZGUvZHJtL2RybV9kZXZpY2UuaAo+IGluZGV4IDdjNGZhMzJmM2ZjNi4uMzJkZmVkM2Q1YTg2 IDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9kZXZpY2UuaAo+ICsrKyBiL2luY2x1ZGUv ZHJtL2RybV9kZXZpY2UuaAo+IEBAIC02Nyw2ICs2Nyw3IEBAIHN0cnVjdCBkcm1fZGV2aWNlIHsK PiAgCj4gIAlzdHJ1Y3QgbXV0ZXggZmlsZWxpc3RfbXV0ZXg7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFk IGZpbGVsaXN0Owo+ICsJc3RydWN0IGxpc3RfaGVhZCBmaWxlbGlzdF9pbnRlcm5hbDsKPiAgCj4g IAkvKiogXG5hbWUgTWVtb3J5IG1hbmFnZW1lbnQgKi8KPiAgCS8qQHsgKi8KPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaCBiL2luY2x1ZGUvZHJtL2RybV9maWxlLmgKPiBpbmRl eCA1MTc2YzM3OTc2ODAuLjM5YWY4YTRiZTdiMyAxMDA2NDQKPiAtLS0gYS9pbmNsdWRlL2RybS9k cm1fZmlsZS5oCj4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2ZpbGUuaAo+IEBAIC0yNDgsNiArMjQ4 LDEzIEBAIHN0cnVjdCBkcm1fZmlsZSB7Cj4gIAkgKi8KPiAgCXZvaWQgKmRyaXZlcl9wcml2Owo+ ICAKPiArCS8qKgo+ICsJICogQHVzZXJfcHJpdjoKPiArCSAqCj4gKwkgKiBPcHRpb25hbCBwb2lu dGVyIGZvciB1c2VyIHByaXZhdGUgZGF0YS4gVXNlZnVsIGZvciBpbi1rZXJuZWwgY2xpZW50cy4K PiArCSAqLwo+ICsJdm9pZCAqdXNlcl9wcml2Owo+ICsKPiAgCS8qKgo+ICAJICogQGZiczoKPiAg CSAqCj4gLS0gCj4gMi4xNS4xCj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVl ciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==