From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:52770) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHb4h-0006ts-6Y for qemu-devel@nongnu.org; Mon, 18 Mar 2013 10:30:29 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UHb4X-0001of-0l for qemu-devel@nongnu.org; Mon, 18 Mar 2013 10:30:07 -0400 Received: from brest.ifremer.fr ([134.246.155.1]:36637) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UHb4W-0001oT-5y for qemu-devel@nongnu.org; Mon, 18 Mar 2013 10:29:56 -0400 Received: from brehat.ifremer.fr (brehat.ifremer.fr [134.246.166.1]) by brest.ifremer.fr (8.14.5/8.14.5) with ESMTP id r2IETtcb011559 for ; Mon, 18 Mar 2013 15:29:55 +0100 Received: from localhost (localhost.localdomain [127.0.0.1]) by brehat.ifremer.fr (Postfix) with ESMTP id 64DC12938A2 for ; Mon, 18 Mar 2013 15:29:55 +0100 (CET) Received: from brehat.ifremer.fr ([127.0.0.1]) by localhost (brehat.ifremer.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id jw6DF3PoT8Wc for ; Mon, 18 Mar 2013 15:29:55 +0100 (CET) Received: from [134.246.147.85] (br147-085.ifremer.fr [134.246.147.85]) by brehat.ifremer.fr (Postfix) with ESMTP id EFE5A29378A for ; Mon, 18 Mar 2013 15:29:54 +0100 (CET) Message-ID: <514724D0.7080505@genavir.fr> Date: Mon, 18 Mar 2013 15:29:36 +0100 From: Jean-Michel SCHRAMM MIME-Version: 1.0 References: <20130317160151.13356qa2i2zxwtlr@vdmz1mail.ifremer.fr> In-Reply-To: <20130317160151.13356qa2i2zxwtlr@vdmz1mail.ifremer.fr> Content-Type: multipart/mixed; boundary="------------000603010002000200030704" Subject: [Qemu-devel] Fwd: Re: AW: adding ports to the ss5. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: 'qemu-devel' This is a multi-part message in MIME format. --------------000603010002000200030704 Content-Type: multipart/alternative; boundary="------------020907080702070808050007" --------------020907080702070808050007 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by brest.ifremer.fr id r2IETtcb011559 -------- Message original -------- Sujet: Re: AW: adding ports to the ss5. Date : Sun, 17 Mar 2013 16:01:51 +0100 De : Jean.Michel.Schramm@genavir.fr Pour : Artyom Tarasenko Copie =C3=A0 : Jean.Michel.Schramm@genavir.fr, breuerr ,= =20 "mark.cave-ayland" Hi Artyom, Thanks for your answer from the airport... where are you bond to? Artyom Tarasenko a =C3=A9crit : >> So is there a way to modify ss5.bin? > > None that I know of. If you have to use the proprietary firmware > (ss5.bin, ss20.bin and so on), I think extending qemu that it persists > nvram is the way to go. I think the initialization of the nvram > happens in sun4m.c. At least it used to be there. You'd have to add > some option like -nvram=3Dfile.bin which would disable -prom-env > options. OK, great info. I might try this when I will succeed getting new serial port to the prom. > >> To add ports I am trying to modify sun4m.c and escc.c and add fields >> qemu_irq & CharDriverState to the escc_init function. Is that the >> correct way to do it? > > I think so. Except that I'm not sure you have to modify escc.c. But > I'm sitting at the airport and don't have qemu sources handy. Well, I thought I had to had fields to the escc_init function because I was understanding qemu_irq & CharDriverState fields as ttya and ttyb description. But I understand from your answser that I was confused by the a & b channel for an escc port? But then where are the two intitialisation of ttya and ttyb? I think I lack understanting of this: slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[14], display_type =3D=3D DT_NOGRAPHIC, ESCC_CL= OCK, 1); // Slavio TTYA (base+4, Linux ttyS0) is the first Qemu serial devic= e // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial devi= ce escc_init(hwdef->serial_base, slavio_irq[15], slavio_irq[15], serial_hds[0], serial_hds[1], ESCC_CLOCK, 1); Especially the coment (no much comment in there :-) ) base+4 and base+0. I can't see where this is defined. I attached the sources if you are getting bored in the airport... ;-) Thanks again. Have a nice flight. Jean Michel >> >> Artyom Tarasenko a =C3=A9crit : >> >>> ss5.bin doesn't auto detect the ports. You'll have to execute some >>> Forth commands at the OBP "ok" prompt to make them visible in the >>> device tree. Can't tell the exact commands right now. There is a free >>> book "writing device drivers" (the name might be not exact) from >>> Sun/Oracle. You can try looking up the example there. >>> >>> Artyom >>> >>> Sent from a mobile phone. Please excuse my brevity and autocorrected >>> typos. >>> >>> ----- Urspr=C3=BCngliche Nachricht ----- >>> Von: Jean-Michel SCHRAMM >>> Gesendet: 15.03.2013 19:02 >>> An: Artyom Tarasenko >>> Betreff: adding ports to the ss5. >>> >>> >> >> >> >> > > > -- > Regards, > Artyom Tarasenko > > solaris/sparc under qemu blog: http://tyom.blogspot.com/search/label/qe= mu > > --------------020907080702070808050007 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable X-MIME-Autoconverted: from 8bit to quoted-printable by brest.ifremer.fr id r2IETtcb011559


-------- Message original --------
Suj= et: Re: AW: adding ports to the ss5.
Dat= e=C2=A0: Sun, 17 Mar 2013 16:01:51 +0100
De=C2= =A0: Jean.Michel.Schramm@genavir.fr
Pou= r=C2=A0: Artyom Tarasenko <atar4qemu@gmail.com>
Cop= ie =C3=A0=C2=A0: Jean.Michel.Schramm@genavir.fr, breuerr <breuerr@mc.net>, "mark.cave-ayland" <mark.cave-ayland@ilande.co.uk>


Hi Artyom,
Thanks for your answer from the airport... where are you bond to?


Artyom Tarasenko <atar4qemu@gmail.com> a =C3=A9crit&nbsp;:

>> So is there a way to modify ss5.bin?
>
> None that I know of. If you have to use the proprietary firmware
> (ss5.bin, ss20.bin and so on), I think extending qemu that it persis=
ts
> nvram is the way to go. I think the initialization of the nvram
> happens in sun4m.c. At least it used to be there. You'd have to add
> some option like -nvram=3Dfile.bin which would disable -prom-env
> options.

OK, great info. I might try this when I will succeed getting new =20
serial port to the prom.

>
>> To add ports I am trying to modify sun4m.c and escc.c and add fi=
elds
>> qemu_irq & CharDriverState to the escc_init function. Is tha=
t the
>> correct way to do it?
>
> I think so. Except that I'm not sure you have to modify escc.c. But
> I'm sitting at the airport and don't have qemu sources handy.


Well, I thought I had to had fields to the escc_init function because =20
I was understanding qemu_irq & CharDriverState fields as ttya and tty=
b =20
description. But I understand from your answser that I was confused by =20
the a & b channel for an escc port?
But then where are the two intitialisation of ttya and ttyb?
I think I lack understanting of this:

  slavio_serial_ms_kbd_init(hwdef->ms_kb_base, slavio_irq[14],
                               display_type =3D=3D DT_NOGRAPHIC, ESCC_CLO=
CK, 1);
     // Slavio TTYA (base+4, Linux ttyS0) is the first Qemu serial device
     // Slavio TTYB (base+0, Linux ttyS1) is the second Qemu serial devic=
e
     escc_init(hwdef->serial_base, slavio_irq[15], slavio_irq[15],
               serial_hds[0], serial_hds[1], ESCC_CLOCK, 1);

Especially the coment (no much comment in there :-) ) base+4 and =20
base+0. I can't see where this is defined. I attached the sources if =20
you are getting bored in the airport... ;-)


Thanks again. Have a nice flight.
Jean Michel







>>
>> Artyom Tarasenko <atar4qemu@gmail.com> a =C3=A9crit&=
nbsp;:
>>
>>> ss5.bin doesn't auto detect the ports. You'll have to execut=
e some
>>> Forth commands at the OBP "ok" prompt to make them visible i=
n the
>>> device tree. Can't tell the exact commands right now. There =
is a free
>>> book "writing device drivers" (the name might be not exact) =
from
>>> Sun/Oracle. You can try looking up the example there.
>>>
>>> Artyom
>>>
>>> Sent from a mobile phone. Please excuse my brevity and autoc=
orrected
>>> typos.
>>>
>>> ----- Urspr=C3=BCngliche Nachricht -----
>>> Von: Jean-Michel SCHRAMM
>>> Gesendet: 15.03.2013 19:02
>>> An: Artyom Tarasenko
>>> Betreff: adding ports to the ss5.
>>>
>>>
>>
>>
>>
>>
>
>
> --
> Regards,
> Artyom Tarasenko
>
> solaris/sparc under qemu blog: http://tyom.blogspot.co=
m/search/label/qemu
>
>




--------------020907080702070808050007-- --------------000603010002000200030704 Content-Type: text/plain; charset=windows-1252; name="sun4m.c" Content-Disposition: attachment; filename="sun4m.c" Content-Transfer-Encoding: base64 LyoNCiAqIFFFTVUgU3VuNG0gJiBTdW40ZCAmIFN1bjRjIFN5c3RlbSBFbXVsYXRvcg0KICoN CiAqIENvcHlyaWdodCAoYykgMjAwMy0yMDA1IEZhYnJpY2UgQmVsbGFyZA0KICoNCiAqIFBl cm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVy c29uIG9idGFpbmluZyBhIGNvcHkNCiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsDQogKiBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQg bGltaXRhdGlvbiB0aGUgcmlnaHRzDQogKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2Us IHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsDQogKiBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUg U29mdHdhcmUgaXMNCiAqIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6DQogKg0KICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2Ug YW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4NCiAqIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLg0KICoN CiAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SDQogKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwNCiAqIEZJ VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElO IE5PIEVWRU5UIFNIQUxMDQogKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBC RSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUg0KICogTElBQklMSVRZ LCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwNCiAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNP RlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4NCiAqIFRIRSBTT0ZUV0FS RS4NCiAqLw0KI2luY2x1ZGUgInN5c2J1cy5oIg0KI2luY2x1ZGUgInFlbXUtdGltZXIuaCIN CiNpbmNsdWRlICJzdW40bS5oIg0KI2luY2x1ZGUgIm52cmFtLmgiDQojaW5jbHVkZSAic3Bh cmMzMl9kbWEuaCINCiNpbmNsdWRlICJmZGMuaCINCiNpbmNsdWRlICJzeXNlbXUuaCINCiNp bmNsdWRlICJuZXQuaCINCiNpbmNsdWRlICJib2FyZHMuaCINCiNpbmNsdWRlICJmaXJtd2Fy ZV9hYmkuaCINCiNpbmNsdWRlICJlc3AuaCINCiNpbmNsdWRlICJwYy5oIg0KI2luY2x1ZGUg ImlzYS5oIg0KI2luY2x1ZGUgImZ3X2NmZy5oIg0KI2luY2x1ZGUgImVzY2MuaCINCiNpbmNs dWRlICJlbXB0eV9zbG90LmgiDQojaW5jbHVkZSAicWRldi1hZGRyLmgiDQojaW5jbHVkZSAi bG9hZGVyLmgiDQojaW5jbHVkZSAiZWxmLmgiDQojaW5jbHVkZSAiYmxvY2tkZXYuaCINCiNp bmNsdWRlICJ0cmFjZS5oIg0KDQovKg0KICogU3VuNG0gYXJjaGl0ZWN0dXJlIHdhcyB1c2Vk IGluIHRoZSBmb2xsb3dpbmcgbWFjaGluZXM6DQogKg0KICogU1BBUkNzZXJ2ZXIgNnh4TVAv eHgNCiAqIFNQQVJDY2xhc3NpYyAoU1BBUkNjbGFzc2ljIFNlcnZlcikoU1BBUkNzdGF0aW9u IExDKSAoNC8xNSksDQogKiBTUEFSQ2NsYXNzaWMgWCAoNC8xMCkNCiAqIFNQQVJDc3RhdGlv biBMWC9aWCAoNC8zMCkNCiAqIFNQQVJDc3RhdGlvbiBWb3lhZ2VyDQogKiBTUEFSQ3N0YXRp b24gMTAveHgsIFNQQVJDc2VydmVyIDEwL3h4DQogKiBTUEFSQ3N0YXRpb24gNSwgU1BBUkNz ZXJ2ZXIgNQ0KICogU1BBUkNzdGF0aW9uIDIwL3h4LCBTUEFSQ3NlcnZlciAyMA0KICogU1BB UkNzdGF0aW9uIDQNCiAqDQogKiBTdW40ZCBhcmNoaXRlY3R1cmUgd2FzIHVzZWQgaW4gdGhl IGZvbGxvd2luZyBtYWNoaW5lczoNCiAqDQogKiBTUEFSQ2NlbnRlciAyMDAwDQogKiBTUEFS Q3NlcnZlciAxMDAwDQogKg0KICogU3VuNGMgYXJjaGl0ZWN0dXJlIHdhcyB1c2VkIGluIHRo ZSBmb2xsb3dpbmcgbWFjaGluZXM6DQogKiBTUEFSQ3N0YXRpb24gMS8xKywgU1BBUkNzZXJ2 ZXIgMS8xKw0KICogU1BBUkNzdGF0aW9uIFNMQw0KICogU1BBUkNzdGF0aW9uIElQQw0KICog U1BBUkNzdGF0aW9uIEVMQw0KICogU1BBUkNzdGF0aW9uIElQWA0KICoNCiAqIFNlZSBmb3Ig ZXhhbXBsZTogaHR0cDovL3d3dy5zdW5oZWxwLm9yZy9mYXEvc3VucmVmMS5odG1sDQogKi8N Cg0KI2RlZmluZSBLRVJORUxfTE9BRF9BRERSICAgICAweDAwMDA0MDAwDQojZGVmaW5lIENN RExJTkVfQUREUiAgICAgICAgIDB4MDA3ZmYwMDANCiNkZWZpbmUgSU5JVFJEX0xPQURfQURE UiAgICAgMHgwMDgwMDAwMA0KI2RlZmluZSBQUk9NX1NJWkVfTUFYICAgICAgICAoMTAyNCAq IDEwMjQpDQojZGVmaW5lIFBST01fVkFERFIgICAgICAgICAgIDB4ZmZkMDAwMDANCiNkZWZp bmUgUFJPTV9GSUxFTkFNRSAgICAgICAgIm9wZW5iaW9zLXNwYXJjMzIiDQojZGVmaW5lIENG R19BRERSICAgICAgICAgICAgIDB4ZDAwMDAwNTEwVUxMDQojZGVmaW5lIEZXX0NGR19TVU40 TV9ERVBUSCAgIChGV19DRkdfQVJDSF9MT0NBTCArIDB4MDApDQoNCiNkZWZpbmUgTUFYX0NQ VVMgMTYNCiNkZWZpbmUgTUFYX1BJTFMgMTYNCiNkZWZpbmUgTUFYX1ZTSU1NUyA0DQoNCiNk ZWZpbmUgRVNDQ19DTE9DSyA0OTE1MjAwDQoNCnN0cnVjdCBzdW40bV9od2RlZiB7DQogICAg dGFyZ2V0X3BoeXNfYWRkcl90IGlvbW11X2Jhc2UsIGlvbW11X3BhZF9iYXNlLCBpb21tdV9w YWRfbGVuLCBzbGF2aW9fYmFzZTsNCiAgICB0YXJnZXRfcGh5c19hZGRyX3QgaW50Y3RsX2Jh c2UsIGNvdW50ZXJfYmFzZSwgbnZyYW1fYmFzZSwgbXNfa2JfYmFzZTsNCiAgICB0YXJnZXRf cGh5c19hZGRyX3Qgc2VyaWFsX2Jhc2UsIGZkX2Jhc2U7DQogICAgdGFyZ2V0X3BoeXNfYWRk cl90IGFmeF9iYXNlLCBpZHJlZ19iYXNlLCBkbWFfYmFzZSwgZXNwX2Jhc2UsIGxlX2Jhc2U7 DQogICAgdGFyZ2V0X3BoeXNfYWRkcl90IHRjeF9iYXNlLCBjc19iYXNlLCBhcGNfYmFzZSwg YXV4MV9iYXNlLCBhdXgyX2Jhc2U7DQogICAgdGFyZ2V0X3BoeXNfYWRkcl90IGJwcF9iYXNl LCBkYnJpX2Jhc2UsIHN4X2Jhc2U7DQogICAgc3RydWN0IHsNCiAgICAgICAgdGFyZ2V0X3Bo eXNfYWRkcl90IHJlZ19iYXNlLCB2cmFtX2Jhc2U7DQogICAgfSB2c2ltbVtNQVhfVlNJTU1T XTsNCiAgICB0YXJnZXRfcGh5c19hZGRyX3QgZWNjX2Jhc2U7DQogICAgdWludDMyX3QgZWNj X3ZlcnNpb247DQogICAgdWludDhfdCBudnJhbV9tYWNoaW5lX2lkOw0KICAgIHVpbnQxNl90 IG1hY2hpbmVfaWQ7DQogICAgdWludDMyX3QgaW9tbXVfdmVyc2lvbjsNCiAgICB1aW50NjRf dCBtYXhfbWVtOw0KICAgIGNvbnN0IGNoYXIgKiBjb25zdCBkZWZhdWx0X2NwdV9tb2RlbDsN Cn07DQoNCiNkZWZpbmUgTUFYX0lPVU5JVFMgNQ0KDQpzdHJ1Y3Qgc3VuNGRfaHdkZWYgew0K ICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb3VuaXRfYmFzZXNbTUFYX0lPVU5JVFNdLCBzbGF2 aW9fYmFzZTsNCiAgICB0YXJnZXRfcGh5c19hZGRyX3QgY291bnRlcl9iYXNlLCBudnJhbV9i YXNlLCBtc19rYl9iYXNlOw0KICAgIHRhcmdldF9waHlzX2FkZHJfdCBzZXJpYWxfYmFzZTsN CiAgICB0YXJnZXRfcGh5c19hZGRyX3QgZXNwZG1hX2Jhc2UsIGVzcF9iYXNlOw0KICAgIHRh cmdldF9waHlzX2FkZHJfdCBsZWRtYV9iYXNlLCBsZV9iYXNlOw0KICAgIHRhcmdldF9waHlz X2FkZHJfdCB0Y3hfYmFzZTsNCiAgICB0YXJnZXRfcGh5c19hZGRyX3Qgc2JpX2Jhc2U7DQog ICAgdWludDhfdCBudnJhbV9tYWNoaW5lX2lkOw0KICAgIHVpbnQxNl90IG1hY2hpbmVfaWQ7 DQogICAgdWludDMyX3QgaW91bml0X3ZlcnNpb247DQogICAgdWludDY0X3QgbWF4X21lbTsN CiAgICBjb25zdCBjaGFyICogY29uc3QgZGVmYXVsdF9jcHVfbW9kZWw7DQp9Ow0KDQpzdHJ1 Y3Qgc3VuNGNfaHdkZWYgew0KICAgIHRhcmdldF9waHlzX2FkZHJfdCBpb21tdV9iYXNlLCBz bGF2aW9fYmFzZTsNCiAgICB0YXJnZXRfcGh5c19hZGRyX3QgaW50Y3RsX2Jhc2UsIGNvdW50 ZXJfYmFzZSwgbnZyYW1fYmFzZSwgbXNfa2JfYmFzZTsNCiAgICB0YXJnZXRfcGh5c19hZGRy X3Qgc2VyaWFsX2Jhc2UsIGZkX2Jhc2U7DQogICAgdGFyZ2V0X3BoeXNfYWRkcl90IGlkcmVn X2Jhc2UsIGRtYV9iYXNlLCBlc3BfYmFzZSwgbGVfYmFzZTsNCiAgICB0YXJnZXRfcGh5c19h ZGRyX3QgdGN4X2Jhc2UsIGF1eDFfYmFzZTsNCiAgICB1aW50OF90IG52cmFtX21hY2hpbmVf aWQ7DQogICAgdWludDE2X3QgbWFjaGluZV9pZDsNCiAgICB1aW50MzJfdCBpb21tdV92ZXJz aW9uOw0KICAgIHVpbnQ2NF90IG1heF9tZW07DQogICAgY29uc3QgY2hhciAqIGNvbnN0IGRl ZmF1bHRfY3B1X21vZGVsOw0KfTsNCg0KaW50IERNQV9nZXRfY2hhbm5lbF9tb2RlIChpbnQg bmNoYW4pDQp7DQogICAgcmV0dXJuIDA7DQp9DQppbnQgRE1BX3JlYWRfbWVtb3J5IChpbnQg bmNoYW4sIHZvaWQgKmJ1ZiwgaW50IHBvcywgaW50IHNpemUpDQp7DQogICAgcmV0dXJuIDA7 DQp9DQppbnQgRE1BX3dyaXRlX21lbW9yeSAoaW50IG5jaGFuLCB2b2lkICpidWYsIGludCBw b3MsIGludCBzaXplKQ0Kew0KICAgIHJldHVybiAwOw0KfQ0Kdm9pZCBETUFfaG9sZF9EUkVR IChpbnQgbmNoYW4pIHt9DQp2b2lkIERNQV9yZWxlYXNlX0RSRVEgKGludCBuY2hhbikge30N CnZvaWQgRE1BX3NjaGVkdWxlKGludCBuY2hhbikge30NCg0Kdm9pZCBETUFfaW5pdChpbnQg aGlnaF9wYWdlX2VuYWJsZSwgcWVtdV9pcnEgKmNwdV9yZXF1ZXN0X2V4aXQpDQp7DQp9DQoN CnZvaWQgRE1BX3JlZ2lzdGVyX2NoYW5uZWwgKGludCBuY2hhbiwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIERNQV90cmFuc2Zlcl9oYW5kbGVyIHRyYW5zZmVyX2hhbmRsZXIsDQog ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUpDQp7DQp9DQoNCnN0YXRp YyBpbnQgZndfY2ZnX2Jvb3Rfc2V0KHZvaWQgKm9wYXF1ZSwgY29uc3QgY2hhciAqYm9vdF9k ZXZpY2UpDQp7DQogICAgZndfY2ZnX2FkZF9pMTYob3BhcXVlLCBGV19DRkdfQk9PVF9ERVZJ Q0UsIGJvb3RfZGV2aWNlWzBdKTsNCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIHZvaWQg bnZyYW1faW5pdChNNDh0NTlTdGF0ZSAqbnZyYW0sIHVpbnQ4X3QgKm1hY2FkZHIsDQogICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNtZGxpbmUsIGNvbnN0IGNoYXIgKmJv b3RfZGV2aWNlcywNCiAgICAgICAgICAgICAgICAgICAgICAgcmFtX2FkZHJfdCBSQU1fc2l6 ZSwgdWludDMyX3Qga2VybmVsX3NpemUsDQogICAgICAgICAgICAgICAgICAgICAgIGludCB3 aWR0aCwgaW50IGhlaWdodCwgaW50IGRlcHRoLA0KICAgICAgICAgICAgICAgICAgICAgICBp bnQgbnZyYW1fbWFjaGluZV9pZCwgY29uc3QgY2hhciAqYXJjaCkNCnsNCiAgICB1bnNpZ25l ZCBpbnQgaTsNCiAgICB1aW50MzJfdCBzdGFydCwgZW5kOw0KICAgIHVpbnQ4X3QgaW1hZ2Vb MHgxZmYwXTsNCiAgICBzdHJ1Y3QgT3BlbkJJT1NfbnZwYXJ0X3YxICpwYXJ0X2hlYWRlcjsN Cg0KICAgIG1lbXNldChpbWFnZSwgJ1wwJywgc2l6ZW9mKGltYWdlKSk7DQoNCiAgICBzdGFy dCA9IDA7DQoNCiAgICAvLyBPcGVuQklPUyBudnJhbSB2YXJpYWJsZXMNCiAgICAvLyBWYXJp YWJsZSBwYXJ0aXRpb24NCiAgICBwYXJ0X2hlYWRlciA9IChzdHJ1Y3QgT3BlbkJJT1NfbnZw YXJ0X3YxICopJmltYWdlW3N0YXJ0XTsNCiAgICBwYXJ0X2hlYWRlci0+c2lnbmF0dXJlID0g T1BFTkJJT1NfUEFSVF9TWVNURU07DQogICAgcHN0cmNweShwYXJ0X2hlYWRlci0+bmFtZSwg c2l6ZW9mKHBhcnRfaGVhZGVyLT5uYW1lKSwgInN5c3RlbSIpOw0KDQogICAgZW5kID0gc3Rh cnQgKyBzaXplb2Yoc3RydWN0IE9wZW5CSU9TX252cGFydF92MSk7DQogICAgZm9yIChpID0g MDsgaSA8IG5iX3Byb21fZW52czsgaSsrKQ0KICAgICAgICBlbmQgPSBPcGVuQklPU19zZXRf dmFyKGltYWdlLCBlbmQsIHByb21fZW52c1tpXSk7DQoNCiAgICAvLyBFbmQgbWFya2VyDQog ICAgaW1hZ2VbZW5kKytdID0gJ1wwJzsNCg0KICAgIGVuZCA9IHN0YXJ0ICsgKChlbmQgLSBz dGFydCArIDE1KSAmIH4xNSk7DQogICAgT3BlbkJJT1NfZmluaXNoX3BhcnRpdGlvbihwYXJ0 X2hlYWRlciwgZW5kIC0gc3RhcnQpOw0KDQogICAgLy8gZnJlZSBwYXJ0aXRpb24NCiAgICBz dGFydCA9IGVuZDsNCiAgICBwYXJ0X2hlYWRlciA9IChzdHJ1Y3QgT3BlbkJJT1NfbnZwYXJ0 X3YxICopJmltYWdlW3N0YXJ0XTsNCiAgICBwYXJ0X2hlYWRlci0+c2lnbmF0dXJlID0gT1BF TkJJT1NfUEFSVF9GUkVFOw0KICAgIHBzdHJjcHkocGFydF9oZWFkZXItPm5hbWUsIHNpemVv ZihwYXJ0X2hlYWRlci0+bmFtZSksICJmcmVlIik7DQoNCiAgICBlbmQgPSAweDFmZDA7DQog ICAgT3BlbkJJT1NfZmluaXNoX3BhcnRpdGlvbihwYXJ0X2hlYWRlciwgZW5kIC0gc3RhcnQp Ow0KDQogICAgU3VuX2luaXRfaGVhZGVyKChzdHJ1Y3QgU3VuX252cmFtICopJmltYWdlWzB4 MWZkOF0sIG1hY2FkZHIsDQogICAgICAgICAgICAgICAgICAgIG52cmFtX21hY2hpbmVfaWQp Ow0KDQogICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbWFnZSk7IGkrKykNCiAgICAgICAg bTQ4dDU5X3dyaXRlKG52cmFtLCBpLCBpbWFnZVtpXSk7DQp9DQoNCnN0YXRpYyBEZXZpY2VT dGF0ZSAqc2xhdmlvX2ludGN0bDsNCg0Kdm9pZCBwaWNfaW5mbyhNb25pdG9yICptb24pDQp7 DQogICAgaWYgKHNsYXZpb19pbnRjdGwpDQogICAgICAgIHNsYXZpb19waWNfaW5mbyhtb24s IHNsYXZpb19pbnRjdGwpOw0KfQ0KDQp2b2lkIGlycV9pbmZvKE1vbml0b3IgKm1vbikNCnsN CiAgICBpZiAoc2xhdmlvX2ludGN0bCkNCiAgICAgICAgc2xhdmlvX2lycV9pbmZvKG1vbiwg c2xhdmlvX2ludGN0bCk7DQp9DQoNCnZvaWQgY3B1X2NoZWNrX2lycXMoQ1BVU3RhdGUgKmVu dikNCnsNCiAgICBpZiAoZW52LT5waWxfaW4gJiYgKGVudi0+aW50ZXJydXB0X2luZGV4ID09 IDAgfHwNCiAgICAgICAgICAgICAgICAgICAgICAgIChlbnYtPmludGVycnVwdF9pbmRleCAm IH4xNSkgPT0gVFRfRVhUSU5UKSkgew0KICAgICAgICB1bnNpZ25lZCBpbnQgaTsNCg0KICAg ICAgICBmb3IgKGkgPSAxNTsgaSA+IDA7IGktLSkgew0KICAgICAgICAgICAgaWYgKGVudi0+ cGlsX2luICYgKDEgPDwgaSkpIHsNCiAgICAgICAgICAgICAgICBpbnQgb2xkX2ludGVycnVw dCA9IGVudi0+aW50ZXJydXB0X2luZGV4Ow0KDQogICAgICAgICAgICAgICAgZW52LT5pbnRl cnJ1cHRfaW5kZXggPSBUVF9FWFRJTlQgfCBpOw0KICAgICAgICAgICAgICAgIGlmIChvbGRf aW50ZXJydXB0ICE9IGVudi0+aW50ZXJydXB0X2luZGV4KSB7DQogICAgICAgICAgICAgICAg ICAgIHRyYWNlX3N1bjRtX2NwdV9pbnRlcnJ1cHQoaSk7DQogICAgICAgICAgICAgICAgICAg IGNwdV9pbnRlcnJ1cHQoZW52LCBDUFVfSU5URVJSVVBUX0hBUkQpOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAg fQ0KICAgIH0gZWxzZSBpZiAoIWVudi0+cGlsX2luICYmIChlbnYtPmludGVycnVwdF9pbmRl eCAmIH4xNSkgPT0gVFRfRVhUSU5UKSB7DQogICAgICAgIHRyYWNlX3N1bjRtX2NwdV9yZXNl dF9pbnRlcnJ1cHQoZW52LT5pbnRlcnJ1cHRfaW5kZXggJiAxNSk7DQogICAgICAgIGVudi0+ aW50ZXJydXB0X2luZGV4ID0gMDsNCiAgICAgICAgY3B1X3Jlc2V0X2ludGVycnVwdChlbnYs IENQVV9JTlRFUlJVUFRfSEFSRCk7DQogICAgfQ0KfQ0KDQpzdGF0aWMgdm9pZCBjcHVfa2lj a19pcnEoQ1BVU3RhdGUgKmVudikNCnsNCiAgICBlbnYtPmhhbHRlZCA9IDA7DQogICAgY3B1 X2NoZWNrX2lycXMoZW52KTsNCiAgICBxZW11X2NwdV9raWNrKGVudik7DQp9DQoNCnN0YXRp YyB2b2lkIGNwdV9zZXRfaXJxKHZvaWQgKm9wYXF1ZSwgaW50IGlycSwgaW50IGxldmVsKQ0K ew0KICAgIENQVVN0YXRlICplbnYgPSBvcGFxdWU7DQoNCiAgICBpZiAobGV2ZWwpIHsNCiAg ICAgICAgdHJhY2Vfc3VuNG1fY3B1X3NldF9pcnFfcmFpc2UoaXJxKTsNCiAgICAgICAgZW52 LT5waWxfaW4gfD0gMSA8PCBpcnE7DQogICAgICAgIGNwdV9raWNrX2lycShlbnYpOw0KICAg IH0gZWxzZSB7DQogICAgICAgIHRyYWNlX3N1bjRtX2NwdV9zZXRfaXJxX2xvd2VyKGlycSk7 DQogICAgICAgIGVudi0+cGlsX2luICY9IH4oMSA8PCBpcnEpOw0KICAgICAgICBjcHVfY2hl Y2tfaXJxcyhlbnYpOw0KICAgIH0NCn0NCg0Kc3RhdGljIHZvaWQgZHVtbXlfY3B1X3NldF9p cnEodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpDQp7DQp9DQoNCnN0YXRpYyB2 b2lkIG1haW5fY3B1X3Jlc2V0KHZvaWQgKm9wYXF1ZSkNCnsNCiAgICBDUFVTdGF0ZSAqZW52 ID0gb3BhcXVlOw0KDQogICAgY3B1X3Jlc2V0KGVudik7DQogICAgZW52LT5oYWx0ZWQgPSAw Ow0KfQ0KDQpzdGF0aWMgdm9pZCBzZWNvbmRhcnlfY3B1X3Jlc2V0KHZvaWQgKm9wYXF1ZSkN CnsNCiAgICBDUFVTdGF0ZSAqZW52ID0gb3BhcXVlOw0KDQogICAgY3B1X3Jlc2V0KGVudik7 DQogICAgZW52LT5oYWx0ZWQgPSAxOw0KfQ0KDQpzdGF0aWMgdm9pZCBjcHVfaGFsdF9zaWdu YWwodm9pZCAqb3BhcXVlLCBpbnQgaXJxLCBpbnQgbGV2ZWwpDQp7DQogICAgaWYgKGxldmVs ICYmIGNwdV9zaW5nbGVfZW52KQ0KICAgICAgICBjcHVfaW50ZXJydXB0KGNwdV9zaW5nbGVf ZW52LCBDUFVfSU5URVJSVVBUX0hBTFQpOw0KfQ0KDQpzdGF0aWMgdWludDY0X3QgdHJhbnNs YXRlX2tlcm5lbF9hZGRyZXNzKHZvaWQgKm9wYXF1ZSwgdWludDY0X3QgYWRkcikNCnsNCiAg ICByZXR1cm4gYWRkciAtIDB4ZjAwMDAwMDBVTEw7DQp9DQoNCnN0YXRpYyB1bnNpZ25lZCBs b25nIHN1bjRtX2xvYWRfa2VybmVsKGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRy ZF9maWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJh bV9hZGRyX3QgUkFNX3NpemUpDQp7DQogICAgaW50IGxpbnV4X2Jvb3Q7DQogICAgdW5zaWdu ZWQgaW50IGk7DQogICAgbG9uZyBpbml0cmRfc2l6ZSwga2VybmVsX3NpemU7DQogICAgdWlu dDhfdCAqcHRyOw0KDQogICAgbGludXhfYm9vdCA9IChrZXJuZWxfZmlsZW5hbWUgIT0gTlVM TCk7DQoNCiAgICBrZXJuZWxfc2l6ZSA9IDA7DQogICAgaWYgKGxpbnV4X2Jvb3QpIHsNCiAg ICAgICAgaW50IGJzd2FwX25lZWRlZDsNCg0KI2lmZGVmIEJTV0FQX05FRURFRA0KICAgICAg ICBic3dhcF9uZWVkZWQgPSAxOw0KI2Vsc2UNCiAgICAgICAgYnN3YXBfbmVlZGVkID0gMDsN CiNlbmRpZg0KICAgICAgICBrZXJuZWxfc2l6ZSA9IGxvYWRfZWxmKGtlcm5lbF9maWxlbmFt ZSwgdHJhbnNsYXRlX2tlcm5lbF9hZGRyZXNzLCBOVUxMLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwsIDEsIEVMRl9NQUNISU5FLCAwKTsNCiAg ICAgICAgaWYgKGtlcm5lbF9zaXplIDwgMCkNCiAgICAgICAgICAgIGtlcm5lbF9zaXplID0g bG9hZF9hb3V0KGtlcm5lbF9maWxlbmFtZSwgS0VSTkVMX0xPQURfQUREUiwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJBTV9zaXplIC0gS0VSTkVMX0xPQURfQURE UiwgYnN3YXBfbmVlZGVkLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg VEFSR0VUX1BBR0VfU0laRSk7DQogICAgICAgIGlmIChrZXJuZWxfc2l6ZSA8IDApDQogICAg ICAgICAgICBrZXJuZWxfc2l6ZSA9IGxvYWRfaW1hZ2VfdGFyZ3BoeXMoa2VybmVsX2ZpbGVu YW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEtF Uk5FTF9MT0FEX0FERFIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUkFNX3NpemUgLSBLRVJORUxfTE9BRF9BRERSKTsNCiAgICAgICAgaWYgKGtl cm5lbF9zaXplIDwgMCkgew0KICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBj b3VsZCBub3QgbG9hZCBrZXJuZWwgJyVzJ1xuIiwNCiAgICAgICAgICAgICAgICAgICAga2Vy bmVsX2ZpbGVuYW1lKTsNCiAgICAgICAgICAgIGV4aXQoMSk7DQogICAgICAgIH0NCg0KICAg ICAgICAvKiBsb2FkIGluaXRyZCAqLw0KICAgICAgICBpbml0cmRfc2l6ZSA9IDA7DQogICAg ICAgIGlmIChpbml0cmRfZmlsZW5hbWUpIHsNCiAgICAgICAgICAgIGluaXRyZF9zaXplID0g bG9hZF9pbWFnZV90YXJncGh5cyhpbml0cmRfZmlsZW5hbWUsDQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5JVFJEX0xPQURfQUREUiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU1fc2l6ZSAtIElO SVRSRF9MT0FEX0FERFIpOw0KICAgICAgICAgICAgaWYgKGluaXRyZF9zaXplIDwgMCkgew0K ICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IGxvYWQg aW5pdGlhbCByYW0gZGlzayAnJXMnXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgaW5p dHJkX2ZpbGVuYW1lKTsNCiAgICAgICAgICAgICAgICBleGl0KDEpOw0KICAgICAgICAgICAg fQ0KICAgICAgICB9DQogICAgICAgIGlmIChpbml0cmRfc2l6ZSA+IDApIHsNCiAgICAgICAg ICAgIGZvciAoaSA9IDA7IGkgPCA2NCAqIFRBUkdFVF9QQUdFX1NJWkU7IGkgKz0gVEFSR0VU X1BBR0VfU0laRSkgew0KICAgICAgICAgICAgICAgIHB0ciA9IHJvbV9wdHIoS0VSTkVMX0xP QURfQUREUiArIGkpOw0KICAgICAgICAgICAgICAgIGlmIChsZGxfcChwdHIpID09IDB4NDg2 NDcyNTMpIHsgLy8gSGRyUw0KICAgICAgICAgICAgICAgICAgICBzdGxfcChwdHIgKyAxNiwg SU5JVFJEX0xPQURfQUREUik7DQogICAgICAgICAgICAgICAgICAgIHN0bF9wKHB0ciArIDIw LCBpbml0cmRfc2l6ZSk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg ICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICByZXR1cm4g a2VybmVsX3NpemU7DQp9DQoNCnN0YXRpYyB2b2lkICppb21tdV9pbml0KHRhcmdldF9waHlz X2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2ZXJzaW9uLCBxZW11X2lycSBpcnEpDQp7DQogICAg RGV2aWNlU3RhdGUgKmRldjsNCiAgICBTeXNCdXNEZXZpY2UgKnM7DQoNCiAgICBkZXYgPSBx ZGV2X2NyZWF0ZShOVUxMLCAiaW9tbXUiKTsNCiAgICBxZGV2X3Byb3Bfc2V0X3VpbnQzMihk ZXYsICJ2ZXJzaW9uIiwgdmVyc2lvbik7DQogICAgcWRldl9pbml0X25vZmFpbChkZXYpOw0K ICAgIHMgPSBzeXNidXNfZnJvbV9xZGV2KGRldik7DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJx KHMsIDAsIGlycSk7DQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGFkZHIpOw0KDQogICAg cmV0dXJuIHM7DQp9DQoNCnN0YXRpYyB2b2lkICpzcGFyYzMyX2RtYV9pbml0KHRhcmdldF9w aHlzX2FkZHJfdCBkYWRkciwgcWVtdV9pcnEgcGFyZW50X2lycSwNCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKmlvbW11LCBxZW11X2lycSAqZGV2X2lycSwgaW50IGlz X2xlZG1hKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7DQogICAgU3lzQnVzRGV2aWNlICpz Ow0KDQogICAgZGV2ID0gcWRldl9jcmVhdGUoTlVMTCwgInNwYXJjMzJfZG1hIik7DQogICAg cWRldl9wcm9wX3NldF9wdHIoZGV2LCAiaW9tbXVfb3BhcXVlIiwgaW9tbXUpOw0KICAgIHFk ZXZfcHJvcF9zZXRfdWludDMyKGRldiwgImlzX2xlZG1hIiwgaXNfbGVkbWEpOw0KICAgIHFk ZXZfaW5pdF9ub2ZhaWwoZGV2KTsNCiAgICBzID0gc3lzYnVzX2Zyb21fcWRldihkZXYpOw0K ICAgIHN5c2J1c19jb25uZWN0X2lycShzLCAwLCBwYXJlbnRfaXJxKTsNCiAgICAqZGV2X2ly cSA9IHFkZXZfZ2V0X2dwaW9faW4oZGV2LCAwKTsNCiAgICBzeXNidXNfbW1pb19tYXAocywg MCwgZGFkZHIpOw0KDQogICAgcmV0dXJuIHM7DQp9DQoNCnN0YXRpYyB2b2lkIGxhbmNlX2lu aXQoTklDSW5mbyAqbmQsIHRhcmdldF9waHlzX2FkZHJfdCBsZWFkZHIsDQogICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKmRtYV9vcGFxdWUsIHFlbXVfaXJxIGlycSkNCnsNCiAgICBE ZXZpY2VTdGF0ZSAqZGV2Ow0KICAgIFN5c0J1c0RldmljZSAqczsNCiAgICBxZW11X2lycSBy ZXNldDsNCg0KICAgIHFlbXVfY2hlY2tfbmljX21vZGVsKCZuZF90YWJsZVswXSwgImxhbmNl Iik7DQoNCiAgICBkZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCAibGFuY2UiKTsNCiAgICBxZGV2 X3NldF9uaWNfcHJvcGVydGllcyhkZXYsIG5kKTsNCiAgICBxZGV2X3Byb3Bfc2V0X3B0cihk ZXYsICJkbWEiLCBkbWFfb3BhcXVlKTsNCiAgICBxZGV2X2luaXRfbm9mYWlsKGRldik7DQog ICAgcyA9IHN5c2J1c19mcm9tX3FkZXYoZGV2KTsNCiAgICBzeXNidXNfbW1pb19tYXAocywg MCwgbGVhZGRyKTsNCiAgICBzeXNidXNfY29ubmVjdF9pcnEocywgMCwgaXJxKTsNCiAgICBy ZXNldCA9IHFkZXZfZ2V0X2dwaW9faW4oZGV2LCAwKTsNCiAgICBxZGV2X2Nvbm5lY3RfZ3Bp b19vdXQoZG1hX29wYXF1ZSwgMCwgcmVzZXQpOw0KfQ0KDQpzdGF0aWMgdm9pZCBkYnJpX2lu aXQodGFyZ2V0X3BoeXNfYWRkcl90IGRhZGRyLCBxZW11X2lycSBwYXJlbnRfaXJxLA0KICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKmlvbW11KQ0Kew0KICAgIERldmljZVN0YXRlICpk ZXY7DQogICAgU3lzQnVzRGV2aWNlICpzOw0KDQogICAgZGV2ID0gcWRldl9jcmVhdGUoTlVM TCwgIlNVTlcsREJSSWUiKTsNCiAgICBxZGV2X3Byb3Bfc2V0X3B0cihkZXYsICJpb21tdV9v cGFxdWUiLCBpb21tdSk7DQogICAgcWRldl9pbml0X25vZmFpbChkZXYpOw0KICAgIHMgPSBz eXNidXNfZnJvbV9xZGV2KGRldik7DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDAsIHBh cmVudF9pcnEpOw0KICAgIHN5c2J1c19tbWlvX21hcChzLCAwLCBkYWRkcik7DQp9DQoNCnN0 YXRpYyBEZXZpY2VTdGF0ZSAqc2xhdmlvX2ludGN0bF9pbml0KHRhcmdldF9waHlzX2FkZHJf dCBhZGRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0 X3BoeXNfYWRkcl90IGFkZHJnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcWVtdV9pcnEgKipwYXJlbnRfaXJxKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7 DQogICAgU3lzQnVzRGV2aWNlICpzOw0KICAgIHVuc2lnbmVkIGludCBpLCBqOw0KDQogICAg ZGV2ID0gcWRldl9jcmVhdGUoTlVMTCwgInNsYXZpb19pbnRjdGwiKTsNCiAgICBxZGV2X2lu aXRfbm9mYWlsKGRldik7DQoNCiAgICBzID0gc3lzYnVzX2Zyb21fcWRldihkZXYpOw0KDQog ICAgZm9yIChpID0gMDsgaSA8IE1BWF9DUFVTOyBpKyspIHsNCiAgICAgICAgZm9yIChqID0g MDsgaiA8IE1BWF9QSUxTOyBqKyspIHsNCiAgICAgICAgICAgIHN5c2J1c19jb25uZWN0X2ly cShzLCBpICogTUFYX1BJTFMgKyBqLCBwYXJlbnRfaXJxW2ldW2pdKTsNCiAgICAgICAgfQ0K ICAgIH0NCiAgICBzeXNidXNfbW1pb19tYXAocywgMCwgYWRkcmcpOw0KICAgIGZvciAoaSA9 IDA7IGkgPCBNQVhfQ1BVUzsgaSsrKSB7DQogICAgICAgIHN5c2J1c19tbWlvX21hcChzLCBp ICsgMSwgYWRkciArIGkgKiBUQVJHRVRfUEFHRV9TSVpFKTsNCiAgICB9DQoNCiAgICByZXR1 cm4gZGV2Ow0KfQ0KDQojZGVmaW5lIFNZU19USU1FUl9PRkZTRVQgICAgICAweDEwMDAwVUxM DQojZGVmaW5lIENQVV9USU1FUl9PRkZTRVQoY3B1KSAoMHgxMDAwVUxMICogY3B1KQ0KDQpz dGF0aWMgdm9pZCBzbGF2aW9fdGltZXJfaW5pdF9hbGwodGFyZ2V0X3BoeXNfYWRkcl90IGFk ZHIsIHFlbXVfaXJxIG1hc3Rlcl9pcnEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgcWVtdV9pcnEgKmNwdV9pcnFzLCB1bnNpZ25lZCBpbnQgbnVtX2NwdXMpDQp7DQog ICAgRGV2aWNlU3RhdGUgKmRldjsNCiAgICBTeXNCdXNEZXZpY2UgKnM7DQogICAgdW5zaWdu ZWQgaW50IGk7DQoNCiAgICBkZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCAic2xhdmlvX3RpbWVy Iik7DQogICAgcWRldl9wcm9wX3NldF91aW50MzIoZGV2LCAibnVtX2NwdXMiLCBudW1fY3B1 cyk7DQogICAgcWRldl9pbml0X25vZmFpbChkZXYpOw0KICAgIHMgPSBzeXNidXNfZnJvbV9x ZGV2KGRldik7DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDAsIG1hc3Rlcl9pcnEpOw0K ICAgIHN5c2J1c19tbWlvX21hcChzLCAwLCBhZGRyICsgU1lTX1RJTUVSX09GRlNFVCk7DQoN CiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NQVVM7IGkrKykgew0KICAgICAgICBzeXNidXNf bW1pb19tYXAocywgaSArIDEsIGFkZHIgKyAodGFyZ2V0X3BoeXNfYWRkcl90KUNQVV9USU1F Ul9PRkZTRVQoaSkpOw0KICAgICAgICBzeXNidXNfY29ubmVjdF9pcnEocywgaSArIDEsIGNw dV9pcnFzW2ldKTsNCiAgICB9DQp9DQoNCiNkZWZpbmUgTUlTQ19MRURTIDB4MDE2MDAwMDAN CiNkZWZpbmUgTUlTQ19DRkcgIDB4MDE4MDAwMDANCiNkZWZpbmUgTUlTQ19ESUFHIDB4MDFh MDAwMDANCiNkZWZpbmUgTUlTQ19NRE0gIDB4MDFiMDAwMDANCiNkZWZpbmUgTUlTQ19TWVMg IDB4MDFmMDAwMDANCg0Kc3RhdGljIHZvaWQgc2xhdmlvX21pc2NfaW5pdCh0YXJnZXRfcGh5 c19hZGRyX3QgYmFzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Bo eXNfYWRkcl90IGF1eDFfYmFzZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFy Z2V0X3BoeXNfYWRkcl90IGF1eDJfYmFzZSwgcWVtdV9pcnEgaXJxLA0KICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBxZW11X2lycSBmZGNfdGMpDQp7DQogICAgRGV2aWNlU3RhdGUg KmRldjsNCiAgICBTeXNCdXNEZXZpY2UgKnM7DQoNCiAgICBkZXYgPSBxZGV2X2NyZWF0ZShO VUxMLCAic2xhdmlvX21pc2MiKTsNCiAgICBxZGV2X2luaXRfbm9mYWlsKGRldik7DQogICAg cyA9IHN5c2J1c19mcm9tX3FkZXYoZGV2KTsNCiAgICBpZiAoYmFzZSkgew0KICAgICAgICAv KiA4IGJpdCByZWdpc3RlcnMgKi8NCiAgICAgICAgLyogU2xhdmlvIGNvbnRyb2wgKi8NCiAg ICAgICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGJhc2UgKyBNSVNDX0NGRyk7DQogICAgICAg IC8qIERpYWdub3N0aWNzICovDQogICAgICAgIHN5c2J1c19tbWlvX21hcChzLCAxLCBiYXNl ICsgTUlTQ19ESUFHKTsNCiAgICAgICAgLyogTW9kZW0gY29udHJvbCAqLw0KICAgICAgICBz eXNidXNfbW1pb19tYXAocywgMiwgYmFzZSArIE1JU0NfTURNKTsNCiAgICAgICAgLyogMTYg Yml0IHJlZ2lzdGVycyAqLw0KICAgICAgICAvKiBzczYwMG1wIGRpYWcgTEVEcyAqLw0KICAg ICAgICBzeXNidXNfbW1pb19tYXAocywgMywgYmFzZSArIE1JU0NfTEVEUyk7DQogICAgICAg IC8qIDMyIGJpdCByZWdpc3RlcnMgKi8NCiAgICAgICAgLyogU3lzdGVtIGNvbnRyb2wgKi8N CiAgICAgICAgc3lzYnVzX21taW9fbWFwKHMsIDQsIGJhc2UgKyBNSVNDX1NZUyk7DQogICAg fQ0KICAgIGlmIChhdXgxX2Jhc2UpIHsNCiAgICAgICAgLyogQVVYIDEgKE1pc2MgU3lzdGVt IEZ1bmN0aW9ucykgKi8NCiAgICAgICAgc3lzYnVzX21taW9fbWFwKHMsIDUsIGF1eDFfYmFz ZSk7DQogICAgfQ0KICAgIGlmIChhdXgyX2Jhc2UpIHsNCiAgICAgICAgLyogQVVYIDIgKFNv ZnR3YXJlIFBvd2VyZG93biBDb250cm9sKSAqLw0KICAgICAgICBzeXNidXNfbW1pb19tYXAo cywgNiwgYXV4Ml9iYXNlKTsNCiAgICB9DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDAs IGlycSk7DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDEsIGZkY190Yyk7DQogICAgcWVt dV9zeXN0ZW1fcG93ZXJkb3duID0gcWRldl9nZXRfZ3Bpb19pbihkZXYsIDApOw0KfQ0KDQpz dGF0aWMgdm9pZCBlY2NfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwgcWVtdV9pcnEg aXJxLCB1aW50MzJfdCB2ZXJzaW9uKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7DQogICAg U3lzQnVzRGV2aWNlICpzOw0KDQogICAgZGV2ID0gcWRldl9jcmVhdGUoTlVMTCwgImVjY21l bWN0bCIpOw0KICAgIHFkZXZfcHJvcF9zZXRfdWludDMyKGRldiwgInZlcnNpb24iLCB2ZXJz aW9uKTsNCiAgICBxZGV2X2luaXRfbm9mYWlsKGRldik7DQogICAgcyA9IHN5c2J1c19mcm9t X3FkZXYoZGV2KTsNCiAgICBzeXNidXNfY29ubmVjdF9pcnEocywgMCwgaXJxKTsNCiAgICBz eXNidXNfbW1pb19tYXAocywgMCwgYmFzZSk7DQogICAgaWYgKHZlcnNpb24gPT0gMCkgeyAv LyBTUy02MDBNUCBvbmx5DQogICAgICAgIHN5c2J1c19tbWlvX21hcChzLCAxLCBiYXNlICsg MHgxMDAwKTsNCiAgICB9DQp9DQoNCnN0YXRpYyB2b2lkIGFwY19pbml0KHRhcmdldF9waHlz X2FkZHJfdCBwb3dlcl9iYXNlLCBxZW11X2lycSBjcHVfaGFsdCkNCnsNCiAgICBEZXZpY2VT dGF0ZSAqZGV2Ow0KICAgIFN5c0J1c0RldmljZSAqczsNCg0KICAgIGRldiA9IHFkZXZfY3Jl YXRlKE5VTEwsICJhcGMiKTsNCiAgICBxZGV2X2luaXRfbm9mYWlsKGRldik7DQogICAgcyA9 IHN5c2J1c19mcm9tX3FkZXYoZGV2KTsNCiAgICAvKiBQb3dlciBtYW5hZ2VtZW50IChBUEMp IFhYWDogbm90IGEgU2xhdmlvIGRldmljZSAqLw0KICAgIHN5c2J1c19tbWlvX21hcChzLCAw LCBwb3dlcl9iYXNlKTsNCiAgICBzeXNidXNfY29ubmVjdF9pcnEocywgMCwgY3B1X2hhbHQp Ow0KfQ0KDQpzdGF0aWMgdm9pZCB0Y3hfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwg aW50IHZyYW1fc2l6ZSwgaW50IHdpZHRoLA0KICAgICAgICAgICAgICAgICAgICAgaW50IGhl aWdodCwgaW50IGRlcHRoKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7DQogICAgU3lzQnVz RGV2aWNlICpzOw0KDQogICAgZGV2ID0gcWRldl9jcmVhdGUoTlVMTCwgIlNVTlcsdGN4Iik7 DQogICAgcWRldl9wcm9wX3NldF90YWRkcihkZXYsICJhZGRyIiwgYWRkcik7DQogICAgcWRl dl9wcm9wX3NldF91aW50MzIoZGV2LCAidnJhbV9zaXplIiwgdnJhbV9zaXplKTsNCiAgICBx ZGV2X3Byb3Bfc2V0X3VpbnQxNihkZXYsICJ3aWR0aCIsIHdpZHRoKTsNCiAgICBxZGV2X3By b3Bfc2V0X3VpbnQxNihkZXYsICJoZWlnaHQiLCBoZWlnaHQpOw0KICAgIHFkZXZfcHJvcF9z ZXRfdWludDE2KGRldiwgImRlcHRoIiwgZGVwdGgpOw0KICAgIHFkZXZfaW5pdF9ub2ZhaWwo ZGV2KTsNCiAgICBzID0gc3lzYnVzX2Zyb21fcWRldihkZXYpOw0KICAgIC8qIDgtYml0IHBs YW5lICovDQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGFkZHIgKyAweDAwODAwMDAwVUxM KTsNCiAgICAvKiBEQUMgKi8NCiAgICBzeXNidXNfbW1pb19tYXAocywgMSwgYWRkciArIDB4 MDAyMDAwMDBVTEwpOw0KICAgIC8qIFRFQyAoZHVtbXkpICovDQogICAgc3lzYnVzX21taW9f bWFwKHMsIDIsIGFkZHIgKyAweDAwNzAwMDAwVUxMKTsNCiAgICAvKiBUSEMgMjQgYml0OiBO ZXRCU0Qgd3JpdGVzIGhlcmUgZXZlbiB3aXRoIDgtYml0IGRpc3BsYXk6IGR1bW15ICovDQog ICAgc3lzYnVzX21taW9fbWFwKHMsIDMsIGFkZHIgKyAweDAwMzAxMDAwVUxMKTsNCiAgICBp ZiAoZGVwdGggPT0gMjQpIHsNCiAgICAgICAgLyogMjQtYml0IHBsYW5lICovDQogICAgICAg IHN5c2J1c19tbWlvX21hcChzLCA0LCBhZGRyICsgMHgwMjAwMDAwMFVMTCk7DQogICAgICAg IC8qIENvbnRyb2wgcGxhbmUgKi8NCiAgICAgICAgc3lzYnVzX21taW9fbWFwKHMsIDUsIGFk ZHIgKyAweDBhMDAwMDAwVUxMKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAvKiBUSEMgOCBi aXQgKGR1bW15KSAqLw0KICAgICAgICBzeXNidXNfbW1pb19tYXAocywgNCwgYWRkciArIDB4 MDAzMDAwMDBVTEwpOw0KICAgIH0NCn0NCg0KLyogTkNSODlDMTAwL01BQ0lPIEludGVybmFs IElEIHJlZ2lzdGVyICovDQpzdGF0aWMgY29uc3QgdWludDhfdCBpZHJlZ19kYXRhW10gPSB7 IDB4ZmUsIDB4ODEsIDB4MDEsIDB4MDMgfTsNCg0Kc3RhdGljIHZvaWQgaWRyZWdfaW5pdCh0 YXJnZXRfcGh5c19hZGRyX3QgYWRkcikNCnsNCiAgICBEZXZpY2VTdGF0ZSAqZGV2Ow0KICAg IFN5c0J1c0RldmljZSAqczsNCg0KICAgIGRldiA9IHFkZXZfY3JlYXRlKE5VTEwsICJtYWNp b19pZHJlZyIpOw0KICAgIHFkZXZfaW5pdF9ub2ZhaWwoZGV2KTsNCiAgICBzID0gc3lzYnVz X2Zyb21fcWRldihkZXYpOw0KDQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGFkZHIpOw0K ICAgIGNwdV9waHlzaWNhbF9tZW1vcnlfd3JpdGVfcm9tKGFkZHIsIGlkcmVnX2RhdGEsIHNp emVvZihpZHJlZ19kYXRhKSk7DQp9DQoNCnN0YXRpYyBpbnQgaWRyZWdfaW5pdDEoU3lzQnVz RGV2aWNlICpkZXYpDQp7DQogICAgcmFtX2FkZHJfdCBpZHJlZ19vZmZzZXQ7DQoNCiAgICBp ZHJlZ19vZmZzZXQgPSBxZW11X3JhbV9hbGxvYyhOVUxMLCAic3VuNG0uaWRyZWciLCBzaXpl b2YoaWRyZWdfZGF0YSkpOw0KICAgIHN5c2J1c19pbml0X21taW8oZGV2LCBzaXplb2YoaWRy ZWdfZGF0YSksIGlkcmVnX29mZnNldCB8IElPX01FTV9ST00pOw0KICAgIHJldHVybiAwOw0K fQ0KDQpzdGF0aWMgU3lzQnVzRGV2aWNlSW5mbyBpZHJlZ19pbmZvID0gew0KICAgIC5pbml0 ID0gaWRyZWdfaW5pdDEsDQogICAgLnFkZXYubmFtZSAgPSAibWFjaW9faWRyZWciLA0KICAg IC5xZGV2LnNpemUgID0gc2l6ZW9mKFN5c0J1c0RldmljZSksDQp9Ow0KDQpzdGF0aWMgdm9p ZCBpZHJlZ19yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpDQp7DQogICAgc3lzYnVzX3JlZ2lzdGVy X3dpdGhwcm9wKCZpZHJlZ19pbmZvKTsNCn0NCg0KZGV2aWNlX2luaXQoaWRyZWdfcmVnaXN0 ZXJfZGV2aWNlcyk7DQoNCi8qIFNTLTUgVENYIEFGWCByZWdpc3RlciAqLw0Kc3RhdGljIHZv aWQgYWZ4X2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIpDQp7DQogICAgRGV2aWNlU3Rh dGUgKmRldjsNCiAgICBTeXNCdXNEZXZpY2UgKnM7DQoNCiAgICBkZXYgPSBxZGV2X2NyZWF0 ZShOVUxMLCAidGN4X2FmeCIpOw0KICAgIHFkZXZfaW5pdF9ub2ZhaWwoZGV2KTsNCiAgICBz ID0gc3lzYnVzX2Zyb21fcWRldihkZXYpOw0KDQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAs IGFkZHIpOw0KfQ0KDQpzdGF0aWMgaW50IGFmeF9pbml0MShTeXNCdXNEZXZpY2UgKmRldikN CnsNCiAgICByYW1fYWRkcl90IGFmeF9vZmZzZXQ7DQoNCiAgICBhZnhfb2Zmc2V0ID0gcWVt dV9yYW1fYWxsb2MoTlVMTCwgInN1bjRtLmFmeCIsIDQpOw0KICAgIHN5c2J1c19pbml0X21t aW8oZGV2LCA0LCBhZnhfb2Zmc2V0IHwgSU9fTUVNX1JBTSk7DQogICAgcmV0dXJuIDA7DQp9 DQoNCnN0YXRpYyBTeXNCdXNEZXZpY2VJbmZvIGFmeF9pbmZvID0gew0KICAgIC5pbml0ID0g YWZ4X2luaXQxLA0KICAgIC5xZGV2Lm5hbWUgID0gInRjeF9hZngiLA0KICAgIC5xZGV2LnNp emUgID0gc2l6ZW9mKFN5c0J1c0RldmljZSksDQp9Ow0KDQpzdGF0aWMgdm9pZCBhZnhfcmVn aXN0ZXJfZGV2aWNlcyh2b2lkKQ0Kew0KICAgIHN5c2J1c19yZWdpc3Rlcl93aXRocHJvcCgm YWZ4X2luZm8pOw0KfQ0KDQpkZXZpY2VfaW5pdChhZnhfcmVnaXN0ZXJfZGV2aWNlcyk7DQoN Ci8qIEJvb3QgUFJPTSAoT3BlbkJJT1MpICovDQpzdGF0aWMgdWludDY0X3QgdHJhbnNsYXRl X3Byb21fYWRkcmVzcyh2b2lkICpvcGFxdWUsIHVpbnQ2NF90IGFkZHIpDQp7DQogICAgdGFy Z2V0X3BoeXNfYWRkcl90ICpiYXNlX2FkZHIgPSAodGFyZ2V0X3BoeXNfYWRkcl90ICopb3Bh cXVlOw0KICAgIHJldHVybiBhZGRyICsgKmJhc2VfYWRkciAtIFBST01fVkFERFI7DQp9DQoN CnN0YXRpYyB2b2lkIHByb21faW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgY29uc3Qg Y2hhciAqYmlvc19uYW1lKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7DQogICAgU3lzQnVz RGV2aWNlICpzOw0KICAgIGNoYXIgKmZpbGVuYW1lOw0KICAgIGludCByZXQ7DQoNCiAgICBk ZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCAib3BlbnByb20iKTsNCiAgICBxZGV2X2luaXRfbm9m YWlsKGRldik7DQogICAgcyA9IHN5c2J1c19mcm9tX3FkZXYoZGV2KTsNCg0KICAgIHN5c2J1 c19tbWlvX21hcChzLCAwLCBhZGRyKTsNCg0KICAgIC8qIGxvYWQgYm9vdCBwcm9tICovDQog ICAgaWYgKGJpb3NfbmFtZSA9PSBOVUxMKSB7DQogICAgICAgIGJpb3NfbmFtZSA9IFBST01f RklMRU5BTUU7DQogICAgfQ0KICAgIGZpbGVuYW1lID0gcWVtdV9maW5kX2ZpbGUoUUVNVV9G SUxFX1RZUEVfQklPUywgYmlvc19uYW1lKTsNCiAgICBpZiAoZmlsZW5hbWUpIHsNCiAgICAg ICAgcmV0ID0gbG9hZF9lbGYoZmlsZW5hbWUsIHRyYW5zbGF0ZV9wcm9tX2FkZHJlc3MsICZh ZGRyLCBOVUxMLA0KICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMLCAxLCBFTEZf TUFDSElORSwgMCk7DQogICAgICAgIGlmIChyZXQgPCAwIHx8IHJldCA+IFBST01fU0laRV9N QVgpIHsNCiAgICAgICAgICAgIHJldCA9IGxvYWRfaW1hZ2VfdGFyZ3BoeXMoZmlsZW5hbWUs IGFkZHIsIFBST01fU0laRV9NQVgpOw0KICAgICAgICB9DQogICAgICAgIHFlbXVfZnJlZShm aWxlbmFtZSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0ID0gLTE7DQogICAgfQ0KICAg IGlmIChyZXQgPCAwIHx8IHJldCA+IFBST01fU0laRV9NQVgpIHsNCiAgICAgICAgZnByaW50 ZihzdGRlcnIsICJxZW11OiBjb3VsZCBub3QgbG9hZCBwcm9tICclcydcbiIsIGJpb3NfbmFt ZSk7DQogICAgICAgIGV4aXQoMSk7DQogICAgfQ0KfQ0KDQpzdGF0aWMgaW50IHByb21faW5p dDEoU3lzQnVzRGV2aWNlICpkZXYpDQp7DQogICAgcmFtX2FkZHJfdCBwcm9tX29mZnNldDsN Cg0KICAgIHByb21fb2Zmc2V0ID0gcWVtdV9yYW1fYWxsb2MoTlVMTCwgInN1bjRtLnByb20i LCBQUk9NX1NJWkVfTUFYKTsNCiAgICBzeXNidXNfaW5pdF9tbWlvKGRldiwgUFJPTV9TSVpF X01BWCwgcHJvbV9vZmZzZXQgfCBJT19NRU1fUk9NKTsNCiAgICByZXR1cm4gMDsNCn0NCg0K c3RhdGljIFN5c0J1c0RldmljZUluZm8gcHJvbV9pbmZvID0gew0KICAgIC5pbml0ID0gcHJv bV9pbml0MSwNCiAgICAucWRldi5uYW1lICA9ICJvcGVucHJvbSIsDQogICAgLnFkZXYuc2l6 ZSAgPSBzaXplb2YoU3lzQnVzRGV2aWNlKSwNCiAgICAucWRldi5wcm9wcyA9IChQcm9wZXJ0 eVtdKSB7DQogICAgICAgIHsvKiBlbmQgb2YgcHJvcGVydHkgbGlzdCAqL30NCiAgICB9DQp9 Ow0KDQpzdGF0aWMgdm9pZCBwcm9tX3JlZ2lzdGVyX2RldmljZXModm9pZCkNCnsNCiAgICBz eXNidXNfcmVnaXN0ZXJfd2l0aHByb3AoJnByb21faW5mbyk7DQp9DQoNCmRldmljZV9pbml0 KHByb21fcmVnaXN0ZXJfZGV2aWNlcyk7DQoNCnR5cGVkZWYgc3RydWN0IFJhbURldmljZQ0K ew0KICAgIFN5c0J1c0RldmljZSBidXNkZXY7DQogICAgdWludDY0X3Qgc2l6ZTsNCn0gUmFt RGV2aWNlOw0KDQovKiBTeXN0ZW0gUkFNICovDQpzdGF0aWMgaW50IHJhbV9pbml0MShTeXNC dXNEZXZpY2UgKmRldikNCnsNCiAgICByYW1fYWRkcl90IFJBTV9zaXplLCByYW1fb2Zmc2V0 Ow0KICAgIFJhbURldmljZSAqZCA9IEZST01fU1lTQlVTKFJhbURldmljZSwgZGV2KTsNCg0K ICAgIFJBTV9zaXplID0gZC0+c2l6ZTsNCg0KICAgIHJhbV9vZmZzZXQgPSBxZW11X3JhbV9h bGxvYyhOVUxMLCAic3VuNG0ucmFtIiwgUkFNX3NpemUpOw0KICAgIHN5c2J1c19pbml0X21t aW8oZGV2LCBSQU1fc2l6ZSwgcmFtX29mZnNldCk7DQogICAgcmV0dXJuIDA7DQp9DQoNCnN0 YXRpYyB2b2lkIHJhbV9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLCByYW1fYWRkcl90 IFJBTV9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgbWF4X21lbSkNCnsN CiAgICBEZXZpY2VTdGF0ZSAqZGV2Ow0KICAgIFN5c0J1c0RldmljZSAqczsNCiAgICBSYW1E ZXZpY2UgKmQ7DQoNCiAgICAvKiBhbGxvY2F0ZSBSQU0gKi8NCiAgICBpZiAoKHVpbnQ2NF90 KVJBTV9zaXplID4gbWF4X21lbSkgew0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwNCiAgICAg ICAgICAgICAgICAicWVtdTogVG9vIG11Y2ggbWVtb3J5IGZvciB0aGlzIG1hY2hpbmU6ICVk LCBtYXhpbXVtICVkXG4iLA0KICAgICAgICAgICAgICAgICh1bnNpZ25lZCBpbnQpKFJBTV9z aXplIC8gKDEwMjQgKiAxMDI0KSksDQogICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCko bWF4X21lbSAvICgxMDI0ICogMTAyNCkpKTsNCiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQog ICAgZGV2ID0gcWRldl9jcmVhdGUoTlVMTCwgIm1lbW9yeSIpOw0KICAgIHMgPSBzeXNidXNf ZnJvbV9xZGV2KGRldik7DQoNCiAgICBkID0gRlJPTV9TWVNCVVMoUmFtRGV2aWNlLCBzKTsN CiAgICBkLT5zaXplID0gUkFNX3NpemU7DQogICAgcWRldl9pbml0X25vZmFpbChkZXYpOw0K DQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGFkZHIpOw0KfQ0KDQpzdGF0aWMgU3lzQnVz RGV2aWNlSW5mbyByYW1faW5mbyA9IHsNCiAgICAuaW5pdCA9IHJhbV9pbml0MSwNCiAgICAu cWRldi5uYW1lICA9ICJtZW1vcnkiLA0KICAgIC5xZGV2LnNpemUgID0gc2l6ZW9mKFJhbURl dmljZSksDQogICAgLnFkZXYucHJvcHMgPSAoUHJvcGVydHlbXSkgew0KICAgICAgICBERUZJ TkVfUFJPUF9VSU5UNjQoInNpemUiLCBSYW1EZXZpY2UsIHNpemUsIDApLA0KICAgICAgICBE RUZJTkVfUFJPUF9FTkRfT0ZfTElTVCgpLA0KICAgIH0NCn07DQoNCnN0YXRpYyB2b2lkIHJh bV9yZWdpc3Rlcl9kZXZpY2VzKHZvaWQpDQp7DQogICAgc3lzYnVzX3JlZ2lzdGVyX3dpdGhw cm9wKCZyYW1faW5mbyk7DQp9DQoNCmRldmljZV9pbml0KHJhbV9yZWdpc3Rlcl9kZXZpY2Vz KTsNCg0Kc3RhdGljIHZvaWQgY3B1X2RldmluaXQoY29uc3QgY2hhciAqY3B1X21vZGVsLCB1 bnNpZ25lZCBpbnQgaWQsDQogICAgICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBwcm9t X2FkZHIsIHFlbXVfaXJxICoqY3B1X2lycXMpDQp7DQogICAgQ1BVU3RhdGUgKmVudjsNCg0K ICAgIGVudiA9IGNwdV9pbml0KGNwdV9tb2RlbCk7DQogICAgaWYgKCFlbnYpIHsNCiAgICAg ICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBVbmFibGUgdG8gZmluZCBTcGFyYyBDUFUgZGVm aW5pdGlvblxuIik7DQogICAgICAgIGV4aXQoMSk7DQogICAgfQ0KDQogICAgY3B1X3NwYXJj X3NldF9pZChlbnYsIGlkKTsNCiAgICBpZiAoaWQgPT0gMCkgew0KICAgICAgICBxZW11X3Jl Z2lzdGVyX3Jlc2V0KG1haW5fY3B1X3Jlc2V0LCBlbnYpOw0KICAgIH0gZWxzZSB7DQogICAg ICAgIHFlbXVfcmVnaXN0ZXJfcmVzZXQoc2Vjb25kYXJ5X2NwdV9yZXNldCwgZW52KTsNCiAg ICAgICAgZW52LT5oYWx0ZWQgPSAxOw0KICAgIH0NCiAgICAqY3B1X2lycXMgPSBxZW11X2Fs bG9jYXRlX2lycXMoY3B1X3NldF9pcnEsIGVudiwgTUFYX1BJTFMpOw0KICAgIGVudi0+cHJv bV9hZGRyID0gcHJvbV9hZGRyOw0KfQ0KDQpzdGF0aWMgdm9pZCBzdW40bV9od19pbml0KGNv bnN0IHN0cnVjdCBzdW40bV9od2RlZiAqaHdkZWYsIHJhbV9hZGRyX3QgUkFNX3NpemUsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJvb3RfZGV2aWNlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLA0K ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbml0cmRfZmlsZW5hbWUs IGNvbnN0IGNoYXIgKmNwdV9tb2RlbCkNCnsNCiAgICB1bnNpZ25lZCBpbnQgaTsNCiAgICB2 b2lkICppb21tdSwgKmVzcGRtYSwgKmxlZG1hLCAqbnZyYW07DQogICAgcWVtdV9pcnEgKmNw dV9pcnFzW01BWF9DUFVTXSwgc2xhdmlvX2lycVszMl0sIHNsYXZpb19jcHVfaXJxW01BWF9D UFVTXSwNCiAgICAgICAgZXNwZG1hX2lycSwgbGVkbWFfaXJxOw0KICAgIHFlbXVfaXJxIGVz cF9yZXNldCwgZG1hX2VuYWJsZTsNCiAgICBxZW11X2lycSBmZGNfdGM7DQogICAgcWVtdV9p cnEgKmNwdV9oYWx0Ow0KICAgIHVuc2lnbmVkIGxvbmcga2VybmVsX3NpemU7DQogICAgRHJp dmVJbmZvICpmZFtNQVhfRkRdOw0KICAgIHZvaWQgKmZ3X2NmZzsNCiAgICB1bnNpZ25lZCBp bnQgbnVtX3ZzaW1tczsNCg0KICAgIC8qIGluaXQgQ1BVcyAqLw0KICAgIGlmICghY3B1X21v ZGVsKQ0KICAgICAgICBjcHVfbW9kZWwgPSBod2RlZi0+ZGVmYXVsdF9jcHVfbW9kZWw7DQoN CiAgICBmb3IoaSA9IDA7IGkgPCBzbXBfY3B1czsgaSsrKSB7DQogICAgICAgIGNwdV9kZXZp bml0KGNwdV9tb2RlbCwgaSwgaHdkZWYtPnNsYXZpb19iYXNlLCAmY3B1X2lycXNbaV0pOw0K ICAgIH0NCg0KICAgIGZvciAoaSA9IHNtcF9jcHVzOyBpIDwgTUFYX0NQVVM7IGkrKykNCiAg ICAgICAgY3B1X2lycXNbaV0gPSBxZW11X2FsbG9jYXRlX2lycXMoZHVtbXlfY3B1X3NldF9p cnEsIE5VTEwsIE1BWF9QSUxTKTsNCg0KDQogICAgLyogc2V0IHVwIGRldmljZXMgKi8NCiAg ICByYW1faW5pdCgwLCBSQU1fc2l6ZSwgaHdkZWYtPm1heF9tZW0pOw0KICAgIC8qIG1vZGVs cyB3aXRob3V0IEVDQyBkb24ndCB0cmFwIHdoZW4gbWlzc2luZyByYW0gaXMgYWNjZXNzZWQg Ki8NCiAgICBpZiAoIWh3ZGVmLT5lY2NfYmFzZSkgew0KICAgICAgICBlbXB0eV9zbG90X2lu aXQoUkFNX3NpemUsIGh3ZGVmLT5tYXhfbWVtIC0gUkFNX3NpemUpOw0KICAgIH0NCg0KICAg IHByb21faW5pdChod2RlZi0+c2xhdmlvX2Jhc2UsIGJpb3NfbmFtZSk7DQoNCiAgICBzbGF2 aW9faW50Y3RsID0gc2xhdmlvX2ludGN0bF9pbml0KGh3ZGVmLT5pbnRjdGxfYmFzZSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3ZGVmLT5pbnRjdGxfYmFz ZSArIDB4MTAwMDBVTEwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjcHVfaXJxcyk7DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgew0KICAgICAg ICBzbGF2aW9faXJxW2ldID0gcWRldl9nZXRfZ3Bpb19pbihzbGF2aW9faW50Y3RsLCBpKTsN CiAgICB9DQogICAgZm9yIChpID0gMDsgaSA8IE1BWF9DUFVTOyBpKyspIHsNCiAgICAgICAg c2xhdmlvX2NwdV9pcnFbaV0gPSBxZGV2X2dldF9ncGlvX2luKHNsYXZpb19pbnRjdGwsIDMy ICsgaSk7DQogICAgfQ0KDQogICAgaWYgKGh3ZGVmLT5pZHJlZ19iYXNlKSB7DQogICAgICAg IGlkcmVnX2luaXQoaHdkZWYtPmlkcmVnX2Jhc2UpOw0KICAgIH0NCg0KICAgIGlmIChod2Rl Zi0+YWZ4X2Jhc2UpIHsNCiAgICAgICAgYWZ4X2luaXQoaHdkZWYtPmFmeF9iYXNlKTsNCiAg ICB9DQoNCiAgICBpb21tdSA9IGlvbW11X2luaXQoaHdkZWYtPmlvbW11X2Jhc2UsIGh3ZGVm LT5pb21tdV92ZXJzaW9uLA0KICAgICAgICAgICAgICAgICAgICAgICBzbGF2aW9faXJxWzMw XSk7DQoNCiAgICBpZiAoaHdkZWYtPmlvbW11X3BhZF9iYXNlKSB7DQogICAgICAgIC8qIE9u IHRoZSByZWFsIGhhcmR3YXJlIChTUy01LCBMWCkgdGhlIE1NVSBpcyBub3QgcGFkZGVkLCBi dXQgYWxpYXNlZC4NCiAgICAgICAgICAgU29mdHdhcmUgc2hvdWxkbid0IHVzZSBhbGlhc2Vk IGFkZHJlc3NlcywgbmVpdGhlciBzaG91bGQgaXQgY3Jhc2gNCiAgICAgICAgICAgd2hlbiBk b2VzLiBVc2luZyBlbXB0eV9zbG90IGluc3RlYWQgb2YgYWxpYXNpbmcgY2FuIGhlbHAgd2l0 aA0KICAgICAgICAgICBkZWJ1Z2dpbmcgc3VjaCBhY2Nlc3NlcyAqLw0KICAgICAgICBlbXB0 eV9zbG90X2luaXQoaHdkZWYtPmlvbW11X3BhZF9iYXNlLGh3ZGVmLT5pb21tdV9wYWRfbGVu KTsNCiAgICB9DQoNCiAgICBlc3BkbWEgPSBzcGFyYzMyX2RtYV9pbml0KGh3ZGVmLT5kbWFf YmFzZSwgc2xhdmlvX2lycVsxOF0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp b21tdSwgJmVzcGRtYV9pcnEsIDApOw0KDQogICAgbGVkbWEgPSBzcGFyYzMyX2RtYV9pbml0 KGh3ZGVmLT5kbWFfYmFzZSArIDE2VUxMLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzbGF2aW9faXJxWzE2XSwgaW9tbXUsICZsZWRtYV9pcnEsIDEpOw0KDQogICAgaWYgKGdy YXBoaWNfZGVwdGggIT0gOCAmJiBncmFwaGljX2RlcHRoICE9IDI0KSB7DQogICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogVW5zdXBwb3J0ZWQgZGVwdGg6ICVkXG4iLCBncmFwaGlj X2RlcHRoKTsNCiAgICAgICAgZXhpdCAoMSk7DQogICAgfQ0KICAgIG51bV92c2ltbXMgPSAw Ow0KICAgIGlmICgxKSB7DQogICAgICAgIERldmljZVN0YXRlICpkZXY7DQogICAgICAgIFN5 c0J1c0RldmljZSAqczsNCg0KICAgICAgICBkZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCAiU1VO VyxjZzMiKTsNCiAgICAgICAgcWRldl9pbml0X25vZmFpbChkZXYpOw0KICAgICAgICBzID0g c3lzYnVzX2Zyb21fcWRldihkZXYpOw0KICAgICAgICBzeXNidXNfbW1pb19tYXAocywgMCwg aHdkZWYtPnRjeF9iYXNlKTsNCiAgICAgICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDAsIHNs YXZpb19pcnFbMTFdKTsgLy8gc2J1cyBpcnE1DQogICAgfSBlbHNlDQogICAgaWYgKG51bV92 c2ltbXMgPT0gMCkgew0KICAgICAgICB0Y3hfaW5pdChod2RlZi0+dGN4X2Jhc2UsIDB4MDAx MDAwMDAsIGdyYXBoaWNfd2lkdGgsIGdyYXBoaWNfaGVpZ2h0LA0KICAgICAgICAgICAgICAg ICBncmFwaGljX2RlcHRoKTsNCiAgICB9DQoNCiAgICBmb3IgKGkgPSBudW1fdnNpbW1zOyBp IDwgTUFYX1ZTSU1NUzsgaSsrKSB7DQogICAgICAgIC8qIHZzaW1tIHJlZ2lzdGVycyBwcm9i ZWQgYnkgT0JQICovDQogICAgICAgIGlmIChod2RlZi0+dnNpbW1baV0ucmVnX2Jhc2UpIHsN CiAgICAgICAgICAgIGVtcHR5X3Nsb3RfaW5pdChod2RlZi0+dnNpbW1baV0ucmVnX2Jhc2Us IDB4MjAwMCk7DQogICAgICAgIH0NCiAgICB9DQoNCiAgICBpZiAoaHdkZWYtPnN4X2Jhc2Up IHsNCiAgICAgICAgZW1wdHlfc2xvdF9pbml0KGh3ZGVmLT5zeF9iYXNlLCAweDIwMDApOw0K ICAgIH0NCg0KICAgIGxhbmNlX2luaXQoJm5kX3RhYmxlWzBdLCBod2RlZi0+bGVfYmFzZSwg bGVkbWEsIGxlZG1hX2lycSk7DQoNCiAgICBudnJhbSA9IG00OHQ1OV9pbml0KHNsYXZpb19p cnFbMF0sIGh3ZGVmLT5udnJhbV9iYXNlLCAwLCAweDIwMDAsIDgpOw0KDQogICAgc2xhdmlv X3RpbWVyX2luaXRfYWxsKGh3ZGVmLT5jb3VudGVyX2Jhc2UsIHNsYXZpb19pcnFbMTldLCBz bGF2aW9fY3B1X2lycSwgc21wX2NwdXMpOw0KDQogICAgc2xhdmlvX3NlcmlhbF9tc19rYmRf aW5pdChod2RlZi0+bXNfa2JfYmFzZSwgc2xhdmlvX2lycVsxNF0sDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkaXNwbGF5X3R5cGUgPT0gRFRfTk9HUkFQSElDLCBFU0NDX0NM T0NLLCAxKTsNCiAgICAvLyBTbGF2aW8gVFRZQSAoYmFzZSs0LCBMaW51eCB0dHlTMCkgaXMg dGhlIGZpcnN0IFFlbXUgc2VyaWFsIGRldmljZQ0KICAgIC8vIFNsYXZpbyBUVFlCIChiYXNl KzAsIExpbnV4IHR0eVMxKSBpcyB0aGUgc2Vjb25kIFFlbXUgc2VyaWFsIGRldmljZQ0KICAg IGVzY2NfaW5pdChod2RlZi0+c2VyaWFsX2Jhc2UsIHNsYXZpb19pcnFbMTVdLCBzbGF2aW9f aXJxWzE1XSwNCiAgICAgICAgICAgICAgc2VyaWFsX2hkc1swXSwgc2VyaWFsX2hkc1sxXSwg RVNDQ19DTE9DSywgMSk7DQoNCiAgICBjcHVfaGFsdCA9IHFlbXVfYWxsb2NhdGVfaXJxcyhj cHVfaGFsdF9zaWduYWwsIE5VTEwsIDEpOw0KICAgIHNsYXZpb19taXNjX2luaXQoaHdkZWYt PnNsYXZpb19iYXNlLCBod2RlZi0+YXV4MV9iYXNlLCBod2RlZi0+YXV4Ml9iYXNlLA0KICAg ICAgICAgICAgICAgICAgICAgc2xhdmlvX2lycVszMF0sIGZkY190Yyk7DQoNCiAgICBpZiAo aHdkZWYtPmFwY19iYXNlKSB7DQogICAgICAgIGFwY19pbml0KGh3ZGVmLT5hcGNfYmFzZSwg Y3B1X2hhbHRbMF0pOw0KICAgIH0NCg0KICAgIGlmIChod2RlZi0+ZmRfYmFzZSkgew0KICAg ICAgICAvKiB0aGVyZSBpcyB6ZXJvIG9yIG9uZSBmbG9wcHkgZHJpdmUgKi8NCiAgICAgICAg bWVtc2V0KGZkLCAwLCBzaXplb2YoZmQpKTsNCiAgICAgICAgZmRbMF0gPSBkcml2ZV9nZXQo SUZfRkxPUFBZLCAwLCAwKTsNCiAgICAgICAgc3VuNG1fZmRjdHJsX2luaXQoc2xhdmlvX2ly cVsyMl0sIGh3ZGVmLT5mZF9iYXNlLCBmZCwNCiAgICAgICAgICAgICAgICAgICAgICAgICAg JmZkY190Yyk7DQogICAgfQ0KDQogICAgaWYgKGRyaXZlX2dldF9tYXhfYnVzKElGX1NDU0kp ID4gMCkgew0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHRvbyBtYW55IFNDU0kg YnVzXG4iKTsNCiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoNCiAgICBlc3BfaW5pdChod2Rl Zi0+ZXNwX2Jhc2UsIDIsDQogICAgICAgICAgICAgZXNwZG1hX21lbW9yeV9yZWFkLCBlc3Bk bWFfbWVtb3J5X3dyaXRlLA0KICAgICAgICAgICAgIGVzcGRtYSwgZXNwZG1hX2lycSwgJmVz cF9yZXNldCwgJmRtYV9lbmFibGUpOw0KDQogICAgcWRldl9jb25uZWN0X2dwaW9fb3V0KGVz cGRtYSwgMCwgZXNwX3Jlc2V0KTsNCiAgICBxZGV2X2Nvbm5lY3RfZ3Bpb19vdXQoZXNwZG1h LCAxLCBkbWFfZW5hYmxlKTsNCg0KICAgIGlmIChod2RlZi0+Y3NfYmFzZSkgew0KICAgICAg ICBzeXNidXNfY3JlYXRlX3NpbXBsZSgiU1VOVyxDUzQyMzEiLCBod2RlZi0+Y3NfYmFzZSwN CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2xhdmlvX2lycVs1XSk7DQogICAgfQ0K DQogICAgaWYgKGh3ZGVmLT5kYnJpX2Jhc2UpIHsNCiAgICAgICAgLyogSVNETiBjaGlwIHdp dGggYXR0YWNoZWQgQ1M0MjE1IGF1ZGlvIGNvZGVjICovDQogICAgICAgIGRicmlfaW5pdCho d2RlZi0+ZGJyaV9iYXNlLCBzbGF2aW9faXJxWzExXSwgaW9tbXUpOw0KICAgIH0NCg0KICAg IGlmIChod2RlZi0+YnBwX2Jhc2UpIHsNCiAgICAgICAgLyogcGFyYWxsZWwgcG9ydCAqLw0K ICAgICAgICBlbXB0eV9zbG90X2luaXQoaHdkZWYtPmJwcF9iYXNlLCAweDIwKTsNCiAgICB9 DQoNCiAgICBrZXJuZWxfc2l6ZSA9IHN1bjRtX2xvYWRfa2VybmVsKGtlcm5lbF9maWxlbmFt ZSwgaW5pdHJkX2ZpbGVuYW1lLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgUkFNX3NpemUpOw0KDQogICAgbnZyYW1faW5pdChudnJhbSwgKHVpbnQ4X3QgKikmbmRf dGFibGVbMF0ubWFjYWRkciwga2VybmVsX2NtZGxpbmUsDQogICAgICAgICAgICAgICBib290 X2RldmljZSwgUkFNX3NpemUsIGtlcm5lbF9zaXplLCBncmFwaGljX3dpZHRoLA0KICAgICAg ICAgICAgICAgZ3JhcGhpY19oZWlnaHQsIGdyYXBoaWNfZGVwdGgsIGh3ZGVmLT5udnJhbV9t YWNoaW5lX2lkLA0KICAgICAgICAgICAgICAgIlN1bjRtIik7DQoNCiAgICBpZiAoaHdkZWYt PmVjY19iYXNlKQ0KICAgICAgICBlY2NfaW5pdChod2RlZi0+ZWNjX2Jhc2UsIHNsYXZpb19p cnFbMjhdLA0KICAgICAgICAgICAgICAgICBod2RlZi0+ZWNjX3ZlcnNpb24pOw0KDQogICAg ZndfY2ZnID0gZndfY2ZnX2luaXQoMCwgMCwgQ0ZHX0FERFIsIENGR19BRERSICsgMik7DQog ICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19DRkdfSUQsIDEpOw0KICAgIGZ3X2NmZ19h ZGRfaTY0KGZ3X2NmZywgRldfQ0ZHX1JBTV9TSVpFLCAodWludDY0X3QpcmFtX3NpemUpOw0K ICAgIGZ3X2NmZ19hZGRfaTE2KGZ3X2NmZywgRldfQ0ZHX01BQ0hJTkVfSUQsIGh3ZGVmLT5t YWNoaW5lX2lkKTsNCiAgICBmd19jZmdfYWRkX2kxNihmd19jZmcsIEZXX0NGR19TVU40TV9E RVBUSCwgZ3JhcGhpY19kZXB0aCk7DQogICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19D RkdfS0VSTkVMX0FERFIsIEtFUk5FTF9MT0FEX0FERFIpOw0KICAgIGZ3X2NmZ19hZGRfaTMy KGZ3X2NmZywgRldfQ0ZHX0tFUk5FTF9TSVpFLCBrZXJuZWxfc2l6ZSk7DQogICAgaWYgKGtl cm5lbF9jbWRsaW5lKSB7DQogICAgICAgIGZ3X2NmZ19hZGRfaTMyKGZ3X2NmZywgRldfQ0ZH X0tFUk5FTF9DTURMSU5FLCBDTURMSU5FX0FERFIpOw0KICAgICAgICBwc3RyY3B5X3Rhcmdw aHlzKCJjbWRsaW5lIiwgQ01ETElORV9BRERSLCBUQVJHRVRfUEFHRV9TSVpFLCBrZXJuZWxf Y21kbGluZSk7DQogICAgICAgIGZ3X2NmZ19hZGRfYnl0ZXMoZndfY2ZnLCBGV19DRkdfQ01E TElORV9EQVRBLA0KICAgICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KilzdHJkdXAo a2VybmVsX2NtZGxpbmUpLA0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihrZXJu ZWxfY21kbGluZSkgKyAxKTsNCiAgICAgICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19D RkdfQ01ETElORV9TSVpFLA0KICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oa2VybmVs X2NtZGxpbmUpICsgMSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZndfY2ZnX2FkZF9pMzIo ZndfY2ZnLCBGV19DRkdfS0VSTkVMX0NNRExJTkUsIDApOw0KICAgICAgICBmd19jZmdfYWRk X2kzMihmd19jZmcsIEZXX0NGR19DTURMSU5FX1NJWkUsIDApOw0KICAgIH0NCiAgICBmd19j ZmdfYWRkX2kzMihmd19jZmcsIEZXX0NGR19JTklUUkRfQUREUiwgSU5JVFJEX0xPQURfQURE Uik7DQogICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19DRkdfSU5JVFJEX1NJWkUsIDAp OyAvLyBub3QgdXNlZA0KICAgIGZ3X2NmZ19hZGRfaTE2KGZ3X2NmZywgRldfQ0ZHX0JPT1Rf REVWSUNFLCBib290X2RldmljZVswXSk7DQogICAgcWVtdV9yZWdpc3Rlcl9ib290X3NldChm d19jZmdfYm9vdF9zZXQsIGZ3X2NmZyk7DQp9DQoNCmVudW0gew0KICAgIHNzMl9pZCA9IDAs DQogICAgc3M1X2lkID0gMzIsDQogICAgdmdlcl9pZCwNCiAgICBseF9pZCwNCiAgICBzczRf aWQsDQogICAgc2Nsc19pZCwNCiAgICBzYm9va19pZCwNCiAgICBzczEwX2lkID0gNjQsDQog ICAgc3MyMF9pZCwNCiAgICBzczYwMG1wX2lkLA0KICAgIHNzMTAwMF9pZCA9IDk2LA0KICAg IHNzMjAwMF9pZCwNCn07DQoNCnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VuNG1faHdkZWYgc3Vu NG1faHdkZWZzW10gPSB7DQogICAgLyogU1MtNSAqLw0KICAgIHsNCiAgICAgICAgLmlvbW11 X2Jhc2UgICA9IDB4MTAwMDAwMDAsDQogICAgICAgIC5pb21tdV9wYWRfYmFzZSA9IDB4MTAw MDQwMDAsDQogICAgICAgIC5pb21tdV9wYWRfbGVuICA9IDB4MGZmZmIwMDAsDQogICAgICAg IC50Y3hfYmFzZSAgICAgPSAweDUwMDAwMDAwLA0KICAgICAgICAuY3NfYmFzZSAgICAgID0g MHg2YzAwMDAwMCwNCiAgICAgICAgLnNsYXZpb19iYXNlICA9IDB4NzAwMDAwMDAsDQogICAg ICAgIC5tc19rYl9iYXNlICAgPSAweDcxMDAwMDAwLA0KICAgICAgICAuc2VyaWFsX2Jhc2Ug ID0gMHg3MTEwMDAwMCwNCiAgICAgICAgLm52cmFtX2Jhc2UgICA9IDB4NzEyMDAwMDAsDQog ICAgICAgIC5mZF9iYXNlICAgICAgPSAweDcxNDAwMDAwLA0KICAgICAgICAuY291bnRlcl9i YXNlID0gMHg3MWQwMDAwMCwNCiAgICAgICAgLmludGN0bF9iYXNlICA9IDB4NzFlMDAwMDAs DQogICAgICAgIC5pZHJlZ19iYXNlICAgPSAweDc4MDAwMDAwLA0KICAgICAgICAuZG1hX2Jh c2UgICAgID0gMHg3ODQwMDAwMCwNCiAgICAgICAgLmVzcF9iYXNlICAgICA9IDB4Nzg4MDAw MDAsDQogICAgICAgIC5sZV9iYXNlICAgICAgPSAweDc4YzAwMDAwLA0KICAgICAgICAuYXBj X2Jhc2UgICAgID0gMHg2YTAwMDAwMCwNCiAgICAgICAgLmFmeF9iYXNlICAgICA9IDB4NmUw MDAwMDAsDQogICAgICAgIC5hdXgxX2Jhc2UgICAgPSAweDcxOTAwMDAwLA0KICAgICAgICAu YXV4Ml9iYXNlICAgID0gMHg3MTkxMDAwMCwNCiAgICAgICAgLm52cmFtX21hY2hpbmVfaWQg PSAweDgwLA0KICAgICAgICAubWFjaGluZV9pZCA9IHNzNV9pZCwNCiAgICAgICAgLmlvbW11 X3ZlcnNpb24gPSAweDA1MDAwMDAwLA0KICAgICAgICAubWF4X21lbSA9IDB4MTAwMDAwMDAs DQogICAgICAgIC5kZWZhdWx0X2NwdV9tb2RlbCA9ICJGdWppdHN1IE1CODY5MDQiLA0KICAg IH0sDQogICAgLyogU1MtMTAgKi8NCiAgICB7DQogICAgICAgIC5pb21tdV9iYXNlICAgPSAw eGZlMDAwMDAwMFVMTCwNCiAgICAgICAgLnRjeF9iYXNlICAgICA9IDB4ZTIwMDAwMDAwVUxM LA0KICAgICAgICAuc2xhdmlvX2Jhc2UgID0gMHhmZjAwMDAwMDBVTEwsDQogICAgICAgIC5t c19rYl9iYXNlICAgPSAweGZmMTAwMDAwMFVMTCwNCiAgICAgICAgLnNlcmlhbF9iYXNlICA9 IDB4ZmYxMTAwMDAwVUxMLA0KICAgICAgICAubnZyYW1fYmFzZSAgID0gMHhmZjEyMDAwMDBV TEwsDQogICAgICAgIC5mZF9iYXNlICAgICAgPSAweGZmMTcwMDAwMFVMTCwNCiAgICAgICAg LmNvdW50ZXJfYmFzZSA9IDB4ZmYxMzAwMDAwVUxMLA0KICAgICAgICAuaW50Y3RsX2Jhc2Ug ID0gMHhmZjE0MDAwMDBVTEwsDQogICAgICAgIC5pZHJlZ19iYXNlICAgPSAweGVmMDAwMDAw MFVMTCwNCiAgICAgICAgLmRtYV9iYXNlICAgICA9IDB4ZWYwNDAwMDAwVUxMLA0KICAgICAg ICAuZXNwX2Jhc2UgICAgID0gMHhlZjA4MDAwMDBVTEwsDQogICAgICAgIC5sZV9iYXNlICAg ICAgPSAweGVmMGMwMDAwMFVMTCwNCiAgICAgICAgLmFwY19iYXNlICAgICA9IDB4ZWZhMDAw MDAwVUxMLCAvLyBYWFggc2hvdWxkIG5vdCBleGlzdA0KICAgICAgICAuYXV4MV9iYXNlICAg ID0gMHhmZjE4MDAwMDBVTEwsDQogICAgICAgIC5hdXgyX2Jhc2UgICAgPSAweGZmMWEwMTAw MFVMTCwNCiAgICAgICAgLmVjY19iYXNlICAgICA9IDB4ZjAwMDAwMDAwVUxMLA0KICAgICAg ICAuZWNjX3ZlcnNpb24gID0gMHgxMDAwMDAwMCwgLy8gdmVyc2lvbiAwLCBpbXBsZW1lbnRh dGlvbiAxDQogICAgICAgIC5udnJhbV9tYWNoaW5lX2lkID0gMHg3MiwNCiAgICAgICAgLm1h Y2hpbmVfaWQgPSBzczEwX2lkLA0KICAgICAgICAuaW9tbXVfdmVyc2lvbiA9IDB4MDMwMDAw MDAsDQogICAgICAgIC5tYXhfbWVtID0gMHhmMDAwMDAwMDBVTEwsDQogICAgICAgIC5kZWZh dWx0X2NwdV9tb2RlbCA9ICJUSSBTdXBlclNwYXJjIElJIiwNCiAgICB9LA0KICAgIC8qIFNT LTYwME1QICovDQogICAgew0KICAgICAgICAuaW9tbXVfYmFzZSAgID0gMHhmZTAwMDAwMDBV TEwsDQogICAgICAgIC50Y3hfYmFzZSAgICAgPSAweGUyMDAwMDAwMFVMTCwNCiAgICAgICAg LnNsYXZpb19iYXNlICA9IDB4ZmYwMDAwMDAwVUxMLA0KICAgICAgICAubXNfa2JfYmFzZSAg ID0gMHhmZjEwMDAwMDBVTEwsDQogICAgICAgIC5zZXJpYWxfYmFzZSAgPSAweGZmMTEwMDAw MFVMTCwNCiAgICAgICAgLm52cmFtX2Jhc2UgICA9IDB4ZmYxMjAwMDAwVUxMLA0KICAgICAg ICAuY291bnRlcl9iYXNlID0gMHhmZjEzMDAwMDBVTEwsDQogICAgICAgIC5pbnRjdGxfYmFz ZSAgPSAweGZmMTQwMDAwMFVMTCwNCiAgICAgICAgLmRtYV9iYXNlICAgICA9IDB4ZWYwMDgx MDAwVUxMLA0KICAgICAgICAuZXNwX2Jhc2UgICAgID0gMHhlZjAwODAwMDBVTEwsDQogICAg ICAgIC5sZV9iYXNlICAgICAgPSAweGVmMDA2MDAwMFVMTCwNCiAgICAgICAgLmFwY19iYXNl ICAgICA9IDB4ZWZhMDAwMDAwVUxMLCAvLyBYWFggc2hvdWxkIG5vdCBleGlzdA0KICAgICAg ICAuYXV4MV9iYXNlICAgID0gMHhmZjE4MDAwMDBVTEwsDQogICAgICAgIC5hdXgyX2Jhc2Ug ICAgPSAweGZmMWEwMTAwMFVMTCwgLy8gWFhYIHNob3VsZCBub3QgZXhpc3QNCiAgICAgICAg LmVjY19iYXNlICAgICA9IDB4ZjAwMDAwMDAwVUxMLA0KICAgICAgICAuZWNjX3ZlcnNpb24g ID0gMHgwMDAwMDAwMCwgLy8gdmVyc2lvbiAwLCBpbXBsZW1lbnRhdGlvbiAwDQogICAgICAg IC5udnJhbV9tYWNoaW5lX2lkID0gMHg3MSwNCiAgICAgICAgLm1hY2hpbmVfaWQgPSBzczYw MG1wX2lkLA0KICAgICAgICAuaW9tbXVfdmVyc2lvbiA9IDB4MDEwMDAwMDAsDQogICAgICAg IC5tYXhfbWVtID0gMHhmMDAwMDAwMDBVTEwsDQogICAgICAgIC5kZWZhdWx0X2NwdV9tb2Rl bCA9ICJUSSBTdXBlclNwYXJjIElJIiwNCiAgICB9LA0KICAgIC8qIFNTLTIwICovDQogICAg ew0KICAgICAgICAuaW9tbXVfYmFzZSAgID0gMHhmZTAwMDAwMDBVTEwsDQogICAgICAgIC50 Y3hfYmFzZSAgICAgPSAweGUyMDAwMDAwMFVMTCwNCiAgICAgICAgLnNsYXZpb19iYXNlICA9 IDB4ZmYwMDAwMDAwVUxMLA0KICAgICAgICAubXNfa2JfYmFzZSAgID0gMHhmZjEwMDAwMDBV TEwsDQogICAgICAgIC5zZXJpYWxfYmFzZSAgPSAweGZmMTEwMDAwMFVMTCwNCiAgICAgICAg Lm52cmFtX2Jhc2UgICA9IDB4ZmYxMjAwMDAwVUxMLA0KICAgICAgICAuZmRfYmFzZSAgICAg ID0gMHhmZjE3MDAwMDBVTEwsDQogICAgICAgIC5jb3VudGVyX2Jhc2UgPSAweGZmMTMwMDAw MFVMTCwNCiAgICAgICAgLmludGN0bF9iYXNlICA9IDB4ZmYxNDAwMDAwVUxMLA0KICAgICAg ICAuaWRyZWdfYmFzZSAgID0gMHhlZjAwMDAwMDBVTEwsDQogICAgICAgIC5kbWFfYmFzZSAg ICAgPSAweGVmMDQwMDAwMFVMTCwNCiAgICAgICAgLmVzcF9iYXNlICAgICA9IDB4ZWYwODAw MDAwVUxMLA0KICAgICAgICAubGVfYmFzZSAgICAgID0gMHhlZjBjMDAwMDBVTEwsDQogICAg ICAgIC5icHBfYmFzZSAgICAgPSAweGVmNDgwMDAwMFVMTCwNCiAgICAgICAgLmFwY19iYXNl ICAgICA9IDB4ZWZhMDAwMDAwVUxMLCAvLyBYWFggc2hvdWxkIG5vdCBleGlzdA0KICAgICAg ICAuYXV4MV9iYXNlICAgID0gMHhmZjE4MDAwMDBVTEwsDQogICAgICAgIC5hdXgyX2Jhc2Ug ICAgPSAweGZmMWEwMTAwMFVMTCwNCiAgICAgICAgLmRicmlfYmFzZSAgICA9IDB4ZWUwMDAw MDAwVUxMLA0KICAgICAgICAuc3hfYmFzZSAgICAgID0gMHhmODAwMDAwMDBVTEwsDQogICAg ICAgIC52c2ltbSAgICAgICAgPSB7DQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAg LnJlZ19iYXNlICA9IDB4OWMwMDAwMDBVTEwsDQogICAgICAgICAgICAgICAgLnZyYW1fYmFz ZSA9IDB4ZmMwMDAwMDBVTEwNCiAgICAgICAgICAgIH0sIHsNCiAgICAgICAgICAgICAgICAu cmVnX2Jhc2UgID0gMHg5MDAwMDAwMFVMTCwNCiAgICAgICAgICAgICAgICAudnJhbV9iYXNl ID0gMHhmMDAwMDAwMFVMTA0KICAgICAgICAgICAgfSwgew0KICAgICAgICAgICAgICAgIC5y ZWdfYmFzZSAgPSAweDk0MDAwMDAwVUxMDQogICAgICAgICAgICB9LCB7DQogICAgICAgICAg ICAgICAgLnJlZ19iYXNlICA9IDB4OTgwMDAwMDBVTEwNCiAgICAgICAgICAgIH0NCiAgICAg ICAgfSwNCiAgICAgICAgLmVjY19iYXNlICAgICA9IDB4ZjAwMDAwMDAwVUxMLA0KICAgICAg ICAuZWNjX3ZlcnNpb24gID0gMHgyMDAwMDAwMCwgLy8gdmVyc2lvbiAwLCBpbXBsZW1lbnRh dGlvbiAyDQogICAgICAgIC5udnJhbV9tYWNoaW5lX2lkID0gMHg3MiwNCiAgICAgICAgLm1h Y2hpbmVfaWQgPSBzczIwX2lkLA0KICAgICAgICAuaW9tbXVfdmVyc2lvbiA9IDB4MTMwMDAw MDAsDQogICAgICAgIC5tYXhfbWVtID0gMHhmMDAwMDAwMDBVTEwsDQogICAgICAgIC5kZWZh dWx0X2NwdV9tb2RlbCA9ICJUSSBTdXBlclNwYXJjIElJIiwNCiAgICB9LA0KICAgIC8qIFZv eWFnZXIgKi8NCiAgICB7DQogICAgICAgIC5pb21tdV9iYXNlICAgPSAweDEwMDAwMDAwLA0K ICAgICAgICAudGN4X2Jhc2UgICAgID0gMHg1MDAwMDAwMCwNCiAgICAgICAgLnNsYXZpb19i YXNlICA9IDB4NzAwMDAwMDAsDQogICAgICAgIC5tc19rYl9iYXNlICAgPSAweDcxMDAwMDAw LA0KICAgICAgICAuc2VyaWFsX2Jhc2UgID0gMHg3MTEwMDAwMCwNCiAgICAgICAgLm52cmFt X2Jhc2UgICA9IDB4NzEyMDAwMDAsDQogICAgICAgIC5mZF9iYXNlICAgICAgPSAweDcxNDAw MDAwLA0KICAgICAgICAuY291bnRlcl9iYXNlID0gMHg3MWQwMDAwMCwNCiAgICAgICAgLmlu dGN0bF9iYXNlICA9IDB4NzFlMDAwMDAsDQogICAgICAgIC5pZHJlZ19iYXNlICAgPSAweDc4 MDAwMDAwLA0KICAgICAgICAuZG1hX2Jhc2UgICAgID0gMHg3ODQwMDAwMCwNCiAgICAgICAg LmVzcF9iYXNlICAgICA9IDB4Nzg4MDAwMDAsDQogICAgICAgIC5sZV9iYXNlICAgICAgPSAw eDc4YzAwMDAwLA0KICAgICAgICAuYXBjX2Jhc2UgICAgID0gMHg3MTMwMDAwMCwgLy8gcG1j DQogICAgICAgIC5hdXgxX2Jhc2UgICAgPSAweDcxOTAwMDAwLA0KICAgICAgICAuYXV4Ml9i YXNlICAgID0gMHg3MTkxMDAwMCwNCiAgICAgICAgLm52cmFtX21hY2hpbmVfaWQgPSAweDgw LA0KICAgICAgICAubWFjaGluZV9pZCA9IHZnZXJfaWQsDQogICAgICAgIC5pb21tdV92ZXJz aW9uID0gMHgwNTAwMDAwMCwNCiAgICAgICAgLm1heF9tZW0gPSAweDEwMDAwMDAwLA0KICAg ICAgICAuZGVmYXVsdF9jcHVfbW9kZWwgPSAiRnVqaXRzdSBNQjg2OTA0IiwNCiAgICB9LA0K ICAgIC8qIExYICovDQogICAgew0KICAgICAgICAuaW9tbXVfYmFzZSAgID0gMHgxMDAwMDAw MCwNCiAgICAgICAgLmlvbW11X3BhZF9iYXNlID0gMHgxMDAwNDAwMCwNCiAgICAgICAgLmlv bW11X3BhZF9sZW4gID0gMHgwZmZmYjAwMCwNCiAgICAgICAgLnRjeF9iYXNlICAgICA9IDB4 NTAwMDAwMDAsDQogICAgICAgIC5zbGF2aW9fYmFzZSAgPSAweDcwMDAwMDAwLA0KICAgICAg ICAubXNfa2JfYmFzZSAgID0gMHg3MTAwMDAwMCwNCiAgICAgICAgLnNlcmlhbF9iYXNlICA9 IDB4NzExMDAwMDAsDQogICAgICAgIC5udnJhbV9iYXNlICAgPSAweDcxMjAwMDAwLA0KICAg ICAgICAuZmRfYmFzZSAgICAgID0gMHg3MTQwMDAwMCwNCiAgICAgICAgLmNvdW50ZXJfYmFz ZSA9IDB4NzFkMDAwMDAsDQogICAgICAgIC5pbnRjdGxfYmFzZSAgPSAweDcxZTAwMDAwLA0K ICAgICAgICAuaWRyZWdfYmFzZSAgID0gMHg3ODAwMDAwMCwNCiAgICAgICAgLmRtYV9iYXNl ICAgICA9IDB4Nzg0MDAwMDAsDQogICAgICAgIC5lc3BfYmFzZSAgICAgPSAweDc4ODAwMDAw LA0KICAgICAgICAubGVfYmFzZSAgICAgID0gMHg3OGMwMDAwMCwNCiAgICAgICAgLmF1eDFf YmFzZSAgICA9IDB4NzE5MDAwMDAsDQogICAgICAgIC5hdXgyX2Jhc2UgICAgPSAweDcxOTEw MDAwLA0KICAgICAgICAubnZyYW1fbWFjaGluZV9pZCA9IDB4ODAsDQogICAgICAgIC5tYWNo aW5lX2lkID0gbHhfaWQsDQogICAgICAgIC5pb21tdV92ZXJzaW9uID0gMHgwNDAwMDAwMCwN CiAgICAgICAgLm1heF9tZW0gPSAweDEwMDAwMDAwLA0KICAgICAgICAuZGVmYXVsdF9jcHVf bW9kZWwgPSAiVEkgTWljcm9TcGFyYyBJIiwNCiAgICB9LA0KICAgIC8qIFNTLTQgKi8NCiAg ICB7DQogICAgICAgIC5pb21tdV9iYXNlICAgPSAweDEwMDAwMDAwLA0KICAgICAgICAudGN4 X2Jhc2UgICAgID0gMHg1MDAwMDAwMCwNCiAgICAgICAgLmNzX2Jhc2UgICAgICA9IDB4NmMw MDAwMDAsDQogICAgICAgIC5zbGF2aW9fYmFzZSAgPSAweDcwMDAwMDAwLA0KICAgICAgICAu bXNfa2JfYmFzZSAgID0gMHg3MTAwMDAwMCwNCiAgICAgICAgLnNlcmlhbF9iYXNlICA9IDB4 NzExMDAwMDAsDQogICAgICAgIC5udnJhbV9iYXNlICAgPSAweDcxMjAwMDAwLA0KICAgICAg ICAuZmRfYmFzZSAgICAgID0gMHg3MTQwMDAwMCwNCiAgICAgICAgLmNvdW50ZXJfYmFzZSA9 IDB4NzFkMDAwMDAsDQogICAgICAgIC5pbnRjdGxfYmFzZSAgPSAweDcxZTAwMDAwLA0KICAg ICAgICAuaWRyZWdfYmFzZSAgID0gMHg3ODAwMDAwMCwNCiAgICAgICAgLmRtYV9iYXNlICAg ICA9IDB4Nzg0MDAwMDAsDQogICAgICAgIC5lc3BfYmFzZSAgICAgPSAweDc4ODAwMDAwLA0K ICAgICAgICAubGVfYmFzZSAgICAgID0gMHg3OGMwMDAwMCwNCiAgICAgICAgLmFwY19iYXNl ICAgICA9IDB4NmEwMDAwMDAsDQogICAgICAgIC5hdXgxX2Jhc2UgICAgPSAweDcxOTAwMDAw LA0KICAgICAgICAuYXV4Ml9iYXNlICAgID0gMHg3MTkxMDAwMCwNCiAgICAgICAgLm52cmFt X21hY2hpbmVfaWQgPSAweDgwLA0KICAgICAgICAubWFjaGluZV9pZCA9IHNzNF9pZCwNCiAg ICAgICAgLmlvbW11X3ZlcnNpb24gPSAweDA1MDAwMDAwLA0KICAgICAgICAubWF4X21lbSA9 IDB4MTAwMDAwMDAsDQogICAgICAgIC5kZWZhdWx0X2NwdV9tb2RlbCA9ICJGdWppdHN1IE1C ODY5MDQiLA0KICAgIH0sDQogICAgLyogU1BBUkNDbGFzc2ljICovDQogICAgew0KICAgICAg ICAuaW9tbXVfYmFzZSAgID0gMHgxMDAwMDAwMCwNCiAgICAgICAgLnRjeF9iYXNlICAgICA9 IDB4NTAwMDAwMDAsDQogICAgICAgIC5zbGF2aW9fYmFzZSAgPSAweDcwMDAwMDAwLA0KICAg ICAgICAubXNfa2JfYmFzZSAgID0gMHg3MTAwMDAwMCwNCiAgICAgICAgLnNlcmlhbF9iYXNl ICA9IDB4NzExMDAwMDAsDQogICAgICAgIC5udnJhbV9iYXNlICAgPSAweDcxMjAwMDAwLA0K ICAgICAgICAuZmRfYmFzZSAgICAgID0gMHg3MTQwMDAwMCwNCiAgICAgICAgLmNvdW50ZXJf YmFzZSA9IDB4NzFkMDAwMDAsDQogICAgICAgIC5pbnRjdGxfYmFzZSAgPSAweDcxZTAwMDAw LA0KICAgICAgICAuaWRyZWdfYmFzZSAgID0gMHg3ODAwMDAwMCwNCiAgICAgICAgLmRtYV9i YXNlICAgICA9IDB4Nzg0MDAwMDAsDQogICAgICAgIC5lc3BfYmFzZSAgICAgPSAweDc4ODAw MDAwLA0KICAgICAgICAubGVfYmFzZSAgICAgID0gMHg3OGMwMDAwMCwNCiAgICAgICAgLmFw Y19iYXNlICAgICA9IDB4NmEwMDAwMDAsDQogICAgICAgIC5hdXgxX2Jhc2UgICAgPSAweDcx OTAwMDAwLA0KICAgICAgICAuYXV4Ml9iYXNlICAgID0gMHg3MTkxMDAwMCwNCiAgICAgICAg Lm52cmFtX21hY2hpbmVfaWQgPSAweDgwLA0KICAgICAgICAubWFjaGluZV9pZCA9IHNjbHNf aWQsDQogICAgICAgIC5pb21tdV92ZXJzaW9uID0gMHgwNTAwMDAwMCwNCiAgICAgICAgLm1h eF9tZW0gPSAweDEwMDAwMDAwLA0KICAgICAgICAuZGVmYXVsdF9jcHVfbW9kZWwgPSAiVEkg TWljcm9TcGFyYyBJIiwNCiAgICB9LA0KICAgIC8qIFNQQVJDYm9vayAqLw0KICAgIHsNCiAg ICAgICAgLmlvbW11X2Jhc2UgICA9IDB4MTAwMDAwMDAsDQogICAgICAgIC50Y3hfYmFzZSAg ICAgPSAweDUwMDAwMDAwLCAvLyBYWFgNCiAgICAgICAgLnNsYXZpb19iYXNlICA9IDB4NzAw MDAwMDAsDQogICAgICAgIC5tc19rYl9iYXNlICAgPSAweDcxMDAwMDAwLA0KICAgICAgICAu c2VyaWFsX2Jhc2UgID0gMHg3MTEwMDAwMCwNCiAgICAgICAgLm52cmFtX2Jhc2UgICA9IDB4 NzEyMDAwMDAsDQogICAgICAgIC5mZF9iYXNlICAgICAgPSAweDcxNDAwMDAwLA0KICAgICAg ICAuY291bnRlcl9iYXNlID0gMHg3MWQwMDAwMCwNCiAgICAgICAgLmludGN0bF9iYXNlICA9 IDB4NzFlMDAwMDAsDQogICAgICAgIC5pZHJlZ19iYXNlICAgPSAweDc4MDAwMDAwLA0KICAg ICAgICAuZG1hX2Jhc2UgICAgID0gMHg3ODQwMDAwMCwNCiAgICAgICAgLmVzcF9iYXNlICAg ICA9IDB4Nzg4MDAwMDAsDQogICAgICAgIC5sZV9iYXNlICAgICAgPSAweDc4YzAwMDAwLA0K ICAgICAgICAuYXBjX2Jhc2UgICAgID0gMHg2YTAwMDAwMCwNCiAgICAgICAgLmF1eDFfYmFz ZSAgICA9IDB4NzE5MDAwMDAsDQogICAgICAgIC5hdXgyX2Jhc2UgICAgPSAweDcxOTEwMDAw LA0KICAgICAgICAubnZyYW1fbWFjaGluZV9pZCA9IDB4ODAsDQogICAgICAgIC5tYWNoaW5l X2lkID0gc2Jvb2tfaWQsDQogICAgICAgIC5pb21tdV92ZXJzaW9uID0gMHgwNTAwMDAwMCwN CiAgICAgICAgLm1heF9tZW0gPSAweDEwMDAwMDAwLA0KICAgICAgICAuZGVmYXVsdF9jcHVf bW9kZWwgPSAiVEkgTWljcm9TcGFyYyBJIiwNCiAgICB9LA0KfTsNCg0KLyogU1BBUkNzdGF0 aW9uIDUgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gKi8NCnN0YXRpYyB2b2lkIHNzNV9pbml0 KHJhbV9hZGRyX3QgUkFNX3NpemUsDQogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFy ICpib290X2RldmljZSwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5l bF9maWxlbmFtZSwgY29uc3QgY2hhciAqa2VybmVsX2NtZGxpbmUsDQogICAgICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyICppbml0cmRfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmNwdV9t b2RlbCkNCnsNCiAgICBzdW40bV9od19pbml0KCZzdW40bV9od2RlZnNbMF0sIFJBTV9zaXpl LCBib290X2RldmljZSwga2VybmVsX2ZpbGVuYW1lLA0KICAgICAgICAgICAgICAgICAga2Vy bmVsX2NtZGxpbmUsIGluaXRyZF9maWxlbmFtZSwgY3B1X21vZGVsKTsNCn0NCg0KLyogU1BB UkNzdGF0aW9uIDEwIGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uICovDQpzdGF0aWMgdm9pZCBz czEwX2luaXQocmFtX2FkZHJfdCBSQU1fc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICBj b25zdCBjaGFyICpib290X2RldmljZSwNCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyICprZXJuZWxfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLA0KICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZSwgY29uc3Qg Y2hhciAqY3B1X21vZGVsKQ0Kew0KICAgIHN1bjRtX2h3X2luaXQoJnN1bjRtX2h3ZGVmc1sx XSwgUkFNX3NpemUsIGJvb3RfZGV2aWNlLCBrZXJuZWxfZmlsZW5hbWUsDQogICAgICAgICAg ICAgICAgICBrZXJuZWxfY21kbGluZSwgaW5pdHJkX2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0K fQ0KDQovKiBTUEFSQ3NlcnZlciA2MDBNUCBoYXJkd2FyZSBpbml0aWFsaXNhdGlvbiAqLw0K c3RhdGljIHZvaWQgc3M2MDBtcF9pbml0KHJhbV9hZGRyX3QgUkFNX3NpemUsDQogICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYm9vdF9kZXZpY2UsDQogICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLA0KICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLA0KICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZSwgY29uc3QgY2hh ciAqY3B1X21vZGVsKQ0Kew0KICAgIHN1bjRtX2h3X2luaXQoJnN1bjRtX2h3ZGVmc1syXSwg UkFNX3NpemUsIGJvb3RfZGV2aWNlLCBrZXJuZWxfZmlsZW5hbWUsDQogICAgICAgICAgICAg ICAgICBrZXJuZWxfY21kbGluZSwgaW5pdHJkX2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0KfQ0K DQovKiBTUEFSQ3N0YXRpb24gMjAgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gKi8NCnN0YXRp YyB2b2lkIHNzMjBfaW5pdChyYW1fYWRkcl90IFJBTV9zaXplLA0KICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIgKmJvb3RfZGV2aWNlLA0KICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKmtlcm5lbF9maWxlbmFtZSwgY29uc3QgY2hhciAqa2VybmVsX2NtZGxp bmUsDQogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1l LCBjb25zdCBjaGFyICpjcHVfbW9kZWwpDQp7DQogICAgc3VuNG1faHdfaW5pdCgmc3VuNG1f aHdkZWZzWzNdLCBSQU1fc2l6ZSwgYm9vdF9kZXZpY2UsIGtlcm5lbF9maWxlbmFtZSwNCiAg ICAgICAgICAgICAgICAgIGtlcm5lbF9jbWRsaW5lLCBpbml0cmRfZmlsZW5hbWUsIGNwdV9t b2RlbCk7DQp9DQoNCi8qIFNQQVJDc3RhdGlvbiBWb3lhZ2VyIGhhcmR3YXJlIGluaXRpYWxp c2F0aW9uICovDQpzdGF0aWMgdm9pZCB2Z2VyX2luaXQocmFtX2FkZHJfdCBSQU1fc2l6ZSwN CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpib290X2RldmljZSwNCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsIGNvbnN0IGNo YXIgKmtlcm5lbF9jbWRsaW5lLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KmluaXRyZF9maWxlbmFtZSwgY29uc3QgY2hhciAqY3B1X21vZGVsKQ0Kew0KICAgIHN1bjRt X2h3X2luaXQoJnN1bjRtX2h3ZGVmc1s0XSwgUkFNX3NpemUsIGJvb3RfZGV2aWNlLCBrZXJu ZWxfZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICBrZXJuZWxfY21kbGluZSwgaW5pdHJk X2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0KfQ0KDQovKiBTUEFSQ3N0YXRpb24gTFggaGFyZHdh cmUgaW5pdGlhbGlzYXRpb24gKi8NCnN0YXRpYyB2b2lkIHNzX2x4X2luaXQocmFtX2FkZHJf dCBSQU1fc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYm9vdF9k ZXZpY2UsDQogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9maWxl bmFtZSwgY29uc3QgY2hhciAqa2VybmVsX2NtZGxpbmUsDQogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZSwgY29uc3QgY2hhciAqY3B1X21vZGVs KQ0Kew0KICAgIHN1bjRtX2h3X2luaXQoJnN1bjRtX2h3ZGVmc1s1XSwgUkFNX3NpemUsIGJv b3RfZGV2aWNlLCBrZXJuZWxfZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICBrZXJuZWxf Y21kbGluZSwgaW5pdHJkX2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0KfQ0KDQovKiBTUEFSQ3N0 YXRpb24gNCBoYXJkd2FyZSBpbml0aWFsaXNhdGlvbiAqLw0Kc3RhdGljIHZvaWQgc3M0X2lu aXQocmFtX2FkZHJfdCBSQU1fc2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmJvb3RfZGV2aWNlLA0KICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2Vy bmVsX2ZpbGVuYW1lLCBjb25zdCBjaGFyICprZXJuZWxfY21kbGluZSwNCiAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9maWxlbmFtZSwgY29uc3QgY2hhciAqY3B1 X21vZGVsKQ0Kew0KICAgIHN1bjRtX2h3X2luaXQoJnN1bjRtX2h3ZGVmc1s2XSwgUkFNX3Np emUsIGJvb3RfZGV2aWNlLCBrZXJuZWxfZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICBr ZXJuZWxfY21kbGluZSwgaW5pdHJkX2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0KfQ0KDQovKiBT UEFSQ0NsYXNzaWMgaGFyZHdhcmUgaW5pdGlhbGlzYXRpb24gKi8NCnN0YXRpYyB2b2lkIHNj bHNfaW5pdChyYW1fYWRkcl90IFJBTV9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIgKmJvb3RfZGV2aWNlLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXIgKmtlcm5lbF9maWxlbmFtZSwgY29uc3QgY2hhciAqa2VybmVsX2NtZGxpbmUsDQogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1lLCBjb25zdCBj aGFyICpjcHVfbW9kZWwpDQp7DQogICAgc3VuNG1faHdfaW5pdCgmc3VuNG1faHdkZWZzWzdd LCBSQU1fc2l6ZSwgYm9vdF9kZXZpY2UsIGtlcm5lbF9maWxlbmFtZSwNCiAgICAgICAgICAg ICAgICAgIGtlcm5lbF9jbWRsaW5lLCBpbml0cmRfZmlsZW5hbWUsIGNwdV9tb2RlbCk7DQp9 DQoNCi8qIFNQQVJDYm9vayBoYXJkd2FyZSBpbml0aWFsaXNhdGlvbiAqLw0Kc3RhdGljIHZv aWQgc2Jvb2tfaW5pdChyYW1fYWRkcl90IFJBTV9zaXplLA0KICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpib290X2RldmljZSwNCiAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLCBjb25zdCBjaGFyICprZXJuZWxfY21kbGlu ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1l LCBjb25zdCBjaGFyICpjcHVfbW9kZWwpDQp7DQogICAgc3VuNG1faHdfaW5pdCgmc3VuNG1f aHdkZWZzWzhdLCBSQU1fc2l6ZSwgYm9vdF9kZXZpY2UsIGtlcm5lbF9maWxlbmFtZSwNCiAg ICAgICAgICAgICAgICAgIGtlcm5lbF9jbWRsaW5lLCBpbml0cmRfZmlsZW5hbWUsIGNwdV9t b2RlbCk7DQp9DQoNCnN0YXRpYyBRRU1VTWFjaGluZSBzczVfbWFjaGluZSA9IHsNCiAgICAu bmFtZSA9ICJTUy01IiwNCiAgICAuZGVzYyA9ICJTdW40bSBwbGF0Zm9ybSwgU1BBUkNzdGF0 aW9uIDUiLA0KICAgIC5pbml0ID0gc3M1X2luaXQsDQogICAgLnVzZV9zY3NpID0gMSwNCiAg ICAuaXNfZGVmYXVsdCA9IDEsDQp9Ow0KDQpzdGF0aWMgUUVNVU1hY2hpbmUgc3MxMF9tYWNo aW5lID0gew0KICAgIC5uYW1lID0gIlNTLTEwIiwNCiAgICAuZGVzYyA9ICJTdW40bSBwbGF0 Zm9ybSwgU1BBUkNzdGF0aW9uIDEwIiwNCiAgICAuaW5pdCA9IHNzMTBfaW5pdCwNCiAgICAu dXNlX3Njc2kgPSAxLA0KICAgIC5tYXhfY3B1cyA9IDQsDQp9Ow0KDQpzdGF0aWMgUUVNVU1h Y2hpbmUgc3M2MDBtcF9tYWNoaW5lID0gew0KICAgIC5uYW1lID0gIlNTLTYwME1QIiwNCiAg ICAuZGVzYyA9ICJTdW40bSBwbGF0Zm9ybSwgU1BBUkNzZXJ2ZXIgNjAwTVAiLA0KICAgIC5p bml0ID0gc3M2MDBtcF9pbml0LA0KICAgIC51c2Vfc2NzaSA9IDEsDQogICAgLm1heF9jcHVz ID0gNCwNCn07DQoNCnN0YXRpYyBRRU1VTWFjaGluZSBzczIwX21hY2hpbmUgPSB7DQogICAg Lm5hbWUgPSAiU1MtMjAiLA0KICAgIC5kZXNjID0gIlN1bjRtIHBsYXRmb3JtLCBTUEFSQ3N0 YXRpb24gMjAiLA0KICAgIC5pbml0ID0gc3MyMF9pbml0LA0KICAgIC51c2Vfc2NzaSA9IDEs DQogICAgLm1heF9jcHVzID0gNCwNCn07DQoNCnN0YXRpYyBRRU1VTWFjaGluZSB2b3lhZ2Vy X21hY2hpbmUgPSB7DQogICAgLm5hbWUgPSAiVm95YWdlciIsDQogICAgLmRlc2MgPSAiU3Vu NG0gcGxhdGZvcm0sIFNQQVJDc3RhdGlvbiBWb3lhZ2VyIiwNCiAgICAuaW5pdCA9IHZnZXJf aW5pdCwNCiAgICAudXNlX3Njc2kgPSAxLA0KfTsNCg0Kc3RhdGljIFFFTVVNYWNoaW5lIHNz X2x4X21hY2hpbmUgPSB7DQogICAgLm5hbWUgPSAiTFgiLA0KICAgIC5kZXNjID0gIlN1bjRt IHBsYXRmb3JtLCBTUEFSQ3N0YXRpb24gTFgiLA0KICAgIC5pbml0ID0gc3NfbHhfaW5pdCwN CiAgICAudXNlX3Njc2kgPSAxLA0KfTsNCg0Kc3RhdGljIFFFTVVNYWNoaW5lIHNzNF9tYWNo aW5lID0gew0KICAgIC5uYW1lID0gIlNTLTQiLA0KICAgIC5kZXNjID0gIlN1bjRtIHBsYXRm b3JtLCBTUEFSQ3N0YXRpb24gNCIsDQogICAgLmluaXQgPSBzczRfaW5pdCwNCiAgICAudXNl X3Njc2kgPSAxLA0KfTsNCg0Kc3RhdGljIFFFTVVNYWNoaW5lIHNjbHNfbWFjaGluZSA9IHsN CiAgICAubmFtZSA9ICJTUEFSQ0NsYXNzaWMiLA0KICAgIC5kZXNjID0gIlN1bjRtIHBsYXRm b3JtLCBTUEFSQ0NsYXNzaWMiLA0KICAgIC5pbml0ID0gc2Nsc19pbml0LA0KICAgIC51c2Vf c2NzaSA9IDEsDQp9Ow0KDQpzdGF0aWMgUUVNVU1hY2hpbmUgc2Jvb2tfbWFjaGluZSA9IHsN CiAgICAubmFtZSA9ICJTUEFSQ2Jvb2siLA0KICAgIC5kZXNjID0gIlN1bjRtIHBsYXRmb3Jt LCBTUEFSQ2Jvb2siLA0KICAgIC5pbml0ID0gc2Jvb2tfaW5pdCwNCiAgICAudXNlX3Njc2kg PSAxLA0KfTsNCg0Kc3RhdGljIGNvbnN0IHN0cnVjdCBzdW40ZF9od2RlZiBzdW40ZF9od2Rl ZnNbXSA9IHsNCiAgICAvKiBTUy0xMDAwICovDQogICAgew0KICAgICAgICAuaW91bml0X2Jh c2VzICAgPSB7DQogICAgICAgICAgICAweGZlMDIwMDAwMFVMTCwNCiAgICAgICAgICAgIDB4 ZmUxMjAwMDAwVUxMLA0KICAgICAgICAgICAgMHhmZTIyMDAwMDBVTEwsDQogICAgICAgICAg ICAweGZlMzIwMDAwMFVMTCwNCiAgICAgICAgICAgIC0xLA0KICAgICAgICB9LA0KICAgICAg ICAudGN4X2Jhc2UgICAgID0gMHg4MjAwMDAwMDBVTEwsDQogICAgICAgIC5zbGF2aW9fYmFz ZSAgPSAweGYwMDAwMDAwMFVMTCwNCiAgICAgICAgLm1zX2tiX2Jhc2UgICA9IDB4ZjAwMjQw MDAwVUxMLA0KICAgICAgICAuc2VyaWFsX2Jhc2UgID0gMHhmMDAyMDAwMDBVTEwsDQogICAg ICAgIC5udnJhbV9iYXNlICAgPSAweGYwMDI4MDAwMFVMTCwNCiAgICAgICAgLmNvdW50ZXJf YmFzZSA9IDB4ZjAwMzAwMDAwVUxMLA0KICAgICAgICAuZXNwZG1hX2Jhc2UgID0gMHg4MDAw ODEwMDBVTEwsDQogICAgICAgIC5lc3BfYmFzZSAgICAgPSAweDgwMDA4MDAwMFVMTCwNCiAg ICAgICAgLmxlZG1hX2Jhc2UgICA9IDB4ODAwMDQwMDAwVUxMLA0KICAgICAgICAubGVfYmFz ZSAgICAgID0gMHg4MDAwNjAwMDBVTEwsDQogICAgICAgIC5zYmlfYmFzZSAgICAgPSAweGYw MjgwMDAwMFVMTCwNCiAgICAgICAgLm52cmFtX21hY2hpbmVfaWQgPSAweDgwLA0KICAgICAg ICAubWFjaGluZV9pZCA9IHNzMTAwMF9pZCwNCiAgICAgICAgLmlvdW5pdF92ZXJzaW9uID0g MHgwMzAwMDAwMCwNCiAgICAgICAgLm1heF9tZW0gPSAweGYwMDAwMDAwMFVMTCwNCiAgICAg ICAgLmRlZmF1bHRfY3B1X21vZGVsID0gIlRJIFN1cGVyU3BhcmMgSUkiLA0KICAgIH0sDQog ICAgLyogU1MtMjAwMCAqLw0KICAgIHsNCiAgICAgICAgLmlvdW5pdF9iYXNlcyAgID0gew0K ICAgICAgICAgICAgMHhmZTAyMDAwMDBVTEwsDQogICAgICAgICAgICAweGZlMTIwMDAwMFVM TCwNCiAgICAgICAgICAgIDB4ZmUyMjAwMDAwVUxMLA0KICAgICAgICAgICAgMHhmZTMyMDAw MDBVTEwsDQogICAgICAgICAgICAweGZlNDIwMDAwMFVMTCwNCiAgICAgICAgfSwNCiAgICAg ICAgLnRjeF9iYXNlICAgICA9IDB4ODIwMDAwMDAwVUxMLA0KICAgICAgICAuc2xhdmlvX2Jh c2UgID0gMHhmMDAwMDAwMDBVTEwsDQogICAgICAgIC5tc19rYl9iYXNlICAgPSAweGYwMDI0 MDAwMFVMTCwNCiAgICAgICAgLnNlcmlhbF9iYXNlICA9IDB4ZjAwMjAwMDAwVUxMLA0KICAg ICAgICAubnZyYW1fYmFzZSAgID0gMHhmMDAyODAwMDBVTEwsDQogICAgICAgIC5jb3VudGVy X2Jhc2UgPSAweGYwMDMwMDAwMFVMTCwNCiAgICAgICAgLmVzcGRtYV9iYXNlICA9IDB4ODAw MDgxMDAwVUxMLA0KICAgICAgICAuZXNwX2Jhc2UgICAgID0gMHg4MDAwODAwMDBVTEwsDQog ICAgICAgIC5sZWRtYV9iYXNlICAgPSAweDgwMDA0MDAwMFVMTCwNCiAgICAgICAgLmxlX2Jh c2UgICAgICA9IDB4ODAwMDYwMDAwVUxMLA0KICAgICAgICAuc2JpX2Jhc2UgICAgID0gMHhm MDI4MDAwMDBVTEwsDQogICAgICAgIC5udnJhbV9tYWNoaW5lX2lkID0gMHg4MCwNCiAgICAg ICAgLm1hY2hpbmVfaWQgPSBzczIwMDBfaWQsDQogICAgICAgIC5pb3VuaXRfdmVyc2lvbiA9 IDB4MDMwMDAwMDAsDQogICAgICAgIC5tYXhfbWVtID0gMHhmMDAwMDAwMDBVTEwsDQogICAg ICAgIC5kZWZhdWx0X2NwdV9tb2RlbCA9ICJUSSBTdXBlclNwYXJjIElJIiwNCiAgICB9LA0K fTsNCg0Kc3RhdGljIERldmljZVN0YXRlICpzYmlfaW5pdCh0YXJnZXRfcGh5c19hZGRyX3Qg YWRkciwgcWVtdV9pcnEgKipwYXJlbnRfaXJxKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7 DQogICAgU3lzQnVzRGV2aWNlICpzOw0KICAgIHVuc2lnbmVkIGludCBpOw0KDQogICAgZGV2 ID0gcWRldl9jcmVhdGUoTlVMTCwgInNiaSIpOw0KICAgIHFkZXZfaW5pdF9ub2ZhaWwoZGV2 KTsNCg0KICAgIHMgPSBzeXNidXNfZnJvbV9xZGV2KGRldik7DQoNCiAgICBmb3IgKGkgPSAw OyBpIDwgTUFYX0NQVVM7IGkrKykgew0KICAgICAgICBzeXNidXNfY29ubmVjdF9pcnEocywg aSwgKnBhcmVudF9pcnFbaV0pOw0KICAgIH0NCg0KICAgIHN5c2J1c19tbWlvX21hcChzLCAw LCBhZGRyKTsNCg0KICAgIHJldHVybiBkZXY7DQp9DQoNCnN0YXRpYyB2b2lkIHN1bjRkX2h3 X2luaXQoY29uc3Qgc3RydWN0IHN1bjRkX2h3ZGVmICpod2RlZiwgcmFtX2FkZHJfdCBSQU1f c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYm9vdF9kZXZp Y2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9maWxl bmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2Nt ZGxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9m aWxlbmFtZSwgY29uc3QgY2hhciAqY3B1X21vZGVsKQ0Kew0KICAgIHVuc2lnbmVkIGludCBp Ow0KICAgIHZvaWQgKmlvdW5pdHNbTUFYX0lPVU5JVFNdLCAqZXNwZG1hLCAqbGVkbWEsICpu dnJhbTsNCiAgICBxZW11X2lycSAqY3B1X2lycXNbTUFYX0NQVVNdLCBzYmlfaXJxWzMyXSwg c2JpX2NwdV9pcnFbTUFYX0NQVVNdLA0KICAgICAgICBlc3BkbWFfaXJxLCBsZWRtYV9pcnE7 DQogICAgcWVtdV9pcnEgZXNwX3Jlc2V0LCBkbWFfZW5hYmxlOw0KICAgIHVuc2lnbmVkIGxv bmcga2VybmVsX3NpemU7DQogICAgdm9pZCAqZndfY2ZnOw0KICAgIERldmljZVN0YXRlICpk ZXY7DQoNCiAgICAvKiBpbml0IENQVXMgKi8NCiAgICBpZiAoIWNwdV9tb2RlbCkNCiAgICAg ICAgY3B1X21vZGVsID0gaHdkZWYtPmRlZmF1bHRfY3B1X21vZGVsOw0KDQogICAgZm9yKGkg PSAwOyBpIDwgc21wX2NwdXM7IGkrKykgew0KICAgICAgICBjcHVfZGV2aW5pdChjcHVfbW9k ZWwsIGksIGh3ZGVmLT5zbGF2aW9fYmFzZSwgJmNwdV9pcnFzW2ldKTsNCiAgICB9DQoNCiAg ICBmb3IgKGkgPSBzbXBfY3B1czsgaSA8IE1BWF9DUFVTOyBpKyspDQogICAgICAgIGNwdV9p cnFzW2ldID0gcWVtdV9hbGxvY2F0ZV9pcnFzKGR1bW15X2NwdV9zZXRfaXJxLCBOVUxMLCBN QVhfUElMUyk7DQoNCiAgICAvKiBzZXQgdXAgZGV2aWNlcyAqLw0KICAgIHJhbV9pbml0KDAs IFJBTV9zaXplLCBod2RlZi0+bWF4X21lbSk7DQoNCiAgICBwcm9tX2luaXQoaHdkZWYtPnNs YXZpb19iYXNlLCBiaW9zX25hbWUpOw0KDQogICAgZGV2ID0gc2JpX2luaXQoaHdkZWYtPnNi aV9iYXNlLCBjcHVfaXJxcyk7DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgew0K ICAgICAgICBzYmlfaXJxW2ldID0gcWRldl9nZXRfZ3Bpb19pbihkZXYsIGkpOw0KICAgIH0N CiAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0NQVVM7IGkrKykgew0KICAgICAgICBzYmlfY3B1 X2lycVtpXSA9IHFkZXZfZ2V0X2dwaW9faW4oZGV2LCAzMiArIGkpOw0KICAgIH0NCg0KICAg IGZvciAoaSA9IDA7IGkgPCBNQVhfSU9VTklUUzsgaSsrKQ0KICAgICAgICBpZiAoaHdkZWYt PmlvdW5pdF9iYXNlc1tpXSAhPSAodGFyZ2V0X3BoeXNfYWRkcl90KS0xKQ0KICAgICAgICAg ICAgaW91bml0c1tpXSA9IGlvbW11X2luaXQoaHdkZWYtPmlvdW5pdF9iYXNlc1tpXSwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh3ZGVmLT5pb3VuaXRfdmVyc2lv biwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNiaV9pcnFbMF0pOw0K DQogICAgZXNwZG1hID0gc3BhcmMzMl9kbWFfaW5pdChod2RlZi0+ZXNwZG1hX2Jhc2UsIHNi aV9pcnFbM10sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3VuaXRzWzBdLCAm ZXNwZG1hX2lycSwgMCk7DQoNCiAgICAvKiBzaG91bGQgYmUgbGVidWZmZXIgaW5zdGVhZCAq Lw0KICAgIGxlZG1hID0gc3BhcmMzMl9kbWFfaW5pdChod2RlZi0+bGVkbWFfYmFzZSwgc2Jp X2lycVs0XSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW91bml0c1swXSwgJmxl ZG1hX2lycSwgMCk7DQoNCiAgICBpZiAoZ3JhcGhpY19kZXB0aCAhPSA4ICYmIGdyYXBoaWNf ZGVwdGggIT0gMjQpIHsNCiAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBVbnN1cHBv cnRlZCBkZXB0aDogJWRcbiIsIGdyYXBoaWNfZGVwdGgpOw0KICAgICAgICBleGl0ICgxKTsN CiAgICB9DQogICAgdGN4X2luaXQoaHdkZWYtPnRjeF9iYXNlLCAweDAwMTAwMDAwLCBncmFw aGljX3dpZHRoLCBncmFwaGljX2hlaWdodCwNCiAgICAgICAgICAgICBncmFwaGljX2RlcHRo KTsNCg0KICAgIGxhbmNlX2luaXQoJm5kX3RhYmxlWzBdLCBod2RlZi0+bGVfYmFzZSwgbGVk bWEsIGxlZG1hX2lycSk7DQoNCiAgICBudnJhbSA9IG00OHQ1OV9pbml0KHNiaV9pcnFbMF0s IGh3ZGVmLT5udnJhbV9iYXNlLCAwLCAweDIwMDAsIDgpOw0KDQogICAgc2xhdmlvX3RpbWVy X2luaXRfYWxsKGh3ZGVmLT5jb3VudGVyX2Jhc2UsIHNiaV9pcnFbMTBdLCBzYmlfY3B1X2ly cSwgc21wX2NwdXMpOw0KDQogICAgc2xhdmlvX3NlcmlhbF9tc19rYmRfaW5pdChod2RlZi0+ bXNfa2JfYmFzZSwgc2JpX2lycVsxMl0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkaXNwbGF5X3R5cGUgPT0gRFRfTk9HUkFQSElDLCBFU0NDX0NMT0NLLCAxKTsNCiAgICAv LyBTbGF2aW8gVFRZQSAoYmFzZSs0LCBMaW51eCB0dHlTMCkgaXMgdGhlIGZpcnN0IFFlbXUg c2VyaWFsIGRldmljZQ0KICAgIC8vIFNsYXZpbyBUVFlCIChiYXNlKzAsIExpbnV4IHR0eVMx KSBpcyB0aGUgc2Vjb25kIFFlbXUgc2VyaWFsIGRldmljZQ0KICAgIGVzY2NfaW5pdChod2Rl Zi0+c2VyaWFsX2Jhc2UsIHNiaV9pcnFbMTJdLCBzYmlfaXJxWzEyXSwNCiAgICAgICAgICAg ICAgc2VyaWFsX2hkc1swXSwgc2VyaWFsX2hkc1sxXSwgRVNDQ19DTE9DSywgMSk7DQoNCiAg ICBpZiAoZHJpdmVfZ2V0X21heF9idXMoSUZfU0NTSSkgPiAwKSB7DQogICAgICAgIGZwcmlu dGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgU0NTSSBidXNcbiIpOw0KICAgICAgICBleGl0 KDEpOw0KICAgIH0NCg0KICAgIGVzcF9pbml0KGh3ZGVmLT5lc3BfYmFzZSwgMiwNCiAgICAg ICAgICAgICBlc3BkbWFfbWVtb3J5X3JlYWQsIGVzcGRtYV9tZW1vcnlfd3JpdGUsDQogICAg ICAgICAgICAgZXNwZG1hLCBlc3BkbWFfaXJxLCAmZXNwX3Jlc2V0LCAmZG1hX2VuYWJsZSk7 DQoNCiAgICBxZGV2X2Nvbm5lY3RfZ3Bpb19vdXQoZXNwZG1hLCAwLCBlc3BfcmVzZXQpOw0K ICAgIHFkZXZfY29ubmVjdF9ncGlvX291dChlc3BkbWEsIDEsIGRtYV9lbmFibGUpOw0KDQog ICAga2VybmVsX3NpemUgPSBzdW40bV9sb2FkX2tlcm5lbChrZXJuZWxfZmlsZW5hbWUsIGlu aXRyZF9maWxlbmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJB TV9zaXplKTsNCg0KICAgIG52cmFtX2luaXQobnZyYW0sICh1aW50OF90ICopJm5kX3RhYmxl WzBdLm1hY2FkZHIsIGtlcm5lbF9jbWRsaW5lLA0KICAgICAgICAgICAgICAgYm9vdF9kZXZp Y2UsIFJBTV9zaXplLCBrZXJuZWxfc2l6ZSwgZ3JhcGhpY193aWR0aCwNCiAgICAgICAgICAg ICAgIGdyYXBoaWNfaGVpZ2h0LCBncmFwaGljX2RlcHRoLCBod2RlZi0+bnZyYW1fbWFjaGlu ZV9pZCwNCiAgICAgICAgICAgICAgICJTdW40ZCIpOw0KDQogICAgZndfY2ZnID0gZndfY2Zn X2luaXQoMCwgMCwgQ0ZHX0FERFIsIENGR19BRERSICsgMik7DQogICAgZndfY2ZnX2FkZF9p MzIoZndfY2ZnLCBGV19DRkdfSUQsIDEpOw0KICAgIGZ3X2NmZ19hZGRfaTY0KGZ3X2NmZywg RldfQ0ZHX1JBTV9TSVpFLCAodWludDY0X3QpcmFtX3NpemUpOw0KICAgIGZ3X2NmZ19hZGRf aTE2KGZ3X2NmZywgRldfQ0ZHX01BQ0hJTkVfSUQsIGh3ZGVmLT5tYWNoaW5lX2lkKTsNCiAg ICBmd19jZmdfYWRkX2kxNihmd19jZmcsIEZXX0NGR19TVU40TV9ERVBUSCwgZ3JhcGhpY19k ZXB0aCk7DQogICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19DRkdfS0VSTkVMX0FERFIs IEtFUk5FTF9MT0FEX0FERFIpOw0KICAgIGZ3X2NmZ19hZGRfaTMyKGZ3X2NmZywgRldfQ0ZH X0tFUk5FTF9TSVpFLCBrZXJuZWxfc2l6ZSk7DQogICAgaWYgKGtlcm5lbF9jbWRsaW5lKSB7 DQogICAgICAgIGZ3X2NmZ19hZGRfaTMyKGZ3X2NmZywgRldfQ0ZHX0tFUk5FTF9DTURMSU5F LCBDTURMSU5FX0FERFIpOw0KICAgICAgICBwc3RyY3B5X3RhcmdwaHlzKCJjbWRsaW5lIiwg Q01ETElORV9BRERSLCBUQVJHRVRfUEFHRV9TSVpFLCBrZXJuZWxfY21kbGluZSk7DQogICAg ICAgIGZ3X2NmZ19hZGRfYnl0ZXMoZndfY2ZnLCBGV19DRkdfQ01ETElORV9EQVRBLA0KICAg ICAgICAgICAgICAgICAgICAgICAgICh1aW50OF90KilzdHJkdXAoa2VybmVsX2NtZGxpbmUp LA0KICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihrZXJuZWxfY21kbGluZSkgKyAx KTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBmd19jZmdfYWRkX2kzMihmd19jZmcsIEZXX0NG R19LRVJORUxfQ01ETElORSwgMCk7DQogICAgfQ0KICAgIGZ3X2NmZ19hZGRfaTMyKGZ3X2Nm ZywgRldfQ0ZHX0lOSVRSRF9BRERSLCBJTklUUkRfTE9BRF9BRERSKTsNCiAgICBmd19jZmdf YWRkX2kzMihmd19jZmcsIEZXX0NGR19JTklUUkRfU0laRSwgMCk7IC8vIG5vdCB1c2VkDQog ICAgZndfY2ZnX2FkZF9pMTYoZndfY2ZnLCBGV19DRkdfQk9PVF9ERVZJQ0UsIGJvb3RfZGV2 aWNlWzBdKTsNCiAgICBxZW11X3JlZ2lzdGVyX2Jvb3Rfc2V0KGZ3X2NmZ19ib290X3NldCwg ZndfY2ZnKTsNCn0NCg0KLyogU1BBUkNzZXJ2ZXIgMTAwMCBoYXJkd2FyZSBpbml0aWFsaXNh dGlvbiAqLw0Kc3RhdGljIHZvaWQgc3MxMDAwX2luaXQocmFtX2FkZHJfdCBSQU1fc2l6ZSwN CiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmJvb3RfZGV2aWNlLA0KICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2ZpbGVuYW1lLCBjb25z dCBjaGFyICprZXJuZWxfY21kbGluZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKmluaXRyZF9maWxlbmFtZSwgY29uc3QgY2hhciAqY3B1X21vZGVsKQ0Kew0KICAg IHN1bjRkX2h3X2luaXQoJnN1bjRkX2h3ZGVmc1swXSwgUkFNX3NpemUsIGJvb3RfZGV2aWNl LCBrZXJuZWxfZmlsZW5hbWUsDQogICAgICAgICAgICAgICAgICBrZXJuZWxfY21kbGluZSwg aW5pdHJkX2ZpbGVuYW1lLCBjcHVfbW9kZWwpOw0KfQ0KDQovKiBTUEFSQ2NlbnRlciAyMDAw IGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uICovDQpzdGF0aWMgdm9pZCBzczIwMDBfaW5pdChy YW1fYWRkcl90IFJBTV9zaXplLA0KICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hh ciAqYm9vdF9kZXZpY2UsDQogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpr ZXJuZWxfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLA0KICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1lLCBjb25zdCBjaGFy ICpjcHVfbW9kZWwpDQp7DQogICAgc3VuNGRfaHdfaW5pdCgmc3VuNGRfaHdkZWZzWzFdLCBS QU1fc2l6ZSwgYm9vdF9kZXZpY2UsIGtlcm5lbF9maWxlbmFtZSwNCiAgICAgICAgICAgICAg ICAgIGtlcm5lbF9jbWRsaW5lLCBpbml0cmRfZmlsZW5hbWUsIGNwdV9tb2RlbCk7DQp9DQoN CnN0YXRpYyBRRU1VTWFjaGluZSBzczEwMDBfbWFjaGluZSA9IHsNCiAgICAubmFtZSA9ICJT Uy0xMDAwIiwNCiAgICAuZGVzYyA9ICJTdW40ZCBwbGF0Zm9ybSwgU1BBUkNzZXJ2ZXIgMTAw MCIsDQogICAgLmluaXQgPSBzczEwMDBfaW5pdCwNCiAgICAudXNlX3Njc2kgPSAxLA0KICAg IC5tYXhfY3B1cyA9IDgsDQp9Ow0KDQpzdGF0aWMgUUVNVU1hY2hpbmUgc3MyMDAwX21hY2hp bmUgPSB7DQogICAgLm5hbWUgPSAiU1MtMjAwMCIsDQogICAgLmRlc2MgPSAiU3VuNGQgcGxh dGZvcm0sIFNQQVJDY2VudGVyIDIwMDAiLA0KICAgIC5pbml0ID0gc3MyMDAwX2luaXQsDQog ICAgLnVzZV9zY3NpID0gMSwNCiAgICAubWF4X2NwdXMgPSAyMCwNCn07DQoNCnN0YXRpYyBj b25zdCBzdHJ1Y3Qgc3VuNGNfaHdkZWYgc3VuNGNfaHdkZWZzW10gPSB7DQogICAgLyogU1Mt MiAqLw0KICAgIHsNCiAgICAgICAgLmlvbW11X2Jhc2UgICA9IDB4ZjgwMDAwMDAsDQogICAg ICAgIC50Y3hfYmFzZSAgICAgPSAweGZlMDAwMDAwLA0KICAgICAgICAuc2xhdmlvX2Jhc2Ug ID0gMHhmNjAwMDAwMCwNCiAgICAgICAgLmludGN0bF9iYXNlICA9IDB4ZjUwMDAwMDAsDQog ICAgICAgIC5jb3VudGVyX2Jhc2UgPSAweGYzMDAwMDAwLA0KICAgICAgICAubXNfa2JfYmFz ZSAgID0gMHhmMDAwMDAwMCwNCiAgICAgICAgLnNlcmlhbF9iYXNlICA9IDB4ZjEwMDAwMDAs DQogICAgICAgIC5udnJhbV9iYXNlICAgPSAweGYyMDAwMDAwLA0KICAgICAgICAuZmRfYmFz ZSAgICAgID0gMHhmNzIwMDAwMCwNCiAgICAgICAgLmRtYV9iYXNlICAgICA9IDB4Zjg0MDAw MDAsDQogICAgICAgIC5lc3BfYmFzZSAgICAgPSAweGY4ODAwMDAwLA0KICAgICAgICAubGVf YmFzZSAgICAgID0gMHhmOGMwMDAwMCwNCiAgICAgICAgLmF1eDFfYmFzZSAgICA9IDB4Zjc0 MDAwMDMsDQogICAgICAgIC5udnJhbV9tYWNoaW5lX2lkID0gMHg1NSwNCiAgICAgICAgLm1h Y2hpbmVfaWQgPSBzczJfaWQsDQogICAgICAgIC5tYXhfbWVtID0gMHgxMDAwMDAwMCwNCiAg ICAgICAgLmRlZmF1bHRfY3B1X21vZGVsID0gIkN5cHJlc3MgQ1k3QzYwMSIsDQogICAgfSwN Cn07DQoNCnN0YXRpYyBEZXZpY2VTdGF0ZSAqc3VuNGNfaW50Y3RsX2luaXQodGFyZ2V0X3Bo eXNfYWRkcl90IGFkZHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHFlbXVfaXJxICpwYXJlbnRfaXJxKQ0Kew0KICAgIERldmljZVN0YXRlICpkZXY7DQogICAg U3lzQnVzRGV2aWNlICpzOw0KICAgIHVuc2lnbmVkIGludCBpOw0KDQogICAgZGV2ID0gcWRl dl9jcmVhdGUoTlVMTCwgInN1bjRjX2ludGN0bCIpOw0KICAgIHFkZXZfaW5pdF9ub2ZhaWwo ZGV2KTsNCg0KICAgIHMgPSBzeXNidXNfZnJvbV9xZGV2KGRldik7DQoNCiAgICBmb3IgKGkg PSAwOyBpIDwgTUFYX1BJTFM7IGkrKykgew0KICAgICAgICBzeXNidXNfY29ubmVjdF9pcnEo cywgaSwgcGFyZW50X2lycVtpXSk7DQogICAgfQ0KICAgIHN5c2J1c19tbWlvX21hcChzLCAw LCBhZGRyKTsNCg0KICAgIHJldHVybiBkZXY7DQp9DQoNCnN0YXRpYyB2b2lkIHN1bjRjX2h3 X2luaXQoY29uc3Qgc3RydWN0IHN1bjRjX2h3ZGVmICpod2RlZiwgcmFtX2FkZHJfdCBSQU1f c2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYm9vdF9kZXZp Y2UsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmtlcm5lbF9maWxl bmFtZSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqa2VybmVsX2Nt ZGxpbmUsDQogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmluaXRyZF9m aWxlbmFtZSwgY29uc3QgY2hhciAqY3B1X21vZGVsKQ0Kew0KICAgIHZvaWQgKmlvbW11LCAq ZXNwZG1hLCAqbGVkbWEsICpudnJhbTsNCiAgICBxZW11X2lycSAqY3B1X2lycXMsIHNsYXZp b19pcnFbOF0sIGVzcGRtYV9pcnEsIGxlZG1hX2lycTsNCiAgICBxZW11X2lycSBlc3BfcmVz ZXQsIGRtYV9lbmFibGU7DQogICAgcWVtdV9pcnEgZmRjX3RjOw0KICAgIHVuc2lnbmVkIGxv bmcga2VybmVsX3NpemU7DQogICAgRHJpdmVJbmZvICpmZFtNQVhfRkRdOw0KICAgIHZvaWQg KmZ3X2NmZzsNCiAgICBEZXZpY2VTdGF0ZSAqZGV2Ow0KICAgIHVuc2lnbmVkIGludCBpOw0K DQogICAgLyogaW5pdCBDUFUgKi8NCiAgICBpZiAoIWNwdV9tb2RlbCkNCiAgICAgICAgY3B1 X21vZGVsID0gaHdkZWYtPmRlZmF1bHRfY3B1X21vZGVsOw0KDQogICAgY3B1X2RldmluaXQo Y3B1X21vZGVsLCAwLCBod2RlZi0+c2xhdmlvX2Jhc2UsICZjcHVfaXJxcyk7DQoNCiAgICAv KiBzZXQgdXAgZGV2aWNlcyAqLw0KICAgIHJhbV9pbml0KDAsIFJBTV9zaXplLCBod2RlZi0+ bWF4X21lbSk7DQoNCiAgICBwcm9tX2luaXQoaHdkZWYtPnNsYXZpb19iYXNlLCBiaW9zX25h bWUpOw0KDQogICAgZGV2ID0gc3VuNGNfaW50Y3RsX2luaXQoaHdkZWYtPmludGN0bF9iYXNl LCBjcHVfaXJxcyk7DQoNCiAgICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7DQogICAgICAg IHNsYXZpb19pcnFbaV0gPSBxZGV2X2dldF9ncGlvX2luKGRldiwgaSk7DQogICAgfQ0KDQog ICAgaW9tbXUgPSBpb21tdV9pbml0KGh3ZGVmLT5pb21tdV9iYXNlLCBod2RlZi0+aW9tbXVf dmVyc2lvbiwNCiAgICAgICAgICAgICAgICAgICAgICAgc2xhdmlvX2lycVsxXSk7DQoNCiAg ICBlc3BkbWEgPSBzcGFyYzMyX2RtYV9pbml0KGh3ZGVmLT5kbWFfYmFzZSwgc2xhdmlvX2ly cVsyXSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvbW11LCAmZXNwZG1hX2ly cSwgMCk7DQoNCiAgICBsZWRtYSA9IHNwYXJjMzJfZG1hX2luaXQoaHdkZWYtPmRtYV9iYXNl ICsgMTZVTEwsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsYXZpb19pcnFbM10s IGlvbW11LCAmbGVkbWFfaXJxLCAxKTsNCg0KICAgIGlmIChncmFwaGljX2RlcHRoICE9IDgg JiYgZ3JhcGhpY19kZXB0aCAhPSAyNCkgew0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFl bXU6IFVuc3VwcG9ydGVkIGRlcHRoOiAlZFxuIiwgZ3JhcGhpY19kZXB0aCk7DQogICAgICAg IGV4aXQgKDEpOw0KICAgIH0NCiAgICB0Y3hfaW5pdChod2RlZi0+dGN4X2Jhc2UsIDB4MDAx MDAwMDAsIGdyYXBoaWNfd2lkdGgsIGdyYXBoaWNfaGVpZ2h0LA0KICAgICAgICAgICAgIGdy YXBoaWNfZGVwdGgpOw0KDQogICAgbGFuY2VfaW5pdCgmbmRfdGFibGVbMF0sIGh3ZGVmLT5s ZV9iYXNlLCBsZWRtYSwgbGVkbWFfaXJxKTsNCg0KICAgIG52cmFtID0gbTQ4dDU5X2luaXQo c2xhdmlvX2lycVswXSwgaHdkZWYtPm52cmFtX2Jhc2UsIDAsIDB4ODAwLCAyKTsNCg0KICAg IHNsYXZpb19zZXJpYWxfbXNfa2JkX2luaXQoaHdkZWYtPm1zX2tiX2Jhc2UsIHNsYXZpb19p cnFbMV0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXNwbGF5X3R5cGUgPT0g RFRfTk9HUkFQSElDLCBFU0NDX0NMT0NLLCAxKTsNCiAgICAvLyBTbGF2aW8gVFRZQSAoYmFz ZSs0LCBMaW51eCB0dHlTMCkgaXMgdGhlIGZpcnN0IFFlbXUgc2VyaWFsIGRldmljZQ0KICAg IC8vIFNsYXZpbyBUVFlCIChiYXNlKzAsIExpbnV4IHR0eVMxKSBpcyB0aGUgc2Vjb25kIFFl bXUgc2VyaWFsIGRldmljZQ0KICAgIGVzY2NfaW5pdChod2RlZi0+c2VyaWFsX2Jhc2UsIHNs YXZpb19pcnFbMV0sDQogICAgICAgICAgICAgIHNsYXZpb19pcnFbMV0sIHNlcmlhbF9oZHNb MF0sIHNlcmlhbF9oZHNbMV0sDQogICAgICAgICAgICAgIEVTQ0NfQ0xPQ0ssIDEpOw0KDQog ICAgc2xhdmlvX21pc2NfaW5pdCgwLCBod2RlZi0+YXV4MV9iYXNlLCAwLCBzbGF2aW9faXJx WzFdLCBmZGNfdGMpOw0KDQogICAgaWYgKGh3ZGVmLT5mZF9iYXNlICE9ICh0YXJnZXRfcGh5 c19hZGRyX3QpLTEpIHsNCiAgICAgICAgLyogdGhlcmUgaXMgemVybyBvciBvbmUgZmxvcHB5 IGRyaXZlICovDQogICAgICAgIG1lbXNldChmZCwgMCwgc2l6ZW9mKGZkKSk7DQogICAgICAg IGZkWzBdID0gZHJpdmVfZ2V0KElGX0ZMT1BQWSwgMCwgMCk7DQogICAgICAgIHN1bjRtX2Zk Y3RybF9pbml0KHNsYXZpb19pcnFbMV0sIGh3ZGVmLT5mZF9iYXNlLCBmZCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgJmZkY190Yyk7DQogICAgfQ0KDQogICAgaWYgKGRyaXZlX2dl dF9tYXhfYnVzKElGX1NDU0kpID4gMCkgew0KICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFl bXU6IHRvbyBtYW55IFNDU0kgYnVzXG4iKTsNCiAgICAgICAgZXhpdCgxKTsNCiAgICB9DQoN CiAgICBlc3BfaW5pdChod2RlZi0+ZXNwX2Jhc2UsIDIsDQogICAgICAgICAgICAgZXNwZG1h X21lbW9yeV9yZWFkLCBlc3BkbWFfbWVtb3J5X3dyaXRlLA0KICAgICAgICAgICAgIGVzcGRt YSwgZXNwZG1hX2lycSwgJmVzcF9yZXNldCwgJmRtYV9lbmFibGUpOw0KDQogICAgcWRldl9j b25uZWN0X2dwaW9fb3V0KGVzcGRtYSwgMCwgZXNwX3Jlc2V0KTsNCiAgICBxZGV2X2Nvbm5l Y3RfZ3Bpb19vdXQoZXNwZG1hLCAxLCBkbWFfZW5hYmxlKTsNCg0KICAgIGtlcm5lbF9zaXpl ID0gc3VuNG1fbG9hZF9rZXJuZWwoa2VybmVsX2ZpbGVuYW1lLCBpbml0cmRfZmlsZW5hbWUs DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSQU1fc2l6ZSk7DQoNCiAg ICBudnJhbV9pbml0KG52cmFtLCAodWludDhfdCAqKSZuZF90YWJsZVswXS5tYWNhZGRyLCBr ZXJuZWxfY21kbGluZSwNCiAgICAgICAgICAgICAgIGJvb3RfZGV2aWNlLCBSQU1fc2l6ZSwg a2VybmVsX3NpemUsIGdyYXBoaWNfd2lkdGgsDQogICAgICAgICAgICAgICBncmFwaGljX2hl aWdodCwgZ3JhcGhpY19kZXB0aCwgaHdkZWYtPm52cmFtX21hY2hpbmVfaWQsDQogICAgICAg ICAgICAgICAiU3VuNGMiKTsNCg0KICAgIGZ3X2NmZyA9IGZ3X2NmZ19pbml0KDAsIDAsIENG R19BRERSLCBDRkdfQUREUiArIDIpOw0KICAgIGZ3X2NmZ19hZGRfaTMyKGZ3X2NmZywgRldf Q0ZHX0lELCAxKTsNCiAgICBmd19jZmdfYWRkX2k2NChmd19jZmcsIEZXX0NGR19SQU1fU0la RSwgKHVpbnQ2NF90KXJhbV9zaXplKTsNCiAgICBmd19jZmdfYWRkX2kxNihmd19jZmcsIEZX X0NGR19NQUNISU5FX0lELCBod2RlZi0+bWFjaGluZV9pZCk7DQogICAgZndfY2ZnX2FkZF9p MTYoZndfY2ZnLCBGV19DRkdfU1VONE1fREVQVEgsIGdyYXBoaWNfZGVwdGgpOw0KICAgIGZ3 X2NmZ19hZGRfaTMyKGZ3X2NmZywgRldfQ0ZHX0tFUk5FTF9BRERSLCBLRVJORUxfTE9BRF9B RERSKTsNCiAgICBmd19jZmdfYWRkX2kzMihmd19jZmcsIEZXX0NGR19LRVJORUxfU0laRSwg a2VybmVsX3NpemUpOw0KICAgIGlmIChrZXJuZWxfY21kbGluZSkgew0KICAgICAgICBmd19j ZmdfYWRkX2kzMihmd19jZmcsIEZXX0NGR19LRVJORUxfQ01ETElORSwgQ01ETElORV9BRERS KTsNCiAgICAgICAgcHN0cmNweV90YXJncGh5cygiY21kbGluZSIsIENNRExJTkVfQUREUiwg VEFSR0VUX1BBR0VfU0laRSwga2VybmVsX2NtZGxpbmUpOw0KICAgICAgICBmd19jZmdfYWRk X2J5dGVzKGZ3X2NmZywgRldfQ0ZHX0NNRExJTkVfREFUQSwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAodWludDhfdCopc3RyZHVwKGtlcm5lbF9jbWRsaW5lKSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJsZW4oa2VybmVsX2NtZGxpbmUpICsgMSk7DQogICAgfSBlbHNl IHsNCiAgICAgICAgZndfY2ZnX2FkZF9pMzIoZndfY2ZnLCBGV19DRkdfS0VSTkVMX0NNRExJ TkUsIDApOw0KICAgIH0NCiAgICBmd19jZmdfYWRkX2kzMihmd19jZmcsIEZXX0NGR19JTklU UkRfQUREUiwgSU5JVFJEX0xPQURfQUREUik7DQogICAgZndfY2ZnX2FkZF9pMzIoZndfY2Zn LCBGV19DRkdfSU5JVFJEX1NJWkUsIDApOyAvLyBub3QgdXNlZA0KICAgIGZ3X2NmZ19hZGRf aTE2KGZ3X2NmZywgRldfQ0ZHX0JPT1RfREVWSUNFLCBib290X2RldmljZVswXSk7DQogICAg cWVtdV9yZWdpc3Rlcl9ib290X3NldChmd19jZmdfYm9vdF9zZXQsIGZ3X2NmZyk7DQp9DQoN Ci8qIFNQQVJDc3RhdGlvbiAyIGhhcmR3YXJlIGluaXRpYWxpc2F0aW9uICovDQpzdGF0aWMg dm9pZCBzczJfaW5pdChyYW1fYWRkcl90IFJBTV9zaXplLA0KICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqYm9vdF9kZXZpY2UsDQogICAgICAgICAgICAgICAgICAgICBjb25z dCBjaGFyICprZXJuZWxfZmlsZW5hbWUsIGNvbnN0IGNoYXIgKmtlcm5lbF9jbWRsaW5lLA0K ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1lLCBjb25z dCBjaGFyICpjcHVfbW9kZWwpDQp7DQogICAgc3VuNGNfaHdfaW5pdCgmc3VuNGNfaHdkZWZz WzBdLCBSQU1fc2l6ZSwgYm9vdF9kZXZpY2UsIGtlcm5lbF9maWxlbmFtZSwNCiAgICAgICAg ICAgICAgICAgIGtlcm5lbF9jbWRsaW5lLCBpbml0cmRfZmlsZW5hbWUsIGNwdV9tb2RlbCk7 DQp9DQoNCnN0YXRpYyBRRU1VTWFjaGluZSBzczJfbWFjaGluZSA9IHsNCiAgICAubmFtZSA9 ICJTUy0yIiwNCiAgICAuZGVzYyA9ICJTdW40YyBwbGF0Zm9ybSwgU1BBUkNzdGF0aW9uIDIi LA0KICAgIC5pbml0ID0gc3MyX2luaXQsDQogICAgLnVzZV9zY3NpID0gMSwNCn07DQoNCnN0 YXRpYyB2b2lkIHNzMl9tYWNoaW5lX2luaXQodm9pZCkNCnsNCiAgICBxZW11X3JlZ2lzdGVy X21hY2hpbmUoJnNzNV9tYWNoaW5lKTsNCiAgICBxZW11X3JlZ2lzdGVyX21hY2hpbmUoJnNz MTBfbWFjaGluZSk7DQogICAgcWVtdV9yZWdpc3Rlcl9tYWNoaW5lKCZzczYwMG1wX21hY2hp bmUpOw0KICAgIHFlbXVfcmVnaXN0ZXJfbWFjaGluZSgmc3MyMF9tYWNoaW5lKTsNCiAgICBx ZW11X3JlZ2lzdGVyX21hY2hpbmUoJnZveWFnZXJfbWFjaGluZSk7DQogICAgcWVtdV9yZWdp c3Rlcl9tYWNoaW5lKCZzc19seF9tYWNoaW5lKTsNCiAgICBxZW11X3JlZ2lzdGVyX21hY2hp bmUoJnNzNF9tYWNoaW5lKTsNCiAgICBxZW11X3JlZ2lzdGVyX21hY2hpbmUoJnNjbHNfbWFj aGluZSk7DQogICAgcWVtdV9yZWdpc3Rlcl9tYWNoaW5lKCZzYm9va19tYWNoaW5lKTsNCiAg ICBxZW11X3JlZ2lzdGVyX21hY2hpbmUoJnNzMTAwMF9tYWNoaW5lKTsNCiAgICBxZW11X3Jl Z2lzdGVyX21hY2hpbmUoJnNzMjAwMF9tYWNoaW5lKTsNCiAgICBxZW11X3JlZ2lzdGVyX21h Y2hpbmUoJnNzMl9tYWNoaW5lKTsNCn0NCg0KbWFjaGluZV9pbml0KHNzMl9tYWNoaW5lX2lu aXQpOw0KDQo= --------------000603010002000200030704 Content-Type: text/plain; charset=windows-1252; name="sun4m.h" Content-Disposition: attachment; filename="sun4m.h" Content-Transfer-Encoding: base64 I2lmbmRlZiBTVU40TV9IDQojZGVmaW5lIFNVTjRNX0gNCg0KI2luY2x1ZGUgInFlbXUtY29t bW9uLmgiDQoNCi8qIERldmljZXMgdXNlZCBieSBzcGFyYzMyIHN5c3RlbS4gICovDQoNCi8q IGlvbW11LmMgKi8NCnZvaWQgc3BhcmNfaW9tbXVfbWVtb3J5X3J3KHZvaWQgKm9wYXF1ZSwg dGFyZ2V0X3BoeXNfYWRkcl90IGFkZHIsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1aW50OF90ICpidWYsIGludCBsZW4sIGludCBpc193cml0ZSk7DQpzdGF0aWMgaW5s aW5lIHZvaWQgc3BhcmNfaW9tbXVfbWVtb3J5X3JlYWQodm9pZCAqb3BhcXVlLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF9waHlzX2FkZHJf dCBhZGRyLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVp bnQ4X3QgKmJ1ZiwgaW50IGxlbikNCnsNCiAgICBzcGFyY19pb21tdV9tZW1vcnlfcncob3Bh cXVlLCBhZGRyLCBidWYsIGxlbiwgMCk7DQp9DQoNCnN0YXRpYyBpbmxpbmUgdm9pZCBzcGFy Y19pb21tdV9tZW1vcnlfd3JpdGUodm9pZCAqb3BhcXVlLA0KICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwNCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqYnVm LCBpbnQgbGVuKQ0Kew0KICAgIHNwYXJjX2lvbW11X21lbW9yeV9ydyhvcGFxdWUsIGFkZHIs IGJ1ZiwgbGVuLCAxKTsNCn0NCg0KLyogc2xhdmlvX2ludGN0bC5jICovDQp2b2lkIHNsYXZp b19waWNfaW5mbyhNb25pdG9yICptb24sIERldmljZVN0YXRlICpkZXYpOw0Kdm9pZCBzbGF2 aW9faXJxX2luZm8oTW9uaXRvciAqbW9uLCBEZXZpY2VTdGF0ZSAqZGV2KTsNCg0KLyogc3Vu NGNfaW50Y3RsLmMgKi8NCnZvaWQgc3VuNGNfcGljX2luZm8oTW9uaXRvciAqbW9uLCB2b2lk ICpvcGFxdWUpOw0Kdm9pZCBzdW40Y19pcnFfaW5mbyhNb25pdG9yICptb24sIHZvaWQgKm9w YXF1ZSk7DQoNCi8qIHNwYXJjMzJfZG1hLmMgKi8NCiNpbmNsdWRlICJzcGFyYzMyX2RtYS5o Ig0KDQojZW5kaWYNCg0K --------------000603010002000200030704 Content-Type: text/plain; charset=windows-1252; name="escc.c" Content-Disposition: attachment; filename="escc.c" Content-Transfer-Encoding: base64 LyoNCiAqIFFFTVUgRVNDQyAoWjgwMzAvWjg1MzAvWjg1QzMwL1NDQy9FU0NDKSBzZXJpYWwg cG9ydCBlbXVsYXRpb24NCiAqDQogKiBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNSBGYWJyaWNl IEJlbGxhcmQNCiAqDQogKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9m IGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5DQogKiBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdh cmUiKSwgdG8gZGVhbA0KICogaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cw0KICogdG8gdXNlLCBj b3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBh bmQvb3Igc2VsbA0KICogY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzDQogKiBmdXJuaXNoZWQgdG8gZG8gc28s IHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOg0KICoNCiAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJl IGluY2x1ZGVkIGluDQogKiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9m IHRoZSBTb2Z0d2FyZS4NCiAqDQogKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElT IiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUg0KICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksDQogKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQg Tk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTA0KICogVEhFIEFVVEhPUlMgT1Ig Q09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1Ig T1RIRVINCiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1Qs IFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sDQogKiBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdT IElODQogKiBUSEUgU09GVFdBUkUuDQogKi8NCg0KI2luY2x1ZGUgImh3LmgiDQojaW5jbHVk ZSAic3lzYnVzLmgiDQojaW5jbHVkZSAiZXNjYy5oIg0KI2luY2x1ZGUgInFlbXUtY2hhci5o Ig0KI2luY2x1ZGUgImNvbnNvbGUuaCINCg0KLyogZGVidWcgc2VyaWFsICovDQovLyNkZWZp bmUgREVCVUdfU0VSSUFMDQoNCi8qIGRlYnVnIGtleWJvYXJkICovDQovLyNkZWZpbmUgREVC VUdfS0JEDQoNCi8qIGRlYnVnIG1vdXNlICovDQovLyNkZWZpbmUgREVCVUdfTU9VU0UNCg0K LyoNCiAqIENoaXBzZXQgZG9jczoNCiAqICJaODBDMzAvWjg1QzMwL1o4MDIzMC9aODUyMzAv Wjg1MjMzIFNDQy9FU0NDIFVzZXIgTWFudWFsIiwNCiAqIGh0dHA6Ly93d3cuemlsb2cuY29t L2RvY3Mvc2VyaWFsL3NjY19lc2NjX3VtLnBkZg0KICoNCiAqIE9uIFNwYXJjMzIgdGhpcyBp cyB0aGUgc2VyaWFsIHBvcnQsIG1vdXNlIGFuZCBrZXlib2FyZCBwYXJ0IG9mIGNoaXAgU1RQ MjAwMQ0KICogKFNsYXZlIEkvTyksIGFsc28gcHJvZHVjZWQgYXMgTkNSODlDMTA1LiBTZWUN CiAqIGh0dHA6Ly93d3cuaWJpYmxpby5vcmcvcHViL2hpc3RvcmljLWxpbnV4L2Vhcmx5LXBv cnRzL1NwYXJjL05DUi9OQ1I4OUMxMDUudHh0DQogKg0KICogVGhlIHNlcmlhbCBwb3J0cyBp bXBsZW1lbnQgZnVsbCBBTUQgQU04NTMwIG9yIFppbG9nIFo4NTMwIGNoaXBzLA0KICogbW91 c2UgYW5kIGtleWJvYXJkIHBvcnRzIGRvbid0IGltcGxlbWVudCBhbGwgZnVuY3Rpb25zIGFu ZCB0aGV5IGFyZQ0KICogb25seSBhc3luY2hyb25vdXMuIFRoZXJlIGlzIG5vIERNQS4NCiAq DQogKiBaODVDMzAgaXMgYWxzbyB1c2VkIG9uIFBvd2VyTWFjcy4gVGhlcmUgYXJlIHNvbWUg c21hbGwgZGlmZmVyZW5jZXMNCiAqIGJldHdlZW4gU3BhcmMgdmVyc2lvbiAoc3Vuemlsb2cp IGFuZCBQb3dlck1hYyAocG1hYyk6DQogKiAgT2Zmc2V0IGJldHdlZW4gY29udHJvbCBhbmQg ZGF0YSByZWdpc3RlcnMNCiAqICBUaGVyZSBpcyBzb21lIGtpbmQgb2YgbG9ja3VwIGJ1Zywg YnV0IHdlIGNhbiBpZ25vcmUgaXQNCiAqICBDVFMgaXMgaW52ZXJ0ZWQNCiAqICBETUEgb24g cG1hYyB1c2luZyBEQkRNQSBjaGlwDQogKiAgcG1hYyBjYW4gZG8gSVJEQSBhbmQgZmFzdGVy IHJhdGVzLCBzdW56aWxvZyBjYW4gb25seSBkbyAzODQwMA0KICogIHBtYWMgYmF1ZCByYXRl IGdlbmVyYXRvciBjbG9jayBpcyAzLjY4NjQgTUh6LCBzdW56aWxvZyA0LjkxNTIgTUh6DQog Ki8NCg0KLyoNCiAqIE1vZGlmaWNhdGlvbnM6DQogKiAgMjAwNi1BdWctMTAgIElnb3IgS292 YWxlbmtvIDogICBSZW5hbWVkIEtCRFF1ZXVlIHRvIFNFUklPUXVldWUsIGltcGxlbWVudGVk DQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXJpYWwgbW91c2UgcXVl dWUuDQogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbXBsZW1lbnRlZCBz ZXJpYWwgbW91c2UgcHJvdG9jb2wuDQogKg0KICogIDIwMTAtTWF5LTIzICBBcnR5b20gVGFy YXNlbmtvOiAgUmV3b3JrZWQgSVVTIGxvZ2ljDQogKi8NCg0KI2lmZGVmIERFQlVHX1NFUklB TA0KI2RlZmluZSBTRVJfRFBSSU5URihmbXQsIC4uLikgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwNCiAgICBkbyB7IHByaW50ZigiU0VSOiAiIGZtdCAsICMjIF9fVkFf QVJHU19fKTsgfSB3aGlsZSAoMCkNCiNlbHNlDQojZGVmaW5lIFNFUl9EUFJJTlRGKGZtdCwg Li4uKQ0KI2VuZGlmDQojaWZkZWYgREVCVUdfS0JEDQojZGVmaW5lIEtCRF9EUFJJTlRGKGZt dCwgLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KICAgIGRvIHsg cHJpbnRmKCJLQkQ6ICIgZm10ICwgIyMgX19WQV9BUkdTX18pOyB9IHdoaWxlICgwKQ0KI2Vs c2UNCiNkZWZpbmUgS0JEX0RQUklOVEYoZm10LCAuLi4pDQojZW5kaWYNCiNpZmRlZiBERUJV R19NT1VTRQ0KI2RlZmluZSBNU19EUFJJTlRGKGZtdCwgLi4uKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwNCiAgICBkbyB7IHByaW50ZigiTVNDOiAiIGZtdCAsICMj IF9fVkFfQVJHU19fKTsgfSB3aGlsZSAoMCkNCiNlbHNlDQojZGVmaW5lIE1TX0RQUklOVEYo Zm10LCAuLi4pDQojZW5kaWYNCg0KdHlwZWRlZiBlbnVtIHsNCiAgICBjaG5fYSwgY2huX2Is DQp9IENobklEOw0KDQojZGVmaW5lIENITl9DKHMpICgocyktPmNobiA9PSBjaG5fYj8gJ2In IDogJ2EnKQ0KDQp0eXBlZGVmIGVudW0gew0KICAgIHNlciwga2JkLCBtb3VzZSwNCn0gQ2hu VHlwZTsNCg0KI2RlZmluZSBTRVJJT19RVUVVRV9TSVpFIDI1Ng0KDQp0eXBlZGVmIHN0cnVj dCB7DQogICAgdWludDhfdCBkYXRhW1NFUklPX1FVRVVFX1NJWkVdOw0KICAgIGludCBycHRy LCB3cHRyLCBjb3VudDsNCn0gU0VSSU9RdWV1ZTsNCg0KI2RlZmluZSBTRVJJQUxfUkVHUyAx Ng0KdHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbFN0YXRlIHsNCiAgICBxZW11X2lycSBpcnE7DQog ICAgdWludDMyX3QgcmVnOw0KICAgIHVpbnQzMl90IHJ4aW50LCB0eGludCwgcnhpbnRfdW5k ZXJfc3ZjLCB0eGludF91bmRlcl9zdmM7DQogICAgQ2huSUQgY2huOyAvLyB0aGlzIGNoYW5u ZWwsIEEgKGJhc2UrNCkgb3IgQiAoYmFzZSswKQ0KICAgIENoblR5cGUgdHlwZTsNCiAgICBz dHJ1Y3QgQ2hhbm5lbFN0YXRlICpvdGhlcmNobjsNCiAgICB1aW50OF90IHJ4LCB0eCwgd3Jl Z3NbU0VSSUFMX1JFR1NdLCBycmVnc1tTRVJJQUxfUkVHU107DQogICAgU0VSSU9RdWV1ZSBx dWV1ZTsNCiAgICBDaGFyRHJpdmVyU3RhdGUgKmNocjsNCiAgICBpbnQgZTBfbW9kZSwgbGVk X21vZGUsIGNhcHNfbG9ja19tb2RlLCBudW1fbG9ja19tb2RlOw0KICAgIGludCBkaXNhYmxl ZDsNCiAgICBpbnQgY2xvY2s7DQogICAgdWludDMyX3Qgdm1zdGF0ZV9kdW1teTsNCn0gQ2hh bm5lbFN0YXRlOw0KDQpzdHJ1Y3QgU2VyaWFsU3RhdGUgew0KICAgIFN5c0J1c0RldmljZSBi dXNkZXY7DQogICAgc3RydWN0IENoYW5uZWxTdGF0ZSBjaG5bMl07DQogICAgdWludDMyX3Qg aXRfc2hpZnQ7DQogICAgTWVtb3J5UmVnaW9uIG1taW87DQogICAgdWludDMyX3QgZGlzYWJs ZWQ7DQogICAgdWludDMyX3QgZnJlcXVlbmN5Ow0KfTsNCg0KI2RlZmluZSBTRVJJQUxfQ1RS TCAwDQojZGVmaW5lIFNFUklBTF9EQVRBIDENCg0KI2RlZmluZSBXX0NNRCAgICAgMA0KI2Rl ZmluZSBDTURfUFRSX01BU0sgICAweDA3DQojZGVmaW5lIENNRF9DTURfTUFTSyAgIDB4MzgN CiNkZWZpbmUgQ01EX0hJICAgICAgICAgMHgwOA0KI2RlZmluZSBDTURfQ0xSX1RYSU5UICAw eDI4DQojZGVmaW5lIENNRF9DTFJfSVVTICAgIDB4MzgNCiNkZWZpbmUgV19JTlRSICAgIDEN CiNkZWZpbmUgSU5UUl9JTlRBTEwgICAgMHgwMQ0KI2RlZmluZSBJTlRSX1RYSU5UICAgICAw eDAyDQojZGVmaW5lIElOVFJfUlhNT0RFTVNLIDB4MTgNCiNkZWZpbmUgSU5UUl9SWElOVDFT VCAgMHgwOA0KI2RlZmluZSBJTlRSX1JYSU5UQUxMICAweDEwDQojZGVmaW5lIFdfSVZFQyAg ICAyDQojZGVmaW5lIFdfUlhDVFJMICAzDQojZGVmaW5lIFJYQ1RSTF9SWEVOICAgIDB4MDEN CiNkZWZpbmUgV19UWENUUkwxIDQNCiNkZWZpbmUgVFhDVFJMMV9QQVJFTiAgMHgwMQ0KI2Rl ZmluZSBUWENUUkwxX1BBUkVWICAweDAyDQojZGVmaW5lIFRYQ1RSTDFfMVNUT1AgIDB4MDQN CiNkZWZpbmUgVFhDVFJMMV8xSFNUT1AgMHgwOA0KI2RlZmluZSBUWENUUkwxXzJTVE9QICAw eDBjDQojZGVmaW5lIFRYQ1RSTDFfU1RQTVNLIDB4MGMNCiNkZWZpbmUgVFhDVFJMMV9DTEsx WCAgMHgwMA0KI2RlZmluZSBUWENUUkwxX0NMSzE2WCAweDQwDQojZGVmaW5lIFRYQ1RSTDFf Q0xLMzJYIDB4ODANCiNkZWZpbmUgVFhDVFJMMV9DTEs2NFggMHhjMA0KI2RlZmluZSBUWENU UkwxX0NMS01TSyAweGMwDQojZGVmaW5lIFdfVFhDVFJMMiA1DQojZGVmaW5lIFRYQ1RSTDJf VFhFTiAgIDB4MDgNCiNkZWZpbmUgVFhDVFJMMl9CSVRNU0sgMHg2MA0KI2RlZmluZSBUWENU UkwyXzVCSVRTICAweDAwDQojZGVmaW5lIFRYQ1RSTDJfN0JJVFMgIDB4MjANCiNkZWZpbmUg VFhDVFJMMl82QklUUyAgMHg0MA0KI2RlZmluZSBUWENUUkwyXzhCSVRTICAweDYwDQojZGVm aW5lIFdfU1lOQzEgICA2DQojZGVmaW5lIFdfU1lOQzIgICA3DQojZGVmaW5lIFdfVFhCVUYg ICA4DQojZGVmaW5lIFdfTUlOVFIgICA5DQojZGVmaW5lIE1JTlRSX1NUQVRVU0hJIDB4MTAN CiNkZWZpbmUgTUlOVFJfUlNUX01BU0sgMHhjMA0KI2RlZmluZSBNSU5UUl9SU1RfQiAgICAw eDQwDQojZGVmaW5lIE1JTlRSX1JTVF9BICAgIDB4ODANCiNkZWZpbmUgTUlOVFJfUlNUX0FM TCAgMHhjMA0KI2RlZmluZSBXX01JU0MxICAxMA0KI2RlZmluZSBXX0NMT0NLICAxMQ0KI2Rl ZmluZSBDTE9DS19UUlhDICAgICAweDA4DQojZGVmaW5lIFdfQlJHTE8gIDEyDQojZGVmaW5l IFdfQlJHSEkgIDEzDQojZGVmaW5lIFdfTUlTQzIgIDE0DQojZGVmaW5lIE1JU0MyX1BMTERJ UyAgIDB4MzANCiNkZWZpbmUgV19FWFRJTlQgMTUNCiNkZWZpbmUgRVhUSU5UX0RDRCAgICAg MHgwOA0KI2RlZmluZSBFWFRJTlRfU1lOQ0lOVCAweDEwDQojZGVmaW5lIEVYVElOVF9DVFNJ TlQgIDB4MjANCiNkZWZpbmUgRVhUSU5UX1RYVU5EUk4gMHg0MA0KI2RlZmluZSBFWFRJTlRf QlJLSU5UICAweDgwDQoNCiNkZWZpbmUgUl9TVEFUVVMgIDANCiNkZWZpbmUgU1RBVFVTX1JY QVYgICAgMHgwMQ0KI2RlZmluZSBTVEFUVVNfWkVSTyAgICAweDAyDQojZGVmaW5lIFNUQVRV U19UWEVNUFRZIDB4MDQNCiNkZWZpbmUgU1RBVFVTX0RDRCAgICAgMHgwOA0KI2RlZmluZSBT VEFUVVNfU1lOQyAgICAweDEwDQojZGVmaW5lIFNUQVRVU19DVFMgICAgIDB4MjANCiNkZWZp bmUgU1RBVFVTX1RYVU5EUk4gMHg0MA0KI2RlZmluZSBTVEFUVVNfQlJLICAgICAweDgwDQoj ZGVmaW5lIFJfU1BFQyAgICAxDQojZGVmaW5lIFNQRUNfQUxMU0VOVCAgIDB4MDENCiNkZWZp bmUgU1BFQ19CSVRTOCAgICAgMHgwNg0KI2RlZmluZSBSX0lWRUMgICAgMg0KI2RlZmluZSBJ VkVDX1RYSU5UQiAgICAweDAwDQojZGVmaW5lIElWRUNfTE9OT0lOVCAgIDB4MDYNCiNkZWZp bmUgSVZFQ19MT1JYSU5UQSAgMHgwYw0KI2RlZmluZSBJVkVDX0xPUlhJTlRCICAweDA0DQoj ZGVmaW5lIElWRUNfTE9UWElOVEEgIDB4MDgNCiNkZWZpbmUgSVZFQ19ISU5PSU5UICAgMHg2 MA0KI2RlZmluZSBJVkVDX0hJUlhJTlRBICAweDMwDQojZGVmaW5lIElWRUNfSElSWElOVEIg IDB4MjANCiNkZWZpbmUgSVZFQ19ISVRYSU5UQSAgMHgxMA0KI2RlZmluZSBSX0lOVFIgICAg Mw0KI2RlZmluZSBJTlRSX0VYVElOVEIgICAweDAxDQojZGVmaW5lIElOVFJfVFhJTlRCICAg IDB4MDINCiNkZWZpbmUgSU5UUl9SWElOVEIgICAgMHgwNA0KI2RlZmluZSBJTlRSX0VYVElO VEEgICAweDA4DQojZGVmaW5lIElOVFJfVFhJTlRBICAgIDB4MTANCiNkZWZpbmUgSU5UUl9S WElOVEEgICAgMHgyMA0KI2RlZmluZSBSX0lQRU4gICAgNA0KI2RlZmluZSBSX1RYQ1RSTDEg NQ0KI2RlZmluZSBSX1RYQ1RSTDIgNg0KI2RlZmluZSBSX0JDICAgICAgNw0KI2RlZmluZSBS X1JYQlVGICAgOA0KI2RlZmluZSBSX1JYQ1RSTCAgOQ0KI2RlZmluZSBSX01JU0MgICAxMA0K I2RlZmluZSBSX01JU0MxICAxMQ0KI2RlZmluZSBSX0JSR0xPICAxMg0KI2RlZmluZSBSX0JS R0hJICAxMw0KI2RlZmluZSBSX01JU0MxSSAxNA0KI2RlZmluZSBSX0VYVElOVCAxNQ0KDQpz dGF0aWMgdm9pZCBoYW5kbGVfa2JkX2NvbW1hbmQoQ2hhbm5lbFN0YXRlICpzLCBpbnQgdmFs KTsNCnN0YXRpYyBpbnQgc2VyaWFsX2Nhbl9yZWNlaXZlKHZvaWQgKm9wYXF1ZSk7DQpzdGF0 aWMgdm9pZCBzZXJpYWxfcmVjZWl2ZV9ieXRlKENoYW5uZWxTdGF0ZSAqcywgaW50IGNoKTsN Cg0Kc3RhdGljIHZvaWQgY2xlYXJfcXVldWUodm9pZCAqb3BhcXVlKQ0Kew0KICAgIENoYW5u ZWxTdGF0ZSAqcyA9IG9wYXF1ZTsNCiAgICBTRVJJT1F1ZXVlICpxID0gJnMtPnF1ZXVlOw0K ICAgIHEtPnJwdHIgPSBxLT53cHRyID0gcS0+Y291bnQgPSAwOw0KfQ0KDQpzdGF0aWMgdm9p ZCBwdXRfcXVldWUodm9pZCAqb3BhcXVlLCBpbnQgYikNCnsNCiAgICBDaGFubmVsU3RhdGUg KnMgPSBvcGFxdWU7DQogICAgU0VSSU9RdWV1ZSAqcSA9ICZzLT5xdWV1ZTsNCg0KICAgIFNF Ul9EUFJJTlRGKCJjaGFubmVsICVjIHB1dDogMHglMDJ4XG4iLCBDSE5fQyhzKSwgYik7DQog ICAgaWYgKHEtPmNvdW50ID49IFNFUklPX1FVRVVFX1NJWkUpDQogICAgICAgIHJldHVybjsN CiAgICBxLT5kYXRhW3EtPndwdHJdID0gYjsNCiAgICBpZiAoKytxLT53cHRyID09IFNFUklP X1FVRVVFX1NJWkUpDQogICAgICAgIHEtPndwdHIgPSAwOw0KICAgIHEtPmNvdW50Kys7DQog ICAgc2VyaWFsX3JlY2VpdmVfYnl0ZShzLCAwKTsNCn0NCg0Kc3RhdGljIHVpbnQzMl90IGdl dF9xdWV1ZSh2b2lkICpvcGFxdWUpDQp7DQogICAgQ2hhbm5lbFN0YXRlICpzID0gb3BhcXVl Ow0KICAgIFNFUklPUXVldWUgKnEgPSAmcy0+cXVldWU7DQogICAgaW50IHZhbDsNCg0KICAg IGlmIChxLT5jb3VudCA9PSAwKSB7DQogICAgICAgIHJldHVybiAwOw0KICAgIH0gZWxzZSB7 DQogICAgICAgIHZhbCA9IHEtPmRhdGFbcS0+cnB0cl07DQogICAgICAgIGlmICgrK3EtPnJw dHIgPT0gU0VSSU9fUVVFVUVfU0laRSkNCiAgICAgICAgICAgIHEtPnJwdHIgPSAwOw0KICAg ICAgICBxLT5jb3VudC0tOw0KICAgIH0NCiAgICBTRVJfRFBSSU5URigiY2hhbm5lbCAlYyBn ZXQgMHglMDJ4XG4iLCBDSE5fQyhzKSwgdmFsKTsNCiAgICBpZiAocS0+Y291bnQgPiAwKQ0K ICAgICAgICBzZXJpYWxfcmVjZWl2ZV9ieXRlKHMsIDApOw0KICAgIHJldHVybiB2YWw7DQp9 DQoNCnN0YXRpYyBpbnQgZXNjY191cGRhdGVfaXJxX2NobihDaGFubmVsU3RhdGUgKnMpDQp7 DQogICAgaWYgKCgoKHMtPndyZWdzW1dfSU5UUl0gJiBJTlRSX1RYSU5UKSAmJiAocy0+dHhp bnQgPT0gMSkpIHx8DQogICAgICAgICAvLyB0eCBpbnRzIGVuYWJsZWQsIHBlbmRpbmcNCiAg ICAgICAgICgoKChzLT53cmVnc1tXX0lOVFJdICYgSU5UUl9SWE1PREVNU0spID09IElOVFJf UlhJTlQxU1QpIHx8DQogICAgICAgICAgICgocy0+d3JlZ3NbV19JTlRSXSAmIElOVFJfUlhN T0RFTVNLKSA9PSBJTlRSX1JYSU5UQUxMKSkgJiYNCiAgICAgICAgICBzLT5yeGludCA9PSAx KSB8fCAvLyByeCBpbnRzIGVuYWJsZWQsIHBlbmRpbmcNCiAgICAgICAgICgocy0+d3JlZ3Nb V19FWFRJTlRdICYgRVhUSU5UX0JSS0lOVCkgJiYNCiAgICAgICAgICAocy0+cnJlZ3NbUl9T VEFUVVNdICYgU1RBVFVTX0JSSykpKSkgeyAvLyBicmVhayBpbnQgZSZwDQogICAgICAgIHJl dHVybiAxOw0KICAgIH0NCiAgICByZXR1cm4gMDsNCn0NCg0Kc3RhdGljIHZvaWQgZXNjY191 cGRhdGVfaXJxKENoYW5uZWxTdGF0ZSAqcykNCnsNCiAgICBpbnQgaXJxOw0KDQogICAgaXJx ID0gZXNjY191cGRhdGVfaXJxX2NobihzKTsNCiAgICBpcnEgfD0gZXNjY191cGRhdGVfaXJx X2NobihzLT5vdGhlcmNobik7DQoNCiAgICBTRVJfRFBSSU5URigiSVJRID0gJWRcbiIsIGly cSk7DQogICAgcWVtdV9zZXRfaXJxKHMtPmlycSwgaXJxKTsNCn0NCg0Kc3RhdGljIHZvaWQg ZXNjY19yZXNldF9jaG4oQ2hhbm5lbFN0YXRlICpzKQ0Kew0KICAgIGludCBpOw0KDQogICAg cy0+cmVnID0gMDsNCiAgICBmb3IgKGkgPSAwOyBpIDwgU0VSSUFMX1JFR1M7IGkrKykgew0K ICAgICAgICBzLT5ycmVnc1tpXSA9IDA7DQogICAgICAgIHMtPndyZWdzW2ldID0gMDsNCiAg ICB9DQogICAgcy0+d3JlZ3NbV19UWENUUkwxXSA9IFRYQ1RSTDFfMVNUT1A7IC8vIDFYIGRp dmlzb3IsIDEgc3RvcCBiaXQsIG5vIHBhcml0eQ0KICAgIHMtPndyZWdzW1dfTUlOVFJdID0g TUlOVFJfUlNUX0FMTDsNCiAgICBzLT53cmVnc1tXX0NMT0NLXSA9IENMT0NLX1RSWEM7IC8v IFN5bmNoIG1vZGUgdHggY2xvY2sgPSBUUnhDDQogICAgcy0+d3JlZ3NbV19NSVNDMl0gPSBN SVNDMl9QTExESVM7IC8vIFBMTCBkaXNhYmxlZA0KICAgIHMtPndyZWdzW1dfRVhUSU5UXSA9 IEVYVElOVF9EQ0QgfCBFWFRJTlRfU1lOQ0lOVCB8IEVYVElOVF9DVFNJTlQgfA0KICAgICAg ICBFWFRJTlRfVFhVTkRSTiB8IEVYVElOVF9CUktJTlQ7IC8vIEVuYWJsZSBtb3N0IGludGVy cnVwdHMNCiAgICBpZiAocy0+ZGlzYWJsZWQpDQogICAgICAgIHMtPnJyZWdzW1JfU1RBVFVT XSA9IFNUQVRVU19UWEVNUFRZIHwgU1RBVFVTX0RDRCB8IFNUQVRVU19TWU5DIHwNCiAgICAg ICAgICAgIFNUQVRVU19DVFMgfCBTVEFUVVNfVFhVTkRSTjsNCiAgICBlbHNlDQogICAgICAg IHMtPnJyZWdzW1JfU1RBVFVTXSA9IFNUQVRVU19UWEVNUFRZIHwgU1RBVFVTX1RYVU5EUk47 DQogICAgcy0+cnJlZ3NbUl9TUEVDXSA9IFNQRUNfQklUUzggfCBTUEVDX0FMTFNFTlQ7DQoN CiAgICBzLT5yeCA9IHMtPnR4ID0gMDsNCiAgICBzLT5yeGludCA9IHMtPnR4aW50ID0gMDsN CiAgICBzLT5yeGludF91bmRlcl9zdmMgPSBzLT50eGludF91bmRlcl9zdmMgPSAwOw0KICAg IHMtPmUwX21vZGUgPSBzLT5sZWRfbW9kZSA9IHMtPmNhcHNfbG9ja19tb2RlID0gcy0+bnVt X2xvY2tfbW9kZSA9IDA7DQogICAgY2xlYXJfcXVldWUocyk7DQp9DQoNCnN0YXRpYyB2b2lk IGVzY2NfcmVzZXQoRGV2aWNlU3RhdGUgKmQpDQp7DQogICAgU2VyaWFsU3RhdGUgKnMgPSBj b250YWluZXJfb2YoZCwgU2VyaWFsU3RhdGUsIGJ1c2Rldi5xZGV2KTsNCg0KICAgIGVzY2Nf cmVzZXRfY2huKCZzLT5jaG5bMF0pOw0KICAgIGVzY2NfcmVzZXRfY2huKCZzLT5jaG5bMV0p Ow0KfQ0KDQpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X3J4aW50KENoYW5uZWxTdGF0ZSAqcykN CnsNCiAgICBzLT5yeGludCA9IDE7DQogICAgLyogWFhYOiBtaXNzaW5nIGRhaXN5IGNoYWlu bmlnOiBjaG5fYiByeCBzaG91bGQgaGF2ZSBhIGxvd2VyIHByaW9yaXR5DQogICAgICAgdGhh biBjaG5fYSByeC90eC9zcGVjaWFsX2NvbmRpdGlvbiBzZXJ2aWNlKi8NCiAgICBzLT5yeGlu dF91bmRlcl9zdmMgPSAxOw0KICAgIGlmIChzLT5jaG4gPT0gY2huX2EpIHsNCiAgICAgICAg cy0+cnJlZ3NbUl9JTlRSXSB8PSBJTlRSX1JYSU5UQTsNCiAgICAgICAgaWYgKHMtPndyZWdz W1dfTUlOVFJdICYgTUlOVFJfU1RBVFVTSEkpDQogICAgICAgICAgICBzLT5vdGhlcmNobi0+ cnJlZ3NbUl9JVkVDXSA9IElWRUNfSElSWElOVEE7DQogICAgICAgIGVsc2UNCiAgICAgICAg ICAgIHMtPm90aGVyY2huLT5ycmVnc1tSX0lWRUNdID0gSVZFQ19MT1JYSU5UQTsNCiAgICB9 IGVsc2Ugew0KICAgICAgICBzLT5vdGhlcmNobi0+cnJlZ3NbUl9JTlRSXSB8PSBJTlRSX1JY SU5UQjsNCiAgICAgICAgaWYgKHMtPndyZWdzW1dfTUlOVFJdICYgTUlOVFJfU1RBVFVTSEkp DQogICAgICAgICAgICBzLT5ycmVnc1tSX0lWRUNdID0gSVZFQ19ISVJYSU5UQjsNCiAgICAg ICAgZWxzZQ0KICAgICAgICAgICAgcy0+cnJlZ3NbUl9JVkVDXSA9IElWRUNfTE9SWElOVEI7 DQogICAgfQ0KICAgIGVzY2NfdXBkYXRlX2lycShzKTsNCn0NCg0Kc3RhdGljIGlubGluZSB2 b2lkIHNldF90eGludChDaGFubmVsU3RhdGUgKnMpDQp7DQogICAgcy0+dHhpbnQgPSAxOw0K ICAgIGlmICghcy0+cnhpbnRfdW5kZXJfc3ZjKSB7DQogICAgICAgIHMtPnR4aW50X3VuZGVy X3N2YyA9IDE7DQogICAgICAgIGlmIChzLT5jaG4gPT0gY2huX2EpIHsNCiAgICAgICAgICAg IGlmIChzLT53cmVnc1tXX0lOVFJdICYgSU5UUl9UWElOVCkgew0KICAgICAgICAgICAgICAg IHMtPnJyZWdzW1JfSU5UUl0gfD0gSU5UUl9UWElOVEE7DQogICAgICAgICAgICB9DQogICAg ICAgICAgICBpZiAocy0+d3JlZ3NbV19NSU5UUl0gJiBNSU5UUl9TVEFUVVNISSkNCiAgICAg ICAgICAgICAgICBzLT5vdGhlcmNobi0+cnJlZ3NbUl9JVkVDXSA9IElWRUNfSElUWElOVEE7 DQogICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgcy0+b3RoZXJjaG4tPnJyZWdz W1JfSVZFQ10gPSBJVkVDX0xPVFhJTlRBOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg ICAgcy0+cnJlZ3NbUl9JVkVDXSA9IElWRUNfVFhJTlRCOw0KICAgICAgICAgICAgaWYgKHMt PndyZWdzW1dfSU5UUl0gJiBJTlRSX1RYSU5UKSB7DQogICAgICAgICAgICAgICAgcy0+b3Ro ZXJjaG4tPnJyZWdzW1JfSU5UUl0gfD0gSU5UUl9UWElOVEI7DQogICAgICAgICAgICB9DQog ICAgICAgIH0NCiAgICBlc2NjX3VwZGF0ZV9pcnEocyk7DQogICAgfQ0KfQ0KDQpzdGF0aWMg aW5saW5lIHZvaWQgY2xyX3J4aW50KENoYW5uZWxTdGF0ZSAqcykNCnsNCiAgICBzLT5yeGlu dCA9IDA7DQogICAgcy0+cnhpbnRfdW5kZXJfc3ZjID0gMDsNCiAgICBpZiAocy0+Y2huID09 IGNobl9hKSB7DQogICAgICAgIGlmIChzLT53cmVnc1tXX01JTlRSXSAmIE1JTlRSX1NUQVRV U0hJKQ0KICAgICAgICAgICAgcy0+b3RoZXJjaG4tPnJyZWdzW1JfSVZFQ10gPSBJVkVDX0hJ Tk9JTlQ7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHMtPm90aGVyY2huLT5ycmVnc1tS X0lWRUNdID0gSVZFQ19MT05PSU5UOw0KICAgICAgICBzLT5ycmVnc1tSX0lOVFJdICY9IH5J TlRSX1JYSU5UQTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBpZiAocy0+d3JlZ3NbV19NSU5U Ul0gJiBNSU5UUl9TVEFUVVNISSkNCiAgICAgICAgICAgIHMtPnJyZWdzW1JfSVZFQ10gPSBJ VkVDX0hJTk9JTlQ7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHMtPnJyZWdzW1JfSVZF Q10gPSBJVkVDX0xPTk9JTlQ7DQogICAgICAgIHMtPm90aGVyY2huLT5ycmVnc1tSX0lOVFJd ICY9IH5JTlRSX1JYSU5UQjsNCiAgICB9DQogICAgaWYgKHMtPnR4aW50KQ0KICAgICAgICBz ZXRfdHhpbnQocyk7DQogICAgZXNjY191cGRhdGVfaXJxKHMpOw0KfQ0KDQpzdGF0aWMgaW5s aW5lIHZvaWQgY2xyX3R4aW50KENoYW5uZWxTdGF0ZSAqcykNCnsNCiAgICBzLT50eGludCA9 IDA7DQogICAgcy0+dHhpbnRfdW5kZXJfc3ZjID0gMDsNCiAgICBpZiAocy0+Y2huID09IGNo bl9hKSB7DQogICAgICAgIGlmIChzLT53cmVnc1tXX01JTlRSXSAmIE1JTlRSX1NUQVRVU0hJ KQ0KICAgICAgICAgICAgcy0+b3RoZXJjaG4tPnJyZWdzW1JfSVZFQ10gPSBJVkVDX0hJTk9J TlQ7DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIHMtPm90aGVyY2huLT5ycmVnc1tSX0lW RUNdID0gSVZFQ19MT05PSU5UOw0KICAgICAgICBzLT5ycmVnc1tSX0lOVFJdICY9IH5JTlRS X1RYSU5UQTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBzLT5vdGhlcmNobi0+cnJlZ3NbUl9J TlRSXSAmPSB+SU5UUl9UWElOVEI7DQogICAgICAgIGlmIChzLT53cmVnc1tXX01JTlRSXSAm IE1JTlRSX1NUQVRVU0hJKQ0KICAgICAgICAgICAgcy0+cnJlZ3NbUl9JVkVDXSA9IElWRUNf SElOT0lOVDsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcy0+cnJlZ3NbUl9JVkVDXSA9 IElWRUNfTE9OT0lOVDsNCiAgICAgICAgcy0+b3RoZXJjaG4tPnJyZWdzW1JfSU5UUl0gJj0g fklOVFJfVFhJTlRCOw0KICAgIH0NCiAgICBpZiAocy0+cnhpbnQpDQogICAgICAgIHNldF9y eGludChzKTsNCiAgICBlc2NjX3VwZGF0ZV9pcnEocyk7DQp9DQoNCnN0YXRpYyB2b2lkIGVz Y2NfdXBkYXRlX3BhcmFtZXRlcnMoQ2hhbm5lbFN0YXRlICpzKQ0Kew0KICAgIGludCBzcGVl ZCwgcGFyaXR5LCBkYXRhX2JpdHMsIHN0b3BfYml0czsNCiAgICBRRU1VU2VyaWFsU2V0UGFy YW1zIHNzcDsNCg0KICAgIGlmICghcy0+Y2hyIHx8IHMtPnR5cGUgIT0gc2VyKQ0KICAgICAg ICByZXR1cm47DQoNCiAgICBpZiAocy0+d3JlZ3NbV19UWENUUkwxXSAmIFRYQ1RSTDFfUEFS RU4pIHsNCiAgICAgICAgaWYgKHMtPndyZWdzW1dfVFhDVFJMMV0gJiBUWENUUkwxX1BBUkVW KQ0KICAgICAgICAgICAgcGFyaXR5ID0gJ0UnOw0KICAgICAgICBlbHNlDQogICAgICAgICAg ICBwYXJpdHkgPSAnTyc7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcGFyaXR5ID0gJ04nOw0K ICAgIH0NCiAgICBpZiAoKHMtPndyZWdzW1dfVFhDVFJMMV0gJiBUWENUUkwxX1NUUE1TSykg PT0gVFhDVFJMMV8yU1RPUCkNCiAgICAgICAgc3RvcF9iaXRzID0gMjsNCiAgICBlbHNlDQog ICAgICAgIHN0b3BfYml0cyA9IDE7DQogICAgc3dpdGNoIChzLT53cmVnc1tXX1RYQ1RSTDJd ICYgVFhDVFJMMl9CSVRNU0spIHsNCiAgICBjYXNlIFRYQ1RSTDJfNUJJVFM6DQogICAgICAg IGRhdGFfYml0cyA9IDU7DQogICAgICAgIGJyZWFrOw0KICAgIGNhc2UgVFhDVFJMMl83QklU UzoNCiAgICAgICAgZGF0YV9iaXRzID0gNzsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSBU WENUUkwyXzZCSVRTOg0KICAgICAgICBkYXRhX2JpdHMgPSA2Ow0KICAgICAgICBicmVhazsN CiAgICBkZWZhdWx0Og0KICAgIGNhc2UgVFhDVFJMMl84QklUUzoNCiAgICAgICAgZGF0YV9i aXRzID0gODsNCiAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIHNwZWVkID0gcy0+Y2xvY2sg LyAoKHMtPndyZWdzW1dfQlJHTE9dIHwgKHMtPndyZWdzW1dfQlJHSEldIDw8IDgpKSArIDIp Ow0KICAgIHN3aXRjaCAocy0+d3JlZ3NbV19UWENUUkwxXSAmIFRYQ1RSTDFfQ0xLTVNLKSB7 DQogICAgY2FzZSBUWENUUkwxX0NMSzFYOg0KICAgICAgICBicmVhazsNCiAgICBjYXNlIFRY Q1RSTDFfQ0xLMTZYOg0KICAgICAgICBzcGVlZCAvPSAxNjsNCiAgICAgICAgYnJlYWs7DQog ICAgY2FzZSBUWENUUkwxX0NMSzMyWDoNCiAgICAgICAgc3BlZWQgLz0gMzI7DQogICAgICAg IGJyZWFrOw0KICAgIGRlZmF1bHQ6DQogICAgY2FzZSBUWENUUkwxX0NMSzY0WDoNCiAgICAg ICAgc3BlZWQgLz0gNjQ7DQogICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICBzc3Auc3BlZWQg PSBzcGVlZDsNCiAgICBzc3AucGFyaXR5ID0gcGFyaXR5Ow0KICAgIHNzcC5kYXRhX2JpdHMg PSBkYXRhX2JpdHM7DQogICAgc3NwLnN0b3BfYml0cyA9IHN0b3BfYml0czsNCiAgICBTRVJf RFBSSU5URigiY2hhbm5lbCAlYzogc3BlZWQ9JWQgcGFyaXR5PSVjIGRhdGE9JWQgc3RvcD0l ZFxuIiwgQ0hOX0MocyksDQogICAgICAgICAgICAgICAgc3BlZWQsIHBhcml0eSwgZGF0YV9i aXRzLCBzdG9wX2JpdHMpOw0KICAgIHFlbXVfY2hyX2lvY3RsKHMtPmNociwgQ0hSX0lPQ1RM X1NFUklBTF9TRVRfUEFSQU1TLCAmc3NwKTsNCn0NCg0Kc3RhdGljIHZvaWQgZXNjY19tZW1f d3JpdGUodm9pZCAqb3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHZhbCwgdW5zaWduZWQgc2l6ZSkNCnsNCiAg ICBTZXJpYWxTdGF0ZSAqc2VyaWFsID0gb3BhcXVlOw0KICAgIENoYW5uZWxTdGF0ZSAqczsN CiAgICB1aW50MzJfdCBzYWRkcjsNCiAgICBpbnQgbmV3cmVnLCBjaGFubmVsOw0KDQogICAg dmFsICY9IDB4ZmY7DQogICAgc2FkZHIgPSAoYWRkciA+PiBzZXJpYWwtPml0X3NoaWZ0KSAm IDE7DQogICAgY2hhbm5lbCA9IChhZGRyID4+IChzZXJpYWwtPml0X3NoaWZ0ICsgMSkpICYg MTsNCiAgICBzID0gJnNlcmlhbC0+Y2huW2NoYW5uZWxdOw0KICAgIHN3aXRjaCAoc2FkZHIp IHsNCiAgICBjYXNlIFNFUklBTF9DVFJMOg0KICAgICAgICBTRVJfRFBSSU5URigiV3JpdGUg Y2hhbm5lbCAlYywgcmVnWyVkXSA9ICUyLjJ4XG4iLCBDSE5fQyhzKSwgcy0+cmVnLA0KICAg ICAgICAgICAgICAgICAgICB2YWwgJiAweGZmKTsNCiAgICAgICAgbmV3cmVnID0gMDsNCiAg ICAgICAgc3dpdGNoIChzLT5yZWcpIHsNCiAgICAgICAgY2FzZSBXX0NNRDoNCiAgICAgICAg ICAgIG5ld3JlZyA9IHZhbCAmIENNRF9QVFJfTUFTSzsNCiAgICAgICAgICAgIHZhbCAmPSBD TURfQ01EX01BU0s7DQogICAgICAgICAgICBzd2l0Y2ggKHZhbCkgew0KICAgICAgICAgICAg Y2FzZSBDTURfSEk6DQogICAgICAgICAgICAgICAgbmV3cmVnIHw9IENNRF9ISTsNCiAgICAg ICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGNhc2UgQ01EX0NMUl9UWElOVDoNCiAg ICAgICAgICAgICAgICBjbHJfdHhpbnQocyk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQog ICAgICAgICAgICBjYXNlIENNRF9DTFJfSVVTOg0KICAgICAgICAgICAgICAgIGlmIChzLT5y eGludF91bmRlcl9zdmMpIHsNCiAgICAgICAgICAgICAgICAgICAgcy0+cnhpbnRfdW5kZXJf c3ZjID0gMDsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHMtPnR4aW50KSB7DQogICAgICAg ICAgICAgICAgICAgICAgICBzZXRfdHhpbnQocyk7DQogICAgICAgICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHMtPnR4aW50X3VuZGVyX3N2Yykgew0KICAg ICAgICAgICAgICAgICAgICBzLT50eGludF91bmRlcl9zdmMgPSAwOw0KICAgICAgICAgICAg ICAgIH0NCiAgICAgICAgICAgICAgICBlc2NjX3VwZGF0ZV9pcnEocyk7DQogICAgICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIGJy ZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2Ug V19JTlRSIC4uLiBXX1JYQ1RSTDoNCiAgICAgICAgY2FzZSBXX1NZTkMxIC4uLiBXX1RYQlVG Og0KICAgICAgICBjYXNlIFdfTUlTQzEgLi4uIFdfQ0xPQ0s6DQogICAgICAgIGNhc2UgV19N SVNDMiAuLi4gV19FWFRJTlQ6DQogICAgICAgICAgICBzLT53cmVnc1tzLT5yZWddID0gdmFs Ow0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgV19UWENUUkwxOg0KICAgICAg ICBjYXNlIFdfVFhDVFJMMjoNCiAgICAgICAgICAgIHMtPndyZWdzW3MtPnJlZ10gPSB2YWw7 DQogICAgICAgICAgICBlc2NjX3VwZGF0ZV9wYXJhbWV0ZXJzKHMpOw0KICAgICAgICAgICAg YnJlYWs7DQogICAgICAgIGNhc2UgV19CUkdMTzoNCiAgICAgICAgY2FzZSBXX0JSR0hJOg0K ICAgICAgICAgICAgcy0+d3JlZ3Nbcy0+cmVnXSA9IHZhbDsNCiAgICAgICAgICAgIHMtPnJy ZWdzW3MtPnJlZ10gPSB2YWw7DQogICAgICAgICAgICBlc2NjX3VwZGF0ZV9wYXJhbWV0ZXJz KHMpOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgV19NSU5UUjoNCiAgICAg ICAgICAgIHN3aXRjaCAodmFsICYgTUlOVFJfUlNUX01BU0spIHsNCiAgICAgICAgICAgIGNh c2UgMDoNCiAgICAgICAgICAgIGRlZmF1bHQ6DQogICAgICAgICAgICAgICAgYnJlYWs7DQog ICAgICAgICAgICBjYXNlIE1JTlRSX1JTVF9COg0KICAgICAgICAgICAgICAgIGVzY2NfcmVz ZXRfY2huKCZzZXJpYWwtPmNoblswXSk7DQogICAgICAgICAgICAgICAgcmV0dXJuOw0KICAg ICAgICAgICAgY2FzZSBNSU5UUl9SU1RfQToNCiAgICAgICAgICAgICAgICBlc2NjX3Jlc2V0 X2Nobigmc2VyaWFsLT5jaG5bMV0pOw0KICAgICAgICAgICAgICAgIHJldHVybjsNCiAgICAg ICAgICAgIGNhc2UgTUlOVFJfUlNUX0FMTDoNCiAgICAgICAgICAgICAgICBlc2NjX3Jlc2V0 KCZzZXJpYWwtPmJ1c2Rldi5xZGV2KTsNCiAgICAgICAgICAgICAgICByZXR1cm47DQogICAg ICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgZGVmYXVsdDoNCiAgICAg ICAgICAgIGJyZWFrOw0KICAgICAgICB9DQogICAgICAgIGlmIChzLT5yZWcgPT0gMCkNCiAg ICAgICAgICAgIHMtPnJlZyA9IG5ld3JlZzsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAg cy0+cmVnID0gMDsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSBTRVJJQUxfREFUQToNCiAg ICAgICAgU0VSX0RQUklOVEYoIldyaXRlIGNoYW5uZWwgJWMsIGNoICVkXG4iLCBDSE5fQyhz KSwgdmFsKTsNCiAgICAgICAgcy0+dHggPSB2YWw7DQogICAgICAgIGlmIChzLT53cmVnc1tX X1RYQ1RSTDJdICYgVFhDVFJMMl9UWEVOKSB7IC8vIHR4IGVuYWJsZWQNCiAgICAgICAgICAg IGlmIChzLT5jaHIpDQogICAgICAgICAgICAgICAgcWVtdV9jaHJfd3JpdGUocy0+Y2hyLCAm cy0+dHgsIDEpOw0KICAgICAgICAgICAgZWxzZSBpZiAocy0+dHlwZSA9PSBrYmQgJiYgIXMt PmRpc2FibGVkKSB7DQogICAgICAgICAgICAgICAgaGFuZGxlX2tiZF9jb21tYW5kKHMsIHZh bCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcy0+cnJlZ3NbUl9TVEFU VVNdIHw9IFNUQVRVU19UWEVNUFRZOyAvLyBUeCBidWZmZXIgZW1wdHkNCiAgICAgICAgcy0+ cnJlZ3NbUl9TUEVDXSB8PSBTUEVDX0FMTFNFTlQ7IC8vIEFsbCBzZW50DQogICAgICAgIHNl dF90eGludChzKTsNCiAgICAgICAgYnJlYWs7DQogICAgZGVmYXVsdDoNCiAgICAgICAgYnJl YWs7DQogICAgfQ0KfQ0KDQpzdGF0aWMgdWludDY0X3QgZXNjY19tZW1fcmVhZCh2b2lkICpv cGFxdWUsIHRhcmdldF9waHlzX2FkZHJfdCBhZGRyLA0KICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgc2l6ZSkNCnsNCiAgICBTZXJpYWxTdGF0ZSAqc2VyaWFsID0g b3BhcXVlOw0KICAgIENoYW5uZWxTdGF0ZSAqczsNCiAgICB1aW50MzJfdCBzYWRkcjsNCiAg ICB1aW50MzJfdCByZXQ7DQogICAgaW50IGNoYW5uZWw7DQoNCiAgICBzYWRkciA9IChhZGRy ID4+IHNlcmlhbC0+aXRfc2hpZnQpICYgMTsNCiAgICBjaGFubmVsID0gKGFkZHIgPj4gKHNl cmlhbC0+aXRfc2hpZnQgKyAxKSkgJiAxOw0KICAgIHMgPSAmc2VyaWFsLT5jaG5bY2hhbm5l bF07DQogICAgc3dpdGNoIChzYWRkcikgew0KICAgIGNhc2UgU0VSSUFMX0NUUkw6DQogICAg ICAgIFNFUl9EUFJJTlRGKCJSZWFkIGNoYW5uZWwgJWMsIHJlZ1slZF0gPSAlMi4yeFxuIiwg Q0hOX0MocyksIHMtPnJlZywNCiAgICAgICAgICAgICAgICAgICAgcy0+cnJlZ3Nbcy0+cmVn XSk7DQogICAgICAgIHJldCA9IHMtPnJyZWdzW3MtPnJlZ107DQogICAgICAgIHMtPnJlZyA9 IDA7DQogICAgICAgIHJldHVybiByZXQ7DQogICAgY2FzZSBTRVJJQUxfREFUQToNCiAgICAg ICAgcy0+cnJlZ3NbUl9TVEFUVVNdICY9IH5TVEFUVVNfUlhBVjsNCiAgICAgICAgY2xyX3J4 aW50KHMpOw0KICAgICAgICBpZiAocy0+dHlwZSA9PSBrYmQgfHwgcy0+dHlwZSA9PSBtb3Vz ZSkNCiAgICAgICAgICAgIHJldCA9IGdldF9xdWV1ZShzKTsNCiAgICAgICAgZWxzZQ0KICAg ICAgICAgICAgcmV0ID0gcy0+cng7DQogICAgICAgIFNFUl9EUFJJTlRGKCJSZWFkIGNoYW5u ZWwgJWMsIGNoICVkXG4iLCBDSE5fQyhzKSwgcmV0KTsNCiAgICAgICAgaWYgKHMtPmNocikN CiAgICAgICAgICAgIHFlbXVfY2hyX2FjY2VwdF9pbnB1dChzLT5jaHIpOw0KICAgICAgICBy ZXR1cm4gcmV0Ow0KICAgIGRlZmF1bHQ6DQogICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICBy ZXR1cm4gMDsNCn0NCg0Kc3RhdGljIGNvbnN0IE1lbW9yeVJlZ2lvbk9wcyBlc2NjX21lbV9v cHMgPSB7DQogICAgLnJlYWQgPSBlc2NjX21lbV9yZWFkLA0KICAgIC53cml0ZSA9IGVzY2Nf bWVtX3dyaXRlLA0KICAgIC5lbmRpYW5uZXNzID0gREVWSUNFX05BVElWRV9FTkRJQU4sDQog ICAgLnZhbGlkID0gew0KICAgICAgICAubWluX2FjY2Vzc19zaXplID0gMSwNCiAgICAgICAg Lm1heF9hY2Nlc3Nfc2l6ZSA9IDEsDQogICAgfSwNCn07DQoNCnN0YXRpYyBpbnQgc2VyaWFs X2Nhbl9yZWNlaXZlKHZvaWQgKm9wYXF1ZSkNCnsNCiAgICBDaGFubmVsU3RhdGUgKnMgPSBv cGFxdWU7DQogICAgaW50IHJldDsNCg0KICAgIGlmICgoKHMtPndyZWdzW1dfUlhDVFJMXSAm IFJYQ1RSTF9SWEVOKSA9PSAwKSAvLyBSeCBub3QgZW5hYmxlZA0KICAgICAgICB8fCAoKHMt PnJyZWdzW1JfU1RBVFVTXSAmIFNUQVRVU19SWEFWKSA9PSBTVEFUVVNfUlhBVikpDQogICAg ICAgIC8vIGNoYXIgYWxyZWFkeSBhdmFpbGFibGUNCiAgICAgICAgcmV0ID0gMDsNCiAgICBl bHNlDQogICAgICAgIHJldCA9IDE7DQogICAgcmV0dXJuIHJldDsNCn0NCg0Kc3RhdGljIHZv aWQgc2VyaWFsX3JlY2VpdmVfYnl0ZShDaGFubmVsU3RhdGUgKnMsIGludCBjaCkNCnsNCiAg ICBTRVJfRFBSSU5URigiY2hhbm5lbCAlYyBwdXQgY2ggJWRcbiIsIENITl9DKHMpLCBjaCk7 DQogICAgcy0+cnJlZ3NbUl9TVEFUVVNdIHw9IFNUQVRVU19SWEFWOw0KICAgIHMtPnJ4ID0g Y2g7DQogICAgc2V0X3J4aW50KHMpOw0KfQ0KDQpzdGF0aWMgdm9pZCBzZXJpYWxfcmVjZWl2 ZV9icmVhayhDaGFubmVsU3RhdGUgKnMpDQp7DQogICAgcy0+cnJlZ3NbUl9TVEFUVVNdIHw9 IFNUQVRVU19CUks7DQogICAgZXNjY191cGRhdGVfaXJxKHMpOw0KfQ0KDQpzdGF0aWMgdm9p ZCBzZXJpYWxfcmVjZWl2ZTEodm9pZCAqb3BhcXVlLCBjb25zdCB1aW50OF90ICpidWYsIGlu dCBzaXplKQ0Kew0KICAgIENoYW5uZWxTdGF0ZSAqcyA9IG9wYXF1ZTsNCiAgICBzZXJpYWxf cmVjZWl2ZV9ieXRlKHMsIGJ1ZlswXSk7DQp9DQoNCnN0YXRpYyB2b2lkIHNlcmlhbF9ldmVu dCh2b2lkICpvcGFxdWUsIGludCBldmVudCkNCnsNCiAgICBDaGFubmVsU3RhdGUgKnMgPSBv cGFxdWU7DQogICAgaWYgKGV2ZW50ID09IENIUl9FVkVOVF9CUkVBSykNCiAgICAgICAgc2Vy aWFsX3JlY2VpdmVfYnJlYWsocyk7DQp9DQoNCnN0YXRpYyBjb25zdCBWTVN0YXRlRGVzY3Jp cHRpb24gdm1zdGF0ZV9lc2NjX2NobiA9IHsNCiAgICAubmFtZSA9ImVzY2NfY2huIiwNCiAg ICAudmVyc2lvbl9pZCA9IDIsDQogICAgLm1pbmltdW1fdmVyc2lvbl9pZCA9IDEsDQogICAg Lm1pbmltdW1fdmVyc2lvbl9pZF9vbGQgPSAxLA0KICAgIC5maWVsZHMgICAgICA9IChWTVN0 YXRlRmllbGQgW10pIHsNCiAgICAgICAgVk1TVEFURV9VSU5UMzIodm1zdGF0ZV9kdW1teSwg Q2hhbm5lbFN0YXRlKSwNCiAgICAgICAgVk1TVEFURV9VSU5UMzIocmVnLCBDaGFubmVsU3Rh dGUpLA0KICAgICAgICBWTVNUQVRFX1VJTlQzMihyeGludCwgQ2hhbm5lbFN0YXRlKSwNCiAg ICAgICAgVk1TVEFURV9VSU5UMzIodHhpbnQsIENoYW5uZWxTdGF0ZSksDQogICAgICAgIFZN U1RBVEVfVUlOVDMyKHJ4aW50X3VuZGVyX3N2YywgQ2hhbm5lbFN0YXRlKSwNCiAgICAgICAg Vk1TVEFURV9VSU5UMzIodHhpbnRfdW5kZXJfc3ZjLCBDaGFubmVsU3RhdGUpLA0KICAgICAg ICBWTVNUQVRFX1VJTlQ4KHJ4LCBDaGFubmVsU3RhdGUpLA0KICAgICAgICBWTVNUQVRFX1VJ TlQ4KHR4LCBDaGFubmVsU3RhdGUpLA0KICAgICAgICBWTVNUQVRFX0JVRkZFUih3cmVncywg Q2hhbm5lbFN0YXRlKSwNCiAgICAgICAgVk1TVEFURV9CVUZGRVIocnJlZ3MsIENoYW5uZWxT dGF0ZSksDQogICAgICAgIFZNU1RBVEVfRU5EX09GX0xJU1QoKQ0KICAgIH0NCn07DQoNCnN0 YXRpYyBjb25zdCBWTVN0YXRlRGVzY3JpcHRpb24gdm1zdGF0ZV9lc2NjID0gew0KICAgIC5u YW1lID0iZXNjYyIsDQogICAgLnZlcnNpb25faWQgPSAyLA0KICAgIC5taW5pbXVtX3ZlcnNp b25faWQgPSAxLA0KICAgIC5taW5pbXVtX3ZlcnNpb25faWRfb2xkID0gMSwNCiAgICAuZmll bGRzICAgICAgPSAoVk1TdGF0ZUZpZWxkIFtdKSB7DQogICAgICAgIFZNU1RBVEVfU1RSVUNU X0FSUkFZKGNobiwgU2VyaWFsU3RhdGUsIDIsIDIsIHZtc3RhdGVfZXNjY19jaG4sDQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWxTdGF0ZSksDQogICAgICAgIFZNU1RB VEVfRU5EX09GX0xJU1QoKQ0KICAgIH0NCn07DQoNCk1lbW9yeVJlZ2lvbiAqZXNjY19pbml0 KHRhcmdldF9waHlzX2FkZHJfdCBiYXNlLCBxZW11X2lycSBpcnFBLCBxZW11X2lycSBpcnFC LA0KICAgICAgICAgICAgICBDaGFyRHJpdmVyU3RhdGUgKmNockEsIENoYXJEcml2ZXJTdGF0 ZSAqY2hyQiwNCiAgICAgICAgICAgICAgaW50IGNsb2NrLCBpbnQgaXRfc2hpZnQpDQp7DQog ICAgRGV2aWNlU3RhdGUgKmRldjsNCiAgICBTeXNCdXNEZXZpY2UgKnM7DQogICAgU2VyaWFs U3RhdGUgKmQ7DQoNCiAgICBkZXYgPSBxZGV2X2NyZWF0ZShOVUxMLCAiZXNjYyIpOw0KICAg IHFkZXZfcHJvcF9zZXRfdWludDMyKGRldiwgImRpc2FibGVkIiwgMCk7DQogICAgcWRldl9w cm9wX3NldF91aW50MzIoZGV2LCAiZnJlcXVlbmN5IiwgY2xvY2spOw0KICAgIHFkZXZfcHJv cF9zZXRfdWludDMyKGRldiwgIml0X3NoaWZ0IiwgaXRfc2hpZnQpOw0KICAgIHFkZXZfcHJv cF9zZXRfY2hyKGRldiwgImNockIiLCBjaHJCKTsNCiAgICBxZGV2X3Byb3Bfc2V0X2Nocihk ZXYsICJjaHJBIiwgY2hyQSk7DQogICAgcWRldl9wcm9wX3NldF91aW50MzIoZGV2LCAiY2hu QnR5cGUiLCBzZXIpOw0KICAgIHFkZXZfcHJvcF9zZXRfdWludDMyKGRldiwgImNobkF0eXBl Iiwgc2VyKTsNCiAgICBxZGV2X2luaXRfbm9mYWlsKGRldik7DQogICAgcyA9IHN5c2J1c19m cm9tX3FkZXYoZGV2KTsNCiAgICBzeXNidXNfY29ubmVjdF9pcnEocywgMCwgaXJxQik7DQog ICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDEsIGlycUEpOw0KICAgIGlmIChiYXNlKSB7DQog ICAgICAgIHN5c2J1c19tbWlvX21hcChzLCAwLCBiYXNlKTsNCiAgICB9DQoNCiAgICBkID0g RlJPTV9TWVNCVVMoU2VyaWFsU3RhdGUsIHMpOw0KICAgIHJldHVybiAmZC0+bW1pbzsNCn0N Cg0Kc3RhdGljIGNvbnN0IHVpbnQ4X3Qga2V5Y29kZXNbMTI4XSA9IHsNCiAgICAxMjcsIDI5 LCAzMCwgMzEsIDMyLCAzMywgMzQsIDM1LCAzNiwgMzcsIDM4LCAzOSwgNDAsIDQxLCA0Mywg NTMsDQogICAgNTQsIDU1LCA1NiwgNTcsIDU4LCA1OSwgNjAsIDYxLCA2MiwgNjMsIDY0LCA2 NSwgODksIDc2LCA3NywgNzgsDQogICAgNzksIDgwLCA4MSwgODIsIDgzLCA4NCwgODUsIDg2 LCA4NywgNDIsIDk5LCA4OCwgMTAwLCAxMDEsIDEwMiwgMTAzLA0KICAgIDEwNCwgMTA1LCAx MDYsIDEwNywgMTA4LCAxMDksIDExMCwgNDcsIDE5LCAxMjEsIDExOSwgNSwgNiwgOCwgMTAs IDEyLA0KICAgIDE0LCAxNiwgMTcsIDE4LCA3LCA5OCwgMjMsIDY4LCA2OSwgNzAsIDcxLCA5 MSwgOTIsIDkzLCAxMjUsIDExMiwNCiAgICAxMTMsIDExNCwgOTQsIDUwLCAwLCAwLCAxMjQs IDksIDExLCAwLCAwLCAwLCAwLCAwLCAwLCAwLA0KICAgIDkwLCAwLCA0NiwgMjIsIDEzLCAx MTEsIDUyLCAyMCwgOTYsIDI0LCAyOCwgNzQsIDI3LCAxMjMsIDQ0LCA2NiwNCiAgICAwLCA0 NSwgMiwgNCwgNDgsIDAsIDAsIDIxLCAwLCAwLCAwLCAwLCAwLCAxMjAsIDEyMiwgNjcsDQp9 Ow0KDQpzdGF0aWMgY29uc3QgdWludDhfdCBlMF9rZXljb2Rlc1sxMjhdID0gew0KICAgIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQogICAgMCwg MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgOTAsIDc2LCAwLCAwLA0KICAgIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsDQogICAgMCwg MCwgMCwgMCwgMCwgMTA5LCAwLCAwLCAxMywgMCwgMCwgMCwgMCwgMCwgMCwgMCwNCiAgICAw LCAwLCAwLCAwLCAwLCAwLCAwLCA2OCwgNjksIDcwLCAwLCA5MSwgMCwgOTMsIDAsIDExMiwN CiAgICAxMTMsIDExNCwgOTQsIDUwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAw LCAwLA0KICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAs IDAsDQogICAgMSwgMywgMjUsIDI2LCA0OSwgNTIsIDcyLCA3MywgOTcsIDk5LCAxMTEsIDEx OCwgMTIwLCAxMjIsIDY3LCAwLA0KfTsNCg0Kc3RhdGljIHZvaWQgc3Vua2JkX2V2ZW50KHZv aWQgKm9wYXF1ZSwgaW50IGNoKQ0Kew0KICAgIENoYW5uZWxTdGF0ZSAqcyA9IG9wYXF1ZTsN CiAgICBpbnQgcmVsZWFzZSA9IGNoICYgMHg4MDsNCg0KICAgIEtCRF9EUFJJTlRGKCJVbnRy YW5zbGF0ZWQga2V5Y29kZSAlMi4yeCAoJXMpXG4iLCBjaCwgcmVsZWFzZT8gInJlbGVhc2Ui IDoNCiAgICAgICAgICAgICAgICAicHJlc3MiKTsNCiAgICBzd2l0Y2ggKGNoKSB7DQogICAg Y2FzZSA1ODogLy8gQ2FwcyBsb2NrIHByZXNzDQogICAgICAgIHMtPmNhcHNfbG9ja19tb2Rl IF49IDE7DQogICAgICAgIGlmIChzLT5jYXBzX2xvY2tfbW9kZSA9PSAyKQ0KICAgICAgICAg ICAgcmV0dXJuOyAvLyBEcm9wIHNlY29uZCBwcmVzcw0KICAgICAgICBicmVhazsNCiAgICBj YXNlIDY5OiAvLyBOdW0gbG9jayBwcmVzcw0KICAgICAgICBzLT5udW1fbG9ja19tb2RlIF49 IDE7DQogICAgICAgIGlmIChzLT5udW1fbG9ja19tb2RlID09IDIpDQogICAgICAgICAgICBy ZXR1cm47IC8vIERyb3Agc2Vjb25kIHByZXNzDQogICAgICAgIGJyZWFrOw0KICAgIGNhc2Ug MTg2OiAvLyBDYXBzIGxvY2sgcmVsZWFzZQ0KICAgICAgICBzLT5jYXBzX2xvY2tfbW9kZSBe PSAyOw0KICAgICAgICBpZiAocy0+Y2Fwc19sb2NrX21vZGUgPT0gMykNCiAgICAgICAgICAg IHJldHVybjsgLy8gRHJvcCBmaXJzdCByZWxlYXNlDQogICAgICAgIGJyZWFrOw0KICAgIGNh c2UgMTk3OiAvLyBOdW0gbG9jayByZWxlYXNlDQogICAgICAgIHMtPm51bV9sb2NrX21vZGUg Xj0gMjsNCiAgICAgICAgaWYgKHMtPm51bV9sb2NrX21vZGUgPT0gMykNCiAgICAgICAgICAg IHJldHVybjsgLy8gRHJvcCBmaXJzdCByZWxlYXNlDQogICAgICAgIGJyZWFrOw0KICAgIGNh c2UgMHhlMDoNCiAgICAgICAgcy0+ZTBfbW9kZSA9IDE7DQogICAgICAgIHJldHVybjsNCiAg ICBkZWZhdWx0Og0KICAgICAgICBicmVhazsNCiAgICB9DQogICAgaWYgKHMtPmUwX21vZGUp IHsNCiAgICAgICAgcy0+ZTBfbW9kZSA9IDA7DQogICAgICAgIGNoID0gZTBfa2V5Y29kZXNb Y2ggJiAweDdmXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBjaCA9IGtleWNvZGVzW2NoICYg MHg3Zl07DQogICAgfQ0KICAgIEtCRF9EUFJJTlRGKCJUcmFuc2xhdGVkIGtleWNvZGUgJTIu MnhcbiIsIGNoKTsNCiAgICBwdXRfcXVldWUocywgY2ggfCByZWxlYXNlKTsNCiAgICBpZiAo Y2ggPT0gMHg0YyAmJiByZWxlYXNlKSB7DQogICAgICAgIEtCRF9EUFJJTlRGKCJDdHJsIHJl bGVhc2UsIG5vdyBpZGxlP1xuIik7DQogICAgICAgIHB1dF9xdWV1ZShzLCAweDdmKTsNCiAg ICB9DQp9DQoNCnN0YXRpYyB2b2lkIGhhbmRsZV9rYmRfY29tbWFuZChDaGFubmVsU3RhdGUg KnMsIGludCB2YWwpDQp7DQogICAgS0JEX0RQUklOVEYoIkNvbW1hbmQgJWRcbiIsIHZhbCk7 DQogICAgaWYgKHMtPmxlZF9tb2RlKSB7IC8vIElnbm9yZSBsZWQgYnl0ZQ0KICAgICAgICBz LT5sZWRfbW9kZSA9IDA7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgc3dpdGNoICh2 YWwpIHsNCiAgICBjYXNlIDE6IC8vIFJlc2V0LCByZXR1cm4gdHlwZSBjb2RlDQogICAgICAg IGNsZWFyX3F1ZXVlKHMpOw0KICAgICAgICBwdXRfcXVldWUocywgMHhmZik7DQogICAgICAg IHB1dF9xdWV1ZShzLCA0KTsgLy8gVHlwZSA0DQogICAgICAgIHB1dF9xdWV1ZShzLCAweDdm KTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSAweGU6IC8vIFNldCBsZWRzDQogICAgICAg IHMtPmxlZF9tb2RlID0gMTsNCiAgICAgICAgYnJlYWs7DQogICAgY2FzZSA3OiAvLyBRdWVy eSBsYXlvdXQNCiAgICBjYXNlIDB4ZjoNCiAgICAgICAgY2xlYXJfcXVldWUocyk7DQogICAg ICAgIHB1dF9xdWV1ZShzLCAweGZlKTsNCiAgICAgICAgcHV0X3F1ZXVlKHMsIDApOyAvLyBY WFgsIGxheW91dD8NCiAgICAgICAgYnJlYWs7DQogICAgZGVmYXVsdDoNCiAgICAgICAgYnJl YWs7DQogICAgfQ0KfQ0KDQpzdGF0aWMgdm9pZCBzdW5tb3VzZV9ldmVudCh2b2lkICpvcGFx dWUsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGR4LCBpbnQgZHksIGlu dCBkeiwgaW50IGJ1dHRvbnNfc3RhdGUpDQp7DQogICAgQ2hhbm5lbFN0YXRlICpzID0gb3Bh cXVlOw0KICAgIGludCBjaDsNCg0KICAgIE1TX0RQUklOVEYoImR4PSVkIGR5PSVkIGJ1dHRv bnM9JTAxeFxuIiwgZHgsIGR5LCBidXR0b25zX3N0YXRlKTsNCg0KICAgIGNoID0gMHg4MCB8 IDB4NzsgLyogcHJvdG9jb2wgc3RhcnQgYnl0ZSwgbm8gYnV0dG9ucyBwcmVzc2VkICovDQoN CiAgICBpZiAoYnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VWRU5UX0xCVVRUT04pDQogICAgICAg IGNoIF49IDB4NDsNCiAgICBpZiAoYnV0dG9uc19zdGF0ZSAmIE1PVVNFX0VWRU5UX01CVVRU T04pDQogICAgICAgIGNoIF49IDB4MjsNCiAgICBpZiAoYnV0dG9uc19zdGF0ZSAmIE1PVVNF X0VWRU5UX1JCVVRUT04pDQogICAgICAgIGNoIF49IDB4MTsNCg0KICAgIHB1dF9xdWV1ZShz LCBjaCk7DQoNCiAgICBjaCA9IGR4Ow0KDQogICAgaWYgKGNoID4gMTI3KQ0KICAgICAgICBj aCA9IDEyNzsNCiAgICBlbHNlIGlmIChjaCA8IC0xMjcpDQogICAgICAgIGNoID0gLTEyNzsN Cg0KICAgIHB1dF9xdWV1ZShzLCBjaCAmIDB4ZmYpOw0KDQogICAgY2ggPSAtZHk7DQoNCiAg ICBpZiAoY2ggPiAxMjcpDQogICAgICAgIGNoID0gMTI3Ow0KICAgIGVsc2UgaWYgKGNoIDwg LTEyNykNCiAgICAgICAgY2ggPSAtMTI3Ow0KDQogICAgcHV0X3F1ZXVlKHMsIGNoICYgMHhm Zik7DQoNCiAgICAvLyBNU0MgcHJvdG9jb2wgc3BlY2lmeSB0d28gZXh0cmEgbW90aW9uIGJ5 dGVzDQoNCiAgICBwdXRfcXVldWUocywgMCk7DQogICAgcHV0X3F1ZXVlKHMsIDApOw0KfQ0K DQp2b2lkIHNsYXZpb19zZXJpYWxfbXNfa2JkX2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGJh c2UsIHFlbXVfaXJxIGlycSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg ZGlzYWJsZWQsIGludCBjbG9jaywgaW50IGl0X3NoaWZ0KQ0Kew0KICAgIERldmljZVN0YXRl ICpkZXY7DQogICAgU3lzQnVzRGV2aWNlICpzOw0KDQogICAgZGV2ID0gcWRldl9jcmVhdGUo TlVMTCwgImVzY2MiKTsNCiAgICBxZGV2X3Byb3Bfc2V0X3VpbnQzMihkZXYsICJkaXNhYmxl ZCIsIGRpc2FibGVkKTsNCiAgICBxZGV2X3Byb3Bfc2V0X3VpbnQzMihkZXYsICJmcmVxdWVu Y3kiLCBjbG9jayk7DQogICAgcWRldl9wcm9wX3NldF91aW50MzIoZGV2LCAiaXRfc2hpZnQi LCBpdF9zaGlmdCk7DQogICAgcWRldl9wcm9wX3NldF9jaHIoZGV2LCAiY2hyQiIsIE5VTEwp Ow0KICAgIHFkZXZfcHJvcF9zZXRfY2hyKGRldiwgImNockEiLCBOVUxMKTsNCiAgICBxZGV2 X3Byb3Bfc2V0X3VpbnQzMihkZXYsICJjaG5CdHlwZSIsIG1vdXNlKTsNCiAgICBxZGV2X3By b3Bfc2V0X3VpbnQzMihkZXYsICJjaG5BdHlwZSIsIGtiZCk7DQogICAgcWRldl9pbml0X25v ZmFpbChkZXYpOw0KICAgIHMgPSBzeXNidXNfZnJvbV9xZGV2KGRldik7DQogICAgc3lzYnVz X2Nvbm5lY3RfaXJxKHMsIDAsIGlycSk7DQogICAgc3lzYnVzX2Nvbm5lY3RfaXJxKHMsIDEs IGlycSk7DQogICAgc3lzYnVzX21taW9fbWFwKHMsIDAsIGJhc2UpOw0KfQ0KDQpzdGF0aWMg aW50IGVzY2NfaW5pdDEoU3lzQnVzRGV2aWNlICpkZXYpDQp7DQogICAgU2VyaWFsU3RhdGUg KnMgPSBGUk9NX1NZU0JVUyhTZXJpYWxTdGF0ZSwgZGV2KTsNCiAgICB1bnNpZ25lZCBpbnQg aTsNCg0KICAgIHMtPmNoblswXS5kaXNhYmxlZCA9IHMtPmRpc2FibGVkOw0KICAgIHMtPmNo blsxXS5kaXNhYmxlZCA9IHMtPmRpc2FibGVkOw0KICAgIGZvciAoaSA9IDA7IGkgPCAyOyBp KyspIHsNCiAgICAgICAgc3lzYnVzX2luaXRfaXJxKGRldiwgJnMtPmNobltpXS5pcnEpOw0K ICAgICAgICBzLT5jaG5baV0uY2huID0gMSAtIGk7DQogICAgICAgIHMtPmNobltpXS5jbG9j ayA9IHMtPmZyZXF1ZW5jeSAvIDI7DQogICAgICAgIGlmIChzLT5jaG5baV0uY2hyKSB7DQog ICAgICAgICAgICBxZW11X2Nocl9hZGRfaGFuZGxlcnMocy0+Y2huW2ldLmNociwgc2VyaWFs X2Nhbl9yZWNlaXZlLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlh bF9yZWNlaXZlMSwgc2VyaWFsX2V2ZW50LCAmcy0+Y2huW2ldKTsNCiAgICAgICAgfQ0KICAg IH0NCiAgICBzLT5jaG5bMF0ub3RoZXJjaG4gPSAmcy0+Y2huWzFdOw0KICAgIHMtPmNoblsx XS5vdGhlcmNobiA9ICZzLT5jaG5bMF07DQoNCiAgICBtZW1vcnlfcmVnaW9uX2luaXRfaW8o JnMtPm1taW8sICZlc2NjX21lbV9vcHMsIHMsICJlc2NjIiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgRVNDQ19TSVpFIDw8IHMtPml0X3NoaWZ0KTsNCiAgICBzeXNidXNfaW5pdF9t bWlvX3JlZ2lvbihkZXYsICZzLT5tbWlvKTsNCg0KICAgIGlmIChzLT5jaG5bMF0udHlwZSA9 PSBtb3VzZSkgew0KICAgICAgICBxZW11X2FkZF9tb3VzZV9ldmVudF9oYW5kbGVyKHN1bm1v dXNlX2V2ZW50LCAmcy0+Y2huWzBdLCAwLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJRRU1VIFN1biBNb3VzZSIpOw0KICAgIH0NCiAgICBpZiAocy0+Y2huWzFd LnR5cGUgPT0ga2JkKSB7DQogICAgICAgIHFlbXVfYWRkX2tiZF9ldmVudF9oYW5kbGVyKHN1 bmtiZF9ldmVudCwgJnMtPmNoblsxXSk7DQogICAgfQ0KDQogICAgcmV0dXJuIDA7DQp9DQoN CnN0YXRpYyBTeXNCdXNEZXZpY2VJbmZvIGVzY2NfaW5mbyA9IHsNCiAgICAuaW5pdCA9IGVz Y2NfaW5pdDEsDQogICAgLnFkZXYubmFtZSAgPSAiZXNjYyIsDQogICAgLnFkZXYuc2l6ZSAg PSBzaXplb2YoU2VyaWFsU3RhdGUpLA0KICAgIC5xZGV2LnZtc2QgID0gJnZtc3RhdGVfZXNj YywNCiAgICAucWRldi5yZXNldCA9IGVzY2NfcmVzZXQsDQogICAgLnFkZXYucHJvcHMgPSAo UHJvcGVydHlbXSkgew0KICAgICAgICBERUZJTkVfUFJPUF9VSU5UMzIoImZyZXF1ZW5jeSIs IFNlcmlhbFN0YXRlLCBmcmVxdWVuY3ksICAgMCksDQogICAgICAgIERFRklORV9QUk9QX1VJ TlQzMigiaXRfc2hpZnQiLCAgU2VyaWFsU3RhdGUsIGl0X3NoaWZ0LCAgICAwKSwNCiAgICAg ICAgREVGSU5FX1BST1BfVUlOVDMyKCJkaXNhYmxlZCIsICBTZXJpYWxTdGF0ZSwgZGlzYWJs ZWQsICAgIDApLA0KICAgICAgICBERUZJTkVfUFJPUF9VSU5UMzIoImRpc2FibGVkIiwgIFNl cmlhbFN0YXRlLCBkaXNhYmxlZCwgICAgMCksDQogICAgICAgIERFRklORV9QUk9QX1VJTlQz MigiY2huQnR5cGUiLCAgU2VyaWFsU3RhdGUsIGNoblswXS50eXBlLCAwKSwNCiAgICAgICAg REVGSU5FX1BST1BfVUlOVDMyKCJjaG5BdHlwZSIsICBTZXJpYWxTdGF0ZSwgY2huWzFdLnR5 cGUsIDApLA0KICAgICAgICBERUZJTkVfUFJPUF9DSFIoImNockIiLCBTZXJpYWxTdGF0ZSwg Y2huWzBdLmNociksDQogICAgICAgIERFRklORV9QUk9QX0NIUigiY2hyQSIsIFNlcmlhbFN0 YXRlLCBjaG5bMV0uY2hyKSwNCiAgICAgICAgREVGSU5FX1BST1BfRU5EX09GX0xJU1QoKSwN CiAgICB9DQp9Ow0KDQpzdGF0aWMgdm9pZCBlc2NjX3JlZ2lzdGVyX2RldmljZXModm9pZCkN CnsNCiAgICBzeXNidXNfcmVnaXN0ZXJfd2l0aHByb3AoJmVzY2NfaW5mbyk7DQp9DQoNCmRl dmljZV9pbml0KGVzY2NfcmVnaXN0ZXJfZGV2aWNlcykNCg0K --------------000603010002000200030704 Content-Type: text/plain; charset=windows-1252; name="escc.h" Content-Disposition: attachment; filename="escc.h" Content-Transfer-Encoding: base64 LyogZXNjYy5jICovDQojZGVmaW5lIEVTQ0NfU0laRSA0DQpNZW1vcnlSZWdpb24gKmVzY2Nf aW5pdCh0YXJnZXRfcGh5c19hZGRyX3QgYmFzZSwgcWVtdV9pcnEgaXJxQSwgcWVtdV9pcnEg aXJxQiwNCiAgICAgICAgICAgICAgQ2hhckRyaXZlclN0YXRlICpjaHJBLCBDaGFyRHJpdmVy U3RhdGUgKmNockIsDQogICAgICAgICAgICAgIGludCBjbG9jaywgaW50IGl0X3NoaWZ0KTsN Cg0Kdm9pZCBzbGF2aW9fc2VyaWFsX21zX2tiZF9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBi YXNlLCBxZW11X2lycSBpcnEsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGRpc2FibGVkLCBpbnQgY2xvY2ssIGludCBpdF9zaGlmdCk7DQoNCg== --------------000603010002000200030704--