Date: Sun, 3 Jan 2010 21:33:41 +0700 From: Yohanes Nugroho <yohanes@gmail.com> To: Rui Paulo <rpaulo@freebsd.org> Cc: freebsd-arm@freebsd.org Subject: Re: CNS11XX FreeBSD port completed Message-ID: <260bb65e1001030633n4f9ad138w388600d82ed9f2d1@mail.gmail.com> In-Reply-To: <4DC598C4-2CB4-4D98-8101-3CA7B3985BE9@freebsd.org> References: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com> <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com> <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org> <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com> <4DC598C4-2CB4-4D98-8101-3CA7B3985BE9@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--001636b14743f0e22e047c437eff Content-Type: text/plain; charset=UTF-8 On Sun, Jan 3, 2010 at 9:15 PM, Rui Paulo <rpaulo@freebsd.org> wrote: >>> * did you forget to add a kernel config file for this board? >> >> it is in sys/arm/conf/CNS11XXNAS > > Did you forget to svn add the file? I can't see sys/arm/conf/CNS11XXNAS in the diff. Sorry, I forgot :( I have added the config file in this latest patch. -- Regards Yohanes http://yohan.es/ --001636b14743f0e22e047c437eff Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx_20090103_3.diff" Content-Disposition: attachment; filename="cns11xx_20090103_3.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3zx9ifn0 SW5kZXg6IGFybS9hcm0vZWxmX3RyYW1wb2xpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vYXJtL2Vs Zl90cmFtcG9saW5lLmMJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9hcm0vZWxmX3RyYW1wb2xp bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBjcHVfaWRjYWNo ZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVkKENQVV9BUk05KQog I2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3diaW52X2FsbAorI2Vs aWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlmYTUy Nl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUpCiAjZGVmaW5lIGNw dV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVm aW5lZChDUFVfQVJNMTApCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh cm0vYXJtL2NwdWZ1bmMuYwkocmV2aXNpb24gMjAxMzU4KQorKysgYXJtL2FybS9jcHVmdW5jLmMJ KHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMgQEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBj cHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9YU0NBTEVfODEzNDIgKi8KKworCisjaWYg ZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9 IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisKKwkuY2ZfaWQJCQk9IGNwdWZ1bmNfaWQsCisJLmNm X2Nwd2FpdAkJPSBjcHVmdW5jX251bGxvcCwKKworCS8qIE1NVSBmdW5jdGlvbnMgKi8KKworCS5j Zl9jb250cm9sCQk9IGNwdWZ1bmNfY29udHJvbCwKKwkuY2ZfZG9tYWlucwkJPSBjcHVmdW5jX2Rv bWFpbnMsCisJLmNmX3NldHR0YgkJPSBmYTUyNl9zZXR0dGIsCisJLmNmX2ZhdWx0c3RhdHVzCQk9 IGNwdWZ1bmNfZmF1bHRzdGF0dXMsCisJLmNmX2ZhdWx0YWRkcmVzcwk9IGNwdWZ1bmNfZmF1bHRh ZGRyZXNzLAorCisJLyogVExCIGZ1bmN0aW9ucyAqLworCisJLmNmX3RsYl9mbHVzaElECQk9IGFy bXY0X3RsYl9mbHVzaElELAorCS5jZl90bGJfZmx1c2hJRF9TRQk9IGZhNTI2X3RsYl9mbHVzaElE X1NFLAorCS5jZl90bGJfZmx1c2hJCQk9IGFybXY0X3RsYl9mbHVzaEksCisJLmNmX3RsYl9mbHVz aElfU0UJPSBmYTUyNl90bGJfZmx1c2hJX1NFLAorCS5jZl90bGJfZmx1c2hECQk9IGFybXY0X3Rs Yl9mbHVzaEQsCisJLmNmX3RsYl9mbHVzaERfU0UJPSBhcm12NF90bGJfZmx1c2hEX1NFLAorCisJ LyogQ2FjaGUgb3BlcmF0aW9ucyAqLworCisJLmNmX2ljYWNoZV9zeW5jX2FsbAk9IGZhNTI2X2lj YWNoZV9zeW5jX2FsbCwKKwkuY2ZfaWNhY2hlX3N5bmNfcmFuZ2UJPSBmYTUyNl9pY2FjaGVfc3lu Y19yYW5nZSwKKworCS5jZl9kY2FjaGVfd2JpbnZfYWxsCT0gZmE1MjZfZGNhY2hlX3diaW52X2Fs bCwKKwkuY2ZfZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diaW52X3JhbmdlLAor CS5jZl9kY2FjaGVfaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX2ludl9yYW5nZSwKKwkuY2ZfZGNh Y2hlX3diX3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diX3JhbmdlLAorCisJLmNmX2lkY2FjaGVfd2Jp bnZfYWxsCT0gZmE1MjZfaWRjYWNoZV93Ymludl9hbGwsCisJLmNmX2lkY2FjaGVfd2JpbnZfcmFu Z2UJPSBmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlLAorCisKKwkuY2ZfbDJjYWNoZV93Ymludl9h bGwgPSBjcHVmdW5jX251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Ymludl9yYW5nZSA9ICh2b2lkICop Y3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfaW52X3JhbmdlID0gKHZvaWQgKiljcHVmdW5j X251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Yl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3As CisKKworCS8qIE90aGVyIGZ1bmN0aW9ucyAqLworCisJLmNmX2ZsdXNoX3ByZWZldGNoYnVmCT0g ZmE1MjZfZmx1c2hfcHJlZmV0Y2hidWYsCisJLmNmX2RyYWluX3dyaXRlYnVmCT0gYXJtdjRfZHJh aW5fd3JpdGVidWYsCisJLmNmX2ZsdXNoX2JybmNodGd0X0MJPSBjcHVmdW5jX251bGxvcCwKKwku Y2ZfZmx1c2hfYnJuY2h0Z3RfRQk9IGZhNTI2X2ZsdXNoX2JybmNodGd0X0UsCisKKwkuY2Zfc2xl ZXAJCT0gZmE1MjZfY3B1X3NsZWVwLAorCisJLyogU29mdCBmdW5jdGlvbnMgKi8KKworCS5jZl9k YXRhYWJ0X2ZpeHVwCT0gY3B1ZnVuY19udWxsX2ZpeHVwLAorCS5jZl9wcmVmZXRjaGFidF9maXh1 cAk9IGNwdWZ1bmNfbnVsbF9maXh1cCwKKworCS5jZl9jb250ZXh0X3N3aXRjaAk9IGZhNTI2X2Nv bnRleHRfc3dpdGNoLAorCisJLmNmX3NldHVwCQk9IGZhNTI2X3NldHVwCit9OworI2VuZGlmCS8q IENQVV9GQTUyNiAqLworCisKIC8qCiAgKiBHbG9iYWwgY29uc3RhbnRzIGFsc28gdXNlZCBieSBs b2NvcmUucwogICovCkBAIC03OTMsNiArODYwLDcgQEAKICAgZGVmaW5lZCAoQ1BVX0FSTTlFKSB8 fCBkZWZpbmVkIChDUFVfQVJNMTApIHx8CQkJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxF XzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODAzMjEpIHx8CSAgICAgICBcCiAgIGRlZmlu ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpIHx8CSAg ICAgICBcCisgIGRlZmluZWQoQ1BVX0ZBNTI2KSB8fAkJCQkJICAgICAgIFwKICAgZGVmaW5lZChD UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAKIHN0YXRpYyB2 b2lkIGdldF9jYWNoZXR5cGVfY3AxNSh2b2lkKTsKQEAgLTEwNzMsNiArMTE0MSwxOSBAQAogCQln b3RvIG91dDsKIAl9CiAjZW5kaWYJLyogQ1BVX1NBMTExMCAqLworI2lmZGVmIENQVV9GQTUyNgor CWlmIChjcHV0eXBlID09IENQVV9JRF9GQTUyNikgeworCQljcHVmdW5jcyA9IGZhNTI2X2NwdWZ1 bmNzOworCQljcHVfcmVzZXRfbmVlZHNfdjRfTU1VX2Rpc2FibGUgPSAxOwkvKiBTQSBuZWVkcyBp dAkqLworCQlnZXRfY2FjaGV0eXBlX2NwMTUoKTsKKwkJcG1hcF9wdGVfaW5pdF9nZW5lcmljKCk7 CisKKwkJLyogVXNlIHBvd2Vyc2F2ZSBvbiB0aGlzIENQVS4gKi8KKwkJY3B1X2RvX3Bvd2Vyc2F2 ZSA9IDE7CisKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENQVV9GQTUyNiAqLwogI2lmZGVm IENQVV9JWFAxMlgwCiAgICAgICAgIGlmIChjcHV0eXBlID09IENQVV9JRF9JWFAxMjAwKSB7CiAg ICAgICAgICAgICAgICAgY3B1ZnVuY3MgPSBpeHAxMngwX2NwdWZ1bmNzOwpAQCAtMTU0Nyw3ICsx NjI4LDggQEAKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NB TEVfODAzMjEpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQo Q1BVX1hTQ0FMRV9JWFA0MjUpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwg ZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKSB8fCBcCi0gIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAg ZGVmaW5lZChDUFVfQVJNMTEpCisgIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAgZGVmaW5lZChDUFVf QVJNMTEpIHx8IFwKKyAgZGVmaW5lZChDUFVfRkE1MjYpCiAKICNkZWZpbmUgSUdOCTAKICNkZWZp bmUgT1IJMQpAQCAtMjAxMyw2ICsyMDk1LDYyIEBACiB9CiAjZW5kaWYJLyogQ1BVX1NBMTEwMCB8 fCBDUFVfU0ExMTEwICovCiAKKyNpZiBkZWZpbmVkKENQVV9GQTUyNikKK3N0cnVjdCBjcHVfb3B0 aW9uIGZhNTI2X29wdGlvbnNbXSA9IHsKKyNpZmRlZiBDT01QQVRfMTIKKwl7ICJub2NhY2hlIiwJ CUlHTiwgQklDLCAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xf RENfRU5BQkxFKSB9LAorCXsgIm5vd3JpdGVidWYiLAkJSUdOLCBCSUMsIENQVV9DT05UUk9MX1dC VUZfRU5BQkxFIH0sCisjZW5kaWYJLyogQ09NUEFUXzEyICovCisJeyAiY3B1LmNhY2hlIiwJCUJJ QywgT1IsICAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xfRENf RU5BQkxFKSB9LAorCXsgImNwdS5ub2NhY2hlIiwJT1IsICBCSUMsIChDUFVfQ09OVFJPTF9JQ19F TkFCTEUgfAorCQkJCQkgICBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1LndyaXRl YnVmIiwJQklDLCBPUiwgIENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIH0sCisJeyAiY3B1Lm5vd3Jp dGVidWYiLAlPUiwgIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7IE5VTEwsCQkJ SUdOLCBJR04sIDAgfQorfTsKKwordm9pZAorZmE1MjZfc2V0dXAoY2hhciAqYXJncykKK3sKKwlp bnQgY3B1Y3RybCwgY3B1Y3RybG1hc2s7CisKKwljcHVjdHJsID0gQ1BVX0NPTlRST0xfTU1VX0VO QUJMRSB8IENQVV9DT05UUk9MXzMyQlBfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MXzMyQkRfRU5B QkxFIHwgQ1BVX0NPTlRST0xfU1lTVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfSUNfRU5BQkxF IHwgQ1BVX0NPTlRST0xfRENfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIHwg Q1BVX0NPTlRST0xfTEFCVF9FTkFCTEU7CisJY3B1Y3RybG1hc2sgPSBDUFVfQ09OVFJPTF9NTVVf RU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfMzJCRF9F TkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9JQ19FTkFC TEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUg fCBDUFVfQ09OVFJPTF9ST01fRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0JFTkRfRU5BQkxFIHwg Q1BVX0NPTlRST0xfQUZMVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfTEFCVF9FTkFCTEUgfCBD UFVfQ09OVFJPTF9CUFJEX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9DUENMSyB8IENQVV9DT05U Uk9MX1ZFQ1JFTE9DOworCisjaWZuZGVmIEFSTTMyX0RJU0FCTEVfQUxJR05NRU5UX0ZBVUxUUwor CWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQUZMVF9FTkFCTEU7CisjZW5kaWYKKworCWNwdWN0cmwg PSBwYXJzZV9jcHVfb3B0aW9ucyhhcmdzLCBmYTUyNl9vcHRpb25zLCBjcHVjdHJsKTsKKworI2lm ZGVmIF9fQVJNRUJfXworCWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQkVORF9FTkFCTEU7CisjZW5k aWYKKworCWlmICh2ZWN0b3JfcGFnZSA9PSBBUk1fVkVDVE9SU19ISUdIKQorCQljcHVjdHJsIHw9 IENQVV9DT05UUk9MX1ZFQ1JFTE9DOworCisJLyogQ2xlYXIgb3V0IHRoZSBjYWNoZSAqLworCWNw dV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyICov CisJY3RybCA9IGNwdWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9 CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBz dHJ1Y3QgY3B1X29wdGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJ QklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUp IH0sCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt L2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQorKysgYXJtL2FybS9jcHVmdW5j X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLyoJJE5ldEJTRDog Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQq LworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMu CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBN YXR0IFRob21hcyA8bWF0dEAzYW0tc29mdHdhcmUuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUJQ0FDSEVMSU5FX1NJWkUJ MTYKKworRU5UUlkoZmE1MjZfc2V0dHRiKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwg YzcsIGMxNCwgMAkvKiBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIx LCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUs IDYJLyogaW52YWxpZGF0ZSBCVEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkvKiBk cmFpbiB3cml0ZSBhbmQgZmlsbCBidWZmZXIgKi8KKworCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAs IDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1cGRhdGVkIHRoZSBUVEIg d2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkvKiBp bnZhbGlkYXRlIEkrRCBUTEIgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVt cHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIwLCByMAorCW1vdglwYywgbHIKKworLyoKKyAq IFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNoSURfU0UpCisJbWNyCXAx NSwgMCwgcjAsIGM4LCBjNywgMQkvKiBmbHVzaCBVdGxiIHNpbmdsZSBlbnRyeSAqLworCW1vdglw YywgbHIKKworLyoKKyAqIFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNo SV9TRSkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCS8qIGZsdXNoIEl0bGIgc2luZ2xlIGVu dHJ5ICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jcHVfc2xlZXApCisJbW92CXIwLCAj MAorLyoJbm9wCisJbm9wKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CS8qIFdhaXQgZm9y IGludGVycnVwdCovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1 ZikKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2gg Zmx1c2ggKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5U UlkoZmE1MjZfaWRjYWNoZV93Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIw LCBjNywgYzE0LCAwCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwg cjAsIGM3LCBjNSwgMAkvKiBpbnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj MTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUy Nl9pY2FjaGVfc3luY19hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUs IDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hl X3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyog Y2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkv KiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0 aW9ucworICovCitFTlRSWShmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0 MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIw LCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMo Q0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBj bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVf U0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworCW1jcglwMTUs IDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIK KworRU5UUlkoZmE1MjZfZGNhY2hlX3diX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJscwkx ZgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAwCS8qIGNsZWFuIGVu dGlyZSBEJCAqLworCWIJM2YKKworMToJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRSAtIDEp CisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwor MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJ cjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJ YmhpCTJiCisKKzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1 ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlh bmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwly MCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2 LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hF TElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92 CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4 NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwg cjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwg IyhDQUNIRUxJTkVfU0laRSAtIDEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8q IGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkIGVudHJ5ICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj NSwgMQkvKiBpbnZhbGlkYXRlIEkkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9T SVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisyOgltY3IJcDE1 LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxy CisKK0VOVFJZKGZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJo cwlfQ19MQUJFTChmYTUyNl9pY2FjaGVfc3luY19hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hF TElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5F X1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBl bnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRy eSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVM SU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJh aW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5j aHRndF9FKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFs aWRhdGUgQlRCIGNhY2hlICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3 aXRjaCkKKwkvKgorCSAqIENGX0NBQ0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVk IHByaW9yIHRvIHRoaXMuCisJICogVGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25s eSBrZXJuZWwgZGF0YSBhbmQgdGhlCisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWlu IG9ubHkga2VybmVsIGNvZGUsIGFuZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJl ZCBieSBhbGwgcHJvY2Vzc2VzLgorCSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkv KiBXcml0ZSB0aGUgVFRCICovCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBt dXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBj NywgMAkvKiBmbHVzaCB0aGUgSStEIHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxp bmUgaXMgZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgor CkluZGV4OiBhcm0vaW5jbHVkZS9jcHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUv Y3B1Y29uZi5oCShyZXZpc2lvbiAyMDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdv cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAy MDApICsJCQlcCiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmlu ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJ XAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBA QAogICovCiAjaWYgKGRlZmluZWQoQ1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8 fCBkZWZpbmVkKENQVV9BUk05KSB8fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZp bmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQo Q1BVX0lYUDEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVk KENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQ VV9GQTUyNikpCiAjZGVmaW5lCUFSTV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hf NAkwCkBAIC0xMjUsNyArMTI2LDcgQEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZp bmVkKENQVV9BUk03KSB8fCBkZWZpbmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVk KENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJ XAotICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBk ZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZB NTI2KSkKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1V X0dFTkVSSUMJCTAKSW5kZXg6IGFybS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh cm0vaW5jbHVkZS9jcHVmdW5jLmgJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2Nw dWZ1bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9j bG9ja19jb25maWcJKHVfaW50LCB1X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2 Cit2b2lkCWZhNTI2X3NldHVwCQkoY2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9p bnQgdHRiKTsKK3ZvaWQJZmE1MjZfY29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9j cHVfc2xlZXAJCShpbnQpOwordm9pZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lk CWZhNTI2X3RsYl9mbHVzaElEX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNo YnVmCSh2b2lkKTsKK3ZvaWQJZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lk CWZhNTI2X2ljYWNoZV9zeW5jX2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3Jh bmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hl X3diaW52X2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZz ZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJ KHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3di X3JhbmdlCSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lk Y2FjaGVfd2JpbnZfYWxsKHZvaWQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZt X29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVf U0ExMTAKIHZvaWQJc2ExMTBfc2V0dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250 ZXh0X3N3aXRjaAkodm9pZCk7CkBAIC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9B Uk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAg ZGVmaW5lZChDUFVfU0ExMTApIHx8IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVf U0ExMTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVf WFNDQUxFXzgwMzIxKSB8fAkgICAgIFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBk ZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8 fAkgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NB TEVfODEzNDIpCiAgIApJbmRleDogYXJtL2NvbmYvQ05TMTFYWE5BUy5oaW50cwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 Ci0tLSBhcm0vY29uZi9DTlMxMVhYTkFTLmhpbnRzCShyZXZpc2lvbiAwKQorKysgYXJtL2NvbmYv Q05TMTFYWE5BUy5oaW50cwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2N1cnJlbnRseSBu byBoaW50cwpJbmRleDogYXJtL2NvbmYvQ05TMTFYWE5BUwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vY29u Zi9DTlMxMVhYTkFTCShyZXZpc2lvbiAwKQorKysgYXJtL2NvbmYvQ05TMTFYWE5BUwkocmV2aXNp b24gMCkKQEAgLTAsMCArMSwxMjYgQEAKKyMgQ05TMTFYWE5BUyAtICBTdGFyU2VtaSBTVFI5MTA0 L0Nhdml1bSBDTlMxMTAyIE5BUworIyBrZXJuZWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciBGcmVl QlNEL2FybQorIworIyBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIGZpbGUsIHBsZWFzZSBy ZWFkIHRoZSBoYW5kYm9vayBzZWN0aW9uIG9uCisjIEtlcm5lbCBDb25maWd1cmF0aW9uIEZpbGVz OgorIworIyAgICBodHRwOi8vd3d3LkZyZWVCU0Qub3JnL2RvYy9lbl9VUy5JU084ODU5LTEvYm9v a3MvaGFuZGJvb2sva2VybmVsY29uZmlnLWNvbmZpZy5odG1sCisjCisjIFRoZSBoYW5kYm9vayBp cyBhbHNvIGF2YWlsYWJsZSBsb2NhbGx5IGluIC91c3Ivc2hhcmUvZG9jL2hhbmRib29rCisjIGlm IHlvdSd2ZSBpbnN0YWxsZWQgdGhlIGRvYyBkaXN0cmlidXRpb24sIG90aGVyd2lzZSBhbHdheXMg c2VlIHRoZQorIyBGcmVlQlNEIFdvcmxkIFdpZGUgV2ViIHNlcnZlciAoaHR0cDovL3d3dy5GcmVl QlNELm9yZy8pIGZvciB0aGUKKyMgbGF0ZXN0IGluZm9ybWF0aW9uLgorIworIyBBbiBleGhhdXN0 aXZlIGxpc3Qgb2Ygb3B0aW9ucyBhbmQgbW9yZSBkZXRhaWxlZCBleHBsYW5hdGlvbnMgb2YgdGhl CisjIGRldmljZSBsaW5lcyBpcyBhbHNvIHByZXNlbnQgaW4gdGhlIC4uLy4uL2NvbmYvTk9URVMg YW5kIE5PVEVTIGZpbGVzLiAKKyMgSWYgeW91IGFyZSBpbiBkb3VidCBhcyB0byB0aGUgcHVycG9z ZSBvciBuZWNlc3NpdHkgb2YgYSBsaW5lLCBjaGVjayBmaXJzdCAKKyMgaW4gTk9URVMuCisjCisj ICRGcmVlQlNEJAorCitpZGVudAkJQ05TMTFYWE5BUworCisjb3B0aW9ucyAJUEhZU0FERFI9MHgx MDAwMDAwMAorI29wdGlvbnMgCUtFUk5QSFlTQUREUj0weDEwMjAwMDAwCisjb3B0aW9ucyAJS0VS TlZJUlRBRERSPTB4YzAyMDAwMDAJCSMgVXNlZCBpbiBsZHNjcmlwdC5hcm0KKyNvcHRpb25zIAlG TEFTSEFERFI9MHg1MDAwMDAwMAorI29wdGlvbnMgCUxPQURFUlJBTUFERFI9MHgwMDAwMDAwMAor I29wdGlvbnMgCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgxMDAwMDAwMAorCitpbmNsdWRlCQki Li4vZWNvbmEvc3RkLmVjb25hIgorCisjVG8gc3RhdGljYWxseSBjb21waWxlIGluIGRldmljZSB3 aXJpbmcgaW5zdGVhZCBvZiAvYm9vdC9kZXZpY2UuaGludHMKK2hpbnRzCQkiQ05TMTFYWE5BUy5o aW50cyIJI0RlZmF1bHQgcGxhY2VzIHRvIGxvb2sgZm9yIGRldmljZXMuCittYWtlb3B0aW9ucwlN T0RVTEVTX09WRVJSSURFPSIiCisKK21ha2VvcHRpb25zCURFQlVHPS1nCQkjQnVpbGQga2VybmVs IHdpdGggZ2RiKDEpIGRlYnVnIHN5bWJvbHMKK29wdGlvbnMgCUhaPTEwMAorb3B0aW9ucyAJREVW SUNFX1BPTExJTkcKKworIyBEZWJ1Z2dpbmcgZm9yIHVzZSBpbiAtY3VycmVudAorb3B0aW9ucyAJ S0RCCisjb3B0aW9ucyAJR0RCCitvcHRpb25zIAlEREIJCQkjRW5hYmxlIHRoZSBrZXJuZWwgZGVi dWdnZXIKKyNvcHRpb25zIAlJTlZBUklBTlRTCQkjRW5hYmxlIGNhbGxzIG9mIGV4dHJhIHNhbml0 eSBjaGVja2luZworI29wdGlvbnMgCUlOVkFSSUFOVF9TVVBQT1JUCSNFeHRyYSBzYW5pdHkgY2hl Y2tzIG9mIGludGVybmFsIHN0cnVjdHVyZXMsIHJlcXVpcmVkIGJ5IElOVkFSSUFOVFMKKyNvcHRp b25zIAlXSVRORVNTCQkjRW5hYmxlIGNoZWNrcyB0byBkZXRlY3QgZGVhZGxvY2tzIGFuZCBjeWNs ZXMKKyMjb3B0aW9ucyAJV0lUTkVTU19TS0lQU1BJTgkjRG9uJ3QgcnVuIHdpdG5lc3Mgb24gc3Bp bmxvY2tzIGZvciBzcGVlZAorI29wdGlvbnMgCURJQUdOT1NUSUMKKworCisjb3B0aW9ucwkJQ09N UEFUX0ZSRUVCU0Q1Cisjb3B0aW9ucwkJQ09NUEFUX0ZSRUVCU0Q2Cisjb3B0aW9ucwkJQ09NUEFU X0ZSRUVCU0Q3CisKKworb3B0aW9ucyAJU0NIRURfVUxFCQkjVUxFIHNjaGVkdWxlcgorI29wdGlv bnMgCVNDSEVEXzRCU0QJCSM0QlNEIHNjaGVkdWxlcgorb3B0aW9ucyAJR0VPTV9QQVJUX0dQVAkJ IyBHVUlEIFBhcnRpdGlvbiBUYWJsZXMuCisjb3B0aW9ucyAJR0VPTV9QQVJUX0VCUgorI29wdGlv bnMgCUdFT01fUEFSVF9FQlJfQ09NUEFUCitvcHRpb25zIAlHRU9NX0xBQkVMCQkjIFByb3ZpZGVz IGxhYmVsaXphdGlvbgorCisKK29wdGlvbnMgCUlORVQJCQkjSW50ZXJORVR3b3JraW5nCitvcHRp b25zIAlJTkVUNgkJCSNJUHY2IGNvbW11bmljYXRpb25zIHByb3RvY29scworb3B0aW9ucyAJRkZT CQkJI0JlcmtlbGV5IEZhc3QgRmlsZXN5c3RlbQorb3B0aW9ucyAJU09GVFVQREFURVMJCSNFbmFi bGUgRkZTIHNvZnQgdXBkYXRlcyBzdXBwb3J0CitvcHRpb25zIAlVRlNfQUNMCQkJI1N1cHBvcnQg Zm9yIGFjY2VzcyBjb250cm9sIGxpc3RzCitvcHRpb25zIAlVRlNfRElSSEFTSAkJI0ltcHJvdmUg cGVyZm9ybWFuY2Ugb24gYmlnIGRpcmVjdG9yaWVzCitvcHRpb25zIAlORlNDTElFTlQJCSNOZXR3 b3JrIEZpbGVzeXN0ZW0gQ2xpZW50Cisjb3B0aW9ucyAJTkZTU0VSVkVSCQkjTmV0d29yayBGaWxl c3lzdGVtIFNlcnZlcgorI29wdGlvbnMgCU5GU0xPQ0tECQkjTmV0d29yayBMb2NrIE1hbmFnZXIK K29wdGlvbnMgCU5GU19ST09UCQkjTkZTIHVzYWJsZSBhcyAvLCByZXF1aXJlcyBORlNDTElFTlQK K29wdGlvbnMgCU1TRE9TRlMJCQkjTVNET1MgRmlsZXN5c3RlbQorI29wdGlvbnMgCUNEOTY2MAkJ CSNJU08gOTY2MCBGaWxlc3lzdGVtCisjb3B0aW9ucyAJUFJPQ0ZTCQkJI1Byb2Nlc3MgZmlsZXN5 c3RlbSAocmVxdWlyZXMgUFNFVURPRlMpCitvcHRpb25zIAlQU0VVRE9GUwkJI1BzZXVkby1maWxl c3lzdGVtIGZyYW1ld29yaworb3B0aW9ucyAJU0NTSV9ERUxBWT01MDAwCQkjRGVsYXkgKGluIG1z KSBiZWZvcmUgcHJvYmluZyBTQ1NJCitvcHRpb25zIAlLVFJBQ0UJCQkja3RyYWNlKDEpIHN1cHBv cnQKK29wdGlvbnMgCVNZU1ZTSE0JCQkjU1lTVi1zdHlsZSBzaGFyZWQgbWVtb3J5CitvcHRpb25z IAlTWVNWTVNHCQkJI1NZU1Ytc3R5bGUgbWVzc2FnZSBxdWV1ZXMKK29wdGlvbnMgCVNZU1ZTRU0J CQkjU1lTVi1zdHlsZSBzZW1hcGhvcmVzCitvcHRpb25zIAlfS1BPU0lYX1BSSU9SSVRZX1NDSEVE VUxJTkcgI1Bvc2l4IFAxMDAzXzFCIHJlYWwtdGltZSBleHRlbnNpb25zCitvcHRpb25zIAlNVVRF WF9OT0lOTElORQkJI011dGV4IGlubGluZXMgYXJlIHNwYWNlIGhvZ3MKK29wdGlvbnMgCVJXTE9D S19OT0lOTElORQkJI3J3bG9jayBpbmxpbmVzIGFyZSBzcGFjZSBob2dzCitvcHRpb25zIAlTWF9O T0lOTElORQkJI3N4IGlubGllbnMgYXJlIHNwYWNlIGhvZ3MKKyNvcHRpb25zIAlCT09UUAorI29w dGlvbnMgCUJPT1RQX05GU1JPT1QKKyNvcHRpb25zIAlCT09UUF9ORlNWMworI29wdGlvbnMgCUJP T1RQX1dJUkVEX1RPPW5wZTAKKyNvcHRpb25zIAlCT09UUF9DT01QQVQKKworI2RldmljZQkJcGNp CitkZXZpY2UJCXVhcnQKKworCitkZXZpY2UJCWZpcm13YXJlCitkZXZpY2UJCW1paQkJIyBNaW5p bWFsIG1paSByb3V0aW5lcworZGV2aWNlCQlldGhlcgorZGV2aWNlCQlicGYKKworZGV2aWNlCQlw dHkKK2RldmljZQkJbG9vcAorCitkZXZpY2UJCW1kCitkZXZpY2UgICAgICAgICAgcmFuZG9tICAg ICAgICAgICMgRW50cm9weSBkZXZpY2UKKworI29wdGlvbnMgCUFSTV9VU0VfU01BTExfQUxMT0MK KworZGV2aWNlCQl1c2IKKyNvcHRpb25zIAlVU0JfREVCVUcKK2RldmljZQkJb2hjaQorZGV2aWNl CQllaGNpCitkZXZpY2UJCXVtYXNzCitkZXZpY2UJCXNjYnVzCQkjIFNDU0kgYnVzIChyZXF1aXJl ZCBmb3IgU0NTSSkKK2RldmljZQkJZGEJCSMgRGlyZWN0IEFjY2VzcyAoZGlza3MpCitkZXZpY2UJ CXBhc3MKK2RldmljZSAJCWNmaQorCisjZGV2aWNlCQl1ZGF2CQkjIERhdmljb20gRE05NjAxRSBV U0IKKworZGV2aWNlCQlnZW9tX2xhYmVsCitkZXZpY2UJCWdlb21fam91cm5hbAorZGV2aWNlIAkJ Z2VvbV9wYXJ0X2JzZAorCitvcHRpb25zCQlST09UREVWTkFNRT1cInVmczpkYTBzMWFcIgpJbmRl eDogYXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYV92 YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkK QEAgLTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdy b2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0 aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklC VVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T RQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJ QlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xV RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT CisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9S IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg V0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg T0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9B Uk1fRUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJfSAorCitleHRlcm4gYnVzX3Nw YWNlX3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29mdGMgeworCWRldmljZV90IGRl djsKKwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3NoOwor CWJ1c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3N5 c3RlbV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlzdHJ1Y3Qgcm1hbiBlY19tZW1f cm1hbjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCBy ZXNvdXJjZXM7Cit9OworCit2b2lkCXBvd2VyX29uX25ldHdvcmtfaW50ZXJmYWNlCSh2b2lkKTsK K3Vuc2lnbmVkIGludAlnZXRfdGNsawkodm9pZCk7CisKKworI2VuZGlmCkluZGV4OiBhcm0vZWNv bmEvZmlsZXMuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZp c2lvbiAwKQorKysgYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx LDE0IEBACisjICRGcmVlQlNEICQKK2FybS9hcm0vY3B1ZnVuY19hc21fZmE1MjYuUwlzdGFuZGFy ZAorYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9lY29uYS5j CQkJc3RhbmRhcmQKK2FybS9lY29uYS90aW1lci5jCQkJc3RhbmRhcmQKK2FybS9lY29uYS91YXJ0 X2J1c19lYy5jCQlvcHRpb25hbAl1YXJ0Cithcm0vZWNvbmEvdWFydF9jcHVfZWMuYwkJb3B0aW9u YWwJdWFydAorZGV2L3VhcnQvdWFydF9kZXZfbnM4MjUwLmMJb3B0aW9uYWwJdWFydAorYXJtL2Fy bS9pcnFfZGlzcGF0Y2guUwkJc3RhbmRhcmQKK2FybS9hcm0vYnVzX3NwYWNlX2dlbmVyaWMuYwkJ c3RhbmRhcmQKK2FybS9lY29uYS9laGNpX2VidXMuYwlzdGFuZGFyZAllaGNpCithcm0vZWNvbmEv b2hjaV9lYy5jCXN0YW5kYXJkCW9oY2kKK2FybS9lY29uYS9pZl9lY2UuYwkJc3RhbmRhcmQKK2Fy bS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJCW9wdGlvbmFsCWNmaQpJbmRleDogYXJtL2Vjb25hL2Vj b25hX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvZWNvbmFfbWFjaGRlcC5jCShy ZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkocmV2aXNpb24gMCkKQEAg LTAsMCArMSwzOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9o byA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMpIDE5OTQtMTk5OCBNYXJrIEJy aW5pY29tYmUuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgQnJpbmkuCisgKiBBbGwgcmlnaHRzIHJl c2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgd3JpdHRl biBmb3IgQnJpbmkgYnkgTWFyayBCcmluaWNvbWJlCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0 aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdh cmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAq ICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBCcmluaS4K KyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9y IG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl ZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYworICogICAgcHJpb3Igd3JpdHRl biBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQlJJTkkg YGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNM VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICog TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg RElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEJSSU5JIE9SIENPTlRSSUJVVE9SUyBC RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICog U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF UlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJ TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICog T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ T1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICovCisKKyNpbmNsdWRlICJvcHRf bXNnYnVmLmgiCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi KTsKKworI2RlZmluZQlfQVJNMzJfQlVTX0RNQV9QUklWQVRFCisjaW5jbHVkZSA8c3lzL3BhcmFt Lmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3Byb3RvLmg+Cisj aW5jbHVkZSA8c3lzL3NpZ25hbHZhci5oPgorI2luY2x1ZGUgPHN5cy9pbWdhY3QuaD4KKyNpbmNs dWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2t0ci5oPgorI2luY2x1ZGUgPHN5cy9s aW5rZXIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K KyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMvcGNwdS5oPgorI2luY2x1ZGUg PHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgorI2luY2x1ZGUgPHN5cy9jb25z Lmg+CisjaW5jbHVkZSA8c3lzL2Jpby5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRl IDxzeXMvYnVmLmg+CisjaW5jbHVkZSA8c3lzL2V4ZWMuaD4KKyNpbmNsdWRlIDxzeXMva2RiLmg+ CisjaW5jbHVkZSA8c3lzL21zZ2J1Zi5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVnLmg+CisjaW5j bHVkZSA8bWFjaGluZS9jcHUuaD4KKworI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0v cG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2luY2x1ZGUgPHZtL3ZtX3BhZ2Uu aD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUgPHZtL3ZtX21hcC5oPgorI2lu Y2x1ZGUgPHZtL3Zub2RlX3BhZ2VyLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wbWFwLmg+CisjaW5j bHVkZSA8bWFjaGluZS92bXBhcmFtLmg+CisjaW5jbHVkZSA8bWFjaGluZS9wY2IuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL3VuZGVmaW5lZC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWFjaGRlcC5oPgor I2luY2x1ZGUgPG1hY2hpbmUvbWV0YWRhdGEuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2FybXJlZy5o PgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3JlYm9vdC5oPgorI2lu Y2x1ZGUgImVjb25hX3JlZy5oIgorCisvKiBQYWdlIHRhYmxlIGZvciBtYXBwaW5nIHByb2MwIHpl cm8gcGFnZSAqLworI2RlZmluZQlLRVJORUxfUFRfU1lTCQkwCisjZGVmaW5lCUtFUk5FTF9QVF9L RVJOCQkxCisjZGVmaW5lCUtFUk5FTF9QVF9LRVJOX05VTQkyMgorLyogTDIgdGFibGUgZm9yIG1h cHBpbmcgYWZ0ZXIga2VybmVsICovCisjZGVmaW5lCUtFUk5FTF9QVF9BRktFUk5FTAlLRVJORUxf UFRfS0VSTiArIEtFUk5FTF9QVF9LRVJOX05VTQorI2RlZmluZQlLRVJORUxfUFRfQUZLRVJORUxf TlVNCTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlzYWJsZSBieSBQQUdFX1NJWkUg LyBMMl9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5lCU5VTV9LRVJORUxfUFRTCShL RVJORUxfUFRfQUZLRVJORUwgKyBLRVJORUxfUFRfQUZLRVJORUxfTlVNKQorCisvKiBEZWZpbmUg dmFyaW91cyBzdGFjayBzaXplcyBpbiBwYWdlcyAqLworI2RlZmluZQlJUlFfU1RBQ0tfU0laRQkx CisjZGVmaW5lCUFCVF9TVEFDS19TSVpFCTEKKyNkZWZpbmUJVU5EX1NUQUNLX1NJWkUJMQorCitl eHRlcm4gdV9pbnQgZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7CitleHRlcm4gdV9pbnQgcHJl ZmV0Y2hfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVfaW50IHVuZGVmaW5lZF9oYW5k bGVyX2FkZHJlc3M7CisKK3N0cnVjdCBwdl9hZGRyIGtlcm5lbF9wdF90YWJsZVtOVU1fS0VSTkVM X1BUU107CisKK2V4dGVybiB2b2lkICpfZW5kOworCitleHRlcm4gaW50ICplbmQ7CisKK3N0cnVj dCBwY3B1IF9fcGNwdTsKK3N0cnVjdCBwY3B1ICpwY3B1cCA9ICZfX3BjcHU7CisKKy8qIFBoeXNp Y2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc29tZSBnbG9iYWwgcGFnZXMgKi8KKwordm1f cGFkZHJfdCBwaHlzX2F2YWlsWzEwXTsKK3ZtX3BhZGRyX3QgZHVtcF9hdmFpbFs0XTsKK3ZtX29m ZnNldF90IHBoeXNpY2FsX3BhZ2VzOworCitzdHJ1Y3QgcHZfYWRkciBzeXN0ZW1wYWdlOworc3Ry dWN0IHB2X2FkZHIgbXNnYnVmcHY7CitzdHJ1Y3QgcHZfYWRkciBpcnFzdGFjazsKK3N0cnVjdCBw dl9hZGRyIHVuZHN0YWNrOworc3RydWN0IHB2X2FkZHIgYWJ0c3RhY2s7CitzdHJ1Y3QgcHZfYWRk ciBrZXJuZWxzdGFjazsKKworc3RhdGljIHZvaWQgKmJvb3RfYXJnMTsKK3N0YXRpYyB2b2lkICpi b290X2FyZzI7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhcGZyYW1lIHByb2MwX3RmOworCisvKiBTdGF0 aWMgZGV2aWNlIG1hcHBpbmdzLiAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBwbWFwX2Rldm1hcCBl Y29uYV9kZXZtYXBbXSA9IHsKKwl7CisJCS8qCisJCSAqIFRoaXMgbWFwcyBERFIgU0RSQU0KKwkJ ICovCisJCUVDT05BX1NEUkFNX0JBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX1NEUkFNX0JBU0Us IC8qcGh5c2ljYWwqLworCQlFQ09OQV9TRFJBTV9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JF QUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwKKwkvKgorCSAqIE1hcCB0aGUg b24tYm9hcmQgZGV2aWNlcyBWQSA9PSBQQSBzbyB0aGF0IHdlIGNhbiBhY2Nlc3MgdGhlbQorCSAq IHdpdGggdGhlIE1NVSBvbiBvciBvZmYuCisJICovCisJeworCQkvKgorCQkgKiBUaGlzIG1hcHMg dGhlIGludGVycnVwdCBjb250cm9sbGVyLCB0aGUgVUFSVAorCQkgKiBhbmQgdGhlIHRpbWVyLgor CQkgKi8KKwkJRUNPTkFfSU9fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfSU9fQkFTRSwgLypw aHlzaWNhbCovCisJCUVDT05BX0lPX1NJWkUsIC8qc2l6ZSovCisJCVZNX1BST1RfUkVBRHxWTV9Q Uk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJLyoKKwkJICogT0hDSSArIEVI Q0kKKwkJICovCisJCUVDT05BX09IQ0lfVkJBU0UsIC8qdmlydHVhbCovCisJCUVDT05BX09IQ0lf UEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9VU0JfU0laRSwgLypzaXplKi8KKwkJVk1fUFJP VF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkvKgorCQkg KiBDRkkKKwkJICovCisJCUVDT05BX0NGSV9WQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfQ0ZJ X1BCQVNFLCAvKnBoeXNpY2FsKi8KKwkJRUNPTkFfQ0ZJX1NJWkUsCisJCVZNX1BST1RfUkVBRHxW TV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJMCwKKwkJMCwKKwkJMCwK KwkJMCwKKwkJMCwKKwl9Cit9OworCisKK3ZvaWQgKgoraW5pdGFybSh2b2lkICphcmcsIHZvaWQg KmFyZzIpCit7CisJc3RydWN0IHB2X2FkZHIgIGtlcm5lbF9sMXB0OworCXZvbGF0aWxlIHVpbnQz Ml90ICogZGRyID0gKHVpbnQzMl90ICopMHg0MDAwMDAwQzsKKwlpbnQgbG9vcCwgaTsKKwl1X2lu dCBsMXBhZ2V0YWJsZTsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47CisJdm1fb2Zmc2V0X3QgZnJl ZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl1aW50MzJfdCBtZW1zaXplOworCWlu dCBtZW1faW5mbzsKKworCisJYm9vdF9hcmcxID0gYXJnOworCWJvb3RfYXJnMiA9IGFyZzI7CisJ Ym9vdGhvd3RvID0gUkJfVkVSQk9TRTsKKworCXNldF9jcHVmdW5jcygpOworCWxhc3RhZGRyID0g ZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0KHBjcHVwLCAwLCBzaXplb2Yoc3Ry dWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0aHJlYWQwKTsKKworCisJZnJlZW1l bXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9NQVNLOworCS8qIERlZmluZSBh IG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9uICovCisjZGVmaW5lCXZhbGxvY19w YWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJYWxsb2NfcGFnZXMoKHZhcikucHZf dmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9ICh2YXIpLnB2X3ZhICsgKEtFUk5Q SFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJYWxsb2NfcGFnZXModmFyLCBucCkJ CQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVtZW1wb3MgKz0gKG5wICogUEFHRV9T SVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwgKChucCkgKiBQQUdFX1NJWkUpKTsK KworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9TSVpFKSAmIChMMV9UQUJMRV9TSVpF IC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9TSVpFOworCXZhbGxvY19wYWdlcyhr ZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0laRSk7CisJZm9yIChsb29wID0gMDsg bG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJaWYgKCEobG9vcCAlIChQQUdFX1NJ WkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFsbG9jX3BhZ2VzKGtlcm5lbF9wdF90 YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8gUEFHRV9TSVpFKTsKKwkJfSBlbHNl IHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9IGZyZWVtZW1wb3MgLQorCQkJICAg IChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVfUkVBTCkpICoKKwkJCSAgICBMMl9U QUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVbbG9vcF0ucHZfcGEgPQorCQkJICAg IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5WSVJUQUREUiArCisJCQkgICAgS0VS TlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisJLyoKKwkgKiBBbGxvY2F0ZSBhIHBhZ2UgZm9y IHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAKKwkgKiBUaGlzIHBhZ2Ugd2ls bCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBjYW4gYmUKKwkgKiBzaGFyZWQg YnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMoc3lzdGVtcGFnZSwgMSk7CisK KwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLworCXZhbGxvY19wYWdlcyhpcnFz dGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhhYnRzdGFjaywgQUJUX1NUQUNL X1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NUQUNLX1NJWkUpOworCXZhbGxv Y19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2YWxsb2NfcGFnZXMobXNnYnVm cHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpFKTsKKworCS8qCisJICogTm93 IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0YWJsZQorCSAqIFdlIHN0YXJ0 IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhlIEwxLgorCSAqIFRoaXMgbWVh bnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRlciBvbiBpZiBuZWNlc3NhcnkK KwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3ZhOworCisJLyogTWFwIHRoZSBM MiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8KKwlwbWFwX2xpbmtfbDJwdChs MXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJO RUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9QVF9LRVJOX05VTTsgaSsrKQor CQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0UgKyBpICogTDFfU19TSVpFLAor CQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiArIGldKTsKKwlwbWFwX21hcF9j aHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAorCSAgICgoKHVpbnQzMl90KWxh c3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFHRV9TSVpFIC0gMSksCisJICAg IFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCWFmdGVya2VybiA9IHJv dW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFfU19TSVpFIC0gMSkpOworCWZv ciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBpKyspIHsKKwkJcG1hcF9saW5r X2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9TX1NJWkUsCisJCSAgICAma2Vy bmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsKKwl9CisKKwkvKiBNYXAgdGhl IHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFnZXRhYmxlLCBBUk1fVkVDVE9S U19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklU RSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBwYWdlcyAqLworCXBtYXBfbWFw X2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJxc3RhY2sucHZfcGEsCisJICAg IElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwg UFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgYWJ0c3RhY2sucHZfdmEs IGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1fUFJP VF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdl dGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwKKwkgICAgVU5EX1NUQUNLX1NJ WkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOwor CXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFjay5wdl92YSwga2VybmVsc3Rh Y2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZN X1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwg a2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAorCSAgICBMMV9UQUJMRV9TSVpF LCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VUQUJMRSk7CisJcG1hcF9tYXBf Y2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2didWZwdi5wdl9wYSwKKwkgICAg TVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJ Zm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJcG1hcF9t YXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSwKKwkJICAg IGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVfU0laRSwKKwkJICAgIFZNX1BS T1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsKKwl9CisKKwlwbWFwX2Rldm1h cF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25hX2Rldm1hcCk7CisJY3B1X2RvbWFpbnMoKERP TUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSkgfCBET01BSU5fQ0xJRU5UKTsK KwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCWNwdV90bGJfZmx1c2hJRCgpOworCWNwdV9k b21haW5zKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSk7CisJY25pbml0 KCk7CisJbWVtX2luZm8gPSAoKCpkZHIpID4+IDQpICYgMHgzOworCW1lbXNpemUgPSAoODw8bWVt X2luZm8pKjEwMjQqMTAyNDsKKwlwaHlzbWVtID0gbWVtc2l6ZSAvIFBBR0VfU0laRTsKKworCS8q CisJICogUGFnZXMgd2VyZSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBzZWNvbmRhcnkgYm9vdHN0cmFw IGZvciB0aGUKKwkgKiBzdGFja3MgZm9yIGRpZmZlcmVudCBDUFUgbW9kZXMuCisJICogV2UgbXVz dCBub3cgc2V0IHRoZSByMTMgcmVnaXN0ZXJzIGluIHRoZSBkaWZmZXJlbnQgQ1BVIG1vZGVzIHRv CisJICogcG9pbnQgdG8gdGhlc2Ugc3RhY2tzLgorCSAqIFNpbmNlIHRoZSBBUk0gc3RhY2tzIHVz ZSBTVE1GRCBldGMuIHdlIG11c3Qgc2V0IHIxMyB0byB0aGUgdG9wIGVuZAorCSAqIG9mIHRoZSBz dGFjayBtZW1vcnkuCisJICovCisJY3B1X2NvbnRyb2woQ1BVX0NPTlRST0xfTU1VX0VOQUJMRSwg Q1BVX0NPTlRST0xfTU1VX0VOQUJMRSk7CisKKwlzZXRfc3RhY2twdHIoUFNSX0lSUTMyX01PREUs CisJICAgIGlycXN0YWNrLnB2X3ZhICsgSVJRX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUpOworCXNl dF9zdGFja3B0cihQU1JfQUJUMzJfTU9ERSwKKwkgICAgYWJ0c3RhY2sucHZfdmEgKyBBQlRfU1RB Q0tfU0laRSAqIFBBR0VfU0laRSk7CisJc2V0X3N0YWNrcHRyKFBTUl9VTkQzMl9NT0RFLAorCSAg ICB1bmRzdGFjay5wdl92YSArIFVORF9TVEFDS19TSVpFICogUEFHRV9TSVpFKTsKKworCS8qCisJ ICogV2UgbXVzdCBub3cgY2xlYW4gdGhlIGNhY2hlIGFnYWluLi4uLgorCSAqIENsZWFuaW5nIG1h eSBiZSBkb25lIGJ5IHJlYWRpbmcgbmV3IGRhdGEgdG8gZGlzcGxhY2UgYW55CisJICogZGlydHkg ZGF0YSBpbiB0aGUgY2FjaGUuIFRoaXMgd2lsbCBoYXZlIGhhcHBlbmVkIGluIHNldHR0YigpCisJ ICogYnV0IHNpbmNlIHdlIGFyZSBib290IHN0cmFwcGluZyB0aGUgYWRkcmVzc2VzIHVzZWQgZm9y IHRoZSByZWFkCisJICogbWF5IGhhdmUganVzdCBiZWVuIHJlbWFwcGVkIGFuZCB0aHVzIHRoZSBj YWNoZSBjb3VsZCBiZSBvdXQKKwkgKiBvZiBzeW5jLiBBIHJlLWNsZWFuIGFmdGVyIHRoZSBzd2l0 Y2ggd2lsbCBjdXJlIHRoaXMuCisJICogQWZ0ZXIgYm9vdGluZyB0aGVyZSBhcmUgbm8gZ3Jvc3Mg cmVsb2NhdGlvbnMgb2YgdGhlIGtlcm5lbCB0aHVzCisJICogdGhpcyBwcm9ibGVtIHdpbGwgbm90 IG9jY3VyIGFmdGVyIGluaXRhcm0oKS4KKwkgKi8KKwljcHVfaWRjYWNoZV93Ymludl9hbGwoKTsK KworCS8qIFNldCBzdGFjayBmb3IgZXhjZXB0aW9uIGhhbmRsZXJzICovCisJZGF0YV9hYm9ydF9o YW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fi b3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVu ZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91 bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFk MCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRk X3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdF UyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRo cmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAu dGRfcGNiOworCisJYXJtX3ZlY3Rvcl9pbml0KEFSTV9WRUNUT1JTX0hJR0gsIEFSTV9WRUNfQUxM KTsKKworCXBtYXBfY3VybWF4a3ZhZGRyID0gYWZ0ZXJrZXJuICsgTDFfU19TSVpFICogKEtFUk5F TF9QVF9LRVJOX05VTSAtIDEpOworCisJLyoKKwkgKiBBUk1fVVNFX1NNQUxMX0FMTE9DIHVzZXMg ZHVtcF9hdmFpbCwgc28gaXQgbXVzdCBiZSBmaWxsZWQgYmVmb3JlCisJICogY2FsbGluZyBwbWFw X2Jvb3RzdHJhcC4KKwkgKi8KKwlkdW1wX2F2YWlsWzBdID0gUEhZU0FERFI7CisJZHVtcF9hdmFp bFsxXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlkdW1wX2F2YWlsWzJdID0gMDsKKwlkdW1wX2F2 YWlsWzNdID0gMDsKKworCXBtYXBfYm9vdHN0cmFwKGZyZWVtZW1wb3MsCisJICAgIEtFUk5WSVJU QUREUiArIDMgKiBtZW1zaXplLAorCSAgICAma2VybmVsX2wxcHQpOworCisJbXNnYnVmcCA9ICh2 b2lkKiltc2didWZwdi5wdl92YTsKKwltc2didWZpbml0KG1zZ2J1ZnAsIE1TR0JVRl9TSVpFKTsK KworCW11dGV4X2luaXQoKTsKKworCWkgPSAwOworI2lmIFBIWVNBRERSICE9IEtFUk5QSFlTQURE UgorCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSOworCXBoeXNfYXZhaWxbaSsrXSA9IEtFUk5Q SFlTQUREUjsKKyNlbmRpZgorCXBoeXNfYXZhaWxbaSsrXSA9IHZpcnR1YWxfYXZhaWwgLSBLRVJO VklSVEFERFIgKyBLRVJOUEhZU0FERFI7CisKKwlwaHlzX2F2YWlsW2krK10gPSBQSFlTQUREUiAr IG1lbXNpemU7CisJcGh5c19hdmFpbFtpKytdID0gMDsKKwlwaHlzX2F2YWlsW2krK10gPSAwOwor CS8qIERvIGJhc2ljIHR1bmluZywgaHogZXRjICovCisJaW5pdF9wYXJhbTEoKTsKKwlpbml0X3Bh cmFtMihwaHlzbWVtKTsKKwlrZGJfaW5pdCgpOworCisJcmV0dXJuICgodm9pZCAqKShrZXJuZWxz dGFjay5wdl92YSArIFVTUEFDRV9TVkNfU1RBQ0tfVE9QIC0KKwkgICAgc2l6ZW9mKHN0cnVjdCBw Y2IpKSk7Cit9CkluZGV4OiBhcm0vZWNvbmEvaWZfZWNlLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj b25hL2lmX2VjZS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2lmX2VjZS5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDE5NDggQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFu ZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgor ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0 cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1 bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBD T05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1Ig Q09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMg KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF IEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S IEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJ VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ TiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j bHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6IHNyYy9zeXMvYXJtL2Vjb25h L2lmX2VjZS5jJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5 c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNp bmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxz eXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0 Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNp bmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxuZXQvZXRoZXJuZXQuaD4KKyNp bmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJwLmg+CisjaW5jbHVkZSA8bmV0 L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+CisjaW5jbHVkZSA8bmV0L2lmX3R5 cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisKKyNpZmRlZiBJTkVUCisjaW5j bHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNs dWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgor CisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9icGZkZXNjLmg+CisKKyNpbmNs dWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkvbWlpdmFyLmg+CisKKyNpbmNs dWRlIDxhcm0vZWNvbmEvaWZfZWNlcmVnLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXZh ci5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworI2luY2x1ZGUgPG1hY2hp bmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKy8qICJkZXZpY2UgbWlpYnVz IiByZXF1aXJlZC4gIFNlZSBHRU5FUklDIGlmIHlvdSBnZXQgZXJyb3JzIGhlcmUuICovCisjaW5j bHVkZSAibWlpYnVzX2lmLmgiCisKK3N0YXRpYyB1aW50OF90Cit2bGFuMF9tYWNbRVRIRVJfQURE Ul9MRU5dID0gezB4MDAsIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4MTl9OworCisvKgorICog Qm9vdCBsb2FkZXIgZXhwZWN0cyB0aGUgaGFyZHdhcmUgc3RhdGUgdG8gYmUgdGhlIHNhbWUgd2hl biB3ZQorICogcmVzdGFydCB0aGUgZGV2aWNlICh3YXJtIGJvb3QpLCBzbyB3ZSBuZWVkIHRvIHNh dmUgdGhlIGluaXRpYWwKKyAqIGNvbmZpZyB2YWx1ZXMuCisgKi8KK2ludCBpbml0aWFsX3N3aXRj aF9jb25maWc7CitpbnQgaW5pdGlhbF9jcHVfY29uZmlnOworaW50IGluaXRpYWxfcG9ydDBfY29u ZmlnOworaW50IGluaXRpYWxfcG9ydDFfY29uZmlnOworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90 CityZWFkXzQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0 dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCit3cml0ZV80KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMy X3QgdmFsKQoreworCisJYnVzX3dyaXRlXzQoc2MtPm1lbV9yZXMsIG9mZiwgdmFsKTsKK30KKwor I2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNjX210eCkKKyNkZWZpbmUJ RUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+c2NfbXR4KQorI2RlZmluZQlFQ0Vf TE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eCwgZGV2aWNlX2dldF9uYW1l dW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xPQ0ssIE1UWF9ERUYpCisKKyNkZWZp bmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNjX210eF90eCkKKyNkZWZpbmUJ RUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5zY19tdHhfdHgpCisjZGVmaW5l CUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfdHgsIGRldmlj ZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNFIFRYIExvY2siLCBNVFhfREVGKQor CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X2Ns ZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9zYykJbXR4X3VubG9jaygmKF9zYykt PnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5VUExPQ0tfSU5JVChfc2MpIFwKKwlt dHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRl diksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RFRikKKworI2RlZmluZQlFQ0VfUlhM T0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4KQorI2RlZmluZQlFQ0VfUlhVTkxP Q0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9yeCkKKyNkZWZpbmUJRUNFX1JYTE9D S19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eF9yeCwgZGV2aWNlX2dldF9uYW1l dW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIsIE1UWF9ERUYpCisKKyNkZWZpbmUJ RUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eCk7CisjZGVmaW5l CUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF90eCk7Cisj ZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9y eCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9ZKF9zYykJXAorCW10eF9kZXN0cm95 KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlFQ0VfQVNTRVJUX0xPQ0tFRChfc2Mp CW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7CisjZGVmaW5lCUVDRV9BU1NFUlRf VU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210eCwgTUFfTk9UT1dORUQpOworCitz dGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8qIGlmbmV0IGVudHJ5IHBvaW50cyAq LworCitzdGF0aWMgdm9pZAllY2Vpbml0X2xvY2tlZCh2b2lkICopOworc3RhdGljIHZvaWQJZWNl c3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3RhdGljIHZvaWQJZWNlaW5pdCh2b2lk ICopOworc3RhdGljIHZvaWQJZWNlc3RhcnQoc3RydWN0IGlmbmV0ICopOworc3RhdGljIHZvaWQJ ZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGljIGludAllY2Vpb2N0bChzdHJ1Y3Qg aWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8qIGJ1cyBlbnRyeSBwb2ludHMgKi8K Kworc3RhdGljIGludAllY2VfcHJvYmUoZGV2aWNlX3QgZGV2KTsKK3N0YXRpYyBpbnQJZWNlX2F0 dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAllY2VfZGV0YWNoKGRldmljZV90IGRldik7 CitzdGF0aWMgdm9pZAllY2VfaW50cih2b2lkICopOworc3RhdGljIHZvaWQJZWNlX2ludHJfcWYo dm9pZCAqKTsKK3N0YXRpYyB2b2lkCWVjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2MpOworCisvKiBo ZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQJZWNlX2FjdGl2YXRlKGRldmljZV90IGRldik7 CitzdGF0aWMgdm9pZAllY2VfZGVhY3RpdmF0ZShkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAll Y2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOworc3RhdGljIHZvaWQJZWNlX2lmbWVk aWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRpYXJlcSAqaWZtcik7CitzdGF0 aWMgaW50CWVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsK K3N0YXRpYyB2b2lkCWVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVh ZGRyKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2NwdV9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNj KTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBp bnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQJc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms IGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0YXRpYyB2b2lkCXNldF92bGFuX3Zp ZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3RhdGljIHZvaWQJc2V0X3ZsYW5f bWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7CitzdGF0aWMgdm9pZAlzZXRf dmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKTsKK3N0YXRpYyBpbnQJaGFy ZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0aWMgdm9pZAllY2VfaW50cl9y eF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBjb3VudCk7CisKK3N0YXRpYyB2b2lk CWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyB2b2lk CWVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZv aWQJZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKTsKK3N0YXRp YyB2b2lkCWVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRpbmcgX191bnVzZWQpOworc3Rh dGljIHZvaWQJZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2Vk KTsKKworc3RhdGljIGludAllY2VfYWxsb2NhdGVfZG1hKHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsK Kworc3RhdGljIHZvaWQJZWNlX2ludHJfdHgodm9pZCAqeHNjKTsKKworc3RhdGljIHZvaWQJY2xl YXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGludCBpbmNsdWRlX3RoaXNfbWFj KTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKmVj LAorCSAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCSAgICBpbnQgZmlyc3QpOworCisvKlBIWSBy ZWxhdGVkIGZ1bmN0aW9ucyovCitzdGF0aWMgaW5saW5lIGludAorcGh5X3JlYWQoc3RydWN0IGVj ZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcpCit7CisJaW50IHZhbDsKKwlpbnQgaWk7CisJ aW50IHN0YXR1czsKKworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9MLCBQSFlfUldfT0spOworCXdy aXRlXzQoc2MsIFBIWV9DT05UUk9MLAorCSAgICAoUEhZX0FERFJFU1MocGh5KXxQSFlfUkVBRF9D T01NQU5EIHwKKwkgICAgUEhZX1JFR0lTVEVSKHJlZykpKTsKKworCWZvciAoaWkgPSAwOyBpaSA8 IDB4MTAwMDsgaWkrKykgeworCQlzdGF0dXMgPSByZWFkXzQoc2MsIFBIWV9DT05UUk9MKTsKKwkJ aWYgKHN0YXR1cyAmIFBIWV9SV19PSykgeworCQkJLyogQ2xlYXIgdGhlIHJ3X29rIHN0YXR1cywg YW5kIGNsZWFyIG90aGVyCisJCQkgKiBiaXRzIHZhbHVlLiAqLworCQkJd3JpdGVfNChzYywgUEhZ X0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VUX0RBVEEoc3RhdHVzKTsKKwkJ CXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwgaW50IHJlZywg aW50IGRhdGEpCit7CisJaW50IGlpOworCisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9S V19PSyk7CisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsCisJICAgIFBIWV9BRERSRVNTKHBoeSkg fCBQSFlfUkVHSVNURVIocmVnKSB8CisJICAgIFBIWV9XUklURV9DT01NQU5EIHwgUEhZX0RBVEEo ZGF0YSkpOworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykgeworCQlpZiAocmVhZF80 KHNjLCBQSFlfQ09OVFJPTCkgJiBQSFlfUldfT0spIHsKKwkJCS8qIENsZWFyIHRoZSByd19vayBz dGF0dXMsIGFuZCBjbGVhciBvdGhlcgorCQkJICogYml0cyB2YWx1ZS4KKwkJCSAqLworCQkJd3Jp dGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQlyZXR1cm47CisJCX0KKwl9Cit9 CisKK3N0YXRpYyBpbnQgZ2V0X3BoeV90eXBlKHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCXVp bnQxNl90IHBoeTBfaWQgPSAwLCBwaHkxX2lkID0gMDsKKworCS8qCisJICogVXNlIFNNSSAoTURD L01ESU8pIHRvIHJlYWQgTGluayBQYXJ0bmVyJ3MgUEhZIElkZW50aWZpZXIKKwkgKiBSZWdpc3Rl ciAxLgorCSAqLworCXBoeTBfaWQgPSBwaHlfcmVhZChzYywgMCwgMHgyKTsKKwlwaHkxX2lkID0g cGh5X3JlYWQoc2MsIDEsIDB4Mik7CisKKwlpZiAoKHBoeTBfaWQgPT0gMHhGRkZGKSAmJiAocGh5 MV9pZCA9PSAweDAwMEYpKQorCQlyZXR1cm4gKEFTSVhfR0lHQV9QSFkpOworCWVsc2UgaWYgKChw aHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHgwMjQzKSkKKwkJcmV0dXJuIChUV09f U0lOR0xFX1BIWSk7CisJZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhGRkZGKSAmJiAocGh5MV9pZCA9 PSAweDAwMDcpKQorCQlyZXR1cm4gKFZTQzg2MDFfR0lHQV9QSFkpOworCWVsc2UgaWYgKChwaHkw X2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHhGRkZGKSkKKwkJcmV0dXJuIChJQ19QTFVT X1BIWSk7CisKKwlyZXR1cm4gKE5PVF9GT1VORF9QSFkpOworfQorCitzdGF0aWMgaW50CitlY2Vf cHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIEV0 aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQorCisKK3N0YXRpYyBpbnQKK2Vj ZV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCXN0cnVj dCBpZm5ldCAqaWZwID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzY3RsX2N0eF9saXN0ICpzY3R4OworCXN0 cnVjdCBzeXNjdGxfb2lkICpzb2lkOworCXVfY2hhciBlYWRkcltFVEhFUl9BRERSX0xFTl07CisJ aW50IGVycjsKKwlpbnQgaSwgcmlkOworCXVpbnQzMl90IHJuZDsKKworCWVyciA9IDA7CisKKwlz YyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXNjLT5kZXYgPSBkZXY7CisKKwlyaWQgPSAw OworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfTUVN T1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPm1lbV9yZXMgPT0gTlVMTCkK KwkJZ290byBvdXQ7CisKKwlwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSgpOworCisJcmlkID0g MDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lT X1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3N0YXR1 cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7CisJLypUU1RDOiBGbS1Td2l0Y2gt VHgtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3R4ID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShk ZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUpOworCWlmIChzYy0+aXJxX3Jl c190eCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDI7CisJLypGU1JDOiBGbS1Td2l0 Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1c19hbGxvY19yZXNvdXJjZV9h bnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPmly cV9yZXNfcmVjID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0gNDsKKwkvKkZTUUY6IEZt LVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9IGJ1c19hbGxvY19yZXNvdXJj ZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2Mt PmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwllcnIgPSBlY2VfYWN0aXZhdGUo ZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFN5c2N0bHMgKi8KKwlzY3R4ID0g ZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7CisJc29pZCA9IGRldmljZV9nZXRfc3lzY3RsX3Ry ZWUoZGV2KTsKKworCUVDRV9MT0NLX0lOSVQoc2MpOworCisJY2FsbG91dF9pbml0X210eCgmc2Mt PnRpY2tfY2gsICZzYy0+c2NfbXR4LCAwKTsKKworCWlmICgoZXJyID0gZWNlX2dldF9tYWMoc2Ms IGVhZGRyKSkgIT0gMCkgeworCQkvKiBObyBNQUMgYWRkcmVzcyBjb25maWd1cmVkLiBHZW5lcmF0 ZSB0aGUgcmFuZG9tIG9uZS4gKi8KKwkJaWYgKGJvb3R2ZXJib3NlKQorCQkJZGV2aWNlX3ByaW50 ZihkZXYsCisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVybmV0IGFkZHJlc3MuXG4iKTsK KwkJcm5kID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9hZS5jL2lmX2F0ZS5jKi8KKwkJ LyoKKwkJICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkgYXNzaWduZWQgYWRkcmVzcy4g J2InCisJCSAqIGlzIDB4NjIsIHdoaWNoIGhhcyB0aGUgbG9jYWxseSBhc3NpZ25lZCBiaXQgc2V0 LCBhbmQKKwkJICogdGhlIGJyb2FkY2FzdC9tdWx0aWNhc3QgYml0IGNsZWFyLgorCQkgKi8KKwkJ ZWFkZHJbMF0gPSAnYic7CisJCWVhZGRyWzFdID0gJ3MnOworCQllYWRkclsyXSA9ICdkJzsKKwkJ ZWFkZHJbM10gPSAocm5kID4+IDE2KSAmIDB4ZmY7CisJCWVhZGRyWzRdID0gKHJuZCA+PiA4KSAm IDB4ZmY7CisJCWVhZGRyWzVdID0gcm5kICYgMHhmZjsKKworCQlmb3IgKGkgPSAwOyBpIDwgRVRI RVJfQUREUl9MRU47IGkrKykKKwkJCWVhZGRyW2ldID0gdmxhbjBfbWFjW2ldOworCX0KKwllY2Vf c2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBpZl9hbGxvYyhJRlRfRVRIRVIp OworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMsIGVjZV9pZm1lZGlhX3VwZCwK KwkJICAgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJDYW5ub3Qg ZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87CisJCWdvdG8gb3V0OworCX0KKwlpZnAt PmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZwLCBkZXZpY2VfZ2V0X25hbWUoZGV2KSwg ZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZfZmxhZ3MgPSBJRkZfQlJPQURDQVNUIHwg SUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJaWZwLT5pZl9jYXBhYmlsaXRpZXMgPSBJ RkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0ID0gKENTVU1fSVAgfCBDU1VNX1RDUCB8 IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+aWZfY2FwYWJpbGl0aWVzOwor CWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lvY3RsID0gZWNlaW9jdGw7CisJ aWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5pZnFfZHJ2X21heGxlbiA9IEVD RV9NQVhfVFhfQlVGRkVSUyAtIDE7CisJSUZRX1NFVF9NQVhMRU4oJmlmcC0+aWZfc25kLCBFQ0Vf TUFYX1RYX0JVRkZFUlMgLSAxKTsKKwlJRlFfU0VUX1JFQURZKCZpZnAtPmlmX3NuZCk7CisKKwkv KiBDcmVhdGUgbG9jYWwgdGFza3EuICovCisKKwlUQVNLX0lOSVQoJnNjLT5zY19pbnRyX3Rhc2ss IDAsIGVjZV9pbnRyX3Rhc2ssIHNjKTsKKwlUQVNLX0lOSVQoJnNjLT5zY190eF90YXNrLCAxLCBl Y2VfdHhfdGFzaywgaWZwKTsKKwlUQVNLX0lOSVQoJnNjLT5zY19jbGVhbnVwX3Rhc2ssIDIsIGVj ZV9jbGVhbnVwX3Rhc2ssIHNjKTsKKwlzYy0+c2NfdHEgPSB0YXNrcXVldWVfY3JlYXRlX2Zhc3Qo ImVjZV90YXNrcSIsIE1fV0FJVE9LLAorCSAgICB0YXNrcXVldWVfdGhyZWFkX2VucXVldWUsCisJ ICAgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJp bnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRhc2txdWV1ZVxuIik7CisJCWdvdG8gb3V0 OworCX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOworCisJLyoKKwkgKiBBY3RpdmF0 ZSBpbnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jl c19yZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkgICAgTlVMTCwgZWNlX2ludHIs IHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7 CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNf c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywKKwkgICAgSU5UUl9UWVBFX05FVCB8 IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLCBlY2VfaW50cl9zdGF0dXMsIHNjLCAmc2MtPmludHJo YW5kX3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0Vf TE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJZXJyID0gYnVzX3NldHVwX2lu dHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAg ICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNjLT5pbnRyaGFuZF9xZik7CisKKwlpZiAoZXJyKSB7 CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3Rv IG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3R4LCBJ TlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEwsIGVjZV9pbnRyX3R4LCBzYywg JnNjLT5pbnRyaGFuZF90eCk7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7 CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwlFQ0VfVFhMT0NL X0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNFX0NMRUFOVVBMT0NLX0lOSVQo c2MpOworCisJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNlcy4gKi8KKwl3cml0ZV80KHNj LCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisKKwkvKiBFbmFibGUgcG9ydCAwLiAqLwor CXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+ KFBPUlRfRElTQUJMRSkpOworCisJdGFza3F1ZXVlX3N0YXJ0X3RocmVhZHMoJnNjLT5zY190cSwg MSwgUElfTkVULCAiJXMgdGFza3EiLAorCSAgICBkZXZpY2VfZ2V0X25hbWV1bml0KHNjLT5kZXYp KTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0ZShkZXYpOworCWlmIChlcnIg JiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIpOworfQorCitzdGF0aWMgaW50 CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwll Y2VzdG9wKHNjKTsKKwlpZiAoaWZwICE9IE5VTEwpIHsKKwkJZXRoZXJfaWZkZXRhY2goaWZwKTsK KwkJaWZfZnJlZShpZnApOworCX0KKwllY2VfZGVhY3RpdmF0ZShkZXYpOworCXJldHVybiAoMCk7 Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICphcmcsIGJ1c19kbWFfc2VnbWVu dF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1X2ludDMyX3QgKnBhZGRyOwor CUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Ygc2VnbWVudHMsIHNob3VsZCBi ZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3MtPmRzX2FkZHI7Cit9CisKK3N0 YXRpYyBpbnQKK2VjZV9hbGxvY19kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK KwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgYW5kIERN QSBzYWZlIG1lbW9yeSBmb3IgVFgvUlggZGVzY3JpcHRvcnMuICovCisJZXJyb3IgPSBidXNfZG1h X3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsCS8qIHBhcmVudCAqLworCSAgICAxNiwgMCwg LyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJ LyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogaGlnaGFkZHIgKi8KKwkg ICAgTlVMTCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJICAgIHNpemVvZihl dGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIC8qIG1heCBzaXplICovCisJICAgIDEs IC8qbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JV RkZFUlMsCisJICAgIDAsIC8qIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCS8qIGxvY2tmdW5j LCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19kYXRhX3R4KTsgLyogZG1hdCAqLwor CisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBUWCByaW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1l bV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfdHgsCisJICAgICh2b2lkKiopJihzYy0+ZGVzY190eCks CisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hF UkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3JpbmdfdHgpKTsKKworCWlmIChlcnJvcikgeworCQlp Zl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJ YnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2Rh dGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBMb2FkIFJpbmcgRE1BLiAq LworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5kbWF0YWdfZGF0YV90eCwgc2MtPmRtYW1h cF9yaW5nX3R4LAorCSAgICBzYy0+ZGVzY190eCwKKwkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3Qp KkVDRV9NQVhfVFhfQlVGRkVSUywKKwkgICAgZWNlX2dldGFkZHIsCisJICAgICYoc2MtPnJpbmdf cGFkZHJfdHgpLCBCVVNfRE1BX05PV0FJVCk7CisKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRm KHNjLT5pZnAsICJjYW4ndCBsb2FkIGRlc2NyaXB0b3JcbiIpOworCQlidXNfZG1hbWVtX2ZyZWUo c2MtPmRtYXRhZ19kYXRhX3R4LCBzYy0+ZGVzY190eCwKKwkJICAgIHNjLT5kbWFtYXBfcmluZ190 eCk7CisJCXNjLT5kZXNjX3R4ID0gTlVMTDsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1h dGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElP KTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9yIG1idWZzLiBBbGlnbm1lbnQg aXMgMiBieXRlcyAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRf dGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMSwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov CisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkvKiBsb3dhZGRyICovCisJICAgIEJVU19T UEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJCS8qIGZpbHRm dW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgIE1DTEJZVEVTKk1BWF9GUkFHTUVOVCwJLyogbWF4c2l6 ZSAqLworCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMgKi8KKwkgICAgTUNMQllURVMs IDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJCS8qIGxvY2tmdW5j LCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19yaW5nX3R4KTsJLyogZG1hdCAqLwor CisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNyZWF0ZSBi dXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCWZvciAo aSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgeworCQkvKiBDcmVhdGUgZG1hIG1h cCBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLworCQllcnJvciA9IGJ1c19kbWFtYXBfY3JlYXRlKHNj LT5kbWF0YWdfcmluZ190eCwgMCwKKwkJICAgICYoc2MtPnR4X2Rlc2NbaV0uZG1hbWFwKSk7CisJ CWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIG1h cCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKwlyZXR1cm4gKDAp OworfQorCitzdGF0aWMgdm9pZAorZWNlX2ZyZWVfZGVzY19kbWFfdHgoc3RydWN0IGVjZV9zb2Z0 YyAqc2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJT OyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsKKwkJCW1fZnJlZW0oc2MtPnR4 X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZmPSAwOworCQl9CisJfQorCisJ aWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFwX3VubG9hZChzYy0+ZG1hdGFn X2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChzYy0+ZGVzY190eCkgeworCQkJ YnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJCSAgICBzYy0+ZGVzY190eCwg c2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFwX3JpbmdfdHggPSAwOworCX0K KworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCX0KKworCWlmIChz Yy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxFQ0VfTUFYX1RYX0JVRkZFUlM7 IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCwKKwkJCSAg ICBzYy0+dHhfZGVzY1tpXS5kbWFtYXApOworCQkJc2MtPnR4X2Rlc2NbaV0uZG1hbWFwID0gMDsK KwkJfQorCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCk7CisJCXNjLT5k bWF0YWdfcmluZ190eCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50CitlY2VfYWxsb2NfZGVzY19k bWFfcngoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGVycm9yOworCWludCBpOworCisJ LyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBtZW1vcnkgZm9yIFJYIGRlc2Ny aXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFn LAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLwor CSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BB Q0VfTUFYQUREUiwJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBmaWx0ZnVu YywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIHNp emVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDEsCisJICAgIC8qIG1heHNl Z3N6LCBmbGFncyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZG RVJTLCAwLAorCSAgICBOVUxMLCBOVUxMLAkJLyogbG9ja2Z1bmMsIGxvY2tmdW5jYXJnICovCisJ ICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisKKwkvKiBBbGxvY2F0ZSBSWCBy aW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfcngsCisJ ICAgICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RN QV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3Jpbmdf cngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBh bGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJLyogTG9h ZCBkbWFtYXAuICovCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQoc2MtPmRtYXRhZ19kYXRhX3J4 LCBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIHNjLT5kZXNjX3J4LAorCSAgICBzaXplb2YoZXRo X3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZGRVJTLAorCSAgICBlY2VfZ2V0YWRkciwKKwkgICAg JihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvcikgewor CQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJCWJ1c19k bWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNjX3J4LAorCQkgICAgc2MtPmRt YW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfcngp OworCQlzYy0+ZGVzY19yeCA9IE5VTEw7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIEFs bG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19j cmVhdGUoc2MtPnNjX3BhcmVudF90YWcsLyogcGFyZW50ICovCisJICAgIDE2LCAwLAkJCS8qIGFs aWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCS8qIGxv d2FkZHIgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCSAgICBO VUxMLCBOVUxMLAkJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJICAgIE1DTEJZVEVTLCAx LAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZVEVTLCAwLAkJLyogbWF4c2Vn c3osIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2NrZnVuYywgbG9ja2Z1bmNhcmcg Ki8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQgKi8KKworCWlmIChlcnJvcikg eworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVzZG1hIHRhZyBmb3Ig bWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpPEVDRV9N QVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRt YXRhZ19yaW5nX3J4LCAwLAorCQkgICAgJnNjLT5yeF9kZXNjW2ldLmRtYW1hcCk7CisJCWlmIChl cnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIG1hcCBmb3Ig bWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWVycm9yID0gYnVzX2Rt YW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2MtPnJ4X3NwYXJlbWFwKTsKKwlp ZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3JlYXRlIHNwYXJl IG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJldHVybiAoMCk7Cit9CisKK3N0 YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK KwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykgewor CQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+cnhfZGVzY1tpXS5i dWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisKKwlpZiAoc2MtPmRt YXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0YV9yeCwg c2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV9y eCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngpOworCQlidXNfZG1hX3Rh Z19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdfZGF0YV9yeCA9IDA7 CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0gMDsKKwl9CisKKwlp ZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JV RkZFUlM7IGkrKykKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngsCisJ CQkgICAgc2MtPnJ4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5k bWF0YWdfcmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShz Yy0+ZG1hdGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3JpbmdfcnggPSAwOworCX0KK30KKwor c3RhdGljIGludAorZWNlX25ld19yeGJ1ZihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IHJ4 X2Rlc2NfaW5mbyogZGVzY2luZm8pCit7CisJc3RydWN0IG1idWYgKm5ld19tYnVmOworCWJ1c19k bWFfc2VnbWVudF90IHNlZ1sxXTsKKwlidXNfZG1hbWFwX3QgbWFwOworCWludCBlcnJvcjsKKwlp bnQgbnNlZ3M7CisJYnVzX2RtYV90YWdfdCB0YWc7CisKKwl0YWcgPSBzYy0+ZG1hdGFnX3Jpbmdf cng7CisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwgTVRfREFUQSwgTV9QS1RIRFIp OworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAoRU5PQlVGUyk7CisKKwluZXdf bWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0gTUNMQllURVM7CisKKwllcnJv ciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHRhZywgc2MtPnJ4X3NwYXJlbWFwLCBuZXdfbWJ1 ZiwKKwkgICAgc2VnLCAmbnNlZ3MsIEJVU19ETUFfTk9XQUlUKTsKKworCUtBU1NFUlQobnNlZ3Mg PT0gMSwgKCJUb28gbWFueSBzZWdtZW50cyByZXR1cm5lZCEiKSk7CisKKwlpZiAobnNlZ3MgIT0g MSB8fCBlcnJvcikgeworCQltX2ZyZWUobmV3X21idWYpOworCQlyZXR1cm4gKEVOT0JVRlMpOwor CX0KKworCWlmIChkZXNjaW5mby0+YnVmZiAhPSBOVUxMKSB7CisJCWJ1c19kbWFtYXBfc3luYyh0 YWcsIGRlc2NpbmZvLT5kbWFtYXAsIEJVU19ETUFTWU5DX1BPU1RSRUFEKTsKKwkJYnVzX2RtYW1h cF91bmxvYWQodGFnLCBkZXNjaW5mby0+ZG1hbWFwKTsKKwl9CisKKwltYXAgPSBkZXNjaW5mby0+ ZG1hbWFwOworCWRlc2NpbmZvLT5kbWFtYXAgPSBzYy0+cnhfc3BhcmVtYXA7CisJc2MtPnJ4X3Nw YXJlbWFwID0gbWFwOworCisJYnVzX2RtYW1hcF9zeW5jKHRhZywgZGVzY2luZm8tPmRtYW1hcCwg QlVTX0RNQVNZTkNfUFJFUkVBRCk7CisKKwlkZXNjaW5mby0+YnVmZiA9IG5ld19tYnVmOworCWRl c2NpbmZvLT5kZXNjLT5kYXRhX3B0ciA9IHNlZy0+ZHNfYWRkcjsKKwlkZXNjaW5mby0+ZGVzYy0+ bGVuZ3RoID0gc2VnLT5kc19sZW4gLSAyOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVz Y190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOworCWludCBlcnJv cjsKKworCS8qIENyZWF0ZSBwYXJlbnQgdGFnIGZvciB0eCBhbmQgcnggKi8KKwllcnJvciA9IGJ1 c19kbWFfdGFnX2NyZWF0ZSgKKwkgICAgYnVzX2dldF9kbWFfdGFnKHNjLT5kZXYpLC8qIHBhcmVu dCAqLworCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BB Q0VfTUFYQUREUiwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogaGln aGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBmaWx0ZXJhcmcgKi8KKwkgICAg QlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIDAsLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAg IEJVU19TUEFDRV9NQVhTSVpFXzMyQklULAkvKiBtYXhzZWdzaXplICovCisJICAgIDAsCQkJLyog ZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogbG9ja2Z1bmMsIGxvY2thcmcgKi8KKwkgICAg JnNjLT5zY19wYXJlbnRfdGFnKTsKKworCWVjZV9hbGxvY19kZXNjX2RtYV90eChzYyk7CisKKwlm b3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJZGVzY3R4ID0gKGV0 aF90eF9kZXNjX3QgKikoJnNjLT5kZXNjX3R4W2ldKTsKKwkJbWVtc2V0KGRlc2N0eCwgMCwgc2l6 ZW9mKGV0aF90eF9kZXNjX3QpKTsKKwkJZGVzY3R4LT5sZW5ndGggPSBNQVhfUEFDS0VUX0xFTjsK KwkJZGVzY3R4LT5jb3duID0gMTsKKwkJaWYgKGkgPT0gRUNFX01BWF9UWF9CVUZGRVJTIC0gMSkK KwkJCWRlc2N0eC0+ZW9yID0gMTsKKwl9CisKKwllY2VfYWxsb2NfZGVzY19kbWFfcngoc2MpOwor CisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWRlc2NyeCA9 ICYoc2MtPmRlc2NfcnhbaV0pOworCQltZW1zZXQoZGVzY3J4LCAwLCBzaXplb2YoZXRoX3J4X2Rl c2NfdCkpOworCQlzYy0+cnhfZGVzY1tpXS5kZXNjID0gZGVzY3J4OworCQlzYy0+cnhfZGVzY1tp XS5idWZmID0gMDsKKwkJZWNlX25ld19yeGJ1ZihzYywgJihzYy0+cnhfZGVzY1tpXSkpOworCisJ CWlmIChpID09IEVDRV9NQVhfUlhfQlVGRkVSUyAtIDEpCisJCQlkZXNjcngtPmVvciA9IDE7CisJ fQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7CisJc2MtPmxhc3RfcnggPSAw OworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGlu dAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsK KwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKwlzdHJ1Y3QgaWZuZXQgKmlm cDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmcCA9IHNjLT5pZnA7CisKKwlp bml0aWFsX3N3aXRjaF9jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOworCWluaXRp YWxfY3B1X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwlpbml0aWFsX3Bv cnQwX2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCWluaXRpYWxfcG9y dDFfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisKKwkvKiBEaXNhYmxl IFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05G SUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxFKTsKKwl3cml0ZV80KHNjLCBN QUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qIERpc2FibGUgUG9ydCAx ICovCisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJ bWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2MsIE1BQ19QT1JU XzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJZXJyID0gZWNlX2FsbG9jYXRlX2RtYShz Yyk7CisJaWYgKGVycikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCBhbGxvY2F0aW5n IGRtYVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdyaXRlXzQoc2MsIFRTX0RFU0NSSVBUT1Jf UE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCXdyaXRlXzQoc2MsIFRTX0RFU0NSSVBUT1Jf QkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90eCk7CisKKwl3cml0ZV80KHNjLCBGU19ERVNDUklQ VE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRyX3J4KTsKKwl3cml0ZV80KHNjLCBGU19ERVNDUklQ VE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisJd3JpdGVfNChzYywgRlNfRE1B X0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwlyZXR1cm4gKEVOWElPKTsKKwor fQorCitzdGF0aWMgdm9pZAorZWNlX2RlYWN0aXZhdGUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVj dCBlY2Vfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwlpZiAo c2MtPmludHJoYW5kKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFfcmVzX3JlYywg c2MtPmludHJoYW5kKTsKKworCXNjLT5pbnRyaGFuZCA9IDA7CisKKwlpZiAoc2MtPmludHJoYW5k X3FmKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFfcmVzX3FmLCBzYy0+aW50cmhh bmRfcWYpOworCisJc2MtPmludHJoYW5kX3FmID0gMDsKKworCWJ1c19nZW5lcmljX2RldGFjaChz Yy0+ZGV2KTsKKwlpZiAoc2MtPm1paWJ1cykKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChzYy0+ZGV2 LCBzYy0+bWlpYnVzKTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1c19yZWxlYXNlX3Jlc291cmNl KGRldiwgU1lTX1JFU19JT1BPUlQsCisJCSAgICBybWFuX2dldF9yaWQoc2MtPm1lbV9yZXMpLCBz Yy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCisJaWYgKHNjLT5pcnFfcmVzX3JlYykK KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lSUSwKKwkJICAgIHJtYW5fZ2V0 X3JpZChzYy0+aXJxX3Jlc19yZWMpLCBzYy0+aXJxX3Jlc19yZWMpOworCisJaWYgKHNjLT5pcnFf cmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAorCQkgICAg cm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3FmKSwgc2MtPmlycV9yZXNfcWYpOworCisJaWYgKHNj LT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLAor CQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3N0YXR1cyksIHNjLT5pcnFfcmVzX3N0YXR1 cyk7CisKKwlzYy0+aXJxX3Jlc19yZWMgPSAwOworCXNjLT5pcnFfcmVzX3FmID0gMDsKKwlzYy0+ aXJxX3Jlc19zdGF0dXMgPSAwOworCUVDRV9UWExPQ0tfREVTVFJPWShzYyk7CisJRUNFX1JYTE9D S19ERVNUUk9ZKHNjKTsKKworCWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHNjKTsKKwllY2VfZnJlZV9k ZXNjX2RtYV9yeChzYyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDaGFuZ2UgbWVkaWEgYWNj b3JkaW5nIHRvIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9pZm1lZGlhX3VwZChzdHJ1 Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7 CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJaW50IGVycm9yOworCisJbWlpID0gZGV2aWNlX2dl dF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlFQ0VfTE9DSyhzYyk7CisJZXJyb3IgPSBtaWlfbWVkaWFj aGcobWlpKTsKKwlFQ0VfVU5MT0NLKHNjKTsKKwlyZXR1cm4gKGVycm9yKTsKK30KKworLyoKKyAq IE5vdGlmeSB0aGUgd29ybGQgd2hpY2ggbWVkaWEgd2UncmUgdXNpbmcuCisgKi8KK3N0YXRpYyB2 b2lkCitlY2VfaWZtZWRpYV9zdHMoc3RydWN0IGlmbmV0ICppZnAsIHN0cnVjdCBpZm1lZGlhcmVx ICppZm1yKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gaWZwLT5pZl9zb2Z0YzsKKwlzdHJ1 Y3QgbWlpX2RhdGEgKm1paTsKKworCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7 CisJRUNFX0xPQ0soc2MpOworCW1paV9wb2xsc3RhdChtaWkpOworCWlmbXItPmlmbV9hY3RpdmUg PSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJaWZtci0+aWZtX3N0YXR1cyA9IG1paS0+bWlpX21l ZGlhX3N0YXR1czsKKwlFQ0VfVU5MT0NLKHNjKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV90aWNr KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgbWlp X2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+ bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJbWlpX3RpY2sobWlp KTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0IG9uZSBzZWNvbmQgZnJvbSBu b3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2Mp OworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMg KmVjLAorICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisgICAgaW50IGZpcnN0KQoreworCXVpbnQz Ml90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRyeTsKKwl1aW50MzJfdCAqZW50 cnlfdmFsOworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCAwKTsKKwl3 cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgMCk7CisJd3JpdGVfNChlYywg QVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChmaXJzdCkKKwkJd3JpdGVfNChl YywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4MSk7CisJZWxzZQorCQl3cml0ZV80KGVj LCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKworCWZvciAoaWkgPSAwOyBpaSA8 IDB4MTAwMDsgaWkrKykKKwkJaWYgKHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M XzEpICYgKDB4MSkpCisJCQlicmVhazsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgmZW50 cnkpOworCWVudHJ5X3ZhbFswXSA9IHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M XzEpOworCWVudHJ5X3ZhbFsxXSA9IHJlYWRfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9M XzIpOworCisJaWYgKG1hY19yZXN1bHQpCisJCW1lbWNweShtYWNfcmVzdWx0LCBlbnRyeS5tYWNf YWRkciwgRVRIRVJfQUREUl9MRU4pOworCisJcmV0dXJuIChlbnRyeS50YWJsZV9lbmQpOworfQor CitzdGF0aWMgdWludDMyX3QKK3dyaXRlX2FybF90YWJsZV9lbnRyeShzdHJ1Y3QgZWNlX3NvZnRj ICplYywKKyAgICB1aW50MzJfdCBmaWx0ZXIsCisgICAgdWludDMyX3Qgdmxhbl9tYWMsCisgICAg dWludDMyX3Qgdmxhbl9naWQsCisgICAgdWludDMyX3QgYWdlX2ZpZWxkLAorICAgIHVpbnQzMl90 IHBvcnRfbWFwLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hY19hZGRyKQoreworCXVpbnQzMl90IGlp OworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0IGFybF90YWJsZV9lbnRyeV90IGVudHJ5 OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CisKKwllbnRyeS5maWx0ZXIg PSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFuX21hYzsKKwllbnRyeS52bGFuX2dpZCA9 IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFnZV9maWVsZDsKKwllbnRyeS5wb3J0X21h cCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNfYWRkciwgbWFjX2FkZHIsIEVUSEVSX0FE RFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgmZW50cnkpOworCisJd3JpdGVf NChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOworCXdyaXRlXzQoZWMsIEFSTF9U QUJMRV9BQ0NFU1NfQ09OVFJPTF8xLCAwKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNT X0NPTlRST0xfMiwgMCk7CisKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xf MSwgZW50cnlfdmFsWzBdKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xf MiwgZW50cnlfdmFsWzFdKTsKKworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJP TF8wLCBBUkxfV1JJVEVfQ09NTUFORCk7CisKKwlmb3IgKGlpID0gMDsgaWkgPCAweDEwMDA7IGlp KyspCisJCWlmIChyZWFkXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKSAmCisJCSAg ICBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAoMSk7IC8qIFdyaXRlIE9LLiAqLwor CisJLyogV3JpdGUgZmFpbGVkLiAqLworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCity ZW1vdmVfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorICAgIHVpbnQ4X3QgKm1hYykK K3sKKworCS8qIEludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRyeS4gKi8KKwl3 cml0ZV9hcmxfdGFibGVfZW50cnkoc2MsIDAsIDEsIFZMQU4wX0dST1VQX0lELAorCSAgICBJTlZB TElEX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3RhdGljIHZvaWQKK2Fk ZF9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisgICAgdWludDhfdCAqbWFjKQorewor CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkgICAg TkVXX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworLyoqCisgKiBUaGUgYmVo YXZpb3Igb2YgQVJMIHRhYmxlIHJlYWRpbmcgYW5kIGRlbGV0aW9uIGlzIG5vdCB3ZWxsIGRlZmlu ZWQKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUbyBiZSBzYWZlLCBhbGwgbWFjIGFkZHJlc3Nl cyBhcmUgcHV0IHRvIGEKKyAqIGxpc3QsIHRoZW4gZGVsZXRlZC4KKyAqCisgKi8KK3N0YXRpYyB2 b2lkCitjbGVhcl9tYWNfZW50cmllcyhzdHJ1Y3QgZWNlX3NvZnRjICplYywgaW50IGluY2x1ZGVf dGhpc19tYWMpCit7CisJaW50IHRhYmxlX2VuZDsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiB0ZW1wOwor CXN0cnVjdCBtYWNfbGlzdCAqIG1hY19saXN0X2hlYWRlcjsKKwlzdHJ1Y3QgbWFjX2xpc3QgKiBj dXJyZW50OworCWNoYXIgbWFjW0VUSEVSX0FERFJfTEVOXTsKKworCWN1cnJlbnQgPSAwOworCW1h Y19saXN0X2hlYWRlciA9IDA7CisKKwl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywgbWFj LCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlpZiAoIWluY2x1ZGVfdGhpc19tYWMgJiYK KwkJICAgIG1lbWNtcChtYWMsIHZsYW4wX21hYywgRVRIRVJfQUREUl9MRU4pID09IDApIHsKKwkJ CS8qIFJlYWQgbmV4dCBlbnRyeS4gKi8KKwkJCXRhYmxlX2VuZCA9IHJlYWRfbWFjX2VudHJ5KGVj LCBtYWMsIDApOworCQkJY29udGludWU7CisJCX0KKworCQl0ZW1wID0gKHN0cnVjdCBtYWNfbGlz dCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFjX2xpc3QpLAorCQkgICAgTV9ERVZCVUYsCisJCSAg ICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCW1lbWNweSh0ZW1wLT5tYWNfYWRkciwgbWFjLCBFVEhF Ul9BRERSX0xFTik7CisJCXRlbXAtPm5leHQgPSAwOworCQlpZiAobWFjX2xpc3RfaGVhZGVyKSB7 CisJCQljdXJyZW50LT5uZXh0ID0gdGVtcDsKKwkJCWN1cnJlbnQgPSB0ZW1wOworCQl9IGVsc2Ug eworCQkJbWFjX2xpc3RfaGVhZGVyID0gdGVtcDsKKwkJCWN1cnJlbnQgPSB0ZW1wOworCQl9CisJ CS8qIFJlYWQgbmV4dCBFbnRyeSAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRyeShlYywg bWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hpbGUgKGN1 cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIpOworCQl0 ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUodGVtcCwg TV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmlndXJlX2xhbl9wb3J0KHN0cnVj dCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29uZmlnOwor CXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICogQ29uZmlndXJlIHN3aXRjaAor CSAqLworCXN3X2NvbmZpZyA9IHJlYWRfNChzYywgU1dJVENIX0NPTkZJRyk7CisJLyogRW5hYmxl IGZhc3QgYWdpbmcuICovCisJc3dfY29uZmlnIHw9IEZBU1RfQUdJTkc7CisJLyogRW5hYmxlIElW TCBsZWFybmluZy4gKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJOSU5HOworCS8qIERpc2FibGUg aGFyZHdhcmUgTkFULiAqLworCXN3X2NvbmZpZyAmPSB+KEhBUkRXQVJFX05BVCk7CisKKwlzd19j b25maWcgfD0gU0tJUF9MMl9MT09LVVBfUE9SVF8wIHwgU0tJUF9MMl9MT09LVVBfUE9SVF8xfCBO SUNfTU9ERTsKKworCXdyaXRlXzQoc2MsIFNXSVRDSF9DT05GSUcsIHN3X2NvbmZpZyk7CisKKwlz d19jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOworCisJbWFjX3BvcnRfY29uZmln ID0gcmVhZF80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisKKwlpZiAoIShtYWNfcG9ydF9jb25m aWcgJiAweDEpIHx8IChtYWNfcG9ydF9jb25maWcgJiAweDIpKQorCQlpZl9wcmludGYoc2MtPmlm cCwgIkxpbmsgRG93blxuIik7CisJZWxzZQorCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJ RywgbWFjX3BvcnRfY29uZmlnKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0 X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1 KQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSAm ICh+KDB4NyA8PCAwKSk7CisJd3JpdGVfNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisJdmFs ID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQwKSAmIDB4MDcpOworCXdyaXRl XzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9QT1JU X1BWSUQpICYgKH4oMHg3IDw8IDQpKTsKKwl3cml0ZV80KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFs KTsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgoKHBvcnQxKSAmIDB4MDcp IDw8IDQpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCisJdmFsID0gcmVh ZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgJiAofigweDcgPDwgOCkpOworCXdyaXRlXzQoc2MsIFZM QU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9QT1JUX1BWSUQpIHwg KCgoY3B1KSAmIDB4MDcpIDw8IDgpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwp OworCit9CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCitzZXRf dmxhbl92aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCWNvbnN0IHVpbnQz Ml90IHJlZ3NbXSA9IHsKKwkgICAgVkxBTl9WSURfMF8xLAorCSAgICBWTEFOX1ZJRF8wXzEsCisJ ICAgIFZMQU5fVklEXzJfMywKKwkgICAgVkxBTl9WSURfMl8zLAorCSAgICBWTEFOX1ZJRF80XzUs CisJICAgIFZMQU5fVklEXzRfNSwKKwkgICAgVkxBTl9WSURfNl83LAorCSAgICBWTEFOX1ZJRF82 XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9IHsKKwkgICAgVkxBTjBfVklELAorCSAgICBW TEFOMV9WSUQsCisJICAgIFZMQU4yX1ZJRCwKKwkgICAgVkxBTjNfVklELAorCSAgICBWTEFONF9W SUQsCisJICAgIFZMQU41X1ZJRCwKKwkgICAgVkxBTjZfVklELAorCSAgICBWTEFON19WSUQKKwl9 OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdmlkOworCisJcmVnID0g cmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYgKHZsYW4gJiAxKSB7CisJCXZh bCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2YWwgJiAofigweEZGRiA8 PCAwKSkpOworCQl2YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFs fCgodmlkICYgMHhGRkYpIDw8IDApKTsKKwl9IGVsc2UgeworCQl2YWwgPSByZWFkXzQoc2MsIHJl Zyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFsICYgKH4oMHhGRkYgPDwgMTIpKSk7CisJCXZhbCA9 IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2YWx8KCh2aWQgJiAweEZGRikg PDwgMTIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl9tZW1iZXIoc3RydWN0IGVj ZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMy X3QgdmFsOworCWludCBncm91cDsKKwljb25zdCBpbnQgZ3JvdXBzW10gPSB7CisJICAgIFZMQU4w X0dST1VQLAorCSAgICBWTEFOMV9HUk9VUCwKKwkgICAgVkxBTjJfR1JPVVAsCisJICAgIFZMQU4z X0dST1VQLAorCSAgICBWTEFONF9HUk9VUCwKKwkgICAgVkxBTjVfR1JPVVAsCisJICAgIFZMQU42 X0dST1VQLAorCSAgICBWTEFON19HUk9VUAorCX07CisKKwlncm91cCA9IGdyb3Vwc1t2bGFuXTsK KworCXNoaWZ0ID0gdmxhbiozOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9N QVApICYgKH4oMHg3IDw8IHNoaWZ0KSk7CisJd3JpdGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9N QVAsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX01FTUJFUl9QT1JUX01BUCk7CisJd3Jp dGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNo aWZ0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAq c2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOwor CisJaW50IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2YWwgPSByZWFkXzQoc2MsIFZM QU5fVEFHX1BPUlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOworCXdyaXRlXzQoc2MsIFZMQU5f VEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywgVkxBTl9UQUdfUE9SVF9NQVAp OworCXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwgfCAoKHRhZyAmIDB4NykgPDwg c2hpZnQpKTsKK30KKworc3RhdGljIGludAorY29uZmlndXJlX2NwdV9wb3J0KHN0cnVjdCBlY2Vf c29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZpZzsKKwlpbnQgaTsKKworCWNw dV9wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwkvKiBTQSBsZWFy bmluZyBEaXNhYmxlICovCisJY3B1X3BvcnRfY29uZmlnIHw9IChTQV9MRUFSTklOR19ESVNBQkxF KTsKKwkvKiBzZXQgZGF0YSBvZmZzZXQgKyAyICovCisJY3B1X3BvcnRfY29uZmlnICY9IH4oMSA8 PCAzMSk7CisKKwl3cml0ZV80KHNjLCBDUFVfUE9SVF9DT05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7 CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQs CisJICAgIFNUQVRJQ19FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAgIHZsYW4wX21hYykpCisJCXJl dHVybiAoMSk7CisKKwlzZXRfcHZpZChzYywgUE9SVDBfUFZJRCwgUE9SVDFfUFZJRCwgQ1BVX1BP UlRfUFZJRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCXNldF92bGFuX3ZpZChz YywgaSk7CisJCXNldF92bGFuX21lbWJlcihzYywgaSk7CisJCXNldF92bGFuX3RhZyhzYywgaSk7 CisJfQorCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IHN0YXR1cyBzb3VyY2VzICovCisJd3Jp dGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOworCisJLyogY2xlYXIgcHJldmlv dXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwl3cml0ZV80KHNjLCBJTlRFUlJVUFRfU1RBVFVTLCAw eDAwMDAxRkZGKTsKKworCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAwKTsKKwl3cml0ZV80 KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAor aGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVzID0gMDsK KwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5X3R5cGUo c2MpOworCS8qIEN1cnJlbnRseSBvbmx5IGljX3BsdXMgcGh5IGlzIHN1cHBvcnRlZC4gKi8KKwlp ZiAoZ3dfcGh5X3R5cGUgIT0gSUNfUExVU19QSFkpIHsKKwkJZGV2aWNlX3ByaW50ZihzYy0+ZGV2 LCAiUEhZIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAoJWQpXG4iLAorCQkgICAgZ3dfcGh5X3R5cGUp OworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmlndXJlX2xhbl9wb3J0KHNjLCBn d19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBjb25z dCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCisJLyogSW52YWxpZCBhZ2VfZmllbGQgbWVh biBlcmFzZSB0aGlzIGVudHJ5LiAqLworCXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwg VkxBTjBfR1JPVVBfSUQsCisJICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dST1VQLAorCSAgICBt YWMpOworCW1lbWNweSh2bGFuMF9tYWMsIG1hYywgRVRIRVJfQUREUl9MRU4pOworCisJd3JpdGVf YXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkgICAgU1RBVElDX0VO VFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9zZXRf bWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQoreworCW1lbWNweSh2bGFu MF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21hY19hZGRyZXNzKHNjLCBlYWRk ciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKgorICogVE9ETzogdGhlIGRldmljZSBkb2Vzbid0 IGhhdmUgTUFDIHN0b3JlZCwgd2Ugc2hvdWxkIHJlYWQgdGhlCisgKiBjb25maWd1cmF0aW9uIHN0 b3JlZCBpbiBGTEFTSCwgYnV0IHRoZSBmb3JtYXQgZGVwZW5kcyBvbiB0aGUKKyAqIGJvb3Rsb2Fk ZXIgdXNlZC4qCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMg KnNjLCB1X2NoYXIgKmVhZGRyKQoreworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgdm9p ZAorZWNlX2ludHJfcnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpCit7 CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtYnVmICptYjsKKwlzdHJ1 Y3QgcnhfZGVzY19pbmZvICpyeGRlc2M7CisJZXRoX3J4X2Rlc2NfdCAqZGVzYzsKKworCWludCBm c3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IGk7CisJaW50IGlkeDsKKwlpbnQgcnhjb3VudDsK Kwl1aW50MzJfdCBzdGF0dXM7CisKKwlmc3NkX2N1cnIgPSByZWFkXzQoc2MsIEZTX0RFU0NSSVBU T1JfUE9JTlRFUik7CisKKwlmc3NkID0gKGZzc2RfY3VyciAtICh1aW50MzJfdClzYy0+cmluZ19w YWRkcl9yeCk+PjQ7CisKKwlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisK KwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIHJpbmcuICovCisJYnVzX2RtYW1h cF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRtYW1hcF9yaW5nX3J4LAorCSAg ICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RXUklURSk7CisKKwlpZiAo ZnNzZCA+IHNjLT5sYXN0X3J4KQorCQlyeGNvdW50ID0gZnNzZCAtIHNjLT5sYXN0X3J4OworCWVs c2UgaWYgKGZzc2QgPCBzYy0+bGFzdF9yeCkKKwkJcnhjb3VudCA9IChFQ0VfTUFYX1JYX0JVRkZF UlMgLSBzYy0+bGFzdF9yeCkgKyBmc3NkOworCWVsc2UgeworCQlpZiAoZGVzYy0+Y293biA9PSAw KQorCQkJcmV0dXJuOworCQllbHNlCisJCQlyeGNvdW50ID0gRUNFX01BWF9SWF9CVUZGRVJTOwor CX0KKworCWZvciAoaT0gMDsgaSA8IHJ4Y291bnQ7IGkrKykgeworCQlzdGF0dXMgPSBkZXNjLT5j b3duOworCQlpZiAoIXN0YXR1cykKKwkJCWJyZWFrOworCisJCWlkeCA9IHNjLT5sYXN0X3J4Owor CQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSByeGRlc2MtPmJ1ZmY7CisKKwkJ aWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhFUl9DUkNfTEVOIHx8CisJCSAg ICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJfQ1JDX0xFTiArCisJCSAgICBF VEhFUl9WTEFOX0VOQ0FQX0xFTikgeworCQkJaWZwLT5pZl9pZXJyb3JzKys7CisJCQlkZXNjLT5j b3duID0gMDsKKwkJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVTIC0gMjsKKwkJCS8qIEludmFsaWQg cGFja2V0LCBza2lwIGFuZCBwcm9jZXNzIG5leHQKKwkJCSAqIHBhY2tldC4KKwkJCSAqLworCQkJ Y29udGludWU7CisJCX0KKworCQlpZiAoZWNlX25ld19yeGJ1ZihzYywgcnhkZXNjKSAhPSAwKSB7 CisJCQlpZnAtPmlmX2lxZHJvcHMrKzsKKwkJCWRlc2MtPmNvd24gPSAwOworCQkJZGVzYy0+bGVu Z3RoID0gTUNMQllURVMgLSAyOworCQkJYnJlYWs7CisJCX0KKworCQkvKioKKwkJICogVGhlIGRl dmljZSB3aWxsIHdyaXRlIHRvIGFkZHJyZXNzICsgMiBTbyB3ZSBuZWVkIHRvIGFkanVzdAorCQkg KiB0aGUgYWRkcmVzcyBhZnRlciB0aGUgcGFja2V0IGlzIHJlY2VpdmVkLgorCQkgKi8KKwkJbWIt Pm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVuID0gZGVzYy0+bGVu Z3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9wa3RoZHIucmN2aWYg PSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENTVU0pICE9IDApIHsK KwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFkZXNjLT5sNGYpICAm JiAoZGVzYy0+cHJvdCAhPSAzKSkgeworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2ZsYWdzIHw9IENT VU1fSVBfQ0hFQ0tFRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9mbGFncyB8PSBDU1VNX0lQX1ZB TElEOworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweGZmZmY7CisJCQl9CisJCX0KKwkJ RUNFX1JYVU5MT0NLKHNjKTsKKwkJKCppZnAtPmlmX2lucHV0KShpZnAsIG1iKTsKKwkJRUNFX1JY TE9DSyhzYyk7CisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVT IC0gMjsKKworCQlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3J4LAorCQkgICAgc2Mt PmRtYW1hcF9yaW5nX3J4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19ETUFTWU5D X1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3RfcnggPT0gRUNFX01BWF9SWF9CVUZGRVJTIC0g MSkKKwkJCXNjLT5sYXN0X3J4ID0gMDsKKwkJZWxzZQorCQkJc2MtPmxhc3RfcngrKzsKKworCQlk ZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJfQorCisJLyogU3luYyB1cGRh dGVkIGZsYWdzLiAqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJICAg IHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRCB8IEJVU19ETUFT WU5DX1BSRVdSSVRFKTsKKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3Rh c2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRj ICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50cl9yeF9sb2NrZWQoc2MsIC0x KTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHIodm9pZCAq eHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZw ID0gc2MtPmlmcDsKKworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcp ID09IDApIHsKKwkJd3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQlyZXR1cm47CisJ fQorCisJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX2ludHJfdGFzayk7CisK KwlpZiAoIUlGUV9EUlZfSVNfRU1QVFkoJmlmcC0+aWZfc25kKSkKKwkJdGFza3F1ZXVlX2VucXVl dWUoc2MtPnNjX3RxLCAmc2MtPnNjX3R4X3Rhc2spOworfQorCitzdGF0aWMgdm9pZAorZWNlX2lu dHJfc3RhdHVzKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlz dHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJaW50IHN0YXQ7CisKKwlzdGF0ID0gcmVhZF80 KHNjLCBJTlRFUlJVUFRfU1RBVFVTKTsKKworCXdyaXRlXzQoc2MsIElOVEVSUlVQVF9TVEFUVVMs IHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgIT0g MCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSAhPSAwKQorCQkJaWZwLT5pZl9pcWRyb3Bz Kys7CisJfQorfQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBfbG9ja2VkKHN0cnVjdCBlY2Vf c29mdGMgKnNjKQoreworCWV0aF90eF9kZXNjX3QgKmRlc2M7CisKKwlpZiAoc2MtPnR4X2NvbnMg PT0gc2MtPnR4X3Byb2QpIHJldHVybjsKKworCS8qIFByZXBhcmUgdG8gcmVhZCB0aGUgcmluZyAo b3duZXIgYml0KS4gKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAorCSAg ICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVTX0RN QVNZTkNfUE9TVFdSSVRFKTsKKworCXdoaWxlIChzYy0+dHhfY29ucyAhPSBzYy0+dHhfcHJvZCkg eworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRlc2M7CisJCWlmIChkZXNjLT5j b3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRkID0gJihzYy0+dHhfZGVzY1tz Yy0+dHhfY29uc10pOworCQkJLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggdGhpcyBkZXNjcmlwdG9y IC4uLiAqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0YV90eCwgdGQtPmRtYW1h cCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJLyogLi4uIGFuZCB1bmxvYWQs IHNvIHdlIGNhbiByZXVzZS4gKi8KKwkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfZGF0 YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZmKTsKKwkJCXRkLT5idWZmID0g MDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZF UlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworfQorCitzdGF0aWMgdm9pZAor ZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2VkKQoreworCXN0 cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQTE9DSyhzYyk7CisJZWNlX2Ns ZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhzYyk7Cit9CisKK3N0YXRpYyB2 b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4 c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlmICgoaWZwLT5pZl9kcnZfZmxh Z3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyogVGhpcyBzaG91bGQgbm90IGhhcHBl biwgc3RvcCBETUEuICovCisJCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0 dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZzYy0+c2NfY2xlYW51cF90 YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3FmKHZvaWQgKnhzYykKK3sKKwlzdHJ1 Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJ aWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkgeworCQkvKiBU aGlzIHNob3VsZCBub3QgaGFwcGVuLCBzdG9wIERNQS4gKi8KKwkJd3JpdGVfNChzYywgRlNfRE1B X0NPTlRST0wsIDApOworCQlyZXR1cm47CisJfQorCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190 cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsK K30KKworLyoKKyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2 b2lkCitlY2Vpbml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2Mg PSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtaWlfZGF0YSAq bWlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1X3BvcnRfY29uZmlnOworCXVp bnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7CisJCWNmZ19yZWcgPSByZWFk XzQoc2MsIEJJU1RfUkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2ZnX3JlZyAmICgxPDwxNykpKQor CQkJYnJlYWs7CisJCURFTEFZKDEwMCk7CisJfQorCS8qIFNldCB0byBkZWZhdWx0IHZhbHVlcy4g Ki8KKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCAweDAwN0FBN0ExKTsKKwl3cml0ZV80KHNj LCBNQUNfUE9SVF8wX0NPTkZJRywgMHgwMDQyM0QwMCk7CisJd3JpdGVfNChzYywgTUFDX1BPUlRf MV9DT05GSUcsIDB4MDA0MjNEODApOworCXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywgMHgw MDRDMDAwMCk7CisKKwloYXJkd2FyZV9pbml0KHNjKTsKKworCW1hY19wb3J0X2NvbmZpZyA9IHJl YWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCisJIC8qIEVuYWJsZSBQb3J0IDAgKi8KKwlt YWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7CisJd3JpdGVfNChzYywgTUFDX1BP UlRfMF9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwljcHVfcG9ydF9jb25maWcgPSByZWFk XzQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogRW5hYmxlIENQVS4gKi8KKwljcHVfcG9ydF9j b25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywg Y3B1X3BvcnRfY29uZmlnKTsKKworCS8qCisJICogU2V0ICdydW5uaW5nJyBmbGFnLCBhbmQgY2xl YXIgb3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQgdG8gc3RhcnQgdGhlIG91dHB1 dAorCSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZfUlVOTklORzsKKwlpZnAtPmlm X2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlpID0gZGV2aWNlX2dldF9zb2Z0 YyhzYy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkvKiBFbmFibGUgRE1BLiAqLwor CXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNhbGxvdXRfcmVzZXQoJnNjLT50 aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2VjZV9l bmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVjdCBp Zm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwlidXNf ZG1hbWFwX3QgbWFwcDsKKwlldGhfdHhfZGVzY190ICpkZXNjID0gMDsKKwlpbnQgY3N1bV9mbGFn czsKKwlpbnQgZGVzY19ubzsKKwlpbnQgZXJyb3I7CisJaW50IG5zZWdzOworCWludCBzZWc7CisK KwlpZnAgPSBzYy0+aWZwOworCisJLyogRmV0Y2ggdW51c2VkIG1hcCAqLworCW1hcHAgPSBzYy0+ dHhfZGVzY1tzYy0+dHhfcHJvZF0uZG1hbWFwOworCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWRf bWJ1Zl9zZyhzYy0+ZG1hdGFnX3JpbmdfdHgsIG1hcHAsCisJICAgIG0wLCBzZWdzLCAmbnNlZ3Ms CisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWJ1c19kbWFt YXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJCXJldHVybiAoKGVycm9yICE9 IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2MtPmRlc2NfdHhbc2MtPmRlc2Nf Y3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjID0gZGVzYzsKKwlzYy0+ dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nfbm8gPSBzYy0+ZGVzY19jdXJy X3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJaWYgKGRlc2Mt PmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRvciBpcyBz dGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJZGVzYy0+bGVuZ3RoID0g c2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBzZWdzW3NlZ10uZHNfYWRkcjsK KworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsKKwkJfSBlbHNlIHsKKwkJCWRl c2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnID09IG5zZWdzIC0gMSkgeworCQkJZGVzYy0+bHMg PSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+bHMgPSAwOworCQl9CisKKwkJY3N1bV9mbGFncyA9 IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOworCisJCWRlc2MtPmZyID0gIDE7CisJCWRlc2MtPnBt YXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAwOworCQlkZXNjLT5pY28gPSAwOworCQlkZXNjLT50 Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOworCQlkZXNjLT5pbnRlcnJ1cHQgPSAxOworCisJCWlm IChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgeworCQkJZGVzYy0+aWNvID0gMTsKKwkJCWlmIChjc3Vt X2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVzYy0+dGNvID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdz ICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNvID0gMTsKKwkJfQorCisJCWRlc2MrKzsKKwkJc2Mt PmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19jdXJyX3R4ICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZF UlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4ID09IDApIHsKKwkJCWRlc2MgPSAoZXRoX3R4X2Rl c2NfdCAqKSYoc2MtPmRlc2NfdHhbMF0pOworCQl9CisJfQorCisJZGVzYyA9IHNjLT50eF9kZXNj W3NjLT50eF9wcm9kXS5kZXNjOworCisJc2MtPnR4X3Byb2QgPSAoc2MtPnR4X3Byb2QgKyAxKSAl IEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qCisJICogQWZ0ZXIgYWxsIGRlc2NyaXB0b3JzIGFy ZSBzZXQsIHdlIHNldCB0aGUgZmxhZ3MgdG8gc3RhcnQgdGhlCisJICogc2VuZGluZyBwcm9jZXMu CisJICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJZGVzYy0+Y293 biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25vICsgMSkgJSBFQ0VfTUFYX1RY X0JVRkZFUlM7CisJCWlmIChkZXNjX25vID09IDApCisJCQlkZXNjID0gKGV0aF90eF9kZXNjX3Qg KikmKHNjLT5kZXNjX3R4WzBdKTsKKwl9CisKKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19k YXRhX3R4LCBtYXBwLCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJcmV0dXJuICgwKTsKK30KKwor LyoKKyAqIGRlcXVldSBwYWNrZXRzIGFuZCB0cmFuc21pdAorICovCitzdGF0aWMgdm9pZAorZWNl c3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNj OworCXN0cnVjdCBtYnVmICptMDsKKwl1aW50MzJfdCBxdWV1ZWQgPSAwOworCisJc2MgPSBpZnAt PmlmX3NvZnRjOworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiAoSUZGX0RSVl9SVU5OSU5HIHwg SUZGX0RSVl9PQUNUSVZFKSkgIT0KKwkgICAgSUZGX0RSVl9SVU5OSU5HKQorCQlyZXR1cm47CisK KwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAorCSAgICBzYy0+ZG1hbWFwX3Jp bmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRF KTsKKworCWZvciAoOzspIHsKKwkJLyogR2V0IHBhY2tldCBmcm9tIHRoZSBxdWV1ZSAqLworCQlJ Rl9ERVFVRVVFKCZpZnAtPmlmX3NuZCwgbTApOworCQlpZiAobTAgPT0gTlVMTCkKKwkJCWJyZWFr OworCQlpZiAoZWNlX2VuY2FwKHNjLCBtMCkpIHsKKwkJCUlGX1BSRVBFTkQoJmlmcC0+aWZfc25k LCBtMCk7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX09BQ1RJVkU7CisJCQlicmVh azsKKwkJfQorCQlxdWV1ZWQrKzsKKwkJQlBGX01UQVAoaWZwLCBtMCk7CisJfQorCWlmIChxdWV1 ZWQpIHsKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ190eCwgc2MtPmRtYW1hcF9y aW5nX3R4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNfRE1BU1lOQ19QUkVXUklURSk7 CisJCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lk CitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlF Q0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVDRV9VTkxPQ0soc2MpOworfQor CitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNl ZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3RydWN0IGlmbmV0ICopYXJnOwor CWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZuZXQg KmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNFX1RY TE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsKK30K KworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4gYmUg Y2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0aWMg dm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlm cCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmlnOworCisJd3JpdGVfNChzYywg VFNfRE1BX0NPTlRST0wsIDApOworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwor CWlmIChpZnApCisJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZGX0RSVl9SVU5OSU5HIHwgSUZG X0RSVl9PQUNUSVZFKTsKKworCWNhbGxvdXRfc3RvcCgmc2MtPnRpY2tfY2gpOworCisJLypEaXNh YmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9D T05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxFKTsKKwl3cml0ZV80KHNj LCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0 IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSByZWFkXzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHKTsK KwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJd3JpdGVfNChzYywgTUFDX1BP UlRfMV9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKiBEaXNhYmxlIGFsbCBpbnRlcnJ1 cHQgc3RhdHVzIHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4MDAw MDFGRkYpOworCisJLyogQ2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMuICovCisJd3Jp dGVfNChzYywgSU5URVJSVVBUX1NUQVRVUywgMHgwMDAwMUZGRik7CisKKwl3cml0ZV80KHNjLCBT V0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOworCXdyaXRlXzQoc2MsIENQVV9Q T1JUX0NPTkZJRywgaW5pdGlhbF9jcHVfY29uZmlnKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8w X0NPTkZJRywgaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXdyaXRlXzQoc2MsIE1BQ19QT1JUXzFf Q09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywg MSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1Y3QgZWNlX3NvZnRjICpzYykK K3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlpZnAtPmlmX2Rydl9mbGFncyB8 PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfT0FDVElW RTsKKwkvKiBFbmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsCisJ ICAgIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+KFBPUlRfRElTQUJMRSkpOworCXdyaXRl XzQoc2MsIElOVEVSUlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKwl3cml0ZV80KHNjLCBGU19ETUFf Q09OVFJPTCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywg c2MpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYykK K3sKKwlzdHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVsdGlhZGRyCSppZm1hOworCXVp bnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5pZnA7CisKKwljbGVhcl9tYWNf ZW50cmllcyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgaWZw LT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChz YywgTUFDX1BPUlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX0JS T0FEQ0FTVF9QQUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX01VTFRJQ0FT VF9QQUNLRVQpOworCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29u ZmlnKTsKKwkJcmV0dXJuOworCX0KKwlpZl9tYWRkcl9ybG9jayhpZnApOworCVRBSUxRX0ZPUkVB Q0goaWZtYSwgJmlmcC0+aWZfbXVsdGlhZGRycywgaWZtYV9saW5rKSB7CisJCWlmIChpZm1hLT5p Zm1hX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LKQorCQkJY29udGludWU7CisJCWFkZF9tYWNf ZW50cnkoc2MsCisJCSAgICBMTEFERFIoKHN0cnVjdCBzb2NrYWRkcl9kbCAqKWlmbWEtPmlmbWFf YWRkcikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vj ZWlvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBjYWRkcl90IGRhdGEpCit7CisJ c3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOworCXN0cnVjdCBtaWlfZGF0YSAq bWlpOworCXN0cnVjdCBpZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJlcSAqKWRhdGE7CisJaW50IG1h c2ssIGVycm9yID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2FzZSBTSU9DU0lGRkxBR1M6CisJ CUVDRV9MT0NLKHNjKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYgSUZGX1VQKSA9PSAwICYmCisJ CSAgICBpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgeworCQkJaWZwLT5pZl9k cnZfZmxhZ3MgJj0gfklGRl9EUlZfUlVOTklORzsKKwkJCWVjZXN0b3Aoc2MpOworCQl9IGVsc2Ug eworCQkJLyogUmVpbml0aWFsaXplIGNhcmQgb24gYW55IHBhcmFtZXRlciBjaGFuZ2UuICovCisJ CQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApICYmCisJCQkgICAgIShpZnAtPmlmX2Rydl9m bGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCQkJZWNlX3Jlc3RhcnQoc2MpOworCQl9CisJCUVD RV9VTkxPQ0soc2MpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0FERE1VTFRJOgorCWNhc2UgU0lP Q0RFTE1VTFRJOgorCQlFQ0VfTE9DSyhzYyk7CisJCXNldF9maWx0ZXIoc2MpOworCQlFQ0VfVU5M T0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTSUZNRURJQToKKwljYXNlIFNJT0NHSUZN RURJQToKKwkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwkJZXJyb3IgPSBp Zm1lZGlhX2lvY3RsKGlmcCwgaWZyLCAmbWlpLT5taWlfbWVkaWEsIGNtZCk7CisJCWJyZWFrOwor CWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZfY2FwZW5hYmxlIF4gaWZyLT5pZnJf cmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRVKSB7CisJCQlFQ0VfTE9DSyhzYyk7 CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6CisJCWVycm9yID0gZXRoZXJfaW9j dGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJcmV0dXJuIChlcnJvcik7Cit9CisK K3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBj aGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQorCQlzYy0+bWlpYnVzID0gTlVMTDsK K30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5lcy4KKyAqLworc3RhdGljIGludAor ZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50IHBoeSwgaW50IHJlZykKK3sKKwlz dHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKiBPbmx5IG9uZSBwaHkgaW4gdGhpcyBkZXZpY2UuICov CisJaWYgKHBoeT4wKQorCQlyZXR1cm4gKDApOworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYp OworCXJldHVybiAocGh5X3JlYWQoc2MsIHBoeSwgcmVnKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Vj ZV9taWlidXNfd3JpdGVyZWcoZGV2aWNlX3QgZGV2LCBpbnQgcGh5LCBpbnQgcmVnLCBpbnQgZGF0 YSkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKKwlwaHlfd3JpdGUoc2MsIHBoeSwgcmVnLCBkYXRhKTsKKwlyZXR1cm4gKDApOworfQorCitz dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVy ZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCWVjZV9wcm9iZSksCisJREVWTUVUSE9E KGRldmljZV9hdHRhY2gsCWVjZV9hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAll Y2VfZGV0YWNoKSwKKworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoYnVzX2NoaWxk X2RldGFjaGVkLAllY2VfY2hpbGRfZGV0YWNoZWQpLAorCisJLyogTUlJIGludGVyZmFjZSAqLwor CURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJZWNlX21paWJ1c19yZWFkcmVnKSwKKwlERVZNRVRI T0QobWlpYnVzX3dyaXRlcmVnLAllY2VfbWlpYnVzX3dyaXRlcmVnKSwKKworCXsgMCwgMCB9Cit9 OworCitzdGF0aWMgZHJpdmVyX3QgZWNlX2RyaXZlciA9IHsKKwkiZWNlIiwKKwllY2VfbWV0aG9k cywKKwlzaXplb2Yoc3RydWN0IGVjZV9zb2Z0YyksCit9OworCitEUklWRVJfTU9EVUxFKGVjZSwg ZWNvbmFhcm0sIGVjZV9kcml2ZXIsIGVjZV9kZXZjbGFzcywgMCwgMCk7CitEUklWRVJfTU9EVUxF KG1paWJ1cywgZWNlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2Y2xhc3MsIDAsIDApOworTU9E VUxFX0RFUEVORChlY2UsIG1paWJ1cywgMSwgMSwgMSk7CitNT0RVTEVfREVQRU5EKGVjZSwgZXRo ZXIsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXJlZy5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9pZl9lY2Vy ZWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKKy8qLQorICogQ29weXJpZ2h0IChj KSAyMDA5LCBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0 cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBM SUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VS VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV UFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNM VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VU IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT SUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZyZWVCU0QgJAorICovCisKKyNp Zm5kZWYJX0lGX0VDRVJFR19ICisjZGVmaW5lCV9JRl9FQ0VSRUdfSAorCisjZGVmaW5lCUVUSF9D RkcJCTB4MDgKKyNkZWZpbmUJRVRIX0NGR19STUlJCQkoMSA8PCAxNSkKKyNkZWZpbmUJUEhZX0NP TlRST0wJCTB4MDAKKyNkZWZpbmUJUEhZX1JXX09LCQkoMTw8MTUpCisKKyNkZWZpbmUJUEhZX0FE RFJFU1MoeCkJCSgoeCkgJiAweDEpCisjZGVmaW5lCVBIWV9SRUdJU1RFUihyKQkoKChyKSAmIDB4 MUYpIDw8IDgpCisjZGVmaW5lCVBIWV9XUklURV9DT01NQU5ECSgxPDwxMykKKyNkZWZpbmUJUEhZ X1JFQURfQ09NTUFORAkoMTw8MTQpCisjZGVmaW5lCVBIWV9HRVRfREFUQShkKQkoKChkKSA+PiAx NikgJiAweEZGRkYpCisjZGVmaW5lCVBIWV9EQVRBKGQpCQkoKChkKSAmIDB4RkZGRikgPDwgMTYp CisKKyNkZWZpbmUJUE9SVF8wX0NPTkZJRwkJMHgwOAorCisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NF U1NfQ09OVFJPTF8wCTB4MDUwCisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xCTB4 MDU0CisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yCTB4MDU4CisKKyNkZWZpbmUJ QVJMX1dSSVRFX0NPTU1BTkQJKDE8PDMpCisjZGVmaW5lCUFSTF9MT09LVVBfQ09NTUFORAkoMTw8 MikKKyNkZWZpbmUJQVJMX0NPTU1BTkRfQ09NUExFVEUJKDEpCisKKworI2RlZmluZQlQT1JUMAkJ CSgxIDw8IDApCisjZGVmaW5lCVBPUlQxCQkJKDEgPDwgMSkKKyNkZWZpbmUJQ1BVX1BPUlQJCSgx IDw8IDIpCisKKworI2RlZmluZQlWTEFOMF9HUk9VUF9JRAkJKDApCisjZGVmaW5lCVZMQU4xX0dS T1VQX0lECQkoMSkKKyNkZWZpbmUJVkxBTjJfR1JPVVBfSUQJCSgyKQorI2RlZmluZQlWTEFOM19H Uk9VUF9JRAkJKDMpCisjZGVmaW5lCVZMQU40X0dST1VQX0lECQkoNCkKKyNkZWZpbmUJVkxBTjVf R1JPVVBfSUQJCSg1KQorI2RlZmluZQlWTEFONl9HUk9VUF9JRAkJKDYpCisjZGVmaW5lCVZMQU43 X0dST1VQX0lECQkoNykKKworI2RlZmluZQlQT1JUMF9QVklECQkoVkxBTjFfR1JPVVBfSUQpCisj ZGVmaW5lCVBPUlQxX1BWSUQJCShWTEFOMl9HUk9VUF9JRCkKKyNkZWZpbmUJQ1BVX1BPUlRfUFZJ RAkJKFZMQU4wX0dST1VQX0lEKQorCisjZGVmaW5lCVZMQU4wX1ZJRAkJKDB4MTExKQorI2RlZmlu ZQlWTEFOMV9WSUQJCSgweDIyMikKKyNkZWZpbmUJVkxBTjJfVklECQkoMHgzMzMpCisjZGVmaW5l CVZMQU4zX1ZJRAkJKDB4NDQ0KQorI2RlZmluZQlWTEFONF9WSUQJCSgweDU1NSkKKyNkZWZpbmUJ VkxBTjVfVklECQkoMHg2NjYpCisjZGVmaW5lCVZMQU42X1ZJRAkJKDB4Nzc3KQorI2RlZmluZQlW TEFON19WSUQJCSgweDg4OCkKKworI2RlZmluZQlWTEFOMF9HUk9VUAkJKFBPUlQwIHwgUE9SVDEg fCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjFfR1JPVVAJCShQT1JUMCB8IENQVV9QT1JUKQorI2Rl ZmluZQlWTEFOMl9HUk9VUAkJKFBPUlQxIHwgQ1BVX1BPUlQpCisjZGVmaW5lCVZMQU4zX0dST1VQ CQkoMCkKKyNkZWZpbmUJVkxBTjRfR1JPVVAJCSgwKQorI2RlZmluZQlWTEFONV9HUk9VUAkJKDAp CisjZGVmaW5lCVZMQU42X0dST1VQCQkoMCkKKyNkZWZpbmUJVkxBTjdfR1JPVVAJCSgwKQorCisj ZGVmaW5lCVNXSVRDSF9DT05GSUcJCTB4MDA0CisjZGVmaW5lCU1BQ19QT1JUXzBfQ09ORklHCTB4 MDA4CisjZGVmaW5lCU1BQ19QT1JUXzFfQ09ORklHCTB4MDBDCisjZGVmaW5lCUNQVV9QT1JUX0NP TkZJRwkweDAxMAorI2RlZmluZQlCSVNUX1JFU1VMVF9URVNUXzAJMHgwOTQKKworI2RlZmluZQlG U19ETUFfQ09OVFJPTAkJMHgxMDQKKyNkZWZpbmUJVFNfRE1BX0NPTlRST0wJCTB4MTAwCisKKyNk ZWZpbmUJSU5URVJSVVBUX01BU0sJCTB4MDhDCisjZGVmaW5lCUlOVEVSUlVQVF9TVEFUVVMJMHgw ODgKKworI2RlZmluZQlUU19ERVNDUklQVE9SX1BPSU5URVIJCTB4MTA4CisjZGVmaW5lCVRTX0RF U0NSSVBUT1JfQkFTRV9BRERSCTB4MTEwCisjZGVmaW5lCUZTX0RFU0NSSVBUT1JfUE9JTlRFUgkJ MHgxMEMKKyNkZWZpbmUJRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIJMHgxMTQKKworCisjZGVmaW5l CVZMQU5fVklEXzBfMQkJMHgwNjAKKyNkZWZpbmUJVkxBTl9WSURfMl8zCQkweDA2NAorI2RlZmlu ZQlWTEFOX1ZJRF80XzUJCTB4MDY4CisjZGVmaW5lCVZMQU5fVklEXzZfNwkJMHgwNkMKKworI2Rl ZmluZQlWTEFOX1BPUlRfUFZJRAkJMHgwNUMKKyNkZWZpbmUJVkxBTl9NRU1CRVJfUE9SVF9NQVAJ CTB4MDcwCisjZGVmaW5lCVZMQU5fVEFHX1BPUlRfTUFQCQkweDA3NAorCisKKyNkZWZpbmUJQVNJ WF9HSUdBX1BIWQkJMQorI2RlZmluZQlUV09fU0lOR0xFX1BIWQkJMgorI2RlZmluZQlBR0VSRV9H SUdBX1BIWQkJMworI2RlZmluZQlWU0M4NjAxX0dJR0FfUEhZCTQKKyNkZWZpbmUJSUNfUExVU19Q SFkJCTUKKyNkZWZpbmUJTk9UX0ZPVU5EX1BIWQkJKC0xKQorCisjZGVmaW5lCU1BWF9QQUNLRVRf TEVOCQkoMTUzNikKKworI2RlZmluZQlJTlZBTElEX0VOVFJZCQkwCisjZGVmaW5lCU5FV19FTlRS WQkJMHgxCisjZGVmaW5lCVNUQVRJQ19FTlRSWQkJMHg3CisKKy8qbWFzayBzdGF0dXMgZXhjZXB0 IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lCUVSUk9SX01BU0sJCTB4RkZGRkZGN0YKKworLypo YXJkd2FyZSBpbnRlcmZhY2UgZmxhZ3MqLworCisjZGVmaW5lCUZBU1RfQUdJTkcJCSgweGYpCisj ZGVmaW5lCUlWTF9MRUFSTklORwkJKDB4MSA8PCAyMikKKy8qaGFyZHdhcmUgTkFUIGFjY2VsZXJh dG9yKi8KKyNkZWZpbmUJSEFSRFdBUkVfTkFUCQkoMHgxIDw8IDIzKQorLyphZ2luZwkJdGltZQkJ c2V0dGluZyovCisKKy8qc2tpcCBsb29rdXAqLworI2RlZmluZQlTS0lQX0wyX0xPT0tVUF9QT1JU XzEJKDEgPDwgMjkpCisjZGVmaW5lCVNLSVBfTDJfTE9PS1VQX1BPUlRfMAkoMSA8PCAyOCkKKwor I2RlZmluZQlOSUNfTU9ERQkJKDEgPDwgMzApCisjZGVmaW5lCVBPUlRfRElTQUJMRQkJKDEgPDwg MTgpCisjZGVmaW5lCVNBX0xFQVJOSU5HX0RJU0FCTEUJCSgxIDw8IDE5KQorI2RlZmluZQlESVNB QkxFX0JST0FEQ0FTVF9QQUNLRVQJKDEgPDwgMjcpCisjZGVmaW5lCURJU0FCTEVfTVVMVElDQVNU X1BBQ0tFVAkoIDEgPDwgMjYpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2NmaV9idXNfZWNv bmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvY2ZpX2J1c19lY29uYS5jCShyZXZpc2lvbiAw KQorKysgYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2 NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2lu Y2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5 cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4K KyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2luY2x1 ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorCisjaW5jbHVkZSA8bWFj aGluZS9idXMuaD4KKworI2luY2x1ZGUgPGRldi9jZmkvY2ZpX3Zhci5oPgorCisjaW5jbHVkZSA8 YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4K Kworc3RhdGljIGludAorY2ZpX2Vjb25hX3Byb2JlKGRldmljZV90IGRldikKK3sKKworCXJldHVy biBjZmlfcHJvYmUoZGV2KTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBjZmlfZWNvbmFf bWV0aG9kc1tdID0geworCS8qIGRldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2aWNl X3Byb2JlLAkJY2ZpX2Vjb25hX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwJY2Zp X2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWNmaV9kZXRhY2gpLAorCisJezAs IDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgY2ZpX2Vjb25hX2RyaXZlciA9IHsKKwljZmlfZHJp dmVyX25hbWUsCisJY2ZpX2Vjb25hX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBjZmlfc29mdGMp LAorfTsKK0RSSVZFUl9NT0RVTEUoY2ZpLCBlY29uYWFybSwgY2ZpX2Vjb25hX2RyaXZlciwgY2Zp X2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS90aW1lci5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGFybS9lY29uYS90aW1lci5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL3RpbWVyLmMJKHJl dmlzaW9uIDApCkBAIC0wLDAgKzEsMzgxIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZ b2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPi4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11 c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0 IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1Ig QU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhP UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFN QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU SVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJ QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT SU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisj aW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QgJCIpOworI2luY2x1ZGUg PHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMu aD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21vZHVsZS5oPgorI2lu Y2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHN5 cy90aW1ldGMuaD4KKyNpbmNsdWRlIDxzeXMvd2F0Y2hkb2cuaD4KKyNpbmNsdWRlIDxtYWNoaW5l L2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9mcmFt ZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgi CisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKKyNkZWZpbmUJSU5JVElBTF9USU1FQ09VTlRFUgko MHhmZmZmZmZmZikKKworc3RhdGljIGludCB0aW1lcnNfaW5pdGlhbGl6ZWQgPSAwOworCisjZGVm aW5lCUhaCTEwMAorCitleHRlcm4gdW5zaWduZWQgaW50IENQVV9jbG9jazsKK2V4dGVybiB1bnNp Z25lZCBpbnQgQUhCX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK3N0 YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2NvdW50ZXIgPSAwOworCitzdHJ1Y3QgZWNfdGltZXJf c29mdGMgeworCXN0cnVjdCByZXNvdXJjZQkqCXRpbWVyX3Jlc1szXTsKKwlidXNfc3BhY2VfdGFn X3QJCXRpbWVyX2JzdDsKKwlidXNfc3BhY2VfaGFuZGxlX3QJdGltZXJfYnNoOworCXN0cnVjdCBt dHgJCXRpbWVyX210eDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Vfc3BlYyBlY190aW1l cl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZfQUNUSVZFIH0sCisJeyBTWVNf UkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsgU1lTX1JFU19JUlEsCQkxLAlSRl9BQ1RJVkUg fSwKKwl7IC0xLCAwIH0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBlY190aW1lcl9nZXRfdGltZWNv dW50KHN0cnVjdCB0aW1lY291bnRlciAqKTsKKworc3RhdGljIHN0cnVjdCB0aW1lY291bnRlciBl Y190aW1lY291bnRlciA9IHsKKwkudGNfZ2V0X3RpbWVjb3VudCA9IGVjX3RpbWVyX2dldF90aW1l Y291bnQsCisJLnRjX25hbWUgPSAiQ1BVIFRpbWVyIiwKKwkvKiBUaGlzIGlzIGFzc2lnbmVkIG9u IHRoZSBmbHkgaW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNfZnJlcXVlbmN5ID0gMCwKKwku dGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19xdWFsaXR5ID0gMTAwMCwKK307CisKK3N0YXRp YyBzdHJ1Y3QgZWNfdGltZXJfc29mdGMgKnRpbWVyX3NvZnRjID0gTlVMTDsKKworc3RhdGljIGlu bGluZQordm9pZCB3cml0ZV80KHVuc2lnbmVkIGludCB2YWwsIHVuc2lnbmVkIGludCBhZGRyKQor eworCWJ1c19zcGFjZV93cml0ZV80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJCQkgIHRpbWVy X3NvZnRjLT50aW1lcl9ic2gsIGFkZHIsIHZhbCk7CisKK30KKworc3RhdGljIGlubGluZQordW5z aWduZWQgaW50IHJlYWRfNCh1bnNpZ25lZCBpbnQgYWRkcikKK3sKKworCXJldHVybiBidXNfc3Bh Y2VfcmVhZF80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJICAgIHRpbWVyX3NvZnRjLT50aW1l cl9ic2gsIGFkZHIpOworfQorCisjZGVmaW5lCXVTRUNTX1BFUl9USUNLCSgxMDAwMDAwIC8gQVBC X2Nsb2NrKQorI2RlZmluZQlUSUNLUzJVU0VDUyh4KQkoKHgpICogdVNFQ1NfUEVSX1RJQ0spCisK K3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9jb3VudGVyX25vaW50KHZvaWQpCit7CisKKwlh cm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSByZWFkXzQoVElNRVJfVE0xX0NPVU5U RVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4gdjsKK30KKwordm9pZAorREVM QVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVtcDsKKwlpbnQgbnRpY2tzOwor CisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7IHVzZWMgPiAwOyB1c2VjLS0p CisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJCQkJOworCQlyZXR1cm47CisJ fQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7CisJbnRpY2tzID0gKCgoQVBC X2Nsb2NrIC8gMTAwMCkgKiB1c2VjKSAvIDEwMDApICsgMTAwOworCisJd2hpbGUgKG50aWNrcyA+ IDApIHsKKwkJdmFsX3RlbXAgPSByZWFkX3RpbWVyX2NvdW50ZXJfbm9pbnQoKTsKKwkJaWYgKHZh bCA+IHZhbF90ZW1wKQorCQkJbnRpY2tzIC09ICh2YWwgLSB2YWxfdGVtcCk7CisJCWVsc2UKKwkJ CW50aWNrcyAtPSAodmFsICsgKHRpbWVyX2NvdW50ZXIgLSB2YWxfdGVtcCkpOworCisJCXZhbCA9 IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICogU2V0dXAgdGltZXIKKyAqLworc3RhdGljIGlu bGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25lZCBpbnQgY291bnRlcl92YWx1ZSkKK3sKKwl1 bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1bnNpZ25lZCBpbnQgbWFza192YWx1ZTsKKwor CWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVHKTsKKworCW1hc2tfdmFsdWUg PSByZWFkXzQoVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7CisJd3JpdGVfNChjb3VudGVyX3ZhbHVl LCBUSU1FUl9UTTFfQ09VTlRFUl9SRUcpOworCXdyaXRlXzQoY291bnRlcl92YWx1ZSwgVElNRVJf VE0xX0xPQURfUkVHKTsKKwl3cml0ZV80KDAsIFRJTUVSX1RNMV9NQVRDSDFfUkVHKTsKKwl3cml0 ZV80KDAsVElNRVJfVE0xX01BVENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVS MV9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX1VQX0RPV05fQ09VTlQ7 CisKKwl3cml0ZV80KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7CisJd3JpdGVfNCgwLCBUSU1F Ul9UTTJfTE9BRF9SRUcpOworCXdyaXRlXzQofjB1LCBUSU1FUl9UTTJfTUFUQ0gxX1JFRyk7CisJ d3JpdGVfNCh+MHUsVElNRVJfVE0yX01BVENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+ KFRJTUVSMl9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjJfVVBfRE9X Tl9DT1VOVCk7CisKKwltYXNrX3ZhbHVlICY9IH4oNjMpOworCisJd3JpdGVfNChjb250cm9sX3Zh bHVlLCBUSU1FUl9UTV9DUl9SRUcpOworCXdyaXRlXzQobWFza192YWx1ZSwgVElNRVJfVE1fSU5U Ul9NQVNLX1JFRyk7Cit9CisKKy8qCisgKiBFbmFibGUgdGltZXIKKyAqLworc3RhdGljIGlubGlu ZSB2b2lkCit0aW1lcl9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1 ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVHKTsKKworCWNvbnRy b2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9sX3ZhbHVlIHw9IFRJ TUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJfT1ZFUkZMT1dfRU5BQkxFOwor CWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCXdyaXRlXzQoY29udHJvbF92YWx1 ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKK3Jl YWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJf VE0yX0NPVU5URVJfUkVHKTsKK30KKworLyoKKyAqIEdldCB0aW1lciBpbnRlcnJ1cHQgc3RhdHVz CisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFkX3RpbWVyX2ludGVycnVwdF9z dGF0dXModm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVH KTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVycnVwdCBzdGF0dXMKKyAqLworc3RhdGlj IGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKHVuc2lnbmVkIGludCBp cnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0dXM7CisKKwlpbnRlcnJ1cHRfc3Rh dHVzID0gICByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVHKTsKKwlpZiAoaXJxID09IDAp IHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01BVENIMV9JTlRSKSkKKwkJCWlu dGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIpOworCQlpZiAoaW50ZXJydXB0 X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+ KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMV9P VkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfT1ZFUkZMT1df SU5UUik7CisJfQorCWlmIChpcnEgPT0gMSkgeworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChU SU1FUjJfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9NQVRD SDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9NQVRDSDJfSU5UUikp CisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENIMl9JTlRSKTsKKwkJaWYgKGlu dGVycnVwdF9zdGF0dXMgJiAoVElNRVIyX09WRVJGTE9XX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0 YXR1cyAmPSB+KFRJTUVSMl9PVkVSRkxPV19JTlRSKTsKKwl9CisKKwl3cml0ZV80KGludGVycnVw dF9zdGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25l ZAorZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNvdW50ZXIgKmEpCit7CisJdW5z aWduZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJdGlja3MxID0gcmVhZF9zZWNv bmRfdGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEpOworCXJldHVybiB0aWNrczE7 Cit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3Nl dHVwX3RpbWVyKHZvaWQpCit7CisKKwl0aW1lcl9jb3VudGVyID0gQVBCX2Nsb2NrL0haOworCS8q CisJICogc2V0dXAgdGltZXItcmVsYXRlZCB2YWx1ZXMKKwkgKi8KKwlzZXR1cF90aW1lcih0aW1l cl9jb3VudGVyKTsKK30KKwordm9pZAorY3B1X2luaXRjbG9ja3Modm9pZCkKK3sKKworCWVjX3Rp bWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9IEFQQl9jbG9jazsKKwl0Y19pbml0KCZlY190aW1lY291 bnRlcik7CisJdGltZXJfZW5hYmxlKCk7CisJdGltZXJzX2luaXRpYWxpemVkID0gMTsKK30KKwor dm9pZAorY3B1X3N0YXJ0cHJvZmNsb2NrKHZvaWQpCit7CisKK30KKwordm9pZAorY3B1X3N0b3Bw cm9mY2xvY2sodm9pZCkKK3sKKworfQorCitzdGF0aWMgaW50CitlY190aW1lcl9wcm9iZShkZXZp Y2VfdCBkZXYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgQ1BVIFRpbWVyIik7 CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVzZXQodm9pZCAqYXJnKQorewor CisJYXJtX21hc2tfaXJxKDEpOworCWNsZWFyX3RpbWVyX2ludGVycnVwdF9zdGF0dXMoMSk7CisJ YXJtX3VubWFza19pcnEoMSk7CisJcmV0dXJuIChGSUxURVJfSEFORExFRCk7Cit9CisKK3N0YXRp YyBpbnQKK2VjX2hhcmRjbG9jayh2b2lkICphcmcpCit7CisJc3RydWN0CXRyYXBmcmFtZSAqZnJh bWU7CisJdW5zaWduZWQgaW50IHZhbDsKKwkvKmNsZWFyIHRpbWVyIGludGVycnVwdCBzdGF0dXMq LworCisJYXJtX21hc2tfaXJxKDApOworCisJdmFsID0gcmVhZF80KFRJTUVSX0lOVEVSUlVQVF9T VEFUVVNfUkVHKTsKKwl2YWwgJj0gfihUSU1FUjFfT1ZFUkZMT1dfSU5URVJSVVBUKTsKKwl3cml0 ZV80KHZhbCwgVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOworCisJZnJhbWUgPSAoc3RydWN0 IHRyYXBmcmFtZSAqKWFyZzsKKwloYXJkY2xvY2soVFJBUEZfVVNFUk1PREUoZnJhbWUpLCBUUkFQ Rl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7CisKKwlyZXR1cm4gKEZJTFRFUl9I QU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfdGltZXJfYXR0YWNoKGRldmljZV90IGRldikK K3sKKwlzdHJ1Y3QJZWNfdGltZXJfc29mdGMgKnNjOworCWludAllcnJvcjsKKwl2b2lkCSppaGw7 CisKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQlyZXR1cm4gKEVOWElPKTsKKworCXNj ID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXRp bWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxvY19yZXNvdXJjZXMoZGV2LCBlY190 aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJyb3IpIHsKKwkJZGV2aWNlX3ByaW50 ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2VzXG4iKTsKKwkJcmV0dXJuIChFTlhJ Tyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0X2J1c3RhZyhzYy0+dGltZXJfcmVz WzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT50aW1lcl9yZXNb MF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNj LT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX2hhcmRjbG9jaywgTlVMTCwg TlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBlY190aW1l cl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3Qg c2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor CWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMl0sIElOVFJfVFlQRV9DTEss CisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAhPSAwKSB7CisJCWJ1c19yZWxlYXNl X3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50aW1lcl9yZXMpOworCQlkZXZpY2Vf cHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBpbnRlcnJ1cHRcbiIpOworCQlyZXR1 cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhv ZF90IGVjX3RpbWVyX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLCBlY190 aW1lcl9wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsIGVjX3RpbWVyX2F0dGFjaCks CisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY190aW1lcl9kcml2ZXIgPSB7CisJ InRpbWVyIiwKKwllY190aW1lcl9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNfdGltZXJfc29m dGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3QgZWNfdGltZXJfZGV2Y2xhc3M7CisKK0RSSVZF Ul9NT0RVTEUodGltZXIsIGVjb25hYXJtLCBlY190aW1lcl9kcml2ZXIsIGVjX3RpbWVyX2RldmNs YXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9lY29uYS5jCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9l Y29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hLmMJKHJldmlzaW9u IDApCkBAIC0wLDAgKzEsNzU4IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZb2hhbmVz IE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3 aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0 aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1 dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09O VFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV UlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENP TlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH T09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC VVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZ LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g QU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1 ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQiKTsKKworI2luY2x1ZGUgPHN5 cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4K KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVk ZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMv cm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8dm0vdm1fa2Vybi5oPgorI2lu Y2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+CisjaW5jbHVkZSA8dm0v dm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJVkFURQorI2luY2x1ZGUg PG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisjaW5jbHVkZSA8bWFj aGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNv bmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMgKmVjb25hX3NvZnRjOworCit1 bnNpZ25lZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5zaWduZWQgaW50IEFIQl9jbG9j azsKK3Vuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK2JzX3Byb3RvcyhnZW5lcmljKTsKK2JzX3By b3RvcyhnZW5lcmljX2FybXY0KTsKKworc3RydWN0IGJ1c19zcGFjZSBlY29uYV9ic190YWcgPSB7 CisJLyogY29va2llICovCisJKHZvaWQgKikgMCwKKworCS8qIG1hcHBpbmcvdW5tYXBwaW5nICov CisJZ2VuZXJpY19ic19tYXAsCisJZ2VuZXJpY19ic191bm1hcCwKKwlnZW5lcmljX2JzX3N1YnJl Z2lvbiwKKworCS8qIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uICovCisJZ2VuZXJpY19ic19hbGxv YywKKwlnZW5lcmljX2JzX2ZyZWUsCisKKwkvKiBiYXJyaWVyICovCisJZ2VuZXJpY19ic19iYXJy aWVyLAorCisJLyogcmVhZCAoc2luZ2xlKSAqLworCWdlbmVyaWNfYnNfcl8xLAorCWdlbmVyaWNf YXJtdjRfYnNfcl8yLAorCWdlbmVyaWNfYnNfcl80LAorCU5VTEwsCisKKwkvKiByZWFkIG11bHRp cGxlICovCisJZ2VuZXJpY19ic19ybV8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcm1fMiwKKwlnZW5l cmljX2JzX3JtXzQsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uICovCisJZ2VuZXJpY19ic19y cl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcnJfMiwKKwlnZW5lcmljX2JzX3JyXzQsCisJTlVMTCwK KworCS8qIHdyaXRlIChzaW5nbGUpICovCisJZ2VuZXJpY19ic193XzEsCisJZ2VuZXJpY19hcm12 NF9ic193XzIsCisJZ2VuZXJpY19ic193XzQsCisJTlVMTCwKKworCS8qIHdyaXRlIG11bHRpcGxl ICovCisJZ2VuZXJpY19ic193bV8xLAorCWdlbmVyaWNfYXJtdjRfYnNfd21fMiwKKwlnZW5lcmlj X2JzX3dtXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIHJlZ2lvbiAqLworCU5VTEwsCisJTlVMTCwK KwlOVUxMLAorCU5VTEwsCisKKwkvKiBzZXQgbXVsdGlwbGUgKi8KKwlOVUxMLAorCU5VTEwsCisJ TlVMTCwKKwlOVUxMLAorCisJLyogc2V0IHJlZ2lvbiAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxM LAorCU5VTEwsCisKKwkvKiBjb3B5ICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwK KworCS8qIHJlYWQgKHNpbmdsZSkgc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJ TlVMTCwKKworCS8qIHJlYWQgbXVsdGlwbGUgc3RyZWFtICovCisJTlVMTCwKKwlnZW5lcmljX2Fy bXY0X2JzX3JtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogcmVhZCByZWdpb24gc3RyZWFtICov CisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8qIHdyaXRlIChzaW5nbGUpIHN0 cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0 aXBsZSBzdHJlYW0gKi8KKwlOVUxMLAorCWdlbmVyaWNfYXJtdjRfYnNfd21fMiwKKwlOVUxMLAor CU5VTEwsCisKKwkvKiB3cml0ZSByZWdpb24gc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5V TEwsCisJTlVMTAorfTsKKworYnVzX3NwYWNlX3RhZ190IG9iaW9fdGFnID0gJmVjb25hX2JzX3Rh ZzsKKworc3RhdGljIGludAorZWNvbmFfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNl X3NldF9kZXNjKGRldiwgIkVDT05BIGRldmljZSBidXMiKTsKKwlyZXR1cm4gKDApOworfQorCitz dGF0aWMgdm9pZAorZWNvbmFfaWRlbnRpZnkoZHJpdmVyX3QgKmRydiwgZGV2aWNlX3QgcGFyZW50 KQoreworCisJQlVTX0FERF9DSElMRChwYXJlbnQsIDAsICJlY29uYWFybSIsIDApOworfQorCitz dHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoKK2J1c19kbWFfZ2V0X3JhbmdlKHZvaWQpCit7CisKKwly ZXR1cm4gKE5VTEwpOworfQorCitpbnQKK2J1c19kbWFfZ2V0X3JhbmdlX25iKHZvaWQpCit7CisK KwlyZXR1cm4gKDApOworfQorCitleHRlcm4gdm9pZCBpcnFfZW50cnkodm9pZCk7CisKK3N0YXRp YyB2b2lkCitlY29uYV9hZGRfY2hpbGQoZGV2aWNlX3QgZGV2LCBpbnQgcHJpbywgY29uc3QgY2hh ciAqbmFtZSwgaW50IHVuaXQsCisgICAgYnVzX2FkZHJfdCBhZGRyLCBidXNfc2l6ZV90IHNpemUs CisgICAgaW50IGlycTAsIGludCBpcnExLAorICAgIGludCBpcnEyLCBpbnQgaXJxMywgaW50IGly cTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVjdCBlY29uYV9pdmFyICppdmFyOworCisJa2lk ID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRldiwgcHJpbywgbmFtZSwgdW5pdCk7CisJaWYg KGtpZCA9PSBOVUxMKSB7CisJCXByaW50ZigiQ2FuJ3QgYWRkIGNoaWxkICVzJWQgb3JkZXJlZFxu IiwgbmFtZSwgdW5pdCk7CisJCXJldHVybjsKKwl9CisJaXZhciA9IG1hbGxvYyhzaXplb2YoKml2 YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlmIChpdmFyID09IE5VTEwpIHsK KwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGtpZCk7CisJCXJldHVybjsKKwl9CisJZGV2aWNl X3NldF9pdmFycyhraWQsIGl2YXIpOworCXJlc291cmNlX2xpc3RfaW5pdCgmaXZhci0+cmVzb3Vy Y2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNf SVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAoaXJxMSAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtp ZCwgU1lTX1JFU19JUlEsIDEsIGlycTEsIDEpOworCWlmIChpcnEyICE9IDApCisJCWJ1c19zZXRf cmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMiwgaXJxMiwgMSk7CisJaWYgKGlycTMgIT0gMCkK KwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAzLCBpcnEzLCAxKTsKKwlpZiAo aXJxNCAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDQsIGlycTQs IDEpOworCisJaWYgKGFkZHIgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNf TUVNT1JZLCAwLCBhZGRyLCBzaXplKTsKKworfQorCitzdHJ1Y3QgY3B1X2RldnMKK3sKKwljb25z dCBjaGFyICpuYW1lOworCWludCB1bml0OworCWJ1c19hZGRyX3QgbWVtX2Jhc2U7CisJYnVzX3Np emVfdCBtZW1fbGVuOworCWludCBpcnEwOworCWludCBpcnExOworCWludCBpcnEyOworCWludCBp cnEzOworCWludCBpcnE0OworfTsKKworc3RydWN0IGNwdV9kZXZzIGVjb25hcm1fZGV2c1tdID0K K3sKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9QSUNfQkFT RSwgRUNPTkFfUElDX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInN5c3RlbSIsIDAsCisJCUVDT05B X0lPX0JBU0UgKyBFQ09OQV9TWVNURU1fQkFTRSwgRUNPTkFfU1lTVEVNX1NJWkUsCisJCTAKKwl9 LAorCXsKKwkJInVhcnQiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLCBF Q09OQV9VQVJUX1NJWkUsCisJCUVDT05BX0lSUV9VQVJUCisJfSwKKwl7CisJCSJ0aW1lciIsIDAs CisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9USU1FUl9CQVNFLCBFQ09OQV9USU1FUl9TSVpFLAor CQlFQ09OQV9JUlFfVElNRVJfMSwgRUNPTkFfSVJRX1RJTUVSXzIKKwl9LAorCXsKKwkJIm9oY2ki LCAwLAorCQlFQ09OQV9PSENJX1ZCQVNFLCBFQ09OQV9PSENJX1NJWkUsCisJCUVDT05BX0lSUV9P SENJCisJCX0sCisJeworCQkiZWhjaSIsIDAsCisJCUVDT05BX0VIQ0lfVkJBU0UsIEVDT05BX0VI Q0lfU0laRSwKKwkJRUNPTkFfSVJRX0VIQ0kKKwl9LAorCXsKKwkJImNmaSIsIDAsCisJCUVDT05B X0NGSV9WQkFTRSwgRUNPTkFfQ0ZJX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJImVjZSIsIDAsCisJ CUVDT05BX0lPX0JBU0UgKyBFQ09OQV9ORVRfQkFTRSwgRUNPTkFfTkVUX1NJWkUsCisJCUVDT05B X0lSUV9TVEFUVVMsCisJCUVDT05BX0lSUV9UU1RDLCBFQ09OQV9JUlFfRlNSQywKKwkJRUNPTkFf SVJRX1RTUUUsIEVDT05BX0lSUV9GU1FGLAorCX0sCisJewkwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwIH0KK307CisKK3N0YXRpYyB2b2lkCitlY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRyZW4o ZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjKQoreworCWludCBpOworCXN0cnVj dCBjcHVfZGV2cyAqd2Fsa2VyOworCisJZm9yIChpID0gMCwgd2Fsa2VyID0gZWNvbmFybV9kZXZz OyB3YWxrZXItPm5hbWU7IGkrKywgd2Fsa2VyKyspIHsKKwkJZWNvbmFfYWRkX2NoaWxkKGRldiwg aSwgd2Fsa2VyLT5uYW1lLCB3YWxrZXItPnVuaXQsCisJCSAgICB3YWxrZXItPm1lbV9iYXNlLCB3 YWxrZXItPm1lbV9sZW4sCisJCSAgICB3YWxrZXItPmlycTAsd2Fsa2VyLT5pcnExLCB3YWxrZXIt PmlycTIsCisJCSAgICB3YWxrZXItPmlycTMsIHdhbGtlci0+aXJxNCk7CisJfQorCit9CisKK3N0 cnVjdCBpbnRjX3RyaWdnZXJfdCB7CisJaW50IG1vZGU7CisJaW50IGxldmVsOworfTsKKworc3Rh dGljIHN0cnVjdCBpbnRjX3RyaWdnZXJfdCBpbnRjX3RyaWdnZXJfdGFibGVbXSA9IHsKKwl7SU5U Q19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwg SU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZBTExJTkdfRURH RX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19UUklH R0VSX1VOS05PV04sIElOVENfVFJJR0dFUl9VTktOT1dOfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VS LCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xP V30sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfVFJJ R0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dF UiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVf SElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENf TEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dO LCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJ VkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZBTExJTkdfRURHRX0sCisJe0lO VENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfVFJJR0dF Ul9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwg SU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdF fSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0Vf VFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJ U0lOR19FREdFfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJ TlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xPV30sCit9OworCitzdGF0aWMgaW5saW5l IHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYp Cit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3JlYWRfNChzYy0+ZWNfc3QsIHNjLT5lY19zeXNfc2gs IG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3JpdGVfNChzdHJ1Y3QgZWNvbmFfc29m dGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQoreworCisJcmV0dXJuIGJ1c19z cGFjZV93cml0ZV80KHNjLT5lY19zdCwgc2MtPmVjX3N5c19zaCwgb2ZmLCB2YWwpOworfQorCitz dGF0aWMgaW5saW5lIHVpbnQzMl90CitzeXN0ZW1fcmVhZF80KHN0cnVjdCBlY29uYV9zb2Z0YyAq c2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQoc2MtPmVj X3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3N5 c3RlbV93cml0ZV80KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmLCB1aW50 MzJfdCB2YWwpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBzYy0+ ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0aWMgaW5saW5lIHZvaWQKK2Vj b25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywgdW5zaWduZWQgaW50IGly cSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCWlm ICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2RlICE9IElOVENfRURHRV9UUklH R0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JcmVhZF80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklH R0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJTlRDX0xFVkVMX1RSSUdHRVIp IHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7 CisJCQl3cml0ZV80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVCwK KwkJCSAgICB2YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEodmFsICYgKDFVTCA8PCBpcnEp KSkgeworCQkJdmFsIHw9ICgxVUwgPDwgaXJxKTsKKwkJCXdyaXRlXzQoc2MsIElOVENfSU5URVJS VVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9Cit9CisK Ky8qCisgKiBDb25maWd1cmUgaW50ZXJydXB0IHRyaWdnZXIgbGV2ZWwgdG8gYmUgQWN0aXZlIEhp Z2gvTG93CisgKiBvciBSaXNpbmcvRmFsbGluZyBFZGdlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9p ZAorZWNvbmFfc2V0X2lycV9sZXZlbChzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywKKyAgICB1bnNp Z25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJdW5zaWduZWQgaW50IHZhbDsK KworCWlmICgobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGxldmVsICE9IElO VENfQUNUSVZFX0xPVykgJiYKKwkgICAgKGxldmVsICE9IElOVENfUklTSU5HX0VER0UpICYmCisJ ICAgIChsZXZlbCAhPSBJTlRDX0ZBTExJTkdfRURHRSkpIHsKKwkJcmV0dXJuOworCX0KKworCXZh bCA9IHJlYWRfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VUKTsK KworCWlmICgobGV2ZWwgPT0gSU5UQ19BQ1RJVkVfSElHSCkgfHwgKGxldmVsID09IElOVENfUklT SU5HX0VER0UpKSB7CisJCWlmICh2YWwgJiAoMVVMIDw8IGlycSkpIHsKKwkJCXZhbCAmPSB+KDFV TCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9S RUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoISh2YWwgJiAo MVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywg SU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJ CX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfc3lzdGVtX2Nsb2NrKHZvaWQpCit7CisJdWlu dDMyX3Qgc2Nsb2NrID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgU1lTVEVNX0NMT0NLKTsK KworCXNjbG9jayA9IChzY2xvY2sgPj4gNikgJiAweDAzOworCisJc3dpdGNoIChzY2xvY2spIHsK KwljYXNlIDA6CisJCUNQVV9jbG9jayA9IDE3NTAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAxOgor CQlDUFVfY2xvY2sgPSAyMDAwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJQ1BVX2Nsb2Nr ID0gMjI1MDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCUNQVV9jbG9jayA9IDI1MDAwMDAw MDsKKwkJYnJlYWs7CisJfQorCUFIQl9jbG9jayA9IENQVV9jbG9jayA+PiAxOworCUFQQl9jbG9j ayA9IEFIQl9jbG9jayA+PiAxOworfQorCitzdGF0aWMgaW50CitlY29uYV9hdHRhY2goZGV2aWNl X3QgZGV2KQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJaW50IGk7CisKKwllY29uYV9zb2Z0YyA9IHNjOworCXNjLT5lY19zdCA9ICZlY29uYV9i c190YWc7CisJc2MtPmVjX3NoID0gRUNPTkFfSU9fQkFTRTsKKwlzYy0+ZGV2ID0gZGV2OworCWlm IChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5lY19zdCwgc2MtPmVjX3NoLCBFQ09OQV9QSUNfQkFT RSwKKwkgICAgRUNPTkFfUElDX1NJWkUsICZzYy0+ZWNfc3lzX3NoKSAhPSAwKQorCQlwYW5pYygi VW5hYmxlIHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lv bihzYy0+ZWNfc3QsIHNjLT5lY19zaCwgRUNPTkFfU1lTVEVNX0JBU0UsCisJICAgIEVDT05BX1NZ U1RFTV9TSVpFLCAmc2MtPmVjX3N5c3RlbV9zaCkgIT0gMCkKKwkJcGFuaWMoIlVuYWJsZSB0byBt YXAgSVJRIHJlZ2lzdGVycyIpOworCisJc2MtPmVjX2lycV9ybWFuLnJtX3R5cGUgPSBSTUFOX0FS UkFZOworCXNjLT5lY19pcnFfcm1hbi5ybV9kZXNjciA9ICJFQ09OQSBJUlFzIjsKKwlzYy0+ZWNf bWVtX3JtYW4ucm1fdHlwZSA9IFJNQU5fQVJSQVk7CisJc2MtPmVjX21lbV9ybWFuLnJtX2Rlc2Ny ID0gIkVDT05BIE1lbW9yeSI7CisJaWYgKHJtYW5faW5pdCgmc2MtPmVjX2lycV9ybWFuKSAhPSAw IHx8CisJICAgIHJtYW5fbWFuYWdlX3JlZ2lvbigmc2MtPmVjX2lycV9ybWFuLCAwLCAzMSkgIT0g MCkKKwkJcGFuaWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNldCB1cCBJUlEgcm1hbiIpOwor CWlmIChybWFuX2luaXQoJnNjLT5lY19tZW1fcm1hbikgIT0gMCB8fAorCSAgICBybWFuX21hbmFn ZV9yZWdpb24oJnNjLT5lY19tZW1fcm1hbiwgMCwKKwkgICAgfjApICE9IDApCisJCXBhbmljKCJl Y29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAgbWVtb3J5IHJtYW4iKTsKKworCXdyaXRlXzQo c2MsIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VULCAweGZmZmZm ZmZmKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgMHhm ZmZmZmZmZik7CisKKwl3cml0ZV80KHNjLCBJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VU LCAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7 CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJTlRDX1RSSUdHRVJfVU5LTk9X TikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNfdHJpZ2dlcl90YWJsZVtpXS5t b2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGludGNfdHJpZ2dlcl90YWJsZVtp XS5sZXZlbCk7CisJCX0KKwl9CisKKwlnZXRfc3lzdGVtX2Nsb2NrKCk7CisKKwllY29uYV9jcHVf YWRkX2J1aWx0aW5fY2hpbGRyZW4oZGV2LCBzYyk7CisKKwlidXNfZ2VuZXJpY19wcm9iZShkZXYp OworCWJ1c19nZW5lcmljX2F0dGFjaChkZXYpOworCWVuYWJsZV9pbnRlcnJ1cHRzKEkzMl9iaXQg fCBGMzJfYml0KTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ug KgorZWNvbmFfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCwgaW50 IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9sb25nIGVuZCwgdV9sb25nIGNv dW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjID0gZGV2aWNlX2dl dF9zb2Z0YyhkZXYpOworCXN0cnVjdCByZXNvdXJjZV9saXN0X2VudHJ5ICpybGU7CisJc3RydWN0 IGVjb25hX2l2YXIgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlzdHJ1Y3QgcmVz b3VyY2VfbGlzdCAqcmwgPSAmaXZhci0+cmVzb3VyY2VzOworCisJaWYgKGRldmljZV9nZXRfcGFy ZW50KGNoaWxkKSAhPSBkZXYpCisJCXJldHVybiAoQlVTX0FMTE9DX1JFU09VUkNFKGRldmljZV9n ZXRfcGFyZW50KGRldiksIGNoaWxkLAorCQkJICAgdHlwZSwgcmlkLCBzdGFydCwgZW5kLCBjb3Vu dCwgZmxhZ3MpKTsKKworCXJsZSA9IHJlc291cmNlX2xpc3RfZmluZChybCwgdHlwZSwgKnJpZCk7 CisJaWYgKHJsZSA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7CisJfQorCWlmIChybGUtPnJl cykKKwkJcGFuaWMoIlJlc291cmNlIHJpZCAlZCB0eXBlICVkIGFscmVhZHkgaW4gdXNlIiwgKnJp ZCwgdHlwZSk7CisJaWYgKHN0YXJ0ID09IDBVTCAmJiBlbmQgPT0gfjBVTCkgeworCQlzdGFydCA9 IHJsZS0+c3RhcnQ7CisJCWNvdW50ID0gdWxtYXgoY291bnQsIHJsZS0+Y291bnQpOworCQllbmQg PSB1bG1heChybGUtPmVuZCwgc3RhcnQgKyBjb3VudCAtIDEpOworCX0KKwlzd2l0Y2ggKHR5cGUp CisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0gcm1hbl9yZXNlcnZlX3Jlc291 cmNlKCZzYy0+ZWNfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5kLCBjb3VudCwgZmxhZ3MsIGNo aWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToKKwkJcmxlLT5yZXMgPSBybWFu X3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5lY19tZW1fcm1hbiwKKwkJICAgIHN0YXJ0LCBlbmQsIGNv dW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0gTlVMTCkgeworCQkJcm1hbl9z ZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJCXJtYW5fc2V0X2J1c2hhbmRs ZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAocmxlLT5yZXMpIHsK KwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVzKTsKKwkJcmxlLT5lbmQgPSBy bWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0gY291bnQ7CisJCXJtYW5fc2V0 X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxlLT5yZXMpOworfQorCitzdGF0 aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QoZGV2aWNl X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNvbmFfaXZhciAqaXZhcjsKKwlp dmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJuICgmKGl2YXItPnJlc291cmNl cykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jlc291cmNlKGRldmljZV90IGRl diwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCByaWQsIHN0cnVjdCByZXNvdXJj ZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJc3RydWN0IHJlc291cmNlX2xp c3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QoZGV2LCBjaGls ZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFMKTsKKwlybGUgPSByZXNvdXJj ZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9PSBOVUxMKQorCQlyZXR1cm4g KEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOworCXJsZS0+cmVzID0gTlVMTDsK KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9zZXR1cF9pbnRyKGRldmljZV90 IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291cmNlICppcmVzLCBpbnQgZmxh Z3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJfaW50cl90ICppbnRyLCB2b2lk ICphcmcsIHZvaWQgKipjb29raWVwKQoreworCisJaWYgKHJtYW5fZ2V0X3N0YXJ0KGlyZXMpID09 IEVDT05BX0lSUV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlwYW5pYygiQWxsIHN5c3RlbSBp bnRlcnJ1cHQgSVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVTX1NFVFVQX0lOVFIoZGV2aWNl X2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBmaWx0LAorCSAgICBpbnRyLCBh cmcsIGNvb2tpZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9nZXRfc3RhcnQoaXJlcykpOwor CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFfdGVhcmRvd25faW50cihkZXZp Y2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKyAgICB2b2lk ICpjb29raWUpCit7CisKKwlyZXR1cm4gKEJVU19URUFSRE9XTl9JTlRSKGRldmljZV9nZXRfcGFy ZW50KGRldiksIGNoaWxkLCByZXMsIGNvb2tpZSkpOworfQorCitzdGF0aWMgaW50CitlY29uYV9h Y3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwg aW50IHJpZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisKKwlyZXR1cm4gKHJtYW5fYWN0 aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50CitlY29uYV9wcmludF9jaGlsZChk ZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29uYV9pdmFyICppdmFy czsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJldHZhbCA9IDA7CisKKwlpdmFy cyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2YXJzLT5yZXNvdXJjZXM7CisK KwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYsIGNoaWxkKTsKKworCXJldHZh bCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0IiwgU1lTX1JFU19JT1BPUlQs ICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZShybCwgIm1lbSIs IFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50 X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOworCWlmIChkZXZpY2VfZ2V0X2Zs YWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAlI3giLCBkZXZpY2VfZ2V0X2Zs YWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGlsZF9mb290ZXIoZGV2LCBjaGls ZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2FybV9tYXNrX2lycSh1aW50cHRy X3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFf c29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8IDE8PG5iOworCXdyaXRlXzQo ZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOworfQor Cit2b2lkCithcm1fdW5tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZh bHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFfc29mdGMsCisJICAgIElOVENfSU5URVJSVVBU X0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VUKSB8ICgxIDw8IG5iKTsKKwl3cml0ZV80KGVj b25hX3NvZnRjLAorCSAgICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09G RlNFVCwgdmFsdWUpOworCXZhbHVlID0gcmVhZF80KGVjb25hX3NvZnRjLCBJTlRDX0lOVEVSUlVQ VF9NQVNLX1JFR19PRkZTRVQpJiB+KDEgPDwgbmIpOworCXdyaXRlXzQoZWNvbmFfc29mdGMsIElO VENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOworfQorCitpbnQKK2FybV9nZXRf bmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKworCWlycSA9IHJlYWRfNChlY29uYV9zb2Z0 YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQpICYKKwkgICAgfihyZWFkXzQoZWNv bmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCkpOworCisJaWYgKGlycSE9 MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJcmV0dXJuICgtMSk7Cit9CisK K3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNvbnRyb2w7CisKKwljb250cm9s ID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY29udHJvbCB8 PSBHTE9CQUxfUkVTRVQ7CisJc3lzdGVtX3dyaXRlXzQoZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRS T0wsIGNvbnRyb2wpOworCWNvbnRyb2wgPSBzeXN0ZW1fcmVhZF80KGVjb25hX3NvZnRjLCBSRVNF VF9DT05UUk9MKTsKKwljb250cm9sICY9ICh+KEdMT0JBTF9SRVNFVCkpOworCXN5c3RlbV93cml0 ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9sKTsKKwl3aGlsZSAoMSk7Cit9 CisKKworCit2b2lkCitwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSh2b2lkKQoreworCXVpbnQz Ml90IGNmZ19yZWc7CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBzeXN0ZW1fcmVhZF80KGVjb25h X3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljZmdfcmVnIHw9IE5FVF9JTlRFUkZBQ0VfUkVTRVQ7 CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwlzeXN0ZW1fd3JpdGVfNChl Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisKKwkvKnB1bHNlIGRlbGF5ICov CisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURFTEFZKDEwMCk7CisJLyogc2V0 IHJlc2V0IGJpdCB0byBMT1cgYWN0aXZlOyAqLworCWNmZ19yZWcgPSAgc3lzdGVtX3JlYWRfNChl Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyAmPSB+KE5FVF9JTlRFUkZBQ0Vf UkVTRVQpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjZmdf cmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0gMDsgaWkgPCAweEZGRjsgaWkr KykKKwkJREVMQVkoMTAwKTsKKwljZmdfcmVnID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0Yywg UkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyB8PSBORVRfSU5URVJGQUNFX1JFU0VUOworCS8qIHNl dCByZXNldCBiaXQgdG8gSElHSCBhY3RpdmU7ICovCisJc3lzdGVtX3dyaXRlXzQoZWNvbmFfc29m dGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQorCit1bnNpZ25lZCBpbnQKK2dldF90Y2xr KHZvaWQpCit7CisKKwlyZXR1cm4gQ1BVX2Nsb2NrOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhv ZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJZWNvbmFf cHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAkJZWNvbmFfYXR0YWNoKSwKKwlERVZN RVRIT0QoZGV2aWNlX2lkZW50aWZ5LAkJZWNvbmFfaWRlbnRpZnkpLAorCURFVk1FVEhPRChidXNf YWxsb2NfcmVzb3VyY2UsCQllY29uYV9hbGxvY19yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19z ZXR1cF9pbnRyLAkJZWNvbmFfc2V0dXBfaW50ciksCisJREVWTUVUSE9EKGJ1c190ZWFyZG93bl9p bnRyLAkJZWNvbmFfdGVhcmRvd25faW50ciksCisJREVWTUVUSE9EKGJ1c19hY3RpdmF0ZV9yZXNv dXJjZSwJZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1FVEhPRChidXNfZGVhY3RpdmF0 ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNvdXJjZSksCisJREVWTUVUSE9E KGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwJZWNvbmFfZ2V0X3Jlc291cmNlX2xpc3QpLAorCURFVk1F VEhPRChidXNfc2V0X3Jlc291cmNlLAkJYnVzX2dlbmVyaWNfcmxfc2V0X3Jlc291cmNlKSwKKwlE RVZNRVRIT0QoYnVzX2dldF9yZXNvdXJjZSwJCWJ1c19nZW5lcmljX3JsX2dldF9yZXNvdXJjZSks CisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAllY29uYV9yZWxlYXNlX3Jlc291cmNl KSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkJZWNvbmFfcHJpbnRfY2hpbGQpLAorCXsw LCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2ZXIgPSB7CisJImVjb25hYXJt IiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNvbmFfc29mdGMpLAorfTsKK3N0 YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVjb25hYXJt LCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0v ZWNvbmEvZWhjaV9lYnVzLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShy ZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShyZXZpc2lvbiAwKQpAQCAtMCww ICsxLDMwMCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5 b2hhbmVzQGdtYWlsLmNvbT4KKyAqIGJhc2VkIG9uIGVoY2lfbWJ1cy5jCisgKiBDb3B5cmlnaHQg KEMpIDIwMDggTUFSVkVMTCBJTlRFUk5BVElPTkFMIExURC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2 ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0 aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhv dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdB UkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAor ICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQu ICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICog Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9T UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAq IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVT RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G CisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJT RElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm9wdF9idXMuaCIKKworI2luY2x1ZGUgPG1h Y2hpbmUvcmVzb3VyY2UuaD4KKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxz eXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVl Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5j bHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMv bGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9j ay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+Cisj aW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5 cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxs b2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKwor I2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JkaS5oPgorCisj aW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX2J1c2Rt YS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3Byb2Nlc3MuaD4KKyNpbmNsdWRlIDxkZXYvdXNi L3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb250cm9sbGVyLmg+CisjaW5j bHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi9jb250cm9sbGVyL2Vo Y2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhjaXJlZy5oPgorCisKK3N0YXRp YyBkZXZpY2VfYXR0YWNoX3QgZWhjaV9lYnVzX2F0dGFjaDsKK3N0YXRpYyBkZXZpY2VfZGV0YWNo X3QgZWhjaV9lYnVzX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc2h1dGRvd25fdCBlaGNpX2VidXNf c2h1dGRvd247CitzdGF0aWMgZGV2aWNlX3N1c3BlbmRfdCBlaGNpX2VidXNfc3VzcGVuZDsKK3N0 YXRpYyBkZXZpY2VfcmVzdW1lX3QgZWhjaV9lYnVzX3Jlc3VtZTsKKworCitzdGF0aWMgdm9pZCAq aWhfZXJyOworCisjZGVmaW5lCUVIQ0lfSENfREVWU1RSICJDTlMxMVhYIFVTQiBFSENJIgorI2Rl ZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1 c19zdXNwZW5kKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9n ZXRfc29mdGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1c19nZW5lcmljX3N1c3BlbmQo c2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVoY2lfc3VzcGVuZChzYyk7CisJ cmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3Jlc3VtZShkZXZpY2VfdCBz ZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKHNlbGYpOworCisJ ZWhjaV9yZXN1bWUoc2MpOworCisJYnVzX2dlbmVyaWNfcmVzdW1lKHNlbGYpOworCisJcmV0dXJu ICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3NodXRkb3duKGRldmljZV90IHNlbGYp Cit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJaW50IGVy cjsKKworCWVyciA9IGJ1c19nZW5lcmljX3NodXRkb3duKHNlbGYpOworCWlmIChlcnIpCisJCXJl dHVybiAoZXJyKTsKKwllaGNpX3NodXRkb3duKHNjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0 YXRpYyBpbnQKK2VoY2lfZWJ1c19wcm9iZShkZXZpY2VfdCBzZWxmKQoreworCisJZGV2aWNlX3Nl dF9kZXNjKHNlbGYsIEVIQ0lfSENfREVWU1RSKTsKKworCXJldHVybiAoQlVTX1BST0JFX0RFRkFV TFQpOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfYXR0YWNoKGRldmljZV90IHNlbGYpCit7 CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJYnVzX3NwYWNl X2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNv bWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19idXMucGFyZW50ID0gc2VsZjsKKwlzYy0+c2NfYnVz LmRldmljZXMgPSBzYy0+c2NfZGV2aWNlczsKKwlzYy0+c2NfYnVzLmRldmljZXNfbWF4ID0gRUhD SV9NQVhfREVWSUNFUzsKKworCS8qIGdldCBhbGwgRE1BIG1lbW9yeSAqLworCWlmICh1c2JfYnVz X21lbV9hbGxvY19hbGwoJnNjLT5zY19idXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhzZWxmKSwg JmVoY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChFTk9NRU0pOworCX0KKworCXNj LT5zY19idXMudXNicmV2ID0gVVNCX1JFVl8yXzA7CisKKwlyaWQgPSAwOworCXNjLT5zY19pb19y ZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KHNlbGYsIFNZU19SRVNfTUVNT1JZLAorCSAgICAm cmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2MtPnNjX2lvX3JlcykgeworCQlkZXZpY2VfcHJpbnRm KHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNj LT5zY19pb190YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPnNjX2lvX3Jlcyk7CisJYnNoID0gcm1h bl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19yZXMpOworCisJLyptYWdpYywgdW5kb2N1bWVudGVk IGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3BhY2Vfd3JpdGVfNCgoc2MpLT5zY19pb190YWcsIGJz aCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQoKHNjKS0+c2NfaW9fdGFnLCBi c2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19p b19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+c2NfaW9fdGFn LCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2MtPnNjX2lvX3NpemUsICZzYy0+c2NfaW9faGRsKSAh PSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJz IiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShzZWxmKSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19p cnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwK KwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0g TlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4i KTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJ c2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChzZWxmLCAidXNidXMiLCAtMSk7CisJ aWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90 IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJZGV2aWNlX3NldF9pdmFy cyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2NfYnVzKTsKKwlkZXZpY2Vfc2V0X2Rlc2Moc2MtPnNj X2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7CisKKwlzcHJpbnRmKHNjLT5zY192ZW5kb3IsICJD YXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1cF9pbnRyKHNlbGYsc2MtPnNjX2lycV9yZXMsCisJ ICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwgTlVMTCwKKwkgICAgKGRyaXZlcl9pbnRy X3QgKillaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChl cnIpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwg JWRcbiIsIGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJy ID0gZWhjaV9pbml0KHNjKTsKKwlpZiAoIWVycikgeworCQllcnIgPSBkZXZpY2VfcHJvYmVfYW5k X2F0dGFjaChzYy0+c2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWRldmljZV9wcmlu dGYoc2VsZiwgIlVTQiBpbml0IGZhaWxlZCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyb3I7 CisJfQorCXJldHVybiAoMCk7CisKK2Vycm9yOgorCWVoY2lfZWJ1c19kZXRhY2goc2VsZik7CisJ cmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19kZXRhY2goZGV2aWNl X3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsK KwlkZXZpY2VfdCBiZGV2OworCWludCBlcnI7CisKKwlpZiAoc2MtPnNjX2J1cy5iZGV2KSB7CisJ CWJkZXYgPSBzYy0+c2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7CisJCWRldmlj ZV9kZWxldGVfY2hpbGQoc2VsZiwgYmRldik7CisJfQorCS8qIGR1cmluZyBtb2R1bGUgdW5sb2Fk IHRoZXJlIGFyZSBsb3RzIG9mIGNoaWxkcmVuIGxlZnRvdmVyICovCisJZGV2aWNlX2RlbGV0ZV9h bGxfY2hpbGRyZW4oc2VsZik7CisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0cyB0aGF0IG1p Z2h0IGhhdmUgYmVlbiBzd2l0Y2hlZCBvbiBpbiBlaGNpX2luaXQKKwkgKi8KKwlpZiAoc2MtPnNj X2lvX3JlcykgeworCQlFV1JJVEU0KHNjLCBFSENJX1VTQklOVFIsIDApOworCQlFV1JJVEU0KHNj LCBVU0JfQlJJREdFX0lOVFJfTUFTSywgMCk7CisJfQorCWlmIChzYy0+c2NfaXJxX3JlcyAmJiBz Yy0+c2NfaW50cl9oZGwpIHsKKwkJLyoKKwkJICogb25seSBjYWxsIGVoY2lfZGV0YWNoKCkgYWZ0 ZXIgZWhjaV9pbml0KCkKKwkJICovCisJCWVoY2lfZGV0YWNoKHNjKTsKKworCQllcnIgPSBidXNf dGVhcmRvd25faW50cihzZWxmLCBzYy0+c2NfaXJxX3Jlcywgc2MtPnNjX2ludHJfaGRsKTsKKwor CQlpZiAoZXJyKQorCQkJLyogWFhYIG9yIHNob3VsZCB3ZSBwYW5pYz8gKi8KKwkJCWRldmljZV9w cmludGYoc2VsZiwgIkNvdWxkIG5vdCB0ZWFyIGRvd24gaXJxLCAlZFxuIiwKKwkJCSAgICBlcnIp OworCQlzYy0+c2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lycV9yZXMpIHsK KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5zY19pcnFf cmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lvX3Jlcykg eworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwKKwkJICAg IHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNiX2J1c19t ZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOworCisJcmV0 dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBlaGNpX21ldGhvZHNbXSA9IHsK KwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWhjaV9l YnVzX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwgZWhjaV9lYnVzX2F0dGFjaCks CisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIGVoY2lfZWJ1c19kZXRhY2gpLAorCURFVk1FVEhP RChkZXZpY2Vfc3VzcGVuZCwgZWhjaV9lYnVzX3N1c3BlbmQpLAorCURFVk1FVEhPRChkZXZpY2Vf cmVzdW1lLCBlaGNpX2VidXNfcmVzdW1lKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBl aGNpX2VidXNfc2h1dGRvd24pLAorCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChi dXNfcHJpbnRfY2hpbGQsIGJ1c19nZW5lcmljX3ByaW50X2NoaWxkKSwKKworCXswLCAwfQorfTsK Kworc3RhdGljIGRyaXZlcl90IGVoY2lfZHJpdmVyID0geworCSJlaGNpIiwKKwllaGNpX21ldGhv ZHMsCisJc2l6ZW9mKGVoY2lfc29mdGNfdCksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBlaGNp X2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVoY2ksIGVjb25hYXJtLCBlaGNpX2RyaXZlciwg ZWhjaV9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGVoY2ksIHVzYiwgMSwgMSwgMSk7 CkluZGV4OiBhcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vj b25hX3JlZy5oCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENP TlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBD T05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAo SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg R09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig QlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElU WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO IEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVm CV9BUk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lCUVD T05BX1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lCUVDT05BX0RSQU1fQkFTRQkweDAwMDAw MDAwIC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUJRUNPTkFf U0RSQU1fQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lCUVDT05BX1NEUkFNX1NJWkUJMHgxMDAwMDAw CisKKworI2RlZmluZQlFQ09OQV9JT19CQVNFCQkweDcwMDAwMDAwCisjZGVmaW5lCUVDT05BX0lP X1NJWkUJCTB4MEUwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX0JBU0UJCTB4MEQwMDAwMDAKKyNk ZWZpbmUJRUNPTkFfUElDX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9VQVJUX0JB U0UJMHgwODAwMDAwMAorI2RlZmluZQlFQ09OQV9VQVJUX1NJWkUJMHgwMTAwMDAwMAorI2RlZmlu ZQlFQ09OQV9JUlFfVUFSVAkJMHhBCisKKyNkZWZpbmUJRUNPTkFfVElNRVJfQkFTRQkweDA5MDAw MDAwCisjZGVmaW5lCUVDT05BX1RJTUVSX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9J UlFfVElNRVJfMQkwCisjZGVmaW5lCUVDT05BX0lSUV9USU1FUl8yCTEKKyNkZWZpbmUJRUNPTkFf SVJRX09IQ0kJCTIzCisjZGVmaW5lCUVDT05BX0lSUV9FSENJCQkyNAorCisjZGVmaW5lCUVDT05B X05FVF9CQVNFCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfU1lTVEVNX0JBU0UJMHgwNzAw MDAwMAorI2RlZmluZQlFQ09OQV9TWVNURU1fU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUJRUNP TkFfTkVUX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9DRklfUEJBU0UJMHgxMDAw MDAwMAorI2RlZmluZQlFQ09OQV9DRklfVkJBU0UJMHhEMDAwMDAwMAorI2RlZmluZQlFQ09OQV9D RklfU0laRQkJMHgxMDAwMDAwMAorCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMJMTgKKyNkZWZp bmUJRUNPTkFfSVJRX1RTVEMJCTE5CisjZGVmaW5lCUVDT05BX0lSUV9GU1JDCQkyMAorI2RlZmlu ZQlFQ09OQV9JUlFfVFNRRQkJMjEKKyNkZWZpbmUJRUNPTkFfSVJRX0ZTUUYJCTIyCisKKyNkZWZp bmUJRUNPTkFfSVJRX1NZU1RFTQkwCisKKyNkZWZpbmUJRUNPTkFfRUhDSV9QQkFTRQkweEM4MDAw MDAwCisjZGVmaW5lCUVDT05BX0VIQ0lfVkJBU0UJMHhGODAwMDAwMAorI2RlZmluZQlFQ09OQV9F SENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfT0hDSV9QQkFTRQkweEMwMDAwMDAw CisjZGVmaW5lCUVDT05BX09IQ0lfVkJBU0UJMHhGMDAwMDAwMAorI2RlZmluZQlFQ09OQV9PSENJ X1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfVVNCX1NJWkUJCTB4ZjAwMDAwMAorCisv KkludGVycnVwdCBjb250cm9sbGVyKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCTAKKyNk ZWZpbmUJSU5UQ19FREdFX1RSSUdHRVIJMQorI2RlZmluZQlJTlRDX0FDVElWRV9ISUdICTAKKyNk ZWZpbmUJSU5UQ19BQ1RJVkVfTE9XCTEKKy8qCisgKiBkZWZpbmUgcmlzaW5nL2ZhbGxpbmcgZWRn ZSBmb3IgZWRnZSB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZQlJTlRDX1JJU0lOR19FREdFCTAK KyNkZWZpbmUJSU5UQ19GQUxMSU5HX0VER0UJMQorCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX1NP VVJDRV9SRUdfT0ZGU0VUCQkweDAwCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX01BU0tfUkVHX09G RlNFVAkJCTB4MDQKKyNkZWZpbmUJSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JF R19PRkZTRVQJMHgwOAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09G RlNFVAkJMHgwQworI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZT RVQJMHgxMAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9TVEFUVVNfUkVHX09GRlNFVAkJMHgxNAor I2RlZmluZQlJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VUCQkweDE4CisjZGVmaW5lCUlO VENfU09GVFdBUkVfSU5URVJSVVBUX1JFR19PRkZTRVQJCTB4MUMKKworCisvKgorICogZGVmaW5l IHJpc2luZy9mYWxsaW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJ SU5UQ19SSVNJTkdfRURHRQkwCisjZGVmaW5lCUlOVENfRkFMTElOR19FREdFCTEKKworCisjZGVm aW5lCVRJTUVSX1RNMV9DT1VOVEVSX1JFRwkJMHgwMAorI2RlZmluZQlUSU1FUl9UTTFfTE9BRF9S RUcJCTB4MDQKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMV9SRUcJCTB4MDgKKyNkZWZpbmUJVElN RVJfVE0xX01BVENIMl9SRUcJCTB4MEMKKworI2RlZmluZQlUSU1FUl9UTTJfQ09VTlRFUl9SRUcJ CTB4MTAKKyNkZWZpbmUJVElNRVJfVE0yX0xPQURfUkVHCQkweDE0CisjZGVmaW5lCVRJTUVSX1RN Ml9NQVRDSDFfUkVHCQkweDE4CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDJfUkVHCQkweDFDCisK KyNkZWZpbmUJVElNRVJfVE1fQ1JfUkVHCQkweDMwCisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfU1RB VFVTX1JFRwkweDM0CisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfTUFTS19SRUcJCTB4MzgKKworI2Rl ZmluZQlUSU1FUl9UTV9SRVZJU0lPTl9SRUcJCTB4M0MKKworCisjZGVmaW5lCUlOVENfVElNRVIx X0JJVF9JTkRFWAkJMAorCisjZGVmaW5lCVRJTUVSMV9VUF9ET1dOX0NPVU5UCQkoMTw8OSkKKyNk ZWZpbmUJVElNRVIyX1VQX0RPV05fQ09VTlQJCSgxPDwxMCkKKworI2RlZmluZQlUSU1FUjFfTUFU Q0gxX0lOVFIJCSgxPDwwKQorI2RlZmluZQlUSU1FUjFfTUFUQ0gyX0lOVFIJCSgxPDwxKQorI2Rl ZmluZQlUSU1FUjFfT1ZFUkZMT1dfSU5UUgkJKDE8PDIpCisKKworI2RlZmluZQlUSU1FUjJfTUFU Q0gxX0lOVFIJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfTUFUQ0gyX0lOVFIJCSgxPDw0KQorI2Rl ZmluZQlUSU1FUjJfT1ZFUkZMT1dfSU5UUgkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl9DTE9D S19TT1VSQ0VfUENMSwkwCisjZGVmaW5lCVRJTUVSX0NMT0NLX1NPVVJDRV9FWFRfQ0xLCTEKKwor LyoKKyAqIGRlZmluZSBpbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19M RVZFTF9UUklHR0VSCQkwCisjZGVmaW5lCUlOVENfRURHRV9UUklHR0VSCQkxCisKKworI2RlZmlu ZQlJTlRDX1RSSUdHRVJfVU5LTk9XTiAtMQorCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19JTlRF UlJVUFQJKDE8PDIpCisjZGVmaW5lCVRJTUVSMl9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDUpCisj ZGVmaW5lCVRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHCTB4MzQKKworCisjZGVmaW5lCVRJTUVS MV9FTkFCTEUJCQkoMTw8MCkKKyNkZWZpbmUJVElNRVIxX0NMT0NLX1NPVVJDRQkJKDE8PDEpCisj ZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19FTkFCTEUJCSgxPDwyKQorCisKKyNkZWZpbmUJVElNRVIy X0VOQUJMRQkJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfQ0xPQ0tfU09VUkNFCQkoMTw8NCkKKyNk ZWZpbmUJVElNRVIyX09WRVJGTE9XX0VOQUJMRQkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl8x CQkJMQorCisjZGVmaW5lCUVDX1VBUlRfQ0xPQ0sJCQkxNDc2OTIwMAorI2RlZmluZQlFQ19VQVJU X1JFR1NISUZUCQkyCisKKyNkZWZpbmUJU1lTVEVNX0NMT0NLCQkJMHgxNAorI2RlZmluZQlSRVNF VF9DT05UUk9MCQkJMHg0CisjZGVmaW5lCUdMT0JBTF9SRVNFVAkJCTB4MQorI2RlZmluZQlORVRf SU5URVJGQUNFX1JFU0VUCQkoMHgxIDw8IDQpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2lm X2VjZXZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24g MCkKKysrIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTEg QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0Bn bWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycn IEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NM QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM RQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN UExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNF UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP TikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0Yg VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM SVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9JRkVDRVZBUl9ICisjZGVm aW5lCV9JRkVDRVZBUl9ICisKKyNkZWZpbmUJRUNFX01BWF9UWF9CVUZGRVJTCTEyOAorI2RlZmlu ZQlFQ0VfTUFYX1JYX0JVRkZFUlMJMTI4CisjZGVmaW5lCU1BWF9GUkFHTUVOVAkJMzIKKwordHlw ZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8KKwl1aW50MzJfdAkJZGF0YV9wdHI7CisJ LyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0aDoxNjsKKworCXVpbnQzMl90CQl0Y286 MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWludDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVj a3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCov CisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVpbnQzMl90CQlwbWFwOjM7CisJLyogZm9y Y2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkvKiBmb3JjZV9wcmlvcml0eV92YWx1ZSAq LworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9wcmlvcml0eSAqLworCXVpbnQzMl90CQlm cDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMyX3QJCWludGVycnVwdDoxOworCS8qbGFz dF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmlyc3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6 MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVvcjoxOworCS8qIGNfYml0ICovCisJdWlu dDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8KKwkvKnZpZF9pbmRleCovCisJdWludDMy X3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLworCXVpbnQzMl90CQlpbnN2OjE7CisJLypw cHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJc2lkOjM7CisJLyppbnNlcnRfcHBwb2Vf c2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1aW50MzJfdAkJdW51c2VkOjI0OworCS8q IDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQyOworCit9IGV0aF90eF9kZXNjX3Q7CisK K3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRhX3B0cjsKKwl1aW50MzJfdAkJbGVuZ3Ro OjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJfdAkJaXBmOjE7CisJdWludDMyX3QJCXBy b3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJfdAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6 MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJZW9yOjE7CisJdWludDMyX3QJCWNvd246 MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90CQl1bnVzZWQyOworfSBldGhfcnhfZGVz Y190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8geworCXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVz X2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190ICpkZXNjOworfTsKKworc3RydWN0IHR4 X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsKKwlidXNfZG1hbWFwX3QgZG1hbWFwOwor CWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1 Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJ CS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHggc2NfbXR4X3R4OwkJLyogdHggbXV0ZXgg Ki8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4IG11dGV4ICovCisJc3RydWN0IG10eCBz Y19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKworCWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50 X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisKKwlkZXZpY2VfdCBkZXY7CQkJLyogTXlz ZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkgY2hpbGQgbWlpYnVzICovCisJdm9pZCAq aW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAqLworCXZvaWQgKmludHJoYW5kX3FmOwkJ LyogcXVldWUgZnVsbCAqLworCXZvaWQgKmludHJoYW5kX3R4OwkJLyogdHggY29tcGxldGUgKi8K Kwl2b2lkICppbnRyaGFuZF9zdGF0dXM7CQkvKiBlcnJvciBzdGF0dXMgKi8KKworCXN0cnVjdCBy ZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmly cV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3FmOwkv KiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1czsgLyogc3Rh dHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSByZXNvdXJjZSAq LworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAqLworCisJc3Ry dWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVj dCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1Y3QgdGFzawlzY190eF90YXNrOworCisJYnVz X2RtYW1hcF90CWRtYW1hcF9yaW5nX3R4OworCWJ1c19kbWFtYXBfdAlkbWFtYXBfcmluZ19yeDsK KwlidXNfZG1hbWFwX3QJcnhfc3BhcmVtYXA7CisKKwkvKmRtYSB0YWcgZm9yIHJpbmcqLworCWJ1 c19kbWFfdGFnX3QJZG1hdGFnX3JpbmdfdHg7CisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ19y eDsKKworCS8qZG1hIHRhZyBmb3IgZGF0YSovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfZGF0YV90 eDsKKwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3J4OworCisJLyp0aGUgcmluZyovCisJZXRo X3R4X2Rlc2NfdCoJZGVzY190eDsKKwlldGhfcnhfZGVzY190KglkZXNjX3J4OworCisJLypyaW5n IHBoeXNpY2FsIGFkZHJlc3MqLworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl90eDsKKwlidXNfYWRk cl90CXJpbmdfcGFkZHJfcng7CisKKwkvKmluZGV4IG9mIGxhc3QgcmVjZWl2ZWQgZGVzY3JpcHRv ciovCisJdWludDMyX3QgbGFzdF9yeDsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvIHJ4X2Rlc2NbRUNF X01BWF9SWF9CVUZGRVJTXTsKKworCS8qIHR4IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3Qg dHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBpbmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJ LyogdHggcmluZyBpbmRleCovCisJdWludDMyX3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4 X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhfVFhfQlVGRkVSU107Cit9OworCisKK3N0cnVjdCBh cmxfdGFibGVfZW50cnlfdCB7CisJdWludDMyX3QgY21kX2NvbXBsZXRlOiAxOworCXVpbnQzMl90 IHRhYmxlX2VuZDogMTsKKwl1aW50MzJfdCBzZWFyY2hfbWF0Y2g6IDE7CisJdWludDMyX3QgZmls dGVyOjE7IC8qaWYgc2V0LCBwYWNrZXQgd2lsbCBiZSBkcm9wcGVkICovCisJdWludDMyX3Qgdmxh bl9tYWM6MTsgLyppbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBnYXRld2F5IG1hYyBhZGRyZXNz Ki8KKwl1aW50MzJfdCB2bGFuX2dpZDozOyAvKnZsYW4gaWQqLworCXVpbnQzMl90IGFnZV9maWVs ZDozOworCXVpbnQzMl90IHBvcnRfbWFwOjM7CisJIC8qNDggYml0IG1hYyBhZGRyZXNzKi8KKwl1 aW50OF90IG1hY19hZGRyWzZdOworCXVpbnQ4X3QgcGFkWzJdOworfTsKKworc3RydWN0IG1hY19s aXN0eworCWNoYXIgbWFjX2FkZHJbNl07CisJc3RydWN0IG1hY19saXN0ICpuZXh0OworfTsKKwor I2VuZGlmCkluZGV4OiBhcm0vZWNvbmEvb2hjaV9lYy5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29u YS9vaGNpX2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvb2hjaV9lYy5jCShyZXZpc2lv biAwKQpAQCAtMCwwICsxLDI0MSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3Rk ZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Cisj aW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8 c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2Vy X3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgor I2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVk ZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91bmlz dGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4K KyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNs dWRlIDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+Cisj aW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJv Y2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91 c2IvdXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNs dWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvb2hjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJv bGxlci9vaGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJt L2Vjb25hL2Vjb25hX3JlZy5oPgorCisjZGVmaW5lCU1FTV9SSUQJMAorCitzdGF0aWMgZGV2aWNl X3Byb2JlX3Qgb2hjaV9lY19wcm9iZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3Qgb2hjaV9lY19h dHRhY2g7CitzdGF0aWMgZGV2aWNlX2RldGFjaF90IG9oY2lfZWNfZGV0YWNoOworCitzdHJ1Y3Qg ZWNfb2hjaV9zb2Z0YyB7CisJc3RydWN0IG9oY2lfc29mdGMgc2Nfb2hjaTsJLyogbXVzdCBiZSBm aXJzdCAqLworfTsKKworc3RhdGljIGludAorb2hjaV9lY19wcm9iZShkZXZpY2VfdCBkZXYpCit7 CisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIGludGVncmF0ZWQgT0hDSSBjb250cm9sbGVy Iik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lf ZWNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJy OworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5z Y19vaGNpLnNjX2J1cy5wYXJlbnQgPSBkZXY7CisJc2MtPnNjX29oY2kuc2NfYnVzLmRldmljZXMg PSBzYy0+c2Nfb2hjaS5zY19kZXZpY2VzOworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2VzX21h eCA9IE9IQ0lfTUFYX0RFVklDRVM7CisKKwkvKiBnZXQgYWxsIERNQSBtZW1vcnkgKi8KKwlpZiAo dXNiX2J1c19tZW1fYWxsb2NfYWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsCisJICAgIFVTQl9HRVRf RE1BX1RBRyhkZXYpLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01F TSk7CisJfQorCXNjLT5zY19vaGNpLnNjX2RldiA9IGRldjsKKworCXJpZCA9IE1FTV9SSUQ7CisK KwlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lT X1JFU19NRU1PUlksCisJICAgICZyaWQsIFJGX0FDVElWRSk7CisKKwlpZiAoIShzYy0+c2Nfb2hj aS5zY19pb19yZXMpKSB7CisJCWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2Mt PnNjX29oY2kuc2NfaW9fdGFnID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5zY19vaGNpLnNjX2lvX3Jl cyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJ LyogVW5kb2N1bWVudGVkIG1hZ2ljIGluaXRpYWxpemF0aW9uICovCisJYnVzX3NwYWNlX3dyaXRl XzQoKHNjKS0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwweDA0LCAweDE0Nik7CisKKwlidXNfc3Bh Y2Vfd3JpdGVfNCgoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNoLDB4NDQsIDB4MDIwMCk7CisK KwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19vaGNpLnNjX2lvX3NpemUgPSBybWFuX2dldF9zaXpl KHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+ c2Nfb2hjaS5zY19pb190YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAgICBzYy0+c2Nfb2hjaS5zY19p b19zaXplLCAmc2MtPnNjX29oY2kuc2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJs ZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFt ZShkZXYpKTsKKworCXJpZCA9IDA7CisJc2MtPnNjX29oY2kuc2NfaXJxX3JlcyA9IGJ1c19hbGxv Y19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNUSVZFKTsK KwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKSkgeworCQlnb3RvIGVycm9yOworCX0KKwlz Yy0+c2Nfb2hjaS5zY19idXMuYmRldiA9IGRldmljZV9hZGRfY2hpbGQoZGV2LCAidXNidXMiLCAt MSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYpKSB7CisJCWdvdG8gZXJyb3I7CisJ fQorCWRldmljZV9zZXRfaXZhcnMoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYsICZzYy0+c2Nfb2hj aS5zY19idXMpOworCisJc3RybGNweShzYy0+c2Nfb2hjaS5zY192ZW5kb3IsICJDYXZpdW0iLAor CQlzaXplb2Yoc2MtPnNjX29oY2kuc2NfdmVuZG9yKSk7CisKKyNpZiAoX19GcmVlQlNEX3ZlcnNp b24gPj0gNzAwMDMxKQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX29oY2kuc2Nf aXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBTQUZFLCAgTlVMTCwKKwkgICAg KGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2Nfb2hjaS5z Y19pbnRyX2hkbCk7CisjZWxzZQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRldiwgc2MtPnNjX29o Y2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBTQUZFLAorCSAgICAo ZHJpdmVyX2ludHJfdCAqKW9oY2lfaW50ZXJydXB0LCBzYywKKwkgICAgJnNjLT5zY19vaGNpLnNj X2ludHJfaGRsKTsKKyNlbmRpZgorCWlmIChlcnIpIHsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9o ZGwgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1c19zcGFjZV93cml0ZV80KHNjLT5z Y19vaGNpLnNjX2lvX3RhZywgc2MtPnNjX29oY2kuc2NfaW9faGRsLAorCSAgICBPSENJX0NPTlRS T0wsIDApOworCisJZXJyID0gb2hjaV9pbml0KCZzYy0+c2Nfb2hjaSk7CisJaWYgKCFlcnIpIHsK KwkJZXJyID0gZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYp OworCX0KKwlpZiAoZXJyKSB7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7CisKK2Vy cm9yOgorCW9oY2lfZWNfZGV0YWNoKGRldik7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRp YyBpbnQKK29oY2lfZWNfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9z b2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJZGV2aWNlX3QgYmRldjsKKwlpbnQg ZXJyOworCisJaWYgKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2Nf b2hjaS5zY19idXMuYmRldjsKKwkJZGV2aWNlX2RldGFjaChiZGV2KTsKKwkJZGV2aWNlX2RlbGV0 ZV9jaGlsZChkZXYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9kdWxlIHVubG9hZCB0aGVyZSBh cmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmljZV9kZWxldGVfYWxsX2NoaWxk cmVuKGRldik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNj LT5zY19vaGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWlmIChzYy0+ c2Nfb2hjaS5zY19pcnFfcmVzICYmIHNjLT5zY19vaGNpLnNjX2ludHJfaGRsKSB7CisJCS8qCisJ CSAqIG9ubHkgY2FsbCBvaGNpX2RldGFjaCgpIGFmdGVyIG9oY2lfaW5pdCgpCisJCSAqLworCQlv aGNpX2RldGFjaCgmc2MtPnNjX29oY2kpOworCisJCWVyciA9IGJ1c190ZWFyZG93bl9pbnRyKGRl diwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkJICAgIHNjLT5zY19vaGNpLnNjX2ludHJfaGRs KTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29o Y2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJR LCAwLAorCQkgICAgc2MtPnNjX29oY2kuc2NfaXJxX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2ly cV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaW9fcmVzKSB7CisJCWJ1c19y ZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIE1FTV9SSUQsCisJCSAgICBzYy0+ c2Nfb2hjaS5zY19pb19yZXMpOworCQlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBOVUxMOworCX0K Kwl1c2JfYnVzX21lbV9mcmVlX2FsbCgmc2MtPnNjX29oY2kuc2NfYnVzLCAmb2hjaV9pdGVyYXRl X2h3X3NvZnRjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3Qg b2hjaV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChk ZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBv aGNpX2VjX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIG9oY2lfZWNfZGV0YWNo KSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBidXNfZ2VuZXJpY19zaHV0ZG93biksCisK KwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dl bmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3Qgb2hj aV9kcml2ZXIgPSB7CisJIm9oY2kiLAorCW9oY2lfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVj X29oY2lfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3Qgb2hjaV9kZXZjbGFzczsKKwor RFJJVkVSX01PRFVMRShvaGNpLCBlY29uYWFybSwgb2hjaV9kcml2ZXIsIG9oY2lfZGV2Y2xhc3Ms IDAsIDApOworTU9EVUxFX0RFUEVORChvaGNpLCB1c2IsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vj b25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJ KHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvdWFydF9jcHVfZWMuYwkocmV2aXNpb24gMCkKQEAg LTAsMCArMSw4NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2 ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291 cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBN QVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0 byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUK KyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAq IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBB UyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJF IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJF IExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS UlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElO Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBP VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP U1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQu aCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisj aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8 c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1 cy5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3Vh cnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25h L2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3Nw YWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3Nw YWNlX21lbTsKKworaW50Cit1YXJ0X2NwdV9lcXJlcyhzdHJ1Y3QgdWFydF9iYXMgKmIxLCBzdHJ1 Y3QgdWFydF9iYXMgKmIyKQoreworCisJcmV0dXJuICgoYjEtPmJzaCA9PSBiMi0+YnNoICYmIGIx LT5ic3QgPT0gYjItPmJzdCkgPyAxIDogMCk7Cit9CisKK2ludAordWFydF9jcHVfZ2V0ZGV2KGlu dCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9kZXZpbmZvICpkaSkKK3sKKwlzdHJ1Y3QgdWFydF9jbGFz cyAqY2xhc3MgPSAmdWFydF9uczgyNTBfY2xhc3M7CisKKwlkaS0+b3BzID0gdWFydF9nZXRvcHMo Y2xhc3MpOworCWRpLT5iYXMuY2hhbiA9IDA7CisJZGktPmJhcy5ic3QgPSBvYmlvX3RhZzsKKwor CWlmIChidXNfc3BhY2VfbWFwKGRpLT5iYXMuYnN0LCBFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFS VF9CQVNFLAorCSAgICBFQ09OQV9VQVJUX1NJWkUsCisJICAgIDAsICZkaS0+YmFzLmJzaCkgIT0g MCkgeworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlkaS0+YmF1ZHJhdGUgPSAwOworCWRpLT5i YXMucmVnc2hmdCA9IEVDX1VBUlRfUkVHU0hJRlQ7CisJZGktPmJhcy5yY2xrID0gRUNfVUFSVF9D TE9DSyA7CisJZGktPmRhdGFiaXRzID0gODsKKwlkaS0+c3RvcGJpdHMgPSAxOworCWRpLT5wYXJp dHkgPSBVQVJUX1BBUklUWV9OT05FOworCXVhcnRfYnVzX3NwYWNlX21lbSA9IG9iaW9fdGFnOwor CXVhcnRfYnVzX3NwYWNlX2lvID0gTlVMTDsKKworCXJldHVybiAoMCk7Cit9CkluZGV4OiBhcm0v ZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvdWFydF9idXNfZWMu YwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS91YXJ0X2J1c19lYy5jCShyZXZpc2lvbiAwKQpA QCAtMCwwICsxLDc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykgMjAwOSBZb2hhbmVzIE51Z3Jv aG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgor ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0 aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1 dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50 YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp b24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBj b250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k dWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBw cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQi KTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2lu Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9r ZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1 cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5o PgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRf YnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9l Y29uYS9lY29uYV9yZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRl dik7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyog RGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCXVhcnRfZWNfcHJv YmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl1YXJ0X2J1c19hdHRhY2gpLAorCURFVk1F VEhPRChkZXZpY2VfZGV0YWNoLAl1YXJ0X2J1c19kZXRhY2gpLAorCXsgMCwgMCB9Cit9OworCitz dGF0aWMgZHJpdmVyX3QgdWFydF9lY19kcml2ZXIgPSB7CisJdWFydF9kcml2ZXJfbmFtZSwKKwl1 YXJ0X2VjX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB1YXJ0X3NvZnRjKSwKK307CisKK3N0YXRp YyBpbnQKK3VhcnRfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdAl1YXJ0X3NvZnRj ICpzYzsKKwlpbnQgc3RhdHVzOworCisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc2Mt PnNjX2NsYXNzID0gJnVhcnRfbnM4MjUwX2NsYXNzOworCXN0YXR1cyA9IHVhcnRfYnVzX3Byb2Jl KGRldiwgRUNfVUFSVF9SRUdTSElGVCwgRUNfVUFSVF9DTE9DSywgMCwgMCk7CisJcmV0dXJuIChz dGF0dXMpOworfQorCitEUklWRVJfTU9EVUxFKHVhcnQsIGVjb25hYXJtLCB1YXJ0X2VjX2RyaXZl ciwgdWFydF9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0vZWNvbmEvc3RkLmVjb25hCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEv c3RkLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACisjICRGcmVlQlNEJAorCitm aWxlcwkiLi4vZWNvbmEvZmlsZXMuZWNvbmEiCitjcHUJCUNQVV9GQTUyNgorbWFrZW9wdGlvbnMJ Q09ORl9DRkxBR1M9LW1hcmNoPWFybXY0CitvcHRpb25zCVBIWVNBRERSPTB4MDAwMDAwMDAKK21h a2VvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCittYWtlb3B0aW9ucwlLRVJOVklSVEFE RFI9MHhjMTAwMDAwMAorCitvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCitvcHRpb25z CUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCSMgVXNlZCBpbiBsZHNjcmlwdC5hcm0KK29wdGlvbnMJ RkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMJTE9BREVSUkFNQUREUj0weDAwMDAwMDAwCitv cHRpb25zCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgwMDEwMDAwMApJbmRleDogY29uZi9NYWtl ZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9NYWtlZmlsZS5hcm0JKHJldmlzaW9uIDIwMTM1 OCkKKysrIGNvbmYvTWFrZWZpbGUuYXJtCSh3b3JraW5nIGNvcHkpCkBAIC03Myw3ICs3Myw3IEBA CiAJJFMvJE0vJE0vY3B1ZnVuY19hc21fc2ExLlMgJFMvJE0vJE0vY3B1ZnVuY19hc21fYXJtMTAu UyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlLlMgJFMvJE0vJE0vY3B1ZnVuY19hc20u UyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlX2MzLlMgJFMvJE0vJE0vY3B1ZnVuY19h c21fYXJtdjVfZWMuUyBcCi0JJFMvJE0vJE0vY3B1ZnVuY19hc21fc2hlZXZhLlMKKwkkUy8kTS8k TS9jcHVmdW5jX2FzbV9zaGVldmEuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9mYTUyNi5TCiBLRVJO RUxfRVhUUkE9dHJhbXBvbGluZQogS0VSTkVMX0VYVFJBX0lOU1RBTEw9a2VybmVsLmd6LnRyYW1w CiB0cmFtcG9saW5lOiAke0tFUk5FTF9LT30udHJhbXAKSW5kZXg6IGNvbmYvb3B0aW9ucy5hcm0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQotLS0gY29uZi9vcHRpb25zLmFybQkocmV2aXNpb24gMjAxMzU4KQorKysgY29u Zi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMzYsMyArMzYsNCBAQAogQVQ5MV9CV0NU CQlvcHRfYXQ5MS5oCiBBVDkxX1RTQwkJb3B0X2F0OTEuaAogQVQ5MV9LV0lLQllURQkJb3B0X2F0 OTEuaAorQ1BVX0ZBNTI2CQlvcHRfZ2xvYmFsLmgKSW5kZXg6IGtlcm4vdmZzX21vdW50LmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0ga2Vybi92ZnNfbW91bnQuYwkocmV2aXNpb24gMjAxMzU4KQorKysga2Vybi92 ZnNfbW91bnQuYwkod29ya2luZyBjb3B5KQpAQCAtMTQwMyw2ICsxNDAzLDExIEBACiAJc3RydWN0 IHRpbWV2YWwgbGFzdGZhaWw7CiAJaW50IGN1cmZhaWwgPSAwOwogCisJLyogdGVtcG9yYXJ5IHNv bHV0aW9uIGZvciB0aW1lb3V0IHdhaXRpbmcgZm9yIFVTQiBkaXNrIHJvb3QKKwkgKiBmaWxlc3lz dGVtCisJICovCisJcGF1c2UoIldBSVQiLCBoeiAqIDEwKTsKKwogCWZvciAoOzspIHsKIAkJRFJP UF9HSUFOVCgpOwogCQlnX3dhaXRpZGxlKCk7Cg== --001636b14743f0e22e047c437eff--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?260bb65e1001030633n4f9ad138w388600d82ed9f2d1>