From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: Re: [RFC PATCH 12/24] ARM: vGICv3: introduce basic ITS emulation bits Date: Tue, 8 Nov 2016 15:54:22 -0800 (PST) Message-ID: References: <20160928182457.12433-1-andre.przywara@arm.com> <20160928182457.12433-13-andre.przywara@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c4GDm-0007x6-Ra for xen-devel@lists.xenproject.org; Tue, 08 Nov 2016 23:54:31 +0000 In-Reply-To: <20160928182457.12433-13-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 Cc: xen-devel@lists.xenproject.org, Julien Grall , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org T24gV2VkLCAyOCBTZXAgMjAxNiwgQW5kcmUgUHJ6eXdhcmEgd3JvdGU6Cj4gQ3JlYXRlIGEgbmV3 IGZpbGUgdG8gaG9sZCB0aGUgZW11bGF0aW9uIGNvZGUgZm9yIHRoZSBJVFMgd2lkZ2V0Lgo+IEZv ciBub3cgd2UgZW11bGF0ZSB0aGUgbWVtb3J5IG1hcHBlZCBJVFMgcmVnaXN0ZXJzIGFuZCBwcm92 aWRlIGEgc3R1Ygo+IHRvIGludHJvZHVjZSB0aGUgSVRTIGNvbW1hbmQgaGFuZGxpbmcgZnJhbWV3 b3JrIChidXQgd2l0aG91dCBhY3R1YWxseQo+IGVtdWxhdGluZyBhbnkgY29tbWFuZHMgYXQgdGhp cyB0aW1lKS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6eXdh cmFAYXJtLmNvbT4KPiAtLS0KPiAgeGVuL2FyY2gvYXJtL01ha2VmaWxlICAgICAgICAgICAgIHwg ICAxICsKPiAgeGVuL2FyY2gvYXJtL3ZnaWMtaXRzLmMgICAgICAgICAgIHwgMzc4ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHhlbi9hcmNoL2FybS92Z2ljLXYzLmMg ICAgICAgICAgICB8ICAgOSAtCj4gIHhlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2RlZnMuaCB8 ICAxOSArKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDM5OCBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9u cygtKQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2FyY2gvYXJtL3ZnaWMtaXRzLmMKPiAKPiBk aWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL01ha2VmaWxlIGIveGVuL2FyY2gvYXJtL01ha2VmaWxl Cj4gaW5kZXggYzJjNGRhYS4uY2IwMjAxZiAxMDA2NDQKPiAtLS0gYS94ZW4vYXJjaC9hcm0vTWFr ZWZpbGUKPiArKysgYi94ZW4vYXJjaC9hcm0vTWFrZWZpbGUKPiBAQCAtNDQsNiArNDQsNyBAQCBv YmoteSArPSB0cmFwcy5vCj4gIG9iai15ICs9IHZnaWMubwo+ICBvYmoteSArPSB2Z2ljLXYyLm8K PiAgb2JqLSQoQ09ORklHX0FSTV82NCkgKz0gdmdpYy12My5vCj4gK29iai0kKENPTkZJR19IQVNf SVRTKSArPSB2Z2ljLWl0cy5vCj4gIG9iai15ICs9IHZtX2V2ZW50Lm8KPiAgb2JqLXkgKz0gdnRp bWVyLm8KPiAgb2JqLXkgKz0gdnBzY2kubwo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vdmdp Yy1pdHMuYyBiL3hlbi9hcmNoL2FybS92Z2ljLWl0cy5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiBpbmRleCAwMDAwMDAwLi44NzViOTkyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3hlbi9hcmNo L2FybS92Z2ljLWl0cy5jCj4gQEAgLTAsMCArMSwzNzggQEAKPiArLyoKPiArICogeGVuL2FyY2gv YXJtL3ZnaWMtaXRzLmMKPiArICoKPiArICogQVJNIEludGVycnVwdCBUcmFuc2xhdGlvbiBTZXJ2 aWNlIChJVFMpIGVtdWxhdGlvbgo+ICsgKgo+ICsgKiBBbmRyZSBQcnp5d2FyYSA8YW5kcmUucHJ6 eXdhcmFAYXJtLmNvbT4KPiArICogQ29weXJpZ2h0IChjKSAyMDE2IEFSTSBMdGQuCj4gKyAqCj4g KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3Jh bSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsg KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlCj4gKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgPHhlbi9iaXRvcHMuaD4KPiArI2lu Y2x1ZGUgPHhlbi9jb25maWcuaD4KPiArI2luY2x1ZGUgPHhlbi9kb21haW5fcGFnZS5oPgo+ICsj aW5jbHVkZSA8eGVuL2xpYi5oPgo+ICsjaW5jbHVkZSA8eGVuL2luaXQuaD4KPiArI2luY2x1ZGUg PHhlbi9zb2Z0aXJxLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaXJxLmg+Cj4gKyNpbmNsdWRlIDx4ZW4v c2NoZWQuaD4KPiArI2luY2x1ZGUgPHhlbi9zaXplcy5oPgo+ICsjaW5jbHVkZSA8YXNtL2N1cnJl bnQuaD4KPiArI2luY2x1ZGUgPGFzbS9tbWlvLmg+Cj4gKyNpbmNsdWRlIDxhc20vZ2ljX3YzX2Rl ZnMuaD4KPiArI2luY2x1ZGUgPGFzbS9naWMtaXRzLmg+Cj4gKyNpbmNsdWRlIDxhc20vdmdpYy5o Pgo+ICsjaW5jbHVkZSA8YXNtL3ZnaWMtZW11bC5oPgo+ICsKPiArLyogRGF0YSBzdHJ1Y3R1cmUg dG8gZGVzY3JpYmUgYSB2aXJ0dWFsIElUUyAqLwo+ICtzdHJ1Y3QgdmlydF9pdHMgewo+ICsgICAg c3RydWN0IGRvbWFpbiAqZDsKPiArICAgIHN0cnVjdCBob3N0X2l0cyAqaHdfaXRzOwo+ICsgICAg c3BpbmxvY2tfdCB2Y21kX2xvY2s7ICAgICAgIC8qIHByb3RlY3RzIHRoZSB2aXJ0dWFsIGNvbW1h bmQgYnVmZmVyICovCj4gKyAgICB1aW50NjRfdCBjYmFzZXI7Cj4gKyAgICB1aW50NjRfdCAqY21k YnVmOwo+ICsgICAgaW50IGN3cml0ZXI7Cj4gKyAgICBpbnQgY3JlYWRyOwo+ICsgICAgc3Bpbmxv Y2tfdCBpdHNfbG9jazsgICAgICAgIC8qIHByb3RlY3RzIHRoZSBjb2xsZWN0aW9uIGFuZCBkZXZp Y2UgdGFibGVzICovCj4gKyAgICB1aW50NjRfdCBiYXNlcjAsIGJhc2VyMTsKPiArICAgIHVpbnQx Nl90ICpjb2xsX3RhYmxlOwo+ICsgICAgaW50IG1heF9jb2xsZWN0aW9uczsKPiArICAgIHVpbnQ2 NF90ICpkZXZfdGFibGU7Cj4gKyAgICBpbnQgbWF4X2RldmljZXM7Cj4gKyAgICBib29sIGVuYWJs ZWQ7Cj4gK307Cj4gKwo+ICsvKiBBbiBJbnRlcnJ1cHQgVHJhbnNsYXRpb24gVGFibGUgRW50cnk6 IHRoaXMgaXMgaW5kZXhlZCBieSBhCj4gKyAqIERldmljZUlEL0V2ZW50SUQgcGFpciBhbmQgaXMg bG9jYXRlZCBpbiBndWVzdCBtZW1vcnkuCj4gKyAqLwo+ICtzdHJ1Y3Qgdml0c19pdHRlCj4gK3sK PiArICAgIHVpbnQ2NF90IGhscGk6MjQ7Cj4gKyAgICB1aW50NjRfdCB2bHBpOjI0Owo+ICsgICAg dWludDY0X3QgY29sbGVjdGlvbjoxNjsKPiArfTsKPiArCj4gKy8qKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKgo+ICsgKiBGdW5jdGlvbnMgdGhhdCBoYW5kbGUgSVRTIGNvbW1h bmRzICoKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwo+ICsKPiAr c3RhdGljIHVpbnQ2NF90IGl0c19jbWRfbWFza19maWVsZCh1aW50NjRfdCAqaXRzX2NtZCwKPiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd29yZCwgaW50IHNoaWZ0LCBp bnQgc2l6ZSkKPiArewo+ICsgICAgcmV0dXJuIChsZTY0X3RvX2NwdShpdHNfY21kW3dvcmRdKSA+ PiBzaGlmdCkgJiAoQklUKHNpemUpIC0gMSk7Cj4gK30KPiArCj4gKyNkZWZpbmUgaXRzX2NtZF9n ZXRfY29tbWFuZChjbWQpICAgICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAwLCAgMCwgIDgp Cj4gKyNkZWZpbmUgaXRzX2NtZF9nZXRfZGV2aWNlaWQoY21kKSAgICAgICBpdHNfY21kX21hc2tf ZmllbGQoY21kLCAwLCAzMiwgMzIpCj4gKyNkZWZpbmUgaXRzX2NtZF9nZXRfc2l6ZShjbWQpICAg ICAgICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAxLCAgMCwgIDUpCj4gKyNkZWZpbmUgaXRz X2NtZF9nZXRfaWQoY21kKSAgICAgICAgICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAxLCAg MCwgMzIpCj4gKyNkZWZpbmUgaXRzX2NtZF9nZXRfcGh5c2ljYWxfaWQoY21kKSAgICBpdHNfY21k X21hc2tfZmllbGQoY21kLCAxLCAzMiwgMzIpCj4gKyNkZWZpbmUgaXRzX2NtZF9nZXRfY29sbGVj dGlvbihjbWQpICAgICBpdHNfY21kX21hc2tfZmllbGQoY21kLCAyLCAgMCwgMTYpCj4gKyNkZWZp bmUgaXRzX2NtZF9nZXRfdGFyZ2V0X2FkZHIoY21kKSAgICBpdHNfY21kX21hc2tfZmllbGQoY21k LCAyLCAxNiwgMzIpCj4gKyNkZWZpbmUgaXRzX2NtZF9nZXRfdmFsaWRiaXQoY21kKSAgICAgICBp dHNfY21kX21hc2tfZmllbGQoY21kLCAyLCA2MywgIDEpCj4gKwo+ICsjZGVmaW5lIElUU19DTURf QlVGRkVSX1NJWkUoYmFzZXIpICAgICAgKCgoKGJhc2VyKSAmIDB4ZmYpICsgMSkgPDwgMTIpCj4g Kwo+ICtzdGF0aWMgaW50IHZnaWNfaXRzX2hhbmRsZV9jbWRzKHN0cnVjdCBkb21haW4gKmQsIHN0 cnVjdCB2aXJ0X2l0cyAqaXRzLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IHdyaXRlcikKPiArewo+ICsgICAgdWludDY0X3QgKmNtZHB0cjsKPiArCj4gKyAgICBp ZiAoICFpdHMtPmNtZGJ1ZiApCj4gKyAgICAgICAgcmV0dXJuIC0xOwo+ICsKPiArICAgIGlmICgg d3JpdGVyID49IElUU19DTURfQlVGRkVSX1NJWkUoaXRzLT5jYmFzZXIpICkKPiArICAgICAgICBy ZXR1cm4gLTE7Cj4gKwo+ICsgICAgc3Bpbl9sb2NrKCZpdHMtPnZjbWRfbG9jayk7Cj4gKwo+ICsg ICAgd2hpbGUgKCBpdHMtPmNyZWFkciAhPSB3cml0ZXIgKQo+ICsgICAgewo+ICsgICAgICAgIGNt ZHB0ciA9IGl0cy0+Y21kYnVmICsgKGl0cy0+Y3JlYWRyIC8gc2l6ZW9mKCppdHMtPmNtZGJ1Zikp Owo+ICsKPiArICAgICAgICBzd2l0Y2ggKGl0c19jbWRfZ2V0X2NvbW1hbmQoY21kcHRyKSkKPiAr ICAgICAgICB7Cj4gKyAgICAgICAgY2FzZSBHSVRTX0NNRF9TWU5DOgo+ICsgICAgICAgICAgICAv KiBXZSBoYW5kbGUgSVRTIGNvbW1hbmRzIHN5bmNocm9ub3VzbHksIHNvIHdlIGlnbm9yZSBTWU5D LiAqLwo+ICsJICAgIGJyZWFrOwoKaW5kZW50YXRpb24KCgo+ICsgICAgICAgIGRlZmF1bHQ6Cj4g KyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19HX1dBUk5JTkcsICJJVFM6IHVuaGFuZGxlZCBJ VFMgY29tbWFuZCAlbGRcbiIsCj4gKyAgICAgICAgICAgICAgICAgICBpdHNfY21kX2dldF9jb21t YW5kKGNtZHB0cikpOwo+ICsgICAgICAgICAgICBicmVhazsKPiArICAgICAgICB9Cj4gKwo+ICsg ICAgICAgIGl0cy0+Y3JlYWRyICs9IElUU19DTURfU0laRTsKPiArICAgICAgICBpZiAoIGl0cy0+ Y3JlYWRyID09IElUU19DTURfQlVGRkVSX1NJWkUoaXRzLT5jYmFzZXIpICkKPiArICAgICAgICAg ICAgaXRzLT5jcmVhZHIgPSAwOwo+ICsgICAgfQo+ICsgICAgaXRzLT5jd3JpdGVyID0gd3JpdGVy Owo+ICsKPiArICAgIHNwaW5fdW5sb2NrKCZpdHMtPnZjbWRfbG9jayk7Cj4gKwo+ICsgICAgcmV0 dXJuIDA7Cj4gK30KPiArCj4gKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBJ VFMgcmVnaXN0ZXJzIHJlYWQgYWNjZXNzICoKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioq KioqLwo+ICsKPiArLyogVGhlIHBoeXNpY2FsIGFkZHJlc3MgaXMgZW5jb2RlZCBzbGlnaHRseSBk aWZmZXJlbnRseSBkZXBlbmRpbmcgb24KPiArICogdGhlIHVzZWQgcGFnZSBzaXplOiB0aGUgaGln aGVzdCBmb3VyIGJpdHMgYXJlIHN0b3JlZCBpbiB0aGUgbG93ZXN0Cj4gKyAqIGZvdXIgYml0cyBv ZiB0aGUgZmllbGQgZm9yIDY0SyBwYWdlcy4KPiArICovCj4gK3N0YXRpYyBwYWRkcl90IGdldF9i YXNlcl9waHlzX2FkZHIodWludDY0X3QgcmVnKQo+ICt7Cj4gKyAgICBpZiAoIHJlZyAmIEJJVCg5 KSApCj4gKyAgICAgICAgcmV0dXJuIChyZWcgJiBHRU5NQVNLKDQ3LCAxNikpIHwgKChyZWcgJiBH RU5NQVNLKDE1LCAxMikpIDw8IDM2KTsKPiArICAgIGVsc2UKPiArICAgICAgICByZXR1cm4gcmVn ICYgR0VOTUFTSyg0NywgMTIpOwo+ICt9CgpJIHdvdWxkIHNpbXBsaWZ5IHRoZSBjb2RlIGJ5IHN1 cHBvcnRpbmcgb25seSBvbmUgcGFnZSBzaXplLCBtYXliZSA0Sy4KCgo+ICsKPiArc3RhdGljIGlu dCB2Z2ljX3YzX2l0c19tbWlvX3JlYWQoc3RydWN0IHZjcHUgKnYsIG1taW9faW5mb190ICppbmZv LAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpc3Rlcl90ICpyLCB2b2lk ICpwcml2KQo+ICt7Cj4gKyAgICBzdHJ1Y3QgdmlydF9pdHMgKml0cyA9IHByaXY7Cj4gKwo+ICsg ICAgc3dpdGNoICggaW5mby0+Z3BhICYgMHhmZmZmICkKPiArICAgIHsKPiArICAgIGNhc2UgVlJF RzMyKEdJVFNfQ1RMUik6Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgIT0gREFCVF9X T1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzMyX2V4dHJhY3Qo aXRzLT5lbmFibGVkIHwgQklUKDMxKSwgaW5mbyk7Cj4gKwlicmVhazsKCmluZGVudGF0aW9uCgoK PiArICAgIGNhc2UgVlJFRzMyKEdJVFNfSUlEUik6Cj4gKyAgICAgICAgaWYgKCBpbmZvLT5kYWJ0 LnNpemUgIT0gREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2lj X3JlZzMyX2V4dHJhY3QoR0lUU19JSURSX1ZBTFVFLCBpbmZvKTsKPiArICAgICAgICBicmVhazsK PiArICAgIGNhc2UgVlJFRzY0KEdJVFNfVFlQRVIpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFi dC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgKnIgPSB2Z2lj X3JlZzY0X2V4dHJhY3QoMHgxZWZmMSwgaW5mbyk7CgpwbGVhc2UgI2RlZmluZSAweDFlZmYxCgoK PiArICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQ0JBU0VSKToKPiArICAg ICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSA8IERBQlRfV09SRCApIGdvdG8gYmFkX3dpZHRoOwo+ ICsgICAgICAgICpyID0gdmdpY19yZWc2NF9leHRyYWN0KGl0cy0+Y2Jhc2VyLCBpbmZvKTsKPiAr ICAgICAgICBicmVhazsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1dSSVRFUik6Cj4gKyAgICAg ICAgaWYgKCBpbmZvLT5kYWJ0LnNpemUgPCBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiAr ICAgICAgICAqciA9IHZnaWNfcmVnNjRfZXh0cmFjdChpdHMtPmN3cml0ZXIsIGluZm8pOwo+ICsg ICAgICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19DUkVBRFIpOgo+ICsgICAgICAg IGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAg ICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRzLT5jcmVhZHIsIGluZm8pOwo+ICsgICAg ICAgIGJyZWFrOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19CQVNFUjApOgo+ICsgICAgICAgIGlm ICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAg ICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRzLT5iYXNlcjAsIGluZm8pOwo+ICsgICAgICAg IGJyZWFrOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19CQVNFUjEpOgo+ICsgICAgICAgIGlmICgg aW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAg KnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoaXRzLT5iYXNlcjEsIGluZm8pOwo+ICsgICAgICAgIGJy ZWFrOwo+ICsgICAgY2FzZSBWUkFOR0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgo+ICsg ICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7 Cj4gKyAgICAgICAgKnIgPSB2Z2ljX3JlZzY0X2V4dHJhY3QoMCwgaW5mbyk7Cj4gKyAgICAgICAg YnJlYWs7CgpJIG5vdGljZSB0aGF0IHRoaXMgcGF0Y2ggbGFja3MgdGhlIGNvZGUgdG8gaW5pdGlh bGl6ZSB0aGUgdml0cyByZWdpc3RlcnMKdG8gc2Vuc2libGUgZGVmYXVsdHMuIEZvciBleGFtcGxl LCB3aG8gaW5pdGlhbGl6ZXMgdGhlIGVudHJ5IHNpemUKKDUyOjQ4KSBvZiBHSVRTX0JBU0VSPwoK Cj4gKyAgICBjYXNlIFZSRUczMihHSUNEX1BJRFIyKToKPiArICAgICAgICBpZiAoIGluZm8tPmRh YnQuc2l6ZSAhPSBEQUJUX1dPUkQgKSBnb3RvIGJhZF93aWR0aDsKPiArICAgICAgICAqciA9IHZn aWNfcmVnMzJfZXh0cmFjdChHSUNWM19HSUNEX1BJRFIyLCBpbmZvKTsKPiArICAgICAgICBicmVh azsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gMTsKPiArCj4gK2JhZF93aWR0aDoKPiArICAg IGRvbWFpbl9jcmFzaF9zeW5jaHJvbm91cygpOwo+ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4g Kwo+ICsvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCj4gKyAqIElUUyByZWdpc3RlcnMg d3JpdGUgYWNjZXNzICoKPiArICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KPiArCj4g K3N0YXRpYyBpbnQgaXRzX2Jhc2VyX3RhYmxlX3NpemUodWludDY0X3QgYmFzZXIpCj4gK3sKPiAr ICAgIGludCBwYWdlX3NpemUgPSAwOwo+ICsKPiArICAgIHN3aXRjaCAoIChiYXNlciA+PiA4KSAm IDMgKQo+ICsgICAgewo+ICsgICAgY2FzZSAwOiBwYWdlX3NpemUgPSBTWl80SzsgYnJlYWs7Cj4g KyAgICBjYXNlIDE6IHBhZ2Vfc2l6ZSA9IFNaXzE2SzsgYnJlYWs7Cj4gKyAgICBjYXNlIDI6Cj4g KyAgICBjYXNlIDM6IHBhZ2Vfc2l6ZSA9IFNaXzY0SzsgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsg ICAgcmV0dXJuIHBhZ2Vfc2l6ZSAqICgoYmFzZXIgJiBHRU5NQVNLKDcsIDApKSArIDEpOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGl0c19iYXNlcl9ucl9lbnRyaWVzKHVpbnQ2NF90IGJhc2VyKQo+ ICt7Cj4gKyAgICBpbnQgZW50cnlfc2l6ZSA9ICgoYmFzZXIgJiBHRU5NQVNLKDUyLCA0OCkpID4+ IDQ4KSArIDE7Cj4gKwo+ICsgICAgcmV0dXJuIGl0c19iYXNlcl90YWJsZV9zaXplKGJhc2VyKSAv IGVudHJ5X3NpemU7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgdmdpY192M19pdHNfbW1pb193cml0 ZShzdHJ1Y3QgdmNwdSAqdiwgbW1pb19pbmZvX3QgKmluZm8sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWdpc3Rlcl90IHIsIHZvaWQgKnByaXYpCj4gK3sKPiArICAgIHN0 cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW47Cj4gKyAgICBzdHJ1Y3QgdmlydF9pdHMgKml0cyA9 IHByaXY7Cj4gKyAgICB1aW50NjRfdCByZWc7Cj4gKyAgICB1aW50MzJfdCBjdGxyOwo+ICsKPiAr ICAgIHN3aXRjaCAoIGluZm8tPmdwYSAmIDB4ZmZmZiApCj4gKyAgICB7Cj4gKyAgICBjYXNlIFZS RUczMihHSVRTX0NUTFIpOgo+ICsgICAgICAgIGN0bHIgPSBpdHMtPmVuYWJsZWQgPyBHSVRTX0NU TFJfRU5BQkxFIDogMDsKPiArICAgICAgICBpZiAoIGluZm8tPmRhYnQuc2l6ZSAhPSBEQUJUX1dP UkQgKSBnb3RvIGJhZF93aWR0aDsKPiArCXZnaWNfcmVnMzJfdXBkYXRlKCZjdGxyLCByLCBpbmZv KTsKPiArCWl0cy0+ZW5hYmxlZCA9IGN0bHIgJiBHSVRTX0NUTFJfRU5BQkxFOwo+ICsJLyogVE9E TzogdHJpZ2dlciBzb21ldGhpbmcgLi4uICovCgppbmRlbnRhdGlvbgoKCgo+ICsgICAgICAgIHJl dHVybiAxOwo+ICsgICAgY2FzZSBWUkVHMzIoR0lUU19JSURSKToKPiArICAgICAgICBnb3RvIHdy aXRlX2lnbm9yZV8zMjsKPiArICAgIGNhc2UgVlJFRzMyKEdJVFNfVFlQRVIpOgo+ICsgICAgICAg IGdvdG8gd3JpdGVfaWdub3JlXzMyOwo+ICsgICAgY2FzZSBWUkVHNjQoR0lUU19DQkFTRVIpOgo+ ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lk dGg7Cj4gKwo+ICsgICAgICAgIC8qIENoYW5naW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGggdGhlIElU UyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUuICovCj4gKyAgICAgICAgaWYgKCBpdHMtPmVuYWJs ZWQgKQoKSXQgaXMgd29ydGggcHJpbnRpbmcgYW4gZXJyb3IgKGdkcHJpbnRrKS4KCgo+ICsgICAg ICAgICAgICByZXR1cm4gMTsKPiArCj4gKyAgICAgICAgcmVnID0gaXRzLT5jYmFzZXI7Cj4gKyAg ICAgICAgdmdpY19yZWc2NF91cGRhdGUoJnJlZywgciwgaW5mbyk7Cj4gKyAgICAgICAgLyogVE9E Tzogc2FuaXRpc2UhICovCgpZZWFoLCB3ZSByZWFsbHkgbmVlZCB0byBkbyB0aGF0IDotKQoKCj4g KyAgICAgICAgaXRzLT5jYmFzZXIgPSByZWc7Cj4gKwo+ICsgICAgICAgIGlmICggcmVnICYgQklU KDYzKSApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpdHMtPmNtZGJ1ZiA9IG1hcF9ndWVz dF9wYWdlcyhkLCByZWcgJiBHRU5NQVNLKDUxLCAxMiksIDEpOwoKVGhpcyBpcyBvbmx5IG9uZSBw YWdlLCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZSB0aGUgdm1hcC4KCgo+ICsgICAgICAgIH0KPiAr ICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICB1bm1hcF9ndWVzdF9wYWdl cyhpdHMtPmNtZGJ1ZiwgMSk7Cj4gKyAgICAgICAgICAgIGl0cy0+Y21kYnVmID0gTlVMTDsKPiAr ICAgICAgICB9Cj4gKwo+ICsJcmV0dXJuIDE7CgppbmRlbnRhdGlvbgoKCj4gKyAgICBjYXNlIFZS RUc2NChHSVRTX0NXUklURVIpOgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5zaXplIDwgREFC VF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICAgICAgcmVnID0gaXRzLT5jd3JpdGVyOwo+ ICsgICAgICAgIHZnaWNfcmVnNjRfdXBkYXRlKCZyZWcsIHIsIGluZm8pOwo+ICsgICAgICAgIHZn aWNfaXRzX2hhbmRsZV9jbWRzKGQsIGl0cywgcmVnKTsKPiArICAgICAgICByZXR1cm4gMTsKPiAr ICAgIGNhc2UgVlJFRzY0KEdJVFNfQ1JFQURSKToKPiArICAgICAgICBnb3RvIHdyaXRlX2lnbm9y ZV82NDsKPiArICAgIGNhc2UgVlJFRzY0KEdJVFNfQkFTRVIwKToKPiArICAgICAgICBpZiAoIGlu Zm8tPmRhYnQuc2l6ZSA8IERBQlRfV09SRCApIGdvdG8gYmFkX3dpZHRoOwo+ICsKPiArICAgICAg ICAvKiBDaGFuZ2luZyBiYXNlIHJlZ2lzdGVycyB3aXRoIHRoZSBJVFMgZW5hYmxlZCBpcyBVTlBS RURJQ1RBQkxFLiAqLwo+ICsgICAgICAgIGlmICggaXRzLT5lbmFibGVkICkKCnBsZWFzZSBhZGQg YSB3YXJuaW5nCgoKPiArICAgICAgICAgICAgcmV0dXJuIDE7Cj4gKwo+ICsgICAgICAgIHJlZyA9 IGl0cy0+YmFzZXIwOwo+ICsgICAgICAgIHZnaWNfcmVnNjRfdXBkYXRlKCZyZWcsIHIsIGluZm8p Owo+ICsKPiArICAgICAgICByZWcgJj0gfkdJVFNfQkFTRVJfUk9fTUFTSzsKPiArICAgICAgICBy ZWcgfD0gKHNpemVvZih1aW50NjRfdCkgLSAxKSA8PCBHSVRTX0JBU0VSX0VOVFJZX1NJWkVfU0hJ RlQ7Cj4gKyAgICAgICAgcmVnIHw9IEdJVFNfQkFTRVJfVFlQRV9ERVZJQ0UgPDwgR0lUU19CQVNF Ul9UWVBFX1NISUZUOwoKV2h5IG5vdCB8IHdpdGggaXRzLT5iYXNlcjA/CgoKPiArICAgICAgICAv KiBUT0RPOiBzYW5pdGlzZSEgKi8KCkluZGVlZAoKCj4gKyAgICAgICAgLyogVE9ETzogbG9ja2lu Zyg/KSAqLwoKdklUUyBzdHVmZiBjYW4gYmUgbW9kaWZpZWQgY29uY3VycmVudGx5IGJ5IHR3byBv ciBtb3JlIHZDUFVzLCBzbwphbnl0aGluZyB0aGF0IGNoYW5nZXMgYSBzaGFyZWQgc3RhdGUgYWNj ZXNzaWJsZSBieSBtdWx0aXBsZSB2Q1BVcyBuZWVkIGEKbG9jay4KCgo+ICsgICAgICAgIGlmICgg cmVnICYgR0lUU19CQVNFUl9WQUxJRCApCj4gKyAgICAgICAgewo+ICsgICAgICAgICAgICBpdHMt PmRldl90YWJsZSA9IG1hcF9ndWVzdF9wYWdlcyhkLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBnZXRfYmFzZXJfcGh5c19hZGRyKHJlZyksCj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0c19iYXNlcl90YWJsZV9z aXplKHJlZykgPj4gUEFHRV9TSElGVCk7Cj4gKyAgICAgICAgICAgIGl0cy0+bWF4X2RldmljZXMg PSBpdHNfYmFzZXJfbnJfZW50cmllcyhyZWcpOwo+ICsgICAgICAgICAgICBtZW1zZXQoaXRzLT5k ZXZfdGFibGUsIDAsIGl0cy0+bWF4X2RldmljZXMgKiBzaXplb2YodWludDY0X3QpKTsKPiArICAg ICAgICB9Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdW5tYXBf Z3Vlc3RfcGFnZXMoaXRzLT5kZXZfdGFibGUsCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGl0c19iYXNlcl90YWJsZV9zaXplKHJlZykgPj4gUEFHRV9TSElGVCk7Cj4gKyAgICAgICAg ICAgIGl0cy0+bWF4X2RldmljZXMgPSAwOwo+ICsgICAgICAgIH0KPiArCj4gKyAgICAgICAgaXRz LT5iYXNlcjAgPSByZWc7Cj4gKyAgICAgICAgcmV0dXJuIDE7Cj4gKyAgICBjYXNlIFZSRUc2NChH SVRTX0JBU0VSMSk6CgpXZSBuZWVkIHRvIGJlIGFibGUgdG8gc2hhcmUgdGhpcyBjb2RlIHdpdGgg dGhlIEdJVFNfQkFTRVIwIGNhc2UgYWJvdmUKCgo+ICsgICAgICAgIGlmICggaW5mby0+ZGFidC5z aXplIDwgREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKwo+ICsgICAgICAgIC8qIENoYW5n aW5nIGJhc2UgcmVnaXN0ZXJzIHdpdGggdGhlIElUUyBlbmFibGVkIGlzIFVOUFJFRElDVEFCTEUu ICovCj4gKyAgICAgICAgaWYgKCBpdHMtPmVuYWJsZWQgKQo+ICsgICAgICAgICAgICByZXR1cm4g MTsKPiArCj4gKyAgICAgICAgcmVnID0gaXRzLT5iYXNlcjE7Cj4gKyAgICAgICAgdmdpY19yZWc2 NF91cGRhdGUoJnJlZywgciwgaW5mbyk7Cj4gKyAgICAgICAgcmVnICY9IH5HSVRTX0JBU0VSX1JP X01BU0s7Cj4gKyAgICAgICAgcmVnIHw9IChzaXplb2YodWludDE2X3QpIC0gMSkgPDwgR0lUU19C QVNFUl9FTlRSWV9TSVpFX1NISUZUOwo+ICsgICAgICAgIHJlZyB8PSBHSVRTX0JBU0VSX1RZUEVf Q09MTEVDVElPTiA8PCBHSVRTX0JBU0VSX1RZUEVfU0hJRlQ7Cj4gKyAgICAgICAgLyogVE9ETzog c2FuaXRpc2UhICovCj4gKwo+ICsgICAgICAgIC8qIFRPRE86IHNvcnQgb3V0IGxvY2tpbmcgKi8K PiArICAgICAgICAvKiBUT0RPOiByZXBlYXRlZCBjYWxsczogZnJlZSBvbGQgbWFwcGluZyAqLwo+ ICsgICAgICAgIGlmICggcmVnICYgR0lUU19CQVNFUl9WQUxJRCApCj4gKyAgICAgICAgewo+ICsg ICAgICAgICAgICBpdHMtPmNvbGxfdGFibGUgPSBtYXBfZ3Vlc3RfcGFnZXMoZCwgZ2V0X2Jhc2Vy X3BoeXNfYWRkcihyZWcpLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaXRzX2Jhc2VyX3RhYmxlX3NpemUocmVnKSA+PiBQQUdFX1NISUZUKTsKPiArICAg ICAgICAgICAgaXRzLT5tYXhfY29sbGVjdGlvbnMgPSBpdHNfYmFzZXJfbnJfZW50cmllcyhyZWcp Owo+ICsgICAgICAgICAgICBtZW1zZXQoaXRzLT5jb2xsX3RhYmxlLCAweGZmLAo+ICsgICAgICAg ICAgICAgICAgICAgaXRzLT5tYXhfY29sbGVjdGlvbnMgKiBzaXplb2YodWludDE2X3QpKTsKPiAr ICAgICAgICB9Cj4gKyAgICAgICAgZWxzZQo+ICsgICAgICAgIHsKPiArICAgICAgICAgICAgdW5t YXBfZ3Vlc3RfcGFnZXMoaXRzLT5jb2xsX3RhYmxlLAo+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpdHNfYmFzZXJfdGFibGVfc2l6ZShyZWcpID4+IFBBR0VfU0hJRlQpOwo+ICsgICAg ICAgICAgICBpdHMtPm1heF9jb2xsZWN0aW9ucyA9IDA7Cj4gKyAgICAgICAgfQo+ICsgICAgICAg IGl0cy0+YmFzZXIxID0gcmVnOwo+ICsgICAgICAgIHJldHVybiAxOwo+ICsgICAgY2FzZSBWUkFO R0U2NChHSVRTX0JBU0VSMiwgR0lUU19CQVNFUjcpOgo+ICsgICAgICAgIGdvdG8gd3JpdGVfaWdu b3JlXzY0Owo+ICsgICAgZGVmYXVsdDoKPiArICAgICAgICBnZHByaW50ayhYRU5MT0dfR19XQVJO SU5HLCAiSVRTOiB1bmhhbmRsZWQgSVRTIHJlZ2lzdGVyIDB4JWx4XG4iLAo+ICsgICAgICAgICAg ICAgICAgIGluZm8tPmdwYSAmIDB4ZmZmZik7Cj4gKyAgICAgICAgcmV0dXJuIDA7Cj4gKyAgICB9 Cj4gKwo+ICsgICAgcmV0dXJuIDE7Cj4gKwo+ICt3cml0ZV9pZ25vcmVfNjQ6Cj4gKyAgICBpZiAo ICEgdmdpY19yZWc2NF9jaGVja19hY2Nlc3MoaW5mby0+ZGFidCkgKSBnb3RvIGJhZF93aWR0aDsK PiArICAgIHJldHVybiAxOwo+ICsKPiArd3JpdGVfaWdub3JlXzMyOgo+ICsgICAgaWYgKCBpbmZv LT5kYWJ0LnNpemUgIT0gREFCVF9XT1JEICkgZ290byBiYWRfd2lkdGg7Cj4gKyAgICByZXR1cm4g MTsKPiArCj4gK2JhZF93aWR0aDoKPiArICAgIHByaW50ayhYRU5MT0dfR19FUlIgIiVwdiB2R0lD UjogYmFkIHJlYWQgd2lkdGggJWQgciVkIG9mZnNldCAlIzA4bHhcbiIsCj4gKyAgICAgICAgICAg diwgaW5mby0+ZGFidC5zaXplLCBpbmZvLT5kYWJ0LnJlZywgaW5mby0+Z3BhICYgMHhmZmZmKTsK PiArCj4gKyAgICBkb21haW5fY3Jhc2hfc3luY2hyb25vdXMoKTsKPiArCj4gKyAgICByZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBtbWlvX2hhbmRsZXJfb3BzIHZnaWNf aXRzX21taW9faGFuZGxlciA9IHsKPiArICAgIC5yZWFkICA9IHZnaWNfdjNfaXRzX21taW9fcmVh ZCwKPiArICAgIC53cml0ZSA9IHZnaWNfdjNfaXRzX21taW9fd3JpdGUsCj4gK307Cj4gKwo+ICsv Kgo+ICsgKiBMb2NhbCB2YXJpYWJsZXM6Cj4gKyAqIG1vZGU6IEMKPiArICogYy1maWxlLXN0eWxl OiAiQlNEIgo+ICsgKiBjLWJhc2ljLW9mZnNldDogNAo+ICsgKiBpbmRlbnQtdGFicy1tb2RlOiBu aWwKPiArICogRW5kOgo+ICsgKi8KPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3ZnaWMtdjMu YyBiL3hlbi9hcmNoL2FybS92Z2ljLXYzLmMKPiBpbmRleCA4ZmU4Mzg2Li5hYTUzYTFlIDEwMDY0 NAo+IC0tLSBhL3hlbi9hcmNoL2FybS92Z2ljLXYzLmMKPiArKysgYi94ZW4vYXJjaC9hcm0vdmdp Yy12My5jCj4gQEAgLTE1OCwxNSArMTU4LDYgQEAgc3RhdGljIHZvaWQgdmdpY19zdG9yZV9pcm91 dGVyKHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCB2Z2ljX2lycV9yYW5rICpyYW5rLAo+ICAgICAg cmFuay0+dmNwdVtvZmZzZXRdID0gbmV3X3ZjcHUtPnZjcHVfaWQ7Cj4gIH0KPiAgCj4gLXN0YXRp YyBpbmxpbmUgYm9vbCB2Z2ljX3JlZzY0X2NoZWNrX2FjY2VzcyhzdHJ1Y3QgaHNyX2RhYnQgZGFi dCkKPiAtewo+IC0gICAgLyoKPiAtICAgICAqIDY0IGJpdHMgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nl c3NpYmxlIHVzaW5nIDMyLWJpdCBhbmQgNjQtYml0IHVubGVzcwo+IC0gICAgICogc3RhdGVkIG90 aGVyd2lzZSAoU2VlIDguMS4zIEFSTSBJSEkgMDA2OUEpLgo+IC0gICAgICovCj4gLSAgICByZXR1 cm4gKCBkYWJ0LnNpemUgPT0gREFCVF9ET1VCTEVfV09SRCB8fCBkYWJ0LnNpemUgPT0gREFCVF9X T1JEICk7Cj4gLX0KPiAtCj4gIHN0YXRpYyBpbnQgX192Z2ljX3YzX3JkaXN0cl9yZF9tbWlvX3Jl YWQoc3RydWN0IHZjcHUgKnYsIG1taW9faW5mb190ICppbmZvLAo+ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGdpY3JfcmVnLAo+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyX3QgKnIpCj4gZGlmZiAtLWdp dCBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vZ2ljX3YzX2RlZnMuaCBiL3hlbi9pbmNsdWRlL2FzbS1h cm0vZ2ljX3YzX2RlZnMuaAo+IGluZGV4IGRhNWZiNzcuLjZhOTFmNWIgMTAwNjQ0Cj4gLS0tIGEv eGVuL2luY2x1ZGUvYXNtLWFybS9naWNfdjNfZGVmcy5oCj4gKysrIGIveGVuL2luY2x1ZGUvYXNt LWFybS9naWNfdjNfZGVmcy5oCj4gQEAgLTE0Nyw2ICsxNDcsMTYgQEAKPiAgI2RlZmluZSBMUElf UFJPUF9SRVMxICAgICAgICAgICAgICAgICgxIDw8IDEpCj4gICNkZWZpbmUgTFBJX1BST1BfRU5B QkxFRCAgICAgICAgICAgICAoMSA8PCAwKQo+ICAKPiArLyoKPiArICogUElEUjI6IE9ubHkgYml0 c1s3OjRdIGFyZSBub3QgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gV2UgYXJlCj4gKyAqIGVtdWxh dGluZyBhIEdJQ3YzIChbNzo0XSA9IDB4MykuCj4gKyAqCj4gKyAqIFdlIGRvbid0IGVtdWxhdGUg YSBzcGVjaWZpYyByZWdpc3RlcnMgc2NoZW1lIHNvIGltcGxlbWVudCB0aGUgb3RoZXJzCj4gKyAq IGJpdHMgYXMgUkVTMCBhcyByZWNvbW1lbmRlZCBieSB0aGUgc3BlYyAoc2VlIDguMS4xMyBpbiBB Uk0gSUhJIDAwNjlBKS4KPiArICovCj4gKyNkZWZpbmUgR0lDVjNfR0lDRF9QSURSMiAgMHgzMAo+ ICsjZGVmaW5lIEdJQ1YzX0dJQ1JfUElEUjIgIEdJQ1YzX0dJQ0RfUElEUjIKPiArCj4gICNkZWZp bmUgR0lDSF9WTUNSX0VPSSAgICAgICAgICAgICAgICAoMSA8PCA5KQo+ICAjZGVmaW5lIEdJQ0hf Vk1DUl9WRU5HMSAgICAgICAgICAgICAgKDEgPDwgMSkKPiAgCj4gQEAgLTE5MCw2ICsyMDAsMTUg QEAgc3RydWN0IHJkaXN0X3JlZ2lvbiB7Cj4gICAgICBib29sIHNpbmdsZV9yZGlzdDsKPiAgfTsK PiAgCj4gKy8qCj4gKyAqIDY0IGJpdHMgcmVnaXN0ZXJzIGNhbiBiZSBhY2Nlc3NpYmxlIHVzaW5n IDMyLWJpdCBhbmQgNjQtYml0IHVubGVzcwo+ICsgKiBzdGF0ZWQgb3RoZXJ3aXNlIChTZWUgOC4x LjMgQVJNIElISSAwMDY5QSkuCj4gKyAqLwo+ICtzdGF0aWMgaW5saW5lIGJvb2wgdmdpY19yZWc2 NF9jaGVja19hY2Nlc3Moc3RydWN0IGhzcl9kYWJ0IGRhYnQpCj4gK3sKPiArICAgIHJldHVybiAo IGRhYnQuc2l6ZSA9PSBEQUJUX0RPVUJMRV9XT1JEIHx8IGRhYnQuc2l6ZSA9PSBEQUJUX1dPUkQg KTsKPiArfQo+ICsKPiAgI2VuZGlmIC8qIF9fQVNNX0FSTV9HSUNfVjNfREVGU19IX18gKi8KPiAg Cj4gIC8qCj4gLS0gCj4gMi45LjAKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=