From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Zhang, Yang" Subject: [PATCH 2/2]Dom0: Backport e1000e and igb driver from RHEL5.3 Date: Mon, 16 Feb 2009 16:21:30 +0800 Message-ID: <10C63FAD690C13458F0B32BCED571F1406BAB7CD@pdsmsx502.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="_004_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_" Return-path: Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" Cc: "keir.fraser@eu.citrix.com" List-Id: xen-devel@lists.xenproject.org --_004_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_ Content-Type: multipart/alternative; boundary="_000_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_" --_000_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable This patch is for igb driver yang --_000_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_ Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

This patch is for igb driver

 

yang

--_000_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_-- --_004_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_ Content-Type: application/octet-stream; name="add_igb_driver.patch" Content-Description: add_igb_driver.patch Content-Disposition: attachment; filename="add_igb_driver.patch"; size=431778; creation-date="Fri, 13 Feb 2009 09:49:06 GMT"; modification-date="Mon, 16 Feb 2009 15:30:35 GMT" Content-Transfer-Encoding: base64 QWRkIHRoZSBpZ2IgZHJpdmVyIGZvciBkb20wCgpiYWNrcG9ydCB0aGUgZHJpdmVyIGZyb20gUkhF TDUuMyBhbmQgbWFrZSBpdCB3b3JrLgoKc2lnbmVkLW9mZi1ieTogWmhhbmcgWWFuZyA8eWFuZy56 aGFuZ0BpbnRlbC5jb20+CgpkaWZmIC1yIGFmNzQzZDE0YWE4YyBhcmNoL2kzODYvZGVmY29uZmln Ci0tLSBhL2FyY2gvaTM4Ni9kZWZjb25maWcJVGh1IEZlYiAxMiAwMjo1OTozMSAyMDA5IC0wNTAw CisrKyBiL2FyY2gvaTM4Ni9kZWZjb25maWcJVGh1IEZlYiAxMiAwMzowNDoyMiAyMDA5IC0wNTAw CkBAIC02OTMsNiArNjkzLDcgQEAgQ09ORklHX0UxMDA9eQogIyBDT05GSUdfVklBX1ZFTE9DSVRZ IGlzIG5vdCBzZXQKICMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CiAjIENPTkZJR19CTlgyIGlz IG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CiAKICMKICMgRXRoZXJuZXQgKDEwMDAw IE1iaXQpCmRpZmYgLXIgYWY3NDNkMTRhYThjIGFyY2gvaWE2NC9kZWZjb25maWcKLS0tIGEvYXJj aC9pYTY0L2RlZmNvbmZpZwlUaHUgRmViIDEyIDAyOjU5OjMxIDIwMDkgLTA1MDAKKysrIGIvYXJj aC9pYTY0L2RlZmNvbmZpZwlUaHUgRmViIDEyIDAzOjAzOjU2IDIwMDkgLTA1MDAKQEAgLTYwNyw2 ICs2MDcsNyBAQCBDT05GSUdfRTEwMDBFPXkKICMgQ09ORklHX1NLOThMSU4gaXMgbm90IHNldAog IyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKIENPTkZJR19USUdPTjM9eQorQ09ORklH X0lHQj15CiAjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKIAogIwpkaWZmIC1yIGFmNzQzZDE0YWE4 YyBhcmNoL3g4Nl82NC9kZWZjb25maWcKLS0tIGEvYXJjaC94ODZfNjQvZGVmY29uZmlnCVRodSBG ZWIgMTIgMDI6NTk6MzEgMjAwOSAtMDUwMAorKysgYi9hcmNoL3g4Nl82NC9kZWZjb25maWcJVGh1 IEZlYiAxMiAwMzowMzoyOCAyMDA5IC0wNTAwCkBAIC03MTUsNiArNzE1LDcgQEAgQ09ORklHX0Ux MDAwRT15CiAjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAogQ09ORklHX1RJR09OMz15 CiBDT05GSUdfQk5YMj15CitDT05GSUdfSUdCPXkKIAogIwogIyBFdGhlcm5ldCAoMTAwMDAgTWJp dCkKZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJpdmVycy9uZXQvS2NvbmZpZwotLS0gYS9kcml2ZXJz L25ldC9LY29uZmlnCVRodSBGZWIgMTIgMDI6NTk6MzEgMjAwOSAtMDUwMAorKysgYi9kcml2ZXJz L25ldC9LY29uZmlnCVRodSBGZWIgMTIgMDM6MDA6MTMgMjAwOSAtMDUwMApAQCAtMTk1OSw2ICsx OTU5LDI4IEBAIGNvbmZpZyBFMTAwMF9ESVNBQkxFX1BBQ0tFVF9TUExJVAogCSAgaGFyZHdhcmUu CiAKIAkgIElmIGluIGRvdWJ0LCBzYXkgTi4KKworY29uZmlnIElHQgorCXRyaXN0YXRlICJJbnRl bChSKSA4MjU3NSBHaWdhYml0IEV0aGVybmV0IHN1cHBvcnQiCisJZGVwZW5kcyBvbiBQQ0kKKwkt LS1oZWxwLS0tCisJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBJbnRlbChSKSA4MjU3NSBnaWdhYml0 IGV0aGVybmV0IGFkYXB0ZXJzLgorCSAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIGlk ZW50aWZ5IHlvdXIgYWRhcHRlciwgZ28gdG8gdGhlCisJICBBZGFwdGVyICYgRHJpdmVyIElEIEd1 aWRlIGF0OgorCisJICA8aHR0cDovL3N1cHBvcnQuaW50ZWwuY29tL3N1cHBvcnQvbmV0d29yay9h ZGFwdGVyL3BybzEwMC8yMTM5Ny5odG0+CisKKwkgIEZvciBnZW5lcmFsIGluZm9ybWF0aW9uIGFu ZCBzdXBwb3J0LCBnbyB0byB0aGUgSW50ZWwgc3VwcG9ydAorCSAgd2Vic2l0ZSBhdDoKKworCSAg PGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbT4KKworCSAgTW9yZSBzcGVjaWZpYyBpbmZvcm1hdGlv biBvbiBjb25maWd1cmluZyB0aGUgZHJpdmVyIGlzIGluCisJICA8ZmlsZTpEb2N1bWVudGF0aW9u L25ldHdvcmtpbmcvaWdiLnR4dD4uCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBt b2R1bGUsIGNob29zZSBNIGhlcmUgYW5kIHJlYWQKKwkgIDxmaWxlOkRvY3VtZW50YXRpb24vbmV0 d29ya2luZy9uZXQtbW9kdWxlcy50eHQ+LiAgVGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQg aWdiLgogCiBjb25maWcgRTEwMDBFCiAJdHJpc3RhdGUgIkludGVsKFIpIFBSTy8xMDAwIFBDSS1F eHByZXNzIEdpZ2FiaXQgRXRoZXJuZXQgc3VwcG9ydCIKZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJp dmVycy9uZXQvTWFrZWZpbGUKLS0tIGEvZHJpdmVycy9uZXQvTWFrZWZpbGUJVGh1IEZlYiAxMiAw Mjo1OTozMSAyMDA5IC0wNTAwCisrKyBiL2RyaXZlcnMvbmV0L01ha2VmaWxlCVRodSBGZWIgMTIg MDM6MDA6MTMgMjAwOSAtMDUwMApAQCAtMTAsNiArMTAsNyBAQCBvYmotJChDT05GSUdfRTEwMDBF KSArPSBlMTAwMGUvCiBvYmotJChDT05GSUdfRTEwMDBFKSArPSBlMTAwMGUvCiBvYmotJChDT05G SUdfSUJNX0VNQUMpICs9IGlibV9lbWFjLwogb2JqLSQoQ09ORklHX0lYR0IpICs9IGl4Z2IvCitv YmotJChDT05GSUdfSUdCKSArPSBpZ2IvCiBvYmotJChDT05GSUdfSVhHQkUpICs9IGl4Z2JlLwog b2JqLSQoQ09ORklHX0NIRUxTSU9fVDEpICs9IGNoZWxzaW8vCiBvYmotJChDT05GSUdfQk9ORElO RykgKz0gYm9uZGluZy8KZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJpdmVycy9uZXQvaWdiL01ha2Vm aWxlCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2Ry aXZlcnMvbmV0L2lnYi9NYWtlZmlsZQlUaHUgRmViIDEyIDAzOjAxOjI0IDIwMDkgLTA1MDAKQEAg LTAsMCArMSwzNyBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMKKyMgSW50ZWwgODI1NzUg UENJLUV4cHJlc3MgRXRoZXJuZXQgTGludXggZHJpdmVyCisjIENvcHlyaWdodChjKSAxOTk5IC0g MjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhl IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwK KyMgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwg YmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg aW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyMgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv cgorIyBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyMgdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s CisjIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisjCisjIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVk IGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisjIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisj CisjIENvbnRhY3QgSW5mb3JtYXRpb246CisjIExpbnV4IE5JQ1MgPGxpbnV4Lm5pY3NAaW50ZWwu Y29tPgorIyBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJj ZWZvcmdlLm5ldD4KKyMgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBh cmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworIworIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMKKworIworIyBNYWtlZmlsZSBmb3IgdGhlIEludGVsKFIpIDgyNTc1IFBDSS1FeHByZXNzIGV0 aGVybmV0IGRyaXZlcgorIworCitvYmotJChDT05GSUdfSUdCKSArPSBpZ2IubworCitpZ2Itb2Jq cyA6PSBpZ2JfbWFpbi5vIGlnYl9ldGh0b29sLm8gZTEwMDBfODI1NzUubyBcCisJICAgIGUxMDAw X21hYy5vIGUxMDAwX252bS5vIGUxMDAwX3BoeS5vCisKZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJp dmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAw OjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmMJVGh1IEZl YiAxMiAwMzowMjoxNCAyMDA5IC0wNTAwCkBAIC0wLDAgKzEsMTQ1NSBAQAorLyoqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioKKworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgor ICBDb3B5cmlnaHQoYykgMjAwNyAtIDIwMDggSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5U WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBv cgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9u ZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNh bGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwg TWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVs IENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9S IDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZTEwMDBfODI1NzUK KyAqIGUxMDAwXzgyNTc2CisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVk ZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisKKyNpbmNsdWRl ICJlMTAwMF9tYWMuaCIKKyNpbmNsdWRlICJlMTAwMF84MjU3NS5oIgorCitzdGF0aWMgczMyICBp Z2JfZ2V0X2ludmFyaWFudHNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHMzMiAg aWdiX2FjcXVpcmVfcGh5XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyB2b2lkIGln Yl9yZWxlYXNlX3BoeV84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CitzdGF0aWMgczMyICBpZ2Jf YWNxdWlyZV9udm1fODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHZvaWQgaWdiX3Jl bGVhc2VfbnZtXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyBzMzIgIGlnYl9jaGVj a19mb3JfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CitzdGF0aWMgczMyICBpZ2JfZ2V0 X2NmZ19kb25lXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyBzMzIgIGlnYl9pbml0 X2h3XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyBzMzIgIGlnYl9waHlfaHdfcmVz ZXRfc2dtaWlfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHMzMiAgaWdiX3JlYWRf cGh5X3JlZ19zZ21paV84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTMyLCB1MTYgKik7CitzdGF0 aWMgczMyICBpZ2JfcmVzZXRfaHdfODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHMz MiAgaWdiX3NldF9kMF9scGx1X3N0YXRlXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsK K3N0YXRpYyBzMzIgIGlnYl9zZXR1cF9jb3BwZXJfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcg Kik7CitzdGF0aWMgczMyICBpZ2Jfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoc3RydWN0 IGUxMDAwX2h3ICopOworc3RhdGljIHMzMiAgaWdiX3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzUo c3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKK3N0YXRpYyB2b2lkIGlnYl9jbGVhcl9od19j bnRyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKik7CitzdGF0aWMgczMyICBpZ2JfYWNxdWlyZV9z d2Z3X3N5bmNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHUxNik7CitzdGF0aWMgczMyICBpZ2Jf Y29uZmlndXJlX3Bjc19saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyBzMzIg IGlnYl9nZXRfcGNzX3NwZWVkX2FuZF9kdXBsZXhfODI1NzUoc3RydWN0IGUxMDAwX2h3ICosIHUx NiAqLAorCQkJCQkJIHUxNiAqKTsKK3N0YXRpYyBzMzIgIGlnYl9nZXRfcGh5X2lkXzgyNTc1KHN0 cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3N3Zndfc3luY184MjU3 NShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2KTsKK3N0YXRpYyBib29sIGlnYl9zZ21paV9hY3RpdmVf ODI1NzUoc3RydWN0IGUxMDAwX2h3ICopOworc3RhdGljIHMzMiAgaWdiX3Jlc2V0X2luaXRfc2Ny aXB0XzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKK3N0YXRpYyBzMzIgIGlnYl9yZWFkX21hY19h ZGRyXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqKTsKKworCitzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNf ODI1NzUgeworCWJvb2wgc2dtaWlfYWN0aXZlOworfTsKKworc3RhdGljIHMzMiBpZ2JfZ2V0X2lu dmFyaWFudHNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfcGh5 X2luZm8gKnBoeSA9ICZody0+cGh5OworCXN0cnVjdCBlMTAwMF9udm1faW5mbyAqbnZtID0gJmh3 LT5udm07CisJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwlzdHJ1Y3Qg ZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjOworCXUzMiBlZWNkOworCXMzMiByZXRfdmFs OworCXUxNiBzaXplOworCXUzMiBjdHJsX2V4dCA9IDA7CisKKwlzd2l0Y2ggKGh3LT5kZXZpY2Vf aWQpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUjoKKwljYXNlIEUxMDAwX0RF Vl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FV QURfQ09QUEVSOgorCQltYWMtPnR5cGUgPSBlMTAwMF84MjU3NTsKKwkJYnJlYWs7CisJY2FzZSBF MTAwMF9ERVZfSURfODI1NzY6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfRklCRVI6CisJY2Fz ZSBFMTAwMF9ERVZfSURfODI1NzZfU0VSREVTOgorCWNhc2UgRTEwMDBfREVWX0lEXzgyNTc2X1FV QURfQ09QUEVSOgorCQltYWMtPnR5cGUgPSBlMTAwMF84MjU3NjsKKwkJYnJlYWs7CisJZGVmYXVs dDoKKwkJcmV0dXJuIC1FMTAwMF9FUlJfTUFDX0lOSVQ7CisJCWJyZWFrOworCX0KKworCS8qIE1B QyBpbml0aWFsaXphdGlvbiAqLworCWh3LT5kZXZfc3BlY19zaXplID0gc2l6ZW9mKHN0cnVjdCBl MTAwMF9kZXZfc3BlY184MjU3NSk7CisKKwkvKiBEZXZpY2Utc3BlY2lmaWMgc3RydWN0dXJlIGFs bG9jYXRpb24gKi8KKwlody0+ZGV2X3NwZWMgPSBremFsbG9jKGh3LT5kZXZfc3BlY19zaXplLCBH RlBfS0VSTkVMKTsKKworCWlmICghaHctPmRldl9zcGVjKQorCQlyZXR1cm4gLUVOT01FTTsKKwor CWRldl9zcGVjID0gKHN0cnVjdCBlMTAwMF9kZXZfc3BlY184MjU3NSAqKWh3LT5kZXZfc3BlYzsK KworCS8qIFNldCBtZWRpYSB0eXBlICovCisJLyoKKwkgKiBUaGUgODI1NzUgdXNlcyBiaXRzIDIy OjIzIGZvciBsaW5rIG1vZGUuIFRoZSBtb2RlIGNhbiBiZSBjaGFuZ2VkCisJICogYmFzZWQgb24g dGhlIEVFUFJPTS4gV2UgY2Fubm90IHJlbHkgdXBvbiBkZXZpY2UgSUQuIFRoZXJlCisJICogaXMg bm8gZGlzdGluZ3Vpc2hhYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiBmaWJlciBhbmQgaW50ZXJuYWwK KwkgKiBTZXJEZXMgbW9kZSBvbiB0aGUgODI1NzUuIFRoZXJlIGNhbiBiZSBhbiBleHRlcm5hbCBQ SFkgYXR0YWNoZWQKKwkgKiBvbiB0aGUgU0dNSUkgaW50ZXJmYWNlLiBGb3IgdGhpcywgd2UnbGwg c2V0IHNnbWlpX2FjdGl2ZSB0byB0cnVlLgorCSAqLworCXBoeS0+bWVkaWFfdHlwZSA9IGUxMDAw X21lZGlhX3R5cGVfY29wcGVyOworCWRldl9zcGVjLT5zZ21paV9hY3RpdmUgPSBmYWxzZTsKKwor CWN0cmxfZXh0ID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJaWYgKChjdHJsX2V4dCAmIEUxMDAw X0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLKSA9PQorCSAgICBFMTAwMF9DVFJMX0VYVF9MSU5LX01P REVfUENJRV9TRVJERVMpIHsKKwkJaHctPnBoeS5tZWRpYV90eXBlID0gZTEwMDBfbWVkaWFfdHlw ZV9pbnRlcm5hbF9zZXJkZXM7CisJCWN0cmxfZXh0IHw9IEUxMDAwX0NUUkxfSTJDX0VOQTsKKwl9 IGVsc2UgaWYgKGN0cmxfZXh0ICYgRTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX1NHTUlJKSB7CisJ CWRldl9zcGVjLT5zZ21paV9hY3RpdmUgPSB0cnVlOworCQljdHJsX2V4dCB8PSBFMTAwMF9DVFJM X0kyQ19FTkE7CisJfSBlbHNlIHsKKwkJY3RybF9leHQgJj0gfkUxMDAwX0NUUkxfSTJDX0VOQTsK Kwl9CisJd3IzMihFMTAwMF9DVFJMX0VYVCwgY3RybF9leHQpOworCisJLyogU2V0IG10YSByZWdp c3RlciBjb3VudCAqLworCW1hYy0+bXRhX3JlZ19jb3VudCA9IDEyODsKKwkvKiBTZXQgcmFyIGVu dHJ5IGNvdW50ICovCisJbWFjLT5yYXJfZW50cnlfY291bnQgPSBFMTAwMF9SQVJfRU5UUklFU184 MjU3NTsKKwlpZiAobWFjLT50eXBlID09IGUxMDAwXzgyNTc2KQorCQltYWMtPnJhcl9lbnRyeV9j b3VudCA9IEUxMDAwX1JBUl9FTlRSSUVTXzgyNTc2OworCS8qIFNldCBpZiBwYXJ0IGluY2x1ZGVz IEFTRiBmaXJtd2FyZSAqLworCW1hYy0+YXNmX2Zpcm13YXJlX3ByZXNlbnQgPSB0cnVlOworCS8q IFNldCBpZiBtYW5hZ2VhYmlsaXR5IGZlYXR1cmVzIGFyZSBlbmFibGVkLiAqLworCW1hYy0+YXJj X3N1YnN5c3RlbV92YWxpZCA9CisJCShyZDMyKEUxMDAwX0ZXU00pICYgRTEwMDBfRldTTV9NT0RF X01BU0spCisJCQk/IHRydWUgOiBmYWxzZTsKKworCS8qIHBoeXNpY2FsIGludGVyZmFjZSBsaW5r IHNldHVwICovCisJbWFjLT5vcHMuc2V0dXBfcGh5c2ljYWxfaW50ZXJmYWNlID0KKwkJKGh3LT5w aHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2NvcHBlcikKKwkJCT8gaWdiX3NldHVw X2NvcHBlcl9saW5rXzgyNTc1CisJCQk6IGlnYl9zZXR1cF9maWJlcl9zZXJkZXNfbGlua184MjU3 NTsKKworCS8qIE5WTSBpbml0aWFsaXphdGlvbiAqLworCWVlY2QgPSByZDMyKEUxMDAwX0VFQ0Qp OworCisJbnZtLT5vcGNvZGVfYml0cyAgICAgICAgPSA4OworCW52bS0+ZGVsYXlfdXNlYyAgICAg ICAgID0gMTsKKwlzd2l0Y2ggKG52bS0+b3ZlcnJpZGUpIHsKKwljYXNlIGUxMDAwX252bV9vdmVy cmlkZV9zcGlfbGFyZ2U6CisJCW52bS0+cGFnZV9zaXplICAgID0gMzI7CisJCW52bS0+YWRkcmVz c19iaXRzID0gMTY7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfbnZtX292ZXJyaWRlX3NwaV9zbWFs bDoKKwkJbnZtLT5wYWdlX3NpemUgICAgPSA4OworCQludm0tPmFkZHJlc3NfYml0cyA9IDg7CisJ CWJyZWFrOworCWRlZmF1bHQ6CisJCW52bS0+cGFnZV9zaXplICAgID0gZWVjZCAmIEUxMDAwX0VF Q0RfQUREUl9CSVRTID8gMzIgOiA4OworCQludm0tPmFkZHJlc3NfYml0cyA9IGVlY2QgJiBFMTAw MF9FRUNEX0FERFJfQklUUyA/IDE2IDogODsKKwkJYnJlYWs7CisJfQorCisJbnZtLT50eXBlID0g ZTEwMDBfbnZtX2VlcHJvbV9zcGk7CisKKwlzaXplID0gKHUxNikoKGVlY2QgJiBFMTAwMF9FRUNE X1NJWkVfRVhfTUFTSykgPj4KKwkJICAgICBFMTAwMF9FRUNEX1NJWkVfRVhfU0hJRlQpOworCisJ LyoKKwkgKiBBZGRlZCB0byBhIGNvbnN0YW50LCAic2l6ZSIgYmVjb21lcyB0aGUgbGVmdC1zaGlm dCB2YWx1ZQorCSAqIGZvciBzZXR0aW5nIHdvcmRfc2l6ZS4KKwkgKi8KKwlzaXplICs9IE5WTV9X T1JEX1NJWkVfQkFTRV9TSElGVDsKKworCS8qIEVFUFJPTSBhY2Nlc3MgYWJvdmUgMTZrIGlzIHVu c3VwcG9ydGVkICovCisJaWYgKHNpemUgPiAxNCkKKwkJc2l6ZSA9IDE0OworCW52bS0+d29yZF9z aXplID0gMSA8PCBzaXplOworCisJLyogc2V0dXAgUEhZIHBhcmFtZXRlcnMgKi8KKwlpZiAocGh5 LT5tZWRpYV90eXBlICE9IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7CisJCXBoeS0+dHlwZSA9 IGUxMDAwX3BoeV9ub25lOworCQlyZXR1cm4gMDsKKwl9CisKKwlwaHktPmF1dG9uZWdfbWFzayAg ICAgICAgPSBBVVRPTkVHX0FEVkVSVElTRV9TUEVFRF9ERUZBVUxUOworCXBoeS0+cmVzZXRfZGVs YXlfdXMgICAgICA9IDEwMDsKKworCS8qIFBIWSBmdW5jdGlvbiBwb2ludGVycyAqLworCWlmIChp Z2Jfc2dtaWlfYWN0aXZlXzgyNTc1KGh3KSkgeworCQlwaHktPm9wcy5yZXNldF9waHkgICAgICAg ICAgPSBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1OworCQlwaHktPm9wcy5yZWFkX3BoeV9y ZWcgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX3NnbWlpXzgyNTc1OworCQlwaHktPm9wcy53cml0 ZV9waHlfcmVnICAgICAgPSBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84MjU3NTsKKwl9IGVsc2Ug eworCQlwaHktPm9wcy5yZXNldF9waHkgICAgICAgICAgPSBpZ2JfcGh5X2h3X3Jlc2V0OworCQlw aHktPm9wcy5yZWFkX3BoeV9yZWcgICAgICAgPSBpZ2JfcmVhZF9waHlfcmVnX2lncDsKKwkJcGh5 LT5vcHMud3JpdGVfcGh5X3JlZyAgICAgID0gaWdiX3dyaXRlX3BoeV9yZWdfaWdwOworCX0KKwor CS8qIFNldCBwaHktPnBoeV9hZGRyIGFuZCBwaHktPmlkLiAqLworCXJldF92YWwgPSBpZ2JfZ2V0 X3BoeV9pZF84MjU3NShodyk7CisJaWYgKHJldF92YWwpCisJCXJldHVybiByZXRfdmFsOworCisJ LyogVmVyaWZ5IHBoeSBpZCBhbmQgc2V0IHJlbWFpbmluZyBmdW5jdGlvbiBwb2ludGVycyAqLwor CXN3aXRjaCAocGh5LT5pZCkgeworCWNhc2UgTTg4RTExMTFfSV9QSFlfSUQ6CisJCXBoeS0+dHlw ZSAgICAgICAgICAgICAgICAgICA9IGUxMDAwX3BoeV9tODg7CisJCXBoeS0+b3BzLmdldF9waHlf aW5mbyAgICAgICA9IGlnYl9nZXRfcGh5X2luZm9fbTg4OworCQlwaHktPm9wcy5nZXRfY2FibGVf bGVuZ3RoICAgPSBpZ2JfZ2V0X2NhYmxlX2xlbmd0aF9tODg7CisJCXBoeS0+b3BzLmZvcmNlX3Nw ZWVkX2R1cGxleCA9IGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204ODsKKwkJYnJlYWs7CisJ Y2FzZSBJR1AwM0UxMDAwX0VfUEhZX0lEOgorCQlwaHktPnR5cGUgICAgICAgICAgICAgICAgICAg PSBlMTAwMF9waHlfaWdwXzM7CisJCXBoeS0+b3BzLmdldF9waHlfaW5mbyAgICAgICA9IGlnYl9n ZXRfcGh5X2luZm9faWdwOworCQlwaHktPm9wcy5nZXRfY2FibGVfbGVuZ3RoICAgPSBpZ2JfZ2V0 X2NhYmxlX2xlbmd0aF9pZ3BfMjsKKwkJcGh5LT5vcHMuZm9yY2Vfc3BlZWRfZHVwbGV4ID0gaWdi X3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfaWdwOworCQlwaHktPm9wcy5zZXRfZDBfbHBsdV9zdGF0 ZSAgPSBpZ2Jfc2V0X2QwX2xwbHVfc3RhdGVfODI1NzU7CisJCXBoeS0+b3BzLnNldF9kM19scGx1 X3N0YXRlICA9IGlnYl9zZXRfZDNfbHBsdV9zdGF0ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ cmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBp Z2JfYWNxdWlyZV9waHlfODI1NzUgLSBBY3F1aXJlIHJpZ2h0cyB0byBhY2Nlc3MgUEhZCisgKiAg QGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQWNxdWlyZSBhY2Nlc3Mg cmlnaHRzIHRvIHRoZSBjb3JyZWN0IFBIWS4gIFRoaXMgaXMgYQorICogIGZ1bmN0aW9uIHBvaW50 ZXIgZW50cnkgcG9pbnQgY2FsbGVkIGJ5IHRoZSBhcGkgbW9kdWxlLgorICoqLworc3RhdGljIHMz MiBpZ2JfYWNxdWlyZV9waHlfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MTYgbWFz azsKKworCW1hc2sgPSBody0+YnVzLmZ1bmMgPyBFMTAwMF9TV0ZXX1BIWTFfU00gOiBFMTAwMF9T V0ZXX1BIWTBfU007CisKKwlyZXR1cm4gaWdiX2FjcXVpcmVfc3dmd19zeW5jXzgyNTc1KGh3LCBt YXNrKTsKK30KKworLyoqCisgKiAgaWdiX3JlbGVhc2VfcGh5XzgyNTc1IC0gUmVsZWFzZSByaWdo dHMgdG8gYWNjZXNzIFBIWQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisg KgorICogIEEgd3JhcHBlciB0byByZWxlYXNlIGFjY2VzcyByaWdodHMgdG8gdGhlIGNvcnJlY3Qg UEhZLiAgVGhpcyBpcyBhCisgKiAgZnVuY3Rpb24gcG9pbnRlciBlbnRyeSBwb2ludCBjYWxsZWQg YnkgdGhlIGFwaSBtb2R1bGUuCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfcmVsZWFzZV9waHlfODI1 NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MTYgbWFzazsKKworCW1hc2sgPSBody0+YnVz LmZ1bmMgPyBFMTAwMF9TV0ZXX1BIWTFfU00gOiBFMTAwMF9TV0ZXX1BIWTBfU007CisJaWdiX3Jl bGVhc2Vfc3dmd19zeW5jXzgyNTc1KGh3LCBtYXNrKTsKK30KKworLyoqCisgKiAgaWdiX3JlYWRf cGh5X3JlZ19zZ21paV84MjU3NSAtIFJlYWQgUEhZIHJlZ2lzdGVyIHVzaW5nIHNnbWlpCisgKiAg QGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBv ZmZzZXQgdG8gYmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAq CisgKiAgUmVhZHMgdGhlIFBIWSByZWdpc3RlciBhdCBvZmZzZXQgdXNpbmcgdGhlIHNlcmlhbCBn aWdhYml0IG1lZGlhIGluZGVwZW5kZW50CisgKiAgaW50ZXJmYWNlIGFuZCBzdG9yZXMgdGhlIHJl dHJpZXZlZCBpbmZvcm1hdGlvbiBpbiBkYXRhLgorICoqLworc3RhdGljIHMzMiBpZ2JfcmVhZF9w aHlfcmVnX3NnbWlpXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsCisJCQkJ CSAgdTE2ICpkYXRhKQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7 CisJdTMyIGksIGkyY2NtZCA9IDA7CisKKwlpZiAob2Zmc2V0ID4gRTEwMDBfTUFYX1NHTUlJX1BI WV9SRUdfQUREUikgeworCQlod19kYmcoIlBIWSBBZGRyZXNzICV1IGlzIG91dCBvZiByYW5nZVxu Iiwgb2Zmc2V0KTsKKwkJcmV0dXJuIC1FMTAwMF9FUlJfUEFSQU07CisJfQorCisJLyoKKwkgKiBT ZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3RlciBhZGRyZXNzIGluIHRoZSBJ MkNDTUQKKwkgKiByZWdpc3Rlci4gIFRoZSBNQUMgd2lsbCB0YWtlIGNhcmUgb2YgaW50ZXJmYWNp bmcgd2l0aCB0aGUKKwkgKiBQSFkgdG8gcmV0cmlldmUgdGhlIGRlc2lyZWQgZGF0YS4KKwkgKi8K KwlpMmNjbWQgPSAoKG9mZnNldCA8PCBFMTAwMF9JMkNDTURfUkVHX0FERFJfU0hJRlQpIHwKKwkJ ICAocGh5LT5hZGRyIDw8IEUxMDAwX0kyQ0NNRF9QSFlfQUREUl9TSElGVCkgfAorCQkgIChFMTAw MF9JMkNDTURfT1BDT0RFX1JFQUQpKTsKKworCXdyMzIoRTEwMDBfSTJDQ01ELCBpMmNjbWQpOwor CisJLyogUG9sbCB0aGUgcmVhZHkgYml0IHRvIHNlZSBpZiB0aGUgSTJDIHJlYWQgY29tcGxldGVk ICovCisJZm9yIChpID0gMDsgaSA8IEUxMDAwX0kyQ0NNRF9QSFlfVElNRU9VVDsgaSsrKSB7CisJ CXVkZWxheSg1MCk7CisJCWkyY2NtZCA9IHJkMzIoRTEwMDBfSTJDQ01EKTsKKwkJaWYgKGkyY2Nt ZCAmIEUxMDAwX0kyQ0NNRF9SRUFEWSkKKwkJCWJyZWFrOworCX0KKwlpZiAoIShpMmNjbWQgJiBF MTAwMF9JMkNDTURfUkVBRFkpKSB7CisJCWh3X2RiZygiSTJDQ01EIFJlYWQgZGlkIG5vdCBjb21w bGV0ZVxuIik7CisJCXJldHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJaWYgKGkyY2NtZCAmIEUx MDAwX0kyQ0NNRF9FUlJPUikgeworCQlod19kYmcoIkkyQ0NNRCBFcnJvciBiaXQgc2V0XG4iKTsK KwkJcmV0dXJuIC1FMTAwMF9FUlJfUEhZOworCX0KKworCS8qIE5lZWQgdG8gYnl0ZS1zd2FwIHRo ZSAxNi1iaXQgdmFsdWUuICovCisJKmRhdGEgPSAoKGkyY2NtZCA+PiA4KSAmIDB4MDBGRikgfCAo KGkyY2NtZCA8PCA4KSAmIDB4RkYwMCk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaWdi X3dyaXRlX3BoeV9yZWdfc2dtaWlfODI1NzUgLSBXcml0ZSBQSFkgcmVnaXN0ZXIgdXNpbmcgc2dt aWkKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IHJl Z2lzdGVyIG9mZnNldCB0byB3cml0ZSB0bworICogIEBkYXRhOiBkYXRhIHRvIHdyaXRlIGF0IHJl Z2lzdGVyIG9mZnNldAorICoKKyAqICBXcml0ZXMgdGhlIGRhdGEgdG8gUEhZIHJlZ2lzdGVyIGF0 IHRoZSBvZmZzZXQgdXNpbmcgdGhlIHNlcmlhbCBnaWdhYml0CisgKiAgbWVkaWEgaW5kZXBlbmRl bnQgaW50ZXJmYWNlLgorICoqLworc3RhdGljIHMzMiBpZ2Jfd3JpdGVfcGh5X3JlZ19zZ21paV84 MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgb2Zmc2V0LAorCQkJCQkgICB1MTYgZGF0YSkK K3sKKwlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OworCXUzMiBpLCBpMmNj bWQgPSAwOworCXUxNiBwaHlfZGF0YV9zd2FwcGVkOworCisJaWYgKG9mZnNldCA+IEUxMDAwX01B WF9TR01JSV9QSFlfUkVHX0FERFIpIHsKKwkJaHdfZGJnKCJQSFkgQWRkcmVzcyAlZCBpcyBvdXQg b2YgcmFuZ2VcbiIsIG9mZnNldCk7CisJCXJldHVybiAtRTEwMDBfRVJSX1BBUkFNOworCX0KKwor CS8qIFN3YXAgdGhlIGRhdGEgYnl0ZXMgZm9yIHRoZSBJMkMgaW50ZXJmYWNlICovCisJcGh5X2Rh dGFfc3dhcHBlZCA9ICgoZGF0YSA+PiA4KSAmIDB4MDBGRikgfCAoKGRhdGEgPDwgOCkgJiAweEZG MDApOworCisJLyoKKwkgKiBTZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3Rl ciBhZGRyZXNzIGluIHRoZSBJMkNDTUQKKwkgKiByZWdpc3Rlci4gIFRoZSBNQUMgd2lsbCB0YWtl IGNhcmUgb2YgaW50ZXJmYWNpbmcgd2l0aCB0aGUKKwkgKiBQSFkgdG8gcmV0cmlldmUgdGhlIGRl c2lyZWQgZGF0YS4KKwkgKi8KKwlpMmNjbWQgPSAoKG9mZnNldCA8PCBFMTAwMF9JMkNDTURfUkVH X0FERFJfU0hJRlQpIHwKKwkJICAocGh5LT5hZGRyIDw8IEUxMDAwX0kyQ0NNRF9QSFlfQUREUl9T SElGVCkgfAorCQkgIEUxMDAwX0kyQ0NNRF9PUENPREVfV1JJVEUgfAorCQkgIHBoeV9kYXRhX3N3 YXBwZWQpOworCisJd3IzMihFMTAwMF9JMkNDTUQsIGkyY2NtZCk7CisKKwkvKiBQb2xsIHRoZSBy ZWFkeSBiaXQgdG8gc2VlIGlmIHRoZSBJMkMgcmVhZCBjb21wbGV0ZWQgKi8KKwlmb3IgKGkgPSAw OyBpIDwgRTEwMDBfSTJDQ01EX1BIWV9USU1FT1VUOyBpKyspIHsKKwkJdWRlbGF5KDUwKTsKKwkJ aTJjY21kID0gcmQzMihFMTAwMF9JMkNDTUQpOworCQlpZiAoaTJjY21kICYgRTEwMDBfSTJDQ01E X1JFQURZKQorCQkJYnJlYWs7CisJfQorCWlmICghKGkyY2NtZCAmIEUxMDAwX0kyQ0NNRF9SRUFE WSkpIHsKKwkJaHdfZGJnKCJJMkNDTUQgV3JpdGUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CisJCXJl dHVybiAtRTEwMDBfRVJSX1BIWTsKKwl9CisJaWYgKGkyY2NtZCAmIEUxMDAwX0kyQ0NNRF9FUlJP UikgeworCQlod19kYmcoIkkyQ0NNRCBFcnJvciBiaXQgc2V0XG4iKTsKKwkJcmV0dXJuIC1FMTAw MF9FUlJfUEhZOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpZ2JfZ2V0X3BoeV9p ZF84MjU3NSAtIFJldHJpZXZlIFBIWSBhZGRyIGFuZCBpZAorICogIEBodzogcG9pbnRlciB0byB0 aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJldHJpZXZlcyB0aGUgUEhZIGFkZHJlc3MgYW5kIElE IGZvciBib3RoIFBIWSdzIHdoaWNoIGRvIGFuZCBkbyBub3QgdXNlCisgKiAgc2dtaSBpbnRlcmZh Y2UuCisgKiovCitzdGF0aWMgczMyIGlnYl9nZXRfcGh5X2lkXzgyNTc1KHN0cnVjdCBlMTAwMF9o dyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIg IHJldF92YWwgPSAwOworCXUxNiBwaHlfaWQ7CisKKwkvKgorCSAqIEZvciBTR01JSSBQSFlzLCB3 ZSB0cnkgdGhlIGxpc3Qgb2YgcG9zc2libGUgYWRkcmVzc2VzIHVudGlsCisJICogd2UgZmluZCBv bmUgdGhhdCB3b3Jrcy4gIEZvciBub24tU0dNSUkgUEhZcworCSAqIChlLmcuIGludGVncmF0ZWQg Y29wcGVyIFBIWXMpLCBhbiBhZGRyZXNzIG9mIDEgc2hvdWxkCisJICogd29yay4gIFRoZSByZXN1 bHQgb2YgdGhpcyBmdW5jdGlvbiBzaG91bGQgbWVhbiBwaHktPnBoeV9hZGRyCisJICogYW5kIHBo eS0+aWQgYXJlIHNldCBjb3JyZWN0bHkuCisJICovCisJaWYgKCEoaWdiX3NnbWlpX2FjdGl2ZV84 MjU3NShodykpKSB7CisJCXBoeS0+YWRkciA9IDE7CisJCXJldF92YWwgPSBpZ2JfZ2V0X3BoeV9p ZChodyk7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogVGhlIGFkZHJlc3MgZmllbGQgaW4g dGhlIEkyQ0NNRCByZWdpc3RlciBpcyAzIGJpdHMgYW5kIDAgaXMgaW52YWxpZC4KKwkgKiBUaGVy ZWZvcmUsIHdlIG5lZWQgdG8gdGVzdCAxLTcKKwkgKi8KKwlmb3IgKHBoeS0+YWRkciA9IDE7IHBo eS0+YWRkciA8IDg7IHBoeS0+YWRkcisrKSB7CisJCXJldF92YWwgPSBpZ2JfcmVhZF9waHlfcmVn X3NnbWlpXzgyNTc1KGh3LCBQSFlfSUQxLCAmcGh5X2lkKTsKKwkJaWYgKHJldF92YWwgPT0gMCkg eworCQkJaHdfZGJnKCJWZW5kb3IgSUQgMHglMDhYIHJlYWQgYXQgYWRkcmVzcyAldVxuIiwKKwkJ CSAgICAgICBwaHlfaWQsIHBoeS0+YWRkcik7CisJCQkvKgorCQkJICogQXQgdGhlIHRpbWUgb2Yg dGhpcyB3cml0aW5nLCBUaGUgTTg4IHBhcnQgaXMKKwkJCSAqIHRoZSBvbmx5IHN1cHBvcnRlZCBT R01JSSBQSFkgcHJvZHVjdC4KKwkJCSAqLworCQkJaWYgKHBoeV9pZCA9PSBNODhfVkVORE9SKQor CQkJCWJyZWFrOworCQl9IGVsc2UgeworCQkJaHdfZGJnKCJQSFkgYWRkcmVzcyAldSB3YXMgdW5y ZWFkYWJsZVxuIiwgcGh5LT5hZGRyKTsKKwkJfQorCX0KKworCS8qIEEgdmFsaWQgUEhZIHR5cGUg Y291bGRuJ3QgYmUgZm91bmQuICovCisJaWYgKHBoeS0+YWRkciA9PSA4KSB7CisJCXBoeS0+YWRk ciA9IDA7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKKwkJZ290byBvdXQ7CisJfQorCisJ cmV0X3ZhbCA9IGlnYl9nZXRfcGh5X2lkKGh3KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOwor fQorCisvKioKKyAqICBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1IC0gUGVyZm9ybXMgYSBQ SFkgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBS ZXNldHMgdGhlIFBIWSB1c2luZyB0aGUgc2VyaWFsIGdpZ2FiaXQgbWVkaWEgaW5kZXBlbmRlbnQg aW50ZXJmYWNlLgorICoqLworc3RhdGljIHMzMiBpZ2JfcGh5X2h3X3Jlc2V0X3NnbWlpXzgyNTc1 KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92YWw7CisKKwkvKgorCSAqIFRoaXMg aXNuJ3QgYSB0cnVlICJoYXJkIiByZXNldCwgYnV0IGlzIHRoZSBvbmx5IHJlc2V0CisJICogYXZh aWxhYmxlIHRvIHVzIGF0IHRoaXMgdGltZS4KKwkqLworCisJaHdfZGJnKCJTb2Z0IHJlc2V0dGlu ZyBTR01JSSBhdHRhY2hlZCBQSFkuLi5cbiIpOworCisJLyoKKwkgKiBTRlAgZG9jdW1lbnRhdGlv biByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHRvIGNvbmZpZ3VyZSB0aGUgU1BGIG1vZHVsZQorCSAq IHRvIHdvcmsgb24gU0dNSUkuICBObyBmdXJ0aGVyIGRvY3VtZW50YXRpb24gaXMgZ2l2ZW4uCisJ ICovCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUIsIDB4ODA4 NCk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGlnYl9waHlfc3df cmVzZXQoaHcpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9z ZXRfZDBfbHBsdV9zdGF0ZV84MjU3NSAtIFNldCBMb3cgUG93ZXIgTGlua3VwIEQwIHN0YXRlCisg KiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAYWN0aXZlOiB0cnVlIHRv IGVuYWJsZSBMUExVLCBmYWxzZSB0byBkaXNhYmxlCisgKgorICogIFNldHMgdGhlIExQTFUgRDAg c3RhdGUgYWNjb3JkaW5nIHRvIHRoZSBhY3RpdmUgZmxhZy4gIFdoZW4KKyAqICBhY3RpdmF0aW5n IExQTFUgdGhpcyBmdW5jdGlvbiBhbHNvIGRpc2FibGVzIHNtYXJ0IHNwZWVkCisgKiAgYW5kIHZp Y2UgdmVyc2EuICBMUExVIHdpbGwgbm90IGJlIGFjdGl2YXRlZCB1bmxlc3MgdGhlCisgKiAgZGV2 aWNlIGF1dG9uZWdvdGlhdGlvbiBhZHZlcnRpc2VtZW50IG1lZXRzIHN0YW5kYXJkcyBvZgorICog IGVpdGhlciAxMCBvciAxMC8xMDAgb3IgMTAvMTAwLzEwMDAgYXQgYWxsIGR1cGxleGVzLgorICog IFRoaXMgaXMgYSBmdW5jdGlvbiBwb2ludGVyIGVudHJ5IHBvaW50IG9ubHkgY2FsbGVkIGJ5Cisg KiAgUEhZIHNldHVwIHJvdXRpbmVzLgorICoqLworc3RhdGljIHMzMiBpZ2Jfc2V0X2QwX2xwbHVf c3RhdGVfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywgYm9vbCBhY3RpdmUpCit7CisJc3RydWN0 IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgZGF0 YTsKKworCXJldF92YWwgPSBwaHktPm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZ X1BPV0VSX01HTVQsICZkYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAo YWN0aXZlKSB7CisJCWRhdGEgfD0gSUdQMDJFMTAwMF9QTV9EMF9MUExVOworCQlyZXRfdmFsID0g cGh5LT5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDJFMTAwMF9QSFlfUE9XRVJfTUdNVCwKKwkJ CQkJCSBkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQkvKiBXaGVuIExQ TFUgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGRpc2FibGUgU21hcnRTcGVlZCAqLworCQlyZXRfdmFs ID0gcGh5LT5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywK KwkJCQkJCSZkYXRhKTsKKwkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsK KwkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BP UlRfQ09ORklHLAorCQkJCQkJIGRhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0Owor CX0gZWxzZSB7CisJCWRhdGEgJj0gfklHUDAyRTEwMDBfUE1fRDBfTFBMVTsKKwkJcmV0X3ZhbCA9 IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJ CQkJCQkgZGF0YSk7CisJCS8qCisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5 IGV4Y2x1c2l2ZS4gIExQTFUgaXMgdXNlZAorCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRo ZSBwb3dlciBjb25zZXJ2YXRpb24gaXMgbW9zdAorCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJp dmVyIGFjdGl2aXR5IHdlIHNob3VsZCBlbmFibGUKKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9y bWFuY2UgaXMgbWFpbnRhaW5lZC4KKwkJICovCisJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUx MDAwX3NtYXJ0X3NwZWVkX29uKSB7CisJCQlyZXRfdmFsID0gcGh5LT5vcHMucmVhZF9waHlfcmVn KGh3LAorCQkJCQlJR1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgJmRhdGEpOworCQkJaWYgKHJl dF92YWwpCisJCQkJZ290byBvdXQ7CisKKwkJCWRhdGEgfD0gSUdQMDFFMTAwMF9QU0NGUl9TTUFS VF9TUEVFRDsKKwkJCXJldF92YWwgPSBwaHktPm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJCQlJ R1AwMUUxMDAwX1BIWV9QT1JUX0NPTkZJRywgZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQln b3RvIG91dDsKKwkJfSBlbHNlIGlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3Nw ZWVkX29mZikgeworCQkJcmV0X3ZhbCA9IHBoeS0+b3BzLnJlYWRfcGh5X3JlZyhodywKKwkJCQkJ SUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsICZkYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJ CWdvdG8gb3V0OworCisJCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOwor CQkJcmV0X3ZhbCA9IHBoeS0+b3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQkJCUlHUDAxRTEwMDBf UEhZX1BPUlRfQ09ORklHLCBkYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0Owor CQl9CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9hY3F1 aXJlX252bV84MjU3NSAtIFJlcXVlc3QgZm9yIGFjY2VzcyB0byBFRVBST00KKyAqICBAaHc6IHBv aW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBBY3F1aXJlIHRoZSBuZWNlc3Nhcnkg c2VtYXBob3JlcyBmb3IgZXhjbHVzaXZlIGFjY2VzcyB0byB0aGUgRUVQUk9NLgorICogIFNldCB0 aGUgRUVQUk9NIGFjY2VzcyByZXF1ZXN0IGJpdCBhbmQgd2FpdCBmb3IgRUVQUk9NIGFjY2VzcyBn cmFudCBiaXQuCisgKiAgUmV0dXJuIHN1Y2Nlc3NmdWwgaWYgYWNjZXNzIGdyYW50IGJpdCBzZXQs IGVsc2UgY2xlYXIgdGhlIHJlcXVlc3QgZm9yCisgKiAgRUVQUk9NIGFjY2VzcyBhbmQgcmV0dXJu IC1FMTAwMF9FUlJfTlZNICgtMSkuCisgKiovCitzdGF0aWMgczMyIGlnYl9hY3F1aXJlX252bV84 MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsOworCisJcmV0X3ZhbCA9 IGlnYl9hY3F1aXJlX3N3Zndfc3luY184MjU3NShodywgRTEwMDBfU1dGV19FRVBfU00pOworCWlm IChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXJldF92YWwgPSBpZ2JfYWNxdWlyZV9udm0oaHcp OworCisJaWYgKHJldF92YWwpCisJCWlnYl9yZWxlYXNlX3N3Zndfc3luY184MjU3NShodywgRTEw MDBfU1dGV19FRVBfU00pOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICog IGlnYl9yZWxlYXNlX252bV84MjU3NSAtIFJlbGVhc2UgZXhjbHVzaXZlIGFjY2VzcyB0byBFRVBS T00KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBTdG9wIGFu eSBjdXJyZW50IGNvbW1hbmRzIHRvIHRoZSBFRVBST00gYW5kIGNsZWFyIHRoZSBFRVBST00gcmVx dWVzdCBiaXQsCisgKiAgdGhlbiByZWxlYXNlIHRoZSBzZW1hcGhvcmVzIGFjcXVpcmVkLgorICoq Lworc3RhdGljIHZvaWQgaWdiX3JlbGVhc2VfbnZtXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcp Cit7CisJaWdiX3JlbGVhc2VfbnZtKGh3KTsKKwlpZ2JfcmVsZWFzZV9zd2Z3X3N5bmNfODI1NzUo aHcsIEUxMDAwX1NXRldfRUVQX1NNKTsKK30KKworLyoqCisgKiAgaWdiX2FjcXVpcmVfc3dmd19z eW5jXzgyNTc1IC0gQWNxdWlyZSBTVy9GVyBzZW1hcGhvcmUKKyAqICBAaHc6IHBvaW50ZXIgdG8g dGhlIEhXIHN0cnVjdHVyZQorICogIEBtYXNrOiBzcGVjaWZpZXMgd2hpY2ggc2VtYXBob3JlIHRv IGFjcXVpcmUKKyAqCisgKiAgQWNxdWlyZSB0aGUgU1cvRlcgc2VtYXBob3JlIHRvIGFjY2VzcyB0 aGUgUEhZIG9yIE5WTS4gIFRoZSBtYXNrCisgKiAgd2lsbCBhbHNvIHNwZWNpZnkgd2hpY2ggcG9y dCB3ZSdyZSBhY3F1aXJpbmcgdGhlIGxvY2sgZm9yLgorICoqLworc3RhdGljIHMzMiBpZ2JfYWNx dWlyZV9zd2Z3X3N5bmNfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG1hc2spCit7CisJ dTMyIHN3Zndfc3luYzsKKwl1MzIgc3dtYXNrID0gbWFzazsKKwl1MzIgZndtYXNrID0gbWFzayA8 PCAxNjsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJczMyIGkgPSAwLCB0aW1lb3V0ID0gMjAwOyAvKiBG SVhNRTogZmluZCByZWFsIHZhbHVlIHRvIHVzZSBoZXJlICovCisKKwl3aGlsZSAoaSA8IHRpbWVv dXQpIHsKKwkJaWYgKGlnYl9nZXRfaHdfc2VtYXBob3JlKGh3KSkgeworCQkJcmV0X3ZhbCA9IC1F MTAwMF9FUlJfU1dGV19TWU5DOworCQkJZ290byBvdXQ7CisJCX0KKworCQlzd2Z3X3N5bmMgPSBy ZDMyKEUxMDAwX1NXX0ZXX1NZTkMpOworCQlpZiAoIShzd2Z3X3N5bmMgJiAoZndtYXNrIHwgc3dt YXNrKSkpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBGaXJtd2FyZSBjdXJyZW50bHkgdXNpbmcg cmVzb3VyY2UgKGZ3bWFzaykKKwkJICogb3Igb3RoZXIgc29mdHdhcmUgdGhyZWFkIHVzaW5nIHJl c291cmNlIChzd21hc2spCisJCSAqLworCQlpZ2JfcHV0X2h3X3NlbWFwaG9yZShodyk7CisJCW1k ZWxheSg1KTsKKwkJaSsrOworCX0KKworCWlmIChpID09IHRpbWVvdXQpIHsKKwkJaHdfZGJnKCJE cml2ZXIgY2FuJ3QgYWNjZXNzIHJlc291cmNlLCBTV19GV19TWU5DIHRpbWVvdXQuXG4iKTsKKwkJ cmV0X3ZhbCA9IC1FMTAwMF9FUlJfU1dGV19TWU5DOworCQlnb3RvIG91dDsKKwl9CisKKwlzd2Z3 X3N5bmMgfD0gc3dtYXNrOworCXdyMzIoRTEwMDBfU1dfRldfU1lOQywgc3dmd19zeW5jKTsKKwor CWlnYl9wdXRfaHdfc2VtYXBob3JlKGh3KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQor CisvKioKKyAqICBpZ2JfcmVsZWFzZV9zd2Z3X3N5bmNfODI1NzUgLSBSZWxlYXNlIFNXL0ZXIHNl bWFwaG9yZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1hc2s6 IHNwZWNpZmllcyB3aGljaCBzZW1hcGhvcmUgdG8gYWNxdWlyZQorICoKKyAqICBSZWxlYXNlIHRo ZSBTVy9GVyBzZW1hcGhvcmUgdXNlZCB0byBhY2Nlc3MgdGhlIFBIWSBvciBOVk0uICBUaGUgbWFz aworICogIHdpbGwgYWxzbyBzcGVjaWZ5IHdoaWNoIHBvcnQgd2UncmUgcmVsZWFzaW5nIHRoZSBs b2NrIGZvci4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3N3Zndfc3luY184MjU3NShz dHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgbWFzaykKK3sKKwl1MzIgc3dmd19zeW5jOworCisJd2hp bGUgKGlnYl9nZXRfaHdfc2VtYXBob3JlKGh3KSAhPSAwKTsKKwkvKiBFbXB0eSAqLworCisJc3dm d19zeW5jID0gcmQzMihFMTAwMF9TV19GV19TWU5DKTsKKwlzd2Z3X3N5bmMgJj0gfm1hc2s7CisJ d3IzMihFMTAwMF9TV19GV19TWU5DLCBzd2Z3X3N5bmMpOworCisJaWdiX3B1dF9od19zZW1hcGhv cmUoaHcpOworfQorCisvKioKKyAqICBpZ2JfZ2V0X2NmZ19kb25lXzgyNTc1IC0gUmVhZCBjb25m aWcgZG9uZSBiaXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAq ICBSZWFkIHRoZSBtYW5hZ2VtZW50IGNvbnRyb2wgcmVnaXN0ZXIgZm9yIHRoZSBjb25maWcgZG9u ZSBiaXQgZm9yCisgKiAgY29tcGxldGlvbiBzdGF0dXMuICBOT1RFOiBzaWxpY29uIHdoaWNoIGlz IEVFUFJPTS1sZXNzIHdpbGwgZmFpbCB0cnlpbmcKKyAqICB0byByZWFkIHRoZSBjb25maWcgZG9u ZSBiaXQsIHNvIGFuIGVycm9yIGlzICpPTkxZKiBsb2dnZWQgYW5kIHJldHVybnMKKyAqICAwLiAg SWYgd2Ugd2VyZSB0byByZXR1cm4gd2l0aCBlcnJvciwgRUVQUk9NLWxlc3Mgc2lsaWNvbgorICog IHdvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlc2V0IG9yIGNoYW5nZSBsaW5rLgorICoqLworc3Rh dGljIHMzMiBpZ2JfZ2V0X2NmZ19kb25lXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJ czMyIHRpbWVvdXQgPSBQSFlfQ0ZHX1RJTUVPVVQ7CisJczMyIHJldF92YWwgPSAwOworCXUzMiBt YXNrID0gRTEwMDBfTlZNX0NGR19ET05FX1BPUlRfMDsKKworCWlmIChody0+YnVzLmZ1bmMgPT0g MSkKKwkJbWFzayA9IEUxMDAwX05WTV9DRkdfRE9ORV9QT1JUXzE7CisKKwl3aGlsZSAodGltZW91 dCkgeworCQlpZiAocmQzMihFMTAwMF9FRU1OR0NUTCkgJiBtYXNrKQorCQkJYnJlYWs7CisJCW1z bGVlcCgxKTsKKwkJdGltZW91dC0tOworCX0KKwlpZiAoIXRpbWVvdXQpCisJCWh3X2RiZygiTU5H IGNvbmZpZ3VyYXRpb24gY3ljbGUgaGFzIG5vdCBjb21wbGV0ZWQuXG4iKTsKKworCS8qIElmIEVF UFJPTSBpcyBub3QgbWFya2VkIHByZXNlbnQsIGluaXQgdGhlIFBIWSBtYW51YWxseSAqLworCWlm ICgoKHJkMzIoRTEwMDBfRUVDRCkgJiBFMTAwMF9FRUNEX1BSRVMpID09IDApICYmCisJICAgICho dy0+cGh5LnR5cGUgPT0gZTEwMDBfcGh5X2lncF8zKSkKKwkJaWdiX3BoeV9pbml0X3NjcmlwdF9p Z3AzKGh3KTsKKworCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY2hlY2tfZm9y X2xpbmtfODI1NzUgLSBDaGVjayBmb3IgbGluaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcg c3RydWN0dXJlCisgKgorICogIElmIHNnbWlpIGlzIGVuYWJsZWQsIHRoZW4gdXNlIHRoZSBwY3Mg cmVnaXN0ZXIgdG8gZGV0ZXJtaW5lIGxpbmssIG90aGVyd2lzZQorICogIHVzZSB0aGUgZ2VuZXJp YyBpbnRlcmZhY2UgZm9yIGRldGVybWluaW5nIGxpbmsuCisgKiovCitzdGF0aWMgczMyIGlnYl9j aGVja19mb3JfbGlua184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFs OworCXUxNiBzcGVlZCwgZHVwbGV4OworCisJLyogU0dNSUkgbGluayBjaGVjayBpcyBkb25lIHRo cm91Z2ggdGhlIFBDUyByZWdpc3Rlci4gKi8KKwlpZiAoKGh3LT5waHkubWVkaWFfdHlwZSAhPSBl MTAwMF9tZWRpYV90eXBlX2NvcHBlcikgfHwKKwkgICAgKGlnYl9zZ21paV9hY3RpdmVfODI1NzUo aHcpKSkKKwkJcmV0X3ZhbCA9IGlnYl9nZXRfcGNzX3NwZWVkX2FuZF9kdXBsZXhfODI1NzUoaHcs ICZzcGVlZCwKKwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JmR1cGxleCk7CisJZWxzZQorCQlyZXRfdmFsID0gaWdiX2NoZWNrX2Zvcl9jb3BwZXJfbGluayho dyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKy8qKgorICogIGlnYl9nZXRfcGNzX3NwZWVkX2Fu ZF9kdXBsZXhfODI1NzUgLSBSZXRyaWV2ZSBjdXJyZW50IHNwZWVkL2R1cGxleAorICogIEBodzog cG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHNwZWVkOiBzdG9yZXMgdGhlIGN1cnJl bnQgc3BlZWQKKyAqICBAZHVwbGV4OiBzdG9yZXMgdGhlIGN1cnJlbnQgZHVwbGV4CisgKgorICog IFVzaW5nIHRoZSBwaHlzaWNhbCBjb2Rpbmcgc3ViLWxheWVyIChQQ1MpLCByZXRyaWV2ZSB0aGUg Y3VycmVudCBzcGVlZCBhbmQKKyAqICBkdXBsZXgsIHRoZW4gc3RvcmUgdGhlIHZhbHVlcyBpbiB0 aGUgcG9pbnRlcnMgcHJvdmlkZWQuCisgKiovCitzdGF0aWMgczMyIGlnYl9nZXRfcGNzX3NwZWVk X2FuZF9kdXBsZXhfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2ICpzcGVlZCwKKwkJCQkJ CXUxNiAqZHVwbGV4KQoreworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7 CisJdTMyIHBjczsKKworCS8qIFNldCB1cCBkZWZhdWx0cyBmb3IgdGhlIHJldHVybiB2YWx1ZXMg b2YgdGhpcyBmdW5jdGlvbiAqLworCW1hYy0+c2VyZGVzX2hhc19saW5rID0gZmFsc2U7CisJKnNw ZWVkID0gMDsKKwkqZHVwbGV4ID0gMDsKKworCS8qCisJICogUmVhZCB0aGUgUENTIFN0YXR1cyBy ZWdpc3RlciBmb3IgbGluayBzdGF0ZS4gRm9yIG5vbi1jb3BwZXIgbW9kZSwKKwkgKiB0aGUgc3Rh dHVzIHJlZ2lzdGVyIGlzIG5vdCBhY2N1cmF0ZS4gVGhlIFBDUyBzdGF0dXMgcmVnaXN0ZXIgaXMK KwkgKiB1c2VkIGluc3RlYWQuCisJICovCisJcGNzID0gcmQzMihFMTAwMF9QQ1NfTFNUQVQpOwor CisJLyoKKwkgKiBUaGUgbGluayB1cCBiaXQgZGV0ZXJtaW5lcyB3aGVuIGxpbmsgaXMgdXAgb24g YXV0b25lZy4gVGhlIHN5bmMgb2sKKwkgKiBnZXRzIHNldCBvbmNlIGJvdGggc2lkZXMgc3luYyB1 cCBhbmQgYWdyZWUgdXBvbiBsaW5rLiBTdGFibGUgbGluaworCSAqIGNhbiBiZSBkZXRlcm1pbmVk IGJ5IGNoZWNraW5nIGZvciBib3RoIGxpbmsgdXAgYW5kIGxpbmsgc3luYyBvaworCSAqLworCWlm ICgocGNzICYgRTEwMDBfUENTX0xTVFNfTElOS19PSykgJiYgKHBjcyAmIEUxMDAwX1BDU19MU1RT X1NZTktfT0spKSB7CisJCW1hYy0+c2VyZGVzX2hhc19saW5rID0gdHJ1ZTsKKworCQkvKiBEZXRl Y3QgYW5kIHN0b3JlIFBDUyBzcGVlZCAqLworCQlpZiAocGNzICYgRTEwMDBfUENTX0xTVFNfU1BF RURfMTAwMCkgeworCQkJKnNwZWVkID0gU1BFRURfMTAwMDsKKwkJfSBlbHNlIGlmIChwY3MgJiBF MTAwMF9QQ1NfTFNUU19TUEVFRF8xMDApIHsKKwkJCSpzcGVlZCA9IFNQRUVEXzEwMDsKKwkJfSBl bHNlIHsKKwkJCSpzcGVlZCA9IFNQRUVEXzEwOworCQl9CisKKwkJLyogRGV0ZWN0IGFuZCBzdG9y ZSBQQ1MgZHVwbGV4ICovCisJCWlmIChwY3MgJiBFMTAwMF9QQ1NfTFNUU19EVVBMRVhfRlVMTCkg eworCQkJKmR1cGxleCA9IEZVTExfRFVQTEVYOworCQl9IGVsc2UgeworCQkJKmR1cGxleCA9IEhB TEZfRFVQTEVYOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGlnYl9pbml0 X3J4X2FkZHJzXzgyNTc1IC0gSW5pdGlhbGl6ZSByZWNlaXZlIGFkZHJlc3MncworICogIEBodzog cG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHJhcl9jb3VudDogcmVjZWl2ZSBhZGRy ZXNzIHJlZ2lzdGVycworICoKKyAqICBTZXR1cHMgdGhlIHJlY2VpdmUgYWRkcmVzcyByZWdpc3Rl cnMgYnkgc2V0dGluZyB0aGUgYmFzZSByZWNlaXZlIGFkZHJlc3MKKyAqICByZWdpc3RlciB0byB0 aGUgZGV2aWNlcyBNQUMgYWRkcmVzcyBhbmQgY2xlYXJpbmcgYWxsIHRoZSBvdGhlciByZWNlaXZl CisgKiAgYWRkcmVzcyByZWdpc3RlcnMgdG8gMC4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9pbml0 X3J4X2FkZHJzXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiByYXJfY291bnQpCit7CisJ dTMyIGk7CisJdTggYWRkcls2XSA9IHswLDAsMCwwLDAsMH07CisJLyoKKwkgKiBUaGlzIGZ1bmN0 aW9uIGlzIGVzc2VudGlhbGx5IHRoZSBzYW1lIGFzIHRoYXQgb2YKKwkgKiBlMTAwMF9pbml0X3J4 X2FkZHJzX2dlbmVyaWMuIEhvd2V2ZXIgaXQgYWxzbyB0YWtlcyBjYXJlCisJICogb2YgdGhlIHNw ZWNpYWwgY2FzZSB3aGVyZSB0aGUgcmVnaXN0ZXIgb2Zmc2V0IG9mIHRoZQorCSAqIHNlY29uZCBz ZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlzIGlzIGltcGxpY2l0bHkgdGFrZW4gY2Fy ZSBieQorCSAqIGZ1bmN0aW9uIGUxMDAwX3Jhcl9zZXRfZ2VuZXJpYy4KKwkgKi8KKworCWh3X2Ri ZygiZTEwMDBfaW5pdF9yeF9hZGRyc184MjU3NSIpOworCisJLyogU2V0dXAgdGhlIHJlY2VpdmUg YWRkcmVzcyAqLworCWh3X2RiZygiUHJvZ3JhbW1pbmcgTUFDIEFkZHJlc3MgaW50byBSQVJbMF1c biIpOworCWh3LT5tYWMub3BzLnJhcl9zZXQoaHcsIGh3LT5tYWMuYWRkciwgMCk7CisKKwkvKiBa ZXJvIG91dCB0aGUgb3RoZXIgKHJhcl9lbnRyeV9jb3VudCAtIDEpIHJlY2VpdmUgYWRkcmVzc2Vz ICovCisJaHdfZGJnKCJDbGVhcmluZyBSQVJbMS0ldV1cbiIsIHJhcl9jb3VudC0xKTsKKwlmb3Ig KGkgPSAxOyBpIDwgcmFyX2NvdW50OyBpKyspCisJICAgIGh3LT5tYWMub3BzLnJhcl9zZXQoaHcs IGFkZHIsIGkpOworfQorCisvKioKKyAqICBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NSAt IFVwZGF0ZSBNdWx0aWNhc3QgYWRkcmVzc2VzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBz dHJ1Y3R1cmUKKyAqICBAbWNfYWRkcl9saXN0OiBhcnJheSBvZiBtdWx0aWNhc3QgYWRkcmVzc2Vz IHRvIHByb2dyYW0KKyAqICBAbWNfYWRkcl9jb3VudDogbnVtYmVyIG9mIG11bHRpY2FzdCBhZGRy ZXNzZXMgdG8gcHJvZ3JhbQorICogIEByYXJfdXNlZF9jb3VudDogdGhlIGZpcnN0IFJBUiByZWdp c3RlciBmcmVlIHRvIHByb2dyYW0KKyAqICBAcmFyX2NvdW50OiB0b3RhbCBudW1iZXIgb2Ygc3Vw cG9ydGVkIFJlY2VpdmUgQWRkcmVzcyBSZWdpc3RlcnMKKyAqCisgKiAgVXBkYXRlcyB0aGUgUmVj ZWl2ZSBBZGRyZXNzIFJlZ2lzdGVycyBhbmQgTXVsdGljYXN0IFRhYmxlIEFycmF5LgorICogIFRo ZSBjYWxsZXIgbXVzdCBoYXZlIGEgcGFja2VkIG1jX2FkZHJfbGlzdCBvZiBtdWx0aWNhc3QgYWRk cmVzc2VzLgorICogIFRoZSBwYXJhbWV0ZXIgcmFyX2NvdW50IHdpbGwgdXN1YWxseSBiZSBody0+ bWFjLnJhcl9lbnRyeV9jb3VudAorICogIHVubGVzcyB0aGVyZSBhcmUgd29ya2Fyb3VuZHMgdGhh dCBjaGFuZ2UgdGhpcy4KKyAqKi8KK3ZvaWQgaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUo c3RydWN0IGUxMDAwX2h3ICpodywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTggKm1jX2FkZHJfbGlzdCwgdTMyIG1jX2FkZHJfY291bnQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHUzMiByYXJfdXNlZF9jb3VudCwgdTMyIHJhcl9jb3VudCkKK3sKKwl1 MzIgaGFzaF92YWx1ZTsKKwl1MzIgaTsKKwl1OCBhZGRyWzZdID0gezAsMCwwLDAsMCwwfTsKKwkv KgorCSAqIFRoaXMgZnVuY3Rpb24gaXMgZXNzZW50aWFsbHkgdGhlIHNhbWUgYXMgdGhhdCBvZiAK KwkgKiBpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF9nZW5lcmljLiBIb3dldmVyIGl0IGFsc28gdGFr ZXMgY2FyZSAKKwkgKiBvZiB0aGUgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSByZWdpc3RlciBvZmZz ZXQgb2YgdGhlIAorCSAqIHNlY29uZCBzZXQgb2YgUkFScyBiZWdpbnMgZWxzZXdoZXJlLiBUaGlz IGlzIGltcGxpY2l0bHkgdGFrZW4gY2FyZSBieSAKKwkgKiBmdW5jdGlvbiBlMTAwMF9yYXJfc2V0 X2dlbmVyaWMuCisJICovCisKKwkvKgorCSAqIExvYWQgdGhlIGZpcnN0IHNldCBvZiBtdWx0aWNh c3QgYWRkcmVzc2VzIGludG8gdGhlIGV4YWN0CisJICogZmlsdGVycyAoUkFSKS4gIElmIHRoZXJl IGFyZSBub3QgZW5vdWdoIHRvIGZpbGwgdGhlIFJBUgorCSAqIGFycmF5LCBjbGVhciB0aGUgZmls dGVycy4KKwkgKi8KKwlmb3IgKGkgPSByYXJfdXNlZF9jb3VudDsgaSA8IHJhcl9jb3VudDsgaSsr KSB7CisJCWlmIChtY19hZGRyX2NvdW50KSB7CisJCQlpZ2JfcmFyX3NldChodywgbWNfYWRkcl9s aXN0LCBpKTsKKwkJCW1jX2FkZHJfY291bnQtLTsKKwkJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxF TjsKKwkJfSBlbHNlIHsKKwkJCWlnYl9yYXJfc2V0KGh3LCBhZGRyLCBpKTsKKwkJfQorCX0KKwor CS8qIENsZWFyIHRoZSBvbGQgc2V0dGluZ3MgZnJvbSB0aGUgTVRBICovCisJaHdfZGJnKCJDbGVh cmluZyBNVEFcbiIpOworCWZvciAoaSA9IDA7IGkgPCBody0+bWFjLm10YV9yZWdfY291bnQ7IGkr KykgeworCQlhcnJheV93cjMyKEUxMDAwX01UQSwgaSwgMCk7CisJCXdyZmwoKTsKKwl9CisKKwkv KiBMb2FkIGFueSByZW1haW5pbmcgbXVsdGljYXN0IGFkZHJlc3NlcyBpbnRvIHRoZSBoYXNoIHRh YmxlLiAqLworCWZvciAoOyBtY19hZGRyX2NvdW50ID4gMDsgbWNfYWRkcl9jb3VudC0tKSB7CisJ CWhhc2hfdmFsdWUgPSBpZ2JfaGFzaF9tY19hZGRyKGh3LCBtY19hZGRyX2xpc3QpOworCQlod19k YmcoIkhhc2ggdmFsdWUgPSAweCUwM1hcbiIsIGhhc2hfdmFsdWUpOworCQlpZ2JfbXRhX3NldCho dywgaGFzaF92YWx1ZSk7CisJCW1jX2FkZHJfbGlzdCArPSBFVEhfQUxFTjsKKwl9Cit9CisKKy8q KgorICogIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184MjU3NSAtIFJlbW92ZSBsaW5r IGR1cmluZyBwb3dlciBkb3duCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUK KyAqCisgKiAgSW4gdGhlIGNhc2Ugb2YgZmliZXIgc2VyZGVzLCBzaHV0IGRvd24gb3B0aWNzIGFu ZCBQQ1Mgb24gZHJpdmVyIHVubG9hZAorICogIHdoZW4gbWFuYWdlbWVudCBwYXNzIHRocnUgaXMg bm90IGVuYWJsZWQuCisgKiovCit2b2lkIGlnYl9zaHV0ZG93bl9maWJlcl9zZXJkZXNfbGlua184 MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiByZWc7CisKKwlpZiAoaHctPm1hYy50 eXBlICE9IGUxMDAwXzgyNTc2IHx8CisJICAgIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBf bWVkaWFfdHlwZV9maWJlciAmJgorCSAgICAgaHctPnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21l ZGlhX3R5cGVfaW50ZXJuYWxfc2VyZGVzKSkKKwkJcmV0dXJuOworCisJLyogaWYgdGhlIG1hbmFn ZW1lbnQgaW50ZXJmYWNlIGlzIG5vdCBlbmFibGVkLCB0aGVuIHBvd2VyIGRvd24gKi8KKwlpZiAo IWlnYl9lbmFibGVfbW5nX3Bhc3NfdGhydShodykpIHsKKwkJLyogRGlzYWJsZSBQQ1MgdG8gdHVy biBvZmYgbGluayAqLworCQlyZWcgPSByZDMyKEUxMDAwX1BDU19DRkcwKTsKKwkJcmVnICY9IH5F MTAwMF9QQ1NfQ0ZHX1BDU19FTjsKKwkJd3IzMihFMTAwMF9QQ1NfQ0ZHMCwgcmVnKTsKKworCQkv KiBzaHV0ZG93biB0aGUgbGFzZXIgKi8KKwkJcmVnID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJ CXJlZyB8PSBFMTAwMF9DVFJMX0VYVF9TRFA3X0RBVEE7CisJCXdyMzIoRTEwMDBfQ1RSTF9FWFQs IHJlZyk7CisKKwkJLyogZmx1c2ggdGhlIHdyaXRlIHRvIHZlcmlmeSBjb21wbGV0aW9uICovCisJ CXdyZmwoKTsKKwkJbXNsZWVwKDEpOworCX0KKworCXJldHVybjsKK30KKworLyoqCisgKiAgaWdi X3Jlc2V0X2h3XzgyNTc1IC0gUmVzZXQgaGFyZHdhcmUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhl IEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGlzIHJlc2V0cyB0aGUgaGFyZHdhcmUgaW50byBhIGtu b3duIHN0YXRlLiAgVGhpcyBpcyBhCisgKiAgZnVuY3Rpb24gcG9pbnRlciBlbnRyeSBwb2ludCBj YWxsZWQgYnkgdGhlIGFwaSBtb2R1bGUuCisgKiovCitzdGF0aWMgczMyIGlnYl9yZXNldF9od184 MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBjdHJsLCBpY3I7CisJczMyIHJldF92 YWw7CisKKwkvKgorCSAqIFByZXZlbnQgdGhlIFBDSS1FIGJ1cyBmcm9tIHN0aWNraW5nIGlmIHRo ZXJlIGlzIG5vIFRMUCBjb25uZWN0aW9uCisJICogb24gdGhlIGxhc3QgVExQIHJlYWQvd3JpdGUg dHJhbnNhY3Rpb24gd2hlbiBNQUMgaXMgcmVzZXQuCisJICovCisJcmV0X3ZhbCA9IGlnYl9kaXNh YmxlX3BjaWVfbWFzdGVyKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJaHdfZGJnKCJQQ0ktRSBNYXN0 ZXIgZGlzYWJsZSBwb2xsaW5nIGhhcyBmYWlsZWQuXG4iKTsKKworCWh3X2RiZygiTWFza2luZyBv ZmYgYWxsIGludGVycnVwdHNcbiIpOworCXdyMzIoRTEwMDBfSU1DLCAweGZmZmZmZmZmKTsKKwor CXdyMzIoRTEwMDBfUkNUTCwgMCk7CisJd3IzMihFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX1BTUCk7 CisJd3JmbCgpOworCisJbXNsZWVwKDEwKTsKKworCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOwor CisJaHdfZGJnKCJJc3N1aW5nIGEgZ2xvYmFsIHJlc2V0IHRvIE1BQ1xuIik7CisJd3IzMihFMTAw MF9DVFJMLCBjdHJsIHwgRTEwMDBfQ1RSTF9SU1QpOworCisJcmV0X3ZhbCA9IGlnYl9nZXRfYXV0 b19yZF9kb25lKGh3KTsKKwlpZiAocmV0X3ZhbCkgeworCQkvKgorCQkgKiBXaGVuIGF1dG8gY29u ZmlnIHJlYWQgZG9lcyBub3QgY29tcGxldGUsIGRvIG5vdAorCQkgKiByZXR1cm4gd2l0aCBhbiBl cnJvci4gVGhpcyBjYW4gaGFwcGVuIGluIHNpdHVhdGlvbnMKKwkJICogd2hlcmUgdGhlcmUgaXMg bm8gZWVwcm9tIGFuZCBwcmV2ZW50cyBnZXR0aW5nIGxpbmsuCisJCSAqLworCQlod19kYmcoIkF1 dG8gUmVhZCBEb25lIGRpZCBub3QgY29tcGxldGVcbiIpOworCX0KKworCS8qIElmIEVFUFJPTSBp cyBub3QgcHJlc2VudCwgcnVuIG1hbnVhbCBpbml0IHNjcmlwdHMgKi8KKwlpZiAoKHJkMzIoRTEw MDBfRUVDRCkgJiBFMTAwMF9FRUNEX1BSRVMpID09IDApCisJCWlnYl9yZXNldF9pbml0X3Njcmlw dF84MjU3NShodyk7CisKKwkvKiBDbGVhciBhbnkgcGVuZGluZyBpbnRlcnJ1cHQgZXZlbnRzLiAq LworCXdyMzIoRTEwMDBfSU1DLCAweGZmZmZmZmZmKTsKKwlpY3IgPSByZDMyKEUxMDAwX0lDUik7 CisKKwlpZ2JfY2hlY2tfYWx0X21hY19hZGRyKGh3KTsKKworCXJldHVybiByZXRfdmFsOworfQor CisvKioKKyAqICBpZ2JfaW5pdF9od184MjU3NSAtIEluaXRpYWxpemUgaGFyZHdhcmUKKyAqICBA aHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBUaGlzIGluaXRzIHRoZSBo YXJkd2FyZSByZWFkeWluZyBpdCBmb3Igb3BlcmF0aW9uLgorICoqLworc3RhdGljIHMzMiBpZ2Jf aW5pdF9od184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9tYWNf aW5mbyAqbWFjID0gJmh3LT5tYWM7CisJczMyIHJldF92YWw7CisJdTE2IGksIHJhcl9jb3VudCA9 IG1hYy0+cmFyX2VudHJ5X2NvdW50OworCisJLyogSW5pdGlhbGl6ZSBpZGVudGlmaWNhdGlvbiBM RUQgKi8KKwlyZXRfdmFsID0gaWdiX2lkX2xlZF9pbml0KGh3KTsKKwlpZiAocmV0X3ZhbCkgewor CQlod19kYmcoIkVycm9yIGluaXRpYWxpemluZyBpZGVudGlmaWNhdGlvbiBMRURcbiIpOworCQkv KiBUaGlzIGlzIG5vdCBmYXRhbCBhbmQgd2Ugc2hvdWxkIG5vdCBzdG9wIGluaXQgZHVlIHRvIHRo aXMgKi8KKwl9CisKKwkvKiBEaXNhYmxpbmcgVkxBTiBmaWx0ZXJpbmcgKi8KKwlod19kYmcoIklu aXRpYWxpemluZyB0aGUgSUVFRSBWTEFOXG4iKTsKKwlpZ2JfY2xlYXJfdmZ0YShodyk7CisKKwkv KiBTZXR1cCB0aGUgcmVjZWl2ZSBhZGRyZXNzICovCisJaWdiX2luaXRfcnhfYWRkcnNfODI1NzUo aHcsIHJhcl9jb3VudCk7CisJLyogWmVybyBvdXQgdGhlIE11bHRpY2FzdCBIQVNIIHRhYmxlICov CisJaHdfZGJnKCJaZXJvaW5nIHRoZSBNVEFcbiIpOworCWZvciAoaSA9IDA7IGkgPCBtYWMtPm10 YV9yZWdfY291bnQ7IGkrKykKKwkJYXJyYXlfd3IzMihFMTAwMF9NVEEsIGksIDApOworCisJLyog U2V0dXAgbGluayBhbmQgZmxvdyBjb250cm9sICovCisJcmV0X3ZhbCA9IGlnYl9zZXR1cF9saW5r KGh3KTsKKworCS8qCisJICogQ2xlYXIgYWxsIG9mIHRoZSBzdGF0aXN0aWNzIHJlZ2lzdGVycyAo Y2xlYXIgb24gcmVhZCkuICBJdCBpcworCSAqIGltcG9ydGFudCB0aGF0IHdlIGRvIHRoaXMgYWZ0 ZXIgd2UgaGF2ZSB0cmllZCB0byBlc3RhYmxpc2ggbGluaworCSAqIGJlY2F1c2UgdGhlIHN5bWJv bCBlcnJvciBjb3VudCB3aWxsIGluY3JlbWVudCB3aWxkbHkgaWYgdGhlcmUKKwkgKiBpcyBubyBs aW5rLgorCSAqLworCWlnYl9jbGVhcl9od19jbnRyc184MjU3NShodyk7CisKKwlyZXR1cm4gcmV0 X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3NldHVwX2NvcHBlcl9saW5rXzgyNTc1IC0gQ29uZmln dXJlIGNvcHBlciBsaW5rIHNldHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1 Y3R1cmUKKyAqCisgKiAgQ29uZmlndXJlcyB0aGUgbGluayBmb3IgYXV0by1uZWcgb3IgZm9yY2Vk IHNwZWVkIGFuZCBkdXBsZXguICBUaGVuIHdlIGNoZWNrCisgKiAgZm9yIGxpbmssIG9uY2UgbGlu ayBpcyBlc3RhYmxpc2hlZCBjYWxscyB0byBjb25maWd1cmUgY29sbGlzaW9uIGRpc3RhbmNlCisg KiAgYW5kIGZsb3cgY29udHJvbCBhcmUgY2FsbGVkLgorICoqLworc3RhdGljIHMzMiBpZ2Jfc2V0 dXBfY29wcGVyX2xpbmtfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgY3RybCwg bGVkX2N0cmw7CisJczMyICByZXRfdmFsOworCWJvb2wgbGluazsKKworCWN0cmwgPSByZDMyKEUx MDAwX0NUUkwpOworCWN0cmwgfD0gRTEwMDBfQ1RSTF9TTFU7CisJY3RybCAmPSB+KEUxMDAwX0NU UkxfRlJDU1BEIHwgRTEwMDBfQ1RSTF9GUkNEUFgpOworCXdyMzIoRTEwMDBfQ1RSTCwgY3RybCk7 CisKKwlzd2l0Y2ggKGh3LT5waHkudHlwZSkgeworCWNhc2UgZTEwMDBfcGh5X204ODoKKwkJcmV0 X3ZhbCA9IGlnYl9jb3BwZXJfbGlua19zZXR1cF9tODgoaHcpOworCQlicmVhazsKKwljYXNlIGUx MDAwX3BoeV9pZ3BfMzoKKwkJcmV0X3ZhbCA9IGlnYl9jb3BwZXJfbGlua19zZXR1cF9pZ3AoaHcp OworCQkvKiBTZXR1cCBhY3Rpdml0eSBMRUQgKi8KKwkJbGVkX2N0cmwgPSByZDMyKEUxMDAwX0xF RENUTCk7CisJCWxlZF9jdHJsICY9IElHUF9BQ1RJVklUWV9MRURfTUFTSzsKKwkJbGVkX2N0cmwg fD0gKElHUF9BQ1RJVklUWV9MRURfRU5BQkxFIHwgSUdQX0xFRDNfTU9ERSk7CisJCXdyMzIoRTEw MDBfTEVEQ1RMLCBsZWRfY3RybCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldF92YWwgPSAt RTEwMDBfRVJSX1BIWTsKKwkJYnJlYWs7CisJfQorCisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0 OworCisJaWYgKGh3LT5tYWMuYXV0b25lZykgeworCQkvKgorCQkgKiBTZXR1cCBhdXRvbmVnIGFu ZCBmbG93IGNvbnRyb2wgYWR2ZXJ0aXNlbWVudAorCQkgKiBhbmQgcGVyZm9ybSBhdXRvbmVnb3Rp YXRpb24uCisJCSAqLworCQlyZXRfdmFsID0gaWdiX2NvcHBlcl9saW5rX2F1dG9uZWcoaHcpOwor CQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCX0gZWxzZSB7CisJCS8qCisJCSAqIFBIWSB3 aWxsIGJlIHNldCB0byAxMEgsIDEwRiwgMTAwSCBvciAxMDBGCisJCSAqIGRlcGVuZGluZyBvbiB1 c2VyIHNldHRpbmdzLgorCQkgKi8KKwkJaHdfZGJnKCJGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhc biIpOworCQlyZXRfdmFsID0gaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXgoaHcpOworCQlpZiAo cmV0X3ZhbCkgeworCQkJaHdfZGJnKCJFcnJvciBGb3JjaW5nIFNwZWVkIGFuZCBEdXBsZXhcbiIp OworCQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlyZXRfdmFsID0gaWdiX2NvbmZpZ3VyZV9wY3Nf bGlua184MjU3NShodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBD aGVjayBsaW5rIHN0YXR1cy4gV2FpdCB1cCB0byAxMDAgbWljcm9zZWNvbmRzIGZvciBsaW5rIHRv IGJlY29tZQorCSAqIHZhbGlkLgorCSAqLworCXJldF92YWwgPSBpZ2JfcGh5X2hhc19saW5rKGh3 LCBDT1BQRVJfTElOS19VUF9MSU1JVCwgMTAsICZsaW5rKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290 byBvdXQ7CisKKwlpZiAobGluaykgeworCQlod19kYmcoIlZhbGlkIGxpbmsgZXN0YWJsaXNoZWQh ISFcbiIpOworCQkvKiBDb25maWcgdGhlIE1BQyBhbmQgUEhZIGFmdGVyIGxpbmsgaXMgdXAgKi8K KwkJaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CisJCXJldF92YWwgPSBpZ2JfY29uZmln X2ZjX2FmdGVyX2xpbmtfdXAoaHcpOworCX0gZWxzZSB7CisJCWh3X2RiZygiVW5hYmxlIHRvIGVz dGFibGlzaCBsaW5rISEhXG4iKTsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKwor LyoqCisgKiAgaWdiX3NldHVwX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1IC0gU2V0dXAgbGluayBm b3IgZmliZXIvc2VyZGVzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAq CisgKiAgQ29uZmlndXJlcyBzcGVlZCBhbmQgZHVwbGV4IGZvciBmaWJlciBhbmQgc2VyZGVzIGxp bmtzLgorICoqLworc3RhdGljIHMzMiBpZ2Jfc2V0dXBfZmliZXJfc2VyZGVzX2xpbmtfODI1NzUo c3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgcmVnOworCisJLyoKKwkgKiBPbiB0aGUgODI1 NzUsIFNlckRlcyBsb29wYmFjayBtb2RlIHBlcnNpc3RzIHVudGlsIGl0IGlzCisJICogZXhwbGlj aXRseSB0dXJuZWQgb2ZmIG9yIGEgcG93ZXIgY3ljbGUgaXMgcGVyZm9ybWVkLiAgQSByZWFkIHRv CisJICogdGhlIHJlZ2lzdGVyIGRvZXMgbm90IGluZGljYXRlIGl0cyBzdGF0dXMuICBUaGVyZWZv cmUsIHdlIGVuc3VyZQorCSAqIGxvb3BiYWNrIG1vZGUgaXMgZGlzYWJsZWQgZHVyaW5nIGluaXRp YWxpemF0aW9uLgorCSAqLworCXdyMzIoRTEwMDBfU0NUTCwgRTEwMDBfU0NUTF9ESVNBQkxFX1NF UkRFU19MT09QQkFDSyk7CisKKwkvKiBGb3JjZSBsaW5rIHVwLCBzZXQgMWdiLCBzZXQgYm90aCBz dyBkZWZpbmVkIHBpbnMgKi8KKwlyZWcgPSByZDMyKEUxMDAwX0NUUkwpOworCXJlZyB8PSBFMTAw MF9DVFJMX1NMVSB8CisJICAgICAgIEUxMDAwX0NUUkxfU1BEXzEwMDAgfAorCSAgICAgICBFMTAw MF9DVFJMX0ZSQ1NQRCB8CisJICAgICAgIEUxMDAwX0NUUkxfU1dEUElOMCB8CisJICAgICAgIEUx MDAwX0NUUkxfU1dEUElOMTsKKwl3cjMyKEUxMDAwX0NUUkwsIHJlZyk7CisKKwkvKiBTZXQgc3dp dGNoIGNvbnRyb2wgdG8gc2VyZGVzIGVuZXJneSBkZXRlY3QgKi8KKwlyZWcgPSByZDMyKEUxMDAw X0NPTk5TVyk7CisJcmVnIHw9IEUxMDAwX0NPTk5TV19FTlJHU1JDOworCXdyMzIoRTEwMDBfQ09O TlNXLCByZWcpOworCisJLyoKKwkgKiBOZXcgU2VyRGVzIG1vZGUgYWxsb3dzIGZvciBmb3JjaW5n IHNwZWVkIG9yIGF1dG9uZWdvdGlhdGluZyBzcGVlZAorCSAqIGF0IDFnYi4gQXV0b25lZyBzaG91 bGQgYmUgZGVmYXVsdCBzZXQgYnkgbW9zdCBkcml2ZXJzLiBUaGlzIGlzIHRoZQorCSAqIG1vZGUg dGhhdCB3aWxsIGJlIGNvbXBhdGlibGUgd2l0aCBvbGRlciBsaW5rIHBhcnRuZXJzIGFuZCBzd2l0 Y2hlcy4KKwkgKiBIb3dldmVyLCBib3RoIGFyZSBzdXBwb3J0ZWQgYnkgdGhlIGhhcmR3YXJlIGFu ZCBzb21lIGRyaXZlcnMvdG9vbHMuCisJICovCisJcmVnID0gcmQzMihFMTAwMF9QQ1NfTENUTCk7 CisKKwlyZWcgJj0gfihFMTAwMF9QQ1NfTENUTF9BTl9FTkFCTEUgfCBFMTAwMF9QQ1NfTENUTF9G TFZfTElOS19VUCB8CisJCUUxMDAwX1BDU19MQ1RMX0ZTRCB8IEUxMDAwX1BDU19MQ1RMX0ZPUkNF X0xJTkspOworCisJaWYgKGh3LT5tYWMuYXV0b25lZykgeworCQkvKiBTZXQgUENTIHJlZ2lzdGVy IGZvciBhdXRvbmVnICovCisJCXJlZyB8PSBFMTAwMF9QQ1NfTENUTF9GU1ZfMTAwMCB8ICAgICAg LyogRm9yY2UgMTAwMCAgICAqLworCQkgICAgICAgRTEwMDBfUENTX0xDVExfRkRWX0ZVTEwgfCAg ICAgIC8qIFNlckRlcyBGdWxsIGR1cGxleCAqLworCQkgICAgICAgRTEwMDBfUENTX0xDVExfQU5f RU5BQkxFIHwgICAgIC8qIEVuYWJsZSBBdXRvbmVnICovCisJCSAgICAgICBFMTAwMF9QQ1NfTENU TF9BTl9SRVNUQVJUOyAgICAgLyogUmVzdGFydCBhdXRvbmVnICovCisJCWh3X2RiZygiQ29uZmln dXJpbmcgQXV0b25lZzsgUENTX0xDVEwgPSAweCUwOFhcbiIsIHJlZyk7CisJfSBlbHNlIHsKKwkJ LyogU2V0IFBDUyByZWdpc3RlciBmb3IgZm9yY2VkIHNwZWVkICovCisJCXJlZyB8PSBFMTAwMF9Q Q1NfTENUTF9GTFZfTElOS19VUCB8ICAgLyogRm9yY2UgbGluayB1cCAqLworCQkgICAgICAgRTEw MDBfUENTX0xDVExfRlNWXzEwMDAgfCAgICAgIC8qIEZvcmNlIDEwMDAgICAgKi8KKwkJICAgICAg IEUxMDAwX1BDU19MQ1RMX0ZEVl9GVUxMIHwgICAgICAvKiBTZXJEZXMgRnVsbCBkdXBsZXggKi8K KwkJICAgICAgIEUxMDAwX1BDU19MQ1RMX0ZTRCB8ICAgICAgICAgICAvKiBGb3JjZSBTcGVlZCAq LworCQkgICAgICAgRTEwMDBfUENTX0xDVExfRk9SQ0VfTElOSzsgICAgIC8qIEZvcmNlIExpbmsg Ki8KKwkJaHdfZGJnKCJDb25maWd1cmluZyBGb3JjZWQgTGluazsgUENTX0xDVEwgPSAweCUwOFhc biIsIHJlZyk7CisJfQorCisJaWYgKGh3LT5tYWMudHlwZSA9PSBlMTAwMF84MjU3NikgeworCQly ZWcgfD0gRTEwMDBfUENTX0xDVExfRk9SQ0VfRkNUUkw7CisJCWlnYl9mb3JjZV9tYWNfZmMoaHcp OworCX0KKworCXdyMzIoRTEwMDBfUENTX0xDVEwsIHJlZyk7CisKKwlyZXR1cm4gMDsKK30KKwor LyoqCisgKiAgaWdiX2NvbmZpZ3VyZV9wY3NfbGlua184MjU3NSAtIENvbmZpZ3VyZSBQQ1MgbGlu aworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIENvbmZpZ3Vy ZSB0aGUgcGh5c2ljYWwgY29kaW5nIHN1Yi1sYXllciAoUENTKSBsaW5rLiAgVGhlIFBDUyBsaW5r IGlzCisgKiAgb25seSB1c2VkIG9uIGNvcHBlciBjb25uZWN0aW9ucyB3aGVyZSB0aGUgc2VyaWFs aXplZCBnaWdhYml0IG1lZGlhCisgKiAgaW5kZXBlbmRlbnQgaW50ZXJmYWNlIChzZ21paSkgaXMg YmVpbmcgdXNlZC4gIENvbmZpZ3VyZXMgdGhlIGxpbmsKKyAqICBmb3IgYXV0by1uZWdvdGlhdGlv biBvciBmb3JjZXMgc3BlZWQvZHVwbGV4LgorICoqLworc3RhdGljIHMzMiBpZ2JfY29uZmlndXJl X3Bjc19saW5rXzgyNTc1KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21h Y19pbmZvICptYWMgPSAmaHctPm1hYzsKKwl1MzIgcmVnID0gMDsKKworCWlmIChody0+cGh5Lm1l ZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIgfHwKKwkgICAgIShpZ2Jfc2dtaWlf YWN0aXZlXzgyNTc1KGh3KSkpCisJCWdvdG8gb3V0OworCisJLyogRm9yIFNHTUlJLCB3ZSBuZWVk IHRvIGlzc3VlIGEgUENTIGF1dG9uZWcgcmVzdGFydCAqLworCXJlZyA9IHJkMzIoRTEwMDBfUENT X0xDVEwpOworCisJLyogQU4gdGltZSBvdXQgc2hvdWxkIGJlIGRpc2FibGVkIGZvciBTR01JSSBt b2RlICovCisJcmVnICY9IH4oRTEwMDBfUENTX0xDVExfQU5fVElNRU9VVCk7CisKKwlpZiAobWFj LT5hdXRvbmVnKSB7CisJCS8qIE1ha2Ugc3VyZSBmb3JjZWQgc3BlZWQgYW5kIGZvcmNlIGxpbmsg YXJlIG5vdCBzZXQgKi8KKwkJcmVnICY9IH4oRTEwMDBfUENTX0xDVExfRlNEIHwgRTEwMDBfUENT X0xDVExfRk9SQ0VfTElOSyk7CisKKwkJLyoKKwkJICogVGhlIFBIWSBzaG91bGQgYmUgc2V0dXAg cHJpb3IgdG8gY2FsbGluZyB0aGlzIGZ1bmN0aW9uLgorCQkgKiBBbGwgd2UgbmVlZCB0byBkbyBp cyByZXN0YXJ0IGF1dG9uZWcgYW5kIGVuYWJsZSBhdXRvbmVnLgorCQkgKi8KKwkJcmVnIHw9IEUx MDAwX1BDU19MQ1RMX0FOX1JFU1RBUlQgfCBFMTAwMF9QQ1NfTENUTF9BTl9FTkFCTEU7CisJfSBl bHNlIHsKKwkJLyogU2V0IFBDUyByZWdpc3RlciBmb3IgZm9yY2VkIHNwZWVkICovCisKKwkJLyog VHVybiBvZmYgYml0cyBmb3IgZnVsbCBkdXBsZXgsIHNwZWVkLCBhbmQgYXV0b25lZyAqLworCQly ZWcgJj0gfihFMTAwMF9QQ1NfTENUTF9GU1ZfMTAwMCB8CisJCQkgRTEwMDBfUENTX0xDVExfRlNW XzEwMCB8CisJCQkgRTEwMDBfUENTX0xDVExfRkRWX0ZVTEwgfAorCQkJIEUxMDAwX1BDU19MQ1RM X0FOX0VOQUJMRSk7CisKKwkJLyogQ2hlY2sgZm9yIGR1cGxleCBmaXJzdCAqLworCQlpZiAobWFj LT5mb3JjZWRfc3BlZWRfZHVwbGV4ICYgRTEwMDBfQUxMX0ZVTExfRFVQTEVYKQorCQkJcmVnIHw9 IEUxMDAwX1BDU19MQ1RMX0ZEVl9GVUxMOworCisJCS8qIE5vdyBzZXQgc3BlZWQgKi8KKwkJaWYg KG1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCAmIEUxMDAwX0FMTF8xMDBfU1BFRUQpCisJCQlyZWcg fD0gRTEwMDBfUENTX0xDVExfRlNWXzEwMDsKKworCQkvKiBGb3JjZSBzcGVlZCBhbmQgZm9yY2Ug bGluayAqLworCQlyZWcgfD0gRTEwMDBfUENTX0xDVExfRlNEIHwKKwkJICAgICAgIEUxMDAwX1BD U19MQ1RMX0ZPUkNFX0xJTksgfAorCQkgICAgICAgRTEwMDBfUENTX0xDVExfRkxWX0xJTktfVVA7 CisKKwkJaHdfZGJnKCJXcm90ZSAweCUwOFggdG8gUENTX0xDVEwgdG8gY29uZmlndXJlIGZvcmNl ZCBsaW5rXG4iLAorCQkgICAgICAgcmVnKTsKKwl9CisJd3IzMihFMTAwMF9QQ1NfTENUTCwgcmVn KTsKKworb3V0OgorCXJldHVybiAwOworfQorCisvKioKKyAqICBpZ2Jfc2dtaWlfYWN0aXZlXzgy NTc1IC0gUmV0dXJuIHNnbWlpIHN0YXRlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1 Y3R1cmUKKyAqCisgKiAgODI1NzUgc2lsaWNvbiBoYXMgYSBzZXJpYWxpemVkIGdpZ2FiaXQgbWVk aWEgaW5kZXBlbmRlbnQgaW50ZXJmYWNlIChzZ21paSkKKyAqICB3aGljaCBjYW4gYmUgZW5hYmxl ZCBmb3IgdXNlIGluIHRoZSBlbWJlZGRlZCBhcHBsaWNhdGlvbnMuICBTaW1wbHkKKyAqICByZXR1 cm4gdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIHNnbWlpIGludGVyZmFjZS4KKyAqKi8KK3N0YXRp YyBib29sIGlnYl9zZ21paV9hY3RpdmVfODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlz dHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1NzUgKmRldl9zcGVjOworCWJvb2wgcmV0X3ZhbDsKKwor CWlmIChody0+bWFjLnR5cGUgIT0gZTEwMDBfODI1NzUpIHsKKwkJcmV0X3ZhbCA9IGZhbHNlOwor CQlnb3RvIG91dDsKKwl9CisKKwlkZXZfc3BlYyA9IChzdHJ1Y3QgZTEwMDBfZGV2X3NwZWNfODI1 NzUgKilody0+ZGV2X3NwZWM7CisKKwlyZXRfdmFsID0gZGV2X3NwZWMtPnNnbWlpX2FjdGl2ZTsK Kworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfcmVzZXRfaW5pdF9z Y3JpcHRfODI1NzUgLSBJbml0cyBIVyBkZWZhdWx0cyBhZnRlciByZXNldAorICogIEBodzogcG9p bnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEluaXRzIHJlY29tbWVuZGVkIEhXIGRl ZmF1bHRzIGFmdGVyIGEgcmVzZXQgd2hlbiB0aGVyZSBpcyBubyBFRVBST00KKyAqICBkZXRlY3Rl ZC4gVGhpcyBpcyBvbmx5IGZvciB0aGUgODI1NzUuCisgKiovCitzdGF0aWMgczMyIGlnYl9yZXNl dF9pbml0X3NjcmlwdF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCWlmIChody0+bWFj LnR5cGUgPT0gZTEwMDBfODI1NzUpIHsKKwkJaHdfZGJnKCJSdW5uaW5nIHJlc2V0IGluaXQgc2Ny aXB0IGZvciA4MjU3NVxuIik7CisJCS8qIFNlckRlcyBjb25maWd1cmF0aW9uIHZpYSBTRVJERVND VFJMICovCisJCWlnYl93cml0ZV84Yml0X2N0cmxfcmVnKGh3LCBFMTAwMF9TQ1RMLCAweDAwLCAw eDBDKTsKKwkJaWdiX3dyaXRlXzhiaXRfY3RybF9yZWcoaHcsIEUxMDAwX1NDVEwsIDB4MDEsIDB4 NzgpOworCQlpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhodywgRTEwMDBfU0NUTCwgMHgxQiwgMHgy Myk7CisJCWlnYl93cml0ZV84Yml0X2N0cmxfcmVnKGh3LCBFMTAwMF9TQ1RMLCAweDIzLCAweDE1 KTsKKworCQkvKiBDQ00gY29uZmlndXJhdGlvbiB2aWEgQ0NNQ1RMIHJlZ2lzdGVyICovCisJCWln Yl93cml0ZV84Yml0X2N0cmxfcmVnKGh3LCBFMTAwMF9DQ01DVEwsIDB4MTQsIDB4MDApOworCQlp Z2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhodywgRTEwMDBfQ0NNQ1RMLCAweDEwLCAweDAwKTsKKwor CQkvKiBQQ0llIGxhbmVzIGNvbmZpZ3VyYXRpb24gKi8KKwkJaWdiX3dyaXRlXzhiaXRfY3RybF9y ZWcoaHcsIEUxMDAwX0dJT0NUTCwgMHgwMCwgMHhFQyk7CisJCWlnYl93cml0ZV84Yml0X2N0cmxf cmVnKGh3LCBFMTAwMF9HSU9DVEwsIDB4NjEsIDB4REYpOworCQlpZ2Jfd3JpdGVfOGJpdF9jdHJs X3JlZyhodywgRTEwMDBfR0lPQ1RMLCAweDM0LCAweDA1KTsKKwkJaWdiX3dyaXRlXzhiaXRfY3Ry bF9yZWcoaHcsIEUxMDAwX0dJT0NUTCwgMHgyRiwgMHg4MSk7CisKKwkJLyogUENJZSBQTEwgQ29u ZmlndXJhdGlvbiAqLworCQlpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhodywgRTEwMDBfU0NDVEws IDB4MDIsIDB4NDcpOworCQlpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhodywgRTEwMDBfU0NDVEws IDB4MTQsIDB4MDApOworCQlpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhodywgRTEwMDBfU0NDVEws IDB4MTAsIDB4MDApOworCX0KKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpZ2JfcmVhZF9t YWNfYWRkcl84MjU3NSAtIFJlYWQgZGV2aWNlIE1BQyBhZGRyZXNzCisgKiAgQGh3OiBwb2ludGVy IHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3JlYWRfbWFjX2FkZHJf ODI1NzUoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwlpZiAo aWdiX2NoZWNrX2FsdF9tYWNfYWRkcihodykpCisJCXJldF92YWwgPSBpZ2JfcmVhZF9tYWNfYWRk cihodyk7CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NsZWFyX2h3X2Nu dHJzXzgyNTc1IC0gQ2xlYXIgZGV2aWNlIHNwZWNpZmljIGhhcmR3YXJlIGNvdW50ZXJzCisgKiAg QGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2xlYXJzIHRoZSBoYXJk d2FyZSBjb3VudGVycyBieSByZWFkaW5nIHRoZSBjb3VudGVyIHJlZ2lzdGVycy4KKyAqKi8KK3N0 YXRpYyB2b2lkIGlnYl9jbGVhcl9od19jbnRyc184MjU3NShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQor eworCXUzMiB0ZW1wOworCisJaWdiX2NsZWFyX2h3X2NudHJzX2Jhc2UoaHcpOworCisJdGVtcCA9 IHJkMzIoRTEwMDBfUFJDNjQpOworCXRlbXAgPSByZDMyKEUxMDAwX1BSQzEyNyk7CisJdGVtcCA9 IHJkMzIoRTEwMDBfUFJDMjU1KTsKKwl0ZW1wID0gcmQzMihFMTAwMF9QUkM1MTEpOworCXRlbXAg PSByZDMyKEUxMDAwX1BSQzEwMjMpOworCXRlbXAgPSByZDMyKEUxMDAwX1BSQzE1MjIpOworCXRl bXAgPSByZDMyKEUxMDAwX1BUQzY0KTsKKwl0ZW1wID0gcmQzMihFMTAwMF9QVEMxMjcpOworCXRl bXAgPSByZDMyKEUxMDAwX1BUQzI1NSk7CisJdGVtcCA9IHJkMzIoRTEwMDBfUFRDNTExKTsKKwl0 ZW1wID0gcmQzMihFMTAwMF9QVEMxMDIzKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9QVEMxNTIyKTsK KworCXRlbXAgPSByZDMyKEUxMDAwX0FMR05FUlJDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9SWEVS UkMpOworCXRlbXAgPSByZDMyKEUxMDAwX1ROQ1JTKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9DRVhU RVJSKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9UU0NUQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfVFND VEZDKTsKKworCXRlbXAgPSByZDMyKEUxMDAwX01HVFBSQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBf TUdUUERDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9NR1RQVEMpOworCisJdGVtcCA9IHJkMzIoRTEw MDBfSUFDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9JQ1JYT0MpOworCisJdGVtcCA9IHJkMzIoRTEw MDBfSUNSWFBUQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfSUNSWEFUQyk7CisJdGVtcCA9IHJkMzIo RTEwMDBfSUNUWFBUQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfSUNUWEFUQyk7CisJdGVtcCA9IHJk MzIoRTEwMDBfSUNUWFFFQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfSUNUWFFNVEMpOworCXRlbXAg PSByZDMyKEUxMDAwX0lDUlhETVRDKTsKKworCXRlbXAgPSByZDMyKEUxMDAwX0NCVE1QQyk7CisJ dGVtcCA9IHJkMzIoRTEwMDBfSFREUE1DKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9DQlJNUEMpOwor CXRlbXAgPSByZDMyKEUxMDAwX1JQVEhDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9IR1BUQyk7CisJ dGVtcCA9IHJkMzIoRTEwMDBfSFRDQkRQQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfSEdPUkNMKTsK Kwl0ZW1wID0gcmQzMihFMTAwMF9IR09SQ0gpOworCXRlbXAgPSByZDMyKEUxMDAwX0hHT1RDTCk7 CisJdGVtcCA9IHJkMzIoRTEwMDBfSEdPVENIKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9MRU5FUlJT KTsKKworCS8qIFRoaXMgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkIGluIGNvcHBlciBjb25m aWd1cmF0aW9ucyAqLworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlw ZV9pbnRlcm5hbF9zZXJkZXMpCisJCXRlbXAgPSByZDMyKEUxMDAwX1NDVlBDKTsKK30KKworLyoq CisgKiAgaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUgLSBDbGVhbiByeCBmaWZvIGFmdGVyIFJYIGVu YWJsZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIEFmdGVy IHJ4IGVuYWJsZSBpZiBtYW5hZ2FiaWxpdHkgaXMgZW5hYmxlZCB0aGVuIHRoZXJlIGlzIGxpa2Vs eSBzb21lCisgKiAgYmFkIGRhdGEgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWZvIGFuZCBwb3NzaWJs eSBpbiB0aGUgRE1BIGZpZm8uICBUaGlzCisgKiAgZnVuY3Rpb24gY2xlYXJzIHRoZSBmaWZvcyBh bmQgZmx1c2hlcyBhbnkgcGFja2V0cyB0aGF0IGNhbWUgaW4gYXMgcnggd2FzCisgKiAgYmVpbmcg ZW5hYmxlZC4KKyAqKi8KK3ZvaWQgaWdiX3J4X2ZpZm9fZmx1c2hfODI1NzUoc3RydWN0IGUxMDAw X2h3ICpodykKK3sKKwl1MzIgcmN0bCwgcmxwbWwsIHJ4ZGN0bFs0XSwgcmZjdGwsIHRlbXBfcmN0 bCwgcnhfZW5hYmxlZDsKKwlpbnQgaSwgbXNfd2FpdDsKKworCWlmIChody0+bWFjLnR5cGUgIT0g ZTEwMDBfODI1NzUgfHwKKwkgICAgIShyZDMyKEUxMDAwX01BTkMpICYgRTEwMDBfTUFOQ19SQ1Zf VENPX0VOKSkKKwkJcmV0dXJuOworCisJLyogRGlzYWJsZSBhbGwgUlggcXVldWVzICovCisJZm9y IChpID0gMDsgaSA8IDQ7IGkrKykgeworCQlyeGRjdGxbaV0gPSByZDMyKEUxMDAwX1JYRENUTChp KSk7CisJCXdyMzIoRTEwMDBfUlhEQ1RMKGkpLAorCQkgICAgIHJ4ZGN0bFtpXSAmIH5FMTAwMF9S WERDVExfUVVFVUVfRU5BQkxFKTsKKwl9CisJLyogUG9sbCBhbGwgcXVldWVzIHRvIHZlcmlmeSB0 aGV5IGhhdmUgc2h1dCBkb3duICovCisJZm9yIChtc193YWl0ID0gMDsgbXNfd2FpdCA8IDEwOyBt c193YWl0KyspIHsKKwkJbXNsZWVwKDEpOworCQlyeF9lbmFibGVkID0gMDsKKwkJZm9yIChpID0g MDsgaSA8IDQ7IGkrKykKKwkJCXJ4X2VuYWJsZWQgfD0gcmQzMihFMTAwMF9SWERDVEwoaSkpOwor CQlpZiAoIShyeF9lbmFibGVkICYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpCisJCQlicmVh azsKKwl9CisKKwlpZiAobXNfd2FpdCA9PSAxMCkKKwkJaHdfZGJnKCJRdWV1ZSBkaXNhYmxlIHRp bWVkIG91dCBhZnRlciAxMG1zXG4iKTsKKworCS8qIENsZWFyIFJMUE1MLCBSQ1RMLlNCUCwgUkZD VEwuTEVGLCBhbmQgc2V0IFJDVEwuTFBFIHNvIHRoYXQgYWxsCisJICogaW5jb21pbmcgcGFja2V0 cyBhcmUgcmVqZWN0ZWQuICBTZXQgZW5hYmxlIGFuZCB3YWl0IDJtcyBzbyB0aGF0CisJICogYW55 IHBhY2tldCB0aGF0IHdhcyBjb21pbmcgaW4gYXMgUkNUTC5FTiB3YXMgc2V0IGlzIGZsdXNoZWQK KwkgKi8KKwlyZmN0bCA9IHJkMzIoRTEwMDBfUkZDVEwpOworCXdyMzIoRTEwMDBfUkZDVEwsIHJm Y3RsICYgfkUxMDAwX1JGQ1RMX0xFRik7CisKKwlybHBtbCA9IHJkMzIoRTEwMDBfUkxQTUwpOwor CXdyMzIoRTEwMDBfUkxQTUwsIDApOworCisJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7CisJdGVt cF9yY3RsID0gcmN0bCAmIH4oRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfU0JQKTsKKwl0ZW1w X3JjdGwgfD0gRTEwMDBfUkNUTF9MUEU7CisKKwl3cjMyKEUxMDAwX1JDVEwsIHRlbXBfcmN0bCk7 CisJd3IzMihFMTAwMF9SQ1RMLCB0ZW1wX3JjdGwgfCBFMTAwMF9SQ1RMX0VOKTsKKwl3cmZsKCk7 CisJbXNsZWVwKDIpOworCisJLyogRW5hYmxlIFJYIHF1ZXVlcyB0aGF0IHdlcmUgcHJldmlvdXNs eSBlbmFibGVkIGFuZCByZXN0b3JlIG91cgorCSAqIHByZXZpb3VzIHN0YXRlCisJICovCisJZm9y IChpID0gMDsgaSA8IDQ7IGkrKykKKwkJd3IzMihFMTAwMF9SWERDVEwoaSksIHJ4ZGN0bFtpXSk7 CisJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKKwl3cmZsKCk7CisKKwl3cjMyKEUxMDAwX1JMUE1M LCBybHBtbCk7CisJd3IzMihFMTAwMF9SRkNUTCwgcmZjdGwpOworCisJLyogRmx1c2ggcmVjZWl2 ZSBlcnJvcnMgZ2VuZXJhdGVkIGJ5IHdvcmthcm91bmQgKi8KKwlyZDMyKEUxMDAwX1JPQyk7CisJ cmQzMihFMTAwMF9STkJDKTsKKwlyZDMyKEUxMDAwX01QQyk7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qg ZTEwMDBfbWFjX29wZXJhdGlvbnMgZTEwMDBfbWFjX29wc184MjU3NSA9IHsKKwkucmVzZXRfaHcg ICAgICAgICAgICAgPSBpZ2JfcmVzZXRfaHdfODI1NzUsCisJLmluaXRfaHcgICAgICAgICAgICAg ID0gaWdiX2luaXRfaHdfODI1NzUsCisJLmNoZWNrX2Zvcl9saW5rICAgICAgID0gaWdiX2NoZWNr X2Zvcl9saW5rXzgyNTc1LAorCS5yYXJfc2V0ICAgICAgICAgICAgICA9IGlnYl9yYXJfc2V0LAor CS5yZWFkX21hY19hZGRyICAgICAgICA9IGlnYl9yZWFkX21hY19hZGRyXzgyNTc1LAorCS5nZXRf c3BlZWRfYW5kX2R1cGxleCA9IGlnYl9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXIsCit9Owor CitzdGF0aWMgc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIGUxMDAwX3BoeV9vcHNfODI1NzUg PSB7CisJLmFjcXVpcmVfcGh5ICAgICAgICAgID0gaWdiX2FjcXVpcmVfcGh5XzgyNTc1LAorCS5n ZXRfY2ZnX2RvbmUgICAgICAgICA9IGlnYl9nZXRfY2ZnX2RvbmVfODI1NzUsCisJLnJlbGVhc2Vf cGh5ICAgICAgICAgID0gaWdiX3JlbGVhc2VfcGh5XzgyNTc1LAorfTsKKworc3RhdGljIHN0cnVj dCBlMTAwMF9udm1fb3BlcmF0aW9ucyBlMTAwMF9udm1fb3BzXzgyNTc1ID0geworCS5hY3F1aXJl X252bSAgICAgICAgICA9IGlnYl9hY3F1aXJlX252bV84MjU3NSwKKwkucmVhZF9udm0gICAgICAg ICAgICAgPSBpZ2JfcmVhZF9udm1fZWVyZCwKKwkucmVsZWFzZV9udm0gICAgICAgICAgPSBpZ2Jf cmVsZWFzZV9udm1fODI1NzUsCisJLndyaXRlX252bSAgICAgICAgICAgID0gaWdiX3dyaXRlX252 bV9zcGksCit9OworCitjb25zdCBzdHJ1Y3QgZTEwMDBfaW5mbyBlMTAwMF84MjU3NV9pbmZvID0g eworCS5nZXRfaW52YXJpYW50cyA9IGlnYl9nZXRfaW52YXJpYW50c184MjU3NSwKKwkubWFjX29w cyA9ICZlMTAwMF9tYWNfb3BzXzgyNTc1LAorCS5waHlfb3BzID0gJmUxMDAwX3BoeV9vcHNfODI1 NzUsCisJLm52bV9vcHMgPSAmZTEwMDBfbnZtX29wc184MjU3NSwKK307CisKZGlmZiAtciBhZjc0 M2QxNGFhOGMgZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgyNTc1LmgKLS0tIC9kZXYvbnVsbAlUaHUg SmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwXzgy NTc1LmgJVGh1IEZlYiAxMiAwMzowMjoxNCAyMDA5IC0wNTAwCkBAIC0wLDAgKzEsMTU3IEBACisv KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGlu dXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4K KworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2Yg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hl ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBk aXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hB TlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlv dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAg dGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKworICBDb250YWN0IEluZm9ybWF0aW9uOgorICBl MTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAwLWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5l dD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAgTi5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhp bGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZu ZGVmIF9FMTAwMF84MjU3NV9IXworI2RlZmluZSBfRTEwMDBfODI1NzVfSF8KKwordm9pZCBpZ2Jf dXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NShzdHJ1Y3QgZTEwMDBfaHcqLCB1OCosIHUzMiwgdTMy LCB1MzIpOworZXh0ZXJuIHZvaWQgaWdiX3NodXRkb3duX2ZpYmVyX3NlcmRlc19saW5rXzgyNTc1 KHN0cnVjdCBlMTAwMF9odyAqaHcpOworZXh0ZXJuIHZvaWQgaWdiX3J4X2ZpZm9fZmx1c2hfODI1 NzUoc3RydWN0IGUxMDAwX2h3ICpodyk7CisKKyNkZWZpbmUgRTEwMDBfUkFSX0VOVFJJRVNfODI1 NzUgICAxNgorI2RlZmluZSBFMTAwMF9SQVJfRU5UUklFU184MjU3NiAgIDI0CisKKy8qIFNSUkNU TCBiaXQgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRTEwMDBfU1JSQ1RMX0JTSVpFUEtUX1NISUZU ICAgICAgICAgICAgICAgICAgICAgMTAgLyogU2hpZnQgX3JpZ2h0XyAqLworI2RlZmluZSBFMTAw MF9TUlJDVExfQlNJWkVIRFJTSVpFX1NISUZUICAgICAgICAgICAgICAgICAyICAvKiBTaGlmdCBf bGVmdF8gKi8KKyNkZWZpbmUgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYgICAgICAg ICAgICAgICAgMHgwMjAwMDAwMAorI2RlZmluZSBFMTAwMF9TUlJDVExfREVTQ1RZUEVfSERSX1NQ TElUX0FMV0FZUyAgICAgICAgICAweDBBMDAwMDAwCisKKyNkZWZpbmUgRTEwMDBfTVJRQ19FTkFC TEVfUlNTXzRRICAgICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFMTAwMF9NUlFDX1JTU19G SUVMRF9JUFY0X1VEUCAgICAgICAweDAwNDAwMDAwCisjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJ RUxEX0lQVjZfVURQICAgICAgIDB4MDA4MDAwMDAKKyNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklF TERfSVBWNl9VRFBfRVggICAgMHgwMTAwMDAwMAorCisjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVF VUUgKCBcCisgICAgRTEwMDBfRUlDUl9UWF9RVUVVRTAgfCAgICBcCisgICAgRTEwMDBfRUlDUl9U WF9RVUVVRTEgfCAgICBcCisgICAgRTEwMDBfRUlDUl9UWF9RVUVVRTIgfCAgICBcCisgICAgRTEw MDBfRUlDUl9UWF9RVUVVRTMpCisKKyNkZWZpbmUgRTEwMDBfRUlDUl9SWF9RVUVVRSAoIFwKKyAg ICBFMTAwMF9FSUNSX1JYX1FVRVVFMCB8ICAgIFwKKyAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMSB8 ICAgIFwKKyAgICBFMTAwMF9FSUNSX1JYX1FVRVVFMiB8ICAgIFwKKyAgICBFMTAwMF9FSUNSX1JY X1FVRVVFMykKKworI2RlZmluZSBFMTAwMF9FSU1TX1JYX1FVRVVFIEUxMDAwX0VJQ1JfUlhfUVVF VUUKKyNkZWZpbmUgRTEwMDBfRUlNU19UWF9RVUVVRSBFMTAwMF9FSUNSX1RYX1FVRVVFCisKKy8q IEltbWVkaWF0ZSBJbnRlcnJ1cHQgUnggKEEuSy5BLiBMb3cgTGF0ZW5jeSBJbnRlcnJ1cHQpICov CisKKy8qIFJlY2VpdmUgRGVzY3JpcHRvciAtIEFkdmFuY2VkICovCit1bmlvbiBlMTAwMF9hZHZf cnhfZGVzYyB7CisJc3RydWN0IHsKKwkJX19sZTY0IHBrdF9hZGRyOyAgICAgICAgICAgICAvKiBQ YWNrZXQgYnVmZmVyIGFkZHJlc3MgKi8KKwkJX19sZTY0IGhkcl9hZGRyOyAgICAgICAgICAgICAv KiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KKwl9IHJlYWQ7CisJc3RydWN0IHsKKwkJc3RydWN0 IHsKKwkJCXN0cnVjdCB7CisJCQkJX19sZTE2IHBrdF9pbmZvOyAgIC8qIFJTUyB0eXBlLCBQYWNr ZXQgdHlwZSAqLworCQkJCV9fbGUxNiBoZHJfaW5mbzsgICAvKiBTcGxpdCBIZWFkZXIsCisJCQkJ CQkgICAgKiBoZWFkZXIgYnVmZmVyIGxlbmd0aCAqLworCQkJfSBsb19kd29yZDsKKwkJCXVuaW9u IHsKKwkJCQlfX2xlMzIgcnNzOyAgICAgICAgICAvKiBSU1MgSGFzaCAqLworCQkJCXN0cnVjdCB7 CisJCQkJCV9fbGUxNiBpcF9pZDsgICAgLyogSVAgaWQgKi8KKwkJCQkJX19sZTE2IGNzdW07ICAg ICAvKiBQYWNrZXQgQ2hlY2tzdW0gKi8KKwkJCQl9IGNzdW1faXA7CisJCQl9IGhpX2R3b3JkOwor CQl9IGxvd2VyOworCQlzdHJ1Y3QgeworCQkJX19sZTMyIHN0YXR1c19lcnJvcjsgICAgIC8qIGV4 dCBzdGF0dXMvZXJyb3IgKi8KKwkJCV9fbGUxNiBsZW5ndGg7ICAgICAgICAgICAvKiBQYWNrZXQg bGVuZ3RoICovCisJCQlfX2xlMTYgdmxhbjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KKwkJ fSB1cHBlcjsKKwl9IHdiOyAgLyogd3JpdGViYWNrICovCit9OworCisjZGVmaW5lIEUxMDAwX1JY REFEVl9IRFJCVUZMRU5fTUFTSyAgICAgIDB4N0ZFMAorI2RlZmluZSBFMTAwMF9SWERBRFZfSERS QlVGTEVOX1NISUZUICAgICA1CisKKy8qIFJTUyBIYXNoIHJlc3VsdHMgKi8KKworLyogUlNTIFBh Y2tldCBUeXBlcyBhcyBpbmRpY2F0ZWQgaW4gdGhlIHJlY2VpdmUgZGVzY3JpcHRvciAqLworI2Rl ZmluZSBFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0ICAgICAgICAweDAwMDAwMDEwIC8qIElQVjQg aGRyIHByZXNlbnQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEQURWX1BLVFRZUEVfVENQICAgICAgICAg MHgwMDAwMDEwMCAvKiBUQ1AgaGRyIHByZXNlbnQgKi8KKworLyogVHJhbnNtaXQgRGVzY3JpcHRv ciAtIEFkdmFuY2VkICovCit1bmlvbiBlMTAwMF9hZHZfdHhfZGVzYyB7CisJc3RydWN0IHsKKwkJ X19sZTY0IGJ1ZmZlcl9hZGRyOyAgICAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1 ZiAqLworCQlfX2xlMzIgY21kX3R5cGVfbGVuOworCQlfX2xlMzIgb2xpbmZvX3N0YXR1czsKKwl9 IHJlYWQ7CisJc3RydWN0IHsKKwkJX19sZTY0IHJzdmQ7ICAgICAgIC8qIFJlc2VydmVkICovCisJ CV9fbGUzMiBueHRzZXFfc2VlZDsKKwkJX19sZTMyIHN0YXR1czsKKwl9IHdiOworfTsKKworLyog QWR2IFRyYW5zbWl0IERlc2NyaXB0b3IgQ29uZmlnIE1hc2tzICovCisjZGVmaW5lIEUxMDAwX0FE VlRYRF9EVFlQX0NUWFQgICAgMHgwMDIwMDAwMCAvKiBBZHZhbmNlZCBDb250ZXh0IERlc2NyaXB0 b3IgKi8KKyNkZWZpbmUgRTEwMDBfQURWVFhEX0RUWVBfREFUQSAgICAweDAwMzAwMDAwIC8qIEFk dmFuY2VkIERhdGEgRGVzY3JpcHRvciAqLworI2RlZmluZSBFMTAwMF9BRFZUWERfRENNRF9JRkNT ICAgIDB4MDIwMDAwMDAgLyogSW5zZXJ0IEZDUyAoRXRoZXJuZXQgQ1JDKSAqLworI2RlZmluZSBF MTAwMF9BRFZUWERfRENNRF9ERVhUICAgIDB4MjAwMDAwMDAgLyogRGVzY3JpcHRvciBleHRlbnNp b24gKDE9QWR2KSAqLworI2RlZmluZSBFMTAwMF9BRFZUWERfRENNRF9WTEUgICAgIDB4NDAwMDAw MDAgLyogVkxBTiBwa3QgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0FEVlRYRF9EQ01EX1RTRSAg ICAgMHg4MDAwMDAwMCAvKiBUQ1AgU2VnIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9BRFZUWERf UEFZTEVOX1NISUZUICAgIDE0IC8qIEFkdiBkZXNjIFBBWUxFTiBzaGlmdCAqLworCisvKiBDb250 ZXh0IGRlc2NyaXB0b3JzICovCitzdHJ1Y3QgZTEwMDBfYWR2X3R4X2NvbnRleHRfZGVzYyB7CisJ X19sZTMyIHZsYW5fbWFjaXBfbGVuczsKKwlfX2xlMzIgc2VxbnVtX3NlZWQ7CisJX19sZTMyIHR5 cGVfdHVjbWRfbWxobDsKKwlfX2xlMzIgbXNzX2w0bGVuX2lkeDsKK307CisKKyNkZWZpbmUgRTEw MDBfQURWVFhEX01BQ0xFTl9TSElGVCAgICA5ICAvKiBBZHYgY3R4dCBkZXNjIG1hYyBsZW4gc2hp ZnQgKi8KKyNkZWZpbmUgRTEwMDBfQURWVFhEX1RVQ01EX0lQVjQgICAgMHgwMDAwMDQwMCAgLyog SVAgUGFja2V0IFR5cGU6IDE9SVB2NCAqLworI2RlZmluZSBFMTAwMF9BRFZUWERfVFVDTURfTDRU X1RDUCAweDAwMDAwODAwICAvKiBMNCBQYWNrZXQgVFlQRSBvZiBUQ1AgKi8KKy8qIElQU2VjIEVu Y3J5cHQgRW5hYmxlIGZvciBFU1AgKi8KKyNkZWZpbmUgRTEwMDBfQURWVFhEX0w0TEVOX1NISUZU ICAgICA4ICAvKiBBZHYgY3R4dCBMNExFTiBzaGlmdCAqLworI2RlZmluZSBFMTAwMF9BRFZUWERf TVNTX1NISUZUICAgICAgMTYgIC8qIEFkdiBjdHh0IE1TUyBzaGlmdCAqLworLyogQWR2IGN0eHQg SVBTZWMgU0EgSURYIG1hc2sgKi8KKy8qIEFkdiBjdHh0IElQU2VjIEVTUCBsZW4gbWFzayAqLwor CisvKiBBZGRpdGlvbmFsIFRyYW5zbWl0IERlc2NyaXB0b3IgQ29udHJvbCBkZWZpbml0aW9ucyAq LworI2RlZmluZSBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFICAweDAyMDAwMDAwIC8qIEVuYWJs ZSBzcGVjaWZpYyBUeCBRdWV1ZSAqLworLyogVHggUXVldWUgQXJiaXRyYXRpb24gUHJpb3JpdHkg MD1sb3csIDE9aGlnaCAqLworCisvKiBBZGRpdGlvbmFsIFJlY2VpdmUgRGVzY3JpcHRvciBDb250 cm9sIGRlZmluaXRpb25zICovCisjZGVmaW5lIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUgIDB4 MDIwMDAwMDAgLyogRW5hYmxlIHNwZWNpZmljIFJ4IFF1ZXVlICovCisKKy8qIERpcmVjdCBDYWNo ZSBBY2Nlc3MgKERDQSkgZGVmaW5pdGlvbnMgKi8KKworCisKKyNkZWZpbmUgRTEwMDBfRENBX1RY Q1RSTF9UWF9XQl9ST19FTiAoMSA8PCAxMSkgLyogVHggRGVzYyB3cml0ZWJhY2sgUk8gYml0ICov CisKKyNlbmRpZgpkaWZmIC1yIGFmNzQzZDE0YWE4YyBkcml2ZXJzL25ldC9pZ2IvZTEwMDBfZGVm aW5lcy5oCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBi L2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9kZWZpbmVzLmgJVGh1IEZlYiAxMiAwMzowMjoxNCAyMDA5 IC0wNTAwCkBAIC0wLDAgKzEsNzcxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIElu dGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3 IC0gMjAwOCBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl LAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s CisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQg aW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKwor ICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAw LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAg Ti5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9FMTAwMF9ERUZJTkVTX0hfCisjZGVmaW5l IF9FMTAwMF9ERUZJTkVTX0hfCisKKy8qIE51bWJlciBvZiBUcmFuc21pdCBhbmQgUmVjZWl2ZSBE ZXNjcmlwdG9ycyBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgOCAqLworI2RlZmluZSBSRVFfVFhfREVT Q1JJUFRPUl9NVUxUSVBMRSAgOAorI2RlZmluZSBSRVFfUlhfREVTQ1JJUFRPUl9NVUxUSVBMRSAg OAorCisvKiBEZWZpbml0aW9ucyBmb3IgcG93ZXIgbWFuYWdlbWVudCBhbmQgd2FrZXVwIHJlZ2lz dGVycyAqLworLyogV2FrZSBVcCBDb250cm9sICovCisjZGVmaW5lIEUxMDAwX1dVQ19QTUVfRU4g ICAgIDB4MDAwMDAwMDIgLyogUE1FIEVuYWJsZSAqLworCisvKiBXYWtlIFVwIEZpbHRlciBDb250 cm9sICovCisjZGVmaW5lIEUxMDAwX1dVRkNfTE5LQyAweDAwMDAwMDAxIC8qIExpbmsgU3RhdHVz IENoYW5nZSBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNfTUFHICAweDAwMDAw MDAyIC8qIE1hZ2ljIFBhY2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNf RVggICAweDAwMDAwMDA0IC8qIERpcmVjdGVkIEV4YWN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZp bmUgRTEwMDBfV1VGQ19NQyAgIDB4MDAwMDAwMDggLyogRGlyZWN0ZWQgTXVsdGljYXN0IFdha2V1 cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19CQyAgIDB4MDAwMDAwMTAgLyogQnJvYWRj YXN0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VGQ19BUlAgIDB4MDAwMDAwMjAg LyogQVJQIFJlcXVlc3QgUGFja2V0IFdha2V1cCBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfV1VG Q19JUFY0IDB4MDAwMDAwNDAgLyogRGlyZWN0ZWQgSVB2NCBQYWNrZXQgV2FrZXVwIEVuYWJsZSAq LworI2RlZmluZSBFMTAwMF9XVUZDX0lQVjYgMHgwMDAwMDA4MCAvKiBEaXJlY3RlZCBJUHY2IFBh Y2tldCBXYWtldXAgRW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1dVRkNfRkxYMCAweDAwMDEwMDAw IC8qIEZsZXhpYmxlIEZpbHRlciAwIEVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0ZMWDEg MHgwMDAyMDAwMCAvKiBGbGV4aWJsZSBGaWx0ZXIgMSBFbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBf V1VGQ19GTFgyIDB4MDAwNDAwMDAgLyogRmxleGlibGUgRmlsdGVyIDIgRW5hYmxlICovCisjZGVm aW5lIEUxMDAwX1dVRkNfRkxYMyAweDAwMDgwMDAwIC8qIEZsZXhpYmxlIEZpbHRlciAzIEVuYWJs ZSAqLworI2RlZmluZSBFMTAwMF9XVUZDX0ZMWF9GSUxURVJTIDB4MDAwRjAwMDAgLyogTWFzayBm b3IgdGhlIDQgZmxleGlibGUgZmlsdGVycyAqLworCisvKiBXYWtlIFVwIFN0YXR1cyAqLworCisv KiBXYWtlIFVwIFBhY2tldCBMZW5ndGggKi8KKworLyogRm91ciBGbGV4aWJsZSBGaWx0ZXJzIGFy ZSBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX0NPVU5UX01BWCA0 CisKKy8qIEVhY2ggRmxleGlibGUgRmlsdGVyIGlzIGF0IG1vc3QgMTI4ICgweDgwKSBieXRlcyBp biBsZW5ndGggKi8KKyNkZWZpbmUgRTEwMDBfRkxFWElCTEVfRklMVEVSX1NJWkVfTUFYICAxMjgK KworCisvKiBFeHRlbmRlZCBEZXZpY2UgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0VY VF9HUEkxX0VOICAgMHgwMDAwMDAwMiAvKiBNYXBzIFNEUDUgdG8gR1BJMSAqLworI2RlZmluZSBF MTAwMF9DVFJMX0VYVF9TRFA0X0RBVEEgMHgwMDAwMDAxMCAvKiBWYWx1ZSBvZiBTVyBEZWZpbmVh YmxlIFBpbiA0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX1NEUDVfREFUQSAweDAwMDAwMDIw IC8qIFZhbHVlIG9mIFNXIERlZmluZWFibGUgUGluIDUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9F WFRfU0RQN19EQVRBIDB4MDAwMDAwODAgLyogVmFsdWUgb2YgU1cgRGVmaW5lYWJsZSBQaW4gNyAq LworI2RlZmluZSBFMTAwMF9DVFJMX0VYVF9TRFA0X0RJUiAgMHgwMDAwMDEwMCAvKiBEaXJlY3Rp b24gb2YgU0RQNCAwPWluIDE9b3V0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0VFX1JTVCAg ICAweDAwMDAyMDAwIC8qIFJlaW5pdGlhbGl6ZSBmcm9tIEVFUFJPTSAqLworI2RlZmluZSBFMTAw MF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSyAweDAwQzAwMDAwCisjZGVmaW5lIEUxMDAwX0NUUkxf RVhUX0xJTktfTU9ERV9QQ0lFX1NFUkRFUyAgMHgwMEMwMDAwMAorI2RlZmluZSBFMTAwMF9DVFJM X0VYVF9MSU5LX01PREVfU0dNSUkgICAweDAwODAwMDAwCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhU X0VJQU1FICAgICAgICAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFRfSVJDQSAg ICAgICAgICAgMHgwMDAwMDAwMQorLyogSW50ZXJydXB0IGRlbGF5IGNhbmNlbGxhdGlvbiAqLwor LyogRHJpdmVyIGxvYWRlZCBiaXQgZm9yIEZXICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRVhUX0RS Vl9MT0FEICAgICAgIDB4MTAwMDAwMDAKKy8qIEludGVycnVwdCBhY2tub3dsZWRnZSBBdXRvLW1h c2sgKi8KKy8qIENsZWFyIEludGVycnVwdCB0aW1lcnMgYWZ0ZXIgSU1TIGNsZWFyICovCisvKiBw YWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gZW5hYmxlZCAqLworLyogZGVzY3Jp cHRvciBGSUZPIHBhcml0eSBlcnJvciBkZXRlY3Rpb24gZW5hYmxlICovCisjZGVmaW5lIEUxMDAw X0NUUkxfRVhUX1BCQV9DTFIgICAgICAgIDB4ODAwMDAwMDAgLyogUEJBIENsZWFyICovCisjZGVm aW5lIEUxMDAwX0kyQ0NNRF9SRUdfQUREUl9TSElGVCAgIDE2CisjZGVmaW5lIEUxMDAwX0kyQ0NN RF9QSFlfQUREUl9TSElGVCAgIDI0CisjZGVmaW5lIEUxMDAwX0kyQ0NNRF9PUENPREVfUkVBRCAg ICAgIDB4MDgwMDAwMDAKKyNkZWZpbmUgRTEwMDBfSTJDQ01EX09QQ09ERV9XUklURSAgICAgMHgw MDAwMDAwMAorI2RlZmluZSBFMTAwMF9JMkNDTURfUkVBRFkgICAgICAgICAgICAweDIwMDAwMDAw CisjZGVmaW5lIEUxMDAwX0kyQ0NNRF9FUlJPUiAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZp bmUgRTEwMDBfTUFYX1NHTUlJX1BIWV9SRUdfQUREUiAgMjU1CisjZGVmaW5lIEUxMDAwX0kyQ0NN RF9QSFlfVElNRU9VVCAgICAgIDIwMAorI2RlZmluZSBFMTAwMF9JVkFSX1ZBTElEICAgICAgICAg ICAgICAweDgwCisjZGVmaW5lIEUxMDAwX0dQSUVfTlNJQ1IgICAgICAgICAgICAgIDB4MDAwMDAw MDEKKyNkZWZpbmUgRTEwMDBfR1BJRV9NU0lYX01PREUgICAgICAgICAgMHgwMDAwMDAxMAorI2Rl ZmluZSBFMTAwMF9HUElFX0VJQU1FICAgICAgICAgICAgICAweDQwMDAwMDAwCisjZGVmaW5lIEUx MDAwX0dQSUVfUEJBICAgICAgICAgICAgICAgIDB4ODAwMDAwMDAKKworLyogUmVjZWl2ZSBEZXNj cmlwdG9yIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmluZSBFMTAwMF9SWERfU1RBVF9ERCAgICAg ICAweDAxICAgIC8qIERlc2NyaXB0b3IgRG9uZSAqLworI2RlZmluZSBFMTAwMF9SWERfU1RBVF9F T1AgICAgICAweDAyICAgIC8qIEVuZCBvZiBQYWNrZXQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NU QVRfSVhTTSAgICAgMHgwNCAgICAvKiBJZ25vcmUgY2hlY2tzdW0gKi8KKyNkZWZpbmUgRTEwMDBf UlhEX1NUQVRfVlAgICAgICAgMHgwOCAgICAvKiBJRUVFIFZMQU4gUGFja2V0ICovCisjZGVmaW5l IEUxMDAwX1JYRF9TVEFUX1VEUENTICAgIDB4MTAgICAgLyogVURQIHhzdW0gY2FsY3VsYXRlZCAq LworI2RlZmluZSBFMTAwMF9SWERfU1RBVF9UQ1BDUyAgICAweDIwICAgIC8qIFRDUCB4c3VtIGNh bGN1bGF0ZWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX1NUQVRfRFlOSU5UICAgMHg4MDAgICAvKiBQ a3QgY2F1c2VkIElOVCB2aWEgRFlOSU5UICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfQ0UgICAg ICAgIDB4MDEgICAgLyogQ1JDIEVycm9yICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0UgICAg ICAgIDB4MDIgICAgLyogU3ltYm9sIEVycm9yICovCisjZGVmaW5lIEUxMDAwX1JYRF9FUlJfU0VR ICAgICAgIDB4MDQgICAgLyogU2VxdWVuY2UgRXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfUlhEX0VS Ul9DWEUgICAgICAgMHgxMCAgICAvKiBDYXJyaWVyIEV4dGVuc2lvbiBFcnJvciAqLworI2RlZmlu ZSBFMTAwMF9SWERfRVJSX1JYRSAgICAgICAweDgwICAgIC8qIFJ4IERhdGEgRXJyb3IgKi8KKyNk ZWZpbmUgRTEwMDBfUlhEX1NQQ19WTEFOX01BU0sgMHgwRkZGICAvKiBWTEFOIElEIGlzIGluIGxv d2VyIDEyIGJpdHMgKi8KKworI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9DRSAgICAweDAx MDAwMDAwCisjZGVmaW5lIEUxMDAwX1JYREVYVF9TVEFURVJSX1NFICAgIDB4MDIwMDAwMDAKKyNk ZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfU0VRICAgMHgwNDAwMDAwMAorI2RlZmluZSBFMTAw MF9SWERFWFRfU1RBVEVSUl9DWEUgICAweDEwMDAwMDAwCisjZGVmaW5lIEUxMDAwX1JYREVYVF9T VEFURVJSX1RDUEUgIDB4MjAwMDAwMDAKKyNkZWZpbmUgRTEwMDBfUlhERVhUX1NUQVRFUlJfSVBF ICAgMHg0MDAwMDAwMAorI2RlZmluZSBFMTAwMF9SWERFWFRfU1RBVEVSUl9SWEUgICAweDgwMDAw MDAwCisKKy8qIG1hc2sgdG8gZGV0ZXJtaW5lIGlmIHBhY2tldHMgc2hvdWxkIGJlIGRyb3BwZWQg ZHVlIHRvIGZyYW1lIGVycm9ycyAqLworI2RlZmluZSBFMTAwMF9SWERfRVJSX0ZSQU1FX0VSUl9N QVNLICggXAorICAgIEUxMDAwX1JYRF9FUlJfQ0UgIHwgICAgICAgICAgICAgICAgXAorICAgIEUx MDAwX1JYRF9FUlJfU0UgIHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfU0VR IHwgICAgICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYRF9FUlJfQ1hFIHwgICAgICAgICAgICAg ICAgXAorICAgIEUxMDAwX1JYRF9FUlJfUlhFKQorCisvKiBTYW1lIG1hc2ssIGJ1dCBmb3IgZXh0 ZW5kZWQgYW5kIHBhY2tldCBzcGxpdCBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBFMTAwMF9SWERF WFRfRVJSX0ZSQU1FX0VSUl9NQVNLICggXAorICAgIEUxMDAwX1JYREVYVF9TVEFURVJSX0NFICB8 ICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYREVYVF9TVEFURVJSX1NFICB8ICAgICAgICAgICAg XAorICAgIEUxMDAwX1JYREVYVF9TVEFURVJSX1NFUSB8ICAgICAgICAgICAgXAorICAgIEUxMDAw X1JYREVYVF9TVEFURVJSX0NYRSB8ICAgICAgICAgICAgXAorICAgIEUxMDAwX1JYREVYVF9TVEFU RVJSX1JYRSkKKworI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1RDUCAgICAgICAg ICAweDAwMDEwMDAwCisjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjQgICAgICAgICAg ICAgIDB4MDAwMjAwMDAKKyNkZWZpbmUgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9UQ1BfRVgg ICAgICAgMHgwMDA0MDAwMAorI2RlZmluZSBFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY2ICAgICAg ICAgICAgICAweDAwMTAwMDAwCisjZGVmaW5lIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjZfVENQ ICAgICAgICAgIDB4MDAyMDAwMDAKKworCisvKiBNYW5hZ2VtZW50IENvbnRyb2wgKi8KKyNkZWZp bmUgRTEwMDBfTUFOQ19TTUJVU19FTiAgICAgIDB4MDAwMDAwMDEgLyogU01CdXMgRW5hYmxlZCAt IFJPICovCisjZGVmaW5lIEUxMDAwX01BTkNfQVNGX0VOICAgICAgICAweDAwMDAwMDAyIC8qIEFT RiBFbmFibGVkIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19BUlBfRU4gICAgICAgIDB4MDAw MDIwMDAgLyogRW5hYmxlIEFSUCBSZXF1ZXN0IEZpbHRlcmluZyAqLworLyogRW5hYmxlIE5laWdo Ym9yIERpc2NvdmVyeSBGaWx0ZXJpbmcgKi8KKyNkZWZpbmUgRTEwMDBfTUFOQ19SQ1ZfVENPX0VO ICAgIDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBUQ08gUGFja2V0cyBFbmFibGVkICovCisjZGVmaW5l IEUxMDAwX01BTkNfQkxLX1BIWV9SU1RfT05fSURFICAgMHgwMDA0MDAwMCAvKiBCbG9jayBwaHkg cmVzZXRzICovCisvKiBFbmFibGUgTUFDIGFkZHJlc3MgZmlsdGVyaW5nICovCisjZGVmaW5lIEUx MDAwX01BTkNfRU5fTUFDX0FERFJfRklMVEVSICAgMHgwMDEwMDAwMAorLyogRW5hYmxlIE1ORyBw YWNrZXRzIHRvIGhvc3QgbWVtb3J5ICovCisjZGVmaW5lIEUxMDAwX01BTkNfRU5fTU5HMkhPU1Qg ICAweDAwMjAwMDAwCisvKiBFbmFibGUgSVAgYWRkcmVzcyBmaWx0ZXJpbmcgKi8KKworCisvKiBS ZWNlaXZlIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9FTiAgICAgICAgICAgICAweDAw MDAwMDAyICAgIC8qIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NCUCAgICAgICAgICAg IDB4MDAwMDAwMDQgICAgLyogc3RvcmUgYmFkIHBhY2tldCAqLworI2RlZmluZSBFMTAwMF9SQ1RM X1VQRSAgICAgICAgICAgIDB4MDAwMDAwMDggICAgLyogdW5pY2FzdCBwcm9taXNjdW91cyBlbmFi bGUgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9NUEUgICAgICAgICAgICAweDAwMDAwMDEwICAgIC8q IG11bHRpY2FzdCBwcm9taXNjdW91cyBlbmFiICovCisjZGVmaW5lIEUxMDAwX1JDVExfTFBFICAg ICAgICAgICAgMHgwMDAwMDAyMCAgICAvKiBsb25nIHBhY2tldCBlbmFibGUgKi8KKyNkZWZpbmUg RTEwMDBfUkNUTF9MQk1fTk8gICAgICAgICAweDAwMDAwMDAwICAgIC8qIG5vIGxvb3BiYWNrIG1v ZGUgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9MQk1fTUFDICAgICAgICAweDAwMDAwMDQwICAgIC8q IE1BQyBsb29wYmFjayBtb2RlICovCisjZGVmaW5lIEUxMDAwX1JDVExfTEJNX1RDVlIgICAgICAg MHgwMDAwMDBDMCAgICAvKiB0Y3ZyIGxvb3BiYWNrIG1vZGUgKi8KKyNkZWZpbmUgRTEwMDBfUkNU TF9SRE1UU19IQUxGICAgICAweDAwMDAwMDAwICAgIC8qIHJ4IGRlc2MgbWluIHRocmVzaG9sZCBz aXplICovCisjZGVmaW5lIEUxMDAwX1JDVExfTU9fU0hJRlQgICAgICAgMTIgICAgICAgICAgICAv KiBtdWx0aWNhc3Qgb2Zmc2V0IHNoaWZ0ICovCisjZGVmaW5lIEUxMDAwX1JDVExfQkFNICAgICAg ICAgICAgMHgwMDAwODAwMCAgICAvKiBicm9hZGNhc3QgZW5hYmxlICovCisvKiB0aGVzZSBidWZm ZXIgc2l6ZXMgYXJlIHZhbGlkIGlmIEUxMDAwX1JDVExfQlNFWCBpcyAwICovCisjZGVmaW5lIEUx MDAwX1JDVExfU1pfMjA0OCAgICAgICAgMHgwMDAwMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSAy MDQ4ICovCisjZGVmaW5lIEUxMDAwX1JDVExfU1pfMTAyNCAgICAgICAgMHgwMDAxMDAwMCAgICAv KiByeCBidWZmZXIgc2l6ZSAxMDI0ICovCisjZGVmaW5lIEUxMDAwX1JDVExfU1pfNTEyICAgICAg ICAgMHgwMDAyMDAwMCAgICAvKiByeCBidWZmZXIgc2l6ZSA1MTIgKi8KKyNkZWZpbmUgRTEwMDBf UkNUTF9TWl8yNTYgICAgICAgICAweDAwMDMwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDI1NiAq LworLyogdGhlc2UgYnVmZmVyIHNpemVzIGFyZSB2YWxpZCBpZiBFMTAwMF9SQ1RMX0JTRVggaXMg MSAqLworI2RlZmluZSBFMTAwMF9SQ1RMX1NaXzE2Mzg0ICAgICAgIDB4MDAwMTAwMDAgICAgLyog cnggYnVmZmVyIHNpemUgMTYzODQgKi8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TWl84MTkyICAgICAg ICAweDAwMDIwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDgxOTIgKi8KKyNkZWZpbmUgRTEwMDBf UkNUTF9TWl80MDk2ICAgICAgICAweDAwMDMwMDAwICAgIC8qIHJ4IGJ1ZmZlciBzaXplIDQwOTYg Ki8KKyNkZWZpbmUgRTEwMDBfUkNUTF9WRkUgICAgICAgICAgICAweDAwMDQwMDAwICAgIC8qIHZs YW4gZmlsdGVyIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9SQ1RMX0NGSUVOICAgICAgICAgIDB4 MDAwODAwMDAgICAgLyogY2Fub25pY2FsIGZvcm0gZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX1JD VExfQlNFWCAgICAgICAgICAgMHgwMjAwMDAwMCAgICAvKiBCdWZmZXIgc2l6ZSBleHRlbnNpb24g Ki8KKyNkZWZpbmUgRTEwMDBfUkNUTF9TRUNSQyAgICAgICAgICAweDA0MDAwMDAwICAgIC8qIFN0 cmlwIEV0aGVybmV0IENSQyAqLworCisvKgorICogVXNlIGJ5dGUgdmFsdWVzIGZvciB0aGUgZm9s bG93aW5nIHNoaWZ0IHBhcmFtZXRlcnMKKyAqIFVzYWdlOgorICogICAgIHBzcmN0bCB8PSAoKChS T1VORFVQKHZhbHVlMCwgMTI4KSA+PiBFMTAwMF9QU1JDVExfQlNJWkUwX1NISUZUKSAmCisgKiAg ICAgICAgICAgICAgICAgIEUxMDAwX1BTUkNUTF9CU0laRTBfTUFTSykgfAorICogICAgICAgICAg ICAgICAgKChST1VORFVQKHZhbHVlMSwgMTAyNCkgPj4gRTEwMDBfUFNSQ1RMX0JTSVpFMV9TSElG VCkgJgorICogICAgICAgICAgICAgICAgICBFMTAwMF9QU1JDVExfQlNJWkUxX01BU0spIHwKKyAq ICAgICAgICAgICAgICAgICgoUk9VTkRVUCh2YWx1ZTIsIDEwMjQpIDw8IEUxMDAwX1BTUkNUTF9C U0laRTJfU0hJRlQpICYKKyAqICAgICAgICAgICAgICAgICAgRTEwMDBfUFNSQ1RMX0JTSVpFMl9N QVNLKSB8CisgKiAgICAgICAgICAgICAgICAoKFJPVU5EVVAodmFsdWUzLCAxMDI0KSA8PCBFMTAw MF9QU1JDVExfQlNJWkUzX1NISUZUKSB8OworICogICAgICAgICAgICAgICAgICBFMTAwMF9QU1JD VExfQlNJWkUzX01BU0spKQorICogd2hlcmUgdmFsdWUwID0gWzEyOC4uMTYyNTZdLCAgZGVmYXVs dD0yNTYKKyAqICAgICAgIHZhbHVlMSA9IFsxMDI0Li42NDUxMl0sIGRlZmF1bHQ9NDA5NgorICog ICAgICAgdmFsdWUyID0gWzAuLjY0NTEyXSwgICAgZGVmYXVsdD00MDk2CisgKiAgICAgICB2YWx1 ZTMgPSBbMC4uNjQ1MTJdLCAgICBkZWZhdWx0PTAKKyAqLworCisjZGVmaW5lIEUxMDAwX1BTUkNU TF9CU0laRTBfTUFTSyAgIDB4MDAwMDAwN0YKKyNkZWZpbmUgRTEwMDBfUFNSQ1RMX0JTSVpFMV9N QVNLICAgMHgwMDAwM0YwMAorI2RlZmluZSBFMTAwMF9QU1JDVExfQlNJWkUyX01BU0sgICAweDAw M0YwMDAwCisjZGVmaW5lIEUxMDAwX1BTUkNUTF9CU0laRTNfTUFTSyAgIDB4M0YwMDAwMDAKKwor I2RlZmluZSBFMTAwMF9QU1JDVExfQlNJWkUwX1NISUZUICA3ICAgICAgICAgICAgLyogU2hpZnQg X3JpZ2h0XyA3ICovCisjZGVmaW5lIEUxMDAwX1BTUkNUTF9CU0laRTFfU0hJRlQgIDIgICAgICAg ICAgICAvKiBTaGlmdCBfcmlnaHRfIDIgKi8KKyNkZWZpbmUgRTEwMDBfUFNSQ1RMX0JTSVpFMl9T SElGVCAgNiAgICAgICAgICAgIC8qIFNoaWZ0IF9sZWZ0XyA2ICovCisjZGVmaW5lIEUxMDAwX1BT UkNUTF9CU0laRTNfU0hJRlQgMTQgICAgICAgICAgICAvKiBTaGlmdCBfbGVmdF8gMTQgKi8KKwor LyogU1dGV19TWU5DIERlZmluaXRpb25zICovCisjZGVmaW5lIEUxMDAwX1NXRldfRUVQX1NNICAg MHgxCisjZGVmaW5lIEUxMDAwX1NXRldfUEhZMF9TTSAgMHgyCisjZGVmaW5lIEUxMDAwX1NXRldf UEhZMV9TTSAgMHg0CisKKy8qIEZBQ1RQUyBEZWZpbml0aW9ucyAqLworLyogRGV2aWNlIENvbnRy b2wgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9GRCAgICAgICAweDAwMDAwMDAxICAvKiBGdWxsIGR1 cGxleC4wPWhhbGY7IDE9ZnVsbCAqLworI2RlZmluZSBFMTAwMF9DVFJMX0dJT19NQVNURVJfRElT QUJMRSAweDAwMDAwMDA0IC8qQmxvY2tzIG5ldyBNYXN0ZXIgcmVxdWVzdHMgKi8KKyNkZWZpbmUg RTEwMDBfQ1RSTF9MUlNUICAgICAweDAwMDAwMDA4ICAvKiBMaW5rIHJlc2V0LiAwPW5vcm1hbCwx PXJlc2V0ICovCisjZGVmaW5lIEUxMDAwX0NUUkxfQVNERSAgICAgMHgwMDAwMDAyMCAgLyogQXV0 by1zcGVlZCBkZXRlY3QgZW5hYmxlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU0xVICAgICAgMHgw MDAwMDA0MCAgLyogU2V0IGxpbmsgdXAgKEZvcmNlIExpbmspICovCisjZGVmaW5lIEUxMDAwX0NU UkxfSUxPUyAgICAgMHgwMDAwMDA4MCAgLyogSW52ZXJ0IExvc3MtT2YgU2lnbmFsICovCisjZGVm aW5lIEUxMDAwX0NUUkxfU1BEX1NFTCAgMHgwMDAwMDMwMCAgLyogU3BlZWQgU2VsZWN0IE1hc2sg Ki8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TUERfMTAwICAweDAwMDAwMTAwICAvKiBGb3JjZSAxMDBN YiAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NQRF8xMDAwIDB4MDAwMDAyMDAgIC8qIEZvcmNlIDFH YiAqLworI2RlZmluZSBFMTAwMF9DVFJMX0ZSQ1NQRCAgIDB4MDAwMDA4MDAgIC8qIEZvcmNlIFNw ZWVkICovCisjZGVmaW5lIEUxMDAwX0NUUkxfRlJDRFBYICAgMHgwMDAwMTAwMCAgLyogRm9yY2Ug RHVwbGV4ICovCisvKiBEZWZpbmVkIHBvbGFyaXR5IG9mIERvY2svVW5kb2NrIGluZGljYXRpb24g aW4gU0RQWzBdICovCisvKiBSZXNldCBib3RoIFBIWSBwb3J0cywgdGhyb3VnaCBQSFlSU1RfTiBw aW4gKi8KKy8qIGVuYWJsZSBsaW5rIHN0YXR1cyBmcm9tIGV4dGVybmFsIExJTktfMCBhbmQgTElO S18xIHBpbnMgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4wICAweDAwMDQwMDAwICAvKiBT V0RQSU4gMCB2YWx1ZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTjEgIDB4MDAwODAwMDAg IC8qIFNXRFBJTiAxIHZhbHVlICovCisjZGVmaW5lIEUxMDAwX0NUUkxfU1dEUElOMiAgMHgwMDEw MDAwMCAgLyogU1dEUElOIDIgdmFsdWUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9TV0RQSU4zICAw eDAwMjAwMDAwICAvKiBTV0RQSU4gMyB2YWx1ZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJ TzAgIDB4MDA0MDAwMDAgIC8qIFNXRFBJTiAwIElucHV0IG9yIG91dHB1dCAqLworI2RlZmluZSBF MTAwMF9DVFJMX1NXRFBJTzIgIDB4MDEwMDAwMDAgIC8qIFNXRFBJTiAyIGlucHV0IG9yIG91dHB1 dCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1NXRFBJTzMgIDB4MDIwMDAwMDAgIC8qIFNXRFBJTiAz IGlucHV0IG9yIG91dHB1dCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1JTVCAgICAgIDB4MDQwMDAw MDAgIC8qIEdsb2JhbCByZXNldCAqLworI2RlZmluZSBFMTAwMF9DVFJMX1JGQ0UgICAgIDB4MDgw MDAwMDAgIC8qIFJlY2VpdmUgRmxvdyBDb250cm9sIGVuYWJsZSAqLworI2RlZmluZSBFMTAwMF9D VFJMX1RGQ0UgICAgIDB4MTAwMDAwMDAgIC8qIFRyYW5zbWl0IGZsb3cgY29udHJvbCBlbmFibGUg Ki8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9WTUUgICAgICAweDQwMDAwMDAwICAvKiBJRUVFIFZMQU4g bW9kZSBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9QSFlfUlNUICAweDgwMDAwMDAwICAv KiBQSFkgUmVzZXQgKi8KKy8qIEluaXRpYXRlIGFuIGludGVycnVwdCB0byBtYW5hZ2VhYmlsaXR5 IGVuZ2luZSAqLworI2RlZmluZSBFMTAwMF9DVFJMX0kyQ19FTkEgIDB4MDIwMDAwMDAgIC8qIEky QyBlbmFibGUgKi8KKworLyogQml0IGRlZmluaXRpb25zIGZvciB0aGUgTWFuYWdlbWVudCBEYXRh IElPIChNRElPKSBhbmQgTWFuYWdlbWVudCBEYXRhCisgKiBDbG9jayAoTURDKSBwaW5zIGluIHRo ZSBEZXZpY2UgQ29udHJvbCBSZWdpc3Rlci4KKyAqLworCisjZGVmaW5lIEUxMDAwX0NPTk5TV19F TlJHU1JDICAgICAgICAgICAgIDB4NAorI2RlZmluZSBFMTAwMF9QQ1NfQ0ZHX1BDU19FTiAgICAg ICAgICAgICA4CisjZGVmaW5lIEUxMDAwX1BDU19MQ1RMX0ZMVl9MSU5LX1VQICAgICAgIDEKKyNk ZWZpbmUgRTEwMDBfUENTX0xDVExfRlNWXzEwMCAgICAgICAgICAgMgorI2RlZmluZSBFMTAwMF9Q Q1NfTENUTF9GU1ZfMTAwMCAgICAgICAgICA0CisjZGVmaW5lIEUxMDAwX1BDU19MQ1RMX0ZEVl9G VUxMICAgICAgICAgIDgKKyNkZWZpbmUgRTEwMDBfUENTX0xDVExfRlNEICAgICAgICAgICAgICAg MHgxMAorI2RlZmluZSBFMTAwMF9QQ1NfTENUTF9GT1JDRV9MSU5LICAgICAgICAweDIwCisjZGVm aW5lIEUxMDAwX1BDU19MQ1RMX0ZPUkNFX0ZDVFJMICAgICAgIDB4ODAKKyNkZWZpbmUgRTEwMDBf UENTX0xDVExfQU5fRU5BQkxFICAgICAgICAgMHgxMDAwMAorI2RlZmluZSBFMTAwMF9QQ1NfTENU TF9BTl9SRVNUQVJUICAgICAgICAweDIwMDAwCisjZGVmaW5lIEUxMDAwX1BDU19MQ1RMX0FOX1RJ TUVPVVQgICAgICAgIDB4NDAwMDAKKyNkZWZpbmUgRTEwMDBfRU5BQkxFX1NFUkRFU19MT09QQkFD SyAgICAgMHgwNDEwCisKKyNkZWZpbmUgRTEwMDBfUENTX0xTVFNfTElOS19PSyAgICAgICAgICAg MQorI2RlZmluZSBFMTAwMF9QQ1NfTFNUU19TUEVFRF8xMDAgICAgICAgICAyCisjZGVmaW5lIEUx MDAwX1BDU19MU1RTX1NQRUVEXzEwMDAgICAgICAgIDQKKyNkZWZpbmUgRTEwMDBfUENTX0xTVFNf RFVQTEVYX0ZVTEwgICAgICAgOAorI2RlZmluZSBFMTAwMF9QQ1NfTFNUU19TWU5LX09LICAgICAg ICAgICAweDEwCisKKy8qIERldmljZSBTdGF0dXMgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0ZE ICAgICAgICAgMHgwMDAwMDAwMSAgICAgIC8qIEZ1bGwgZHVwbGV4LjA9aGFsZiwxPWZ1bGwgKi8K KyNkZWZpbmUgRTEwMDBfU1RBVFVTX0xVICAgICAgICAgMHgwMDAwMDAwMiAgICAgIC8qIExpbmsg dXAuMD1ubywxPWxpbmsgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0ZVTkNfTUFTSyAgMHgwMDAw MDAwQyAgICAgIC8qIFBDSSBGdW5jdGlvbiBNYXNrICovCisjZGVmaW5lIEUxMDAwX1NUQVRVU19G VU5DX1NISUZUIDIKKyNkZWZpbmUgRTEwMDBfU1RBVFVTX0ZVTkNfMSAgICAgMHgwMDAwMDAwNCAg ICAgIC8qIEZ1bmN0aW9uIDEgKi8KKyNkZWZpbmUgRTEwMDBfU1RBVFVTX1RYT0ZGICAgICAgMHgw MDAwMDAxMCAgICAgIC8qIHRyYW5zbWlzc2lvbiBwYXVzZWQgKi8KKyNkZWZpbmUgRTEwMDBfU1RB VFVTX1NQRUVEXzEwMCAgMHgwMDAwMDA0MCAgICAgIC8qIFNwZWVkIDEwME1iL3MgKi8KKyNkZWZp bmUgRTEwMDBfU1RBVFVTX1NQRUVEXzEwMDAgMHgwMDAwMDA4MCAgICAgIC8qIFNwZWVkIDEwMDBN Yi9zICovCisvKiBDaGFuZ2UgaW4gRG9jay9VbmRvY2sgc3RhdGUuIENsZWFyIG9uIHdyaXRlICcw Jy4gKi8KKy8qIFN0YXR1cyBvZiBNYXN0ZXIgcmVxdWVzdHMuICovCisjZGVmaW5lIEUxMDAwX1NU QVRVU19HSU9fTUFTVEVSX0VOQUJMRSAweDAwMDgwMDAwCisvKiBCTUMgZXh0ZXJuYWwgY29kZSBl eGVjdXRpb24gZGlzYWJsZWQgKi8KKworLyogQ29uc3RhbnRzIHVzZWQgdG8gaW50cmVwcmV0IHRo ZSBtYXNrZWQgUENJLVggYnVzIHNwZWVkLiAqLworCisjZGVmaW5lIFNQRUVEXzEwICAgIDEwCisj ZGVmaW5lIFNQRUVEXzEwMCAgIDEwMAorI2RlZmluZSBTUEVFRF8xMDAwICAxMDAwCisjZGVmaW5l IEhBTEZfRFVQTEVYIDEKKyNkZWZpbmUgRlVMTF9EVVBMRVggMgorCisKKyNkZWZpbmUgQURWRVJU SVNFXzEwX0hBTEYgICAgICAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBBRFZFUlRJU0VfMTBf RlVMTCAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIEFEVkVSVElTRV8xMDBfSEFMRiAg ICAgICAgICAgICAgICAweDAwMDQKKyNkZWZpbmUgQURWRVJUSVNFXzEwMF9GVUxMICAgICAgICAg ICAgICAgIDB4MDAwOAorI2RlZmluZSBBRFZFUlRJU0VfMTAwMF9IQUxGICAgICAgICAgICAgICAg MHgwMDEwIC8qIE5vdCB1c2VkLCBqdXN0IEZZSSAqLworI2RlZmluZSBBRFZFUlRJU0VfMTAwMF9G VUxMICAgICAgICAgICAgICAgMHgwMDIwCisKKy8qIDEwMDAvSCBpcyBub3Qgc3VwcG9ydGVkLCBu b3Igc3BlYy1jb21wbGlhbnQuICovCisjZGVmaW5lIEUxMDAwX0FMTF9TUEVFRF9EVVBMRVggKEFE VkVSVElTRV8xMF9IQUxGICB8ICBBRFZFUlRJU0VfMTBfRlVMTCB8IFwKKwkJCQlBRFZFUlRJU0Vf MTAwX0hBTEYgfCAgQURWRVJUSVNFXzEwMF9GVUxMIHwgXAorCQkJCQkJICAgICAgQURWRVJUSVNF XzEwMDBfRlVMTCkKKyNkZWZpbmUgRTEwMDBfQUxMX05PVF9HSUcgICAgICAoQURWRVJUSVNFXzEw X0hBTEYgIHwgIEFEVkVSVElTRV8xMF9GVUxMIHwgXAorCQkJCUFEVkVSVElTRV8xMDBfSEFMRiB8 ICBBRFZFUlRJU0VfMTAwX0ZVTEwpCisjZGVmaW5lIEUxMDAwX0FMTF8xMDBfU1BFRUQgICAgKEFE VkVSVElTRV8xMDBfSEFMRiB8ICBBRFZFUlRJU0VfMTAwX0ZVTEwpCisjZGVmaW5lIEUxMDAwX0FM TF8xMF9TUEVFRCAgICAgKEFEVkVSVElTRV8xMF9IQUxGICB8ICBBRFZFUlRJU0VfMTBfRlVMTCkK KyNkZWZpbmUgRTEwMDBfQUxMX0ZVTExfRFVQTEVYICAoQURWRVJUSVNFXzEwX0ZVTEwgIHwgIEFE VkVSVElTRV8xMDBfRlVMTCB8IFwKKwkJCQkJCSAgICAgIEFEVkVSVElTRV8xMDAwX0ZVTEwpCisj ZGVmaW5lIEUxMDAwX0FMTF9IQUxGX0RVUExFWCAgKEFEVkVSVElTRV8xMF9IQUxGICB8ICBBRFZF UlRJU0VfMTAwX0hBTEYpCisKKyNkZWZpbmUgQVVUT05FR19BRFZFUlRJU0VfU1BFRURfREVGQVVM VCAgIEUxMDAwX0FMTF9TUEVFRF9EVVBMRVgKKworLyogTEVEIENvbnRyb2wgKi8KKyNkZWZpbmUg RTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9NQVNLICAgICAgIDB4MDAwMDAwMEYKKyNkZWZpbmUgRTEw MDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCAgICAgIDAKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xF RDBfSVZSVCAgICAgICAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRTEwMDBfTEVEQ1RMX0xFRDBf QkxJTksgICAgICAgICAgIDB4MDAwMDAwODAKKworI2RlZmluZSBFMTAwMF9MRURDVExfTU9ERV9M RURfT04gICAgICAgIDB4RQorI2RlZmluZSBFMTAwMF9MRURDVExfTU9ERV9MRURfT0ZGICAgICAg IDB4RgorCisvKiBUcmFuc21pdCBEZXNjcmlwdG9yIGJpdCBkZWZpbml0aW9ucyAqLworI2RlZmlu ZSBFMTAwMF9UWERfUE9QVFNfSVhTTSAweDAxICAgICAgIC8qIEluc2VydCBJUCBjaGVja3N1bSAq LworI2RlZmluZSBFMTAwMF9UWERfUE9QVFNfVFhTTSAweDAyICAgICAgIC8qIEluc2VydCBUQ1Av VURQIGNoZWNrc3VtICovCisjZGVmaW5lIEUxMDAwX1RYRF9DTURfRU9QICAgIDB4MDEwMDAwMDAg LyogRW5kIG9mIFBhY2tldCAqLworI2RlZmluZSBFMTAwMF9UWERfQ01EX0lGQ1MgICAweDAyMDAw MDAwIC8qIEluc2VydCBGQ1MgKEV0aGVybmV0IENSQykgKi8KKyNkZWZpbmUgRTEwMDBfVFhEX0NN RF9SUyAgICAgMHgwODAwMDAwMCAvKiBSZXBvcnQgU3RhdHVzICovCisjZGVmaW5lIEUxMDAwX1RY RF9DTURfREVYVCAgIDB4MjAwMDAwMDAgLyogRGVzY3JpcHRvciBleHRlbnNpb24gKDAgPSBsZWdh Y3kpICovCisvKiBFeHRlbmRlZCBkZXNjIGJpdHMgZm9yIExpbmtzZWMgYW5kIHRpbWVzeW5jICov CisKKy8qIFRyYW5zbWl0IENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9FTiAgICAgMHgw MDAwMDAwMiAgICAvKiBlbmFibGUgdHggKi8KKyNkZWZpbmUgRTEwMDBfVENUTF9QU1AgICAgMHgw MDAwMDAwOCAgICAvKiBwYWQgc2hvcnQgcGFja2V0cyAqLworI2RlZmluZSBFMTAwMF9UQ1RMX0NU ICAgICAweDAwMDAwZmYwICAgIC8qIGNvbGxpc2lvbiB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEw MDBfVENUTF9DT0xEICAgMHgwMDNmZjAwMCAgICAvKiBjb2xsaXNpb24gZGlzdGFuY2UgKi8KKyNk ZWZpbmUgRTEwMDBfVENUTF9SVExDICAgMHgwMTAwMDAwMCAgICAvKiBSZS10cmFuc21pdCBvbiBs YXRlIGNvbGxpc2lvbiAqLworCisvKiBUcmFuc21pdCBBcmJpdHJhdGlvbiBDb3VudCAqLworCisv KiBTZXJEZXMgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9TQ1RMX0RJU0FCTEVfU0VSREVTX0xP T1BCQUNLIDB4MDQwMAorCisvKiBSZWNlaXZlIENoZWNrc3VtIENvbnRyb2wgKi8KKyNkZWZpbmUg RTEwMDBfUlhDU1VNX1RVT0ZMICAgICAweDAwMDAwMjAwICAgLyogVENQIC8gVURQIGNoZWNrc3Vt IG9mZmxvYWQgKi8KKyNkZWZpbmUgRTEwMDBfUlhDU1VNX0lQUENTRSAgICAweDAwMDAxMDAwICAg LyogSVAgcGF5bG9hZCBjaGVja3N1bSBlbmFibGUgKi8KKyNkZWZpbmUgRTEwMDBfUlhDU1VNX1BD U0QgICAgICAweDAwMDAyMDAwICAgLyogcGFja2V0IGNoZWNrc3VtIGRpc2FibGVkICovCisKKy8q IEhlYWRlciBzcGxpdCByZWNlaXZlICovCisjZGVmaW5lIEUxMDAwX1JGQ1RMX0xFRiAgICAgICAg MHgwMDA0MDAwMAorCisvKiBDb2xsaXNpb24gcmVsYXRlZCBjb25maWd1cmF0aW9uIHBhcmFtZXRl cnMgKi8KKyNkZWZpbmUgRTEwMDBfQ09MTElTSU9OX1RIUkVTSE9MRCAgICAgICAxNQorI2RlZmlu ZSBFMTAwMF9DVF9TSElGVCAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgRTEwMDBfQ09MTElT SU9OX0RJU1RBTkNFICAgICAgICA2MworI2RlZmluZSBFMTAwMF9DT0xEX1NISUZUICAgICAgICAg ICAgICAgIDEyCisKKy8qIEV0aGVydHlwZSBmaWVsZCB2YWx1ZXMgKi8KKyNkZWZpbmUgRVRIRVJO RVRfSUVFRV9WTEFOX1RZUEUgMHg4MTAwICAvKiA4MDIuM2FjIHBhY2tldCAqLworCisjZGVmaW5l IE1BWF9KVU1CT19GUkFNRV9TSVpFICAgIDB4M0YwMAorCisvKiBFeHRlbmRlZCBDb25maWd1cmF0 aW9uIENvbnRyb2wgYW5kIFNpemUgKi8KKyNkZWZpbmUgRTEwMDBfUEhZX0NUUkxfR0JFX0RJU0FC TEUgICAgICAgIDB4MDAwMDAwNDAKKworLyogUEJBIGNvbnN0YW50cyAqLworI2RlZmluZSBFMTAw MF9QQkFfMTZLIDB4MDAxMCAgICAvKiAxNktCLCBkZWZhdWx0IFRYIGFsbG9jYXRpb24gKi8KKyNk ZWZpbmUgRTEwMDBfUEJBXzI0SyAweDAwMTgKKyNkZWZpbmUgRTEwMDBfUEJBXzM0SyAweDAwMjIK KyNkZWZpbmUgRTEwMDBfUEJBXzY0SyAweDAwNDAgICAgLyogNjRLQiAqLworCisjZGVmaW5lIElG U19NQVggICAgICAgODAKKyNkZWZpbmUgSUZTX01JTiAgICAgICA0MAorI2RlZmluZSBJRlNfUkFU SU8gICAgIDQKKyNkZWZpbmUgSUZTX1NURVAgICAgICAxMAorI2RlZmluZSBNSU5fTlVNX1hNSVRT IDEwMDAKKworLyogU1cgU2VtYXBob3JlIFJlZ2lzdGVyICovCisjZGVmaW5lIEUxMDAwX1NXU01f U01CSSAgICAgICAgIDB4MDAwMDAwMDEgLyogRHJpdmVyIFNlbWFwaG9yZSBiaXQgKi8KKyNkZWZp bmUgRTEwMDBfU1dTTV9TV0VTTUJJICAgICAgMHgwMDAwMDAwMiAvKiBGVyBTZW1hcGhvcmUgYml0 ICovCisKKy8qIEludGVycnVwdCBDYXVzZSBSZWFkICovCisjZGVmaW5lIEUxMDAwX0lDUl9UWERX ICAgICAgICAgIDB4MDAwMDAwMDEgLyogVHJhbnNtaXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KKyNk ZWZpbmUgRTEwMDBfSUNSX1RYUUUgICAgICAgICAgMHgwMDAwMDAwMiAvKiBUcmFuc21pdCBRdWV1 ZSBlbXB0eSAqLworI2RlZmluZSBFMTAwMF9JQ1JfTFNDICAgICAgICAgICAweDAwMDAwMDA0IC8q IExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9JQ1JfUlhTRVEgICAgICAgICAw eDAwMDAwMDA4IC8qIHJ4IHNlcXVlbmNlIGVycm9yICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWERN VDAgICAgICAgIDB4MDAwMDAwMTAgLyogcnggZGVzYyBtaW4uIHRocmVzaG9sZCAoMCkgKi8KKyNk ZWZpbmUgRTEwMDBfSUNSX1JYTyAgICAgICAgICAgMHgwMDAwMDA0MCAvKiByeCBvdmVycnVuICov CisjZGVmaW5lIEUxMDAwX0lDUl9SWFQwICAgICAgICAgIDB4MDAwMDAwODAgLyogcnggdGltZXIg aW50ciAocmluZyAwKSAqLworI2RlZmluZSBFMTAwMF9JQ1JfTURBQyAgICAgICAgICAweDAwMDAw MjAwIC8qIE1ESU8gYWNjZXNzIGNvbXBsZXRlICovCisjZGVmaW5lIEUxMDAwX0lDUl9SWENGRyAg ICAgICAgIDB4MDAwMDA0MDAgLyogUnggL2MvIG9yZGVyZWQgc2V0ICovCisjZGVmaW5lIEUxMDAw X0lDUl9HUElfRU4wICAgICAgIDB4MDAwMDA4MDAgLyogR1AgSW50IDAgKi8KKyNkZWZpbmUgRTEw MDBfSUNSX0dQSV9FTjEgICAgICAgMHgwMDAwMTAwMCAvKiBHUCBJbnQgMSAqLworI2RlZmluZSBF MTAwMF9JQ1JfR1BJX0VOMiAgICAgICAweDAwMDAyMDAwIC8qIEdQIEludCAyICovCisjZGVmaW5l IEUxMDAwX0lDUl9HUElfRU4zICAgICAgIDB4MDAwMDQwMDAgLyogR1AgSW50IDMgKi8KKyNkZWZp bmUgRTEwMDBfSUNSX1RYRF9MT1cgICAgICAgMHgwMDAwODAwMAorI2RlZmluZSBFMTAwMF9JQ1Jf U1JQRCAgICAgICAgICAweDAwMDEwMDAwCisjZGVmaW5lIEUxMDAwX0lDUl9BQ0sgICAgICAgICAg IDB4MDAwMjAwMDAgLyogUmVjZWl2ZSBBY2sgZnJhbWUgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX01O RyAgICAgICAgICAgMHgwMDA0MDAwMCAvKiBNYW5hZ2VhYmlsaXR5IGV2ZW50ICovCisjZGVmaW5l IEUxMDAwX0lDUl9ET0NLICAgICAgICAgIDB4MDAwODAwMDAgLyogRG9jay9VbmRvY2sgKi8KKy8q IElmIHRoaXMgYml0IGFzc2VydGVkLCB0aGUgZHJpdmVyIHNob3VsZCBjbGFpbSB0aGUgaW50ZXJy dXB0ICovCisjZGVmaW5lIEUxMDAwX0lDUl9JTlRfQVNTRVJURUQgIDB4ODAwMDAwMDAKKy8qIHF1 ZXVlIDAgUnggZGVzY3JpcHRvciBGSUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9J Q1JfUlhEX0ZJRk9fUEFSMCAweDAwMTAwMDAwCisvKiBxdWV1ZSAwIFR4IGRlc2NyaXB0b3IgRklG TyBwYXJpdHkgZXJyb3IgKi8KKyNkZWZpbmUgRTEwMDBfSUNSX1RYRF9GSUZPX1BBUjAgMHgwMDIw MDAwMAorLyogaG9zdCBhcmIgcmVhZCBidWZmZXIgcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUx MDAwX0lDUl9IT1NUX0FSQl9QQVIgIDB4MDA0MDAwMDAKKyNkZWZpbmUgRTEwMDBfSUNSX1BCX1BB UiAgICAgICAgMHgwMDgwMDAwMCAvKiBwYWNrZXQgYnVmZmVyIHBhcml0eSBlcnJvciAqLworLyog cXVldWUgMSBSeCBkZXNjcmlwdG9yIEZJRk8gcGFyaXR5IGVycm9yICovCisjZGVmaW5lIEUxMDAw X0lDUl9SWERfRklGT19QQVIxIDB4MDEwMDAwMDAKKy8qIHF1ZXVlIDEgVHggZGVzY3JpcHRvciBG SUZPIHBhcml0eSBlcnJvciAqLworI2RlZmluZSBFMTAwMF9JQ1JfVFhEX0ZJRk9fUEFSMSAweDAy MDAwMDAwCisvKiBGVyBjaGFuZ2VkIHRoZSBzdGF0dXMgb2YgRElTU1cgYml0IGluIHRoZSBGV1NN ICovCisjZGVmaW5lIEUxMDAwX0lDUl9EU1cgICAgICAgICAgIDB4MDAwMDAwMjAKKy8qIExBTiBj b25uZWN0ZWQgZGV2aWNlIGdlbmVyYXRlcyBhbiBpbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRTEwMDBf SUNSX1BIWUlOVCAgICAgICAgMHgwMDAwMTAwMAorI2RlZmluZSBFMTAwMF9JQ1JfRVBSU1QgICAg ICAgICAweDAwMTAwMDAwIC8qIE1FIGhhbmR3YXJlIHJlc2V0IG9jY3VycyAqLworCisvKiBFeHRl bmRlZCBJbnRlcnJ1cHQgQ2F1c2UgUmVhZCAqLworI2RlZmluZSBFMTAwMF9FSUNSX1JYX1FVRVVF MCAgICAweDAwMDAwMDAxIC8qIFJ4IFF1ZXVlIDAgSW50ZXJydXB0ICovCisjZGVmaW5lIEUxMDAw X0VJQ1JfUlhfUVVFVUUxICAgIDB4MDAwMDAwMDIgLyogUnggUXVldWUgMSBJbnRlcnJ1cHQgKi8K KyNkZWZpbmUgRTEwMDBfRUlDUl9SWF9RVUVVRTIgICAgMHgwMDAwMDAwNCAvKiBSeCBRdWV1ZSAy IEludGVycnVwdCAqLworI2RlZmluZSBFMTAwMF9FSUNSX1JYX1FVRVVFMyAgICAweDAwMDAwMDA4 IC8qIFJ4IFF1ZXVlIDMgSW50ZXJydXB0ICovCisjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUw ICAgIDB4MDAwMDAxMDAgLyogVHggUXVldWUgMCBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRTEwMDBf RUlDUl9UWF9RVUVVRTEgICAgMHgwMDAwMDIwMCAvKiBUeCBRdWV1ZSAxIEludGVycnVwdCAqLwor I2RlZmluZSBFMTAwMF9FSUNSX1RYX1FVRVVFMiAgICAweDAwMDAwNDAwIC8qIFR4IFF1ZXVlIDIg SW50ZXJydXB0ICovCisjZGVmaW5lIEUxMDAwX0VJQ1JfVFhfUVVFVUUzICAgIDB4MDAwMDA4MDAg LyogVHggUXVldWUgMyBJbnRlcnJ1cHQgKi8KKyNkZWZpbmUgRTEwMDBfRUlDUl9UQ1BfVElNRVIg ICAgMHg0MDAwMDAwMCAvKiBUQ1AgVGltZXIgKi8KKyNkZWZpbmUgRTEwMDBfRUlDUl9PVEhFUiAg ICAgICAgMHg4MDAwMDAwMCAvKiBJbnRlcnJ1cHQgQ2F1c2UgQWN0aXZlICovCisvKiBUQ1AgVGlt ZXIgKi8KKworLyoKKyAqIFRoaXMgZGVmaW5lcyB0aGUgYml0cyB0aGF0IGFyZSBzZXQgaW4gdGhl IEludGVycnVwdCBNYXNrCisgKiBTZXQvUmVhZCBSZWdpc3Rlci4gIEVhY2ggYml0IGlzIGRvY3Vt ZW50ZWQgYmVsb3c6CisgKiAgIG8gUlhUMCAgID0gUmVjZWl2ZXIgVGltZXIgSW50ZXJydXB0IChy aW5nIDApCisgKiAgIG8gVFhEVyAgID0gVHJhbnNtaXQgRGVzY3JpcHRvciBXcml0dGVuIEJhY2sK KyAqICAgbyBSWERNVDAgPSBSZWNlaXZlIERlc2NyaXB0b3IgTWluaW11bSBUaHJlc2hvbGQgaGl0 IChyaW5nIDApCisgKiAgIG8gUlhTRVEgID0gUmVjZWl2ZSBTZXF1ZW5jZSBFcnJvcgorICogICBv IExTQyAgICA9IExpbmsgU3RhdHVzIENoYW5nZQorICovCisjZGVmaW5lIElNU19FTkFCTEVfTUFT SyAoIFwKKyAgICBFMTAwMF9JTVNfUlhUMCAgIHwgICAgXAorICAgIEUxMDAwX0lNU19UWERXICAg fCAgICBcCisgICAgRTEwMDBfSU1TX1JYRE1UMCB8ICAgIFwKKyAgICBFMTAwMF9JTVNfUlhTRVEg IHwgICAgXAorICAgIEUxMDAwX0lNU19MU0MpCisKKy8qIEludGVycnVwdCBNYXNrIFNldCAqLwor I2RlZmluZSBFMTAwMF9JTVNfVFhEVyAgICAgIEUxMDAwX0lDUl9UWERXICAgICAgLyogVHJhbnNt aXQgZGVzYyB3cml0dGVuIGJhY2sgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX0xTQyAgICAgICBFMTAw MF9JQ1JfTFNDICAgICAgIC8qIExpbmsgU3RhdHVzIENoYW5nZSAqLworI2RlZmluZSBFMTAwMF9J TVNfUlhTRVEgICAgIEUxMDAwX0lDUl9SWFNFUSAgICAgLyogcnggc2VxdWVuY2UgZXJyb3IgKi8K KyNkZWZpbmUgRTEwMDBfSU1TX1JYRE1UMCAgICBFMTAwMF9JQ1JfUlhETVQwICAgIC8qIHJ4IGRl c2MgbWluLiB0aHJlc2hvbGQgKi8KKyNkZWZpbmUgRTEwMDBfSU1TX1JYVDAgICAgICBFMTAwMF9J Q1JfUlhUMCAgICAgIC8qIHJ4IHRpbWVyIGludHIgKi8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0 IE1hc2sgU2V0ICovCisjZGVmaW5lIEUxMDAwX0VJTVNfVENQX1RJTUVSICAgIEUxMDAwX0VJQ1Jf VENQX1RJTUVSIC8qIFRDUCBUaW1lciAqLworI2RlZmluZSBFMTAwMF9FSU1TX09USEVSICAgICAg ICBFMTAwMF9FSUNSX09USEVSICAgLyogSW50ZXJydXB0IENhdXNlIEFjdGl2ZSAqLworCisvKiBJ bnRlcnJ1cHQgQ2F1c2UgU2V0ICovCisjZGVmaW5lIEUxMDAwX0lDU19MU0MgICAgICAgRTEwMDBf SUNSX0xTQyAgICAgICAvKiBMaW5rIFN0YXR1cyBDaGFuZ2UgKi8KKyNkZWZpbmUgRTEwMDBfSUNT X1JYRE1UMCAgICBFMTAwMF9JQ1JfUlhETVQwICAgIC8qIHJ4IGRlc2MgbWluLiB0aHJlc2hvbGQg Ki8KKworLyogRXh0ZW5kZWQgSW50ZXJydXB0IENhdXNlIFNldCAqLworCisvKiBUcmFuc21pdCBE ZXNjcmlwdG9yIENvbnRyb2wgKi8KKy8qIEVuYWJsZSB0aGUgY291bnRpbmcgb2YgZGVzY3JpcHRv cnMgc3RpbGwgdG8gYmUgcHJvY2Vzc2VkLiAqLworCisvKiBGbG93IENvbnRyb2wgQ29uc3RhbnRz ICovCisjZGVmaW5lIEZMT1dfQ09OVFJPTF9BRERSRVNTX0xPVyAgMHgwMEMyODAwMQorI2RlZmlu ZSBGTE9XX0NPTlRST0xfQUREUkVTU19ISUdIIDB4MDAwMDAxMDAKKyNkZWZpbmUgRkxPV19DT05U Uk9MX1RZUEUgICAgICAgICAweDg4MDgKKworLyogODAyLjFxIFZMQU4gUGFja2V0IFNpemUgKi8K KyNkZWZpbmUgVkxBTl9UQUdfU0laRSAgICAgICAgICAgICAgNCAgICAvKiA4MDIuM2FjIHRhZyAo bm90IERNQSdkKSAqLworI2RlZmluZSBFMTAwMF9WTEFOX0ZJTFRFUl9UQkxfU0laRSAxMjggIC8q IFZMQU4gRmlsdGVyIFRhYmxlICg0MDk2IGJpdHMpICovCisKKy8qIFJlY2VpdmUgQWRkcmVzcyAq LworLyoKKyAqIE51bWJlciBvZiBoaWdoL2xvdyByZWdpc3RlciBwYWlycyBpbiB0aGUgUkFSLiBU aGUgUkFSIChSZWNlaXZlIEFkZHJlc3MKKyAqIFJlZ2lzdGVycykgaG9sZHMgdGhlIGRpcmVjdGVk IGFuZCBtdWx0aWNhc3QgYWRkcmVzc2VzIHRoYXQgd2UgbW9uaXRvci4KKyAqIFRlY2huaWNhbGx5 LCB3ZSBoYXZlIDE2IHNwb3RzLiAgSG93ZXZlciwgd2UgcmVzZXJ2ZSBvbmUgb2YgdGhlc2Ugc3Bv dHMKKyAqIChSQVJbMTVdKSBmb3Igb3VyIGRpcmVjdGVkIGFkZHJlc3MgdXNlZCBieSBjb250cm9s bGVycyB3aXRoCisgKiBtYW5hZ2VhYmlsaXR5IGVuYWJsZWQsIGFsbG93aW5nIHVzIHJvb20gZm9y IDE1IG11bHRpY2FzdCBhZGRyZXNzZXMuCisgKi8KKyNkZWZpbmUgRTEwMDBfUkFIX0FWICAweDgw MDAwMDAwICAgICAgICAvKiBSZWNlaXZlIGRlc2NyaXB0b3IgdmFsaWQgKi8KKworLyogRXJyb3Ig Q29kZXMgKi8KKyNkZWZpbmUgRTEwMDBfRVJSX05WTSAgICAgIDEKKyNkZWZpbmUgRTEwMDBfRVJS X1BIWSAgICAgIDIKKyNkZWZpbmUgRTEwMDBfRVJSX0NPTkZJRyAgIDMKKyNkZWZpbmUgRTEwMDBf RVJSX1BBUkFNICAgIDQKKyNkZWZpbmUgRTEwMDBfRVJSX01BQ19JTklUIDUKKyNkZWZpbmUgRTEw MDBfRVJSX1JFU0VUICAgOQorI2RlZmluZSBFMTAwMF9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJ TkcgMTAKKyNkZWZpbmUgRTEwMDBfRVJSX0hPU1RfSU5URVJGQUNFX0NPTU1BTkQgMTEKKyNkZWZp bmUgRTEwMDBfQkxLX1BIWV9SRVNFVCAgIDEyCisjZGVmaW5lIEUxMDAwX0VSUl9TV0ZXX1NZTkMg MTMKKyNkZWZpbmUgRTEwMDBfTk9UX0lNUExFTUVOVEVEIDE0CisKKy8qIExvb3AgbGltaXQgb24g aG93IGxvbmcgd2Ugd2FpdCBmb3IgYXV0by1uZWdvdGlhdGlvbiB0byBjb21wbGV0ZSAqLworI2Rl ZmluZSBDT1BQRVJfTElOS19VUF9MSU1JVCAgICAgICAgICAgICAgMTAKKyNkZWZpbmUgUEhZX0FV VE9fTkVHX0xJTUlUICAgICAgICAgICAgICAgIDQ1CisjZGVmaW5lIFBIWV9GT1JDRV9MSU1JVCAg ICAgICAgICAgICAgICAgICAyMAorLyogTnVtYmVyIG9mIDEwMCBtaWNyb3NlY29uZHMgd2Ugd2Fp dCBmb3IgUENJIEV4cHJlc3MgbWFzdGVyIGRpc2FibGUgKi8KKyNkZWZpbmUgTUFTVEVSX0RJU0FC TEVfVElNRU9VVCAgICAgIDgwMAorLyogTnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB3ZSB3YWl0IGZv ciBQSFkgY29uZmlndXJhdGlvbiBkb25lIGFmdGVyIE1BQyByZXNldCAqLworI2RlZmluZSBQSFlf Q0ZHX1RJTUVPVVQgICAgICAgICAgICAgMTAwCisvKiBOdW1iZXIgb2YgMiBtaWxsaXNlY29uZHMg d2Ugd2FpdCBmb3IgYWNxdWlyaW5nIE1ESU8gb3duZXJzaGlwLiAqLworLyogTnVtYmVyIG9mIG1p bGxpc2Vjb25kcyBmb3IgTlZNIGF1dG8gcmVhZCBkb25lIGFmdGVyIE1BQyByZXNldC4gKi8KKyNk ZWZpbmUgQVVUT19SRUFEX0RPTkVfVElNRU9VVCAgICAgIDEwCisKKy8qIEZsb3cgQ29udHJvbCAq LworI2RlZmluZSBFMTAwMF9GQ1JUTF9YT05FIDB4ODAwMDAwMDAgICAgIC8qIEVuYWJsZSBYT04g ZnJhbWUgdHJhbnNtaXNzaW9uICovCisKKy8qIFRyYW5zbWl0IENvbmZpZ3VyYXRpb24gV29yZCAq LworI2RlZmluZSBFMTAwMF9UWENXX0FORSAgICAgICAgMHg4MDAwMDAwMCAgICAgICAgLyogQXV0 by1uZWcgZW5hYmxlICovCisKKy8qIFJlY2VpdmUgQ29uZmlndXJhdGlvbiBXb3JkICovCisKKy8q IFBDSSBFeHByZXNzIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAg ICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEUxMDAwX0dDUl9SWERTQ1dfTk9fU05PT1AgICAg ICAgMHgwMDAwMDAwMgorI2RlZmluZSBFMTAwMF9HQ1JfUlhEU0NSX05PX1NOT09QICAgICAgIDB4 MDAwMDAwMDQKKyNkZWZpbmUgRTEwMDBfR0NSX1RYRF9OT19TTk9PUCAgICAgICAgICAweDAwMDAw MDA4CisjZGVmaW5lIEUxMDAwX0dDUl9UWERTQ1dfTk9fU05PT1AgICAgICAgMHgwMDAwMDAxMAor I2RlZmluZSBFMTAwMF9HQ1JfVFhEU0NSX05PX1NOT09QICAgICAgIDB4MDAwMDAwMjAKKworI2Rl ZmluZSBQQ0lFX05PX1NOT09QX0FMTCAoRTEwMDBfR0NSX1JYRF9OT19TTk9PUCAgICAgICAgIHwg XAorCQkJICAgRTEwMDBfR0NSX1JYRFNDV19OT19TTk9PUCAgICAgIHwgXAorCQkJICAgRTEwMDBf R0NSX1JYRFNDUl9OT19TTk9PUCAgICAgIHwgXAorCQkJICAgRTEwMDBfR0NSX1RYRF9OT19TTk9P UCAgICAgICAgIHwgXAorCQkJICAgRTEwMDBfR0NSX1RYRFNDV19OT19TTk9PUCAgICAgIHwgXAor CQkJICAgRTEwMDBfR0NSX1RYRFNDUl9OT19TTk9PUCkKKworLyogUEhZIENvbnRyb2wgUmVnaXN0 ZXIgKi8KKyNkZWZpbmUgTUlJX0NSX0ZVTExfRFVQTEVYICAgICAgMHgwMTAwICAvKiBGRFggPTEs IGhhbGYgZHVwbGV4ID0wICovCisjZGVmaW5lIE1JSV9DUl9SRVNUQVJUX0FVVE9fTkVHIDB4MDIw MCAgLyogUmVzdGFydCBhdXRvIG5lZ290aWF0aW9uICovCisjZGVmaW5lIE1JSV9DUl9QT1dFUl9E T1dOICAgICAgIDB4MDgwMCAgLyogUG93ZXIgZG93biAqLworI2RlZmluZSBNSUlfQ1JfQVVUT19O RUdfRU4gICAgICAweDEwMDAgIC8qIEF1dG8gTmVnIEVuYWJsZSAqLworI2RlZmluZSBNSUlfQ1Jf TE9PUEJBQ0sgICAgICAgICAweDQwMDAgIC8qIDAgPSBub3JtYWwsIDEgPSBsb29wYmFjayAqLwor I2RlZmluZSBNSUlfQ1JfUkVTRVQgICAgICAgICAgICAweDgwMDAgIC8qIDAgPSBub3JtYWwsIDEg PSBQSFkgcmVzZXQgKi8KKyNkZWZpbmUgTUlJX0NSX1NQRUVEXzEwMDAgICAgICAgMHgwMDQwCisj ZGVmaW5lIE1JSV9DUl9TUEVFRF8xMDAgICAgICAgIDB4MjAwMAorI2RlZmluZSBNSUlfQ1JfU1BF RURfMTAgICAgICAgICAweDAwMDAKKworLyogUEhZIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmlu ZSBNSUlfU1JfTElOS19TVEFUVVMgICAgICAgMHgwMDA0IC8qIExpbmsgU3RhdHVzIDEgPSBsaW5r ICovCisjZGVmaW5lIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFICAweDAwMjAgLyogQXV0byBOZWcg Q29tcGxldGUgKi8KKworLyogQXV0b25lZyBBZHZlcnRpc2VtZW50IFJlZ2lzdGVyICovCisjZGVm aW5lIE5XQVlfQVJfMTBUX0hEX0NBUFMgICAgICAweDAwMjAgICAvKiAxMFQgICBIYWxmIER1cGxl eCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfQVJfMTBUX0ZEX0NBUFMgICAgICAweDAwNDAgICAv KiAxMFQgICBGdWxsIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5lIE5XQVlfQVJfMTAwVFhfSERf Q0FQUyAgICAweDAwODAgICAvKiAxMDBUWCBIYWxmIER1cGxleCBDYXBhYmxlICovCisjZGVmaW5l IE5XQVlfQVJfMTAwVFhfRkRfQ0FQUyAgICAweDAxMDAgICAvKiAxMDBUWCBGdWxsIER1cGxleCBD YXBhYmxlICovCisjZGVmaW5lIE5XQVlfQVJfUEFVU0UgICAgICAgICAgICAweDA0MDAgICAvKiBQ YXVzZSBvcGVyYXRpb24gZGVzaXJlZCAqLworI2RlZmluZSBOV0FZX0FSX0FTTV9ESVIgICAgICAg ICAgMHgwODAwICAgLyogQXN5bW1ldHJpYyBQYXVzZSBEaXJlY3Rpb24gYml0ICovCisKKy8qIExp bmsgUGFydG5lciBBYmlsaXR5IFJlZ2lzdGVyIChCYXNlIFBhZ2UpICovCisjZGVmaW5lIE5XQVlf TFBBUl9QQVVTRSAgICAgICAgICAweDA0MDAgLyogTFAgUGF1c2Ugb3BlcmF0aW9uIGRlc2lyZWQg Ki8KKyNkZWZpbmUgTldBWV9MUEFSX0FTTV9ESVIgICAgICAgIDB4MDgwMCAvKiBMUCBBc3ltbWV0 cmljIFBhdXNlIERpcmVjdGlvbiBiaXQgKi8KKworLyogQXV0b25lZyBFeHBhbnNpb24gUmVnaXN0 ZXIgKi8KKworLyogMTAwMEJBU0UtVCBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIENSXzEw MDBUX0hEX0NBUFMgICAgICAgICAweDAxMDAgLyogQWR2ZXJ0aXNlIDEwMDBUIEhEIGNhcGFiaWxp dHkgKi8KKyNkZWZpbmUgQ1JfMTAwMFRfRkRfQ0FQUyAgICAgICAgIDB4MDIwMCAvKiBBZHZlcnRp c2UgMTAwMFQgRkQgY2FwYWJpbGl0eSAgKi8KKyNkZWZpbmUgQ1JfMTAwMFRfTVNfVkFMVUUgICAg ICAgIDB4MDgwMCAvKiAxPUNvbmZpZ3VyZSBQSFkgYXMgTWFzdGVyICovCisJCQkJCS8qIDA9Q29u ZmlndXJlIFBIWSBhcyBTbGF2ZSAqLworI2RlZmluZSBDUl8xMDAwVF9NU19FTkFCTEUgICAgICAg MHgxMDAwIC8qIDE9TWFzdGVyL1NsYXZlIG1hbnVhbCBjb25maWcgdmFsdWUgKi8KKwkJCQkJLyog MD1BdXRvbWF0aWMgTWFzdGVyL1NsYXZlIGNvbmZpZyAqLworCisvKiAxMDAwQkFTRS1UIFN0YXR1 cyBSZWdpc3RlciAqLworI2RlZmluZSBTUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTIDB4MTAwMCAv KiBSZW1vdGUgcmVjZWl2ZXIgT0sgKi8KKyNkZWZpbmUgU1JfMTAwMFRfTE9DQUxfUlhfU1RBVFVT ICAweDIwMDAgLyogTG9jYWwgcmVjZWl2ZXIgT0sgKi8KKworCisvKiBQSFkgMTAwMCBNSUkgUmVn aXN0ZXIvQml0IERlZmluaXRpb25zICovCisvKiBQSFkgUmVnaXN0ZXJzIGRlZmluZWQgYnkgSUVF RSAqLworI2RlZmluZSBQSFlfQ09OVFJPTCAgICAgIDB4MDAgLyogQ29udHJvbCBSZWdpc3RlciAq LworI2RlZmluZSBQSFlfU1RBVFVTICAgICAgIDB4MDEgLyogU3RhdHVzIFJlZ2lzdGVyICovCisj ZGVmaW5lIFBIWV9JRDEgICAgICAgICAgMHgwMiAvKiBQaHkgSWQgUmVnICh3b3JkIDEpICovCisj ZGVmaW5lIFBIWV9JRDIgICAgICAgICAgMHgwMyAvKiBQaHkgSWQgUmVnICh3b3JkIDIpICovCisj ZGVmaW5lIFBIWV9BVVRPTkVHX0FEViAgMHgwNCAvKiBBdXRvbmVnIEFkdmVydGlzZW1lbnQgKi8K KyNkZWZpbmUgUEhZX0xQX0FCSUxJVFkgICAweDA1IC8qIExpbmsgUGFydG5lciBBYmlsaXR5IChC YXNlIFBhZ2UpICovCisjZGVmaW5lIFBIWV8xMDAwVF9DVFJMICAgMHgwOSAvKiAxMDAwQmFzZS1U IENvbnRyb2wgUmVnICovCisjZGVmaW5lIFBIWV8xMDAwVF9TVEFUVVMgMHgwQSAvKiAxMDAwQmFz ZS1UIFN0YXR1cyBSZWcgKi8KKworLyogTlZNIENvbnRyb2wgKi8KKyNkZWZpbmUgRTEwMDBfRUVD RF9TSyAgICAgICAgMHgwMDAwMDAwMSAvKiBOVk0gQ2xvY2sgKi8KKyNkZWZpbmUgRTEwMDBfRUVD RF9DUyAgICAgICAgMHgwMDAwMDAwMiAvKiBOVk0gQ2hpcCBTZWxlY3QgKi8KKyNkZWZpbmUgRTEw MDBfRUVDRF9ESSAgICAgICAgMHgwMDAwMDAwNCAvKiBOVk0gRGF0YSBJbiAqLworI2RlZmluZSBF MTAwMF9FRUNEX0RPICAgICAgICAweDAwMDAwMDA4IC8qIE5WTSBEYXRhIE91dCAqLworI2RlZmlu ZSBFMTAwMF9FRUNEX1JFUSAgICAgICAweDAwMDAwMDQwIC8qIE5WTSBBY2Nlc3MgUmVxdWVzdCAq LworI2RlZmluZSBFMTAwMF9FRUNEX0dOVCAgICAgICAweDAwMDAwMDgwIC8qIE5WTSBBY2Nlc3Mg R3JhbnQgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9QUkVTICAgICAgMHgwMDAwMDEwMCAvKiBOVk0g UHJlc2VudCAqLworLyogTlZNIEFkZHJlc3NpbmcgYml0cyBiYXNlZCBvbiB0eXBlIDA9c21hbGws IDE9bGFyZ2UgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9BRERSX0JJVFMgMHgwMDAwMDQwMAorI2Rl ZmluZSBFMTAwMF9OVk1fR1JBTlRfQVRURU1QVFMgICAxMDAwIC8qIE5WTSAjIGF0dGVtcHRzIHRv IGdhaW4gZ3JhbnQgKi8KKyNkZWZpbmUgRTEwMDBfRUVDRF9BVVRPX1JEICAgICAgICAgIDB4MDAw MDAyMDAgIC8qIE5WTSBBdXRvIFJlYWQgZG9uZSAqLworI2RlZmluZSBFMTAwMF9FRUNEX1NJWkVf RVhfTUFTSyAgICAgMHgwMDAwNzgwMCAgLyogTlZNIFNpemUgKi8KKyNkZWZpbmUgRTEwMDBfRUVD RF9TSVpFX0VYX1NISUZUICAgICAxMQorCisvKiBPZmZzZXQgdG8gZGF0YSBpbiBOVk0gcmVhZC93 cml0ZSByZWdpc3RlcnMgKi8KKyNkZWZpbmUgRTEwMDBfTlZNX1JXX1JFR19EQVRBICAgMTYKKyNk ZWZpbmUgRTEwMDBfTlZNX1JXX1JFR19ET05FICAgMiAgICAvKiBPZmZzZXQgdG8gUkVBRC9XUklU RSBkb25lIGJpdCAqLworI2RlZmluZSBFMTAwMF9OVk1fUldfUkVHX1NUQVJUICAxICAgIC8qIFN0 YXJ0IG9wZXJhdGlvbiAqLworI2RlZmluZSBFMTAwMF9OVk1fUldfQUREUl9TSElGVCAyICAgIC8q IFNoaWZ0IHRvIHRoZSBhZGRyZXNzIGJpdHMgKi8KKyNkZWZpbmUgRTEwMDBfTlZNX1BPTExfUkVB RCAgICAgMCAgICAvKiBGbGFnIGZvciBwb2xsaW5nIGZvciByZWFkIGNvbXBsZXRlICovCisKKy8q IE5WTSBXb3JkIE9mZnNldHMgKi8KKyNkZWZpbmUgTlZNX0lEX0xFRF9TRVRUSU5HUyAgICAgICAg MHgwMDA0CisvKiBGb3IgU0VSREVTIG91dHB1dCBhbXBsaXR1ZGUgYWRqdXN0bWVudC4gKi8KKyNk ZWZpbmUgTlZNX0lOSVRfQ09OVFJPTDJfUkVHICAgICAgMHgwMDBGCisjZGVmaW5lIE5WTV9JTklU X0NPTlRST0wzX1BPUlRfQSAgIDB4MDAyNAorI2RlZmluZSBOVk1fQUxUX01BQ19BRERSX1BUUiAg ICAgICAweDAwMzcKKyNkZWZpbmUgTlZNX0NIRUNLU1VNX1JFRyAgICAgICAgICAgMHgwMDNGCisK KyNkZWZpbmUgRTEwMDBfTlZNX0NGR19ET05FX1BPUlRfMCAgMHg0MDAwMCAvKiBNTkcgY29uZmln IGN5Y2xlIGRvbmUgKi8KKyNkZWZpbmUgRTEwMDBfTlZNX0NGR19ET05FX1BPUlRfMSAgMHg4MDAw MCAvKiAuLi5mb3Igc2Vjb25kIHBvcnQgKi8KKworLyogTWFzayBiaXRzIGZvciBmaWVsZHMgaW4g V29yZCAweDBmIG9mIHRoZSBOVk0gKi8KKyNkZWZpbmUgTlZNX1dPUkQwRl9QQVVTRV9NQVNLICAg ICAgIDB4MzAwMAorI2RlZmluZSBOVk1fV09SRDBGX0FTTV9ESVIgICAgICAgICAgMHgyMDAwCisK Ky8qIE1hc2sgYml0cyBmb3IgZmllbGRzIGluIFdvcmQgMHgxYSBvZiB0aGUgTlZNICovCisKKy8q IEZvciBjaGVja3N1bW1pbmcsIHRoZSBzdW0gb2YgYWxsIHdvcmRzIGluIHRoZSBOVk0gc2hvdWxk IGVxdWFsIDB4QkFCQS4gKi8KKyNkZWZpbmUgTlZNX1NVTSAgICAgICAgICAgICAgICAgICAgMHhC QUJBCisKKyNkZWZpbmUgTlZNX1BCQV9PRkZTRVRfMCAgICAgICAgICAgOAorI2RlZmluZSBOVk1f UEJBX09GRlNFVF8xICAgICAgICAgICA5CisjZGVmaW5lIE5WTV9XT1JEX1NJWkVfQkFTRV9TSElG VCAgIDYKKworLyogTlZNIENvbW1hbmRzIC0gTWljcm93aXJlICovCisKKy8qIE5WTSBDb21tYW5k cyAtIFNQSSAqLworI2RlZmluZSBOVk1fTUFYX1JFVFJZX1NQSSAgICAgICAgICA1MDAwIC8qIE1h eCB3YWl0IG9mIDVtcywgZm9yIFJEWSBzaWduYWwgKi8KKyNkZWZpbmUgTlZNX1dSSVRFX09QQ09E RV9TUEkgICAgICAgMHgwMiAvKiBOVk0gd3JpdGUgb3Bjb2RlICovCisjZGVmaW5lIE5WTV9BOF9P UENPREVfU1BJICAgICAgICAgIDB4MDggLyogb3Bjb2RlIGJpdC0zID0gYWRkcmVzcyBiaXQtOCAq LworI2RlZmluZSBOVk1fV1JFTl9PUENPREVfU1BJICAgICAgICAweDA2IC8qIE5WTSBzZXQgV3Jp dGUgRW5hYmxlIGxhdGNoICovCisjZGVmaW5lIE5WTV9SRFNSX09QQ09ERV9TUEkgICAgICAgIDB4 MDUgLyogTlZNIHJlYWQgU3RhdHVzIHJlZ2lzdGVyICovCisKKy8qIFNQSSBOVk0gU3RhdHVzIFJl Z2lzdGVyICovCisjZGVmaW5lIE5WTV9TVEFUVVNfUkRZX1NQSSAgICAgICAgIDB4MDEKKworLyog V29yZCBkZWZpbml0aW9ucyBmb3IgSUQgTEVEIFNldHRpbmdzICovCisjZGVmaW5lIElEX0xFRF9S RVNFUlZFRF8wMDAwIDB4MDAwMAorI2RlZmluZSBJRF9MRURfUkVTRVJWRURfRkZGRiAweEZGRkYK KyNkZWZpbmUgSURfTEVEX0RFRkFVTFQgICAgICAgKChJRF9MRURfT0ZGMV9PTjIgIDw8IDEyKSB8 IFwKKwkJCSAgICAgIChJRF9MRURfT0ZGMV9PRkYyIDw8ICA4KSB8IFwKKwkJCSAgICAgIChJRF9M RURfREVGMV9ERUYyIDw8ICA0KSB8IFwKKwkJCSAgICAgIChJRF9MRURfREVGMV9ERUYyKSkKKyNk ZWZpbmUgSURfTEVEX0RFRjFfREVGMiAgICAgMHgxCisjZGVmaW5lIElEX0xFRF9ERUYxX09OMiAg ICAgIDB4MgorI2RlZmluZSBJRF9MRURfREVGMV9PRkYyICAgICAweDMKKyNkZWZpbmUgSURfTEVE X09OMV9ERUYyICAgICAgMHg0CisjZGVmaW5lIElEX0xFRF9PTjFfT04yICAgICAgIDB4NQorI2Rl ZmluZSBJRF9MRURfT04xX09GRjIgICAgICAweDYKKyNkZWZpbmUgSURfTEVEX09GRjFfREVGMiAg ICAgMHg3CisjZGVmaW5lIElEX0xFRF9PRkYxX09OMiAgICAgIDB4OAorI2RlZmluZSBJRF9MRURf T0ZGMV9PRkYyICAgICAweDkKKworI2RlZmluZSBJR1BfQUNUSVZJVFlfTEVEX01BU0sgICAweEZG RkZGMEZGCisjZGVmaW5lIElHUF9BQ1RJVklUWV9MRURfRU5BQkxFIDB4MDMwMAorI2RlZmluZSBJ R1BfTEVEM19NT0RFICAgICAgICAgICAweDA3MDAwMDAwCisKKy8qIFBDSS9QQ0ktWC9QQ0ktRVgg Q29uZmlnIHNwYWNlICovCisjZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9SRUdJU1RFUiAgICAgMHgw RQorI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTICAgICAgICAgICAgIDB4MTIKKworI2RlZmluZSBQ Q0lfSEVBREVSX1RZUEVfTVVMVElGVU5DICAgIDB4ODAKKyNkZWZpbmUgUENJRV9MSU5LX1dJRFRI X01BU0sgICAgICAgICAweDNGMAorI2RlZmluZSBQQ0lFX0xJTktfV0lEVEhfU0hJRlQgICAgICAg IDQKKworI2RlZmluZSBQSFlfUkVWSVNJT05fTUFTSyAgICAgIDB4RkZGRkZGRjAKKyNkZWZpbmUg TUFYX1BIWV9SRUdfQUREUkVTUyAgICAweDFGICAvKiA1IGJpdCBhZGRyZXNzIGJ1cyAoMC0weDFG KSAqLworI2RlZmluZSBNQVhfUEhZX01VTFRJX1BBR0VfUkVHIDB4RgorCisvKiBCaXQgZGVmaW5p dGlvbnMgZm9yIHZhbGlkIFBIWSBJRHMuICovCisvKgorICogSSA9IEludGVncmF0ZWQKKyAqIEUg PSBFeHRlcm5hbAorICovCisjZGVmaW5lIE04OEUxMTExX0lfUEhZX0lEICAgIDB4MDE0MTBDQzAK KyNkZWZpbmUgSUdQMDNFMTAwMF9FX1BIWV9JRCAgMHgwMkE4MDM5MAorI2RlZmluZSBNODhfVkVO RE9SICAgICAgICAgICAweDAxNDEKKworLyogTTg4RTEwMDAgU3BlY2lmaWMgUmVnaXN0ZXJzICov CisjZGVmaW5lIE04OEUxMDAwX1BIWV9TUEVDX0NUUkwgICAgIDB4MTAgIC8qIFBIWSBTcGVjaWZp YyBDb250cm9sIFJlZ2lzdGVyICovCisjZGVmaW5lIE04OEUxMDAwX1BIWV9TUEVDX1NUQVRVUyAg IDB4MTEgIC8qIFBIWSBTcGVjaWZpYyBTdGF0dXMgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTTg4RTEw MDBfRVhUX1BIWV9TUEVDX0NUUkwgMHgxNCAgLyogRXh0ZW5kZWQgUEhZIFNwZWNpZmljIENvbnRy b2wgKi8KKworI2RlZmluZSBNODhFMTAwMF9QSFlfUEFHRV9TRUxFQ1QgICAweDFEICAvKiBSZWcg MjkgZm9yIHBhZ2UgbnVtYmVyIHNldHRpbmcgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUEhZX0dFTl9D T05UUk9MICAgMHgxRSAgLyogSXRzIG1lYW5pbmcgZGVwZW5kcyBvbiByZWcgMjkgKi8KKworLyog TTg4RTEwMDAgUEhZIFNwZWNpZmljIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyNkZWZpbmUgTTg4RTEw MDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTCAweDAwMDIgLyogMT1Qb2xhcml0eSBSZXZlcnNhbCBl bmFibGVkICovCisvKiAxPUNMSzEyNSBsb3csIDA9Q0xLMTI1IHRvZ2dsaW5nICovCisjZGVmaW5l IE04OEUxMDAwX1BTQ1JfTURJX01BTlVBTF9NT0RFICAweDAwMDAgIC8qIE1ESSBDcm9zc292ZXIg TW9kZSBiaXRzIDY6NSAqLworCQkJCQkgICAgICAgLyogTWFudWFsIE1ESSBjb25maWd1cmF0aW9u ICovCisjZGVmaW5lIE04OEUxMDAwX1BTQ1JfTURJWF9NQU5VQUxfTU9ERSAweDAwMjAgIC8qIE1h bnVhbCBNRElYIGNvbmZpZ3VyYXRpb24gKi8KKy8qIDEwMDBCQVNFLVQ6IEF1dG8gY3Jvc3NvdmVy LCAxMDBCQVNFLVRYLzEwQkFTRS1UOiBNREkgTW9kZSAqLworI2RlZmluZSBNODhFMTAwMF9QU0NS X0FVVE9fWF8xMDAwVCAgICAgMHgwMDQwCisvKiBBdXRvIGNyb3Nzb3ZlciBlbmFibGVkIGFsbCBz cGVlZHMgKi8KKyNkZWZpbmUgTTg4RTEwMDBfUFNDUl9BVVRPX1hfTU9ERSAgICAgIDB4MDA2MAor LyoKKyAqIDE9RW5hYmxlIEV4dGVuZGVkIDEwQkFTRS1UIGRpc3RhbmNlIChMb3dlciAxMEJBU0Ut VCBSeCBUaHJlc2hvbGQKKyAqIDA9Tm9ybWFsIDEwQkFTRS1UIFJ4IFRocmVzaG9sZAorICovCisv KiAxPTUtYml0IGludGVyZmFjZSBpbiAxMDBCQVNFLVRYLCAwPU1JSSBpbnRlcmZhY2UgaW4gMTAw QkFTRS1UWCAqLworI2RlZmluZSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFggICAgIDB4 MDgwMCAvKiAxPUFzc2VydCBDUlMgb24gVHJhbnNtaXQgKi8KKworLyogTTg4RTEwMDAgUEhZIFNw ZWNpZmljIFN0YXR1cyBSZWdpc3RlciAqLworI2RlZmluZSBNODhFMTAwMF9QU1NSX1JFVl9QT0xB UklUWSAgICAgICAweDAwMDIgLyogMT1Qb2xhcml0eSByZXZlcnNlZCAqLworI2RlZmluZSBNODhF MTAwMF9QU1NSX0RPV05TSElGVCAgICAgICAgICAweDAwMjAgLyogMT1Eb3duc2hpZnRlZCAqLwor I2RlZmluZSBNODhFMTAwMF9QU1NSX01ESVggICAgICAgICAgICAgICAweDAwNDAgLyogMT1NRElY OyAwPU1ESSAqLworLyoKKyAqIDAgPSA8NTBNCisgKiAxID0gNTAtODBNCisgKiAyID0gODAtMTEw TQorICogMyA9IDExMC0xNDBNCisgKiA0ID0gPjE0ME0KKyAqLworI2RlZmluZSBNODhFMTAwMF9Q U1NSX0NBQkxFX0xFTkdUSCAgICAgICAweDAzODAKKyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9TUEVF RCAgICAgICAgICAgICAgMHhDMDAwIC8qIFNwZWVkLCBiaXRzIDE0OjE1ICovCisjZGVmaW5lIE04 OEUxMDAwX1BTU1JfMTAwME1CUyAgICAgICAgICAgIDB4ODAwMCAvKiAxMD0xMDAwTWJzICovCisK KyNkZWZpbmUgTTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEhfU0hJRlQgNworCisvKiBNODhFMTAw MCBFeHRlbmRlZCBQSFkgU3BlY2lmaWMgQ29udHJvbCBSZWdpc3RlciAqLworLyoKKyAqIDEgPSBM b3N0IGxvY2sgZGV0ZWN0IGVuYWJsZWQuCisgKiBXaWxsIGFzc2VydCBsb3N0IGxvY2sgYW5kIGJy aW5nCisgKiBsaW5rIGRvd24gaWYgaWRsZSBub3Qgc2VlbgorICogd2l0aGluIDFtcyBpbiAxMDAw QkFTRS1UCisgKi8KKy8qCisgKiBOdW1iZXIgb2YgdGltZXMgd2Ugd2lsbCBhdHRlbXB0IHRvIGF1 dG9uZWdvdGlhdGUgYmVmb3JlIGRvd25zaGlmdGluZyBpZiB3ZQorICogYXJlIHRoZSBtYXN0ZXIK KyAqLworI2RlZmluZSBNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUX01BU0sgMHgwQzAw CisjZGVmaW5lIE04OEUxMDAwX0VQU0NSX01BU1RFUl9ET1dOU0hJRlRfMVggICAweDAwMDAKKy8q CisgKiBOdW1iZXIgb2YgdGltZXMgd2Ugd2lsbCBhdHRlbXB0IHRvIGF1dG9uZWdvdGlhdGUgYmVm b3JlIGRvd25zaGlmdGluZyBpZiB3ZQorICogYXJlIHRoZSBzbGF2ZQorICovCisjZGVmaW5lIE04 OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF9NQVNLICAweDAzMDAKKyNkZWZpbmUgTTg4RTEw MDBfRVBTQ1JfU0xBVkVfRE9XTlNISUZUXzFYICAgIDB4MDEwMAorI2RlZmluZSBNODhFMTAwMF9F UFNDUl9UWF9DTEtfMjUgICAgICAweDAwNzAgLyogMjUgIE1IeiBUWF9DTEsgKi8KKworLyogTTg4 RUMwMTggUmV2IDIgc3BlY2lmaWMgRG93blNoaWZ0IHNldHRpbmdzICovCisjZGVmaW5lIE04OEVD MDE4X0VQU0NSX0RPV05TSElGVF9DT1VOVEVSX01BU0sgIDB4MEUwMAorI2RlZmluZSBNODhFQzAx OF9FUFNDUl9ET1dOU0hJRlRfQ09VTlRFUl81WCAgICAweDA4MDAKKworLyogTURJIENvbnRyb2wg Ki8KKyNkZWZpbmUgRTEwMDBfTURJQ19SRUdfU0hJRlQgMTYKKyNkZWZpbmUgRTEwMDBfTURJQ19Q SFlfU0hJRlQgMjEKKyNkZWZpbmUgRTEwMDBfTURJQ19PUF9XUklURSAgMHgwNDAwMDAwMAorI2Rl ZmluZSBFMTAwMF9NRElDX09QX1JFQUQgICAweDA4MDAwMDAwCisjZGVmaW5lIEUxMDAwX01ESUNf UkVBRFkgICAgIDB4MTAwMDAwMDAKKyNkZWZpbmUgRTEwMDBfTURJQ19FUlJPUiAgICAgMHg0MDAw MDAwMAorCisvKiBTZXJEZXMgQ29udHJvbCAqLworI2RlZmluZSBFMTAwMF9HRU5fQ1RMX1JFQURZ ICAgICAgICAgICAgIDB4ODAwMDAwMDAKKyNkZWZpbmUgRTEwMDBfR0VOX0NUTF9BRERSRVNTX1NI SUZUICAgICA4CisjZGVmaW5lIEUxMDAwX0dFTl9QT0xMX1RJTUVPVVQgICAgICAgICAgNjQwCisK KyNlbmRpZgpkaWZmIC1yIGFmNzQzZDE0YWE4YyBkcml2ZXJzL25ldC9pZ2IvZTEwMDBfaHcuaAot LS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJz L25ldC9pZ2IvZTEwMDBfaHcuaAlUaHUgRmViIDEyIDAzOjAyOjE0IDIwMDkgLTA1MDAKQEAgLTAs MCArMSw2MDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwoUikgR2lnYWJp dCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9y YXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRp b25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dy YW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRI T1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m IE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4K KworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAt IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9u IGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlv bjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vm b3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJr d2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8K KworI2lmbmRlZiBfRTEwMDBfSFdfSF8KKyNkZWZpbmUgX0UxMDAwX0hXX0hfCisKKyNpbmNsdWRl IDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGlu dXgvaW8uaD4KKworI2luY2x1ZGUgImUxMDAwX21hYy5oIgorI2luY2x1ZGUgImUxMDAwX3JlZ3Mu aCIKKyNpbmNsdWRlICJlMTAwMF9kZWZpbmVzLmgiCisjaW5jbHVkZSAiaWdiX2NvbXBhdC5oIgor CitzdHJ1Y3QgZTEwMDBfaHc7CisKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2ICAgICAgICAg ICAgICAgICAgICAweDEwQzkKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X0ZJQkVSICAgICAg ICAgICAgICAweDEwRTYKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyAgICAgICAg ICAgICAweDEwRTcKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSICAgICAg ICAweDEwRTgKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfQ09QUEVSICAgICAgICAgICAw eDEwQTcKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1RUJfRklCRVJfU0VSREVTICAgICAweDEw QTkKKyNkZWZpbmUgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIgICAgICAweDEwRDYK KworI2RlZmluZSBFMTAwMF9SRVZJU0lPTl8yIDIKKyNkZWZpbmUgRTEwMDBfUkVWSVNJT05fNCA0 CisKKyNkZWZpbmUgRTEwMDBfRlVOQ18xICAgICAxCisKK2VudW0gZTEwMDBfbWFjX3R5cGUgewor CWUxMDAwX3VuZGVmaW5lZCA9IDAsCisJZTEwMDBfODI1NzUsCisJZTEwMDBfODI1NzYsCisJZTEw MDBfbnVtX21hY3MgIC8qIExpc3QgaXMgMS1iYXNlZCwgc28gc3VidHJhY3QgMSBmb3IgdHJ1ZSBj b3VudC4gKi8KK307CisKK2VudW0gZTEwMDBfbWVkaWFfdHlwZSB7CisJZTEwMDBfbWVkaWFfdHlw ZV91bmtub3duID0gMCwKKwllMTAwMF9tZWRpYV90eXBlX2NvcHBlciA9IDEsCisJZTEwMDBfbWVk aWFfdHlwZV9maWJlciA9IDIsCisJZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMgPSAz LAorCWUxMDAwX251bV9tZWRpYV90eXBlcworfTsKKworZW51bSBlMTAwMF9udm1fdHlwZSB7CisJ ZTEwMDBfbnZtX3Vua25vd24gPSAwLAorCWUxMDAwX252bV9ub25lLAorCWUxMDAwX252bV9lZXBy b21fc3BpLAorCWUxMDAwX252bV9lZXByb21fbWljcm93aXJlLAorCWUxMDAwX252bV9mbGFzaF9o dywKKwllMTAwMF9udm1fZmxhc2hfc3cKK307CisKK2VudW0gZTEwMDBfbnZtX292ZXJyaWRlIHsK KwllMTAwMF9udm1fb3ZlcnJpZGVfbm9uZSA9IDAsCisJZTEwMDBfbnZtX292ZXJyaWRlX3NwaV9z bWFsbCwKKwllMTAwMF9udm1fb3ZlcnJpZGVfc3BpX2xhcmdlLAorCWUxMDAwX252bV9vdmVycmlk ZV9taWNyb3dpcmVfc21hbGwsCisJZTEwMDBfbnZtX292ZXJyaWRlX21pY3Jvd2lyZV9sYXJnZQor fTsKKworZW51bSBlMTAwMF9waHlfdHlwZSB7CisJZTEwMDBfcGh5X3Vua25vd24gPSAwLAorCWUx MDAwX3BoeV9ub25lLAorCWUxMDAwX3BoeV9tODgsCisJZTEwMDBfcGh5X2lncCwKKwllMTAwMF9w aHlfaWdwXzIsCisJZTEwMDBfcGh5X2dnODI1NjMsCisJZTEwMDBfcGh5X2lncF8zLAorCWUxMDAw X3BoeV9pZmUsCit9OworCitlbnVtIGUxMDAwX2J1c190eXBlIHsKKwllMTAwMF9idXNfdHlwZV91 bmtub3duID0gMCwKKwllMTAwMF9idXNfdHlwZV9wY2ksCisJZTEwMDBfYnVzX3R5cGVfcGNpeCwK KwllMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcywKKwllMTAwMF9idXNfdHlwZV9yZXNlcnZlZAor fTsKKworZW51bSBlMTAwMF9idXNfc3BlZWQgeworCWUxMDAwX2J1c19zcGVlZF91bmtub3duID0g MCwKKwllMTAwMF9idXNfc3BlZWRfMzMsCisJZTEwMDBfYnVzX3NwZWVkXzY2LAorCWUxMDAwX2J1 c19zcGVlZF8xMDAsCisJZTEwMDBfYnVzX3NwZWVkXzEyMCwKKwllMTAwMF9idXNfc3BlZWRfMTMz LAorCWUxMDAwX2J1c19zcGVlZF8yNTAwLAorCWUxMDAwX2J1c19zcGVlZF81MDAwLAorCWUxMDAw X2J1c19zcGVlZF9yZXNlcnZlZAorfTsKKworZW51bSBlMTAwMF9idXNfd2lkdGggeworCWUxMDAw X2J1c193aWR0aF91bmtub3duID0gMCwKKwllMTAwMF9idXNfd2lkdGhfcGNpZV94MSwKKwllMTAw MF9idXNfd2lkdGhfcGNpZV94MiwKKwllMTAwMF9idXNfd2lkdGhfcGNpZV94NCA9IDQsCisJZTEw MDBfYnVzX3dpZHRoX3BjaWVfeDggPSA4LAorCWUxMDAwX2J1c193aWR0aF8zMiwKKwllMTAwMF9i dXNfd2lkdGhfNjQsCisJZTEwMDBfYnVzX3dpZHRoX3Jlc2VydmVkCit9OworCitlbnVtIGUxMDAw XzEwMDB0X3J4X3N0YXR1cyB7CisJZTEwMDBfMTAwMHRfcnhfc3RhdHVzX25vdF9vayA9IDAsCisJ ZTEwMDBfMTAwMHRfcnhfc3RhdHVzX29rLAorCWUxMDAwXzEwMDB0X3J4X3N0YXR1c191bmRlZmlu ZWQgPSAweEZGCit9OworCitlbnVtIGUxMDAwX3Jldl9wb2xhcml0eSB7CisJZTEwMDBfcmV2X3Bv bGFyaXR5X25vcm1hbCA9IDAsCisJZTEwMDBfcmV2X3BvbGFyaXR5X3JldmVyc2VkLAorCWUxMDAw X3Jldl9wb2xhcml0eV91bmRlZmluZWQgPSAweEZGCit9OworCitlbnVtIGUxMDAwX2ZjX3R5cGUg eworCWUxMDAwX2ZjX25vbmUgPSAwLAorCWUxMDAwX2ZjX3J4X3BhdXNlLAorCWUxMDAwX2ZjX3R4 X3BhdXNlLAorCWUxMDAwX2ZjX2Z1bGwsCisJZTEwMDBfZmNfZGVmYXVsdCA9IDB4RkYKK307CisK KworLyogUmVjZWl2ZSBEZXNjcmlwdG9yICovCitzdHJ1Y3QgZTEwMDBfcnhfZGVzYyB7CisJX19s ZTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZm ZXIgKi8KKwlfX2xlMTYgbGVuZ3RoOyAgICAgIC8qIExlbmd0aCBvZiBkYXRhIERNQWVkIGludG8g ZGF0YSBidWZmZXIgKi8KKwlfX2xlMTYgY3N1bTsgICAgICAgIC8qIFBhY2tldCBjaGVja3N1bSAq LworCXU4ICBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KKwl1OCAgZXJyb3Jz OyAgICAgIC8qIERlc2NyaXB0b3IgRXJyb3JzICovCisJX19sZTE2IHNwZWNpYWw7Cit9OworCisv KiBSZWNlaXZlIERlc2NyaXB0b3IgLSBFeHRlbmRlZCAqLwordW5pb24gZTEwMDBfcnhfZGVzY19l eHRlbmRlZCB7CisJc3RydWN0IHsKKwkJX19sZTY0IGJ1ZmZlcl9hZGRyOworCQlfX2xlNjQgcmVz ZXJ2ZWQ7CisJfSByZWFkOworCXN0cnVjdCB7CisJCXN0cnVjdCB7CisJCQlfX2xlMzIgbXJxOyAg ICAgICAgICAgICAgLyogTXVsdGlwbGUgUnggUXVldWVzICovCisJCQl1bmlvbiB7CisJCQkJX19s ZTMyIHJzczsgICAgICAgICAgICAvKiBSU1MgSGFzaCAqLworCQkJCXN0cnVjdCB7CisJCQkJCV9f bGUxNiBpcF9pZDsgIC8qIElQIGlkICovCisJCQkJCV9fbGUxNiBjc3VtOyAgIC8qIFBhY2tldCBD aGVja3N1bSAqLworCQkJCX0gY3N1bV9pcDsKKwkJCX0gaGlfZHdvcmQ7CisJCX0gbG93ZXI7CisJ CXN0cnVjdCB7CisJCQlfX2xlMzIgc3RhdHVzX2Vycm9yOyAgICAgLyogZXh0IHN0YXR1cy9lcnJv ciAqLworCQkJX19sZTE2IGxlbmd0aDsKKwkJCV9fbGUxNiB2bGFuOyAgICAgICAgICAgICAvKiBW TEFOIHRhZyAqLworCQl9IHVwcGVyOworCX0gd2I7ICAvKiB3cml0ZWJhY2sgKi8KK307CisKKyNk ZWZpbmUgTUFYX1BTX0JVRkZFUlMgNAorLyogUmVjZWl2ZSBEZXNjcmlwdG9yIC0gUGFja2V0IFNw bGl0ICovCit1bmlvbiBlMTAwMF9yeF9kZXNjX3BhY2tldF9zcGxpdCB7CisJc3RydWN0IHsKKwkJ Lyogb25lIGJ1ZmZlciBmb3IgcHJvdG9jb2wgaGVhZGVyKHMpLCB0aHJlZSBkYXRhIGJ1ZmZlcnMg Ki8KKwkJX19sZTY0IGJ1ZmZlcl9hZGRyW01BWF9QU19CVUZGRVJTXTsKKwl9IHJlYWQ7CisJc3Ry dWN0IHsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiBtcnE7ICAgICAgICAgICAgICAvKiBNdWx0aXBs ZSBSeCBRdWV1ZXMgKi8KKwkJCXVuaW9uIHsKKwkJCQlfX2xlMzIgcnNzOyAgICAgICAgICAgICAg LyogUlNTIEhhc2ggKi8KKwkJCQlzdHJ1Y3QgeworCQkJCQlfX2xlMTYgaXBfaWQ7ICAgIC8qIElQ IGlkICovCisJCQkJCV9fbGUxNiBjc3VtOyAgICAgLyogUGFja2V0IENoZWNrc3VtICovCisJCQkJ fSBjc3VtX2lwOworCQkJfSBoaV9kd29yZDsKKwkJfSBsb3dlcjsKKwkJc3RydWN0IHsKKwkJCV9f bGUzMiBzdGF0dXNfZXJyb3I7ICAgICAvKiBleHQgc3RhdHVzL2Vycm9yICovCisJCQlfX2xlMTYg bGVuZ3RoMDsgICAgICAgICAgLyogbGVuZ3RoIG9mIGJ1ZmZlciAwICovCisJCQlfX2xlMTYgdmxh bjsgICAgICAgICAgICAgLyogVkxBTiB0YWcgKi8KKwkJfSBtaWRkbGU7CisJCXN0cnVjdCB7CisJ CQlfX2xlMTYgaGVhZGVyX3N0YXR1czsKKwkJCV9fbGUxNiBsZW5ndGhbM107ICAgICAgICAvKiBs ZW5ndGggb2YgYnVmZmVycyAxLTMgKi8KKwkJfSB1cHBlcjsKKwkJX19sZTY0IHJlc2VydmVkOwor CX0gd2I7IC8qIHdyaXRlYmFjayAqLworfTsKKworLyogVHJhbnNtaXQgRGVzY3JpcHRvciAqLwor c3RydWN0IGUxMDAwX3R4X2Rlc2MgeworCV9fbGU2NCBidWZmZXJfYWRkcjsgICAgICAvKiBBZGRy ZXNzIG9mIHRoZSBkZXNjcmlwdG9yJ3MgZGF0YSBidWZmZXIgKi8KKwl1bmlvbiB7CisJCV9fbGUz MiBkYXRhOworCQlzdHJ1Y3QgeworCQkJX19sZTE2IGxlbmd0aDsgICAgLyogRGF0YSBidWZmZXIg bGVuZ3RoICovCisJCQl1OCBjc287ICAgICAgICAvKiBDaGVja3N1bSBvZmZzZXQgKi8KKwkJCXU4 IGNtZDsgICAgICAgIC8qIERlc2NyaXB0b3IgY29udHJvbCAqLworCQl9IGZsYWdzOworCX0gbG93 ZXI7CisJdW5pb24geworCQlfX2xlMzIgZGF0YTsKKwkJc3RydWN0IHsKKwkJCXU4IHN0YXR1czsg ICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCisJCQl1OCBjc3M7ICAgICAgICAvKiBDaGVja3N1 bSBzdGFydCAqLworCQkJX19sZTE2IHNwZWNpYWw7CisJCX0gZmllbGRzOworCX0gdXBwZXI7Cit9 OworCisvKiBPZmZsb2FkIENvbnRleHQgRGVzY3JpcHRvciAqLworc3RydWN0IGUxMDAwX2NvbnRl eHRfZGVzYyB7CisJdW5pb24geworCQlfX2xlMzIgaXBfY29uZmlnOworCQlzdHJ1Y3QgeworCQkJ dTggaXBjc3M7ICAgICAgLyogSVAgY2hlY2tzdW0gc3RhcnQgKi8KKwkJCXU4IGlwY3NvOyAgICAg IC8qIElQIGNoZWNrc3VtIG9mZnNldCAqLworCQkJX19sZTE2IGlwY3NlOyAgICAgLyogSVAgY2hl Y2tzdW0gZW5kICovCisJCX0gaXBfZmllbGRzOworCX0gbG93ZXJfc2V0dXA7CisJdW5pb24gewor CQlfX2xlMzIgdGNwX2NvbmZpZzsKKwkJc3RydWN0IHsKKwkJCXU4IHR1Y3NzOyAgICAgIC8qIFRD UCBjaGVja3N1bSBzdGFydCAqLworCQkJdTggdHVjc287ICAgICAgLyogVENQIGNoZWNrc3VtIG9m ZnNldCAqLworCQkJX19sZTE2IHR1Y3NlOyAgICAgLyogVENQIGNoZWNrc3VtIGVuZCAqLworCQl9 IHRjcF9maWVsZHM7CisJfSB1cHBlcl9zZXR1cDsKKwlfX2xlMzIgY21kX2FuZF9sZW5ndGg7CisJ dW5pb24geworCQlfX2xlMzIgZGF0YTsKKwkJc3RydWN0IHsKKwkJCXU4IHN0YXR1czsgICAgIC8q IERlc2NyaXB0b3Igc3RhdHVzICovCisJCQl1OCBoZHJfbGVuOyAgICAvKiBIZWFkZXIgbGVuZ3Ro ICovCisJCQlfX2xlMTYgbXNzOyAgICAgICAvKiBNYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworCQl9 IGZpZWxkczsKKwl9IHRjcF9zZWdfc2V0dXA7Cit9OworCisvKiBPZmZsb2FkIGRhdGEgZGVzY3Jp cHRvciAqLworc3RydWN0IGUxMDAwX2RhdGFfZGVzYyB7CisJX19sZTY0IGJ1ZmZlcl9hZGRyOyAg IC8qIEFkZHJlc3Mgb2YgdGhlIGRlc2NyaXB0b3IncyBidWZmZXIgYWRkcmVzcyAqLworCXVuaW9u IHsKKwkJX19sZTMyIGRhdGE7CisJCXN0cnVjdCB7CisJCQlfX2xlMTYgbGVuZ3RoOyAgICAvKiBE YXRhIGJ1ZmZlciBsZW5ndGggKi8KKwkJCXU4IHR5cF9sZW5fZXh0OworCQkJdTggY21kOworCQl9 IGZsYWdzOworCX0gbG93ZXI7CisJdW5pb24geworCQlfX2xlMzIgZGF0YTsKKwkJc3RydWN0IHsK KwkJCXU4IHN0YXR1czsgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovCisJCQl1OCBwb3B0czsg ICAgICAvKiBQYWNrZXQgT3B0aW9ucyAqLworCQkJX19sZTE2IHNwZWNpYWw7CisJCX0gZmllbGRz OworCX0gdXBwZXI7Cit9OworCisvKiBTdGF0aXN0aWNzIGNvdW50ZXJzIGNvbGxlY3RlZCBieSB0 aGUgTUFDICovCitzdHJ1Y3QgZTEwMDBfaHdfc3RhdHMgeworCXU2NCBjcmNlcnJzOworCXU2NCBh bGduZXJyYzsKKwl1NjQgc3ltZXJyczsKKwl1NjQgcnhlcnJjOworCXU2NCBtcGM7CisJdTY0IHNj YzsKKwl1NjQgZWNvbDsKKwl1NjQgbWNjOworCXU2NCBsYXRlY29sOworCXU2NCBjb2xjOworCXU2 NCBkYzsKKwl1NjQgdG5jcnM7CisJdTY0IHNlYzsKKwl1NjQgY2V4dGVycjsKKwl1NjQgcmxlYzsK Kwl1NjQgeG9ucnhjOworCXU2NCB4b250eGM7CisJdTY0IHhvZmZyeGM7CisJdTY0IHhvZmZ0eGM7 CisJdTY0IGZjcnVjOworCXU2NCBwcmM2NDsKKwl1NjQgcHJjMTI3OworCXU2NCBwcmMyNTU7CisJ dTY0IHByYzUxMTsKKwl1NjQgcHJjMTAyMzsKKwl1NjQgcHJjMTUyMjsKKwl1NjQgZ3ByYzsKKwl1 NjQgYnByYzsKKwl1NjQgbXByYzsKKwl1NjQgZ3B0YzsKKwl1NjQgZ29yYzsKKwl1NjQgZ290YzsK Kwl1NjQgcm5iYzsKKwl1NjQgcnVjOworCXU2NCByZmM7CisJdTY0IHJvYzsKKwl1NjQgcmpjOwor CXU2NCBtZ3ByYzsKKwl1NjQgbWdwZGM7CisJdTY0IG1ncHRjOworCXU2NCB0b3I7CisJdTY0IHRv dDsKKwl1NjQgdHByOworCXU2NCB0cHQ7CisJdTY0IHB0YzY0OworCXU2NCBwdGMxMjc7CisJdTY0 IHB0YzI1NTsKKwl1NjQgcHRjNTExOworCXU2NCBwdGMxMDIzOworCXU2NCBwdGMxNTIyOworCXU2 NCBtcHRjOworCXU2NCBicHRjOworCXU2NCB0c2N0YzsKKwl1NjQgdHNjdGZjOworCXU2NCBpYWM7 CisJdTY0IGljcnhwdGM7CisJdTY0IGljcnhhdGM7CisJdTY0IGljdHhwdGM7CisJdTY0IGljdHhh dGM7CisJdTY0IGljdHhxZWM7CisJdTY0IGljdHhxbXRjOworCXU2NCBpY3J4ZG10YzsKKwl1NjQg aWNyeG9jOworCXU2NCBjYnRtcGM7CisJdTY0IGh0ZHBtYzsKKwl1NjQgY2JyZHBjOworCXU2NCBj YnJtcGM7CisJdTY0IHJwdGhjOworCXU2NCBoZ3B0YzsKKwl1NjQgaHRjYmRwYzsKKwl1NjQgaGdv cmM7CisJdTY0IGhnb3RjOworCXU2NCBsZW5lcnJzOworCXU2NCBzY3ZwYzsKKwl1NjQgaHJtcGM7 Cit9OworCitzdHJ1Y3QgZTEwMDBfcGh5X3N0YXRzIHsKKwl1MzIgaWRsZV9lcnJvcnM7CisJdTMy IHJlY2VpdmVfZXJyb3JzOworfTsKKworc3RydWN0IGUxMDAwX2hvc3RfbW5nX2RoY3BfY29va2ll IHsKKwl1MzIgc2lnbmF0dXJlOworCXU4ICBzdGF0dXM7CisJdTggIHJlc2VydmVkMDsKKwl1MTYg dmxhbl9pZDsKKwl1MzIgcmVzZXJ2ZWQxOworCXUxNiByZXNlcnZlZDI7CisJdTggIHJlc2VydmVk MzsKKwl1OCAgY2hlY2tzdW07Cit9OworCisvKiBIb3N0IEludGVyZmFjZSAiUmV2IDEiICovCitz dHJ1Y3QgZTEwMDBfaG9zdF9jb21tYW5kX2hlYWRlciB7CisJdTggY29tbWFuZF9pZDsKKwl1OCBj b21tYW5kX2xlbmd0aDsKKwl1OCBjb21tYW5kX29wdGlvbnM7CisJdTggY2hlY2tzdW07Cit9Owor CisjZGVmaW5lIEUxMDAwX0hJX01BWF9EQVRBX0xFTkdUSCAgICAgMjUyCitzdHJ1Y3QgZTEwMDBf aG9zdF9jb21tYW5kX2luZm8geworCXN0cnVjdCBlMTAwMF9ob3N0X2NvbW1hbmRfaGVhZGVyIGNv bW1hbmRfaGVhZGVyOworCXU4IGNvbW1hbmRfZGF0YVtFMTAwMF9ISV9NQVhfREFUQV9MRU5HVEhd OworfTsKKworLyogSG9zdCBJbnRlcmZhY2UgIlJldiAyIiAqLworc3RydWN0IGUxMDAwX2hvc3Rf bW5nX2NvbW1hbmRfaGVhZGVyIHsKKwl1OCAgY29tbWFuZF9pZDsKKwl1OCAgY2hlY2tzdW07CisJ dTE2IHJlc2VydmVkMTsKKwl1MTYgcmVzZXJ2ZWQyOworCXUxNiBjb21tYW5kX2xlbmd0aDsKK307 CisKKyNkZWZpbmUgRTEwMDBfSElfTUFYX01OR19EQVRBX0xFTkdUSCAweDZGOAorc3RydWN0IGUx MDAwX2hvc3RfbW5nX2NvbW1hbmRfaW5mbyB7CisJc3RydWN0IGUxMDAwX2hvc3RfbW5nX2NvbW1h bmRfaGVhZGVyIGNvbW1hbmRfaGVhZGVyOworCXU4IGNvbW1hbmRfZGF0YVtFMTAwMF9ISV9NQVhf TU5HX0RBVEFfTEVOR1RIXTsKK307CisKKyNpbmNsdWRlICJlMTAwMF9tYWMuaCIKKyNpbmNsdWRl ICJlMTAwMF9waHkuaCIKKyNpbmNsdWRlICJlMTAwMF9udm0uaCIKKworc3RydWN0IGUxMDAwX21h Y19vcGVyYXRpb25zIHsKKwlzMzIgICgqY2hlY2tfZm9yX2xpbmspKHN0cnVjdCBlMTAwMF9odyAq KTsKKwlzMzIgICgqcmVzZXRfaHcpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqaW5pdF9o dykoc3RydWN0IGUxMDAwX2h3ICopOworCWJvb2wgKCpjaGVja19tbmdfbW9kZSkoc3RydWN0IGUx MDAwX2h3ICopOworCXMzMiAgKCpzZXR1cF9waHlzaWNhbF9pbnRlcmZhY2UpKHN0cnVjdCBlMTAw MF9odyAqKTsKKwl2b2lkICgqcmFyX3NldCkoc3RydWN0IGUxMDAwX2h3ICosIHU4ICosIHUzMik7 CisJczMyICAoKnJlYWRfbWFjX2FkZHIpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqZ2V0 X3NwZWVkX2FuZF9kdXBsZXgpKHN0cnVjdCBlMTAwMF9odyAqLCB1MTYgKiwgdTE2ICopOworfTsK Kworc3RydWN0IGUxMDAwX3BoeV9vcGVyYXRpb25zIHsKKwlzMzIgICgqYWNxdWlyZV9waHkpKHN0 cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqY2hlY2tfcmVzZXRfYmxvY2spKHN0cnVjdCBlMTAw MF9odyAqKTsKKwlzMzIgICgqZm9yY2Vfc3BlZWRfZHVwbGV4KShzdHJ1Y3QgZTEwMDBfaHcgKik7 CisJczMyICAoKmdldF9jZmdfZG9uZSkoc3RydWN0IGUxMDAwX2h3ICpodyk7CisJczMyICAoKmdl dF9jYWJsZV9sZW5ndGgpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqZ2V0X3BoeV9pbmZv KShzdHJ1Y3QgZTEwMDBfaHcgKik7CisJczMyICAoKnJlYWRfcGh5X3JlZykoc3RydWN0IGUxMDAw X2h3ICosIHUzMiwgdTE2ICopOworCXZvaWQgKCpyZWxlYXNlX3BoeSkoc3RydWN0IGUxMDAwX2h3 ICopOworCXMzMiAgKCpyZXNldF9waHkpKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqc2V0 X2QwX2xwbHVfc3RhdGUpKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKKwlzMzIgICgqc2V0X2Qz X2xwbHVfc3RhdGUpKHN0cnVjdCBlMTAwMF9odyAqLCBib29sKTsKKwlzMzIgICgqd3JpdGVfcGh5 X3JlZykoc3RydWN0IGUxMDAwX2h3ICosIHUzMiwgdTE2KTsKK307CisKK3N0cnVjdCBlMTAwMF9u dm1fb3BlcmF0aW9ucyB7CisJczMyICAoKmFjcXVpcmVfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKik7 CisJczMyICAoKnJlYWRfbnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsK Kwl2b2lkICgqcmVsZWFzZV9udm0pKHN0cnVjdCBlMTAwMF9odyAqKTsKKwlzMzIgICgqd3JpdGVf bnZtKShzdHJ1Y3QgZTEwMDBfaHcgKiwgdTE2LCB1MTYsIHUxNiAqKTsKK307CisKK3N0cnVjdCBl MTAwMF9pbmZvIHsKKwlzMzIgKCpnZXRfaW52YXJpYW50cykoc3RydWN0IGUxMDAwX2h3ICopOwor CXN0cnVjdCBlMTAwMF9tYWNfb3BlcmF0aW9ucyAqbWFjX29wczsKKwlzdHJ1Y3QgZTEwMDBfcGh5 X29wZXJhdGlvbnMgKnBoeV9vcHM7CisJc3RydWN0IGUxMDAwX252bV9vcGVyYXRpb25zICpudm1f b3BzOworfTsKKworZXh0ZXJuIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvIGUxMDAwXzgyNTc1X2lu Zm87CisKK3N0cnVjdCBlMTAwMF9tYWNfaW5mbyB7CisJc3RydWN0IGUxMDAwX21hY19vcGVyYXRp b25zIG9wczsKKworCXU4IGFkZHJbNl07CisJdTggcGVybV9hZGRyWzZdOworCisJZW51bSBlMTAw MF9tYWNfdHlwZSB0eXBlOworCisJdTMyIGNvbGxpc2lvbl9kZWx0YTsKKwl1MzIgbGVkY3RsX2Rl ZmF1bHQ7CisJdTMyIGxlZGN0bF9tb2RlMTsKKwl1MzIgbGVkY3RsX21vZGUyOworCXUzMiBtY19m aWx0ZXJfdHlwZTsKKwl1MzIgdHhfcGFja2V0X2RlbHRhOworCXUzMiB0eGN3OworCisJdTE2IGN1 cnJlbnRfaWZzX3ZhbDsKKwl1MTYgaWZzX21heF92YWw7CisJdTE2IGlmc19taW5fdmFsOworCXUx NiBpZnNfcmF0aW87CisJdTE2IGlmc19zdGVwX3NpemU7CisJdTE2IG10YV9yZWdfY291bnQ7CisJ dTE2IHJhcl9lbnRyeV9jb3VudDsKKworCXU4ICBmb3JjZWRfc3BlZWRfZHVwbGV4OworCisJYm9v bCBhZGFwdGl2ZV9pZnM7CisJYm9vbCBhcmNfc3Vic3lzdGVtX3ZhbGlkOworCWJvb2wgYXNmX2Zp cm13YXJlX3ByZXNlbnQ7CisJYm9vbCBhdXRvbmVnOworCWJvb2wgYXV0b25lZ19mYWlsZWQ7CisJ Ym9vbCBkaXNhYmxlX2F2OworCWJvb2wgZGlzYWJsZV9od19pbml0X2JpdHM7CisJYm9vbCBnZXRf bGlua19zdGF0dXM7CisJYm9vbCBpZnNfcGFyYW1zX2ZvcmNlZDsKKwlib29sIGluX2lmc19tb2Rl OworCWJvb2wgcmVwb3J0X3R4X2Vhcmx5OworCWJvb2wgc2VyZGVzX2hhc19saW5rOworCWJvb2wg dHhfcGt0X2ZpbHRlcmluZzsKK307CisKK3N0cnVjdCBlMTAwMF9waHlfaW5mbyB7CisJc3RydWN0 IGUxMDAwX3BoeV9vcGVyYXRpb25zIG9wczsKKworCWVudW0gZTEwMDBfcGh5X3R5cGUgdHlwZTsK KworCWVudW0gZTEwMDBfMTAwMHRfcnhfc3RhdHVzIGxvY2FsX3J4OworCWVudW0gZTEwMDBfMTAw MHRfcnhfc3RhdHVzIHJlbW90ZV9yeDsKKwllbnVtIGUxMDAwX21zX3R5cGUgbXNfdHlwZTsKKwll bnVtIGUxMDAwX21zX3R5cGUgb3JpZ2luYWxfbXNfdHlwZTsKKwllbnVtIGUxMDAwX3Jldl9wb2xh cml0eSBjYWJsZV9wb2xhcml0eTsKKwllbnVtIGUxMDAwX3NtYXJ0X3NwZWVkIHNtYXJ0X3NwZWVk OworCisJdTMyIGFkZHI7CisJdTMyIGlkOworCXUzMiByZXNldF9kZWxheV91czsgLyogaW4gdXNl YyAqLworCXUzMiByZXZpc2lvbjsKKworCWVudW0gZTEwMDBfbWVkaWFfdHlwZSBtZWRpYV90eXBl OworCisJdTE2IGF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwl1MTYgYXV0b25lZ19tYXNrOworCXUxNiBj YWJsZV9sZW5ndGg7CisJdTE2IG1heF9jYWJsZV9sZW5ndGg7CisJdTE2IG1pbl9jYWJsZV9sZW5n dGg7CisKKwl1OCBtZGl4OworCisJYm9vbCBkaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb247CisJ Ym9vbCBpc19tZGl4OworCWJvb2wgcG9sYXJpdHlfY29ycmVjdGlvbjsKKwlib29sIHJlc2V0X2Rp c2FibGU7CisJYm9vbCBzcGVlZF9kb3duZ3JhZGVkOworCWJvb2wgYXV0b25lZ193YWl0X3RvX2Nv bXBsZXRlOworfTsKKworc3RydWN0IGUxMDAwX252bV9pbmZvIHsKKwlzdHJ1Y3QgZTEwMDBfbnZt X29wZXJhdGlvbnMgb3BzOworCisJZW51bSBlMTAwMF9udm1fdHlwZSB0eXBlOworCWVudW0gZTEw MDBfbnZtX292ZXJyaWRlIG92ZXJyaWRlOworCisJdTMyIGZsYXNoX2Jhbmtfc2l6ZTsKKwl1MzIg Zmxhc2hfYmFzZV9hZGRyOworCisJdTE2IHdvcmRfc2l6ZTsKKwl1MTYgZGVsYXlfdXNlYzsKKwl1 MTYgYWRkcmVzc19iaXRzOworCXUxNiBvcGNvZGVfYml0czsKKwl1MTYgcGFnZV9zaXplOworfTsK Kworc3RydWN0IGUxMDAwX2J1c19pbmZvIHsKKwllbnVtIGUxMDAwX2J1c190eXBlIHR5cGU7CisJ ZW51bSBlMTAwMF9idXNfc3BlZWQgc3BlZWQ7CisJZW51bSBlMTAwMF9idXNfd2lkdGggd2lkdGg7 CisKKwl1MzIgc25vb3A7CisKKwl1MTYgZnVuYzsKKwl1MTYgcGNpX2NtZF93b3JkOworfTsKKwor c3RydWN0IGUxMDAwX2ZjX2luZm8geworCXUzMiBoaWdoX3dhdGVyOyAgICAgLyogRmxvdyBjb250 cm9sIGhpZ2gtd2F0ZXIgbWFyayAqLworCXUzMiBsb3dfd2F0ZXI7ICAgICAgLyogRmxvdyBjb250 cm9sIGxvdy13YXRlciBtYXJrICovCisJdTE2IHBhdXNlX3RpbWU7ICAgICAvKiBGbG93IGNvbnRy b2wgcGF1c2UgdGltZXIgKi8KKwlib29sIHNlbmRfeG9uOyAgICAgIC8qIEZsb3cgY29udHJvbCBz ZW5kIFhPTiAqLworCWJvb2wgc3RyaWN0X2llZWU7ICAgLyogU3RyaWN0IElFRUUgbW9kZSAqLwor CWVudW0gZTEwMDBfZmNfdHlwZSB0eXBlOyAvKiBUeXBlIG9mIGZsb3cgY29udHJvbCAqLworCWVu dW0gZTEwMDBfZmNfdHlwZSBvcmlnaW5hbF90eXBlOworfTsKKworc3RydWN0IGUxMDAwX2h3IHsK Kwl2b2lkICpiYWNrOworCXZvaWQgKmRldl9zcGVjOworCisJdTggX19pb21lbSAqaHdfYWRkcjsK Kwl1OCBfX2lvbWVtICpmbGFzaF9hZGRyZXNzOworCXVuc2lnbmVkIGxvbmcgaW9fYmFzZTsKKwor CXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAgbWFjOworCXN0cnVjdCBlMTAwMF9mY19pbmZvICAgZmM7 CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICBwaHk7CisJc3RydWN0IGUxMDAwX252bV9pbmZvICBu dm07CisJc3RydWN0IGUxMDAwX2J1c19pbmZvICBidXM7CisJc3RydWN0IGUxMDAwX2hvc3RfbW5n X2RoY3BfY29va2llIG1uZ19jb29raWU7CisKKwl1MzIgZGV2X3NwZWNfc2l6ZTsKKworCXUxNiBk ZXZpY2VfaWQ7CisJdTE2IHN1YnN5c3RlbV92ZW5kb3JfaWQ7CisJdTE2IHN1YnN5c3RlbV9kZXZp Y2VfaWQ7CisJdTE2IHZlbmRvcl9pZDsKKworCXU4ICByZXZpc2lvbl9pZDsKK307CisKKyNpZmRl ZiBERUJVRworZXh0ZXJuIGNoYXIgKmlnYl9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGUxMDAwX2h3 ICpodyk7CisjZGVmaW5lIGh3X2RiZyhmb3JtYXQsIGFyZy4uLikgXAorCXByaW50ayhLRVJOX0RF QlVHICIlczogIiBmb3JtYXQsIGlnYl9nZXRfaHdfZGV2X25hbWUoaHcpLCAjI2FyZykKKyNlbHNl CisjZGVmaW5lIGh3X2RiZyhmb3JtYXQsIGFyZy4uLikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAt ciBhZjc0M2QxNGFhOGMgZHJpdmVycy9uZXQvaWdiL2UxMDAwX21hYy5jCi0tLSAvZGV2L251bGwJ VGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAw MF9tYWMuYwlUaHUgRmViIDEyIDAzOjAyOjE0IDIwMDkgLTA1MDAKQEAgLTAsMCArMSwxNDIxIEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQg TGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorCisg IFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUg R05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5 IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFC SUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQ dWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUg ZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAw LWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0Pgor ICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNi b3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRl IDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8 bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZGV2aWNlLmg+CisKKyNpbmNsdWRlICJl MTAwMF9tYWMuaCIKKworI2luY2x1ZGUgImlnYi5oIgorCitzdGF0aWMgczMyIGlnYl9zZXRfZGVm YXVsdF9mYyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRpYyBzMzIgaWdiX3NldF9mY193YXRl cm1hcmtzKHN0cnVjdCBlMTAwMF9odyAqaHcpOworCisvKioKKyAqICBpZ2JfcmVtb3ZlX2Rldmlj ZSAtIEZyZWUgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZQorICogIEBodzogcG9pbnRlciB0byB0 aGUgSFcgc3RydWN0dXJlCisgKgorICogIElmIGEgZGV2aWNlIHNwZWNpZmljIHN0cnVjdHVyZSB3 YXMgYWxsb2NhdGVkLCB0aGlzIGZ1bmN0aW9uIHdpbGwKKyAqICBmcmVlIGl0LgorICoqLwordm9p ZCBpZ2JfcmVtb3ZlX2RldmljZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCS8qIEZyZWVpbmcg dGhlIGRldl9zcGVjIG1lbWJlciBvZiBlMTAwMF9odyBzdHJ1Y3R1cmUgKi8KKwlrZnJlZShody0+ ZGV2X3NwZWMpOworfQorCitzdGF0aWMgdm9pZCBpZ2JfcmVhZF9wY2lfY2ZnKHN0cnVjdCBlMTAw MF9odyAqaHcsIHUzMiByZWcsIHUxNiAqdmFsdWUpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICph ZGFwdGVyID0gaHctPmJhY2s7CisKKwlwY2lfcmVhZF9jb25maWdfd29yZChhZGFwdGVyLT5wZGV2 LCByZWcsIHZhbHVlKTsKK30KKworc3RhdGljIHMzMiBpZ2JfcmVhZF9wY2llX2NhcF9yZWcoc3Ry dWN0IGUxMDAwX2h3ICpodywgdTMyIHJlZywgdTE2ICp2YWx1ZSkKK3sKKwlzdHJ1Y3QgaWdiX2Fk YXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwl1MTYgY2FwX29mZnNldDsKKworCWNhcF9vZmZz ZXQgPSBwY2lfZmluZF9jYXBhYmlsaXR5KGFkYXB0ZXItPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsK KwlpZiAoIWNhcF9vZmZzZXQpCisJCXJldHVybiAtRTEwMDBfRVJSX0NPTkZJRzsKKworCXBjaV9y ZWFkX2NvbmZpZ193b3JkKGFkYXB0ZXItPnBkZXYsIGNhcF9vZmZzZXQgKyByZWcsIHZhbHVlKTsK KworCXJldHVybiAwOworfQorCisvKioKKyAqICBpZ2JfZ2V0X2J1c19pbmZvX3BjaWUgLSBHZXQg UENJZSBidXMgaW5mb3JtYXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVy ZQorICoKKyAqICBEZXRlcm1pbmVzIGFuZCBzdG9yZXMgdGhlIHN5c3RlbSBidXMgaW5mb3JtYXRp b24gZm9yIGEgcGFydGljdWxhcgorICogIG5ldHdvcmsgaW50ZXJmYWNlLiAgVGhlIGZvbGxvd2lu ZyBidXMgaW5mb3JtYXRpb24gaXMgZGV0ZXJtaW5lZCBhbmQgc3RvcmVkOgorICogIGJ1cyBzcGVl ZCwgYnVzIHdpZHRoLCB0eXBlIChQQ0llKSwgYW5kIFBDSWUgZnVuY3Rpb24uCisgKiovCitzMzIg aWdiX2dldF9idXNfaW5mb19wY2llKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUx MDAwX2J1c19pbmZvICpidXMgPSAmaHctPmJ1czsKKwlzMzIgcmV0X3ZhbDsKKwl1MzIgc3RhdHVz OworCXUxNiBwY2llX2xpbmtfc3RhdHVzLCBwY2lfaGVhZGVyX3R5cGU7CisKKwlidXMtPnR5cGUg PSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzczsKKwlidXMtPnNwZWVkID0gZTEwMDBfYnVzX3Nw ZWVkXzI1MDA7CisKKwlyZXRfdmFsID0gaWdiX3JlYWRfcGNpZV9jYXBfcmVnKGh3LAorCQkJCQkg IFBDSUVfTElOS19TVEFUVVMsCisJCQkJCSAgJnBjaWVfbGlua19zdGF0dXMpOworCWlmIChyZXRf dmFsKQorCQlidXMtPndpZHRoID0gZTEwMDBfYnVzX3dpZHRoX3Vua25vd247CisJZWxzZQorCQli dXMtPndpZHRoID0gKGVudW0gZTEwMDBfYnVzX3dpZHRoKSgocGNpZV9saW5rX3N0YXR1cyAmCisJ CQkJCQkgICAgIFBDSUVfTElOS19XSURUSF9NQVNLKSA+PgorCQkJCQkJICAgICBQQ0lFX0xJTktf V0lEVEhfU0hJRlQpOworCisJaWdiX3JlYWRfcGNpX2NmZyhodywgUENJX0hFQURFUl9UWVBFX1JF R0lTVEVSLCAmcGNpX2hlYWRlcl90eXBlKTsKKwlpZiAocGNpX2hlYWRlcl90eXBlICYgUENJX0hF QURFUl9UWVBFX01VTFRJRlVOQykgeworCQlzdGF0dXMgPSByZDMyKEUxMDAwX1NUQVRVUyk7CisJ CWJ1cy0+ZnVuYyA9IChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfRlVOQ19NQVNLKQorCQkJICAgID4+ IEUxMDAwX1NUQVRVU19GVU5DX1NISUZUOworCX0gZWxzZSB7CisJCWJ1cy0+ZnVuYyA9IDA7CisJ fQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGlnYl9jbGVhcl92ZnRhIC0gQ2xlYXIgVkxB TiBmaWx0ZXIgdGFibGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoK KyAqICBDbGVhcnMgdGhlIHJlZ2lzdGVyIGFycmF5IHdoaWNoIGNvbnRhaW5zIHRoZSBWTEFOIGZp bHRlciB0YWJsZSBieQorICogIHNldHRpbmcgYWxsIHRoZSB2YWx1ZXMgdG8gMC4KKyAqKi8KK3Zv aWQgaWdiX2NsZWFyX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgb2Zmc2V0Owor CisJZm9yIChvZmZzZXQgPSAwOyBvZmZzZXQgPCBFMTAwMF9WTEFOX0ZJTFRFUl9UQkxfU0laRTsg b2Zmc2V0KyspIHsKKwkJYXJyYXlfd3IzMihFMTAwMF9WRlRBLCBvZmZzZXQsIDApOworCQl3cmZs KCk7CisJfQorfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfdmZ0YSAtIFdyaXRlIHZhbHVlIHRvIFZM QU4gZmlsdGVyIHRhYmxlCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAq ICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgaW4gVkxBTiBmaWx0ZXIgdGFibGUKKyAqICBAdmFs dWU6IHJlZ2lzdGVyIHZhbHVlIHdyaXR0ZW4gdG8gVkxBTiBmaWx0ZXIgdGFibGUKKyAqCisgKiAg V3JpdGVzIHZhbHVlIGF0IHRoZSBnaXZlbiBvZmZzZXQgaW4gdGhlIHJlZ2lzdGVyIGFycmF5IHdo aWNoIHN0b3JlcworICogIHRoZSBWTEFOIGZpbHRlciB0YWJsZS4KKyAqKi8KK3ZvaWQgaWdiX3dy aXRlX3ZmdGEoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTMyIHZhbHVlKQorewor CWFycmF5X3dyMzIoRTEwMDBfVkZUQSwgb2Zmc2V0LCB2YWx1ZSk7CisJd3JmbCgpOworfQorCisv KioKKyAqICBpZ2JfY2hlY2tfYWx0X21hY19hZGRyIC0gQ2hlY2sgZm9yIGFsdGVybmF0ZSBNQUMg YWRkcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIENoZWNr cyB0aGUgbnZtIGZvciBhbiBhbHRlcm5hdGUgTUFDIGFkZHJlc3MuICBBbiBhbHRlcm5hdGUgTUFD IGFkZHJlc3MKKyAqICBjYW4gYmUgc2V0dXAgYnkgcHJlLWJvb3Qgc29mdHdhcmUgYW5kIG11c3Qg YmUgdHJlYXRlZCBsaWtlIGEgcGVybWFuZW50CisgKiAgYWRkcmVzcyBhbmQgbXVzdCBvdmVycmlk ZSB0aGUgYWN0dWFsIHBlcm1hbmVudCBNQUMgYWRkcmVzcy4gIElmIGFuCisgKiAgYWx0ZXJuYXRl IE1BQyBhZGRyZXNzIGlzIGZvcHVuZCBpdCBpcyBzYXZlZCBpbiB0aGUgaHcgc3RydWN0IGFuZAor ICogIHByZ3JhbW1lZCBpbnRvIFJBUjAgYW5kIHRoZSBjdW50aW9uIHJldHVybnMgc3VjY2Vzcywg b3RoZXJ3aXNlIHRoZQorICogIGZ1Y250aW9uIHJldHVybnMgYW4gZXJyb3IuCisgKiovCitzMzIg aWdiX2NoZWNrX2FsdF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBpOwor CXMzMiByZXRfdmFsID0gMDsKKwl1MTYgb2Zmc2V0LCBudm1fYWx0X21hY19hZGRyX29mZnNldCwg bnZtX2RhdGE7CisJdTggYWx0X21hY19hZGRyW0VUSF9BTEVOXTsKKworCXJldF92YWwgPSBody0+ bnZtLm9wcy5yZWFkX252bShodywgTlZNX0FMVF9NQUNfQUREUl9QVFIsIDEsCisJCQkJICZudm1f YWx0X21hY19hZGRyX29mZnNldCk7CisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKCJOVk0gUmVh ZCBFcnJvclxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWlmIChudm1fYWx0X21hY19hZGRyX29m ZnNldCA9PSAweEZGRkYpIHsKKwkJcmV0X3ZhbCA9IC0oRTEwMDBfTk9UX0lNUExFTUVOVEVEKTsK KwkJZ290byBvdXQ7CisJfQorCisJaWYgKGh3LT5idXMuZnVuYyA9PSBFMTAwMF9GVU5DXzEpCisJ CW52bV9hbHRfbWFjX2FkZHJfb2Zmc2V0ICs9IEVUSF9BTEVOL3NpemVvZih1MTYpOworCisJZm9y IChpID0gMDsgaSA8IEVUSF9BTEVOOyBpICs9IDIpIHsKKwkJb2Zmc2V0ID0gbnZtX2FsdF9tYWNf YWRkcl9vZmZzZXQgKyAoaSA+PiAxKTsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZt KGh3LCBvZmZzZXQsIDEsICZudm1fZGF0YSk7CisJCWlmIChyZXRfdmFsKSB7CisJCQlod19kYmco Ik5WTSBSZWFkIEVycm9yXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJYWx0X21hY19hZGRy W2ldID0gKHU4KShudm1fZGF0YSAmIDB4RkYpOworCQlhbHRfbWFjX2FkZHJbaSArIDFdID0gKHU4 KShudm1fZGF0YSA+PiA4KTsKKwl9CisKKwkvKiBpZiBtdWx0aWNhc3QgYml0IGlzIHNldCwgdGhl IGFsdGVybmF0ZSBhZGRyZXNzIHdpbGwgbm90IGJlIHVzZWQgKi8KKwlpZiAoYWx0X21hY19hZGRy WzBdICYgMHgwMSkgeworCQlyZXRfdmFsID0gLShFMTAwMF9OT1RfSU1QTEVNRU5URUQpOworCQln b3RvIG91dDsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgRVRIX0FMRU47IGkrKykKKwkJaHctPm1h Yy5hZGRyW2ldID0gaHctPm1hYy5wZXJtX2FkZHJbaV0gPSBhbHRfbWFjX2FkZHJbaV07CisKKwlo dy0+bWFjLm9wcy5yYXJfc2V0KGh3LCBody0+bWFjLnBlcm1fYWRkciwgMCk7CisKK291dDoKKwly ZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3Jhcl9zZXQgLSBTZXQgcmVjZWl2ZSBh ZGRyZXNzIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAq ICBAYWRkcjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBhZGRyZXNzCisgKiAgQGluZGV4OiByZWNl aXZlIGFkZHJlc3MgYXJyYXkgcmVnaXN0ZXIKKyAqCisgKiAgU2V0cyB0aGUgcmVjZWl2ZSBhZGRy ZXNzIGFycmF5IHJlZ2lzdGVyIGF0IGluZGV4IHRvIHRoZSBhZGRyZXNzIHBhc3NlZAorICogIGlu IGJ5IGFkZHIuCisgKiovCit2b2lkIGlnYl9yYXJfc2V0KHN0cnVjdCBlMTAwMF9odyAqaHcsIHU4 ICphZGRyLCB1MzIgaW5kZXgpCit7CisJdTMyIHJhcl9sb3csIHJhcl9oaWdoOworCisJLyoKKwkg KiBIVyBleHBlY3RzIHRoZXNlIGluIGxpdHRsZSBlbmRpYW4gc28gd2UgcmV2ZXJzZSB0aGUgYnl0 ZSBvcmRlcgorCSAqIGZyb20gbmV0d29yayBvcmRlciAoYmlnIGVuZGlhbikgdG8gbGl0dGxlIGVu ZGlhbgorCSAqLworCXJhcl9sb3cgPSAoKHUzMikgYWRkclswXSB8CisJCSAgICgodTMyKSBhZGRy WzFdIDw8IDgpIHwKKwkJICAgICgodTMyKSBhZGRyWzJdIDw8IDE2KSB8ICgodTMyKSBhZGRyWzNd IDw8IDI0KSk7CisKKwlyYXJfaGlnaCA9ICgodTMyKSBhZGRyWzRdIHwgKCh1MzIpIGFkZHJbNV0g PDwgOCkpOworCisJaWYgKCFody0+bWFjLmRpc2FibGVfYXYpCisJCXJhcl9oaWdoIHw9IEUxMDAw X1JBSF9BVjsKKworCWFycmF5X3dyMzIoRTEwMDBfUkEsIChpbmRleCA8PCAxKSwgcmFyX2xvdyk7 CisJYXJyYXlfd3IzMihFMTAwMF9SQSwgKChpbmRleCA8PCAxKSArIDEpLCByYXJfaGlnaCk7Cit9 CisKKy8qKgorICogIGlnYl9tdGFfc2V0IC0gU2V0IG11bHRpY2FzdCBmaWx0ZXIgdGFibGUgYWRk cmVzcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGhhc2hfdmFs dWU6IGRldGVybWluZXMgdGhlIE1UQSByZWdpc3RlciBhbmQgYml0IHRvIHNldAorICoKKyAqICBU aGUgbXVsdGljYXN0IHRhYmxlIGFkZHJlc3MgaXMgYSByZWdpc3RlciBhcnJheSBvZiAzMi1iaXQg cmVnaXN0ZXJzLgorICogIFRoZSBoYXNoX3ZhbHVlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQg cmVnaXN0ZXIgdGhlIGJpdCBpcyBpbiwgdGhlCisgKiAgY3VycmVudCB2YWx1ZSBpcyByZWFkLCB0 aGUgbmV3IGJpdCBpcyBPUidkIGluIGFuZCB0aGUgbmV3IHZhbHVlIGlzCisgKiAgd3JpdHRlbiBi YWNrIGludG8gdGhlIHJlZ2lzdGVyLgorICoqLwordm9pZCBpZ2JfbXRhX3NldChzdHJ1Y3QgZTEw MDBfaHcgKmh3LCB1MzIgaGFzaF92YWx1ZSkKK3sKKwl1MzIgaGFzaF9iaXQsIGhhc2hfcmVnLCBt dGE7CisKKwkvKgorCSAqIFRoZSBNVEEgaXMgYSByZWdpc3RlciBhcnJheSBvZiAzMi1iaXQgcmVn aXN0ZXJzLiBJdCBpcworCSAqIHRyZWF0ZWQgbGlrZSBhbiBhcnJheSBvZiAoMzIqbXRhX3JlZ19j b3VudCkgYml0cy4gIFdlIHdhbnQgdG8KKwkgKiBzZXQgYml0IEJpdEFycmF5W2hhc2hfdmFsdWVd LiBTbyB3ZSBmaWd1cmUgb3V0IHdoYXQgcmVnaXN0ZXIKKwkgKiB0aGUgYml0IGlzIGluLCByZWFk IGl0LCBPUiBpbiB0aGUgbmV3IGJpdCwgdGhlbiB3cml0ZQorCSAqIGJhY2sgdGhlIG5ldyB2YWx1 ZS4gIFRoZSAoaHctPm1hYy5tdGFfcmVnX2NvdW50IC0gMSkgc2VydmVzIGFzIGEKKwkgKiBtYXNr IHRvIGJpdHMgMzE6NSBvZiB0aGUgaGFzaCB2YWx1ZSB3aGljaCBnaXZlcyB1cyB0aGUKKwkgKiBy ZWdpc3RlciB3ZSdyZSBtb2RpZnlpbmcuICBUaGUgaGFzaCBiaXQgd2l0aGluIHRoYXQgcmVnaXN0 ZXIKKwkgKiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBsb3dlciA1IGJpdHMgb2YgdGhlIGhhc2ggdmFs dWUuCisJICovCisJaGFzaF9yZWcgPSAoaGFzaF92YWx1ZSA+PiA1KSAmIChody0+bWFjLm10YV9y ZWdfY291bnQgLSAxKTsKKwloYXNoX2JpdCA9IGhhc2hfdmFsdWUgJiAweDFGOworCisJbXRhID0g YXJyYXlfcmQzMihFMTAwMF9NVEEsIGhhc2hfcmVnKTsKKworCW10YSB8PSAoMSA8PCBoYXNoX2Jp dCk7CisKKwlhcnJheV93cjMyKEUxMDAwX01UQSwgaGFzaF9yZWcsIG10YSk7CisJd3JmbCgpOwor fQorCisvKioKKyAqICBpZ2JfaGFzaF9tY19hZGRyIC0gR2VuZXJhdGUgYSBtdWx0aWNhc3QgaGFz aCB2YWx1ZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG1jX2Fk ZHI6IHBvaW50ZXIgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcworICoKKyAqICBHZW5lcmF0ZXMgYSBt dWx0aWNhc3QgYWRkcmVzcyBoYXNoIHZhbHVlIHdoaWNoIGlzIHVzZWQgdG8gZGV0ZXJtaW5lCisg KiAgdGhlIG11bHRpY2FzdCBmaWx0ZXIgdGFibGUgYXJyYXkgYWRkcmVzcyBhbmQgbmV3IHRhYmxl IHZhbHVlLiAgU2VlCisgKiAgaWdiX210YV9zZXQoKQorICoqLwordTMyIGlnYl9oYXNoX21jX2Fk ZHIoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKm1jX2FkZHIpCit7CisJdTMyIGhhc2hfdmFsdWUs IGhhc2hfbWFzazsKKwl1OCBiaXRfc2hpZnQgPSAwOworCisJLyogUmVnaXN0ZXIgY291bnQgbXVs dGlwbGllZCBieSBiaXRzIHBlciByZWdpc3RlciAqLworCWhhc2hfbWFzayA9IChody0+bWFjLm10 YV9yZWdfY291bnQgKiAzMikgLSAxOworCisJLyoKKwkgKiBGb3IgYSBtY19maWx0ZXJfdHlwZSBv ZiAwLCBiaXRfc2hpZnQgaXMgdGhlIG51bWJlciBvZiBsZWZ0LXNoaWZ0cworCSAqIHdoZXJlIDB4 RkYgd291bGQgc3RpbGwgZmFsbCB3aXRoaW4gdGhlIGhhc2ggbWFzay4KKwkgKi8KKwl3aGlsZSAo aGFzaF9tYXNrID4+IGJpdF9zaGlmdCAhPSAweEZGKQorCQliaXRfc2hpZnQrKzsKKworCS8qCisJ ICogVGhlIHBvcnRpb24gb2YgdGhlIGFkZHJlc3MgdGhhdCBpcyB1c2VkIGZvciB0aGUgaGFzaCB0 YWJsZQorCSAqIGlzIGRldGVybWluZWQgYnkgdGhlIG1jX2ZpbHRlcl90eXBlIHNldHRpbmcuCisJ ICogVGhlIGFsZ29yaXRobSBpcyBzdWNoIHRoYXQgdGhlcmUgaXMgYSB0b3RhbCBvZiA4IGJpdHMg b2Ygc2hpZnRpbmcuCisJICogVGhlIGJpdF9zaGlmdCBmb3IgYSBtY19maWx0ZXJfdHlwZSBvZiAw IHJlcHJlc2VudHMgdGhlIG51bWJlciBvZgorCSAqIGxlZnQtc2hpZnRzIHdoZXJlIHRoZSBNU0Ig b2YgbWNfYWRkcls1XSB3b3VsZCBzdGlsbCBmYWxsIHdpdGhpbgorCSAqIHRoZSBoYXNoX21hc2su ICBDYXNlIDAgZG9lcyB0aGlzIGV4YWN0bHkuICBTaW5jZSB0aGVyZSBhcmUgYSB0b3RhbAorCSAq IG9mIDggYml0cyBvZiBzaGlmdGluZywgdGhlbiBtY19hZGRyWzRdIHdpbGwgc2hpZnQgcmlnaHQg dGhlCisJICogcmVtYWluaW5nIG51bWJlciBvZiBiaXRzLiBUaHVzIDggLSBiaXRfc2hpZnQuICBU aGUgcmVzdCBvZiB0aGUKKwkgKiBjYXNlcyBhcmUgYSB2YXJpYXRpb24gb2YgdGhpcyBhbGdvcml0 aG0uLi5lc3NlbnRpYWxseSByYWlzaW5nIHRoZQorCSAqIG51bWJlciBvZiBiaXRzIHRvIHNoaWZ0 IG1jX2FkZHJbNV0gbGVmdCwgd2hpbGUgc3RpbGwga2VlcGluZyB0aGUKKwkgKiA4LWJpdCBzaGlm dGluZyB0b3RhbC4KKwkgKgorCSAqIEZvciBleGFtcGxlLCBnaXZlbiB0aGUgZm9sbG93aW5nIERl c3RpbmF0aW9uIE1BQyBBZGRyZXNzIGFuZCBhbgorCSAqIG10YSByZWdpc3RlciBjb3VudCBvZiAx MjggKHRodXMgYSA0MDk2LWJpdCB2ZWN0b3IgYW5kIDB4RkZGIG1hc2spLAorCSAqIHdlIGNhbiBz ZWUgdGhhdCB0aGUgYml0X3NoaWZ0IGZvciBjYXNlIDAgaXMgNC4gIFRoZXNlIGFyZSB0aGUgaGFz aAorCSAqIHZhbHVlcyByZXN1bHRpbmcgZnJvbSBlYWNoIG1jX2ZpbHRlcl90eXBlLi4uCisJICog WzBdIFsxXSBbMl0gWzNdIFs0XSBbNV0KKwkgKiAwMSAgQUEgIDAwICAxMiAgMzQgIDU2CisJICog TFNCICAgICAgICAgICAgICAgICBNU0IKKwkgKgorCSAqIGNhc2UgMDogaGFzaF92YWx1ZSA9ICgo MHgzNCA+PiA0KSB8ICgweDU2IDw8IDQpKSAmIDB4RkZGID0gMHg1NjMKKwkgKiBjYXNlIDE6IGhh c2hfdmFsdWUgPSAoKDB4MzQgPj4gMykgfCAoMHg1NiA8PCA1KSkgJiAweEZGRiA9IDB4QUM2CisJ ICogY2FzZSAyOiBoYXNoX3ZhbHVlID0gKCgweDM0ID4+IDIpIHwgKDB4NTYgPDwgNikpICYgMHhG RkYgPSAweDE2MworCSAqIGNhc2UgMzogaGFzaF92YWx1ZSA9ICgoMHgzNCA+PiAwKSB8ICgweDU2 IDw8IDgpKSAmIDB4RkZGID0gMHg2MzQKKwkgKi8KKwlzd2l0Y2ggKGh3LT5tYWMubWNfZmlsdGVy X3R5cGUpIHsKKwlkZWZhdWx0OgorCWNhc2UgMDoKKwkJYnJlYWs7CisJY2FzZSAxOgorCQliaXRf c2hpZnQgKz0gMTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQliaXRfc2hpZnQgKz0gMjsKKwkJYnJl YWs7CisJY2FzZSAzOgorCQliaXRfc2hpZnQgKz0gNDsKKwkJYnJlYWs7CisJfQorCisJaGFzaF92 YWx1ZSA9IGhhc2hfbWFzayAmICgoKG1jX2FkZHJbNF0gPj4gKDggLSBiaXRfc2hpZnQpKSB8CisJ CQkJICAoKCh1MTYpIG1jX2FkZHJbNV0pIDw8IGJpdF9zaGlmdCkpKTsKKworCXJldHVybiBoYXNo X3ZhbHVlOworfQorCisvKioKKyAqICBpZ2JfY2xlYXJfaHdfY250cnNfYmFzZSAtIENsZWFyIGJh c2UgaGFyZHdhcmUgY291bnRlcnMKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVy ZQorICoKKyAqICBDbGVhcnMgdGhlIGJhc2UgaGFyZHdhcmUgY291bnRlcnMgYnkgcmVhZGluZyB0 aGUgY291bnRlciByZWdpc3RlcnMuCisgKiovCit2b2lkIGlnYl9jbGVhcl9od19jbnRyc19iYXNl KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIHRlbXA7CisKKwl0ZW1wID0gcmQzMihFMTAw MF9DUkNFUlJTKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9TWU1FUlJTKTsKKwl0ZW1wID0gcmQzMihF MTAwMF9NUEMpOworCXRlbXAgPSByZDMyKEUxMDAwX1NDQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBf RUNPTCk7CisJdGVtcCA9IHJkMzIoRTEwMDBfTUNDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9MQVRF Q09MKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9DT0xDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9EQyk7 CisJdGVtcCA9IHJkMzIoRTEwMDBfU0VDKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9STEVDKTsKKwl0 ZW1wID0gcmQzMihFMTAwMF9YT05SWEMpOworCXRlbXAgPSByZDMyKEUxMDAwX1hPTlRYQyk7CisJ dGVtcCA9IHJkMzIoRTEwMDBfWE9GRlJYQyk7CisJdGVtcCA9IHJkMzIoRTEwMDBfWE9GRlRYQyk7 CisJdGVtcCA9IHJkMzIoRTEwMDBfRkNSVUMpOworCXRlbXAgPSByZDMyKEUxMDAwX0dQUkMpOwor CXRlbXAgPSByZDMyKEUxMDAwX0JQUkMpOworCXRlbXAgPSByZDMyKEUxMDAwX01QUkMpOworCXRl bXAgPSByZDMyKEUxMDAwX0dQVEMpOworCXRlbXAgPSByZDMyKEUxMDAwX0dPUkNMKTsKKwl0ZW1w ID0gcmQzMihFMTAwMF9HT1JDSCk7CisJdGVtcCA9IHJkMzIoRTEwMDBfR09UQ0wpOworCXRlbXAg PSByZDMyKEUxMDAwX0dPVENIKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9STkJDKTsKKwl0ZW1wID0g cmQzMihFMTAwMF9SVUMpOworCXRlbXAgPSByZDMyKEUxMDAwX1JGQyk7CisJdGVtcCA9IHJkMzIo RTEwMDBfUk9DKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9SSkMpOworCXRlbXAgPSByZDMyKEUxMDAw X1RPUkwpOworCXRlbXAgPSByZDMyKEUxMDAwX1RPUkgpOworCXRlbXAgPSByZDMyKEUxMDAwX1RP VEwpOworCXRlbXAgPSByZDMyKEUxMDAwX1RPVEgpOworCXRlbXAgPSByZDMyKEUxMDAwX1RQUik7 CisJdGVtcCA9IHJkMzIoRTEwMDBfVFBUKTsKKwl0ZW1wID0gcmQzMihFMTAwMF9NUFRDKTsKKwl0 ZW1wID0gcmQzMihFMTAwMF9CUFRDKTsKK30KKworLyoqCisgKiAgaWdiX2NoZWNrX2Zvcl9jb3Bw ZXJfbGluayAtIENoZWNrIGZvciBsaW5rIChDb3BwZXIpCisgKiAgQGh3OiBwb2ludGVyIHRvIHRo ZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2hlY2tzIHRvIHNlZSBvZiB0aGUgbGluayBzdGF0dXMg b2YgdGhlIGhhcmR3YXJlIGhhcyBjaGFuZ2VkLiAgSWYgYQorICogIGNoYW5nZSBpbiBsaW5rIHN0 YXR1cyBoYXMgYmVlbiBkZXRlY3RlZCwgdGhlbiB3ZSByZWFkIHRoZSBQSFkgcmVnaXN0ZXJzCisg KiAgdG8gZ2V0IHRoZSBjdXJyZW50IHNwZWVkL2R1cGxleCBpZiBsaW5rIGV4aXN0cy4KKyAqKi8K K3MzMiBpZ2JfY2hlY2tfZm9yX2NvcHBlcl9saW5rKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJ c3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKwlzMzIgcmV0X3ZhbDsKKwli b29sIGxpbms7CisKKwkvKgorCSAqIFdlIG9ubHkgd2FudCB0byBnbyBvdXQgdG8gdGhlIFBIWSBy ZWdpc3RlcnMgdG8gc2VlIGlmIEF1dG8tTmVnCisJICogaGFzIGNvbXBsZXRlZCBhbmQvb3IgaWYg b3VyIGxpbmsgc3RhdHVzIGhhcyBjaGFuZ2VkLiAgVGhlCisJICogZ2V0X2xpbmtfc3RhdHVzIGZs YWcgaXMgc2V0IHVwb24gcmVjZWl2aW5nIGEgTGluayBTdGF0dXMKKwkgKiBDaGFuZ2Ugb3IgUngg U2VxdWVuY2UgRXJyb3IgaW50ZXJydXB0LgorCSAqLworCWlmICghbWFjLT5nZXRfbGlua19zdGF0 dXMpIHsKKwkJcmV0X3ZhbCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCS8qCisJICogRmlyc3Qg d2Ugd2FudCB0byBzZWUgaWYgdGhlIE1JSSBTdGF0dXMgUmVnaXN0ZXIgcmVwb3J0cworCSAqIGxp bmsuICBJZiBzbywgdGhlbiB3ZSB3YW50IHRvIGdldCB0aGUgY3VycmVudCBzcGVlZC9kdXBsZXgK KwkgKiBvZiB0aGUgUEhZLgorCSAqLworCXJldF92YWwgPSBpZ2JfcGh5X2hhc19saW5rKGh3LCAx LCAwLCAmbGluayk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKCFsaW5rKQor CQlnb3RvIG91dDsgLyogTm8gbGluayBkZXRlY3RlZCAqLworCisJbWFjLT5nZXRfbGlua19zdGF0 dXMgPSBmYWxzZTsKKworCS8qCisJICogQ2hlY2sgaWYgdGhlcmUgd2FzIERvd25TaGlmdCwgbXVz dCBiZSBjaGVja2VkCisJICogaW1tZWRpYXRlbHkgYWZ0ZXIgbGluay11cAorCSAqLworCWlnYl9j aGVja19kb3duc2hpZnQoaHcpOworCisJLyoKKwkgKiBJZiB3ZSBhcmUgZm9yY2luZyBzcGVlZC9k dXBsZXgsIHRoZW4gd2Ugc2ltcGx5IHJldHVybiBzaW5jZQorCSAqIHdlIGhhdmUgYWxyZWFkeSBk ZXRlcm1pbmVkIHdoZXRoZXIgd2UgaGF2ZSBsaW5rIG9yIG5vdC4KKwkgKi8KKwlpZiAoIW1hYy0+ YXV0b25lZykgeworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0Owor CX0KKworCS8qCisJICogQXV0by1OZWcgaXMgZW5hYmxlZC4gIEF1dG8gU3BlZWQgRGV0ZWN0aW9u IHRha2VzIGNhcmUKKwkgKiBvZiBNQUMgc3BlZWQvZHVwbGV4IGNvbmZpZ3VyYXRpb24uICBTbyB3 ZSBvbmx5IG5lZWQgdG8KKwkgKiBjb25maWd1cmUgQ29sbGlzaW9uIERpc3RhbmNlIGluIHRoZSBN QUMuCisJICovCisJaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CisKKwkvKgorCSAqIENv bmZpZ3VyZSBGbG93IENvbnRyb2wgbm93IHRoYXQgQXV0by1OZWcgaGFzIGNvbXBsZXRlZC4KKwkg KiBGaXJzdCwgd2UgbmVlZCB0byByZXN0b3JlIHRoZSBkZXNpcmVkIGZsb3cgY29udHJvbAorCSAq IHNldHRpbmdzIGJlY2F1c2Ugd2UgbWF5IGhhdmUgaGFkIHRvIHJlLWF1dG9uZWcgd2l0aCBhCisJ ICogZGlmZmVyZW50IGxpbmsgcGFydG5lci4KKwkgKi8KKwlyZXRfdmFsID0gaWdiX2NvbmZpZ19m Y19hZnRlcl9saW5rX3VwKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJaHdfZGJnKCJFcnJvciBjb25m aWd1cmluZyBmbG93IGNvbnRyb2xcbiIpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisK Ky8qKgorICogIGlnYl9zZXR1cF9saW5rIC0gU2V0dXAgZmxvdyBjb250cm9sIGFuZCBsaW5rIHNl dHRpbmdzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgRGV0 ZXJtaW5lcyB3aGljaCBmbG93IGNvbnRyb2wgc2V0dGluZ3MgdG8gdXNlLCB0aGVuIGNvbmZpZ3Vy ZXMgZmxvdworICogIGNvbnRyb2wuICBDYWxscyB0aGUgYXBwcm9wcmlhdGUgbWVkaWEtc3BlY2lm aWMgbGluayBjb25maWd1cmF0aW9uCisgKiAgZnVuY3Rpb24uICBBc3N1bWluZyB0aGUgYWRhcHRl ciBoYXMgYSB2YWxpZCBsaW5rIHBhcnRuZXIsIGEgdmFsaWQgbGluaworICogIHNob3VsZCBiZSBl c3RhYmxpc2hlZC4gIEFzc3VtZXMgdGhlIGhhcmR3YXJlIGhhcyBwcmV2aW91c2x5IGJlZW4gcmVz ZXQKKyAqICBhbmQgdGhlIHRyYW5zbWl0dGVyIGFuZCByZWNlaXZlciBhcmUgbm90IGVuYWJsZWQu CisgKiovCitzMzIgaWdiX3NldHVwX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIg cmV0X3ZhbCA9IDA7CisKKwkvKgorCSAqIEluIHRoZSBjYXNlIG9mIHRoZSBwaHkgcmVzZXQgYmVp bmcgYmxvY2tlZCwgd2UgYWxyZWFkeSBoYXZlIGEgbGluay4KKwkgKiBXZSBkbyBub3QgbmVlZCB0 byBzZXQgaXQgdXAgYWdhaW4uCisJICovCisJaWYgKGlnYl9jaGVja19yZXNldF9ibG9jayhodykp CisJCWdvdG8gb3V0OworCisJcmV0X3ZhbCA9IGlnYl9zZXRfZGVmYXVsdF9mYyhodyk7CisJaWYg KHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBXZSB3YW50IHRvIHNhdmUgb2ZmIHRo ZSBvcmlnaW5hbCBGbG93IENvbnRyb2wgY29uZmlndXJhdGlvbiBqdXN0CisJICogaW4gY2FzZSB3 ZSBnZXQgZGlzY29ubmVjdGVkIGFuZCB0aGVuIHJlY29ubmVjdGVkIGludG8gYSBkaWZmZXJlbnQK KwkgKiBodWIgb3Igc3dpdGNoIHdpdGggZGlmZmVyZW50IEZsb3cgQ29udHJvbCBjYXBhYmlsaXRp ZXMuCisJICovCisJaHctPmZjLm9yaWdpbmFsX3R5cGUgPSBody0+ZmMudHlwZTsKKworCWh3X2Ri ZygiQWZ0ZXIgZml4LXVwcyBGbG93Q29udHJvbCBpcyBub3cgPSAleFxuIiwgaHctPmZjLnR5cGUp OworCisJLyogQ2FsbCB0aGUgbmVjZXNzYXJ5IG1lZGlhX3R5cGUgc3Vicm91dGluZSB0byBjb25m aWd1cmUgdGhlIGxpbmsuICovCisJcmV0X3ZhbCA9IGh3LT5tYWMub3BzLnNldHVwX3BoeXNpY2Fs X2ludGVyZmFjZShodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJ bml0aWFsaXplIHRoZSBmbG93IGNvbnRyb2wgYWRkcmVzcywgdHlwZSwgYW5kIFBBVVNFIHRpbWVy CisJICogcmVnaXN0ZXJzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWVzLiAgVGhpcyBpcyBkb25lIGV2 ZW4gaWYgZmxvdworCSAqIGNvbnRyb2wgaXMgZGlzYWJsZWQsIGJlY2F1c2UgaXQgZG9lcyBub3Qg aHVydCBhbnl0aGluZyB0bworCSAqIGluaXRpYWxpemUgdGhlc2UgcmVnaXN0ZXJzLgorCSAqLwor CWh3X2RiZygiSW5pdGlhbGl6aW5nIHRoZSBGbG93IENvbnRyb2wgYWRkcmVzcywgdHlwZSBhbmQg dGltZXIgcmVnc1xuIik7CisJd3IzMihFMTAwMF9GQ1QsIEZMT1dfQ09OVFJPTF9UWVBFKTsKKwl3 cjMyKEUxMDAwX0ZDQUgsIEZMT1dfQ09OVFJPTF9BRERSRVNTX0hJR0gpOworCXdyMzIoRTEwMDBf RkNBTCwgRkxPV19DT05UUk9MX0FERFJFU1NfTE9XKTsKKworCXdyMzIoRTEwMDBfRkNUVFYsIGh3 LT5mYy5wYXVzZV90aW1lKTsKKworCXJldF92YWwgPSBpZ2Jfc2V0X2ZjX3dhdGVybWFya3MoaHcp OworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jb25maWdfY29s bGlzaW9uX2Rpc3QgLSBDb25maWd1cmUgY29sbGlzaW9uIGRpc3RhbmNlCisgKiAgQGh3OiBwb2lu dGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ29uZmlndXJlcyB0aGUgY29sbGlzaW9u IGRpc3RhbmNlIHRvIHRoZSBkZWZhdWx0IHZhbHVlIGFuZCBpcyB1c2VkCisgKiAgZHVyaW5nIGxp bmsgc2V0dXAuIEN1cnJlbnRseSBubyBmdW5jIHBvaW50ZXIgZXhpc3RzIGFuZCBhbGwKKyAqICBp bXBsZW1lbnRhdGlvbnMgYXJlIGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgdmVyc2lvbiBvZiB0aGlz IGZ1bmN0aW9uLgorICoqLwordm9pZCBpZ2JfY29uZmlnX2NvbGxpc2lvbl9kaXN0KHN0cnVjdCBl MTAwMF9odyAqaHcpCit7CisJdTMyIHRjdGw7CisKKwl0Y3RsID0gcmQzMihFMTAwMF9UQ1RMKTsK KworCXRjdGwgJj0gfkUxMDAwX1RDVExfQ09MRDsKKwl0Y3RsIHw9IEUxMDAwX0NPTExJU0lPTl9E SVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUOworCisJd3IzMihFMTAwMF9UQ1RMLCB0Y3RsKTsK Kwl3cmZsKCk7Cit9CisKKy8qKgorICogIGlnYl9zZXRfZmNfd2F0ZXJtYXJrcyAtIFNldCBmbG93 IGNvbnRyb2wgaGlnaC9sb3cgd2F0ZXJtYXJrcworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcg c3RydWN0dXJlCisgKgorICogIFNldHMgdGhlIGZsb3cgY29udHJvbCBoaWdoL2xvdyB0aHJlc2hv bGQgKHdhdGVybWFyaykgcmVnaXN0ZXJzLiAgSWYKKyAqICBmbG93IGNvbnRyb2wgWE9OIGZyYW1l IHRyYW5zbWlzc2lvbiBpcyBlbmFibGVkLCB0aGVuIHNldCBYT04gZnJhbWUKKyAqICB0YW5zbWlz c2lvbiBhcyB3ZWxsLgorICoqLworc3RhdGljIHMzMiBpZ2Jfc2V0X2ZjX3dhdGVybWFya3Moc3Ry dWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTMyIGZjcnRsID0gMCwg ZmNydGggPSAwOworCisJLyoKKwkgKiBTZXQgdGhlIGZsb3cgY29udHJvbCByZWNlaXZlIHRocmVz aG9sZCByZWdpc3RlcnMuICBOb3JtYWxseSwKKwkgKiB0aGVzZSByZWdpc3RlcnMgd2lsbCBiZSBz ZXQgdG8gYSBkZWZhdWx0IHRocmVzaG9sZCB0aGF0IG1heSBiZQorCSAqIGFkanVzdGVkIGxhdGVy IGJ5IHRoZSBkcml2ZXIncyBydW50aW1lIGNvZGUuICBIb3dldmVyLCBpZiB0aGUKKwkgKiBhYmls aXR5IHRvIHRyYW5zbWl0IHBhdXNlIGZyYW1lcyBpcyBub3QgZW5hYmxlZCwgdGhlbiB0aGVzZQor CSAqIHJlZ2lzdGVycyB3aWxsIGJlIHNldCB0byAwLgorCSAqLworCWlmIChody0+ZmMudHlwZSAm IGUxMDAwX2ZjX3R4X3BhdXNlKSB7CisJCS8qCisJCSAqIFdlIG5lZWQgdG8gc2V0IHVwIHRoZSBS ZWNlaXZlIFRocmVzaG9sZCBoaWdoIGFuZCBsb3cgd2F0ZXIKKwkJICogbWFya3MgYXMgd2VsbCBh cyAob3B0aW9uYWxseSkgZW5hYmxpbmcgdGhlIHRyYW5zbWlzc2lvbiBvZgorCQkgKiBYT04gZnJh bWVzLgorCQkgKi8KKwkJZmNydGwgPSBody0+ZmMubG93X3dhdGVyOworCQlpZiAoaHctPmZjLnNl bmRfeG9uKQorCQkJZmNydGwgfD0gRTEwMDBfRkNSVExfWE9ORTsKKworCQlmY3J0aCA9IGh3LT5m Yy5oaWdoX3dhdGVyOworCX0KKwl3cjMyKEUxMDAwX0ZDUlRMLCBmY3J0bCk7CisJd3IzMihFMTAw MF9GQ1JUSCwgZmNydGgpOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9z ZXRfZGVmYXVsdF9mYyAtIFNldCBmbG93IGNvbnRyb2wgZGVmYXVsdCB2YWx1ZXMKKyAqICBAaHc6 IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZWFkIHRoZSBFRVBST00gZm9y IHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgZmxvdyBjb250cm9sIGFuZCBzdG9yZSB0aGUKKyAqICB2 YWx1ZXMuCisgKiovCitzdGF0aWMgczMyIGlnYl9zZXRfZGVmYXVsdF9mYyhzdHJ1Y3QgZTEwMDBf aHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgbnZtX2RhdGE7CisKKwkvKgorCSAq IFJlYWQgYW5kIHN0b3JlIHdvcmQgMHgwRiBvZiB0aGUgRUVQUk9NLiBUaGlzIHdvcmQgY29udGFp bnMgYml0cworCSAqIHRoYXQgZGV0ZXJtaW5lIHRoZSBoYXJkd2FyZSdzIGRlZmF1bHQgUEFVU0Ug KGZsb3cgY29udHJvbCkgbW9kZSwKKwkgKiBhIGJpdCB0aGF0IGRldGVybWluZXMgd2hldGhlciB0 aGUgSFcgZGVmYXVsdHMgdG8gZW5hYmxpbmcgb3IKKwkgKiBkaXNhYmxpbmcgYXV0by1uZWdvdGlh dGlvbiwgYW5kIHRoZSBkaXJlY3Rpb24gb2YgdGhlCisJICogU1cgZGVmaW5lZCBwaW5zLiBJZiB0 aGVyZSBpcyBubyBTVyBvdmVyLXJpZGUgb2YgdGhlIGZsb3cKKwkgKiBjb250cm9sIHNldHRpbmcs IHRoZW4gdGhlIHZhcmlhYmxlIGh3LT5mYyB3aWxsCisJICogYmUgaW5pdGlhbGl6ZWQgYmFzZWQg b24gYSB2YWx1ZSBpbiB0aGUgRUVQUk9NLgorCSAqLworCXJldF92YWwgPSBody0+bnZtLm9wcy5y ZWFkX252bShodywgTlZNX0lOSVRfQ09OVFJPTDJfUkVHLCAxLAorCQkJCSAgICAgICAmbnZtX2Rh dGEpOworCisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJ CWdvdG8gb3V0OworCX0KKworCWlmICgobnZtX2RhdGEgJiBOVk1fV09SRDBGX1BBVVNFX01BU0sp ID09IDApCisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKKwllbHNlIGlmICgobnZtX2Rh dGEgJiBOVk1fV09SRDBGX1BBVVNFX01BU0spID09CisJCSBOVk1fV09SRDBGX0FTTV9ESVIpCisJ CWh3LT5mYy50eXBlID0gZTEwMDBfZmNfdHhfcGF1c2U7CisJZWxzZQorCQlody0+ZmMudHlwZSA9 IGUxMDAwX2ZjX2Z1bGw7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAg aWdiX2ZvcmNlX21hY19mYyAtIEZvcmNlIHRoZSBNQUMncyBmbG93IGNvbnRyb2wgc2V0dGluZ3MK KyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBGb3JjZSB0aGUg TUFDJ3MgZmxvdyBjb250cm9sIHNldHRpbmdzLiAgU2V0cyB0aGUgVEZDRSBhbmQgUkZDRSBiaXRz IGluIHRoZQorICogIGRldmljZSBjb250cm9sIHJlZ2lzdGVyIHRvIHJlZmxlY3QgdGhlIGFkYXB0 ZXIgc2V0dGluZ3MuICBURkNFIGFuZCBSRkNFCisgKiAgbmVlZCB0byBiZSBleHBsaWNpdGx5IHNl dCBieSBzb2Z0d2FyZSB3aGVuIGEgY29wcGVyIFBIWSBpcyB1c2VkIGJlY2F1c2UKKyAqICBhdXRv bmVnb3RpYXRpb24gaXMgbWFuYWdlZCBieSB0aGUgUEhZIHJhdGhlciB0aGFuIHRoZSBNQUMuICBT b2Z0d2FyZSBtdXN0CisgKiAgYWxzbyBjb25maWd1cmUgdGhlc2UgYml0cyB3aGVuIGxpbmsgaXMg Zm9yY2VkIG9uIGEgZmliZXIgY29ubmVjdGlvbi4KKyAqKi8KK3MzMiBpZ2JfZm9yY2VfbWFjX2Zj KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIGN0cmw7CisJczMyIHJldF92YWwgPSAwOwor CisJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CisKKwkvKgorCSAqIEJlY2F1c2Ugd2UgZGlkbid0 IGdldCBsaW5rIHZpYSB0aGUgaW50ZXJuYWwgYXV0by1uZWdvdGlhdGlvbgorCSAqIG1lY2hhbmlz bSAod2UgZWl0aGVyIGZvcmNlZCBsaW5rIG9yIHdlIGdvdCBsaW5rIHZpYSBQSFkKKwkgKiBhdXRv LW5lZyksIHdlIGhhdmUgdG8gbWFudWFsbHkgZW5hYmxlL2Rpc2FibGUgdHJhbnNtaXQgYW4KKwkg KiByZWNlaXZlIGZsb3cgY29udHJvbC4KKwkgKgorCSAqIFRoZSAiQ2FzZSIgc3RhdGVtZW50IGJl bG93IGVuYWJsZXMvZGlzYWJsZSBmbG93IGNvbnRyb2wKKwkgKiBhY2NvcmRpbmcgdG8gdGhlICJo dy0+ZmMudHlwZSIgcGFyYW1ldGVyLgorCSAqCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0 aGUgImZjIiBwYXJhbWV0ZXIgYXJlOgorCSAqICAgICAgMDogIEZsb3cgY29udHJvbCBpcyBjb21w bGV0ZWx5IGRpc2FibGVkCisJICogICAgICAxOiAgUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQg KHdlIGNhbiByZWNlaXZlIHBhdXNlCisJICogICAgICAgICAgZnJhbWVzIGJ1dCBub3Qgc2VuZCBw YXVzZSBmcmFtZXMpLgorCSAqICAgICAgMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3 ZSBjYW4gc2VuZCBwYXVzZSBmcmFtZXMKKwkgKiAgICAgICAgICBmcmFtZXMgYnV0IHdlIGRvIG5v dCByZWNlaXZlIHBhdXNlIGZyYW1lcykuCisJICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxv dyBjb250cm9sIChzeW1tZXRyaWMpIGlzIGVuYWJsZWQuCisJICogIG90aGVyOiAgTm8gb3RoZXIg dmFsdWVzIHNob3VsZCBiZSBwb3NzaWJsZSBhdCB0aGlzIHBvaW50LgorCSAqLworCWh3X2RiZygi aHctPmZjLnR5cGUgPSAldVxuIiwgaHctPmZjLnR5cGUpOworCisJc3dpdGNoIChody0+ZmMudHlw ZSkgeworCWNhc2UgZTEwMDBfZmNfbm9uZToKKwkJY3RybCAmPSAofihFMTAwMF9DVFJMX1RGQ0Ug fCBFMTAwMF9DVFJMX1JGQ0UpKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY19yeF9wYXVzZToK KwkJY3RybCAmPSAofkUxMDAwX0NUUkxfVEZDRSk7CisJCWN0cmwgfD0gRTEwMDBfQ1RSTF9SRkNF OworCQlicmVhazsKKwljYXNlIGUxMDAwX2ZjX3R4X3BhdXNlOgorCQljdHJsICY9ICh+RTEwMDBf Q1RSTF9SRkNFKTsKKwkJY3RybCB8PSBFMTAwMF9DVFJMX1RGQ0U7CisJCWJyZWFrOworCWNhc2Ug ZTEwMDBfZmNfZnVsbDoKKwkJY3RybCB8PSAoRTEwMDBfQ1RSTF9URkNFIHwgRTEwMDBfQ1RSTF9S RkNFKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaHdfZGJnKCJGbG93IGNvbnRyb2wgcGFyYW0g c2V0IGluY29ycmVjdGx5XG4iKTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfQ09ORklHOworCQln b3RvIG91dDsKKwl9CisKKwl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworCitvdXQ6CisJcmV0dXJu IHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9jb25maWdfZmNfYWZ0ZXJfbGlua191cCAtIENv bmZpZ3VyZXMgZmxvdyBjb250cm9sIGFmdGVyIGxpbmsKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhl IEhXIHN0cnVjdHVyZQorICoKKyAqICBDaGVja3MgdGhlIHN0YXR1cyBvZiBhdXRvLW5lZ290aWF0 aW9uIGFmdGVyIGxpbmsgdXAgdG8gZW5zdXJlIHRoYXQgdGhlCisgKiAgc3BlZWQgYW5kIGR1cGxl eCB3ZXJlIG5vdCBmb3JjZWQuICBJZiB0aGUgbGluayBuZWVkZWQgdG8gYmUgZm9yY2VkLCB0aGVu CisgKiAgZmxvdyBjb250cm9sIG5lZWRzIHRvIGJlIGZvcmNlZCBhbHNvLiAgSWYgYXV0by1uZWdv dGlhdGlvbiBpcyBlbmFibGVkCisgKiAgYW5kIGRpZCBub3QgZmFpbCwgdGhlbiB3ZSBjb25maWd1 cmUgZmxvdyBjb250cm9sIGJhc2VkIG9uIG91ciBsaW5rCisgKiAgcGFydG5lci4KKyAqKi8KK3Mz MiBpZ2JfY29uZmlnX2ZjX2FmdGVyX2xpbmtfdXAoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlz dHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXMzMiByZXRfdmFsID0gMDsK Kwl1MTYgbWlpX3N0YXR1c19yZWcsIG1paV9ud2F5X2Fkdl9yZWcsIG1paV9ud2F5X2xwX2FiaWxp dHlfcmVnOworCXUxNiBzcGVlZCwgZHVwbGV4OworCisJLyoKKwkgKiBDaGVjayBmb3IgdGhlIGNh c2Ugd2hlcmUgd2UgaGF2ZSBmaWJlciBtZWRpYSBhbmQgYXV0by1uZWcgZmFpbGVkCisJICogc28g d2UgaGFkIHRvIGZvcmNlIGxpbmsuICBJbiB0aGlzIGNhc2UsIHdlIG5lZWQgdG8gZm9yY2UgdGhl CisJICogY29uZmlndXJhdGlvbiBvZiB0aGUgTUFDIHRvIG1hdGNoIHRoZSAiZmMiIHBhcmFtZXRl ci4KKwkgKi8KKwlpZiAobWFjLT5hdXRvbmVnX2ZhaWxlZCkgeworCQlpZiAoaHctPnBoeS5tZWRp YV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIgfHwKKwkJICAgIGh3LT5waHkubWVkaWFf dHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykKKwkJCXJldF92YWwgPSBp Z2JfZm9yY2VfbWFjX2ZjKGh3KTsKKwl9IGVsc2UgeworCQlpZiAoaHctPnBoeS5tZWRpYV90eXBl ID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKQorCQkJcmV0X3ZhbCA9IGlnYl9mb3JjZV9tYWNf ZmMoaHcpOworCX0KKworCWlmIChyZXRfdmFsKSB7CisJCWh3X2RiZygiRXJyb3IgZm9yY2luZyBm bG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwkvKgorCSAqIENo ZWNrIGZvciB0aGUgY2FzZSB3aGVyZSB3ZSBoYXZlIGNvcHBlciBtZWRpYSBhbmQgYXV0by1uZWcg aXMKKwkgKiBlbmFibGVkLiAgSW4gdGhpcyBjYXNlLCB3ZSBuZWVkIHRvIGNoZWNrIGFuZCBzZWUg aWYgQXV0by1OZWcKKwkgKiBoYXMgY29tcGxldGVkLCBhbmQgaWYgc28sIGhvdyB0aGUgUEhZIGFu ZCBsaW5rIHBhcnRuZXIgaGFzCisJICogZmxvdyBjb250cm9sIGNvbmZpZ3VyZWQuCisJICovCisJ aWYgKChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpICYmIG1h Yy0+YXV0b25lZykgeworCQkvKgorCQkgKiBSZWFkIHRoZSBNSUkgU3RhdHVzIFJlZ2lzdGVyIGFu ZCBjaGVjayB0byBzZWUgaWYgQXV0b05lZworCQkgKiBoYXMgY29tcGxldGVkLiAgV2UgcmVhZCB0 aGlzIHR3aWNlIGJlY2F1c2UgdGhpcyByZWcgaGFzCisJCSAqIHNvbWUgInN0aWNreSIgKGxhdGNo ZWQpIGJpdHMuCisJCSAqLworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3 LCBQSFlfU1RBVFVTLAorCQkJCQkJICAgJm1paV9zdGF0dXNfcmVnKTsKKwkJaWYgKHJldF92YWwp CisJCQlnb3RvIG91dDsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywg UEhZX1NUQVRVUywKKwkJCQkJCSAgICZtaWlfc3RhdHVzX3JlZyk7CisJCWlmIChyZXRfdmFsKQor CQkJZ290byBvdXQ7CisKKwkJaWYgKCEobWlpX3N0YXR1c19yZWcgJiBNSUlfU1JfQVVUT05FR19D T01QTEVURSkpIHsKKwkJCWh3X2RiZygiQ29wcGVyIFBIWSBhbmQgQXV0byBOZWcgIgorCQkJCSAi aGFzIG5vdCBjb21wbGV0ZWQuXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyoKKwkJICog VGhlIEF1dG9OZWcgcHJvY2VzcyBoYXMgY29tcGxldGVkLCBzbyB3ZSBub3cgbmVlZCB0bworCQkg KiByZWFkIGJvdGggdGhlIEF1dG8gTmVnb3RpYXRpb24gQWR2ZXJ0aXNlbWVudAorCQkgKiBSZWdp c3RlciAoQWRkcmVzcyA0KSBhbmQgdGhlIEF1dG9fTmVnb3RpYXRpb24gQmFzZQorCQkgKiBQYWdl IEFiaWxpdHkgUmVnaXN0ZXIgKEFkZHJlc3MgNSkgdG8gZGV0ZXJtaW5lIGhvdworCQkgKiBmbG93 IGNvbnRyb2wgd2FzIG5lZ290aWF0ZWQuCisJCSAqLworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMu cmVhZF9waHlfcmVnKGh3LCBQSFlfQVVUT05FR19BRFYsCisJCQkJCSAgICAmbWlpX253YXlfYWR2 X3JlZyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCXJldF92YWwgPSBody0+cGh5 Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9MUF9BQklMSVRZLAorCQkJCQkgICAgJm1paV9ud2F5 X2xwX2FiaWxpdHlfcmVnKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQkvKgor CQkgKiBUd28gYml0cyBpbiB0aGUgQXV0byBOZWdvdGlhdGlvbiBBZHZlcnRpc2VtZW50IFJlZ2lz dGVyCisJCSAqIChBZGRyZXNzIDQpIGFuZCB0d28gYml0cyBpbiB0aGUgQXV0byBOZWdvdGlhdGlv biBCYXNlCisJCSAqIFBhZ2UgQWJpbGl0eSBSZWdpc3RlciAoQWRkcmVzcyA1KSBkZXRlcm1pbmUg ZmxvdyBjb250cm9sCisJCSAqIGZvciBib3RoIHRoZSBQSFkgYW5kIHRoZSBsaW5rIHBhcnRuZXIu ICBUaGUgZm9sbG93aW5nCisJCSAqIHRhYmxlLCB0YWtlbiBvdXQgb2YgdGhlIElFRUUgODAyLjNh Yi9ENi4wIGRhdGVkIE1hcmNoIDI1LAorCQkgKiAxOTk5LCBkZXNjcmliZXMgdGhlc2UgUEFVU0Ug cmVzb2x1dGlvbiBiaXRzIGFuZCBob3cgZmxvdworCQkgKiBjb250cm9sIGlzIGRldGVybWluZWQg YmFzZWQgdXBvbiB0aGVzZSBzZXR0aW5ncy4KKwkJICogTk9URTogIERDID0gRG9uJ3QgQ2FyZQor CQkgKgorCQkgKiAgIExPQ0FMIERFVklDRSAgfCAgIExJTksgUEFSVE5FUgorCQkgKiBQQVVTRSB8 IEFTTV9ESVIgfCBQQVVTRSB8IEFTTV9ESVIgfCBOSUMgUmVzb2x1dGlvbgorCQkgKi0tLS0tLS18 LS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAqICAg MCAgIHwgICAgMCAgICB8ICBEQyAgIHwgICBEQyAgICB8IGUxMDAwX2ZjX25vbmUKKwkJICogICAw ICAgfCAgICAxICAgIHwgICAwICAgfCAgIERDICAgIHwgZTEwMDBfZmNfbm9uZQorCQkgKiAgIDAg ICB8ICAgIDEgICAgfCAgIDEgICB8ICAgIDAgICAgfCBlMTAwMF9mY19ub25lCisJCSAqICAgMCAg IHwgICAgMSAgICB8ICAgMSAgIHwgICAgMSAgICB8IGUxMDAwX2ZjX3R4X3BhdXNlCisJCSAqICAg MSAgIHwgICAgMCAgICB8ICAgMCAgIHwgICBEQyAgICB8IGUxMDAwX2ZjX25vbmUKKwkJICogICAx ICAgfCAgIERDICAgIHwgICAxICAgfCAgIERDICAgIHwgZTEwMDBfZmNfZnVsbAorCQkgKiAgIDEg ICB8ICAgIDEgICAgfCAgIDAgICB8ICAgIDAgICAgfCBlMTAwMF9mY19ub25lCisJCSAqICAgMSAg IHwgICAgMSAgICB8ICAgMCAgIHwgICAgMSAgICB8IGUxMDAwX2ZjX3J4X3BhdXNlCisJCSAqCisJ CSAqIEFyZSBib3RoIFBBVVNFIGJpdHMgc2V0IHRvIDE/ICBJZiBzbywgdGhpcyBpbXBsaWVzCisJ CSAqIFN5bW1ldHJpYyBGbG93IENvbnRyb2wgaXMgZW5hYmxlZCBhdCBib3RoIGVuZHMuICBUaGUK KwkJICogQVNNX0RJUiBiaXRzIGFyZSBpcnJlbGV2YW50IHBlciB0aGUgc3BlYy4KKwkJICoKKwkJ ICogRm9yIFN5bW1ldHJpYyBGbG93IENvbnRyb2w6CisJCSAqCisJCSAqICAgTE9DQUwgREVWSUNF ICB8ICAgTElOSyBQQVJUTkVSCisJCSAqIFBBVVNFIHwgQVNNX0RJUiB8IFBBVVNFIHwgQVNNX0RJ UiB8IFJlc3VsdAorCQkgKi0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS18LS0tLS0tLS0tfC0tLS0t LS0tLS0tLS0tLS0tLS0tCisJCSAqICAgMSAgIHwgICBEQyAgICB8ICAgMSAgIHwgICBEQyAgICB8 IEUxMDAwX2ZjX2Z1bGwKKwkJICoKKwkJICovCisJCWlmICgobWlpX253YXlfYWR2X3JlZyAmIE5X QVlfQVJfUEFVU0UpICYmCisJCSAgICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZX0xQ QVJfUEFVU0UpKSB7CisJCQkvKgorCQkJICogTm93IHdlIG5lZWQgdG8gY2hlY2sgaWYgdGhlIHVz ZXIgc2VsZWN0ZWQgUlggT05MWQorCQkJICogb2YgcGF1c2UgZnJhbWVzLiAgSW4gdGhpcyBjYXNl LCB3ZSBoYWQgdG8gYWR2ZXJ0aXNlCisJCQkgKiBGVUxMIGZsb3cgY29udHJvbCBiZWNhdXNlIHdl IGNvdWxkIG5vdCBhZHZlcnRpc2UgUlgKKwkJCSAqIE9OTFkuIEhlbmNlLCB3ZSBtdXN0IG5vdyBj aGVjayB0byBzZWUgaWYgd2UgbmVlZCB0bworCQkJICogdHVybiBPRkYgIHRoZSBUUkFOU01JU1NJ T04gb2YgUEFVU0UgZnJhbWVzLgorCQkJICovCisJCQlpZiAoaHctPmZjLm9yaWdpbmFsX3R5cGUg PT0gZTEwMDBfZmNfZnVsbCkgeworCQkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKKwkJ CQlod19kYmcoIkZsb3cgQ29udHJvbCA9IEZVTEwuXHJcbiIpOworCQkJfSBlbHNlIHsKKwkJCQlo dy0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOworCQkJCWh3X2RiZygiRmxvdyBDb250cm9s ID0gIgorCQkJCSAgICAgICAiUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworCQkJfQorCQl9 CisJCS8qCisJCSAqIEZvciByZWNlaXZpbmcgUEFVU0UgZnJhbWVzIE9OTFkuCisJCSAqCisJCSAq ICAgTE9DQUwgREVWSUNFICB8ICAgTElOSyBQQVJUTkVSCisJCSAqIFBBVVNFIHwgQVNNX0RJUiB8 IFBBVVNFIHwgQVNNX0RJUiB8IFJlc3VsdAorCQkgKi0tLS0tLS18LS0tLS0tLS0tfC0tLS0tLS18 LS0tLS0tLS0tfC0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCSAqICAgMCAgIHwgICAgMSAgICB8ICAg MSAgIHwgICAgMSAgICB8IGUxMDAwX2ZjX3R4X3BhdXNlCisJCSAqLworCQllbHNlIGlmICghKG1p aV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX1BBVVNFKSAmJgorCQkJICAobWlpX253YXlfYWR2X3Jl ZyAmIE5XQVlfQVJfQVNNX0RJUikgJiYKKwkJCSAgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYg TldBWV9MUEFSX1BBVVNFKSAmJgorCQkJICAobWlpX253YXlfbHBfYWJpbGl0eV9yZWcgJiBOV0FZ X0xQQVJfQVNNX0RJUikpIHsKKwkJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfdHhfcGF1c2U7CisJ CQlod19kYmcoIkZsb3cgQ29udHJvbCA9IFRYIFBBVVNFIGZyYW1lcyBvbmx5LlxyXG4iKTsKKwkJ fQorCQkvKgorCQkgKiBGb3IgdHJhbnNtaXR0aW5nIFBBVVNFIGZyYW1lcyBPTkxZLgorCQkgKgor CQkgKiAgIExPQ0FMIERFVklDRSAgfCAgIExJTksgUEFSVE5FUgorCQkgKiBQQVVTRSB8IEFTTV9E SVIgfCBQQVVTRSB8IEFTTV9ESVIgfCBSZXN1bHQKKwkJICotLS0tLS0tfC0tLS0tLS0tLXwtLS0t LS0tfC0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLS0tLS0tLQorCQkgKiAgIDEgICB8ICAgIDEgICAg fCAgIDAgICB8ICAgIDEgICAgfCBlMTAwMF9mY19yeF9wYXVzZQorCQkgKi8KKwkJZWxzZSBpZiAo KG1paV9ud2F5X2Fkdl9yZWcgJiBOV0FZX0FSX1BBVVNFKSAmJgorCQkJIChtaWlfbndheV9hZHZf cmVnICYgTldBWV9BUl9BU01fRElSKSAmJgorCQkJICEobWlpX253YXlfbHBfYWJpbGl0eV9yZWcg JiBOV0FZX0xQQVJfUEFVU0UpICYmCisJCQkgKG1paV9ud2F5X2xwX2FiaWxpdHlfcmVnICYgTldB WV9MUEFSX0FTTV9ESVIpKSB7CisJCQlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX3J4X3BhdXNlOwor CQkJaHdfZGJnKCJGbG93IENvbnRyb2wgPSBSWCBQQVVTRSBmcmFtZXMgb25seS5cclxuIik7CisJ CX0KKwkJLyoKKwkJICogUGVyIHRoZSBJRUVFIHNwZWMsIGF0IHRoaXMgcG9pbnQgZmxvdyBjb250 cm9sIHNob3VsZCBiZQorCQkgKiBkaXNhYmxlZC4gIEhvd2V2ZXIsIHdlIHdhbnQgdG8gY29uc2lk ZXIgdGhhdCB3ZSBjb3VsZAorCQkgKiBiZSBjb25uZWN0ZWQgdG8gYSBsZWdhY3kgc3dpdGNoIHRo YXQgZG9lc24ndCBhZHZlcnRpc2UKKwkJICogZGVzaXJlZCBmbG93IGNvbnRyb2wsIGJ1dCBjYW4g YmUgZm9yY2VkIG9uIHRoZSBsaW5rCisJCSAqIHBhcnRuZXIuICBTbyBpZiB3ZSBhZHZlcnRpc2Vk IG5vIGZsb3cgY29udHJvbCwgdGhhdCBpcworCQkgKiB3aGF0IHdlIHdpbGwgcmVzb2x2ZSB0by4g IElmIHdlIGFkdmVydGlzZWQgc29tZSBraW5kIG9mCisJCSAqIHJlY2VpdmUgY2FwYWJpbGl0eSAo UnggUGF1c2UgT25seSBvciBGdWxsIEZsb3cgQ29udHJvbCkKKwkJICogYW5kIHRoZSBsaW5rIHBh cnRuZXIgYWR2ZXJ0aXNlZCBub25lLCB3ZSB3aWxsIGNvbmZpZ3VyZQorCQkgKiBvdXJzZWx2ZXMg dG8gZW5hYmxlIFJ4IEZsb3cgQ29udHJvbCBvbmx5LiAgV2UgY2FuIGRvCisJCSAqIHRoaXMgc2Fm ZWx5IGZvciB0d28gcmVhc29uczogIElmIHRoZSBsaW5rIHBhcnRuZXIgcmVhbGx5CisJCSAqIGRp ZG4ndCB3YW50IGZsb3cgY29udHJvbCBlbmFibGVkLCBhbmQgd2UgZW5hYmxlIFJ4LCBubworCQkg KiBoYXJtIGRvbmUgc2luY2Ugd2Ugd29uJ3QgYmUgcmVjZWl2aW5nIGFueSBQQVVTRSBmcmFtZXMK KwkJICogYW55d2F5LiAgSWYgdGhlIGludGVudCBvbiB0aGUgbGluayBwYXJ0bmVyIHdhcyB0byBo YXZlCisJCSAqIGZsb3cgY29udHJvbCBlbmFibGVkLCB0aGVuIGJ5IHVzIGVuYWJsaW5nIFJYIG9u bHksIHdlCisJCSAqIGNhbiBhdCBsZWFzdCByZWNlaXZlIHBhdXNlIGZyYW1lcyBhbmQgcHJvY2Vz cyB0aGVtLgorCQkgKiBUaGlzIGlzIGEgZ29vZCBpZGVhIGJlY2F1c2UgaW4gbW9zdCBjYXNlcywg c2luY2Ugd2UgYXJlCisJCSAqIHByZWRvbWluYW50bHkgYSBzZXJ2ZXIgTklDLCBtb3JlIHRpbWVz IHRoYW4gbm90IHdlIHdpbGwKKwkJICogYmUgYXNrZWQgdG8gZGVsYXkgdHJhbnNtaXNzaW9uIG9m IHBhY2tldHMgdGhhbiBhc2tpbmcKKwkJICogb3VyIGxpbmsgcGFydG5lciB0byBwYXVzZSB0cmFu c21pc3Npb24gb2YgZnJhbWVzLgorCQkgKi8KKwkJZWxzZSBpZiAoKGh3LT5mYy5vcmlnaW5hbF90 eXBlID09IGUxMDAwX2ZjX25vbmUgfHwKKwkJCSAgaHctPmZjLm9yaWdpbmFsX3R5cGUgPT0gZTEw MDBfZmNfdHhfcGF1c2UpIHx8CisJCQkgaHctPmZjLnN0cmljdF9pZWVlKSB7CisJCQlody0+ZmMu dHlwZSA9IGUxMDAwX2ZjX25vbmU7CisJCQlod19kYmcoIkZsb3cgQ29udHJvbCA9IE5PTkUuXHJc biIpOworCQl9IGVsc2UgeworCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9wYXVzZTsKKwkJ CWh3X2RiZygiRmxvdyBDb250cm9sID0gUlggUEFVU0UgZnJhbWVzIG9ubHkuXHJcbiIpOworCQl9 CisKKwkJLyoKKwkJICogTm93IHdlIG5lZWQgdG8gZG8gb25lIGxhc3QgY2hlY2suLi4gIElmIHdl IGF1dG8tCisJCSAqIG5lZ290aWF0ZWQgdG8gSEFMRiBEVVBMRVgsIGZsb3cgY29udHJvbCBzaG91 bGQgbm90IGJlCisJCSAqIGVuYWJsZWQgcGVyIElFRUUgODAyLjMgc3BlYy4KKwkJICovCisJCXJl dF92YWwgPSBody0+bWFjLm9wcy5nZXRfc3BlZWRfYW5kX2R1cGxleChodywgJnNwZWVkLCAmZHVw bGV4KTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWh3X2RiZygiRXJyb3IgZ2V0dGluZyBsaW5rIHNw ZWVkIGFuZCBkdXBsZXhcbiIpOworCQkJZ290byBvdXQ7CisJCX0KKworCQlpZiAoZHVwbGV4ID09 IEhBTEZfRFVQTEVYKQorCQkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19ub25lOworCisJCS8qCisJ CSAqIE5vdyB3ZSBjYWxsIGEgc3Vicm91dGluZSB0byBhY3R1YWxseSBmb3JjZSB0aGUgTUFDCisJ CSAqIGNvbnRyb2xsZXIgdG8gdXNlIHRoZSBjb3JyZWN0IGZsb3cgY29udHJvbCBzZXR0aW5ncy4K KwkJICovCisJCXJldF92YWwgPSBpZ2JfZm9yY2VfbWFjX2ZjKGh3KTsKKwkJaWYgKHJldF92YWwp IHsKKwkJCWh3X2RiZygiRXJyb3IgZm9yY2luZyBmbG93IGNvbnRyb2wgc2V0dGluZ3NcbiIpOwor CQkJZ290byBvdXQ7CisJCX0KKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoq CisgKiAgaWdiX2dldF9zcGVlZF9hbmRfZHVwbGV4X2NvcHBlciAtIFJldHJlaXZlIGN1cnJlbnQg c3BlZWQvZHVwbGV4CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBA c3BlZWQ6IHN0b3JlcyB0aGUgY3VycmVudCBzcGVlZAorICogIEBkdXBsZXg6IHN0b3JlcyB0aGUg Y3VycmVudCBkdXBsZXgKKyAqCisgKiAgUmVhZCB0aGUgc3RhdHVzIHJlZ2lzdGVyIGZvciB0aGUg Y3VycmVudCBzcGVlZC9kdXBsZXggYW5kIHN0b3JlIHRoZSBjdXJyZW50CisgKiAgc3BlZWQgYW5k IGR1cGxleCBmb3IgY29wcGVyIGNvbm5lY3Rpb25zLgorICoqLworczMyIGlnYl9nZXRfc3BlZWRf YW5kX2R1cGxleF9jb3BwZXIoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2ICpzcGVlZCwKKwkJCQkg ICAgICB1MTYgKmR1cGxleCkKK3sKKwl1MzIgc3RhdHVzOworCisJc3RhdHVzID0gcmQzMihFMTAw MF9TVEFUVVMpOworCWlmIChzdGF0dXMgJiBFMTAwMF9TVEFUVVNfU1BFRURfMTAwMCkgeworCQkq c3BlZWQgPSBTUEVFRF8xMDAwOworCQlod19kYmcoIjEwMDAgTWJzLCAiKTsKKwl9IGVsc2UgaWYg KHN0YXR1cyAmIEUxMDAwX1NUQVRVU19TUEVFRF8xMDApIHsKKwkJKnNwZWVkID0gU1BFRURfMTAw OworCQlod19kYmcoIjEwMCBNYnMsICIpOworCX0gZWxzZSB7CisJCSpzcGVlZCA9IFNQRUVEXzEw OworCQlod19kYmcoIjEwIE1icywgIik7CisJfQorCisJaWYgKHN0YXR1cyAmIEUxMDAwX1NUQVRV U19GRCkgeworCQkqZHVwbGV4ID0gRlVMTF9EVVBMRVg7CisJCWh3X2RiZygiRnVsbCBEdXBsZXhc biIpOworCX0gZWxzZSB7CisJCSpkdXBsZXggPSBIQUxGX0RVUExFWDsKKwkJaHdfZGJnKCJIYWxm IER1cGxleFxuIik7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogIGlnYl9nZXRfaHdf c2VtYXBob3JlIC0gQWNxdWlyZSBoYXJkd2FyZSBzZW1hcGhvcmUKKyAqICBAaHc6IHBvaW50ZXIg dG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBBY3F1aXJlIHRoZSBIVyBzZW1hcGhvcmUgdG8g YWNjZXNzIHRoZSBQSFkgb3IgTlZNCisgKiovCitzMzIgaWdiX2dldF9od19zZW1hcGhvcmUoc3Ry dWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgc3dzbTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJczMy IHRpbWVvdXQgPSBody0+bnZtLndvcmRfc2l6ZSArIDE7CisJczMyIGkgPSAwOworCisJLyogR2V0 IHRoZSBTVyBzZW1hcGhvcmUgKi8KKwl3aGlsZSAoaSA8IHRpbWVvdXQpIHsKKwkJc3dzbSA9IHJk MzIoRTEwMDBfU1dTTSk7CisJCWlmICghKHN3c20gJiBFMTAwMF9TV1NNX1NNQkkpKQorCQkJYnJl YWs7CisKKwkJdWRlbGF5KDUwKTsKKwkJaSsrOworCX0KKworCWlmIChpID09IHRpbWVvdXQpIHsK KwkJaHdfZGJnKCJEcml2ZXIgY2FuJ3QgYWNjZXNzIGRldmljZSAtIFNNQkkgYml0IGlzIHNldC5c biIpOworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9OVk07CisJCWdvdG8gb3V0OworCX0KKworCS8q IEdldCB0aGUgRlcgc2VtYXBob3JlLiAqLworCWZvciAoaSA9IDA7IGkgPCB0aW1lb3V0OyBpKysp IHsKKwkJc3dzbSA9IHJkMzIoRTEwMDBfU1dTTSk7CisJCXdyMzIoRTEwMDBfU1dTTSwgc3dzbSB8 IEUxMDAwX1NXU01fU1dFU01CSSk7CisKKwkJLyogU2VtYXBob3JlIGFjcXVpcmVkIGlmIGJpdCBs YXRjaGVkICovCisJCWlmIChyZDMyKEUxMDAwX1NXU00pICYgRTEwMDBfU1dTTV9TV0VTTUJJKQor CQkJYnJlYWs7CisKKwkJdWRlbGF5KDUwKTsKKwl9CisKKwlpZiAoaSA9PSB0aW1lb3V0KSB7CisJ CS8qIFJlbGVhc2Ugc2VtYXBob3JlcyAqLworCQlpZ2JfcHV0X2h3X3NlbWFwaG9yZShodyk7CisJ CWh3X2RiZygiRHJpdmVyIGNhbid0IGFjY2VzcyB0aGUgTlZNXG4iKTsKKwkJcmV0X3ZhbCA9IC1F MTAwMF9FUlJfTlZNOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsK K30KKworLyoqCisgKiAgaWdiX3B1dF9od19zZW1hcGhvcmUgLSBSZWxlYXNlIGhhcmR3YXJlIHNl bWFwaG9yZQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJl bGVhc2UgaGFyZHdhcmUgc2VtYXBob3JlIHVzZWQgdG8gYWNjZXNzIHRoZSBQSFkgb3IgTlZNCisg KiovCit2b2lkIGlnYl9wdXRfaHdfc2VtYXBob3JlKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJ dTMyIHN3c207CisKKwlzd3NtID0gcmQzMihFMTAwMF9TV1NNKTsKKworCXN3c20gJj0gfihFMTAw MF9TV1NNX1NNQkkgfCBFMTAwMF9TV1NNX1NXRVNNQkkpOworCisJd3IzMihFMTAwMF9TV1NNLCBz d3NtKTsKK30KKworLyoqCisgKiAgaWdiX2dldF9hdXRvX3JkX2RvbmUgLSBDaGVjayBmb3IgYXV0 byByZWFkIGNvbXBsZXRpb24KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQor ICoKKyAqICBDaGVjayBFRVBST00gZm9yIEF1dG8gUmVhZCBkb25lIGJpdC4KKyAqKi8KK3MzMiBp Z2JfZ2V0X2F1dG9fcmRfZG9uZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiBpID0gMDsK KwlzMzIgcmV0X3ZhbCA9IDA7CisKKworCXdoaWxlIChpIDwgQVVUT19SRUFEX0RPTkVfVElNRU9V VCkgeworCQlpZiAocmQzMihFMTAwMF9FRUNEKSAmIEUxMDAwX0VFQ0RfQVVUT19SRCkKKwkJCWJy ZWFrOworCQltc2xlZXAoMSk7CisJCWkrKzsKKwl9CisKKwlpZiAoaSA9PSBBVVRPX1JFQURfRE9O RV9USU1FT1VUKSB7CisJCWh3X2RiZygiQXV0byByZWFkIGJ5IEhXIGZyb20gTlZNIGhhcyBub3Qg Y29tcGxldGVkLlxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX1JFU0VUOworCQlnb3RvIG91 dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3ZhbGlk X2xlZF9kZWZhdWx0IC0gVmVyaWZ5IGEgdmFsaWQgZGVmYXVsdCBMRUQgY29uZmlnCisgKiAgQGh3 OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAZGF0YTogcG9pbnRlciB0byB0aGUg TlZNIChFRVBST00pCisgKgorICogIFJlYWQgdGhlIEVFUFJPTSBmb3IgdGhlIGN1cnJlbnQgZGVm YXVsdCBMRUQgY29uZmlndXJhdGlvbi4gIElmIHRoZQorICogIExFRCBjb25maWd1cmF0aW9uIGlz IG5vdCB2YWxpZCwgc2V0IHRvIGEgdmFsaWQgTEVEIGNvbmZpZ3VyYXRpb24uCisgKiovCitzdGF0 aWMgczMyIGlnYl92YWxpZF9sZWRfZGVmYXVsdChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgKmRh dGEpCit7CisJczMyIHJldF92YWw7CisKKwlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0o aHcsIE5WTV9JRF9MRURfU0VUVElOR1MsIDEsIGRhdGEpOworCWlmIChyZXRfdmFsKSB7CisJCWh3 X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKmRhdGEg PT0gSURfTEVEX1JFU0VSVkVEXzAwMDAgfHwgKmRhdGEgPT0gSURfTEVEX1JFU0VSVkVEX0ZGRkYp CisJCSpkYXRhID0gSURfTEVEX0RFRkFVTFQ7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30K KworLyoqCisgKiAgaWdiX2lkX2xlZF9pbml0IC0KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhX IHN0cnVjdHVyZQorICoKKyAqKi8KK3MzMiBpZ2JfaWRfbGVkX2luaXQoc3RydWN0IGUxMDAwX2h3 ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZody0+bWFjOworCXMzMiBy ZXRfdmFsOworCWNvbnN0IHUzMiBsZWRjdGxfbWFzayA9IDB4MDAwMDAwRkY7CisJY29uc3QgdTMy IGxlZGN0bF9vbiA9IEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PTjsKKwljb25zdCB1MzIgbGVkY3Rs X29mZiA9IEUxMDAwX0xFRENUTF9NT0RFX0xFRF9PRkY7CisJdTE2IGRhdGEsIGksIHRlbXA7CisJ Y29uc3QgdTE2IGxlZF9tYXNrID0gMHgwRjsKKworCXJldF92YWwgPSBpZ2JfdmFsaWRfbGVkX2Rl ZmF1bHQoaHcsICZkYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwltYWMtPmxl ZGN0bF9kZWZhdWx0ID0gcmQzMihFMTAwMF9MRURDVEwpOworCW1hYy0+bGVkY3RsX21vZGUxID0g bWFjLT5sZWRjdGxfZGVmYXVsdDsKKwltYWMtPmxlZGN0bF9tb2RlMiA9IG1hYy0+bGVkY3RsX2Rl ZmF1bHQ7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7CisJCXRlbXAgPSAoZGF0YSA+PiAo aSA8PCAyKSkgJiBsZWRfbWFzazsKKwkJc3dpdGNoICh0ZW1wKSB7CisJCWNhc2UgSURfTEVEX09O MV9ERUYyOgorCQljYXNlIElEX0xFRF9PTjFfT04yOgorCQljYXNlIElEX0xFRF9PTjFfT0ZGMjoK KwkJCW1hYy0+bGVkY3RsX21vZGUxICY9IH4obGVkY3RsX21hc2sgPDwgKGkgPDwgMykpOworCQkJ bWFjLT5sZWRjdGxfbW9kZTEgfD0gbGVkY3RsX29uIDw8IChpIDw8IDMpOworCQkJYnJlYWs7CisJ CWNhc2UgSURfTEVEX09GRjFfREVGMjoKKwkJY2FzZSBJRF9MRURfT0ZGMV9PTjI6CisJCWNhc2Ug SURfTEVEX09GRjFfT0ZGMjoKKwkJCW1hYy0+bGVkY3RsX21vZGUxICY9IH4obGVkY3RsX21hc2sg PDwgKGkgPDwgMykpOworCQkJbWFjLT5sZWRjdGxfbW9kZTEgfD0gbGVkY3RsX29mZiA8PCAoaSA8 PCAzKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyogRG8gbm90aGluZyAqLworCQkJYnJl YWs7CisJCX0KKwkJc3dpdGNoICh0ZW1wKSB7CisJCWNhc2UgSURfTEVEX0RFRjFfT04yOgorCQlj YXNlIElEX0xFRF9PTjFfT04yOgorCQljYXNlIElEX0xFRF9PRkYxX09OMjoKKwkJCW1hYy0+bGVk Y3RsX21vZGUyICY9IH4obGVkY3RsX21hc2sgPDwgKGkgPDwgMykpOworCQkJbWFjLT5sZWRjdGxf bW9kZTIgfD0gbGVkY3RsX29uIDw8IChpIDw8IDMpOworCQkJYnJlYWs7CisJCWNhc2UgSURfTEVE X0RFRjFfT0ZGMjoKKwkJY2FzZSBJRF9MRURfT04xX09GRjI6CisJCWNhc2UgSURfTEVEX09GRjFf T0ZGMjoKKwkJCW1hYy0+bGVkY3RsX21vZGUyICY9IH4obGVkY3RsX21hc2sgPDwgKGkgPDwgMykp OworCQkJbWFjLT5sZWRjdGxfbW9kZTIgfD0gbGVkY3RsX29mZiA8PCAoaSA8PCAzKTsKKwkJCWJy ZWFrOworCQlkZWZhdWx0OgorCQkJLyogRG8gbm90aGluZyAqLworCQkJYnJlYWs7CisJCX0KKwl9 CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2NsZWFudXBfbGVk IC0gU2V0IExFRCBjb25maWcgdG8gZGVmYXVsdCBvcGVyYXRpb24KKyAqICBAaHc6IHBvaW50ZXIg dG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZW1vdmUgdGhlIGN1cnJlbnQgTEVEIGNvbmZp Z3VyYXRpb24gYW5kIHNldCB0aGUgTEVEIGNvbmZpZ3VyYXRpb24KKyAqICB0byB0aGUgZGVmYXVs dCB2YWx1ZSwgc2F2ZWQgZnJvbSB0aGUgRUVQUk9NLgorICoqLworczMyIGlnYl9jbGVhbnVwX2xl ZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXdyMzIoRTEwMDBfTEVEQ1RMLCBody0+bWFjLmxl ZGN0bF9kZWZhdWx0KTsKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaWdiX2JsaW5rX2xlZCAt IEJsaW5rIExFRAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICog IEJsaW5rIHRoZSBsZWQncyB3aGljaCBhcmUgc2V0IHRvIGJlIG9uLgorICoqLworczMyIGlnYl9i bGlua19sZWQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgbGVkY3RsX2JsaW5rID0gMDsK Kwl1MzIgaTsKKworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9m aWJlcikgeworCQkvKiBhbHdheXMgYmxpbmsgTEVEMCBmb3IgUENJLUUgZmliZXIgKi8KKwkJbGVk Y3RsX2JsaW5rID0gRTEwMDBfTEVEQ1RMX0xFRDBfQkxJTksgfAorCQkgICAgIChFMTAwMF9MRURD VExfTU9ERV9MRURfT04gPDwgRTEwMDBfTEVEQ1RMX0xFRDBfTU9ERV9TSElGVCk7CisJfSBlbHNl IHsKKwkJLyoKKwkJICogc2V0IHRoZSBibGluayBiaXQgZm9yIGVhY2ggTEVEIHRoYXQncyAib24i ICgweDBFKQorCQkgKiBpbiBsZWRjdGxfbW9kZTIKKwkJICovCisJCWxlZGN0bF9ibGluayA9IGh3 LT5tYWMubGVkY3RsX21vZGUyOworCQlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQkJaWYgKCgo aHctPm1hYy5sZWRjdGxfbW9kZTIgPj4gKGkgKiA4KSkgJiAweEZGKSA9PQorCQkJICAgIEUxMDAw X0xFRENUTF9NT0RFX0xFRF9PTikKKwkJCQlsZWRjdGxfYmxpbmsgfD0gKEUxMDAwX0xFRENUTF9M RUQwX0JMSU5LIDw8CisJCQkJCQkgKGkgKiA4KSk7CisJfQorCisJd3IzMihFMTAwMF9MRURDVEws IGxlZGN0bF9ibGluayk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAgaWdiX2xlZF9vZmYg LSBUdXJuIExFRCBvZmYKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoK KyAqICBUdXJuIExFRCBvZmYuCisgKiovCitzMzIgaWdiX2xlZF9vZmYoc3RydWN0IGUxMDAwX2h3 ICpodykKK3sKKwl1MzIgY3RybDsKKworCXN3aXRjaCAoaHctPnBoeS5tZWRpYV90eXBlKSB7CisJ Y2FzZSBlMTAwMF9tZWRpYV90eXBlX2ZpYmVyOgorCQljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsK KwkJY3RybCB8PSBFMTAwMF9DVFJMX1NXRFBJTjA7CisJCWN0cmwgfD0gRTEwMDBfQ1RSTF9TV0RQ SU8wOworCQl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworCQlicmVhazsKKwljYXNlIGUxMDAwX21l ZGlhX3R5cGVfY29wcGVyOgorCQl3cjMyKEUxMDAwX0xFRENUTCwgaHctPm1hYy5sZWRjdGxfbW9k ZTEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30K KworLyoqCisgKiAgaWdiX2Rpc2FibGVfcGNpZV9tYXN0ZXIgLSBEaXNhYmxlcyBQQ0ktZXhwcmVz cyBtYXN0ZXIgYWNjZXNzCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAq CisgKiAgUmV0dXJucyAwICgwKSBpZiBzdWNjZXNzZnVsLCBlbHNlIHJldHVybnMgLTEwCisgKiAg KC1FMTAwMF9FUlJfTUFTVEVSX1JFUVVFU1RTX1BFTkRJTkcpIGlmIG1hc3RlciBkaXNhYmxlIGJp dCBoYXMgbm90IGNhc3VlZAorICogIHRoZSBtYXN0ZXIgcmVxdWVzdHMgdG8gYmUgZGlzYWJsZWQu CisgKgorICogIERpc2FibGVzIFBDSS1FeHByZXNzIG1hc3RlciBhY2Nlc3MgYW5kIHZlcmlmaWVz IHRoZXJlIGFyZSBubyBwZW5kaW5nCisgKiAgcmVxdWVzdHMuCisgKiovCitzMzIgaWdiX2Rpc2Fi bGVfcGNpZV9tYXN0ZXIoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwl1MzIgY3RybDsKKwlzMzIg dGltZW91dCA9IE1BU1RFUl9ESVNBQkxFX1RJTUVPVVQ7CisJczMyIHJldF92YWwgPSAwOworCisJ aWYgKGh3LT5idXMudHlwZSAhPSBlMTAwMF9idXNfdHlwZV9wY2lfZXhwcmVzcykKKwkJZ290byBv dXQ7CisKKwljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKKwljdHJsIHw9IEUxMDAwX0NUUkxfR0lP X01BU1RFUl9ESVNBQkxFOworCXdyMzIoRTEwMDBfQ1RSTCwgY3RybCk7CisKKwl3aGlsZSAodGlt ZW91dCkgeworCQlpZiAoIShyZDMyKEUxMDAwX1NUQVRVUykgJgorCQkgICAgICBFMTAwMF9TVEFU VVNfR0lPX01BU1RFUl9FTkFCTEUpKQorCQkJYnJlYWs7CisJCXVkZWxheSgxMDApOworCQl0aW1l b3V0LS07CisJfQorCisJaWYgKCF0aW1lb3V0KSB7CisJCWh3X2RiZygiTWFzdGVyIHJlcXVlc3Rz IGFyZSBwZW5kaW5nLlxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX01BU1RFUl9SRVFVRVNU U19QRU5ESU5HOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30K KworLyoqCisgKiAgaWdiX3Jlc2V0X2FkYXB0aXZlIC0gUmVzZXQgQWRhcHRpdmUgSW50ZXJmcmFt ZSBTcGFjaW5nCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAg UmVzZXQgdGhlIEFkYXB0aXZlIEludGVyZnJhbWUgU3BhY2luZyB0aHJvdHRsZSB0byBkZWZhdWx0 IHZhbHVlcy4KKyAqKi8KK3ZvaWQgaWdiX3Jlc2V0X2FkYXB0aXZlKHN0cnVjdCBlMTAwMF9odyAq aHcpCit7CisJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAmaHctPm1hYzsKKworCWlmICgh bWFjLT5hZGFwdGl2ZV9pZnMpIHsKKwkJaHdfZGJnKCJOb3QgaW4gQWRhcHRpdmUgSUZTIG1vZGUh XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKCFtYWMtPmlmc19wYXJhbXNfZm9yY2VkKSB7 CisJCW1hYy0+Y3VycmVudF9pZnNfdmFsID0gMDsKKwkJbWFjLT5pZnNfbWluX3ZhbCA9IElGU19N SU47CisJCW1hYy0+aWZzX21heF92YWwgPSBJRlNfTUFYOworCQltYWMtPmlmc19zdGVwX3NpemUg PSBJRlNfU1RFUDsKKwkJbWFjLT5pZnNfcmF0aW8gPSBJRlNfUkFUSU87CisJfQorCisJbWFjLT5p bl9pZnNfbW9kZSA9IGZhbHNlOworCXdyMzIoRTEwMDBfQUlULCAwKTsKK291dDoKKwlyZXR1cm47 Cit9CisKKy8qKgorICogIGlnYl91cGRhdGVfYWRhcHRpdmUgLSBVcGRhdGUgQWRhcHRpdmUgSW50 ZXJmcmFtZSBTcGFjaW5nCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAq CisgKiAgVXBkYXRlIHRoZSBBZGFwdGl2ZSBJbnRlcmZyYW1lIFNwYWNpbmcgVGhyb3R0bGUgdmFs dWUgYmFzZWQgb24gdGhlCisgKiAgdGltZSBiZXR3ZWVuIHRyYW5zbWl0dGVkIHBhY2tldHMgYW5k IHRpbWUgYmV0d2VlbiBjb2xsaXNpb25zLgorICoqLwordm9pZCBpZ2JfdXBkYXRlX2FkYXB0aXZl KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX21hY19pbmZvICptYWMgPSAm aHctPm1hYzsKKworCWlmICghbWFjLT5hZGFwdGl2ZV9pZnMpIHsKKwkJaHdfZGJnKCJOb3QgaW4g QWRhcHRpdmUgSUZTIG1vZGUhXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKChtYWMtPmNv bGxpc2lvbl9kZWx0YSAqIG1hYy0+aWZzX3JhdGlvKSA+IG1hYy0+dHhfcGFja2V0X2RlbHRhKSB7 CisJCWlmIChtYWMtPnR4X3BhY2tldF9kZWx0YSA+IE1JTl9OVU1fWE1JVFMpIHsKKwkJCW1hYy0+ aW5faWZzX21vZGUgPSB0cnVlOworCQkJaWYgKG1hYy0+Y3VycmVudF9pZnNfdmFsIDwgbWFjLT5p ZnNfbWF4X3ZhbCkgeworCQkJCWlmICghbWFjLT5jdXJyZW50X2lmc192YWwpCisJCQkJCW1hYy0+ Y3VycmVudF9pZnNfdmFsID0gbWFjLT5pZnNfbWluX3ZhbDsKKwkJCQllbHNlCisJCQkJCW1hYy0+ Y3VycmVudF9pZnNfdmFsICs9CisJCQkJCQltYWMtPmlmc19zdGVwX3NpemU7CisJCQkJd3IzMihF MTAwMF9BSVQsCisJCQkJCQltYWMtPmN1cnJlbnRfaWZzX3ZhbCk7CisJCQl9CisJCX0KKwl9IGVs c2UgeworCQlpZiAobWFjLT5pbl9pZnNfbW9kZSAmJgorCQkgICAgKG1hYy0+dHhfcGFja2V0X2Rl bHRhIDw9IE1JTl9OVU1fWE1JVFMpKSB7CisJCQltYWMtPmN1cnJlbnRfaWZzX3ZhbCA9IDA7CisJ CQltYWMtPmluX2lmc19tb2RlID0gZmFsc2U7CisJCQl3cjMyKEUxMDAwX0FJVCwgMCk7CisJCX0K Kwl9CitvdXQ6CisJcmV0dXJuOworfQorCisvKioKKyAqICBpZ2JfdmFsaWRhdGVfbWRpX3NldHRp bmcgLSBWZXJpZnkgTURJL01ESXggc2V0dGluZ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhX IHN0cnVjdHVyZQorICoKKyAqICBWZXJpZnkgdGhhdCB3aGVuIG5vdCB1c2luZyBhdXRvLW5lZ290 aXRhdGlvbiB0aGF0IE1ESS9NREl4IGlzIGNvcnJlY3RseQorICogIHNldCwgd2hpY2ggaXMgZm9y Y2VkIHRvIE1ESSBtb2RlIG9ubHkuCisgKiovCitzMzIgaWdiX3ZhbGlkYXRlX21kaV9zZXR0aW5n KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92YWwgPSAwOworCisJaWYgKCFody0+ bWFjLmF1dG9uZWcgJiYgKGh3LT5waHkubWRpeCA9PSAwIHx8IGh3LT5waHkubWRpeCA9PSAzKSkg eworCQlod19kYmcoIkludmFsaWQgTURJIHNldHRpbmcgZGV0ZWN0ZWRcbiIpOworCQlody0+cGh5 Lm1kaXggPSAxOworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0Owor CX0KKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2Jfd3JpdGVfOGJp dF9jdHJsX3JlZyAtIFdyaXRlIGEgOGJpdCBDVFJMIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVy IHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAcmVnOiAzMmJpdCByZWdpc3RlciBvZmZzZXQgc3Vj aCBhcyBFMTAwMF9TQ1RMCisgKiAgQG9mZnNldDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRv CisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgYXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIFdy aXRlcyBhbiBhZGRyZXNzL2RhdGEgY29udHJvbCB0eXBlIHJlZ2lzdGVyLiAgVGhlcmUgYXJlIHNl dmVyYWwgb2YgdGhlc2UKKyAqICBhbmQgdGhleSBhbGwgaGF2ZSB0aGUgZm9ybWF0IGFkZHJlc3Mg PDwgOCB8IGRhdGEgYW5kIGJpdCAzMSBpcyBwb2xsZWQgZm9yCisgKiAgY29tcGxldGlvbi4KKyAq Ki8KK3MzMiBpZ2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIg cmVnLAorCQkJICAgICAgdTMyIG9mZnNldCwgdTggZGF0YSkKK3sKKwl1MzIgaSwgcmVndmFsdWUg PSAwOworCXMzMiByZXRfdmFsID0gMDsKKworCS8qIFNldCB1cCB0aGUgYWRkcmVzcyBhbmQgZGF0 YSAqLworCXJlZ3ZhbHVlID0gKCh1MzIpZGF0YSkgfCAob2Zmc2V0IDw8IEUxMDAwX0dFTl9DVExf QUREUkVTU19TSElGVCk7CisJd3IzMihyZWcsIHJlZ3ZhbHVlKTsKKworCS8qIFBvbGwgdGhlIHJl YWR5IGJpdCB0byBzZWUgaWYgdGhlIE1ESSByZWFkIGNvbXBsZXRlZCAqLworCWZvciAoaSA9IDA7 IGkgPCBFMTAwMF9HRU5fUE9MTF9USU1FT1VUOyBpKyspIHsKKwkJdWRlbGF5KDUpOworCQlyZWd2 YWx1ZSA9IHJkMzIocmVnKTsKKwkJaWYgKHJlZ3ZhbHVlICYgRTEwMDBfR0VOX0NUTF9SRUFEWSkK KwkJCWJyZWFrOworCX0KKwlpZiAoIShyZWd2YWx1ZSAmIEUxMDAwX0dFTl9DVExfUkVBRFkpKSB7 CisJCWh3X2RiZygiUmVnICUwOHggZGlkIG5vdCBpbmRpY2F0ZSByZWFkeVxuIiwgcmVnKTsKKwkJ cmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOworCQlnb3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1 cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2VuYWJsZV9tbmdfcGFzc190aHJ1IC0gRW5h YmxlIHByb2Nlc3Npbmcgb2YgQVJQJ3MKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVj dHVyZQorICoKKyAqICBWZXJpZmllcyB0aGUgaGFyZHdhcmUgbmVlZHMgdG8gYWxsb3cgQVJQcyB0 byBiZSBwcm9jZXNzZWQgYnkgdGhlIGhvc3QuCisgKiovCitib29sIGlnYl9lbmFibGVfbW5nX3Bh c3NfdGhydShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBtYW5jOworCXUzMiBmd3NtLCBm YWN0cHM7CisJYm9vbCByZXRfdmFsID0gZmFsc2U7CisKKwlpZiAoIWh3LT5tYWMuYXNmX2Zpcm13 YXJlX3ByZXNlbnQpCisJCWdvdG8gb3V0OworCisJbWFuYyA9IHJkMzIoRTEwMDBfTUFOQyk7CisK KwlpZiAoIShtYW5jICYgRTEwMDBfTUFOQ19SQ1ZfVENPX0VOKSB8fAorCSAgICAhKG1hbmMgJiBF MTAwMF9NQU5DX0VOX01BQ19BRERSX0ZJTFRFUikpCisJCWdvdG8gb3V0OworCisJaWYgKGh3LT5t YWMuYXJjX3N1YnN5c3RlbV92YWxpZCkgeworCQlmd3NtID0gcmQzMihFMTAwMF9GV1NNKTsKKwkJ ZmFjdHBzID0gcmQzMihFMTAwMF9GQUNUUFMpOworCisJCWlmICghKGZhY3RwcyAmIEUxMDAwX0ZB Q1RQU19NTkdDRykgJiYKKwkJICAgICgoZndzbSAmIEUxMDAwX0ZXU01fTU9ERV9NQVNLKSA9PQor CQkgICAgIChlMTAwMF9tbmdfbW9kZV9wdCA8PCBFMTAwMF9GV1NNX01PREVfU0hJRlQpKSkgewor CQkJcmV0X3ZhbCA9IHRydWU7CisJCQlnb3RvIG91dDsKKwkJfQorCX0gZWxzZSB7CisJCWlmICgo bWFuYyAmIEUxMDAwX01BTkNfU01CVVNfRU4pICYmCisJCSAgICAhKG1hbmMgJiBFMTAwMF9NQU5D X0FTRl9FTikpIHsKKwkJCXJldF92YWwgPSB0cnVlOworCQkJZ290byBvdXQ7CisJCX0KKwl9CisK K291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJpdmVycy9u ZXQvaWdiL2UxMDAwX21hYy5oCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcw ICswMDAwCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9tYWMuaAlUaHUgRmViIDEyIDAzOjAy OjE0IDIwMDkgLTA1MDAKQEAgLTAsMCArMSw5NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK KworICBJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IExpbnV4IGRyaXZlcgorICBDb3B5cmlnaHQo YykgMjAwNyBJbnRlbCBDb3Jwb3JhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAorICB1bmRlciB0 aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl LAorICB2ZXJzaW9uIDIsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxs IGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKKyAgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCisgIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm b3IKKyAgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGgKKyAgdGhpcyBwcm9n cmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s CisgIDUxIEZyYW5rbGluIFN0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EuCisKKyAgVGhlIGZ1bGwgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW5jbHVkZWQg aW4gdGhpcyBkaXN0cmlidXRpb24gaW4KKyAgdGhlIGZpbGUgY2FsbGVkICJDT1BZSU5HIi4KKwor ICBDb250YWN0IEluZm9ybWF0aW9uOgorICBlMTAwMC1kZXZlbCBNYWlsaW5nIExpc3QgPGUxMDAw LWRldmVsQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4KKyAgSW50ZWwgQ29ycG9yYXRpb24sIDUyMDAg Ti5FLiBFbGFtIFlvdW5nIFBhcmt3YXksIEhpbGxzYm9ybywgT1IgOTcxMjQtNjQ5NworCisqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIF9FMTAwMF9NQUNfSF8KKyNkZWZpbmUgX0Ux MDAwX01BQ19IXworCisjaW5jbHVkZSAiZTEwMDBfaHcuaCIKKworI2luY2x1ZGUgImUxMDAwX3Bo eS5oIgorI2luY2x1ZGUgImUxMDAwX252bS5oIgorI2luY2x1ZGUgImUxMDAwX2RlZmluZXMuaCIK KworLyoKKyAqIEZ1bmN0aW9ucyB0aGF0IHNob3VsZCBub3QgYmUgY2FsbGVkIGRpcmVjdGx5IGZy b20gZHJpdmVycyBidXQgY2FuIGJlIHVzZWQKKyAqIGJ5IG90aGVyIGZpbGVzIGluIHRoaXMgJ3No YXJlZCBjb2RlJworICovCitzMzIgIGlnYl9ibGlua19sZWQoc3RydWN0IGUxMDAwX2h3ICpodyk7 CitzMzIgIGlnYl9jaGVja19mb3JfY29wcGVyX2xpbmsoc3RydWN0IGUxMDAwX2h3ICpodyk7Citz MzIgIGlnYl9jbGVhbnVwX2xlZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX2NvbmZp Z19mY19hZnRlcl9saW5rX3VwKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfZGlzYWJs ZV9wY2llX21hc3RlcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX2ZvcmNlX21hY19m YyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX2dldF9hdXRvX3JkX2RvbmUoc3RydWN0 IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl9nZXRfYnVzX2luZm9fcGNpZShzdHJ1Y3QgZTEwMDBf aHcgKmh3KTsKK3MzMiAgaWdiX2dldF9od19zZW1hcGhvcmUoc3RydWN0IGUxMDAwX2h3ICpodyk7 CitzMzIgIGlnYl9nZXRfc3BlZWRfYW5kX2R1cGxleF9jb3BwZXIoc3RydWN0IGUxMDAwX2h3ICpo dywgdTE2ICpzcGVlZCwKKwkJCQkgICAgICAgdTE2ICpkdXBsZXgpOworczMyICBpZ2JfaWRfbGVk X2luaXQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl9sZWRfb2ZmKHN0cnVjdCBlMTAw MF9odyAqaHcpOworczMyICBpZ2Jfc2V0dXBfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3Mz MiAgaWdiX3ZhbGlkYXRlX21kaV9zZXR0aW5nKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBp Z2Jfd3JpdGVfOGJpdF9jdHJsX3JlZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgcmVnLAorCQkJ ICAgICAgIHUzMiBvZmZzZXQsIHU4IGRhdGEpOworCit2b2lkIGlnYl9jbGVhcl9od19jbnRyc19i YXNlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwordm9pZCBpZ2JfY2xlYXJfdmZ0YShzdHJ1Y3QgZTEw MDBfaHcgKmh3KTsKK3ZvaWQgaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChzdHJ1Y3QgZTEwMDBf aHcgKmh3KTsKK3ZvaWQgaWdiX210YV9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIGhhc2hf dmFsdWUpOwordm9pZCBpZ2JfcHV0X2h3X3NlbWFwaG9yZShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsK K3ZvaWQgaWdiX3Jhcl9zZXQoc3RydWN0IGUxMDAwX2h3ICpodywgdTggKmFkZHIsIHUzMiBpbmRl eCk7CitzMzIgIGlnYl9jaGVja19hbHRfbWFjX2FkZHIoc3RydWN0IGUxMDAwX2h3ICpodyk7Cit2 b2lkIGlnYl9yZW1vdmVfZGV2aWNlKHN0cnVjdCBlMTAwMF9odyAqaHcpOwordm9pZCBpZ2JfcmVz ZXRfYWRhcHRpdmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Cit2b2lkIGlnYl91cGRhdGVfYWRhcHRp dmUoc3RydWN0IGUxMDAwX2h3ICpodyk7Cit2b2lkIGlnYl93cml0ZV92ZnRhKHN0cnVjdCBlMTAw MF9odyAqaHcsIHUzMiBvZmZzZXQsIHUzMiB2YWx1ZSk7CisKK2Jvb2wgaWdiX2VuYWJsZV9tbmdf cGFzc190aHJ1KHN0cnVjdCBlMTAwMF9odyAqaHcpOworCitlbnVtIGUxMDAwX21uZ19tb2RlIHsK KwllMTAwMF9tbmdfbW9kZV9ub25lID0gMCwKKwllMTAwMF9tbmdfbW9kZV9hc2YsCisJZTEwMDBf bW5nX21vZGVfcHQsCisJZTEwMDBfbW5nX21vZGVfaXBtaSwKKwllMTAwMF9tbmdfbW9kZV9ob3N0 X2lmX29ubHkKK307CisKKyNkZWZpbmUgRTEwMDBfRkFDVFBTX01OR0NHICAgIDB4MjAwMDAwMDAK KworI2RlZmluZSBFMTAwMF9GV1NNX01PREVfTUFTSyAgMHhFCisjZGVmaW5lIEUxMDAwX0ZXU01f TU9ERV9TSElGVCAxCisKKyNkZWZpbmUgRTEwMDBfTU5HX0RIQ1BfQ09NTUFORF9USU1FT1VUICAg ICAgIDEwCisjZGVmaW5lIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTiAgICAweDIK KworI2RlZmluZSBFMTAwMF9ISUNSX0VOICAgICAgICAgICAgICAweDAxICAvKiBFbmFibGUgYml0 IC0gUk8gKi8KKy8qIERyaXZlciBzZXRzIHRoaXMgYml0IHdoZW4gZG9uZSB0byBwdXQgY29tbWFu ZCBpbiBSQU0gKi8KKyNkZWZpbmUgRTEwMDBfSElDUl9DICAgICAgICAgICAgICAgMHgwMgorCitl eHRlcm4gdm9pZCBlMTAwMF9pbml0X2Z1bmN0aW9uX3BvaW50ZXJzXzgyNTc1KHN0cnVjdCBlMTAw MF9odyAqaHcpOworZXh0ZXJuIHUzMiBpZ2JfaGFzaF9tY19hZGRyKHN0cnVjdCBlMTAwMF9odyAq aHcsIHU4ICptY19hZGRyKTsKKworI2VuZGlmCmRpZmYgLXIgYWY3NDNkMTRhYThjIGRyaXZlcnMv bmV0L2lnYi9lMTAwMF9udm0uYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3 MCArMDAwMAorKysgYi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmMJVGh1IEZlYiAxMiAwMzow MjoxNCAyMDA5IC0wNTAwCkBAIC0wLDAgKzEsNjA1IEBACisvKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdo dChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVy IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdp bGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl IGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHBy b2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j LiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAx IFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRl ZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgor CisgIENvbnRhY3QgSW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEw MDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIw MCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisKKyNpbmNsdWRlICJlMTAwMF9tYWMuaCIKKyNpbmNsdWRl ICJlMTAwMF9udm0uaCIKKworLyoqCisgKiAgaWdiX3JhaXNlX2VlY19jbGsgLSBSYWlzZSBFRVBS T00gY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBlZWNk OiBwb2ludGVyIHRvIHRoZSBFRVBST00KKyAqCisgKiAgRW5hYmxlL1JhaXNlIHRoZSBFRVBST00g Y2xvY2sgYml0LgorICoqLworc3RhdGljIHZvaWQgaWdiX3JhaXNlX2VlY19jbGsoc3RydWN0IGUx MDAwX2h3ICpodywgdTMyICplZWNkKQoreworCSplZWNkID0gKmVlY2QgfCBFMTAwMF9FRUNEX1NL OworCXdyMzIoRTEwMDBfRUVDRCwgKmVlY2QpOworCXdyZmwoKTsKKwl1ZGVsYXkoaHctPm52bS5k ZWxheV91c2VjKTsKK30KKworLyoqCisgKiAgaWdiX2xvd2VyX2VlY19jbGsgLSBMb3dlciBFRVBS T00gY2xvY2sKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBlZWNk OiBwb2ludGVyIHRvIHRoZSBFRVBST00KKyAqCisgKiAgQ2xlYXIvTG93ZXIgdGhlIEVFUFJPTSBj bG9jayBiaXQuCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfbG93ZXJfZWVjX2NsayhzdHJ1Y3QgZTEw MDBfaHcgKmh3LCB1MzIgKmVlY2QpCit7CisJKmVlY2QgPSAqZWVjZCAmIH5FMTAwMF9FRUNEX1NL OworCXdyMzIoRTEwMDBfRUVDRCwgKmVlY2QpOworCXdyZmwoKTsKKwl1ZGVsYXkoaHctPm52bS5k ZWxheV91c2VjKTsKK30KKworLyoqCisgKiAgaWdiX3NoaWZ0X291dF9lZWNfYml0cyAtIFNoaWZ0 IGRhdGEgYml0cyBvdXIgdG8gdGhlIEVFUFJPTQorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcg c3RydWN0dXJlCisgKiAgQGRhdGE6IGRhdGEgdG8gc2VuZCB0byB0aGUgRUVQUk9NCisgKiAgQGNv dW50OiBudW1iZXIgb2YgYml0cyB0byBzaGlmdCBvdXQKKyAqCisgKiAgV2UgbmVlZCB0byBzaGlm dCAnY291bnQnIGJpdHMgb3V0IHRvIHRoZSBFRVBST00uICBTbywgdGhlIHZhbHVlIGluIHRoZQor ICogICJkYXRhIiBwYXJhbWV0ZXIgd2lsbCBiZSBzaGlmdGVkIG91dCB0byB0aGUgRUVQUk9NIG9u ZSBiaXQgYXQgYSB0aW1lLgorICogIEluIG9yZGVyIHRvIGRvIHRoaXMsICJkYXRhIiBtdXN0IGJl IGJyb2tlbiBkb3duIGludG8gYml0cy4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9zaGlmdF9vdXRf ZWVjX2JpdHMoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IGRhdGEsIHUxNiBjb3VudCkKK3sKKwlz dHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOworCXUzMiBlZWNkID0gcmQzMihF MTAwMF9FRUNEKTsKKwl1MzIgbWFzazsKKworCW1hc2sgPSAweDAxIDw8IChjb3VudCAtIDEpOwor CWlmIChudm0tPnR5cGUgPT0gZTEwMDBfbnZtX2VlcHJvbV9taWNyb3dpcmUpCisJCWVlY2QgJj0g fkUxMDAwX0VFQ0RfRE87CisJZWxzZSBpZiAobnZtLT50eXBlID09IGUxMDAwX252bV9lZXByb21f c3BpKQorCQllZWNkIHw9IEUxMDAwX0VFQ0RfRE87CisKKwlkbyB7CisJCWVlY2QgJj0gfkUxMDAw X0VFQ0RfREk7CisKKwkJaWYgKGRhdGEgJiBtYXNrKQorCQkJZWVjZCB8PSBFMTAwMF9FRUNEX0RJ OworCisJCXdyMzIoRTEwMDBfRUVDRCwgZWVjZCk7CisJCXdyZmwoKTsKKworCQl1ZGVsYXkobnZt LT5kZWxheV91c2VjKTsKKworCQlpZ2JfcmFpc2VfZWVjX2NsayhodywgJmVlY2QpOworCQlpZ2Jf bG93ZXJfZWVjX2NsayhodywgJmVlY2QpOworCisJCW1hc2sgPj49IDE7CisJfSB3aGlsZSAobWFz ayk7CisKKwllZWNkICY9IH5FMTAwMF9FRUNEX0RJOworCXdyMzIoRTEwMDBfRUVDRCwgZWVjZCk7 Cit9CisKKy8qKgorICogIGlnYl9zaGlmdF9pbl9lZWNfYml0cyAtIFNoaWZ0IGRhdGEgYml0cyBp biBmcm9tIHRoZSBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQor ICogIEBjb3VudDogbnVtYmVyIG9mIGJpdHMgdG8gc2hpZnQgaW4KKyAqCisgKiAgSW4gb3JkZXIg dG8gcmVhZCBhIHJlZ2lzdGVyIGZyb20gdGhlIEVFUFJPTSwgd2UgbmVlZCB0byBzaGlmdCAnY291 bnQnIGJpdHMKKyAqICBpbiBmcm9tIHRoZSBFRVBST00uICBCaXRzIGFyZSAic2hpZnRlZCBpbiIg YnkgcmFpc2luZyB0aGUgY2xvY2sgaW5wdXQgdG8KKyAqICB0aGUgRUVQUk9NIChzZXR0aW5nIHRo ZSBTSyBiaXQpLCBhbmQgdGhlbiByZWFkaW5nIHRoZSB2YWx1ZSBvZiB0aGUgZGF0YSBvdXQKKyAq ICAiRE8iIGJpdC4gIER1cmluZyB0aGlzICJzaGlmdGluZyBpbiIgcHJvY2VzcyB0aGUgZGF0YSBp biAiREkiIGJpdCBzaG91bGQKKyAqICBhbHdheXMgYmUgY2xlYXIuCisgKiovCitzdGF0aWMgdTE2 IGlnYl9zaGlmdF9pbl9lZWNfYml0cyhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgY291bnQpCit7 CisJdTMyIGVlY2Q7CisJdTMyIGk7CisJdTE2IGRhdGE7CisKKwllZWNkID0gcmQzMihFMTAwMF9F RUNEKTsKKworCWVlY2QgJj0gfihFMTAwMF9FRUNEX0RPIHwgRTEwMDBfRUVDRF9ESSk7CisJZGF0 YSA9IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworCQlkYXRhIDw8PSAxOwor CQlpZ2JfcmFpc2VfZWVjX2NsayhodywgJmVlY2QpOworCisJCWVlY2QgPSByZDMyKEUxMDAwX0VF Q0QpOworCisJCWVlY2QgJj0gfkUxMDAwX0VFQ0RfREk7CisJCWlmIChlZWNkICYgRTEwMDBfRUVD RF9ETykKKwkJCWRhdGEgfD0gMTsKKworCQlpZ2JfbG93ZXJfZWVjX2NsayhodywgJmVlY2QpOwor CX0KKworCXJldHVybiBkYXRhOworfQorCisvKioKKyAqICBpZ2JfcG9sbF9lZXJkX2Vld3JfZG9u ZSAtIFBvbGwgZm9yIEVFUFJPTSByZWFkL3dyaXRlIGNvbXBsZXRpb24KKyAqICBAaHc6IHBvaW50 ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBlZV9yZWc6IEVFUFJPTSBmbGFnIGZvciBwb2xs aW5nCisgKgorICogIFBvbGxzIHRoZSBFRVBST00gc3RhdHVzIGJpdCBmb3IgZWl0aGVyIHJlYWQg b3Igd3JpdGUgY29tcGxldGlvbiBiYXNlZAorICogIHVwb24gdGhlIHZhbHVlIG9mICdlZV9yZWcn LgorICoqLworc3RhdGljIHMzMiBpZ2JfcG9sbF9lZXJkX2Vld3JfZG9uZShzdHJ1Y3QgZTEwMDBf aHcgKmh3LCBpbnQgZWVfcmVnKQoreworCXUzMiBhdHRlbXB0cyA9IDEwMDAwMDsKKwl1MzIgaSwg cmVnID0gMDsKKwlzMzIgcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOworCisJZm9yIChpID0gMDsg aSA8IGF0dGVtcHRzOyBpKyspIHsKKwkJaWYgKGVlX3JlZyA9PSBFMTAwMF9OVk1fUE9MTF9SRUFE KQorCQkJcmVnID0gcmQzMihFMTAwMF9FRVJEKTsKKwkJZWxzZQorCQkJcmVnID0gcmQzMihFMTAw MF9FRVdSKTsKKworCQlpZiAocmVnICYgRTEwMDBfTlZNX1JXX1JFR19ET05FKSB7CisJCQlyZXRf dmFsID0gMDsKKwkJCWJyZWFrOworCQl9CisKKwkJdWRlbGF5KDUpOworCX0KKworCXJldHVybiBy ZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfYWNxdWlyZV9udm0gLSBHZW5lcmljIHJlcXVlc3Qg Zm9yIGFjY2VzcyB0byBFRVBST00KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVy ZQorICoKKyAqICBTZXQgdGhlIEVFUFJPTSBhY2Nlc3MgcmVxdWVzdCBiaXQgYW5kIHdhaXQgZm9y IEVFUFJPTSBhY2Nlc3MgZ3JhbnQgYml0LgorICogIFJldHVybiBzdWNjZXNzZnVsIGlmIGFjY2Vz cyBncmFudCBiaXQgc2V0LCBlbHNlIGNsZWFyIHRoZSByZXF1ZXN0IGZvcgorICogIEVFUFJPTSBh Y2Nlc3MgYW5kIHJldHVybiAtRTEwMDBfRVJSX05WTSAoLTEpLgorICoqLworczMyIGlnYl9hY3F1 aXJlX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBlZWNkID0gcmQzMihFMTAwMF9F RUNEKTsKKwlzMzIgdGltZW91dCA9IEUxMDAwX05WTV9HUkFOVF9BVFRFTVBUUzsKKwlzMzIgcmV0 X3ZhbCA9IDA7CisKKworCXdyMzIoRTEwMDBfRUVDRCwgZWVjZCB8IEUxMDAwX0VFQ0RfUkVRKTsK KwllZWNkID0gcmQzMihFMTAwMF9FRUNEKTsKKworCXdoaWxlICh0aW1lb3V0KSB7CisJCWlmIChl ZWNkICYgRTEwMDBfRUVDRF9HTlQpCisJCQlicmVhazsKKwkJdWRlbGF5KDUpOworCQllZWNkID0g cmQzMihFMTAwMF9FRUNEKTsKKwkJdGltZW91dC0tOworCX0KKworCWlmICghdGltZW91dCkgewor CQllZWNkICY9IH5FMTAwMF9FRUNEX1JFUTsKKwkJd3IzMihFMTAwMF9FRUNELCBlZWNkKTsKKwkJ aHdfZGJnKCJDb3VsZCBub3QgYWNxdWlyZSBOVk0gZ3JhbnRcbiIpOworCQlyZXRfdmFsID0gLUUx MDAwX0VSUl9OVk07CisJfQorCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9z dGFuZGJ5X252bSAtIFJldHVybiBFRVBST00gdG8gc3RhbmRieSBzdGF0ZQorICogIEBodzogcG9p bnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJldHVybiB0aGUgRUVQUk9NIHRvIGEg c3RhbmRieSBzdGF0ZS4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9zdGFuZGJ5X252bShzdHJ1Y3Qg ZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9udm1faW5mbyAqbnZtID0gJmh3LT5udm07 CisJdTMyIGVlY2QgPSByZDMyKEUxMDAwX0VFQ0QpOworCisJaWYgKG52bS0+dHlwZSA9PSBlMTAw MF9udm1fZWVwcm9tX21pY3Jvd2lyZSkgeworCQllZWNkICY9IH4oRTEwMDBfRUVDRF9DUyB8IEUx MDAwX0VFQ0RfU0spOworCQl3cjMyKEUxMDAwX0VFQ0QsIGVlY2QpOworCQl3cmZsKCk7CisJCXVk ZWxheShudm0tPmRlbGF5X3VzZWMpOworCisJCWlnYl9yYWlzZV9lZWNfY2xrKGh3LCAmZWVjZCk7 CisKKwkJLyogU2VsZWN0IEVFUFJPTSAqLworCQllZWNkIHw9IEUxMDAwX0VFQ0RfQ1M7CisJCXdy MzIoRTEwMDBfRUVDRCwgZWVjZCk7CisJCXdyZmwoKTsKKwkJdWRlbGF5KG52bS0+ZGVsYXlfdXNl Yyk7CisKKwkJaWdiX2xvd2VyX2VlY19jbGsoaHcsICZlZWNkKTsKKwl9IGVsc2UgaWYgKG52bS0+ dHlwZSA9PSBlMTAwMF9udm1fZWVwcm9tX3NwaSkgeworCQkvKiBUb2dnbGUgQ1MgdG8gZmx1c2gg Y29tbWFuZHMgKi8KKwkJZWVjZCB8PSBFMTAwMF9FRUNEX0NTOworCQl3cjMyKEUxMDAwX0VFQ0Qs IGVlY2QpOworCQl3cmZsKCk7CisJCXVkZWxheShudm0tPmRlbGF5X3VzZWMpOworCQllZWNkICY9 IH5FMTAwMF9FRUNEX0NTOworCQl3cjMyKEUxMDAwX0VFQ0QsIGVlY2QpOworCQl3cmZsKCk7CisJ CXVkZWxheShudm0tPmRlbGF5X3VzZWMpOworCX0KK30KKworLyoqCisgKiAgZTEwMDBfc3RvcF9u dm0gLSBUZXJtaW5hdGUgRUVQUk9NIGNvbW1hbmQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhX IHN0cnVjdHVyZQorICoKKyAqICBUZXJtaW5hdGVzIHRoZSBjdXJyZW50IGNvbW1hbmQgYnkgaW52 ZXJ0aW5nIHRoZSBFRVBST00ncyBjaGlwIHNlbGVjdCBwaW4uCisgKiovCitzdGF0aWMgdm9pZCBl MTAwMF9zdG9wX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXUzMiBlZWNkOworCisJZWVj ZCA9IHJkMzIoRTEwMDBfRUVDRCk7CisJaWYgKGh3LT5udm0udHlwZSA9PSBlMTAwMF9udm1fZWVw cm9tX3NwaSkgeworCQkvKiBQdWxsIENTIGhpZ2ggKi8KKwkJZWVjZCB8PSBFMTAwMF9FRUNEX0NT OworCQlpZ2JfbG93ZXJfZWVjX2NsayhodywgJmVlY2QpOworCX0gZWxzZSBpZiAoaHctPm52bS50 eXBlID09IGUxMDAwX252bV9lZXByb21fbWljcm93aXJlKSB7CisJCS8qIENTIG9uIE1pY3JvY3dp cmUgaXMgYWN0aXZlLWhpZ2ggKi8KKwkJZWVjZCAmPSB+KEUxMDAwX0VFQ0RfQ1MgfCBFMTAwMF9F RUNEX0RJKTsKKwkJd3IzMihFMTAwMF9FRUNELCBlZWNkKTsKKwkJaWdiX3JhaXNlX2VlY19jbGso aHcsICZlZWNkKTsKKwkJaWdiX2xvd2VyX2VlY19jbGsoaHcsICZlZWNkKTsKKwl9Cit9CisKKy8q KgorICogIGlnYl9yZWxlYXNlX252bSAtIFJlbGVhc2UgZXhjbHVzaXZlIGFjY2VzcyB0byBFRVBS T00KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBTdG9wIGFu eSBjdXJyZW50IGNvbW1hbmRzIHRvIHRoZSBFRVBST00gYW5kIGNsZWFyIHRoZSBFRVBST00gcmVx dWVzdCBiaXQuCisgKiovCit2b2lkIGlnYl9yZWxlYXNlX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3 KQoreworCXUzMiBlZWNkOworCisJZTEwMDBfc3RvcF9udm0oaHcpOworCisJZWVjZCA9IHJkMzIo RTEwMDBfRUVDRCk7CisJZWVjZCAmPSB+RTEwMDBfRUVDRF9SRVE7CisJd3IzMihFMTAwMF9FRUNE LCBlZWNkKTsKK30KKworLyoqCisgKiAgaWdiX3JlYWR5X252bV9lZXByb20gLSBQcmVwYXJlcyBF RVBST00gZm9yIHJlYWQvd3JpdGUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVy ZQorICoKKyAqICBTZXR1cHMgdGhlIEVFUFJPTSBmb3IgcmVhZGluZyBhbmQgd3JpdGluZy4KKyAq Ki8KK3N0YXRpYyBzMzIgaWdiX3JlYWR5X252bV9lZXByb20oc3RydWN0IGUxMDAwX2h3ICpodykK K3sKKwlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOworCXUzMiBlZWNkID0g cmQzMihFMTAwMF9FRUNEKTsKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IHRpbWVvdXQgPSAwOwor CXU4IHNwaV9zdGF0X3JlZzsKKworCisJaWYgKG52bS0+dHlwZSA9PSBlMTAwMF9udm1fZWVwcm9t X21pY3Jvd2lyZSkgeworCQkvKiBDbGVhciBTSyBhbmQgREkgKi8KKwkJZWVjZCAmPSB+KEUxMDAw X0VFQ0RfREkgfCBFMTAwMF9FRUNEX1NLKTsKKwkJd3IzMihFMTAwMF9FRUNELCBlZWNkKTsKKwkJ LyogU2V0IENTICovCisJCWVlY2QgfD0gRTEwMDBfRUVDRF9DUzsKKwkJd3IzMihFMTAwMF9FRUNE LCBlZWNkKTsKKwl9IGVsc2UgaWYgKG52bS0+dHlwZSA9PSBlMTAwMF9udm1fZWVwcm9tX3NwaSkg eworCQkvKiBDbGVhciBTSyBhbmQgQ1MgKi8KKwkJZWVjZCAmPSB+KEUxMDAwX0VFQ0RfQ1MgfCBF MTAwMF9FRUNEX1NLKTsKKwkJd3IzMihFMTAwMF9FRUNELCBlZWNkKTsKKwkJdWRlbGF5KDEpOwor CQl0aW1lb3V0ID0gTlZNX01BWF9SRVRSWV9TUEk7CisKKwkJLyoKKwkJICogUmVhZCAiU3RhdHVz IFJlZ2lzdGVyIiByZXBlYXRlZGx5IHVudGlsIHRoZSBMU0IgaXMgY2xlYXJlZC4KKwkJICogVGhl IEVFUFJPTSB3aWxsIHNpZ25hbCB0aGF0IHRoZSBjb21tYW5kIGhhcyBiZWVuIGNvbXBsZXRlZAor CQkgKiBieSBjbGVhcmluZyBiaXQgMCBvZiB0aGUgaW50ZXJuYWwgc3RhdHVzIHJlZ2lzdGVyLiAg SWYgaXQncworCQkgKiBub3QgY2xlYXJlZCB3aXRoaW4gJ3RpbWVvdXQnLCB0aGVuIGVycm9yIG91 dC4KKwkJICovCisJCXdoaWxlICh0aW1lb3V0KSB7CisJCQlpZ2Jfc2hpZnRfb3V0X2VlY19iaXRz KGh3LCBOVk1fUkRTUl9PUENPREVfU1BJLAorCQkJCQkJIGh3LT5udm0ub3Bjb2RlX2JpdHMpOwor CQkJc3BpX3N0YXRfcmVnID0gKHU4KWlnYl9zaGlmdF9pbl9lZWNfYml0cyhodywgOCk7CisJCQlp ZiAoIShzcGlfc3RhdF9yZWcgJiBOVk1fU1RBVFVTX1JEWV9TUEkpKQorCQkJCWJyZWFrOworCisJ CQl1ZGVsYXkoNSk7CisJCQlpZ2Jfc3RhbmRieV9udm0oaHcpOworCQkJdGltZW91dC0tOworCQl9 CisKKwkJaWYgKCF0aW1lb3V0KSB7CisJCQlod19kYmcoIlNQSSBOVk0gU3RhdHVzIGVycm9yXG4i KTsKKwkJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQor CitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9yZWFkX252bV9lZXJk IC0gUmVhZHMgRUVQUk9NIHVzaW5nIEVFUkQgcmVnaXN0ZXIKKyAqICBAaHc6IHBvaW50ZXIgdG8g dGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCBvZiB3b3JkIGluIHRoZSBFRVBS T00gdG8gcmVhZAorICogIEB3b3JkczogbnVtYmVyIG9mIHdvcmRzIHRvIHJlYWQKKyAqICBAZGF0 YTogd29yZCByZWFkIGZyb20gdGhlIEVFUFJPTQorICoKKyAqICBSZWFkcyBhIDE2IGJpdCB3b3Jk IGZyb20gdGhlIEVFUFJPTSB1c2luZyB0aGUgRUVSRCByZWdpc3Rlci4KKyAqKi8KK3MzMiBpZ2Jf cmVhZF9udm1fZWVyZChzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMs IHUxNiAqZGF0YSkKK3sKKwlzdHJ1Y3QgZTEwMDBfbnZtX2luZm8gKm52bSA9ICZody0+bnZtOwor CXUzMiBpLCBlZXJkID0gMDsKKwlzMzIgcmV0X3ZhbCA9IDA7CisKKwkvKgorCSAqIEEgY2hlY2sg Zm9yIGludmFsaWQgdmFsdWVzOiAgb2Zmc2V0IHRvbyBsYXJnZSwgdG9vIG1hbnkgd29yZHMsCisJ ICogYW5kIG5vdCBlbm91Z2ggd29yZHMuCisJICovCisJaWYgKChvZmZzZXQgPj0gbnZtLT53b3Jk X3NpemUpIHx8ICh3b3JkcyA+IChudm0tPndvcmRfc2l6ZSAtIG9mZnNldCkpIHx8CisJICAgICh3 b3JkcyA9PSAwKSkgeworCQlod19kYmcoIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xu Iik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX05WTTsKKwkJZ290byBvdXQ7CisJfQorCisJZm9y IChpID0gMDsgaSA8IHdvcmRzOyBpKyspIHsKKwkJZWVyZCA9ICgob2Zmc2V0K2kpIDw8IEUxMDAw X05WTV9SV19BRERSX1NISUZUKSArCisJCSAgICAgICBFMTAwMF9OVk1fUldfUkVHX1NUQVJUOwor CisJCXdyMzIoRTEwMDBfRUVSRCwgZWVyZCk7CisJCXJldF92YWwgPSBpZ2JfcG9sbF9lZXJkX2Vl d3JfZG9uZShodywgRTEwMDBfTlZNX1BPTExfUkVBRCk7CisJCWlmIChyZXRfdmFsKQorCQkJYnJl YWs7CisKKwkJZGF0YVtpXSA9IChyZDMyKEUxMDAwX0VFUkQpID4+CisJCQkgICBFMTAwMF9OVk1f UldfUkVHX0RBVEEpOworCX0KKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAq ICBpZ2Jfd3JpdGVfbnZtX3NwaSAtIFdyaXRlIHRvIEVFUFJPTSB1c2luZyBTUEkKKyAqICBAaHc6 IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICogIEBvZmZzZXQ6IG9mZnNldCB3aXRoaW4g dGhlIEVFUFJPTSB0byBiZSB3cml0dGVuIHRvCisgKiAgQHdvcmRzOiBudW1iZXIgb2Ygd29yZHMg dG8gd3JpdGUKKyAqICBAZGF0YTogMTYgYml0IHdvcmQocykgdG8gYmUgd3JpdHRlbiB0byB0aGUg RUVQUk9NCisgKgorICogIFdyaXRlcyBkYXRhIHRvIEVFUFJPTSBhdCBvZmZzZXQgdXNpbmcgU1BJ IGludGVyZmFjZS4KKyAqCisgKiAgSWYgZTEwMDBfdXBkYXRlX252bV9jaGVja3N1bSBpcyBub3Qg Y2FsbGVkIGFmdGVyIHRoaXMgZnVuY3Rpb24gLCB0aGUKKyAqICBFRVBST00gd2lsbCBtb3N0IGxp a2xleSBjb250YWluIGFuIGludmFsaWQgY2hlY2tzdW0uCisgKiovCitzMzIgaWdiX3dyaXRlX252 bV9zcGkoc3RydWN0IGUxMDAwX2h3ICpodywgdTE2IG9mZnNldCwgdTE2IHdvcmRzLCB1MTYgKmRh dGEpCit7CisJc3RydWN0IGUxMDAwX252bV9pbmZvICpudm0gPSAmaHctPm52bTsKKwlzMzIgcmV0 X3ZhbDsKKwl1MTYgd2lkeCA9IDA7CisKKwkvKgorCSAqIEEgY2hlY2sgZm9yIGludmFsaWQgdmFs dWVzOiAgb2Zmc2V0IHRvbyBsYXJnZSwgdG9vIG1hbnkgd29yZHMsCisJICogYW5kIG5vdCBlbm91 Z2ggd29yZHMuCisJICovCisJaWYgKChvZmZzZXQgPj0gbnZtLT53b3JkX3NpemUpIHx8ICh3b3Jk cyA+IChudm0tPndvcmRfc2l6ZSAtIG9mZnNldCkpIHx8CisJICAgICh3b3JkcyA9PSAwKSkgewor CQlod19kYmcoIm52bSBwYXJhbWV0ZXIocykgb3V0IG9mIGJvdW5kc1xuIik7CisJCXJldF92YWwg PSAtRTEwMDBfRVJSX05WTTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0X3ZhbCA9IGh3LT5udm0u b3BzLmFjcXVpcmVfbnZtKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwltc2xl ZXAoMTApOworCisJd2hpbGUgKHdpZHggPCB3b3JkcykgeworCQl1OCB3cml0ZV9vcGNvZGUgPSBO Vk1fV1JJVEVfT1BDT0RFX1NQSTsKKworCQlyZXRfdmFsID0gaWdiX3JlYWR5X252bV9lZXByb20o aHcpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gcmVsZWFzZTsKKworCQlpZ2Jfc3RhbmRieV9u dm0oaHcpOworCisJCS8qIFNlbmQgdGhlIFdSSVRFIEVOQUJMRSBjb21tYW5kICg4IGJpdCBvcGNv ZGUpICovCisJCWlnYl9zaGlmdF9vdXRfZWVjX2JpdHMoaHcsIE5WTV9XUkVOX09QQ09ERV9TUEks CisJCQkJCSBudm0tPm9wY29kZV9iaXRzKTsKKworCQlpZ2Jfc3RhbmRieV9udm0oaHcpOworCisJ CS8qCisJCSAqIFNvbWUgU1BJIGVlcHJvbXMgdXNlIHRoZSA4dGggYWRkcmVzcyBiaXQgZW1iZWRk ZWQgaW4gdGhlCisJCSAqIG9wY29kZQorCQkgKi8KKwkJaWYgKChudm0tPmFkZHJlc3NfYml0cyA9 PSA4KSAmJiAob2Zmc2V0ID49IDEyOCkpCisJCQl3cml0ZV9vcGNvZGUgfD0gTlZNX0E4X09QQ09E RV9TUEk7CisKKwkJLyogU2VuZCB0aGUgV3JpdGUgY29tbWFuZCAoOC1iaXQgb3Bjb2RlICsgYWRk cikgKi8KKwkJaWdiX3NoaWZ0X291dF9lZWNfYml0cyhodywgd3JpdGVfb3Bjb2RlLCBudm0tPm9w Y29kZV9iaXRzKTsKKwkJaWdiX3NoaWZ0X291dF9lZWNfYml0cyhodywgKHUxNikoKG9mZnNldCAr IHdpZHgpICogMiksCisJCQkJCSBudm0tPmFkZHJlc3NfYml0cyk7CisKKwkJLyogTG9vcCB0byBh bGxvdyBmb3IgdXAgdG8gd2hvbGUgcGFnZSB3cml0ZSBvZiBlZXByb20gKi8KKwkJd2hpbGUgKHdp ZHggPCB3b3JkcykgeworCQkJdTE2IHdvcmRfb3V0ID0gZGF0YVt3aWR4XTsKKwkJCXdvcmRfb3V0 ID0gKHdvcmRfb3V0ID4+IDgpIHwgKHdvcmRfb3V0IDw8IDgpOworCQkJaWdiX3NoaWZ0X291dF9l ZWNfYml0cyhodywgd29yZF9vdXQsIDE2KTsKKwkJCXdpZHgrKzsKKworCQkJaWYgKCgoKG9mZnNl dCArIHdpZHgpICogMikgJSBudm0tPnBhZ2Vfc2l6ZSkgPT0gMCkgeworCQkJCWlnYl9zdGFuZGJ5 X252bShodyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwltc2xlZXAoMTApOworcmVs ZWFzZToKKwlody0+bnZtLm9wcy5yZWxlYXNlX252bShodyk7CisKK291dDoKKwlyZXR1cm4gcmV0 X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3JlYWRfcGFydF9udW0gLSBSZWFkIGRldmljZSBwYXJ0 IG51bWJlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQHBhcnRf bnVtOiBwb2ludGVyIHRvIGRldmljZSBwYXJ0IG51bWJlcgorICoKKyAqICBSZWFkcyB0aGUgcHJv ZHVjdCBib2FyZCBhc3NlbWJseSAoUEJBKSBudW1iZXIgZnJvbSB0aGUgRUVQUk9NIGFuZCBzdG9y ZXMKKyAqICB0aGUgdmFsdWUgaW4gcGFydF9udW0uCisgKiovCitzMzIgaWdiX3JlYWRfcGFydF9u dW0oc3RydWN0IGUxMDAwX2h3ICpodywgdTMyICpwYXJ0X251bSkKK3sKKwlzMzIgIHJldF92YWw7 CisJdTE2IG52bV9kYXRhOworCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBO Vk1fUEJBX09GRlNFVF8wLCAxLCAmbnZtX2RhdGEpOworCWlmIChyZXRfdmFsKSB7CisJCWh3X2Ri ZygiTlZNIFJlYWQgRXJyb3JcbiIpOworCQlnb3RvIG91dDsKKwl9CisJKnBhcnRfbnVtID0gKHUz MikobnZtX2RhdGEgPDwgMTYpOworCisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3 LCBOVk1fUEJBX09GRlNFVF8xLCAxLCAmbnZtX2RhdGEpOworCWlmIChyZXRfdmFsKSB7CisJCWh3 X2RiZygiTlZNIFJlYWQgRXJyb3JcbiIpOworCQlnb3RvIG91dDsKKwl9CisJKnBhcnRfbnVtIHw9 IG52bV9kYXRhOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9y ZWFkX21hY19hZGRyIC0gUmVhZCBkZXZpY2UgTUFDIGFkZHJlc3MKKyAqICBAaHc6IHBvaW50ZXIg dG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZWFkcyB0aGUgZGV2aWNlIE1BQyBhZGRyZXNz IGZyb20gdGhlIEVFUFJPTSBhbmQgc3RvcmVzIHRoZSB2YWx1ZS4KKyAqICBTaW5jZSBkZXZpY2Vz IHdpdGggdHdvIHBvcnRzIHVzZSB0aGUgc2FtZSBFRVBST00sIHdlIGluY3JlbWVudCB0aGUKKyAq ICBsYXN0IGJpdCBpbiB0aGUgTUFDIGFkZHJlc3MgZm9yIHRoZSBzZWNvbmQgcG9ydC4KKyAqKi8K K3MzMiBpZ2JfcmVhZF9tYWNfYWRkcihzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiAgcmV0 X3ZhbCA9IDA7CisJdTE2IG9mZnNldCwgbnZtX2RhdGEsIGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg RVRIX0FMRU47IGkgKz0gMikgeworCQlvZmZzZXQgPSBpID4+IDE7CisJCXJldF92YWwgPSBody0+ bnZtLm9wcy5yZWFkX252bShodywgb2Zmc2V0LCAxLCAmbnZtX2RhdGEpOworCQlpZiAocmV0X3Zh bCkgeworCQkJaHdfZGJnKCJOVk0gUmVhZCBFcnJvclxuIik7CisJCQlnb3RvIG91dDsKKwkJfQor CQlody0+bWFjLnBlcm1fYWRkcltpXSA9ICh1OCkobnZtX2RhdGEgJiAweEZGKTsKKwkJaHctPm1h Yy5wZXJtX2FkZHJbaSsxXSA9ICh1OCkobnZtX2RhdGEgPj4gOCk7CisJfQorCisJLyogRmxpcCBs YXN0IGJpdCBvZiBtYWMgYWRkcmVzcyBpZiB3ZSdyZSBvbiBzZWNvbmQgcG9ydCAqLworCWlmICho dy0+YnVzLmZ1bmMgPT0gRTEwMDBfRlVOQ18xKQorCQlody0+bWFjLnBlcm1fYWRkcls1XSBePSAx OworCisJZm9yIChpID0gMDsgaSA8IEVUSF9BTEVOOyBpKyspCisJCWh3LT5tYWMuYWRkcltpXSA9 IGh3LT5tYWMucGVybV9hZGRyW2ldOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8q KgorICogIGlnYl92YWxpZGF0ZV9udm1fY2hlY2tzdW0gLSBWYWxpZGF0ZSBFRVBST00gY2hlY2tz dW0KKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBDYWxjdWxh dGVzIHRoZSBFRVBST00gY2hlY2tzdW0gYnkgcmVhZGluZy9hZGRpbmcgZWFjaCB3b3JkIG9mIHRo ZSBFRVBST00KKyAqICBhbmQgdGhlbiB2ZXJpZmllcyB0aGF0IHRoZSBzdW0gb2YgdGhlIEVFUFJP TSBpcyBlcXVhbCB0byAweEJBQkEuCisgKiovCitzMzIgaWdiX3ZhbGlkYXRlX252bV9jaGVja3N1 bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgY2hlY2tz dW0gPSAwOworCXUxNiBpLCBudm1fZGF0YTsKKworCWZvciAoaSA9IDA7IGkgPCAoTlZNX0NIRUNL U1VNX1JFRyArIDEpOyBpKyspIHsKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3 LCBpLCAxLCAmbnZtX2RhdGEpOworCQlpZiAocmV0X3ZhbCkgeworCQkJaHdfZGJnKCJOVk0gUmVh ZCBFcnJvclxuIik7CisJCQlnb3RvIG91dDsKKwkJfQorCQljaGVja3N1bSArPSBudm1fZGF0YTsK Kwl9CisKKwlpZiAoY2hlY2tzdW0gIT0gKHUxNikgTlZNX1NVTSkgeworCQlod19kYmcoIk5WTSBD aGVja3N1bSBJbnZhbGlkXG4iKTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfTlZNOworCQlnb3Rv IG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3Vw ZGF0ZV9udm1fY2hlY2tzdW0gLSBVcGRhdGUgRUVQUk9NIGNoZWNrc3VtCisgKiAgQGh3OiBwb2lu dGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgVXBkYXRlcyB0aGUgRUVQUk9NIGNoZWNr c3VtIGJ5IHJlYWRpbmcvYWRkaW5nIGVhY2ggd29yZCBvZiB0aGUgRUVQUk9NCisgKiAgdXAgdG8g dGhlIGNoZWNrc3VtLiAgVGhlbiBjYWxjdWxhdGVzIHRoZSBFRVBST00gY2hlY2tzdW0gYW5kIHdy aXRlcyB0aGUKKyAqICB2YWx1ZSB0byB0aGUgRUVQUk9NLgorICoqLworczMyIGlnYl91cGRhdGVf bnZtX2NoZWNrc3VtKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyICByZXRfdmFsOworCXUx NiBjaGVja3N1bSA9IDA7CisJdTE2IGksIG52bV9kYXRhOworCisJZm9yIChpID0gMDsgaSA8IE5W TV9DSEVDS1NVTV9SRUc7IGkrKykgeworCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0o aHcsIGksIDEsICZudm1fZGF0YSk7CisJCWlmIChyZXRfdmFsKSB7CisJCQlod19kYmcoIk5WTSBS ZWFkIEVycm9yIHdoaWxlIHVwZGF0aW5nIGNoZWNrc3VtLlxuIik7CisJCQlnb3RvIG91dDsKKwkJ fQorCQljaGVja3N1bSArPSBudm1fZGF0YTsKKwl9CisJY2hlY2tzdW0gPSAodTE2KSBOVk1fU1VN IC0gY2hlY2tzdW07CisJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLndyaXRlX252bShodywgTlZNX0NI RUNLU1VNX1JFRywgMSwgJmNoZWNrc3VtKTsKKwlpZiAocmV0X3ZhbCkKKwkJaHdfZGJnKCJOVk0g V3JpdGUgRXJyb3Igd2hpbGUgdXBkYXRpbmcgY2hlY2tzdW0uXG4iKTsKKworb3V0OgorCXJldHVy biByZXRfdmFsOworfQorCmRpZmYgLXIgYWY3NDNkMTRhYThjIGRyaXZlcnMvbmV0L2lnYi9lMTAw MF9udm0uaAotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysg Yi9kcml2ZXJzL25ldC9pZ2IvZTEwMDBfbnZtLmgJVGh1IEZlYiAxMiAwMzowMjowNiAyMDA5IC0w NTAwCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50ZWwo UikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDcgSW50 ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIGFu ZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVyc2lv biAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBU aGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2VmdWws IGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1vcmUg ZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBGcmFu a2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisgIFRo ZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlz dHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFjdCBJ bmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBsaXN0 cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxhbSBZ b3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKi8KKworI2lmbmRlZiBfRTEwMDBfTlZNX0hfCisjZGVmaW5lIF9FMTAwMF9OVk1fSF8K KworczMyICBpZ2JfYWNxdWlyZV9udm0oc3RydWN0IGUxMDAwX2h3ICpodyk7Cit2b2lkIGlnYl9y ZWxlYXNlX252bShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX3JlYWRfbWFjX2FkZHIo c3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl9yZWFkX3BhcnRfbnVtKHN0cnVjdCBlMTAw MF9odyAqaHcsIHUzMiAqcGFydF9udW0pOworczMyICBpZ2JfcmVhZF9udm1fZWVyZChzdHJ1Y3Qg ZTEwMDBfaHcgKmh3LCB1MTYgb2Zmc2V0LCB1MTYgd29yZHMsIHUxNiAqZGF0YSk7CitzMzIgIGln Yl93cml0ZV9udm1fc3BpKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUxNiBvZmZzZXQsIHUxNiB3b3Jk cywgdTE2ICpkYXRhKTsKK3MzMiAgaWdiX3ZhbGlkYXRlX252bV9jaGVja3N1bShzdHJ1Y3QgZTEw MDBfaHcgKmh3KTsKK3MzMiAgaWdiX3VwZGF0ZV9udm1fY2hlY2tzdW0oc3RydWN0IGUxMDAwX2h3 ICpodyk7CisKKyNlbmRpZgpkaWZmIC1yIGFmNzQzZDE0YWE4YyBkcml2ZXJzL25ldC9pZ2IvZTEw MDBfcGh5LmMKLS0tIC9kZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysr IGIvZHJpdmVycy9uZXQvaWdiL2UxMDAwX3BoeS5jCVRodSBGZWIgMTIgMDM6MDI6MTQgMjAwOSAt MDUwMApAQCAtMCwwICsxLDE4MDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAgSW50 ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIwMDcg SW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1z IGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAgdmVy c2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwor ICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1c2Vm dWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk IHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisgIG1v cmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsgaWYg bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1MSBG cmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgorCisg IFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMg ZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29udGFj dCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZlbEBs aXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4gRWxh bSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKi8KKworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4KKworI2luY2x1ZGUgImUxMDAwX21hYy5oIgorI2luY2x1ZGUgImUxMDAwX3Bo eS5oIgorCitzdGF0aWMgczMyICBpZ2JfZ2V0X3BoeV9jZmdfZG9uZShzdHJ1Y3QgZTEwMDBfaHcg Kmh3KTsKK3N0YXRpYyB2b2lkIGlnYl9yZWxlYXNlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsK K3N0YXRpYyBzMzIgIGlnYl9hY3F1aXJlX3BoeShzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3N0YXRp YyBzMzIgIGlnYl9waHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHMz MiAgaWdiX3BoeV9zZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpOworc3RhdGljIHZv aWQgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAoc3RydWN0IGUxMDAwX2h3ICpodywK KwkJCQkJICAgICAgIHUxNiAqcGh5X2N0cmwpOworc3RhdGljIHMzMiAgaWdiX3dhaXRfYXV0b25l ZyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKworLyogQ2FibGUgbGVuZ3RoIHRhYmxlcyAqLworc3Rh dGljIGNvbnN0IHUxNiBlMTAwMF9tODhfY2FibGVfbGVuZ3RoX3RhYmxlW10gPQorCXsgMCwgNTAs IDgwLCAxMTAsIDE0MCwgMTQwLCBFMTAwMF9DQUJMRV9MRU5HVEhfVU5ERUZJTkVEIH07CisjZGVm aW5lIE04OEUxMDAwX0NBQkxFX0xFTkdUSF9UQUJMRV9TSVpFIFwKKwkJKHNpemVvZihlMTAwMF9t ODhfY2FibGVfbGVuZ3RoX3RhYmxlKSAvIFwKKwkJIHNpemVvZihlMTAwMF9tODhfY2FibGVfbGVu Z3RoX3RhYmxlWzBdKSkKKworc3RhdGljIGNvbnN0IHUxNiBlMTAwMF9pZ3BfMl9jYWJsZV9sZW5n dGhfdGFibGVbXSA9CisgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAzLCA1LCA4LCAxMSwg MTMsIDE2LCAxOCwgMjEsCisgICAgICAwLCAwLCAwLCAzLCA2LCAxMCwgMTMsIDE2LCAxOSwgMjMs IDI2LCAyOSwgMzIsIDM1LCAzOCwgNDEsCisgICAgICA2LCAxMCwgMTQsIDE4LCAyMiwgMjYsIDMw LCAzMywgMzcsIDQxLCA0NCwgNDgsIDUxLCA1NCwgNTgsIDYxLAorICAgICAgMjEsIDI2LCAzMSwg MzUsIDQwLCA0NCwgNDksIDUzLCA1NywgNjEsIDY1LCA2OCwgNzIsIDc1LCA3OSwgODIsCisgICAg ICA0MCwgNDUsIDUxLCA1NiwgNjEsIDY2LCA3MCwgNzUsIDc5LCA4MywgODcsIDkxLCA5NCwgOTgs IDEwMSwgMTA0LAorICAgICAgNjAsIDY2LCA3MiwgNzcsIDgyLCA4NywgOTIsIDk2LCAxMDAsIDEw NCwgMTA4LCAxMTEsIDExNCwgMTE3LCAxMTksIDEyMSwKKyAgICAgIDgzLCA4OSwgOTUsIDEwMCwg MTA1LCAxMDksIDExMywgMTE2LCAxMTksIDEyMiwgMTI0LAorICAgICAgMTA0LCAxMDksIDExNCwg MTE4LCAxMjEsIDEyNH07CisjZGVmaW5lIElHUDAyRTEwMDBfQ0FCTEVfTEVOR1RIX1RBQkxFX1NJ WkUgXAorCQkoc2l6ZW9mKGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZSkgLyBcCisJCSBz aXplb2YoZTEwMDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxlWzBdKSkKKworLyoqCisgKiAgaWdi X2NoZWNrX3Jlc2V0X2Jsb2NrIC0gQ2hlY2sgaWYgUEhZIHJlc2V0IGlzIGJsb2NrZWQKKyAqICBA aHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZWFkIHRoZSBQSFkgbWFu YWdlbWVudCBjb250cm9sIHJlZ2lzdGVyIGFuZCBjaGVjayB3aGV0aGVyIGEgUEhZIHJlc2V0Cisg KiAgaXMgYmxvY2tlZC4gIElmIGEgcmVzZXQgaXMgbm90IGJsb2NrZWQgcmV0dXJuIDAsIG90aGVy d2lzZQorICogIHJldHVybiBFMTAwMF9CTEtfUEhZX1JFU0VUICgxMikuCisgKiovCitzMzIgaWdi X2NoZWNrX3Jlc2V0X2Jsb2NrKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJdTMyIG1hbmM7CisK KwltYW5jID0gcmQzMihFMTAwMF9NQU5DKTsKKworCXJldHVybiAobWFuYyAmIEUxMDAwX01BTkNf QkxLX1BIWV9SU1RfT05fSURFKSA/CisJICAgICAgIEUxMDAwX0JMS19QSFlfUkVTRVQgOiAwOwor fQorCisvKioKKyAqICBpZ2JfZ2V0X3BoeV9pZCAtIFJldHJpZXZlIHRoZSBQSFkgSUQgYW5kIHJl dmlzaW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgUmVh ZHMgdGhlIFBIWSByZWdpc3RlcnMgYW5kIHN0b3JlcyB0aGUgUEhZIElEIGFuZCBwb3NzaWJseSB0 aGUgUEhZCisgKiAgcmV2aXNpb24gaW4gdGhlIGhhcmR3YXJlIHN0cnVjdHVyZS4KKyAqKi8KK3Mz MiBpZ2JfZ2V0X3BoeV9pZChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9w aHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJldF92YWwgPSAwOworCXUxNiBwaHlfaWQ7 CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfSUQxLCAmcGh5 X2lkKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlwaHktPmlkID0gKHUzMikocGh5 X2lkIDw8IDE2KTsKKwl1ZGVsYXkoMjApOworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3Bo eV9yZWcoaHcsIFBIWV9JRDIsICZwaHlfaWQpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsK KworCXBoeS0+aWQgfD0gKHUzMikocGh5X2lkICYgUEhZX1JFVklTSU9OX01BU0spOworCXBoeS0+ cmV2aXNpb24gPSAodTMyKShwaHlfaWQgJiB+UEhZX1JFVklTSU9OX01BU0spOworCitvdXQ6CisJ cmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9waHlfcmVzZXRfZHNwIC0gUmVzZXQg UEhZIERTUAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJl c2V0IHRoZSBkaWdpdGFsIHNpZ25hbCBwcm9jZXNzb3IuCisgKiovCitzdGF0aWMgczMyIGlnYl9w aHlfcmVzZXRfZHNwKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92YWw7CisKKwly ZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9D T05UUk9MLCAweEMxKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0g aHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX0dFTl9DT05UUk9MLCAw KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfcmVhZF9waHlf cmVnX21kaWMgLSBSZWFkIE1ESSBjb250cm9sIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2ludGVyIHRv IHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8gYmUgcmVh ZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgUmVhZHMgdGhl IE1ESSBjb250cm9sIHJlZ3NpdGVyIGluIHRoZSBQSFkgYXQgb2Zmc2V0IGFuZCBzdG9yZXMgdGhl CisgKiAgaW5mb3JtYXRpb24gcmVhZCB0byBkYXRhLgorICoqLworc3RhdGljIHMzMiBpZ2JfcmVh ZF9waHlfcmVnX21kaWMoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9mZnNldCwgdTE2ICpkYXRh KQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJdTMyIGksIG1k aWMgPSAwOworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChvZmZzZXQgPiBNQVhfUEhZX1JFR19B RERSRVNTKSB7CisJCWh3X2RiZygiUEhZIEFkZHJlc3MgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCBv ZmZzZXQpOworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QQVJBTTsKKwkJZ290byBvdXQ7CisJfQor CisJLyoKKwkgKiBTZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3RlciBvZmZz ZXQgaW4gdGhlIE1ESQorCSAqIENvbnRyb2wgcmVnaXN0ZXIuICBUaGUgTUFDIHdpbGwgdGFrZSBj YXJlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlCisJICogUEhZIHRvIHJldHJpZXZlIHRoZSBkZXNp cmVkIGRhdGEuCisJICovCisJbWRpYyA9ICgob2Zmc2V0IDw8IEUxMDAwX01ESUNfUkVHX1NISUZU KSB8CisJCShwaHktPmFkZHIgPDwgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKKwkJKEUxMDAwX01E SUNfT1BfUkVBRCkpOworCisJd3IzMihFMTAwMF9NRElDLCBtZGljKTsKKworCS8qCisJICogUG9s bCB0aGUgcmVhZHkgYml0IHRvIHNlZSBpZiB0aGUgTURJIHJlYWQgY29tcGxldGVkCisJICogSW5j cmVhc2luZyB0aGUgdGltZSBvdXQgYXMgdGVzdGluZyBzaG93ZWQgZmFpbHVyZXMgd2l0aAorCSAq IHRoZSBsb3dlciB0aW1lIG91dAorCSAqLworCWZvciAoaSA9IDA7IGkgPCAoRTEwMDBfR0VOX1BP TExfVElNRU9VVCAqIDMpOyBpKyspIHsKKwkJdWRlbGF5KDUwKTsKKwkJbWRpYyA9IHJkMzIoRTEw MDBfTURJQyk7CisJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKKwkJCWJyZWFrOworCX0K KwlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKKwkJaHdfZGJnKCJNREkgUmVhZCBk aWQgbm90IGNvbXBsZXRlXG4iKTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOworCQlnb3Rv IG91dDsKKwl9CisJaWYgKG1kaWMgJiBFMTAwMF9NRElDX0VSUk9SKSB7CisJCWh3X2RiZygiTURJ IEVycm9yXG4iKTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9FUlJfUEhZOworCQlnb3RvIG91dDsKKwl9 CisJKmRhdGEgPSAodTE2KSBtZGljOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8q KgorICogIGlnYl93cml0ZV9waHlfcmVnX21kaWMgLSBXcml0ZSBNREkgY29udHJvbCByZWdpc3Rl cgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNldDogcmVn aXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUgdG8gcmVn aXN0ZXIgYXQgb2Zmc2V0CisgKgorICogIFdyaXRlcyBkYXRhIHRvIE1ESSBjb250cm9sIHJlZ2lz dGVyIGluIHRoZSBQSFkgYXQgb2Zmc2V0LgorICoqLworc3RhdGljIHMzMiBpZ2Jfd3JpdGVfcGh5 X3JlZ19tZGljKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKQorewor CXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJdTMyIGksIG1kaWMgPSAw OworCXMzMiByZXRfdmFsID0gMDsKKworCWlmIChvZmZzZXQgPiBNQVhfUEhZX1JFR19BRERSRVNT KSB7CisJCWh3X2RiZygiUEhZIEFkZHJlc3MgJWQgaXMgb3V0IG9mIHJhbmdlXG4iLCBvZmZzZXQp OworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9QQVJBTTsKKwkJZ290byBvdXQ7CisJfQorCisJLyoK KwkgKiBTZXQgdXAgT3AtY29kZSwgUGh5IEFkZHJlc3MsIGFuZCByZWdpc3RlciBvZmZzZXQgaW4g dGhlIE1ESQorCSAqIENvbnRyb2wgcmVnaXN0ZXIuICBUaGUgTUFDIHdpbGwgdGFrZSBjYXJlIG9m IGludGVyZmFjaW5nIHdpdGggdGhlCisJICogUEhZIHRvIHJldHJpZXZlIHRoZSBkZXNpcmVkIGRh dGEuCisJICovCisJbWRpYyA9ICgoKHUzMilkYXRhKSB8CisJCShvZmZzZXQgPDwgRTEwMDBfTURJ Q19SRUdfU0hJRlQpIHwKKwkJKHBoeS0+YWRkciA8PCBFMTAwMF9NRElDX1BIWV9TSElGVCkgfAor CQkoRTEwMDBfTURJQ19PUF9XUklURSkpOworCisJd3IzMihFMTAwMF9NRElDLCBtZGljKTsKKwor CS8qCisJICogUG9sbCB0aGUgcmVhZHkgYml0IHRvIHNlZSBpZiB0aGUgTURJIHJlYWQgY29tcGxl dGVkCisJICogSW5jcmVhc2luZyB0aGUgdGltZSBvdXQgYXMgdGVzdGluZyBzaG93ZWQgZmFpbHVy ZXMgd2l0aAorCSAqIHRoZSBsb3dlciB0aW1lIG91dAorCSAqLworCWZvciAoaSA9IDA7IGkgPCAo RTEwMDBfR0VOX1BPTExfVElNRU9VVCAqIDMpOyBpKyspIHsKKwkJdWRlbGF5KDUwKTsKKwkJbWRp YyA9IHJkMzIoRTEwMDBfTURJQyk7CisJCWlmIChtZGljICYgRTEwMDBfTURJQ19SRUFEWSkKKwkJ CWJyZWFrOworCX0KKwlpZiAoIShtZGljICYgRTEwMDBfTURJQ19SRUFEWSkpIHsKKwkJaHdfZGJn KCJNREkgV3JpdGUgZGlkIG5vdCBjb21wbGV0ZVxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJS X1BIWTsKKwkJZ290byBvdXQ7CisJfQorCWlmIChtZGljICYgRTEwMDBfTURJQ19FUlJPUikgewor CQlod19kYmcoIk1ESSBFcnJvclxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKKwkJ Z290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGln Yl9yZWFkX3BoeV9yZWdfaWdwIC0gUmVhZCBpZ3AgUEhZIHJlZ2lzdGVyCisgKiAgQGh3OiBwb2lu dGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqICBAb2Zmc2V0OiByZWdpc3RlciBvZmZzZXQgdG8g YmUgcmVhZAorICogIEBkYXRhOiBwb2ludGVyIHRvIHRoZSByZWFkIGRhdGEKKyAqCisgKiAgQWNx dWlyZXMgc2VtYXBob3JlLCBpZiBuZWNlc3NhcnksIHRoZW4gcmVhZHMgdGhlIFBIWSByZWdpc3Rl ciBhdCBvZmZzZXQKKyAqICBhbmQgc3RvcmluZyB0aGUgcmV0cmlldmVkIGluZm9ybWF0aW9uIGlu IGRhdGEuICBSZWxlYXNlIGFueSBhY3F1aXJlZAorICogIHNlbWFwaG9yZXMgYmVmb3JlIGV4aXRp bmcuCisgKiovCitzMzIgaWdiX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywg dTMyIG9mZnNldCwgdTE2ICpkYXRhKQoreworCXMzMiByZXRfdmFsOworCisJcmV0X3ZhbCA9IGln Yl9hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKG9m ZnNldCA+IE1BWF9QSFlfTVVMVElfUEFHRV9SRUcpIHsKKwkJcmV0X3ZhbCA9IGlnYl93cml0ZV9w aHlfcmVnX21kaWMoaHcsCisJCQkJCQkgICBJR1AwMUUxMDAwX1BIWV9QQUdFX1NFTEVDVCwKKwkJ CQkJCSAgICh1MTYpb2Zmc2V0KTsKKwkJaWYgKHJldF92YWwpIHsKKwkJCWlnYl9yZWxlYXNlX3Bo eShodyk7CisJCQlnb3RvIG91dDsKKwkJfQorCX0KKworCXJldF92YWwgPSBpZ2JfcmVhZF9waHlf cmVnX21kaWMoaHcsCisJCQkJCSAgTUFYX1BIWV9SRUdfQUREUkVTUyAmIG9mZnNldCwKKwkJCQkJ ICBkYXRhKTsKKworCWlnYl9yZWxlYXNlX3BoeShodyk7CisKK291dDoKKwlyZXR1cm4gcmV0X3Zh bDsKK30KKworLyoqCisgKiAgaWdiX3dyaXRlX3BoeV9yZWdfaWdwIC0gV3JpdGUgaWdwIFBIWSBy ZWdpc3RlcgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQG9mZnNl dDogcmVnaXN0ZXIgb2Zmc2V0IHRvIHdyaXRlIHRvCisgKiAgQGRhdGE6IGRhdGEgdG8gd3JpdGUg YXQgcmVnaXN0ZXIgb2Zmc2V0CisgKgorICogIEFjcXVpcmVzIHNlbWFwaG9yZSwgaWYgbmVjZXNz YXJ5LCB0aGVuIHdyaXRlcyB0aGUgZGF0YSB0byBQSFkgcmVnaXN0ZXIKKyAqICBhdCB0aGUgb2Zm c2V0LiAgUmVsZWFzZSBhbnkgYWNxdWlyZWQgc2VtYXBob3JlcyBiZWZvcmUgZXhpdGluZy4KKyAq Ki8KK3MzMiBpZ2Jfd3JpdGVfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpodywgdTMyIG9m ZnNldCwgdTE2IGRhdGEpCit7CisJczMyIHJldF92YWw7CisKKwlyZXRfdmFsID0gaWdiX2FjcXVp cmVfcGh5KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAob2Zmc2V0ID4g TUFYX1BIWV9NVUxUSV9QQUdFX1JFRykgeworCQlyZXRfdmFsID0gaWdiX3dyaXRlX3BoeV9yZWdf bWRpYyhodywKKwkJCQkJCSAgIElHUDAxRTEwMDBfUEhZX1BBR0VfU0VMRUNULAorCQkJCQkJICAg KHUxNilvZmZzZXQpOworCQlpZiAocmV0X3ZhbCkgeworCQkJaWdiX3JlbGVhc2VfcGh5KGh3KTsK KwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJcmV0X3ZhbCA9IGlnYl93cml0ZV9waHlfcmVnX21k aWMoaHcsCisJCQkJCSAgIE1BWF9QSFlfUkVHX0FERFJFU1MgJiBvZmZzZXQsCisJCQkJCSAgIGRh dGEpOworCisJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKworb3V0OgorCXJldHVybiByZXRfdmFsOwor fQorCisvKioKKyAqICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfbTg4IC0gU2V0dXAgbTg4IFBIWSdz IGZvciBjb3BwZXIgbGluaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisg KgorICogIFNldHMgdXAgTURJL01ESS1YIGFuZCBwb2xhcml0eSBmb3IgbTg4IFBIWSdzLiAgSWYg bmVjZXNzYXJ5LCB0cmFuc21pdCBjbG9jaworICogIGFuZCBkb3duc2hpZnQgdmFsdWVzIGFyZSBz ZXQgYWxzby4KKyAqKi8KK3MzMiBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfbTg4KHN0cnVjdCBlMTAw MF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlz MzIgcmV0X3ZhbDsKKwl1MTYgcGh5X2RhdGE7CisKKwlpZiAocGh5LT5yZXNldF9kaXNhYmxlKSB7 CisJCXJldF92YWwgPSAwOworCQlnb3RvIG91dDsKKwl9CisKKwkvKiBFbmFibGUgQ1JTIG9uIFRY LiBUaGlzIG11c3QgYmUgc2V0IGZvciBoYWxmLWR1cGxleCBvcGVyYXRpb24uICovCisJcmV0X3Zh bCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwK KwkJCQkJICAgJnBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlwaHlf ZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9DUlNfT05fVFg7CisKKwkvKgorCSAqIE9wdGlv bnM6CisJICogICBNREkvTURJLVggPSAwIChkZWZhdWx0KQorCSAqICAgMCAtIEF1dG8gZm9yIGFs bCBzcGVlZHMKKwkgKiAgIDEgLSBNREkgbW9kZQorCSAqICAgMiAtIE1ESS1YIG1vZGUKKwkgKiAg IDMgLSBBdXRvIGZvciAxMDAwQmFzZS1UIG9ubHkgKE1ESS1YIGZvciAxMC8xMDBCYXNlLVQgbW9k ZXMpCisJICovCisJcGh5X2RhdGEgJj0gfk04OEUxMDAwX1BTQ1JfQVVUT19YX01PREU7CisKKwlz d2l0Y2ggKHBoeS0+bWRpeCkgeworCWNhc2UgMToKKwkJcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFND Ul9NRElfTUFOVUFMX01PREU7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJcGh5X2RhdGEgfD0gTTg4 RTEwMDBfUFNDUl9NRElYX01BTlVBTF9NT0RFOworCQlicmVhazsKKwljYXNlIDM6CisJCXBoeV9k YXRhIHw9IE04OEUxMDAwX1BTQ1JfQVVUT19YXzEwMDBUOworCQlicmVhazsKKwljYXNlIDA6CisJ ZGVmYXVsdDoKKwkJcGh5X2RhdGEgfD0gTTg4RTEwMDBfUFNDUl9BVVRPX1hfTU9ERTsKKwkJYnJl YWs7CisJfQorCisJLyoKKwkgKiBPcHRpb25zOgorCSAqICAgZGlzYWJsZV9wb2xhcml0eV9jb3Jy ZWN0aW9uID0gMCAoZGVmYXVsdCkKKwkgKiAgICAgICBBdXRvbWF0aWMgQ29ycmVjdGlvbiBmb3Ig UmV2ZXJzZWQgQ2FibGUgUG9sYXJpdHkKKwkgKiAgIDAgLSBEaXNhYmxlZAorCSAqICAgMSAtIEVu YWJsZWQKKwkgKi8KKwlwaHlfZGF0YSAmPSB+TTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNB TDsKKwlpZiAocGh5LT5kaXNhYmxlX3BvbGFyaXR5X2NvcnJlY3Rpb24gPT0gMSkKKwkJcGh5X2Rh dGEgfD0gTTg4RTEwMDBfUFNDUl9QT0xBUklUWV9SRVZFUlNBTDsKKworCXJldF92YWwgPSBody0+ cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAorCQkJCQkg ICAgcGh5X2RhdGEpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWlmIChwaHktPnJl dmlzaW9uIDwgRTEwMDBfUkVWSVNJT05fNCkgeworCQkvKgorCQkgKiBGb3JjZSBUWF9DTEsgaW4g dGhlIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyCisJCSAqIHRvIDI1TUh6 IGNsb2NrLgorCQkgKi8KKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywK KwkJCQkJICAgICBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwKKwkJCQkJICAgICAmcGh5X2Rh dGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCisJCXBoeV9kYXRhIHw9IE04OEUx MDAwX0VQU0NSX1RYX0NMS18yNTsKKworCQlpZiAoKHBoeS0+cmV2aXNpb24gPT0gRTEwMDBfUkVW SVNJT05fMikgJiYKKwkJICAgIChwaHktPmlkID09IE04OEUxMTExX0lfUEhZX0lEKSkgeworCQkJ LyogODI1NzNMIFBIWSAtIHNldCB0aGUgZG93bnNoaWZ0IGNvdW50ZXIgdG8gNXguICovCisJCQlw aHlfZGF0YSAmPSB+TTg4RUMwMThfRVBTQ1JfRE9XTlNISUZUX0NPVU5URVJfTUFTSzsKKwkJCXBo eV9kYXRhIHw9IE04OEVDMDE4X0VQU0NSX0RPV05TSElGVF9DT1VOVEVSXzVYOworCQl9IGVsc2Ug eworCQkJLyogQ29uZmlndXJlIE1hc3RlciBhbmQgU2xhdmUgZG93bnNoaWZ0IHZhbHVlcyAqLwor CQkJcGh5X2RhdGEgJj0gfihNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUX01BU0sgfAor CQkJCSAgICAgIE04OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF9NQVNLKTsKKwkJCXBoeV9k YXRhIHw9IChNODhFMTAwMF9FUFNDUl9NQVNURVJfRE9XTlNISUZUXzFYIHwKKwkJCQkgICAgIE04 OEUxMDAwX0VQU0NSX1NMQVZFX0RPV05TSElGVF8xWCk7CisJCX0KKwkJcmV0X3ZhbCA9IGh3LT5w aHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQkJCSAgICAgTTg4RTEwMDBfRVhUX1BIWV9TUEVD X0NUUkwsCisJCQkJCSAgICAgcGh5X2RhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0 OworCX0KKworCS8qIENvbW1pdCB0aGUgY2hhbmdlcy4gKi8KKwlyZXRfdmFsID0gaWdiX3BoeV9z d19yZXNldChodyk7CisJaWYgKHJldF92YWwpIHsKKwkJaHdfZGJnKCJFcnJvciBjb21taXR0aW5n IHRoZSBQSFkgY2hhbmdlc1xuIik7CisJCWdvdG8gb3V0OworCX0KKworb3V0OgorCXJldHVybiBy ZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwIC0gU2V0dXAg aWdwIFBIWSdzIGZvciBjb3BwZXIgbGluaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3Ry dWN0dXJlCisgKgorICogIFNldHMgdXAgTFBMVSwgTURJL01ESS1YLCBwb2xhcml0eSwgU21hcnRz cGVlZCBhbmQgTWFzdGVyL1NsYXZlIGNvbmZpZyBmb3IKKyAqICBpZ3AgUEhZJ3MuCisgKiovCitz MzIgaWdiX2NvcHBlcl9saW5rX3NldHVwX2lncChzdHJ1Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0 cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJldF92YWw7CisJdTE2 IGRhdGE7CisKKwlpZiAocGh5LT5yZXNldF9kaXNhYmxlKSB7CisJCXJldF92YWwgPSAwOworCQln b3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVzZXRfcGh5KGh3KTsKKwlp ZiAocmV0X3ZhbCkgeworCQlod19kYmcoIkVycm9yIHJlc2V0dGluZyB0aGUgUEhZLlxuIik7CisJ CWdvdG8gb3V0OworCX0KKworCS8qIFdhaXQgMTVtcyBmb3IgTUFDIHRvIGNvbmZpZ3VyZSBQSFkg ZnJvbSBOVk0gc2V0dGluZ3MuICovCisJbXNsZWVwKDE1KTsKKworCS8qCisJICogVGhlIE5WTSBz ZXR0aW5ncyB3aWxsIGNvbmZpZ3VyZSBMUExVIGluIEQzIGZvcgorCSAqIG5vbi1JR1AxIFBIWXMu CisJICovCisJaWYgKHBoeS0+dHlwZSA9PSBlMTAwMF9waHlfaWdwKSB7CisJCS8qIGRpc2FibGUg bHBsdSBkMyBkdXJpbmcgZHJpdmVyIGluaXQgKi8KKwkJaWYgKGh3LT5waHkub3BzLnNldF9kM19s cGx1X3N0YXRlKQorCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnNldF9kM19scGx1X3N0YXRlKGh3 LCBmYWxzZSk7CisJCWlmIChyZXRfdmFsKSB7CisJCQlod19kYmcoIkVycm9yIERpc2FibGluZyBM UExVIEQzXG4iKTsKKwkJCWdvdG8gb3V0OworCQl9CisJfQorCisJLyogZGlzYWJsZSBscGx1IGQw IGR1cmluZyBkcml2ZXIgaW5pdCAqLworCXJldF92YWwgPSBody0+cGh5Lm9wcy5zZXRfZDBfbHBs dV9zdGF0ZShodywgZmFsc2UpOworCWlmIChyZXRfdmFsKSB7CisJCWh3X2RiZygiRXJyb3IgRGlz YWJsaW5nIExQTFUgRDBcbiIpOworCQlnb3RvIG91dDsKKwl9CisJLyogQ29uZmlndXJlIG1kaS1t ZGl4IHNldHRpbmdzICovCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywg SUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCAmZGF0YSk7CisJaWYgKHJldF92YWwpCisJCWdvdG8g b3V0OworCisJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NSX0FVVE9fTURJWDsKKworCXN3aXRjaCAo cGh5LT5tZGl4KSB7CisJY2FzZSAxOgorCQlkYXRhICY9IH5JR1AwMUUxMDAwX1BTQ1JfRk9SQ0Vf TURJX01ESVg7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZGF0YSB8PSBJR1AwMUUxMDAwX1BTQ1Jf Rk9SQ0VfTURJX01ESVg7CisJCWJyZWFrOworCWNhc2UgMDoKKwlkZWZhdWx0OgorCQlkYXRhIHw9 IElHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVg7CisJCWJyZWFrOworCX0KKwlyZXRfdmFsID0gaHct PnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgSUdQMDFFMTAwMF9QSFlfUE9SVF9DVFJMLCBkYXRh KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwkvKiBzZXQgYXV0by1tYXN0ZXIgc2xh dmUgcmVzb2x1dGlvbiBzZXR0aW5ncyAqLworCWlmIChody0+bWFjLmF1dG9uZWcpIHsKKwkJLyoK KwkJICogd2hlbiBhdXRvbmVnb3RpYXRpb24gYWR2ZXJ0aXNlbWVudCBpcyBvbmx5IDEwMDBNYnBz IHRoZW4gd2UKKwkJICogc2hvdWxkIGRpc2FibGUgU21hcnRTcGVlZCBhbmQgZW5hYmxlIEF1dG8g TWFzdGVyU2xhdmUKKwkJICogcmVzb2x1dGlvbiBhcyBoYXJkd2FyZSBkZWZhdWx0LgorCQkgKi8K KwkJaWYgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEFEVkVSVElTRV8xMDAwX0ZVTEwpIHsK KwkJCS8qIERpc2FibGUgU21hcnRTcGVlZCAqLworCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJl YWRfcGh5X3JlZyhodywKKwkJCQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJ CQkJCQkgICAgICZkYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCisJCQlk YXRhICY9IH5JR1AwMUUxMDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOworCQkJcmV0X3ZhbCA9IGh3LT5w aHkub3BzLndyaXRlX3BoeV9yZWcoaHcsCisJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRf Q09ORklHLAorCQkJCQkJICAgICBkYXRhKTsKKwkJCWlmIChyZXRfdmFsKQorCQkJCWdvdG8gb3V0 OworCisJCQkvKiBTZXQgYXV0byBNYXN0ZXIvU2xhdmUgcmVzb2x1dGlvbiBwcm9jZXNzICovCisJ CQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQSFlfMTAwMFRfQ1RSTCwK KwkJCQkJCQkgICAmZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIG91dDsKKworCQkJ ZGF0YSAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOworCQkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndy aXRlX3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLAorCQkJCQkJCSAgICBkYXRhKTsKKwkJCWlm IChyZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCQl9CisKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3Bz LnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX0NUUkwsICZkYXRhKTsKKwkJaWYgKHJldF92YWwp CisJCQlnb3RvIG91dDsKKworCQkvKiBsb2FkIGRlZmF1bHRzIGZvciBmdXR1cmUgdXNlICovCisJ CXBoeS0+b3JpZ2luYWxfbXNfdHlwZSA9IChkYXRhICYgQ1JfMTAwMFRfTVNfRU5BQkxFKSA/CisJ CQkoKGRhdGEgJiBDUl8xMDAwVF9NU19WQUxVRSkgPworCQkJZTEwMDBfbXNfZm9yY2VfbWFzdGVy IDoKKwkJCWUxMDAwX21zX2ZvcmNlX3NsYXZlKSA6CisJCQllMTAwMF9tc19hdXRvOworCisJCXN3 aXRjaCAocGh5LT5tc190eXBlKSB7CisJCWNhc2UgZTEwMDBfbXNfZm9yY2VfbWFzdGVyOgorCQkJ ZGF0YSB8PSAoQ1JfMTAwMFRfTVNfRU5BQkxFIHwgQ1JfMTAwMFRfTVNfVkFMVUUpOworCQkJYnJl YWs7CisJCWNhc2UgZTEwMDBfbXNfZm9yY2Vfc2xhdmU6CisJCQlkYXRhIHw9IENSXzEwMDBUX01T X0VOQUJMRTsKKwkJCWRhdGEgJj0gfihDUl8xMDAwVF9NU19WQUxVRSk7CisJCQlicmVhazsKKwkJ Y2FzZSBlMTAwMF9tc19hdXRvOgorCQkJZGF0YSAmPSB+Q1JfMTAwMFRfTVNfRU5BQkxFOworCQlk ZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3Bo eV9yZWcoaHcsIFBIWV8xMDAwVF9DVFJMLCBkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3Rv IG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX2Nv cHBlcl9saW5rX2F1dG9uZWcgLSBTZXR1cC9FbmFibGUgYXV0b25lZyBmb3IgY29wcGVyIGxpbmsK KyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBQZXJmb3JtcyBp bml0aWFsIGJvdW5kcyBjaGVja2luZyBvbiBhdXRvbmVnIGFkdmVydGlzZW1lbnQgcGFyYW1ldGVy LCB0aGVuCisgKiAgY29uZmlndXJlIHRvIGFkdmVydGlzZSB0aGUgZnVsbCBjYXBhYmlsaXR5LiAg U2V0dXAgdGhlIFBIWSB0byBhdXRvbmVnCisgKiAgYW5kIHJlc3RhcnQgdGhlIG5lZ290aWF0aW9u IHByb2Nlc3MgYmV0d2VlbiB0aGUgbGluayBwYXJ0bmVyLiAgSWYKKyAqICBhdXRvbmVnX3dhaXRf dG9fY29tcGxldGUsIHRoZW4gd2FpdCBmb3IgYXV0b25lZyB0byBjb21wbGV0ZSBiZWZvcmUgZXhp dGluZy4KKyAqKi8KK3MzMiBpZ2JfY29wcGVyX2xpbmtfYXV0b25lZyhzdHJ1Y3QgZTEwMDBfaHcg Kmh3KQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJczMyIHJl dF92YWw7CisJdTE2IHBoeV9jdHJsOworCisJLyoKKwkgKiBQZXJmb3JtIHNvbWUgYm91bmRzIGNo ZWNraW5nIG9uIHRoZSBhdXRvbmVnIGFkdmVydGlzZW1lbnQKKwkgKiBwYXJhbWV0ZXIuCisJICov CisJcGh5LT5hdXRvbmVnX2FkdmVydGlzZWQgJj0gcGh5LT5hdXRvbmVnX21hc2s7CisKKwkvKgor CSAqIElmIGF1dG9uZWdfYWR2ZXJ0aXNlZCBpcyB6ZXJvLCB3ZSBhc3N1bWUgaXQgd2FzIG5vdCBk ZWZhdWx0ZWQKKwkgKiBieSB0aGUgY2FsbGluZyBjb2RlIHNvIHdlIHNldCB0byBhZHZlcnRpc2Ug ZnVsbCBjYXBhYmlsaXR5LgorCSAqLworCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSAw KQorCQlwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IHBoeS0+YXV0b25lZ19tYXNrOworCisJaHdf ZGJnKCJSZWNvbmZpZ3VyaW5nIGF1dG8tbmVnIGFkdmVydGlzZW1lbnQgcGFyYW1zXG4iKTsKKwly ZXRfdmFsID0gaWdiX3BoeV9zZXR1cF9hdXRvbmVnKGh3KTsKKwlpZiAocmV0X3ZhbCkgeworCQlo d19kYmcoIkVycm9yIFNldHRpbmcgdXAgQXV0by1OZWdvdGlhdGlvblxuIik7CisJCWdvdG8gb3V0 OworCX0KKwlod19kYmcoIlJlc3RhcnRpbmcgQXV0by1OZWdcbiIpOworCisJLyoKKwkgKiBSZXN0 YXJ0IGF1dG8tbmVnb3RpYXRpb24gYnkgc2V0dGluZyB0aGUgQXV0byBOZWcgRW5hYmxlIGJpdCBh bmQKKwkgKiB0aGUgQXV0byBOZWcgUmVzdGFydCBiaXQgaW4gdGhlIFBIWSBjb250cm9sIHJlZ2lz dGVyLgorCSAqLworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9D T05UUk9MLCAmcGh5X2N0cmwpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXBoeV9j dHJsIHw9IChNSUlfQ1JfQVVUT19ORUdfRU4gfCBNSUlfQ1JfUkVTVEFSVF9BVVRPX05FRyk7CisJ cmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlf Y3RybCk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBEb2VzIHRoZSB1 c2VyIHdhbnQgdG8gd2FpdCBmb3IgQXV0by1OZWcgdG8gY29tcGxldGUgaGVyZSwgb3IKKwkgKiBj aGVjayBhdCBhIGxhdGVyIHRpbWUgKGZvciBleGFtcGxlLCBjYWxsYmFjayByb3V0aW5lKS4KKwkg Ki8KKwlpZiAocGh5LT5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUpIHsKKwkJcmV0X3ZhbCA9IGln Yl93YWl0X2F1dG9uZWcoaHcpOworCQlpZiAocmV0X3ZhbCkgeworCQkJaHdfZGJnKCJFcnJvciB3 aGlsZSB3YWl0aW5nIGZvciAiCisJCQkgICAgICAgImF1dG9uZWcgdG8gY29tcGxldGVcbiIpOwor CQkJZ290byBvdXQ7CisJCX0KKwl9CisKKwlody0+bWFjLmdldF9saW5rX3N0YXR1cyA9IHRydWU7 CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3BoeV9zZXR1cF9h dXRvbmVnIC0gQ29uZmlndXJlIFBIWSBmb3IgYXV0by1uZWdvdGlhdGlvbgorICogIEBodzogcG9p bnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFJlYWRzIHRoZSBNSUkgYXV0by1uZWcg YWR2ZXJ0aXNlbWVudCByZWdpc3RlciBhbmQvb3IgdGhlIDEwMDBUIGNvbnRyb2wKKyAqICByZWdp c3RlciBhbmQgaWYgdGhlIFBIWSBpcyBhbHJlYWR5IHNldHVwIGZvciBhdXRvLW5lZ290aWF0aW9u LCB0aGVuCisgKiAgcmV0dXJuIHN1Y2Nlc3NmdWwuICBPdGhlcndpc2UsIHNldHVwIGFkdmVydGlz ZW1lbnQgYW5kIGZsb3cgY29udHJvbCB0bworICogIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9y IHRoZSB3YW50ZWQgYXV0by1uZWdvdGlhdGlvbi4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX3BoeV9z ZXR1cF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9p bmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgbWlpX2F1dG9uZWdfYWR2 X3JlZzsKKwl1MTYgbWlpXzEwMDB0X2N0cmxfcmVnID0gMDsKKworCXBoeS0+YXV0b25lZ19hZHZl cnRpc2VkICY9IHBoeS0+YXV0b25lZ19tYXNrOworCisJLyogUmVhZCB0aGUgTUlJIEF1dG8tTmVn IEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkuICovCisJcmV0X3ZhbCA9IGh3LT5w aHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0FVVE9ORUdfQURWLAorCQkJCQkgICAmbWlpX2F1 dG9uZWdfYWR2X3JlZyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKHBoeS0+ YXV0b25lZ19tYXNrICYgQURWRVJUSVNFXzEwMDBfRlVMTCkgeworCQkvKiBSZWFkIHRoZSBNSUkg MTAwMEJhc2UtVCBDb250cm9sIFJlZ2lzdGVyIChBZGRyZXNzIDkpLiAqLworCQlyZXRfdmFsID0g aHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJCQkgICAgUEhZXzEwMDBUX0NUUkwsCisJ CQkJCSAgICAmbWlpXzEwMDB0X2N0cmxfcmVnKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91 dDsKKwl9CisKKwkvKgorCSAqIE5lZWQgdG8gcGFyc2UgYm90aCBhdXRvbmVnX2FkdmVydGlzZWQg YW5kIGZjIGFuZCBzZXQgdXAKKwkgKiB0aGUgYXBwcm9wcmlhdGUgUEhZIHJlZ2lzdGVycy4gIEZp cnN0IHdlIHdpbGwgcGFyc2UgZm9yCisJICogYXV0b25lZ19hZHZlcnRpc2VkIHNvZnR3YXJlIG92 ZXJyaWRlLiAgU2luY2Ugd2UgY2FuIGFkdmVydGlzZQorCSAqIGEgcGxldGhvcmEgb2YgY29tYmlu YXRpb25zLCB3ZSBuZWVkIHRvIGNoZWNrIGVhY2ggYml0CisJICogaW5kaXZpZHVhbGx5LgorCSAq LworCisJLyoKKwkgKiBGaXJzdCB3ZSBjbGVhciBhbGwgdGhlIDEwLzEwMCBtYiBzcGVlZCBiaXRz IGluIHRoZSBBdXRvLU5lZworCSAqIEFkdmVydGlzZW1lbnQgUmVnaXN0ZXIgKEFkZHJlc3MgNCkg YW5kIHRoZSAxMDAwIG1iIHNwZWVkIGJpdHMgaW4KKwkgKiB0aGUgIDEwMDBCYXNlLVQgQ29udHJv bCBSZWdpc3RlciAoQWRkcmVzcyA5KS4KKwkgKi8KKwltaWlfYXV0b25lZ19hZHZfcmVnICY9IH4o TldBWV9BUl8xMDBUWF9GRF9DQVBTIHwKKwkJCQkgTldBWV9BUl8xMDBUWF9IRF9DQVBTIHwKKwkJ CQkgTldBWV9BUl8xMFRfRkRfQ0FQUyAgIHwKKwkJCQkgTldBWV9BUl8xMFRfSERfQ0FQUyk7CisJ bWlpXzEwMDB0X2N0cmxfcmVnICY9IH4oQ1JfMTAwMFRfSERfQ0FQUyB8IENSXzEwMDBUX0ZEX0NB UFMpOworCisJaHdfZGJnKCJhdXRvbmVnX2FkdmVydGlzZWQgJXhcbiIsIHBoeS0+YXV0b25lZ19h ZHZlcnRpc2VkKTsKKworCS8qIERvIHdlIHdhbnQgdG8gYWR2ZXJ0aXNlIDEwIE1iIEhhbGYgRHVw bGV4PyAqLworCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMF9IQUxG KSB7CisJCWh3X2RiZygiQWR2ZXJ0aXNlIDEwbWIgSGFsZiBkdXBsZXhcbiIpOworCQltaWlfYXV0 b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJfMTBUX0hEX0NBUFM7CisJfQorCisJLyogRG8gd2Ugd2Fu dCB0byBhZHZlcnRpc2UgMTAgTWIgRnVsbCBEdXBsZXg/ICovCisJaWYgKHBoeS0+YXV0b25lZ19h ZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwX0ZVTEwpIHsKKwkJaHdfZGJnKCJBZHZlcnRpc2UgMTBt YiBGdWxsIGR1cGxleFxuIik7CisJCW1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gTldBWV9BUl8xMFRf RkRfQ0FQUzsKKwl9CisKKwkvKiBEbyB3ZSB3YW50IHRvIGFkdmVydGlzZSAxMDAgTWIgSGFsZiBE dXBsZXg/ICovCisJaWYgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkICYgQURWRVJUSVNFXzEwMF9I QUxGKSB7CisJCWh3X2RiZygiQWR2ZXJ0aXNlIDEwMG1iIEhhbGYgZHVwbGV4XG4iKTsKKwkJbWlp X2F1dG9uZWdfYWR2X3JlZyB8PSBOV0FZX0FSXzEwMFRYX0hEX0NBUFM7CisJfQorCisJLyogRG8g d2Ugd2FudCB0byBhZHZlcnRpc2UgMTAwIE1iIEZ1bGwgRHVwbGV4PyAqLworCWlmIChwaHktPmF1 dG9uZWdfYWR2ZXJ0aXNlZCAmIEFEVkVSVElTRV8xMDBfRlVMTCkgeworCQlod19kYmcoIkFkdmVy dGlzZSAxMDBtYiBGdWxsIGR1cGxleFxuIik7CisJCW1paV9hdXRvbmVnX2Fkdl9yZWcgfD0gTldB WV9BUl8xMDBUWF9GRF9DQVBTOworCX0KKworCS8qIFdlIGRvIG5vdCBhbGxvdyB0aGUgUGh5IHRv IGFkdmVydGlzZSAxMDAwIE1iIEhhbGYgRHVwbGV4ICovCisJaWYgKHBoeS0+YXV0b25lZ19hZHZl cnRpc2VkICYgQURWRVJUSVNFXzEwMDBfSEFMRikKKwkJaHdfZGJnKCJBZHZlcnRpc2UgMTAwMG1i IEhhbGYgZHVwbGV4IHJlcXVlc3QgZGVuaWVkIVxuIik7CisKKwkvKiBEbyB3ZSB3YW50IHRvIGFk dmVydGlzZSAxMDAwIE1iIEZ1bGwgRHVwbGV4PyAqLworCWlmIChwaHktPmF1dG9uZWdfYWR2ZXJ0 aXNlZCAmIEFEVkVSVElTRV8xMDAwX0ZVTEwpIHsKKwkJaHdfZGJnKCJBZHZlcnRpc2UgMTAwMG1i IEZ1bGwgZHVwbGV4XG4iKTsKKwkJbWlpXzEwMDB0X2N0cmxfcmVnIHw9IENSXzEwMDBUX0ZEX0NB UFM7CisJfQorCisJLyoKKwkgKiBDaGVjayBmb3IgYSBzb2Z0d2FyZSBvdmVycmlkZSBvZiB0aGUg ZmxvdyBjb250cm9sIHNldHRpbmdzLCBhbmQKKwkgKiBzZXR1cCB0aGUgUEhZIGFkdmVydGlzZW1l bnQgcmVnaXN0ZXJzIGFjY29yZGluZ2x5LiAgSWYKKwkgKiBhdXRvLW5lZ290aWF0aW9uIGlzIGVu YWJsZWQsIHRoZW4gc29mdHdhcmUgd2lsbCBoYXZlIHRvIHNldCB0aGUKKwkgKiAiUEFVU0UiIGJp dHMgdG8gdGhlIGNvcnJlY3QgdmFsdWUgaW4gdGhlIEF1dG8tTmVnb3RpYXRpb24KKwkgKiBBZHZl cnRpc2VtZW50IFJlZ2lzdGVyIChQSFlfQVVUT05FR19BRFYpIGFuZCByZS1zdGFydCBhdXRvLQor CSAqIG5lZ290aWF0aW9uLgorCSAqCisJICogVGhlIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgImZj IiBwYXJhbWV0ZXIgYXJlOgorCSAqICAgICAgMDogIEZsb3cgY29udHJvbCBpcyBjb21wbGV0ZWx5 IGRpc2FibGVkCisJICogICAgICAxOiAgUnggZmxvdyBjb250cm9sIGlzIGVuYWJsZWQgKHdlIGNh biByZWNlaXZlIHBhdXNlIGZyYW1lcworCSAqICAgICAgICAgIGJ1dCBub3Qgc2VuZCBwYXVzZSBm cmFtZXMpLgorCSAqICAgICAgMjogIFR4IGZsb3cgY29udHJvbCBpcyBlbmFibGVkICh3ZSBjYW4g c2VuZCBwYXVzZSBmcmFtZXMKKwkgKiAgICAgICAgICBidXQgd2UgZG8gbm90IHN1cHBvcnQgcmVj ZWl2aW5nIHBhdXNlIGZyYW1lcykuCisJICogICAgICAzOiAgQm90aCBSeCBhbmQgVFggZmxvdyBj b250cm9sIChzeW1tZXRyaWMpIGFyZSBlbmFibGVkLgorCSAqICBvdGhlcjogIE5vIHNvZnR3YXJl IG92ZXJyaWRlLiAgVGhlIGZsb3cgY29udHJvbCBjb25maWd1cmF0aW9uCisJICogICAgICAgICAg aW4gdGhlIEVFUFJPTSBpcyB1c2VkLgorCSAqLworCXN3aXRjaCAoaHctPmZjLnR5cGUpIHsKKwlj YXNlIGUxMDAwX2ZjX25vbmU6CisJCS8qCisJCSAqIEZsb3cgY29udHJvbCAoUlggJiBUWCkgaXMg Y29tcGxldGVseSBkaXNhYmxlZCBieSBhCisJCSAqIHNvZnR3YXJlIG92ZXItcmlkZS4KKwkJICov CisJCW1paV9hdXRvbmVnX2Fkdl9yZWcgJj0gfihOV0FZX0FSX0FTTV9ESVIgfCBOV0FZX0FSX1BB VVNFKTsKKwkJYnJlYWs7CisJY2FzZSBlMTAwMF9mY19yeF9wYXVzZToKKwkJLyoKKwkJICogUlgg RmxvdyBjb250cm9sIGlzIGVuYWJsZWQsIGFuZCBUWCBGbG93IGNvbnRyb2wgaXMKKwkJICogZGlz YWJsZWQsIGJ5IGEgc29mdHdhcmUgb3Zlci1yaWRlLgorCQkgKgorCQkgKiBTaW5jZSB0aGVyZSBy ZWFsbHkgaXNuJ3QgYSB3YXkgdG8gYWR2ZXJ0aXNlIHRoYXQgd2UgYXJlCisJCSAqIGNhcGFibGUg b2YgUlggUGF1c2UgT05MWSwgd2Ugd2lsbCBhZHZlcnRpc2UgdGhhdCB3ZQorCQkgKiBzdXBwb3J0 IGJvdGggc3ltbWV0cmljIGFuZCBhc3ltbWV0cmljIFJYIFBBVVNFLiAgTGF0ZXIKKwkJICogKGlu IGUxMDAwX2NvbmZpZ19mY19hZnRlcl9saW5rX3VwKSB3ZSB3aWxsIGRpc2FibGUgdGhlCisJCSAq IGh3J3MgYWJpbGl0eSB0byBzZW5kIFBBVVNFIGZyYW1lcy4KKwkJICovCisJCW1paV9hdXRvbmVn X2Fkdl9yZWcgfD0gKE5XQVlfQVJfQVNNX0RJUiB8IE5XQVlfQVJfUEFVU0UpOworCQlicmVhazsK KwljYXNlIGUxMDAwX2ZjX3R4X3BhdXNlOgorCQkvKgorCQkgKiBUWCBGbG93IGNvbnRyb2wgaXMg ZW5hYmxlZCwgYW5kIFJYIEZsb3cgY29udHJvbCBpcworCQkgKiBkaXNhYmxlZCwgYnkgYSBzb2Z0 d2FyZSBvdmVyLXJpZGUuCisJCSAqLworCQltaWlfYXV0b25lZ19hZHZfcmVnIHw9IE5XQVlfQVJf QVNNX0RJUjsKKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyAmPSB+TldBWV9BUl9QQVVTRTsKKwkJYnJl YWs7CisJY2FzZSBlMTAwMF9mY19mdWxsOgorCQkvKgorCQkgKiBGbG93IGNvbnRyb2wgKGJvdGgg UlggYW5kIFRYKSBpcyBlbmFibGVkIGJ5IGEgc29mdHdhcmUKKwkJICogb3Zlci1yaWRlLgorCQkg Ki8KKwkJbWlpX2F1dG9uZWdfYWR2X3JlZyB8PSAoTldBWV9BUl9BU01fRElSIHwgTldBWV9BUl9Q QVVTRSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWh3X2RiZygiRmxvdyBjb250cm9sIHBhcmFt IHNldCBpbmNvcnJlY3RseVxuIik7CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKKwkJ Z290byBvdXQ7CisJfQorCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcs IFBIWV9BVVRPTkVHX0FEViwKKwkJCQkJICAgIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCWlmIChy ZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWh3X2RiZygiQXV0by1OZWcgQWR2ZXJ0aXNpbmcgJXhc biIsIG1paV9hdXRvbmVnX2Fkdl9yZWcpOworCisJaWYgKHBoeS0+YXV0b25lZ19tYXNrICYgQURW RVJUSVNFXzEwMDBfRlVMTCkgeworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3Jl ZyhodywKKwkJCQkJICAgICAgUEhZXzEwMDBUX0NUUkwsCisJCQkJCSAgICAgIG1paV8xMDAwdF9j dHJsX3JlZyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0 dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X2ln cCAtIEZvcmNlIHNwZWVkL2R1cGxleCBmb3IgaWdwIFBIWQorICogIEBodzogcG9pbnRlciB0byB0 aGUgSFcgc3RydWN0dXJlCisgKgorICogIENhbGxzIHRoZSBQSFkgc2V0dXAgZnVuY3Rpb24gdG8g Zm9yY2Ugc3BlZWQgYW5kIGR1cGxleC4gIENsZWFycyB0aGUKKyAqICBhdXRvLWNyb3Nzb3ZlciB0 byBmb3JjZSBNREkgbWFudWFsbHkuICBXYWl0cyBmb3IgbGluayBhbmQgcmV0dXJucworICogIHN1 Y2Nlc3NmdWwgaWYgbGluayB1cCBpcyBzdWNjZXNzZnVsLCBlbHNlIC1FMTAwMF9FUlJfUEhZICgt MikuCisgKiovCitzMzIgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfaWdwKHN0cnVjdCBlMTAw MF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlz MzIgcmV0X3ZhbDsKKwl1MTYgcGh5X2RhdGE7CisJYm9vbCBsaW5rOworCisJcmV0X3ZhbCA9IGh3 LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsICZwaHlfZGF0YSk7CisJaWYg KHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0 dXAoaHcsICZwaHlfZGF0YSk7CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3Jl ZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7 CisKKwkvKgorCSAqIENsZWFyIEF1dG8tQ3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4g IElHUCByZXF1aXJlcyBNREkKKwkgKiBmb3JjZWQgd2hlbmV2ZXIgc3BlZWQgYW5kIGR1cGxleCBh cmUgZm9yY2VkLgorCSAqLworCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcs IElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RSTCwKKwkJCQkJICAgJnBoeV9kYXRhKTsKKwlpZiAocmV0 X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NSX0FVVE9f TURJWDsKKwlwaHlfZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NSX0ZPUkNFX01ESV9NRElYOworCisJ cmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIElHUDAxRTEwMDBfUEhZX1BP UlRfQ1RSTCwKKwkJCQkJICAgIHBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7 CisKKwlod19kYmcoIklHUCBQU0NSOiAlWFxuIiwgcGh5X2RhdGEpOworCisJdWRlbGF5KDEpOwor CisJaWYgKHBoeS0+YXV0b25lZ193YWl0X3RvX2NvbXBsZXRlKSB7CisJCWh3X2RiZygiV2FpdGlu ZyBmb3IgZm9yY2VkIHNwZWVkL2R1cGxleCBsaW5rIG9uIElHUCBwaHkuXG4iKTsKKworCQlyZXRf dmFsID0gaWdiX3BoeV9oYXNfbGluayhodywKKwkJCQkJCSAgICAgUEhZX0ZPUkNFX0xJTUlULAor CQkJCQkJICAgICAxMDAwMDAsCisJCQkJCQkgICAgICZsaW5rKTsKKwkJaWYgKHJldF92YWwpCisJ CQlnb3RvIG91dDsKKworCQlpZiAoIWxpbmspCisJCQlod19kYmcoIkxpbmsgdGFraW5nIGxvbmdl ciB0aGFuIGV4cGVjdGVkLlxuIik7CisKKwkJLyogVHJ5IG9uY2UgbW9yZSAqLworCQlyZXRfdmFs ID0gaWdiX3BoeV9oYXNfbGluayhodywKKwkJCQkJCSAgICAgUEhZX0ZPUkNFX0xJTUlULAorCQkJ CQkJICAgICAxMDAwMDAsCisJCQkJCQkgICAgICZsaW5rKTsKKwkJaWYgKHJldF92YWwpCisJCQln b3RvIG91dDsKKwl9CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdi X3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfbTg4IC0gRm9yY2Ugc3BlZWQvZHVwbGV4IGZvciBtODgg UEhZCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgQ2FsbHMg dGhlIFBIWSBzZXR1cCBmdW5jdGlvbiB0byBmb3JjZSBzcGVlZCBhbmQgZHVwbGV4LiAgQ2xlYXJz IHRoZQorICogIGF1dG8tY3Jvc3NvdmVyIHRvIGZvcmNlIE1ESSBtYW51YWxseS4gIFJlc2V0cyB0 aGUgUEhZIHRvIGNvbW1pdCB0aGUKKyAqICBjaGFuZ2VzLiAgSWYgdGltZSBleHBpcmVzIHdoaWxl IHdhaXRpbmcgZm9yIGxpbmsgdXAsIHdlIHJlc2V0IHRoZSBEU1AuCisgKiAgQWZ0ZXIgcmVzZXQs IFRYX0NMSyBhbmQgQ1JTIG9uIFRYIG11c3QgYmUgc2V0LiAgUmV0dXJuIHN1Y2Nlc3NmdWwgdXBv bgorICogIHN1Y2Nlc3NmdWwgY29tcGxldGlvbiwgZWxzZSByZXR1cm4gY29ycmVzcG9uZGluZyBl cnJvciBjb2RlLgorICoqLworczMyIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OChzdHJ1 Y3QgZTEwMDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5w aHk7CisJczMyIHJldF92YWw7CisJdTE2IHBoeV9kYXRhOworCWJvb2wgbGluazsKKworCS8qCisJ ICogQ2xlYXIgQXV0by1Dcm9zc292ZXIgdG8gZm9yY2UgTURJIG1hbnVhbGx5LiAgTTg4RTEwMDAg cmVxdWlyZXMgTURJCisJICogZm9yY2VkIHdoZW5ldmVyIHNwZWVkIGFuZCBkdXBsZXggYXJlIGZv cmNlZC4KKwkgKi8KKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhF MTAwMF9QSFlfU1BFQ19DVFJMLAorCQkJCQkgICAmcGh5X2RhdGEpOworCWlmIChyZXRfdmFsKQor CQlnb3RvIG91dDsKKworCXBoeV9kYXRhICY9IH5NODhFMTAwMF9QU0NSX0FVVE9fWF9NT0RFOwor CXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BF Q19DVFJMLAorCQkJCQkgICAgcGh5X2RhdGEpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsK KworCWh3X2RiZygiTTg4RTEwMDAgUFNDUjogJVhcbiIsIHBoeV9kYXRhKTsKKworCXJldF92YWwg PSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X2RhdGEpOwor CWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4 X3NldHVwKGh3LCAmcGh5X2RhdGEpOworCisJLyogUmVzZXQgdGhlIHBoeSB0byBjb21taXQgY2hh bmdlcy4gKi8KKwlwaHlfZGF0YSB8PSBNSUlfQ1JfUkVTRVQ7CisKKwlyZXRfdmFsID0gaHctPnBo eS5vcHMud3JpdGVfcGh5X3JlZyhodywgUEhZX0NPTlRST0wsIHBoeV9kYXRhKTsKKwlpZiAocmV0 X3ZhbCkKKwkJZ290byBvdXQ7CisKKwl1ZGVsYXkoMSk7CisKKwlpZiAocGh5LT5hdXRvbmVnX3dh aXRfdG9fY29tcGxldGUpIHsKKwkJaHdfZGJnKCJXYWl0aW5nIGZvciBmb3JjZWQgc3BlZWQvZHVw bGV4IGxpbmsgb24gTTg4IHBoeS5cbiIpOworCisJCXJldF92YWwgPSBpZ2JfcGh5X2hhc19saW5r KGh3LAorCQkJCQkJICAgICBQSFlfRk9SQ0VfTElNSVQsCisJCQkJCQkgICAgIDEwMDAwMCwKKwkJ CQkJCSAgICAgJmxpbmspOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCisJCWlmICgh bGluaykgeworCQkJLyoKKwkJCSAqIFdlIGRpZG4ndCBnZXQgbGluay4KKwkJCSAqIFJlc2V0IHRo ZSBEU1AgYW5kIGNyb3NzIG91ciBmaW5nZXJzLgorCQkJICovCisJCQlyZXRfdmFsID0gaHctPnBo eS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJCQkJCSAgICAgIE04OEUxMDAwX1BIWV9QQUdFX1NF TEVDVCwKKwkJCQkJCSAgICAgIDB4MDAxZCk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIG91 dDsKKwkJCXJldF92YWwgPSBpZ2JfcGh5X3Jlc2V0X2RzcChodyk7CisJCQlpZiAocmV0X3ZhbCkK KwkJCQlnb3RvIG91dDsKKwkJfQorCisJCS8qIFRyeSBvbmNlIG1vcmUgKi8KKwkJcmV0X3ZhbCA9 IGlnYl9waHlfaGFzX2xpbmsoaHcsIFBIWV9GT1JDRV9MSU1JVCwKKwkJCQkJICAgICAxMDAwMDAs ICZsaW5rKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0g aHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9FWFRfUEhZX1NQRUNfQ1RSTCwK KwkJCQkJICAgJnBoeV9kYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwkvKgor CSAqIFJlc2V0dGluZyB0aGUgcGh5IG1lYW5zIHdlIG5lZWQgdG8gcmUtZm9yY2UgVFhfQ0xLIGlu IHRoZQorCSAqIEV4dGVuZGVkIFBIWSBTcGVjaWZpYyBDb250cm9sIFJlZ2lzdGVyIHRvIDI1TUh6 IGNsb2NrIGZyb20KKwkgKiB0aGUgcmVzZXQgdmFsdWUgb2YgMi41TUh6LgorCSAqLworCXBoeV9k YXRhIHw9IE04OEUxMDAwX0VQU0NSX1RYX0NMS18yNTsKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMu d3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfRVhUX1BIWV9TUEVDX0NUUkwsCisJCQkJCSAgICBw aHlfZGF0YSk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJLyoKKwkgKiBJbiBhZGRp dGlvbiwgd2UgbXVzdCByZS1lbmFibGUgQ1JTIG9uIFR4IGZvciBib3RoIGhhbGYgYW5kIGZ1bGwK KwkgKiBkdXBsZXguCisJICovCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyho dywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwKKwkJCQkJICAgJnBoeV9kYXRhKTsKKwlpZiAocmV0 X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlwaHlfZGF0YSB8PSBNODhFMTAwMF9QU0NSX0FTU0VSVF9D UlNfT05fVFg7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIE04OEUx MDAwX1BIWV9TUEVDX0NUUkwsCisJCQkJCSAgICBwaHlfZGF0YSk7CisKK291dDoKKwlyZXR1cm4g cmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3BoeV9mb3JjZV9zcGVlZF9kdXBsZXhfc2V0dXAg LSBDb25maWd1cmUgZm9yY2VkIFBIWSBzcGVlZC9kdXBsZXgKKyAqICBAaHc6IHBvaW50ZXIgdG8g dGhlIEhXIHN0cnVjdHVyZQorICogIEBwaHlfY3RybDogcG9pbnRlciB0byBjdXJyZW50IHZhbHVl IG9mIFBIWV9DT05UUk9MCisgKgorICogIEZvcmNlcyBzcGVlZCBhbmQgZHVwbGV4IG9uIHRoZSBQ SFkgYnkgZG9pbmcgdGhlIGZvbGxvd2luZzogZGlzYWJsZSBmbG93CisgKiAgY29udHJvbCwgZm9y Y2Ugc3BlZWQvZHVwbGV4IG9uIHRoZSBNQUMsIGRpc2FibGUgYXV0byBzcGVlZCBkZXRlY3Rpb24s CisgKiAgZGlzYWJsZSBhdXRvLW5lZ290aWF0aW9uLCBjb25maWd1cmUgZHVwbGV4LCBjb25maWd1 cmUgc3BlZWQsIGNvbmZpZ3VyZQorICogIHRoZSBjb2xsaXNpb24gZGlzdGFuY2UsIHdyaXRlIGNv bmZpZ3VyYXRpb24gdG8gQ1RSTCByZWdpc3Rlci4gIFRoZQorICogIGNhbGxlciBtdXN0IHdyaXRl IHRvIHRoZSBQSFlfQ09OVFJPTCByZWdpc3RlciBmb3IgdGhlc2Ugc2V0dGluZ3MgdG8KKyAqICB0 YWtlIGFmZmVjdC4KKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4 X3NldHVwKHN0cnVjdCBlMTAwMF9odyAqaHcsCisJCQkJCSAgICAgICB1MTYgKnBoeV9jdHJsKQor eworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJdTMyIGN0cmw7CisK KwkvKiBUdXJuIG9mZiBmbG93IGNvbnRyb2wgd2hlbiBmb3JjaW5nIHNwZWVkL2R1cGxleCAqLwor CWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsKKworCS8qIEZvcmNlIHNwZWVkL2R1cGxleCBv biB0aGUgbWFjICovCisJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CisJY3RybCB8PSAoRTEwMDBf Q1RSTF9GUkNTUEQgfCBFMTAwMF9DVFJMX0ZSQ0RQWCk7CisJY3RybCAmPSB+RTEwMDBfQ1RSTF9T UERfU0VMOworCisJLyogRGlzYWJsZSBBdXRvIFNwZWVkIERldGVjdGlvbiAqLworCWN0cmwgJj0g fkUxMDAwX0NUUkxfQVNERTsKKworCS8qIERpc2FibGUgYXV0b25lZyBvbiB0aGUgcGh5ICovCisJ KnBoeV9jdHJsICY9IH5NSUlfQ1JfQVVUT19ORUdfRU47CisKKwkvKiBGb3JjaW5nIEZ1bGwgb3Ig SGFsZiBEdXBsZXg/ICovCisJaWYgKG1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCAmIEUxMDAwX0FM TF9IQUxGX0RVUExFWCkgeworCQljdHJsICY9IH5FMTAwMF9DVFJMX0ZEOworCQkqcGh5X2N0cmwg Jj0gfk1JSV9DUl9GVUxMX0RVUExFWDsKKwkJaHdfZGJnKCJIYWxmIER1cGxleFxuIik7CisJfSBl bHNlIHsKKwkJY3RybCB8PSBFMTAwMF9DVFJMX0ZEOworCQkqcGh5X2N0cmwgfD0gTUlJX0NSX0ZV TExfRFVQTEVYOworCQlod19kYmcoIkZ1bGwgRHVwbGV4XG4iKTsKKwl9CisKKwkvKiBGb3JjaW5n IDEwbWIgb3IgMTAwbWI/ICovCisJaWYgKG1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCAmIEUxMDAw X0FMTF8xMDBfU1BFRUQpIHsKKwkJY3RybCB8PSBFMTAwMF9DVFJMX1NQRF8xMDA7CisJCSpwaHlf Y3RybCB8PSBNSUlfQ1JfU1BFRURfMTAwOworCQkqcGh5X2N0cmwgJj0gfihNSUlfQ1JfU1BFRURf MTAwMCB8IE1JSV9DUl9TUEVFRF8xMCk7CisJCWh3X2RiZygiRm9yY2luZyAxMDBtYlxuIik7CisJ fSBlbHNlIHsKKwkJY3RybCAmPSB+KEUxMDAwX0NUUkxfU1BEXzEwMDAgfCBFMTAwMF9DVFJMX1NQ RF8xMDApOworCQkqcGh5X2N0cmwgfD0gTUlJX0NSX1NQRUVEXzEwOworCQkqcGh5X2N0cmwgJj0g fihNSUlfQ1JfU1BFRURfMTAwMCB8IE1JSV9DUl9TUEVFRF8xMDApOworCQlod19kYmcoIkZvcmNp bmcgMTBtYlxuIik7CisJfQorCisJaWdiX2NvbmZpZ19jb2xsaXNpb25fZGlzdChodyk7CisKKwl3 cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworfQorCisvKioKKyAqICBpZ2Jfc2V0X2QzX2xwbHVfc3Rh dGUgLSBTZXRzIGxvdyBwb3dlciBsaW5rIHVwIHN0YXRlIGZvciBEMworICogIEBodzogcG9pbnRl ciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAgQGFjdGl2ZTogYm9vbGVhbiB1c2VkIHRvIGVuYWJs ZS9kaXNhYmxlIGxwbHUKKyAqCisgKiAgU3VjY2VzcyByZXR1cm5zIDAsIEZhaWx1cmUgcmV0dXJu cyAxCisgKgorICogIFRoZSBsb3cgcG93ZXIgbGluayB1cCAobHBsdSkgc3RhdGUgaXMgc2V0IHRv IHRoZSBwb3dlciBtYW5hZ2VtZW50IGxldmVsIEQzCisgKiAgYW5kIFNtYXJ0U3BlZWQgaXMgZGlz YWJsZWQgd2hlbiBhY3RpdmUgaXMgdHJ1ZSwgZWxzZSBjbGVhciBscGx1IGZvciBEMworICogIGFu ZCBlbmFibGUgU21hcnRzcGVlZC4gIExQTFUgYW5kIFNtYXJ0c3BlZWQgYXJlIG11dHVhbGx5IGV4 Y2x1c2l2ZS4gIExQTFUKKyAqICBpcyB1c2VkIGR1cmluZyBEeCBzdGF0ZXMgd2hlcmUgdGhlIHBv d2VyIGNvbnNlcnZhdGlvbiBpcyBtb3N0IGltcG9ydGFudC4KKyAqICBEdXJpbmcgZHJpdmVyIGFj dGl2aXR5LCBTbWFydFNwZWVkIHNob3VsZCBiZSBlbmFibGVkIHNvIHBlcmZvcm1hbmNlIGlzCisg KiAgbWFpbnRhaW5lZC4KKyAqKi8KK3MzMiBpZ2Jfc2V0X2QzX2xwbHVfc3RhdGUoc3RydWN0IGUx MDAwX2h3ICpodywgYm9vbCBhY3RpdmUpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkg PSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsKKwl1MTYgZGF0YTsKKworCXJldF92YWwgPSBody0+ cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIElHUDAyRTEwMDBfUEhZX1BPV0VSX01HTVQsCisJCQkJ CSAgICZkYXRhKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlpZiAoIWFjdGl2ZSkg eworCQlkYXRhICY9IH5JR1AwMkUxMDAwX1BNX0QzX0xQTFU7CisJCXJldF92YWwgPSBody0+cGh5 Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJCQkgICAgIElHUDAyRTEwMDBfUEhZX1BPV0VSX01H TVQsCisJCQkJCSAgICAgZGF0YSk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisJCS8q CisJCSAqIExQTFUgYW5kIFNtYXJ0U3BlZWQgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZS4gIExQTFUg aXMgdXNlZAorCQkgKiBkdXJpbmcgRHggc3RhdGVzIHdoZXJlIHRoZSBwb3dlciBjb25zZXJ2YXRp b24gaXMgbW9zdAorCQkgKiBpbXBvcnRhbnQuICBEdXJpbmcgZHJpdmVyIGFjdGl2aXR5IHdlIHNo b3VsZCBlbmFibGUKKwkJICogU21hcnRTcGVlZCwgc28gcGVyZm9ybWFuY2UgaXMgbWFpbnRhaW5l ZC4KKwkJICovCisJCWlmIChwaHktPnNtYXJ0X3NwZWVkID09IGUxMDAwX3NtYXJ0X3NwZWVkX29u KSB7CisJCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LAorCQkJCQkJICAg IElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkJICAgICZkYXRhKTsKKwkJCWlmIChy ZXRfdmFsKQorCQkJCWdvdG8gb3V0OworCisJCQlkYXRhIHw9IElHUDAxRTEwMDBfUFNDRlJfU01B UlRfU1BFRUQ7CisJCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywKKwkJ CQkJCSAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCQkJCQkgICAgIGRhdGEpOwor CQkJaWYgKHJldF92YWwpCisJCQkJZ290byBvdXQ7CisJCX0gZWxzZSBpZiAocGh5LT5zbWFydF9z cGVlZCA9PSBlMTAwMF9zbWFydF9zcGVlZF9vZmYpIHsKKwkJCXJldF92YWwgPSBody0+cGh5Lm9w cy5yZWFkX3BoeV9yZWcoaHcsCisJCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklH LAorCQkJCQkJICAgICAmZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3RvIG91dDsKKwor CQkJZGF0YSAmPSB+SUdQMDFFMTAwMF9QU0NGUl9TTUFSVF9TUEVFRDsKKwkJCXJldF92YWwgPSBo dy0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJCQkJICAgICBJR1AwMUUxMDAwX1BIWV9Q T1JUX0NPTkZJRywKKwkJCQkJCSAgICAgZGF0YSk7CisJCQlpZiAocmV0X3ZhbCkKKwkJCQlnb3Rv IG91dDsKKwkJfQorCX0gZWxzZSBpZiAoKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUxMDAw X0FMTF9TUEVFRF9EVVBMRVgpIHx8CisJCSAgIChwaHktPmF1dG9uZWdfYWR2ZXJ0aXNlZCA9PSBF MTAwMF9BTExfTk9UX0dJRykgfHwKKwkJICAgKHBoeS0+YXV0b25lZ19hZHZlcnRpc2VkID09IEUx MDAwX0FMTF8xMF9TUEVFRCkpIHsKKwkJZGF0YSB8PSBJR1AwMkUxMDAwX1BNX0QzX0xQTFU7CisJ CXJldF92YWwgPSBody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LAorCQkJCQkgICAgICBJR1Aw MkUxMDAwX1BIWV9QT1dFUl9NR01ULAorCQkJCQkgICAgICBkYXRhKTsKKwkJaWYgKHJldF92YWwp CisJCQlnb3RvIG91dDsKKworCQkvKiBXaGVuIExQTFUgaXMgZW5hYmxlZCwgd2Ugc2hvdWxkIGRp c2FibGUgU21hcnRTcGVlZCAqLworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVn KGh3LAorCQkJCQkgICAgIElHUDAxRTEwMDBfUEhZX1BPUlRfQ09ORklHLAorCQkJCQkgICAgICZk YXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQlkYXRhICY9IH5JR1AwMUUx MDAwX1BTQ0ZSX1NNQVJUX1NQRUVEOworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMud3JpdGVfcGh5 X3JlZyhodywKKwkJCQkJICAgICAgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcsCisJCQkJCSAg ICAgIGRhdGEpOworCX0KKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBp Z2JfY2hlY2tfZG93bnNoaWZ0IC0gQ2hlY2tzIHdoZXRoZXIgYSBkb3duc2hpZnQgaW4gc3BlZWQg b2NjdXJlZAorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFN1 Y2Nlc3MgcmV0dXJucyAwLCBGYWlsdXJlIHJldHVybnMgMQorICoKKyAqICBBIGRvd25zaGlmdCBp cyBkZXRlY3RlZCBieSBxdWVyeWluZyB0aGUgUEhZIGxpbmsgaGVhbHRoLgorICoqLworczMyIGln Yl9jaGVja19kb3duc2hpZnQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBf cGh5X2luZm8gKnBoeSA9ICZody0+cGh5OworCXMzMiByZXRfdmFsOworCXUxNiBwaHlfZGF0YSwg b2Zmc2V0LCBtYXNrOworCisJc3dpdGNoIChwaHktPnR5cGUpIHsKKwljYXNlIGUxMDAwX3BoeV9t ODg6CisJY2FzZSBlMTAwMF9waHlfZ2c4MjU2MzoKKwkJb2Zmc2V0CT0gTTg4RTEwMDBfUEhZX1NQ RUNfU1RBVFVTOworCQltYXNrCT0gTTg4RTEwMDBfUFNTUl9ET1dOU0hJRlQ7CisJCWJyZWFrOwor CWNhc2UgZTEwMDBfcGh5X2lncF8yOgorCWNhc2UgZTEwMDBfcGh5X2lncDoKKwljYXNlIGUxMDAw X3BoeV9pZ3BfMzoKKwkJb2Zmc2V0CT0gSUdQMDFFMTAwMF9QSFlfTElOS19IRUFMVEg7CisJCW1h c2sJPSBJR1AwMUUxMDAwX1BMSFJfU1NfRE9XTkdSQURFOworCQlicmVhazsKKwlkZWZhdWx0Ogor CQkvKiBzcGVlZCBkb3duc2hpZnQgbm90IHN1cHBvcnRlZCAqLworCQlwaHktPnNwZWVkX2Rvd25n cmFkZWQgPSBmYWxzZTsKKwkJcmV0X3ZhbCA9IDA7CisJCWdvdG8gb3V0OworCX0KKworCXJldF92 YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIG9mZnNldCwgJnBoeV9kYXRhKTsKKwor CWlmICghcmV0X3ZhbCkKKwkJcGh5LT5zcGVlZF9kb3duZ3JhZGVkID0gKHBoeV9kYXRhICYgbWFz aykgPyB0cnVlIDogZmFsc2U7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisg KiAgaWdiX2NoZWNrX3BvbGFyaXR5X204OCAtIENoZWNrcyB0aGUgcG9sYXJpdHkuCisgKiAgQGh3 OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgU3VjY2VzcyByZXR1cm5zIDAs IEZhaWx1cmUgcmV0dXJucyAtRTEwMDBfRVJSX1BIWSAoLTIpCisgKgorICogIFBvbGFyaXR5IGlz IGRldGVybWluZWQgYmFzZWQgb24gdGhlIFBIWSBzcGVjaWZpYyBzdGF0dXMgcmVnaXN0ZXIuCisg KiovCitzdGF0aWMgczMyIGlnYl9jaGVja19wb2xhcml0eV9tODgoc3RydWN0IGUxMDAwX2h3ICpo dykKK3sKKwlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8gKnBoeSA9ICZody0+cGh5OworCXMzMiByZXRf dmFsOworCXUxNiBkYXRhOworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyho dywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLCAmZGF0YSk7CisKKwlpZiAoIXJldF92YWwpCisJ CXBoeS0+Y2FibGVfcG9sYXJpdHkgPSAoZGF0YSAmIE04OEUxMDAwX1BTU1JfUkVWX1BPTEFSSVRZ KQorCQkJCSAgICAgID8gZTEwMDBfcmV2X3BvbGFyaXR5X3JldmVyc2VkCisJCQkJICAgICAgOiBl MTAwMF9yZXZfcG9sYXJpdHlfbm9ybWFsOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgor ICogIGlnYl9jaGVja19wb2xhcml0eV9pZ3AgLSBDaGVja3MgdGhlIHBvbGFyaXR5LgorICogIEBo dzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKgorICogIFN1Y2Nlc3MgcmV0dXJucyAw LCBGYWlsdXJlIHJldHVybnMgLUUxMDAwX0VSUl9QSFkgKC0yKQorICoKKyAqICBQb2xhcml0eSBp cyBkZXRlcm1pbmVkIGJhc2VkIG9uIHRoZSBQSFkgcG9ydCBzdGF0dXMgcmVnaXN0ZXIsIGFuZCB0 aGUKKyAqICBjdXJyZW50IHNwZWVkIChzaW5jZSB0aGVyZSBpcyBubyBwb2xhcml0eSBhdCAxMDBN YnBzKS4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2NoZWNrX3BvbGFyaXR5X2lncChzdHJ1Y3QgZTEw MDBfaHcgKmh3KQoreworCXN0cnVjdCBlMTAwMF9waHlfaW5mbyAqcGh5ID0gJmh3LT5waHk7CisJ czMyIHJldF92YWw7CisJdTE2IGRhdGEsIG9mZnNldCwgbWFzazsKKworCS8qCisJICogUG9sYXJp dHkgaXMgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGUgc3BlZWQgb2YKKwkgKiBvdXIgY29ubmVjdGlv bi4KKwkgKi8KKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUx MDAwX1BIWV9QT1JUX1NUQVRVUywKKwkJCQkJICAgJmRhdGEpOworCWlmIChyZXRfdmFsKQorCQln b3RvIG91dDsKKworCWlmICgoZGF0YSAmIElHUDAxRTEwMDBfUFNTUl9TUEVFRF9NQVNLKSA9PQor CSAgICBJR1AwMUUxMDAwX1BTU1JfU1BFRURfMTAwME1CUFMpIHsKKwkJb2Zmc2V0CT0gSUdQMDFF MTAwMF9QSFlfUENTX0lOSVRfUkVHOworCQltYXNrCT0gSUdQMDFFMTAwMF9QSFlfUE9MQVJJVFlf TUFTSzsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBUaGlzIHJlYWxseSBvbmx5IGFwcGxpZXMgdG8g MTBNYnBzIHNpbmNlCisJCSAqIHRoZXJlIGlzIG5vIHBvbGFyaXR5IGZvciAxMDBNYnBzIChhbHdh eXMgMCkuCisJCSAqLworCQlvZmZzZXQJPSBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUzsKKwkJ bWFzawk9IElHUDAxRTEwMDBfUFNTUl9QT0xBUklUWV9SRVZFUlNFRDsKKwl9CisKKwlyZXRfdmFs ID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBvZmZzZXQsICZkYXRhKTsKKworCWlmICgh cmV0X3ZhbCkKKwkJcGh5LT5jYWJsZV9wb2xhcml0eSA9IChkYXRhICYgbWFzaykKKwkJCQkgICAg ICA/IGUxMDAwX3Jldl9wb2xhcml0eV9yZXZlcnNlZAorCQkJCSAgICAgIDogZTEwMDBfcmV2X3Bv bGFyaXR5X25vcm1hbDsKKworb3V0OgorCXJldHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBp Z2Jfd2FpdF9hdXRvbmVnIC0gV2FpdCBmb3IgYXV0by1uZWcgY29tcGVsZXRpb24KKyAqICBAaHc6 IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBXYWl0cyBmb3IgYXV0by1uZWdv dGlhdGlvbiB0byBjb21wbGV0ZSBvciBmb3IgdGhlIGF1dG8tbmVnb3RpYXRpb24gdGltZQorICog IGxpbWl0IHRvIGV4cGlyZSwgd2hpY2ggZXZlciBoYXBwZW5zIGZpcnN0LgorICoqLworc3RhdGlj IHMzMiBpZ2Jfd2FpdF9hdXRvbmVnKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJczMyIHJldF92 YWwgPSAwOworCXUxNiBpLCBwaHlfc3RhdHVzOworCisJLyogQnJlYWsgYWZ0ZXIgYXV0b25lZyBj b21wbGV0ZXMgb3IgUEhZX0FVVE9fTkVHX0xJTUlUIGV4cGlyZXMuICovCisJZm9yIChpID0gUEhZ X0FVVE9fTkVHX0xJTUlUOyBpID4gMDsgaS0tKSB7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5y ZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMsICZwaHlfc3RhdHVzKTsKKwkJaWYgKHJldF92YWwp CisJCQlicmVhazsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZ X1NUQVRVUywgJnBoeV9zdGF0dXMpOworCQlpZiAocmV0X3ZhbCkKKwkJCWJyZWFrOworCQlpZiAo cGh5X3N0YXR1cyAmIE1JSV9TUl9BVVRPTkVHX0NPTVBMRVRFKQorCQkJYnJlYWs7CisJCW1zbGVl cCgxMDApOworCX0KKworCS8qCisJICogUEhZX0FVVE9fTkVHX1RJTUUgZXhwaXJhdGlvbiBkb2Vz bid0IGd1YXJhbnRlZSBhdXRvLW5lZ290aWF0aW9uCisJICogaGFzIGNvbXBsZXRlZC4KKwkgKi8K KwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyoqCisgKiAgaWdiX3BoeV9oYXNfbGluayAtIFBvbGxz IFBIWSBmb3IgbGluaworICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisgKiAg QGl0ZXJhdGlvbnM6IG51bWJlciBvZiB0aW1lcyB0byBwb2xsIGZvciBsaW5rCisgKiAgQHVzZWNf aW50ZXJ2YWw6IGRlbGF5IGJldHdlZW4gcG9sbGluZyBhdHRlbXB0cworICogIEBzdWNjZXNzOiBw b2ludGVyIHRvIHdoZXRoZXIgcG9sbGluZyB3YXMgc3VjY2Vzc2Z1bCBvciBub3QKKyAqCisgKiAg UG9sbHMgdGhlIFBIWSBzdGF0dXMgcmVnaXN0ZXIgZm9yIGxpbmssICdpdGVyYXRpb25zJyBudW1i ZXIgb2YgdGltZXMuCisgKiovCitzMzIgaWdiX3BoeV9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfaHcg Kmh3LCB1MzIgaXRlcmF0aW9ucywKKwkJCSAgICAgICB1MzIgdXNlY19pbnRlcnZhbCwgYm9vbCAq c3VjY2VzcykKK3sKKwlzMzIgcmV0X3ZhbCA9IDA7CisJdTE2IGksIHBoeV9zdGF0dXM7CisKKwlm b3IgKGkgPSAwOyBpIDwgaXRlcmF0aW9uczsgaSsrKSB7CisJCS8qCisJCSAqIFNvbWUgUEhZcyBy ZXF1aXJlIHRoZSBQSFlfU1RBVFVTIHJlZ2lzdGVyIHRvIGJlIHJlYWQKKwkJICogdHdpY2UgZHVl IHRvIHRoZSBsaW5rIGJpdCBiZWluZyBzdGlja3kuICBObyBoYXJtIGRvaW5nCisJCSAqIGl0IGFj cm9zcyB0aGUgYm9hcmQuCisJCSAqLworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlf cmVnKGh3LCBQSFlfU1RBVFVTLCAmcGh5X3N0YXR1cyk7CisJCWlmIChyZXRfdmFsKQorCQkJYnJl YWs7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9TVEFUVVMs ICZwaHlfc3RhdHVzKTsKKwkJaWYgKHJldF92YWwpCisJCQlicmVhazsKKwkJaWYgKHBoeV9zdGF0 dXMgJiBNSUlfU1JfTElOS19TVEFUVVMpCisJCQlicmVhazsKKwkJaWYgKHVzZWNfaW50ZXJ2YWwg Pj0gMTAwMCkKKwkJCW1kZWxheSh1c2VjX2ludGVydmFsLzEwMDApOworCQllbHNlCisJCQl1ZGVs YXkodXNlY19pbnRlcnZhbCk7CisJfQorCisJKnN1Y2Nlc3MgPSAoaSA8IGl0ZXJhdGlvbnMpID8g dHJ1ZSA6IGZhbHNlOworCisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9nZXRf Y2FibGVfbGVuZ3RoX204OCAtIERldGVybWluZSBjYWJsZSBsZW5ndGggZm9yIG04OCBQSFkKKyAq ICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZWFkcyB0aGUgUEhZ IHNwZWNpZmljIHN0YXR1cyByZWdpc3RlciB0byByZXRyaWV2ZSB0aGUgY2FibGUgbGVuZ3RoCisg KiAgaW5mb3JtYXRpb24uICBUaGUgY2FibGUgbGVuZ3RoIGlzIGRldGVybWluZWQgYnkgYXZlcmFn aW5nIHRoZSBtaW5pbXVtIGFuZAorICogIG1heGltdW0gdmFsdWVzIHRvIGdldCB0aGUgImF2ZXJh Z2UiIGNhYmxlIGxlbmd0aC4gIFRoZSBtODggUEhZIGhhcyBmb3VyCisgKiAgcG9zc2libGUgY2Fi bGUgbGVuZ3RoIHZhbHVlcywgd2hpY2ggYXJlOgorICoJUmVnaXN0ZXIgVmFsdWUJCUNhYmxlIExl bmd0aAorICoJMAkJCTwgNTAgbWV0ZXJzCisgKgkxCQkJNTAgLSA4MCBtZXRlcnMKKyAqCTIJCQk4 MCAtIDExMCBtZXRlcnMKKyAqCTMJCQkxMTAgLSAxNDAgbWV0ZXJzCisgKgk0CQkJPiAxNDAgbWV0 ZXJzCisgKiovCitzMzIgaWdiX2dldF9jYWJsZV9sZW5ndGhfbTg4KHN0cnVjdCBlMTAwMF9odyAq aHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0 X3ZhbDsKKwl1MTYgcGh5X2RhdGEsIGluZGV4OworCisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLnJl YWRfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfU1RBVFVTLAorCQkJCQkgICAmcGh5X2Rh dGEpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWluZGV4ID0gKHBoeV9kYXRhICYg TTg4RTEwMDBfUFNTUl9DQUJMRV9MRU5HVEgpID4+CisJCU04OEUxMDAwX1BTU1JfQ0FCTEVfTEVO R1RIX1NISUZUOworCXBoeS0+bWluX2NhYmxlX2xlbmd0aCA9IGUxMDAwX204OF9jYWJsZV9sZW5n dGhfdGFibGVbaW5kZXhdOworCXBoeS0+bWF4X2NhYmxlX2xlbmd0aCA9IGUxMDAwX204OF9jYWJs ZV9sZW5ndGhfdGFibGVbaW5kZXgrMV07CisKKwlwaHktPmNhYmxlX2xlbmd0aCA9IChwaHktPm1p bl9jYWJsZV9sZW5ndGggKyBwaHktPm1heF9jYWJsZV9sZW5ndGgpIC8gMjsKKworb3V0OgorCXJl dHVybiByZXRfdmFsOworfQorCisvKioKKyAqICBpZ2JfZ2V0X2NhYmxlX2xlbmd0aF9pZ3BfMiAt IERldGVybWluZSBjYWJsZSBsZW5ndGggZm9yIGlncDIgUEhZCisgKiAgQGh3OiBwb2ludGVyIHRv IHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgVGhlIGF1dG9tYXRpYyBnYWluIGNvbnRyb2wgKGFn Yykgbm9ybWFsaXplcyB0aGUgYW1wbGl0dWRlIG9mIHRoZQorICogIHJlY2VpdmVkIHNpZ25hbCwg YWRqdXN0aW5nIGZvciB0aGUgYXR0ZW51YXRpb24gcHJvZHVjZWQgYnkgdGhlCisgKiAgY2FibGUu ICBCeSByZWFkaW5nIHRoZSBBR0MgcmVnaXN0ZXJzLCB3aGljaCByZXBlcmVzZW50IHRoZQorICog IGNvYmluYXRpb24gb2YgY291cnNlIGFuZCBmaW5lIGdhaW4gdmFsdWUsIHRoZSB2YWx1ZSBjYW4g YmUgcHV0CisgKiAgaW50byBhIGxvb2t1cCB0YWJsZSB0byBvYnRhaW4gdGhlIGFwcHJveGltYXRl IGNhYmxlIGxlbmd0aAorICogIGZvciBlYWNoIGNoYW5uZWwuCisgKiovCitzMzIgaWdiX2dldF9j YWJsZV9sZW5ndGhfaWdwXzIoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzdHJ1Y3QgZTEwMDBf cGh5X2luZm8gKnBoeSA9ICZody0+cGh5OworCXMzMiByZXRfdmFsID0gMDsKKwl1MTYgcGh5X2Rh dGEsIGksIGFnY192YWx1ZSA9IDA7CisJdTE2IGN1cl9hZ2NfaW5kZXgsIG1heF9hZ2NfaW5kZXgg PSAwOworCXUxNiBtaW5fYWdjX2luZGV4ID0gSUdQMDJFMTAwMF9DQUJMRV9MRU5HVEhfVEFCTEVf U0laRSAtIDE7CisJdTE2IGFnY19yZWdfYXJyYXlbSUdQMDJFMTAwMF9QSFlfQ0hBTk5FTF9OVU1d ID0KKwkJCQkJCQkge0lHUDAyRTEwMDBfUEhZX0FHQ19BLAorCQkJCQkJCSAgSUdQMDJFMTAwMF9Q SFlfQUdDX0IsCisJCQkJCQkJICBJR1AwMkUxMDAwX1BIWV9BR0NfQywKKwkJCQkJCQkgIElHUDAy RTEwMDBfUEhZX0FHQ19EfTsKKworCS8qIFJlYWQgdGhlIEFHQyByZWdpc3RlcnMgZm9yIGFsbCBj aGFubmVscyAqLworCWZvciAoaSA9IDA7IGkgPCBJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05VTTsg aSsrKSB7CisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFkX3BoeV9yZWcoaHcsIGFnY19yZWdf YXJyYXlbaV0sCisJCQkJCQkgICAmcGh5X2RhdGEpOworCQlpZiAocmV0X3ZhbCkKKwkJCWdvdG8g b3V0OworCisJCS8qCisJCSAqIEdldHRpbmcgYml0cyAxNTo5LCB3aGljaCByZXByZXNlbnQgdGhl IGNvbWJpbmF0aW9uIG9mCisJCSAqIGNvdXJzZSBhbmQgZmluZSBnYWluIHZhbHVlcy4gIFRoZSBy ZXN1bHQgaXMgYSBudW1iZXIKKwkJICogdGhhdCBjYW4gYmUgcHV0IGludG8gdGhlIGxvb2t1cCB0 YWJsZSB0byBvYnRhaW4gdGhlCisJCSAqIGFwcHJveGltYXRlIGNhYmxlIGxlbmd0aC4KKwkJICov CisJCWN1cl9hZ2NfaW5kZXggPSAocGh5X2RhdGEgPj4gSUdQMDJFMTAwMF9BR0NfTEVOR1RIX1NI SUZUKSAmCisJCQkJSUdQMDJFMTAwMF9BR0NfTEVOR1RIX01BU0s7CisKKwkJLyogQXJyYXkgaW5k ZXggYm91bmQgY2hlY2suICovCisJCWlmICgoY3VyX2FnY19pbmRleCA+PSBJR1AwMkUxMDAwX0NB QkxFX0xFTkdUSF9UQUJMRV9TSVpFKSB8fAorCQkgICAgKGN1cl9hZ2NfaW5kZXggPT0gMCkpIHsK KwkJCXJldF92YWwgPSAtRTEwMDBfRVJSX1BIWTsKKwkJCWdvdG8gb3V0OworCQl9CisKKwkJLyog UmVtb3ZlIG1pbiAmIG1heCBBR0MgdmFsdWVzIGZyb20gY2FsY3VsYXRpb24uICovCisJCWlmIChl MTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFibGVbbWluX2FnY19pbmRleF0gPgorCQkgICAgZTEw MDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxlW2N1cl9hZ2NfaW5kZXhdKQorCQkJbWluX2FnY19p bmRleCA9IGN1cl9hZ2NfaW5kZXg7CisJCWlmIChlMTAwMF9pZ3BfMl9jYWJsZV9sZW5ndGhfdGFi bGVbbWF4X2FnY19pbmRleF0gPAorCQkgICAgZTEwMDBfaWdwXzJfY2FibGVfbGVuZ3RoX3RhYmxl W2N1cl9hZ2NfaW5kZXhdKQorCQkJbWF4X2FnY19pbmRleCA9IGN1cl9hZ2NfaW5kZXg7CisKKwkJ YWdjX3ZhbHVlICs9IGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVtjdXJfYWdjX2luZGV4 XTsKKwl9CisKKwlhZ2NfdmFsdWUgLT0gKGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVtt aW5fYWdjX2luZGV4XSArCisJCSAgICAgIGUxMDAwX2lncF8yX2NhYmxlX2xlbmd0aF90YWJsZVtt YXhfYWdjX2luZGV4XSk7CisJYWdjX3ZhbHVlIC89IChJR1AwMkUxMDAwX1BIWV9DSEFOTkVMX05V TSAtIDIpOworCisJLyogQ2FsY3VsYXRlIGNhYmxlIGxlbmd0aCB3aXRoIHRoZSBlcnJvciByYW5n ZSBvZiArLy0gMTAgbWV0ZXJzLiAqLworCXBoeS0+bWluX2NhYmxlX2xlbmd0aCA9ICgoYWdjX3Zh bHVlIC0gSUdQMDJFMTAwMF9BR0NfUkFOR0UpID4gMCkgPworCQkJCSAoYWdjX3ZhbHVlIC0gSUdQ MDJFMTAwMF9BR0NfUkFOR0UpIDogMDsKKwlwaHktPm1heF9jYWJsZV9sZW5ndGggPSBhZ2NfdmFs dWUgKyBJR1AwMkUxMDAwX0FHQ19SQU5HRTsKKworCXBoeS0+Y2FibGVfbGVuZ3RoID0gKHBoeS0+ bWluX2NhYmxlX2xlbmd0aCArIHBoeS0+bWF4X2NhYmxlX2xlbmd0aCkgLyAyOworCitvdXQ6CisJ cmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9nZXRfcGh5X2luZm9fbTg4IC0gUmV0 cmlldmUgUEhZIGluZm9ybWF0aW9uCisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1 cmUKKyAqCisgKiAgVmFsaWQgZm9yIG9ubHkgY29wcGVyIGxpbmtzLiAgUmVhZCB0aGUgUEhZIHN0 YXR1cyByZWdpc3RlciAoc3RpY2t5IHJlYWQpCisgKiAgdG8gdmVyaWZ5IHRoYXQgbGluayBpcyB1 cC4gIFJlYWQgdGhlIFBIWSBzcGVjaWFsIGNvbnRyb2wgcmVnaXN0ZXIgdG8KKyAqICBkZXRlcm1p bmUgdGhlIHBvbGFyaXR5IGFuZCAxMGJhc2UtVCBleHRlbmRlZCBkaXN0YW5jZS4gIFJlYWQgdGhl IFBIWQorICogIHNwZWNpYWwgc3RhdHVzIHJlZ2lzdGVyIHRvIGRldGVybWluZSBNREkvTURJeCBh bmQgY3VycmVudCBzcGVlZC4gIElmCisgKiAgc3BlZWQgaXMgMTAwMCwgdGhlbiBkZXRlcm1pbmUg Y2FibGUgbGVuZ3RoLCBsb2NhbCBhbmQgcmVtb3RlIHJlY2VpdmVyLgorICoqLworczMyIGlnYl9n ZXRfcGh5X2luZm9fbTg4KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJc3RydWN0IGUxMDAwX3Bo eV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgIHJldF92YWw7CisJdTE2IHBoeV9kYXRhOwor CWJvb2wgbGluazsKKworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgIT0gZTEwMDBfbWVkaWFfdHlw ZV9jb3BwZXIpIHsKKwkJaHdfZGJnKCJQaHkgaW5mbyBpcyBvbmx5IHZhbGlkIGZvciBjb3BwZXIg bWVkaWFcbiIpOworCQlyZXRfdmFsID0gLUUxMDAwX0VSUl9DT05GSUc7CisJCWdvdG8gb3V0Owor CX0KKworCXJldF92YWwgPSBpZ2JfcGh5X2hhc19saW5rKGh3LCAxLCAwLCAmbGluayk7CisJaWYg KHJldF92YWwpCisJCWdvdG8gb3V0OworCisJaWYgKCFsaW5rKSB7CisJCWh3X2RiZygiUGh5IGlu Zm8gaXMgb25seSB2YWxpZCBpZiBsaW5rIGlzIHVwXG4iKTsKKwkJcmV0X3ZhbCA9IC1FMTAwMF9F UlJfQ09ORklHOworCQlnb3RvIG91dDsKKwl9CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVh ZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19DVFJMLAorCQkJCQkgICAmcGh5X2RhdGEp OworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXBoeS0+cG9sYXJpdHlfY29ycmVjdGlv biA9IChwaHlfZGF0YSAmIE04OEUxMDAwX1BTQ1JfUE9MQVJJVFlfUkVWRVJTQUwpCisJCQkJICAg PyB0cnVlCisJCQkJICAgOiBmYWxzZTsKKworCXJldF92YWwgPSBpZ2JfY2hlY2tfcG9sYXJpdHlf bTg4KGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0gaHctPnBo eS5vcHMucmVhZF9waHlfcmVnKGh3LCBNODhFMTAwMF9QSFlfU1BFQ19TVEFUVVMsCisJCQkJCSAg ICZwaHlfZGF0YSk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0OworCisJcGh5LT5pc19tZGl4 ID0gKHBoeV9kYXRhICYgTTg4RTEwMDBfUFNTUl9NRElYKSA/IHRydWUgOiBmYWxzZTsKKworCWlm ICgocGh5X2RhdGEgJiBNODhFMTAwMF9QU1NSX1NQRUVEKSA9PSBNODhFMTAwMF9QU1NSXzEwMDBN QlMpIHsKKwkJcmV0X3ZhbCA9IGh3LT5waHkub3BzLmdldF9jYWJsZV9sZW5ndGgoaHcpOworCQlp ZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCisJCXJldF92YWwgPSBody0+cGh5Lm9wcy5yZWFk X3BoeV9yZWcoaHcsIFBIWV8xMDAwVF9TVEFUVVMsCisJCQkJCQkgICAmcGh5X2RhdGEpOworCQlp ZiAocmV0X3ZhbCkKKwkJCWdvdG8gb3V0OworCisJCXBoeS0+bG9jYWxfcnggPSAocGh5X2RhdGEg JiBTUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVMpCisJCQkJPyBlMTAwMF8xMDAwdF9yeF9zdGF0dXNf b2sKKwkJCQk6IGUxMDAwXzEwMDB0X3J4X3N0YXR1c19ub3Rfb2s7CisKKwkJcGh5LT5yZW1vdGVf cnggPSAocGh5X2RhdGEgJiBTUl8xMDAwVF9SRU1PVEVfUlhfU1RBVFVTKQorCQkJCSA/IGUxMDAw XzEwMDB0X3J4X3N0YXR1c19vaworCQkJCSA6IGUxMDAwXzEwMDB0X3J4X3N0YXR1c19ub3Rfb2s7 CisJfSBlbHNlIHsKKwkJLyogU2V0IHZhbHVlcyB0byAidW5kZWZpbmVkIiAqLworCQlwaHktPmNh YmxlX2xlbmd0aCA9IEUxMDAwX0NBQkxFX0xFTkdUSF9VTkRFRklORUQ7CisJCXBoeS0+bG9jYWxf cnggPSBlMTAwMF8xMDAwdF9yeF9zdGF0dXNfdW5kZWZpbmVkOworCQlwaHktPnJlbW90ZV9yeCA9 IGUxMDAwXzEwMDB0X3J4X3N0YXR1c191bmRlZmluZWQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJl dF92YWw7Cit9CisKKy8qKgorICogIGlnYl9nZXRfcGh5X2luZm9faWdwIC0gUmV0cmlldmUgaWdw IFBIWSBpbmZvcm1hdGlvbgorICogIEBodzogcG9pbnRlciB0byB0aGUgSFcgc3RydWN0dXJlCisg KgorICogIFJlYWQgUEhZIHN0YXR1cyB0byBkZXRlcm1pbmUgaWYgbGluayBpcyB1cC4gIElmIGxp bmsgaXMgdXAsIHRoZW4KKyAqICBzZXQvZGV0ZXJtaW5lIDEwYmFzZS1UIGV4dGVuZGVkIGRpc3Rh bmNlIGFuZCBwb2xhcml0eSBjb3JyZWN0aW9uLiAgUmVhZAorICogIFBIWSBwb3J0IHN0YXR1cyB0 byBkZXRlcm1pbmUgTURJL01ESXggYW5kIHNwZWVkLiAgQmFzZWQgb24gdGhlIHNwZWVkLAorICog IGRldGVybWluZSBvbiB0aGUgY2FibGUgbGVuZ3RoLCBsb2NhbCBhbmQgcmVtb3RlIHJlY2VpdmVy LgorICoqLworczMyIGlnYl9nZXRfcGh5X2luZm9faWdwKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7 CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgcmV0X3ZhbDsK Kwl1MTYgZGF0YTsKKwlib29sIGxpbms7CisKKwlyZXRfdmFsID0gaWdiX3BoeV9oYXNfbGluayho dywgMSwgMCwgJmxpbmspOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCWlmICghbGlu aykgeworCQlod19kYmcoIlBoeSBpbmZvIGlzIG9ubHkgdmFsaWQgaWYgbGluayBpcyB1cFxuIik7 CisJCXJldF92YWwgPSAtRTEwMDBfRVJSX0NPTkZJRzsKKwkJZ290byBvdXQ7CisJfQorCisJcGh5 LT5wb2xhcml0eV9jb3JyZWN0aW9uID0gdHJ1ZTsKKworCXJldF92YWwgPSBpZ2JfY2hlY2tfcG9s YXJpdHlfaWdwKGh3KTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlyZXRfdmFsID0g aHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBJR1AwMUUxMDAwX1BIWV9QT1JUX1NUQVRVUywK KwkJCQkJICAgJmRhdGEpOworCWlmIChyZXRfdmFsKQorCQlnb3RvIG91dDsKKworCXBoeS0+aXNf bWRpeCA9IChkYXRhICYgSUdQMDFFMTAwMF9QU1NSX01ESVgpID8gdHJ1ZSA6IGZhbHNlOworCisJ aWYgKChkYXRhICYgSUdQMDFFMTAwMF9QU1NSX1NQRUVEX01BU0spID09CisJICAgIElHUDAxRTEw MDBfUFNTUl9TUEVFRF8xMDAwTUJQUykgeworCQlyZXRfdmFsID0gaHctPnBoeS5vcHMuZ2V0X2Nh YmxlX2xlbmd0aChodyk7CisJCWlmIChyZXRfdmFsKQorCQkJZ290byBvdXQ7CisKKwkJcmV0X3Zh bCA9IGh3LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKKwkJCQkJ CSAgICZkYXRhKTsKKwkJaWYgKHJldF92YWwpCisJCQlnb3RvIG91dDsKKworCQlwaHktPmxvY2Fs X3J4ID0gKGRhdGEgJiBTUl8xMDAwVF9MT0NBTF9SWF9TVEFUVVMpCisJCQkJPyBlMTAwMF8xMDAw dF9yeF9zdGF0dXNfb2sKKwkJCQk6IGUxMDAwXzEwMDB0X3J4X3N0YXR1c19ub3Rfb2s7CisKKwkJ cGh5LT5yZW1vdGVfcnggPSAoZGF0YSAmIFNSXzEwMDBUX1JFTU9URV9SWF9TVEFUVVMpCisJCQkJ ID8gZTEwMDBfMTAwMHRfcnhfc3RhdHVzX29rCisJCQkJIDogZTEwMDBfMTAwMHRfcnhfc3RhdHVz X25vdF9vazsKKwl9IGVsc2UgeworCQlwaHktPmNhYmxlX2xlbmd0aCA9IEUxMDAwX0NBQkxFX0xF TkdUSF9VTkRFRklORUQ7CisJCXBoeS0+bG9jYWxfcnggPSBlMTAwMF8xMDAwdF9yeF9zdGF0dXNf dW5kZWZpbmVkOworCQlwaHktPnJlbW90ZV9yeCA9IGUxMDAwXzEwMDB0X3J4X3N0YXR1c191bmRl ZmluZWQ7CisJfQorCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgorICogIGlnYl9w aHlfc3dfcmVzZXQgLSBQSFkgc29mdHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhl IEhXIHN0cnVjdHVyZQorICoKKyAqICBEb2VzIGEgc29mdHdhcmUgcmVzZXQgb2YgdGhlIFBIWSBi eSByZWFkaW5nIHRoZSBQSFkgY29udHJvbCByZWdpc3RlciBhbmQKKyAqICBzZXR0aW5nL3dyaXRl IHRoZSBjb250cm9sIHJlZ2lzdGVyIHJlc2V0IGJpdCB0byB0aGUgUEhZLgorICoqLworczMyIGln Yl9waHlfc3dfcmVzZXQoc3RydWN0IGUxMDAwX2h3ICpodykKK3sKKwlzMzIgcmV0X3ZhbDsKKwl1 MTYgcGh5X2N0cmw7CisKKwlyZXRfdmFsID0gaHctPnBoeS5vcHMucmVhZF9waHlfcmVnKGh3LCBQ SFlfQ09OVFJPTCwgJnBoeV9jdHJsKTsKKwlpZiAocmV0X3ZhbCkKKwkJZ290byBvdXQ7CisKKwlw aHlfY3RybCB8PSBNSUlfQ1JfUkVTRVQ7CisJcmV0X3ZhbCA9IGh3LT5waHkub3BzLndyaXRlX3Bo eV9yZWcoaHcsIFBIWV9DT05UUk9MLCBwaHlfY3RybCk7CisJaWYgKHJldF92YWwpCisJCWdvdG8g b3V0OworCisJdWRlbGF5KDEpOworCitvdXQ6CisJcmV0dXJuIHJldF92YWw7Cit9CisKKy8qKgor ICogIGlnYl9waHlfaHdfcmVzZXQgLSBQSFkgaGFyZHdhcmUgcmVzZXQKKyAqICBAaHc6IHBvaW50 ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBWZXJpZnkgdGhlIHJlc2V0IGJsb2NrIGlz IG5vdCBibG9ja2luZyB1cyBmcm9tIHJlc2V0dGluZy4gIEFjcXVpcmUKKyAqICBzZW1hcGhvcmUg KGlmIG5lY2Vzc2FyeSkgYW5kIHJlYWQvc2V0L3dyaXRlIHRoZSBkZXZpY2UgY29udHJvbCByZXNl dAorICogIGJpdCBpbiB0aGUgUEhZLiAgV2FpdCB0aGUgYXBwcm9wcmlhdGUgZGVsYXkgdGltZSBm b3IgdGhlIGRldmljZSB0bworICogIHJlc2V0IGFuZCByZWxhc2UgdGhlIHNlbWFwaG9yZSAoaWYg bmVjZXNzYXJ5KS4KKyAqKi8KK3MzMiBpZ2JfcGh5X2h3X3Jlc2V0KHN0cnVjdCBlMTAwMF9odyAq aHcpCit7CisJc3RydWN0IGUxMDAwX3BoeV9pbmZvICpwaHkgPSAmaHctPnBoeTsKKwlzMzIgIHJl dF92YWw7CisJdTMyIGN0cmw7CisKKwlyZXRfdmFsID0gaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKGh3 KTsKKwlpZiAocmV0X3ZhbCkgeworCQlyZXRfdmFsID0gMDsKKwkJZ290byBvdXQ7CisJfQorCisJ cmV0X3ZhbCA9IGlnYl9hY3F1aXJlX3BoeShodyk7CisJaWYgKHJldF92YWwpCisJCWdvdG8gb3V0 OworCisJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CisJd3IzMihFMTAwMF9DVFJMLCBjdHJsIHwg RTEwMDBfQ1RSTF9QSFlfUlNUKTsKKwl3cmZsKCk7CisKKwl1ZGVsYXkocGh5LT5yZXNldF9kZWxh eV91cyk7CisKKwl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworCXdyZmwoKTsKKworCXVkZWxheSgx NTApOworCisJaWdiX3JlbGVhc2VfcGh5KGh3KTsKKworCXJldF92YWwgPSBpZ2JfZ2V0X3BoeV9j ZmdfZG9uZShodyk7CisKK291dDoKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworLyogSW50ZXJuYWwg ZnVuY3Rpb24gcG9pbnRlcnMgKi8KKworLyoqCisgKiAgaWdiX2dldF9waHlfY2ZnX2RvbmUgLSBH ZW5lcmljIFBIWSBjb25maWd1cmF0aW9uIGRvbmUKKyAqICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhX IHN0cnVjdHVyZQorICoKKyAqICBSZXR1cm4gc3VjY2VzcyBpZiBzaWxpY29uIGZhbWlseSBkaWQg bm90IGltcGxlbWVudCBhIGZhbWlseSBzcGVjaWZpYworICogIGdldF9jZmdfZG9uZSBmdW5jdGlv bi4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2dldF9waHlfY2ZnX2RvbmUoc3RydWN0IGUxMDAwX2h3 ICpodykKK3sKKwlpZiAoaHctPnBoeS5vcHMuZ2V0X2NmZ19kb25lKQorCQlyZXR1cm4gaHctPnBo eS5vcHMuZ2V0X2NmZ19kb25lKGh3KTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqICBpZ2Jf cmVsZWFzZV9waHkgLSBHZW5lcmljIHJlbGVhc2UgUEhZCisgKiAgQGh3OiBwb2ludGVyIHRvIHRo ZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgUmV0dXJuIGlmIHNpbGljb24gZmFtaWx5IGRvZXMgbm90 IHJlcXVpcmUgYSBzZW1hcGhvcmUgd2hlbiBhY2Nlc3NpbmcgdGhlCisgKiAgUEhZLgorICoqLwor c3RhdGljIHZvaWQgaWdiX3JlbGVhc2VfcGh5KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJaWYg KGh3LT5waHkub3BzLnJlbGVhc2VfcGh5KQorCQlody0+cGh5Lm9wcy5yZWxlYXNlX3BoeShodyk7 Cit9CisKKy8qKgorICogIGlnYl9hY3F1aXJlX3BoeSAtIEdlbmVyaWMgYWNxdWlyZSBQSFkKKyAq ICBAaHc6IHBvaW50ZXIgdG8gdGhlIEhXIHN0cnVjdHVyZQorICoKKyAqICBSZXR1cm4gc3VjY2Vz cyBpZiBzaWxpY29uIGZhbWlseSBkb2VzIG5vdCByZXF1aXJlIGEgc2VtYXBob3JlIHdoZW4KKyAq ICBhY2Nlc3NpbmcgdGhlIFBIWS4KKyAqKi8KK3N0YXRpYyBzMzIgaWdiX2FjcXVpcmVfcGh5KHN0 cnVjdCBlMTAwMF9odyAqaHcpCit7CisJaWYgKGh3LT5waHkub3BzLmFjcXVpcmVfcGh5KQorCQly ZXR1cm4gaHctPnBoeS5vcHMuYWNxdWlyZV9waHkoaHcpOworCisJcmV0dXJuIDA7Cit9CisKKy8q KgorICogIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4IC0gR2VuZXJpYyBmb3JjZSBQSFkgc3Bl ZWQvZHVwbGV4CisgKiAgQGh3OiBwb2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAg V2hlbiB0aGUgc2lsaWNvbiBmYW1pbHkgaGFzIG5vdCBpbXBsZW1lbnRlZCBhIGZvcmNlZCBzcGVl ZC9kdXBsZXgKKyAqICBmdW5jdGlvbiBmb3IgdGhlIFBIWSwgc2ltcGx5IHJldHVybiAwLgorICoq LworczMyIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVjdCBlMTAwMF9odyAqaHcpCit7 CisJaWYgKGh3LT5waHkub3BzLmZvcmNlX3NwZWVkX2R1cGxleCkKKwkJcmV0dXJuIGh3LT5waHku b3BzLmZvcmNlX3NwZWVkX2R1cGxleChodyk7CisKKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiAg aWdiX3BoeV9pbml0X3NjcmlwdF9pZ3AzIC0gSW5pdHMgdGhlIElHUDMgUEhZCisgKiAgQGh3OiBw b2ludGVyIHRvIHRoZSBIVyBzdHJ1Y3R1cmUKKyAqCisgKiAgSW5pdGlhbGl6ZXMgYSBJbnRlbCBH aWdhYml0IFBIWTMgd2hlbiBhbiBFRVBST00gaXMgbm90IHByZXNlbnQuCisgKiovCitzMzIgaWdi X3BoeV9pbml0X3NjcmlwdF9pZ3AzKHN0cnVjdCBlMTAwMF9odyAqaHcpCit7CisJaHdfZGJnKCJS dW5uaW5nIElHUCAzIFBIWSBpbml0IHNjcmlwdFxuIik7CisKKwkvKiBQSFkgaW5pdCBJR1AgMyAq LworCS8qIEVuYWJsZSByaXNlL2ZhbGwsIDEwLW1vZGUgd29yayBpbiBjbGFzcy1BICovCisJaHct PnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyRjVCLCAweDkwMTgpOworCS8qIFJlbW92ZSBh bGwgY2FwcyBmcm9tIFJlcGxpY2EgcGF0aCBmaWx0ZXIgKi8KKwlody0+cGh5Lm9wcy53cml0ZV9w aHlfcmVnKGh3LCAweDJGNTIsIDB4MDAwMCk7CisJLyogQmlhcyB0cmltbWluZyBmb3IgQURDLCBB RkUgYW5kIERyaXZlciAoRGVmYXVsdCkgKi8KKwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3 LCAweDJGQjEsIDB4OEIyNCk7CisJLyogSW5jcmVhc2UgSHlicmlkIHBvbHkgYmlhcyAqLworCWh3 LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MkZCMiwgMHhGOEYwKTsKKwkvKiBBZGQgNCUg dG8gVFggYW1wbGl0dWRlIGluIEdpZ2EgbW9kZSAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9y ZWcoaHcsIDB4MjAxMCwgMHgxMEIwKTsKKwkvKiBEaXNhYmxlIHRyaW1taW5nIChUVFQpICovCisJ aHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgyMDExLCAweDAwMDApOworCS8qIFBvbHkg REMgY29ycmVjdGlvbiB0byA5NC42JSArIDIlIGZvciBhbGwgY2hhbm5lbHMgKi8KKwlody0+cGh5 Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREQsIDB4MjQ5QSk7CisJLyogQUJTIERDIGNvcnJl Y3Rpb24gdG8gOTUuOSUgKi8KKwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDIwREUs IDB4MDBEMyk7CisJLyogQkcgdGVtcCBjdXJ2ZSB0cmltICovCisJaHctPnBoeS5vcHMud3JpdGVf cGh5X3JlZyhodywgMHgyOEI0LCAweDA0Q0UpOworCS8qIEluY3JlYXNpbmcgQURDIE9QQU1QIHN0 YWdlIDEgY3VycmVudHMgdG8gbWF4ICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywg MHgyRjcwLCAweDI5RTQpOworCS8qIEZvcmNlIDEwMDAgKCByZXF1aXJlZCBmb3IgZW5hYmxpbmcg UEhZIHJlZ3MgY29uZmlndXJhdGlvbikgKi8KKwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3 LCAweDAwMDAsIDB4MDE0MCk7CisJLyogU2V0IHVwZF9mcmVxIHRvIDYgKi8KKwlody0+cGh5Lm9w cy53cml0ZV9waHlfcmVnKGh3LCAweDFGMzAsIDB4MTYwNik7CisJLyogRGlzYWJsZSBOUERGRSAq LworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUYzMSwgMHhCODE0KTsKKwkvKiBE aXNhYmxlIGFkYXB0aXZlIGZpeGVkIEZGRSAoRGVmYXVsdCkgKi8KKwlody0+cGh5Lm9wcy53cml0 ZV9waHlfcmVnKGh3LCAweDFGMzUsIDB4MDAyQSk7CisJLyogRW5hYmxlIEZGRSBoeXN0ZXJlc2lz ICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjNFLCAweDAwNjcpOworCS8q IEZpeGVkIEZGRSBmb3Igc2hvcnQgY2FibGUgbGVuZ3RocyAqLworCWh3LT5waHkub3BzLndyaXRl X3BoeV9yZWcoaHcsIDB4MUY1NCwgMHgwMDY1KTsKKwkvKiBGaXhlZCBGRkUgZm9yIG1lZGl1bSBj YWJsZSBsZW5ndGhzICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU1LCAw eDAwMkEpOworCS8qIEZpeGVkIEZGRSBmb3IgbG9uZyBjYWJsZSBsZW5ndGhzICovCisJaHctPnBo eS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgxRjU2LCAweDAwMkEpOworCS8qIEVuYWJsZSBBZGFw dGl2ZSBDbGlwIFRocmVzaG9sZCAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4 MUY3MiwgMHgzRkIwKTsKKwkvKiBBSFQgcmVzZXQgbGltaXQgdG8gMSAqLworCWh3LT5waHkub3Bz LndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3NiwgMHhDMEZGKTsKKwkvKiBTZXQgQUhUIG1hc3RlciBk ZWxheSB0byAxMjcgbXNlYyAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3 NywgMHgxREVDKTsKKwkvKiBTZXQgc2NhbiBiaXRzIGZvciBBSFQgKi8KKwlody0+cGh5Lm9wcy53 cml0ZV9waHlfcmVnKGh3LCAweDFGNzgsIDB4RjlFRik7CisJLyogU2V0IEFIVCBQcmVzZXQgYml0 cyAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MUY3OSwgMHgwMjEwKTsKKwkv KiBDaGFuZ2UgaW50ZWdfZmFjdG9yIG9mIGNoYW5uZWwgQSB0byAzICovCisJaHctPnBoeS5vcHMu d3JpdGVfcGh5X3JlZyhodywgMHgxODk1LCAweDAwMDMpOworCS8qIENoYW5nZSBwcm9wX2ZhY3Rv ciBvZiBjaGFubmVscyBCQ0QgdG8gOCAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcs IDB4MTc5NiwgMHgwMDA4KTsKKwkvKiBDaGFuZ2UgY2dfaWNvdW50ICsgZW5hYmxlIGludGVnYnAg Zm9yIGNoYW5uZWxzIEJDRCAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIDB4MTc5 OCwgMHhEMDA4KTsKKwkvKgorCSAqIENoYW5nZSBjZ19pY291bnQgKyBlbmFibGUgaW50ZWdicCAr IGNoYW5nZSBwcm9wX2ZhY3Rvcl9tYXN0ZXIKKwkgKiB0byA4IGZvciBjaGFubmVsIEEKKwkgKi8K Kwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAweDE4OTgsIDB4RDkxOCk7CisJLyogRGlz YWJsZSBBSFQgaW4gU2xhdmUgbW9kZSBvbiBjaGFubmVsIEEgKi8KKwlody0+cGh5Lm9wcy53cml0 ZV9waHlfcmVnKGh3LCAweDE4N0EsIDB4MDgwMCk7CisJLyoKKwkgKiBFbmFibGUgTFBMVSBhbmQg ZGlzYWJsZSBBTiB0byAxMDAwIGluIG5vbi1EMGEgc3RhdGVzLAorCSAqIEVuYWJsZSBTUEQrQjJC CisJICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDE5LCAweDAwOEQpOwor CS8qIEVuYWJsZSByZXN0YXJ0IEFOIG9uIGFuMTAwMF9kaXMgY2hhbmdlICovCisJaHctPnBoeS5v cHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDFCLCAweDIwODApOworCS8qIEVuYWJsZSB3aF9maWZv IHJlYWQgY2xvY2sgaW4gMTAvMTAwIG1vZGVzICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3Jl ZyhodywgMHgwMDE0LCAweDAwNDUpOworCS8qIFJlc3RhcnQgQU4sIFNwZWVkIHNlbGVjdGlvbiBp cyAxMDAwICovCisJaHctPnBoeS5vcHMud3JpdGVfcGh5X3JlZyhodywgMHgwMDAwLCAweDEzNDAp OworCisJcmV0dXJuIDA7Cit9CisKZGlmZiAtciBhZjc0M2QxNGFhOGMgZHJpdmVycy9uZXQvaWdi L2UxMDAwX3BoeS5oCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAw CisrKyBiL2RyaXZlcnMvbmV0L2lnYi9lMTAwMF9waHkuaAlUaHUgRmViIDEyIDAzOjAyOjA2IDIw MDkgLTA1MDAKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyAg SW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAgQ29weXJpZ2h0KGMpIDIw MDcgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRl cm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKKyAg dmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgaXQgd2lsbCBiZSB1 c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs aWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yCisg IG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisgIHRoaXMgcHJvZ3JhbTsg aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICA1 MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgor CisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRo aXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCisKKyAgQ29u dGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBMaXN0IDxlMTAwMC1kZXZl bEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0aW9uLCA1MjAwIE4uRS4g RWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0OTcKKworKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKi8KKworI2lmbmRlZiBfRTEwMDBfUEhZX0hfCisjZGVmaW5lIF9FMTAwMF9Q SFlfSF8KKworI2luY2x1ZGUgImlnYl9jb21wYXQuaCIKKworZW51bSBlMTAwMF9tc190eXBlIHsK KwllMTAwMF9tc19od19kZWZhdWx0ID0gMCwKKwllMTAwMF9tc19mb3JjZV9tYXN0ZXIsCisJZTEw MDBfbXNfZm9yY2Vfc2xhdmUsCisJZTEwMDBfbXNfYXV0bworfTsKKworZW51bSBlMTAwMF9zbWFy dF9zcGVlZCB7CisJZTEwMDBfc21hcnRfc3BlZWRfZGVmYXVsdCA9IDAsCisJZTEwMDBfc21hcnRf c3BlZWRfb24sCisJZTEwMDBfc21hcnRfc3BlZWRfb2ZmCit9OworCitzMzIgIGlnYl9jaGVja19k b3duc2hpZnQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl9jaGVja19yZXNldF9ibG9j ayhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX2NvcHBlcl9saW5rX2F1dG9uZWcoc3Ry dWN0IGUxMDAwX2h3ICpodyk7CitzMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4KHN0cnVj dCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfaWdwKHN0cnVjdCBl MTAwMF9odyAqaHcpOworczMyICBpZ2JfY29wcGVyX2xpbmtfc2V0dXBfbTg4KHN0cnVjdCBlMTAw MF9odyAqaHcpOworczMyICBpZ2JfcGh5X2ZvcmNlX3NwZWVkX2R1cGxleF9pZ3Aoc3RydWN0IGUx MDAwX2h3ICpodyk7CitzMzIgIGlnYl9waHlfZm9yY2Vfc3BlZWRfZHVwbGV4X204OChzdHJ1Y3Qg ZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX2dldF9jYWJsZV9sZW5ndGhfbTg4KHN0cnVjdCBlMTAw MF9odyAqaHcpOworczMyICBpZ2JfZ2V0X2NhYmxlX2xlbmd0aF9pZ3BfMihzdHJ1Y3QgZTEwMDBf aHcgKmh3KTsKK3MzMiAgaWdiX2dldF9waHlfaWQoc3RydWN0IGUxMDAwX2h3ICpodyk7CitzMzIg IGlnYl9nZXRfcGh5X2luZm9faWdwKHN0cnVjdCBlMTAwMF9odyAqaHcpOworczMyICBpZ2JfZ2V0 X3BoeV9pbmZvX204OChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX3BoeV9zd19yZXNl dChzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKK3MzMiAgaWdiX3BoeV9od19yZXNldChzdHJ1Y3QgZTEw MDBfaHcgKmh3KTsKK3MzMiAgaWdiX3JlYWRfcGh5X3JlZ19pZ3Aoc3RydWN0IGUxMDAwX2h3ICpo dywgdTMyIG9mZnNldCwgdTE2ICpkYXRhKTsKK3MzMiAgaWdiX3NldF9kM19scGx1X3N0YXRlKHN0 cnVjdCBlMTAwMF9odyAqaHcsIGJvb2wgYWN0aXZlKTsKK3MzMiAgaWdiX3dyaXRlX3BoeV9yZWdf aWdwKHN0cnVjdCBlMTAwMF9odyAqaHcsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKTsKK3MzMiAgaWdi X3BoeV9oYXNfbGluayhzdHJ1Y3QgZTEwMDBfaHcgKmh3LCB1MzIgaXRlcmF0aW9ucywKKwkJCQl1 MzIgdXNlY19pbnRlcnZhbCwgYm9vbCAqc3VjY2Vzcyk7CitzMzIgIGlnYl9waHlfaW5pdF9zY3Jp cHRfaWdwMyhzdHJ1Y3QgZTEwMDBfaHcgKmh3KTsKKworLyogSUdQMDFFMTAwMCBTcGVjaWZpYyBS ZWdpc3RlcnMgKi8KKyNkZWZpbmUgSUdQMDFFMTAwMF9QSFlfUE9SVF9DT05GSUcgICAgICAgIDB4 MTAgLyogUG9ydCBDb25maWcgKi8KKyNkZWZpbmUgSUdQMDFFMTAwMF9QSFlfUE9SVF9TVEFUVVMg ICAgICAgIDB4MTEgLyogU3RhdHVzICovCisjZGVmaW5lIElHUDAxRTEwMDBfUEhZX1BPUlRfQ1RS TCAgICAgICAgICAweDEyIC8qIENvbnRyb2wgKi8KKyNkZWZpbmUgSUdQMDFFMTAwMF9QSFlfTElO S19IRUFMVEggICAgICAgIDB4MTMgLyogUEhZIExpbmsgSGVhbHRoICovCisjZGVmaW5lIElHUDAy RTEwMDBfUEhZX1BPV0VSX01HTVQgICAgICAgICAweDE5IC8qIFBvd2VyIE1hbmFnZW1lbnQgKi8K KyNkZWZpbmUgSUdQMDFFMTAwMF9QSFlfUEFHRV9TRUxFQ1QgICAgICAgIDB4MUYgLyogUGFnZSBT ZWxlY3QgKi8KKyNkZWZpbmUgSUdQMDFFMTAwMF9QSFlfUENTX0lOSVRfUkVHICAgICAgIDB4MDBC NAorI2RlZmluZSBJR1AwMUUxMDAwX1BIWV9QT0xBUklUWV9NQVNLICAgICAgMHgwMDc4CisjZGVm aW5lIElHUDAxRTEwMDBfUFNDUl9BVVRPX01ESVggICAgICAgICAweDEwMDAKKyNkZWZpbmUgSUdQ MDFFMTAwMF9QU0NSX0ZPUkNFX01ESV9NRElYICAgIDB4MjAwMCAvKiAwPU1ESSwgMT1NRElYICov CisjZGVmaW5lIElHUDAxRTEwMDBfUFNDRlJfU01BUlRfU1BFRUQgICAgICAweDAwODAKKworLyog RW5hYmxlIGZsZXhpYmxlIHNwZWVkIG9uIGxpbmstdXAgKi8KKyNkZWZpbmUgSUdQMDJFMTAwMF9Q TV9EMF9MUExVICAgICAgICAgICAgIDB4MDAwMiAvKiBGb3IgRDBhIHN0YXRlcyAqLworI2RlZmlu ZSBJR1AwMkUxMDAwX1BNX0QzX0xQTFUgICAgICAgICAgICAgMHgwMDA0IC8qIEZvciBhbGwgb3Ro ZXIgc3RhdGVzICovCisjZGVmaW5lIElHUDAxRTEwMDBfUExIUl9TU19ET1dOR1JBREUgICAgICAw eDgwMDAKKyNkZWZpbmUgSUdQMDFFMTAwMF9QU1NSX1BPTEFSSVRZX1JFVkVSU0VEIDB4MDAwMgor I2RlZmluZSBJR1AwMUUxMDAwX1BTU1JfTURJWCAgICAgICAgICAgICAgMHgwMDA4CisjZGVmaW5l IElHUDAxRTEwMDBfUFNTUl9TUEVFRF9NQVNLICAgICAgICAweEMwMDAKKyNkZWZpbmUgSUdQMDFF MTAwMF9QU1NSX1NQRUVEXzEwMDBNQlBTICAgIDB4QzAwMAorI2RlZmluZSBJR1AwMkUxMDAwX1BI WV9DSEFOTkVMX05VTSAgICAgICAgNAorI2RlZmluZSBJR1AwMkUxMDAwX1BIWV9BR0NfQSAgICAg ICAgICAgICAgMHgxMUIxCisjZGVmaW5lIElHUDAyRTEwMDBfUEhZX0FHQ19CICAgICAgICAgICAg ICAweDEyQjEKKyNkZWZpbmUgSUdQMDJFMTAwMF9QSFlfQUdDX0MgICAgICAgICAgICAgIDB4MTRC MQorI2RlZmluZSBJR1AwMkUxMDAwX1BIWV9BR0NfRCAgICAgICAgICAgICAgMHgxOEIxCisjZGVm aW5lIElHUDAyRTEwMDBfQUdDX0xFTkdUSF9TSElGVCAgICAgICA5ICAgLyogQ291cnNlIC0gMTU6 MTMsIEZpbmUgLSAxMjo5ICovCisjZGVmaW5lIElHUDAyRTEwMDBfQUdDX0xFTkdUSF9NQVNLICAg ICAgICAweDdGCisjZGVmaW5lIElHUDAyRTEwMDBfQUdDX1JBTkdFICAgICAgICAgICAgICAxNQor CisjZGVmaW5lIEUxMDAwX0NBQkxFX0xFTkdUSF9VTkRFRklORUQgICAgICAweEZGCisKKyNlbmRp ZgpkaWZmIC1yIGFmNzQzZDE0YWE4YyBkcml2ZXJzL25ldC9pZ2IvZTEwMDBfcmVncy5oCi0tLSAv ZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDowMCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMvbmV0 L2lnYi9lMTAwMF9yZWdzLmgJVGh1IEZlYiAxMiAwMzowMjoxNCAyMDA5IC0wNTAwCkBAIC0wLDAg KzEsMjcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQg RXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0 aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp YnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9u cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVi bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9V VAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBN RVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisK KyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBG aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBp bgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246 CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9y Z2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dh eSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisK KyNpZm5kZWYgX0UxMDAwX1JFR1NfSF8KKyNkZWZpbmUgX0UxMDAwX1JFR1NfSF8KKworI2RlZmlu ZSBFMTAwMF9DVFJMICAgICAweDAwMDAwICAvKiBEZXZpY2UgQ29udHJvbCAtIFJXICovCisjZGVm aW5lIEUxMDAwX1NUQVRVUyAgIDB4MDAwMDggIC8qIERldmljZSBTdGF0dXMgLSBSTyAqLworI2Rl ZmluZSBFMTAwMF9FRUNEICAgICAweDAwMDEwICAvKiBFRVBST00vRmxhc2ggQ29udHJvbCAtIFJX ICovCisjZGVmaW5lIEUxMDAwX0VFUkQgICAgIDB4MDAwMTQgIC8qIEVFUFJPTSBSZWFkIC0gUlcg Ki8KKyNkZWZpbmUgRTEwMDBfQ1RSTF9FWFQgMHgwMDAxOCAgLyogRXh0ZW5kZWQgRGV2aWNlIENv bnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9NRElDICAgICAweDAwMDIwICAvKiBNREkgQ29u dHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1NDVEwgICAgIDB4MDAwMjQgIC8qIFNlckRlcyBD b250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNBTCAgICAgMHgwMDAyOCAgLyogRmxvdyBD b250cm9sIEFkZHJlc3MgTG93IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNBSCAgICAgMHgwMDAy QyAgLyogRmxvdyBDb250cm9sIEFkZHJlc3MgSGlnaCAtUlcgKi8KKyNkZWZpbmUgRTEwMDBfRkNU ICAgICAgMHgwMDAzMCAgLyogRmxvdyBDb250cm9sIFR5cGUgLSBSVyAqLworI2RlZmluZSBFMTAw MF9DT05OU1cgICAweDAwMDM0ICAvKiBDb3BwZXIvRmliZXIgc3dpdGNoIGNvbnRyb2wgLSBSVyAq LworI2RlZmluZSBFMTAwMF9WRVQgICAgICAweDAwMDM4ICAvKiBWTEFOIEV0aGVyIFR5cGUgLSBS VyAqLworI2RlZmluZSBFMTAwMF9JQ1IgICAgICAweDAwMEMwICAvKiBJbnRlcnJ1cHQgQ2F1c2Ug UmVhZCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0lUUiAgICAgIDB4MDAwQzQgIC8qIEludGVy cnVwdCBUaHJvdHRsaW5nIFJhdGUgLSBSVyAqLworI2RlZmluZSBFMTAwMF9JQ1MgICAgICAweDAw MEM4ICAvKiBJbnRlcnJ1cHQgQ2F1c2UgU2V0IC0gV08gKi8KKyNkZWZpbmUgRTEwMDBfSU1TICAg ICAgMHgwMDBEMCAgLyogSW50ZXJydXB0IE1hc2sgU2V0IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBf SU1DICAgICAgMHgwMDBEOCAgLyogSW50ZXJydXB0IE1hc2sgQ2xlYXIgLSBXTyAqLworI2RlZmlu ZSBFMTAwMF9JQU0gICAgICAweDAwMEUwICAvKiBJbnRlcnJ1cHQgQWNrbm93bGVkZ2UgQXV0byBN YXNrICovCisjZGVmaW5lIEUxMDAwX1JDVEwgICAgIDB4MDAxMDAgIC8qIFJYIENvbnRyb2wgLSBS VyAqLworI2RlZmluZSBFMTAwMF9GQ1RUViAgICAweDAwMTcwICAvKiBGbG93IENvbnRyb2wgVHJh bnNtaXQgVGltZXIgVmFsdWUgLSBSVyAqLworI2RlZmluZSBFMTAwMF9UWENXICAgICAweDAwMTc4 ICAvKiBUWCBDb25maWd1cmF0aW9uIFdvcmQgLSBSVyAqLworI2RlZmluZSBFMTAwMF9FSUNSICAg ICAweDAxNTgwICAvKiBFeHQuIEludGVycnVwdCBDYXVzZSBSZWFkIC0gUi9jbHIgKi8KKyNkZWZp bmUgRTEwMDBfRUlUUihfbikgKDB4MDE2ODAgKyAoMHg0ICogKF9uKSkpCisjZGVmaW5lIEUxMDAw X0VJQ1MgICAgIDB4MDE1MjAgIC8qIEV4dC4gSW50ZXJydXB0IENhdXNlIFNldCAtIFcwICovCisj ZGVmaW5lIEUxMDAwX0VJTVMgICAgIDB4MDE1MjQgIC8qIEV4dC4gSW50ZXJydXB0IE1hc2sgU2V0 L1JlYWQgLSBSVyAqLworI2RlZmluZSBFMTAwMF9FSU1DICAgICAweDAxNTI4ICAvKiBFeHQuIElu dGVycnVwdCBNYXNrIENsZWFyIC0gV08gKi8KKyNkZWZpbmUgRTEwMDBfRUlBQyAgICAgMHgwMTUy QyAgLyogRXh0LiBJbnRlcnJ1cHQgQXV0byBDbGVhciAtIFJXICovCisjZGVmaW5lIEUxMDAwX0VJ QU0gICAgIDB4MDE1MzAgIC8qIEV4dC4gSW50ZXJydXB0IEFjayBBdXRvIENsZWFyIE1hc2sgLSBS VyAqLworI2RlZmluZSBFMTAwMF9HUElFICAgICAweDAxNTE0ICAvKiBHZW5lcmFsIFB1cnBvc2Ug SW50ZXJydXB0IEVuYWJsZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lWQVIwICAgIDB4MDE3MDAg IC8qIEludGVycnVwdCBWZWN0b3IgQWxsb2NhdGlvbiAoYXJyYXkpIC0gUlcgKi8KKyNkZWZpbmUg RTEwMDBfSVZBUl9NSVNDIDB4MDE3NDAgLyogSVZBUiBmb3IgIm90aGVyIiBjYXVzZXMgLSBSVyAq LworI2RlZmluZSBFMTAwMF9UQ1RMICAgICAweDAwNDAwICAvKiBUWCBDb250cm9sIC0gUlcgKi8K KyNkZWZpbmUgRTEwMDBfVENUTF9FWFQgMHgwMDQwNCAgLyogRXh0ZW5kZWQgVFggQ29udHJvbCAt IFJXICovCisjZGVmaW5lIEUxMDAwX1RJUEcgICAgIDB4MDA0MTAgIC8qIFRYIEludGVyLXBhY2tl dCBnYXAgLVJXICovCisjZGVmaW5lIEUxMDAwX0FJVCAgICAgIDB4MDA0NTggIC8qIEFkYXB0aXZl IEludGVyZnJhbWUgU3BhY2luZyBUaHJvdHRsZSAtIFJXICovCisjZGVmaW5lIEUxMDAwX0xFRENU TCAgIDB4MDBFMDAgIC8qIExFRCBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUEJBICAg ICAgMHgwMTAwMCAgLyogUGFja2V0IEJ1ZmZlciBBbGxvY2F0aW9uIC0gUlcgKi8KKyNkZWZpbmUg RTEwMDBfUEJTICAgICAgMHgwMTAwOCAgLyogUGFja2V0IEJ1ZmZlciBTaXplICovCisjZGVmaW5l IEUxMDAwX0VFTU5HQ1RMIDB4MDEwMTAgIC8qIE1ORyBFRXByb20gQ29udHJvbCAqLworI2RlZmlu ZSBFMTAwMF9FRVdSICAgICAweDAxMDJDICAvKiBFRVBST00gV3JpdGUgUmVnaXN0ZXIgLSBSVyAq LworI2RlZmluZSBFMTAwMF9JMkNDTUQgICAweDAxMDI4ICAvKiBTRlBJMkMgQ29tbWFuZCBSZWdp c3RlciAtIFJXICovCisjZGVmaW5lIEUxMDAwX0ZSVElNRVIgIDB4MDEwNDggIC8qIEZyZWUgUnVu bmluZyBUaW1lciAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RDUFRJTUVSIDB4MDEwNEMgIC8qIFRD UCBUaW1lciAtIFJXICovCisjZGVmaW5lIEUxMDAwX0ZDUlRMICAgIDB4MDIxNjAgIC8qIEZsb3cg Q29udHJvbCBSZWNlaXZlIFRocmVzaG9sZCBMb3cgLSBSVyAqLworI2RlZmluZSBFMTAwMF9GQ1JU SCAgICAweDAyMTY4ICAvKiBGbG93IENvbnRyb2wgUmVjZWl2ZSBUaHJlc2hvbGQgSGlnaCAtIFJX ICovCisjZGVmaW5lIEUxMDAwX1JERlBDUShfbikgICgweDAyNDMwICsgKDB4NCAqIChfbikpKQor I2RlZmluZSBFMTAwMF9GQ1JUViAgICAweDAyNDYwICAvKiBGbG93IENvbnRyb2wgUmVmcmVzaCBU aW1lciBWYWx1ZSAtIFJXICovCisvKiBTcGxpdCBhbmQgUmVwbGljYXRpb24gUlggQ29udHJvbCAt IFJXICovCisvKgorICogQ29udmVuaWVuY2UgbWFjcm9zCisgKgorICogTm90ZTogIl9uIiBpcyB0 aGUgcXVldWUgbnVtYmVyIG9mIHRoZSByZWdpc3RlciB0byBiZSB3cml0dGVuIHRvLgorICoKKyAq IEV4YW1wbGUgdXNhZ2U6CisgKiBFMTAwMF9SREJBTF9SRUcoY3VycmVudF9yeF9xdWV1ZSkKKyAq LworI2RlZmluZSBFMTAwMF9SREJBTChfbikgICAoKF9uKSA8IDQgPyAoMHgwMjgwMCArICgoX24p ICogMHgxMDApKSBcCisJCQkJICAgIDogKDB4MEMwMDAgKyAoKF9uKSAqIDB4NDApKSkKKyNkZWZp bmUgRTEwMDBfUkRCQUgoX24pICAgKChfbikgPCA0ID8gKDB4MDI4MDQgKyAoKF9uKSAqIDB4MTAw KSkgXAorCQkJCSAgICA6ICgweDBDMDA0ICsgKChfbikgKiAweDQwKSkpCisjZGVmaW5lIEUxMDAw X1JETEVOKF9uKSAgICgoX24pIDwgNCA/ICgweDAyODA4ICsgKChfbikgKiAweDEwMCkpIFwKKwkJ CQkgICAgOiAoMHgwQzAwOCArICgoX24pICogMHg0MCkpKQorI2RlZmluZSBFMTAwMF9TUlJDVEwo X24pICAoKF9uKSA8IDQgPyAoMHgwMjgwQyArICgoX24pICogMHgxMDApKSBcCisJCQkJICAgIDog KDB4MEMwMEMgKyAoKF9uKSAqIDB4NDApKSkKKyNkZWZpbmUgRTEwMDBfUkRIKF9uKSAgICAgKChf bikgPCA0ID8gKDB4MDI4MTAgKyAoKF9uKSAqIDB4MTAwKSkgXAorCQkJCSAgICA6ICgweDBDMDEw ICsgKChfbikgKiAweDQwKSkpCisjZGVmaW5lIEUxMDAwX1JEVChfbikgICAgICgoX24pIDwgNCA/ ICgweDAyODE4ICsgKChfbikgKiAweDEwMCkpIFwKKwkJCQkgICAgOiAoMHgwQzAxOCArICgoX24p ICogMHg0MCkpKQorI2RlZmluZSBFMTAwMF9SWERDVEwoX24pICAoKF9uKSA8IDQgPyAoMHgwMjgy OCArICgoX24pICogMHgxMDApKSBcCisJCQkJICAgIDogKDB4MEMwMjggKyAoKF9uKSAqIDB4NDAp KSkKKyNkZWZpbmUgRTEwMDBfVERCQUwoX24pICAgKChfbikgPCA0ID8gKDB4MDM4MDAgKyAoKF9u KSAqIDB4MTAwKSkgXAorCQkJCSAgICA6ICgweDBFMDAwICsgKChfbikgKiAweDQwKSkpCisjZGVm aW5lIEUxMDAwX1REQkFIKF9uKSAgICgoX24pIDwgNCA/ICgweDAzODA0ICsgKChfbikgKiAweDEw MCkpIFwKKwkJCQkgICAgOiAoMHgwRTAwNCArICgoX24pICogMHg0MCkpKQorI2RlZmluZSBFMTAw MF9URExFTihfbikgICAoKF9uKSA8IDQgPyAoMHgwMzgwOCArICgoX24pICogMHgxMDApKSBcCisJ CQkJICAgIDogKDB4MEUwMDggKyAoKF9uKSAqIDB4NDApKSkKKyNkZWZpbmUgRTEwMDBfVERIKF9u KSAgICAgKChfbikgPCA0ID8gKDB4MDM4MTAgKyAoKF9uKSAqIDB4MTAwKSkgXAorCQkJCSAgICA6 ICgweDBFMDEwICsgKChfbikgKiAweDQwKSkpCisjZGVmaW5lIEUxMDAwX1REVChfbikgICAgICgo X24pIDwgNCA/ICgweDAzODE4ICsgKChfbikgKiAweDEwMCkpIFwKKwkJCQkgICAgOiAoMHgwRTAx OCArICgoX24pICogMHg0MCkpKQorI2RlZmluZSBFMTAwMF9UWERDVEwoX24pICAoKF9uKSA8IDQg PyAoMHgwMzgyOCArICgoX24pICogMHgxMDApKSBcCisJCQkJICAgIDogKDB4MEUwMjggKyAoKF9u KSAqIDB4NDApKSkKKyNkZWZpbmUgRTEwMDBfVEFSQyhfbikgICAgKDB4MDM4NDAgKyAoX24gPDwg OCkpCisjZGVmaW5lIEUxMDAwX0RDQV9UWENUUkwoX24pICgweDAzODE0ICsgKF9uIDw8IDgpKQor I2RlZmluZSBFMTAwMF9EQ0FfUlhDVFJMKF9uKSAoMHgwMjgxNCArIChfbiA8PCA4KSkKKyNkZWZp bmUgRTEwMDBfVERXQkFMKF9uKSAgKChfbikgPCA0ID8gKDB4MDM4MzggKyAoKF9uKSAqIDB4MTAw KSkgXAorCQkJCSAgICA6ICgweDBFMDM4ICsgKChfbikgKiAweDQwKSkpCisjZGVmaW5lIEUxMDAw X1REV0JBSChfbikgICgoX24pIDwgNCA/ICgweDAzODNDICsgKChfbikgKiAweDEwMCkpIFwKKwkJ CQkgICAgOiAoMHgwRTAzQyArICgoX24pICogMHg0MCkpKQorI2RlZmluZSBFMTAwMF9UREZIICAg ICAweDAzNDEwICAvKiBUWCBEYXRhIEZJRk8gSGVhZCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1RE RlQgICAgIDB4MDM0MTggIC8qIFRYIERhdGEgRklGTyBUYWlsIC0gUlcgKi8KKyNkZWZpbmUgRTEw MDBfVERGSFMgICAgMHgwMzQyMCAgLyogVFggRGF0YSBGSUZPIEhlYWQgU2F2ZWQgLSBSVyAqLwor I2RlZmluZSBFMTAwMF9UREZQQyAgICAweDAzNDMwICAvKiBUWCBEYXRhIEZJRk8gUGFja2V0IENv dW50IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfRFRYQ1RMICAgMHgwMzU5MCAgLyogRE1BIFRYIENv bnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9DUkNFUlJTICAweDA0MDAwICAvKiBDUkMgRXJy b3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9BTEdORVJSQyAweDA0MDA0ICAvKiBB bGlnbm1lbnQgRXJyb3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9TWU1FUlJTICAw eDA0MDA4ICAvKiBTeW1ib2wgRXJyb3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9S WEVSUkMgICAweDA0MDBDICAvKiBSZWNlaXZlIEVycm9yIENvdW50IC0gUi9jbHIgKi8KKyNkZWZp bmUgRTEwMDBfTVBDICAgICAgMHgwNDAxMCAgLyogTWlzc2VkIFBhY2tldCBDb3VudCAtIFIvY2xy ICovCisjZGVmaW5lIEUxMDAwX1NDQyAgICAgIDB4MDQwMTQgIC8qIFNpbmdsZSBDb2xsaXNpb24g Q291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9FQ09MICAgICAweDA0MDE4ICAvKiBFeGNl c3NpdmUgQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfTUNDICAgICAg MHgwNDAxQyAgLyogTXVsdGlwbGUgQ29sbGlzaW9uIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUg RTEwMDBfTEFURUNPTCAgMHgwNDAyMCAgLyogTGF0ZSBDb2xsaXNpb24gQ291bnQgLSBSL2NsciAq LworI2RlZmluZSBFMTAwMF9DT0xDICAgICAweDA0MDI4ICAvKiBDb2xsaXNpb24gQ291bnQgLSBS L2NsciAqLworI2RlZmluZSBFMTAwMF9EQyAgICAgICAweDA0MDMwICAvKiBEZWZlciBDb3VudCAt IFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1ROQ1JTICAgIDB4MDQwMzQgIC8qIFRYLU5vIENSUyAt IFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1NFQyAgICAgIDB4MDQwMzggIC8qIFNlcXVlbmNlIEVy cm9yIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfQ0VYVEVSUiAgMHgwNDAzQyAgLyog Q2FycmllciBFeHRlbnNpb24gRXJyb3IgQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9S TEVDICAgICAweDA0MDQwICAvKiBSZWNlaXZlIExlbmd0aCBFcnJvciBDb3VudCAtIFIvY2xyICov CisjZGVmaW5lIEUxMDAwX1hPTlJYQyAgIDB4MDQwNDggIC8qIFhPTiBSWCBDb3VudCAtIFIvY2xy ICovCisjZGVmaW5lIEUxMDAwX1hPTlRYQyAgIDB4MDQwNEMgIC8qIFhPTiBUWCBDb3VudCAtIFIv Y2xyICovCisjZGVmaW5lIEUxMDAwX1hPRkZSWEMgIDB4MDQwNTAgIC8qIFhPRkYgUlggQ291bnQg LSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9YT0ZGVFhDICAweDA0MDU0ICAvKiBYT0ZGIFRYIENv dW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfRkNSVUMgICAgMHgwNDA1OCAgLyogRmxvdyBD b250cm9sIFJYIFVuc3VwcG9ydGVkIENvdW50LSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QUkM2 NCAgICAweDA0MDVDICAvKiBQYWNrZXRzIFJYICg2NCBieXRlcykgLSBSL2NsciAqLworI2RlZmlu ZSBFMTAwMF9QUkMxMjcgICAweDA0MDYwICAvKiBQYWNrZXRzIFJYICg2NS0xMjcgYnl0ZXMpIC0g Ui9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUFJDMjU1ICAgMHgwNDA2NCAgLyogUGFja2V0cyBSWCAo MTI4LTI1NSBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QUkM1MTEgICAweDA0MDY4 ICAvKiBQYWNrZXRzIFJYICgyNTUtNTExIGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAw X1BSQzEwMjMgIDB4MDQwNkMgIC8qIFBhY2tldHMgUlggKDUxMi0xMDIzIGJ5dGVzKSAtIFIvY2xy ICovCisjZGVmaW5lIEUxMDAwX1BSQzE1MjIgIDB4MDQwNzAgIC8qIFBhY2tldHMgUlggKDEwMjQt MTUyMiBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9HUFJDICAgICAweDA0MDc0ICAv KiBHb29kIFBhY2tldHMgUlggQ291bnQgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9CUFJDICAg ICAweDA0MDc4ICAvKiBCcm9hZGNhc3QgUGFja2V0cyBSWCBDb3VudCAtIFIvY2xyICovCisjZGVm aW5lIEUxMDAwX01QUkMgICAgIDB4MDQwN0MgIC8qIE11bHRpY2FzdCBQYWNrZXRzIFJYIENvdW50 IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfR1BUQyAgICAgMHgwNDA4MCAgLyogR29vZCBQYWNr ZXRzIFRYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfR09SQ0wgICAgMHgwNDA4OCAg LyogR29vZCBPY3RldHMgUlggQ291bnQgTG93IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfR09S Q0ggICAgMHgwNDA4QyAgLyogR29vZCBPY3RldHMgUlggQ291bnQgSGlnaCAtIFIvY2xyICovCisj ZGVmaW5lIEUxMDAwX0dPVENMICAgIDB4MDQwOTAgIC8qIEdvb2QgT2N0ZXRzIFRYIENvdW50IExv dyAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0dPVENIICAgIDB4MDQwOTQgIC8qIEdvb2QgT2N0 ZXRzIFRYIENvdW50IEhpZ2ggLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9STkJDICAgICAweDA0 MEEwICAvKiBSWCBObyBCdWZmZXJzIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfUlVD ICAgICAgMHgwNDBBNCAgLyogUlggVW5kZXJzaXplIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUg RTEwMDBfUkZDICAgICAgMHgwNDBBOCAgLyogUlggRnJhZ21lbnQgQ291bnQgLSBSL2NsciAqLwor I2RlZmluZSBFMTAwMF9ST0MgICAgICAweDA0MEFDICAvKiBSWCBPdmVyc2l6ZSBDb3VudCAtIFIv Y2xyICovCisjZGVmaW5lIEUxMDAwX1JKQyAgICAgIDB4MDQwQjAgIC8qIFJYIEphYmJlciBDb3Vu dCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX01HVFBSQyAgIDB4MDQwQjQgIC8qIE1hbmFnZW1l bnQgUGFja2V0cyBSWCBDb3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX01HVFBEQyAgIDB4 MDQwQjggIC8qIE1hbmFnZW1lbnQgUGFja2V0cyBEcm9wcGVkIENvdW50IC0gUi9jbHIgKi8KKyNk ZWZpbmUgRTEwMDBfTUdUUFRDICAgMHgwNDBCQyAgLyogTWFuYWdlbWVudCBQYWNrZXRzIFRYIENv dW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVE9STCAgICAgMHgwNDBDMCAgLyogVG90YWwg T2N0ZXRzIFJYIExvdyAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1RPUkggICAgIDB4MDQwQzQg IC8qIFRvdGFsIE9jdGV0cyBSWCBIaWdoIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVE9UTCAg ICAgMHgwNDBDOCAgLyogVG90YWwgT2N0ZXRzIFRYIExvdyAtIFIvY2xyICovCisjZGVmaW5lIEUx MDAwX1RPVEggICAgIDB4MDQwQ0MgIC8qIFRvdGFsIE9jdGV0cyBUWCBIaWdoIC0gUi9jbHIgKi8K KyNkZWZpbmUgRTEwMDBfVFBSICAgICAgMHgwNDBEMCAgLyogVG90YWwgUGFja2V0cyBSWCAtIFIv Y2xyICovCisjZGVmaW5lIEUxMDAwX1RQVCAgICAgIDB4MDQwRDQgIC8qIFRvdGFsIFBhY2tldHMg VFggLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QVEM2NCAgICAweDA0MEQ4ICAvKiBQYWNrZXRz IFRYICg2NCBieXRlcykgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9QVEMxMjcgICAweDA0MERD ICAvKiBQYWNrZXRzIFRYICg2NS0xMjcgYnl0ZXMpIC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBf UFRDMjU1ICAgMHgwNDBFMCAgLyogUGFja2V0cyBUWCAoMTI4LTI1NSBieXRlcykgLSBSL2NsciAq LworI2RlZmluZSBFMTAwMF9QVEM1MTEgICAweDA0MEU0ICAvKiBQYWNrZXRzIFRYICgyNTYtNTEx IGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BUQzEwMjMgIDB4MDQwRTggIC8qIFBh Y2tldHMgVFggKDUxMi0xMDIzIGJ5dGVzKSAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX1BUQzE1 MjIgIDB4MDQwRUMgIC8qIFBhY2tldHMgVFggKDEwMjQtMTUyMiBCeXRlcykgLSBSL2NsciAqLwor I2RlZmluZSBFMTAwMF9NUFRDICAgICAweDA0MEYwICAvKiBNdWx0aWNhc3QgUGFja2V0cyBUWCBD b3VudCAtIFIvY2xyICovCisjZGVmaW5lIEUxMDAwX0JQVEMgICAgIDB4MDQwRjQgIC8qIEJyb2Fk Y2FzdCBQYWNrZXRzIFRYIENvdW50IC0gUi9jbHIgKi8KKyNkZWZpbmUgRTEwMDBfVFNDVEMgICAg MHgwNDBGOCAgLyogVENQIFNlZ21lbnRhdGlvbiBDb250ZXh0IFRYIC0gUi9jbHIgKi8KKyNkZWZp bmUgRTEwMDBfVFNDVEZDICAgMHgwNDBGQyAgLyogVENQIFNlZ21lbnRhdGlvbiBDb250ZXh0IFRY IEZhaWwgLSBSL2NsciAqLworI2RlZmluZSBFMTAwMF9JQUMgICAgICAweDA0MTAwICAvKiBJbnRl cnJ1cHQgQXNzZXJ0aW9uIENvdW50ICovCisvKiBJbnRlcnJ1cHQgQ2F1c2UgUnggUGFja2V0IFRp bWVyIEV4cGlyZSBDb3VudCAqLworI2RlZmluZSBFMTAwMF9JQ1JYUFRDICAweDA0MTA0CisvKiBJ bnRlcnJ1cHQgQ2F1c2UgUnggQWJzb2x1dGUgVGltZXIgRXhwaXJlIENvdW50ICovCisjZGVmaW5l IEUxMDAwX0lDUlhBVEMgIDB4MDQxMDgKKy8qIEludGVycnVwdCBDYXVzZSBUeCBQYWNrZXQgVGlt ZXIgRXhwaXJlIENvdW50ICovCisjZGVmaW5lIEUxMDAwX0lDVFhQVEMgIDB4MDQxMEMKKy8qIElu dGVycnVwdCBDYXVzZSBUeCBBYnNvbHV0ZSBUaW1lciBFeHBpcmUgQ291bnQgKi8KKyNkZWZpbmUg RTEwMDBfSUNUWEFUQyAgMHgwNDExMAorLyogSW50ZXJydXB0IENhdXNlIFR4IFF1ZXVlIEVtcHR5 IENvdW50ICovCisjZGVmaW5lIEUxMDAwX0lDVFhRRUMgIDB4MDQxMTgKKy8qIEludGVycnVwdCBD YXVzZSBUeCBRdWV1ZSBNaW5pbXVtIFRocmVzaG9sZCBDb3VudCAqLworI2RlZmluZSBFMTAwMF9J Q1RYUU1UQyAweDA0MTFDCisvKiBJbnRlcnJ1cHQgQ2F1c2UgUnggRGVzY3JpcHRvciBNaW5pbXVt IFRocmVzaG9sZCBDb3VudCAqLworI2RlZmluZSBFMTAwMF9JQ1JYRE1UQyAweDA0MTIwCisjZGVm aW5lIEUxMDAwX0lDUlhPQyAgIDB4MDQxMjQgIC8qIEludGVycnVwdCBDYXVzZSBSZWNlaXZlciBP dmVycnVuIENvdW50ICovCisjZGVmaW5lIEUxMDAwX1BDU19DRkcwICAgIDB4MDQyMDAgIC8qIFBD UyBDb25maWd1cmF0aW9uIDAgLSBSVyAqLworI2RlZmluZSBFMTAwMF9QQ1NfTENUTCAgICAweDA0 MjA4ICAvKiBQQ1MgTGluayBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUENTX0xTVEFU ICAgMHgwNDIwQyAgLyogUENTIExpbmsgU3RhdHVzIC0gUk8gKi8KKyNkZWZpbmUgRTEwMDBfQ0JU TVBDICAgICAgMHgwNDAyQyAgLyogQ2lyY3VpdCBCcmVha2VyIFRYIFBhY2tldCBDb3VudCAqLwor I2RlZmluZSBFMTAwMF9IVERQTUMgICAgICAweDA0MDNDICAvKiBIb3N0IFRyYW5zbWl0IERpc2Nh cmRlZCBQYWNrZXRzICovCisjZGVmaW5lIEUxMDAwX0NCUk1QQyAgICAgIDB4MDQwRkMgIC8qIENp cmN1aXQgQnJlYWtlciBSWCBQYWNrZXQgQ291bnQgKi8KKyNkZWZpbmUgRTEwMDBfUlBUSEMgICAg ICAgMHgwNDEwNCAgLyogUnggUGFja2V0cyBUbyBIb3N0ICovCisjZGVmaW5lIEUxMDAwX0hHUFRD ICAgICAgIDB4MDQxMTggIC8qIEhvc3QgR29vZCBQYWNrZXRzIFRYIENvdW50ICovCisjZGVmaW5l IEUxMDAwX0hUQ0JEUEMgICAgIDB4MDQxMjQgIC8qIEhvc3QgVFggQ2lyY3VpdCBCcmVha2VyIERy b3BwZWQgQ291bnQgKi8KKyNkZWZpbmUgRTEwMDBfSEdPUkNMICAgICAgMHgwNDEyOCAgLyogSG9z dCBHb29kIE9jdGV0cyBSZWNlaXZlZCBDb3VudCBMb3cgKi8KKyNkZWZpbmUgRTEwMDBfSEdPUkNI ICAgICAgMHgwNDEyQyAgLyogSG9zdCBHb29kIE9jdGV0cyBSZWNlaXZlZCBDb3VudCBIaWdoICov CisjZGVmaW5lIEUxMDAwX0hHT1RDTCAgICAgIDB4MDQxMzAgIC8qIEhvc3QgR29vZCBPY3RldHMg VHJhbnNtaXQgQ291bnQgTG93ICovCisjZGVmaW5lIEUxMDAwX0hHT1RDSCAgICAgIDB4MDQxMzQg IC8qIEhvc3QgR29vZCBPY3RldHMgVHJhbnNtaXQgQ291bnQgSGlnaCAqLworI2RlZmluZSBFMTAw MF9MRU5FUlJTICAgICAweDA0MTM4ICAvKiBMZW5ndGggRXJyb3JzIENvdW50ICovCisjZGVmaW5l IEUxMDAwX1NDVlBDICAgICAgIDB4MDQyMjggIC8qIFNlckRlcy9TR01JSSBDb2RlIFZpb2xhdGlv biBQa3QgQ291bnQgKi8KKyNkZWZpbmUgRTEwMDBfUENTX0FOQURWICAgMHgwNDIxOCAgLyogQU4g YWR2ZXJ0aXNlbWVudCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1BDU19MUEFCICAgIDB4MDQyMUMg IC8qIExpbmsgUGFydG5lciBBYmlsaXR5IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUENTX05QVFgg ICAgMHgwNDIyMCAgLyogQU4gTmV4dCBQYWdlIFRyYW5zbWl0IC0gUlcgKi8KKyNkZWZpbmUgRTEw MDBfUENTX0xQQUJOUCAgMHgwNDIyNCAgLyogTGluayBQYXJ0bmVyIEFiaWxpdHkgTmV4dCBQYWdl IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfUlhDU1VNICAgMHgwNTAwMCAgLyogUlggQ2hlY2tzdW0g Q29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX1JMUE1MICAgIDB4MDUwMDQgIC8qIFJYIExv bmcgUGFja2V0IE1heCBMZW5ndGggKi8KKyNkZWZpbmUgRTEwMDBfUkZDVEwgICAgMHgwNTAwOCAg LyogUmVjZWl2ZSBGaWx0ZXIgQ29udHJvbCovCisjZGVmaW5lIEUxMDAwX01UQSAgICAgIDB4MDUy MDAgIC8qIE11bHRpY2FzdCBUYWJsZSBBcnJheSAtIFJXIEFycmF5ICovCisjZGVmaW5lIEUxMDAw X1JBICAgICAgIDB4MDU0MDAgIC8qIFJlY2VpdmUgQWRkcmVzcyAtIFJXIEFycmF5ICovCisjZGVm aW5lIEUxMDAwX1JBMiAgICAgIDB4MDU0RTAgIC8qIDJuZCBoYWxmIG9mIHJlY2VpdmUgYWRkcmVz cyBhcnJheSAtIFJXIEFycmF5ICovCisjZGVmaW5lIEUxMDAwX1ZGVEEgICAgIDB4MDU2MDAgIC8q IFZMQU4gRmlsdGVyIFRhYmxlIEFycmF5IC0gUlcgQXJyYXkgKi8KKyNkZWZpbmUgRTEwMDBfVk1E X0NUTCAgMHgwNTgxQyAgLyogVk1EcSBDb250cm9sIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfV1VD ICAgICAgMHgwNTgwMCAgLyogV2FrZXVwIENvbnRyb2wgLSBSVyAqLworI2RlZmluZSBFMTAwMF9X VUZDICAgICAweDA1ODA4ICAvKiBXYWtldXAgRmlsdGVyIENvbnRyb2wgLSBSVyAqLworI2RlZmlu ZSBFMTAwMF9XVVMgICAgICAweDA1ODEwICAvKiBXYWtldXAgU3RhdHVzIC0gUk8gKi8KKyNkZWZp bmUgRTEwMDBfTUFOQyAgICAgMHgwNTgyMCAgLyogTWFuYWdlbWVudCBDb250cm9sIC0gUlcgKi8K KyNkZWZpbmUgRTEwMDBfSVBBViAgICAgMHgwNTgzOCAgLyogSVAgQWRkcmVzcyBWYWxpZCAtIFJX ICovCisjZGVmaW5lIEUxMDAwX1dVUEwgICAgIDB4MDU5MDAgIC8qIFdha2V1cCBQYWNrZXQgTGVu Z3RoIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfSE9TVF9JRiAgMHgwODgwMCAgLyogSG9zdCBJbnRl cmZhY2UgKi8KKworI2RlZmluZSBFMTAwMF9NQU5DMkggICAgICAweDA1ODYwIC8qIE1hbmFnZW1l bnQgQ29udHJvbCBUbyBIb3N0IC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfU1dfRldfU1lOQyAgMHgw NUI1QyAvKiBTb2Z0d2FyZS1GaXJtd2FyZSBTeW5jaHJvbml6YXRpb24gLSBSVyAqLworI2RlZmlu ZSBFMTAwMF9DQ01DVEwgICAgICAweDA1QjQ4IC8qIENDTSBDb250cm9sIFJlZ2lzdGVyICovCisj ZGVmaW5lIEUxMDAwX0dJT0NUTCAgICAgIDB4MDVCNDQgLyogR0lPIEFuYWxvZyBDb250cm9sIFJl Z2lzdGVyICovCisjZGVmaW5lIEUxMDAwX1NDQ1RMICAgICAgIDB4MDVCNEMgLyogUENJYyBQTEwg Q29uZmlndXJhdGlvbiBSZWdpc3RlciAqLworI2RlZmluZSBFMTAwMF9GQUNUUFMgICAgMHgwNUIz MCAvKiBGdW5jdGlvbiBBY3RpdmUgYW5kIFBvd2VyIFN0YXRlIHRvIE1ORyAqLworI2RlZmluZSBF MTAwMF9TV1NNICAgICAgMHgwNUI1MCAvKiBTVyBTZW1hcGhvcmUgKi8KKyNkZWZpbmUgRTEwMDBf RldTTSAgICAgIDB4MDVCNTQgLyogRlcgU2VtYXBob3JlICovCisjZGVmaW5lIEUxMDAwX0hJQ1Ig ICAgICAweDA4RjAwIC8qIEhvc3QgSW50ZWZhY2UgQ29udHJvbCAqLworCisvKiBSU1MgcmVnaXN0 ZXJzICovCisjZGVmaW5lIEUxMDAwX01SUUMgICAgICAweDA1ODE4IC8qIE11bHRpcGxlIFJlY2Vp dmUgQ29udHJvbCAtIFJXICovCisjZGVmaW5lIEUxMDAwX0lNSVIoX2kpICAgICAgKDB4MDVBODAg KyAoKF9pKSAqIDQpKSAgLyogSW1tZWRpYXRlIEludGVycnVwdCAqLworI2RlZmluZSBFMTAwMF9J TUlSRVhUKF9pKSAgICgweDA1QUEwICsgKChfaSkgKiA0KSkgIC8qIEltbWVkaWF0ZSBJbnRlcnJ1 cHQgRXh0Ki8KKyNkZWZpbmUgRTEwMDBfSU1JUlZQICAgIDB4MDVBQzAgLyogSW1tZWRpYXRlIElu dGVycnVwdCBSWCBWTEFOIFByaW9yaXR5IC0gUlcgKi8KKy8qIE1TSS1YIEFsbG9jYXRpb24gUmVn aXN0ZXIgKF9pKSAtIFJXICovCisjZGVmaW5lIEUxMDAwX01TSVhCTShfaSkgICAgKDB4MDE2MDAg KyAoKF9pKSAqIDQpKQorLyogTVNJLVggVGFibGUgZW50cnkgYWRkciBsb3cgcmVnIDAgLSBSVyAq LworI2RlZmluZSBFMTAwMF9NU0lYVEFERChfaSkgICgweDBDMDAwICsgKChfaSkgKiAweDEwKSkK Ky8qIE1TSS1YIFRhYmxlIGVudHJ5IGFkZHIgdXBwZXIgcmVnIDAgLSBSVyAqLworI2RlZmluZSBF MTAwMF9NU0lYVFVBREQoX2kpICgweDBDMDA0ICsgKChfaSkgKiAweDEwKSkKKy8qIE1TSS1YIFRh YmxlIGVudHJ5IG1lc3NhZ2UgcmVnIDAgLSBSVyAqLworI2RlZmluZSBFMTAwMF9NU0lYVE1TRyhf aSkgICgweDBDMDA4ICsgKChfaSkgKiAweDEwKSkKKy8qIE1TSS1YIFRhYmxlIGVudHJ5IHZlY3Rv ciBjdHJsIHJlZyAwIC0gUlcgKi8KKyNkZWZpbmUgRTEwMDBfTVNJWFZDVFJMKF9pKSAoMHgwQzAw QyArICgoX2kpICogMHgxMCkpCisvKiBSZWRpcmVjdGlvbiBUYWJsZSAtIFJXIEFycmF5ICovCisj ZGVmaW5lIEUxMDAwX1JFVEEoX2kpICAoMHgwNUMwMCArICgoX2kpICogNCkpCisjZGVmaW5lIEUx MDAwX1JTU1JLKF9pKSAoMHgwNUM4MCArICgoX2kpICogNCkpIC8qIFJTUyBSYW5kb20gS2V5IC0g UlcgQXJyYXkgKi8KKworI2RlZmluZSB3cjMyKHJlZywgdmFsdWUpICh3cml0ZWwodmFsdWUsIGh3 LT5od19hZGRyICsgcmVnKSkKKyNkZWZpbmUgcmQzMihyZWcpIChyZWFkbChody0+aHdfYWRkciAr IHJlZykpCisjZGVmaW5lIHdyZmwoKSAoKHZvaWQpcmQzMihFMTAwMF9TVEFUVVMpKQorCisjZGVm aW5lIGFycmF5X3dyMzIocmVnLCBvZmZzZXQsIHZhbHVlKSBcCisJKHdyaXRlbCh2YWx1ZSwgaHct Pmh3X2FkZHIgKyByZWcgKyAoKG9mZnNldCkgPDwgMikpKQorI2RlZmluZSBhcnJheV9yZDMyKHJl Zywgb2Zmc2V0KSBcCisJKHJlYWRsKGh3LT5od19hZGRyICsgcmVnICsgKChvZmZzZXQpIDw8IDIp KSkKKworI2VuZGlmCmRpZmYgLXIgYWY3NDNkMTRhYThjIGRyaXZlcnMvbmV0L2lnYi9pZ2IuaAot LS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysgYi9kcml2ZXJz L25ldC9pZ2IvaWdiLmgJVGh1IEZlYiAxMiAwMzowMjoxNCAyMDA5IC0wNTAwCkBAIC0wLDAgKzEs MzI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVsKFIpIEdpZ2FiaXQgRXRo ZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3IEludGVsIENvcnBvcmF0aW9u LgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0 ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNpb24gMiwgYXMgcHVibGlz aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAor ICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJD SEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3JlIGRldGFpbHMuCisKKyAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJhbmtsaW4gU3QgLSBGaWZ0 aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBUaGUgZnVsbCBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBpbgor ICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3QgSW5mb3JtYXRpb246Cisg IGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2Uu bmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0gWW91bmcgUGFya3dheSwg SGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKwor LyogTGludXggUFJPLzEwMDAgRXRoZXJuZXQgRHJpdmVyIG1haW4gaGVhZGVyIGZpbGUgKi8KKwor I2lmbmRlZiBfSUdCX0hfCisjZGVmaW5lIF9JR0JfSF8KKworI2luY2x1ZGUgImUxMDAwX21hYy5o IgorI2luY2x1ZGUgImUxMDAwXzgyNTc1LmgiCisKK3N0cnVjdCBpZ2JfYWRhcHRlcjsKKworI2lm ZGVmIENPTkZJR19JR0JfTFJPCisjaW5jbHVkZSA8bGludXgvaW5ldF9scm8uaD4KKyNkZWZpbmUg TUFYX0xST19BR0dSICAgICAgICAgICAgICAgICAgICAgIDMyCisjZGVmaW5lIE1BWF9MUk9fREVT Q1JJUFRPUlMgICAgICAgICAgICAgICAgOAorI2VuZGlmCisKKy8qIEludGVycnVwdCBkZWZpbmVz ICovCisjZGVmaW5lIElHQl9NQVhfVFhfQ0xFQU4gNzIKKworI2RlZmluZSBJR0JfTUlOX0RZTl9J VFIgMzAwMAorI2RlZmluZSBJR0JfTUFYX0RZTl9JVFIgOTYwMDAKKworLyogKCgxMDAwMDAwMDAw bnMgLyAoNjAwMGludHMvcyAqIDEwMjRucykpIDw8IDIgPSA2NDggKi8KKyNkZWZpbmUgSUdCX1NU QVJUX0lUUiA2NDgKKworI2RlZmluZSBJR0JfRFlOX0lUUl9QQUNLRVRfVEhSRVNIT0xEIDIKKyNk ZWZpbmUgSUdCX0RZTl9JVFJfTEVOR1RIX0xPVyAyMDAKKyNkZWZpbmUgSUdCX0RZTl9JVFJfTEVO R1RIX0hJR0ggMTAwMAorCisvKiBUWC9SWCBkZXNjcmlwdG9yIGRlZmluZXMgKi8KKyNkZWZpbmUg SUdCX0RFRkFVTFRfVFhEICAgICAgICAgICAgICAgICAgMjU2CisjZGVmaW5lIElHQl9NSU5fVFhE ICAgICAgICAgICAgICAgICAgICAgICA4MAorI2RlZmluZSBJR0JfTUFYX1RYRCAgICAgICAgICAg ICAgICAgICAgIDQwOTYKKworI2RlZmluZSBJR0JfREVGQVVMVF9SWEQgICAgICAgICAgICAgICAg ICAyNTYKKyNkZWZpbmUgSUdCX01JTl9SWEQgICAgICAgICAgICAgICAgICAgICAgIDgwCisjZGVm aW5lIElHQl9NQVhfUlhEICAgICAgICAgICAgICAgICAgICAgNDA5NgorCisjZGVmaW5lIElHQl9E RUZBVUxUX0lUUiAgICAgICAgICAgICAgICAgICAgMyAvKiBkeW5hbWljICovCisjZGVmaW5lIElH Ql9NQVhfSVRSX1VTRUNTICAgICAgICAgICAgICAxMDAwMAorI2RlZmluZSBJR0JfTUlOX0lUUl9V U0VDUyAgICAgICAgICAgICAgICAgMTAKKworLyogVHJhbnNtaXQgYW5kIHJlY2VpdmUgcXVldWVz ICovCisjZGVmaW5lIElHQl9NQVhfUlhfUVVFVUVTICAgICAgICAgICAgICAgICAgNAorCisvKiBS WCBkZXNjcmlwdG9yIGNvbnRyb2wgdGhyZXNob2xkcy4KKyAqIFBUSFJFU0ggLSBNQUMgd2lsbCBj b25zaWRlciBwcmVmZXRjaCBpZiBpdCBoYXMgZmV3ZXIgdGhhbiB0aGlzIG51bWJlciBvZgorICog ICAgICAgICAgIGRlc2NyaXB0b3JzIGF2YWlsYWJsZSBpbiBpdHMgb25ib2FyZCBtZW1vcnkuCisg KiAgICAgICAgICAgU2V0dGluZyB0aGlzIHRvIDAgZGlzYWJsZXMgUlggZGVzY3JpcHRvciBwcmVm ZXRjaC4KKyAqIEhUSFJFU0ggLSBNQUMgd2lsbCBvbmx5IHByZWZldGNoIGlmIHRoZXJlIGFyZSBh dCBsZWFzdCB0aGlzIG1hbnkgZGVzY3JpcHRvcnMKKyAqICAgICAgICAgICBhdmFpbGFibGUgaW4g aG9zdCBtZW1vcnkuCisgKiAgICAgICAgICAgSWYgUFRIUkVTSCBpcyAwLCB0aGlzIHNob3VsZCBh bHNvIGJlIDAuCisgKiBXVEhSRVNIIC0gUlggZGVzY3JpcHRvciB3cml0ZWJhY2sgdGhyZXNob2xk IC0gTUFDIHdpbGwgZGVsYXkgd3JpdGluZyBiYWNrCisgKiAgICAgICAgICAgZGVzY3JpcHRvcnMg dW50aWwgZWl0aGVyIGl0IGhhcyB0aGlzIG1hbnkgdG8gd3JpdGUgYmFjaywgb3IgdGhlCisgKiAg ICAgICAgICAgSVRSIHRpbWVyIGV4cGlyZXMuCisgKi8KKyNkZWZpbmUgSUdCX1JYX1BUSFJFU0gg ICAgICAgICAgICAgICAgICAgIDE2CisjZGVmaW5lIElHQl9SWF9IVEhSRVNIICAgICAgICAgICAg ICAgICAgICAgOAorI2RlZmluZSBJR0JfUlhfV1RIUkVTSCAgICAgICAgICAgICAgICAgICAgIDEK KworLyogdGhpcyBpcyB0aGUgc2l6ZSBwYXN0IHdoaWNoIGhhcmR3YXJlIHdpbGwgZHJvcCBwYWNr ZXRzIHdoZW4gc2V0dGluZyBMUEU9MCAqLworI2RlZmluZSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5f U0laRSAxNTIyCisKKy8qIFN1cHBvcnRlZCBSeCBCdWZmZXIgU2l6ZXMgKi8KKyNkZWZpbmUgSUdC X1JYQlVGRkVSXzEyOCAgIDEyOCAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8KKyNkZWZp bmUgSUdCX1JYQlVGRkVSXzI1NiAgIDI1NiAgICAvKiBVc2VkIGZvciBwYWNrZXQgc3BsaXQgKi8K KyNkZWZpbmUgSUdCX1JYQlVGRkVSXzUxMiAgIDUxMgorI2RlZmluZSBJR0JfUlhCVUZGRVJfMTAy NCAgMTAyNAorI2RlZmluZSBJR0JfUlhCVUZGRVJfMjA0OCAgMjA0OAorI2RlZmluZSBJR0JfUlhC VUZGRVJfNDA5NiAgNDA5NgorI2RlZmluZSBJR0JfUlhCVUZGRVJfODE5MiAgODE5MgorI2RlZmlu ZSBJR0JfUlhCVUZGRVJfMTYzODQgMTYzODQKKworLyogUGFja2V0IEJ1ZmZlciBhbGxvY2F0aW9u cyAqLworCisKKy8qIEhvdyBtYW55IFR4IERlc2NyaXB0b3JzIGRvIHdlIG5lZWQgdG8gY2FsbCBu ZXRpZl93YWtlX3F1ZXVlID8gKi8KKyNkZWZpbmUgSUdCX1RYX1FVRVVFX1dBS0UJMTYKKy8qIEhv dyBtYW55IFJ4IEJ1ZmZlcnMgZG8gd2UgYnVuZGxlIGludG8gb25lIHdyaXRlIHRvIHRoZSBoYXJk d2FyZSA/ICovCisjZGVmaW5lIElHQl9SWF9CVUZGRVJfV1JJVEUJMTYJLyogTXVzdCBiZSBwb3dl ciBvZiAyICovCisKKyNkZWZpbmUgQVVUT19BTExfTU9ERVMgICAgICAgICAgICAwCisjZGVmaW5l IElHQl9FRVBST01fQVBNRSAgICAgICAgIDB4MDQwMAorCisjaWZuZGVmIElHQl9NQVNURVJfU0xB VkUKKy8qIFN3aXRjaCB0byBvdmVycmlkZSBQSFkgbWFzdGVyL3NsYXZlIHNldHRpbmcgKi8KKyNk ZWZpbmUgSUdCX01BU1RFUl9TTEFWRQllMTAwMF9tc19od19kZWZhdWx0CisjZW5kaWYKKworI2Rl ZmluZSBJR0JfTU5HX1ZMQU5fTk9ORSAtMQorCisvKiB3cmFwcGVyIGFyb3VuZCBhIHBvaW50ZXIg dG8gYSBzb2NrZXQgYnVmZmVyLAorICogc28gYSBETUEgaGFuZGxlIGNhbiBiZSBzdG9yZWQgYWxv bmcgd2l0aCB0aGUgYnVmZmVyICovCitzdHJ1Y3QgaWdiX2J1ZmZlciB7CisJc3RydWN0IHNrX2J1 ZmYgKnNrYjsKKwlkbWFfYWRkcl90IGRtYTsKKwl1bmlvbiB7CisJCS8qIFRYICovCisJCXN0cnVj dCB7CisJCQl1bnNpZ25lZCBsb25nIHRpbWVfc3RhbXA7CisJCQl1MzIgbGVuZ3RoOworCQl9Owor CQkvKiBSWCAqLworCQlzdHJ1Y3QgeworCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CisJCQl1NjQgcGFn ZV9kbWE7CisJCQl1bnNpZ25lZCBpbnQgcGFnZV9vZmZzZXQ7CisJCX07CisJfTsKK307CisKK3N0 cnVjdCBpZ2JfcXVldWVfc3RhdHMgeworCXU2NCBwYWNrZXRzOworCXU2NCBieXRlczsKK307CisK K3N0cnVjdCBpZ2JfcmluZyB7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyOyAvKiBiYWNr bGluayAqLworCXZvaWQgKmRlc2M7ICAgICAgICAgICAgICAgICAgLyogZGVzY3JpcHRvciByaW5n IG1lbW9yeSAqLworCWRtYV9hZGRyX3QgZG1hOyAgICAgICAgICAgICAgLyogcGh5cyBhZGRyZXNz IG9mIHRoZSByaW5nICovCisJdW5zaWduZWQgaW50IHNpemU7ICAgICAgICAgICAvKiBsZW5ndGgg b2YgZGVzYy4gcmluZyBpbiBieXRlcyAqLworCXVuc2lnbmVkIGludCBjb3VudDsgICAgICAgICAg LyogbnVtYmVyIG9mIGRlc2MuIGluIHRoZSByaW5nICovCisJdTE2IG5leHRfdG9fdXNlOworCXUx NiBuZXh0X3RvX2NsZWFuOworCXUxNiBoZWFkOworCXUxNiB0YWlsOworCXN0cnVjdCBpZ2JfYnVm ZmVyICpidWZmZXJfaW5mbzsgLyogYXJyYXkgb2YgYnVmZmVyIGluZm8gc3RydWN0cyAqLworCisJ dTMyIGVpbXNfdmFsdWU7CisJdTMyIGl0cl92YWw7CisJdTE2IGl0cl9yZWdpc3RlcjsKKwl1MTYg Y3B1OworCisJaW50IHF1ZXVlX2luZGV4OworCXVuc2lnbmVkIGludCB0b3RhbF9ieXRlczsKKwl1 bnNpZ25lZCBpbnQgdG90YWxfcGFja2V0czsKKworCXVuaW9uIHsKKwkJLyogVFggKi8KKwkJc3Ry dWN0IHsKKwkJCXNwaW5sb2NrX3QgdHhfY2xlYW5fbG9jazsKKwkJCXNwaW5sb2NrX3QgdHhfbG9j azsKKwkJCWJvb2wgZGV0ZWN0X3R4X2h1bmc7CisJCX07CisJCS8qIFJYICovCisJCXN0cnVjdCB7 CisJCQlzdHJ1Y3QgaWdiX3F1ZXVlX3N0YXRzIHJ4X3N0YXRzOworCQkJc3RydWN0IG5ldF9kZXZp Y2UgKm5ldGRldjsKKwkJCXN0cnVjdCBpZ2JfcmluZyAqYnVkZHk7CisJCQlpbnQgc2V0X2l0cjsK KyNpZmRlZiBDT05GSUdfSUdCX0xSTworCQkJc3RydWN0IG5ldF9scm9fbWdyIGxyb19tZ3I7CisJ CQlib29sIGxyb191c2VkOworI2VuZGlmCisJCX07CisJfTsKKworCWNoYXIgbmFtZVtJRk5BTVNJ WiArIDVdOworfTsKKworI2RlZmluZSBJR0JfREVTQ19VTlVTRUQoUikgXAorCSgoKChSKS0+bmV4 dF90b19jbGVhbiA+IChSKS0+bmV4dF90b191c2UpID8gMCA6IChSKS0+Y291bnQpICsgXAorCShS KS0+bmV4dF90b19jbGVhbiAtIChSKS0+bmV4dF90b191c2UgLSAxKQorCisjZGVmaW5lIEUxMDAw X1JYX0RFU0NfQURWKFIsIGkpCSAgICBcCisJKCYoKCh1bmlvbiBlMTAwMF9hZHZfcnhfZGVzYyAq KSgoUikuZGVzYykpW2ldKSkKKyNkZWZpbmUgRTEwMDBfVFhfREVTQ19BRFYoUiwgaSkJICAgIFwK KwkoJigoKHVuaW9uIGUxMDAwX2Fkdl90eF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQorI2RlZmlu ZSBFMTAwMF9UWF9DVFhUREVTQ19BRFYoUiwgaSkJICAgIFwKKwkoJigoKHN0cnVjdCBlMTAwMF9h ZHZfdHhfY29udGV4dF9kZXNjICopKChSKS5kZXNjKSlbaV0pKQorI2RlZmluZSBFMTAwMF9HRVRf REVTQyhSLCBpLCB0eXBlKQkoJigoKHN0cnVjdCB0eXBlICopKChSKS5kZXNjKSlbaV0pKQorI2Rl ZmluZSBFMTAwMF9UWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBlMTAwMF90eF9k ZXNjKQorI2RlZmluZSBFMTAwMF9SWF9ERVNDKFIsIGkpCQlFMTAwMF9HRVRfREVTQyhSLCBpLCBl MTAwMF9yeF9kZXNjKQorCisvKiBib2FyZCBzcGVjaWZpYyBwcml2YXRlIGRhdGEgc3RydWN0dXJl ICovCisKK3N0cnVjdCBpZ2JfYWRhcHRlciB7CisJc3RydWN0IHRpbWVyX2xpc3Qgd2F0Y2hkb2df dGltZXI7CisJc3RydWN0IHRpbWVyX2xpc3QgcGh5X2luZm9fdGltZXI7CisJc3RydWN0IHZsYW5f Z3JvdXAgKnZsZ3JwOworCXUxNiBtbmdfdmxhbl9pZDsKKwl1MzIgYmRfbnVtYmVyOworCXUzMiBy eF9idWZmZXJfbGVuOworCXUzMiB3b2w7CisJdTMyIGVuX21uZ19wdDsKKwl1MTYgbGlua19zcGVl ZDsKKwl1MTYgbGlua19kdXBsZXg7CisJdW5zaWduZWQgaW50IHRvdGFsX3R4X2J5dGVzOworCXVu c2lnbmVkIGludCB0b3RhbF90eF9wYWNrZXRzOworCXVuc2lnbmVkIGludCB0b3RhbF9yeF9ieXRl czsKKwl1bnNpZ25lZCBpbnQgdG90YWxfcnhfcGFja2V0czsKKwkvKiBJbnRlcnJ1cHQgVGhyb3R0 bGUgUmF0ZSAqLworCXUzMiBpdHI7CisJdTMyIGl0cl9zZXR0aW5nOworCXUxNiB0eF9pdHI7CisJ dTE2IHJ4X2l0cjsKKworCXN0cnVjdCB3b3JrX3N0cnVjdCByZXNldF90YXNrOworCXN0cnVjdCB3 b3JrX3N0cnVjdCB3YXRjaGRvZ190YXNrOworCWJvb2wgZmNfYXV0b25lZzsKKwl1OCAgdHhfdGlt ZW91dF9mYWN0b3I7CisJc3RydWN0IHRpbWVyX2xpc3QgYmxpbmtfdGltZXI7CisJdW5zaWduZWQg bG9uZyBsZWRfc3RhdHVzOworCisJLyogVFggKi8KKwlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3Jpbmc7 ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwl1bnNpZ25lZCBpbnQgcmVzdGFydF9x dWV1ZTsKKwl1bnNpZ25lZCBsb25nIHR4X3F1ZXVlX2xlbjsKKwl1MzIgdHhkX2NtZDsKKwl1MzIg Z290YzsKKwl1NjQgZ290Y19vbGQ7CisJdTY0IHRwdF9vbGQ7CisJdTY0IGNvbGNfb2xkOworCXUz MiB0eF90aW1lb3V0X2NvdW50OworCisJLyogUlggKi8KKwlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3Jp bmc7ICAgICAgLyogT25lIHBlciBhY3RpdmUgcXVldWUgKi8KKwlpbnQgbnVtX3R4X3F1ZXVlczsK KwlpbnQgbnVtX3J4X3F1ZXVlczsKKworCXU2NCBod19jc3VtX2VycjsKKwl1NjQgaHdfY3N1bV9n b29kOworCXU2NCByeF9oZHJfc3BsaXQ7CisJdTMyIGFsbG9jX3J4X2J1ZmZfZmFpbGVkOworCWJv b2wgcnhfY3N1bTsKKwl1MzIgZ29yYzsKKwl1NjQgZ29yY19vbGQ7CisJdTE2IHJ4X3BzX2hkcl9z aXplOworCXUzMiBtYXhfZnJhbWVfc2l6ZTsKKwl1MzIgbWluX2ZyYW1lX3NpemU7CisKKwkvKiBP UyBkZWZpbmVkIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OworCXN0cnVj dCBwY2lfZGV2ICpwZGV2OworCXN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzIG5ldF9zdGF0czsKKwor CS8qIHN0cnVjdHMgZGVmaW5lZCBpbiBlMTAwMF9ody5oICovCisJc3RydWN0IGUxMDAwX2h3IGh3 OworCXN0cnVjdCBlMTAwMF9od19zdGF0cyBzdGF0czsKKwlzdHJ1Y3QgZTEwMDBfcGh5X2luZm8g cGh5X2luZm87CisJc3RydWN0IGUxMDAwX3BoeV9zdGF0cyBwaHlfc3RhdHM7CisKKwl1MzIgdGVz dF9pY3I7CisJc3RydWN0IGlnYl9yaW5nIHRlc3RfdHhfcmluZzsKKwlzdHJ1Y3QgaWdiX3Jpbmcg dGVzdF9yeF9yaW5nOworCisJaW50IG1zZ19lbmFibGU7CisJc3RydWN0IG1zaXhfZW50cnkgKm1z aXhfZW50cmllczsKKwl1MzIgZWltc19lbmFibGVfbWFzazsKKwl1MzIgZWltc19vdGhlcjsKKwor CS8qIHRvIG5vdCBtZXNzIHVwIGNhY2hlIGFsaWdubWVudCwgYWx3YXlzIGFkZCB0byB0aGUgYm90 dG9tICovCisJdW5zaWduZWQgbG9uZyBzdGF0ZTsKKwl1bnNpZ25lZCBpbnQgZmxhZ3M7CisJdTMy IGVlcHJvbV93b2w7CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwl1bnNpZ25lZCBpbnQgbHJvX21h eF9hZ2dyOworCXVuc2lnbmVkIGludCBscm9fYWdncmVnYXRlZDsKKwl1bnNpZ25lZCBpbnQgbHJv X2ZsdXNoZWQ7CisJdW5zaWduZWQgaW50IGxyb19ub19kZXNjOworI2VuZGlmCit9OworCisjZGVm aW5lIElHQl9GTEFHX0hBU19NU0kgICAgICAgICAgICgxIDw8IDApCisjZGVmaW5lIElHQl9GTEFH X01TSV9FTkFCTEUgICAgICAgICgxIDw8IDEpCisjZGVmaW5lIElHQl9GTEFHX0hBU19EQ0EgICAg ICAgICAgICgxIDw8IDIpCisjZGVmaW5lIElHQl9GTEFHX0RDQV9FTkFCTEVEICAgICAgICgxIDw8 IDMpCisjZGVmaW5lIElHQl9GTEFHX0lOX05FVFBPTEwgICAgICAgICgxIDw8IDUpCisjZGVmaW5l IElHQl9GTEFHX1FVQURfUE9SVF9BICAgICAgICgxIDw8IDYpCisjZGVmaW5lIElHQl9GTEFHX05F RURfQ1RYX0lEWCAgICAgICgxIDw8IDcpCisKK2VudW0gZTEwMDBfc3RhdGVfdCB7CisJX19JR0Jf VEVTVElORywKKwlfX0lHQl9SRVNFVFRJTkcsCisJX19JR0JfRE9XTgorfTsKKworZW51bSBpZ2Jf Ym9hcmRzIHsKKwlib2FyZF84MjU3NSwKK307CisKK2V4dGVybiBjaGFyIGlnYl9kcml2ZXJfbmFt ZVtdOworZXh0ZXJuIGNoYXIgaWdiX2RyaXZlcl92ZXJzaW9uW107CisKK2V4dGVybiBjaGFyICpp Z2JfZ2V0X2h3X2Rldl9uYW1lKHN0cnVjdCBlMTAwMF9odyAqaHcpOworZXh0ZXJuIGludCBpZ2Jf dXAoc3RydWN0IGlnYl9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgaWdiX2Rvd24oc3RydWN0IGln Yl9hZGFwdGVyICopOworZXh0ZXJuIHZvaWQgaWdiX3JlaW5pdF9sb2NrZWQoc3RydWN0IGlnYl9h ZGFwdGVyICopOworZXh0ZXJuIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsK K2V4dGVybiBpbnQgaWdiX3NldF9zcGRfZHBseChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwgdTE2KTsK K2V4dGVybiBpbnQgaWdiX3NldHVwX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKiwg c3RydWN0IGlnYl9yaW5nICopOworZXh0ZXJuIGludCBpZ2Jfc2V0dXBfcnhfcmVzb3VyY2VzKHN0 cnVjdCBpZ2JfYWRhcHRlciAqLCBzdHJ1Y3QgaWdiX3JpbmcgKik7CitleHRlcm4gdm9pZCBpZ2Jf dXBkYXRlX3N0YXRzKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK2V4dGVybiB2b2lkIGlnYl9zZXRf ZXRodG9vbF9vcHMoc3RydWN0IG5ldF9kZXZpY2UgKik7CisKKyNlbmRpZiAvKiBfSUdCX0hfICov CmRpZmYgLXIgYWY3NDNkMTRhYThjIGRyaXZlcnMvbmV0L2lnYi9pZ2JfY29tcGF0LmgKLS0tIC9k ZXYvbnVsbAlUaHUgSmFuIDAxIDAwOjAwOjAwIDE5NzAgKzAwMDAKKysrIGIvZHJpdmVycy9uZXQv aWdiL2lnYl9jb21wYXQuaAlUaHUgRmViIDEyIDAzOjAyOjM1IDIwMDkgLTA1MDAKQEAgLTAsMCAr MSw1NSBAQAorI2lmbmRlZiBfX0lHQl9DT01QQVRfSF9fCisjZGVmaW5lIF9fSUdCX0NPTVBBVF9I X18KKworI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4K KwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYm9vbDsKKworI2RlZmluZSBFVEhfRkNTX0xFTiAgICAg ICAgICAgICAgIDQKKworc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqdmxhbl9ncm91 cF9nZXRfZGV2aWNlKHN0cnVjdCB2bGFuX2dyb3VwICp2ZywKKwkJCQkJCSAgICAgICBpbnQgdmxh bl9pZCkKK3sKKwlyZXR1cm4gdmctPnZsYW5fZGV2aWNlc1t2bGFuX2lkXTsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIHZsYW5fZ3JvdXBfc2V0X2RldmljZShzdHJ1Y3Qgdmxhbl9ncm91cCAqdmcs IGludCB2bGFuX2lkLAorCQkJCQkgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKK3sKKwl2Zy0+dmxh bl9kZXZpY2VzW3ZsYW5faWRdID0gTlVMTDsKK30KKworLyogZ2VuZXJpYyBib29sZWFuIGNvbXBh dGliaWxpdHkgKi8KKyNkZWZpbmUgdHJ1ZSAxCisjZGVmaW5lIGZhbHNlIDAKKworI2lmbmRlZiBQ Q0lfVkRFVklDRQorI2RlZmluZSBQQ0lfVkRFVklDRSh2ZW4sIGRldikgICAgICAgIFwKKyAgICAg ICAgUENJX1ZFTkRPUl9JRF8jI3ZlbiwgKGRldiksICBcCisgICAgUENJX0FOWV9JRCwgUENJX0FO WV9JRCwgMCwgMAorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgaW50IHBjaV9jaGFubmVsX29mZmxp bmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisgICAgcmV0dXJuIChwZGV2LT5lcnJvcl9zdGF0 ZSAhPSBwY2lfY2hhbm5lbF9pb19ub3JtYWwpOworfQorCisjaWZuZGVmIHJvdW5kX2ppZmZpZXMK KyNkZWZpbmUgcm91bmRfamlmZmllcyh4KSB4CisjZW5kaWYKKworI2RlZmluZSB0Y3BfaGRyKHNr YikgKHNrYi0+aC50aCkKKyNkZWZpbmUgdGNwX2hkcmxlbihza2IpIChza2ItPmgudGgtPmRvZmYg PDwgMikKKyNkZWZpbmUgaXBfaGRyKHNrYikgKHNrYi0+bmguaXBoKQorI2RlZmluZSBpcHY2X2hk cihza2IpIChza2ItPm5oLmlwdjZoKQorI2RlZmluZSBza2JfbmV0d29ya19oZWFkZXIoc2tiKSAo c2tiLT5uaC5yYXcpCisjZGVmaW5lIHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKSAoc2tiLT5o LnJhdyAtIHNrYi0+bmgucmF3KQorI2RlZmluZSBza2JfbmV0d29ya19vZmZzZXQoc2tiKSAoc2ti LT5uaC5yYXcgLSBza2ItPmRhdGEpCisKKyNpZm5kZWYgQ0hFQ0tTVU1fUEFSVElBTAorI2RlZmlu ZSBDSEVDS1NVTV9QQVJUSUFMIENIRUNLU1VNX0hXCisjZGVmaW5lIENIRUNLU1VNX0NPTVBMRVRF IENIRUNLU1VNX0hXCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLXIgYWY3NDNkMTRhYThjIGRyaXZl cnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCi0tLSAvZGV2L251bGwJVGh1IEphbiAwMSAwMDowMDow MCAxOTcwICswMDAwCisrKyBiL2RyaXZlcnMvbmV0L2lnYi9pZ2JfZXRodG9vbC5jCVRodSBGZWIg MTIgMDM6MDI6MTQgMjAwOSAtMDUwMApAQCAtMCwwICsxLDIwMjYgQEAKKy8qKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqCisKKyAgSW50ZWwoUikgR2lnYWJpdCBFdGhlcm5ldCBMaW51eCBkcml2ZXIKKyAg Q29weXJpZ2h0KGMpIDIwMDcgSW50ZWwgQ29ycG9yYXRpb24uCisKKyAgVGhpcyBwcm9ncmFtIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQK KyAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZSwKKyAgdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh cmUgRm91bmRhdGlvbi4KKworICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUCisgIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvcgorICBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UgZm9yCisgIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZyB3aXRoCisg IHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuLAorICA1MSBGcmFua2xpbiBTdCAtIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAy MTEwLTEzMDEgVVNBLgorCisgIFRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlz IGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCisgIHRoZSBmaWxlIGNhbGxlZCAiQ09Q WUlORyIuCisKKyAgQ29udGFjdCBJbmZvcm1hdGlvbjoKKyAgZTEwMDAtZGV2ZWwgTWFpbGluZyBM aXN0IDxlMTAwMC1kZXZlbEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQ+CisgIEludGVsIENvcnBvcmF0 aW9uLCA1MjAwIE4uRS4gRWxhbSBZb3VuZyBQYXJrd2F5LCBIaWxsc2Jvcm8sIE9SIDk3MTI0LTY0 OTcKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZXRodG9vbCBzdXBwb3J0IGZvciBp Z2IgKi8KKworI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRk ZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5o PgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVy Lmg+CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCisjaW5jbHVkZSAiaWdiLmgiCisKK3N0 cnVjdCBpZ2Jfc3RhdHMgeworCWNoYXIgc3RhdF9zdHJpbmdbRVRIX0dTVFJJTkdfTEVOXTsKKwlp bnQgc2l6ZW9mX3N0YXQ7CisJaW50IHN0YXRfb2Zmc2V0OworfTsKKworI2RlZmluZSBJR0JfU1RB VChtKSBGSUVMRF9TSVpFT0Yoc3RydWN0IGlnYl9hZGFwdGVyLCBtKSwgXAorCQkgICAgICBvZmZz ZXRvZihzdHJ1Y3QgaWdiX2FkYXB0ZXIsIG0pCitzdGF0aWMgY29uc3Qgc3RydWN0IGlnYl9zdGF0 cyBpZ2JfZ3N0cmluZ3Nfc3RhdHNbXSA9IHsKKwl7ICJyeF9wYWNrZXRzIiwgSUdCX1NUQVQoc3Rh dHMuZ3ByYykgfSwKKwl7ICJ0eF9wYWNrZXRzIiwgSUdCX1NUQVQoc3RhdHMuZ3B0YykgfSwKKwl7 ICJyeF9ieXRlcyIsIElHQl9TVEFUKHN0YXRzLmdvcmMpIH0sCisJeyAidHhfYnl0ZXMiLCBJR0Jf U1RBVChzdGF0cy5nb3RjKSB9LAorCXsgInJ4X2Jyb2FkY2FzdCIsIElHQl9TVEFUKHN0YXRzLmJw cmMpIH0sCisJeyAidHhfYnJvYWRjYXN0IiwgSUdCX1NUQVQoc3RhdHMuYnB0YykgfSwKKwl7ICJy eF9tdWx0aWNhc3QiLCBJR0JfU1RBVChzdGF0cy5tcHJjKSB9LAorCXsgInR4X211bHRpY2FzdCIs IElHQl9TVEFUKHN0YXRzLm1wdGMpIH0sCisJeyAicnhfZXJyb3JzIiwgSUdCX1NUQVQobmV0X3N0 YXRzLnJ4X2Vycm9ycykgfSwKKwl7ICJ0eF9lcnJvcnMiLCBJR0JfU1RBVChuZXRfc3RhdHMudHhf ZXJyb3JzKSB9LAorCXsgInR4X2Ryb3BwZWQiLCBJR0JfU1RBVChuZXRfc3RhdHMudHhfZHJvcHBl ZCkgfSwKKwl7ICJtdWx0aWNhc3QiLCBJR0JfU1RBVChzdGF0cy5tcHJjKSB9LAorCXsgImNvbGxp c2lvbnMiLCBJR0JfU1RBVChzdGF0cy5jb2xjKSB9LAorCXsgInJ4X2xlbmd0aF9lcnJvcnMiLCBJ R0JfU1RBVChuZXRfc3RhdHMucnhfbGVuZ3RoX2Vycm9ycykgfSwKKwl7ICJyeF9vdmVyX2Vycm9y cyIsIElHQl9TVEFUKG5ldF9zdGF0cy5yeF9vdmVyX2Vycm9ycykgfSwKKwl7ICJyeF9jcmNfZXJy b3JzIiwgSUdCX1NUQVQoc3RhdHMuY3JjZXJycykgfSwKKwl7ICJyeF9mcmFtZV9lcnJvcnMiLCBJ R0JfU1RBVChuZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzKSB9LAorCXsgInJ4X25vX2J1ZmZlcl9j b3VudCIsIElHQl9TVEFUKHN0YXRzLnJuYmMpIH0sCisJeyAicnhfbWlzc2VkX2Vycm9ycyIsIElH Ql9TVEFUKHN0YXRzLm1wYykgfSwKKwl7ICJ0eF9hYm9ydGVkX2Vycm9ycyIsIElHQl9TVEFUKHN0 YXRzLmVjb2wpIH0sCisJeyAidHhfY2Fycmllcl9lcnJvcnMiLCBJR0JfU1RBVChzdGF0cy50bmNy cykgfSwKKwl7ICJ0eF9maWZvX2Vycm9ycyIsIElHQl9TVEFUKG5ldF9zdGF0cy50eF9maWZvX2Vy cm9ycykgfSwKKwl7ICJ0eF9oZWFydGJlYXRfZXJyb3JzIiwgSUdCX1NUQVQobmV0X3N0YXRzLnR4 X2hlYXJ0YmVhdF9lcnJvcnMpIH0sCisJeyAidHhfd2luZG93X2Vycm9ycyIsIElHQl9TVEFUKHN0 YXRzLmxhdGVjb2wpIH0sCisJeyAidHhfYWJvcnRfbGF0ZV9jb2xsIiwgSUdCX1NUQVQoc3RhdHMu bGF0ZWNvbCkgfSwKKwl7ICJ0eF9kZWZlcnJlZF9vayIsIElHQl9TVEFUKHN0YXRzLmRjKSB9LAor CXsgInR4X3NpbmdsZV9jb2xsX29rIiwgSUdCX1NUQVQoc3RhdHMuc2NjKSB9LAorCXsgInR4X211 bHRpX2NvbGxfb2siLCBJR0JfU1RBVChzdGF0cy5tY2MpIH0sCisJeyAidHhfdGltZW91dF9jb3Vu dCIsIElHQl9TVEFUKHR4X3RpbWVvdXRfY291bnQpIH0sCisJeyAidHhfcmVzdGFydF9xdWV1ZSIs IElHQl9TVEFUKHJlc3RhcnRfcXVldWUpIH0sCisJeyAicnhfbG9uZ19sZW5ndGhfZXJyb3JzIiwg SUdCX1NUQVQoc3RhdHMucm9jKSB9LAorCXsgInJ4X3Nob3J0X2xlbmd0aF9lcnJvcnMiLCBJR0Jf U1RBVChzdGF0cy5ydWMpIH0sCisJeyAicnhfYWxpZ25fZXJyb3JzIiwgSUdCX1NUQVQoc3RhdHMu YWxnbmVycmMpIH0sCisJeyAidHhfdGNwX3NlZ19nb29kIiwgSUdCX1NUQVQoc3RhdHMudHNjdGMp IH0sCisJeyAidHhfdGNwX3NlZ19mYWlsZWQiLCBJR0JfU1RBVChzdGF0cy50c2N0ZmMpIH0sCisJ eyAicnhfZmxvd19jb250cm9sX3hvbiIsIElHQl9TVEFUKHN0YXRzLnhvbnJ4YykgfSwKKwl7ICJy eF9mbG93X2NvbnRyb2xfeG9mZiIsIElHQl9TVEFUKHN0YXRzLnhvZmZyeGMpIH0sCisJeyAidHhf Zmxvd19jb250cm9sX3hvbiIsIElHQl9TVEFUKHN0YXRzLnhvbnR4YykgfSwKKwl7ICJ0eF9mbG93 X2NvbnRyb2xfeG9mZiIsIElHQl9TVEFUKHN0YXRzLnhvZmZ0eGMpIH0sCisJeyAicnhfbG9uZ19i eXRlX2NvdW50IiwgSUdCX1NUQVQoc3RhdHMuZ29yYykgfSwKKwl7ICJyeF9jc3VtX29mZmxvYWRf Z29vZCIsIElHQl9TVEFUKGh3X2NzdW1fZ29vZCkgfSwKKwl7ICJyeF9jc3VtX29mZmxvYWRfZXJy b3JzIiwgSUdCX1NUQVQoaHdfY3N1bV9lcnIpIH0sCisJeyAicnhfaGVhZGVyX3NwbGl0IiwgSUdC X1NUQVQocnhfaGRyX3NwbGl0KSB9LAorCXsgImFsbG9jX3J4X2J1ZmZfZmFpbGVkIiwgSUdCX1NU QVQoYWxsb2NfcnhfYnVmZl9mYWlsZWQpIH0sCisJeyAidHhfc21idXMiLCBJR0JfU1RBVChzdGF0 cy5tZ3B0YykgfSwKKwl7ICJyeF9zbWJ1cyIsIElHQl9TVEFUKHN0YXRzLm1ncHJjKSB9LAorCXsg ImRyb3BwZWRfc21idXMiLCBJR0JfU1RBVChzdGF0cy5tZ3BkYykgfSwKKyNpZmRlZiBDT05GSUdf SUdCX0xSTworCXsgImxyb19hZ2dyZWdhdGVkIiwgSUdCX1NUQVQobHJvX2FnZ3JlZ2F0ZWQpIH0s CisJeyAibHJvX2ZsdXNoZWQiLCBJR0JfU1RBVChscm9fZmx1c2hlZCkgfSwKKwl7ICJscm9fbm9f ZGVzYyIsIElHQl9TVEFUKGxyb19ub19kZXNjKSB9LAorI2VuZGlmCit9OworCisjZGVmaW5lIElH Ql9RVUVVRV9TVEFUU19MRU4gXAorCSgoKCgoKHN0cnVjdCBpZ2JfYWRhcHRlciAqKW5ldGRldi0+ cHJpdiktPm51bV9yeF9xdWV1ZXMgPiAxKSA/IFwKKwkgICgoc3RydWN0IGlnYl9hZGFwdGVyICop bmV0ZGV2LT5wcml2KS0+bnVtX3J4X3F1ZXVlcyA6IDApICsgXAorCSAoKCgoKHN0cnVjdCBpZ2Jf YWRhcHRlciAqKW5ldGRldi0+cHJpdiktPm51bV90eF9xdWV1ZXMgPiAxKSA/IFwKKwkgICgoc3Ry dWN0IGlnYl9hZGFwdGVyICopbmV0ZGV2LT5wcml2KS0+bnVtX3R4X3F1ZXVlcyA6IDApKSkgKiBc CisJKHNpemVvZihzdHJ1Y3QgaWdiX3F1ZXVlX3N0YXRzKSAvIHNpemVvZih1NjQpKSkKKyNkZWZp bmUgSUdCX0dMT0JBTF9TVEFUU19MRU4JXAorCXNpemVvZihpZ2JfZ3N0cmluZ3Nfc3RhdHMpIC8g c2l6ZW9mKHN0cnVjdCBpZ2Jfc3RhdHMpCisjZGVmaW5lIElHQl9TVEFUU19MRU4gKElHQl9HTE9C QUxfU1RBVFNfTEVOICsgSUdCX1FVRVVFX1NUQVRTX0xFTikKK3N0YXRpYyBjb25zdCBjaGFyIGln Yl9nc3RyaW5nc190ZXN0W11bRVRIX0dTVFJJTkdfTEVOXSA9IHsKKwkiUmVnaXN0ZXIgdGVzdCAg KG9mZmxpbmUpIiwgIkVlcHJvbSB0ZXN0ICAgIChvZmZsaW5lKSIsCisJIkludGVycnVwdCB0ZXN0 IChvZmZsaW5lKSIsICJMb29wYmFjayB0ZXN0ICAob2ZmbGluZSkiLAorCSJMaW5rIHRlc3QgICAo b24vb2ZmbGluZSkiCit9OworI2RlZmluZSBJR0JfVEVTVF9MRU4gc2l6ZW9mKGlnYl9nc3RyaW5n c190ZXN0KSAvIEVUSF9HU1RSSU5HX0xFTgorCitzdGF0aWMgaW50IGlnYl9nZXRfc2V0dGluZ3Mo c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfY21kICplY21kKQorewor CXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3Ry dWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChody0+cGh5Lm1lZGlhX3R5 cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKworCQllY21kLT5zdXBwb3J0ZWQgPSAo U1VQUE9SVEVEXzEwYmFzZVRfSGFsZiB8CisJCQkJICAgU1VQUE9SVEVEXzEwYmFzZVRfRnVsbCB8 CisJCQkJICAgU1VQUE9SVEVEXzEwMGJhc2VUX0hhbGYgfAorCQkJCSAgIFNVUFBPUlRFRF8xMDBi YXNlVF9GdWxsIHwKKwkJCQkgICBTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGx8CisJCQkJICAgU1VQ UE9SVEVEX0F1dG9uZWcgfAorCQkJCSAgIFNVUFBPUlRFRF9UUCk7CisJCWVjbWQtPmFkdmVydGlz aW5nID0gQURWRVJUSVNFRF9UUDsKKworCQlpZiAoaHctPm1hYy5hdXRvbmVnID09IDEpIHsKKwkJ CWVjbWQtPmFkdmVydGlzaW5nIHw9IEFEVkVSVElTRURfQXV0b25lZzsKKwkJCS8qIHRoZSBlMTAw MCBhdXRvbmVnIHNlZW1zIHRvIG1hdGNoIGV0aHRvb2wgbmljZWx5ICovCisJCQllY21kLT5hZHZl cnRpc2luZyB8PSBody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwkJfQorCisJCWVjbWQtPnBv cnQgPSBQT1JUX1RQOworCQllY21kLT5waHlfYWRkcmVzcyA9IGh3LT5waHkuYWRkcjsKKwl9IGVs c2UgeworCQllY21kLT5zdXBwb3J0ZWQgICA9IChTVVBQT1JURURfMTAwMGJhc2VUX0Z1bGwgfAor CQkJCSAgICAgU1VQUE9SVEVEX0ZJQlJFIHwKKwkJCQkgICAgIFNVUFBPUlRFRF9BdXRvbmVnKTsK KworCQllY21kLT5hZHZlcnRpc2luZyA9IChBRFZFUlRJU0VEXzEwMDBiYXNlVF9GdWxsIHwKKwkJ CQkgICAgIEFEVkVSVElTRURfRklCUkUgfAorCQkJCSAgICAgQURWRVJUSVNFRF9BdXRvbmVnKTsK KworCQllY21kLT5wb3J0ID0gUE9SVF9GSUJSRTsKKwl9CisKKwllY21kLT50cmFuc2NlaXZlciA9 IFhDVlJfSU5URVJOQUw7CisKKwlpZiAocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVT X0xVKSB7CisKKwkJYWRhcHRlci0+aHcubWFjLm9wcy5nZXRfc3BlZWRfYW5kX2R1cGxleChodywK KwkJCQkJJmFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJCSZhZGFwdGVyLT5saW5rX2R1cGxleCk7 CisJCWVjbWQtPnNwZWVkID0gYWRhcHRlci0+bGlua19zcGVlZDsKKworCQkvKiB1bmZvcnR1bmF0 ZWx5IEZVTExfRFVQTEVYICE9IERVUExFWF9GVUxMCisJCSAqICAgICAgICAgIGFuZCBIQUxGX0RV UExFWCAhPSBEVVBMRVhfSEFMRiAqLworCisJCWlmIChhZGFwdGVyLT5saW5rX2R1cGxleCA9PSBG VUxMX0RVUExFWCkKKwkJCWVjbWQtPmR1cGxleCA9IERVUExFWF9GVUxMOworCQllbHNlCisJCQll Y21kLT5kdXBsZXggPSBEVVBMRVhfSEFMRjsKKwl9IGVsc2UgeworCQllY21kLT5zcGVlZCA9IC0x OworCQllY21kLT5kdXBsZXggPSAtMTsKKwl9CisKKwllY21kLT5hdXRvbmVnID0gKChody0+cGh5 Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlcikgfHwKKwkJCSBody0+bWFjLmF1 dG9uZWcpID8gQVVUT05FR19FTkFCTEUgOiBBVVRPTkVHX0RJU0FCTEU7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgaWdiX3NldF9zZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2 LCBzdHJ1Y3QgZXRodG9vbF9jbWQgKmVjbWQpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFw dGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0 ZXItPmh3OworCisJLyogV2hlbiBTb0wvSURFUiBzZXNzaW9ucyBhcmUgYWN0aXZlLCBhdXRvbmVn L3NwZWVkL2R1cGxleAorCSAqIGNhbm5vdCBiZSBjaGFuZ2VkICovCisJaWYgKGlnYl9jaGVja19y ZXNldF9ibG9jayhodykpIHsKKwkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAiQ2Fubm90 IGNoYW5nZSBsaW5rICIKKwkJCSJjaGFyYWN0ZXJpc3RpY3Mgd2hlbiBTb0wvSURFUiBpcyBhY3Rp dmUuXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJd2hpbGUgKHRlc3RfYW5kX3NldF9i aXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQltc2xlZXAoMSk7CisKKwlp ZiAoZWNtZC0+YXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlody0+bWFjLmF1dG9uZWcg PSAxOworCQlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIp CisJCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IEFEVkVSVElTRURfMTAwMGJhc2VUX0Z1 bGwgfAorCQkJCQkJICAgICBBRFZFUlRJU0VEX0ZJQlJFIHwKKwkJCQkJCSAgICAgQURWRVJUSVNF RF9BdXRvbmVnOworCQllbHNlCisJCQlody0+cGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZCA9IGVjbWQt PmFkdmVydGlzaW5nIHwKKwkJCQkJCSAgICAgQURWRVJUSVNFRF9UUCB8CisJCQkJCQkgICAgIEFE VkVSVElTRURfQXV0b25lZzsKKwkJZWNtZC0+YWR2ZXJ0aXNpbmcgPSBody0+cGh5LmF1dG9uZWdf YWR2ZXJ0aXNlZDsKKwl9IGVsc2UKKwkJaWYgKGlnYl9zZXRfc3BkX2RwbHgoYWRhcHRlciwgZWNt ZC0+c3BlZWQgKyBlY21kLT5kdXBsZXgpKSB7CisJCQljbGVhcl9iaXQoX19JR0JfUkVTRVRUSU5H LCAmYWRhcHRlci0+c3RhdGUpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCS8qIHJlc2V0 IHRoZSBsaW5rICovCisKKwlpZiAobmV0aWZfcnVubmluZyhhZGFwdGVyLT5uZXRkZXYpKSB7CisJ CWlnYl9kb3duKGFkYXB0ZXIpOworCQlpZ2JfdXAoYWRhcHRlcik7CisJfSBlbHNlCisJCWlnYl9y ZXNldChhZGFwdGVyKTsKKworCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5z dGF0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9nZXRfcGF1c2VwYXJhbShz dHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNl cGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9w cml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCXBh dXNlLT5hdXRvbmVnID0KKwkJKGFkYXB0ZXItPmZjX2F1dG9uZWcgPyBBVVRPTkVHX0VOQUJMRSA6 IEFVVE9ORUdfRElTQUJMRSk7CisKKwlpZiAoaHctPmZjLnR5cGUgPT0gZTEwMDBfZmNfcnhfcGF1 c2UpCisJCXBhdXNlLT5yeF9wYXVzZSA9IDE7CisJZWxzZSBpZiAoaHctPmZjLnR5cGUgPT0gZTEw MDBfZmNfdHhfcGF1c2UpCisJCXBhdXNlLT50eF9wYXVzZSA9IDE7CisJZWxzZSBpZiAoaHctPmZj LnR5cGUgPT0gZTEwMDBfZmNfZnVsbCkgeworCQlwYXVzZS0+cnhfcGF1c2UgPSAxOworCQlwYXVz ZS0+dHhfcGF1c2UgPSAxOworCX0KK30KKworc3RhdGljIGludCBpZ2Jfc2V0X3BhdXNlcGFyYW0o c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0cnVjdCBldGh0b29sX3BhdXNl cGFyYW0gKnBhdXNlKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9w cml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQg cmV0dmFsID0gMDsKKworCWFkYXB0ZXItPmZjX2F1dG9uZWcgPSBwYXVzZS0+YXV0b25lZzsKKwor CXdoaWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRl KSkKKwkJbXNsZWVwKDEpOworCisJaWYgKHBhdXNlLT5yeF9wYXVzZSAmJiBwYXVzZS0+dHhfcGF1 c2UpCisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfZnVsbDsKKwllbHNlIGlmIChwYXVzZS0+cnhf cGF1c2UgJiYgIXBhdXNlLT50eF9wYXVzZSkKKwkJaHctPmZjLnR5cGUgPSBlMTAwMF9mY19yeF9w YXVzZTsKKwllbHNlIGlmICghcGF1c2UtPnJ4X3BhdXNlICYmIHBhdXNlLT50eF9wYXVzZSkKKwkJ aHctPmZjLnR5cGUgPSBlMTAwMF9mY190eF9wYXVzZTsKKwllbHNlIGlmICghcGF1c2UtPnJ4X3Bh dXNlICYmICFwYXVzZS0+dHhfcGF1c2UpCisJCWh3LT5mYy50eXBlID0gZTEwMDBfZmNfbm9uZTsK KworCWh3LT5mYy5vcmlnaW5hbF90eXBlID0gaHctPmZjLnR5cGU7CisKKwlpZiAoYWRhcHRlci0+ ZmNfYXV0b25lZyA9PSBBVVRPTkVHX0VOQUJMRSkgeworCQlpZiAobmV0aWZfcnVubmluZyhhZGFw dGVyLT5uZXRkZXYpKSB7CisJCQlpZ2JfZG93bihhZGFwdGVyKTsKKwkJCWlnYl91cChhZGFwdGVy KTsKKwkJfSBlbHNlCisJCQlpZ2JfcmVzZXQoYWRhcHRlcik7CisJfSBlbHNlCisJCXJldHZhbCA9 ICgoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfZmliZXIpID8KKwkJCSAg aWdiX3NldHVwX2xpbmsoaHcpIDogaWdiX2ZvcmNlX21hY19mYyhodykpOworCisJY2xlYXJfYml0 KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwlyZXR1cm4gcmV0dmFsOworfQor CitzdGF0aWMgdTMyIGlnYl9nZXRfcnhfY3N1bShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQor eworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJ cmV0dXJuIGFkYXB0ZXItPnJ4X2NzdW07Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF9yeF9jc3Vt KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVjdCBpZ2JfYWRh cHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJYWRhcHRlci0+cnhfY3N1bSA9 IGRhdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBpZ2JfZ2V0X3R4X2NzdW0oc3Ry dWN0IG5ldF9kZXZpY2UgKm5ldGRldikKK3sKKwlyZXR1cm4gKG5ldGRldi0+ZmVhdHVyZXMgJiBO RVRJRl9GX0hXX0NTVU0pICE9IDA7Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF90eF9jc3VtKHN0 cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCWlmIChkYXRhKQorCQluZXRk ZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfSFdfQ1NVTTsKKwllbHNlCisJCW5ldGRldi0+ZmVhdHVy ZXMgJj0gfk5FVElGX0ZfSFdfQ1NVTTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGln Yl9zZXRfdHNvKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUzMiBkYXRhKQoreworCXN0cnVj dCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwlpZiAoZGF0 YSkKKwkJbmV0ZGV2LT5mZWF0dXJlcyB8PSBORVRJRl9GX1RTTzsKKwllbHNlCisJCW5ldGRldi0+ ZmVhdHVyZXMgJj0gfk5FVElGX0ZfVFNPOworCisJaWYgKGRhdGEpCisJCW5ldGRldi0+ZmVhdHVy ZXMgfD0gTkVUSUZfRl9UU082OworCWVsc2UKKwkJbmV0ZGV2LT5mZWF0dXJlcyAmPSB+TkVUSUZf Rl9UU082OworCisJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIlRTTyBpcyAlc1xuIiwK KwkJIGRhdGEgPyAiRW5hYmxlZCIgOiAiRGlzYWJsZWQiKTsKKwlyZXR1cm4gMDsKK30KKworc3Rh dGljIHUzMiBpZ2JfZ2V0X21zZ2xldmVsKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJ c3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlyZXR1 cm4gYWRhcHRlci0+bXNnX2VuYWJsZTsKK30KKworc3RhdGljIHZvaWQgaWdiX3NldF9tc2dsZXZl bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCB1MzIgZGF0YSkKK3sKKwlzdHJ1Y3QgaWdiX2Fk YXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCWFkYXB0ZXItPm1zZ19lbmFi bGUgPSBkYXRhOworfQorCitzdGF0aWMgaW50IGlnYl9nZXRfcmVnc19sZW4oc3RydWN0IG5ldF9k ZXZpY2UgKm5ldGRldikKK3sKKyNkZWZpbmUgSUdCX1JFR1NfTEVOIDU1MQorCXJldHVybiBJR0Jf UkVHU19MRU4gKiBzaXplb2YodTMyKTsKK30KKworc3RhdGljIHZvaWQgaWdiX2dldF9yZWdzKHN0 cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCisJCQkgc3RydWN0IGV0aHRvb2xfcmVncyAqcmVncywg dm9pZCAqcCkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihu ZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyICpyZWdz X2J1ZmYgPSBwOworCXU4IGk7CisKKwltZW1zZXQocCwgMCwgSUdCX1JFR1NfTEVOICogc2l6ZW9m KHUzMikpOworCisJcmVncy0+dmVyc2lvbiA9ICgxIDw8IDI0KSB8IChody0+cmV2aXNpb25faWQg PDwgMTYpIHwgaHctPmRldmljZV9pZDsKKworCS8qIEdlbmVyYWwgUmVnaXN0ZXJzICovCisJcmVn c19idWZmWzBdID0gcmQzMihFMTAwMF9DVFJMKTsKKwlyZWdzX2J1ZmZbMV0gPSByZDMyKEUxMDAw X1NUQVRVUyk7CisJcmVnc19idWZmWzJdID0gcmQzMihFMTAwMF9DVFJMX0VYVCk7CisJcmVnc19i dWZmWzNdID0gcmQzMihFMTAwMF9NRElDKTsKKwlyZWdzX2J1ZmZbNF0gPSByZDMyKEUxMDAwX1ND VEwpOworCXJlZ3NfYnVmZls1XSA9IHJkMzIoRTEwMDBfQ09OTlNXKTsKKwlyZWdzX2J1ZmZbNl0g PSByZDMyKEUxMDAwX1ZFVCk7CisJcmVnc19idWZmWzddID0gcmQzMihFMTAwMF9MRURDVEwpOwor CXJlZ3NfYnVmZls4XSA9IHJkMzIoRTEwMDBfUEJBKTsKKwlyZWdzX2J1ZmZbOV0gPSByZDMyKEUx MDAwX1BCUyk7CisJcmVnc19idWZmWzEwXSA9IHJkMzIoRTEwMDBfRlJUSU1FUik7CisJcmVnc19i dWZmWzExXSA9IHJkMzIoRTEwMDBfVENQVElNRVIpOworCisJLyogTlZNIFJlZ2lzdGVyICovCisJ cmVnc19idWZmWzEyXSA9IHJkMzIoRTEwMDBfRUVDRCk7CisKKwkvKiBJbnRlcnJ1cHQgKi8KKwly ZWdzX2J1ZmZbMTNdID0gcmQzMihFMTAwMF9FSUNSKTsKKwlyZWdzX2J1ZmZbMTRdID0gcmQzMihF MTAwMF9FSUNTKTsKKwlyZWdzX2J1ZmZbMTVdID0gcmQzMihFMTAwMF9FSU1TKTsKKwlyZWdzX2J1 ZmZbMTZdID0gcmQzMihFMTAwMF9FSU1DKTsKKwlyZWdzX2J1ZmZbMTddID0gcmQzMihFMTAwMF9F SUFDKTsKKwlyZWdzX2J1ZmZbMThdID0gcmQzMihFMTAwMF9FSUFNKTsKKwlyZWdzX2J1ZmZbMTld ID0gcmQzMihFMTAwMF9JQ1IpOworCXJlZ3NfYnVmZlsyMF0gPSByZDMyKEUxMDAwX0lDUyk7CisJ cmVnc19idWZmWzIxXSA9IHJkMzIoRTEwMDBfSU1TKTsKKwlyZWdzX2J1ZmZbMjJdID0gcmQzMihF MTAwMF9JTUMpOworCXJlZ3NfYnVmZlsyM10gPSByZDMyKEUxMDAwX0lBQyk7CisJcmVnc19idWZm WzI0XSA9IHJkMzIoRTEwMDBfSUFNKTsKKwlyZWdzX2J1ZmZbMjVdID0gcmQzMihFMTAwMF9JTUlS VlApOworCisJLyogRmxvdyBDb250cm9sICovCisJcmVnc19idWZmWzI2XSA9IHJkMzIoRTEwMDBf RkNBTCk7CisJcmVnc19idWZmWzI3XSA9IHJkMzIoRTEwMDBfRkNBSCk7CisJcmVnc19idWZmWzI4 XSA9IHJkMzIoRTEwMDBfRkNUVFYpOworCXJlZ3NfYnVmZlsyOV0gPSByZDMyKEUxMDAwX0ZDUlRM KTsKKwlyZWdzX2J1ZmZbMzBdID0gcmQzMihFMTAwMF9GQ1JUSCk7CisJcmVnc19idWZmWzMxXSA9 IHJkMzIoRTEwMDBfRkNSVFYpOworCisJLyogUmVjZWl2ZSAqLworCXJlZ3NfYnVmZlszMl0gPSBy ZDMyKEUxMDAwX1JDVEwpOworCXJlZ3NfYnVmZlszM10gPSByZDMyKEUxMDAwX1JYQ1NVTSk7CisJ cmVnc19idWZmWzM0XSA9IHJkMzIoRTEwMDBfUkxQTUwpOworCXJlZ3NfYnVmZlszNV0gPSByZDMy KEUxMDAwX1JGQ1RMKTsKKwlyZWdzX2J1ZmZbMzZdID0gcmQzMihFMTAwMF9NUlFDKTsKKwlyZWdz X2J1ZmZbMzddID0gcmQzMihFMTAwMF9WTURfQ1RMKTsKKworCS8qIFRyYW5zbWl0ICovCisJcmVn c19idWZmWzM4XSA9IHJkMzIoRTEwMDBfVENUTCk7CisJcmVnc19idWZmWzM5XSA9IHJkMzIoRTEw MDBfVENUTF9FWFQpOworCXJlZ3NfYnVmZls0MF0gPSByZDMyKEUxMDAwX1RJUEcpOworCXJlZ3Nf YnVmZls0MV0gPSByZDMyKEUxMDAwX0RUWENUTCk7CisKKwkvKiBXYWtlIFVwICovCisJcmVnc19i dWZmWzQyXSA9IHJkMzIoRTEwMDBfV1VDKTsKKwlyZWdzX2J1ZmZbNDNdID0gcmQzMihFMTAwMF9X VUZDKTsKKwlyZWdzX2J1ZmZbNDRdID0gcmQzMihFMTAwMF9XVVMpOworCXJlZ3NfYnVmZls0NV0g PSByZDMyKEUxMDAwX0lQQVYpOworCXJlZ3NfYnVmZls0Nl0gPSByZDMyKEUxMDAwX1dVUEwpOwor CisJLyogTUFDICovCisJcmVnc19idWZmWzQ3XSA9IHJkMzIoRTEwMDBfUENTX0NGRzApOworCXJl Z3NfYnVmZls0OF0gPSByZDMyKEUxMDAwX1BDU19MQ1RMKTsKKwlyZWdzX2J1ZmZbNDldID0gcmQz MihFMTAwMF9QQ1NfTFNUQVQpOworCXJlZ3NfYnVmZls1MF0gPSByZDMyKEUxMDAwX1BDU19BTkFE Vik7CisJcmVnc19idWZmWzUxXSA9IHJkMzIoRTEwMDBfUENTX0xQQUIpOworCXJlZ3NfYnVmZls1 Ml0gPSByZDMyKEUxMDAwX1BDU19OUFRYKTsKKwlyZWdzX2J1ZmZbNTNdID0gcmQzMihFMTAwMF9Q Q1NfTFBBQk5QKTsKKworCS8qIFN0YXRpc3RpY3MgKi8KKwlyZWdzX2J1ZmZbNTRdID0gYWRhcHRl ci0+c3RhdHMuY3JjZXJyczsKKwlyZWdzX2J1ZmZbNTVdID0gYWRhcHRlci0+c3RhdHMuYWxnbmVy cmM7CisJcmVnc19idWZmWzU2XSA9IGFkYXB0ZXItPnN0YXRzLnN5bWVycnM7CisJcmVnc19idWZm WzU3XSA9IGFkYXB0ZXItPnN0YXRzLnJ4ZXJyYzsKKwlyZWdzX2J1ZmZbNThdID0gYWRhcHRlci0+ c3RhdHMubXBjOworCXJlZ3NfYnVmZls1OV0gPSBhZGFwdGVyLT5zdGF0cy5zY2M7CisJcmVnc19i dWZmWzYwXSA9IGFkYXB0ZXItPnN0YXRzLmVjb2w7CisJcmVnc19idWZmWzYxXSA9IGFkYXB0ZXIt PnN0YXRzLm1jYzsKKwlyZWdzX2J1ZmZbNjJdID0gYWRhcHRlci0+c3RhdHMubGF0ZWNvbDsKKwly ZWdzX2J1ZmZbNjNdID0gYWRhcHRlci0+c3RhdHMuY29sYzsKKwlyZWdzX2J1ZmZbNjRdID0gYWRh cHRlci0+c3RhdHMuZGM7CisJcmVnc19idWZmWzY1XSA9IGFkYXB0ZXItPnN0YXRzLnRuY3JzOwor CXJlZ3NfYnVmZls2Nl0gPSBhZGFwdGVyLT5zdGF0cy5zZWM7CisJcmVnc19idWZmWzY3XSA9IGFk YXB0ZXItPnN0YXRzLmh0ZHBtYzsKKwlyZWdzX2J1ZmZbNjhdID0gYWRhcHRlci0+c3RhdHMucmxl YzsKKwlyZWdzX2J1ZmZbNjldID0gYWRhcHRlci0+c3RhdHMueG9ucnhjOworCXJlZ3NfYnVmZls3 MF0gPSBhZGFwdGVyLT5zdGF0cy54b250eGM7CisJcmVnc19idWZmWzcxXSA9IGFkYXB0ZXItPnN0 YXRzLnhvZmZyeGM7CisJcmVnc19idWZmWzcyXSA9IGFkYXB0ZXItPnN0YXRzLnhvZmZ0eGM7CisJ cmVnc19idWZmWzczXSA9IGFkYXB0ZXItPnN0YXRzLmZjcnVjOworCXJlZ3NfYnVmZls3NF0gPSBh ZGFwdGVyLT5zdGF0cy5wcmM2NDsKKwlyZWdzX2J1ZmZbNzVdID0gYWRhcHRlci0+c3RhdHMucHJj MTI3OworCXJlZ3NfYnVmZls3Nl0gPSBhZGFwdGVyLT5zdGF0cy5wcmMyNTU7CisJcmVnc19idWZm Wzc3XSA9IGFkYXB0ZXItPnN0YXRzLnByYzUxMTsKKwlyZWdzX2J1ZmZbNzhdID0gYWRhcHRlci0+ c3RhdHMucHJjMTAyMzsKKwlyZWdzX2J1ZmZbNzldID0gYWRhcHRlci0+c3RhdHMucHJjMTUyMjsK KwlyZWdzX2J1ZmZbODBdID0gYWRhcHRlci0+c3RhdHMuZ3ByYzsKKwlyZWdzX2J1ZmZbODFdID0g YWRhcHRlci0+c3RhdHMuYnByYzsKKwlyZWdzX2J1ZmZbODJdID0gYWRhcHRlci0+c3RhdHMubXBy YzsKKwlyZWdzX2J1ZmZbODNdID0gYWRhcHRlci0+c3RhdHMuZ3B0YzsKKwlyZWdzX2J1ZmZbODRd ID0gYWRhcHRlci0+c3RhdHMuZ29yYzsKKwlyZWdzX2J1ZmZbODZdID0gYWRhcHRlci0+c3RhdHMu Z290YzsKKwlyZWdzX2J1ZmZbODhdID0gYWRhcHRlci0+c3RhdHMucm5iYzsKKwlyZWdzX2J1ZmZb ODldID0gYWRhcHRlci0+c3RhdHMucnVjOworCXJlZ3NfYnVmZls5MF0gPSBhZGFwdGVyLT5zdGF0 cy5yZmM7CisJcmVnc19idWZmWzkxXSA9IGFkYXB0ZXItPnN0YXRzLnJvYzsKKwlyZWdzX2J1ZmZb OTJdID0gYWRhcHRlci0+c3RhdHMucmpjOworCXJlZ3NfYnVmZls5M10gPSBhZGFwdGVyLT5zdGF0 cy5tZ3ByYzsKKwlyZWdzX2J1ZmZbOTRdID0gYWRhcHRlci0+c3RhdHMubWdwZGM7CisJcmVnc19i dWZmWzk1XSA9IGFkYXB0ZXItPnN0YXRzLm1ncHRjOworCXJlZ3NfYnVmZls5Nl0gPSBhZGFwdGVy LT5zdGF0cy50b3I7CisJcmVnc19idWZmWzk4XSA9IGFkYXB0ZXItPnN0YXRzLnRvdDsKKwlyZWdz X2J1ZmZbMTAwXSA9IGFkYXB0ZXItPnN0YXRzLnRwcjsKKwlyZWdzX2J1ZmZbMTAxXSA9IGFkYXB0 ZXItPnN0YXRzLnRwdDsKKwlyZWdzX2J1ZmZbMTAyXSA9IGFkYXB0ZXItPnN0YXRzLnB0YzY0Owor CXJlZ3NfYnVmZlsxMDNdID0gYWRhcHRlci0+c3RhdHMucHRjMTI3OworCXJlZ3NfYnVmZlsxMDRd ID0gYWRhcHRlci0+c3RhdHMucHRjMjU1OworCXJlZ3NfYnVmZlsxMDVdID0gYWRhcHRlci0+c3Rh dHMucHRjNTExOworCXJlZ3NfYnVmZlsxMDZdID0gYWRhcHRlci0+c3RhdHMucHRjMTAyMzsKKwly ZWdzX2J1ZmZbMTA3XSA9IGFkYXB0ZXItPnN0YXRzLnB0YzE1MjI7CisJcmVnc19idWZmWzEwOF0g PSBhZGFwdGVyLT5zdGF0cy5tcHRjOworCXJlZ3NfYnVmZlsxMDldID0gYWRhcHRlci0+c3RhdHMu YnB0YzsKKwlyZWdzX2J1ZmZbMTEwXSA9IGFkYXB0ZXItPnN0YXRzLnRzY3RjOworCXJlZ3NfYnVm ZlsxMTFdID0gYWRhcHRlci0+c3RhdHMuaWFjOworCXJlZ3NfYnVmZlsxMTJdID0gYWRhcHRlci0+ c3RhdHMucnB0aGM7CisJcmVnc19idWZmWzExM10gPSBhZGFwdGVyLT5zdGF0cy5oZ3B0YzsKKwly ZWdzX2J1ZmZbMTE0XSA9IGFkYXB0ZXItPnN0YXRzLmhnb3JjOworCXJlZ3NfYnVmZlsxMTZdID0g YWRhcHRlci0+c3RhdHMuaGdvdGM7CisJcmVnc19idWZmWzExOF0gPSBhZGFwdGVyLT5zdGF0cy5s ZW5lcnJzOworCXJlZ3NfYnVmZlsxMTldID0gYWRhcHRlci0+c3RhdHMuc2N2cGM7CisJcmVnc19i dWZmWzEyMF0gPSBhZGFwdGVyLT5zdGF0cy5ocm1wYzsKKworCS8qIFRoZXNlIHNob3VsZCBwcm9i YWJseSBiZSBhZGRlZCB0byBlMTAwMF9yZWdzLmggaW5zdGVhZCAqLworCSNkZWZpbmUgRTEwMDBf UFNSVFlQRV9SRUcoX2kpICgweDA1NDgwICsgKChfaSkgKiA0KSkKKwkjZGVmaW5lIEUxMDAwX1JB TChfaSkgICAgICAgICAoMHgwNTQwMCArICgoX2kpICogOCkpCisJI2RlZmluZSBFMTAwMF9SQUgo X2kpICAgICAgICAgKDB4MDU0MDQgKyAoKF9pKSAqIDgpKQorCSNkZWZpbmUgRTEwMDBfSVA0QVRf UkVHKF9pKSAgICgweDA1ODQwICsgKChfaSkgKiA4KSkKKwkjZGVmaW5lIEUxMDAwX0lQNkFUX1JF RyhfaSkgICAoMHgwNTg4MCArICgoX2kpICogNCkpCisJI2RlZmluZSBFMTAwMF9XVVBNX1JFRyhf aSkgICAgKDB4MDVBMDAgKyAoKF9pKSAqIDQpKQorCSNkZWZpbmUgRTEwMDBfRkZNVF9SRUcoX2kp ICAgICgweDA5MDAwICsgKChfaSkgKiA4KSkKKwkjZGVmaW5lIEUxMDAwX0ZGVlRfUkVHKF9pKSAg ICAoMHgwOTgwMCArICgoX2kpICogOCkpCisJI2RlZmluZSBFMTAwMF9GRkxUX1JFRyhfaSkgICAg KDB4MDVGMDAgKyAoKF9pKSAqIDgpKQorCisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVn c19idWZmWzEyMSArIGldID0gcmQzMihFMTAwMF9TUlJDVEwoaSkpOworCWZvciAoaSA9IDA7IGkg PCA0OyBpKyspCisJCXJlZ3NfYnVmZlsxMjUgKyBpXSA9IHJkMzIoRTEwMDBfUFNSVFlQRV9SRUco aSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVmZlsxMjkgKyBpXSA9IHJk MzIoRTEwMDBfUkRCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVm ZlsxMzMgKyBpXSA9IHJkMzIoRTEwMDBfUkRCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBp KyspCisJCXJlZ3NfYnVmZlsxMzcgKyBpXSA9IHJkMzIoRTEwMDBfUkRMRU4oaSkpOworCWZvciAo aSA9IDA7IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVmZlsxNDEgKyBpXSA9IHJkMzIoRTEwMDBfUkRI KGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlyZWdzX2J1ZmZbMTQ1ICsgaV0gPSBy ZDMyKEUxMDAwX1JEVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVnc19idWZm WzE0OSArIGldID0gcmQzMihFMTAwMF9SWERDVEwoaSkpOworCisJZm9yIChpID0gMDsgaSA8IDEw OyBpKyspCisJCXJlZ3NfYnVmZlsxNTMgKyBpXSA9IHJkMzIoRTEwMDBfRUlUUihpKSk7CisJZm9y IChpID0gMDsgaSA8IDg7IGkrKykKKwkJcmVnc19idWZmWzE2MyArIGldID0gcmQzMihFMTAwMF9J TUlSKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQorCQlyZWdzX2J1ZmZbMTcxICsgaV0g PSByZDMyKEUxMDAwX0lNSVJFWFQoaSkpOworCWZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKQorCQly ZWdzX2J1ZmZbMTc5ICsgaV0gPSByZDMyKEUxMDAwX1JBTChpKSk7CisJZm9yIChpID0gMDsgaSA8 IDE2OyBpKyspCisJCXJlZ3NfYnVmZlsxOTUgKyBpXSA9IHJkMzIoRTEwMDBfUkFIKGkpKTsKKwor CWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVmZlsyMTEgKyBpXSA9IHJkMzIoRTEw MDBfVERCQUwoaSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVmZlsyMTUg KyBpXSA9IHJkMzIoRTEwMDBfVERCQUgoaSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJ CXJlZ3NfYnVmZlsyMTkgKyBpXSA9IHJkMzIoRTEwMDBfVERMRU4oaSkpOworCWZvciAoaSA9IDA7 IGkgPCA0OyBpKyspCisJCXJlZ3NfYnVmZlsyMjMgKyBpXSA9IHJkMzIoRTEwMDBfVERIKGkpKTsK Kwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlyZWdzX2J1ZmZbMjI3ICsgaV0gPSByZDMyKEUx MDAwX1REVChpKSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVnc19idWZmWzIzMSAr IGldID0gcmQzMihFMTAwMF9UWERDVEwoaSkpOworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJ CXJlZ3NfYnVmZlsyMzUgKyBpXSA9IHJkMzIoRTEwMDBfVERXQkFMKGkpKTsKKwlmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKQorCQlyZWdzX2J1ZmZbMjM5ICsgaV0gPSByZDMyKEUxMDAwX1REV0JBSChp KSk7CisJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykKKwkJcmVnc19idWZmWzI0MyArIGldID0gcmQz MihFMTAwMF9EQ0FfVFhDVFJMKGkpKTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisJCXJl Z3NfYnVmZlsyNDcgKyBpXSA9IHJkMzIoRTEwMDBfSVA0QVRfUkVHKGkpKTsKKwlmb3IgKGkgPSAw OyBpIDwgNDsgaSsrKQorCQlyZWdzX2J1ZmZbMjUxICsgaV0gPSByZDMyKEUxMDAwX0lQNkFUX1JF RyhpKSk7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspCisJCXJlZ3NfYnVmZlsyNTUgKyBpXSA9 IHJkMzIoRTEwMDBfV1VQTV9SRUcoaSkpOworCWZvciAoaSA9IDA7IGkgPCAxMjg7IGkrKykKKwkJ cmVnc19idWZmWzI4NyArIGldID0gcmQzMihFMTAwMF9GRk1UX1JFRyhpKSk7CisJZm9yIChpID0g MDsgaSA8IDEyODsgaSsrKQorCQlyZWdzX2J1ZmZbNDE1ICsgaV0gPSByZDMyKEUxMDAwX0ZGVlRf UkVHKGkpKTsKKwlmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKQorCQlyZWdzX2J1ZmZbNTQzICsgaV0g PSByZDMyKEUxMDAwX0ZGTFRfUkVHKGkpKTsKKworCXJlZ3NfYnVmZls1NDddID0gcmQzMihFMTAw MF9UREZIKTsKKwlyZWdzX2J1ZmZbNTQ4XSA9IHJkMzIoRTEwMDBfVERGVCk7CisJcmVnc19idWZm WzU0OV0gPSByZDMyKEUxMDAwX1RERkhTKTsKKwlyZWdzX2J1ZmZbNTUwXSA9IHJkMzIoRTEwMDBf VERGUEMpOworCit9CisKK3N0YXRpYyBpbnQgaWdiX2dldF9lZXByb21fbGVuKHN0cnVjdCBuZXRf ZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2 X3ByaXYobmV0ZGV2KTsKKwlyZXR1cm4gYWRhcHRlci0+aHcubnZtLndvcmRfc2l6ZSAqIDI7Cit9 CisKK3N0YXRpYyBpbnQgaWdiX2dldF9lZXByb20oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwK KwkJCSAgc3RydWN0IGV0aHRvb2xfZWVwcm9tICplZXByb20sIHU4ICpieXRlcykKK3sKKwlzdHJ1 Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBl MTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTE2ICplZXByb21fYnVmZjsKKwlpbnQgZmly c3Rfd29yZCwgbGFzdF93b3JkOworCWludCByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCWlmIChl ZXByb20tPmxlbiA9PSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVlcHJvbS0+bWFnaWMgPSBo dy0+dmVuZG9yX2lkIHwgKGh3LT5kZXZpY2VfaWQgPDwgMTYpOworCisJZmlyc3Rfd29yZCA9IGVl cHJvbS0+b2Zmc2V0ID4+IDE7CisJbGFzdF93b3JkID0gKGVlcHJvbS0+b2Zmc2V0ICsgZWVwcm9t LT5sZW4gLSAxKSA+PiAxOworCisJZWVwcm9tX2J1ZmYgPSBrbWFsbG9jKHNpemVvZih1MTYpICoK KwkJCShsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMSksIEdGUF9LRVJORUwpOworCWlmICghZWVw cm9tX2J1ZmYpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKGh3LT5udm0udHlwZSA9PSBlMTAw MF9udm1fZWVwcm9tX3NwaSkKKwkJcmV0X3ZhbCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBm aXJzdF93b3JkLAorCQkJCQkgICAgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDEsCisJCQkJCSAg ICBlZXByb21fYnVmZik7CisJZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPCBsYXN0X3dvcmQgLSBm aXJzdF93b3JkICsgMTsgaSsrKSB7CisJCQlyZXRfdmFsID0gaHctPm52bS5vcHMucmVhZF9udm0o aHcsIGZpcnN0X3dvcmQgKyBpLCAxLAorCQkJCQkJICAgICZlZXByb21fYnVmZltpXSk7CisJCQlp ZiAocmV0X3ZhbCkKKwkJCQlicmVhazsKKwkJfQorCX0KKworCS8qIERldmljZSdzIGVlcHJvbSBp cyBhbHdheXMgbGl0dGxlLWVuZGlhbiwgd29yZCBhZGRyZXNzYWJsZSAqLworCWZvciAoaSA9IDA7 IGkgPCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKQorCQlsZTE2X3RvX2NwdXMoJmVl cHJvbV9idWZmW2ldKTsKKworCW1lbWNweShieXRlcywgKHU4ICopZWVwcm9tX2J1ZmYgKyAoZWVw cm9tLT5vZmZzZXQgJiAxKSwKKwkJCWVlcHJvbS0+bGVuKTsKKwlrZnJlZShlZXByb21fYnVmZik7 CisKKwlyZXR1cm4gcmV0X3ZhbDsKK30KKworc3RhdGljIGludCBpZ2Jfc2V0X2VlcHJvbShzdHJ1 Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJICBzdHJ1Y3QgZXRodG9vbF9lZXByb20gKmVlcHJv bSwgdTggKmJ5dGVzKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9w cml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MTYg KmVlcHJvbV9idWZmOworCXZvaWQgKnB0cjsKKwlpbnQgbWF4X2xlbiwgZmlyc3Rfd29yZCwgbGFz dF93b3JkLCByZXRfdmFsID0gMDsKKwl1MTYgaTsKKworCWlmIChlZXByb20tPmxlbiA9PSAwKQor CQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlpZiAoZWVwcm9tLT5tYWdpYyAhPSAoaHctPnZlbmRv cl9pZCB8IChody0+ZGV2aWNlX2lkIDw8IDE2KSkpCisJCXJldHVybiAtRUZBVUxUOworCisJbWF4 X2xlbiA9IGh3LT5udm0ud29yZF9zaXplICogMjsKKworCWZpcnN0X3dvcmQgPSBlZXByb20tPm9m ZnNldCA+PiAxOworCWxhc3Rfd29yZCA9IChlZXByb20tPm9mZnNldCArIGVlcHJvbS0+bGVuIC0g MSkgPj4gMTsKKwllZXByb21fYnVmZiA9IGttYWxsb2MobWF4X2xlbiwgR0ZQX0tFUk5FTCk7CisJ aWYgKCFlZXByb21fYnVmZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwdHIgPSAodm9pZCAqKWVl cHJvbV9idWZmOworCisJaWYgKGVlcHJvbS0+b2Zmc2V0ICYgMSkgeworCQkvKiBuZWVkIHJlYWQv bW9kaWZ5L3dyaXRlIG9mIGZpcnN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KKwkJLyogb25seSB0 aGUgc2Vjb25kIGJ5dGUgb2YgdGhlIHdvcmQgaXMgYmVpbmcgbW9kaWZpZWQgKi8KKwkJcmV0X3Zh bCA9IGh3LT5udm0ub3BzLnJlYWRfbnZtKGh3LCBmaXJzdF93b3JkLCAxLAorCQkJCQkgICAgJmVl cHJvbV9idWZmWzBdKTsKKwkJcHRyKys7CisJfQorCWlmICgoKGVlcHJvbS0+b2Zmc2V0ICsgZWVw cm9tLT5sZW4pICYgMSkgJiYgKHJldF92YWwgPT0gMCkpIHsKKwkJLyogbmVlZCByZWFkL21vZGlm eS93cml0ZSBvZiBsYXN0IGNoYW5nZWQgRUVQUk9NIHdvcmQgKi8KKwkJLyogb25seSB0aGUgZmly c3QgYnl0ZSBvZiB0aGUgd29yZCBpcyBiZWluZyBtb2RpZmllZCAqLworCQlyZXRfdmFsID0gaHct Pm52bS5vcHMucmVhZF9udm0oaHcsIGxhc3Rfd29yZCwgMSwKKwkJCQkgICAmZWVwcm9tX2J1ZmZb bGFzdF93b3JkIC0gZmlyc3Rfd29yZF0pOworCX0KKworCS8qIERldmljZSdzIGVlcHJvbSBpcyBh bHdheXMgbGl0dGxlLWVuZGlhbiwgd29yZCBhZGRyZXNzYWJsZSAqLworCWZvciAoaSA9IDA7IGkg PCBsYXN0X3dvcmQgLSBmaXJzdF93b3JkICsgMTsgaSsrKQorCQlsZTE2X3RvX2NwdXMoJmVlcHJv bV9idWZmW2ldKTsKKworCW1lbWNweShwdHIsIGJ5dGVzLCBlZXByb20tPmxlbik7CisKKwlmb3Ig KGkgPSAwOyBpIDwgbGFzdF93b3JkIC0gZmlyc3Rfd29yZCArIDE7IGkrKykKKwkJZWVwcm9tX2J1 ZmZbaV0gPSBjcHVfdG9fbGUxNihlZXByb21fYnVmZltpXSk7CisKKwlyZXRfdmFsID0gaHctPm52 bS5vcHMud3JpdGVfbnZtKGh3LCBmaXJzdF93b3JkLAorCQkJCSAgICAgbGFzdF93b3JkIC0gZmly c3Rfd29yZCArIDEsIGVlcHJvbV9idWZmKTsKKworCS8qIFVwZGF0ZSB0aGUgY2hlY2tzdW0gb3Zl ciB0aGUgZmlyc3QgcGFydCBvZiB0aGUgRUVQUk9NIGlmIG5lZWRlZAorCSAqIGFuZCBmbHVzaCBz aGFkb3cgUkFNIGZvciA4MjU3MyBjb250cm9sbGVycyAqLworCWlmICgocmV0X3ZhbCA9PSAwKSAm JiAoKGZpcnN0X3dvcmQgPD0gTlZNX0NIRUNLU1VNX1JFRykpKQorCQlpZ2JfdXBkYXRlX252bV9j aGVja3N1bShodyk7CisKKwlrZnJlZShlZXByb21fYnVmZik7CisJcmV0dXJuIHJldF92YWw7Cit9 CisKK3N0YXRpYyB2b2lkIGlnYl9nZXRfZHJ2aW5mbyhzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2 LAorCQkJICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gKmRydmluZm8pCit7CisJc3RydWN0IGln Yl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwljaGFyIGZpcm13YXJl X3ZlcnNpb25bMzJdOworCXUxNiBlZXByb21fZGF0YTsKKworCXN0cm5jcHkoZHJ2aW5mby0+ZHJp dmVyLCAgaWdiX2RyaXZlcl9uYW1lLCAzMik7CisJc3RybmNweShkcnZpbmZvLT52ZXJzaW9uLCBp Z2JfZHJpdmVyX3ZlcnNpb24sIDMyKTsKKworCS8qIEVFUFJPTSBpbWFnZSB2ZXJzaW9uICMgaXMg cmVwb3J0ZWQgYXMgZmlybXdhcmUgdmVyc2lvbiAjIGZvcgorCSAqIDgyNTc1IGNvbnRyb2xsZXJz ICovCisJYWRhcHRlci0+aHcubnZtLm9wcy5yZWFkX252bSgmYWRhcHRlci0+aHcsIDUsIDEsICZl ZXByb21fZGF0YSk7CisJc3ByaW50ZihmaXJtd2FyZV92ZXJzaW9uLCAiJWQuJWQtJWQiLAorCQko ZWVwcm9tX2RhdGEgJiAweEYwMDApID4+IDEyLAorCQkoZWVwcm9tX2RhdGEgJiAweDBGRjApID4+ IDQsCisJCWVlcHJvbV9kYXRhICYgMHgwMDBGKTsKKworCXN0cm5jcHkoZHJ2aW5mby0+ZndfdmVy c2lvbiwgZmlybXdhcmVfdmVyc2lvbiwgMzIpOworCXN0cm5jcHkoZHJ2aW5mby0+YnVzX2luZm8s IHBjaV9uYW1lKGFkYXB0ZXItPnBkZXYpLCAzMik7CisJZHJ2aW5mby0+bl9zdGF0cyA9IElHQl9T VEFUU19MRU47CisJZHJ2aW5mby0+dGVzdGluZm9fbGVuID0gSUdCX1RFU1RfTEVOOworCWRydmlu Zm8tPnJlZ2R1bXBfbGVuID0gaWdiX2dldF9yZWdzX2xlbihuZXRkZXYpOworCWRydmluZm8tPmVl ZHVtcF9sZW4gPSBpZ2JfZ2V0X2VlcHJvbV9sZW4obmV0ZGV2KTsKK30KKworc3RhdGljIHZvaWQg aWdiX2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICAgIHN0 cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFk YXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZyA9 IGFkYXB0ZXItPnR4X3Jpbmc7CisJc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nID0gYWRhcHRlci0+ cnhfcmluZzsKKworCXJpbmctPnJ4X21heF9wZW5kaW5nID0gSUdCX01BWF9SWEQ7CisJcmluZy0+ dHhfbWF4X3BlbmRpbmcgPSBJR0JfTUFYX1RYRDsKKwlyaW5nLT5yeF9taW5pX21heF9wZW5kaW5n ID0gMDsKKwlyaW5nLT5yeF9qdW1ib19tYXhfcGVuZGluZyA9IDA7CisJcmluZy0+cnhfcGVuZGlu ZyA9IHJ4X3JpbmctPmNvdW50OworCXJpbmctPnR4X3BlbmRpbmcgPSB0eF9yaW5nLT5jb3VudDsK KwlyaW5nLT5yeF9taW5pX3BlbmRpbmcgPSAwOworCXJpbmctPnJ4X2p1bWJvX3BlbmRpbmcgPSAw OworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpu ZXRkZXYsCisJCQkgICAgIHN0cnVjdCBldGh0b29sX3JpbmdwYXJhbSAqcmluZykKK3sKKwlzdHJ1 Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBp Z2JfYnVmZmVyICpvbGRfYnVmOworCXN0cnVjdCBpZ2JfYnVmZmVyICpvbGRfcnhfYnVmOworCXZv aWQgKm9sZF9kZXNjOworCWludCBpLCBlcnI7CisJdTMyIG5ld19yeF9jb3VudCwgbmV3X3R4X2Nv dW50LCBvbGRfc2l6ZTsKKwlkbWFfYWRkcl90IG9sZF9kbWE7CisKKwlpZiAoKHJpbmctPnJ4X21p bmlfcGVuZGluZykgfHwgKHJpbmctPnJ4X2p1bWJvX3BlbmRpbmcpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCW5ld19yeF9jb3VudCA9IG1heChyaW5nLT5yeF9wZW5kaW5nLCAodTMyKUlHQl9NSU5f UlhEKTsKKwluZXdfcnhfY291bnQgPSBtaW4obmV3X3J4X2NvdW50LCAodTMyKUlHQl9NQVhfUlhE KTsKKwluZXdfcnhfY291bnQgPSBBTElHTihuZXdfcnhfY291bnQsIFJFUV9SWF9ERVNDUklQVE9S X01VTFRJUExFKTsKKworCW5ld190eF9jb3VudCA9IG1heChyaW5nLT50eF9wZW5kaW5nLCAodTMy KUlHQl9NSU5fVFhEKTsKKwluZXdfdHhfY291bnQgPSBtaW4obmV3X3R4X2NvdW50LCAodTMyKUlH Ql9NQVhfVFhEKTsKKwluZXdfdHhfY291bnQgPSBBTElHTihuZXdfdHhfY291bnQsIFJFUV9UWF9E RVNDUklQVE9SX01VTFRJUExFKTsKKworCWlmICgobmV3X3R4X2NvdW50ID09IGFkYXB0ZXItPnR4 X3JpbmctPmNvdW50KSAmJgorCSAgICAobmV3X3J4X2NvdW50ID09IGFkYXB0ZXItPnJ4X3Jpbmct PmNvdW50KSkgeworCQkvKiBub3RoaW5nIHRvIGRvICovCisJCXJldHVybiAwOworCX0KKworCXdo aWxlICh0ZXN0X2FuZF9zZXRfYml0KF9fSUdCX1JFU0VUVElORywgJmFkYXB0ZXItPnN0YXRlKSkK KwkJbXNsZWVwKDEpOworCisJaWYgKG5ldGlmX3J1bm5pbmcoYWRhcHRlci0+bmV0ZGV2KSkKKwkJ aWdiX2Rvd24oYWRhcHRlcik7CisKKwkvKgorCSAqIFdlIGNhbid0IGp1c3QgZnJlZSBldmVyeXRo aW5nIGFuZCB0aGVuIHNldHVwIGFnYWluLAorCSAqIGJlY2F1c2UgdGhlIElTUnMgaW4gTVNJLVgg bW9kZSBnZXQgcGFzc2VkIHBvaW50ZXJzCisJICogdG8gdGhlIHR4IGFuZCByeCByaW5nIHN0cnVj dHMuCisJICovCisJaWYgKG5ld190eF9jb3VudCAhPSBhZGFwdGVyLT50eF9yaW5nLT5jb3VudCkg eworCQlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJCQkv KiBTYXZlIGV4aXN0aW5nIGRlc2NyaXB0b3IgcmluZyAqLworCQkJb2xkX2J1ZiA9IGFkYXB0ZXIt PnR4X3JpbmdbaV0uYnVmZmVyX2luZm87CisJCQlvbGRfZGVzYyA9IGFkYXB0ZXItPnR4X3Jpbmdb aV0uZGVzYzsKKwkJCW9sZF9zaXplID0gYWRhcHRlci0+dHhfcmluZ1tpXS5zaXplOworCQkJb2xk X2RtYSA9IGFkYXB0ZXItPnR4X3JpbmdbaV0uZG1hOworCQkJLyogVHJ5IHRvIGFsbG9jYXRlIGEg bmV3IG9uZSAqLworCQkJYWRhcHRlci0+dHhfcmluZ1tpXS5idWZmZXJfaW5mbyA9IE5VTEw7CisJ CQlhZGFwdGVyLT50eF9yaW5nW2ldLmRlc2MgPSBOVUxMOworCQkJYWRhcHRlci0+dHhfcmluZ1tp XS5jb3VudCA9IG5ld190eF9jb3VudDsKKwkJCWVyciA9IGlnYl9zZXR1cF90eF9yZXNvdXJjZXMo YWRhcHRlciwKKwkJCQkJCSZhZGFwdGVyLT50eF9yaW5nW2ldKTsKKwkJCWlmIChlcnIpIHsKKwkJ CQkvKiBSZXN0b3JlIHRoZSBvbGQgb25lIHNvIGF0IGxlYXN0CisJCQkJICAgdGhlIGFkYXB0ZXIg c3RpbGwgd29ya3MsIGV2ZW4gaWYKKwkJCQkgICB3ZSBmYWlsZWQgdGhlIHJlcXVlc3QgKi8KKwkJ CQlhZGFwdGVyLT50eF9yaW5nW2ldLmJ1ZmZlcl9pbmZvID0gb2xkX2J1ZjsKKwkJCQlhZGFwdGVy LT50eF9yaW5nW2ldLmRlc2MgPSBvbGRfZGVzYzsKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLnNp emUgPSBvbGRfc2l6ZTsKKwkJCQlhZGFwdGVyLT50eF9yaW5nW2ldLmRtYSA9IG9sZF9kbWE7CisJ CQkJZ290byBlcnJfc2V0dXA7CisJCQl9CisJCQkvKiBGcmVlIHRoZSBvbGQgYnVmZmVyIG1hbnVh bGx5ICovCisJCQl2ZnJlZShvbGRfYnVmKTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRl ci0+cGRldiwgb2xkX3NpemUsCisJCQkJCSAgICBvbGRfZGVzYywgb2xkX2RtYSk7CisJCX0KKwl9 CisKKwlpZiAobmV3X3J4X2NvdW50ICE9IGFkYXB0ZXItPnJ4X3JpbmctPmNvdW50KSB7CisJCWZv ciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKworCQkJb2xkX3J4 X2J1ZiA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0uYnVmZmVyX2luZm87CisJCQlvbGRfZGVzYyA9IGFk YXB0ZXItPnJ4X3JpbmdbaV0uZGVzYzsKKwkJCW9sZF9zaXplID0gYWRhcHRlci0+cnhfcmluZ1tp XS5zaXplOworCQkJb2xkX2RtYSA9IGFkYXB0ZXItPnJ4X3JpbmdbaV0uZG1hOworCisJCQlhZGFw dGVyLT5yeF9yaW5nW2ldLmJ1ZmZlcl9pbmZvID0gTlVMTDsKKwkJCWFkYXB0ZXItPnJ4X3Jpbmdb aV0uZGVzYyA9IE5VTEw7CisJCQlhZGFwdGVyLT5yeF9yaW5nW2ldLmRtYSA9IDA7CisJCQlhZGFw dGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gbmV3X3J4X2NvdW50OworCQkJZXJyID0gaWdiX3NldHVw X3J4X3Jlc291cmNlcyhhZGFwdGVyLAorCQkJCQkJICAgICAmYWRhcHRlci0+cnhfcmluZ1tpXSk7 CisJCQlpZiAoZXJyKSB7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5idWZmZXJfaW5mbyA9IG9s ZF9yeF9idWY7CisJCQkJYWRhcHRlci0+cnhfcmluZ1tpXS5kZXNjID0gb2xkX2Rlc2M7CisJCQkJ YWRhcHRlci0+cnhfcmluZ1tpXS5zaXplID0gb2xkX3NpemU7CisJCQkJYWRhcHRlci0+cnhfcmlu Z1tpXS5kbWEgPSBvbGRfZG1hOworCQkJCWdvdG8gZXJyX3NldHVwOworCQkJfQorCisJCQl2ZnJl ZShvbGRfcnhfYnVmKTsKKwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoYWRhcHRlci0+cGRldiwgb2xk X3NpemUsIG9sZF9kZXNjLAorCQkJCQkgICAgb2xkX2RtYSk7CisJCX0KKwl9CisKKwllcnIgPSAw OworZXJyX3NldHVwOgorCWlmIChuZXRpZl9ydW5uaW5nKGFkYXB0ZXItPm5ldGRldikpCisJCWln Yl91cChhZGFwdGVyKTsKKworCWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5z dGF0ZSk7CisJcmV0dXJuIGVycjsKK30KKworLyogZXRodG9vbCByZWdpc3RlciB0ZXN0IGRhdGEg Ki8KK3N0cnVjdCBpZ2JfcmVnX3Rlc3QgeworCXUxNiByZWc7CisJdTE2IHJlZ19vZmZzZXQ7CisJ dTE2IGFycmF5X2xlbjsKKwl1MTYgdGVzdF90eXBlOworCXUzMiBtYXNrOworCXUzMiB3cml0ZTsK K307CisKKy8qIEluIHRoZSBoYXJkd2FyZSwgcmVnaXN0ZXJzIGFyZSBsYWlkIG91dCBlaXRoZXIg c2luZ2x5LCBpbiBhcnJheXMKKyAqIHNwYWNlZCAweDEwMCBieXRlcyBhcGFydCwgb3IgaW4gY29u dGlndW91cyB0YWJsZXMuICBXZSBhc3N1bWUKKyAqIG1vc3QgdGVzdHMgdGFrZSBwbGFjZSBvbiBh cnJheXMgb3Igc2luZ2xlIHJlZ2lzdGVycyAoaGFuZGxlZAorICogYXMgYSBzaW5nbGUtZWxlbWVu dCBhcnJheSkgYW5kIHNwZWNpYWwtY2FzZSB0aGUgdGFibGVzLgorICogVGFibGUgdGVzdHMgYXJl IGFsd2F5cyBwYXR0ZXJuIHRlc3RzLgorICoKKyAqIFdlIGFsc28gbWFrZSBwcm92aXNpb24gZm9y IHNvbWUgcmVxdWlyZWQgc2V0dXAgc3RlcHMgYnkgc3BlY2lmeWluZworICogcmVnaXN0ZXJzIHRv IGJlIHdyaXR0ZW4gd2l0aG91dCBhbnkgcmVhZC1iYWNrIHRlc3RpbmcuCisgKi8KKworI2RlZmlu ZSBQQVRURVJOX1RFU1QJMQorI2RlZmluZSBTRVRfUkVBRF9URVNUCTIKKyNkZWZpbmUgV1JJVEVf Tk9fVEVTVAkzCisjZGVmaW5lIFRBQkxFMzJfVEVTVAk0CisjZGVmaW5lIFRBQkxFNjRfVEVTVF9M Twk1CisjZGVmaW5lIFRBQkxFNjRfVEVTVF9ISQk2CisKKy8qIDgyNTc2IHJlZyB0ZXN0ICovCitz dGF0aWMgc3RydWN0IGlnYl9yZWdfdGVzdCByZWdfdGVzdF84MjU3NltdID0geworCXsgRTEwMDBf RkNBTCwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYg fSwKKwl7IEUxMDAwX0ZDQUgsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkZG LCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9GQ1QsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNU LCAweDAwMDBGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9WRVQsCSAgIDB4MTAwLCAxLCAg UEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SREJBTCgw KSwgIDB4MTAwLCA0LCBQQVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7 IEUxMDAwX1JEQkFIKDApLCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhG RkZGRkZGRiB9LAorCXsgRTEwMDBfUkRMRU4oMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAw eDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJeyBFMTAwMF9SREJBTCg0KSwgIDB4NDAsICA4LCBQ QVRURVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFIKDQp LCAgMHg0MCwgIDgsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsg RTEwMDBfUkRMRU4oNCksICAweDQwLCAgOCwgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAw MEZGRkZGIH0sCisJLyogRW5hYmxlIGFsbCBmb3VyIFJYIHF1ZXVlcyBiZWZvcmUgdGVzdGluZy4g Ki8KKwl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDEsICBXUklURV9OT19URVNULCAwLCBFMTAw MF9SWERDVExfUVVFVUVfRU5BQkxFIH0sCisJLyogUkRIIGlzIHJlYWQtb25seSBmb3IgODI1NzYs IG9ubHkgdGVzdCBSRFQuICovCisJeyBFMTAwMF9SRFQoMCksCSAgIDB4MTAwLCA0LCAgUEFUVEVS Tl9URVNULCAweDAwMDBGRkZGLCAweDAwMDBGRkZGIH0sCisJeyBFMTAwMF9SWERDVEwoMCksIDB4 MTAwLCA0LCAgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAorCXsgRTEwMDBfRkNSVEgsCSAgIDB4MTAw LCAxLCAgUEFUVEVSTl9URVNULCAweDAwMDBGRkYwLCAweDAwMDBGRkYwIH0sCisJeyBFMTAwMF9G Q1RUViwJICAgMHgxMDAsIDEsICBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYg fSwKKwl7IEUxMDAwX1RJUEcsCSAgIDB4MTAwLCAxLCAgUEFUVEVSTl9URVNULCAweDNGRkZGRkZG LCAweDNGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBTCgwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9U RVNULCAweEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBSCgwKSwgIDB4MTAw LCA0LCAgUEFUVEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9U RExFTigwKSwgIDB4MTAwLCA0LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZG IH0sCisJeyBFMTAwMF9UREJBTCg0KSwgIDB4NDAsIDgsICBQQVRURVJOX1RFU1QsIDB4RkZGRkZG ODAsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1REQkFIKDQpLCAgMHg0MCwgOCwgIFBBVFRFUk5f VEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVERMRU4oNCksICAweDQw LCA4LCAgUEFUVEVSTl9URVNULCAweDAwMEZGRkYwLCAweDAwMEZGRkZGIH0sCisJeyBFMTAwMF9S Q1RMLAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4RkZGRkZGRkYsIDB4MDAwMDAwMDAg fSwKKwl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFEX1RFU1QsIDB4MDRDRkIw RkUsIDB4MDAzRkZGRkIgfSwKKwl7IEUxMDAwX1JDVEwsIAkgICAweDEwMCwgMSwgIFNFVF9SRUFE X1RFU1QsIDB4MDRDRkIwRkUsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1RDVEwsCSAgIDB4MTAw LCAxLCAgU0VUX1JFQURfVEVTVCwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCB9LAorCXsgRTEwMDBf UkEsCSAgIDAsIDE2LCBUQUJMRTY0X1RFU1RfTE8sIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwK Kwl7IEUxMDAwX1JBLAkgICAwLCAxNiwgVEFCTEU2NF9URVNUX0hJLCAweDgzRkZGRkZGLCAweEZG RkZGRkZGIH0sCisJeyBFMTAwMF9SQTIsCSAgIDAsIDgsIFRBQkxFNjRfVEVTVF9MTywgMHhGRkZG RkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfUkEyLAkgICAwLCA4LCBUQUJMRTY0X1RFU1Rf SEksIDB4ODNGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX01UQSwJICAgMCwgMTI4LFRB QkxFMzJfVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgMCwgMCwgMCwgMCB9Cit9 OworCisvKiA4MjU3NSByZWdpc3RlciB0ZXN0ICovCitzdGF0aWMgc3RydWN0IGlnYl9yZWdfdGVz dCByZWdfdGVzdF84MjU3NVtdID0geworCXsgRTEwMDBfRkNBTCwgICAgICAweDEwMCwgMSwgUEFU VEVSTl9URVNULCAweEZGRkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9GQ0FILCAgICAg IDB4MTAwLCAxLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUx MDAwX0ZDVCwgICAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHgwMDAwRkZGRiwgMHhGRkZG RkZGRiB9LAorCXsgRTEwMDBfVkVULCAgICAgICAweDEwMCwgMSwgUEFUVEVSTl9URVNULCAweEZG RkZGRkZGLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9SREJBTCgwKSwgIDB4MTAwLCA0LCBQQVRU RVJOX1RFU1QsIDB4RkZGRkZGODAsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JEQkFIKDApLCAg MHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEw MDBfUkRMRU4oMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAweDAwMEZGRjgwLCAweDAwMEZG RkZGIH0sCisJLyogRW5hYmxlIGFsbCBmb3VyIFJYIHF1ZXVlcyBiZWZvcmUgdGVzdGluZy4gKi8K Kwl7IEUxMDAwX1JYRENUTCgwKSwgMHgxMDAsIDQsIFdSSVRFX05PX1RFU1QsIDAsIEUxMDAwX1JY RENUTF9RVUVVRV9FTkFCTEUgfSwKKwkvKiBSREggaXMgcmVhZC1vbmx5IGZvciA4MjU3NSwgb25s eSB0ZXN0IFJEVC4gKi8KKwl7IEUxMDAwX1JEVCgwKSwgICAgMHgxMDAsIDQsIFBBVFRFUk5fVEVT VCwgMHgwMDAwRkZGRiwgMHgwMDAwRkZGRiB9LAorCXsgRTEwMDBfUlhEQ1RMKDApLCAweDEwMCwg NCwgV1JJVEVfTk9fVEVTVCwgMCwgMCB9LAorCXsgRTEwMDBfRkNSVEgsICAgICAweDEwMCwgMSwg UEFUVEVSTl9URVNULCAweDAwMDBGRkYwLCAweDAwMDBGRkYwIH0sCisJeyBFMTAwMF9GQ1RUViwg ICAgIDB4MTAwLCAxLCBQQVRURVJOX1RFU1QsIDB4MDAwMEZGRkYsIDB4MDAwMEZGRkYgfSwKKwl7 IEUxMDAwX1RJUEcsICAgICAgMHgxMDAsIDEsIFBBVFRFUk5fVEVTVCwgMHgzRkZGRkZGRiwgMHgz RkZGRkZGRiB9LAorCXsgRTEwMDBfVERCQUwoMCksICAweDEwMCwgNCwgUEFUVEVSTl9URVNULCAw eEZGRkZGRjgwLCAweEZGRkZGRkZGIH0sCisJeyBFMTAwMF9UREJBSCgwKSwgIDB4MTAwLCA0LCBQ QVRURVJOX1RFU1QsIDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1RETEVOKDAp LCAgMHgxMDAsIDQsIFBBVFRFUk5fVEVTVCwgMHgwMDBGRkY4MCwgMHgwMDBGRkZGRiB9LAorCXsg RTEwMDBfUkNUTCwgICAgICAweDEwMCwgMSwgU0VUX1JFQURfVEVTVCwgMHhGRkZGRkZGRiwgMHgw MDAwMDAwMCB9LAorCXsgRTEwMDBfUkNUTCwgICAgICAweDEwMCwgMSwgU0VUX1JFQURfVEVTVCwg MHgwNENGQjNGRSwgMHgwMDNGRkZGQiB9LAorCXsgRTEwMDBfUkNUTCwgICAgICAweDEwMCwgMSwg U0VUX1JFQURfVEVTVCwgMHgwNENGQjNGRSwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfVENUTCwg ICAgICAweDEwMCwgMSwgU0VUX1JFQURfVEVTVCwgMHhGRkZGRkZGRiwgMHgwMDAwMDAwMCB9LAor CXsgRTEwMDBfVFhDVywgICAgICAweDEwMCwgMSwgUEFUVEVSTl9URVNULCAweEMwMDBGRkZGLCAw eDAwMDBGRkZGIH0sCisJeyBFMTAwMF9SQSwgICAgICAgIDAsIDE2LCBUQUJMRTY0X1RFU1RfTE8s IDB4RkZGRkZGRkYsIDB4RkZGRkZGRkYgfSwKKwl7IEUxMDAwX1JBLCAgICAgICAgMCwgMTYsIFRB QkxFNjRfVEVTVF9ISSwgMHg4MDBGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsgRTEwMDBfTVRBLCAg ICAgICAwLCAxMjgsIFRBQkxFMzJfVEVTVCwgMHhGRkZGRkZGRiwgMHhGRkZGRkZGRiB9LAorCXsg MCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgYm9vbCByZWdfcGF0dGVybl90ZXN0KHN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhLAorCQkJICAgICBpbnQgcmVnLCB1MzIgbWFz aywgdTMyIHdyaXRlKQoreworCXUzMiBwYXQsIHZhbDsKKwl1MzIgX3Rlc3RbXSA9CisJCXsweDVB NUE1QTVBLCAweEE1QTVBNUE1LCAweDAwMDAwMDAwLCAweEZGRkZGRkZGfTsKKwlmb3IgKHBhdCA9 IDA7IHBhdCA8IEFSUkFZX1NJWkUoX3Rlc3QpOyBwYXQrKykgeworCQl3cml0ZWwoKF90ZXN0W3Bh dF0gJiB3cml0ZSksIChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKSk7CisJCXZhbCA9IHJlYWRs KGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcpOworCQlpZiAodmFsICE9IChfdGVzdFtwYXRdICYg d3JpdGUgJiBtYXNrKSkgeworCQkJZGV2X2VycigmYWRhcHRlci0+cGRldi0+ZGV2LCAicGF0dGVy biB0ZXN0IHJlZyAlMDRYICIKKwkJCQkiZmFpbGVkOiBnb3QgMHglMDhYIGV4cGVjdGVkIDB4JTA4 WFxuIiwKKwkJCQlyZWcsIHZhbCwgKF90ZXN0W3BhdF0gJiB3cml0ZSAmIG1hc2spKTsKKwkJCSpk YXRhID0gcmVnOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBib29sIHJlZ19zZXRfYW5kX2NoZWNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTY0 ICpkYXRhLAorCQkJICAgICAgaW50IHJlZywgdTMyIG1hc2ssIHUzMiB3cml0ZSkKK3sKKwl1MzIg dmFsOworCXdyaXRlbCgod3JpdGUgJiBtYXNrKSwgKGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByZWcp KTsKKwl2YWwgPSByZWFkbChhZGFwdGVyLT5ody5od19hZGRyICsgcmVnKTsKKwlpZiAoKHdyaXRl ICYgbWFzaykgIT0gKHZhbCAmIG1hc2spKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRl diwgInNldC9jaGVjayByZWcgJTA0WCB0ZXN0IGZhaWxlZDoiCisJCQkiIGdvdCAweCUwOFggZXhw ZWN0ZWQgMHglMDhYXG4iLCByZWcsCisJCQkodmFsICYgbWFzayksICh3cml0ZSAmIG1hc2spKTsK KwkJKmRhdGEgPSByZWc7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmlu ZSBSRUdfUEFUVEVSTl9URVNUKHJlZywgbWFzaywgd3JpdGUpIFwKKwlkbyB7IFwKKwkJaWYgKHJl Z19wYXR0ZXJuX3Rlc3QoYWRhcHRlciwgZGF0YSwgcmVnLCBtYXNrLCB3cml0ZSkpIFwKKwkJCXJl dHVybiAxOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBSRUdfU0VUX0FORF9DSEVDSyhyZWcs IG1hc2ssIHdyaXRlKSBcCisJZG8geyBcCisJCWlmIChyZWdfc2V0X2FuZF9jaGVjayhhZGFwdGVy LCBkYXRhLCByZWcsIG1hc2ssIHdyaXRlKSkgXAorCQkJcmV0dXJuIDE7IFwKKwl9IHdoaWxlICgw KQorCitzdGF0aWMgaW50IGlnYl9yZWdfdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIs IHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0 cnVjdCBpZ2JfcmVnX3Rlc3QgKnRlc3Q7CisJdTMyIHZhbHVlLCBiZWZvcmUsIGFmdGVyOworCXUz MiBpLCB0b2dnbGU7CisKKwl0b2dnbGUgPSAweDdGRkZGM0ZGOworCisJc3dpdGNoIChhZGFwdGVy LT5ody5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1NzY6CisJCXRlc3QgPSByZWdfdGVzdF84 MjU3NjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdGVzdCA9IHJlZ190ZXN0XzgyNTc1OworCQli cmVhazsKKwl9CisKKwkvKiBCZWNhdXNlIHRoZSBzdGF0dXMgcmVnaXN0ZXIgaXMgc3VjaCBhIHNw ZWNpYWwgY2FzZSwKKwkgKiB3ZSBoYW5kbGUgaXQgc2VwYXJhdGVseSBmcm9tIHRoZSByZXN0IG9m IHRoZSByZWdpc3RlcgorCSAqIHRlc3RzLiAgU29tZSBiaXRzIGFyZSByZWFkLW9ubHksIHNvbWUg dG9nZ2xlLCBhbmQgc29tZQorCSAqIGFyZSB3cml0YWJsZSBvbiBuZXdlciBNQUNzLgorCSAqLwor CWJlZm9yZSA9IHJkMzIoRTEwMDBfU1RBVFVTKTsKKwl2YWx1ZSA9IChyZDMyKEUxMDAwX1NUQVRV UykgJiB0b2dnbGUpOworCXdyMzIoRTEwMDBfU1RBVFVTLCB0b2dnbGUpOworCWFmdGVyID0gcmQz MihFMTAwMF9TVEFUVVMpICYgdG9nZ2xlOworCWlmICh2YWx1ZSAhPSBhZnRlcikgeworCQlkZXZf ZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJmYWlsZWQgU1RBVFVTIHJlZ2lzdGVyIHRlc3QgIgor CQkJImdvdDogMHglMDhYIGV4cGVjdGVkOiAweCUwOFhcbiIsIGFmdGVyLCB2YWx1ZSk7CisJCSpk YXRhID0gMTsKKwkJcmV0dXJuIDE7CisJfQorCS8qIHJlc3RvcmUgcHJldmlvdXMgc3RhdHVzICov CisJd3IzMihFMTAwMF9TVEFUVVMsIGJlZm9yZSk7CisKKwkvKiBQZXJmb3JtIHRoZSByZW1haW5k ZXIgb2YgdGhlIHJlZ2lzdGVyIHRlc3QsIGxvb3BpbmcgdGhyb3VnaAorCSAqIHRoZSB0ZXN0IHRh YmxlIHVudGlsIHdlIGVpdGhlciBmYWlsIG9yIHJlYWNoIHRoZSBudWxsIGVudHJ5LgorCSAqLwor CXdoaWxlICh0ZXN0LT5yZWcpIHsKKwkJZm9yIChpID0gMDsgaSA8IHRlc3QtPmFycmF5X2xlbjsg aSsrKSB7CisJCQlzd2l0Y2ggKHRlc3QtPnRlc3RfdHlwZSkgeworCQkJY2FzZSBQQVRURVJOX1RF U1Q6CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIHRlc3QtPnJlZ19vZmZz ZXQpLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsK KwkJCWNhc2UgU0VUX1JFQURfVEVTVDoKKwkJCQlSRUdfU0VUX0FORF9DSEVDSyh0ZXN0LT5yZWcg KyAoaSAqIHRlc3QtPnJlZ19vZmZzZXQpLAorCQkJCQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3Qt PndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgV1JJVEVfTk9fVEVTVDoKKwkJCQl3cml0ZWwo dGVzdC0+d3JpdGUsCisJCQkJICAgIChhZGFwdGVyLT5ody5od19hZGRyICsgdGVzdC0+cmVnKQor CQkJCQkrIChpICogdGVzdC0+cmVnX29mZnNldCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBUQUJM RTMyX1RFU1Q6CisJCQkJUkVHX1BBVFRFUk5fVEVTVCh0ZXN0LT5yZWcgKyAoaSAqIDQpLAorCQkJ CQkJdGVzdC0+bWFzaywKKwkJCQkJCXRlc3QtPndyaXRlKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug VEFCTEU2NF9URVNUX0xPOgorCQkJCVJFR19QQVRURVJOX1RFU1QodGVzdC0+cmVnICsgKGkgKiA4 KSwKKwkJCQkJCXRlc3QtPm1hc2ssCisJCQkJCQl0ZXN0LT53cml0ZSk7CisJCQkJYnJlYWs7CisJ CQljYXNlIFRBQkxFNjRfVEVTVF9ISToKKwkJCQlSRUdfUEFUVEVSTl9URVNUKCh0ZXN0LT5yZWcg KyA0KSArIChpICogOCksCisJCQkJCQl0ZXN0LT5tYXNrLAorCQkJCQkJdGVzdC0+d3JpdGUpOwor CQkJCWJyZWFrOworCQkJfQorCQl9CisJCXRlc3QrKzsKKwl9CisKKwkqZGF0YSA9IDA7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWdiX2VlcHJvbV90ZXN0KHN0cnVjdCBpZ2JfYWRhcHRl ciAqYWRhcHRlciwgdTY0ICpkYXRhKQoreworCXUxNiB0ZW1wOworCXUxNiBjaGVja3N1bSA9IDA7 CisJdTE2IGk7CisKKwkqZGF0YSA9IDA7CisJLyogUmVhZCBhbmQgYWRkIHVwIHRoZSBjb250ZW50 cyBvZiB0aGUgRUVQUk9NICovCisJZm9yIChpID0gMDsgaSA8IChOVk1fQ0hFQ0tTVU1fUkVHICsg MSk7IGkrKykgeworCQlpZiAoKGFkYXB0ZXItPmh3Lm52bS5vcHMucmVhZF9udm0oJmFkYXB0ZXIt Pmh3LCBpLCAxLCAmdGVtcCkpCisJCSAgICA8IDApIHsKKwkJCSpkYXRhID0gMTsKKwkJCWJyZWFr OworCQl9CisJCWNoZWNrc3VtICs9IHRlbXA7CisJfQorCisJLyogSWYgQ2hlY2tzdW0gaXMgbm90 IENvcnJlY3QgcmV0dXJuIGVycm9yIGVsc2UgdGVzdCBwYXNzZWQgKi8KKwlpZiAoKGNoZWNrc3Vt ICE9ICh1MTYpIE5WTV9TVU0pICYmICEoKmRhdGEpKQorCQkqZGF0YSA9IDI7CisKKwlyZXR1cm4g KmRhdGE7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfdGVzdF9pbnRyKGludCBpcnEsIHZv aWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpu ZXRkZXYgPSAoc3RydWN0IG5ldF9kZXZpY2UgKikgZGF0YTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIg KmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAm YWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT50ZXN0X2ljciB8PSByZDMyKEUxMDAwX0lDUik7CisK KwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBpbnQgaWdiX2ludHJfdGVzdChzdHJ1 Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcg Kmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVy LT5uZXRkZXY7CisJdTMyIG1hc2ssIGkgPSAwLCBzaGFyZWRfaW50ID0gdHJ1ZTsKKwl1MzIgaXJx ID0gYWRhcHRlci0+cGRldi0+aXJxOworCisJKmRhdGEgPSAwOworCisJLyogSG9vayB1cCB0ZXN0 IGludGVycnVwdCBoYW5kbGVyIGp1c3QgZm9yIHRoaXMgdGVzdCAqLworCWlmIChhZGFwdGVyLT5t c2l4X2VudHJpZXMpIHsKKwkJLyogTk9URTogd2UgZG9uJ3QgdGVzdCBNU0ktWCBpbnRlcnJ1cHRz IGhlcmUsIHlldCAqLworCQlyZXR1cm4gMDsKKwl9IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYg SUdCX0ZMQUdfSEFTX01TSSkgeworCQlzaGFyZWRfaW50ID0gZmFsc2U7CisJCWlmIChyZXF1ZXN0 X2lycShpcnEsICZpZ2JfdGVzdF9pbnRyLCAwLCBuZXRkZXYtPm5hbWUsIG5ldGRldikpIHsKKwkJ CSpkYXRhID0gMTsKKwkJCXJldHVybiAtMTsKKwkJfQorCX0gZWxzZSBpZiAoIXJlcXVlc3RfaXJx KGlycSwgJmlnYl90ZXN0X2ludHIsIElSUUZfUFJPQkVfU0hBUkVELAorCQkJCW5ldGRldi0+bmFt ZSwgbmV0ZGV2KSkgeworCQlzaGFyZWRfaW50ID0gZmFsc2U7CisJfSBlbHNlIGlmIChyZXF1ZXN0 X2lycShpcnEsICZpZ2JfdGVzdF9pbnRyLCBJUlFGX1NIQVJFRCwKKwkJIG5ldGRldi0+bmFtZSwg bmV0ZGV2KSkgeworCQkqZGF0YSA9IDE7CisJCXJldHVybiAtMTsKKwl9CisJZGV2X2luZm8oJmFk YXB0ZXItPnBkZXYtPmRldiwgInRlc3RpbmcgJXMgaW50ZXJydXB0XG4iLAorCQkoc2hhcmVkX2lu dCA/ICJzaGFyZWQiIDogInVuc2hhcmVkIikpOworCisJLyogRGlzYWJsZSBhbGwgdGhlIGludGVy cnVwdHMgKi8KKwl3cjMyKEUxMDAwX0lNQywgMHhGRkZGRkZGRik7CisJbXNsZWVwKDEwKTsKKwor CS8qIFRlc3QgZWFjaCBpbnRlcnJ1cHQgKi8KKwlmb3IgKDsgaSA8IDEwOyBpKyspIHsKKwkJLyog SW50ZXJydXB0IHRvIHRlc3QgKi8KKwkJbWFzayA9IDEgPDwgaTsKKworCQlpZiAoIXNoYXJlZF9p bnQpIHsKKwkJCS8qIERpc2FibGUgdGhlIGludGVycnVwdCB0byBiZSByZXBvcnRlZCBpbgorCQkJ ICogdGhlIGNhdXNlIHJlZ2lzdGVyIGFuZCB0aGVuIGZvcmNlIHRoZSBzYW1lCisJCQkgKiBpbnRl cnJ1cHQgYW5kIHNlZSBpZiBvbmUgZ2V0cyBwb3N0ZWQuICBJZgorCQkJICogYW4gaW50ZXJydXB0 IHdhcyBwb3N0ZWQgdG8gdGhlIGJ1cywgdGhlCisJCQkgKiB0ZXN0IGZhaWxlZC4KKwkJCSAqLwor CQkJYWRhcHRlci0+dGVzdF9pY3IgPSAwOworCQkJd3IzMihFMTAwMF9JTUMsIH5tYXNrICYgMHgw MDAwN0ZGRik7CisJCQl3cjMyKEUxMDAwX0lDUywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCW1z bGVlcCgxMCk7CisKKwkJCWlmIChhZGFwdGVyLT50ZXN0X2ljciAmIG1hc2spIHsKKwkJCQkqZGF0 YSA9IDM7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQkvKiBFbmFibGUgdGhlIGludGVycnVw dCB0byBiZSByZXBvcnRlZCBpbgorCQkgKiB0aGUgY2F1c2UgcmVnaXN0ZXIgYW5kIHRoZW4gZm9y Y2UgdGhlIHNhbWUKKwkJICogaW50ZXJydXB0IGFuZCBzZWUgaWYgb25lIGdldHMgcG9zdGVkLiAg SWYKKwkJICogYW4gaW50ZXJydXB0IHdhcyBub3QgcG9zdGVkIHRvIHRoZSBidXMsIHRoZQorCQkg KiB0ZXN0IGZhaWxlZC4KKwkJICovCisJCWFkYXB0ZXItPnRlc3RfaWNyID0gMDsKKwkJd3IzMihF MTAwMF9JTVMsIG1hc2spOworCQl3cjMyKEUxMDAwX0lDUywgbWFzayk7CisJCW1zbGVlcCgxMCk7 CisKKwkJaWYgKCEoYWRhcHRlci0+dGVzdF9pY3IgJiBtYXNrKSkgeworCQkJKmRhdGEgPSA0Owor CQkJYnJlYWs7CisJCX0KKworCQlpZiAoIXNoYXJlZF9pbnQpIHsKKwkJCS8qIERpc2FibGUgdGhl IG90aGVyIGludGVycnVwdHMgdG8gYmUgcmVwb3J0ZWQgaW4KKwkJCSAqIHRoZSBjYXVzZSByZWdp c3RlciBhbmQgdGhlbiBmb3JjZSB0aGUgb3RoZXIKKwkJCSAqIGludGVycnVwdHMgYW5kIHNlZSBp ZiBhbnkgZ2V0IHBvc3RlZC4gIElmCisJCQkgKiBhbiBpbnRlcnJ1cHQgd2FzIHBvc3RlZCB0byB0 aGUgYnVzLCB0aGUKKwkJCSAqIHRlc3QgZmFpbGVkLgorCQkJICovCisJCQlhZGFwdGVyLT50ZXN0 X2ljciA9IDA7CisJCQl3cjMyKEUxMDAwX0lNQywgfm1hc2sgJiAweDAwMDA3RkZGKTsKKwkJCXdy MzIoRTEwMDBfSUNTLCB+bWFzayAmIDB4MDAwMDdGRkYpOworCQkJbXNsZWVwKDEwKTsKKworCQkJ aWYgKGFkYXB0ZXItPnRlc3RfaWNyKSB7CisJCQkJKmRhdGEgPSA1OworCQkJCWJyZWFrOworCQkJ fQorCQl9CisJfQorCisJLyogRGlzYWJsZSBhbGwgdGhlIGludGVycnVwdHMgKi8KKwl3cjMyKEUx MDAwX0lNQywgMHhGRkZGRkZGRik7CisJbXNsZWVwKDEwKTsKKworCS8qIFVuaG9vayB0ZXN0IGlu dGVycnVwdCBoYW5kbGVyICovCisJZnJlZV9pcnEoaXJxLCBuZXRkZXYpOworCisJcmV0dXJuICpk YXRhOworfQorCitzdGF0aWMgdm9pZCBpZ2JfZnJlZV9kZXNjX3JpbmdzKHN0cnVjdCBpZ2JfYWRh cHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+ dGVzdF90eF9yaW5nOworCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT50ZXN0 X3J4X3Jpbmc7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBp OworCisJaWYgKHR4X3JpbmctPmRlc2MgJiYgdHhfcmluZy0+YnVmZmVyX2luZm8pIHsKKwkJZm9y IChpID0gMDsgaSA8IHR4X3JpbmctPmNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCBpZ2JfYnVmZmVy ICpidWYgPSAmKHR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldKTsKKwkJCWlmIChidWYtPmRtYSkKKwkJ CQlwY2lfdW5tYXBfc2luZ2xlKHBkZXYsIGJ1Zi0+ZG1hLCBidWYtPmxlbmd0aCwKKwkJCQkJCSBQ Q0lfRE1BX1RPREVWSUNFKTsKKwkJCWlmIChidWYtPnNrYikKKwkJCQlkZXZfa2ZyZWVfc2tiKGJ1 Zi0+c2tiKTsKKwkJfQorCX0KKworCWlmIChyeF9yaW5nLT5kZXNjICYmIHJ4X3JpbmctPmJ1ZmZl cl9pbmZvKSB7CisJCWZvciAoaSA9IDA7IGkgPCByeF9yaW5nLT5jb3VudDsgaSsrKSB7CisJCQlz dHJ1Y3QgaWdiX2J1ZmZlciAqYnVmID0gJihyeF9yaW5nLT5idWZmZXJfaW5mb1tpXSk7CisJCQlp ZiAoYnVmLT5kbWEpCisJCQkJcGNpX3VubWFwX3NpbmdsZShwZGV2LCBidWYtPmRtYSwKKwkJCQkJ CSBJR0JfUlhCVUZGRVJfMjA0OCwKKwkJCQkJCSBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQkJaWYg KGJ1Zi0+c2tiKQorCQkJCWRldl9rZnJlZV9za2IoYnVmLT5za2IpOworCQl9CisJfQorCisJaWYg KHR4X3JpbmctPmRlc2MpIHsKKwkJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCB0eF9yaW5nLT5z aXplLCB0eF9yaW5nLT5kZXNjLAorCQkJCSAgICB0eF9yaW5nLT5kbWEpOworCQl0eF9yaW5nLT5k ZXNjID0gTlVMTDsKKwl9CisJaWYgKHJ4X3JpbmctPmRlc2MpIHsKKwkJcGNpX2ZyZWVfY29uc2lz dGVudChwZGV2LCByeF9yaW5nLT5zaXplLCByeF9yaW5nLT5kZXNjLAorCQkJCSAgICByeF9yaW5n LT5kbWEpOworCQlyeF9yaW5nLT5kZXNjID0gTlVMTDsKKwl9CisKKwlrZnJlZSh0eF9yaW5nLT5i dWZmZXJfaW5mbyk7CisJdHhfcmluZy0+YnVmZmVyX2luZm8gPSBOVUxMOworCWtmcmVlKHJ4X3Jp bmctPmJ1ZmZlcl9pbmZvKTsKKwlyeF9yaW5nLT5idWZmZXJfaW5mbyA9IE5VTEw7CisKKwlyZXR1 cm47Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldHVwX2Rlc2NfcmluZ3Moc3RydWN0IGlnYl9hZGFw dGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJ c3RydWN0IGlnYl9yaW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnRlc3RfdHhfcmluZzsKKwlzdHJ1 Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+dGVzdF9yeF9yaW5nOworCXN0cnVjdCBw Y2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1MzIgcmN0bDsKKwlpbnQgaSwgcmV0X3Zh bDsKKworCS8qIFNldHVwIFR4IGRlc2NyaXB0b3IgcmluZyBhbmQgVHggYnVmZmVycyAqLworCisJ aWYgKCF0eF9yaW5nLT5jb3VudCkKKwkJdHhfcmluZy0+Y291bnQgPSBJR0JfREVGQVVMVF9UWEQ7 CisKKwl0eF9yaW5nLT5idWZmZXJfaW5mbyA9IGtjYWxsb2ModHhfcmluZy0+Y291bnQsCisJCQkJ ICAgICAgIHNpemVvZihzdHJ1Y3QgaWdiX2J1ZmZlciksCisJCQkJICAgICAgIEdGUF9LRVJORUwp OworCWlmICghdHhfcmluZy0+YnVmZmVyX2luZm8pIHsKKwkJcmV0X3ZhbCA9IDE7CisJCWdvdG8g ZXJyX25vbWVtOworCX0KKworCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5jb3VudCAqIHNpemVv ZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYyk7CisJdHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3Jpbmct PnNpemUsIDQwOTYpOworCXR4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChwZGV2 LCB0eF9yaW5nLT5zaXplLAorCQkJCQkgICAgICZ0eF9yaW5nLT5kbWEpOworCWlmICghdHhfcmlu Zy0+ZGVzYykgeworCQlyZXRfdmFsID0gMjsKKwkJZ290byBlcnJfbm9tZW07CisJfQorCXR4X3Jp bmctPm5leHRfdG9fdXNlID0gdHhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisKKwl3cjMyKEUx MDAwX1REQkFMKDApLAorCQkJKCh1NjQpIHR4X3JpbmctPmRtYSAmIDB4MDAwMDAwMDBGRkZGRkZG RikpOworCXdyMzIoRTEwMDBfVERCQUgoMCksICgodTY0KSB0eF9yaW5nLT5kbWEgPj4gMzIpKTsK Kwl3cjMyKEUxMDAwX1RETEVOKDApLAorCQkJdHhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0 IGUxMDAwX3R4X2Rlc2MpKTsKKwl3cjMyKEUxMDAwX1RESCgwKSwgMCk7CisJd3IzMihFMTAwMF9U RFQoMCksIDApOworCXdyMzIoRTEwMDBfVENUTCwKKwkJCUUxMDAwX1RDVExfUFNQIHwgRTEwMDBf VENUTF9FTiB8CisJCQlFMTAwMF9DT0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZU IHwKKwkJCUUxMDAwX0NPTExJU0lPTl9ESVNUQU5DRSA8PCBFMTAwMF9DT0xEX1NISUZUKTsKKwor CWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3VudDsgaSsrKSB7CisJCXN0cnVjdCBlMTAwMF90 eF9kZXNjICp0eF9kZXNjID0gRTEwMDBfVFhfREVTQygqdHhfcmluZywgaSk7CisJCXN0cnVjdCBz a19idWZmICpza2I7CisJCXVuc2lnbmVkIGludCBzaXplID0gMTAyNDsKKworCQlza2IgPSBhbGxv Y19za2Ioc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCWlmICghc2tiKSB7CisJCQlyZXRfdmFsID0gMzsK KwkJCWdvdG8gZXJyX25vbWVtOworCQl9CisJCXNrYl9wdXQoc2tiLCBzaXplKTsKKwkJdHhfcmlu Zy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOworCQl0eF9yaW5nLT5idWZmZXJfaW5mb1tpXS5s ZW5ndGggPSBza2ItPmxlbjsKKwkJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uZG1hID0KKwkJCXBj aV9tYXBfc2luZ2xlKHBkZXYsIHNrYi0+ZGF0YSwgc2tiLT5sZW4sCisJCQkJICAgICAgIFBDSV9E TUFfVE9ERVZJQ0UpOworCQl0eF9kZXNjLT5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHR4X3Jp bmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSk7CisJCXR4X2Rlc2MtPmxvd2VyLmRhdGEgPSBjcHVfdG9f bGUzMihza2ItPmxlbik7CisJCXR4X2Rlc2MtPmxvd2VyLmRhdGEgfD0gY3B1X3RvX2xlMzIoRTEw MDBfVFhEX0NNRF9FT1AgfAorCQkJCQkJICAgRTEwMDBfVFhEX0NNRF9JRkNTIHwKKwkJCQkJCSAg IEUxMDAwX1RYRF9DTURfUlMpOworCQl0eF9kZXNjLT51cHBlci5kYXRhID0gMDsKKwl9CisKKwkv KiBTZXR1cCBSeCBkZXNjcmlwdG9yIHJpbmcgYW5kIFJ4IGJ1ZmZlcnMgKi8KKworCWlmICghcnhf cmluZy0+Y291bnQpCisJCXJ4X3JpbmctPmNvdW50ID0gSUdCX0RFRkFVTFRfUlhEOworCisJcnhf cmluZy0+YnVmZmVyX2luZm8gPSBrY2FsbG9jKHJ4X3JpbmctPmNvdW50LAorCQkJCSAgICAgICBz aXplb2Yoc3RydWN0IGlnYl9idWZmZXIpLAorCQkJCSAgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAo IXJ4X3JpbmctPmJ1ZmZlcl9pbmZvKSB7CisJCXJldF92YWwgPSA0OworCQlnb3RvIGVycl9ub21l bTsKKwl9CisKKwlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0 IGUxMDAwX3J4X2Rlc2MpOworCXJ4X3JpbmctPmRlc2MgPSBwY2lfYWxsb2NfY29uc2lzdGVudChw ZGV2LCByeF9yaW5nLT5zaXplLAorCQkJCQkgICAgICZyeF9yaW5nLT5kbWEpOworCWlmICghcnhf cmluZy0+ZGVzYykgeworCQlyZXRfdmFsID0gNTsKKwkJZ290byBlcnJfbm9tZW07CisJfQorCXJ4 X3JpbmctPm5leHRfdG9fdXNlID0gcnhfcmluZy0+bmV4dF90b19jbGVhbiA9IDA7CisKKwlyY3Rs ID0gcmQzMihFMTAwMF9SQ1RMKTsKKwl3cjMyKEUxMDAwX1JDVEwsIHJjdGwgJiB+RTEwMDBfUkNU TF9FTik7CisJd3IzMihFMTAwMF9SREJBTCgwKSwKKwkJCSgodTY0KSByeF9yaW5nLT5kbWEgJiAw eEZGRkZGRkZGKSk7CisJd3IzMihFMTAwMF9SREJBSCgwKSwKKwkJCSgodTY0KSByeF9yaW5nLT5k bWEgPj4gMzIpKTsKKwl3cjMyKEUxMDAwX1JETEVOKDApLCByeF9yaW5nLT5zaXplKTsKKwl3cjMy KEUxMDAwX1JESCgwKSwgMCk7CisJd3IzMihFMTAwMF9SRFQoMCksIDApOworCXJjdGwgPSBFMTAw MF9SQ1RMX0VOIHwgRTEwMDBfUkNUTF9CQU0gfCBFMTAwMF9SQ1RMX1NaXzIwNDggfAorCQlFMTAw MF9SQ1RMX0xCTV9OTyB8IEUxMDAwX1JDVExfUkRNVFNfSEFMRiB8CisJCShhZGFwdGVyLT5ody5t YWMubWNfZmlsdGVyX3R5cGUgPDwgRTEwMDBfUkNUTF9NT19TSElGVCk7CisJd3IzMihFMTAwMF9S Q1RMLCByY3RsKTsKKwl3cjMyKEUxMDAwX1NSUkNUTCgwKSwgMCk7CisKKwlmb3IgKGkgPSAwOyBp IDwgcnhfcmluZy0+Y291bnQ7IGkrKykgeworCQlzdHJ1Y3QgZTEwMDBfcnhfZGVzYyAqcnhfZGVz YyA9IEUxMDAwX1JYX0RFU0MoKnJ4X3JpbmcsIGkpOworCQlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwor CisJCXNrYiA9IGFsbG9jX3NrYihJR0JfUlhCVUZGRVJfMjA0OCArIE5FVF9JUF9BTElHTiwKKwkJ CQlHRlBfS0VSTkVMKTsKKwkJaWYgKCFza2IpIHsKKwkJCXJldF92YWwgPSA2OworCQkJZ290byBl cnJfbm9tZW07CisJCX0KKwkJc2tiX3Jlc2VydmUoc2tiLCBORVRfSVBfQUxJR04pOworCQlyeF9y aW5nLT5idWZmZXJfaW5mb1tpXS5za2IgPSBza2I7CisJCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ld LmRtYSA9CisJCQlwY2lfbWFwX3NpbmdsZShwZGV2LCBza2ItPmRhdGEsIElHQl9SWEJVRkZFUl8y MDQ4LAorCQkJCSAgICAgICBQQ0lfRE1BX0ZST01ERVZJQ0UpOworCQlyeF9kZXNjLT5idWZmZXJf YWRkciA9IGNwdV90b19sZTY0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldLmRtYSk7CisJCW1lbXNl dChza2ItPmRhdGEsIDB4MDAsIHNrYi0+bGVuKTsKKwl9CisKKwlyZXR1cm4gMDsKKworZXJyX25v bWVtOgorCWlnYl9mcmVlX2Rlc2NfcmluZ3MoYWRhcHRlcik7CisJcmV0dXJuIHJldF92YWw7Cit9 CisKK3N0YXRpYyB2b2lkIGlnYl9waHlfZGlzYWJsZV9yZWNlaXZlcihzdHJ1Y3QgaWdiX2FkYXB0 ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwor CS8qIFdyaXRlIG91dCB0byBQSFkgcmVnaXN0ZXJzIDI5IGFuZCAzMCB0byBkaXNhYmxlIHRoZSBS ZWNlaXZlci4gKi8KKwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAyOSwgMHgwMDFGKTsK Kwlody0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCAzMCwgMHg4RkZDKTsKKwlody0+cGh5Lm9w cy53cml0ZV9waHlfcmVnKGh3LCAyOSwgMHgwMDFBKTsKKwlody0+cGh5Lm9wcy53cml0ZV9waHlf cmVnKGh3LCAzMCwgMHg4RkYwKTsKK30KKworc3RhdGljIGludCBpZ2JfaW50ZWdyYXRlZF9waHlf bG9vcGJhY2soc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9o dyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIGN0cmxfcmVnID0gMDsKKwl1MzIgc3RhdF9yZWcg PSAwOworCisJaHctPm1hYy5hdXRvbmVnID0gZmFsc2U7CisKKwlpZiAoaHctPnBoeS50eXBlID09 IGUxMDAwX3BoeV9tODgpIHsKKwkJLyogQXV0by1NREkvTURJWCBPZmYgKi8KKwkJaHctPnBoeS5v cHMud3JpdGVfcGh5X3JlZyhodywgTTg4RTEwMDBfUEhZX1NQRUNfQ1RSTCwgMHgwODA4KTsKKwkJ LyogcmVzZXQgdG8gdXBkYXRlIEF1dG8tTURJL01ESVggKi8KKwkJaHctPnBoeS5vcHMud3JpdGVf cGh5X3JlZyhodywgUEhZX0NPTlRST0wsIDB4OTE0MCk7CisJCS8qIGF1dG9uZWcgb2ZmICovCisJ CWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAweDgxNDApOworCX0K KworCWN0cmxfcmVnID0gcmQzMihFMTAwMF9DVFJMKTsKKworCS8qIGZvcmNlIDEwMDAsIHNldCBs b29wYmFjayAqLworCWh3LT5waHkub3BzLndyaXRlX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAw eDQxNDApOworCisJLyogTm93IHNldCB1cCB0aGUgTUFDIHRvIHRoZSBzYW1lIHNwZWVkL2R1cGxl eCBhcyB0aGUgUEhZLiAqLworCWN0cmxfcmVnID0gcmQzMihFMTAwMF9DVFJMKTsKKwljdHJsX3Jl ZyAmPSB+RTEwMDBfQ1RSTF9TUERfU0VMOyAvKiBDbGVhciB0aGUgc3BlZWQgc2VsIGJpdHMgKi8K KwljdHJsX3JlZyB8PSAoRTEwMDBfQ1RSTF9GUkNTUEQgfCAvKiBTZXQgdGhlIEZvcmNlIFNwZWVk IEJpdCAqLworCQkgICAgIEUxMDAwX0NUUkxfRlJDRFBYIHwgLyogU2V0IHRoZSBGb3JjZSBEdXBs ZXggQml0ICovCisJCSAgICAgRTEwMDBfQ1RSTF9TUERfMTAwMCB8LyogRm9yY2UgU3BlZWQgdG8g MTAwMCAqLworCQkgICAgIEUxMDAwX0NUUkxfRkQpOwkgLyogRm9yY2UgRHVwbGV4IHRvIEZVTEwg Ki8KKworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIg JiYKKwkgICAgaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpCisJCWN0cmxfcmVnIHw9IEUx MDAwX0NUUkxfSUxPUzsgLyogSW52ZXJ0IExvc3Mgb2YgU2lnbmFsICovCisJZWxzZSB7CisJCS8q IFNldCB0aGUgSUxPUyBiaXQgb24gdGhlIGZpYmVyIE5pYyBpZiBoYWxmIGR1cGxleCBsaW5rIGlz CisJCSAqIGRldGVjdGVkLiAqLworCQlzdGF0X3JlZyA9IHJkMzIoRTEwMDBfU1RBVFVTKTsKKwkJ aWYgKChzdGF0X3JlZyAmIEUxMDAwX1NUQVRVU19GRCkgPT0gMCkKKwkJCWN0cmxfcmVnIHw9IChF MTAwMF9DVFJMX0lMT1MgfCBFMTAwMF9DVFJMX1NMVSk7CisJfQorCisJd3IzMihFMTAwMF9DVFJM LCBjdHJsX3JlZyk7CisKKwkvKiBEaXNhYmxlIHRoZSByZWNlaXZlciBvbiB0aGUgUEhZIHNvIHdo ZW4gYSBjYWJsZSBpcyBwbHVnZ2VkIGluLCB0aGUKKwkgKiBQSFkgZG9lcyBub3QgYmVnaW4gdG8g YXV0b25lZyB3aGVuIGEgY2FibGUgaXMgcmVjb25uZWN0ZWQgdG8gdGhlIE5JQy4KKwkgKi8KKwlp ZiAoaHctPnBoeS50eXBlID09IGUxMDAwX3BoeV9tODgpCisJCWlnYl9waHlfZGlzYWJsZV9yZWNl aXZlcihhZGFwdGVyKTsKKworCXVkZWxheSg1MDApOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgaWdiX3NldF9waHlfbG9vcGJhY2soc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQor eworCXJldHVybiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soYWRhcHRlcik7Cit9CisKK3N0 YXRpYyBpbnQgaWdiX3NldHVwX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGlnYl9hZGFwdGVyICphZGFw dGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJdTMyIHJlZzsK KworCWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9maWJlciB8fAor CSAgICBody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJk ZXMpIHsKKwkJcmVnID0gcmQzMihFMTAwMF9SQ1RMKTsKKwkJcmVnIHw9IEUxMDAwX1JDVExfTEJN X1RDVlI7CisJCXdyMzIoRTEwMDBfUkNUTCwgcmVnKTsKKworCQl3cjMyKEUxMDAwX1NDVEwsIEUx MDAwX0VOQUJMRV9TRVJERVNfTE9PUEJBQ0spOworCisJCXJlZyA9IHJkMzIoRTEwMDBfQ1RSTCk7 CisJCXJlZyAmPSB+KEUxMDAwX0NUUkxfUkZDRSB8CisJCQkgRTEwMDBfQ1RSTF9URkNFIHwKKwkJ CSBFMTAwMF9DVFJMX0xSU1QpOworCQlyZWcgfD0gRTEwMDBfQ1RSTF9TTFUgfAorCQkgICAgICAg RTEwMDBfQ1RSTF9GRDsgCisJCXdyMzIoRTEwMDBfQ1RSTCwgcmVnKTsKKworCQkvKiBVbnNldCBz d2l0Y2ggY29udHJvbCB0byBzZXJkZXMgZW5lcmd5IGRldGVjdCAqLworCQlyZWcgPSByZDMyKEUx MDAwX0NPTk5TVyk7CisJCXJlZyAmPSB+RTEwMDBfQ09OTlNXX0VOUkdTUkM7CisJCXdyMzIoRTEw MDBfQ09OTlNXLCByZWcpOworCisJCS8qIFNldCBQQ1MgcmVnaXN0ZXIgZm9yIGZvcmNlZCBzcGVl ZCAqLworCQlyZWcgPSByZDMyKEUxMDAwX1BDU19MQ1RMKTsKKwkJcmVnICY9IH5FMTAwMF9QQ1Nf TENUTF9BTl9FTkFCTEU7ICAgICAvKiBEaXNhYmxlIEF1dG9uZWcqLworCQlyZWcgfD0gRTEwMDBf UENTX0xDVExfRkxWX0xJTktfVVAgfCAgIC8qIEZvcmNlIGxpbmsgdXAgKi8KKwkJICAgICAgIEUx MDAwX1BDU19MQ1RMX0ZTVl8xMDAwIHwgICAgICAvKiBGb3JjZSAxMDAwICAgICovCisJCSAgICAg ICBFMTAwMF9QQ1NfTENUTF9GRFZfRlVMTCB8ICAgICAgLyogU2VyRGVzIEZ1bGwgZHVwbGV4ICov CisJCSAgICAgICBFMTAwMF9QQ1NfTENUTF9GU0QgfCAgICAgICAgICAgLyogRm9yY2UgU3BlZWQg Ki8KKwkJICAgICAgIEUxMDAwX1BDU19MQ1RMX0ZPUkNFX0xJTks7ICAgICAvKiBGb3JjZSBMaW5r ICovCisJCXdyMzIoRTEwMDBfUENTX0xDVEwsIHJlZyk7CisKKwkJcmV0dXJuIDA7CisJfSBlbHNl IGlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJ cmV0dXJuIGlnYl9zZXRfcGh5X2xvb3BiYWNrKGFkYXB0ZXIpOworCX0KKworCXJldHVybiA3Owor fQorCitzdGF0aWMgdm9pZCBpZ2JfbG9vcGJhY2tfY2xlYW51cChzdHJ1Y3QgaWdiX2FkYXB0ZXIg KmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIg cmN0bDsKKwl1MTYgcGh5X3JlZzsKKworCXJjdGwgPSByZDMyKEUxMDAwX1JDVEwpOworCXJjdGwg Jj0gfihFMTAwMF9SQ1RMX0xCTV9UQ1ZSIHwgRTEwMDBfUkNUTF9MQk1fTUFDKTsKKwl3cjMyKEUx MDAwX1JDVEwsIHJjdGwpOworCisJaHctPm1hYy5hdXRvbmVnID0gdHJ1ZTsKKwlody0+cGh5Lm9w cy5yZWFkX3BoeV9yZWcoaHcsIFBIWV9DT05UUk9MLCAmcGh5X3JlZyk7CisJaWYgKHBoeV9yZWcg JiBNSUlfQ1JfTE9PUEJBQ0spIHsKKwkJcGh5X3JlZyAmPSB+TUlJX0NSX0xPT1BCQUNLOworCQlo dy0+cGh5Lm9wcy53cml0ZV9waHlfcmVnKGh3LCBQSFlfQ09OVFJPTCwgcGh5X3JlZyk7CisJCWln Yl9waHlfc3dfcmVzZXQoaHcpOworCX0KK30KKworc3RhdGljIHZvaWQgaWdiX2NyZWF0ZV9sYnRl c3RfZnJhbWUoc3RydWN0IHNrX2J1ZmYgKnNrYiwKKwkJCQkgICAgdW5zaWduZWQgaW50IGZyYW1l X3NpemUpCit7CisJbWVtc2V0KHNrYi0+ZGF0YSwgMHhGRiwgZnJhbWVfc2l6ZSk7CisJZnJhbWVf c2l6ZSAmPSB+MTsKKwltZW1zZXQoJnNrYi0+ZGF0YVtmcmFtZV9zaXplIC8gMl0sIDB4QUEsIGZy YW1lX3NpemUgLyAyIC0gMSk7CisJbWVtc2V0KCZza2ItPmRhdGFbZnJhbWVfc2l6ZSAvIDIgKyAx MF0sIDB4QkUsIDEpOworCW1lbXNldCgmc2tiLT5kYXRhW2ZyYW1lX3NpemUgLyAyICsgMTJdLCAw eEFGLCAxKTsKK30KKworc3RhdGljIGludCBpZ2JfY2hlY2tfbGJ0ZXN0X2ZyYW1lKHN0cnVjdCBz a19idWZmICpza2IsIHVuc2lnbmVkIGludCBmcmFtZV9zaXplKQoreworCWZyYW1lX3NpemUgJj0g fjE7CisJaWYgKCooc2tiLT5kYXRhICsgMykgPT0gMHhGRikKKwkJaWYgKCgqKHNrYi0+ZGF0YSAr IGZyYW1lX3NpemUgLyAyICsgMTApID09IDB4QkUpICYmCisJCSAgICgqKHNrYi0+ZGF0YSArIGZy YW1lX3NpemUgLyAyICsgMTIpID09IDB4QUYpKQorCQkJcmV0dXJuIDA7CisJcmV0dXJuIDEzOwor fQorCitzdGF0aWMgaW50IGlnYl9ydW5fbG9vcGJhY2tfdGVzdChzdHJ1Y3QgaWdiX2FkYXB0ZXIg KmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlzdHJ1 Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+dGVzdF90eF9yaW5nOworCXN0cnVjdCBp Z2JfcmluZyAqcnhfcmluZyA9ICZhZGFwdGVyLT50ZXN0X3J4X3Jpbmc7CisJc3RydWN0IHBjaV9k ZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCWludCBpLCBqLCBrLCBsLCBsYywgZ29vZF9jbnQ7 CisJaW50IHJldF92YWwgPSAwOworCXVuc2lnbmVkIGxvbmcgdGltZTsKKworCXdyMzIoRTEwMDBf UkRUKDApLCByeF9yaW5nLT5jb3VudCAtIDEpOworCisJLyogQ2FsY3VsYXRlIHRoZSBsb29wIGNv dW50IGJhc2VkIG9uIHRoZSBsYXJnZXN0IGRlc2NyaXB0b3IgcmluZworCSAqIFRoZSBpZGVhIGlz IHRvIHdyYXAgdGhlIGxhcmdlc3QgcmluZyBhIG51bWJlciBvZiB0aW1lcyB1c2luZyA2NAorCSAq IHNlbmQvcmVjZWl2ZSBwYWlycyBkdXJpbmcgZWFjaCBsb29wCisJICovCisKKwlpZiAocnhfcmlu Zy0+Y291bnQgPD0gdHhfcmluZy0+Y291bnQpCisJCWxjID0gKCh0eF9yaW5nLT5jb3VudCAvIDY0 KSAqIDIpICsgMTsKKwllbHNlCisJCWxjID0gKChyeF9yaW5nLT5jb3VudCAvIDY0KSAqIDIpICsg MTsKKworCWsgPSBsID0gMDsKKwlmb3IgKGogPSAwOyBqIDw9IGxjOyBqKyspIHsgLyogbG9vcCBj b3VudCBsb29wICovCisJCWZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB7IC8qIHNlbmQgdGhlIHBh Y2tldHMgKi8KKwkJCWlnYl9jcmVhdGVfbGJ0ZXN0X2ZyYW1lKHR4X3JpbmctPmJ1ZmZlcl9pbmZv W2tdLnNrYiwKKwkJCQkJCTEwMjQpOworCQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNl KHBkZXYsCisJCQkJdHhfcmluZy0+YnVmZmVyX2luZm9ba10uZG1hLAorCQkJCXR4X3JpbmctPmJ1 ZmZlcl9pbmZvW2tdLmxlbmd0aCwKKwkJCQlQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCWsrKzsKKwkJ CWlmIChrID09IHR4X3JpbmctPmNvdW50KQorCQkJCWsgPSAwOworCQl9CisJCXdyMzIoRTEwMDBf VERUKDApLCBrKTsKKwkJbXNsZWVwKDIwMCk7CisJCXRpbWUgPSBqaWZmaWVzOyAvKiBzZXQgdGhl IHN0YXJ0IHRpbWUgZm9yIHRoZSByZWNlaXZlICovCisJCWdvb2RfY250ID0gMDsKKwkJZG8geyAv KiByZWNlaXZlIHRoZSBzZW50IHBhY2tldHMgKi8KKwkJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9y X2NwdShwZGV2LAorCQkJCQlyeF9yaW5nLT5idWZmZXJfaW5mb1tsXS5kbWEsCisJCQkJCUlHQl9S WEJVRkZFUl8yMDQ4LAorCQkJCQlQQ0lfRE1BX0ZST01ERVZJQ0UpOworCisJCQlyZXRfdmFsID0g aWdiX2NoZWNrX2xidGVzdF9mcmFtZSgKKwkJCQkJICAgICByeF9yaW5nLT5idWZmZXJfaW5mb1ts XS5za2IsIDEwMjQpOworCQkJaWYgKCFyZXRfdmFsKQorCQkJCWdvb2RfY250Kys7CisJCQlsKys7 CisJCQlpZiAobCA9PSByeF9yaW5nLT5jb3VudCkKKwkJCQlsID0gMDsKKwkJCS8qIHRpbWUgKyAy MCBtc2VjcyAoMjAwIG1zZWNzIG9uIDIuNCkgaXMgbW9yZSB0aGFuCisJCQkgKiBlbm91Z2ggdGlt ZSB0byBjb21wbGV0ZSB0aGUgcmVjZWl2ZXMsIGlmIGl0J3MKKwkJCSAqIGV4Y2VlZGVkLCBicmVh ayBhbmQgZXJyb3Igb2ZmCisJCQkgKi8KKwkJfSB3aGlsZSAoZ29vZF9jbnQgPCA2NCAmJiBqaWZm aWVzIDwgKHRpbWUgKyAyMCkpOworCQlpZiAoZ29vZF9jbnQgIT0gNjQpIHsKKwkJCXJldF92YWwg PSAxMzsgLyogcmV0X3ZhbCBpcyB0aGUgc2FtZSBhcyBtaXMtY29tcGFyZSAqLworCQkJYnJlYWs7 CisJCX0KKwkJaWYgKGppZmZpZXMgPj0gKHRpbWUgKyAyMCkpIHsKKwkJCXJldF92YWwgPSAxNDsg LyogZXJyb3IgY29kZSBmb3IgdGltZSBvdXQgZXJyb3IgKi8KKwkJCWJyZWFrOworCQl9CisJfSAv KiBlbmQgbG9vcCBjb3VudCBsb29wICovCisJcmV0dXJuIHJldF92YWw7Cit9CisKK3N0YXRpYyBp bnQgaWdiX2xvb3BiYWNrX3Rlc3Qoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1NjQgKmRh dGEpCit7CisJLyogUEhZIGxvb3BiYWNrIGNhbm5vdCBiZSBwZXJmb3JtZWQgaWYgU29ML0lERVIK KwkgKiBzZXNzaW9ucyBhcmUgYWN0aXZlICovCisJaWYgKGlnYl9jaGVja19yZXNldF9ibG9jaygm YWRhcHRlci0+aHcpKSB7CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJDYW5u b3QgZG8gUEhZIGxvb3BiYWNrIHRlc3QgIgorCQkJIndoZW4gU29ML0lERVIgaXMgYWN0aXZlLlxu Iik7CisJCSpkYXRhID0gMDsKKwkJZ290byBvdXQ7CisJfQorCSpkYXRhID0gaWdiX3NldHVwX2Rl c2NfcmluZ3MoYWRhcHRlcik7CisJaWYgKCpkYXRhKQorCQlnb3RvIG91dDsKKwkqZGF0YSA9IGln Yl9zZXR1cF9sb29wYmFja190ZXN0KGFkYXB0ZXIpOworCWlmICgqZGF0YSkKKwkJZ290byBlcnJf bG9vcGJhY2s7CisJKmRhdGEgPSBpZ2JfcnVuX2xvb3BiYWNrX3Rlc3QoYWRhcHRlcik7CisJaWdi X2xvb3BiYWNrX2NsZWFudXAoYWRhcHRlcik7CisKK2Vycl9sb29wYmFjazoKKwlpZ2JfZnJlZV9k ZXNjX3JpbmdzKGFkYXB0ZXIpOworb3V0OgorCXJldHVybiAqZGF0YTsKK30KKworc3RhdGljIGlu dCBpZ2JfbGlua190ZXN0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwgdTY0ICpkYXRhKQor eworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJKmRhdGEgPSAwOworCWlm IChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9pbnRlcm5hbF9zZXJkZXMp IHsKKwkJaW50IGkgPSAwOworCQlody0+bWFjLnNlcmRlc19oYXNfbGluayA9IGZhbHNlOworCisJ CS8qIE9uIHNvbWUgYmxhZGUgc2VydmVyIGRlc2lnbnMsIGxpbmsgZXN0YWJsaXNobWVudAorCQkg KiBjb3VsZCB0YWtlIGFzIGxvbmcgYXMgMi0zIG1pbnV0ZXMgKi8KKwkJZG8geworCQkJaHctPm1h Yy5vcHMuY2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKKwkJCWlmIChody0+bWFjLnNlcmRl c19oYXNfbGluaykKKwkJCQlyZXR1cm4gKmRhdGE7CisJCQltc2xlZXAoMjApOworCQl9IHdoaWxl IChpKysgPCAzNzUwKTsKKworCQkqZGF0YSA9IDE7CisJfSBlbHNlIHsKKwkJaHctPm1hYy5vcHMu Y2hlY2tfZm9yX2xpbmsoJmFkYXB0ZXItPmh3KTsKKwkJaWYgKGh3LT5tYWMuYXV0b25lZykKKwkJ CW1zbGVlcCg0MDAwKTsKKworCQlpZiAoIShyZDMyKEUxMDAwX1NUQVRVUykgJgorCQkgICAgICBF MTAwMF9TVEFUVVNfTFUpKQorCQkJKmRhdGEgPSAxOworCX0KKwlyZXR1cm4gKmRhdGE7Cit9CisK K3N0YXRpYyB2b2lkIGlnYl9kaWFnX3Rlc3Qoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJ CSAgc3RydWN0IGV0aHRvb2xfdGVzdCAqZXRoX3Rlc3QsIHU2NCAqZGF0YSkKK3sKKwlzdHJ1Y3Qg aWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXUxNiBhdXRvbmVn X2FkdmVydGlzZWQ7CisJdTggZm9yY2VkX3NwZWVkX2R1cGxleCwgYXV0b25lZzsKKwlib29sIGlm X3J1bm5pbmcgPSBuZXRpZl9ydW5uaW5nKG5ldGRldik7CisKKwlzZXRfYml0KF9fSUdCX1RFU1RJ TkcsICZhZGFwdGVyLT5zdGF0ZSk7CisJaWYgKGV0aF90ZXN0LT5mbGFncyA9PSBFVEhfVEVTVF9G TF9PRkZMSU5FKSB7CisJCS8qIE9mZmxpbmUgdGVzdHMgKi8KKworCQkvKiBzYXZlIHNwZWVkLCBk dXBsZXgsIGF1dG9uZWcgc2V0dGluZ3MgKi8KKwkJYXV0b25lZ19hZHZlcnRpc2VkID0gYWRhcHRl ci0+aHcucGh5LmF1dG9uZWdfYWR2ZXJ0aXNlZDsKKwkJZm9yY2VkX3NwZWVkX2R1cGxleCA9IGFk YXB0ZXItPmh3Lm1hYy5mb3JjZWRfc3BlZWRfZHVwbGV4OworCQlhdXRvbmVnID0gYWRhcHRlci0+ aHcubWFjLmF1dG9uZWc7CisKKwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIm9mZmxp bmUgdGVzdGluZyBzdGFydGluZ1xuIik7CisKKwkJLyogTGluayB0ZXN0IHBlcmZvcm1lZCBiZWZv cmUgaGFyZHdhcmUgcmVzZXQgc28gYXV0b25lZyBkb2Vzbid0CisJCSAqIGludGVyZmVyZSB3aXRo IHRlc3QgcmVzdWx0ICovCisJCWlmIChpZ2JfbGlua190ZXN0KGFkYXB0ZXIsICZkYXRhWzRdKSkK KwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisKKwkJaWYgKGlmX3J1 bm5pbmcpCisJCQkvKiBpbmRpY2F0ZSB3ZSdyZSBpbiB0ZXN0IG1vZGUgKi8KKwkJCWRldl9jbG9z ZShuZXRkZXYpOworCQllbHNlCisJCQlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwkJaWYgKGlnYl9y ZWdfdGVzdChhZGFwdGVyLCAmZGF0YVswXSkpCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RF U1RfRkxfRkFJTEVEOworCisJCWlnYl9yZXNldChhZGFwdGVyKTsKKwkJaWYgKGlnYl9lZXByb21f dGVzdChhZGFwdGVyLCAmZGF0YVsxXSkpCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1Rf RkxfRkFJTEVEOworCisJCWlnYl9yZXNldChhZGFwdGVyKTsKKwkJaWYgKGlnYl9pbnRyX3Rlc3Qo YWRhcHRlciwgJmRhdGFbMl0pKQorCQkJZXRoX3Rlc3QtPmZsYWdzIHw9IEVUSF9URVNUX0ZMX0ZB SUxFRDsKKworCQlpZ2JfcmVzZXQoYWRhcHRlcik7CisJCWlmIChpZ2JfbG9vcGJhY2tfdGVzdChh ZGFwdGVyLCAmZGF0YVszXSkpCisJCQlldGhfdGVzdC0+ZmxhZ3MgfD0gRVRIX1RFU1RfRkxfRkFJ TEVEOworCisJCS8qIHJlc3RvcmUgc3BlZWQsIGR1cGxleCwgYXV0b25lZyBzZXR0aW5ncyAqLwor CQlhZGFwdGVyLT5ody5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gYXV0b25lZ19hZHZlcnRpc2Vk OworCQlhZGFwdGVyLT5ody5tYWMuZm9yY2VkX3NwZWVkX2R1cGxleCA9IGZvcmNlZF9zcGVlZF9k dXBsZXg7CisJCWFkYXB0ZXItPmh3Lm1hYy5hdXRvbmVnID0gYXV0b25lZzsKKworCQkvKiBmb3Jj ZSB0aGlzIHJvdXRpbmUgdG8gd2FpdCB1bnRpbCBhdXRvbmVnIGNvbXBsZXRlL3RpbWVvdXQgKi8K KwkJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21wbGV0ZSA9IHRydWU7CisJCWln Yl9yZXNldChhZGFwdGVyKTsKKwkJYWRhcHRlci0+aHcucGh5LmF1dG9uZWdfd2FpdF90b19jb21w bGV0ZSA9IGZhbHNlOworCisJCWNsZWFyX2JpdChfX0lHQl9URVNUSU5HLCAmYWRhcHRlci0+c3Rh dGUpOworCQlpZiAoaWZfcnVubmluZykKKwkJCWRldl9vcGVuKG5ldGRldik7CisJfSBlbHNlIHsK KwkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIm9ubGluZSB0ZXN0aW5nIHN0YXJ0aW5n XG4iKTsKKwkJLyogT25saW5lIHRlc3RzICovCisJCWlmIChpZ2JfbGlua190ZXN0KGFkYXB0ZXIs ICZkYXRhWzRdKSkKKwkJCWV0aF90ZXN0LT5mbGFncyB8PSBFVEhfVEVTVF9GTF9GQUlMRUQ7CisK KwkJLyogT25saW5lIHRlc3RzIGFyZW4ndCBydW47IHBhc3MgYnkgZGVmYXVsdCAqLworCQlkYXRh WzBdID0gMDsKKwkJZGF0YVsxXSA9IDA7CisJCWRhdGFbMl0gPSAwOworCQlkYXRhWzNdID0gMDsK KworCQljbGVhcl9iaXQoX19JR0JfVEVTVElORywgJmFkYXB0ZXItPnN0YXRlKTsKKwl9CisJbXNs ZWVwX2ludGVycnVwdGlibGUoNCAqIDEwMDApOworfQorCitzdGF0aWMgaW50IGlnYl93b2xfZXhj bHVzaW9uKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCSAgICAgc3RydWN0IGV0aHRv b2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7 CisJaW50IHJldHZhbCA9IDE7IC8qIGZhaWwgYnkgZGVmYXVsdCAqLworCisJc3dpdGNoIChody0+ ZGV2aWNlX2lkKSB7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzVHQl9RVUFEX0NPUFBFUjoKKwkJ LyogV29MIG5vdCBzdXBwb3J0ZWQgKi8KKwkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQlicmVhazsK KwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUVCX0ZJQkVSX1NFUkRFUzoKKwljYXNlIEUxMDAwX0RF Vl9JRF84MjU3Nl9GSUJFUjoKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3Nl9TRVJERVM6CisJCS8q IFdha2UgZXZlbnRzIG5vdCBzdXBwb3J0ZWQgb24gcG9ydCBCICovCisJCWlmIChyZDMyKEUxMDAw X1NUQVRVUykgJiBFMTAwMF9TVEFUVVNfRlVOQ18xKSB7CisJCQl3b2wtPnN1cHBvcnRlZCA9IDA7 CisJCQlicmVhazsKKwkJfQorCQkvKiByZXR1cm4gc3VjY2VzcyBmb3Igbm9uIGV4Y2x1ZGVkIGFk YXB0ZXIgcG9ydHMgKi8KKwkJcmV0dmFsID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZf SURfODI1NzZfUVVBRF9DT1BQRVI6CisJCS8qIHF1YWQgcG9ydCBhZGFwdGVycyBvbmx5IHN1cHBv cnQgV29MIG9uIHBvcnQgQSAqLworCQlpZiAoIShhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX1FV QURfUE9SVF9BKSkgeworCQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKwkJ LyogcmV0dXJuIHN1Y2Nlc3MgZm9yIG5vbiBleGNsdWRlZCBhZGFwdGVyIHBvcnRzICovCisJCXJl dHZhbCA9IDA7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGR1YWwgcG9ydCBjYXJkcyBvbmx5 IHN1cHBvcnQgV29MIG9uIHBvcnQgQSBmcm9tIG5vdyBvbgorCQkgKiB1bmxlc3MgaXQgd2FzIGVu YWJsZWQgaW4gdGhlIGVlcHJvbSBmb3IgcG9ydCBCCisJCSAqIHNvIGV4Y2x1ZGUgRlVOQ18xIHBv cnRzIGZyb20gaGF2aW5nIFdvTCBlbmFibGVkICovCisJCWlmIChyZDMyKEUxMDAwX1NUQVRVUykg JiBFMTAwMF9TVEFUVVNfRlVOQ18xICYmCisJCSAgICAhYWRhcHRlci0+ZWVwcm9tX3dvbCkgewor CQkJd29sLT5zdXBwb3J0ZWQgPSAwOworCQkJYnJlYWs7CisJCX0KKworCQlyZXR2YWwgPSAwOwor CX0KKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9nZXRfd29sKHN0cnVj dCBuZXRfZGV2aWNlICpuZXRkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndvbCkKK3sKKwlz dHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJd29s LT5zdXBwb3J0ZWQgPSBXQUtFX1VDQVNUIHwgV0FLRV9NQ0FTVCB8CisJCQkgV0FLRV9CQ0FTVCB8 IFdBS0VfTUFHSUM7CisJd29sLT53b2xvcHRzID0gMDsKKworCS8qIHRoaXMgZnVuY3Rpb24gd2ls bCBzZXQgLT5zdXBwb3J0ZWQgPSAwIGFuZCByZXR1cm4gMSBpZiB3b2wgaXMgbm90CisJICogc3Vw cG9ydGVkIGJ5IHRoaXMgaGFyZHdhcmUgKi8KKwlpZiAoaWdiX3dvbF9leGNsdXNpb24oYWRhcHRl ciwgd29sKSkKKwkJcmV0dXJuOworCisJLyogYXBwbHkgYW55IHNwZWNpZmljIHVuc3VwcG9ydGVk IG1hc2tzIGhlcmUgKi8KKwlzd2l0Y2ggKGFkYXB0ZXItPmh3LmRldmljZV9pZCkgeworCWRlZmF1 bHQ6CisJCWJyZWFrOworCX0KKworCWlmIChhZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX0VYKQor CQl3b2wtPndvbG9wdHMgfD0gV0FLRV9VQ0FTVDsKKwlpZiAoYWRhcHRlci0+d29sICYgRTEwMDBf V1VGQ19NQykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUNBU1Q7CisJaWYgKGFkYXB0ZXItPndv bCAmIEUxMDAwX1dVRkNfQkMpCisJCXdvbC0+d29sb3B0cyB8PSBXQUtFX0JDQVNUOworCWlmIChh ZGFwdGVyLT53b2wgJiBFMTAwMF9XVUZDX01BRykKKwkJd29sLT53b2xvcHRzIHw9IFdBS0VfTUFH SUM7CisKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbnQgaWdiX3NldF93b2woc3RydWN0IG5ldF9k ZXZpY2UgKm5ldGRldiwgc3RydWN0IGV0aHRvb2xfd29saW5mbyAqd29sKQoreworCXN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAw X2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmICh3b2wtPndvbG9wdHMgJiAoV0FLRV9QSFkg fCBXQUtFX0FSUCB8IFdBS0VfTUFHSUNTRUNVUkUpKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisK KwlpZiAoaWdiX3dvbF9leGNsdXNpb24oYWRhcHRlciwgd29sKSkKKwkJcmV0dXJuIHdvbC0+d29s b3B0cyA/IC1FT1BOT1RTVVBQIDogMDsKKworCXN3aXRjaCAoaHctPmRldmljZV9pZCkgeworCWRl ZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHRoZXNlIHNldHRpbmdzIHdpbGwgYWx3YXlzIG92 ZXJyaWRlIHdoYXQgd2UgY3VycmVudGx5IGhhdmUgKi8KKwlhZGFwdGVyLT53b2wgPSAwOworCisJ aWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfVUNBU1QpCisJCWFkYXB0ZXItPndvbCB8PSBFMTAwMF9X VUZDX0VYOworCWlmICh3b2wtPndvbG9wdHMgJiBXQUtFX01DQVNUKQorCQlhZGFwdGVyLT53b2wg fD0gRTEwMDBfV1VGQ19NQzsKKwlpZiAod29sLT53b2xvcHRzICYgV0FLRV9CQ0FTVCkKKwkJYWRh cHRlci0+d29sIHw9IEUxMDAwX1dVRkNfQkM7CisJaWYgKHdvbC0+d29sb3B0cyAmIFdBS0VfTUFH SUMpCisJCWFkYXB0ZXItPndvbCB8PSBFMTAwMF9XVUZDX01BRzsKKworCXJldHVybiAwOworfQor CisvKiB0b2dnbGUgTEVEIDQgdGltZXMgcGVyIHNlY29uZCA9IDIgImJsaW5rcyIgcGVyIHNlY29u ZCAqLworI2RlZmluZSBJR0JfSURfSU5URVJWQUwJCShIWi80KQorCisvKiBiaXQgZGVmaW5lcyBm b3IgYWRhcHRlci0+bGVkX3N0YXR1cyAqLworI2RlZmluZSBJR0JfTEVEX09OCQkwCisKK3N0YXRp YyBpbnQgaWdiX3BoeXNfaWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgdTMyIGRhdGEpCit7 CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlz dHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCisJaWYgKCFkYXRhIHx8IGRhdGEg PiAodTMyKShNQVhfU0NIRURVTEVfVElNRU9VVCAvIEhaKSkKKwkJZGF0YSA9ICh1MzIpKE1BWF9T Q0hFRFVMRV9USU1FT1VUIC8gSFopOworCisJaWdiX2JsaW5rX2xlZChodyk7CisJbXNsZWVwX2lu dGVycnVwdGlibGUoZGF0YSAqIDEwMDApOworCisJaWdiX2xlZF9vZmYoaHcpOworCWNsZWFyX2Jp dChJR0JfTEVEX09OLCAmYWRhcHRlci0+bGVkX3N0YXR1cyk7CisJaWdiX2NsZWFudXBfbGVkKGh3 KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGlnYl9zZXRfY29hbGVzY2Uoc3RydWN0 IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBzdHJ1Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMp Cit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsK KwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCWludCBpOworCisJaWYgKChl Yy0+cnhfY29hbGVzY2VfdXNlY3MgPiBJR0JfTUFYX0lUUl9VU0VDUykgfHwKKwkgICAgKChlYy0+ cnhfY29hbGVzY2VfdXNlY3MgPiAzKSAmJgorCSAgICAgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA8 IElHQl9NSU5fSVRSX1VTRUNTKSkgfHwKKwkgICAgKGVjLT5yeF9jb2FsZXNjZV91c2VjcyA9PSAy KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBjb252ZXJ0IHRvIHJhdGUgb2YgaXJxJ3MgcGVy IHNlY29uZCAqLworCWlmIChlYy0+cnhfY29hbGVzY2VfdXNlY3MgJiYgZWMtPnJ4X2NvYWxlc2Nl X3VzZWNzIDw9IDMpIHsKKwkJYWRhcHRlci0+aXRyX3NldHRpbmcgPSBlYy0+cnhfY29hbGVzY2Vf dXNlY3M7CisJCWFkYXB0ZXItPml0ciA9IElHQl9TVEFSVF9JVFI7CisJfSBlbHNlIHsKKwkJYWRh cHRlci0+aXRyX3NldHRpbmcgPSBlYy0+cnhfY29hbGVzY2VfdXNlY3MgPDwgMjsKKwkJYWRhcHRl ci0+aXRyID0gYWRhcHRlci0+aXRyX3NldHRpbmc7CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFk YXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJd3IzMihhZGFwdGVyLT5yeF9yaW5nW2ldLml0 cl9yZWdpc3RlciwgYWRhcHRlci0+aXRyKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50 IGlnYl9nZXRfY29hbGVzY2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCSAgICBzdHJ1 Y3QgZXRodG9vbF9jb2FsZXNjZSAqZWMpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVy ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA8PSAz KQorCQllYy0+cnhfY29hbGVzY2VfdXNlY3MgPSBhZGFwdGVyLT5pdHJfc2V0dGluZzsKKwllbHNl CisJCWVjLT5yeF9jb2FsZXNjZV91c2VjcyA9IGFkYXB0ZXItPml0cl9zZXR0aW5nID4+IDI7CisK KwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IGlnYl9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRf ZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2 X3ByaXYobmV0ZGV2KTsKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlpZ2JfcmVpbml0 X2xvY2tlZChhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpZ2JfZ2V0X3N0 YXRzX2NvdW50KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCit7CisJcmV0dXJuIElHQl9TVEFU U19MRU47Cit9CisKK3N0YXRpYyB2b2lkIGlnYl9nZXRfZXRodG9vbF9zdGF0cyhzdHJ1Y3QgbmV0 X2RldmljZSAqbmV0ZGV2LAorCQkJCSAgc3RydWN0IGV0aHRvb2xfc3RhdHMgKnN0YXRzLCB1NjQg KmRhdGEpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0 ZGV2KTsKKwl1NjQgKnF1ZXVlX3N0YXQ7CisJaW50IHN0YXRfY291bnQgPSBzaXplb2Yoc3RydWN0 IGlnYl9xdWV1ZV9zdGF0cykgLyBzaXplb2YodTY0KTsKKwlpbnQgajsKKwlpbnQgaTsKKyNpZmRl ZiBDT05GSUdfSUdCX0xSTworCWludCBhZ2dyZWdhdGVkID0gMCwgZmx1c2hlZCA9IDAsIG5vX2Rl c2MgPSAwOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykg eworCQlhZ2dyZWdhdGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5hZ2dy ZWdhdGVkOworCQlmbHVzaGVkICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5m bHVzaGVkOworCQlub19kZXNjICs9IGFkYXB0ZXItPnJ4X3JpbmdbaV0ubHJvX21nci5zdGF0cy5u b19kZXNjOworCX0KKwlhZGFwdGVyLT5scm9fYWdncmVnYXRlZCA9IGFnZ3JlZ2F0ZWQ7CisJYWRh cHRlci0+bHJvX2ZsdXNoZWQgPSBmbHVzaGVkOworCWFkYXB0ZXItPmxyb19ub19kZXNjID0gbm9f ZGVzYzsKKyNlbmRpZgorCisJaWdiX3VwZGF0ZV9zdGF0cyhhZGFwdGVyKTsKKwlmb3IgKGkgPSAw OyBpIDwgSUdCX0dMT0JBTF9TVEFUU19MRU47IGkrKykgeworCQljaGFyICpwID0gKGNoYXIgKilh ZGFwdGVyK2lnYl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X29mZnNldDsKKwkJZGF0YVtpXSA9IChp Z2JfZ3N0cmluZ3Nfc3RhdHNbaV0uc2l6ZW9mX3N0YXQgPT0KKwkJCXNpemVvZih1NjQpKSA/ICoo dTY0ICopcCA6ICoodTMyICopcDsKKwl9CisJZm9yIChqID0gMDsgaiA8IGFkYXB0ZXItPm51bV9y eF9xdWV1ZXM7IGorKykgeworCQlpbnQgazsKKwkJcXVldWVfc3RhdCA9ICh1NjQgKikmYWRhcHRl ci0+cnhfcmluZ1tqXS5yeF9zdGF0czsKKwkJZm9yIChrID0gMDsgayA8IHN0YXRfY291bnQ7IGsr KykKKwkJCWRhdGFbaSArIGtdID0gcXVldWVfc3RhdFtrXTsKKwkJaSArPSBrOworCX0KK30KKwor c3RhdGljIHZvaWQgaWdiX2dldF9zdHJpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHUz MiBzdHJpbmdzZXQsIHU4ICpkYXRhKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9 IG5ldGRldl9wcml2KG5ldGRldik7CisJdTggKnAgPSBkYXRhOworCWludCBpOworCisJc3dpdGNo IChzdHJpbmdzZXQpIHsKKwljYXNlIEVUSF9TU19URVNUOgorCQltZW1jcHkoZGF0YSwgKmlnYl9n c3RyaW5nc190ZXN0LAorCQkJSUdCX1RFU1RfTEVOKkVUSF9HU1RSSU5HX0xFTik7CisJCWJyZWFr OworCWNhc2UgRVRIX1NTX1NUQVRTOgorCQlmb3IgKGkgPSAwOyBpIDwgSUdCX0dMT0JBTF9TVEFU U19MRU47IGkrKykgeworCQkJbWVtY3B5KHAsIGlnYl9nc3RyaW5nc19zdGF0c1tpXS5zdGF0X3N0 cmluZywKKwkJCSAgICAgICBFVEhfR1NUUklOR19MRU4pOworCQkJcCArPSBFVEhfR1NUUklOR19M RU47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9xdWV1ZXM7IGkrKykg eworCQkJc3ByaW50ZihwLCAidHhfcXVldWVfJXVfcGFja2V0cyIsIGkpOworCQkJcCArPSBFVEhf R1NUUklOR19MRU47CisJCQlzcHJpbnRmKHAsICJ0eF9xdWV1ZV8ldV9ieXRlcyIsIGkpOworCQkJ cCArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51 bV9yeF9xdWV1ZXM7IGkrKykgeworCQkJc3ByaW50ZihwLCAicnhfcXVldWVfJXVfcGFja2V0cyIs IGkpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCQlzcHJpbnRmKHAsICJyeF9xdWV1ZV8l dV9ieXRlcyIsIGkpOworCQkJcCArPSBFVEhfR1NUUklOR19MRU47CisJCX0KKy8qCQlCVUdfT04o cCAtIGRhdGEgIT0gSUdCX1NUQVRTX0xFTiAqIEVUSF9HU1RSSU5HX0xFTik7ICovCisJCWJyZWFr OworCX0KK30KKworc3RhdGljIHN0cnVjdCBldGh0b29sX29wcyBpZ2JfZXRodG9vbF9vcHMgPSB7 CisJLmdldF9zZXR0aW5ncyAgICAgICAgICAgPSBpZ2JfZ2V0X3NldHRpbmdzLAorCS5zZXRfc2V0 dGluZ3MgICAgICAgICAgID0gaWdiX3NldF9zZXR0aW5ncywKKwkuZ2V0X2RydmluZm8gICAgICAg ICAgICA9IGlnYl9nZXRfZHJ2aW5mbywKKwkuZ2V0X3JlZ3NfbGVuICAgICAgICAgICA9IGlnYl9n ZXRfcmVnc19sZW4sCisJLmdldF9yZWdzICAgICAgICAgICAgICAgPSBpZ2JfZ2V0X3JlZ3MsCisJ LmdldF93b2wgICAgICAgICAgICAgICAgPSBpZ2JfZ2V0X3dvbCwKKwkuc2V0X3dvbCAgICAgICAg ICAgICAgICA9IGlnYl9zZXRfd29sLAorCS5nZXRfbXNnbGV2ZWwgICAgICAgICAgID0gaWdiX2dl dF9tc2dsZXZlbCwKKwkuc2V0X21zZ2xldmVsICAgICAgICAgICA9IGlnYl9zZXRfbXNnbGV2ZWws CisJLm53YXlfcmVzZXQgICAgICAgICAgICAgPSBpZ2JfbndheV9yZXNldCwKKwkuZ2V0X2xpbmsg ICAgICAgICAgICAgICA9IGV0aHRvb2xfb3BfZ2V0X2xpbmssCisJLmdldF9lZXByb21fbGVuICAg ICAgICAgPSBpZ2JfZ2V0X2VlcHJvbV9sZW4sCisJLmdldF9lZXByb20gICAgICAgICAgICAgPSBp Z2JfZ2V0X2VlcHJvbSwKKwkuc2V0X2VlcHJvbSAgICAgICAgICAgICA9IGlnYl9zZXRfZWVwcm9t LAorCS5nZXRfcmluZ3BhcmFtICAgICAgICAgID0gaWdiX2dldF9yaW5ncGFyYW0sCisJLnNldF9y aW5ncGFyYW0gICAgICAgICAgPSBpZ2Jfc2V0X3JpbmdwYXJhbSwKKwkuZ2V0X3BhdXNlcGFyYW0g ICAgICAgICA9IGlnYl9nZXRfcGF1c2VwYXJhbSwKKwkuc2V0X3BhdXNlcGFyYW0gICAgICAgICA9 IGlnYl9zZXRfcGF1c2VwYXJhbSwKKwkuZ2V0X3J4X2NzdW0gICAgICAgICAgICA9IGlnYl9nZXRf cnhfY3N1bSwKKwkuc2V0X3J4X2NzdW0gICAgICAgICAgICA9IGlnYl9zZXRfcnhfY3N1bSwKKwku Z2V0X3R4X2NzdW0gICAgICAgICAgICA9IGlnYl9nZXRfdHhfY3N1bSwKKwkuc2V0X3R4X2NzdW0g ICAgICAgICAgICA9IGlnYl9zZXRfdHhfY3N1bSwKKwkuZ2V0X3NnICAgICAgICAgICAgICAgICA9 IGV0aHRvb2xfb3BfZ2V0X3NnLAorCS5zZXRfc2cgICAgICAgICAgICAgICAgID0gZXRodG9vbF9v cF9zZXRfc2csCisJLmdldF90c28gICAgICAgICAgICAgICAgPSBldGh0b29sX29wX2dldF90c28s CisJLnNldF90c28gICAgICAgICAgICAgICAgPSBpZ2Jfc2V0X3RzbywKKwkuc2VsZl90ZXN0ICAg ICAgICAgICAgICA9IGlnYl9kaWFnX3Rlc3QsCisJLmdldF9zdHJpbmdzICAgICAgICAgICAgPSBp Z2JfZ2V0X3N0cmluZ3MsCisJLnBoeXNfaWQgICAgICAgICAgICAgICAgPSBpZ2JfcGh5c19pZCwK KwkuZ2V0X3N0YXRzX2NvdW50ICAgICAgICA9IGlnYl9nZXRfc3RhdHNfY291bnQsCisJLmdldF9l dGh0b29sX3N0YXRzICAgICAgPSBpZ2JfZ2V0X2V0aHRvb2xfc3RhdHMsCisJLmdldF9jb2FsZXNj ZSAgICAgICAgICAgPSBpZ2JfZ2V0X2NvYWxlc2NlLAorCS5zZXRfY29hbGVzY2UgICAgICAgICAg ID0gaWdiX3NldF9jb2FsZXNjZSwKK307CisKK3ZvaWQgaWdiX3NldF9ldGh0b29sX29wcyhzdHJ1 Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCVNFVF9FVEhUT09MX09QUyhuZXRkZXYsICZpZ2Jf ZXRodG9vbF9vcHMpOworfQpkaWZmIC1yIGFmNzQzZDE0YWE4YyBkcml2ZXJzL25ldC9pZ2IvaWdi X21haW4uYwotLS0gL2Rldi9udWxsCVRodSBKYW4gMDEgMDA6MDA6MDAgMTk3MCArMDAwMAorKysg Yi9kcml2ZXJzL25ldC9pZ2IvaWdiX21haW4uYwlUaHUgRmViIDEyIDAzOjAyOjE0IDIwMDkgLTA1 MDAKQEAgLTAsMCArMSw0MzQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisgIEludGVs KFIpIEdpZ2FiaXQgRXRoZXJuZXQgTGludXggZHJpdmVyCisgIENvcHlyaWdodChjKSAyMDA3IElu dGVsIENvcnBvcmF0aW9uLgorCisgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBh bmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisgIHZlcnNp b24gMiwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAg VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVAorICBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3 YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKKyAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvcgorICBtb3Jl IGRldGFpbHMuCisKKyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAorICB0aGlzIHByb2dyYW07IGlmIG5v dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgNTEgRnJh bmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KKworICBU aGUgZnVsbCBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGlzIGRp c3RyaWJ1dGlvbiBpbgorICB0aGUgZmlsZSBjYWxsZWQgIkNPUFlJTkciLgorCisgIENvbnRhY3Qg SW5mb3JtYXRpb246CisgIGUxMDAwLWRldmVsIE1haWxpbmcgTGlzdCA8ZTEwMDAtZGV2ZWxAbGlz dHMuc291cmNlZm9yZ2UubmV0PgorICBJbnRlbCBDb3Jwb3JhdGlvbiwgNTIwMCBOLkUuIEVsYW0g WW91bmcgUGFya3dheSwgSGlsbHNib3JvLCBPUiA5NzEyNC02NDk3CisKKyoqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKiovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90 eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC92bWFsbG9j Lmg+CisjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGRldmlj ZS5oPgorI2luY2x1ZGUgPGxpbnV4L2lwdjYuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4K KyNpbmNsdWRlIDxuZXQvaXA2X2NoZWNrc3VtLmg+CisjaW5jbHVkZSA8bGludXgvbWlpLmg+Cisj aW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3ZsYW4uaD4KKyNp bmNsdWRlIDxsaW51eC9wY2kuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUg PGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVk ZSAiaWdiLmgiCisKKyNkZWZpbmUgRFJWX1ZFUlNJT04gIjEuMi40NS1rMiIKK2NoYXIgaWdiX2Ry aXZlcl9uYW1lW10gPSAiaWdiIjsKK2NoYXIgaWdiX2RyaXZlcl92ZXJzaW9uW10gPSBEUlZfVkVS U0lPTjsKK3N0YXRpYyBjb25zdCBjaGFyIGlnYl9kcml2ZXJfc3RyaW5nW10gPQorCQkJCSJJbnRl bChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIjsKK3N0YXRpYyBjb25zdCBjaGFy IGlnYl9jb3B5cmlnaHRbXSA9ICJDb3B5cmlnaHQgKGMpIDIwMDggSW50ZWwgQ29ycG9yYXRpb24u IjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBlMTAwMF9pbmZvICppZ2JfaW5mb190YmxbXSA9IHsK KwlbYm9hcmRfODI1NzVdID0gJmUxMDAwXzgyNTc1X2luZm8sCit9OworCitzdGF0aWMgc3RydWN0 IHBjaV9kZXZpY2VfaWQgaWdiX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBF MTAwMF9ERVZfSURfODI1NzYpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUws IEUxMDAwX0RFVl9JRF84MjU3Nl9GSUJFUiksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklD RShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCisJeyBQ Q0lfVkRFVklDRShJTlRFTCwgRTEwMDBfREVWX0lEXzgyNTc2X1FVQURfQ09QUEVSKSwgYm9hcmRf ODI1NzUgfSwKKwl7IFBDSV9WREVWSUNFKElOVEVMLCBFMTAwMF9ERVZfSURfODI1NzVFQl9DT1BQ RVIpLCBib2FyZF84MjU3NSB9LAorCXsgUENJX1ZERVZJQ0UoSU5URUwsIEUxMDAwX0RFVl9JRF84 MjU3NUVCX0ZJQkVSX1NFUkRFUyksIGJvYXJkXzgyNTc1IH0sCisJeyBQQ0lfVkRFVklDRShJTlRF TCwgRTEwMDBfREVWX0lEXzgyNTc1R0JfUVVBRF9DT1BQRVIpLCBib2FyZF84MjU3NSB9LAorCS8q IHJlcXVpcmVkIGxhc3QgZW50cnkgKi8KKwl7MCwgfQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJM RShwY2ksIGlnYl9wY2lfdGJsKTsKKwordm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYl9hZGFwdGVy ICopOworc3RhdGljIGludCBpZ2Jfc2V0dXBfYWxsX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX2Fk YXB0ZXIgKik7CitzdGF0aWMgaW50IGlnYl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBp Z2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3Ry dWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIHZvaWQgaWdiX2ZyZWVfYWxsX3J4X3Jlc291cmNl cyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgdm9pZCBpZ2JfZnJlZV90eF9yZXNvdXJj ZXMoc3RydWN0IGlnYl9yaW5nICopOworc3RhdGljIHZvaWQgaWdiX2ZyZWVfcnhfcmVzb3VyY2Vz KHN0cnVjdCBpZ2JfcmluZyAqKTsKK3ZvaWQgaWdiX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaWdiX2Fk YXB0ZXIgKik7CitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqLCBjb25zdCBz dHJ1Y3QgcGNpX2RldmljZV9pZCAqKTsKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBpZ2JfcmVtb3Zl KHN0cnVjdCBwY2lfZGV2ICpwZGV2KTsKK3N0YXRpYyBpbnQgaWdiX3N3X2luaXQoc3RydWN0IGln Yl9hZGFwdGVyICopOworc3RhdGljIGludCBpZ2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqKTsK K3N0YXRpYyBpbnQgaWdiX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQg aWdiX2NvbmZpZ3VyZV90eChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgdm9pZCBpZ2Jf Y29uZmlndXJlX3J4KHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9zZXR1 cF9yY3RsKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyB2b2lkIGlnYl9jbGVhbl9hbGxf dHhfcmluZ3Moc3RydWN0IGlnYl9hZGFwdGVyICopOworc3RhdGljIHZvaWQgaWdiX2NsZWFuX2Fs bF9yeF9yaW5ncyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKik7CitzdGF0aWMgdm9pZCBpZ2JfY2xlYW5f dHhfcmluZyhzdHJ1Y3QgaWdiX3JpbmcgKik7CitzdGF0aWMgdm9pZCBpZ2JfY2xlYW5fcnhfcmlu ZyhzdHJ1Y3QgaWdiX3JpbmcgKik7CitzdGF0aWMgdm9pZCBpZ2Jfc2V0X211bHRpKHN0cnVjdCBu ZXRfZGV2aWNlICopOworc3RhdGljIHZvaWQgaWdiX3VwZGF0ZV9waHlfaW5mbyh1bnNpZ25lZCBs b25nKTsKK3N0YXRpYyB2b2lkIGlnYl93YXRjaGRvZyh1bnNpZ25lZCBsb25nKTsKK3N0YXRpYyB2 b2lkIGlnYl93YXRjaGRvZ190YXNrKHN0cnVjdCBpZ2JfYWRhcHRlciAqKTsKK3N0YXRpYyBpbnQg aWdiX3htaXRfZnJhbWVfcmluZ19hZHYoc3RydWN0IHNrX2J1ZmYgKiwgc3RydWN0IG5ldF9kZXZp Y2UgKiwKKwkJCQkgIHN0cnVjdCBpZ2JfcmluZyAqKTsKK3N0YXRpYyBpbnQgaWdiX3htaXRfZnJh bWVfYWR2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICopOworc3RhdGlj IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICppZ2JfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNl ICopOworc3RhdGljIGludCBpZ2JfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQp Oworc3RhdGljIGludCBpZ2Jfc2V0X21hYyhzdHJ1Y3QgbmV0X2RldmljZSAqLCB2b2lkICopOwor c3RhdGljIGlycXJldHVybl90IGlnYl9pbnRyKGludCBpcnEsIHZvaWQgKiwgc3RydWN0IHB0X3Jl Z3MgKik7CitzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX2ludHJfbXNpKGludCBpcnEsIHZvaWQgKiwg c3RydWN0IHB0X3JlZ3MgKik7CitzdGF0aWMgaXJxcmV0dXJuX3QgaWdiX21zaXhfb3RoZXIoaW50 IGlycSwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKK3N0YXRpYyBpcnFyZXR1cm5fdCBpZ2Jf bXNpeF9yeChpbnQgaXJxLCB2b2lkICosIHN0cnVjdCBwdF9yZWdzICopOworc3RhdGljIGlycXJl dHVybl90IGlnYl9tc2l4X3R4KGludCBpcnEsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3MgKik7Citz dGF0aWMgaW50IGlnYl9jbGVhbl9yeF9yaW5nX21zaXgoc3RydWN0IG5ldF9kZXZpY2UgKiwgaW50 ICopOworc3RhdGljIGJvb2wgaWdiX2NsZWFuX3R4X2lycShzdHJ1Y3QgaWdiX3JpbmcgKik7Citz dGF0aWMgaW50IGlnYl9jbGVhbihzdHJ1Y3QgbmV0X2RldmljZSAqLCBpbnQgKik7CitzdGF0aWMg Ym9vbCBpZ2JfY2xlYW5fcnhfaXJxX2FkdihzdHJ1Y3QgaWdiX3JpbmcgKiwgaW50ICosIGludCk7 CitzdGF0aWMgdm9pZCBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICos IGludCk7CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KK3N0YXRpYyBpbnQgaWdiX2dldF9za2JfaGRy KHN0cnVjdCBza19idWZmICpza2IsIHZvaWQgKiosIHZvaWQgKiosIHU2NCAqLCB2b2lkICopOwor I2VuZGlmCitzdGF0aWMgaW50IGlnYl9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqLCBzdHJ1Y3Qg aWZyZXEgKiwgaW50IGNtZCk7CitzdGF0aWMgdm9pZCBpZ2JfdHhfdGltZW91dChzdHJ1Y3QgbmV0 X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIGlnYl9yZXNldF90YXNrKHN0cnVjdCBpZ2JfYWRhcHRl ciAqKTsKK3N0YXRpYyB2b2lkIGlnYl92bGFuX3J4X3JlZ2lzdGVyKHN0cnVjdCBuZXRfZGV2aWNl ICosIHN0cnVjdCB2bGFuX2dyb3VwICopOworc3RhdGljIHZvaWQgaWdiX3ZsYW5fcnhfYWRkX3Zp ZChzdHJ1Y3QgbmV0X2RldmljZSAqLCB1MTYpOworc3RhdGljIHZvaWQgaWdiX3ZsYW5fcnhfa2ls bF92aWQoc3RydWN0IG5ldF9kZXZpY2UgKiwgdTE2KTsKK3N0YXRpYyB2b2lkIGlnYl9yZXN0b3Jl X3ZsYW4oc3RydWN0IGlnYl9hZGFwdGVyICopOworCitzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0 cnVjdCBwY2lfZGV2ICosIHBtX21lc3NhZ2VfdCk7CisjaWZkZWYgQ09ORklHX1BNCitzdGF0aWMg aW50IGlnYl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKik7CisjZW5kaWYKK3N0YXRpYyB2b2lkIGln Yl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqKTsKKworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9D T05UUk9MTEVSCisvKiBmb3IgbmV0ZHVtcCAvIG5ldCBjb25zb2xlICovCitzdGF0aWMgdm9pZCBp Z2JfbmV0cG9sbChzdHJ1Y3QgbmV0X2RldmljZSAqKTsKKyNlbmRpZgorCitzdGF0aWMgcGNpX2Vy c19yZXN1bHRfdCBpZ2JfaW9fZXJyb3JfZGV0ZWN0ZWQoc3RydWN0IHBjaV9kZXYgKiwKKwkJICAg ICBwY2lfY2hhbm5lbF9zdGF0ZV90KTsKK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19z bG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICopOworc3RhdGljIHZvaWQgaWdiX2lvX3Jlc3VtZShz dHJ1Y3QgcGNpX2RldiAqKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZXJyb3JfaGFuZGxlcnMgaWdi X2Vycl9oYW5kbGVyID0geworCS5lcnJvcl9kZXRlY3RlZCA9IGlnYl9pb19lcnJvcl9kZXRlY3Rl ZCwKKwkuc2xvdF9yZXNldCA9IGlnYl9pb19zbG90X3Jlc2V0LAorCS5yZXN1bWUgPSBpZ2JfaW9f cmVzdW1lLAorfTsKKworCitzdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgaWdiX2RyaXZlciA9IHsK KwkubmFtZSAgICAgPSBpZ2JfZHJpdmVyX25hbWUsCisJLmlkX3RhYmxlID0gaWdiX3BjaV90Ymws CisJLnByb2JlICAgID0gaWdiX3Byb2JlLAorCS5yZW1vdmUgICA9IF9fZGV2ZXhpdF9wKGlnYl9y ZW1vdmUpLAorI2lmZGVmIENPTkZJR19QTQorCS8qIFBvd2VyIE1hbmFnbWVudCBIb29rcyAqLwor CS5zdXNwZW5kICA9IGlnYl9zdXNwZW5kLAorCS5yZXN1bWUgICA9IGlnYl9yZXN1bWUsCisjZW5k aWYKKwkuc2h1dGRvd24gPSBpZ2Jfc2h1dGRvd24sCisJLmVycl9oYW5kbGVyID0gJmlnYl9lcnJf aGFuZGxlcgorfTsKKworc3RhdGljIGludCBnbG9iYWxfcXVhZF9wb3J0X2E7IC8qIGdsb2JhbCBx dWFkIHBvcnQgYSBpbmRpY2F0aW9uICovCisKK01PRFVMRV9BVVRIT1IoIkludGVsIENvcnBvcmF0 aW9uLCA8ZTEwMDAtZGV2ZWxAbGlzdHMuc291cmNlZm9yZ2UubmV0PiIpOworTU9EVUxFX0RFU0NS SVBUSU9OKCJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgRHJpdmVyIik7CitNT0RV TEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfVkVSU0lPTihEUlZfVkVSU0lPTik7CisKKyNpZmRl ZiBERUJVRworLyoqCisgKiBpZ2JfZ2V0X2h3X2Rldl9uYW1lIC0gcmV0dXJuIGRldmljZSBuYW1l IHN0cmluZworICogdXNlZCBieSBoYXJkd2FyZSBsYXllciB0byBwcmludCBkZWJ1Z2dpbmcgaW5m b3JtYXRpb24KKyAqKi8KK2NoYXIgKmlnYl9nZXRfaHdfZGV2X25hbWUoc3RydWN0IGUxMDAwX2h3 ICpodykKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBody0+YmFjazsKKwlyZXR1 cm4gYWRhcHRlci0+bmV0ZGV2LT5uYW1lOworfQorI2VuZGlmCisKKy8qKgorICogaWdiX2luaXRf bW9kdWxlIC0gRHJpdmVyIFJlZ2lzdHJhdGlvbiBSb3V0aW5lCisgKgorICogaWdiX2luaXRfbW9k dWxlIGlzIHRoZSBmaXJzdCByb3V0aW5lIGNhbGxlZCB3aGVuIHRoZSBkcml2ZXIgaXMKKyAqIGxv YWRlZC4gQWxsIGl0IGRvZXMgaXMgcmVnaXN0ZXIgd2l0aCB0aGUgUENJIHN1YnN5c3RlbS4KKyAq Ki8KK3N0YXRpYyBpbnQgX19pbml0IGlnYl9pbml0X21vZHVsZSh2b2lkKQoreworCWludCByZXQ7 CisJcHJpbnRrKEtFUk5fSU5GTyAiJXMgLSB2ZXJzaW9uICVzXG4iLAorCSAgICAgICBpZ2JfZHJp dmVyX3N0cmluZywgaWdiX2RyaXZlcl92ZXJzaW9uKTsKKworCXByaW50ayhLRVJOX0lORk8gIiVz XG4iLCBpZ2JfY29weXJpZ2h0KTsKKworCWdsb2JhbF9xdWFkX3BvcnRfYSA9IDA7CisKKwlyZXQg PSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZpZ2JfZHJpdmVyKTsKKwlyZXR1cm4gcmV0OworfQorCitt b2R1bGVfaW5pdChpZ2JfaW5pdF9tb2R1bGUpOworCisvKioKKyAqIGlnYl9leGl0X21vZHVsZSAt IERyaXZlciBFeGl0IENsZWFudXAgUm91dGluZQorICoKKyAqIGlnYl9leGl0X21vZHVsZSBpcyBj YWxsZWQganVzdCBiZWZvcmUgdGhlIGRyaXZlciBpcyByZW1vdmVkCisgKiBmcm9tIG1lbW9yeS4K KyAqKi8KK3N0YXRpYyB2b2lkIF9fZXhpdCBpZ2JfZXhpdF9tb2R1bGUodm9pZCkKK3sKKwlwY2lf dW5yZWdpc3Rlcl9kcml2ZXIoJmlnYl9kcml2ZXIpOworfQorCittb2R1bGVfZXhpdChpZ2JfZXhp dF9tb2R1bGUpOworCisvKioKKyAqIGlnYl9hbGxvY19xdWV1ZXMgLSBBbGxvY2F0ZSBtZW1vcnkg Zm9yIGFsbCByaW5ncworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlIHRvIGlu aXRpYWxpemUKKyAqCisgKiBXZSBhbGxvY2F0ZSBvbmUgcmluZyBwZXIgcXVldWUgYXQgcnVuLXRp bWUgc2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUKKyAqIG51bWJlciBvZiBxdWV1ZXMgYXQgY29tcGls ZS10aW1lLgorICoqLworc3RhdGljIGludCBpZ2JfYWxsb2NfcXVldWVzKHN0cnVjdCBpZ2JfYWRh cHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWFkYXB0ZXItPnR4X3JpbmcgPSBrY2FsbG9j KGFkYXB0ZXItPm51bV90eF9xdWV1ZXMsCisJCQkJICAgc2l6ZW9mKHN0cnVjdCBpZ2JfcmluZyks IEdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+dHhfcmluZykKKwkJcmV0dXJuIC1FTk9NRU07 CisKKwlhZGFwdGVyLT5yeF9yaW5nID0ga2NhbGxvYyhhZGFwdGVyLT5udW1fcnhfcXVldWVzLAor CQkJCSAgIHNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFkYXB0 ZXItPnJ4X3JpbmcpIHsKKwkJa2ZyZWUoYWRhcHRlci0+dHhfcmluZyk7CisJCXJldHVybiAtRU5P TUVNOworCX0KKworCWFkYXB0ZXItPnJ4X3JpbmctPmJ1ZGR5ID0gYWRhcHRlci0+dHhfcmluZzsK KworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJc3Ry dWN0IGlnYl9yaW5nICpyaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJcmluZy0+YWRh cHRlciA9IGFkYXB0ZXI7CisJCXJpbmctPml0cl9yZWdpc3RlciA9IEUxMDAwX0lUUjsKKworCQly aW5nLT5uZXRkZXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZSksIEdGUF9LRVJO RUwpOworCQlpZiAoIXJpbmctPm5ldGRldikKKwkJCWdvdG8gZXJyOworCisJCXJpbmctPm5ldGRl di0+cHJpdiA9ICh2b2lkICopcmluZzsKKwkJcmluZy0+bmV0ZGV2LT5wb2xsID0gaWdiX2NsZWFu OworCQlyaW5nLT5uZXRkZXYtPndlaWdodCA9IGFkYXB0ZXItPm5ldGRldi0+d2VpZ2h0IC8KKwkJ CQkgICAgICAgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsKKwkJZGV2X2hvbGQocmluZy0+bmV0ZGV2 KTsKKwkJc2V0X2JpdChfX0xJTktfU1RBVEVfU1RBUlQsICZyaW5nLT5uZXRkZXYtPnN0YXRlKTsK Kwl9CisgICAgICAgIHJldHVybiAwOworCitlcnI6CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXIt Pm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmKGFkYXB0 ZXItPnJ4X3JpbmdbaV0pOworCQlrZnJlZShyaW5nLT5uZXRkZXYpOworCX0KKwlrZnJlZShhZGFw dGVyLT5yeF9yaW5nKTsKKwlrZnJlZShhZGFwdGVyLT50eF9yaW5nKTsKK3JldHVybiAtRU5PTUVN OworCit9CisKK3N0YXRpYyB2b2lkIGlnYl9mcmVlX3F1ZXVlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIg KmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4 X3F1ZXVlczsgaSsrKSB7CisJCXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+cnhf cmluZ1tpXSk7CisJCWtmcmVlKHJpbmctPm5ldGRldik7CisJfQorCisJa2ZyZWUoYWRhcHRlci0+ dHhfcmluZyk7CisJa2ZyZWUoYWRhcHRlci0+cnhfcmluZyk7Cit9CisKKyNkZWZpbmUgSUdCX04w X1FVRVVFIC0xCitzdGF0aWMgdm9pZCBpZ2JfYXNzaWduX3ZlY3RvcihzdHJ1Y3QgaWdiX2FkYXB0 ZXIgKmFkYXB0ZXIsIGludCByeF9xdWV1ZSwKKwkJCSAgICAgIGludCB0eF9xdWV1ZSwgaW50IG1z aXhfdmVjdG9yKQoreworCXUzMiBtc2l4Ym0gPSAwOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAm YWRhcHRlci0+aHc7CisJdTMyIGl2YXIsIGluZGV4OworCisJc3dpdGNoIChody0+bWFjLnR5cGUp IHsKKwljYXNlIGUxMDAwXzgyNTc1OgorCQkvKiBUaGUgODI1NzUgYXNzaWducyB2ZWN0b3JzIHVz aW5nIGEgYml0bWFzaywgd2hpY2ggbWF0Y2hlcyB0aGUKKwkJICAgYml0bWFzayBmb3IgdGhlIEVJ Q1IvRUlNUy9FSU1DIHJlZ2lzdGVycy4gIFRvIGFzc2lnbiBvbmUKKwkJICAgb3IgbW9yZSBxdWV1 ZXMgdG8gYSB2ZWN0b3IsIHdlIHdyaXRlIHRoZSBhcHByb3ByaWF0ZSBiaXRzCisJCSAgIGludG8g dGhlIE1TSVhCTSByZWdpc3RlciBmb3IgdGhhdCB2ZWN0b3IuICovCisJCWlmIChyeF9xdWV1ZSA+ IElHQl9OMF9RVUVVRSkgeworCQkJbXNpeGJtID0gRTEwMDBfRUlDUl9SWF9RVUVVRTAgPDwgcnhf cXVldWU7CisJCQlhZGFwdGVyLT5yeF9yaW5nW3J4X3F1ZXVlXS5laW1zX3ZhbHVlID0gbXNpeGJt OworCQl9CisJCWlmICh0eF9xdWV1ZSA+IElHQl9OMF9RVUVVRSkgeworCQkJbXNpeGJtIHw9IEUx MDAwX0VJQ1JfVFhfUVVFVUUwIDw8IHR4X3F1ZXVlOworCQkJYWRhcHRlci0+dHhfcmluZ1t0eF9x dWV1ZV0uZWltc192YWx1ZSA9CisJCQkJICBFMTAwMF9FSUNSX1RYX1FVRVVFMCA8PCB0eF9xdWV1 ZTsKKwkJfQorCQlhcnJheV93cjMyKEUxMDAwX01TSVhCTSgwKSwgbXNpeF92ZWN0b3IsIG1zaXhi bSk7CisJCWJyZWFrOworCWNhc2UgZTEwMDBfODI1NzY6CisJCS8qIFRoZSA4MjU3NiB1c2VzIGEg dGFibGUtYmFzZWQgbWV0aG9kIGZvciBhc3NpZ25pbmcgdmVjdG9ycy4KKwkJICAgRWFjaCBxdWV1 ZSBoYXMgYSBzaW5nbGUgZW50cnkgaW4gdGhlIHRhYmxlIHRvIHdoaWNoIHdlIHdyaXRlCisJCSAg IGEgdmVjdG9yIG51bWJlciBhbG9uZyB3aXRoIGEgInZhbGlkIiBiaXQuICBTYWRseSwgdGhlIGxh eW91dAorCQkgICBvZiB0aGUgdGFibGUgaXMgc29tZXdoYXQgY291bnRlcmludHVpdGl2ZS4gKi8K KwkJaWYgKHJ4X3F1ZXVlID4gSUdCX04wX1FVRVVFKSB7CisJCQlpbmRleCA9IChyeF9xdWV1ZSAm IDB4Nyk7CisJCQlpdmFyID0gYXJyYXlfcmQzMihFMTAwMF9JVkFSMCwgaW5kZXgpOworCQkJaWYg KHJ4X3F1ZXVlIDwgOCkgeworCQkJCS8qIHZlY3RvciBnb2VzIGludG8gbG93IGJ5dGUgb2YgcmVn aXN0ZXIgKi8KKwkJCQlpdmFyID0gaXZhciAmIDB4RkZGRkZGMDA7CisJCQkJaXZhciB8PSBtc2l4 X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQ7CisJCQl9IGVsc2UgeworCQkJCS8qIHZlY3RvciBn b2VzIGludG8gdGhpcmQgYnl0ZSBvZiByZWdpc3RlciAqLworCQkJCWl2YXIgPSBpdmFyICYgMHhG RjAwRkZGRjsKKwkJCQlpdmFyIHw9IChtc2l4X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQpIDw8 IDE2OworCQkJfQorCQkJYWRhcHRlci0+cnhfcmluZ1tyeF9xdWV1ZV0uZWltc192YWx1ZT0gMSA8 PCBtc2l4X3ZlY3RvcjsKKwkJCWFycmF5X3dyMzIoRTEwMDBfSVZBUjAsIGluZGV4LCBpdmFyKTsK KwkJfQorCQlpZiAodHhfcXVldWUgPiBJR0JfTjBfUVVFVUUpIHsKKwkJCWluZGV4ID0gKHR4X3F1 ZXVlICYgMHg3KTsKKwkJCWl2YXIgPSBhcnJheV9yZDMyKEUxMDAwX0lWQVIwLCBpbmRleCk7CisJ CQlpZiAodHhfcXVldWUgPCA4KSB7CisJCQkJLyogdmVjdG9yIGdvZXMgaW50byBzZWNvbmQgYnl0 ZSBvZiByZWdpc3RlciAqLworCQkJCWl2YXIgPSBpdmFyICYgMHhGRkZGMDBGRjsKKwkJCQlpdmFy IHw9IChtc2l4X3ZlY3RvciB8IEUxMDAwX0lWQVJfVkFMSUQpIDw8IDg7CisJCQl9IGVsc2Ugewor CQkJCS8qIHZlY3RvciBnb2VzIGludG8gaGlnaCBieXRlIG9mIHJlZ2lzdGVyICovCisJCQkJaXZh ciA9IGl2YXIgJiAweDAwRkZGRkZGOworCQkJCWl2YXIgfD0gKG1zaXhfdmVjdG9yIHwgRTEwMDBf SVZBUl9WQUxJRCkgPDwgMjQ7CisJCQl9CisJCQlhZGFwdGVyLT50eF9yaW5nW3R4X3F1ZXVlXS5l aW1zX3ZhbHVlPSAxIDw8IG1zaXhfdmVjdG9yOworCQkJYXJyYXlfd3IzMihFMTAwMF9JVkFSMCwg aW5kZXgsIGl2YXIpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCUJVRygpOworCQlicmVh azsKKwl9Cit9CisKKy8qKgorICogaWdiX2NvbmZpZ3VyZV9tc2l4IC0gQ29uZmlndXJlIE1TSS1Y IGhhcmR3YXJlCisgKgorICogaWdiX2NvbmZpZ3VyZV9tc2l4IHNldHMgdXAgdGhlIGhhcmR3YXJl IHRvIHByb3Blcmx5CisgKiBnZW5lcmF0ZSBNU0ktWCBpbnRlcnJ1cHRzLgorICoqLworc3RhdGlj IHZvaWQgaWdiX2NvbmZpZ3VyZV9tc2l4KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sK Kwl1MzIgdG1wOworCWludCBpLCB2ZWN0b3IgPSAwOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAm YWRhcHRlci0+aHc7CisKKwlhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrID0gMDsKKwlpZiAoaHct Pm1hYy50eXBlID09IGUxMDAwXzgyNTc2KQorCQkvKiBUdXJuIG9uIE1TSS1YIGNhcGFiaWxpdHkg Zmlyc3QsIG9yIG91ciBzZXR0aW5ncworCQkgKiB3b24ndCBzdGljay4gIEFuZCBpdCB3aWxsIHRh a2UgZGF5cyB0byBkZWJ1Zy4gKi8KKwkJd3IzMihFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhf TU9ERSB8CisJCQkJICAgRTEwMDBfR1BJRV9QQkEgfCBFMTAwMF9HUElFX0VJQU1FIHwgCisgCQkJ CSAgIEUxMDAwX0dQSUVfTlNJQ1IpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90 eF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSAmYWRhcHRlci0+ dHhfcmluZ1tpXTsKKwkJaWdiX2Fzc2lnbl92ZWN0b3IoYWRhcHRlciwgSUdCX04wX1FVRVVFLCBp LCB2ZWN0b3IrKyk7CisJCWFkYXB0ZXItPmVpbXNfZW5hYmxlX21hc2sgfD0gdHhfcmluZy0+ZWlt c192YWx1ZTsKKwkJaWYgKHR4X3JpbmctPml0cl92YWwpCisJCQl3cml0ZWwodHhfcmluZy0+aXRy X3ZhbCwKKwkJCSAgICAgICBody0+aHdfYWRkciArIHR4X3JpbmctPml0cl9yZWdpc3Rlcik7CisJ CWVsc2UKKwkJCXdyaXRlbCgxLCBody0+aHdfYWRkciArIHR4X3JpbmctPml0cl9yZWdpc3Rlcik7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykgewor CQlzdHJ1Y3QgaWdiX3JpbmcgKnJ4X3JpbmcgPSAmYWRhcHRlci0+cnhfcmluZ1tpXTsKKwkJcnhf cmluZy0+YnVkZHkgPSBOVUxMOworCQlpZ2JfYXNzaWduX3ZlY3RvcihhZGFwdGVyLCBpLCBJR0Jf TjBfUVVFVUUsIHZlY3RvcisrKTsKKwkJYWRhcHRlci0+ZWltc19lbmFibGVfbWFzayB8PSByeF9y aW5nLT5laW1zX3ZhbHVlOworCQlpZiAocnhfcmluZy0+aXRyX3ZhbCkKKwkJCXdyaXRlbChyeF9y aW5nLT5pdHJfdmFsLAorCQkJICAgICAgIGh3LT5od19hZGRyICsgcnhfcmluZy0+aXRyX3JlZ2lz dGVyKTsKKwkJZWxzZQorCQkJd3JpdGVsKDEsIGh3LT5od19hZGRyICsgcnhfcmluZy0+aXRyX3Jl Z2lzdGVyKTsKKwl9CisKKworCS8qIHNldCB2ZWN0b3IgZm9yIG90aGVyIGNhdXNlcywgaS5lLiBs aW5rIGNoYW5nZXMgKi8KKwlzd2l0Y2ggKGh3LT5tYWMudHlwZSkgeworCWNhc2UgZTEwMDBfODI1 NzU6CisJCWFycmF5X3dyMzIoRTEwMDBfTVNJWEJNKDApLCB2ZWN0b3IrKywKKwkJCQkgICAgICBF MTAwMF9FSU1TX09USEVSKTsKKworCQkvKiBkaXNhYmxlIElBTSBmb3IgSUNSIGludGVycnVwdCBi aXRzICovCisJCXdyMzIoRTEwMDBfSUFNLCAwKTsKKworCQl0bXAgPSByZDMyKEUxMDAwX0NUUkxf RVhUKTsKKwkJLyogZW5hYmxlIE1TSS1YIFBCQSBzdXBwb3J0Ki8KKwkJdG1wIHw9IEUxMDAwX0NU UkxfRVhUX1BCQV9DTFI7CisKKwkJLyogQXV0by1NYXNrIGludGVycnVwdHMgdXBvbiBJQ1IgcmVh ZC4gKi8KKwkJdG1wIHw9IEUxMDAwX0NUUkxfRVhUX0VJQU1FOworCQl0bXAgfD0gRTEwMDBfQ1RS TF9FWFRfSVJDQTsKKworCQl3cjMyKEUxMDAwX0NUUkxfRVhULCB0bXApOworCQlhZGFwdGVyLT5l aW1zX2VuYWJsZV9tYXNrIHw9IEUxMDAwX0VJTVNfT1RIRVI7CisKKwkJYnJlYWs7CisKKwljYXNl IGUxMDAwXzgyNTc2OgorCQl0bXAgPSAodmVjdG9yKysgfCBFMTAwMF9JVkFSX1ZBTElEKSA8PCA4 OworCQl3cjMyKEUxMDAwX0lWQVJfTUlTQywgdG1wKTsKKworCQlhZGFwdGVyLT5laW1zX2VuYWJs ZV9tYXNrID0gKDEgPDwgKHZlY3RvcikpIC0gMTsKKwkJYWRhcHRlci0+ZWltc19vdGhlciA9IDEg PDwgKHZlY3RvciAtIDEpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBkbyBub3RoaW5nLCBz aW5jZSBub3RoaW5nIGVsc2Ugc3VwcG9ydHMgTVNJLVggKi8KKwkJYnJlYWs7CisJfSAvKiBzd2l0 Y2ggKGh3LT5tYWMudHlwZSkgKi8KKwl3cmZsKCk7Cit9CisKKy8qKgorICogaWdiX3JlcXVlc3Rf bXNpeCAtIEluaXRpYWxpemUgTVNJLVggaW50ZXJydXB0cworICoKKyAqIGlnYl9yZXF1ZXN0X21z aXggYWxsb2NhdGVzIE1TSS1YIHZlY3RvcnMgYW5kIHJlcXVlc3RzIGludGVycnVwdHMgZnJvbSB0 aGUKKyAqIGtlcm5lbC4KKyAqKi8KK3N0YXRpYyBpbnQgaWdiX3JlcXVlc3RfbXNpeChzdHJ1Y3Qg aWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFk YXB0ZXItPm5ldGRldjsKKwlpbnQgaSwgZXJyID0gMCwgdmVjdG9yID0gMDsKKworCXZlY3RvciA9 IDA7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1ZXVlczsgaSsrKSB7CisJ CXN0cnVjdCBpZ2JfcmluZyAqcmluZyA9ICYoYWRhcHRlci0+dHhfcmluZ1tpXSk7CisJCXNwcmlu dGYocmluZy0+bmFtZSwgIiVzLXR4JWQiLCBuZXRkZXYtPm5hbWUsIGkpOworCQllcnIgPSByZXF1 ZXN0X2lycShhZGFwdGVyLT5tc2l4X2VudHJpZXNbdmVjdG9yXS52ZWN0b3IsCisJCQkJICAmaWdi X21zaXhfdHgsIDAsIHJpbmctPm5hbWUsCisJCQkJICAmKGFkYXB0ZXItPnR4X3JpbmdbaV0pKTsK KwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9F SVRSKDApICsgKHZlY3RvciA8PCAyKTsKKwkJcmluZy0+aXRyX3ZhbCA9IDk3NjsgLyogfjQwMDAg aW50cy9zZWMgKi8KKwkJdmVjdG9yKys7CisJfQorCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5u dW1fcnhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJihhZGFwdGVy LT5yeF9yaW5nW2ldKTsKKwkJaWYgKHN0cmxlbihuZXRkZXYtPm5hbWUpIDwgKElGTkFNU0laIC0g NSkpCisJCQlzcHJpbnRmKHJpbmctPm5ldGRldi0+bmFtZSwgIiVzLXJ4JWQiLCBuZXRkZXYtPm5h bWUsIGkpOworCQllbHNlCisJCQltZW1jcHkocmluZy0+bmV0ZGV2LT5uYW1lLCBuZXRkZXYtPm5h bWUsIElGTkFNU0laKTsKKwkJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVz W3ZlY3Rvcl0udmVjdG9yLAorCQkJCSAgJmlnYl9tc2l4X3J4LCAwLCByaW5nLT5uZXRkZXYtPm5h bWUsCisJCQkJICAmKGFkYXB0ZXItPnJ4X3JpbmdbaV0pKTsKKwkJaWYgKGVycikKKwkJCWdvdG8g b3V0OworCQlyaW5nLT5pdHJfcmVnaXN0ZXIgPSBFMTAwMF9FSVRSKDApICsgKHZlY3RvciA8PCAy KTsKKwkJcmluZy0+aXRyX3ZhbCA9IGFkYXB0ZXItPml0cjsKKwkJdmVjdG9yKys7CisJfQorCisJ ZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+bXNpeF9lbnRyaWVzW3ZlY3Rvcl0udmVjdG9yLAor CQkJICAmaWdiX21zaXhfb3RoZXIsIDAsIG5ldGRldi0+bmFtZSwgbmV0ZGV2KTsKKwlpZiAoZXJy KQorCQlnb3RvIG91dDsKKworCWFkYXB0ZXItPm5ldGRldi0+cG9sbCA9IGlnYl9jbGVhbl9yeF9y aW5nX21zaXg7CisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykK KwkJYWRhcHRlci0+cnhfcmluZ1tpXS5uZXRkZXYtPnBvbGwgPSBpZ2JfY2xlYW5fcnhfcmluZ19t c2l4OworCWlnYl9jb25maWd1cmVfbXNpeChhZGFwdGVyKTsKKwlyZXR1cm4gMDsKK291dDoKKwly ZXR1cm4gZXJyOworfQorCitzdGF0aWMgdm9pZCBpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxp dHkoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCWlmIChhZGFwdGVyLT5tc2l4X2Vu dHJpZXMpIHsKKwkJcGNpX2Rpc2FibGVfbXNpeChhZGFwdGVyLT5wZGV2KTsKKwkJa2ZyZWUoYWRh cHRlci0+bXNpeF9lbnRyaWVzKTsKKwkJYWRhcHRlci0+bXNpeF9lbnRyaWVzID0gTlVMTDsKKwl9 IGVsc2UgaWYgKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfSEFTX01TSSkKKwkJcGNpX2Rpc2Fi bGVfbXNpKGFkYXB0ZXItPnBkZXYpOworCXJldHVybjsKK30KKworCisvKioKKyAqIGlnYl9zZXRf aW50ZXJydXB0X2NhcGFiaWxpdHkgLSBzZXQgTVNJIG9yIE1TSS1YIGlmIHN1cHBvcnRlZAorICoK KyAqIEF0dGVtcHQgdG8gY29uZmlndXJlIGludGVycnVwdHMgdXNpbmcgdGhlIGJlc3QgYXZhaWxh YmxlCisgKiBjYXBhYmlsaXRpZXMgb2YgdGhlIGhhcmR3YXJlIGFuZCBrZXJuZWwuCisgKiovCitz dGF0aWMgdm9pZCBpZ2Jfc2V0X2ludGVycnVwdF9jYXBhYmlsaXR5KHN0cnVjdCBpZ2JfYWRhcHRl ciAqYWRhcHRlcikKK3sKKwlpbnQgZXJyOworCWludCBudW12ZWNzLCBpOworCisJbnVtdmVjcyA9 IGFkYXB0ZXItPm51bV90eF9xdWV1ZXMgKyBhZGFwdGVyLT5udW1fcnhfcXVldWVzICsgMTsKKwlh ZGFwdGVyLT5tc2l4X2VudHJpZXMgPSBrY2FsbG9jKG51bXZlY3MsIHNpemVvZihzdHJ1Y3QgbXNp eF9lbnRyeSksCisJCQkJCUdGUF9LRVJORUwpOworCWlmICghYWRhcHRlci0+bXNpeF9lbnRyaWVz KQorCQlnb3RvIG1zaV9vbmx5OworCisJZm9yIChpID0gMDsgaSA8IG51bXZlY3M7IGkrKykKKwkJ YWRhcHRlci0+bXNpeF9lbnRyaWVzW2ldLmVudHJ5ID0gaTsKKworCWVyciA9IHBjaV9lbmFibGVf bXNpeChhZGFwdGVyLT5wZGV2LAorCQkJICAgICAgYWRhcHRlci0+bXNpeF9lbnRyaWVzLAorCQkJ ICAgICAgbnVtdmVjcyk7CisJaWYgKGVyciA9PSAwKQorCQlyZXR1cm47CisKKwlpZ2JfcmVzZXRf aW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisKKwkvKiBJZiB3ZSBjYW4ndCBkbyBNU0kt WCwgdHJ5IE1TSSAqLworbXNpX29ubHk6CisJYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyA9IDE7CisJ aWYgKCFwY2lfZW5hYmxlX21zaShhZGFwdGVyLT5wZGV2KSkKKwkJYWRhcHRlci0+ZmxhZ3MgfD0g SUdCX0ZMQUdfSEFTX01TSTsKKwlyZXR1cm47Cit9CisKKy8qKgorICogaWdiX3JlcXVlc3RfaXJx IC0gaW5pdGlhbGl6ZSBpbnRlcnJ1cHRzCisgKgorICogQXR0ZW1wdHMgdG8gY29uZmlndXJlIGlu dGVycnVwdHMgdXNpbmcgdGhlIGJlc3QgYXZhaWxhYmxlCisgKiBjYXBhYmlsaXRpZXMgb2YgdGhl IGhhcmR3YXJlIGFuZCBrZXJuZWwuCisgKiovCitzdGF0aWMgaW50IGlnYl9yZXF1ZXN0X2lycShz dHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRl diA9IGFkYXB0ZXItPm5ldGRldjsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3 OworCWludCBlcnIgPSAwOworCisJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQllcnIg PSBpZ2JfcmVxdWVzdF9tc2l4KGFkYXB0ZXIpOworCQlpZiAoIWVycikgeworCQkJLyogZW5hYmxl IElBTSwgYXV0by1tYXNrLAorCQkJICogRE8gTk9UIFVTRSBFSUFNIG9yIElBTSBpbiBsZWdhY3kg bW9kZSAqLworCQkJd3IzMihFMTAwMF9JQU0sIElNU19FTkFCTEVfTUFTSyk7CisJCQlnb3RvIHJl cXVlc3RfZG9uZTsKKwkJfQorCQkvKiBmYWxsIGJhY2sgdG8gTVNJICovCisJCWlnYl9yZXNldF9p bnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwkJaWYgKCFwY2lfZW5hYmxlX21zaShhZGFw dGVyLT5wZGV2KSkKKwkJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0hBU19NU0k7CisJCWln Yl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoYWRhcHRlcik7CisJCWlnYl9mcmVlX2FsbF9yeF9yZXNv dXJjZXMoYWRhcHRlcik7CisJCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSAxOworCQlpZ2JfYWxs b2NfcXVldWVzKGFkYXB0ZXIpOworCX0gZWxzZSB7CisJCXN3aXRjaCAoaHctPm1hYy50eXBlKSB7 CisJCWNhc2UgZTEwMDBfODI1NzU6CisJCQl3cjMyKEUxMDAwX01TSVhCTSgwKSwKKwkJCSAgICAg KEUxMDAwX0VJQ1JfUlhfUVVFVUUwIHwgRTEwMDBfRUlNU19PVEhFUikpOworCQkJYnJlYWs7CisJ CWNhc2UgZTEwMDBfODI1NzY6CisJCQl3cjMyKEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElE KTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoYWRh cHRlci0+ZmxhZ3MgJiBJR0JfRkxBR19IQVNfTVNJKSB7CisJCWVyciA9IHJlcXVlc3RfaXJxKGFk YXB0ZXItPnBkZXYtPmlycSwgJmlnYl9pbnRyX21zaSwgMCwKKwkJCQkgIG5ldGRldi0+bmFtZSwg bmV0ZGV2KTsKKwkJaWYgKCFlcnIpCisJCQlnb3RvIHJlcXVlc3RfZG9uZTsKKwkJLyogZmFsbCBi YWNrIHRvIGxlZ2FjeSBpbnRlcnJ1cHRzICovCisJCWlnYl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJp bGl0eShhZGFwdGVyKTsKKwkJYWRhcHRlci0+ZmxhZ3MgJj0gfklHQl9GTEFHX0hBU19NU0k7CisJ fQorCisJZXJyID0gcmVxdWVzdF9pcnEoYWRhcHRlci0+cGRldi0+aXJxLCAmaWdiX2ludHIsIElS UUZfU0hBUkVELAorCQkJICBuZXRkZXYtPm5hbWUsIG5ldGRldik7CisKKwlpZiAoZXJyKQorCQlk ZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsICJFcnJvciAlZCBnZXR0aW5nIGludGVycnVwdFxu IiwKKwkJCWVycik7CisKK3JlcXVlc3RfZG9uZToKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMg dm9pZCBpZ2JfZnJlZV9pcnEoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVj dCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisKKwlpZiAoYWRhcHRlci0+ bXNpeF9lbnRyaWVzKSB7CisJCWludCB2ZWN0b3IgPSAwLCBpOworCisJCWZvciAoaSA9IDA7IGkg PCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCQlmcmVlX2lycShhZGFwdGVyLT5tc2l4 X2VudHJpZXNbdmVjdG9yKytdLnZlY3RvciwKKwkJCQkmKGFkYXB0ZXItPnR4X3JpbmdbaV0pKTsK KwkJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJCWZyZWVf aXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1t2ZWN0b3IrK10udmVjdG9yLAorCQkJCSYoYWRhcHRl ci0+cnhfcmluZ1tpXSkpOworCisJCWZyZWVfaXJxKGFkYXB0ZXItPm1zaXhfZW50cmllc1t2ZWN0 b3IrK10udmVjdG9yLCBuZXRkZXYpOworCQlyZXR1cm47CisJfQorCisJZnJlZV9pcnEoYWRhcHRl ci0+cGRldi0+aXJxLCBuZXRkZXYpOworfQorCisvKioKKyAqIGlnYl9pcnFfZGlzYWJsZSAtIE1h c2sgb2ZmIGludGVycnVwdCBnZW5lcmF0aW9uIG9uIHRoZSBOSUMKKyAqIEBhZGFwdGVyOiBib2Fy ZCBwcml2YXRlIHN0cnVjdHVyZQorICoqLworc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0 cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFk YXB0ZXItPmh3OworCisJaWYgKGFkYXB0ZXItPm1zaXhfZW50cmllcykgeworCQl3cjMyKEUxMDAw X0VJTUMsIH4wKTsKKwkJd3IzMihFMTAwMF9FSUFDLCAwKTsKKwl9CisJd3IzMihFMTAwMF9JTUMs IH4wKTsKKwl3cmZsKCk7CisJc3luY2hyb25pemVfaXJxKGFkYXB0ZXItPnBkZXYtPmlycSk7Cit9 CisKKy8qKgorICogaWdiX2lycV9lbmFibGUgLSBFbmFibGUgZGVmYXVsdCBpbnRlcnJ1cHQgZ2Vu ZXJhdGlvbiBzZXR0aW5ncworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisg KiovCitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0 ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKworCWlmIChhZGFw dGVyLT5tc2l4X2VudHJpZXMpIHsKKwkJd3IzMihFMTAwMF9FSU1TLAorCQkJCWFkYXB0ZXItPmVp bXNfZW5hYmxlX21hc2spOworCQl3cjMyKEUxMDAwX0VJQUMsCisJCQkJYWRhcHRlci0+ZWltc19l bmFibGVfbWFzayk7CisJCXdyMzIoRTEwMDBfSU1TLCBFMTAwMF9JTVNfTFNDKTsKKwl9IGVsc2UK Kwl3cjMyKEUxMDAwX0lNUywgSU1TX0VOQUJMRV9NQVNLKTsKK30KKworc3RhdGljIHZvaWQgaWdi X3VwZGF0ZV9tbmdfdmxhbihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0 IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0ZXItPm5ldGRldjsKKwl1MTYgdmlkID0gYWRhcHRl ci0+aHcubW5nX2Nvb2tpZS52bGFuX2lkOworCXUxNiBvbGRfdmlkID0gYWRhcHRlci0+bW5nX3Zs YW5faWQ7CisJaWYgKGFkYXB0ZXItPnZsZ3JwKSB7CisJCWlmICghdmxhbl9ncm91cF9nZXRfZGV2 aWNlKGFkYXB0ZXItPnZsZ3JwLCB2aWQpKSB7CisJCQlpZiAoYWRhcHRlci0+aHcubW5nX2Nvb2tp ZS5zdGF0dXMgJgorCQkJCUUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFUVVNfVkxBTikgeworCQkJ CWlnYl92bGFuX3J4X2FkZF92aWQobmV0ZGV2LCB2aWQpOworCQkJCWFkYXB0ZXItPm1uZ192bGFu X2lkID0gdmlkOworCQkJfSBlbHNlCisJCQkJYWRhcHRlci0+bW5nX3ZsYW5faWQgPSBJR0JfTU5H X1ZMQU5fTk9ORTsKKworCQkJaWYgKChvbGRfdmlkICE9ICh1MTYpSUdCX01OR19WTEFOX05PTkUp ICYmCisJCQkJCSh2aWQgIT0gb2xkX3ZpZCkgJiYKKwkJCSAgICAhdmxhbl9ncm91cF9nZXRfZGV2 aWNlKGFkYXB0ZXItPnZsZ3JwLCBvbGRfdmlkKSkKKwkJCQlpZ2Jfdmxhbl9yeF9raWxsX3ZpZChu ZXRkZXYsIG9sZF92aWQpOworCQl9IGVsc2UKKwkJCWFkYXB0ZXItPm1uZ192bGFuX2lkID0gdmlk OworCX0KK30KKworLyoqCisgKiBpZ2JfcmVsZWFzZV9od19jb250cm9sIC0gcmVsZWFzZSBjb250 cm9sIG9mIHRoZSBoL3cgdG8gZi93CisgKiBAYWRhcHRlcjogYWRkcmVzcyBvZiBib2FyZCBwcml2 YXRlIHN0cnVjdHVyZQorICoKKyAqIGlnYl9yZWxlYXNlX2h3X2NvbnRyb2wgcmVzZXRzIENUUkxf RVhUOkRSVl9MT0FEIGJpdC4KKyAqIEZvciBBU0YgYW5kIFBhc3MgVGhyb3VnaCB2ZXJzaW9ucyBv ZiBmL3cgdGhpcyBtZWFucyB0aGF0IHRoZQorICogZHJpdmVyIGlzIG5vIGxvbmdlciBsb2FkZWQu CisgKgorICoqLworc3RhdGljIHZvaWQgaWdiX3JlbGVhc2VfaHdfY29udHJvbChzdHJ1Y3QgaWdi X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5o dzsKKwl1MzIgY3RybF9leHQ7CisKKwkvKiBMZXQgZmlybXdhcmUgdGFrZSBvdmVyIGNvbnRyb2wg b2YgaC93ICovCisJY3RybF9leHQgPSByZDMyKEUxMDAwX0NUUkxfRVhUKTsKKwl3cjMyKEUxMDAw X0NUUkxfRVhULAorCQkJY3RybF9leHQgJiB+RTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQpOworfQor CisKKy8qKgorICogaWdiX2dldF9od19jb250cm9sIC0gZ2V0IGNvbnRyb2wgb2YgdGhlIGgvdyBm cm9tIGYvdworICogQGFkYXB0ZXI6IGFkZHJlc3Mgb2YgYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUK KyAqCisgKiBpZ2JfZ2V0X2h3X2NvbnRyb2wgc2V0cyBDVFJMX0VYVDpEUlZfTE9BRCBiaXQuCisg KiBGb3IgQVNGIGFuZCBQYXNzIFRocm91Z2ggdmVyc2lvbnMgb2YgZi93IHRoaXMgbWVhbnMgdGhh dAorICogdGhlIGRyaXZlciBpcyBsb2FkZWQuCisgKgorICoqLworc3RhdGljIHZvaWQgaWdiX2dl dF9od19jb250cm9sKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEw MDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiBjdHJsX2V4dDsKKworCS8qIExldCBmaXJt d2FyZSBrbm93IHRoZSBkcml2ZXIgaGFzIHRha2VuIG92ZXIgKi8KKwljdHJsX2V4dCA9IHJkMzIo RTEwMDBfQ1RSTF9FWFQpOworCXdyMzIoRTEwMDBfQ1RSTF9FWFQsCisJCQljdHJsX2V4dCB8IEUx MDAwX0NUUkxfRVhUX0RSVl9MT0FEKTsKK30KKworLyoqCisgKiBpZ2JfY29uZmlndXJlIC0gY29u ZmlndXJlIHRoZSBoYXJkd2FyZSBmb3IgUlggYW5kIFRYCisgKiBAYWRhcHRlcjogcHJpdmF0ZSBi b2FyZCBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9jb25maWd1cmUoc3RydWN0IGln Yl9hZGFwdGVyICphZGFwdGVyKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFw dGVyLT5uZXRkZXY7CisJaW50IGk7CisKKwlpZ2JfZ2V0X2h3X2NvbnRyb2woYWRhcHRlcik7CisJ aWdiX3NldF9tdWx0aShuZXRkZXYpOworCisJaWdiX3Jlc3RvcmVfdmxhbihhZGFwdGVyKTsKKwor CWlnYl9jb25maWd1cmVfdHgoYWRhcHRlcik7CisJaWdiX3NldHVwX3JjdGwoYWRhcHRlcik7CisJ aWdiX2NvbmZpZ3VyZV9yeChhZGFwdGVyKTsKKworCWlnYl9yeF9maWZvX2ZsdXNoXzgyNTc1KCZh ZGFwdGVyLT5odyk7CisKKwkvKiBjYWxsIElHQl9ERVNDX1VOVVNFRCB3aGljaCBhbHdheXMgbGVh dmVzCisJICogYXQgbGVhc3QgMSBkZXNjcmlwdG9yIHVudXNlZCB0byBtYWtlIHN1cmUKKwkgKiBu ZXh0X3RvX3VzZSAhPSBuZXh0X3RvX2NsZWFuICovCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXIt Pm51bV9yeF9xdWV1ZXM7IGkrKykgeworCQlzdHJ1Y3QgaWdiX3JpbmcgKnJpbmcgPSAmYWRhcHRl ci0+cnhfcmluZ1tpXTsKKwkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJpbmcsIElHQl9ERVND X1VOVVNFRChyaW5nKSk7CisJfQorCisKKwlhZGFwdGVyLT50eF9xdWV1ZV9sZW4gPSBuZXRkZXYt PnR4X3F1ZXVlX2xlbjsKK30KKworCisvKioKKyAqIGlnYl91cCAtIE9wZW4gdGhlIGludGVyZmFj ZSBhbmQgcHJlcGFyZSBpdCB0byBoYW5kbGUgdHJhZmZpYworICogQGFkYXB0ZXI6IGJvYXJkIHBy aXZhdGUgc3RydWN0dXJlCisgKiovCisKK2ludCBpZ2JfdXAoc3RydWN0IGlnYl9hZGFwdGVyICph ZGFwdGVyKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJaW50IGk7 CisKKwkvKiBoYXJkd2FyZSBoYXMgYmVlbiByZXNldCwgd2UgbmVlZCB0byByZWxvYWQgc29tZSB0 aGluZ3MgKi8KKwlpZ2JfY29uZmlndXJlKGFkYXB0ZXIpOworCisJY2xlYXJfYml0KF9fSUdCX0RP V04sICZhZGFwdGVyLT5zdGF0ZSk7CisKKwluZXRpZl9wb2xsX2VuYWJsZShhZGFwdGVyLT5uZXRk ZXYpOworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5l dGlmX3BvbGxfZW5hYmxlKGFkYXB0ZXItPnJ4X3JpbmdbaV0ubmV0ZGV2KTsKKworCWlmIChhZGFw dGVyLT5tc2l4X2VudHJpZXMpCisJCWlnYl9jb25maWd1cmVfbXNpeChhZGFwdGVyKTsKKworCS8q IENsZWFyIGFueSBwZW5kaW5nIGludGVycnVwdHMuICovCisJcmQzMihFMTAwMF9JQ1IpOworCWln Yl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCisJLyogRmlyZSBhIGxpbmsgY2hhbmdlIGludGVycnVw dCB0byBzdGFydCB0aGUgd2F0Y2hkb2cuICovCisJd3IzMihFMTAwMF9JQ1MsIEUxMDAwX0lDU19M U0MpOworCXJldHVybiAwOworfQorCit2b2lkIGlnYl9kb3duKHN0cnVjdCBpZ2JfYWRhcHRlciAq YWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVj dCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJdTMyIHRjdGwsIHJjdGw7 CisJaW50IGk7CisKKwkvKiBzaWduYWwgdGhhdCB3ZSdyZSBkb3duIHNvIHRoZSBpbnRlcnJ1cHQg aGFuZGxlciBkb2VzIG5vdAorCSAqIHJlc2NoZWR1bGUgb3VyIHdhdGNoZG9nIHRpbWVyICovCisJ c2V0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpOworCisJLyogZGlzYWJsZSByZWNl aXZlcyBpbiB0aGUgaGFyZHdhcmUgKi8KKwlyY3RsID0gcmQzMihFMTAwMF9SQ1RMKTsKKwl3cjMy KEUxMDAwX1JDVEwsIHJjdGwgJiB+RTEwMDBfUkNUTF9FTik7CisJLyogZmx1c2ggYW5kIHNsZWVw IGJlbG93ICovCisKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwkvKiBkaXNhYmxlIHRy YW5zbWl0cyBpbiB0aGUgaGFyZHdhcmUgKi8KKwl0Y3RsID0gcmQzMihFMTAwMF9UQ1RMKTsKKwl0 Y3RsICY9IH5FMTAwMF9UQ1RMX0VOOworCXdyMzIoRTEwMDBfVENUTCwgdGN0bCk7CisJLyogZmx1 c2ggYm90aCBkaXNhYmxlcyBhbmQgd2FpdCBmb3IgdGhlbSB0byBmaW5pc2ggKi8KKwl3cmZsKCk7 CisJbXNsZWVwKDEwKTsKKworCW5ldGlmX3BvbGxfZGlzYWJsZShuZXRkZXYpOworCWZvciAoaSA9 IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5ldGlmX3BvbGxfZGlzYWJs ZShhZGFwdGVyLT5yeF9yaW5nW2ldLm5ldGRldik7CisKKwlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRl cik7CisKKwlkZWxfdGltZXJfc3luYygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWRlbF90 aW1lcl9zeW5jKCZhZGFwdGVyLT5waHlfaW5mb190aW1lcik7CisKKwluZXRkZXYtPnR4X3F1ZXVl X2xlbiA9IGFkYXB0ZXItPnR4X3F1ZXVlX2xlbjsKKwluZXRpZl9jYXJyaWVyX29mZihuZXRkZXYp OworCWFkYXB0ZXItPmxpbmtfc3BlZWQgPSAwOworCWFkYXB0ZXItPmxpbmtfZHVwbGV4ID0gMDsK KworCWlmICghcGNpX2NoYW5uZWxfb2ZmbGluZShhZGFwdGVyLT5wZGV2KSkKKwkJaWdiX3Jlc2V0 KGFkYXB0ZXIpOworCWlnYl9jbGVhbl9hbGxfdHhfcmluZ3MoYWRhcHRlcik7CisJaWdiX2NsZWFu X2FsbF9yeF9yaW5ncyhhZGFwdGVyKTsKK30KKwordm9pZCBpZ2JfcmVpbml0X2xvY2tlZChzdHJ1 Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJV0FSTl9PTihpbl9pbnRlcnJ1cHQoKSk7CisJ d2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+c3RhdGUp KQorCQltc2xlZXAoMSk7CisJaWdiX2Rvd24oYWRhcHRlcik7CisJaWdiX3VwKGFkYXB0ZXIpOwor CWNsZWFyX2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0ZSk7Cit9CisKK3ZvaWQg aWdiX3Jlc2V0KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBf aHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBlMTAwMF9tYWNfaW5mbyAqbWFjID0gJmh3 LT5tYWM7CisJc3RydWN0IGUxMDAwX2ZjX2luZm8gKmZjID0gJmh3LT5mYzsKKwl1MzIgcGJhID0g MCwgdHhfc3BhY2UsIG1pbl90eF9zcGFjZSwgbWluX3J4X3NwYWNlOworCXUxNiBod207CisKKwkv KiBSZXBhcnRpdGlvbiBQYmEgZm9yIGdyZWF0ZXIgdGhhbiA5ayBtdHUKKwkgKiBUbyB0YWtlIGVm ZmVjdCBDVFJMLlJTVCBpcyByZXF1aXJlZC4KKwkgKi8KKwlpZiAobWFjLT50eXBlICE9IGUxMDAw XzgyNTc2KSB7CisJcGJhID0gRTEwMDBfUEJBXzM0SzsKKwl9CisJZWxzZSB7CisJCXBiYSA9IEUx MDAwX1BCQV82NEs7CisJfQorCisJaWYgKChhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSA+IEVUSF9G UkFNRV9MRU4gKyBFVEhfRkNTX0xFTikgJiYKKwkgICAgKG1hYy0+dHlwZSA8IGUxMDAwXzgyNTc2 KSkgeworCQkvKiBhZGp1c3QgUEJBIGZvciBqdW1ibyBmcmFtZXMgKi8KKwkJd3IzMihFMTAwMF9Q QkEsIHBiYSk7CisKKwkJLyogVG8gbWFpbnRhaW4gd2lyZSBzcGVlZCB0cmFuc21pdHMsIHRoZSBU eCBGSUZPIHNob3VsZCBiZQorCQkgKiBsYXJnZSBlbm91Z2ggdG8gYWNjb21tb2RhdGUgdHdvIGZ1 bGwgdHJhbnNtaXQgcGFja2V0cywKKwkJICogcm91bmRlZCB1cCB0byB0aGUgbmV4dCAxS0IgYW5k IGV4cHJlc3NlZCBpbiBLQi4gIExpa2V3aXNlLAorCQkgKiB0aGUgUnggRklGTyBzaG91bGQgYmUg bGFyZ2UgZW5vdWdoIHRvIGFjY29tbW9kYXRlIGF0IGxlYXN0CisJCSAqIG9uZSBmdWxsIHJlY2Vp dmUgcGFja2V0IGFuZCBpcyBzaW1pbGFybHkgcm91bmRlZCB1cCBhbmQKKwkJICogZXhwcmVzc2Vk IGluIEtCLiAqLworCQlwYmEgPSByZDMyKEUxMDAwX1BCQSk7CisJCS8qIHVwcGVyIDE2IGJpdHMg aGFzIFR4IHBhY2tldCBidWZmZXIgYWxsb2NhdGlvbiBzaXplIGluIEtCICovCisJCXR4X3NwYWNl ID0gcGJhID4+IDE2OworCQkvKiBsb3dlciAxNiBiaXRzIGhhcyBSeCBwYWNrZXQgYnVmZmVyIGFs bG9jYXRpb24gc2l6ZSBpbiBLQiAqLworCQlwYmEgJj0gMHhmZmZmOworCQkvKiB0aGUgdHggZmlm byBhbHNvIHN0b3JlcyAxNiBieXRlcyBvZiBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHgKKwkJICog YnV0IGRvbid0IGluY2x1ZGUgZXRoZXJuZXQgRkNTIGJlY2F1c2UgaGFyZHdhcmUgYXBwZW5kcyBp dCAqLworCQltaW5fdHhfc3BhY2UgPSAoYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKworCQkJCXNp emVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykgLQorCQkJCUVUSF9GQ1NfTEVOKSAqIDI7CisJCW1p bl90eF9zcGFjZSA9IEFMSUdOKG1pbl90eF9zcGFjZSwgMTAyNCk7CisJCW1pbl90eF9zcGFjZSA+ Pj0gMTA7CisJCS8qIHNvZnR3YXJlIHN0cmlwcyByZWNlaXZlIENSQywgc28gbGVhdmUgcm9vbSBm b3IgaXQgKi8KKwkJbWluX3J4X3NwYWNlID0gYWRhcHRlci0+bWF4X2ZyYW1lX3NpemU7CisJCW1p bl9yeF9zcGFjZSA9IEFMSUdOKG1pbl9yeF9zcGFjZSwgMTAyNCk7CisJCW1pbl9yeF9zcGFjZSA+ Pj0gMTA7CisKKwkJLyogSWYgY3VycmVudCBUeCBhbGxvY2F0aW9uIGlzIGxlc3MgdGhhbiB0aGUg bWluIFR4IEZJRk8gc2l6ZSwKKwkJICogYW5kIHRoZSBtaW4gVHggRklGTyBzaXplIGlzIGxlc3Mg dGhhbiB0aGUgY3VycmVudCBSeCBGSUZPCisJCSAqIGFsbG9jYXRpb24sIHRha2Ugc3BhY2UgYXdh eSBmcm9tIGN1cnJlbnQgUnggYWxsb2NhdGlvbiAqLworCQlpZiAodHhfc3BhY2UgPCBtaW5fdHhf c3BhY2UgJiYKKwkJICAgICgobWluX3R4X3NwYWNlIC0gdHhfc3BhY2UpIDwgcGJhKSkgeworCQkJ cGJhID0gcGJhIC0gKG1pbl90eF9zcGFjZSAtIHR4X3NwYWNlKTsKKworCQkJLyogaWYgc2hvcnQg b24gcnggc3BhY2UsIHJ4IHdpbnMgYW5kIG11c3QgdHJ1bXAgdHgKKwkJCSAqIGFkanVzdG1lbnQg Ki8KKwkJCWlmIChwYmEgPCBtaW5fcnhfc3BhY2UpCisJCQkJcGJhID0gbWluX3J4X3NwYWNlOwor CQl9CisJCXdyMzIoRTEwMDBfUEJBLCBwYmEpOworCX0KKworCS8qIGZsb3cgY29udHJvbCBzZXR0 aW5ncyAqLworCS8qIFRoZSBoaWdoIHdhdGVyIG1hcmsgbXVzdCBiZSBsb3cgZW5vdWdoIHRvIGZp dCBvbmUgZnVsbCBmcmFtZQorCSAqIChvciB0aGUgc2l6ZSB1c2VkIGZvciBlYXJseSByZWNlaXZl KSBhYm92ZSBpdCBpbiB0aGUgUnggRklGTy4KKwkgKiBTZXQgaXQgdG8gdGhlIGxvd2VyIG9mOgor CSAqIC0gOTAlIG9mIHRoZSBSeCBGSUZPIHNpemUsIG9yCisJICogLSB0aGUgZnVsbCBSeCBGSUZP IHNpemUgbWludXMgb25lIGZ1bGwgZnJhbWUgKi8KKwlod20gPSBtaW4oKChwYmEgPDwgMTApICog OSAvIDEwKSwKKwkJCSgocGJhIDw8IDEwKSAtIDIgKiBhZGFwdGVyLT5tYXhfZnJhbWVfc2l6ZSkp OworCisJaWYgKG1hYy0+dHlwZSA8IGUxMDAwXzgyNTc2KSB7CisJCWZjLT5oaWdoX3dhdGVyID0g aHdtICYgMHhGRkY4OwkvKiA4LWJ5dGUgZ3JhbnVsYXJpdHkgKi8KKwkJZmMtPmxvd193YXRlciA9 IGZjLT5oaWdoX3dhdGVyIC0gODsKKwl9IGVsc2UgeworCQlmYy0+aGlnaF93YXRlciA9IGh3bSAm IDB4RkZGMDsJLyogMTYtYnl0ZSBncmFudWxhcml0eSAqLworCQlmYy0+bG93X3dhdGVyID0gZmMt PmhpZ2hfd2F0ZXIgLSAxNjsKKwl9CisJZmMtPnBhdXNlX3RpbWUgPSAweEZGRkY7CisJZmMtPnNl bmRfeG9uID0gMTsKKwlmYy0+dHlwZSA9IGZjLT5vcmlnaW5hbF90eXBlOworCisJLyogQWxsb3cg dGltZSBmb3IgcGVuZGluZyBtYXN0ZXIgcmVxdWVzdHMgdG8gcnVuICovCisJYWRhcHRlci0+aHcu bWFjLm9wcy5yZXNldF9odygmYWRhcHRlci0+aHcpOworCXdyMzIoRTEwMDBfV1VDLCAwKTsKKwor CWlmIChhZGFwdGVyLT5ody5tYWMub3BzLmluaXRfaHcoJmFkYXB0ZXItPmh3KSkKKwkJZGV2X2Vy cigmYWRhcHRlci0+cGRldi0+ZGV2LCAiSGFyZHdhcmUgRXJyb3JcbiIpOworCisJaWdiX3VwZGF0 ZV9tbmdfdmxhbihhZGFwdGVyKTsKKworCS8qIEVuYWJsZSBoL3cgdG8gcmVjb2duaXplIGFuIDgw Mi4xUSBWTEFOIEV0aGVybmV0IHBhY2tldCAqLworCXdyMzIoRTEwMDBfVkVULCBFVEhFUk5FVF9J RUVFX1ZMQU5fVFlQRSk7CisKKwlpZ2JfcmVzZXRfYWRhcHRpdmUoJmFkYXB0ZXItPmh3KTsKKwlp ZiAoYWRhcHRlci0+aHcucGh5Lm9wcy5nZXRfcGh5X2luZm8pCisJCWFkYXB0ZXItPmh3LnBoeS5v cHMuZ2V0X3BoeV9pbmZvKCZhZGFwdGVyLT5odyk7Cit9CisKKy8qKgorICogaWdiX3Byb2JlIC0g RGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmUKKyAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9y bWF0aW9uIHN0cnVjdAorICogQGVudDogZW50cnkgaW4gaWdiX3BjaV90YmwKKyAqCisgKiBSZXR1 cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoKKyAqIGlnYl9wcm9iZSBp bml0aWFsaXplcyBhbiBhZGFwdGVyIGlkZW50aWZpZWQgYnkgYSBwY2lfZGV2IHN0cnVjdHVyZS4K KyAqIFRoZSBPUyBpbml0aWFsaXphdGlvbiwgY29uZmlndXJpbmcgb2YgdGhlIGFkYXB0ZXIgcHJp dmF0ZSBzdHJ1Y3R1cmUsCisgKiBhbmQgYSBoYXJkd2FyZSByZXNldCBvY2N1ci4KKyAqKi8KK3N0 YXRpYyBpbnQgX19kZXZpbml0IGlnYl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJCSAg ICAgICBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXN0cnVjdCBuZXRfZGV2 aWNlICpuZXRkZXY7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyOworCXN0cnVjdCBlMTAw MF9odyAqaHc7CisJY29uc3Qgc3RydWN0IGUxMDAwX2luZm8gKmVpID0gaWdiX2luZm9fdGJsW2Vu dC0+ZHJpdmVyX2RhdGFdOworCXVuc2lnbmVkIGxvbmcgbW1pb19zdGFydCwgbW1pb19sZW47CisJ aW50IGksIGVyciwgcGNpX3VzaW5nX2RhYzsKKwl1MTYgZWVwcm9tX2RhdGEgPSAwOworCXUxNiBl ZXByb21fYXBtZV9tYXNrID0gSUdCX0VFUFJPTV9BUE1FOworCXUzMiBwYXJ0X251bTsKKworCWVy ciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOworCWlmIChlcnIpCisJCXJldHVybiBlcnI7CisK KwlwY2lfdXNpbmdfZGFjID0gMDsKKwllcnIgPSBwY2lfc2V0X2RtYV9tYXNrKHBkZXYsIERNQV82 NEJJVF9NQVNLKTsKKwlpZiAoIWVycikgeworCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1h X21hc2socGRldiwgRE1BXzY0QklUX01BU0spOworCQlpZiAoIWVycikKKwkJCXBjaV91c2luZ19k YWMgPSAxOworCX0gZWxzZSB7CisJCWVyciA9IHBjaV9zZXRfZG1hX21hc2socGRldiwgRE1BXzMy QklUX01BU0spOworCQlpZiAoZXJyKSB7CisJCQllcnIgPSBwY2lfc2V0X2NvbnNpc3RlbnRfZG1h X21hc2socGRldiwgRE1BXzMyQklUX01BU0spOworCQkJaWYgKGVycikgeworCQkJCWRldl9lcnIo JnBkZXYtPmRldiwgIk5vIHVzYWJsZSBETUEgIgorCQkJCQkiY29uZmlndXJhdGlvbiwgYWJvcnRp bmdcbiIpOworCQkJCWdvdG8gZXJyX2RtYTsKKwkJCX0KKwkJfQorCX0KKworCWVyciA9IHBjaV9y ZXF1ZXN0X3JlZ2lvbnMocGRldiwgaWdiX2RyaXZlcl9uYW1lKTsKKwlpZiAoZXJyKQorCQlnb3Rv IGVycl9wY2lfcmVnOworCisJcGNpX3NldF9tYXN0ZXIocGRldik7CisJcGNpX3NhdmVfc3RhdGUo cGRldik7CisKKwllcnIgPSAtRU5PTUVNOworCW5ldGRldiA9IGFsbG9jX2V0aGVyZGV2KHNpemVv ZihzdHJ1Y3QgaWdiX2FkYXB0ZXIpKTsKKwlpZiAoIW5ldGRldikKKwkJZ290byBlcnJfYWxsb2Nf ZXRoZXJkZXY7CisKKwlTRVRfTkVUREVWX0RFVihuZXRkZXYsICZwZGV2LT5kZXYpOworCisJcGNp X3NldF9kcnZkYXRhKHBkZXYsIG5ldGRldik7CisJYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRl dik7CisJYWRhcHRlci0+bmV0ZGV2ID0gbmV0ZGV2OworCWFkYXB0ZXItPnBkZXYgPSBwZGV2Owor CWh3ID0gJmFkYXB0ZXItPmh3OworCWh3LT5iYWNrID0gYWRhcHRlcjsKKwlhZGFwdGVyLT5tc2df ZW5hYmxlID0gTkVUSUZfTVNHX0RSViB8IE5FVElGX01TR19QUk9CRTsKKworCW1taW9fc3RhcnQg PSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJbW1pb19sZW4gPSBwY2lfcmVzb3VyY2Vf bGVuKHBkZXYsIDApOworCisJZXJyID0gLUVJTzsKKwlhZGFwdGVyLT5ody5od19hZGRyID0gaW9y ZW1hcChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CisJaWYgKCFhZGFwdGVyLT5ody5od19hZGRyKQor CQlnb3RvIGVycl9pb3JlbWFwOworCisJbmV0ZGV2LT5vcGVuID0gJmlnYl9vcGVuOworCW5ldGRl di0+c3RvcCA9ICZpZ2JfY2xvc2U7CisJbmV0ZGV2LT5nZXRfc3RhdHMgPSAmaWdiX2dldF9zdGF0 czsKKwluZXRkZXYtPnNldF9tdWx0aWNhc3RfbGlzdCA9ICZpZ2Jfc2V0X211bHRpOworCW5ldGRl di0+c2V0X21hY19hZGRyZXNzID0gJmlnYl9zZXRfbWFjOworCW5ldGRldi0+Y2hhbmdlX210dSA9 ICZpZ2JfY2hhbmdlX210dTsKKwluZXRkZXYtPmRvX2lvY3RsID0gJmlnYl9pb2N0bDsKKwlpZ2Jf c2V0X2V0aHRvb2xfb3BzKG5ldGRldik7CisJbmV0ZGV2LT50eF90aW1lb3V0ID0gJmlnYl90eF90 aW1lb3V0OworCW5ldGRldi0+d2F0Y2hkb2dfdGltZW8gPSA1ICogSFo7CisJbmV0ZGV2LT5wb2xs ID0gaWdiX2NsZWFuOworCW5ldGRldi0+d2VpZ2h0ID0gNjQ7CisJbmV0ZGV2LT52bGFuX3J4X3Jl Z2lzdGVyID0gaWdiX3ZsYW5fcnhfcmVnaXN0ZXI7CisJbmV0ZGV2LT52bGFuX3J4X2FkZF92aWQg PSBpZ2Jfdmxhbl9yeF9hZGRfdmlkOworCW5ldGRldi0+dmxhbl9yeF9raWxsX3ZpZCA9IGlnYl92 bGFuX3J4X2tpbGxfdmlkOworI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCisJbmV0 ZGV2LT5wb2xsX2NvbnRyb2xsZXIgPSBpZ2JfbmV0cG9sbDsKKyNlbmRpZgorCW5ldGRldi0+aGFy ZF9zdGFydF94bWl0ID0gJmlnYl94bWl0X2ZyYW1lX2FkdjsKKworCXN0cm5jcHkobmV0ZGV2LT5u YW1lLCBwY2lfbmFtZShwZGV2KSwgc2l6ZW9mKG5ldGRldi0+bmFtZSkgLSAxKTsKKworCW5ldGRl di0+bWVtX3N0YXJ0ID0gbW1pb19zdGFydDsKKwluZXRkZXYtPm1lbV9lbmQgPSBtbWlvX3N0YXJ0 ICsgbW1pb19sZW47CisKKwkvKiBQQ0kgY29uZmlnIHNwYWNlIGluZm8gKi8KKwlody0+dmVuZG9y X2lkID0gcGRldi0+dmVuZG9yOworCWh3LT5kZXZpY2VfaWQgPSBwZGV2LT5kZXZpY2U7CisJaHct PnN1YnN5c3RlbV92ZW5kb3JfaWQgPSBwZGV2LT5zdWJzeXN0ZW1fdmVuZG9yOworCWh3LT5zdWJz eXN0ZW1fZGV2aWNlX2lkID0gcGRldi0+c3Vic3lzdGVtX2RldmljZTsKKworCXBjaV9yZWFkX2Nv bmZpZ19ieXRlKHBkZXYsIFBDSV9SRVZJU0lPTl9JRCwgJmh3LT5yZXZpc2lvbl9pZCk7CisKKwkv KiBzZXR1cCB0aGUgcHJpdmF0ZSBzdHJ1Y3R1cmUgKi8KKwlody0+YmFjayA9IGFkYXB0ZXI7CisJ LyogQ29weSB0aGUgZGVmYXVsdCBNQUMsIFBIWSBhbmQgTlZNIGZ1bmN0aW9uIHBvaW50ZXJzICov CisJbWVtY3B5KCZody0+bWFjLm9wcywgZWktPm1hY19vcHMsIHNpemVvZihody0+bWFjLm9wcykp OworCW1lbWNweSgmaHctPnBoeS5vcHMsIGVpLT5waHlfb3BzLCBzaXplb2YoaHctPnBoeS5vcHMp KTsKKwltZW1jcHkoJmh3LT5udm0ub3BzLCBlaS0+bnZtX29wcywgc2l6ZW9mKGh3LT5udm0ub3Bz KSk7CisJLyogSW5pdGlhbGl6ZSBza2V3LXNwZWNpZmljIGNvbnN0YW50cyAqLworCWVyciA9IGVp LT5nZXRfaW52YXJpYW50cyhodyk7CisJaWYgKGVycikKKwkJZ290byBlcnJfaHdfaW5pdDsKKwor CWVyciA9IGlnYl9zd19pbml0KGFkYXB0ZXIpOworCWlmIChlcnIpCisJCWdvdG8gZXJyX3N3X2lu aXQ7CisKKwlpZ2JfZ2V0X2J1c19pbmZvX3BjaWUoaHcpOworCisJLyogc2V0IGZsYWdzICovCisJ c3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwljYXNlIGUxMDAwXzgyNTc2OgorCWNhc2UgZTEwMDBf ODI1NzU6CisJCWFkYXB0ZXItPmZsYWdzIHw9IElHQl9GTEFHX0hBU19EQ0E7CisJCWFkYXB0ZXIt PmZsYWdzIHw9IElHQl9GTEFHX05FRURfQ1RYX0lEWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJ YnJlYWs7CisJfQorCisJaHctPnBoeS5hdXRvbmVnX3dhaXRfdG9fY29tcGxldGUgPSBmYWxzZTsK Kwlody0+bWFjLmFkYXB0aXZlX2lmcyA9IHRydWU7CisKKwkvKiBDb3BwZXIgb3B0aW9ucyAqLwor CWlmIChody0+cGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBfbWVkaWFfdHlwZV9jb3BwZXIpIHsKKwkJ aHctPnBoeS5tZGl4ID0gQVVUT19BTExfTU9ERVM7CisJCWh3LT5waHkuZGlzYWJsZV9wb2xhcml0 eV9jb3JyZWN0aW9uID0gZmFsc2U7CisJCWh3LT5waHkubXNfdHlwZSA9IGUxMDAwX21zX2h3X2Rl ZmF1bHQ7CisJfQorCisJaWYgKGlnYl9jaGVja19yZXNldF9ibG9jayhodykpCisJCWRldl9pbmZv KCZwZGV2LT5kZXYsCisJCQkiUEhZIHJlc2V0IGlzIGJsb2NrZWQgZHVlIHRvIFNPTC9JREVSIHNl c3Npb24uXG4iKTsKKworCW5ldGRldi0+ZmVhdHVyZXMgPSBORVRJRl9GX1NHIHwKKwkJCSAgIE5F VElGX0ZfSFdfQ1NVTSB8CisJCQkgICBORVRJRl9GX0hXX1ZMQU5fVFggfAorCQkJICAgTkVUSUZf Rl9IV19WTEFOX1JYIHwKKwkJCSAgIE5FVElGX0ZfSFdfVkxBTl9GSUxURVI7CisKKwluZXRkZXYt PmZlYXR1cmVzIHw9IE5FVElGX0ZfVFNPOworCW5ldGRldi0+ZmVhdHVyZXMgfD0gTkVUSUZfRl9U U082OworCisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElG X0ZfTFJPOworI2VuZGlmCisKKwlpZiAocGNpX3VzaW5nX2RhYykKKwkJbmV0ZGV2LT5mZWF0dXJl cyB8PSBORVRJRl9GX0hJR0hETUE7CisKKwluZXRkZXYtPmZlYXR1cmVzIHw9IE5FVElGX0ZfTExU WDsKKwlhZGFwdGVyLT5lbl9tbmdfcHQgPSBpZ2JfZW5hYmxlX21uZ19wYXNzX3RocnUoJmFkYXB0 ZXItPmh3KTsKKworCS8qIGJlZm9yZSByZWFkaW5nIHRoZSBOVk0sIHJlc2V0IHRoZSBjb250cm9s bGVyIHRvIHB1dCB0aGUgZGV2aWNlIGluIGEKKwkgKiBrbm93biBnb29kIHN0YXJ0aW5nIHN0YXRl ICovCisJaHctPm1hYy5vcHMucmVzZXRfaHcoaHcpOworCisJLyogbWFrZSBzdXJlIHRoZSBOVk0g aXMgZ29vZCAqLworCWlmIChpZ2JfdmFsaWRhdGVfbnZtX2NoZWNrc3VtKGh3KSA8IDApIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiVGhlIE5WTSBDaGVja3N1bSBJcyBOb3QgVmFsaWRcbiIpOwor CQllcnIgPSAtRUlPOworCQlnb3RvIGVycl9lZXByb207CisJfQorCisJLyogY29weSB0aGUgTUFD IGFkZHJlc3Mgb3V0IG9mIHRoZSBOVk0gKi8KKwlpZiAoaHctPm1hYy5vcHMucmVhZF9tYWNfYWRk cihodykpCisJCWRldl9lcnIoJnBkZXYtPmRldiwgIk5WTSBSZWFkIEVycm9yXG4iKTsKKworCW1l bWNweShuZXRkZXYtPmRldl9hZGRyLCBody0+bWFjLmFkZHIsIG5ldGRldi0+YWRkcl9sZW4pOwor CW1lbWNweShuZXRkZXYtPnBlcm1fYWRkciwgaHctPm1hYy5hZGRyLCBuZXRkZXYtPmFkZHJfbGVu KTsKKworCWlmICghaXNfdmFsaWRfZXRoZXJfYWRkcihuZXRkZXYtPnBlcm1fYWRkcikpIHsKKwkJ ZGV2X2VycigmcGRldi0+ZGV2LCAiSW52YWxpZCBNQUMgQWRkcmVzc1xuIik7CisJCWVyciA9IC1F SU87CisJCWdvdG8gZXJyX2VlcHJvbTsKKwl9CisKKwlpbml0X3RpbWVyKCZhZGFwdGVyLT53YXRj aGRvZ190aW1lcik7CisJYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIuZnVuY3Rpb24gPSAmaWdiX3dh dGNoZG9nOworCWFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykg YWRhcHRlcjsKKworCWluaXRfdGltZXIoJmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyKTsKKwlhZGFw dGVyLT5waHlfaW5mb190aW1lci5mdW5jdGlvbiA9ICZpZ2JfdXBkYXRlX3BoeV9pbmZvOworCWFk YXB0ZXItPnBoeV9pbmZvX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZykgYWRhcHRlcjsKKwor CUlOSVRfV09SSygmYWRhcHRlci0+cmVzZXRfdGFzaywKKwkJCSh2b2lkICgqKSh2b2lkICopKWln Yl9yZXNldF90YXNrLCBhZGFwdGVyKTsKKwlJTklUX1dPUksoJmFkYXB0ZXItPndhdGNoZG9nX3Rh c2ssCisJCQkodm9pZCAoKikodm9pZCAqKSlpZ2Jfd2F0Y2hkb2dfdGFzaywgYWRhcHRlcik7CisJ LyogSW5pdGlhbGl6ZSBsaW5rICYgcmluZyBwcm9wZXJ0aWVzIHRoYXQgYXJlIHVzZXItY2hhbmdl YWJsZSAqLworCWFkYXB0ZXItPnR4X3JpbmctPmNvdW50ID0gMjU2OworCWZvciAoaSA9IDA7IGkg PCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCWFkYXB0ZXItPnR4X3JpbmdbaV0uY291 bnQgPSBhZGFwdGVyLT50eF9yaW5nLT5jb3VudDsKKwlhZGFwdGVyLT5yeF9yaW5nLT5jb3VudCA9 IDI1NjsKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKQorCQlh ZGFwdGVyLT5yeF9yaW5nW2ldLmNvdW50ID0gYWRhcHRlci0+cnhfcmluZy0+Y291bnQ7CisKKwlh ZGFwdGVyLT5mY19hdXRvbmVnID0gdHJ1ZTsKKwlody0+bWFjLmF1dG9uZWcgPSB0cnVlOworCWh3 LT5waHkuYXV0b25lZ19hZHZlcnRpc2VkID0gMHgyZjsKKworCWh3LT5mYy5vcmlnaW5hbF90eXBl ID0gZTEwMDBfZmNfZGVmYXVsdDsKKwlody0+ZmMudHlwZSA9IGUxMDAwX2ZjX2RlZmF1bHQ7CisK KwlhZGFwdGVyLT5pdHJfc2V0dGluZyA9IDM7CisJYWRhcHRlci0+aXRyID0gSUdCX1NUQVJUX0lU UjsKKworCWlnYl92YWxpZGF0ZV9tZGlfc2V0dGluZyhodyk7CisKKwlhZGFwdGVyLT5yeF9jc3Vt ID0gMTsKKworCS8qIEluaXRpYWwgV2FrZSBvbiBMQU4gc2V0dGluZyBJZiBBUE0gd2FrZSBpcyBl bmFibGVkIGluIHRoZSBFRVBST00sCisJICogZW5hYmxlIHRoZSBBQ1BJIE1hZ2ljIFBhY2tldCBm aWx0ZXIKKwkgKi8KKworCWlmIChody0+YnVzLmZ1bmMgPT0gMCB8fAorCSAgICBody0+ZGV2aWNl X2lkID09IEUxMDAwX0RFVl9JRF84MjU3NUVCX0NPUFBFUikKKwkJaHctPm52bS5vcHMucmVhZF9u dm0oaHcsIE5WTV9JTklUX0NPTlRST0wzX1BPUlRfQSwgMSwKKwkJCQkgICAgICZlZXByb21fZGF0 YSk7CisKKwlpZiAoZWVwcm9tX2RhdGEgJiBlZXByb21fYXBtZV9tYXNrKQorCQlhZGFwdGVyLT5l ZXByb21fd29sIHw9IEUxMDAwX1dVRkNfTUFHOworCisJLyogbm93IHRoYXQgd2UgaGF2ZSB0aGUg ZWVwcm9tIHNldHRpbmdzLCBhcHBseSB0aGUgc3BlY2lhbCBjYXNlcyB3aGVyZQorCSAqIHRoZSBl ZXByb20gbWF5IGJlIHdyb25nIG9yIHRoZSBib2FyZCBzaW1wbHkgd29uJ3Qgc3VwcG9ydCB3YWtl IG9uCisJICogbGFuIG9uIGEgcGFydGljdWxhciBwb3J0ICovCisJc3dpdGNoIChwZGV2LT5kZXZp Y2UpIHsKKwljYXNlIEUxMDAwX0RFVl9JRF84MjU3NUdCX1FVQURfQ09QUEVSOgorCQlhZGFwdGVy LT5lZXByb21fd29sID0gMDsKKwkJYnJlYWs7CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzVFQl9G SUJFUl9TRVJERVM6CisJY2FzZSBFMTAwMF9ERVZfSURfODI1NzZfRklCRVI6CisJY2FzZSBFMTAw MF9ERVZfSURfODI1NzZfU0VSREVTOgorCQkvKiBXYWtlIGV2ZW50cyBvbmx5IHN1cHBvcnRlZCBv biBwb3J0IEEgZm9yIGR1YWwgZmliZXIKKwkJICogcmVnYXJkbGVzcyBvZiBlZXByb20gc2V0dGlu ZyAqLworCQlpZiAocmQzMihFMTAwMF9TVEFUVVMpICYgRTEwMDBfU1RBVFVTX0ZVTkNfMSkKKwkJ CWFkYXB0ZXItPmVlcHJvbV93b2wgPSAwOworCQlicmVhazsKKwljYXNlIEUxMDAwX0RFVl9JRF84 MjU3Nl9RVUFEX0NPUFBFUjoKKwkJLyogaWYgcXVhZCBwb3J0IGFkYXB0ZXIsIGRpc2FibGUgV29M IG9uIGFsbCBidXQgcG9ydCBBICovCisJCWlmIChnbG9iYWxfcXVhZF9wb3J0X2EgIT0gMCkKKwkJ CWFkYXB0ZXItPmVlcHJvbV93b2wgPSAwOworCQllbHNlCisJCQlhZGFwdGVyLT5mbGFncyB8PSBJ R0JfRkxBR19RVUFEX1BPUlRfQTsKKwkJLyogUmVzZXQgZm9yIG11bHRpcGxlIHF1YWQgcG9ydCBh ZGFwdGVycyAqLworCQlpZiAoKytnbG9iYWxfcXVhZF9wb3J0X2EgPT0gNCkKKwkJCWdsb2JhbF9x dWFkX3BvcnRfYSA9IDA7CisJCWJyZWFrOworCX0KKworCS8qIGluaXRpYWxpemUgdGhlIHdvbCBz ZXR0aW5ncyBiYXNlZCBvbiB0aGUgZWVwcm9tIHNldHRpbmdzICovCisJYWRhcHRlci0+d29sID0g YWRhcHRlci0+ZWVwcm9tX3dvbDsKKworCS8qIHJlc2V0IHRoZSBoYXJkd2FyZSB3aXRoIHRoZSBu ZXcgc2V0dGluZ3MgKi8KKwlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwkvKiBsZXQgdGhlIGYvdyBr bm93IHRoYXQgdGhlIGgvdyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCisJICogZHJp dmVyLiAqLworCWlnYl9nZXRfaHdfY29udHJvbChhZGFwdGVyKTsKKworCS8qIHRlbGwgdGhlIHN0 YWNrIHRvIGxlYXZlIHVzIGFsb25lIHVudGlsIGlnYl9vcGVuKCkgaXMgY2FsbGVkICovCisJbmV0 aWZfY2Fycmllcl9vZmYobmV0ZGV2KTsKKwluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisKKwlz dHJjcHkobmV0ZGV2LT5uYW1lLCAiZXRoJWQiKTsKKwllcnIgPSByZWdpc3Rlcl9uZXRkZXYobmV0 ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9yZWdpc3RlcjsKKworCWRldl9pbmZvKCZwZGV2 LT5kZXYsICJJbnRlbChSKSBHaWdhYml0IEV0aGVybmV0IE5ldHdvcmsgQ29ubmVjdGlvblxuIik7 CisJLyogcHJpbnQgYnVzIHR5cGUvc3BlZWQvd2lkdGggaW5mbyAqLworCWRldl9pbmZvKCZwZGV2 LT5kZXYsCisJCSAiJXM6IChQQ0llOiVzOiVzKSAlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAy eFxuIiwKKwkJIG5ldGRldi0+bmFtZSwKKwkJICgoaHctPmJ1cy5zcGVlZCA9PSBlMTAwMF9idXNf c3BlZWRfMjUwMCkKKwkJICA/ICIyLjVHYi9zIiA6ICJ1bmtub3duIiksCisJCSAoKGh3LT5idXMu d2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDQpCisJCSAgPyAiV2lkdGggeDQiIDogKGh3 LT5idXMud2lkdGggPT0gZTEwMDBfYnVzX3dpZHRoX3BjaWVfeDEpCisJCSAgPyAiV2lkdGggeDEi IDogInVua25vd24iKSwKKwkJIG5ldGRldi0+ZGV2X2FkZHJbMF0sIG5ldGRldi0+ZGV2X2FkZHJb MV0sIG5ldGRldi0+ZGV2X2FkZHJbMl0sCisJCSBuZXRkZXYtPmRldl9hZGRyWzNdLCBuZXRkZXYt PmRldl9hZGRyWzRdLCBuZXRkZXYtPmRldl9hZGRyWzVdKTsKKworCWlnYl9yZWFkX3BhcnRfbnVt KGh3LCAmcGFydF9udW0pOworCWRldl9pbmZvKCZwZGV2LT5kZXYsICIlczogUEJBIE5vOiAlMDZ4 LSUwM3hcbiIsIG5ldGRldi0+bmFtZSwKKwkJKHBhcnRfbnVtID4+IDgpLCAocGFydF9udW0gJiAw eGZmKSk7CisKKwlkZXZfaW5mbygmcGRldi0+ZGV2LAorCQkiVXNpbmcgJXMgaW50ZXJydXB0cy4g JWQgcnggcXVldWUocyksICVkIHR4IHF1ZXVlKHMpXG4iLAorCQlhZGFwdGVyLT5tc2l4X2VudHJp ZXMgPyAiTVNJLVgiIDoKKwkJKGFkYXB0ZXItPmZsYWdzICYgSUdCX0ZMQUdfSEFTX01TSSkgPyAi TVNJIiA6ICJsZWdhY3kiLAorCQlhZGFwdGVyLT5udW1fcnhfcXVldWVzLCBhZGFwdGVyLT5udW1f dHhfcXVldWVzKTsKKworCXJldHVybiAwOworCitlcnJfcmVnaXN0ZXI6CisJaWdiX3JlbGVhc2Vf aHdfY29udHJvbChhZGFwdGVyKTsKK2Vycl9lZXByb206CisJaWYgKCFpZ2JfY2hlY2tfcmVzZXRf YmxvY2soaHcpKQorCQlody0+cGh5Lm9wcy5yZXNldF9waHkoaHcpOworCisJaWYgKGh3LT5mbGFz aF9hZGRyZXNzKQorCQlpb3VubWFwKGh3LT5mbGFzaF9hZGRyZXNzKTsKKworCWlnYl9yZW1vdmVf ZGV2aWNlKGh3KTsKKwlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CitlcnJfc3dfaW5pdDoKK2Vy cl9od19pbml0OgorCWlvdW5tYXAoaHctPmh3X2FkZHIpOworZXJyX2lvcmVtYXA6CisJZnJlZV9u ZXRkZXYobmV0ZGV2KTsKK2Vycl9hbGxvY19ldGhlcmRldjoKKwlwY2lfcmVsZWFzZV9yZWdpb25z KHBkZXYpOworZXJyX3BjaV9yZWc6CitlcnJfZG1hOgorCXBjaV9kaXNhYmxlX2RldmljZShwZGV2 KTsKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGlnYl9yZW1vdmUgLSBEZXZpY2UgUmVtb3Zh bCBSb3V0aW5lCisgKiBAcGRldjogUENJIGRldmljZSBpbmZvcm1hdGlvbiBzdHJ1Y3QKKyAqCisg KiBpZ2JfcmVtb3ZlIGlzIGNhbGxlZCBieSB0aGUgUENJIHN1YnN5c3RlbSB0byBhbGVydCB0aGUg ZHJpdmVyCisgKiB0aGF0IGl0IHNob3VsZCByZWxlYXNlIGEgUENJIGRldmljZS4gIFRoZSBjb3Vs ZCBiZSBjYXVzZWQgYnkgYQorICogSG90LVBsdWcgZXZlbnQsIG9yIGJlY2F1c2UgdGhlIGRyaXZl ciBpcyBnb2luZyB0byBiZSByZW1vdmVkIGZyb20KKyAqIG1lbW9yeS4KKyAqKi8KK3N0YXRpYyB2 b2lkIF9fZGV2ZXhpdCBpZ2JfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVj dCBuZXRfZGV2aWNlICpuZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGln Yl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKworCS8qIGZsdXNoX3Nj aGVkdWxlZCB3b3JrIG1heSByZXNjaGVkdWxlIG91ciB3YXRjaGRvZyB0YXNrLCBzbworCSAqIGV4 cGxpY2l0bHkgZGlzYWJsZSB3YXRjaGRvZyB0YXNrcyBmcm9tIGJlaW5nIHJlc2NoZWR1bGVkICAq LworCXNldF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKTsKKwlkZWxfdGltZXJfc3lu YygmYWRhcHRlci0+d2F0Y2hkb2dfdGltZXIpOworCWRlbF90aW1lcl9zeW5jKCZhZGFwdGVyLT5w aHlfaW5mb190aW1lcik7CisKKwlmbHVzaF9zY2hlZHVsZWRfd29yaygpOworCisJLyogUmVsZWFz ZSBjb250cm9sIG9mIGgvdyB0byBmL3cuICBJZiBmL3cgaXMgQU1UIGVuYWJsZWQsIHRoaXMKKwkg KiB3b3VsZCBoYXZlIGFscmVhZHkgaGFwcGVuZWQgaW4gY2xvc2UgYW5kIGlzIHJlZHVuZGFudC4g Ki8KKwlpZ2JfcmVsZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOworCisJdW5yZWdpc3Rlcl9uZXRk ZXYobmV0ZGV2KTsKKworCWlmIChhZGFwdGVyLT5ody5waHkub3BzLnJlc2V0X3BoeSAmJgorCSAg ICAhaWdiX2NoZWNrX3Jlc2V0X2Jsb2NrKCZhZGFwdGVyLT5odykpCisJCWFkYXB0ZXItPmh3LnBo eS5vcHMucmVzZXRfcGh5KCZhZGFwdGVyLT5odyk7CisKKwlpZ2JfcmVtb3ZlX2RldmljZSgmYWRh cHRlci0+aHcpOworCWlnYl9yZXNldF9pbnRlcnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKwor CWlnYl9mcmVlX3F1ZXVlcyhhZGFwdGVyKTsKKworCWlvdW5tYXAoYWRhcHRlci0+aHcuaHdfYWRk cik7CisJaWYgKGFkYXB0ZXItPmh3LmZsYXNoX2FkZHJlc3MpCisJCWlvdW5tYXAoYWRhcHRlci0+ aHcuZmxhc2hfYWRkcmVzcyk7CisJcGNpX3JlbGVhc2VfcmVnaW9ucyhwZGV2KTsKKworCWZyZWVf bmV0ZGV2KG5ldGRldik7CisKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7Cit9CisKKy8qKgor ICogaWdiX3N3X2luaXQgLSBJbml0aWFsaXplIGdlbmVyYWwgc29mdHdhcmUgc3RydWN0dXJlcyAo c3RydWN0IGlnYl9hZGFwdGVyKQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJl IHRvIGluaXRpYWxpemUKKyAqCisgKiBpZ2Jfc3dfaW5pdCBpbml0aWFsaXplcyB0aGUgQWRhcHRl ciBwcml2YXRlIGRhdGEgc3RydWN0dXJlLgorICogRmllbGRzIGFyZSBpbml0aWFsaXplZCBiYXNl ZCBvbiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIGFuZAorICogT1MgbmV0d29yayBkZXZpY2Ugc2V0 dGluZ3MgKE1UVSBzaXplKS4KKyAqKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IGlnYl9zd19pbml0 KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0g JmFkYXB0ZXItPmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRk ZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVyLT5wZGV2OworCisJcGNpX3JlYWRf Y29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZody0+YnVzLnBjaV9jbWRfd29yZCk7CisK KwlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gTUFYSU1VTV9FVEhFUk5FVF9WTEFOX1NJWkU7CisJ YWRhcHRlci0+cnhfcHNfaGRyX3NpemUgPSAwOyAvKiBkaXNhYmxlIHBhY2tldCBzcGxpdCAqLwor CWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbmV0ZGV2LT5tdHUgKyBFVEhfSExFTiArIEVUSF9G Q1NfTEVOOworCWFkYXB0ZXItPm1pbl9mcmFtZV9zaXplID0gRVRIX1pMRU4gKyBFVEhfRkNTX0xF TjsKKworCS8qIE51bWJlciBvZiBzdXBwb3J0ZWQgcXVldWVzLiAqLworCS8qIEhhdmluZyBtb3Jl IHF1ZXVlcyB0aGFuIENQVXMgZG9lc24ndCBtYWtlIHNlbnNlLiAqLworCWFkYXB0ZXItPm51bV90 eF9xdWV1ZXMgPSAxOworCWFkYXB0ZXItPm51bV9yeF9xdWV1ZXMgPSBtaW4oSUdCX01BWF9SWF9R VUVVRVMsIG51bV9vbmxpbmVfY3B1cygpKTsKKworCWlnYl9zZXRfaW50ZXJydXB0X2NhcGFiaWxp dHkoYWRhcHRlcik7CisKKwlpZiAoaWdiX2FsbG9jX3F1ZXVlcyhhZGFwdGVyKSkgeworCQlkZXZf ZXJyKCZwZGV2LT5kZXYsICJVbmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBxdWV1ZXNcbiIp OworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBFeHBsaWNpdGx5IGRpc2FibGUgSVJRIHNp bmNlIHRoZSBOSUMgY2FuIGJlIGluIGFueSBzdGF0ZS4gKi8KKwlpZ2JfaXJxX2Rpc2FibGUoYWRh cHRlcik7CisKKwlzZXRfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSk7CisJcmV0dXJu IDA7Cit9CisKKy8qKgorICogaWdiX29wZW4gLSBDYWxsZWQgd2hlbiBhIG5ldHdvcmsgaW50ZXJm YWNlIGlzIG1hZGUgYWN0aXZlCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZpY2Ug c3RydWN0dXJlCisgKgorICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9u IGZhaWx1cmUKKyAqCisgKiBUaGUgb3BlbiBlbnRyeSBwb2ludCBpcyBjYWxsZWQgd2hlbiBhIG5l dHdvcmsgaW50ZXJmYWNlIGlzIG1hZGUKKyAqIGFjdGl2ZSBieSB0aGUgc3lzdGVtIChJRkZfVVAp LiAgQXQgdGhpcyBwb2ludCBhbGwgcmVzb3VyY2VzIG5lZWRlZAorICogZm9yIHRyYW5zbWl0IGFu ZCByZWNlaXZlIG9wZXJhdGlvbnMgYXJlIGFsbG9jYXRlZCwgdGhlIGludGVycnVwdAorICogaGFu ZGxlciBpcyByZWdpc3RlcmVkIHdpdGggdGhlIE9TLCB0aGUgd2F0Y2hkb2cgdGltZXIgaXMgc3Rh cnRlZCwKKyAqIGFuZCB0aGUgc3RhY2sgaXMgbm90aWZpZWQgdGhhdCB0aGUgaW50ZXJmYWNlIGlz IHJlYWR5LgorICoqLworc3RhdGljIGludCBpZ2Jfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0 ZGV2KQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRl dik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwlpbnQgZXJyOworCWlu dCBpOworCisJLyogZGlzYWxsb3cgb3BlbiBkdXJpbmcgdGVzdCAqLworCWlmICh0ZXN0X2JpdChf X0lHQl9URVNUSU5HLCAmYWRhcHRlci0+c3RhdGUpKQorCQlyZXR1cm4gLUVCVVNZOworCisJLyog YWxsb2NhdGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMgKi8KKwllcnIgPSBpZ2Jfc2V0dXBfYWxsX3R4 X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zZXR1cF90eDsKKwor CS8qIGFsbG9jYXRlIHJlY2VpdmUgZGVzY3JpcHRvcnMgKi8KKwllcnIgPSBpZ2Jfc2V0dXBfYWxs X3J4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZiAoZXJyKQorCQlnb3RvIGVycl9zZXR1cF9yeDsK KworCS8qIGUxMDAwX3Bvd2VyX3VwX3BoeShhZGFwdGVyKTsgKi8KKworCWFkYXB0ZXItPm1uZ192 bGFuX2lkID0gSUdCX01OR19WTEFOX05PTkU7CisJaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2ll LnN0YXR1cyAmCisJICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pKQorCQlp Z2JfdXBkYXRlX21uZ192bGFuKGFkYXB0ZXIpOworCisJLyogYmVmb3JlIHdlIGFsbG9jYXRlIGFu IGludGVycnVwdCwgd2UgbXVzdCBiZSByZWFkeSB0byBoYW5kbGUgaXQuCisJICogU2V0dGluZyBE RUJVR19TSElSUSBpbiB0aGUga2VybmVsIG1ha2VzIGl0IGZpcmUgYW4gaW50ZXJydXB0CisJICog YXMgc29vbiBhcyB3ZSBjYWxsIHBjaV9yZXF1ZXN0X2lycSwgc28gd2UgaGF2ZSB0byBzZXR1cCBv dXIKKwkgKiBjbGVhbl9yeCBoYW5kbGVyIGJlZm9yZSB3ZSBkbyBzby4gICovCisJaWdiX2NvbmZp Z3VyZShhZGFwdGVyKTsKKworCWVyciA9IGlnYl9yZXF1ZXN0X2lycShhZGFwdGVyKTsKKwlpZiAo ZXJyKQorCQlnb3RvIGVycl9yZXFfaXJxOworCisJLyogRnJvbSBoZXJlIG9uIHRoZSBjb2RlIGlz IHRoZSBzYW1lIGFzIGlnYl91cCgpICovCisJY2xlYXJfYml0KF9fSUdCX0RPV04sICZhZGFwdGVy LT5zdGF0ZSk7CisKKwluZXRpZl9wb2xsX2VuYWJsZShuZXRkZXYpOworCWZvciAoaSA9IDA7IGkg PCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCW5ldGlmX3BvbGxfZW5hYmxlKGFkYXB0 ZXItPnJ4X3JpbmdbaV0ubmV0ZGV2KTsKKworCS8qIENsZWFyIGFueSBwZW5kaW5nIGludGVycnVw dHMuICovCisJcmQzMihFMTAwMF9JQ1IpOworCisJaWdiX2lycV9lbmFibGUoYWRhcHRlcik7CisK KwluZXRpZl9zdGFydF9xdWV1ZShuZXRkZXYpOworCisJLyogRmlyZSBhIGxpbmsgc3RhdHVzIGNo YW5nZSBpbnRlcnJ1cHQgdG8gc3RhcnQgdGhlIHdhdGNoZG9nLiAqLworCXdyMzIoRTEwMDBfSUNT LCBFMTAwMF9JQ1NfTFNDKTsKKworCXJldHVybiAwOworCitlcnJfcmVxX2lycToKKwlpZ2JfcmVs ZWFzZV9od19jb250cm9sKGFkYXB0ZXIpOworCS8qIGUxMDAwX3Bvd2VyX2Rvd25fcGh5KGFkYXB0 ZXIpOyAqLworCWlnYl9mcmVlX2FsbF9yeF9yZXNvdXJjZXMoYWRhcHRlcik7CitlcnJfc2V0dXBf cng6CisJaWdiX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKK2Vycl9zZXR1cF90eDoK KwlpZ2JfcmVzZXQoYWRhcHRlcik7CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGlnYl9j bG9zZSAtIERpc2FibGVzIGEgbmV0d29yayBpbnRlcmZhY2UKKyAqIEBuZXRkZXY6IG5ldHdvcmsg aW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm5zIDAsIHRoaXMgaXMgbm90 IGFsbG93ZWQgdG8gZmFpbAorICoKKyAqIFRoZSBjbG9zZSBlbnRyeSBwb2ludCBpcyBjYWxsZWQg d2hlbiBhbiBpbnRlcmZhY2UgaXMgZGUtYWN0aXZhdGVkCisgKiBieSB0aGUgT1MuICBUaGUgaGFy ZHdhcmUgaXMgc3RpbGwgdW5kZXIgdGhlIGRyaXZlcidzIGNvbnRyb2wsIGJ1dAorICogbmVlZHMg dG8gYmUgZGlzYWJsZWQuICBBIGdsb2JhbCBNQUMgcmVzZXQgaXMgaXNzdWVkIHRvIHN0b3AgdGhl CisgKiBoYXJkd2FyZSwgYW5kIGFsbCB0cmFuc21pdCBhbmQgcmVjZWl2ZSByZXNvdXJjZXMgYXJl IGZyZWVkLgorICoqLworc3RhdGljIGludCBpZ2JfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKm5l dGRldikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRk ZXYpOworCisJV0FSTl9PTih0ZXN0X2JpdChfX0lHQl9SRVNFVFRJTkcsICZhZGFwdGVyLT5zdGF0 ZSkpOworCWlnYl9kb3duKGFkYXB0ZXIpOworCisJaWdiX2ZyZWVfaXJxKGFkYXB0ZXIpOworCisJ aWdiX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyhhZGFwdGVyKTsKKwlpZ2JfZnJlZV9hbGxfcnhfcmVz b3VyY2VzKGFkYXB0ZXIpOworCisJLyoga2lsbCBtYW5hZ2VhYmlsaXR5IHZsYW4gSUQgaWYgc3Vw cG9ydGVkLCBidXQgbm90IGlmIGEgdmxhbiB3aXRoCisJICogdGhlIHNhbWUgSUQgaXMgcmVnaXN0 ZXJlZCBvbiB0aGUgaG9zdCBPUyAobGV0IDgwMjFxIGtpbGwgaXQpICovCisJaWYgKChhZGFwdGVy LT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJCQkgIEUxMDAwX01OR19ESENQX0NPT0tJRV9TVEFU VVNfVkxBTikgJiYKKwkgICAgICEoYWRhcHRlci0+dmxncnAgJiYKKwkgICAgICAgdmxhbl9ncm91 cF9nZXRfZGV2aWNlKGFkYXB0ZXItPnZsZ3JwLCBhZGFwdGVyLT5tbmdfdmxhbl9pZCkpKQorCQlp Z2Jfdmxhbl9yeF9raWxsX3ZpZChuZXRkZXYsIGFkYXB0ZXItPm1uZ192bGFuX2lkKTsKKworCXJl dHVybiAwOworfQorCisvKioKKyAqIGlnYl9zZXR1cF90eF9yZXNvdXJjZXMgLSBhbGxvY2F0ZSBU eCByZXNvdXJjZXMgKERlc2NyaXB0b3JzKQorICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3Ry dWN0dXJlCisgKiBAdHhfcmluZzogdHggZGVzY3JpcHRvciByaW5nIChmb3IgYSBzcGVjaWZpYyBx dWV1ZSkgdG8gc2V0dXAKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBm YWlsdXJlCisgKiovCisKK2ludCBpZ2Jfc2V0dXBfdHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRh cHRlciAqYWRhcHRlciwKKwkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1 Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHNpemU7CisKKwlzaXplID0g c2l6ZW9mKHN0cnVjdCBpZ2JfYnVmZmVyKSAqIHR4X3JpbmctPmNvdW50OworCXR4X3JpbmctPmJ1 ZmZlcl9pbmZvID0gdm1hbGxvYyhzaXplKTsKKwlpZiAoIXR4X3JpbmctPmJ1ZmZlcl9pbmZvKQor CQlnb3RvIGVycjsKKwltZW1zZXQodHhfcmluZy0+YnVmZmVyX2luZm8sIDAsIHNpemUpOworCisJ Lyogcm91bmQgdXAgdG8gbmVhcmVzdCA0SyAqLworCXR4X3JpbmctPnNpemUgPSB0eF9yaW5nLT5j b3VudCAqIHNpemVvZihzdHJ1Y3QgZTEwMDBfdHhfZGVzYykKKwkJCSsgc2l6ZW9mKHUzMik7CisJ dHhfcmluZy0+c2l6ZSA9IEFMSUdOKHR4X3JpbmctPnNpemUsIDQwOTYpOworCisJdHhfcmluZy0+ ZGVzYyA9IHBjaV9hbGxvY19jb25zaXN0ZW50KHBkZXYsIHR4X3JpbmctPnNpemUsCisJCQkJCSAg ICAgJnR4X3JpbmctPmRtYSk7CisKKwlpZiAoIXR4X3JpbmctPmRlc2MpCisJCWdvdG8gZXJyOwor CisJdHhfcmluZy0+YWRhcHRlciA9IGFkYXB0ZXI7CisJdHhfcmluZy0+bmV4dF90b191c2UgPSAw OworCXR4X3JpbmctPm5leHRfdG9fY2xlYW4gPSAwOworCXNwaW5fbG9ja19pbml0KCZ0eF9yaW5n LT50eF9jbGVhbl9sb2NrKTsKKwlzcGluX2xvY2tfaW5pdCgmdHhfcmluZy0+dHhfbG9jayk7CisJ cmV0dXJuIDA7CisKK2VycjoKKwl2ZnJlZSh0eF9yaW5nLT5idWZmZXJfaW5mbyk7CisJZGV2X2Vy cigmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkiVW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeSBmb3Ig dGhlIHRyYW5zbWl0IGRlc2NyaXB0b3IgcmluZ1xuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisK Ky8qKgorICogaWdiX3NldHVwX2FsbF90eF9yZXNvdXJjZXMgLSB3cmFwcGVyIHRvIGFsbG9jYXRl IFR4IHJlc291cmNlcworICoJCQkJICAoRGVzY3JpcHRvcnMpIGZvciBhbGwgcXVldWVzCisgKiBA YWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNj ZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiovCitzdGF0aWMgaW50IGlnYl9zZXR1cF9hbGxf dHhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgZXJy ID0gMDsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsK KwkJZXJyID0gaWdiX3NldHVwX3R4X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+dHhfcmlu Z1tpXSk7CisJCWlmIChlcnIpIHsKKwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJ CQkiQWxsb2NhdGlvbiBmb3IgVHggUXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKKwkJCWZvciAoaS0t OyBpID49IDA7IGktLSkKKwkJCQlpZ2JfZnJlZV90eF9yZXNvdXJjZXMoJmFkYXB0ZXItPnR4X3Jp bmdbaV0pOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAq IGlnYl9jb25maWd1cmVfdHggLSBDb25maWd1cmUgdHJhbnNtaXQgVW5pdCBhZnRlciBSZXNldAor ICogQGFkYXB0ZXI6IGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKgorICogQ29uZmlndXJlIHRo ZSBUeCB1bml0IG9mIHRoZSBNQUMgYWZ0ZXIgYSByZXNldC4KKyAqKi8KK3N0YXRpYyB2b2lkIGln Yl9jb25maWd1cmVfdHgoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCXU2NCB0ZGJh LCB0ZHdiYTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB0Y3Rs OworCXUzMiB0eGRjdGwsIHR4Y3RybDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBhZGFw dGVyLT5udW1fdHhfcXVldWVzOyBpKyspIHsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJihh ZGFwdGVyLT50eF9yaW5nW2ldKTsKKworCQl3cjMyKEUxMDAwX1RETEVOKGkpLAorCQkJCXJpbmct PmNvdW50ICogc2l6ZW9mKHN0cnVjdCBlMTAwMF90eF9kZXNjKSk7CisJCXRkYmEgPSByaW5nLT5k bWE7CisJCXdyMzIoRTEwMDBfVERCQUwoaSksCisJCQkJdGRiYSAmIDB4MDAwMDAwMDBmZmZmZmZm ZlVMTCk7CisJCXdyMzIoRTEwMDBfVERCQUgoaSksIHRkYmEgPj4gMzIpOworCisJCXRkd2JhID0g cmluZy0+ZG1hICsgcmluZy0+Y291bnQgKiBzaXplb2Yoc3RydWN0IGUxMDAwX3R4X2Rlc2MpOwor CQl0ZHdiYSB8PSAxOyAvKiBlbmFibGUgaGVhZCB3YiAqLworCQl3cjMyKEUxMDAwX1REV0JBTChp KSwKKwkJCQl0ZHdiYSAmIDB4MDAwMDAwMDBmZmZmZmZmZlVMTCk7CisJCXdyMzIoRTEwMDBfVERX QkFIKGkpLCB0ZHdiYSA+PiAzMik7CisKKwkJcmluZy0+aGVhZCA9IEUxMDAwX1RESChpKTsKKwkJ cmluZy0+dGFpbCA9IEUxMDAwX1REVChpKTsKKwkJd3JpdGVsKDAsIGh3LT5od19hZGRyICsgcmlu Zy0+dGFpbCk7CisJCXdyaXRlbCgwLCBody0+aHdfYWRkciArIHJpbmctPmhlYWQpOworCQl0eGRj dGwgPSByZDMyKEUxMDAwX1RYRENUTChpKSk7CisJCXR4ZGN0bCB8PSBFMTAwMF9UWERDVExfUVVF VUVfRU5BQkxFOworCQl3cjMyKEUxMDAwX1RYRENUTChpKSwgdHhkY3RsKTsKKworCQkvKiBUdXJu IG9mZiBSZWxheGVkIE9yZGVyaW5nIG9uIGhlYWQgd3JpdGUtYmFja3MuICBUaGUKKwkJICogd3Jp dGViYWNrcyBNVVNUIGJlIGRlbGl2ZXJlZCBpbiBvcmRlciBvciBpdCB3aWxsCisJCSAqIGNvbXBs ZXRlbHkgc2NyZXcgdXAgb3VyIGJvb2tlZXBpbmcuCisJCSAqLworCQl0eGN0cmwgPSByZDMyKEUx MDAwX0RDQV9UWENUUkwoaSkpOworCQl0eGN0cmwgJj0gfkUxMDAwX0RDQV9UWENUUkxfVFhfV0Jf Uk9fRU47CisJCXdyMzIoRTEwMDBfRENBX1RYQ1RSTChpKSwgdHhjdHJsKTsKKwl9CisKKworCisJ LyogVXNlIHRoZSBkZWZhdWx0IHZhbHVlcyBmb3IgdGhlIFR4IEludGVyIFBhY2tldCBHYXAgKElQ RykgdGltZXIgKi8KKworCS8qIFByb2dyYW0gdGhlIFRyYW5zbWl0IENvbnRyb2wgUmVnaXN0ZXIg Ki8KKworCXRjdGwgPSByZDMyKEUxMDAwX1RDVEwpOworCXRjdGwgJj0gfkUxMDAwX1RDVExfQ1Q7 CisJdGN0bCB8PSBFMTAwMF9UQ1RMX1BTUCB8IEUxMDAwX1RDVExfUlRMQyB8CisJCShFMTAwMF9D T0xMSVNJT05fVEhSRVNIT0xEIDw8IEUxMDAwX0NUX1NISUZUKTsKKworCWlnYl9jb25maWdfY29s bGlzaW9uX2Rpc3QoaHcpOworCisJLyogU2V0dXAgVHJhbnNtaXQgRGVzY3JpcHRvciBTZXR0aW5n cyBmb3IgZW9wIGRlc2NyaXB0b3IgKi8KKwlhZGFwdGVyLT50eGRfY21kID0gRTEwMDBfVFhEX0NN RF9FT1AgfCBFMTAwMF9UWERfQ01EX1JTOworCisJLyogRW5hYmxlIHRyYW5zbWl0cyAqLworCXRj dGwgfD0gRTEwMDBfVENUTF9FTjsKKworCXdyMzIoRTEwMDBfVENUTCwgdGN0bCk7Cit9CisKKy8q KgorICogaWdiX3NldHVwX3J4X3Jlc291cmNlcyAtIGFsbG9jYXRlIFJ4IHJlc291cmNlcyAoRGVz Y3JpcHRvcnMpCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9y aW5nOiAgICByeCBkZXNjcmlwdG9yIHJpbmcgKGZvciBhIHNwZWNpZmljIHF1ZXVlKSB0byBzZXR1 cAorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiov CisKK2ludCBpZ2Jfc2V0dXBfcnhfcmVzb3VyY2VzKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRl ciwKKwkJCSAgIHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKK3sKKwlzdHJ1Y3QgcGNpX2RldiAq cGRldiA9IGFkYXB0ZXItPnBkZXY7CisJaW50IHNpemUsIGRlc2NfbGVuOworCisjaWZkZWYgQ09O RklHX0lHQl9MUk8KKwlzaXplID0gc2l6ZW9mKHN0cnVjdCBuZXRfbHJvX2Rlc2MpICogTUFYX0xS T19ERVNDUklQVE9SUzsKKwlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSB2bWFsbG9jKHNpemUp OworCWlmICghcnhfcmluZy0+bHJvX21nci5scm9fYXJyKQorCQlnb3RvIGVycjsKKwltZW1zZXQo cnhfcmluZy0+bHJvX21nci5scm9fYXJyLCAwLCBzaXplKTsKKyNlbmRpZgorCisJc2l6ZSA9IHNp emVvZihzdHJ1Y3QgaWdiX2J1ZmZlcikgKiByeF9yaW5nLT5jb3VudDsKKwlyeF9yaW5nLT5idWZm ZXJfaW5mbyA9IHZtYWxsb2Moc2l6ZSk7CisJaWYgKCFyeF9yaW5nLT5idWZmZXJfaW5mbykKKwkJ Z290byBlcnI7CisJbWVtc2V0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKworCWRl c2NfbGVuID0gc2l6ZW9mKHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjKTsKKworCS8qIFJvdW5kIHVw IHRvIG5lYXJlc3QgNEsgKi8KKwlyeF9yaW5nLT5zaXplID0gcnhfcmluZy0+Y291bnQgKiBkZXNj X2xlbjsKKwlyeF9yaW5nLT5zaXplID0gQUxJR04ocnhfcmluZy0+c2l6ZSwgNDA5Nik7CisKKwly eF9yaW5nLT5kZXNjID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQocGRldiwgcnhfcmluZy0+c2l6ZSwK KwkJCQkJICAgICAmcnhfcmluZy0+ZG1hKTsKKworCWlmICghcnhfcmluZy0+ZGVzYykKKwkJZ290 byBlcnI7CisKKwlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0gMDsKKwlyeF9yaW5nLT5uZXh0X3Rv X3VzZSA9IDA7CisKKwlyeF9yaW5nLT5hZGFwdGVyID0gYWRhcHRlcjsKKwlyeF9yaW5nLT5uZXRk ZXYtPnByaXYgPSByeF9yaW5nOworCXJ4X3JpbmctPm5ldGRldi0+cG9sbCA9IGFkYXB0ZXItPm5l dGRldi0+cG9sbDsKKwlyeF9yaW5nLT5uZXRkZXYtPndlaWdodCA9IDY0OworCXNldF9iaXQoX19M SU5LX1NUQVRFX1NUQVJULCAmcnhfcmluZy0+bmV0ZGV2LT5zdGF0ZSk7CisKKwlyZXR1cm4gMDsK KworZXJyOgorI2lmZGVmIENPTkZJR19JR0JfTFJPCisJdmZyZWUocnhfcmluZy0+bHJvX21nci5s cm9fYXJyKTsKKwlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOworI2VuZGlmCisJdmZy ZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOworCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwg IlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yICIKKwkJInRoZSByZWNlaXZlIGRlc2NyaXB0 b3IgcmluZ1xuIik7CisJcmV0dXJuIC1FTk9NRU07Cit9CisKKy8qKgorICogaWdiX3NldHVwX2Fs bF9yeF9yZXNvdXJjZXMgLSB3cmFwcGVyIHRvIGFsbG9jYXRlIFJ4IHJlc291cmNlcworICoJCQkJ ICAoRGVzY3JpcHRvcnMpIGZvciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0 ZSBzdHJ1Y3R1cmUKKyAqCisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWls dXJlCisgKiovCitzdGF0aWMgaW50IGlnYl9zZXR1cF9hbGxfcnhfcmVzb3VyY2VzKHN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7 IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspIHsKKwkJZXJyID0gaWdiX3NldHVwX3J4 X3Jlc291cmNlcyhhZGFwdGVyLCAmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWlmIChlcnIpIHsK KwkJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkiQWxsb2NhdGlvbiBmb3IgUngg UXVldWUgJXUgZmFpbGVkXG4iLCBpKTsKKwkJCWZvciAoaS0tOyBpID49IDA7IGktLSkKKwkJCQlp Z2JfZnJlZV9yeF9yZXNvdXJjZXMoJmFkYXB0ZXItPnJ4X3JpbmdbaV0pOworCQkJYnJlYWs7CisJ CX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCisvKioKKyAqIGlnYl9zZXR1cF9yY3RsIC0gY29u ZmlndXJlIHRoZSByZWNlaXZlIGNvbnRyb2wgcmVnaXN0ZXJzCisgKiBAYWRhcHRlcjogQm9hcmQg cHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9yY3RsKHN0cnVj dCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0 ZXItPmh3OworCXUzMiByY3RsOworCXUzMiBzcnJjdGwgPSAwOworCWludCBpOworCisJcmN0bCA9 IHJkMzIoRTEwMDBfUkNUTCk7CisKKwlyY3RsICY9IH4oMyA8PCBFMTAwMF9SQ1RMX01PX1NISUZU KTsKKworCXJjdGwgfD0gRTEwMDBfUkNUTF9FTiB8IEUxMDAwX1JDVExfQkFNIHwKKwkJRTEwMDBf UkNUTF9MQk1fTk8gfCBFMTAwMF9SQ1RMX1JETVRTX0hBTEYgfAorCQkoYWRhcHRlci0+aHcubWFj Lm1jX2ZpbHRlcl90eXBlIDw8IEUxMDAwX1JDVExfTU9fU0hJRlQpOworCisJLyoKKwkgKiBlbmFi bGUgc3RyaXBwaW5nIG9mIENSQy4gSXQncyB1bmxpa2VseSB0aGlzIHdpbGwgYnJlYWsgQk1DCisJ ICogcmVkaXJlY3Rpb24gYXMgaXQgZGlkIHdpdGggZTEwMDAuIE5ld2VyIGZlYXR1cmVzIHJlcXVp cmUKKwkgKiB0aGF0IHRoZSBIVyBzdHJpcHMgdGhlIENSQy4KKwkqLworCXJjdGwgfD0gRTEwMDBf UkNUTF9TRUNSQzsKKworCXJjdGwgJj0gfkUxMDAwX1JDVExfU0JQOworCisJaWYgKGFkYXB0ZXIt Pm5ldGRldi0+bXR1IDw9IEVUSF9EQVRBX0xFTikKKwkJcmN0bCAmPSB+RTEwMDBfUkNUTF9MUEU7 CisJZWxzZQorCQlyY3RsIHw9IEUxMDAwX1JDVExfTFBFOworCWlmIChhZGFwdGVyLT5yeF9idWZm ZXJfbGVuIDw9IElHQl9SWEJVRkZFUl8yMDQ4KSB7CisJCS8qIFNldHVwIGJ1ZmZlciBzaXplcyAq LworCQlyY3RsICY9IH5FMTAwMF9SQ1RMX1NaXzQwOTY7CisJCXJjdGwgfD0gRTEwMDBfUkNUTF9C U0VYOworCQlzd2l0Y2ggKGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4pIHsKKwkJY2FzZSBJR0JfUlhC VUZGRVJfMjU2OgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX1NaXzI1NjsKKwkJCXJjdGwgJj0gfkUx MDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOworCQljYXNlIElHQl9SWEJVRkZFUl81MTI6CisJCQly Y3RsIHw9IEUxMDAwX1JDVExfU1pfNTEyOworCQkJcmN0bCAmPSB+RTEwMDBfUkNUTF9CU0VYOwor CQkJYnJlYWs7CisJCWNhc2UgSUdCX1JYQlVGRkVSXzEwMjQ6CisJCQlyY3RsIHw9IEUxMDAwX1JD VExfU1pfMTAyNDsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJCWJyZWFrOworCQlj YXNlIElHQl9SWEJVRkZFUl8yMDQ4OgorCQlkZWZhdWx0OgorCQkJcmN0bCB8PSBFMTAwMF9SQ1RM X1NaXzIwNDg7CisJCQlyY3RsICY9IH5FMTAwMF9SQ1RMX0JTRVg7CisJCQlicmVhazsKKwkJfQor CX0gZWxzZSB7CisJCXJjdGwgJj0gfkUxMDAwX1JDVExfQlNFWDsKKwkJc3JyY3RsID0gYWRhcHRl ci0+cnhfYnVmZmVyX2xlbiA+PiBFMTAwMF9TUlJDVExfQlNJWkVQS1RfU0hJRlQ7CisJfQorCisJ LyogODI1NzUgYW5kIGdyZWF0ZXIgc3VwcG9ydCBwYWNrZXQtc3BsaXQgd2hlcmUgdGhlIHByb3Rv Y29sCisJICogaGVhZGVyIGlzIHBsYWNlZCBpbiBza2ItPmRhdGEgYW5kIHRoZSBwYWNrZXQgZGF0 YSBpcworCSAqIHBsYWNlZCBpbiBwYWdlcyBoYW5naW5nIG9mZiBvZiBza2Jfc2hpbmZvKHNrYikt Pm5yX2ZyYWdzLgorCSAqIEluIHRoZSBjYXNlIG9mIGEgbm9uLXNwbGl0LCBza2ItPmRhdGEgaXMg bGluZWFybHkgZmlsbGVkLAorCSAqIGZvbGxvd2VkIGJ5IHRoZSBwYWdlIGJ1ZmZlcnMuICBUaGVy ZWZvcmUsIHNrYi0+ZGF0YSBpcworCSAqIHNpemVkIHRvIGhvbGQgdGhlIGxhcmdlc3QgcHJvdG9j b2wgaGVhZGVyLgorCSAqLworCS8qIGFsbG9jYXRpb25zIHVzaW5nIGFsbG9jX3BhZ2UgdGFrZSB0 b28gbG9uZyBmb3IgcmVndWxhciBNVFUKKwkgKiBzbyBvbmx5IGVuYWJsZSBwYWNrZXQgc3BsaXQg Zm9yIGp1bWJvIGZyYW1lcyAqLworCWlmIChyY3RsICYgRTEwMDBfUkNUTF9MUEUpIHsKKwkJYWRh cHRlci0+cnhfcHNfaGRyX3NpemUgPSBJR0JfUlhCVUZGRVJfMTI4OworCQlzcnJjdGwgfD0gYWRh cHRlci0+cnhfcHNfaGRyX3NpemUgPDwKKwkJCSBFMTAwMF9TUlJDVExfQlNJWkVIRFJTSVpFX1NI SUZUOworCQlzcnJjdGwgfD0gRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0hEUl9TUExJVF9BTFdBWVM7 CisJfSBlbHNlIHsKKwkJYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgPSAwOworCQlzcnJjdGwgfD0g RTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUY7CisJfQorCisJZm9yIChpID0gMDsgaSA8 IGFkYXB0ZXItPm51bV9yeF9xdWV1ZXM7IGkrKykKKwkJd3IzMihFMTAwMF9TUlJDVEwoaSksIHNy cmN0bCk7CisKKwl3cjMyKEUxMDAwX1JDVEwsIHJjdGwpOworfQorCisvKioKKyAqIGlnYl9jb25m aWd1cmVfcnggLSBDb25maWd1cmUgcmVjZWl2ZSBVbml0IGFmdGVyIFJlc2V0CisgKiBAYWRhcHRl cjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBDb25maWd1cmUgdGhlIFJ4IHVuaXQg b2YgdGhlIE1BQyBhZnRlciBhIHJlc2V0LgorICoqLworc3RhdGljIHZvaWQgaWdiX2NvbmZpZ3Vy ZV9yeChzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJdTY0IHJkYmE7CisJc3RydWN0 IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgcmN0bCwgcnhjc3VtOworCXUzMiBy eGRjdGw7CisJaW50IGk7CisKKwkvKiBkaXNhYmxlIHJlY2VpdmVzIHdoaWxlIHNldHRpbmcgdXAg dGhlIGRlc2NyaXB0b3JzICovCisJcmN0bCA9IHJkMzIoRTEwMDBfUkNUTCk7CisJd3IzMihFMTAw MF9SQ1RMLCByY3RsICYgfkUxMDAwX1JDVExfRU4pOworCXdyZmwoKTsKKwltZGVsYXkoMTApOwor CisJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5nID4gMykKKwkJd3IzMihFMTAwMF9JVFIsIGFkYXB0 ZXItPml0cik7CisKKwkvKiBTZXR1cCB0aGUgSFcgUnggSGVhZCBhbmQgVGFpbCBEZXNjcmlwdG9y IFBvaW50ZXJzIGFuZAorCSAqIHRoZSBCYXNlIGFuZCBMZW5ndGggb2YgdGhlIFJ4IERlc2NyaXB0 b3IgUmluZyAqLworCWZvciAoaSA9IDA7IGkgPCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKysp IHsKKwkJc3RydWN0IGlnYl9yaW5nICpyaW5nID0gJihhZGFwdGVyLT5yeF9yaW5nW2ldKTsKKwkJ cmRiYSA9IHJpbmctPmRtYTsKKwkJd3IzMihFMTAwMF9SREJBTChpKSwKKwkJCQlyZGJhICYgMHgw MDAwMDAwMGZmZmZmZmZmVUxMKTsKKwkJd3IzMihFMTAwMF9SREJBSChpKSwgcmRiYSA+PiAzMik7 CisJCXdyMzIoRTEwMDBfUkRMRU4oaSksCisJCQkgICAgICAgcmluZy0+Y291bnQgKiBzaXplb2Yo dW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MpKTsKKworCQlyaW5nLT5oZWFkID0gRTEwMDBfUkRIKGkp OworCQlyaW5nLT50YWlsID0gRTEwMDBfUkRUKGkpOworCQl3cml0ZWwoMCwgaHctPmh3X2FkZHIg KyByaW5nLT50YWlsKTsKKwkJd3JpdGVsKDAsIGh3LT5od19hZGRyICsgcmluZy0+aGVhZCk7CisK KwkJcnhkY3RsID0gcmQzMihFMTAwMF9SWERDVEwoaSkpOworCQlyeGRjdGwgfD0gRTEwMDBfUlhE Q1RMX1FVRVVFX0VOQUJMRTsKKwkJcnhkY3RsICY9IDB4RkZGMDAwMDA7CisJCXJ4ZGN0bCB8PSBJ R0JfUlhfUFRIUkVTSDsKKwkJcnhkY3RsIHw9IElHQl9SWF9IVEhSRVNIIDw8IDg7CisJCXJ4ZGN0 bCB8PSBJR0JfUlhfV1RIUkVTSCA8PCAxNjsKKwkJd3IzMihFMTAwMF9SWERDVEwoaSksIHJ4ZGN0 bCk7CisjaWZkZWYgQ09ORklHX0lHQl9MUk8KKwkJLyogSW50aXRpYWwgTFJPIFNldHRpbmdzICov CisJCXJpbmctPmxyb19tZ3IubWF4X2FnZ3IgPSBNQVhfTFJPX0FHR1I7CisJCXJpbmctPmxyb19t Z3IubWF4X2Rlc2MgPSBNQVhfTFJPX0RFU0NSSVBUT1JTOworCQlyaW5nLT5scm9fbWdyLmdldF9z a2JfaGVhZGVyID0gaWdiX2dldF9za2JfaGRyOworCQlyaW5nLT5scm9fbWdyLmZlYXR1cmVzID0g TFJPX0ZfTkFQSSB8IExST19GX0VYVFJBQ1RfVkxBTl9JRDsKKwkJcmluZy0+bHJvX21nci5kZXYg PSBhZGFwdGVyLT5uZXRkZXY7CisJCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkID0gQ0hFQ0tTVU1f VU5ORUNFU1NBUlk7CisJCXJpbmctPmxyb19tZ3IuaXBfc3VtbWVkX2FnZ3IgPSBDSEVDS1NVTV9V Tk5FQ0VTU0FSWTsKKyNlbmRpZgorCX0KKworCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID4g MSkgeworCQl1MzIgcmFuZG9tWzEwXTsKKwkJdTMyIG1ycWM7CisJCXUzMiBqLCBzaGlmdDsKKwkJ dW5pb24gZTEwMDBfcmV0YSB7CisJCQl1MzIgZHdvcmQ7CisJCQl1OCAgYnl0ZXNbNF07CisJCX0g cmV0YTsKKworCQlnZXRfcmFuZG9tX2J5dGVzKCZyYW5kb21bMF0sIDQwKTsKKworCQlpZiAoaHct Pm1hYy50eXBlID49IGUxMDAwXzgyNTc2KQorCQkJc2hpZnQgPSAwOworCQllbHNlCisJCQlzaGlm dCA9IDY7CisJCWZvciAoaiA9IDA7IGogPCAoMzIgKiA0KTsgaisrKSB7CisJCQlyZXRhLmJ5dGVz W2ogJiAzXSA9CisJCQkJKGogJSBhZGFwdGVyLT5udW1fcnhfcXVldWVzKSA8PCBzaGlmdDsKKwkJ CWlmICgoaiAmIDMpID09IDMpCisJCQkJd3JpdGVsKHJldGEuZHdvcmQsCisJCQkJICAgICAgIGh3 LT5od19hZGRyICsgRTEwMDBfUkVUQSgwKSArIChqICYgfjMpKTsKKwkJfQorCQltcnFjID0gRTEw MDBfTVJRQ19FTkFCTEVfUlNTXzRROworCisJCS8qIEZpbGwgb3V0IGhhc2ggZnVuY3Rpb24gc2Vl ZHMgKi8KKwkJZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisJCQlhcnJheV93cjMyKEUxMDAwX1JT U1JLKDApLCBqLCByYW5kb21bal0pOworCisJCW1ycWMgfD0gKEUxMDAwX01SUUNfUlNTX0ZJRUxE X0lQVjQgfAorCQkJIEUxMDAwX01SUUNfUlNTX0ZJRUxEX0lQVjRfVENQKTsKKwkJbXJxYyB8PSAo RTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNiB8CisJCQkgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBW Nl9UQ1ApOworCQltcnFjIHw9IChFMTAwMF9NUlFDX1JTU19GSUVMRF9JUFY0X1VEUCB8CisJCQkg RTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9VRFApOworCQltcnFjIHw9IChFMTAwMF9NUlFDX1JT U19GSUVMRF9JUFY2X1VEUF9FWCB8CisJCQkgRTEwMDBfTVJRQ19SU1NfRklFTERfSVBWNl9UQ1Bf RVgpOworCisKKwkJd3IzMihFMTAwMF9NUlFDLCBtcnFjKTsKKworCQkvKiBNdWx0aXF1ZXVlIGFu ZCByYXcgcGFja2V0IGNoZWNrc3VtbWluZyBhcmUgbXV0dWFsbHkKKwkJICogZXhjbHVzaXZlLiAg Tm90ZSB0aGF0IHRoaXMgbm90IHRoZSBzYW1lIGFzIFRDUC9JUAorCQkgKiBjaGVja3N1bW1pbmcs IHdoaWNoIHdvcmtzIGZpbmUuICovCisJCXJ4Y3N1bSA9IHJkMzIoRTEwMDBfUlhDU1VNKTsKKwkJ cnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9QQ1NEOworCQl3cjMyKEUxMDAwX1JYQ1NVTSwgcnhjc3Vt KTsKKwl9IGVsc2UgeworCQkvKiBFbmFibGUgUmVjZWl2ZSBDaGVja3N1bSBPZmZsb2FkIGZvciBU Q1AgYW5kIFVEUCAqLworCQlyeGNzdW0gPSByZDMyKEUxMDAwX1JYQ1NVTSk7CisJCWlmIChhZGFw dGVyLT5yeF9jc3VtKSB7CisJCQlyeGNzdW0gfD0gRTEwMDBfUlhDU1VNX1RVT0ZMOworCisJCQkv KiBFbmFibGUgSVB2NCBwYXlsb2FkIGNoZWNrc3VtIGZvciBVRFAgZnJhZ21lbnRzCisJCQkgKiBN dXN0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBwYWNrZXQtc3BsaXQuICovCisJCQlpZiAo YWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCisJCQkJcnhjc3VtIHw9IEUxMDAwX1JYQ1NVTV9JUFBD U0U7CisJCX0gZWxzZSB7CisJCQlyeGNzdW0gJj0gfkUxMDAwX1JYQ1NVTV9UVU9GTDsKKwkJCS8q IGRvbid0IG5lZWQgdG8gY2xlYXIgSVBQQ1NFIGFzIGl0IGRlZmF1bHRzIHRvIDAgKi8KKwkJfQor CQl3cjMyKEUxMDAwX1JYQ1NVTSwgcnhjc3VtKTsKKwl9CisKKwlpZiAoYWRhcHRlci0+dmxncnAp CisJCXdyMzIoRTEwMDBfUkxQTUwsCisJCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUgKyBWTEFO X1RBR19TSVpFKTsKKwllbHNlCisJCXdyMzIoRTEwMDBfUkxQTUwsIGFkYXB0ZXItPm1heF9mcmFt ZV9zaXplKTsKKworCS8qIEVuYWJsZSBSZWNlaXZlcyAqLworCXdyMzIoRTEwMDBfUkNUTCwgcmN0 bCk7Cit9CisKKy8qKgorICogaWdiX2ZyZWVfdHhfcmVzb3VyY2VzIC0gRnJlZSBUeCBSZXNvdXJj ZXMgcGVyIFF1ZXVlCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEB0 eF9yaW5nOiBUeCBkZXNjcmlwdG9yIHJpbmcgZm9yIGEgc3BlY2lmaWMgcXVldWUKKyAqCisgKiBG cmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKKyAqKi8KK3N0YXRpYyB2b2lkIGln Yl9mcmVlX3R4X3Jlc291cmNlcyhzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcpCit7CisJc3RydWN0 IHBjaV9kZXYgKnBkZXYgPSB0eF9yaW5nLT5hZGFwdGVyLT5wZGV2OworCisJaWdiX2NsZWFuX3R4 X3JpbmcodHhfcmluZyk7CisKKwl2ZnJlZSh0eF9yaW5nLT5idWZmZXJfaW5mbyk7CisJdHhfcmlu Zy0+YnVmZmVyX2luZm8gPSBOVUxMOworCisJcGNpX2ZyZWVfY29uc2lzdGVudChwZGV2LCB0eF9y aW5nLT5zaXplLCB0eF9yaW5nLT5kZXNjLCB0eF9yaW5nLT5kbWEpOworCisJdHhfcmluZy0+ZGVz YyA9IE5VTEw7Cit9CisKKy8qKgorICogaWdiX2ZyZWVfYWxsX3R4X3Jlc291cmNlcyAtIEZyZWUg VHggUmVzb3VyY2VzIGZvciBBbGwgUXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBz dHJ1Y3R1cmUKKyAqCisgKiBGcmVlIGFsbCB0cmFuc21pdCBzb2Z0d2FyZSByZXNvdXJjZXMKKyAq Ki8KK3N0YXRpYyB2b2lkIGlnYl9mcmVlX2FsbF90eF9yZXNvdXJjZXMoc3RydWN0IGlnYl9hZGFw dGVyICphZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51 bV90eF9xdWV1ZXM7IGkrKykKKwkJaWdiX2ZyZWVfdHhfcmVzb3VyY2VzKCZhZGFwdGVyLT50eF9y aW5nW2ldKTsKK30KKworc3RhdGljIHZvaWQgaWdiX3VubWFwX2FuZF9mcmVlX3R4X3Jlc291cmNl KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkJICAgc3RydWN0IGlnYl9idWZmZXIg KmJ1ZmZlcl9pbmZvKQoreworCWlmIChidWZmZXJfaW5mby0+ZG1hKSB7CisJCXBjaV91bm1hcF9w YWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJYnVmZmVyX2luZm8tPmRtYSwKKwkJCQlidWZmZXJfaW5m by0+bGVuZ3RoLAorCQkJCVBDSV9ETUFfVE9ERVZJQ0UpOworCQlidWZmZXJfaW5mby0+ZG1hID0g MDsKKwl9CisJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoYnVm ZmVyX2luZm8tPnNrYik7CisJCWJ1ZmZlcl9pbmZvLT5za2IgPSBOVUxMOworCX0KKwlidWZmZXJf aW5mby0+dGltZV9zdGFtcCA9IDA7CisJLyogYnVmZmVyX2luZm8gbXVzdCBiZSBjb21wbGV0ZWx5 IHNldCB1cCBpbiB0aGUgdHJhbnNtaXQgcGF0aCAqLworfQorCisvKioKKyAqIGlnYl9jbGVhbl90 eF9yaW5nIC0gRnJlZSBUeCBCdWZmZXJzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1 Y3R1cmUKKyAqIEB0eF9yaW5nOiByaW5nIHRvIGJlIGNsZWFuZWQKKyAqKi8KK3N0YXRpYyB2b2lk IGlnYl9jbGVhbl90eF9yaW5nKHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3Qg aWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0eF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBpZ2JfYnVm ZmVyICpidWZmZXJfaW5mbzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisJdW5zaWduZWQgaW50IGk7 CisKKwlpZiAoIXR4X3JpbmctPmJ1ZmZlcl9pbmZvKQorCQlyZXR1cm47CisJLyogRnJlZSBhbGwg dGhlIFR4IHJpbmcgc2tfYnVmZnMgKi8KKworCWZvciAoaSA9IDA7IGkgPCB0eF9yaW5nLT5jb3Vu dDsgaSsrKSB7CisJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlp Z2JfdW5tYXBfYW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOworCX0K KworCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIpICogdHhfcmluZy0+Y291bnQ7CisJ bWVtc2V0KHR4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXplKTsKKworCS8qIFplcm8gb3V0IHRo ZSBkZXNjcmlwdG9yIHJpbmcgKi8KKworCW1lbXNldCh0eF9yaW5nLT5kZXNjLCAwLCB0eF9yaW5n LT5zaXplKTsKKworCXR4X3JpbmctPm5leHRfdG9fdXNlID0gMDsKKwl0eF9yaW5nLT5uZXh0X3Rv X2NsZWFuID0gMDsKKworCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+ aGVhZCk7CisJd3JpdGVsKDAsIGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsK K30KKworLyoqCisgKiBpZ2JfY2xlYW5fYWxsX3R4X3JpbmdzIC0gRnJlZSBUeCBCdWZmZXJzIGZv ciBhbGwgcXVldWVzCisgKiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8K K3N0YXRpYyB2b2lkIGlnYl9jbGVhbl9hbGxfdHhfcmluZ3Moc3RydWN0IGlnYl9hZGFwdGVyICph ZGFwdGVyKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV90eF9x dWV1ZXM7IGkrKykKKwkJaWdiX2NsZWFuX3R4X3JpbmcoJmFkYXB0ZXItPnR4X3JpbmdbaV0pOwor fQorCisvKioKKyAqIGlnYl9mcmVlX3J4X3Jlc291cmNlcyAtIEZyZWUgUnggUmVzb3VyY2VzCisg KiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqIEByeF9yaW5nOiByaW5nIHRv IGNsZWFuIHRoZSByZXNvdXJjZXMgZnJvbQorICoKKyAqIEZyZWUgYWxsIHJlY2VpdmUgc29mdHdh cmUgcmVzb3VyY2VzCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfZnJlZV9yeF9yZXNvdXJjZXMoc3Ry dWN0IGlnYl9yaW5nICpyeF9yaW5nKQoreworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gcnhfcmlu Zy0+YWRhcHRlci0+cGRldjsKKworCWlnYl9jbGVhbl9yeF9yaW5nKHJ4X3JpbmcpOworCisJdmZy ZWUocnhfcmluZy0+YnVmZmVyX2luZm8pOworCXJ4X3JpbmctPmJ1ZmZlcl9pbmZvID0gTlVMTDsK KworI2lmZGVmIENPTkZJR19JR0JfTFJPCisJdmZyZWUocnhfcmluZy0+bHJvX21nci5scm9fYXJy KTsKKwlyeF9yaW5nLT5scm9fbWdyLmxyb19hcnIgPSBOVUxMOworI2VuZGlmIAorCisJcGNpX2Zy ZWVfY29uc2lzdGVudChwZGV2LCByeF9yaW5nLT5zaXplLCByeF9yaW5nLT5kZXNjLCByeF9yaW5n LT5kbWEpOworCisJcnhfcmluZy0+ZGVzYyA9IE5VTEw7Cit9CisKKy8qKgorICogaWdiX2ZyZWVf YWxsX3J4X3Jlc291cmNlcyAtIEZyZWUgUnggUmVzb3VyY2VzIGZvciBBbGwgUXVldWVzCisgKiBA YWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqCisgKiBGcmVlIGFsbCByZWNlaXZl IHNvZnR3YXJlIHJlc291cmNlcworICoqLworc3RhdGljIHZvaWQgaWdiX2ZyZWVfYWxsX3J4X3Jl c291cmNlcyhzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJaW50IGk7CisKKwlmb3Ig KGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWlnYl9mcmVlX3J4 X3Jlc291cmNlcygmYWRhcHRlci0+cnhfcmluZ1tpXSk7CisJCWRldl9wdXQoYWRhcHRlci0+cnhf cmluZ1tpXS5uZXRkZXYpOworCX0KK30KKworLyoqCisgKiBpZ2JfY2xlYW5fcnhfcmluZyAtIEZy ZWUgUnggQnVmZmVycyBwZXIgUXVldWUKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVj dHVyZQorICogQHJ4X3Jpbmc6IHJpbmcgdG8gZnJlZSBidWZmZXJzIGZyb20KKyAqKi8KK3N0YXRp YyB2b2lkIGlnYl9jbGVhbl9yeF9yaW5nKHN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZykKK3sKKwlz dHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBp Z2JfYnVmZmVyICpidWZmZXJfaW5mbzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXIt PnBkZXY7CisJdW5zaWduZWQgbG9uZyBzaXplOworCXVuc2lnbmVkIGludCBpOworCisJaWYgKCFy eF9yaW5nLT5idWZmZXJfaW5mbykKKwkJcmV0dXJuOworCS8qIEZyZWUgYWxsIHRoZSBSeCByaW5n IHNrX2J1ZmZzICovCisJZm9yIChpID0gMDsgaSA8IHJ4X3JpbmctPmNvdW50OyBpKyspIHsKKwkJ YnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisJCWlmIChidWZmZXJfaW5m by0+ZG1hKSB7CisJCQlpZiAoYWRhcHRlci0+cnhfcHNfaGRyX3NpemUpCisJCQkJcGNpX3VubWFw X3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkJIGFkYXB0ZXItPnJ4X3BzX2hk cl9zaXplLAorCQkJCQkJIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCQllbHNlCisJCQkJcGNpX3Vu bWFwX3NpbmdsZShwZGV2LCBidWZmZXJfaW5mby0+ZG1hLAorCQkJCQkJIGFkYXB0ZXItPnJ4X2J1 ZmZlcl9sZW4sCisJCQkJCQkgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5k bWEgPSAwOworCQl9CisKKwkJaWYgKGJ1ZmZlcl9pbmZvLT5za2IpIHsKKwkJCWRldl9rZnJlZV9z a2IoYnVmZmVyX2luZm8tPnNrYik7CisJCQlidWZmZXJfaW5mby0+c2tiID0gTlVMTDsKKwkJfQor CQlpZiAoYnVmZmVyX2luZm8tPnBhZ2UpIHsKKwkJCWlmIChidWZmZXJfaW5mby0+cGFnZV9kbWEp CisJCQkJcGNpX3VubWFwX3BhZ2UocGRldiwgYnVmZmVyX2luZm8tPnBhZ2VfZG1hLAorCQkJCQkg ICAgICAgUEFHRV9TSVpFIC8gMiwKKwkJCQkJICAgICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJ CQlwdXRfcGFnZShidWZmZXJfaW5mby0+cGFnZSk7CisJCQlidWZmZXJfaW5mby0+cGFnZSA9IE5V TEw7CisJCQlidWZmZXJfaW5mby0+cGFnZV9kbWEgPSAwOworCQkJYnVmZmVyX2luZm8tPnBhZ2Vf b2Zmc2V0ID0gMDsKKwkJfQorCX0KKworCXNpemUgPSBzaXplb2Yoc3RydWN0IGlnYl9idWZmZXIp ICogcnhfcmluZy0+Y291bnQ7CisJbWVtc2V0KHJ4X3JpbmctPmJ1ZmZlcl9pbmZvLCAwLCBzaXpl KTsKKworCS8qIFplcm8gb3V0IHRoZSBkZXNjcmlwdG9yIHJpbmcgKi8KKwltZW1zZXQocnhfcmlu Zy0+ZGVzYywgMCwgcnhfcmluZy0+c2l6ZSk7CisKKwlyeF9yaW5nLT5uZXh0X3RvX2NsZWFuID0g MDsKKwlyeF9yaW5nLT5uZXh0X3RvX3VzZSA9IDA7CisKKwl3cml0ZWwoMCwgYWRhcHRlci0+aHcu aHdfYWRkciArIHJ4X3JpbmctPmhlYWQpOworCXdyaXRlbCgwLCBhZGFwdGVyLT5ody5od19hZGRy ICsgcnhfcmluZy0+dGFpbCk7Cit9CisKKy8qKgorICogaWdiX2NsZWFuX2FsbF9yeF9yaW5ncyAt IEZyZWUgUnggQnVmZmVycyBmb3IgYWxsIHF1ZXVlcworICogQGFkYXB0ZXI6IGJvYXJkIHByaXZh dGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpZ2JfY2xlYW5fYWxsX3J4X3JpbmdzKHN0 cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkg PCBhZGFwdGVyLT5udW1fcnhfcXVldWVzOyBpKyspCisJCWlnYl9jbGVhbl9yeF9yaW5nKCZhZGFw dGVyLT5yeF9yaW5nW2ldKTsKK30KKworLyoqCisgKiBpZ2Jfc2V0X21hYyAtIENoYW5nZSB0aGUg RXRoZXJuZXQgQWRkcmVzcyBvZiB0aGUgTklDCisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFj ZSBkZXZpY2Ugc3RydWN0dXJlCisgKiBAcDogcG9pbnRlciB0byBhbiBhZGRyZXNzIHN0cnVjdHVy ZQorICoKKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBvbiBmYWlsdXJlCisgKiov CitzdGF0aWMgaW50IGlnYl9zZXRfbWFjKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIHZvaWQg KnApCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2 KTsKKwlzdHJ1Y3Qgc29ja2FkZHIgKmFkZHIgPSBwOworCisJaWYgKCFpc192YWxpZF9ldGhlcl9h ZGRyKGFkZHItPnNhX2RhdGEpKQorCQlyZXR1cm4gLUVBRERSTk9UQVZBSUw7CisKKwltZW1jcHko bmV0ZGV2LT5kZXZfYWRkciwgYWRkci0+c2FfZGF0YSwgbmV0ZGV2LT5hZGRyX2xlbik7CisJbWVt Y3B5KGFkYXB0ZXItPmh3Lm1hYy5hZGRyLCBhZGRyLT5zYV9kYXRhLCBuZXRkZXYtPmFkZHJfbGVu KTsKKworCWFkYXB0ZXItPmh3Lm1hYy5vcHMucmFyX3NldCgmYWRhcHRlci0+aHcsIGFkYXB0ZXIt Pmh3Lm1hYy5hZGRyLCAwKTsKKworCXJldHVybiAwOworfQorCisvKioKKyAqIGlnYl9zZXRfbXVs dGkgLSBNdWx0aWNhc3QgYW5kIFByb21pc2N1b3VzIG1vZGUgc2V0CisgKiBAbmV0ZGV2OiBuZXR3 b3JrIGludGVyZmFjZSBkZXZpY2Ugc3RydWN0dXJlCisgKgorICogVGhlIHNldF9tdWx0aSBlbnRy eSBwb2ludCBpcyBjYWxsZWQgd2hlbmV2ZXIgdGhlIG11bHRpY2FzdCBhZGRyZXNzCisgKiBsaXN0 IG9yIHRoZSBuZXR3b3JrIGludGVyZmFjZSBmbGFncyBhcmUgdXBkYXRlZC4gIFRoaXMgcm91dGlu ZSBpcworICogcmVzcG9uc2libGUgZm9yIGNvbmZpZ3VyaW5nIHRoZSBoYXJkd2FyZSBmb3IgcHJv cGVyIG11bHRpY2FzdCwKKyAqIHByb21pc2N1b3VzIG1vZGUsIGFuZCBhbGwtbXVsdGkgYmVoYXZp b3IuCisgKiovCitzdGF0aWMgdm9pZCBpZ2Jfc2V0X211bHRpKHN0cnVjdCBuZXRfZGV2aWNlICpu ZXRkZXYpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0 ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXN0cnVjdCBlMTAw MF9tYWNfaW5mbyAqbWFjID0gJmh3LT5tYWM7CisJc3RydWN0IGRldl9tY19saXN0ICptY19wdHI7 CisJdTggICptdGFfbGlzdDsKKwl1MzIgcmN0bDsKKwlpbnQgaTsKKworCS8qIENoZWNrIGZvciBQ cm9taXNjdW91cyBhbmQgQWxsIE11bHRpY2FzdCBtb2RlcyAqLworCisJcmN0bCA9IHJkMzIoRTEw MDBfUkNUTCk7CisKKwlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCXJjdGwg fD0gKEUxMDAwX1JDVExfVVBFIHwgRTEwMDBfUkNUTF9NUEUpOworCQlyY3RsICY9IH5FMTAwMF9S Q1RMX1ZGRTsKKwl9IGVsc2UgeworCQlpZiAobmV0ZGV2LT5mbGFncyAmIElGRl9BTExNVUxUSSkg eworCQkJcmN0bCB8PSBFMTAwMF9SQ1RMX01QRTsKKwkJCXJjdGwgJj0gfkUxMDAwX1JDVExfVVBF OworCQl9IGVsc2UKKwkJCXJjdGwgJj0gfihFMTAwMF9SQ1RMX1VQRSB8IEUxMDAwX1JDVExfTVBF KTsKKwkJcmN0bCB8PSBFMTAwMF9SQ1RMX1ZGRTsKKwl9CisJd3IzMihFMTAwMF9SQ1RMLCByY3Rs KTsKKworCWlmICghbmV0ZGV2LT5tY19jb3VudCkgeworCQkvKiBub3RoaW5nIHRvIHByb2dyYW0s IHNvIGNsZWFyIG1jIGxpc3QgKi8KKwkJaWdiX3VwZGF0ZV9tY19hZGRyX2xpc3RfODI1NzUoaHcs IE5VTEwsIDAsIDEsCisJCQkJCSAgbWFjLT5yYXJfZW50cnlfY291bnQpOworCQlyZXR1cm47CisJ fQorCisJbXRhX2xpc3QgPSBremFsbG9jKG5ldGRldi0+bWNfY291bnQgKiA2LCBHRlBfQVRPTUlD KTsKKwlpZiAoIW10YV9saXN0KQorCQlyZXR1cm47CisKKwkvKiBUaGUgc2hhcmVkIGZ1bmN0aW9u IGV4cGVjdHMgYSBwYWNrZWQgYXJyYXkgb2Ygb25seSBhZGRyZXNzZXMuICovCisJbWNfcHRyID0g bmV0ZGV2LT5tY19saXN0OworCisJZm9yIChpID0gMDsgaSA8IG5ldGRldi0+bWNfY291bnQ7IGkr KykgeworCQlpZiAoIW1jX3B0cikKKwkJCWJyZWFrOworCQltZW1jcHkobXRhX2xpc3QgKyAoaSpF VEhfQUxFTiksIG1jX3B0ci0+ZG1pX2FkZHIsIEVUSF9BTEVOKTsKKwkJbWNfcHRyID0gbWNfcHRy LT5uZXh0OworCX0KKwlpZ2JfdXBkYXRlX21jX2FkZHJfbGlzdF84MjU3NShodywgbXRhX2xpc3Qs IGksIDEsCisJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFjLT5yYXJfZW50cnlfY291 bnQpOworCWtmcmVlKG10YV9saXN0KTsKK30KKworLyogTmVlZCB0byB3YWl0IGEgZmV3IHNlY29u ZHMgYWZ0ZXIgbGluayB1cCB0byBnZXQgZGlhZ25vc3RpYyBpbmZvcm1hdGlvbiBmcm9tCisgKiB0 aGUgcGh5ICovCitzdGF0aWMgdm9pZCBpZ2JfdXBkYXRlX3BoeV9pbmZvKHVuc2lnbmVkIGxvbmcg ZGF0YSkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSAoc3RydWN0IGlnYl9hZGFw dGVyICopIGRhdGE7CisJaWYgKGFkYXB0ZXItPmh3LnBoeS5vcHMuZ2V0X3BoeV9pbmZvKQorCQlh ZGFwdGVyLT5ody5waHkub3BzLmdldF9waHlfaW5mbygmYWRhcHRlci0+aHcpOworfQorCisvKioK KyAqIGlnYl93YXRjaGRvZyAtIFRpbWVyIENhbGwtYmFjaworICogQGRhdGE6IHBvaW50ZXIgdG8g YWRhcHRlciBjYXN0IGludG8gYW4gdW5zaWduZWQgbG9uZworICoqLworc3RhdGljIHZvaWQgaWdi X3dhdGNoZG9nKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFk YXB0ZXIgPSAoc3RydWN0IGlnYl9hZGFwdGVyICopZGF0YTsKKwkvKiBEbyB0aGUgcmVzdCBvdXRz aWRlIG9mIGludGVycnVwdCBjb250ZXh0ICovCisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+d2F0 Y2hkb2dfdGFzayk7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl93YXRjaGRvZ190YXNrKHN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlcikKK3sKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXIt Pmh3OworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3Ry dWN0IGlnYl9yaW5nICp0eF9yaW5nID0gYWRhcHRlci0+dHhfcmluZzsKKwlzdHJ1Y3QgZTEwMDBf bWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CisJdTMyIGxpbms7CisJczMyIHJldF92 YWw7CisKKwlpZiAoKG5ldGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgJiYKKwkgICAgKHJkMzIoRTEw MDBfU1RBVFVTKSAmIEUxMDAwX1NUQVRVU19MVSkpCisJCWdvdG8gbGlua191cDsKKworCXJldF92 YWwgPSBody0+bWFjLm9wcy5jaGVja19mb3JfbGluaygmYWRhcHRlci0+aHcpOworCWlmICgocmV0 X3ZhbCA9PSBFMTAwMF9FUlJfUEhZKSAmJgorCSAgICAoaHctPnBoeS50eXBlID09IGUxMDAwX3Bo eV9pZ3BfMykgJiYKKwkgICAgKHJkMzIoRTEwMDBfQ1RSTCkgJgorCSAgICAgRTEwMDBfUEhZX0NU UkxfR0JFX0RJU0FCTEUpKQorCQlkZXZfaW5mbygmYWRhcHRlci0+cGRldi0+ZGV2LAorCQkJICJH aWdhYml0IGhhcyBiZWVuIGRpc2FibGVkLCBkb3duZ3JhZGluZyBzcGVlZFxuIik7CisKKwlpZiAo KGh3LT5waHkubWVkaWFfdHlwZSA9PSBlMTAwMF9tZWRpYV90eXBlX2ludGVybmFsX3NlcmRlcykg JiYKKwkgICAgIShyZDMyKEUxMDAwX1RYQ1cpICYgRTEwMDBfVFhDV19BTkUpKQorCQlsaW5rID0g bWFjLT5zZXJkZXNfaGFzX2xpbms7CisJZWxzZQorCQlsaW5rID0gcmQzMihFMTAwMF9TVEFUVVMp ICYKKwkJCQkgICAgICBFMTAwMF9TVEFUVVNfTFU7CisKKwlpZiAobGluaykgeworCQlpZiAoIW5l dGlmX2NhcnJpZXJfb2sobmV0ZGV2KSkgeworCQkJdTMyIGN0cmw7CisJCQlody0+bWFjLm9wcy5n ZXRfc3BlZWRfYW5kX2R1cGxleCgmYWRhcHRlci0+aHcsCisJCQkJCQkgICAmYWRhcHRlci0+bGlu a19zcGVlZCwKKwkJCQkJCSAgICZhZGFwdGVyLT5saW5rX2R1cGxleCk7CisKKwkJCWN0cmwgPSBy ZDMyKEUxMDAwX0NUUkwpOworCQkJZGV2X2luZm8oJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCQkg Ik5JQyBMaW5rIGlzIFVwICVkIE1icHMgJXMsICIKKwkJCQkgIkZsb3cgQ29udHJvbDogJXNcbiIs CisJCQkJIGFkYXB0ZXItPmxpbmtfc3BlZWQsCisJCQkJIGFkYXB0ZXItPmxpbmtfZHVwbGV4ID09 IEZVTExfRFVQTEVYID8KKwkJCQkgIkZ1bGwgRHVwbGV4IiA6ICJIYWxmIER1cGxleCIsCisJCQkJ ICgoY3RybCAmIEUxMDAwX0NUUkxfVEZDRSkgJiYgKGN0cmwgJgorCQkJCSBFMTAwMF9DVFJMX1JG Q0UpKSA/ICJSWC9UWCIgOiAoKGN0cmwgJgorCQkJCSBFMTAwMF9DVFJMX1JGQ0UpID8gIlJYIiA6 ICgoY3RybCAmCisJCQkJIEUxMDAwX0NUUkxfVEZDRSkgPyAiVFgiIDogIk5vbmUiKSkpOworCisJ CQkvKiB0d2VhayB0eF9xdWV1ZV9sZW4gYWNjb3JkaW5nIHRvIHNwZWVkL2R1cGxleCBhbmQKKwkJ CSAqIGFkanVzdCB0aGUgdGltZW91dCBmYWN0b3IgKi8KKwkJCW5ldGRldi0+dHhfcXVldWVfbGVu ID0gYWRhcHRlci0+dHhfcXVldWVfbGVuOworCQkJYWRhcHRlci0+dHhfdGltZW91dF9mYWN0b3Ig PSAxOworCQkJc3dpdGNoIChhZGFwdGVyLT5saW5rX3NwZWVkKSB7CisJCQljYXNlIFNQRUVEXzEw OgorCQkJCW5ldGRldi0+dHhfcXVldWVfbGVuID0gMTA7CisJCQkJYWRhcHRlci0+dHhfdGltZW91 dF9mYWN0b3IgPSAxNDsKKwkJCQlicmVhazsKKwkJCWNhc2UgU1BFRURfMTAwOgorCQkJCW5ldGRl di0+dHhfcXVldWVfbGVuID0gMTAwOworCQkJCS8qIG1heWJlIGFkZCBzb21lIHRpbWVvdXQgZmFj dG9yID8gKi8KKwkJCQlicmVhazsKKwkJCX0KKworCQkJbmV0aWZfY2Fycmllcl9vbihuZXRkZXYp OworCQkJbmV0aWZfd2FrZV9xdWV1ZShuZXRkZXYpOworCisJCQlpZiAoIXRlc3RfYml0KF9fSUdC X0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQkJbW9kX3RpbWVyKCZhZGFwdGVyLT5waHlfaW5m b190aW1lciwKKwkJCQkJICByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyAyICogSFopKTsKKwkJfQor CX0gZWxzZSB7CisJCWlmIChuZXRpZl9jYXJyaWVyX29rKG5ldGRldikpIHsKKwkJCWFkYXB0ZXIt Pmxpbmtfc3BlZWQgPSAwOworCQkJYWRhcHRlci0+bGlua19kdXBsZXggPSAwOworCQkJZGV2X2lu Zm8oJmFkYXB0ZXItPnBkZXYtPmRldiwgIk5JQyBMaW5rIGlzIERvd25cbiIpOworCQkJbmV0aWZf Y2Fycmllcl9vZmYobmV0ZGV2KTsKKwkJCW5ldGlmX3N0b3BfcXVldWUobmV0ZGV2KTsKKwkJCWlm ICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCQltb2RfdGltZXIo JmFkYXB0ZXItPnBoeV9pbmZvX3RpbWVyLAorCQkJCQkgIHJvdW5kX2ppZmZpZXMoamlmZmllcyAr IDIgKiBIWikpOworCQl9CisJfQorCitsaW5rX3VwOgorCWlnYl91cGRhdGVfc3RhdHMoYWRhcHRl cik7CisKKwltYWMtPnR4X3BhY2tldF9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLnRwdCAtIGFkYXB0 ZXItPnRwdF9vbGQ7CisJYWRhcHRlci0+dHB0X29sZCA9IGFkYXB0ZXItPnN0YXRzLnRwdDsKKwlt YWMtPmNvbGxpc2lvbl9kZWx0YSA9IGFkYXB0ZXItPnN0YXRzLmNvbGMgLSBhZGFwdGVyLT5jb2xj X29sZDsKKwlhZGFwdGVyLT5jb2xjX29sZCA9IGFkYXB0ZXItPnN0YXRzLmNvbGM7CisKKwlhZGFw dGVyLT5nb3JjID0gYWRhcHRlci0+c3RhdHMuZ29yYyAtIGFkYXB0ZXItPmdvcmNfb2xkOworCWFk YXB0ZXItPmdvcmNfb2xkID0gYWRhcHRlci0+c3RhdHMuZ29yYzsKKwlhZGFwdGVyLT5nb3RjID0g YWRhcHRlci0+c3RhdHMuZ290YyAtIGFkYXB0ZXItPmdvdGNfb2xkOworCWFkYXB0ZXItPmdvdGNf b2xkID0gYWRhcHRlci0+c3RhdHMuZ290YzsKKworCWlnYl91cGRhdGVfYWRhcHRpdmUoJmFkYXB0 ZXItPmh3KTsKKworCWlmICghbmV0aWZfY2Fycmllcl9vayhuZXRkZXYpKSB7CisJCWlmIChJR0Jf REVTQ19VTlVTRUQodHhfcmluZykgKyAxIDwgdHhfcmluZy0+Y291bnQpIHsKKwkJCS8qIFdlJ3Zl IGxvc3QgbGluaywgc28gdGhlIGNvbnRyb2xsZXIgc3RvcHMgRE1BLAorCQkJICogYnV0IHdlJ3Zl IGdvdCBxdWV1ZWQgVHggd29yayB0aGF0J3MgbmV2ZXIgZ29pbmcKKwkJCSAqIHRvIGdldCBkb25l LCBzbyByZXNldCBjb250cm9sbGVyIHRvIGZsdXNoIFR4LgorCQkJICogKERvIHRoZSByZXNldCBv dXRzaWRlIG9mIGludGVycnVwdCBjb250ZXh0KS4gKi8KKwkJCWFkYXB0ZXItPnR4X3RpbWVvdXRf Y291bnQrKzsKKwkJCXNjaGVkdWxlX3dvcmsoJmFkYXB0ZXItPnJlc2V0X3Rhc2spOworCQl9CisJ fQorCisJLyogQ2F1c2Ugc29mdHdhcmUgaW50ZXJydXB0IHRvIGVuc3VyZSByeCByaW5nIGlzIGNs ZWFuZWQgKi8KKwl3cjMyKEUxMDAwX0lDUywgRTEwMDBfSUNTX1JYRE1UMCk7CisKKwkvKiBGb3Jj ZSBkZXRlY3Rpb24gb2YgaHVuZyBjb250cm9sbGVyIGV2ZXJ5IHdhdGNoZG9nIHBlcmlvZCAqLwor CXR4X3JpbmctPmRldGVjdF90eF9odW5nID0gdHJ1ZTsKKworCS8qIFJlc2V0IHRoZSB0aW1lciAq LworCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJbW9kX3Rp bWVyKCZhZGFwdGVyLT53YXRjaGRvZ190aW1lciwKKwkJCSAgcm91bmRfamlmZmllcyhqaWZmaWVz ICsgMiAqIEhaKSk7Cit9CisKK2VudW0gbGF0ZW5jeV9yYW5nZSB7CisJbG93ZXN0X2xhdGVuY3kg PSAwLAorCWxvd19sYXRlbmN5ID0gMSwKKwlidWxrX2xhdGVuY3kgPSAyLAorCWxhdGVuY3lfaW52 YWxpZCA9IDI1NQorfTsKKworCisvKioKKyAqIGlnYl91cGRhdGVfcmluZ19pdHIgLSB1cGRhdGUg dGhlIGR5bmFtaWMgSVRSIHZhbHVlIGJhc2VkIG9uIHBhY2tldCBzaXplCisgKgorICogICAgICBT dG9yZXMgYSBuZXcgSVRSIHZhbHVlIGJhc2VkIG9uIHN0cmljdGx5IG9uIHBhY2tldCBzaXplLiAg VGhpcworICogICAgICBhbGdvcml0aG0gaXMgbGVzcyBzb3BoaXN0aWNhdGVkIHRoYW4gdGhhdCB1 c2VkIGluIGlnYl91cGRhdGVfaXRyLAorICogICAgICBkdWUgdG8gdGhlIGRpZmZpY3VsdHkgb2Yg c3luY2hyb25pemluZyBzdGF0aXN0aWNzIGFjcm9zcyBtdWx0aXBsZQorICogICAgICByZWNlaXZl IHJpbmdzLiAgVGhlIGRpdmlzb3JzIGFuZCB0aHJlc2hvbGRzIHVzZWQgYnkgdGhpcyBmdWN0aW9u CisgKiAgICAgIHdlcmUgZGV0ZXJtaW5lZCBiYXNlZCBvbiB0aGVvcmV0aWNhbCBtYXhpbXVtIHdp cmUgc3BlZWQgYW5kIHRlc3RpbmcKKyAqICAgICAgZGF0YSwgaW4gb3JkZXIgdG8gbWluaW1pemUg cmVzcG9uc2UgdGltZSB3aGlsZSBpbmNyZWFzaW5nIGJ1bGsKKyAqICAgICAgdGhyb3VnaHB1dC4K KyAqICAgICAgVGhpcyBmdW5jdGlvbmFsaXR5IGlzIGNvbnRyb2xsZWQgYnkgdGhlIEludGVycnVw dFRocm90dGxlUmF0ZSBtb2R1bGUKKyAqICAgICAgcGFyYW1ldGVyIChzZWUgaWdiX3BhcmFtLmMp CisgKiAgICAgIE5PVEU6ICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBvbmx5IHdoZW4gb3BlcmF0 aW5nIGluIGEgbXVsdGlxdWV1ZQorICogICAgICAgICAgICAgcmVjZWl2ZSBlbnZpcm9ubWVudC4K KyAqIEByeF9yaW5nOiBwb2ludGVyIHRvIHJpbmcKKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl91cGRh dGVfcmluZ19pdHIoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nKQoreworCWludCBuZXdfdmFsID0g cnhfcmluZy0+aXRyX3ZhbDsKKwlpbnQgYXZnX3dpcmVfc2l6ZSA9IDA7CisJc3RydWN0IGlnYl9h ZGFwdGVyICphZGFwdGVyID0gcnhfcmluZy0+YWRhcHRlcjsKKworCWlmICghcnhfcmluZy0+dG90 YWxfcGFja2V0cykKKwkJZ290byBjbGVhcl9jb3VudHM7IC8qIG5vIHBhY2tldHMsIHNvIGRvbid0 IGRvIGFueXRoaW5nICovCisKKwkvKiBGb3Igbm9uLWdpZ2FiaXQgc3BlZWRzLCBqdXN0IGZpeCB0 aGUgaW50ZXJydXB0IHJhdGUgYXQgNDAwMAorCSAqIGludHMvc2VjIC0gSVRSIHRpbWVyIHZhbHVl IG9mIDEyMCB0aWNrcy4KKwkgKi8KKwlpZiAoYWRhcHRlci0+bGlua19zcGVlZCAhPSBTUEVFRF8x MDAwKSB7CisJCW5ld192YWwgPSAxMjA7CisJCWdvdG8gc2V0X2l0cl92YWw7CisJfQorCWF2Z193 aXJlX3NpemUgPSByeF9yaW5nLT50b3RhbF9ieXRlcyAvIHJ4X3JpbmctPnRvdGFsX3BhY2tldHM7 CisKKwkvKiBBZGQgMjQgYnl0ZXMgdG8gc2l6ZSB0byBhY2NvdW50IGZvciBDUkMsIHByZWFtYmxl LCBhbmQgZ2FwICovCisJYXZnX3dpcmVfc2l6ZSArPSAyNDsKKworCS8qIERvbid0IHN0YXJ2ZSBq dW1ibyBmcmFtZXMgKi8KKwlhdmdfd2lyZV9zaXplID0gbWluKGF2Z193aXJlX3NpemUsIDMwMDAp OworCisJLyogR2l2ZSBhIGxpdHRsZSBib29zdCB0byBtaWQtc2l6ZSBmcmFtZXMgKi8KKwlpZiAo KGF2Z193aXJlX3NpemUgPiAzMDApICYmIChhdmdfd2lyZV9zaXplIDwgMTIwMCkpCisJCW5ld192 YWwgPSBhdmdfd2lyZV9zaXplIC8gMzsKKwllbHNlCisJCW5ld192YWwgPSBhdmdfd2lyZV9zaXpl IC8gMjsKKworc2V0X2l0cl92YWw6CisJaWYgKG5ld192YWwgIT0gcnhfcmluZy0+aXRyX3ZhbCkg eworCQlyeF9yaW5nLT5pdHJfdmFsID0gbmV3X3ZhbDsKKwkJcnhfcmluZy0+c2V0X2l0ciA9IDE7 CisJfQorY2xlYXJfY291bnRzOgorCXJ4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwlyeF9yaW5n LT50b3RhbF9wYWNrZXRzID0gMDsKK30KKworLyoqCisgKiBpZ2JfdXBkYXRlX2l0ciAtIHVwZGF0 ZSB0aGUgZHluYW1pYyBJVFIgdmFsdWUgYmFzZWQgb24gc3RhdGlzdGljcworICogICAgICBTdG9y ZXMgYSBuZXcgSVRSIHZhbHVlIGJhc2VkIG9uIHBhY2tldHMgYW5kIGJ5dGUKKyAqICAgICAgY291 bnRzIGR1cmluZyB0aGUgbGFzdCBpbnRlcnJ1cHQuICBUaGUgYWR2YW50YWdlIG9mIHBlciBpbnRl cnJ1cHQKKyAqICAgICAgY29tcHV0YXRpb24gaXMgZmFzdGVyIHVwZGF0ZXMgYW5kIG1vcmUgYWNj dXJhdGUgSVRSIGZvciB0aGUgY3VycmVudAorICogICAgICB0cmFmZmljIHBhdHRlcm4uICBDb25z dGFudHMgaW4gdGhpcyBmdW5jdGlvbiB3ZXJlIGNvbXB1dGVkCisgKiAgICAgIGJhc2VkIG9uIHRo ZW9yZXRpY2FsIG1heGltdW0gd2lyZSBzcGVlZCBhbmQgdGhyZXNob2xkcyB3ZXJlIHNldCBiYXNl ZAorICogICAgICBvbiB0ZXN0aW5nIGRhdGEgYXMgd2VsbCBhcyBhdHRlbXB0aW5nIHRvIG1pbmlt aXplIHJlc3BvbnNlIHRpbWUKKyAqICAgICAgd2hpbGUgaW5jcmVhc2luZyBidWxrIHRocm91Z2hw dXQuCisgKiAgICAgIHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBjb250cm9sbGVkIGJ5IHRoZSBJbnRl cnJ1cHRUaHJvdHRsZVJhdGUgbW9kdWxlCisgKiAgICAgIHBhcmFtZXRlciAoc2VlIGlnYl9wYXJh bS5jKQorICogICAgICBOT1RFOiAgVGhlc2UgY2FsY3VsYXRpb25zIGFyZSBvbmx5IHZhbGlkIHdo ZW4gb3BlcmF0aW5nIGluIGEgc2luZ2xlLQorICogICAgICAgICAgICAgcXVldWUgZW52aXJvbm1l bnQuCisgKiBAYWRhcHRlcjogcG9pbnRlciB0byBhZGFwdGVyCisgKiBAaXRyX3NldHRpbmc6IGN1 cnJlbnQgYWRhcHRlci0+aXRyCisgKiBAcGFja2V0czogdGhlIG51bWJlciBvZiBwYWNrZXRzIGR1 cmluZyB0aGlzIG1lYXN1cmVtZW50IGludGVydmFsCisgKiBAYnl0ZXM6IHRoZSBudW1iZXIgb2Yg Ynl0ZXMgZHVyaW5nIHRoaXMgbWVhc3VyZW1lbnQgaW50ZXJ2YWwKKyAqKi8KK3N0YXRpYyB1bnNp Z25lZCBpbnQgaWdiX3VwZGF0ZV9pdHIoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYg aXRyX3NldHRpbmcsCisJCQkJICAgaW50IHBhY2tldHMsIGludCBieXRlcykKK3sKKwl1bnNpZ25l ZCBpbnQgcmV0dmFsID0gaXRyX3NldHRpbmc7CisKKwlpZiAocGFja2V0cyA9PSAwKQorCQlnb3Rv IHVwZGF0ZV9pdHJfZG9uZTsKKworCXN3aXRjaCAoaXRyX3NldHRpbmcpIHsKKwljYXNlIGxvd2Vz dF9sYXRlbmN5OgorCQkvKiBoYW5kbGUgVFNPIGFuZCBqdW1ibyBmcmFtZXMgKi8KKwkJaWYgKGJ5 dGVzL3BhY2tldHMgPiA4MDAwKQorCQkJcmV0dmFsID0gYnVsa19sYXRlbmN5OworCQllbHNlIGlm ICgocGFja2V0cyA8IDUpICYmIChieXRlcyA+IDUxMikpCisJCQlyZXR2YWwgPSBsb3dfbGF0ZW5j eTsKKwkJYnJlYWs7CisJY2FzZSBsb3dfbGF0ZW5jeTogIC8qIDUwIHVzZWMgYWthIDIwMDAwIGlu dHMvcyAqLworCQlpZiAoYnl0ZXMgPiAxMDAwMCkgeworCQkJLyogdGhpcyBpZiBoYW5kbGVzIHRo ZSBUU08gYWNjb3VudGluZyAqLworCQkJaWYgKGJ5dGVzL3BhY2tldHMgPiA4MDAwKSB7CisJCQkJ cmV0dmFsID0gYnVsa19sYXRlbmN5OworCQkJfSBlbHNlIGlmICgocGFja2V0cyA8IDEwKSB8fCAo KGJ5dGVzL3BhY2tldHMpID4gMTIwMCkpIHsKKwkJCQlyZXR2YWwgPSBidWxrX2xhdGVuY3k7CisJ CQl9IGVsc2UgaWYgKChwYWNrZXRzID4gMzUpKSB7CisJCQkJcmV0dmFsID0gbG93ZXN0X2xhdGVu Y3k7CisJCQl9CisJCX0gZWxzZSBpZiAoYnl0ZXMvcGFja2V0cyA+IDIwMDApIHsKKwkJCXJldHZh bCA9IGJ1bGtfbGF0ZW5jeTsKKwkJfSBlbHNlIGlmIChwYWNrZXRzIDw9IDIgJiYgYnl0ZXMgPCA1 MTIpIHsKKwkJCXJldHZhbCA9IGxvd2VzdF9sYXRlbmN5OworCQl9CisJCWJyZWFrOworCWNhc2Ug YnVsa19sYXRlbmN5OiAvKiAyNTAgdXNlYyBha2EgNDAwMCBpbnRzL3MgKi8KKwkJaWYgKGJ5dGVz ID4gMjUwMDApIHsKKwkJCWlmIChwYWNrZXRzID4gMzUpCisJCQkJcmV0dmFsID0gbG93X2xhdGVu Y3k7CisJCX0gZWxzZSBpZiAoYnl0ZXMgPCA2MDAwKSB7CisJCQlyZXR2YWwgPSBsb3dfbGF0ZW5j eTsKKwkJfQorCQlicmVhazsKKwl9CisKK3VwZGF0ZV9pdHJfZG9uZToKKwlyZXR1cm4gcmV0dmFs OworfQorCitzdGF0aWMgdm9pZCBpZ2Jfc2V0X2l0cihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0 ZXIpCit7CisJdTE2IGN1cnJlbnRfaXRyOworCXUzMiBuZXdfaXRyID0gYWRhcHRlci0+aXRyOwor CisJLyogZm9yIG5vbi1naWdhYml0IHNwZWVkcywganVzdCBmaXggdGhlIGludGVycnVwdCByYXRl IGF0IDQwMDAgKi8KKwlpZiAoYWRhcHRlci0+bGlua19zcGVlZCAhPSBTUEVFRF8xMDAwKSB7CisJ CWN1cnJlbnRfaXRyID0gMDsKKwkJbmV3X2l0ciA9IDQwMDA7CisJCWdvdG8gc2V0X2l0cl9ub3c7 CisJfQorCisJYWRhcHRlci0+cnhfaXRyID0gaWdiX3VwZGF0ZV9pdHIoYWRhcHRlciwKKwkJCQkg ICAgYWRhcHRlci0+cnhfaXRyLAorCQkJCSAgICBhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9wYWNr ZXRzLAorCQkJCSAgICBhZGFwdGVyLT5yeF9yaW5nLT50b3RhbF9ieXRlcyk7CisKKwlpZiAoYWRh cHRlci0+cnhfcmluZy0+YnVkZHkpIHsKKwkJYWRhcHRlci0+dHhfaXRyID0gaWdiX3VwZGF0ZV9p dHIoYWRhcHRlciwKKwkJCQkJICAgIGFkYXB0ZXItPnR4X2l0ciwKKwkJCQkJICAgIGFkYXB0ZXIt PnR4X3JpbmctPnRvdGFsX3BhY2tldHMsCisJCQkJCSAgICBhZGFwdGVyLT50eF9yaW5nLT50b3Rh bF9ieXRlcyk7CisKKwkJY3VycmVudF9pdHIgPSBtYXgoYWRhcHRlci0+cnhfaXRyLCBhZGFwdGVy LT50eF9pdHIpOworCX0gZWxzZSB7CisJCWN1cnJlbnRfaXRyID0gYWRhcHRlci0+cnhfaXRyOwor CX0KKworCS8qIGNvbnNlcnZhdGl2ZSBtb2RlIChpdHIgMykgZWxpbWluYXRlcyB0aGUgbG93ZXN0 X2xhdGVuY3kgc2V0dGluZyAqLworCWlmIChhZGFwdGVyLT5pdHJfc2V0dGluZyA9PSAzICYmCisJ ICAgIGN1cnJlbnRfaXRyID09IGxvd2VzdF9sYXRlbmN5KQorCQljdXJyZW50X2l0ciA9IGxvd19s YXRlbmN5OworCisJc3dpdGNoIChjdXJyZW50X2l0cikgeworCS8qIGNvdW50cyBhbmQgcGFja2V0 cyBpbiB1cGRhdGVfaXRyIGFyZSBkZXBlbmRlbnQgb24gdGhlc2UgbnVtYmVycyAqLworCWNhc2Ug bG93ZXN0X2xhdGVuY3k6CisJCW5ld19pdHIgPSA3MDAwMDsKKwkJYnJlYWs7CisJY2FzZSBsb3df bGF0ZW5jeToKKwkJbmV3X2l0ciA9IDIwMDAwOyAvKiBha2EgaHdpdHIgPSB+MjAwICovCisJCWJy ZWFrOworCWNhc2UgYnVsa19sYXRlbmN5OgorCQluZXdfaXRyID0gNDAwMDsKKwkJYnJlYWs7CisJ ZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCitzZXRfaXRyX25vdzoKKwlhZGFwdGVyLT5yeF9yaW5n LT50b3RhbF9ieXRlcyA9IDA7CisJYWRhcHRlci0+cnhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7 CisJaWYgKGFkYXB0ZXItPnJ4X3JpbmctPmJ1ZGR5KSB7CisJCWFkYXB0ZXItPnJ4X3JpbmctPmJ1 ZGR5LT50b3RhbF9ieXRlcyA9IDA7CisJCWFkYXB0ZXItPnJ4X3JpbmctPmJ1ZGR5LT50b3RhbF9w YWNrZXRzID0gMDsKKwl9CisKKwlpZiAobmV3X2l0ciAhPSBhZGFwdGVyLT5pdHIpIHsKKwkJLyog dGhpcyBhdHRlbXB0cyB0byBiaWFzIHRoZSBpbnRlcnJ1cHQgcmF0ZSB0b3dhcmRzIEJ1bGsKKwkJ ICogYnkgYWRkaW5nIGludGVybWVkaWF0ZSBzdGVwcyB3aGVuIGludGVycnVwdCByYXRlIGlzCisJ CSAqIGluY3JlYXNpbmcgKi8KKwkJbmV3X2l0ciA9IG5ld19pdHIgPiBhZGFwdGVyLT5pdHIgPwor CQkJICAgICBtaW4oYWRhcHRlci0+aXRyICsgKG5ld19pdHIgPj4gMiksIG5ld19pdHIpIDoKKwkJ CSAgICAgbmV3X2l0cjsKKwkJLyogRG9uJ3Qgd3JpdGUgdGhlIHZhbHVlIGhlcmU7IGl0IHJlc2V0 cyB0aGUgYWRhcHRlcidzCisJCSAqIGludGVybmFsIHRpbWVyLCBhbmQgY2F1c2VzIHVzIHRvIGRl bGF5IGZhciBsb25nZXIgdGhhbgorCQkgKiB3ZSBzaG91bGQgYmV0d2VlbiBpbnRlcnJ1cHRzLiAg SW5zdGVhZCwgd2Ugd3JpdGUgdGhlIElUUgorCQkgKiB2YWx1ZSBhdCB0aGUgYmVnaW5uaW5nIG9m IHRoZSBuZXh0IGludGVycnVwdCBzbyB0aGUgdGltaW5nCisJCSAqIGVuZHMgdXAgYmVpbmcgY29y cmVjdC4KKwkJICovCisJCWFkYXB0ZXItPml0ciA9IG5ld19pdHI7CisJCWFkYXB0ZXItPnJ4X3Jp bmctPml0cl92YWwgPSAxMDAwMDAwMDAwIC8gKG5ld19pdHIgKiAyNTYpOworCQlhZGFwdGVyLT5y eF9yaW5nLT5zZXRfaXRyID0gMTsKKwl9CisKKwlyZXR1cm47Cit9CisKKworI2RlZmluZSBJR0Jf VFhfRkxBR1NfQ1NVTQkJMHgwMDAwMDAwMQorI2RlZmluZSBJR0JfVFhfRkxBR1NfVkxBTgkJMHgw MDAwMDAwMgorI2RlZmluZSBJR0JfVFhfRkxBR1NfVFNPCQkweDAwMDAwMDA0CisjZGVmaW5lIElH Ql9UWF9GTEFHU19JUFY0CQkweDAwMDAwMDA4CisjZGVmaW5lIElHQl9UWF9GTEFHU19WTEFOX01B U0sJMHhmZmZmMDAwMAorI2RlZmluZSBJR0JfVFhfRkxBR1NfVkxBTl9TSElGVAkxNgorCitzdGF0 aWMgaW5saW5lIGludCBpZ2JfdHNvX2FkdihzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIsCisJ CQkgICAgICBzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcsCisJCQkgICAgICBzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCB1MzIgdHhfZmxhZ3MsIHU4ICpoZHJfbGVuKQoreworCXN0cnVjdCBlMTAwMF9hZHZf dHhfY29udGV4dF9kZXNjICpjb250ZXh0X2Rlc2M7CisJdW5zaWduZWQgaW50IGk7CisJaW50IGVy cjsKKwlzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm87CisJdTMyIGluZm8gPSAwLCB0dV9j bWQgPSAwOworCXUzMiBtc3NfbDRsZW5faWR4LCBsNGxlbjsKKwkqaGRyX2xlbiA9IDA7CisKKwlp ZiAoc2tiX2hlYWRlcl9jbG9uZWQoc2tiKSkgeworCQllcnIgPSBwc2tiX2V4cGFuZF9oZWFkKHNr YiwgMCwgMCwgR0ZQX0FUT01JQyk7CisJCWlmIChlcnIpCisJCQlyZXR1cm4gZXJyOworCX0KKwor CWw0bGVuID0gdGNwX2hkcmxlbihza2IpOworCSpoZHJfbGVuICs9IGw0bGVuOworCisJaWYgKHNr Yi0+cHJvdG9jb2wgPT0gaHRvbnMoRVRIX1BfSVApKSB7CisJCXN0cnVjdCBpcGhkciAqaXBoID0g aXBfaGRyKHNrYik7CisJCWlwaC0+dG90X2xlbiA9IDA7CisJCWlwaC0+Y2hlY2sgPSAwOworCQl0 Y3BfaGRyKHNrYiktPmNoZWNrID0gfmNzdW1fdGNwdWRwX21hZ2ljKGlwaC0+c2FkZHIsCisJCQkJ CQkJIGlwaC0+ZGFkZHIsIDAsCisJCQkJCQkJIElQUFJPVE9fVENQLAorCQkJCQkJCSAwKTsKKwl9 IGVsc2UgaWYgKHNrYl9zaGluZm8oc2tiKS0+Z3NvX3R5cGUgPT0gU0tCX0dTT19UQ1BWNikgewor CQlpcHY2X2hkcihza2IpLT5wYXlsb2FkX2xlbiA9IDA7CisJCXRjcF9oZHIoc2tiKS0+Y2hlY2sg PSB+Y3N1bV9pcHY2X21hZ2ljKCZpcHY2X2hkcihza2IpLT5zYWRkciwKKwkJCQkJCSAgICAgICAm aXB2Nl9oZHIoc2tiKS0+ZGFkZHIsCisJCQkJCQkgICAgICAgMCwgSVBQUk9UT19UQ1AsIDApOwor CX0KKworCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3VzZTsKKworCWJ1ZmZlcl9pbmZvID0gJnR4X3Jp bmctPmJ1ZmZlcl9pbmZvW2ldOworCWNvbnRleHRfZGVzYyA9IEUxMDAwX1RYX0NUWFRERVNDX0FE VigqdHhfcmluZywgaSk7CisJLyogVkxBTiBNQUNMRU4gSVBMRU4gKi8KKwlpZiAodHhfZmxhZ3Mg JiBJR0JfVFhfRkxBR1NfVkxBTikKKwkJaW5mbyB8PSAodHhfZmxhZ3MgJiBJR0JfVFhfRkxBR1Nf VkxBTl9NQVNLKTsKKwlpbmZvIHw9IChza2JfbmV0d29ya19vZmZzZXQoc2tiKSA8PCBFMTAwMF9B RFZUWERfTUFDTEVOX1NISUZUKTsKKwkqaGRyX2xlbiArPSBza2JfbmV0d29ya19vZmZzZXQoc2ti KTsKKwlpbmZvIHw9IHNrYl9uZXR3b3JrX2hlYWRlcl9sZW4oc2tiKTsKKwkqaGRyX2xlbiArPSBz a2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CisJY29udGV4dF9kZXNjLT52bGFuX21hY2lwX2xl bnMgPSBjcHVfdG9fbGUzMihpbmZvKTsKKworCS8qIEFEViBEVFlQIFRVQ01EIE1LUkxPQy9JU0NT SUhFRExFTiAqLworCXR1X2NtZCB8PSAoRTEwMDBfVFhEX0NNRF9ERVhUIHwgRTEwMDBfQURWVFhE X0RUWVBfQ1RYVCk7CisKKwlpZiAoc2tiLT5wcm90b2NvbCA9PSBodG9ucyhFVEhfUF9JUCkpCisJ CXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfSVBWNDsKKwl0dV9jbWQgfD0gRTEwMDBfQURW VFhEX1RVQ01EX0w0VF9UQ1A7CisKKwljb250ZXh0X2Rlc2MtPnR5cGVfdHVjbWRfbWxobCA9IGNw dV90b19sZTMyKHR1X2NtZCk7CisKKwkvKiBNU1MgTDRMRU4gSURYICovCisJbXNzX2w0bGVuX2lk eCA9IChza2Jfc2hpbmZvKHNrYiktPmdzb19zaXplIDw8IEUxMDAwX0FEVlRYRF9NU1NfU0hJRlQp OworCW1zc19sNGxlbl9pZHggfD0gKGw0bGVuIDw8IEUxMDAwX0FEVlRYRF9MNExFTl9TSElGVCk7 CisKKwkvKiBDb250ZXh0IGluZGV4IG11c3QgYmUgdW5pcXVlIHBlciByaW5nLiAqLworCWlmIChh ZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RYX0lEWCkKKwkJbXNzX2w0bGVuX2lkeCB8 PSB0eF9yaW5nLT5laW1zX3ZhbHVlID4+IDQ7CisKKwljb250ZXh0X2Rlc2MtPm1zc19sNGxlbl9p ZHggPSBjcHVfdG9fbGUzMihtc3NfbDRsZW5faWR4KTsKKwljb250ZXh0X2Rlc2MtPnNlcW51bV9z ZWVkID0gMDsKKworCWJ1ZmZlcl9pbmZvLT50aW1lX3N0YW1wID0gamlmZmllczsKKwlidWZmZXJf aW5mby0+ZG1hID0gMDsKKwlpKys7CisJaWYgKGkgPT0gdHhfcmluZy0+Y291bnQpCisJCWkgPSAw OworCisJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOworCisJcmV0dXJuIHRydWU7Cit9CisKK3N0 YXRpYyBpbmxpbmUgYm9vbCBpZ2JfdHhfY3N1bV9hZHYoc3RydWN0IGlnYl9hZGFwdGVyICphZGFw dGVyLAorCQkJCQlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcsCisJCQkJCXN0cnVjdCBza19idWZm ICpza2IsIHUzMiB0eF9mbGFncykKK3sKKwlzdHJ1Y3QgZTEwMDBfYWR2X3R4X2NvbnRleHRfZGVz YyAqY29udGV4dF9kZXNjOworCXVuc2lnbmVkIGludCBpOworCXN0cnVjdCBpZ2JfYnVmZmVyICpi dWZmZXJfaW5mbzsKKwl1MzIgaW5mbyA9IDAsIHR1X2NtZCA9IDA7CisKKwlpZiAoKHNrYi0+aXBf c3VtbWVkID09IENIRUNLU1VNX1BBUlRJQUwpIHx8CisJICAgICh0eF9mbGFncyAmIElHQl9UWF9G TEFHU19WTEFOKSkgeworCQlpID0gdHhfcmluZy0+bmV4dF90b191c2U7CisJCWJ1ZmZlcl9pbmZv ID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQljb250ZXh0X2Rlc2MgPSBFMTAwMF9UWF9D VFhUREVTQ19BRFYoKnR4X3JpbmcsIGkpOworCisJCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFH U19WTEFOKQorCQkJaW5mbyB8PSAodHhfZmxhZ3MgJiBJR0JfVFhfRkxBR1NfVkxBTl9NQVNLKTsK KwkJaW5mbyB8PSAoc2tiX25ldHdvcmtfb2Zmc2V0KHNrYikgPDwgRTEwMDBfQURWVFhEX01BQ0xF Tl9TSElGVCk7CisJCWlmIChza2ItPmlwX3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQorCQkJ aW5mbyB8PSBza2JfbmV0d29ya19oZWFkZXJfbGVuKHNrYik7CisKKwkJY29udGV4dF9kZXNjLT52 bGFuX21hY2lwX2xlbnMgPSBjcHVfdG9fbGUzMihpbmZvKTsKKworCQl0dV9jbWQgfD0gKEUxMDAw X1RYRF9DTURfREVYVCB8IEUxMDAwX0FEVlRYRF9EVFlQX0NUWFQpOworCisJCWlmIChza2ItPmlw X3N1bW1lZCA9PSBDSEVDS1NVTV9QQVJUSUFMKSB7CisJCQlzd2l0Y2ggKHNrYi0+cHJvdG9jb2wp IHsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUCk6CisJCQkJdHVfY21kIHw9IEUx MDAwX0FEVlRYRF9UVUNNRF9JUFY0OworCQkJCWlmIChpcF9oZHIoc2tiKS0+cHJvdG9jb2wgPT0g SVBQUk9UT19UQ1ApCisJCQkJCXR1X2NtZCB8PSBFMTAwMF9BRFZUWERfVFVDTURfTDRUX1RDUDsK KwkJCQlicmVhazsKKwkJCWNhc2UgX19jb25zdGFudF9odG9ucyhFVEhfUF9JUFY2KToKKwkJCQkv KiBYWFggd2hhdCBhYm91dCBvdGhlciBWNiBoZWFkZXJzPz8gKi8KKwkJCQlpZiAoaXB2Nl9oZHIo c2tiKS0+bmV4dGhkciA9PSBJUFBST1RPX1RDUCkKKwkJCQkJdHVfY21kIHw9IEUxMDAwX0FEVlRY RF9UVUNNRF9MNFRfVENQOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQlpZiAodW5saWtl bHkobmV0X3JhdGVsaW1pdCgpKSkKKwkJCQkJZGV2X3dhcm4oJmFkYXB0ZXItPnBkZXYtPmRldiwK KwkJCQkJICAgICJwYXJ0aWFsIGNoZWNrc3VtIGJ1dCBwcm90bz0leCFcbiIsCisJCQkJCSAgICBz a2ItPnByb3RvY29sKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJCWNvbnRleHRfZGVzYy0+ dHlwZV90dWNtZF9tbGhsID0gY3B1X3RvX2xlMzIodHVfY21kKTsKKwkJY29udGV4dF9kZXNjLT5z ZXFudW1fc2VlZCA9IDA7CisJCWlmIChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RY X0lEWCkKKwkJCWNvbnRleHRfZGVzYy0+bXNzX2w0bGVuX2lkeCA9CisJCQkJY3B1X3RvX2xlMzIo dHhfcmluZy0+ZWltc192YWx1ZSA+PiA0KTsKKworCQlidWZmZXJfaW5mby0+dGltZV9zdGFtcCA9 IGppZmZpZXM7CisJCWJ1ZmZlcl9pbmZvLT5kbWEgPSAwOworCisJCWkrKzsKKwkJaWYgKGkgPT0g dHhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJdHhfcmluZy0+bmV4dF90b191c2UgPSBpOwor CisJCXJldHVybiB0cnVlOworCX0KKworCisJcmV0dXJuIGZhbHNlOworfQorCisjZGVmaW5lIElH Ql9NQVhfVFhEX1BXUgkxNgorI2RlZmluZSBJR0JfTUFYX0RBVEFfUEVSX1RYRAkoMTw8SUdCX01B WF9UWERfUFdSKQorCitzdGF0aWMgaW5saW5lIGludCBpZ2JfdHhfbWFwX2FkdihzdHJ1Y3QgaWdi X2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkJIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywKKwkJCQkg c3RydWN0IHNrX2J1ZmYgKnNrYikKK3sKKwlzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm87 CisJdW5zaWduZWQgaW50IGxlbiA9IHNrYl9oZWFkbGVuKHNrYik7CisJdW5zaWduZWQgaW50IGNv dW50ID0gMCwgaTsKKwl1bnNpZ25lZCBpbnQgZjsKKworCWkgPSB0eF9yaW5nLT5uZXh0X3RvX3Vz ZTsKKworCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCUJVR19PTihs ZW4gPj0gSUdCX01BWF9EQVRBX1BFUl9UWEQpOworCWJ1ZmZlcl9pbmZvLT5sZW5ndGggPSBsZW47 CisJLyogc2V0IHRpbWVfc3RhbXAgKmJlZm9yZSogZG1hIHRvIGhlbHAgYXZvaWQgYSBwb3NzaWJs ZSByYWNlICovCisJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCWJ1ZmZlcl9p bmZvLT5kbWEgPSBwY2lfbWFwX3NpbmdsZShhZGFwdGVyLT5wZGV2LCBza2ItPmRhdGEsIGxlbiwK KwkJCQkJICBQQ0lfRE1BX1RPREVWSUNFKTsKKwljb3VudCsrOworCWkrKzsKKwlpZiAoaSA9PSB0 eF9yaW5nLT5jb3VudCkKKwkJaSA9IDA7CisKKwlmb3IgKGYgPSAwOyBmIDwgc2tiX3NoaW5mbyhz a2IpLT5ucl9mcmFnczsgZisrKSB7CisJCXN0cnVjdCBza2JfZnJhZ19zdHJ1Y3QgKmZyYWc7CisK KwkJZnJhZyA9ICZza2Jfc2hpbmZvKHNrYiktPmZyYWdzW2ZdOworCQlsZW4gPSBmcmFnLT5zaXpl OworCisJCWJ1ZmZlcl9pbmZvID0gJnR4X3JpbmctPmJ1ZmZlcl9pbmZvW2ldOworCQlCVUdfT04o bGVuID49IElHQl9NQVhfREFUQV9QRVJfVFhEKTsKKwkJYnVmZmVyX2luZm8tPmxlbmd0aCA9IGxl bjsKKwkJYnVmZmVyX2luZm8tPnRpbWVfc3RhbXAgPSBqaWZmaWVzOworCQlidWZmZXJfaW5mby0+ ZG1hID0gcGNpX21hcF9wYWdlKGFkYXB0ZXItPnBkZXYsCisJCQkJCQlmcmFnLT5wYWdlLAorCQkJ CQkJZnJhZy0+cGFnZV9vZmZzZXQsCisJCQkJCQlsZW4sCisJCQkJCQlQQ0lfRE1BX1RPREVWSUNF KTsKKworCQljb3VudCsrOworCQlpKys7CisJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQorCQkJ aSA9IDA7CisJfQorCisJaSA9IChpID09IDApID8gdHhfcmluZy0+Y291bnQgLSAxIDogaSAtIDE7 CisJdHhfcmluZy0+YnVmZmVyX2luZm9baV0uc2tiID0gc2tiOworCisJcmV0dXJuIGNvdW50Owor fQorCitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3R4X3F1ZXVlX2FkdihzdHJ1Y3QgaWdiX2FkYXB0 ZXIgKmFkYXB0ZXIsCisJCQkJICAgIHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZywKKwkJCQkgICAg aW50IHR4X2ZsYWdzLCBpbnQgY291bnQsIHUzMiBwYXlsZW4sCisJCQkJICAgIHU4IGhkcl9sZW4p Cit7CisJdW5pb24gZTEwMDBfYWR2X3R4X2Rlc2MgKnR4X2Rlc2MgPSBOVUxMOworCXN0cnVjdCBp Z2JfYnVmZmVyICpidWZmZXJfaW5mbzsKKwl1MzIgb2xpbmZvX3N0YXR1cyA9IDAsIGNtZF90eXBl X2xlbjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWNtZF90eXBlX2xlbiA9IChFMTAwMF9BRFZUWERf RFRZUF9EQVRBIHwgRTEwMDBfQURWVFhEX0RDTURfSUZDUyB8CisJCQlFMTAwMF9BRFZUWERfRENN RF9ERVhUKTsKKworCWlmICh0eF9mbGFncyAmIElHQl9UWF9GTEFHU19WTEFOKQorCQljbWRfdHlw ZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVkxFOworCisJaWYgKHR4X2ZsYWdzICYgSUdCX1RY X0ZMQUdTX1RTTykgeworCQljbWRfdHlwZV9sZW4gfD0gRTEwMDBfQURWVFhEX0RDTURfVFNFOwor CisJCS8qIGluc2VydCB0Y3AgY2hlY2tzdW0gKi8KKwkJb2xpbmZvX3N0YXR1cyB8PSBFMTAwMF9U WERfUE9QVFNfVFhTTSA8PCA4OworCisJCS8qIGluc2VydCBpcCBjaGVja3N1bSAqLworCQlpZiAo dHhfZmxhZ3MgJiBJR0JfVFhfRkxBR1NfSVBWNCkKKwkJCW9saW5mb19zdGF0dXMgfD0gRTEwMDBf VFhEX1BPUFRTX0lYU00gPDwgODsKKworCX0gZWxzZSBpZiAodHhfZmxhZ3MgJiBJR0JfVFhfRkxB R1NfQ1NVTSkgeworCQlvbGluZm9fc3RhdHVzIHw9IEUxMDAwX1RYRF9QT1BUU19UWFNNIDw8IDg7 CisJfQorCisJaWYgKChhZGFwdGVyLT5mbGFncyAmIElHQl9GTEFHX05FRURfQ1RYX0lEWCkgJiYK KwkgICAgKHR4X2ZsYWdzICYgKElHQl9UWF9GTEFHU19DU1VNIHwgSUdCX1RYX0ZMQUdTX1RTTyB8 CisJCQkgSUdCX1RYX0ZMQUdTX1ZMQU4pKSkKKwkJb2xpbmZvX3N0YXR1cyB8PSB0eF9yaW5nLT5l aW1zX3ZhbHVlID4+IDQ7CisKKwlvbGluZm9fc3RhdHVzIHw9ICgocGF5bGVuIC0gaGRyX2xlbikg PDwgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7CisKKwlpID0gdHhfcmluZy0+bmV4dF90b191 c2U7CisJd2hpbGUgKGNvdW50LS0pIHsKKwkJYnVmZmVyX2luZm8gPSAmdHhfcmluZy0+YnVmZmVy X2luZm9baV07CisJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDX0FEVigqdHhfcmluZywgaSk7CisJ CXR4X2Rlc2MtPnJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChidWZmZXJfaW5mby0+ZG1h KTsKKwkJdHhfZGVzYy0+cmVhZC5jbWRfdHlwZV9sZW4gPQorCQkJY3B1X3RvX2xlMzIoY21kX3R5 cGVfbGVuIHwgYnVmZmVyX2luZm8tPmxlbmd0aCk7CisJCXR4X2Rlc2MtPnJlYWQub2xpbmZvX3N0 YXR1cyA9IGNwdV90b19sZTMyKG9saW5mb19zdGF0dXMpOworCQlpKys7CisJCWlmIChpID09IHR4 X3JpbmctPmNvdW50KQorCQkJaSA9IDA7CisJfQorCisJdHhfZGVzYy0+cmVhZC5jbWRfdHlwZV9s ZW4gfD0gY3B1X3RvX2xlMzIoYWRhcHRlci0+dHhkX2NtZCk7CisJLyogRm9yY2UgbWVtb3J5IHdy aXRlcyB0byBjb21wbGV0ZSBiZWZvcmUgbGV0dGluZyBoL3cKKwkgKiBrbm93IHRoZXJlIGFyZSBu ZXcgZGVzY3JpcHRvcnMgdG8gZmV0Y2guICAoT25seQorCSAqIGFwcGxpY2FibGUgZm9yIHdlYWst b3JkZXJlZCBtZW1vcnkgbW9kZWwgYXJjaHMsCisJICogc3VjaCBhcyBJQS02NCkuICovCisJd21i KCk7CisKKwl0eF9yaW5nLT5uZXh0X3RvX3VzZSA9IGk7CisJd3JpdGVsKGksIGFkYXB0ZXItPmh3 Lmh3X2FkZHIgKyB0eF9yaW5nLT50YWlsKTsKKwkvKiB3ZSBuZWVkIHRoaXMgaWYgbW9yZSB0aGFu IG9uZSBwcm9jZXNzb3IgY2FuIHdyaXRlIHRvIG91ciB0YWlsCisJICogYXQgYSB0aW1lLCBpdCBz eW5jcm9uaXplcyBJTyBvbiBJQTY0L0FsdGl4IHN5c3RlbXMgKi8KKwltbWlvd2IoKTsKK30KKwor c3RhdGljIGludCBfX2lnYl9tYXliZV9zdG9wX3R4KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYs CisJCQkgICAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkKK3sKKwlzdHJ1 Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJbmV0aWZf c3RvcF9xdWV1ZShuZXRkZXYpOworCS8qIEhlcmJlcnQncyBvcmlnaW5hbCBwYXRjaCBoYWQ6CisJ ICogIHNtcF9tYl9fYWZ0ZXJfbmV0aWZfc3RvcF9xdWV1ZSgpOworCSAqIGJ1dCBzaW5jZSB0aGF0 IGRvZXNuJ3QgZXhpc3QgeWV0LCBqdXN0IG9wZW4gY29kZSBpdC4gKi8KKwlzbXBfbWIoKTsKKwor CS8qIFdlIG5lZWQgdG8gY2hlY2sgYWdhaW4gaW4gYSBjYXNlIGFub3RoZXIgQ1BVIGhhcyBqdXN0 CisJICogbWFkZSByb29tIGF2YWlsYWJsZS4gKi8KKwlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3Jp bmcpIDwgc2l6ZSkKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIEEgcmVwcmlldmUhICovCisJbmV0 aWZfc3RhcnRfcXVldWUobmV0ZGV2KTsKKwkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgaWdiX21heWJlX3N0b3BfdHgoc3RydWN0IG5ldF9kZXZp Y2UgKm5ldGRldiwKKwkJCSAgICAgc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nLCBpbnQgc2l6ZSkK K3sKKwlpZiAoSUdCX0RFU0NfVU5VU0VEKHR4X3JpbmcpID49IHNpemUpCisJCXJldHVybiAwOwor CXJldHVybiBfX2lnYl9tYXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgc2l6ZSk7Cit9CisK KyNkZWZpbmUgVFhEX1VTRV9DT1VOVChTKSAoKChTKSA+PiAoSUdCX01BWF9UWERfUFdSKSkgKyAx KQorCitzdGF0aWMgaW50IGlnYl94bWl0X2ZyYW1lX3JpbmdfYWR2KHN0cnVjdCBza19idWZmICpz a2IsCisJCQkJICAgc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKKwkJCQkgICBzdHJ1Y3QgaWdi X3JpbmcgKnR4X3JpbmcpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2 X3ByaXYobmV0ZGV2KTsKKwl1bnNpZ25lZCBpbnQgdHhfZmxhZ3MgPSAwOworCXVuc2lnbmVkIGlu dCBsZW47CisJdW5zaWduZWQgbG9uZyBpcnFfZmxhZ3M7CisJdTggaGRyX2xlbiA9IDA7CisJaW50 IHRzbyA9IDA7CisKKwlsZW4gPSBza2JfaGVhZGxlbihza2IpOworCisJaWYgKHRlc3RfYml0KF9f SUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpIHsKKwkJZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTsK KwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAoc2tiLT5sZW4gPD0gMCkgeworCQlk ZXZfa2ZyZWVfc2tiX2FueShza2IpOworCQlyZXR1cm4gTkVUREVWX1RYX09LOworCX0KKworCWlm ICghc3Bpbl90cnlsb2NrX2lycXNhdmUoJnR4X3JpbmctPnR4X2xvY2ssIGlycV9mbGFncykpCisJ CS8qIENvbGxpc2lvbiAtIHRlbGwgdXBwZXIgbGF5ZXIgdG8gcmVxdWV1ZSAqLworCQlyZXR1cm4g TkVUREVWX1RYX0xPQ0tFRDsKKworCS8qIG5lZWQ6IDEgZGVzY3JpcHRvciBwZXIgcGFnZSwKKwkg KiAgICAgICArIDIgZGVzYyBnYXAgdG8ga2VlcCB0YWlsIGZyb20gdG91Y2hpbmcgaGVhZCwKKwkg KiAgICAgICArIDEgZGVzYyBmb3Igc2tiLT5kYXRhLAorCSAqICAgICAgICsgMSBkZXNjIGZvciBj b250ZXh0IGRlc2NyaXB0b3IsCisJICogb3RoZXJ3aXNlIHRyeSBuZXh0IHRpbWUgKi8KKwlpZiAo aWdiX21heWJlX3N0b3BfdHgobmV0ZGV2LCB0eF9yaW5nLCBza2Jfc2hpbmZvKHNrYiktPm5yX2Zy YWdzICsgNCkpIHsKKwkJLyogdGhpcyBpcyBhIGhhcmQgZXJyb3IgKi8KKwkJc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIE5FVERF Vl9UWF9CVVNZOworCX0KKwlza2Jfb3JwaGFuKHNrYik7CisKKwlpZiAoYWRhcHRlci0+dmxncnAg JiYgdmxhbl90eF90YWdfcHJlc2VudChza2IpKSB7CisJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFH U19WTEFOOworCQl0eF9mbGFncyB8PSAodmxhbl90eF90YWdfZ2V0KHNrYikgPDwgSUdCX1RYX0ZM QUdTX1ZMQU5fU0hJRlQpOworCX0KKworCWlmIChza2ItPnByb3RvY29sID09IGh0b25zKEVUSF9Q X0lQKSkKKwkJdHhfZmxhZ3MgfD0gSUdCX1RYX0ZMQUdTX0lQVjQ7CisKKwl0c28gPSBza2JfaXNf Z3NvKHNrYikgPyBpZ2JfdHNvX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzLAor CQkJCQkgICAgICAmaGRyX2xlbikgOiAwOworCisJaWYgKHRzbyA8IDApIHsKKwkJZGV2X2tmcmVl X3NrYl9hbnkoc2tiKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9j aywgaXJxX2ZsYWdzKTsKKwkJcmV0dXJuIE5FVERFVl9UWF9PSzsKKwl9CisKKwlpZiAodHNvKQor CQl0eF9mbGFncyB8PSBJR0JfVFhfRkxBR1NfVFNPOworCWVsc2UgaWYgKGlnYl90eF9jc3VtX2Fk dihhZGFwdGVyLCB0eF9yaW5nLCBza2IsIHR4X2ZsYWdzKSkKKwkJCWlmIChza2ItPmlwX3N1bW1l ZCA9PSBDSEVDS1NVTV9QQVJUSUFMKQorCQkJCXR4X2ZsYWdzIHw9IElHQl9UWF9GTEFHU19DU1VN OworCisJaWdiX3R4X3F1ZXVlX2FkdihhZGFwdGVyLCB0eF9yaW5nLCB0eF9mbGFncywKKwkJCSBp Z2JfdHhfbWFwX2FkdihhZGFwdGVyLCB0eF9yaW5nLCBza2IpLAorCQkJIHNrYi0+bGVuLCBoZHJf bGVuKTsKKworCW5ldGRldi0+dHJhbnNfc3RhcnQgPSBqaWZmaWVzOworCisJLyogTWFrZSBzdXJl IHRoZXJlIGlzIHNwYWNlIGluIHRoZSByaW5nIGZvciB0aGUgbmV4dCBzZW5kLiAqLworCWlnYl9t YXliZV9zdG9wX3R4KG5ldGRldiwgdHhfcmluZywgTUFYX1NLQl9GUkFHUyArIDQpOworCisJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmdHhfcmluZy0+dHhfbG9jaywgaXJxX2ZsYWdzKTsKKwlyZXR1 cm4gTkVUREVWX1RYX09LOworfQorCitzdGF0aWMgaW50IGlnYl94bWl0X2ZyYW1lX2FkdihzdHJ1 Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQoreworCXN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGlnYl9y aW5nICp0eF9yaW5nID0gJmFkYXB0ZXItPnR4X3JpbmdbMF07CisKKwkvKiBUaGlzIGdvZXMgYmFj ayB0byB0aGUgcXVlc3Rpb24gb2YgaG93IHRvIGxvZ2ljYWxseSBtYXAgYSB0eCBxdWV1ZQorCSAq IHRvIGEgZmxvdy4gIFJpZ2h0IG5vdywgcGVyZm9ybWFuY2UgaXMgaW1wYWN0ZWQgc2xpZ2h0bHkg bmVnYXRpdmVseQorCSAqIGlmIHVzaW5nIG11bHRpcGxlIHR4IHF1ZXVlcy4gIElmIHRoZSBzdGFj ayBicmVha3MgYXdheSBmcm9tIGEKKwkgKiBzaW5nbGUgcWRpc2MgaW1wbGVtZW50YXRpb24sIHdl IGNhbiBsb29rIGF0IHRoaXMgYWdhaW4uICovCisJcmV0dXJuIChpZ2JfeG1pdF9mcmFtZV9yaW5n X2Fkdihza2IsIG5ldGRldiwgdHhfcmluZykpOworfQorCisvKioKKyAqIGlnYl90eF90aW1lb3V0 IC0gUmVzcG9uZCB0byBhIFR4IEhhbmcKKyAqIEBuZXRkZXY6IG5ldHdvcmsgaW50ZXJmYWNlIGRl dmljZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyB2b2lkIGlnYl90eF90aW1lb3V0KHN0cnVjdCBu ZXRfZGV2aWNlICpuZXRkZXYpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0 ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3Owor CisJLyogRG8gdGhlIHJlc2V0IG91dHNpZGUgb2YgaW50ZXJydXB0IGNvbnRleHQgKi8KKwlhZGFw dGVyLT50eF90aW1lb3V0X2NvdW50Kys7CisJc2NoZWR1bGVfd29yaygmYWRhcHRlci0+cmVzZXRf dGFzayk7CisJd3IzMihFMTAwMF9FSUNTLCBhZGFwdGVyLT5laW1zX2VuYWJsZV9tYXNrICYKKwkJ fihFMTAwMF9FSU1TX1RDUF9USU1FUiB8IEUxMDAwX0VJTVNfT1RIRVIpKTsKK30KKworc3RhdGlj IHZvaWQgaWdiX3Jlc2V0X3Rhc2soc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyKQoreworCWln Yl9yZWluaXRfbG9ja2VkKGFkYXB0ZXIpOworfQorCisvKioKKyAqIGlnYl9nZXRfc3RhdHMgLSBH ZXQgU3lzdGVtIE5ldHdvcmsgU3RhdGlzdGljcworICogQG5ldGRldjogbmV0d29yayBpbnRlcmZh Y2UgZGV2aWNlIHN0cnVjdHVyZQorICoKKyAqIFJldHVybnMgdGhlIGFkZHJlc3Mgb2YgdGhlIGRl dmljZSBzdGF0aXN0aWNzIHN0cnVjdHVyZS4KKyAqIFRoZSBzdGF0aXN0aWNzIGFyZSBhY3R1YWxs eSB1cGRhdGVkIGZyb20gdGhlIHRpbWVyIGNhbGxiYWNrLgorICoqLworc3RhdGljIHN0cnVjdCBu ZXRfZGV2aWNlX3N0YXRzICoKK2lnYl9nZXRfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRl dikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYp OworCisJLyogb25seSByZXR1cm4gdGhlIGN1cnJlbnQgc3RhdHMgKi8KKwlyZXR1cm4gJmFkYXB0 ZXItPm5ldF9zdGF0czsKK30KKworLyoqCisgKiBpZ2JfY2hhbmdlX210dSAtIENoYW5nZSB0aGUg TWF4aW11bSBUcmFuc2ZlciBVbml0CisgKiBAbmV0ZGV2OiBuZXR3b3JrIGludGVyZmFjZSBkZXZp Y2Ugc3RydWN0dXJlCisgKiBAbmV3X210dTogbmV3IHZhbHVlIGZvciBtYXhpbXVtIGZyYW1lIHNp emUKKyAqCisgKiBSZXR1cm5zIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgb24gZmFpbHVyZQorICoq Lworc3RhdGljIGludCBpZ2JfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBp bnQgbmV3X210dSkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJp dihuZXRkZXYpOworCWludCBtYXhfZnJhbWUgPSBuZXdfbXR1ICsgRVRIX0hMRU4gKyBFVEhfRkNT X0xFTjsKKworCWlmICgobWF4X2ZyYW1lIDwgRVRIX1pMRU4gKyBFVEhfRkNTX0xFTikgfHwKKwkg ICAgKG1heF9mcmFtZSA+IE1BWF9KVU1CT19GUkFNRV9TSVpFKSkgeworCQlkZXZfZXJyKCZhZGFw dGVyLT5wZGV2LT5kZXYsICJJbnZhbGlkIE1UVSBzZXR0aW5nXG4iKTsKKwkJcmV0dXJuIC1FSU5W QUw7CisJfQorCisjZGVmaW5lIE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSA5MjM0CisJaWYgKG1h eF9mcmFtZSA+IE1BWF9TVERfSlVNQk9fRlJBTUVfU0laRSkgeworCQlkZXZfZXJyKCZhZGFwdGVy LT5wZGV2LT5kZXYsICJNVFUgPiA5MjE2IG5vdCBzdXBwb3J0ZWQuXG4iKTsKKwkJcmV0dXJuIC1F SU5WQUw7CisJfQorCisJd2hpbGUgKHRlc3RfYW5kX3NldF9iaXQoX19JR0JfUkVTRVRUSU5HLCAm YWRhcHRlci0+c3RhdGUpKQorCQltc2xlZXAoMSk7CisJLyogaWdiX2Rvd24gaGFzIGEgZGVwZW5k ZW5jeSBvbiBtYXhfZnJhbWVfc2l6ZSAqLworCWFkYXB0ZXItPm1heF9mcmFtZV9zaXplID0gbWF4 X2ZyYW1lOworCWlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpCisJCWlnYl9kb3duKGFkYXB0ZXIp OworCisJLyogTk9URTogbmV0ZGV2X2FsbG9jX3NrYiByZXNlcnZlcyAxNiBieXRlcywgYW5kIHR5 cGljYWxseSBORVRfSVBfQUxJR04KKwkgKiBtZWFucyB3ZSByZXNlcnZlIDIgbW9yZSwgdGhpcyBw dXNoZXMgdXMgdG8gYWxsb2NhdGUgZnJvbSB0aGUgbmV4dAorCSAqIGxhcmdlciBzbGFiIHNpemUu CisJICogaS5lLiBSWEJVRkZFUl8yMDQ4IC0tPiBzaXplLTQwOTYgc2xhYgorCSAqLworCisJaWYg KG1heF9mcmFtZSA8PSBJR0JfUlhCVUZGRVJfMjU2KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVu ID0gSUdCX1JYQlVGRkVSXzI1NjsKKwllbHNlIGlmIChtYXhfZnJhbWUgPD0gSUdCX1JYQlVGRkVS XzUxMikKKwkJYWRhcHRlci0+cnhfYnVmZmVyX2xlbiA9IElHQl9SWEJVRkZFUl81MTI7CisJZWxz ZSBpZiAobWF4X2ZyYW1lIDw9IElHQl9SWEJVRkZFUl8xMDI0KQorCQlhZGFwdGVyLT5yeF9idWZm ZXJfbGVuID0gSUdCX1JYQlVGRkVSXzEwMjQ7CisJZWxzZSBpZiAobWF4X2ZyYW1lIDw9IElHQl9S WEJVRkZFUl8yMDQ4KQorCQlhZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSUdCX1JYQlVGRkVSXzIw NDg7CisJZWxzZQorI2lmIChQQUdFX1NJWkUgLyAyKSA+IElHQl9SWEJVRkZFUl8xNjM4NAorCQlh ZGFwdGVyLT5yeF9idWZmZXJfbGVuID0gSUdCX1JYQlVGRkVSXzE2Mzg0OworI2Vsc2UKKwkJYWRh cHRlci0+cnhfYnVmZmVyX2xlbiA9IFBBR0VfU0laRSAvIDI7CisjZW5kaWYKKwkvKiBhZGp1c3Qg YWxsb2NhdGlvbiBpZiBMUEUgcHJvdGVjdHMgdXMsIGFuZCB3ZSBhcmVuJ3QgdXNpbmcgU0JQICov CisJaWYgKChtYXhfZnJhbWUgPT0gRVRIX0ZSQU1FX0xFTiArIEVUSF9GQ1NfTEVOKSB8fAorCSAg ICAgKG1heF9mcmFtZSA9PSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRSkpCisJCWFkYXB0ZXIt PnJ4X2J1ZmZlcl9sZW4gPSBNQVhJTVVNX0VUSEVSTkVUX1ZMQU5fU0laRTsKKworCWRldl9pbmZv KCZhZGFwdGVyLT5wZGV2LT5kZXYsICJjaGFuZ2luZyBNVFUgZnJvbSAlZCB0byAlZFxuIiwKKwkJ IG5ldGRldi0+bXR1LCBuZXdfbXR1KTsKKwluZXRkZXYtPm10dSA9IG5ld19tdHU7CisKKwlpZiAo bmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlpZ2JfdXAoYWRhcHRlcik7CisJZWxzZQorCQlpZ2Jf cmVzZXQoYWRhcHRlcik7CisKKwljbGVhcl9iaXQoX19JR0JfUkVTRVRUSU5HLCAmYWRhcHRlci0+ c3RhdGUpOworCisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogaWdiX3VwZGF0ZV9zdGF0cyAtIFVw ZGF0ZSB0aGUgYm9hcmQgc3RhdGlzdGljcyBjb3VudGVycworICogQGFkYXB0ZXI6IGJvYXJkIHBy aXZhdGUgc3RydWN0dXJlCisgKiovCisKK3ZvaWQgaWdiX3VwZGF0ZV9zdGF0cyhzdHJ1Y3QgaWdi X2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5o dzsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IGFkYXB0ZXItPnBkZXY7CisJdTE2IHBoeV90bXA7 CisKKyNkZWZpbmUgUEhZX0lETEVfRVJST1JfQ09VTlRfTUFTSyAweDAwRkYKKworCS8qCisJICog UHJldmVudCBzdGF0cyB1cGRhdGUgd2hpbGUgYWRhcHRlciBpcyBiZWluZyByZXNldCwgb3IgaWYg dGhlIHBjaQorCSAqIGNvbm5lY3Rpb24gaXMgZG93bi4KKwkgKi8KKwlpZiAoYWRhcHRlci0+bGlu a19zcGVlZCA9PSAwKQorCQlyZXR1cm47CisJaWYgKHBkZXYtPmVycm9yX3N0YXRlICE9IHBjaV9j aGFubmVsX2lvX25vcm1hbCkKKwkJcmV0dXJuOworCisJYWRhcHRlci0+c3RhdHMuY3JjZXJycyAr PSByZDMyKEUxMDAwX0NSQ0VSUlMpOworCWFkYXB0ZXItPnN0YXRzLmdwcmMgKz0gcmQzMihFMTAw MF9HUFJDKTsKKwlhZGFwdGVyLT5zdGF0cy5nb3JjICs9IHJkMzIoRTEwMDBfR09SQ0wpOworCXJk MzIoRTEwMDBfR09SQ0gpOyAvKiBjbGVhciBHT1JDTCAqLworCWFkYXB0ZXItPnN0YXRzLmJwcmMg Kz0gcmQzMihFMTAwMF9CUFJDKTsKKwlhZGFwdGVyLT5zdGF0cy5tcHJjICs9IHJkMzIoRTEwMDBf TVBSQyk7CisJYWRhcHRlci0+c3RhdHMucm9jICs9IHJkMzIoRTEwMDBfUk9DKTsKKworCWFkYXB0 ZXItPnN0YXRzLnByYzY0ICs9IHJkMzIoRTEwMDBfUFJDNjQpOworCWFkYXB0ZXItPnN0YXRzLnBy YzEyNyArPSByZDMyKEUxMDAwX1BSQzEyNyk7CisJYWRhcHRlci0+c3RhdHMucHJjMjU1ICs9IHJk MzIoRTEwMDBfUFJDMjU1KTsKKwlhZGFwdGVyLT5zdGF0cy5wcmM1MTEgKz0gcmQzMihFMTAwMF9Q UkM1MTEpOworCWFkYXB0ZXItPnN0YXRzLnByYzEwMjMgKz0gcmQzMihFMTAwMF9QUkMxMDIzKTsK KwlhZGFwdGVyLT5zdGF0cy5wcmMxNTIyICs9IHJkMzIoRTEwMDBfUFJDMTUyMik7CisJYWRhcHRl ci0+c3RhdHMuc3ltZXJycyArPSByZDMyKEUxMDAwX1NZTUVSUlMpOworCWFkYXB0ZXItPnN0YXRz LnNlYyArPSByZDMyKEUxMDAwX1NFQyk7CisKKwlhZGFwdGVyLT5zdGF0cy5tcGMgKz0gcmQzMihF MTAwMF9NUEMpOworCWFkYXB0ZXItPnN0YXRzLnNjYyArPSByZDMyKEUxMDAwX1NDQyk7CisJYWRh cHRlci0+c3RhdHMuZWNvbCArPSByZDMyKEUxMDAwX0VDT0wpOworCWFkYXB0ZXItPnN0YXRzLm1j YyArPSByZDMyKEUxMDAwX01DQyk7CisJYWRhcHRlci0+c3RhdHMubGF0ZWNvbCArPSByZDMyKEUx MDAwX0xBVEVDT0wpOworCWFkYXB0ZXItPnN0YXRzLmRjICs9IHJkMzIoRTEwMDBfREMpOworCWFk YXB0ZXItPnN0YXRzLnJsZWMgKz0gcmQzMihFMTAwMF9STEVDKTsKKwlhZGFwdGVyLT5zdGF0cy54 b25yeGMgKz0gcmQzMihFMTAwMF9YT05SWEMpOworCWFkYXB0ZXItPnN0YXRzLnhvbnR4YyArPSBy ZDMyKEUxMDAwX1hPTlRYQyk7CisJYWRhcHRlci0+c3RhdHMueG9mZnJ4YyArPSByZDMyKEUxMDAw X1hPRkZSWEMpOworCWFkYXB0ZXItPnN0YXRzLnhvZmZ0eGMgKz0gcmQzMihFMTAwMF9YT0ZGVFhD KTsKKwlhZGFwdGVyLT5zdGF0cy5mY3J1YyArPSByZDMyKEUxMDAwX0ZDUlVDKTsKKwlhZGFwdGVy LT5zdGF0cy5ncHRjICs9IHJkMzIoRTEwMDBfR1BUQyk7CisJYWRhcHRlci0+c3RhdHMuZ290YyAr PSByZDMyKEUxMDAwX0dPVENMKTsKKwlyZDMyKEUxMDAwX0dPVENIKTsgLyogY2xlYXIgR09UQ0wg Ki8KKwlhZGFwdGVyLT5zdGF0cy5ybmJjICs9IHJkMzIoRTEwMDBfUk5CQyk7CisJYWRhcHRlci0+ c3RhdHMucnVjICs9IHJkMzIoRTEwMDBfUlVDKTsKKwlhZGFwdGVyLT5zdGF0cy5yZmMgKz0gcmQz MihFMTAwMF9SRkMpOworCWFkYXB0ZXItPnN0YXRzLnJqYyArPSByZDMyKEUxMDAwX1JKQyk7CisJ YWRhcHRlci0+c3RhdHMudG9yICs9IHJkMzIoRTEwMDBfVE9SSCk7CisJYWRhcHRlci0+c3RhdHMu dG90ICs9IHJkMzIoRTEwMDBfVE9USCk7CisJYWRhcHRlci0+c3RhdHMudHByICs9IHJkMzIoRTEw MDBfVFBSKTsKKworCWFkYXB0ZXItPnN0YXRzLnB0YzY0ICs9IHJkMzIoRTEwMDBfUFRDNjQpOwor CWFkYXB0ZXItPnN0YXRzLnB0YzEyNyArPSByZDMyKEUxMDAwX1BUQzEyNyk7CisJYWRhcHRlci0+ c3RhdHMucHRjMjU1ICs9IHJkMzIoRTEwMDBfUFRDMjU1KTsKKwlhZGFwdGVyLT5zdGF0cy5wdGM1 MTEgKz0gcmQzMihFMTAwMF9QVEM1MTEpOworCWFkYXB0ZXItPnN0YXRzLnB0YzEwMjMgKz0gcmQz MihFMTAwMF9QVEMxMDIzKTsKKwlhZGFwdGVyLT5zdGF0cy5wdGMxNTIyICs9IHJkMzIoRTEwMDBf UFRDMTUyMik7CisKKwlhZGFwdGVyLT5zdGF0cy5tcHRjICs9IHJkMzIoRTEwMDBfTVBUQyk7CisJ YWRhcHRlci0+c3RhdHMuYnB0YyArPSByZDMyKEUxMDAwX0JQVEMpOworCisJLyogdXNlZCBmb3Ig YWRhcHRpdmUgSUZTICovCisKKwlody0+bWFjLnR4X3BhY2tldF9kZWx0YSA9IHJkMzIoRTEwMDBf VFBUKTsKKwlhZGFwdGVyLT5zdGF0cy50cHQgKz0gaHctPm1hYy50eF9wYWNrZXRfZGVsdGE7CisJ aHctPm1hYy5jb2xsaXNpb25fZGVsdGEgPSByZDMyKEUxMDAwX0NPTEMpOworCWFkYXB0ZXItPnN0 YXRzLmNvbGMgKz0gaHctPm1hYy5jb2xsaXNpb25fZGVsdGE7CisKKwlhZGFwdGVyLT5zdGF0cy5h bGduZXJyYyArPSByZDMyKEUxMDAwX0FMR05FUlJDKTsKKwlhZGFwdGVyLT5zdGF0cy5yeGVycmMg Kz0gcmQzMihFMTAwMF9SWEVSUkMpOworCWFkYXB0ZXItPnN0YXRzLnRuY3JzICs9IHJkMzIoRTEw MDBfVE5DUlMpOworCWFkYXB0ZXItPnN0YXRzLnRzY3RjICs9IHJkMzIoRTEwMDBfVFNDVEMpOwor CWFkYXB0ZXItPnN0YXRzLnRzY3RmYyArPSByZDMyKEUxMDAwX1RTQ1RGQyk7CisKKwlhZGFwdGVy LT5zdGF0cy5pYWMgKz0gcmQzMihFMTAwMF9JQUMpOworCWFkYXB0ZXItPnN0YXRzLmljcnhvYyAr PSByZDMyKEUxMDAwX0lDUlhPQyk7CisJYWRhcHRlci0+c3RhdHMuaWNyeHB0YyArPSByZDMyKEUx MDAwX0lDUlhQVEMpOworCWFkYXB0ZXItPnN0YXRzLmljcnhhdGMgKz0gcmQzMihFMTAwMF9JQ1JY QVRDKTsKKwlhZGFwdGVyLT5zdGF0cy5pY3R4cHRjICs9IHJkMzIoRTEwMDBfSUNUWFBUQyk7CisJ YWRhcHRlci0+c3RhdHMuaWN0eGF0YyArPSByZDMyKEUxMDAwX0lDVFhBVEMpOworCWFkYXB0ZXIt PnN0YXRzLmljdHhxZWMgKz0gcmQzMihFMTAwMF9JQ1RYUUVDKTsKKwlhZGFwdGVyLT5zdGF0cy5p Y3R4cW10YyArPSByZDMyKEUxMDAwX0lDVFhRTVRDKTsKKwlhZGFwdGVyLT5zdGF0cy5pY3J4ZG10 YyArPSByZDMyKEUxMDAwX0lDUlhETVRDKTsKKworCS8qIEZpbGwgb3V0IHRoZSBPUyBzdGF0aXN0 aWNzIHN0cnVjdHVyZSAqLworCWFkYXB0ZXItPm5ldF9zdGF0cy5tdWx0aWNhc3QgPSBhZGFwdGVy LT5zdGF0cy5tcHJjOworCWFkYXB0ZXItPm5ldF9zdGF0cy5jb2xsaXNpb25zID0gYWRhcHRlci0+ c3RhdHMuY29sYzsKKworCS8qIFJ4IEVycm9ycyAqLworCisJLyogUkxFQyBvbiBzb21lIG5ld2Vy IGhhcmR3YXJlIGNhbiBiZSBpbmNvcnJlY3Qgc28gYnVpbGQKKwkqIG91ciBvd24gdmVyc2lvbiBi YXNlZCBvbiBSVUMgYW5kIFJPQyAqLworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9lcnJvcnMgPSBh ZGFwdGVyLT5zdGF0cy5yeGVycmMgKworCQlhZGFwdGVyLT5zdGF0cy5jcmNlcnJzICsgYWRhcHRl ci0+c3RhdHMuYWxnbmVycmMgKworCQlhZGFwdGVyLT5zdGF0cy5ydWMgKyBhZGFwdGVyLT5zdGF0 cy5yb2MgKworCQlhZGFwdGVyLT5zdGF0cy5jZXh0ZXJyOworCWFkYXB0ZXItPm5ldF9zdGF0cy5y eF9sZW5ndGhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMucnVjICsKKwkJCQkJICAgICAgYWRhcHRl ci0+c3RhdHMucm9jOworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9jcmNfZXJyb3JzID0gYWRhcHRl ci0+c3RhdHMuY3JjZXJyczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMucnhfZnJhbWVfZXJyb3JzID0g YWRhcHRlci0+c3RhdHMuYWxnbmVycmM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X21pc3NlZF9l cnJvcnMgPSBhZGFwdGVyLT5zdGF0cy5tcGM7CisKKwkvKiBUeCBFcnJvcnMgKi8KKwlhZGFwdGVy LT5uZXRfc3RhdHMudHhfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuZWNvbCArCisJCQkJICAgICAg IGFkYXB0ZXItPnN0YXRzLmxhdGVjb2w7CisJYWRhcHRlci0+bmV0X3N0YXRzLnR4X2Fib3J0ZWRf ZXJyb3JzID0gYWRhcHRlci0+c3RhdHMuZWNvbDsKKwlhZGFwdGVyLT5uZXRfc3RhdHMudHhfd2lu ZG93X2Vycm9ycyA9IGFkYXB0ZXItPnN0YXRzLmxhdGVjb2w7CisJYWRhcHRlci0+bmV0X3N0YXRz LnR4X2NhcnJpZXJfZXJyb3JzID0gYWRhcHRlci0+c3RhdHMudG5jcnM7CisKKwkvKiBUeCBEcm9w cGVkIG5lZWRzIHRvIGJlIG1haW50YWluZWQgZWxzZXdoZXJlICovCisKKwkvKiBQaHkgU3RhdHMg Ki8KKwlpZiAoaHctPnBoeS5tZWRpYV90eXBlID09IGUxMDAwX21lZGlhX3R5cGVfY29wcGVyKSB7 CisJCWlmICgoYWRhcHRlci0+bGlua19zcGVlZCA9PSBTUEVFRF8xMDAwKSAmJgorCQkgICAoIWh3 LT5waHkub3BzLnJlYWRfcGh5X3JlZyhodywgUEhZXzEwMDBUX1NUQVRVUywKKwkJCQkJICAgICAg JnBoeV90bXApKSkgeworCQkJcGh5X3RtcCAmPSBQSFlfSURMRV9FUlJPUl9DT1VOVF9NQVNLOwor CQkJYWRhcHRlci0+cGh5X3N0YXRzLmlkbGVfZXJyb3JzICs9IHBoeV90bXA7CisJCX0KKwl9CisK KwkvKiBNYW5hZ2VtZW50IFN0YXRzICovCisJYWRhcHRlci0+c3RhdHMubWdwdGMgKz0gcmQzMihF MTAwMF9NR1RQVEMpOworCWFkYXB0ZXItPnN0YXRzLm1ncHJjICs9IHJkMzIoRTEwMDBfTUdUUFJD KTsKKwlhZGFwdGVyLT5zdGF0cy5tZ3BkYyArPSByZDMyKEUxMDAwX01HVFBEQyk7Cit9CisKKwor c3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X290aGVyKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0 cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRh OworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJ c3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1MzIgZWljcjsKKwkvKiBkaXNh YmxlIGludGVycnVwdHMgZnJvbSB0aGUgIm90aGVyIiBiaXQsIGF2b2lkIHJlLWVudHJ5ICovCisJ d3IzMihFMTAwMF9FSU1DLCBFMTAwMF9FSU1TX09USEVSKTsKKworCWVpY3IgPSByZDMyKEUxMDAw X0VJQ1IpOworCisJaWYgKGVpY3IgJiBFMTAwMF9FSU1TX09USEVSKSB7CisJCXUzMiBpY3IgPSBy ZDMyKEUxMDAwX0lDUik7CisJCS8qIHJlYWRpbmcgSUNSIGNhdXNlcyBiaXQgMzEgb2YgRUlDUiB0 byBiZSBjbGVhcmVkICovCisJCWlmICghKGljciAmIEUxMDAwX0lDUl9MU0MpKQorCQkJZ290byBu b19saW5rX2ludGVycnVwdDsKKwkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOworCQkvKiBn dWFyZCBhZ2FpbnN0IGludGVycnVwdCB3aGVuIHdlJ3JlIGdvaW5nIGRvd24gKi8KKwkJaWYgKCF0 ZXN0X2JpdChfX0lHQl9ET1dOLCAmYWRhcHRlci0+c3RhdGUpKQorCQkJbW9kX3RpbWVyKCZhZGFw dGVyLT53YXRjaGRvZ190aW1lciwgamlmZmllcyArIDEpOworCX0KKworbm9fbGlua19pbnRlcnJ1 cHQ6CisJd3IzMihFMTAwMF9JTVMsIEUxMDAwX0lNU19MU0MpOworCXdyMzIoRTEwMDBfRUlNUywg RTEwMDBfRUlNU19PVEhFUik7CisKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyBp cnFyZXR1cm5fdCBpZ2JfbXNpeF90eChpbnQgaXJxLCB2b2lkICpkYXRhLCBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKK3sKKwlzdHJ1Y3QgaWdiX3JpbmcgKnR4X3JpbmcgPSBkYXRhOworCXN0cnVjdCBp Z2JfYWRhcHRlciAqYWRhcHRlciA9IHR4X3JpbmctPmFkYXB0ZXI7CisJc3RydWN0IGUxMDAwX2h3 ICpodyA9ICZhZGFwdGVyLT5odzsKKworCXR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwl0eF9y aW5nLT50b3RhbF9wYWNrZXRzID0gMDsKKwlpZiAoIWlnYl9jbGVhbl90eF9pcnEodHhfcmluZykp CisJCS8qIFJpbmcgd2FzIG5vdCBjb21wbGV0ZWx5IGNsZWFuZWQsIHNvIGZpcmUgYW5vdGhlciBp bnRlcnJ1cHQgKi8KKwkJd3IzMihFMTAwMF9FSUNTLCB0eF9yaW5nLT5laW1zX3ZhbHVlKTsKKwll bHNlCisJCXdyMzIoRTEwMDBfRUlNUywgdHhfcmluZy0+ZWltc192YWx1ZSk7CisKKwlyZXR1cm4g SVJRX0hBTkRMRUQ7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl93cml0ZV9pdHIoc3RydWN0IGlnYl9y aW5nICpyaW5nKQoreworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmcmluZy0+YWRhcHRlci0+aHc7 CisJaWYgKChyaW5nLT5hZGFwdGVyLT5pdHJfc2V0dGluZyAmIDMpICYmIHJpbmctPnNldF9pdHIp IHsKKwkJc3dpdGNoIChody0+bWFjLnR5cGUpIHsKKwkJY2FzZSBlMTAwMF84MjU3NjoKKwkJCXdy MzIocmluZy0+aXRyX3JlZ2lzdGVyLAorCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCSAgICAg MHg4MDAwMDAwMCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCXdyMzIocmluZy0+aXRyX3Jl Z2lzdGVyLAorCQkJICAgICByaW5nLT5pdHJfdmFsIHwKKwkJCSAgICAgKHJpbmctPml0cl92YWwg PDwgMTYpKTsKKwkJCWJyZWFrOworCQl9CisJCXJpbmctPnNldF9pdHIgPSAwOworCX0KK30KKwor c3RhdGljIGlycXJldHVybl90IGlnYl9tc2l4X3J4KGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVj dCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IGRhdGE7CisK KwlpZ2Jfd3JpdGVfaXRyKHJ4X3JpbmcpOworCisJaWYgKG5ldGlmX3J4X3NjaGVkdWxlX3ByZXAo cnhfcmluZy0+bmV0ZGV2KSkgeworCQlyeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJCXJ4X3Jp bmctPnRvdGFsX3BhY2tldHMgPSAwOworCQlfX25ldGlmX3J4X3NjaGVkdWxlKHJ4X3JpbmctPm5l dGRldik7CisJfQorCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIGlnYl9pbnRy X21zaSAtIEludGVycnVwdCBIYW5kbGVyCisgKiBAaXJxOiBpbnRlcnJ1cHQgbnVtYmVyCisgKiBA ZGF0YTogcG9pbnRlciB0byBhIG5ldHdvcmsgaW50ZXJmYWNlIGRldmljZSBzdHJ1Y3R1cmUKKyAq Ki8KK3N0YXRpYyBpcnFyZXR1cm5fdCBpZ2JfaW50cl9tc2koaW50IGlycSwgdm9pZCAqZGF0YSwg c3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGRh dGE7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsK KwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCS8qIHJlYWQgSUNSIGRpc2Fi bGVzIGludGVycnVwdHMgdXNpbmcgSUFNICovCisJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsK KworCWlnYl93cml0ZV9pdHIoYWRhcHRlci0+cnhfcmluZyk7CisKKwkvKiByZWFkIElDUiBkaXNh YmxlcyBpbnRlcnJ1cHRzIHVzaW5nIElBTSAqLworCWlmIChpY3IgJiAoRTEwMDBfSUNSX1JYU0VR IHwgRTEwMDBfSUNSX0xTQykpIHsKKwkJaHctPm1hYy5nZXRfbGlua19zdGF0dXMgPSAxOworCQlp ZiAoIXRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCQltb2RfdGltZXIo JmFkYXB0ZXItPndhdGNoZG9nX3RpbWVyLCBqaWZmaWVzICsgMSk7CisJfQorCisJaWYgKG5ldGlm X3J4X3NjaGVkdWxlX3ByZXAobmV0ZGV2KSkgeworCQlhZGFwdGVyLT50eF9yaW5nLT50b3RhbF9i eXRlcyA9IDA7CisJCWFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX3BhY2tldHMgPSAwOworCQlhZGFw dGVyLT5yeF9yaW5nLT50b3RhbF9ieXRlcyA9IDA7CisJCWFkYXB0ZXItPnJ4X3JpbmctPnRvdGFs X3BhY2tldHMgPSAwOworCQlfX25ldGlmX3J4X3NjaGVkdWxlKG5ldGRldik7CisJfQorCisJcmV0 dXJuIElSUV9IQU5ETEVEOworfQorCisvKioKKyAqIGlnYl9pbnRyIC0gSW50ZXJydXB0IEhhbmRs ZXIKKyAqIEBpcnE6IGludGVycnVwdCBudW1iZXIKKyAqIEBkYXRhOiBwb2ludGVyIHRvIGEgbmV0 d29yayBpbnRlcmZhY2UgZGV2aWNlIHN0cnVjdHVyZQorICoqLworc3RhdGljIGlycXJldHVybl90 IGlnYl9pbnRyKGludCBpcnEsIHZvaWQgKmRhdGEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQorewor CXN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYgPSBkYXRhOworCXN0cnVjdCBpZ2JfYWRhcHRlciAq YWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZh ZGFwdGVyLT5odzsKKwkvKiBJbnRlcnJ1cHQgQXV0by1NYXNrLi4udXBvbiByZWFkaW5nIElDUiwg aW50ZXJydXB0cyBhcmUgbWFza2VkLiAgTm8KKwkgKiBuZWVkIGZvciB0aGUgSU1DIHdyaXRlICov CisJdTMyIGljciA9IHJkMzIoRTEwMDBfSUNSKTsKKwl1MzIgZWljciA9IDA7CisJaWYgKCFpY3Ip CisJCXJldHVybiBJUlFfTk9ORTsgIC8qIE5vdCBvdXIgaW50ZXJydXB0ICovCisKKwlpZ2Jfd3Jp dGVfaXRyKGFkYXB0ZXItPnJ4X3JpbmcpOworCisJLyogSU1TIHdpbGwgbm90IGF1dG8tbWFzayBp ZiBJTlRfQVNTRVJURUQgaXMgbm90IHNldCwgYW5kIGlmIGl0IGlzCisJICogbm90IHNldCwgdGhl biB0aGUgYWRhcHRlciBkaWRuJ3Qgc2VuZCBhbiBpbnRlcnJ1cHQgKi8KKwlpZiAoIShpY3IgJiBF MTAwMF9JQ1JfSU5UX0FTU0VSVEVEKSkKKwkJcmV0dXJuIElSUV9OT05FOworCisJZWljciA9IHJk MzIoRTEwMDBfRUlDUik7CisKKwlpZiAoaWNyICYgKEUxMDAwX0lDUl9SWFNFUSB8IEUxMDAwX0lD Ul9MU0MpKSB7CisJCWh3LT5tYWMuZ2V0X2xpbmtfc3RhdHVzID0gMTsKKwkJLyogZ3VhcmQgYWdh aW5zdCBpbnRlcnJ1cHQgd2hlbiB3ZSdyZSBnb2luZyBkb3duICovCisJCWlmICghdGVzdF9iaXQo X19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJCW1vZF90aW1lcigmYWRhcHRlci0+d2F0 Y2hkb2dfdGltZXIsIGppZmZpZXMgKyAxKTsKKwl9CisKKwlpZiAobmV0aWZfcnhfc2NoZWR1bGVf cHJlcChuZXRkZXYpKSB7CisJCWFkYXB0ZXItPnR4X3JpbmctPnRvdGFsX2J5dGVzID0gMDsKKwkJ YWRhcHRlci0+cnhfcmluZy0+dG90YWxfYnl0ZXMgPSAwOworCQlhZGFwdGVyLT50eF9yaW5nLT50 b3RhbF9wYWNrZXRzID0gMDsKKwkJYWRhcHRlci0+cnhfcmluZy0+dG90YWxfcGFja2V0cyA9IDA7 CisJCV9fbmV0aWZfcnhfc2NoZWR1bGUobmV0ZGV2KTsKKwl9CisKKwlyZXR1cm4gSVJRX0hBTkRM RUQ7Cit9CisKKy8qKgorICogaWdiX2NsZWFuIC0gTkFQSSBSeCBwb2xsaW5nIGNhbGxiYWNrCisg KiBAYWRhcHRlcjogYm9hcmQgcHJpdmF0ZSBzdHJ1Y3R1cmUKKyAqKi8KK3N0YXRpYyBpbnQgaWdi X2NsZWFuKHN0cnVjdCBuZXRfZGV2aWNlICpwb2xsX2RldiwgaW50ICpidWRnZXQpCit7CisJc3Ry dWN0IGlnYl9hZGFwdGVyICphZGFwdGVyOworCWludCB3b3JrX3RvX2RvID0gbWluKCpidWRnZXQs IHBvbGxfZGV2LT5xdW90YSk7CisJaW50IHR4X2NsZWFuX2NvbXBsZXRlID0gMSwgd29ya19kb25l ID0gMDsKKwlpbnQgaTsKKworCS8qIE11c3QgTk9UIHVzZSBuZXRkZXZfcHJpdiBtYWNybyBoZXJl LiAqLworCWFkYXB0ZXIgPSBwb2xsX2Rldi0+cHJpdjsKKworCS8qIEtlZXAgbGluayBzdGF0ZSBp bmZvcm1hdGlvbiB3aXRoIG9yaWdpbmFsIG5ldGRldiAqLworCWlmICghbmV0aWZfY2Fycmllcl9v ayhwb2xsX2RldikpCisJCWdvdG8gcXVpdF9wb2xsaW5nOworCisJLyogaWdiX2NsZWFuIGlzIGNh bGxlZCBwZXItY3B1LiAgVGhpcyBsb2NrIHByb3RlY3RzIHR4X3JpbmdbaV0gZnJvbQorCSAqIGJl aW5nIGNsZWFuZWQgYnkgbXVsdGlwbGUgY3B1cyBzaW11bHRhbmVvdXNseS4gIEEgZmFpbHVyZSBv YnRhaW5pbmcKKwkgKiB0aGUgbG9jayBtZWFucyB0eF9yaW5nW2ldIGlzIGN1cnJlbnRseSBiZWlu ZyBjbGVhbmVkIGFueXdheS4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+bnVtX3R4X3F1 ZXVlczsgaSsrKSB7CisJCWlmIChzcGluX3RyeWxvY2soJmFkYXB0ZXItPnR4X3JpbmdbaV0udHhf Y2xlYW5fbG9jaykpIHsKKwkJCXR4X2NsZWFuX2NvbXBsZXRlICY9IGlnYl9jbGVhbl90eF9pcnEo JmFkYXB0ZXItPnR4X3JpbmdbaV0pOworCQkJc3Bpbl91bmxvY2soJmFkYXB0ZXItPnR4X3Jpbmdb aV0udHhfY2xlYW5fbG9jayk7CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRhcHRlci0+ bnVtX3J4X3F1ZXVlczsgaSsrKSB7CisJCWlnYl9jbGVhbl9yeF9pcnFfYWR2KCZhZGFwdGVyLT5y eF9yaW5nW2ldLCAmd29ya19kb25lLAorCQkgICAgICAgICAgICAgICAgICAgICB3b3JrX3RvX2Rv IC8gYWRhcHRlci0+bnVtX3J4X3F1ZXVlcyk7CisJCSpidWRnZXQgLT0gd29ya19kb25lOworCQlw b2xsX2Rldi0+cXVvdGEgLT0gd29ya19kb25lOworCX0KKworCS8qIElmIG5vIFR4IGFuZCBub3Qg ZW5vdWdoIFJ4IHdvcmsgZG9uZSwgZXhpdCB0aGUgcG9sbGluZyBtb2RlICovCisJaWYgKCh0eF9j bGVhbl9jb21wbGV0ZSAmJiAod29ya19kb25lID09IDApKSB8fAorCSAgICAhbmV0aWZfcnVubmlu Zyhwb2xsX2RldikpIHsKK3F1aXRfcG9sbGluZzoKKwkJaWYgKGFkYXB0ZXItPml0cl9zZXR0aW5n ICYgMykKKwkJCWlnYl9zZXRfaXRyKGFkYXB0ZXIpOworCQluZXRpZl9yeF9jb21wbGV0ZShwb2xs X2Rldik7CisJCWlmICghdGVzdF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJ CWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsK K30KKworc3RhdGljIGludCBpZ2JfY2xlYW5fcnhfcmluZ19tc2l4KHN0cnVjdCBuZXRfZGV2aWNl ICpuZXRkZXYsIGludCAqYnVkZ2V0KQoreworCXN0cnVjdCBpZ2JfcmluZyAqcnhfcmluZyA9IG5l dGRldi0+cHJpdjsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFw dGVyOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9k ZXZpY2UgKnJlYWxfbmV0ZGV2ID0gYWRhcHRlci0+bmV0ZGV2OworCWludCB3b3JrX3RvX2RvID0g bWluKCpidWRnZXQsIG5ldGRldi0+cXVvdGEpOworCWludCB3b3JrX2RvbmUgPSAwOworCisJLyog S2VlcCBsaW5rIHN0YXRlIGluZm9ybWF0aW9uIHdpdGggb3JpZ2luYWwgbmV0ZGV2ICovCisJaWYg KCFuZXRpZl9jYXJyaWVyX29rKHJlYWxfbmV0ZGV2KSkKKwkJZ290byBxdWl0X3BvbGxpbmc7CisK KwlpZ2JfY2xlYW5fcnhfaXJxX2FkdihyeF9yaW5nLCAmd29ya19kb25lLCB3b3JrX3RvX2RvKTsK KworCSpidWRnZXQgLT0gd29ya19kb25lOworCW5ldGRldi0+cXVvdGEgLT0gd29ya19kb25lOwor CisJLyogSWYgbm90IGVub3VnaCBSeCB3b3JrIGRvbmUsIGV4aXQgdGhlIHBvbGxpbmcgbW9kZSAq LworCWlmICgod29ya19kb25lID09IDApIHx8ICFuZXRpZl9ydW5uaW5nKHJlYWxfbmV0ZGV2KSkg eworcXVpdF9wb2xsaW5nOgorCQluZXRpZl9yeF9jb21wbGV0ZShuZXRkZXYpOworCisJCXdyMzIo RTEwMDBfRUlNUywgcnhfcmluZy0+ZWltc192YWx1ZSk7CisJCWlmIChhZGFwdGVyLT5pdHJfc2V0 dGluZyAmIDMpIHsKKwkJCWlmIChhZGFwdGVyLT5udW1fcnhfcXVldWVzID09IDEpCisJCQkJaWdi X3NldF9pdHIoYWRhcHRlcik7CisJCQllbHNlCisJCQkJaWdiX3VwZGF0ZV9yaW5nX2l0cihyeF9y aW5nKTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlyZXR1cm4gMTsKK30KKworc3RhdGljIGlu bGluZSB1MzIgZ2V0X2hlYWQoc3RydWN0IGlnYl9yaW5nICp0eF9yaW5nKQoreworCXZvaWQgKmVu ZCA9IChzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqKXR4X3JpbmctPmRlc2MgKyB0eF9yaW5nLT5jb3Vu dDsKKwlyZXR1cm4gbGUzMl90b19jcHUoKih2b2xhdGlsZSBfX2xlMzIgKillbmQpOworfQorCisv KioKKyAqIGlnYl9jbGVhbl90eF9pcnEgLSBSZWNsYWltIHJlc291cmNlcyBhZnRlciB0cmFuc21p dCBjb21wbGV0ZXMKKyAqIEBhZGFwdGVyOiBib2FyZCBwcml2YXRlIHN0cnVjdHVyZQorICogcmV0 dXJucyB0cnVlIGlmIHJpbmcgaXMgY29tcGxldGVseSBjbGVhbmVkCisgKiovCitzdGF0aWMgYm9v bCBpZ2JfY2xlYW5fdHhfaXJxKHN0cnVjdCBpZ2JfcmluZyAqdHhfcmluZykKK3sKKwlzdHJ1Y3Qg aWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSB0eF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBlMTAwMF9o dyAqaHcgPSAmYWRhcHRlci0+aHc7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IGFkYXB0 ZXItPm5ldGRldjsKKwlzdHJ1Y3QgZTEwMDBfdHhfZGVzYyAqdHhfZGVzYzsKKwlzdHJ1Y3QgaWdi X2J1ZmZlciAqYnVmZmVyX2luZm87CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBp bnQgaTsKKwl1MzIgaGVhZCwgb2xkaGVhZDsKKwl1bnNpZ25lZCBpbnQgY291bnQgPSAwOworCWJv b2wgY2xlYW5lZCA9IGZhbHNlOworCWJvb2wgcmV0dmFsID0gdHJ1ZTsKKwl1bnNpZ25lZCBpbnQg dG90YWxfYnl0ZXMgPSAwLCB0b3RhbF9wYWNrZXRzID0gMDsKKworCXJtYigpOworCWhlYWQgPSBn ZXRfaGVhZCh0eF9yaW5nKTsKKwlpID0gdHhfcmluZy0+bmV4dF90b19jbGVhbjsKKwl3aGlsZSAo MSkgeworCQl3aGlsZSAoaSAhPSBoZWFkKSB7CisJCQljbGVhbmVkID0gdHJ1ZTsKKwkJCXR4X2Rl c2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5nLCBpKTsKKwkJCWJ1ZmZlcl9pbmZvID0gJnR4X3Jp bmctPmJ1ZmZlcl9pbmZvW2ldOworCQkJc2tiID0gYnVmZmVyX2luZm8tPnNrYjsKKworCQkJaWYg KHNrYikgeworCQkJCXVuc2lnbmVkIGludCBzZWdzLCBieXRlY291bnQ7CisJCQkJLyogZ3NvX3Nl Z3MgaXMgY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIHRjcCAqLworCQkJCXNlZ3MgPSBza2Jfc2hp bmZvKHNrYiktPmdzb19zZWdzID86IDE7CisJCQkJLyogbXVsdGlwbHkgZGF0YSBjaHVua3MgYnkg c2l6ZSBvZiBoZWFkZXJzICovCisJCQkJYnl0ZWNvdW50ID0gKChzZWdzIC0gMSkgKiBza2JfaGVh ZGxlbihza2IpKSArCisJCQkJCSAgICBza2ItPmxlbjsKKwkJCQl0b3RhbF9wYWNrZXRzICs9IHNl Z3M7CisJCQkJdG90YWxfYnl0ZXMgKz0gYnl0ZWNvdW50OworCQkJfQorCisJCQlpZ2JfdW5tYXBf YW5kX2ZyZWVfdHhfcmVzb3VyY2UoYWRhcHRlciwgYnVmZmVyX2luZm8pOworCQkJdHhfZGVzYy0+ dXBwZXIuZGF0YSA9IDA7CisKKwkJCWkrKzsKKwkJCWlmIChpID09IHR4X3JpbmctPmNvdW50KQor CQkJCWkgPSAwOworCisJCQljb3VudCsrOworCQkJaWYgKGNvdW50ID09IElHQl9NQVhfVFhfQ0xF QU4pIHsKKwkJCQlyZXR2YWwgPSBmYWxzZTsKKwkJCQlnb3RvIGRvbmVfY2xlYW5pbmc7CisJCQl9 CisJCX0KKwkJb2xkaGVhZCA9IGhlYWQ7CisJCXJtYigpOworCQloZWFkID0gZ2V0X2hlYWQodHhf cmluZyk7CisJCWlmIChoZWFkID09IG9sZGhlYWQpCisJCQlnb3RvIGRvbmVfY2xlYW5pbmc7CisJ fSAgLyogd2hpbGUgKDEpICovCisKK2RvbmVfY2xlYW5pbmc6CisJdHhfcmluZy0+bmV4dF90b19j bGVhbiA9IGk7CisKKwlpZiAodW5saWtlbHkoY2xlYW5lZCAmJgorCQkgICAgIG5ldGlmX2NhcnJp ZXJfb2sobmV0ZGV2KSAmJgorCQkgICAgIElHQl9ERVNDX1VOVVNFRCh0eF9yaW5nKSA+PSBJR0Jf VFhfUVVFVUVfV0FLRSkpIHsKKwkJLyogTWFrZSBzdXJlIHRoYXQgYW55Ym9keSBzdG9wcGluZyB0 aGUgcXVldWUgYWZ0ZXIgdGhpcworCQkgKiBzZWVzIHRoZSBuZXcgbmV4dF90b19jbGVhbi4KKwkJ ICovCisJCXNtcF9tYigpOworCQlpZiAobmV0aWZfcXVldWVfc3RvcHBlZChuZXRkZXYpICYmCisJ CSAgICAhKHRlc3RfYml0KF9fSUdCX0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpKSB7CisJCQluZXRp Zl93YWtlX3F1ZXVlKG5ldGRldik7CisJCQkrK2FkYXB0ZXItPnJlc3RhcnRfcXVldWU7CisJCX0K Kwl9CisKKwlpZiAodHhfcmluZy0+ZGV0ZWN0X3R4X2h1bmcpIHsKKwkJLyogRGV0ZWN0IGEgdHJh bnNtaXQgaGFuZyBpbiBoYXJkd2FyZSwgdGhpcyBzZXJpYWxpemVzIHRoZQorCQkgKiBjaGVjayB3 aXRoIHRoZSBjbGVhcmluZyBvZiB0aW1lX3N0YW1wIGFuZCBtb3ZlbWVudCBvZiBpICovCisJCXR4 X3JpbmctPmRldGVjdF90eF9odW5nID0gZmFsc2U7CisJCWlmICh0eF9yaW5nLT5idWZmZXJfaW5m b1tpXS50aW1lX3N0YW1wICYmCisJCSAgICB0aW1lX2FmdGVyKGppZmZpZXMsIHR4X3JpbmctPmJ1 ZmZlcl9pbmZvW2ldLnRpbWVfc3RhbXAgKworCQkJICAgICAgIChhZGFwdGVyLT50eF90aW1lb3V0 X2ZhY3RvciAqIEhaKSkKKwkJICAgICYmICEocmQzMihFMTAwMF9TVEFUVVMpICYKKwkJCSBFMTAw MF9TVEFUVVNfVFhPRkYpKSB7CisKKwkJCXR4X2Rlc2MgPSBFMTAwMF9UWF9ERVNDKCp0eF9yaW5n LCBpKTsKKwkJCS8qIGRldGVjdGVkIFR4IHVuaXQgaGFuZyAqLworCQkJZGV2X2VycigmYWRhcHRl ci0+cGRldi0+ZGV2LAorCQkJCSJEZXRlY3RlZCBUeCBVbml0IEhhbmdcbiIKKwkJCQkiICBUeCBR dWV1ZSAgICAgICAgICAgICA8JWx1PlxuIgorCQkJCSIgIFRESCAgICAgICAgICAgICAgICAgIDwl eD5cbiIKKwkJCQkiICBURFQgICAgICAgICAgICAgICAgICA8JXg+XG4iCisJCQkJIiAgbmV4dF90 b191c2UgICAgICAgICAgPCV4PlxuIgorCQkJCSIgIG5leHRfdG9fY2xlYW4gICAgICAgIDwleD5c biIKKwkJCQkiICBoZWFkIChXQikgICAgICAgICAgICA8JXg+XG4iCisJCQkJImJ1ZmZlcl9pbmZv W25leHRfdG9fY2xlYW5dXG4iCisJCQkJIiAgdGltZV9zdGFtcCAgICAgICAgICAgPCVseD5cbiIK KwkJCQkiICBqaWZmaWVzICAgICAgICAgICAgICA8JWx4PlxuIgorCQkJCSIgIGRlc2Muc3RhdHVz ICAgICAgICAgIDwleD5cbiIsCisJCQkJKHVuc2lnbmVkIGxvbmcpKCh0eF9yaW5nIC0gYWRhcHRl ci0+dHhfcmluZykgLworCQkJCXNpemVvZihzdHJ1Y3QgaWdiX3JpbmcpKSwKKwkJCQlyZWFkbChh ZGFwdGVyLT5ody5od19hZGRyICsgdHhfcmluZy0+aGVhZCksCisJCQkJcmVhZGwoYWRhcHRlci0+ aHcuaHdfYWRkciArIHR4X3JpbmctPnRhaWwpLAorCQkJCXR4X3JpbmctPm5leHRfdG9fdXNlLAor CQkJCXR4X3JpbmctPm5leHRfdG9fY2xlYW4sCisJCQkJaGVhZCwKKwkJCQl0eF9yaW5nLT5idWZm ZXJfaW5mb1tpXS50aW1lX3N0YW1wLAorCQkJCWppZmZpZXMsCisJCQkJdHhfZGVzYy0+dXBwZXIu ZmllbGRzLnN0YXR1cyk7CisJCQluZXRpZl9zdG9wX3F1ZXVlKG5ldGRldik7CisJCX0KKwl9CisJ dHhfcmluZy0+dG90YWxfYnl0ZXMgKz0gdG90YWxfYnl0ZXM7CisJdHhfcmluZy0+dG90YWxfcGFj a2V0cyArPSB0b3RhbF9wYWNrZXRzOworCWFkYXB0ZXItPm5ldF9zdGF0cy50eF9ieXRlcyArPSB0 b3RhbF9ieXRlczsKKwlhZGFwdGVyLT5uZXRfc3RhdHMudHhfcGFja2V0cyArPSB0b3RhbF9wYWNr ZXRzOworCXJldHVybiByZXR2YWw7Cit9CisKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworIC8qKgor ICogaWdiX2dldF9za2JfaGRyIC0gaGVscGVyIGZ1bmN0aW9uIGZvciBMUk8gaGVhZGVyIHByb2Nl c3NpbmcKKyAqIEBza2I6IHBvaW50ZXIgdG8gc2tfYnVmZiB0byBiZSBhZGRlZCB0byBMUk8gcGFj a2V0CisgKiBAaXBoZHI6IHBvaW50ZXIgdG8gaXAgaGVhZGVyIHN0cnVjdHVyZQorICogQHRjcGg6 IHBvaW50ZXIgdG8gdGNwIGhlYWRlciBzdHJ1Y3R1cmUKKyAqIEBoZHJfZmxhZ3M6IHBvaW50ZXIg dG8gaGVhZGVyIGZsYWdzCisgKiBAcHJpdjogcG9pbnRlciB0byB0aGUgcmVjZWl2ZSBkZXNjcmlw dG9yIGZvciB0aGUgY3VycmVudCBza19idWZmCisgKiovCitzdGF0aWMgaW50IGlnYl9nZXRfc2ti X2hkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB2b2lkICoqaXBoZHIsIHZvaWQgKip0Y3BoLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgdTY0ICpoZHJfZmxhZ3MsIHZvaWQgKnByaXYpCit7CisJ dW5pb24gZTEwMDBfYWR2X3J4X2Rlc2MgKnJ4X2Rlc2MgPSBwcml2OworCXUxNiBwa3RfdHlwZSA9 IHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLnBrdF9pbmZvICYKKwkgICAgICAgICAgICAgICAo RTEwMDBfUlhEQURWX1BLVFRZUEVfSVBWNCB8IEUxMDAwX1JYREFEVl9QS1RUWVBFX1RDUCk7CisK KwkvKiBWZXJpZnkgdGhhdCB0aGlzIGlzIGEgdmFsaWQgSVB2NCBUQ1AgcGFja2V0ICovCisJaWYg KHBrdF90eXBlICE9IChFMTAwMF9SWERBRFZfUEtUVFlQRV9JUFY0IHwKKwkgICAgICAgICAgICAg ICAgICBFMTAwMF9SWERBRFZfUEtUVFlQRV9UQ1ApKQorCQlyZXR1cm4gLTE7CisKKwkvKiBTZXQg bmV0d29yayBoZWFkZXJzICovCisJc2tiX3Jlc2V0X25ldHdvcmtfaGVhZGVyKHNrYik7CisJc2ti X3NldF90cmFuc3BvcnRfaGVhZGVyKHNrYiwgaXBfaGRybGVuKHNrYikpOworCSppcGhkciA9IGlw X2hkcihza2IpOworCSp0Y3BoID0gdGNwX2hkcihza2IpOworCSpoZHJfZmxhZ3MgPSBMUk9fSVBW NCB8IExST19UQ1A7CisKKwlyZXR1cm4gMDsKKworfQorI2VuZGlmIC8qIENPTkZJR19JR0JfTFJP ICovCisKKy8qKgorICogaWdiX3JlY2VpdmVfc2tiIC0gaGVscGVyIGZ1bmN0aW9uIHRvIGhhbmRs ZSByeCBpbmRpY2F0aW9ucworICogQHJpbmc6IHBvaW50ZXIgdG8gcmVjZWl2ZSByaW5nIHJlY2V2 aW5nIHRoaXMgcGFja2V0IAorICogQHN0YXR1czogZGVzY3JpcHRvciBzdGF0dXMgZmllbGQgYXMg d3JpdHRlbiBieSBoYXJkd2FyZQorICogQHZsYW46IGRlc2NyaXB0b3IgdmxhbiBmaWVsZCBhcyB3 cml0dGVuIGJ5IGhhcmR3YXJlIChubyBsZS9iZSBjb252ZXJzaW9uKQorICogQHNrYjogcG9pbnRl ciB0byBza19idWZmIHRvIGJlIGluZGljYXRlZCB0byBzdGFjaworICoqLworc3RhdGljIHZvaWQg aWdiX3JlY2VpdmVfc2tiKHN0cnVjdCBpZ2JfcmluZyAqcmluZywgdTggc3RhdHVzLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICogcnhfZGVzYywK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQoreworCXN0 cnVjdCBpZ2JfYWRhcHRlciAqIGFkYXB0ZXIgPSByaW5nLT5hZGFwdGVyOworCWJvb2wgdmxhbl9l eHRyYWN0ZWQgPSAoYWRhcHRlci0+dmxncnAgJiYgKHN0YXR1cyAmIEUxMDAwX1JYRF9TVEFUX1ZQ KSk7CisKKyNpZmRlZiBDT05GSUdfSUdCX0xSTworCWlmIChhZGFwdGVyLT5uZXRkZXYtPmZlYXR1 cmVzICYgTkVUSUZfRl9MUk8gJiYKKwkgICAgc2tiLT5pcF9zdW1tZWQgPT0gQ0hFQ0tTVU1fVU5O RUNFU1NBUlkpIHsKKwkJaWYgKHZsYW5fZXh0cmFjdGVkKQorCQkJbHJvX3ZsYW5faHdhY2NlbF9y ZWNlaXZlX3NrYigmcmluZy0+bHJvX21nciwgc2tiLAorCQkJICAgICAgICAgICAgICAgICAgIGFk YXB0ZXItPnZsZ3JwLAorCQkJICAgICAgICAgICAgICAgICAgIGxlMTZfdG9fY3B1KHJ4X2Rlc2Mt PndiLnVwcGVyLnZsYW4pLAorCQkJICAgICAgICAgICAgICAgICAgIHJ4X2Rlc2MpOworCQllbHNl CisJCQlscm9fcmVjZWl2ZV9za2IoJnJpbmctPmxyb19tZ3Isc2tiLCByeF9kZXNjKTsKKwkJcmlu Zy0+bHJvX3VzZWQgPSAxOworCX0gZWxzZSB7CisjZW5kaWYKKwkJaWYgKHZsYW5fZXh0cmFjdGVk KQorCQkJdmxhbl9od2FjY2VsX3JlY2VpdmVfc2tiKHNrYiwgYWRhcHRlci0+dmxncnAsCisJCQkg ICAgICAgICAgICAgICAgICBsZTE2X3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci52bGFuKSk7CisJ CWVsc2UKKworCQkJbmV0aWZfcmVjZWl2ZV9za2Ioc2tiKTsKKyNpZmRlZiBDT05GSUdfSUdCX0xS TworCX0KKyNlbmRpZgorfQorCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2JfcnhfY2hlY2tzdW1f YWR2KHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgICAgICAgdTMyIHN0YXR1c19l cnIsIHN0cnVjdCBza19idWZmICpza2IpCit7CisJc2tiLT5pcF9zdW1tZWQgPSBDSEVDS1NVTV9O T05FOworCisJLyogSWdub3JlIENoZWNrc3VtIGJpdCBpcyBzZXQgb3IgY2hlY2tzdW0gaXMgZGlz YWJsZWQgdGhyb3VnaCBldGh0b29sICovCisJaWYgKChzdGF0dXNfZXJyICYgRTEwMDBfUlhEX1NU QVRfSVhTTSkgfHwgIWFkYXB0ZXItPnJ4X2NzdW0pCisJCXJldHVybjsKKwkvKiBUQ1AvVURQIGNo ZWNrc3VtIGVycm9yIGJpdCBpcyBzZXQgKi8KKwlpZiAoc3RhdHVzX2VyciAmCisJICAgIChFMTAw MF9SWERFWFRfU1RBVEVSUl9UQ1BFIHwgRTEwMDBfUlhERVhUX1NUQVRFUlJfSVBFKSkgeworCQkv KiBsZXQgdGhlIHN0YWNrIHZlcmlmeSBjaGVja3N1bSBlcnJvcnMgKi8KKwkJYWRhcHRlci0+aHdf Y3N1bV9lcnIrKzsKKwkJcmV0dXJuOworCX0KKwkvKiBJdCBtdXN0IGJlIGEgVENQIG9yIFVEUCBw YWNrZXQgd2l0aCBhIHZhbGlkIGNoZWNrc3VtICovCisJaWYgKHN0YXR1c19lcnIgJiAoRTEwMDBf UlhEX1NUQVRfVENQQ1MgfCBFMTAwMF9SWERfU1RBVF9VRFBDUykpCisJCXNrYi0+aXBfc3VtbWVk ID0gQ0hFQ0tTVU1fVU5ORUNFU1NBUlk7CisKKwlhZGFwdGVyLT5od19jc3VtX2dvb2QrKzsKK30K Kworc3RhdGljIGJvb2wgaWdiX2NsZWFuX3J4X2lycV9hZHYoc3RydWN0IGlnYl9yaW5nICpyeF9y aW5nLAorCQkJCSBpbnQgKndvcmtfZG9uZSwgaW50IGJ1ZGdldCkKK3sKKwlzdHJ1Y3QgaWdiX2Fk YXB0ZXIgKmFkYXB0ZXIgPSByeF9yaW5nLT5hZGFwdGVyOworCXN0cnVjdCBuZXRfZGV2aWNlICpu ZXRkZXYgPSBhZGFwdGVyLT5uZXRkZXY7CisJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSBhZGFwdGVy LT5wZGV2OworCXVuaW9uIGUxMDAwX2Fkdl9yeF9kZXNjICpyeF9kZXNjICwgKm5leHRfcnhkOwor CXN0cnVjdCBpZ2JfYnVmZmVyICpidWZmZXJfaW5mbyAsICpuZXh0X2J1ZmZlcjsKKwlzdHJ1Y3Qg c2tfYnVmZiAqc2tiOworCXVuc2lnbmVkIGludCBpOworCXUzMiBsZW5ndGgsIGhsZW4sIHN0YXRl cnI7CisJYm9vbCBjbGVhbmVkID0gZmFsc2U7CisJaW50IGNsZWFuZWRfY291bnQgPSAwOworCXVu c2lnbmVkIGludCB0b3RhbF9ieXRlcyA9IDAsIHRvdGFsX3BhY2tldHMgPSAwOworCisJaSA9IHJ4 X3JpbmctPm5leHRfdG9fY2xlYW47CisJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0NfQURWKCpyeF9y aW5nLCBpKTsKKwlzdGF0ZXJyID0gbGUzMl90b19jcHUocnhfZGVzYy0+d2IudXBwZXIuc3RhdHVz X2Vycm9yKTsKKworCXdoaWxlIChzdGF0ZXJyICYgRTEwMDBfUlhEX1NUQVRfREQpIHsKKwkJaWYg KCp3b3JrX2RvbmUgPj0gYnVkZ2V0KQorCQkJYnJlYWs7CisJCSgqd29ya19kb25lKSsrOworCQli dWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsKKworCQkvKiBIVyB3aWxsIG5v dCBETUEgaW4gZGF0YSBsYXJnZXIgdGhhbiB0aGUgZ2l2ZW4gYnVmZmVyLCBldmVuCisJCSAqIGlm IGl0IHBhcnNlcyB0aGUgKE5GUywgb2YgY291cnNlKSBoZWFkZXIgdG8gYmUgbGFyZ2VyLiAgSW4K KwkJICogdGhhdCBjYXNlLCBpdCBmaWxscyB0aGUgaGVhZGVyIGJ1ZmZlciBhbmQgc3BpbGxzIHRo ZSByZXN0CisJCSAqIGludG8gdGhlIHBhZ2UuCisJCSAqLworCQlobGVuID0gKGxlMTZfdG9fY3B1 KHJ4X2Rlc2MtPndiLmxvd2VyLmxvX2R3b3JkLmhkcl9pbmZvKSAmCisJCSAgRTEwMDBfUlhEQURW X0hEUkJVRkxFTl9NQVNLKSA+PiBFMTAwMF9SWERBRFZfSERSQlVGTEVOX1NISUZUOworCQlpZiAo aGxlbiA+IGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQorCQkJaGxlbiA9IGFkYXB0ZXItPnJ4X3Bz X2hkcl9zaXplOworCisJCWxlbmd0aCA9IGxlMTZfdG9fY3B1KHJ4X2Rlc2MtPndiLnVwcGVyLmxl bmd0aCk7CisJCWNsZWFuZWQgPSB0cnVlOworCQljbGVhbmVkX2NvdW50Kys7CisKKwkJc2tiID0g YnVmZmVyX2luZm8tPnNrYjsKKwkJcHJlZmV0Y2goc2tiLT5kYXRhIC0gTkVUX0lQX0FMSUdOKTsK KwkJYnVmZmVyX2luZm8tPnNrYiA9IE5VTEw7CisJCWlmICghYWRhcHRlci0+cnhfcHNfaGRyX3Np emUpIHsKKwkJCXBjaV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkJ IGFkYXB0ZXItPnJ4X2J1ZmZlcl9sZW4gKworCQkJCQkgICBORVRfSVBfQUxJR04sCisJCQkJCSBQ Q0lfRE1BX0ZST01ERVZJQ0UpOworCQkJc2tiX3B1dChza2IsIGxlbmd0aCk7CisJCQlnb3RvIHNl bmRfdXA7CisJCX0KKworCQlpZiAoIXNrYl9zaGluZm8oc2tiKS0+bnJfZnJhZ3MpIHsKKwkJCXBj aV91bm1hcF9zaW5nbGUocGRldiwgYnVmZmVyX2luZm8tPmRtYSwKKwkJCQkJIGFkYXB0ZXItPnJ4 X3BzX2hkcl9zaXplICsKKwkJCQkJICAgTkVUX0lQX0FMSUdOLAorCQkJCQkgUENJX0RNQV9GUk9N REVWSUNFKTsKKwkJCXNrYl9wdXQoc2tiLCBobGVuKTsKKwkJfQorCisJCWlmIChsZW5ndGgpIHsK KwkJCXBjaV91bm1hcF9wYWdlKHBkZXYsIGJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSwKKwkJCQkgICAg ICAgUEFHRV9TSVpFIC8gMiwgUENJX0RNQV9GUk9NREVWSUNFKTsKKwkJCWJ1ZmZlcl9pbmZvLT5w YWdlX2RtYSA9IDA7CisKKwkJCXNrYl9maWxsX3BhZ2VfZGVzYyhza2IsIHNrYl9zaGluZm8oc2ti KS0+bnJfZnJhZ3MrKywKKwkJCQkJCWJ1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCQkJYnVmZmVyX2lu Zm8tPnBhZ2Vfb2Zmc2V0LAorCQkJCQkJbGVuZ3RoKTsKKworCQkJaWYgKChhZGFwdGVyLT5yeF9i dWZmZXJfbGVuID4gKFBBR0VfU0laRSAvIDIpKSB8fAorCQkJICAgIChwYWdlX2NvdW50KGJ1ZmZl cl9pbmZvLT5wYWdlKSAhPSAxKSkKKwkJCQlidWZmZXJfaW5mby0+cGFnZSA9IE5VTEw7CisJCQll bHNlCisJCQkJZ2V0X3BhZ2UoYnVmZmVyX2luZm8tPnBhZ2UpOworCisJCQlza2ItPmxlbiArPSBs ZW5ndGg7CisJCQlza2ItPmRhdGFfbGVuICs9IGxlbmd0aDsKKworCQkJc2tiLT50cnVlc2l6ZSAr PSBsZW5ndGg7CisJCX0KK3NlbmRfdXA6CisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291 bnQpCisJCQlpID0gMDsKKwkJbmV4dF9yeGQgPSBFMTAwMF9SWF9ERVNDX0FEVigqcnhfcmluZywg aSk7CisJCXByZWZldGNoKG5leHRfcnhkKTsKKwkJbmV4dF9idWZmZXIgPSAmcnhfcmluZy0+YnVm ZmVyX2luZm9baV07CisKKwkJaWYgKCEoc3RhdGVyciAmIEUxMDAwX1JYRF9TVEFUX0VPUCkpIHsK KwkJCWJ1ZmZlcl9pbmZvLT5za2IgPSB4Y2hnKCZuZXh0X2J1ZmZlci0+c2tiLCBza2IpOworCQkJ YnVmZmVyX2luZm8tPmRtYSA9IHhjaGcoJm5leHRfYnVmZmVyLT5kbWEsIDApOworCQkJZ290byBu ZXh0X2Rlc2M7CisJCX0KKworCQlpZiAoc3RhdGVyciAmIEUxMDAwX1JYREVYVF9FUlJfRlJBTUVf RVJSX01BU0spIHsKKwkJCWRldl9rZnJlZV9za2JfaXJxKHNrYik7CisJCQlnb3RvIG5leHRfZGVz YzsKKwkJfQorCisJCXRvdGFsX2J5dGVzICs9IHNrYi0+bGVuOworCQl0b3RhbF9wYWNrZXRzKys7 CisKKwkJaWdiX3J4X2NoZWNrc3VtX2FkdihhZGFwdGVyLCBzdGF0ZXJyLCBza2IpOworCisJCXNr Yi0+cHJvdG9jb2wgPSBldGhfdHlwZV90cmFucyhza2IsIG5ldGRldik7CisKKwkJaWdiX3JlY2Vp dmVfc2tiKHJ4X3JpbmcsIHN0YXRlcnIsIHJ4X2Rlc2MsIHNrYik7CisKKwkJbmV0ZGV2LT5sYXN0 X3J4ID0gamlmZmllczsKKworbmV4dF9kZXNjOgorCQlyeF9kZXNjLT53Yi51cHBlci5zdGF0dXNf ZXJyb3IgPSAwOworCisJCS8qIHJldHVybiBzb21lIGJ1ZmZlcnMgdG8gaGFyZHdhcmUsIG9uZSBh dCBhIHRpbWUgaXMgdG9vIHNsb3cgKi8KKwkJaWYgKGNsZWFuZWRfY291bnQgPj0gSUdCX1JYX0JV RkZFUl9XUklURSkgeworCQkJaWdiX2FsbG9jX3J4X2J1ZmZlcnNfYWR2KHJ4X3JpbmcsIGNsZWFu ZWRfY291bnQpOworCQkJY2xlYW5lZF9jb3VudCA9IDA7CisJCX0KKworCQkvKiB1c2UgcHJlZmV0 Y2hlZCB2YWx1ZXMgKi8KKwkJcnhfZGVzYyA9IG5leHRfcnhkOworCQlidWZmZXJfaW5mbyA9IG5l eHRfYnVmZmVyOworCisJCXN0YXRlcnIgPSBsZTMyX3RvX2NwdShyeF9kZXNjLT53Yi51cHBlci5z dGF0dXNfZXJyb3IpOworCX0KKworCXJ4X3JpbmctPm5leHRfdG9fY2xlYW4gPSBpOworCWNsZWFu ZWRfY291bnQgPSBJR0JfREVTQ19VTlVTRUQocnhfcmluZyk7CisKKyNpZmRlZiBDT05GSUdfSUdC X0xSTworCWlmIChyeF9yaW5nLT5scm9fdXNlZCkgeworCQlscm9fZmx1c2hfYWxsKCZyeF9yaW5n LT5scm9fbWdyKTsKKwkJcnhfcmluZy0+bHJvX3VzZWQgPSAwOworCX0KKyNlbmRpZgorCisJaWYg KGNsZWFuZWRfY291bnQpCisJCWlnYl9hbGxvY19yeF9idWZmZXJzX2FkdihyeF9yaW5nLCBjbGVh bmVkX2NvdW50KTsKKworCXJ4X3JpbmctPnRvdGFsX3BhY2tldHMgKz0gdG90YWxfcGFja2V0czsK KwlyeF9yaW5nLT50b3RhbF9ieXRlcyArPSB0b3RhbF9ieXRlczsKKwlyeF9yaW5nLT5yeF9zdGF0 cy5wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisJcnhfcmluZy0+cnhfc3RhdHMuYnl0ZXMgKz0g dG90YWxfYnl0ZXM7CisJYWRhcHRlci0+bmV0X3N0YXRzLnJ4X2J5dGVzICs9IHRvdGFsX2J5dGVz OworCWFkYXB0ZXItPm5ldF9zdGF0cy5yeF9wYWNrZXRzICs9IHRvdGFsX3BhY2tldHM7CisJcmV0 dXJuIGNsZWFuZWQ7Cit9CisKKworLyoqCisgKiBpZ2JfYWxsb2NfcnhfYnVmZmVyc19hZHYgLSBS ZXBsYWNlIHVzZWQgcmVjZWl2ZSBidWZmZXJzOyBwYWNrZXQgc3BsaXQKKyAqIEBhZGFwdGVyOiBh ZGRyZXNzIG9mIGJvYXJkIHByaXZhdGUgc3RydWN0dXJlCisgKiovCitzdGF0aWMgdm9pZCBpZ2Jf YWxsb2NfcnhfYnVmZmVyc19hZHYoc3RydWN0IGlnYl9yaW5nICpyeF9yaW5nLAorCQkJCSAgICAg aW50IGNsZWFuZWRfY291bnQpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gcnhf cmluZy0+YWRhcHRlcjsKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gYWRhcHRlci0+bmV0 ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gYWRhcHRlci0+cGRldjsKKwl1bmlvbiBlMTAw MF9hZHZfcnhfZGVzYyAqcnhfZGVzYzsKKwlzdHJ1Y3QgaWdiX2J1ZmZlciAqYnVmZmVyX2luZm87 CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWkgPSByeF9yaW5n LT5uZXh0X3RvX3VzZTsKKwlidWZmZXJfaW5mbyA9ICZyeF9yaW5nLT5idWZmZXJfaW5mb1tpXTsK KworCXdoaWxlIChjbGVhbmVkX2NvdW50LS0pIHsKKwkJcnhfZGVzYyA9IEUxMDAwX1JYX0RFU0Nf QURWKCpyeF9yaW5nLCBpKTsKKworCQlpZiAoYWRhcHRlci0+cnhfcHNfaGRyX3NpemUgJiYgIWJ1 ZmZlcl9pbmZvLT5wYWdlX2RtYSkgeworCQkJaWYgKCFidWZmZXJfaW5mby0+cGFnZSkgeworCQkJ CWJ1ZmZlcl9pbmZvLT5wYWdlID0gYWxsb2NfcGFnZShHRlBfQVRPTUlDKTsKKwkJCQlpZiAoIWJ1 ZmZlcl9pbmZvLT5wYWdlKSB7CisJCQkJCWFkYXB0ZXItPmFsbG9jX3J4X2J1ZmZfZmFpbGVkKys7 CisJCQkJCWdvdG8gbm9fYnVmZmVyczsKKwkJCQl9CisJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zm c2V0ID0gMDsKKwkJCX0gZWxzZSB7CisJCQkJYnVmZmVyX2luZm8tPnBhZ2Vfb2Zmc2V0IF49IFBB R0VfU0laRSAvIDI7CisJCQl9CisJCQlidWZmZXJfaW5mby0+cGFnZV9kbWEgPQorCQkJCXBjaV9t YXBfcGFnZShwZGV2LAorCQkJCQkgICAgIGJ1ZmZlcl9pbmZvLT5wYWdlLAorCQkJCQkgICAgIGJ1 ZmZlcl9pbmZvLT5wYWdlX29mZnNldCwKKwkJCQkJICAgICBQQUdFX1NJWkUgLyAyLAorCQkJCQkg ICAgIFBDSV9ETUFfRlJPTURFVklDRSk7CisJCX0KKworCQlpZiAoIWJ1ZmZlcl9pbmZvLT5za2Ip IHsKKwkJCWludCBidWZzejsKKworCQkJaWYgKGFkYXB0ZXItPnJ4X3BzX2hkcl9zaXplKQorCQkJ CWJ1ZnN6ID0gYWRhcHRlci0+cnhfcHNfaGRyX3NpemU7CisJCQllbHNlCisJCQkJYnVmc3ogPSBh ZGFwdGVyLT5yeF9idWZmZXJfbGVuOworCQkJYnVmc3ogKz0gTkVUX0lQX0FMSUdOOworCQkJc2ti ID0gbmV0ZGV2X2FsbG9jX3NrYihuZXRkZXYsIGJ1ZnN6KTsKKworCQkJaWYgKCFza2IpIHsKKwkJ CQlhZGFwdGVyLT5hbGxvY19yeF9idWZmX2ZhaWxlZCsrOworCQkJCWdvdG8gbm9fYnVmZmVyczsK KwkJCX0KKworCQkJLyogTWFrZSBidWZmZXIgYWxpZ25tZW50IDIgYmV5b25kIGEgMTYgYnl0ZSBi b3VuZGFyeQorCQkJICogdGhpcyB3aWxsIHJlc3VsdCBpbiBhIDE2IGJ5dGUgYWxpZ25lZCBJUCBo ZWFkZXIgYWZ0ZXIKKwkJCSAqIHRoZSAxNCBieXRlIE1BQyBoZWFkZXIgaXMgcmVtb3ZlZAorCQkJ ICovCisJCQlza2JfcmVzZXJ2ZShza2IsIE5FVF9JUF9BTElHTik7CisKKwkJCWJ1ZmZlcl9pbmZv LT5za2IgPSBza2I7CisJCQlidWZmZXJfaW5mby0+ZG1hID0gcGNpX21hcF9zaW5nbGUocGRldiwg c2tiLT5kYXRhLAorCQkJCQkJCSAgYnVmc3osCisJCQkJCQkJICBQQ0lfRE1BX0ZST01ERVZJQ0Up OworCisJCX0KKwkJLyogUmVmcmVzaCB0aGUgZGVzYyBldmVuIGlmIGJ1ZmZlcl9hZGRycyBkaWRu J3QgY2hhbmdlIGJlY2F1c2UKKwkJICogZWFjaCB3cml0ZS1iYWNrIGVyYXNlcyB0aGlzIGluZm8u ICovCisJCWlmIChhZGFwdGVyLT5yeF9wc19oZHJfc2l6ZSkgeworCQkJcnhfZGVzYy0+cmVhZC5w a3RfYWRkciA9CisJCQkgICAgIGNwdV90b19sZTY0KGJ1ZmZlcl9pbmZvLT5wYWdlX2RtYSk7CisJ CQlyeF9kZXNjLT5yZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7 CisJCX0gZWxzZSB7CisJCQlyeF9kZXNjLT5yZWFkLnBrdF9hZGRyID0KKwkJCSAgICAgY3B1X3Rv X2xlNjQoYnVmZmVyX2luZm8tPmRtYSk7CisJCQlyeF9kZXNjLT5yZWFkLmhkcl9hZGRyID0gMDsK KwkJfQorCisJCWkrKzsKKwkJaWYgKGkgPT0gcnhfcmluZy0+Y291bnQpCisJCQlpID0gMDsKKwkJ YnVmZmVyX2luZm8gPSAmcnhfcmluZy0+YnVmZmVyX2luZm9baV07CisJfQorCitub19idWZmZXJz OgorCWlmIChyeF9yaW5nLT5uZXh0X3RvX3VzZSAhPSBpKSB7CisJCXJ4X3JpbmctPm5leHRfdG9f dXNlID0gaTsKKwkJaWYgKGkgPT0gMCkKKwkJCWkgPSAocnhfcmluZy0+Y291bnQgLSAxKTsKKwkJ ZWxzZQorCQkJaS0tOworCisJCS8qIEZvcmNlIG1lbW9yeSB3cml0ZXMgdG8gY29tcGxldGUgYmVm b3JlIGxldHRpbmcgaC93CisJCSAqIGtub3cgdGhlcmUgYXJlIG5ldyBkZXNjcmlwdG9ycyB0byBm ZXRjaC4gIChPbmx5CisJCSAqIGFwcGxpY2FibGUgZm9yIHdlYWstb3JkZXJlZCBtZW1vcnkgbW9k ZWwgYXJjaHMsCisJCSAqIHN1Y2ggYXMgSUEtNjQpLiAqLworCQl3bWIoKTsKKwkJd3JpdGVsKGks IGFkYXB0ZXItPmh3Lmh3X2FkZHIgKyByeF9yaW5nLT50YWlsKTsKKwl9Cit9CisKKy8qKgorICog aWdiX21paV9pb2N0bCAtCisgKiBAbmV0ZGV2OgorICogQGlmcmVxOgorICogQGNtZDoKKyAqKi8K K3N0YXRpYyBpbnQgaWdiX21paV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBzdHJ1 Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIg PSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IGlm X21paShpZnIpOworCisJaWYgKGFkYXB0ZXItPmh3LnBoeS5tZWRpYV90eXBlICE9IGUxMDAwX21l ZGlhX3R5cGVfY29wcGVyKQorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisKKwlzd2l0Y2ggKGNtZCkg eworCWNhc2UgU0lPQ0dNSUlQSFk6CisJCWRhdGEtPnBoeV9pZCA9IGFkYXB0ZXItPmh3LnBoeS5h ZGRyOworCQlicmVhazsKKwljYXNlIFNJT0NHTUlJUkVHOgorCQlpZiAoIWNhcGFibGUoQ0FQX05F VF9BRE1JTikpCisJCQlyZXR1cm4gLUVQRVJNOworCQlpZiAoYWRhcHRlci0+aHcucGh5Lm9wcy5y ZWFkX3BoeV9yZWcoJmFkYXB0ZXItPmh3LAorCQkJCQkJICAgICBkYXRhLT5yZWdfbnVtCisJCQkJ CQkgICAgICYgMHgxRiwgJmRhdGEtPnZhbF9vdXQpKQorCQkJcmV0dXJuIC1FSU87CisJCWJyZWFr OworCWNhc2UgU0lPQ1NNSUlSRUc6CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwor CX0KKwlyZXR1cm4gMDsKK30KKworLyoqCisgKiBpZ2JfaW9jdGwgLQorICogQG5ldGRldjoKKyAq IEBpZnJlcToKKyAqIEBjbWQ6CisgKiovCitzdGF0aWMgaW50IGlnYl9pb2N0bChzdHJ1Y3QgbmV0 X2RldmljZSAqbmV0ZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZCkKK3sKKwlzd2l0Y2gg KGNtZCkgeworCWNhc2UgU0lPQ0dNSUlQSFk6CisJY2FzZSBTSU9DR01JSVJFRzoKKwljYXNlIFNJ T0NTTUlJUkVHOgorCQlyZXR1cm4gaWdiX21paV9pb2N0bChuZXRkZXYsIGlmciwgY21kKTsKKwlk ZWZhdWx0OgorCQlyZXR1cm4gLUVPUE5PVFNVUFA7CisJfQorfQorCitzdGF0aWMgdm9pZCBpZ2Jf dmxhbl9yeF9yZWdpc3RlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAorCQkJCSBzdHJ1Y3Qg dmxhbl9ncm91cCAqZ3JwKQoreworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRl dl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5odzsKKwl1 MzIgY3RybCwgcmN0bDsKKworCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwlhZGFwdGVyLT52 bGdycCA9IGdycDsKKworCWlmIChncnApIHsKKwkJLyogZW5hYmxlIFZMQU4gdGFnIGluc2VydC9z dHJpcCAqLworCQljdHJsID0gcmQzMihFMTAwMF9DVFJMKTsKKwkJY3RybCB8PSBFMTAwMF9DVFJM X1ZNRTsKKwkJd3IzMihFMTAwMF9DVFJMLCBjdHJsKTsKKworCQkvKiBlbmFibGUgVkxBTiByZWNl aXZlIGZpbHRlcmluZyAqLworCQlyY3RsID0gcmQzMihFMTAwMF9SQ1RMKTsKKwkJcmN0bCAmPSB+ RTEwMDBfUkNUTF9DRklFTjsKKwkJd3IzMihFMTAwMF9SQ1RMLCByY3RsKTsKKwkJaWdiX3VwZGF0 ZV9tbmdfdmxhbihhZGFwdGVyKTsKKwkJd3IzMihFMTAwMF9STFBNTCwKKwkJCQlhZGFwdGVyLT5t YXhfZnJhbWVfc2l6ZSArIFZMQU5fVEFHX1NJWkUpOworCX0gZWxzZSB7CisJCS8qIGRpc2FibGUg VkxBTiB0YWcgaW5zZXJ0L3N0cmlwICovCisJCWN0cmwgPSByZDMyKEUxMDAwX0NUUkwpOworCQlj dHJsICY9IH5FMTAwMF9DVFJMX1ZNRTsKKwkJd3IzMihFMTAwMF9DVFJMLCBjdHJsKTsKKworCQlp ZiAoYWRhcHRlci0+bW5nX3ZsYW5faWQgIT0gKHUxNilJR0JfTU5HX1ZMQU5fTk9ORSkgeworCQkJ aWdiX3ZsYW5fcnhfa2lsbF92aWQobmV0ZGV2LCBhZGFwdGVyLT5tbmdfdmxhbl9pZCk7CisJCQlh ZGFwdGVyLT5tbmdfdmxhbl9pZCA9IElHQl9NTkdfVkxBTl9OT05FOworCQl9CisJCXdyMzIoRTEw MDBfUkxQTUwsCisJCQkJYWRhcHRlci0+bWF4X2ZyYW1lX3NpemUpOworCX0KKworCWlmICghdGVz dF9iaXQoX19JR0JfRE9XTiwgJmFkYXB0ZXItPnN0YXRlKSkKKwkJaWdiX2lycV9lbmFibGUoYWRh cHRlcik7Cit9CisKK3N0YXRpYyB2b2lkIGlnYl92bGFuX3J4X2FkZF92aWQoc3RydWN0IG5ldF9k ZXZpY2UgKm5ldGRldiwgdTE2IHZpZCkKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIg PSBuZXRkZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+ aHc7CisJdTMyIHZmdGEsIGluZGV4OworCisJaWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0 YXR1cyAmCisJICAgICBFMTAwMF9NTkdfREhDUF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCisJICAg ICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5faWQpKQorCQlyZXR1cm47CisJLyogYWRkIFZJRCB0 byBmaWx0ZXIgdGFibGUgKi8KKwlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOworCXZmdGEgPSBh cnJheV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKKwl2ZnRhIHw9ICgxIDw8ICh2aWQgJiAweDFG KSk7CisJaWdiX3dyaXRlX3ZmdGEoJmFkYXB0ZXItPmh3LCBpbmRleCwgdmZ0YSk7Cit9CisKK3N0 YXRpYyB2b2lkIGlnYl92bGFuX3J4X2tpbGxfdmlkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYs IHUxNiB2aWQpCit7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyID0gbmV0ZGV2X3ByaXYo bmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0ZXItPmh3OworCXUzMiB2ZnRh LCBpbmRleDsKKworCWlnYl9pcnFfZGlzYWJsZShhZGFwdGVyKTsKKwl2bGFuX2dyb3VwX3NldF9k ZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCwgTlVMTCk7CisKKwlpZiAoIXRlc3RfYml0KF9fSUdC X0RPV04sICZhZGFwdGVyLT5zdGF0ZSkpCisJCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworCisJ aWYgKChhZGFwdGVyLT5ody5tbmdfY29va2llLnN0YXR1cyAmCisJICAgICBFMTAwMF9NTkdfREhD UF9DT09LSUVfU1RBVFVTX1ZMQU4pICYmCisJICAgICh2aWQgPT0gYWRhcHRlci0+bW5nX3ZsYW5f aWQpKSB7CisJCS8qIHJlbGVhc2UgY29udHJvbCB0byBmL3cgKi8KKwkJaWdiX3JlbGVhc2VfaHdf Y29udHJvbChhZGFwdGVyKTsKKwkJcmV0dXJuOworCX0KKworCS8qIHJlbW92ZSBWSUQgZnJvbSBm aWx0ZXIgdGFibGUgKi8KKwlpbmRleCA9ICh2aWQgPj4gNSkgJiAweDdGOworCXZmdGEgPSBhcnJh eV9yZDMyKEUxMDAwX1ZGVEEsIGluZGV4KTsKKwl2ZnRhICY9IH4oMSA8PCAodmlkICYgMHgxRikp OworCWlnYl93cml0ZV92ZnRhKCZhZGFwdGVyLT5odywgaW5kZXgsIHZmdGEpOworfQorCitzdGF0 aWMgdm9pZCBpZ2JfcmVzdG9yZV92bGFuKHN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlcikKK3sK KwlpZ2Jfdmxhbl9yeF9yZWdpc3RlcihhZGFwdGVyLT5uZXRkZXYsIGFkYXB0ZXItPnZsZ3JwKTsK KworCWlmIChhZGFwdGVyLT52bGdycCkgeworCQl1MTYgdmlkOworCQlmb3IgKHZpZCA9IDA7IHZp ZCA8IFZMQU5fR1JPVVBfQVJSQVlfTEVOOyB2aWQrKykgeworCQkJaWYgKCF2bGFuX2dyb3VwX2dl dF9kZXZpY2UoYWRhcHRlci0+dmxncnAsIHZpZCkpCisJCQkJY29udGludWU7CisJCQlpZ2Jfdmxh bl9yeF9hZGRfdmlkKGFkYXB0ZXItPm5ldGRldiwgdmlkKTsKKwkJfQorCX0KK30KKworaW50IGln Yl9zZXRfc3BkX2RwbHgoc3RydWN0IGlnYl9hZGFwdGVyICphZGFwdGVyLCB1MTYgc3BkZHBseCkK K3sKKwlzdHJ1Y3QgZTEwMDBfbWFjX2luZm8gKm1hYyA9ICZhZGFwdGVyLT5ody5tYWM7CisKKwlt YWMtPmF1dG9uZWcgPSAwOworCisJLyogRmliZXIgTklDcyBvbmx5IGFsbG93IDEwMDAgZ2JwcyBG dWxsIGR1cGxleCAqLworCWlmICgoYWRhcHRlci0+aHcucGh5Lm1lZGlhX3R5cGUgPT0gZTEwMDBf bWVkaWFfdHlwZV9maWJlcikgJiYKKwkJc3BkZHBseCAhPSAoU1BFRURfMTAwMCArIERVUExFWF9G VUxMKSkgeworCQlkZXZfZXJyKCZhZGFwdGVyLT5wZGV2LT5kZXYsCisJCQkiVW5zdXBwb3J0ZWQg U3BlZWQvRHVwbGV4IGNvbmZpZ3VyYXRpb25cbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisK Kwlzd2l0Y2ggKHNwZGRwbHgpIHsKKwljYXNlIFNQRUVEXzEwICsgRFVQTEVYX0hBTEY6CisJCW1h Yy0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9IEFEVkVSVElTRV8xMF9IQUxGOworCQlicmVhazsKKwlj YXNlIFNQRUVEXzEwICsgRFVQTEVYX0ZVTEw6CisJCW1hYy0+Zm9yY2VkX3NwZWVkX2R1cGxleCA9 IEFEVkVSVElTRV8xMF9GVUxMOworCQlicmVhazsKKwljYXNlIFNQRUVEXzEwMCArIERVUExFWF9I QUxGOgorCQltYWMtPmZvcmNlZF9zcGVlZF9kdXBsZXggPSBBRFZFUlRJU0VfMTAwX0hBTEY7CisJ CWJyZWFrOworCWNhc2UgU1BFRURfMTAwICsgRFVQTEVYX0ZVTEw6CisJCW1hYy0+Zm9yY2VkX3Nw ZWVkX2R1cGxleCA9IEFEVkVSVElTRV8xMDBfRlVMTDsKKwkJYnJlYWs7CisJY2FzZSBTUEVFRF8x MDAwICsgRFVQTEVYX0ZVTEw6CisJCW1hYy0+YXV0b25lZyA9IDE7CisJCWFkYXB0ZXItPmh3LnBo eS5hdXRvbmVnX2FkdmVydGlzZWQgPSBBRFZFUlRJU0VfMTAwMF9GVUxMOworCQlicmVhazsKKwlj YXNlIFNQRUVEXzEwMDAgKyBEVVBMRVhfSEFMRjogLyogbm90IHN1cHBvcnRlZCAqLworCWRlZmF1 bHQ6CisJCWRldl9lcnIoJmFkYXB0ZXItPnBkZXYtPmRldiwKKwkJCSJVbnN1cHBvcnRlZCBTcGVl ZC9EdXBsZXggY29uZmlndXJhdGlvblxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1 cm4gMDsKK30KKworCitzdGF0aWMgaW50IGlnYl9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2 LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IHBj aV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRk ZXZfcHJpdihuZXRkZXYpOworCXN0cnVjdCBlMTAwMF9odyAqaHcgPSAmYWRhcHRlci0+aHc7CisJ dTMyIGN0cmwsIHJjdGwsIHN0YXR1czsKKwl1MzIgd3VmYyA9IGFkYXB0ZXItPndvbDsKKyNpZmRl ZiBDT05GSUdfUE0KKwlpbnQgcmV0dmFsID0gMDsKKyNlbmRpZgorCisJbmV0aWZfZGV2aWNlX2Rl dGFjaChuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKKwkJaWdiX2Nsb3Nl KG5ldGRldik7CisKKwlpZ2JfcmVzZXRfaW50ZXJydXB0X2NhcGFiaWxpdHkoYWRhcHRlcik7CisK KwlpZ2JfZnJlZV9xdWV1ZXMoYWRhcHRlcik7CisKKyNpZmRlZiBDT05GSUdfUE0KKwlyZXR2YWwg PSBwY2lfc2F2ZV9zdGF0ZShwZGV2KTsKKwlpZiAocmV0dmFsKQorCQlyZXR1cm4gcmV0dmFsOwor I2VuZGlmCisKKwlzdGF0dXMgPSByZDMyKEUxMDAwX1NUQVRVUyk7CisJaWYgKHN0YXR1cyAmIEUx MDAwX1NUQVRVU19MVSkKKwkJd3VmYyAmPSB+RTEwMDBfV1VGQ19MTktDOworCisJaWYgKHd1ZmMp IHsKKwkJaWdiX3NldHVwX3JjdGwoYWRhcHRlcik7CisJCWlnYl9zZXRfbXVsdGkobmV0ZGV2KTsK KworCQkvKiB0dXJuIG9uIGFsbC1tdWx0aSBtb2RlIGlmIHdha2Ugb24gbXVsdGljYXN0IGlzIGVu YWJsZWQgKi8KKwkJaWYgKHd1ZmMgJiBFMTAwMF9XVUZDX01DKSB7CisJCQlyY3RsID0gcmQzMihF MTAwMF9SQ1RMKTsKKwkJCXJjdGwgfD0gRTEwMDBfUkNUTF9NUEU7CisJCQl3cjMyKEUxMDAwX1JD VEwsIHJjdGwpOworCQl9CisKKwkJY3RybCA9IHJkMzIoRTEwMDBfQ1RSTCk7CisJCS8qIGFkdmVy dGlzZSB3YWtlIGZyb20gRDNDb2xkICovCisJCSNkZWZpbmUgRTEwMDBfQ1RSTF9BRFZEM1dVQyAw eDAwMTAwMDAwCisJCS8qIHBoeSBwb3dlciBtYW5hZ2VtZW50IGVuYWJsZSAqLworCQkjZGVmaW5l IEUxMDAwX0NUUkxfRU5fUEhZX1BXUl9NR01UIDB4MDAyMDAwMDAKKwkJY3RybCB8PSBFMTAwMF9D VFJMX0FEVkQzV1VDOworCQl3cjMyKEUxMDAwX0NUUkwsIGN0cmwpOworCisJCS8qIEFsbG93IHRp bWUgZm9yIHBlbmRpbmcgbWFzdGVyIHJlcXVlc3RzIHRvIHJ1biAqLworCQlpZ2JfZGlzYWJsZV9w Y2llX21hc3RlcigmYWRhcHRlci0+aHcpOworCisJCXdyMzIoRTEwMDBfV1VDLCBFMTAwMF9XVUNf UE1FX0VOKTsKKwkJd3IzMihFMTAwMF9XVUZDLCB3dWZjKTsKKwl9IGVsc2UgeworCQl3cjMyKEUx MDAwX1dVQywgMCk7CisJCXdyMzIoRTEwMDBfV1VGQywgMCk7CisJfQorCisJLyogbWFrZSBzdXJl IGFkYXB0ZXIgaXNuJ3QgYXNsZWVwIGlmIG1hbmFnZWFiaWxpdHkvd29sIGlzIGVuYWJsZWQgKi8K KwlpZiAod3VmYyB8fCBhZGFwdGVyLT5lbl9tbmdfcHQpIHsKKwkJcGNpX2VuYWJsZV93YWtlKHBk ZXYsIFBDSV9EM2hvdCwgMSk7CisJCXBjaV9lbmFibGVfd2FrZShwZGV2LCBQQ0lfRDNjb2xkLCAx KTsKKwl9IGVsc2UgeworCQlpZ2Jfc2h1dGRvd25fZmliZXJfc2VyZGVzX2xpbmtfODI1NzUoaHcp OworCQlwY2lfZW5hYmxlX3dha2UocGRldiwgUENJX0QzaG90LCAwKTsKKwkJcGNpX2VuYWJsZV93 YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCX0KKworCS8qIFJlbGVhc2UgY29udHJvbCBvZiBo L3cgdG8gZi93LiAgSWYgZi93IGlzIEFNVCBlbmFibGVkLCB0aGlzCisJICogd291bGQgaGF2ZSBh bHJlYWR5IGhhcHBlbmVkIGluIGNsb3NlIGFuZCBpcyByZWR1bmRhbnQuICovCisJaWdiX3JlbGVh c2VfaHdfY29udHJvbChhZGFwdGVyKTsKKworCXBjaV9kaXNhYmxlX2RldmljZShwZGV2KTsKKwor CXBjaV9zZXRfcG93ZXJfc3RhdGUocGRldiwgcGNpX2Nob29zZV9zdGF0ZShwZGV2LCBzdGF0ZSkp OworCisJcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBDT05GSUdfUE0KK3N0YXRpYyBpbnQgaWdiX3Jl c3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2 ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9 IG5ldGRldl9wcml2KG5ldGRldik7CisJc3RydWN0IGUxMDAwX2h3ICpodyA9ICZhZGFwdGVyLT5o dzsKKwl1MzIgZXJyOworCisJcGNpX3NldF9wb3dlcl9zdGF0ZShwZGV2LCBQQ0lfRDApOworCXBj aV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCWVyciA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwor CWlmIChlcnIpIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LAorCQkJImlnYjogQ2Fubm90IGVuYWJs ZSBQQ0kgZGV2aWNlIGZyb20gc3VzcGVuZFxuIik7CisJCXJldHVybiBlcnI7CisJfQorCXBjaV9z ZXRfbWFzdGVyKHBkZXYpOworCisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2hvdCwgMCk7 CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQsIDApOworCisJaWdiX3NldF9pbnRl cnJ1cHRfY2FwYWJpbGl0eShhZGFwdGVyKTsKKworCWlmIChpZ2JfYWxsb2NfcXVldWVzKGFkYXB0 ZXIpKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkg Zm9yIHF1ZXVlc1xuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCS8qIGUxMDAwX3Bvd2Vy X3VwX3BoeShhZGFwdGVyKTsgKi8KKworCWlnYl9yZXNldChhZGFwdGVyKTsKKwl3cjMyKEUxMDAw X1dVUywgfjApOworCisJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkgeworCQllcnIgPSBpZ2Jf b3BlbihuZXRkZXYpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwluZXRpZl9k ZXZpY2VfYXR0YWNoKG5ldGRldik7CisKKwkvKiBsZXQgdGhlIGYvdyBrbm93IHRoYXQgdGhlIGgv dyBpcyBub3cgdW5kZXIgdGhlIGNvbnRyb2wgb2YgdGhlCisJICogZHJpdmVyLiAqLworCWlnYl9n ZXRfaHdfY29udHJvbChhZGFwdGVyKTsKKworCXJldHVybiAwOworfQorI2VuZGlmCisKK3N0YXRp YyB2b2lkIGlnYl9zaHV0ZG93bihzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlpZ2Jfc3VzcGVu ZChwZGV2LCBQTVNHX1NVU1BFTkQpOworfQorCisjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRS T0xMRVIKKy8qCisgKiBQb2xsaW5nICdpbnRlcnJ1cHQnIC0gdXNlZCBieSB0aGluZ3MgbGlrZSBu ZXRjb25zb2xlIHRvIHNlbmQgc2ticworICogd2l0aG91dCBoYXZpbmcgdG8gcmUtZW5hYmxlIGlu dGVycnVwdHMuIEl0J3Mgbm90IGNhbGxlZCB3aGlsZQorICogdGhlIGludGVycnVwdCByb3V0aW5l IGlzIGV4ZWN1dGluZy4KKyAqLworc3RhdGljIHZvaWQgaWdiX25ldHBvbGwoc3RydWN0IG5ldF9k ZXZpY2UgKm5ldGRldikKK3sKKwlzdHJ1Y3QgaWdiX2FkYXB0ZXIgKmFkYXB0ZXIgPSBuZXRkZXZf cHJpdihuZXRkZXYpOworCWludCBpOworCWludCB3b3JrX2RvbmUgPSAwLCB3b3JrX3RvX2RvID0g YWRhcHRlci0+bmV0ZGV2LT53ZWlnaHQ7CisKKwlpZ2JfaXJxX2Rpc2FibGUoYWRhcHRlcik7CisJ YWRhcHRlci0+ZmxhZ3MgfD0gSUdCX0ZMQUdfSU5fTkVUUE9MTDsKKworCWZvciAoaSA9IDA7IGkg PCBhZGFwdGVyLT5udW1fdHhfcXVldWVzOyBpKyspCisJCWlnYl9jbGVhbl90eF9pcnEoJmFkYXB0 ZXItPnR4X3JpbmdbaV0pOworCisJZm9yIChpID0gMDsgaSA8IGFkYXB0ZXItPm51bV9yeF9xdWV1 ZXM7IGkrKykKKwkJaWdiX2NsZWFuX3J4X2lycV9hZHYoJmFkYXB0ZXItPnJ4X3JpbmdbaV0sCisJ CQkJICAgICAmd29ya19kb25lLCB3b3JrX3RvX2RvKTsKKworCWFkYXB0ZXItPmZsYWdzICY9IH5J R0JfRkxBR19JTl9ORVRQT0xMOworCWlnYl9pcnFfZW5hYmxlKGFkYXB0ZXIpOworfQorI2VuZGlm IC8qIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSICovCisKKy8qKgorICogaWdiX2lvX2Vycm9y X2RldGVjdGVkIC0gY2FsbGVkIHdoZW4gUENJIGVycm9yIGlzIGRldGVjdGVkCisgKiBAcGRldjog UG9pbnRlciB0byBQQ0kgZGV2aWNlCisgKiBAc3RhdGU6IFRoZSBjdXJyZW50IHBjaSBjb25uZWN0 aW9uIHN0YXRlCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYWZ0ZXIgYSBQQ0kgYnVz IGVycm9yIGFmZmVjdGluZworICogdGhpcyBkZXZpY2UgaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKi8K K3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19lcnJvcl9kZXRlY3RlZChzdHJ1Y3QgcGNp X2RldiAqcGRldiwKKwkJCQkJICAgICAgcGNpX2NoYW5uZWxfc3RhdGVfdCBzdGF0ZSkKK3sKKwlz dHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVj dCBpZ2JfYWRhcHRlciAqYWRhcHRlciA9IG5ldGRldl9wcml2KG5ldGRldik7CisKKwluZXRpZl9k ZXZpY2VfZGV0YWNoKG5ldGRldik7CisKKwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKQorCQlp Z2JfZG93bihhZGFwdGVyKTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UocGRldik7CisKKwkvKiBSZXF1 ZXN0IGEgc2xvdCBzbG90IHJlc2V0LiAqLworCXJldHVybiBQQ0lfRVJTX1JFU1VMVF9ORUVEX1JF U0VUOworfQorCisvKioKKyAqIGlnYl9pb19zbG90X3Jlc2V0IC0gY2FsbGVkIGFmdGVyIHRoZSBw Y2kgYnVzIGhhcyBiZWVuIHJlc2V0LgorICogQHBkZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQor ICoKKyAqIFJlc3RhcnQgdGhlIGNhcmQgZnJvbSBzY3JhdGNoLCBhcyBpZiBmcm9tIGEgY29sZC1i b290LiBJbXBsZW1lbnRhdGlvbgorICogcmVzZW1ibGVzIHRoZSBmaXJzdC1oYWxmIG9mIHRoZSBp Z2JfcmVzdW1lIHJvdXRpbmUuCisgKi8KK3N0YXRpYyBwY2lfZXJzX3Jlc3VsdF90IGlnYl9pb19z bG90X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBuZXRfZGV2aWNlICpu ZXRkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IGlnYl9hZGFwdGVyICphZGFw dGVyID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKKwlzdHJ1Y3QgZTEwMDBfaHcgKmh3ID0gJmFkYXB0 ZXItPmh3OworCisJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKSB7CisJCWRldl9lcnIoJnBk ZXYtPmRldiwKKwkJCSJDYW5ub3QgcmUtZW5hYmxlIFBDSSBkZXZpY2UgYWZ0ZXIgcmVzZXQuXG4i KTsKKwkJcmV0dXJuIFBDSV9FUlNfUkVTVUxUX0RJU0NPTk5FQ1Q7CisJfQorCXBjaV9zZXRfbWFz dGVyKHBkZXYpOworCXBjaV9yZXN0b3JlX3N0YXRlKHBkZXYpOworCisJcGNpX2VuYWJsZV93YWtl KHBkZXYsIFBDSV9EM2hvdCwgMCk7CisJcGNpX2VuYWJsZV93YWtlKHBkZXYsIFBDSV9EM2NvbGQs IDApOworCisJaWdiX3Jlc2V0KGFkYXB0ZXIpOworCXdyMzIoRTEwMDBfV1VTLCB+MCk7CisKKwly ZXR1cm4gUENJX0VSU19SRVNVTFRfUkVDT1ZFUkVEOworfQorCisvKioKKyAqIGlnYl9pb19yZXN1 bWUgLSBjYWxsZWQgd2hlbiB0cmFmZmljIGNhbiBzdGFydCBmbG93aW5nIGFnYWluLgorICogQHBk ZXY6IFBvaW50ZXIgdG8gUENJIGRldmljZQorICoKKyAqIFRoaXMgY2FsbGJhY2sgaXMgY2FsbGVk IHdoZW4gdGhlIGVycm9yIHJlY292ZXJ5IGRyaXZlciB0ZWxscyB1cyB0aGF0CisgKiBpdHMgT0sg dG8gcmVzdW1lIG5vcm1hbCBvcGVyYXRpb24uIEltcGxlbWVudGF0aW9uIHJlc2VtYmxlcyB0aGUK KyAqIHNlY29uZC1oYWxmIG9mIHRoZSBpZ2JfcmVzdW1lIHJvdXRpbmUuCisgKi8KK3N0YXRpYyB2 b2lkIGlnYl9pb19yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG5ldF9k ZXZpY2UgKm5ldGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgaWdiX2FkYXB0 ZXIgKmFkYXB0ZXIgPSBuZXRkZXZfcHJpdihuZXRkZXYpOworCisJaWYgKG5ldGlmX3J1bm5pbmco bmV0ZGV2KSkgeworCQlpZiAoaWdiX3VwKGFkYXB0ZXIpKSB7CisJCQlkZXZfZXJyKCZwZGV2LT5k ZXYsICJpZ2JfdXAgZmFpbGVkIGFmdGVyIHJlc2V0XG4iKTsKKwkJCXJldHVybjsKKwkJfQorCX0K KworCW5ldGlmX2RldmljZV9hdHRhY2gobmV0ZGV2KTsKKworCS8qIGxldCB0aGUgZi93IGtub3cg dGhhdCB0aGUgaC93IGlzIG5vdyB1bmRlciB0aGUgY29udHJvbCBvZiB0aGUKKwkgKiBkcml2ZXIu ICovCisJaWdiX2dldF9od19jb250cm9sKGFkYXB0ZXIpOworCit9CisKKy8qIGlnYl9tYWluLmMg Ki8K --_004_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_ Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --_004_10C63FAD690C13458F0B32BCED571F1406BAB7CDpdsmsx502ccrcor_-- From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Venefax" Subject: Time never changes patch Date: Thu, 5 Mar 2009 12:45:08 -0500 Message-ID: <08cf01c99dba$219ee870$64dcb950$@com> References: <10C63FAD690C13458F0B32BCED571F1406BAB7CD@pdsmsx502.ccr.corp.intel.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="===============1830113962==" Return-path: In-Reply-To: <10C63FAD690C13458F0B32BCED571F1406BAB7CD@pdsmsx502.ccr.corp.intel.com> Content-Language: en-us List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: xen-devel@lists.xensource.com List-Id: xen-devel@lists.xenproject.org This is a multipart message in MIME format. --===============1830113962== Content-Type: multipart/alternative; boundary="----=_NextPart_000_08D0_01C99D90.38C8E070" Content-Language: en-us This is a multipart message in MIME format. ------=_NextPart_000_08D0_01C99D90.38C8E070 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Dear Profound Xen Masters How do I patch a Centos Para-virtualized VM to keep the time static inside itself? I mean, any application that requests the time will always get the same date and time? Federico ------=_NextPart_000_08D0_01C99D90.38C8E070 Content-Type: text/html; charset="us-ascii" Content-Transfer-Encoding: quoted-printable

Dear Profound Xen Masters

How do I patch a Centos Para-virtualized VM to keep the = time static inside itself? I mean, any application that requests the time = will always get the same date and time?  

Federico

------=_NextPart_000_08D0_01C99D90.38C8E070-- --===============1830113962== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --===============1830113962==--