From mboxrd@z Thu Jan 1 00:00:00 1970 From: Julien Grall Subject: [PATCH v6 1/7] xen/arm: Introduce alternative runtime patching Date: Wed, 27 Jul 2016 17:37:05 +0100 Message-ID: <1469637431-1069-2-git-send-email-julien.grall@arm.com> References: <1469637431-1069-1-git-send-email-julien.grall@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1469637431-1069-1-git-send-email-julien.grall@arm.com> 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: Julien Grall , sstabellini@kernel.org List-Id: xen-devel@lists.xenproject.org U29tZSBvZiB0aGUgcHJvY2Vzc29yIGVycmF0dW0gd2lsbCByZXF1aXJlIHRvIG1vZGlmeSBjb2Rl IHNlcXVlbmNlLgpBcyB0aG9zZSBtb2RpZmljYXRpb25zIG1heSBpbXBhY3QgdGhlIHBlcmZvcm1h bmNlLCB0aGV5IHNob3VsZCBvbmx5CmJlIGVuYWJsZWQgb24gYWZmZWN0ZWQgY29yZXMuIEZ1cnRo ZXJtb3JlLCBYZW4gbWF5IGFsc28gd2FudCB0byB0YWtlCmFkdmFudGFnZSBvZiBuZXcgaGFyZHdh cmUgZmVhdHVyZXMgY29taW5nIHVwIHdpdGggdjguMSBhbmQgdjguMi4KClRoaXMgcGF0Y2ggYWRk cyBhbiBpbmZyYXN0cnVjdHVyZSB0byBwYXRjaCBYZW4gZHVyaW5nIGJvb3QgdGltZQpkZXBlbmRp bmcgb24gdGhlICJmZWF0dXJlcyIgYXZhaWxhYmxlIG9uIHRoZSBwbGF0Zm9ybS4KClRoaXMgY29k ZSBpcyBiYXNlZCBvbiB0aGUgZmlsZSBhcmNoL2FybTY0L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGlu CkxpbnV4IDQuNi1yYzMuIEFueSByZWZlcmVuY2VzIHRvIGFybTY0IGhhdmUgYmVlbiBkcm9wcGVk IHRvIG1ha2UgdGhlCmNvZGUgYXMgZ2VuZXJpYyBhcyBwb3NzaWJsZS4KCldoZW4gWGVuIGlzIGNy ZWF0aW5nIHRoZSBwYWdlIHRhYmxlcywgYWxsIHRoZSBleGVjdXRhYmxlIHNlY3Rpb25zCigudGV4 dCBhbmQgLmluaXQudGV4dCkgd2lsbCBiZSBtYXJrZWQgcmVhZC1vbmx5IGFuZCB0aGVuIGVuZm9y Y2VkIGJ5CnNldHRpbmcgU0NUTFIuV05YLgoKV2hpbHN0IGl0IG1pZ2h0IGJlIHBvc3NpYmxlIHRv IG1hcmsgdGhvc2UgZW50cmllcyByZWFkLW9ubHkgYWZ0ZXIKWGVuIGhhcyBiZWVuIHBhdGNoZWQs IHdlIHdvdWxkIG5lZWQgZXh0cmEgY2FyZSB0byBhdm9pZCBwb3NzaWJsZQpUTEJzIGNvbmZsaWN0 cyAoc2VlIEQ0LTE3MzIgaW4gQVJNIERESSAwNDg3QS5pKSBhcyBhbGwKcGh5c2ljYWwgQ1BVcyB3 aWxsIGJlIHJ1bm5pbmcuCgpBbGwgdGhlIHBoeXNpY2FsIENQVXMgaGF2ZSB0byBiZSBicm91Z2h0 IHVwIGJlZm9yZSBwYXRjaGluZyBYZW4gYmVjYXVzZQplYWNoIGNvcmVzIG1heSBoYXZlIGRpZmZl cmVudCBlcnJhdGEvZmVhdHVyZXMgd2hpY2ggcmVxdWlyZSBjb2RlCnBhdGNoaW5nLiBUaGUgb25s eSB3YXkgdG8gZmluZCB0aGVtIGlzIHRvIHByb2JlIHN5c3RlbSByZWdpc3RlcnMgb24KZWFjaCBD UFUuCgpUbyBhdm9pZCBleHRyYSBjb21wbGV4aXR5LCBpdCBpcyBwb3NzaWJsZSB0byBjcmVhdGUg YSB0ZW1wb3JhcnkKd3JpdGVhYmxlIG1hcHBpbmcgd2l0aCB2bWFwLiBUaGlzIG1hcHBpbmcgd2ls bCBiZSB1c2VkIHRvIHdyaXRlIHRoZQpuZXcgaW5zdHJ1Y3Rpb25zLgoKTGFzdGx5LCBydW50aW1l IHBhdGNoaW5nIGlzIGN1cnJlbnRseSBub3QgbmVjZXNzYXJ5IGZvciBBUk0zMi4gU28gdGhlCmNv ZGUgaXMgb25seSBlbmFibGVkIGZvciBBUk02NC4KCk5vdGUgdGhhdCB0aGUgaGVhZGVyIGFzbS1h cm0vYWx0ZXJuYXRpdmUuaCBpcyBhIHZlcmJhdGltIGNvcHkgZm9yIHRoZQpMaW51eCBvbmUgKGFy Y2gvYXJtNjQvaW5jbHVkZS9hc20vYWx0ZXJuYXRpdmUuaCkuIEl0IG1heSBjb250YWluCmlubmFj dXJhdGUgY29tbWVudHMsIGJ1dCBJIGRpZCBub3QgdG91Y2ggdGhlbSBmb3Igbm93LgoKU2lnbmVk LW9mZi1ieTogSnVsaWVuIEdyYWxsIDxqdWxpZW4uZ3JhbGxAYXJtLmNvbT4KCi0tLQogICAgQ2hh bmdlcyBpbiB2NjoKICAgICAgICAtIFVwZGF0ZSBzb21lIG1lc3NhZ2VzCiAgICAgICAgLSBDb25z dGlmeSBzb21lIHN0cnVjdHVyZQogICAgICAgIC0gQWRkIGFuIEFTU0VSVCBpbiBhcHBseV9hbHRl cm5hdGl2ZXMKICAgICAgICAtIE1lbnRpb24gaW4gdGhlIGNvbW1pdCBtZXNzYWdlIHRoYXQgYWx0 ZXJuYXRpdmUgaXMgYSB2ZXJiYXRpbQogICAgICAgIGNvcHkgb2YgdGhlIExpbnV4IGhlYWRlcnMu CgogICAgQ2hhbmdlcyBpbiB2NToKICAgICAgICAtIFJlYmFzZSBvbiB0aGUgbGF0ZXN0IHN0YWdp bmcKCiAgICBDaGFuZ2VzIGluIHY0OgogICAgICAgIC0gRml4IGJ1aWxkIHdoZW4gQUxURVJOQVRJ VkUgaXMgbm90IGVuYWJsZWQKICAgICAgICAtIEZpeCB0eXBvCiAgICAgICAgLSBNb3ZlIC5hbHRp bnN0cnVjdGlvbnMgaW4gaW5pdC5kYXRhCgogICAgQ2hhbmdlcyBpbiB2MzoKICAgICAgICAtIC5h bHRpbnN0cl9yZXBsYWNlbWVudCBzaG91bGQgbGl2ZSBpbiBpbml0LnRleHQKICAgICAgICAtIEFk ZCBhIGNvbW1lbnQgdG8gZXhwbGFpbiB3aGVuIGFwcGx5X2FsdGVybmF0aXZlc19hbGwgc2hvdWxk IGJlCiAgICAgICAgY2FsbGVkLgoKICAgIENoYW5nZXMgaW4gdjI6CiAgICAgICAgLSBVc2UgaGFy ZCB0YWJzIGluIEtjb25maWcKICAgICAgICAtIFVwZGF0ZSB0aGUgY29weXJpZ2h0IHllYXIKICAg ICAgICAtIFVwZGF0ZSB0aGUgY29tbWl0IG1lc3NhZ2UgdG8gZXhwbGFpbiB0aGUgZXh0cmEgbWFw cGluZwotLS0KIHhlbi9hcmNoL2FybS9LY29uZmlnICAgICAgICAgICAgICB8ICAgNSArCiB4ZW4v YXJjaC9hcm0vTWFrZWZpbGUgICAgICAgICAgICAgfCAgIDEgKwogeGVuL2FyY2gvYXJtL2FsdGVy bmF0aXZlLmMgICAgICAgIHwgMjI0ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiB4ZW4vYXJjaC9hcm0vc2V0dXAuYyAgICAgICAgICAgICAgfCAgIDcgKysKIHhlbi9hcmNo L2FybS94ZW4ubGRzLlMgICAgICAgICAgICB8ICAgOSArKwogeGVuL2luY2x1ZGUvYXNtLWFybS9h bHRlcm5hdGl2ZS5oIHwgMTY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9pbmNs dWRlL2FzbS1hcm0vYXJtNjQvaW5zbi5oICB8ICAxNiArKysKIDcgZmlsZXMgY2hhbmdlZCwgNDI3 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC9hcm0vYWx0ZXJuYXRp dmUuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9pbmNsdWRlL2FzbS1hcm0vYWx0ZXJuYXRpdmUu aAoKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL2FybS9LY29uZmlnIGIveGVuL2FyY2gvYXJtL0tjb25m aWcKaW5kZXggNjIzMWNkNS4uMDE0MWJkOSAxMDA2NDQKLS0tIGEveGVuL2FyY2gvYXJtL0tjb25m aWcKKysrIGIveGVuL2FyY2gvYXJtL0tjb25maWcKQEAgLTE0LDYgKzE0LDcgQEAgY29uZmlnIEFS TV82NAogCWRlZl9ib29sIHkKIAlkZXBlbmRzIG9uIDY0QklUCiAJc2VsZWN0IEhBU19HSUNWMwor CXNlbGVjdCBBTFRFUk5BVElWRQogCiBjb25maWcgQVJNCiAJZGVmX2Jvb2wgeQpAQCAtNDYsNiAr NDcsMTAgQEAgY29uZmlnIEFDUEkKIGNvbmZpZyBIQVNfR0lDVjMKIAlib29sCiAKKyMgU2VsZWN0 IEFMVEVSTkFUSVZFIGlmIHRoZSBhcmNoaXRlY3R1cmUgc3VwcG9ydHMgcnVudGltZSBwYXRjaGlu ZworY29uZmlnIEFMVEVSTkFUSVZFCisJYm9vbAorCiBlbmRtZW51CiAKIHNvdXJjZSAiY29tbW9u L0tjb25maWciCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vTWFrZWZpbGUgYi94ZW4vYXJjaC9h cm0vTWFrZWZpbGUKaW5kZXggYjI2NGVkNC4uNzRiZDdiOCAxMDA2NDQKLS0tIGEveGVuL2FyY2gv YXJtL01ha2VmaWxlCisrKyBiL3hlbi9hcmNoL2FybS9NYWtlZmlsZQpAQCAtNCw2ICs0LDcgQEAg c3ViZGlyLXkgKz0gcGxhdGZvcm1zCiBzdWJkaXItJChDT05GSUdfQVJNXzY0KSArPSBlZmkKIHN1 YmRpci0kKENPTkZJR19BQ1BJKSArPSBhY3BpCiAKK29iai0kKENPTkZJR19BTFRFUk5BVElWRSkg Kz0gYWx0ZXJuYXRpdmUubwogb2JqLXkgKz0gYm9vdGZkdC5vCiBvYmoteSArPSBjcHUubwogb2Jq LXkgKz0gY3B1ZmVhdHVyZS5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC9hcm0vYWx0ZXJuYXRpdmUu YyBiL3hlbi9hcmNoL2FybS9hbHRlcm5hdGl2ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAuLjhlZTVhMTEKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vYXJjaC9hcm0vYWx0ZXJu YXRpdmUuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIGFsdGVybmF0aXZlIHJ1bnRpbWUgcGF0 Y2hpbmcKKyAqIGluc3BpcmVkIGJ5IHRoZSB4ODYgdmVyc2lvbgorICoKKyAqIENvcHlyaWdodCAo QykgMjAxNC0yMDE2IEFSTSBMdGQuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisg KiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKiBUaGlz IHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3Jh bS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisj aW5jbHVkZSA8eGVuL2NvbmZpZy5oPgorI2luY2x1ZGUgPHhlbi9pbml0Lmg+CisjaW5jbHVkZSA8 eGVuL3R5cGVzLmg+CisjaW5jbHVkZSA8eGVuL2tlcm5lbC5oPgorI2luY2x1ZGUgPHhlbi9tbS5o PgorI2luY2x1ZGUgPHhlbi92bWFwLmg+CisjaW5jbHVkZSA8eGVuL3NtcC5oPgorI2luY2x1ZGUg PHhlbi9zdG9wX21hY2hpbmUuaD4KKyNpbmNsdWRlIDxhc20vYWx0ZXJuYXRpdmUuaD4KKyNpbmNs dWRlIDxhc20vYXRvbWljLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorI2luY2x1ZGUg PGFzbS9jcHVmZWF0dXJlLmg+CisjaW5jbHVkZSA8YXNtL2luc24uaD4KKyNpbmNsdWRlIDxhc20v cGFnZS5oPgorCisjZGVmaW5lIF9fQUxUX1BUUihhLGYpICAgICAgKHUzMiAqKSgodm9pZCAqKSYo YSktPmYgKyAoYSktPmYpCisjZGVmaW5lIEFMVF9PUklHX1BUUihhKSAgICAgX19BTFRfUFRSKGEs IG9yaWdfb2Zmc2V0KQorI2RlZmluZSBBTFRfUkVQTF9QVFIoYSkgICAgIF9fQUxUX1BUUihhLCBh bHRfb2Zmc2V0KQorCitleHRlcm4gY29uc3Qgc3RydWN0IGFsdF9pbnN0ciBfX2FsdF9pbnN0cnVj dGlvbnNbXSwgX19hbHRfaW5zdHJ1Y3Rpb25zX2VuZFtdOworCitzdHJ1Y3QgYWx0X3JlZ2lvbiB7 CisgICAgY29uc3Qgc3RydWN0IGFsdF9pbnN0ciAqYmVnaW47CisgICAgY29uc3Qgc3RydWN0IGFs dF9pbnN0ciAqZW5kOworfTsKKworLyoKKyAqIENoZWNrIGlmIHRoZSB0YXJnZXQgUEMgaXMgd2l0 aGluIGFuIGFsdGVybmF0aXZlIGJsb2NrLgorICovCitzdGF0aWMgYm9vbF90IGJyYW5jaF9pbnNu X3JlcXVpcmVzX3VwZGF0ZShjb25zdCBzdHJ1Y3QgYWx0X2luc3RyICphbHQsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBjKQoreworICAg IHVuc2lnbmVkIGxvbmcgcmVwbHB0cjsKKworICAgIGlmICggaXNfYWN0aXZlX2tlcm5lbF90ZXh0 KHBjKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgcmVwbHB0ciA9ICh1bnNpZ25lZCBsb25n KUFMVF9SRVBMX1BUUihhbHQpOworICAgIGlmICggcGMgPj0gcmVwbHB0ciAmJiBwYyA8PSAocmVw bHB0ciArIGFsdC0+YWx0X2xlbikgKQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qCisgICAg ICogQnJhbmNoaW5nIGludG8gKmFub3RoZXIqIGFsdGVybmF0ZSBzZXF1ZW5jZSBpcyBkb29tZWQs IGFuZAorICAgICAqIHdlJ3JlIG5vdCBldmVuIHRyeWluZyB0byBmaXggaXQgdXAuCisgICAgICov CisgICAgQlVHKCk7Cit9CisKK3N0YXRpYyB1MzIgZ2V0X2FsdF9pbnNuKGNvbnN0IHN0cnVjdCBh bHRfaW5zdHIgKmFsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHUzMiAqaW5zbnB0 ciwgY29uc3QgdTMyICphbHRpbnNucHRyKQoreworICAgIHUzMiBpbnNuOworCisgICAgaW5zbiA9 IGxlMzJfdG9fY3B1KCphbHRpbnNucHRyKTsKKworICAgIGlmICggaW5zbl9pc19icmFuY2hfaW1t KGluc24pICkKKyAgICB7CisgICAgICAgIHMzMiBvZmZzZXQgPSBpbnNuX2dldF9icmFuY2hfb2Zm c2V0KGluc24pOworICAgICAgICB1bnNpZ25lZCBsb25nIHRhcmdldDsKKworICAgICAgICB0YXJn ZXQgPSAodW5zaWduZWQgbG9uZylhbHRpbnNucHRyICsgb2Zmc2V0OworCisgICAgICAgIC8qCisg ICAgICAgICAqIElmIHdlJ3JlIGJyYW5jaGluZyBpbnNpZGUgdGhlIGFsdGVybmF0ZSBzZXF1ZW5j ZSwKKyAgICAgICAgICogZG8gbm90IHJld3JpdGUgdGhlIGluc3RydWN0aW9uLCBhcyBpdCBpcyBh bHJlYWR5CisgICAgICAgICAqIGNvcnJlY3QuIE90aGVyd2lzZSwgZ2VuZXJhdGUgdGhlIG5ldyBp bnN0cnVjdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGlmICggYnJhbmNoX2luc25fcmVxdWly ZXNfdXBkYXRlKGFsdCwgdGFyZ2V0KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCA9 IHRhcmdldCAtICh1bnNpZ25lZCBsb25nKWluc25wdHI7CisgICAgICAgICAgICBpbnNuID0gaW5z bl9zZXRfYnJhbmNoX29mZnNldChpbnNuLCBvZmZzZXQpOworICAgICAgICB9CisgICAgfQorCisg ICAgcmV0dXJuIGluc247Cit9CisKK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXMoY29u c3Qgc3RydWN0IGFsdF9yZWdpb24gKnJlZ2lvbikKK3sKKyAgICBjb25zdCBzdHJ1Y3QgYWx0X2lu c3RyICphbHQ7CisgICAgY29uc3QgdTMyICpvcmlncHRyLCAqcmVwbHB0cjsKKyAgICB1MzIgKndy aXRlcHRyLCAqd3JpdGVtYXA7CisgICAgbWZuX3QgdGV4dF9tZm4gPSBfbWZuKHZpcnRfdG9fbWZu KF9zdGV4dCkpOworICAgIHVuc2lnbmVkIGludCB0ZXh0X29yZGVyID0gZ2V0X29yZGVyX2Zyb21f Ynl0ZXMoX2VuZCAtIF9zdGFydCk7CisKKyAgICBwcmludGsoWEVOTE9HX0lORk8gImFsdGVybmF0 aXZlczogUGF0Y2hpbmcga2VybmVsIGNvZGVcbiIpOworCisgICAgLyoKKyAgICAgKiBUaGUgdGV4 dCBzZWN0aW9uIGlzIHJlYWQtb25seS4gU28gcmUtbWFwIFhlbiB0byBiZSBhYmxlIHRvIHBhdGNo CisgICAgICogdGhlIGNvZGUuCisgICAgICovCisgICAgd3JpdGVtYXAgPSBfX3ZtYXAoJnRleHRf bWZuLCAxIDw8IHRleHRfb3JkZXIsIDEsIDEsIFBBR0VfSFlQRVJWSVNPUiwKKyAgICAgICAgICAg ICAgICAgICAgICBWTUFQX0RFRkFVTFQpOworICAgIGlmICggIXdyaXRlbWFwICkKKyAgICB7Cisg ICAgICAgIHByaW50ayhYRU5MT0dfRVJSICJhbHRlcm5hdGl2ZXM6IFVuYWJsZSB0byBtYXAgdGhl IHRleHQgc2VjdGlvbiAoc2l6ZSAldSlcbiIsCisgICAgICAgICAgICAgICAxIDw8IHRleHRfb3Jk ZXIpOworICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICB9CisKKyAgICBmb3IgKCBhbHQgPSBy ZWdpb24tPmJlZ2luOyBhbHQgPCByZWdpb24tPmVuZDsgYWx0KysgKQorICAgIHsKKyAgICAgICAg dTMyIGluc247CisgICAgICAgIGludCBpLCBucl9pbnN0OworCisgICAgICAgIGlmICggIWNwdXNf aGF2ZV9jYXAoYWx0LT5jcHVmZWF0dXJlKSApCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg ICAgICBCVUdfT04oYWx0LT5hbHRfbGVuICE9IGFsdC0+b3JpZ19sZW4pOworCisgICAgICAgIG9y aWdwdHIgPSBBTFRfT1JJR19QVFIoYWx0KTsKKyAgICAgICAgd3JpdGVwdHIgPSBvcmlncHRyIC0g KHUzMiAqKV9zdGFydCArIHdyaXRlbWFwOworICAgICAgICByZXBscHRyID0gQUxUX1JFUExfUFRS KGFsdCk7CisKKyAgICAgICAgbnJfaW5zdCA9IGFsdC0+YWx0X2xlbiAvIHNpemVvZihpbnNuKTsK KworICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2luc3Q7IGkrKyApCisgICAgICAgIHsKKyAg ICAgICAgICAgIGluc24gPSBnZXRfYWx0X2luc24oYWx0LCBvcmlncHRyICsgaSwgcmVwbHB0ciAr IGkpOworICAgICAgICAgICAgKih3cml0ZXB0ciArIGkpID0gY3B1X3RvX2xlMzIoaW5zbik7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBFbnN1cmUgdGhlIG5ldyBpbnN0cnVjdGlvbnMgcmVhY2hl ZCB0aGUgbWVtb3J5IGFuZCBudWtlICovCisgICAgICAgIGNsZWFuX2FuZF9pbnZhbGlkYXRlX2Rj YWNoZV92YV9yYW5nZSh3cml0ZXB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIChzaXplb2YgKCp3cml0ZXB0cikgKiBucl9pbnN0KSk7CisgICAgfQorCisg ICAgLyogTnVrZSB0aGUgaW5zdHJ1Y3Rpb24gY2FjaGUgKi8KKyAgICBpbnZhbGlkYXRlX2ljYWNo ZSgpOworCisgICAgdnVubWFwKHdyaXRlbWFwKTsKKworICAgIHJldHVybiAwOworfQorCisvKgor ICogV2UgbWlnaHQgYmUgcGF0Y2hpbmcgdGhlIHN0b3BfbWFjaGluZSBzdGF0ZSBtYWNoaW5lLCBz byBpbXBsZW1lbnQgYQorICogcmVhbGx5IHNpbXBsZSBwb2xsaW5nIHByb3RvY29sIGhlcmUuCisg Ki8KK3N0YXRpYyBpbnQgX19hcHBseV9hbHRlcm5hdGl2ZXNfbXVsdGlfc3RvcCh2b2lkICp1bnVz ZWQpCit7CisgICAgc3RhdGljIGludCBwYXRjaGVkID0gMDsKKyAgICBjb25zdCBzdHJ1Y3QgYWx0 X3JlZ2lvbiByZWdpb24gPSB7CisgICAgICAgIC5iZWdpbiA9IF9fYWx0X2luc3RydWN0aW9ucywK KyAgICAgICAgLmVuZCA9IF9fYWx0X2luc3RydWN0aW9uc19lbmQsCisgICAgfTsKKworICAgIC8q IFdlIGFsd2F5cyBoYXZlIGEgQ1BVIDAgYXQgdGhpcyBwb2ludCAoX19pbml0KSAqLworICAgIGlm ICggc21wX3Byb2Nlc3Nvcl9pZCgpICkKKyAgICB7CisgICAgICAgIHdoaWxlICggIXJlYWRfYXRv bWljKCZwYXRjaGVkKSApCisgICAgICAgICAgICBjcHVfcmVsYXgoKTsKKyAgICAgICAgaXNiKCk7 CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGludCByZXQ7CisKKyAgICAgICAgQlVH X09OKHBhdGNoZWQpOworICAgICAgICByZXQgPSBfX2FwcGx5X2FsdGVybmF0aXZlcygmcmVnaW9u KTsKKyAgICAgICAgLyogVGhlIHBhdGNoaW5nIGlzIG5vdCBleHBlY3RlZCB0byBmYWlsIGR1cmlu ZyBib290LiAqLworICAgICAgICBCVUdfT04ocmV0ICE9IDApOworCisgICAgICAgIC8qIEJhcnJp ZXJzIHByb3ZpZGVkIGJ5IHRoZSBjYWNoZSBmbHVzaGluZyAqLworICAgICAgICB3cml0ZV9hdG9t aWMoJnBhdGNoZWQsIDEpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogVGhp cyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZHVyaW5nIGJvb3QgYW5kIGJlZm9yZSBD UFUwIGp1bXAKKyAqIGludG8gdGhlIGlkbGVfbG9vcC4KKyAqLwordm9pZCBfX2luaXQgYXBwbHlf YWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQoreworICAgIGludCByZXQ7CisKKyAgICBBU1NFUlQoc3lz dGVtX3N0YXRlICE9IFNZU19TVEFURV9hY3RpdmUpOworCisJLyogYmV0dGVyIG5vdCB0cnkgY29k ZSBwYXRjaGluZyBvbiBhIGxpdmUgU01QIHN5c3RlbSAqLworICAgIHJldCA9IHN0b3BfbWFjaGlu ZV9ydW4oX19hcHBseV9hbHRlcm5hdGl2ZXNfbXVsdGlfc3RvcCwgTlVMTCwgTlJfQ1BVUyk7CisK KyAgICAvKiBzdG9wX21hY2hpbmVfcnVuIHNob3VsZCBuZXZlciBmYWlsIGF0IHRoaXMgc3RhZ2Ug b2YgdGhlIGJvb3QgKi8KKyAgICBCVUdfT04ocmV0KTsKK30KKworaW50IGFwcGx5X2FsdGVybmF0 aXZlcyh2b2lkICpzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBjb25zdCBzdHJ1Y3QgYWx0 X3JlZ2lvbiByZWdpb24gPSB7CisgICAgICAgIC5iZWdpbiA9IHN0YXJ0LAorICAgICAgICAuZW5k ID0gc3RhcnQgKyBsZW5ndGgsCisgICAgfTsKKworICAgIHJldHVybiBfX2FwcGx5X2FsdGVybmF0 aXZlcygmcmVnaW9uKTsKK30KKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMK KyAqIGMtZmlsZS1zdHlsZTogIkJTRCIKKyAqIGMtYmFzaWMtb2Zmc2V0OiA0CisgKiBpbmRlbnQt dGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3Nl dHVwLmMgYi94ZW4vYXJjaC9hcm0vc2V0dXAuYwppbmRleCA0NmNmNmRkLi45N2IzMjE0IDEwMDY0 NAotLS0gYS94ZW4vYXJjaC9hcm0vc2V0dXAuYworKysgYi94ZW4vYXJjaC9hcm0vc2V0dXAuYwpA QCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgPHhlbi92bWFwLmg+CiAjaW5jbHVkZSA8eGVuL2xp YmZkdC9saWJmZHQuaD4KICNpbmNsdWRlIDx4ZW4vYWNwaS5oPgorI2luY2x1ZGUgPGFzbS9hbHRl cm5hdGl2ZS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL2N1cnJlbnQu aD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KQEAgLTgzNSw2ICs4MzYsMTIgQEAgdm9pZCBfX2lu aXQgc3RhcnRfeGVuKHVuc2lnbmVkIGxvbmcgYm9vdF9waHlzX29mZnNldCwKIAogICAgIGRvX2lu aXRjYWxscygpOwogCisgICAgLyoKKyAgICAgKiBJdCBuZWVkcyB0byBiZSBjYWxsZWQgYWZ0ZXIg ZG9faW5pdGNhbGxzIHRvIGJlIGFibGUgdG8gdXNlCisgICAgICogc3RvcF9tYWNoaW5lICh0YXNr bGV0cyBpbml0aWFsaXplZCB2aWEgYW4gaW5pdGNhbGwpLgorICAgICAqLworICAgIGFwcGx5X2Fs dGVybmF0aXZlc19hbGwoKTsKKwogICAgIC8qIENyZWF0ZSBpbml0aWFsIGRvbWFpbiAwLiAqLwog ICAgIC8qIFRoZSB2R0lDIGZvciBET00wIGlzIGV4YWN0bHkgZW11bGF0aW5nIHRoZSBoYXJkd2Fy ZSBHSUMgKi8KICAgICBjb25maWcuZ2ljX3ZlcnNpb24gPSBYRU5fRE9NQ1RMX0NPTkZJR19HSUNf TkFUSVZFOwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gvYXJtL3hlbi5sZHMuUyBiL3hlbi9hcmNoL2Fy bS94ZW4ubGRzLlMKaW5kZXggYjE4YzljMi4uYjI0ZTkzYiAxMDA2NDQKLS0tIGEveGVuL2FyY2gv YXJtL3hlbi5sZHMuUworKysgYi94ZW4vYXJjaC9hcm0veGVuLmxkcy5TCkBAIC0xNTEsNiArMTUx LDE1IEBAIFNFQ1RJT05TCiAgICAgICAgKiguaW5pdGNhbGwxLmluaXQpCiAgICAgICAgX19pbml0 Y2FsbF9lbmQgPSAuOwogCisjaWZkZWYgQ09ORklHX0FMVEVSTkFUSVZFCisgICAgICAgLiA9IEFM SUdOKDQpOworICAgICAgIF9fYWx0X2luc3RydWN0aW9ucyA9IC47CisgICAgICAgKiguYWx0aW5z dHJ1Y3Rpb25zKQorICAgICAgIF9fYWx0X2luc3RydWN0aW9uc19lbmQgPSAuOworICAgICAgIC4g PSBBTElHTig0KTsKKyAgICAgICAqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkKKyNlbmRpZgorCiAg ICAgICAgKiguaW5pdC5kYXRhKQogICAgICAgICooLmluaXQuZGF0YS5yZWwpCiAgICAgICAgKigu aW5pdC5kYXRhLnJlbC4qKQpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5h dGl2ZS5oIGIveGVuL2luY2x1ZGUvYXNtLWFybS9hbHRlcm5hdGl2ZS5oCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyODdiYWMKLS0tIC9kZXYvbnVsbAorKysgYi94ZW4vaW5j bHVkZS9hc20tYXJtL2FsdGVybmF0aXZlLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgX19B U01fQUxURVJOQVRJVkVfSAorI2RlZmluZSBfX0FTTV9BTFRFUk5BVElWRV9ICisKKyNpbmNsdWRl IDxhc20vY3B1ZmVhdHVyZS5oPgorI2luY2x1ZGUgPHhlbi9jb25maWcuaD4KKyNpbmNsdWRlIDx4 ZW4va2NvbmZpZy5oPgorCisjaWZkZWYgQ09ORklHX0FMVEVSTkFUSVZFCisKKyNpZm5kZWYgX19B U1NFTUJMWV9fCisKKyNpbmNsdWRlIDx4ZW4vaW5pdC5oPgorI2luY2x1ZGUgPHhlbi90eXBlcy5o PgorI2luY2x1ZGUgPHhlbi9zdHJpbmdpZnkuaD4KKworc3RydWN0IGFsdF9pbnN0ciB7CisJczMy IG9yaWdfb2Zmc2V0OwkvKiBvZmZzZXQgdG8gb3JpZ2luYWwgaW5zdHJ1Y3Rpb24gKi8KKwlzMzIg YWx0X29mZnNldDsJCS8qIG9mZnNldCB0byByZXBsYWNlbWVudCBpbnN0cnVjdGlvbiAqLworCXUx NiBjcHVmZWF0dXJlOwkJLyogY3B1ZmVhdHVyZSBiaXQgc2V0IGZvciByZXBsYWNlbWVudCAqLwor CXU4ICBvcmlnX2xlbjsJCS8qIHNpemUgb2Ygb3JpZ2luYWwgaW5zdHJ1Y3Rpb24ocykgKi8KKwl1 OCAgYWx0X2xlbjsJCS8qIHNpemUgb2YgbmV3IGluc3RydWN0aW9uKHMpLCA8PSBvcmlnX2xlbiAq LworfTsKKwordm9pZCBfX2luaXQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKTsKK2ludCBh cHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBsZW5ndGgpOworCisjZGVmaW5l IEFMVElOU1RSX0VOVFJZKGZlYXR1cmUpCQkJCQkJICAgICAgXAorCSIgLndvcmQgNjYxYiAtIC5c biIJCQkJLyogbGFiZWwgICAgICAgICAgICovIFwKKwkiIC53b3JkIDY2M2YgLSAuXG4iCQkJCS8q IG5ldyBpbnN0cnVjdGlvbiAqLyBcCisJIiAuaHdvcmQgIiBfX3N0cmluZ2lmeShmZWF0dXJlKSAi XG4iCQkvKiBmZWF0dXJlIGJpdCAgICAgKi8gXAorCSIgLmJ5dGUgNjYyYi02NjFiXG4iCQkJCS8q IHNvdXJjZSBsZW4gICAgICAqLyBcCisJIiAuYnl0ZSA2NjRmLTY2M2ZcbiIJCQkJLyogcmVwbGFj ZW1lbnQgbGVuICovCisKKy8qCisgKiBhbHRlcm5hdGl2ZSBhc3NlbWJseSBwcmltaXRpdmU6Cisg KgorICogSWYgYW55IG9mIHRoZXNlIC5vcmcgZGlyZWN0aXZlIGZhaWwsIGl0IG1lYW5zIHRoYXQg aW5zbjEgYW5kIGluc24yCisgKiBkb24ndCBoYXZlIHRoZSBzYW1lIGxlbmd0aC4gVGhpcyB1c2Vk IHRvIGJlIHdyaXR0ZW4gYXMKKyAqCisgKiAuaWYgKCg2NjRiLTY2M2IpICE9ICg2NjJiLTY2MWIp KQorICogCS5lcnJvciAiQWx0ZXJuYXRpdmVzIGluc3RydWN0aW9uIGxlbmd0aCBtaXNtYXRjaCIK KyAqIC5lbmRpZgorICoKKyAqIGJ1dCBtb3N0IGFzc2VtYmxlcnMgZGllIGlmIGluc24xIG9yIGlu c24yIGhhdmUgYSAuaW5zdC4gVGhpcyBzaG91bGQKKyAqIGJlIGZpeGVkIGluIGEgYmludXRpbHMg cmVsZWFzZSBwb3N0ZXJpb3IgdG8gMi4yNS41MS4wLjIgKGFueXRoaW5nCisgKiBjb250YWluaW5n IGNvbW1pdCA0ZTRkMDhjZjczOTliNjA2IG9yIGMxYmFhZGRmODg2MSkuCisgKi8KKyNkZWZpbmUg X19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0dXJlLCBjZmdfZW5hYmxl ZCkJXAorCSIuaWYgIl9fc3RyaW5naWZ5KGNmZ19lbmFibGVkKSIgPT0gMVxuIgkJCQlcCisJIjY2 MTpcblx0IgkJCQkJCQlcCisJb2xkaW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2MjpcbiIJCQkJCQkJ XAorCSIucHVzaHNlY3Rpb24gLmFsdGluc3RydWN0aW9ucyxcImFcIlxuIgkJCQlcCisJQUxUSU5T VFJfRU5UUlkoZmVhdHVyZSkJCQkJCQlcCisJIi5wb3BzZWN0aW9uXG4iCQkJCQkJCVwKKwkiLnB1 c2hzZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwgXCJhXCJcbiIJCQlcCisJIjY2Mzpcblx0 IgkJCQkJCQlcCisJbmV3aW5zdHIgIlxuIgkJCQkJCQlcCisJIjY2NDpcblx0IgkJCQkJCQlcCisJ Ii5wb3BzZWN0aW9uXG5cdCIJCQkJCQlcCisJIi5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2MmIt NjYxYilcblx0IgkJCVwKKwkiLm9yZwkuIC0gKDY2MmItNjYxYikgKyAoNjY0Yi02NjNiKVxuIgkJ CVwKKwkiLmVuZGlmXG4iCisKKyNkZWZpbmUgX0FMVEVSTkFUSVZFX0NGRyhvbGRpbnN0ciwgbmV3 aW5zdHIsIGZlYXR1cmUsIGNmZywgLi4uKQlcCisJX19BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIs IG5ld2luc3RyLCBmZWF0dXJlLCBJU19FTkFCTEVEKGNmZykpCisKKyNlbHNlCisKKyNpbmNsdWRl IDxhc20vYXNtX2RlZm5zLmg+CisKKy5tYWNybyBhbHRpbnN0cnVjdGlvbl9lbnRyeSBvcmlnX29m ZnNldCBhbHRfb2Zmc2V0IGZlYXR1cmUgb3JpZ19sZW4gYWx0X2xlbgorCS53b3JkIFxvcmlnX29m ZnNldCAtIC4KKwkud29yZCBcYWx0X29mZnNldCAtIC4KKwkuaHdvcmQgXGZlYXR1cmUKKwkuYnl0 ZSBcb3JpZ19sZW4KKwkuYnl0ZSBcYWx0X2xlbgorLmVuZG0KKworLm1hY3JvIGFsdGVybmF0aXZl X2luc24gaW5zbjEsIGluc24yLCBjYXAsIGVuYWJsZSA9IDEKKwkuaWYgXGVuYWJsZQorNjYxOglc aW5zbjEKKzY2MjoJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgorCWFsdGluc3Ry dWN0aW9uX2VudHJ5IDY2MWIsIDY2M2YsIFxjYXAsIDY2MmItNjYxYiwgNjY0Zi02NjNmCisJLnBv cHNlY3Rpb24KKwkucHVzaHNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCis2NjM6 CVxpbnNuMgorNjY0OgkucG9wc2VjdGlvbgorCS5vcmcJLiAtICg2NjRiLTY2M2IpICsgKDY2MmIt NjYxYikKKwkub3JnCS4gLSAoNjYyYi02NjFiKSArICg2NjRiLTY2M2IpCisJLmVuZGlmCisuZW5k bQorCisvKgorICogQmVnaW4gYW4gYWx0ZXJuYXRpdmUgY29kZSBzZXF1ZW5jZS4KKyAqCisgKiBU aGUgY29kZSB0aGF0IGZvbGxvd3MgdGhpcyBtYWNybyB3aWxsIGJlIGFzc2VtYmxlZCBhbmQgbGlu a2VkIGFzCisgKiBub3JtYWwuIFRoZXJlIGFyZSBubyByZXN0cmljdGlvbnMgb24gdGhpcyBjb2Rl LgorICovCisubWFjcm8gYWx0ZXJuYXRpdmVfaWZfbm90IGNhcCwgZW5hYmxlID0gMQorCS5pZiBc ZW5hYmxlCisJLnB1c2hzZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgorCWFsdGluc3RydWN0 aW9uX2VudHJ5IDY2MWYsIDY2M2YsIFxjYXAsIDY2MmYtNjYxZiwgNjY0Zi02NjNmCisJLnBvcHNl Y3Rpb24KKzY2MToKKwkuZW5kaWYKKy5lbmRtCisKKy8qCisgKiBQcm92aWRlIHRoZSBhbHRlcm5h dGl2ZSBjb2RlIHNlcXVlbmNlLgorICoKKyAqIFRoZSBjb2RlIHRoYXQgZm9sbG93cyB0aGlzIG1h Y3JvIGlzIGFzc2VtYmxlZCBpbnRvIGEgc3BlY2lhbAorICogc2VjdGlvbiB0byBiZSB1c2VkIGZv ciBkeW5hbWljIHBhdGNoaW5nLiBDb2RlIHRoYXQgZm9sbG93cyB0aGlzCisgKiBtYWNybyBtdXN0 OgorICoKKyAqIDEuIEJlIGV4YWN0bHkgdGhlIHNhbWUgbGVuZ3RoIChpbiBieXRlcykgYXMgdGhl IGRlZmF1bHQgY29kZQorICogICAgc2VxdWVuY2UuCisgKgorICogMi4gTm90IGNvbnRhaW4gYSBi cmFuY2ggdGFyZ2V0IHRoYXQgaXMgdXNlZCBvdXRzaWRlIG9mIHRoZQorICogICAgYWx0ZXJuYXRp dmUgc2VxdWVuY2UgaXQgaXMgZGVmaW5lZCBpbiAoYnJhbmNoZXMgaW50byBhbgorICogICAgYWx0 ZXJuYXRpdmUgc2VxdWVuY2UgYXJlIG5vdCBmaXhlZCB1cCkuCisgKi8KKy5tYWNybyBhbHRlcm5h dGl2ZV9lbHNlCis2NjI6CS5wdXNoc2VjdGlvbiAuYWx0aW5zdHJfcmVwbGFjZW1lbnQsICJheCIK KzY2MzoKKy5lbmRtCisKKy8qCisgKiBDb21wbGV0ZSBhbiBhbHRlcm5hdGl2ZSBjb2RlIHNlcXVl bmNlLgorICovCisubWFjcm8gYWx0ZXJuYXRpdmVfZW5kaWYKKzY2NDoJLnBvcHNlY3Rpb24KKwku b3JnCS4gLSAoNjY0Yi02NjNiKSArICg2NjJiLTY2MWIpCisJLm9yZwkuIC0gKDY2MmItNjYxYikg KyAoNjY0Yi02NjNiKQorLmVuZG0KKworI2RlZmluZSBfQUxURVJOQVRJVkVfQ0ZHKGluc24xLCBp bnNuMiwgY2FwLCBjZmcsIC4uLikJXAorCWFsdGVybmF0aXZlX2luc24gaW5zbjEsIGluc24yLCBj YXAsIElTX0VOQUJMRUQoY2ZnKQorCisjZW5kaWYgIC8qICBfX0FTU0VNQkxZX18gICovCisKKy8q CisgKiBVc2FnZTogYXNtKEFMVEVSTkFUSVZFKG9sZGluc3RyLCBuZXdpbnN0ciwgZmVhdHVyZSkp OworICoKKyAqIFVzYWdlOiBhc20oQUxURVJOQVRJVkUob2xkaW5zdHIsIG5ld2luc3RyLCBmZWF0 dXJlLCBDT05GSUdfRk9PKSk7CisgKiBOLkIuIElmIENPTkZJR19GT08gaXMgc3BlY2lmaWVkLCBi dXQgbm90IHNlbGVjdGVkLCB0aGUgd2hvbGUgYmxvY2sKKyAqICAgICAgd2lsbCBiZSBvbWl0dGVk LCBpbmNsdWRpbmcgb2xkaW5zdHIuCisgKi8KKyNkZWZpbmUgQUxURVJOQVRJVkUob2xkaW5zdHIs IG5ld2luc3RyLCAuLi4pICAgXAorCV9BTFRFUk5BVElWRV9DRkcob2xkaW5zdHIsIG5ld2luc3Ry LCBfX1ZBX0FSR1NfXywgMSkKKworI2Vsc2UgLyogIUNPTkZJR19BTFRFUk5BVElWRSAqLworCitz dGF0aWMgaW5saW5lIHZvaWQgYXBwbHlfYWx0ZXJuYXRpdmVzX2FsbCh2b2lkKQoreworfQorCitz dGF0aWMgaW5saW5lIGludCBhcHBseV9hbHRlcm5hdGl2ZXModm9pZCAqc3RhcnQsIHNpemVfdCBs ZW5naHQpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKyNlbmRpZgorCisjZW5kaWYgLyogX19BU01f QUxURVJOQVRJVkVfSCAqLwpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLWFybS9hcm02NC9p bnNuLmggYi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAppbmRleCBjZmNkYmU5Li42 Y2UzN2JlIDEwMDY0NAotLS0gYS94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaAorKysg Yi94ZW4vaW5jbHVkZS9hc20tYXJtL2FybTY0L2luc24uaApAQCAtNjEsNiArNjEsMjIgQEAgdTMy IGFhcmNoNjRfaW5zbl9lbmNvZGVfaW1tZWRpYXRlKGVudW0gYWFyY2g2NF9pbnNuX2ltbV90eXBl IHR5cGUsCiBzMzIgYWFyY2g2NF9nZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbik7CiB1MzIgYWFy Y2g2NF9zZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbiwgczMyIG9mZnNldCk7CiAKKy8qIFdyYXBw ZXIgZm9yIGNvbW1vbiBjb2RlICovCitzdGF0aWMgaW5saW5lIGJvb2wgaW5zbl9pc19icmFuY2hf aW1tKHUzMiBpbnNuKQoreworICAgIHJldHVybiBhYXJjaDY0X2luc25faXNfYnJhbmNoX2ltbShp bnNuKTsKK30KKworc3RhdGljIGlubGluZSBzMzIgaW5zbl9nZXRfYnJhbmNoX29mZnNldCh1MzIg aW5zbikKK3sKKyAgICByZXR1cm4gYWFyY2g2NF9nZXRfYnJhbmNoX29mZnNldChpbnNuKTsKK30K Kworc3RhdGljIGlubGluZSB1MzIgaW5zbl9zZXRfYnJhbmNoX29mZnNldCh1MzIgaW5zbiwgczMy IG9mZnNldCkKK3sKKyAgICByZXR1cm4gYWFyY2g2NF9zZXRfYnJhbmNoX29mZnNldChpbnNuLCBv ZmZzZXQpOworfQorCiAjZW5kaWYgLyogIV9fQVJDSF9BUk1fQVJNNjRfSU5TTiAqLwogLyoKICAq IExvY2FsIHZhcmlhYmxlczoKLS0gCjEuOS4xCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlz dHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==