Date: Sun, 3 Jan 2010 15:33:28 +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: <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com> In-Reply-To: <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org> References: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com> <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com> <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--0016e64b95e4b77980047c3e7633 Content-Type: text/plain; charset=UTF-8 On Tue, Dec 29, 2009 at 8:53 PM, Rui Paulo <rpaulo@freebsd.org> wrote: Hi Rui, Thank you for spending some time to read my code. Here is the new patch. > Some comments: > * please read style(9) and try to follow these guidelines on your code ok, I just found out about this (I should have read this earlier). > > * did you forget to add a kernel config file for this board? it is in sys/arm/conf/CNS11XXNAS > * I would like for you to reconsider the code that's under C++ comments. Either remove it or please use ANSI-style /* */ C comments. This is a style issue. ok, i have fixed this > * please add your email to all the files you are adding (like you do on if_ecereg.h, for example) ok, done > * econa_machdep.c is a 4-claus BSD license. Can you check if we already include "This product includes software developed by Brini." on our documentation/marketing material? every *_machep.c in sys/arm was derived from the same file with the same license. So I guess it is already been taken care. > * there are some lines that go beyond 80 columns. Can you fix them? ok, done > * in if_ece.c::poweron(), can't you use bus_read_4 instead of using a volatile and pointing it to some specific memory address? Looking a the implementation of other ports, I have moved this to econa.c because the memory address space is far apart. > * please avoid doing in-code variable declarations like "for (int i = 0 ..." ok. I am working as a C++ programmer, and forgot about that one loop. > * what about the #if 0's ? It has been removed. It was used for testing which one is faster, sending framented or non-fragmented packets. Sending defragmented packet is slower for this SoC (takes too much CPU time). > * do you have the specs of the ethernet controller ? stuff like "mac_port_config |= ((0x1 << 18));" would be better if "18" was a define with an indication of what the bit actually does. Something like "mac_port_config |= ((0x1 << MAC_PORT_0_DISABLE));" > > * there are many white lines that you can remove ok, I have used whiltespace-mode in emacs to help me with this. > * defines should be like "#define<tab>...". This is especially visible in econa_reg.h fixed. Thanks for your help. -- Regards Yohanes http://yohan.es/ --0016e64b95e4b77980047c3e7633 Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx_20090103.diff" Content-Disposition: attachment; filename="cns11xx_20090103.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3zk54s10 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 IGludGVycnVwKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2X2ZsdXNoX3ByZWZldGNoYnVm KQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA0CS8qIFByZS1mZXRjaCBm bHVzaCAqLworCW1vdglwYywgbHIKKworLyoKKyAqIENhY2hlIGZ1bmN0aW9ucworICovCitFTlRS WShmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAs IGM3LCBjMTQsIDAJLyogY2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCBy MCwgYzcsIGM1LCAwCS8qIGludmFsaWRhdGUgSSQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMx MCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VOVFJZKGZhNTI2 X2ljYWNoZV9zeW5jX2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwg MAkvKiBpbnZhbGlkYXRlIEkkICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9kY2FjaGVf d2JpbnZfYWxsKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMAkvKiBj bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8q IGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIKKworLyoKKyAqIFNvZnQgZnVuY3Rp b25zCisgKi8KK0VOVFJZKGZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSkKKwljbXAJcjEsICMweDQw MDAKKwliaHMJX0NfTEFCRUwoZmE1MjZfZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwgcjAs ICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FD SEVMSU5FX1NJWkUtMSkKKworMToJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDEJLyogY2xlYW4g YW5kIGludmFsaWRhdGUgRCQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUK KwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKwltY3IJcDE1LCAwLCBy MCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKK0VO VFJZKGZhNTI2X2RjYWNoZV93Yl9yYW5nZSkKKwljbXAJcjEsICMweDQwMDAKKwlibHMJMWYKKwor CW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMAkvKiBjbGVhbiBlbnRpcmUg RCQgKi8KKwliCTNmCisKKzE6CWFuZAlyMiwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKwlhZGQJ cjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUtMSkKKworMjoJbWNyCXAx NSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAj Q0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTJiCisK KzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLwor CW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlhbmQJcjIsIHIw LCAjKENBQ0hFTElORV9TSVpFLTEpCisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENB Q0hFTElORV9TSVpFLTEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzYsIDEJLyogaW52YWxp ZGF0ZSBEJCBzaW5nbGUgZW50cnkgKi8KKwlhZGQJcjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlz dWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJYmhpCTFiCisKKwltb3YJcGMsIGxyCisKK0VO VFJZKGZhNTI2X2lkY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0MDAwCisJYmhzCV9D X0xBQkVMKGZhNTI2X2lkY2FjaGVfd2JpbnZfYWxsKQorCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJ TkVfU0laRS0xKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0la RS0xKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBjbGVhbiBhbmQgaW52YWxp ZGF0ZSBEJCBlbnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0 ZSBJJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIx LCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAs IDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9p Y2FjaGVfc3luY19yYW5nZSkKKwljbXAJcjEsICMweDQwMDAKKwliaHMJX0NfTEFCRUwoZmE1MjZf aWNhY2hlX3N5bmNfYWxsKQorCisJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQorCWFk ZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwgIyhDQUNIRUxJTkVfU0laRS0xKQorCisxOgltY3IJ cDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBlbnRyeSAqLworCW1jcglwMTUsIDAs IHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICND QUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKwor MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJ bW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5jaHRndF9FKQorCW1vdglyMCwgIzAK KwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFsaWRhdGUgQlRCIGNhY2hlICovCisJ bW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3aXRjaCkKKwkvKgorCSAqIENGX0NB Q0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVkIHByaW9yIHRvIHRoaXMuCisJICog VGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25seSBrZXJuZWwgZGF0YSBhbmQgdGhl CisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWluIG9ubHkga2VybmVsIGNvZGUsIGFu ZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJlZCBieSBhbGwgcHJvY2Vzc2VzLgor CSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkvKiBXcml0ZSB0aGUgVFRCICovCisK KwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBtdXN0IGZsdXNoIHRoZSBUTEIgKi8K Kwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBjNywgMAkvKiBmbHVzaCB0aGUgSStE IHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxpbmUgaXMgZW1wdGllZCAqLworCW1v dglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgorCkluZGV4OiBhcm0vaW5jbHVkZS9j cHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUvY3B1Y29uZi5oCShyZXZpc2lvbiAy MDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg KzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAyMDApICsJCQlcCiAJCQkgZGVmaW5l ZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDAp ICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJXAogCQkJIGRlZmluZWQoQ1BVX1hT Q0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBAQAogICovCiAjaWYgKGRlZmluZWQo Q1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8 fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZpbmVkKENQVV9TQTExMDApIHx8IGRl ZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQoQ1BVX0lYUDEyWDApIHx8IGRlZmlu ZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVkKENQVV9JWFAxMlgwKSB8fCBkZWZp bmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQVV9GQTUyNikpCiAjZGVmaW5lCUFS TV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hfNAkwCkBAIC0xMjUsNyArMTI2LDcg QEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZpbmVkKENQVV9BUk03KSB8fCBkZWZp bmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVkKENQVV9BUk04KSB8fCBkZWZpbmVk KENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJXAotICAgICBkZWZpbmVkKENQVV9B Uk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwg ZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZBNTI2KSkKICNkZWZpbmUJQVJNX01N VV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1VX0dFTkVSSUMJCTAKSW5kZXg6IGFy bS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vaW5jbHVkZS9jcHVmdW5jLmgJ KHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2NwdWZ1bmMuaAkod29ya2luZyBjb3B5 KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9jbG9ja19jb25maWcJKHVfaW50LCB1 X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2Cit2b2lkCWZhNTI2X3NldHVwCQko Y2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9pbnQgdHRiKTsKK3ZvaWQJZmE1MjZf Y29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9jcHVfc2xlZXAJCShpbnQpOwordm9p ZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X3RsYl9mbHVzaElEX1NF CSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNoYnVmCSh2b2lkKTsKK3ZvaWQJZmE1 MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX2Fs bAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKHZtX29mZnNldF90IHN0YXJ0 LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3diaW52X2FsbAkodm9pZCk7Cit2 b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90 IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJKHZtX29mZnNldF90IHN0YXJ0LCB2 bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3diX3JhbmdlCSh2bV9vZmZzZXRfdCBz dGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lkY2FjaGVfd2JpbnZfYWxsKHZvaWQp Owordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9z aXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVfU0ExMTAKIHZvaWQJc2ExMTBfc2V0 dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250ZXh0X3N3aXRjaAkodm9pZCk7CkBA IC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9B Uk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAgZGVmaW5lZChDUFVfU0ExMTApIHx8 IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVfU0ExMTEwKSB8fCBcCiAgIGRlZmlu ZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSB8fAkgICAg IFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBkZWZpbmVkKENQVV9YU0NBTEVfUFhB MlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fAkgICAgIFwKICAgZGVmaW5lZChD UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAgIApJbmRleDog YXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYV92YXIu aAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKQEAg LTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv IDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0 aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmCV9BUk1f RUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJfSAorCitleHRlcm4gYnVzX3NwYWNl X3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29mdGMgeworCWRldmljZV90IGRldjsK KwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3NoOworCWJ1 c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3NwYWNlX2hhbmRsZV90IGVjX3N5c3Rl bV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlzdHJ1Y3Qgcm1hbiBlY19tZW1fcm1h bjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCByZXNv dXJjZXM7Cit9OworCit2b2lkIHBvd2VyX29uX25ldHdvcmtfaW50ZXJmYWNlKHZvaWQpOwordW5z aWduZWQgaW50IGdldF90Y2xrKHZvaWQpOworCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2Zp bGVzLmVjb25hCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24g MCkKKysrIGFybS9lY29uYS9maWxlcy5lY29uYQkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBA QAorIyAkRnJlZUJTRCAkCithcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMJc3RhbmRhcmQKK2Fy bS9lY29uYS9lY29uYV9tYWNoZGVwLmMJCXN0YW5kYXJkCithcm0vZWNvbmEvZWNvbmEuYwkJCXN0 YW5kYXJkCithcm0vZWNvbmEvdGltZXIuYwkJCXN0YW5kYXJkCithcm0vZWNvbmEvdWFydF9idXNf ZWMuYwkJb3B0aW9uYWwJdWFydAorYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJCW9wdGlvbmFsCXVh cnQKK2Rldi91YXJ0L3VhcnRfZGV2X25zODI1MC5jCW9wdGlvbmFsCXVhcnQKK2FybS9hcm0vaXJx X2Rpc3BhdGNoLlMJCXN0YW5kYXJkCithcm0vYXJtL2J1c19zcGFjZV9nZW5lcmljLmMJCXN0YW5k YXJkCithcm0vZWNvbmEvZWhjaV9lYnVzLmMJc3RhbmRhcmQJZWhjaQorYXJtL2Vjb25hL29oY2lf ZWMuYwlzdGFuZGFyZAlvaGNpCithcm0vZWNvbmEvaWZfZWNlLmMJCXN0YW5kYXJkCithcm0vZWNv bmEvY2ZpX2J1c19lY29uYS5jCQlvcHRpb25hbAljZmkKSW5kZXg6IGFybS9lY29uYS9lY29uYV9t YWNoZGVwLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkocmV2aXNp b24gMCkKKysrIGFybS9lY29uYS9lY29uYV9tYWNoZGVwLmMJKHJldmlzaW9uIDApCkBAIC0wLDAg KzEsNDA5IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlv aGFuZXNAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChjKSAxOTk0LTE5OTggTWFyayBCcmluaWNv bWJlLgorICogQ29weXJpZ2h0IChjKSAxOTk0IEJyaW5pLgorICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIHdyaXR0ZW4gZm9y IEJyaW5pIGJ5IE1hcmsgQnJpbmljb21iZQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5n IG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisg KiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAg IFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgQnJpbmkuCisgKiA0 LiBUaGUgbmFtZSBvZiB0aGUgY29tcGFueSBub3IgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkg YmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJv bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVy bWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEJSSU5JIGBgQVMg SVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM QUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBCUklOSSBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFIEZPUiBBTlkgRElSRUNULAorICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAqIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSAib3B0X21zZ2J1 Zi5oIgorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisK KyNkZWZpbmUJX0FSTTMyX0JVU19ETUFfUFJJVkFURQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgor I2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9zeXNwcm90by5oPgorI2luY2x1 ZGUgPHN5cy9zaWduYWx2YXIuaD4KKyNpbmNsdWRlIDxzeXMvaW1nYWN0Lmg+CisjaW5jbHVkZSA8 c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9rdHIuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2Vy Lmg+CisjaW5jbHVkZSA8c3lzL2xvY2suaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5j bHVkZSA8c3lzL211dGV4Lmg+CisjaW5jbHVkZSA8c3lzL3BjcHUuaD4KKyNpbmNsdWRlIDxzeXMv cHJvYy5oPgorI2luY2x1ZGUgPHN5cy9wdHJhY2UuaD4KKyNpbmNsdWRlIDxzeXMvY29ucy5oPgor I2luY2x1ZGUgPHN5cy9iaW8uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lz L2J1Zi5oPgorI2luY2x1ZGUgPHN5cy9leGVjLmg+CisjaW5jbHVkZSA8c3lzL2tkYi5oPgorI2lu Y2x1ZGUgPHN5cy9tc2didWYuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3JlZy5oPgorI2luY2x1ZGUg PG1hY2hpbmUvY3B1Lmg+CisKKyNpbmNsdWRlIDx2bS92bS5oPgorI2luY2x1ZGUgPHZtL3BtYXAu aD4KKyNpbmNsdWRlIDx2bS92bV9vYmplY3QuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlLmg+Cisj aW5jbHVkZSA8dm0vdm1fcGFnZXIuaD4KKyNpbmNsdWRlIDx2bS92bV9tYXAuaD4KKyNpbmNsdWRl IDx2bS92bm9kZV9wYWdlci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcG1hcC5oPgorI2luY2x1ZGUg PG1hY2hpbmUvdm1wYXJhbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcGNiLmg+CisjaW5jbHVkZSA8 bWFjaGluZS91bmRlZmluZWQuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL21hY2hkZXAuaD4KKyNpbmNs dWRlIDxtYWNoaW5lL21ldGFkYXRhLmg+CisjaW5jbHVkZSA8bWFjaGluZS9hcm1yZWcuaD4KKyNp bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KKyNpbmNsdWRl ICJlY29uYV9yZWcuaCIKKworLyogUGFnZSB0YWJsZSBmb3IgbWFwcGluZyBwcm9jMCB6ZXJvIHBh Z2UgKi8KKyNkZWZpbmUJIEtFUk5FTF9QVF9TWVMJCTAKKyNkZWZpbmUJS0VSTkVMX1BUX0tFUk4J CTEKKyNkZWZpbmUJS0VSTkVMX1BUX0tFUk5fTlVNCTIyCisvKiBMMiB0YWJsZSBmb3IgbWFwcGlu ZyBhZnRlciBrZXJuZWwgKi8KKyNkZWZpbmUJS0VSTkVMX1BUX0FGS0VSTkVMCUtFUk5FTF9QVF9L RVJOICsgS0VSTkVMX1BUX0tFUk5fTlVNCisjZGVmaW5lCUtFUk5FTF9QVF9BRktFUk5FTF9OVU0J NQorCisvKiB0aGlzIHNob3VsZCBiZSBldmVubHkgZGl2aXNhYmxlIGJ5IFBBR0VfU0laRSAvIEwy X1RBQkxFX1NJWkVfUkVBTCAob3IgNCkgKi8KKyNkZWZpbmUJTlVNX0tFUk5FTF9QVFMJKEtFUk5F TF9QVF9BRktFUk5FTCArIEtFUk5FTF9QVF9BRktFUk5FTF9OVU0pCisKKy8qIERlZmluZSB2YXJp b3VzIHN0YWNrIHNpemVzIGluIHBhZ2VzICovCisjZGVmaW5lCUlSUV9TVEFDS19TSVpFCTEKKyNk ZWZpbmUJQUJUX1NUQUNLX1NJWkUJMQorI2RlZmluZQlVTkRfU1RBQ0tfU0laRQkxCisKK2V4dGVy biB1X2ludCBkYXRhX2Fib3J0X2hhbmRsZXJfYWRkcmVzczsKK2V4dGVybiB1X2ludCBwcmVmZXRj aF9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7CitleHRlcm4gdV9pbnQgdW5kZWZpbmVkX2hhbmRsZXJf YWRkcmVzczsKKworc3RydWN0IHB2X2FkZHIga2VybmVsX3B0X3RhYmxlW05VTV9LRVJORUxfUFRT XTsKKworZXh0ZXJuIHZvaWQgKl9lbmQ7CisKK2V4dGVybiBpbnQgKmVuZDsKKworc3RydWN0IHBj cHUgX19wY3B1Oworc3RydWN0IHBjcHUgKnBjcHVwID0gJl9fcGNwdTsKKworLyogUGh5c2ljYWwg YW5kIHZpcnR1YWwgYWRkcmVzc2VzIGZvciBzb21lIGdsb2JhbCBwYWdlcyAqLworCit2bV9wYWRk cl90IHBoeXNfYXZhaWxbMTBdOwordm1fcGFkZHJfdCBkdW1wX2F2YWlsWzRdOwordm1fb2Zmc2V0 X3QgcGh5c2ljYWxfcGFnZXM7CisKK3N0cnVjdCBwdl9hZGRyIHN5c3RlbXBhZ2U7CitzdHJ1Y3Qg cHZfYWRkciBtc2didWZwdjsKK3N0cnVjdCBwdl9hZGRyIGlycXN0YWNrOworc3RydWN0IHB2X2Fk ZHIgdW5kc3RhY2s7CitzdHJ1Y3QgcHZfYWRkciBhYnRzdGFjazsKK3N0cnVjdCBwdl9hZGRyIGtl cm5lbHN0YWNrOworCitzdGF0aWMgdm9pZCAqYm9vdF9hcmcxOworc3RhdGljIHZvaWQgKmJvb3Rf YXJnMjsKKworc3RhdGljIHN0cnVjdCB0cmFwZnJhbWUgcHJvYzBfdGY7CisKKy8qIFN0YXRpYyBk ZXZpY2UgbWFwcGluZ3MuICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHBtYXBfZGV2bWFwIGVjb25h X2Rldm1hcFtdID0geworCXsKKwkJLyoKKwkJICogVGhpcyBtYXBzIEREUiBTRFJBTQorCQkgKi8K KwkJRUNPTkFfU0RSQU1fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfU0RSQU1fQkFTRSwgLypw aHlzaWNhbCovCisJCUVDT05BX1NEUkFNX1NJWkUsIC8qc2l6ZSovCisJCVZNX1BST1RfUkVBRHxW TV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCS8qCisJICogTWFwIHRoZSBvbi1i b2FyZCBkZXZpY2VzIFZBID09IFBBIHNvIHRoYXQgd2UgY2FuIGFjY2VzcyB0aGVtCisJICogd2l0 aCB0aGUgTU1VIG9uIG9yIG9mZi4KKwkgKi8KKwl7CisJCS8qCisJCSAqIFRoaXMgbWFwcyB0aGUg aW50ZXJydXB0IGNvbnRyb2xsZXIsIHRoZSBVQVJUCisJCSAqIGFuZCB0aGUgdGltZXIuCisJCSAq LworCQlFQ09OQV9JT19CQVNFLCAvKnZpcnR1YWwqLworCQlFQ09OQV9JT19CQVNFLCAvKnBoeXNp Y2FsKi8KKwkJRUNPTkFfSU9fU0laRSwgLypzaXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1Rf V1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkvKgorCQkgKiBPSENJICsgRUhDSQor CQkgKi8KKwkJRUNPTkFfT0hDSV9WQkFTRSwgLyp2aXJ0dWFsKi8KKwkJRUNPTkFfT0hDSV9QQkFT RSwgLypwaHlzaWNhbCovCisJCUVDT05BX1VTQl9TSVpFLCAvKnNpemUqLworCQlWTV9QUk9UX1JF QUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwKKwl7CisJCS8qCisJCSAqIENG SQorCQkgKi8KKwkJRUNPTkFfQ0ZJX1ZCQVNFLCAvKnZpcnR1YWwqLworCQlFQ09OQV9DRklfUEJB U0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9DRklfU0laRSwKKwkJVk1fUFJPVF9SRUFEfFZNX1BS T1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAorCX0sCisJeworCQkwLAorCQkwLAorCQkwLAorCQkw LAorCQkwLAorCX0KK307CisKKwordm9pZCAqCitpbml0YXJtKHZvaWQgKmFyZywgdm9pZCAqYXJn MikKK3sKKwlzdHJ1Y3QgcHZfYWRkciAga2VybmVsX2wxcHQ7CisJaW50IGxvb3AsIGk7CisJdV9p bnQgbDFwYWdldGFibGU7CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBh ZnRlcmtlcm47CisJdWludDMyX3QgbWVtc2l6ZTsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl2 b2xhdGlsZSB1aW50MzJfdCAqIGRkciA9ICh1aW50MzJfdCAqKTB4NDAwMDAwMEM7CisJaW50IG1l bV9pbmZvOworCisJYm9vdF9hcmcxID0gYXJnOworCWJvb3RfYXJnMiA9IGFyZzI7CisJYm9vdGhv d3RvID0gUkJfVkVSQk9TRTsKKwlib290aG93dG8gfD0gIFJCX1NJTkdMRTsKKworCXNldF9jcHVm dW5jcygpOworCWxhc3RhZGRyID0gZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0 KHBjcHVwLCAwLCBzaXplb2Yoc3RydWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0 aHJlYWQwKTsKKworCisJZnJlZW1lbXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFH RV9NQVNLOworCS8qIERlZmluZSBhIG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9u ICovCisjZGVmaW5lCXZhbGxvY19wYWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJ YWxsb2NfcGFnZXMoKHZhcikucHZfdmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9 ICh2YXIpLnB2X3ZhICsgKEtFUk5QSFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJ YWxsb2NfcGFnZXModmFyLCBucCkJCQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVt ZW1wb3MgKz0gKG5wICogUEFHRV9TSVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwg KChucCkgKiBQQUdFX1NJWkUpKTsKKworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9T SVpFKSAmIChMMV9UQUJMRV9TSVpFIC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9T SVpFOworCXZhbGxvY19wYWdlcyhrZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0la RSk7CisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJ aWYgKCEobG9vcCAlIChQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFs bG9jX3BhZ2VzKGtlcm5lbF9wdF90YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8g UEFHRV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9 IGZyZWVtZW1wb3MgLQorCQkJICAgIChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVf UkVBTCkpICoKKwkJCSAgICBMMl9UQUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVb bG9vcF0ucHZfcGEgPQorCQkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5W SVJUQUREUiArCisJCQkgICAgS0VSTlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisKKworCS8q CisJICogQWxsb2NhdGUgYSBwYWdlIGZvciB0aGUgc3lzdGVtIHBhZ2UgbWFwcGVkIHRvIFYweDAw MDAwMDAwCisJICogVGhpcyBwYWdlIHdpbGwganVzdCBjb250YWluIHRoZSBzeXN0ZW0gdmVjdG9y cyBhbmQgY2FuIGJlCisJICogc2hhcmVkIGJ5IGFsbCBwcm9jZXNzZXMuCisJICovCisJdmFsbG9j X3BhZ2VzKHN5c3RlbXBhZ2UsIDEpOworCisJLyogQWxsb2NhdGUgc3RhY2tzIGZvciBhbGwgbW9k ZXMgKi8KKwl2YWxsb2NfcGFnZXMoaXJxc3RhY2ssIElSUV9TVEFDS19TSVpFKTsKKwl2YWxsb2Nf cGFnZXMoYWJ0c3RhY2ssIEFCVF9TVEFDS19TSVpFKTsKKwl2YWxsb2NfcGFnZXModW5kc3RhY2ss IFVORF9TVEFDS19TSVpFKTsKKwl2YWxsb2NfcGFnZXMoa2VybmVsc3RhY2ssIEtTVEFDS19QQUdF Uyk7CisJdmFsbG9jX3BhZ2VzKG1zZ2J1ZnB2LCByb3VuZF9wYWdlKE1TR0JVRl9TSVpFKSAvIFBB R0VfU0laRSk7CisKKwkvKgorCSAqIE5vdyB3ZSBzdGFydCBjb25zdHJ1Y3Rpb24gb2YgdGhlIEwx IHBhZ2UgdGFibGUKKwkgKiBXZSBzdGFydCBieSBtYXBwaW5nIHRoZSBMMiBwYWdlIHRhYmxlcyBp bnRvIHRoZSBMMS4KKwkgKiBUaGlzIG1lYW5zIHRoYXQgd2UgY2FuIHJlcGxhY2UgTDEgbWFwcGlu Z3MgbGF0ZXIgb24gaWYgbmVjZXNzYXJ5CisJICovCisJbDFwYWdldGFibGUgPSBrZXJuZWxfbDFw dC5wdl92YTsKKworCS8qIE1hcCB0aGUgTDIgcGFnZXMgdGFibGVzIGluIHRoZSBMMSBwYWdlIHRh YmxlICovCisJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIEFSTV9WRUNUT1JTX0hJR0gsCisJ ICAgICZrZXJuZWxfcHRfdGFibGVbS0VSTkVMX1BUX1NZU10pOworCWZvciAoaSA9IDA7IGkgPCBL RVJORUxfUFRfS0VSTl9OVU07IGkrKykKKwkJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIEtF Uk5CQVNFICsgaSAqIEwxX1NfU0laRSwKKwkJICAgICZrZXJuZWxfcHRfdGFibGVbS0VSTkVMX1BU X0tFUk4gKyBpXSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIEtFUk5CQVNFLCBQSFlT QUREUiwKKwkgICAoKCh1aW50MzJfdClsYXN0YWRkciAtIEtFUk5CQVNFKSArIFBBR0VfU0laRSkg JiB+KFBBR0VfU0laRSAtIDEpLAorCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRF X0NBQ0hFKTsKKwlhZnRlcmtlcm4gPSByb3VuZF9wYWdlKChsYXN0YWRkciArIEwxX1NfU0laRSkg JiB+KEwxX1NfU0laRSAtIDEpKTsKKwlmb3IgKGkgPSAwOyBpIDwgS0VSTkVMX1BUX0FGS0VSTkVM X05VTTsgaSsrKSB7CisJCXBtYXBfbGlua19sMnB0KGwxcGFnZXRhYmxlLCBhZnRlcmtlcm4gKyBp ICogTDFfU19TSVpFLAorCQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfQUZLRVJORUwg KyBpXSk7CisJfQorCisJLyogTWFwIHRoZSB2ZWN0b3IgcGFnZS4gKi8KKwlwbWFwX21hcF9lbnRy eShsMXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwgc3lzdGVtcGFnZS5wdl9wYSwKKwkgICAg Vk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKworCS8qIE1hcCB0aGUg c3RhY2sgcGFnZXMgKi8KKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgaXJxc3RhY2sucHZf dmEsIGlycXN0YWNrLnB2X3BhLAorCSAgICBJUlFfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSwgVk1f UFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1hcF9tYXBfY2h1bmsobDFw YWdldGFibGUsIGFidHN0YWNrLnB2X3ZhLCBhYnRzdGFjay5wdl9wYSwKKwkgICAgQUJUX1NUQUNL X1NJWkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUp OworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCB1bmRzdGFjay5wdl92YSwgdW5kc3RhY2su cHZfcGEsCisJICAgIFVORF9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1f UFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwga2Vy bmVsc3RhY2sucHZfdmEsIGtlcm5lbHN0YWNrLnB2X3BhLAorCSAgICBLU1RBQ0tfUEFHRVMgKiBQ QUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUpOworCisJcG1h cF9tYXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9sMXB0LnB2X3ZhLCBrZXJuZWxfbDFwdC5w dl9wYSwKKwkgICAgTDFfVEFCTEVfU0laRSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBU RV9QQUdFVEFCTEUpOworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBtc2didWZwdi5wdl92 YSwgbXNnYnVmcHYucHZfcGEsCisJICAgIE1TR0JVRl9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJP VF9XUklURSwgUFRFX0NBQ0hFKTsKKworCWZvciAobG9vcCA9IDA7IGxvb3AgPCBOVU1fS0VSTkVM X1BUUzsgKytsb29wKSB7CisJCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxfcHRf dGFibGVbbG9vcF0ucHZfdmEsCisJCSAgICBrZXJuZWxfcHRfdGFibGVbbG9vcF0ucHZfcGEsIEwy X1RBQkxFX1NJWkUsCisJCSAgICBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VU QUJMRSk7CisJfQorCisKKwlwbWFwX2Rldm1hcF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25h X2Rldm1hcCk7CisKKwljcHVfZG9tYWlucygoRE9NQUlOX0NMSUVOVCA8PCAoUE1BUF9ET01BSU5f S0VSTkVMKjIpKSB8IERPTUFJTl9DTElFTlQpOworCisJc2V0dHRiKGtlcm5lbF9sMXB0LnB2X3Bh KTsKKworCWNwdV90bGJfZmx1c2hJRCgpOworCisJY3B1X2RvbWFpbnMoRE9NQUlOX0NMSUVOVCA8 PCAoUE1BUF9ET01BSU5fS0VSTkVMKjIpKTsKKworCWNuaW5pdCgpOworCisJbWVtX2luZm8gPSAo KCpkZHIpID4+IDQpICYgMHgzOworCisJbWVtc2l6ZSA9ICg4PDxtZW1faW5mbykqMTAyNCoxMDI0 OworCisJcGh5c21lbSA9IG1lbXNpemUgLyBQQUdFX1NJWkU7CisKKwkvKgorCSAqIFBhZ2VzIHdl cmUgYWxsb2NhdGVkIGR1cmluZyB0aGUgc2Vjb25kYXJ5IGJvb3RzdHJhcCBmb3IgdGhlCisJICog c3RhY2tzIGZvciBkaWZmZXJlbnQgQ1BVIG1vZGVzLgorCSAqIFdlIG11c3Qgbm93IHNldCB0aGUg cjEzIHJlZ2lzdGVycyBpbiB0aGUgZGlmZmVyZW50IENQVSBtb2RlcyB0bworCSAqIHBvaW50IHRv IHRoZXNlIHN0YWNrcy4KKwkgKiBTaW5jZSB0aGUgQVJNIHN0YWNrcyB1c2UgU1RNRkQgZXRjLiB3 ZSBtdXN0IHNldCByMTMgdG8gdGhlIHRvcCBlbmQKKwkgKiBvZiB0aGUgc3RhY2sgbWVtb3J5Lgor CSAqLworCWNwdV9jb250cm9sKENQVV9DT05UUk9MX01NVV9FTkFCTEUsIENQVV9DT05UUk9MX01N VV9FTkFCTEUpOworCisJc2V0X3N0YWNrcHRyKFBTUl9JUlEzMl9NT0RFLAorCSAgICBpcnFzdGFj ay5wdl92YSArIElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFKTsKKwlzZXRfc3RhY2twdHIoUFNS X0FCVDMyX01PREUsCisJICAgIGFidHN0YWNrLnB2X3ZhICsgQUJUX1NUQUNLX1NJWkUgKiBQQUdF X1NJWkUpOworCXNldF9zdGFja3B0cihQU1JfVU5EMzJfTU9ERSwKKwkgICAgdW5kc3RhY2sucHZf dmEgKyBVTkRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSk7CisKKwkvKgorCSAqIFdlIG11c3Qgbm93 IGNsZWFuIHRoZSBjYWNoZSBhZ2Fpbi4uLi4KKwkgKiBDbGVhbmluZyBtYXkgYmUgZG9uZSBieSBy ZWFkaW5nIG5ldyBkYXRhIHRvIGRpc3BsYWNlIGFueQorCSAqIGRpcnR5IGRhdGEgaW4gdGhlIGNh Y2hlLiBUaGlzIHdpbGwgaGF2ZSBoYXBwZW5lZCBpbiBzZXR0dGIoKQorCSAqIGJ1dCBzaW5jZSB3 ZSBhcmUgYm9vdCBzdHJhcHBpbmcgdGhlIGFkZHJlc3NlcyB1c2VkIGZvciB0aGUgcmVhZAorCSAq IG1heSBoYXZlIGp1c3QgYmVlbiByZW1hcHBlZCBhbmQgdGh1cyB0aGUgY2FjaGUgY291bGQgYmUg b3V0CisJICogb2Ygc3luYy4gQSByZS1jbGVhbiBhZnRlciB0aGUgc3dpdGNoIHdpbGwgY3VyZSB0 aGlzLgorCSAqIEFmdGVyIGJvb3RpbmcgdGhlcmUgYXJlIG5vIGdyb3NzIHJlbG9jYXRpb25zIG9m IHRoZSBrZXJuZWwgdGh1cworCSAqIHRoaXMgcHJvYmxlbSB3aWxsIG5vdCBvY2N1ciBhZnRlciBp bml0YXJtKCkuCisJICovCisJY3B1X2lkY2FjaGVfd2JpbnZfYWxsKCk7CisKKwkvKiBTZXQgc3Rh Y2sgZm9yIGV4Y2VwdGlvbiBoYW5kbGVycyAqLworCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJl c3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5kbGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJf YWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9hYm9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5k bGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZpbmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVm aW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFk MC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5wdl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1 Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tzdGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0la RSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5wY2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJh bWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBjX2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisK Kwlhcm1fdmVjdG9yX2luaXQoQVJNX1ZFQ1RPUlNfSElHSCwgQVJNX1ZFQ19BTEwpOworCisJcG1h cF9jdXJtYXhrdmFkZHIgPSBhZnRlcmtlcm4gKyBMMV9TX1NJWkUgKiAoS0VSTkVMX1BUX0tFUk5f TlVNIC0gMSk7CisKKwkvKgorCSAqIEFSTV9VU0VfU01BTExfQUxMT0MgdXNlcyBkdW1wX2F2YWls LCBzbyBpdCBtdXN0IGJlIGZpbGxlZCBiZWZvcmUKKwkgKiBjYWxsaW5nIHBtYXBfYm9vdHN0cmFw LgorCSAqLworCWR1bXBfYXZhaWxbMF0gPSBQSFlTQUREUjsKKwlkdW1wX2F2YWlsWzFdID0gUEhZ U0FERFIgKyBtZW1zaXplOworCWR1bXBfYXZhaWxbMl0gPSAwOworCWR1bXBfYXZhaWxbM10gPSAw OworCisJcG1hcF9ib290c3RyYXAoZnJlZW1lbXBvcywKKwkgICAgS0VSTlZJUlRBRERSICsgMyAq IG1lbXNpemUsCisJICAgICZrZXJuZWxfbDFwdCk7CisKKwltc2didWZwID0gKHZvaWQqKW1zZ2J1 ZnB2LnB2X3ZhOworCW1zZ2J1ZmluaXQobXNnYnVmcCwgTVNHQlVGX1NJWkUpOworCisJbXV0ZXhf aW5pdCgpOworCisJaSA9IDA7CisjaWYgUEhZU0FERFIgIT0gS0VSTlBIWVNBRERSCisJcGh5c19h dmFpbFtpKytdID0gUEhZU0FERFI7CisJcGh5c19hdmFpbFtpKytdID0gS0VSTlBIWVNBRERSOwor I2VuZGlmCisJcGh5c19hdmFpbFtpKytdID0gdmlydHVhbF9hdmFpbCAtIEtFUk5WSVJUQUREUiAr IEtFUk5QSFlTQUREUjsKKworCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsK KwlwaHlzX2F2YWlsW2krK10gPSAwOworCXBoeXNfYXZhaWxbaSsrXSA9IDA7CisJLyogRG8gYmFz aWMgdHVuaW5nLCBoeiBldGMgKi8KKwlpbml0X3BhcmFtMSgpOworCWluaXRfcGFyYW0yKHBoeXNt ZW0pOworCWtkYl9pbml0KCk7CisKKwlyZXR1cm4gKCh2b2lkICopKGtlcm5lbHN0YWNrLnB2X3Zh ICsgVVNQQUNFX1NWQ19TVEFDS19UT1AgLQorCSAgICBzaXplb2Yoc3RydWN0IHBjYikpKTsKK30K SW5kZXg6IGFybS9lY29uYS9pZl9lY2UuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvaWZfZWNl LmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvaWZfZWNlLmMJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsMTkzOSBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hv IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9S UyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisg KiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRP UlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5H LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAq IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg SU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9S VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkK KyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU SEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1ZGUgPHN5 cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEOiBzcmMvc3lzL2FybS9lY29uYS9pZl9lY2Uu YyQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgor I2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8 c3lzL21idWYuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lzL21vZHVs ZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2lu Y2x1ZGUgPHN5cy9zb2NraW8uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8 bWFjaGluZS9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxu ZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJw Lmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+Cisj aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisK KyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQv aW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGlu ZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9i cGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkv bWlpdmFyLmg+CisjaW5jbHVkZSA8YXJtL2Vjb25hL2lmX2VjZXJlZy5oPgorI2luY2x1ZGUgPGFy bS9lY29uYS9pZl9lY2V2YXIuaD4KKyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+Cisj aW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisKKyNpbmNsdWRlICJtaWlidXNfaWYuaCIKKworc3Rh dGljIHVpbnQ4X3QKK3ZsYW4wX21hY1tFVEhFUl9BRERSX0xFTl0gPSB7MHgwMCwgMHhhYSwgMHhi YiwgMHhjYywgMHhkZCwgMHgxOX07CisKKy8qCisgKiBCb290IGxvYWRlciBleHBlY3RzIHRoZSBo YXJkd2FyZSBzdGF0ZSB0byBiZSB0aGUgc2FtZSB3aGVuIHdlCisgKiByZXN0YXJ0IHRoZSBkZXZp Y2UgKHdhcm0gYm9vdCksIHNvIHdlIG5lZWQgdG8gc2F2ZSB0aGUgaW5pdGlhbAorICogY29uZmln IHZhbHVlcy4KKyAqLworaW50IGluaXRpYWxfc3dpdGNoX2NvbmZpZzsKK2ludCBpbml0aWFsX2Nw dV9jb25maWc7CitpbnQgaW5pdGlhbF9wb3J0MF9jb25maWc7CitpbnQgaW5pdGlhbF9wb3J0MV9j b25maWc7CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK1JENChzdHJ1Y3QgZWNlX3NvZnRjICpz YywgYnVzX3NpemVfdCBvZmYpCit7CisJcmV0dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBv ZmYpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitXUjQoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms IGJ1c19zaXplX3Qgb2ZmLCB1aW50MzJfdCB2YWwpCit7CisJYnVzX3dyaXRlXzQoc2MtPm1lbV9y ZXMsIG9mZiwgdmFsKTsKK30KKworI2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9z YyktPnNjX210eCkKKyNkZWZpbmUJRUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+ c2NfbXR4KQorI2RlZmluZQlFQ0VfTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNj X210eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xP Q0ssIE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYykt PnNjX210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2Mp LT5zY19tdHhfdHgpCisjZGVmaW5lCUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgm X3NjLT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNF IFRYIExvY2siLCBNVFhfREVGKQorCisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9s b2NrKCYoX3NjKS0+c2NfbXR4X2NsZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9z YykJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5V UExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNl X2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RF RikKKworI2RlZmluZQlFQ0VfUlhMT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4 KQorI2RlZmluZQlFQ0VfUlhVTkxPQ0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9y eCkKKyNkZWZpbmUJRUNFX1JYTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210 eF9yeCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIs IE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZf c2MtPnNjX210eCk7CisjZGVmaW5lCUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95 KCZfc2MtPnNjX210eF90eCk7CisjZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9k ZXN0cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9Z KF9zYykJXAorCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlF Q0VfQVNTRVJUX0xPQ0tFRChfc2MpCW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7 CisjZGVmaW5lCUVDRV9BU1NFUlRfVU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210 eCwgTUFfTk9UT1dORUQpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8q IGlmbmV0IGVudHJ5IHBvaW50cyAqLworCitzdGF0aWMgdm9pZCBlY2Vpbml0X2xvY2tlZCh2b2lk ICopOworc3RhdGljIHZvaWQgZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3Rh dGljIHZvaWQgZWNlaW5pdCh2b2lkICopOworc3RhdGljIHZvaWQgZWNlc3RhcnQoc3RydWN0IGlm bmV0ICopOworc3RhdGljIHZvaWQgZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGlj IGludCBlY2Vpb2N0bChzdHJ1Y3QgaWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8q IGJ1cyBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIGludCBlY2VfcHJvYmUoZGV2aWNlX3QgZGV2 KTsKK3N0YXRpYyBpbnQgZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludCBlY2Vf ZGV0YWNoKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfaW50cih2b2lkICopOworc3Rh dGljIHZvaWQgZWNlX2ludHJfcWYodm9pZCAqKTsKK3N0YXRpYyB2b2lkIGVjZV9pbnRyX3N0YXR1 cyh2b2lkICp4c2MpOworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQgZWNlX2Fj dGl2YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZCBlY2VfZGVhY3RpdmF0ZShkZXZpY2Vf dCBkZXYpOworc3RhdGljIGludCBlY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOwor c3RhdGljIHZvaWQgZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZt ZWRpYXJlcSAqaWZtcik7CitzdGF0aWMgaW50IGVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMg KnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkIGVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vf c29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyBpbnQgY29uZmlndXJlX2NwdV9wb3J0 KHN0cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQgY29uZmlndXJlX2xhbl9wb3J0KHN0 cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQgc2V0X3B2aWQo c3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0 YXRpYyB2b2lkIHNldF92bGFuX3ZpZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOwor c3RhdGljIHZvaWQgc2V0X3ZsYW5fbWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxh bik7CitzdGF0aWMgdm9pZCBzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2 bGFuKTsKK3N0YXRpYyBpbnQgaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7Citz dGF0aWMgdm9pZCBlY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBj b3VudCk7CisKK3N0YXRpYyB2b2lkIGVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29m dGMgKnNjKTsKK3N0YXRpYyB2b2lkIGVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29m dGMgKnNjKTsKKworc3RhdGljIHZvaWQgZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5k aW5nIF9fdW51c2VkKTsKK3N0YXRpYyB2b2lkIGVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBl bmRpbmcgX191bnVzZWQpOworc3RhdGljIHZvaWQgZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcs IGludCBwZW5kaW5nIF9fdW51c2VkKTsKKworc3RhdGljIGludCBlY2VfYWxsb2NhdGVfZG1hKHN0 cnVjdCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZvaWQgZWNlX2ludHJfdHgodm9pZCAqeHNj KTsKKworc3RhdGljIHZvaWQgY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMs IGludCBpbmNsdWRlX3RoaXNfbWFjKTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5 KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkgICAgdWludDhfdCAqbWFjX3Jlc3VsdCwKKwkJICAg IGludCBmaXJzdCk7CisKKy8qUEhZIHJlbGF0ZWQgZnVuY3Rpb25zKi8KKworc3RhdGljIGlubGlu ZSBpbnQKK3BoeV9yZWFkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5LCBpbnQgcmVnKQor eworCWludCB2YWw7CisJaW50IGlpOworCWludCBzdGF0dXM7CisKKwlXUjQoc2MsIFBIWV9DT05U Uk9MLCBQSFlfUldfT0spOworCVdSNChzYywgUEhZX0NPTlRST0wsCisJICAgIChQSFlfQUREUkVT UyhwaHkpfFBIWV9SRUFEX0NPTU1BTkQgfAorCSAgICBQSFlfUkVHSVNURVIocmVnKSkpOworCisJ Zm9yIChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKSB7CisJCXN0YXR1cyA9IFJENChzYywgUEhZ X0NPTlRST0wpOworCQlpZiAoc3RhdHVzICYgUEhZX1JXX09LKSB7CisJCQkvKiBjbGVhciB0aGUg cndfb2sgc3RhdHVzLCBhbmQgY2xlYXIgb3RoZXIKKwkJCSAqIGJpdHMgdmFsdWUgKi8KKwkJCVdS NChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VUX0RBVEEoc3Rh dHVzKTsKKwkJCXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHBoeSwg aW50IHJlZywgaW50IGRhdGEpCit7CisJaW50IGlpOworCisJV1I0KHNjLCBQSFlfQ09OVFJPTCwg UEhZX1JXX09LKTsKKwlXUjQoc2MsIFBIWV9DT05UUk9MLAorCSAgICBQSFlfQUREUkVTUyhwaHkp IHwgUEhZX1JFR0lTVEVSKHJlZykgfAorCSAgICBQSFlfV1JJVEVfQ09NTUFORCB8IFBIWV9EQVRB KGRhdGEpKTsKKwlmb3IgKGlpID0gMDsgaWkgPCAweDEwMDA7IGlpKyspIHsKKwkJaWYgKFJENChz YywgUEhZX0NPTlRST0wpICYgUEhZX1JXX09LKSB7CisJCQkvKiBjbGVhciB0aGUgcndfb2sgc3Rh dHVzLCBhbmQgY2xlYXIgb3RoZXIKKwkJCSAqIGJpdHMgdmFsdWUKKwkJCSAqLworCQkJV1I0KHNj LCBQSFlfQ09OVFJPTCwgUEhZX1JXX09LKTsKKwkJCXJldHVybjsKKwkJfQorCX0KK30KKworLypj dXJyZW50bHkgb25seSBpY19wbHVzIHBoeSBpcyBzdXBwb3J0ZWQqLworc3RhdGljIGludCBnZXRf cGh5X3R5cGUoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJdWludDE2X3QgcGh5MF9pZCA9IDAs IHBoeTFfaWQgPSAwOworCisJLyoKKwkgKiBVc2UgU01JIChNREMvTURJTykgdG8gcmVhZCBMaW5r IFBhcnRuZXIncyBQSFkgSWRlbnRpZmllcgorCSAqIFJlZ2lzdGVyIDEKKwkgKi8KKwlwaHkwX2lk ID0gcGh5X3JlYWQoc2MsIDAsIDB4Mik7CisJcGh5MV9pZCA9IHBoeV9yZWFkKHNjLCAxLCAweDIp OworCisJaWYgKChwaHkwX2lkID09IDB4RkZGRikgJiYgKHBoeTFfaWQgPT0gMHgwMDBGKSkKKwkJ cmV0dXJuIChBU0lYX0dJR0FfUEhZKTsKKwllbHNlIGlmICgocGh5MF9pZCA9PSAweDAyNDMpICYm IChwaHkxX2lkID09IDB4MDI0MykpCisJCXJldHVybiAoVFdPX1NJTkdMRV9QSFkpOworCWVsc2Ug aWYgKChwaHkwX2lkID09IDB4RkZGRikgJiYgKHBoeTFfaWQgPT0gMHgwMDA3KSkKKwkJcmV0dXJu IChWU0M4NjAxX0dJR0FfUEhZKTsKKwllbHNlIGlmICgocGh5MV9pZCA9PSAweEZGRkYpICYmIChw aHkwX2lkID09IDB4MDI0MykpCisJCXJldHVybiAoSUNfUExVU19QSFkpOworCisJcmV0dXJuIChO T1RfRk9VTkRfUEhZKTsKK30KKworc3RhdGljIGludAorZWNlX3Byb2JlKGRldmljZV90IGRldikK K3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgRXRoZXJuZXQgQ29udHJvbGxlciIpOwor CXJldHVybiAoMCk7Cit9CisKKworc3RhdGljIGludAorZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYp Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJc3Ry dWN0IGlmbmV0ICppZnAgPSBOVUxMOworCXN0cnVjdCBzeXNjdGxfY3R4X2xpc3QgKnNjdHg7CisJ c3RydWN0IHN5c2N0bF9vaWQgKnNvaWQ7CisJaW50IGVyciA9IDA7CisJdV9jaGFyIGVhZGRyW0VU SEVSX0FERFJfTEVOXTsKKwl1aW50MzJfdCBybmQ7CisJaW50IGksIHJpZDsKKworCXNjLT5kZXYg PSBkZXY7CisKKwlyaWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu eShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKworCWlmIChz Yy0+bWVtX3JlcyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXBvd2VyX29uX25ldHdvcmtfaW50 ZXJmYWNlKCk7CisKKwlyaWQgPSAwOworCXNjLT5pcnFfcmVzX3N0YXR1cyA9IGJ1c19hbGxvY19y ZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJICAgIFJGX0FDVElWRSk7CisJ aWYgKHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7 IC8qVFNUQzogRm0tU3dpdGNoLVR4LUNvbXBsZXRlKi8KKwlzYy0+aXJxX3Jlc190eCA9IGJ1c19h bGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCVJGX0FDVElW RSk7CisJaWYgKHNjLT5pcnFfcmVzX3R4ID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlkID0g MjsgLypGU1JDOiBGbS1Td2l0Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1 c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCSBSRl9B Q1RJVkUpOworCWlmIChzYy0+aXJxX3Jlc19yZWMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwly aWQgPSA0OyAvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9 IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkJCQkJCVJG X0FDVElWRSk7CisJaWYgKHNjLT5pcnFfcmVzX3FmID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJ ZXJyID0gZWNlX2FjdGl2YXRlKGRldik7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkvKiBT eXNjdGxzICovCisJc2N0eCA9IGRldmljZV9nZXRfc3lzY3RsX2N0eChkZXYpOworCXNvaWQgPSBk ZXZpY2VfZ2V0X3N5c2N0bF90cmVlKGRldik7CisKKwlFQ0VfTE9DS19JTklUKHNjKTsKKworCWNh bGxvdXRfaW5pdF9tdHgoJnNjLT50aWNrX2NoLCAmc2MtPnNjX210eCwgMCk7CisKKwlpZiAoKGVy ciA9IGVjZV9nZXRfbWFjKHNjLCBlYWRkcikpICE9IDApIHsKKwkJLyoKKwkJICogTm8gTUFDIGFk ZHJlc3MgY29uZmlndXJlZC4gR2VuZXJhdGUgdGhlIHJhbmRvbSBvbmUuCisJCSAqLworCQlpZiAo Ym9vdHZlcmJvc2UpCisJCQlkZXZpY2VfcHJpbnRmKGRldiwKKwkJCSAgICAiR2VuZXJhdGluZyBy YW5kb20gZXRoZXJuZXQgYWRkcmVzcy5cbiIpOworCQlybmQgPSBhcmM0cmFuZG9tKCk7CisKKwkJ Lypmcm9tIGlmX2FlLmMvaWZfYXRlLmMqLworCQkvKgorCQkgKiBTZXQgT1VJIHRvIGNvbnZlbmll bnQgbG9jYWxseSBhc3NpZ25lZCBhZGRyZXNzLiAnYicKKwkJICogaXMgMHg2Miwgd2hpY2ggaGFz IHRoZSBsb2NhbGx5IGFzc2lnbmVkIGJpdCBzZXQsIGFuZAorCQkgKiB0aGUgYnJvYWRjYXN0L211 bHRpY2FzdCBiaXQgY2xlYXIuCisJCSAqLworCQllYWRkclswXSA9ICdiJzsKKwkJZWFkZHJbMV0g PSAncyc7CisJCWVhZGRyWzJdID0gJ2QnOworCQllYWRkclszXSA9IChybmQgPj4gMTYpICYgMHhm ZjsKKwkJZWFkZHJbNF0gPSAocm5kID4+IDgpICYgMHhmZjsKKwkJZWFkZHJbNV0gPSBybmQgJiAw eGZmOworCisJCWZvciAoaT0wOyBpPEVUSEVSX0FERFJfTEVOOyBpKyspCisJCQllYWRkcltpXSA9 IHZsYW4wX21hY1tpXTsKKwl9CisJZWNlX3NldF9tYWMoc2MsIGVhZGRyKTsKKwlzYy0+aWZwID0g aWZwID0gaWZfYWxsb2MoSUZUX0VUSEVSKTsKKwlpZiAobWlpX3BoeV9wcm9iZShkZXYsICZzYy0+ bWlpYnVzLCBlY2VfaWZtZWRpYV91cGQsCisJCQkgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2 aWNlX3ByaW50ZihkZXYsICJDYW5ub3QgZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87 CisJCWdvdG8gb3V0OworCX0KKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZw LCBkZXZpY2VfZ2V0X25hbWUoZGV2KSwgZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZf ZmxhZ3MgPSBJRkZfQlJPQURDQVNUIHwgSUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJ aWZwLT5pZl9jYXBhYmlsaXRpZXMgPSBJRkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0 ID0gKENTVU1fSVAgfCBDU1VNX1RDUCB8IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9 IGlmcC0+aWZfY2FwYWJpbGl0aWVzOworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAt PmlmX2lvY3RsID0gZWNlaW9jdGw7CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlm X3NuZC5pZnFfZHJ2X21heGxlbiA9IEVDRV9NQVhfVFhfQlVGRkVSUy0xOworCUlGUV9TRVRfTUFY TEVOKCZpZnAtPmlmX3NuZCwgRUNFX01BWF9UWF9CVUZGRVJTLTEpOworCUlGUV9TRVRfUkVBRFko JmlmcC0+aWZfc25kKTsKKworCS8qIENyZWF0ZSBsb2NhbCB0YXNrcS4gKi8KKworCVRBU0tfSU5J VCgmc2MtPnNjX2ludHJfdGFzaywgMCwgZWNlX2ludHJfdGFzaywgc2MpOworCVRBU0tfSU5JVCgm c2MtPnNjX3R4X3Rhc2ssIDEsIGVjZV90eF90YXNrLCBpZnApOworCVRBU0tfSU5JVCgmc2MtPnNj X2NsZWFudXBfdGFzaywgMiwgZWNlX2NsZWFudXBfdGFzaywgc2MpOworCXNjLT5zY190cSA9IHRh c2txdWV1ZV9jcmVhdGVfZmFzdCgiZWNlX3Rhc2txIiwgTV9XQUlUT0ssCisJCQkJCSAgdGFza3F1 ZXVlX3RocmVhZF9lbnF1ZXVlLAorCQkJCQkgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEg PT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRh c2txdWV1ZVxuIik7CisJCWdvdG8gb3V0OworCisJfQorCisJZXRoZXJfaWZhdHRhY2goaWZwLCBl YWRkcik7CisKKwkvKgorCSAqIEFjdGl2YXRlIGludGVycnVwdHMKKwkgKi8KKwllcnIgPSBidXNf c2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3JlYywgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBT QUZFLAorCQkgICAgTlVMTCwgZWNlX2ludHIsIHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJy KSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQln b3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0 YXR1cywKKwkJICAgIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkJICAgIE5VTEwsIGVj ZV9pbnRyX3N0YXR1cywgc2MsICZzYy0+aW50cmhhbmRfc3RhdHVzKTsKKwlpZiAoZXJyKSB7CisJ CWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91 dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3FmLCBJTlRS X1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJCSAgICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNj LT5pbnRyaGFuZF9xZik7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJ CUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0 dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3R4LCBJTlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUs CisJCSAgICBOVUxMLCBlY2VfaW50cl90eCwgc2MsICZzYy0+aW50cmhhbmRfdHgpOworCisJaWYg KGVycikgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsK KwkJZ290byBvdXQ7CisJfQorCisJRUNFX1RYTE9DS19JTklUKHNjKTsKKwlFQ0VfUlhMT0NLX0lO SVQoc2MpOworCUVDRV9DTEVBTlVQTE9DS19JTklUKHNjKTsKKworCS8qZW5hYmxlIGFsbCBpbnRl cnJ1cHQgc291cmNlcyovCisJV1I0KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisK KwkvKmVuYWJsZSBwb3J0IDAqLworCVdSNChzYywgUE9SVF8wX0NPTkZJRywgUkQ0KHNjLCBQT1JU XzBfQ09ORklHKSAmIH4oUE9SVF9ESVNBQkxFKSk7CisKKwl0YXNrcXVldWVfc3RhcnRfdGhyZWFk cygmc2MtPnNjX3RxLCAxLCBQSV9ORVQsICIlcyB0YXNrcSIsCisJCSAgICBkZXZpY2VfZ2V0X25h bWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0ZShk ZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIpOwor fQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwkvKlRPRE86IHJl bGVhc2UgcmVzb3VyY2VzKi8KKworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gZGV2aWNlX2dldF9z b2Z0YyhkZXYpOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKworCWVjZXN0b3Aoc2Mp OworCWlmIChpZnAgIT0gTlVMTCkgeworCQlldGhlcl9pZmRldGFjaChpZnApOworCQlpZl9mcmVl KGlmcCk7CisJfQorCWVjZV9kZWFjdGl2YXRlKGRldik7CisJcmV0dXJuICgwKTsKK30KKworc3Rh dGljIHZvaWQKK2VjZV9nZXRhZGRyKHZvaWQgKmFyZywgYnVzX2RtYV9zZWdtZW50X3QgKnNlZ3Ms IGludCBuc2VncywgaW50IGVycm9yKQoreworCXVfaW50MzJfdCAqcGFkZHI7CisJS0FTU0VSVChu c2VncyA9PSAxLCAoIndyb25nIG51bWJlciBvZiBzZWdtZW50cywgc2hvdWxkIGJlIDEiKSk7CisJ cGFkZHIgPSBhcmc7CisJKnBhZGRyID0gc2Vncy0+ZHNfYWRkcjsKK30KKworc3RhdGljIGludAor ZWNlX2FsbG9jX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBpOwor CWludCBlcnJvcjsKKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBhbmQgRE1BIHNhZmUgbWVt b3J5IGZvciBUWC9SWCBkZXNjcmlwdG9ycy4gKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0 ZShzYy0+c2NfcGFyZW50X3RhZywJLyogcGFyZW50ICovCisJCSAgICAxNiwgMCwgLyogYWxpZ25t ZW50LCBib3VuZGFyeSAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQsCS8qIGxvd2Fk ZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkvKiBoaWdoYWRkciAqLworCQkgICAgTlVM TCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICovCisJCSAgICBzaXplb2YoZXRoX3R4 X2Rlc2NfdCkqRUNFX01BWF9UWF9CVUZGRVJTLCAvKm1heCBzaXplKi8KKwkJICAgIDEsLypuc2Vn bWVudHMqLworCQkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKkVDRV9NQVhfVFhfQlVGRkVSUywK KwkJICAgIDAsLypmbGFncyovCisJCSAgICBOVUxMLCBOVUxMLAkvKiBsb2NrZnVuYywgbG9ja2Z1 bmNhcmcgKi8KKwkJICAgICZzYy0+ZG1hdGFnX2RhdGFfdHgpOwkvKiBkbWF0ICovCisKKwkvKiBh bGxvY2F0ZSBtZW1vcnkgZm9yIHR4IHJpbmcgKi8KKwllcnJvciA9IGJ1c19kbWFtZW1fYWxsb2Mo c2MtPmRtYXRhZ19kYXRhX3R4LAorCQkgICAgKHZvaWQqKikmKHNjLT5kZXNjX3R4KSwKKwkJICAg IEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkJICAgIEJVU19ETUFfQ09IRVJFTlQs CisJCSAgICAmKHNjLT5kbWFtYXBfcmluZ190eCkpOworCisJaWYgKGVycm9yKSB7CisJCWlmX3By aW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGFsbG9jYXRlIERNQSBtZW1vcnlcbiIpOworCQlidXNf ZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90 eCA9IDA7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCS8qIGxvYWQgcmluZyBkbWEgKi8KKwll cnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmlu Z190eCwKKwkJICAgIHNjLT5kZXNjX3R4LAorCQkgICAgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKkVD RV9NQVhfVFhfQlVGRkVSUywKKwkJICAgIGVjZV9nZXRhZGRyLAorCQkgICAgJihzYy0+cmluZ19w YWRkcl90eCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYo c2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJCWJ1c19kbWFtZW1fZnJlZShz Yy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kZXNjX3R4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3R4 KTsKKwkJc2MtPmRlc2NfdHggPSBOVUxMOworCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0 YWdfZGF0YV90eCk7CisJCXNjLT5kbWF0YWdfZGF0YV90eCA9IDA7CisJCXJldHVybiAoRU5YSU8p OworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuIEFsaWdubWVudCBp cyAyIGJ5dGVzICovCisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90 YWcsCS8qIHBhcmVudCAqLworCQkgICAgMSwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov CisJCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCQkgICAgQlVT X1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGZp bHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCQkgICBNQ0xCWVRFUypNQVhfRlJBR01FTlQsCS8qbWF4 c2l6ZSovCisJCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMgKi8KKwkJICAgIE1DTEJZ VEVTLCAwLAkJLyogbWF4c2Vnc3osIGZsYWdzICovCisJCSAgICBOVUxMLCBOVUxMLAkJLyogbG9j a2Z1bmMsIGxvY2tmdW5jYXJnICovCisJCSAgICAmc2MtPmRtYXRhZ19yaW5nX3R4KTsJLyogZG1h dCAqLworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIHRvIGNy ZWF0ZSBidXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKwor CWZvciAoaT0wOyBpPEVDRV9NQVhfVFhfQlVGRkVSUzsgaSsrKSB7CisJCS8qIGNyZWF0ZSBkbWEg bWFwIGZvciBlYWNoIGRlc2NyaXB0b3IgKi8KKwkJZXJyb3IgPSBidXNfZG1hbWFwX2NyZWF0ZShz Yy0+ZG1hdGFnX3JpbmdfdHgsIDAsCisJCQkJCSAgJihzYy0+dHhfZGVzY1tpXS5kbWFtYXApKTsK KwkJaWYgKGVycm9yKSB7CisJCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUg bWFwIGZvciBtYnVmXG4iKTsKKwkJCXJldHVybiAoRU5YSU8pOworCQl9CisJfQorCXJldHVybiAo MCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV90eChzdHJ1Y3QgZWNlX3Nv ZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZF UlM7IGkrKykgeworCQlpZiAoc2MtPnR4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+ dHhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT50eF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisK KwlpZiAoc2MtPmRtYW1hcF9yaW5nX3R4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0 YWdfZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJaWYgKHNjLT5kZXNjX3R4KSB7CisJ CQlidXNfZG1hbWVtX2ZyZWUoc2MtPmRtYXRhZ19kYXRhX3R4LAorCQkJCQlzYy0+ZGVzY190eCwg c2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFwX3JpbmdfdHggPSAwOworCX0K KworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCX0KKworCWlmIChz Yy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxFQ0VfTUFYX1RYX0JVRkZFUlM7 IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ190eCwKKwkJCQkJ ICAgc2MtPnR4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJCXNjLT50eF9kZXNjW2ldLmRtYW1hcCA9IDA7 CisJCX0KKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfdHgpOworCQlzYy0+ ZG1hdGFnX3JpbmdfdHggPSAwOworCX0KK30KKworc3RhdGljIGludAorZWNlX2FsbG9jX2Rlc2Nf ZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWludCBlcnJvcjsKKwlpbnQgaTsKKwor CS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBhbmQgRE1BIHNhZmUgbWVtb3J5IGZvciBSWCBkZXNj cmlwdG9ycy4gKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZShzYy0+c2NfcGFyZW50X3Rh ZywJLyogcGFyZW50ICovCisJCSAgICAxNiwgMCwJCQkvKiBhbGlnbm1lbnQsIGJvdW5kYXJ5ICov CisJCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCQkgICAgQlVT X1NQQUNFX01BWEFERFIsCQkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGZp bHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCQkgICAvKiBtYXhzaXplLCBuc2VnbWVudHMgKi8KKwkJ ICAgIHNpemVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMsIDEsCisJCSAgIC8q IG1heHNlZ3N6LCBmbGFncyAqLworCQkgICAgc2l6ZW9mKGV0aF9yeF9kZXNjX3QpKkVDRV9NQVhf UlhfQlVGRkVSUywgMCwKKwkJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2NrZnVuYywgbG9ja2Z1bmNh cmcgKi8KKwkJICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisKKwkvKmFsbG9j YXRlIHJpbmcqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfcngs CisJCQkJICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJCQkJIEJVU19ETUFfTk9XQUlUIHwgQlVT X0RNQV9aRVJPIHwKKwkJCQkgQlVTX0RNQV9DT0hFUkVOVCwKKwkJCQkgJihzYy0+ZG1hbWFwX3Jp bmdfcngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0 byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJLyog bG9hZCBkbWFtYXAgKi8KKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZChzYy0+ZG1hdGFnX2RhdGFf cngsIHNjLT5kbWFtYXBfcmluZ19yeCwKKwkJICAgIHNjLT5kZXNjX3J4LAorCQkgICAgc2l6ZW9m KGV0aF9yeF9kZXNjX3QpKkVDRV9NQVhfUlhfQlVGRkVSUywKKwkJICAgIGVjZV9nZXRhZGRyLAor CQkgICAgJihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJv cikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3JpcHRvclxuIik7CisJ CWJ1c19kbWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNjX3J4LAorCQkJCXNj LT5kbWFtYXBfcmluZ19yeCk7CisJCWJ1c19kbWFfdGFnX2Rlc3Ryb3koc2MtPmRtYXRhZ19kYXRh X3J4KTsKKwkJc2MtPmRlc2NfcnggPSBOVUxMOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkv KiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9yIG1idWZzLiAqLworCWVycm9yID0gYnVzX2RtYV90 YWdfY3JlYXRlKHNjLT5zY19wYXJlbnRfdGFnLC8qIHBhcmVudCAqLworCQkgICAgMTYsIDAsCQkJ LyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCQkgICAgQlVTX1NQQUNFX01BWEFERFJfMzJCSVQs CS8qIGxvd2FkZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8K KwkJICAgIE5VTEwsIE5VTEwsCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkJICAgIE1D TEJZVEVTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJCSAgICBNQ0xCWVRFUywgMCwJ CS8qIG1heHNlZ3N6LCBmbGFncyAqLworCQkgICAgTlVMTCwgTlVMTCwJCS8qIGxvY2tmdW5jLCBs b2NrZnVuY2FyZyAqLworCQkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQgKi8KKwor CWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVhdGUgYnVz ZG1hIHRhZyBmb3IgbWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlmb3IgKGkg PTA7IGk8RUNFX01BWF9SWF9CVUZGRVJTOyBpKyspIHsKKwkJZXJyb3IgPSBidXNfZG1hbWFwX2Ny ZWF0ZShzYy0+ZG1hdGFnX3JpbmdfcngsIDAsCisJCQkgICAgJnNjLT5yeF9kZXNjW2ldLmRtYW1h cCk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8gY3Jl YXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0KKworCWVy cm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2MtPnJ4X3Nw YXJlbWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQgdG8g Y3JlYXRlIHNwYXJlIG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJldHVybiAo MCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3QgZWNlX3Nv ZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZF UlM7IGkrKykgeworCQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVlbShzYy0+ cnhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0KKwl9CisK KwlpZiAoc2MtPmRtYXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0 YWdfZGF0YV9yeCwgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVlKHNjLT5k bWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngpOwor CQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5kbWF0YWdf ZGF0YV9yeCA9IDA7CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNjX3J4ID0g MDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7IGk8RUNF X01BWF9SWF9CVUZGRVJTOyBpKyspCisJCQlidXNfZG1hbWFwX2Rlc3Ryb3koc2MtPmRtYXRhZ19y aW5nX3J4LAorCQkJICAgIHNjLT5yeF9kZXNjW2ldLmRtYW1hcCk7CisJCWJ1c19kbWFtYXBfZGVz dHJveShzYy0+ZG1hdGFnX3JpbmdfcngsIHNjLT5yeF9zcGFyZW1hcCk7CisJCWJ1c19kbWFfdGFn X2Rlc3Ryb3koc2MtPmRtYXRhZ19yaW5nX3J4KTsKKwkJc2MtPmRtYXRhZ19yaW5nX3J4ID0gMDsK Kwl9Cit9CisKK3N0YXRpYyBpbnQKK2VjZV9uZXdfcnhidWYoc3RydWN0IGVjZV9zb2Z0YyAqc2Ms IHN0cnVjdCByeF9kZXNjX2luZm8qIGRlc2NpbmZvKQoreworCXN0cnVjdCBtYnVmICpuZXdfbWJ1 ZjsKKwlidXNfZG1hX3NlZ21lbnRfdCBzZWdbMV07CisJYnVzX2RtYW1hcF90IG1hcDsKKwlpbnQg ZXJyb3I7CisJaW50IG5zZWdzOworCWJ1c19kbWFfdGFnX3QgdGFnOworCisJdGFnID0gc2MtPmRt YXRhZ19yaW5nX3J4OworCisJbmV3X21idWYgPSBtX2dldGNsKE1fRE9OVFdBSVQsIE1UX0RBVEEs IE1fUEtUSERSKTsKKworCWlmIChuZXdfbWJ1ZiA9PSBOVUxMKQorCQlyZXR1cm4gKEVOT0JVRlMp OworCisJbmV3X21idWYtPm1fbGVuID0gbmV3X21idWYtPm1fcGt0aGRyLmxlbiA9IE1DTEJZVEVT OworCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyh0YWcsIHNjLT5yeF9zcGFyZW1h cCwgbmV3X21idWYsCisJCSAgICBzZWcsICZuc2VncywgQlVTX0RNQV9OT1dBSVQpOworCisJS0FT U0VSVChuc2VncyA9PSAxLCAoIlRvbyBtYW55IHNlZ21lbnRzIHJldHVybmVkISIpKTsKKworCWlm IChuc2VncyAhPSAxIHx8IGVycm9yKSB7CisJCW1fZnJlZShuZXdfbWJ1Zik7CisJCXJldHVybiAo RU5PQlVGUyk7CisJfQorCisJaWYgKGRlc2NpbmZvLT5idWZmICE9IE5VTEwpIHsKKwkJYnVzX2Rt YW1hcF9zeW5jKHRhZywgZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUE9TVFJFQUQpOwor CQlidXNfZG1hbWFwX3VubG9hZCh0YWcsIGRlc2NpbmZvLT5kbWFtYXApOworCX0KKworCW1hcCA9 IGRlc2NpbmZvLT5kbWFtYXA7CisJZGVzY2luZm8tPmRtYW1hcCA9IHNjLT5yeF9zcGFyZW1hcDsK KwlzYy0+cnhfc3BhcmVtYXAgPSBtYXA7CisKKwlidXNfZG1hbWFwX3N5bmModGFnLCBkZXNjaW5m by0+ZG1hbWFwLCBCVVNfRE1BU1lOQ19QUkVSRUFEKTsKKworCWRlc2NpbmZvLT5idWZmID0gbmV3 X21idWY7CisJZGVzY2luZm8tPmRlc2MtPmRhdGFfcHRyID0gc2VnLT5kc19hZGRyOworCWRlc2Np bmZvLT5kZXNjLT5sZW5ndGggPSBzZWctPmRzX2xlbi0yOworCisJcmV0dXJuICgwKTsKK30KKwor c3RhdGljIGludAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwll dGhfdHhfZGVzY190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4OworCWludCBpOwor CWludCBlcnJvcjsKKworCS8qY3JlYXRlIHBhcmVudCB0YWcgZm9yIHR4IGFuZCByeCovCisJZXJy b3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoCisJCSAgICBidXNfZ2V0X2RtYV90YWcoc2MtPmRldiks LyogcGFyZW50ICovCisJCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCQkg ICAgQlVTX1NQQUNFX01BWEFERFIsCS8qIGxvd2FkZHIgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhB RERSLAkvKiBoaWdoYWRkciAqLworCQkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBmaWx0ZXJh cmcgKi8KKwkJICAgIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULCAwLC8qIG1heHNpemUsIG5zZWdt ZW50cyAqLworCQkgICAgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsCS8qIG1heHNlZ3NpemUgKi8K KwkJICAgIDAsCQkJLyogZmxhZ3MgKi8KKwkJICAgIE5VTEwsIE5VTEwsCS8qIGxvY2tmdW5jLCBs b2NrYXJnICovCisJCSAgICAmc2MtPnNjX3BhcmVudF90YWcpOworCisJZWNlX2FsbG9jX2Rlc2Nf ZG1hX3R4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykg eworCQlkZXNjdHggPSAoZXRoX3R4X2Rlc2NfdCAqKSgmc2MtPmRlc2NfdHhbaV0pOworCQltZW1z ZXQoZGVzY3R4LCAwLCBzaXplb2YoZXRoX3R4X2Rlc2NfdCkpOworCQlkZXNjdHgtPmxlbmd0aCA9 IE1BWF9QQUNLRVRfTEVOOworCQlkZXNjdHgtPmNvd24gPSAxOworCQlpZiAoaT09RUNFX01BWF9U WF9CVUZGRVJTLTEpCisJCQlkZXNjdHgtPmVvciA9IDE7CisJfQorCisJZWNlX2FsbG9jX2Rlc2Nf ZG1hX3J4KHNjKTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykg eworCQlkZXNjcnggPSAmKHNjLT5kZXNjX3J4W2ldKTsKKwkJbWVtc2V0KGRlc2NyeCwgMCwgc2l6 ZW9mKGV0aF9yeF9kZXNjX3QpKTsKKwkJc2MtPnJ4X2Rlc2NbaV0uZGVzYyA9IGRlc2NyeDsKKwkJ c2MtPnJ4X2Rlc2NbaV0uYnVmZiA9IDA7CisJCWVjZV9uZXdfcnhidWYoc2MsICYoc2MtPnJ4X2Rl c2NbaV0pKTsKKworCQlpZiAoaT09RUNFX01BWF9SWF9CVUZGRVJTLTEpCisJCQlkZXNjcngtPmVv ciA9IDE7CisJfQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7CisJc2MtPmxh c3RfcnggPSAwOworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgwKTsKK30KKwor c3RhdGljIGludAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNlX3Nv ZnRjICpzYzsKKwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKwlzdHJ1Y3Qg aWZuZXQgKmlmcDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmcCA9IHNjLT5p ZnA7CisKKwlpbml0aWFsX3N3aXRjaF9jb25maWcgPSBSRDQoc2MsIFNXSVRDSF9DT05GSUcpOwor CWluaXRpYWxfY3B1X2NvbmZpZyA9IFJENChzYywgQ1BVX1BPUlRfQ09ORklHKTsKKwlpbml0aWFs X3BvcnQwX2NvbmZpZyA9IFJENChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCWluaXRpYWxfcG9y dDFfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisKKwkvKkRpc2FibGUgUG9y dCAwICovCisJbWFjX3BvcnRfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisJ bWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCVdSNChzYywgTUFDX1BPUlRfMF9D T05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKkRpc2FibGUgUG9ydCAxICovCisJbWFjX3Bv cnRfY29uZmlnID0gUkQ0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmln IHw9IChQT1JUX0RJU0FCTEUpOworCVdSNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIG1hY19wb3J0 X2NvbmZpZyk7CisKKwllcnIgPSBlY2VfYWxsb2NhdGVfZG1hKHNjKTsKKwlpZiAoZXJyKSB7CisJ CWlmX3ByaW50ZihzYy0+aWZwLCAiZmFpbGVkIGFsbG9jYXRpbmcgZG1hXG4iKTsKKwkJZ290byBv dXQ7CisJfQorCisJV1I0KHNjLCBUU19ERVNDUklQVE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRy X3R4KTsKKwlXUjQoc2MsIFRTX0RFU0NSSVBUT1JfQkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90 eCk7CisKKwlXUjQoc2MsIEZTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfcngp OworCVdSNChzYywgRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIsIHNjLT5yaW5nX3BhZGRyX3J4KTsK KworCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwly ZXR1cm4gKEVOWElPKTsKKworfQorCitzdGF0aWMgdm9pZAorZWNlX2RlYWN0aXZhdGUoZGV2aWNl X3QgZGV2KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjOworCisJc2MgPSBkZXZpY2VfZ2V0X3Nv ZnRjKGRldik7CisKKwlpZiAoc2MtPmludHJoYW5kKQorCQlidXNfdGVhcmRvd25faW50cihkZXYs IHNjLT5pcnFfcmVzX3JlYywgc2MtPmludHJoYW5kKTsKKworCXNjLT5pbnRyaGFuZCA9IDA7CisK KwlpZiAoc2MtPmludHJoYW5kX3FmKQorCQlidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5pcnFf cmVzX3FmLCBzYy0+aW50cmhhbmRfcWYpOworCisJc2MtPmludHJoYW5kX3FmID0gMDsKKworCWJ1 c19nZW5lcmljX2RldGFjaChzYy0+ZGV2KTsKKwlpZiAoc2MtPm1paWJ1cykKKwkJZGV2aWNlX2Rl bGV0ZV9jaGlsZChzYy0+ZGV2LCBzYy0+bWlpYnVzKTsKKwlpZiAoc2MtPm1lbV9yZXMpCisJCWJ1 c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19JT1BPUlQsCisJCSAgICBybWFuX2dldF9y aWQoc2MtPm1lbV9yZXMpLCBzYy0+bWVtX3Jlcyk7CisJc2MtPm1lbV9yZXMgPSAwOworCisJaWYg KHNjLT5pcnFfcmVzX3JlYykKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2UoZGV2LCBTWVNfUkVTX0lS USwKKwkJICAgIHJtYW5fZ2V0X3JpZChzYy0+aXJxX3Jlc19yZWMpLCBzYy0+aXJxX3Jlc19yZWMp OworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShkZXYsIFNZ U19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3FmKSwgc2MtPmlycV9y ZXNfcWYpOworCisJaWYgKHNjLT5pcnFfcmVzX3FmKQorCQlidXNfcmVsZWFzZV9yZXNvdXJjZShk ZXYsIFNZU19SRVNfSVJRLAorCQkgICAgcm1hbl9nZXRfcmlkKHNjLT5pcnFfcmVzX3N0YXR1cyks IHNjLT5pcnFfcmVzX3N0YXR1cyk7CisKKwlzYy0+aXJxX3Jlc19yZWMgPSAwOworCXNjLT5pcnFf cmVzX3FmID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSAwOworCUVDRV9UWExPQ0tfREVTVFJP WShzYyk7CisJRUNFX1JYTE9DS19ERVNUUk9ZKHNjKTsKKworCWVjZV9mcmVlX2Rlc2NfZG1hX3R4 KHNjKTsKKwllY2VfZnJlZV9kZXNjX2RtYV9yeChzYyk7CisKKwlyZXR1cm47Cit9CisKKy8qCisg KiBDaGFuZ2UgbWVkaWEgYWNjb3JkaW5nIHRvIHJlcXVlc3QuCisgKi8KK3N0YXRpYyBpbnQKK2Vj ZV9pZm1lZGlhX3VwZChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpz YyA9IGlmcC0+aWZfc29mdGM7CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJaW50IGVycm9yOwor CisJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlFQ0VfTE9DSyhzYyk7CisJ ZXJyb3IgPSBtaWlfbWVkaWFjaGcobWlpKTsKKwlFQ0VfVU5MT0NLKHNjKTsKKwlyZXR1cm4gKGVy cm9yKTsKK30KKworLyoKKyAqIE5vdGlmeSB0aGUgd29ybGQgd2hpY2ggbWVkaWEgd2UncmUgdXNp bmcuCisgKi8KK3N0YXRpYyB2b2lkCitlY2VfaWZtZWRpYV9zdHMoc3RydWN0IGlmbmV0ICppZnAs IHN0cnVjdCBpZm1lZGlhcmVxICppZm1yKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gaWZw LT5pZl9zb2Z0YzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKworCW1paSA9IGRldmljZV9nZXRf c29mdGMoc2MtPm1paWJ1cyk7CisJRUNFX0xPQ0soc2MpOworCW1paV9wb2xsc3RhdChtaWkpOwor CWlmbXItPmlmbV9hY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3RpdmU7CisJaWZtci0+aWZtX3N0 YXR1cyA9IG1paS0+bWlpX21lZGlhX3N0YXR1czsKKwlFQ0VfVU5MT0NLKHNjKTsKK30KKworc3Rh dGljIHZvaWQKK2VjZV90aWNrKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9 IHhzYzsKKwlzdHJ1Y3QgbWlpX2RhdGEgKm1paTsKKwlpbnQgYWN0aXZlOworCisJbWlpID0gZGV2 aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwlhY3RpdmUgPSBtaWktPm1paV9tZWRpYV9hY3Rp dmU7CisJbWlpX3RpY2sobWlpKTsKKworCS8qCisJICogU2NoZWR1bGUgYW5vdGhlciB0aW1lb3V0 IG9uZSBzZWNvbmQgZnJvbSBub3cuCisJICovCisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gs IGh6LCBlY2VfdGljaywgc2MpOworfQorCitzdGF0aWMgdWludDMyX3QKK3JlYWRfbWFjX2VudHJ5 KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorCQkJICAgICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisJ aW50IGZpcnN0KQoreworCXVpbnQzMl90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBl bnRyeTsKKwl1aW50MzJfdCAqZW50cnlfdmFsOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19D T05UUk9MXzAsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzEsIDApOwor CVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChmaXJzdCkKKwkJ V1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgxKTsKKwllbHNlCisJCVdSNChl YywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4Mik7CisKKwlmb3IgKGlpID0gMDsgaWkg PCAweDEwMDA7IGlpKyspCisJCWlmIChSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8x KSAmICgweDEpKQorCQkJYnJlYWs7CisKKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5 KTsKKwllbnRyeV92YWxbMF0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xKTsK KwllbnRyeV92YWxbMV0gPSBSRDQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yKTsKKwor CWlmIChtYWNfcmVzdWx0KQorCQltZW1jcHkobWFjX3Jlc3VsdCwgZW50cnkubWFjX2FkZHIsIEVU SEVSX0FERFJfTEVOKTsKKworCXJldHVybiAoZW50cnkudGFibGVfZW5kKTsKK30KKworc3RhdGlj IHVpbnQzMl90Cit3cml0ZV9hcmxfdGFibGVfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqZWMsCisJ ICAgIHVpbnQzMl90IGZpbHRlciwKKwkgICAgdWludDMyX3Qgdmxhbl9tYWMsCisJICAgIHVpbnQz Ml90IHZsYW5fZ2lkLAorCSAgICB1aW50MzJfdCBhZ2VfZmllbGQsCisJICAgIHVpbnQzMl90IHBv cnRfbWFwLAorCSAgICBjb25zdCB1aW50OF90ICptYWNfYWRkcikKK3sKKwl1aW50MzJfdCBpaTsK Kwl1aW50MzJfdCAqZW50cnlfdmFsOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRyeTsK KworCW1lbXNldCgmZW50cnksIDAsIHNpemVvZihlbnRyeSkpOworCisJZW50cnkuZmlsdGVyID0g ZmlsdGVyOworCWVudHJ5LnZsYW5fbWFjID0gdmxhbl9tYWM7CisJZW50cnkudmxhbl9naWQgPSB2 bGFuX2dpZDsKKwllbnRyeS5hZ2VfZmllbGQgPSBhZ2VfZmllbGQ7CisJZW50cnkucG9ydF9tYXAg PSBwb3J0X21hcDsKKwltZW1jcHkoZW50cnkubWFjX2FkZHIsIG1hY19hZGRyLCBFVEhFUl9BRERS X0xFTik7CisKKwllbnRyeV92YWwgPSAodWludDMyX3QqKSAoJmVudHJ5KTsKKworCVdSNChlYywg QVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VT U19DT05UUk9MXzEsIDApOworCVdSNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDAp OworCisJV1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwgZW50cnlfdmFsWzBdKTsK KwlXUjQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8yLCBlbnRyeV92YWxbMV0pOworCisJ V1I0KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgQVJMX1dSSVRFX0NPTU1BTkQpOwor CisJZm9yIChpaSA9IDA7IGlpIDwgMHgxMDAwOyBpaSsrKQorCQlpZiAoUkQ0KGVjLCBBUkxfVEFC TEVfQUNDRVNTX0NPTlRST0xfMSkgJiBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAo MSk7IC8qd3JpdGUgb2sqLworCisJLyogd3JpdGUgZmFpbGVkKi8KKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgdm9pZAorcmVtb3ZlX21hY19lbnRyeShzdHJ1Y3QgZWNlX3NvZnRjICpzYywKKwkg ICAgdWludDhfdCAqbWFjKQoreworCS8qIGludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhp cyBlbnRyeSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9J RCwKKwkgICAgSU5WQUxJRF9FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAgIG1hYyk7Cit9CisKK3N0 YXRpYyB2b2lkCithZGRfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAorCSAgICB1aW50 OF90ICptYWMpCit7CisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9V UF9JRCwKKwkJICAgIE5FV19FTlRSWSwgVkxBTjBfR1JPVVAsCisJCSAgICBtYWMpOworfQorCisv KioKKyAqIFRoZSBiZWhhdmlvciBvZiBBUkwgdGFibGUgcmVhZGluZyBhbmQgZGVsZXRpb24gaXMg bm90IHdlbGwgZGVmaW5lZAorICogaW4gdGhlIGRvY3VtZW50YXRpb24uIFRvIGJlIHNhZmUsIGFs bCBtYWMgYWRkcmVzc2VzIGFyZSBwdXQgdG8gYQorICogbGlzdCwgdGhlbiBkZWxldGVkLgorICoK KyAqLworc3RhdGljIHZvaWQKK2NsZWFyX21hY19lbnRyaWVzKHN0cnVjdCBlY2Vfc29mdGMgKmVj LCBpbnQgaW5jbHVkZV90aGlzX21hYykKK3sKKwlpbnQgdGFibGVfZW5kOworCXN0cnVjdCBtYWNf bGlzdCAqIHRlbXA7CisJc3RydWN0IG1hY19saXN0ICogbWFjX2xpc3RfaGVhZGVyOworCXN0cnVj dCBtYWNfbGlzdCAqIGN1cnJlbnQ7CisJY2hhciBtYWNbRVRIRVJfQUREUl9MRU5dOworCisJY3Vy cmVudCA9IDA7CisJbWFjX2xpc3RfaGVhZGVyID0gMDsKKworCXRhYmxlX2VuZCA9IHJlYWRfbWFj X2VudHJ5KGVjLCBtYWMsIDEpOworCXdoaWxlICghdGFibGVfZW5kKSB7CisJCWlmICghaW5jbHVk ZV90aGlzX21hYyAmJgorCQkgICAgbWVtY21wKG1hYywgdmxhbjBfbWFjLCBFVEhFUl9BRERSX0xF Tik9PTApIHsKKwkJCS8qIHJlYWQgbmV4dCBlbnRyeSAqLworCQkJdGFibGVfZW5kID0gcmVhZF9t YWNfZW50cnkoZWMsIG1hYywgMCk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXRlbXAgPSAoc3Ry dWN0IG1hY19saXN0KiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBtYWNfbGlzdCksCisJCQkgICAgTV9E RVZCVUYsCisJCQkgICAgTV9OT1dBSVQgfCBNX1pFUk8pOworCQltZW1jcHkodGVtcC0+bWFjX2Fk ZHIsIG1hYywgRVRIRVJfQUREUl9MRU4pOworCQl0ZW1wLT5uZXh0ID0gMDsKKwkJaWYgKG1hY19s aXN0X2hlYWRlcikgeworCQkJY3VycmVudC0+bmV4dCA9IHRlbXA7CisJCQljdXJyZW50ID0gdGVt cDsKKwkJfSBlbHNlIHsKKwkJCW1hY19saXN0X2hlYWRlciA9IHRlbXA7CisJCQljdXJyZW50ID0g dGVtcDsKKwkJfQorCQkvKnJlYWQgbmV4dCAqLworCQl0YWJsZV9lbmQgPSByZWFkX21hY19lbnRy eShlYywgbWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVhZGVyOworCisJd2hp bGUgKGN1cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVudC0+bWFjX2FkZHIp OworCQl0ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5leHQ7CisJCWZyZWUo dGVtcCwgTV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmlndXJlX2xhbl9wb3J0 KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWludDMyX3Qgc3dfY29u ZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICogQ29uZmlndXJlCisJ ICovCisJc3dfY29uZmlnID0gUkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKwkvKiBlbmFibGUgZmFz dCBhZ2luZyAqLworCXN3X2NvbmZpZyB8PSBGQVNUX0FHSU5HOworCS8qIEVuYWJsZSBJVkwgbGVh cm5pbmcgKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJOSU5HOworCS8qIGRpc2FibGUgaGFyZHdh cmUgTkFUICovCisJc3dfY29uZmlnICY9IH4oSEFSRFdBUkVfTkFUKTsKKworCXN3X2NvbmZpZyB8 PSBTS0lQX0wyX0xPT0tVUF9QT1JUXzAgfCBTS0lQX0wyX0xPT0tVUF9QT1JUXzF8IE5JQ19NT0RF OworCisJV1I0KHNjLCBTV0lUQ0hfQ09ORklHLCBzd19jb25maWcpOworCisJc3dfY29uZmlnID0g UkQ0KHNjLCBTV0lUQ0hfQ09ORklHKTsKKworCW1hY19wb3J0X2NvbmZpZyA9IFJENChzYywgTUFD X1BPUlRfMF9DT05GSUcpOworCisJaWYgKCEobWFjX3BvcnRfY29uZmlnICYgMHgxKSB8fCAobWFj X3BvcnRfY29uZmlnICYgMHgyKSkKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJMaW5rIERvd25cbiIp OworCWVsc2UKKwkJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsK KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0 YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KQoreworCXVpbnQzMl90IHZhbDsK Kwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCAwKSk7CisJV1I0KHNj LCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8 ICgocG9ydDApICYgMHgwNyk7CisJV1I0KHNjLCBWTEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwg PSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCA0KSk7CisJV1I0KHNjLCBWTEFO X1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgoKHBv cnQxKSAmIDB4MDcpIDw8IDQpOworCVdSNChzYywgVkxBTl9QT1JUX1BWSUQsIHZhbCk7CisKKwl2 YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCA4KSk7CisJV1I0KHNjLCBW TEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fUE9SVF9QVklEKSB8ICgo KGNwdSkgJiAweDA3KSA8PCA4KTsKKwlXUjQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCit9 CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8KK3N0YXRpYyB2b2lkCitzZXRfdmxhbl92 aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCWNvbnN0IHVpbnQzMl90IHJl Z3NbXSA9IHsKKwkJVkxBTl9WSURfMF8xLAorCQlWTEFOX1ZJRF8wXzEsCisJCVZMQU5fVklEXzJf MywKKwkJVkxBTl9WSURfMl8zLAorCQlWTEFOX1ZJRF80XzUsCisJCVZMQU5fVklEXzRfNSwKKwkJ VkxBTl9WSURfNl83LAorCQlWTEFOX1ZJRF82XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9 IHsKKwkJVkxBTjBfVklELAorCQlWTEFOMV9WSUQsCisJCVZMQU4yX1ZJRCwKKwkJVkxBTjNfVklE LAorCQlWTEFONF9WSUQsCisJCVZMQU41X1ZJRCwKKwkJVkxBTjZfVklELAorCQlWTEFON19WSUQK Kwl9OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlpbnQgdmlkOworCisJcmVn ID0gcmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYgKHZsYW4gJiAxKSB7CisJ CXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbCAmICh+KDB4RkZGIDw8IDAp KSk7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJV1I0KHNjLCByZWcsIHZhbHwoKHZpZCAmIDB4 RkZGKSA8PCAwKSk7CisJfSBlbHNlIHsKKwkJdmFsID0gUkQ0KHNjLCByZWcpOworCQlXUjQoc2Ms IHJlZywgdmFsICYgKH4oMHhGRkYgPDwgMTIpKSk7CisJCXZhbCA9IFJENChzYywgcmVnKTsKKwkJ V1I0KHNjLCByZWcsIHZhbHwoKHZpZCAmIDB4RkZGKSA8PCAxMikpOworCX0KK30KKworc3RhdGlj IHZvaWQKK3NldF92bGFuX21lbWJlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pCit7 CisJdW5zaWduZWQgY2hhciBzaGlmdDsKKwl1aW50MzJfdCB2YWw7CisJaW50IGdyb3VwOworCWNv bnN0IGludCBncm91cHNbXSA9IHsKKwkJVkxBTjBfR1JPVVAsCisJCVZMQU4xX0dST1VQLAorCQlW TEFOMl9HUk9VUCwKKwkJVkxBTjNfR1JPVVAsCisJCVZMQU40X0dST1VQLAorCQlWTEFONV9HUk9V UCwKKwkJVkxBTjZfR1JPVVAsCisJCVZMQU43X0dST1VQCisJfTsKKworCWdyb3VwID0gZ3JvdXBz W3ZsYW5dOworCisJc2hpZnQgPSB2bGFuKjM7CisJdmFsID0gUkQ0KHNjLCBWTEFOX01FTUJFUl9Q T1JUX01BUCkgJiAofigweDcgPDwgc2hpZnQpKTsKKwlXUjQoc2MsIFZMQU5fTUVNQkVSX1BPUlRf TUFQLCB2YWwpOworCXZhbCA9IFJENChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVApOworCVdSNChz YywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgoZ3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7 Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGlu dCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOworCisJaW50 IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2YWwgPSBSRDQoc2MsIFZMQU5fVEFHX1BP UlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOworCVdSNChzYywgVkxBTl9UQUdfUE9SVF9NQVAs IHZhbCk7CisJdmFsID0gUkQ0KHNjLCBWTEFOX1RBR19QT1JUX01BUCk7CisJV1I0KHNjLCBWTEFO X1RBR19QT1JUX01BUCwgdmFsIHwgKCh0YWcgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKK3N0YXRp YyBpbnQKK2NvbmZpZ3VyZV9jcHVfcG9ydChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwl1aW50 MzJfdCBjcHVfcG9ydF9jb25maWc7CisJaW50IGk7CisKKwljcHVfcG9ydF9jb25maWcgPSBSRDQo c2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLypTQSBsZWFybmluZyBEaXNhYmxlICovCisJY3B1X3Bv cnRfY29uZmlnIHw9IChTQV9MRUFSTklOR19ESVNBQkxFKTsKKwkvKm9mZnNldCA0Ynl0ZSArMiAq LworCWNwdV9wb3J0X2NvbmZpZyAmPSB+KDEgPDwgMzEpOworCisJV1I0KHNjLCBDUFVfUE9SVF9D T05GSUcsIGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShz YywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJCSAgICBTVEFUSUNfRU5UUlksIFZMQU4wX0dST1VQ LAorCQkgICAgdmxhbjBfbWFjKSkKKwkJcmV0dXJuICgxKTsKKworCXNldF9wdmlkKHNjLCBQT1JU MF9QVklELCBQT1JUMV9QVklELCBDUFVfUE9SVF9QVklEKTsKKworCWZvciAoaT0wOyBpPDg7IGkr KykgeworCQlzZXRfdmxhbl92aWQoc2MsIGkpOworCQlzZXRfdmxhbl9tZW1iZXIoc2MsIGkpOwor CQlzZXRfdmxhbl90YWcoc2MsIGkpOworCX0KKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdCBz dGF0dXMgc291cmNlcyAqLworCVdSNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOwor CisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlXUjQoc2MsIElOVEVS UlVQVF9TVEFUVVMsIDB4MDAwMDFGRkYpOworCisJV1I0KHNjLCBUU19ETUFfQ09OVFJPTCwgMCk7 CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGlj IGludAoraGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgc3RhdHVz ID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5cGUgPSBnZXRfcGh5 X3R5cGUoc2MpOworCWlmIChnd19waHlfdHlwZSAhPSBJQ19QTFVTX1BIWSkgeworCQlkZXZpY2Vf cHJpbnRmKHNjLT5kZXYsICJQSFkgdHlwZSBpcyBub3QgcmVjb2duaXplZCAoJWQpXG4iLAorCQkg ICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmlndXJl X2xhbl9wb3J0KHNjLCBnd19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsKKwly ZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBlY2Vf c29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCS8qIGludmFsaWQg YWdlX2ZpZWxkIG1lYW4gZXJhc2UgdGhpcyBlbnRyeSovCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5 KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9JRCwKKwkJICAgIElOVkFMSURfRU5UUlksIFZMQU4wX0dS T1VQLAorCQkgICAgbWFjKTsKKwltZW1jcHkodmxhbjBfbWFjLCBtYWMsIEVUSEVSX0FERFJfTEVO KTsKKworCXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJ CSAgICBTVEFUSUNfRU5UUlksIFZMQU4wX0dST1VQLAorCQkgICAgbWFjKTsKK30KKworc3RhdGlj IHZvaWQKK2VjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQor eworCW1lbWNweSh2bGFuMF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21hY19h ZGRyZXNzKHNjLCBlYWRkciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKiBUT0RPOiB0aGUgZGV2 aWNlIGRvZXNuJ3QgaGF2ZSBNQUMsCisgKiBzaG91bGQgcmVhZCB0aGUgY29uZmlndXJhdGlvbiBz dG9yZWQgaW4gRkxBU0gKKyAqLworc3RhdGljIGludAorZWNlX2dldF9tYWMoc3RydWN0IGVjZV9z b2Z0YyAqc2MsIHVfY2hhciAqZWFkZHIpCit7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKKy8qdmVy c2lvbiBmb3Igb25lIHNlZ21lbnQgb25seSovCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcnhfbG9j a2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgY291bnQpCit7CisJc3RydWN0IGlmbmV0ICpp ZnAgPSBzYy0+aWZwOworCXN0cnVjdCByeF9kZXNjX2luZm8gKnJ4ZGVzYzsKKworCXVpbnQzMl90 IHN0YXR1czsKKworCWludCBmc3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IHJ4Y291bnQ7CisJ aW50IGk7CisJaW50IGlkeDsKKwlzdHJ1Y3QgbWJ1ZiAqbWI7CisJZXRoX3J4X2Rlc2NfdCAqZGVz YzsKKworCWZzc2RfY3VyciA9IFJENChzYywgRlNfREVTQ1JJUFRPUl9QT0lOVEVSKTsKKworCWZz c2QgPSAoZnNzZF9jdXJyIC0gKHVpbnQzMl90KXNjLT5yaW5nX3BhZGRyX3J4KT4+NDsKKworCWRl c2MgPSBzYy0+cnhfZGVzY1tzYy0+bGFzdF9yeF0uZGVzYzsKKworCS8qcHJlcGFyZSB0byByZWFk IHRoZSBkYXRhIGluIHRoZSByaW5nKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5n X3J4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFE IHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCWlmIChmc3NkID4gc2MtPmxhc3RfcngpCisJ CXJ4Y291bnQgPSBmc3NkIC0gc2MtPmxhc3Rfcng7CisJZWxzZSBpZiAoZnNzZCA8IHNjLT5sYXN0 X3J4KQorCQlyeGNvdW50ID0gKEVDRV9NQVhfUlhfQlVGRkVSUyAtIHNjLT5sYXN0X3J4KSArIGZz c2Q7CisJZWxzZSB7CisJCWlmIChkZXNjLT5jb3duID09IDApCisJCQlyZXR1cm47CisJCWVsc2UK KwkJCXJ4Y291bnQgPSBFQ0VfTUFYX1JYX0JVRkZFUlM7CisJfQorCisJZm9yIChpPSAwOyBpPHJ4 Y291bnQ7IGkrKykgeworCQkvKiBHZXQgc3RhdHVzICovCisJCXN0YXR1cyA9IGRlc2MtPmNvd247 CisJCWlmICghc3RhdHVzKQorCQkJYnJlYWs7CisKKwkJaWR4ID0gc2MtPmxhc3Rfcng7CisJCXJ4 ZGVzYyA9ICZzYy0+cnhfZGVzY1tpZHhdOworCQltYiA9IHJ4ZGVzYy0+YnVmZjsKKworCQlpZiAo ZGVzYy0+bGVuZ3RoIDwgRVRIRVJfTUlOX0xFTiAtIEVUSEVSX0NSQ19MRU4gfHwKKwkJICAgIGRl c2MtPmxlbmd0aCA+IEVUSEVSX01BWF9MRU4gLSBFVEhFUl9DUkNfTEVOICsKKwkJICAgIEVUSEVS X1ZMQU5fRU5DQVBfTEVOKSB7CisJCQlpZnAtPmlmX2llcnJvcnMrKzsKKwkJCWRlc2MtPmNvd24g PSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJLypwcm9jZXNzIG5leHQg cGFja2V0Ki8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKGVjZV9uZXdfcnhidWYoc2MsIHJ4 ZGVzYykhPTApIHsKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCQkJZGVzYy0+Y293biA9IDA7CisJ CQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUyAtIDI7CisJCQlicmVhazsKKwkJfQorCisJCS8qKgor CQkgKiB0aGUgZGV2aWNlIHdpbGwgd3JpdGUgdG8gWCsyIFNvIHdlIG5lZWQgdG8gYWRqdXN0CisJ CSAqIHRoaXMgYWZ0ZXIgdGhlIHBhY2tldCBpcyByZWNlaXZlZC4KKwkJICovCisKKwkJbWItPm1f ZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3RoZHIubGVuID0gZGVzYy0+bGVuZ3Ro OworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQltYi0+bV9wa3RoZHIucmN2aWYgPSBp ZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNBUF9SWENTVU0pICE9IDApIHsKKwkJ CS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlmICggKCFkZXNjLT5sNGYpICAmJiAo ZGVzYy0+cHJvdCE9MykpIHsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9mbGFncyB8PSBDU1VNX0lQ X0NIRUNLRUQ7CisJCQkJbWItPm1fcGt0aGRyLmNzdW1fZmxhZ3MgfD0gQ1NVTV9JUF9WQUxJRDsK KwkJCQltYi0+bV9wa3RoZHIuY3N1bV9kYXRhID0gMHhmZmZmOworCQkJfQorCQl9CisJCUVDRV9S WFVOTE9DSyhzYyk7CisJCSgqaWZwLT5pZl9pbnB1dCkoaWZwLCBtYik7CisJCUVDRV9SWExPQ0so c2MpOworCisJCWRlc2MtPmNvd24gPSAwOworCQlkZXNjLT5sZW5ndGggPSBNQ0xCWVRFUy0yOwor CisJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfcngsCisJCQkJc2MtPmRtYW1hcF9y aW5nX3J4LAorCQkJCUJVU19ETUFTWU5DX1BSRVJFQUQgfCBCVVNfRE1BU1lOQ19QUkVXUklURSk7 CisKKwkJaWYgKHNjLT5sYXN0X3J4PT1FQ0VfTUFYX1JYX0JVRkZFUlMtMSkKKwkJCXNjLT5sYXN0 X3J4ID0gMDsKKwkJZWxzZQorCQkJc2MtPmxhc3RfcngrKzsKKworCQlkZXNjID0gc2MtPnJ4X2Rl c2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJfQorCisJLyogc3luYyB1cGRhdGVkIGZsYWdzICovCisJ YnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRtYW1hcF9yaW5n X3J4LAorCSAgICBCVVNfRE1BU1lOQ19QUkVSRUFEIHwgQlVTX0RNQVNZTkNfUFJFV1JJVEUpOwor CisJcmV0dXJuOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGlu dCBwZW5kaW5nIF9fdW51c2VkKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVD RV9SWExPQ0soc2MpOworCWVjZV9pbnRyX3J4X2xvY2tlZChzYywgLTEpOworCUVDRV9SWFVOTE9D SyhzYyk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfaW50cih2b2lkICp4c2MpCit7CisJc3RydWN0 IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCisJ aWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgPT0gMCkgeworCQlXUjQo c2MsIEZTX0RNQV9DT05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKworCXRhc2txdWV1ZV9lbnF1 ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCisJaWYgKCFJRlFfRFJWX0lTX0VN UFRZKCZpZnAtPmlmX3NuZCkpCisJCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5z Y190eF90YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3N0YXR1cyh2b2lkICp4c2Mp Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBz Yy0+aWZwOworCWludCBzdGF0OworCisJc3RhdCA9IFJENChzYywgSU5URVJSVVBUX1NUQVRVUyk7 CisKKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Ry dl9mbGFncyAmIElGRl9EUlZfUlVOTklORykgIT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9N QVNLKSE9MCkKKwkJCWlmcC0+aWZfaXFkcm9wcysrOworCX0KK30KKworc3RhdGljIHZvaWQKK2Vj ZV9jbGVhbnVwX2xvY2tlZChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlldGhfdHhfZGVzY190 ICpkZXNjOworCisJaWYgKHNjLT50eF9jb25zPT1zYy0+dHhfcHJvZCkgcmV0dXJuOworCisJLypw cmVwYXJlIHRvIHJlYWQgdGhlIHJpbmcgKG93bmVyIGJpdCkqLworCWJ1c19kbWFtYXBfc3luYyhz Yy0+ZG1hdGFnX3JpbmdfdHgsCisJICAgIHNjLT5kbWFtYXBfcmluZ190eCwKKwkgICAgQlVTX0RN QVNZTkNfUE9TVFJFQUQgfCBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCisJd2hpbGUgKHNjLT50 eF9jb25zIT1zYy0+dHhfcHJvZCkgeworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNd LmRlc2M7CisJCWlmIChkZXNjLT5jb3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8g KnRkID0gJihzYy0+dHhfZGVzY1tzYy0+dHhfY29uc10pOworCQkJLyp3ZSBhcmUgZmluaXNoZWQg d2l0aCB0aGlzIGRlc2NyaXB0b3IqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0 YV90eCwgdGQtPmRtYW1hcCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJLyph bmQgdW5sb2FkLCBzbyB3ZSBjYW4gcmV1c2UgKi8KKwkJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5k bWF0YWdfZGF0YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZmKTsKKwkJCXRk LT5idWZmID0gMDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkgJSBFQ0VfTUFY X1RYX0JVRkZFUlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKworfQorCitzdGF0 aWMgdm9pZAorZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5nIF9fdW51c2Vk KQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQTE9DSyhzYyk7 CisJZWNlX2NsZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhzYyk7Cit9CisK K3N0YXRpYyB2b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0 YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlmICgoaWZwLT5p Zl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyp0aGlzIHNob3VsZCBu b3QgaGFwcGVuLCBzdG9wIERNQSovCisJCVdSNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQly ZXR1cm47CisJfQorCXRhc2txdWV1ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19jbGVhbnVw X3Rhc2spOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcWYodm9pZCAqeHNjKQoreworCXN0 cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsK KwlpZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSA9PSAwKSB7CisJCS8q dGhpcyBzaG91bGQgbm90IGhhcHBlbiwgc3RvcCBETUEqLworCQlXUjQoc2MsIEZTX0RNQV9DT05U Uk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEsICZz Yy0+c2NfaW50cl90YXNrKTsKKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoK KyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBjaGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vp bml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJ c3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXVp bnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1X3BvcnRfY29uZmlnOworCXVpbnQzMl90IG1h Y19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7CisJCWNmZ19yZWcgPSBSRDQoc2MsIEJJU1Rf UkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2ZnX3JlZyAmICgxPDwxNykpKQorCQkJYnJlYWs7CisJ CURFTEFZKDEwMCk7CisJfQorCS8qIHNldCB0byBkZWZhdWx0IHZhbHVlcyAqLworCVdSNChzYywg U1dJVENIX0NPTkZJRywgMHgwMDdBQTdBMSk7CisJV1I0KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywg MHgwMDQyM0QwMCk7CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgMHgwMDQyM0Q4MCk7CisJ V1I0KHNjLCBDUFVfUE9SVF9DT05GSUcsIDB4MDA0QzAwMDApOworCisJaGFyZHdhcmVfaW5pdChz Yyk7CisKKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsKKwlt YWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7IC8qIEVuYWJsZSBQb3J0IDAgKi8K KwlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJY3B1X3Bv cnRfY29uZmlnID0gUkQ0KHNjLCBDUFVfUE9SVF9DT05GSUcpOworCS8qIGVuYWJsZSBDUFUgKi8K KwljcHVfcG9ydF9jb25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCVdSNChzYywgQ1BVX1BPUlRf Q09ORklHLCBjcHVfcG9ydF9jb25maWcpOworCisJLyoKKwkgKiBTZXQgJ3J1bm5pbmcnIGZsYWcs IGFuZCBjbGVhciBvdXRwdXQgYWN0aXZlIGZsYWcKKwkgKiBhbmQgYXR0ZW1wdCB0byBzdGFydCB0 aGUgb3V0cHV0CisJICovCisJaWZwLT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9SVU5OSU5HOwor CWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH5JRkZfRFJWX09BQ1RJVkU7CisKKwltaWkgPSBkZXZpY2Vf Z2V0X3NvZnRjKHNjLT5taWlidXMpOworCW1paV9wb2xsc3RhdChtaWkpOworCS8qIGVuYWJsZSBk bWEgKi8KKwlXUjQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNhbGxvdXRfcmVzZXQoJnNj LT50aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK2Vj ZV9lbmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYgKm0wKQoreworCXN0cnVj dCBpZm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFYX0ZSQUdNRU5UXTsKKwli dXNfZG1hbWFwX3QgbWFwcDsKKwlpbnQgZXJyb3I7CisJaW50IHNlZzsKKwlpbnQgbnNlZ3M7CisJ aW50IGRlc2Nfbm87CisJZXRoX3R4X2Rlc2NfdCAqZGVzYyA9IDA7CisKKwlpbnQgY3N1bV9mbGFn czsKKworCWlmcCA9IHNjLT5pZnA7CisKKwkvKiBGZXRjaCB1bnVzZWQgbWFwICovCisJbWFwcCA9 IHNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kbWFtYXA7CisKKwllcnJvciA9IGJ1c19kbWFtYXBf bG9hZF9tYnVmX3NnKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCwKKwkJICAgIG0wLCBzZWdzLCAm bnNlZ3MsCisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAhPSAwKSB7CisJCWJ1 c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJCXJldHVybiAoKGVy cm9yICE9IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2MtPmRlc2NfdHhbc2Mt PmRlc2NfY3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjID0gZGVzYzsK KwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nfbm8gPSBzYy0+ZGVz Y19jdXJyX3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2VnKyspIHsKKwkJaWYg KGRlc2MtPmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJPUjogZGVzY3JpcHRv ciBpcyBzdGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisKKwkJZGVzYy0+bGVu Z3RoID0gc2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBzZWdzW3NlZ10uZHNf YWRkcjsKKworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsKKwkJfSBlbHNlIHsK KwkJCWRlc2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnPT1uc2Vncy0xKSB7CisJCQlkZXNjLT5s cyA9IDE7CisJCX0gZWxzZSB7CisJCQlkZXNjLT5scyA9IDA7CisJCX0KKworCQljc3VtX2ZsYWdz ID0gbTAtPm1fcGt0aGRyLmNzdW1fZmxhZ3M7CisKKwkJZGVzYy0+ZnIgPSAgMTsKKwkJZGVzYy0+ cG1hcCA9ICAxOworCQlkZXNjLT5pbnN2ID0gIDA7CisJCWRlc2MtPmljbyA9IDA7CisJCWRlc2Mt PnRjbyA9IDA7CisJCWRlc2MtPnVjbyA9IDA7CisJCWRlc2MtPmludGVycnVwdCA9IDE7CisKKwkJ aWYgKGNzdW1fZmxhZ3MgJiBDU1VNX0lQKSB7CisJCQlkZXNjLT5pY28gPSAxOworCQkJaWYgKGNz dW1fZmxhZ3MgJiBDU1VNX1RDUCkKKwkJCQlkZXNjLT50Y28gPSAxOworCQkJaWYgKGNzdW1fZmxh Z3MgJiBDU1VNX1VEUCkKKwkJCQlkZXNjLT51Y28gPSAxOworCQl9CisKKwkJZGVzYysrOworCQlz Yy0+ZGVzY19jdXJyX3R4ID0gKHNjLT5kZXNjX2N1cnJfdHgrMSkgJSBFQ0VfTUFYX1RYX0JVRkZF UlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4PT0wKSB7CisJCQlkZXNjID0gKGV0aF90eF9kZXNj X3QgKikmKHNjLT5kZXNjX3R4WzBdKTsKKwkJfQorCX0KKworCWRlc2MgPSBzYy0+dHhfZGVzY1tz Yy0+dHhfcHJvZF0uZGVzYzsKKworCXNjLT50eF9wcm9kID0gKHNjLT50eF9wcm9kKzEpICUgRUNF X01BWF9UWF9CVUZGRVJTOworCisJLyogYWZ0ZXIgYWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdl IHNldCB0aGUgZmxhZyB0byBzdGFydCB0aGUKKwkgKiBzZW5kaW5nIHByb2Nlc3MKKwkgKi8KKwlm b3IgKHNlZyA9IDA7IHNlZyA8IG5zZWdzOyBzZWcrKykgeworCQlkZXNjLT5jb3duID0gMDsKKwkJ ZGVzYysrOworCQlkZXNjX25vID0gKGRlc2Nfbm8rMSkgJSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJ CWlmIChkZXNjX25vPT0wKQorCQkJZGVzYyA9IChldGhfdHhfZGVzY190ICopJihzYy0+ZGVzY190 eFswXSk7CisJfQorCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfZGF0YV90eCwgbWFwcCwg QlVTX0RNQVNZTkNfUFJFV1JJVEUpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBkZXF1ZXUg cGFja2V0cyBhbmQgdHJhbnNtaXQKKyAqLworc3RhdGljIHZvaWQKK2VjZXN0YXJ0X2xvY2tlZChz dHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzdHJ1Y3QgbWJ1 ZiAqbTA7CisJdWludDMyX3QgcXVldWVkID0gMDsKKworCXNjID0gaWZwLT5pZl9zb2Z0YzsKKwlp ZiAoKGlmcC0+aWZfZHJ2X2ZsYWdzICYgKElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZfT0FDVElW RSkpICE9CisJICAgIElGRl9EUlZfUlVOTklORykKKwkJcmV0dXJuOworCisJYnVzX2RtYW1hcF9z eW5jKHNjLT5kbWF0YWdfcmluZ190eCwKKwkgICAgc2MtPmRtYW1hcF9yaW5nX3R4LAorCSAgICBC VVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BPU1RXUklURSk7CisKKwlmb3IgKDs7 KSB7CisJCS8qIEdldCBwYWNrZXQgZnJvbSB0aGUgcXVldWUgKi8KKwkJSUZfREVRVUVVRSgmaWZw LT5pZl9zbmQsIG0wKTsKKwkJaWYgKG0wID09IE5VTEwpCisJCQlicmVhazsKKwkJaWYgKGVjZV9l bmNhcChzYywgbTApKSB7CisJCQlJRl9QUkVQRU5EKCZpZnAtPmlmX3NuZCwgbTApOworCQkJaWZw LT5pZl9kcnZfZmxhZ3MgfD0gSUZGX0RSVl9PQUNUSVZFOworCQkJYnJlYWs7CisJCX0KKwkJcXVl dWVkKys7CisJCUJQRl9NVEFQKGlmcCwgbTApOworCX0KKwlpZiAocXVldWVkKSB7CisJCS8qc3lu YyB0aGUgcmluZyovCisJCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1hdGFnX3JpbmdfdHgsIHNjLT5k bWFtYXBfcmluZ190eCwKKwkJICAgIEJVU19ETUFTWU5DX1BSRVJFQUR8QlVTX0RNQVNZTkNfUFJF V1JJVEUpOworCQlXUjQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9Cit9CisKK3N0YXRpYyB2 b2lkCitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsK KwlFQ0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVDRV9VTkxPQ0soc2MpOwor fQorCitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3Vu dXNlZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3RydWN0IGlmbmV0ICopYXJn OworCWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VzdGFydChzdHJ1Y3QgaWZu ZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJRUNF X1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNFX1RYVU5MT0NLKHNjKTsK K30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9wIHRoZSBuaWMuICBDYW4g YmUgY2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJlZnVsLgorICovCitzdGF0 aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQg KmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmlnOworCisJV1I0KHNjLCBU U19ETUFfQ09OVFJPTCwgMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisKKwlpZiAo aWZwKQorCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+KElGRl9EUlZfUlVOTklORyB8IElGRl9EUlZf T0FDVElWRSk7CisKKwljYWxsb3V0X3N0b3AoJnNjLT50aWNrX2NoKTsKKworCS8qRGlzYWJsZSBQ b3J0IDAgKi8KKwltYWNfcG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzBfQ09ORklHKTsK KwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJV1I0KHNjLCBNQUNfUE9SVF8w X0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNf cG9ydF9jb25maWcgPSBSRDQoc2MsIE1BQ19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25m aWcgfD0gKFBPUlRfRElTQUJMRSk7CisJV1I0KHNjLCBNQUNfUE9SVF8xX0NPTkZJRywgbWFjX3Bv cnRfY29uZmlnKTsKKworCS8qIGRpc2FibGUgYWxsIGludGVycnVwdCBzdGF0dXMgc291cmNlcyAq LworCVdSNChzYywgSU5URVJSVVBUX01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogY2xlYXIgcHJl dmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwlXUjQoc2MsIElOVEVSUlVQVF9TVEFUVVMsIDB4 MDAwMDFGRkYpOworCisJV1I0KHNjLCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25m aWcpOworCVdSNChzYywgQ1BVX1BPUlRfQ09ORklHLCBpbml0aWFsX2NwdV9jb25maWcpOworCVdS NChzYywgTUFDX1BPUlRfMF9DT05GSUcsIGluaXRpYWxfcG9ydDBfY29uZmlnKTsKKwlXUjQoc2Ms IE1BQ19QT1JUXzFfQ09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVhcl9tYWNf ZW50cmllcyhzYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1Y3QgZWNl X3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlpZnAtPmlm X2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklG Rl9EUlZfT0FDVElWRTsKKwkvKmVuYWJsZSBwb3J0IDAqLworCVdSNChzYywgUE9SVF8wX0NPTkZJ RywKKwkgICAgUkQ0KHNjLCBQT1JUXzBfQ09ORklHKSAmIH4oUE9SVF9ESVNBQkxFKSk7CisJV1I0 KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisJV1I0KHNjLCBGU19ETUFfQ09OVFJP TCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tfY2gsIGh6LCBlY2VfdGljaywgc2MpOwor fQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlz dHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVsdGlhZGRyCSppZm1hOworCXVpbnQzMl90 IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5pZnA7CisKKwljbGVhcl9tYWNfZW50cmll cyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJRkZfQUxMTVVMVEkgfHwgaWZwLT5pZl9m bGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0X2NvbmZpZyA9IFJENChzYywgTUFDX1BP UlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX0JST0FEQ0FTVF9Q QUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0gfihESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQp OworCQlXUjQoc2MsIE1BQ19QT1JUXzBfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCQlyZXR1 cm47CisJfQorCWlmX21hZGRyX3Jsb2NrKGlmcCk7CisJVEFJTFFfRk9SRUFDSChpZm1hLCAmaWZw LT5pZl9tdWx0aWFkZHJzLCBpZm1hX2xpbmspIHsKKwkJaWYgKGlmbWEtPmlmbWFfYWRkci0+c2Ff ZmFtaWx5ICE9IEFGX0xJTkspCisJCQljb250aW51ZTsKKwkJYWRkX21hY19lbnRyeShzYywKKwkJ ICAgIExMQUREUigoc3RydWN0IHNvY2thZGRyX2RsICopaWZtYS0+aWZtYV9hZGRyKSk7CisJfQor CWlmX21hZGRyX3J1bmxvY2soaWZwKTsKK30KKworc3RhdGljIGludAorZWNlaW9jdGwoc3RydWN0 IGlmbmV0ICppZnAsIHVfbG9uZyBjbWQsIGNhZGRyX3QgZGF0YSkKK3sKKwlzdHJ1Y3QgZWNlX3Nv ZnRjICpzYyA9IGlmcC0+aWZfc29mdGM7CisJc3RydWN0IG1paV9kYXRhICptaWk7CisJc3RydWN0 IGlmcmVxICppZnIgPSAoc3RydWN0IGlmcmVxICopZGF0YTsKKwlpbnQgbWFzaywgZXJyb3IgPSAw OworCisJc3dpdGNoIChjbWQpIHsKKwljYXNlIFNJT0NTSUZGTEFHUzoKKwkJRUNFX0xPQ0soc2Mp OworCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApID09IDAgJiYKKwkJICAgIGlmcC0+aWZf ZHJ2X2ZsYWdzICYgSUZGX0RSVl9SVU5OSU5HKSB7CisJCQlpZnAtPmlmX2Rydl9mbGFncyAmPSB+ SUZGX0RSVl9SVU5OSU5HOworCQkJZWNlc3RvcChzYyk7CisJCX0gZWxzZSB7CisJCQkvKiByZWlu aXRpYWxpemUgY2FyZCBvbiBhbnkgcGFyYW1ldGVyIGNoYW5nZSAqLworCQkJaWYgKChpZnAtPmlm X2ZsYWdzICYgSUZGX1VQKSAmJgorCQkJICAgICEoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJW X1JVTk5JTkcpCisJCQkgICAgKQorCQkJCWVjZV9yZXN0YXJ0KHNjKTsKKwkJfQorCQlFQ0VfVU5M T0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NBRERNVUxUSToKKwljYXNlIFNJT0NERUxN VUxUSToKKwkJRUNFX0xPQ0soc2MpOworCQlzZXRfZmlsdGVyKHNjKTsKKwkJRUNFX1VOTE9DSyhz Yyk7CisJCWJyZWFrOworCisJY2FzZSBTSU9DU0lGTUVESUE6CisJY2FzZSBTSU9DR0lGTUVESUE6 CisJCW1paSA9IGRldmljZV9nZXRfc29mdGMoc2MtPm1paWJ1cyk7CisJCWVycm9yID0gaWZtZWRp YV9pb2N0bChpZnAsIGlmciwgJm1paS0+bWlpX21lZGlhLCBjbWQpOworCQlicmVhazsKKwljYXNl IFNJT0NTSUZDQVA6CisJCW1hc2sgPSBpZnAtPmlmX2NhcGVuYWJsZSBeIGlmci0+aWZyX3JlcWNh cDsKKwkJaWYgKG1hc2sgJiBJRkNBUF9WTEFOX01UVSkgeworCQkJRUNFX0xPQ0soc2MpOworCQkJ RUNFX1VOTE9DSyhzYyk7CisJCX0KKwlkZWZhdWx0OgorCQllcnJvciA9IGV0aGVyX2lvY3RsKGlm cCwgY21kLCBkYXRhKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiAoZXJyb3IpOworfQorCitzdGF0 aWMgdm9pZAorZWNlX2NoaWxkX2RldGFjaGVkKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQp Cit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2M7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2 KTsKKwlpZiAoY2hpbGQgPT0gc2MtPm1paWJ1cykKKwkJc2MtPm1paWJ1cyA9IE5VTEw7Cit9CisK Ky8qCisgKiBNSUkgYnVzIHN1cHBvcnQgcm91dGluZXMuCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9t aWlidXNfcmVhZHJlZyhkZXZpY2VfdCBkZXYsIGludCBwaHksIGludCByZWcpCit7CisJc3RydWN0 IGVjZV9zb2Z0YyAqc2M7CisJLypvbmx5IG9uZSBwaHkqLworCWlmIChwaHk+MCkKKwkJcmV0dXJu ICgwKTsKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlyZXR1cm4gKHBoeV9yZWFkKHNj LCBwaHksIHJlZykpOworfQorCitzdGF0aWMgaW50CitlY2VfbWlpYnVzX3dyaXRlcmVnKGRldmlj ZV90IGRldiwgaW50IHBoeSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJc3RydWN0IGVjZV9zb2Z0 YyAqc2M7CisJc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJcGh5X3dyaXRlKHNjLCBwaHks IHJlZywgZGF0YSk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBl Y2VfbWV0aG9kc1tdID0geworCS8qIERldmljZSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QoZGV2 aWNlX3Byb2JlLAllY2VfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAllY2VfYXR0 YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJZWNlX2RldGFjaCksCisKKwkvKiBCdXMg aW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19jaGlsZF9kZXRhY2hlZCwJZWNlX2NoaWxkX2Rl dGFjaGVkKSwKKworCS8qIE1JSSBpbnRlcmZhY2UgKi8KKwlERVZNRVRIT0QobWlpYnVzX3JlYWRy ZWcsCWVjZV9taWlidXNfcmVhZHJlZyksCisJREVWTUVUSE9EKG1paWJ1c193cml0ZXJlZywJZWNl X21paWJ1c193cml0ZXJlZyksCisKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90IGVj ZV9kcml2ZXIgPSB7CisJImVjZSIsCisJZWNlX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCBlY2Vf c29mdGMpLAorfTsKKworRFJJVkVSX01PRFVMRShlY2UsIGVjb25hYXJtLCBlY2VfZHJpdmVyLCBl Y2VfZGV2Y2xhc3MsIDAsIDApOworRFJJVkVSX01PRFVMRShtaWlidXMsIGVjZSwgbWlpYnVzX2Ry aXZlciwgbWlpYnVzX2RldmNsYXNzLCAwLCAwKTsKK01PRFVMRV9ERVBFTkQoZWNlLCBtaWlidXMs IDEsIDEsIDEpOworTU9EVUxFX0RFUEVORChlY2UsIGV0aGVyLCAxLCAxLCAxKTsKSW5kZXg6IGFy bS9lY29uYS9pZl9lY2VyZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvaWZfZWNlcmVnLmgJ KHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvaWZfZWNlcmVnLmgJKHJldmlzaW9uIDApCkBAIC0w LDAgKzEsMTU0IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwOSwgWW9oYW5lcyBOdWdyb2hv IDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3 aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90 aWNlIHVubW9kaWZpZWQsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2lu ZworICogICAgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0 aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhF IEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9S IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB TEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICoKKyAqICRGcmVlQlNEICQKKyAqLworCisjaWZuZGVmCV9JRl9FQ0VSRUdfSAorI2Rl ZmluZQlfSUZfRUNFUkVHX0gKKworI2RlZmluZQlFVEhfQ0ZHCQkweDA4CisjZGVmaW5lCUVUSF9D RkdfUk1JSQkJKDEgPDwgMTUpCisjZGVmaW5lCVBIWV9DT05UUk9MCQkweDAwCisjZGVmaW5lCVBI WV9SV19PSwkJKDE8PDE1KQorCisjZGVmaW5lCVBIWV9BRERSRVNTKHgpCQkoKHgpICYgMHgxKQor I2RlZmluZQlQSFlfUkVHSVNURVIocikJKCgocikgJiAweDFGKSA8PCA4KQorI2RlZmluZQlQSFlf V1JJVEVfQ09NTUFORAkoMTw8MTMpCisjZGVmaW5lCVBIWV9SRUFEX0NPTU1BTkQJKDE8PDE0KQor I2RlZmluZQlQSFlfR0VUX0RBVEEoZCkJKCgoZCkgPj4gMTYpICYgMHhGRkZGKQorI2RlZmluZQlQ SFlfREFUQShkKQkJKCgoZCkgJiAweEZGRkYpIDw8IDE2KQorCisjZGVmaW5lCVBPUlRfMF9DT05G SUcJCTB4MDgKKworI2RlZmluZQlBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMAkweDA1MAorI2Rl ZmluZQlBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMQkweDA1NAorI2RlZmluZQlBUkxfVEFCTEVf QUNDRVNTX0NPTlRST0xfMgkweDA1OAorCisjZGVmaW5lCUFSTF9XUklURV9DT01NQU5ECSgxPDwz KQorI2RlZmluZQlBUkxfTE9PS1VQX0NPTU1BTkQJKDE8PDIpCisjZGVmaW5lCUFSTF9DT01NQU5E X0NPTVBMRVRFCSgxKQorCisKKyNkZWZpbmUJUE9SVDAJCQkoMSA8PCAwKQorI2RlZmluZQlQT1JU MQkJCSgxIDw8IDEpCisjZGVmaW5lCUNQVV9QT1JUCQkoMSA8PCAyKQorCisKKyNkZWZpbmUJVkxB TjBfR1JPVVBfSUQJCSgwKQorI2RlZmluZQlWTEFOMV9HUk9VUF9JRAkJKDEpCisjZGVmaW5lCVZM QU4yX0dST1VQX0lECQkoMikKKyNkZWZpbmUJVkxBTjNfR1JPVVBfSUQJCSgzKQorI2RlZmluZQlW TEFONF9HUk9VUF9JRAkJKDQpCisjZGVmaW5lCVZMQU41X0dST1VQX0lECQkoNSkKKyNkZWZpbmUJ VkxBTjZfR1JPVVBfSUQJCSg2KQorI2RlZmluZQlWTEFON19HUk9VUF9JRAkJKDcpCisKKyNkZWZp bmUJUE9SVDBfUFZJRAkJKFZMQU4xX0dST1VQX0lEKQorI2RlZmluZQlQT1JUMV9QVklECQkoVkxB TjJfR1JPVVBfSUQpCisjZGVmaW5lCUNQVV9QT1JUX1BWSUQJCShWTEFOMF9HUk9VUF9JRCkKKwor I2RlZmluZQlWTEFOMF9WSUQJCSgweDExMSkKKyNkZWZpbmUJVkxBTjFfVklECQkoMHgyMjIpCisj ZGVmaW5lCVZMQU4yX1ZJRAkJKDB4MzMzKQorI2RlZmluZQlWTEFOM19WSUQJCSgweDQ0NCkKKyNk ZWZpbmUJVkxBTjRfVklECQkoMHg1NTUpCisjZGVmaW5lCVZMQU41X1ZJRAkJKDB4NjY2KQorI2Rl ZmluZQlWTEFONl9WSUQJCSgweDc3NykKKyNkZWZpbmUJVkxBTjdfVklECQkoMHg4ODgpCisKKyNk ZWZpbmUJVkxBTjBfR1JPVVAJCShQT1JUMCB8IFBPUlQxIHwgQ1BVX1BPUlQpCisjZGVmaW5lCVZM QU4xX0dST1VQCQkoUE9SVDAgfCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjJfR1JPVVAJCShQT1JU MSB8IENQVV9QT1JUKQorI2RlZmluZQlWTEFOM19HUk9VUAkJKDApCisjZGVmaW5lCVZMQU40X0dS T1VQCQkoMCkKKyNkZWZpbmUJVkxBTjVfR1JPVVAJCSgwKQorI2RlZmluZQlWTEFONl9HUk9VUAkJ KDApCisjZGVmaW5lCVZMQU43X0dST1VQCQkoMCkKKworI2RlZmluZQlTV0lUQ0hfQ09ORklHCQkw eDAwNAorI2RlZmluZQlNQUNfUE9SVF8wX0NPTkZJRwkweDAwOAorI2RlZmluZQlNQUNfUE9SVF8x X0NPTkZJRwkweDAwQworI2RlZmluZQlDUFVfUE9SVF9DT05GSUcJMHgwMTAKKyNkZWZpbmUJQklT VF9SRVNVTFRfVEVTVF8wCTB4MDk0CisKKyNkZWZpbmUJRlNfRE1BX0NPTlRST0wJCTB4MTA0Cisj ZGVmaW5lCVRTX0RNQV9DT05UUk9MCQkweDEwMAorCisjZGVmaW5lCUlOVEVSUlVQVF9NQVNLCQkw eDA4QworI2RlZmluZQlJTlRFUlJVUFRfU1RBVFVTCTB4MDg4CisKKyNkZWZpbmUJVFNfREVTQ1JJ UFRPUl9QT0lOVEVSCQkweDEwOAorI2RlZmluZQlUU19ERVNDUklQVE9SX0JBU0VfQUREUgkweDEx MAorI2RlZmluZQlGU19ERVNDUklQVE9SX1BPSU5URVIJCTB4MTBDCisjZGVmaW5lCUZTX0RFU0NS SVBUT1JfQkFTRV9BRERSCTB4MTE0CisKKworI2RlZmluZQlWTEFOX1ZJRF8wXzEJCTB4MDYwCisj ZGVmaW5lCVZMQU5fVklEXzJfMwkJMHgwNjQKKyNkZWZpbmUJVkxBTl9WSURfNF81CQkweDA2OAor I2RlZmluZQlWTEFOX1ZJRF82XzcJCTB4MDZDCisKKyNkZWZpbmUJVkxBTl9QT1JUX1BWSUQJCTB4 MDVDCisjZGVmaW5lCVZMQU5fTUVNQkVSX1BPUlRfTUFQCQkweDA3MAorI2RlZmluZQlWTEFOX1RB R19QT1JUX01BUAkJMHgwNzQKKworCisjZGVmaW5lCUFTSVhfR0lHQV9QSFkJCTEKKyNkZWZpbmUJ VFdPX1NJTkdMRV9QSFkJCTIKKyNkZWZpbmUJQUdFUkVfR0lHQV9QSFkJCTMKKyNkZWZpbmUJVlND ODYwMV9HSUdBX1BIWQk0CisjZGVmaW5lCUlDX1BMVVNfUEhZCQk1CisjZGVmaW5lCU5PVF9GT1VO RF9QSFkJCSgtMSkKKworI2RlZmluZQlNQVhfUEFDS0VUX0xFTgkJKDE1MzYpCisKKyNkZWZpbmUJ SU5WQUxJRF9FTlRSWQkJMAorI2RlZmluZQlORVdfRU5UUlkJCTB4MQorI2RlZmluZQlTVEFUSUNf RU5UUlkJCTB4NworCisvKm1hc2sgc3RhdHVzIGV4Y2VwdCBmb3IgbGluayBjaGFuZ2UqLworI2Rl ZmluZQlFUlJPUl9NQVNLCQkweEZGRkZGRjdGCisKKy8qaGFyZHdhcmUgaW50ZXJmYWNlIGZsYWdz Ki8KKworI2RlZmluZQlGQVNUX0FHSU5HCQkoMHhmKQorI2RlZmluZQlJVkxfTEVBUk5JTkcJCSgw eDEgPDwgMjIpCisvKmhhcmR3YXJlIE5BVCBhY2NlbGVyYXRvciovCisjZGVmaW5lCUhBUkRXQVJF X05BVAkJKDB4MSA8PCAyMykKKy8qYWdpbmcJCXRpbWUJCXNldHRpbmcqLworCisvKnNraXAgbG9v a3VwKi8KKyNkZWZpbmUJU0tJUF9MMl9MT09LVVBfUE9SVF8xCSgxIDw8IDI5KQorI2RlZmluZQlT S0lQX0wyX0xPT0tVUF9QT1JUXzAJKDEgPDwgMjgpCisKKyNkZWZpbmUJTklDX01PREUJCSgxIDw8 IDMwKQorI2RlZmluZQlQT1JUX0RJU0FCTEUJCSgxIDw8IDE4KQorI2RlZmluZQlTQV9MRUFSTklO R19ESVNBQkxFCQkoMSA8PCAxOSkKKyNkZWZpbmUJRElTQUJMRV9CUk9BRENBU1RfUEFDS0VUCSgx IDw8IDI3KQorI2RlZmluZQlESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQJKCAxIDw8IDI2KQorCisj ZW5kaWYKSW5kZXg6IGFybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt L2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9jZmlfYnVz X2Vjb25hLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qLQorICogQ29weXJpZ2h0 IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmln aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0 OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg QlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdB UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS QU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhP UiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BF Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU CisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP VVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZz Lmg+CitfX0ZCU0RJRCgiJEZyZWVCU0QkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNp bmNsdWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lz L2NvbmYuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5o PgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1 ZGUgPHN5cy9zeXNjdGwuaD4KKworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisKKyNpbmNsdWRl IDxkZXYvY2ZpL2NmaV92YXIuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4K KyNpbmNsdWRlIDxhcm0vZWNvbmEvZWNvbmFfdmFyLmg+CisKK3N0YXRpYyBpbnQKK2NmaV9lY29u YV9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJcmV0dXJuIGNmaV9wcm9iZShkZXYpOworfQorCitz dGF0aWMgZGV2aWNlX21ldGhvZF90IGNmaV9lY29uYV9tZXRob2RzW10gPSB7CisJLyogZGV2aWNl IGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCQljZmlfZWNvbmFfcHJvYmUp LAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAljZmlfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2 aWNlX2RldGFjaCwJY2ZpX2RldGFjaCksCisKKwl7MCwgMH0KK307CisKK3N0YXRpYyBkcml2ZXJf dCBjZmlfZWNvbmFfZHJpdmVyID0geworCWNmaV9kcml2ZXJfbmFtZSwKKwljZmlfZWNvbmFfbWV0 aG9kcywKKwlzaXplb2Yoc3RydWN0IGNmaV9zb2Z0YyksCit9OworRFJJVkVSX01PRFVMRShjZmks IGVjb25hYXJtLCBjZmlfZWNvbmFfZHJpdmVyLCBjZmlfZGV2Y2xhc3MsIDAsIDApOwpJbmRleDog YXJtL2Vjb25hL3RpbWVyLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3RpbWVyLmMJKHJldmlz aW9uIDApCisrKyBhcm0vZWNvbmEvdGltZXIuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNzIg QEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0Bn bWFpbC5jb20+LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMn JyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVND TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFC TEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklD RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ T04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9G IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ TElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f RkJTRElEKCIkRnJlZUJTRCAkIik7CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8 c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwu aD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2lu Y2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3RpbWV0Yy5oPgorI2luY2x1ZGUgPHN5 cy93YXRjaGRvZy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGlu ZS9jcHUuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2ZyYW1lLmg+CisjaW5jbHVkZSA8bWFjaGluZS9p bnRyLmg+CisKKyNpbmNsdWRlICJlY29uYV9yZWcuaCIKKyNpbmNsdWRlICJlY29uYV92YXIuaCIK KworI2RlZmluZQlJTklUSUFMX1RJTUVDT1VOVEVSCSgweGZmZmZmZmZmKQorCitzdGF0aWMgaW50 IHRpbWVyc19pbml0aWFsaXplZCA9IDA7CisKKyNkZWZpbmUJSFoJMTAwCisKK2V4dGVybiB1bnNp Z25lZCBpbnQgQ1BVX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGludCBBSEJfY2xvY2s7CitleHRl cm4gdW5zaWduZWQgaW50IEFQQl9jbG9jazsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdGltZXJf Y291bnRlciA9IDA7CisKK3N0cnVjdCBlY190aW1lcl9zb2Z0YyB7CisJc3RydWN0IHJlc291cmNl CSoJdGltZXJfcmVzWzNdOworCWJ1c19zcGFjZV90YWdfdAkJdGltZXJfYnN0OworCWJ1c19zcGFj ZV9oYW5kbGVfdAl0aW1lcl9ic2g7CisJc3RydWN0IG10eAkJdGltZXJfbXR4OworfTsKKworc3Rh dGljIHN0cnVjdCByZXNvdXJjZV9zcGVjIGVjX3RpbWVyX3NwZWNbXSA9IHsKKwl7IFNZU19SRVNf TUVNT1JZLAkwLAlSRl9BQ1RJVkUgfSwKKwl7IFNZU19SRVNfSVJRLAkJMCwJUkZfQUNUSVZFIH0s CisJeyBTWVNfUkVTX0lSUSwJCTEsCVJGX0FDVElWRSB9LAorCXsgLTEsIDAgfQorfTsKKworc3Rh dGljIHVuc2lnbmVkIGVjX3RpbWVyX2dldF90aW1lY291bnQoc3RydWN0IHRpbWVjb3VudGVyICop OworCitzdGF0aWMgc3RydWN0IHRpbWVjb3VudGVyIGVjX3RpbWVjb3VudGVyID0geworCS50Y19n ZXRfdGltZWNvdW50ID0gZWNfdGltZXJfZ2V0X3RpbWVjb3VudCwKKwkudGNfbmFtZSA9ICJDUFUg VGltZXIiLAorCS8qIFRoaXMgaXMgYXNzaWduZWQgb24gdGhlIGZseSBpbiB0aGUgaW5pdCBzZXF1 ZW5jZSAqLworCS50Y19mcmVxdWVuY3kgPSAwLAorCS50Y19jb3VudGVyX21hc2sgPSB+MHUsCisJ LnRjX3F1YWxpdHkgPSAxMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBlY190aW1lcl9zb2Z0YyAq dGltZXJfc29mdGMgPSBOVUxMOworCitzdGF0aWMgaW5saW5lCit2b2lkIFdSNCh1bnNpZ25lZCBp bnQgdmFsLCB1bnNpZ25lZCBpbnQgYWRkcikKK3sKKwlidXNfc3BhY2Vfd3JpdGVfNCh0aW1lcl9z b2Z0Yy0+dGltZXJfYnN0LAorCQkJICB0aW1lcl9zb2Z0Yy0+dGltZXJfYnNoLCBhZGRyLCB2YWwp OworCit9CisKK3N0YXRpYyBpbmxpbmUKK3Vuc2lnbmVkIGludCBSRDQodW5zaWduZWQgaW50IGFk ZHIpCit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFkXzQodGltZXJfc29mdGMtPnRpbWVyX2JzdCwK KwkgICAgdGltZXJfc29mdGMtPnRpbWVyX2JzaCwgYWRkcik7Cit9CisKKyNkZWZpbmUJdVNFQ1Nf UEVSX1RJQ0sJKDEwMDAwMDAgLyBBUEJfY2xvY2spCisjZGVmaW5lCVRJQ0tTMlVTRUNTKHgpCSgo eCkgKiB1U0VDU19QRVJfVElDSykKKworc3RhdGljIHVuc2lnbmVkCityZWFkX3RpbWVyX2NvdW50 ZXJfbm9pbnQodm9pZCkKK3sKKwlhcm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSBS RDQoVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4g djsKK30KKwordm9pZAorREVMQVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVt cDsKKwlpbnQgbnRpY2tzOworCisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7 IHVzZWMgPiAwOyB1c2VjLS0pCisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJ CQkJOworCQlyZXR1cm47CisJfQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7 CisJbnRpY2tzID0gKCgoQVBCX2Nsb2NrLzEwMDApICogdXNlYykgLyAxMDAwKSsxMDA7CisKKwl3 aGlsZSAobnRpY2tzID4gMCkgeworCQl2YWxfdGVtcCA9IHJlYWRfdGltZXJfY291bnRlcl9ub2lu dCgpOworCQlpZiAodmFsID4gdmFsX3RlbXApCisJCQludGlja3MgLT0gKHZhbCAtIHZhbF90ZW1w KTsKKwkJZWxzZQorCQkJbnRpY2tzIC09ICh2YWwgKyAodGltZXJfY291bnRlciAtIHZhbF90ZW1w KSk7CisKKwkJdmFsID0gdmFsX3RlbXA7CisJfQorCit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgor ICovCitzdGF0aWMgaW5saW5lIHZvaWQKK3NldHVwX3RpbWVyKHVuc2lnbmVkIGludCBjb3VudGVy X3ZhbHVlKQoreworCXVuc2lnbmVkIGludCBjb250cm9sX3ZhbHVlOworCXVuc2lnbmVkIGludCBt YXNrX3ZhbHVlOworCisJY29udHJvbF92YWx1ZSA9IFJENChUSU1FUl9UTV9DUl9SRUcpOworCisJ bWFza192YWx1ZSA9IFJENChUSU1FUl9UTV9JTlRSX01BU0tfUkVHKTsKKwlXUjQoY291bnRlcl92 YWx1ZSwgVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlXUjQoY291bnRlcl92YWx1ZSwgVElNRVJf VE0xX0xPQURfUkVHKTsKKwlXUjQoMCwgVElNRVJfVE0xX01BVENIMV9SRUcpOworCVdSNCgwLFRJ TUVSX1RNMV9NQVRDSDJfUkVHKTsKKworCWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjFfQ0xPQ0tf U09VUkNFKTsKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMV9VUF9ET1dOX0NPVU5UOworCisJV1I0 KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7CisJV1I0KDAsIFRJTUVSX1RNMl9MT0FEX1JFRyk7 CisJV1I0KH4wdSwgVElNRVJfVE0yX01BVENIMV9SRUcpOworCVdSNCh+MHUsVElNRVJfVE0yX01B VENIMl9SRUcpOworCisJY29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9DTE9DS19TT1VSQ0UpOwor CWNvbnRyb2xfdmFsdWUgJj0gfihUSU1FUjJfVVBfRE9XTl9DT1VOVCk7CisKKwltYXNrX3ZhbHVl ICY9IH4oNjMpOworCisJV1I0KGNvbnRyb2xfdmFsdWUsIFRJTUVSX1RNX0NSX1JFRyk7CisJV1I0 KG1hc2tfdmFsdWUsIFRJTUVSX1RNX0lOVFJfTUFTS19SRUcpOworfQorCisvKgorICogRW5hYmxl IHRpbWVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAordGltZXJfZW5hYmxlKHZvaWQpCit7CisJ dW5zaWduZWQgaW50IGNvbnRyb2xfdmFsdWU7CisKKwljb250cm9sX3ZhbHVlID0gUkQ0KFRJTUVS X1RNX0NSX1JFRyk7CisKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMV9PVkVSRkxPV19FTkFCTEU7 CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjFfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElN RVIyX09WRVJGTE9XX0VOQUJMRTsKKwljb250cm9sX3ZhbHVlIHw9IFRJTUVSMl9FTkFCTEU7CisK KwlXUjQoY29udHJvbF92YWx1ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKwlyZXR1 cm4gUkQ0KFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7Cit9CisKKy8qCisgKiBHZXQgdGltZXIgaW50 ZXJydXB0IHN0YXR1cworICovCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAorcmVhZF90aW1l cl9pbnRlcnJ1cHRfc3RhdHVzKHZvaWQpCit7CisJcmV0dXJuIFJENChUSU1FUl9UTV9JTlRSX1NU QVRVU19SRUcpOworfQorCisvKgorICogQ2xlYXIgdGltZXIgaW50ZXJydXB0IHN0YXR1cworICov CitzdGF0aWMgaW5saW5lIHZvaWQKK2NsZWFyX3RpbWVyX2ludGVycnVwdF9zdGF0dXModW5zaWdu ZWQgaW50IGlycSkKK3sKKwl1bnNpZ25lZCBpbnQgaW50ZXJydXB0X3N0YXR1czsKKworCWludGVy cnVwdF9zdGF0dXMgPSAgIFJENChUSU1FUl9UTV9JTlRSX1NUQVRVU19SRUcpOworCWlmIChpcnE9 PTApIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01BVENIMV9JTlRSKSkKKwkJ CWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIpOworCQlpZiAoaW50ZXJy dXB0X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1cyAm PSB+KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVS MV9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfT1ZFUkZM T1dfSU5UUik7CisJfQorCWlmIChpcnE9PTEpIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAo VElNRVIyX01BVENIMV9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjJfTUFU Q0gxX0lOVFIpOworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfTUFUQ0gyX0lOVFIp KQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9NQVRDSDJfSU5UUik7CisJCWlmIChp bnRlcnJ1cHRfc3RhdHVzICYgKFRJTUVSMl9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9z dGF0dXMgJj0gfihUSU1FUjJfT1ZFUkZMT1dfSU5UUik7CisJfQorCisJV1I0KGludGVycnVwdF9z dGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZAor ZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNvdW50ZXIgKmEpCit7CisJdW5zaWdu ZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJdGlja3MxID0gcmVhZF9zZWNvbmRf dGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEpOworCXJldHVybiB0aWNrczE7Cit9 CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK2RvX3NldHVw X3RpbWVyKHZvaWQpCit7CisJdGltZXJfY291bnRlciA9IEFQQl9jbG9jay9IWjsKKwkvKgorCSAq IHNldHVwIHRpbWVyLXJlbGF0ZWQgdmFsdWVzCisJICovCisJc2V0dXBfdGltZXIodGltZXJfY291 bnRlcik7Cit9CisKK3ZvaWQKK2NwdV9pbml0Y2xvY2tzKHZvaWQpCit7CisJZWNfdGltZWNvdW50 ZXIudGNfZnJlcXVlbmN5ID0gQVBCX2Nsb2NrOworCXRjX2luaXQoJmVjX3RpbWVjb3VudGVyKTsK Kwl0aW1lcl9lbmFibGUoKTsKKwl0aW1lcnNfaW5pdGlhbGl6ZWQgPSAxOworfQorCit2b2lkCitj cHVfc3RhcnRwcm9mY2xvY2sodm9pZCkKK3sKKworfQorCit2b2lkCitjcHVfc3RvcHByb2ZjbG9j ayh2b2lkKQoreworCit9CisKK3N0YXRpYyBpbnQKK2VjX3RpbWVyX3Byb2JlKGRldmljZV90IGRl dikKK3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRWNvbmEgQ1BVIFRpbWVyIik7CisJcmV0dXJu ICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVzZXQodm9pZCAqYXJnKQoreworCWFybV9tYXNr X2lycSgxKTsKKwljbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3RhdHVzKDEpOworCWFybV91bm1hc2tf aXJxKDEpOworCXJldHVybiAoRklMVEVSX0hBTkRMRUQpOworfQorCitzdGF0aWMgaW50CitlY19o YXJkY2xvY2sodm9pZCAqYXJnKQoreworCXN0cnVjdAl0cmFwZnJhbWUgKmZyYW1lOworCXVuc2ln bmVkIGludCB2YWw7CisJLypjbGVhciB0aW1lciBpbnRlcnJ1cHQgc3RhdHVzKi8KKworCWFybV9t YXNrX2lycSgwKTsKKworCXZhbCA9IFJENChUSU1FUl9JTlRFUlJVUFRfU1RBVFVTX1JFRyk7CisJ dmFsICY9IH4oVElNRVIxX09WRVJGTE9XX0lOVEVSUlVQVCk7CisJV1I0KHZhbCwgVElNRVJfSU5U RVJSVVBUX1NUQVRVU19SRUcpOworCisJZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsK KwloYXJkY2xvY2soVFJBUEZfVVNFUk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJ YXJtX3VubWFza19pcnEoMCk7CisKKwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworc3Rh dGljIGludAorZWNfdGltZXJfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlpbnQJZXJyb3I7CisJ dm9pZAkqaWhsOworCXN0cnVjdAllY190aW1lcl9zb2Z0YyAqc2M7CisKKwlpZiAodGltZXJfc29m dGMgIT0gTlVMTCkKKwkJcmV0dXJuIChFTlhJTyk7CisKKwlzYyA9IChzdHJ1Y3QgZWNfdGltZXJf c29mdGMgKilkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisKKwl0aW1lcl9zb2Z0YyA9IHNjOworCisJ ZXJyb3IgPSBidXNfYWxsb2NfcmVzb3VyY2VzKGRldiwgZWNfdGltZXJfc3BlYywgc2MtPnRpbWVy X3Jlcyk7CisJaWYgKGVycm9yKSB7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IGFs bG9jYXRlIHJlc291cmNlc1xuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXNjLT50aW1l cl9ic3QgPSBybWFuX2dldF9idXN0YWcoc2MtPnRpbWVyX3Jlc1swXSk7CisJc2MtPnRpbWVyX2Jz aCA9IHJtYW5fZ2V0X2J1c2hhbmRsZShzYy0+dGltZXJfcmVzWzBdKTsKKworCWRvX3NldHVwX3Rp bWVyKCk7CisKKwlpZiAoYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+dGltZXJfcmVzWzFdLCBJTlRS X1RZUEVfQ0xLLAorCSAgICBlY19oYXJkY2xvY2ssIE5VTEwsIE5VTEwsICZpaGwpICE9IDApIHsK KwkJYnVzX3JlbGVhc2VfcmVzb3VyY2VzKGRldiwgZWNfdGltZXJfc3BlYywgc2MtPnRpbWVyX3Jl cyk7CisJCWRldmljZV9wcmludGYoZGV2LCAiY291bGQgbm90IHNldHVwIGhhcmRjbG9jayBpbnRl cnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlpZiAoYnVzX3NldHVwX2ludHIo ZGV2LCBzYy0+dGltZXJfcmVzWzJdLCBJTlRSX1RZUEVfQ0xLLAorCSAgICBlY19yZXNldCwgTlVM TCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZXMoZGV2LCBlY190 aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBu b3Qgc2V0dXAgdGltZXIgaW50ZXJydXB0XG4iKTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJ cmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBlY190aW1lcl9tZXRob2Rz W10gPSB7CisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWNfdGltZXJfcHJvYmUpLAorCURFVk1F VEhPRChkZXZpY2VfYXR0YWNoLCBlY190aW1lcl9hdHRhY2gpLAorCXsgMCwgMCB9Cit9OworCitz dGF0aWMgZHJpdmVyX3QgZWNfdGltZXJfZHJpdmVyID0geworCSJ0aW1lciIsCisJZWNfdGltZXJf bWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjX3RpbWVyX3NvZnRjKSwKK307CisKK3N0YXRpYyBk ZXZjbGFzc190IGVjX3RpbWVyX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKHRpbWVyLCBlY29u YWFybSwgZWNfdGltZXJfZHJpdmVyLCBlY190aW1lcl9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBh cm0vZWNvbmEvZWNvbmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvZWNvbmEuYwkocmV2aXNp b24gMCkKKysrIGFybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0MiBA QAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdt YWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5 cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f RkJTRElEKCIkRnJlZUJTRCAkIik7CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRl IDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMvYnVzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNp bmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNpbmNsdWRlIDx2 bS92bS5oPgorI2luY2x1ZGUgPHZtL3ZtX2tlcm4uaD4KKyNpbmNsdWRlIDx2bS9wbWFwLmg+Cisj aW5jbHVkZSA8dm0vdm1fcGFnZS5oPgorI2luY2x1ZGUgPHZtL3ZtX2V4dGVybi5oPgorCisjZGVm aW5lCV9BUk0zMl9CVVNfRE1BX1BSSVZBVEUKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2lu Y2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKwor I2luY2x1ZGUgImVjb25hX3JlZy5oIgorI2luY2x1ZGUgImVjb25hX3Zhci5oIgorCitzdGF0aWMg c3RydWN0IGVjb25hX3NvZnRjICplY29uYV9zb2Z0YzsKKwordW5zaWduZWQgaW50IENQVV9jbG9j ayA9IDIwMDAwMDAwMDsKK3Vuc2lnbmVkIGludCBBSEJfY2xvY2s7Cit1bnNpZ25lZCBpbnQgQVBC X2Nsb2NrOworCitic19wcm90b3MoZ2VuZXJpYyk7Citic19wcm90b3MoZ2VuZXJpY19hcm12NCk7 CisKK3N0cnVjdCBidXNfc3BhY2UgZWNvbmFfYnNfdGFnID0geworCS8qIGNvb2tpZSAqLworCSh2 b2lkICopIDAsCisKKwkvKiBtYXBwaW5nL3VubWFwcGluZyAqLworCWdlbmVyaWNfYnNfbWFwLAor CWdlbmVyaWNfYnNfdW5tYXAsCisJZ2VuZXJpY19ic19zdWJyZWdpb24sCisKKwkvKiBhbGxvY2F0 aW9uL2RlYWxsb2NhdGlvbiAqLworCWdlbmVyaWNfYnNfYWxsb2MsCisJZ2VuZXJpY19ic19mcmVl LAorCisJLyogYmFycmllciAqLworCWdlbmVyaWNfYnNfYmFycmllciwKKworCS8qIHJlYWQgKHNp bmdsZSkgKi8KKwlnZW5lcmljX2JzX3JfMSwKKwlnZW5lcmljX2FybXY0X2JzX3JfMiwKKwlnZW5l cmljX2JzX3JfNCwKKwlOVUxMLAorCisJLyogcmVhZCBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNf cm1fMSwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJZ2VuZXJpY19ic19ybV80LAorCU5VTEws CisKKwkvKiByZWFkIHJlZ2lvbiAqLworCWdlbmVyaWNfYnNfcnJfMSwKKwlnZW5lcmljX2FybXY0 X2JzX3JyXzIsCisJZ2VuZXJpY19ic19ycl80LAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xl KSAqLworCWdlbmVyaWNfYnNfd18xLAorCWdlbmVyaWNfYXJtdjRfYnNfd18yLAorCWdlbmVyaWNf YnNfd180LAorCU5VTEwsCisKKwkvKiB3cml0ZSBtdWx0aXBsZSAqLworCWdlbmVyaWNfYnNfd21f MSwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJZ2VuZXJpY19ic193bV80LAorCU5VTEwsCisK KwkvKiB3cml0ZSByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJ Lyogc2V0IG11bHRpcGxlICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8q IHNldCByZWdpb24gKi8KKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogY29w eSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIChzaW5nbGUp IHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiByZWFkIG11 bHRpcGxlIHN0cmVhbSAqLworCU5VTEwsCisJZ2VuZXJpY19hcm12NF9ic19ybV8yLAorCU5VTEws CisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlO VUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSAoc2luZ2xlKSBzdHJlYW0gKi8KKwlOVUxMLAorCU5V TEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUgbXVsdGlwbGUgc3RyZWFtICovCisJTlVM TCwKKwlnZW5lcmljX2FybXY0X2JzX3dtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogd3JpdGUg cmVnaW9uIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwKK307CisKK2J1 c19zcGFjZV90YWdfdCBvYmlvX3RhZyA9ICZlY29uYV9ic190YWc7CisKK3N0YXRpYyBpbnQKK2Vj b25hX3Byb2JlKGRldmljZV90IGRldikKK3sKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAiRUNPTkEg ZGV2aWNlIGJ1cyIpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY29uYV9pZGVu dGlmeShkcml2ZXJfdCAqZHJ2LCBkZXZpY2VfdCBwYXJlbnQpCit7CisJQlVTX0FERF9DSElMRChw YXJlbnQsIDAsICJlY29uYWFybSIsIDApOworfQorCitzdHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoK K2J1c19kbWFfZ2V0X3JhbmdlKHZvaWQpCit7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQK K2J1c19kbWFfZ2V0X3JhbmdlX25iKHZvaWQpCit7CisJcmV0dXJuICgwKTsKK30KKworZXh0ZXJu IHZvaWQgaXJxX2VudHJ5KHZvaWQpOworCitzdGF0aWMgdm9pZAorZWNvbmFfYWRkX2NoaWxkKGRl dmljZV90IGRldiwgaW50IHByaW8sIGNvbnN0IGNoYXIgKm5hbWUsIGludCB1bml0LAorCQlidXNf YWRkcl90IGFkZHIsIGJ1c19zaXplX3Qgc2l6ZSwKKwkJaW50IGlycTAsIGludCBpcnExLAorCQlp bnQgaXJxMiwgaW50IGlycTMsIGludCBpcnE0KQoreworCWRldmljZV90IGtpZDsKKwlzdHJ1Y3Qg ZWNvbmFfaXZhciAqaXZhcjsKKworCWtpZCA9IGRldmljZV9hZGRfY2hpbGRfb3JkZXJlZChkZXYs IHByaW8sIG5hbWUsIHVuaXQpOworCWlmIChraWQgPT0gTlVMTCkgeworCSAgICBwcmludGYoIkNh bid0IGFkZCBjaGlsZCAlcyVkIG9yZGVyZWRcbiIsIG5hbWUsIHVuaXQpOworCSAgICByZXR1cm47 CisJfQorCWl2YXIgPSBtYWxsb2Moc2l6ZW9mKCppdmFyKSwgTV9ERVZCVUYsIE1fTk9XQUlUIHwg TV9aRVJPKTsKKwlpZiAoaXZhciA9PSBOVUxMKSB7CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2 LCBraWQpOworCQlyZXR1cm47CisJfQorCWRldmljZV9zZXRfaXZhcnMoa2lkLCBpdmFyKTsKKwly ZXNvdXJjZV9saXN0X2luaXQoJml2YXItPnJlc291cmNlcyk7CisJaWYgKGlycTAgIT0gLTEpCisJ CWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMCwgaXJxMCwgMSk7CisJaWYgKGly cTEgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAxLCBpcnExLCAx KTsKKwlpZiAoaXJxMiAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEs IDIsIGlycTIsIDEpOworCWlmIChpcnEzICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBT WVNfUkVTX0lSUSwgMywgaXJxMywgMSk7CisJaWYgKGlycTQgIT0gMCkKKwkJYnVzX3NldF9yZXNv dXJjZShraWQsIFNZU19SRVNfSVJRLCA0LCBpcnE0LCAxKTsKKworCWlmIChhZGRyICE9IDApCisJ CWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX01FTU9SWSwgMCwgYWRkciwgc2l6ZSk7CisK K30KKworc3RydWN0IGNwdV9kZXZzCit7CisJY29uc3QgY2hhciAqbmFtZTsKKwlpbnQgdW5pdDsK KwlidXNfYWRkcl90IG1lbV9iYXNlOworCWJ1c19zaXplX3QgbWVtX2xlbjsKKwlpbnQgaXJxMDsK KwlpbnQgaXJxMTsKKwlpbnQgaXJxMjsKKwlpbnQgaXJxMzsKKwlpbnQgaXJxNDsKK307CisKK3N0 cnVjdCBjcHVfZGV2cyBlY29uYXJtX2RldnNbXSA9Cit7CisJeworCQkiZWNvbmFfaWMiLCAwLAor CQlFQ09OQV9JT19CQVNFICsgRUNPTkFfUElDX0JBU0UsIEVDT05BX1BJQ19TSVpFLAorCQkwCisJ fSwKKwl7CisJCSJzeXN0ZW0iLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfU1lTVEVNX0JB U0UsIEVDT05BX1NZU1RFTV9TSVpFLAorCQkwCisJfSwKKwl7CisJCSJ1YXJ0IiwgMCwKKwkJRUNP TkFfSU9fQkFTRSArIEVDT05BX1VBUlRfQkFTRSwgRUNPTkFfVUFSVF9TSVpFLAorCQlFQ09OQV9J UlFfVUFSVAorCX0sCisJeworCQkidGltZXIiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFf VElNRVJfQkFTRSwgRUNPTkFfVElNRVJfU0laRSwKKwkJRUNPTkFfSVJRX1RJTUVSXzEsIEVDT05B X0lSUV9USU1FUl8yCisJfSwKKwl7CisJCSJvaGNpIiwgMCwKKwkJRUNPTkFfT0hDSV9WQkFTRSwg RUNPTkFfT0hDSV9TSVpFLAorCQlFQ09OQV9JUlFfT0hDSQorCQl9LAorCXsKKwkJImVoY2kiLCAw LAorCQlFQ09OQV9FSENJX1ZCQVNFLCBFQ09OQV9FSENJX1NJWkUsCisJCUVDT05BX0lSUV9FSENJ CisJfSwKKwl7CisJCSJjZmkiLCAwLAorCQlFQ09OQV9DRklfVkJBU0UsIEVDT05BX0NGSV9TSVpF LAorCQkwCisJfSwKKwl7CisJCSJlY2UiLCAwLAorCQlFQ09OQV9JT19CQVNFICsgRUNPTkFfTkVU X0JBU0UsIEVDT05BX05FVF9TSVpFLAorCQlFQ09OQV9JUlFfU1RBVFVTLAorCQlFQ09OQV9JUlFf VFNUQywgRUNPTkFfSVJRX0ZTUkMsCisJCUVDT05BX0lSUV9UU1FFLCBFQ09OQV9JUlFfRlNRRiwK Kwl9LAorCXsJMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9Cit9OworCitzdGF0aWMgdm9pZAor ZWNvbmFfY3B1X2FkZF9idWlsdGluX2NoaWxkcmVuKGRldmljZV90IGRldiwgc3RydWN0IGVjb25h X3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlzdHJ1Y3QgY3B1X2RldnMgKndhbGtlcjsKKworCWZv ciAoaSA9IDAsIHdhbGtlciA9IGVjb25hcm1fZGV2czsgd2Fsa2VyLT5uYW1lOyBpKyssIHdhbGtl cisrKSB7CisJCWVjb25hX2FkZF9jaGlsZChkZXYsIGksIHdhbGtlci0+bmFtZSwgd2Fsa2VyLT51 bml0LAorCQkJCXdhbGtlci0+bWVtX2Jhc2UsIHdhbGtlci0+bWVtX2xlbiwKKwkJCQl3YWxrZXIt PmlycTAsd2Fsa2VyLT5pcnExLCB3YWxrZXItPmlycTIsCisJCQkJd2Fsa2VyLT5pcnEzLCB3YWxr ZXItPmlycTQpOworCX0KKworfQorCitzdHJ1Y3QgaW50Y190cmlnZ2VyX3QgeworCWludCBtb2Rl OworCWludCBsZXZlbDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgaW50Y190cmlnZ2VyX3QgaW50Y190 cmlnZ2VyX3RhYmxlW10gPSB7CisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdF fSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJTlRDX0VER0Vf VFJJR0dFUiwgSU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19S SVNJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9X Tn0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZF TF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENf QUNUSVZFX0hJR0h9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05P V059LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xF VkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElO VENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9 LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059LAorCXtJTlRD X0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwg SU5UQ19GQUxMSU5HX0VER0V9LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VS X1VOS05PV059LAorCXtJTlRDX1RSSUdHRVJfVU5LTk9XTiwgSU5UQ19UUklHR0VSX1VOS05PV059 LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0hJR0h9LAorCXtJTlRDX0VER0Vf VFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJ U0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJ TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfTEVWRUxfVFJJR0dF UiwgSU5UQ19BQ1RJVkVfTE9XfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9M T1d9LAorfTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdAorUkQ0KHN0cnVjdCBlY29uYV9zb2Z0 YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHNjLT5l Y19zdCwgc2MtPmVjX3N5c19zaCwgb2ZmKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitXUjQo c3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYsIHVpbnQzMl90IHZhbCkKK3sK KwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzX3NoLCBvZmYs IHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDMyX3QKK1JENF9TWVNURU0oc3RydWN0IGVj b25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYpCit7CisJcmV0dXJuIGJ1c19zcGFjZV9yZWFk XzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0aWMgaW5saW5l IHZvaWQKK1dSNF9TWVNURU0oc3RydWN0IGVjb25hX3NvZnRjICpzYywgYnVzX3NpemVfdCBvZmYs IHVpbnQzMl90IHZhbCkKK3sKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRlXzQoc2MtPmVjX3N0LCBz Yy0+ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0aWMgaW5saW5lIHZvaWQK K2Vjb25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywgdW5zaWduZWQgaW50 IGlycSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKwor CWlmICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2RlICE9IElOVENfRURHRV9U UklHR0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JUkQ0KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklH R0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJTlRDX0xFVkVMX1RSSUdHRVIp IHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7 CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULCB2YWwp OworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEodmFsICYgKDFVTCA8PCBpcnEpKSkgeworCQkJdmFs IHw9ICgxVUwgPDwgaXJxKTsKKwkJCVdSNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9NT0RF X1JFR19PRkZTRVQsIHZhbCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmUgaW50ZXJy dXB0IHRyaWdnZXIgbGV2ZWwgdG8gYmUgQWN0aXZlIEhpZ2gvTG93CisgKiBvciBSaXNpbmcvRmFs bGluZyBFZGdlCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorZWNvbmFfc2V0X2lycV9sZXZlbChz dHJ1Y3QgZWNvbmFfc29mdGMgKiBzYywKKwkJICAgIHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVk IGludCBsZXZlbCkKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJaWYgKChsZXZlbCAhPSBJTlRD X0FDVElWRV9ISUdIKSAmJgorCSAgICAobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfTE9XKSAmJgorCSAg ICAobGV2ZWwgIT0gSU5UQ19SSVNJTkdfRURHRSkgJiYKKwkgICAgKGxldmVsICE9IElOVENfRkFM TElOR19FREdFKSkgeworCQlyZXR1cm47CisJfQorCisJdmFsID0gUkQ0KHNjLCBJTlRDX0lOVEVS UlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQpOworCisJaWYgKChsZXZlbCA9PSBJTlRDX0FD VElWRV9ISUdIKSB8fCAobGV2ZWwgPT0gSU5UQ19SSVNJTkdfRURHRSkpIHsKKwkJaWYgKHZhbCAm ICgxVUwgPDwgaXJxKSkgeworCQkJdmFsICY9IH4oMVVMIDw8IGlycSk7CisJCQlXUjQoc2MsIElO VENfSU5URVJSVVBUX1RSSUdHRVJfTEVWRUxfUkVHX09GRlNFVCwgdmFsKTsKKwkJfQorCX0gZWxz ZSB7CisJCWlmICghKHZhbCAmICgxVUwgPDwgaXJxKSkpIHsKKwkJCXZhbCB8PSAoMVVMIDw8IGly cSk7CisJCQlXUjQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTEVWRUxfUkVHX09GRlNFVCwg dmFsKTsKKwkJfQorCX0KK30KKworc3RhdGljIHZvaWQKK2dldF9zeXN0ZW1fY2xvY2sodm9pZCkK K3sKKwl1aW50MzJfdCBzY2xvY2sgPSBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBTWVNURU1fQ0xP Q0spOworCisJc2Nsb2NrID0gKHNjbG9jayA+PiA2KSAmIDB4MDM7CisKKwlzd2l0Y2ggKHNjbG9j aykgeworCWNhc2UgMDoKKwkJQ1BVX2Nsb2NrID0gMTc1MDAwMDAwOworCQlicmVhazsKKwljYXNl IDE6CisJCUNQVV9jbG9jayA9IDIwMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlDUFVf Y2xvY2sgPSAyMjUwMDAwMDA7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJQ1BVX2Nsb2NrID0gMjUw MDAwMDAwOworCQlicmVhazsKKwl9CisJQUhCX2Nsb2NrID0gQ1BVX2Nsb2NrID4+IDE7CisJQVBC X2Nsb2NrID0gQUhCX2Nsb2NrID4+IDE7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX2F0dGFjaChk ZXZpY2VfdCBkZXYpCit7CisJc3RydWN0IGVjb25hX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29m dGMoZGV2KTsKKwlpbnQgaTsKKworCWVjb25hX3NvZnRjID0gc2M7CisJc2MtPmVjX3N0ID0gJmVj b25hX2JzX3RhZzsKKwlzYy0+ZWNfc2ggPSBFQ09OQV9JT19CQVNFOworCXNjLT5kZXYgPSBkZXY7 CisJaWYgKGJ1c19zcGFjZV9zdWJyZWdpb24oc2MtPmVjX3N0LCBzYy0+ZWNfc2gsIEVDT05BX1BJ Q19CQVNFLAorCSAgICBFQ09OQV9QSUNfU0laRSwgJnNjLT5lY19zeXNfc2gpICE9IDApCisJCXBh bmljKCJVbmFibGUgdG8gbWFwIElSUSByZWdpc3RlcnMiKTsKKworCWlmIChidXNfc3BhY2Vfc3Vi cmVnaW9uKHNjLT5lY19zdCwgc2MtPmVjX3NoLCBFQ09OQV9TWVNURU1fQkFTRSwKKwkgICAgRUNP TkFfU1lTVEVNX1NJWkUsICZzYy0+ZWNfc3lzdGVtX3NoKSAhPSAwKQorCQlwYW5pYygiVW5hYmxl IHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlzYy0+ZWNfaXJxX3JtYW4ucm1fdHlwZSA9IFJN QU5fQVJSQVk7CisJc2MtPmVjX2lycV9ybWFuLnJtX2Rlc2NyID0gIkVDT05BIElSUXMiOworCXNj LT5lY19tZW1fcm1hbi5ybV90eXBlID0gUk1BTl9BUlJBWTsKKwlzYy0+ZWNfbWVtX3JtYW4ucm1f ZGVzY3IgPSAiRUNPTkEgTWVtb3J5IjsKKwlpZiAocm1hbl9pbml0KCZzYy0+ZWNfaXJxX3JtYW4p ICE9IDAgfHwKKwkgICAgcm1hbl9tYW5hZ2VfcmVnaW9uKCZzYy0+ZWNfaXJxX3JtYW4sIDAsIDMx KSAhPSAwKQorCQlwYW5pYygiZWNvbmFfYXR0YWNoOiBmYWlsZWQgdG8gc2V0IHVwIElSUSBybWFu Iik7CisJaWYgKHJtYW5faW5pdCgmc2MtPmVjX21lbV9ybWFuKSAhPSAwIHx8CisJICAgIHJtYW5f bWFuYWdlX3JlZ2lvbigmc2MtPmVjX21lbV9ybWFuLCAwLAorCSAgICB+MCkgIT0gMCkKKwkJcGFu aWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNldCB1cCBtZW1vcnkgcm1hbiIpOworCisJV1I0 KHNjLCBJTlRDX0lOVEVSUlVQVF9DTEVBUl9FREdFX1RSSUdHRVJfUkVHX09GRlNFVCwgMHhmZmZm ZmZmZik7CisKKwlXUjQoc2MsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgMHhmZmZm ZmZmZik7CisKKwlXUjQoc2MsIElOVENfRklRX01PREVfU0VMRUNUX1JFR19PRkZTRVQsIDApOwor CisJLyppbml0aWFsaXplIGlycSovCisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJaWYg KGludGNfdHJpZ2dlcl90YWJsZVtpXS5tb2RlICE9IElOVENfVFJJR0dFUl9VTktOT1dOKSB7CisJ CQllY29uYV9zZXRfaXJxX21vZGUoc2MsaSwgaW50Y190cmlnZ2VyX3RhYmxlW2ldLm1vZGUpOwor CQkJZWNvbmFfc2V0X2lycV9sZXZlbChzYywgaSwgaW50Y190cmlnZ2VyX3RhYmxlW2ldLmxldmVs KTsKKwkJfQorCX0KKworCWdldF9zeXN0ZW1fY2xvY2soKTsKKworCWVjb25hX2NwdV9hZGRfYnVp bHRpbl9jaGlsZHJlbihkZXYsIHNjKTsKKworCWJ1c19nZW5lcmljX3Byb2JlKGRldik7CisJYnVz X2dlbmVyaWNfYXR0YWNoKGRldik7CisJZW5hYmxlX2ludGVycnVwdHMoSTMyX2JpdCB8IEYzMl9i aXQpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIHN0cnVjdCByZXNvdXJjZSAqCitlY29u YV9hbGxvY19yZXNvdXJjZShkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBpbnQgdHlwZSwg aW50ICpyaWQsCisgICAgdV9sb25nIHN0YXJ0LCB1X2xvbmcgZW5kLCB1X2xvbmcgY291bnQsIHVf aW50IGZsYWdzKQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRj KGRldik7CisJc3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKwlzdHJ1Y3QgZWNvbmFf aXZhciAqaXZhciA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXN0cnVjdCByZXNvdXJjZV9s aXN0ICpybCA9ICZpdmFyLT5yZXNvdXJjZXM7CisKKwlpZiAoZGV2aWNlX2dldF9wYXJlbnQoY2hp bGQpICE9IGRldikKKwkJcmV0dXJuIChCVVNfQUxMT0NfUkVTT1VSQ0UoZGV2aWNlX2dldF9wYXJl bnQoZGV2KSwgY2hpbGQsCisJCQkgICB0eXBlLCByaWQsIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFn cykpOworCisJcmxlID0gcmVzb3VyY2VfbGlzdF9maW5kKHJsLCB0eXBlLCAqcmlkKTsKKwlpZiAo cmxlID09IE5VTEwpIHsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJaWYgKHJsZS0+cmVzKQorCQlw YW5pYygiUmVzb3VyY2UgcmlkICVkIHR5cGUgJWQgYWxyZWFkeSBpbiB1c2UiLCAqcmlkLCB0eXBl KTsKKwlpZiAoc3RhcnQgPT0gMFVMICYmIGVuZCA9PSB+MFVMKSB7CisJCXN0YXJ0ID0gcmxlLT5z dGFydDsKKwkJY291bnQgPSB1bG1heChjb3VudCwgcmxlLT5jb3VudCk7CisJCWVuZCA9IHVsbWF4 KHJsZS0+ZW5kLCBzdGFydCArIGNvdW50IC0gMSk7CisJfQorCXN3aXRjaCAodHlwZSkKKwl7CisJ Y2FzZSBTWVNfUkVTX0lSUToKKwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNj LT5lY19pcnFfcm1hbiwKKwkJICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOwor CQlicmVhazsKKwljYXNlIFNZU19SRVNfTUVNT1JZOgorCQlybGUtPnJlcyA9IHJtYW5fcmVzZXJ2 ZV9yZXNvdXJjZSgmc2MtPmVjX21lbV9ybWFuLAorCQkgICAgc3RhcnQsIGVuZCwgY291bnQsIGZs YWdzLCBjaGlsZCk7CisJCWlmIChybGUtPnJlcyAhPSBOVUxMKSB7CisJCQlybWFuX3NldF9idXN0 YWcocmxlLT5yZXMsICZlY29uYV9ic190YWcpOworCQkJcm1hbl9zZXRfYnVzaGFuZGxlKHJsZS0+ cmVzLCBzdGFydCk7CisJCX0KKwkJYnJlYWs7CisJfQorCWlmIChybGUtPnJlcykgeworCQlybGUt PnN0YXJ0ID0gcm1hbl9nZXRfc3RhcnQocmxlLT5yZXMpOworCQlybGUtPmVuZCA9IHJtYW5fZ2V0 X2VuZChybGUtPnJlcyk7CisJCXJsZS0+Y291bnQgPSBjb3VudDsKKwkJcm1hbl9zZXRfcmlkKHJs ZS0+cmVzLCAqcmlkKTsKKwl9CisJcmV0dXJuIChybGUtPnJlcyk7Cit9CisKK3N0YXRpYyBzdHJ1 Y3QgcmVzb3VyY2VfbGlzdCAqCitlY29uYV9nZXRfcmVzb3VyY2VfbGlzdChkZXZpY2VfdCBkZXYs IGRldmljZV90IGNoaWxkKQoreworCXN0cnVjdCBlY29uYV9pdmFyICppdmFyOworCWl2YXIgPSBk ZXZpY2VfZ2V0X2l2YXJzKGNoaWxkKTsKKwlyZXR1cm4gKCYoaXZhci0+cmVzb3VyY2VzKSk7Cit9 CisKK3N0YXRpYyBpbnQKK2Vjb25hX3JlbGVhc2VfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBkZXZp Y2VfdCBjaGlsZCwgaW50IHR5cGUsCisgICAgaW50IHJpZCwgc3RydWN0IHJlc291cmNlICpyKQor eworCXN0cnVjdCByZXNvdXJjZV9saXN0ICpybDsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdF9lbnRy eSAqcmxlOworCisJcmwgPSBlY29uYV9nZXRfcmVzb3VyY2VfbGlzdChkZXYsIGNoaWxkKTsKKwlp ZiAocmwgPT0gTlVMTCkKKwkJcmV0dXJuIChFSU5WQUwpOworCXJsZSA9IHJlc291cmNlX2xpc3Rf ZmluZChybCwgdHlwZSwgcmlkKTsKKwlpZiAocmxlID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM KTsKKwlybWFuX3JlbGVhc2VfcmVzb3VyY2Uocik7CisJcmxlLT5yZXMgPSBOVUxMOworCXJldHVy biAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3NldHVwX2ludHIoZGV2aWNlX3QgZGV2LCBk ZXZpY2VfdCBjaGlsZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKmlyZXMsIGludCBmbGFncywgZHJp dmVyX2ZpbHRlcl90ICpmaWx0LAorICAgIGRyaXZlcl9pbnRyX3QgKmludHIsIHZvaWQgKmFyZywg dm9pZCAqKmNvb2tpZXApCit7CisJaWYgKHJtYW5fZ2V0X3N0YXJ0KGlyZXMpID09IEVDT05BX0lS UV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlwYW5pYygiQWxsIHN5c3RlbSBpbnRlcnJ1cHQg SVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVTX1NFVFVQX0lOVFIoZGV2aWNlX2dldF9wYXJl bnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBmaWx0LAorCSAgICBpbnRyLCBhcmcsIGNvb2tp ZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9nZXRfc3RhcnQoaXJlcykpOworCisJcmV0dXJu ICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFfdGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYs IGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3VyY2UgKnJlcywKKyAgICB2b2lkICpjb29raWUp Cit7CisJcmV0dXJuIChCVVNfVEVBUkRPV05fSU5UUihkZXZpY2VfZ2V0X3BhcmVudChkZXYpLCBj aGlsZCwgcmVzLCBjb29raWUpKTsKK30KKworc3RhdGljIGludAorZWNvbmFfYWN0aXZhdGVfcmVz b3VyY2UoZGV2aWNlX3QgYnVzLCBkZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCByaWQsCisg ICAgc3RydWN0IHJlc291cmNlICpyKQoreworCXJldHVybiAocm1hbl9hY3RpdmF0ZV9yZXNvdXJj ZShyKSk7Cit9CisKK3N0YXRpYyBpbnQKK2Vjb25hX3ByaW50X2NoaWxkKGRldmljZV90IGRldiwg ZGV2aWNlX3QgY2hpbGQpCit7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXJzOworCXN0cnVjdCBy ZXNvdXJjZV9saXN0ICpybDsKKwlpbnQgcmV0dmFsID0gMDsKKworCWl2YXJzID0gZGV2aWNlX2dl dF9pdmFycyhjaGlsZCk7CisJcmwgPSAmaXZhcnMtPnJlc291cmNlczsKKworCXJldHZhbCArPSBi dXNfcHJpbnRfY2hpbGRfaGVhZGVyKGRldiwgY2hpbGQpOworCisJcmV0dmFsICs9IHJlc291cmNl X2xpc3RfcHJpbnRfdHlwZShybCwgInBvcnQiLCBTWVNfUkVTX0lPUE9SVCwgIiUjbHgiKTsKKwly ZXR2YWwgKz0gcmVzb3VyY2VfbGlzdF9wcmludF90eXBlKHJsLCAibWVtIiwgU1lTX1JFU19NRU1P UlksICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJpbnRfdHlwZShybCwgImly cSIsIFNZU19SRVNfSVJRLCAiJWxkIik7CisJaWYgKGRldmljZV9nZXRfZmxhZ3MoZGV2KSkKKwkJ cmV0dmFsICs9IHByaW50ZigiIGZsYWdzICUjeCIsIGRldmljZV9nZXRfZmxhZ3MoZGV2KSk7CisK KwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2Zvb3RlcihkZXYsIGNoaWxkKTsKKworCXJldHVy biAocmV0dmFsKTsKK30KKwordm9pZAorYXJtX21hc2tfaXJxKHVpbnRwdHJfdCBuYikKK3sKKwl1 bnNpZ25lZCBpbnQgdmFsdWU7CisKKwl2YWx1ZSA9IFJENChlY29uYV9zb2Z0YyxJTlRDX0lOVEVS UlVQVF9NQVNLX1JFR19PRkZTRVQpIHwgMTw8bmI7CisJV1I0KGVjb25hX3NvZnRjLCBJTlRDX0lO VEVSUlVQVF9NQVNLX1JFR19PRkZTRVQsIHZhbHVlKTsKK30KKwordm9pZAorYXJtX3VubWFza19p cnEodWludHB0cl90IG5iKQoreworCXVuc2lnbmVkIGludCB2YWx1ZTsKKworCXZhbHVlID0JUkQ0 KGVjb25hX3NvZnRjLAorCQkgICAgSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JF R19PRkZTRVQpIHwgKDEgPDwgbmIpOworCVdSNChlY29uYV9zb2Z0YywKKwkgICAgSU5UQ19JTlRF UlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQsIHZhbHVlKTsKKwl2YWx1ZSA9CVJE NChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSYgfigxIDw8IG5i KTsKKwlXUjQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFs dWUpOworfQorCitpbnQKK2FybV9nZXRfbmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKwor CWlycSA9IFJENChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQp ICYKKwkJfihSRDQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCkp OworCisJaWYgKGlycSE9MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJcmV0 dXJuICgtMSk7Cit9CisKK3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNvbnRy b2wgPSBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljb250cm9sIHw9 IEdMT0JBTF9SRVNFVDsKKwlXUjRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBj b250cm9sKTsKKwljb250cm9sID0gUkQ0X1NZU1RFTShlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJP TCk7CisJY29udHJvbCAmPSAofihHTE9CQUxfUkVTRVQpKTsKKwlXUjRfU1lTVEVNKGVjb25hX3Nv ZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9sKTsKKwl3aGlsZSAoMSk7Cit9CisKKworCit2b2lk Citwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFjZSh2b2lkKQoreworCXVpbnQzMl90IGNmZ19yZWc7 CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9D T05UUk9MKTsKKwljZmdfcmVnIHw9IE5FVF9JTlRFUkZBQ0VfUkVTRVQ7CisJLyogc2V0IHJlc2V0 IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8KKwlXUjRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9D T05UUk9MLCBjZmdfcmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0gMDsgaWkg PCAweEZGRjsgaWkrKykKKwkJREVMQVkoMTAwKTsKKwkvKiBzZXQgcmVzZXQgYml0IHRvIExPVyBh Y3RpdmU7ICovCisJY2ZnX3JlZyA9ICBSRDRfU1lTVEVNKGVjb25hX3NvZnRjLCBSRVNFVF9DT05U Uk9MKTsKKwljZmdfcmVnICY9IH4oTkVUX0lOVEVSRkFDRV9SRVNFVCk7CisJV1I0X1NZU1RFTShl Y29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisKKwkvKnB1bHNlIGRlbGF5ICov CisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURFTEFZKDEwMCk7CisJY2ZnX3Jl ZyA9IFJENF9TWVNURU0oZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wpOworCWNmZ19yZWcgfD0g TkVUX0lOVEVSRkFDRV9SRVNFVDsKKwkvKiBzZXQgcmVzZXQgYml0IHRvIEhJR0ggYWN0aXZlOyAq LworCVdSNF9TWVNURU0oZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQor Cit1bnNpZ25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisJcmV0dXJuIENQVV9jbG9jazsKK30K KworCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRI T0QoZGV2aWNlX3Byb2JlLCAgICAgICAgICAgIGVjb25hX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2 aWNlX2F0dGFjaCwgICAgICAgICAgIGVjb25hX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9p ZGVudGlmeSwgICAgICAgICBlY29uYV9pZGVudGlmeSksCisJREVWTUVUSE9EKGJ1c19hbGxvY19y ZXNvdXJjZSwgICAgICBlY29uYV9hbGxvY19yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19zZXR1 cF9pbnRyLCAgICAgICAgICBlY29uYV9zZXR1cF9pbnRyKSwKKwlERVZNRVRIT0QoYnVzX3RlYXJk b3duX2ludHIsICAgICAgIGVjb25hX3RlYXJkb3duX2ludHIpLAorCURFVk1FVEhPRChidXNfYWN0 aXZhdGVfcmVzb3VyY2UsICAgZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1FVEhPRChi dXNfZGVhY3RpdmF0ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNvdXJjZSks CisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwgICBlY29uYV9nZXRfcmVzb3VyY2Vf bGlzdCksCisJREVWTUVUSE9EKGJ1c19zZXRfcmVzb3VyY2UsCSAgIGJ1c19nZW5lcmljX3JsX3Nl dF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2UsCSAgIGJ1c19nZW5lcmlj X3JsX2dldF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAkgICBl Y29uYV9yZWxlYXNlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkgICBl Y29uYV9wcmludF9jaGlsZCksCisJezAsIDB9LAorfTsKKworc3RhdGljIGRyaXZlcl90IGVjb25h X2RyaXZlciA9IHsKKwkiZWNvbmFhcm0iLAorCWVjb25hX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVj dCBlY29uYV9zb2Z0YyksCit9Oworc3RhdGljIGRldmNsYXNzX3QgZWNvbmFfZGV2Y2xhc3M7CisK K0RSSVZFUl9NT0RVTEUoZWNvbmFhcm0sIG5leHVzLCBlY29uYV9kcml2ZXIsIGVjb25hX2RldmNs YXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9laGNpX2VidXMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh cm0vZWNvbmEvZWhjaV9lYnVzLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvZWhjaV9lYnVz LmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAwIEBACisvKi0KKyAqIENvcHlyaWdodCAoQykg MjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogYmFzZWQgb24gZWhj aV9tYnVzLmMKKyAqIENvcHlyaWdodCAoQykgMjAwOCBNQVJWRUxMIElOVEVSTkFUSU9OQUwgTFRE LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0 cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRo ZSBuYW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1h eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhp cyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRS SUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05U UklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5D TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P RFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT SU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwg T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO WSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKworI2luY2x1 ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSAib3B0 X2J1cy5oIgorCisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8c3lz L3N0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9zdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0u aD4KKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNs dWRlIDxzeXMvc3lzdG0uaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lz L2J1cy5oPgorI2luY2x1ZGUgPHN5cy9saW5rZXJfc2V0Lmg+CisjaW5jbHVkZSA8c3lzL21vZHVs ZS5oPgorI2luY2x1ZGUgPHN5cy9sb2NrLmg+CisjaW5jbHVkZSA8c3lzL211dGV4Lmg+CisjaW5j bHVkZSA8c3lzL2NvbmR2YXIuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8 c3lzL3N4Lmg+CisjaW5jbHVkZSA8c3lzL3VuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9jYWxsb3V0 Lmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9wcml2Lmg+CisKKyNp bmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRl IDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5j bHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vz cy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2Iv dXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRl IDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxl ci9laGNpcmVnLmg+CisKKworc3RhdGljIGRldmljZV9hdHRhY2hfdCBlaGNpX2VidXNfYXR0YWNo Oworc3RhdGljIGRldmljZV9kZXRhY2hfdCBlaGNpX2VidXNfZGV0YWNoOworc3RhdGljIGRldmlj ZV9zaHV0ZG93bl90IGVoY2lfZWJ1c19zaHV0ZG93bjsKK3N0YXRpYyBkZXZpY2Vfc3VzcGVuZF90 IGVoY2lfZWJ1c19zdXNwZW5kOworc3RhdGljIGRldmljZV9yZXN1bWVfdCBlaGNpX2VidXNfcmVz dW1lOworCisKK3N0YXRpYyB2b2lkICppaF9lcnI7CisKKyNkZWZpbmUJRUhDSV9IQ19ERVZTVFIg IkNOUzExWFggVVNCIEVIQ0kiCisjZGVmaW5lCVVTQl9CUklER0VfSU5UUl9NQVNLICAgMHgyMTQK Kworc3RhdGljIGludAorZWhjaV9lYnVzX3N1c3BlbmQoZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJy ID0gYnVzX2dlbmVyaWNfc3VzcGVuZChzZWxmKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gKGVycik7 CisJZWhjaV9zdXNwZW5kKHNjKTsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlaGNp X2VidXNfcmVzdW1lKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmlj ZV9nZXRfc29mdGMoc2VsZik7CisKKwllaGNpX3Jlc3VtZShzYyk7CisKKwlidXNfZ2VuZXJpY19y ZXN1bWUoc2VsZik7CisKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNf c2h1dGRvd24oZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dl dF9zb2Z0YyhzZWxmKTsKKwlpbnQgZXJyOworCisJZXJyID0gYnVzX2dlbmVyaWNfc2h1dGRvd24o c2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVoY2lfc2h1dGRvd24oc2MpOwor CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3Byb2JlKGRldmljZV90 IHNlbGYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2Moc2VsZiwgRUhDSV9IQ19ERVZTVFIpOworCisJ cmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19h dHRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9z b2Z0YyhzZWxmKTsKKwlidXNfc3BhY2VfaGFuZGxlX3QgYnNoOworCWludCBlcnI7CisJaW50IHJp ZDsKKworCS8qIGluaXRpYWxpc2Ugc29tZSBidXMgZmllbGRzICovCisJc2MtPnNjX2J1cy5wYXJl bnQgPSBzZWxmOworCXNjLT5zY19idXMuZGV2aWNlcyA9IHNjLT5zY19kZXZpY2VzOworCXNjLT5z Y19idXMuZGV2aWNlc19tYXggPSBFSENJX01BWF9ERVZJQ0VTOworCisJLyogZ2V0IGFsbCBETUEg bWVtb3J5ICovCisJaWYgKHVzYl9idXNfbWVtX2FsbG9jX2FsbCgmc2MtPnNjX2J1cywKKwkgICAg VVNCX0dFVF9ETUFfVEFHKHNlbGYpLCAmZWhjaV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1 cm4gKEVOT01FTSk7CisJfQorCisJc2MtPnNjX2J1cy51c2JyZXYgPSBVU0JfUkVWXzJfMDsKKwor CXJpZCA9IDA7CisJc2MtPnNjX2lvX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoc2VsZiwg U1lTX1JFU19NRU1PUlksCisJCQkJCSAgICAgICAmcmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2Mt PnNjX2lvX3JlcykgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9y eVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCXNjLT5zY19pb190YWcgPSBybWFuX2dldF9idXN0 YWcoc2MtPnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19y ZXMpOworCisJLyptYWdpYywgdW5kb2N1bWVudGVkIGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3Bh Y2Vfd3JpdGVfNCgoc2MpLT5zY19pb190YWcsIGJzaCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3Nw YWNlX3dyaXRlXzQoKHNjKS0+c2NfaW9fdGFnLCBic2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7 CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19pb19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVz X3NwYWNlX3N1YnJlZ2lvbihzYy0+c2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2Mt PnNjX2lvX3NpemUsICZzYy0+c2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0 byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShz ZWxmKSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNl X2FueShzZWxmLCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNU SVZFKTsKKwlpZiAoc2MtPnNjX2lycV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNl bGYsICJDb3VsZCBub3QgYWxsb2NhdGUgaXJxXG4iKTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxm KTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2Fk ZF9jaGlsZChzZWxmLCAidXNidXMiLCAtMSk7CisJaWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJ ZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290 byBlcnJvcjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2Nf YnVzKTsKKwlkZXZpY2Vfc2V0X2Rlc2Moc2MtPnNjX2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7 CisKKwlzcHJpbnRmKHNjLT5zY192ZW5kb3IsICJDYXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1 cF9pbnRyKHNlbGYsc2MtPnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9CSU8gfCBJTlRS X01QU0FGRSwgTlVMTCwKKwkJCSAgICAgKGRyaXZlcl9pbnRyX3QgKillaGNpX2ludGVycnVwdCwg c2MsCisJCQkgICAgICZzYy0+c2NfaW50cl9oZGwpOworCWlmIChlcnIpIHsKKwkJZGV2aWNlX3By aW50ZihzZWxmLCAiQ291bGQgbm90IHNldHVwIGVycm9yIGlycSwgJWRcbiIsIGVycik7CisJCWlo X2VyciA9IE5VTEw7CisJCWdvdG8gZXJyb3I7CisJfQorCisJZXJyID0gZWhjaV9pbml0KHNjKTsK KwlpZiAoIWVycikgeworCQllcnIgPSBkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChzYy0+c2NfYnVz LmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIlVTQiBpbml0 IGZhaWxlZCBlcnI9JWRcbiIsIGVycik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7 CisKK2Vycm9yOgorCWVoY2lfZWJ1c19kZXRhY2goc2VsZik7CisJcmV0dXJuIChFTlhJTyk7Cit9 CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19kZXRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNp X3NvZnRjX3QgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhzZWxmKTsKKwlkZXZpY2VfdCBiZGV2Owor CWludCBlcnI7CisKKwlpZiAoc2MtPnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2NfYnVz LmJkZXY7CisJCWRldmljZV9kZXRhY2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoc2Vs ZiwgYmRldik7CisJfQorCS8qIGR1cmluZyBtb2R1bGUgdW5sb2FkIHRoZXJlIGFyZSBsb3RzIG9m IGNoaWxkcmVuIGxlZnRvdmVyICovCisJZGV2aWNlX2RlbGV0ZV9hbGxfY2hpbGRyZW4oc2VsZik7 CisKKwkvKgorCSAqIGRpc2FibGUgaW50ZXJydXB0cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBzd2l0 Y2hlZCBvbiBpbiBlaGNpX2luaXQKKwkgKi8KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlFV1JJ VEU0KHNjLCBFSENJX1VTQklOVFIsIDApOworCQlFV1JJVEU0KHNjLCBVU0JfQlJJREdFX0lOVFJf TUFTSywgMCk7CisJfQorCWlmIChzYy0+c2NfaXJxX3JlcyAmJiBzYy0+c2NfaW50cl9oZGwpIHsK KwkJLyoKKwkJICogb25seSBjYWxsIGVoY2lfZGV0YWNoKCkgYWZ0ZXIgZWhjaV9pbml0KCkKKwkJ ICovCisJCWVoY2lfZGV0YWNoKHNjKTsKKworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihzZWxm LCBzYy0+c2NfaXJxX3Jlcywgc2MtPnNjX2ludHJfaGRsKTsKKworCQlpZiAoZXJyKQorCQkJLyog WFhYIG9yIHNob3VsZCB3ZSBwYW5pYz8gKi8KKwkJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxk IG5vdCB0ZWFyIGRvd24gaXJxLCAlZFxuIiwKKwkJCSAgICBlcnIpOworCQlzYy0+c2NfaW50cl9o ZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lycV9yZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVz b3VyY2Uoc2VsZiwgU1lTX1JFU19JUlEsIDEsIHNjLT5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX2ly cV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlidXNfcmVsZWFzZV9y ZXNvdXJjZShzZWxmLCBTWVNfUkVTX01FTU9SWSwgMCwKKwkJICAgIHNjLT5zY19pb19yZXMpOwor CQlzYy0+c2NfaW9fcmVzID0gTlVMTDsKKwl9CisJdXNiX2J1c19tZW1fZnJlZV9hbGwoJnNjLT5z Y19idXMsICZlaGNpX2l0ZXJhdGVfaHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3Rh dGljIGRldmljZV9tZXRob2RfdCBlaGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJm YWNlICovCisJREVWTUVUSE9EKGRldmljZV9wcm9iZSwgZWhjaV9lYnVzX3Byb2JlKSwKKwlERVZN RVRIT0QoZGV2aWNlX2F0dGFjaCwgZWhjaV9lYnVzX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmlj ZV9kZXRhY2gsIGVoY2lfZWJ1c19kZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwg ZWhjaV9lYnVzX3N1c3BlbmQpLAorCURFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCBlaGNpX2VidXNf cmVzdW1lKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBlaGNpX2VidXNfc2h1dGRvd24p LAorCisJLyogQnVzIGludGVyZmFjZSAqLworCURFVk1FVEhPRChidXNfcHJpbnRfY2hpbGQsIGJ1 c19nZW5lcmljX3ByaW50X2NoaWxkKSwKKworCXswLCAwfQorfTsKKworc3RhdGljIGRyaXZlcl90 IGVoY2lfZHJpdmVyID0geworCSJlaGNpIiwKKwllaGNpX21ldGhvZHMsCisJc2l6ZW9mKGVoY2lf c29mdGNfdCksCit9OworCitzdGF0aWMgZGV2Y2xhc3NfdCBlaGNpX2RldmNsYXNzOworCitEUklW RVJfTU9EVUxFKGVoY2ksIGVjb25hYXJtLCBlaGNpX2RyaXZlciwgZWhjaV9kZXZjbGFzcywgMCwg MCk7CitNT0RVTEVfREVQRU5EKGVoY2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBhcm0vZWNvbmEv ZWNvbmFfcmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lv biAwKQorKysgYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3 OCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElT JycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElT Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElB QkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJ Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU SU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBP RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC SUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmCV9BUk1fRUNPTkFfUkVHX0gK KyNkZWZpbmUJX0FSTV9FQ09OQV9SRUdfSAorCisjZGVmaW5lCUVDT05BX1NSQU1fU0laRQkweDEw MDAwMDAwCisjZGVmaW5lCUVDT05BX0RSQU1fQkFTRQkweDAwMDAwMDAwIC8qIERSQU0gKHZpYSBE RFIgQ29udHJvbCBNb2R1bGUpICovCisKKyNkZWZpbmUJRUNPTkFfU0RSQU1fQkFTRQkweDQwMDAw MDAwCisjZGVmaW5lCUVDT05BX1NEUkFNX1NJWkUJMHgxMDAwMDAwCisKKworI2RlZmluZQlFQ09O QV9JT19CQVNFCQkweDcwMDAwMDAwCisjZGVmaW5lCUVDT05BX0lPX1NJWkUJCTB4MEUwMDAwMDAK KyNkZWZpbmUJRUNPTkFfUElDX0JBU0UJCTB4MEQwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX1NJ WkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09OQV9VQVJUX0JBU0UJMHgwODAwMDAwMAorI2Rl ZmluZQlFQ09OQV9VQVJUX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVUFSVAkJ MHhBCisKKyNkZWZpbmUJRUNPTkFfVElNRVJfQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lCUVDT05B X1RJTUVSX1NJWkUJMHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVElNRVJfMQkwCisjZGVm aW5lCUVDT05BX0lSUV9USU1FUl8yCTEKKyNkZWZpbmUJRUNPTkFfSVJRX09IQ0kJCTIzCisjZGVm aW5lCUVDT05BX0lSUV9FSENJCQkyNAorCisjZGVmaW5lCUVDT05BX05FVF9CQVNFCQkweDAwMDAw MDAwCisKKyNkZWZpbmUJRUNPTkFfU1lTVEVNX0JBU0UJMHgwNzAwMDAwMAorI2RlZmluZQlFQ09O QV9TWVNURU1fU0laRQkweDAxMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfTkVUX1NJWkUJCTB4MDEw MDAwMDAKKworI2RlZmluZQlFQ09OQV9DRklfUEJBU0UJMHgxMDAwMDAwMAorI2RlZmluZQlFQ09O QV9DRklfVkJBU0UJMHhEMDAwMDAwMAorI2RlZmluZQlFQ09OQV9DRklfU0laRQkJMHgxMDAwMDAw MAorCisjZGVmaW5lCUVDT05BX0lSUV9TVEFUVVMJMTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMJ CTE5CisjZGVmaW5lCUVDT05BX0lSUV9GU1JDCQkyMAorI2RlZmluZQlFQ09OQV9JUlFfVFNRRQkJ MjEKKyNkZWZpbmUJRUNPTkFfSVJRX0ZTUUYJCTIyCisKKyNkZWZpbmUJRUNPTkFfSVJRX1NZU1RF TQkwCisKKyNkZWZpbmUJRUNPTkFfRUhDSV9QQkFTRQkweEM4MDAwMDAwCisjZGVmaW5lCUVDT05B X0VIQ0lfVkJBU0UJMHhGODAwMDAwMAorI2RlZmluZQlFQ09OQV9FSENJX1NJWkUJMHg4MDAwMDAw CisKKyNkZWZpbmUJRUNPTkFfT0hDSV9QQkFTRQkweEMwMDAwMDAwCisjZGVmaW5lCUVDT05BX09I Q0lfVkJBU0UJMHhGMDAwMDAwMAorI2RlZmluZQlFQ09OQV9PSENJX1NJWkUJMHg4MDAwMDAwCisK KyNkZWZpbmUJRUNPTkFfVVNCX1NJWkUJCTB4ZjAwMDAwMAorCisvKkludGVycnVwdCBjb250cm9s bGVyKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCTAKKyNkZWZpbmUJSU5UQ19FREdFX1RS SUdHRVIJMQorI2RlZmluZQlJTlRDX0FDVElWRV9ISUdICTAKKyNkZWZpbmUJSU5UQ19BQ1RJVkVf TE9XCTEKKy8qCisgKiBkZWZpbmUgcmlzaW5nL2ZhbGxpbmcgZWRnZSBmb3IgZWRnZSB0cmlnZ2Vy IG1vZGUKKyAqLworI2RlZmluZQlJTlRDX1JJU0lOR19FREdFCTAKKyNkZWZpbmUJSU5UQ19GQUxM SU5HX0VER0UJMQorCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX1NPVVJDRV9SRUdfT0ZGU0VUCQkw eDAwCisjZGVmaW5lCUlOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVAkJCTB4MDQKKyNkZWZp bmUJSU5UQ19JTlRFUlJVUFRfQ0xFQVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQJMHgwOAorI2Rl ZmluZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVAkJMHgwQworI2RlZmlu ZQlJTlRDX0lOVEVSUlVQVF9UUklHR0VSX0xFVkVMX1JFR19PRkZTRVQJMHgxMAorI2RlZmluZQlJ TlRDX0lOVEVSUlVQVF9TVEFUVVNfUkVHX09GRlNFVAkJMHgxNAorI2RlZmluZQlJTlRDX0ZJUV9N T0RFX1NFTEVDVF9SRUdfT0ZGU0VUCQkweDE4CisjZGVmaW5lCUlOVENfU09GVFdBUkVfSU5URVJS VVBUX1JFR19PRkZTRVQJCTB4MUMKKworCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxsaW5nIGVk Z2UgZm9yIGVkZ2UgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19SSVNJTkdfRURHRQkw CisjZGVmaW5lCUlOVENfRkFMTElOR19FREdFCTEKKworCisjZGVmaW5lCVRJTUVSX1RNMV9DT1VO VEVSX1JFRwkJMHgwMAorI2RlZmluZQlUSU1FUl9UTTFfTE9BRF9SRUcJCTB4MDQKKyNkZWZpbmUJ VElNRVJfVE0xX01BVENIMV9SRUcJCTB4MDgKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMl9SRUcJ CTB4MEMKKworI2RlZmluZQlUSU1FUl9UTTJfQ09VTlRFUl9SRUcJCTB4MTAKKyNkZWZpbmUJVElN RVJfVE0yX0xPQURfUkVHCQkweDE0CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDFfUkVHCQkweDE4 CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDJfUkVHCQkweDFDCisKKyNkZWZpbmUJVElNRVJfVE1f Q1JfUkVHCQkweDMwCisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRwkweDM0CisjZGVm aW5lCVRJTUVSX1RNX0lOVFJfTUFTS19SRUcJCTB4MzgKKworI2RlZmluZQlUSU1FUl9UTV9SRVZJ U0lPTl9SRUcJCTB4M0MKKworCisjZGVmaW5lCUlOVENfVElNRVIxX0JJVF9JTkRFWAkJMAorCisj ZGVmaW5lCVRJTUVSMV9VUF9ET1dOX0NPVU5UCQkoMTw8OSkKKyNkZWZpbmUJVElNRVIyX1VQX0RP V05fQ09VTlQJCSgxPDwxMCkKKworI2RlZmluZQlUSU1FUjFfTUFUQ0gxX0lOVFIJCSgxPDwwKQor I2RlZmluZQlUSU1FUjFfTUFUQ0gyX0lOVFIJCSgxPDwxKQorI2RlZmluZQlUSU1FUjFfT1ZFUkZM T1dfSU5UUgkJKDE8PDIpCisKKworI2RlZmluZQlUSU1FUjJfTUFUQ0gxX0lOVFIJCSgxPDwzKQor I2RlZmluZQlUSU1FUjJfTUFUQ0gyX0lOVFIJCSgxPDw0KQorI2RlZmluZQlUSU1FUjJfT1ZFUkZM T1dfSU5UUgkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl9DTE9DS19TT1VSQ0VfUENMSwkwCisj ZGVmaW5lCVRJTUVSX0NMT0NLX1NPVVJDRV9FWFRfQ0xLCTEKKworLyoKKyAqIGRlZmluZSBpbnRl cnJ1cHQgdHJpZ2dlciBtb2RlCisgKi8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCQkwCisj ZGVmaW5lCUlOVENfRURHRV9UUklHR0VSCQkxCisKKworI2RlZmluZQlJTlRDX1RSSUdHRVJfVU5L Tk9XTiAtMQorCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDIpCisjZGVm aW5lCVRJTUVSMl9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDUpCisjZGVmaW5lCVRJTUVSX0lOVEVS UlVQVF9TVEFUVVNfUkVHCTB4MzQKKworCisjZGVmaW5lCVRJTUVSMV9FTkFCTEUJCQkoMTw8MCkK KyNkZWZpbmUJVElNRVIxX0NMT0NLX1NPVVJDRQkJKDE8PDEpCisjZGVmaW5lCVRJTUVSMV9PVkVS RkxPV19FTkFCTEUJCSgxPDwyKQorCisKKyNkZWZpbmUJVElNRVIyX0VOQUJMRQkJCSgxPDwzKQor I2RlZmluZQlUSU1FUjJfQ0xPQ0tfU09VUkNFCQkoMTw8NCkKKyNkZWZpbmUJVElNRVIyX09WRVJG TE9XX0VOQUJMRQkJKDE8PDUpCisKKworI2RlZmluZQlUSU1FUl8xCQkJMQorCisjZGVmaW5lCUVD X1VBUlRfQ0xPQ0sJCQkxNDc2OTIwMAorI2RlZmluZQlFQ19VQVJUX1JFR1NISUZUCQkyCisKKyNk ZWZpbmUJU1lTVEVNX0NMT0NLCQkJMHgxNAorI2RlZmluZQlSRVNFVF9DT05UUk9MCQkJMHg0Cisj ZGVmaW5lCUdMT0JBTF9SRVNFVAkJCTB4MQorI2RlZmluZQlORVRfSU5URVJGQUNFX1JFU0VUCQko MHgxIDw8IDQpCisKKyNlbmRpZgpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXZhci5oCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KLS0tIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9p Zl9lY2V2YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOTEgQEAKKy8qLQorICogQ29weXJp Z2h0IChjKSAyMDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwg cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB TUFHRS4KKyAqLworCisjaWZuZGVmCV9JRkVDRVZBUl9ICisjZGVmaW5lCV9JRkVDRVZBUl9ICisK KyNkZWZpbmUJRUNFX01BWF9UWF9CVUZGRVJTCTEyOAorI2RlZmluZQlFQ0VfTUFYX1JYX0JVRkZF UlMJMTI4CisjZGVmaW5lCU1BWF9GUkFHTUVOVAkJMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8q IDFzdCAzMkJpdHMgKi8KKwl1aW50MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJ dWludDMyX3QJCWxlbmd0aDoxNjsKKworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0g b2ZmbG9hZCovCisJdWludDMyX3QJCXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1 aW50MzJfdAkJaWNvOjE7IC8qaXAgY2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVf cG9ydF9tYXAqLworCXVpbnQzMl90CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50 MzJfdAkJZnI6MTsKKwkvKiBmb3JjZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6 MzsKKwkvKiBmb3JjZV9wcmlvcml0eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0 X2JpdCovCisJdWludDMyX3QJCWludGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90 CQlsczoxOworCS8qZmlyc3Rfc2VnKi8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICov CisJdWludDMyX3QJCWVvcjoxOworCS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkv KiAzcmQgMzJCaXRzKi8KKwkvKnZpZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5z ZXJ0X3ZpZF90YWcqLworCXVpbnQzMl90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4 Ki8KKwl1aW50MzJfdAkJc2lkOjM7CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMy X3QJCWluc3M6MTsKKwl1aW50MzJfdAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVp bnQzMl90CQl1bnVzZWQyOworCit9IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0ewor CXVpbnQzMl90CQlkYXRhX3B0cjsKKwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQls NGY6MTsKKwl1aW50MzJfdAkJaXBmOjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJ aHI6NjsKKwl1aW50MzJfdAkJc3A6MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6 MTsKKwl1aW50MzJfdAkJZW9yOjE7CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51 c2VkOworCXVpbnQzMl90CQl1bnVzZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCBy eF9kZXNjX2luZm8geworCXN0cnVjdCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsK KwlldGhfcnhfZGVzY190ICpkZXNjOworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3Ry dWN0IG1idWYqYnVmZjsKKwlidXNfZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRl c2M7Cit9OworCisKK3N0cnVjdCBlY2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8q IGlmbmV0IHBvaW50ZXIgKi8KKwlzdHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAq LworCXN0cnVjdCBtdHggc2NfbXR4X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNj X210eF9yeDsJCS8qIHJ4IG11dGV4ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyog cnggbXV0ZXggKi8KKworCWJ1c19kbWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1 cyBETUEgdGFnICovCisKKwlkZXZpY2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3Qg bWlpYnVzOwkJLyogTXkgY2hpbGQgbWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50 ZXJydXB0IGhhbmRsZSAqLworCXZvaWQgKmludHJoYW5kX3FmOwkJLyogcXVldWUgZnVsbCAqLwor CXZvaWQgKmludHJoYW5kX3R4OwkJLyogdHggY29tcGxldGUgKi8KKwl2b2lkICppbnRyaGFuZF9z dGF0dXM7CQkvKiBlcnJvciBzdGF0dXMgKi8KKworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190 eDsJLyogdHJhbnNtaXQgKi8KKwlzdHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNl aXZlICovCisJc3RydWN0IHJlc291cmNlICppcnFfcmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJ c3RydWN0IHJlc291cmNlICppcnFfcmVzX3N0YXR1czsgLyogc3RhdHVzICovCisKKwlzdHJ1Y3Qg cmVzb3VyY2UJKm1lbV9yZXM7CS8qIE1lbW9yeSByZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxv dXQgdGlja19jaDsJCS8qIFRpY2sgY2FsbG91dCAqLworCisJc3RydWN0IHRhc2txdWV1ZSAqc2Nf dHE7CisJc3RydWN0IHRhc2sJc2NfaW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBf dGFzazsKKwlzdHJ1Y3QgdGFzawlzY190eF90YXNrOworCisJYnVzX2RtYW1hcF90CWRtYW1hcF9y aW5nX3R4OworCWJ1c19kbWFtYXBfdAlkbWFtYXBfcmluZ19yeDsKKwlidXNfZG1hbWFwX3QJcnhf c3BhcmVtYXA7CisKKwkvKmRtYSB0YWcgZm9yIHJpbmcqLworCWJ1c19kbWFfdGFnX3QJZG1hdGFn X3JpbmdfdHg7CisJYnVzX2RtYV90YWdfdAlkbWF0YWdfcmluZ19yeDsKKworCS8qZG1hIHRhZyBm b3IgZGF0YSovCisJYnVzX2RtYV90YWdfdAlkbWF0YWdfZGF0YV90eDsKKwlidXNfZG1hX3RhZ190 CWRtYXRhZ19kYXRhX3J4OworCisJLyp0aGUgcmluZyovCisJZXRoX3R4X2Rlc2NfdCoJZGVzY190 eDsKKwlldGhfcnhfZGVzY190KglkZXNjX3J4OworCisJLypyaW5nIHBoeXNpY2FsIGFkZHJlc3Mq LworCWJ1c19hZGRyX3QJcmluZ19wYWRkcl90eDsKKwlidXNfYWRkcl90CXJpbmdfcGFkZHJfcng7 CisKKwkvKmluZGV4IG9mIGxhc3QgcmVjZWl2ZWQgZGVzY3JpcHRvciovCisJdWludDMyX3QgbGFz dF9yeDsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvIHJ4X2Rlc2NbRUNFX01BWF9SWF9CVUZGRVJTXTsK KworCS8qIHR4IHByb2R1Y2VyIGluZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBj b25zdW1lciBpbmRleCAqLworCXVpbnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCov CisJdWludDMyX3QgZGVzY19jdXJyX3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNj W0VDRV9NQVhfVFhfQlVGRkVSU107Cit9OworCisKK3N0cnVjdCBhcmxfdGFibGVfZW50cnlfdCB7 CisJdWludDMyX3QgY21kX2NvbXBsZXRlOiAxOworCXVpbnQzMl90IHRhYmxlX2VuZDogMTsKKwl1 aW50MzJfdCBzZWFyY2hfbWF0Y2g6IDE7CisJdWludDMyX3QgZmlsdGVyOjE7IC8qaWYgc2V0LCBw YWNrZXQgd2lsbCBiZSBkcm9wcGVkICovCisJdWludDMyX3Qgdmxhbl9tYWM6MTsgLyppbmRpY2F0 ZXMgdGhhdCB0aGlzIGlzIHRoZSBnYXRld2F5IG1hYyBhZGRyZXNzKi8KKwl1aW50MzJfdCB2bGFu X2dpZDozOyAvKnZsYW4gaWQqLworCXVpbnQzMl90IGFnZV9maWVsZDozOworCXVpbnQzMl90IHBv cnRfbWFwOjM7CisJIC8qNDggYml0IG1hYyBhZGRyZXNzKi8KKwl1aW50OF90IG1hY19hZGRyWzZd OworCXVpbnQ4X3QgcGFkWzJdOworfTsKKworc3RydWN0IG1hY19saXN0eworCWNoYXIgbWFjX2Fk ZHJbNl07CisJc3RydWN0IG1hY19saXN0ICpuZXh0OworfTsKKworI2VuZGlmCkluZGV4OiBhcm0v ZWNvbmEvb2hjaV9lYy5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9vaGNpX2VjLmMJKHJldmlz aW9uIDApCisrKyBhcm0vZWNvbmEvb2hjaV9lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0 NCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVz QGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90 aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVY UFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU RUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBO TyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2lu Y2x1ZGUgPHN5cy9zdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8 c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz Lmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2lu Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUg PHN5cy9tb2R1bGUuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRl eC5oPgorI2luY2x1ZGUgPHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgor I2luY2x1ZGUgPHN5cy9zeC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxz eXMvY2FsbG91dC5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJp di5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRp Lmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91 c2JfYnVzZG1hLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUg PGRldi91c2IvdXNiX3V0aWwuaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIu aD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRy b2xsZXIvb2hjaS5oPgorI2luY2x1ZGUgPGRldi91c2IvY29udHJvbGxlci9vaGNpcmVnLmg+CisK KyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5o PgorCisjZGVmaW5lCU1FTV9SSUQJMAorCitzdGF0aWMgZGV2aWNlX3Byb2JlX3Qgb2hjaV9lY19w cm9iZTsKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3Qgb2hjaV9lY19hdHRhY2g7CitzdGF0aWMgZGV2 aWNlX2RldGFjaF90IG9oY2lfZWNfZGV0YWNoOworCitzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyB7CisJ c3RydWN0IG9oY2lfc29mdGMgc2Nfb2hjaTsJLyogbXVzdCBiZSBmaXJzdCAqLworfTsKKworc3Rh dGljIGludAorb2hjaV9lY19wcm9iZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNj KGRldiwgIkVjb25hIGludGVncmF0ZWQgT0hDSSBjb250cm9sbGVyIik7CisJcmV0dXJuIChCVVNf UFJPQkVfREVGQVVMVCk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfYXR0YWNoKGRldmljZV90 IGRldikKK3sKKwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRl dik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkv KiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19vaGNpLnNjX2J1cy5wYXJl bnQgPSBkZXY7CisJc2MtPnNjX29oY2kuc2NfYnVzLmRldmljZXMgPSBzYy0+c2Nfb2hjaS5zY19k ZXZpY2VzOworCXNjLT5zY19vaGNpLnNjX2J1cy5kZXZpY2VzX21heCA9IE9IQ0lfTUFYX0RFVklD RVM7CisKKwkvKiBnZXQgYWxsIERNQSBtZW1vcnkgKi8KKwlpZiAodXNiX2J1c19tZW1fYWxsb2Nf YWxsKCZzYy0+c2Nfb2hjaS5zY19idXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhkZXYpLCAmb2hj aV9pdGVyYXRlX2h3X3NvZnRjKSkgeworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCXNjLT5zY19v aGNpLnNjX2RldiA9IGRldjsKKworCXJpZCA9IE1FTV9SSUQ7CisKKwlzYy0+c2Nfb2hjaS5zY19p b19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJICAg ICZyaWQsIFJGX0FDVElWRSk7CisKKwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pb19yZXMpKSB7CisJ CWVyciA9IEVOT01FTTsKKwkJZ290byBlcnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfaW9fdGFn ID0gcm1hbl9nZXRfYnVzdGFnKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9n ZXRfYnVzaGFuZGxlKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnVzX3NwYWNlX3dyaXRlXzQo CisJCShzYyktPnNjX29oY2kuc2NfaW9fdGFnLCBic2gsCisJCTB4MDQsIDB4MTQ2KTsKKworCWJ1 c19zcGFjZV93cml0ZV80KAorCQkoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNoLAorCQkweDQ0 LCAweDAyMDApOworCisJREVMQVkoMTAwMCk7CisKKwlzYy0+c2Nfb2hjaS5zY19pb19zaXplID0g cm1hbl9nZXRfc2l6ZShzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCisJaWYgKGJ1c19zcGFjZV9z dWJyZWdpb24oc2MtPnNjX29oY2kuc2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2Mt PnNjX29oY2kuc2NfaW9fc2l6ZSwgJnNjLT5zY19vaGNpLnNjX2lvX2hkbCkgIT0gMCkKKwkJcGFu aWMoIiVzOiB1bmFibGUgdG8gc3VicmVnaW9uIFVTQiBob3N0IHJlZ2lzdGVycyIsCisJCSAgICBk ZXZpY2VfZ2V0X25hbWUoZGV2KSk7CisKKwlyaWQgPSAwOworCXNjLT5zY19vaGNpLnNjX2lycV9y ZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAg IFJGX0FDVElWRSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykpIHsKKwkJZ290byBl cnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYgPSBkZXZpY2VfYWRkX2NoaWxkKGRl diwgInVzYnVzIiwgLTEpOworCWlmICghKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSkgeworCQln b3RvIGVycm9yOworCX0KKwlkZXZpY2Vfc2V0X2l2YXJzKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2 LCAmc2MtPnNjX29oY2kuc2NfYnVzKTsKKworCXN0cmxjcHkoc2MtPnNjX29oY2kuc2NfdmVuZG9y LCAiQ2F2aXVtIiwKKwkJc2l6ZW9mKHNjLT5zY19vaGNpLnNjX3ZlbmRvcikpOworCisjaWYgKF9f RnJlZUJTRF92ZXJzaW9uID49IDcwMDAzMSkKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNj LT5zY19vaGNpLnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FG RSwgIE5VTEwsCisJCQkgICAgIChkcml2ZXJfaW50cl90ICopb2hjaV9pbnRlcnJ1cHQsIHNjLAor CQkJICAgICAmc2MtPnNjX29oY2kuc2NfaW50cl9oZGwpOworI2Vsc2UKKwllcnIgPSBidXNfc2V0 dXBfaW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMsCisJCQkgICAgIElOVFJfVFlQRV9C SU8gfCBJTlRSX01QU0FGRSwKKwkJCSAgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVw dCwgc2MsCisJCQkgICAgICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZW5kaWYKKwlpZiAo ZXJyKSB7CisJCXNjLT5zY19vaGNpLnNjX2ludHJfaGRsID0gTlVMTDsKKwkJZ290byBlcnJvcjsK Kwl9CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nfb2hjaS5zY19pb190YWcsIHNjLT5zY19v aGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9MLCAwKTsKKworCWVyciA9IG9oY2lfaW5p dCgmc2MtPnNjX29oY2kpOworCWlmICghZXJyKSB7CisJCWVyciA9IGRldmljZV9wcm9iZV9hbmRf YXR0YWNoKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KTsKKwl9CisJaWYgKGVycikgeworCQlnb3Rv IGVycm9yOworCX0KKwlyZXR1cm4gKDApOworCitlcnJvcjoKKwlvaGNpX2VjX2RldGFjaChkZXYp OworCXJldHVybiAoRU5YSU8pOworfQorCitzdGF0aWMgaW50CitvaGNpX2VjX2RldGFjaChkZXZp Y2VfdCBkZXYpCit7CisJc3RydWN0IGVjX29oY2lfc29mdGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0 YyhkZXYpOworCWRldmljZV90IGJkZXY7CisJaW50IGVycjsKKworCWlmIChzYy0+c2Nfb2hjaS5z Y19idXMuYmRldikgeworCQliZGV2ID0gc2MtPnNjX29oY2kuc2NfYnVzLmJkZXY7CisJCWRldmlj ZV9kZXRhY2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoZGV2LCBiZGV2KTsKKwl9CisJ LyogZHVyaW5nIG1vZHVsZSB1bmxvYWQgdGhlcmUgYXJlIGxvdHMgb2YgY2hpbGRyZW4gbGVmdG92 ZXIgKi8KKwlkZXZpY2VfZGVsZXRlX2FsbF9jaGlsZHJlbihkZXYpOworCisJYnVzX3NwYWNlX3dy aXRlXzQoc2MtPnNjX29oY2kuc2NfaW9fdGFnLCBzYy0+c2Nfb2hjaS5zY19pb19oZGwsCisJICAg IE9IQ0lfQ09OVFJPTCwgMCk7CisKKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcyAmJiBzYy0+ c2Nfb2hjaS5zY19pbnRyX2hkbCkgeworCQkvKgorCQkgKiBvbmx5IGNhbGwgb2hjaV9kZXRhY2go KSBhZnRlciBvaGNpX2luaXQoKQorCQkgKi8KKwkJb2hjaV9kZXRhY2goJnNjLT5zY19vaGNpKTsK KworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihkZXYsIHNjLT5zY19vaGNpLnNjX2lycV9yZXMs CisJCQkJCXNjLT5zY19vaGNpLnNjX2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9o ZGwgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVs ZWFzZV9yZXNvdXJjZShkZXYsIFNZU19SRVNfSVJRLCAwLAorCQkJCSAgICAgc2MtPnNjX29oY2ku c2NfaXJxX3Jlcyk7CisJCXNjLT5zY19vaGNpLnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAo c2MtPnNjX29oY2kuc2NfaW9fcmVzKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lT X1JFU19NRU1PUlksIE1FTV9SSUQsCisJCSAgICBzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCQlz Yy0+c2Nfb2hjaS5zY19pb19yZXMgPSBOVUxMOworCX0KKwl1c2JfYnVzX21lbV9mcmVlX2FsbCgm c2MtPnNjX29oY2kuc2NfYnVzLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKTsKKworCXJldHVybiAo MCk7Cit9CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3Qgb2hjaV9tZXRob2RzW10gPSB7CisJLyog RGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJv YmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLCBvaGNpX2VjX2F0dGFjaCksCisJREVWTUVU SE9EKGRldmljZV9kZXRhY2gsIG9oY2lfZWNfZGV0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX3No dXRkb3duLCBidXNfZ2VuZXJpY19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJ REVWTUVUSE9EKGJ1c19wcmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJ ezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3Qgb2hjaV9kcml2ZXIgPSB7CisJIm9oY2kiLAor CW9oY2lfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjX29oY2lfc29mdGMpLAorfTsKKworc3Rh dGljIGRldmNsYXNzX3Qgb2hjaV9kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShvaGNpLCBlY29u YWFybSwgb2hjaV9kcml2ZXIsIG9oY2lfZGV2Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChv aGNpLCB1c2IsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQotLS0gYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNv bmEvdWFydF9jcHVfZWMuYwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyotCisgKiBD b3B5cmlnaHQgKEMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2Yg Y29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv ZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMg cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE RUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJF U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO VCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJF Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF TlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FV U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg U1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERB TUFHRS4KKyAqLworCisjaW5jbHVkZSAib3B0X3VhcnQuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVm cy5oPgorX19GQlNESUQoIiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj aW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5 cy9jb25zLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L3Vh cnQvdWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxz eXMvcm1hbi5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUg PGFybS9lY29uYS9lY29uYV92YXIuaD4KKworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNl X2lvOworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX21lbTsKKworaW50Cit1YXJ0X2Nw dV9lcXJlcyhzdHJ1Y3QgdWFydF9iYXMgKmIxLCBzdHJ1Y3QgdWFydF9iYXMgKmIyKQoreworCisJ cmV0dXJuICgoYjEtPmJzaCA9PSBiMi0+YnNoICYmIGIxLT5ic3QgPT0gYjItPmJzdCkgPyAxIDog MCk7Cit9CisKK2ludAordWFydF9jcHVfZ2V0ZGV2KGludCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9k ZXZpbmZvICpkaSkKK3sKKwlzdHJ1Y3QgdWFydF9jbGFzcyAqY2xhc3MgPSAmdWFydF9uczgyNTBf Y2xhc3M7CisKKwlkaS0+b3BzID0gdWFydF9nZXRvcHMoY2xhc3MpOworCWRpLT5iYXMuY2hhbiA9 IDA7CisJZGktPmJhcy5ic3QgPSBvYmlvX3RhZzsKKworCWlmIChidXNfc3BhY2VfbWFwKGRpLT5i YXMuYnN0LCBFQ09OQV9JT19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLAorCQkJICBFQ09OQV9VQVJU X1NJWkUsCisJCQkgIDAsICZkaS0+YmFzLmJzaCkgIT0gMCkgeworCQlyZXR1cm4gKEVOWElPKTsK Kwl9CisKKwlkaS0+YmF1ZHJhdGUgPSAwOworCWRpLT5iYXMucmVnc2hmdCA9IEVDX1VBUlRfUkVH U0hJRlQ7CisJZGktPmJhcy5yY2xrID0gRUNfVUFSVF9DTE9DSyA7CisJZGktPmRhdGFiaXRzID0g ODsKKwlkaS0+c3RvcGJpdHMgPSAxOworCWRpLT5wYXJpdHkgPSBVQVJUX1BBUklUWV9OT05FOwor CXVhcnRfYnVzX3NwYWNlX21lbSA9IG9iaW9fdGFnOworCXVhcnRfYnVzX3NwYWNlX2lvID0gTlVM TDsKKworCXJldHVybiAoMCk7Cit9CkluZGV4OiBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09Ci0tLSBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwkocmV2aXNpb24gMCkKKysrIGFybS9l Y29uYS91YXJ0X2J1c19lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKi0KKyAq IENvcHlyaWdodCAoQykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgor ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBu YW1lIG9mIE1BUlZFTEwgbm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1heSBi ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBz b2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJV VE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF CisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklC VVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMK KyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F U1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1Ig VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX QVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP RiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxz eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJh bS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNs dWRlIDxzeXMvY29uZi5oPgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMv bW9kdWxlLmg+CisKKyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFu Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQv dWFydC5oPgorI2luY2x1ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3Vh cnQvdWFydF9jcHUuaD4KKworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4KKworc3Rh dGljIGludCB1YXJ0X2VjX3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRpYyBkZXZpY2VfbWV0 aG9kX3QgdWFydF9lY19tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURF Vk1FVEhPRChkZXZpY2VfcHJvYmUsCQl1YXJ0X2VjX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNl X2F0dGFjaCwJdWFydF9idXNfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2RldGFjaCwJdWFy dF9idXNfZGV0YWNoKSwKKwl7IDAsIDAgfQorfTsKKworc3RhdGljIGRyaXZlcl90IHVhcnRfZWNf ZHJpdmVyID0geworCXVhcnRfZHJpdmVyX25hbWUsCisJdWFydF9lY19tZXRob2RzLAorCXNpemVv ZihzdHJ1Y3QgdWFydF9zb2Z0YyksCit9OworCitzdGF0aWMgaW50Cit1YXJ0X2VjX3Byb2JlKGRl dmljZV90IGRldikKK3sKKwlzdHJ1Y3QJdWFydF9zb2Z0YyAqc2M7CisJaW50IHN0YXR1czsKKwor CXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXNjLT5zY19jbGFzcyA9ICZ1YXJ0X25zODI1 MF9jbGFzczsKKwlzdGF0dXMgPSB1YXJ0X2J1c19wcm9iZShkZXYsIEVDX1VBUlRfUkVHU0hJRlQs IEVDX1VBUlRfQ0xPQ0sgLCAwLCAwKTsKKwlyZXR1cm4gKHN0YXR1cyk7Cit9CisKK0RSSVZFUl9N T0RVTEUodWFydCwgZWNvbmFhcm0sIHVhcnRfZWNfZHJpdmVyLCB1YXJ0X2RldmNsYXNzLCAwLCAw KTsKSW5kZXg6IGFybS9lY29uYS9zdGQuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25hL3N0 ZC5lY29uYQkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9uIDAp CkBAIC0wLDAgKzEsMTQgQEAKKyMgJEZyZWVCU0QkCisKK2ZpbGVzCSIuLi9lY29uYS9maWxlcy5l Y29uYSIKK2NwdQkJQ1BVX0ZBNTI2CittYWtlb3B0aW9ucwlDT05GX0NGTEFHUz0tbWFyY2g9YXJt djQKK29wdGlvbnMJUEhZU0FERFI9MHgwMDAwMDAwMAorbWFrZW9wdGlvbnMJS0VSTlBIWVNBRERS PTB4MDEwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCisKK29wdGlv bnMJS0VSTlBIWVNBRERSPTB4MDEwMDAwMDAKK29wdGlvbnMJS0VSTlZJUlRBRERSPTB4YzEwMDAw MDAJIyBVc2VkIGluIGxkc2NyaXB0LmFybQorb3B0aW9ucwlGTEFTSEFERFI9MHhEMDAwMDAwMAor b3B0aW9ucwlMT0FERVJSQU1BRERSPTB4MDAwMDAwMDAKK29wdGlvbnMJU1RBUlRVUF9QQUdFVEFC TEVfQUREUj0weDAwMTAwMDAwCkluZGV4OiBjb25mL01ha2VmaWxlLmFybQo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t LSBjb25mL01ha2VmaWxlLmFybQkocmV2aXNpb24gMjAxMzU4KQorKysgY29uZi9NYWtlZmlsZS5h cm0JKHdvcmtpbmcgY29weSkKQEAgLTczLDcgKzczLDcgQEAKIAkkUy8kTS8kTS9jcHVmdW5jX2Fz bV9zYTEuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm0xMC5TIFwKIAkkUy8kTS8kTS9jcHVmdW5j X2FzbV94c2NhbGUuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbS5TIFwKIAkkUy8kTS8kTS9jcHVmdW5j X2FzbV94c2NhbGVfYzMuUyAkUy8kTS8kTS9jcHVmdW5jX2FzbV9hcm12NV9lYy5TIFwKLQkkUy8k TS8kTS9jcHVmdW5jX2FzbV9zaGVldmEuUworCSRTLyRNLyRNL2NwdWZ1bmNfYXNtX3NoZWV2YS5T ICRTLyRNLyRNL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKIEtFUk5FTF9FWFRSQT10cmFtcG9saW5lCiBL RVJORUxfRVhUUkFfSU5TVEFMTD1rZXJuZWwuZ3oudHJhbXAKIHRyYW1wb2xpbmU6ICR7S0VSTkVM X0tPfS50cmFtcApJbmRleDogY29uZi9vcHRpb25zLmFybQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjb25mL29w dGlvbnMuYXJtCShyZXZpc2lvbiAyMDEzNTgpCisrKyBjb25mL29wdGlvbnMuYXJtCSh3b3JraW5n IGNvcHkpCkBAIC0zNiwzICszNiw0IEBACiBBVDkxX0JXQ1QJCW9wdF9hdDkxLmgKIEFUOTFfVFND CQlvcHRfYXQ5MS5oCiBBVDkxX0tXSUtCWVRFCQlvcHRfYXQ5MS5oCitDUFVfRkE1MjYJCW9wdF9n bG9iYWwuaApJbmRleDoga2Vybi92ZnNfbW91bnQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrZXJuL3Zmc19t b3VudC5jCShyZXZpc2lvbiAyMDEzNTgpCisrKyBrZXJuL3Zmc19tb3VudC5jCSh3b3JraW5nIGNv cHkpCkBAIC0xNDAzLDYgKzE0MDMsMTEgQEAKIAlzdHJ1Y3QgdGltZXZhbCBsYXN0ZmFpbDsKIAlp bnQgY3VyZmFpbCA9IDA7CiAKKwkvKiB0ZW1wb3Jhcnkgc29sdXRpb24gZm9yIHRpbWVvdXQgd2Fp dGluZyBmb3IgVVNCIGRpc2sgcm9vdAorCSAqIGZpbGVzeXN0ZW0KKwkgKi8KKwlwYXVzZSgiV0FJ VCIsIGh6ICogMTApOworCiAJZm9yICg7OykgewogCQlEUk9QX0dJQU5UKCk7CiAJCWdfd2FpdGlk bGUoKTsK --0016e64b95e4b77980047c3e7633--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?260bb65e1001030033s9782689xedfd54520c62b01d>