From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: Re: [PATCH v4 20/21] libxl/acpi: Build ACPI tables for HVMlite guests Date: Thu, 22 Sep 2016 11:53:07 +0100 Message-ID: <20160922105307.GF27172@citrix.com> References: <1474330779-10645-1-git-send-email-boris.ostrovsky@oracle.com> <1474330779-10645-21-git-send-email-boris.ostrovsky@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1474330779-10645-21-git-send-email-boris.ostrovsky@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Boris Ostrovsky Cc: wei.liu2@citrix.com, andrew.cooper3@citrix.com, ian.jackson@eu.citrix.com, xen-devel@lists.xen.org, julien.grall@arm.com, jbeulich@suse.com, zhaoshenglong@huawei.com, roger.pau@citrix.com List-Id: xen-devel@lists.xenproject.org T24gTW9uLCBTZXAgMTksIDIwMTYgYXQgMDg6MTk6MzhQTSAtMDQwMCwgQm9yaXMgT3N0cm92c2t5 IHdyb3RlOgo+IFNpZ25lZC1vZmYtYnk6IEJvcmlzIE9zdHJvdnNreSA8Ym9yaXMub3N0cm92c2t5 QG9yYWNsZS5jb20+CgpUaGUgY29kZSBtb3N0bHkgbG9va3MgZ29vZC4gIFNvbWUgbml0cyBiZWxv dy4KCj4gLS0tCj4gQ2hhbmdlcyBpbiB2NDoKPiAqIFJlbW92ZSBhbGxvY2F0aW9uLXNwZWNpZmlj IGZpZWxkcyBmcm9tIHN0cnVjdCBhY3BpX2N0eHQgYW5kIHVzZQo+ICAgYW4gZW5jbG9zaW5nIHN0 cnVjdCBsaWJ4bF9hY3BpX2N0eHQuCj4gKiBVc2UgcHJpdmF0ZSBzdHJ1Y3QgaHZtaW5mbyAodG8g ZGVhbCB3aXRoIGNvbnN0aWZpZWQgc3RydWN0Cj4gICBhY3BpX2NvbmZpZy0+aHZtaW5mbykKPiAK PiAgLmdpdGlnbm9yZSAgICAgICAgICAgICAgICAgICB8ICAxMiArKy0KPiAgdG9vbHMvbGliYWNw aS9idWlsZC5jICAgICAgICB8ICAgNyArLQo+ICB0b29scy9saWJhY3BpL2xpYmFjcGkuaCAgICAg IHwgICA2ICstCj4gIHRvb2xzL2xpYnhsL01ha2VmaWxlICAgICAgICAgfCAgMTggKysrLQo+ICB0 b29scy9saWJ4bC9saWJ4bF9hcmNoLmggICAgIHwgICAzICsKPiAgdG9vbHMvbGlieGwvbGlieGxf eDg2LmMgICAgICB8ICAzMCArKysrLS0KPiAgdG9vbHMvbGlieGwvbGlieGxfeDg2X2FjcGkuYyB8 IDI0MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4gIHRvb2xz L2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmggfCAgMzUgKysrKysrKwo+ICA4IGZpbGVzIGNoYW5nZWQs IDMzNCBpbnNlcnRpb25zKCspLCAyMCBkZWxldGlvbnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0 IHRvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmMKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xz L2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmgKPiAKPiBkaWZmIC0tZ2l0IGEvLmdpdGlnbm9yZSBiLy5n aXRpZ25vcmUKPiBpbmRleCA1NzIwZTBmLi45YjZmNThlIDEwMDY0NAo+IC0tLSBhLy5naXRpZ25v cmUKPiArKysgYi8uZ2l0aWdub3JlCj4gQEAgLTE3MywxNSArMTczLDE5IEBAIHRvb2xzL2luY2x1 ZGUveGVuLyoKPiAgdG9vbHMvaW5jbHVkZS94ZW4teHNtLyoKPiAgdG9vbHMvaW5jbHVkZS94ZW4t Zm9yZWlnbi8qLihjfGh8c2l6ZSkKPiAgdG9vbHMvaW5jbHVkZS94ZW4tZm9yZWlnbi9jaGVja2Vy Cj4gLXRvb2xzL2xpYnhsL2xpYnhsdV9jZmdfeS5vdXRwdXQKPiArdG9vbHMvbGlieGwvX2xpYnhs LmFwaS1mb3ItY2hlY2sKPiArdG9vbHMvbGlieGwvKi5hcGktb2sKPiAgdG9vbHMvbGlieGwvKi5w Ywo+ICB0b29scy9saWJ4bC8qLnBjLmluCj4gLXRvb2xzL2xpYnhsL3hsCj4gK3Rvb2xzL2xpYnhs L2RzZHQqLmMKPiArdG9vbHMvbGlieGwvZHNkdF8qLmFzbAo+ICt0b29scy9saWJ4bC9saWJ4bHVf Y2ZnX3kub3V0cHV0Cj4gK3Rvb2xzL2xpYnhsL21rX2RzZHQKPiArdG9vbHMvbGlieGwvc3NkdF8q LmgKPiAgdG9vbHMvbGlieGwvdGVzdGVudW0KPiAgdG9vbHMvbGlieGwvdGVzdGVudW0uYwo+ICB0 b29scy9saWJ4bC90bXAuKgo+IC10b29scy9saWJ4bC9fbGlieGwuYXBpLWZvci1jaGVjawo+IC10 b29scy9saWJ4bC8qLmFwaS1vawo+ICt0b29scy9saWJ4bC94bAo+ICB0b29scy9taXNjL2NwdXBl cmYvY3B1cGVyZi1wZXJmY250cgo+ICB0b29scy9taXNjL2NwdXBlcmYvY3B1cGVyZi14ZW4KPiAg dG9vbHMvbWlzYy94Y19zaGFkb3cKPiBkaWZmIC0tZ2l0IGEvdG9vbHMvbGliYWNwaS9idWlsZC5j IGIvdG9vbHMvbGliYWNwaS9idWlsZC5jCj4gaW5kZXggMDBmYjY3ZS4uNDdkYWUwMSAxMDA2NDQK PiAtLS0gYS90b29scy9saWJhY3BpL2J1aWxkLmMKPiArKysgYi90b29scy9saWJhY3BpL2J1aWxk LmMKPiBAQCAtMjAsNiArMjAsNyBAQAo+ICAjaW5jbHVkZSAic3NkdF9zNC5oIgo+ICAjaW5jbHVk ZSAic3NkdF90cG0uaCIKPiAgI2luY2x1ZGUgInNzZHRfcG0uaCIKPiArI2luY2x1ZGUgPHhlbi9o dm0vaHZtX2luZm9fdGFibGUuaD4KPiAgI2luY2x1ZGUgPHhlbi9odm0vaHZtX3hzX3N0cmluZ3Mu aD4KPiAgI2luY2x1ZGUgPHhlbi9odm0vcGFyYW1zLmg+Cj4gICNpbmNsdWRlIDx4ZW4vbWVtb3J5 Lmg+Cj4gQEAgLTQ5Niw3ICs0OTcsNyBAQCBzdGF0aWMgaW50IG5ld192bV9naWQoc3RydWN0IGFj cGlfY3R4dCAqY3R4dCwKPiAgICAgIHJldHVybiAxOwo+ICB9Cj4gIAo+IC12b2lkIGFjcGlfYnVp bGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29u ZmlnKQo+ICtpbnQgYWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwgc3Ry dWN0IGFjcGlfY29uZmlnICpjb25maWcpCj4gIHsKPiAgICAgIHN0cnVjdCBhY3BpX2luZm8gKmFj cGlfaW5mbzsKPiAgICAgIHN0cnVjdCBhY3BpXzIwX3JzZHAgKnJzZHA7Cj4gQEAgLTYzMSwxMSAr NjMyLDExIEBAIHZvaWQgYWNwaV9idWlsZF90YWJsZXMoc3RydWN0IGFjcGlfY3R4dCAqY3R4dCwg c3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpCj4gICAgICBpZiAoICFuZXdfdm1fZ2lkKGN0eHQs IGNvbmZpZywgYWNwaV9pbmZvKSApCj4gICAgICAgICAgZ290byBvb207Cj4gIAo+IC0gICAgcmV0 dXJuOwo+ICsgICAgcmV0dXJuIDA7Cj4gIAo+ICBvb206Cj4gICAgICBwcmludGYoInVuYWJsZSB0 byBidWlsZCBBQ1BJIHRhYmxlczogb3V0IG9mIG1lbW9yeVxuIik7Cj4gLQo+ICsgICAgcmV0dXJu IC0xOwo+ICB9Cj4gIAo+ICAvKgo+IGRpZmYgLS1naXQgYS90b29scy9saWJhY3BpL2xpYmFjcGku aCBiL3Rvb2xzL2xpYmFjcGkvbGliYWNwaS5oCj4gaW5kZXggZTM4NjM2Mi4uMWQzODhmOSAxMDA2 NDQKPiAtLS0gYS90b29scy9saWJhY3BpL2xpYmFjcGkuaAo+ICsrKyBiL3Rvb2xzL2xpYmFjcGkv bGliYWNwaS5oCj4gQEAgLTc4LDEwICs3OCwxMCBAQCBzdHJ1Y3QgYWNwaV9jb25maWcgewo+ICAg ICAgICogVGhpcyBtdXN0IG1hdGNoIHRoZSBPcGVyYXRpb25SZWdpb24oQklPUywgU3lzdGVtTWVt b3J5LCAuLi4uKQo+ICAgICAgICogZGVmaW5pdGlvbiBpbiB0aGUgRFNEVAo+ICAgICAgICovCj4g LSAgICB1bnNpZ25lZCBpbnQgaW5mb3A7Cj4gKyAgICB1bnNpZ25lZCBsb25nIGluZm9wOwo+ICAK PiAgICAgIC8qIFJTRFAgYWRkcmVzcyAqLwo+IC0gICAgdW5zaWduZWQgaW50IHJzZHA7Cj4gKyAg ICB1bnNpZ25lZCBsb25nIHJzZHA7Cj4gIAo+ICAgICAgLyogeDg2LXNwZWNpZmljIHBhcmFtZXRl cnMgKi8KPiAgICAgIHVpbnQ4X3QgKCpsYXBpY19pZCkodW5zaWduZWQgY3B1KTsKPiBAQCAtOTEs NyArOTEsNyBAQCBzdHJ1Y3QgYWNwaV9jb25maWcgewo+ICAgICAgdWludDhfdCBpb2FwaWNfaWQ7 Cj4gIH07Cj4gIAo+IC12b2lkIGFjcGlfYnVpbGRfdGFibGVzKHN0cnVjdCBhY3BpX2N0eHQgKmN0 eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnKTsKPiAraW50IGFjcGlfYnVpbGRfdGFibGVz KHN0cnVjdCBhY3BpX2N0eHQgKmN0eHQsIHN0cnVjdCBhY3BpX2NvbmZpZyAqY29uZmlnKTsKPiAg Cj4gICNlbmRpZiAvKiBfX0xJQkFDUElfSF9fICovCj4gIAo+IGRpZmYgLS1naXQgYS90b29scy9s aWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCj4gaW5kZXggOTA0MjdmZi4uMzM2 MzU4YyAxMDA2NDQKPiAtLS0gYS90b29scy9saWJ4bC9NYWtlZmlsZQo+ICsrKyBiL3Rvb2xzL2xp YnhsL01ha2VmaWxlCj4gQEAgLTc1LDcgKzc1LDIxIEBAIGVsc2UKPiAgTElCWExfT0JKUy15ICs9 IGxpYnhsX25vX2NvbG8ubwo+ICBlbmRpZgo+ICAKPiAtTElCWExfT0JKUy0kKENPTkZJR19YODYp ICs9IGxpYnhsX2NwdWlkLm8gbGlieGxfeDg2Lm8gbGlieGxfcHNyLm8KPiArQUNQSV9QQVRIICA9 ICQoWEVOX1JPT1QpL3Rvb2xzL2xpYmFjcGkKPiArQUNQSV9GSUxFUyA9IGRzZHRfcHZoLmMKPiAr QUNQSV9PQkpTICA9ICQocGF0c3Vic3QgJS5jLCUubywkKEFDUElfRklMRVMpKSBidWlsZC5vIHN0 YXRpY190YWJsZXMubwo+ICskKEFDUElfRklMRVMpOiBhY3BpCj4gKyQoQUNQSV9PQkpTKTogQ0ZM QUdTICs9IC1JLiAtRExJQkFDUElfU1REVVRJTFM9XCIkKENVUkRJUikvbGlieGxfeDg2X2FjcGku aFwiCj4gK3ZwYXRoIGJ1aWxkLmMgJChBQ1BJX1BBVEgpLwo+ICt2cGF0aCBzdGF0aWNfdGFibGVz LmMgJChBQ1BJX1BBVEgpLwo+ICtMSUJYTF9PQkpTLSQoQ09ORklHX1g4NikgKz0gJChBQ1BJX09C SlMpCj4gKwo+ICsuUEhPTlk6IGFjcGkKPiArYWNwaToKPiArCSQoTUFLRSkgLUMgJChBQ1BJX1BB VEgpIEFDUElfQlVJTERfRElSPSQoQ1VSRElSKQo+ICstaW5jbHVkZSBhY3BpCgpVc2VsZXNzIGlu Y2x1ZGU/Cgo+ICsKPiArTElCWExfT0JKUy0kKENPTkZJR19YODYpICs9IGxpYnhsX2NwdWlkLm8g bGlieGxfeDg2Lm8gbGlieGxfcHNyLm8gbGlieGxfeDg2X2FjcGkubwo+ICBMSUJYTF9PQkpTLSQo Q09ORklHX0FSTSkgKz0gbGlieGxfbm9jcHVpZC5vIGxpYnhsX2FybS5vIGxpYnhsX2xpYmZkdF9j b21wYXQubwo+ICAKPiAgaWZlcSAoJChDT05GSUdfTmV0QlNEKSx5KQo+IEBAIC0xNjcsNiArMTgx LDcgQEAgJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQo+ICAkKFhMX09CSlMpOiBD RkxBR1MgKz0gLWluY2x1ZGUgJChYRU5fUk9PVCkvdG9vbHMvY29uZmlnLmggIyBsaWJ4bF9qc29u LmggbmVlZHMgaXQuCj4gIAo+ICBsaWJ4bF9kb20ubzogQ0ZMQUdTICs9IC1JJChYRU5fUk9PVCkv dG9vbHMgICMgaW5jbHVkZSBsaWJhY3BpL3g4Ni5oCj4gK2xpYnhsX3g4Nl9hY3BpLm86IENGTEFH UyArPSAtSSQoWEVOX1JPT1QpL3Rvb2xzCj4gIAo+ICBTQVZFX0hFTFBFUl9PQkpTID0gbGlieGxf c2F2ZV9oZWxwZXIubyBfbGlieGxfc2F2ZV9tc2dzX2hlbHBlci5vCj4gICQoU0FWRV9IRUxQRVJf T0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW5jdHJsKSAkKENGTEFHU19saWJ4ZW5ldnRj aG4pCj4gQEAgLTMwOSw2ICszMjQsNyBAQCBjbGVhbjoKPiAgCSQoUk0pIC1mIHRlc3RpZGwuYy5u ZXcgdGVzdGlkbC5jICouYXBpLW9rCj4gIAkkKFJNKSAtZiB4ZW5saWdodC5wYwo+ICAJJChSTSkg LWYgeGx1dGlsLnBjCj4gKwkkKE1BS0UpIC1DICQoQUNQSV9QQVRIKSBBQ1BJX0JVSUxEX0RJUj0k KENVUkRJUikgY2xlYW4KPiAgCj4gIGRpc3RjbGVhbjogY2xlYW4KPiAgCSQoUk0pIC1mIHhlbmxp Z2h0LnBjLmluIHhsdXRpbC5wYy5pbgo+IGRpZmYgLS1naXQgYS90b29scy9saWJ4bC9saWJ4bF9h cmNoLmggYi90b29scy9saWJ4bC9saWJ4bF9hcmNoLmgKPiBpbmRleCAyNTNhMDM3Li43YTcwYjAx IDEwMDY0NAo+IC0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX2FyY2guaAo+ICsrKyBiL3Rvb2xzL2xp YnhsL2xpYnhsX2FyY2guaAo+IEBAIC02Niw2ICs2Niw5IEBAIGludCBsaWJ4bF9fYXJjaF9kb21h aW5fY29uc3RydWN0X21lbW1hcChsaWJ4bF9fZ2MgKmdjLAo+ICAKPiAgI2RlZmluZSBMQVBJQ19C QVNFX0FERFJFU1MgIDB4ZmVlMDAwMDAKPiAgCj4gK2ludCBsaWJ4bF9fZG9tX2xvYWRfYWNwaShs aWJ4bF9fZ2MgKmdjLAo+ICsJCQkgY29uc3QgbGlieGxfZG9tYWluX2J1aWxkX2luZm8gKmJfaW5m bywKPiArCQkJIHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSk7CgpVc2Ugc3BhY2UgaW5zdGVhZCBv ZiB0YWIgcGxlYXNlLgoKPiAgI2VuZGlmCj4gIAo+ICAjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvdG9v bHMvbGlieGwvbGlieGxfeDg2LmMgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwo+IGluZGV4IDJi MjIxYWEuLmQxMGIwNGIgMTAwNjQ0Cj4gLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfeDg2LmMKPiAr KysgYi90b29scy9saWJ4bC9saWJ4bF94ODYuYwo+IEBAIC04LDE1ICs4LDE5IEBAIGludCBsaWJ4 bF9fYXJjaF9kb21haW5fcHJlcGFyZV9jb25maWcobGlieGxfX2djICpnYywKPiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4Y19kb21haW5fY29uZmlndXJhdGlvbl90ICp4 Y19jb25maWcpCj4gIHsKPiAgCj4gLSAgICBpZiAoZF9jb25maWctPmNfaW5mby50eXBlID09IExJ QlhMX0RPTUFJTl9UWVBFX0hWTSAmJgo+IC0gICAgICAgIGRfY29uZmlnLT5iX2luZm8uZGV2aWNl X21vZGVsX3ZlcnNpb24gIT0KPiAtICAgICAgICBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9O T05FKSB7Cj4gLSAgICAgICAgLyogSFZNIGRvbWFpbnMgd2l0aCBhIGRldmljZSBtb2RlbC4gKi8K PiAtICAgICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9IFhFTl9YODZfRU1VX0FMTDsK PiAtICAgIH0gZWxzZSB7Cj4gLSAgICAgICAgLyogUFYgb3IgSFZNIGRvbWFpbnMgd2l0aG91dCBh IGRldmljZSBtb2RlbC4gKi8KPiArICAgIGlmIChkX2NvbmZpZy0+Y19pbmZvLnR5cGUgPT0gTElC WExfRE9NQUlOX1RZUEVfSFZNKSB7Cj4gKyAgICAgICAgaWYgKGRfY29uZmlnLT5iX2luZm8uZGV2 aWNlX21vZGVsX3ZlcnNpb24gIT0KPiArICAgICAgICAgICAgTElCWExfREVWSUNFX01PREVMX1ZF UlNJT05fTk9ORSkgewo+ICsgICAgICAgICAgICB4Y19jb25maWctPmVtdWxhdGlvbl9mbGFncyA9 IFhFTl9YODZfRU1VX0FMTDsKPiArICAgICAgICB9IGVsc2UgaWYgKGxpYnhsX2RlZmJvb2xfdmFs KGRfY29uZmlnLT5iX2luZm8udS5odm0uYXBpYykpIHsKPiArICAgICAgICAgICAgLyoKPiArICAg ICAgICAgICAgICogSFZNIGd1ZXN0cyB3aXRob3V0IGRldmljZSBtb2RlbCBtYXkgd2FudAo+ICsg ICAgICAgICAgICAgKiB0byBoYXZlIExBUElDIGVtdWxhdGlvbi4KPiArICAgICAgICAgICAgICov Cj4gKyAgICAgICAgICAgIHhjX2NvbmZpZy0+ZW11bGF0aW9uX2ZsYWdzID0gWEVOX1g4Nl9FTVVf TEFQSUM7Cj4gKyAgICAgICAgfQo+ICsgICAgfSBlbHNlIAo+ICAgICAgICAgIHhjX2NvbmZpZy0+ ZW11bGF0aW9uX2ZsYWdzID0gMDsKPiAtICAgIH0KPiAgCgpDb2Rpbmcgc3R5bGUgbml0OiBXZSBu b3cgZm9yYmlkIGFuIGVsc2UgYnJhbmNoIHdpdGhvdXQgYnJhY2VzLiBQbGVhc2UKYWRkIHRoZW0g aGVyZS4KCj4gICAgICByZXR1cm4gMDsKPiAgfQo+IEBAIC0zNjYsNyArMzcwLDE1IEBAIGludCBs aWJ4bF9fYXJjaF9kb21haW5fZmluYWxpc2VfaHdfZGVzY3JpcHRpb24obGlieGxfX2djICpnYywK PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k b21haW5fYnVpbGRfaW5mbyAqaW5mbywKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCj4gIHsKPiAtICAgIHJl dHVybiAwOwo+ICsgICAgaW50IHJldCA9IDA7CgpVc2UgcmMgcGxlYXNlLgoKPiArCj4gKyAgICBp ZiAoKGluZm8tPnR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSAmJgo+ICsgICAgICAgIChp bmZvLT5kZXZpY2VfbW9kZWxfdmVyc2lvbiA9PSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9O T05FKSkgewo+ICsgICAgICAgIGlmICggKHJldCA9IGxpYnhsX19kb21fbG9hZF9hY3BpKGdjLCBp bmZvLCBkb20pKSAhPSAwICkKCkV4dHJhbmVvdXMgc3BhY2VzIGhlcmUuIEFuZCBsaWZ0IHJldD0g Yml0IG91dCBvZiBpZiBzdGF0ZW1lbnQuCgo+ICsgICAgICAgICAgICBMT0dFKEVSUk9SLCAibGli eGxfZG9tX2xvYWRfYWNwaSBmYWlsZWQiKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0 Owo+ICB9Cj4gIAo+ICAvKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBFUlJPUl8qIG9uIGZhaWx1cmUu ICovCj4gZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3g4Nl9hY3BpLmMgYi90b29scy9s aWJ4bC9saWJ4bF94ODZfYWNwaS5jCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAw MDAwLi4xYjM4MTE2Cj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsX3g4 Nl9hY3BpLmMKPiBAQCAtMCwwICsxLDI0MyBAQAo+ICsvKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsg KiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQKPiArICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg dmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAo+ICsgKiBleGNlcHRpb24gb24gbGlu a2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICog YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKPiArICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFLiAgU2VlIHRoZQo+ICsgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBh bmQvb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiAr I2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCj4gKyNpbmNsdWRlICJsaWJ4bF9hcmNoLmgiCj4g KyNpbmNsdWRlIDx4ZW4vaHZtL2h2bV9pbmZvX3RhYmxlLmg+Cj4gKyNpbmNsdWRlIDx4ZW4vaHZt L2U4MjAuaD4KPiArI2luY2x1ZGUgImxpYmFjcGkvbGliYWNwaS5oIgo+ICsKPiArI2luY2x1ZGUg PHhjX2RvbS5oPgo+ICsKPiArIC8qIE51bWJlciBvZiBwYWdlcyBob2xkaW5nIEFDUEkgdGFibGVz ICovCj4gKyNkZWZpbmUgTlVNX0FDUElfUEFHRVMgMTYKPiArLyogU3RvcmUgUlNEUCBpbiB0aGUg bGFzdCA2NCBieXRlcyBvZiBCSU9TIFJPIG1lbW9yeSAqLwo+ICsjZGVmaW5lIFJTRFBfQUREUkVT UyAoMHgxMDAwMDAgLSA2NCkKPiArI2RlZmluZSBBQ1BJX0lORk9fUEhZU0lDQUxfQUREUkVTUyAw eGZjMDAwMDAwCj4gKwo+ICtzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0IHsKPiArICAgIHN0cnVjdCBh Y3BpX2N0eHQgYzsKPiArCj4gKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaXplOwo+ICsgICAgdW5z aWduZWQgaW50IHBhZ2Vfc2hpZnQ7Cj4gKwo+ICsgICAgLyogTWVtb3J5IGFsbG9jYXRvciAqLwo+ ICsgICAgdW5zaWduZWQgbG9uZyBhbGxvY19iYXNlX3BhZGRyOwo+ICsgICAgdW5zaWduZWQgbG9u ZyBhbGxvY19iYXNlX3ZhZGRyOwo+ICsgICAgdW5zaWduZWQgbG9uZyBhbGxvY19jdXJycDsKPiAr ICAgIHVuc2lnbmVkIGxvbmcgYWxsb2NfZW5kOwo+ICt9Owo+ICsKPiArZXh0ZXJuIGNvbnN0IHVu c2lnbmVkIGNoYXIgZHNkdF9wdmhbXTsKPiArZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGludCBkc2R0 X3B2aF9sZW47Cj4gKwo+ICsvKiBBc3N1bWVzIGNvbnRpZ3VvdXMgcGh5c2ljYWwgc3BhY2UgKi8K PiArc3RhdGljIHVuc2lnbmVkIGxvbmcgdmlydF90b19waHlzKHN0cnVjdCBhY3BpX2N0eHQgKmN0 eHQsIHZvaWQgKnYpCj4gK3sKPiArICAgIHN0cnVjdCBsaWJ4bF9hY3BpX2N0eHQgKmxpYnhsX2N0 eHQgPQo+ICsgICAgICAgIENPTlRBSU5FUl9PRihjdHh0LCBzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0 LCBjKTsKPiArCj4gKyAgICByZXR1cm4gKCgodW5zaWduZWQgbG9uZyl2IC0gbGlieGxfY3R4dC0+ YWxsb2NfYmFzZV92YWRkcikgKwo+ICsgICAgICAgICAgICBsaWJ4bF9jdHh0LT5hbGxvY19iYXNl X3BhZGRyKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgKm1lbV9hbGxvYyhzdHJ1Y3QgYWNwaV9j dHh0ICpjdHh0LAo+ICsgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNpemUsIHVpbnQz Ml90IGFsaWduKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0ICpsaWJ4bF9jdHh0 ID0KPiArICAgICAgICBDT05UQUlORVJfT0YoY3R4dCwgc3RydWN0IGxpYnhsX2FjcGlfY3R4dCwg Yyk7Cj4gKyAgICB1bnNpZ25lZCBsb25nIHMsIGU7Cj4gKwo+ICsgICAgLyogQWxpZ24gdG8gYXQg bGVhc3QgMTYgYnl0ZXMuICovCj4gKyAgICBpZiAoYWxpZ24gPCAxNikKPiArICAgICAgICBhbGln biA9IDE2Owo+ICsKPiArICAgIHMgPSAobGlieGxfY3R4dC0+YWxsb2NfY3VycnAgKyBhbGlnbikg JiB+KCh1bnNpZ25lZCBsb25nKWFsaWduIC0gMSk7Cj4gKyAgICBlID0gcyArIHNpemUgLSAxOwo+ ICsKPiArICAgIC8qIFRPRE86IFJlYWxsb2NhdGUgbWVtb3J5ICovCj4gKyAgICBpZiAoKGUgPCBz KSB8fCAoZSA+PSBsaWJ4bF9jdHh0LT5hbGxvY19lbmQpKQo+ICsgICAgICAgIHJldHVybiBOVUxM Owo+ICsKPiArICAgIHdoaWxlIChsaWJ4bF9jdHh0LT5hbGxvY19jdXJycCA+PiBsaWJ4bF9jdHh0 LT5wYWdlX3NoaWZ0ICE9IAo+ICsgICAgICAgICAgIGUgPj4gbGlieGxfY3R4dC0+cGFnZV9zaGlm dCkKPiArICAgICAgICBsaWJ4bF9jdHh0LT5hbGxvY19jdXJycCArPSBsaWJ4bF9jdHh0LT5wYWdl X3NpemU7Cj4gKwo+ICsgICAgbGlieGxfY3R4dC0+YWxsb2NfY3VycnAgPSBlOwo+ICsKPiArICAg IHJldHVybiAodm9pZCAqKXM7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGFjcGlfbWVtX2ZyZWUo c3RydWN0IGFjcGlfY3R4dCAqY3R4dCwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICp2LCB1aW50MzJfdCBzaXplKQo+ICt7Cj4gK30KPiArCj4gK3N0YXRpYyB1aW50OF90IGFjcGlf bGFwaWNfaWQodW5zaWduZWQgY3B1KQo+ICt7Cj4gKyAgICByZXR1cm4gY3B1ICogMjsKCklzIHRo aXMgaW4gYWNjb3JkYW5jZSB3aXRoIGhhcmR3YXJlIHNwZWM/Cgo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGluaXRfYWNwaV9jb25maWcobGlieGxfX2djICpnYywgCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20sCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBsaWJ4bF9kb21haW5fYnVpbGRfaW5mbyAqYl9pbmZvLAo+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGFjcGlfY29uZmlnICpjb25maWcpCj4gK3sK ClVzZSBnb3RvIHN0eWxlIGVycm9yIGhhbmRsaW5nIGluIHRoaXMgZnVuY3Rpb24gcGxlYXNlLgoK PiArICAgIHhjX2ludGVyZmFjZSAqeGNoID0gZG9tLT54Y2g7Cj4gKyAgICB1aW50MzJfdCBkb21p ZCA9IGRvbS0+Z3Vlc3RfZG9taWQ7Cj4gKyAgICB4Y19kb21pbmZvX3QgaW5mbzsKPiArICAgIHN0 cnVjdCBodm1faW5mb190YWJsZSAqaHZtaW5mbzsKPiArICAgIGludCBpLCByYzsKPiArCj4gKyAg ICBjb25maWctPmRzZHRfYW55Y3B1ID0gY29uZmlnLT5kc2R0XzE1Y3B1ID0gZHNkdF9wdmg7Cj4g KyAgICBjb25maWctPmRzZHRfYW55Y3B1X2xlbiA9IGNvbmZpZy0+ZHNkdF8xNWNwdV9sZW4gPSBk c2R0X3B2aF9sZW47Cj4gKwo+ICsgICAgcmMgPSB4Y19kb21haW5fZ2V0aW5mbyh4Y2gsIGRvbWlk LCAxLCAmaW5mbyk7Cj4gKyAgICBpZiAocmMgPCAwKSB7Cj4gKyAgICAgICAgTE9HKEVSUk9SLCAi JXM6IGdldGRvbWFpbmluZm8gZmFpbGVkIChyYz0lZCkiLCBfX0ZVTkNUSU9OX18sIHJjKTsKCk5v IG5lZWQgdG8gaGF2ZSBfX0ZVTkNUSU9OX18gLS0gTE9HIGFscmVhZHkgcHJpbnRzIHRoYXQuCgo+ ICsgICAgICAgIHJldHVybiByYzsKPiArICAgIH0KPiArCj4gKyAgICBodm1pbmZvID0gbGlieGxf X3phbGxvYyhnYywgc2l6ZW9mKCpodm1pbmZvKSk7Cj4gKwo+ICsgICAgaHZtaW5mby0+YXBpY19t b2RlID0gbGlieGxfZGVmYm9vbF92YWwoYl9pbmZvLT51Lmh2bS5hcGljKTsKPiArCj4gKyAgICBp ZiAoZG9tLT5ucl92bm9kZXMpIHsKPiArICAgICAgICB1bnNpZ25lZCBpbnQgKnZjcHVfdG9fdm5v ZGUsICp2ZGlzdGFuY2U7Cj4gKyAgICAgICAgc3RydWN0IHhlbl92bWVtcmFuZ2UgKnZtZW1yYW5n ZTsKPiArICAgICAgICBzdHJ1Y3QgYWNwaV9udW1hICpudW1hID0gJmNvbmZpZy0+bnVtYTsKPiAr Cj4gKyAgICAgICAgcmMgPSB4Y19kb21haW5fZ2V0dm51bWEoeGNoLCBkb21pZCwgJm51bWEtPm5y X3Zub2RlcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbnVtYS0+bnJfdm1l bXJhbmdlcywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaHZtaW5mby0+bnJf dmNwdXMsIE5VTEwsIE5VTEwsIE5VTEwpOwo+ICsgICAgICAgIGlmIChyYykgewo+ICsgICAgICAg ICAgICBMT0coRVJST1IsICIlczogeGNfZG9tYWluX2dldHZudW1hIGZhaWxlZCAocmM9JWQpIiwK PiArICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05fXywgcmMpOwo+ICsgICAgICAgICAgICByZXR1 cm4gcmM7Cj4gKyAgICAgICAgfQo+ICsKPiArICAgICAgICB2bWVtcmFuZ2UgPSBsaWJ4bF9femFs bG9jKGdjLCBkb20tPm5yX3ZtZW1yYW5nZXMgKiBzaXplb2YoKnZtZW1yYW5nZSkpOwo+ICsgICAg ICAgIHZkaXN0YW5jZSA9IGxpYnhsX196YWxsb2MoZ2MsIGRvbS0+bnJfdm5vZGVzICogc2l6ZW9m KCp2ZGlzdGFuY2UpKTsKPiArICAgICAgICB2Y3B1X3RvX3Zub2RlID0gbGlieGxfX3phbGxvYyhn YywgaHZtaW5mby0+bnJfdmNwdXMgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVvZigqdmNwdV90b192bm9kZSkpOwo+ICsgICAgICAgIHJjID0geGNfZG9tYWlu X2dldHZudW1hKHhjaCwgZG9taWQsICZudW1hLT5ucl92bm9kZXMsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJm51bWEtPm5yX3ZtZW1yYW5nZXMsICZodm1pbmZvLT5ucl92Y3B1 cywKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2bWVtcmFuZ2UsIHZkaXN0YW5j ZSwgdmNwdV90b192bm9kZSk7Cj4gKwlpZiAocmMpIHsKPiArICAgICAgICAgICAgTE9HKEVSUk9S LCAiJXM6IHhjX2RvbWFpbl9nZXR2bnVtYSBmYWlsZWQgKHJjPSVkKSIsCj4gKyAgICAgICAgICAg ICAgICBfX0ZVTkNUSU9OX18sIHJjKTsKPiArICAgICAgICAgICAgcmV0dXJuIHJjOwo+ICsgICAg ICAgIH0KPiArICAgICAgICBudW1hLT52bWVtcmFuZ2UgPSB2bWVtcmFuZ2U7Cj4gKyAgICAgICAg bnVtYS0+dmRpc3RhbmNlID0gdmRpc3RhbmNlOwo+ICsgICAgICAgIG51bWEtPnZjcHVfdG9fdm5v ZGUgPSB2Y3B1X3RvX3Zub2RlOwo+ICsgICAgfQo+ICsgICAgZWxzZQo+ICsgICAgICAgIGh2bWlu Zm8tPm5yX3ZjcHVzID0gaW5mby5tYXhfdmNwdV9pZCArIDE7CgoiZWxzZSIgc2hvdWxkIGJlIHJp Z2h0IGFmdGVyICJ9IiBhbmQgcGxlYXNlIGFkZCBicmFjZXMuCgo+ICsKPiArICAgIGZvciAoaSA9 IDA7IGkgPCBodm1pbmZvLT5ucl92Y3B1czsgaSsrKQo+ICsgICAgICAgIGh2bWluZm8tPnZjcHVf b25saW5lW2kgLyA4XSB8PSAxIDw8IChpICYgNyk7Cj4gKwo+ICsgICAgY29uZmlnLT5odm1pbmZv ID0gaHZtaW5mbzsKPiArCj4gKyAgICBjb25maWctPmxhcGljX2Jhc2VfYWRkcmVzcyA9IExBUElD X0JBU0VfQUREUkVTUzsKPiArICAgIGNvbmZpZy0+bGFwaWNfaWQgPSBhY3BpX2xhcGljX2lkOwo+ ICsKPiArICAgIHJldHVybiAwOwo+ICt9Cj4gKwo+ICtpbnQgbGlieGxfX2RvbV9sb2FkX2FjcGko bGlieGxfX2djICpnYywKPiArICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2Rv bWFpbl9idWlsZF9pbmZvICpiX2luZm8sCj4gKyAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgeGNfZG9tX2ltYWdlICpkb20pCj4gK3sKPiArICAgIHN0cnVjdCBhY3BpX2NvbmZpZyBjb25m aWcgPSB7MH07Cj4gKyAgICBzdHJ1Y3QgbGlieGxfYWNwaV9jdHh0IGxpYnhsX2N0eHQ7Cj4gKyAg ICBpbnQgcmMsIGFjcGlfcGFnZXNfbnVtOwo+ICsgICAgdm9pZCAqYWNwaV9wYWdlczsKPiArICAg IHVuc2lnbmVkIGxvbmcgcGFnZV9tYXNrOwo+ICsKPiArICAgIGlmICgoYl9pbmZvLT50eXBlICE9 IExJQlhMX0RPTUFJTl9UWVBFX0hWTSkgfHwKPiArICAgICAgICAoYl9pbmZvLT5kZXZpY2VfbW9k ZWxfdmVyc2lvbiAhPSBMSUJYTF9ERVZJQ0VfTU9ERUxfVkVSU0lPTl9OT05FKSkKPiArICAgICAg ICByZXR1cm4gMDsKClBsZWFzZSBkb24ndCB1c2UgbWl4ZWQtc3R5bGUgZXJyb3IgaGFuZGxpbmcu Cgo+ICsKPiArICAgIGxpYnhsX2N0eHQucGFnZV9zaXplID0gWENfRE9NX1BBR0VfU0laRShkb20p Owo+ICsgICAgbGlieGxfY3R4dC5wYWdlX3NoaWZ0ID0gIFhDX0RPTV9QQUdFX1NISUZUKGRvbSk7 Cj4gKyAgICBwYWdlX21hc2sgPSAoMVVMIDw8IGxpYnhsX2N0eHQucGFnZV9zaGlmdCkgLSAxOwo+ ICsKPiArICAgIGxpYnhsX2N0eHQuYy5tZW1fb3BzLmFsbG9jID0gbWVtX2FsbG9jOwo+ICsgICAg bGlieGxfY3R4dC5jLm1lbV9vcHMudjJwID0gdmlydF90b19waHlzOwo+ICsgICAgbGlieGxfY3R4 dC5jLm1lbV9vcHMuZnJlZSA9IGFjcGlfbWVtX2ZyZWU7Cj4gKwo+ICsgICAgcmMgPSBpbml0X2Fj cGlfY29uZmlnKGdjLCBkb20sIGJfaW5mbywgJmNvbmZpZyk7Cj4gKyAgICBpZiAocmMpIHsKPiAr ICAgICAgICBMT0coRVJST1IsICIlczogaW5pdF9hY3BpX2NvbmZpZyBmYWlsZWQgKHJjPSVkKSIs IF9fRlVOQ1RJT05fXywgcmMpOwo+ICsgICAgICAgIHJldHVybiByYzsKPiArICAgIH0KPiArCj4g KyAgICBjb25maWcucnNkcCA9ICh1bnNpZ25lZCBsb25nKWxpYnhsX19tYWxsb2MoZ2MsIGxpYnhs X2N0eHQucGFnZV9zaXplKTsKPiArICAgIGNvbmZpZy5pbmZvcCA9ICh1bnNpZ25lZCBsb25nKWxp YnhsX19tYWxsb2MoZ2MsIGxpYnhsX2N0eHQucGFnZV9zaXplKTsKPiArICAgIC8qIFBhZ2VzIHRv IGhvbGQgQUNQSSB0YWJsZXMgKi8KPiArICAgIGFjcGlfcGFnZXMgPSAgbGlieGxfX21hbGxvYyhn YywgKE5VTV9BQ1BJX1BBR0VTICsgMSkgKgo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2N0eHQucGFnZV9zaXplKTsKPiArCj4gKyAgICAvKgo+ICsgICAgICogU2V0IHVw IGFsbG9jYXRvciBtZW1vcnkuCj4gKyAgICAgKiBTdGFydCBuZXh0IHRvIGFjcGlfaW5mbyBwYWdl IHRvIGF2b2lkIGZyYWN0dXJpbmcgZTgyMC4KPiArICAgICAqLwo+ICsgICAgbGlieGxfY3R4dC5h bGxvY19iYXNlX3BhZGRyID0gQUNQSV9JTkZPX1BIWVNJQ0FMX0FERFJFU1MgKwo+ICsgICAgICAg IGxpYnhsX2N0eHQucGFnZV9zaXplOwo+ICsgICAgbGlieGxfY3R4dC5hbGxvY19iYXNlX3ZhZGRy ID0gbGlieGxfY3R4dC5hbGxvY19jdXJycCA9Cj4gKyAgICAgICAgKHVuc2lnbmVkIGxvbmcpYWNw aV9wYWdlczsKPiArICAgIGxpYnhsX2N0eHQuYWxsb2NfZW5kID0gKHVuc2lnbmVkIGxvbmcpYWNw aV9wYWdlcyArCj4gKyAgICAgICAgKE5VTV9BQ1BJX1BBR0VTICogbGlieGxfY3R4dC5wYWdlX3Np emUpOwo+ICsKPiArICAgIC8qIEJ1aWxkIHRoZSB0YWJsZXMuICovCj4gKyAgICByYyA9IGFjcGlf YnVpbGRfdGFibGVzKCZsaWJ4bF9jdHh0LmMsICZjb25maWcpOwo+ICsgICAgaWYgKHJjKSB7Cj4g KyAgICAgICAgTE9HKEVSUk9SLCAiJXM6IGFjcGlfYnVpbGRfdGFibGVzIGZhaWxlZCB3aXRoICVk IiwKPiArICAgICAgICAgICAgX19GVU5DVElPTl9fLCByYyk7Cj4gKyAgICAgICAgZ290byBvdXQ7 Cj4gKyAgICB9Cj4gKwo+ICsgICAgLyogQ2FsY3VsYXRlIGhvdyBtYW55IHBhZ2VzIGFyZSBuZWVk ZWQgZm9yIHRoZSB0YWJsZXMuICovCj4gKyAgICBhY3BpX3BhZ2VzX251bSA9Cj4gKyAgICAgICAg KChsaWJ4bF9jdHh0LmFsbG9jX2N1cnJwIC0gKHVuc2lnbmVkIGxvbmcpYWNwaV9wYWdlcykKPiAr ICAgICAgICAgPj4gbGlieGxfY3R4dC5wYWdlX3NoaWZ0KSArCj4gKyAgICAgICAgKChsaWJ4bF9j dHh0LmFsbG9jX2N1cnJwICYgcGFnZV9tYXNrKSA/IDEgOiAwKTsKPiArCj4gKyAgICBkb20tPmFj cGlfbW9kdWxlc1swXS5kYXRhID0gKHZvaWQgKiljb25maWcucnNkcDsKPiArICAgIGRvbS0+YWNw aV9tb2R1bGVzWzBdLmxlbmd0aCA9IDY0Owo+ICsgICAgZG9tLT5hY3BpX21vZHVsZXNbMF0uZ3Vl c3RfYWRkcl9vdXQgPSBSU0RQX0FERFJFU1M7Cj4gKwo+ICsgICAgZG9tLT5hY3BpX21vZHVsZXNb MV0uZGF0YSA9ICh2b2lkICopY29uZmlnLmluZm9wOwo+ICsgICAgZG9tLT5hY3BpX21vZHVsZXNb MV0ubGVuZ3RoID0gNDA5NjsKPiArICAgIGRvbS0+YWNwaV9tb2R1bGVzWzFdLmd1ZXN0X2FkZHJf b3V0ID0gQUNQSV9JTkZPX1BIWVNJQ0FMX0FERFJFU1M7Cj4gKwo+ICsgICAgZG9tLT5hY3BpX21v ZHVsZXNbMl0uZGF0YSA9IGFjcGlfcGFnZXM7Cj4gKyAgICBkb20tPmFjcGlfbW9kdWxlc1syXS5s ZW5ndGggPSBhY3BpX3BhZ2VzX251bSAgPDwgbGlieGxfY3R4dC5wYWdlX3NoaWZ0Owo+ICsgICAg ZG9tLT5hY3BpX21vZHVsZXNbMl0uZ3Vlc3RfYWRkcl9vdXQgPSBBQ1BJX0lORk9fUEhZU0lDQUxf QUREUkVTUyArCj4gKyAgICAgICAgbGlieGxfY3R4dC5wYWdlX3NpemU7Cj4gKwo+ICtvdXQ6Cj4g Kwo+ICsgICAgcmV0dXJuIHJjOwo+ICsKCkV4dHJhbmVvdXMgbGluZS4KCj4gK30KPiArLyoKPiAr ICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtYmFzaWMtb2Zmc2V0OiA0 Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IGRpZmYgLS1n aXQgYS90b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5oIGIvdG9vbHMvbGlieGwvbGlieGxfeDg2 X2FjcGkuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uMzYyMmRkMAo+ IC0tLSAvZGV2L251bGwKPiArKysgYi90b29scy9saWJ4bC9saWJ4bF94ODZfYWNwaS5oCj4gQEAg LTAsMCArMSwzNSBAQAo+ICsvKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsg eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo+ICsgKiBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQKPiArICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgdmVyc2lvbiAyLjEgb25s eS4gd2l0aCB0aGUgc3BlY2lhbAo+ICsgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQg aW4gZmlsZSBMSUNFTlNFLgo+ICsgKgo+ICsgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKPiArICogYnV0IFdJVEhPVVQgQU5Z IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKPiArICogTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo+ICsgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICoKPiArICogQ29weXJpZ2h0IChjKSAyMDE2IE9yYWNsZSBhbmQvb3IgaXRzIGFmZmls aWF0ZXMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4gKyAqLwo+ICsKPiArI2lmbmRlZiBMSUJYTF9Y ODZfQUNQSV9ICj4gKyNkZWZpbmUgTElCWExfWDg2X0FDUElfSAo+ICsKPiArI2luY2x1ZGUgImxp YnhsX2ludGVybmFsLmgiCj4gKwo+ICsjZGVmaW5lIEFTU0VSVCh4KSBhc3NlcnQoeCkKPiArCj4g K3N0YXRpYyBpbmxpbmUgaW50IHRlc3RfYml0KHVuc2lnbmVkIGludCBiLCBjb25zdCB2b2lkICpw KQo+ICt7Cj4gKyAgICByZXR1cm4gISEoKCh1aW50OF90ICopcClbYj4+M10gJiAoMXU8PChiJjcp KSk7Cj4gK30KPiArCj4gKyNlbmRpZiAvKiBMSUJYTF9YXzg2X0FDUElfSCAqLwo+ICsKPiArLyoK PiArICogTG9jYWwgdmFyaWFibGVzOgo+ICsgKiBtb2RlOiBDCj4gKyAqIGMtYmFzaWMtb2Zmc2V0 OiA0Cj4gKyAqIGluZGVudC10YWJzLW1vZGU6IG5pbAo+ICsgKiBFbmQ6Cj4gKyAqLwo+IC0tIAo+ IDEuOC4zLjEKPiAKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6 Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=