Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 09 Oct 2007 17:47:50 +0100
From:      Bartosz Fabianowski <freebsd@chillt.de>
To:        freebsd-usb@freebsd.org
Subject:   Introducing support for Wacom Cintiq USB tablet
Message-ID:  <470BB0B6.5000102@chillt.de>

next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format.
--------------090005080400010106050709
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

Hi list

I got a Wacom Cintiq tablet last week and wrote a driver to make it 
usable under FreeBSD. On the hardware side, the driver communicates with 
the tablet via the FreeBSD USB stack. On the user side, it implements a 
subset of the Linux input framework just large enough to make the Linux 
Wacom X driver happy. The driver is thus compatible with the X driver 
from the Linux Wacom project [1]. The latter driver compiles and works 
on FreeBSD once two missing include files are copied over from Linux.

To allow the tablet to be accessed by multiple processes concurrently, 
the driver implements device cloning. As the tablet is detected, it 
shows up as /dev/uwacom0. This is just a placeholder device and cannot 
be opened. To read data from the tablet, open /dev/event0 - that device 
node is invisible, as that is how device cloning works.

Caveats:
* Only the Cintiq is supported at this time. It would be trivial to 
extend the driver to other Wacom models, but I don't want to publish 
code I cannot test.
* This is my first device driver, so expect there to be bugs. Feedback 
from people more knowledgeable is most welcome. I am especially 
uncertain about proper locking, 64 bit support and device cloning.
* The driver works well when X is launched via startx. When using a 
display manager such as kdm, the monitors for some reason are reset on X 
startup, leading to the Cintiq briefly detaching so that X does not 
detect it. The workaround I use is to log in via kdm, log out (at which 
point X restarts without reseting the monitors) and then log in again.
* The Linux Wacom X driver currently does not build or work with X.org 
7.3. You will need to portdowngrade your x11-servers/xorg-server to 
version 1.2.0_2,1.
* From the Linux Wacom package, wacdump, the X driver, xidump and 
xsetwacom work out of the box. wacomcpl-exec is a TCL/Tk script that 
hardcodes some paths which need to be patched before it will run on FreeBSD.

I have attached my driver and instructions for compiling the Linux Wacom 
X driver. In case the binary attachment gets scrubbed by mailman, I have 
also uploaded a copy at [2].

I hope others find this driver useful. I certainly am glad I can stick 
with FreeBSD while enjoying the pressure and tilt sensitivity of a Wacom 
tablet :). Finally, as writing this driver was done as part of my PhD: 
This work is financed by the "Irish Research Council for Science, 
Engineering and Technology: funded by the National Development Plan"

- Bartosz

[1] http://linuxwacom.sourceforge.net/
[2] http://www.chillt.de/bsdwacom.tbz

--------------090005080400010106050709
Content-Type: application/octet-stream;
 name="bsdwacom.tbz"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="bsdwacom.tbz"

YnNkd2Fjb20vAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDc1NSAA
MDAxNzUxIAAwMDAwMDAgADAwMDAwMDAwMDAwIDEwNzAyNzI2NTczIDAxMjc2NQAgNQAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHVuZG8A
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABic2R3YWNvbS9saW51eHdhY29tLwAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAMDAwNzU1IAAwMDE3NTEgADAwMDAwMCAAMDAwMDAwMDAwMDAg
MTA3MDI3Mjc2NjQgMDE1MTU1ACA1AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAHVzdGFyADAwdW5kbwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB3
aGVlbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAwMDAwIAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJz
ZHdhY29tL3V3YWNvbS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA3NTUgADAw
MTc1MSAAMDAwMDAwIAAwMDAwMDAwMDAwMCAxMDcwMjcyNzcwNSAwMTQyNTYAIDUAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDB1bmRvAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYnNkd2Fjb20vUkVBRE1FAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAxNzUxIAAwMDAwMDAgADAwMDAwMDA2MDMwIDEw
NzAyNzI3MjQ1IDAxMzY0MQAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB1c3RhcgAwMHVuZG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hl
ZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwOS8x
MC8yMDA3CgpUaGlzIGlzIGEgRnJlZUJTRCBkcml2ZXIgZm9yIHRoZSBXYWNvbSBDaW50aXEg
dGFibGV0LiBSZXBvcnQgYW55IHByb2JsZW1zIChhbmQgc3VjY2VzcyBzdG9yaWVzIDopIHRv
IDxmcmVlYnNkQGNoaWxsdC5kZT4uClRoaXMgd29yayBpcyBmaW5hbmNlZCBieSB0aGUgIkly
aXNoIFJlc2VhcmNoIENvdW5jaWwgZm9yIFNjaWVuY2UsIEVuZ2luZWVyaW5nIGFuZCBUZWNo
bm9sb2d5OiBmdW5kZWQgYnkgdGhlIE5hdGlvbmFsIERldmVsb3BtZW50IFBsYW4iCgpZb3Ug
Y2FuIGZpbmQgdGhlIG1vc3QgY3VycmVudCB2ZXJzaW9uIGF0OgpodHRwOi8vd3d3LmNoaWxs
dC5kZS9ic2R3YWNvbS50YnoKCk9uIHRoZSBoYXJkd2FyZSBzaWRlLCB0aGUgZHJpdmVyIGNv
bW11bmljYXRlcyB3aXRoIHRoZSB0YWJsZXQgdmlhIHRoZSBGcmVlQlNEIFVTQiBzdGFjay4g
T24gdGhlIHVzZXIgc2lkZSwgaXQgaW1wbGVtZW50cyBhIHN1YnNldCBvZiB0aGUgTGludXgg
aW5wdXQgZnJhbWV3b3JrIGp1c3QgbGFyZ2UgZW5vdWdoIHRvIG1ha2UgdGhlIExpbnV4IFdh
Y29tIFggZHJpdmVyIGhhcHB5LiBUaGUgZHJpdmVyIGlzIHRodXMgY29tcGF0aWJsZSB3aXRo
IHRoZSBYIGRyaXZlciBmcm9tIHRoZSBMaW51eCBXYWNvbSBwcm9qZWN0IFsxXS4KClRvIGFs
bG93IHRoZSB0YWJsZXQgdG8gYmUgYWNjZXNzZWQgYnkgbXVsdGlwbGUgcHJvY2Vzc2VzIGNv
bmN1cnJlbnRseSwgdGhlIGRyaXZlciBpbXBsZW1lbnRzIGRldmljZSBjbG9uaW5nLiBBcyB0
aGUgdGFibGV0IGlzIGRldGVjdGVkLCBpdCBzaG93cyB1cCBhcyAvZGV2L3V3YWNvbTAuIFRo
aXMgaXMganVzdCBhIHBsYWNlaG9sZGVyIGRldmljZSBhbmQgY2Fubm90IGJlIG9wZW5lZC4g
VG8gcmVhZCBkYXRhIGZyb20gdGhlIHRhYmxldCwgb3BlbiAvZGV2L2V2ZW50MCAtIHRoYXQg
ZGV2aWNlIG5vZGUgaXMgaW52aXNpYmxlLCBhcyB0aGF0IGlzIGhvdyBkZXZpY2UgY2xvbmlu
ZyB3b3Jrcy4KCkNhdmVhdHM6CiogT25seSB0aGUgQ2ludGlxIGlzIHN1cHBvcnRlZCBhdCB0
aGlzIHRpbWUuIEl0IHdvdWxkIGJlIHRyaXZpYWwgdG8gZXh0ZW5kIHRoZSBkcml2ZXIgdG8g
b3RoZXIgV2Fjb20gbW9kZWxzLCBidXQgSSBkb24ndCB3YW50IHRvIHB1Ymxpc2ggY29kZSBJ
IGNhbm5vdCB0ZXN0LgoqIFRoaXMgaXMgbXkgZmlyc3QgZGV2aWNlIGRyaXZlciwgc28gZXhw
ZWN0IHRoZXJlIHRvIGJlIGJ1Z3MuIEZlZWRiYWNrIGZyb20gcGVvcGxlIG1vcmUga25vd2xl
ZGdlYWJsZSBpcyBtb3N0IHdlbGNvbWUuIEkgYW0gZXNwZWNpYWxseSB1bmNlcnRhaW4gYWJv
dXQgcHJvcGVyIGxvY2tpbmcsIDY0IGJpdCBzdXBwb3J0IGFuZCBkZXZpY2UgY2xvbmluZy4K
KiBUaGUgZHJpdmVyIHdvcmtzIHdlbGwgd2hlbiBYIGlzIGxhdW5jaGVkIHZpYSBzdGFydHgu
IFdoZW4gdXNpbmcgYSBkaXNwbGF5IG1hbmFnZXIgc3VjaCBhcyBrZG0sIHRoZSBtb25pdG9y
cyBmb3Igc29tZSByZWFzb24gYXJlIHJlc2V0IG9uIFggc3RhcnR1cCwgbGVhZGluZyB0byB0
aGUgQ2ludGlxIGJyaWVmbHkgZGV0YWNoaW5nIHNvIHRoYXQgWCBkb2VzIG5vdCBkZXRlY3Qg
aXQuIFRoZSB3b3JrYXJvdW5kIEkgdXNlIGlzIHRvIGxvZyBpbiB2aWEga2RtLCBsb2cgb3V0
IChhdCB3aGljaCBwb2ludCBYIHJlc3RhcnRzIHdpdGhvdXQgcmVzZXRpbmcgdGhlIG1vbml0
b3JzKSBhbmQgdGhlbiBsb2cgaW4gYWdhaW4uCiogVGhlIExpbnV4IFdhY29tIFggZHJpdmVy
IGN1cnJlbnRseSBkb2VzIG5vdCBidWlsZCBvciB3b3JrIHdpdGggWC5vcmcgNy4zLiBZb3Ug
d2lsbCBuZWVkIHRvIHBvcnRkb3duZ3JhZGUgeW91ciB4MTEtc2VydmVycy94b3JnLXNlcnZl
ciB0byB2ZXJzaW9uIDEuMi4wXzIsMS4KKiBGcm9tIHRoZSBMaW51eCBXYWNvbSBwYWNrYWdl
LCB3YWNkdW1wLCB0aGUgWCBkcml2ZXIsIHhpZHVtcCBhbmQgeHNldHdhY29tIHdvcmsgb3V0
IG9mIHRoZSBib3guIHdhY29tY3BsLWV4ZWMgaXMgYSBUQ0wvVGsgc2NyaXB0IHRoYXQgaGFy
ZG9jZGVzIHNvbWUgcGF0aHMgd2hpY2ggbmVlZCB0byBiZSBwYXRjaGVkIGJlZm9yZSBpdCB3
aWxsIHJ1biBvbiBGcmVlQlNELgoKSW5zdHJ1Y3Rpb25zIChCU0Qga2VybmVsIGRyaXZlcik6
CjEuIHJ1bjoKdGFyIHhmIGJzZHdhY29tLnRiegpjZCBic2R3YWNvbS91d2Fjb20KbWFrZQoy
LiBhcyByb290IHJ1bjoKY3AgdXdhY29tLmtvIC9ib290L2tlcm5lbAplY2hvICd1d2Fjb21f
bG9hZD0iWUVTIiA+PiAvYm9vdC9sb2FkZXIuY29uZicKa2xkbG9hZCB1d2Fjb20KMy4gKHJl
LSlhdHRhY2ggdGFibGV0CjQuIGFzIHJvb3QgcnVuOgpoZXhkdW1wIC9kZXYvZXZlbnQwCjUu
IGFzIHlvdSBtb3ZlIHRoZSBzdHlsdXMgb24gdGhlIHRhYmxldCwgZGF0YSBzaG91bGQgYmUg
c3RyZWFtaW5nIGluCgpJbnN0cnVjdGlvbnMgKFggZHJpdmVyKToKMS4gcnVuOgpjZCBic2R3
YWNvbS9saW51eHdhY29tCmZldGNoICJodHRwOi8vb3ZoLmRsLnNvdXJjZWZvcmdlLm5ldC9z
b3VyY2Vmb3JnZS9saW51eHdhY29tL2xpbnV4d2Fjb20tMC43LjgtMy50YXIuYnoyIgouL3J1
bl9jb25maWd1cmUKY2QgbGludXh3YWNvbS0wLjcuOC0zCmdtYWtlCjIuIGFzIHJvb3QgcnVu
OgpjcCBzcmMveGRydi93YWNvbV9kcnYuc28gL3Vzci9sb2NhbC9saWIveG9yZy9tb2R1bGVz
L2lucHV0CjMuIHNldCB1cCB5b3VyIHhvcmcuY29uZiBhcyBwZXIgWzJdLCBzdWJzdGl0dXRp
bmcgL2Rldi9ldmVudDAgZm9yIHRoZSBkZXZpY2UgbmFtZQo0LiByZXN0YXJ0IFgsIGtlZXBp
bmcgaW4gbWluZCB0aGUgdGhpcmQgcG9pbnQgdW5kZXIgY2F2ZWF0cyBhYm92ZQoKSSBob3Bl
IG90aGVycyBmaW5kIHRoaXMgZHJpdmVyIHVzZWZ1bC4gSSBjZXJ0YWlubHkgYW0gZ2xhZCBJ
IGNhbiBzdGljayB3aXRoIEZyZWVCU0Qgd2hpbGUgZW5qb3lpbmcgdGhlIHByZXNzdXJlIGFu
ZCB0aWx0IHNlbnNpdGl2aXR5IG9mIGEgV2Fjb20gdGFibGV0IDopLgoKLSBCYXJ0b3N6Cgpb
MV0gaHR0cDovL2xpbnV4d2Fjb20uc291cmNlZm9yZ2UubmV0LwpbMl0gdy5jaGlsbHQuZGUv
YnNkd2Fjb20udGJ6CgpodHRwOi8vbGludXh3YWNvbS5zb3VyY2Vmb3JnZS5uZXQvaW5kZXgu
cGhwL2hvd3RvL3gxMQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAGJzZHdhY29tL3V3YWNvbS91d2Fjb20uYwAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAwMDA2NDQgADAwMTc1MSAAMDAwMDAwIAAwMDAwMDA2NzU1MyAxMDcwMjcyNTY0
MCAwMTU3MzEAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAdXN0YXIAMDB1bmRvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyotCiAqIENvcHly
aWdodCAoYykgMjAwNyBCYXJ0b3N6IEZhYmlhbm93c2tpIDxmcmVlYnNkQGNoaWxsdC5kZT4K
ICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICoKICogRmluYW5jZWQgYnkgdGhlICJJcmlzaCBS
ZXNlYXJjaCBDb3VuY2lsIGZvciBTY2llbmNlLCBFbmdpbmVlcmluZyBhbmQKICogVGVjaG5v
bG9neTogZnVuZGVkIGJ5IHRoZSBOYXRpb25hbCBEZXZlbG9wbWVudCBQbGFuIgogKgogKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCiAqIGFyZSBtZXQ6CiAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CiAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAogKiBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKICogQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IKICogQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTAogKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwogKiBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikKICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKICogTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WQogKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GCiAqIFNVQ0ggREFNQUdFLgogKi8KCi8qLQogKiBDb3B5
cmlnaHQgKGMpIDE5OTggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCiAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAqCiAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUg
Y29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCiAqIGJ5IExlbm5hcnQgQXVn
dXN0c3NvbiAobGVubmFydEBhdWd1c3Rzc29uLm5ldCkgYXQKICogQ2FybHN0ZWR0IFJlc2Vh
cmNoICYgVGVjaG5vbG9neS4KICoKICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwog
KiBhcmUgbWV0OgogKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAogKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCiAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CiAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICogMy4gQWxs
IGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0
aGlzIHNvZnR3YXJlCiAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xl
ZGdlbWVudDoKICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZl
bG9wZWQgYnkgdGhlIE5ldEJTRAogKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRz
IGNvbnRyaWJ1dG9ycy4KICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZv
dW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKICogICAgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCiAqICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZP
VU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUwogKiBgYEFTIElTJycgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQKICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUwogKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCiAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwogKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgogKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQogKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRQogKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICovCgojaW5j
bHVkZSA8c3lzL3BhcmFtLmg+CiNpbmNsdWRlIDxzeXMvc3lzdG0uaD4KI2luY2x1ZGUgPHN5
cy9rZXJuZWwuaD4KI2luY2x1ZGUgPHN5cy9tb2R1bGUuaD4KI2luY2x1ZGUgPHN5cy9idXMu
aD4KI2luY2x1ZGUgPHN5cy9jb25mLmg+CiNpbmNsdWRlIDxzeXMvdHR5Lmg+CiNpbmNsdWRl
IDxzeXMvbWFsbG9jLmg+CiNpbmNsdWRlIDxzeXMvc2lnbmFsdmFyLmg+CiNpbmNsdWRlIDxz
eXMvZW5kaWFuLmg+CiNpbmNsdWRlIDxzeXMvcHJvYy5oPgojaW5jbHVkZSA8c3lzL2ZjbnRs
Lmg+CiNpbmNsdWRlIDxzeXMvdWlvLmg+CiNpbmNsdWRlIDxzeXMvZmlsaW8uaD4KI2luY2x1
ZGUgPHN5cy9wb2xsLmg+CgojaW5jbHVkZSA8ZGV2L3VzYi91c2IuaD4KI2luY2x1ZGUgPGRl
di91c2IvdXNiZGkuaD4KI2luY2x1ZGUgPGRldi91c2IvdXNiZGlfdXRpbC5oPgoKI2RlZmlu
ZSBVU0JfVkVORE9SX1dBQ09NICAgICAgICAgICAgICAweDA1NmEKI2RlZmluZSBVU0JfUFJP
RFVDVF9XQUNPTV9DSU5USVFfMjFVWCAweDAwM2YKCiNkZWZpbmUgVVNCX1BBQ0tFVF9TSVpF
ICAgICAgICAgICAgICAgMTAKCiNkZWZpbmUgTUlOT1IodCwgaCkgICAgICAgICAgICAgICAg
ICAgKHVuaXQybWlub3IoKCh0KSA8PCAxNikgfCAoaCkpKQojZGVmaW5lIFRBQkxFVCh4KSAg
ICAgICAgICAgICAgICAgICAgICgoZGV2MnVuaXQoeCkgPj4gMTYpICYgMHhmZikKI2RlZmlu
ZSBIQU5ETEVSKHgpICAgICAgICAgICAgICAgICAgICAoZGV2MnVuaXQoeCkgJiAweGZmZmYp
CiNkZWZpbmUgSEFORExFUl9NQVggICAgICAgICAgICAgICAgICAgMHgxMDAwMAoKI2RlZmlu
ZSBQQUNLRVRfQklUKGIsIHMpICAgICAgICAgICAgICAoKHBhY2tldFtiXSA+PiAocykpICYg
MSkKI2RlZmluZSBQQUNLRVRfQklUUyhiLCBzLCBuKSAgICAgICAgICAoKCgocykgKyAobikg
PiAzMiA/ICgocGFja2V0WyhiKSAtIDRdKSA8PCAoMzIgLSAocykpKSA6IDApIHwgXAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChzKSArIChuKSA+IDI0ID8g
KChwYWNrZXRbKGIpIC0gM10pIDw8ICgyNCAtIChzKSkpIDogMCkgfCBcCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHMpICsgKG4pID4gMTYgPyAoKHBhY2tl
dFsoYikgLSAyXSkgPDwgKDE2IC0gKHMpKSkgOiAwKSB8IFwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICgocykgKyAobikgPiAgOCA/ICgocGFja2V0WyhiKSAt
IDFdKSA8PCAoIDggLSAocykpKSA6IDApIHwgXAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYWNrZXRbKGIpICAgIF0pID4+
ICAgICAgIChzKSkpICYgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChuKSA9PSAzMiA/IDB4ZmZmZmZmZmYgOiAoMSA8PCAobikpIC0gMSkpCgojZGVmaW5l
IEVVV0FDT01HRVRWRVJTSU9OICAgICAgICAgICAgIDB4MDEKI2RlZmluZSBFVVdBQ09NR0VU
SUQgICAgICAgICAgICAgICAgICAweDAyCiNkZWZpbmUgRVVXQUNPTUdFVEJNICAgICAgICAg
ICAgICAgICAgMHgyMAojZGVmaW5lIEVVV0FDT01HRVRBQlMgICAgICAgICAgICAgICAgIDB4
NDAKCnN0cnVjdCBpZCB7CiAgdWludDE2X3QgYnVzOwojZGVmaW5lIElEX0JVU19VU0IgMwog
IHVpbnQxNl90IHZlbmRvcjsKICB1aW50MTZfdCBwcm9kdWN0OwogIHVpbnQxNl90IHZlcnNp
b247Cn07CgojZGVmaW5lIEVWVF9TWU4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMAoj
ZGVmaW5lIEVWVF9CVE4gICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMQojZGVmaW5lIEVW
VF9SRUwgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgojZGVmaW5lIEVWVF9BQlMgICAg
ICAgICAgICAgICAgICAgICAgIDB4MDAwMwojZGVmaW5lIEVWVF9NU0MgICAgICAgICAgICAg
ICAgICAgICAgIDB4MDAwNAojZGVmaW5lIEVWVF9VU0VEICAgICAgICAgICAgICAgICAgICAg
IDB4MDAwNQojZGVmaW5lIEVWVF9NQVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAxZgoK
I2RlZmluZSBTWU5fUkVQT1JUICAgICAgICAgICAgICAgICAgICAweDAwMDAKCiNkZWZpbmUg
QlROX01JU0NfMCAgICAgICAgICAgICAgICAgICAgMHgwMTAwCiNkZWZpbmUgQlROX01JU0Nf
MSAgICAgICAgICAgICAgICAgICAgMHgwMTAxCiNkZWZpbmUgQlROX01JU0NfMiAgICAgICAg
ICAgICAgICAgICAgMHgwMTAyCiNkZWZpbmUgQlROX01JU0NfMyAgICAgICAgICAgICAgICAg
ICAgMHgwMTAzCiNkZWZpbmUgQlROX01JU0NfNCAgICAgICAgICAgICAgICAgICAgMHgwMTA0
CiNkZWZpbmUgQlROX01JU0NfNSAgICAgICAgICAgICAgICAgICAgMHgwMTA1CiNkZWZpbmUg
QlROX01JU0NfNiAgICAgICAgICAgICAgICAgICAgMHgwMTA2CiNkZWZpbmUgQlROX01JU0Nf
NyAgICAgICAgICAgICAgICAgICAgMHgwMTA3CiNkZWZpbmUgQlROX0xFRlQgICAgICAgICAg
ICAgICAgICAgICAgMHgwMTEwCiNkZWZpbmUgQlROX1JJR0hUICAgICAgICAgICAgICAgICAg
ICAgMHgwMTExCiNkZWZpbmUgQlROX01JRERMRSAgICAgICAgICAgICAgICAgICAgMHgwMTEy
CiNkZWZpbmUgQlROX1NJREUgICAgICAgICAgICAgICAgICAgICAgMHgwMTEzCiNkZWZpbmUg
QlROX0VYVFJBICAgICAgICAgICAgICAgICAgICAgMHgwMTE0CiNkZWZpbmUgQlROX1RPT0xf
UEVOICAgICAgICAgICAgICAgICAgMHgwMTQwCiNkZWZpbmUgQlROX1RPT0xfRVJBU0VSICAg
ICAgICAgICAgICAgMHgwMTQxCiNkZWZpbmUgQlROX1RPT0xfRklOR0VSICAgICAgICAgICAg
ICAgMHgwMTQ1CiNkZWZpbmUgQlROX1RPT0xfTU9VU0UgICAgICAgICAgICAgICAgMHgwMTQ2
CiNkZWZpbmUgQlROX1RPVUNIICAgICAgICAgICAgICAgICAgICAgMHgwMTRhCiNkZWZpbmUg
QlROX1NUWUxVU18xICAgICAgICAgICAgICAgICAgMHgwMTRiCiNkZWZpbmUgQlROX1NUWUxV
U18yICAgICAgICAgICAgICAgICAgMHgwMTRjCiNkZWZpbmUgQlROX1VTRUQgICAgICAgICAg
ICAgICAgICAgICAgMHgwMTRkCiNkZWZpbmUgQlROX01BWCAgICAgICAgICAgICAgICAgICAg
ICAgMHgwMWZmCgojZGVmaW5lIFJFTF9XSEVFTCAgICAgICAgICAgICAgICAgICAgIDB4MDAw
OAojZGVmaW5lIFJFTF9NQVggICAgICAgICAgICAgICAgICAgICAgIDB4MDAwZgoKI2RlZmlu
ZSBBQlNfWCAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAKI2RlZmluZSBBQlNfWSAg
ICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKI2RlZmluZSBBQlNfUlggICAgICAgICAg
ICAgICAgICAgICAgICAweDAwMDMKI2RlZmluZSBBQlNfUlkgICAgICAgICAgICAgICAgICAg
ICAgICAweDAwMDQKI2RlZmluZSBBQlNfUFJFU1NVUkUgICAgICAgICAgICAgICAgICAweDAw
MTgKI2RlZmluZSBBQlNfRElTVEFOQ0UgICAgICAgICAgICAgICAgICAweDAwMTkKI2RlZmlu
ZSBBQlNfVElMVF9YICAgICAgICAgICAgICAgICAgICAweDAwMWEKI2RlZmluZSBBQlNfVElM
VF9ZICAgICAgICAgICAgICAgICAgICAweDAwMWIKI2RlZmluZSBBQlNfTUlTQyAgICAgICAg
ICAgICAgICAgICAgICAweDAwMjgKI2RlZmluZSBBQlNfVVNFRCAgICAgICAgICAgICAgICAg
ICAgICAweDAwMjkKI2RlZmluZSBBQlNfTUFYICAgICAgICAgICAgICAgICAgICAgICAweDAw
M2YKCiNkZWZpbmUgTVNDX1NFUklBTCAgICAgICAgICAgICAgICAgICAgMHgwMDAwCiNkZWZp
bmUgTVNDX01BWCAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA3CgojZGVmaW5lIEJNX1NJ
WkUoeCkgICAgICAgICAgICAgICAgICAgICgoKHgpIC8gKHNpemVvZihsb25nKSAqIDgpICsg
MSkgKiBzaXplb2YobG9uZykpCiNkZWZpbmUgQk1fU0VUX0JJVCh4LCB5KSAgICAgICAgICAg
ICAgKCh4KVsoeSkgLyAoc2l6ZW9mKGxvbmcpICogOCldIHw9ICgxIDw8ICgoeSkgJSAoc2l6
ZW9mKGxvbmcpICogOCkpKSkKCnN0YXRpYyBjb25zdCBzaXplX3QgYm1fc2l6ZVtFVlRfVVNF
RF0gPSB7CiAgQk1fU0laRShFVlRfTUFYKSwKICBCTV9TSVpFKEJUTl9NQVgpLAogIEJNX1NJ
WkUoUkVMX01BWCksCiAgQk1fU0laRShBQlNfTUFYKSwKICBCTV9TSVpFKE1TQ19NQVgpLAp9
OwoKc3RydWN0IGFic19heGlzIHsKICBpbnQzMl90IHZhbHVlOwogIGludDMyX3QgbWluOwog
IGludDMyX3QgbWF4OwogIGludDMyX3QgZnV6ejsKICBpbnQzMl90IGZsYXQ7Cn07CgpzdHJ1
Y3QgZXZlbnQgewogIHN0cnVjdCB0aW1ldmFsIHRpbWU7CiAgdWludDE2X3QgdHlwZTsKICB1
aW50MTZfdCBpbmRleDsKICBpbnQzMl90IHZhbHVlOwp9OwoKI2RlZmluZSBUT09MX0lEX0ZJ
TkdFUiAgICAgICAgICAgICAgICAweDAwMGYKI2RlZmluZSBTRVJJQUxfRklOR0VSICAgICAg
ICAgICAgICAgICAweGZmZmZmZmZmCgpkX29wZW5fdCAgdXdhY29tb3BlbjsKZF9jbG9zZV90
IHV3YWNvbWNsb3NlOwpkX3JlYWRfdCAgdXdhY29tcmVhZDsKZF9pb2N0bF90IHV3YWNvbWlv
Y3RsOwpkX3BvbGxfdCAgdXdhY29tcG9sbDsKZF9wdXJnZV90IHV3YWNvbXB1cmdlOwoKc3Rh
dGljIHN0cnVjdCBjZGV2c3cgdXdhY29tcGh5X2NkZXZzdyA9IHsKICAuZF92ZXJzaW9uID0g
RF9WRVJTSU9OLAogIC5kX2ZsYWdzICAgPSBEX05FRURHSUFOVCwKICAuZF9uYW1lICAgID0g
InV3YWNvbXBoeSIsCn07CgpzdGF0aWMgc3RydWN0IGNkZXZzdyB1d2Fjb21fY2RldnN3ID0g
ewogIC5kX3ZlcnNpb24gPSBEX1ZFUlNJT04sCiAgLmRfZmxhZ3MgICA9IERfTkVFREdJQU5U
LAogIC5kX29wZW4gICAgPSB1d2Fjb21vcGVuLAogIC5kX2Nsb3NlICAgPSB1d2Fjb21jbG9z
ZSwKICAuZF9yZWFkICAgID0gdXdhY29tcmVhZCwKICAuZF9pb2N0bCAgID0gdXdhY29taW9j
dGwsCiAgLmRfcG9sbCAgICA9IHV3YWNvbXBvbGwsCiAgLmRfcHVyZ2UgICA9IHV3YWNvbXB1
cmdlLAogIC5kX25hbWUgICAgPSAidXdhY29tIiwKfTsKCnN0cnVjdCB1d2Fjb21faGFuZGxl
ciB7CiAgTElTVF9FTlRSWSh1d2Fjb21faGFuZGxlcikgbGluazsKCiAgc3RydWN0IGNsaXN0
ICAgICAgICAgICAgICAgcXVldWU7CiAgc3RydWN0IHNpZ2lvICAgICAgICAgICAgICAqcXVl
dWVfc2lnaW87CiAgc3RydWN0IHNlbGluZm8gICAgICAgICAgICAgcnNlbDsKCiAgdV9jaGFy
ICAgICAgICAgICAgICAgICAgICAgc2xlZXBpbmc7CiAgdV9jaGFyICAgICAgICAgICAgICAg
ICAgICAgYXN5bmM7Cn07CgpzdHJ1Y3QgdXdhY29tX3NvZnRjIHsKICBVU0JCQVNFREVWSUNF
ICAgICAgICAgICAgICAgc2NfZGV2OwogIHN0cnVjdCBjZGV2ICAgICAgICAgICAgICAgICpk
ZXY7CgogIHVzYmRfaW50ZXJmYWNlX2hhbmRsZSAgICAgICBzY19pZmFjZTsKICBpbnQgICAg
ICAgICAgICAgICAgICAgICAgICAgc2NfZXBfYWRkcjsKICB1c2JkX3BpcGVfaGFuZGxlICAg
ICAgICAgICAgc2NfaW50cnBpcGU7CiAgdV9jaGFyICAgICAgICAgICAgICAgICAgICAgIHNj
X2J1ZltVU0JfUEFDS0VUX1NJWkVdOwoKICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAg
c2Nfc3RhbGxlZDsKICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgc2NfZHlpbmc7Cgog
IHN0cnVjdCBpZCAgICAgICAgICAgICAgICAgICBzY19pZDsKICB1bnNpZ25lZCBsb25nICAg
ICAgICAgICAgICAqc2NfYm1bRVZUX1VTRURdOwoKICBpbnQgICAgICAgICAgICAgICAgICAg
ICAgICAqc2NfYnRuOwogIHN0cnVjdCBhYnNfYXhpcyAgICAgICAgICAgICpzY19hYnM7CiAg
aW50ICAgICAgICAgICAgICAgICAgICAgICAgIHNjX3Rvb2xbMl07CiAgaW50ICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjX3Rvb2xfaWRbMl07CiAgdW5zaWduZWQgaW50ICAgICAgICAg
ICAgICAgIHNjX3NlcmlhbFsyXTsKICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgc2Nf
c3luYzsKCiAgTElTVF9IRUFEKCwgdXdhY29tX2hhbmRsZXIpIHNjX2hhbmRsZXJzOwp9OwoK
c3RhdGljIGV2ZW50aGFuZGxlcl90YWcgdXdhY29tX2VodGFnID0gTlVMTDsKc3RhdGljIGlu
dCB1d2Fjb21fZWh0YWdfcmVmID0gMDsKCnN0YXRpYyB2b2lkIHV3YWNvbV9pbnRyKHVzYmRf
eGZlcl9oYW5kbGUsIHVzYmRfcHJpdmF0ZV9oYW5kbGUsIHVzYmRfc3RhdHVzKTsKc3RhdGlj
IHZvaWQgdXdhY29tX3Byb2Nlc3NfcGFja2V0KHN0cnVjdCB1d2Fjb21fc29mdGMqKTsKdm9p
ZCB1d2Fjb21fcG9zX2V2ZW50cyhzdHJ1Y3QgdXdhY29tX3NvZnRjICpzYywgaW50IHgsIGlu
dCB5LCBpbnQgZGlzdGFuY2UpOwp2b2lkIHV3YWNvbV9wZW5fZXZlbnRzKHN0cnVjdCB1d2Fj
b21fc29mdGMgKnNjLCBpbnQgcHJlc3N1cmUsIGludCB0aWx0X3gsIGludCB0aWx0X3ksIGlu
dCB0b3VjaCwgaW50IHN0eWx1c18xLCBpbnQgc3R5bHVzXzIpOwp2b2lkIHV3YWNvbV9tb3Vz
ZV9ldmVudHMoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2MsIGludCBsZWZ0LCBpbnQgbWlkZGxl
LCBpbnQgcmlnaHQsIGludCBleHRyYSwgaW50IHNpZGUsIGludCB3aGVlbCk7CnZvaWQgdXdh
Y29tX3BhZF9ldmVudHMoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2MsIGludCBidG5fMCwgaW50
IGJ0bl8xLCBpbnQgYnRuXzIsIGludCBidG5fMywgaW50IGJ0bl80LCBpbnQgYnRuXzUsIGlu
dCBidG5fNiwgaW50IGJ0bl83LCBpbnQgcngsIGludCByeSk7CnZvaWQgdXdhY29tX3Rvb2xf
ZXZlbnRzKHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCBpbnQgaW5kZXgsIGludCBwcm94aW1p
dHkpOwpzdGF0aWMgdm9pZCB1d2Fjb21fZXZlbnQoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2Ms
IHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQgaW5kZXgsIGludCB2YWx1ZSk7CnN0
YXRpYyBpbnQgdXdhY29tX2luaXQoc3RydWN0IHV3YWNvbV9zb2Z0YyosIHVzYl9kZXZpY2Vf
ZGVzY3JpcHRvcl90ICpkZCk7CnN0YXRpYyB2b2lkIHV3YWNvbV9pbml0X2FicyhzdHJ1Y3Qg
dXdhY29tX3NvZnRjICpzYywgaW50IGF4aXMsIGludDMyX3QgbWluLCBpbnQzMl90IG1heCwg
aW50MzJfdCBmdXp6LCBpbnQzMl90IGZsYXQpOwpzdGF0aWMgdm9pZCB1d2Fjb21fY2xvbmUo
dm9pZCAqYXJnLCBzdHJ1Y3QgdWNyZWQgKmNyZWQsIGNoYXIgKm5hbWUsIGludCBuYW1lbGVu
LCBzdHJ1Y3QgY2RldiAqKmRldik7CgpVU0JfREVDTEFSRV9EUklWRVIodXdhY29tKTsKClVT
Ql9NQVRDSCh1d2Fjb20pIHsKICBVU0JfTUFUQ0hfU1RBUlQodXdhY29tLCB1YWEpOwoKICBp
ZiAoIXVhYS0+ZGV2aWNlIHx8ICF1YWEtPmlmYWNlKQogICAgcmV0dXJuIFVNQVRDSF9OT05F
OwoKICB1c2JfZGV2aWNlX2Rlc2NyaXB0b3JfdCAqZGQgPSB1c2JkX2dldF9kZXZpY2VfZGVz
Y3JpcHRvcih1YWEtPmRldmljZSk7CiAgaWYgKCFkZCB8fCBVR0VUVyhkZC0+aWRWZW5kb3Ip
ICE9IFVTQl9WRU5ET1JfV0FDT00gfHwgVUdFVFcoZGQtPmlkUHJvZHVjdCkgIT0gVVNCX1BS
T0RVQ1RfV0FDT01fQ0lOVElRXzIxVVgpCiAgICByZXR1cm4gVU1BVENIX05PTkU7CgogIHJl
dHVybiBVTUFUQ0hfVkVORE9SX1BST0RVQ1Q7Cn0KClVTQl9BVFRBQ0godXdhY29tKSB7CiAg
VVNCX0FUVEFDSF9TVEFSVCh1d2Fjb20sIHNjLCB1YWEpOwoKICBjaGFyIGRldmluZm9bMTAy
NF07CiAgdXNiZF9kZXZpbmZvKHVhYS0+ZGV2aWNlLCAwLCBkZXZpbmZvKTsKCiAgVVNCX0FU
VEFDSF9TRVRVUDsKCiAgdXNiX2RldmljZV9kZXNjcmlwdG9yX3QgKmRkID0gdXNiZF9nZXRf
ZGV2aWNlX2Rlc2NyaXB0b3IodWFhLT5kZXZpY2UpOwogIGlmICghZGQpIHsKICAgIHByaW50
ZigiJXM6IGNvdWxkIG5vdCByZWFkIGRldmljZSBkZXNjcmlwdG9yXG4iLCBVU0JERVZOQU1F
KHNjLT5zY19kZXYpKTsKICAgIHNjLT5zY19keWluZyA9IDE7CiAgICByZXR1cm4gMTsKICB9
CgogIHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yX3QgKmVkID0gdXNiZF9pbnRlcmZhY2UyZW5k
cG9pbnRfZGVzY3JpcHRvcih1YWEtPmlmYWNlLCAwKTsKICBpZiAoIWVkKSB7CiAgICBwcmlu
dGYoIiVzOiBjb3VsZCBub3QgcmVhZCBlbmRwb2ludCBkZXNjcmlwdG9yXG4iLCBVU0JERVZO
QU1FKHNjLT5zY19kZXYpKTsKICAgIHNjLT5zY19keWluZyA9IDE7CiAgICBVU0JfQVRUQUNI
X0VSUk9SX1JFVFVSTjsKICB9CgogIGlmIChVRV9HRVRfRElSKGVkLT5iRW5kcG9pbnRBZGRy
ZXNzKSAhPSBVRV9ESVJfSU4gfHwgKGVkLT5ibUF0dHJpYnV0ZXMgJiBVRV9YRkVSVFlQRSkg
IT0gVUVfSU5URVJSVVBUKSB7CiAgICBwcmludGYoIiVzOiB1bmV4cGVjdGVkIGVuZHBvaW50
XG4iLCBVU0JERVZOQU1FKHNjLT5zY19kZXYpKTsKICAgIHNjLT5zY19keWluZyA9IDE7CiAg
ICBVU0JfQVRUQUNIX0VSUk9SX1JFVFVSTjsKICB9CgogIGlmICh1d2Fjb21faW5pdChzYywg
ZGQpKQogICAgVVNCX0FUVEFDSF9FUlJPUl9SRVRVUk47CgogIHN0YXRpYyB1X2NoYXIgcmVw
b3J0W10gPSB7MiwgMn07CiAgdXNiZF9zZXRfcmVwb3J0KHVhYS0+aWZhY2UsIDMsIDIsICZy
ZXBvcnQsIHNpemVvZiByZXBvcnQpOwoKICBpZiAoIXV3YWNvbV9laHRhZ19yZWYrKykKICAg
IHV3YWNvbV9laHRhZyA9IEVWRU5USEFORExFUl9SRUdJU1RFUihkZXZfY2xvbmUsIHV3YWNv
bV9jbG9uZSwgMCwgMTAwMCk7CgogIHNjLT5kZXYgICAgICAgID0gbWFrZV9kZXYoJnV3YWNv
bXBoeV9jZGV2c3csIE1JTk9SKGRldmljZV9nZXRfdW5pdChzZWxmKSwgMCksIFVJRF9ST09U
LCBHSURfT1BFUkFUT1IsIDA2NDQsICJ1d2Fjb20lZCIsIGRldmljZV9nZXRfdW5pdChzZWxm
KSk7CiAgc2MtPnNjX2lmYWNlICAgPSB1YWEtPmlmYWNlOwogIHNjLT5zY19lcF9hZGRyID0g
ZWQtPmJFbmRwb2ludEFkZHJlc3M7CgogIFVTQl9BVFRBQ0hfU1VDQ0VTU19SRVRVUk47Cn0K
ClVTQl9ERVRBQ0godXdhY29tKSB7CiAgVVNCX0RFVEFDSF9TVEFSVCh1d2Fjb20sIHNjKTsK
CiAgaWYgKC0tdXdhY29tX2VodGFnX3JlZiA9PSAwKQogICAgRVZFTlRIQU5ETEVSX0RFUkVH
SVNURVIoZGV2X2Nsb25lLCB1d2Fjb21fZWh0YWcpOwoKICBzYy0+c2NfZHlpbmcgPSAxOwoK
ICBpZiAoc2MtPnNjX2ludHJwaXBlKQogICAgdXNiZF9hYm9ydF9waXBlKHNjLT5zY19pbnRy
cGlwZSk7CgogIGZvciAoaW50IGkgPSAwOyBpIDwgRVZUX1VTRUQ7ICsraSkKICAgIGZyZWUo
c2MtPnNjX2JtW2ldLCBNX1VTQkRFVik7CiAgZnJlZShzYy0+c2NfYnRuLCBNX1VTQkRFVik7
CiAgZnJlZShzYy0+c2NfYWJzLCBNX1VTQkRFVik7CgogIGRlc3Ryb3lfZGV2KHNjLT5kZXYp
OwoKICByZXR1cm4gMDsKfQoKaW50IHV3YWNvbW9wZW4oc3RydWN0IGNkZXYgKmRldiwgaW50
IGZsYWcsIGludCBtb2RlLCB1c2JfcHJvY19wdHIgcCkgewogIHN0cnVjdCB1d2Fjb21fc29m
dGMgKnNjOwogIFVTQl9HRVRfU0NfT1BFTih1d2Fjb20sIFRBQkxFVChkZXYpLCBzYyk7Cgog
IGlmIChzYy0+c2NfZHlpbmcpCiAgICByZXR1cm4gRU5YSU87CgogIGlmIChkZXYtPnNpX2Ry
djEpCiAgICByZXR1cm4gRUJVU1k7CgogIHN0cnVjdCB1d2Fjb21faGFuZGxlciAqaGFuZGxl
ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHV3YWNvbV9oYW5kbGVyKSwgTV9VU0JERVYsIE1f
Tk9XQUlUIHwgTV9aRVJPKTsKICBpZiAoIWhhbmRsZXIpCiAgICByZXR1cm4gRU5PTUVNOwoK
ICBpZiAoY2xhbGxvYygmaGFuZGxlci0+cXVldWUsIDB4NDAwMCwgMCkgPT0gLTEpIHsKICAg
IGZyZWUoaGFuZGxlciwgTV9VU0JERVYpOwogICAgcmV0dXJuIEVOT01FTTsKICB9CgogIGlm
ICgoIXNjLT5zY19pbnRycGlwZSkgJiYKICAgICAgdXNiZF9vcGVuX3BpcGVfaW50cihzYy0+
c2NfaWZhY2UsIHNjLT5zY19lcF9hZGRyLCBVU0JEX1NIT1JUX1hGRVJfT0ssICZzYy0+c2Nf
aW50cnBpcGUsIHNjLCBzYy0+c2NfYnVmLCBVU0JfUEFDS0VUX1NJWkUsIHV3YWNvbV9pbnRy
LCBVU0JEX0RFRkFVTFRfSU5URVJWQUwpKSB7CiAgICBjbGZyZWUoJmhhbmRsZXItPnF1ZXVl
KTsKICAgIGZyZWUoaGFuZGxlciwgTV9VU0JERVYpOwogICAgcmV0dXJuIEVJTzsKICB9Cgog
IGRldi0+c2lfZHJ2MSA9IGhhbmRsZXI7CgogIGludCBzID0gc3BsdXNiKCk7CiAgTElTVF9J
TlNFUlRfSEVBRCgmc2MtPnNjX2hhbmRsZXJzLCBoYW5kbGVyLCBsaW5rKTsKICBzcGx4KHMp
OwoKICByZXR1cm4gMDsKfQoKaW50IHV3YWNvbWNsb3NlKHN0cnVjdCBjZGV2ICpkZXYsIGlu
dCBmbGFnLCBpbnQgbW9kZSwgdXNiX3Byb2NfcHRyIHApIHsKICBzdHJ1Y3QgdXdhY29tX3Nv
ZnRjICpzYzsKICBVU0JfR0VUX1NDX09QRU4odXdhY29tLCBUQUJMRVQoZGV2KSwgc2MpOwoK
ICBzdHJ1Y3QgdXdhY29tX2hhbmRsZXIgKmhhbmRsZXIgPSAoc3RydWN0IHV3YWNvbV9oYW5k
bGVyKilkZXYtPnNpX2RydjE7CgogIGludCBzID0gc3BsdXNiKCk7CiAgTElTVF9SRU1PVkUo
aGFuZGxlciwgbGluayk7CiAgc3BseChzKTsKCiAgbmRmbHVzaCgmaGFuZGxlci0+cXVldWUs
IGhhbmRsZXItPnF1ZXVlLmNfY2MpOwogIGNsZnJlZSgmaGFuZGxlci0+cXVldWUpOwoKICBm
dW5zZXRvd24oJmhhbmRsZXItPnF1ZXVlX3NpZ2lvKTsKCiAgZnJlZShoYW5kbGVyLCBNX1VT
QkRFVik7CgogIGRldi0+c2lfZHJ2MSA9IE5VTEw7CgogIGlmIChMSVNUX0VNUFRZKCZzYy0+
c2NfaGFuZGxlcnMpICYmIHNjLT5zY19pbnRycGlwZSkgewogICAgdXNiZF9hYm9ydF9waXBl
KHNjLT5zY19pbnRycGlwZSk7CiAgICB1c2JkX2Nsb3NlX3BpcGUoc2MtPnNjX2ludHJwaXBl
KTsKICAgIHNjLT5zY19pbnRycGlwZSA9IDA7CiAgICBzYy0+c2Nfc3RhbGxlZCA9IDA7CiAg
fQoKICByZXR1cm4gMDsKfQoKaW50IHV3YWNvbXJlYWQoc3RydWN0IGNkZXYgKmRldiwgc3Ry
dWN0IHVpbyAqdWlvLCBpbnQgZmxhZykgewogIHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjOwog
IFVTQl9HRVRfU0ModXdhY29tLCBUQUJMRVQoZGV2KSwgc2MpOwoKICBzdHJ1Y3QgdXdhY29t
X2hhbmRsZXIgKmhhbmRsZXIgPSAoc3RydWN0IHV3YWNvbV9oYW5kbGVyKilkZXYtPnNpX2Ry
djE7CgogIGludCBlcnJvciA9IDA7CgogIGludCBzID0gc3BsdXNiKCk7CiAgd2hpbGUgKCFo
YW5kbGVyLT5xdWV1ZS5jX2NjKSB7CiAgICBpZiAoZmxhZyAmIE9fTk9OQkxPQ0spIHsKICAg
ICAgc3BseChzKTsKICAgICAgcmV0dXJuIEVXT1VMREJMT0NLOwogICAgfQoKICAgIGhhbmRs
ZXItPnNsZWVwaW5nID0gMTsKICAgIGVycm9yID0gdHNsZWVwKCZoYW5kbGVyLT5xdWV1ZSwg
UFpFUk8gfCBQQ0FUQ0gsICJ1d2Fjb20iLCAwKTsKICAgIGhhbmRsZXItPnNsZWVwaW5nID0g
MDsKCiAgICBpZiAoc2MtPnNjX2R5aW5nKQogICAgICBlcnJvciA9IEVJTzsKCiAgICBpZiAo
ZXJyb3IpCiAgICAgIGJyZWFrOwoKICAgIGlmIChzYy0+c2Nfc3RhbGxlZCkgewogICAgICBz
Yy0+c2Nfc3RhbGxlZCA9IDA7CiAgICAgIHVzYmRfY2xlYXJfZW5kcG9pbnRfc3RhbGwoc2Mt
PnNjX2ludHJwaXBlKTsKICAgIH0KICB9CgogIHVfY2hhciBidWZmZXJbMTI4XTsKICB3aGls
ZSAoaGFuZGxlci0+cXVldWUuY19jYyA+IDAgJiYgdWlvLT51aW9fcmVzaWQgPiAwICYmICFl
cnJvcikgewogICAgc2l6ZV90IGxlbmd0aCA9IG1pbihtaW4oaGFuZGxlci0+cXVldWUuY19j
YywgdWlvLT51aW9fcmVzaWQpLCBzaXplb2YoYnVmZmVyKSk7CgogICAgcV90b19iKCZoYW5k
bGVyLT5xdWV1ZSwgYnVmZmVyLCBsZW5ndGgpOwogICAgaWYgKChlcnJvciA9IHVpb21vdmUo
YnVmZmVyLCBsZW5ndGgsIHVpbykpICE9IDApCiAgICAgIGJyZWFrOwogIH0KICBzcGx4KHMp
OwoKICByZXR1cm4gZXJyb3I7Cn0KCmludCB1d2Fjb21pb2N0bChzdHJ1Y3QgY2RldiAqZGV2
LCB1X2xvbmcgY21kLCBjYWRkcl90IGFkZHIsIGludCBmbGFnLCB1c2JfcHJvY19wdHIgcCkg
ewogIHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjOwogIFVTQl9HRVRfU0ModXdhY29tLCBUQUJM
RVQoZGV2KSwgc2MpOwoKICBpZiAoc2MtPnNjX2R5aW5nKQogICAgcmV0dXJuIEVJTzsKCiAg
c3RydWN0IHV3YWNvbV9oYW5kbGVyICpoYW5kbGVyID0gKHN0cnVjdCB1d2Fjb21faGFuZGxl
ciopZGV2LT5zaV9kcnYxOwoKICBzd2l0Y2ggKGNtZCkgewogICAgY2FzZSBGSU9OUkVBRDog
ewogICAgICBpbnQgcyA9IHNwbHVzYigpOwogICAgICAqKGludCopYWRkciA9IGhhbmRsZXIt
PnF1ZXVlLmNfY2M7CiAgICAgIHNwbHgocyk7CiAgICAgIGJyZWFrOwogICAgfQoKICAgIGNh
c2UgRklPTkJJTzoKICAgICAgYnJlYWs7CgogICAgY2FzZSBGSU9BU1lOQzoKICAgICAgaGFu
ZGxlci0+YXN5bmMgPSAqKGludCopYWRkcjsKICAgICAgYnJlYWs7CgogICAgY2FzZSBGSU9T
RVRPV046CiAgICAgIHJldHVybiBmc2V0b3duKCooaW50KilhZGRyLCAmaGFuZGxlci0+cXVl
dWVfc2lnaW8pOwoKICAgIGRlZmF1bHQ6IHsKICAgICAgaW50IG51bSA9IGNtZCAmIDB4ZmY7
CiAgICAgIGludCBsZW4gPSBJT0NQQVJNX0xFTihjbWQpOwoKICAgICAgaWYgKElPQ0dST1VQ
KGNtZCkgIT0gJ0UnIHx8IChjbWQgJiBJT0NfRElSTUFTSykgIT0gSU9DX09VVCkKICAgICAg
ICByZXR1cm4gRUlOVkFMOwoKICAgICAgc3dpdGNoIChudW0pIHsKICAgICAgICBjYXNlIEVV
V0FDT01HRVRWRVJTSU9OOgogICAgICAgICAgaWYgKGxlbiAhPSBzaXplb2YoaW50KSkKICAg
ICAgICAgICAgcmV0dXJuIEVJTlZBTDsKICAgICAgICAgICooaW50KilhZGRyID0gMHgwMDAx
MDAwMDsKICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIEVVV0FDT01HRVRJRDoKICAg
ICAgICAgIGlmIChsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpZCkpCiAgICAgICAgICAgIHJldHVy
biBFSU5WQUw7CiAgICAgICAgICBtZW1jcHkoYWRkciwgJnNjLT5zY19pZCwgc2l6ZW9mKHN0
cnVjdCBpZCkpOwogICAgICAgICAgYnJlYWs7CgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAg
ICBpZiAobnVtID49IEVVV0FDT01HRVRCTSAmJiBudW0gPCBFVVdBQ09NR0VUQk0gKyBFVlRf
VVNFRCkgewogICAgICAgICAgICBpbnQgaWR4ID0gbnVtIC0gRVVXQUNPTUdFVEJNOwogICAg
ICAgICAgICBzaXplX3QgbGVuZ3RoID0gbWluKGJtX3NpemVbaWR4XSwgbGVuKTsKICAgICAg
ICAgICAgbWVtY3B5KGFkZHIsIHNjLT5zY19ibVtpZHhdLCBsZW5ndGgpOwogICAgICAgICAg
ICAvLyBSZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZSBmcm9tIGFuIGlvY3RsIGlzIHNvbWV3
aGF0IG9mIGEgZ2FtYmxlCiAgICAgICAgICAgIC8vIFNvbWV0aW1lcyBpdCBoYXMgdG8gYmUg
aW4gdGRfcmV0dmFsWzBdLCBzb21ldGltZXMgaW4gdGRfcmV0dmFsWzFdCiAgICAgICAgICAg
IHAtPnRkX3JldHZhbFswXSA9IGxlbmd0aDsKICAgICAgICAgICAgcC0+dGRfcmV0dmFsWzFd
ID0gbGVuZ3RoOwogICAgICAgICAgICByZXR1cm4gMDsKCiAgICAgICAgICB9IGVsc2UgaWYg
KG51bSA+PSBFVVdBQ09NR0VUQUJTICYmIG51bSA8IEVVV0FDT01HRVRBQlMgKyBBQlNfVVNF
RCkgewogICAgICAgICAgICBpZiAobGVuICE9IHNpemVvZihzdHJ1Y3QgYWJzX2F4aXMpKQog
ICAgICAgICAgICAgIHJldHVybiBFSU5WQUw7CiAgICAgICAgICAgIGludCBpZHggPSBudW0g
LSBFVVdBQ09NR0VUQUJTOwogICAgICAgICAgICBtZW1jcHkoYWRkciwgJnNjLT5zY19hYnNb
aWR4XSwgc2l6ZW9mKHN0cnVjdCBhYnNfYXhpcykpOwoKICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICByZXR1cm4gRUlOVkFMOwogICAgICB9CiAgICB9CiAgfQoKICByZXR1cm4gMDsK
fQoKaW50IHV3YWNvbXBvbGwoc3RydWN0IGNkZXYgKmRldiwgaW50IGV2ZW50cywgdXNiX3By
b2NfcHRyIHApIHsKICBzdHJ1Y3QgdXdhY29tX3NvZnRjICpzYzsKICBVU0JfR0VUX1NDKHV3
YWNvbSwgVEFCTEVUKGRldiksIHNjKTsKCiAgc3RydWN0IHV3YWNvbV9oYW5kbGVyICpoYW5k
bGVyID0gKHN0cnVjdCB1d2Fjb21faGFuZGxlciopZGV2LT5zaV9kcnYxOwoKICBpZiAoc2Mt
PnNjX2R5aW5nKQogICAgcmV0dXJuIEVJTzsKCiAgaW50IHJldmVudHMgPSAwOwoKICBpZiAo
ZXZlbnRzICYgKFBPTExJTiB8IFBPTExSRE5PUk0pKSB7CiAgICBpbnQgcyA9IHNwbHVzYigp
OwogICAgaWYgKGhhbmRsZXItPnF1ZXVlLmNfY2MpCiAgICAgIHJldmVudHMgPSBldmVudHMg
JiAoUE9MTElOIHwgUE9MTFJETk9STSk7CiAgICBlbHNlCiAgICAgIHNlbHJlY29yZChwLCAm
aGFuZGxlci0+cnNlbCk7CiAgICBzcGx4KHMpOwogIH0KCiAgcmV0dXJuIHJldmVudHM7Cn0K
CnZvaWQgdXdhY29tcHVyZ2Uoc3RydWN0IGNkZXYgKmRldikgewogIHN0cnVjdCB1d2Fjb21f
aGFuZGxlciAqaGFuZGxlciA9IChzdHJ1Y3QgdXdhY29tX2hhbmRsZXIqKWRldi0+c2lfZHJ2
MTsKCiAgaWYgKGhhbmRsZXItPnNsZWVwaW5nKQogICAgd2FrZXVwKCZoYW5kbGVyLT5xdWV1
ZSk7CiAgc2Vsd2FrZXVwcHJpKCZoYW5kbGVyLT5yc2VsLCBQWkVSTyk7Cn0KCnN0YXRpYyB2
b2lkIHV3YWNvbV9pbnRyKHVzYmRfeGZlcl9oYW5kbGUgeGZlciwgdXNiZF9wcml2YXRlX2hh
bmRsZSBhZGRyLCB1c2JkX3N0YXR1cyBzdGF0dXMpIHsKICBzdHJ1Y3QgdXdhY29tX3NvZnRj
ICpzYyA9IGFkZHI7CgogIGlmIChzdGF0dXMgPT0gVVNCRF9DQU5DRUxMRUQpCiAgICByZXR1
cm47CgogIGlmIChzdGF0dXMgIT0gVVNCRF9OT1JNQUxfQ09NUExFVElPTikgewogICAgaWYg
KHN0YXR1cyA9PSBVU0JEX1NUQUxMRUQpCiAgICAgIHNjLT5zY19zdGFsbGVkID0gMTsKCiAg
ICByZXR1cm47CiAgfQoKICB1d2Fjb21fcHJvY2Vzc19wYWNrZXQoc2MpOwoKICBzdHJ1Y3Qg
dXdhY29tX2hhbmRsZXIgKmhhbmRsZXI7CiAgTElTVF9GT1JFQUNIKGhhbmRsZXIsICZzYy0+
c2NfaGFuZGxlcnMsIGxpbmspCiAgICBpZiAoaGFuZGxlci0+cXVldWUuY19jYykgewogICAg
ICBpZiAoaGFuZGxlci0+c2xlZXBpbmcpIHsKICAgICAgICBoYW5kbGVyLT5zbGVlcGluZyA9
IDA7CiAgICAgICAgd2FrZXVwKCZoYW5kbGVyLT5xdWV1ZSk7CiAgICAgIH0KICAgICAgc2Vs
d2FrZXVwcHJpKCZoYW5kbGVyLT5yc2VsLCBQWkVSTyk7CiAgICAgIGlmIChoYW5kbGVyLT5h
c3luYyAmJiBoYW5kbGVyLT5xdWV1ZV9zaWdpbykKICAgICAgICBwZ3NpZ2lvKCZoYW5kbGVy
LT5xdWV1ZV9zaWdpbywgU0lHSU8sIDApOwogICAgfQp9CgpzdGF0aWMgdm9pZCB1d2Fjb21f
cHJvY2Vzc19wYWNrZXQoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2MpIHsKICB1X2NoYXIgKnBh
Y2tldCA9IHNjLT5zY19idWY7CgogIHN3aXRjaCAoUEFDS0VUX0JJVFMoMCwgMCwgOCkpIHsK
ICAgIGNhc2UgMHgwMjogewogICAgICBpbnQgaW5kZXggPSBQQUNLRVRfQklUKDEsIDApOwoK
ICAgICAgLy8gVG9vbCBlbnRlcmluZyBwcm94aW1pdHkKICAgICAgaWYgKFBBQ0tFVF9CSVRT
KDEsIDIsIDYpID09IDB4MzApIHsKICAgICAgICBzYy0+c2NfdG9vbF9pZFtpbmRleF0gPSBQ
QUNLRVRfQklUUygzLCA0LCAxMik7CiAgICAgICAgc2MtPnNjX3NlcmlhbFtpbmRleF0gPSBQ
QUNLRVRfQklUUyg3LCA0LCAzMik7CgogICAgICAgIHN3aXRjaCAoc2MtPnNjX3Rvb2xfaWRb
aW5kZXhdKSB7CiAgICAgICAgICBjYXNlIDB4ODIzOgogICAgICAgICAgICBzYy0+c2NfdG9v
bFtpbmRleF0gPSBCVE5fVE9PTF9QRU47CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
Y2FzZSAweDgyYjoKICAgICAgICAgICAgc2MtPnNjX3Rvb2xbaW5kZXhdID0gQlROX1RPT0xf
RVJBU0VSOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgMHgwMTc6CiAgICAg
ICAgICAgIHNjLT5zY190b29sW2luZGV4XSA9IEJUTl9UT09MX01PVVNFOwogICAgICAgICAg
ICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHNjLT5zY190b29sW2lu
ZGV4XSA9IEJUTl9UT09MX1BFTjsKICAgICAgICB9CgogICAgICAvLyBUb29sIGxlYXZpbmcg
cHJveGltaXR5CiAgICAgIH0gZWxzZSBpZiAoUEFDS0VUX0JJVFMoMSwgMSwgNykgPT0gMHg0
MCkgewogICAgICAgIHV3YWNvbV9wb3NfZXZlbnRzKHNjLCAwLCAwLCAwKTsKCiAgICAgICAg
aWYgKHNjLT5zY190b29sW2luZGV4XSA9PSBCVE5fVE9PTF9NT1VTRSkKICAgICAgICAgIHV3
YWNvbV9tb3VzZV9ldmVudHMoc2MsIDAsIDAsIDAsIDAsIDAsIDApOwogICAgICAgIGVsc2UK
ICAgICAgICAgIHV3YWNvbV9wZW5fZXZlbnRzKHNjLCAwLCAwLCAwLCAwLCAwLCAwKTsKCiAg
ICAgICAgc2MtPnNjX3Rvb2xfaWRbaW5kZXhdID0gMDsKICAgICAgICB1d2Fjb21fdG9vbF9l
dmVudHMoc2MsIGluZGV4LCAwKTsKCiAgICAgIC8vIFN0YW5kYXJkIHBhY2tldCB3aXRoIHJl
YWR5IGJpdCBzZXQKICAgICAgfSBlbHNlIGlmIChQQUNLRVRfQklUKDEsIDYpKSB7CiAgICAg
ICAgdXdhY29tX3Bvc19ldmVudHMoc2MsIChQQUNLRVRfQklUUygzLCAwLCAxNikgPDwgMSkg
fCBQQUNLRVRfQklUKDksIDEpLCAoUEFDS0VUX0JJVFMoNSwgMCwgMTYpIDw8IDEpIHwgUEFD
S0VUX0JJVCg5LCAwKSwgUEFDS0VUX0JJVFMoOSwgMiwgNikpOwoKICAgICAgICBpZiAoUEFD
S0VUX0JJVCgxLCA3KSkgewogICAgICAgICAgaWYgKFBBQ0tFVF9CSVRTKDEsIDMsIDMpID09
IDB4MDQpCiAgICAgICAgICAgIHV3YWNvbV9wZW5fZXZlbnRzKHNjLCBQQUNLRVRfQklUUyg3
LCA2LCAxMCksIFBBQ0tFVF9CSVRTKDgsIDcsIDcpLCBQQUNLRVRfQklUUyg4LCAwLCA3KSwg
UEFDS0VUX0JJVFMoNywgNiwgMTApID4gMTAsIFBBQ0tFVF9CSVQoMSwgMSksIFBBQ0tFVF9C
SVQoMSwgMikpOwoKICAgICAgICAgIGVsc2UgaWYgKFBBQ0tFVF9CSVRTKDEsIDEsIDUpID09
IDB4MTggJiYgc2MtPnNjX3Rvb2xbaW5kZXhdID09IEJUTl9UT09MX01PVVNFKQogICAgICAg
ICAgICB1d2Fjb21fbW91c2VfZXZlbnRzKHNjLCBQQUNLRVRfQklUKDgsIDIpLCBQQUNLRVRf
QklUKDgsIDMpLCBQQUNLRVRfQklUKDgsIDQpLCBQQUNLRVRfQklUKDgsIDUpLCBQQUNLRVRf
QklUKDgsIDYpLCBQQUNLRVRfQklUKDgsIDApIC0gUEFDS0VUX0JJVCg4LCAxKSk7CiAgICAg
ICAgfQoKICAgICAgICB1d2Fjb21fdG9vbF9ldmVudHMoc2MsIGluZGV4LCAxKTsKICAgICAg
fQogICAgICBicmVhazsKICAgIH0KCiAgICBjYXNlIDB4MGM6CiAgICAgIHV3YWNvbV9wYWRf
ZXZlbnRzKHNjLCBQQUNLRVRfQklUKDUsIDApLCBQQUNLRVRfQklUKDUsIDEpLCBQQUNLRVRf
QklUKDUsIDIpLCBQQUNLRVRfQklUKDUsIDMpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgUEFDS0VUX0JJVCg2LCAwKSwgUEFDS0VUX0JJVCg2LCAxKSwgUEFDS0VUX0JJVCg2LCAy
KSwgUEFDS0VUX0JJVCg2LCAzKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBBQ0tF
VF9CSVRTKDIsIDAsIDEzKSwgUEFDS0VUX0JJVFMoNCwgMCwgMTMpKTsKCiAgICAgIHNjLT5z
Y190b29sWzFdID0gQlROX1RPT0xfRklOR0VSOwogICAgICBzYy0+c2NfdG9vbF9pZFsxXSA9
IFRPT0xfSURfRklOR0VSOwogICAgICBzYy0+c2Nfc2VyaWFsWzFdID0gU0VSSUFMX0ZJTkdF
UjsKICAgICAgdXdhY29tX3Rvb2xfZXZlbnRzKHNjLCAxLCBQQUNLRVRfQklUUyg1LCAwLCA0
KSB8fCBQQUNLRVRfQklUUyg2LCAwLCA0KSB8fCBQQUNLRVRfQklUUygyLCAwLCAxMykgfHwg
UEFDS0VUX0JJVFMoNCwgMCwgMTMpKTsKICAgICAgYnJlYWs7CgogICAgZGVmYXVsdDoKICAg
ICAgcHJpbnRmKCIlczogdW5rbm93biByZXBvcnQgdHlwZSAlMDJ4IHJlY2VpdmVkXG4iLCBV
U0JERVZOQU1FKHNjLT5zY19kZXYpLCBQQUNLRVRfQklUUygwLCAwLCA4KSk7CiAgfQp9Cgp2
b2lkIHV3YWNvbV9wb3NfZXZlbnRzKHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCBpbnQgeCwg
aW50IHksIGludCBkaXN0YW5jZSkgewogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJT
X1gsIHgpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJTX1ksIHkpOwogIHV3YWNv
bV9ldmVudChzYywgRVZUX0FCUywgQUJTX0RJU1RBTkNFLCBkaXN0YW5jZSk7Cn0KCnZvaWQg
dXdhY29tX3Blbl9ldmVudHMoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2MsIGludCBwcmVzc3Vy
ZSwgaW50IHRpbHRfeCwgaW50IHRpbHRfeSwgaW50IHRvdWNoLCBpbnQgc3R5bHVzXzEsIGlu
dCBzdHlsdXNfMikgewogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJTX1BSRVNTVVJF
LCBwcmVzc3VyZSk7CiAgdXdhY29tX2V2ZW50KHNjLCBFVlRfQUJTLCBBQlNfVElMVF9YLCB0
aWx0X3gpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJTX1RJTFRfWSwgdGlsdF95
KTsKICB1d2Fjb21fZXZlbnQoc2MsIEVWVF9CVE4sIEJUTl9UT1VDSCwgdG91Y2gpOwogIHV3
YWNvbV9ldmVudChzYywgRVZUX0JUTiwgQlROX1NUWUxVU18xLCBzdHlsdXNfMSk7CiAgdXdh
Y29tX2V2ZW50KHNjLCBFVlRfQlROLCBCVE5fU1RZTFVTXzIsIHN0eWx1c18yKTsKfQoKdm9p
ZCB1d2Fjb21fbW91c2VfZXZlbnRzKHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCBpbnQgbGVm
dCwgaW50IG1pZGRsZSwgaW50IHJpZ2h0LCBpbnQgZXh0cmEsIGludCBzaWRlLCBpbnQgd2hl
ZWwpIHsKICB1d2Fjb21fZXZlbnQoc2MsIEVWVF9CVE4sIEJUTl9MRUZULCBsZWZ0KTsKICB1
d2Fjb21fZXZlbnQoc2MsIEVWVF9CVE4sIEJUTl9NSURETEUsIG1pZGRsZSk7CiAgdXdhY29t
X2V2ZW50KHNjLCBFVlRfQlROLCBCVE5fUklHSFQsIHJpZ2h0KTsKICB1d2Fjb21fZXZlbnQo
c2MsIEVWVF9CVE4sIEJUTl9FWFRSQSwgZXh0cmEpOwogIHV3YWNvbV9ldmVudChzYywgRVZU
X0JUTiwgQlROX1NJREUsIHNpZGUpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX1JFTCwgUkVM
X1dIRUVMLCB3aGVlbCk7Cn0KCnZvaWQgdXdhY29tX3BhZF9ldmVudHMoc3RydWN0IHV3YWNv
bV9zb2Z0YyAqc2MsIGludCBidG5fMCwgaW50IGJ0bl8xLCBpbnQgYnRuXzIsIGludCBidG5f
MywgaW50IGJ0bl80LCBpbnQgYnRuXzUsIGludCBidG5fNiwgaW50IGJ0bl83LCBpbnQgcngs
IGludCByeSkgewogIHV3YWNvbV9ldmVudChzYywgRVZUX0JUTiwgQlROX01JU0NfMCwgYnRu
XzApOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0JUTiwgQlROX01JU0NfMSwgYnRuXzEpOwog
IHV3YWNvbV9ldmVudChzYywgRVZUX0JUTiwgQlROX01JU0NfMiwgYnRuXzIpOwogIHV3YWNv
bV9ldmVudChzYywgRVZUX0JUTiwgQlROX01JU0NfMywgYnRuXzMpOwogIHV3YWNvbV9ldmVu
dChzYywgRVZUX0JUTiwgQlROX01JU0NfNCwgYnRuXzQpOwogIHV3YWNvbV9ldmVudChzYywg
RVZUX0JUTiwgQlROX01JU0NfNSwgYnRuXzUpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0JU
TiwgQlROX01JU0NfNiwgYnRuXzYpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0JUTiwgQlRO
X01JU0NfNywgYnRuXzcpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJTX1JYLCBy
eCk7CiAgdXdhY29tX2V2ZW50KHNjLCBFVlRfQUJTLCBBQlNfUlksIHJ5KTsKfQoKdm9pZCB1
d2Fjb21fdG9vbF9ldmVudHMoc3RydWN0IHV3YWNvbV9zb2Z0YyAqc2MsIGludCBpbmRleCwg
aW50IHByb3hpbWl0eSkgewogIHV3YWNvbV9ldmVudChzYywgRVZUX0JUTiwgc2MtPnNjX3Rv
b2xbaW5kZXhdLCBwcm94aW1pdHkpOwogIHV3YWNvbV9ldmVudChzYywgRVZUX0FCUywgQUJT
X01JU0MsIHNjLT5zY190b29sX2lkW2luZGV4XSk7CiAgdXdhY29tX2V2ZW50KHNjLCBFVlRf
TVNDLCBNU0NfU0VSSUFMLCBzYy0+c2Nfc2VyaWFsW2luZGV4XSk7CiAgdXdhY29tX2V2ZW50
KHNjLCBFVlRfU1lOLCBTWU5fUkVQT1JULCAwKTsKfQoKc3RhdGljIHZvaWQgdXdhY29tX2V2
ZW50KHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWdu
ZWQgaW50IGluZGV4LCBpbnQgdmFsdWUpIHsKICBzd2l0Y2ggKHR5cGUpIHsKICAgIGNhc2Ug
RVZUX1NZTjoKICAgICAgaWYgKHNjLT5zY19zeW5jKQogICAgICAgIHJldHVybjsKCiAgICAg
IGJyZWFrOwoKICAgIGNhc2UgRVZUX0JUTjoKICAgICAgaWYgKHNjLT5zY19idG5baW5kZXhd
ID09IHZhbHVlKQogICAgICAgIHJldHVybjsKCiAgICAgIHNjLT5zY19idG5baW5kZXhdID0g
dmFsdWU7CiAgICAgIGJyZWFrOwoKICAgIGNhc2UgRVZUX0FCUzoKICAgICAgaWYgKHNjLT5z
Y19hYnNbaW5kZXhdLmZ1enopIHsKICAgICAgICBpbnQgZGlzdCA9IGFicyh2YWx1ZSAtIHNj
LT5zY19hYnNbaW5kZXhdLnZhbHVlKTsKCiAgICAgICAgaWYgKGRpc3QgPCBzYy0+c2NfYWJz
W2luZGV4XS5mdXp6ID4+IDEpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgZWxzZSBpZiAo
ZGlzdCA8IHNjLT5zY19hYnNbaW5kZXhdLmZ1enopCiAgICAgICAgICB2YWx1ZSA9ICg3ICog
c2MtPnNjX2Fic1tpbmRleF0udmFsdWUgKyB2YWx1ZSkgPj4gMzsKICAgICAgICBlbHNlIGlm
IChkaXN0IDwgc2MtPnNjX2Fic1tpbmRleF0uZnV6eiA8PCAxKQogICAgICAgICAgdmFsdWUg
PSAoc2MtPnNjX2Fic1tpbmRleF0udmFsdWUgKyB2YWx1ZSkgPj4gMTsKICAgICAgfQoKICAg
ICAgaWYgKHNjLT5zY19hYnNbaW5kZXhdLnZhbHVlID09IHZhbHVlKQogICAgICAgIHJldHVy
bjsKCiAgICAgIHNjLT5zY19hYnNbaW5kZXhdLnZhbHVlID0gdmFsdWU7CiAgICAgIGJyZWFr
OwoKICAgIGNhc2UgRVZUX1JFTDoKICAgICAgaWYgKCF2YWx1ZSkKICAgICAgICByZXR1cm47
CgogICAgICBicmVhazsKCiAgICBjYXNlIEVWVF9NU0M6CiAgICAgIGJyZWFrOwoKICAgIGRl
ZmF1bHQ6CiAgICAgIHJldHVybjsKICB9CgogIHN0cnVjdCBldmVudCBldjsKICBtaWNyb3Rp
bWUoJmV2LnRpbWUpOwogIGV2LnR5cGUgPSB0eXBlOwogIGV2LmluZGV4ID0gaW5kZXg7CiAg
ZXYudmFsdWUgPSB2YWx1ZTsKCiAgc3RydWN0IHV3YWNvbV9oYW5kbGVyICpoYW5kbGVyOwog
IExJU1RfRk9SRUFDSChoYW5kbGVyLCAmc2MtPnNjX2hhbmRsZXJzLCBsaW5rKQogICAgaWYg
KGJfdG9fcSgoY2hhciopJmV2LCBzaXplb2Yoc3RydWN0IGV2ZW50KSwgJmhhbmRsZXItPnF1
ZXVlKSkKICAgICAgcHJpbnRmKCIlczogZXZlbnQgcXVldWUgb3ZlcmZsb3dcbiIsIFVTQkRF
Vk5BTUUoc2MtPnNjX2RldikpOwoKICBzYy0+c2Nfc3luYyA9ICh0eXBlID09IEVWVF9TWU4p
Owp9CgpzdGF0aWMgaW50IHV3YWNvbV9pbml0KHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCB1
c2JfZGV2aWNlX2Rlc2NyaXB0b3JfdCAqZGQpIHsKICBzYy0+c2NfaWQuYnVzICAgICA9IElE
X0JVU19VU0I7CiAgc2MtPnNjX2lkLnZlbmRvciAgPSBsZTE2dG9oKFVHRVRXKGRkLT5pZFZl
bmRvcikpOwogIHNjLT5zY19pZC5wcm9kdWN0ID0gbGUxNnRvaChVR0VUVyhkZC0+aWRQcm9k
dWN0KSk7CiAgc2MtPnNjX2lkLnZlcnNpb24gPSBsZTE2dG9oKFVHRVRXKGRkLT5iY2REZXZp
Y2UpKTsKCiAgZm9yIChpbnQgaSA9IDA7IGkgPCBFVlRfVVNFRDsgKytpKQogICAgaWYgKCEo
c2MtPnNjX2JtW2ldID0gbWFsbG9jKGJtX3NpemVbaV0sIE1fVVNCREVWLCBNX05PV0FJVCB8
IE1fWkVSTykpKQogICAgICBnb3RvIG5vbWVtOwoKICBpZiAoIShzYy0+c2NfYnRuID0gbWFs
bG9jKEJUTl9VU0VEICogc2l6ZW9mKGludCksIE1fVVNCREVWLCBNX05PV0FJVCB8IE1fWkVS
TykpKQogICAgZ290byBub21lbTsKCiAgaWYgKCEoc2MtPnNjX2FicyA9IG1hbGxvYyhBQlNf
VVNFRCAqIHNpemVvZihzdHJ1Y3QgYWJzX2F4aXMpLCBNX1VTQkRFViwgTV9OT1dBSVQgfCBN
X1pFUk8pKSkKICAgIGdvdG8gbm9tZW07CgogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzBdLCBF
VlRfU1lOKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVswXSwgRVZUX0JUTik7CiAgQk1fU0VU
X0JJVChzYy0+c2NfYm1bMF0sIEVWVF9SRUwpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzBd
LCBFVlRfQUJTKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVswXSwgRVZUX01TQyk7CgogIEJN
X1NFVF9CSVQoc2MtPnNjX2JtWzFdLCBCVE5fTUlTQ18wKTsKICBCTV9TRVRfQklUKHNjLT5z
Y19ibVsxXSwgQlROX01JU0NfMSk7CiAgQk1fU0VUX0JJVChzYy0+c2NfYm1bMV0sIEJUTl9N
SVNDXzIpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzFdLCBCVE5fTUlTQ18zKTsKICBCTV9T
RVRfQklUKHNjLT5zY19ibVsxXSwgQlROX01JU0NfNCk7CiAgQk1fU0VUX0JJVChzYy0+c2Nf
Ym1bMV0sIEJUTl9NSVNDXzUpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzFdLCBCVE5fTUlT
Q182KTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsxXSwgQlROX01JU0NfNyk7CiAgQk1fU0VU
X0JJVChzYy0+c2NfYm1bMV0sIEJUTl9MRUZUKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsx
XSwgQlROX1JJR0hUKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsxXSwgQlROX01JRERMRSk7
CiAgQk1fU0VUX0JJVChzYy0+c2NfYm1bMV0sIEJUTl9TSURFKTsKICBCTV9TRVRfQklUKHNj
LT5zY19ibVsxXSwgQlROX0VYVFJBKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsxXSwgQlRO
X1RPT0xfUEVOKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsxXSwgQlROX1RPT0xfRVJBU0VS
KTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVsxXSwgQlROX1RPT0xfRklOR0VSKTsKICBCTV9T
RVRfQklUKHNjLT5zY19ibVsxXSwgQlROX1RPT0xfTU9VU0UpOwogIEJNX1NFVF9CSVQoc2Mt
PnNjX2JtWzFdLCBCVE5fVE9VQ0gpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzFdLCBCVE5f
U1RZTFVTXzEpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzFdLCBCVE5fU1RZTFVTXzIpOwoK
ICBCTV9TRVRfQklUKHNjLT5zY19ibVsyXSwgUkVMX1dIRUVMKTsKCiAgQk1fU0VUX0JJVChz
Yy0+c2NfYm1bM10sIEFCU19YKTsKICBCTV9TRVRfQklUKHNjLT5zY19ibVszXSwgQUJTX1kp
OwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzNdLCBBQlNfUlgpOwogIEJNX1NFVF9CSVQoc2Mt
PnNjX2JtWzNdLCBBQlNfUlkpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzNdLCBBQlNfUFJF
U1NVUkUpOwogIEJNX1NFVF9CSVQoc2MtPnNjX2JtWzNdLCBBQlNfRElTVEFOQ0UpOwogIEJN
X1NFVF9CSVQoc2MtPnNjX2JtWzNdLCBBQlNfVElMVF9YKTsKICBCTV9TRVRfQklUKHNjLT5z
Y19ibVszXSwgQUJTX1RJTFRfWSk7CiAgQk1fU0VUX0JJVChzYy0+c2NfYm1bM10sIEFCU19N
SVNDKTsKCiAgQk1fU0VUX0JJVChzYy0+c2NfYm1bNF0sIE1TQ19TRVJJQUwpOwoKICB1d2Fj
b21faW5pdF9hYnMoc2MsIEFCU19YLCAgICAgICAgMCwgODcyMDAsIDQsIDApOwogIHV3YWNv
bV9pbml0X2FicyhzYywgQUJTX1ksICAgICAgICAwLCA2NTYwMCwgNCwgMCk7CiAgdXdhY29t
X2luaXRfYWJzKHNjLCBBQlNfUlgsICAgICAgIDAsICA0MDk2LCAwLCAwKTsKICB1d2Fjb21f
aW5pdF9hYnMoc2MsIEFCU19SWSwgICAgICAgMCwgIDQwOTYsIDAsIDApOwogIHV3YWNvbV9p
bml0X2FicyhzYywgQUJTX1BSRVNTVVJFLCAwLCAgMTAyMywgMCwgMCk7CiAgdXdhY29tX2lu
aXRfYWJzKHNjLCBBQlNfRElTVEFOQ0UsIDAsICAgIDYzLCAwLCAwKTsKICB1d2Fjb21faW5p
dF9hYnMoc2MsIEFCU19USUxUX1gsICAgMCwgICAxMjcsIDAsIDApOwogIHV3YWNvbV9pbml0
X2FicyhzYywgQUJTX1RJTFRfWSwgICAwLCAgIDEyNywgMCwgMCk7CgogIHJldHVybiAwOwoK
bm9tZW06CiAgcHJpbnRmKCIlczogb3V0IG9mIG1lbW9yeVxuIiwgVVNCREVWTkFNRShzYy0+
c2NfZGV2KSk7CiAgc2MtPnNjX2R5aW5nID0gMTsKICByZXR1cm4gMTsKfQoKc3RhdGljIHZv
aWQgdXdhY29tX2luaXRfYWJzKHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjLCBpbnQgYXhpcywg
aW50MzJfdCBtaW4sIGludDMyX3QgbWF4LCBpbnQzMl90IGZ1enosIGludDMyX3QgZmxhdCkg
ewogIHNjLT5zY19hYnNbYXhpc10ubWluID0gbWluOwogIHNjLT5zY19hYnNbYXhpc10ubWF4
ID0gbWF4OwogIHNjLT5zY19hYnNbYXhpc10uZnV6eiA9IGZ1eno7CiAgc2MtPnNjX2Fic1th
eGlzXS5mbGF0ID0gZmxhdDsKfQoKc3RhdGljIHZvaWQgdXdhY29tX2Nsb25lKHZvaWQgKmFy
Zywgc3RydWN0IHVjcmVkICpjcmVkLCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwgc3RydWN0
IGNkZXYgKipkZXYpIHsKICBpZiAoKmRldikKICAgIHJldHVybjsKCiAgaW50IHRhYmxldDsK
ICBpZiAoZGV2X3N0ZGNsb25lKG5hbWUsIE5VTEwsICJldmVudCIsICZ0YWJsZXQpICE9IDEp
CiAgICByZXR1cm47CgogIHN0cnVjdCB1d2Fjb21fc29mdGMgKnNjID0gZGV2Y2xhc3NfZ2V0
X3NvZnRjKHV3YWNvbV9kZXZjbGFzcywgdGFibGV0KTsKICBpZiAoIXNjIHx8IHNjLT5zY19k
eWluZykKICAgIHJldHVybjsKCiAgc3RydWN0IGNkZXYgKmRldl9oYW5kbGVyOwoKICBpbnQg
bWF4ID0gLTE7CiAgTElTVF9GT1JFQUNIKGRldl9oYW5kbGVyLCAmc2MtPmRldi0+c2lfY2hp
bGRyZW4sIHNpX3NpYmxpbmdzKQogICAgaWYgKCFkZXZfaGFuZGxlci0+c2lfZHJ2MSkgewog
ICAgICAqZGV2ID0gZGV2X2hhbmRsZXI7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZiAo
SEFORExFUihkZXZfaGFuZGxlcikgPiBtYXgpCiAgICAgIG1heCA9IEhBTkRMRVIoZGV2X2hh
bmRsZXIpOwoKICBpbnQgaGFuZGxlcjsKCiAgaW50ICptYXAgPSBtYWxsb2MoKG1heCArIDEp
ICogc2l6ZW9mKGludCksIE1fVVNCREVWLCBNX05PV0FJVCB8IE1fWkVSTyk7CiAgaWYgKG1h
cCkgewogICAgTElTVF9GT1JFQUNIKGRldl9oYW5kbGVyLCAmc2MtPmRldi0+c2lfY2hpbGRy
ZW4sIHNpX3NpYmxpbmdzKQogICAgICBtYXBbSEFORExFUihkZXZfaGFuZGxlcildID0gMTsK
CiAgICBmb3IgKGhhbmRsZXIgPSAwOyBoYW5kbGVyIDw9IG1heDsgKytoYW5kbGVyKQogICAg
ICBpZiAoIW1hcFtoYW5kbGVyXSkKICAgICAgICBicmVhazsKCiAgICBmcmVlKG1hcCwgTV9V
U0JERVYpOwogIH0gZWxzZQogICAgaGFuZGxlciA9IG1heCArIDE7CgogIGlmIChoYW5kbGVy
ID4gSEFORExFUl9NQVgpCiAgICByZXR1cm47CgogICpkZXYgPSBtYWtlX2RldigmdXdhY29t
X2NkZXZzdywgTUlOT1IodGFibGV0LCBoYW5kbGVyKSwgVUlEX1JPT1QsIEdJRF9PUEVSQVRP
UiwgMDY0NCwgIiVzLiVkIiwgbmFtZSwgaGFuZGxlcik7CiAgZGV2X2RlcGVuZHMoc2MtPmRl
diwgKmRldik7CiAgKCpkZXYpLT5zaV9mbGFncyB8PSBTSV9DSEVBUENMT05FOwogICgqZGV2
KS0+c2lfZHJ2MSA9IE5VTEw7Cn0KCkRSSVZFUl9NT0RVTEUodXdhY29tLCB1aHViLCB1d2Fj
b21fZHJpdmVyLCB1d2Fjb21fZGV2Y2xhc3MsIHVzYmRfZHJpdmVyX2xvYWQsIE5VTEwpOwoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJzZHdhY29tL3V3YWNv
bS9NYWtlZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMTc1MSAAMDAwMDAw
IAAwMDAwMDAwMDEyMSAxMDcwMjcyNTU2MiAwMTU3MDcAIDAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIAMDB1bmRvAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAw
MDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAS01PRD0JdXdhY29tClNSQ1M9CXV3YWNvbS5jClNSQ1MrPQlkZXZpY2Vf
aWYuaCBidXNfaWYuaAoKLmluY2x1ZGUgPGJzZC5rbW9kLm1rPgoKAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABic2R3YWNvbS91d2Fjb20v
b3B0X3VzYi5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwNjQ0IAAwMDE3NTEgADAwMDAwMCAA
MDAwMDAwMDAwMDAgMTA3MDI3MjU1NjUgMDE2MDcyACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyADAwdW5kbwAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB3aGVlbAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDAwMCAAMDAw
MDAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGJzZHdhY29tL2xpbnV4d2Fjb20vZmlsZXMvAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAwMDA3NTUgADAwMTc1MSAAMDAwMDAwIAAwMDAwMDAwMDAwMCAxMDcwMjcyNzYwNiAwMTYy
NTMAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0
YXIAMDB1bmRvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHdoZWVsAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYnNkd2Fjb20vbGludXh3YWNv
bS9ydW5fY29uZmlndXJlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDc1NSAAMDAxNzUxIAAwMDAwMDAgADAw
MDAwMDAxMzUyIDEwNzAyNzI3NjM2IDAxNzc1MAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHVuZG8AAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAw
MCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAjIS9iaW4vc2gKcm0gLXJmIGxpbnV4d2Fjb20tMC43LjgtMwp0YXIgeGYgbGlu
dXh3YWNvbS0wLjcuOC0zLnRhci5iejIKcGF0Y2ggPCBwYXRjaF9saW51eHdhY29tLTAuNy44
LTMKbWtkaXIgbGludXh3YWNvbS0wLjcuOC0zL3NyYy91dGlsL2FzbQpta2RpciBsaW51eHdh
Y29tLTAuNy44LTMvc3JjL3V0aWwvbGludXgKbWtkaXIgbGludXh3YWNvbS0wLjcuOC0zL3Ny
Yy94ZHJ2L2FzbQpta2RpciBsaW51eHdhY29tLTAuNy44LTMvc3JjL3hkcnYvbGludXgKY3Ag
ZmlsZXMvdHlwZXMuaCBsaW51eHdhY29tLTAuNy44LTMvc3JjL3V0aWwvYXNtCmNwIGZpbGVz
L2lucHV0LmggbGludXh3YWNvbS0wLjcuOC0zL3NyYy91dGlsL2xpbnV4CmNwIGZpbGVzL3R5
cGVzLmggbGludXh3YWNvbS0wLjcuOC0zL3NyYy94ZHJ2L2FzbQpjcCBmaWxlcy9pbnB1dC5o
IGxpbnV4d2Fjb20tMC43LjgtMy9zcmMveGRydi9saW51eApjZCBsaW51eHdhY29tLTAuNy44
LTMKLi9jb25maWd1cmUgLS13aXRoLXhvcmctc2RrPS91c3IvbG9jYWwgLS13aXRoLXhsaWI9
L3Vzci9sb2NhbC9saWIgLS13aXRoLXRjbD0vdXNyL2xvY2FsL2luY2x1ZGUvdGNsOC40IC0t
d2l0aC10az0vdXNyL2xvY2FsL2luY2x1ZGUvdGs4LjQgLS13aXRoLWxpbnV4PXllcyAtLXdp
dGgteG1vZHVsZWRpcj0vdXNyL2xvY2FsL2xpYi94b3JnL21vZHVsZXMvaW5wdXQgQ0ZMQUdT
PSItSS91c3IvbG9jYWwvaW5jbHVkZSIgTERGTEFHUz0iLUkvdXNyL2xvY2FsL2xpYiIKCgAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAYnNkd2Fjb20vbGludXh3YWNvbS9wYXRjaF9saW51eHdhY29tLTAuNy44LTMAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAw
MDY0NCAAMDAxNzUxIAAwMDAwMDAgADAwMDAwMDAxNzY3IDEwNzAyNzI1NzY0IDAyMTI2NwAg
MAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAw
MHVuZG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAd2hlZWwAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABkaWZmIC1ydU4gbGludXh3YWNvbS0w
LjcuOC0zLm9yaWcvc3JjL3hkcnYvTWFrZWZpbGUuYW0gbGludXh3YWNvbS0wLjcuOC0zL3Ny
Yy94ZHJ2L01ha2VmaWxlLmFtCi0tLSBsaW51eHdhY29tLTAuNy44LTMub3JpZy9zcmMveGRy
di9NYWtlZmlsZS5hbQkyMDA3LTA4LTE1IDAwOjEyOjM5LjAwMDAwMDAwMCArMDEwMAorKysg
bGludXh3YWNvbS0wLjcuOC0zL3NyYy94ZHJ2L01ha2VmaWxlLmFtCTIwMDctMTAtMDkgMTY6
MDc6MjEuMDAwMDAwMDAwICswMTAwCkBAIC00OSw3ICs0OSw3IEBACiBETExPQURFUj0tZlBJ
QwogZW5kaWYKIAotQ0ZMQUdTICs9ICQoV0NNX0NGTEFHU19TVEFDS19QUk9URUNUT1IpIC1X
bm8tdmFyaWFkaWMtbWFjcm9zCitDRkxBR1MgKz0gJChXQ01fQ0ZMQUdTX1NUQUNLX1BST1RF
Q1RPUikKIAogWEY4Nk9CSlMgPSB4Zjg2V2Fjb20ubyB3Y21TZXJpYWwubyB3Y21VU0IubyB3
Y21JU0RWNC5vIFwKIAl3Y21YQ29tbWFuZC5vIHdjbUNvbW1vbi5vIHdjbUNvbXBhdC5vIHdj
bUNvbmZpZy5vIFwKZGlmZiAtcnVOIGxpbnV4d2Fjb20tMC43LjgtMy5vcmlnL3NyYy94ZHJ2
L01ha2VmaWxlLmluIGxpbnV4d2Fjb20tMC43LjgtMy9zcmMveGRydi9NYWtlZmlsZS5pbgot
LS0gbGludXh3YWNvbS0wLjcuOC0zLm9yaWcvc3JjL3hkcnYvTWFrZWZpbGUuaW4JMjAwNy0w
OC0xNSAwMDoxMjozOS4wMDAwMDAwMDAgKzAxMDAKKysrIGxpbnV4d2Fjb20tMC43LjgtMy9z
cmMveGRydi9NYWtlZmlsZS5pbgkyMDA3LTEwLTA5IDE2OjA3OjI2LjAwMDAwMDAwMCArMDEw
MApAQCAtNzEsNyArNzEsNyBAQAogQVdLID0gQEFXS0AKIENDID0gQENDQAogQ0NERVBNT0RF
ID0gQENDREVQTU9ERUAKLUNGTEFHUyA9IEBDRkxBR1NAICQoV0NNX0NGTEFHU19TVEFDS19Q
Uk9URUNUT1IpIC1Xbm8tdmFyaWFkaWMtbWFjcm9zCitDRkxBR1MgPSBAQ0ZMQUdTQCAkKFdD
TV9DRkxBR1NfU1RBQ0tfUFJPVEVDVE9SKQogQ1BQID0gQENQUEAKIENQUEZMQUdTID0gQENQ
UEZMQUdTQAogQ1hYID0gQENYWEAKAAAAAAAAAAAAYnNkd2Fjb20vbGludXh3YWNvbS9maWxl
cy90eXBlcy5oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADAwMDY0NCAAMDAxNzUxIAAwMDAwMDAgADAwMDAwMDAw
Mzc3IDEwNzAyNzI1NzUzIDAxNzYwMAAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAB1c3RhcgAwMHVuZG8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAd2hlZWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwMDAwMDAgADAwMDAwMCAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAjaWZuZGVmIF9UWVBFU19ICiNkZWZpbmUgX1RZUEVTX0gKCiNpbmNsdWRlIDxzeXMvdHlw
ZXMuaD4KCnR5cGVkZWYgaW50OF90IF9fczg7CnR5cGVkZWYgdWludDhfdCBfX3U4OwoKdHlw
ZWRlZiBpbnQxNl90IF9fczE2Owp0eXBlZGVmIHVpbnQxNl90IF9fdTE2OwoKdHlwZWRlZiBp
bnQzMl90IF9fczMyOwp0eXBlZGVmIHVpbnQzMl90IF9fdTMyOwoKdHlwZWRlZiBpbnQ2NF90
IF9fczY0Owp0eXBlZGVmIHVpbnQ2NF90IF9fdTY0OwoKI2VuZGlmCgoAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGJzZHdhY29tL2xpbnV4d2Fjb20vZmlsZXMv
aW5wdXQuaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAwMDA2NDQgADAwMTc1MSAAMDAwMDAwIAAwMDAwMDA3NTIz
MyAxMDcwMjcyNTc1MyAwMTc1NzYAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAdXN0YXIAMDB1bmRvAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHdoZWVsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMDAwMDAwIAAwMDAwMDAgAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
I2lmbmRlZiBfSU5QVVRfSAojZGVmaW5lIF9JTlBVVF9ICgovKgogKiBDb3B5cmlnaHQgKGMp
IDE5OTktMjAwMiBWb2p0ZWNoIFBhdmxpawogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogKiB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNp
b24gMiBhcyBwdWJsaXNoZWQgYnkKICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K
ICovCgojaWZkZWYgX19LRVJORUxfXwojaW5jbHVkZSA8bGludXgvdGltZS5oPgojaW5jbHVk
ZSA8bGludXgvbGlzdC5oPgojZWxzZQojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUg
PHN5cy9pb2N0bC5oPgojaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiNpbmNsdWRlIDxhc20vdHlw
ZXMuaD4KI2VuZGlmCgovKgogKiBUaGUgZXZlbnQgc3RydWN0dXJlIGl0c2VsZgogKi8KCnN0
cnVjdCBpbnB1dF9ldmVudCB7CglzdHJ1Y3QgdGltZXZhbCB0aW1lOwoJX191MTYgdHlwZTsK
CV9fdTE2IGNvZGU7CglfX3MzMiB2YWx1ZTsKfTsKCi8qCiAqIFByb3RvY29sIHZlcnNpb24u
CiAqLwoKI2RlZmluZSBFVl9WRVJTSU9OCQkweDAxMDAwMAoKLyoKICogSU9DVExzICgweDAw
IC0gMHg3ZikKICovCgpzdHJ1Y3QgaW5wdXRfaWQgewoJX191MTYgYnVzdHlwZTsKCV9fdTE2
IHZlbmRvcjsKCV9fdTE2IHByb2R1Y3Q7CglfX3UxNiB2ZXJzaW9uOwp9OwoKc3RydWN0IGlu
cHV0X2Fic2luZm8gewoJX19zMzIgdmFsdWU7CglfX3MzMiBtaW5pbXVtOwoJX19zMzIgbWF4
aW11bTsKCV9fczMyIGZ1eno7CglfX3MzMiBmbGF0Owp9OwoKI2lmbmRlZiBfSU9DX1JFQUQK
I2RlZmluZSBfSU9DX1JFQUQgSU9DX09VVAojZW5kaWYKCiNkZWZpbmUgRVZJT0NHVkVSU0lP
TgkJX0lPUignRScsIDB4MDEsIGludCkJCQkvKiBnZXQgZHJpdmVyIHZlcnNpb24gKi8KI2Rl
ZmluZSBFVklPQ0dJRAkJX0lPUignRScsIDB4MDIsIHN0cnVjdCBpbnB1dF9pZCkJLyogZ2V0
IGRldmljZSBJRCAqLwojZGVmaW5lIEVWSU9DR1JFUAkJX0lPUignRScsIDB4MDMsIGludFsy
XSkJCQkvKiBnZXQgcmVwZWF0IHNldHRpbmdzICovCiNkZWZpbmUgRVZJT0NTUkVQCQlfSU9X
KCdFJywgMHgwMywgaW50WzJdKQkJCS8qIHNldCByZXBlYXQgc2V0dGluZ3MgKi8KI2RlZmlu
ZSBFVklPQ0dLRVlDT0RFCQlfSU9SKCdFJywgMHgwNCwgaW50WzJdKQkJCS8qIGdldCBrZXlj
b2RlICovCiNkZWZpbmUgRVZJT0NTS0VZQ09ERQkJX0lPVygnRScsIDB4MDQsIGludFsyXSkJ
CQkvKiBzZXQga2V5Y29kZSAqLwoKI2RlZmluZSBFVklPQ0dOQU1FKGxlbikJCV9JT0MoX0lP
Q19SRUFELCAnRScsIDB4MDYsIGxlbikJCS8qIGdldCBkZXZpY2UgbmFtZSAqLwojZGVmaW5l
IEVWSU9DR1BIWVMobGVuKQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwNywgbGVuKQkJLyog
Z2V0IHBoeXNpY2FsIGxvY2F0aW9uICovCiNkZWZpbmUgRVZJT0NHVU5JUShsZW4pCQlfSU9D
KF9JT0NfUkVBRCwgJ0UnLCAweDA4LCBsZW4pCQkvKiBnZXQgdW5pcXVlIGlkZW50aWZpZXIg
Ki8KCiNkZWZpbmUgRVZJT0NHS0VZKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTgs
IGxlbikJCS8qIGdldCBnbG9iYWwga2V5c3RhdGUgKi8KI2RlZmluZSBFVklPQ0dMRUQobGVu
KQkJX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxOSwgbGVuKQkJLyogZ2V0IGFsbCBMRURzICov
CiNkZWZpbmUgRVZJT0NHU05EKGxlbikJCV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MWEsIGxl
bikJCS8qIGdldCBhbGwgc291bmRzIHN0YXR1cyAqLwojZGVmaW5lIEVWSU9DR1NXKGxlbikJ
CV9JT0MoX0lPQ19SRUFELCAnRScsIDB4MWIsIGxlbikJCS8qIGdldCBhbGwgc3dpdGNoIHN0
YXRlcyAqLwoKI2RlZmluZSBFVklPQ0dCSVQoZXYsbGVuKQlfSU9DKF9JT0NfUkVBRCwgJ0Un
LCAweDIwICsgZXYsIGxlbikJLyogZ2V0IGV2ZW50IGJpdHMgKi8KI2RlZmluZSBFVklPQ0dB
QlMoYWJzKQkJX0lPUignRScsIDB4NDAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQkJ
LyogZ2V0IGFicyB2YWx1ZS9saW1pdHMgKi8KI2RlZmluZSBFVklPQ1NBQlMoYWJzKQkJX0lP
VygnRScsIDB4YzAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKQkJLyogc2V0IGFicyB2
YWx1ZS9saW1pdHMgKi8KCiNkZWZpbmUgRVZJT0NTRkYJCV9JT0MoX0lPQ19XUklURSwgJ0Un
LCAweDgwLCBzaXplb2Yoc3RydWN0IGZmX2VmZmVjdCkpCS8qIHNlbmQgYSBmb3JjZSBlZmZl
Y3QgdG8gYSBmb3JjZSBmZWVkYmFjayBkZXZpY2UgKi8KI2RlZmluZSBFVklPQ1JNRkYJCV9J
T1coJ0UnLCAweDgxLCBpbnQpCQkJLyogRXJhc2UgYSBmb3JjZSBlZmZlY3QgKi8KI2RlZmlu
ZSBFVklPQ0dFRkZFQ1RTCQlfSU9SKCdFJywgMHg4NCwgaW50KQkJCS8qIFJlcG9ydCBudW1i
ZXIgb2YgZWZmZWN0cyBwbGF5YWJsZSBhdCB0aGUgc2FtZSB0aW1lICovCgojZGVmaW5lIEVW
SU9DR1JBQgkJX0lPVygnRScsIDB4OTAsIGludCkJCQkvKiBHcmFiL1JlbGVhc2UgZGV2aWNl
ICovCgovKgogKiBFdmVudCB0eXBlcwogKi8KCiNkZWZpbmUgRVZfU1lOCQkJMHgwMAojZGVm
aW5lIEVWX0tFWQkJCTB4MDEKI2RlZmluZSBFVl9SRUwJCQkweDAyCiNkZWZpbmUgRVZfQUJT
CQkJMHgwMwojZGVmaW5lIEVWX01TQwkJCTB4MDQKI2RlZmluZSBFVl9TVwkJCTB4MDUKI2Rl
ZmluZSBFVl9MRUQJCQkweDExCiNkZWZpbmUgRVZfU05ECQkJMHgxMgojZGVmaW5lIEVWX1JF
UAkJCTB4MTQKI2RlZmluZSBFVl9GRgkJCTB4MTUKI2RlZmluZSBFVl9QV1IJCQkweDE2CiNk
ZWZpbmUgRVZfRkZfU1RBVFVTCQkweDE3CiNkZWZpbmUgRVZfTUFYCQkJMHgxZgoKLyoKICog
U3luY2hyb25pemF0aW9uIGV2ZW50cy4KICovCgojZGVmaW5lIFNZTl9SRVBPUlQJCTAKI2Rl
ZmluZSBTWU5fQ09ORklHCQkxCgovKgogKiBLZXlzIGFuZCBidXR0b25zCiAqLwoKI2RlZmlu
ZSBLRVlfUkVTRVJWRUQJCTAKI2RlZmluZSBLRVlfRVNDCQkJMQojZGVmaW5lIEtFWV8xCQkJ
MgojZGVmaW5lIEtFWV8yCQkJMwojZGVmaW5lIEtFWV8zCQkJNAojZGVmaW5lIEtFWV80CQkJ
NQojZGVmaW5lIEtFWV81CQkJNgojZGVmaW5lIEtFWV82CQkJNwojZGVmaW5lIEtFWV83CQkJ
OAojZGVmaW5lIEtFWV84CQkJOQojZGVmaW5lIEtFWV85CQkJMTAKI2RlZmluZSBLRVlfMAkJ
CTExCiNkZWZpbmUgS0VZX01JTlVTCQkxMgojZGVmaW5lIEtFWV9FUVVBTAkJMTMKI2RlZmlu
ZSBLRVlfQkFDS1NQQUNFCQkxNAojZGVmaW5lIEtFWV9UQUIJCQkxNQojZGVmaW5lIEtFWV9R
CQkJMTYKI2RlZmluZSBLRVlfVwkJCTE3CiNkZWZpbmUgS0VZX0UJCQkxOAojZGVmaW5lIEtF
WV9SCQkJMTkKI2RlZmluZSBLRVlfVAkJCTIwCiNkZWZpbmUgS0VZX1kJCQkyMQojZGVmaW5l
IEtFWV9VCQkJMjIKI2RlZmluZSBLRVlfSQkJCTIzCiNkZWZpbmUgS0VZX08JCQkyNAojZGVm
aW5lIEtFWV9QCQkJMjUKI2RlZmluZSBLRVlfTEVGVEJSQUNFCQkyNgojZGVmaW5lIEtFWV9S
SUdIVEJSQUNFCQkyNwojZGVmaW5lIEtFWV9FTlRFUgkJMjgKI2RlZmluZSBLRVlfTEVGVENU
UkwJCTI5CiNkZWZpbmUgS0VZX0EJCQkzMAojZGVmaW5lIEtFWV9TCQkJMzEKI2RlZmluZSBL
RVlfRAkJCTMyCiNkZWZpbmUgS0VZX0YJCQkzMwojZGVmaW5lIEtFWV9HCQkJMzQKI2RlZmlu
ZSBLRVlfSAkJCTM1CiNkZWZpbmUgS0VZX0oJCQkzNgojZGVmaW5lIEtFWV9LCQkJMzcKI2Rl
ZmluZSBLRVlfTAkJCTM4CiNkZWZpbmUgS0VZX1NFTUlDT0xPTgkJMzkKI2RlZmluZSBLRVlf
QVBPU1RST1BIRQkJNDAKI2RlZmluZSBLRVlfR1JBVkUJCTQxCiNkZWZpbmUgS0VZX0xFRlRT
SElGVAkJNDIKI2RlZmluZSBLRVlfQkFDS1NMQVNICQk0MwojZGVmaW5lIEtFWV9aCQkJNDQK
I2RlZmluZSBLRVlfWAkJCTQ1CiNkZWZpbmUgS0VZX0MJCQk0NgojZGVmaW5lIEtFWV9WCQkJ
NDcKI2RlZmluZSBLRVlfQgkJCTQ4CiNkZWZpbmUgS0VZX04JCQk0OQojZGVmaW5lIEtFWV9N
CQkJNTAKI2RlZmluZSBLRVlfQ09NTUEJCTUxCiNkZWZpbmUgS0VZX0RPVAkJCTUyCiNkZWZp
bmUgS0VZX1NMQVNICQk1MwojZGVmaW5lIEtFWV9SSUdIVFNISUZUCQk1NAojZGVmaW5lIEtF
WV9LUEFTVEVSSVNLCQk1NQojZGVmaW5lIEtFWV9MRUZUQUxUCQk1NgojZGVmaW5lIEtFWV9T
UEFDRQkJNTcKI2RlZmluZSBLRVlfQ0FQU0xPQ0sJCTU4CiNkZWZpbmUgS0VZX0YxCQkJNTkK
I2RlZmluZSBLRVlfRjIJCQk2MAojZGVmaW5lIEtFWV9GMwkJCTYxCiNkZWZpbmUgS0VZX0Y0
CQkJNjIKI2RlZmluZSBLRVlfRjUJCQk2MwojZGVmaW5lIEtFWV9GNgkJCTY0CiNkZWZpbmUg
S0VZX0Y3CQkJNjUKI2RlZmluZSBLRVlfRjgJCQk2NgojZGVmaW5lIEtFWV9GOQkJCTY3CiNk
ZWZpbmUgS0VZX0YxMAkJCTY4CiNkZWZpbmUgS0VZX05VTUxPQ0sJCTY5CiNkZWZpbmUgS0VZ
X1NDUk9MTExPQ0sJCTcwCiNkZWZpbmUgS0VZX0tQNwkJCTcxCiNkZWZpbmUgS0VZX0tQOAkJ
CTcyCiNkZWZpbmUgS0VZX0tQOQkJCTczCiNkZWZpbmUgS0VZX0tQTUlOVVMJCTc0CiNkZWZp
bmUgS0VZX0tQNAkJCTc1CiNkZWZpbmUgS0VZX0tQNQkJCTc2CiNkZWZpbmUgS0VZX0tQNgkJ
CTc3CiNkZWZpbmUgS0VZX0tQUExVUwkJNzgKI2RlZmluZSBLRVlfS1AxCQkJNzkKI2RlZmlu
ZSBLRVlfS1AyCQkJODAKI2RlZmluZSBLRVlfS1AzCQkJODEKI2RlZmluZSBLRVlfS1AwCQkJ
ODIKI2RlZmluZSBLRVlfS1BET1QJCTgzCgojZGVmaW5lIEtFWV9aRU5LQUtVSEFOS0FLVQk4
NQojZGVmaW5lIEtFWV8xMDJORAkJODYKI2RlZmluZSBLRVlfRjExCQkJODcKI2RlZmluZSBL
RVlfRjEyCQkJODgKI2RlZmluZSBLRVlfUk8JCQk4OQojZGVmaW5lIEtFWV9LQVRBS0FOQQkJ
OTAKI2RlZmluZSBLRVlfSElSQUdBTkEJCTkxCiNkZWZpbmUgS0VZX0hFTktBTgkJOTIKI2Rl
ZmluZSBLRVlfS0FUQUtBTkFISVJBR0FOQQk5MwojZGVmaW5lIEtFWV9NVUhFTktBTgkJOTQK
I2RlZmluZSBLRVlfS1BKUENPTU1BCQk5NQojZGVmaW5lIEtFWV9LUEVOVEVSCQk5NgojZGVm
aW5lIEtFWV9SSUdIVENUUkwJCTk3CiNkZWZpbmUgS0VZX0tQU0xBU0gJCTk4CiNkZWZpbmUg
S0VZX1NZU1JRCQk5OQojZGVmaW5lIEtFWV9SSUdIVEFMVAkJMTAwCiNkZWZpbmUgS0VZX0xJ
TkVGRUVECQkxMDEKI2RlZmluZSBLRVlfSE9NRQkJMTAyCiNkZWZpbmUgS0VZX1VQCQkJMTAz
CiNkZWZpbmUgS0VZX1BBR0VVUAkJMTA0CiNkZWZpbmUgS0VZX0xFRlQJCTEwNQojZGVmaW5l
IEtFWV9SSUdIVAkJMTA2CiNkZWZpbmUgS0VZX0VORAkJCTEwNwojZGVmaW5lIEtFWV9ET1dO
CQkxMDgKI2RlZmluZSBLRVlfUEFHRURPV04JCTEwOQojZGVmaW5lIEtFWV9JTlNFUlQJCTEx
MAojZGVmaW5lIEtFWV9ERUxFVEUJCTExMQojZGVmaW5lIEtFWV9NQUNSTwkJMTEyCiNkZWZp
bmUgS0VZX01VVEUJCTExMwojZGVmaW5lIEtFWV9WT0xVTUVET1dOCQkxMTQKI2RlZmluZSBL
RVlfVk9MVU1FVVAJCTExNQojZGVmaW5lIEtFWV9QT1dFUgkJMTE2CiNkZWZpbmUgS0VZX0tQ
RVFVQUwJCTExNwojZGVmaW5lIEtFWV9LUFBMVVNNSU5VUwkJMTE4CiNkZWZpbmUgS0VZX1BB
VVNFCQkxMTkKCiNkZWZpbmUgS0VZX0tQQ09NTUEJCTEyMQojZGVmaW5lIEtFWV9IQU5HRVVM
CQkxMjIKI2RlZmluZSBLRVlfSEFOR1VFTAkJS0VZX0hBTkdFVUwKI2RlZmluZSBLRVlfSEFO
SkEJCTEyMwojZGVmaW5lIEtFWV9ZRU4JCQkxMjQKI2RlZmluZSBLRVlfTEVGVE1FVEEJCTEy
NQojZGVmaW5lIEtFWV9SSUdIVE1FVEEJCTEyNgojZGVmaW5lIEtFWV9DT01QT1NFCQkxMjcK
CiNkZWZpbmUgS0VZX1NUT1AJCTEyOAojZGVmaW5lIEtFWV9BR0FJTgkJMTI5CiNkZWZpbmUg
S0VZX1BST1BTCQkxMzAKI2RlZmluZSBLRVlfVU5ETwkJMTMxCiNkZWZpbmUgS0VZX0ZST05U
CQkxMzIKI2RlZmluZSBLRVlfQ09QWQkJMTMzCiNkZWZpbmUgS0VZX09QRU4JCTEzNAojZGVm
aW5lIEtFWV9QQVNURQkJMTM1CiNkZWZpbmUgS0VZX0ZJTkQJCTEzNgojZGVmaW5lIEtFWV9D
VVQJCQkxMzcKI2RlZmluZSBLRVlfSEVMUAkJMTM4CiNkZWZpbmUgS0VZX01FTlUJCTEzOQoj
ZGVmaW5lIEtFWV9DQUxDCQkxNDAKI2RlZmluZSBLRVlfU0VUVVAJCTE0MQojZGVmaW5lIEtF
WV9TTEVFUAkJMTQyCiNkZWZpbmUgS0VZX1dBS0VVUAkJMTQzCiNkZWZpbmUgS0VZX0ZJTEUJ
CTE0NAojZGVmaW5lIEtFWV9TRU5ERklMRQkJMTQ1CiNkZWZpbmUgS0VZX0RFTEVURUZJTEUJ
CTE0NgojZGVmaW5lIEtFWV9YRkVSCQkxNDcKI2RlZmluZSBLRVlfUFJPRzEJCTE0OAojZGVm
aW5lIEtFWV9QUk9HMgkJMTQ5CiNkZWZpbmUgS0VZX1dXVwkJCTE1MAojZGVmaW5lIEtFWV9N
U0RPUwkJMTUxCiNkZWZpbmUgS0VZX0NPRkZFRQkJMTUyCiNkZWZpbmUgS0VZX0RJUkVDVElP
TgkJMTUzCiNkZWZpbmUgS0VZX0NZQ0xFV0lORE9XUwkxNTQKI2RlZmluZSBLRVlfTUFJTAkJ
MTU1CiNkZWZpbmUgS0VZX0JPT0tNQVJLUwkJMTU2CiNkZWZpbmUgS0VZX0NPTVBVVEVSCQkx
NTcKI2RlZmluZSBLRVlfQkFDSwkJMTU4CiNkZWZpbmUgS0VZX0ZPUldBUkQJCTE1OQojZGVm
aW5lIEtFWV9DTE9TRUNECQkxNjAKI2RlZmluZSBLRVlfRUpFQ1RDRAkJMTYxCiNkZWZpbmUg
S0VZX0VKRUNUQ0xPU0VDRAkxNjIKI2RlZmluZSBLRVlfTkVYVFNPTkcJCTE2MwojZGVmaW5l
IEtFWV9QTEFZUEFVU0UJCTE2NAojZGVmaW5lIEtFWV9QUkVWSU9VU1NPTkcJMTY1CiNkZWZp
bmUgS0VZX1NUT1BDRAkJMTY2CiNkZWZpbmUgS0VZX1JFQ09SRAkJMTY3CiNkZWZpbmUgS0VZ
X1JFV0lORAkJMTY4CiNkZWZpbmUgS0VZX1BIT05FCQkxNjkKI2RlZmluZSBLRVlfSVNPCQkJ
MTcwCiNkZWZpbmUgS0VZX0NPTkZJRwkJMTcxCiNkZWZpbmUgS0VZX0hPTUVQQUdFCQkxNzIK
I2RlZmluZSBLRVlfUkVGUkVTSAkJMTczCiNkZWZpbmUgS0VZX0VYSVQJCTE3NAojZGVmaW5l
IEtFWV9NT1ZFCQkxNzUKI2RlZmluZSBLRVlfRURJVAkJMTc2CiNkZWZpbmUgS0VZX1NDUk9M
TFVQCQkxNzcKI2RlZmluZSBLRVlfU0NST0xMRE9XTgkJMTc4CiNkZWZpbmUgS0VZX0tQTEVG
VFBBUkVOCQkxNzkKI2RlZmluZSBLRVlfS1BSSUdIVFBBUkVOCTE4MAojZGVmaW5lIEtFWV9O
RVcJCQkxODEKI2RlZmluZSBLRVlfUkVETwkJMTgyCgojZGVmaW5lIEtFWV9GMTMJCQkxODMK
I2RlZmluZSBLRVlfRjE0CQkJMTg0CiNkZWZpbmUgS0VZX0YxNQkJCTE4NQojZGVmaW5lIEtF
WV9GMTYJCQkxODYKI2RlZmluZSBLRVlfRjE3CQkJMTg3CiNkZWZpbmUgS0VZX0YxOAkJCTE4
OAojZGVmaW5lIEtFWV9GMTkJCQkxODkKI2RlZmluZSBLRVlfRjIwCQkJMTkwCiNkZWZpbmUg
S0VZX0YyMQkJCTE5MQojZGVmaW5lIEtFWV9GMjIJCQkxOTIKI2RlZmluZSBLRVlfRjIzCQkJ
MTkzCiNkZWZpbmUgS0VZX0YyNAkJCTE5NAoKI2RlZmluZSBLRVlfUExBWUNECQkyMDAKI2Rl
ZmluZSBLRVlfUEFVU0VDRAkJMjAxCiNkZWZpbmUgS0VZX1BST0czCQkyMDIKI2RlZmluZSBL
RVlfUFJPRzQJCTIwMwojZGVmaW5lIEtFWV9TVVNQRU5ECQkyMDUKI2RlZmluZSBLRVlfQ0xP
U0UJCTIwNgojZGVmaW5lIEtFWV9QTEFZCQkyMDcKI2RlZmluZSBLRVlfRkFTVEZPUldBUkQJ
CTIwOAojZGVmaW5lIEtFWV9CQVNTQk9PU1QJCTIwOQojZGVmaW5lIEtFWV9QUklOVAkJMjEw
CiNkZWZpbmUgS0VZX0hQCQkJMjExCiNkZWZpbmUgS0VZX0NBTUVSQQkJMjEyCiNkZWZpbmUg
S0VZX1NPVU5ECQkyMTMKI2RlZmluZSBLRVlfUVVFU1RJT04JCTIxNAojZGVmaW5lIEtFWV9F
TUFJTAkJMjE1CiNkZWZpbmUgS0VZX0NIQVQJCTIxNgojZGVmaW5lIEtFWV9TRUFSQ0gJCTIx
NwojZGVmaW5lIEtFWV9DT05ORUNUCQkyMTgKI2RlZmluZSBLRVlfRklOQU5DRQkJMjE5CiNk
ZWZpbmUgS0VZX1NQT1JUCQkyMjAKI2RlZmluZSBLRVlfU0hPUAkJMjIxCiNkZWZpbmUgS0VZ
X0FMVEVSQVNFCQkyMjIKI2RlZmluZSBLRVlfQ0FOQ0VMCQkyMjMKI2RlZmluZSBLRVlfQlJJ
R0hUTkVTU0RPV04JMjI0CiNkZWZpbmUgS0VZX0JSSUdIVE5FU1NVUAkyMjUKI2RlZmluZSBL
RVlfTUVESUEJCTIyNgoKI2RlZmluZSBLRVlfU1dJVENIVklERU9NT0RFCTIyNwojZGVmaW5l
IEtFWV9LQkRJTExVTVRPR0dMRQkyMjgKI2RlZmluZSBLRVlfS0JESUxMVU1ET1dOCTIyOQoj
ZGVmaW5lIEtFWV9LQkRJTExVTVVQCQkyMzAKCiNkZWZpbmUgS0VZX1NFTkQJCTIzMQojZGVm
aW5lIEtFWV9SRVBMWQkJMjMyCiNkZWZpbmUgS0VZX0ZPUldBUkRNQUlMCQkyMzMKI2RlZmlu
ZSBLRVlfU0FWRQkJMjM0CiNkZWZpbmUgS0VZX0RPQ1VNRU5UUwkJMjM1CgojZGVmaW5lIEtF
WV9CQVRURVJZCQkyMzYKCiNkZWZpbmUgS0VZX0JMVUVUT09USAkJMjM3CiNkZWZpbmUgS0VZ
X1dMQU4JCTIzOAoKI2RlZmluZSBLRVlfVU5LTk9XTgkJMjQwCgojZGVmaW5lIEJUTl9NSVND
CQkweDEwMAojZGVmaW5lIEJUTl8wCQkJMHgxMDAKI2RlZmluZSBCVE5fMQkJCTB4MTAxCiNk
ZWZpbmUgQlROXzIJCQkweDEwMgojZGVmaW5lIEJUTl8zCQkJMHgxMDMKI2RlZmluZSBCVE5f
NAkJCTB4MTA0CiNkZWZpbmUgQlROXzUJCQkweDEwNQojZGVmaW5lIEJUTl82CQkJMHgxMDYK
I2RlZmluZSBCVE5fNwkJCTB4MTA3CiNkZWZpbmUgQlROXzgJCQkweDEwOAojZGVmaW5lIEJU
Tl85CQkJMHgxMDkKCiNkZWZpbmUgQlROX01PVVNFCQkweDExMAojZGVmaW5lIEJUTl9MRUZU
CQkweDExMAojZGVmaW5lIEJUTl9SSUdIVAkJMHgxMTEKI2RlZmluZSBCVE5fTUlERExFCQkw
eDExMgojZGVmaW5lIEJUTl9TSURFCQkweDExMwojZGVmaW5lIEJUTl9FWFRSQQkJMHgxMTQK
I2RlZmluZSBCVE5fRk9SV0FSRAkJMHgxMTUKI2RlZmluZSBCVE5fQkFDSwkJMHgxMTYKI2Rl
ZmluZSBCVE5fVEFTSwkJMHgxMTcKCiNkZWZpbmUgQlROX0pPWVNUSUNLCQkweDEyMAojZGVm
aW5lIEJUTl9UUklHR0VSCQkweDEyMAojZGVmaW5lIEJUTl9USFVNQgkJMHgxMjEKI2RlZmlu
ZSBCVE5fVEhVTUIyCQkweDEyMgojZGVmaW5lIEJUTl9UT1AJCQkweDEyMwojZGVmaW5lIEJU
Tl9UT1AyCQkweDEyNAojZGVmaW5lIEJUTl9QSU5LSUUJCTB4MTI1CiNkZWZpbmUgQlROX0JB
U0UJCTB4MTI2CiNkZWZpbmUgQlROX0JBU0UyCQkweDEyNwojZGVmaW5lIEJUTl9CQVNFMwkJ
MHgxMjgKI2RlZmluZSBCVE5fQkFTRTQJCTB4MTI5CiNkZWZpbmUgQlROX0JBU0U1CQkweDEy
YQojZGVmaW5lIEJUTl9CQVNFNgkJMHgxMmIKI2RlZmluZSBCVE5fREVBRAkJMHgxMmYKCiNk
ZWZpbmUgQlROX0dBTUVQQUQJCTB4MTMwCiNkZWZpbmUgQlROX0EJCQkweDEzMAojZGVmaW5l
IEJUTl9CCQkJMHgxMzEKI2RlZmluZSBCVE5fQwkJCTB4MTMyCiNkZWZpbmUgQlROX1gJCQkw
eDEzMwojZGVmaW5lIEJUTl9ZCQkJMHgxMzQKI2RlZmluZSBCVE5fWgkJCTB4MTM1CiNkZWZp
bmUgQlROX1RMCQkJMHgxMzYKI2RlZmluZSBCVE5fVFIJCQkweDEzNwojZGVmaW5lIEJUTl9U
TDIJCQkweDEzOAojZGVmaW5lIEJUTl9UUjIJCQkweDEzOQojZGVmaW5lIEJUTl9TRUxFQ1QJ
CTB4MTNhCiNkZWZpbmUgQlROX1NUQVJUCQkweDEzYgojZGVmaW5lIEJUTl9NT0RFCQkweDEz
YwojZGVmaW5lIEJUTl9USFVNQkwJCTB4MTNkCiNkZWZpbmUgQlROX1RIVU1CUgkJMHgxM2UK
CiNkZWZpbmUgQlROX0RJR0kJCTB4MTQwCiNkZWZpbmUgQlROX1RPT0xfUEVOCQkweDE0MAoj
ZGVmaW5lIEJUTl9UT09MX1JVQkJFUgkJMHgxNDEKI2RlZmluZSBCVE5fVE9PTF9CUlVTSAkJ
MHgxNDIKI2RlZmluZSBCVE5fVE9PTF9QRU5DSUwJCTB4MTQzCiNkZWZpbmUgQlROX1RPT0xf
QUlSQlJVU0gJMHgxNDQKI2RlZmluZSBCVE5fVE9PTF9GSU5HRVIJCTB4MTQ1CiNkZWZpbmUg
QlROX1RPT0xfTU9VU0UJCTB4MTQ2CiNkZWZpbmUgQlROX1RPT0xfTEVOUwkJMHgxNDcKI2Rl
ZmluZSBCVE5fVE9VQ0gJCTB4MTRhCiNkZWZpbmUgQlROX1NUWUxVUwkJMHgxNGIKI2RlZmlu
ZSBCVE5fU1RZTFVTMgkJMHgxNGMKI2RlZmluZSBCVE5fVE9PTF9ET1VCTEVUQVAJMHgxNGQK
I2RlZmluZSBCVE5fVE9PTF9UUklQTEVUQVAJMHgxNGUKCiNkZWZpbmUgQlROX1dIRUVMCQkw
eDE1MAojZGVmaW5lIEJUTl9HRUFSX0RPV04JCTB4MTUwCiNkZWZpbmUgQlROX0dFQVJfVVAJ
CTB4MTUxCgojZGVmaW5lIEtFWV9PSwkJCTB4MTYwCiNkZWZpbmUgS0VZX1NFTEVDVAkJMHgx
NjEKI2RlZmluZSBLRVlfR09UTwkJMHgxNjIKI2RlZmluZSBLRVlfQ0xFQVIJCTB4MTYzCiNk
ZWZpbmUgS0VZX1BPV0VSMgkJMHgxNjQKI2RlZmluZSBLRVlfT1BUSU9OCQkweDE2NQojZGVm
aW5lIEtFWV9JTkZPCQkweDE2NgojZGVmaW5lIEtFWV9USU1FCQkweDE2NwojZGVmaW5lIEtF
WV9WRU5ET1IJCTB4MTY4CiNkZWZpbmUgS0VZX0FSQ0hJVkUJCTB4MTY5CiNkZWZpbmUgS0VZ
X1BST0dSQU0JCTB4MTZhCiNkZWZpbmUgS0VZX0NIQU5ORUwJCTB4MTZiCiNkZWZpbmUgS0VZ
X0ZBVk9SSVRFUwkJMHgxNmMKI2RlZmluZSBLRVlfRVBHCQkJMHgxNmQKI2RlZmluZSBLRVlf
UFZSCQkJMHgxNmUKI2RlZmluZSBLRVlfTUhQCQkJMHgxNmYKI2RlZmluZSBLRVlfTEFOR1VB
R0UJCTB4MTcwCiNkZWZpbmUgS0VZX1RJVExFCQkweDE3MQojZGVmaW5lIEtFWV9TVUJUSVRM
RQkJMHgxNzIKI2RlZmluZSBLRVlfQU5HTEUJCTB4MTczCiNkZWZpbmUgS0VZX1pPT00JCTB4
MTc0CiNkZWZpbmUgS0VZX01PREUJCTB4MTc1CiNkZWZpbmUgS0VZX0tFWUJPQVJECQkweDE3
NgojZGVmaW5lIEtFWV9TQ1JFRU4JCTB4MTc3CiNkZWZpbmUgS0VZX1BDCQkJMHgxNzgKI2Rl
ZmluZSBLRVlfVFYJCQkweDE3OQojZGVmaW5lIEtFWV9UVjIJCQkweDE3YQojZGVmaW5lIEtF
WV9WQ1IJCQkweDE3YgojZGVmaW5lIEtFWV9WQ1IyCQkweDE3YwojZGVmaW5lIEtFWV9TQVQJ
CQkweDE3ZAojZGVmaW5lIEtFWV9TQVQyCQkweDE3ZQojZGVmaW5lIEtFWV9DRAkJCTB4MTdm
CiNkZWZpbmUgS0VZX1RBUEUJCTB4MTgwCiNkZWZpbmUgS0VZX1JBRElPCQkweDE4MQojZGVm
aW5lIEtFWV9UVU5FUgkJMHgxODIKI2RlZmluZSBLRVlfUExBWUVSCQkweDE4MwojZGVmaW5l
IEtFWV9URVhUCQkweDE4NAojZGVmaW5lIEtFWV9EVkQJCQkweDE4NQojZGVmaW5lIEtFWV9B
VVgJCQkweDE4NgojZGVmaW5lIEtFWV9NUDMJCQkweDE4NwojZGVmaW5lIEtFWV9BVURJTwkJ
MHgxODgKI2RlZmluZSBLRVlfVklERU8JCTB4MTg5CiNkZWZpbmUgS0VZX0RJUkVDVE9SWQkJ
MHgxOGEKI2RlZmluZSBLRVlfTElTVAkJMHgxOGIKI2RlZmluZSBLRVlfTUVNTwkJMHgxOGMK
I2RlZmluZSBLRVlfQ0FMRU5EQVIJCTB4MThkCiNkZWZpbmUgS0VZX1JFRAkJCTB4MThlCiNk
ZWZpbmUgS0VZX0dSRUVOCQkweDE4ZgojZGVmaW5lIEtFWV9ZRUxMT1cJCTB4MTkwCiNkZWZp
bmUgS0VZX0JMVUUJCTB4MTkxCiNkZWZpbmUgS0VZX0NIQU5ORUxVUAkJMHgxOTIKI2RlZmlu
ZSBLRVlfQ0hBTk5FTERPV04JCTB4MTkzCiNkZWZpbmUgS0VZX0ZJUlNUCQkweDE5NAojZGVm
aW5lIEtFWV9MQVNUCQkweDE5NQojZGVmaW5lIEtFWV9BQgkJCTB4MTk2CiNkZWZpbmUgS0VZ
X05FWFQJCTB4MTk3CiNkZWZpbmUgS0VZX1JFU1RBUlQJCTB4MTk4CiNkZWZpbmUgS0VZX1NM
T1cJCTB4MTk5CiNkZWZpbmUgS0VZX1NIVUZGTEUJCTB4MTlhCiNkZWZpbmUgS0VZX0JSRUFL
CQkweDE5YgojZGVmaW5lIEtFWV9QUkVWSU9VUwkJMHgxOWMKI2RlZmluZSBLRVlfRElHSVRT
CQkweDE5ZAojZGVmaW5lIEtFWV9URUVOCQkweDE5ZQojZGVmaW5lIEtFWV9UV0VOCQkweDE5
ZgojZGVmaW5lIEtFWV9WSURFT1BIT05FCQkweDFhMAojZGVmaW5lIEtFWV9HQU1FUwkJMHgx
YTEKI2RlZmluZSBLRVlfWk9PTUlOCQkweDFhMgojZGVmaW5lIEtFWV9aT09NT1VUCQkweDFh
MwojZGVmaW5lIEtFWV9aT09NUkVTRVQJCTB4MWE0CiNkZWZpbmUgS0VZX1dPUkRQUk9DRVNT
T1IJMHgxYTUKI2RlZmluZSBLRVlfRURJVE9SCQkweDFhNgojZGVmaW5lIEtFWV9TUFJFQURT
SEVFVAkJMHgxYTcKI2RlZmluZSBLRVlfR1JBUEhJQ1NFRElUT1IJMHgxYTgKI2RlZmluZSBL
RVlfUFJFU0VOVEFUSU9OCTB4MWE5CiNkZWZpbmUgS0VZX0RBVEFCQVNFCQkweDFhYQojZGVm
aW5lIEtFWV9ORVdTCQkweDFhYgojZGVmaW5lIEtFWV9WT0lDRU1BSUwJCTB4MWFjCiNkZWZp
bmUgS0VZX0FERFJFU1NCT09LCQkweDFhZAojZGVmaW5lIEtFWV9NRVNTRU5HRVIJCTB4MWFl
CgojZGVmaW5lIEtFWV9ERUxfRU9MCQkweDFjMAojZGVmaW5lIEtFWV9ERUxfRU9TCQkweDFj
MQojZGVmaW5lIEtFWV9JTlNfTElORQkJMHgxYzIKI2RlZmluZSBLRVlfREVMX0xJTkUJCTB4
MWMzCgojZGVmaW5lIEtFWV9GTgkJCTB4MWQwCiNkZWZpbmUgS0VZX0ZOX0VTQwkJMHgxZDEK
I2RlZmluZSBLRVlfRk5fRjEJCTB4MWQyCiNkZWZpbmUgS0VZX0ZOX0YyCQkweDFkMwojZGVm
aW5lIEtFWV9GTl9GMwkJMHgxZDQKI2RlZmluZSBLRVlfRk5fRjQJCTB4MWQ1CiNkZWZpbmUg
S0VZX0ZOX0Y1CQkweDFkNgojZGVmaW5lIEtFWV9GTl9GNgkJMHgxZDcKI2RlZmluZSBLRVlf
Rk5fRjcJCTB4MWQ4CiNkZWZpbmUgS0VZX0ZOX0Y4CQkweDFkOQojZGVmaW5lIEtFWV9GTl9G
OQkJMHgxZGEKI2RlZmluZSBLRVlfRk5fRjEwCQkweDFkYgojZGVmaW5lIEtFWV9GTl9GMTEJ
CTB4MWRjCiNkZWZpbmUgS0VZX0ZOX0YxMgkJMHgxZGQKI2RlZmluZSBLRVlfRk5fMQkJMHgx
ZGUKI2RlZmluZSBLRVlfRk5fMgkJMHgxZGYKI2RlZmluZSBLRVlfRk5fRAkJMHgxZTAKI2Rl
ZmluZSBLRVlfRk5fRQkJMHgxZTEKI2RlZmluZSBLRVlfRk5fRgkJMHgxZTIKI2RlZmluZSBL
RVlfRk5fUwkJMHgxZTMKI2RlZmluZSBLRVlfRk5fQgkJMHgxZTQKCiNkZWZpbmUgS0VZX0JS
TF9ET1QxCQkweDFmMQojZGVmaW5lIEtFWV9CUkxfRE9UMgkJMHgxZjIKI2RlZmluZSBLRVlf
QlJMX0RPVDMJCTB4MWYzCiNkZWZpbmUgS0VZX0JSTF9ET1Q0CQkweDFmNAojZGVmaW5lIEtF
WV9CUkxfRE9UNQkJMHgxZjUKI2RlZmluZSBLRVlfQlJMX0RPVDYJCTB4MWY2CiNkZWZpbmUg
S0VZX0JSTF9ET1Q3CQkweDFmNwojZGVmaW5lIEtFWV9CUkxfRE9UOAkJMHgxZjgKCi8qIFdl
IGF2b2lkIGxvdyBjb21tb24ga2V5cyBpbiBtb2R1bGUgYWxpYXNlcyBzbyB0aGV5IGRvbid0
IGdldCBodWdlLiAqLwojZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcJS0VZX01VVEUKI2Rl
ZmluZSBLRVlfTUFYCQkJMHgxZmYKCi8qCiAqIFJlbGF0aXZlIGF4ZXMKICovCgojZGVmaW5l
IFJFTF9YCQkJMHgwMAojZGVmaW5lIFJFTF9ZCQkJMHgwMQojZGVmaW5lIFJFTF9aCQkJMHgw
MgojZGVmaW5lIFJFTF9SWAkJCTB4MDMKI2RlZmluZSBSRUxfUlkJCQkweDA0CiNkZWZpbmUg
UkVMX1JaCQkJMHgwNQojZGVmaW5lIFJFTF9IV0hFRUwJCTB4MDYKI2RlZmluZSBSRUxfRElB
TAkJMHgwNwojZGVmaW5lIFJFTF9XSEVFTAkJMHgwOAojZGVmaW5lIFJFTF9NSVNDCQkweDA5
CiNkZWZpbmUgUkVMX01BWAkJCTB4MGYKCi8qCiAqIEFic29sdXRlIGF4ZXMKICovCgojZGVm
aW5lIEFCU19YCQkJMHgwMAojZGVmaW5lIEFCU19ZCQkJMHgwMQojZGVmaW5lIEFCU19aCQkJ
MHgwMgojZGVmaW5lIEFCU19SWAkJCTB4MDMKI2RlZmluZSBBQlNfUlkJCQkweDA0CiNkZWZp
bmUgQUJTX1JaCQkJMHgwNQojZGVmaW5lIEFCU19USFJPVFRMRQkJMHgwNgojZGVmaW5lIEFC
U19SVURERVIJCTB4MDcKI2RlZmluZSBBQlNfV0hFRUwJCTB4MDgKI2RlZmluZSBBQlNfR0FT
CQkJMHgwOQojZGVmaW5lIEFCU19CUkFLRQkJMHgwYQojZGVmaW5lIEFCU19IQVQwWAkJMHgx
MAojZGVmaW5lIEFCU19IQVQwWQkJMHgxMQojZGVmaW5lIEFCU19IQVQxWAkJMHgxMgojZGVm
aW5lIEFCU19IQVQxWQkJMHgxMwojZGVmaW5lIEFCU19IQVQyWAkJMHgxNAojZGVmaW5lIEFC
U19IQVQyWQkJMHgxNQojZGVmaW5lIEFCU19IQVQzWAkJMHgxNgojZGVmaW5lIEFCU19IQVQz
WQkJMHgxNwojZGVmaW5lIEFCU19QUkVTU1VSRQkJMHgxOAojZGVmaW5lIEFCU19ESVNUQU5D
RQkJMHgxOQojZGVmaW5lIEFCU19USUxUX1gJCTB4MWEKI2RlZmluZSBBQlNfVElMVF9ZCQkw
eDFiCiNkZWZpbmUgQUJTX1RPT0xfV0lEVEgJCTB4MWMKI2RlZmluZSBBQlNfVk9MVU1FCQkw
eDIwCiNkZWZpbmUgQUJTX01JU0MJCTB4MjgKI2RlZmluZSBBQlNfTUFYCQkJMHgzZgoKLyoK
ICogU3dpdGNoIGV2ZW50cwogKi8KCiNkZWZpbmUgU1dfTElECQkJMHgwMCAgLyogc2V0ID0g
bGlkIHNodXQgKi8KI2RlZmluZSBTV19UQUJMRVRfTU9ERQkJMHgwMSAgLyogc2V0ID0gdGFi
bGV0IG1vZGUgKi8KI2RlZmluZSBTV19IRUFEUEhPTkVfSU5TRVJUCTB4MDIgIC8qIHNldCA9
IGluc2VydGVkICovCiNkZWZpbmUgU1dfTUFYCQkJMHgwZgoKLyoKICogTWlzYyBldmVudHMK
ICovCgojZGVmaW5lIE1TQ19TRVJJQUwJCTB4MDAKI2RlZmluZSBNU0NfUFVMU0VMRUQJCTB4
MDEKI2RlZmluZSBNU0NfR0VTVFVSRQkJMHgwMgojZGVmaW5lIE1TQ19SQVcJCQkweDAzCiNk
ZWZpbmUgTVNDX1NDQU4JCTB4MDQKI2RlZmluZSBNU0NfTUFYCQkJMHgwNwoKLyoKICogTEVE
cwogKi8KCiNkZWZpbmUgTEVEX05VTUwJCTB4MDAKI2RlZmluZSBMRURfQ0FQU0wJCTB4MDEK
I2RlZmluZSBMRURfU0NST0xMTAkJMHgwMgojZGVmaW5lIExFRF9DT01QT1NFCQkweDAzCiNk
ZWZpbmUgTEVEX0tBTkEJCTB4MDQKI2RlZmluZSBMRURfU0xFRVAJCTB4MDUKI2RlZmluZSBM
RURfU1VTUEVORAkJMHgwNgojZGVmaW5lIExFRF9NVVRFCQkweDA3CiNkZWZpbmUgTEVEX01J
U0MJCTB4MDgKI2RlZmluZSBMRURfTUFJTAkJMHgwOQojZGVmaW5lIExFRF9DSEFSR0lORwkJ
MHgwYQojZGVmaW5lIExFRF9NQVgJCQkweDBmCgovKgogKiBBdXRvcmVwZWF0IHZhbHVlcwog
Ki8KCiNkZWZpbmUgUkVQX0RFTEFZCQkweDAwCiNkZWZpbmUgUkVQX1BFUklPRAkJMHgwMQoj
ZGVmaW5lIFJFUF9NQVgJCQkweDAxCgovKgogKiBTb3VuZHMKICovCgojZGVmaW5lIFNORF9D
TElDSwkJMHgwMAojZGVmaW5lIFNORF9CRUxMCQkweDAxCiNkZWZpbmUgU05EX1RPTkUJCTB4
MDIKI2RlZmluZSBTTkRfTUFYCQkJMHgwNwoKLyoKICogSURzLgogKi8KCiNkZWZpbmUgSURf
QlVTCQkJMAojZGVmaW5lIElEX1ZFTkRPUgkJMQojZGVmaW5lIElEX1BST0RVQ1QJCTIKI2Rl
ZmluZSBJRF9WRVJTSU9OCQkzCgojZGVmaW5lIEJVU19QQ0kJCQkweDAxCiNkZWZpbmUgQlVT
X0lTQVBOUAkJMHgwMgojZGVmaW5lIEJVU19VU0IJCQkweDAzCiNkZWZpbmUgQlVTX0hJTAkJ
CTB4MDQKI2RlZmluZSBCVVNfQkxVRVRPT1RICQkweDA1CiNkZWZpbmUgQlVTX1ZJUlRVQUwJ
CTB4MDYKCiNkZWZpbmUgQlVTX0lTQQkJCTB4MTAKI2RlZmluZSBCVVNfSTgwNDIJCTB4MTEK
I2RlZmluZSBCVVNfWFRLQkQJCTB4MTIKI2RlZmluZSBCVVNfUlMyMzIJCTB4MTMKI2RlZmlu
ZSBCVVNfR0FNRVBPUlQJCTB4MTQKI2RlZmluZSBCVVNfUEFSUE9SVAkJMHgxNQojZGVmaW5l
IEJVU19BTUlHQQkJMHgxNgojZGVmaW5lIEJVU19BREIJCQkweDE3CiNkZWZpbmUgQlVTX0ky
QwkJCTB4MTgKI2RlZmluZSBCVVNfSE9TVAkJMHgxOQojZGVmaW5lIEJVU19HU0MJCQkweDFB
CgovKgogKiBWYWx1ZXMgZGVzY3JpYmluZyB0aGUgc3RhdHVzIG9mIGEgZm9yY2UtZmVlZGJh
Y2sgZWZmZWN0CiAqLwojZGVmaW5lIEZGX1NUQVRVU19TVE9QUEVECTB4MDAKI2RlZmluZSBG
Rl9TVEFUVVNfUExBWUlORwkweDAxCiNkZWZpbmUgRkZfU1RBVFVTX01BWAkJMHgwMQoKLyoK
ICogU3RydWN0dXJlcyB1c2VkIGluIGlvY3RscyB0byB1cGxvYWQgZWZmZWN0cyB0byBhIGRl
dmljZQogKiBUaGV5IGFyZSBwaWVjZXMgb2YgYSBiaWdnZXIgc3RydWN0dXJlIChjYWxsZWQg
ZmZfZWZmZWN0KQogKi8KCi8qCiAqIEFsbCBkdXJhdGlvbiB2YWx1ZXMgYXJlIGV4cHJlc3Nl
ZCBpbiBtcy4gVmFsdWVzIGFib3ZlIDMyNzY3IG1zICgweDdmZmYpCiAqIHNob3VsZCBub3Qg
YmUgdXNlZCBhbmQgaGF2ZSB1bnNwZWNpZmllZCByZXN1bHRzLgogKi8KCi8qKgogKiBzdHJ1
Y3QgZmZfcmVwbGF5IC0gZGVmaW5lcyBzY2hlZHVsaW5nIG9mIHRoZSBmb3JjZS1mZWVkYmFj
ayBlZmZlY3QKICogQGxlbmd0aDogZHVyYXRpb24gb2YgdGhlIGVmZmVjdAogKiBAZGVsYXk6
IGRlbGF5IGJlZm9yZSBlZmZlY3Qgc2hvdWxkIHN0YXJ0IHBsYXlpbmcKICovCnN0cnVjdCBm
Zl9yZXBsYXkgewoJX191MTYgbGVuZ3RoOwoJX191MTYgZGVsYXk7Cn07CgovKioKICogc3Ry
dWN0IGZmX3RyaWdnZXIgLSBkZWZpbmVzIHdoYXQgdHJpZ2dlcnMgdGhlIGZvcmNlLWZlZWRi
YWNrIGVmZmVjdAogKiBAYnV0dG9uOiBudW1iZXIgb2YgdGhlIGJ1dHRvbiB0cmlnZ2VyaW5n
IHRoZSBlZmZlY3QKICogQGludGVydmFsOiBjb250cm9scyBob3cgc29vbiB0aGUgZWZmZWN0
IGNhbiBiZSByZS10cmlnZ2VyZWQKICovCnN0cnVjdCBmZl90cmlnZ2VyIHsKCV9fdTE2IGJ1
dHRvbjsKCV9fdTE2IGludGVydmFsOwp9OwoKLyoqCiAqIHN0cnVjdCBmZl9lbnZlbG9wZSAt
IGdlbmVyaWMgZm9yY2UtZmVlZGJhY2sgZWZmZWN0IGVudmVsb3BlCiAqIEBhdHRhY2tfbGVu
Z3RoOiBkdXJhdGlvbiBvZiB0aGUgYXR0YWNrIChtcykKICogQGF0dGFja19sZXZlbDogbGV2
ZWwgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgYXR0YWNrCiAqIEBmYWRlX2xlbmd0aDogZHVy
YXRpb24gb2YgZmFkZSAobXMpCiAqIEBmYWRlX2xldmVsOiBsZXZlbCBhdCB0aGUgZW5kIG9m
IGZhZGUKICoKICogVGhlIEBhdHRhY2tfbGV2ZWwgYW5kIEBmYWRlX2xldmVsIGFyZSBhYnNv
bHV0ZSB2YWx1ZXM7IHdoZW4gYXBwbHlpbmcKICogZW52ZWxvcGUgZm9yY2UtZmVlZGJhY2sg
Y29yZSB3aWxsIGNvbnZlcnQgdG8gcG9zaXRpdmUvbmVnYXRpdmUKICogdmFsdWUgYmFzZWQg
b24gcG9sYXJpdHkgb2YgdGhlIGRlZmF1bHQgbGV2ZWwgb2YgdGhlIGVmZmVjdC4KICogVmFs
aWQgcmFuZ2UgZm9yIHRoZSBhdHRhY2sgYW5kIGZhZGUgbGV2ZWxzIGlzIDB4MDAwMCAtIDB4
N2ZmZgogKi8Kc3RydWN0IGZmX2VudmVsb3BlIHsKCV9fdTE2IGF0dGFja19sZW5ndGg7Cglf
X3UxNiBhdHRhY2tfbGV2ZWw7CglfX3UxNiBmYWRlX2xlbmd0aDsKCV9fdTE2IGZhZGVfbGV2
ZWw7Cn07CgovKioKICogc3RydWN0IGZmX2NvbnN0YW50X2VmZmVjdCAtIGRlZmluZXMgcGFy
YW1ldGVycyBvZiBhIGNvbnN0YW50IGZvcmNlLWZlZWRiYWNrIGVmZmVjdAogKiBAbGV2ZWw6
IHN0cmVuZ3RoIG9mIHRoZSBlZmZlY3Q7IG1heSBiZSBuZWdhdGl2ZQogKiBAZW52ZWxvcGU6
IGVudmVsb3BlIGRhdGEKICovCnN0cnVjdCBmZl9jb25zdGFudF9lZmZlY3QgewoJX19zMTYg
bGV2ZWw7CglzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cn07CgovKioKICogc3RydWN0
IGZmX3JhbXBfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEgcmFtcCBmb3JjZS1m
ZWVkYmFjayBlZmZlY3QKICogQHN0YXJ0X2xldmVsOiBiZWdpbm5pbmcgc3RyZW5ndGggb2Yg
dGhlIGVmZmVjdDsgbWF5IGJlIG5lZ2F0aXZlCiAqIEBlbmRfbGV2ZWw6IGZpbmFsIHN0cmVu
Z3RoIG9mIHRoZSBlZmZlY3Q7IG1heSBiZSBuZWdhdGl2ZQogKiBAZW52ZWxvcGU6IGVudmVs
b3BlIGRhdGEKICovCnN0cnVjdCBmZl9yYW1wX2VmZmVjdCB7CglfX3MxNiBzdGFydF9sZXZl
bDsKCV9fczE2IGVuZF9sZXZlbDsKCXN0cnVjdCBmZl9lbnZlbG9wZSBlbnZlbG9wZTsKfTsK
Ci8qKgogKiBzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCAtIGRlZmluZXMgYSBzcHJpbmcg
b3IgZnJpY3Rpb24gZm9yY2UtZmVlZGJhY2sgZWZmZWN0CiAqIEByaWdodF9zYXR1cmF0aW9u
OiBtYXhpbXVtIGxldmVsIHdoZW4gam95c3RpY2sgbW92ZWQgYWxsIHdheSB0byB0aGUgcmln
aHQKICogQGxlZnRfc2F0dXJhdGlvbjogc2FtZSBmb3IgdGhlIGxlZnQgc2lkZQogKiBAcmln
aHRfY29lZmY6IGNvbnRyb2xzIGhvdyBmYXN0IHRoZSBmb3JjZSBncm93cyB3aGVuIHRoZSBq
b3lzdGljayBtb3ZlcwogKgl0byB0aGUgcmlnaHQKICogQGxlZnRfY29lZmY6IHNhbWUgZm9y
IHRoZSBsZWZ0IHNpZGUKICogQGRlYWRiYW5kOiBzaXplIG9mIHRoZSBkZWFkIHpvbmUsIHdo
ZXJlIG5vIGZvcmNlIGlzIHByb2R1Y2VkCiAqIEBjZW50ZXI6IHBvc2l0aW9uIG9mIHRoZSBk
ZWFkIHpvbmUKICovCnN0cnVjdCBmZl9jb25kaXRpb25fZWZmZWN0IHsKCV9fdTE2IHJpZ2h0
X3NhdHVyYXRpb247CglfX3UxNiBsZWZ0X3NhdHVyYXRpb247CgoJX19zMTYgcmlnaHRfY29l
ZmY7CglfX3MxNiBsZWZ0X2NvZWZmOwoKCV9fdTE2IGRlYWRiYW5kOwoJX19zMTYgY2VudGVy
Owp9OwoKLyoqCiAqIHN0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgLSBkZWZpbmVzIHBhcmFt
ZXRlcnMgb2YgYSBwZXJpb2RpYyBmb3JjZS1mZWVkYmFjayBlZmZlY3QKICogQHdhdmVmb3Jt
OiBraW5kIG9mIHRoZSBlZmZlY3QgKHdhdmUpCiAqIEBwZXJpb2Q6IHBlcmlvZCBvZiB0aGUg
d2F2ZSAobXMpCiAqIEBtYWduaXR1ZGU6IHBlYWsgdmFsdWUKICogQG9mZnNldDogbWVhbiB2
YWx1ZSBvZiB0aGUgd2F2ZSAocm91Z2hseSkKICogQHBoYXNlOiAnaG9yaXpvbnRhbCcgc2hp
ZnQKICogQGVudmVsb3BlOiBlbnZlbG9wZSBkYXRhCiAqIEBjdXN0b21fbGVuOiBudW1iZXIg
b2Ygc2FtcGxlcyAoRkZfQ1VTVE9NIG9ubHkpCiAqIEBjdXN0b21fZGF0YTogYnVmZmVyIG9m
IHNhbXBsZXMgKEZGX0NVU1RPTSBvbmx5KQogKgogKiBLbm93biB3YXZlZm9ybXMgLSBGRl9T
UVVBUkUsIEZGX1RSSUFOR0xFLCBGRl9TSU5FLCBGRl9TQVdfVVAsCiAqIEZGX1NBV19ET1dO
LCBGRl9DVVNUT00uIFRoZSBleGFjdCBzeW50YXggRkZfQ1VTVE9NIGlzIHVuZGVmaW5lZAog
KiBmb3IgdGhlIHRpbWUgYmVpbmcgYXMgbm8gZHJpdmVyIHN1cHBvcnRzIGl0IHlldC4KICoK
ICogTm90ZTogdGhlIGRhdGEgcG9pbnRlZCBieSBjdXN0b21fZGF0YSBpcyBjb3BpZWQgYnkg
dGhlIGRyaXZlci4KICogWW91IGNhbiB0aGVyZWZvcmUgZGlzcG9zZSBvZiB0aGUgbWVtb3J5
IGFmdGVyIHRoZSB1cGxvYWQvdXBkYXRlLgogKi8Kc3RydWN0IGZmX3BlcmlvZGljX2VmZmVj
dCB7CglfX3UxNiB3YXZlZm9ybTsKCV9fdTE2IHBlcmlvZDsKCV9fczE2IG1hZ25pdHVkZTsK
CV9fczE2IG9mZnNldDsKCV9fdTE2IHBoYXNlOwoKCXN0cnVjdCBmZl9lbnZlbG9wZSBlbnZl
bG9wZTsKCglfX3UzMiBjdXN0b21fbGVuOwoJX19zMTYgKmN1c3RvbV9kYXRhOwp9OwoKLyoq
CiAqIHN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IC0gZGVmaW5lcyBwYXJhbWV0ZXJzIG9mIGEg
cGVyaW9kaWMgZm9yY2UtZmVlZGJhY2sgZWZmZWN0CiAqIEBzdHJvbmdfbWFnbml0dWRlOiBt
YWduaXR1ZGUgb2YgdGhlIGhlYXZ5IG1vdG9yCiAqIEB3ZWFrX21hZ25pdHVkZTogbWFnbml0
dWRlIG9mIHRoZSBsaWdodCBvbmUKICoKICogU29tZSBydW1ibGUgcGFkcyBoYXZlIHR3byBt
b3RvcnMgb2YgZGlmZmVyZW50IHdlaWdodC4gU3Ryb25nX21hZ25pdHVkZQogKiByZXByZXNl
bnRzIHRoZSBtYWduaXR1ZGUgb2YgdGhlIHZpYnJhdGlvbiBnZW5lcmF0ZWQgYnkgdGhlIGhl
YXZ5IG9uZS4KICovCnN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IHsKCV9fdTE2IHN0cm9uZ19t
YWduaXR1ZGU7CglfX3UxNiB3ZWFrX21hZ25pdHVkZTsKfTsKCi8qKgogKiBzdHJ1Y3QgZmZf
ZWZmZWN0IC0gZGVmaW5lcyBmb3JjZSBmZWVkYmFjayBlZmZlY3QKICogQHR5cGU6IHR5cGUg
b2YgdGhlIGVmZmVjdCAoRkZfQ09OU1RBTlQsIEZGX1BFUklPRElDLCBGRl9SQU1QLCBGRl9T
UFJJTkcsCiAqCUZGX0ZSSUNUSU9OLCBGRl9EQU1QRVIsIEZGX1JVTUJMRSwgRkZfSU5FUlRJ
QSwgb3IgRkZfQ1VTVE9NKQogKiBAaWQ6IGFuIHVuaXF1ZSBpZCBhc3NpZ25lZCB0byBhbiBl
ZmZlY3QKICogQGRpcmVjdGlvbjogZGlyZWN0aW9uIG9mIHRoZSBlZmZlY3QKICogQHRyaWdn
ZXI6IHRyaWdnZXIgY29uZGl0aW9ucyAoc3RydWN0IGZmX3RyaWdnZXIpCiAqIEByZXBsYXk6
IHNjaGVkdWxpbmcgb2YgdGhlIGVmZmVjdCAoc3RydWN0IGZmX3JlcGxheSkKICogQHU6IGVm
ZmVjdC1zcGVjaWZpYyBzdHJ1Y3R1cmUgKG9uZSBvZiBmZl9jb25zdGFudF9lZmZlY3QsIGZm
X3JhbXBfZWZmZWN0LAogKglmZl9wZXJpb2RpY19lZmZlY3QsIGZmX2NvbmRpdGlvbl9lZmZl
Y3QsIGZmX3J1bWJsZV9lZmZlY3QpIGZ1cnRoZXIKICoJZGVmaW5pbmcgZWZmZWN0IHBhcmFt
ZXRlcnMKICoKICogVGhpcyBzdHJ1Y3R1cmUgaXMgc2VudCB0aHJvdWdoIGlvY3RsIGZyb20g
dGhlIGFwcGxpY2F0aW9uIHRvIHRoZSBkcml2ZXIuCiAqIFRvIGNyZWF0ZSBhIG5ldyBlZmZl
Y3QgYXBsaWNhdGlvbiBzaG91bGQgc2V0IGl0cyBAaWQgdG8gLTE7IHRoZSBrZXJuZWwKICog
d2lsbCByZXR1cm4gYXNzaWduZWQgQGlkIHdoaWNoIGNhbiBsYXRlciBiZSB1c2VkIHRvIHVw
ZGF0ZSBvciBkZWxldGUKICogdGhpcyBlZmZlY3QuCiAqCiAqIERpcmVjdGlvbiBvZiB0aGUg
ZWZmZWN0IGlzIGVuY29kZWQgYXMgZm9sbG93czoKICoJMCBkZWcgLT4gMHgwMDAwIChkb3du
KQogKgk5MCBkZWcgLT4gMHg0MDAwIChsZWZ0KQogKgkxODAgZGVnIC0+IDB4ODAwMCAodXAp
CiAqCTI3MCBkZWcgLT4gMHhDMDAwIChyaWdodCkKICovCnN0cnVjdCBmZl9lZmZlY3QgewoJ
X191MTYgdHlwZTsKCV9fczE2IGlkOwoJX191MTYgZGlyZWN0aW9uOwoJc3RydWN0IGZmX3Ry
aWdnZXIgdHJpZ2dlcjsKCXN0cnVjdCBmZl9yZXBsYXkgcmVwbGF5OwoKCXVuaW9uIHsKCQlz
dHJ1Y3QgZmZfY29uc3RhbnRfZWZmZWN0IGNvbnN0YW50OwoJCXN0cnVjdCBmZl9yYW1wX2Vm
ZmVjdCByYW1wOwoJCXN0cnVjdCBmZl9wZXJpb2RpY19lZmZlY3QgcGVyaW9kaWM7CgkJc3Ry
dWN0IGZmX2NvbmRpdGlvbl9lZmZlY3QgY29uZGl0aW9uWzJdOyAvKiBPbmUgZm9yIGVhY2gg
YXhpcyAqLwoJCXN0cnVjdCBmZl9ydW1ibGVfZWZmZWN0IHJ1bWJsZTsKCX0gdTsKfTsKCi8q
CiAqIEZvcmNlIGZlZWRiYWNrIGVmZmVjdCB0eXBlcwogKi8KCiNkZWZpbmUgRkZfUlVNQkxF
CTB4NTAKI2RlZmluZSBGRl9QRVJJT0RJQwkweDUxCiNkZWZpbmUgRkZfQ09OU1RBTlQJMHg1
MgojZGVmaW5lIEZGX1NQUklORwkweDUzCiNkZWZpbmUgRkZfRlJJQ1RJT04JMHg1NAojZGVm
aW5lIEZGX0RBTVBFUgkweDU1CiNkZWZpbmUgRkZfSU5FUlRJQQkweDU2CiNkZWZpbmUgRkZf
UkFNUAkJMHg1NwoKI2RlZmluZSBGRl9FRkZFQ1RfTUlOCUZGX1JVTUJMRQojZGVmaW5lIEZG
X0VGRkVDVF9NQVgJRkZfUkFNUAoKLyoKICogRm9yY2UgZmVlZGJhY2sgcGVyaW9kaWMgZWZm
ZWN0IHR5cGVzCiAqLwoKI2RlZmluZSBGRl9TUVVBUkUJMHg1OAojZGVmaW5lIEZGX1RSSUFO
R0xFCTB4NTkKI2RlZmluZSBGRl9TSU5FCQkweDVhCiNkZWZpbmUgRkZfU0FXX1VQCTB4NWIK
I2RlZmluZSBGRl9TQVdfRE9XTgkweDVjCiNkZWZpbmUgRkZfQ1VTVE9NCTB4NWQKCiNkZWZp
bmUgRkZfV0FWRUZPUk1fTUlOCUZGX1NRVUFSRQojZGVmaW5lIEZGX1dBVkVGT1JNX01BWAlG
Rl9DVVNUT00KCi8qCiAqIFNldCBmZiBkZXZpY2UgcHJvcGVydGllcwogKi8KCiNkZWZpbmUg
RkZfR0FJTgkJMHg2MAojZGVmaW5lIEZGX0FVVE9DRU5URVIJMHg2MQoKI2RlZmluZSBGRl9N
QVgJCTB4N2YKCiNpZmRlZiBfX0tFUk5FTF9fCgovKgogKiBJbi1rZXJuZWwgZGVmaW5pdGlv
bnMuCiAqLwoKI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgojaW5jbHVkZSA8bGludXgvZnMu
aD4KI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CiNpbmNsdWRlIDxsaW51eC9tb2RfZGV2aWNl
dGFibGUuaD4KCiNkZWZpbmUgTkJJVFMoeCkgKCgoeCkvQklUU19QRVJfTE9ORykrMSkKI2Rl
ZmluZSBCSVQoeCkJKDFVTDw8KCh4KSVCSVRTX1BFUl9MT05HKSkKI2RlZmluZSBMT05HKHgp
ICgoeCkvQklUU19QRVJfTE9ORykKCiNkZWZpbmUgSU5QVVRfS0VZQ09ERShkZXYsIHNjYW5j
b2RlKSAoKGRldi0+a2V5Y29kZXNpemUgPT0gMSkgPyAoKHU4KilkZXYtPmtleWNvZGUpW3Nj
YW5jb2RlXSA6IFwKCSgoZGV2LT5rZXljb2Rlc2l6ZSA9PSAyKSA/ICgodTE2KilkZXYtPmtl
eWNvZGUpW3NjYW5jb2RlXSA6ICgoKHUzMiopZGV2LT5rZXljb2RlKVtzY2FuY29kZV0pKSkK
CiNkZWZpbmUgU0VUX0lOUFVUX0tFWUNPREUoZGV2LCBzY2FuY29kZSwgdmFsKQkJCVwKCQko
ewl1bnNpZ25lZCBfX29sZDsJCQkJXAoJCXN3aXRjaCAoZGV2LT5rZXljb2Rlc2l6ZSkgewkJ
CVwKCQkJY2FzZSAxOiB7CQkJCVwKCQkJCXU4ICprID0gKHU4ICopZGV2LT5rZXljb2RlOwlc
CgkJCQlfX29sZCA9IGtbc2NhbmNvZGVdOwkJXAoJCQkJa1tzY2FuY29kZV0gPSB2YWw7CQlc
CgkJCQlicmVhazsJCQkJXAoJCQl9CQkJCQlcCgkJCWNhc2UgMjogewkJCQlcCgkJCQl1MTYg
KmsgPSAodTE2ICopZGV2LT5rZXljb2RlOwlcCgkJCQlfX29sZCA9IGtbc2NhbmNvZGVdOwkJ
XAoJCQkJa1tzY2FuY29kZV0gPSB2YWw7CQlcCgkJCQlicmVhazsJCQkJXAoJCQl9CQkJCQlc
CgkJCWRlZmF1bHQ6IHsJCQkJXAoJCQkJdTMyICprID0gKHUzMiAqKWRldi0+a2V5Y29kZTsJ
XAoJCQkJX19vbGQgPSBrW3NjYW5jb2RlXTsJCVwKCQkJCWtbc2NhbmNvZGVdID0gdmFsOwkJ
XAoJCQkJYnJlYWs7CQkJCVwKCQkJfQkJCQkJXAoJCX0JCQkJCQlcCgkJX19vbGQ7IH0pCgpz
dHJ1Y3QgaW5wdXRfZGV2IHsKCgl2b2lkICpwcml2YXRlOwoKCWNvbnN0IGNoYXIgKm5hbWU7
Cgljb25zdCBjaGFyICpwaHlzOwoJY29uc3QgY2hhciAqdW5pcTsKCXN0cnVjdCBpbnB1dF9p
ZCBpZDsKCgl1bnNpZ25lZCBsb25nIGV2Yml0W05CSVRTKEVWX01BWCldOwoJdW5zaWduZWQg
bG9uZyBrZXliaXRbTkJJVFMoS0VZX01BWCldOwoJdW5zaWduZWQgbG9uZyByZWxiaXRbTkJJ
VFMoUkVMX01BWCldOwoJdW5zaWduZWQgbG9uZyBhYnNiaXRbTkJJVFMoQUJTX01BWCldOwoJ
dW5zaWduZWQgbG9uZyBtc2NiaXRbTkJJVFMoTVNDX01BWCldOwoJdW5zaWduZWQgbG9uZyBs
ZWRiaXRbTkJJVFMoTEVEX01BWCldOwoJdW5zaWduZWQgbG9uZyBzbmRiaXRbTkJJVFMoU05E
X01BWCldOwoJdW5zaWduZWQgbG9uZyBmZmJpdFtOQklUUyhGRl9NQVgpXTsKCXVuc2lnbmVk
IGxvbmcgc3diaXRbTkJJVFMoU1dfTUFYKV07CgoJdW5zaWduZWQgaW50IGtleWNvZGVtYXg7
Cgl1bnNpZ25lZCBpbnQga2V5Y29kZXNpemU7Cgl2b2lkICprZXljb2RlOwoKCXN0cnVjdCBm
Zl9kZXZpY2UgKmZmOwoKCXVuc2lnbmVkIGludCByZXBlYXRfa2V5OwoJc3RydWN0IHRpbWVy
X2xpc3QgdGltZXI7CgoJaW50IHN0YXRlOwoKCWludCBzeW5jOwoKCWludCBhYnNbQUJTX01B
WCArIDFdOwoJaW50IHJlcFtSRVBfTUFYICsgMV07CgoJdW5zaWduZWQgbG9uZyBrZXlbTkJJ
VFMoS0VZX01BWCldOwoJdW5zaWduZWQgbG9uZyBsZWRbTkJJVFMoTEVEX01BWCldOwoJdW5z
aWduZWQgbG9uZyBzbmRbTkJJVFMoU05EX01BWCldOwoJdW5zaWduZWQgbG9uZyBzd1tOQklU
UyhTV19NQVgpXTsKCglpbnQgYWJzbWF4W0FCU19NQVggKyAxXTsKCWludCBhYnNtaW5bQUJT
X01BWCArIDFdOwoJaW50IGFic2Z1enpbQUJTX01BWCArIDFdOwoJaW50IGFic2ZsYXRbQUJT
X01BWCArIDFdOwoKCWludCAoKm9wZW4pKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7Cgl2b2lk
ICgqY2xvc2UpKHN0cnVjdCBpbnB1dF9kZXYgKmRldik7CglpbnQgKCpmbHVzaCkoc3RydWN0
IGlucHV0X2RldiAqZGV2LCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CglpbnQgKCpldmVudCkoc3Ry
dWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNv
ZGUsIGludCB2YWx1ZSk7CgoJc3RydWN0IGlucHV0X2hhbmRsZSAqZ3JhYjsKCglzdHJ1Y3Qg
bXV0ZXggbXV0ZXg7CS8qIHNlcmlhbGl6ZXMgb3BlbiBhbmQgY2xvc2Ugb3BlcmF0aW9ucyAq
LwoJdW5zaWduZWQgaW50IHVzZXJzOwoKCXN0cnVjdCBjbGFzc19kZXZpY2UgY2RldjsKCglz
dHJ1Y3QgbGlzdF9oZWFkCWhfbGlzdDsKCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKfTsKI2Rl
ZmluZSB0b19pbnB1dF9kZXYoZCkgY29udGFpbmVyX29mKGQsIHN0cnVjdCBpbnB1dF9kZXYs
IGNkZXYpCgovKgogKiBWZXJpZnkgdGhhdCB3ZSBhcmUgaW4gc3luYyB3aXRoIGlucHV0X2Rl
dmljZV9pZCBtb2RfZGV2aWNldGFibGUuaCAjZGVmaW5lcwogKi8KCiNpZiBFVl9NQVggIT0g
SU5QVVRfREVWSUNFX0lEX0VWX01BWAojZXJyb3IgIkVWX01BWCBhbmQgSU5QVVRfREVWSUNF
X0lEX0VWX01BWCBkbyBub3QgbWF0Y2giCiNlbmRpZgoKI2lmIEtFWV9NQVggIT0gSU5QVVRf
REVWSUNFX0lEX0tFWV9NQVgKI2Vycm9yICJLRVlfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURf
S0VZX01BWCBkbyBub3QgbWF0Y2giCiNlbmRpZgoKI2lmIFJFTF9NQVggIT0gSU5QVVRfREVW
SUNFX0lEX1JFTF9NQVgKI2Vycm9yICJSRUxfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfUkVM
X01BWCBkbyBub3QgbWF0Y2giCiNlbmRpZgoKI2lmIEFCU19NQVggIT0gSU5QVVRfREVWSUNF
X0lEX0FCU19NQVgKI2Vycm9yICJBQlNfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfQUJTX01B
WCBkbyBub3QgbWF0Y2giCiNlbmRpZgoKI2lmIE1TQ19NQVggIT0gSU5QVVRfREVWSUNFX0lE
X01TQ19NQVgKI2Vycm9yICJNU0NfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCBk
byBub3QgbWF0Y2giCiNlbmRpZgoKI2lmIExFRF9NQVggIT0gSU5QVVRfREVWSUNFX0lEX0xF
RF9NQVgKI2Vycm9yICJMRURfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfTEVEX01BWCBkbyBu
b3QgbWF0Y2giCiNlbmRpZgoKI2lmIFNORF9NQVggIT0gSU5QVVRfREVWSUNFX0lEX1NORF9N
QVgKI2Vycm9yICJTTkRfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfU05EX01BWCBkbyBub3Qg
bWF0Y2giCiNlbmRpZgoKI2lmIEZGX01BWCAhPSBJTlBVVF9ERVZJQ0VfSURfRkZfTUFYCiNl
cnJvciAiRkZfTUFYIGFuZCBJTlBVVF9ERVZJQ0VfSURfRkZfTUFYIGRvIG5vdCBtYXRjaCIK
I2VuZGlmCgojaWYgU1dfTUFYICE9IElOUFVUX0RFVklDRV9JRF9TV19NQVgKI2Vycm9yICJT
V19NQVggYW5kIElOUFVUX0RFVklDRV9JRF9TV19NQVggZG8gbm90IG1hdGNoIgojZW5kaWYK
CiNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0RFVklDRSBcCgkoSU5QVVRfREVWSUNF
X0lEX01BVENIX0JVUyB8IElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgfCBJTlBVVF9E
RVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCkKI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hf
REVWSUNFX0FORF9WRVJTSU9OIFwKCShJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFIHwg
SU5QVVRfREVWSUNFX0lEX01BVENIX1ZFUlNJT04pCgpzdHJ1Y3QgaW5wdXRfaGFuZGxlOwoK
LyoqCiAqIHN0cnVjdCBpbnB1dF9oYW5kbGVyIC0gaW1wbGVtZW50cyBvbmUgb2YgaW50ZXJm
YWNlcyBmb3IgaW5wdXQgZGV2aWNlcwogKiBAcHJpdmF0ZTogZHJpdmVyLXNwZWNpZmljIGRh
dGEKICogQGV2ZW50OiBldmVudCBoYW5kbGVyCiAqIEBjb25uZWN0OiBjYWxsZWQgd2hlbiBh
dHRhY2hpbmcgYSBoYW5kbGVyIHRvIGFuIGlucHV0IGRldmljZQogKiBAZGlzY29ubmVjdDog
ZGlzY29ubmVjdHMgYSBoYW5kbGVyIGZyb20gaW5wdXQgZGV2aWNlCiAqIEBzdGFydDogc3Rh
cnRzIGhhbmRsZXIgZm9yIGdpdmVuIGhhbmRsZS4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQg
YnkKICoJaW5wdXQgY29yZSByaWdodCBhZnRlciBjb25uZWN0KCkgbWV0aG9kIGFuZCBhbHNv
IHdoZW4gYSBwcm9jZXNzCiAqCXRoYXQgImdyYWJiZWQiIGEgZGV2aWNlIHJlbGVhc2VzIGl0
CiAqIEBmb3BzOiBmaWxlIG9wZXJhdGlvbnMgdGhpcyBkcml2ZXIgaW1wbGVtZW50cwogKiBA
bWlub3I6IGJlZ2lubmluZyBvZiByYW5nZSBvZiAzMiBtaW5vcnMgZm9yIGRldmljZXMgdGhp
cyBkcml2ZXIKICoJY2FuIHByb3ZpZGUKICogQG5hbWU6IG5hbWUgb2YgdGhlIGhhbmRsZXIs
IHRvIGJlIHNob3duIGluIC9wcm9jL2J1cy9pbnB1dC9oYW5kbGVycwogKiBAaWRfdGFibGU6
IHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBpbnB1dF9kZXZpY2VfaWRzIHRoaXMgZHJpdmVyIGNh
bgogKgloYW5kbGUKICogQGJsYWNrbGlzdDogcHJvaW50ZXIgdG8gYSB0YWJsZSBvZiBpbnB1
dF9kZXZpY2VfaWRzIHRoaXMgZHJpdmVyIHNob3VsZAogKglpZ25vcmUgZXZlbiBpZiB0aGV5
IG1hdGNoIEBpZF90YWJsZQogKiBAaF9saXN0OiBsaXN0IG9mIGlucHV0IGhhbmRsZXMgYXNz
b2NpYXRlZCB3aXRoIHRoZSBoYW5kbGVyCiAqIEBub2RlOiBmb3IgcGxhY2luZyB0aGUgZHJp
dmVyIG9udG8gaW5wdXRfaGFuZGxlcl9saXN0CiAqLwpzdHJ1Y3QgaW5wdXRfaGFuZGxlciB7
CgoJdm9pZCAqcHJpdmF0ZTsKCgl2b2lkICgqZXZlbnQpKHN0cnVjdCBpbnB1dF9oYW5kbGUg
KmhhbmRsZSwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFs
dWUpOwoJc3RydWN0IGlucHV0X2hhbmRsZSogKCpjb25uZWN0KShzdHJ1Y3QgaW5wdXRfaGFu
ZGxlciAqaGFuZGxlciwgc3RydWN0IGlucHV0X2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgaW5w
dXRfZGV2aWNlX2lkICppZCk7Cgl2b2lkICgqZGlzY29ubmVjdCkoc3RydWN0IGlucHV0X2hh
bmRsZSAqaGFuZGxlKTsKCXZvaWQgKCpzdGFydCkoc3RydWN0IGlucHV0X2hhbmRsZSAqaGFu
ZGxlKTsKCgljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwoJaW50IG1pbm9y
OwoJY29uc3QgY2hhciAqbmFtZTsKCgljb25zdCBzdHJ1Y3QgaW5wdXRfZGV2aWNlX2lkICpp
ZF90YWJsZTsKCWNvbnN0IHN0cnVjdCBpbnB1dF9kZXZpY2VfaWQgKmJsYWNrbGlzdDsKCglz
dHJ1Y3QgbGlzdF9oZWFkCWhfbGlzdDsKCXN0cnVjdCBsaXN0X2hlYWQJbm9kZTsKfTsKCnN0
cnVjdCBpbnB1dF9oYW5kbGUgewoKCXZvaWQgKnByaXZhdGU7CgoJaW50IG9wZW47Cgljb25z
dCBjaGFyICpuYW1lOwoKCXN0cnVjdCBpbnB1dF9kZXYgKmRldjsKCXN0cnVjdCBpbnB1dF9o
YW5kbGVyICpoYW5kbGVyOwoKCXN0cnVjdCBsaXN0X2hlYWQJZF9ub2RlOwoJc3RydWN0IGxp
c3RfaGVhZAloX25vZGU7Cn07CgojZGVmaW5lIHRvX2RldihuKSBjb250YWluZXJfb2Yobixz
dHJ1Y3QgaW5wdXRfZGV2LG5vZGUpCiNkZWZpbmUgdG9faGFuZGxlcihuKSBjb250YWluZXJf
b2YobixzdHJ1Y3QgaW5wdXRfaGFuZGxlcixub2RlKTsKI2RlZmluZSB0b19oYW5kbGUobikg
Y29udGFpbmVyX29mKG4sc3RydWN0IGlucHV0X2hhbmRsZSxkX25vZGUpCiNkZWZpbmUgdG9f
aGFuZGxlX2gobikgY29udGFpbmVyX29mKG4sc3RydWN0IGlucHV0X2hhbmRsZSxoX25vZGUp
CgpzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dF9hbGxvY2F0ZV9kZXZpY2Uodm9pZCk7CnZvaWQg
aW5wdXRfZnJlZV9kZXZpY2Uoc3RydWN0IGlucHV0X2RldiAqZGV2KTsKCnN0YXRpYyBpbmxp
bmUgc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZ2V0X2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2
ICpkZXYpCnsKCXJldHVybiB0b19pbnB1dF9kZXYoY2xhc3NfZGV2aWNlX2dldCgmZGV2LT5j
ZGV2KSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbnB1dF9wdXRfZGV2aWNlKHN0cnVjdCBp
bnB1dF9kZXYgKmRldikKewoJY2xhc3NfZGV2aWNlX3B1dCgmZGV2LT5jZGV2KTsKfQoKaW50
IGlucHV0X3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgaW5wdXRfZGV2ICopOwp2b2lkIGlucHV0
X3VucmVnaXN0ZXJfZGV2aWNlKHN0cnVjdCBpbnB1dF9kZXYgKik7CgppbnQgaW5wdXRfcmVn
aXN0ZXJfaGFuZGxlcihzdHJ1Y3QgaW5wdXRfaGFuZGxlciAqKTsKdm9pZCBpbnB1dF91bnJl
Z2lzdGVyX2hhbmRsZXIoc3RydWN0IGlucHV0X2hhbmRsZXIgKik7CgppbnQgaW5wdXRfZ3Jh
Yl9kZXZpY2Uoc3RydWN0IGlucHV0X2hhbmRsZSAqKTsKdm9pZCBpbnB1dF9yZWxlYXNlX2Rl
dmljZShzdHJ1Y3QgaW5wdXRfaGFuZGxlICopOwoKaW50IGlucHV0X29wZW5fZGV2aWNlKHN0
cnVjdCBpbnB1dF9oYW5kbGUgKik7CnZvaWQgaW5wdXRfY2xvc2VfZGV2aWNlKHN0cnVjdCBp
bnB1dF9oYW5kbGUgKik7CgppbnQgaW5wdXRfZmx1c2hfZGV2aWNlKHN0cnVjdCBpbnB1dF9o
YW5kbGUqIGhhbmRsZSwgc3RydWN0IGZpbGUqIGZpbGUpOwoKdm9pZCBpbnB1dF9ldmVudChz
dHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCBpbnQg
Y29kZSwgaW50IHZhbHVlKTsKdm9pZCBpbnB1dF9pbmplY3RfZXZlbnQoc3RydWN0IGlucHV0
X2hhbmRsZSAqaGFuZGxlLCB1bnNpZ25lZCBpbnQgdHlwZSwgdW5zaWduZWQgaW50IGNvZGUs
IGludCB2YWx1ZSk7CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfcmVwb3J0X2tleShzdHJ1
Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCnsKCWlu
cHV0X2V2ZW50KGRldiwgRVZfS0VZLCBjb2RlLCAhIXZhbHVlKTsKfQoKc3RhdGljIGlubGlu
ZSB2b2lkIGlucHV0X3JlcG9ydF9yZWwoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25l
ZCBpbnQgY29kZSwgaW50IHZhbHVlKQp7CglpbnB1dF9ldmVudChkZXYsIEVWX1JFTCwgY29k
ZSwgdmFsdWUpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5wdXRfcmVwb3J0X2FicyhzdHJ1
Y3QgaW5wdXRfZGV2ICpkZXYsIHVuc2lnbmVkIGludCBjb2RlLCBpbnQgdmFsdWUpCnsKCWlu
cHV0X2V2ZW50KGRldiwgRVZfQUJTLCBjb2RlLCB2YWx1ZSk7Cn0KCnN0YXRpYyBpbmxpbmUg
dm9pZCBpbnB1dF9yZXBvcnRfZmZfc3RhdHVzKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5z
aWduZWQgaW50IGNvZGUsIGludCB2YWx1ZSkKewoJaW5wdXRfZXZlbnQoZGV2LCBFVl9GRl9T
VEFUVVMsIGNvZGUsIHZhbHVlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGlucHV0X3JlcG9y
dF9zd2l0Y2goc3RydWN0IGlucHV0X2RldiAqZGV2LCB1bnNpZ25lZCBpbnQgY29kZSwgaW50
IHZhbHVlKQp7CglpbnB1dF9ldmVudChkZXYsIEVWX1NXLCBjb2RlLCAhIXZhbHVlKTsKfQoK
c3RhdGljIGlubGluZSB2b2lkIGlucHV0X3N5bmMoc3RydWN0IGlucHV0X2RldiAqZGV2KQp7
CglpbnB1dF9ldmVudChkZXYsIEVWX1NZTiwgU1lOX1JFUE9SVCwgMCk7Cn0KCnN0YXRpYyBp
bmxpbmUgdm9pZCBpbnB1dF9zZXRfYWJzX3BhcmFtcyhzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYs
IGludCBheGlzLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgZnV6eiwgaW50IGZsYXQpCnsKCWRl
di0+YWJzbWluW2F4aXNdID0gbWluOwoJZGV2LT5hYnNtYXhbYXhpc10gPSBtYXg7CglkZXYt
PmFic2Z1enpbYXhpc10gPSBmdXp6OwoJZGV2LT5hYnNmbGF0W2F4aXNdID0gZmxhdDsKCglk
ZXYtPmFic2JpdFtMT05HKGF4aXMpXSB8PSBCSVQoYXhpcyk7Cn0KCmV4dGVybiBzdHJ1Y3Qg
Y2xhc3MgaW5wdXRfY2xhc3M7CgovKioKICogc3RydWN0IGZmX2RldmljZSAtIGZvcmNlLWZl
ZWRiYWNrIHBhcnQgb2YgYW4gaW5wdXQgZGV2aWNlCiAqIEB1cGxvYWQ6IENhbGxlZCB0byB1
cGxvYWQgYW4gbmV3IGVmZmVjdCBpbnRvIGRldmljZQogKiBAZXJhc2U6IENhbGxlZCB0byBl
cmFzZSBhbiBlZmZlY3QgZnJvbSBkZXZpY2UKICogQHBsYXliYWNrOiBDYWxsZWQgdG8gcmVx
dWVzdCBkZXZpY2UgdG8gc3RhcnQgcGxheWluZyBzcGVjaWZpZWQgZWZmZWN0CiAqIEBzZXRf
Z2FpbjogQ2FsbGVkIHRvIHNldCBzcGVjaWZpZWQgZ2FpbgogKiBAc2V0X2F1dG9jZW50ZXI6
IENhbGxlZCB0byBhdXRvLWNlbnRlciBkZXZpY2UKICogQGRlc3Ryb3k6IGNhbGxlZCBieSBp
bnB1dCBjb3JlIHdoZW4gcGFyZW50IGlucHV0IGRldmljZSBpcyBiZWluZwogKglkZXN0cm95
ZWQKICogQHByaXZhdGU6IGRyaXZlci1zcGVjaWZpYyBkYXRhLCB3aWxsIGJlIGZyZWVkIGF1
dG9tYXRpY2FsbHkKICogQGZmYml0OiBiaXRtYXAgb2YgZm9yY2UgZmVlZGJhY2sgY2FwYWJp
bGl0aWVzIHRydWx5IHN1cHBvcnRlZCBieQogKglkZXZpY2UgKG5vdCBlbXVsYXRlZCBsaWtl
IG9uZXMgaW4gaW5wdXRfZGV2LT5mZmJpdCkKICogQG11dGV4OiBtdXRleCBmb3Igc2VyaWFs
aXppbmcgYWNjZXNzIHRvIHRoZSBkZXZpY2UKICogQG1heF9lZmZlY3RzOiBtYXhpbXVtIG51
bWJlciBvZiBlZmZlY3RzIHN1cHBvcnRlZCBieSBkZXZpY2UKICogQGVmZmVjdHM6IHBvaW50
ZXIgdG8gYW4gYXJyYXkgb2YgZWZmZWN0cyBjdXJyZW50bHkgbG9hZGVkIGludG8gZGV2aWNl
CiAqIEBlZmZlY3Rfb3duZXJzOiBhcnJheSBvZiBlZmZlY3Qgb3duZXJzOyB3aGVuIGZpbGUg
aGFuZGxlIG93bmluZwogKglhbiBlZmZlY3QgZ2V0cyBjbG9zZWQgdGhlIGVmZmNldCBpcyBh
dXRvbWF0aWNhbGx5IGVyYXNlZAogKgogKiBFdmVyeSBmb3JjZS1mZWVkYmFjayBkZXZpY2Ug
bXVzdCBpbXBsZW1lbnQgdXBsb2FkKCkgYW5kIHBsYXliYWNrKCkKICogbWV0aG9kczsgZXJh
c2UoKSBpcyBvcHRpb25hbC4gc2V0X2dhaW4oKSBhbmQgc2V0X2F1dG9jZW50ZXIoKSBuZWVk
CiAqIG9ubHkgYmUgaW1wbGVtZW50ZWQgaWYgZHJpdmVyIHNldHMgdXAgRkZfR0FJTiBhbmQg
RkZfQVVUT0NFTlRFUgogKiBiaXRzLgogKi8Kc3RydWN0IGZmX2RldmljZSB7CglpbnQgKCp1
cGxvYWQpKHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgc3RydWN0IGZmX2VmZmVjdCAqZWZmZWN0
LAoJCSAgICAgIHN0cnVjdCBmZl9lZmZlY3QgKm9sZCk7CglpbnQgKCplcmFzZSkoc3RydWN0
IGlucHV0X2RldiAqZGV2LCBpbnQgZWZmZWN0X2lkKTsKCglpbnQgKCpwbGF5YmFjaykoc3Ry
dWN0IGlucHV0X2RldiAqZGV2LCBpbnQgZWZmZWN0X2lkLCBpbnQgdmFsdWUpOwoJdm9pZCAo
KnNldF9nYWluKShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIHUxNiBnYWluKTsKCXZvaWQgKCpz
ZXRfYXV0b2NlbnRlcikoc3RydWN0IGlucHV0X2RldiAqZGV2LCB1MTYgbWFnbml0dWRlKTsK
Cgl2b2lkICgqZGVzdHJveSkoc3RydWN0IGZmX2RldmljZSAqKTsKCgl2b2lkICpwcml2YXRl
OwoKCXVuc2lnbmVkIGxvbmcgZmZiaXRbTkJJVFMoRkZfTUFYKV07CgoJc3RydWN0IG11dGV4
IG11dGV4OwoKCWludCBtYXhfZWZmZWN0czsKCXN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdHM7
CglzdHJ1Y3QgZmlsZSAqZWZmZWN0X293bmVyc1tdOwp9OwoKaW50IGlucHV0X2ZmX2NyZWF0
ZShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYsIGludCBtYXhfZWZmZWN0cyk7CnZvaWQgaW5wdXRf
ZmZfZGVzdHJveShzdHJ1Y3QgaW5wdXRfZGV2ICpkZXYpOwoKaW50IGlucHV0X2ZmX2V2ZW50
KHN0cnVjdCBpbnB1dF9kZXYgKmRldiwgdW5zaWduZWQgaW50IHR5cGUsIHVuc2lnbmVkIGlu
dCBjb2RlLCBpbnQgdmFsdWUpOwoKaW50IGlucHV0X2ZmX3VwbG9hZChzdHJ1Y3QgaW5wdXRf
ZGV2ICpkZXYsIHN0cnVjdCBmZl9lZmZlY3QgKmVmZmVjdCwgc3RydWN0IGZpbGUgKmZpbGUp
OwppbnQgaW5wdXRfZmZfZXJhc2Uoc3RydWN0IGlucHV0X2RldiAqZGV2LCBpbnQgZWZmZWN0
X2lkLCBzdHJ1Y3QgZmlsZSAqZmlsZSk7CgppbnQgaW5wdXRfZmZfY3JlYXRlX21lbWxlc3Mo
c3RydWN0IGlucHV0X2RldiAqZGV2LCB2b2lkICpkYXRhLAoJCWludCAoKnBsYXlfZWZmZWN0
KShzdHJ1Y3QgaW5wdXRfZGV2ICosIHZvaWQgKiwgc3RydWN0IGZmX2VmZmVjdCAqKSk7Cgoj
ZW5kaWYKI2VuZGlmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
--------------090005080400010106050709--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?470BB0B6.5000102>