Date: Sun, 3 Jan 2010 20:43:13 +0700 From: Yohanes Nugroho <yohanes@gmail.com> To: Stanislav Sedov <stas@freebsd.org> Cc: freebsd-arm@freebsd.org Subject: Re: CNS11XX FreeBSD port completed Message-ID: <260bb65e1001030543y35fc278bo8dc73d265542bb77@mail.gmail.com> In-Reply-To: <20100103030926.18ca3fca.stas@FreeBSD.org> References: <260bb65e0912110627o6b67b399vabaae57477b91023@mail.gmail.com> <260bb65e0912250948w6f714367w672a1ebf037fb7f7@mail.gmail.com> <BEE46B4D-5280-48DF-B2FD-36D1FEFA332A@freebsd.org> <260bb65e1001030033s9782689xedfd54520c62b01d@mail.gmail.com> <20100103030926.18ca3fca.stas@FreeBSD.org>
next in thread | previous in thread | raw e-mail | index | archive | help
--001636b144537453ad047c42ca50 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable On Sun, Jan 3, 2010 at 6:09 PM, Stanislav Sedov <stas@freebsd.org> wrote: Hi Stanislav, Thank you for looking so thoroughly at my code. Here is my latest patch att= empt. >> +void * >> +initarm(void *arg, void *arg2) >> +{ >> + =C2=A0 =C2=A0 struct pv_addr =C2=A0kernel_l1pt; >> + =C2=A0 =C2=A0 int loop, i; >> + =C2=A0 =C2=A0 u_int l1pagetable; >> + =C2=A0 =C2=A0 vm_offset_t freemempos; >> + =C2=A0 =C2=A0 vm_offset_t afterkern; >> + =C2=A0 =C2=A0 uint32_t memsize; >> + =C2=A0 =C2=A0 vm_offset_t lastaddr; >> + =C2=A0 =C2=A0 volatile uint32_t * ddr =3D (uint32_t *)0x4000000C; >> + =C2=A0 =C2=A0 int mem_info; > > Style(9) recommends sorting local variable declarations by size, then > alphabetically. =C2=A0This makes reading easier. actually, i just added the last 2 variables. Almost all of the *_machdep in sys/arm is copied from one source. But I have reordered them in my latest patch. I ordered the size from large to small. Reading some random kernel code, it doesn't seem to be consistent (some orders from small to large, and I think most doesn't order them alphabetically). >> + >> + =C2=A0 =C2=A0 boot_arg1 =3D arg; >> + =C2=A0 =C2=A0 boot_arg2 =3D arg2; >> + =C2=A0 =C2=A0 boothowto =3D RB_VERBOSE; >> + =C2=A0 =C2=A0 boothowto |=3D =C2=A0RB_SINGLE; > > Why are you setting boothowto here? =C2=A0Is it possible for the board to= boot > to multiuser? I looked at sa11x0/assabet_machdep.c, and it is how they initialize the boot flags. The device can boot to multi user, so I have removed the line (the single user mode was good for testing). >> +static inline uint32_t >> +RD4(struct ece_softc *sc, bus_size_t off) >> +{ >> + =C2=A0 =C2=A0 return (bus_read_4(sc->mem_res, off)); >> +} >> + >> +static inline void >> +WR4(struct ece_softc *sc, bus_size_t off, uint32_t val) >> +{ >> + =C2=A0 =C2=A0 bus_write_4(sc->mem_res, off, val); >> +} > > Funcctions without local variable should have an extra blank line at the > beginning, per style(9). =C2=A0Also, all-capitals names are usually used = for macros, > not function names. ok, about the naming. When creating the code, I was copying the style from arm at91 source code where all of the files uses WR4 and RD4 *function*, the same style is also used in dev/mwl/mwlhal.c. I have replaced the names, and added the whitespace. >> +static int eceioctl(struct ifnet * ifp, u_long, caddr_t); > =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0^^^ > Use TAB after the return value type in prototypes. I thought that was only for prototypes in header. When I looked at most networking code, it just uses space for internal prototypes (if_jme.c, if_age.c, if_dc.c, etc). I was again wrong in looking the styles of other code. I have added the tabs as you suggested. > Missing spaces. =C2=A0The same for other parts of code. > Can you, please, review your code considering these > comments and send the patch again? =C2=A0In gerneal, the > code looks great, but there're some minor nits that > should be fixed before it hits the base. Ok, I have tried to read the latest patch several times, I hope I got it right this time. --=20 Regards Yohanes http://yohan.es/ --001636b144537453ad047c42ca50 Content-Type: text/x-patch; charset=US-ASCII; name="cns11xx_20090103_2.diff" Content-Disposition: attachment; filename="cns11xx_20090103_2.diff" Content-Transfer-Encoding: base64 X-Attachment-Id: f_g3zvgrkl0 SW5kZXg6IGFybS9hcm0vZWxmX3RyYW1wb2xpbmUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vYXJtL2Vs Zl90cmFtcG9saW5lLmMJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9hcm0vZWxmX3RyYW1wb2xp bmUuYwkod29ya2luZyBjb3B5KQpAQCAtNTcsNiArNTcsOCBAQAogI2RlZmluZSBjcHVfaWRjYWNo ZV93Ymludl9hbGwJYXJtOF9jYWNoZV9wdXJnZUlECiAjZWxpZiBkZWZpbmVkKENQVV9BUk05KQog I2RlZmluZSBjcHVfaWRjYWNoZV93Ymludl9hbGwJYXJtOV9pZGNhY2hlX3diaW52X2FsbAorI2Vs aWYgZGVmaW5lZChDUFVfRkE1MjYpCisjZGVmaW5lIGNwdV9pZGNhY2hlX3diaW52X2FsbAlmYTUy Nl9pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVmaW5lZChDUFVfQVJNOUUpCiAjZGVmaW5lIGNw dV9pZGNhY2hlX3diaW52X2FsbAlhcm12NV9lY19pZGNhY2hlX3diaW52X2FsbAogI2VsaWYgZGVm aW5lZChDUFVfQVJNMTApCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmMuYwo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh cm0vYXJtL2NwdWZ1bmMuYwkocmV2aXNpb24gMjAxMzU4KQorKysgYXJtL2FybS9jcHVmdW5jLmMJ KHdvcmtpbmcgY29weSkKQEAgLTc4MSw2ICs3ODEsNzMgQEAKIAl4c2NhbGVfc2V0dXAJCQkvKiBj cHUgc2V0dXAJCSovCiB9OwogI2VuZGlmIC8qIENQVV9YU0NBTEVfODEzNDIgKi8KKworCisjaWYg ZGVmaW5lZChDUFVfRkE1MjYpCitzdHJ1Y3QgY3B1X2Z1bmN0aW9ucyBmYTUyNl9jcHVmdW5jcyA9 IHsKKwkvKiBDUFUgZnVuY3Rpb25zICovCisKKwkuY2ZfaWQJCQk9IGNwdWZ1bmNfaWQsCisJLmNm X2Nwd2FpdAkJPSBjcHVmdW5jX251bGxvcCwKKworCS8qIE1NVSBmdW5jdGlvbnMgKi8KKworCS5j Zl9jb250cm9sCQk9IGNwdWZ1bmNfY29udHJvbCwKKwkuY2ZfZG9tYWlucwkJPSBjcHVmdW5jX2Rv bWFpbnMsCisJLmNmX3NldHR0YgkJPSBmYTUyNl9zZXR0dGIsCisJLmNmX2ZhdWx0c3RhdHVzCQk9 IGNwdWZ1bmNfZmF1bHRzdGF0dXMsCisJLmNmX2ZhdWx0YWRkcmVzcwk9IGNwdWZ1bmNfZmF1bHRh ZGRyZXNzLAorCisJLyogVExCIGZ1bmN0aW9ucyAqLworCisJLmNmX3RsYl9mbHVzaElECQk9IGFy bXY0X3RsYl9mbHVzaElELAorCS5jZl90bGJfZmx1c2hJRF9TRQk9IGZhNTI2X3RsYl9mbHVzaElE X1NFLAorCS5jZl90bGJfZmx1c2hJCQk9IGFybXY0X3RsYl9mbHVzaEksCisJLmNmX3RsYl9mbHVz aElfU0UJPSBmYTUyNl90bGJfZmx1c2hJX1NFLAorCS5jZl90bGJfZmx1c2hECQk9IGFybXY0X3Rs Yl9mbHVzaEQsCisJLmNmX3RsYl9mbHVzaERfU0UJPSBhcm12NF90bGJfZmx1c2hEX1NFLAorCisJ LyogQ2FjaGUgb3BlcmF0aW9ucyAqLworCisJLmNmX2ljYWNoZV9zeW5jX2FsbAk9IGZhNTI2X2lj YWNoZV9zeW5jX2FsbCwKKwkuY2ZfaWNhY2hlX3N5bmNfcmFuZ2UJPSBmYTUyNl9pY2FjaGVfc3lu Y19yYW5nZSwKKworCS5jZl9kY2FjaGVfd2JpbnZfYWxsCT0gZmE1MjZfZGNhY2hlX3diaW52X2Fs bCwKKwkuY2ZfZGNhY2hlX3diaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diaW52X3JhbmdlLAor CS5jZl9kY2FjaGVfaW52X3JhbmdlCT0gZmE1MjZfZGNhY2hlX2ludl9yYW5nZSwKKwkuY2ZfZGNh Y2hlX3diX3JhbmdlCT0gZmE1MjZfZGNhY2hlX3diX3JhbmdlLAorCisJLmNmX2lkY2FjaGVfd2Jp bnZfYWxsCT0gZmE1MjZfaWRjYWNoZV93Ymludl9hbGwsCisJLmNmX2lkY2FjaGVfd2JpbnZfcmFu Z2UJPSBmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlLAorCisKKwkuY2ZfbDJjYWNoZV93Ymludl9h bGwgPSBjcHVmdW5jX251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Ymludl9yYW5nZSA9ICh2b2lkICop Y3B1ZnVuY19udWxsb3AsCisJLmNmX2wyY2FjaGVfaW52X3JhbmdlID0gKHZvaWQgKiljcHVmdW5j X251bGxvcCwKKwkuY2ZfbDJjYWNoZV93Yl9yYW5nZSA9ICh2b2lkICopY3B1ZnVuY19udWxsb3As CisKKworCS8qIE90aGVyIGZ1bmN0aW9ucyAqLworCisJLmNmX2ZsdXNoX3ByZWZldGNoYnVmCT0g ZmE1MjZfZmx1c2hfcHJlZmV0Y2hidWYsCisJLmNmX2RyYWluX3dyaXRlYnVmCT0gYXJtdjRfZHJh aW5fd3JpdGVidWYsCisJLmNmX2ZsdXNoX2JybmNodGd0X0MJPSBjcHVmdW5jX251bGxvcCwKKwku Y2ZfZmx1c2hfYnJuY2h0Z3RfRQk9IGZhNTI2X2ZsdXNoX2JybmNodGd0X0UsCisKKwkuY2Zfc2xl ZXAJCT0gZmE1MjZfY3B1X3NsZWVwLAorCisJLyogU29mdCBmdW5jdGlvbnMgKi8KKworCS5jZl9k YXRhYWJ0X2ZpeHVwCT0gY3B1ZnVuY19udWxsX2ZpeHVwLAorCS5jZl9wcmVmZXRjaGFidF9maXh1 cAk9IGNwdWZ1bmNfbnVsbF9maXh1cCwKKworCS5jZl9jb250ZXh0X3N3aXRjaAk9IGZhNTI2X2Nv bnRleHRfc3dpdGNoLAorCisJLmNmX3NldHVwCQk9IGZhNTI2X3NldHVwCit9OworI2VuZGlmCS8q IENQVV9GQTUyNiAqLworCisKIC8qCiAgKiBHbG9iYWwgY29uc3RhbnRzIGFsc28gdXNlZCBieSBs b2NvcmUucwogICovCkBAIC03OTMsNiArODYwLDcgQEAKICAgZGVmaW5lZCAoQ1BVX0FSTTlFKSB8 fCBkZWZpbmVkIChDUFVfQVJNMTApIHx8CQkJICAgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxF XzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODAzMjEpIHx8CSAgICAgICBcCiAgIGRlZmlu ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpIHx8CSAg ICAgICBcCisgIGRlZmluZWQoQ1BVX0ZBNTI2KSB8fAkJCQkJICAgICAgIFwKICAgZGVmaW5lZChD UFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfODEzNDIpCiAKIHN0YXRpYyB2 b2lkIGdldF9jYWNoZXR5cGVfY3AxNSh2b2lkKTsKQEAgLTEwNzMsNiArMTE0MSwxOSBAQAogCQln b3RvIG91dDsKIAl9CiAjZW5kaWYJLyogQ1BVX1NBMTExMCAqLworI2lmZGVmIENQVV9GQTUyNgor CWlmIChjcHV0eXBlID09IENQVV9JRF9GQTUyNikgeworCQljcHVmdW5jcyA9IGZhNTI2X2NwdWZ1 bmNzOworCQljcHVfcmVzZXRfbmVlZHNfdjRfTU1VX2Rpc2FibGUgPSAxOwkvKiBTQSBuZWVkcyBp dAkqLworCQlnZXRfY2FjaGV0eXBlX2NwMTUoKTsKKwkJcG1hcF9wdGVfaW5pdF9nZW5lcmljKCk7 CisKKwkJLyogVXNlIHBvd2Vyc2F2ZSBvbiB0aGlzIENQVS4gKi8KKwkJY3B1X2RvX3Bvd2Vyc2F2 ZSA9IDE7CisKKwkJZ290byBvdXQ7CisJfQorI2VuZGlmCS8qIENQVV9GQTUyNiAqLwogI2lmZGVm IENQVV9JWFAxMlgwCiAgICAgICAgIGlmIChjcHV0eXBlID09IENQVV9JRF9JWFAxMjAwKSB7CiAg ICAgICAgICAgICAgICAgY3B1ZnVuY3MgPSBpeHAxMngwX2NwdWZ1bmNzOwpAQCAtMTU0Nyw3ICsx NjI4LDggQEAKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjAwKSB8fCBkZWZpbmVkKENQVV9YU0NB TEVfODAzMjEpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV9QWEEyWDApIHx8IGRlZmluZWQo Q1BVX1hTQ0FMRV9JWFA0MjUpIHx8CQlcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIxOSkgfHwg ZGVmaW5lZChDUFVfWFNDQUxFXzgxMzQyKSB8fCBcCi0gIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAg ZGVmaW5lZChDUFVfQVJNMTEpCisgIGRlZmluZWQoQ1BVX0FSTTEwKSB8fCAgZGVmaW5lZChDUFVf QVJNMTEpIHx8IFwKKyAgZGVmaW5lZChDUFVfRkE1MjYpCiAKICNkZWZpbmUgSUdOCTAKICNkZWZp bmUgT1IJMQpAQCAtMjAxMyw2ICsyMDk1LDYyIEBACiB9CiAjZW5kaWYJLyogQ1BVX1NBMTEwMCB8 fCBDUFVfU0ExMTEwICovCiAKKyNpZiBkZWZpbmVkKENQVV9GQTUyNikKK3N0cnVjdCBjcHVfb3B0 aW9uIGZhNTI2X29wdGlvbnNbXSA9IHsKKyNpZmRlZiBDT01QQVRfMTIKKwl7ICJub2NhY2hlIiwJ CUlHTiwgQklDLCAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xf RENfRU5BQkxFKSB9LAorCXsgIm5vd3JpdGVidWYiLAkJSUdOLCBCSUMsIENQVV9DT05UUk9MX1dC VUZfRU5BQkxFIH0sCisjZW5kaWYJLyogQ09NUEFUXzEyICovCisJeyAiY3B1LmNhY2hlIiwJCUJJ QywgT1IsICAoQ1BVX0NPTlRST0xfSUNfRU5BQkxFIHwKKwkJCQkJICAgQ1BVX0NPTlRST0xfRENf RU5BQkxFKSB9LAorCXsgImNwdS5ub2NhY2hlIiwJT1IsICBCSUMsIChDUFVfQ09OVFJPTF9JQ19F TkFCTEUgfAorCQkJCQkgICBDUFVfQ09OVFJPTF9EQ19FTkFCTEUpIH0sCisJeyAiY3B1LndyaXRl YnVmIiwJQklDLCBPUiwgIENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIH0sCisJeyAiY3B1Lm5vd3Jp dGVidWYiLAlPUiwgIEJJQywgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUgfSwKKwl7IE5VTEwsCQkJ SUdOLCBJR04sIDAgfQorfTsKKwordm9pZAorZmE1MjZfc2V0dXAoY2hhciAqYXJncykKK3sKKwlp bnQgY3B1Y3RybCwgY3B1Y3RybG1hc2s7CisKKwljcHVjdHJsID0gQ1BVX0NPTlRST0xfTU1VX0VO QUJMRSB8IENQVV9DT05UUk9MXzMyQlBfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MXzMyQkRfRU5B QkxFIHwgQ1BVX0NPTlRST0xfU1lTVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfSUNfRU5BQkxF IHwgQ1BVX0NPTlRST0xfRENfRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX1dCVUZfRU5BQkxFIHwg Q1BVX0NPTlRST0xfTEFCVF9FTkFCTEU7CisJY3B1Y3RybG1hc2sgPSBDUFVfQ09OVFJPTF9NTVVf RU5BQkxFIHwgQ1BVX0NPTlRST0xfMzJCUF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfMzJCRF9F TkFCTEUgfCBDUFVfQ09OVFJPTF9TWVNUX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9JQ19FTkFC TEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfV0JVRl9FTkFCTEUg fCBDUFVfQ09OVFJPTF9ST01fRU5BQkxFCisJCSB8IENQVV9DT05UUk9MX0JFTkRfRU5BQkxFIHwg Q1BVX0NPTlRST0xfQUZMVF9FTkFCTEUKKwkJIHwgQ1BVX0NPTlRST0xfTEFCVF9FTkFCTEUgfCBD UFVfQ09OVFJPTF9CUFJEX0VOQUJMRQorCQkgfCBDUFVfQ09OVFJPTF9DUENMSyB8IENQVV9DT05U Uk9MX1ZFQ1JFTE9DOworCisjaWZuZGVmIEFSTTMyX0RJU0FCTEVfQUxJR05NRU5UX0ZBVUxUUwor CWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQUZMVF9FTkFCTEU7CisjZW5kaWYKKworCWNwdWN0cmwg PSBwYXJzZV9jcHVfb3B0aW9ucyhhcmdzLCBmYTUyNl9vcHRpb25zLCBjcHVjdHJsKTsKKworI2lm ZGVmIF9fQVJNRUJfXworCWNwdWN0cmwgfD0gQ1BVX0NPTlRST0xfQkVORF9FTkFCTEU7CisjZW5k aWYKKworCWlmICh2ZWN0b3JfcGFnZSA9PSBBUk1fVkVDVE9SU19ISUdIKQorCQljcHVjdHJsIHw9 IENQVV9DT05UUk9MX1ZFQ1JFTE9DOworCisJLyogQ2xlYXIgb3V0IHRoZSBjYWNoZSAqLworCWNw dV9pZGNhY2hlX3diaW52X2FsbCgpOworCisJLyogU2V0IHRoZSBjb250cm9sIHJlZ2lzdGVyICov CisJY3RybCA9IGNwdWN0cmw7CisJY3B1X2NvbnRyb2woMHhmZmZmZmZmZiwgY3B1Y3RybCk7Cit9 CisjZW5kaWYJLyogQ1BVX0ZBNTI2ICovCisKKwogI2lmIGRlZmluZWQoQ1BVX0lYUDEyWDApCiBz dHJ1Y3QgY3B1X29wdGlvbiBpeHAxMngwX29wdGlvbnNbXSA9IHsKIAl7ICJjcHUuY2FjaGUiLAkJ QklDLCBPUiwgIChDUFVfQ09OVFJPTF9JQ19FTkFCTEUgfCBDUFVfQ09OVFJPTF9EQ19FTkFCTEUp IH0sCkluZGV4OiBhcm0vYXJtL2NwdWZ1bmNfYXNtX2ZhNTI2LlMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJt L2FybS9jcHVmdW5jX2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQorKysgYXJtL2FybS9jcHVmdW5j X2FzbV9mYTUyNi5TCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwOCBAQAorLyoJJE5ldEJTRDog Y3B1ZnVuY19hc21fZmE1MjYuUyx2IDEuMyAyMDA4LzEwLzE1IDE2OjU2OjQ5IG1hdHQgRXhwICQq LworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMu CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy b20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBN YXR0IFRob21hcyA8bWF0dEAzYW0tc29mdHdhcmUuY29tPgorICoKKyAqIFJlZGlzdHJpYnV0aW9u IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBD T05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRB VElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwg REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisg KiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP RklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNU IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor ICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW RU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov CisKKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKyNkZWZpbmUJQ0FDSEVMSU5FX1NJWkUJ MTYKKworRU5UUlkoZmE1MjZfc2V0dHRiKQorCW1vdglyMSwgIzAKKwltY3IJcDE1LCAwLCByMSwg YzcsIGMxNCwgMAkvKiBjbGVhbiBhbmQgaW52YWxpZGF0ZSBEJCAqLworCW1jcglwMTUsIDAsIHIx LCBjNywgYzUsIDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1jcglwMTUsIDAsIHIxLCBjNywgYzUs IDYJLyogaW52YWxpZGF0ZSBCVEIgKi8KKwltY3IJcDE1LCAwLCByMSwgYzcsIGMxMCwgNAkvKiBk cmFpbiB3cml0ZSBhbmQgZmlsbCBidWZmZXIgKi8KKworCW1jcglwMTUsIDAsIHIwLCBjMiwgYzAs IDAJLyogV3JpdGUgdGhlIFRUQiAqLworCisJLyogSWYgd2UgaGF2ZSB1cGRhdGVkIHRoZSBUVEIg d2UgbXVzdCBmbHVzaCB0aGUgVExCICovCisJbWNyCXAxNSwgMCwgcjEsIGM4LCBjNywgMAkvKiBp bnZhbGlkYXRlIEkrRCBUTEIgKi8KKworCS8qIE1ha2Ugc3VyZSB0aGF0IHBpcGVsaW5lIGlzIGVt cHRpZWQgKi8KKwltb3YJcjAsIHIwCisJbW92CXIwLCByMAorCW1vdglwYywgbHIKKworLyoKKyAq IFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNoSURfU0UpCisJbWNyCXAx NSwgMCwgcjAsIGM4LCBjNywgMQkvKiBmbHVzaCBVdGxiIHNpbmdsZSBlbnRyeSAqLworCW1vdglw YywgbHIKKworLyoKKyAqIFRMQiBmdW5jdGlvbnMKKyAqLworRU5UUlkoZmE1MjZfdGxiX2ZsdXNo SV9TRSkKKwltY3IJcDE1LCAwLCByMCwgYzgsIGM1LCAxCS8qIGZsdXNoIEl0bGIgc2luZ2xlIGVu dHJ5ICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jcHVfc2xlZXApCisJbW92CXIwLCAj MAorLyoJbm9wCisJbm9wKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMwLCA0CS8qIFdhaXQgZm9y IGludGVycnVwdCovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9wcmVmZXRjaGJ1 ZikKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjNSwgNAkvKiBQcmUtZmV0Y2gg Zmx1c2ggKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBDYWNoZSBmdW5jdGlvbnMKKyAqLworRU5U UlkoZmE1MjZfaWRjYWNoZV93Ymludl9hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIw LCBjNywgYzE0LCAwCS8qIGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkICovCisJbWNyCXAxNSwgMCwg cjAsIGM3LCBjNSwgMAkvKiBpbnZhbGlkYXRlIEkkICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj MTAsIDQJLyogZHJhaW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUy Nl9pY2FjaGVfc3luY19hbGwpCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzUs IDAJLyogaW52YWxpZGF0ZSBJJCAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hl X3diaW52X2FsbCkKKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTQsIDAJLyog Y2xlYW4gYW5kIGludmFsaWRhdGUgRCQgKi8KKwltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgNAkv KiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxyCisKKy8qCisgKiBTb2Z0IGZ1bmN0 aW9ucworICovCitFTlRSWShmYTUyNl9kY2FjaGVfd2JpbnZfcmFuZ2UpCisJY21wCXIxLCAjMHg0 MDAwCisJYmhzCV9DX0xBQkVMKGZhNTI2X2RjYWNoZV93Ymludl9hbGwpCisKKwlhbmQJcjIsIHIw LCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMo Q0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxNCwgMQkvKiBj bGVhbiBhbmQgaW52YWxpZGF0ZSBEJCBlbnRyeSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVf U0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVMSU5FX1NJWkUKKwliaGkJMWIKKworCW1jcglwMTUs IDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1ZmZlciAqLworCW1vdglwYywgbHIK KworRU5UUlkoZmE1MjZfZGNhY2hlX3diX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJscwkx ZgorCisJbW92CXIwLCAjMAorCW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCAwCS8qIGNsZWFuIGVu dGlyZSBEJCAqLworCWIJM2YKKworMToJYW5kCXIyLCByMCwgIyhDQUNIRUxJTkVfU0laRSAtIDEp CisJYWRkCXIxLCByMSwgcjIKKwliaWMJcjAsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwor MjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDEJLyogY2xlYW4gRCQgZW50cnkgKi8KKwlhZGQJ cjAsIHIwLCAjQ0FDSEVMSU5FX1NJWkUKKwlzdWJzCXIxLCByMSwgI0NBQ0hFTElORV9TSVpFCisJ YmhpCTJiCisKKzM6CW1jcglwMTUsIDAsIHIwLCBjNywgYzEwLCA0CS8qIGRyYWluIHdyaXRlIGJ1 ZmZlciAqLworCW1vdglwYywgbHIKKworRU5UUlkoZmE1MjZfZGNhY2hlX2ludl9yYW5nZSkKKwlh bmQJcjIsIHIwLCAjKENBQ0hFTElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwly MCwgcjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGM2 LCAxCS8qIGludmFsaWRhdGUgRCQgc2luZ2xlIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hF TElORV9TSVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisJbW92 CXBjLCBscgorCitFTlRSWShmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKQorCWNtcAlyMSwgIzB4 NDAwMAorCWJocwlfQ19MQUJFTChmYTUyNl9pZGNhY2hlX3diaW52X2FsbCkKKworCWFuZAlyMiwg cjAsICMoQ0FDSEVMSU5FX1NJWkUgLSAxKQorCWFkZAlyMSwgcjEsIHIyCisJYmljCXIwLCByMCwg IyhDQUNIRUxJTkVfU0laRSAtIDEpCisKKzE6CW1jcglwMTUsIDAsIHIwLCBjNywgYzE0LCAxCS8q IGNsZWFuIGFuZCBpbnZhbGlkYXRlIEQkIGVudHJ5ICovCisJbWNyCXAxNSwgMCwgcjAsIGM3LCBj NSwgMQkvKiBpbnZhbGlkYXRlIEkkIGVudHJ5ICovCisJYWRkCXIwLCByMCwgI0NBQ0hFTElORV9T SVpFCisJc3VicwlyMSwgcjEsICNDQUNIRUxJTkVfU0laRQorCWJoaQkxYgorCisyOgltY3IJcDE1 LCAwLCByMCwgYzcsIGMxMCwgNAkvKiBkcmFpbiB3cml0ZSBidWZmZXIgKi8KKwltb3YJcGMsIGxy CisKK0VOVFJZKGZhNTI2X2ljYWNoZV9zeW5jX3JhbmdlKQorCWNtcAlyMSwgIzB4NDAwMAorCWJo cwlfQ19MQUJFTChmYTUyNl9pY2FjaGVfc3luY19hbGwpCisKKwlhbmQJcjIsIHIwLCAjKENBQ0hF TElORV9TSVpFIC0gMSkKKwlhZGQJcjEsIHIxLCByMgorCWJpYwlyMCwgcjAsICMoQ0FDSEVMSU5F X1NJWkUgLSAxKQorCisxOgltY3IJcDE1LCAwLCByMCwgYzcsIGMxMCwgMQkvKiBjbGVhbiBEJCBl bnRyeSAqLworCW1jcglwMTUsIDAsIHIwLCBjNywgYzUsIDEJLyogaW52YWxpZGF0ZSBJJCBlbnRy eSAqLworCWFkZAlyMCwgcjAsICNDQUNIRUxJTkVfU0laRQorCXN1YnMJcjEsIHIxLCAjQ0FDSEVM SU5FX1NJWkUKKwliaGkJMWIKKworMjoJbWNyCXAxNSwgMCwgcjAsIGM3LCBjMTAsIDQJLyogZHJh aW4gd3JpdGUgYnVmZmVyICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9mbHVzaF9icm5j aHRndF9FKQorCW1vdglyMCwgIzAKKwltY3IJcDE1LCAwLCByMCwgYzcsIGM1LCA2CS8qIGludmFs aWRhdGUgQlRCIGNhY2hlICovCisJbW92CXBjLCBscgorCitFTlRSWShmYTUyNl9jb250ZXh0X3N3 aXRjaCkKKwkvKgorCSAqIENGX0NBQ0hFX1BVUkdFX0lEIHdpbGwgKkFMV0FZUyogYmUgY2FsbGVk IHByaW9yIHRvIHRoaXMuCisJICogVGh1cyB0aGUgZGF0YSBjYWNoZSB3aWxsIGNvbnRhaW4gb25s eSBrZXJuZWwgZGF0YSBhbmQgdGhlCisJICogaW5zdHJ1Y3Rpb24gY2FjaGUgd2lsbCBjb250YWlu IG9ubHkga2VybmVsIGNvZGUsIGFuZCBhbGwKKwkgKiBrZXJuZWwgbWFwcGluZ3MgYXJlIHNoYXJl ZCBieSBhbGwgcHJvY2Vzc2VzLgorCSAqLworCisJbWNyCXAxNSwgMCwgcjAsIGMyLCBjMCwgMAkv KiBXcml0ZSB0aGUgVFRCICovCisKKwkvKiBJZiB3ZSBoYXZlIHVwZGF0ZWQgdGhlIFRUQiB3ZSBt dXN0IGZsdXNoIHRoZSBUTEIgKi8KKwltb3YJcjAsICMwCisJbWNyCXAxNSwgMCwgcjAsIGM4LCBj NywgMAkvKiBmbHVzaCB0aGUgSStEIHRsYiAqLworCisJLyogTWFrZSBzdXJlIHRoYXQgcGlwZWxp bmUgaXMgZW1wdGllZCAqLworCW1vdglyMCwgcjAKKwltb3YJcjAsIHIwCisJbW92CXBjLCBscgor CkluZGV4OiBhcm0vaW5jbHVkZS9jcHVjb25mLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2luY2x1ZGUv Y3B1Y29uZi5oCShyZXZpc2lvbiAyMDEzNTgpCisrKyBhcm0vaW5jbHVkZS9jcHVjb25mLmgJKHdv cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAKIAkJCSBkZWZpbmVkKENQVV9YU0NBTEVfODAy MDApICsJCQlcCiAJCQkgZGVmaW5lZChDUFVfWFNDQUxFXzgwMzIxKSArCQkJXAogCQkJIGRlZmlu ZWQoQ1BVX1hTQ0FMRV9QWEEyWDApICsJCQlcCisJCQkgZGVmaW5lZChDUFVfRkE1MjYpICsJCQkJ XAogCQkJIGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQogCiAvKgpAQCAtNjgsNyArNjksNyBA QAogICovCiAjaWYgKGRlZmluZWQoQ1BVX0FSTTdURE1JKSB8fCBkZWZpbmVkKENQVV9BUk04KSB8 fCBkZWZpbmVkKENQVV9BUk05KSB8fAlcCiAgICAgIGRlZmluZWQoQ1BVX1NBMTEwKSB8fCBkZWZp bmVkKENQVV9TQTExMDApIHx8IGRlZmluZWQoQ1BVX1NBMTExMCkgfHwgXAotICAgIGRlZmluZWQo Q1BVX0lYUDEyWDApIHx8IGRlZmluZWQoQ1BVX1hTQ0FMRV9JWFA0MjUpKQorICAgICBkZWZpbmVk KENQVV9JWFAxMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8fCBkZWZpbmVkKENQ VV9GQTUyNikpCiAjZGVmaW5lCUFSTV9BUkNIXzQJMQogI2Vsc2UKICNkZWZpbmUJQVJNX0FSQ0hf NAkwCkBAIC0xMjUsNyArMTI2LDcgQEAKIAogI2lmIChkZWZpbmVkKENQVV9BUk02KSB8fCBkZWZp bmVkKENQVV9BUk03KSB8fCBkZWZpbmVkKENQVV9BUk03VERNSSkgfHwJXAogICAgICBkZWZpbmVk KENQVV9BUk04KSB8fCBkZWZpbmVkKENQVV9BUk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwJ XAotICAgICBkZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpKQorICAgICBk ZWZpbmVkKENQVV9BUk0xMCkgfHwgZGVmaW5lZChDUFVfQVJNMTEpIHx8IGRlZmluZWQoQ1BVX0ZB NTI2KSkKICNkZWZpbmUJQVJNX01NVV9HRU5FUklDCQkxCiAjZWxzZQogI2RlZmluZQlBUk1fTU1V X0dFTkVSSUMJCTAKSW5kZXg6IGFybS9pbmNsdWRlL2NwdWZ1bmMuaAo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBh cm0vaW5jbHVkZS9jcHVmdW5jLmgJKHJldmlzaW9uIDIwMTM1OCkKKysrIGFybS9pbmNsdWRlL2Nw dWZ1bmMuaAkod29ya2luZyBjb3B5KQpAQCAtMjgzLDYgKzI4MywyOCBAQAogdV9pbnQJYXJtOF9j bG9ja19jb25maWcJKHVfaW50LCB1X2ludCk7CiAjZW5kaWYKIAorCisjaWZkZWYgQ1BVX0ZBNTI2 Cit2b2lkCWZhNTI2X3NldHVwCQkoY2hhciAqYXJnKTsKK3ZvaWQJZmE1MjZfc2V0dHRiCQkodV9p bnQgdHRiKTsKK3ZvaWQJZmE1MjZfY29udGV4dF9zd2l0Y2gJKHZvaWQpOwordm9pZAlmYTUyNl9j cHVfc2xlZXAJCShpbnQpOwordm9pZAlmYTUyNl90bGJfZmx1c2hJX1NFCSh1X2ludCk7Cit2b2lk CWZhNTI2X3RsYl9mbHVzaElEX1NFCSh1X2ludCk7Cit2b2lkCWZhNTI2X2ZsdXNoX3ByZWZldGNo YnVmCSh2b2lkKTsKK3ZvaWQJZmE1MjZfZmx1c2hfYnJuY2h0Z3RfRQkodV9pbnQpOworCit2b2lk CWZhNTI2X2ljYWNoZV9zeW5jX2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2ljYWNoZV9zeW5jX3Jh bmdlKHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hl X3diaW52X2FsbAkodm9pZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV93Ymludl9yYW5nZSh2bV9vZmZz ZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2RjYWNoZV9pbnZfcmFuZ2UJ KHZtX29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKK3ZvaWQJZmE1MjZfZGNhY2hlX3di X3JhbmdlCSh2bV9vZmZzZXRfdCBzdGFydCwgdm1fc2l6ZV90IGVuZCk7Cit2b2lkCWZhNTI2X2lk Y2FjaGVfd2JpbnZfYWxsKHZvaWQpOwordm9pZAlmYTUyNl9pZGNhY2hlX3diaW52X3JhbmdlKHZt X29mZnNldF90IHN0YXJ0LCB2bV9zaXplX3QgZW5kKTsKKyNlbmRpZgorCisKICNpZmRlZiBDUFVf U0ExMTAKIHZvaWQJc2ExMTBfc2V0dXAJCShjaGFyICpzdHJpbmcpOwogdm9pZAlzYTExMF9jb250 ZXh0X3N3aXRjaAkodm9pZCk7CkBAIC00NDUsNiArNDY3LDcgQEAKICNpZiBkZWZpbmVkKENQVV9B Uk05KSB8fCBkZWZpbmVkKENQVV9BUk05RSkgfHwgZGVmaW5lZChDUFVfQVJNMTApIHx8IFwKICAg ZGVmaW5lZChDUFVfU0ExMTApIHx8IGRlZmluZWQoQ1BVX1NBMTEwMCkgfHwgZGVmaW5lZChDUFVf U0ExMTEwKSB8fCBcCiAgIGRlZmluZWQoQ1BVX1hTQ0FMRV84MDIwMCkgfHwgZGVmaW5lZChDUFVf WFNDQUxFXzgwMzIxKSB8fAkgICAgIFwKKyAgICBkZWZpbmVkKENQVV9GQTUyNikgfHwgXAogICBk ZWZpbmVkKENQVV9YU0NBTEVfUFhBMlgwKSB8fCBkZWZpbmVkKENQVV9YU0NBTEVfSVhQNDI1KSB8 fAkgICAgIFwKICAgZGVmaW5lZChDUFVfWFNDQUxFXzgwMjE5KSB8fCBkZWZpbmVkKENQVV9YU0NB TEVfODEzNDIpCiAgIApJbmRleDogYXJtL2Vjb25hL2Vjb25hX3Zhci5oCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t IGFybS9lY29uYS9lY29uYV92YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9lY29uYV92 YXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMp IDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4uCisgKiBBbGwgcmlnaHRz IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0 dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92 ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0 aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg QVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1Ig SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM TCBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElO RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwK KyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP RiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFO RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU CisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT RSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4K KyAqLworCisjaWZuZGVmCV9BUk1fRUNPTkFfVkFSX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9WQVJf SAorCitleHRlcm4gYnVzX3NwYWNlX3RhZ190IG9iaW9fdGFnOworCitzdHJ1Y3QgZWNvbmFfc29m dGMgeworCWRldmljZV90IGRldjsKKwlidXNfc3BhY2VfdGFnX3QgZWNfc3Q7CisJYnVzX3NwYWNl X2hhbmRsZV90IGVjX3NoOworCWJ1c19zcGFjZV9oYW5kbGVfdCBlY19zeXNfc2g7CisJYnVzX3Nw YWNlX2hhbmRsZV90IGVjX3N5c3RlbV9zaDsKKwlzdHJ1Y3Qgcm1hbiBlY19pcnFfcm1hbjsKKwlz dHJ1Y3Qgcm1hbiBlY19tZW1fcm1hbjsKK307CisKK3N0cnVjdCBlY29uYV9pdmFyIHsKKwlzdHJ1 Y3QgcmVzb3VyY2VfbGlzdCByZXNvdXJjZXM7Cit9OworCit2b2lkCXBvd2VyX29uX25ldHdvcmtf aW50ZXJmYWNlCSh2b2lkKTsKK3Vuc2lnbmVkIGludAlnZXRfdGNsawkodm9pZCk7CisKKworI2Vu ZGlmCkluZGV4OiBhcm0vZWNvbmEvZmlsZXMuZWNvbmEKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vjb25h L2ZpbGVzLmVjb25hCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2ZpbGVzLmVjb25hCShyZXZp c2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACisjICRGcmVlQlNEICQKK2FybS9hcm0vY3B1ZnVuY19h c21fZmE1MjYuUwlzdGFuZGFyZAorYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwkJc3RhbmRhcmQK K2FybS9lY29uYS9lY29uYS5jCQkJc3RhbmRhcmQKK2FybS9lY29uYS90aW1lci5jCQkJc3RhbmRh cmQKK2FybS9lY29uYS91YXJ0X2J1c19lYy5jCQlvcHRpb25hbAl1YXJ0Cithcm0vZWNvbmEvdWFy dF9jcHVfZWMuYwkJb3B0aW9uYWwJdWFydAorZGV2L3VhcnQvdWFydF9kZXZfbnM4MjUwLmMJb3B0 aW9uYWwJdWFydAorYXJtL2FybS9pcnFfZGlzcGF0Y2guUwkJc3RhbmRhcmQKK2FybS9hcm0vYnVz X3NwYWNlX2dlbmVyaWMuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9laGNpX2VidXMuYwlzdGFuZGFy ZAllaGNpCithcm0vZWNvbmEvb2hjaV9lYy5jCXN0YW5kYXJkCW9oY2kKK2FybS9lY29uYS9pZl9l Y2UuYwkJc3RhbmRhcmQKK2FybS9lY29uYS9jZmlfYnVzX2Vjb25hLmMJCW9wdGlvbmFsCWNmaQpJ bmRleDogYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAuYwo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEv ZWNvbmFfbWFjaGRlcC5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vjb25hX21hY2hkZXAu YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzOTYgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAy MDA5IFlvaGFuZXMgTnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBDb3B5cmlnaHQgKGMp IDE5OTQtMTk5OCBNYXJrIEJyaW5pY29tYmUuCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQgQnJpbmku CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZy b20gc29mdHdhcmUgd3JpdHRlbiBmb3IgQnJpbmkgYnkgTWFyayBCcmluaWNvbWJlCisgKgorICog UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0 aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u CisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3Ig dXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFj a25vd2xlZGdlbWVudDoKKyAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRl dmVsb3BlZCBieSBCcmluaS4KKyAqIDQuIFRoZSBuYW1lIG9mIHRoZSBjb21wYW55IG5vciB0aGUg bmFtZSBvZiB0aGUgYXV0aG9yIG1heSBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21v dGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYwor ICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg UFJPVklERUQgQlkgQlJJTkkgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisg KiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQg V0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIEJSSU5J IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwg SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ VFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElB QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ TkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICov CisKKyNpbmNsdWRlICJvcHRfbXNnYnVmLmgiCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f RkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2RlZmluZQlfQVJNMzJfQlVTX0RNQV9QUklWQVRFCisj aW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8 c3lzL3N5c3Byb3RvLmg+CisjaW5jbHVkZSA8c3lzL3NpZ25hbHZhci5oPgorI2luY2x1ZGUgPHN5 cy9pbWdhY3QuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL2t0ci5o PgorI2luY2x1ZGUgPHN5cy9saW5rZXIuaD4KKyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1 ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvbXV0ZXguaD4KKyNpbmNsdWRlIDxzeXMv cGNwdS5oPgorI2luY2x1ZGUgPHN5cy9wcm9jLmg+CisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPgor I2luY2x1ZGUgPHN5cy9jb25zLmg+CisjaW5jbHVkZSA8c3lzL2Jpby5oPgorI2luY2x1ZGUgPHN5 cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvYnVmLmg+CisjaW5jbHVkZSA8c3lzL2V4ZWMuaD4KKyNp bmNsdWRlIDxzeXMva2RiLmg+CisjaW5jbHVkZSA8c3lzL21zZ2J1Zi5oPgorI2luY2x1ZGUgPG1h Y2hpbmUvcmVnLmg+CisjaW5jbHVkZSA8bWFjaGluZS9jcHUuaD4KKworI2luY2x1ZGUgPHZtL3Zt Lmg+CisjaW5jbHVkZSA8dm0vcG1hcC5oPgorI2luY2x1ZGUgPHZtL3ZtX29iamVjdC5oPgorI2lu Y2x1ZGUgPHZtL3ZtX3BhZ2UuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdlci5oPgorI2luY2x1ZGUg PHZtL3ZtX21hcC5oPgorI2luY2x1ZGUgPHZtL3Zub2RlX3BhZ2VyLmg+CisjaW5jbHVkZSA8bWFj aGluZS9wbWFwLmg+CisjaW5jbHVkZSA8bWFjaGluZS92bXBhcmFtLmg+CisjaW5jbHVkZSA8bWFj aGluZS9wY2IuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3VuZGVmaW5lZC5oPgorI2luY2x1ZGUgPG1h Y2hpbmUvbWFjaGRlcC5oPgorI2luY2x1ZGUgPG1hY2hpbmUvbWV0YWRhdGEuaD4KKyNpbmNsdWRl IDxtYWNoaW5lL2FybXJlZy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8 c3lzL3JlYm9vdC5oPgorI2luY2x1ZGUgImVjb25hX3JlZy5oIgorCisvKiBQYWdlIHRhYmxlIGZv ciBtYXBwaW5nIHByb2MwIHplcm8gcGFnZSAqLworI2RlZmluZQlLRVJORUxfUFRfU1lTCQkwCisj ZGVmaW5lCUtFUk5FTF9QVF9LRVJOCQkxCisjZGVmaW5lCUtFUk5FTF9QVF9LRVJOX05VTQkyMgor LyogTDIgdGFibGUgZm9yIG1hcHBpbmcgYWZ0ZXIga2VybmVsICovCisjZGVmaW5lCUtFUk5FTF9Q VF9BRktFUk5FTAlLRVJORUxfUFRfS0VSTiArIEtFUk5FTF9QVF9LRVJOX05VTQorI2RlZmluZQlL RVJORUxfUFRfQUZLRVJORUxfTlVNCTUKKworLyogdGhpcyBzaG91bGQgYmUgZXZlbmx5IGRpdmlz YWJsZSBieSBQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwgKG9yIDQpICovCisjZGVmaW5l CU5VTV9LRVJORUxfUFRTCShLRVJORUxfUFRfQUZLRVJORUwgKyBLRVJORUxfUFRfQUZLRVJORUxf TlVNKQorCisvKiBEZWZpbmUgdmFyaW91cyBzdGFjayBzaXplcyBpbiBwYWdlcyAqLworI2RlZmlu ZQlJUlFfU1RBQ0tfU0laRQkxCisjZGVmaW5lCUFCVF9TVEFDS19TSVpFCTEKKyNkZWZpbmUJVU5E X1NUQUNLX1NJWkUJMQorCitleHRlcm4gdV9pbnQgZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3M7 CitleHRlcm4gdV9pbnQgcHJlZmV0Y2hfYWJvcnRfaGFuZGxlcl9hZGRyZXNzOworZXh0ZXJuIHVf aW50IHVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3M7CisKK3N0cnVjdCBwdl9hZGRyIGtlcm5lbF9w dF90YWJsZVtOVU1fS0VSTkVMX1BUU107CisKK2V4dGVybiB2b2lkICpfZW5kOworCitleHRlcm4g aW50ICplbmQ7CisKK3N0cnVjdCBwY3B1IF9fcGNwdTsKK3N0cnVjdCBwY3B1ICpwY3B1cCA9ICZf X3BjcHU7CisKKy8qIFBoeXNpY2FsIGFuZCB2aXJ0dWFsIGFkZHJlc3NlcyBmb3Igc29tZSBnbG9i YWwgcGFnZXMgKi8KKwordm1fcGFkZHJfdCBwaHlzX2F2YWlsWzEwXTsKK3ZtX3BhZGRyX3QgZHVt cF9hdmFpbFs0XTsKK3ZtX29mZnNldF90IHBoeXNpY2FsX3BhZ2VzOworCitzdHJ1Y3QgcHZfYWRk ciBzeXN0ZW1wYWdlOworc3RydWN0IHB2X2FkZHIgbXNnYnVmcHY7CitzdHJ1Y3QgcHZfYWRkciBp cnFzdGFjazsKK3N0cnVjdCBwdl9hZGRyIHVuZHN0YWNrOworc3RydWN0IHB2X2FkZHIgYWJ0c3Rh Y2s7CitzdHJ1Y3QgcHZfYWRkciBrZXJuZWxzdGFjazsKKworc3RhdGljIHZvaWQgKmJvb3RfYXJn MTsKK3N0YXRpYyB2b2lkICpib290X2FyZzI7CisKK3N0YXRpYyBzdHJ1Y3QgdHJhcGZyYW1lIHBy b2MwX3RmOworCisvKiBTdGF0aWMgZGV2aWNlIG1hcHBpbmdzLiAqLworc3RhdGljIGNvbnN0IHN0 cnVjdCBwbWFwX2Rldm1hcCBlY29uYV9kZXZtYXBbXSA9IHsKKwl7CisJCS8qCisJCSAqIFRoaXMg bWFwcyBERFIgU0RSQU0KKwkJICovCisJCUVDT05BX1NEUkFNX0JBU0UsIC8qdmlydHVhbCovCisJ CUVDT05BX1NEUkFNX0JBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9TRFJBTV9TSVpFLCAvKnNp emUqLworCQlWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwKKwkJUFRFX05PQ0FDSEUsCisJfSwK KwkvKgorCSAqIE1hcCB0aGUgb24tYm9hcmQgZGV2aWNlcyBWQSA9PSBQQSBzbyB0aGF0IHdlIGNh biBhY2Nlc3MgdGhlbQorCSAqIHdpdGggdGhlIE1NVSBvbiBvciBvZmYuCisJICovCisJeworCQkv KgorCQkgKiBUaGlzIG1hcHMgdGhlIGludGVycnVwdCBjb250cm9sbGVyLCB0aGUgVUFSVAorCQkg KiBhbmQgdGhlIHRpbWVyLgorCQkgKi8KKwkJRUNPTkFfSU9fQkFTRSwgLyp2aXJ0dWFsKi8KKwkJ RUNPTkFfSU9fQkFTRSwgLypwaHlzaWNhbCovCisJCUVDT05BX0lPX1NJWkUsIC8qc2l6ZSovCisJ CVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsKKwkJ LyoKKwkJICogT0hDSSArIEVIQ0kKKwkJICovCisJCUVDT05BX09IQ0lfVkJBU0UsIC8qdmlydHVh bCovCisJCUVDT05BX09IQ0lfUEJBU0UsIC8qcGh5c2ljYWwqLworCQlFQ09OQV9VU0JfU0laRSwg LypzaXplKi8KKwkJVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsCisJCVBURV9OT0NBQ0hFLAor CX0sCisJeworCQkvKgorCQkgKiBDRkkKKwkJICovCisJCUVDT05BX0NGSV9WQkFTRSwgLyp2aXJ0 dWFsKi8KKwkJRUNPTkFfQ0ZJX1BCQVNFLCAvKnBoeXNpY2FsKi8KKwkJRUNPTkFfQ0ZJX1NJWkUs CisJCVZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLAorCQlQVEVfTk9DQUNIRSwKKwl9LAorCXsK KwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwkJMCwKKwl9Cit9OworCisKK3ZvaWQgKgoraW5pdGFy bSh2b2lkICphcmcsIHZvaWQgKmFyZzIpCit7CisJc3RydWN0IHB2X2FkZHIgIGtlcm5lbF9sMXB0 OworCXZvbGF0aWxlIHVpbnQzMl90ICogZGRyID0gKHVpbnQzMl90ICopMHg0MDAwMDAwQzsKKwlp bnQgbG9vcCwgaTsKKwl1X2ludCBsMXBhZ2V0YWJsZTsKKwl2bV9vZmZzZXRfdCBhZnRlcmtlcm47 CisJdm1fb2Zmc2V0X3QgZnJlZW1lbXBvczsKKwl2bV9vZmZzZXRfdCBsYXN0YWRkcjsKKwl1aW50 MzJfdCBtZW1zaXplOworCWludCBtZW1faW5mbzsKKworCisJYm9vdF9hcmcxID0gYXJnOworCWJv b3RfYXJnMiA9IGFyZzI7CisJYm9vdGhvd3RvID0gUkJfVkVSQk9TRTsKKworCXNldF9jcHVmdW5j cygpOworCWxhc3RhZGRyID0gZmFrZV9wcmVsb2FkX21ldGFkYXRhKCk7CisJcGNwdV9pbml0KHBj cHVwLCAwLCBzaXplb2Yoc3RydWN0IHBjcHUpKTsKKwlQQ1BVX1NFVChjdXJ0aHJlYWQsICZ0aHJl YWQwKTsKKworCisJZnJlZW1lbXBvcyA9IChsYXN0YWRkciArIFBBR0VfTUFTSykgJiB+UEFHRV9N QVNLOworCS8qIERlZmluZSBhIG1hY3JvIHRvIHNpbXBsaWZ5IG1lbW9yeSBhbGxvY2F0aW9uICov CisjZGVmaW5lCXZhbGxvY19wYWdlcyh2YXIsIG5wKSAgICAgICAgICAgICAgICAgICBcCisJYWxs b2NfcGFnZXMoKHZhcikucHZfdmEsIChucCkpOyAgICAgICAgIFwKKwkodmFyKS5wdl9wYSA9ICh2 YXIpLnB2X3ZhICsgKEtFUk5QSFlTQUREUiAtIEtFUk5WSVJUQUREUik7CisKKyNkZWZpbmUJYWxs b2NfcGFnZXModmFyLCBucCkJCQlcCisJKHZhcikgPSBmcmVlbWVtcG9zOwkJXAorCWZyZWVtZW1w b3MgKz0gKG5wICogUEFHRV9TSVpFKTsJCVwKKwltZW1zZXQoKGNoYXIgKikodmFyKSwgMCwgKChu cCkgKiBQQUdFX1NJWkUpKTsKKworCXdoaWxlICgoKGZyZWVtZW1wb3MgLSBMMV9UQUJMRV9TSVpF KSAmIChMMV9UQUJMRV9TSVpFIC0gMSkpICE9IDApCisJCWZyZWVtZW1wb3MgKz0gUEFHRV9TSVpF OworCXZhbGxvY19wYWdlcyhrZXJuZWxfbDFwdCwgTDFfVEFCTEVfU0laRSAvIFBBR0VfU0laRSk7 CisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyArK2xvb3ApIHsKKwkJaWYg KCEobG9vcCAlIChQQUdFX1NJWkUgLyBMMl9UQUJMRV9TSVpFX1JFQUwpKSkgeworCQkJdmFsbG9j X3BhZ2VzKGtlcm5lbF9wdF90YWJsZVtsb29wXSwKKwkJCSAgICBMMl9UQUJMRV9TSVpFIC8gUEFH RV9TSVpFKTsKKwkJfSBlbHNlIHsKKwkJCWtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSA9IGZy ZWVtZW1wb3MgLQorCQkJICAgIChsb29wICUgKFBBR0VfU0laRSAvIEwyX1RBQkxFX1NJWkVfUkVB TCkpICoKKwkJCSAgICBMMl9UQUJMRV9TSVpFX1JFQUw7CisJCQlrZXJuZWxfcHRfdGFibGVbbG9v cF0ucHZfcGEgPQorCQkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl92YSAtIEtFUk5WSVJU QUREUiArCisJCQkgICAgS0VSTlBIWVNBRERSOworCQl9CisJCWkrKzsKKwl9CisJLyoKKwkgKiBB bGxvY2F0ZSBhIHBhZ2UgZm9yIHRoZSBzeXN0ZW0gcGFnZSBtYXBwZWQgdG8gVjB4MDAwMDAwMDAK KwkgKiBUaGlzIHBhZ2Ugd2lsbCBqdXN0IGNvbnRhaW4gdGhlIHN5c3RlbSB2ZWN0b3JzIGFuZCBj YW4gYmUKKwkgKiBzaGFyZWQgYnkgYWxsIHByb2Nlc3Nlcy4KKwkgKi8KKwl2YWxsb2NfcGFnZXMo c3lzdGVtcGFnZSwgMSk7CisKKwkvKiBBbGxvY2F0ZSBzdGFja3MgZm9yIGFsbCBtb2RlcyAqLwor CXZhbGxvY19wYWdlcyhpcnFzdGFjaywgSVJRX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhh YnRzdGFjaywgQUJUX1NUQUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyh1bmRzdGFjaywgVU5EX1NU QUNLX1NJWkUpOworCXZhbGxvY19wYWdlcyhrZXJuZWxzdGFjaywgS1NUQUNLX1BBR0VTKTsKKwl2 YWxsb2NfcGFnZXMobXNnYnVmcHYsIHJvdW5kX3BhZ2UoTVNHQlVGX1NJWkUpIC8gUEFHRV9TSVpF KTsKKworCS8qCisJICogTm93IHdlIHN0YXJ0IGNvbnN0cnVjdGlvbiBvZiB0aGUgTDEgcGFnZSB0 YWJsZQorCSAqIFdlIHN0YXJ0IGJ5IG1hcHBpbmcgdGhlIEwyIHBhZ2UgdGFibGVzIGludG8gdGhl IEwxLgorCSAqIFRoaXMgbWVhbnMgdGhhdCB3ZSBjYW4gcmVwbGFjZSBMMSBtYXBwaW5ncyBsYXRl ciBvbiBpZiBuZWNlc3NhcnkKKwkgKi8KKwlsMXBhZ2V0YWJsZSA9IGtlcm5lbF9sMXB0LnB2X3Zh OworCisJLyogTWFwIHRoZSBMMiBwYWdlcyB0YWJsZXMgaW4gdGhlIEwxIHBhZ2UgdGFibGUgKi8K KwlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgQVJNX1ZFQ1RPUlNfSElHSCwKKwkgICAgJmtl cm5lbF9wdF90YWJsZVtLRVJORUxfUFRfU1lTXSk7CisJZm9yIChpID0gMDsgaSA8IEtFUk5FTF9Q VF9LRVJOX05VTTsgaSsrKQorCQlwbWFwX2xpbmtfbDJwdChsMXBhZ2V0YWJsZSwgS0VSTkJBU0Ug KyBpICogTDFfU19TSVpFLAorCQkgICAgJmtlcm5lbF9wdF90YWJsZVtLRVJORUxfUFRfS0VSTiAr IGldKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJsZSwgS0VSTkJBU0UsIFBIWVNBRERSLAor CSAgICgoKHVpbnQzMl90KWxhc3RhZGRyIC0gS0VSTkJBU0UpICsgUEFHRV9TSVpFKSAmIH4oUEFH RV9TSVpFIC0gMSksCisJICAgIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfQ0FDSEUp OworCWFmdGVya2VybiA9IHJvdW5kX3BhZ2UoKGxhc3RhZGRyICsgTDFfU19TSVpFKSAmIH4oTDFf U19TSVpFIC0gMSkpOworCWZvciAoaSA9IDA7IGkgPCBLRVJORUxfUFRfQUZLRVJORUxfTlVNOyBp KyspIHsKKwkJcG1hcF9saW5rX2wycHQobDFwYWdldGFibGUsIGFmdGVya2VybiArIGkgKiBMMV9T X1NJWkUsCisJCSAgICAma2VybmVsX3B0X3RhYmxlW0tFUk5FTF9QVF9BRktFUk5FTCArIGldKTsK Kwl9CisKKwkvKiBNYXAgdGhlIHZlY3RvciBwYWdlLiAqLworCXBtYXBfbWFwX2VudHJ5KGwxcGFn ZXRhYmxlLCBBUk1fVkVDVE9SU19ISUdILCBzeXN0ZW1wYWdlLnB2X3BhLAorCSAgICBWTV9QUk9U X1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKworCisJLyogTWFwIHRoZSBzdGFjayBw YWdlcyAqLworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBpcnFzdGFjay5wdl92YSwgaXJx c3RhY2sucHZfcGEsCisJICAgIElSUV9TVEFDS19TSVpFICogUEFHRV9TSVpFLCBWTV9QUk9UX1JF QUR8Vk1fUFJPVF9XUklURSwgUFRFX0NBQ0hFKTsKKwlwbWFwX21hcF9jaHVuayhsMXBhZ2V0YWJs ZSwgYWJ0c3RhY2sucHZfdmEsIGFidHN0YWNrLnB2X3BhLAorCSAgICBBQlRfU1RBQ0tfU0laRSAq IFBBR0VfU0laRSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisJcG1h cF9tYXBfY2h1bmsobDFwYWdldGFibGUsIHVuZHN0YWNrLnB2X3ZhLCB1bmRzdGFjay5wdl9wYSwK KwkgICAgVU5EX1NUQUNLX1NJWkUgKiBQQUdFX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dS SVRFLCBQVEVfQ0FDSEUpOworCXBtYXBfbWFwX2NodW5rKGwxcGFnZXRhYmxlLCBrZXJuZWxzdGFj ay5wdl92YSwga2VybmVsc3RhY2sucHZfcGEsCisJICAgIEtTVEFDS19QQUdFUyAqIFBBR0VfU0la RSwgVk1fUFJPVF9SRUFEfFZNX1BST1RfV1JJVEUsIFBURV9DQUNIRSk7CisKKwlwbWFwX21hcF9j aHVuayhsMXBhZ2V0YWJsZSwga2VybmVsX2wxcHQucHZfdmEsIGtlcm5lbF9sMXB0LnB2X3BhLAor CSAgICBMMV9UQUJMRV9TSVpFLCBWTV9QUk9UX1JFQUR8Vk1fUFJPVF9XUklURSwgUFRFX1BBR0VU QUJMRSk7CisJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIG1zZ2J1ZnB2LnB2X3ZhLCBtc2di dWZwdi5wdl9wYSwKKwkgICAgTVNHQlVGX1NJWkUsIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRF LCBQVEVfQ0FDSEUpOworCisJZm9yIChsb29wID0gMDsgbG9vcCA8IE5VTV9LRVJORUxfUFRTOyAr K2xvb3ApIHsKKwkJcG1hcF9tYXBfY2h1bmsobDFwYWdldGFibGUsIGtlcm5lbF9wdF90YWJsZVts b29wXS5wdl92YSwKKwkJICAgIGtlcm5lbF9wdF90YWJsZVtsb29wXS5wdl9wYSwgTDJfVEFCTEVf U0laRSwKKwkJICAgIFZNX1BST1RfUkVBRHxWTV9QUk9UX1dSSVRFLCBQVEVfUEFHRVRBQkxFKTsK Kwl9CisKKwlwbWFwX2Rldm1hcF9ib290c3RyYXAobDFwYWdldGFibGUsIGVjb25hX2Rldm1hcCk7 CisJY3B1X2RvbWFpbnMoKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tFUk5FTCoyKSkg fCBET01BSU5fQ0xJRU5UKTsKKwlzZXR0dGIoa2VybmVsX2wxcHQucHZfcGEpOworCWNwdV90bGJf Zmx1c2hJRCgpOworCWNwdV9kb21haW5zKERPTUFJTl9DTElFTlQgPDwgKFBNQVBfRE9NQUlOX0tF Uk5FTCoyKSk7CisJY25pbml0KCk7CisJbWVtX2luZm8gPSAoKCpkZHIpID4+IDQpICYgMHgzOwor CW1lbXNpemUgPSAoODw8bWVtX2luZm8pKjEwMjQqMTAyNDsKKwlwaHlzbWVtID0gbWVtc2l6ZSAv IFBBR0VfU0laRTsKKworCS8qCisJICogUGFnZXMgd2VyZSBhbGxvY2F0ZWQgZHVyaW5nIHRoZSBz ZWNvbmRhcnkgYm9vdHN0cmFwIGZvciB0aGUKKwkgKiBzdGFja3MgZm9yIGRpZmZlcmVudCBDUFUg bW9kZXMuCisJICogV2UgbXVzdCBub3cgc2V0IHRoZSByMTMgcmVnaXN0ZXJzIGluIHRoZSBkaWZm ZXJlbnQgQ1BVIG1vZGVzIHRvCisJICogcG9pbnQgdG8gdGhlc2Ugc3RhY2tzLgorCSAqIFNpbmNl IHRoZSBBUk0gc3RhY2tzIHVzZSBTVE1GRCBldGMuIHdlIG11c3Qgc2V0IHIxMyB0byB0aGUgdG9w IGVuZAorCSAqIG9mIHRoZSBzdGFjayBtZW1vcnkuCisJICovCisJY3B1X2NvbnRyb2woQ1BVX0NP TlRST0xfTU1VX0VOQUJMRSwgQ1BVX0NPTlRST0xfTU1VX0VOQUJMRSk7CisKKwlzZXRfc3RhY2tw dHIoUFNSX0lSUTMyX01PREUsCisJICAgIGlycXN0YWNrLnB2X3ZhICsgSVJRX1NUQUNLX1NJWkUg KiBQQUdFX1NJWkUpOworCXNldF9zdGFja3B0cihQU1JfQUJUMzJfTU9ERSwKKwkgICAgYWJ0c3Rh Y2sucHZfdmEgKyBBQlRfU1RBQ0tfU0laRSAqIFBBR0VfU0laRSk7CisJc2V0X3N0YWNrcHRyKFBT Ul9VTkQzMl9NT0RFLAorCSAgICB1bmRzdGFjay5wdl92YSArIFVORF9TVEFDS19TSVpFICogUEFH RV9TSVpFKTsKKworCS8qCisJICogV2UgbXVzdCBub3cgY2xlYW4gdGhlIGNhY2hlIGFnYWluLi4u LgorCSAqIENsZWFuaW5nIG1heSBiZSBkb25lIGJ5IHJlYWRpbmcgbmV3IGRhdGEgdG8gZGlzcGxh Y2UgYW55CisJICogZGlydHkgZGF0YSBpbiB0aGUgY2FjaGUuIFRoaXMgd2lsbCBoYXZlIGhhcHBl bmVkIGluIHNldHR0YigpCisJICogYnV0IHNpbmNlIHdlIGFyZSBib290IHN0cmFwcGluZyB0aGUg YWRkcmVzc2VzIHVzZWQgZm9yIHRoZSByZWFkCisJICogbWF5IGhhdmUganVzdCBiZWVuIHJlbWFw cGVkIGFuZCB0aHVzIHRoZSBjYWNoZSBjb3VsZCBiZSBvdXQKKwkgKiBvZiBzeW5jLiBBIHJlLWNs ZWFuIGFmdGVyIHRoZSBzd2l0Y2ggd2lsbCBjdXJlIHRoaXMuCisJICogQWZ0ZXIgYm9vdGluZyB0 aGVyZSBhcmUgbm8gZ3Jvc3MgcmVsb2NhdGlvbnMgb2YgdGhlIGtlcm5lbCB0aHVzCisJICogdGhp cyBwcm9ibGVtIHdpbGwgbm90IG9jY3VyIGFmdGVyIGluaXRhcm0oKS4KKwkgKi8KKwljcHVfaWRj YWNoZV93Ymludl9hbGwoKTsKKworCS8qIFNldCBzdGFjayBmb3IgZXhjZXB0aW9uIGhhbmRsZXJz ICovCisJZGF0YV9hYm9ydF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpZGF0YV9hYm9ydF9oYW5k bGVyOworCXByZWZldGNoX2Fib3J0X2hhbmRsZXJfYWRkcmVzcyA9ICh1X2ludClwcmVmZXRjaF9h Ym9ydF9oYW5kbGVyOworCXVuZGVmaW5lZF9oYW5kbGVyX2FkZHJlc3MgPSAodV9pbnQpdW5kZWZp bmVkaW5zdHJ1Y3Rpb25fYm91bmNlOworCXVuZGVmaW5lZF9pbml0KCk7CisKKwlwcm9jX2xpbmt1 cDAoJnByb2MwLCAmdGhyZWFkMCk7CisJdGhyZWFkMC50ZF9rc3RhY2sgPSBrZXJuZWxzdGFjay5w dl92YTsKKwl0aHJlYWQwLnRkX3BjYiA9IChzdHJ1Y3QgcGNiICopCisJCSh0aHJlYWQwLnRkX2tz dGFjayArIEtTVEFDS19QQUdFUyAqIFBBR0VfU0laRSkgLSAxOworCXRocmVhZDAudGRfcGNiLT5w Y2JfZmxhZ3MgPSAwOworCXRocmVhZDAudGRfZnJhbWUgPSAmcHJvYzBfdGY7CisJcGNwdXAtPnBj X2N1cnBjYiA9IHRocmVhZDAudGRfcGNiOworCisJYXJtX3ZlY3Rvcl9pbml0KEFSTV9WRUNUT1JT X0hJR0gsIEFSTV9WRUNfQUxMKTsKKworCXBtYXBfY3VybWF4a3ZhZGRyID0gYWZ0ZXJrZXJuICsg TDFfU19TSVpFICogKEtFUk5FTF9QVF9LRVJOX05VTSAtIDEpOworCisJLyoKKwkgKiBBUk1fVVNF X1NNQUxMX0FMTE9DIHVzZXMgZHVtcF9hdmFpbCwgc28gaXQgbXVzdCBiZSBmaWxsZWQgYmVmb3Jl CisJICogY2FsbGluZyBwbWFwX2Jvb3RzdHJhcC4KKwkgKi8KKwlkdW1wX2F2YWlsWzBdID0gUEhZ U0FERFI7CisJZHVtcF9hdmFpbFsxXSA9IFBIWVNBRERSICsgbWVtc2l6ZTsKKwlkdW1wX2F2YWls WzJdID0gMDsKKwlkdW1wX2F2YWlsWzNdID0gMDsKKworCXBtYXBfYm9vdHN0cmFwKGZyZWVtZW1w b3MsCisJICAgIEtFUk5WSVJUQUREUiArIDMgKiBtZW1zaXplLAorCSAgICAma2VybmVsX2wxcHQp OworCisJbXNnYnVmcCA9ICh2b2lkKiltc2didWZwdi5wdl92YTsKKwltc2didWZpbml0KG1zZ2J1 ZnAsIE1TR0JVRl9TSVpFKTsKKworCW11dGV4X2luaXQoKTsKKworCWkgPSAwOworI2lmIFBIWVNB RERSICE9IEtFUk5QSFlTQUREUgorCXBoeXNfYXZhaWxbaSsrXSA9IFBIWVNBRERSOworCXBoeXNf YXZhaWxbaSsrXSA9IEtFUk5QSFlTQUREUjsKKyNlbmRpZgorCXBoeXNfYXZhaWxbaSsrXSA9IHZp cnR1YWxfYXZhaWwgLSBLRVJOVklSVEFERFIgKyBLRVJOUEhZU0FERFI7CisKKwlwaHlzX2F2YWls W2krK10gPSBQSFlTQUREUiArIG1lbXNpemU7CisJcGh5c19hdmFpbFtpKytdID0gMDsKKwlwaHlz X2F2YWlsW2krK10gPSAwOworCS8qIERvIGJhc2ljIHR1bmluZywgaHogZXRjICovCisJaW5pdF9w YXJhbTEoKTsKKwlpbml0X3BhcmFtMihwaHlzbWVtKTsKKwlrZGJfaW5pdCgpOworCisJcmV0dXJu ICgodm9pZCAqKShrZXJuZWxzdGFjay5wdl92YSArIFVTUEFDRV9TVkNfU1RBQ0tfVE9QIC0KKwkg ICAgc2l6ZW9mKHN0cnVjdCBwY2IpKSk7Cit9CkluZGV4OiBhcm0vZWNvbmEvaWZfZWNlLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gYXJtL2Vjb25hL2lmX2VjZS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25h L2lmX2VjZS5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5NDggQEAKKy8qLQorICogQ29weXJp 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 TUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVCU0Q6 IHNyYy9zeXMvYXJtL2Vjb25hL2lmX2VjZS5jJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+ CisjaW5jbHVkZSA8c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUg PHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbWJ1Zi5oPgorI2luY2x1ZGUgPHN5cy9tYWxs b2MuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisjaW5jbHVkZSA8c3lzL3JtYW4uaD4KKyNp bmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgorI2luY2x1ZGUg PHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGFza3F1ZXVlLmg+CisKKyNpbmNsdWRlIDxu ZXQvZXRoZXJuZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfYXJw Lmg+CisjaW5jbHVkZSA8bmV0L2lmX2RsLmg+CisjaW5jbHVkZSA8bmV0L2lmX21lZGlhLmg+Cisj aW5jbHVkZSA8bmV0L2lmX3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0L2lmX3ZsYW5fdmFyLmg+CisK KyNpZmRlZiBJTkVUCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQv aW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3Zhci5oPgorI2luY2x1ZGUgPG5ldGlu ZXQvaXAuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0L2JwZi5oPgorI2luY2x1ZGUgPG5ldC9i cGZkZXNjLmg+CisKKyNpbmNsdWRlIDxkZXYvbWlpL21paS5oPgorI2luY2x1ZGUgPGRldi9taWkv bWlpdmFyLmg+CisKKyNpbmNsdWRlIDxhcm0vZWNvbmEvaWZfZWNlcmVnLmg+CisjaW5jbHVkZSA8 YXJtL2Vjb25hL2lmX2VjZXZhci5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV92YXIuaD4K KworI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRyLmg+CisK Ky8qICJkZXZpY2UgbWlpYnVzIiByZXF1aXJlZC4gIFNlZSBHRU5FUklDIGlmIHlvdSBnZXQgZXJy b3JzIGhlcmUuICovCisjaW5jbHVkZSAibWlpYnVzX2lmLmgiCisKK3N0YXRpYyB1aW50OF90Cit2 bGFuMF9tYWNbRVRIRVJfQUREUl9MRU5dID0gezB4MDAsIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQs IDB4MTl9OworCisvKgorICogQm9vdCBsb2FkZXIgZXhwZWN0cyB0aGUgaGFyZHdhcmUgc3RhdGUg dG8gYmUgdGhlIHNhbWUgd2hlbiB3ZQorICogcmVzdGFydCB0aGUgZGV2aWNlICh3YXJtIGJvb3Qp LCBzbyB3ZSBuZWVkIHRvIHNhdmUgdGhlIGluaXRpYWwKKyAqIGNvbmZpZyB2YWx1ZXMuCisgKi8K K2ludCBpbml0aWFsX3N3aXRjaF9jb25maWc7CitpbnQgaW5pdGlhbF9jcHVfY29uZmlnOworaW50 IGluaXRpYWxfcG9ydDBfY29uZmlnOworaW50IGluaXRpYWxfcG9ydDFfY29uZmlnOworCitzdGF0 aWMgaW5saW5lIHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGJ1c19zaXpl X3Qgb2ZmKQoreworCisJcmV0dXJuIChidXNfcmVhZF80KHNjLT5tZW1fcmVzLCBvZmYpKTsKK30K Kworc3RhdGljIGlubGluZSB2b2lkCit3cml0ZV80KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBidXNf c2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQoreworCisJYnVzX3dyaXRlXzQoc2MtPm1lbV9yZXMs IG9mZiwgdmFsKTsKK30KKworI2RlZmluZQlFQ0VfTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYykt PnNjX210eCkKKyNkZWZpbmUJRUNFX1VOTE9DSyhfc2MpCQltdHhfdW5sb2NrKCYoX3NjKS0+c2Nf bXR4KQorI2RlZmluZQlFQ0VfTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210 eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJIE1UWF9ORVRXT1JLX0xPQ0ss IE1UWF9ERUYpCisKKyNkZWZpbmUJRUNFX1RYTE9DSyhfc2MpCQltdHhfbG9jaygmKF9zYyktPnNj X210eF90eCkKKyNkZWZpbmUJRUNFX1RYVU5MT0NLKF9zYykJCW10eF91bmxvY2soJihfc2MpLT5z Y19tdHhfdHgpCisjZGVmaW5lCUVDRV9UWExPQ0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3Nj LT5zY19tdHhfdHgsIGRldmljZV9nZXRfbmFtZXVuaXQoX3NjLT5kZXYpLAlcCisJCSAiRUNFIFRY IExvY2siLCBNVFhfREVGKQorCisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DSyhfc2MpCW10eF9sb2Nr KCYoX3NjKS0+c2NfbXR4X2NsZWFudXApCisjZGVmaW5lCUVDRV9DTEVBTlVQVU5MT0NLKF9zYykJ bXR4X3VubG9jaygmKF9zYyktPnNjX210eF9jbGVhbnVwKQorI2RlZmluZQlFQ0VfQ0xFQU5VUExP Q0tfSU5JVChfc2MpIFwKKwltdHhfaW5pdCgmX3NjLT5zY19tdHhfY2xlYW51cCwgZGV2aWNlX2dl dF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgY2xlYW51cCBMb2NrIiwgTVRYX0RFRikK KworI2RlZmluZQlFQ0VfUlhMT0NLKF9zYykJCW10eF9sb2NrKCYoX3NjKS0+c2NfbXR4X3J4KQor I2RlZmluZQlFQ0VfUlhVTkxPQ0soX3NjKQkJbXR4X3VubG9jaygmKF9zYyktPnNjX210eF9yeCkK KyNkZWZpbmUJRUNFX1JYTE9DS19JTklUKF9zYykgXAorCW10eF9pbml0KCZfc2MtPnNjX210eF9y eCwgZGV2aWNlX2dldF9uYW1ldW5pdChfc2MtPmRldiksCVwKKwkJICJFQ0UgUlggTG9jayIsIE1U WF9ERUYpCisKKyNkZWZpbmUJRUNFX0xPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZfc2Mt PnNjX210eCk7CisjZGVmaW5lCUVDRV9UWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0cm95KCZf c2MtPnNjX210eF90eCk7CisjZGVmaW5lCUVDRV9SWExPQ0tfREVTVFJPWShfc2MpCW10eF9kZXN0 cm95KCZfc2MtPnNjX210eF9yeCk7CisjZGVmaW5lCUVDRV9DTEVBTlVQTE9DS19ERVNUUk9ZKF9z YykJXAorCW10eF9kZXN0cm95KCZfc2MtPnNjX210eF9jbGVhbnVwKTsKKworI2RlZmluZQlFQ0Vf QVNTRVJUX0xPQ0tFRChfc2MpCW10eF9hc3NlcnQoJl9zYy0+c2NfbXR4LCBNQV9PV05FRCk7Cisj ZGVmaW5lCUVDRV9BU1NFUlRfVU5MT0NLRUQoX3NjKSBtdHhfYXNzZXJ0KCZfc2MtPnNjX210eCwg TUFfTk9UT1dORUQpOworCitzdGF0aWMgZGV2Y2xhc3NfdCBlY2VfZGV2Y2xhc3M7CisKKy8qIGlm bmV0IGVudHJ5IHBvaW50cyAqLworCitzdGF0aWMgdm9pZAllY2Vpbml0X2xvY2tlZCh2b2lkICop Oworc3RhdGljIHZvaWQJZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqKTsKKworc3RhdGlj IHZvaWQJZWNlaW5pdCh2b2lkICopOworc3RhdGljIHZvaWQJZWNlc3RhcnQoc3RydWN0IGlmbmV0 ICopOworc3RhdGljIHZvaWQJZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICopOworc3RhdGljIGlu dAllY2Vpb2N0bChzdHJ1Y3QgaWZuZXQgKiBpZnAsIHVfbG9uZywgY2FkZHJfdCk7CisKKy8qIGJ1 cyBlbnRyeSBwb2ludHMgKi8KKworc3RhdGljIGludAllY2VfcHJvYmUoZGV2aWNlX3QgZGV2KTsK K3N0YXRpYyBpbnQJZWNlX2F0dGFjaChkZXZpY2VfdCBkZXYpOworc3RhdGljIGludAllY2VfZGV0 YWNoKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZAllY2VfaW50cih2b2lkICopOworc3RhdGlj IHZvaWQJZWNlX2ludHJfcWYodm9pZCAqKTsKK3N0YXRpYyB2b2lkCWVjZV9pbnRyX3N0YXR1cyh2 b2lkICp4c2MpOworCisvKiBoZWxwZXIgcm91dGluZXMgKi8KK3N0YXRpYyBpbnQJZWNlX2FjdGl2 YXRlKGRldmljZV90IGRldik7CitzdGF0aWMgdm9pZAllY2VfZGVhY3RpdmF0ZShkZXZpY2VfdCBk ZXYpOworc3RhdGljIGludAllY2VfaWZtZWRpYV91cGQoc3RydWN0IGlmbmV0ICppZnApOworc3Rh dGljIHZvaWQJZWNlX2lmbWVkaWFfc3RzKHN0cnVjdCBpZm5ldCAqaWZwLCBzdHJ1Y3QgaWZtZWRp YXJlcSAqaWZtcik7CitzdGF0aWMgaW50CWVjZV9nZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNj LCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyB2b2lkCWVjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29m dGMgKnNjLCB1X2NoYXIgKmVhZGRyKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2NwdV9wb3J0KHN0 cnVjdCBlY2Vfc29mdGMgKnNjKTsKK3N0YXRpYyBpbnQJY29uZmlndXJlX2xhbl9wb3J0KHN0cnVj dCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpOworc3RhdGljIHZvaWQJc2V0X3B2aWQoc3Ry dWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwgaW50IHBvcnQxLCBpbnQgY3B1KTsKK3N0YXRp YyB2b2lkCXNldF92bGFuX3ZpZChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgaW50IHZsYW4pOworc3Rh dGljIHZvaWQJc2V0X3ZsYW5fbWVtYmVyKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgdmxhbik7 CitzdGF0aWMgdm9pZAlzZXRfdmxhbl90YWcoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFu KTsKK3N0YXRpYyBpbnQJaGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYyk7CitzdGF0 aWMgdm9pZAllY2VfaW50cl9yeF9sb2NrZWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBjb3Vu dCk7CisKK3N0YXRpYyB2b2lkCWVjZV9mcmVlX2Rlc2NfZG1hX3R4KHN0cnVjdCBlY2Vfc29mdGMg KnNjKTsKK3N0YXRpYyB2b2lkCWVjZV9mcmVlX2Rlc2NfZG1hX3J4KHN0cnVjdCBlY2Vfc29mdGMg KnNjKTsKKworc3RhdGljIHZvaWQJZWNlX2ludHJfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5n IF9fdW51c2VkKTsKK3N0YXRpYyB2b2lkCWVjZV90eF90YXNrKHZvaWQgKmFyZywgaW50IHBlbmRp bmcgX191bnVzZWQpOworc3RhdGljIHZvaWQJZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGlu dCBwZW5kaW5nIF9fdW51c2VkKTsKKworc3RhdGljIGludAllY2VfYWxsb2NhdGVfZG1hKHN0cnVj dCBlY2Vfc29mdGMgKnNjKTsKKworc3RhdGljIHZvaWQJZWNlX2ludHJfdHgodm9pZCAqeHNjKTsK Kworc3RhdGljIHZvaWQJY2xlYXJfbWFjX2VudHJpZXMoc3RydWN0IGVjZV9zb2Z0YyAqZWMsIGlu dCBpbmNsdWRlX3RoaXNfbWFjKTsKKworc3RhdGljIHVpbnQzMl90IHJlYWRfbWFjX2VudHJ5KHN0 cnVjdCBlY2Vfc29mdGMgKmVjLAorCSAgICB1aW50OF90ICptYWNfcmVzdWx0LAorCSAgICBpbnQg Zmlyc3QpOworCisvKlBIWSByZWxhdGVkIGZ1bmN0aW9ucyovCitzdGF0aWMgaW5saW5lIGludAor cGh5X3JlYWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwaHksIGludCByZWcpCit7CisJaW50 IHZhbDsKKwlpbnQgaWk7CisJaW50IHN0YXR1czsKKworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9M LCBQSFlfUldfT0spOworCXdyaXRlXzQoc2MsIFBIWV9DT05UUk9MLAorCSAgICAoUEhZX0FERFJF U1MocGh5KXxQSFlfUkVBRF9DT01NQU5EIHwKKwkgICAgUEhZX1JFR0lTVEVSKHJlZykpKTsKKwor CWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykgeworCQlzdGF0dXMgPSByZWFkXzQoc2Ms IFBIWV9DT05UUk9MKTsKKwkJaWYgKHN0YXR1cyAmIFBIWV9SV19PSykgeworCQkJLyogQ2xlYXIg dGhlIHJ3X29rIHN0YXR1cywgYW5kIGNsZWFyIG90aGVyCisJCQkgKiBiaXRzIHZhbHVlLiAqLwor CQkJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQl2YWwgPSBQSFlfR0VU X0RBVEEoc3RhdHVzKTsKKwkJCXJldHVybiAodmFsKTsKKwkJfQorCX0KKwlyZXR1cm4gKDApOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3BoeV93cml0ZShzdHJ1Y3QgZWNlX3NvZnRjICpzYywg aW50IHBoeSwgaW50IHJlZywgaW50IGRhdGEpCit7CisJaW50IGlpOworCisJd3JpdGVfNChzYywg UEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsCisJICAg IFBIWV9BRERSRVNTKHBoeSkgfCBQSFlfUkVHSVNURVIocmVnKSB8CisJICAgIFBIWV9XUklURV9D T01NQU5EIHwgUEhZX0RBVEEoZGF0YSkpOworCWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkr KykgeworCQlpZiAocmVhZF80KHNjLCBQSFlfQ09OVFJPTCkgJiBQSFlfUldfT0spIHsKKwkJCS8q IENsZWFyIHRoZSByd19vayBzdGF0dXMsIGFuZCBjbGVhciBvdGhlcgorCQkJICogYml0cyB2YWx1 ZS4KKwkJCSAqLworCQkJd3JpdGVfNChzYywgUEhZX0NPTlRST0wsIFBIWV9SV19PSyk7CisJCQly ZXR1cm47CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgZ2V0X3BoeV90eXBlKHN0cnVjdCBlY2Vf c29mdGMgKnNjKQoreworCXVpbnQxNl90IHBoeTBfaWQgPSAwLCBwaHkxX2lkID0gMDsKKworCS8q CisJICogVXNlIFNNSSAoTURDL01ESU8pIHRvIHJlYWQgTGluayBQYXJ0bmVyJ3MgUEhZIElkZW50 aWZpZXIKKwkgKiBSZWdpc3RlciAxLgorCSAqLworCXBoeTBfaWQgPSBwaHlfcmVhZChzYywgMCwg MHgyKTsKKwlwaHkxX2lkID0gcGh5X3JlYWQoc2MsIDEsIDB4Mik7CisKKwlpZiAoKHBoeTBfaWQg PT0gMHhGRkZGKSAmJiAocGh5MV9pZCA9PSAweDAwMEYpKQorCQlyZXR1cm4gKEFTSVhfR0lHQV9Q SFkpOworCWVsc2UgaWYgKChwaHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHgwMjQz KSkKKwkJcmV0dXJuIChUV09fU0lOR0xFX1BIWSk7CisJZWxzZSBpZiAoKHBoeTBfaWQgPT0gMHhG RkZGKSAmJiAocGh5MV9pZCA9PSAweDAwMDcpKQorCQlyZXR1cm4gKFZTQzg2MDFfR0lHQV9QSFkp OworCWVsc2UgaWYgKChwaHkwX2lkID09IDB4MDI0MykgJiYgKHBoeTFfaWQgPT0gMHhGRkZGKSkK KwkJcmV0dXJuIChJQ19QTFVTX1BIWSk7CisKKwlyZXR1cm4gKE5PVF9GT1VORF9QSFkpOworfQor CitzdGF0aWMgaW50CitlY2VfcHJvYmUoZGV2aWNlX3QgZGV2KQoreworCisJZGV2aWNlX3NldF9k ZXNjKGRldiwgIkVjb25hIEV0aGVybmV0IENvbnRyb2xsZXIiKTsKKwlyZXR1cm4gKDApOworfQor CisKK3N0YXRpYyBpbnQKK2VjZV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY2Vf c29mdGMgKnNjOworCXN0cnVjdCBpZm5ldCAqaWZwID0gTlVMTDsKKwlzdHJ1Y3Qgc3lzY3RsX2N0 eF9saXN0ICpzY3R4OworCXN0cnVjdCBzeXNjdGxfb2lkICpzb2lkOworCXVfY2hhciBlYWRkcltF VEhFUl9BRERSX0xFTl07CisJaW50IGVycjsKKwlpbnQgaSwgcmlkOworCXVpbnQzMl90IHJuZDsK KworCWVyciA9IDA7CisKKwlzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKworCXNjLT5kZXYg PSBkZXY7CisKKwlyaWQgPSAwOworCXNjLT5tZW1fcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2Fu eShkZXYsIFNZU19SRVNfTUVNT1JZLCAmcmlkLAorCQkgICAgUkZfQUNUSVZFKTsKKwlpZiAoc2Mt Pm1lbV9yZXMgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwlwb3dlcl9vbl9uZXR3b3JrX2ludGVy ZmFjZSgpOworCisJcmlkID0gMDsKKwlzYy0+aXJxX3Jlc19zdGF0dXMgPSBidXNfYWxsb2NfcmVz b3VyY2VfYW55KGRldiwgU1lTX1JFU19JUlEsICZyaWQsCisJICAgIFJGX0FDVElWRSk7CisJaWYg KHNjLT5pcnFfcmVzX3N0YXR1cyA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDE7CisJ LypUU1RDOiBGbS1Td2l0Y2gtVHgtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3R4ID0gYnVzX2Fs bG9jX3Jlc291cmNlX2FueShkZXYsIFNZU19SRVNfSVJRLCAmcmlkLAorCSAgICBSRl9BQ1RJVkUp OworCWlmIChzYy0+aXJxX3Jlc190eCA9PSBOVUxMKQorCQlnb3RvIG91dDsKKworCXJpZCA9IDI7 CisJLypGU1JDOiBGbS1Td2l0Y2gtUngtQ29tcGxldGUqLworCXNjLT5pcnFfcmVzX3JlYyA9IGJ1 c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfQUNU SVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcmVjID09IE5VTEwpCisJCWdvdG8gb3V0OworCisJcmlk ID0gNDsKKwkvKkZTUUY6IEZtLVN3aXRjaC1RdWV1ZS1GdWxsKi8KKwlzYy0+aXJxX3Jlc19xZiA9 IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZf QUNUSVZFKTsKKwlpZiAoc2MtPmlycV9yZXNfcWYgPT0gTlVMTCkKKwkJZ290byBvdXQ7CisKKwll cnIgPSBlY2VfYWN0aXZhdGUoZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIG91dDsKKworCS8qIFN5 c2N0bHMgKi8KKwlzY3R4ID0gZGV2aWNlX2dldF9zeXNjdGxfY3R4KGRldik7CisJc29pZCA9IGRl dmljZV9nZXRfc3lzY3RsX3RyZWUoZGV2KTsKKworCUVDRV9MT0NLX0lOSVQoc2MpOworCisJY2Fs bG91dF9pbml0X210eCgmc2MtPnRpY2tfY2gsICZzYy0+c2NfbXR4LCAwKTsKKworCWlmICgoZXJy ID0gZWNlX2dldF9tYWMoc2MsIGVhZGRyKSkgIT0gMCkgeworCQkvKiBObyBNQUMgYWRkcmVzcyBj b25maWd1cmVkLiBHZW5lcmF0ZSB0aGUgcmFuZG9tIG9uZS4gKi8KKwkJaWYgKGJvb3R2ZXJib3Nl KQorCQkJZGV2aWNlX3ByaW50ZihkZXYsCisJCQkgICAgIkdlbmVyYXRpbmcgcmFuZG9tIGV0aGVy bmV0IGFkZHJlc3MuXG4iKTsKKwkJcm5kID0gYXJjNHJhbmRvbSgpOworCisJCS8qZnJvbSBpZl9h ZS5jL2lmX2F0ZS5jKi8KKwkJLyoKKwkJICogU2V0IE9VSSB0byBjb252ZW5pZW50IGxvY2FsbHkg YXNzaWduZWQgYWRkcmVzcy4gJ2InCisJCSAqIGlzIDB4NjIsIHdoaWNoIGhhcyB0aGUgbG9jYWxs eSBhc3NpZ25lZCBiaXQgc2V0LCBhbmQKKwkJICogdGhlIGJyb2FkY2FzdC9tdWx0aWNhc3QgYml0 IGNsZWFyLgorCQkgKi8KKwkJZWFkZHJbMF0gPSAnYic7CisJCWVhZGRyWzFdID0gJ3MnOworCQll YWRkclsyXSA9ICdkJzsKKwkJZWFkZHJbM10gPSAocm5kID4+IDE2KSAmIDB4ZmY7CisJCWVhZGRy WzRdID0gKHJuZCA+PiA4KSAmIDB4ZmY7CisJCWVhZGRyWzVdID0gcm5kICYgMHhmZjsKKworCQlm b3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKwkJCWVhZGRyW2ldID0gdmxhbjBf bWFjW2ldOworCX0KKwllY2Vfc2V0X21hYyhzYywgZWFkZHIpOworCXNjLT5pZnAgPSBpZnAgPSBp Zl9hbGxvYyhJRlRfRVRIRVIpOworCWlmIChtaWlfcGh5X3Byb2JlKGRldiwgJnNjLT5taWlidXMs IGVjZV9pZm1lZGlhX3VwZCwKKwkJICAgIGVjZV9pZm1lZGlhX3N0cykpIHsKKwkJZGV2aWNlX3By aW50ZihkZXYsICJDYW5ub3QgZmluZCBteSBQSFkuXG4iKTsKKwkJZXJyID0gRU5YSU87CisJCWdv dG8gb3V0OworCX0KKwlpZnAtPmlmX3NvZnRjID0gc2M7CisJaWZfaW5pdG5hbWUoaWZwLCBkZXZp Y2VfZ2V0X25hbWUoZGV2KSwgZGV2aWNlX2dldF91bml0KGRldikpOworCWlmcC0+aWZfZmxhZ3Mg PSBJRkZfQlJPQURDQVNUIHwgSUZGX1NJTVBMRVggfCBJRkZfTVVMVElDQVNUOworCisJaWZwLT5p Zl9jYXBhYmlsaXRpZXMgPSBJRkNBUF9IV0NTVU07CisKKwlpZnAtPmlmX2h3YXNzaXN0ID0gKENT VU1fSVAgfCBDU1VNX1RDUCB8IENTVU1fVURQKTsKKwlpZnAtPmlmX2NhcGVuYWJsZSA9IGlmcC0+ aWZfY2FwYWJpbGl0aWVzOworCWlmcC0+aWZfc3RhcnQgPSBlY2VzdGFydDsKKwlpZnAtPmlmX2lv Y3RsID0gZWNlaW9jdGw7CisJaWZwLT5pZl9pbml0ID0gZWNlaW5pdDsKKwlpZnAtPmlmX3NuZC5p ZnFfZHJ2X21heGxlbiA9IEVDRV9NQVhfVFhfQlVGRkVSUyAtIDE7CisJSUZRX1NFVF9NQVhMRU4o JmlmcC0+aWZfc25kLCBFQ0VfTUFYX1RYX0JVRkZFUlMgLSAxKTsKKwlJRlFfU0VUX1JFQURZKCZp ZnAtPmlmX3NuZCk7CisKKwkvKiBDcmVhdGUgbG9jYWwgdGFza3EuICovCisKKwlUQVNLX0lOSVQo JnNjLT5zY19pbnRyX3Rhc2ssIDAsIGVjZV9pbnRyX3Rhc2ssIHNjKTsKKwlUQVNLX0lOSVQoJnNj LT5zY190eF90YXNrLCAxLCBlY2VfdHhfdGFzaywgaWZwKTsKKwlUQVNLX0lOSVQoJnNjLT5zY19j bGVhbnVwX3Rhc2ssIDIsIGVjZV9jbGVhbnVwX3Rhc2ssIHNjKTsKKwlzYy0+c2NfdHEgPSB0YXNr cXVldWVfY3JlYXRlX2Zhc3QoImVjZV90YXNrcSIsIE1fV0FJVE9LLAorCSAgICB0YXNrcXVldWVf dGhyZWFkX2VucXVldWUsCisJICAgICZzYy0+c2NfdHEpOworCWlmIChzYy0+c2NfdHEgPT0gTlVM TCkgeworCQlkZXZpY2VfcHJpbnRmKHNjLT5kZXYsICJjb3VsZCBub3QgY3JlYXRlIHRhc2txdWV1 ZVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCWV0aGVyX2lmYXR0YWNoKGlmcCwgZWFkZHIpOwor CisJLyoKKwkgKiBBY3RpdmF0ZSBpbnRlcnJ1cHRzCisJICovCisJZXJyID0gYnVzX3NldHVwX2lu dHIoZGV2LCBzYy0+aXJxX3Jlc19yZWMsIElOVFJfVFlQRV9ORVQgfCBJTlRSX01QU0FGRSwKKwkg ICAgTlVMTCwgZWNlX2ludHIsIHNjLCAmc2MtPmludHJoYW5kKTsKKwlpZiAoZXJyKSB7CisJCWV0 aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsK Kwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYsIHNjLT5pcnFfcmVzX3N0YXR1cywKKwkg ICAgSU5UUl9UWVBFX05FVCB8IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLCBlY2VfaW50cl9zdGF0 dXMsIHNjLCAmc2MtPmludHJoYW5kX3N0YXR1cyk7CisJaWYgKGVycikgeworCQlldGhlcl9pZmRl dGFjaChpZnApOworCQlFQ0VfTE9DS19ERVNUUk9ZKHNjKTsKKwkJZ290byBvdXQ7CisJfQorCisJ ZXJyID0gYnVzX3NldHVwX2ludHIoZGV2LCBzYy0+aXJxX3Jlc19xZiwgSU5UUl9UWVBFX05FVCB8 IElOVFJfTVBTQUZFLAorCSAgICBOVUxMLGVjZV9pbnRyX3FmLCBzYywgJnNjLT5pbnRyaGFuZF9x Zik7CisKKwlpZiAoZXJyKSB7CisJCWV0aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RF U1RST1koc2MpOworCQlnb3RvIG91dDsKKwl9CisKKwllcnIgPSBidXNfc2V0dXBfaW50cihkZXYs IHNjLT5pcnFfcmVzX3R4LCBJTlRSX1RZUEVfTkVUIHwgSU5UUl9NUFNBRkUsCisJICAgIE5VTEws IGVjZV9pbnRyX3R4LCBzYywgJnNjLT5pbnRyaGFuZF90eCk7CisKKwlpZiAoZXJyKSB7CisJCWV0 aGVyX2lmZGV0YWNoKGlmcCk7CisJCUVDRV9MT0NLX0RFU1RST1koc2MpOworCQlnb3RvIG91dDsK Kwl9CisKKwlFQ0VfVFhMT0NLX0lOSVQoc2MpOworCUVDRV9SWExPQ0tfSU5JVChzYyk7CisJRUNF X0NMRUFOVVBMT0NLX0lOSVQoc2MpOworCisJLyogRW5hYmxlIGFsbCBpbnRlcnJ1cHQgc291cmNl cy4gKi8KKwl3cml0ZV80KHNjLCBJTlRFUlJVUFRfTUFTSywgMHgwMDAwMDAwMCk7CisKKwkvKiBF bmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2MsIFBPUlRfMF9DT05GSUcsIHJlYWRfNChzYywg UE9SVF8wX0NPTkZJRykgJiB+KFBPUlRfRElTQUJMRSkpOworCisJdGFza3F1ZXVlX3N0YXJ0X3Ro cmVhZHMoJnNjLT5zY190cSwgMSwgUElfTkVULCAiJXMgdGFza3EiLAorCSAgICBkZXZpY2VfZ2V0 X25hbWV1bml0KHNjLT5kZXYpKTsKKworb3V0OjsKKwlpZiAoZXJyKQorCQllY2VfZGVhY3RpdmF0 ZShkZXYpOworCWlmIChlcnIgJiYgaWZwKQorCQlpZl9mcmVlKGlmcCk7CisJcmV0dXJuIChlcnIp OworfQorCitzdGF0aWMgaW50CitlY2VfZGV0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3Qg ZWNlX3NvZnRjICpzYyA9IGRldmljZV9nZXRfc29mdGMoZGV2KTsKKwlzdHJ1Y3QgaWZuZXQgKmlm cCA9IHNjLT5pZnA7CisKKwllY2VzdG9wKHNjKTsKKwlpZiAoaWZwICE9IE5VTEwpIHsKKwkJZXRo ZXJfaWZkZXRhY2goaWZwKTsKKwkJaWZfZnJlZShpZnApOworCX0KKwllY2VfZGVhY3RpdmF0ZShk ZXYpOworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZ2V0YWRkcih2b2lkICph cmcsIGJ1c19kbWFfc2VnbWVudF90ICpzZWdzLCBpbnQgbnNlZ3MsIGludCBlcnJvcikKK3sKKwl1 X2ludDMyX3QgKnBhZGRyOworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJ3cm9uZyBudW1iZXIgb2Yg c2VnbWVudHMsIHNob3VsZCBiZSAxIikpOworCXBhZGRyID0gYXJnOworCSpwYWRkciA9IHNlZ3Mt PmRzX2FkZHI7Cit9CisKK3N0YXRpYyBpbnQKK2VjZV9hbGxvY19kZXNjX2RtYV90eChzdHJ1Y3Qg ZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKwlpbnQgZXJyb3I7CisKKwkvKiBBbGxvY2F0ZSBh IGJ1c2RtYSB0YWcgYW5kIERNQSBzYWZlIG1lbW9yeSBmb3IgVFgvUlggZGVzY3JpcHRvcnMuICov CisJZXJyb3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsCS8qIHBhcmVu dCAqLworCSAgICAxNiwgMCwgLyogYWxpZ25tZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BB Q0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJ LyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJn ICovCisJICAgIHNpemVvZihldGhfdHhfZGVzY190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsIC8qIG1h eCBzaXplICovCisJICAgIDEsIC8qbnNlZ21lbnRzICovCisJICAgIHNpemVvZihldGhfdHhfZGVz Y190KSpFQ0VfTUFYX1RYX0JVRkZFUlMsCisJICAgIDAsIC8qIGZsYWdzICovCisJICAgIE5VTEws IE5VTEwsCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19kYXRh X3R4KTsgLyogZG1hdCAqLworCisJLyogQWxsb2NhdGUgbWVtb3J5IGZvciBUWCByaW5nLiAqLwor CWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ZG1hdGFnX2RhdGFfdHgsCisJICAgICh2b2lk KiopJihzYy0+ZGVzY190eCksCisJICAgIEJVU19ETUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwK KwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAgJihzYy0+ZG1hbWFwX3JpbmdfdHgpKTsKKwor CWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBE TUEgbWVtb3J5XG4iKTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgp OworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAwOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkv KiBMb2FkIFJpbmcgRE1BLiAqLworCWVycm9yID0gYnVzX2RtYW1hcF9sb2FkKHNjLT5kbWF0YWdf ZGF0YV90eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCSAgICBzYy0+ZGVzY190eCwKKwkgICAgc2l6 ZW9mKGV0aF90eF9kZXNjX3QpKkVDRV9NQVhfVFhfQlVGRkVSUywKKwkgICAgZWNlX2dldGFkZHIs CisJICAgICYoc2MtPnJpbmdfcGFkZHJfdHgpLCBCVVNfRE1BX05PV0FJVCk7CisKKwlpZiAoZXJy b3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJjYW4ndCBsb2FkIGRlc2NyaXB0b3JcbiIpOwor CQlidXNfZG1hbWVtX2ZyZWUoc2MtPmRtYXRhZ19kYXRhX3R4LCBzYy0+ZGVzY190eCwKKwkJICAg IHNjLT5kbWFtYXBfcmluZ190eCk7CisJCXNjLT5kZXNjX3R4ID0gTlVMTDsKKwkJYnVzX2RtYV90 YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHggPSAw OworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwkvKiBBbGxvY2F0ZSBhIGJ1c2RtYSB0YWcgZm9y IG1idWZzLiBBbGlnbm1lbnQgaXMgMiBieXRlcyAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3Jl YXRlKHNjLT5zY19wYXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMSwgMCwJCQkvKiBhbGln bm1lbnQsIGJvdW5kYXJ5ICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSXzMyQklULAkvKiBsb3dh ZGRyICovCisJICAgIEJVU19TUEFDRV9NQVhBRERSLAkJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVM TCwgTlVMTCwJCS8qIGZpbHRmdW5jLCBmaWx0ZnVuY2FyZyAqLworCSAgIE1DTEJZVEVTKk1BWF9G UkFHTUVOVCwJLyogbWF4c2l6ZSAqLworCSAgIE1BWF9GUkFHTUVOVCwJCSAvKiBuc2VnbWVudHMg Ki8KKwkgICAgTUNMQllURVMsIDAsCQkvKiBtYXhzZWdzeiwgZmxhZ3MgKi8KKwkgICAgTlVMTCwg TlVMTCwJCS8qIGxvY2tmdW5jLCBsb2NrZnVuY2FyZyAqLworCSAgICAmc2MtPmRtYXRhZ19yaW5n X3R4KTsJLyogZG1hdCAqLworCisJaWYgKGVycm9yKSB7CisJCWlmX3ByaW50ZihzYy0+aWZwLCAi ZmFpbGVkIHRvIGNyZWF0ZSBidXNkbWEgdGFnIGZvciBtYnVmc1xuIik7CisJCXJldHVybiAoRU5Y SU8pOworCX0KKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgewor CQkvKiBDcmVhdGUgZG1hIG1hcCBmb3IgZWFjaCBkZXNjcmlwdG9yLiAqLworCQllcnJvciA9IGJ1 c19kbWFtYXBfY3JlYXRlKHNjLT5kbWF0YWdfcmluZ190eCwgMCwKKwkJICAgICYoc2MtPnR4X2Rl c2NbaV0uZG1hbWFwKSk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJm YWlsZWQgdG8gY3JlYXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJ fQorCX0KKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorZWNlX2ZyZWVfZGVzY19kbWFf dHgoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwg RUNFX01BWF9UWF9CVUZGRVJTOyBpKyspIHsKKwkJaWYgKHNjLT50eF9kZXNjW2ldLmJ1ZmYpIHsK KwkJCW1fZnJlZW0oc2MtPnR4X2Rlc2NbaV0uYnVmZik7CisJCQlzYy0+dHhfZGVzY1tpXS5idWZm PSAwOworCQl9CisJfQorCisJaWYgKHNjLT5kbWFtYXBfcmluZ190eCkgeworCQlidXNfZG1hbWFw X3VubG9hZChzYy0+ZG1hdGFnX2RhdGFfdHgsIHNjLT5kbWFtYXBfcmluZ190eCk7CisJCWlmIChz Yy0+ZGVzY190eCkgeworCQkJYnVzX2RtYW1lbV9mcmVlKHNjLT5kbWF0YWdfZGF0YV90eCwKKwkJ CSAgICBzYy0+ZGVzY190eCwgc2MtPmRtYW1hcF9yaW5nX3R4KTsKKwkJfQorCQlzYy0+ZG1hbWFw X3JpbmdfdHggPSAwOworCX0KKworCWlmIChzYy0+ZG1hdGFnX2RhdGFfdHgpIHsKKwkJYnVzX2Rt YV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX2RhdGFfdHgpOworCQlzYy0+ZG1hdGFnX2RhdGFfdHgg PSAwOworCX0KKworCWlmIChzYy0+ZG1hdGFnX3JpbmdfdHgpIHsKKwkJZm9yIChpID0gMDsgaTxF Q0VfTUFYX1RYX0JVRkZFUlM7IGkrKykgeworCQkJYnVzX2RtYW1hcF9kZXN0cm95KHNjLT5kbWF0 YWdfcmluZ190eCwKKwkJCSAgICBzYy0+dHhfZGVzY1tpXS5kbWFtYXApOworCQkJc2MtPnR4X2Rl c2NbaV0uZG1hbWFwID0gMDsKKwkJfQorCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdf cmluZ190eCk7CisJCXNjLT5kbWF0YWdfcmluZ190eCA9IDA7CisJfQorfQorCitzdGF0aWMgaW50 CitlY2VfYWxsb2NfZGVzY19kbWFfcngoc3RydWN0IGVjZV9zb2Z0YyAqc2MpCit7CisJaW50IGVy cm9yOworCWludCBpOworCisJLyogQWxsb2NhdGUgYSBidXNkbWEgdGFnIGFuZCBETUEgc2FmZSBt ZW1vcnkgZm9yIFJYIGRlc2NyaXB0b3JzLiAqLworCWVycm9yID0gYnVzX2RtYV90YWdfY3JlYXRl KHNjLT5zY19wYXJlbnRfdGFnLAkvKiBwYXJlbnQgKi8KKwkgICAgMTYsIDAsCQkJLyogYWxpZ25t ZW50LCBib3VuZGFyeSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUl8zMkJJVCwJLyogbG93YWRk ciAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJCS8qIGhpZ2hhZGRyICovCisJICAgIE5VTEws IE5VTEwsCQkvKiBmaWx0ZnVuYywgZmlsdGZ1bmNhcmcgKi8KKwkgICAgLyogbWF4c2l6ZSwgbnNl Z21lbnRzICovCisJICAgIHNpemVvZihldGhfcnhfZGVzY190KSpFQ0VfTUFYX1JYX0JVRkZFUlMs IDEsCisJICAgIC8qIG1heHNlZ3N6LCBmbGFncyAqLworCSAgICBzaXplb2YoZXRoX3J4X2Rlc2Nf dCkqRUNFX01BWF9SWF9CVUZGRVJTLCAwLAorCSAgICBOVUxMLCBOVUxMLAkJLyogbG9ja2Z1bmMs IGxvY2tmdW5jYXJnICovCisJICAgICZzYy0+ZG1hdGFnX2RhdGFfcngpOwkvKiBkbWF0ICovCisK KwkvKiBBbGxvY2F0ZSBSWCByaW5nLiAqLworCWVycm9yID0gYnVzX2RtYW1lbV9hbGxvYyhzYy0+ ZG1hdGFnX2RhdGFfcngsCisJICAgICh2b2lkKiopJihzYy0+ZGVzY19yeCksCisJICAgIEJVU19E TUFfTk9XQUlUIHwgQlVTX0RNQV9aRVJPIHwKKwkgICAgQlVTX0RNQV9DT0hFUkVOVCwKKwkgICAg JihzYy0+ZG1hbWFwX3JpbmdfcngpKTsKKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2Mt PmlmcCwgImZhaWxlZCB0byBhbGxvY2F0ZSBETUEgbWVtb3J5XG4iKTsKKwkJcmV0dXJuIChFTlhJ Tyk7CisJfQorCisJLyogTG9hZCBkbWFtYXAuICovCisJZXJyb3IgPSBidXNfZG1hbWFwX2xvYWQo c2MtPmRtYXRhZ19kYXRhX3J4LCBzYy0+ZG1hbWFwX3JpbmdfcngsCisJICAgIHNjLT5kZXNjX3J4 LAorCSAgICBzaXplb2YoZXRoX3J4X2Rlc2NfdCkqRUNFX01BWF9SWF9CVUZGRVJTLAorCSAgICBl Y2VfZ2V0YWRkciwKKwkgICAgJihzYy0+cmluZ19wYWRkcl9yeCksIEJVU19ETUFfTk9XQUlUKTsK KworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImNhbid0IGxvYWQgZGVzY3Jp cHRvclxuIik7CisJCWJ1c19kbWFtZW1fZnJlZShzYy0+ZG1hdGFnX2RhdGFfcngsIHNjLT5kZXNj X3J4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYV90YWdfZGVzdHJveShz Yy0+ZG1hdGFnX2RhdGFfcngpOworCQlzYy0+ZGVzY19yeCA9IE5VTEw7CisJCXJldHVybiAoRU5Y SU8pOworCX0KKworCS8qIEFsbG9jYXRlIGEgYnVzZG1hIHRhZyBmb3IgbWJ1ZnMuICovCisJZXJy b3IgPSBidXNfZG1hX3RhZ19jcmVhdGUoc2MtPnNjX3BhcmVudF90YWcsLyogcGFyZW50ICovCisJ ICAgIDE2LCAwLAkJCS8qIGFsaWdubWVudCwgYm91bmRhcnkgKi8KKwkgICAgQlVTX1NQQUNFX01B WEFERFJfMzJCSVQsCS8qIGxvd2FkZHIgKi8KKwkgICAgQlVTX1NQQUNFX01BWEFERFIsCQkvKiBo aWdoYWRkciAqLworCSAgICBOVUxMLCBOVUxMLAkJLyogZmlsdGZ1bmMsIGZpbHRmdW5jYXJnICov CisJICAgIE1DTEJZVEVTLCAxLAkJLyogbWF4c2l6ZSwgbnNlZ21lbnRzICovCisJICAgIE1DTEJZ VEVTLCAwLAkJLyogbWF4c2Vnc3osIGZsYWdzICovCisJICAgIE5VTEwsIE5VTEwsCQkvKiBsb2Nr ZnVuYywgbG9ja2Z1bmNhcmcgKi8KKwkgICAgJnNjLT5kbWF0YWdfcmluZ19yeCk7CS8qIGRtYXQg Ki8KKworCWlmIChlcnJvcikgeworCQlpZl9wcmludGYoc2MtPmlmcCwgImZhaWxlZCB0byBjcmVh dGUgYnVzZG1hIHRhZyBmb3IgbWJ1ZnNcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlm b3IgKGkgPSAwOyBpPEVDRV9NQVhfUlhfQlVGRkVSUzsgaSsrKSB7CisJCWVycm9yID0gYnVzX2Rt YW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLAorCQkgICAgJnNjLT5yeF9kZXNjW2ld LmRtYW1hcCk7CisJCWlmIChlcnJvcikgeworCQkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWlsZWQg dG8gY3JlYXRlIG1hcCBmb3IgbWJ1ZlxuIik7CisJCQlyZXR1cm4gKEVOWElPKTsKKwkJfQorCX0K KworCWVycm9yID0gYnVzX2RtYW1hcF9jcmVhdGUoc2MtPmRtYXRhZ19yaW5nX3J4LCAwLCAmc2Mt PnJ4X3NwYXJlbWFwKTsKKwlpZiAoZXJyb3IpIHsKKwkJaWZfcHJpbnRmKHNjLT5pZnAsICJmYWls ZWQgdG8gY3JlYXRlIHNwYXJlIG1hcFxuIik7CisJCXJldHVybiAoRU5YSU8pOworCX0KKworCXJl dHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfZnJlZV9kZXNjX2RtYV9yeChzdHJ1Y3Qg ZWNlX3NvZnRjICpzYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBFQ0VfTUFYX1JY X0JVRkZFUlM7IGkrKykgeworCQlpZiAoc2MtPnJ4X2Rlc2NbaV0uYnVmZikgeworCQkJbV9mcmVl bShzYy0+cnhfZGVzY1tpXS5idWZmKTsKKwkJCXNjLT5yeF9kZXNjW2ldLmJ1ZmY9IDA7CisJCX0K Kwl9CisKKwlpZiAoc2MtPmRtYXRhZ19kYXRhX3J4KSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNj LT5kbWF0YWdfZGF0YV9yeCwgc2MtPmRtYW1hcF9yaW5nX3J4KTsKKwkJYnVzX2RtYW1lbV9mcmVl KHNjLT5kbWF0YWdfZGF0YV9yeCwgc2MtPmRlc2NfcngsCisJCSAgICBzYy0+ZG1hbWFwX3Jpbmdf cngpOworCQlidXNfZG1hX3RhZ19kZXN0cm95KHNjLT5kbWF0YWdfZGF0YV9yeCk7CisJCXNjLT5k bWF0YWdfZGF0YV9yeCA9IDA7CisJCXNjLT5kbWFtYXBfcmluZ19yeCA9IDA7CisJCXNjLT5kZXNj X3J4ID0gMDsKKwl9CisKKwlpZiAoc2MtPmRtYXRhZ19yaW5nX3J4KSB7CisJCWZvciAoaSA9IDA7 IGkgPCBFQ0VfTUFYX1JYX0JVRkZFUlM7IGkrKykKKwkJCWJ1c19kbWFtYXBfZGVzdHJveShzYy0+ ZG1hdGFnX3JpbmdfcngsCisJCQkgICAgc2MtPnJ4X2Rlc2NbaV0uZG1hbWFwKTsKKwkJYnVzX2Rt YW1hcF9kZXN0cm95KHNjLT5kbWF0YWdfcmluZ19yeCwgc2MtPnJ4X3NwYXJlbWFwKTsKKwkJYnVz X2RtYV90YWdfZGVzdHJveShzYy0+ZG1hdGFnX3JpbmdfcngpOworCQlzYy0+ZG1hdGFnX3Jpbmdf cnggPSAwOworCX0KK30KKworc3RhdGljIGludAorZWNlX25ld19yeGJ1ZihzdHJ1Y3QgZWNlX3Nv ZnRjICpzYywgc3RydWN0IHJ4X2Rlc2NfaW5mbyogZGVzY2luZm8pCit7CisJc3RydWN0IG1idWYg Km5ld19tYnVmOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ1sxXTsKKwlidXNfZG1hbWFwX3QgbWFw OworCWludCBlcnJvcjsKKwlpbnQgbnNlZ3M7CisJYnVzX2RtYV90YWdfdCB0YWc7CisKKwl0YWcg PSBzYy0+ZG1hdGFnX3Jpbmdfcng7CisKKwluZXdfbWJ1ZiA9IG1fZ2V0Y2woTV9ET05UV0FJVCwg TVRfREFUQSwgTV9QS1RIRFIpOworCisJaWYgKG5ld19tYnVmID09IE5VTEwpCisJCXJldHVybiAo RU5PQlVGUyk7CisKKwluZXdfbWJ1Zi0+bV9sZW4gPSBuZXdfbWJ1Zi0+bV9wa3RoZHIubGVuID0g TUNMQllURVM7CisKKwllcnJvciA9IGJ1c19kbWFtYXBfbG9hZF9tYnVmX3NnKHRhZywgc2MtPnJ4 X3NwYXJlbWFwLCBuZXdfbWJ1ZiwKKwkgICAgc2VnLCAmbnNlZ3MsIEJVU19ETUFfTk9XQUlUKTsK KworCUtBU1NFUlQobnNlZ3MgPT0gMSwgKCJUb28gbWFueSBzZWdtZW50cyByZXR1cm5lZCEiKSk7 CisKKwlpZiAobnNlZ3MgIT0gMSB8fCBlcnJvcikgeworCQltX2ZyZWUobmV3X21idWYpOworCQly ZXR1cm4gKEVOT0JVRlMpOworCX0KKworCWlmIChkZXNjaW5mby0+YnVmZiAhPSBOVUxMKSB7CisJ CWJ1c19kbWFtYXBfc3luYyh0YWcsIGRlc2NpbmZvLT5kbWFtYXAsIEJVU19ETUFTWU5DX1BPU1RS RUFEKTsKKwkJYnVzX2RtYW1hcF91bmxvYWQodGFnLCBkZXNjaW5mby0+ZG1hbWFwKTsKKwl9CisK KwltYXAgPSBkZXNjaW5mby0+ZG1hbWFwOworCWRlc2NpbmZvLT5kbWFtYXAgPSBzYy0+cnhfc3Bh cmVtYXA7CisJc2MtPnJ4X3NwYXJlbWFwID0gbWFwOworCisJYnVzX2RtYW1hcF9zeW5jKHRhZywg ZGVzY2luZm8tPmRtYW1hcCwgQlVTX0RNQVNZTkNfUFJFUkVBRCk7CisKKwlkZXNjaW5mby0+YnVm ZiA9IG5ld19tYnVmOworCWRlc2NpbmZvLT5kZXNjLT5kYXRhX3B0ciA9IHNlZy0+ZHNfYWRkcjsK KwlkZXNjaW5mby0+ZGVzYy0+bGVuZ3RoID0gc2VnLT5kc19sZW4gLSAyOworCisJcmV0dXJuICgw KTsKK30KKworc3RhdGljIGludAorZWNlX2FsbG9jYXRlX2RtYShzdHJ1Y3QgZWNlX3NvZnRjICpz YykKK3sKKwlldGhfdHhfZGVzY190ICpkZXNjdHg7CisJZXRoX3J4X2Rlc2NfdCAqZGVzY3J4Owor CWludCBpOworCWludCBlcnJvcjsKKworCS8qIENyZWF0ZSBwYXJlbnQgdGFnIGZvciB0eCBhbmQg cnggKi8KKwllcnJvciA9IGJ1c19kbWFfdGFnX2NyZWF0ZSgKKwkgICAgYnVzX2dldF9kbWFfdGFn KHNjLT5kZXYpLC8qIHBhcmVudCAqLworCSAgICAxLCAwLAkJLyogYWxpZ25tZW50LCBib3VuZGFy eSAqLworCSAgICBCVVNfU1BBQ0VfTUFYQUREUiwJLyogbG93YWRkciAqLworCSAgICBCVVNfU1BB Q0VfTUFYQUREUiwJLyogaGlnaGFkZHIgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogZmlsdGVyLCBm aWx0ZXJhcmcgKi8KKwkgICAgQlVTX1NQQUNFX01BWFNJWkVfMzJCSVQsIDAsLyogbWF4c2l6ZSwg bnNlZ21lbnRzICovCisJICAgIEJVU19TUEFDRV9NQVhTSVpFXzMyQklULAkvKiBtYXhzZWdzaXpl ICovCisJICAgIDAsCQkJLyogZmxhZ3MgKi8KKwkgICAgTlVMTCwgTlVMTCwJLyogbG9ja2Z1bmMs IGxvY2thcmcgKi8KKwkgICAgJnNjLT5zY19wYXJlbnRfdGFnKTsKKworCWVjZV9hbGxvY19kZXNj X2RtYV90eChzYyk7CisKKwlmb3IgKGkgPSAwOyBpIDwgRUNFX01BWF9UWF9CVUZGRVJTOyBpKysp IHsKKwkJZGVzY3R4ID0gKGV0aF90eF9kZXNjX3QgKikoJnNjLT5kZXNjX3R4W2ldKTsKKwkJbWVt c2V0KGRlc2N0eCwgMCwgc2l6ZW9mKGV0aF90eF9kZXNjX3QpKTsKKwkJZGVzY3R4LT5sZW5ndGgg PSBNQVhfUEFDS0VUX0xFTjsKKwkJZGVzY3R4LT5jb3duID0gMTsKKwkJaWYgKGkgPT0gRUNFX01B WF9UWF9CVUZGRVJTIC0gMSkKKwkJCWRlc2N0eC0+ZW9yID0gMTsKKwl9CisKKwllY2VfYWxsb2Nf ZGVzY19kbWFfcngoc2MpOworCisJZm9yIChpID0gMDsgaSA8IEVDRV9NQVhfUlhfQlVGRkVSUzsg aSsrKSB7CisJCWRlc2NyeCA9ICYoc2MtPmRlc2NfcnhbaV0pOworCQltZW1zZXQoZGVzY3J4LCAw LCBzaXplb2YoZXRoX3J4X2Rlc2NfdCkpOworCQlzYy0+cnhfZGVzY1tpXS5kZXNjID0gZGVzY3J4 OworCQlzYy0+cnhfZGVzY1tpXS5idWZmID0gMDsKKwkJZWNlX25ld19yeGJ1ZihzYywgJihzYy0+ cnhfZGVzY1tpXSkpOworCisJCWlmIChpID09IEVDRV9NQVhfUlhfQlVGRkVSUyAtIDEpCisJCQlk ZXNjcngtPmVvciA9IDE7CisJfQorCXNjLT50eF9wcm9kID0gMDsKKwlzYy0+dHhfY29ucyA9IDA7 CisJc2MtPmxhc3RfcnggPSAwOworCXNjLT5kZXNjX2N1cnJfdHggPSAwOworCisJcmV0dXJuICgw KTsKK30KKworc3RhdGljIGludAorZWNlX2FjdGl2YXRlKGRldmljZV90IGRldikKK3sKKwlzdHJ1 Y3QgZWNlX3NvZnRjICpzYzsKKwlpbnQgZXJyOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsK KwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKworCXNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlm cCA9IHNjLT5pZnA7CisKKwlpbml0aWFsX3N3aXRjaF9jb25maWcgPSByZWFkXzQoc2MsIFNXSVRD SF9DT05GSUcpOworCWluaXRpYWxfY3B1X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09O RklHKTsKKwlpbml0aWFsX3BvcnQwX2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05G SUcpOworCWluaXRpYWxfcG9ydDFfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8xX0NPTkZJ Ryk7CisKKwkvKiBEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRfNChz YywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNBQkxF KTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwor CS8qIERpc2FibGUgUG9ydCAxICovCisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNf UE9SVF8xX0NPTkZJRyk7CisJbWFjX3BvcnRfY29uZmlnIHw9IChQT1JUX0RJU0FCTEUpOworCXdy aXRlXzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBtYWNfcG9ydF9jb25maWcpOworCisJZXJyID0g ZWNlX2FsbG9jYXRlX2RtYShzYyk7CisJaWYgKGVycikgeworCQlpZl9wcmludGYoc2MtPmlmcCwg ImZhaWxlZCBhbGxvY2F0aW5nIGRtYVxuIik7CisJCWdvdG8gb3V0OworCX0KKworCXdyaXRlXzQo c2MsIFRTX0RFU0NSSVBUT1JfUE9JTlRFUiwgc2MtPnJpbmdfcGFkZHJfdHgpOworCXdyaXRlXzQo c2MsIFRTX0RFU0NSSVBUT1JfQkFTRV9BRERSLCBzYy0+cmluZ19wYWRkcl90eCk7CisKKwl3cml0 ZV80KHNjLCBGU19ERVNDUklQVE9SX1BPSU5URVIsIHNjLT5yaW5nX3BhZGRyX3J4KTsKKwl3cml0 ZV80KHNjLCBGU19ERVNDUklQVE9SX0JBU0VfQUREUiwgc2MtPnJpbmdfcGFkZHJfcngpOworCisJ d3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDEpOworCisJcmV0dXJuICgwKTsKK291dDoKKwly 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 KHN0cnVjdCBlY2Vfc29mdGMgKmVjLAorICAgIHVpbnQ4X3QgKm1hY19yZXN1bHQsCisgICAgaW50 IGZpcnN0KQoreworCXVpbnQzMl90IGlpOworCXN0cnVjdCBhcmxfdGFibGVfZW50cnlfdCBlbnRy eTsKKwl1aW50MzJfdCAqZW50cnlfdmFsOworCXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf Q09OVFJPTF8wLCAwKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMSwg MCk7CisJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzIsIDApOworCWlmIChm aXJzdCkKKwkJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDB4MSk7CisJ ZWxzZQorCQl3cml0ZV80KGVjLCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMCwgMHgyKTsKKwor CWZvciAoaWkgPSAwOyBpaSA8IDB4MTAwMDsgaWkrKykKKwkJaWYgKHJlYWRfNChlYywgQVJMX1RB QkxFX0FDQ0VTU19DT05UUk9MXzEpICYgKDB4MSkpCisJCQlicmVhazsKKworCWVudHJ5X3ZhbCA9 ICh1aW50MzJfdCopICgmZW50cnkpOworCWVudHJ5X3ZhbFswXSA9IHJlYWRfNChlYywgQVJMX1RB QkxFX0FDQ0VTU19DT05UUk9MXzEpOworCWVudHJ5X3ZhbFsxXSA9IHJlYWRfNChlYywgQVJMX1RB QkxFX0FDQ0VTU19DT05UUk9MXzIpOworCisJaWYgKG1hY19yZXN1bHQpCisJCW1lbWNweShtYWNf cmVzdWx0LCBlbnRyeS5tYWNfYWRkciwgRVRIRVJfQUREUl9MRU4pOworCisJcmV0dXJuIChlbnRy eS50YWJsZV9lbmQpOworfQorCitzdGF0aWMgdWludDMyX3QKK3dyaXRlX2FybF90YWJsZV9lbnRy eShzdHJ1Y3QgZWNlX3NvZnRjICplYywKKyAgICB1aW50MzJfdCBmaWx0ZXIsCisgICAgdWludDMy X3Qgdmxhbl9tYWMsCisgICAgdWludDMyX3Qgdmxhbl9naWQsCisgICAgdWludDMyX3QgYWdlX2Zp ZWxkLAorICAgIHVpbnQzMl90IHBvcnRfbWFwLAorICAgIGNvbnN0IHVpbnQ4X3QgKm1hY19hZGRy KQoreworCXVpbnQzMl90IGlpOworCXVpbnQzMl90ICplbnRyeV92YWw7CisJc3RydWN0IGFybF90 YWJsZV9lbnRyeV90IGVudHJ5OworCisJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7 CisKKwllbnRyeS5maWx0ZXIgPSBmaWx0ZXI7CisJZW50cnkudmxhbl9tYWMgPSB2bGFuX21hYzsK KwllbnRyeS52bGFuX2dpZCA9IHZsYW5fZ2lkOworCWVudHJ5LmFnZV9maWVsZCA9IGFnZV9maWVs ZDsKKwllbnRyeS5wb3J0X21hcCA9IHBvcnRfbWFwOworCW1lbWNweShlbnRyeS5tYWNfYWRkciwg bWFjX2FkZHIsIEVUSEVSX0FERFJfTEVOKTsKKworCWVudHJ5X3ZhbCA9ICh1aW50MzJfdCopICgm ZW50cnkpOworCisJd3JpdGVfNChlYywgQVJMX1RBQkxFX0FDQ0VTU19DT05UUk9MXzAsIDApOwor CXdyaXRlXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8xLCAwKTsKKwl3cml0ZV80KGVj LCBBUkxfVEFCTEVfQUNDRVNTX0NPTlRST0xfMiwgMCk7CisKKwl3cml0ZV80KGVjLCBBUkxfVEFC TEVfQUNDRVNTX0NPTlRST0xfMSwgZW50cnlfdmFsWzBdKTsKKwl3cml0ZV80KGVjLCBBUkxfVEFC TEVfQUNDRVNTX0NPTlRST0xfMiwgZW50cnlfdmFsWzFdKTsKKworCXdyaXRlXzQoZWMsIEFSTF9U QUJMRV9BQ0NFU1NfQ09OVFJPTF8wLCBBUkxfV1JJVEVfQ09NTUFORCk7CisKKwlmb3IgKGlpID0g MDsgaWkgPCAweDEwMDA7IGlpKyspCisJCWlmIChyZWFkXzQoZWMsIEFSTF9UQUJMRV9BQ0NFU1Nf Q09OVFJPTF8xKSAmCisJCSAgICBBUkxfQ09NTUFORF9DT01QTEVURSkKKwkJCXJldHVybiAoMSk7 IC8qIFdyaXRlIE9LLiAqLworCisJLyogV3JpdGUgZmFpbGVkLiAqLworCXJldHVybiAoMCk7Cit9 CisKK3N0YXRpYyB2b2lkCityZW1vdmVfbWFjX2VudHJ5KHN0cnVjdCBlY2Vfc29mdGMgKnNjLAor ICAgIHVpbnQ4X3QgKm1hYykKK3sKKworCS8qIEludmFsaWQgYWdlX2ZpZWxkIG1lYW4gZXJhc2Ug dGhpcyBlbnRyeS4gKi8KKwl3cml0ZV9hcmxfdGFibGVfZW50cnkoc2MsIDAsIDEsIFZMQU4wX0dS T1VQX0lELAorCSAgICBJTlZBTElEX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30K Kworc3RhdGljIHZvaWQKK2FkZF9tYWNfZW50cnkoc3RydWN0IGVjZV9zb2Z0YyAqc2MsCisgICAg dWludDhfdCAqbWFjKQoreworCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFO MF9HUk9VUF9JRCwKKwkgICAgTkVXX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30K KworLyoqCisgKiBUaGUgYmVoYXZpb3Igb2YgQVJMIHRhYmxlIHJlYWRpbmcgYW5kIGRlbGV0aW9u IGlzIG5vdCB3ZWxsIGRlZmluZWQKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uLiBUbyBiZSBzYWZl LCBhbGwgbWFjIGFkZHJlc3NlcyBhcmUgcHV0IHRvIGEKKyAqIGxpc3QsIHRoZW4gZGVsZXRlZC4K KyAqCisgKi8KK3N0YXRpYyB2b2lkCitjbGVhcl9tYWNfZW50cmllcyhzdHJ1Y3QgZWNlX3NvZnRj ICplYywgaW50IGluY2x1ZGVfdGhpc19tYWMpCit7CisJaW50IHRhYmxlX2VuZDsKKwlzdHJ1Y3Qg bWFjX2xpc3QgKiB0ZW1wOworCXN0cnVjdCBtYWNfbGlzdCAqIG1hY19saXN0X2hlYWRlcjsKKwlz dHJ1Y3QgbWFjX2xpc3QgKiBjdXJyZW50OworCWNoYXIgbWFjW0VUSEVSX0FERFJfTEVOXTsKKwor CWN1cnJlbnQgPSAwOworCW1hY19saXN0X2hlYWRlciA9IDA7CisKKwl0YWJsZV9lbmQgPSByZWFk X21hY19lbnRyeShlYywgbWFjLCAxKTsKKwl3aGlsZSAoIXRhYmxlX2VuZCkgeworCQlpZiAoIWlu Y2x1ZGVfdGhpc19tYWMgJiYKKwkJICAgIG1lbWNtcChtYWMsIHZsYW4wX21hYywgRVRIRVJfQURE Ul9MRU4pID09IDApIHsKKwkJCS8qIFJlYWQgbmV4dCBlbnRyeS4gKi8KKwkJCXRhYmxlX2VuZCA9 IHJlYWRfbWFjX2VudHJ5KGVjLCBtYWMsIDApOworCQkJY29udGludWU7CisJCX0KKworCQl0ZW1w ID0gKHN0cnVjdCBtYWNfbGlzdCopbWFsbG9jKHNpemVvZihzdHJ1Y3QgbWFjX2xpc3QpLAorCQkg ICAgTV9ERVZCVUYsCisJCSAgICBNX05PV0FJVCB8IE1fWkVSTyk7CisJCW1lbWNweSh0ZW1wLT5t YWNfYWRkciwgbWFjLCBFVEhFUl9BRERSX0xFTik7CisJCXRlbXAtPm5leHQgPSAwOworCQlpZiAo bWFjX2xpc3RfaGVhZGVyKSB7CisJCQljdXJyZW50LT5uZXh0ID0gdGVtcDsKKwkJCWN1cnJlbnQg PSB0ZW1wOworCQl9IGVsc2UgeworCQkJbWFjX2xpc3RfaGVhZGVyID0gdGVtcDsKKwkJCWN1cnJl bnQgPSB0ZW1wOworCQl9CisJCS8qIFJlYWQgbmV4dCBFbnRyeSAqLworCQl0YWJsZV9lbmQgPSBy ZWFkX21hY19lbnRyeShlYywgbWFjLCAwKTsKKwl9CisKKwljdXJyZW50ID0gbWFjX2xpc3RfaGVh ZGVyOworCisJd2hpbGUgKGN1cnJlbnQpIHsKKwkJcmVtb3ZlX21hY19lbnRyeShlYywgY3VycmVu dC0+bWFjX2FkZHIpOworCQl0ZW1wID0gY3VycmVudDsKKwkJY3VycmVudCA9IGN1cnJlbnQtPm5l eHQ7CisJCWZyZWUodGVtcCwgTV9ERVZCVUYpOworCX0KK30KKworc3RhdGljIGludAorY29uZmln dXJlX2xhbl9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCBpbnQgcGh5X3R5cGUpCit7CisJdWlu dDMyX3Qgc3dfY29uZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCS8qCisJICog Q29uZmlndXJlIHN3aXRjaAorCSAqLworCXN3X2NvbmZpZyA9IHJlYWRfNChzYywgU1dJVENIX0NP TkZJRyk7CisJLyogRW5hYmxlIGZhc3QgYWdpbmcuICovCisJc3dfY29uZmlnIHw9IEZBU1RfQUdJ Tkc7CisJLyogRW5hYmxlIElWTCBsZWFybmluZy4gKi8KKwlzd19jb25maWcgfD0gSVZMX0xFQVJO SU5HOworCS8qIERpc2FibGUgaGFyZHdhcmUgTkFULiAqLworCXN3X2NvbmZpZyAmPSB+KEhBUkRX QVJFX05BVCk7CisKKwlzd19jb25maWcgfD0gU0tJUF9MMl9MT09LVVBfUE9SVF8wIHwgU0tJUF9M Ml9MT09LVVBfUE9SVF8xfCBOSUNfTU9ERTsKKworCXdyaXRlXzQoc2MsIFNXSVRDSF9DT05GSUcs IHN3X2NvbmZpZyk7CisKKwlzd19jb25maWcgPSByZWFkXzQoc2MsIFNXSVRDSF9DT05GSUcpOwor CisJbWFjX3BvcnRfY29uZmlnID0gcmVhZF80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRyk7CisKKwlp ZiAoIShtYWNfcG9ydF9jb25maWcgJiAweDEpIHx8IChtYWNfcG9ydF9jb25maWcgJiAweDIpKQor CQlpZl9wcmludGYoc2MtPmlmcCwgIkxpbmsgRG93blxuIik7CisJZWxzZQorCQl3cml0ZV80KHNj LCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwlyZXR1cm4gKDApOworfQor CitzdGF0aWMgdm9pZAorc2V0X3B2aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCBwb3J0MCwg aW50IHBvcnQxLCBpbnQgY3B1KQoreworCXVpbnQzMl90IHZhbDsKKwl2YWwgPSByZWFkXzQoc2Ms IFZMQU5fUE9SVF9QVklEKSAmICh+KDB4NyA8PCAwKSk7CisJd3JpdGVfNChzYywgVkxBTl9QT1JU X1BWSUQsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgfCAoKHBvcnQw KSAmIDB4MDcpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJl YWRfNChzYywgVkxBTl9QT1JUX1BWSUQpICYgKH4oMHg3IDw8IDQpKTsKKwl3cml0ZV80KHNjLCBW TEFOX1BPUlRfUFZJRCwgdmFsKTsKKwl2YWwgPSByZWFkXzQoc2MsIFZMQU5fUE9SVF9QVklEKSB8 ICgoKHBvcnQxKSAmIDB4MDcpIDw8IDQpOworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2 YWwpOworCisJdmFsID0gcmVhZF80KHNjLCBWTEFOX1BPUlRfUFZJRCkgJiAofigweDcgPDwgOCkp OworCXdyaXRlXzQoc2MsIFZMQU5fUE9SVF9QVklELCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywg VkxBTl9QT1JUX1BWSUQpIHwgKCgoY3B1KSAmIDB4MDcpIDw8IDgpOworCXdyaXRlXzQoc2MsIFZM QU5fUE9SVF9QVklELCB2YWwpOworCit9CisKKy8qIFZMQU4gcmVsYXRlZCBmdW5jdGlvbnMgKi8K K3N0YXRpYyB2b2lkCitzZXRfdmxhbl92aWQoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFu KQoreworCWNvbnN0IHVpbnQzMl90IHJlZ3NbXSA9IHsKKwkgICAgVkxBTl9WSURfMF8xLAorCSAg ICBWTEFOX1ZJRF8wXzEsCisJICAgIFZMQU5fVklEXzJfMywKKwkgICAgVkxBTl9WSURfMl8zLAor CSAgICBWTEFOX1ZJRF80XzUsCisJICAgIFZMQU5fVklEXzRfNSwKKwkgICAgVkxBTl9WSURfNl83 LAorCSAgICBWTEFOX1ZJRF82XzcKKwl9OworCisJY29uc3QgaW50IHZpZHNbXSA9IHsKKwkgICAg VkxBTjBfVklELAorCSAgICBWTEFOMV9WSUQsCisJICAgIFZMQU4yX1ZJRCwKKwkgICAgVkxBTjNf VklELAorCSAgICBWTEFONF9WSUQsCisJICAgIFZMQU41X1ZJRCwKKwkgICAgVkxBTjZfVklELAor CSAgICBWTEFON19WSUQKKwl9OworCisJdWludDMyX3QgdmFsOworCXVpbnQzMl90IHJlZzsKKwlp bnQgdmlkOworCisJcmVnID0gcmVnc1t2bGFuXTsKKwl2aWQgPSB2aWRzW3ZsYW5dOworCisJaWYg KHZsYW4gJiAxKSB7CisJCXZhbCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVn LCB2YWwgJiAofigweEZGRiA8PCAwKSkpOworCQl2YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdy aXRlXzQoc2MsIHJlZywgdmFsfCgodmlkICYgMHhGRkYpIDw8IDApKTsKKwl9IGVsc2UgeworCQl2 YWwgPSByZWFkXzQoc2MsIHJlZyk7CisJCXdyaXRlXzQoc2MsIHJlZywgdmFsICYgKH4oMHhGRkYg PDwgMTIpKSk7CisJCXZhbCA9IHJlYWRfNChzYywgcmVnKTsKKwkJd3JpdGVfNChzYywgcmVnLCB2 YWx8KCh2aWQgJiAweEZGRikgPDwgMTIpKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxh bl9tZW1iZXIoc3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNo YXIgc2hpZnQ7CisJdWludDMyX3QgdmFsOworCWludCBncm91cDsKKwljb25zdCBpbnQgZ3JvdXBz W10gPSB7CisJICAgIFZMQU4wX0dST1VQLAorCSAgICBWTEFOMV9HUk9VUCwKKwkgICAgVkxBTjJf R1JPVVAsCisJICAgIFZMQU4zX0dST1VQLAorCSAgICBWTEFONF9HUk9VUCwKKwkgICAgVkxBTjVf R1JPVVAsCisJICAgIFZMQU42X0dST1VQLAorCSAgICBWTEFON19HUk9VUAorCX07CisKKwlncm91 cCA9IGdyb3Vwc1t2bGFuXTsKKworCXNoaWZ0ID0gdmxhbiozOworCXZhbCA9IHJlYWRfNChzYywg VkxBTl9NRU1CRVJfUE9SVF9NQVApICYgKH4oMHg3IDw8IHNoaWZ0KSk7CisJd3JpdGVfNChzYywg VkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCk7CisJdmFsID0gcmVhZF80KHNjLCBWTEFOX01FTUJF Ul9QT1JUX01BUCk7CisJd3JpdGVfNChzYywgVkxBTl9NRU1CRVJfUE9SVF9NQVAsIHZhbCB8ICgo Z3JvdXAgJiAweDcpIDw8IHNoaWZ0KSk7Cit9CisKK3N0YXRpYyB2b2lkCitzZXRfdmxhbl90YWco c3RydWN0IGVjZV9zb2Z0YyAqc2MsIGludCB2bGFuKQoreworCXVuc2lnbmVkIGNoYXIgc2hpZnQ7 CisJdWludDMyX3QgdmFsOworCisJaW50IHRhZyA9IDA7CisKKwlzaGlmdCA9IHZsYW4qMzsKKwl2 YWwgPSByZWFkXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQKSAmICh+KDB4NyA8PCBzaGlmdCkpOwor CXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwpOworCXZhbCA9IHJlYWRfNChzYywg VkxBTl9UQUdfUE9SVF9NQVApOworCXdyaXRlXzQoc2MsIFZMQU5fVEFHX1BPUlRfTUFQLCB2YWwg fCAoKHRhZyAmIDB4NykgPDwgc2hpZnQpKTsKK30KKworc3RhdGljIGludAorY29uZmlndXJlX2Nw dV9wb3J0KHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCXVpbnQzMl90IGNwdV9wb3J0X2NvbmZp ZzsKKwlpbnQgaTsKKworCWNwdV9wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgQ1BVX1BPUlRfQ09O RklHKTsKKwkvKiBTQSBsZWFybmluZyBEaXNhYmxlICovCisJY3B1X3BvcnRfY29uZmlnIHw9IChT QV9MRUFSTklOR19ESVNBQkxFKTsKKwkvKiBzZXQgZGF0YSBvZmZzZXQgKyAyICovCisJY3B1X3Bv cnRfY29uZmlnICY9IH4oMSA8PCAzMSk7CisKKwl3cml0ZV80KHNjLCBDUFVfUE9SVF9DT05GSUcs IGNwdV9wb3J0X2NvbmZpZyk7CisKKwlpZiAoIXdyaXRlX2FybF90YWJsZV9lbnRyeShzYywgMCwg MSwgVkxBTjBfR1JPVVBfSUQsCisJICAgIFNUQVRJQ19FTlRSWSwgVkxBTjBfR1JPVVAsCisJICAg IHZsYW4wX21hYykpCisJCXJldHVybiAoMSk7CisKKwlzZXRfcHZpZChzYywgUE9SVDBfUFZJRCwg UE9SVDFfUFZJRCwgQ1BVX1BPUlRfUFZJRCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7 CisJCXNldF92bGFuX3ZpZChzYywgaSk7CisJCXNldF92bGFuX21lbWJlcihzYywgaSk7CisJCXNl dF92bGFuX3RhZyhzYywgaSk7CisJfQorCisJLyogZGlzYWJsZSBhbGwgaW50ZXJydXB0IHN0YXR1 cyBzb3VyY2VzICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX01BU0ssIDB4ZmZmZjFmZmYpOwor CisJLyogY2xlYXIgcHJldmlvdXMgaW50ZXJydXB0IHNvdXJjZXMgKi8KKwl3cml0ZV80KHNjLCBJ TlRFUlJVUFRfU1RBVFVTLCAweDAwMDAxRkZGKTsKKworCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05U Uk9MLCAwKTsKKwl3cml0ZV80KHNjLCBGU19ETUFfQ09OVFJPTCwgMCk7CisJcmV0dXJuICgwKTsK K30KKworc3RhdGljIGludAoraGFyZHdhcmVfaW5pdChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK KwlpbnQgc3RhdHVzID0gMDsKKwlzdGF0aWMgaW50IGd3X3BoeV90eXBlOworCisJZ3dfcGh5X3R5 cGUgPSBnZXRfcGh5X3R5cGUoc2MpOworCS8qIEN1cnJlbnRseSBvbmx5IGljX3BsdXMgcGh5IGlz IHN1cHBvcnRlZC4gKi8KKwlpZiAoZ3dfcGh5X3R5cGUgIT0gSUNfUExVU19QSFkpIHsKKwkJZGV2 aWNlX3ByaW50ZihzYy0+ZGV2LCAiUEhZIHR5cGUgaXMgbm90IHN1cHBvcnRlZCAoJWQpXG4iLAor CQkgICAgZ3dfcGh5X3R5cGUpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RhdHVzID0gY29uZmln dXJlX2xhbl9wb3J0KHNjLCBnd19waHlfdHlwZSk7CisJY29uZmlndXJlX2NwdV9wb3J0KHNjKTsK KwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorc2V0X21hY19hZGRyZXNzKHN0cnVjdCBl Y2Vfc29mdGMgKnNjLCBjb25zdCBjaGFyICptYWMsIGludCBtYWNfbGVuKQoreworCisJLyogSW52 YWxpZCBhZ2VfZmllbGQgbWVhbiBlcmFzZSB0aGlzIGVudHJ5LiAqLworCXdyaXRlX2FybF90YWJs ZV9lbnRyeShzYywgMCwgMSwgVkxBTjBfR1JPVVBfSUQsCisJICAgIElOVkFMSURfRU5UUlksIFZM QU4wX0dST1VQLAorCSAgICBtYWMpOworCW1lbWNweSh2bGFuMF9tYWMsIG1hYywgRVRIRVJfQURE Ul9MRU4pOworCisJd3JpdGVfYXJsX3RhYmxlX2VudHJ5KHNjLCAwLCAxLCBWTEFOMF9HUk9VUF9J RCwKKwkgICAgU1RBVElDX0VOVFJZLCBWTEFOMF9HUk9VUCwKKwkgICAgbWFjKTsKK30KKworc3Rh dGljIHZvaWQKK2VjZV9zZXRfbWFjKHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRy KQoreworCW1lbWNweSh2bGFuMF9tYWMsIGVhZGRyLCBFVEhFUl9BRERSX0xFTik7CisJc2V0X21h Y19hZGRyZXNzKHNjLCBlYWRkciwgRVRIRVJfQUREUl9MRU4pOworfQorCisvKgorICogVE9ETzog dGhlIGRldmljZSBkb2Vzbid0IGhhdmUgTUFDIHN0b3JlZCwgd2Ugc2hvdWxkIHJlYWQgdGhlCisg KiBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiBGTEFTSCwgYnV0IHRoZSBmb3JtYXQgZGVwZW5kcyBv biB0aGUKKyAqIGJvb3Rsb2FkZXIgdXNlZC4qCisgKi8KK3N0YXRpYyBpbnQKK2VjZV9nZXRfbWFj KHN0cnVjdCBlY2Vfc29mdGMgKnNjLCB1X2NoYXIgKmVhZGRyKQoreworCXJldHVybiAoRU5YSU8p OworfQorCitzdGF0aWMgdm9pZAorZWNlX2ludHJfcnhfbG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMg KnNjLCBpbnQgY291bnQpCit7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCXN0cnVj dCBtYnVmICptYjsKKwlzdHJ1Y3QgcnhfZGVzY19pbmZvICpyeGRlc2M7CisJZXRoX3J4X2Rlc2Nf dCAqZGVzYzsKKworCWludCBmc3NkX2N1cnI7CisJaW50IGZzc2Q7CisJaW50IGk7CisJaW50IGlk eDsKKwlpbnQgcnhjb3VudDsKKwl1aW50MzJfdCBzdGF0dXM7CisKKwlmc3NkX2N1cnIgPSByZWFk XzQoc2MsIEZTX0RFU0NSSVBUT1JfUE9JTlRFUik7CisKKwlmc3NkID0gKGZzc2RfY3VyciAtICh1 aW50MzJfdClzYy0+cmluZ19wYWRkcl9yeCk+PjQ7CisKKwlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2Mt Pmxhc3RfcnhdLmRlc2M7CisKKwkvKiBQcmVwYXJlIHRvIHJlYWQgdGhlIGRhdGEgaW4gdGhlIHJp bmcuICovCisJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmluZ19yeCwKKwkgICAgc2MtPmRt YW1hcF9yaW5nX3J4LAorCSAgICBCVVNfRE1BU1lOQ19QT1NUUkVBRCB8IEJVU19ETUFTWU5DX1BP U1RXUklURSk7CisKKwlpZiAoZnNzZCA+IHNjLT5sYXN0X3J4KQorCQlyeGNvdW50ID0gZnNzZCAt IHNjLT5sYXN0X3J4OworCWVsc2UgaWYgKGZzc2QgPCBzYy0+bGFzdF9yeCkKKwkJcnhjb3VudCA9 IChFQ0VfTUFYX1JYX0JVRkZFUlMgLSBzYy0+bGFzdF9yeCkgKyBmc3NkOworCWVsc2UgeworCQlp ZiAoZGVzYy0+Y293biA9PSAwKQorCQkJcmV0dXJuOworCQllbHNlCisJCQlyeGNvdW50ID0gRUNF X01BWF9SWF9CVUZGRVJTOworCX0KKworCWZvciAoaT0gMDsgaSA8IHJ4Y291bnQ7IGkrKykgewor CQlzdGF0dXMgPSBkZXNjLT5jb3duOworCQlpZiAoIXN0YXR1cykKKwkJCWJyZWFrOworCisJCWlk eCA9IHNjLT5sYXN0X3J4OworCQlyeGRlc2MgPSAmc2MtPnJ4X2Rlc2NbaWR4XTsKKwkJbWIgPSBy eGRlc2MtPmJ1ZmY7CisKKwkJaWYgKGRlc2MtPmxlbmd0aCA8IEVUSEVSX01JTl9MRU4gLSBFVEhF Ul9DUkNfTEVOIHx8CisJCSAgICBkZXNjLT5sZW5ndGggPiBFVEhFUl9NQVhfTEVOIC0gRVRIRVJf Q1JDX0xFTiArCisJCSAgICBFVEhFUl9WTEFOX0VOQ0FQX0xFTikgeworCQkJaWZwLT5pZl9pZXJy b3JzKys7CisJCQlkZXNjLT5jb3duID0gMDsKKwkJCWRlc2MtPmxlbmd0aCA9IE1DTEJZVEVTIC0g MjsKKwkJCS8qIEludmFsaWQgcGFja2V0LCBza2lwIGFuZCBwcm9jZXNzIG5leHQKKwkJCSAqIHBh Y2tldC4KKwkJCSAqLworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoZWNlX25ld19yeGJ1Zihz YywgcnhkZXNjKSAhPSAwKSB7CisJCQlpZnAtPmlmX2lxZHJvcHMrKzsKKwkJCWRlc2MtPmNvd24g PSAwOworCQkJZGVzYy0+bGVuZ3RoID0gTUNMQllURVMgLSAyOworCQkJYnJlYWs7CisJCX0KKwor CQkvKioKKwkJICogVGhlIGRldmljZSB3aWxsIHdyaXRlIHRvIGFkZHJyZXNzICsgMiBTbyB3ZSBu ZWVkIHRvIGFkanVzdAorCQkgKiB0aGUgYWRkcmVzcyBhZnRlciB0aGUgcGFja2V0IGlzIHJlY2Vp dmVkLgorCQkgKi8KKwkJbWItPm1fZGF0YSArPSAyOworCQltYi0+bV9sZW4gPSBtYi0+bV9wa3Ro ZHIubGVuID0gZGVzYy0+bGVuZ3RoOworCisJCW1iLT5tX2ZsYWdzIHw9IE1fUEtUSERSOworCQlt Yi0+bV9wa3RoZHIucmN2aWYgPSBpZnA7CisJCWlmICgoaWZwLT5pZl9jYXBlbmFibGUgJiBJRkNB UF9SWENTVU0pICE9IDApIHsKKwkJCS8qY2hlY2sgZm9yIHZhbGlkIGNoZWNrc3VtKi8KKwkJCWlm ICggKCFkZXNjLT5sNGYpICAmJiAoZGVzYy0+cHJvdCAhPSAzKSkgeworCQkJCW1iLT5tX3BrdGhk ci5jc3VtX2ZsYWdzIHw9IENTVU1fSVBfQ0hFQ0tFRDsKKwkJCQltYi0+bV9wa3RoZHIuY3N1bV9m bGFncyB8PSBDU1VNX0lQX1ZBTElEOworCQkJCW1iLT5tX3BrdGhkci5jc3VtX2RhdGEgPSAweGZm ZmY7CisJCQl9CisJCX0KKwkJRUNFX1JYVU5MT0NLKHNjKTsKKwkJKCppZnAtPmlmX2lucHV0KShp ZnAsIG1iKTsKKwkJRUNFX1JYTE9DSyhzYyk7CisKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2Mt Pmxlbmd0aCA9IE1DTEJZVEVTIC0gMjsKKworCQlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19y aW5nX3J4LAorCQkgICAgc2MtPmRtYW1hcF9yaW5nX3J4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJF UkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKworCQlpZiAoc2MtPmxhc3RfcnggPT0gRUNF X01BWF9SWF9CVUZGRVJTIC0gMSkKKwkJCXNjLT5sYXN0X3J4ID0gMDsKKwkJZWxzZQorCQkJc2Mt Pmxhc3RfcngrKzsKKworCQlkZXNjID0gc2MtPnJ4X2Rlc2Nbc2MtPmxhc3RfcnhdLmRlc2M7CisJ fQorCisJLyogU3luYyB1cGRhdGVkIGZsYWdzLiAqLworCWJ1c19kbWFtYXBfc3luYyhzYy0+ZG1h dGFnX3JpbmdfcngsCisJICAgIHNjLT5kbWFtYXBfcmluZ19yeCwKKwkgICAgQlVTX0RNQVNZTkNf UFJFUkVBRCB8IEJVU19ETUFTWU5DX1BSRVdSSVRFKTsKKworCXJldHVybjsKK30KKworc3RhdGlj IHZvaWQKK2VjZV9pbnRyX3Rhc2sodm9pZCAqYXJnLCBpbnQgcGVuZGluZyBfX3VudXNlZCkKK3sK KwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGFyZzsKKwlFQ0VfUlhMT0NLKHNjKTsKKwllY2VfaW50 cl9yeF9sb2NrZWQoc2MsIC0xKTsKKwlFQ0VfUlhVTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9p ZAorZWNlX2ludHIodm9pZCAqeHNjKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0geHNjOwor CXN0cnVjdCBpZm5ldCAqaWZwID0gc2MtPmlmcDsKKworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3Mg JiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJd3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0ws IDApOworCQlyZXR1cm47CisJfQorCisJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2Mt PnNjX2ludHJfdGFzayk7CisKKwlpZiAoIUlGUV9EUlZfSVNfRU1QVFkoJmlmcC0+aWZfc25kKSkK KwkJdGFza3F1ZXVlX2VucXVldWUoc2MtPnNjX3RxLCAmc2MtPnNjX3R4X3Rhc2spOworfQorCitz dGF0aWMgdm9pZAorZWNlX2ludHJfc3RhdHVzKHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3Nv ZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJaW50IHN0YXQ7 CisKKwlzdGF0ID0gcmVhZF80KHNjLCBJTlRFUlJVUFRfU1RBVFVTKTsKKworCXdyaXRlXzQoc2Ms IElOVEVSUlVQVF9TVEFUVVMsIHN0YXQpOworCisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElG Rl9EUlZfUlVOTklORykgIT0gMCkgeworCQlpZiAoKHN0YXQgJiBFUlJPUl9NQVNLKSAhPSAwKQor CQkJaWZwLT5pZl9pcWRyb3BzKys7CisJfQorfQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBf bG9ja2VkKHN0cnVjdCBlY2Vfc29mdGMgKnNjKQoreworCWV0aF90eF9kZXNjX3QgKmRlc2M7CisK KwlpZiAoc2MtPnR4X2NvbnMgPT0gc2MtPnR4X3Byb2QpIHJldHVybjsKKworCS8qIFByZXBhcmUg dG8gcmVhZCB0aGUgcmluZyAob3duZXIgYml0KS4gKi8KKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRt YXRhZ19yaW5nX3R4LAorCSAgICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5D X1BPU1RSRUFEIHwgQlVTX0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCXdoaWxlIChzYy0+dHhfY29u cyAhPSBzYy0+dHhfcHJvZCkgeworCQlkZXNjID0gc2MtPnR4X2Rlc2Nbc2MtPnR4X2NvbnNdLmRl c2M7CisJCWlmIChkZXNjLT5jb3duICE9IDApIHsKKwkJCXN0cnVjdCB0eF9kZXNjX2luZm8gKnRk ID0gJihzYy0+dHhfZGVzY1tzYy0+dHhfY29uc10pOworCQkJLyogV2UgYXJlIGZpbmlzaGVkIHdp dGggdGhpcyBkZXNjcmlwdG9yIC4uLiAqLworCQkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdf ZGF0YV90eCwgdGQtPmRtYW1hcCwKKwkJCSAgICBCVVNfRE1BU1lOQ19QT1NUV1JJVEUpOworCQkJ LyogLi4uIGFuZCB1bmxvYWQsIHNvIHdlIGNhbiByZXVzZS4gKi8KKwkJCWJ1c19kbWFtYXBfdW5s b2FkKHNjLT5kbWF0YWdfZGF0YV90eCwgdGQtPmRtYW1hcCk7CisJCQltX2ZyZWVtKHRkLT5idWZm KTsKKwkJCXRkLT5idWZmID0gMDsKKwkJCXNjLT50eF9jb25zID0gKHNjLT50eF9jb25zICsgMSkg JSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCX0gZWxzZSB7CisJCQlicmVhazsKKwkJfQorCX0KKwor fQorCitzdGF0aWMgdm9pZAorZWNlX2NsZWFudXBfdGFzayh2b2lkICphcmcsIGludCBwZW5kaW5n IF9fdW51c2VkKQoreworCXN0cnVjdCBlY2Vfc29mdGMgKnNjID0gYXJnOworCUVDRV9DTEVBTlVQ TE9DSyhzYyk7CisJZWNlX2NsZWFudXBfbG9ja2VkKHNjKTsKKwlFQ0VfQ0xFQU5VUFVOTE9DSyhz Yyk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfaW50cl90eCh2b2lkICp4c2MpCit7CisJc3RydWN0 IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOworCWlm ICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiBJRkZfRFJWX1JVTk5JTkcpID09IDApIHsKKwkJLyogVGhp cyBzaG91bGQgbm90IGhhcHBlbiwgc3RvcCBETUEuICovCisJCXdyaXRlXzQoc2MsIEZTX0RNQV9D T05UUk9MLCAwKTsKKwkJcmV0dXJuOworCX0KKwl0YXNrcXVldWVfZW5xdWV1ZShzYy0+c2NfdHEs ICZzYy0+c2NfY2xlYW51cF90YXNrKTsKK30KKworc3RhdGljIHZvaWQKK2VjZV9pbnRyX3FmKHZv aWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IHhzYzsKKwlzdHJ1Y3QgaWZuZXQg KmlmcCA9IHNjLT5pZnA7CisJaWYgKChpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklO RykgPT0gMCkgeworCQkvKiBUaGlzIHNob3VsZCBub3QgaGFwcGVuLCBzdG9wIERNQS4gKi8KKwkJ d3JpdGVfNChzYywgRlNfRE1BX0NPTlRST0wsIDApOworCQlyZXR1cm47CisJfQorCXRhc2txdWV1 ZV9lbnF1ZXVlKHNjLT5zY190cSwgJnNjLT5zY19pbnRyX3Rhc2spOworCXdyaXRlXzQoc2MsIEZT X0RNQV9DT05UUk9MLCAxKTsKK30KKworLyoKKyAqIFJlc2V0IGFuZCBpbml0aWFsaXplIHRoZSBj aGlwCisgKi8KK3N0YXRpYyB2b2lkCitlY2Vpbml0X2xvY2tlZCh2b2lkICp4c2MpCit7CisJc3Ry dWN0IGVjZV9zb2Z0YyAqc2MgPSB4c2M7CisJc3RydWN0IGlmbmV0ICppZnAgPSBzYy0+aWZwOwor CXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXVpbnQzMl90IGNmZ19yZWc7CisJdWludDMyX3QgY3B1 X3BvcnRfY29uZmlnOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCXdoaWxlICgxKSB7 CisJCWNmZ19yZWcgPSByZWFkXzQoc2MsIEJJU1RfUkVTVUxUX1RFU1RfMCk7CisJCWlmICgoY2Zn X3JlZyAmICgxPDwxNykpKQorCQkJYnJlYWs7CisJCURFTEFZKDEwMCk7CisJfQorCS8qIFNldCB0 byBkZWZhdWx0IHZhbHVlcy4gKi8KKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCAweDAwN0FB N0ExKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgMHgwMDQyM0QwMCk7CisJd3Jp dGVfNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIDB4MDA0MjNEODApOworCXdyaXRlXzQoc2MsIENQ VV9QT1JUX0NPTkZJRywgMHgwMDRDMDAwMCk7CisKKwloYXJkd2FyZV9pbml0KHNjKTsKKworCW1h Y19wb3J0X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCisJIC8qIEVu YWJsZSBQb3J0IDAgKi8KKwltYWNfcG9ydF9jb25maWcgJj0gKH4oUE9SVF9ESVNBQkxFKSk7CisJ d3JpdGVfNChzYywgTUFDX1BPUlRfMF9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwljcHVf cG9ydF9jb25maWcgPSByZWFkXzQoc2MsIENQVV9QT1JUX0NPTkZJRyk7CisJLyogRW5hYmxlIENQ VS4gKi8KKwljcHVfcG9ydF9jb25maWcgJj0gfihQT1JUX0RJU0FCTEUpOworCXdyaXRlXzQoc2Ms IENQVV9QT1JUX0NPTkZJRywgY3B1X3BvcnRfY29uZmlnKTsKKworCS8qCisJICogU2V0ICdydW5u aW5nJyBmbGFnLCBhbmQgY2xlYXIgb3V0cHV0IGFjdGl2ZSBmbGFnCisJICogYW5kIGF0dGVtcHQg dG8gc3RhcnQgdGhlIG91dHB1dAorCSAqLworCWlmcC0+aWZfZHJ2X2ZsYWdzIHw9IElGRl9EUlZf UlVOTklORzsKKwlpZnAtPmlmX2Rydl9mbGFncyAmPSB+SUZGX0RSVl9PQUNUSVZFOworCisJbWlp ID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlpYnVzKTsKKwltaWlfcG9sbHN0YXQobWlpKTsKKwkv KiBFbmFibGUgRE1BLiAqLworCXdyaXRlXzQoc2MsIEZTX0RNQV9DT05UUk9MLCAxKTsKKworCWNh bGxvdXRfcmVzZXQoJnNjLT50aWNrX2NoLCBoeiwgZWNlX3RpY2ssIHNjKTsKK30KKworc3RhdGlj IGlubGluZSBpbnQKK2VjZV9lbmNhcChzdHJ1Y3QgZWNlX3NvZnRjICpzYywgc3RydWN0IG1idWYg Km0wKQoreworCXN0cnVjdCBpZm5ldCAqaWZwOworCWJ1c19kbWFfc2VnbWVudF90IHNlZ3NbTUFY X0ZSQUdNRU5UXTsKKwlidXNfZG1hbWFwX3QgbWFwcDsKKwlldGhfdHhfZGVzY190ICpkZXNjID0g MDsKKwlpbnQgY3N1bV9mbGFnczsKKwlpbnQgZGVzY19ubzsKKwlpbnQgZXJyb3I7CisJaW50IG5z ZWdzOworCWludCBzZWc7CisKKwlpZnAgPSBzYy0+aWZwOworCisJLyogRmV0Y2ggdW51c2VkIG1h cCAqLworCW1hcHAgPSBzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uZG1hbWFwOworCisJZXJyb3Ig PSBidXNfZG1hbWFwX2xvYWRfbWJ1Zl9zZyhzYy0+ZG1hdGFnX3JpbmdfdHgsIG1hcHAsCisJICAg IG0wLCBzZWdzLCAmbnNlZ3MsCisJICAgIEJVU19ETUFfTk9XQUlUKTsKKworCWlmIChlcnJvciAh PSAwKSB7CisJCWJ1c19kbWFtYXBfdW5sb2FkKHNjLT5kbWF0YWdfcmluZ190eCwgbWFwcCk7CisJ CXJldHVybiAoKGVycm9yICE9IDApID8gZXJyb3IgOiAtMSk7CisJfQorCisJZGVzYyA9ICYoc2Mt PmRlc2NfdHhbc2MtPmRlc2NfY3Vycl90eF0pOworCXNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5k ZXNjID0gZGVzYzsKKwlzYy0+dHhfZGVzY1tzYy0+dHhfcHJvZF0uYnVmZiA9IG0wOworCWRlc2Nf bm8gPSBzYy0+ZGVzY19jdXJyX3R4OworCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2Vn KyspIHsKKwkJaWYgKGRlc2MtPmNvd24gPT0gMCApIHsKKwkJCWlmX3ByaW50ZihpZnAsICJFUlJP UjogZGVzY3JpcHRvciBpcyBzdGlsbCB1c2VkXG4iKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisK KwkJZGVzYy0+bGVuZ3RoID0gc2Vnc1tzZWddLmRzX2xlbjsKKwkJZGVzYy0+ZGF0YV9wdHIgPSBz ZWdzW3NlZ10uZHNfYWRkcjsKKworCQlpZiAoc2VnID09IDApIHsKKwkJCWRlc2MtPmZzID0gMTsK KwkJfSBlbHNlIHsKKwkJCWRlc2MtPmZzID0gMDsKKwkJfQorCQlpZiAoc2VnID09IG5zZWdzIC0g MSkgeworCQkJZGVzYy0+bHMgPSAxOworCQl9IGVsc2UgeworCQkJZGVzYy0+bHMgPSAwOworCQl9 CisKKwkJY3N1bV9mbGFncyA9IG0wLT5tX3BrdGhkci5jc3VtX2ZsYWdzOworCisJCWRlc2MtPmZy ID0gIDE7CisJCWRlc2MtPnBtYXAgPSAgMTsKKwkJZGVzYy0+aW5zdiA9ICAwOworCQlkZXNjLT5p Y28gPSAwOworCQlkZXNjLT50Y28gPSAwOworCQlkZXNjLT51Y28gPSAwOworCQlkZXNjLT5pbnRl cnJ1cHQgPSAxOworCisJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9JUCkgeworCQkJZGVzYy0+aWNv ID0gMTsKKwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9UQ1ApCisJCQkJZGVzYy0+dGNvID0gMTsK KwkJCWlmIChjc3VtX2ZsYWdzICYgQ1NVTV9VRFApCisJCQkJZGVzYy0+dWNvID0gMTsKKwkJfQor CisJCWRlc2MrKzsKKwkJc2MtPmRlc2NfY3Vycl90eCA9IChzYy0+ZGVzY19jdXJyX3R4ICsgMSkg JSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCWlmIChzYy0+ZGVzY19jdXJyX3R4ID09IDApIHsKKwkJ CWRlc2MgPSAoZXRoX3R4X2Rlc2NfdCAqKSYoc2MtPmRlc2NfdHhbMF0pOworCQl9CisJfQorCisJ ZGVzYyA9IHNjLT50eF9kZXNjW3NjLT50eF9wcm9kXS5kZXNjOworCisJc2MtPnR4X3Byb2QgPSAo c2MtPnR4X3Byb2QgKyAxKSAlIEVDRV9NQVhfVFhfQlVGRkVSUzsKKworCS8qCisJICogQWZ0ZXIg YWxsIGRlc2NyaXB0b3JzIGFyZSBzZXQsIHdlIHNldCB0aGUgZmxhZ3MgdG8gc3RhcnQgdGhlCisJ ICogc2VuZGluZyBwcm9jZXMuCisJICovCisJZm9yIChzZWcgPSAwOyBzZWcgPCBuc2Vnczsgc2Vn KyspIHsKKwkJZGVzYy0+Y293biA9IDA7CisJCWRlc2MrKzsKKwkJZGVzY19ubyA9IChkZXNjX25v ICsgMSkgJSBFQ0VfTUFYX1RYX0JVRkZFUlM7CisJCWlmIChkZXNjX25vID09IDApCisJCQlkZXNj ID0gKGV0aF90eF9kZXNjX3QgKikmKHNjLT5kZXNjX3R4WzBdKTsKKwl9CisKKwlidXNfZG1hbWFw X3N5bmMoc2MtPmRtYXRhZ19kYXRhX3R4LCBtYXBwLCBCVVNfRE1BU1lOQ19QUkVXUklURSk7CisJ cmV0dXJuICgwKTsKK30KKworLyoKKyAqIGRlcXVldSBwYWNrZXRzIGFuZCB0cmFuc21pdAorICov CitzdGF0aWMgdm9pZAorZWNlc3RhcnRfbG9ja2VkKHN0cnVjdCBpZm5ldCAqaWZwKQoreworCXN0 cnVjdCBlY2Vfc29mdGMgKnNjOworCXN0cnVjdCBtYnVmICptMDsKKwl1aW50MzJfdCBxdWV1ZWQg PSAwOworCisJc2MgPSBpZnAtPmlmX3NvZnRjOworCWlmICgoaWZwLT5pZl9kcnZfZmxhZ3MgJiAo SUZGX0RSVl9SVU5OSU5HIHwgSUZGX0RSVl9PQUNUSVZFKSkgIT0KKwkgICAgSUZGX0RSVl9SVU5O SU5HKQorCQlyZXR1cm47CisKKwlidXNfZG1hbWFwX3N5bmMoc2MtPmRtYXRhZ19yaW5nX3R4LAor CSAgICBzYy0+ZG1hbWFwX3JpbmdfdHgsCisJICAgIEJVU19ETUFTWU5DX1BPU1RSRUFEIHwgQlVT X0RNQVNZTkNfUE9TVFdSSVRFKTsKKworCWZvciAoOzspIHsKKwkJLyogR2V0IHBhY2tldCBmcm9t IHRoZSBxdWV1ZSAqLworCQlJRl9ERVFVRVVFKCZpZnAtPmlmX3NuZCwgbTApOworCQlpZiAobTAg PT0gTlVMTCkKKwkJCWJyZWFrOworCQlpZiAoZWNlX2VuY2FwKHNjLCBtMCkpIHsKKwkJCUlGX1BS RVBFTkQoJmlmcC0+aWZfc25kLCBtMCk7CisJCQlpZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJW X09BQ1RJVkU7CisJCQlicmVhazsKKwkJfQorCQlxdWV1ZWQrKzsKKwkJQlBGX01UQVAoaWZwLCBt MCk7CisJfQorCWlmIChxdWV1ZWQpIHsKKwkJYnVzX2RtYW1hcF9zeW5jKHNjLT5kbWF0YWdfcmlu Z190eCwgc2MtPmRtYW1hcF9yaW5nX3R4LAorCQkgICAgQlVTX0RNQVNZTkNfUFJFUkVBRHxCVVNf RE1BU1lOQ19QUkVXUklURSk7CisJCXdyaXRlXzQoc2MsIFRTX0RNQV9DT05UUk9MLCAxKTsKKwl9 Cit9CisKK3N0YXRpYyB2b2lkCitlY2Vpbml0KHZvaWQgKnhzYykKK3sKKwlzdHJ1Y3QgZWNlX3Nv ZnRjICpzYyA9IHhzYzsKKwlFQ0VfTE9DSyhzYyk7CisJZWNlaW5pdF9sb2NrZWQoc2MpOworCUVD RV9VTkxPQ0soc2MpOworfQorCitzdGF0aWMgdm9pZAorZWNlX3R4X3Rhc2sodm9pZCAqYXJnLCBp bnQgcGVuZGluZyBfX3VudXNlZCkKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsKKwlpZnAgPSAoc3Ry dWN0IGlmbmV0ICopYXJnOworCWVjZXN0YXJ0KGlmcCk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2Vz dGFydChzdHJ1Y3QgaWZuZXQgKmlmcCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYyA9IGlmcC0+ aWZfc29mdGM7CisJRUNFX1RYTE9DSyhzYyk7CisJZWNlc3RhcnRfbG9ja2VkKGlmcCk7CisJRUNF X1RYVU5MT0NLKHNjKTsKK30KKworLyoKKyAqIFR1cm4gb2ZmIGludGVycnVwdHMsIGFuZCBzdG9w IHRoZSBuaWMuICBDYW4gYmUgY2FsbGVkIHdpdGggc2MtPmlmcAorICogTlVMTCBzbyBiZSBjYXJl ZnVsLgorICovCitzdGF0aWMgdm9pZAorZWNlc3RvcChzdHJ1Y3QgZWNlX3NvZnRjICpzYykKK3sK KwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisJdWludDMyX3QgbWFjX3BvcnRfY29uZmln OworCisJd3JpdGVfNChzYywgVFNfRE1BX0NPTlRST0wsIDApOworCXdyaXRlXzQoc2MsIEZTX0RN QV9DT05UUk9MLCAwKTsKKworCWlmIChpZnApCisJCWlmcC0+aWZfZHJ2X2ZsYWdzICY9IH4oSUZG X0RSVl9SVU5OSU5HIHwgSUZGX0RSVl9PQUNUSVZFKTsKKworCWNhbGxvdXRfc3RvcCgmc2MtPnRp Y2tfY2gpOworCisJLypEaXNhYmxlIFBvcnQgMCAqLworCW1hY19wb3J0X2NvbmZpZyA9IHJlYWRf NChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCW1hY19wb3J0X2NvbmZpZyB8PSAoUE9SVF9ESVNB QkxFKTsKKwl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgbWFjX3BvcnRfY29uZmlnKTsK KworCS8qRGlzYWJsZSBQb3J0IDEgKi8KKwltYWNfcG9ydF9jb25maWcgPSByZWFkXzQoc2MsIE1B Q19QT1JUXzFfQ09ORklHKTsKKwltYWNfcG9ydF9jb25maWcgfD0gKFBPUlRfRElTQUJMRSk7CisJ d3JpdGVfNChzYywgTUFDX1BPUlRfMV9DT05GSUcsIG1hY19wb3J0X2NvbmZpZyk7CisKKwkvKiBE aXNhYmxlIGFsbCBpbnRlcnJ1cHQgc3RhdHVzIHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5U RVJSVVBUX01BU0ssIDB4MDAwMDFGRkYpOworCisJLyogQ2xlYXIgcHJldmlvdXMgaW50ZXJydXB0 IHNvdXJjZXMuICovCisJd3JpdGVfNChzYywgSU5URVJSVVBUX1NUQVRVUywgMHgwMDAwMUZGRik7 CisKKwl3cml0ZV80KHNjLCBTV0lUQ0hfQ09ORklHLCBpbml0aWFsX3N3aXRjaF9jb25maWcpOwor CXdyaXRlXzQoc2MsIENQVV9QT1JUX0NPTkZJRywgaW5pdGlhbF9jcHVfY29uZmlnKTsKKwl3cml0 ZV80KHNjLCBNQUNfUE9SVF8wX0NPTkZJRywgaW5pdGlhbF9wb3J0MF9jb25maWcpOworCXdyaXRl XzQoc2MsIE1BQ19QT1JUXzFfQ09ORklHLCBpbml0aWFsX3BvcnQxX2NvbmZpZyk7CisKKwljbGVh cl9tYWNfZW50cmllcyhzYywgMSk7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfcmVzdGFydChzdHJ1 Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcCA9IHNjLT5pZnA7CisKKwlp ZnAtPmlmX2Rydl9mbGFncyB8PSBJRkZfRFJWX1JVTk5JTkc7CisJaWZwLT5pZl9kcnZfZmxhZ3Mg Jj0gfklGRl9EUlZfT0FDVElWRTsKKwkvKiBFbmFibGUgcG9ydCAwLiAqLworCXdyaXRlXzQoc2Ms IFBPUlRfMF9DT05GSUcsCisJICAgIHJlYWRfNChzYywgUE9SVF8wX0NPTkZJRykgJiB+KFBPUlRf RElTQUJMRSkpOworCXdyaXRlXzQoc2MsIElOVEVSUlVQVF9NQVNLLCAweDAwMDAwMDAwKTsKKwl3 cml0ZV80KHNjLCBGU19ETUFfQ09OVFJPTCwgMSk7CisJY2FsbG91dF9yZXNldCgmc2MtPnRpY2tf Y2gsIGh6LCBlY2VfdGljaywgc2MpOworfQorCitzdGF0aWMgdm9pZAorc2V0X2ZpbHRlcihzdHJ1 Y3QgZWNlX3NvZnRjICpzYykKK3sKKwlzdHJ1Y3QgaWZuZXQJCSppZnA7CisJc3RydWN0IGlmbXVs dGlhZGRyCSppZm1hOworCXVpbnQzMl90IG1hY19wb3J0X2NvbmZpZzsKKworCWlmcCA9IHNjLT5p ZnA7CisKKwljbGVhcl9tYWNfZW50cmllcyhzYywgMCk7CisJaWYgKGlmcC0+aWZfZmxhZ3MgJiBJ RkZfQUxMTVVMVEkgfHwgaWZwLT5pZl9mbGFncyAmIElGRl9QUk9NSVNDKSB7CisJCW1hY19wb3J0 X2NvbmZpZyA9IHJlYWRfNChzYywgTUFDX1BPUlRfMF9DT05GSUcpOworCQltYWNfcG9ydF9jb25m aWcgJj0gfihESVNBQkxFX0JST0FEQ0FTVF9QQUNLRVQpOworCQltYWNfcG9ydF9jb25maWcgJj0g fihESVNBQkxFX01VTFRJQ0FTVF9QQUNLRVQpOworCQl3cml0ZV80KHNjLCBNQUNfUE9SVF8wX0NP TkZJRywgbWFjX3BvcnRfY29uZmlnKTsKKwkJcmV0dXJuOworCX0KKwlpZl9tYWRkcl9ybG9jayhp ZnApOworCVRBSUxRX0ZPUkVBQ0goaWZtYSwgJmlmcC0+aWZfbXVsdGlhZGRycywgaWZtYV9saW5r KSB7CisJCWlmIChpZm1hLT5pZm1hX2FkZHItPnNhX2ZhbWlseSAhPSBBRl9MSU5LKQorCQkJY29u dGludWU7CisJCWFkZF9tYWNfZW50cnkoc2MsCisJCSAgICBMTEFERFIoKHN0cnVjdCBzb2NrYWRk cl9kbCAqKWlmbWEtPmlmbWFfYWRkcikpOworCX0KKwlpZl9tYWRkcl9ydW5sb2NrKGlmcCk7Cit9 CisKK3N0YXRpYyBpbnQKK2VjZWlvY3RsKHN0cnVjdCBpZm5ldCAqaWZwLCB1X2xvbmcgY21kLCBj YWRkcl90IGRhdGEpCit7CisJc3RydWN0IGVjZV9zb2Z0YyAqc2MgPSBpZnAtPmlmX3NvZnRjOwor CXN0cnVjdCBtaWlfZGF0YSAqbWlpOworCXN0cnVjdCBpZnJlcSAqaWZyID0gKHN0cnVjdCBpZnJl cSAqKWRhdGE7CisJaW50IG1hc2ssIGVycm9yID0gMDsKKworCXN3aXRjaCAoY21kKSB7CisJY2Fz ZSBTSU9DU0lGRkxBR1M6CisJCUVDRV9MT0NLKHNjKTsKKwkJaWYgKChpZnAtPmlmX2ZsYWdzICYg SUZGX1VQKSA9PSAwICYmCisJCSAgICBpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklO RykgeworCQkJaWZwLT5pZl9kcnZfZmxhZ3MgJj0gfklGRl9EUlZfUlVOTklORzsKKwkJCWVjZXN0 b3Aoc2MpOworCQl9IGVsc2UgeworCQkJLyogUmVpbml0aWFsaXplIGNhcmQgb24gYW55IHBhcmFt ZXRlciBjaGFuZ2UuICovCisJCQlpZiAoKGlmcC0+aWZfZmxhZ3MgJiBJRkZfVVApICYmCisJCQkg ICAgIShpZnAtPmlmX2Rydl9mbGFncyAmIElGRl9EUlZfUlVOTklORykpCisJCQkJZWNlX3Jlc3Rh cnQoc2MpOworCQl9CisJCUVDRV9VTkxPQ0soc2MpOworCQlicmVhazsKKworCWNhc2UgU0lPQ0FE RE1VTFRJOgorCWNhc2UgU0lPQ0RFTE1VTFRJOgorCQlFQ0VfTE9DSyhzYyk7CisJCXNldF9maWx0 ZXIoc2MpOworCQlFQ0VfVU5MT0NLKHNjKTsKKwkJYnJlYWs7CisKKwljYXNlIFNJT0NTSUZNRURJ QToKKwljYXNlIFNJT0NHSUZNRURJQToKKwkJbWlpID0gZGV2aWNlX2dldF9zb2Z0YyhzYy0+bWlp YnVzKTsKKwkJZXJyb3IgPSBpZm1lZGlhX2lvY3RsKGlmcCwgaWZyLCAmbWlpLT5taWlfbWVkaWEs IGNtZCk7CisJCWJyZWFrOworCWNhc2UgU0lPQ1NJRkNBUDoKKwkJbWFzayA9IGlmcC0+aWZfY2Fw ZW5hYmxlIF4gaWZyLT5pZnJfcmVxY2FwOworCQlpZiAobWFzayAmIElGQ0FQX1ZMQU5fTVRVKSB7 CisJCQlFQ0VfTE9DSyhzYyk7CisJCQlFQ0VfVU5MT0NLKHNjKTsKKwkJfQorCWRlZmF1bHQ6CisJ CWVycm9yID0gZXRoZXJfaW9jdGwoaWZwLCBjbWQsIGRhdGEpOworCQlicmVhazsKKwl9CisJcmV0 dXJuIChlcnJvcik7Cit9CisKK3N0YXRpYyB2b2lkCitlY2VfY2hpbGRfZGV0YWNoZWQoZGV2aWNl X3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKworCXNj ID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCWlmIChjaGlsZCA9PSBzYy0+bWlpYnVzKQorCQlz Yy0+bWlpYnVzID0gTlVMTDsKK30KKworLyoKKyAqIE1JSSBidXMgc3VwcG9ydCByb3V0aW5lcy4K KyAqLworc3RhdGljIGludAorZWNlX21paWJ1c19yZWFkcmVnKGRldmljZV90IGRldiwgaW50IHBo eSwgaW50IHJlZykKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwkvKiBPbmx5IG9uZSBwaHkg aW4gdGhpcyBkZXZpY2UuICovCisJaWYgKHBoeT4wKQorCQlyZXR1cm4gKDApOworCXNjID0gZGV2 aWNlX2dldF9zb2Z0YyhkZXYpOworCXJldHVybiAocGh5X3JlYWQoc2MsIHBoeSwgcmVnKSk7Cit9 CisKK3N0YXRpYyBpbnQKK2VjZV9taWlidXNfd3JpdGVyZWcoZGV2aWNlX3QgZGV2LCBpbnQgcGh5 LCBpbnQgcmVnLCBpbnQgZGF0YSkKK3sKKwlzdHJ1Y3QgZWNlX3NvZnRjICpzYzsKKwlzYyA9IGRl dmljZV9nZXRfc29mdGMoZGV2KTsKKwlwaHlfd3JpdGUoc2MsIHBoeSwgcmVnLCBkYXRhKTsKKwly ZXR1cm4gKDApOworfQorCitzdGF0aWMgZGV2aWNlX21ldGhvZF90IGVjZV9tZXRob2RzW10gPSB7 CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsCWVjZV9w cm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gsCWVjZV9hdHRhY2gpLAorCURFVk1FVEhP RChkZXZpY2VfZGV0YWNoLAllY2VfZGV0YWNoKSwKKworCS8qIEJ1cyBpbnRlcmZhY2UgKi8KKwlE RVZNRVRIT0QoYnVzX2NoaWxkX2RldGFjaGVkLAllY2VfY2hpbGRfZGV0YWNoZWQpLAorCisJLyog TUlJIGludGVyZmFjZSAqLworCURFVk1FVEhPRChtaWlidXNfcmVhZHJlZywJZWNlX21paWJ1c19y ZWFkcmVnKSwKKwlERVZNRVRIT0QobWlpYnVzX3dyaXRlcmVnLAllY2VfbWlpYnVzX3dyaXRlcmVn KSwKKworCXsgMCwgMCB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgZWNlX2RyaXZlciA9IHsKKwki ZWNlIiwKKwllY2VfbWV0aG9kcywKKwlzaXplb2Yoc3RydWN0IGVjZV9zb2Z0YyksCit9OworCitE UklWRVJfTU9EVUxFKGVjZSwgZWNvbmFhcm0sIGVjZV9kcml2ZXIsIGVjZV9kZXZjbGFzcywgMCwg MCk7CitEUklWRVJfTU9EVUxFKG1paWJ1cywgZWNlLCBtaWlidXNfZHJpdmVyLCBtaWlidXNfZGV2 Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChlY2UsIG1paWJ1cywgMSwgMSwgMSk7CitNT0RV TEVfREVQRU5EKGVjZSwgZXRoZXIsIDEsIDEsIDEpOwpJbmRleDogYXJtL2Vjb25hL2lmX2VjZXJl Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKKysr IGFybS9lY29uYS9pZl9lY2VyZWcuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNTQgQEAKKy8q LQorICogQ29weXJpZ2h0IChjKSAyMDA5LCBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwu Y29tPgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UgdW5tb2RpZmllZCwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgKiAgICBkaXNjbGFp bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9S IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VT IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU RSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklM SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg SU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICogJEZy ZWVCU0QgJAorICovCisKKyNpZm5kZWYJX0lGX0VDRVJFR19ICisjZGVmaW5lCV9JRl9FQ0VSRUdf SAorCisjZGVmaW5lCUVUSF9DRkcJCTB4MDgKKyNkZWZpbmUJRVRIX0NGR19STUlJCQkoMSA8PCAx NSkKKyNkZWZpbmUJUEhZX0NPTlRST0wJCTB4MDAKKyNkZWZpbmUJUEhZX1JXX09LCQkoMTw8MTUp CisKKyNkZWZpbmUJUEhZX0FERFJFU1MoeCkJCSgoeCkgJiAweDEpCisjZGVmaW5lCVBIWV9SRUdJ U1RFUihyKQkoKChyKSAmIDB4MUYpIDw8IDgpCisjZGVmaW5lCVBIWV9XUklURV9DT01NQU5ECSgx PDwxMykKKyNkZWZpbmUJUEhZX1JFQURfQ09NTUFORAkoMTw8MTQpCisjZGVmaW5lCVBIWV9HRVRf REFUQShkKQkoKChkKSA+PiAxNikgJiAweEZGRkYpCisjZGVmaW5lCVBIWV9EQVRBKGQpCQkoKChk KSAmIDB4RkZGRikgPDwgMTYpCisKKyNkZWZpbmUJUE9SVF8wX0NPTkZJRwkJMHgwOAorCisjZGVm aW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8wCTB4MDUwCisjZGVmaW5lCUFSTF9UQUJMRV9B Q0NFU1NfQ09OVFJPTF8xCTB4MDU0CisjZGVmaW5lCUFSTF9UQUJMRV9BQ0NFU1NfQ09OVFJPTF8y CTB4MDU4CisKKyNkZWZpbmUJQVJMX1dSSVRFX0NPTU1BTkQJKDE8PDMpCisjZGVmaW5lCUFSTF9M T09LVVBfQ09NTUFORAkoMTw8MikKKyNkZWZpbmUJQVJMX0NPTU1BTkRfQ09NUExFVEUJKDEpCisK KworI2RlZmluZQlQT1JUMAkJCSgxIDw8IDApCisjZGVmaW5lCVBPUlQxCQkJKDEgPDwgMSkKKyNk ZWZpbmUJQ1BVX1BPUlQJCSgxIDw8IDIpCisKKworI2RlZmluZQlWTEFOMF9HUk9VUF9JRAkJKDAp CisjZGVmaW5lCVZMQU4xX0dST1VQX0lECQkoMSkKKyNkZWZpbmUJVkxBTjJfR1JPVVBfSUQJCSgy KQorI2RlZmluZQlWTEFOM19HUk9VUF9JRAkJKDMpCisjZGVmaW5lCVZMQU40X0dST1VQX0lECQko NCkKKyNkZWZpbmUJVkxBTjVfR1JPVVBfSUQJCSg1KQorI2RlZmluZQlWTEFONl9HUk9VUF9JRAkJ KDYpCisjZGVmaW5lCVZMQU43X0dST1VQX0lECQkoNykKKworI2RlZmluZQlQT1JUMF9QVklECQko VkxBTjFfR1JPVVBfSUQpCisjZGVmaW5lCVBPUlQxX1BWSUQJCShWTEFOMl9HUk9VUF9JRCkKKyNk ZWZpbmUJQ1BVX1BPUlRfUFZJRAkJKFZMQU4wX0dST1VQX0lEKQorCisjZGVmaW5lCVZMQU4wX1ZJ RAkJKDB4MTExKQorI2RlZmluZQlWTEFOMV9WSUQJCSgweDIyMikKKyNkZWZpbmUJVkxBTjJfVklE CQkoMHgzMzMpCisjZGVmaW5lCVZMQU4zX1ZJRAkJKDB4NDQ0KQorI2RlZmluZQlWTEFONF9WSUQJ CSgweDU1NSkKKyNkZWZpbmUJVkxBTjVfVklECQkoMHg2NjYpCisjZGVmaW5lCVZMQU42X1ZJRAkJ KDB4Nzc3KQorI2RlZmluZQlWTEFON19WSUQJCSgweDg4OCkKKworI2RlZmluZQlWTEFOMF9HUk9V UAkJKFBPUlQwIHwgUE9SVDEgfCBDUFVfUE9SVCkKKyNkZWZpbmUJVkxBTjFfR1JPVVAJCShQT1JU MCB8IENQVV9QT1JUKQorI2RlZmluZQlWTEFOMl9HUk9VUAkJKFBPUlQxIHwgQ1BVX1BPUlQpCisj ZGVmaW5lCVZMQU4zX0dST1VQCQkoMCkKKyNkZWZpbmUJVkxBTjRfR1JPVVAJCSgwKQorI2RlZmlu ZQlWTEFONV9HUk9VUAkJKDApCisjZGVmaW5lCVZMQU42X0dST1VQCQkoMCkKKyNkZWZpbmUJVkxB TjdfR1JPVVAJCSgwKQorCisjZGVmaW5lCVNXSVRDSF9DT05GSUcJCTB4MDA0CisjZGVmaW5lCU1B Q19QT1JUXzBfQ09ORklHCTB4MDA4CisjZGVmaW5lCU1BQ19QT1JUXzFfQ09ORklHCTB4MDBDCisj ZGVmaW5lCUNQVV9QT1JUX0NPTkZJRwkweDAxMAorI2RlZmluZQlCSVNUX1JFU1VMVF9URVNUXzAJ MHgwOTQKKworI2RlZmluZQlGU19ETUFfQ09OVFJPTAkJMHgxMDQKKyNkZWZpbmUJVFNfRE1BX0NP TlRST0wJCTB4MTAwCisKKyNkZWZpbmUJSU5URVJSVVBUX01BU0sJCTB4MDhDCisjZGVmaW5lCUlO VEVSUlVQVF9TVEFUVVMJMHgwODgKKworI2RlZmluZQlUU19ERVNDUklQVE9SX1BPSU5URVIJCTB4 MTA4CisjZGVmaW5lCVRTX0RFU0NSSVBUT1JfQkFTRV9BRERSCTB4MTEwCisjZGVmaW5lCUZTX0RF U0NSSVBUT1JfUE9JTlRFUgkJMHgxMEMKKyNkZWZpbmUJRlNfREVTQ1JJUFRPUl9CQVNFX0FERFIJ MHgxMTQKKworCisjZGVmaW5lCVZMQU5fVklEXzBfMQkJMHgwNjAKKyNkZWZpbmUJVkxBTl9WSURf Ml8zCQkweDA2NAorI2RlZmluZQlWTEFOX1ZJRF80XzUJCTB4MDY4CisjZGVmaW5lCVZMQU5fVklE XzZfNwkJMHgwNkMKKworI2RlZmluZQlWTEFOX1BPUlRfUFZJRAkJMHgwNUMKKyNkZWZpbmUJVkxB Tl9NRU1CRVJfUE9SVF9NQVAJCTB4MDcwCisjZGVmaW5lCVZMQU5fVEFHX1BPUlRfTUFQCQkweDA3 NAorCisKKyNkZWZpbmUJQVNJWF9HSUdBX1BIWQkJMQorI2RlZmluZQlUV09fU0lOR0xFX1BIWQkJ MgorI2RlZmluZQlBR0VSRV9HSUdBX1BIWQkJMworI2RlZmluZQlWU0M4NjAxX0dJR0FfUEhZCTQK KyNkZWZpbmUJSUNfUExVU19QSFkJCTUKKyNkZWZpbmUJTk9UX0ZPVU5EX1BIWQkJKC0xKQorCisj ZGVmaW5lCU1BWF9QQUNLRVRfTEVOCQkoMTUzNikKKworI2RlZmluZQlJTlZBTElEX0VOVFJZCQkw CisjZGVmaW5lCU5FV19FTlRSWQkJMHgxCisjZGVmaW5lCVNUQVRJQ19FTlRSWQkJMHg3CisKKy8q bWFzayBzdGF0dXMgZXhjZXB0IGZvciBsaW5rIGNoYW5nZSovCisjZGVmaW5lCUVSUk9SX01BU0sJ CTB4RkZGRkZGN0YKKworLypoYXJkd2FyZSBpbnRlcmZhY2UgZmxhZ3MqLworCisjZGVmaW5lCUZB U1RfQUdJTkcJCSgweGYpCisjZGVmaW5lCUlWTF9MRUFSTklORwkJKDB4MSA8PCAyMikKKy8qaGFy ZHdhcmUgTkFUIGFjY2VsZXJhdG9yKi8KKyNkZWZpbmUJSEFSRFdBUkVfTkFUCQkoMHgxIDw8IDIz KQorLyphZ2luZwkJdGltZQkJc2V0dGluZyovCisKKy8qc2tpcCBsb29rdXAqLworI2RlZmluZQlT S0lQX0wyX0xPT0tVUF9QT1JUXzEJKDEgPDwgMjkpCisjZGVmaW5lCVNLSVBfTDJfTE9PS1VQX1BP UlRfMAkoMSA8PCAyOCkKKworI2RlZmluZQlOSUNfTU9ERQkJKDEgPDwgMzApCisjZGVmaW5lCVBP UlRfRElTQUJMRQkJKDEgPDwgMTgpCisjZGVmaW5lCVNBX0xFQVJOSU5HX0RJU0FCTEUJCSgxIDw8 IDE5KQorI2RlZmluZQlESVNBQkxFX0JST0FEQ0FTVF9QQUNLRVQJKDEgPDwgMjcpCisjZGVmaW5l CURJU0FCTEVfTVVMVElDQVNUX1BBQ0tFVAkoIDEgPDwgMjYpCisKKyNlbmRpZgpJbmRleDogYXJt L2Vjb25hL2NmaV9idXNfZWNvbmEuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0vZWNvbmEvY2ZpX2J1c19l Y29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2NmaV9idXNfZWNvbmEuYwkocmV2aXNp b24gMCkKQEAgLTAsMCArMSw2NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgWW9oYW5l cyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBg QVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1F UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1Ig QU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVE IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G IFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X RVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G IFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fRkJTRElEKCIk RnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0 bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2luY2x1 ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbWFsbG9jLmg+CisjaW5jbHVkZSA8c3lz L21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5o PgorCisjaW5jbHVkZSA8bWFjaGluZS9idXMuaD4KKworI2luY2x1ZGUgPGRldi9jZmkvY2ZpX3Zh ci5oPgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9l Y29uYS9lY29uYV92YXIuaD4KKworc3RhdGljIGludAorY2ZpX2Vjb25hX3Byb2JlKGRldmljZV90 IGRldikKK3sKKworCXJldHVybiBjZmlfcHJvYmUoZGV2KTsKK30KKworc3RhdGljIGRldmljZV9t ZXRob2RfdCBjZmlfZWNvbmFfbWV0aG9kc1tdID0geworCS8qIGRldmljZSBpbnRlcmZhY2UgKi8K KwlERVZNRVRIT0QoZGV2aWNlX3Byb2JlLAkJY2ZpX2Vjb25hX3Byb2JlKSwKKwlERVZNRVRIT0Qo ZGV2aWNlX2F0dGFjaCwJY2ZpX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsCWNm aV9kZXRhY2gpLAorCisJezAsIDB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgY2ZpX2Vjb25hX2Ry aXZlciA9IHsKKwljZmlfZHJpdmVyX25hbWUsCisJY2ZpX2Vjb25hX21ldGhvZHMsCisJc2l6ZW9m KHN0cnVjdCBjZmlfc29mdGMpLAorfTsKK0RSSVZFUl9NT0RVTEUoY2ZpLCBlY29uYWFybSwgY2Zp X2Vjb25hX2RyaXZlciwgY2ZpX2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS90aW1l ci5jCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS90aW1lci5jCShyZXZpc2lvbiAwKQorKysgYXJt L2Vjb25hL3RpbWVyLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzgxIEBACisvKi0KKyAqIENv cHlyaWdodCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPi4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0 aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ Uk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkg RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5P IEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5Z IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O U0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZF UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS QUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRI SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNV Q0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CitfX0ZCU0RJRCgiJEZyZWVC U0QgJCIpOworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgor I2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMva2VybmVsLmg+CisjaW5jbHVkZSA8 c3lzL21vZHVsZS5oPgorI2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcm1h bi5oPgorI2luY2x1ZGUgPHN5cy90aW1ldGMuaD4KKyNpbmNsdWRlIDxzeXMvd2F0Y2hkb2cuaD4K KyNpbmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvY3B1Lmg+CisjaW5j bHVkZSA8bWFjaGluZS9mcmFtZS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvaW50ci5oPgorCisjaW5j bHVkZSAiZWNvbmFfcmVnLmgiCisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKKyNkZWZpbmUJSU5J VElBTF9USU1FQ09VTlRFUgkoMHhmZmZmZmZmZikKKworc3RhdGljIGludCB0aW1lcnNfaW5pdGlh bGl6ZWQgPSAwOworCisjZGVmaW5lCUhaCTEwMAorCitleHRlcm4gdW5zaWduZWQgaW50IENQVV9j bG9jazsKK2V4dGVybiB1bnNpZ25lZCBpbnQgQUhCX2Nsb2NrOworZXh0ZXJuIHVuc2lnbmVkIGlu dCBBUEJfY2xvY2s7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRpbWVyX2NvdW50ZXIgPSAwOwor CitzdHJ1Y3QgZWNfdGltZXJfc29mdGMgeworCXN0cnVjdCByZXNvdXJjZQkqCXRpbWVyX3Jlc1sz XTsKKwlidXNfc3BhY2VfdGFnX3QJCXRpbWVyX2JzdDsKKwlidXNfc3BhY2VfaGFuZGxlX3QJdGlt ZXJfYnNoOworCXN0cnVjdCBtdHgJCXRpbWVyX210eDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgcmVz b3VyY2Vfc3BlYyBlY190aW1lcl9zcGVjW10gPSB7CisJeyBTWVNfUkVTX01FTU9SWSwJMCwJUkZf QUNUSVZFIH0sCisJeyBTWVNfUkVTX0lSUSwJCTAsCVJGX0FDVElWRSB9LAorCXsgU1lTX1JFU19J UlEsCQkxLAlSRl9BQ1RJVkUgfSwKKwl7IC0xLCAwIH0KK307CisKK3N0YXRpYyB1bnNpZ25lZCBl Y190aW1lcl9nZXRfdGltZWNvdW50KHN0cnVjdCB0aW1lY291bnRlciAqKTsKKworc3RhdGljIHN0 cnVjdCB0aW1lY291bnRlciBlY190aW1lY291bnRlciA9IHsKKwkudGNfZ2V0X3RpbWVjb3VudCA9 IGVjX3RpbWVyX2dldF90aW1lY291bnQsCisJLnRjX25hbWUgPSAiQ1BVIFRpbWVyIiwKKwkvKiBU aGlzIGlzIGFzc2lnbmVkIG9uIHRoZSBmbHkgaW4gdGhlIGluaXQgc2VxdWVuY2UgKi8KKwkudGNf ZnJlcXVlbmN5ID0gMCwKKwkudGNfY291bnRlcl9tYXNrID0gfjB1LAorCS50Y19xdWFsaXR5ID0g MTAwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZWNfdGltZXJfc29mdGMgKnRpbWVyX3NvZnRjID0g TlVMTDsKKworc3RhdGljIGlubGluZQordm9pZCB3cml0ZV80KHVuc2lnbmVkIGludCB2YWwsIHVu c2lnbmVkIGludCBhZGRyKQoreworCWJ1c19zcGFjZV93cml0ZV80KHRpbWVyX3NvZnRjLT50aW1l cl9ic3QsCisJCQkgIHRpbWVyX3NvZnRjLT50aW1lcl9ic2gsIGFkZHIsIHZhbCk7CisKK30KKwor c3RhdGljIGlubGluZQordW5zaWduZWQgaW50IHJlYWRfNCh1bnNpZ25lZCBpbnQgYWRkcikKK3sK KworCXJldHVybiBidXNfc3BhY2VfcmVhZF80KHRpbWVyX3NvZnRjLT50aW1lcl9ic3QsCisJICAg IHRpbWVyX3NvZnRjLT50aW1lcl9ic2gsIGFkZHIpOworfQorCisjZGVmaW5lCXVTRUNTX1BFUl9U SUNLCSgxMDAwMDAwIC8gQVBCX2Nsb2NrKQorI2RlZmluZQlUSUNLUzJVU0VDUyh4KQkoKHgpICog dVNFQ1NfUEVSX1RJQ0spCisKK3N0YXRpYyB1bnNpZ25lZAorcmVhZF90aW1lcl9jb3VudGVyX25v aW50KHZvaWQpCit7CisKKwlhcm1fbWFza19pcnEoMCk7CisJdW5zaWduZWQgaW50IHYgPSByZWFk XzQoVElNRVJfVE0xX0NPVU5URVJfUkVHKTsKKwlhcm1fdW5tYXNrX2lycSgwKTsKKwlyZXR1cm4g djsKK30KKwordm9pZAorREVMQVkoaW50IHVzZWMpCit7CisJdWludDMyX3QgdmFsLCB2YWxfdGVt cDsKKwlpbnQgbnRpY2tzOworCisJaWYgKCF0aW1lcnNfaW5pdGlhbGl6ZWQpIHsKKwkJZm9yICg7 IHVzZWMgPiAwOyB1c2VjLS0pCisJCQlmb3IgKHZhbCA9IDEwMDsgdmFsID4gMDsgdmFsLS0pCisJ CQkJOworCQlyZXR1cm47CisJfQorCisJdmFsID0gcmVhZF90aW1lcl9jb3VudGVyX25vaW50KCk7 CisJbnRpY2tzID0gKCgoQVBCX2Nsb2NrIC8gMTAwMCkgKiB1c2VjKSAvIDEwMDApICsgMTAwOwor CisJd2hpbGUgKG50aWNrcyA+IDApIHsKKwkJdmFsX3RlbXAgPSByZWFkX3RpbWVyX2NvdW50ZXJf bm9pbnQoKTsKKwkJaWYgKHZhbCA+IHZhbF90ZW1wKQorCQkJbnRpY2tzIC09ICh2YWwgLSB2YWxf dGVtcCk7CisJCWVsc2UKKwkJCW50aWNrcyAtPSAodmFsICsgKHRpbWVyX2NvdW50ZXIgLSB2YWxf dGVtcCkpOworCisJCXZhbCA9IHZhbF90ZW1wOworCX0KKworfQorCisvKgorICogU2V0dXAgdGlt ZXIKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitzZXR1cF90aW1lcih1bnNpZ25lZCBpbnQgY291 bnRlcl92YWx1ZSkKK3sKKwl1bnNpZ25lZCBpbnQgY29udHJvbF92YWx1ZTsKKwl1bnNpZ25lZCBp bnQgbWFza192YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fQ1JfUkVH KTsKKworCW1hc2tfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7CisJd3Jp dGVfNChjb3VudGVyX3ZhbHVlLCBUSU1FUl9UTTFfQ09VTlRFUl9SRUcpOworCXdyaXRlXzQoY291 bnRlcl92YWx1ZSwgVElNRVJfVE0xX0xPQURfUkVHKTsKKwl3cml0ZV80KDAsIFRJTUVSX1RNMV9N QVRDSDFfUkVHKTsKKwl3cml0ZV80KDAsVElNRVJfVE0xX01BVENIMl9SRUcpOworCisJY29udHJv bF92YWx1ZSAmPSB+KFRJTUVSMV9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUgfD0gVElN RVIxX1VQX0RPV05fQ09VTlQ7CisKKwl3cml0ZV80KDAsIFRJTUVSX1RNMl9DT1VOVEVSX1JFRyk7 CisJd3JpdGVfNCgwLCBUSU1FUl9UTTJfTE9BRF9SRUcpOworCXdyaXRlXzQofjB1LCBUSU1FUl9U TTJfTUFUQ0gxX1JFRyk7CisJd3JpdGVfNCh+MHUsVElNRVJfVE0yX01BVENIMl9SRUcpOworCisJ Y29udHJvbF92YWx1ZSAmPSB+KFRJTUVSMl9DTE9DS19TT1VSQ0UpOworCWNvbnRyb2xfdmFsdWUg Jj0gfihUSU1FUjJfVVBfRE9XTl9DT1VOVCk7CisKKwltYXNrX3ZhbHVlICY9IH4oNjMpOworCisJ d3JpdGVfNChjb250cm9sX3ZhbHVlLCBUSU1FUl9UTV9DUl9SRUcpOworCXdyaXRlXzQobWFza192 YWx1ZSwgVElNRVJfVE1fSU5UUl9NQVNLX1JFRyk7Cit9CisKKy8qCisgKiBFbmFibGUgdGltZXIK KyAqLworc3RhdGljIGlubGluZSB2b2lkCit0aW1lcl9lbmFibGUodm9pZCkKK3sKKwl1bnNpZ25l ZCBpbnQgY29udHJvbF92YWx1ZTsKKworCWNvbnRyb2xfdmFsdWUgPSByZWFkXzQoVElNRVJfVE1f Q1JfUkVHKTsKKworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIxX09WRVJGTE9XX0VOQUJMRTsKKwlj b250cm9sX3ZhbHVlIHw9IFRJTUVSMV9FTkFCTEU7CisJY29udHJvbF92YWx1ZSB8PSBUSU1FUjJf T1ZFUkZMT1dfRU5BQkxFOworCWNvbnRyb2xfdmFsdWUgfD0gVElNRVIyX0VOQUJMRTsKKworCXdy aXRlXzQoY29udHJvbF92YWx1ZSwgVElNRVJfVE1fQ1JfUkVHKTsKK30KKworc3RhdGljIGlubGlu ZSB1bnNpZ25lZCBpbnQKK3JlYWRfc2Vjb25kX3RpbWVyX2NvdW50ZXIodm9pZCkKK3sKKworCXJl dHVybiByZWFkXzQoVElNRVJfVE0yX0NPVU5URVJfUkVHKTsKK30KKworLyoKKyAqIEdldCB0aW1l ciBpbnRlcnJ1cHQgc3RhdHVzCisgKi8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50CityZWFk X3RpbWVyX2ludGVycnVwdF9zdGF0dXModm9pZCkKK3sKKworCXJldHVybiByZWFkXzQoVElNRVJf VE1fSU5UUl9TVEFUVVNfUkVHKTsKK30KKworLyoKKyAqIENsZWFyIHRpbWVyIGludGVycnVwdCBz dGF0dXMKKyAqLworc3RhdGljIGlubGluZSB2b2lkCitjbGVhcl90aW1lcl9pbnRlcnJ1cHRfc3Rh dHVzKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgaW50IGludGVycnVwdF9zdGF0dXM7 CisKKwlpbnRlcnJ1cHRfc3RhdHVzID0gICByZWFkXzQoVElNRVJfVE1fSU5UUl9TVEFUVVNfUkVH KTsKKwlpZiAoaXJxID09IDApIHsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIxX01B VENIMV9JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0gfihUSU1FUjFfTUFUQ0gxX0lOVFIp OworCQlpZiAoaW50ZXJydXB0X3N0YXR1cyAmIChUSU1FUjFfTUFUQ0gyX0lOVFIpKQorCQkJaW50 ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMV9NQVRDSDJfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRf c3RhdHVzICYgKFRJTUVSMV9PVkVSRkxPV19JTlRSKSkKKwkJCWludGVycnVwdF9zdGF0dXMgJj0g fihUSU1FUjFfT1ZFUkZMT1dfSU5UUik7CisJfQorCWlmIChpcnEgPT0gMSkgeworCQlpZiAoaW50 ZXJydXB0X3N0YXR1cyAmIChUSU1FUjJfTUFUQ0gxX0lOVFIpKQorCQkJaW50ZXJydXB0X3N0YXR1 cyAmPSB+KFRJTUVSMl9NQVRDSDFfSU5UUik7CisJCWlmIChpbnRlcnJ1cHRfc3RhdHVzICYgKFRJ TUVSMl9NQVRDSDJfSU5UUikpCisJCQlpbnRlcnJ1cHRfc3RhdHVzICY9IH4oVElNRVIyX01BVENI Ml9JTlRSKTsKKwkJaWYgKGludGVycnVwdF9zdGF0dXMgJiAoVElNRVIyX09WRVJGTE9XX0lOVFIp KQorCQkJaW50ZXJydXB0X3N0YXR1cyAmPSB+KFRJTUVSMl9PVkVSRkxPV19JTlRSKTsKKwl9CisK Kwl3cml0ZV80KGludGVycnVwdF9zdGF0dXMsIFRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRyk7Cit9 CisKK3N0YXRpYyB1bnNpZ25lZAorZWNfdGltZXJfZ2V0X3RpbWVjb3VudChzdHJ1Y3QgdGltZWNv dW50ZXIgKmEpCit7CisJdW5zaWduZWQgaW50IHRpY2tzMTsKKwlhcm1fbWFza19pcnEoMSk7CisJ dGlja3MxID0gcmVhZF9zZWNvbmRfdGltZXJfY291bnRlcigpOworCWFybV91bm1hc2tfaXJxKDEp OworCXJldHVybiB0aWNrczE7Cit9CisKKy8qCisgKiBTZXR1cCB0aW1lcgorICovCitzdGF0aWMg aW5saW5lIHZvaWQKK2RvX3NldHVwX3RpbWVyKHZvaWQpCit7CisKKwl0aW1lcl9jb3VudGVyID0g QVBCX2Nsb2NrL0haOworCS8qCisJICogc2V0dXAgdGltZXItcmVsYXRlZCB2YWx1ZXMKKwkgKi8K KwlzZXR1cF90aW1lcih0aW1lcl9jb3VudGVyKTsKK30KKwordm9pZAorY3B1X2luaXRjbG9ja3Mo dm9pZCkKK3sKKworCWVjX3RpbWVjb3VudGVyLnRjX2ZyZXF1ZW5jeSA9IEFQQl9jbG9jazsKKwl0 Y19pbml0KCZlY190aW1lY291bnRlcik7CisJdGltZXJfZW5hYmxlKCk7CisJdGltZXJzX2luaXRp YWxpemVkID0gMTsKK30KKwordm9pZAorY3B1X3N0YXJ0cHJvZmNsb2NrKHZvaWQpCit7CisKK30K Kwordm9pZAorY3B1X3N0b3Bwcm9mY2xvY2sodm9pZCkKK3sKKworfQorCitzdGF0aWMgaW50Citl Y190aW1lcl9wcm9iZShkZXZpY2VfdCBkZXYpCit7CisKKwlkZXZpY2Vfc2V0X2Rlc2MoZGV2LCAi RWNvbmEgQ1BVIFRpbWVyIik7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNfcmVz ZXQodm9pZCAqYXJnKQoreworCisJYXJtX21hc2tfaXJxKDEpOworCWNsZWFyX3RpbWVyX2ludGVy cnVwdF9zdGF0dXMoMSk7CisJYXJtX3VubWFza19pcnEoMSk7CisJcmV0dXJuIChGSUxURVJfSEFO RExFRCk7Cit9CisKK3N0YXRpYyBpbnQKK2VjX2hhcmRjbG9jayh2b2lkICphcmcpCit7CisJc3Ry dWN0CXRyYXBmcmFtZSAqZnJhbWU7CisJdW5zaWduZWQgaW50IHZhbDsKKwkvKmNsZWFyIHRpbWVy IGludGVycnVwdCBzdGF0dXMqLworCisJYXJtX21hc2tfaXJxKDApOworCisJdmFsID0gcmVhZF80 KFRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHKTsKKwl2YWwgJj0gfihUSU1FUjFfT1ZFUkZMT1df SU5URVJSVVBUKTsKKwl3cml0ZV80KHZhbCwgVElNRVJfSU5URVJSVVBUX1NUQVRVU19SRUcpOwor CisJZnJhbWUgPSAoc3RydWN0IHRyYXBmcmFtZSAqKWFyZzsKKwloYXJkY2xvY2soVFJBUEZfVVNF Uk1PREUoZnJhbWUpLCBUUkFQRl9QQyhmcmFtZSkpOworCisJYXJtX3VubWFza19pcnEoMCk7CisK KwlyZXR1cm4gKEZJTFRFUl9IQU5ETEVEKTsKK30KKworc3RhdGljIGludAorZWNfdGltZXJfYXR0 YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QJZWNfdGltZXJfc29mdGMgKnNjOworCWludAll cnJvcjsKKwl2b2lkCSppaGw7CisKKworCWlmICh0aW1lcl9zb2Z0YyAhPSBOVUxMKQorCQlyZXR1 cm4gKEVOWElPKTsKKworCXNjID0gKHN0cnVjdCBlY190aW1lcl9zb2Z0YyAqKWRldmljZV9nZXRf c29mdGMoZGV2KTsKKworCXRpbWVyX3NvZnRjID0gc2M7CisKKwllcnJvciA9IGJ1c19hbGxvY19y ZXNvdXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwlpZiAoZXJyb3Ip IHsKKwkJZGV2aWNlX3ByaW50ZihkZXYsICJjb3VsZCBub3QgYWxsb2NhdGUgcmVzb3VyY2VzXG4i KTsKKwkJcmV0dXJuIChFTlhJTyk7CisJfQorCisJc2MtPnRpbWVyX2JzdCA9IHJtYW5fZ2V0X2J1 c3RhZyhzYy0+dGltZXJfcmVzWzBdKTsKKwlzYy0+dGltZXJfYnNoID0gcm1hbl9nZXRfYnVzaGFu ZGxlKHNjLT50aW1lcl9yZXNbMF0pOworCisJZG9fc2V0dXBfdGltZXIoKTsKKworCWlmIChidXNf c2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNbMV0sIElOVFJfVFlQRV9DTEssCisJICAgIGVj X2hhcmRjbG9jaywgTlVMTCwgTlVMTCwgJmlobCkgIT0gMCkgeworCQlidXNfcmVsZWFzZV9yZXNv dXJjZXMoZGV2LCBlY190aW1lcl9zcGVjLCBzYy0+dGltZXJfcmVzKTsKKwkJZGV2aWNlX3ByaW50 ZihkZXYsICJjb3VsZCBub3Qgc2V0dXAgaGFyZGNsb2NrIGludGVycnVwdFxuIik7CisJCXJldHVy biAoRU5YSU8pOworCX0KKworCWlmIChidXNfc2V0dXBfaW50cihkZXYsIHNjLT50aW1lcl9yZXNb Ml0sIElOVFJfVFlQRV9DTEssCisJICAgIGVjX3Jlc2V0LCBOVUxMLCBOVUxMLCAmaWhsKSAhPSAw KSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlcyhkZXYsIGVjX3RpbWVyX3NwZWMsIHNjLT50aW1l cl9yZXMpOworCQlkZXZpY2VfcHJpbnRmKGRldiwgImNvdWxkIG5vdCBzZXR1cCB0aW1lciBpbnRl cnJ1cHRcbiIpOworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitz dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjX3RpbWVyX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0Qo ZGV2aWNlX3Byb2JlLCBlY190aW1lcl9wcm9iZSksCisJREVWTUVUSE9EKGRldmljZV9hdHRhY2gs IGVjX3RpbWVyX2F0dGFjaCksCisJeyAwLCAwIH0KK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY190 aW1lcl9kcml2ZXIgPSB7CisJInRpbWVyIiwKKwllY190aW1lcl9tZXRob2RzLAorCXNpemVvZihz dHJ1Y3QgZWNfdGltZXJfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3QgZWNfdGltZXJf ZGV2Y2xhc3M7CisKK0RSSVZFUl9NT0RVTEUodGltZXIsIGVjb25hYXJtLCBlY190aW1lcl9kcml2 ZXIsIGVjX3RpbWVyX2RldmNsYXNzLCAwLCAwKTsKSW5kZXg6IGFybS9lY29uYS9lY29uYS5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KLS0tIGFybS9lY29uYS9lY29uYS5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25h L2Vjb25hLmMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzU4IEBACisvKi0KKyAqIENvcHlyaWdo dCAoYykgMjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJp Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE IEJZIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNT IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg U0hBTEwgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNU LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U SUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F TlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNF RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU UklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1B R0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQoIiRGcmVlQlNEICQi KTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXN0bS5oPgorI2lu Y2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMv a2VybmVsLmg+CisjaW5jbHVkZSA8c3lzL21hbGxvYy5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUu aD4KKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorI2luY2x1ZGUgPHZtL3ZtLmg+CisjaW5jbHVkZSA8 dm0vdm1fa2Vybi5oPgorI2luY2x1ZGUgPHZtL3BtYXAuaD4KKyNpbmNsdWRlIDx2bS92bV9wYWdl Lmg+CisjaW5jbHVkZSA8dm0vdm1fZXh0ZXJuLmg+CisKKyNkZWZpbmUJX0FSTTMyX0JVU19ETUFf UFJJVkFURQorI2luY2x1ZGUgPG1hY2hpbmUvYnVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9pbnRy Lmg+CisjaW5jbHVkZSA8bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSAiZWNvbmFfcmVn LmgiCisjaW5jbHVkZSAiZWNvbmFfdmFyLmgiCisKK3N0YXRpYyBzdHJ1Y3QgZWNvbmFfc29mdGMg KmVjb25hX3NvZnRjOworCit1bnNpZ25lZCBpbnQgQ1BVX2Nsb2NrID0gMjAwMDAwMDAwOwordW5z aWduZWQgaW50IEFIQl9jbG9jazsKK3Vuc2lnbmVkIGludCBBUEJfY2xvY2s7CisKK2JzX3Byb3Rv cyhnZW5lcmljKTsKK2JzX3Byb3RvcyhnZW5lcmljX2FybXY0KTsKKworc3RydWN0IGJ1c19zcGFj ZSBlY29uYV9ic190YWcgPSB7CisJLyogY29va2llICovCisJKHZvaWQgKikgMCwKKworCS8qIG1h cHBpbmcvdW5tYXBwaW5nICovCisJZ2VuZXJpY19ic19tYXAsCisJZ2VuZXJpY19ic191bm1hcCwK KwlnZW5lcmljX2JzX3N1YnJlZ2lvbiwKKworCS8qIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uICov CisJZ2VuZXJpY19ic19hbGxvYywKKwlnZW5lcmljX2JzX2ZyZWUsCisKKwkvKiBiYXJyaWVyICov CisJZ2VuZXJpY19ic19iYXJyaWVyLAorCisJLyogcmVhZCAoc2luZ2xlKSAqLworCWdlbmVyaWNf YnNfcl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcl8yLAorCWdlbmVyaWNfYnNfcl80LAorCU5VTEws CisKKwkvKiByZWFkIG11bHRpcGxlICovCisJZ2VuZXJpY19ic19ybV8xLAorCWdlbmVyaWNfYXJt djRfYnNfcm1fMiwKKwlnZW5lcmljX2JzX3JtXzQsCisJTlVMTCwKKworCS8qIHJlYWQgcmVnaW9u ICovCisJZ2VuZXJpY19ic19ycl8xLAorCWdlbmVyaWNfYXJtdjRfYnNfcnJfMiwKKwlnZW5lcmlj X2JzX3JyXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIChzaW5nbGUpICovCisJZ2VuZXJpY19ic193 XzEsCisJZ2VuZXJpY19hcm12NF9ic193XzIsCisJZ2VuZXJpY19ic193XzQsCisJTlVMTCwKKwor CS8qIHdyaXRlIG11bHRpcGxlICovCisJZ2VuZXJpY19ic193bV8xLAorCWdlbmVyaWNfYXJtdjRf YnNfd21fMiwKKwlnZW5lcmljX2JzX3dtXzQsCisJTlVMTCwKKworCS8qIHdyaXRlIHJlZ2lvbiAq LworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiBzZXQgbXVsdGlwbGUgKi8K KwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCisJLyogc2V0IHJlZ2lvbiAqLworCU5V TEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiBjb3B5ICovCisJTlVMTCwKKwlOVUxM LAorCU5VTEwsCisJTlVMTCwKKworCS8qIHJlYWQgKHNpbmdsZSkgc3RyZWFtICovCisJTlVMTCwK KwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8qIHJlYWQgbXVsdGlwbGUgc3RyZWFtICovCisJ TlVMTCwKKwlnZW5lcmljX2FybXY0X2JzX3JtXzIsCisJTlVMTCwKKwlOVUxMLAorCisJLyogcmVh ZCByZWdpb24gc3RyZWFtICovCisJTlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTCwKKworCS8q IHdyaXRlIChzaW5nbGUpIHN0cmVhbSAqLworCU5VTEwsCisJTlVMTCwKKwlOVUxMLAorCU5VTEws CisKKwkvKiB3cml0ZSBtdWx0aXBsZSBzdHJlYW0gKi8KKwlOVUxMLAorCWdlbmVyaWNfYXJtdjRf YnNfd21fMiwKKwlOVUxMLAorCU5VTEwsCisKKwkvKiB3cml0ZSByZWdpb24gc3RyZWFtICovCisJ TlVMTCwKKwlOVUxMLAorCU5VTEwsCisJTlVMTAorfTsKKworYnVzX3NwYWNlX3RhZ190IG9iaW9f dGFnID0gJmVjb25hX2JzX3RhZzsKKworc3RhdGljIGludAorZWNvbmFfcHJvYmUoZGV2aWNlX3Qg ZGV2KQoreworCisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVDT05BIGRldmljZSBidXMiKTsKKwly ZXR1cm4gKDApOworfQorCitzdGF0aWMgdm9pZAorZWNvbmFfaWRlbnRpZnkoZHJpdmVyX3QgKmRy diwgZGV2aWNlX3QgcGFyZW50KQoreworCisJQlVTX0FERF9DSElMRChwYXJlbnQsIDAsICJlY29u YWFybSIsIDApOworfQorCitzdHJ1Y3QgYXJtMzJfZG1hX3JhbmdlICoKK2J1c19kbWFfZ2V0X3Jh bmdlKHZvaWQpCit7CisKKwlyZXR1cm4gKE5VTEwpOworfQorCitpbnQKK2J1c19kbWFfZ2V0X3Jh bmdlX25iKHZvaWQpCit7CisKKwlyZXR1cm4gKDApOworfQorCitleHRlcm4gdm9pZCBpcnFfZW50 cnkodm9pZCk7CisKK3N0YXRpYyB2b2lkCitlY29uYV9hZGRfY2hpbGQoZGV2aWNlX3QgZGV2LCBp bnQgcHJpbywgY29uc3QgY2hhciAqbmFtZSwgaW50IHVuaXQsCisgICAgYnVzX2FkZHJfdCBhZGRy LCBidXNfc2l6ZV90IHNpemUsCisgICAgaW50IGlycTAsIGludCBpcnExLAorICAgIGludCBpcnEy LCBpbnQgaXJxMywgaW50IGlycTQpCit7CisJZGV2aWNlX3Qga2lkOworCXN0cnVjdCBlY29uYV9p dmFyICppdmFyOworCisJa2lkID0gZGV2aWNlX2FkZF9jaGlsZF9vcmRlcmVkKGRldiwgcHJpbywg bmFtZSwgdW5pdCk7CisJaWYgKGtpZCA9PSBOVUxMKSB7CisJCXByaW50ZigiQ2FuJ3QgYWRkIGNo aWxkICVzJWQgb3JkZXJlZFxuIiwgbmFtZSwgdW5pdCk7CisJCXJldHVybjsKKwl9CisJaXZhciA9 IG1hbGxvYyhzaXplb2YoKml2YXIpLCBNX0RFVkJVRiwgTV9OT1dBSVQgfCBNX1pFUk8pOworCWlm IChpdmFyID09IE5VTEwpIHsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGtpZCk7CisJCXJl dHVybjsKKwl9CisJZGV2aWNlX3NldF9pdmFycyhraWQsIGl2YXIpOworCXJlc291cmNlX2xpc3Rf aW5pdCgmaXZhci0+cmVzb3VyY2VzKTsKKwlpZiAoaXJxMCAhPSAtMSkKKwkJYnVzX3NldF9yZXNv dXJjZShraWQsIFNZU19SRVNfSVJRLCAwLCBpcnEwLCAxKTsKKwlpZiAoaXJxMSAhPSAwKQorCQli dXNfc2V0X3Jlc291cmNlKGtpZCwgU1lTX1JFU19JUlEsIDEsIGlycTEsIDEpOworCWlmIChpcnEy ICE9IDApCisJCWJ1c19zZXRfcmVzb3VyY2Uoa2lkLCBTWVNfUkVTX0lSUSwgMiwgaXJxMiwgMSk7 CisJaWYgKGlycTMgIT0gMCkKKwkJYnVzX3NldF9yZXNvdXJjZShraWQsIFNZU19SRVNfSVJRLCAz LCBpcnEzLCAxKTsKKwlpZiAoaXJxNCAhPSAwKQorCQlidXNfc2V0X3Jlc291cmNlKGtpZCwgU1lT X1JFU19JUlEsIDQsIGlycTQsIDEpOworCisJaWYgKGFkZHIgIT0gMCkKKwkJYnVzX3NldF9yZXNv dXJjZShraWQsIFNZU19SRVNfTUVNT1JZLCAwLCBhZGRyLCBzaXplKTsKKworfQorCitzdHJ1Y3Qg Y3B1X2RldnMKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWludCB1bml0OworCWJ1c19hZGRyX3Qg bWVtX2Jhc2U7CisJYnVzX3NpemVfdCBtZW1fbGVuOworCWludCBpcnEwOworCWludCBpcnExOwor CWludCBpcnEyOworCWludCBpcnEzOworCWludCBpcnE0OworfTsKKworc3RydWN0IGNwdV9kZXZz IGVjb25hcm1fZGV2c1tdID0KK3sKKwl7CisJCSJlY29uYV9pYyIsIDAsCisJCUVDT05BX0lPX0JB U0UgKyBFQ09OQV9QSUNfQkFTRSwgRUNPTkFfUElDX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInN5 c3RlbSIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9TWVNURU1fQkFTRSwgRUNPTkFfU1lT VEVNX1NJWkUsCisJCTAKKwl9LAorCXsKKwkJInVhcnQiLCAwLAorCQlFQ09OQV9JT19CQVNFICsg RUNPTkFfVUFSVF9CQVNFLCBFQ09OQV9VQVJUX1NJWkUsCisJCUVDT05BX0lSUV9VQVJUCisJfSwK Kwl7CisJCSJ0aW1lciIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9USU1FUl9CQVNFLCBF Q09OQV9USU1FUl9TSVpFLAorCQlFQ09OQV9JUlFfVElNRVJfMSwgRUNPTkFfSVJRX1RJTUVSXzIK Kwl9LAorCXsKKwkJIm9oY2kiLCAwLAorCQlFQ09OQV9PSENJX1ZCQVNFLCBFQ09OQV9PSENJX1NJ WkUsCisJCUVDT05BX0lSUV9PSENJCisJCX0sCisJeworCQkiZWhjaSIsIDAsCisJCUVDT05BX0VI Q0lfVkJBU0UsIEVDT05BX0VIQ0lfU0laRSwKKwkJRUNPTkFfSVJRX0VIQ0kKKwl9LAorCXsKKwkJ ImNmaSIsIDAsCisJCUVDT05BX0NGSV9WQkFTRSwgRUNPTkFfQ0ZJX1NJWkUsCisJCTAKKwl9LAor CXsKKwkJImVjZSIsIDAsCisJCUVDT05BX0lPX0JBU0UgKyBFQ09OQV9ORVRfQkFTRSwgRUNPTkFf TkVUX1NJWkUsCisJCUVDT05BX0lSUV9TVEFUVVMsCisJCUVDT05BX0lSUV9UU1RDLCBFQ09OQV9J UlFfRlNSQywKKwkJRUNPTkFfSVJRX1RTUUUsIEVDT05BX0lSUV9GU1FGLAorCX0sCisJewkwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0KK307CisKK3N0YXRpYyB2b2lkCitlY29uYV9jcHVfYWRk X2J1aWx0aW5fY2hpbGRyZW4oZGV2aWNlX3QgZGV2LCBzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjKQor eworCWludCBpOworCXN0cnVjdCBjcHVfZGV2cyAqd2Fsa2VyOworCisJZm9yIChpID0gMCwgd2Fs a2VyID0gZWNvbmFybV9kZXZzOyB3YWxrZXItPm5hbWU7IGkrKywgd2Fsa2VyKyspIHsKKwkJZWNv bmFfYWRkX2NoaWxkKGRldiwgaSwgd2Fsa2VyLT5uYW1lLCB3YWxrZXItPnVuaXQsCisJCSAgICB3 YWxrZXItPm1lbV9iYXNlLCB3YWxrZXItPm1lbV9sZW4sCisJCSAgICB3YWxrZXItPmlycTAsd2Fs a2VyLT5pcnExLCB3YWxrZXItPmlycTIsCisJCSAgICB3YWxrZXItPmlycTMsIHdhbGtlci0+aXJx NCk7CisJfQorCit9CisKK3N0cnVjdCBpbnRjX3RyaWdnZXJfdCB7CisJaW50IG1vZGU7CisJaW50 IGxldmVsOworfTsKKworc3RhdGljIHN0cnVjdCBpbnRjX3RyaWdnZXJfdCBpbnRjX3RyaWdnZXJf dGFibGVbXSA9IHsKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VER0V9LAorCXtJ TlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VS LCBJTlRDX0ZBTExJTkdfRURHRX0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX1JJU0lOR19F REdFfSwKKwl7SU5UQ19UUklHR0VSX1VOS05PV04sIElOVENfVFJJR0dFUl9VTktOT1dOfSwKKwl7 SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRDX0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdH RVIsIElOVENfQUNUSVZFX0xPV30sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVf SElHSH0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJ e0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJ R0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJ VkVfSElHSH0sCisJe0lOVENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lO VENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lOVENfTEVWRUxf VFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VSLCBJTlRDX0ZB TExJTkdfRURHRX0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9X Tn0sCisJe0lOVENfVFJJR0dFUl9VTktOT1dOLCBJTlRDX1RSSUdHRVJfVU5LTk9XTn0sCisJe0lO VENfTEVWRUxfVFJJR0dFUiwgSU5UQ19BQ1RJVkVfSElHSH0sCisJe0lOVENfRURHRV9UUklHR0VS LCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19FREdFX1RSSUdHRVIsIElOVENfUklTSU5HX0VE R0V9LAorCXtJTlRDX0VER0VfVFJJR0dFUiwgSU5UQ19SSVNJTkdfRURHRX0sCisJe0lOVENfRURH RV9UUklHR0VSLCBJTlRDX1JJU0lOR19FREdFfSwKKwl7SU5UQ19MRVZFTF9UUklHR0VSLCBJTlRD X0FDVElWRV9MT1d9LAorCXtJTlRDX0xFVkVMX1RSSUdHRVIsIElOVENfQUNUSVZFX0xPV30sCit9 OworCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CityZWFkXzQoc3RydWN0IGVjb25hX3NvZnRjICpz YywgYnVzX3NpemVfdCBvZmYpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3JlYWRfNChzYy0+ZWNf c3QsIHNjLT5lY19zeXNfc2gsIG9mZik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAord3JpdGVf NChzdHJ1Y3QgZWNvbmFfc29mdGMgKnNjLCBidXNfc2l6ZV90IG9mZiwgdWludDMyX3QgdmFsKQor eworCisJcmV0dXJuIGJ1c19zcGFjZV93cml0ZV80KHNjLT5lY19zdCwgc2MtPmVjX3N5c19zaCwg b2ZmLCB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQzMl90CitzeXN0ZW1fcmVhZF80KHN0 cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1c19zaXplX3Qgb2ZmKQoreworCisJcmV0dXJuIGJ1c19z cGFjZV9yZWFkXzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYpOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK3N5c3RlbV93cml0ZV80KHN0cnVjdCBlY29uYV9zb2Z0YyAqc2MsIGJ1 c19zaXplX3Qgb2ZmLCB1aW50MzJfdCB2YWwpCit7CisKKwlyZXR1cm4gYnVzX3NwYWNlX3dyaXRl XzQoc2MtPmVjX3N0LCBzYy0+ZWNfc3lzdGVtX3NoLCBvZmYsIHZhbCk7Cit9CisKKworCitzdGF0 aWMgaW5saW5lIHZvaWQKK2Vjb25hX3NldF9pcnFfbW9kZShzdHJ1Y3QgZWNvbmFfc29mdGMgKiBz YywgdW5zaWduZWQgaW50IGlycSwKKwkJICAgdW5zaWduZWQgaW50IG1vZGUpCit7CisJdW5zaWdu ZWQgaW50IHZhbDsKKworCWlmICgobW9kZSAhPSBJTlRDX0xFVkVMX1RSSUdHRVIpICYmIChtb2Rl ICE9IElOVENfRURHRV9UUklHR0VSKSkKKwkJcmV0dXJuOworCisJdmFsID0JcmVhZF80KHNjLCBJ TlRDX0lOVEVSUlVQVF9UUklHR0VSX01PREVfUkVHX09GRlNFVCk7CisKKwlpZiAobW9kZSA9PSBJ TlRDX0xFVkVMX1RSSUdHRVIpIHsKKwkJaWYgKHZhbCAmICgxVUwgPDwgaXJxKSkgeworCQkJdmFs ICY9IH4oMVVMIDw8IGlycSk7CisJCQl3cml0ZV80KHNjLCBJTlRDX0lOVEVSUlVQVF9UUklHR0VS X01PREVfUkVHX09GRlNFVCwKKwkJCSAgICB2YWwpOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCEo dmFsICYgKDFVTCA8PCBpcnEpKSkgeworCQkJdmFsIHw9ICgxVUwgPDwgaXJxKTsKKwkJCXdyaXRl XzQoc2MsIElOVENfSU5URVJSVVBUX1RSSUdHRVJfTU9ERV9SRUdfT0ZGU0VULAorCQkJICAgIHZh bCk7CisJCX0KKwl9Cit9CisKKy8qCisgKiBDb25maWd1cmUgaW50ZXJydXB0IHRyaWdnZXIgbGV2 ZWwgdG8gYmUgQWN0aXZlIEhpZ2gvTG93CisgKiBvciBSaXNpbmcvRmFsbGluZyBFZGdlCisgKi8K K3N0YXRpYyBpbmxpbmUgdm9pZAorZWNvbmFfc2V0X2lycV9sZXZlbChzdHJ1Y3QgZWNvbmFfc29m dGMgKiBzYywKKyAgICB1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgbGV2ZWwpCit7CisJ dW5zaWduZWQgaW50IHZhbDsKKworCWlmICgobGV2ZWwgIT0gSU5UQ19BQ1RJVkVfSElHSCkgJiYK KwkgICAgKGxldmVsICE9IElOVENfQUNUSVZFX0xPVykgJiYKKwkgICAgKGxldmVsICE9IElOVENf UklTSU5HX0VER0UpICYmCisJICAgIChsZXZlbCAhPSBJTlRDX0ZBTExJTkdfRURHRSkpIHsKKwkJ cmV0dXJuOworCX0KKworCXZhbCA9IHJlYWRfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9M RVZFTF9SRUdfT0ZGU0VUKTsKKworCWlmICgobGV2ZWwgPT0gSU5UQ19BQ1RJVkVfSElHSCkgfHwg KGxldmVsID09IElOVENfUklTSU5HX0VER0UpKSB7CisJCWlmICh2YWwgJiAoMVVMIDw8IGlycSkp IHsKKwkJCXZhbCAmPSB+KDFVTCA8PCBpcnEpOworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJV UFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VULAorCQkJICAgIHZhbCk7CisJCX0KKwl9IGVsc2Ug eworCQlpZiAoISh2YWwgJiAoMVVMIDw8IGlycSkpKSB7CisJCQl2YWwgfD0gKDFVTCA8PCBpcnEp OworCQkJd3JpdGVfNChzYywgSU5UQ19JTlRFUlJVUFRfVFJJR0dFUl9MRVZFTF9SRUdfT0ZGU0VU LAorCQkJICAgIHZhbCk7CisJCX0KKwl9Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfc3lzdGVtX2Ns b2NrKHZvaWQpCit7CisJdWludDMyX3Qgc2Nsb2NrID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0 YywgU1lTVEVNX0NMT0NLKTsKKworCXNjbG9jayA9IChzY2xvY2sgPj4gNikgJiAweDAzOworCisJ c3dpdGNoIChzY2xvY2spIHsKKwljYXNlIDA6CisJCUNQVV9jbG9jayA9IDE3NTAwMDAwMDsKKwkJ YnJlYWs7CisJY2FzZSAxOgorCQlDUFVfY2xvY2sgPSAyMDAwMDAwMDA7CisJCWJyZWFrOworCWNh c2UgMjoKKwkJQ1BVX2Nsb2NrID0gMjI1MDAwMDAwOworCQlicmVhazsKKwljYXNlIDM6CisJCUNQ VV9jbG9jayA9IDI1MDAwMDAwMDsKKwkJYnJlYWs7CisJfQorCUFIQl9jbG9jayA9IENQVV9jbG9j ayA+PiAxOworCUFQQl9jbG9jayA9IEFIQl9jbG9jayA+PiAxOworfQorCitzdGF0aWMgaW50Citl Y29uYV9hdHRhY2goZGV2aWNlX3QgZGV2KQoreworCXN0cnVjdCBlY29uYV9zb2Z0YyAqc2MgPSBk ZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJaW50IGk7CisKKwllY29uYV9zb2Z0YyA9IHNjOworCXNj LT5lY19zdCA9ICZlY29uYV9ic190YWc7CisJc2MtPmVjX3NoID0gRUNPTkFfSU9fQkFTRTsKKwlz Yy0+ZGV2ID0gZGV2OworCWlmIChidXNfc3BhY2Vfc3VicmVnaW9uKHNjLT5lY19zdCwgc2MtPmVj X3NoLCBFQ09OQV9QSUNfQkFTRSwKKwkgICAgRUNPTkFfUElDX1NJWkUsICZzYy0+ZWNfc3lzX3No KSAhPSAwKQorCQlwYW5pYygiVW5hYmxlIHRvIG1hcCBJUlEgcmVnaXN0ZXJzIik7CisKKwlpZiAo YnVzX3NwYWNlX3N1YnJlZ2lvbihzYy0+ZWNfc3QsIHNjLT5lY19zaCwgRUNPTkFfU1lTVEVNX0JB U0UsCisJICAgIEVDT05BX1NZU1RFTV9TSVpFLCAmc2MtPmVjX3N5c3RlbV9zaCkgIT0gMCkKKwkJ cGFuaWMoIlVuYWJsZSB0byBtYXAgSVJRIHJlZ2lzdGVycyIpOworCisJc2MtPmVjX2lycV9ybWFu LnJtX3R5cGUgPSBSTUFOX0FSUkFZOworCXNjLT5lY19pcnFfcm1hbi5ybV9kZXNjciA9ICJFQ09O QSBJUlFzIjsKKwlzYy0+ZWNfbWVtX3JtYW4ucm1fdHlwZSA9IFJNQU5fQVJSQVk7CisJc2MtPmVj X21lbV9ybWFuLnJtX2Rlc2NyID0gIkVDT05BIE1lbW9yeSI7CisJaWYgKHJtYW5faW5pdCgmc2Mt PmVjX2lycV9ybWFuKSAhPSAwIHx8CisJICAgIHJtYW5fbWFuYWdlX3JlZ2lvbigmc2MtPmVjX2ly cV9ybWFuLCAwLCAzMSkgIT0gMCkKKwkJcGFuaWMoImVjb25hX2F0dGFjaDogZmFpbGVkIHRvIHNl dCB1cCBJUlEgcm1hbiIpOworCWlmIChybWFuX2luaXQoJnNjLT5lY19tZW1fcm1hbikgIT0gMCB8 fAorCSAgICBybWFuX21hbmFnZV9yZWdpb24oJnNjLT5lY19tZW1fcm1hbiwgMCwKKwkgICAgfjAp ICE9IDApCisJCXBhbmljKCJlY29uYV9hdHRhY2g6IGZhaWxlZCB0byBzZXQgdXAgbWVtb3J5IHJt YW4iKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9S RUdfT0ZGU0VULCAweGZmZmZmZmZmKTsKKworCXdyaXRlXzQoc2MsIElOVENfSU5URVJSVVBUX01B U0tfUkVHX09GRlNFVCwgMHhmZmZmZmZmZik7CisKKwl3cml0ZV80KHNjLCBJTlRDX0ZJUV9NT0RF X1NFTEVDVF9SRUdfT0ZGU0VULCAwKTsKKworCS8qaW5pdGlhbGl6ZSBpcnEqLworCWZvciAoaSA9 IDA7IGkgPCAzMjsgaSsrKSB7CisJCWlmIChpbnRjX3RyaWdnZXJfdGFibGVbaV0ubW9kZSAhPSBJ TlRDX1RSSUdHRVJfVU5LTk9XTikgeworCQkJZWNvbmFfc2V0X2lycV9tb2RlKHNjLGksIGludGNf dHJpZ2dlcl90YWJsZVtpXS5tb2RlKTsKKwkJCWVjb25hX3NldF9pcnFfbGV2ZWwoc2MsIGksIGlu dGNfdHJpZ2dlcl90YWJsZVtpXS5sZXZlbCk7CisJCX0KKwl9CisKKwlnZXRfc3lzdGVtX2Nsb2Nr KCk7CisKKwllY29uYV9jcHVfYWRkX2J1aWx0aW5fY2hpbGRyZW4oZGV2LCBzYyk7CisKKwlidXNf Z2VuZXJpY19wcm9iZShkZXYpOworCWJ1c19nZW5lcmljX2F0dGFjaChkZXYpOworCWVuYWJsZV9p bnRlcnJ1cHRzKEkzMl9iaXQgfCBGMzJfYml0KTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp YyBzdHJ1Y3QgcmVzb3VyY2UgKgorZWNvbmFfYWxsb2NfcmVzb3VyY2UoZGV2aWNlX3QgZGV2LCBk ZXZpY2VfdCBjaGlsZCwgaW50IHR5cGUsIGludCAqcmlkLAorICAgIHVfbG9uZyBzdGFydCwgdV9s b25nIGVuZCwgdV9sb25nIGNvdW50LCB1X2ludCBmbGFncykKK3sKKwlzdHJ1Y3QgZWNvbmFfc29m dGMgKnNjID0gZGV2aWNlX2dldF9zb2Z0YyhkZXYpOworCXN0cnVjdCByZXNvdXJjZV9saXN0X2Vu dHJ5ICpybGU7CisJc3RydWN0IGVjb25hX2l2YXIgKml2YXIgPSBkZXZpY2VfZ2V0X2l2YXJzKGNo aWxkKTsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmwgPSAmaXZhci0+cmVzb3VyY2VzOworCisJ aWYgKGRldmljZV9nZXRfcGFyZW50KGNoaWxkKSAhPSBkZXYpCisJCXJldHVybiAoQlVTX0FMTE9D X1JFU09VUkNFKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLAorCQkJICAgdHlwZSwgcmlk LCBzdGFydCwgZW5kLCBjb3VudCwgZmxhZ3MpKTsKKworCXJsZSA9IHJlc291cmNlX2xpc3RfZmlu ZChybCwgdHlwZSwgKnJpZCk7CisJaWYgKHJsZSA9PSBOVUxMKSB7CisJCXJldHVybiAoTlVMTCk7 CisJfQorCWlmIChybGUtPnJlcykKKwkJcGFuaWMoIlJlc291cmNlIHJpZCAlZCB0eXBlICVkIGFs cmVhZHkgaW4gdXNlIiwgKnJpZCwgdHlwZSk7CisJaWYgKHN0YXJ0ID09IDBVTCAmJiBlbmQgPT0g fjBVTCkgeworCQlzdGFydCA9IHJsZS0+c3RhcnQ7CisJCWNvdW50ID0gdWxtYXgoY291bnQsIHJs ZS0+Y291bnQpOworCQllbmQgPSB1bG1heChybGUtPmVuZCwgc3RhcnQgKyBjb3VudCAtIDEpOwor CX0KKwlzd2l0Y2ggKHR5cGUpCisJeworCWNhc2UgU1lTX1JFU19JUlE6CisJCXJsZS0+cmVzID0g cm1hbl9yZXNlcnZlX3Jlc291cmNlKCZzYy0+ZWNfaXJxX3JtYW4sCisJCSAgICBzdGFydCwgZW5k LCBjb3VudCwgZmxhZ3MsIGNoaWxkKTsKKwkJYnJlYWs7CisJY2FzZSBTWVNfUkVTX01FTU9SWToK KwkJcmxlLT5yZXMgPSBybWFuX3Jlc2VydmVfcmVzb3VyY2UoJnNjLT5lY19tZW1fcm1hbiwKKwkJ ICAgIHN0YXJ0LCBlbmQsIGNvdW50LCBmbGFncywgY2hpbGQpOworCQlpZiAocmxlLT5yZXMgIT0g TlVMTCkgeworCQkJcm1hbl9zZXRfYnVzdGFnKHJsZS0+cmVzLCAmZWNvbmFfYnNfdGFnKTsKKwkJ CXJtYW5fc2V0X2J1c2hhbmRsZShybGUtPnJlcywgc3RhcnQpOworCQl9CisJCWJyZWFrOworCX0K KwlpZiAocmxlLT5yZXMpIHsKKwkJcmxlLT5zdGFydCA9IHJtYW5fZ2V0X3N0YXJ0KHJsZS0+cmVz KTsKKwkJcmxlLT5lbmQgPSBybWFuX2dldF9lbmQocmxlLT5yZXMpOworCQlybGUtPmNvdW50ID0g Y291bnQ7CisJCXJtYW5fc2V0X3JpZChybGUtPnJlcywgKnJpZCk7CisJfQorCXJldHVybiAocmxl LT5yZXMpOworfQorCitzdGF0aWMgc3RydWN0IHJlc291cmNlX2xpc3QgKgorZWNvbmFfZ2V0X3Jl c291cmNlX2xpc3QoZGV2aWNlX3QgZGV2LCBkZXZpY2VfdCBjaGlsZCkKK3sKKwlzdHJ1Y3QgZWNv bmFfaXZhciAqaXZhcjsKKwlpdmFyID0gZGV2aWNlX2dldF9pdmFycyhjaGlsZCk7CisJcmV0dXJu ICgmKGl2YXItPnJlc291cmNlcykpOworfQorCitzdGF0aWMgaW50CitlY29uYV9yZWxlYXNlX3Jl c291cmNlKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsIGludCB0eXBlLAorICAgIGludCBy aWQsIHN0cnVjdCByZXNvdXJjZSAqcikKK3sKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJ c3RydWN0IHJlc291cmNlX2xpc3RfZW50cnkgKnJsZTsKKworCXJsID0gZWNvbmFfZ2V0X3Jlc291 cmNlX2xpc3QoZGV2LCBjaGlsZCk7CisJaWYgKHJsID09IE5VTEwpCisJCXJldHVybiAoRUlOVkFM KTsKKwlybGUgPSByZXNvdXJjZV9saXN0X2ZpbmQocmwsIHR5cGUsIHJpZCk7CisJaWYgKHJsZSA9 PSBOVUxMKQorCQlyZXR1cm4gKEVJTlZBTCk7CisJcm1hbl9yZWxlYXNlX3Jlc291cmNlKHIpOwor CXJsZS0+cmVzID0gTlVMTDsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CitlY29uYV9z ZXR1cF9pbnRyKGRldmljZV90IGRldiwgZGV2aWNlX3QgY2hpbGQsCisgICAgc3RydWN0IHJlc291 cmNlICppcmVzLCBpbnQgZmxhZ3MsIGRyaXZlcl9maWx0ZXJfdCAqZmlsdCwKKyAgICBkcml2ZXJf aW50cl90ICppbnRyLCB2b2lkICphcmcsIHZvaWQgKipjb29raWVwKQoreworCisJaWYgKHJtYW5f Z2V0X3N0YXJ0KGlyZXMpID09IEVDT05BX0lSUV9TWVNURU0gJiYgZmlsdCA9PSBOVUxMKQorCQlw YW5pYygiQWxsIHN5c3RlbSBpbnRlcnJ1cHQgSVNScyBtdXN0IGJlIEZJTFRFUiIpOworCisJQlVT X1NFVFVQX0lOVFIoZGV2aWNlX2dldF9wYXJlbnQoZGV2KSwgY2hpbGQsIGlyZXMsIGZsYWdzLCBm aWx0LAorCSAgICBpbnRyLCBhcmcsIGNvb2tpZXApOworCisJYXJtX3VubWFza19pcnEocm1hbl9n ZXRfc3RhcnQoaXJlcykpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWNvbmFf dGVhcmRvd25faW50cihkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkLCBzdHJ1Y3QgcmVzb3Vy Y2UgKnJlcywKKyAgICB2b2lkICpjb29raWUpCit7CisKKwlyZXR1cm4gKEJVU19URUFSRE9XTl9J TlRSKGRldmljZV9nZXRfcGFyZW50KGRldiksIGNoaWxkLCByZXMsIGNvb2tpZSkpOworfQorCitz dGF0aWMgaW50CitlY29uYV9hY3RpdmF0ZV9yZXNvdXJjZShkZXZpY2VfdCBidXMsIGRldmljZV90 IGNoaWxkLCBpbnQgdHlwZSwgaW50IHJpZCwKKyAgICBzdHJ1Y3QgcmVzb3VyY2UgKnIpCit7CisK KwlyZXR1cm4gKHJtYW5fYWN0aXZhdGVfcmVzb3VyY2UocikpOworfQorCitzdGF0aWMgaW50Citl Y29uYV9wcmludF9jaGlsZChkZXZpY2VfdCBkZXYsIGRldmljZV90IGNoaWxkKQoreworCXN0cnVj dCBlY29uYV9pdmFyICppdmFyczsKKwlzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqcmw7CisJaW50IHJl dHZhbCA9IDA7CisKKwlpdmFycyA9IGRldmljZV9nZXRfaXZhcnMoY2hpbGQpOworCXJsID0gJml2 YXJzLT5yZXNvdXJjZXM7CisKKwlyZXR2YWwgKz0gYnVzX3ByaW50X2NoaWxkX2hlYWRlcihkZXYs IGNoaWxkKTsKKworCXJldHZhbCArPSByZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJwb3J0 IiwgU1lTX1JFU19JT1BPUlQsICIlI2x4Iik7CisJcmV0dmFsICs9IHJlc291cmNlX2xpc3RfcHJp bnRfdHlwZShybCwgIm1lbSIsIFNZU19SRVNfTUVNT1JZLCAiJSNseCIpOworCXJldHZhbCArPSBy ZXNvdXJjZV9saXN0X3ByaW50X3R5cGUocmwsICJpcnEiLCBTWVNfUkVTX0lSUSwgIiVsZCIpOwor CWlmIChkZXZpY2VfZ2V0X2ZsYWdzKGRldikpCisJCXJldHZhbCArPSBwcmludGYoIiBmbGFncyAl I3giLCBkZXZpY2VfZ2V0X2ZsYWdzKGRldikpOworCisJcmV0dmFsICs9IGJ1c19wcmludF9jaGls ZF9mb290ZXIoZGV2LCBjaGlsZCk7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKK3ZvaWQKK2Fy bV9tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFs dWUgPSByZWFkXzQoZWNvbmFfc29mdGMsSU5UQ19JTlRFUlJVUFRfTUFTS19SRUdfT0ZGU0VUKSB8 IDE8PG5iOworCXdyaXRlXzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09G RlNFVCwgdmFsdWUpOworfQorCit2b2lkCithcm1fdW5tYXNrX2lycSh1aW50cHRyX3QgbmIpCit7 CisJdW5zaWduZWQgaW50IHZhbHVlOworCisJdmFsdWUgPSByZWFkXzQoZWNvbmFfc29mdGMsCisJ ICAgIElOVENfSU5URVJSVVBUX0NMRUFSX0VER0VfVFJJR0dFUl9SRUdfT0ZGU0VUKSB8ICgxIDw8 IG5iKTsKKwl3cml0ZV80KGVjb25hX3NvZnRjLAorCSAgICBJTlRDX0lOVEVSUlVQVF9DTEVBUl9F REdFX1RSSUdHRVJfUkVHX09GRlNFVCwgdmFsdWUpOworCXZhbHVlID0gcmVhZF80KGVjb25hX3Nv ZnRjLCBJTlRDX0lOVEVSUlVQVF9NQVNLX1JFR19PRkZTRVQpJiB+KDEgPDwgbmIpOworCXdyaXRl XzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNFVCwgdmFsdWUpOwor fQorCitpbnQKK2FybV9nZXRfbmV4dF9pcnEoaW50IHgpCit7CisJaW50IGlycTsKKworCWlycSA9 IHJlYWRfNChlY29uYV9zb2Z0YywgSU5UQ19JTlRFUlJVUFRfU1RBVFVTX1JFR19PRkZTRVQpICYK KwkgICAgfihyZWFkXzQoZWNvbmFfc29mdGMsIElOVENfSU5URVJSVVBUX01BU0tfUkVHX09GRlNF VCkpOworCisJaWYgKGlycSE9MCkgeworCQlyZXR1cm4gKGZmcyhpcnEpIC0gMSk7CisJfQorCisJ cmV0dXJuICgtMSk7Cit9CisKK3ZvaWQKK2NwdV9yZXNldCh2b2lkKQoreworCXVpbnQzMl90IGNv bnRyb2w7CisKKwljb250cm9sID0gc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09O VFJPTCk7CisJY29udHJvbCB8PSBHTE9CQUxfUkVTRVQ7CisJc3lzdGVtX3dyaXRlXzQoZWNvbmFf c29mdGMsIFJFU0VUX0NPTlRST0wsIGNvbnRyb2wpOworCWNvbnRyb2wgPSBzeXN0ZW1fcmVhZF80 KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljb250cm9sICY9ICh+KEdMT0JBTF9SRVNF VCkpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MLCBjb250cm9s KTsKKwl3aGlsZSAoMSk7Cit9CisKKworCit2b2lkCitwb3dlcl9vbl9uZXR3b3JrX2ludGVyZmFj ZSh2b2lkKQoreworCXVpbnQzMl90IGNmZ19yZWc7CisJaW50IGlpOworCisJY2ZnX3JlZyA9ICBz eXN0ZW1fcmVhZF80KGVjb25hX3NvZnRjLCBSRVNFVF9DT05UUk9MKTsKKwljZmdfcmVnIHw9IE5F VF9JTlRFUkZBQ0VfUkVTRVQ7CisJLyogc2V0IHJlc2V0IGJpdCB0byBISUdIIGFjdGl2ZTsgKi8K KwlzeXN0ZW1fd3JpdGVfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCwgY2ZnX3JlZyk7CisK KwkvKnB1bHNlIGRlbGF5ICovCisJZm9yIChpaSA9IDA7IGlpIDwgMHhGRkY7IGlpKyspCisJCURF TEFZKDEwMCk7CisJLyogc2V0IHJlc2V0IGJpdCB0byBMT1cgYWN0aXZlOyAqLworCWNmZ19yZWcg PSAgc3lzdGVtX3JlYWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyAm PSB+KE5FVF9JTlRFUkZBQ0VfUkVTRVQpOworCXN5c3RlbV93cml0ZV80KGVjb25hX3NvZnRjLCBS RVNFVF9DT05UUk9MLCBjZmdfcmVnKTsKKworCS8qcHVsc2UgZGVsYXkgKi8KKwlmb3IgKGlpID0g MDsgaWkgPCAweEZGRjsgaWkrKykKKwkJREVMQVkoMTAwKTsKKwljZmdfcmVnID0gc3lzdGVtX3Jl YWRfNChlY29uYV9zb2Z0YywgUkVTRVRfQ09OVFJPTCk7CisJY2ZnX3JlZyB8PSBORVRfSU5URVJG QUNFX1JFU0VUOworCS8qIHNldCByZXNldCBiaXQgdG8gSElHSCBhY3RpdmU7ICovCisJc3lzdGVt X3dyaXRlXzQoZWNvbmFfc29mdGMsIFJFU0VUX0NPTlRST0wsIGNmZ19yZWcpOworfQorCit1bnNp Z25lZCBpbnQKK2dldF90Y2xrKHZvaWQpCit7CisKKwlyZXR1cm4gQ1BVX2Nsb2NrOworfQorCitz dGF0aWMgZGV2aWNlX21ldGhvZF90IGVjb25hX21ldGhvZHNbXSA9IHsKKwlERVZNRVRIT0QoZGV2 aWNlX3Byb2JlLAkJZWNvbmFfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAkJZWNv bmFfYXR0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX2lkZW50aWZ5LAkJZWNvbmFfaWRlbnRpZnkp LAorCURFVk1FVEhPRChidXNfYWxsb2NfcmVzb3VyY2UsCQllY29uYV9hbGxvY19yZXNvdXJjZSks CisJREVWTUVUSE9EKGJ1c19zZXR1cF9pbnRyLAkJZWNvbmFfc2V0dXBfaW50ciksCisJREVWTUVU SE9EKGJ1c190ZWFyZG93bl9pbnRyLAkJZWNvbmFfdGVhcmRvd25faW50ciksCisJREVWTUVUSE9E KGJ1c19hY3RpdmF0ZV9yZXNvdXJjZSwJZWNvbmFfYWN0aXZhdGVfcmVzb3VyY2UpLAorCURFVk1F VEhPRChidXNfZGVhY3RpdmF0ZV9yZXNvdXJjZSwgYnVzX2dlbmVyaWNfZGVhY3RpdmF0ZV9yZXNv dXJjZSksCisJREVWTUVUSE9EKGJ1c19nZXRfcmVzb3VyY2VfbGlzdCwJZWNvbmFfZ2V0X3Jlc291 cmNlX2xpc3QpLAorCURFVk1FVEhPRChidXNfc2V0X3Jlc291cmNlLAkJYnVzX2dlbmVyaWNfcmxf c2V0X3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX2dldF9yZXNvdXJjZSwJCWJ1c19nZW5lcmlj X3JsX2dldF9yZXNvdXJjZSksCisJREVWTUVUSE9EKGJ1c19yZWxlYXNlX3Jlc291cmNlLAllY29u YV9yZWxlYXNlX3Jlc291cmNlKSwKKwlERVZNRVRIT0QoYnVzX3ByaW50X2NoaWxkLAkJZWNvbmFf cHJpbnRfY2hpbGQpLAorCXswLCAwfSwKK307CisKK3N0YXRpYyBkcml2ZXJfdCBlY29uYV9kcml2 ZXIgPSB7CisJImVjb25hYXJtIiwKKwllY29uYV9tZXRob2RzLAorCXNpemVvZihzdHJ1Y3QgZWNv bmFfc29mdGMpLAorfTsKK3N0YXRpYyBkZXZjbGFzc190IGVjb25hX2RldmNsYXNzOworCitEUklW RVJfTU9EVUxFKGVjb25hYXJtLCBuZXh1cywgZWNvbmFfZHJpdmVyLCBlY29uYV9kZXZjbGFzcywg MCwgMCk7CkluZGV4OiBhcm0vZWNvbmEvZWhjaV9lYnVzLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj b25hL2VoY2lfZWJ1cy5jCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2VoY2lfZWJ1cy5jCShy ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMCBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkg WW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIGJhc2VkIG9uIGVoY2lfbWJ1 cy5jCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggTUFSVkVMTCBJTlRFUk5BVElPTkFMIExURC4KKyAq IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0 aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0 aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFt ZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUg dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29m dHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05UUklCVVRP UlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQor ICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09OVFJJQlVU T1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElO RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisg KiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRP UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ CisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisKKyNpbmNsdWRlIDxz eXMvY2RlZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgIm9wdF9idXMu aCIKKworI2luY2x1ZGUgPG1hY2hpbmUvcmVzb3VyY2UuaD4KKworI2luY2x1ZGUgPHN5cy9zdGRp bnQuaD4KKyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+Cisj aW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8 c3lzL3N5c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMu aD4KKyNpbmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4K KyNpbmNsdWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUg PHN5cy9jb25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9z eC5oPgorI2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgor I2luY2x1ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVk ZSA8c3lzL3JtYW4uaD4KKworI2luY2x1ZGUgPGRldi91c2IvdXNiLmg+CisjaW5jbHVkZSA8ZGV2 L3VzYi91c2JkaS5oPgorCisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfY29yZS5oPgorI2luY2x1ZGUg PGRldi91c2IvdXNiX2J1c2RtYS5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3Byb2Nlc3MuaD4K KyNpbmNsdWRlIDxkZXYvdXNiL3VzYl91dGlsLmg+CisKKyNpbmNsdWRlIDxkZXYvdXNiL3VzYl9j b250cm9sbGVyLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzLmg+CisjaW5jbHVkZSA8ZGV2 L3VzYi9jb250cm9sbGVyL2VoY2kuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvZWhj aXJlZy5oPgorCisKK3N0YXRpYyBkZXZpY2VfYXR0YWNoX3QgZWhjaV9lYnVzX2F0dGFjaDsKK3N0 YXRpYyBkZXZpY2VfZGV0YWNoX3QgZWhjaV9lYnVzX2RldGFjaDsKK3N0YXRpYyBkZXZpY2Vfc2h1 dGRvd25fdCBlaGNpX2VidXNfc2h1dGRvd247CitzdGF0aWMgZGV2aWNlX3N1c3BlbmRfdCBlaGNp X2VidXNfc3VzcGVuZDsKK3N0YXRpYyBkZXZpY2VfcmVzdW1lX3QgZWhjaV9lYnVzX3Jlc3VtZTsK KworCitzdGF0aWMgdm9pZCAqaWhfZXJyOworCisjZGVmaW5lCUVIQ0lfSENfREVWU1RSICJDTlMx MVhYIFVTQiBFSENJIgorI2RlZmluZQlVU0JfQlJJREdFX0lOVFJfTUFTSyAgIDB4MjE0CisKK3N0 YXRpYyBpbnQKK2VoY2lfZWJ1c19zdXNwZW5kKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0 Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1 c19nZW5lcmljX3N1c3BlbmQoc2VsZik7CisJaWYgKGVycikKKwkJcmV0dXJuIChlcnIpOworCWVo Y2lfc3VzcGVuZChzYyk7CisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVz X3Jlc3VtZShkZXZpY2VfdCBzZWxmKQoreworCWVoY2lfc29mdGNfdCAqc2MgPSBkZXZpY2VfZ2V0 X3NvZnRjKHNlbGYpOworCisJZWhjaV9yZXN1bWUoc2MpOworCisJYnVzX2dlbmVyaWNfcmVzdW1l KHNlbGYpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGludAorZWhjaV9lYnVzX3NodXRk b3duKGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29m dGMoc2VsZik7CisJaW50IGVycjsKKworCWVyciA9IGJ1c19nZW5lcmljX3NodXRkb3duKHNlbGYp OworCWlmIChlcnIpCisJCXJldHVybiAoZXJyKTsKKwllaGNpX3NodXRkb3duKHNjKTsKKworCXJl dHVybiAoMCk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lfZWJ1c19wcm9iZShkZXZpY2VfdCBzZWxm KQoreworCisJZGV2aWNlX3NldF9kZXNjKHNlbGYsIEVIQ0lfSENfREVWU1RSKTsKKworCXJldHVy biAoQlVTX1BST0JFX0RFRkFVTFQpOworfQorCitzdGF0aWMgaW50CitlaGNpX2VidXNfYXR0YWNo KGRldmljZV90IHNlbGYpCit7CisJZWhjaV9zb2Z0Y190ICpzYyA9IGRldmljZV9nZXRfc29mdGMo c2VsZik7CisJYnVzX3NwYWNlX2hhbmRsZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisK KwkvKiBpbml0aWFsaXNlIHNvbWUgYnVzIGZpZWxkcyAqLworCXNjLT5zY19idXMucGFyZW50ID0g c2VsZjsKKwlzYy0+c2NfYnVzLmRldmljZXMgPSBzYy0+c2NfZGV2aWNlczsKKwlzYy0+c2NfYnVz LmRldmljZXNfbWF4ID0gRUhDSV9NQVhfREVWSUNFUzsKKworCS8qIGdldCBhbGwgRE1BIG1lbW9y eSAqLworCWlmICh1c2JfYnVzX21lbV9hbGxvY19hbGwoJnNjLT5zY19idXMsCisJICAgIFVTQl9H RVRfRE1BX1RBRyhzZWxmKSwgJmVoY2lfaXRlcmF0ZV9od19zb2Z0YykpIHsKKwkJcmV0dXJuIChF Tk9NRU0pOworCX0KKworCXNjLT5zY19idXMudXNicmV2ID0gVVNCX1JFVl8yXzA7CisKKwlyaWQg PSAwOworCXNjLT5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVzb3VyY2VfYW55KHNlbGYsIFNZU19S RVNfTUVNT1JZLAorCSAgICAmcmlkLCBSRl9BQ1RJVkUpOworCWlmICghc2MtPnNjX2lvX3Jlcykg eworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBub3QgbWFwIG1lbW9yeVxuIik7CisJCWdv dG8gZXJyb3I7CisJfQorCXNjLT5zY19pb190YWcgPSBybWFuX2dldF9idXN0YWcoc2MtPnNjX2lv X3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19pb19yZXMpOworCisJLypt YWdpYywgdW5kb2N1bWVudGVkIGluaXRpYWxpemF0aW9uKi8KKwlidXNfc3BhY2Vfd3JpdGVfNCgo c2MpLT5zY19pb190YWcsIGJzaCwgMHgwNCwgMHgxMDYpOworCisJYnVzX3NwYWNlX3dyaXRlXzQo KHNjKS0+c2NfaW9fdGFnLCBic2gsIDB4NDAsICgzIDw8IDUpfDB4MjAwMCk7CisKKwlERUxBWSgx MDAwKTsKKworCXNjLT5zY19pb19zaXplID0gIDQwOTY7CisKKwlpZiAoYnVzX3NwYWNlX3N1YnJl Z2lvbihzYy0+c2NfaW9fdGFnLCBic2gsIDB4NDAwMDAwMCwKKwkgICAgc2MtPnNjX2lvX3NpemUs ICZzYy0+c2NfaW9faGRsKSAhPSAwKQorCQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24g VVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJICAgIGRldmljZV9nZXRfbmFtZShzZWxmKSk7CisKKwly aWQgPSAwOworCXNjLT5zY19pcnFfcmVzID0gYnVzX2FsbG9jX3Jlc291cmNlX2FueShzZWxmLCBT WVNfUkVTX0lSUSwgJnJpZCwKKwkgICAgUkZfU0hBUkVBQkxFIHwgUkZfQUNUSVZFKTsKKwlpZiAo c2MtPnNjX2lycV9yZXMgPT0gTlVMTCkgeworCQlkZXZpY2VfcHJpbnRmKHNlbGYsICJDb3VsZCBu b3QgYWxsb2NhdGUgaXJxXG4iKTsKKwkJZWhjaV9lYnVzX2RldGFjaChzZWxmKTsKKwkJcmV0dXJu IChFTlhJTyk7CisJfQorCisJc2MtPnNjX2J1cy5iZGV2ID0gZGV2aWNlX2FkZF9jaGlsZChzZWxm LCAidXNidXMiLCAtMSk7CisJaWYgKCFzYy0+c2NfYnVzLmJkZXYpIHsKKwkJZGV2aWNlX3ByaW50 ZihzZWxmLCAiQ291bGQgbm90IGFkZCBVU0IgZGV2aWNlXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9 CisJZGV2aWNlX3NldF9pdmFycyhzYy0+c2NfYnVzLmJkZXYsICZzYy0+c2NfYnVzKTsKKwlkZXZp Y2Vfc2V0X2Rlc2Moc2MtPnNjX2J1cy5iZGV2LCBFSENJX0hDX0RFVlNUUik7CisKKwlzcHJpbnRm KHNjLT5zY192ZW5kb3IsICJDYXZpdW0iKTsKKworCWVyciA9IGJ1c19zZXR1cF9pbnRyKHNlbGYs c2MtPnNjX2lycV9yZXMsCisJICAgIElOVFJfVFlQRV9CSU8gfCBJTlRSX01QU0FGRSwgTlVMTCwK KwkgICAgKGRyaXZlcl9pbnRyX3QgKillaGNpX2ludGVycnVwdCwgc2MsCisJICAgICZzYy0+c2Nf aW50cl9oZGwpOworCWlmIChlcnIpIHsKKwkJZGV2aWNlX3ByaW50ZihzZWxmLCAiQ291bGQgbm90 IHNldHVwIGVycm9yIGlycSwgJWRcbiIsIGVycik7CisJCWloX2VyciA9IE5VTEw7CisJCWdvdG8g ZXJyb3I7CisJfQorCisJZXJyID0gZWhjaV9pbml0KHNjKTsKKwlpZiAoIWVycikgeworCQllcnIg PSBkZXZpY2VfcHJvYmVfYW5kX2F0dGFjaChzYy0+c2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJy KSB7CisJCWRldmljZV9wcmludGYoc2VsZiwgIlVTQiBpbml0IGZhaWxlZCBlcnI9JWRcbiIsIGVy cik7CisJCWdvdG8gZXJyb3I7CisJfQorCXJldHVybiAoMCk7CisKK2Vycm9yOgorCWVoY2lfZWJ1 c19kZXRhY2goc2VsZik7CisJcmV0dXJuIChFTlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK2VoY2lf ZWJ1c19kZXRhY2goZGV2aWNlX3Qgc2VsZikKK3sKKwllaGNpX3NvZnRjX3QgKnNjID0gZGV2aWNl X2dldF9zb2Z0YyhzZWxmKTsKKwlkZXZpY2VfdCBiZGV2OworCWludCBlcnI7CisKKwlpZiAoc2Mt PnNjX2J1cy5iZGV2KSB7CisJCWJkZXYgPSBzYy0+c2NfYnVzLmJkZXY7CisJCWRldmljZV9kZXRh Y2goYmRldik7CisJCWRldmljZV9kZWxldGVfY2hpbGQoc2VsZiwgYmRldik7CisJfQorCS8qIGR1 cmluZyBtb2R1bGUgdW5sb2FkIHRoZXJlIGFyZSBsb3RzIG9mIGNoaWxkcmVuIGxlZnRvdmVyICov CisJZGV2aWNlX2RlbGV0ZV9hbGxfY2hpbGRyZW4oc2VsZik7CisKKwkvKgorCSAqIGRpc2FibGUg aW50ZXJydXB0cyB0aGF0IG1pZ2h0IGhhdmUgYmVlbiBzd2l0Y2hlZCBvbiBpbiBlaGNpX2luaXQK KwkgKi8KKwlpZiAoc2MtPnNjX2lvX3JlcykgeworCQlFV1JJVEU0KHNjLCBFSENJX1VTQklOVFIs IDApOworCQlFV1JJVEU0KHNjLCBVU0JfQlJJREdFX0lOVFJfTUFTSywgMCk7CisJfQorCWlmIChz Yy0+c2NfaXJxX3JlcyAmJiBzYy0+c2NfaW50cl9oZGwpIHsKKwkJLyoKKwkJICogb25seSBjYWxs IGVoY2lfZGV0YWNoKCkgYWZ0ZXIgZWhjaV9pbml0KCkKKwkJICovCisJCWVoY2lfZGV0YWNoKHNj KTsKKworCQllcnIgPSBidXNfdGVhcmRvd25faW50cihzZWxmLCBzYy0+c2NfaXJxX3Jlcywgc2Mt PnNjX2ludHJfaGRsKTsKKworCQlpZiAoZXJyKQorCQkJLyogWFhYIG9yIHNob3VsZCB3ZSBwYW5p Yz8gKi8KKwkJCWRldmljZV9wcmludGYoc2VsZiwgIkNvdWxkIG5vdCB0ZWFyIGRvd24gaXJxLCAl ZFxuIiwKKwkJCSAgICBlcnIpOworCQlzYy0+c2NfaW50cl9oZGwgPSBOVUxMOworCX0KKwlpZiAo c2MtPnNjX2lycV9yZXMpIHsKKwkJYnVzX3JlbGVhc2VfcmVzb3VyY2Uoc2VsZiwgU1lTX1JFU19J UlEsIDEsIHNjLT5zY19pcnFfcmVzKTsKKwkJc2MtPnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlp ZiAoc2MtPnNjX2lvX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJjZShzZWxmLCBTWVNfUkVT X01FTU9SWSwgMCwKKwkJICAgIHNjLT5zY19pb19yZXMpOworCQlzYy0+c2NfaW9fcmVzID0gTlVM TDsKKwl9CisJdXNiX2J1c19tZW1fZnJlZV9hbGwoJnNjLT5zY19idXMsICZlaGNpX2l0ZXJhdGVf aHdfc29mdGMpOworCisJcmV0dXJuICgwKTsKK30KKworc3RhdGljIGRldmljZV9tZXRob2RfdCBl aGNpX21ldGhvZHNbXSA9IHsKKwkvKiBEZXZpY2UgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGRl dmljZV9wcm9iZSwgZWhjaV9lYnVzX3Byb2JlKSwKKwlERVZNRVRIT0QoZGV2aWNlX2F0dGFjaCwg ZWhjaV9lYnVzX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRhY2gsIGVoY2lfZWJ1c19k ZXRhY2gpLAorCURFVk1FVEhPRChkZXZpY2Vfc3VzcGVuZCwgZWhjaV9lYnVzX3N1c3BlbmQpLAor CURFVk1FVEhPRChkZXZpY2VfcmVzdW1lLCBlaGNpX2VidXNfcmVzdW1lKSwKKwlERVZNRVRIT0Qo ZGV2aWNlX3NodXRkb3duLCBlaGNpX2VidXNfc2h1dGRvd24pLAorCisJLyogQnVzIGludGVyZmFj ZSAqLworCURFVk1FVEhPRChidXNfcHJpbnRfY2hpbGQsIGJ1c19nZW5lcmljX3ByaW50X2NoaWxk KSwKKworCXswLCAwfQorfTsKKworc3RhdGljIGRyaXZlcl90IGVoY2lfZHJpdmVyID0geworCSJl aGNpIiwKKwllaGNpX21ldGhvZHMsCisJc2l6ZW9mKGVoY2lfc29mdGNfdCksCit9OworCitzdGF0 aWMgZGV2Y2xhc3NfdCBlaGNpX2RldmNsYXNzOworCitEUklWRVJfTU9EVUxFKGVoY2ksIGVjb25h YXJtLCBlaGNpX2RyaXZlciwgZWhjaV9kZXZjbGFzcywgMCwgMCk7CitNT0RVTEVfREVQRU5EKGVo Y2ksIHVzYiwgMSwgMSwgMSk7CkluZGV4OiBhcm0vZWNvbmEvZWNvbmFfcmVnLmgKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQotLS0gYXJtL2Vjb25hL2Vjb25hX3JlZy5oCShyZXZpc2lvbiAwKQorKysgYXJtL2Vjb25hL2Vj b25hX3JlZy5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3OCBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVT UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U IFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVD VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO VElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVT RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT VFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFN QUdFLgorICovCisjaWZuZGVmCV9BUk1fRUNPTkFfUkVHX0gKKyNkZWZpbmUJX0FSTV9FQ09OQV9S RUdfSAorCisjZGVmaW5lCUVDT05BX1NSQU1fU0laRQkweDEwMDAwMDAwCisjZGVmaW5lCUVDT05B X0RSQU1fQkFTRQkweDAwMDAwMDAwIC8qIERSQU0gKHZpYSBERFIgQ29udHJvbCBNb2R1bGUpICov CisKKyNkZWZpbmUJRUNPTkFfU0RSQU1fQkFTRQkweDQwMDAwMDAwCisjZGVmaW5lCUVDT05BX1NE UkFNX1NJWkUJMHgxMDAwMDAwCisKKworI2RlZmluZQlFQ09OQV9JT19CQVNFCQkweDcwMDAwMDAw CisjZGVmaW5lCUVDT05BX0lPX1NJWkUJCTB4MEUwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX0JB U0UJCTB4MEQwMDAwMDAKKyNkZWZpbmUJRUNPTkFfUElDX1NJWkUJCTB4MDEwMDAwMDAKKworI2Rl ZmluZQlFQ09OQV9VQVJUX0JBU0UJMHgwODAwMDAwMAorI2RlZmluZQlFQ09OQV9VQVJUX1NJWkUJ MHgwMTAwMDAwMAorI2RlZmluZQlFQ09OQV9JUlFfVUFSVAkJMHhBCisKKyNkZWZpbmUJRUNPTkFf VElNRVJfQkFTRQkweDA5MDAwMDAwCisjZGVmaW5lCUVDT05BX1RJTUVSX1NJWkUJMHgwMTAwMDAw MAorI2RlZmluZQlFQ09OQV9JUlFfVElNRVJfMQkwCisjZGVmaW5lCUVDT05BX0lSUV9USU1FUl8y CTEKKyNkZWZpbmUJRUNPTkFfSVJRX09IQ0kJCTIzCisjZGVmaW5lCUVDT05BX0lSUV9FSENJCQky NAorCisjZGVmaW5lCUVDT05BX05FVF9CQVNFCQkweDAwMDAwMDAwCisKKyNkZWZpbmUJRUNPTkFf U1lTVEVNX0JBU0UJMHgwNzAwMDAwMAorI2RlZmluZQlFQ09OQV9TWVNURU1fU0laRQkweDAxMDAw MDAwCisKKyNkZWZpbmUJRUNPTkFfTkVUX1NJWkUJCTB4MDEwMDAwMDAKKworI2RlZmluZQlFQ09O QV9DRklfUEJBU0UJMHgxMDAwMDAwMAorI2RlZmluZQlFQ09OQV9DRklfVkJBU0UJMHhEMDAwMDAw MAorI2RlZmluZQlFQ09OQV9DRklfU0laRQkJMHgxMDAwMDAwMAorCisjZGVmaW5lCUVDT05BX0lS UV9TVEFUVVMJMTgKKyNkZWZpbmUJRUNPTkFfSVJRX1RTVEMJCTE5CisjZGVmaW5lCUVDT05BX0lS UV9GU1JDCQkyMAorI2RlZmluZQlFQ09OQV9JUlFfVFNRRQkJMjEKKyNkZWZpbmUJRUNPTkFfSVJR X0ZTUUYJCTIyCisKKyNkZWZpbmUJRUNPTkFfSVJRX1NZU1RFTQkwCisKKyNkZWZpbmUJRUNPTkFf RUhDSV9QQkFTRQkweEM4MDAwMDAwCisjZGVmaW5lCUVDT05BX0VIQ0lfVkJBU0UJMHhGODAwMDAw MAorI2RlZmluZQlFQ09OQV9FSENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfT0hD SV9QQkFTRQkweEMwMDAwMDAwCisjZGVmaW5lCUVDT05BX09IQ0lfVkJBU0UJMHhGMDAwMDAwMAor I2RlZmluZQlFQ09OQV9PSENJX1NJWkUJMHg4MDAwMDAwCisKKyNkZWZpbmUJRUNPTkFfVVNCX1NJ WkUJCTB4ZjAwMDAwMAorCisvKkludGVycnVwdCBjb250cm9sbGVyKi8KKyNkZWZpbmUJSU5UQ19M RVZFTF9UUklHR0VSCTAKKyNkZWZpbmUJSU5UQ19FREdFX1RSSUdHRVIJMQorI2RlZmluZQlJTlRD X0FDVElWRV9ISUdICTAKKyNkZWZpbmUJSU5UQ19BQ1RJVkVfTE9XCTEKKy8qCisgKiBkZWZpbmUg cmlzaW5nL2ZhbGxpbmcgZWRnZSBmb3IgZWRnZSB0cmlnZ2VyIG1vZGUKKyAqLworI2RlZmluZQlJ TlRDX1JJU0lOR19FREdFCTAKKyNkZWZpbmUJSU5UQ19GQUxMSU5HX0VER0UJMQorCisjZGVmaW5l CUlOVENfSU5URVJSVVBUX1NPVVJDRV9SRUdfT0ZGU0VUCQkweDAwCisjZGVmaW5lCUlOVENfSU5U RVJSVVBUX01BU0tfUkVHX09GRlNFVAkJCTB4MDQKKyNkZWZpbmUJSU5UQ19JTlRFUlJVUFRfQ0xF QVJfRURHRV9UUklHR0VSX1JFR19PRkZTRVQJMHgwOAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9U UklHR0VSX01PREVfUkVHX09GRlNFVAkJMHgwQworI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9UUklH R0VSX0xFVkVMX1JFR19PRkZTRVQJMHgxMAorI2RlZmluZQlJTlRDX0lOVEVSUlVQVF9TVEFUVVNf UkVHX09GRlNFVAkJMHgxNAorI2RlZmluZQlJTlRDX0ZJUV9NT0RFX1NFTEVDVF9SRUdfT0ZGU0VU CQkweDE4CisjZGVmaW5lCUlOVENfU09GVFdBUkVfSU5URVJSVVBUX1JFR19PRkZTRVQJCTB4MUMK KworCisvKgorICogZGVmaW5lIHJpc2luZy9mYWxsaW5nIGVkZ2UgZm9yIGVkZ2UgdHJpZ2dlciBt b2RlCisgKi8KKyNkZWZpbmUJSU5UQ19SSVNJTkdfRURHRQkwCisjZGVmaW5lCUlOVENfRkFMTElO R19FREdFCTEKKworCisjZGVmaW5lCVRJTUVSX1RNMV9DT1VOVEVSX1JFRwkJMHgwMAorI2RlZmlu ZQlUSU1FUl9UTTFfTE9BRF9SRUcJCTB4MDQKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMV9SRUcJ CTB4MDgKKyNkZWZpbmUJVElNRVJfVE0xX01BVENIMl9SRUcJCTB4MEMKKworI2RlZmluZQlUSU1F Ul9UTTJfQ09VTlRFUl9SRUcJCTB4MTAKKyNkZWZpbmUJVElNRVJfVE0yX0xPQURfUkVHCQkweDE0 CisjZGVmaW5lCVRJTUVSX1RNMl9NQVRDSDFfUkVHCQkweDE4CisjZGVmaW5lCVRJTUVSX1RNMl9N QVRDSDJfUkVHCQkweDFDCisKKyNkZWZpbmUJVElNRVJfVE1fQ1JfUkVHCQkweDMwCisjZGVmaW5l CVRJTUVSX1RNX0lOVFJfU1RBVFVTX1JFRwkweDM0CisjZGVmaW5lCVRJTUVSX1RNX0lOVFJfTUFT S19SRUcJCTB4MzgKKworI2RlZmluZQlUSU1FUl9UTV9SRVZJU0lPTl9SRUcJCTB4M0MKKworCisj ZGVmaW5lCUlOVENfVElNRVIxX0JJVF9JTkRFWAkJMAorCisjZGVmaW5lCVRJTUVSMV9VUF9ET1dO X0NPVU5UCQkoMTw8OSkKKyNkZWZpbmUJVElNRVIyX1VQX0RPV05fQ09VTlQJCSgxPDwxMCkKKwor I2RlZmluZQlUSU1FUjFfTUFUQ0gxX0lOVFIJCSgxPDwwKQorI2RlZmluZQlUSU1FUjFfTUFUQ0gy X0lOVFIJCSgxPDwxKQorI2RlZmluZQlUSU1FUjFfT1ZFUkZMT1dfSU5UUgkJKDE8PDIpCisKKwor I2RlZmluZQlUSU1FUjJfTUFUQ0gxX0lOVFIJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfTUFUQ0gy X0lOVFIJCSgxPDw0KQorI2RlZmluZQlUSU1FUjJfT1ZFUkZMT1dfSU5UUgkJKDE8PDUpCisKKwor I2RlZmluZQlUSU1FUl9DTE9DS19TT1VSQ0VfUENMSwkwCisjZGVmaW5lCVRJTUVSX0NMT0NLX1NP VVJDRV9FWFRfQ0xLCTEKKworLyoKKyAqIGRlZmluZSBpbnRlcnJ1cHQgdHJpZ2dlciBtb2RlCisg Ki8KKyNkZWZpbmUJSU5UQ19MRVZFTF9UUklHR0VSCQkwCisjZGVmaW5lCUlOVENfRURHRV9UUklH R0VSCQkxCisKKworI2RlZmluZQlJTlRDX1RSSUdHRVJfVU5LTk9XTiAtMQorCisjZGVmaW5lCVRJ TUVSMV9PVkVSRkxPV19JTlRFUlJVUFQJKDE8PDIpCisjZGVmaW5lCVRJTUVSMl9PVkVSRkxPV19J TlRFUlJVUFQJKDE8PDUpCisjZGVmaW5lCVRJTUVSX0lOVEVSUlVQVF9TVEFUVVNfUkVHCTB4MzQK KworCisjZGVmaW5lCVRJTUVSMV9FTkFCTEUJCQkoMTw8MCkKKyNkZWZpbmUJVElNRVIxX0NMT0NL X1NPVVJDRQkJKDE8PDEpCisjZGVmaW5lCVRJTUVSMV9PVkVSRkxPV19FTkFCTEUJCSgxPDwyKQor CisKKyNkZWZpbmUJVElNRVIyX0VOQUJMRQkJCSgxPDwzKQorI2RlZmluZQlUSU1FUjJfQ0xPQ0tf U09VUkNFCQkoMTw8NCkKKyNkZWZpbmUJVElNRVIyX09WRVJGTE9XX0VOQUJMRQkJKDE8PDUpCisK KworI2RlZmluZQlUSU1FUl8xCQkJMQorCisjZGVmaW5lCUVDX1VBUlRfQ0xPQ0sJCQkxNDc2OTIw MAorI2RlZmluZQlFQ19VQVJUX1JFR1NISUZUCQkyCisKKyNkZWZpbmUJU1lTVEVNX0NMT0NLCQkJ MHgxNAorI2RlZmluZQlSRVNFVF9DT05UUk9MCQkJMHg0CisjZGVmaW5lCUdMT0JBTF9SRVNFVAkJ CTB4MQorI2RlZmluZQlORVRfSU5URVJGQUNFX1JFU0VUCQkoMHgxIDw8IDQpCisKKyNlbmRpZgpJ bmRleDogYXJtL2Vjb25hL2lmX2VjZXZhci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9pZl9l Y2V2YXIuaAkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS9pZl9lY2V2YXIuaAkocmV2aXNpb24g MCkKQEAgLTAsMCArMSwxOTEgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDA5IFlvaGFuZXMg TnVncm9obyA8eW9oYW5lc0BnbWFpbC5jb20+CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0 aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFORCBDT05U UklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS UE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1IgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElO Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP T0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV U0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFks IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB TlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVm CV9JRkVDRVZBUl9ICisjZGVmaW5lCV9JRkVDRVZBUl9ICisKKyNkZWZpbmUJRUNFX01BWF9UWF9C VUZGRVJTCTEyOAorI2RlZmluZQlFQ0VfTUFYX1JYX0JVRkZFUlMJMTI4CisjZGVmaW5lCU1BWF9G UkFHTUVOVAkJMzIKKwordHlwZWRlZiBzdHJ1Y3QgeworCS8qIDFzdCAzMkJpdHMgKi8KKwl1aW50 MzJfdAkJZGF0YV9wdHI7CisJLyogMm5kCTMyQml0cyovCisJdWludDMyX3QJCWxlbmd0aDoxNjsK KworCXVpbnQzMl90CQl0Y286MTsgLyp0Y3AgY2hlY2tzdW0gb2ZmbG9hZCovCisJdWludDMyX3QJ CXVjbzoxOyAvKnVkcCBjaGVja3N1bSBvZmZsb2FkKi8KKwl1aW50MzJfdAkJaWNvOjE7IC8qaXAg Y2hlY2tzdW0gb2ZmbG9hZCovCisJLyogZm9yY2Vfcm91dGVfcG9ydF9tYXAqLworCXVpbnQzMl90 CQlwbWFwOjM7CisJLyogZm9yY2Vfcm91dGUgKi8KKwl1aW50MzJfdAkJZnI6MTsKKwkvKiBmb3Jj ZV9wcmlvcml0eV92YWx1ZSAqLworCXVpbnQzMl90CQlwcmk6MzsKKwkvKiBmb3JjZV9wcmlvcml0 eSAqLworCXVpbnQzMl90CQlmcDoxOworCS8qaW50ZXJydXB0X2JpdCovCisJdWludDMyX3QJCWlu dGVycnVwdDoxOworCS8qbGFzdF9zZWcqLworCXVpbnQzMl90CQlsczoxOworCS8qZmlyc3Rfc2Vn Ki8KKwl1aW50MzJfdAkJZnM6MTsKKwkvKiBlbmRfYml0ICovCisJdWludDMyX3QJCWVvcjoxOwor CS8qIGNfYml0ICovCisJdWludDMyX3QJCWNvd246MTsKKwkvKiAzcmQgMzJCaXRzKi8KKwkvKnZp ZF9pbmRleCovCisJdWludDMyX3QJCXZpZDozOworCS8qaW5zZXJ0X3ZpZF90YWcqLworCXVpbnQz Ml90CQlpbnN2OjE7CisJLypwcHBvZV9zZWN0aW9uX2luZGV4Ki8KKwl1aW50MzJfdAkJc2lkOjM7 CisJLyppbnNlcnRfcHBwb2Vfc2VjdGlvbiovCisJdWludDMyX3QJCWluc3M6MTsKKwl1aW50MzJf dAkJdW51c2VkOjI0OworCS8qIDR0aCAzMkJpdHMqLworCXVpbnQzMl90CQl1bnVzZWQyOworCit9 IGV0aF90eF9kZXNjX3Q7CisKK3R5cGVkZWYgc3RydWN0eworCXVpbnQzMl90CQlkYXRhX3B0cjsK Kwl1aW50MzJfdAkJbGVuZ3RoOjE2OworCXVpbnQzMl90CQlsNGY6MTsKKwl1aW50MzJfdAkJaXBm OjE7CisJdWludDMyX3QJCXByb3Q6MjsKKwl1aW50MzJfdAkJaHI6NjsKKwl1aW50MzJfdAkJc3A6 MjsKKwl1aW50MzJfdAkJbHM6MTsKKwl1aW50MzJfdAkJZnM6MTsKKwl1aW50MzJfdAkJZW9yOjE7 CisJdWludDMyX3QJCWNvd246MTsKKwl1aW50MzJfdAkJdW51c2VkOworCXVpbnQzMl90CQl1bnVz ZWQyOworfSBldGhfcnhfZGVzY190OworCisKK3N0cnVjdCByeF9kZXNjX2luZm8geworCXN0cnVj dCBtYnVmKmJ1ZmY7CisJYnVzX2RtYW1hcF90IGRtYW1hcDsKKwlldGhfcnhfZGVzY190ICpkZXNj OworfTsKKworc3RydWN0IHR4X2Rlc2NfaW5mbyB7CisJc3RydWN0IG1idWYqYnVmZjsKKwlidXNf ZG1hbWFwX3QgZG1hbWFwOworCWV0aF90eF9kZXNjX3QgKmRlc2M7Cit9OworCisKK3N0cnVjdCBl Y2Vfc29mdGMKK3sKKwlzdHJ1Y3QgaWZuZXQgKmlmcDsJCS8qIGlmbmV0IHBvaW50ZXIgKi8KKwlz dHJ1Y3QgbXR4IHNjX210eDsJCS8qIGdsb2JhbCBtdXRleCAqLworCXN0cnVjdCBtdHggc2NfbXR4 X3R4OwkJLyogdHggbXV0ZXggKi8KKwlzdHJ1Y3QgbXR4IHNjX210eF9yeDsJCS8qIHJ4IG11dGV4 ICovCisJc3RydWN0IG10eCBzY19tdHhfY2xlYW51cDsJLyogcnggbXV0ZXggKi8KKworCWJ1c19k bWFfdGFnX3QJc2NfcGFyZW50X3RhZzsJLyogcGFyZW50IGJ1cyBETUEgdGFnICovCisKKwlkZXZp Y2VfdCBkZXY7CQkJLyogTXlzZWxmICovCisJZGV2aWNlX3QgbWlpYnVzOwkJLyogTXkgY2hpbGQg bWlpYnVzICovCisJdm9pZCAqaW50cmhhbmQ7CQkJLyogSW50ZXJydXB0IGhhbmRsZSAqLworCXZv aWQgKmludHJoYW5kX3FmOwkJLyogcXVldWUgZnVsbCAqLworCXZvaWQgKmludHJoYW5kX3R4OwkJ LyogdHggY29tcGxldGUgKi8KKwl2b2lkICppbnRyaGFuZF9zdGF0dXM7CQkvKiBlcnJvciBzdGF0 dXMgKi8KKworCXN0cnVjdCByZXNvdXJjZSAqaXJxX3Jlc190eDsJLyogdHJhbnNtaXQgKi8KKwlz dHJ1Y3QgcmVzb3VyY2UgKmlycV9yZXNfcmVjOwkvKiByZWNlaXZlICovCisJc3RydWN0IHJlc291 cmNlICppcnFfcmVzX3FmOwkvKiBxdWV1ZSBmdWxsICovCisJc3RydWN0IHJlc291cmNlICppcnFf cmVzX3N0YXR1czsgLyogc3RhdHVzICovCisKKwlzdHJ1Y3QgcmVzb3VyY2UJKm1lbV9yZXM7CS8q IE1lbW9yeSByZXNvdXJjZSAqLworCisJc3RydWN0IGNhbGxvdXQgdGlja19jaDsJCS8qIFRpY2sg Y2FsbG91dCAqLworCisJc3RydWN0IHRhc2txdWV1ZSAqc2NfdHE7CisJc3RydWN0IHRhc2sJc2Nf aW50cl90YXNrOworCXN0cnVjdCB0YXNrCXNjX2NsZWFudXBfdGFzazsKKwlzdHJ1Y3QgdGFzawlz Y190eF90YXNrOworCisJYnVzX2RtYW1hcF90CWRtYW1hcF9yaW5nX3R4OworCWJ1c19kbWFtYXBf dAlkbWFtYXBfcmluZ19yeDsKKwlidXNfZG1hbWFwX3QJcnhfc3BhcmVtYXA7CisKKwkvKmRtYSB0 YWcgZm9yIHJpbmcqLworCWJ1c19kbWFfdGFnX3QJZG1hdGFnX3JpbmdfdHg7CisJYnVzX2RtYV90 YWdfdAlkbWF0YWdfcmluZ19yeDsKKworCS8qZG1hIHRhZyBmb3IgZGF0YSovCisJYnVzX2RtYV90 YWdfdAlkbWF0YWdfZGF0YV90eDsKKwlidXNfZG1hX3RhZ190CWRtYXRhZ19kYXRhX3J4OworCisJ Lyp0aGUgcmluZyovCisJZXRoX3R4X2Rlc2NfdCoJZGVzY190eDsKKwlldGhfcnhfZGVzY190Kglk ZXNjX3J4OworCisJLypyaW5nIHBoeXNpY2FsIGFkZHJlc3MqLworCWJ1c19hZGRyX3QJcmluZ19w YWRkcl90eDsKKwlidXNfYWRkcl90CXJpbmdfcGFkZHJfcng7CisKKwkvKmluZGV4IG9mIGxhc3Qg cmVjZWl2ZWQgZGVzY3JpcHRvciovCisJdWludDMyX3QgbGFzdF9yeDsKKwlzdHJ1Y3QgcnhfZGVz Y19pbmZvIHJ4X2Rlc2NbRUNFX01BWF9SWF9CVUZGRVJTXTsKKworCS8qIHR4IHByb2R1Y2VyIGlu ZGV4ICovCisJdWludDMyX3QgdHhfcHJvZDsKKwkvKiB0eCBjb25zdW1lciBpbmRleCAqLworCXVp bnQzMl90IHR4X2NvbnM7CisJLyogdHggcmluZyBpbmRleCovCisJdWludDMyX3QgZGVzY19jdXJy X3R4OworCisJc3RydWN0IHR4X2Rlc2NfaW5mbyB0eF9kZXNjW0VDRV9NQVhfVFhfQlVGRkVSU107 Cit9OworCisKK3N0cnVjdCBhcmxfdGFibGVfZW50cnlfdCB7CisJdWludDMyX3QgY21kX2NvbXBs ZXRlOiAxOworCXVpbnQzMl90IHRhYmxlX2VuZDogMTsKKwl1aW50MzJfdCBzZWFyY2hfbWF0Y2g6 IDE7CisJdWludDMyX3QgZmlsdGVyOjE7IC8qaWYgc2V0LCBwYWNrZXQgd2lsbCBiZSBkcm9wcGVk ICovCisJdWludDMyX3Qgdmxhbl9tYWM6MTsgLyppbmRpY2F0ZXMgdGhhdCB0aGlzIGlzIHRoZSBn YXRld2F5IG1hYyBhZGRyZXNzKi8KKwl1aW50MzJfdCB2bGFuX2dpZDozOyAvKnZsYW4gaWQqLwor CXVpbnQzMl90IGFnZV9maWVsZDozOworCXVpbnQzMl90IHBvcnRfbWFwOjM7CisJIC8qNDggYml0 IG1hYyBhZGRyZXNzKi8KKwl1aW50OF90IG1hY19hZGRyWzZdOworCXVpbnQ4X3QgcGFkWzJdOwor fTsKKworc3RydWN0IG1hY19saXN0eworCWNoYXIgbWFjX2FkZHJbNl07CisJc3RydWN0IG1hY19s aXN0ICpuZXh0OworfTsKKworI2VuZGlmCkluZGV4OiBhcm0vZWNvbmEvb2hjaV9lYy5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIGFybS9lY29uYS9vaGNpX2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEv b2hjaV9lYy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI0MSBAQAorLyotCisgKiBDb3B5cmln aHQgKGMpIDIwMDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCBy aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF RCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQg V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB UlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVU SE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBT UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC VVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ IE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2Rl ZnMuaD4KK19fRkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9zdGRpbnQuaD4K KyNpbmNsdWRlIDxzeXMvc3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVk ZSA8c3lzL3F1ZXVlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N5 c3RtLmg+CisjaW5jbHVkZSA8c3lzL2tlcm5lbC5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNp bmNsdWRlIDxzeXMvbGlua2VyX3NldC5oPgorI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KKyNpbmNs dWRlIDxzeXMvbG9jay5oPgorI2luY2x1ZGUgPHN5cy9tdXRleC5oPgorI2luY2x1ZGUgPHN5cy9j b25kdmFyLmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPHN5cy9zeC5oPgor I2luY2x1ZGUgPHN5cy91bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvY2FsbG91dC5oPgorI2luY2x1 ZGUgPHN5cy9tYWxsb2MuaD4KKyNpbmNsdWRlIDxzeXMvcHJpdi5oPgorCisjaW5jbHVkZSA8ZGV2 L3VzYi91c2IuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL3VzYmRpLmg+CisKKyNpbmNsdWRlIDxkZXYv dXNiL3VzYl9jb3JlLmg+CisjaW5jbHVkZSA8ZGV2L3VzYi91c2JfYnVzZG1hLmg+CisjaW5jbHVk ZSA8ZGV2L3VzYi91c2JfcHJvY2Vzcy5oPgorI2luY2x1ZGUgPGRldi91c2IvdXNiX3V0aWwuaD4K KworI2luY2x1ZGUgPGRldi91c2IvdXNiX2NvbnRyb2xsZXIuaD4KKyNpbmNsdWRlIDxkZXYvdXNi L3VzYl9idXMuaD4KKyNpbmNsdWRlIDxkZXYvdXNiL2NvbnRyb2xsZXIvb2hjaS5oPgorI2luY2x1 ZGUgPGRldi91c2IvY29udHJvbGxlci9vaGNpcmVnLmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5o PgorCisjaW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorCisjZGVmaW5lCU1FTV9SSUQJ MAorCitzdGF0aWMgZGV2aWNlX3Byb2JlX3Qgb2hjaV9lY19wcm9iZTsKK3N0YXRpYyBkZXZpY2Vf YXR0YWNoX3Qgb2hjaV9lY19hdHRhY2g7CitzdGF0aWMgZGV2aWNlX2RldGFjaF90IG9oY2lfZWNf ZGV0YWNoOworCitzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyB7CisJc3RydWN0IG9oY2lfc29mdGMgc2Nf b2hjaTsJLyogbXVzdCBiZSBmaXJzdCAqLworfTsKKworc3RhdGljIGludAorb2hjaV9lY19wcm9i ZShkZXZpY2VfdCBkZXYpCit7CisJZGV2aWNlX3NldF9kZXNjKGRldiwgIkVjb25hIGludGVncmF0 ZWQgT0hDSSBjb250cm9sbGVyIik7CisJcmV0dXJuIChCVVNfUFJPQkVfREVGQVVMVCk7Cit9CisK K3N0YXRpYyBpbnQKK29oY2lfZWNfYXR0YWNoKGRldmljZV90IGRldikKK3sKKwlzdHJ1Y3QgZWNf b2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJYnVzX3NwYWNlX2hhbmRs ZV90IGJzaDsKKwlpbnQgZXJyOworCWludCByaWQ7CisKKwkvKiBpbml0aWFsaXNlIHNvbWUgYnVz IGZpZWxkcyAqLworCXNjLT5zY19vaGNpLnNjX2J1cy5wYXJlbnQgPSBkZXY7CisJc2MtPnNjX29o Y2kuc2NfYnVzLmRldmljZXMgPSBzYy0+c2Nfb2hjaS5zY19kZXZpY2VzOworCXNjLT5zY19vaGNp LnNjX2J1cy5kZXZpY2VzX21heCA9IE9IQ0lfTUFYX0RFVklDRVM7CisKKwkvKiBnZXQgYWxsIERN QSBtZW1vcnkgKi8KKwlpZiAodXNiX2J1c19tZW1fYWxsb2NfYWxsKCZzYy0+c2Nfb2hjaS5zY19i dXMsCisJICAgIFVTQl9HRVRfRE1BX1RBRyhkZXYpLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKSkg eworCQlyZXR1cm4gKEVOT01FTSk7CisJfQorCXNjLT5zY19vaGNpLnNjX2RldiA9IGRldjsKKwor CXJpZCA9IE1FTV9SSUQ7CisKKwlzYy0+c2Nfb2hjaS5zY19pb19yZXMgPSBidXNfYWxsb2NfcmVz b3VyY2VfYW55KGRldiwgU1lTX1JFU19NRU1PUlksCisJICAgICZyaWQsIFJGX0FDVElWRSk7CisK KwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pb19yZXMpKSB7CisJCWVyciA9IEVOT01FTTsKKwkJZ290 byBlcnJvcjsKKwl9CisJc2MtPnNjX29oY2kuc2NfaW9fdGFnID0gcm1hbl9nZXRfYnVzdGFnKHNj LT5zY19vaGNpLnNjX2lvX3Jlcyk7CisJYnNoID0gcm1hbl9nZXRfYnVzaGFuZGxlKHNjLT5zY19v aGNpLnNjX2lvX3Jlcyk7CisJLyogVW5kb2N1bWVudGVkIG1hZ2ljIGluaXRpYWxpemF0aW9uICov CisJYnVzX3NwYWNlX3dyaXRlXzQoKHNjKS0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwweDA0LCAw eDE0Nik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNCgoc2MpLT5zY19vaGNpLnNjX2lvX3RhZywgYnNo LDB4NDQsIDB4MDIwMCk7CisKKwlERUxBWSgxMDAwKTsKKworCXNjLT5zY19vaGNpLnNjX2lvX3Np emUgPSBybWFuX2dldF9zaXplKHNjLT5zY19vaGNpLnNjX2lvX3Jlcyk7CisKKwlpZiAoYnVzX3Nw YWNlX3N1YnJlZ2lvbihzYy0+c2Nfb2hjaS5zY19pb190YWcsIGJzaCwgMHg0MDAwMDAwLAorCSAg ICBzYy0+c2Nfb2hjaS5zY19pb19zaXplLCAmc2MtPnNjX29oY2kuc2NfaW9faGRsKSAhPSAwKQor CQlwYW5pYygiJXM6IHVuYWJsZSB0byBzdWJyZWdpb24gVVNCIGhvc3QgcmVnaXN0ZXJzIiwKKwkJ ICAgIGRldmljZV9nZXRfbmFtZShkZXYpKTsKKworCXJpZCA9IDA7CisJc2MtPnNjX29oY2kuc2Nf aXJxX3JlcyA9IGJ1c19hbGxvY19yZXNvdXJjZV9hbnkoZGV2LCBTWVNfUkVTX0lSUSwgJnJpZCwK KwkgICAgUkZfQUNUSVZFKTsKKwlpZiAoIShzYy0+c2Nfb2hjaS5zY19pcnFfcmVzKSkgeworCQln b3RvIGVycm9yOworCX0KKwlzYy0+c2Nfb2hjaS5zY19idXMuYmRldiA9IGRldmljZV9hZGRfY2hp bGQoZGV2LCAidXNidXMiLCAtMSk7CisJaWYgKCEoc2MtPnNjX29oY2kuc2NfYnVzLmJkZXYpKSB7 CisJCWdvdG8gZXJyb3I7CisJfQorCWRldmljZV9zZXRfaXZhcnMoc2MtPnNjX29oY2kuc2NfYnVz LmJkZXYsICZzYy0+c2Nfb2hjaS5zY19idXMpOworCisJc3RybGNweShzYy0+c2Nfb2hjaS5zY192 ZW5kb3IsICJDYXZpdW0iLAorCQlzaXplb2Yoc2MtPnNjX29oY2kuc2NfdmVuZG9yKSk7CisKKyNp ZiAoX19GcmVlQlNEX3ZlcnNpb24gPj0gNzAwMDMxKQorCWVyciA9IGJ1c19zZXR1cF9pbnRyKGRl diwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElOVFJfTVBT QUZFLCAgTlVMTCwKKwkgICAgKGRyaXZlcl9pbnRyX3QgKilvaGNpX2ludGVycnVwdCwgc2MsCisJ ICAgICZzYy0+c2Nfb2hjaS5zY19pbnRyX2hkbCk7CisjZWxzZQorCWVyciA9IGJ1c19zZXR1cF9p bnRyKGRldiwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkgICAgSU5UUl9UWVBFX0JJTyB8IElO VFJfTVBTQUZFLAorCSAgICAoZHJpdmVyX2ludHJfdCAqKW9oY2lfaW50ZXJydXB0LCBzYywKKwkg ICAgJnNjLT5zY19vaGNpLnNjX2ludHJfaGRsKTsKKyNlbmRpZgorCWlmIChlcnIpIHsKKwkJc2Mt PnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOworCQlnb3RvIGVycm9yOworCX0KKworCWJ1c19z cGFjZV93cml0ZV80KHNjLT5zY19vaGNpLnNjX2lvX3RhZywgc2MtPnNjX29oY2kuc2NfaW9faGRs LAorCSAgICBPSENJX0NPTlRST0wsIDApOworCisJZXJyID0gb2hjaV9pbml0KCZzYy0+c2Nfb2hj aSk7CisJaWYgKCFlcnIpIHsKKwkJZXJyID0gZGV2aWNlX3Byb2JlX2FuZF9hdHRhY2goc2MtPnNj X29oY2kuc2NfYnVzLmJkZXYpOworCX0KKwlpZiAoZXJyKSB7CisJCWdvdG8gZXJyb3I7CisJfQor CXJldHVybiAoMCk7CisKK2Vycm9yOgorCW9oY2lfZWNfZGV0YWNoKGRldik7CisJcmV0dXJuIChF TlhJTyk7Cit9CisKK3N0YXRpYyBpbnQKK29oY2lfZWNfZGV0YWNoKGRldmljZV90IGRldikKK3sK KwlzdHJ1Y3QgZWNfb2hjaV9zb2Z0YyAqc2MgPSBkZXZpY2VfZ2V0X3NvZnRjKGRldik7CisJZGV2 aWNlX3QgYmRldjsKKwlpbnQgZXJyOworCisJaWYgKHNjLT5zY19vaGNpLnNjX2J1cy5iZGV2KSB7 CisJCWJkZXYgPSBzYy0+c2Nfb2hjaS5zY19idXMuYmRldjsKKwkJZGV2aWNlX2RldGFjaChiZGV2 KTsKKwkJZGV2aWNlX2RlbGV0ZV9jaGlsZChkZXYsIGJkZXYpOworCX0KKwkvKiBkdXJpbmcgbW9k dWxlIHVubG9hZCB0aGVyZSBhcmUgbG90cyBvZiBjaGlsZHJlbiBsZWZ0b3ZlciAqLworCWRldmlj ZV9kZWxldGVfYWxsX2NoaWxkcmVuKGRldik7CisKKwlidXNfc3BhY2Vfd3JpdGVfNChzYy0+c2Nf b2hjaS5zY19pb190YWcsIHNjLT5zY19vaGNpLnNjX2lvX2hkbCwKKwkgICAgT0hDSV9DT05UUk9M LCAwKTsKKworCWlmIChzYy0+c2Nfb2hjaS5zY19pcnFfcmVzICYmIHNjLT5zY19vaGNpLnNjX2lu dHJfaGRsKSB7CisJCS8qCisJCSAqIG9ubHkgY2FsbCBvaGNpX2RldGFjaCgpIGFmdGVyIG9oY2lf aW5pdCgpCisJCSAqLworCQlvaGNpX2RldGFjaCgmc2MtPnNjX29oY2kpOworCisJCWVyciA9IGJ1 c190ZWFyZG93bl9pbnRyKGRldiwgc2MtPnNjX29oY2kuc2NfaXJxX3JlcywKKwkJICAgIHNjLT5z Y19vaGNpLnNjX2ludHJfaGRsKTsKKwkJc2MtPnNjX29oY2kuc2NfaW50cl9oZGwgPSBOVUxMOwor CX0KKwlpZiAoc2MtPnNjX29oY2kuc2NfaXJxX3JlcykgeworCQlidXNfcmVsZWFzZV9yZXNvdXJj ZShkZXYsIFNZU19SRVNfSVJRLCAwLAorCQkgICAgc2MtPnNjX29oY2kuc2NfaXJxX3Jlcyk7CisJ CXNjLT5zY19vaGNpLnNjX2lycV9yZXMgPSBOVUxMOworCX0KKwlpZiAoc2MtPnNjX29oY2kuc2Nf aW9fcmVzKSB7CisJCWJ1c19yZWxlYXNlX3Jlc291cmNlKGRldiwgU1lTX1JFU19NRU1PUlksIE1F TV9SSUQsCisJCSAgICBzYy0+c2Nfb2hjaS5zY19pb19yZXMpOworCQlzYy0+c2Nfb2hjaS5zY19p b19yZXMgPSBOVUxMOworCX0KKwl1c2JfYnVzX21lbV9mcmVlX2FsbCgmc2MtPnNjX29oY2kuc2Nf YnVzLCAmb2hjaV9pdGVyYXRlX2h3X3NvZnRjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRp YyBkZXZpY2VfbWV0aG9kX3Qgb2hjaV9tZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFj ZSAqLworCURFVk1FVEhPRChkZXZpY2VfcHJvYmUsIG9oY2lfZWNfcHJvYmUpLAorCURFVk1FVEhP RChkZXZpY2VfYXR0YWNoLCBvaGNpX2VjX2F0dGFjaCksCisJREVWTUVUSE9EKGRldmljZV9kZXRh Y2gsIG9oY2lfZWNfZGV0YWNoKSwKKwlERVZNRVRIT0QoZGV2aWNlX3NodXRkb3duLCBidXNfZ2Vu ZXJpY19zaHV0ZG93biksCisKKwkvKiBCdXMgaW50ZXJmYWNlICovCisJREVWTUVUSE9EKGJ1c19w cmludF9jaGlsZCwgYnVzX2dlbmVyaWNfcHJpbnRfY2hpbGQpLAorCisJezAsIDB9Cit9OworCitz dGF0aWMgZHJpdmVyX3Qgb2hjaV9kcml2ZXIgPSB7CisJIm9oY2kiLAorCW9oY2lfbWV0aG9kcywK KwlzaXplb2Yoc3RydWN0IGVjX29oY2lfc29mdGMpLAorfTsKKworc3RhdGljIGRldmNsYXNzX3Qg b2hjaV9kZXZjbGFzczsKKworRFJJVkVSX01PRFVMRShvaGNpLCBlY29uYWFybSwgb2hjaV9kcml2 ZXIsIG9oY2lfZGV2Y2xhc3MsIDAsIDApOworTU9EVUxFX0RFUEVORChvaGNpLCB1c2IsIDEsIDEs IDEpOwpJbmRleDogYXJtL2Vjb25hL3VhcnRfY3B1X2VjLmMKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gYXJtL2Vj b25hL3VhcnRfY3B1X2VjLmMJKHJldmlzaW9uIDApCisrKyBhcm0vZWNvbmEvdWFydF9jcHVfZWMu YwkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NyBAQAorLyotCisgKiBDb3B5cmlnaHQgKEMpIDIw MDkgWW9oYW5lcyBOdWdyb2hvIDx5b2hhbmVzQGdtYWlsLmNvbT4KKyAqIEFsbCByaWdodHMgcmVz ZXJ2ZWQuCisgKgorICogRGV2ZWxvcGVkIGJ5IFNlbWloYWxmLgorICoKKyAqIFJlZGlzdHJpYnV0 aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVp dGhlciB0aGUgbmFtZSBvZiBNQVJWRUxMIG5vciB0aGUgbmFtZXMgb2YgY29udHJpYnV0b3JzCisg KiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm cm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVVUSE9SIEFO RCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBVVRIT1Ig T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFH RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU VVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7 IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFC SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO RyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisj aW5jbHVkZSAib3B0X3VhcnQuaCIKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorX19GQlNESUQo IiRGcmVlQlNEJCIpOworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N5 c3RtLmg+CisjaW5jbHVkZSA8c3lzL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9jb25zLmg+CisKKyNp bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2lu Y2x1ZGUgPGRldi91YXJ0L3VhcnRfY3B1Lmg+CisKKyNpbmNsdWRlIDxzeXMvcm1hbi5oPgorCisj aW5jbHVkZSA8YXJtL2Vjb25hL2Vjb25hX3JlZy5oPgorI2luY2x1ZGUgPGFybS9lY29uYS9lY29u YV92YXIuaD4KKworYnVzX3NwYWNlX3RhZ190IHVhcnRfYnVzX3NwYWNlX2lvOworYnVzX3NwYWNl X3RhZ190IHVhcnRfYnVzX3NwYWNlX21lbTsKKworaW50Cit1YXJ0X2NwdV9lcXJlcyhzdHJ1Y3Qg dWFydF9iYXMgKmIxLCBzdHJ1Y3QgdWFydF9iYXMgKmIyKQoreworCisJcmV0dXJuICgoYjEtPmJz aCA9PSBiMi0+YnNoICYmIGIxLT5ic3QgPT0gYjItPmJzdCkgPyAxIDogMCk7Cit9CisKK2ludAor dWFydF9jcHVfZ2V0ZGV2KGludCBkZXZ0eXBlLCBzdHJ1Y3QgdWFydF9kZXZpbmZvICpkaSkKK3sK KwlzdHJ1Y3QgdWFydF9jbGFzcyAqY2xhc3MgPSAmdWFydF9uczgyNTBfY2xhc3M7CisKKwlkaS0+ b3BzID0gdWFydF9nZXRvcHMoY2xhc3MpOworCWRpLT5iYXMuY2hhbiA9IDA7CisJZGktPmJhcy5i c3QgPSBvYmlvX3RhZzsKKworCWlmIChidXNfc3BhY2VfbWFwKGRpLT5iYXMuYnN0LCBFQ09OQV9J T19CQVNFICsgRUNPTkFfVUFSVF9CQVNFLAorCSAgICBFQ09OQV9VQVJUX1NJWkUsCisJICAgIDAs ICZkaS0+YmFzLmJzaCkgIT0gMCkgeworCQlyZXR1cm4gKEVOWElPKTsKKwl9CisKKwlkaS0+YmF1 ZHJhdGUgPSAwOworCWRpLT5iYXMucmVnc2hmdCA9IEVDX1VBUlRfUkVHU0hJRlQ7CisJZGktPmJh cy5yY2xrID0gRUNfVUFSVF9DTE9DSyA7CisJZGktPmRhdGFiaXRzID0gODsKKwlkaS0+c3RvcGJp dHMgPSAxOworCWRpLT5wYXJpdHkgPSBVQVJUX1BBUklUWV9OT05FOworCXVhcnRfYnVzX3NwYWNl X21lbSA9IG9iaW9fdGFnOworCXVhcnRfYnVzX3NwYWNlX2lvID0gTlVMTDsKKworCXJldHVybiAo MCk7Cit9CkluZGV4OiBhcm0vZWNvbmEvdWFydF9idXNfZWMuYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBhcm0v ZWNvbmEvdWFydF9idXNfZWMuYwkocmV2aXNpb24gMCkKKysrIGFybS9lY29uYS91YXJ0X2J1c19l Yy5jCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc5IEBACisvKi0KKyAqIENvcHlyaWdodCAoQykg MjAwOSBZb2hhbmVzIE51Z3JvaG8gPHlvaGFuZXNAZ21haWwuY29tPgorICogQWxsIHJpZ2h0cyBy ZXNlcnZlZC4KKyAqCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6 CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0 aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3 aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1BUlZFTEwg bm9yIHRoZSBuYW1lcyBvZiBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9y c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAg d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycg QU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xB SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxF CisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q TEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VT OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O KQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU SEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBU SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ VFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19f RkJTRElEKCIkRnJlZUJTRCQiKTsKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUg PHN5cy9zeXN0bS5oPgorI2luY2x1ZGUgPHN5cy9idXMuaD4KKyNpbmNsdWRlIDxzeXMvY29uZi5o PgorI2luY2x1ZGUgPHN5cy9rZXJuZWwuaD4KKyNpbmNsdWRlIDxzeXMvbW9kdWxlLmg+CisKKyNp bmNsdWRlIDxtYWNoaW5lL2J1cy5oPgorI2luY2x1ZGUgPHN5cy9ybWFuLmg+CisjaW5jbHVkZSA8 bWFjaGluZS9yZXNvdXJjZS5oPgorCisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydC5oPgorI2luY2x1 ZGUgPGRldi91YXJ0L3VhcnRfYnVzLmg+CisjaW5jbHVkZSA8ZGV2L3VhcnQvdWFydF9jcHUuaD4K KworI2luY2x1ZGUgPGFybS9lY29uYS9lY29uYV9yZWcuaD4KKworc3RhdGljIGludCB1YXJ0X2Vj X3Byb2JlKGRldmljZV90IGRldik7CisKK3N0YXRpYyBkZXZpY2VfbWV0aG9kX3QgdWFydF9lY19t ZXRob2RzW10gPSB7CisJLyogRGV2aWNlIGludGVyZmFjZSAqLworCURFVk1FVEhPRChkZXZpY2Vf cHJvYmUsCXVhcnRfZWNfcHJvYmUpLAorCURFVk1FVEhPRChkZXZpY2VfYXR0YWNoLAl1YXJ0X2J1 c19hdHRhY2gpLAorCURFVk1FVEhPRChkZXZpY2VfZGV0YWNoLAl1YXJ0X2J1c19kZXRhY2gpLAor CXsgMCwgMCB9Cit9OworCitzdGF0aWMgZHJpdmVyX3QgdWFydF9lY19kcml2ZXIgPSB7CisJdWFy dF9kcml2ZXJfbmFtZSwKKwl1YXJ0X2VjX21ldGhvZHMsCisJc2l6ZW9mKHN0cnVjdCB1YXJ0X3Nv ZnRjKSwKK307CisKK3N0YXRpYyBpbnQKK3VhcnRfZWNfcHJvYmUoZGV2aWNlX3QgZGV2KQorewor CXN0cnVjdAl1YXJ0X3NvZnRjICpzYzsKKwlpbnQgc3RhdHVzOworCisJc2MgPSBkZXZpY2VfZ2V0 X3NvZnRjKGRldik7CisJc2MtPnNjX2NsYXNzID0gJnVhcnRfbnM4MjUwX2NsYXNzOworCXN0YXR1 cyA9IHVhcnRfYnVzX3Byb2JlKGRldiwgRUNfVUFSVF9SRUdTSElGVCwgRUNfVUFSVF9DTE9DSywg MCwgMCk7CisJcmV0dXJuIChzdGF0dXMpOworfQorCitEUklWRVJfTU9EVUxFKHVhcnQsIGVjb25h YXJtLCB1YXJ0X2VjX2RyaXZlciwgdWFydF9kZXZjbGFzcywgMCwgMCk7CkluZGV4OiBhcm0vZWNv bmEvc3RkLmVjb25hCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGFybS9lY29uYS9zdGQuZWNvbmEJKHJldmlzaW9u IDApCisrKyBhcm0vZWNvbmEvc3RkLmVjb25hCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBA CisjICRGcmVlQlNEJAorCitmaWxlcwkiLi4vZWNvbmEvZmlsZXMuZWNvbmEiCitjcHUJCUNQVV9G QTUyNgorbWFrZW9wdGlvbnMJQ09ORl9DRkxBR1M9LW1hcmNoPWFybXY0CitvcHRpb25zCVBIWVNB RERSPTB4MDAwMDAwMDAKK21ha2VvcHRpb25zCUtFUk5QSFlTQUREUj0weDAxMDAwMDAwCittYWtl b3B0aW9ucwlLRVJOVklSVEFERFI9MHhjMTAwMDAwMAorCitvcHRpb25zCUtFUk5QSFlTQUREUj0w eDAxMDAwMDAwCitvcHRpb25zCUtFUk5WSVJUQUREUj0weGMxMDAwMDAwCSMgVXNlZCBpbiBsZHNj cmlwdC5hcm0KK29wdGlvbnMJRkxBU0hBRERSPTB4RDAwMDAwMDAKK29wdGlvbnMJTE9BREVSUkFN QUREUj0weDAwMDAwMDAwCitvcHRpb25zCVNUQVJUVVBfUEFHRVRBQkxFX0FERFI9MHgwMDEwMDAw MApJbmRleDogY29uZi9NYWtlZmlsZS5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9NYWtlZmlsZS5h cm0JKHJldmlzaW9uIDIwMTM1OCkKKysrIGNvbmYvTWFrZWZpbGUuYXJtCSh3b3JraW5nIGNvcHkp CkBAIC03Myw3ICs3Myw3IEBACiAJJFMvJE0vJE0vY3B1ZnVuY19hc21fc2ExLlMgJFMvJE0vJE0v Y3B1ZnVuY19hc21fYXJtMTAuUyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlLlMgJFMv JE0vJE0vY3B1ZnVuY19hc20uUyBcCiAJJFMvJE0vJE0vY3B1ZnVuY19hc21feHNjYWxlX2MzLlMg JFMvJE0vJE0vY3B1ZnVuY19hc21fYXJtdjVfZWMuUyBcCi0JJFMvJE0vJE0vY3B1ZnVuY19hc21f c2hlZXZhLlMKKwkkUy8kTS8kTS9jcHVmdW5jX2FzbV9zaGVldmEuUyAkUy8kTS8kTS9jcHVmdW5j X2FzbV9mYTUyNi5TCiBLRVJORUxfRVhUUkE9dHJhbXBvbGluZQogS0VSTkVMX0VYVFJBX0lOU1RB TEw9a2VybmVsLmd6LnRyYW1wCiB0cmFtcG9saW5lOiAke0tFUk5FTF9LT30udHJhbXAKSW5kZXg6 IGNvbmYvb3B0aW9ucy5hcm0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gY29uZi9vcHRpb25zLmFybQkocmV2aXNp b24gMjAxMzU4KQorKysgY29uZi9vcHRpb25zLmFybQkod29ya2luZyBjb3B5KQpAQCAtMzYsMyAr MzYsNCBAQAogQVQ5MV9CV0NUCQlvcHRfYXQ5MS5oCiBBVDkxX1RTQwkJb3B0X2F0OTEuaAogQVQ5 MV9LV0lLQllURQkJb3B0X2F0OTEuaAorQ1BVX0ZBNTI2CQlvcHRfZ2xvYmFsLmgKSW5kZXg6IGtl cm4vdmZzX21vdW50LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2Vybi92ZnNfbW91bnQuYwkocmV2aXNpb24g MjAxMzU4KQorKysga2Vybi92ZnNfbW91bnQuYwkod29ya2luZyBjb3B5KQpAQCAtMTQwMyw2ICsx NDAzLDExIEBACiAJc3RydWN0IHRpbWV2YWwgbGFzdGZhaWw7CiAJaW50IGN1cmZhaWwgPSAwOwog CisJLyogdGVtcG9yYXJ5IHNvbHV0aW9uIGZvciB0aW1lb3V0IHdhaXRpbmcgZm9yIFVTQiBkaXNr IHJvb3QKKwkgKiBmaWxlc3lzdGVtCisJICovCisJcGF1c2UoIldBSVQiLCBoeiAqIDEwKTsKKwog CWZvciAoOzspIHsKIAkJRFJPUF9HSUFOVCgpOwogCQlnX3dhaXRpZGxlKCk7Cg== --001636b144537453ad047c42ca50--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?260bb65e1001030543y35fc278bo8dc73d265542bb77>