From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:55067) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5ESh-0003bh-7r for qemu-devel@nongnu.org; Sun, 18 Sep 2011 06:19:02 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1R5ESd-0002CK-DL for qemu-devel@nongnu.org; Sun, 18 Sep 2011 06:18:59 -0400 Received: from mail-qy0-f180.google.com ([209.85.216.180]:35655) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1R5ESc-0002C3-WA for qemu-devel@nongnu.org; Sun, 18 Sep 2011 06:18:55 -0400 Received: by qyc1 with SMTP id 1so5074966qyc.4 for ; Sun, 18 Sep 2011 03:18:54 -0700 (PDT) MIME-Version: 1.0 In-Reply-To: <1316289634-18786-5-git-send-email-weil@mail.berlios.de> References: <4E74FC29.1050003@mail.berlios.de> <1316289634-18786-5-git-send-email-weil@mail.berlios.de> From: Blue Swirl Date: Sun, 18 Sep 2011 10:18:32 +0000 Message-ID: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 Subject: Re: [Qemu-devel] [PATCH 5/8] tcg: Add interpreter for bytecode List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Stefan Weil Cc: QEMU Developers T24gU2F0LCBTZXAgMTcsIDIwMTEgYXQgODowMCBQTSwgU3RlZmFuIFdlaWwgPHdlaWxAbWFpbC5i ZXJsaW9zLmRlPiB3cm90ZToKPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4gV2VpbCA8d2VpbEBtYWls LmJlcmxpb3MuZGU+Cj4gLS0tCj4gwqB0Y2cvdGNnLmggfCDCoCDCoDQgKy0KPiDCoHRjZy90Y2ku YyB8IDEyMDAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwo+IMKgMiBmaWxlcyBjaGFuZ2VkLCAxMjAzIGluc2VydGlvbnMoKyksIDEg ZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUgbW9kZSAxMDA2NDQgdGNnL3RjaS5jCj4KPiBkaWZmIC0t Z2l0IGEvdGNnL3RjZy5oIGIvdGNnL3RjZy5oCj4gaW5kZXggMTg1OWZhZS4uYzk5YzdlYSAxMDA2 NDQKPiAtLS0gYS90Y2cvdGNnLmgKPiArKysgYi90Y2cvdGNnLmgKPiBAQCAtNTc3LDcgKzU3Nyw5 IEBAIFRDR3ZfaTMyIHRjZ19jb25zdF9sb2NhbF9pMzIoaW50MzJfdCB2YWwpOwo+IMKgVENHdl9p NjQgdGNnX2NvbnN0X2xvY2FsX2k2NChpbnQ2NF90IHZhbCk7Cj4KPiDCoGV4dGVybiB1aW50OF90 IGNvZGVfZ2VuX3Byb2xvZ3VlW107Cj4gLSNpZiBkZWZpbmVkKF9BUkNIX1BQQykgJiYgIWRlZmlu ZWQoX0FSQ0hfUFBDNjQpCj4gKyNpZiBkZWZpbmVkKENPTkZJR19UQ0dfSU5URVJQUkVURVIpCj4g K3Vuc2lnbmVkIGxvbmcgdGNnX3FlbXVfdGJfZXhlYyhDUFVTdGF0ZSAqZW52LCB1aW50OF90ICp0 Yl9wdHIpOwo+ICsjZWxpZiBkZWZpbmVkKF9BUkNIX1BQQykgJiYgIWRlZmluZWQoX0FSQ0hfUFBD NjQpCj4gwqAjZGVmaW5lIHRjZ19xZW11X3RiX2V4ZWMoZW52LCB0Yl9wdHIpIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgXAo+IMKgIMKgICgobG9u ZyBSRUdQQVJNIF9fYXR0cmlidXRlX18gKChsb25nY2FsbCkpICgqKSh2b2lkICosIHZvaWQgKikp Y29kZV9nZW5fcHJvbG9ndWUpKGVudiwgdGJfcHRyKQo+IMKgI2Vsc2UKPiBkaWZmIC0tZ2l0IGEv dGNnL3RjaS5jIGIvdGNnL3RjaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi5lZWE5OTkyCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3RjZy90Y2kuYwo+IEBAIC0wLDAg KzEsMTIwMCBAQAo+ICsvKgo+ICsgKiBUaW55IENvZGUgSW50ZXJwcmV0ZXIgZm9yIFFFTVUKPiAr ICoKPiArICogQ29weXJpZ2h0IChjKSAyMDA5LCAyMDExIFN0ZWZhbiBXZWlsCj4gKyAqCj4gKyAq IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5Cj4gKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cj4gKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCj4gKyAqIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCj4gKyAqCj4gKyAqIFRoaXMgcHJvZ3JhbSBp cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAo+ICsgKiBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50 eSBvZgo+ICsgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UuIMKgU2VlIHRoZQo+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y ZSBkZXRhaWxzLgo+ICsgKgo+ICsgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQo+ICsgKiBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbS4gwqBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCj4gKyAq Lwo+ICsKPiArI2luY2x1ZGUgImNvbmZpZy5oIgo+ICsjaW5jbHVkZSAicWVtdS1jb21tb24uaCIK PiArI2luY2x1ZGUgImV4ZWMtYWxsLmgiIMKgIMKgIMKgIMKgIMKgIC8qIE1BWF9PUENfUEFSQU1f SUFSR1MgKi8KPiArI2luY2x1ZGUgInRjZy1vcC5oIgo+ICsKPiArLyogTWFya2VyIGZvciBtaXNz aW5nIGNvZGUuICovCj4gKyNkZWZpbmUgVE9ETygpIFwKPiArIMKgIMKgZG8geyBcCj4gKyDCoCDC oCDCoCDCoGZwcmludGYoc3RkZXJyLCAiVE9ETyAlczoldTogJXMoKVxuIiwgXAo+ICsgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqBfX0ZJTEVfXywgX19MSU5FX18sIF9fZnVuY19fKTsgXAo+ICsgwqAg wqAgwqAgwqB0Y2dfYWJvcnQoKTsgXAo+ICsgwqAgwqB9IHdoaWxlICgwKQo+ICsKPiArLyogVHJh Y2UgbWVzc2FnZSB0byBzZWUgcHJvZ3JhbSBmbG93LiAqLwo+ICsjaWYgZGVmaW5lZChDT05GSUdf REVCVUdfVENHX0lOVEVSUFJFVEVSKQo+ICsjZGVmaW5lIFRSQUNFKCkgXAo+ICsgwqAgwqBsb2ds ZXZlbCBcCj4gKyDCoCDCoD8gZnByaW50ZihzdGRlcnIsICJUQ0cgJXM6JXU6ICVzKClcbiIsIF9f RklMRV9fLCBfX0xJTkVfXywgX19mdW5jX18pIFwKPiArIMKgIMKgOiAodm9pZCkwCj4gKyNlbHNl Cj4gKyNkZWZpbmUgVFJBQ0UoKSAoKHZvaWQpMCkKPiArI2VuZGlmCgpUaGUgbWFjcm9zIG11c3Qg dXNlIGRvIHsgfSB3aGlsZSgwKSwgYnV0IGlubGluZSBmdW5jdGlvbiB3b3VsZCBiZQpwcmVmZXJy ZWQgb3ZlciB0aG9zZSBhcyB3ZWxsIGFzIHRyYWNlcG9pbnRzLgoKPiArCj4gKyNpZiBNQVhfT1BD X1BBUkFNX0lBUkdTICE9IDQKPiArIyBlcnJvciBGaXggbmVlZGVkLCBudW1iZXIgb2Ygc3VwcG9y dGVkIGlucHV0IGFyZ3VtZW50cyBjaGFuZ2VkIQo+ICsjZW5kaWYKPiArI2lmIFRDR19UQVJHRVRf UkVHX0JJVFMgPT0gMzIKPiArdHlwZWRlZiB1aW50NjRfdCAoKmhlbHBlcl9mdW5jdGlvbikodGNn X3RhcmdldF91bG9uZywgdGNnX3RhcmdldF91bG9uZywKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGNnX3RhcmdldF91bG9uZywgdGNnX3Rh cmdldF91bG9uZywKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgdGNnX3RhcmdldF91bG9uZywgdGNnX3RhcmdldF91bG9uZywKPiArIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdGNnX3Rhcmdl dF91bG9uZywgdGNnX3RhcmdldF91bG9uZyk7Cj4gKyNlbHNlCj4gK3R5cGVkZWYgdWludDY0X3Qg KCpoZWxwZXJfZnVuY3Rpb24pKHRjZ190YXJnZXRfdWxvbmcsIHRjZ190YXJnZXRfdWxvbmcsCj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRj Z190YXJnZXRfdWxvbmcsIHRjZ190YXJnZXRfdWxvbmcpOwo+ICsjZW5kaWYKPiArCj4gK0NQVVN0 YXRlICplbnY7Cj4gKwo+ICsvKiBBbHBoYSBhbmQgU0g0IHVzZXIgbW9kZSBlbXVsYXRpb25zIGNh bGwgR0VUUEMoKSwgc28gdGhleSBuZWVkIHRjaV90Yl9wdHIuICovCj4gKyNpZiBkZWZpbmVkKENP TkZJR19TT0ZUTU1VKSB8fCBkZWZpbmVkKFRBUkdFVF9BTFBIQSkgfHwgZGVmaW5lZChUQVJHRVRf U0g0KQo+ICsjIGRlZmluZSBORUVEU19UQl9QVFIKClRoaXMgc2hvdWxkIGJlICNkZWZpbmVkIGlu IHRhcmdldC1hbHBoYS9jcHUuaCBldGMuIG9yIGR5bmdlbi1leGVjLmguCgo+ICsjZW5kaWYKPiAr Cj4gKyNpZmRlZiBORUVEU19UQl9QVFIKPiArdWludDhfdCAqdGNpX3RiX3B0cjsKPiArI2VuZGlm Cj4gKwo+ICtzdGF0aWMgdGNnX3RhcmdldF91bG9uZyB0Y2lfcmVnW1RDR19UQVJHRVRfTkJfUkVH U107Cj4gKwo+ICtzdGF0aWMgdGNnX3RhcmdldF91bG9uZyB0Y2lfcmVhZF9yZWcoVENHUmVnaXN0 ZXIgaW5kZXgpCj4gK3sKPiArIMKgIMKgYXNzZXJ0KGluZGV4IDwgQVJSQVlfU0laRSh0Y2lfcmVn KSk7Cj4gKyDCoCDCoHJldHVybiB0Y2lfcmVnW2luZGV4XTsKPiArfQo+ICsKPiArI2lmIFRDR19U QVJHRVRfSEFTX2V4dDhzX2kzMiB8fCBUQ0dfVEFSR0VUX0hBU19leHQ4c19pNjQKPiArc3RhdGlj IGludDhfdCB0Y2lfcmVhZF9yZWc4cyhUQ0dSZWdpc3RlciBpbmRleCkKPiArewo+ICsgwqAgwqBy ZXR1cm4gKGludDhfdCl0Y2lfcmVhZF9yZWcoaW5kZXgpOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiAr I2lmIFRDR19UQVJHRVRfSEFTX2V4dDE2c19pMzIgfHwgVENHX1RBUkdFVF9IQVNfZXh0MTZzX2k2 NAo+ICtzdGF0aWMgaW50MTZfdCB0Y2lfcmVhZF9yZWcxNnMoVENHUmVnaXN0ZXIgaW5kZXgpCj4g K3sKPiArIMKgIMKgcmV0dXJuIChpbnQxNl90KXRjaV9yZWFkX3JlZyhpbmRleCk7Cj4gK30KPiAr I2VuZGlmCj4gKwo+ICsjaWYgVENHX1RBUkdFVF9SRUdfQklUUyA9PSA2NAo+ICtzdGF0aWMgaW50 MzJfdCB0Y2lfcmVhZF9yZWczMnMoVENHUmVnaXN0ZXIgaW5kZXgpCj4gK3sKPiArIMKgIMKgcmV0 dXJuIChpbnQzMl90KXRjaV9yZWFkX3JlZyhpbmRleCk7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtz dGF0aWMgdWludDhfdCB0Y2lfcmVhZF9yZWc4KFRDR1JlZ2lzdGVyIGluZGV4KQo+ICt7Cj4gKyDC oCDCoHJldHVybiAodWludDhfdCl0Y2lfcmVhZF9yZWcoaW5kZXgpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdWludDE2X3QgdGNpX3JlYWRfcmVnMTYoVENHUmVnaXN0ZXIgaW5kZXgpCj4gK3sKPiArIMKg IMKgcmV0dXJuICh1aW50MTZfdCl0Y2lfcmVhZF9yZWcoaW5kZXgpOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgdWludDMyX3QgdGNpX3JlYWRfcmVnMzIoVENHUmVnaXN0ZXIgaW5kZXgpCj4gK3sKPiArIMKg IMKgcmV0dXJuICh1aW50MzJfdCl0Y2lfcmVhZF9yZWcoaW5kZXgpOwo+ICt9Cj4gKwo+ICsjaWYg VENHX1RBUkdFVF9SRUdfQklUUyA9PSA2NAo+ICtzdGF0aWMgdWludDY0X3QgdGNpX3JlYWRfcmVn NjQoVENHUmVnaXN0ZXIgaW5kZXgpCj4gK3sKPiArIMKgIMKgcmV0dXJuIHRjaV9yZWFkX3JlZyhp bmRleCk7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtzdGF0aWMgdm9pZCB0Y2lfd3JpdGVfcmVnKFRD R1JlZ2lzdGVyIGluZGV4LCB0Y2dfdGFyZ2V0X3Vsb25nIHZhbHVlKQo+ICt7Cj4gKyDCoCDCoGFz c2VydChpbmRleCA8IEFSUkFZX1NJWkUodGNpX3JlZykpOwo+ICsgwqAgwqBhc3NlcnQoaW5kZXgg IT0gVENHX0FSRUcwKTsKPiArIMKgIMKgdGNpX3JlZ1tpbmRleF0gPSB2YWx1ZTsKPiArfQo+ICsK PiArc3RhdGljIHZvaWQgdGNpX3dyaXRlX3JlZzhzKFRDR1JlZ2lzdGVyIGluZGV4LCBpbnQ4X3Qg dmFsdWUpCj4gK3sKPiArIMKgIMKgdGNpX3dyaXRlX3JlZyhpbmRleCwgdmFsdWUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB0Y2lfd3JpdGVfcmVnMTZzKFRDR1JlZ2lzdGVyIGluZGV4LCBpbnQx Nl90IHZhbHVlKQo+ICt7Cj4gKyDCoCDCoHRjaV93cml0ZV9yZWcoaW5kZXgsIHZhbHVlKTsKPiAr fQo+ICsKPiArI2lmIFRDR19UQVJHRVRfUkVHX0JJVFMgPT0gNjQKPiArc3RhdGljIHZvaWQgdGNp X3dyaXRlX3JlZzMycyhUQ0dSZWdpc3RlciBpbmRleCwgaW50MzJfdCB2YWx1ZSkKPiArewo+ICsg wqAgwqB0Y2lfd3JpdGVfcmVnKGluZGV4LCB2YWx1ZSk7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICtz dGF0aWMgdm9pZCB0Y2lfd3JpdGVfcmVnOChUQ0dSZWdpc3RlciBpbmRleCwgdWludDhfdCB2YWx1 ZSkKPiArewo+ICsgwqAgwqB0Y2lfd3JpdGVfcmVnKGluZGV4LCB2YWx1ZSk7Cj4gK30KPiArCj4g K3N0YXRpYyB2b2lkIHRjaV93cml0ZV9yZWcxNihUQ0dSZWdpc3RlciBpbmRleCwgdWludDE2X3Qg dmFsdWUpCj4gK3sKPiArIMKgIMKgdGNpX3dyaXRlX3JlZyhpbmRleCwgdmFsdWUpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdm9pZCB0Y2lfd3JpdGVfcmVnMzIoVENHUmVnaXN0ZXIgaW5kZXgsIHVpbnQz Ml90IHZhbHVlKQo+ICt7Cj4gKyDCoCDCoHRjaV93cml0ZV9yZWcoaW5kZXgsIHZhbHVlKTsKPiAr fQo+ICsKPiArI2lmIFRDR19UQVJHRVRfUkVHX0JJVFMgPT0gMzIKPiArc3RhdGljIHZvaWQgdGNp X3dyaXRlX3JlZzY0KHVpbnQzMl90IGhpZ2hfaW5kZXgsIHVpbnQzMl90IGxvd19pbmRleCwKPiAr IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgdWludDY0X3QgdmFsdWUp Cj4gK3sKPiArIMKgIMKgdGNpX3dyaXRlX3JlZyhsb3dfaW5kZXgsIHZhbHVlKTsKPiArIMKgIMKg dGNpX3dyaXRlX3JlZyhoaWdoX2luZGV4LCB2YWx1ZSA+PiAzMik7Cj4gK30KPiArI2VsaWYgVENH X1RBUkdFVF9SRUdfQklUUyA9PSA2NAo+ICtzdGF0aWMgdm9pZCB0Y2lfd3JpdGVfcmVnNjQoVENH UmVnaXN0ZXIgaW5kZXgsIHVpbnQ2NF90IHZhbHVlKQo+ICt7Cj4gKyDCoCDCoHRjaV93cml0ZV9y ZWcoaW5kZXgsIHZhbHVlKTsKPiArfQo+ICsjZW5kaWYKPiArCj4gKyNpZiBUQ0dfVEFSR0VUX1JF R19CSVRTID09IDMyCj4gKy8qIENyZWF0ZSBhIDY0IGJpdCB2YWx1ZSBmcm9tIHR3byAzMiBiaXQg dmFsdWVzLiAqLwo+ICtzdGF0aWMgdWludDY0X3QgdGNpX3VpbnQ2NCh1aW50MzJfdCBoaWdoLCB1 aW50MzJfdCBsb3cpCj4gK3sKPiArIMKgIMKgcmV0dXJuICgodWludDY0X3QpaGlnaCA8PCAzMikg KyBsb3c7Cj4gK30KPiArI2VuZGlmCj4gKwo+ICsvKiBSZWFkIGNvbnN0YW50IChuYXRpdmUgc2l6 ZSkgZnJvbSBieXRlY29kZS4gKi8KPiArc3RhdGljIHRjZ190YXJnZXRfdWxvbmcgdGNpX3JlYWRf aSh1aW50OF90ICoqdGJfcHRyKQo+ICt7Cj4gKyDCoCDCoHRjZ190YXJnZXRfdWxvbmcgdmFsdWUg PSAqKHRjZ190YXJnZXRfdWxvbmcgKikoKnRiX3B0cik7Cj4gKyDCoCDCoCp0Yl9wdHIgKz0gc2l6 ZW9mKHZhbHVlKTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKwo+ICsvKiBSZWFkIGNv bnN0YW50ICgzMiBiaXQpIGZyb20gYnl0ZWNvZGUuICovCj4gK3N0YXRpYyB1aW50MzJfdCB0Y2lf cmVhZF9pMzIodWludDhfdCAqKnRiX3B0cikKPiArewo+ICsgwqAgwqB1aW50MzJfdCB2YWx1ZSA9 ICoodWludDMyX3QgKikoKnRiX3B0cik7Cj4gKyDCoCDCoCp0Yl9wdHIgKz0gc2l6ZW9mKHZhbHVl KTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKwo+ICsjaWYgVENHX1RBUkdFVF9SRUdf QklUUyA9PSA2NAo+ICsvKiBSZWFkIGNvbnN0YW50ICg2NCBiaXQpIGZyb20gYnl0ZWNvZGUuICov Cj4gK3N0YXRpYyB1aW50NjRfdCB0Y2lfcmVhZF9pNjQodWludDhfdCAqKnRiX3B0cikKPiArewo+ ICsgwqAgwqB1aW50NjRfdCB2YWx1ZSA9ICoodWludDY0X3QgKikoKnRiX3B0cik7Cj4gKyDCoCDC oCp0Yl9wdHIgKz0gc2l6ZW9mKHZhbHVlKTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4g KyNlbmRpZgo+ICsKPiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyIChuYXRpdmUgc2l6ZSkgZnJv bSBieXRlY29kZS4gKi8KPiArc3RhdGljIHRjZ190YXJnZXRfdWxvbmcgdGNpX3JlYWRfcih1aW50 OF90ICoqdGJfcHRyKQo+ICt7Cj4gKyDCoCDCoHRjZ190YXJnZXRfdWxvbmcgdmFsdWUgPSB0Y2lf cmVhZF9yZWcoKip0Yl9wdHIpOwo+ICsgwqAgwqAqdGJfcHRyICs9IDE7Cj4gKyDCoCDCoHJldHVy biB2YWx1ZTsKPiArfQo+ICsKPiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyICg4IGJpdCkgZnJv bSBieXRlY29kZS4gKi8KPiArc3RhdGljIHVpbnQ4X3QgdGNpX3JlYWRfcjgodWludDhfdCAqKnRi X3B0cikKPiArewo+ICsgwqAgwqB1aW50OF90IHZhbHVlID0gdGNpX3JlYWRfcmVnOCgqKnRiX3B0 cik7Cj4gKyDCoCDCoCp0Yl9wdHIgKz0gMTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4g Kwo+ICsjaWYgVENHX1RBUkdFVF9IQVNfZXh0OHNfaTMyIHx8IFRDR19UQVJHRVRfSEFTX2V4dDhz X2k2NAo+ICsvKiBSZWFkIGluZGV4ZWQgcmVnaXN0ZXIgKDggYml0IHNpZ25lZCkgZnJvbSBieXRl Y29kZS4gKi8KPiArc3RhdGljIGludDhfdCB0Y2lfcmVhZF9yOHModWludDhfdCAqKnRiX3B0cikK PiArewo+ICsgwqAgwqBpbnQ4X3QgdmFsdWUgPSB0Y2lfcmVhZF9yZWc4cygqKnRiX3B0cik7Cj4g KyDCoCDCoCp0Yl9wdHIgKz0gMTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKyNlbmRp Zgo+ICsKPiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyICgxNiBiaXQpIGZyb20gYnl0ZWNvZGUu ICovCj4gK3N0YXRpYyB1aW50MTZfdCB0Y2lfcmVhZF9yMTYodWludDhfdCAqKnRiX3B0cikKPiAr ewo+ICsgwqAgwqB1aW50MTZfdCB2YWx1ZSA9IHRjaV9yZWFkX3JlZzE2KCoqdGJfcHRyKTsKPiAr IMKgIMKgKnRiX3B0ciArPSAxOwo+ICsgwqAgwqByZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gKyNp ZiBUQ0dfVEFSR0VUX0hBU19leHQxNnNfaTMyIHx8IFRDR19UQVJHRVRfSEFTX2V4dDE2c19pNjQK PiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyICgxNiBiaXQgc2lnbmVkKSBmcm9tIGJ5dGVjb2Rl LiAqLwo+ICtzdGF0aWMgaW50MTZfdCB0Y2lfcmVhZF9yMTZzKHVpbnQ4X3QgKip0Yl9wdHIpCj4g K3sKPiArIMKgIMKgaW50MTZfdCB2YWx1ZSA9IHRjaV9yZWFkX3JlZzE2cygqKnRiX3B0cik7Cj4g KyDCoCDCoCp0Yl9wdHIgKz0gMTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKyNlbmRp Zgo+ICsKPiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyICgzMiBiaXQpIGZyb20gYnl0ZWNvZGUu ICovCj4gK3N0YXRpYyB1aW50MzJfdCB0Y2lfcmVhZF9yMzIodWludDhfdCAqKnRiX3B0cikKPiAr ewo+ICsgwqAgwqB1aW50MzJfdCB2YWx1ZSA9IHRjaV9yZWFkX3JlZzMyKCoqdGJfcHRyKTsKPiAr IMKgIMKgKnRiX3B0ciArPSAxOwo+ICsgwqAgwqByZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gKyNp ZiBUQ0dfVEFSR0VUX1JFR19CSVRTID09IDMyCj4gKy8qIFJlYWQgdHdvIGluZGV4ZWQgcmVnaXN0 ZXJzICgyICogMzIgYml0KSBmcm9tIGJ5dGVjb2RlLiAqLwo+ICtzdGF0aWMgdWludDY0X3QgdGNp X3JlYWRfcjY0KHVpbnQ4X3QgKip0Yl9wdHIpCj4gK3sKPiArIMKgIMKgdWludDMyX3QgbG93ID0g dGNpX3JlYWRfcjMyKHRiX3B0cik7Cj4gKyDCoCDCoHJldHVybiB0Y2lfdWludDY0KHRjaV9yZWFk X3IzMih0Yl9wdHIpLCBsb3cpOwo+ICt9Cj4gKyNlbGlmIFRDR19UQVJHRVRfUkVHX0JJVFMgPT0g NjQKPiArLyogUmVhZCBpbmRleGVkIHJlZ2lzdGVyICgzMiBiaXQgc2lnbmVkKSBmcm9tIGJ5dGVj b2RlLiAqLwo+ICtzdGF0aWMgaW50MzJfdCB0Y2lfcmVhZF9yMzJzKHVpbnQ4X3QgKip0Yl9wdHIp Cj4gK3sKPiArIMKgIMKgaW50MzJfdCB2YWx1ZSA9IHRjaV9yZWFkX3JlZzMycygqKnRiX3B0cik7 Cj4gKyDCoCDCoCp0Yl9wdHIgKz0gMTsKPiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKwo+ ICsvKiBSZWFkIGluZGV4ZWQgcmVnaXN0ZXIgKDY0IGJpdCkgZnJvbSBieXRlY29kZS4gKi8KPiAr c3RhdGljIHVpbnQ2NF90IHRjaV9yZWFkX3I2NCh1aW50OF90ICoqdGJfcHRyKQo+ICt7Cj4gKyDC oCDCoHVpbnQ2NF90IHZhbHVlID0gdGNpX3JlYWRfcmVnNjQoKip0Yl9wdHIpOwo+ICsgwqAgwqAq dGJfcHRyICs9IDE7Cj4gKyDCoCDCoHJldHVybiB2YWx1ZTsKPiArfQo+ICsjZW5kaWYKPiArCj4g Ky8qIFJlYWQgaW5kZXhlZCByZWdpc3RlcihzKSB3aXRoIHRhcmdldCBhZGRyZXNzIGZyb20gYnl0 ZWNvZGUuICovCj4gK3N0YXRpYyB0YXJnZXRfdWxvbmcgdGNpX3JlYWRfdWxvbmcodWludDhfdCAq KnRiX3B0cikKPiArewo+ICsgwqAgwqB0YXJnZXRfdWxvbmcgdGFkZHIgPSB0Y2lfcmVhZF9yKHRi X3B0cik7Cj4gKyNpZiBUQVJHRVRfTE9OR19CSVRTID4gVENHX1RBUkdFVF9SRUdfQklUUwo+ICsg wqAgwqB0YWRkciArPSAodWludDY0X3QpdGNpX3JlYWRfcih0Yl9wdHIpIDw8IDMyOwo+ICsjZW5k aWYKPiArIMKgIMKgcmV0dXJuIHRhZGRyOwo+ICt9Cj4gKwo+ICsvKiBSZWFkIGluZGV4ZWQgcmVn aXN0ZXIgb3IgY29uc3RhbnQgKG5hdGl2ZSBzaXplKSBmcm9tIGJ5dGVjb2RlLiAqLwo+ICtzdGF0 aWMgdGNnX3RhcmdldF91bG9uZyB0Y2lfcmVhZF9yaSh1aW50OF90ICoqdGJfcHRyKQo+ICt7Cj4g KyDCoCDCoHRjZ190YXJnZXRfdWxvbmcgdmFsdWU7Cj4gKyDCoCDCoFRDR1JlZ2lzdGVyIHIgPSAq KnRiX3B0cjsKPiArIMKgIMKgKnRiX3B0ciArPSAxOwo+ICsgwqAgwqBpZiAociA9PSBUQ0dfQ09O U1QpIHsKPiArIMKgIMKgIMKgIMKgdmFsdWUgPSB0Y2lfcmVhZF9pKHRiX3B0cik7Cj4gKyDCoCDC oH0gZWxzZSB7Cj4gKyDCoCDCoCDCoCDCoHZhbHVlID0gdGNpX3JlYWRfcmVnKHIpOwo+ICsgwqAg wqB9Cj4gKyDCoCDCoHJldHVybiB2YWx1ZTsKPiArfQo+ICsKPiArLyogUmVhZCBpbmRleGVkIHJl Z2lzdGVyIG9yIGNvbnN0YW50ICgzMiBiaXQpIGZyb20gYnl0ZWNvZGUuICovCj4gK3N0YXRpYyB1 aW50MzJfdCB0Y2lfcmVhZF9yaTMyKHVpbnQ4X3QgKip0Yl9wdHIpCj4gK3sKPiArIMKgIMKgdWlu dDMyX3QgdmFsdWU7Cj4gKyDCoCDCoFRDR1JlZ2lzdGVyIHIgPSAqKnRiX3B0cjsKPiArIMKgIMKg KnRiX3B0ciArPSAxOwo+ICsgwqAgwqBpZiAociA9PSBUQ0dfQ09OU1QpIHsKPiArIMKgIMKgIMKg IMKgdmFsdWUgPSB0Y2lfcmVhZF9pMzIodGJfcHRyKTsKPiArIMKgIMKgfSBlbHNlIHsKPiArIMKg IMKgIMKgIMKgdmFsdWUgPSB0Y2lfcmVhZF9yZWczMihyKTsKPiArIMKgIMKgfQo+ICsgwqAgwqBy ZXR1cm4gdmFsdWU7Cj4gK30KPiArCj4gKyNpZiBUQ0dfVEFSR0VUX1JFR19CSVRTID09IDMyCj4g Ky8qIFJlYWQgdHdvIGluZGV4ZWQgcmVnaXN0ZXJzIG9yIGNvbnN0YW50cyAoMiAqIDMyIGJpdCkg ZnJvbSBieXRlY29kZS4gKi8KPiArc3RhdGljIHVpbnQ2NF90IHRjaV9yZWFkX3JpNjQodWludDhf dCAqKnRiX3B0cikKPiArewo+ICsgwqAgwqB1aW50MzJfdCBsb3cgPSB0Y2lfcmVhZF9yaTMyKHRi X3B0cik7Cj4gKyDCoCDCoHJldHVybiB0Y2lfdWludDY0KHRjaV9yZWFkX3JpMzIodGJfcHRyKSwg bG93KTsKPiArfQo+ICsjZWxpZiBUQ0dfVEFSR0VUX1JFR19CSVRTID09IDY0Cj4gKy8qIFJlYWQg aW5kZXhlZCByZWdpc3RlciBvciBjb25zdGFudCAoNjQgYml0KSBmcm9tIGJ5dGVjb2RlLiAqLwo+ ICtzdGF0aWMgdWludDY0X3QgdGNpX3JlYWRfcmk2NCh1aW50OF90ICoqdGJfcHRyKQo+ICt7Cj4g KyDCoCDCoHVpbnQ2NF90IHZhbHVlOwo+ICsgwqAgwqBUQ0dSZWdpc3RlciByID0gKip0Yl9wdHI7 Cj4gKyDCoCDCoCp0Yl9wdHIgKz0gMTsKPiArIMKgIMKgaWYgKHIgPT0gVENHX0NPTlNUKSB7Cj4g KyDCoCDCoCDCoCDCoHZhbHVlID0gdGNpX3JlYWRfaTY0KHRiX3B0cik7Cj4gKyDCoCDCoH0gZWxz ZSB7Cj4gKyDCoCDCoCDCoCDCoHZhbHVlID0gdGNpX3JlYWRfcmVnNjQocik7Cj4gKyDCoCDCoH0K PiArIMKgIMKgcmV0dXJuIHZhbHVlOwo+ICt9Cj4gKyNlbmRpZgo+ICsKPiArc3RhdGljIHRhcmdl dF91bG9uZyB0Y2lfcmVhZF9sYWJlbCh1aW50OF90ICoqdGJfcHRyKQo+ICt7Cj4gKyDCoCDCoHRh cmdldF91bG9uZyBsYWJlbCA9IHRjaV9yZWFkX2kodGJfcHRyKTsKPiArIMKgIMKgYXNzZXJ0KGxh YmVsICE9IDApOwo+ICsgwqAgwqByZXR1cm4gbGFiZWw7Cj4gK30KPiArCj4gK3N0YXRpYyBib29s IHRjaV9jb21wYXJlMzIodWludDMyX3QgdTAsIHVpbnQzMl90IHUxLCBUQ0dDb25kIGNvbmRpdGlv bikKPiArewo+ICsgwqAgwqBib29sIHJlc3VsdCA9IGZhbHNlOwo+ICsgwqAgwqBpbnQzMl90IGkw ID0gdTA7Cj4gKyDCoCDCoGludDMyX3QgaTEgPSB1MTsKPiArIMKgIMKgc3dpdGNoIChjb25kaXRp b24pIHsKPiArIMKgIMKgY2FzZSBUQ0dfQ09ORF9FUToKPiArIMKgIMKgIMKgIMKgcmVzdWx0ID0g KHUwID09IHUxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoGNhc2UgVENHX0NPTkRf TkU6Cj4gKyDCoCDCoCDCoCDCoHJlc3VsdCA9ICh1MCAhPSB1MSk7Cj4gKyDCoCDCoCDCoCDCoGJy ZWFrOwo+ICsgwqAgwqBjYXNlIFRDR19DT05EX0xUOgo+ICsgwqAgwqAgwqAgwqByZXN1bHQgPSAo aTAgPCBpMSk7Cj4gKyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNlIFRDR19DT05EX0dF Ogo+ICsgwqAgwqAgwqAgwqByZXN1bHQgPSAoaTAgPj0gaTEpOwo+ICsgwqAgwqAgwqAgwqBicmVh azsKPiArIMKgIMKgY2FzZSBUQ0dfQ09ORF9MRToKPiArIMKgIMKgIMKgIMKgcmVzdWx0ID0gKGkw IDw9IGkxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoGNhc2UgVENHX0NPTkRfR1Q6 Cj4gKyDCoCDCoCDCoCDCoHJlc3VsdCA9IChpMCA+IGkxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7 Cj4gKyDCoCDCoGNhc2UgVENHX0NPTkRfTFRVOgo+ICsgwqAgwqAgwqAgwqByZXN1bHQgPSAodTAg PCB1MSk7Cj4gKyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNlIFRDR19DT05EX0dFVToK PiArIMKgIMKgIMKgIMKgcmVzdWx0ID0gKHUwID49IHUxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7 Cj4gKyDCoCDCoGNhc2UgVENHX0NPTkRfTEVVOgo+ICsgwqAgwqAgwqAgwqByZXN1bHQgPSAodTAg PD0gdTEpOwo+ICsgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgY2FzZSBUQ0dfQ09ORF9HVFU6 Cj4gKyDCoCDCoCDCoCDCoHJlc3VsdCA9ICh1MCA+IHUxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7 Cj4gKyDCoCDCoGRlZmF1bHQ6Cj4gKyDCoCDCoCDCoCDCoFRPRE8oKTsKPiArIMKgIMKgfQo+ICsg wqAgwqByZXR1cm4gcmVzdWx0Owo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCB0Y2lfY29tcGFyZTY0 KHVpbnQ2NF90IHUwLCB1aW50NjRfdCB1MSwgVENHQ29uZCBjb25kaXRpb24pCj4gK3sKPiArIMKg IMKgYm9vbCByZXN1bHQgPSBmYWxzZTsKPiArIMKgIMKgaW50NjRfdCBpMCA9IHUwOwo+ICsgwqAg wqBpbnQ2NF90IGkxID0gdTE7Cj4gKyDCoCDCoHN3aXRjaCAoY29uZGl0aW9uKSB7Cj4gKyDCoCDC oGNhc2UgVENHX0NPTkRfRVE6Cj4gKyDCoCDCoCDCoCDCoHJlc3VsdCA9ICh1MCA9PSB1MSk7Cj4g KyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNlIFRDR19DT05EX05FOgo+ICsgwqAgwqAg wqAgwqByZXN1bHQgPSAodTAgIT0gdTEpOwo+ICsgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKg Y2FzZSBUQ0dfQ09ORF9MVDoKPiArIMKgIMKgIMKgIMKgcmVzdWx0ID0gKGkwIDwgaTEpOwo+ICsg wqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgY2FzZSBUQ0dfQ09ORF9HRToKPiArIMKgIMKgIMKg IMKgcmVzdWx0ID0gKGkwID49IGkxKTsKPiArIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoGNh c2UgVENHX0NPTkRfTEU6Cj4gKyDCoCDCoCDCoCDCoHJlc3VsdCA9IChpMCA8PSBpMSk7Cj4gKyDC oCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNlIFRDR19DT05EX0dUOgo+ICsgwqAgwqAgwqAg wqByZXN1bHQgPSAoaTAgPiBpMSk7Cj4gKyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNl IFRDR19DT05EX0xUVToKPiArIMKgIMKgIMKgIMKgcmVzdWx0ID0gKHUwIDwgdTEpOwo+ICsgwqAg wqAgwqAgwqBicmVhazsKPiArIMKgIMKgY2FzZSBUQ0dfQ09ORF9HRVU6Cj4gKyDCoCDCoCDCoCDC oHJlc3VsdCA9ICh1MCA+PSB1MSk7Cj4gKyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBjYXNl IFRDR19DT05EX0xFVToKPiArIMKgIMKgIMKgIMKgcmVzdWx0ID0gKHUwIDw9IHUxKTsKPiArIMKg IMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoGNhc2UgVENHX0NPTkRfR1RVOgo+ICsgwqAgwqAgwqAg wqByZXN1bHQgPSAodTAgPiB1MSk7Cj4gKyDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqBkZWZh dWx0Ogo+ICsgwqAgwqAgwqAgwqBUT0RPKCk7Cj4gKyDCoCDCoH0KPiArIMKgIMKgcmV0dXJuIHJl c3VsdDsKPiArfQo+ICsKPiArLyogSW50ZXJwcmV0IHBzZXVkbyBjb2RlIGluIHRiLiAqLwo+ICt1 bnNpZ25lZCBsb25nIHRjZ19xZW11X3RiX2V4ZWMoQ1BVU3RhdGUgKmNwdXN0YXRlLCB1aW50OF90 ICp0Yl9wdHIpCj4gK3sKPiArIMKgIMKgdW5zaWduZWQgbG9uZyBuZXh0X3RiID0gMDsKPiArCj4g KyDCoCDCoFRSQUNFKCk7Cj4gKwo+ICsgwqAgwqBlbnYgPSBjcHVzdGF0ZTsKPiArIMKgIMKgdGNp X3JlZ1tUQ0dfQVJFRzBdID0gKHRjZ190YXJnZXRfdWxvbmcpY3B1c3RhdGU7Cj4gKyDCoCDCoGFz c2VydCh0Yl9wdHIpOwo+ICsKPiArIMKgIMKgZm9yICg7Oykgewo+ICsjaWZkZWYgTkVFRFNfVEJf UFRSCj4gKyDCoCDCoCDCoCDCoHRjaV90Yl9wdHIgPSB0Yl9wdHI7Cj4gKyNlbmRpZgo+ICsgwqAg wqAgwqAgwqB1aW50OF90ICpvbGRfY29kZV9wdHIgPSB0Yl9wdHI7Cj4gKyDCoCDCoCDCoCDCoFRD R09wY29kZSBvcGMgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoHVpbnQ4X3Qgb3Bfc2l6ZSA9 ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgdGNnX3RhcmdldF91bG9uZyB0MDsKPiArIMKgIMKg IMKgIMKgdGNnX3RhcmdldF91bG9uZyB0MTsKPiArIMKgIMKgIMKgIMKgdGNnX3RhcmdldF91bG9u ZyB0MjsKPiArIMKgIMKgIMKgIMKgdGNnX3RhcmdldF91bG9uZyBsYWJlbDsKPiArIMKgIMKgIMKg IMKgVENHQ29uZCBjb25kaXRpb247Cj4gKyDCoCDCoCDCoCDCoHRhcmdldF91bG9uZyB0YWRkcjsK PiArI2lmbmRlZiBDT05GSUdfU09GVE1NVQo+ICsgwqAgwqAgwqAgwqB0Y2dfdGFyZ2V0X3Vsb25n IGhvc3RfYWRkcjsKPiArI2VuZGlmCj4gKyDCoCDCoCDCoCDCoHVpbnQ4X3QgdTg7Cj4gKyDCoCDC oCDCoCDCoHVpbnQxNl90IHUxNjsKPiArIMKgIMKgIMKgIMKgdWludDMyX3QgdTMyOwo+ICsgwqAg wqAgwqAgwqB1aW50NjRfdCB1NjQ7CgpUaGUgYWJvdmUgdmFyaWFibGUgbmFtZXMgY291bGQgY29u ZmxpY3Qgd2l0aCBMaW51eCBrZXJuZWwgaGVhZGVycyBpZgp0aGV5IGxlYWtlZCB0aGUgdHlwZXMg dXNlZCB0aGVyZS4gcy91L3ZhbC8/Cgo+ICsjaWYgVENHX1RBUkdFVF9SRUdfQklUUyA9PSAzMgo+ ICsgwqAgwqAgwqAgwqB1aW50NjRfdCB2NjQ7Cj4gKyNlbmRpZgo+ICsKPiArI2lmIGRlZmluZWQo Q09ORklHX0RFQlVHX1RDR19JTlRFUlBSRVRFUikKPiArIMKgIMKgIMKgIMKgaWYgKGxvZ2xldmVs KSB7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV9kaXNhcyhvcGMpOwo+ICsgwqAgwqAgwqAgwqB9 Cj4gKyNlbmRpZgo+ICsKPiArIMKgIMKgIMKgIMKgc3dpdGNoIChvcGMpIHsKPiArIMKgIMKgIMKg IMKgY2FzZSBJTkRFWF9vcF9lbmQ6Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bfbm9wOgo+ ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9u b3AxOgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX25vcDI6Cj4gKyDCoCDCoCDCoCDCoGNh c2UgSU5ERVhfb3Bfbm9wMzoKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9ub3BuOgo+ICsg wqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2Rpc2NhcmQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoFRP RE8oKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5E RVhfb3Bfc2V0X2xhYmVsOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBUT0RPKCk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2NhbGw6Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQwID0gdGNpX3JlYWRfcmkoJnRiX3B0cik7Cj4gKyNpZiBUQ0dfVEFS R0VUX1JFR19CSVRTID09IDMyCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHU2NCA9ICgoaGVscGVyX2Z1 bmN0aW9uKXQwKSh0Y2lfcmVhZF9yZWcoVENHX1JFR19SMCksCj4gKyDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjaV9yZWFkX3JlZyhU Q0dfUkVHX1IxKSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgdGNpX3JlYWRfcmVnKFRDR19SRUdfUjIpLAo+ICsgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfcmVh ZF9yZWcoVENHX1JFR19SMyksCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjaV9yZWFkX3JlZyhUQ0dfUkVHX1I1KSwKPiArIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg dGNpX3JlYWRfcmVnKFRDR19SRUdfUjYpLAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfcmVhZF9yZWcoVENHX1JFR19SNyks Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoHRjaV9yZWFkX3JlZyhUQ0dfUkVHX1I4KSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRj aV93cml0ZV9yZWcoVENHX1JFR19SMCwgdTY0KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dy aXRlX3JlZyhUQ0dfUkVHX1IxLCB1NjQgPj4gMzIpOwo+ICsjZWxzZQo+ICsgwqAgwqAgwqAgwqAg wqAgwqB1NjQgPSAoKGhlbHBlcl9mdW5jdGlvbil0MCkodGNpX3JlYWRfcmVnKFRDR19SRUdfUjAp LAo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqB0Y2lfcmVhZF9yZWcoVENHX1JFR19SMSksCj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRjaV9yZWFkX3JlZyhUQ0df UkVHX1IyKSwKPiArIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgdGNpX3JlYWRfcmVnKFRDR19SRUdfUjMpKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgdGNpX3dyaXRlX3JlZyhUQ0dfUkVHX1IwLCB1NjQpOwo+ICsjZW5kaWYKPiArIMKgIMKg IMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bfam1wOgo+ICsg wqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2JyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqBsYWJlbCA9 IHRjaV9yZWFkX2xhYmVsKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBhc3NlcnQodGJf cHRyID09IG9sZF9jb2RlX3B0ciArIG9wX3NpemUpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Yl9w dHIgPSAodWludDhfdCAqKWxhYmVsOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBjb250aW51ZTsKPiAr IMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zZXRjb25kX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjMy KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0 cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGNvbmRpdGlvbiA9ICp0Yl9wdHIrKzsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCB0Y2lfY29tcGFyZTMyKHQxLCB0MiwgY29u ZGl0aW9uKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjaWYgVENHX1RBUkdFVF9S RUdfQklUUyA9PSAzMgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3NldGNvbmQyX2kzMjoK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oHU2NCA9IHRjaV9yZWFkX3I2NCgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdjY0ID0g dGNpX3JlYWRfcmk2NCgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgY29uZGl0aW9uID0g KnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIHRjaV9j b21wYXJlNjQodTY0LCB2NjQsIGNvbmRpdGlvbikpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVh azsKPiArI2VsaWYgVENHX1RBUkdFVF9SRUdfQklUUyA9PSA2NAo+ICsgwqAgwqAgwqAgwqBjYXNl IElOREVYX29wX3NldGNvbmRfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIr KzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yNjQoJnRiX3B0cik7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfcmk2NCgmdGJfcHRyKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgY29uZGl0aW9uID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lf d3JpdGVfcmVnNjQodDAsIHRjaV9jb21wYXJlNjQodDEsIHQyLCBjb25kaXRpb24pKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX21vdl9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3IzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCB0MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFr Owo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX21vdmlfaTMyOgo+ICsgwqAgwqAgwqAgwqAg wqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9p MzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWczMih0MCwgdDEp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgLyogTG9hZC9zdG9yZSBvcGVy YXRpb25zLiAqLwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2xkOHVfaTMyOgo+ICsgwqAg wqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0 Y2lfcmVhZF9yKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX2kz MigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzgodDAsICoodWlu dDhfdCAqKSh0MSArIHQyKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAg wqAgwqBjYXNlIElOREVYX29wX2xkOHNfaTMyOgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29w X2xkMTZ1X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgVE9ETygpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9sZDE2c19pMzI6Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoFRPRE8oKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDC oCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfbGRfaTMyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9 ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yKCZ0Yl9wdHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX2kzMigmdGJfcHRyKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCAqKHVpbnQzMl90ICopKHQxICsgdDIp KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhf b3Bfc3Q4X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSB0Y2lfcmVhZF9yOCgmdGJfcHRy KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yKCZ0Yl9wdHIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX2kzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgKih1aW50OF90ICopKHQxICsgdDIpID0gdDA7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJy ZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3N0MTZfaTMyOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqB0MCA9IHRjaV9yZWFkX3IxNigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDEgPSB0Y2lfcmVhZF9yKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9y ZWFkX2kzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgKih1aW50MTZfdCAqKSh0MSAr IHQyKSA9IHQwOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2Fz ZSBJTkRFWF9vcF9zdF9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gdGNpX3JlYWRfcjMy KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3IoJnRiX3B0cik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfaTMyKCZ0Yl9wdHIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqAqKHVpbnQzMl90ICopKHQxICsgdDIpID0gdDA7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAvKiBBcml0aG1ldGljIG9wZXJhdGlvbnMuICovCj4gKyDC oCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfYWRkX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAg PSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJf cHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIHQxICsgdDIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zdWJfaTMy Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDEgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9 IHRjaV9yZWFkX3JpMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9y ZWczMih0MCwgdDEgLSB0Mik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAg wqAgwqBjYXNlIElOREVYX29wX211bF9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gKnRi X3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0cik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCB0MSAqIHQyKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgYnJlYWs7Cj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19kaXZfaTMyCj4gKyDCoCDCoCDC oCDCoGNhc2UgSU5ERVhfb3BfZGl2X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJf cHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIChpbnQzMl90KXQxIC8gKGludDMyX3Qp dDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRF WF9vcF9kaXZ1X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqB0Y2lfd3JpdGVfcmVnMzIodDAsIHQxIC8gdDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVh azsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9yZW1faTMyOgo+ICsgwqAgwqAgwqAgwqAg wqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9y aTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX3JpMzIoJnRi X3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWczMih0MCwgKGludDMyX3Qp dDEgJSAoaW50MzJfdCl0Mik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAg wqAgwqBjYXNlIElOREVYX29wX3JlbXVfaTMyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0 Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0cik7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWczMih0MCwgdDEgJSB0Mik7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoGJyZWFrOwo+ICsjZWxpZiBUQ0dfVEFSR0VUX0hBU19kaXYyX2kzMgo+ICsgwqAg wqAgwqAgwqBjYXNlIElOREVYX29wX2RpdjJfaTMyOgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX2RpdnUyX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgVE9ETygpOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqBicmVhazsKPiArI2VuZGlmCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfYW5k X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3Jp dGVfcmVnMzIodDAsIHQxICYgdDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKg IMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9vcl9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0g KnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0 cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCB0MSB8IHQyKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfeG9yX2kzMjoK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0 Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVn MzIodDAsIHQxIF4gdDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgLyog U2hpZnQvcm90YXRlIG9wZXJhdGlvbnMuICovCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bf c2hsX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lf d3JpdGVfcmVnMzIodDAsIHQxIDw8IHQyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4g KyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bfc2hyX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigm dGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIHQxID4+IHQyKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bfc2Fy X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3Jp dGVfcmVnMzIodDAsICgoaW50MzJfdCl0MSA+PiB0MikpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBi cmVhazsKPiArI2lmIFRDR19UQVJHRVRfSEFTX3JvdF9pMzIKPiArIMKgIMKgIMKgIMKgY2FzZSBJ TkRFWF9vcF9yb3RsX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmkzMigmdGJfcHRyKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsICh0MSA8PCB0MikgfCAodDEgPj4gKDMyIC0gdDIpKSk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29w X3JvdHJfaTMyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yaTMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqB0MiA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRj aV93cml0ZV9yZWczMih0MCwgKHQxID4+IHQyKSB8ICh0MSA8PCAoMzIgLSB0MikpKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX2JyY29uZF9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gdGNpX3JlYWRfcjMyKCZ0 Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3JpMzIoJnRiX3B0cik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGNvbmRpdGlvbiA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKg IMKgIMKgIMKgbGFiZWwgPSB0Y2lfcmVhZF9sYWJlbCgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgaWYgKHRjaV9jb21wYXJlMzIodDAsIHQxLCBjb25kaXRpb24pKSB7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoGFzc2VydCh0Yl9wdHIgPT0gb2xkX2NvZGVfcHRyICsgb3Bfc2l6ZSk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRiX3B0ciA9ICh1aW50OF90ICopbGFiZWw7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoGNvbnRpbnVlOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB9 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjaWYgVENHX1RBUkdFVF9SRUdfQklUUyA9 PSAzMgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2FkZDJfaTMyOgo+ICsgwqAgwqAgwqAg wqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSAqdGJfcHRy Kys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHU2NCA9IHRjaV9yZWFkX3I2NCgmdGJfcHRyKTsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgdTY0ICs9IHRjaV9yZWFkX3I2NCgmdGJfcHRyKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzY0KHQxLCB0MCwgdTY0KTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bfc3ViMl9pMzI6Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9 ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTY0ID0gdGNpX3JlYWRfcjY0KCZ0Yl9w dHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB1NjQgLT0gdGNpX3JlYWRfcjY0KCZ0Yl9wdHIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDEsIHQwLCB1NjQpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9icmNvbmQy X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTY0ID0gdGNpX3JlYWRfcjY0KCZ0Yl9wdHIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB2NjQgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBjb25kaXRpb24gPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oGxhYmVsID0gdGNpX3JlYWRfbGFiZWwoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlm ICh0Y2lfY29tcGFyZTY0KHU2NCwgdjY0LCBjb25kaXRpb24pKSB7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoGFzc2VydCh0Yl9wdHIgPT0gb2xkX2NvZGVfcHRyICsgb3Bfc2l6ZSk7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoHRiX3B0ciA9ICh1aW50OF90ICopbGFiZWw7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoGNvbnRpbnVlOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB9Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX211bHUy X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHQxID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFk X3IzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTY0ID0gdGNpX3JlYWRfcjMyKCZ0 Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDEsIHQwLCB0MiAq IHU2NCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjZW5kaWYgLyogVENHX1RBUkdF VF9SRUdfQklUUyA9PSAzMiAqLwo+ICsjaWYgVENHX1RBUkdFVF9IQVNfZXh0OHNfaTMyCj4gKyDC oCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfZXh0OHNfaTMyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0 MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yOHMoJnRi X3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWczMih0MCwgdDEpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArI2VuZGlmCj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19l eHQxNnNfaTMyCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfZXh0MTZzX2kzMjoKPiArIMKg IMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0g dGNpX3JlYWRfcjE2cygmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3Jl ZzMyKHQwLCB0MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjZW5kaWYKPiArI2lm IFRDR19UQVJHRVRfSEFTX2V4dDh1X2kzMgo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2V4 dDh1X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjgoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oHRjaV93cml0ZV9yZWczMih0MCwgdDEpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiAr I2VuZGlmCj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19leHQxNnVfaTMyCj4gKyDCoCDCoCDCoCDCoGNh c2UgSU5ERVhfb3BfZXh0MTZ1X2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRy Kys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjE2KCZ0Yl9wdHIpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIHQxKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYgVENHX1RBUkdFVF9IQVNfYnN3YXAxNl9pMzIK PiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9ic3dhcDE2X2kzMjoKPiArIMKgIMKgIMKgIMKg IMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRf cjE2KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIGJz d2FwMTYodDEpKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYg VENHX1RBUkdFVF9IQVNfYnN3YXAzMl9pMzIKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9i c3dhcDMyX2kzMjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIGJzd2FwMzIodDEpKTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYgVENHX1RBUkdFVF9IQVNfbm90X2kzMgo+ICsgwqAg wqAgwqAgwqBjYXNlIElOREVYX29wX25vdF9pMzI6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0g KnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3IzMigmdGJfcHRy KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzMyKHQwLCB+dDEpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArI2VuZGlmCj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19uZWdf aTMyCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfbmVnX2kzMjoKPiArIMKgIMKgIMKgIMKg IMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRf cjMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnMzIodDAsIC10 MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjZW5kaWYKPiArI2lmIFRDR19UQVJH RVRfUkVHX0JJVFMgPT0gNjQKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9tb3ZfaTY0Ogo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDEgPSB0Y2lfcmVhZF9yNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0 ZV9yZWc2NCh0MCwgdDEpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKg IMKgY2FzZSBJTkRFWF9vcF9tb3ZpX2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJf cHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfaTY0KCZ0Yl9wdHIpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDAsIHQxKTsKPiArIMKgIMKgIMKg IMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoC8qIExvYWQvc3RvcmUgb3BlcmF0aW9ucy4gKi8KPiAr IMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9sZDh1X2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcigmdGJf cHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc4KHQwLCAqKHVpbnQ4X3QgKikodDEgKyB0 MikpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRF WF9vcF9sZDhzX2k2NDoKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9sZDE2dV9pNjQ6Cj4g KyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfbGQxNnNfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAg wqBUT0RPKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNl IElOREVYX29wX2xkMzJ1X2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcigmdGJfcHRyKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoHRjaV93cml0ZV9yZWczMih0MCwgKih1aW50MzJfdCAqKSh0MSArIHQyKSk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2xkMzJzX2k2 NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoHQxID0gdGNpX3JlYWRfcigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0 Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWcz MnModDAsICooaW50MzJfdCAqKSh0MSArIHQyKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFr Owo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2xkX2k2NDoKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcigm dGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc2NCh0MCwgKih1aW50NjRfdCAqKSh0 MSArIHQyKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNl IElOREVYX29wX3N0OF9pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gdGNpX3JlYWRfcjgo JnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcigmdGJfcHRyKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoCoodWludDhfdCAqKSh0MSArIHQyKSA9IHQwOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zdDE2X2k2NDoKPiArIMKg IMKgIMKgIMKgIMKgIMKgdDAgPSB0Y2lfcmVhZF9yMTYoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHQxID0gdGNpX3JlYWRfcigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIg PSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCoodWludDE2X3Qg KikodDEgKyB0MikgPSB0MDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDC oCDCoGNhc2UgSU5ERVhfb3Bfc3QzMl9pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gdGNp X3JlYWRfcjMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3Io JnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfaTMyKCZ0Yl9wdHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqAqKHVpbnQzMl90ICopKHQxICsgdDIpID0gdDA7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3N0X2k2 NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSB0Y2lfcmVhZF9yNjQoJnRiX3B0cik7Cj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgdDIgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCoo dWludDY0X3QgKikodDEgKyB0MikgPSB0MDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4g KyDCoCDCoC8qIEFyaXRobWV0aWMgb3BlcmF0aW9ucy4gKi8KPiArIMKgIMKgIMKgIMKgY2FzZSBJ TkRFWF9vcF9hZGRfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiAr IMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoHRjaV93cml0ZV9yZWc2NCh0MCwgdDEgKyB0Mik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJy ZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3N1Yl9pNjQ6Cj4gKyDCoCDCoCDCoCDC oCDCoCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFk X3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfcmk2NCgm dGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzY0KHQwLCB0MSAtIHQy KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhf b3BfbXVsX2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmk2NCgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0 Y2lfd3JpdGVfcmVnNjQodDAsIHQxICogdDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsK PiArI2lmIFRDR19UQVJHRVRfSEFTX2Rpdl9pNjQKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9v cF9kaXZfaTY0Ogo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2RpdnVfaTY0Ogo+ICsgwqAg wqAgwqAgwqBjYXNlIElOREVYX29wX3JlbV9pNjQ6Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhf b3BfcmVtdV9pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoFRPRE8oKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKyNlbGlmIFRDR19UQVJHRVRfSEFTX2RpdjJfaTY0Cj4gKyDCoCDCoCDC oCDCoGNhc2UgSU5ERVhfb3BfZGl2Ml9pNjQ6Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bf ZGl2dTJfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqBUT0RPKCk7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoGJyZWFrOwo+ICsjZW5kaWYKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9hbmRfaTY0 Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9 IHRjaV9yZWFkX3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9y ZWc2NCh0MCwgdDEgJiB0Mik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAg wqAgwqBjYXNlIElOREVYX29wX29yX2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJf cHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcmk2NCgmdGJfcHRyKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDAsIHQxIHwgdDIpOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF94b3JfaTY0Ogo+ICsg wqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEg PSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9y ZWFkX3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc2NCh0 MCwgdDEgXiB0Mik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAvKiBTaGlm dC9yb3RhdGUgb3BlcmF0aW9ucy4gKi8KPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zaGxf aTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKg IMKgIMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0 MiA9IHRjaV9yZWFkX3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0 ZV9yZWc2NCh0MCwgdDEgPDwgdDIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKg IMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zaHJfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9 ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9w dHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9IHRjaV9yZWFkX3JpNjQoJnRiX3B0cik7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc2NCh0MCwgdDEgPj4gdDIpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9zYXJfaTY0 Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MiA9 IHRjaV9yZWFkX3JpNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9y ZWc2NCh0MCwgKChpbnQ2NF90KXQxID4+IHQyKSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFr Owo+ICsjaWYgVENHX1RBUkdFVF9IQVNfcm90X2k2NAo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX3JvdGxfaTY0Ogo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3JvdHJfaTY0Ogo+ICsg wqAgwqAgwqAgwqAgwqAgwqBUT0RPKCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsj ZW5kaWYKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9icmNvbmRfaTY0Ogo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0MCA9IHRjaV9yZWFkX3I2NCgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKg IMKgdDEgPSB0Y2lfcmVhZF9yaTY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBjb25k aXRpb24gPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGxhYmVsID0gdGNpX3JlYWRf bGFiZWwoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGlmICh0Y2lfY29tcGFyZTY0KHQw LCB0MSwgY29uZGl0aW9uKSkgewo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBhc3NlcnQodGJf cHRyID09IG9sZF9jb2RlX3B0ciArIG9wX3NpemUpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqB0Yl9wdHIgPSAodWludDhfdCAqKWxhYmVsOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBj b250aW51ZTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgfQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVh azsKPiArI2lmIFRDR19UQVJHRVRfSEFTX2V4dDh1X2k2NAo+ICsgwqAgwqAgwqAgwqBjYXNlIElO REVYX29wX2V4dDh1X2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjgoJnRiX3B0cik7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoHRjaV93cml0ZV9yZWc2NCh0MCwgdDEpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBi cmVhazsKPiArI2VuZGlmCj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19leHQ4c19pNjQKPiArIMKgIMKg IMKgIMKgY2FzZSBJTkRFWF9vcF9leHQ4c19pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0g KnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3I4cygmdGJfcHRy KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzY0KHQwLCB0MSk7Cj4gKyDCoCDC oCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjZW5kaWYKPiArI2lmIFRDR19UQVJHRVRfSEFTX2V4dDE2 c19pNjQKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9leHQxNnNfaTY0Ogo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lf cmVhZF9yMTZzKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQo dDAsIHQxKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYgVENH X1RBUkdFVF9IQVNfZXh0MTZ1X2k2NAo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2V4dDE2 dV9pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAg wqAgwqAgwqB0MSA9IHRjaV9yZWFkX3IxNigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dGNpX3dyaXRlX3JlZzY0KHQwLCB0MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsj ZW5kaWYKPiArI2lmIFRDR19UQVJHRVRfSEFTX2V4dDMyc19pNjQKPiArIMKgIMKgIMKgIMKgY2Fz ZSBJTkRFWF9vcF9leHQzMnNfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIr KzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yMzJzKCZ0Yl9wdHIpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDAsIHQxKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYgVENHX1RBUkdFVF9IQVNfZXh0MzJ1X2k2NAo+ ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX2V4dDMydV9pNjQ6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MSA9IHRjaV9yZWFkX3Iz MigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzY0KHQwLCB0MSk7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsjZW5kaWYKPiArI2lmIFRDR19UQVJHRVRf SEFTX2Jzd2FwMTZfaTY0Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfYnN3YXAxNl9pNjQ6 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoFRPRE8oKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAq dGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjE2KCZ0Yl9wdHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDAsIGJzd2FwMTYodDEpKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjaWYgVENHX1RBUkdFVF9I QVNfYnN3YXAzMl9pNjQKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9ic3dhcDMyX2k2NDoK PiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oHQxID0gdGNpX3JlYWRfcjMyKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lfd3Jp dGVfcmVnNjQodDAsIGJzd2FwMzIodDEpKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4g KyNlbmRpZgo+ICsjaWYgVENHX1RBUkdFVF9IQVNfYnN3YXA2NF9pNjQKPiArIMKgIMKgIMKgIMKg Y2FzZSBJTkRFWF9vcF9ic3dhcDY0X2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgVE9ETygpOwo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKg dDEgPSB0Y2lfcmVhZF9yNjQoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0 ZV9yZWc2NCh0MCwgYnN3YXA2NCh0MSkpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiAr I2VuZGlmCj4gKyNpZiBUQ0dfVEFSR0VUX0hBU19ub3RfaTY0Cj4gKyDCoCDCoCDCoCDCoGNhc2Ug SU5ERVhfb3Bfbm90X2k2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHQxID0gdGNpX3JlYWRfcjY0KCZ0Yl9wdHIpOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnNjQodDAsIH50MSk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDC oGJyZWFrOwo+ICsjZW5kaWYKPiArI2lmIFRDR19UQVJHRVRfSEFTX25lZ19pNjQKPiArIMKgIMKg IMKgIMKgY2FzZSBJTkRFWF9vcF9uZWdfaTY0Ogo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0 Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSB0Y2lfcmVhZF9yNjQoJnRiX3B0cik7 Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc2NCh0MCwgLXQxKTsKPiArIMKgIMKg IMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZgo+ICsjZW5kaWYgLyogVENHX1RBUkdFVF9SRUdf QklUUyA9PSA2NCAqLwo+ICsgwqAgwqAvKiBRRU1VIHNwZWNpZmljICovCj4gKyNpZiBUQVJHRVRf TE9OR19CSVRTID4gVENHX1RBUkdFVF9SRUdfQklUUwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX2RlYnVnX2luc25fc3RhcnQ6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoFRPRE8oKTsKPiArIMKg IMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbHNlCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhf b3BfZGVidWdfaW5zbl9zdGFydDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgVE9ETygpOwo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArI2VuZGlmCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhf b3BfZXhpdF90YjoKPiArIMKgIMKgIMKgIMKgIMKgIMKgbmV4dF90YiA9ICoodWludDY0X3QgKil0 Yl9wdHI7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGdvdG8gZXhpdDsKPiArIMKgIMKgIMKgIMKgIMKg IMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfZ290b190YjoKPiArIMKgIMKg IMKgIMKgIMKgIMKgdDAgPSB0Y2lfcmVhZF9pMzIoJnRiX3B0cik7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoGFzc2VydCh0Yl9wdHIgPT0gb2xkX2NvZGVfcHRyICsgb3Bfc2l6ZSk7Cj4gKyDCoCDCoCDC oCDCoCDCoCDCoHRiX3B0ciArPSAoaW50MzJfdCl0MDsKPiArIMKgIMKgIMKgIMKgIMKgIMKgY29u dGludWU7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfcWVtdV9sZDh1Ogo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGFkZHIgPSB0 Y2lfcmVhZF91bG9uZygmdGJfcHRyKTsKPiArI2lmZGVmIENPTkZJR19TT0ZUTU1VCj4gKyDCoCDC oCDCoCDCoCDCoCDCoHU4ID0gX19sZGJfbW11KHRhZGRyLCB0Y2lfcmVhZF9pKCZ0Yl9wdHIpKTsK PiArI2Vsc2UKPiArIMKgIMKgIMKgIMKgIMKgIMKgaG9zdF9hZGRyID0gKHRjZ190YXJnZXRfdWxv bmcpdGFkZHI7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFzc2VydCh0YWRkciA9PSBob3N0X2FkZHIp Owo+ICsgwqAgwqAgwqAgwqAgwqAgwqB1OCA9ICoodWludDhfdCAqKShob3N0X2FkZHIgKyBHVUVT VF9CQVNFKTsKPiArI2VuZGlmCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWc4KHQw LCB1OCk7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElO REVYX29wX3FlbXVfbGQ4czoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoHRhZGRyID0gdGNpX3JlYWRfdWxvbmcoJnRiX3B0cik7Cj4gKyNp ZmRlZiBDT05GSUdfU09GVE1NVQo+ICsgwqAgwqAgwqAgwqAgwqAgwqB1OCA9IF9fbGRiX21tdSh0 YWRkciwgdGNpX3JlYWRfaSgmdGJfcHRyKSk7Cj4gKyNlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDC oGhvc3RfYWRkciA9ICh0Y2dfdGFyZ2V0X3Vsb25nKXRhZGRyOwo+ICsgwqAgwqAgwqAgwqAgwqAg wqBhc3NlcnQodGFkZHIgPT0gaG9zdF9hZGRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTggPSAq KHVpbnQ4X3QgKikoaG9zdF9hZGRyICsgR1VFU1RfQkFTRSk7Cj4gKyNlbmRpZgo+ICsgwqAgwqAg wqAgwqAgwqAgwqB0Y2lfd3JpdGVfcmVnOHModDAsIHU4KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKg YnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfcWVtdV9sZDE2dToKPiArIMKgIMKg IMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRhZGRyID0g dGNpX3JlYWRfdWxvbmcoJnRiX3B0cik7Cj4gKyNpZmRlZiBDT05GSUdfU09GVE1NVQo+ICsgwqAg wqAgwqAgwqAgwqAgwqB1MTYgPSBfX2xkd19tbXUodGFkZHIsIHRjaV9yZWFkX2koJnRiX3B0cikp Owo+ICsjZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBob3N0X2FkZHIgPSAodGNnX3RhcmdldF91 bG9uZyl0YWRkcjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYXNzZXJ0KHRhZGRyID09IGhvc3RfYWRk cik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHUxNiA9IHRzd2FwMTYoKih1aW50MTZfdCAqKShob3N0 X2FkZHIgKyBHVUVTVF9CQVNFKSk7Cj4gKyNlbmRpZgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0Y2lf d3JpdGVfcmVnMTYodDAsIHUxNik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAg wqAgwqAgwqBjYXNlIElOREVYX29wX3FlbXVfbGQxNnM6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQw ID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9IHRjaV9yZWFkX3Vsb25n KCZ0Yl9wdHIpOwo+ICsjaWZkZWYgQ09ORklHX1NPRlRNTVUKPiArIMKgIMKgIMKgIMKgIMKgIMKg dTE2ID0gX19sZHdfbW11KHRhZGRyLCB0Y2lfcmVhZF9pKCZ0Yl9wdHIpKTsKPiArI2Vsc2UKPiAr IMKgIMKgIMKgIMKgIMKgIMKgaG9zdF9hZGRyID0gKHRjZ190YXJnZXRfdWxvbmcpdGFkZHI7Cj4g KyDCoCDCoCDCoCDCoCDCoCDCoGFzc2VydCh0YWRkciA9PSBob3N0X2FkZHIpOwo+ICsgwqAgwqAg wqAgwqAgwqAgwqB1MTYgPSB0c3dhcDE2KCoodWludDE2X3QgKikoaG9zdF9hZGRyICsgR1VFU1Rf QkFTRSkpOwo+ICsjZW5kaWYKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZzE2cyh0 MCwgdTE2KTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNpZiBUQ0dfVEFSR0VUX1JF R19CSVRTID09IDY0Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfcWVtdV9sZDMydToKPiAr IMKgIMKgIMKgIMKgIMKgIMKgdDAgPSAqdGJfcHRyKys7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHRh ZGRyID0gdGNpX3JlYWRfdWxvbmcoJnRiX3B0cik7Cj4gKyNpZmRlZiBDT05GSUdfU09GVE1NVQo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB1MzIgPSBfX2xkbF9tbXUodGFkZHIsIHRjaV9yZWFkX2koJnRi X3B0cikpOwo+ICsjZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBob3N0X2FkZHIgPSAodGNnX3Rh cmdldF91bG9uZyl0YWRkcjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYXNzZXJ0KHRhZGRyID09IGhv c3RfYWRkcik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHUzMiA9IHRzd2FwMzIoKih1aW50MzJfdCAq KShob3N0X2FkZHIgKyBHVUVTVF9CQVNFKSk7Cj4gKyNlbmRpZgo+ICsgwqAgwqAgwqAgwqAgwqAg wqB0Y2lfd3JpdGVfcmVnMzIodDAsIHUzMik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3FlbXVfbGQzMnM6Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoHQwID0gKnRiX3B0cisrOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9IHRjaV9yZWFk X3Vsb25nKCZ0Yl9wdHIpOwo+ICsjaWZkZWYgQ09ORklHX1NPRlRNTVUKPiArIMKgIMKgIMKgIMKg IMKgIMKgdTMyID0gX19sZGxfbW11KHRhZGRyLCB0Y2lfcmVhZF9pKCZ0Yl9wdHIpKTsKPiArI2Vs c2UKPiArIMKgIMKgIMKgIMKgIMKgIMKgaG9zdF9hZGRyID0gKHRjZ190YXJnZXRfdWxvbmcpdGFk ZHI7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoGFzc2VydCh0YWRkciA9PSBob3N0X2FkZHIpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqB1MzIgPSB0c3dhcDMyKCoodWludDMyX3QgKikoaG9zdF9hZGRyICsg R1VFU1RfQkFTRSkpOwo+ICsjZW5kaWYKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3Jl ZzMycyh0MCwgdTMyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4gKyNlbmRpZiAvKiBU Q0dfVEFSR0VUX1JFR19CSVRTID09IDY0ICovCj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3Bf cWVtdV9sZDMyOgo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArIMKgIMKg IMKgIMKgIMKgIMKgdGFkZHIgPSB0Y2lfcmVhZF91bG9uZygmdGJfcHRyKTsKPiArI2lmZGVmIENP TkZJR19TT0ZUTU1VCj4gKyDCoCDCoCDCoCDCoCDCoCDCoHUzMiA9IF9fbGRsX21tdSh0YWRkciwg dGNpX3JlYWRfaSgmdGJfcHRyKSk7Cj4gKyNlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGhvc3Rf YWRkciA9ICh0Y2dfdGFyZ2V0X3Vsb25nKXRhZGRyOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBhc3Nl cnQodGFkZHIgPT0gaG9zdF9hZGRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTMyID0gdHN3YXAz MigqKHVpbnQzMl90ICopKGhvc3RfYWRkciArIEdVRVNUX0JBU0UpKTsKPiArI2VuZGlmCj4gKyDC oCDCoCDCoCDCoCDCoCDCoHRjaV93cml0ZV9yZWczMih0MCwgdTMyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYnJlYWs7Cj4gKyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfcWVtdV9sZDY0Ogo+ICsg wqAgwqAgwqAgwqAgwqAgwqB0MCA9ICp0Yl9wdHIrKzsKPiArI2lmIFRDR19UQVJHRVRfUkVHX0JJ VFMgPT0gMzIKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDEgPSAqdGJfcHRyKys7Cj4gKyNlbmRpZgo+ ICsgwqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9IHRjaV9yZWFkX3Vsb25nKCZ0Yl9wdHIpOwo+ICsj aWZkZWYgQ09ORklHX1NPRlRNTVUKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTY0ID0gX19sZHFfbW11 KHRhZGRyLCB0Y2lfcmVhZF9pKCZ0Yl9wdHIpKTsKPiArI2Vsc2UKPiArIMKgIMKgIMKgIMKgIMKg IMKgaG9zdF9hZGRyID0gKHRjZ190YXJnZXRfdWxvbmcpdGFkZHI7Cj4gKyDCoCDCoCDCoCDCoCDC oCDCoGFzc2VydCh0YWRkciA9PSBob3N0X2FkZHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB1NjQg PSB0c3dhcDY0KCoodWludDY0X3QgKikoaG9zdF9hZGRyICsgR1VFU1RfQkFTRSkpOwo+ICsjZW5k aWYKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3JlZyh0MCwgdTY0KTsKPiArI2lmIFRD R19UQVJHRVRfUkVHX0JJVFMgPT0gMzIKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGNpX3dyaXRlX3Jl Zyh0MSwgdTY0ID4+IDMyKTsKPiArI2VuZGlmCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ ICsgwqAgwqAgwqAgwqBjYXNlIElOREVYX29wX3FlbXVfc3Q4Ogo+ICsgwqAgwqAgwqAgwqAgwqAg wqB0MCA9IHRjaV9yZWFkX3I4KCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9 IHRjaV9yZWFkX3Vsb25nKCZ0Yl9wdHIpOwo+ICsjaWZkZWYgQ09ORklHX1NPRlRNTVUKPiArIMKg IMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqBfX3N0Yl9tbXUodGFkZHIsIHQwLCB0Mik7Cj4gKyNlbHNlCj4gKyDCoCDCoCDCoCDCoCDC oCDCoGhvc3RfYWRkciA9ICh0Y2dfdGFyZ2V0X3Vsb25nKXRhZGRyOwo+ICsgwqAgwqAgwqAgwqAg wqAgwqBhc3NlcnQodGFkZHIgPT0gaG9zdF9hZGRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgKih1 aW50OF90ICopKGhvc3RfYWRkciArIEdVRVNUX0JBU0UpID0gdDA7Cj4gKyNlbmRpZgo+ICsgwqAg wqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgY2FzZSBJTkRFWF9vcF9xZW11X3N0 MTY6Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoHQwID0gdGNpX3JlYWRfcjE2KCZ0Yl9wdHIpOwo+ICsg wqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9IHRjaV9yZWFkX3Vsb25nKCZ0Yl9wdHIpOwo+ICsjaWZk ZWYgQ09ORklHX1NPRlRNTVUKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0Y2lfcmVhZF9pKCZ0 Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBfX3N0d19tbXUodGFkZHIsIHQwLCB0Mik7Cj4g KyNlbHNlCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGhvc3RfYWRkciA9ICh0Y2dfdGFyZ2V0X3Vsb25n KXRhZGRyOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBhc3NlcnQodGFkZHIgPT0gaG9zdF9hZGRyKTsK PiArIMKgIMKgIMKgIMKgIMKgIMKgKih1aW50MTZfdCAqKShob3N0X2FkZHIgKyBHVUVTVF9CQVNF KSA9IHRzd2FwMTYodDApOwo+ICsjZW5kaWYKPiArIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7Cj4g KyDCoCDCoCDCoCDCoGNhc2UgSU5ERVhfb3BfcWVtdV9zdDMyOgo+ICsgwqAgwqAgwqAgwqAgwqAg wqB0MCA9IHRjaV9yZWFkX3IzMigmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKgIMKgIMKgdGFkZHIg PSB0Y2lfcmVhZF91bG9uZygmdGJfcHRyKTsKPiArI2lmZGVmIENPTkZJR19TT0ZUTU1VCj4gKyDC oCDCoCDCoCDCoCDCoCDCoHQyID0gdGNpX3JlYWRfaSgmdGJfcHRyKTsKPiArIMKgIMKgIMKgIMKg IMKgIMKgX19zdGxfbW11KHRhZGRyLCB0MCwgdDIpOwo+ICsjZWxzZQo+ICsgwqAgwqAgwqAgwqAg wqAgwqBob3N0X2FkZHIgPSAodGNnX3RhcmdldF91bG9uZyl0YWRkcjsKPiArIMKgIMKgIMKgIMKg IMKgIMKgYXNzZXJ0KHRhZGRyID09IGhvc3RfYWRkcik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCoo dWludDMyX3QgKikoaG9zdF9hZGRyICsgR1VFU1RfQkFTRSkgPSB0c3dhcDMyKHQwKTsKPiArI2Vu ZGlmCj4gKyDCoCDCoCDCoCDCoCDCoCDCoGJyZWFrOwo+ICsgwqAgwqAgwqAgwqBjYXNlIElOREVY X29wX3FlbXVfc3Q2NDoKPiArIMKgIMKgIMKgIMKgIMKgIMKgdTY0ID0gdGNpX3JlYWRfcjY0KCZ0 Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqB0YWRkciA9IHRjaV9yZWFkX3Vsb25nKCZ0Yl9w dHIpOwo+ICsjaWZkZWYgQ09ORklHX1NPRlRNTVUKPiArIMKgIMKgIMKgIMKgIMKgIMKgdDIgPSB0 Y2lfcmVhZF9pKCZ0Yl9wdHIpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBfX3N0cV9tbXUodGFkZHIs IHU2NCwgdDIpOwo+ICsjZWxzZQo+ICsgwqAgwqAgwqAgwqAgwqAgwqBob3N0X2FkZHIgPSAodGNn X3RhcmdldF91bG9uZyl0YWRkcjsKPiArIMKgIMKgIMKgIMKgIMKgIMKgYXNzZXJ0KHRhZGRyID09 IGhvc3RfYWRkcik7Cj4gKyDCoCDCoCDCoCDCoCDCoCDCoCoodWludDY0X3QgKikoaG9zdF9hZGRy ICsgR1VFU1RfQkFTRSkgPSB0c3dhcDY0KHU2NCk7Cj4gKyNlbmRpZgo+ICsgwqAgwqAgwqAgwqAg wqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgZGVmYXVsdDoKPiArIMKgIMKgIMKgIMKgIMKgIMKg VE9ETygpOwo+ICsgwqAgwqAgwqAgwqAgwqAgwqBicmVhazsKPiArIMKgIMKgIMKgIMKgfQo+ICsg wqAgwqAgwqAgwqBhc3NlcnQodGJfcHRyID09IG9sZF9jb2RlX3B0ciArIG9wX3NpemUpOwo+ICsg wqAgwqB9Cj4gK2V4aXQ6Cj4gKyDCoCDCoHJldHVybiBuZXh0X3RiOwo+ICt9Cj4gLS0KPiAxLjcu Mi41Cj4KPgo+Cg==