From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v4 11/26] xen/x86: Improvements to in-hypervisor cpuid sanity checks Date: Wed, 23 Mar 2016 16:36:14 +0000 Message-ID: <1458750989-28967-12-git-send-email-andrew.cooper3@citrix.com> References: <1458750989-28967-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: <1458750989-28967-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 , Jan Beulich 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 dHMuCiAqIENoYW5naW5nIHRoZSB2aXNpYmlsaXR5IG9mIFJEVFNDUCBiYXNlZCBvbiBob3N0IFRT QyBzdGFiaWxpdHkgb3IgdmlydHVhbAogICBUU0MgbW9kZSBpcyBib2d1cywgc28gZHJvcHBlZC4K ICogV2hlbiBlbXVsYXRpbmcgSW50ZWwgdG8gYSBndWVzdCwgdGhlIGNvbW1vbiBmZWF0dXJlcyBp biBlMWQgc2hvdWxkIGJlCiAgIGNsZWFyZWQuCiAqIFRoZSBBUElDIGJpdCBpbiBlMWQgKG9uIG5v bi1JbnRlbCkgaXMgYWxzbyBhIGZhc3QtZm9yd2FyZCBmcm9tIHRoZQogICBBUElDX0JBU0UgTVNS LgoKQXMgYSBzbWFsbCBpbXByb3ZlbWVudCwgdXNlIGNvbXBpbGVyLXZpc2libGUgJidzIGFuZCB8 J3MsIHJhdGhlciB0aGFuCntjbGVhcixzZXR9X2JpdCgpLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3 IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KLS0tCkNDOiBKYW4gQmV1bGljaCA8 SkJldWxpY2hAc3VzZS5jb20+Cgp2MjoKICogUmVpbnN0YXRlIHNvbWUgb2YgdGhlIGR5bmFtaWMg Y2hlY2tzIGZvciBub3cuICBGdXR1cmUgZGV2ZWxvcG1lbnQgd29yayB3aWxsCiAgIGluc3RhdGUg YSBjb21wbGV0ZSBwZXItZG9tYWluIHBvbGljeS4KICogRml4IE9TWFNBVkUgaGFuZGxpbmcgZm9y IFBWIGd1ZXN0cy4KdjM6CiAqIEJldHRlciBoYW5kbGluZyBvZiB0aGUgY3Jvc3MtdmVuZG9yIGNh c2UuCiAqIEltcHJvdmVtZW50cyB0byB0aGUgaGFuZGxpbmcgb2Ygc3BlY2lhbCBmZWF0dXJlcy4K ICogQ29ycmVjdCBQU0UzNiB0byBiZWluZyBhIEhBUC1vbmx5IGZlYXR1cmUuCiAqIFlldCBtb3Jl IE9TWFNBVkUgZml4ZXMgZm9yIFBWIGd1ZXN0cy4KdjQ6CiAqIExlYWsgUFNFMzYgaW50byBzaGFk b3cgZ3Vlc3RzIHRvIGZpeCBidWdneSB2ZXJzaW9ucyBvZiBIeXBlci1WLgogKiBMZWFrIE1UUlIg aW50byB0aGUgaGFyZHdhcmUgZG9tYWluIHRvIGZpeCBYZW5vbGludXggZG9tMC4KICogQ2hhbmdl IGNyb3NzLXZlbmRvciAxRCBkaXNhYmxpbmcgbG9naWMuCiAqIEF2b2lkIHJlYWRpbmcgYXJjaC5w dl92Y3B1IGZvciBQVkggZ3Vlc3RzLgotLS0KIHhlbi9hcmNoL3g4Ni9odm0vaHZtLmMgfCAxMjUg KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni90cmFwcy5jICAgfCAy MDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLQogMiBm aWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9ucygrKSwgMTE4IGRlbGV0aW9ucygtKQoKZGlmZiAt LWdpdCBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMgYi94ZW4vYXJjaC94ODYvaHZtL2h2bS5jCmlu ZGV4IDgwZDU5ZmYuLjY1OTNiYjEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9odm0vaHZtLmMK KysrIGIveGVuL2FyY2gveDg2L2h2bS9odm0uYwpAQCAtNzEsNiArNzEsNyBAQAogI2luY2x1ZGUg PHB1YmxpYy9tZW1vcnkuaD4KICNpbmNsdWRlIDxwdWJsaWMvdm1fZXZlbnQuaD4KICNpbmNsdWRl IDxwdWJsaWMvYXJjaC14ODYvY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20vY3B1aWQuaD4KIAogYm9v bF90IF9fcmVhZF9tb3N0bHkgaHZtX2VuYWJsZWQ7CiAKQEAgLTQ2NjgsNjIgKzQ2NjksNzEgQEAg dm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5z aWduZWQgaW50ICplYngsCiAgICAgICAgIC8qIEZpeCB1cCBWTEFQSUMgZGV0YWlscy4gKi8KICAg ICAgICAgKmVieCAmPSAweDAwRkZGRkZGdTsKICAgICAgICAgKmVieCB8PSAodi0+dmNwdV9pZCAq IDIpIDw8IDI0OworCisgICAgICAgICplY3ggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF8x Y107CisgICAgICAgICplZHggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF8xZF07CisKKyAg ICAgICAgLyogQVBJQyBleHBvc2VkIHRvIGd1ZXN0cywgYnV0IEZhc3QtZm9yd2FyZCBNU1JfQVBJ Q19CQVNFLkVOIGJhY2sgaW4uICovCiAgICAgICAgIGlmICggdmxhcGljX2h3X2Rpc2FibGVkKHZj cHVfdmxhcGljKHYpKSApCi0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9BUElD ICYgMzEsIGVkeCk7CisgICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X2JpdChYODZfRkVBVFVS RV9BUElDKTsKIAotICAgICAgICAvKiBGaXggdXAgT1NYU0FWRS4gKi8KLSAgICAgICAgaWYgKCAq ZWN4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1hTQVZFKSAmJgotICAgICAgICAgICAgICh2 LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdICYgWDg2X0NSNF9PU1hTQVZFKSApCisgICAgICAg IC8qIE9TWFNBVkUgY2xlYXJlZCBieSBodm1fZmVhdHVyZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQg YmFjayBpbi4gKi8KKyAgICAgICAgaWYgKCB2LT5hcmNoLmh2bV92Y3B1Lmd1ZXN0X2NyWzRdICYg WDg2X0NSNF9PU1hTQVZFICkKICAgICAgICAgICAgICplY3ggfD0gY3B1ZmVhdF9tYXNrKFg4Nl9G RUFUVVJFX09TWFNBVkUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICAqZWN4ICY9IH5jcHVm ZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7CiAKLSAgICAgICAgLyogRG9uJ3QgZXhwb3Nl IFBDSUQgdG8gbm9uLWhhcCBodm0uICovCisgICAgICAgIC8qIERvbid0IGV4cG9zZSBIQVAtb25s eSBmZWF0dXJlcyB0byBub24taGFwIGd1ZXN0cy4gKi8KICAgICAgICAgaWYgKCAhaGFwX2VuYWJs ZWQoZCkgKQorICAgICAgICB7CiAgICAgICAgICAgICAqZWN4ICY9IH5jcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfUENJRCk7CiAKLSAgICAgICAgLyogT25seSBwcm92aWRlIFBTRTM2IHdoZW4gZ3Vl c3QgcnVucyBpbiAzMmJpdCBQQUUgb3IgaW4gbG9uZyBtb2RlICovCi0gICAgICAgIGlmICggISho dm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9lbmFibGVkKHYpKSApCi0gICAgICAg ICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYpOworICAgICAgICAg ICAgLyoKKyAgICAgICAgICAgICAqIFBTRTM2IGlzIG5vdCBzdXBwb3J0ZWQgaW4gc2hhZG93IG1v ZGUuICBUaGlzIGJpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAqIHVuaWxhdGVyYWxseSBjbGVh cmVkLgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEhvd2V2ZXIsIGFuIHVuc3BlY2lm aWVkIHZlcnNpb24gb2YgSHlwZXItViBmcm9tIDIwMTEgcmVmdXNlcworICAgICAgICAgICAgICog dG8gc3RhcnQgYXMgdGhlICJjcHUgZG9lcyBub3QgcHJvdmlkZSByZXF1aXJlZCBodyBmZWF0dXJl cyIgaWYKKyAgICAgICAgICAgICAqIGl0IGNhbid0IHNlZSBQU0UzNi4KKyAgICAgICAgICAgICAq CisgICAgICAgICAgICAgKiBBcyBhIHdvcmthcm91bmQsIGxlYWsgdGhlIHRvb2xzdGFjay1wcm92 aWRlZCBQU0UzNiB2YWx1ZSBpbnRvIGEKKyAgICAgICAgICAgICAqIHNoYWRvdyBndWVzdCBpZiB0 aGUgZ3Vlc3QgaXMgYWxyZWFkeSB1c2luZyBQQUUgcGFnaW5nIChhbmQKKyAgICAgICAgICAgICAq IHdvbid0IGNhcmUgYWJvdXQgcmV2ZXJ0aW5nIGJhY2sgdG8gUFNFIHBhZ2luZykuICBPdGhlcndp c2UsCisgICAgICAgICAgICAgKiBrbm9ibGUgaXQsIHNvIGEgMzJiaXQgZ3Vlc3QgZG9lc24ndCBn ZXQgdGhlIGltcHJlc3Npb24gdGhhdCBpdAorICAgICAgICAgICAgICogY291bGQgdHJ5IHRvIHVz ZSBQU0UzNiBwYWdpbmcuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICggIShodm1f cGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9kZV9lbmFibGVkKHYpKSApCisgICAgICAgICAg ICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX1BTRTM2KTsKKyAgICAgICAg fQogICAgICAgICBicmVhazsKKwogICAgIGNhc2UgMHg3OgogICAgICAgICBpZiAoIGNvdW50ID09 IDAgKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoICFjcHVfaGFzX3NtZXAgKQotICAgICAg ICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9TTUVQKTsKLQotICAg ICAgICAgICAgaWYgKCAhY3B1X2hhc19zbWFwICkKLSAgICAgICAgICAgICAgICAqZWJ4ICY9IH5j cHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfU01BUCk7CisgICAgICAgICAgICAvKiBGb2xkIGhvc3Qn cyBGRFBfRVhDUF9PTkxZIGFuZCBOT19GUFVfU0VMIGludG8gZ3Vlc3QncyB2aWV3LiAqLworICAg ICAgICAgICAgKmVieCAmPSAoaHZtX2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83YjBdICYKKyAgICAg ICAgICAgICAgICAgICAgIH5zcGVjaWFsX2ZlYXR1cmVzW0ZFQVRVUkVTRVRfN2IwXSk7CisgICAg ICAgICAgICAqZWJ4IHw9IChob3N0X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83YjBdICYKKyAgICAg ICAgICAgICAgICAgICAgIHNwZWNpYWxfZmVhdHVyZXNbRkVBVFVSRVNFVF83YjBdKTsKIAotICAg ICAgICAgICAgLyogRG9uJ3QgZXhwb3NlIE1QWCB0byBodm0gd2hlbiBWTVggc3VwcG9ydCBpcyBu b3QgYXZhaWxhYmxlLiAqLwotICAgICAgICAgICAgaWYgKCAhKHZteF92bWV4aXRfY29udHJvbCAm IFZNX0VYSVRfQ0xFQVJfQk5EQ0ZHUykgfHwKLSAgICAgICAgICAgICAgICAgISh2bXhfdm1lbnRy eV9jb250cm9sICYgVk1fRU5UUllfTE9BRF9CTkRDRkdTKSApCi0gICAgICAgICAgICAgICAgKmVi eCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX01QWCk7CisgICAgICAgICAgICAqZWN4ICY9 IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfN2MwXTsKIAorICAgICAgICAgICAgLyogRG9uJ3Qg ZXhwb3NlIEhBUC1vbmx5IGZlYXR1cmVzIHRvIG5vbi1oYXAgZ3Vlc3RzLiAqLwogICAgICAgICAg ICAgaWYgKCAhaGFwX2VuYWJsZWQoZCkgKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg ICAvKiBEb24ndCBleHBvc2UgSU5WUENJRCB0byBub24taGFwIGh2bS4gKi8KICAgICAgICAgICAg ICAgICAgKmVieCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0lOVlBDSUQpOwotICAgICAg ICAgICAgICAgICAvKiBYODZfRkVBVFVSRV9QS1UgaXMgbm90IHlldCBpbXBsZW1lbnRlZCBmb3Ig c2hhZG93IHBhZ2luZy4gKi8KICAgICAgICAgICAgICAgICAgKmVjeCAmPSB+Y3B1ZmVhdF9tYXNr KFg4Nl9GRUFUVVJFX1BLVSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICggKCpl Y3ggJiBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUEtVKSkgJiYKLSAgICAgICAgICAgICAgICAg KHYtPmFyY2guaHZtX3ZjcHUuZ3Vlc3RfY3JbNF0gJiBYODZfQ1I0X1BLRSkgKQorICAgICAgICAg ICAgLyogT1NQS0UgY2xlYXJlZCBieSBodm1fZmVhdHVyZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQg YmFjayBpbi4gKi8KKyAgICAgICAgICAgIGlmICggdi0+YXJjaC5odm1fdmNwdS5ndWVzdF9jcls0 XSAmIFg4Nl9DUjRfUEtFICkKICAgICAgICAgICAgICAgICAqZWN4IHw9IGNwdWZlYXRfbWFzayhY ODZfRkVBVFVSRV9PU1BLRSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgKmVj eCAmPSB+Y3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TUEtFKTsKLQotICAgICAgICAgICAgLyog RG9uJ3QgZXhwb3NlIFBDT01NSVQgdG8gaHZtIHdoZW4gVk1YIHN1cHBvcnQgaXMgbm90IGF2YWls YWJsZS4gKi8KLSAgICAgICAgICAgIGlmICggIWNwdV9oYXNfdm14X3Bjb21taXQgKQotICAgICAg ICAgICAgICAgICplYnggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9QQ09NTUlUKTsKICAg ICAgICAgfQotCiAgICAgICAgIGJyZWFrOworCiAgICAgY2FzZSAweGI6CiAgICAgICAgIC8qIEZp eCB0aGUgeDJBUElDIGlkZW50aWZpZXIuICovCiAgICAgICAgICplZHggPSB2LT52Y3B1X2lkICog MjsKICAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIDB4ZDoKICAgICAgICAgLyogRUJYIHZhbHVl IG9mIG1haW4gbGVhZiAwIGRlcGVuZHMgb24gZW5hYmxlZCB4c2F2ZSBmZWF0dXJlcyAqLwogICAg ICAgICBpZiAoIGNvdW50ID09IDAgJiYgdi0+YXJjaC54Y3IwICkgCkBAIC00NzQwLDkgKzQ3NTAs MTIgQEAgdm9pZCBodm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVh eCwgdW5zaWduZWQgaW50ICplYngsCiAgICAgICAgICAgICAgICAgICAgICplYnggPSBfZWF4ICsg X2VieDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCiAgICAgICAgIGlmICggY291bnQgPT0g MSApCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICggY3B1X2hhc194c2F2ZXMgJiYgY3B1X2hh c192bXhfeHNhdmVzICkKKyAgICAgICAgICAgICplYXggJj0gaHZtX2ZlYXR1cmVzZXRbRkVBVFVS RVNFVF9EYTFdOworCisgICAgICAgICAgICBpZiAoICplYXggJiBjcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfWFNBVkVTKSApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgKmVieCA9IFhT VEFURV9BUkVBX01JTl9TSVpFOwogICAgICAgICAgICAgICAgIGlmICggdi0+YXJjaC54Y3IwIHwg di0+YXJjaC5odm1fdmNwdS5tc3JfeHNzICkKQEAgLTQ3NTcsMjAgKzQ3NzAsNDIgQEAgdm9pZCBo dm1fY3B1aWQodW5zaWduZWQgaW50IGlucHV0LCB1bnNpZ25lZCBpbnQgKmVheCwgdW5zaWduZWQg aW50ICplYngsCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDgwMDAwMDAxOgotICAgICAg ICAvKiBXZSBleHBvc2UgUkRUU0NQIGZlYXR1cmUgdG8gZ3Vlc3Qgb25seSB3aGVuCi0gICAgICAg ICAgIHRzY19tb2RlID09IFRTQ19NT0RFX0RFRkFVTFQgYW5kIGhvc3RfdHNjX2lzX3NhZmUoKSBy ZXR1cm5zIDEgKi8KLSAgICAgICAgaWYgKCBkLT5hcmNoLnRzY19tb2RlICE9IFRTQ19NT0RFX0RF RkFVTFQgfHwKLSAgICAgICAgICAgICAhaG9zdF90c2NfaXNfc2FmZSgpICkKLSAgICAgICAgICAg ICplZHggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9SRFRTQ1ApOwotICAgICAgICAvKiBI aWRlIDFHQi1zdXBlcnBhZ2UgZmVhdHVyZSBpZiB3ZSBjYW4ndCBlbXVsYXRlIGl0LiAqLwotICAg ICAgICBpZiAoIWh2bV9wc2UxZ2Jfc3VwcG9ydGVkKGQpKQorICAgICAgICAqZWN4ICY9IGh2bV9m ZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTFjXTsKKyAgICAgICAgKmVkeCAmPSBodm1fZmVhdHVyZXNl dFtGRUFUVVJFU0VUX2UxZF07CisKKyAgICAgICAgLyogSWYgbm90IGVtdWxhdGluZyBBTUQsIGNs ZWFyIHRoZSBkdXBsaWNhdGVkIGZlYXR1cmVzIGluIGUxZC4gKi8KKyAgICAgICAgaWYgKCBkLT5h cmNoLng4Nl92ZW5kb3IgIT0gWDg2X1ZFTkRPUl9BTUQgKQorICAgICAgICAgICAgKmVkeCAmPSB+ Q1BVSURfQ09NTU9OXzFEX0ZFQVRVUkVTOworICAgICAgICAvKiBmYXN0LWZvcndhcmQgTVNSX0FQ SUNfQkFTRS5FTiBpZiBpdCBoYXNuJ3QgYWxyZWFkeSBiZWVuIGNsb2JiZXJlZC4gKi8KKyAgICAg ICAgZWxzZSBpZiAoIHZsYXBpY19od19kaXNhYmxlZCh2Y3B1X3ZsYXBpYyh2KSkgKQorICAgICAg ICAgICAgKmVkeCAmPSB+Y3B1ZmVhdF9iaXQoWDg2X0ZFQVRVUkVfQVBJQyk7CisKKyAgICAgICAg LyogRG9uJ3QgZXhwb3NlIEhBUC1vbmx5IGZlYXR1cmVzIHRvIG5vbi1oYXAgZ3Vlc3RzLiAqLwor ICAgICAgICBpZiAoICFoYXBfZW5hYmxlZChkKSApCisgICAgICAgIHsKICAgICAgICAgICAgICpl ZHggJj0gfmNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9QQUdFMUdCKTsKLSAgICAgICAgLyogT25s eSBwcm92aWRlIFBTRTM2IHdoZW4gZ3Vlc3QgcnVucyBpbiAzMmJpdCBQQUUgb3IgaW4gbG9uZyBt b2RlICovCi0gICAgICAgIGlmICggIShodm1fcGFlX2VuYWJsZWQodikgfHwgaHZtX2xvbmdfbW9k ZV9lbmFibGVkKHYpKSApCi0gICAgICAgICAgICAqZWR4ICY9IH5jcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfUFNFMzYpOwotICAgICAgICAvKiBIaWRlIGRhdGEgYnJlYWtwb2ludCBleHRlbnNpb25z IGlmIHRoZSBoYXJkd2FyZSBoYXMgbm8gc3VwcG9ydC4gKi8KLSAgICAgICAgaWYgKCAhYm9vdF9j cHVfaGFzKFg4Nl9GRUFUVVJFX0RCRVhUKSApCi0gICAgICAgICAgICAqZWN4ICY9IH5jcHVmZWF0 X21hc2soWDg2X0ZFQVRVUkVfREJFWFQpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAg ICogUFNFMzYgaXMgbm90IHN1cHBvcnRlZCBpbiBzaGFkb3cgbW9kZS4gIFRoaXMgYml0IHNob3Vs ZCBiZQorICAgICAgICAgICAgICogdW5pbGF0ZXJhbGx5IGNsZWFyZWQuCisgICAgICAgICAgICAg KgorICAgICAgICAgICAgICogSG93ZXZlciwgYW4gdW5zcGVjaWZpZWQgdmVyc2lvbiBvZiBIeXBl ci1WIGZyb20gMjAxMSByZWZ1c2VzCisgICAgICAgICAgICAgKiB0byBzdGFydCBhcyB0aGUgImNw dSBkb2VzIG5vdCBwcm92aWRlIHJlcXVpcmVkIGh3IGZlYXR1cmVzIiBpZgorICAgICAgICAgICAg ICogaXQgY2FuJ3Qgc2VlIFBTRTM2LgorICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAqIEFz IGEgd29ya2Fyb3VuZCwgbGVhayB0aGUgdG9vbHN0YWNrLXByb3ZpZGVkIFBTRTM2IHZhbHVlIGlu dG8gYQorICAgICAgICAgICAgICogc2hhZG93IGd1ZXN0IGlmIHRoZSBndWVzdCBpcyBhbHJlYWR5 IHVzaW5nIFBBRSBwYWdpbmcgKGFuZAorICAgICAgICAgICAgICogd29uJ3QgY2FyZSBhYm91dCBy ZXZlcnRpbmcgYmFjayB0byBQU0UgcGFnaW5nKS4gIE90aGVyd2lzZSwKKyAgICAgICAgICAgICAq IGtub2JsZSBpdCwgc28gYSAzMmJpdCBndWVzdCBkb2Vzbid0IGdldCB0aGUgaW1wcmVzc2lvbiB0 aGF0IGl0CisgICAgICAgICAgICAgKiBjb3VsZCB0cnkgdG8gdXNlIFBTRTM2IHBhZ2luZy4KKyAg ICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCAhKGh2bV9wYWVfZW5hYmxlZCh2KSB8fCBo dm1fbG9uZ19tb2RlX2VuYWJsZWQodikpICkKKyAgICAgICAgICAgICAgICAqZWR4ICY9IH5jcHVm ZWF0X21hc2soWDg2X0ZFQVRVUkVfUFNFMzYpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSAweDgwMDAwMDA3OgorICAgICAgICAqZWR4ICY9IGh2bV9mZWF0dXJlc2V0W0ZF QVRVUkVTRVRfZTdkXTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4ODAwMDAwMDg6CkBA IC00Nzg4LDYgKzQ4MjMsOCBAQCB2b2lkIGh2bV9jcHVpZCh1bnNpZ25lZCBpbnQgaW5wdXQsIHVu c2lnbmVkIGludCAqZWF4LCB1bnNpZ25lZCBpbnQgKmVieCwKICAgICAgICAgaHZtX2NwdWlkKDB4 ODAwMDAwMDEsIE5VTEwsIE5VTEwsIE5VTEwsICZfZWR4KTsKICAgICAgICAgKmVheCA9ICgqZWF4 ICYgfjB4ZmZmZjAwKSB8IChfZWR4ICYgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0xNKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMHgzMDAwIDogMHgyMDAwKTsKKwor ICAgICAgICAqZWJ4ICY9IGh2bV9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZThiXTsKICAgICAgICAg YnJlYWs7CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3RyYXBzLmMgYi94ZW4v YXJjaC94ODYvdHJhcHMuYwppbmRleCA2ZmJiMWNmLi5kZmExY2I2IDEwMDY0NAotLS0gYS94ZW4v YXJjaC94ODYvdHJhcHMuYworKysgYi94ZW4vYXJjaC94ODYvdHJhcHMuYwpAQCAtNzMsNiArNzMs NyBAQAogI2luY2x1ZGUgPGFzbS9ocGV0Lmg+CiAjaW5jbHVkZSA8YXNtL3ZwbXUuaD4KICNpbmNs dWRlIDxwdWJsaWMvYXJjaC14ODYvY3B1aWQuaD4KKyNpbmNsdWRlIDxhc20vY3B1aWQuaD4KICNp bmNsdWRlIDx4c20veHNtLmg+CiAKIC8qCkBAIC05MzIsNjkgKzkzMywxMTYgQEAgdm9pZCBwdl9j cHVpZChzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncykKICAgICBlbHNlCiAgICAgICAgIGNwdWlk X2NvdW50KGxlYWYsIHN1YmxlYWYsICZhLCAmYiwgJmMsICZkKTsKIAotICAgIGlmICggKGxlYWYg JiAweDdmZmZmZmZmKSA9PSAweDAwMDAwMDAxICkKLSAgICB7Ci0gICAgICAgIC8qIE1vZGlmeSBG ZWF0dXJlIEluZm9ybWF0aW9uLiAqLwotICAgICAgICBpZiAoICFjcHVfaGFzX2FwaWMgKQotICAg ICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfQVBJQywgJmQpOwotCi0gICAgICAgIGlm ICggIWlzX3B2aF9kb21haW4oY3VycmQpICkKLSAgICAgICAgewotICAgICAgICAgICAgX19jbGVh cl9iaXQoWDg2X0ZFQVRVUkVfUFNFLCAmZCk7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9QR0UsICZkKTsKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BT RTM2LCAmZCk7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9WTUUsICZkKTsK LSAgICAgICAgfQotICAgIH0KLQogICAgIHN3aXRjaCAoIGxlYWYgKQogICAgIHsKICAgICBjYXNl IDB4MDAwMDAwMDE6Ci0gICAgICAgIC8qIE1vZGlmeSBGZWF0dXJlIEluZm9ybWF0aW9uLiAqLwot ICAgICAgICBpZiAoICFjcHVfaGFzX3NlcCApCi0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9TRVAsICZkKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRFMsICZk KTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfVE0xLCAmZCk7Ci0gICAgICAgIF9f Y2xlYXJfYml0KFg4Nl9GRUFUVVJFX1BCRSwgJmQpOwotICAgICAgICBpZiAoIGlzX3B2aF9kb21h aW4oY3VycmQpICkKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX01UUlIsICZk KTsKLQotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9EVEVTNjQgJSAzMiwgJmMpOwot ICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9NT05JVE9SICUgMzIsICZjKTsKLSAgICAg ICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfRFNDUEwgJSAzMiwgJmMpOwotICAgICAgICBfX2Ns ZWFyX2JpdChYODZfRkVBVFVSRV9WTVggJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChY ODZfRkVBVFVSRV9TTVggJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVS RV9UTTIgJSAzMiwgJmMpOworICAgICAgICBjICY9IHB2X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF8x Y107CisgICAgICAgIGQgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VUXzFkXTsKKwogICAgICAg ICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihjdXJyZCkgKQotICAgICAgICAgICAgX19jbGVhcl9i aXQoWDg2X0ZFQVRVUkVfQ1gxNiAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9G RUFUVVJFX1hUUFIgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9Q RENNICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUENJRCAlIDMy LCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0RDQSAlIDMyLCAmYyk7Ci0g ICAgICAgIGlmICggIWNwdV9oYXNfeHNhdmUgKQorICAgICAgICAgICAgYyAmPSB+Y3B1ZmVhdF9t YXNrKFg4Nl9GRUFUVVJFX0NYMTYpOworCisgICAgICAgIC8qCisgICAgICAgICAqICEhISBXYXJu aW5nIC0gT1NYU0FWRSBoYW5kbGluZyBmb3IgUFYgZ3Vlc3RzIGlzIG5vbi1hcmNoaXRlY3R1cmFs ICEhIQorICAgICAgICAgKgorICAgICAgICAgKiBBcmNoaXRlY3R1cmFsbHksIHRoZSBjb3JyZWN0 IGNvZGUgaGVyZSBpcyBzaW1wbHk6CisgICAgICAgICAqCisgICAgICAgICAqICAgaWYgKCBjdXJy LT5hcmNoLnB2X3ZjcHUuY3RybHJlZ1s0XSAmIFg4Nl9DUjRfT1NYU0FWRSApCisgICAgICAgICAq ICAgICAgIGMgfD0gY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX09TWFNBVkUpOworICAgICAgICAg KgorICAgICAgICAgKiBIb3dldmVyIGJlY2F1c2Ugb2YgYnVncyBpbiBYZW4gKGJlZm9yZSBjL3Mg YmQxOTA4MGIsIE5vdiAyMDEwLCB0aGUKKyAgICAgICAgICogWFNBVkUgY3B1aWQgZmxhZyBsZWFr ZWQgaW50byBndWVzdHMgZGVzcGl0ZSB0aGUgZmVhdHVyZSBub3QgYmVpbmcKKyAgICAgICAgICog YXZpbGFibGUgZm9yIHVzZSksIGJ1Z2d5IHdvcmthcm91bmRzIHdoZXJlIGludHJvZHVjZWQgdG8g TGludXggKGMvcworICAgICAgICAgKiA5NDdjY2Y5YywgYWxzbyBOb3YgMjAxMCkgd2hpY2ggcmVs aWVkIG9uIHRoZSBmYWN0IHRoYXQgWGVuIGFsc28KKyAgICAgICAgICogaW5jb3JyZWN0bHkgbGVh a2VkIE9TWFNBVkUgaW50byB0aGUgZ3Vlc3QuCisgICAgICAgICAqCisgICAgICAgICAqIEZ1cnRo ZXJtb3JlLCBwcm92aWRpbmcgYXJjaGl0ZWN0dXJhbCBPU1hTQVZFIGJlaGF2aW91ciB0byBhIG1h bnkKKyAgICAgICAgICogTGludXggUFYgZ3Vlc3RzIHRyaWdnZXJlZCBhIGZ1cnRoZXIga2VybmVs IGJ1ZyB3aGVuIHRoZSBmcHUgY29kZQorICAgICAgICAgKiBvYnNlcnZlcyB0aGF0IFhTQVZFT1BU IGlzIGF2YWlsYWJsZSwgYXNzdW1lcyB0aGF0IHhzYXZlIHN0YXRlIGhhZAorICAgICAgICAgKiBi ZWVuIHNldCB1cCBmb3IgdGhlIHRhc2ssIGFuZCBmb2xsb3dzIGEgd2lsZCBwb2ludGVyLgorICAg ICAgICAgKgorICAgICAgICAgKiBPbGRlciBMaW51eCBQVk9QUyBrZXJuZWxzIGhvd2V2ZXIgZG8g cmVxdWlyZSBhcmNoaXRlY3RydWFsCisgICAgICAgICAqIGJlaGF2aW91ci4gIFRoZXkgb2JzZXJ2 ZSBYZW4ncyBsZWFrZWQgT1NYU0FWRSBhbmQgYXNzdW1lIHRoZXkgY2FuCisgICAgICAgICAqIGFs cmVhZHkgdXNlIFhTRVRCViwgZHlpbmcgd2l0aCBhICNVRCBiZWNhdXNlIHRoZSBzaGFkb3dlZAor ICAgICAgICAgKiBDUjQuT1NYU0FWRSBpcyBjbGVhci4gIFRoaXMgYmVoYXZpb3VyIGhhcyBiZWVu IGFkanVzdGVkIGluIGFsbAorICAgICAgICAgKiBvYnNlcnZlZCBjYXNlcyB2aWEgc3RhYmxlIGJh Y2twb3J0cyBvZiB0aGUgYWJvdmUgY2hhbmdlc2V0LgorICAgICAgICAgKgorICAgICAgICAgKiBU aGVyZWZvcmUsIHRoZSBsZWFraW5nIG9mIFhlbidzIE9TWFNBVkUgc2V0dGluZyBoYXMgYmVjb21l IGEKKyAgICAgICAgICogZGVmYWN0byBwYXJ0IG9mIHRoZSBQViBBQkkgYW5kIGNhbid0IHJlYXNv bmFibHkgYmUgY29ycmVjdGVkLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgZm9sbG93aW5n IHNpdHVhdGlvbnMgYW5kIGxvZ2ljIG5vdyBhcHBsaWVzOgorICAgICAgICAgKgorICAgICAgICAg KiAtIEhhcmR3YXJlIHdpdGhvdXQgQ1BVSUQgZmF1bHRpbmcgc3VwcG9ydCBhbmQgbmF0aXZlIENQ VUlEOgorICAgICAgICAgKiAgICBUaGVyZSBpcyBub3RoaW5nIFhlbiBjYW4gZG8gaGVyZS4gIFRo ZSBob3N0cyBYU0FWRSBmbGFnIHdpbGwKKyAgICAgICAgICogICAgbGVhayB0aHJvdWdoIGFuZCBY ZW4ncyBPU1hTQVZFIGNob2ljZSB3aWxsIGxlYWsgdGhyb3VnaC4KKyAgICAgICAgICoKKyAgICAg ICAgICogICAgSW4gdGhlIGNhc2UgdGhhdCB0aGUgZ3Vlc3Qga2VybmVsIGhhcyBub3Qgc2V0IHVw IE9TWFNBVkUsIG9ubHkKKyAgICAgICAgICogICAgU1NFIHdpbGwgYmUgc2V0IGluIHhjcjAsIGFu ZCBndWVzdCB1c2Vyc3BhY2UgY2FuJ3QgZG8gdG9vIG11Y2gKKyAgICAgICAgICogICAgZGFtYWdl IGl0c2VsZi4KKyAgICAgICAgICoKKyAgICAgICAgICogLSBFbmxpZ2h0ZW5lZCBDUFVJRCBvciBD UFVJRCBmYXVsdGluZyBhdmFpbGFibGU6CisgICAgICAgICAqICAgIFhlbiBjYW4gZnVsbHkgY29u dHJvbCB3aGF0IGlzIHNlZW4gaGVyZS4gIEd1ZXN0IGtlcm5lbHMgbmVlZCB0bworICAgICAgICAg KiAgICBzZWUgdGhlIGxlYWtlZCBPU1hTQVZFLCBidXQgZ3Vlc3QgdXNlcnNwYWNlIGlzIGdpdmVu CisgICAgICAgICAqICAgIGFyY2hpdGVjdHVyYWwgYmVoYXZpb3VyLCB0byByZWZsZWN0IHRoZSBn dWVzdCBrZXJuZWxzCisgICAgICAgICAqICAgIGludGVudGlvbnMuCisgICAgICAgICAqLworICAg ICAgICBpZiAoICFpc19wdmhfZG9tYWluKGN1cnJkKSApCiAgICAgICAgIHsKLSAgICAgICAgICAg IF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1hTQVZFICUgMzIsICZjKTsKLSAgICAgICAgICAgIF9f Y2xlYXJfYml0KFg4Nl9GRUFUVVJFX0FWWCAlIDMyLCAmYyk7CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogRGVsZXRlIHRoZSBQVkggY29uZGl0aW9uIHdoZW4gSFZNTGl0ZSBmb3JtYWxs eSByZXBsYWNlcyBQVkgsCisgICAgICAgICAgICAgKiBhbmQgSFZNIGd1ZXN0cyBubyBsb25nZXIg ZW50ZXIgYSBQViBjb2RlcGF0aC4KKyAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAvKiBP U1hTQVZFIGNsZWFyZWQgYnkgcHZfZmVhdHVyZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQgYmFjayBp bi4gKi8KKyAgICAgICAgICAgIGlmICggKGlzX3B2X2RvbWFpbihjdXJyZCkgJiYgZ3Vlc3Rfa2Vy bmVsX21vZGUoY3VyciwgcmVncykgJiYKKyAgICAgICAgICAgICAgICAgIChyZWFkX2NyNCgpICYg WDg2X0NSNF9PU1hTQVZFKSkgfHwKKyAgICAgICAgICAgICAgICAgKGN1cnItPmFyY2gucHZfdmNw dS5jdHJscmVnWzRdICYgWDg2X0NSNF9PU1hTQVZFKSApCisgICAgICAgICAgICAgICAgYyB8PSBj cHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfT1NYU0FWRSk7CiAgICAgICAgIH0KLSAgICAgICAgaWYg KCAhY3B1X2hhc19hcGljICkKLSAgICAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfWDJB UElDICUgMzIsICZjKTsKLSAgICAgICAgX19zZXRfYml0KFg4Nl9GRUFUVVJFX0hZUEVSVklTT1Ig JSAzMiwgJmMpOworCisgICAgICAgIC8qCisgICAgICAgICAqIFBWIGd1ZXN0cyBjYW5ub3QgdXNl IGFueSBNVFJSIGluZnJhc3RydWN0dXJlLCBzbyBzaG91bGRuJ3Qgc2VlIHRoZQorICAgICAgICAg KiBmZWF0dXJlIGJpdC4gIEl0IHVzZWQgdG8gbGVhayBpbiB0byBQViBndWVzdHMuCisgICAgICAg ICAqCisgICAgICAgICAqIFBWT1BTIExpbnV4IHNlbGYtY2xvYmJlcnMgdGhlIE1UUlIgZmVhdHVy ZSwgdG8gYXZvaWQgdHJ5aW5nIHRvIHVzZQorICAgICAgICAgKiB0aGUgYXNzb2NpYXRlZCBNU1Jz LiAgWGVub2xpbnV4LWJhc2VkIFBWIGRvbTAncyBob3dldmVyIHVzZSB0aGUKKyAgICAgICAgICog TVRSUiBmZWF0dXJlIGFzIGFuIGluZGljYXRpb24gb2YgdGhlIHByZXNlbmNlIG9mIHRoZQorICAg ICAgICAgKiBYRU5QRl97YWRkLGRlbCxyZWFkfV9tZW10eXBlIGh5cGVyY2FsbHMuCisgICAgICAg ICAqCisgICAgICAgICAqIExlYWsgdGhlIGhvc3QgTVRSUiB2YWx1ZSBpbnRvIHRoZSBoYXJkd2Fy ZSBkb21haW4gb25seS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggaXNfaGFyZHdhcmVfZG9t YWluKGN1cnJkKSAmJiBjcHVfaGFzX210cnIgKQorICAgICAgICAgICAgZCB8PSBjcHVmZWF0X21h c2soWDg2X0ZFQVRVUkVfTVRSUik7CisKKyAgICAgICAgYyB8PSBjcHVmZWF0X21hc2soWDg2X0ZF QVRVUkVfSFlQRVJWSVNPUik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDAwMDAwMDA3 OgogICAgICAgICBpZiAoIHN1YmxlYWYgPT0gMCApCi0gICAgICAgICAgICBiICY9IChjcHVmZWF0 X21hc2soWDg2X0ZFQVRVUkVfQk1JMSkgfAotICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNr KFg4Nl9GRUFUVVJFX0hMRSkgIHwKLSAgICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZf RkVBVFVSRV9BVlgyKSB8Ci0gICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRV UkVfQk1JMikgfAotICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0VS TVMpIHwKLSAgICAgICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9SVE0pICB8 Ci0gICAgICAgICAgICAgICAgICBjcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVfUkRTRUVEKSAgfAot ICAgICAgICAgICAgICAgICAgY3B1ZmVhdF9tYXNrKFg4Nl9GRUFUVVJFX0FEWCkgIHwKLSAgICAg ICAgICAgICAgICAgIGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9GU0dTQkFTRSkpOworICAgICAg ICB7CisgICAgICAgICAgICAvKiBGb2xkIGhvc3QncyBGRFBfRVhDUF9PTkxZIGFuZCBOT19GUFVf U0VMIGludG8gZ3Vlc3QncyB2aWV3LiAqLworICAgICAgICAgICAgYiAmPSAocHZfZmVhdHVyZXNl dFtGRUFUVVJFU0VUXzdiMF0gJgorICAgICAgICAgICAgICAgICAgfnNwZWNpYWxfZmVhdHVyZXNb RkVBVFVSRVNFVF83YjBdKTsKKyAgICAgICAgICAgIGIgfD0gKGhvc3RfZmVhdHVyZXNldFtGRUFU VVJFU0VUXzdiMF0gJgorICAgICAgICAgICAgICAgICAgc3BlY2lhbF9mZWF0dXJlc1tGRUFUVVJF U0VUXzdiMF0pOworCisgICAgICAgICAgICBjICY9IHB2X2ZlYXR1cmVzZXRbRkVBVFVSRVNFVF83 YzBdOworCisgICAgICAgICAgICBpZiAoICFpc19wdmhfZG9tYWluKGN1cnJkKSApCisgICAgICAg ICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBEZWxldGUgdGhl IFBWSCBjb25kaXRpb24gd2hlbiBIVk1MaXRlIGZvcm1hbGx5IHJlcGxhY2VzIFBWSCwKKyAgICAg ICAgICAgICAgICAgKiBhbmQgSFZNIGd1ZXN0cyBubyBsb25nZXIgZW50ZXIgYSBQViBjb2RlcGF0 aC4KKyAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgICAgIC8qIE9TUEtFIGNsZWFy ZWQgYnkgcHZfZmVhdHVyZXNldC4gIEZhc3QtZm9yd2FyZCBDUjQgYmFjayBpbi4gKi8KKyAgICAg ICAgICAgICAgICBpZiAoIGN1cnItPmFyY2gucHZfdmNwdS5jdHJscmVnWzRdICYgWDg2X0NSNF9Q S0UgKQorICAgICAgICAgICAgICAgICAgICBjIHw9IGNwdWZlYXRfbWFzayhYODZfRkVBVFVSRV9P U1BLRSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgZWxzZQotICAgICAgICAg ICAgYiA9IDA7Ci0gICAgICAgIGEgPSBjID0gZCA9IDA7CisgICAgICAgICAgICBiID0gYyA9IDA7 CisgICAgICAgIGEgPSBkID0gMDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFhTVEFURV9D UFVJRDoKQEAgLTEwMTcsMzcgKzEwNjUsNTAgQEAgdm9pZCBwdl9jcHVpZChzdHJ1Y3QgY3B1X3Vz ZXJfcmVncyAqcmVncykKICAgICAgICAgfQogCiAgICAgICAgIGNhc2UgMToKLSAgICAgICAgICAg IGEgJj0gKGJvb3RfY3B1X2RhdGEueDg2X2NhcGFiaWxpdHlbY3B1ZmVhdF93b3JkKFg4Nl9GRUFU VVJFX1hTQVZFT1BUKV0gJgotICAgICAgICAgICAgICAgICAgfmNwdWZlYXRfbWFzayhYODZfRkVB VFVSRV9YU0FWRVMpKTsKKyAgICAgICAgICAgIGEgJj0gcHZfZmVhdHVyZXNldFtGRUFUVVJFU0VU X0RhMV07CiAgICAgICAgICAgICBiID0gYyA9IGQgPSAwOwogICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4ODAwMDAwMDE6Ci0gICAgICAg IC8qIE1vZGlmeSBGZWF0dXJlIEluZm9ybWF0aW9uLiAqLworICAgICAgICBjICY9IHB2X2ZlYXR1 cmVzZXRbRkVBVFVSRVNFVF9lMWNdOworICAgICAgICBkICY9IHB2X2ZlYXR1cmVzZXRbRkVBVFVS RVNFVF9lMWRdOworCisgICAgICAgIC8qIElmIG5vdCBlbXVsYXRpbmcgQU1ELCBjbGVhciB0aGUg ZHVwbGljYXRlZCBmZWF0dXJlcyBpbiBlMWQuICovCisgICAgICAgIGlmICggY3VycmQtPmFyY2gu eDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCApCisgICAgICAgICAgICBkICY9IH5DUFVJRF9D T01NT05fMURfRkVBVFVSRVM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogUFYgZ3Vlc3RzIGNh bm5vdCB1c2UgYW55IE1UUlIgaW5mcmFzdHJ1Y3R1cmUsIHNvIHNob3VsZG4ndCBzZWUgdGhlCisg ICAgICAgICAqIGZlYXR1cmUgYml0LiAgSXQgdXNlZCB0byBsZWFrIGluIHRvIFBWIGd1ZXN0cy4K KyAgICAgICAgICoKKyAgICAgICAgICogUFZPUFMgTGludXggc2VsZi1jbG9iYmVycyB0aGUgTVRS UiBmZWF0dXJlLCB0byBhdm9pZCB0cnlpbmcgdG8gdXNlCisgICAgICAgICAqIHRoZSBhc3NvY2lh dGVkIE1TUnMuICBYZW5vbGludXgtYmFzZWQgUFYgZG9tMCdzIGhvd2V2ZXIgdXNlIHRoZQorICAg ICAgICAgKiBNVFJSIGZlYXR1cmUgYXMgYW4gaW5kaWNhdGlvbiBvZiB0aGUgcHJlc2VuY2Ugb2Yg dGhlCisgICAgICAgICAqIFhFTlBGX3thZGQsZGVsLHJlYWR9X21lbXR5cGUgaHlwZXJjYWxscy4K KyAgICAgICAgICoKKyAgICAgICAgICogTGVhayB0aGUgaG9zdCBNVFJSIHZhbHVlIGludG8gdGhl IGhhcmR3YXJlIGRvbWFpbiBvbmx5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCBpc19oYXJk d2FyZV9kb21haW4oY3VycmQpICYmIGNwdV9oYXNfbXRyciApCisgICAgICAgICAgICBkIHw9IGNw dWZlYXRfbWFzayhYODZfRkVBVFVSRV9NVFJSKTsKKwogICAgICAgICBpZiAoIGlzX3B2XzMyYml0 X2RvbWFpbihjdXJyZCkgKQogICAgICAgICB7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9MTSAlIDMyLCAmZCk7Ci0gICAgICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVS RV9MQUhGX0xNICUgMzIsICZjKTsKKyAgICAgICAgICAgIGQgJj0gfmNwdWZlYXRfbWFzayhYODZf RkVBVFVSRV9MTSk7CisgICAgICAgICAgICBjICY9IH5jcHVmZWF0X21hc2soWDg2X0ZFQVRVUkVf TEFIRl9MTSk7CisKKyAgICAgICAgICAgIGlmICggYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9 IFg4Nl9WRU5ET1JfQU1EICkKKyAgICAgICAgICAgICAgICBkICY9IH5jcHVmZWF0X21hc2soWDg2 X0ZFQVRVUkVfU1lTQ0FMTCk7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9k b21haW4oY3VycmQpICYmCi0gICAgICAgICAgICAgYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9 IFg4Nl9WRU5ET1JfQU1EICkKLSAgICAgICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NZ U0NBTEwgJSAzMiwgJmQpOwotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9QQUdFMUdC ICUgMzIsICZkKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRVUkVfUkRUU0NQICUgMzIs ICZkKTsKLQotICAgICAgICBfX2NsZWFyX2JpdChYODZfRkVBVFVSRV9TVk0gJSAzMiwgJmMpOwot ICAgICAgICBpZiAoICFjcHVfaGFzX2FwaWMgKQotICAgICAgICAgICBfX2NsZWFyX2JpdChYODZf RkVBVFVSRV9FWFRBUElDICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQoWDg2X0ZFQVRV UkVfT1NWVyAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0lCUyAl IDMyLCAmYyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1NLSU5JVCAlIDMyLCAm Yyk7Ci0gICAgICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX1dEVCAlIDMyLCAmYyk7Ci0gICAg ICAgIF9fY2xlYXJfYml0KFg4Nl9GRUFUVVJFX0xXUCAlIDMyLCAmYyk7Ci0gICAgICAgIF9fY2xl YXJfYml0KFg4Nl9GRUFUVVJFX05PREVJRF9NU1IgJSAzMiwgJmMpOwotICAgICAgICBfX2NsZWFy X2JpdChYODZfRkVBVFVSRV9UT1BPRVhUICUgMzIsICZjKTsKLSAgICAgICAgX19jbGVhcl9iaXQo WDg2X0ZFQVRVUkVfTU9OSVRPUlggJSAzMiwgJmMpOworICAgICAgICBicmVhazsKKworICAgIGNh c2UgMHg4MDAwMDAwNzoKKyAgICAgICAgZCAmPSBwdl9mZWF0dXJlc2V0W0ZFQVRVUkVTRVRfZTdk XTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDB4ODAwMDAwMDg6CisgICAgICAgIGIgJj0g cHZfZmVhdHVyZXNldFtGRUFUVVJFU0VUX2U4Yl07CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2Fz ZSAweDAwMDAwMDBhOiAvKiBBcmNoaXRlY3R1cmFsIFBlcmZvcm1hbmNlIE1vbml0b3IgRmVhdHVy ZXMgKEludGVsKSAqLwotLSAKMi4xLjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=