From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: Re: [PATCH 01/17] x86emul: split instruction decoding from execution Date: Fri, 9 Sep 2016 19:35:03 +0100 Message-ID: References: <57D17C78020000780010D127@prv-mh.provo.novell.com> <57D17E08020000780010D136@prv-mh.provo.novell.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1biQeA-0003dZ-RW for xen-devel@lists.xenproject.org; Fri, 09 Sep 2016 18:35:30 +0000 In-Reply-To: <57D17E08020000780010D136@prv-mh.provo.novell.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Jan Beulich , xen-devel List-Id: xen-devel@lists.xenproject.org T24gMDgvMDkvMTYgMTQ6MDQsIEphbiBCZXVsaWNoIHdyb3RlOgo+IFRoaXMgaXMgb25seSB0aGUg bWVjaGFuaWNhbCBwYXJ0LCBhIHN1YnNlcXVlbnQgcGF0Y2ggd2lsbCBtYWtlIG5vbi0KPiBtZWNo YW5pY2FsIGFkanVzdG1lbnRzIHRvIGFjdHVhbGx5IGRvIGFsbCBkZWNvZGluZyBpbiB0aGlzIG5l dwo+IGZ1bmN0aW9uLgo+Cj4gU2lnbmVkLW9mZi1ieTogSmFuIEJldWxpY2ggPGpiZXVsaWNoQHN1 c2UuY29tPgo+Cj4gLS0tIGEveGVuL2FyY2gveDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMK PiArKysgYi94ZW4vYXJjaC94ODYveDg2X2VtdWxhdGUveDg2X2VtdWxhdGUuYwo+IEBAIC00OCw3 ICs0OCw5IEBACj4gIC8qIEFsbCBvcGVyYW5kcyBhcmUgaW1wbGljaXQgaW4gdGhlIG9wY29kZS4g Ki8KPiAgI2RlZmluZSBJbXBsaWNpdE9wcyAoRHN0SW1wbGljaXR8U3JjSW1wbGljaXQpCj4gIAo+ IC1zdGF0aWMgdWludDhfdCBvcGNvZGVfdGFibGVbMjU2XSA9IHsKPiArdHlwZWRlZiB1aW50OF90 IG9wY29kZV9kZXNjX3Q7Cj4gKwo+ICtzdGF0aWMgY29uc3Qgb3Bjb2RlX2Rlc2NfdCBvcGNvZGVf dGFibGVbMjU2XSA9IHsKPiAgICAgIC8qIDB4MDAgLSAweDA3ICovCj4gICAgICBCeXRlT3B8RHN0 TWVtfFNyY1JlZ3xNb2RSTSwgRHN0TWVtfFNyY1JlZ3xNb2RSTSwKPiAgICAgIEJ5dGVPcHxEc3RS ZWd8U3JjTWVtfE1vZFJNLCBEc3RSZWd8U3JjTWVtfE1vZFJNLAo+IEBAIC0xNzgsNyArMTgwLDcg QEAgc3RhdGljIHVpbnQ4X3Qgb3Bjb2RlX3RhYmxlWzI1Nl0gPSB7Cj4gICAgICBJbXBsaWNpdE9w cywgSW1wbGljaXRPcHMsIEJ5dGVPcHxEc3RNZW18U3JjTm9uZXxNb2RSTSwgRHN0TWVtfFNyY05v bmV8TW9kUk0KPiAgfTsKPiAgCj4gLXN0YXRpYyB1aW50OF90IHR3b2J5dGVfdGFibGVbMjU2XSA9 IHsKPiArc3RhdGljIGNvbnN0IG9wY29kZV9kZXNjX3QgdHdvYnl0ZV90YWJsZVsyNTZdID0gewo+ ICAgICAgLyogMHgwMCAtIDB4MDcgKi8KPiAgICAgIFNyY01lbTE2fE1vZFJNLCBJbXBsaWNpdE9w c3xNb2RSTSwgMCwgMCwgMCwgSW1wbGljaXRPcHMsIEltcGxpY2l0T3BzLCAwLAo+ICAgICAgLyog MHgwOCAtIDB4MEYgKi8KPiBAQCAtNjA3LDcgKzYwOSw3IEBAIGRveyBhc20gdm9sYXRpbGUgKAo+ ICB9KQo+ICAjZGVmaW5lIHRydW5jYXRlX2VhKGVhKSB0cnVuY2F0ZV93b3JkKChlYSksIGFkX2J5 dGVzKQo+ICAKPiAtI2RlZmluZSBtb2RlXzY0Yml0KCkgKGRlZl9hZF9ieXRlcyA9PSA4KQo+ICsj ZGVmaW5lIG1vZGVfNjRiaXQoKSAoY3R4dC0+YWRkcl9zaXplID09IDY0KQo+ICAKPiAgI2RlZmlu ZSBmYWlsX2lmKHApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCj4gIGRv IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ IEBAIC0xNTU4LDMyICsxNTYwLDYzIEBAIGludCB4ODZlbXVsX3VuaGFuZGxlYWJsZV9ydygKPiAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKPiAgfQo+ICAKPiAtaW50Cj4gLXg4Nl9l bXVsYXRlKAo+IC0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCj4gLSAgICBjb25z dCBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzICAqb3BzKQo+IC17Cj4gLSAgICAvKiBTaGFkb3cgY29w eSBvZiByZWdpc3RlciBzdGF0ZS4gQ29tbWl0dGVkIG9uIHN1Y2Nlc3NmdWwgZW11bGF0aW9uLiAq Lwo+IC0gICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgX3JlZ3MgPSAqY3R4dC0+cmVnczsKPiArc3Ry dWN0IHg4Nl9lbXVsYXRlX3N0YXRlIHsKPiArICAgIHVuc2lnbmVkIGludCBvcF9ieXRlcywgYWRf Ynl0ZXM7Cj4gKwo+ICsgICAgZW51bSB7IGV4dF9ub25lLCBleHRfMGYsIGV4dF8wZjM4IH0gZXh0 Owo+ICsgICAgdWludDhfdCBvcGNvZGU7Cj4gKyAgICB1aW50OF90IG1vZHJtLCBtb2RybV9tb2Qs IG1vZHJtX3JlZywgbW9kcm1fcm07Cj4gKyAgICB1aW50OF90IHJleF9wcmVmaXg7Cj4gKyAgICBi b29sIGxvY2tfcHJlZml4Owo+ICsgICAgb3Bjb2RlX2Rlc2NfdCBkZXNjOwo+ICsgICAgdW5pb24g dmV4IHZleDsKPiArICAgIGludCBvdmVycmlkZV9zZWc7Cj4gIAo+IC0gICAgdWludDhfdCBiLCBk LCBzaWIsIHNpYl9pbmRleCwgc2liX2Jhc2UsIHJleF9wcmVmaXggPSAwOwo+IC0gICAgdWludDhf dCBtb2RybSA9IDAsIG1vZHJtX21vZCA9IDAsIG1vZHJtX3JlZyA9IDAsIG1vZHJtX3JtID0gMDsK PiAtICAgIGVudW0geyBleHRfbm9uZSwgZXh0XzBmLCBleHRfMGYzOCB9IGV4dCA9IGV4dF9ub25l Owo+IC0gICAgdW5pb24gdmV4IHZleCA9IHt9Owo+IC0gICAgdW5zaWduZWQgaW50IG9wX2J5dGVz LCBkZWZfb3BfYnl0ZXMsIGFkX2J5dGVzLCBkZWZfYWRfYnl0ZXM7Cj4gLSAgICBib29sX3QgbG9j a19wcmVmaXggPSAwOwo+IC0gICAgaW50IG92ZXJyaWRlX3NlZyA9IC0xLCByYyA9IFg4NkVNVUxf T0tBWTsKPiAtICAgIHN0cnVjdCBvcGVyYW5kIHNyYyA9IHsgLnJlZyA9IFJFR19QT0lTT04gfTsK PiAtICAgIHN0cnVjdCBvcGVyYW5kIGRzdCA9IHsgLnJlZyA9IFJFR19QT0lTT04gfTsKPiAtICAg IGVudW0geDg2X3N3aW50X3R5cGUgc3dpbnRfdHlwZTsKPiAtICAgIHN0cnVjdCB4ODZfZW11bGF0 ZV9zdHViIHN0dWIgPSB7fTsKPiAtICAgIERFQ0xBUkVfQUxJR05FRChtbXZhbF90LCBtbXZhbCk7 Cj4gICAgICAvKgo+ICAgICAgICogRGF0YSBvcGVyYW5kIGVmZmVjdGl2ZSBhZGRyZXNzICh1c3Vh bGx5IGNvbXB1dGVkIGZyb20gTW9kUk0pLgo+ICAgICAgICogRGVmYXVsdCBpcyBhIG1lbW9yeSBv cGVyYW5kIHJlbGF0aXZlIHRvIHNlZ21lbnQgRFMuCj4gICAgICAgKi8KPiAtICAgIHN0cnVjdCBv cGVyYW5kIGVhID0geyAudHlwZSA9IE9QX01FTSwgLnJlZyA9IFJFR19QT0lTT04gfTsKPiAtICAg IGVhLm1lbS5zZWcgPSB4ODZfc2VnX2RzOyAvKiBnY2MgbWF5IHJlamVjdCBhbm9uIHVuaW9uIGlu aXRpYWxpemVyICovCj4gKyAgICBzdHJ1Y3Qgb3BlcmFuZCBlYTsKPiArCj4gKyAgICAvKiBJbW1l ZGlhdGUgb3BlcmFuZCB2YWx1ZXMsIGlmIGFueS4gVXNlIG90aGVyd2lzZSB1bnVzZWQgZmllbGRz LiAqLwo+ICsjZGVmaW5lIGltbTEgZWEudmFsCj4gKyNkZWZpbmUgaW1tMiBlYS5vcmlnX3ZhbAoK U29tZSBpbnN0cnVjdGlvbnMgKGUuZy4gYmV4dHIpIGhhdmUgYm90aCBpbW1lZGlhdGUgYW5kIG1l bW9yeSBvcGVyYW5kcy4gClJldXNpbmcgZWEgbGlrZSB0aGlzIGlzIHVuc2FmZS4KCkltbWVkaWF0 ZSBkYXRhIHdhcyBwcmV2aW91c2x5IHN0YXNoZWQgaW4gc3JjLCBzZXBhcmF0ZWx5IGZyb20gZWEu ICBJbgp0aGUgbGlnaHQgb2YgdGhlIFhTQS0xMjMgcHJvYmxlbXMsIEkgdGhpbmsgaXQgd291bGQg YmUgYmV0dGVyIHRvIGp1c3QKaGF2ZSAidWludDY0X3QgaW1tMSwgaW1tMjsiIGhlcmUuCgo+ICsK PiArICAgIC8qIFNoYWRvdyBjb3B5IG9mIHJlZ2lzdGVyIHN0YXRlLiBDb21taXR0ZWQgb24gc3Vj Y2Vzc2Z1bCBlbXVsYXRpb24uICovCj4gKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyByZWdzOwo+ ICt9Owo+ICsKPiArLyogSGVscGVyIGRlZmluaXRpb25zLiAqLwo+ICsjZGVmaW5lIG9wX2J5dGVz IChzdGF0ZS0+b3BfYnl0ZXMpCj4gKyNkZWZpbmUgYWRfYnl0ZXMgKHN0YXRlLT5hZF9ieXRlcykK PiArI2RlZmluZSBleHQgKHN0YXRlLT5leHQpCj4gKyNkZWZpbmUgbW9kcm0gKHN0YXRlLT5tb2Ry bSkKPiArI2RlZmluZSBtb2RybV9tb2QgKHN0YXRlLT5tb2RybV9tb2QpCj4gKyNkZWZpbmUgbW9k cm1fcmVnIChzdGF0ZS0+bW9kcm1fcmVnKQo+ICsjZGVmaW5lIG1vZHJtX3JtIChzdGF0ZS0+bW9k cm1fcm0pCj4gKyNkZWZpbmUgcmV4X3ByZWZpeCAoc3RhdGUtPnJleF9wcmVmaXgpCj4gKyNkZWZp bmUgbG9ja19wcmVmaXggKHN0YXRlLT5sb2NrX3ByZWZpeCkKPiArI2RlZmluZSB2ZXggKHN0YXRl LT52ZXgpCj4gKyNkZWZpbmUgb3ZlcnJpZGVfc2VnIChzdGF0ZS0+b3ZlcnJpZGVfc2VnKQo+ICsj ZGVmaW5lIGVhIChzdGF0ZS0+ZWEpCj4gKyNkZWZpbmUgX3JlZ3MgKHN0YXRlLT5yZWdzKQo+ICsK PiArc3RhdGljIGludAo+ICt4ODZfZGVjb2RlKAo+ICsgICAgc3RydWN0IHg4Nl9lbXVsYXRlX3N0 YXRlICpzdGF0ZSwKPiArICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0LAo+ICsgICAg Y29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyAgKm9wcykKPiArewo+ICsgICAgdWludDhfdCBi LCBkLCBzaWIsIHNpYl9pbmRleCwgc2liX2Jhc2U7Cj4gKyAgICB1bnNpZ25lZCBpbnQgZGVmX29w X2J5dGVzLCBkZWZfYWRfYnl0ZXM7Cj4gKyAgICBpbnQgcmMgPSBYODZFTVVMX09LQVk7Cj4gKwo+ ICsgICAgbWVtc2V0KHN0YXRlLCAwLCBzaXplb2YoKnN0YXRlKSk7Cj4gKyAgICBvdmVycmlkZV9z ZWcgPSAtMTsKPiArICAgIGVhLnR5cGUgPSBPUF9NRU07Cj4gKyAgICBlYS5tZW0uc2VnID0geDg2 X3NlZ19kczsKPiArICAgIGVhLnJlZyA9IFJFR19QT0lTT047Cj4gKyAgICBfcmVncyA9ICpjdHh0 LT5yZWdzOwoKVGhlIGhlbHBlciBkZWZpbml0aW9ucyBhcmUgZmluZSBmb3IgdGhlIHRyYW5zaXRp b24gcGVyaW9kLCBidXQgSSB3b3VsZApsaWtlIHRvIHNlZSB0aGVtIGV2ZW50dWFsbHkgcmVtb3Zl ZCB0byBoZWxwIHJlZHVjZSB0aGUgcXVhbnRpdHkgb2YKaW5mb3JtYXRpb24gaGlkaW5nIGluIHRo aXMgYXJlYS4gIFBsZWFzZSBkb24ndCBpbnRyb2R1Y2UgbmV3IHVzZXMuCgo+ICAKPiAgICAgIGN0 eHQtPnJldGlyZS5ieXRlID0gMDsKPiAgCj4gQEAgLTE4MDAsNyArMTgzMyw3IEBAIHg4Nl9lbXVs YXRlKAo+ICAgICAgICAgICAgICAgICAgICAgIGQgPSAoZCAmIH4oRHN0TWFzayB8IFNyY01hc2sp KSB8IERzdE1lbSB8IFNyY1JlZyB8IE1vdjsKPiAgICAgICAgICAgICAgICAgIGJyZWFrOwo+ICAg ICAgICAgICAgICBkZWZhdWx0OiAvKiBVbnRpbCBpdCBpcyB3b3J0aCBtYWtpbmcgdGhpcyB0YWJs ZSBiYXNlZCAuLi4gKi8KPiAtICAgICAgICAgICAgICAgIGdvdG8gY2Fubm90X2VtdWxhdGU7Cj4g KyAgICAgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Cj4gICAgICAgICAg ICAgIH0KPiAgICAgICAgICAgICAgYnJlYWs7Cj4gIAo+IEBAIC0xOTMyLDYgKzE5NjUsNjEgQEAg eDg2X2VtdWxhdGUoCj4gICAgICBpZiAoIG92ZXJyaWRlX3NlZyAhPSAtMSAmJiBlYS50eXBlID09 IE9QX01FTSApCj4gICAgICAgICAgZWEubWVtLnNlZyA9IG92ZXJyaWRlX3NlZzsKPiAgCj4gKyAg ICAvKiBGZXRjaCB0aGUgaW1tZWRpYXRlIG9wZXJhbmQsIGlmIHByZXNlbnQuICovCj4gKyAgICBz d2l0Y2ggKCBkICYgU3JjTWFzayApCj4gKyAgICB7Cj4gKyAgICAgICAgdW5zaWduZWQgaW50IGJ5 dGVzOwo+ICsKPiArICAgIGNhc2UgU3JjSW1tOgo+ICsgICAgICAgIGlmICggIShkICYgQnl0ZU9w KSApCj4gKyAgICAgICAgICAgIGJ5dGVzID0gb3BfYnl0ZXMgIT0gOCA/IG9wX2J5dGVzIDogNDsK PiArICAgICAgICBlbHNlCj4gKyAgICAgICAgewo+ICsgICAgY2FzZSBTcmNJbW1CeXRlOgo+ICsg ICAgICAgICAgICBieXRlcyA9IDE7Cj4gKyAgICAgICAgfQo+ICsgICAgICAgIC8qIE5CLiBJbW1l ZGlhdGVzIGFyZSBzaWduLWV4dGVuZGVkIGFzIG5lY2Vzc2FyeS4gKi8KPiArICAgICAgICBzd2l0 Y2ggKCBieXRlcyApCj4gKyAgICAgICAgewo+ICsgICAgICAgIGNhc2UgMTogaW1tMSA9IGluc25f ZmV0Y2hfdHlwZShpbnQ4X3QpOyAgYnJlYWs7Cj4gKyAgICAgICAgY2FzZSAyOiBpbW0xID0gaW5z bl9mZXRjaF90eXBlKGludDE2X3QpOyBicmVhazsKPiArICAgICAgICBjYXNlIDQ6IGltbTEgPSBp bnNuX2ZldGNoX3R5cGUoaW50MzJfdCk7IGJyZWFrOwo+ICsgICAgICAgIH0KPiArICAgICAgICBi cmVhazsKPiArICAgIGNhc2UgU3JjSW1tMTY6Cj4gKyAgICAgICAgaW1tMSA9IGluc25fZmV0Y2hf dHlwZSh1aW50MTZfdCk7Cj4gKyAgICAgICAgYnJlYWs7Cj4gKyAgICB9Cj4gKwo+ICsgICAgc3Rh dGUtPm9wY29kZSA9IGI7Cj4gKyAgICBzdGF0ZS0+ZGVzYyA9IGQ7Cj4gKwo+ICsgZG9uZToKPiAr ICAgIHJldHVybiByYzsKPiArfQo+ICsKPiAraW50Cj4gK3g4Nl9lbXVsYXRlKAo+ICsgICAgc3Ry dWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQsCj4gKyAgICBjb25zdCBzdHJ1Y3QgeDg2X2VtdWxh dGVfb3BzICpvcHMpCj4gK3sKPiArICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9zdGF0ZSBzdGF0ZTsK PiArICAgIGludCByYzsKPiArICAgIHVpbnQ4X3QgYiwgZDsKPiArICAgIHN0cnVjdCBvcGVyYW5k IHNyYyA9IHsgLnJlZyA9IFJFR19QT0lTT04gfTsKPiArICAgIHN0cnVjdCBvcGVyYW5kIGRzdCA9 IHsgLnJlZyA9IFJFR19QT0lTT04gfTsKPiArICAgIGVudW0geDg2X3N3aW50X3R5cGUgc3dpbnRf dHlwZTsKPiArICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9zdHViIHN0dWIgPSB7fTsKPiArICAgIERF Q0xBUkVfQUxJR05FRChtbXZhbF90LCBtbXZhbCk7Cj4gKwo+ICsgICAgcmMgPSB4ODZfZGVjb2Rl KCZzdGF0ZSwgY3R4dCwgb3BzKTsKPiArICAgIGlmICggcmMgIT0gWDg2RU1VTF9PS0FZKQoKU3Bh Y2UgYmVmb3JlIHRoZSBicmFja2V0IChhbHRob3VnaCBJIGd1ZXNzIHRoZXNlIGxpbmVzIGRyb3Ag b3V0IGJlZm9yZQp0aGUgZW5kIG9mIHRoZSBzZXJpZXMgYW55d2F5PykKCn5BbmRyZXcKCj4gKyAg ICAgICAgcmV0dXJuIHJjOwo+ICsKPiArICAgIGIgPSBzdGF0ZS5vcGNvZGU7Cj4gKyAgICBkID0g c3RhdGUuZGVzYzsKPiArI2RlZmluZSBzdGF0ZSAoJnN0YXRlKQo+ICsKPiAgICAgIC8qIERlY29k ZSBhbmQgZmV0Y2ggdGhlIHNvdXJjZSBvcGVyYW5kOiByZWdpc3RlciwgbWVtb3J5IG9yIGltbWVk aWF0ZS4gKi8KPiAgICAgIHN3aXRjaCAoIGQgJiBTcmNNYXNrICkKPiAgICAgIHsKPiBAQCAtMTk4 NywxOCArMjA3NSwxMiBAQCB4ODZfZW11bGF0ZSgKPiAgICAgICAgICAgICAgc3JjLmJ5dGVzID0g MTsKPiAgICAgICAgICB9Cj4gICAgICAgICAgc3JjLnR5cGUgID0gT1BfSU1NOwo+IC0gICAgICAg IC8qIE5CLiBJbW1lZGlhdGVzIGFyZSBzaWduLWV4dGVuZGVkIGFzIG5lY2Vzc2FyeS4gKi8KPiAt ICAgICAgICBzd2l0Y2ggKCBzcmMuYnl0ZXMgKQo+IC0gICAgICAgIHsKPiAtICAgICAgICBjYXNl IDE6IHNyYy52YWwgPSBpbnNuX2ZldGNoX3R5cGUoaW50OF90KTsgIGJyZWFrOwo+IC0gICAgICAg IGNhc2UgMjogc3JjLnZhbCA9IGluc25fZmV0Y2hfdHlwZShpbnQxNl90KTsgYnJlYWs7Cj4gLSAg ICAgICAgY2FzZSA0OiBzcmMudmFsID0gaW5zbl9mZXRjaF90eXBlKGludDMyX3QpOyBicmVhazsK PiAtICAgICAgICB9Cj4gKyAgICAgICAgc3JjLnZhbCAgID0gaW1tMTsKPiAgICAgICAgICBicmVh azsKPiAgICAgIGNhc2UgU3JjSW1tMTY6Cj4gICAgICAgICAgc3JjLnR5cGUgID0gT1BfSU1NOwo+ ICAgICAgICAgIHNyYy5ieXRlcyA9IDI7Cj4gLSAgICAgICAgc3JjLnZhbCAgID0gaW5zbl9mZXRj aF90eXBlKHVpbnQxNl90KTsKPiArICAgICAgICBzcmMudmFsICAgPSBpbW0xOwo+ICAgICAgICAg IGJyZWFrOwo+ICAgICAgfQo+ICAKPiBAQCAtMzg5Miw4ICszOTc0LDggQEAgeDg2X2VtdWxhdGUo Cj4gICAgICAvKiBDb21taXQgc2hhZG93IHJlZ2lzdGVyIHN0YXRlLiAqLwo+ICAgICAgX3JlZ3Mu ZWZsYWdzICY9IH5FRkxHX1JGOwo+ICAKPiAtICAgIC8qIFplcm8gdGhlIHVwcGVyIDMyIGJpdHMg b2YgJXJpcCBpZiBub3QgaW4gbG9uZyBtb2RlLiAqLwo+IC0gICAgaWYgKCBkZWZfYWRfYnl0ZXMg PCBzaXplb2YoX3JlZ3MuZWlwKSApCj4gKyAgICAvKiBaZXJvIHRoZSB1cHBlciAzMiBiaXRzIG9m ICVyaXAgaWYgbm90IGluIDY0LWJpdCBtb2RlLiAqLwo+ICsgICAgaWYgKCAhbW9kZV82NGJpdCgp ICkKPiAgICAgICAgICBfcmVncy5laXAgPSAodWludDMyX3QpX3JlZ3MuZWlwOwo+ICAKPiAgICAg ICpjdHh0LT5yZWdzID0gX3JlZ3M7Cj4gQEAgLTQ4NzYsNCArNDk1OCwxOSBAQCB4ODZfZW11bGF0 ZSgKPiAgICAgIF9wdXRfZnB1KCk7Cj4gICAgICBwdXRfc3R1YihzdHViKTsKPiAgICAgIHJldHVy biBYODZFTVVMX1VOSEFORExFQUJMRTsKPiArI3VuZGVmIHN0YXRlCj4gIH0KPiArCj4gKyN1bmRl ZiBvcF9ieXRlcwo+ICsjdW5kZWYgYWRfYnl0ZXMKPiArI3VuZGVmIGV4dAo+ICsjdW5kZWYgbW9k cm0KPiArI3VuZGVmIG1vZHJtX21vZAo+ICsjdW5kZWYgbW9kcm1fcmVnCj4gKyN1bmRlZiBtb2Ry bV9ybQo+ICsjdW5kZWYgcmV4X3ByZWZpeAo+ICsjdW5kZWYgbG9ja19wcmVmaXgKPiArI3VuZGVm IHZleAo+ICsjdW5kZWYgb3ZlcnJpZGVfc2VnCj4gKyN1bmRlZiBlYQo+ICsjdW5kZWYgX3JlZ3MK Pgo+CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVu LWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3Rz Lnhlbi5vcmcveGVuLWRldmVsCg==