From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Chen Subject: [PATCH v4] xen/arm32: Introduce alternative runtime patching Date: Fri, 31 Mar 2017 15:07:25 +0800 Message-ID: <1490944045-31578-1-git-send-email-Wei.Chen@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xen.org Cc: sstabellini@kernel.org, wei.chen@arm.com, steve.capper@arm.com, Kaly.Xin@arm.com, julien.grall@arm.com, nd@arm.com List-Id: xen-devel@lists.xenproject.org VGhpcyBwYXRjaCBpcyBiYXNlZCBvbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgQVJNNjQsIGl0IGlu dHJvZHVjZXMKYWx0ZXJuYXRpdmUgcnVudGltZSBwYXRjaGluZyB0byBBUk0zMi4gVGhpcyBhbGxv d3MgdG8gcGF0Y2ggYXNzZW1ibHkKaW5zdHJ1Y3Rpb24gYXQgcnVudGltZSB0byBlaXRoZXIgZml4 IGhhcmR3YXJlIGJ1Z3Mgb3Igb3B0aW1pemUgZm9yCmNlcnRhaW4gaGFyZHdhcmUgZmVhdHVyZXMg b24gQVJNMzIgcGxhdGZvcm0uCgpYZW4gaHlwZXJ2aXNvciBpcyB1c2luZyBBUk0gZXhlY3V0aW9u IHN0YXRlIG9ubHkgb24gQVJNMzIgcGxhdGZvcm0sClRodW1iIGlzIG5vdCB1c2VkLiBTbywgdGhl IFRodW1iIG9ubHkgYnJhbmNoIGluc3RydWN0aW9ucyAoQ0JaLCBDQk5aLApUQkIgYW5kIFRCSCkg YXJlIG5vdCBjb25zaWRlcmVkIGluIGFsdGVybmF0aXZlcy4KClRoZSBsZWZ0IEFSTTMyIGJyYW5j aCBpbnN0cnVjdGlvbnMgYXJlIEJYLCBCTFgsIEJMIGFuZCBCLiBUaGUKaW5zdHJ1Y3Rpb24gQlgg aXMgdGFraW5nIGEgcmVnaXN0ZXIgaW4gcGFyYW1ldGVyLCBzbyB3ZSBkb24ndCBuZWVkIHRvCnJl d3JpdGUgaXQuIFRoZSBpbnN0cnVjdGlvbnMgQkxYLCBCTCBhbmQgQiBhcmUgdXNpbmcgdGhlIHNp bWlsYXIKZW5jb2RpbmcgZm9yIHRoZSBvZmZzZXQgYW5kIHdpbGwgYXZvaWQgc3BlY2lmaWMgY2Fz ZSB3aGVuIGV4dHJhY3RpbmcKYW5kIHVwZGF0aW5nIHRoZSBvZmZzZXQuCgpJbiB0aGlzIHBhdGNo LCB3ZSBpbmNsdWRlIGFsdGVybmF0aXZlLmggaGVhZGVyIGZpbGUgdG8gbGl2ZXBhdGNoLmMKZGly ZWN0bHkgZm9yIEFSTTMyIGNvbXBpbGF0aW9uIGlzc3Vlcy4gV2hlbiB0aGUgYWx0ZXJuYXRpdmUg cGF0Y2hpbmcKY29uZmlnIGlzIGVuYWJsZWQsIHRoZSBsaXZlcGF0Y2guYyB3aWxsIHVzZSB0aGUg YWx0ZXJuYXRpdmUgZnVuY3Rpb25zLgpJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBpbmNsdWRlIHRo ZSBhbHRlcm5hdGl2ZSBoZWFkZXIgZmlsZSB0byB0aGlzCmZpbGUuIEJ1dCBmb3IgQVJNNjQsIGl0 IGRvZXMgbm90IGluY2x1ZGUgdGhpcyBoZWFkZXIgZmlsZSBkaXJlY3RseS4KSXQgaW5jbHVkZXMg dGhpcyBoZWFkZXIgZmlsZSBpbmRpcmVjdGx5IHRocm91Z2g6CnNjaGVkLmgtPmRvbWFpbi5oLT5w YWdlLmgtPmFsdGVybmF0aXZlLmguCkJ1dCwgdW5mb3J0dW5hdGVseSwgdGhlIHBhZ2UuaCBvZiBB Uk0zMiBkb2Vzbid0IGluY2x1ZGUgYWx0ZXJuYXRpdmUuaCwKYW5kIHdlIGRvbid0IGhhdmUgdGhl IHJlYXNvbiB0byBpbmNsdWRlIGl0IHRvIEFSTTMyIHBhZ2UuaCBub3cuIFNvIHdlCmhhdmUgdG8g aW5jbHVkZSB0aGUgYWx0ZXJuYXRpdmUuaCBkaXJlY3RseSBpbiBsaXZlcGF0Y2guYy4KClNpZ25l ZC1vZmYtYnk6IFdlaSBDaGVuIDxXZWkuQ2hlbkBhcm0uY29tPgpSZXZpZXdlZC1ieTogS29ucmFk IFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgotLS0KdjMtPnY0OgoxLiBV c2Ugb3Blbi1jb2RlIHRvIHJlcGxhY2UgdGhlIG1hY3JvIF9fQUFSQ0gzMl9JTlNOX0ZVTkNTCjIu IEFkZCBjb2RlIGNvbW1lbnQgdG8gZXhwbGFpbiB3aHkgd2UgY2FuIHVzZSBvbmUgY2hlY2sgdG8g Y2F0Y2gKICAgYWxsIHRoZSBicmFuY2ggaW5zdHJ1Y3Rpb25zIHdlIHNob3VsZCBoYW5kbGUuCi0t LQogeGVuL2FyY2gvYXJtL0tjb25maWcgICAgICAgICAgICAgfCAgMiArLQogeGVuL2FyY2gvYXJt L2FybTMyL01ha2VmaWxlICAgICAgfCAgMSArCiB4ZW4vYXJjaC9hcm0vYXJtMzIvaW5zbi5jICAg ICAgICB8IDkxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9j b21tb24vbGl2ZXBhdGNoLmMgICAgICAgICAgIHwgIDEgKwogeGVuL2luY2x1ZGUvYXNtLWFybS9h cm0zMi9pbnNuLmggfCA3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiB4ZW4vaW5j bHVkZS9hc20tYXJtL2luc24uaCAgICAgICB8ICAyICsKIDYgZmlsZXMgY2hhbmdlZCwgMTY3IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9h cm0vYXJtMzIvaW5zbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2luY2x1ZGUvYXNtLWFybS9h cm0zMi9pbnNuLmgKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vS2NvbmZpZyBiL3hlbi9hcmNo L2FybS9LY29uZmlnCmluZGV4IDJlMDIzZDEuLjQzMTIzZTYgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNo L2FybS9LY29uZmlnCisrKyBiL3hlbi9hcmNoL2FybS9LY29uZmlnCkBAIC0xMiwxMSArMTIsMTEg QEAgY29uZmlnIEFSTV8zMgogY29uZmlnIEFSTV82NAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9u IDY0QklUCi0Jc2VsZWN0IEhBU19BTFRFUk5BVElWRQogCXNlbGVjdCBIQVNfR0lDVjMKIAogY29u ZmlnIEFSTQogCWRlZl9ib29sIHkKKwlzZWxlY3QgSEFTX0FMVEVSTkFUSVZFCiAJc2VsZWN0IEhB U19BUk1fSERMQ0QKIAlzZWxlY3QgSEFTX0RFVklDRV9UUkVFCiAJc2VsZWN0IEhBU19NRU1fQUND RVNTCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYXJtMzIvTWFrZWZpbGUgYi94ZW4vYXJjaC9h cm0vYXJtMzIvTWFrZWZpbGUKaW5kZXggNDM5NTY5My4uMGFjMjU0ZiAxMDA2NDQKLS0tIGEveGVu L2FyY2gvYXJtL2FybTMyL01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL2FybS9hcm0zMi9NYWtlZmls ZQpAQCAtNCw2ICs0LDcgQEAgb2JqLSQoRUFSTFlfUFJJTlRLKSArPSBkZWJ1Zy5vCiBvYmoteSAr PSBkb21jdGwubwogb2JqLXkgKz0gZG9tYWluLm8KIG9iai15ICs9IGVudHJ5Lm8KK29iai15ICs9 IGluc24ubwogb2JqLSQoQ09ORklHX0xJVkVQQVRDSCkgKz0gbGl2ZXBhdGNoLm8KIG9iai15ICs9 IHByb2MtdjcubyBwcm9jLWNheHgubwogb2JqLXkgKz0gc21wYm9vdC5vCmRpZmYgLS1naXQgYS94 ZW4vYXJjaC9hcm0vYXJtMzIvaW5zbi5jIGIveGVuL2FyY2gvYXJtL2FybTMyL2luc24uYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTVkYmM1Ci0tLSAvZGV2L251bGwKKysr IGIveGVuL2FyY2gvYXJtL2FybTMyL2luc24uYwpAQCAtMCwwICsxLDkxIEBACisvKgorICAqIENv cHlyaWdodCAoQykgMjAxNyBBUk0gTHRkLgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAq CisgICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgICovCisjaW5jbHVkZSA8eGVuL2xpYi5oPgorI2luY2x1ZGUgPHhlbi9iaXRvcHMu aD4KKyNpbmNsdWRlIDx4ZW4vc2l6ZXMuaD4KKyNpbmNsdWRlIDxhc20vaW5zbi5oPgorCisvKiBN YXNrIG9mIGJyYW5jaCBpbnN0cnVjdGlvbnMnIGltbWVkaWF0ZS4gKi8KKyNkZWZpbmUgQlJBTkNI X0lOU05fSU1NX01BU0sgICAgR0VOTUFTSygyMywgMCkKKy8qIFNoaWZ0IG9mIGJyYW5jaCBpbnN0 cnVjdGlvbnMnIGltbWVkaWF0ZS4gKi8KKyNkZWZpbmUgQlJBTkNIX0lOU05fSU1NX1NISUZUICAg MAorCitzdGF0aWMgdWludDMyX3QgYnJhbmNoX2luc25fZW5jb2RlX2ltbWVkaWF0ZSh1aW50MzJf dCBpbnNuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICB1aW50MzJfdCBpbW07CisKKyAgICAvKgor ICAgICAqIEVuY29kZSB0aGUgb2Zmc2V0IHRvIGltbS4gQWxsIEFSTTMyIGluc3RydWN0aW9ucyBt dXN0IGJlIHdvcmQgYWxpZ25lZC4KKyAgICAgKiBUaGVyZWZvcmUgdGhlIG9mZnNldCB2YWx1ZSdz IGJpdHMgWzE6MF0gZXF1YWwgdG8gemVyby4KKyAgICAgKiAoc2VlIEFSTSBEREkgMDQwNkMuYyBB OC44LjE4L0E4LjguMjUgZm9yIG1vcmUgZW5jb2RlL2RlY29kZSBkZXRhaWxzCisgICAgICogYWJv dXQgQVJNMzIgYnJhbmNoIGluc3RydWN0aW9ucykKKyAgICAgKi8KKyAgICBpbW0gPSAoKG9mZnNl dCA+PiAyKSAmIEJSQU5DSF9JTlNOX0lNTV9NQVNLKSA8PCBCUkFOQ0hfSU5TTl9JTU1fU0hJRlQ7 CisKKyAgICAvKiBVcGRhdGUgdGhlIGltbWVkaWF0ZSBmaWVsZC4gKi8KKyAgICBpbnNuICY9IH4o QlJBTkNIX0lOU05fSU1NX01BU0sgPDwgQlJBTkNIX0lOU05fSU1NX1NISUZUKTsKKyAgICBpbnNu IHw9IGltbTsKKworICAgIHJldHVybiBpbnNuOworfQorCisvKgorICogRGVjb2RlIHRoZSBicmFu Y2ggb2Zmc2V0IGZyb20gYSBicmFuY2ggaW5zdHJ1Y3Rpb24ncyBpbW0gZmllbGQuCisgKiBUaGUg YnJhbmNoIG9mZnNldCBpcyBhIHNpZ25lZCB2YWx1ZSwgc28gaXQgY2FuIGJlIHVzZWQgdG8gY29t cHV0ZQorICogYSBuZXcgYnJhbmNoIHRhcmdldC4KKyAqLworaW50MzJfdCBhYXJjaDMyX2dldF9i cmFuY2hfb2Zmc2V0KHVpbnQzMl90IGluc24pCit7CisgICAgdWludDMyX3QgaW1tOworCisgICAg LyogUmV0cmlldmUgaW1tIGZyb20gYnJhbmNoIGluc3RydWN0aW9uLiAqLworICAgIGltbSA9ICgg aW5zbiA+PiBCUkFOQ0hfSU5TTl9JTU1fU0hJRlQgKSAmIEJSQU5DSF9JTlNOX0lNTV9NQVNLOwor CisgICAgLyoKKyAgICAgKiBDaGVjayB0aGUgaW1tIHNpZ25lZCBiaXQuIElmIHRoZSBpbW0gaXMg YSBuZWdhdGl2ZSB2YWx1ZSwgd2UKKyAgICAgKiBoYXZlIHRvIGV4dGVuZCB0aGUgaW1tIHRvIGEg ZnVsbCAzMiBiaXQgbmVnYXRpdmUgdmFsdWUuCisgICAgICovCisgICAgaWYgKCBpbW0gJiBCSVQo MjMpICkKKyAgICAgICAgaW1tIHw9IEdFTk1BU0soMzEsIDI0KTsKKworICAgIHJldHVybiAoaW50 MzJfdCkoaW1tIDw8IDIpOworfQorCisvKgorICogRW5jb2RlIHRoZSBkaXNwbGFjZW1lbnQgb2Yg YSBicmFuY2ggaW4gdGhlIGltbSBmaWVsZCBhbmQgcmV0dXJuIHRoZQorICogdXBkYXRlZCBpbnN0 cnVjdGlvbi4KKyAqLwordWludDMyX3QgYWFyY2gzMl9zZXRfYnJhbmNoX29mZnNldCh1aW50MzJf dCBpbnNuLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICAvKiBCL0JMIHN1cHBvcnQgWy0zMk0sIDMy TSkgb2Zmc2V0IChzZWUgQVJNIERESSAwNDA2Qy5jIEE0LjMpLiAqLworICAgIGlmICggb2Zmc2V0 IDwgLVNaXzMyTSB8fCBvZmZzZXQgPj0gU1pfMzJNICkKKyAgICB7CisgICAgICAgIHByaW50ayhY RU5MT0dfRVJSCisgICAgICAgICAgICAgICAiJXM6IG5ldyBicmFuY2ggb2Zmc2V0IG91dCBvZiBy YW5nZS5cbiIsIF9fZnVuY19fKTsKKyAgICAgICAgcmV0dXJuIEJVR19PUENPREU7CisgICAgfQor CisgICAgcmV0dXJuIGJyYW5jaF9pbnNuX2VuY29kZV9pbW1lZGlhdGUoaW5zbiwgb2Zmc2V0KTsK K30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtZmlsZS1zdHls ZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwK KyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2NvbW1vbi9saXZlcGF0Y2guYyBiL3hlbi9j b21tb24vbGl2ZXBhdGNoLmMKaW5kZXggMjQ2ZTY3My4uZjE0YmNiYyAxMDA2NDQKLS0tIGEveGVu L2NvbW1vbi9saXZlcGF0Y2guYworKysgYi94ZW4vY29tbW9uL2xpdmVwYXRjaC5jCkBAIC0yNSw2 ICsyNSw3IEBACiAjaW5jbHVkZSA8eGVuL2xpdmVwYXRjaC5oPgogI2luY2x1ZGUgPHhlbi9saXZl cGF0Y2hfcGF5bG9hZC5oPgogCisjaW5jbHVkZSA8YXNtL2FsdGVybmF0aXZlLmg+CiAjaW5jbHVk ZSA8YXNtL2V2ZW50Lmg+CiAKIC8qCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJtL2Fy bTMyL2luc24uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vYXJtMzIvaW5zbi5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MDBjYmYKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4v aW5jbHVkZS9hc20tYXJtL2FybTMyL2luc24uaApAQCAtMCwwICsxLDcxIEBACisvKgorICAqIENv cHlyaWdodCAoQykgMjAxNyBBUk0gTHRkLgorICAqCisgICogVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgKiBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24g MiBhcworICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICAq CisgICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICogR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAgKgorICAqIFlvdSBzaG91bGQgaGF2ZSByZWNl aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICogYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgICovCisjaWZuZGVmIF9fQVJDSF9BUk1fQVJNMzJfSU5TTgorI2RlZmluZSBfX0FS Q0hfQVJNX0FSTTMyX0lOU04KKworI2luY2x1ZGUgPHhlbi90eXBlcy5oPgorCitpbnQzMl90IGFh cmNoMzJfZ2V0X2JyYW5jaF9vZmZzZXQodWludDMyX3QgaW5zbik7Cit1aW50MzJfdCBhYXJjaDMy X3NldF9icmFuY2hfb2Zmc2V0KHVpbnQzMl90IGluc24sIGludDMyX3Qgb2Zmc2V0KTsKKworLyog V3JhcHBlciBmb3IgY29tbW9uIGNvZGUgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnNuX2lzX2Jy YW5jaF9pbW0odWludDMyX3QgaW5zbikKK3sKKyAgICAvKgorICAgICAqIFhlbiBpcyB1c2luZyBB Uk0gZXhlY3V0aW9uIHN0YXRlIG9ubHkgb24gQVJNMzIgcGxhdGZvcm0uIFNvLCB0aGUKKyAgICAg KiBUaHVtYiBicmFuY2ggaW5zdHJ1Y3Rpb25zIChDQlosIENCTlosIFRCQiBhbmQgVEJIKSB3aWxs IG5vdCBiZSB1c2VkCisgICAgICogaW4gWGVuLiBUaGUgbGVmdCBBUk0zMiBicmFuY2ggaW5zdHJ1 Y3Rpb25zIGFyZSBCWCwgQkxYLCBCTCBhbmQgQi4KKyAgICAgKiBCWCBpcyB1c2luZyByZWdpc3Rl ciBhcyBwYXJhbWV0ZXIsIHdlIGRvbid0IG5lZWQgdG8gcmV3cml0ZSBpdC4gU28sCisgICAgICog d2Ugb25seSBuZWVkIHRvIGNoZWNrIEJMWCwgQkwgYW5kIEIgZW5jb2RpbmdzIGluIHRoaXMgZnVu Y3Rpb24uCisgICAgICoKKyAgICAgKiBGcm9tIEFSTSBEREkgMDQwNkMuYyBTZWN0aW9uIEE4Ljgu MTggYW5kIEE4LjguMjUsIHdlIGNhbiBzZWUgdGhlc2UKKyAgICAgKiB0aHJlZSBicmFuY2ggaW5z dHJ1Y3Rpb25zJyBlbmNvZGluZ3M6CisgICAgICogLSBiICAgY2NjYzEwMTB4eHh4eHh4eHh4eHh4 eHh4eHh4eHh4eHgKKyAgICAgKiAtIGJsICBjY2NjMTAxMXh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4 eAorICAgICAqIC0gYmx4IDExMTExMDFIeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4CisgICAgICoK KyAgICAgKiBUaGUgSCBiaXQgb2YgYmx4IGNhbiBiZSAwIG9yIDEsIGl0IGRlcGVuZHMgb24gdGhl IEluc3RydWN0aW9uIFNldHMgb2YKKyAgICAgKiB0YXJnZXQgaW5zdHJ1Y3Rpb24uIFJlZ2FyZGxl c3MsIGlmIHdlIG1hc2sgdGhlIGNvbmRpdGlvbmFsIGJpdHMgYW5kCisgICAgICogYml0IDI0IChI IGJpdCBvZiBibHgpLCB3ZSBjYW4gc2VlIGFsbCBhYm92ZSBicmFuY2ggaW5zdHJ1Y3Rpb25zIGhh dmUKKyAgICAgKiB0aGUgc2FtZSB2YWx1ZSAweDBBMDAwMDAwLgorICAgICAqCisgICAgICogQW5k IGZyb20gQVJNIERESSAwNDA2Qy5jIFNlY3Rpb24gQTUuNyBUYWJsZSBBNS0yMywgd2UgY2FuIHNl ZSB0aGF0IHRoZQorICAgICAqIGJseCBpcyB0aGUgb25seSBvbmUgdW5jb25kaXRpb25hbCBpbnN0 cnVjdGlvbiBoYXMgdGhlIHNhbWUgdmFsdWUgYXMKKyAgICAgKiBjb25kaXRpb25hbCBicmFuY2gg aW5zdHJ1Y3Rpb25zLiBTbywgbWFzayB0aGUgY29uZGl0aW9uYWwgYml0cyB3aWxsIG5vdAorICAg ICAqIG1ha2Ugb3RoZXIgdW5jb25kaXRpb25hbCBpbnN0cnVjdGlvbiB0byBoaXQgdGhpcyBjaGVj ay4KKyAgICAgKi8KKyAgICByZXR1cm4gKCAoaW5zbiAmIDB4MEUwMDAwMDApID09IDB4MEEwMDAw MDAgKTsKK30KKworc3RhdGljIGlubGluZSBpbnQzMl90IGluc25fZ2V0X2JyYW5jaF9vZmZzZXQo dWludDMyX3QgaW5zbikKK3sKKyAgICByZXR1cm4gYWFyY2gzMl9nZXRfYnJhbmNoX29mZnNldChp bnNuKTsKK30KKworc3RhdGljIGlubGluZSB1aW50MzJfdCBpbnNuX3NldF9icmFuY2hfb2Zmc2V0 KHVpbnQzMl90IGluc24sIGludDMyX3Qgb2Zmc2V0KQoreworICAgIHJldHVybiBhYXJjaDMyX3Nl dF9icmFuY2hfb2Zmc2V0KGluc24sIG9mZnNldCk7Cit9CisKKyNlbmRpZiAvKiAhX19BUkNIX0FS TV9BUk0zMl9JTlNOICovCisvKgorICogTG9jYWwgdmFyaWFibGVzOgorICogbW9kZTogQworICog Yy1maWxlLXN0eWxlOiAiQlNEIgorICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJz LW1vZGU6IG5pbAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20tYXJt L2luc24uaCBiL3hlbi9pbmNsdWRlL2FzbS1hcm0vaW5zbi5oCmluZGV4IGEyMDVjZWIuLjM0ODkx NzkgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS1hcm0vaW5zbi5oCisrKyBiL3hlbi9pbmNs dWRlL2FzbS1hcm0vaW5zbi5oCkBAIC01LDYgKzUsOCBAQAogCiAjaWYgZGVmaW5lZChDT05GSUdf QVJNXzY0KQogIyBpbmNsdWRlIDxhc20vYXJtNjQvaW5zbi5oPgorI2VsaWYgZGVmaW5lZChDT05G SUdfQVJNXzMyKQorIyBpbmNsdWRlIDxhc20vYXJtMzIvaW5zbi5oPgogI2Vsc2UKICMgZXJyb3Ig InVua25vd24gQVJNIHZhcmlhbnQiCiAjZW5kaWYKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApY ZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==