From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexandru Isaila Subject: [PATCH v8] x86/hvm: Implement hvmemul_write() using real mappings Date: Mon, 2 Oct 2017 15:23:11 +0300 Message-ID: <1506946991-6864-1-git-send-email-aisaila@bitdefender.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: Alexandru Isaila , andrew.cooper3@citrix.com, paul.durrant@citrix.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org RnJvbTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3BlcjNAY2l0cml4LmNvbT4KCkFuIGFjY2Vz cyB3aGljaCBjcm9zc2VzIGEgcGFnZSBib3VuZGFyeSBpcyBwZXJmb3JtZWQgYXRvbWljYWxseSBi eSB4ODYKaGFyZHdhcmUsIGFsYmVpdCB3aXRoIGEgc2V2ZXJlIHBlcmZvcm1hbmNlIHBlbmFsdHku ICBBbiBpbXBvcnRhbnQgY29ybmVyIGNhc2UKaXMgd2hlbiBhIHN0cmFkZGxlZCBhY2Nlc3MgaGl0 cyB0d28gcGFnZXMgd2hpY2ggZGlmZmVyIGluIHdoZXRoZXIgYQp0cmFuc2xhdGlvbiBleGlzdHMs IG9yIGluIG5ldCBhY2Nlc3MgcmlnaHRzLgoKVGhlIHVzZSBvZiBodm1fY29weSooKSBpbiBodm1l bXVsX3dyaXRlKCkgaXMgcHJvYmxlbWF0aWMsIGJlY2F1c2UgaXQgcGVyZm9ybXMKYSB0cmFuc2xh dGlvbiB0aGVuIGNvbXBsZXRlcyB0aGUgcGFydGlhbCB3cml0ZSwgYmVmb3JlIG1vdmluZyBvbnRv IHRoZSBuZXh0CnRyYW5zbGF0aW9uLgoKSWYgYW4gaW5kaXZpZHVhbCBlbXVsYXRlZCB3cml0ZSBz dHJhZGRsZXMgdHdvIHBhZ2VzLCB0aGUgZmlyc3Qgb2Ygd2hpY2ggaXMKd3JpdGFibGUsIGFuZCB0 aGUgc2Vjb25kIG9mIHdoaWNoIGlzIG5vdCwgdGhlIGZpcnN0IGhhbGYgb2YgdGhlIHdyaXRlIHdp bGwKY29tcGxldGUgYmVmb3JlICNQRiBpcyByYWlzZWQgZnJvbSB0aGUgc2Vjb25kIGhhbGYuCgpU aGlzIHJlc3VsdHMgaW4gZ3Vlc3Qgc3RhdGUgY29ycnVwdGlvbiBhcyBhIHNpZGUgZWZmZWN0IG9m IGVtdWxhdGlvbiwgd2hpY2gKaGFzIGJlZW4gb2JzZXJ2ZWQgdG8gY2F1c2Ugd2luZG93cyB0byBj cmFzaCB3aGlsZSB1bmRlciBpbnRyb3NwZWN0aW9uLgoKSW50cm9kdWNlIHRoZSBodm1lbXVsX3ss dW59bWFwX2xpbmVhcl9hZGRyKCkgaGVscGVycywgd2hpY2ggdHJhbnNsYXRlIGFuCmVudGlyZSBj b250ZW50cyBvZiBhIGxpbmVhciBhY2Nlc3MsIGFuZCB2bWFwKCkgdGhlIHVuZGVybHlpbmcgZnJh bWVzIHRvCnByb3ZpZGUgYSBjb250aWd1b3VzIHZpcnR1YWwgbWFwcGluZyBmb3IgdGhlIGVtdWxh dG9yIHRvIHVzZS4gIFRoaXMgaXMgdGhlCnNhbWUgbWVjaGFuaXNtIGFzIHVzZWQgYnkgdGhlIHNo YWRvdyBlbXVsYXRpb24gY29kZS4KClRoaXMgd2lsbCBjYXRjaCBhbnkgdHJhbnNsYXRpb24gaXNz dWVzIGFuZCBhYm9ydCB0aGUgZW11bGF0aW9uIGJlZm9yZSBhbnkKbW9kaWZpY2F0aW9ucyBvY2N1 ci4KClNpZ25lZC1vZmYtYnk6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNpdHJpeC5j b20+ClNpZ25lZC1vZmYtYnk6IEFsZXhhbmRydSBJc2FpbGEgPGFpc2FpbGFAYml0ZGVmZW5kZXIu Y29tPgoKLS0tCkNoYW5nZXMgc2luY2UgVjc6CgktIFJlbW92ZWQgYmxhbmsgbGluZXMKCS0gTW92 ZWQgdGhlIGNhbHVjdWxhdGlvbiBvbmYgZnJhbWUgYW5kIGFkZHIgaW4gdGhlIGZvciBsb29wCgkt IENoYW5nZWQgdGhlIGlmIGNvbmRpdGlvbiB0byBucl9mcmFtZXMgPT0gMQoJLSBDb252ZXJ0ZWQg dGhlIHdoaWxlIGxvb3AgdG8gZm9yIGluIHRoZSB1bm1hcCBmdW5jLgoKTm90ZTogVGVzdGVkIHdp dGggd2luMzIvNjQgYW5kIHVidW50dTY0IGd1ZXN0cy4KLS0tCiB4ZW4vYXJjaC94ODYvaHZtL2Vt dWxhdGUuYyAgICAgICAgfCAxODIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0KIHhlbi9pbmNsdWRlL2FzbS14ODYvaHZtL2VtdWxhdGUuaCB8ICAgNyArKwogMiBmaWxlcyBj aGFuZ2VkLCAxNzMgaW5zZXJ0aW9ucygrKSwgMTYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv eGVuL2FyY2gveDg2L2h2bS9lbXVsYXRlLmMgYi94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwpp bmRleCBjYzg3NGNlLi4xYmE5YTFiIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvaHZtL2VtdWxh dGUuYworKysgYi94ZW4vYXJjaC94ODYvaHZtL2VtdWxhdGUuYwpAQCAtNDk4LDYgKzQ5OCwxNjMg QEAgc3RhdGljIGludCBodm1lbXVsX2RvX21taW9fYWRkcihwYWRkcl90IG1taW9fZ3BhLAogfQog CiAvKgorICogTWFwIHRoZSBmcmFtZShzKSBjb3ZlcmluZyBhbiBpbmRpdmlkdWFsIGxpbmVhciBh Y2Nlc3MsIGZvciB3cml0ZWFibGUKKyAqIGFjY2Vzcy4gIE1heSByZXR1cm4gTlVMTCBmb3IgTU1J Tywgb3IgRVJSX1BUUih+WDg2RU1VTF8qKSBmb3Igb3RoZXIgZXJyb3JzCisgKiBpbmNsdWRpbmcg RVJSX1BUUih+WDg2RU1VTF9PS0FZKSBmb3Igd3JpdGUtZGlzY2FyZCBtYXBwaW5ncy4KKyAqCisg KiBJbiBkZWJ1ZyBidWlsZHMsIG1hcCgpIGNoZWNrcyB0aGF0IGVhY2ggc2xvdCBpbiBodm1lbXVs X2N0eHQtPm1mbltdIGlzCisgKiBjbGVhbiBiZWZvcmUgdXNlLCBhbmQgcG9pc2lvbnMgdW51c2Vk IHNsb3RzIHdpdGggSU5WQUxJRF9NRk4uCisgKi8KK3N0YXRpYyB2b2lkICpodm1lbXVsX21hcF9s aW5lYXJfYWRkcigKKyAgICB1bnNpZ25lZCBsb25nIGxpbmVhciwgdW5zaWduZWQgaW50IGJ5dGVz LCB1aW50MzJfdCBwZmVjLAorICAgIHN0cnVjdCBodm1fZW11bGF0ZV9jdHh0ICpodm1lbXVsX2N0 eHQpCit7CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50OworICAgIHZvaWQgKmVyciwg Km1hcHBpbmc7CisKKyAgICAvKiBGaXJzdCBhbmQgZmluYWwgZ2ZucyB3aGljaCBuZWVkIG1hcHBp bmcuICovCisgICAgdW5zaWduZWQgaW50IG5yX2ZyYW1lcyA9ICgobGluZWFyICsgYnl0ZXMgLSAh IWJ5dGVzKSA+PiBQQUdFX1NISUZUKSAtCisgICAgICAgIChsaW5lYXIgPj4gUEFHRV9TSElGVCkg KyAxOworICAgIHVuc2lnbmVkIGludCBpOworCisgICAgLyoKKyAgICAgKiBtZm4gcG9pbnRzIHRv IHRoZSBuZXh0IGZyZWUgc2xvdC4gIEFsbCB1c2VkIHNsb3RzIGhhdmUgYSBwYWdlIHJlZmVyZW5j ZQorICAgICAqIGhlbGQgb24gdGhlbS4KKyAgICAgKi8KKyAgICBtZm5fdCAqbWZuID0gJmh2bWVt dWxfY3R4dC0+bWZuWzBdOworCisgICAgLyoKKyAgICAgKiBUaGUgY2FsbGVyIGhhcyBubyBsZWdp dGltYXRlIHJlYXNvbiBmb3IgdHJ5aW5nIGEgemVyby1ieXRlIHdyaXRlLCBidXQKKyAgICAgKiBm aW5hbCBpcyBjYWxjdWxhdGUgdG8gZmFpbCBzYWZlIGluIHJlbGVhc2UgYnVpbGRzLgorICAgICAq CisgICAgICogVGhlIG1heGltdW0gd3JpdGUgc2l6ZSBkZXBlbmRzIG9uIHRoZSBudW1iZXIgb2Yg YWRqYWNlbnQgbWZuc1tdIHdoaWNoCisgICAgICogY2FuIGJlIHZtYXAoKSdkLCBhY2NvdXRpbmcg Zm9yIHBvc3NpYmxlIG1pc2FsaWdubWVudCB3aXRoaW4gdGhlIHJlZ2lvbi4KKyAgICAgKiBUaGUg aGlnaGVyIGxldmVsIGVtdWxhdGlvbiBjYWxsZXJzIGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJp bmcgdGhhdAorICAgICAqIG1mbnNbXSBpcyBsYXJnZSBlbm91Z2ggZm9yIHRoZSByZXF1ZXN0ZWQg d3JpdGUgc2l6ZS4KKyAgICAgKi8KKyAgICBpZiAoIGJ5dGVzID09IDAgfHwKKyAgICAgICAgIG5y X2ZyYW1lcyA+IEFSUkFZX1NJWkUoaHZtZW11bF9jdHh0LT5tZm4pICkKKyAgICB7CisgICAgICAg IEFTU0VSVF9VTlJFQUNIQUJMRSgpOworICAgICAgICBwcmludGsoImdvdG8gdW5oYW5kbGUgRVJS T1J+IX5+XG4iKTsKKyAgICAgICAgZ290byB1bmhhbmRsZWFibGU7CisgICAgfQorCisgICAgZm9y KCBpID0gMDsgaSA8IG5yX2ZyYW1lczsgaSsrICkKKyAgICB7CisgICAgICAgIGVudW0gaHZtX3Ry YW5zbGF0aW9uX3Jlc3VsdCByZXM7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Cisg ICAgICAgIHBhZ2VmYXVsdF9pbmZvX3QgcGZpbmZvOworICAgICAgICBwMm1fdHlwZV90IHAybXQ7 CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZnJhbWUgPSAobGluZWFyID4+IFBBR0VfU0hJRlQpICsg aTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyID0gZnJhbWUgPDwgUEFHRV9TSElGVDsKKwor ICAgICAgICBpZiAoIGh2bWVtdWxfY3R4dC0+Y3R4dC5hZGRyX3NpemUgPCA2NCApCisgICAgICAg ICAgICBhZGRyID0gKHVpbnQzMl90KWFkZHI7CisKKyAgICAgICAgLyogRXJyb3IgY2hlY2tpbmcu ICBDb25maXJtIHRoYXQgdGhlIGN1cnJlbnQgc2xvdCBpcyBjbGVhbi4gKi8KKyAgICAgICAgQVNT RVJUKG1mbl94KCptZm4pID09IDApOworCisgICAgICAgIHJlcyA9IGh2bV90cmFuc2xhdGVfZ2V0 X3BhZ2UoY3VyciwgYWRkciwgdHJ1ZSwgcGZlYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmcGZpbmZvLCAmcGFnZSwgTlVMTCwgJnAybXQpOworCisgICAgICAgIHN3aXRj aCAoIHJlcyApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBIVk1UUkFOU19va2F5OgorICAgICAg ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBIVk1UUkFOU19iYWRfbGluZWFyX3RvX2dmbjoK KyAgICAgICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdChwZmluZm8uZWMsIHBmaW5mby5saW5lYXIs ICZodm1lbXVsX2N0eHQtPmN0eHQpOworICAgICAgICAgICAgZXJyID0gRVJSX1BUUih+WDg2RU1V TF9FWENFUFRJT04pOworICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgY2FzZSBIVk1U UkFOU19iYWRfZ2ZuX3RvX21mbjoKKyAgICAgICAgICAgIGVyciA9IE5VTEw7CisgICAgICAgICAg ICBnb3RvIG91dDsKKworICAgICAgICBjYXNlIEhWTVRSQU5TX2dmbl9wYWdlZF9vdXQ6CisgICAg ICAgIGNhc2UgSFZNVFJBTlNfZ2ZuX3NoYXJlZDoKKyAgICAgICAgICAgIGVyciA9IEVSUl9QVFIo flg4NkVNVUxfUkVUUlkpOworICAgICAgICAgICAgZ290byBvdXQ7CisKKyAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgIGdvdG8gdW5oYW5kbGVhYmxlOworICAgICAgICB9CisKKyAgICAgICAg Km1mbisrID0gX21mbihwYWdlX3RvX21mbihwYWdlKSk7CisKKyAgICAgICAgaWYgKCBwMm1faXNf ZGlzY2FyZF93cml0ZShwMm10KSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGVyciA9IEVSUl9Q VFIoflg4NkVNVUxfT0tBWSk7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAg IH0KKworICAgIC8qIEVudGlyZSBhY2Nlc3Mgd2l0aGluIGEgc2luZ2xlIGZyYW1lPyAqLworICAg IGlmICggbnJfZnJhbWVzID09IDEgKQorICAgICAgICBtYXBwaW5nID0gbWFwX2RvbWFpbl9wYWdl KGh2bWVtdWxfY3R4dC0+bWZuWzBdKTsKKyAgICAvKiBNdWx0aXBsZSBmcmFtZXM/IE5lZWQgdG8g dm1hcCgpLiAqLworICAgIGVsc2UgaWYgKCAobWFwcGluZyA9IHZtYXAoaHZtZW11bF9jdHh0LT5t Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucl9mcmFtZXMpKSA9PSBOVUxMICkK KyAgICAgICAgZ290byB1bmhhbmRsZWFibGU7CisKKyNpZm5kZWYgTkRFQlVHIC8qIFBvaXNpb24g dW51c2VkIG1mbltdcyB3aXRoIElOVkFMSURfTUZOLiAqLworICAgIHdoaWxlICggbWZuIDwgaHZt ZW11bF9jdHh0LT5tZm4gKyBBUlJBWV9TSVpFKGh2bWVtdWxfY3R4dC0+bWZuKSApCisgICAgewor ICAgICAgICBBU1NFUlQobWZuX3goKm1mbikgPT0gMCk7CisgICAgICAgICptZm4rKyA9IElOVkFM SURfTUZOOworICAgIH0KKyNlbmRpZgorICAgIHJldHVybiBtYXBwaW5nICsgKGxpbmVhciAmIH5Q QUdFX01BU0spOworCisgdW5oYW5kbGVhYmxlOgorICAgIGVyciA9IEVSUl9QVFIoflg4NkVNVUxf VU5IQU5ETEVBQkxFKTsKKworIG91dDoKKyAgICAvKiBEcm9wIGFsbCBoZWxkIHJlZmVyZW5jZXMu ICovCisgICAgd2hpbGUgKCBtZm4tLSA+IGh2bWVtdWxfY3R4dC0+bWZuICkKKyAgICAgICAgcHV0 X3BhZ2UobWZuX3RvX3BhZ2UobWZuX3goKm1mbikpKTsKKworICAgIHJldHVybiBlcnI7Cit9CisK K3N0YXRpYyB2b2lkIGh2bWVtdWxfdW5tYXBfbGluZWFyX2FkZHIoCisgICAgdm9pZCAqbWFwcGlu ZywgdW5zaWduZWQgbG9uZyBsaW5lYXIsIHVuc2lnbmVkIGludCBieXRlcywKKyAgICBzdHJ1Y3Qg aHZtX2VtdWxhdGVfY3R4dCAqaHZtZW11bF9jdHh0KQoreworICAgIHN0cnVjdCBkb21haW4gKmN1 cnJkID0gY3VycmVudC0+ZG9tYWluOworICAgIHVuc2lnbmVkIGludCBucl9mcmFtZXMgPSAoKGxp bmVhciArIGJ5dGVzIC0gISFieXRlcykgPj4gUEFHRV9TSElGVCkgLQorICAgICAgICAobGluZWFy ID4+IFBBR0VfU0hJRlQpICsgMTsKKyAgICB1bnNpZ25lZCBpbnQgaTsKKyAgICBtZm5fdCAqbWZu ID0gJmh2bWVtdWxfY3R4dC0+bWZuWzBdOworCisgICAgQVNTRVJUKGJ5dGVzID4gMCk7CisKKyAg ICBpZiAoIG5yX2ZyYW1lcyA9PSAxICkKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UobWFwcGlu Zyk7CisgICAgZWxzZQorICAgICAgICB2dW5tYXAobWFwcGluZyk7CisKKyAgICBmb3IoIGkgPSAw OyBpIDwgbnJfZnJhbWVzOyBpKysgKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1mbl92YWxpZCgq bWZuKSk7CisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KGN1cnJkLCAqbWZuKTsKKyAgICAgICAg cHV0X3BhZ2UobWZuX3RvX3BhZ2UobWZuX3goKm1mbikpKTsKKworICAgICAgICAqbWZuKysgPSBf bWZuKDApOyAvKiBDbGVhbiBzbG90IGZvciBtYXAoKSdzIGVycm9yIGNoZWNraW5nLiAqLworICAg IH0KKworCisjaWZuZGVmIE5ERUJVRyAvKiBDaGVjayAoYW5kIGNsZWFuKSBhbGwgdW51c2VkIG1m bnMuICovCisgICAgd2hpbGUgKCBtZm4gPCBodm1lbXVsX2N0eHQtPm1mbiArIEFSUkFZX1NJWkUo aHZtZW11bF9jdHh0LT5tZm4pICkKKyAgICB7CisgICAgICAgIEFTU0VSVChtZm5fZXEoKm1mbiwg SU5WQUxJRF9NRk4pKTsKKyAgICAgICAgKm1mbisrID0gX21mbigwKTsKKyAgICB9CisjZW5kaWYK K30KKworLyoKICAqIENvbnZlcnQgYWRkciBmcm9tIGxpbmVhciB0byBwaHlzaWNhbCBmb3JtLCB2 YWxpZCBvdmVyIHRoZSByYW5nZQogICogW2FkZHIsIGFkZHIgKyAqcmVwcyAqIGJ5dGVzX3Blcl9y ZXBdLiAqcmVwcyBpcyBhZGp1c3RlZCBhY2NvcmRpbmcgdG8KICAqIHRoZSB2YWxpZCBjb21wdXRl ZCByYW5nZS4gSXQgaXMgYWx3YXlzID4wIHdoZW4gWDg2RU1VTF9PS0FZIGlzIHJldHVybmVkLgpA QCAtOTg4LDExICsxMTQ1LDExIEBAIHN0YXRpYyBpbnQgaHZtZW11bF93cml0ZSgKICAgICBzdHJ1 Y3QgaHZtX2VtdWxhdGVfY3R4dCAqaHZtZW11bF9jdHh0ID0KICAgICAgICAgY29udGFpbmVyX29m KGN0eHQsIHN0cnVjdCBodm1fZW11bGF0ZV9jdHh0LCBjdHh0KTsKICAgICBzdHJ1Y3QgdmNwdSAq Y3VyciA9IGN1cnJlbnQ7Ci0gICAgcGFnZWZhdWx0X2luZm9fdCBwZmluZm87CiAgICAgdW5zaWdu ZWQgbG9uZyBhZGRyLCByZXBzID0gMTsKICAgICB1aW50MzJfdCBwZmVjID0gUEZFQ19wYWdlX3By ZXNlbnQgfCBQRkVDX3dyaXRlX2FjY2VzczsKICAgICBzdHJ1Y3QgaHZtX3ZjcHVfaW8gKnZpbyA9 ICZjdXJyLT5hcmNoLmh2bV92Y3B1Lmh2bV9pbzsKICAgICBpbnQgcmM7CisgICAgdm9pZCAqbWFw cGluZzsKIAogICAgIGlmICggaXNfeDg2X3N5c3RlbV9zZWdtZW50KHNlZykgKQogICAgICAgICBw ZmVjIHw9IFBGRUNfaW1wbGljaXQ7CkBAIC0xMDA4LDIzICsxMTY1LDE2IEBAIHN0YXRpYyBpbnQg aHZtZW11bF93cml0ZSgKICAgICAgICAgICh2aW8tPm1taW9fZ2xhID09IChhZGRyICYgUEFHRV9N QVNLKSkgKQogICAgICAgICByZXR1cm4gaHZtZW11bF9saW5lYXJfbW1pb193cml0ZShhZGRyLCBi eXRlcywgcF9kYXRhLCBwZmVjLCBodm1lbXVsX2N0eHQsIDEpOwogCi0gICAgcmMgPSBodm1fY29w eV90b19ndWVzdF9saW5lYXIoYWRkciwgcF9kYXRhLCBieXRlcywgcGZlYywgJnBmaW5mbyk7Cisg ICAgbWFwcGluZyA9IGh2bWVtdWxfbWFwX2xpbmVhcl9hZGRyKGFkZHIsIGJ5dGVzLCBwZmVjLCBo dm1lbXVsX2N0eHQpOworICAgIGlmICggSVNfRVJSKG1hcHBpbmcpICkKKyAgICAgICAgcmV0dXJu IH5QVFJfRVJSKG1hcHBpbmcpOwogCi0gICAgc3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNl IEhWTVRSQU5TX29rYXk6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgSFZNVFJBTlNfYmFkX2xp bmVhcl90b19nZm46Ci0gICAgICAgIHg4Nl9lbXVsX3BhZ2VmYXVsdChwZmluZm8uZWMsIHBmaW5m by5saW5lYXIsICZodm1lbXVsX2N0eHQtPmN0eHQpOwotICAgICAgICByZXR1cm4gWDg2RU1VTF9F WENFUFRJT047Ci0gICAgY2FzZSBIVk1UUkFOU19iYWRfZ2ZuX3RvX21mbjoKKyAgICBpZiAoICFt YXBwaW5nICkKICAgICAgICAgcmV0dXJuIGh2bWVtdWxfbGluZWFyX21taW9fd3JpdGUoYWRkciwg Ynl0ZXMsIHBfZGF0YSwgcGZlYywgaHZtZW11bF9jdHh0LCAwKTsKLSAgICBjYXNlIEhWTVRSQU5T X2dmbl9wYWdlZF9vdXQ6Ci0gICAgY2FzZSBIVk1UUkFOU19nZm5fc2hhcmVkOgotICAgICAgICBy ZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICBkZWZhdWx0OgotICAgICAgICByZXR1cm4gWDg2RU1V TF9VTkhBTkRMRUFCTEU7Ci0gICAgfQorCisgICAgbWVtY3B5KG1hcHBpbmcsIHBfZGF0YSwgYnl0 ZXMpOworCisgICAgaHZtZW11bF91bm1hcF9saW5lYXJfYWRkcihtYXBwaW5nLCBhZGRyLCBieXRl cywgaHZtZW11bF9jdHh0KTsKIAogICAgIHJldHVybiBYODZFTVVMX09LQVk7CiB9CmRpZmYgLS1n aXQgYS94ZW4vaW5jbHVkZS9hc20teDg2L2h2bS9lbXVsYXRlLmggYi94ZW4vaW5jbHVkZS9hc20t eDg2L2h2bS9lbXVsYXRlLmgKaW5kZXggODg2NDc3NS4uZDM3OWE0YSAxMDA2NDQKLS0tIGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9odm0vZW11bGF0ZS5oCisrKyBiL3hlbi9pbmNsdWRlL2FzbS14ODYv aHZtL2VtdWxhdGUuaApAQCAtMzcsNiArMzcsMTMgQEAgc3RydWN0IGh2bV9lbXVsYXRlX2N0eHQg ewogICAgIHVuc2lnbmVkIGxvbmcgc2VnX3JlZ19hY2Nlc3NlZDsKICAgICB1bnNpZ25lZCBsb25n IHNlZ19yZWdfZGlydHk7CiAKKyAgICAvKgorICAgICAqIE1GTnMgYmVoaW5kIHRlbXBvcmFyeSBt YXBwaW5ncyBpbiB0aGUgd3JpdGUgY2FsbGJhY2suICBUaGUgbGVuZ3RoIGlzCisgICAgICogYXJi aXRyYXJ5LCBhbmQgY2FuIGJlIGluY3JlYXNlZCBpZiB3cml0ZXMgbG9uZ2VyIHRoYW4gUEFHRV9T SVpFKzEgYXJlCisgICAgICogbmVlZGVkLgorICAgICAqLworICAgIG1mbl90IG1mblsyXTsKKwog ICAgIHVpbnQzMl90IGludHJfc2hhZG93OwogCiAgICAgYm9vbF90IHNldF9jb250ZXh0OwotLSAK Mi43LjQKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlz dHMueGVuLm9yZy94ZW4tZGV2ZWwK