From mboxrd@z Thu Jan 1 00:00:00 1970 From: Chunyan Liu Subject: [PATCH V16 4/6] libxl: add pvusb API Date: Fri, 4 Mar 2016 12:55:54 +0800 Message-ID: <1457067356-3306-5-git-send-email-cyliu@suse.com> References: <1457067356-3306-1-git-send-email-cyliu@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1457067356-3306-1-git-send-email-cyliu@suse.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: jgross@suse.com, wei.liu2@citrix.com, ian.campbell@citrix.com, george.dunlap@eu.citrix.com, Ian.Jackson@eu.citrix.com, Chunyan Liu , George Dunlap , jfehlig@suse.com, Simon Cao List-Id: xen-devel@lists.xenproject.org QWRkIHB2dXNiIEFQSXMsIGluY2x1ZGluZzoKIC0gYXR0YWNoL2RldGFjaCAoY3JlYXRlL2Rlc3Ry b3kpIHZpcnR1YWwgdXNiIGNvbnRyb2xsZXIuCiAtIGF0dGFjaC9kZXRhY2ggdXNiIGRldmljZQog LSBsaXN0IHVzYiBjb250cm9sbGVyIGFuZCB1c2IgZGV2aWNlcwogLSBzb21lIG90aGVyIGhlbHBl ciBmdW5jdGlvbnMKClNpZ25lZC1vZmYtYnk6IFNpbW9uIENhbyA8Y2FvYm9zaW1vbkBnbWFpbC5j b20+ClNpZ25lZC1vZmYtYnk6IEdlb3JnZSBEdW5sYXAgPGdlb3JnZS5kdW5sYXBAY2l0cml4LmNv bT4KU2lnbmVkLW9mZi1ieTogQ2h1bnlhbiBMaXUgPGN5bGl1QHN1c2UuY29tPgotLS0KQ2hhbmdl czoKICAqIEFkZHJlc3MgR2VvcmdlJ3MgY29tbWVudHMKCiB0b29scy9saWJ4bC9NYWtlZmlsZSAg ICAgICAgICAgICAgICAgfCAgICAzICstCiB0b29scy9saWJ4bC9saWJ4bC5jICAgICAgICAgICAg ICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL2xpYnhsLmggICAgICAgICAgICAgICAgICB8ICAg NzcgKysKIHRvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5jICAgICAgICAgICB8ICAgIDUgKy0KIHRv b2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmggICAgICAgICB8ICAgMTggKwogdG9vbHMvbGlieGwv bGlieGxfb3NkZXBzLmggICAgICAgICAgIHwgICAxMyArCiB0b29scy9saWJ4bC9saWJ4bF9wdnVz Yi5jICAgICAgICAgICAgfCAxNjIwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK IHRvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbCAgICAgICAgICB8ICAgNDYgKwogdG9vbHMvbGli eGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsIHwgICAgMSArCiB0b29scy9saWJ4bC9saWJ4bF91 dGlscy5jICAgICAgICAgICAgfCAgIDE4ICsKIHRvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmggICAg ICAgICAgICB8ICAgIDUgKwogMTEgZmlsZXMgY2hhbmdlZCwgMTgyMiBpbnNlcnRpb25zKCspLCAy IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL2xpYnhsL2xpYnhsX3B2dXNi LmMKCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9NYWtlZmlsZSBiL3Rvb2xzL2xpYnhsL01ha2Vm aWxlCmluZGV4IDc4OWExMmUuLjhmYTdiODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL01ha2Vm aWxlCisrKyBiL3Rvb2xzL2xpYnhsL01ha2VmaWxlCkBAIC0xMDUsNyArMTA1LDggQEAgTElCWExf T0JKUyA9IGZsZXhhcnJheS5vIGxpYnhsLm8gbGlieGxfY3JlYXRlLm8gbGlieGxfZG0ubyBsaWJ4 bF9wY2kubyBcCiAJCQlsaWJ4bF9zdHJlYW1fcmVhZC5vIGxpYnhsX3N0cmVhbV93cml0ZS5vIFwK IAkJCWxpYnhsX3NhdmVfY2FsbG91dC5vIF9saWJ4bF9zYXZlX21zZ3NfY2FsbG91dC5vIFwKIAkJ CWxpYnhsX3FtcC5vIGxpYnhsX2V2ZW50Lm8gbGlieGxfZm9yay5vIFwKLQkJCWxpYnhsX2RvbV9z dXNwZW5kLm8gbGlieGxfZG9tX3NhdmUubyAkKExJQlhMX09CSlMteSkKKwkJCWxpYnhsX2RvbV9z dXNwZW5kLm8gbGlieGxfZG9tX3NhdmUubyBsaWJ4bF9wdnVzYi5vIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICQoTElCWExfT0JKUy15KQogTElCWExfT0JKUyArPSBsaWJ4bF9nZW5pZC5vCiBM SUJYTF9PQkpTICs9IF9saWJ4bF90eXBlcy5vIGxpYnhsX2ZsYXNrLm8gX2xpYnhsX3R5cGVzX2lu dGVybmFsLm8KIApkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGwuYyBiL3Rvb2xzL2xpYnhs L2xpYnhsLmMKaW5kZXggMmFiNWFkMy4uMWU2ODY4OCAxMDA2NDQKLS0tIGEvdG9vbHMvbGlieGwv bGlieGwuYworKysgYi90b29scy9saWJ4bC9saWJ4bC5jCkBAIC00MTAyLDYgKzQxMDIsOCBAQCBv dXQ6CiAgKiBsaWJ4bF9kZXZpY2VfdmtiX2Rlc3Ryb3kKICAqIGxpYnhsX2RldmljZV92ZmJfcmVt b3ZlCiAgKiBsaWJ4bF9kZXZpY2VfdmZiX2Rlc3Ryb3kKKyAqIGxpYnhsX2RldmljZV91c2JjdHJs X3JlbW92ZQorICogbGlieGxfZGV2aWNlX3VzYmN0cmxfZGVzdHJveQogICovCiAjZGVmaW5lIERF RklORV9ERVZJQ0VfUkVNT1ZFX0VYVCh0eXBlLCByZW10eXBlLCByZW1vdmVkZXN0cm95LCBmKSAg ICAgICAgXAogICAgIGludCBsaWJ4bF9kZXZpY2VfIyN0eXBlIyNfIyNyZW1vdmVkZXN0cm95KGxp YnhsX2N0eCAqY3R4LCAgICAgICAgICAgXApAQCAtNDE1OSw2ICs0MTYxLDEwIEBAIERFRklORV9E RVZJQ0VfUkVNT1ZFKHZmYiwgZGVzdHJveSwgMSkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0s IHJlbW92ZSwgMCkKIERFRklORV9ERVZJQ0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCiAKKy8q IHVzYmN0cmwgKi8KK0RFRklORV9ERVZJQ0VfUkVNT1ZFX0NVU1RPTSh1c2JjdHJsLCByZW1vdmUs IDApCitERUZJTkVfREVWSUNFX1JFTU9WRV9DVVNUT00odXNiY3RybCwgZGVzdHJveSwgMSkKKwog LyogY2hhbm5lbC9jb25zb2xlIGhvdHVucGx1ZyBpcyBub3QgaW1wbGVtZW50ZWQuIFRoZXJlIGFy ZSAyIHBvc3NpYmlsaXRpZXM6CiAgKiAxLiBhZGQgc3VwcG9ydCBmb3Igc2Vjb25kYXJ5IGNvbnNv bGVzIHRvIHhlbmNvbnNvbGVkCiAgKiAyLiBkeW5hbWljYWxseSBhZGQvcmVtb3ZlIHFlbXUgY2hh cmRldnMgdmlhIHFtcCBtZXNzYWdlcy4gKi8KQEAgLTQxNzQsNiArNDE4MCw4IEBAIERFRklORV9E RVZJQ0VfUkVNT1ZFKHZ0cG0sIGRlc3Ryb3ksIDEpCiAgKiBsaWJ4bF9kZXZpY2VfZGlza19hZGQK ICAqIGxpYnhsX2RldmljZV9uaWNfYWRkCiAgKiBsaWJ4bF9kZXZpY2VfdnRwbV9hZGQKKyAqIGxp YnhsX2RldmljZV91c2JjdHJsX2FkZAorICogbGlieGxfZGV2aWNlX3VzYmRldl9hZGQKICAqLwog CiAjZGVmaW5lIERFRklORV9ERVZJQ0VfQUREKHR5cGUpICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCkBAIC00MjA1LDYgKzQyMTMsMTIgQEAgREVGSU5FX0RFVklDRV9B REQobmljKQogLyogdnRwbSAqLwogREVGSU5FX0RFVklDRV9BREQodnRwbSkKIAorLyogdXNiY3Ry bCAqLworREVGSU5FX0RFVklDRV9BREQodXNiY3RybCkKKworLyogdXNiICovCitERUZJTkVfREVW SUNFX0FERCh1c2JkZXYpCisKICN1bmRlZiBERUZJTkVfREVWSUNFX0FERAogCiAvKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqLwpAQCAtNjc1MCw2ICs2NzY0LDEwIEBAIGludCBsaWJ4bF9yZXRyaWV2ZV9k b21haW5fY29uZmlndXJhdGlvbihsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCiAKICAg ICBNRVJHRShwY2ksIHBjaWRldnMsIENPTVBBUkVfUENJLCB7fSk7CiAKKyAgICBNRVJHRSh1c2Jj dHJsLCB1c2JjdHJscywgQ09NUEFSRV9VU0JDVFJMLCB7fSk7CisKKyAgICBNRVJHRSh1c2JkZXYs IHVzYmRldnMsIENPTVBBUkVfVVNCLCB7fSk7CisKICAgICAvKiBUYWtlIGNhcmUgb2YgcmVtb3Zh YmxlIGRldmljZS4gV2UgbWFpbnRhaW4gaW52YXJpYW50IGluIHRoZQogICAgICAqIGluc2VydCAv IHJlbW92ZSBvcGVyYXRpb24gc28gdGhhdDoKICAgICAgKiAxLiBpZiB4ZW5zdG9yZSBpcyAiZW1w dHkiIHdoaWxlIEpTT04gaXMgbm90LCB0aGUgcmVzdWx0CmRpZmYgLS1naXQgYS90b29scy9saWJ4 bC9saWJ4bC5oIGIvdG9vbHMvbGlieGwvbGlieGwuaAppbmRleCAwODU5MzgzLi41Y2MzY2UzIDEw MDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bC5oCisrKyBiL3Rvb2xzL2xpYnhsL2xpYnhsLmgK QEAgLTEyMyw2ICsxMjMsMTIgQEAKICNkZWZpbmUgTElCWExfSEFWRV9ET01BSU5fTk9ERUFGRklO SVRZIDEKIAogLyoKKyAqIExJQlhMX0hBVkVfUFZVU0IgaW5kaWNhdGVzIGZ1bmN0aW9ucyBmb3Ig cGx1Z2dpbmcgaW4gVVNCIGRldmljZXMKKyAqIHRocm91Z2ggcHZ1c2IgLS0gYm90aCBob3RwbHVn IGFuZCBhdCBkb21haW4gY3JlYXRpb24gdGltZS4uCisgKi8KKyNkZWZpbmUgTElCWExfSEFWRV9Q VlVTQiAxCisKKy8qCiAgKiBMSUJYTF9IQVZFX0JVSUxESU5GT19IVk1fVkVORE9SX0RFVklDRSBp bmRpY2F0ZXMgdGhhdCB0aGUKICAqIGxpYnhsX3ZlbmRvcl9kZXZpY2UgZmllbGQgaXMgcHJlc2Vu dCBpbiB0aGUgaHZtIHNlY3Rpb25zIG9mCiAgKiBsaWJ4bF9kb21haW5fYnVpbGRfaW5mby4gVGhp cyBmaWVsZCB0ZWxscyBsaWJ4bCB3aGljaApAQCAtMTUzNiw2ICsxNTQyLDc3IEBAIGludCBsaWJ4 bF9jZHJvbV9pbnNlcnQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9kZXZp Y2VfZGlzayAqZGlzaywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNv cF9ob3cgKmFvX2hvdykKICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FM TEVSU19PTkxZOwogCisvKgorICogVVNCCisgKgorICogRm9yIGVhY2ggZGV2aWNlIHJlbW92ZWQg b3IgYWRkZWQsIG9uZSBvZiB0aGVzZSBwcm90b2NvbHMgaXMgYXZhaWxhYmxlOgorICogLSBQViAo aS5lLiwgUFZVU0IpCisgKiAtIERFVklDRU1PREVMIChpLmUsIHFlbXUpCisgKgorICogUFYgaXMg YXZhaWxhYmxlIGZvciBlaXRoZXIgUFYgb3IgSFZNIGRvbWFpbnMuICBERVZJQ0VNT0RFTCBpcyBv bmx5CisgKiBhdmFpbGFibGUgZm9yIEhWTSBkb21haW5zLiAgVGhlIGNhbGxlciBjYW4gYWRkaXRp b25hbGx5IHNwZWNpZnkKKyAqICJBVVRPIiwgaW4gd2hpY2ggY2FzZSB0aGUgbGlicmFyeSB3aWxs IHRyeSB0byBkZXRlcm1pbmUgdGhlIGJlc3QKKyAqIHByb3RvY29sIGF1dG9tYXRpY2FsbHkuCisg KgorICogQXQgdGhlIG1vbWVudCwgdGhlIG9ubHkgcHJvdG9jb2wgaW1wbGVtZW50ZWQgaXMgUFYu CisgKgorICogT25lIGNhbiBhZGQvcmVtb3ZlIFVTQiBjb250cm9sbGVycyB0by9mcm9tIGd1ZXN0 LCBhbmQgYXR0YWNoL2RldGFjaCBVU0IKKyAqIGRldmljZXMgdG8vZnJvbSBVU0IgY29udHJvbGxl cnMuCisgKgorICogVG8gYWRkIFVTQiBjb250cm9sbGVycyBhbmQgVVNCIGRldmljZXMsIG9uZSBj YW4gYWRkaW5nIFVTQiBjb250cm9sbGVycworICogZmlyc3QgYW5kIHRoZW4gYXR0YWNoaW5nIFVT QiBkZXZpY2VzIHRvIHNvbWUgVVNCIGNvbnRyb2xsZXIsIG9yIGFkZGluZworICogVVNCIGRldmlj ZXMgdG8gZ3Vlc3QgZGlyZWN0bHksIGl0IHdpbGwgYXV0b21hdGljYWxseSBjcmVhdGUgYSBVU0IK KyAqIGNvbnRyb2xsZXIgZm9yIFVTQiBkZXZpY2VzIHRvIGF0dGFjaC4KKyAqCisgKiBUbyByZW1v dmUgVVNCIGNvbnRyb2xsZXJzIG9yIFVTQiBkZXZpY2VzLCBvbmUgY2FuIHJlbW92ZSBVU0IgZGV2 aWNlcworICogdW5kZXIgVVNCIGNvbnRyb2xsZXIgb25lIGJ5IG9uZSBhbmQgdGhlbiByZW1vdmUg VVNCIGNvbnRyb2xsZXIsIG9yCisgKiByZW1vdmUgVVNCIGNvbnRyb2xsZXIgZGlyZWN0bHksIGl0 IHdpbGwgcmVtb3ZlIGFsbCBVU0IgZGV2aWNlcyB1bmRlcgorICogaXQgYXV0b21hdGljYWxseS4K KyAqCisgKi8KKy8qIFVTQiBDb250cm9sbGVycyovCitpbnQgbGlieGxfZGV2aWNlX3VzYmN0cmxf YWRkKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworaW50IGxp YnhsX2RldmljZV91c2JjdHJsX3JlbW92ZShsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9hc3lu Y29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMSUJYTF9F WFRFUk5BTF9DQUxMRVJTX09OTFk7CisKK2ludCBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kZXN0cm95 KGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhMX0VYVEVSTkFMX0NBTExFUlNfT05MWTsK KworbGlieGxfZGV2aWNlX3VzYmN0cmwgKmxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxf Y3R4ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pOworCit2b2lkIGxpYnhsX2RldmljZV91c2JjdHJs X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlzdCwgaW50IG5yKTsKKworCitpbnQg bGlieGxfZGV2aWNlX3VzYmN0cmxfZ2V0aW5mbyhsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9t aWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCAqdXNiY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX3VzYmN0 cmxpbmZvICp1c2JjdHJsaW5mbyk7CisKKy8qIFVTQiBEZXZpY2VzICovCisKK2ludCBsaWJ4bF9k ZXZpY2VfdXNiZGV2X2FkZChsaWJ4bF9jdHggKmN0eCwgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX2FzeW5jb3BfaG93ICphb19ob3cpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgTElCWExfRVhURVJOQUxfQ0FMTEVSU19PTkxZOwor CitpbnQgbGlieGxfZGV2aWNlX3VzYmRldl9yZW1vdmUobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90 IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Jk ZXYgKnVzYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaWJ4bF9h c3luY29wX2hvdyAqYW9faG93KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQlhM X0VYVEVSTkFMX0NBTExFUlNfT05MWTsKKworbGlieGxfZGV2aWNlX3VzYmRldiAqCitsaWJ4bF9k ZXZpY2VfdXNiZGV2X2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBpbnQgKm51 bSk7CisKK3ZvaWQgbGlieGxfZGV2aWNlX3VzYmRldl9saXN0X2ZyZWUobGlieGxfZGV2aWNlX3Vz YmRldiAqbGlzdCwgaW50IG5yKTsKKwogLyogTmV0d29yayBJbnRlcmZhY2VzICovCiBpbnQgbGli eGxfZGV2aWNlX25pY19hZGQobGlieGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLCBsaWJ4bF9k ZXZpY2VfbmljICpuaWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlieGxfYXN5 bmNvcF9ob3cgKmFvX2hvdykKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RldmljZS5j IGIvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKaW5kZXggYTM1NmUyYS4uYjdhNmExMyAxMDA2 NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfZGV2aWNlLmMKKysrIGIvdG9vbHMvbGlieGwvbGli eGxfZGV2aWNlLmMKQEAgLTY3Niw3ICs2NzYsMTAgQEAgdm9pZCBsaWJ4bF9fZGV2aWNlc19kZXN0 cm95KGxpYnhsX19lZ2MgKmVnYywgbGlieGxfX2RldmljZXNfcmVtb3ZlX3N0YXRlICpkcnMpCiAg ICAgICAgICAgICAgICAgYW9kZXYtPmFjdGlvbiA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX1JFTU9W RTsKICAgICAgICAgICAgICAgICBhb2Rldi0+ZGV2ID0gZGV2OwogICAgICAgICAgICAgICAgIGFv ZGV2LT5mb3JjZSA9IGRycy0+Zm9yY2U7Ci0gICAgICAgICAgICAgICAgbGlieGxfX2luaXRpYXRl X2RldmljZV9nZW5lcmljX3JlbW92ZShlZ2MsIGFvZGV2KTsKKyAgICAgICAgICAgICAgICBpZiAo ZGV2LT5iYWNrZW5kX2tpbmQgPT0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0IpCisgICAgICAgICAg ICAgICAgICAgIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfdXNiY3RybF9yZW1vdmUoZWdjLCBhb2Rl dik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsaWJ4bF9faW5p dGlhdGVfZGV2aWNlX2dlbmVyaWNfcmVtb3ZlKGVnYywgYW9kZXYpOwogICAgICAgICAgICAgfQog ICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwu aCBiL3Rvb2xzL2xpYnhsL2xpYnhsX2ludGVybmFsLmgKaW5kZXggMDgyZjY1Ni4uZjc4Y2I3MiAx MDA2NDQKLS0tIGEvdG9vbHMvbGlieGwvbGlieGxfaW50ZXJuYWwuaAorKysgYi90b29scy9saWJ4 bC9saWJ4bF9pbnRlcm5hbC5oCkBAIC0yNTg3LDYgKzI1ODcsMTQgQEAgX2hpZGRlbiB2b2lkIGxp YnhsX19kZXZpY2VfdnRwbV9hZGQobGlieGxfX2VnYyAqZWdjLCB1aW50MzJfdCBkb21pZCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0s CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFv ZGV2KTsKIAorX2hpZGRlbiB2b2lkIGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGQobGlieGxfX2Vn YyAqZWdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCitfaGlkZGVu IHZvaWQgbGlieGxfX2RldmljZV91c2JkZXZfYWRkKGxpYnhsX19lZ2MgKmVnYywgdWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JkZXYgKnVzYmRldiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX2FvX2RldmljZSAqYW9kZXYpOworCiAvKiBJbnRlcm5hbCBmdW5jdGlvbiB0byBjb25u ZWN0IGEgdmtiIGRldmljZSAqLwogX2hpZGRlbiBpbnQgbGlieGxfX2RldmljZV92a2JfYWRkKGxp YnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX2RldmljZV92a2IgKnZrYik7CkBAIC0yNjE5LDYgKzI2MjcsMTMgQEAgX2hp ZGRlbiB2b2lkIGxpYnhsX193YWl0X2RldmljZV9jb25uZWN0aW9uKGxpYnhsX19lZ2MqLAogX2hp ZGRlbiB2b2lkIGxpYnhsX19pbml0aWF0ZV9kZXZpY2VfZ2VuZXJpY19yZW1vdmUobGlieGxfX2Vn YyAqZWdjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfX2FvX2RldmljZSAqYW9kZXYpOwogCitfaGlkZGVuIGludCBsaWJ4bF9fZGV2aWNl X2Zyb21fdXNiY3RybChsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9fZGV2aWNlICpkZXZpY2UpOworCitfaGlk ZGVuIHZvaWQgbGlieGxfX2luaXRpYXRlX2RldmljZV91c2JjdHJsX3JlbW92ZShsaWJ4bF9fZWdj ICplZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaWJ4bF9fYW9fZGV2aWNlICphb2Rldik7CisKIC8qCiAgKiBsaWJ4bF9fZ2V0X2hvdHBsdWdf c2NyaXB0X2luZm8gcmV0dXJucyB0aGUgYXJncyBhbmQgZW52IHRoYXQgc2hvdWxkCiAgKiBiZSBw YXNzZWQgdG8gdGhlIGhvdHBsdWcgc2NyaXB0IGZvciB0aGUgcmVxdWVzdGVkIGRldmljZS4KQEAg LTQwMTQsNiArNDAyOSw5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBsaWJ4bF9fdXBkYXRlX2NvbmZp Z192dHBtKGxpYnhsX19nYyAqZ2MsCiAjZGVmaW5lIENPTVBBUkVfUENJKGEsIGIpICgoYSktPmZ1 bmMgPT0gKGIpLT5mdW5jICYmICAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+ YnVzID09IChiKS0+YnVzICYmICAgICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGEp LT5kZXYgPT0gKGIpLT5kZXYpCisjZGVmaW5lIENPTVBBUkVfVVNCKGEsIGIpICgoYSktPmN0cmwg PT0gKGIpLT5jdHJsICYmIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChhKS0+cG9ydCA9 PSAoYiktPnBvcnQpCisjZGVmaW5lIENPTVBBUkVfVVNCQ1RSTChhLCBiKSAoKGEpLT5kZXZpZCA9 PSAoYiktPmRldmlkKQogCiAvKiBERVZJQ0VfQURECiAgKgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGli eGwvbGlieGxfb3NkZXBzLmggYi90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaAppbmRleCBkOTY2 MWM5Li44MDJjNzYyIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaAorKysg Yi90b29scy9saWJ4bC9saWJ4bF9vc2RlcHMuaApAQCAtMjQsNiArMjQsOCBAQAogI2RlZmluZSBf R05VX1NPVVJDRQogCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKQorI2RlZmluZSBTWVNGU19VU0Jf REVWICAgICAgICAgICIvc3lzL2J1cy91c2IvZGV2aWNlcyIKKyNkZWZpbmUgU1lTRlNfVVNCQkFD S19EUklWRVIgICAiL2tlcm4veGVuL3VzYiIKICNkZWZpbmUgU1lTRlNfUENJX0RFViAgICAgICAg ICAiL3N5cy9idXMvcGNpL2RldmljZXMiCiAjZGVmaW5lIFNZU0ZTX1BDSUJBQ0tfRFJJVkVSICAg Ii9rZXJuL3hlbi9wY2kiCiAjZGVmaW5lIE5FVEJBQ0tfTklDX05BTUUgICAgICAgInh2aWYldWkl ZCIKQEAgLTMxLDYgKzMzLDggQEAKICNlbGlmIGRlZmluZWQoX19PcGVuQlNEX18pCiAjaW5jbHVk ZSA8dXRpbC5oPgogI2VsaWYgZGVmaW5lZChfX2xpbnV4X18pCisjZGVmaW5lIFNZU0ZTX1VTQl9E RVYgICAgICAgICAgIi9zeXMvYnVzL3VzYi9kZXZpY2VzIgorI2RlZmluZSBTWVNGU19VU0JCQUNL X0RSSVZFUiAgICIvc3lzL2J1cy91c2IvZHJpdmVycy91c2JiYWNrIgogI2RlZmluZSBTWVNGU19Q Q0lfREVWICAgICAgICAgICIvc3lzL2J1cy9wY2kvZGV2aWNlcyIKICNkZWZpbmUgU1lTRlNfUENJ QkFDS19EUklWRVIgICAiL3N5cy9idXMvcGNpL2RyaXZlcnMvcGNpYmFjayIKICNkZWZpbmUgTkVU QkFDS19OSUNfTkFNRSAgICAgICAidmlmJXUuJWQiCkBAIC0zOCw2ICs0Miw4IEBACiAjZWxpZiBk ZWZpbmVkKF9fc3VuX18pCiAjaW5jbHVkZSA8c3Ryb3B0cy5oPgogI2VsaWYgZGVmaW5lZChfX0Zy ZWVCU0RfXykKKyNkZWZpbmUgU1lTRlNfVVNCX0RFViAgICAgICAgICAiL2Rldi9udWxsIgorI2Rl ZmluZSBTWVNGU19VU0JCQUNLX0RSSVZFUiAgICIvZGV2L251bGwiCiAjZGVmaW5lIFNZU0ZTX1BD SV9ERVYgICAgICAgICAgIi9kZXYvbnVsbCIKICNkZWZpbmUgU1lTRlNfUENJQkFDS19EUklWRVIg ICAiL2Rldi9udWxsIgogI2RlZmluZSBORVRCQUNLX05JQ19OQU1FICAgICAgICJ4bmIldS4lZCIK QEAgLTQ1LDYgKzUxLDEzIEBACiAjaW5jbHVkZSA8c3lzL2VuZGlhbi5oPgogI2VuZGlmCiAKKyNp Zm5kZWYgU1lTRlNfVVNCQkFDS19EUklWRVIKKyNlcnJvciBkZWZpbmUgU1lTRlNfVVNCQkFDS19E UklWRVIgZm9yIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorI2lmbmRlZiBTWVNGU19VU0JfREVWCisj ZXJyb3IgZGVmaW5lIFNZU0ZTX1VTQl9ERVYgZm9yIHlvdXIgcGxhdGZvcm0KKyNlbmRpZgorCiAj aWZuZGVmIFNZU0ZTX1BDSUJBQ0tfRFJJVkVSCiAjZXJyb3IgZGVmaW5lIFNZU0ZTX1BDSUJBQ0tf RFJJVkVSIGZvciB5b3VyIHBsYXRmb3JtCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhs L2xpYnhsX3B2dXNiLmMgYi90b29scy9saWJ4bC9saWJ4bF9wdnVzYi5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlZTkyMTQKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy9s aWJ4bC9saWJ4bF9wdnVzYi5jCkBAIC0wLDAgKzEsMTYyMCBAQAorLyoKKyAqIENvcHlyaWdodCAo QykgMjAxNSBTVVNFIExJTlVYIFByb2R1Y3RzIEdtYkgsIE51ZXJuYmVyZywgR2VybWFueS4KKyAq IEF1dGhvciBDaHVueWFuIExpdSA8Y3lsaXVAc3VzZS5jb20+CisgKgorICogVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK KyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg dmVyc2lvbiAyLjEgb25seS4gd2l0aCB0aGUgc3BlY2lhbAorICogZXhjZXB0aW9uIG9uIGxpbmtp bmcgZGVzY3JpYmVkIGluIGZpbGUgTElDRU5TRS4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisgKiBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyAqLworCisjaW5jbHVkZSAibGlieGxfb3NkZXBzLmgiIC8qIG11c3QgY29tZSBiZWZv cmUgYW55IG90aGVyIGhlYWRlcnMgKi8KKworI2luY2x1ZGUgImxpYnhsX2ludGVybmFsLmgiCisj aW5jbHVkZSA8aW50dHlwZXMuaD4KKworI2RlZmluZSBVU0JCQUNLX0lORk9fUEFUSCAiL2xpYnhs L3VzYmJhY2siCisKKyNkZWZpbmUgVVNCSFVCX0NMQVNTX0NPREUgOQorCitzdGF0aWMgaW50IGxp YnhsX19kZXZpY2VfdXNiY3RybF9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9k ZXZpY2VfdXNiY3RybCAqdXNiY3RybCkKK3sKKyAgICBpbnQgcmM7CisgICAgbGlieGxfZG9tYWlu X3R5cGUgZG9tdHlwZSA9IGxpYnhsX19kb21haW5fdHlwZShnYywgZG9taWQpOworCisgICAgaWYg KCF1c2JjdHJsLT52ZXJzaW9uKQorICAgICAgICB1c2JjdHJsLT52ZXJzaW9uID0gMjsKKworICAg IGlmICghdXNiY3RybC0+cG9ydHMpCisgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gODsKKworICAg IGlmICh1c2JjdHJsLT50eXBlID09IExJQlhMX1VTQkNUUkxfVFlQRV9BVVRPKSB7CisgICAgICAg IGlmIChkb210eXBlID09IExJQlhMX0RPTUFJTl9UWVBFX1BWKSB7CisgICAgICAgICAgICB1c2Jj dHJsLT50eXBlID0gTElCWExfVVNCQ1RSTF9UWVBFX1BWOworICAgICAgICB9IGVsc2UgaWYgKGRv bXR5cGUgPT0gTElCWExfRE9NQUlOX1RZUEVfSFZNKSB7CisgICAgICAgICAgICAvKiBGSVhNRTog U2VlIGlmIHdlIGNhbiBkZXRlY3QgUFYgZnJvbnRlbmQgKi8KKyAgICAgICAgICAgIHVzYmN0cmwt PnR5cGUgPSBMSUJYTF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICByYyA9IGxpYnhsX19yZXNvbHZlX2RvbWlkKGdjLCB1c2JjdHJsLT5iYWNrZW5kX2Rv bW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNiY3RybC0+YmFja2VuZF9k b21pZCk7CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgbGlieGxfX2RldmljZV9mcm9tX3VzYmN0 cmwobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbGlieGxfX2RldmljZSAqZGV2aWNlKQoreworICAgIGRldmljZS0+YmFj a2VuZF9kZXZpZCAgID0gdXNiY3RybC0+ZGV2aWQ7CisgICAgZGV2aWNlLT5iYWNrZW5kX2RvbWlk ICAgPSB1c2JjdHJsLT5iYWNrZW5kX2RvbWlkOworICAgIGRldmljZS0+YmFja2VuZF9raW5kICAg ID0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0I7CisgICAgZGV2aWNlLT5kZXZpZCAgICAgICAgICAg PSB1c2JjdHJsLT5kZXZpZDsKKyAgICBkZXZpY2UtPmRvbWlkICAgICAgICAgICA9IGRvbWlkOwor ICAgIGRldmljZS0+a2luZCAgICAgICAgICAgID0gTElCWExfX0RFVklDRV9LSU5EX1ZVU0I7CisK KyAgICByZXR1cm4gMDsKK30KKworLyogQWRkIHVzYmN0cmwgaW5mb3JtYXRpb24gdG8geGVuc3Rv cmUuCisgKgorICogQWRkaW5nIGEgdXNiIGNvbnRyb2xsZXIgd2lsbCBhZGQgYSBuZXcgJ3Z1c2In IGRldmljZSBpbiB4ZW5zdG9yZSwgYW5kCisgKiBhZGQgY29ycmVzcG9uZGluZyBmcm9udGVuZCwg YmFja2VuZCBpbmZvcm1hdGlvbiB0byBpdC4gQWNjb3JkaW5nIHRvCisgKiAidXBkYXRlX2pzb24i LCBkZWNpZGUgd2V0aGVyIHRvIHVwZGF0ZSBqc29uIGNvbmZpZyBmaWxlLgorICovCitzdGF0aWMg aW50IGxpYnhsX19kZXZpY2VfdXNiY3RybF9hZGRfeGVuc3RvcmUobGlieGxfX2djICpnYywgdWlu dDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB1cGRhdGVfanNvbikKK3sKKyAgICBsaWJ4bF9f ZGV2aWNlICpkZXZpY2U7CisgICAgZmxleGFycmF5X3QgKmZyb250OworICAgIGZsZXhhcnJheV90 ICpiYWNrOworICAgIHhzX3RyYW5zYWN0aW9uX3QgdCA9IFhCVF9OVUxMOworICAgIGludCBpLCBy YzsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGxpYnhsX2RldmljZV91 c2JjdHJsIHVzYmN0cmxfc2F2ZWQ7CisgICAgbGlieGxfX2RvbWFpbl91c2VyZGF0YV9sb2NrICps b2NrID0gTlVMTDsKKworICAgIGxpYnhsX2RvbWFpbl9jb25maWdfaW5pdCgmZF9jb25maWcpOwor ICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmxfc2F2ZWQpOworICAgIGxpYnhs X2RldmljZV91c2JjdHJsX2NvcHkoQ1RYLCAmdXNiY3RybF9zYXZlZCwgdXNiY3RybCk7CisKKyAg ICBHQ05FVyhkZXZpY2UpOworICAgIHJjID0gbGlieGxfX2RldmljZV9mcm9tX3VzYmN0cmwoZ2Ms IGRvbWlkLCB1c2JjdHJsLCBkZXZpY2UpOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICBm cm9udCA9IGZsZXhhcnJheV9tYWtlKGdjLCA0LCAxKTsKKyAgICBiYWNrID0gZmxleGFycmF5X21h a2UoZ2MsIDEyLCAxKTsKKworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAiZnJvbnRl bmQtaWQiLCBHQ1NQUklOVEYoIiVkIiwgZG9taWQpKTsKKyAgICBmbGV4YXJyYXlfYXBwZW5kX3Bh aXIoYmFjaywgIm9ubGluZSIsICIxIik7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ss ICJzdGF0ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCBYZW5i dXNTdGF0ZUluaXRpYWxpc2luZykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAi dHlwZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopbGlieGxfdXNiY3RybF90 eXBlX3RvX3N0cmluZyh1c2JjdHJsLT50eXBlKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWly KGJhY2ssICJ1c2ItdmVyIiwgR0NTUFJJTlRGKCIlZCIsIHVzYmN0cmwtPnZlcnNpb24pKTsKKyAg ICBmbGV4YXJyYXlfYXBwZW5kX3BhaXIoYmFjaywgIm51bS1wb3J0cyIsIEdDU1BSSU5URigiJWQi LCB1c2JjdHJsLT5wb3J0cykpOworICAgIGZsZXhhcnJheV9hcHBlbmRfcGFpcihiYWNrLCAicG9y dCIsICIiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdXNiY3RybC0+cG9ydHM7IGkrKykKKyAgICAg ICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGJhY2ssIEdDU1BSSU5URigicG9ydC8lZCIsIGkgKyAx KSwgIiIpOworCisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGZyb250LCAiYmFja2VuZC1pZCIs CisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJWQiLCB1c2JjdHJsLT5iYWNr ZW5kX2RvbWlkKSk7CisgICAgZmxleGFycmF5X2FwcGVuZF9wYWlyKGZyb250LCAic3RhdGUiLAor ICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVkIiwgWGVuYnVzU3RhdGVJbml0 aWFsaXNpbmcpKTsKKworICAgIGlmICh1cGRhdGVfanNvbikgeworICAgICAgICBsb2NrID0gbGli eGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7CisgICAgICAgIGlmICghbG9jaykg eworICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29uZmlndXJh dGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisK KyAgICAgICAgREVWSUNFX0FERCh1c2JjdHJsLCB1c2JjdHJscywgZG9taWQsICZ1c2JjdHJsX3Nh dmVkLAorICAgICAgICAgICAgICAgICAgIENPTVBBUkVfVVNCQ1RSTCwgJmRfY29uZmlnKTsKKyAg ICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9u X3N0YXJ0KGdjLCAmdCk7CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMg PSBsaWJ4bF9fZGV2aWNlX2V4aXN0cyhnYywgdCwgZGV2aWNlKTsKKyAgICAgICAgaWYgKHJjIDwg MCkgZ290byBvdXQ7CisgICAgICAgIGlmIChyYyA9PSAxKSB7CisgICAgICAgICAgICAvKiBhbHJl YWR5IGV4aXN0cyBpbiB4ZW5zdG9yZSAqLworICAgICAgICAgICAgTE9HKEVSUk9SLCAiZGV2aWNl IGFscmVhZHkgZXhpc3RzIGluIHhlbnN0b3JlIik7CisgICAgICAgICAgICByYyA9IEVSUk9SX0RF VklDRV9FWElTVFM7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAg IGlmICh1cGRhdGVfanNvbikgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fc2V0X2RvbWFpbl9j b25maWd1cmF0aW9uKGdjLCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgICAgIGlmIChyYykg Z290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBsaWJ4bF9fZGV2aWNlX2dlbmVyaWNfYWRk KGdjLCB0LCBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19rdnNf b2ZfZmxleGFycmF5KGdjLCBiYWNrLCBiYWNrLT5jb3VudCksCisgICAgICAgICAgICAgICAgICAg ICAgICAgIGxpYnhsX194c19rdnNfb2ZfZmxleGFycmF5KGdjLCBmcm9udCwgZnJvbnQtPmNvdW50 KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICAgICAgcmMgPSBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fY29tbWl0KGdjLCAmdCk7CisgICAgICAgIGlmICghcmMpIGJyZWFr OworICAgICAgICBpZiAocmMgPCAwKSBnb3RvIG91dDsKKyAgICB9CisKK291dDoKKyAgICBsaWJ4 bF9feHNfdHJhbnNhY3Rpb25fYWJvcnQoZ2MsICZ0KTsKKyAgICBpZiAobG9jaykgbGlieGxfX3Vu bG9ja19kb21haW5fdXNlcmRhdGEobG9jayk7CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlz cG9zZSgmdXNiY3RybF9zYXZlZCk7CisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19kaXNwb3NlKCZk X2NvbmZpZyk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBBTyBvcGVyYXRpb24gdG8gYWRkIGEg dXNiIGNvbnRyb2xsZXIuCisgKgorICogR2VuZXJhbGx5LCBpdCBkb2VzOgorICogMSkgZmlsbCBp biBuZWNlc3NhcnkgdXNiIGNvbnRyb2xlciBpbmZvcm1hdGlvbiB3aXRoIGRlZmF1bHQgdmFsdWUK KyAqIDIpIHdyaXRlIHVzYiBjb250cm9sbGVyIGZyb250ZW5kL2JhY2tlbmQgaW5mbyB0byB4ZW5z dG9yZSwgdXBkYXRlIGpzb24KKyAqICAgIGNvbmZpZyBmaWxlIGlmIG5lY2Vzc2FyeS4KKyAqIDMp IHdhaXQgZm9yIGRldmljZSBjb25uZWN0aW9uLiBQVlVTQiBmcm9udGVuZCBhbmQgYmFja2VuZCBk cml2ZXIgd2lsbAorICogICAgcHJvYmUgeGVuc3RvcmUgcGF0aHMgYW5kIGJ1aWxkIGNvbm5lY3Rp b24gYmV0d2VlbiBmcm9udGVuZCBhbmQgYmFja2VuZC4KKyAqCisgKiBCZWZvcmUgY2FsbGluZyB0 aGlzIGZ1bmN0aW9uLCBhb2RldiBzaG91bGQgYmUgcHJvcGVybHkgZmlsbGVkOgorICogYW9kZXYt PmFvLCBhb2Rldi0+Y2FsbGJhY2ssIGFvZGV2LT51cGRhdGVfanNvbiwgLi4uCisgKi8KK3ZvaWQg bGlieGxfX2RldmljZV91c2JjdHJsX2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQzMl90IGRvbWlk LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsICp1 c2JjdHJsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2Ug KmFvZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfX2Rldmlj ZSAqZGV2aWNlOworICAgIGludCByYzsKKworICAgIHJjID0gbGlieGxfX2RldmljZV91c2JjdHJs X3NldGRlZmF1bHQoZ2MsIGRvbWlkLCB1c2JjdHJsKTsKKyAgICBpZiAocmMgPCAwKSBnb3RvIG91 dDsKKworICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgeworICAgICAgICB1c2JjdHJsLT5k ZXZpZCA9IGxpYnhsX19kZXZpY2VfbmV4dGlkKGdjLCBkb21pZCwgInZ1c2IiKTsKKyAgICAgICAg aWYgKHVzYmN0cmwtPmRldmlkIDwgMCkgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXNiY3Ry bC0+dHlwZSAhPSBMSUJYTF9VU0JDVFJMX1RZUEVfUFYpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAi VW5zdXBwb3J0ZWQgVVNCIGNvbnRyb2xsZXIgdHlwZSIpOworICAgICAgICByYyA9IEVSUk9SX0ZB SUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX2RldmljZV91 c2JjdHJsX2FkZF94ZW5zdG9yZShnYywgZG9taWQsIHVzYmN0cmwsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFvZGV2LT51cGRhdGVfanNvbik7CisgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgIEdDTkVXKGRldmljZSk7CisgICAgcmMgPSBsaWJ4bF9fZGV2 aWNlX2Zyb21fdXNiY3RybChnYywgZG9taWQsIHVzYmN0cmwsIGRldmljZSk7CisgICAgaWYgKHJj KSBnb3RvIG91dDsKKworICAgIGFvZGV2LT5kZXYgPSBkZXZpY2U7CisgICAgYW9kZXYtPmFjdGlv biA9IExJQlhMX19ERVZJQ0VfQUNUSU9OX0FERDsKKyAgICBsaWJ4bF9fd2FpdF9kZXZpY2VfY29u bmVjdGlvbihlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47CisKK291dDoKKyAgICBhb2Rldi0+cmMg PSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdjLCBhb2Rldik7CisgICAgcmV0dXJuOworfQor CitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X2xpc3RfZm9yX3VzYmN0cmwobGlieGxf X2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWQgdXNiY3RybCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICoqdXNi ZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKm51bSk7CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlKGxpYnhs X19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KTsKKworLyogQU8gZnVuY3Rpb24g dG8gcmVtb3ZlIGEgdXNiIGNvbnRyb2xsZXIuCisgKgorICogR2VuZXJhbGx5LCBpdCBkb2VzOgor ICogMSkgY2hlY2sgaWYgdGhlIHVzYiBjb250cm9sbGVyIGV4aXN0cyBvciBub3QKKyAqIDIpIHJl bW92ZSBhbGwgdXNiIGRldmljZXMgdW5kZXIgY29udHJvbGxlcgorICogMykgcmVtb3ZlIHVzYiBj b250cm9sbGVyIGluZm9ybWF0aW9uIGZyb20geGVuc3RvcmUKKyAqCisgKiBCZWZvcmUgY2FsbGlu ZyB0aGlzIGZ1bmN0aW9uLCBhb2RldiBzaG91bGQgYmUgcHJvcGVybHkgZmlsbGVkOgorICogYW9k ZXYtPmFvLCBhb2Rldi0+ZGV2LCBhb2Rldi0+Y2FsbGJhY2ssIC4uLgorICovCit2b2lkIGxpYnhs X19pbml0aWF0ZV9kZXZpY2VfdXNiY3RybF9yZW1vdmUobGlieGxfX2VnYyAqZWdjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX19hb19kZXZpY2UgKmFv ZGV2KQoreworICAgIFNUQVRFX0FPX0dDKGFvZGV2LT5hbyk7CisgICAgbGlieGxfZGV2aWNlX3Vz YmRldiAqdXNiZGV2cyA9IE5VTEw7CisgICAgaW50IG51bV91c2JkZXYgPSAwOworICAgIGludCBp LCByYzsKKyAgICB1aW50MzJfdCBkb21pZCA9IGFvLT5kb21pZDsKKyAgICBpbnQgdXNiY3RybF9k ZXZpZCA9IGFvZGV2LT5kZXYtPmRldmlkOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0 cmw7CisgICAgbGlieGxfdXNiY3RybGluZm8gdXNiY3RybGluZm87CisKKyAgICBsaWJ4bF9kZXZp Y2VfdXNiY3RybF9pbml0KCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1 c2JjdHJsaW5mbyk7CisgICAgdXNiY3RybC5kZXZpZCA9IHVzYmN0cmxfZGV2aWQ7CisKKyAgICBy YyA9IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0cmwsICZ1 c2JjdHJsaW5mbyk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGlmICh1c2JjdHJsaW5m by50eXBlICE9IExJQlhMX1VTQkNUUkxfVFlQRV9QVikgeworICAgICAgICBMT0coRVJST1IsICJV bnN1cHBvcnRlZCBVU0IgY29udHJvbGxlciB0eXBlIik7CisgICAgICAgIHJjID0gRVJST1JfRkFJ TDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogUmVtb3ZlIHVzYiBkZXZpY2Vz IGZpcnN0ICovCisgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmRldl9saXN0X2Zvcl91c2JjdHJs KGdjLCBkb21pZCwgdXNiY3RybF9kZXZpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJnVzYmRldnMsICZudW1fdXNiZGV2KTsKKyAgICBpZiAocmMpIGdv dG8gb3V0OworCisgICAgZm9yIChpID0gMDsgaSA8IG51bV91c2JkZXY7IGkrKykgeworICAgICAg ICByYyA9IGxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZShnYywgZG9taWQsICZ1c2JkZXZzW2ld KTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJsaWJ4bF9fZGV2 aWNlX3VzYmRldl9yZW1vdmUgZmFpbGVkOiBjb250cm9sbGVyICVkLCAiCisgICAgICAgICAgICAg ICAgInBvcnQgJWQiLCB1c2JkZXZzW2ldLmN0cmwsIHVzYmRldnNbaV0ucG9ydCk7CisgICAgICAg ICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2Jj dHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVz YmN0cmxpbmZvKTsKKworICAgIC8qIFJlbW92ZSB1c2JjdHJsICovCisgICAgbGlieGxfX2luaXRp YXRlX2RldmljZV9nZW5lcmljX3JlbW92ZShlZ2MsIGFvZGV2KTsKKyAgICByZXR1cm47CisKK291 dDoKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9kaXNwb3NlKCZ1c2JjdHJsKTsKKyAgICBsaWJ4 bF91c2JjdHJsaW5mb19kaXNwb3NlKCZ1c2JjdHJsaW5mbyk7CisgICAgYW9kZXYtPnJjID0gcmM7 CisgICAgYW9kZXYtPmNhbGxiYWNrKGVnYywgYW9kZXYpOworICAgIHJldHVybjsKK30KKworc3Rh dGljIGNvbnN0IGNoYXIgKnZ1c2JfYmVfZnJvbV94c19mZShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBj aGFyICpmZV9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCB0Z3RfZG9taWQpCit7CisgICAgY29uc3QgY2hhciAqYmVfcGF0aDsKKyAgICBpbnQgcjsK KyAgICB1aW50MzJfdCBiZV9kb21pZCwgZmVfZG9taWQ7CisKKyAgICByID0gbGlieGxfX3hzX3Jl YWRfY2hlY2tlZChnYywgWEJUX05VTEwsIEdDU1BSSU5URigiJXMvYmFja2VuZCIsIGZlX3BhdGgp LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiZV9wYXRoKTsKKyAgICBpZiAociB8 fCAhYmVfcGF0aCkgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBDaGVjayB0byBzZWUgdGhhdCBpdCBo YXMgdGhlIHByb3BlciBmb3JtLCBhbmQgdGhhdCBmZV9kb21pZCA9PQorICAgICAqIHRhcmdldCBk b21pZCAqLworICAgIHIgPSBzc2NhbmYoYmVfcGF0aCwgIi9sb2NhbC9kb21haW4vJWQvYmFja2Vu ZC92dXNiLyVkIiwKKyAgICAgICAgICAgICAgICZiZV9kb21pZCwgJmZlX2RvbWlkKTsKKworICAg IGlmIChyICE9IDIgfHwgZmVfZG9taWQgIT0gdGd0X2RvbWlkKSB7CisgICAgICAgIExPRyhFUlJP UiwgIk1hbGZvcm1lZCBiYWNrZW5kLCByZWZ1c2luZyB0byB1c2UiKTsKKyAgICAgICAgcmV0dXJu IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGJlX3BhdGg7Cit9CisKK2xpYnhsX2RldmljZV91 c2JjdHJsICoKK2xpYnhsX2RldmljZV91c2JjdHJsX2xpc3QobGlieGxfY3R4ICpjdHgsIHVpbnQz Ml90IGRvbWlkLCBpbnQgKm51bSkKK3sKKyAgICBHQ19JTklUKGN0eCk7CisgICAgbGlieGxfZGV2 aWNlX3VzYmN0cmwgKnVzYmN0cmxzID0gTlVMTDsKKyAgICBjaGFyICpwYXRoID0gTlVMTDsKKyAg ICBjaGFyICoqZW50cnkgPSBOVUxMOworICAgIHVuc2lnbmVkIGludCBuZW50cmllcyA9IDA7CisK KyAgICAqbnVtID0gMDsKKworICAgIHBhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiIiwK KyAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0aChnYywgZG9taWQpKTsK KyAgICBlbnRyeSA9IGxpYnhsX194c19kaXJlY3RvcnkoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmbmVu dHJpZXMpOworCisgICAgaWYgKGVudHJ5ICYmIG5lbnRyaWVzKSB7CisgICAgICAgIHVzYmN0cmxz ID0gbGlieGxfX3phbGxvYyhOT0dDLCBzaXplb2YoKnVzYmN0cmxzKSAqIG5lbnRyaWVzKTsKKyAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmw7CisgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JjdHJsICplbmQgPSB1c2JjdHJscyArIG5lbnRyaWVzOworICAgICAgICBmb3IgKHVzYmN0 cmwgPSB1c2JjdHJsczsKKyAgICAgICAgICAgICB1c2JjdHJsIDwgZW5kOworICAgICAgICAgICAg IHVzYmN0cmwrKywgZW50cnkrKywgKCpudW0pKyspIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIg KnRtcCwgKmJlX3BhdGgsICpmZV9wYXRoOworICAgICAgICAgICAgaW50IHJldDsKKworICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCh1c2JjdHJsKTsKKyAgICAgICAgICAgIHVz YmN0cmwtPmRldmlkID0gYXRvaSgqZW50cnkpOworCisjZGVmaW5lIFJFQURfU1VCUEFUSChwYXRo LCBzdWJwYXRoKSAoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg IHJldCA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRG KCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnRtcCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlm IChyZXQpIGdvdG8gb3V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIChjaGFyICopdG1wOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSkKKworI2RlZmluZSBSRUFEX1NVQlBBVEhf SU5UKHBhdGgsIHN1YnBhdGgpICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICByZXQgPSBsaWJ4bF9feHNfcmVhZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BS SU5URigiJXMvIiBzdWJwYXRoLCBwYXRoKSwgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICZ0bXApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICBpZiAocmV0KSBnb3RvIG91dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICB0bXAgPyBhdG9pKHRtcCkgOiAtMTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0pCisKKyAgICAgICAgICAgIGZlX3Bh dGggPSBHQ1NQUklOVEYoIiVzLyVzIiwgcGF0aCwgKmVudHJ5KTsKKyAgICAgICAgICAgIGJlX3Bh dGggPSB2dXNiX2JlX2Zyb21feHNfZmUoZ2MsIGZlX3BhdGgsIGRvbWlkKTsKKyAgICAgICAgICAg IGlmICghYmVfcGF0aCkgZ290byBvdXQ7CisgICAgICAgICAgICB1c2JjdHJsLT5iYWNrZW5kX2Rv bWlkID0gUkVBRF9TVUJQQVRIX0lOVChmZV9wYXRoLCAiYmFja2VuZC1pZCIpOworICAgICAgICAg ICAgdXNiY3RybC0+dmVyc2lvbiA9IFJFQURfU1VCUEFUSF9JTlQoYmVfcGF0aCwgInVzYi12ZXIi KTsKKyAgICAgICAgICAgIHVzYmN0cmwtPnBvcnRzID0gUkVBRF9TVUJQQVRIX0lOVChiZV9wYXRo LCAibnVtLXBvcnRzIik7CisgICAgICAgICAgICBsaWJ4bF91c2JjdHJsX3R5cGVfZnJvbV9zdHJp bmcoUkVBRF9TVUJQQVRIKGJlX3BhdGgsICJ0eXBlIiksCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnVzYmN0cmwtPnR5cGUpOworCisjdW5kZWYgUkVBRF9TVUJQ QVRICisjdW5kZWYgUkVBRF9TVUJQQVRIX0lOVAorICAgICAgIH0KKyAgICB9CisKKyAgICBHQ19G UkVFOworICAgIHJldHVybiB1c2JjdHJsczsKKworb3V0OgorICAgIExPRyhFUlJPUiwgIlVuYWJs ZSB0byBsaXN0IFVTQiBDb250cm9sbGVycyIpOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2xp c3RfZnJlZSh1c2JjdHJscywgKm51bSk7CisgICAgR0NfRlJFRTsKKyAgICAqbnVtID0gMDsKKyAg ICByZXR1cm4gTlVMTDsKK30KKworaW50IGxpYnhsX2RldmljZV91c2JjdHJsX2dldGluZm8obGli eGxfY3R4ICpjdHgsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmN0cmwgKnVzYmN0cmwsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsaWJ4bF91c2JjdHJsaW5mbyAqdXNiY3RybGluZm8pCit7CisgICAgR0Nf SU5JVChjdHgpOworICAgIGNvbnN0IGNoYXIgKmRvbXBhdGgsICpmZV9wYXRoLCAqYmVfcGF0aCwg KnRtcDsKKyAgICBpbnQgcmM7CisKKyAgICB1c2JjdHJsaW5mby0+ZGV2aWQgPSB1c2JjdHJsLT5k ZXZpZDsKKworI2RlZmluZSBSRUFEX1NVQlBBVEgocGF0aCwgc3VicGF0aCkgKHsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2No ZWNrZWQoZ2MsIFhCVF9OVUxMLCAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy8iIHN1YnBhdGgsIHBhdGgpLCAg ICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRtcCk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAocmMpIGdvdG8gb3V0OyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAoY2hhciAq KXRtcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0pCisKKyNkZWZpbmUgUkVBRF9TVUJQQVRIX0lOVChwYXRoLCBzdWJwYXRoKSAoeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvIiBzdWJwYXRoLCBwYXRo KSwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdG1w ID8gYXRvaSh0bXApIDogLTE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICB9KQorCisgICAgZG9tcGF0aCA9IGxpYnhsX194c19nZXRfZG9tcGF0aChnYywg ZG9taWQpOworICAgIGZlX3BhdGggPSBHQ1NQUklOVEYoIiVzL2RldmljZS92dXNiLyVkIiwgZG9t cGF0aCwgdXNiY3RybC0+ZGV2aWQpOworICAgIGJlX3BhdGggPSBSRUFEX1NVQlBBVEgoZmVfcGF0 aCwgImJhY2tlbmQiKTsKKyAgICB1c2JjdHJsaW5mby0+YmFja2VuZCA9IGxpYnhsX19zdHJkdXAo Tk9HQywgYmVfcGF0aCk7CisgICAgdXNiY3RybGluZm8tPmJhY2tlbmRfaWQgPSBSRUFEX1NVQlBB VEhfSU5UKGZlX3BhdGgsICJiYWNrZW5kLWlkIik7CisgICAgdXNiY3RybGluZm8tPnN0YXRlID0g UkVBRF9TVUJQQVRIX0lOVChmZV9wYXRoLCAic3RhdGUiKTsKKyAgICB1c2JjdHJsaW5mby0+ZXZ0 Y2ggPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJldmVudC1jaGFubmVsIik7CisgICAgdXNi Y3RybGluZm8tPnJlZl91cmIgPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3BhdGgsICJ1cmItcmluZy1y ZWYiKTsKKyAgICB1c2JjdHJsaW5mby0+cmVmX2Nvbm4gPSBSRUFEX1NVQlBBVEhfSU5UKGZlX3Bh dGgsICJ1cmItcmluZy1yZWYiKTsKKyAgICB0bXAgPSBSRUFEX1NVQlBBVEgoYmVfcGF0aCwgImZy b250ZW5kIik7CisgICAgdXNiY3RybGluZm8tPmZyb250ZW5kID0gbGlieGxfX3N0cmR1cChOT0dD LCB0bXApOworICAgIHVzYmN0cmxpbmZvLT5mcm9udGVuZF9pZCA9IFJFQURfU1VCUEFUSF9JTlQo YmVfcGF0aCwgImZyb250ZW5kLWlkIik7CisgICAgdXNiY3RybGluZm8tPnBvcnRzID0gUkVBRF9T VUJQQVRIX0lOVChiZV9wYXRoLCAibnVtLXBvcnRzIik7CisgICAgdXNiY3RybGluZm8tPnZlcnNp b24gPSBSRUFEX1NVQlBBVEhfSU5UKGJlX3BhdGgsICJ1c2ItdmVyIik7OworICAgIHRtcCA9IFJF QURfU1VCUEFUSChiZV9wYXRoLCAidHlwZSIpOworICAgIGxpYnhsX3VzYmN0cmxfdHlwZV9mcm9t X3N0cmluZyh0bXAsICZ1c2JjdHJsaW5mby0+dHlwZSk7CisKKyN1bmRlZiBSRUFEX1NVQlBBVEgK KyN1bmRlZiBSRUFEX1NVQlBBVEhfSU5UCisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBHQ19G UkVFOworICAgIHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV91c2Jj dHJsKGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZp ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bCAqdXNiY3RybCkKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybHM7CisgICAg aW50IG5iID0gMDsKKyAgICBpbnQgaSwgcmM7CisKKyAgICB1c2JjdHJscyA9IGxpYnhsX2Rldmlj ZV91c2JjdHJsX2xpc3QoY3R4LCBkb21pZCwgJm5iKTsKKyAgICBpZiAoIXVzYmN0cmxzKSByZXR1 cm4gRVJST1JfRkFJTDsKKworICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICBmb3IgKGkgPSAwOyBp IDwgbmI7IGkrKykgeworICAgICAgICBpZiAoZGV2aWQgPT0gdXNiY3RybHNbaV0uZGV2aWQpIHsK KyAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2NvcHkoY3R4LCB1c2JjdHJsLCAmdXNi Y3RybHNbaV0pOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9saXN0X2ZyZWUodXNiY3Ry bHMsIG5iKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkICp6YWxsb2NfZGlyZW50 KGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmRpcnBhdGgpCit7CisgICAgc2l6ZV90IG5lZWQg PSBvZmZzZXRvZihzdHJ1Y3QgZGlyZW50LCBkX25hbWUpICsKKyAgICAgICAgICAgICAgICAgIHBh dGhjb25mKGRpcnBhdGgsIF9QQ19OQU1FX01BWCkgKyAxOworCisgICAgcmV0dXJuIGxpYnhsX196 YWxsb2MoZ2MsIG5lZWQpOworfQorCitzdGF0aWMgY2hhciAqdXNiZGV2X2J1c2FkZHJfdG9fYnVz aWQobGlieGxfX2djICpnYywgaW50IGJ1cywgaW50IGFkZHIpCit7CisgICAgRElSICpkaXI7Cisg ICAgY2hhciAqYnVzaWQgPSBOVUxMOworICAgIHN0cnVjdCBkaXJlbnQgKmRlX2J1ZjsKKyAgICBz dHJ1Y3QgZGlyZW50ICpkZTsKKworICAgIC8qIGludmFsaWQgaG9zdGJ1cyBvciBob3N0YWRkciAq LworICAgIGlmIChidXMgPCAxIHx8IGFkZHIgPCAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKwor ICAgIGRpciA9IG9wZW5kaXIoU1lTRlNfVVNCX0RFVik7CisgICAgaWYgKCFkaXIpIHsKKyAgICAg ICAgTE9HRShFUlJPUiwgIm9wZW5kaXIgZmFpbGVkOiAnJXMnIiwgU1lTRlNfVVNCX0RFVik7Cisg ICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGRlX2J1ZiA9IHphbGxvY19kaXJlbnQo Z2MsIFNZU0ZTX1VTQl9ERVYpOworCisgICAgZm9yICg7OykgeworICAgICAgICBjaGFyICpmaWxl bmFtZTsKKyAgICAgICAgdm9pZCAqYnVmOworICAgICAgICBpbnQgYnVzbnVtID0gLTE7CisgICAg ICAgIGludCBkZXZudW0gPSAtMTsKKworICAgICAgICBpbnQgciA9IHJlYWRkaXJfcihkaXIsIGRl X2J1ZiwgJmRlKTsKKyAgICAgICAgaWYgKHIpIHsKKyAgICAgICAgICAgIExPR0UoRVJST1IsICJm YWlsZWQgdG8gcmVhZGRpciAlcyIsIFNZU0ZTX1VTQl9ERVYpOworICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFkZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAg ICAgIGlmICghc3RyY21wKGRlLT5kX25hbWUsICIuIikgfHwKKyAgICAgICAgICAgICFzdHJjbXAo ZGUtPmRfbmFtZSwgIi4uIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmaWxl bmFtZSA9IEdDU1BSSU5URihTWVNGU19VU0JfREVWICIvJXMvZGV2bnVtIiwgZGUtPmRfbmFtZSk7 CisgICAgICAgIGlmICghbGlieGxfX3JlYWRfc3lzZnNfZmlsZV9jb250ZW50cyhnYywgZmlsZW5h bWUsICZidWYsIE5VTEwpKQorICAgICAgICAgICAgZGV2bnVtID0gYXRvaShidWYpOworCisgICAg ICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9idXNudW0iLCBkZS0+ ZF9uYW1lKTsKKyAgICAgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNmc19maWxlX2NvbnRlbnRzKGdj LCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAgICAgICBidXNudW0gPSBhdG9pKGJ1Zik7 CisKKyAgICAgICAgaWYgKGJ1cyA9PSBidXNudW0gJiYgYWRkciA9PSBkZXZudW0pIHsKKyAgICAg ICAgICAgIGJ1c2lkID0gbGlieGxfX3N0cmR1cChnYywgZGUtPmRfbmFtZSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGNsb3NlZGlyKGRpcik7CisgICAgcmV0 dXJuIGJ1c2lkOworfQorCitzdGF0aWMgaW50IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQobGli eGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdWludDhfdCAqYnVzLCB1aW50OF90ICphZGRyKQoreworICAgIGNoYXIgKmZp bGVuYW1lOworICAgIHZvaWQgKmJ1ZjsKKworICAgIGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZT X1VTQl9ERVYgIi8lcy9idXNudW0iLCBidXNpZCk7CisgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNm c19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAgICpidXMg PSBhdG9pKGJ1Zik7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gRVJST1JfRkFJTDsKKworICAg IGZpbGVuYW1lID0gR0NTUFJJTlRGKFNZU0ZTX1VTQl9ERVYgIi8lcy9kZXZudW0iLCBidXNpZCk7 CisgICAgaWYgKCFsaWJ4bF9fcmVhZF9zeXNmc19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwg JmJ1ZiwgTlVMTCkpCisgICAgICAgICphZGRyID0gYXRvaShidWYpOworICAgIGVsc2UKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBn ZXRfYXNzaWduZWRfZGV2aWNlcyhsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2ICoqbGlzdCwgaW50ICpudW0pCit7CisgICAg Y2hhciAqKmRvbWxpc3Q7CisgICAgdW5zaWduZWQgaW50IG5kb20gPSAwOworICAgIGludCBpLCBq LCBrOworICAgIGludCByYzsKKworICAgICpsaXN0ID0gTlVMTDsKKyAgICAqbnVtID0gMDsKKwor ICAgIGRvbWxpc3QgPSBsaWJ4bF9feHNfZGlyZWN0b3J5KGdjLCBYQlRfTlVMTCwgIi9sb2NhbC9k b21haW4iLCAmbmRvbSk7CisgICAgZm9yIChpID0gMDsgaSA8IG5kb207IGkrKykgeworICAgICAg ICBjaGFyICpwYXRoOworICAgICAgICBjaGFyICoqdXNiY3RybHM7CisgICAgICAgIHVuc2lnbmVk IGludCBuYyA9IDA7CisgICAgICAgIHVpbnQzMl90IGRvbWlkID0gYXRvaShkb21saXN0W2ldKTsK KworICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYiIsIGxpYnhsX194c19n ZXRfZG9tcGF0aChnYywgZG9taWQpKTsKKyAgICAgICAgdXNiY3RybHMgPSBsaWJ4bF9feHNfZGly ZWN0b3J5KGdjLCBYQlRfTlVMTCwgcGF0aCwgJm5jKTsKKworICAgICAgICBmb3IgKGogPSAwOyBq IDwgbmM7IGorKykgeworICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdG1wID0gTlVM TDsKKyAgICAgICAgICAgIGludCBuZCA9IDA7CisKKyAgICAgICAgICAgIHJjID0gbGlieGxfX2Rl dmljZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChnYywgZG9taWQsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaSh1c2JjdHJsc1tqXSks CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnRtcCwgJm5kKTsKKyAgICAgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAg IGlmICghbmQpIGNvbnRpbnVlOworCisgICAgICAgICAgICBHQ1JFQUxMT0NfQVJSQVkoKmxpc3Qs ICpudW0gKyBuZCk7CisgICAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbmQ7IGsrKykgeworICAg ICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXZfY29weShDVFgsICpsaXN0ICsgKm51bSwg dG1wICsgayk7CisgICAgICAgICAgICAgICAgKCpudW0pKys7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKKworb3V0OgorICAgIExPRyhFUlJPUiwgImZh aWwgdG8gZ2V0IGFzc2lnbmVkIGRldmljZXMiKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRp YyBib29sIGlzX3VzYmRldl9pbl9hcnJheShsaWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXZzLCBp bnQgbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2Jk ZXYgKnVzYmRldikKK3sKKyAgICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBudW07IGkr KykgeworICAgICAgICBpZiAodXNiZGV2c1tpXS51Lmhvc3RkZXYuaG9zdGJ1cyA9PSB1c2JkZXYt PnUuaG9zdGRldi5ob3N0YnVzICYmCisgICAgICAgICAgICB1c2JkZXZzW2ldLnUuaG9zdGRldi5o b3N0YWRkciA9PSB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcikKKyAgICAgICAgICAgIHJldHVy biB0cnVlOworICAgIH0KKworICAgIHJldHVybiBmYWxzZTsKK30KKworLyogY2hlY2sgaWYgVVNC IGRldmljZSB0eXBlIGlzIGFzc2lnbmFibGUgKi8KK3N0YXRpYyBib29sIGlzX3VzYmRldl9hc3Np Z25hYmxlKGxpYnhsX19nYyAqZ2MsIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAg ICBpbnQgY2xhc3Njb2RlOworICAgIGNoYXIgKmZpbGVuYW1lOworICAgIHZvaWQgKmJ1ZiA9IE5V TEw7CisgICAgY2hhciAqYnVzaWQgPSBOVUxMOworCisgICAgYnVzaWQgPSB1c2JkZXZfYnVzYWRk cl90b19idXNpZChnYywgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGJ1cywKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RhZGRyKTsKKyAgICBp ZiAoIWJ1c2lkKSByZXR1cm4gZmFsc2U7CisKKyAgICBmaWxlbmFtZSA9IEdDU1BSSU5URihTWVNG U19VU0JfREVWICIvJXMvYkRldmljZUNsYXNzIiwgYnVzaWQpOworICAgIGlmIChsaWJ4bF9fcmVh ZF9zeXNmc19maWxlX2NvbnRlbnRzKGdjLCBmaWxlbmFtZSwgJmJ1ZiwgTlVMTCkpCisgICAgICAg IHJldHVybiBmYWxzZTsKKworICAgIGNsYXNzY29kZSA9IGF0b2koYnVmKTsKKyAgICByZXR1cm4g Y2xhc3Njb2RlICE9IFVTQkhVQl9DTEFTU19DT0RFOworfQorCisvKiBnZXQgdXNiIGRldmljZXMg dW5kZXIgY2VydGFpbiB1c2IgY29udHJvbGxlciAqLworc3RhdGljIGludAorbGlieGxfX2Rldmlj ZV91c2JkZXZfbGlzdF9mb3JfdXNiY3RybChsaWJ4bF9fZ2MgKmdjLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWQgdXNiY3RybCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqKnVzYmRldnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqbnVtKQoreworICAgIGNv bnN0IGNoYXIgKmZlX3BhdGgsICpiZV9wYXRoLCAqbnVtX2RldnM7CisgICAgaW50IG4sIGksIHJj OworCisgICAgKnVzYmRldnMgPSBOVUxMOworICAgICpudW0gPSAwOworCisgICAgZmVfcGF0aCA9 IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1c2IvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg bGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCksIHVzYmN0cmwpOworCisgICAgYmVfcGF0 aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwgZG9taWQpOworICAgIGlmICghYmVf cGF0aCkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAg IH0KKworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tlZChnYywgWEJUX05VTEwsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5URigiJXMvbnVtLXBvcnRzIiwgYmVf cGF0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZudW1fZGV2cyk7CisgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgIG4gPSBudW1fZGV2cyA/IGF0b2kobnVtX2RldnMpIDog MDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHsKKyAgICAgICAgY29uc3QgY2hhciAq YnVzaWQ7CisgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldjsKKworICAgICAgICBy YyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgR0NTUFJJTlRGKCIlcy9wb3J0LyVkIiwgYmVfcGF0aCwgaSAr IDEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1c2lkKTsKKyAgICAg ICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBpZiAoYnVzaWQgJiYgc3RyY21wKGJ1c2lk LCAiIikpIHsKKyAgICAgICAgICAgIEdDUkVBTExPQ19BUlJBWSgqdXNiZGV2cywgKm51bSArIDEp OworICAgICAgICAgICAgdXNiZGV2ID0gKnVzYmRldnMgKyAqbnVtOworICAgICAgICAgICAgKCpu dW0pKys7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQodXNiZGV2KTsKKyAg ICAgICAgICAgIHVzYmRldi0+Y3RybCA9IHVzYmN0cmw7CisgICAgICAgICAgICB1c2JkZXYtPnBv cnQgPSBpICsgMTsKKyAgICAgICAgICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBF X0hPU1RERVY7CisgICAgICAgICAgICByYyA9IHVzYmRldl9idXNhZGRyX2Zyb21fYnVzaWQoZ2Ms IGJ1c2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2Jk ZXYtPnUuaG9zdGRldi5ob3N0YnVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcik7CisgICAgICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmMgPSAwOworCitvdXQ6Cisg ICAgcmV0dXJuIHJjOworfQorCisvKiBnZXQgYWxsIHVzYiBkZXZpY2VzIG9mIHRoZSBkb21haW4g Ki8KK2xpYnhsX2RldmljZV91c2JkZXYgKgorbGlieGxfZGV2aWNlX3VzYmRldl9saXN0KGxpYnhs X2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwgaW50ICpudW0pCit7CisgICAgR0NfSU5JVChjdHgp OworICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldnMgPSBOVUxMOworICAgIGNvbnN0IGNo YXIgKnBhdGg7CisgICAgY2hhciAqKnVzYmN0cmxzOworICAgIHVuc2lnbmVkIGludCBuYyA9IDA7 CisgICAgaW50IGksIGo7CisKKyAgICAqbnVtID0gMDsKKworICAgIHBhdGggPSBHQ1NQUklOVEYo IiVzL2RldmljZS92dXNiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRf ZG9tcGF0aChnYywgZG9taWQpKTsKKyAgICB1c2JjdHJscyA9IGxpYnhsX194c19kaXJlY3Rvcnko Z2MsIFhCVF9OVUxMLCBwYXRoLCAmbmMpOworCisgICAgZm9yIChpID0gMDsgaSA8IG5jOyBpKysp IHsKKyAgICAgICAgaW50IHIsIG5kID0gMDsKKyAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAq dG1wID0gTlVMTDsKKworICAgICAgICByID0gbGlieGxfX2RldmljZV91c2JkZXZfbGlzdF9mb3Jf dXNiY3RybChnYywgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGF0b2kodXNiY3RybHNbaV0pLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1wLCAmbmQpOworICAgICAgICBpZiAoIXIgfHwg IW5kKSBjb250aW51ZTsKKworICAgICAgICB1c2JkZXZzID0gbGlieGxfX3JlYWxsb2MoTk9HQywg dXNiZGV2cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdXNiZGV2 cykgKiAoKm51bSArIG5kKSk7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCBuZDsgaisrKSB7Cisg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2NvcHkoY3R4LCB1c2JkZXZzICsgKm51bSwg dG1wICsgaik7CisgICAgICAgICAgICAoKm51bSkrKzsKKyAgICAgICAgfQorICAgIH0KKworICAg IEdDX0ZSRUU7CisgICAgcmV0dXJuIHVzYmRldnM7Cit9CisKKy8qIGZpbmQgZmlyc3QgdW51c2Vk IGNvbnRyb2xsZXI6cG9ydCBhbmQgZ2l2ZSB0aGF0IHRvIHVzYiBkZXZpY2UgKi8KK3N0YXRpYyBp bnQKK2xpYnhsX19kZXZpY2VfdXNiZGV2X3NldF9kZWZhdWx0X3VzYmN0cmwobGlieGxfX2djICpn YywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBsaWJ4bF9kZXZpY2VfdXNi Y3RybCAqdXNiY3RybHMgPSBOVUxMOworICAgIGludCBudW1jdHJsID0gMDsKKyAgICBpbnQgaSwg aiwgcmM7CisKKyAgICB1c2JjdHJscyA9IGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3QoQ1RYLCBk b21pZCwgJm51bWN0cmwpOworICAgIGlmICghbnVtY3RybCB8fCAhdXNiY3RybHMpIHsKKyAgICAg ICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtY3RybDsgaSsrKSB7CisgICAgICAgIGZvciAoaiA9IDA7IGogPCB1c2Jj dHJsc1tpXS5wb3J0czsgaisrKSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwYXRoLCAqdG1w OworCisgICAgICAgICAgICBwYXRoID0gR0NTUFJJTlRGKCIlcy9iYWNrZW5kL3Z1c2IvJWQvJWQv cG9ydC8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9t cGF0aChnYywgTElCWExfVE9PTFNUQUNLX0RPTUlEKSwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZG9taWQsIHVzYmN0cmxzW2ldLmRldmlkLCBqICsgMSk7CisgICAgICAgICAgICByYyA9 IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxMLCBwYXRoLCAmdG1wKTsKKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAgIGlmICh0bXAgJiYgIXN0cmNt cCh0bXAsICIiKSkgeworICAgICAgICAgICAgICAgIHVzYmRldi0+Y3RybCA9IHVzYmN0cmxzW2ld LmRldmlkOworICAgICAgICAgICAgICAgIHVzYmRldi0+cG9ydCA9IGogKyAxOworICAgICAgICAg ICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQorICAgIH0KKworICAgIC8qIG5vIGF2YWlsYWJsZSBjb250cm9sbGVyOnBvcnQg Ki8KKyAgICByYyA9IEVSUk9SX0ZBSUw7CisKK291dDoKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3Ry bF9saXN0X2ZyZWUodXNiY3RybHMsIG51bWN0cmwpOworICAgIHJldHVybiByYzsKK30KKworLyog RmlsbCBpbiB1c2IgaW5mb3JtYXRpb24gd2l0aCBkZWZhdWx0IHZhbHVlLgorICoKKyAqIEdlbmVy YWxseSwgaXQgZG9lczoKKyAqIDEpIGlmICJjb250cm9sbGVyIiBpcyBub3Qgc3BlY2lmaWVkOgor ICogICAgLSBpZiAicG9ydCIgaXMgbm90IHNwZWNpZmllZCwgdHJ5IHRvIGZpbmQgYW4gYXZhaWxh YmxlIGNvbnRyb2xsZXI6cG9ydCwKKyAqICAgICAgaWYgZm91bmQsIHVzZSB0aGF0OyBvdGhlcndp c2UsIGNyZWF0ZSBhIG5ldyBjb250cm9sbGVyLCB1c2UgdGhpcworICogICAgICBjb250cm9sbGVy IGFuZCBpdHMgZmlyc3QgcG9ydAorICogICAgLSBpZiAicG9ydCIgaXMgc3BlY2lmaWVkLCByZXBv cnQgZXJyb3IuCisgKiAyKSBpZiAiY29udHJvbGxlciIgaXMgc3BlY2lmaWVkLCBidXQgcG9ydCBp cyBub3Qgc3BlY2lmaWVkOgorICogICAgdHJ5IHRvIGZpbmQgYW4gYXZhaWxhYmxlIHBvcnQgdW5k ZXIgdGhpcyBjb250cm9sbGVyLCBpZiBmb3VuZCwgdXNlCisgKiAgICB0aGF0LCBvdGhlcndpc2Us IHJlcG9ydCBlcnJvci4KKyAqIDMpIGlmIGJvdGggImNvbnRyb2xsZXIiIGFuZCAicG9ydCIgYXJl IHNwZWNpZmllZDoKKyAqICAgIGNoZWNrIHRoZSBjb250cm9sbGVyOnBvcnQgaXMgYXZhaWxhYmxl LCBpZiBub3QsIHJlcG9ydCBlcnJvci4KKyAqLworc3RhdGljIGludCBsaWJ4bF9fZGV2aWNlX3Vz YmRldl9zZXRkZWZhdWx0KGxpYnhsX19nYyAqZ2MsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCit7 CisgICAgaW50IHJjOworCisgICAgaWYgKCF1c2JkZXYtPnR5cGUpCisgICAgICAgIHVzYmRldi0+ dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hPU1RERVY7CisKKyAgICBpZiAodXNiZGV2LT5jdHJs ID09IC0xKSB7CisgICAgICAgIGlmICh1c2JkZXYtPnBvcnQpIHsKKyAgICAgICAgICAgIExPRyhF UlJPUiwgIlVTQiBjb250cm9sbGVyIG11c3QgYmUgc3BlY2lmaWVkIGlmIHlvdSBzcGVjaWZ5IHBv cnQiKTsKKyAgICAgICAgICAgIHJldHVybiBFUlJPUl9JTlZBTDsKKyAgICAgICAgfQorCisgICAg ICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfc2V0X2RlZmF1bHRfdXNiY3RybChnYywgZG9t aWQsIHVzYmRldik7CisgICAgICAgIC8qIElmIG5vIGV4aXN0aW5nIGNvbnRyb2xsZXIgdG8gaG9z dCB0aGlzIHVzYiBkZXZpY2UsIGFkZCBhIG5ldyBvbmUgKi8KKyAgICAgICAgaWYgKHJjKSB7Cisg ICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCAqdXNiY3RybDsKKworICAgICAgICAgICAg R0NORVcodXNiY3RybCk7CisgICAgICAgICAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0KHVz YmN0cmwpOworICAgICAgICAgICAgcmMgPSBsaWJ4bF9fZGV2aWNlX3VzYmN0cmxfc2V0ZGVmYXVs dChnYywgZG9taWQsIHVzYmN0cmwpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7 CisKKyAgICAgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA9PSAtMSkgeworICAgICAgICAgICAg ICAgIHVzYmN0cmwtPmRldmlkID0gbGlieGxfX2RldmljZV9uZXh0aWQoZ2MsIGRvbWlkLCAidnVz YiIpOworICAgICAgICAgICAgICAgIGlmICh1c2JjdHJsLT5kZXZpZCA8IDApIHsKKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgICAgICAgICBnb3RvIG91 dDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJjID0g bGlieGxfX2RldmljZV91c2JjdHJsX2FkZF94ZW5zdG9yZShnYywgZG9taWQsIHVzYmN0cmwsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRl X2pzb24pOworICAgICAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgdXNi ZGV2LT5jdHJsID0gdXNiY3RybC0+ZGV2aWQ7CisgICAgICAgICAgICB1c2JkZXYtPnBvcnQgPSAx OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogQSBjb250cm9sbGVyIHdhcyBz cGVjaWZpZWQ7IGxvb2sgaXQgdXAgKi8KKyAgICAgICAgY29uc3QgY2hhciAqZmVfcGF0aCwgKmJl X3BhdGgsICp0bXA7CisKKyAgICAgICAgZmVfcGF0aCA9IEdDU1BSSU5URigiJXMvZGV2aWNlL3Z1 c2IvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX194c19nZXRfZG9tcGF0 aChnYywgZG9taWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYmRldi0+Y3RybCk7 CisKKyAgICAgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwgZG9t aWQpOworICAgICAgICBpZiAoIWJlX3BhdGgpIHsKKyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJ TDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKHVzYmRl di0+cG9ydCkgeworICAgICAgICAgICAgLyogQSBzcGVjaWZpYyBwb3J0IHdhcyByZXF1ZXN0ZWQ7 IHNlZSBpZiBpdCdzIGF2YWlsYWJsZSAqLworICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHQ1NQUklOVEYoIiVzL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBiZV9wYXRoLCB1c2JkZXYtPnBvcnQpLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXApOworICAgICAgICAgICAgaWYg KHJjKSBnb3RvIG91dDsKKworICAgICAgICAgICAgaWYgKHRtcCAmJiBzdHJjbXAodG1wLCAiIikp IHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJUaGUgY29udHJvbGxlciBwb3J0IGlzbid0 IGF2YWlsYWJsZSIpOworICAgICAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAg ICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIC8qIE5vIHBvcnQgd2FzIHJlcXVlc3RlZC4gQ2hvb3NlIGZyZWUgcG9ydC4gKi8KKyAg ICAgICAgICAgIGludCBpLCBwb3J0czsKKworICAgICAgICAgICAgcmMgPSBsaWJ4bF9feHNfcmVh ZF9jaGVja2VkKGdjLCBYQlRfTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHQ1NQUklOVEYoIiVzL251bS1wb3J0cyIsIGJlX3BhdGgpLCAmdG1wKTsKKyAgICAg ICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgICAgIHBvcnRzID0gdG1wID8gYXRv aSh0bXApIDogMDsKKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBvcnRzOyBpKyspIHsK KyAgICAgICAgICAgICAgICByYyA9IGxpYnhsX194c19yZWFkX2NoZWNrZWQoZ2MsIFhCVF9OVUxM LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYo IiVzL3BvcnQvJWQiLCBiZV9wYXRoLCBpICsgMSksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZ0bXApOworICAgICAgICAgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgICAgICAgICBpZiAodG1wICYmICFzdHJjbXAodG1wLCAiIikpIHsKKyAg ICAgICAgICAgICAgICAgICAgdXNiZGV2LT5wb3J0ID0gaSArIDE7CisgICAgICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgaWYgKCF1c2JkZXYtPnBvcnQpIHsKKyAgICAgICAgICAgICAgICBMT0coRVJST1IsICJObyBh dmFpbGFibGUgcG9ydCB1bmRlciBzcGVjaWZpZWQgY29udHJvbGxlciIpOworICAgICAgICAgICAg ICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIHJldHVy biByYzsKK30KKworLyogQWRkIHVzYiBpbmZvcm1hdGlvbiB0byB4ZW5zdG9yZQorICoKKyAqIEFk ZGluZyBhIHVzYiBkZXZpY2Ugd29uJ3QgY3JlYXRlIG5ldyAndnVzYicgZGV2aWNlLCBidXQgb25s eSB3cml0ZQorICogdGhlIGRldmljZSBidXNpZCB0byB0aGUgY29udHJvbGxlcjpwb3J0IGluIHhl bnN0b3JlLgorICovCitzdGF0aWMgaW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X2FkZF94ZW5zdG9y ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2RldmljZV91c2JkZXYgKnVzYmRldiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24p Cit7CisgICAgY2hhciAqYmVfcGF0aCwgKmJ1c2lkOworICAgIGludCByYzsKKyAgICB4c190cmFu c2FjdGlvbl90IHQgPSBYQlRfTlVMTDsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmln OworICAgIGxpYnhsX2RldmljZV91c2JkZXYgdXNiZGV2X3NhdmVkOworICAgIGxpYnhsX19kb21h aW5fdXNlcmRhdGFfbG9jayAqbG9jayA9IE5VTEw7CisKKyAgICBsaWJ4bF9kb21haW5fY29uZmln X2luaXQoJmRfY29uZmlnKTsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiZGV2X2luaXQoJnVzYmRldl9z YXZlZCk7CisgICAgbGlieGxfZGV2aWNlX3VzYmRldl9jb3B5KENUWCwgJnVzYmRldl9zYXZlZCwg dXNiZGV2KTsKKworICAgIGJ1c2lkID0gdXNiZGV2X2J1c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYmRl di0+dS5ob3N0ZGV2Lmhvc3RidXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRkcik7CisgICAgaWYgKCFidXNpZCkgeworICAgICAg ICBMT0coREVCVUcsICJGYWlsIHRvIGdldCBidXNpZCBvZiB1c2IgZGV2aWNlIik7CisgICAgICAg IGdvdG8gb3V0OworICAgIH0KKworICAgIGlmICh1cGRhdGVfanNvbikgeworICAgICAgICBsb2Nr ID0gbGlieGxfX2xvY2tfZG9tYWluX3VzZXJkYXRhKGdjLCBkb21pZCk7CisgICAgICAgIGlmICgh bG9jaykgeworICAgICAgICAgICAgcmMgPSBFUlJPUl9MT0NLX0ZBSUw7CisgICAgICAgICAgICBn b3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2dldF9kb21haW5fY29u ZmlndXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgIGlmIChyYykgZ290byBv dXQ7CisKKyAgICAgICAgREVWSUNFX0FERCh1c2JkZXYsIHVzYmRldnMsIGRvbWlkLCAmdXNiZGV2 X3NhdmVkLAorICAgICAgICAgICAgICAgICAgIENPTVBBUkVfVVNCLCAmZF9jb25maWcpOworICAg IH0KKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfdHJhbnNhY3Rpb25f c3RhcnQoZ2MsICZ0KTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBpZiAo dXBkYXRlX2pzb24pIHsKKyAgICAgICAgICAgIHJjID0gbGlieGxfX3NldF9kb21haW5fY29uZmln dXJhdGlvbihnYywgZG9taWQsICZkX2NvbmZpZyk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8g b3V0OworICAgICAgICB9CisKKyAgICAgICAgYmVfcGF0aCA9IEdDU1BSSU5URigiJXMvYmFja2Vu ZC92dXNiLyVkLyVkL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhs X194c19nZXRfZG9tcGF0aChnYywgTElCWExfVE9PTFNUQUNLX0RPTUlEKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisg ICAgICAgIExPRyhERUJVRywgIkFkZGluZyB1c2IgZGV2aWNlICVzIHRvIHhlbnN0b3JlOiBjb250 cm9sbGVyICVkLCBwb3J0ICVkIiwKKyAgICAgICAgICAgIGJ1c2lkLCB1c2JkZXYtPmN0cmwsIHVz YmRldi0+cG9ydCk7CisKKyAgICAgICAgcmMgPSBsaWJ4bF9feHNfd3JpdGVfY2hlY2tlZChnYywg dCwgYmVfcGF0aCwgYnVzaWQpOworICAgICAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgICAg IHJjID0gbGlieGxfX3hzX3RyYW5zYWN0aW9uX2NvbW1pdChnYywgJnQpOworICAgICAgICBpZiAo IXJjKSBicmVhazsKKyAgICAgICAgaWYgKHJjIDwgMCkgZ290byBvdXQ7CisgICAgfQorCisgICAg cmMgPSAwOworCitvdXQ6CisgICAgaWYgKGxvY2spIGxpYnhsX191bmxvY2tfZG9tYWluX3VzZXJk YXRhKGxvY2spOworICAgIGxpYnhsX2RldmljZV91c2JkZXZfZGlzcG9zZSgmdXNiZGV2X3NhdmVk KTsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKKyAgICByZXR1 cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlX3hlbnN0 b3JlKGxpYnhsX19nYyAqZ2MsIHVpbnQzMl90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQor eworICAgIGNoYXIgKmJlX3BhdGg7CisKKyAgICBiZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9iYWNr ZW5kL3Z1c2IvJWQvJWQvcG9ydC8lZCIsCisgICAgICAgICAgICAgICAgICAgICAgICBsaWJ4bF9f eHNfZ2V0X2RvbXBhdGgoZ2MsIExJQlhMX1RPT0xTVEFDS19ET01JRCksCisgICAgICAgICAgICAg ICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisgICAgTE9H KERFQlVHLCAiUmVtb3ZpbmcgdXNiIGRldmljZSBmcm9tIHhlbnN0b3JlOiBjb250cm9sbGVyICVk LCBwb3J0ICVkIiwKKyAgICAgICAgdXNiZGV2LT5jdHJsLCB1c2JkZXYtPnBvcnQpOworCisgICAg cmV0dXJuIGxpYnhsX194c193cml0ZV9jaGVja2VkKGdjLCBYQlRfTlVMTCwgYmVfcGF0aCwgIiIp OworfQorCitzdGF0aWMgY2hhciAqdXNiZGV2X2J1c2lkX2Zyb21fY3RybHBvcnQobGlieGxfX2dj ICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIHJldHVybiBsaWJ4bF9f eHNfcmVhZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIEdDU1BSSU5U RigiJXMvYmFja2VuZC92dXNiLyVkLyVkL3BvcnQvJWQiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBMSUJYTF9UT09MU1RBQ0tfRE9NSUQp LAorICAgICAgICAgICAgICAgICAgICAgICAgICBkb21pZCwgdXNiZGV2LT5jdHJsLCB1c2JkZXYt PnBvcnQpKTsKK30KKworLyogZ2V0IG9yaWdpbmFsIGRyaXZlciBwYXRoIG9mIHVzYiBpbnRlcmZh Y2UsIHN0b3JlZCBpbiBAZHJ2cGF0aCAqLworc3RhdGljIGludCB1c2JpbnRmX2dldF9kcnZwYXRo KGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmludGYsIGNoYXIgKipkcnZwYXRoKQoreworICAg IGNoYXIgKnNwYXRoLCAqZHAgPSBOVUxMOworICAgIHN0cnVjdCBzdGF0IHN0OworICAgIGludCBy OworCisgICAgc3BhdGggPSBHQ1NQUklOVEYoU1lTRlNfVVNCX0RFViAiLyVzL2RyaXZlciIsIGlu dGYpOworCisgICAgciA9IGxzdGF0KHNwYXRoLCAmc3QpOworICAgIGlmIChyID09IDApIHsKKyAg ICAgICAgLyogRmluZCB0aGUgY2Fub25pY2FsIHBhdGggdG8gdGhlIGRyaXZlci4gKi8KKyAgICAg ICAgZHAgPSBsaWJ4bF9femFsbG9jKGdjLCBQQVRIX01BWCk7CisgICAgICAgIGRwID0gcmVhbHBh dGgoc3BhdGgsIGRwKTsKKyAgICAgICAgaWYgKCFkcCkgeworICAgICAgICAgICAgTE9HRShFUlJP UiwgImdldCByZWFscGF0aCBmYWlsZWQ6ICclcyciLCBzcGF0aCk7CisgICAgICAgICAgICByZXR1 cm4gRVJST1JfRkFJTDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXJybm8gPT0gRU5PRU5U KSB7CisgICAgICAgIC8qIGRyaXZlciBwYXRoIGRvZXNuJ3QgZXhpc3QgKi8KKyAgICAgICAgZHAg PSBOVUxMOworICAgIH0gZWxzZSB7CisgICAgICAgIExPR0UoRVJST1IsICJsc3RhdCBmYWlsZWQ6 ICclcyciLCBzcGF0aCk7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOworICAgIH0KKworICAg ICpkcnZwYXRoID0gZHA7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCB1bmJpbmRf dXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICppbnRmKQoreworICAgIGNoYXIgKnBh dGg7CisgICAgaW50IGZkID0gLTE7CisgICAgaW50IHJjOworCisgICAgcGF0aCA9IEdDU1BSSU5U RihTWVNGU19VU0JfREVWICIvJXMvZHJpdmVyL3VuYmluZCIsIGludGYpOworCisgICAgZmQgPSBv cGVuKHBhdGgsIE9fV1JPTkxZKTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAgIExPR0UoRVJS T1IsICJvcGVuIGZpbGUgZmFpbGVkOiAnJXMnIiwgcGF0aCk7CisgICAgICAgIHJjID0gRVJST1Jf RkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKGxpYnhsX3dyaXRlX2V4 YWN0bHkoQ1RYLCBmZCwgaW50Ziwgc2l6ZW9mKGludGYpLCBwYXRoLCBpbnRmKSkgeworICAgICAg ICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0g MDsKKworb3V0OgorICAgIGlmIChmZCA+PSAwKSBjbG9zZShmZCk7CisgICAgcmV0dXJuIHJjOwor fQorCitzdGF0aWMgaW50IGJpbmRfdXNiaW50ZihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpp bnRmLCBjb25zdCBjaGFyICpkcnZwYXRoKQoreworICAgIGNoYXIgKnBhdGg7CisgICAgc3RydWN0 IHN0YXQgc3Q7CisgICAgaW50IGZkID0gLTE7CisgICAgaW50IHJjLCByOworCisgICAgcGF0aCA9 IEdDU1BSSU5URigiJXMvJXMiLCBkcnZwYXRoLCBpbnRmKTsKKworICAgIC8qIGNoZWNrIHRocm91 Z2ggbHN0YXQsIGlmIGludGYgYWxyZWFkeSBleGlzdHMgdW5kZXIgZHJ2cGF0aCwKKyAgICAgKiBp dCdzIGFscmVhZHkgYm91bmQsIHJldHVybiBkaXJlY3RseTsgaWYgaXQgZG9lc24ndCBleGlzdCwK KyAgICAgKiBjb250aW51ZSB0byBkbyBiaW5kIHdvcms7IG90aGVyd2lzZSwgcmV0dXJuIGVycm9y LgorICAgICAqLworICAgIHIgPSBsc3RhdChwYXRoLCAmc3QpOworICAgIGlmIChyID09IDApCisg ICAgICAgIHJldHVybiAwOworICAgIGlmIChyIDwgMCAmJiBlcnJubyAhPSBFTk9FTlQpCisgICAg ICAgIHJldHVybiBFUlJPUl9GQUlMOworCisgICAgcGF0aCA9IEdDU1BSSU5URigiJXMvYmluZCIs IGRydnBhdGgpOworCisgICAgZmQgPSBvcGVuKHBhdGgsIE9fV1JPTkxZKTsKKyAgICBpZiAoZmQg PCAwKSB7CisgICAgICAgIExPR0UoRVJST1IsICJvcGVuIGZpbGUgZmFpbGVkOiAnJXMnIiwgcGF0 aCk7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgaWYgKGxpYnhsX3dyaXRlX2V4YWN0bHkoQ1RYLCBmZCwgaW50Ziwgc2l6ZW9mKGludGYp LCBwYXRoLCBpbnRmKSkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0OgorICAgIGlmIChmZCA+PSAwKSBjbG9z ZShmZCk7CisgICAgcmV0dXJuIHJjOworfQorCisvKiBJcyB1c2IgaW50ZXJmYWNlIGJvdW5kIHRv IHVzYmJhY2s/ICovCitzdGF0aWMgaW50IHVzYmludGZfaXNfYXNzaWduZWQobGlieGxfX2djICpn YywgY2hhciAqaW50ZikKK3sKKyAgICBjaGFyICpzcGF0aDsKKyAgICBpbnQgcjsKKyAgICBzdHJ1 Y3Qgc3RhdCBzdDsKKworICAgIHNwYXRoID0gR0NTUFJJTlRGKFNZU0ZTX1VTQkJBQ0tfRFJJVkVS ICIvJXMiLCBpbnRmKTsKKyAgICByID0gbHN0YXQoc3BhdGgsICZzdCk7CisKKyAgICBpZiAociA9 PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBpZiAociA8IDAgJiYgZXJybm8gPT0gRU5PRU5U KQorICAgICAgICByZXR1cm4gMDsKKyAgICBMT0dFKEVSUk9SLCAiQWNjZXNzaW5nICVzIiwgc3Bh dGgpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCB1c2JkZXZfZ2V0X2FsbF9pbnRl cmZhY2VzKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNoYXIgKmJ1c2lkLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKioqaW50ZnMsIGludCAqbnVtKQoreworICAgIERJ UiAqZGlyOworICAgIGNoYXIgKmJ1ZjsKKyAgICBzdHJ1Y3QgZGlyZW50ICpkZV9idWY7CisgICAg c3RydWN0IGRpcmVudCAqZGU7CisgICAgaW50IHJjOworCisgICAgKmludGZzID0gTlVMTDsKKyAg ICAqbnVtID0gMDsKKworICAgIGJ1ZiA9IEdDU1BSSU5URigiJXM6IiwgYnVzaWQpOworCisgICAg ZGlyID0gb3BlbmRpcihTWVNGU19VU0JfREVWKTsKKyAgICBpZiAoIWRpcikgeworICAgICAgICBM T0dFKEVSUk9SLCAib3BlbmRpciBmYWlsZWQ6ICclcyciLCBTWVNGU19VU0JfREVWKTsKKyAgICAg ICAgcmV0dXJuIEVSUk9SX0ZBSUw7CisgICAgfQorCisgICAgZGVfYnVmID0gemFsbG9jX2RpcmVu dChnYywgU1lTRlNfVVNCX0RFVik7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGludCByID0g cmVhZGRpcl9yKGRpciwgZGVfYnVmLCAmZGUpOworCisgICAgICAgIGlmIChyKSB7CisgICAgICAg ICAgICBMT0dFKEVSUk9SLCAiZmFpbGVkIHRvIHJlYWRkaXIgJXMiLCBTWVNGU19VU0JfREVWKTsK KyAgICAgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisgICAgICAgIGlmICghZGUpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBp ZiAoIXN0cmNtcChkZS0+ZF9uYW1lLCAiLiIpIHx8CisgICAgICAgICAgICAhc3RyY21wKGRlLT5k X25hbWUsICIuLiIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFzdHJu Y21wKGRlLT5kX25hbWUsIGJ1Ziwgc3RybGVuKGJ1ZikpKSB7CisgICAgICAgICAgICBHQ1JFQUxM T0NfQVJSQVkoKmludGZzLCAqbnVtICsgMSk7CisgICAgICAgICAgICAoKmludGZzKVsqbnVtXSA9 IGxpYnhsX19zdHJkdXAoZ2MsIGRlLT5kX25hbWUpOworICAgICAgICAgICAgKCpudW0pKys7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBjbG9zZWRpcihkaXIp OworICAgIHJldHVybiByYzsKK30KKworLyogRW5jb2RlIHVzYiBpbnRlcmZhY2Ugc28gdGhhdCBp dCBjb3VsZCBiZSB3cml0dGVuIHRvIHhlbnN0b3JlIGFzIGEga2V5LgorICoKKyAqIFNpbmNlIHhl bnN0b3JlIGtleSBjYW5ub3QgaW5jbHVkZSAnLicgb3IgJzonLCB3ZSdsbCBjaGFuZ2UgJy4nIHRv ICdfJywKKyAqIGNoYW5nZSAnOicgdG8gJ0AnLiBGb3IgZXhhbXBsZSwgMy0xOjIuMSB3aWxsIGJl IGVuY29kZWQgdG8gMy0xQDJfMS4KKyAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHNhdmUgb3JpZ2lu YWwgZHJpdmVyIG9mIFVTQiBkZXZpY2UgdG8geGVuc3RvcmUuCisgKi8KK3N0YXRpYyBjaGFyICp1 c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpi dXNpZCkKK3sKKyAgICBjaGFyICpzdHIgPSBsaWJ4bF9fc3RyZHVwKGdjLCBidXNpZCk7CisgICAg aW50IGksIGxlbiA9IHN0cmxlbihzdHIpOworCisgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsr KSB7CisgICAgICAgIGlmIChzdHJbaV0gPT0gJy4nKSBzdHJbaV0gPSAnXyc7CisgICAgICAgIGlm IChzdHJbaV0gPT0gJzonKSBzdHJbaV0gPSAnQCc7CisgICAgfQorICAgIHJldHVybiBzdHI7Cit9 CisKKy8qIFVuYmluZCBVU0IgZGV2aWNlIGZyb20gInVzYmJhY2siIGRyaXZlci4KKyAqCisgKiBJ ZiB0aGVyZSBhcmUgbWFueSBpbnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGNoZWNrIGVhY2gg aW50ZXJmYWNlLAorICogdW5iaW5kIGZyb20gInVzYmJhY2siIGRyaXZlci4KKyAqLworc3RhdGlj IGludCB1c2JiYWNrX2Rldl91bmFzc2lnbihsaWJ4bF9fZ2MgKmdjLCBjb25zdCBjaGFyICpidXNp ZCkKK3sKKyAgICBjaGFyICoqaW50ZnMgPSBOVUxMOworICAgIGludCBpLCBudW0gPSAwOworICAg IGludCByYzsKKworICAgIHJjID0gdXNiZGV2X2dldF9hbGxfaW50ZXJmYWNlcyhnYywgYnVzaWQs ICZpbnRmcywgJm51bSk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworICAgICAgICBjaGFyICppbnRmID0gaW50ZnNbaV07CisKKyAgICAg ICAgLyogY2hlY2sgaWYgdGhlIFVTQiBpbnRlcmZhY2UgaXMgYWxyZWFkeSBib3VuZCB0byAidXNi YmFjayIgKi8KKyAgICAgICAgaWYgKHVzYmludGZfaXNfYXNzaWduZWQoZ2MsIGludGYpID4gMCkg eworICAgICAgICAgICAgLyogdW5iaW5kIGludGVyZmFjZSBmcm9tIHVzYmJhY2sgZHJpdmVyICov CisgICAgICAgICAgICByYyA9IHVuYmluZF91c2JpbnRmKGdjLCBpbnRmKTsKKyAgICAgICAgICAg IGlmIChyYykgeworICAgICAgICAgICAgICAgIExPR0UoRVJST1IsICJDb3VsZG4ndCB1bmJpbmQg JXMgZnJvbSB1c2JiYWNrIiwgaW50Zik7CisgICAgICAgICAgICAgICAgZ290byBvdXQ7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IDA7CisKK291dDoKKyAgICBy ZXR1cm4gcmM7Cit9CisKKy8qIHJlYmluZCBVU0IgZGV2aWNlIHRvIG9yaWdpbmFsIGRyaXZlci4K KyAqCisgKiBJZiB0aGVyZSBhcmUgbWFueSBpbnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGZv ciByZWFjaCBpbnRlcmZhY2UsCisgKiByZWFkIGRyaXZlcl9wYXRoIGZyb20geGVuc3RvcmUgKGlm IHRoZXJlIGlzKSBhbmQgcmViaW5kIHRvIGl0cworICogb3JpZ2luYWwgZHJpdmVyLCB0aGVuIHJl bW92ZSBkcml2ZXJfcGF0aCBpbmZvcm1hdGlvbiBmcm9tIHhlbnN0b3JlLgorICovCitzdGF0aWMg aW50IHVzYmRldl9yZWJpbmQobGlieGxfX2djICpnYywgY29uc3QgY2hhciAqYnVzaWQpCit7Cisg ICAgY2hhciAqKmludGZzID0gTlVMTDsKKyAgICBjaGFyICp1c2JkZXZfZW5jb2RlID0gTlVMTDsK KyAgICBjaGFyICpwYXRoID0gTlVMTDsKKyAgICBpbnQgaSwgbnVtID0gMDsKKyAgICBpbnQgcmM7 CisKKyAgICByYyA9IHVzYmRldl9nZXRfYWxsX2ludGVyZmFjZXMoZ2MsIGJ1c2lkLCAmaW50ZnMs ICZudW0pOworICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICB1c2JkZXZfZW5jb2RlID0gdXNi X2ludGVyZmFjZV94ZW5zdG9yZV9lbmNvZGUoZ2MsIGJ1c2lkKTsKKworICAgIGZvciAoaSA9IDA7 IGkgPCBudW07IGkrKykgeworICAgICAgICBjaGFyICppbnRmID0gaW50ZnNbaV07CisgICAgICAg IGNoYXIgKnVzYmludGZfZW5jb2RlID0gTlVMTDsKKyAgICAgICAgY29uc3QgY2hhciAqZHJ2cGF0 aDsKKworICAgICAgICAvKiByZWJpbmQgVVNCIGludGVyZmFjZSB0byBpdHMgb3JpZ2luaWFsIGRy aXZlciAqLworICAgICAgICB1c2JpbnRmX2VuY29kZSA9IHVzYl9pbnRlcmZhY2VfeGVuc3RvcmVf ZW5jb2RlKGdjLCBpbnRmKTsKKyAgICAgICAgcGF0aCA9IEdDU1BSSU5URihVU0JCQUNLX0lORk9f UEFUSCAiLyVzLyVzL2RyaXZlcl9wYXRoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1c2Jk ZXZfZW5jb2RlLCB1c2JpbnRmX2VuY29kZSk7CisgICAgICAgIHJjID0gbGlieGxfX3hzX3JlYWRf Y2hlY2tlZChnYywgWEJUX05VTEwsIHBhdGgsICZkcnZwYXRoKTsKKyAgICAgICAgaWYgKHJjKSBn b3RvIG91dDsKKworICAgICAgICBpZiAoZHJ2cGF0aCkgeworICAgICAgICAgICAgcmMgPSBiaW5k X3VzYmludGYoZ2MsIGludGYsIGRydnBhdGgpOworICAgICAgICAgICAgaWYgKHJjKSB7CisgICAg ICAgICAgICAgICAgTE9HRShFUlJPUiwgIkNvdWxkbid0IHJlYmluZCAlcyB0byAlcyIsIGludGYs IGRydnBhdGgpOworICAgICAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICAgICAgfQorICAg ICAgICB9CisgICAgfQorCitvdXQ6CisgICAgcGF0aCA9IEdDU1BSSU5URihVU0JCQUNLX0lORk9f UEFUSCAiLyVzIiwgdXNiZGV2X2VuY29kZSk7CisgICAgcmMgPSBsaWJ4bF9feHNfcm1fY2hlY2tl ZChnYywgWEJUX05VTEwsIHBhdGgpOworICAgIHJldHVybiByYzsKK30KKworCisvKiBCaW5kIFVT QiBkZXZpY2UgdG8gInVzYmJhY2siIGRyaXZlci4KKyAqCisgKiBJZiB0aGVyZSBhcmUgbWFueSBp bnRlcmZhY2VzIHVuZGVyIFVTQiBkZXZpY2UsIGNoZWNrIGVhY2ggaW50ZXJmYWNlLAorICogdW5i aW5kIGZyb20gb3JpZ2luYWwgZHJpdmVyIGFuZCBiaW5kIHRvICJ1c2JiYWNrIiBkcml2ZXIuCisg Ki8KK3N0YXRpYyBpbnQgdXNiYmFja19kZXZfYXNzaWduKGxpYnhsX19nYyAqZ2MsIGNvbnN0IGNo YXIgKmJ1c2lkKQoreworICAgIGNoYXIgKippbnRmcyA9IE5VTEw7CisgICAgaW50IG51bSA9IDAs IGk7CisgICAgaW50IHJjOworICAgIGNoYXIgKnVzYmRldl9lbmNvZGUgPSBOVUxMOworCisgICAg cmMgPSB1c2JkZXZfZ2V0X2FsbF9pbnRlcmZhY2VzKGdjLCBidXNpZCwgJmludGZzLCAmbnVtKTsK KyAgICBpZiAocmMpIHJldHVybiByYzsKKworICAgIHVzYmRldl9lbmNvZGUgPSB1c2JfaW50ZXJm YWNlX3hlbnN0b3JlX2VuY29kZShnYywgYnVzaWQpOworCisgICAgZm9yIChpID0gMDsgaSA8IG51 bTsgaSsrKSB7CisgICAgICAgIGNoYXIgKmludGYgPSBpbnRmc1tpXTsKKyAgICAgICAgY2hhciAq ZHJ2cGF0aCA9IE5VTEw7CisKKyAgICAgICAgLyogYWxyZWFkeSBhc3NpZ25lZCB0byB1c2JiYWNr ICovCisgICAgICAgIGlmICh1c2JpbnRmX2lzX2Fzc2lnbmVkKGdjLCBpbnRmKSA+IDApCisgICAg ICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IHVzYmludGZfZ2V0X2RydnBhdGgoZ2Ms IGludGYsICZkcnZwYXRoKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgICAgICBp ZiAoZHJ2cGF0aCkgeworICAgICAgICAgICAgLyogd3JpdGUgZHJpdmVyIHBhdGggdG8geGVuc3Rv cmUgZm9yIGxhdGVyIHJlYmluZGluZyAqLworICAgICAgICAgICAgY2hhciAqdXNiaW50Zl9lbmNv ZGUgPSBOVUxMOworICAgICAgICAgICAgY2hhciAqcGF0aDsKKworICAgICAgICAgICAgdXNiaW50 Zl9lbmNvZGUgPSB1c2JfaW50ZXJmYWNlX3hlbnN0b3JlX2VuY29kZShnYywgaW50Zik7CisgICAg ICAgICAgICBwYXRoID0gR0NTUFJJTlRGKFVTQkJBQ0tfSU5GT19QQVRIICIvJXMvJXMvZHJpdmVy X3BhdGgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2JkZXZfZW5jb2RlLCB1c2Jp bnRmX2VuY29kZSk7CisgICAgICAgICAgICByYyA9IGxpYnhsX194c193cml0ZV9jaGVja2VkKGdj LCBYQlRfTlVMTCwgcGF0aCwgZHJ2cGF0aCk7CisgICAgICAgICAgICBpZiAocmMpIGdvdG8gb3V0 OworCisgICAgICAgICAgICAvKiB1bmJpbmQgaW50ZXJmYWNlIGZyb20gb3JpZ2luYWwgZHJpdmVy ICovCisgICAgICAgICAgICByYyA9IHVuYmluZF91c2JpbnRmKGdjLCBpbnRmKTsKKyAgICAgICAg ICAgIGlmIChyYykgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICAvKiBiaW5kIGludGVy ZmFjZSB0byB1c2JiYWNrICovCisgICAgICAgIHJjID0gYmluZF91c2JpbnRmKGdjLCBpbnRmLCBT WVNGU19VU0JCQUNLX0RSSVZFUik7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgTE9H KEVSUk9SLCAiQ291bGRuJ3QgYmluZCAlcyB0byAlcyIsIGludGYsIFNZU0ZTX1VTQkJBQ0tfRFJJ VkVSKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0 dXJuIDA7CisKK291dDoKKyAgICAvKiBzb21lIGludGVyZmFjZXMgbWlnaHQgYmUgYm91bmQgdG8g dXNiYmFjaywgdW5iaW5kIGl0IGFuZAorICAgICAqIHJlYmluZCBpdCB0byBpdHMgb3JpZ2luYWwg ZHJpdmVyCisgICAgICovCisgICAgdXNiYmFja19kZXZfdW5hc3NpZ24oZ2MsIGJ1c2lkKTsKKyAg ICB1c2JkZXZfcmViaW5kKGdjLCBidXNpZCk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMg aW50IGRvX3VzYmRldl9hZGQobGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2LAorICAgICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgdXBkYXRlX2pzb24pCit7CisgICAgaW50IHJjOworICAgIGNo YXIgKmJ1c2lkOworICAgIGxpYnhsX2RldmljZV91c2JjdHJsIHVzYmN0cmw7CisgICAgbGlieGxf dXNiY3RybGluZm8gdXNiY3RybGluZm87CisKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybF9pbml0 KCZ1c2JjdHJsKTsKKyAgICBsaWJ4bF91c2JjdHJsaW5mb19pbml0KCZ1c2JjdHJsaW5mbyk7Cisg ICAgdXNiY3RybC5kZXZpZCA9IHVzYmRldi0+Y3RybDsKKworICAgIHJjID0gbGlieGxfZGV2aWNl X3VzYmN0cmxfZ2V0aW5mbyhDVFgsIGRvbWlkLCAmdXNiY3RybCwgJnVzYmN0cmxpbmZvKTsKKyAg ICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgc3dpdGNoICh1c2JjdHJsaW5mby50eXBlKSB7Cisg ICAgY2FzZSBMSUJYTF9VU0JDVFJMX1RZUEVfUFY6CisgICAgICAgIGJ1c2lkID0gdXNiZGV2X2J1 c2FkZHJfdG9fYnVzaWQoZ2MsIHVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNiZGV2LT51Lmhvc3RkZXYuaG9zdGFkZHIp OworICAgICAgICBpZiAoIWJ1c2lkKSB7CisgICAgICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cisg ICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gbGlieGxfX2Rl dmljZV91c2JkZXZfYWRkX3hlbnN0b3JlKGdjLCBkb21pZCwgdXNiZGV2LCB1cGRhdGVfanNvbik7 CisgICAgICAgIGlmIChyYykgZ290byBvdXQ7CisKKyAgICAgICAgcmMgPSB1c2JiYWNrX2Rldl9h c3NpZ24oZ2MsIGJ1c2lkKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBsaWJ4bF9f ZGV2aWNlX3VzYmRldl9yZW1vdmVfeGVuc3RvcmUoZ2MsIGRvbWlkLCB1c2JkZXYpOworICAgICAg ICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBMSUJY TF9VU0JDVFJMX1RZUEVfREVWSUNFTU9ERUw6CisgICAgZGVmYXVsdDoKKyAgICAgICAgTE9HKEVS Uk9SLCAiVW5zdXBwb3J0ZWQgdXNiIGNvbnRyb2xsZXIgdHlwZSIpOworICAgICAgICByYyA9IEVS Uk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gMDsKKworb3V0 OgorICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxpYnhs X3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVzYmN0cmxpbmZvKTsKKyAgICByZXR1cm4gcmM7Cit9CisK Ky8qIEFPIG9wZXJhdGlvbiB0byBhZGQgYSB1c2IgZGV2aWNlLgorICoKKyAqIEdlbmVyYWxseSwg aXQgZG9lczoKKyAqIDEpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNlIHR5cGUgaXMgYXNzaWduYWJs ZQorICogMikgY2hlY2sgaWYgdGhlIHVzYiBkZXZpY2UgaXMgYWxyZWFkeSBhc3NpZ25lZCB0byBh IGRvbWFpbgorICogMykgYWRkICdidXNpZCcgb2YgdGhlIHVzYiBkZXZpY2UgdG8geGVuc3RvcmUg Y29udG9sbGVyL3BvcnQvLgorICogICAgKFBWVVNCIGRyaXZlciB3YXRjaGVzIHRoZSB4ZW5zdG9y ZSBjaGFuZ2VzIGFuZCB3aWxsIGRldGVjdCB0aGF0LikKKyAqIDQpIHVuYmluZCB1c2IgZGV2aWNl IGZyb20gb3JpZ2luYWwgZHJpdmVyIGFuZCBiaW5kIHRvIHVzYmJhY2suCisgKiAgICBJZiB1c2Ig ZGV2aWNlIGhhcyBtYW55IGludGVyZmFjZXMsIHRoZW46CisgKiAgICAtIHVuYmluZCBlYWNoIGlu dGVyZmFjZSBmcm9tIGl0cyBvcmlnaW5hbCBkcml2ZXIgYW5kIGJpbmQgdG8gdXNiYmFjay4KKyAq ICAgIC0gc3RvcmUgdGhlIG9yaWdpbmFsIGRyaXZlciB0byB4ZW5zdG9yZSBmb3IgbGF0ZXIgcmVi aW5kaW5nIHdoZW4KKyAqICAgICAgZGV0YWNoaW5nIHRoZSBkZXZpY2UuCisgKgorICogQmVmb3Jl IGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYW9kZXYgc2hvdWxkIGJlIHByb3Blcmx5IGZpbGxlZDoK KyAqIGFvZGV2LT5hbywgYW9kZXYtPmNhbGxiYWNrLCBhb2Rldi0+dXBkYXRlX2pzb24sIC4uLgor ICovCit2b2lkIGxpYnhsX19kZXZpY2VfdXNiZGV2X2FkZChsaWJ4bF9fZWdjICplZ2MsIHVpbnQz Ml90IGRvbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfZGV2aWNlX3Vz YmRldiAqdXNiZGV2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlieGxfX2FvX2Rl dmljZSAqYW9kZXYpCit7CisgICAgU1RBVEVfQU9fR0MoYW9kZXYtPmFvKTsKKyAgICBpbnQgcmM7 CisgICAgbGlieGxfZGV2aWNlX3VzYmRldiAqYXNzaWduZWQ7CisgICAgaW50IG51bV9hc3NpZ25l ZDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGxpYnhsX3VzYmN0cmxp bmZvIHVzYmN0cmxpbmZvOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgmdXNiY3Ry bCk7CisgICAgbGlieGxfdXNiY3RybGluZm9faW5pdCgmdXNiY3RybGluZm8pOworCisgICAgLyog Q3VycmVudGx5IG9ubHkgc3VwcG9ydCBhZGRpbmcgVVNCIGRldmljZSBmcm9tIERvbTAgYmFja2Vu ZC4KKyAgICAgKiBTbywgaWYgVVNCIGNvbnRyb2xsZXIgaXMgc3BlY2lmaWVkLCBjaGVjayBpdHMg YmFja2VuZCBkb21haW4sCisgICAgICogaWYgaXQncyBub3QgRG9tMCwgcmVwb3J0IGVycm9yLgor ICAgICAqLworICAgIGlmICh1c2JkZXYtPmN0cmwgIT0gLTEpIHsKKyAgICAgICAgdXNiY3RybC5k ZXZpZCA9IHVzYmRldi0+Y3RybDsKKyAgICAgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9n ZXRpbmZvKENUWCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOworICAgICAgICBpZiAo cmMpIGdvdG8gb3V0OworCisgICAgICAgIGlmICh1c2JjdHJsaW5mby5iYWNrZW5kX2lkICE9IExJ QlhMX1RPT0xTVEFDS19ET01JRCkgeworICAgICAgICAgICAgTE9HKEVSUk9SLCAiRG9uJ3Qgc3Vw cG9ydCBhZGRpbmcgVVNCIGRldmljZSBmcm9tIG5vbi1Eb20wIGJhY2tlbmQiKTsKKyAgICAgICAg ICAgIHJjID0gRVJST1JfSU5WQUw7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQor ICAgIH0KKworICAgIC8qIGNoZWNrIHVzYiBkZXZpY2UgaXMgYXNzaWduYWJsZSB0eXBlICovCisg ICAgaWYgKCFpc191c2JkZXZfYXNzaWduYWJsZShnYywgdXNiZGV2KSkgeworICAgICAgICBMT0co RVJST1IsICJVU0IgZGV2aWNlIGlzIG5vdCBhc3NpZ25hYmxlLiIpOworICAgICAgICByYyA9IEVS Uk9SX0ZBSUw7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIC8qIGNoZWNrIHVzYiBk ZXZpY2UgaXMgYWxyZWFkeSBhc3NpZ25lZCAqLworICAgIHJjID0gZ2V0X2Fzc2lnbmVkX2Rldmlj ZXMoZ2MsICZhc3NpZ25lZCwgJm51bV9hc3NpZ25lZCk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IExPRyhFUlJPUiwgImNhbm5vdCBkZXRlcm1pbmUgaWYgZGV2aWNlIGlzIGFzc2lnbmVkLCIKKyAg ICAgICAgICAgICAgICAgICAiIHJlZnVzaW5nIHRvIGNvbnRpbnVlIik7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIGlmIChpc191c2JkZXZfaW5fYXJyYXkoYXNzaWduZWQsIG51bV9h c3NpZ25lZCwgdXNiZGV2KSkgeworICAgICAgICBMT0coRVJST1IsICJVU0IgZGV2aWNlIGFscmVh ZHkgYXR0YWNoZWQgdG8gYSBkb21haW4iKTsKKyAgICAgICAgcmMgPSBFUlJPUl9JTlZBTDsKKyAg ICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgLyogZmlsbCBkZWZhdWx0IHZhbHVlcywgZS5n LCBpZiB1c2JkZXYtPmN0cmwgYW5kIHVzYmRldi0+cG9ydAorICAgICAqIG5vdCBzcGVjaWZpZWQs IGNob29zZSBhdmFpbGFibGUgY29udHJvbGxlcjpwb3J0IGFuZCBmaWxsIGluLiAqLworICAgIHJj ID0gbGlieGxfX2RldmljZV91c2JkZXZfc2V0ZGVmYXVsdChnYywgZG9taWQsIHVzYmRldiwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW9kZXYtPnVwZGF0ZV9qc29u KTsKKyAgICBpZiAocmMpIGdvdG8gb3V0OworCisgICAgLyogZG8gYWN0dWFsIGFkZGluZyB1c2Ig ZGV2aWNlIG9wZXJhdGlvbiAqLworICAgIHJjID0gZG9fdXNiZGV2X2FkZChnYywgZG9taWQsIHVz YmRldiwgYW9kZXYtPnVwZGF0ZV9qc29uKTsKKworb3V0OgorICAgIGxpYnhsX2RldmljZV91c2Jj dHJsX2Rpc3Bvc2UoJnVzYmN0cmwpOworICAgIGxpYnhsX3VzYmN0cmxpbmZvX2Rpc3Bvc2UoJnVz YmN0cmxpbmZvKTsKKyAgICBhb2Rldi0+cmMgPSByYzsKKyAgICBhb2Rldi0+Y2FsbGJhY2soZWdj LCBhb2Rldik7CisgICAgcmV0dXJuOworfQorCitzdGF0aWMgaW50IGRvX3VzYmRldl9yZW1vdmUo bGlieGxfX2djICpnYywgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIGludCByYzsKKyAgICBjaGFy ICpidXNpZDsKKyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGxpYnhsX3Vz YmN0cmxpbmZvIHVzYmN0cmxpbmZvOworCisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfaW5pdCgm dXNiY3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9faW5pdCgmdXNiY3RybGluZm8pOworICAg IHVzYmN0cmwuZGV2aWQgPSB1c2JkZXYtPmN0cmw7CisKKyAgICByYyA9IGxpYnhsX2RldmljZV91 c2JjdHJsX2dldGluZm8oQ1RYLCBkb21pZCwgJnVzYmN0cmwsICZ1c2JjdHJsaW5mbyk7CisgICAg aWYgKHJjKSBnb3RvIG91dDsKKworICAgIHN3aXRjaCAodXNiY3RybGluZm8udHlwZSkgeworICAg IGNhc2UgTElCWExfVVNCQ1RSTF9UWVBFX1BWOgorICAgICAgICBidXNpZCA9IHVzYmRldl9idXNp ZF9mcm9tX2N0cmxwb3J0KGdjLCBkb21pZCwgdXNiZGV2KTsKKyAgICAgICAgaWYgKCFidXNpZCkg eworICAgICAgICAgICAgcmMgPSBFUlJPUl9GQUlMOworICAgICAgICAgICAgZ290byBvdXQ7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBUaGluZ3MgYXJlIGRvbmUgaW4gb3JkZXIgb2Y6CisgICAg ICAgICAqICAgdW5iaW5kIFVTQiBkZXZpY2UgZnJvbSB1c2JiYWNrLAorICAgICAgICAgKiAgIHJl bW92ZSBVU0IgZGV2aWNlIGZyb20geGVuc3RvcmUsCisgICAgICAgICAqICAgcmViaW5kIFVTQiBk ZXZpY2UgdG8gb3JpZ2luYWwgZHJpdmVyLgorICAgICAgICAgKiBJdCBpcyB0byBiYWxhbmNlIHNp bXBsaWNpdHkgd2l0aCByb2J1c3RuZXNzIGluIGNhc2Ugb2YgZmFpbHVyZToKKyAgICAgICAgICog LSBXZSB1bmJpbmQgYWxsIGludGVyZmFjZXMgYmVmb3JlIHJlYmluZGluZyBhbnkgaW50ZXJmYWNl cywgc28KKyAgICAgICAgICogICB0aGF0IHdlIG5ldmVyIGdldCBpbnRvIGEgc2l0dWF0aW9uIHdo ZXJlIHNvbWUgaW50ZXJmYWNlcyBhcmUKKyAgICAgICAgICogICBhc3NpZ25lZCB0byB1c2JiYWNr IGFuZCBzb21lIGFyZSBhc3NpZ25lZCB0byB0aGUgb3JpZ2luYWwgZHJpdmVycy4KKyAgICAgICAg ICogLSBXZSBhbHNvIHVuYmluZCB0aGUgaW50ZXJmYWNlcyBiZWZvcmUgcmVtb3ZpbmcgdGhlIHB2 dXNiIHhlbnN0b3JlCisgICAgICAgICAqICAgbm9kZXMsIHNvIHRoYXQgaWYgdGhlIHVuYmluZCBm YWlscyBpbiB0aGUgbWlkZGxlLCB0aGUgZGV2aWNlIHN0aWxsCisgICAgICAgICAqICAgc2hvd3Mg dXAgaW4geGwgdXNiLWxpc3QsIGFuZCB0aGUgdXNlciBjYW4gcmUtdHJ5IHJlbW92aW5nIGl0Lgor ICAgICAgICAgKi8KKyAgICAgICAgcmMgPSB1c2JiYWNrX2Rldl91bmFzc2lnbihnYywgYnVzaWQp OworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIExPRyhFUlJPUiwgIkVycm9yIHJlbW92 aW5nIGRldmljZSBmcm9tIGd1ZXN0LiIKKyAgICAgICAgICAgICAgICAiIFRyeSBydW5uaW5nIHVz YmRldi1kZXRhY2ggYWdhaW4uIik7CisgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgfQor CisgICAgICAgIHJjID0gbGlieGxfX2RldmljZV91c2JkZXZfcmVtb3ZlX3hlbnN0b3JlKGdjLCBk b21pZCwgdXNiZGV2KTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1Is ICJFcnJvciByZW1vdmluZyBkZXZpY2UgZnJvbSBndWVzdC4iCisgICAgICAgICAgICAgICAgIiBU cnkgcnVubmluZyB1c2JkZXYtZGV0YWNoIGFnYWluLiIpOworICAgICAgICAgICAgZ290byBvdXQ7 CisgICAgICAgIH0KKworICAgICAgICByYyA9IHVzYmRldl9yZWJpbmQoZ2MsIGJ1c2lkKTsKKyAg ICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBMT0coRVJST1IsICJVU0IgZGV2aWNlIHJlbW92 ZWQgZnJvbSBndWVzdCwgYnV0IGNvdWxkbid0IgorICAgICAgICAgICAgICAgICIgcmUtYmluZCB0 byBkb21haW4gMC4gVHJ5IHJlbW92aW5nIGFuZCByZS1pbnNlcnRpbmciCisgICAgICAgICAgICAg ICAgIiB0aGUgVVNCIGRldmljZSBvciByZWxvYWRpbmcgdGhlIGRyaXZlciBtb2R1bGVzLiIpOwor ICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKworICAgICAgICBicmVhazsKKyAgICBj YXNlIExJQlhMX1VTQkNUUkxfVFlQRV9ERVZJQ0VNT0RFTDoKKyAgICBkZWZhdWx0OgorICAgICAg ICBMT0coRVJST1IsICJVbnN1cHBvcnRlZCB1c2IgY29udHJvbGxlciB0eXBlIik7CisgICAgICAg IHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgcmMgPSAw OworCitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNiY3RybCk7Cisg ICAgbGlieGxfdXNiY3RybGluZm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOworICAgIHJldHVybiBy YzsKK30KKworLyogT3BlcmF0aW9uIHRvIHJlbW92ZSB1c2IgZGV2aWNlLgorICoKKyAqIEdlbmVy YWxseSwgaXQgZG9lczoKKyAqIDEpIGNoZWNrIGlmIHRoZSB1c2IgZGV2aWNlIGlzIGFzc2lnbmVk IHRvIHRoZSBkb21haW4KKyAqIDIpIHJlbW92ZSB0aGUgdXNiIGRldmljZSBmcm9tIHhlbnN0b3Jl IGNvbnRyb2xsZXIvcG9ydC4KKyAqIDMpIHVuYmluZCB1c2IgZGV2aWNlIGZyb20gdXNiYmFjayBh bmQgcmViaW5kIHRvIGl0cyBvcmlnaW5hbCBkcml2ZXIuCisgKiAgICBJZiB1c2IgZGV2aWNlIGhh cyBtYW55IGludGVyZmFjZXMsIGRvIGl0IHRvIGVhY2ggaW50ZXJmYWNlLgorICovCitzdGF0aWMg aW50IGxpYnhsX19kZXZpY2VfdXNiZGV2X3JlbW92ZShsaWJ4bF9fZ2MgKmdjLCB1aW50MzJfdCBk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rldmlj ZV91c2JkZXYgKnVzYmRldikKK3sKKyAgICBsaWJ4bF91c2JjdHJsaW5mbyB1c2JjdHJsaW5mbzsK KyAgICBsaWJ4bF9kZXZpY2VfdXNiY3RybCB1c2JjdHJsOworICAgIGludCByYzsKKworICAgIGlm ICh1c2JkZXYtPmN0cmwgPCAwIHx8IHVzYmRldi0+cG9ydCA8IDEpIHsKKyAgICAgICAgTE9HKEVS Uk9SLCAiSW52YWxpZCBVU0IgZGV2aWNlIik7CisgICAgICAgIHJldHVybiBFUlJPUl9GQUlMOwor ICAgIH0KKworICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2luaXQoJnVzYmN0cmwpOworICAgIGxp YnhsX3VzYmN0cmxpbmZvX2luaXQoJnVzYmN0cmxpbmZvKTsKKyAgICB1c2JjdHJsLmRldmlkID0g dXNiZGV2LT5jdHJsOworCisgICAgcmMgPSBsaWJ4bF9kZXZpY2VfdXNiY3RybF9nZXRpbmZvKENU WCwgZG9taWQsICZ1c2JjdHJsLCAmdXNiY3RybGluZm8pOworICAgIGlmIChyYykgZ290byBvdXQ7 CisKKyAgICBpZiAodXNiY3RybGluZm8uYmFja2VuZF9pZCAhPSBMSUJYTF9UT09MU1RBQ0tfRE9N SUQpIHsKKyAgICAgICAgTE9HKEVSUk9SLCAiRG9uJ3Qgc3VwcG9ydCByZW1vdmluZyBVU0IgZGV2 aWNlIGZyb20gbm9uLURvbTAgYmFja2VuZCIpOworICAgICAgICByYyA9IEVSUk9SX0lOVkFMOwor ICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBkbyBhY3R1YWwgcmVtb3ZpbmcgdXNi IGRldmljZSBvcGVyYXRpb24gKi8KKyAgICByYyA9IGRvX3VzYmRldl9yZW1vdmUoZ2MsIGRvbWlk LCB1c2JkZXYpOworCitvdXQ6CisgICAgbGlieGxfZGV2aWNlX3VzYmN0cmxfZGlzcG9zZSgmdXNi Y3RybCk7CisgICAgbGlieGxfdXNiY3RybGluZm9fZGlzcG9zZSgmdXNiY3RybGluZm8pOworICAg IHJldHVybiByYzsKK30KKworaW50IGxpYnhsX2RldmljZV91c2JkZXZfcmVtb3ZlKGxpYnhsX2N0 eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs aWJ4bF9kZXZpY2VfdXNiZGV2ICp1c2JkZXYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgbGlieGxfYXN5bmNvcF9ob3cgKmFvX2hvdykKKworeworICAgIEFPX0NSRUFURShj dHgsIGRvbWlkLCBhb19ob3cpOworICAgIGludCByYzsKKworICAgIHJjID0gbGlieGxfX2Rldmlj ZV91c2JkZXZfcmVtb3ZlKGdjLCBkb21pZCwgdXNiZGV2KTsKKworICAgIGxpYnhsX19hb19jb21w bGV0ZShlZ2MsIGFvLCByYyk7CisgICAgcmV0dXJuIEFPX0lOUFJPR1JFU1M7Cit9CisKK2ludCBs aWJ4bF9jdHJscG9ydF90b19kZXZpY2VfdXNiZGV2KGxpYnhsX2N0eCAqY3R4LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9taWQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgY3RybCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlieGxfZGV2aWNlX3VzYmRldiAqdXNiZGV2KQoreworICAgIEdDX0lOSVQoY3R4KTsKKyAg ICBjb25zdCBjaGFyICpkb21wYXRoLCAqZmVfcGF0aCwgKmJlX3BhdGgsICpidXNpZDsKKyAgICBp bnQgcmM7CisKKyAgICBkb21wYXRoID0gbGlieGxfX3hzX2dldF9kb21wYXRoKGdjLCBkb21pZCk7 CisKKyAgICBmZV9wYXRoID0gR0NTUFJJTlRGKCIlcy9kZXZpY2UvdnVzYi8lZCIsIGRvbXBhdGgs IGN0cmwpOworCisgICAgYmVfcGF0aCA9IHZ1c2JfYmVfZnJvbV94c19mZShnYywgZmVfcGF0aCwg ZG9taWQpOworICAgIGlmICghYmVfcGF0aCkgeworICAgICAgICByYyA9IEVSUk9SX0ZBSUw7Cisg ICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0gbGlieGxfX3hzX3JlYWRfY2hlY2tl ZChnYywgWEJUX05VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBHQ1NQUklOVEYoIiVz L3BvcnQvJWQiLCBiZV9wYXRoLCBwb3J0KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZi dXNpZCk7CisgICAgaWYgKHJjKSBnb3RvIG91dDsKKworICAgIGlmICghYnVzaWQgfHwgIXN0cmNt cChidXNpZCwgIiIpKSB7CisgICAgICAgIHJjID0gRVJST1JfRkFJTDsKKyAgICAgICAgZ290byBv dXQ7CisgICAgfQorCisgICAgdXNiZGV2LT5jdHJsID0gY3RybDsKKyAgICB1c2JkZXYtPnBvcnQg PSBwb3J0OworICAgIHVzYmRldi0+dHlwZSA9IExJQlhMX1VTQkRFVl9UWVBFX0hPU1RERVY7Cisg ICAgcmMgPSB1c2JkZXZfYnVzYWRkcl9mcm9tX2J1c2lkKGdjLCBidXNpZCwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnVzYmRldi0+dS5ob3N0ZGV2Lmhvc3RidXMsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2JkZXYtPnUuaG9zdGRldi5ob3N0YWRk cik7CisKK291dDoKKyAgICBHQ19GUkVFOworICAgIHJldHVybiByYzsKK30KKy8qCisgKiBMb2Nh bCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50 LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xp YnhsX3R5cGVzLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzLmlkbAppbmRleCA2MzJjMDA5 Li4yYTk5ZWViIDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlcy5pZGwKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfdHlwZXMuaWRsCkBAIC02MTMsNiArNjEzLDM1IEBAIGxpYnhsX2Rl dmljZV9yZG0gPSBTdHJ1Y3QoImRldmljZV9yZG0iLCBbCiAgICAgKCJwb2xpY3kiLCBsaWJ4bF9y ZG1fcmVzZXJ2ZV9wb2xpY3kpLAogICAgIF0pCiAKK2xpYnhsX3VzYmN0cmxfdHlwZSA9IEVudW1l cmF0aW9uKCJ1c2JjdHJsX3R5cGUiLCBbCisgICAgKDAsICJBVVRPIiksCisgICAgKDEsICJQViIp LAorICAgICgyLCAiREVWSUNFTU9ERUwiKSwKKyAgICBdKQorCitsaWJ4bF91c2JkZXZfdHlwZSA9 IEVudW1lcmF0aW9uKCJ1c2JkZXZfdHlwZSIsIFsKKyAgICAoMSwgImhvc3RkZXYiKSwKKyAgICBd KQorCitsaWJ4bF9kZXZpY2VfdXNiY3RybCA9IFN0cnVjdCgiZGV2aWNlX3VzYmN0cmwiLCBbCisg ICAgKCJ0eXBlIiwgbGlieGxfdXNiY3RybF90eXBlKSwKKyAgICAoImRldmlkIiwgbGlieGxfZGV2 aWQpLAorICAgICgidmVyc2lvbiIsIGludGVnZXIpLAorICAgICgicG9ydHMiLCBpbnRlZ2VyKSwK KyAgICAoImJhY2tlbmRfZG9taWQiLCBsaWJ4bF9kb21pZCksCisgICAgKCJiYWNrZW5kX2RvbW5h bWUiLCBzdHJpbmcpLAorICAgXSkKKworbGlieGxfZGV2aWNlX3VzYmRldiA9IFN0cnVjdCgiZGV2 aWNlX3VzYmRldiIsIFsKKyAgICAoImN0cmwiLCBsaWJ4bF9kZXZpZCksCisgICAgKCJwb3J0Iiwg aW50ZWdlciksCisgICAgKCJ1IiwgS2V5ZWRVbmlvbihOb25lLCBsaWJ4bF91c2JkZXZfdHlwZSwg InR5cGUiLAorICAgICAgICAgICBbKCJob3N0ZGV2IiwgU3RydWN0KE5vbmUsIFsKKyAgICAgICAg ICAgICAgICAgKCJob3N0YnVzIiwgICB1aW50OCksCisgICAgICAgICAgICAgICAgICgiaG9zdGFk ZHIiLCAgdWludDgpXSkpLAorICAgICAgICAgICBdKSksCisgICAgXSkKKwogbGlieGxfZGV2aWNl X2R0ZGV2ID0gU3RydWN0KCJkZXZpY2VfZHRkZXYiLCBbCiAgICAgKCJwYXRoIiwgc3RyaW5nKSwK ICAgICBdKQpAQCAtNjUxLDYgKzY4MCw4IEBAIGxpYnhsX2RvbWFpbl9jb25maWcgPSBTdHJ1Y3Qo ImRvbWFpbl9jb25maWciLCBbCiAgICAgIyBhIGNoYW5uZWwgbWFuaWZlc3RzIGFzIGEgY29uc29s ZSB3aXRoIGEgbmFtZSwKICAgICAjIHNlZSBkb2NzL21pc2MvY2hhbm5lbHMudHh0CiAgICAgKCJj aGFubmVscyIsIEFycmF5KGxpYnhsX2RldmljZV9jaGFubmVsLCAibnVtX2NoYW5uZWxzIikpLAor ICAgICgidXNiY3RybHMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdXNiY3RybCwgIm51bV91c2JjdHJs cyIpKSwKKyAgICAoInVzYmRldnMiLCBBcnJheShsaWJ4bF9kZXZpY2VfdXNiZGV2LCAibnVtX3Vz YmRldnMiKSksCiAKICAgICAoIm9uX3Bvd2Vyb2ZmIiwgbGlieGxfYWN0aW9uX29uX3NodXRkb3du KSwKICAgICAoIm9uX3JlYm9vdCIsIGxpYnhsX2FjdGlvbl9vbl9zaHV0ZG93biksCkBAIC02OTQs NiArNzI1LDIxIEBAIGxpYnhsX3Z0cG1pbmZvID0gU3RydWN0KCJ2dHBtaW5mbyIsIFsKICAgICAo InV1aWQiLCBsaWJ4bF91dWlkKSwKICAgICBdLCBkaXI9RElSX09VVCkKIAorbGlieGxfdXNiY3Ry bGluZm8gPSBTdHJ1Y3QoInVzYmN0cmxpbmZvIiwgWworICAgICgidHlwZSIsIGxpYnhsX3VzYmN0 cmxfdHlwZSksCisgICAgKCJkZXZpZCIsIGxpYnhsX2RldmlkKSwKKyAgICAoInZlcnNpb24iLCBp bnRlZ2VyKSwKKyAgICAoInBvcnRzIiwgaW50ZWdlciksCisgICAgKCJiYWNrZW5kIiwgc3RyaW5n KSwKKyAgICAoImJhY2tlbmRfaWQiLCB1aW50MzIpLAorICAgICgiZnJvbnRlbmQiLCBzdHJpbmcp LAorICAgICgiZnJvbnRlbmRfaWQiLCB1aW50MzIpLAorICAgICgic3RhdGUiLCBpbnRlZ2VyKSwK KyAgICAoImV2dGNoIiwgaW50ZWdlciksCisgICAgKCJyZWZfdXJiIiwgaW50ZWdlciksCisgICAg KCJyZWZfY29ubiIsIGludGVnZXIpLAorICAgIF0sIGRpcj1ESVJfT1VUKQorCiBsaWJ4bF92Y3B1 aW5mbyA9IFN0cnVjdCgidmNwdWluZm8iLCBbCiAgICAgKCJ2Y3B1aWQiLCB1aW50MzIpLAogICAg ICgiY3B1IiwgdWludDMyKSwKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2lu dGVybmFsLmlkbCBiL3Rvb2xzL2xpYnhsL2xpYnhsX3R5cGVzX2ludGVybmFsLmlkbAppbmRleCA1 ZTU1Njg1Li42OTZmNWY4IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF90eXBlc19pbnRl cm5hbC5pZGwKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfdHlwZXNfaW50ZXJuYWwuaWRsCkBAIC0y Miw2ICsyMiw3IEBAIGxpYnhsX19kZXZpY2Vfa2luZCA9IEVudW1lcmF0aW9uKCJkZXZpY2Vfa2lu ZCIsIFsKICAgICAoNiwgIlZLQkQiKSwKICAgICAoNywgIkNPTlNPTEUiKSwKICAgICAoOCwgIlZU UE0iKSwKKyAgICAoOSwgIlZVU0IiKSwKICAgICBdKQogCiBsaWJ4bF9fY29uc29sZV9iYWNrZW5k ID0gRW51bWVyYXRpb24oImNvbnNvbGVfYmFja2VuZCIsIFsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xp YnhsL2xpYnhsX3V0aWxzLmMgYi90b29scy9saWJ4bC9saWJ4bF91dGlscy5jCmluZGV4IGIwY2I5 ZTEuLmNlYjg4MjUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhsL2xpYnhsX3V0aWxzLmMKKysrIGIv dG9vbHMvbGlieGwvbGlieGxfdXRpbHMuYwpAQCAtMTMxMSw2ICsxMzExLDI0IEBAIGludCBsaWJ4 bF9fcmFuZG9tX2J5dGVzKGxpYnhsX19nYyAqZ2MsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGxlbikK ICAgICByZXR1cm4gcmV0OwogfQogCit2b2lkIGxpYnhsX2RldmljZV91c2JjdHJsX2xpc3RfZnJl ZShsaWJ4bF9kZXZpY2VfdXNiY3RybCAqbGlzdCwgaW50IG5yKQoreworICAgaW50IGk7CisKKyAg IGZvciAoaSA9IDA7IGkgPCBucjsgaSsrKQorICAgICAgIGxpYnhsX2RldmljZV91c2JjdHJsX2Rp c3Bvc2UoJmxpc3RbaV0pOworICAgZnJlZShsaXN0KTsKK30KKwordm9pZCBsaWJ4bF9kZXZpY2Vf dXNiZGV2X2xpc3RfZnJlZShsaWJ4bF9kZXZpY2VfdXNiZGV2ICpsaXN0LCBpbnQgbnIpCit7Cisg ICBpbnQgaTsKKworICAgZm9yIChpID0gMDsgaSA8IG5yOyBpKyspCisgICAgICAgbGlieGxfZGV2 aWNlX3VzYmRldl9kaXNwb3NlKCZsaXN0W2ldKTsKKyAgIGZyZWUobGlzdCk7Cit9CisKIC8qCiAg KiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBtb2RlOiBDCmRpZmYgLS1naXQgYS90b29scy9saWJ4bC9s aWJ4bF91dGlscy5oIGIvdG9vbHMvbGlieGwvbGlieGxfdXRpbHMuaAppbmRleCAzMzllYmRmLi40 NDk1NDE3IDEwMDY0NAotLS0gYS90b29scy9saWJ4bC9saWJ4bF91dGlscy5oCisrKyBiL3Rvb2xz L2xpYnhsL2xpYnhsX3V0aWxzLmgKQEAgLTc2LDYgKzc2LDExIEBAIGludCBsaWJ4bF91dWlkX3Rv X2RldmljZV92dHBtKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaWJ4bF91dWlkICp1dWlkLCBsaWJ4bF9kZXZpY2VfdnRwbSAq dnRwbSk7CiBpbnQgbGlieGxfZGV2aWRfdG9fZGV2aWNlX3Z0cG0obGlieGxfY3R4ICpjdHgsIHVp bnQzMl90IGRvbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkZXZpZCwg bGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG0pOworaW50IGxpYnhsX2RldmlkX3RvX2RldmljZV91c2Jj dHJsKGxpYnhsX2N0eCAqY3R4LCB1aW50MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZGV2aWQsIGxpYnhsX2RldmljZV91c2JjdHJsICp1c2JjdHJsKTsK K2ludCBsaWJ4bF9jdHJscG9ydF90b19kZXZpY2VfdXNiZGV2KGxpYnhsX2N0eCAqY3R4LCB1aW50 MzJfdCBkb21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjdHJs LCBpbnQgcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2Rl dmljZV91c2JkZXYgKnVzYmRldik7CiAKIGludCBsaWJ4bF9iaXRtYXBfYWxsb2MobGlieGxfY3R4 ICpjdHgsIGxpYnhsX2JpdG1hcCAqYml0bWFwLCBpbnQgbl9iaXRzKTsKICAgICAvKiBBbGxvY2F0 ZWQgYmltYXAgaXMgZnJvbSBtYWxsb2MsIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCkgdG8gYmUKLS0g CjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwOi8vbGlz dHMueGVuLm9yZy94ZW4tZGV2ZWwK