From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: Re: [PATCH v4 14/27] ARM: vGICv3: introduce basic ITS emulation bits Date: Tue, 4 Apr 2017 14:35:46 +0100 Message-ID: <0b75d4fb-78a3-ee6e-b4a6-709174b3fca7@arm.com> References: <20170403202829.7278-1-andre.przywara@arm.com> <20170403202829.7278-15-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cvOci-0008OL-Cp for xen-devel@lists.xenproject.org; Tue, 04 Apr 2017 13:35:52 +0000 In-Reply-To: <20170403202829.7278-15-andre.przywara@arm.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Andre Przywara , Stefano Stabellini Cc: xen-devel@lists.xenproject.org List-Id: xen-devel@lists.xenproject.org SGkgQW5kcmUsCgpPbiAwMy8wNC8xNyAyMToyOCwgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gQ3Jl YXRlIGEgbmV3IGZpbGUgdG8gaG9sZCB0aGUgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBJVFMgd2lk Z2V0Lgo+IEZvciBub3cgd2UgZW11bGF0ZSB0aGUgbWVtb3J5IG1hcHBlZCBJVFMgcmVnaXN0ZXJz IGFuZCBwcm92aWRlIGEgc3R1Ygo+IHRvIGludHJvZHVjZSB0aGUgSVRTIGNvbW1hbmQgaGFuZGxp bmcgZnJhbWV3b3JrIChidXQgd2l0aG91dCBhY3R1YWxseQo+IGVtdWxhdGluZyBhbnkgY29tbWFu ZHMgYXQgdGhpcyB0aW1lKS4KClRoZSBJVFMgaXMgYSBjb21wbGV4IHBpZWNlIHNvIEkgdGhpbmsg aXQgd291bGQgYmUgZ29vZCB0byBkZXNjcmliZSBtb3JlIAppbiB0aGUgY29tbWl0IG1lc3NhZ2Ug aG93IHRoaXMgd2lsbCB3b3JrLiBBbHNvIGEgZG9jdW1lbnRhdGlvbiBpbiB0aGUgCnRyZWUgd291 bGQgYmUgdmVyeSBnb29kIHRvIGhlbHAgdW5kZXJzdGFuZGluZyB0aGUgY29kZS4KCj4KPiBTaWdu ZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdhcmFAYXJtLmNvbT4KPiAtLS0K PiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgIHwgICAxICsKPiAgeGVuL2FyY2gv YXJtL3ZnaWMtdjMtaXRzLmMgICAgICAgIHwgNTQ3ICsrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrCj4gIHhlbi9hcmNoL2FybS92Z2ljLXYzLmMgICAgICAgICAgICB8ICAgOSAt Cj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2RlZnMuaCB8ICAxOSArKwo+ICB4ZW4vaW5j bHVkZS9hc20tYXJtL2dpY192M19pdHMuaCAgfCAgIDIgKwo+ICA1IGZpbGVzIGNoYW5nZWQsIDU2 OSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVu L2FyY2gvYXJtL3ZnaWMtdjMtaXRzLmMKPgo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vTWFr ZWZpbGUgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBpbmRleCA2YmU4NWFiLi40OWUxZmIyIDEw MDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS9NYWtlZmlsZQo+ICsrKyBiL3hlbi9hcmNoL2FybS9N YWtlZmlsZQo+IEBAIC00Nyw2ICs0Nyw3IEBAIG9iai15ICs9IHRyYXBzLm8KPiAgb2JqLXkgKz0g dmdpYy5vCj4gIG9iai15ICs9IHZnaWMtdjIubwo+ICBvYmotJChDT05GSUdfSEFTX0dJQ1YzKSAr PSB2Z2ljLXYzLm8KPiArb2JqLSQoQ09ORklHX0hBU19JVFMpICs9IHZnaWMtdjMtaXRzLm8KPiAg b2JqLXkgKz0gdm1fZXZlbnQubwo+ICBvYmoteSArPSB2dGltZXIubwo+ICBvYmoteSArPSB2cHNj aS5vCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS92Z2ljLXYzLWl0cy5jIGIveGVuL2FyY2gv YXJtL3ZnaWMtdjMtaXRzLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAu LmZkM2I5YTEKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIveGVuL2FyY2gvYXJtL3ZnaWMtdjMtaXRz LmMKPiBAQCAtMCwwICsxLDU0NyBAQAo+ICsvKgo+ICsgKiB4ZW4vYXJjaC9hcm0vdmdpYy12My1p dHMuYwo+ICsgKgo+ICsgKiBBUk0gSW50ZXJydXB0IFRyYW5zbGF0aW9uIFNlcnZpY2UgKElUUykg ZW11bGF0aW9uCj4gKyAqCj4gKyAqIEFuZHJlIFByenl3YXJhIDxhbmRyZS5wcnp5d2FyYUBhcm0u Y29tPgo+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTYsMjAxNyBBUk0gTHRkLgo+ICsgKgo+ICsgKiBU aGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyB1bmRlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuCj4gKyAqCj4gKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAo+ICsgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvciBtb3JlIGRldGFpbHMuCj4gKyAqCj4gKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCj4gKyAqIGFsb25nIHdpdGgg dGhpcyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4u Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHhlbi9iaXRvcHMuaD4KPiArI2luY2x1ZGUgPHhlbi9j b25maWcuaD4KPiArI2luY2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgo+ICsjaW5jbHVkZSA8eGVu L2xpYi5oPgo+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPiArI2luY2x1ZGUgPHhlbi9zb2Z0aXJx Lmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaXJxLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KPiAr I2luY2x1ZGUgPHhlbi9zaXplcy5oPgo+ICsjaW5jbHVkZSA8YXNtL2N1cnJlbnQuaD4KPiArI2lu Y2x1ZGUgPGFzbS9tbWlvLmg+Cj4gKyNpbmNsdWRlIDxhc20vZ2ljX3YzX2RlZnMuaD4KPiArI2lu Y2x1ZGUgPGFzbS9naWNfdjNfaXRzLmg+Cj4gKyNpbmNsdWRlIDxhc20vdmdpYy5oPgo+ICsjaW5j bHVkZSA8YXNtL3ZnaWMtZW11bC5oPgo+ICsKPiArLyogRGF0YSBzdHJ1Y3R1cmUgdG8gZGVzY3Jp YmUgYSB2aXJ0dWFsIElUUyAqLwo+ICsjZGVmaW5lIFZJUlRfSVRTX0VOQUJMRUQgICAgICAgIDAK PiArI2RlZmluZSBWSVJUX0lUU19DT0xMX1ZBTElEICAgICAxCj4gKyNkZWZpbmUgVklSVF9JVFNf REVWX1ZBTElEICAgICAgMgo+ICsjZGVmaW5lIFZJUlRfSVRTX0NNREJVRl9WQUxJRCAgIDMKPiAr c3RydWN0IHZpcnRfaXRzIHsKPiArICAgIHN0cnVjdCBkb21haW4gKmQ7Cj4gKyAgICBzcGlubG9j a190IHZjbWRfbG9jazsgICAgICAgLyogUHJvdGVjdHMgdGhlIHZpcnR1YWwgY29tbWFuZCBidWZm ZXIuICovCj4gKyAgICB1aW50NjRfdCBjYmFzZXI7Cj4gKyAgICB1aW50NjRfdCBjd3JpdGVyOwo+ ICsgICAgdWludDY0X3QgY3JlYWRyOwo+ICsgICAgc3BpbmxvY2tfdCBpdHNfbG9jazsgICAgICAg IC8qIFByb3RlY3RzIHRoZSBjb2xsZWN0aW9uIGFuZCBkZXZpY2UgdGFibGVzLiAqLwo+ICsgICAg dWludDY0X3QgYmFzZXJfZGV2LCBiYXNlcl9jb2xsOwoKV2VsbCwgeW91IHJlbmFtZWQgdGhlIGJh c2VyezAsMX0gdG8gYSBtb3JlIGFjY3VyYXRlIG5hbWUuIEJ1dCBub3csIHlvdSAKYXJlIG1pc3Np bmcgZG9jdW1lbnQgZXhwbGFpbmluZyB3aGljaCBvbmUgaXMgQkFTRVIwIGFuZCBCQVNFUjEuCgo+ ICsgICAgdW5zaWduZWQgaW50IG1heF9jb2xsZWN0aW9uczsKPiArICAgIHVuc2lnbmVkIGludCBt YXhfZGV2aWNlczsKPiArICAgIHVuc2lnbmVkIGludCBkZXZpZF9iaXRzOwo+ICsgICAgdW5zaWdu ZWQgaW50IGludGlkX2JpdHM7Cj4gKyAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwo+ICt9Owo+ICsK PiArLyoKPiArICogQW4gSW50ZXJydXB0IFRyYW5zbGF0aW9uIFRhYmxlIEVudHJ5OiB0aGlzIGlz IGluZGV4ZWQgYnkgYQo+ICsgKiBEZXZpY2VJRC9FdmVudElEIHBhaXIgYW5kIGlzIGxvY2F0ZWQg aW4gZ3Vlc3QgbWVtb3J5Lgo+ICsgKi8KPiArc3RydWN0IHZpdHNfaXR0ZQo+ICt7Cj4gKyAgICB1 aW50MzJfdCB2bHBpOwo+ICsgICAgdWludDE2X3QgY29sbGVjdGlvbjsKPiArICAgIHVpbnQxNl90 IHBhZDsKPiArfTsKPiArCj4gK3N0YXRpYyBib29sIGl0c19pc19lbmFibGVkKHN0cnVjdCB2aXJ0 X2l0cyAqaXRzKQo+ICt7Cj4gKyAgICByZXR1cm4gdGVzdF9iaXQoVklSVF9JVFNfRU5BQkxFRCwg Jml0cy0+ZmxhZ3MpOwo+ICt9Cj4gKwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioKPiArICogRnVuY3Rpb25zIHRoYXQgaGFuZGxlIElUUyBjb21tYW5kcyAqCj4gKyAq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4gK3N0YXRpYyB1aW50 NjRfdCBpdHNfY21kX21hc2tfZmllbGQodWludDY0X3QgKml0c19jbWQsIHVuc2lnbmVkIGludCB3 b3JkLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBz aGlmdCwgdW5zaWduZWQgaW50IHNpemUpCj4gK3sKPiArICAgIHJldHVybiAobGU2NF90b19jcHUo aXRzX2NtZFt3b3JkXSkgPj4gc2hpZnQpICYgKEJJVChzaXplKSAtIDEpOwo+ICt9Cj4gKwo+ICsj ZGVmaW5lIGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kKSAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxk KGNtZCwgMCwgIDAsICA4KQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X2RldmljZWlkKGNtZCkgICAg ICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMCwgMzIsIDMyKQo+ICsjZGVmaW5lIGl0c19jbWRf Z2V0X3NpemUoY21kKSAgICAgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMSwgIDAsICA1 KQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X2lkKGNtZCkgICAgICAgICAgICAgaXRzX2NtZF9tYXNr X2ZpZWxkKGNtZCwgMSwgIDAsIDMyKQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X3BoeXNpY2FsX2lk KGNtZCkgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMSwgMzIsIDMyKQo+ICsjZGVmaW5lIGl0 c19jbWRfZ2V0X2NvbGxlY3Rpb24oY21kKSAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwg IDAsIDE2KQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X3RhcmdldF9hZGRyKGNtZCkgICAgaXRzX2Nt ZF9tYXNrX2ZpZWxkKGNtZCwgMiwgMTYsIDMyKQo+ICsjZGVmaW5lIGl0c19jbWRfZ2V0X3ZhbGlk Yml0KGNtZCkgICAgICAgaXRzX2NtZF9tYXNrX2ZpZWxkKGNtZCwgMiwgNjMsICAxKQo+ICsKPiAr I2RlZmluZSBJVFNfQ01EX0JVRkZFUl9TSVpFKGJhc2VyKSAgICAgICgoKChiYXNlcikgJiAweGZm KSArIDEpIDw8IDEyKQo+ICsKPiArc3RhdGljIGludCB2Z2ljX2l0c19oYW5kbGVfY21kcyhzdHJ1 Y3QgZG9tYWluICpkLCBzdHJ1Y3QgdmlydF9pdHMgKml0cywKPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1aW50MzJfdCB3cml0ZXIpCgpzL3VpbnQzMl90L3VpbnQ2NF90LwoKPiAr ewo+ICsgICAgcGFkZHJfdCBjbWRidWZfYWRkciA9IGl0cy0+Y2Jhc2VyICYgR0VOTUFTS19VTEwo NTEsIDEyKTsKPiArICAgIHZvaWQgKmNtZGJ1ZiA9IE5VTEw7Cj4gKyAgICB1aW50NjRfdCAqY21k cHRyOwo+ICsKPiArICAgIGlmICggd3JpdGVyID49IElUU19DTURfQlVGRkVSX1NJWkUoaXRzLT5j YmFzZXIpICkKPiArICAgICAgICByZXR1cm4gLTE7CgpZb3UgcmV0dXJuIGFuIGVycm9yIHZhbHVl IGJ1dCB0aGUgY2FsbGVyIGRvZXMgbm90IGNoZWNrIGl0LiBTaG91bGQgbm90IAp0aGUgY2FsbGVy IGRvIGEgZGlmZmVyZW50IGFjdGlvbiB3aGVuIHRoZSByZXR1cm4gLTE/IElmIG5vdCwgaXQgc2hv dWxkIApiZSBkb2N1bWVudGVkLgoKPiArCj4gKyAgICBzcGluX2xvY2soJml0cy0+dmNtZF9sb2Nr KTsKCkkgYW0gc3RpbGwgY29uY2VybmVkIGFib3V0IHRoZSBsb2NraW5nIGhlcmUgYXMgeW91IG1h eSBpbnRlcnByZXQgMzJLIG9mIApjb21tYW5kcyBpbiBvbmUgZ28uIFdlIHNwb2tlIGFib3V0IG1p dGlnYXRpb24gYW5kIEkgd2FzIGV4cGVjdGVkIHNvbWUgClRPRE9zIGluIHRoZSBjb2RlIGFib3V0 IHRoYXQuLi4KCj4gKwo+ICsgICAgd2hpbGUgKCBpdHMtPmNyZWFkciAhPSB3cml0ZXIgKQo+ICsg ICAgewo+ICsgICAgICAgIGludCByZXQ7Cj4gKwo+ICsgICAgICAgIHJldCA9IDA7Cj4gKwo+ICsg ICAgICAgIC8qCj4gKyAgICAgICAgICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgY29tbWFuZCB3ZSBo YW5kbGUgb3Igd2UgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5LAo+ICsgICAgICAgICAqIHdlIG5lZWQg dG8gKHJlKW1hcCB0aGUgY29tbWFuZCBidWZmZXIuCj4gKyAgICAgICAgICovCj4gKyAgICAgICAg aWYgKCAhY21kYnVmIHx8IChpdHMtPmNyZWFkciAmIH5QQUdFX01BU0spID09IDAgKQo+ICsgICAg ICAgIHsKPiArICAgICAgICAgICAgaWYgKCBjbWRidWYgKQo+ICsgICAgICAgICAgICAgICAgdW5t YXBfb25lX2d1ZXN0X3BhZ2UoY21kYnVmKTsKPiArICAgICAgICAgICAgY21kYnVmID0gbWFwX29u ZV9ndWVzdF9wYWdlKGQsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChjbWRidWZfYWRkciArIGl0cy0+Y3JlYWRyKSAmIFBBR0VfTUFTSyk7Cj4gKyAgICAgICAgICAg IGlmICggIWNtZGJ1ZiApCj4gKyAgICAgICAgICAgICAgICByZXR1cm4gLUVGQVVMVDsKPiArICAg ICAgICB9Cj4gKyAgICAgICAgY21kcHRyID0gY21kYnVmICsgKGl0cy0+Y3JlYWRyICYgflBBR0Vf TUFTSyk7Cj4gKwo+ICsgICAgICAgIHN3aXRjaCAoIGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kcHRy KSApCj4gKyAgICAgICAgewo+ICsgICAgICAgIGNhc2UgR0lUU19DTURfU1lOQzoKPiArICAgICAg ICAgICAgLyogV2UgaGFuZGxlIElUUyBjb21tYW5kcyBzeW5jaHJvbm91c2x5LCBzbyB3ZSBpZ25v cmUgU1lOQy4gKi8KPiArCSAgICBicmVhazsKClRoZSBpbmRlbnRhdGlvbiBpcyB3cm9uZy4KCj4g KyAgICAgICAgZGVmYXVsdDoKPiArICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcs ICJJVFM6IHVuaGFuZGxlZCBJVFMgY29tbWFuZCAlbHVcbiIsCj4gKyAgICAgICAgICAgICAgICAg ICAgIGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kcHRyKSk7Cj4gKyAgICAgICAgICAgIGJyZWFrOwo+ ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaXRzLT5jcmVhZHIgKz0gSVRTX0NNRF9TSVpFOwo+ ICsgICAgICAgIGlmICggaXRzLT5jcmVhZHIgPT0gSVRTX0NNRF9CVUZGRVJfU0laRShpdHMtPmNi YXNlcikgKQo+ICsgICAgICAgICAgICBpdHMtPmNyZWFkciA9IDA7Cj4gKwo+ICsgICAgICAgIGlm ICggcmV0ICkKPiArICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCj4gKyAgICAg ICAgICAgICAgICAgICAgICJJVFM6IElUUyBjb21tYW5kIGVycm9yICVkIHdoaWxlIGhhbmRsaW5n IGNvbW1hbmQgJWx1XG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICByZXQsIGl0c19jbWRfZ2V0 X2NvbW1hbmQoY21kcHRyKSk7Cj4gKyAgICB9Cj4gKyAgICBpdHMtPmN3cml0ZXIgPSB3cml0ZXI7 CgpJIHRoaW5rIGl0cy0+Y3dyaXRlciBzaG91bGQgYmUgdXBkYXRlZCBiZWZvcmUgdGhlIGxvb3Au IFNvIGFub3RoZXIgdkNQVSAKY291bGQgcmVhZCB0aGUgY29ycmVjdCBDV1JJVEVSIHdoaWxzdCB0 aGlzIHZDUFUgaXMgZXhlY3V0aW5nIHRoZSBjb21tYW5kcy4KCj4gKwo+ICsgICAgc3Bpbl91bmxv Y2soJml0cy0+dmNtZF9sb2NrKTsKPiArCj4gKyAgICBpZiAoIGNtZGJ1ZiApCj4gKyAgICAgICAg dW5tYXBfb25lX2d1ZXN0X3BhZ2UoY21kYnVmKTsKPiArCj4gKyAgICByZXR1cm4gMDsKPiArfQo+ ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIElUUyByZWdpc3RlcnMg cmVhZCBhY2Nlc3MgKgo+ICsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCj4gKwo+ICtz dGF0aWMgaW50IHZnaWNfdjNfaXRzX21taW9fcmVhZChzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZv X3QgKmluZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3Qg KnIsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0cnVjdCB2aXJ0X2l0cyAqaXRzID0gcHJpdjsK PiArICAgIHVpbnQ2NF90IHJlZzsKPiArCj4gKyAgICBzd2l0Y2ggKCBpbmZvLT5ncGEgJiAweGZm ZmYgKQo+ICsgICAgewo+ICsgICAgY2FzZSBWUkVHMzIoR0lUU19DVExSKToKPiArICAgICAgICBp ZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAg ICAgICBpZiAoIGl0c19pc19lbmFibGVkKGl0cykgKQo+ICsgICAgICAgICAgICByZWcgPSBHSVRT X0NUTFJfRU5BQkxFIHwgQklUKDMxKTsKClBsZWFzZSBkZWZpbmUgQklUKDMxKS4gQWxzbywgdGVj aG5pY2FsbHkgdGhlIElUUyBpcyBub3QgcXVpZXNjZW50IHdoZW4gCmNvbW1hbmRzIGFyZSBleGVj dXRlZCAoR0lUU19DVExSIGNvdWxkIGJlIHJlYWQgZnJvbSBhbm90aGVyIHZDUFUpLgoKCj4gKyAg ICAgICAgZWxzZQo+ICsgICAgICAgICAgICByZWcgPSBCSVQoMzEpOwoKRGl0dG8uCgo+ICsgICAg ICAgICpyID0gdmdpY19yZWczMl9leHRyYWN0KHJlZywgaW5mbyk7Cj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICBjYXNlIFZSRUczMihHSVRTX0lJRFIpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFi dC5zaXplICE9IERBQlRfV09SRCApIGdvdG8gYmFkX3dpZHRoOwo+ICsgICAgICAgICpyID0gdmdp Y19yZWczMl9leHRyYWN0KEdJVFNfSUlEUl9WQUxVRSwgaW5mbyk7Cj4gKyAgICAgICAgYnJlYWs7 Cj4gKyAgICBjYXNlIFZSRUc2NChHSVRTX1RZUEVSKToKPiArICAgICAgICBpZiAoICF2Z2ljX3Jl ZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAg ICAgICByZWcgPSBHSVRTX1RZUEVSX1BIWVNJQ0FMOwoKQ2FuIHlvdSBwbGVhc2UgZG9jdW1lbnQg dGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHZJVFMuCgo+ICsgICAgICAgIHJlZyB8PSAoc2l6ZW9m KHN0cnVjdCB2aXRzX2l0dGUpIC0gMSkgPDwgR0lUU19UWVBFUl9JVFRfU0laRV9TSElGVDsKPiAr ICAgICAgICByZWcgfD0gKGl0cy0+aW50aWRfYml0cyAtIDEpIDw8IEdJVFNfVFlQRVJfSURCSVRT X1NISUZUOwo+ICsgICAgICAgIHJlZyB8PSAoaXRzLT5kZXZpZF9iaXRzIC0gMSkgPDwgR0lUU19U WVBFUl9ERVZJRFNfU0hJRlQ7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QocmVn LCBpbmZvKTsKPiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQ0JBU0VS KToKPiArICAgICAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkg KSBnb3RvIGJhZF93aWR0aDsKCkNvZGluZyBzdHlsZSBpZiAoICF2Z2ljLi4uCgo+ICsgICAgICAg ICpyID0gdmdpY19yZWc2NF9leHRyYWN0KGl0cy0+Y2Jhc2VyLCBpbmZvKTsKCkkgZG9uJ3QgdGhp bmsgeW91IGNhbiBhc3N1bWUgdmdpY19yZWc2NF9leHRyYWN0IHdpbGwgYmUgYXRvbWljLgoKPiAr ICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1dSSVRFUik6Cj4gKyAgICAg ICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRf d2lkdGg7CgpDb2Rpbmcgc3R5bGUKCj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3Qo aXRzLT5jd3JpdGVyLCBpbmZvKTsKCkRpdHRvLgoKPiArICAgICAgICBicmVhazsKPiArICAgIGNh c2UgVlJFRzY0KEdJVFNfQ1JFQURSKToKPiArICAgICAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVj a19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKCkNvZGluZyBzdHlsZQoKPiAr ICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFjdChpdHMtPmNyZWFkciwgaW5mbyk7CgpEaXR0 by4KCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFZSRUc2NChHSVRTX0JBU0VSMCk6Cj4g KyAgICAgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290 byBiYWRfd2lkdGg7CgpDb2Rpbmcgc3R5bGUKCj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4 dHJhY3QoaXRzLT5iYXNlcl9kZXYsIGluZm8pOwoKRGl0dG8uCgo+ICsgICAgICAgIGJyZWFrOwo+ ICsgICAgY2FzZSBWUkVHNjQoR0lUU19CQVNFUjEpOgo+ICsgICAgICAgIGlmICggISB2Z2ljX3Jl ZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwoKQ29kaW5nIHN0 eWxlCgo+ICsgICAgICAgICpyID0gdmdpY19yZWc2NF9leHRyYWN0KGl0cy0+YmFzZXJfY29sbCwg aW5mbyk7CgpEaXR0by4KCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFZSQU5HRTY0KEdJ VFNfQkFTRVIyLCBHSVRTX0JBU0VSNyk6Cj4gKyAgICAgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hl Y2tfYWNjZXNzKGluZm8tPmRhYnQpICkgZ290byBiYWRfd2lkdGg7CgpDb2Rpbmcgc3R5bGUKCj4g KyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoMCwgaW5mbyk7CgpQbGVhc2UgaW50cm9k dWNlIGEgbGFiZWwgcmVhZF9hc196ZXJvXzY0IGF0IHRoZSBlbmQgYW5kIGRvIHRoZSAKaW1wbGVt ZW50YXRpb24gb2YgUkFaIHRoZXJlLiBJdCB3aWxsIGFjdHMgYXMgYSBkb2N1bWVudGF0aW9uIHRv byAoc2VlIGFuIApleGFtcGxlIGluIHZnaWMtdjMuYykuCgpBbHNvLCB2Z2ljX3JlZzY0X2V4dHJh Y3QoMCwgaW5mbykgd2lsbCAuLi4gYWx3YXlzIHJldHVybiAwLiBTbyB5b3UgY2FuIApvcHRpbWl6 ZSBpdCA7KS4KCj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICBjYXNlIFZSRUczMihHSVRTX1BJRFIy KToKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJh ZF93aWR0aDsKPiArICAgICAgICAqciA9IHZnaWNfcmVnMzJfZXh0cmFjdChHSUNWM19HSUNEX1BJ RFIyLCBpbmZvKTsKPiArICAgICAgICBicmVhazsKClBsZWFzZSBhZGQgYWxsIHRoZSByZWdpc3Rl cnMgZXZlbiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGFuZCByZXNlcnZlZCAKb25lLiBJZ25vcmlu ZyByZWdpc3RlcnMgd2l0aG91dCBhbnkgd2FybmluZyBpcyB1c3VhbGx5IGEgYmFkIGlkZWEgYXMg aXQgCm1ha2VzIHZlcnkgZGlmZmljdWx0IHRvIGRlYnVnIGl0LiBZb3UgY2FuIGxvb2sgYXQgdmdp Yy12My5jIGZvciBhbiBleGFtcGxlLgoKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMTsKPiAr Cj4gK2JhZF93aWR0aDoKClBsZWFzZSBwcmludCBhbiBlcnJvciBoZXJlIChzZWUgdmdpYy12My5j KS4KCj4gKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKPiArCj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBJVFMg cmVnaXN0ZXJzIHdyaXRlIGFjY2VzcyAqCj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioq KiovCj4gKwo+ICtzdGF0aWMgaW50IGl0c19iYXNlcl90YWJsZV9zaXplKHVpbnQ2NF90IGJhc2Vy KQoKdW5zaWduZWQgaW50IGZvciB0aGUgcmV0dXJuLgoKPiArewo+ICsgICAgaW50IHBhZ2Vfc2l6 ZSA9IDA7Cgp1bnNpZ25lZCBpbnQuCgo+ICsKPiArICAgIHN3aXRjaCAoIChiYXNlciA+PiA4KSAm IDMgKQoKUGxlYXNlIGRlZmluZSA4IGFuZCAzLgoKPiArICAgIHsKPiArICAgIGNhc2UgMDogcGFn ZV9zaXplID0gU1pfNEs7IGJyZWFrOwo+ICsgICAgY2FzZSAxOiBwYWdlX3NpemUgPSBTWl8xNks7 IGJyZWFrOwo+ICsgICAgY2FzZSAyOgo+ICsgICAgY2FzZSAzOiBwYWdlX3NpemUgPSBTWl82NEs7 IGJyZWFrOwo+ICsgICAgfQoKSXQgbG9va3MgbGlrZSB0byBtZSB0aGF0IHRoZSBzd2l0Y2ggY291 bGQgYmUgdHVybmVkIGludG8gYW4gYXJyYXk6Cgp1bnNpZ25lZCBwYWdlX3NpemVbXSA9IHtTWl80 SywgU1pfMTZLLCBTWl82NEssIFNaXzY0S307CgpUaGlzIHdvdWRsIG1ha2UgdGhlIGNvZGUgc2lt cGxlci4KCj4gKwo+ICsgICAgcmV0dXJuIHBhZ2Vfc2l6ZSAqICgoYmFzZXIgJiBHRU5NQVNLX1VM TCg3LCAwKSkgKyAxKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBpdHNfYmFzZXJfbnJfZW50cmll cyh1aW50NjRfdCBiYXNlcikKCnVuc2lnbmVkIGludCBmb3IgdGhlIHJldHVybiBhbmQgdGhlIGZ1 bmN0aW9uIHdvdWxkIHByb2JhYmx5IGJlbmVmaXQgdG8gCmJlIGlubGluZWQuCgo+ICt7Cj4gKyAg ICBpbnQgZW50cnlfc2l6ZSA9ICgoYmFzZXIgJiBHRU5NQVNLX1VMTCg1MiwgNDgpKSA+PiA0OCkg KyAxOwoKdW5zaWduZWQgaW50IGZvciB0aGUgdHlwZS4gQWxzbyBwbGVhc2UgdXNlIGEgZGVmaW5l IGZvciA0OC4KCj4gKwo+ICsgICAgcmV0dXJuIGl0c19iYXNlcl90YWJsZV9zaXplKGJhc2VyKSAv IGVudHJ5X3NpemU7Cj4gK30KClsuLi5dCgo+ICtzdGF0aWMgaW50IHZnaWNfdjNfaXRzX21taW9f d3JpdGUoc3RydWN0IHZjcHUgKnYsIG1taW9faW5mb190ICppbmZvLAo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfdCByLCB2b2lkICpwcml2KQo+ICt7Cj4gKyAg ICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOwo+ICsgICAgc3RydWN0IHZpcnRfaXRzICpp dHMgPSBwcml2Owo+ICsgICAgdWludDY0X3QgcmVnOwo+ICsgICAgdWludDMyX3QgcmVnMzIsIGN0 bHI7CgpjdGxyIGNvdWxkIGJlIGRlZmluZWQgaW4gdGhlIGNhc2UuLi4KCj4gKwo+ICsgICAgc3dp dGNoICggaW5mby0+Z3BhICYgMHhmZmZmICkKPiArICAgIHsKPiArICAgIGNhc2UgVlJFRzMyKEdJ VFNfQ1RMUik6CgpoZXJlLiBJIHRlbmQgdG8gcHJlZmVyIHRvIHJlc3RyaWN0IHRoZSBzY29wZSB3 aGVuZXZlciBpdCBpcyBwb3NzaWJsZS4KCj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUg IT0gREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIGN0bHIgPSBpdHNf aXNfZW5hYmxlZChpdHMpID8gR0lUU19DVExSX0VOQUJMRSA6IDA7Cj4gKyAgICAgICAgcmVnMzIg PSBjdGxyOwo+ICsgICAgICAgIHZnaWNfcmVnMzJfdXBkYXRlKCZyZWczMiwgciwgaW5mbyk7Cj4g Kwo+ICsgICAgICAgIGlmICggY3RsciBeIHJlZzMyICkKPiArICAgICAgICAgICAgdmdpY192M19p dHNfY2hhbmdlX2l0c19zdGF0dXMoaXRzLCByZWczMiAmIEdJVFNfQ1RMUl9FTkFCTEUpOwoKVGhp cyBkb2VzIG5vdCBsb29rIGF0b21pYywgc28geW91IGNvdWxkIGVuZC11cCBjYWxsaW5nIHRoaXMg dHdpY2UuCgo+ICsgICAgICAgIHJldHVybiAxOwo+ICsKPiArICAgIGNhc2UgVlJFRzMyKEdJVFNf SUlEUik6Cj4gKyAgICAgICAgZ290byB3cml0ZV9pZ25vcmVfMzI7Cj4gKyAgICBjYXNlIFZSRUcz MihHSVRTX1RZUEVSKToKPiArICAgICAgICBnb3RvIHdyaXRlX2lnbm9yZV8zMjsKPiArICAgIGNh c2UgVlJFRzY0KEdJVFNfQ0JBU0VSKToKPiArICAgICAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVj a19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsKCkNvZGluZyBzdHlsZS4KCj4g Kwo+ICsgICAgICAgIC8qIENoYW5naW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGggdGhlIElUUyBlbmFi bGVkIGlzIFVOUFJFRElDVEFCTEUuICovCj4gKyAgICAgICAgaWYgKCBpdHNfaXNfZW5hYmxlZChp dHMpICkKClNlZSBteSBxdWVzdGlvbiBhYm91dCBhdG9taWNpdHkuCgo+ICsgICAgICAgIHsKPiAr ICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJJVFM6IERvbWFpbiAlZCB0cmll ZCB0byBjaGFuZ2UgQ0JBU0VSIHdpdGggdGhlIElUUyBlbmFibGVkLlxuIiwgZC0+ZG9tYWluX2lk KTsKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICBy ZWcgPSBpdHMtPmNiYXNlcjsKPiArICAgICAgICB2Z2ljX3JlZzY0X3VwZGF0ZSgmcmVnLCByLCBp bmZvKTsKPiArICAgICAgICBzYW5pdGl6ZV9pdHNfYmFzZV9yZWcoJnJlZyk7Cj4gKwo+ICsgICAg ICAgIHZnaWNfaXRzX3VubWFwX2NtZGJ1ZihpdHMpOwoKTG9va2luZyBhdCB0aGUgaW1wbGVtZW50 YXRpb24gb2YgdmdpY19pdHNfdW5tYXBfY21kYnVmLCB5b3UgaGF2ZSBubyAKc2FmZXR5IHRvIGNo ZWNrIHdoZXRoZXIgdGhlIHJlZ2lvbiB3YXMgbWFwcGVkIGJlZm9yZS4KCkFsc28sIGZyb20gdGhl IHNwZWMsIDguMTkuMiBpbiBBUk0gSUhJIDAwNjlDKSwgR0lUU19DUkVBRFIgKGkuZSAKaXRzLT5j cmVhZHIpIHNob3VsZCBiZSByZXNldCB0byAwLgoKPiArICAgICAgICBpdHMtPmNiYXNlciA9IHJl ZzsKPiArCj4gKwlyZXR1cm4gMTsKPiArCj4gKyAgICBjYXNlIFZSRUc2NChHSVRTX0NXUklURVIp Ogo+ICsgICAgICAgIGlmICggISB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSAp IGdvdG8gYmFkX3dpZHRoOwoKQ29kaW5nIHN0eWxlLgoKPiArICAgICAgICByZWcgPSBpdHMtPmN3 cml0ZXIgJiAweGZmZmUwOwo+ICsgICAgICAgIHZnaWNfcmVnNjRfdXBkYXRlKCZyZWcsIHIsIGlu Zm8pOwo+ICsgICAgICAgIGl0cy0+Y3dyaXRlciA9IHJlZyAmIDB4ZmZmZTA7Cj4gKwo+ICsgICAg ICAgIGlmICggaXRzX2lzX2VuYWJsZWQoaXRzKSApCj4gKyAgICAgICAgICAgIHZnaWNfaXRzX2hh bmRsZV9jbWRzKGQsIGl0cywgcmVnKTsKCkkgd2FzIGV4cGVjdGluZyB5b3UgdG8gY2hlY2sgdGhl IHJldHVybiBoZXJlLgoKPiArCj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgY2FzZSBW UkVHNjQoR0lUU19DUkVBRFIpOgo+ICsgICAgICAgIGdvdG8gd3JpdGVfaWdub3JlXzY0Owo+ICsg ICAgY2FzZSBWUkVHNjQoR0lUU19CQVNFUjApOgo+ICsgICAgICAgIGlmICggISB2Z2ljX3JlZzY0 X2NoZWNrX2FjY2VzcyhpbmZvLT5kYWJ0KSApIGdvdG8gYmFkX3dpZHRoOwoKQ29kaW5nIHN0eWxl LgoKPiArCj4gKyAgICAgICAgLyogQ2hhbmdpbmcgYmFzZSByZWdpc3RlcnMgd2l0aCB0aGUgSVRT IGVuYWJsZWQgaXMgVU5QUkVESUNUQUJMRS4gKi8KPiArICAgICAgICBpZiAoIGl0c19pc19lbmFi bGVkKGl0cykgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJJVFM6IERvbWFpbiAlZCB0cmllZCB0byBjaGFuZ2UgQkFTRVIgd2l0aCB0aGUgSVRT IGVuYWJsZWQuXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOwo+ICsK PiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICAgICAgfQoKSSB3YXMgZXhwZWN0aW5nIHNv bWUgbG9ja2luZyBoZXJlIGJlY2F1c2UgdGhpcyBjb3VsZCBiZSBjYWxsZWQgCmNvbmN1cnJlbnRs eS4uLgoKPiArCj4gKyAgICAgICAgcmVnID0gaXRzLT5iYXNlcl9kZXY7Cj4gKyAgICAgICAgdmdp Y19yZWc2NF91cGRhdGUoJnJlZywgciwgaW5mbyk7Cj4gKwo+ICsgICAgICAgIHJlZyAmPSB+R0lU U19CQVNFUl9ST19NQVNLOwo+ICsgICAgICAgIHJlZyB8PSAoc2l6ZW9mKHVpbnQ2NF90KSAtIDEp IDw8IEdJVFNfQkFTRVJfRU5UUllfU0laRV9TSElGVDsKPiArICAgICAgICByZWcgfD0gR0lUU19C QVNFUl9UWVBFX0RFVklDRSA8PCBHSVRTX0JBU0VSX1RZUEVfU0hJRlQ7Cj4gKyAgICAgICAgc2Fu aXRpemVfaXRzX2Jhc2VfcmVnKCZyZWcpOwo+ICsKPiArICAgICAgICAvKiBIYXMgdGhlIHRhYmxl IGFkZHJlc3MgYmVlbiBjaGFuZ2VkIG9yIGludmFsaWRhdGVkPyAqLwo+ICsgICAgICAgIGlmICgg IShyZWcgJiBHSVRTX1ZBTElEX0JJVCkgfHwKPiArICAgICAgICAgICAgIGdldF9iYXNlcl9waHlz X2FkZHIocmVnKSAhPSBnZXRfYmFzZXJfcGh5c19hZGRyKGl0cy0+YmFzZXJfZGV2KSApCj4gKyAg ICAgICAgewo+ICsgICAgICAgICAgICB2Z2ljX2l0c191bm1hcF9pdHNfdGFibGUoaXRzLT5kLCBp dHMtPmJhc2VyX2Rldik7Cj4gKyAgICAgICAgICAgIGNsZWFyX2JpdChWSVJUX0lUU19ERVZfVkFM SUQsICZpdHMtPmZsYWdzKTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIGlmICggcmVnICYg R0lUU19WQUxJRF9CSVQgKQo+ICsgICAgICAgICAgICBpdHMtPm1heF9kZXZpY2VzID0gaXRzX2Jh c2VyX25yX2VudHJpZXMocmVnKTsKPiArICAgICAgICBlbHNlCj4gKyAgICAgICAgICAgIGl0cy0+ bWF4X2RldmljZXMgPSAwOwo+ICsKPiArICAgICAgICBpdHMtPmJhc2VyX2RldiA9IHJlZzsKPiAr ICAgICAgICByZXR1cm4gMTsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQkFTRVIxKToKPiArICAg ICAgICBpZiAoICEgdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJh ZF93aWR0aDsKPiArCj4gKyAgICAgICAgLyogQ2hhbmdpbmcgYmFzZSByZWdpc3RlcnMgd2l0aCB0 aGUgSVRTIGVuYWJsZWQgaXMgVU5QUkVESUNUQUJMRS4gKi8KPiArICAgICAgICBpZiAoIGl0c19p c19lbmFibGVkKGl0cykgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgZ2RwcmludGsoWEVO TE9HX0lORk8sICJJVFM6IERvbWFpbiAlZCB0cmllZCB0byBjaGFuZ2UgQkFTRVIgd2l0aCB0aGUg SVRTIGVuYWJsZWQuXG4iLAo+ICsgICAgICAgICAgICAgICAgICAgICBkLT5kb21haW5faWQpOwo+ ICsgICAgICAgICAgICByZXR1cm4gMTsKPiArICAgICAgICB9Cj4gKwo+ICsgICAgICAgIHJlZyA9 IGl0cy0+YmFzZXJfY29sbDsKPiArICAgICAgICB2Z2ljX3JlZzY0X3VwZGF0ZSgmcmVnLCByLCBp bmZvKTsKPiArICAgICAgICByZWcgJj0gfkdJVFNfQkFTRVJfUk9fTUFTSzsKPiArICAgICAgICBy ZWcgfD0gKHNpemVvZih1aW50MTZfdCkgLSAxKSA8PCBHSVRTX0JBU0VSX0VOVFJZX1NJWkVfU0hJ RlQ7Cj4gKyAgICAgICAgcmVnIHw9IEdJVFNfQkFTRVJfVFlQRV9DT0xMRUNUSU9OIDw8IEdJVFNf QkFTRVJfVFlQRV9TSElGVDsKPiArICAgICAgICBzYW5pdGl6ZV9pdHNfYmFzZV9yZWcoJnJlZyk7 Cj4gKwo+ICsgICAgICAgIGlmICggIShyZWcgJiBHSVRTX1ZBTElEX0JJVCkgfHwKPiArICAgICAg ICAgICAgIGdldF9iYXNlcl9waHlzX2FkZHIocmVnKSAhPSBnZXRfYmFzZXJfcGh5c19hZGRyKGl0 cy0+YmFzZXJfY29sbCkgKQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdmdpY19pdHNfdW5t YXBfaXRzX3RhYmxlKGl0cy0+ZCwgaXRzLT5iYXNlcl9jb2xsKTsKPiArICAgICAgICAgICAgY2xl YXJfYml0KFZJUlRfSVRTX0NPTExfVkFMSUQsICZpdHMtPmZsYWdzKTsKPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIGlmICggcmVnICYgR0lUU19WQUxJRF9CSVQgKQo+ICsgICAgICAgICAgICBp dHMtPm1heF9jb2xsZWN0aW9ucyA9IGl0c19iYXNlcl9ucl9lbnRyaWVzKHJlZyk7Cj4gKyAgICAg ICAgZWxzZQo+ICsgICAgICAgICAgICBpdHMtPm1heF9jb2xsZWN0aW9ucyA9IDA7Cj4gKyAgICAg ICAgaXRzLT5iYXNlcl9jb2xsID0gcmVnOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgY2Fz ZSBWUkFOR0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgo+ICsgICAgICAgIGdvdG8gd3Jp dGVfaWdub3JlXzY0OwoKIEZyb20gdGhlIElUUyByZWdpc3RlciBtYXAsIHdlIHdvdWxkIGhhdmUg dG8gZW11bGF0ZSBtb3JlIHJlZ2lzdGVyIChhdCAKbGVhc3QgcmVzZXJ2ZWQsIGltcGxlbWVudGF0 aW9uIGRlZmluZWQgYW5kIFJBWikuCgoKPiArICAgIGRlZmF1bHQ6Cj4gKyAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX0dfV0FSTklORywgIklUUzogdW5oYW5kbGVkIElUUyByZWdpc3RlciAweCVseFxu IiwKPiArICAgICAgICAgICAgICAgICBpbmZvLT5ncGEgJiAweGZmZmYpOwo+ICsgICAgICAgIHJl dHVybiAwOwo+ICsgICAgfQo+ICsKPiArICAgIHJldHVybiAxOwo+ICsKPiArd3JpdGVfaWdub3Jl XzY0Ogo+ICsgICAgaWYgKCAhIHZnaWNfcmVnNjRfY2hlY2tfYWNjZXNzKGluZm8tPmRhYnQpICkg Z290byBiYWRfd2lkdGg7CgpDb2Rpbmcgc3R5bGUuCgo+ICsgICAgcmV0dXJuIDE7Cj4gKwo+ICt3 cml0ZV9pZ25vcmVfMzI6Cj4gKyAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dPUkQg KSBnb3RvIGJhZF93aWR0aDsKPiArICAgIHJldHVybiAxOwo+ICsKPiArYmFkX3dpZHRoOgo+ICsg ICAgcHJpbnRrKFhFTkxPR19HX0VSUiAiJXB2IHZHSUNSOiBiYWQgcmVhZCB3aWR0aCAlZCByJWQg b2Zmc2V0ICUjMDhseFxuIiwKPiArICAgICAgICAgICB2LCBpbmZvLT5kYWJ0LnNpemUsIGluZm8t PmRhYnQucmVnLCBpbmZvLT5ncGEgJiAweGZmZmYpOwo+ICsKClRoaXMgaXMgSVRTIGVtdWxhdGlv biBub3QgR0lDUiA7KS4KCj4gKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKPiArCj4g KyAgICByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtbWlvX2hhbmRs ZXJfb3BzIHZnaWNfaXRzX21taW9faGFuZGxlciA9IHsKPiArICAgIC5yZWFkICA9IHZnaWNfdjNf aXRzX21taW9fcmVhZCwKPiArICAgIC53cml0ZSA9IHZnaWNfdjNfaXRzX21taW9fd3JpdGUsCj4g K307Cj4gKwo+ICsvKgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICog Yy1maWxlLXN0eWxlOiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQt dGFicy1tb2RlOiBuaWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gv YXJtL3ZnaWMtdjMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLXYzLmMKPiBpbmRleCAyYzZiMzE3Li5l YmNmYzE2IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNoL2FybS92Z2ljLXYzLmMKPiArKysgYi94ZW4v YXJjaC9hcm0vdmdpYy12My5jCj4gQEAgLTE1OCwxNSArMTU4LDYgQEAgc3RhdGljIHZvaWQgdmdp Y19zdG9yZV9pcm91dGVyKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2Z2ljX2lycV9yYW5rICpy YW5rLAo+ICAgICAgd3JpdGVfYXRvbWljKCZyYW5rLT52Y3B1W29mZnNldF0sIG5ld192Y3B1LT52 Y3B1X2lkKTsKPiAgfQo+Cj4gLXN0YXRpYyBpbmxpbmUgYm9vbCB2Z2ljX3JlZzY0X2NoZWNrX2Fj Y2VzcyhzdHJ1Y3QgaHNyX2RhYnQgZGFidCkKPiAtewo+IC0gICAgLyoKPiAtICAgICAqIDY0IGJp dHMgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQgNjQtYml0IHVu bGVzcwo+IC0gICAgICogc3RhdGVkIG90aGVyd2lzZSAoU2VlIDguMS4zIEFSTSBJSEkgMDA2OUEp Lgo+IC0gICAgICovCj4gLSAgICByZXR1cm4gKCBkYWJ0LnNpemUgPT0gREFCVF9ET1VCTEVfV09S RCB8fCBkYWJ0LnNpemUgPT0gREFCVF9XT1JEICk7Cj4gLX0KPiAtCgpBIHNlcGFyYXRlIGNvbW1p dCB3b3VsZCBoYXZlIGJlZW4gbmljZS4KClsuLi5dCgo+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVk ZS9hc20tYXJtL2dpY192M19kZWZzLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2dpY192M19kZWZz LmgKPiBpbmRleCBiMDFiNmVkLi44OTk5OTM3IDEwMDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2Fz bS1hcm0vZ2ljX3YzX2RlZnMuaAo+ICsrKyBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2Rl ZnMuaAo+IEBAIC0xNTUsNiArMTU1LDE2IEBACj4gICNkZWZpbmUgTFBJX1BST1BfUkVTMSAgICAg ICAgICAgICAgICAoMSA8PCAxKQo+ICAjZGVmaW5lIExQSV9QUk9QX0VOQUJMRUQgICAgICAgICAg ICAgKDEgPDwgMCkKPgo+ICsvKgo+ICsgKiBQSURSMjogT25seSBiaXRzWzc6NF0gYXJlIG5vdCBp bXBsZW1lbnRhdGlvbiBkZWZpbmVkLiBXZSBhcmUKPiArICogZW11bGF0aW5nIGEgR0lDdjMgKFs3 OjRdID0gMHgzKS4KPiArICoKPiArICogV2UgZG9uJ3QgZW11bGF0ZSBhIHNwZWNpZmljIHJlZ2lz dGVycyBzY2hlbWUgc28gaW1wbGVtZW50IHRoZSBvdGhlcnMKPiArICogYml0cyBhcyBSRVMwIGFz IHJlY29tbWVuZGVkIGJ5IHRoZSBzcGVjIChzZWUgOC4xLjEzIGluIEFSTSBJSEkgMDA2OUEpLgo+ ICsgKi8KPiArI2RlZmluZSBHSUNWM19HSUNEX1BJRFIyICAweDMwCj4gKyNkZWZpbmUgR0lDVjNf R0lDUl9QSURSMiAgR0lDVjNfR0lDRF9QSURSMgo+ICsKClRob3NlIHZhbHVlcyBzaG91bGQgbm90 IGJlIGRlZmluZWQgaW4gZ2ljX3YzX2RlZnMuaCBidXQgYSB2Z2ljIGhlYWRlcnMuIApNeSByYXRp b25hbGUgaXMsIHRob3NlIHZhbHVlIGFyZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIChlLmcgZGVw ZW5kcyBvbiAKdGhlIGVtdWxhdGlvbikuCgo+ICAjZGVmaW5lIEdJQ0hfVk1DUl9FT0kgICAgICAg ICAgICAgICAgKDEgPDwgOSkKPiAgI2RlZmluZSBHSUNIX1ZNQ1JfVkVORzEgICAgICAgICAgICAg ICgxIDw8IDEpCj4KPiBAQCAtMTk4LDYgKzIwOCwxNSBAQCBzdHJ1Y3QgcmRpc3RfcmVnaW9uIHsK PiAgICAgIGJvb2wgc2luZ2xlX3JkaXN0Owo+ICB9Owo+Cj4gKy8qCj4gKyAqIDY0IGJpdHMgcmVn aXN0ZXJzIGNhbiBiZSBhY2Nlc3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQgNjQtYml0IHVubGVzcwo+ ICsgKiBzdGF0ZWQgb3RoZXJ3aXNlIChTZWUgOC4xLjMgQVJNIElISSAwMDY5QSkuCj4gKyAqLwo+ ICtzdGF0aWMgaW5saW5lIGJvb2wgdmdpY19yZWc2NF9jaGVja19hY2Nlc3Moc3RydWN0IGhzcl9k YWJ0IGRhYnQpCj4gK3sKPiArICAgIHJldHVybiAoIGRhYnQuc2l6ZSA9PSBEQUJUX0RPVUJMRV9X T1JEIHx8IGRhYnQuc2l6ZSA9PSBEQUJUX1dPUkQgKTsKPiArfQoKVGhpcyBpcyB0aGUgd3Jvbmcg cGxhY2UgZm9yIHRoaXMgaGVscGVyLiBJIHRoaW5rIHRoaXMgc2hvdWxkIGdvIGluIAp2Z2ljLWVt dWwuaC4KCj4gKwo+ICAjZW5kaWYgLyogX19BU01fQVJNX0dJQ19WM19ERUZTX0hfXyAqLwo+Cj4g IC8qCj4gZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oIGIveGVu L2luY2x1ZGUvYXNtLWFybS9naWNfdjNfaXRzLmgKPiBpbmRleCBkODE2NWM0Li5iMmE5NTg2IDEw MDY0NAo+IC0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2l0cy5oCj4gKysrIGIveGVu L2luY2x1ZGUvYXNtLWFybS9naWNfdjNfaXRzLmgKPiBAQCAtMzUsNiArMzUsNyBAQAo+ICAjZGVm aW5lIEdJVFNfQkFTRVI1ICAgICAgICAgICAgICAgICAgICAgMHgxMjgKPiAgI2RlZmluZSBHSVRT X0JBU0VSNiAgICAgICAgICAgICAgICAgICAgIDB4MTMwCj4gICNkZWZpbmUgR0lUU19CQVNFUjcg ICAgICAgICAgICAgICAgICAgICAweDEzOAo+ICsjZGVmaW5lIEdJVFNfUElEUjIgICAgICAgICAg ICAgICAgICAgICAgR0lDUl9QSURSMgo+Cj4gIC8qIFJlZ2lzdGVyIGJpdHMgKi8KPiAgI2RlZmlu ZSBHSVRTX1ZBTElEX0JJVCAgICAgICAgICAgICAgICAgIEJJVF9VTEwoNjMpCj4gQEAgLTU2LDYg KzU3LDcgQEAKPiAgI2RlZmluZSBHSVRTX1RZUEVSX0lUVF9TSVpFX01BU0sgICAgICAgICgweGZV TCA8PCBHSVRTX1RZUEVSX0lUVF9TSVpFX1NISUZUKQo+ICAjZGVmaW5lIEdJVFNfVFlQRVJfSVRU X1NJWkUocikgICAgICAgICAgKCgoKHIpICYgR0lUU19UWVBFUl9JVFRfU0laRV9NQVNLKSA+PiBc Cj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHSVRT X1RZUEVSX0lUVF9TSVpFX1NISUZUKSArIDEpCj4gKyNkZWZpbmUgR0lUU19UWVBFUl9QSFlTSUNB TCAgICAgICAgICAgICAoMVUgPDwgMCkKPgo+ICAjZGVmaW5lIEdJVFNfSUlEUl9WQUxVRSAgICAg ICAgICAgICAgICAgMHgzNGMKPgo+CgpSZWdhcmRzLAoKLS0gCkp1bGllbiBHcmFsbAoKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxp bmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVu LWRldmVsCg==