From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v6 06/21] xen/x86: Improvements to in-hypervisor cpuid sanity checks Date: Fri, 8 Apr 2016 21:31:42 +0100 Message-ID: <1460147517-11706-7-git-send-email-andrew.cooper3@citrix.com> References: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1460147517-11706-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org Q3VycmVudGx5LCB7cHYsaHZtfV9jcHVpZCgpIGhhcyBhIGxhcmdlIHF1YW50aXR5IG9mIGVzc2Vu dGlhbGx5LXN0YXRpYyBsb2dpYwpmb3IgbW9kaWZ5aW5nIHRoZSBmZWF0dXJlcyB2aXNpYmxlIHRv IGEgZ3Vlc3QuICBBIGxvdCBvZiB0aGlzIGNhbiBiZSBzdWJzdW1lZApieSB7cHYsaHZtfV9mZWF0 dXJlbWFzaywgd2hpY2ggaWRlbnRpZnkgdGhlIGZlYXR1cmVzIGF2YWlsYWJsZSBvbiB0aGlzCmhh cmR3YXJlIHdoaWNoIGNvdWxkIGJlIGdpdmVuIHRvIGEgUFYgb3IgSFZNIGd1ZXN0LgoKVGhpcyBp cyBhIHN0ZXAgaW4gdGhlIGRpcmVjdGlvbiBvZiBmdWxsIHBlci1kb21haW4gY3B1aWQgcG9saWNp ZXMsIGJ1dCBsb3RzCm1vcmUgZGV2ZWxvcG1lbnQgaXMgbmVlZGVkIGZvciB0aGF0LiAgQXMgYSBy ZXN1bHQsIHRoZSBzdGF0aWMgY2hlY2tzIGFyZQpzaW1wbGlmaWVkLCBidXQgdGhlIGR5bmFtaWMg Y2hlY2tzIG5lZWQgdG8gcmVtYWluIGZvciBub3cuCgpBcyBhIHNpZGUgZWZmZWN0LCBzb21lIG9m IHRoZSBsb2dpYyBmb3Igc3BlY2lhbCBmZWF0dXJlcyBjYW4gYmUgaW1wcm92ZWQuCk9TWFNBVkUg YW5kIE9TUEtFIHdpbGwgYmUgYXV0b21hdGljYWxseSBjbGVhcmVkIGJlY2F1c2Ugb2YgYmVpbmcg YWJzZW50IGluIHRoZQpmZWF0dXJlbWFzay4gIFRoaXMgYWxsb3dzIHRoZSBmYXN0LWZvcndhcmQg bG9naWMgdG8gYmUgbW9yZSBzaW1wbGUuCgpJbiBhZGRpdGlvbiwgdGhlcmUgYXJlIHNvbWUgY29y cmVjdGlvbnMgdG8gdGhlIGV4aXN0aW5nIGxvZ2ljOgoKICogSGlkaW5nIFBTRTM2IG91dCBvZiBQ QUUgbW9kZSBpcyBhcmNoaXRlY3R1cmFsbHkgd3JvbmcuICBJdCB0dXJucyBvdXQgdGhhdAogICBp dCB3YXMgYSBidWdmaXggZm9yIHJ1bm5pbmcgSHlwZXJWIHVuZGVyIFhlbiwgd2hpY2ggd2FudGVk IHRvIHNlZSBQU0UzNgogICBldmVuIGFmdGVyIGNob29zaW5nIHRvIHVzZSBQQUUgcGFnaW5nLiAg UFNFMzYgaXMgbm90IHN1cHBvcnRlZCBieSBzaGFkb3cKICAgcGFnaW5nLCBzbyBpcyBoaWRkZW4g ZnJvbSBub24tSEFQIGd1ZXN0cywgYnV0IGlzIHN0aWxsIHZpc2libGUgZm9yIEhBUAogICBndWVz dHMuICBJdCBpcyBhbHNvIGxlYWtlZCBpbnRvIG5vbi1IQVAgZ3Vlc3RzIHdoZW4gdGhlIGd1ZXN0 IGlzIGFscmVhZHkKICAgcnVubmluZyBpbiBQQUUgbW9kZS4KICogQ2hhbmdpbmcgdGhlIHZpc2li aWxpdHkgb2YgUkRUU0NQIGJhc2VkIG9uIGhvc3QgVFNDIHN0YWJpbGl0eSBvciB2aXJ0dWFsCiAg IFRTQyBtb2RlIGlzIGJvZ3VzLCBzbyBkcm9wcGVkLgogKiBXaGVuIGVtdWxhdGluZyBJbnRlbCB0 byBhIGd1ZXN0LCB0aGUgY29tbW9uIGZlYXR1cmVzIGluIGUxZCBzaG91bGQgYmUKICAgY2xlYXJl ZC4KICogVGhlIEFQSUMgYml0IGluIGUxZCAob24gbm9uLUludGVsKSBpcyBhbHNvIGEgZmFzdC1m b3J3YXJkIGZyb20gdGhlCiAgIEFQSUNfQkFTRSBNU1IuCiAqIEEgZ3Vlc3Qgd2l0aCBYU0FWRVMg YW5kIG5vIHhjcjB8eHNzIGZlYXR1cmVzIHNob3VsZCBzZWUKICAgWFNUQVRFX0FSRUFfTUlOX1NJ WkUgaW4gJWVieCAoYnVnIGluIGMvcyA5ZDMxM2JkZSAieDg2L3hzYXZlczogZWJ4IG1heQogICBy ZXR1cm4gd3JvbmcgdmFsdWUgdXNpbmcgQ1BVSUQgZWF4PTB4ZCxlY3ggPTEiKS4KCkFzIGEgc21h bGwgaW1wcm92ZW1lbnQsIHVzZSBjb21waWxlci12aXNpYmxlICYncyBhbmQgfCdzLCByYXRoZXIg dGhhbgp7Y2xlYXIsc2V0fV9iaXQoKS4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFu ZHJldy5jb29wZXIzQGNpdHJpeC5jb20+ClJldmlld2VkLWJ5OiBKYW4gQmV1bGljaCA8SkJldWxp Y2hAc3VzZS5jb20+ClJldmlld2VkLWJ5OiBLb25yYWQgUnplc3p1dGVrIFdpbGsgPGtvbnJhZC53 aWxrQG9yYWNsZS5jb20+Ci0tLQp2MjoKICogUmVpbnN0YXRlIHNvbWUgb2YgdGhlIGR5bmFtaWMg Y2hlY2tzIGZvciBub3cuICBGdXR1cmUgZGV2ZWxvcG1lbnQgd29yayB3aWxsCiAgIGluc3RhdGUg YSBjb21wbGV0ZSBwZXItZG9tYWluIHBvbGljeS4KICogRml4IE9TWFNBVkUgaGFuZGxpbmcgZm9y IFBWIGd1ZXN0cy4KdjM6CiAqIEJldHRlciBoYW5kbGluZyBvZiB0aGUgY3Jvc3MtdmVuZG9yIGNh c2UuCiAqIEltcHJvdmVtZW50cyB0byB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBmZWF0dXJlcy4K ICogQ29ycmVjdCBQU0UzNiB0byBiZWluZyBhIEhBUC1vbmx5IGZlYXR1cmUuCiAqIFlldCBtb3Jl IE9TWFNBVkUgZml4ZXMgZm9yIFBWIGd1ZXN0cy4KdjQ6CiAqIExlYWsgUFNFMzYgaW50byBzaGFk b3cgZ3Vlc3RzIHRvIGZpeCBidWdneSB2ZXJzaW9ucyBvZiBIeXBlci1WLgogKiBMZWFrIE1UUlIg aW50byB0aGUgaGFyZHdhcmUgZG9tYWluIHRvIGZpeCBYZW5vbGludXggZG9tMC4KICogQ2hhbmdl IGNyb3NzLXZlbmRvciAxRCBkaXNhYmxpbmcgbG9naWMuCiAqIEF2b2lkIHJlYWRpbmcgYXJjaC5w dl92Y3B1IGZvciBQVkggZ3Vlc3RzLgp2NToKICogQ2xhcmlmeSB0aGUgY29tbWl0IG1lc3NhZ2Ug cmVnYXJkaW5nIFBTRTM2LgogKiBEcm9wIHJlZHVuZGFudCBpc19wdl9kb21haW4oKS4KICogRml4 IGRlZXAtQyBhbmQgUCBzdGF0ZXMgd2l0aCBtb2Rlcm4gTGludXggUFZPcHMgb24gZmF1bHRpbmct Y2FwYWJsZSBoYXJkd2FyZS4KdjY6CiAqIEFub3RoZXIgYnVnZml4IGZvciBDUFVJRC4weGRbMV0u ZWJ4Ci0tLQogeGVuL2FyY2gveDg2L2h2bS9odm0uYyAgICAgICAgICAgfCAxMjggKysrKysrKysr KysrKy0tLS0tLS0KIHhlbi9hcmNoL3g4Ni90cmFwcy5jICAgICAgICAgICAgIHwgMjU0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9j cHVmZWF0dXJlLmggfCAgIDIgKwogMyBmaWxlcyBjaGFuZ2VkLCAyNjUgaW5zZXJ0aW9ucygrKSwg MTE5IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94 ZW4vYXJjaC94ODYvaHZtL2h2bS5jCmluZGV4IDgzMTNjZjkuLmYyNDEyNmQgMTAwNjQ0Ci0tLSBh L3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMKKysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAt NzIsNiArNzIsNyBAQAogI2luY2x1ZGUgPHB1YmxpYy9tZW1vcnkuaD4KICNpbmNsdWRlIDxwdWJs aWMvdm1fZXZlbnQuaD4KICNpbmNsdWRlIDxwdWJsaWMvYXJjaC14ODYvY3B1aWQuaD4KKyNpbmNs dWRlIDxhc20vY3B1aWQuaD4KIAogYm9vbF90IF9fcmVhZF9tb3N0bHkgaHZtX2VuYWJsZWQ7CiAK QEAgLTMzNTgsNjIgKzMzNTksNzEgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0 LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgIC8qIEZpeCB1 cCBWTEFQSUMgZGV0YWlscy4gKi8KICAgICAgICAgKmVieCAmPSAweDAwRkZGRkZGdTsKICAgICAg ICAgKmVieCB8PSAodi0+dmNwdV9pZCAqIDIpIDw8IDI0OworCisgICAgICAgICplY3ggJj0gaHZt X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF8xY107CisgICAgICAgICplZHggJj0gaHZtX2ZlYXR1cmVz ZXRbRkVBVFVSRVNFVF8xZF07CisKKyAgICAgICAgLyogQVBJQyBleHBvc2VkIHRvIGd1ZXN0cywg YnV0IEZhc3QtZm9yd2FyZCBNU1JfQVBJQ19CQVNFLkVOIGJhY2sgaW4uICovCiAgICAgICAgIGlm ICggdmxhcGljX2h3X2Rpc2FibGVkKHZjcHVfdmxhcGljKHYpKSApCi0gICAgICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9BUElDICYgMzEsIGVkeCk7CisgICAgICAgICAgICAqZWR4ICY9 IH5jcHVmZWF0X2JpdChYODZfRkVBVFVSRV9BUElDKTsKIAotICAgICAgICAvKiBGaXggdXAgT1NY U0FWRS4gKi8KLSAgICAgICAgaWYgKCAqZWN4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1hT QVZFKSAmJgotICAgICAgICAgICAgICh2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdICYgWDg2 X0NSNF9PU1hTQVZFKSApCisgICAgICAgIC8qIE9TWFNBVkUgY2xlYXJlZCBieSBodm1fZmVhdHVy ZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAgaWYgKCB2LT5hcmNo Lmh2bV92Y3B1Lmd1ZXN0X2NyWzRdICYgWDg2X0NSNF9PU1hTQVZFICkKICAgICAgICAgICAgICpl Y3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TWFNBVkUpOwotICAgICAgICBlbHNlCi0g ICAgICAgICAgICAqZWN4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7CiAK LSAgICAgICAgLyogRG9uJ3QgZXhwb3NlIFBDSUQgdG8gbm9uLWhhcCBodm0uICovCisgICAgICAg IC8qIERvbid0IGV4cG9zZSBIQVAtb25seSBmZWF0dXJlcyB0byBub24taGFwIGd1ZXN0cy4gKi8K ICAgICAgICAgaWYgKCAhaGFwX2VuYWJsZWQoZCkgKQorICAgICAgICB7CiAgICAgICAgICAgICAq ZWN4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUENJRCk7CiAKLSAgICAgICAgLyogT25s eSBwcm92aWRlIFBTRTM2IHdoZW4gZ3Vlc3QgcnVucyBpbiAzMmJpdCBQQUUgb3IgaW4gbG9uZyBt b2RlICovCi0gICAgICAgIGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9k ZV9lbmFibGVkKHYpKSApCi0gICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfUFNFMzYpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFBTRTM2IGlzIG5v dCBzdXBwb3J0ZWQgaW4gc2hhZG93IG1vZGUuICBUaGlzIGJpdCBzaG91bGQgYmUKKyAgICAgICAg ICAgICAqIHVuaWxhdGVyYWxseSBjbGVhcmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAg ICAqIEhvd2V2ZXIsIGFuIHVuc3BlY2lmaWVkIHZlcnNpb24gb2YgSHlwZXItViBmcm9tIDIwMTEg cmVmdXNlcworICAgICAgICAgICAgICogdG8gc3RhcnQgYXMgdGhlICJjcHUgZG9lcyBub3QgcHJv dmlkZSByZXF1aXJlZCBodyBmZWF0dXJlcyIgaWYKKyAgICAgICAgICAgICAqIGl0IGNhbid0IHNl ZSBQU0UzNi4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBBcyBhIHdvcmthcm91bmQs IGxlYWsgdGhlIHRvb2xzdGFjay1wcm92aWRlZCBQU0UzNiB2YWx1ZSBpbnRvIGEKKyAgICAgICAg ICAgICAqIHNoYWRvdyBndWVzdCBpZiB0aGUgZ3Vlc3QgaXMgYWxyZWFkeSB1c2luZyBQQUUgcGFn aW5nIChhbmQKKyAgICAgICAgICAgICAqIHdvbid0IGNhcmUgYWJvdXQgcmV2ZXJ0aW5nIGJhY2sg dG8gUFNFIHBhZ2luZykuICBPdGhlcndpc2UsCisgICAgICAgICAgICAgKiBrbm9ibGUgaXQsIHNv IGEgMzJiaXQgZ3Vlc3QgZG9lc24ndCBnZXQgdGhlIGltcHJlc3Npb24gdGhhdCBpdAorICAgICAg ICAgICAgICogY291bGQgdHJ5IHRvIHVzZSBQU0UzNiBwYWdpbmcuCisgICAgICAgICAgICAgKi8K KyAgICAgICAgICAgIGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9l bmFibGVkKHYpKSApCisgICAgICAgICAgICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX1BTRTM2KTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgMHg3 OgogICAgICAgICBpZiAoIGNvdW50ID09IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo ICFjcHVfaGFzX3NtZXAgKQotICAgICAgICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9TTUVQKTsKLQotICAgICAgICAgICAgaWYgKCAhY3B1X2hhc19zbWFwICkKLSAg ICAgICAgICAgICAgICAqZWJ4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU01BUCk7Cisg ICAgICAgICAgICAvKiBGb2xkIGhvc3QncyBGRFBfRVhDUF9PTkxZIGFuZCBOT19GUFVfU0VMIGlu dG8gZ3Vlc3QncyB2aWV3LiAqLworICAgICAgICAgICAgKmVieCAmPSAoaHZtX2ZlYXR1cmVzZXRb RkVBVFVSRVNFVF83YjBdICYKKyAgICAgICAgICAgICAgICAgICAgIH5zcGVjaWFsX2ZlYXR1cmVz W0ZFQVRVUkVTRVRfN2IwXSk7CisgICAgICAgICAgICAqZWJ4IHw9IChob3N0X2ZlYXR1cmVzZXRb RkVBVFVSRVNFVF83YjBdICYKKyAgICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfZmVhdHVyZXNb RkVBVFVSRVNFVF83YjBdKTsKIAotICAgICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIE1QWCB0byBo dm0gd2hlbiBWTVggc3VwcG9ydCBpcyBub3QgYXZhaWxhYmxlLiAqLwotICAgICAgICAgICAgaWYg KCAhKHZteF92bWV4aXRfY29udHJvbCAmIFZNX0VYSVRfQ0xFQVJfQk5EQ0ZHUykgfHwKLSAgICAg ICAgICAgICAgICAgISh2bXhfdm1lbnRyeV9jb250cm9sICYgVk1fRU5UUllfTE9BRF9CTkRDRkdT KSApCi0gICAgICAgICAgICAgICAgKmVieCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX01Q WCk7CisgICAgICAgICAgICAqZWN4ICY9IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfN2MwXTsK IAorICAgICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIEhBUC1vbmx5IGZlYXR1cmVzIHRvIG5vbi1o YXAgZ3Vlc3RzLiAqLwogICAgICAgICAgICAgaWYgKCAhaGFwX2VuYWJsZWQoZCkgKQogICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgICAvKiBEb24ndCBleHBvc2UgSU5WUENJRCB0byBub24t aGFwIGh2bS4gKi8KICAgICAgICAgICAgICAgICAgKmVieCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX0lOVlBDSUQpOwotICAgICAgICAgICAgICAgICAvKiBYODZfRkVBVFVSRV9QS1UgaXMg bm90IHlldCBpbXBsZW1lbnRlZCBmb3Igc2hhZG93IHBhZ2luZy4gKi8KICAgICAgICAgICAgICAg ICAgKmVjeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BLVSk7CiAgICAgICAgICAgICB9 CiAKLSAgICAgICAgICAgIGlmICggKCplY3ggJiBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUEtV KSkgJiYKLSAgICAgICAgICAgICAgICAgKHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gJiBY ODZfQ1I0X1BLRSkgKQorICAgICAgICAgICAgLyogT1NQS0UgY2xlYXJlZCBieSBodm1fZmVhdHVy ZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAgICAgICAgIGlmICggdi0+ YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0XSAmIFg4Nl9DUjRfUEtFICkKICAgICAgICAgICAgICAg ICAqZWN4IHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9PU1BLRSk7Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgKmVjeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09T UEtFKTsKLQotICAgICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIFBDT01NSVQgdG8gaHZtIHdoZW4g Vk1YIHN1cHBvcnQgaXMgbm90IGF2YWlsYWJsZS4gKi8KLSAgICAgICAgICAgIGlmICggIWNwdV9o YXNfdm14X3Bjb21taXQgKQotICAgICAgICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9QQ09NTUlUKTsKICAgICAgICAgfQotCiAgICAgICAgIGJyZWFrOworCiAgICAg Y2FzZSAweGI6CiAgICAgICAgIC8qIEZpeCB0aGUgeDJBUElDIGlkZW50aWZpZXIuICovCiAgICAg ICAgICplZHggPSB2LT52Y3B1X2lkICogMjsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIDB4 ZDoKICAgICAgICAgLyogRUJYIHZhbHVlIG9mIG1haW4gbGVhZiAwIGRlcGVuZHMgb24gZW5hYmxl ZCB4c2F2ZSBmZWF0dXJlcyAqLwogICAgICAgICBpZiAoIGNvdW50ID09IDAgJiYgdi0+YXJjaC54 Y3IwICkgCkBAIC0zNDMwLDExICszNDQwLDE1IEBAIHZvaWQgaHZtX2NwdWlkKHVuc2lnbmVkIGlu dCBpbnB1dCwgdW5zaWduZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAogICAgICAgICAg ICAgICAgICAgICAqZWJ4ID0gX2VheCArIF9lYng7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K KwogICAgICAgICBpZiAoIGNvdW50ID09IDEgKQogICAgICAgICB7Ci0gICAgICAgICAgICB1aW50 NjRfdCB4ZmVhdHVyZXMgPSB2LT5hcmNoLnhjcjAgfCB2LT5hcmNoLmh2bV92Y3B1Lm1zcl94c3M7 Ci0gICAgICAgICAgICBpZiAoIGNwdV9oYXNfeHNhdmVzICYmIGNwdV9oYXNfdm14X3hzYXZlcyAm JiB4ZmVhdHVyZXMgKQorICAgICAgICAgICAgKmVheCAmPSBodm1fZmVhdHVyZXNldFtGRUFUVVJF U0VUX0RhMV07CisKKyAgICAgICAgICAgIGlmICggKmVheCAmIGNwdWZlYXRfbWFzayhYODZfRkVB VFVSRV9YU0FWRVMpICkKICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1aW50NjRfdCB4 ZmVhdHVyZXMgPSB2LT5hcmNoLnhjcjAgfCB2LT5hcmNoLmh2bV92Y3B1Lm1zcl94c3M7CisKICAg ICAgICAgICAgICAgICAqZWJ4ID0gWFNUQVRFX0FSRUFfTUlOX1NJWkU7CiAgICAgICAgICAgICAg ICAgaWYgKCB4ZmVhdHVyZXMgJiB+WFNUQVRFX0ZQX1NTRSApCiAgICAgICAgICAgICAgICAgICAg IGZvciAoIHN1Yl9sZWFmID0gMjsgc3ViX2xlYWYgPCA2Mzsgc3ViX2xlYWYrKyApCkBAIC0zNDUx LDIwICszNDY1LDQyIEBAIHZvaWQgaHZtX2NwdWlkKHVuc2lnbmVkIGludCBpbnB1dCwgdW5zaWdu ZWQgaW50ICplYXgsIHVuc2lnbmVkIGludCAqZWJ4LAogICAgICAgICBicmVhazsKIAogICAgIGNh c2UgMHg4MDAwMDAwMToKLSAgICAgICAgLyogV2UgZXhwb3NlIFJEVFNDUCBmZWF0dXJlIHRvIGd1 ZXN0IG9ubHkgd2hlbgotICAgICAgICAgICB0c2NfbW9kZSA9PSBUU0NfTU9ERV9ERUZBVUxUIGFu ZCBob3N0X3RzY19pc19zYWZlKCkgcmV0dXJucyAxICovCi0gICAgICAgIGlmICggZC0+YXJjaC50 c2NfbW9kZSAhPSBUU0NfTU9ERV9ERUZBVUxUIHx8Ci0gICAgICAgICAgICAgIWhvc3RfdHNjX2lz X3NhZmUoKSApCi0gICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVf UkRUU0NQKTsKLSAgICAgICAgLyogSGlkZSAxR0Itc3VwZXJwYWdlIGZlYXR1cmUgaWYgd2UgY2Fu J3QgZW11bGF0ZSBpdC4gKi8KLSAgICAgICAgaWYgKCFodm1fcHNlMWdiX3N1cHBvcnRlZChkKSkK KyAgICAgICAgKmVjeCAmPSBodm1fZmVhdHVyZXNldFtGRUFUVVJFU0VUX2UxY107CisgICAgICAg ICplZHggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF9lMWRdOworCisgICAgICAgIC8qIElm IG5vdCBlbXVsYXRpbmcgQU1ELCBjbGVhciB0aGUgZHVwbGljYXRlZCBmZWF0dXJlcyBpbiBlMWQu ICovCisgICAgICAgIGlmICggZC0+YXJjaC54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkK KyAgICAgICAgICAgICplZHggJj0gfkNQVUlEX0NPTU1PTl8xRF9GRUFUVVJFUzsKKyAgICAgICAg LyogZmFzdC1mb3J3YXJkIE1TUl9BUElDX0JBU0UuRU4gaWYgaXQgaGFzbid0IGFscmVhZHkgYmVl biBjbG9iYmVyZWQuICovCisgICAgICAgIGVsc2UgaWYgKCB2bGFwaWNfaHdfZGlzYWJsZWQodmNw dV92bGFwaWModikpICkKKyAgICAgICAgICAgICplZHggJj0gfmNwdWZlYXRfYml0KFg4Nl9GRUFU VVJFX0FQSUMpOworCisgICAgICAgIC8qIERvbid0IGV4cG9zZSBIQVAtb25seSBmZWF0dXJlcyB0 byBub24taGFwIGd1ZXN0cy4gKi8KKyAgICAgICAgaWYgKCAhaGFwX2VuYWJsZWQoZCkgKQorICAg ICAgICB7CiAgICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUEFH RTFHQik7Ci0gICAgICAgIC8qIE9ubHkgcHJvdmlkZSBQU0UzNiB3aGVuIGd1ZXN0IHJ1bnMgaW4g MzJiaXQgUEFFIG9yIGluIGxvbmcgbW9kZSAqLwotICAgICAgICBpZiAoICEoaHZtX3BhZV9lbmFi bGVkKHYpIHx8IGh2bV9sb25nX21vZGVfZW5hYmxlZCh2KSkgKQotICAgICAgICAgICAgKmVkeCAm PSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BTRTM2KTsKLSAgICAgICAgLyogSGlkZSBkYXRh IGJyZWFrcG9pbnQgZXh0ZW5zaW9ucyBpZiB0aGUgaGFyZHdhcmUgaGFzIG5vIHN1cHBvcnQuICov Ci0gICAgICAgIGlmICggIWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9EQkVYVCkgKQotICAgICAg ICAgICAgKmVjeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0RCRVhUKTsKKworICAgICAg ICAgICAgLyoKKyAgICAgICAgICAgICAqIFBTRTM2IGlzIG5vdCBzdXBwb3J0ZWQgaW4gc2hhZG93 IG1vZGUuICBUaGlzIGJpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAqIHVuaWxhdGVyYWxseSBj bGVhcmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEhvd2V2ZXIsIGFuIHVuc3Bl Y2lmaWVkIHZlcnNpb24gb2YgSHlwZXItViBmcm9tIDIwMTEgcmVmdXNlcworICAgICAgICAgICAg ICogdG8gc3RhcnQgYXMgdGhlICJjcHUgZG9lcyBub3QgcHJvdmlkZSByZXF1aXJlZCBodyBmZWF0 dXJlcyIgaWYKKyAgICAgICAgICAgICAqIGl0IGNhbid0IHNlZSBQU0UzNi4KKyAgICAgICAgICAg ICAqCisgICAgICAgICAgICAgKiBBcyBhIHdvcmthcm91bmQsIGxlYWsgdGhlIHRvb2xzdGFjay1w cm92aWRlZCBQU0UzNiB2YWx1ZSBpbnRvIGEKKyAgICAgICAgICAgICAqIHNoYWRvdyBndWVzdCBp ZiB0aGUgZ3Vlc3QgaXMgYWxyZWFkeSB1c2luZyBQQUUgcGFnaW5nIChhbmQKKyAgICAgICAgICAg ICAqIHdvbid0IGNhcmUgYWJvdXQgcmV2ZXJ0aW5nIGJhY2sgdG8gUFNFIHBhZ2luZykuICBPdGhl cndpc2UsCisgICAgICAgICAgICAgKiBrbm9ibGUgaXQsIHNvIGEgMzJiaXQgZ3Vlc3QgZG9lc24n dCBnZXQgdGhlIGltcHJlc3Npb24gdGhhdCBpdAorICAgICAgICAgICAgICogY291bGQgdHJ5IHRv IHVzZSBQU0UzNiBwYWdpbmcuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggISho dm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9lbmFibGVkKHYpKSApCisgICAgICAg ICAgICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BTRTM2KTsKKyAgICAg ICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgMHg4MDAwMDAwNzoKKyAgICAgICAgKmVk eCAmPSBodm1fZmVhdHVyZXNldFtGRUFUVVJFU0VUX2U3ZF07CiAgICAgICAgIGJyZWFrOwogCiAg ICAgY2FzZSAweDgwMDAwMDA4OgpAQCAtMzQ4Miw2ICszNTE4LDggQEAgdm9pZCBodm1fY3B1aWQo dW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQgaW50ICplYngs CiAgICAgICAgIGh2bV9jcHVpZCgweDgwMDAwMDAxLCBOVUxMLCBOVUxMLCBOVUxMLCAmX2VkeCk7 CiAgICAgICAgICplYXggPSAoKmVheCAmIH4weGZmZmYwMCkgfCAoX2VkeCAmIGNwdWZlYXRfbWFz ayhYODZfRkVBVFVSRV9MTSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ IDB4MzAwMCA6IDB4MjAwMCk7CisKKyAgICAgICAgKmVieCAmPSBodm1fZmVhdHVyZXNldFtGRUFU VVJFU0VUX2U4Yl07CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni90cmFwcy5jIGIveGVuL2FyY2gveDg2L3RyYXBzLmMKaW5kZXggODEyNWM1My4uNjlk YzkzYiAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3RyYXBzLmMKKysrIGIveGVuL2FyY2gveDg2 L3RyYXBzLmMKQEAgLTczLDYgKzczLDcgQEAKICNpbmNsdWRlIDxhc20vaHBldC5oPgogI2luY2x1 ZGUgPGFzbS92cG11Lmg+CiAjaW5jbHVkZSA8cHVibGljL2FyY2gteDg2L2NwdWlkLmg+CisjaW5j bHVkZSA8YXNtL2NwdWlkLmg+CiAjaW5jbHVkZSA8eHNtL3hzbS5oPgogCiAvKgpAQCAtOTIzLDY5 ICs5MjQsMTYyIEBAIHZvaWQgcHZfY3B1aWQoc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCiAg ICAgZWxzZQogICAgICAgICBjcHVpZF9jb3VudChsZWFmLCBzdWJsZWFmLCAmYSwgJmIsICZjLCAm ZCk7CiAKLSAgICBpZiAoIChsZWFmICYgMHg3ZmZmZmZmZikgPT0gMHgwMDAwMDAwMSApCi0gICAg ewotICAgICAgICAvKiBNb2RpZnkgRmVhdHVyZSBJbmZvcm1hdGlvbi4gKi8KLSAgICAgICAgaWYg KCAhY3B1X2hhc19hcGljICkKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FQ SUMsICZkKTsKLQotICAgICAgICBpZiAoICFpc19wdmhfZG9tYWluKGN1cnJkKSApCi0gICAgICAg IHsKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BTRSwgJmQpOwotICAgICAg ICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEdFLCAmZCk7Ci0gICAgICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9QU0UzNiwgJmQpOwotICAgICAgICAgICAgX19jbGVhcl9iaXQo WDg2X0ZFQVRVUkVfVk1FLCAmZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICBzd2l0Y2ggKCBs ZWFmICkKICAgICB7CiAgICAgY2FzZSAweDAwMDAwMDAxOgotICAgICAgICAvKiBNb2RpZnkgRmVh dHVyZSBJbmZvcm1hdGlvbi4gKi8KLSAgICAgICAgaWYgKCAhY3B1X2hhc19zZXAgKQotICAgICAg ICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU0VQLCAmZCk7Ci0gICAgICAgIF9fY2xlYXJf Yml0KFg4Nl9GRUFUVVJFX0RTLCAmZCk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJF X1RNMSwgJmQpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9QQkUsICZkKTsKLSAg ICAgICAgaWYgKCBpc19wdmhfZG9tYWluKGN1cnJkKSApCi0gICAgICAgICAgICBfX2NsZWFyX2Jp dChYODZfRkVBVFVSRV9NVFJSLCAmZCk7Ci0KLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRV UkVfRFRFUzY0ICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTU9O SVRPUiAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0RTQ1BMICUg MzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVk1YICUgMzIsICZjKTsK LSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU01YICUgMzIsICZjKTsKLSAgICAgICAg X19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVE0yICUgMzIsICZjKTsKKyAgICAgICAgYyAmPSBwdl9m ZWF0dXJlc2V0W0ZFQVRVUkVTRVRfMWNdOworICAgICAgICBkICY9IHB2X2ZlYXR1cmVzZXRbRkVB VFVSRVNFVF8xZF07CisKICAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICkK LSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0NYMTYgJSAzMiwgJmMpOwotICAg ICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9YVFBSICUgMzIsICZjKTsKLSAgICAgICAgX19j bGVhcl9iaXQoWDg2X0ZFQVRVUkVfUERDTSAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0 KFg4Nl9GRUFUVVJFX1BDSUQgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVB VFVSRV9EQ0EgJSAzMiwgJmMpOwotICAgICAgICBpZiAoICFjcHVfaGFzX3hzYXZlICkKKyAgICAg ICAgICAgIGMgJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9DWDE2KTsKKworICAgICAgICBp ZiAoICFpc19wdmhfZG9tYWluKGN1cnJkKSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIF9fY2xl YXJfYml0KFg4Nl9GRUFUVVJFX1hTQVZFICUgMzIsICZjKTsKLSAgICAgICAgICAgIF9fY2xlYXJf Yml0KFg4Nl9GRUFUVVJFX0FWWCAlIDMyLCAmYyk7CisgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICogRGVsZXRlIHRoZSBQVkggY29uZGl0aW9uIHdoZW4gSFZNTGl0ZSBmb3JtYWxseSByZXBs YWNlcyBQVkgsCisgICAgICAgICAgICAgKiBhbmQgSFZNIGd1ZXN0cyBubyBsb25nZXIgZW50ZXIg YSBQViBjb2RlcGF0aC4KKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAvKgorICAgICAg ICAgICAgICogISEhIE9TWFNBVkUgaGFuZGxpbmcgZm9yIFBWIGd1ZXN0cyBpcyBub24tYXJjaGl0 ZWN0dXJhbCAhISEKKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBBcmNoaXRlY3R1cmFs bHksIHRoZSBjb3JyZWN0IGNvZGUgaGVyZSBpcyBzaW1wbHk6CisgICAgICAgICAgICAgKgorICAg ICAgICAgICAgICogICBpZiAoIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NS NF9PU1hTQVZFICkKKyAgICAgICAgICAgICAqICAgICAgIGMgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX09TWFNBVkUpOworICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEhvd2V2ZXIg YmVjYXVzZSBvZiBidWdzIGluIFhlbiAoYmVmb3JlIGMvcyBiZDE5MDgwYiwgTm92IDIwMTAsCisg ICAgICAgICAgICAgKiB0aGUgWFNBVkUgY3B1aWQgZmxhZyBsZWFrZWQgaW50byBndWVzdHMgZGVz cGl0ZSB0aGUgZmVhdHVyZSBub3QKKyAgICAgICAgICAgICAqIGJlaW5nIGF2YWlsYWJsZSBmb3Ig dXNlKSwgYnVnZ3kgd29ya2Fyb3VuZHMgd2hlcmUgaW50cm9kdWNlZCB0bworICAgICAgICAgICAg ICogTGludXggKGMvcyA5NDdjY2Y5YywgYWxzbyBOb3YgMjAxMCkgd2hpY2ggcmVsaWVkIG9uIHRo ZSBmYWN0CisgICAgICAgICAgICAgKiB0aGF0IFhlbiBhbHNvIGluY29ycmVjdGx5IGxlYWtlZCBP U1hTQVZFIGludG8gdGhlIGd1ZXN0LgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEZ1 cnRoZXJtb3JlLCBwcm92aWRpbmcgYXJjaGl0ZWN0dXJhbCBPU1hTQVZFIGJlaGF2aW91ciB0byBh CisgICAgICAgICAgICAgKiBtYW55IExpbnV4IFBWIGd1ZXN0cyB0cmlnZ2VyZWQgYSBmdXJ0aGVy IGtlcm5lbCBidWcgd2hlbiB0aGUKKyAgICAgICAgICAgICAqIGZwdSBjb2RlIG9ic2VydmVzIHRo YXQgWFNBVkVPUFQgaXMgYXZhaWxhYmxlLCBhc3N1bWVzIHRoYXQKKyAgICAgICAgICAgICAqIHhz YXZlIHN0YXRlIGhhZCBiZWVuIHNldCB1cCBmb3IgdGhlIHRhc2ssIGFuZCBmb2xsb3dzIGEgd2ls ZAorICAgICAgICAgICAgICogcG9pbnRlci4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAg KiBPbGRlciBMaW51eCBQVk9QUyBrZXJuZWxzIGhvd2V2ZXIgZG8gcmVxdWlyZSBhcmNoaXRlY3R1 cmFsCisgICAgICAgICAgICAgKiBiZWhhdmlvdXIuICBUaGV5IG9ic2VydmUgWGVuJ3MgbGVha2Vk IE9TWFNBVkUgYW5kIGFzc3VtZSB0aGV5CisgICAgICAgICAgICAgKiBjYW4gYWxyZWFkeSB1c2Ug WFNFVEJWLCBkeWluZyB3aXRoIGEgI1VEIGJlY2F1c2UgdGhlIHNoYWRvd2VkCisgICAgICAgICAg ICAgKiBDUjQuT1NYU0FWRSBpcyBjbGVhci4gIFRoaXMgYmVoYXZpb3VyIGhhcyBiZWVuIGFkanVz dGVkIGluIGFsbAorICAgICAgICAgICAgICogb2JzZXJ2ZWQgY2FzZXMgdmlhIHN0YWJsZSBiYWNr cG9ydHMgb2YgdGhlIGFib3ZlIGNoYW5nZXNldC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgKiBUaGVyZWZvcmUsIHRoZSBsZWFraW5nIG9mIFhlbidzIE9TWFNBVkUgc2V0dGluZyBoYXMg YmVjb21lIGEKKyAgICAgICAgICAgICAqIGRlZmFjdG8gcGFydCBvZiB0aGUgUFYgQUJJIGFuZCBj YW4ndCByZWFzb25hYmx5IGJlIGNvcnJlY3RlZC4KKyAgICAgICAgICAgICAqCisgICAgICAgICAg ICAgKiBUaGUgZm9sbG93aW5nIHNpdHVhdGlvbnMgYW5kIGxvZ2ljIG5vdyBhcHBsaWVzOgorICAg ICAgICAgICAgICoKKyAgICAgICAgICAgICAqIC0gSGFyZHdhcmUgd2l0aG91dCBDUFVJRCBmYXVs dGluZyBzdXBwb3J0IGFuZCBuYXRpdmUgQ1BVSUQ6CisgICAgICAgICAgICAgKiAgICBUaGVyZSBp cyBub3RoaW5nIFhlbiBjYW4gZG8gaGVyZS4gIFRoZSBob3N0cyBYU0FWRSBmbGFnIHdpbGwKKyAg ICAgICAgICAgICAqICAgIGxlYWsgdGhyb3VnaCBhbmQgWGVuJ3MgT1NYU0FWRSBjaG9pY2Ugd2ls bCBsZWFrIHRocm91Z2guCisgICAgICAgICAgICAgKgorICAgICAgICAgICAgICogICAgSW4gdGhl IGNhc2UgdGhhdCB0aGUgZ3Vlc3Qga2VybmVsIGhhcyBub3Qgc2V0IHVwIE9TWFNBVkUsIG9ubHkK KyAgICAgICAgICAgICAqICAgIFNTRSB3aWxsIGJlIHNldCBpbiB4Y3IwLCBhbmQgZ3Vlc3QgdXNl cnNwYWNlIGNhbid0IGRvIHRvbyBtdWNoCisgICAgICAgICAgICAgKiAgICBkYW1hZ2UgaXRzZWxm LgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIC0gRW5saWdodGVuZWQgQ1BVSUQgb3Ig Q1BVSUQgZmF1bHRpbmcgYXZhaWxhYmxlOgorICAgICAgICAgICAgICogICAgWGVuIGNhbiBmdWxs eSBjb250cm9sIHdoYXQgaXMgc2VlbiBoZXJlLiAgR3Vlc3Qga2VybmVscyBuZWVkCisgICAgICAg ICAgICAgKiAgICB0byBzZWUgdGhlIGxlYWtlZCBPU1hTQVZFLCBidXQgZ3Vlc3QgdXNlcnNwYWNl IGlzIGdpdmVuCisgICAgICAgICAgICAgKiAgICBhcmNoaXRlY3R1cmFsIGJlaGF2aW91ciwgdG8g cmVmbGVjdCB0aGUgZ3Vlc3Qga2VybmVscworICAgICAgICAgICAgICogICAgaW50ZW50aW9ucy4K KyAgICAgICAgICAgICAqLworICAgICAgICAgICAgLyogT1NYU0FWRSBjbGVhcmVkIGJ5IHB2X2Zl YXR1cmVzZXQuICBGYXN0LWZvcndhcmQgQ1I0IGJhY2sgaW4uICovCisgICAgICAgICAgICBpZiAo IChndWVzdF9rZXJuZWxfbW9kZShjdXJyLCByZWdzKSAmJgorICAgICAgICAgICAgICAgICAgKHJl YWRfY3I0KCkgJiBYODZfQ1I0X09TWFNBVkUpKSB8fAorICAgICAgICAgICAgICAgICAoY3Vyci0+ YXJjaC5wdl92Y3B1LmN0cmxyZWdbNF0gJiBYODZfQ1I0X09TWFNBVkUpICkKKyAgICAgICAgICAg ICAgICBjIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9PU1hTQVZFKTsKKworICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAqIEF0IHRoZSB0aW1lIG9mIHdyaXRpbmcsIGEgUFYgZG9tYWlu IGlzIHRoZSBvbmx5IHZpYWJsZSBvcHRpb24KKyAgICAgICAgICAgICAqIGZvciBEb20wLiAgU2V2 ZXJhbCBpbnRlcmFjdGlvbnMgYmV0d2VlbiBkb20wIGFuZCBYZW4gZm9yIHJlYWwKKyAgICAgICAg ICAgICAqIGhhcmR3YXJlIHNldHVwIGhhdmUgdW5mb3J0dW5hdGVseSBiZWVuIGltcGxlbWVudGVk IGJhc2VkIG9uCisgICAgICAgICAgICAgKiBzdGF0ZSB3aGljaCBpbmNvcnJlY3RseSBsZWFrZWQg aW50byBkb20wLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIFRoZXNlIGxlYWtzIGFy ZSByZXRhaW5lZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHksIGJ1dAorICAgICAgICAgICAg ICogcmVzdHJpY3RlZCB0byB0aGUgaGFyZHdhcmUgZG9tYWlucyBrZXJuZWwgb25seS4KKyAgICAg ICAgICAgICAqLworICAgICAgICAgICAgaWYgKCBpc19oYXJkd2FyZV9kb21haW4oY3VycmQpICYm IGd1ZXN0X2tlcm5lbF9tb2RlKGN1cnIsIHJlZ3MpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIE1UUlIgdXNlZCB0byB1bmNvbmRpdGlvbmFs bHkgbGVhayBpbnRvIFBWIGd1ZXN0cy4gIFRoZXkKKyAgICAgICAgICAgICAgICAgKiBjYW5ub3Qg TVRSUiBpbmZyYXN0cnVjdHVyZSBhdCBhbGwsIGFuZCBzaG91bGRuJ3QgYmUgYWJsZSB0bworICAg ICAgICAgICAgICAgICAqIHNlZSB0aGUgZmVhdHVyZS4KKyAgICAgICAgICAgICAgICAgKgorICAg ICAgICAgICAgICAgICAqIE1vZGVybiBQVk9QUyBMaW51eCBzZWxmLWNsb2JiZXJzIHRoZSBNVFJS IGZlYXR1cmUsIHRvIGF2b2lkCisgICAgICAgICAgICAgICAgICogdHJ5aW5nIHRvIHVzZSB0aGUg YXNzb2NpYXRlZCBNU1JzLiAgWGVub2xpbnV4LWJhc2VkIFBWIGRvbTAncworICAgICAgICAgICAg ICAgICAqIGhvd2V2ZXIgdXNlIHRoZSBNVFJSIGZlYXR1cmUgYXMgYW4gaW5kaWNhdGlvbiBvZiB0 aGUgcHJlc2VuY2UKKyAgICAgICAgICAgICAgICAgKiBvZiB0aGUgWEVOUEZfe2FkZCxkZWwscmVh ZH1fbWVtdHlwZSBoeXBlcmNhbGxzLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAg ICAgIGlmICggY3B1X2hhc19tdHJyICkKKyAgICAgICAgICAgICAgICAgICAgZCB8PSBjcHVmZWF0 X21hc2soWDg2X0ZFQVRVUkVfTVRSUik7CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICAgICAqIE1PTklUT1IgbmV2ZXIgbGVha2VkIGludG8gUFYgZ3Vlc3RzLCBhcyBQViBndWVz dHMgY2Fubm90CisgICAgICAgICAgICAgICAgICogdXNlIHRoZSBNT05JVE9SL01XQUlUIGluc3Ry dWN0aW9ucy4gIEFzIHN1Y2gsIHRoZXkgcmVxdWlyZQorICAgICAgICAgICAgICAgICAqIHRoZSBm ZWF0dXJlIHRvIG5vdCBiZWluZyBwcmVzZW50IGluIGVtdWxhdGVkIENQVUlELgorICAgICAgICAg ICAgICAgICAqCisgICAgICAgICAgICAgICAgICogTW9kZXJuIFBWT1BTIExpbnV4IHRyeSB0byBi ZSBjdW5uaW5nIGFuZCB1c2UgbmF0aXZlIENQVUlECisgICAgICAgICAgICAgICAgICogdG8gc2Vl IGlmIHRoZSBoYXJkd2FyZSBhY3R1YWxseSBzdXBwb3J0cyBNT05JVE9SLCBhbmQgYnkKKyAgICAg ICAgICAgICAgICAgKiBleHRlbnNpb24sIGRlZXAgQyBzdGF0ZXMuCisgICAgICAgICAgICAgICAg ICoKKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgZmVhdHVyZSBpcyBzZWVuLCBkZWVwLUMgc3Rh dGUgaW5mb3JtYXRpb24gaXMKKyAgICAgICAgICAgICAgICAgKiBvYnRhaW5lZCBmcm9tIHRoZSBE U0RUIGFuZCBoYW5kZWQgYmFjayB0byBYZW4gdmlhIHRoZQorICAgICAgICAgICAgICAgICAqIFhF TlBGX3NldF9wcm9jZXNzb3JfcG1pbmZvIGh5cGVyY2FsbC4KKyAgICAgICAgICAgICAgICAgKgor ICAgICAgICAgICAgICAgICAqIFRoaXMgbWVjaGFuaXNtIGlzIGluY29tcGF0aWJsZSB3aXRoIGFu IEhWTS1iYXNlZCBoYXJkd2FyZQorICAgICAgICAgICAgICAgICAqIGRvbWFpbiwgYW5kIGFsc28g d2l0aCBDUFVJRCBGYXVsdGluZy4KKyAgICAgICAgICAgICAgICAgKgorICAgICAgICAgICAgICAg ICAqIEx1Y2tpbHksIFhlbiBjYW4gYmUganVzdCBhcyAnY3VubmluZycsIGFuZCBkaXN0aW5ndWlz aCBhbgorICAgICAgICAgICAgICAgICAqIGVtdWxhdGVkIENQVUlEIGZyb20gYSBmYXVsdGVkIENQ VUlEIGJ5IHdoZXRoZXIgYSAjVUQgb3IgI0dQCisgICAgICAgICAgICAgICAgICogZmF1bHQgaXMg Y3VycmVudGx5IGJlaW5nIHNlcnZpY2VkLiAgWXVjay4uLgorICAgICAgICAgICAgICAgICAqLwor ICAgICAgICAgICAgICAgIGlmICggY3B1X2hhc19tb25pdG9yICYmIHJlZ3MtPmVudHJ5X3ZlY3Rv ciA9PSBUUkFQX2dwX2ZhdWx0ICkKKyAgICAgICAgICAgICAgICAgICAgYyB8PSBjcHVmZWF0X21h c2soWDg2X0ZFQVRVUkVfTU9OSVRPUik7CisKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAg ICAgICAgICAqIFdoaWxlIE1PTklUT1IgbmV2ZXIgbGVha2VkIGludG8gUFYgZ3Vlc3RzLCBFSVNU IGFsd2F5cyB1c2VkCisgICAgICAgICAgICAgICAgICogdG8uCisgICAgICAgICAgICAgICAgICoK KyAgICAgICAgICAgICAgICAgKiBNb2Rlcm4gUFZPUFMgd2lsbCBvbmx5IHBhcnNlIFAgc3RhdGUg aW5mb3JtYXRpb24gZnJvbSB0aGUKKyAgICAgICAgICAgICAgICAgKiBEU0RUIGFuZCByZXR1cm4g aXQgdG8gWGVuIGlmIEVJU1QgaXMgc2VlbiBpbiB0aGUgZW11bGF0ZWQKKyAgICAgICAgICAgICAg ICAgKiBDUFVJRCBpbmZvcm1hdGlvbi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAg ICAgICBpZiAoIGNwdV9oYXNfZWlzdCApCisgICAgICAgICAgICAgICAgICAgIGMgfD0gY3B1ZmVh dF9tYXNrKFg4Nl9GRUFUVVJFX0VJU1QpOworICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAg ICAgIGlmICggIWNwdV9oYXNfYXBpYyApCi0gICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFU VVJFX1gyQVBJQyAlIDMyLCAmYyk7Ci0gICAgICAgIF9fc2V0X2JpdChYODZfRkVBVFVSRV9IWVBF UlZJU09SICUgMzIsICZjKTsKKworICAgICAgICBjIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVS RV9IWVBFUlZJU09SKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MDAwMDAwMDc6CiAg ICAgICAgIGlmICggc3VibGVhZiA9PSAwICkKLSAgICAgICAgICAgIGIgJj0gKGNwdWZlYXRfbWFz ayhYODZfRkVBVFVSRV9CTUkxKSB8Ci0gICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfSExFKSAgfAotICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFU VVJFX0FWWDIpIHwKLSAgICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9C TUkyKSB8Ci0gICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfRVJNUykg fAotICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1JUTSkgIHwKLSAg ICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9SRFNFRUQpICB8Ci0gICAg ICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfQURYKSAgfAotICAgICAgICAg ICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0ZTR1NCQVNFKSk7CisgICAgICAgIHsK KyAgICAgICAgICAgIC8qIEZvbGQgaG9zdCdzIEZEUF9FWENQX09OTFkgYW5kIE5PX0ZQVV9TRUwg aW50byBndWVzdCdzIHZpZXcuICovCisgICAgICAgICAgICBiICY9IChwdl9mZWF0dXJlc2V0W0ZF QVRVUkVTRVRfN2IwXSAmCisgICAgICAgICAgICAgICAgICB+c3BlY2lhbF9mZWF0dXJlc1tGRUFU VVJFU0VUXzdiMF0pOworICAgICAgICAgICAgYiB8PSAoaG9zdF9mZWF0dXJlc2V0W0ZFQVRVUkVT RVRfN2IwXSAmCisgICAgICAgICAgICAgICAgICBzcGVjaWFsX2ZlYXR1cmVzW0ZFQVRVUkVTRVRf N2IwXSk7CisKKyAgICAgICAgICAgIGMgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VUXzdjMF07 CisKKyAgICAgICAgICAgIGlmICggIWlzX3B2aF9kb21haW4oY3VycmQpICkKKyAgICAgICAgICAg IHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIERlbGV0ZSB0aGUgUFZI IGNvbmRpdGlvbiB3aGVuIEhWTUxpdGUgZm9ybWFsbHkgcmVwbGFjZXMgUFZILAorICAgICAgICAg ICAgICAgICAqIGFuZCBIVk0gZ3Vlc3RzIG5vIGxvbmdlciBlbnRlciBhIFBWIGNvZGVwYXRoLgor ICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgLyogT1NQS0UgY2xlYXJlZCBi eSBwdl9mZWF0dXJlc2V0LiAgRmFzdC1mb3J3YXJkIENSNCBiYWNrIGluLiAqLworICAgICAgICAg ICAgICAgIGlmICggY3Vyci0+YXJjaC5wdl92Y3B1LmN0cmxyZWdbNF0gJiBYODZfQ1I0X1BLRSAp CisgICAgICAgICAgICAgICAgICAgIGMgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TUEtF KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBi ID0gMDsKLSAgICAgICAgYSA9IGMgPSBkID0gMDsKKyAgICAgICAgICAgIGIgPSBjID0gMDsKKyAg ICAgICAgYSA9IGQgPSAwOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgWFNUQVRFX0NQVUlE OgpAQCAtMTAwOCwzNyArMTEwMiw0OSBAQCB2b2lkIHB2X2NwdWlkKHN0cnVjdCBjcHVfdXNlcl9y ZWdzICpyZWdzKQogICAgICAgICB9CiAKICAgICAgICAgY2FzZSAxOgotICAgICAgICAgICAgYSAm PSAoYm9vdF9jcHVfZGF0YS54ODZfY2FwYWJpbGl0eVtjcHVmZWF0X3dvcmQoWDg2X0ZFQVRVUkVf WFNBVkVPUFQpXSAmCi0gICAgICAgICAgICAgICAgICB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJF X1hTQVZFUykpOworICAgICAgICAgICAgYSAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfRGEx XTsKICAgICAgICAgICAgIGIgPSBjID0gZCA9IDA7CiAgICAgICAgICAgICBicmVhazsKICAgICAg ICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHg4MDAwMDAwMToKLSAgICAgICAgLyog TW9kaWZ5IEZlYXR1cmUgSW5mb3JtYXRpb24uICovCisgICAgICAgIGMgJj0gcHZfZmVhdHVyZXNl dFtGRUFUVVJFU0VUX2UxY107CisgICAgICAgIGQgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VU X2UxZF07CisKKyAgICAgICAgLyogSWYgbm90IGVtdWxhdGluZyBBTUQsIGNsZWFyIHRoZSBkdXBs aWNhdGVkIGZlYXR1cmVzIGluIGUxZC4gKi8KKyAgICAgICAgaWYgKCBjdXJyZC0+YXJjaC54ODZf dmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EICkKKyAgICAgICAgICAgIGQgJj0gfkNQVUlEX0NPTU1P Tl8xRF9GRUFUVVJFUzsKKworICAgICAgICAvKgorICAgICAgICAgKiBNVFJSIHVzZWQgdG8gdW5j b25kaXRpb25hbGx5IGxlYWsgaW50byBQViBndWVzdHMuICBUaGV5IGNhbm5vdCBNVFJSCisgICAg ICAgICAqIGluZnJhc3RydWN0dXJlIGF0IGFsbCwgYW5kIHNob3VsZG4ndCBiZSBhYmxlIHRvIHNl ZSB0aGUgZmVhdHVyZS4KKyAgICAgICAgICoKKyAgICAgICAgICogTW9kZXJuIFBWT1BTIExpbnV4 IHNlbGYtY2xvYmJlcnMgdGhlIE1UUlIgZmVhdHVyZSwgdG8gYXZvaWQgdHJ5aW5nCisgICAgICAg ICAqIHRvIHVzZSB0aGUgYXNzb2NpYXRlZCBNU1JzLiAgWGVub2xpbnV4LWJhc2VkIFBWIGRvbTAn cyBob3dldmVyIHVzZQorICAgICAgICAgKiB0aGUgTVRSUiBmZWF0dXJlIGFzIGFuIGluZGljYXRp b24gb2YgdGhlIHByZXNlbmNlIG9mIHRoZQorICAgICAgICAgKiBYRU5QRl97YWRkLGRlbCxyZWFk fV9tZW10eXBlIGh5cGVyY2FsbHMuCisgICAgICAgICAqLworICAgICAgICBpZiAoIGlzX2hhcmR3 YXJlX2RvbWFpbihjdXJyZCkgJiYgZ3Vlc3Rfa2VybmVsX21vZGUoY3VyciwgcmVncykgJiYKKyAg ICAgICAgICAgICBjcHVfaGFzX210cnIgKQorICAgICAgICAgICAgZCB8PSBjcHVmZWF0X21hc2so WDg2X0ZFQVRVUkVfTVRSUik7CisKICAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3Vy cmQpICkKICAgICAgICAgewotICAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTE0g JSAzMiwgJmQpOwotICAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfTEFIRl9MTSAl IDMyLCAmYyk7CisgICAgICAgICAgICBkICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfTE0p OworICAgICAgICAgICAgYyAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0xBSEZfTE0pOwor CisgICAgICAgICAgICBpZiAoIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9S X0FNRCApCisgICAgICAgICAgICAgICAgZCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1NZ U0NBTEwpOwogICAgICAgICB9Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGN1cnJk KSAmJgotICAgICAgICAgICAgIGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9S X0FNRCApCi0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9TWVNDQUxMICUgMzIs ICZkKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUEFHRTFHQiAlIDMyLCAmZCk7 Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1JEVFNDUCAlIDMyLCAmZCk7Ci0KLSAg ICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfU1ZNICUgMzIsICZjKTsKLSAgICAgICAgaWYg KCAhY3B1X2hhc19hcGljICkKLSAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRVhU QVBJQyAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX09TVlcgJSAz MiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9JQlMgJSAzMiwgJmMpOwot ICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9TS0lOSVQgJSAzMiwgJmMpOwotICAgICAg ICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9XRFQgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFy X2JpdChYODZfRkVBVFVSRV9MV1AgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9OT0RFSURfTVNSICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZF QVRVUkVfVE9QT0VYVCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJF X01PTklUT1JYICUgMzIsICZjKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4ODAwMDAw MDc6CisgICAgICAgIGQgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VUX2U3ZF07CisgICAgICAg IGJyZWFrOworCisgICAgY2FzZSAweDgwMDAwMDA4OgorICAgICAgICBiICY9IHB2X2ZlYXR1cmVz ZXRbRkVBVFVSRVNFVF9lOGJdOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgMHgwMDAwMDAw YTogLyogQXJjaGl0ZWN0dXJhbCBQZXJmb3JtYW5jZSBNb25pdG9yIEZlYXR1cmVzIChJbnRlbCkg Ki8KZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvY3B1ZmVhdHVyZS5oIGIveGVuL2lu Y2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKaW5kZXggZTI5YjAyNC4uNmEwODU3OSAxMDA2NDQK LS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9jcHVmZWF0dXJlLmgKKysrIGIveGVuL2luY2x1ZGUv YXNtLXg4Ni9jcHVmZWF0dXJlLmgKQEAgLTgxLDYgKzgxLDggQEAKICNkZWZpbmUgY3B1X2hhc194 c2F2ZWMJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9YU0FWRUMpCiAjZGVmaW5lIGNwdV9oYXNf eGdldGJ2MQkJYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX1hHRVRCVjEpCiAjZGVmaW5lIGNwdV9o YXNfeHNhdmVzCQlib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfWFNBVkVTKQorI2RlZmluZSBjcHVf aGFzX21vbml0b3IJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9NT05JVE9SKQorI2RlZmluZSBj cHVfaGFzX2Vpc3QJCWJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9FSVNUKQogCiBlbnVtIF9jYWNo ZV90eXBlIHsKICAgICBDQUNIRV9UWVBFX05VTEwgPSAwLAotLSAKMi4xLjQKCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBs aXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZl bAo=