Good news so far... :)

ANOQ of the Sun anoq@hardcoreprocessing.com
Thu, 04 Nov 1999 01:44:44 +0100


This is a multi-part message in MIME format.
--------------5AE90B11C4A127D854CFF0E9
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit

"Stephen Weeks" wrote:
> Great.  Just to be clear, you are compiling on a Windows machine, right?

Nope, I'm cross compiling under Linux to Win32... I think that's a
lot easier... :)

I'm using this prebuilt crosscompiler:
http://www.devolution.com/~slouken/SDL/Xmingw32/

> Cool.  Definitely keep us up to date on this and feel free to ask any
> question, no matter how simple it seems.  It's always easier for the
> guy that wrote the code!

Thanks a lot! I'll remember that :)

> Does it look like the main work is in porting the gc, the library,
> or ...?

I have attached what I have so far... I think it's almost
complete - but not quite. The sopen call is different in
Windows, so there are still some complaints in gc.c

I've replaced the mmap and munmap with some VirtualAlloc/
VirtualFree funcions in Windows... that's what I found in
the SML/NJ source as replacement for their mmap/munmap...
I'm not sure if it's right. Also some of my changes
is simply removing offending code...

Well, anyways... what I have done:
First compile a fresh mlton under linux
then change the files I have sent as *.tar
(I have kept the dir-structure of include and
src for the files). You can do some diffs to see
what I have changed - or use grep and search
for "win32", "WIN32" and "FIXME".
In the source I have made #if defined(_WIN32)
in all places where I have changed something...

Notice, that what I did in the makefiles are
ugly hacks just to get gmp to compile, and
I actually did a few extra changes than
what I have sent here - but they are gone
now after compilation... luckily it's not much
extra I did (if I remember correctly):

1) I added an empty ml-win32 file in runtime/gmp-2.0.2/config

2) Added a line like the *-*-linux*) one, but with
*win32*) instead in configure.in under gmp-2.0.2

BTW: I can send you my current MLTon / SDL bindings if you
want to play with it :)

> Thus, I think that both of your problems will be fixed by switching to
> 110.9.1 (that's the version I use).

Yes, thanks! It works now... but it doesn't like the _prim
function. It thinks that _ is the wildcard symbol...
Are there any good workarounds for this?

> As to the garbage collector, since MLton uses a straightforward
> stop-and-copy algorithm, I can imagine it causing problems if you have
> much data alive.  In measurements we made, the gc copies live data
> about the rate of 10M/sec on a 400MhZ machine.  So far, this hasn't
> been a problem for any of the code I've written, but I haven't written
> any real time games.  One workaround (short of writing a better GC),
> would be to do a bit of manual memory allocation for long-lived large
> arrays by using C malloc and free and keeping the pointer hidden from
> MLton's gc.  Sure, it's gross and not safe, but it might be simple
> enough to be feasible.

Well, I'm mostly concerned about "rare"/occational breaks in
the game, which I guess would be distracting for the user.
What about forcing the GC to run every iteration of the main
loop? Say, if there was an extra non-standard ML function
like: force_GC : unit -> unit
But of course this would only be a good thing, if
the garbage collector is fast when only a few things
have changed in memory... maybe a
force_quick_GC : unit -> unit
would be better :)
A GC function optimized for small memory changes...?

I don't know... maybe I should go to bed now :)


Cheers
-- 
http://www.HardcoreProcessing.com


--------------5AE90B11C4A127D854CFF0E9
Content-Type: application/x-tar;
 name="include.tar"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="include.tar"

aW5jbHVkZS8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA0MDc1NSAAICAxNzUw
IAAgIDE3NTAgACAgICAgICAgICAwICA3MDEwMTQ2MDQwICAxMDU3MwAgNQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABp
bmNsdWRlL0NWUy8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDQwNzU1IAAgIDE3NTAg
ACAgMTc1MCAAICAgICAgICAgIDAgIDcwMTAxNDYwNTMgIDExMjMyACA1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGlu
Y2x1ZGUvQ1ZTL1Jvb3QAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAA
ICAxNzUwIAAgICAgICAgICA2MiAgNzAxMDE0NjAwNyAgMTIxMzIAIDAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL3Vz
ci9sb2NhbC9yZXBvQ1ZTL0RvTm90VG91Y2hQZW5hbHR5RGVhdGgvY3ZzYW5vcQoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABpbmNs
dWRlL0NWUy9SZXBvc2l0b3J5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgIDE3NTAgACAg
MTc1MCAAICAgICAgICAxNDcgIDcwMTAxNDYwMDcgIDEzNDEyACAwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC91c3Iv
bG9jYWwvcmVwb0NWUy9Eb05vdFRvdWNoUGVuYWx0eURlYXRoL2N2c2Fub3EvUHJvamVjdHMvSGFy
ZGNvcmVQcm9jZXNzaW5nL01MU0RML3NyY0MvTUxUb24vaW5jbHVkZQoAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaW5jbHVk
ZS9DVlMvRW50cmllcwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAxNzUwIAAgIDE3
NTAgACAgICAgICAgMTI3ICA3MDEwMTQ2MDUzICAxMjY0MwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvbWx0b24t
bGliLmgvMS4xL1dlZCBOb3YgIDMgMjM6NTg6MTcgMTk5OS8vCi9teS1saWIuaC8xLjEvV2VkIE5v
diAgMyAyMzo1ODoyNCAxOTk5Ly8KRAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGluY2x1ZGUv
bWx0b24tbGliLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAAICAxNzUw
IAAgICAgICA1MzQzNSAgNzAxMDE0NjAzMSAgMTI3NzAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALyogQ29weXJp
Z2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxlYXNlIHNlZSB0
aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKi8KI2lmbmRlZiBfTUxU
T05fTElCX0gKI2RlZmluZSBfTUxUT05fTElCX0gKCiNpbmNsdWRlIDxkaXJlbnQuaD4KI2luY2x1
ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxmY250bC5oPgoKI2lmIGRlZmluZWQoX1dJTjMyKQojaW5j
bHVkZSA8d2luZG93cy5oPgojZWxzZQojaW5jbHVkZSA8Z3JwLmg+CiNlbmRpZgoKI2luY2x1ZGUg
PG1hdGguaD4KCiNpZiBkZWZpbmVkKF9XSU4zMikKI2Vsc2UKI2luY2x1ZGUgPHB3ZC5oPgojZW5k
aWYKCiNpbmNsdWRlIDxzaWduYWwuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzeXMv
c3RhdC5oPgojaW5jbHVkZSA8c3lzL3RpbWUuaD4KI2luY2x1ZGUgPHN5cy90aW1lcy5oPgojaW5j
bHVkZSA8c3lzL3R5cGVzLmg+CgojaWYgZGVmaW5lZChfV0lOMzIpCiNlbHNlCiNpbmNsdWRlIDxz
eXMvdXRzbmFtZS5oPgojaW5jbHVkZSA8c3lzL3dhaXQuaD4KI2luY2x1ZGUgPHRlcm1pb3MuaD4K
I2VuZGlmCgojaW5jbHVkZSA8dGltZS5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CgojaWYgZGVmaW5l
ZChfV0lOMzIpCiNpbmNsdWRlIDxzeXMvdXRpbWUuaD4KI2Vsc2UKI2luY2x1ZGUgPHV0aW1lLmg+
CiNlbmRpZgoKI2luY2x1ZGUgImdjLmgiCiNpbmNsdWRlICJpbnQtaW5mLmgiCiNpbmNsdWRlICJt
eS1saWIuaCIKI2luY2x1ZGUgIm1sdG9uLXBvc2l4LmgiCgojaWZuZGVmIEdDX0VWRVJZX0NIRUNL
CiNkZWZpbmUgR0NfRVZFUllfQ0hFQ0sgRkFMU0UKI2VuZGlmCgojaWZuZGVmIElOU1RSVU1FTlQK
I2RlZmluZSBJTlNUUlVNRU5UIEZBTFNFCiNlbmRpZgoKI2lmbmRlZiBERVRFQ1RfT1ZFUkZMT1cK
I2RlZmluZSBERVRFQ1RfT1ZFUkZMT1cgRkFMU0UKI2VuZGlmCgp0eXBlZGVmIHVpbnQgY3BvaW50
ZXI7Cgp0eXBlZGVmIHN0cnVjdCBNTFRPTl9zdGF0ZSB7Cgl1aW50IGNvbW1hbmROYW1lOwoJaW50
IGFyZ2M7Cgl1aW50IGFyZ3Y7Cgl1aW50IGVudmlyb247CgkKCS8qIHVzZWQgYnkgc2F2ZVdvcmxk
ICovCglib29sIGlzT3JpZ2luYWw7CgoJLyogVGhlIG1hZ2ljIG51bWJlciByZXF1aXJlZCBmb3Ig
YSB2YWxpZCB3b3JsZCBmaWxlLiAqLwoJdWludCBtYWdpYzsKCQoJR0Nfc3RhdGUgKmdjU3RhdGU7
Cn0gTUxUT05fc3RhdGU7CgojZGVmaW5lIE1MVE9OX2FyZ2MoKSBtbHRvblN0YXRlLmFyZ2MKI2Rl
ZmluZSBNTFRPTl9hcmd2KCkgbWx0b25TdGF0ZS5hcmd2CiNkZWZpbmUgTUxUT05fY29tbWFuZE5h
bWUoKSBtbHRvblN0YXRlLmNvbW1hbmROYW1lCgovKiBwcmludCBhIGJ1ZyBtZXNzYWdlIGFuZCBl
eGl0KDIpICovCnZvaWQgTUxUT05fYnVnKHN0cmluZyBtc2cpOwoKLyogaW5pdGlhbGl6ZSB0aGUg
bWFjaGluZSAqLwp2b2lkIE1MVE9OX2luaXQoaW50IGFyZ2MsIAoJICAgICAgIGNoYXIgKiphcmd2
LAoJICAgICAgIE1MVE9OX3N0YXRlICpNTFRPTl9zdGF0ZSwKCSAgICAgICB1aW50IG1hZ2ljLAoJ
ICAgICAgIC8qIFJlYWQgdGhlIGdsb2JhbHMgZnJvbSB0aGUgd29ybGQgZmlsZS4gIElzIE5VTEwg
aWYgYSB3b3JsZCBmaWxlCgkJKiBjYW5ub3QgYmUgbG9hZGVkLgoJCSovCgkgICAgICAgdm9pZCAo
KmxvYWRHbG9iYWxzKShGSUxFICpmaWxlKSk7CgojZGVmaW5lIE1MVE9OX2dsb2JhbHMgCQkJCQlc
CglzdGF0aWMgTUxUT05fc3RhdGUgbWx0b25TdGF0ZTsgCQkJXAoJc3RhdGljIEdDX3N0YXRlIGdj
U3RhdGU7CQkJXAoJc3RhdGljIGludCBzaXplUmVzOwkJCQlcCglzdGF0aWMgcG9pbnRlciBzdGFj
a1JlczsJCQlcCglzdGF0aWMgdm9pZCAoKm5leHRDaHVuaykoKTsJCQlcCglzdGF0aWMgaW50IG5l
eHRGdW47CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgQ291bnRlcnMgICAgICAgICAgICAgICAgICAg
ICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwoKZXh0ZXJuIHVsbG9uZyBNTFRPTl9udW1UcmFtcG9saW5lczsKZXh0ZXJuIHVsbG9uZyBN
TFRPTl9udW1MaW1pdENoZWNrczsKZXh0ZXJuIHVsbG9uZyBNTFRPTl9udW1JbnRlclJldHVybnM7
CmV4dGVybiB1bGxvbmcgTUxUT05fbnVtUmV0dXJuczsKCmV4dGVybiB1bGxvbmcgTUxUT05fWG1s
S25vd247CmV4dGVybiB1bGxvbmcgTUxUT05fWG1sVW5rbm93bjsKI2RlZmluZSBNTFRPTl9pbmNY
bWxLbm93bigpIE1MVE9OX1htbEtub3duKysKI2RlZmluZSBNTFRPTl9pbmNYbWxVbmtub3duKCkg
TUxUT05fWG1sVW5rbm93bisrCgpleHRlcm4gdWxsb25nIE1MVE9OX1N4bWxLbm93bjsKZXh0ZXJu
IHVsbG9uZyBNTFRPTl9TeG1sVW5rbm93bjsKI2RlZmluZSBNTFRPTl9pbmNTeG1sS25vd24oKSBN
TFRPTl9TeG1sS25vd24rKwojZGVmaW5lIE1MVE9OX2luY1N4bWxVbmtub3duKCkgTUxUT05fU3ht
bFVua25vd24rKwoKZXh0ZXJuIHVsbG9uZyBNTFRPTl9DcHNLbm93bjsKZXh0ZXJuIHVsbG9uZyBN
TFRPTl9DcHNVbmtub3duOwojZGVmaW5lIE1MVE9OX2luY0Nwc0tub3duKCkgTUxUT05fQ3BzS25v
d24rKwojZGVmaW5lIE1MVE9OX2luY0Nwc1Vua25vd24oKSBNTFRPTl9DcHNVbmtub3duKysKCmV4
dGVybiB1bGxvbmcgTUxUT05fQ3BzQ2FsbDsKZXh0ZXJuIHVsbG9uZyBNTFRPTl9DcHNMb29wOwoj
ZGVmaW5lIE1MVE9OX2luY0Nwc0NhbGwoKSBNTFRPTl9DcHNDYWxsKysKI2RlZmluZSBNTFRPTl9p
bmNDcHNMb29wKCkgTUxUT05fQ3BzTG9vcCsrCgpleHRlcm4gdWxsb25nIE1MVE9OX0Nwc0Rpc3Bh
dGNoOwojZGVmaW5lIE1MVE9OX2luY0Nwc0Rpc3BhdGNoKCkgTUxUT05fQ3BzRGlzcGF0Y2grKwpl
eHRlcm4gdWxsb25nIE1MVE9OX0Nwc0NvZXJjZTsKI2RlZmluZSBNTFRPTl9pbmNDcHNDb2VyY2Uo
KSBNTFRPTl9DcHNDb2VyY2UrKwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgQ2h1bmsgICAgICAg
ICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fY2h1bmsobmFtZSkJCQkJXAoJc3RhdGlj
IHZvaWQgbmFtZSAoKSB7CQkJCVwKCQljaGFyICpzdGFja1RvcCA9IGdjU3RhdGUuc3RhY2tUb3A7
IAlcCgkJcG9pbnRlciBmcm9udGllciA9IGdjU3RhdGUuZnJvbnRpZXI7CgojZGVmaW5lIE1MVE9O
X2NodW5rU3dpdGNoCQkJXAoJCXRvcDoJCQkJXAoJCXN3aXRjaCAobmV4dEZ1bikgewoKI2RlZmlu
ZSBNTFRPTl9lbmRDaHVua1N3aXRjaAkJCQkJXAoJCWRlZmF1bHQ6CQkJCQlcCgkJCS8qIGludGVy
IGNodW5rIHJldHVybiAqLwkJXAoJCQlpZiAoSU5TVFJVTUVOVCkJCQkJXAoJCQkJTUxUT05fbnVt
SW50ZXJSZXR1cm5zKys7CVwKCQkJbmV4dENodW5rID0gbmV4dENodW5rc1tuZXh0RnVuXTsJXAoJ
CQlsZWF2ZUNodW5rOiAJCQkJXAoJCQkJZ2NTdGF0ZS5mcm9udGllciA9IGZyb250aWVyOwlcCgkJ
CQlnY1N0YXRlLnN0YWNrVG9wID0gc3RhY2tUb3A7CVwKCQkJCXJldHVybjsJCQkJXAoJCX0gLyog
ZW5kIHN3aXRjaCAobmV4dEZ1bikgKi8KCiNkZWZpbmUgTUxUT05fZW5kQ2h1bmsJCQkJCVwKCX0g
LyogZW5kIGNodW5rICovCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICBtYWluICAgICAgICAgICAg
ICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9tYWluKHVmaCxmcyxibCxtZnMsbmcsZ3MsbWZp
LG1hZ2ljLGxnLG5paSxtYyxtbCxzYyxzbCkJXAppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy
Z3YpIHsJCQkJCVwKCWdjU3RhdGUudXNlRml4ZWRIZWFwID0gdWZoOwkJCQkJXAoJZ2NTdGF0ZS5m
cm9tU2l6ZSA9IGZzOwkJCQkJCVwKCWdjU3RhdGUuYnl0ZXNMaXZlID0gYmw7CQkgCQkJCVwKCWdj
U3RhdGUubWF4RnJhbWVTaXplID0gbWZzOwkJCQkJXAoJZ2NTdGF0ZS5udW1HbG9iYWxzID0gbmc7
CQkJCQlcCglnY1N0YXRlLmdsb2JhbHMgPSBnczsJCQkJCQlcCglnY1N0YXRlLm1heEZyYW1lSW5k
ZXggPSBtZmk7CQkJCQlcCglnY1N0YXRlLmZyYW1lTGF5b3V0cyA9IGZyYW1lTGF5b3V0czsJCQkJ
XAoJbWx0b25TdGF0ZS5nY1N0YXRlID0gJmdjU3RhdGU7CQkJCQlcCglNTFRPTl9pbml0KGFyZ2Ms
IGFyZ3YsICZtbHRvblN0YXRlLCBtYWdpYywgbGcpOwkJCVwKCWlmIChtbHRvblN0YXRlLmlzT3Jp
Z2luYWwpIHsJCQkJCVwKIAkJLyogVGhlIChuaWkgPiAwKSBjaGVjayBpcyBzbyB0aGF0IHRoZSBD
IGNvbXBpbGVyIGNhbiAJXAoJCSAqIGVsaW1pbmF0ZSB0aGUgY2FsbCBpZiB0aGVyZSBhcmUgbm8g
SW50SW5mcyBhbmQgd2UgCVwKCQkgKiB0aGVuIHdvbid0IGhhdmUgdG8gbGluayBpbiB3aXRoIHRo
ZSBJbnRJbmYgc3R1ZmYuIAlcCgkJICovCQkJCQkJCVwKCQlpZiAobmlpID4gMCkJCQkJCQlcCgkJ
CU1MVE9OX2NyZWF0ZUludEluZnMoJmdjU3RhdGUsIGludEluZkluaXRzKTsJXAoJCUdDX2NyZWF0
ZVN0cmluZ3MoJmdjU3RhdGUsIHN0cmluZ0luaXRzKTsgICAgICAgCQlcCgkJTUxUT05fcHJlcEZh
ckp1bXAobWMsIG1sKTsJCQkJXAoJfSBlbHNlIHsJCQkJCQkJXAoJCU1MVE9OX3ByZXBGYXJKdW1w
KHNjLCBzbCk7CQkJCVwKCX0JCQkJCQkJCVwKCS8qIFRyYW1wb2xpbmUgKi8JCQkJCQlcCgl3aGls
ZSAoMSkgewkJCQkJCQlcCiAJCWlmIChJTlNUUlVNRU5UKQkJCQkJCVwKCQkJTUxUT05fbnVtVHJh
bXBvbGluZXMrKzsJCQkJXAoJCSgqbmV4dENodW5rKSgpOyAJCQkJCVwKCX0JCQkJCQkJCVwKfQoK
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwov
KiAgICAgICAgICAgICAgICAgICAgICAgSGFsdCAgICAgICAgICAgICAgICAgICAgICAgICovCi8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNk
ZWZpbmUgTUxUT05faGFsdCh4KQkJCQkJCQlcCgl7CQkJCQkJCQlcCgkJaW50IHN0YXR1czsJCQkJ
CQlcCgkJaWYgKElOU1RSVU1FTlQpIAkJCQkJXAoJCSAgICAgICAgZnByaW50ZihzdGRlcnIsICJN
TFRPTl9udW1UcmFtcG9saW5lcyA9ICVMZFxuTUxUT05fbnVtUmV0dXJucyA9ICVMZFxuTUxUT05f
bnVtSW50ZXJSZXR1cm5zID0gJUxkXG5NTFRPTl9udW1MaW1pdENoZWNrcyA9ICVMZFxuTUxUT05f
WG1sS25vd24gPSAlTGRcbk1MVE9OX1htbFVua25vd24gPSAlTGRcbk1MVE9OX1N4bWxLbm93biA9
ICVMZFxuTUxUT05fU3htbFVua25vd24gPSAlTGRcbk1MVE9OX0Nwc0tub3duID0gJUxkXG5NTFRP
Tl9DcHNVbmtub3duID0gJUxkXG5NTFRPTl9DcHNDYWxsID0gJUxkXG5NTFRPTl9DcHNMb29wID0g
JUxkXG5NTFRPTl9DcHNEaXNwYXRjaCA9ICVMZFxuTUxUT05fQ3BzQ29lcmNlID0gJUxkXG4iLCAJ
CQkJCVwKCQkJCU1MVE9OX251bVRyYW1wb2xpbmVzLCBNTFRPTl9udW1SZXR1cm5zLAkJXAoJCQkJ
TUxUT05fbnVtSW50ZXJSZXR1cm5zLCBNTFRPTl9udW1MaW1pdENoZWNrcywJXAoJCQkJTUxUT05f
WG1sS25vd24sIE1MVE9OX1htbFVua25vd24sCQkJXAoJCQkJTUxUT05fU3htbEtub3duLCBNTFRP
Tl9TeG1sVW5rbm93biwJCVwKCQkJCU1MVE9OX0Nwc0tub3duLCBNTFRPTl9DcHNVbmtub3duLAkJ
CVwKCQkJCU1MVE9OX0Nwc0NhbGwsIE1MVE9OX0Nwc0xvb3AsCQkJXAoJCQkJTUxUT05fQ3BzRGlz
cGF0Y2gsIE1MVE9OX0Nwc0NvZXJjZSk7CQlcCgkJZ2NTdGF0ZS5mcm9udGllciA9IGZyb250aWVy
OwkJCQkJXAoJCWdjU3RhdGUuc3RhY2tUb3AgPSBzdGFja1RvcDsJCQkJCVwKCQlzdGF0dXMgPSAo
eCk7CQkJCQkJCVwKCQlHQ19kb25lKCZnY1N0YXRlKTsJCQkJCQlcCgkJZXhpdChzdGF0dXMpOwkJ
CQkJCQlcCgl9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgICAgR0MgICAgICAgICAgICAgICAgICAg
ICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwoKI2RlZmluZSBNTFRPTl9iZWZvcmVHQwkJCQkJXAoJZ2M6CQkJCQkJXAoJCWdjU3Rh
dGUubG9jYWxzID0gbG9jYWxzOwkJXAoJCWdjU3RhdGUuZnJvbnRpZXIgPSBmcm9udGllcjsgCSAg
ICAgICAJXAoJCWdjU3RhdGUuc3RhY2tUb3AgPSBzdGFja1RvcDsKCiNkZWZpbmUgTUxUT05fR0MJ
CQkJCQlcCiAgICAgICAgR0NfZ2MoJmdjU3RhdGUpOwkJCQlcCglzdGFja1RvcCA9IGdjU3RhdGUu
c3RhY2tUb3A7CQkJXAoJZnJvbnRpZXIgPSBnY1N0YXRlLmZyb250aWVyOwoKLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAg
ICAgICAgICAgICBmYXJKdW1wICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05f
cHJlcEZhckp1bXAoYyxsKQkgCVwKCWRvIHsJCQkJXAoJCW5leHRDaHVuayA9IGM7IAkJXAoJCW5l
eHRGdW4gPSBsICMjIF9pbmRleDsJXAoJfSB3aGlsZSAoMCkKCiNkZWZpbmUgTUxUT05fZmFySnVt
cChjLGwpCSAJXAoJZG8gewkJCQlcCgkJTUxUT05fcHJlcEZhckp1bXAoYyxsKTsgCVwKCQlnb3Rv
IGxlYXZlQ2h1bms7CVwKCX0gd2hpbGUgKDApCgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgIFJldHVy
biAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2RlZmluZSBNTFRPTl9yZXR1cm4JCQkJCVwKCWlm
IChJTlNUUlVNRU5UKQkJCQkJXAoJCU1MVE9OX251bVJldHVybnMrKzsJCQlcCgluZXh0RnVuID0g
KihpbnQqKXN0YWNrVG9wOwkgCQlcCglnb3RvIHRvcDsKCiNkZWZpbmUgTUxUT05fcmFpc2UJCQkJ
CQlcCglzdGFja1RvcCA9IGdjU3RhdGUuc3RhY2tCb3R0b20gKyBnY1N0YXRlLmV4blN0YWNrOwlc
CgluZXh0RnVuID0gKihpbnQqKXN0YWNrVG9wOwkgCQkJXAoJZ290byB0b3A7CgojZGVmaW5lIE1M
VE9OX3NhdmVFeG5TdGFjayhvZmZzZXQpCQkJCQlcCgl7CQkJCQkJCQlcCgkJcG9pbnRlciBwOwkJ
CQkJCVwKCQlwID0gc3RhY2tUb3AgKyAob2Zmc2V0KTsJCQkJXAoJCSoodWludCopKHAgKyBXT1JE
X1NJWkUpID0gZ2NTdGF0ZS5leG5TdGFjazsJCVwKCQlnY1N0YXRlLmV4blN0YWNrID0gcCAtIGdj
U3RhdGUuc3RhY2tCb3R0b207CQlcCgl9CgojZGVmaW5lIE1MVE9OX3Jlc3RvcmVFeG5TdGFjayhv
ZmZzZXQpCQkJCQlcCglnY1N0YXRlLmV4blN0YWNrID0gKih1aW50Kikoc3RhY2tUb3AgKyAob2Zm
c2V0KSArIFdPUkRfU0laRSk7CVwKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgIExpbWl0IENoZWNrICAg
ICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCgojZGVmaW5lIE1MVE9OX2xpbWl0Q2hlY2soYnl0ZXMsbG9jYWxJ
bmRpY2VzLGZyYW1lU2l6ZSxyZXQpCSAJCVwKCWlmIChJTlNUUlVNRU5UKQkJCQkJCQkJXAoJCU1M
VE9OX251bUxpbWl0Q2hlY2tzKys7CQkJCQkJXAoJaWYgKEdDX0VWRVJZX0NIRUNLIHx8IGZyb250
aWVyICsgKGJ5dGVzKSA+PSBnY1N0YXRlLmxpbWl0KSB7CQlcCgkJaWYgKGdjU3RhdGUubWVzc2Fn
ZXMpIGZwcmludGYoc3RkZXJyLCAiZ2MgYXQgbGluZSAlZCBvZiAlc1xuIiwJXAoJCQkJCQlfX0xJ
TkVfXywJCQlcCgkJCQkJCV9fRklMRV9fKTsJCQlcCgkJZ2NTdGF0ZS5ieXRlc1JlcXVlc3RlZCA9
IChieXRlcyk7IAkJCQlcCgkJZ2NTdGF0ZS5sb2NhbE9mZnNldHMgPSAobG9jYWxJbmRpY2VzKTsJ
CQkJXAoJCXN0YWNrVG9wICs9IChmcmFtZVNpemUpOwkJCQkJXAoJCSoodWludCopc3RhY2tUb3Ag
PSAocmV0ICMjIF9pbmRleCk7CQkJCVwKCQlnb3RvIGdjOwkJCQkJCQlcCgkJcmV0OgkJCQkJCQkJ
XAoJCXN0YWNrVG9wIC09IChmcmFtZVNpemUpOwkJCQkJXAoJfQoKI2RlZmluZSBNTFRPTl9zdGFj
a092ZXJmbG93Q2hlY2sJCQlcCglpZiAoc3RhY2tUb3AgPj0gZ2NTdGF0ZS5zdGFja0xpbWl0KSB7
CVwKCQlnY1N0YXRlLnN0YWNrVG9wID0gc3RhY2tUb3A7CVwKCQlHQ19ncm93U3RhY2soJmdjU3Rh
dGUpOwkJXAoJCXN0YWNrVG9wID0gZ2NTdGF0ZS5zdGFja1RvcDsJXAogICAgICAgIH0KCi8qIFRo
ZSBleHRyYSBQT0lOVEVSX1NJWkUgYWRkZWQgdG8gZnJvbnRpZXIgaXMgc28gc3BhY2UgaXMgYWxs
b2NhdGVkIGZvciB0aGUKICogZm9yd2FyZGluZyBwb2ludGVyIGluIHplcm8gbGVuZ3RoIGFycmF5
cy4KICovCiNkZWZpbmUgTUxUT05fYWxsb2NBcnJheU5vUG9pbnRlcnMoZHN0LG51bUVsdHMsYnl0
ZXNQZXJFbHQpCQkJXAoJCSood29yZCopZnJvbnRpZXIgPSAobnVtRWx0cyk7CQkJCQlcCgkJKih3
b3JkKikoZnJvbnRpZXIgKyBXT1JEX1NJWkUpID0gCQkJCVwKCQkJR0NfYXJyYXlIZWFkZXIoKGJ5
dGVzUGVyRWx0KSwgMCk7CQkJXAoJCShkc3QpID0gZnJvbnRpZXIgKyAyICogV09SRF9TSVpFOyAJ
CQkJXAoJCWZyb250aWVyID0gKGRzdCkgKyAoKDAgPT0gbnVtRWx0cykgPyBQT0lOVEVSX1NJWkUg
OgkJXAoJCQkJCXdvcmRBbGlnbigobnVtRWx0cykgKiAoYnl0ZXNQZXJFbHQpKSk7CgojZGVmaW5l
IE1MVE9OX2FsbG9jQXJyYXlQb2ludGVycyhkc3QsbnVtRWx0cyxudW1Qb2ludGVycykJCQlcCgkJ
Kih3b3JkKilmcm9udGllciA9IChudW1FbHRzKTsJCQkJCVwKCQkqKHdvcmQqKShmcm9udGllciAr
IFdPUkRfU0laRSkgPSAJCQkJXAoJCQlHQ19hcnJheUhlYWRlcigwLCAobnVtUG9pbnRlcnMpKTsJ
CQlcCgkJKGRzdCkgPSBmcm9udGllciArIDIgKiBXT1JEX1NJWkU7IAkJCQlcCgkJZnJvbnRpZXIg
PSAoZHN0KSArICgoMCA9PSAobnVtRWx0cykpID8gUE9JTlRFUl9TSVpFCQlcCgkJCQkgICAgOiAo
bnVtRWx0cykgKiAobnVtUG9pbnRlcnMpICogUE9JTlRFUl9TSVpFKTtcCgkJewkJCQkJCQkJXAoJ
CQl3b3JkICpwOwkJCQkJCVwKCQkJZm9yIChwID0gKHdvcmQqKSAoZHN0KTsgcCA8ICh3b3JkKikg
ZnJvbnRpZXI7ICsrcCkJXAoJCQkJKnAgPSAweDE7CQkJCQlcCgkJfQoKLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwov
KiAgICAgICAgICAgICAgICAgICAgIEJhc2lzIExpYnJhcnkgUHJpbWl0aXZlcyAgICAgICAgICAg
ICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnZvaWQgTUxUT05fb3ZlcmZsb3coKTsKCi8qIFVz
ZWQgdG8gImNhc3QiIGF0IHRoZSBNTCBsZXZlbCBiZXR3ZWVuIHR3byBkaWZmZXJlbnQgTUwgdHlw
ZXMgdGhhdCB3ZQogKiBrbm93IGhhdmUgdGhlIHNhbWUgQyByZXByZXNlbnRhdGlvbi4KICovCiNk
ZWZpbmUgTUxUT05faWQoeCkgeAoKLyogVXNlZCBieSBwb2x5bW9ycGhpYyBlcXVhbGl0eSB0byBp
bXBsZW1lbnQgZXF1YWwgb24gZ3JvdW5kIHR5cGVzCiAqIGxpa2UgY2hhciwgaW50LCB3b3JkLCAg
YW5kIG9uIHJlZiBjZWxscy4KICogSXQgaXMgZW1pdHRlZCBieSBiYWNrZW5kL21hY2hpbmUuZnVu
LgogKi8KI2RlZmluZSBNTFRPTl9lcSh4LHkpICgoeCkgPT0gKHkpKQoKLyogLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAg
ICAgICAgICAgQXJyYXkgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fQXJy
YXlfbGVuZ3RoIEdDX2FycmF5TnVtRWxlbWVudHMKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIEJ5
dGUgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgojZGVmaW5lIE1MVE9OX0J5dGVfYnl0ZVRvQ2hh
ciBNTFRPTl9pZAojZGVmaW5lIE1MVE9OX0J5dGVfY2hhclRvQnl0ZSBNTFRPTl9pZAoKLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAg
ICAgICAgICAgICAgICAgICAgQ2hhciAgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUg
TUxUT05fQ2hhcl9vcmQoYykgKChpbnQpKGMpKQojZGVmaW5lIE1MVE9OX0NoYXJfY2hyKGMpICgo
dWNoYXIpKGMpKQojZGVmaW5lIE1MVE9OX0NoYXJfZ3QoYzEsYzIpICgoYzEpID4gKGMyKSkKI2Rl
ZmluZSBNTFRPTl9DaGFyX2dlKGMxLGMyKSAoKGMxKSA+PSAoYzIpKQojZGVmaW5lIE1MVE9OX0No
YXJfbHQoYzEsYzIpICgoYzEpIDwgKGMyKSkKI2RlZmluZSBNTFRPTl9DaGFyX2xlKGMxLGMyKSAo
KGMxKSA8PSAoYzIpKQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgIElFRUVSZWFsICAgICAgICAgICAg
ICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KCnZvaWQgc2V0Um91bmRpbmdNb2RlKGludCBtb2RlKTsKaW50IGdldFJvdW5k
aW5nTW9kZSgpOwoKI2RlZmluZSBNTFRPTl9JRUVFUmVhbF9zZXRSb3VuZGluZ01vZGUgc2V0Um91
bmRpbmdNb2RlCiNkZWZpbmUgTUxUT05fSUVFRVJlYWxfZ2V0Um91bmRpbmdNb2RlIGdldFJvdW5k
aW5nTW9kZQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgIEludCAgICAgICAgICAgICAgICAgICAg
ICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KCmludCBpbnRRdW90KGludCBudW1lcmF0b3IsIGludCBkZW5vbWluYXRvcik7CmludCBp
bnRSZW0oaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKTsKCiNpZiBERVRFQ1RfT1ZFUkZM
T1cKaW50IE1MVE9OX0ludF9hZGRDaGVjayhpbnQgbjEsIGludCBuMik7CmludCBNTFRPTl9JbnRf
c3ViQ2hlY2soaW50IG4xLCBpbnQgbjIpOwppbnQgTUxUT05fSW50X211bENoZWNrKGludCBuMSwg
aW50IG4yKTsKI2RlZmluZSBNTFRPTl9JbnRfYWRkIE1MVE9OX0ludF9hZGRDaGVjawojZGVmaW5l
IE1MVE9OX0ludF9zdWIgTUxUT05fSW50X3N1YkNoZWNrCiNkZWZpbmUgTUxUT05fSW50X211bCBN
TFRPTl9JbnRfbXVsQ2hlY2sKI2Vsc2UKI2RlZmluZSBNTFRPTl9JbnRfYWRkKG4xLG4yKSAoKG4x
KSArIChuMikpCiNkZWZpbmUgTUxUT05fSW50X3N1YihuMSxuMikgKChuMSkgLSAobjIpKQojZGVm
aW5lIE1MVE9OX0ludF9tdWwobjEsbjIpICgobjEpICogKG4yKSkKI2VuZGlmCiNkZWZpbmUgTUxU
T05fSW50X25lZyhuKSAoLShuKSkKI2RlZmluZSBNTFRPTl9JbnRfcXVvdCBpbnRRdW90CiNkZWZp
bmUgTUxUT05fSW50X3JlbSBpbnRSZW0KI2RlZmluZSBNTFRPTl9JbnRfZ3QobjEsbjIpICgobjEp
ID4gKG4yKSkKI2RlZmluZSBNTFRPTl9JbnRfZ2UobjEsbjIpICgobjEpID49IChuMikpCiNkZWZp
bmUgTUxUT05fSW50X2x0KG4xLG4yKSAoKG4xKSA8IChuMikpCiNkZWZpbmUgTUxUT05fSW50X2xl
KG4xLG4yKSAoKG4xKSA8PSAobjIpKQojZGVmaW5lIE1MVE9OX0ludF9nZXUoeCx5KSAoKHVpbnQp
KHgpID49ICh1aW50KSh5KSkKI2RlZmluZSBNTFRPTl9JbnRfZ3R1KHgseSkgKCh1aW50KSh4KSA+
ICh1aW50KSh5KSkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIEludDMxICAgICAgICAgICAgICAg
ICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tICovCi8qIEludDMxIGlzIGN1cnJlbnRseSBub3QgaW1wbGVtZW50ZWQgKi8KCi8qICNk
ZWZpbmUgTUxUT05fSW50MzFfdG9JbnQobikgKChuKSA+PiAxKSAqLwovKiAjZGVmaW5lIE1MVE9O
X0ludDMxX2Zyb21JbnQobikgKChuKSA8PCAxKSAqLwoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICBJ
bnRJbmYgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fSW50SW5mX2VxdWFs
IE1MVE9OX2ludEluZkVxdWFsCiNkZWZpbmUgTUxUT05fSW50SW5mX2Zyb21TdHJpbmcgTUxUT05f
aW50SW5mRnJvbVN0cmluZwojZGVmaW5lIE1MVE9OX0ludEluZl90b1dvcmQoaSkgKCh1aW50KShp
KSkKI2RlZmluZSBNTFRPTl9JbnRJbmZfZnJvbVdvcmQodykgKChwb2ludGVyKSh3KSkKCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAg
ICAgICAgICAgICAgICAgICAgIFJlYWwgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpkb3VibGUg
cm91bmQoZG91YmxlIGQpOwppbnQgc2lnbkJpdChkb3VibGUgZCk7CmludCBpc05hbihkb3VibGUg
ZCk7CmludCBpc0Zpbml0ZShkb3VibGUgZCk7CmludCBpc05vcm1hbChkb3VibGUgZCk7CgovKiBy
ZXR1cm5lZCBieSBjbGFzcyAqLwojZGVmaW5lIE5BTl9RVUlFVCAwCiNkZWZpbmUgTkFOX1NJR05B
TExJTkcgMQojZGVmaW5lIElORiAyCiNkZWZpbmUgWkVSTyAzCiNkZWZpbmUgTk9STUFMIDQKI2Rl
ZmluZSBTVUJOT1JNQUwgNQppbnQgY2xhc3MoZG91YmxlIGQpOwoKI2RlZmluZSBNTFRPTl9SZWFs
X01hdGhfcGkgTV9QSQojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9lIE1fRQojZGVmaW5lIE1MVE9O
X1JlYWxfTWF0aF9jb3MgY29zCiNkZWZpbmUgTUxUT05fUmVhbF9NYXRoX3NpbiBzaW4KI2RlZmlu
ZSBNTFRPTl9SZWFsX01hdGhfdGFuIHRhbgojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9jb3NoIGNv
c2gKI2RlZmluZSBNTFRPTl9SZWFsX01hdGhfc2luaCBzaW5oCiNkZWZpbmUgTUxUT05fUmVhbF9N
YXRoX3RhbmggdGFuaAojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9hY29zIGFjb3MKI2RlZmluZSBN
TFRPTl9SZWFsX01hdGhfYXNpbiBhc2luCiNkZWZpbmUgTUxUT05fUmVhbF9NYXRoX2F0YW4gYXRh
bgojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9hdGFuMiBhdGFuMgojZGVmaW5lIE1MVE9OX1JlYWxf
TWF0aF9sbiBsb2cKI2RlZmluZSBNTFRPTl9SZWFsX01hdGhfbG9nMTAgbG9nMTAKI2RlZmluZSBN
TFRPTl9SZWFsX01hdGhfcG93IHBvdwojZGVmaW5lIE1MVE9OX1JlYWxfTWF0aF9zcXJ0IHNxcnQK
I2RlZmluZSBNTFRPTl9SZWFsX01hdGhfZXhwIGV4cAojZGVmaW5lIE1MVE9OX1JlYWxfcG9zSW5m
IEhVR0VfVkFMCiNkZWZpbmUgTUxUT05fUmVhbF9hZGQoeCx5KSAoKHgpICsgKHkpKQojZGVmaW5l
IE1MVE9OX1JlYWxfc3ViKHgseSkgKCh4KSAtICh5KSkKI2RlZmluZSBNTFRPTl9SZWFsX211bCh4
LHkpICgoeCkgKiAoeSkpCiNkZWZpbmUgTUxUT05fUmVhbF9kaXYoeCx5KSAoKHgpIC8gKHkpKQoj
ZGVmaW5lIE1MVE9OX1JlYWxfbXVsYWRkKHgseSx6KSAoKHgpICogKHkpICsgKHopKQojZGVmaW5l
IE1MVE9OX1JlYWxfbXVsc3ViKHgseSx6KSAoKHgpICogKHkpIC0gKHopKQojZGVmaW5lIE1MVE9O
X1JlYWxfbmVnKHgpICgtKHgpKQojZGVmaW5lIE1MVE9OX1JlYWxfYWJzIGZhYnMKI2RlZmluZSBN
TFRPTl9SZWFsX2lzTmFuIGlzTmFuCiNkZWZpbmUgTUxUT05fUmVhbF9zaWduQml0IHNpZ25CaXQK
I2RlZmluZSBNTFRPTl9SZWFsX2NvcHlTaWduIGNvcHlTaWduCiNkZWZpbmUgTUxUT05fUmVhbF9n
dCh4MSx4MikgKCh4MSkgPiAoeDIpKQojZGVmaW5lIE1MVE9OX1JlYWxfZ2UoeDEseDIpICgoeDEp
ID49ICh4MikpCiNkZWZpbmUgTUxUT05fUmVhbF9sdCh4MSx4MikgKCh4MSkgPCAoeDIpKQojZGVm
aW5lIE1MVE9OX1JlYWxfbGUoeDEseDIpICgoeDEpIDw9ICh4MikpCiNkZWZpbmUgTUxUT05fUmVh
bF9lcXVhbCh4MSx4MikgKCh4MSkgPT0gKHgyKSkKI2RlZmluZSBNTFRPTl9SZWFsX25lcXVhbCh4
MSx4MikgKCh4MSkgIT0gKHgyKSkKI2RlZmluZSBNTFRPTl9SZWFsX3FlcXVhbCh4MSx4MikgKCEo
KHgxKSAhPSAoeDIpKQojZGVmaW5lIE1MVE9OX1JlYWxfaXNGaW5pdGUgaXNGaW5pdGUKI2RlZmlu
ZSBNTFRPTl9SZWFsX2lzTm9ybWFsIGlzTm9ybWFsCiNkZWZpbmUgTUxUT05fUmVhbF9mcmV4cCBm
cmV4cAojZGVmaW5lIE1MVE9OX1JlYWxfbGRleHAgbGRleHAKI2RlZmluZSBNTFRPTl9SZWFsX21v
ZGYgbW9kZgojZGVmaW5lIE1MVE9OX1JlYWxfY2xhc3MgY2xhc3MKI2RlZmluZSBNTFRPTl9SZWFs
X2Zyb21JbnQobikgKChkb3VibGUpKG4pKQojZGVmaW5lIE1MVE9OX1JlYWxfdG9JbnQoeCkgKChp
bnQpKHgpKQojZGVmaW5lIE1MVE9OX1JlYWxfcm91bmQgcm91bmQKCiNkZWZpbmUgTUxUT05fc3By
aW50ZihidWYsIGZtdCwgeCkgc3ByaW50ZihidWYsIChjaGFyKikgZm10LCB4KQoKLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAg
ICAgICAgICAgICAgIFBvaW50ZXJzICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxU
T05faXNOdWxsKHgpICh2b2lkKikoeCkgPT0gTlVMTAoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAg
TUx0b24gICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgp1aW50IE1MVE9OX01MdG9uX3JhbmRvbSgp
OwoKI2RlZmluZSBNTFRPTl9NTHRvbl9nY01lc3NhZ2VzKGIpCVwKCWdjU3RhdGUubWVzc2FnZXMg
PSBiCgojZGVmaW5lIE1MVE9OX01MdG9uX2djU3VtbWFyeShiKQlcCglnY1N0YXRlLnN1bW1hcnkg
PSBiCgojZGVmaW5lIE1MVE9OX01MdG9uX3NpemUoeikJCSgJCQkJXAoJZ2NTdGF0ZS5mcm9udGll
ciA9IGZyb250aWVyLAkJCQkJXAoJZ2NTdGF0ZS5zdGFja1RvcCA9IHN0YWNrVG9wLAkJCQkJXAoJ
c2l6ZVJlcyA9IEdDX3NpemUoJmdjU3RhdGUsICh6KSksCQkJCVwKCWZyb250aWVyID0gZ2NTdGF0
ZS5mcm9udGllciwJCQkJCVwKCXN0YWNrVG9wID0gZ2NTdGF0ZS5zdGFja1RvcCwJCQkJCVwKCXNp
emVSZXMpCgojZGVmaW5lIE1MVE9OX01MdG9uX3NhdmVXb3JsZChmaWxlKQkoCQkJCVwKCW1sdG9u
U3RhdGUuaXNPcmlnaW5hbCA/CQkJCQkJXAoJCSgJCQkJCQkJXAoJCQlnY1N0YXRlLmZyb250aWVy
ID0gZnJvbnRpZXIsCQkJXAoJCQlnY1N0YXRlLnN0YWNrVG9wID0gc3RhY2tUb3AsCQkJXAogCQkJ
R0Nfc2F2ZVdvcmxkKCZnY1N0YXRlLCBtbHRvblN0YXRlLm1hZ2ljLCAJXAoJCQkJCShmaWxlKSwg
JnNhdmVHbG9iYWxzKSwJCVwKCQkJZnJvbnRpZXIgPSBnY1N0YXRlLmZyb250aWVyLAkJCVwKCQkJ
c3RhY2tUb3AgPSBnY1N0YXRlLnN0YWNrVG9wLAkJCVwKCQkJbWx0b25TdGF0ZS5pc09yaWdpbmFs
ID0gVFJVRSwJCQlcCgkJCVRSVUUJCQkJCQlcCgkJKQkJCQkJCQlcCgk6CQkJCQkJCQlcCgkJKAkJ
CQkJCQlcCgkJCW1sdG9uU3RhdGUuaXNPcmlnaW5hbCA9IFRSVUUsCQkJXAoJCQlGQUxTRQkJCQkJ
CVwKCQkpCQkJCQkJCVwKCSkKCSAKI2RlZmluZSBNTFRPTl9NTHRvbl9zYXZlU3RhY2soKQkoCQkJ
CQlcCglnY1N0YXRlLmZyb250aWVyID0gZnJvbnRpZXIsCQkJCQlcCglnY1N0YXRlLnN0YWNrVG9w
ID0gc3RhY2tUb3AsCQkJCQlcCglzdGFja1JlcyA9IEdDX3NhdmVTdGFjaygmZ2NTdGF0ZSksCQkJ
CVwKCWZyb250aWVyID0gZ2NTdGF0ZS5mcm9udGllciwJCQkJCVwKCXN0YWNrVG9wID0gZ2NTdGF0
ZS5zdGFja1RvcCwJCQkJCVwKCXN0YWNrUmVzKQoKI2RlZmluZSBNTFRPTl9NTHRvbl9yZXN0b3Jl
U3RhY2socykJCQkJCVwKCWdjU3RhdGUuZnJvbnRpZXIgPSBmcm9udGllcjsJCQkJCVwKCWdjU3Rh
dGUuc3RhY2tUb3AgPSBzdGFja1RvcDsJCQkJCVwKCUdDX3Jlc3RvcmVTdGFjaygmZ2NTdGF0ZSwg
cyk7CQkJCQlcCglmcm9udGllciA9IGdjU3RhdGUuZnJvbnRpZXI7CQkJCQlcCglzdGFja1RvcCA9
IGdjU3RhdGUuc3RhY2tUb3A7CQkJCQlcCglNTFRPTl9yZXR1cm4KCi8qIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAg
ICAgICAgU3RyaW5nICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgppbnQgc3RyaW5nRXF1YWwoY2hh
ciAqIHMxLCBjaGFyICogczIpOwoKI2RlZmluZSBNTFRPTl9TdHJpbmdfZXF1YWwgc3RyaW5nRXF1
YWwKI2RlZmluZSBNTFRPTl9TdHJpbmdfc2l6ZSBHQ19hcnJheU51bUVsZW1lbnRzCgojZGVmaW5l
IE1MVE9OX2NzX3N1YihwLGkpICgoKGNoYXIqKShwKSlbaV0pCiNkZWZpbmUgTUxUT05fY3NfdXBk
YXRlKHAsaSx4KSAoKChjaGFyKikocCkpW2ldID0gKHgpKQojZGVmaW5lIE1MVE9OX2Nzc19zdWIo
cCxpKSAoKHVpbnQpKCgoY2hhcioqKShwKSlbaV0pKQojZGVmaW5lIE1MVE9OX2Nhc3RfY3MocCkg
KChjaGFyKikocCkpCiNkZWZpbmUgTUxUT05fY2FzdF9jc3MocCkgKChjaGFyKiopKHApKQoKLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAg
ICAgICAgICAgICAgICAgICAgICBTeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZp
bmUgTUxUT05fdG1wbmFtKHMpICgodWludCl0bXBuYW0oKGNoYXIqKShzKSkpCgovKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgIERhdGUgICAg
ICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoK
dm9pZCBNTFRPTl9ub3cocG9pbnRlciBzZWMsIHBvaW50ZXIgdXNlYyk7CgpleHRlcm4gc3RydWN0
IHRtIE1MVE9OX3RtOwoKI2RlZmluZSBNTFRPTl9hc2N0aW1lKHopICh1aW50KShhc2N0aW1lKChz
dHJ1Y3QgdG0qKSh6KSkpCiNkZWZpbmUgTUxUT05fbG9jYWx0aW1lKHQpICh1aW50KShsb2NhbHRp
bWUoKHRpbWVfdCopKHQpKSkKI2RlZmluZSBNTFRPTl9nbXRpbWUodCkgKHVpbnQpKGdtdGltZSgo
dGltZV90KikodCkpKQojZGVmaW5lIE1MVE9OX21rdGltZSh0KSBta3RpbWUoKHN0cnVjdCB0bSop
KHQpKQoKI2RlZmluZSBNTFRPTl9zdHJmdGltZShidWYsIG4sIGZtdCwgeikgc3RyZnRpbWUoKGNo
YXIqKShidWYpLCAobiksIChjaGFyKikoZm10KSwgKHN0cnVjdCB0bSopKHopKQoKaW50IE1MVE9O
X2xvY2Fsb2Zmc2V0KCk7CgojZGVmaW5lIE1MVE9OX3RtX3NlYyhwKSAoKChzdHJ1Y3QgdG0qKShw
KSktPnRtX3NlYykKI2RlZmluZSBNTFRPTl90bV9taW4ocCkgKCgoc3RydWN0IHRtKikocCkpLT50
bV9taW4pCiNkZWZpbmUgTUxUT05fdG1faG91cihwKSAoKChzdHJ1Y3QgdG0qKShwKSktPnRtX2hv
dXIpCiNkZWZpbmUgTUxUT05fdG1fbWRheShwKSAoKChzdHJ1Y3QgdG0qKShwKSktPnRtX21kYXkp
CiNkZWZpbmUgTUxUT05fdG1fbW9uKHApICgoKHN0cnVjdCB0bSopKHApKS0+dG1fbW9uKQojZGVm
aW5lIE1MVE9OX3RtX3llYXIocCkgKCgoc3RydWN0IHRtKikocCkpLT50bV95ZWFyKQojZGVmaW5l
IE1MVE9OX3RtX3dkYXkocCkgKCgoc3RydWN0IHRtKikocCkpLT50bV93ZGF5KQojZGVmaW5lIE1M
VE9OX3RtX3lkYXkocCkgKCgoc3RydWN0IHRtKikocCkpLT50bV95ZGF5KQojZGVmaW5lIE1MVE9O
X3RtX2lzZHN0KHApICgoKHN0cnVjdCB0bSopKHApKS0+dG1faXNkc3QpCgojZGVmaW5lIE1MVE9O
X3NldF90bV9zZWMocCx4KSAoKHN0cnVjdCB0bSopKHApKS0+dG1fc2VjID0gKHgpCiNkZWZpbmUg
TUxUT05fc2V0X3RtX21pbihwLHgpICgoc3RydWN0IHRtKikocCkpLT50bV9taW4gPSAoeCkKI2Rl
ZmluZSBNTFRPTl9zZXRfdG1faG91cihwLHgpICgoc3RydWN0IHRtKikocCkpLT50bV9ob3VyID0g
KHgpCiNkZWZpbmUgTUxUT05fc2V0X3RtX21kYXkocCx4KSAoKHN0cnVjdCB0bSopKHApKS0+dG1f
bWRheSA9ICh4KQojZGVmaW5lIE1MVE9OX3NldF90bV9tb24ocCx4KSAoKHN0cnVjdCB0bSopKHAp
KS0+dG1fbW9uID0gKHgpCiNkZWZpbmUgTUxUT05fc2V0X3RtX3llYXIocCx4KSAoKHN0cnVjdCB0
bSopKHApKS0+dG1feWVhciA9ICh4KQojZGVmaW5lIE1MVE9OX3NldF90bV93ZGF5KHAseCkgKChz
dHJ1Y3QgdG0qKShwKSktPnRtX3dkYXkgPSAoeCkKI2RlZmluZSBNTFRPTl9zZXRfdG1feWRheShw
LHgpICgoc3RydWN0IHRtKikocCkpLT50bV95ZGF5ID0gKHgpCiNkZWZpbmUgTUxUT05fc2V0X3Rt
X2lzZHN0KHAseCkgKChzdHJ1Y3QgdG0qKShwKSktPnRtX2lzZHN0ID0gKHgpCgovKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgIFRpbWUgICAg
ICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoK
ZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIE1MVE9OX3RpbWV2YWw7CiNkZWZpbmUgTUxUT05fdGltZXZh
bF9zZWMocCkgKChpbnQpKCgoc3RydWN0IHRpbWV2YWwqKShwKSktPnR2X3NlYykpCiNkZWZpbmUg
TUxUT05fdGltZXZhbF91c2VjKHApICgoaW50KSgoKHN0cnVjdCB0aW1ldmFsKikocCkpLT50dl91
c2VjKSkKI2RlZmluZSBNTFRPTl9nZXR0aW1lb2ZkYXkocCkgKChpbnQpKGdldHRpbWVvZmRheSgo
c3RydWN0IHRpbWV2YWwqKShwKSwgKHN0cnVjdCB0aW1lem9uZSopTlVMTCkpKQoKLyogLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAg
ICAgICAgICAgICAgICBWZWN0b3IgICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxU
T05fVmVjdG9yX2xlbmd0aCBHQ19hcnJheU51bUVsZW1lbnRzCiNkZWZpbmUgTUxUT05fVmVjdG9y
X2Zyb21BcnJheSBNTFRPTl9pZAoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgICAgV29yZCAgICAgICAg
ICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KCiNkZWZpbmUgTUxUT05fV29yZDhfdG9JbnQodykgKChpbnQpKHcp
KQojZGVmaW5lIE1MVE9OX1dvcmQ4X3RvSW50WCh4KSAoKGludCkoc2lnbmVkIGNoYXIpKHgpKQoj
ZGVmaW5lIE1MVE9OX1dvcmQ4X2Zyb21JbnQoeCkgKCh1Y2hhcikoeCkpCiNkZWZpbmUgTUxUT05f
V29yZDhfdG9MYXJnZVdvcmQodykgKCh1aW50KSh3KSkKI2RlZmluZSBNTFRPTl9Xb3JkOF90b0xh
cmdlV29yZFgoeCkgKCh1aW50KShzaWduZWQgY2hhcikoeCkpCiNkZWZpbmUgTUxUT05fV29yZDhf
ZnJvbUxhcmdlV29yZCh3KSAoKHVjaGFyKSh3KSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9vcmIodzEs
dzIpICgodzEpIHwgKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkOF94b3JiKHcxLHcyKSAoKHcxKSBe
ICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDhfYW5kYih3MSx3MikgKCh3MSkgJiAodzIpKQojZGVm
aW5lIE1MVE9OX1dvcmQ4X25vdGIodykgKH4odykpCiNkZWZpbmUgTUxUT05fV29yZDhfbHNoaWZ0
KHcscykgICgocykgPCA4ID8gKHcpIDw8IChzKSA6IDApCiNkZWZpbmUgTUxUT05fV29yZDhfcnNo
aWZ0KHcscykgKChzKSA8IDggPyAodykgPj4gKHMpIDogMCkKI2RlZmluZSBNTFRPTl9Xb3JkOF9h
ZGQodzEsdzIpICgodzEpICsgKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9zdWIodzEsdzIpICgo
dzEpIC0gKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9tdWwodzEsdzIpICgodzEpICogKHcyKSkK
I2RlZmluZSBNTFRPTl9Xb3JkOF9kaXYodzEsdzIpICgodzEpIC8gKHcyKSkKI2RlZmluZSBNTFRP
Tl9Xb3JkOF9tb2QodzEsdzIpICgodzEpICUgKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkOF9ndCh3
MSx3MikgKCh3MSkgPiAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X2dlKHcxLHcyKSAoKHcxKSA+
PSAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQ4X2x0KHcxLHcyKSAoKHcxKSA8ICh3MikpCiNkZWZp
bmUgTUxUT05fV29yZDhfbGUodzEsdzIpICgodzEpIDw9ICh3MikpCgojZGVmaW5lIE1MVE9OX1dv
cmQzMl90b0ludFgoeCkgKChpbnQpKHgpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9mcm9tSW50KHgp
ICgodWludCkoeCkpCiNkZWZpbmUgTUxUT05fV29yZDMyX29yYih3MSx3MikgKCh3MSkgfCAodzIp
KQojZGVmaW5lIE1MVE9OX1dvcmQzMl94b3JiKHcxLHcyKSAoKHcxKSBeICh3MikpCiNkZWZpbmUg
TUxUT05fV29yZDMyX2FuZGIodzEsdzIpICgodzEpICYgKHcyKSkKI2RlZmluZSBNTFRPTl9Xb3Jk
MzJfbm90Yih3KSAofih3KSkKI2RlZmluZSBNTFRPTl9Xb3JkMzJfbHNoaWZ0KHcscykgICgocykg
PCAzMiA/ICh3KSA8PCAocykgOiAwKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9yc2hpZnQodyxzKSAo
KHMpIDwgMzIgPyAodykgPj4gKHMpIDogMCkKI2RlZmluZSBNTFRPTl9Xb3JkMzJfYWRkKHcxLHcy
KSAoKHcxKSArICh3MikpCiNkZWZpbmUgTUxUT05fV29yZDMyX3N1Yih3MSx3MikgKCh3MSkgLSAo
dzIpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9tdWwodzEsdzIpICgodzEpICogKHcyKSkKI2RlZmlu
ZSBNTFRPTl9Xb3JkMzJfZGl2KHcxLHcyKSAoKHcxKSAvICh3MikpCiNkZWZpbmUgTUxUT05fV29y
ZDMyX21vZCh3MSx3MikgKCh3MSkgJSAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9ndCh3MSx3
MikgKCh3MSkgPiAodzIpKQojZGVmaW5lIE1MVE9OX1dvcmQzMl9nZSh3MSx3MikgKCh3MSkgPj0g
KHcyKSkKI2RlZmluZSBNTFRPTl9Xb3JkMzJfbHQodzEsdzIpICgodzEpIDwgKHcyKSkKI2RlZmlu
ZSBNTFRPTl9Xb3JkMzJfbGUodzEsdzIpICgodzEpIDw9ICh3MikpCgovKiBDYW4ndCB1c2UgYSBt
YWNybyB3aXRoID4+IGZvciB0aGVzZSBiZWNhdXNlIEFOU0kgQyBkb2Vzbid0IGd1YXJhbnRlZSAK
ICogc2lnbiBleHRlbnNpb24uCiAqCiAqICNkZWZpbmUgTUxUT05fV29yZDhfYXJzaGlmdCh3LHMp
ICgoc2lnbmVkIGNoYXIpKHcpID4+ICgocykgPCA4ID8gKHMpIDogNykpCiAqLwovKiBJJ3ZlIGlu
Y2x1ZGVkIHRoZSBtYWNybyBmb3IgV29yZDMyX2Fyc2hpZnQgZXZlbiB0aG91Z2ggaXQgaXNuJ3Qg
QU5TSSBhbmQKICogbWF5IGZhaWwgYmVjYXVzZSB1c2luZyBhIHByb2NlZHVyZSBjYWxsIHNsb3dz
IGRvd24gSW50SW5mIGJ5IGEgZmFjdG9yIG9mIDIuCiAqLwojZGVmaW5lIE1MVE9OX1dvcmQzMl9h
cnNoaWZ0KHcscykgKChpbnQpKHcpID4+ICgocykgPCAzMiA/IChzKSA6IDMxKSkKLyojZGVmaW5l
IE1MVE9OX1dvcmQzMl9hcnNoaWZ0IE1MVE9OX1dvcmQzMl9hcnNoaWZ0QXNtICovCnVpbnQgTUxU
T05fV29yZDMyX2Fyc2hpZnRBc20odWludCB3LCB1aW50IHMpOwoKdWNoYXIgTUxUT05fV29yZDhf
YXJzaGlmdCh1Y2hhciB3LCB1aW50IHMpOwoKI2VuZGlmIC8qICNpZm5kZWYgX01MVE9OX0xJQl9I
ICovCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAGluY2x1ZGUvbXktbGliLmgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAg
MTc1MCAAICAxNzUwIAAgICAgICAgMzYzMiAgNzAxMDE0NjA0MCAgMTIyMzYAIDAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAI2lmbmRlZiBfTVlfTElCX0gKI2RlZmluZSBfTVlfTElCX0gKCiNpbmNsdWRlIDxzdGRhcmcu
aD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8dW5pc3RkLmg+CiNpbmNsdWRlIDxzdGRp
by5oPgoKLyoKICogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9ucyBtYWtlIEMgbW9yZSBhbWVuYWJs
ZSB0byBhIHB1cmlzdC4KICovCiNkZWZpbmUJYm9vbAlpbnQJCQkvKiBib29sZWFuIHR5cGUgKi8K
I2RlZmluZQl1aW50CXVuc2lnbmVkIGludAkJLyogc2hvcnQgbmFtZXMgZm9yIHVuc2lnbmVkIHR5
cGVzICovCiNkZWZpbmUJdWxvbmcJdW5zaWduZWQgbG9uZwojZGVmaW5lCXVsbG9uZwl1bnNpZ25l
ZCBsb25nIGxvbmcJLyogR0NDIGV4dGVuc2lvbiAqLwojZGVmaW5lCWxsb25nCWxvbmcgbG9uZwkJ
LyogR0NDIGV4dGVuc2lvbiAqLwojZGVmaW5lCXVjaGFyCXVuc2lnbmVkIGNoYXIKI2RlZmluZQl1
c2hvcnQJdW5zaWduZWQgc2hvcnQgaW50CiNkZWZpbmUJbm90CSEJCQkvKiBsb2dpY2FsIG5lZ2F0
aW9uIG9wZXJhdG9yICovCiNkZWZpbmUJYW5kCSYmCQkJLyogbG9naWNhbCBjb25qdW5jdGlvbiAq
LwojZGVmaW5lCW9yCXx8CQkJLyogbG9naWNhbCBkaXNqdW5jdGlvbiAqLwojaWYgZGVmaW5lZChf
V0lOMzIpCi8vVFJVRSBhbmQgRkFMU0UgYXJlIFdpbmRvd3MgY29uc3RhbnRzIQojZWxzZQojZGVm
aW5lCVRSVUUJKDAgPT0gMCkKI2RlZmluZQlGQUxTRQkobm90IFRSVUUpCiNlbmRpZgojZGVmaW5l
CWxvb3AJd2hpbGUgKFRSVUUpCQkvKiBsb29wIHVudGlsIGJyZWFrICovCiNkZWZpbmUJRU9TCSdc
MCcJCQkvKiBlbmQtb2Ytc3RyaW5nIGNoYXIgKi8KI2lmbmRlZglOVUxMCiNkZWZpbmUJTlVMTAkw
CQkJLyogaW52YWxpZCBwb2ludGVyICovCiNlbmRpZgoKI2RlZmluZSBzdHJpbmcgY2hhcioKCiNk
ZWZpbmUJdW5sZXNzKHApCWlmIChub3QgKHApKQojZGVmaW5lCXVudGlsKHApCXdoaWxlIChub3Qg
KHApKQojZGVmaW5lCWNhcmRvZihhKQkoc2l6ZW9mKGEpIC8gc2l6ZW9mKCooYSkpKQojZGVmaW5l
CWVuZG9mKGEpCSgoYSkgKyBjYXJkb2YoYSkpCiNkZWZpbmUJYml0c29mKGEpCShzaXplb2YoYSkg
KiA4KQoKLyogaXNzdWUgZXJyb3IgbWVzc2FnZSBhbmQgZXhpdCAqLwpleHRlcm4gdm9pZAlkaWUo
Y2hhciAqZm10LCAuLi4pOwoKLyogYXNzZXJ0aW9uIGZhaWx1cmUgcm91dGluZSAqLwpleHRlcm4g
dm9pZCBhc2ZhaWwoY2hhciAqZmlsZSwgaW50IGxpbmUsIGNoYXIgKnByb3ApOwovKgogKiBBc3Nl
cnRpb24gdmVyaWZpZXIuCiAqLwojaWYgTk9ERUJVRwojZGVmaW5lCWFzc2VydChwKQkoKHZvaWQp
MCkKI2Vsc2UKI2RlZmluZQlhc3NlcnQocCkJKChwKSA/ICh2b2lkKTAgOiBhc2ZhaWwoX19GSUxF
X18sIF9fTElORV9fLCAjcCkpCiNlbmRpZgoKI2lmIGRlZmluZWQoX1dJTjMyKQppbnQgc29wZW4g
KGNoYXIqIHN6RmlsZU5hbWUsIGludCBuQWNjZXNzLCBpbnQgbkZsYWcsIC4uLik7CiNlbHNlCkZJ
TEUgKnNvcGVuKGNoYXIgKmZpbGVOYW1lLCBjaGFyICptb2RlKTsKI2VuZGlmCgovKiBzYWZlIHZl
cnNpb24gb2YgZndyaXRlICovCnZvaWQgc3dyaXRlKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIHNp
emVfdCBubWVtYiwgRklMRSAqZmlsZSk7CnZvaWQgc3dyaXRlVWludCh1aW50IG4sIEZJTEUgKmZp
bGUpOwoKLyogc2FmZSB2ZXJzaW9uIG9mIGZyZWFkICovCnZvaWQgc3JlYWQodm9pZCAqcHRyLCBz
aXplX3Qgc2l6ZSwgc2l6ZV90IG5tZW1iLCBGSUxFICpmaWxlKTsKdWludCBzcmVhZFVpbnQoRklM
RSAqZmlsZSk7CgovKiBSZXR1cm4gYSBzdGF0aWNhbGx5IGFsbG9jYXRlZCBjb21tYSBzZXBhcmF0
ZWQgc3RyaW5nICovCnN0cmluZyBpbnRUb0NvbW1hU3RyaW5nKGludCBuKTsKc3RyaW5nIHVpbnRU
b0NvbW1hU3RyaW5nKHVpbnQgbik7CnN0cmluZyB1bGxvbmdUb0NvbW1hU3RyaW5nKHVsbG9uZyBu
KTsKCiNlbmRpZgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

--------------5AE90B11C4A127D854CFF0E9
Content-Type: application/x-tar;
 name="src.tar"
Content-Transfer-Encoding: base64
Content-Disposition: inline;
 filename="src.tar"

c3JjLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA0MDc1NSAAICAxNzUw
IAAgIDE3NTAgACAgICAgICAgICAwICA3MDEwMTQ0NzU3ICAgNzc1NAAgNQAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABz
cmMvQ1ZTLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIDQwNzU1IAAgIDE3NTAg
ACAgMTc1MCAAICAgICAgICAgIDAgIDcwMTAxNDQ3NjEgIDEwNDAyACA1AAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNy
Yy9DVlMvUm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAA
ICAxNzUwIAAgICAgICAgICA2MiAgNzAxMDE0NDYxNyAgMTEzMDMAIDAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL3Vz
ci9sb2NhbC9yZXBvQ1ZTL0RvTm90VG91Y2hQZW5hbHR5RGVhdGgvY3ZzYW5vcQoAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzcmMv
Q1ZTL1JlcG9zaXRvcnkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgIDE3NTAgACAg
MTc1MCAAICAgICAgICAxNDMgIDcwMTAxNDQ2MTcgIDEyNTU3ACAwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC91c3Iv
bG9jYWwvcmVwb0NWUy9Eb05vdFRvdWNoUGVuYWx0eURlYXRoL2N2c2Fub3EvUHJvamVjdHMvSGFy
ZGNvcmVQcm9jZXNzaW5nL01MU0RML3NyY0MvTUxUb24vc3JjCgAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3JjL0NW
Uy9FbnRyaWVzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAxNzUwIAAgIDE3
NTAgACAgICAgICAgIDY3ICA3MDEwMTQ0NzYxICAxMTc3NgAgMAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvTWFrZWZp
bGUvMS4xL1dlZCBOb3YgIDMgMjM6NDc6NTIgMTk5OS8vCkQvcnVudGltZS8vLy8KAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNyYy9NYWtl
ZmlsZQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAAICAxNzUw
IAAgICAgICAgNzExMCAgNzAxMDE0NDY1MCAgMTE1MDAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALlBIT05ZOiBt
bHRvbgptbHRvbjogLi4vbGliL21sdG9uIC4uL2xpYi93b3JsZC5tbHRvbgoJQGVjaG8gJ1NldHRp
bmcgcm9vdCBwYXRoIGluIG1sdG9uIHNjcmlwdCcKCWlmIFsgLXIgLi4vYmluL21sdG9uIF07IHRo
ZW4JCQkJCVwKCQljZCAuLjsJCQkJCQkJXAoJCXNlZCAiL15yb290PS9zOycuKic7J2Bwd2RgJzsi
IDxiaW4vbWx0b24gPmJpbi9tbHRvbi50bXAgXAoJCQkmJiBtdiBiaW4vbWx0b24udG1wIGJpbi9t
bHRvbgkJCVwKCQkJJiYgY2htb2QgK3ggYmluL21sdG9uOwkJCQlcCglmaQoJQGVjaG8gJ0J1aWxk
IG9mIE1MdG9uIHN1Y2NlZWRlZCcKCi4uL2xpYi9tbHRvbjogbWx0b24ubyAuLi9saWIvbGlibWx0
b24uYSAuLi9saWIvbGliZ21wLmEKCUBlY2hvICdMaW5raW5nIG1sdG9uLm8nCgljZCAuLi9saWI7
CQkJCQkJCVwKCQlnY2MgLW8gbWx0b24gLi4vc3JjL21sdG9uLm8gbGlibWx0b24uYSBsaWJnbXAu
YSAtbG07CVwKCQlzdHJpcCBtbHRvbgoKbWx0b24ubzogbWx0b24uYwoJQGVjaG8gJ0NvbXBpbGlu
ZyBtbHRvbi5jICh0YWtlcyBhIHdoaWxlKScKCXRpbWUgZ2NjIC1JLi4vaW5jbHVkZSAtTzEJCQkJ
CVwKCQktZm9taXQtZnJhbWUtcG9pbnRlciAtZm5vLXN0cmVuZ3RoLXJlZHVjZSAtdyAtbTQ4Nglc
CgkJLW1hbGlnbi1sb29wcz0yIC1tYWxpZ24tanVtcHM9MiAtbWFsaWduLWZ1bmN0aW9ucz0yCVwK
CQktYyBtbHRvbi5jCgouLi9saWIvbGlibWx0b24uYSAuLi9saWIvbGlibWx0b24tZ2RiLmEgLi4v
bGliL2xpYmdtcC5hOgoJQGVjaG8gJ0NvbXBpbGluZyBNTHRvbiBydW50aW1lIHN5c3RlbScKCWNk
IHJ1bnRpbWU7ICQoTUFLRSkgdGFyZ2V0PXdpbjMyCgouLi9saWIvd29ybGQubWx0b246IC4uL2xp
Yi9tbHRvbgoJQGVjaG8gJ1Byb2Nlc3NpbmcgYmFzaXMgbGlicmFyeScKCWNkIC4uL2xpYjsgLi9t
bHRvbiAuLiB3b3JsZAoKTUxUT05fRkxBR1MJPSAtaW5saW5lIDE1IC1mbGF0dGVuIDEgLW5vLXBv
bHl2YXJpYW5jZQptbHRvbi5jOiBtbHRvbi5zbWwKCUBlY2hvICdDb21waWxpbmcgbWx0b24uc21s
IHRvIG1sdG9uLmMgKHRha2VzIGEgd2hpbGUpJwoJdGltZSAuLi9iaW4vbWx0b24gJChNTFRPTl9G
TEFHUykgLUMgbWx0b24uc21sCgptbHRvbi5zbWw6IG1sdG9uLmZpbGVzICQoc2hlbGwgY2F0IG1s
dG9uLmZpbGVzKQoJQGVjaG8gJ0NvbmNhdGVuYXRpbmcgU01MIGZpbGVzIHRvIG1ha2UgTUx0b24g
c291cmNlIGZpbGUnCgkoCQkJCQkJCQlcCgkJZWNobyAnc3RydWN0dXJlIFdvcmQzMSA9IFdvcmQg
c3RydWN0dXJlIEludDMxID0gSW50JzsJXAoJCWNhdCBtbHRvbi5maWxlcyB8IHhhcmdzIGNhdDsJ
CQkJXAoJCWVjaG8gJ3ZhbCBfID0gTWFpbi5leHBvcnRNTHRvbigpJwkJCVwKCSkgPm1sdG9uLnNt
bAoKIwojIFRoZSBmb2xsb3dpbmcgcmVxdWlyZXMgdGhhdCB5b3UgaGF2ZSBjbWNhdCBpbnN0YWxs
ZWQuCiMgTm8gb3RoZXIgdGFyZ2V0IGFjdHVhbGx5IGRlcGVuZHMgb24gZmlsZXMuICBZb3UgYXJl
IHJlc3BvbnNpYmxlIGZvciAKIyBtYW51YWxseSBjYWxsaW5nICdtYWtlIGZpbGVzJyBpZiB5b3Ug
Y2hhbmdlIHRoZSBjb21waWxlciBzb3VyY2VzCiMgZW5vdWdoIHNvIHRoYXQgdGhlIGNvbmNhdGVu
YXRpb24gb2YgdGhlIGZpbGVzIGluIG1sdG9uLmZpbGVzIGlzIG5vCiMgbG9uZ2VyIE1MdG9uLiAK
IwouUEhPTlk6IGZpbGVzCmZpbGVzOiAKCUBlY2hvICdVc2luZyBDTSB0byBidWlsZCBmaWxlIGxp
c3QnCgljbWNhdCAtZmlsZW5hbWUgc291cmNlcy5jbQkJCQkJXAoJCXwgc2VkICdzOy4qL3NyYy9c
KC4qXCk7XDE7JwkJCQlcCgkJfCBlZ3JlcCAtdiAnY29udHJvbC9tbHRvbicJCQkJXAoJCXwgZWdy
ZXAgLXYgJ25qLWJhc2lzL2ludC1pbmYnCQkJCVwKCQk+bWx0b24uZmlsZXMKCiMKIyBUZXN0IGJ5
IHJlY29tcGlsaW5nIE1MdG9uIGFuZCBjb21wYXJpbmcgdGhlIG5ldyBjIHRvIHRoZSBvbGQuCiMg
VGhlIGRpZmYgaGFzIGF0IG1vc3QgdHdlbHZlIGxpbmVzIGJlY2F1c2UgdGhlcmUgc2hvdWxkIGJl
IGF0IG1vc3QKIyB0aHJlZSBsaW5lcyBkaWZmZXJlbnQgaW4gdGhlIGZpbGVzIGFuZCBkaWZmIHBy
b2R1Y2VzIGZvdXIgbGluZXMgb2YKIyBvdXRwdXQgZm9yIGVhY2ggb2YgdGhlbS4gIFRoZSBkaWZm
ZXJlbnQgbGluZXMgYXJlOgojICAgdGhlIGlucHV0IGZpbGUKIyAgIHRoZSBkYXRlIG9mIGNvbXBp
bGF0aW9uCiMgICB0aGUgbWFnaWMgbnVtYmVyIHVzZWQgZm9yIHNhdmVXb3JsZAojCi5QSE9OWTog
dGVzdAp0ZXN0OgoJaWYgWyAhIC1yIG1sdG9uLmMgXTsgdGhlbgkJCQkJXAoJCSQoTUFLRSkgRzI7
CQkJCQkJXAoJZmkKCW12IG1sdG9uLmMgbWx0b24uYy5vcmlnaW5hbAoJQGVjaG8gJ1JlY3JlYXRp
bmcgbWx0b24uYyB3aXRoIE1MdG9uJwoJJChNQUtFKSBtbHRvbi5jCglpZiBbIDEyIC1nZSBgZGlm
ZiBtbHRvbi5jLm9yaWdpbmFsIG1sdG9uLmMgfCB3YyAtbGAgXTsgdGhlbglcCgkJZWNobyAnU3Vj
Y2Vzcyc7CQkJCQkJXAoJZWxzZQkJCQkJCQkJXAoJCWVjaG8gJ0ZhaWx1cmUnOwkJCQkJCVwKCQll
eGl0IDE7CQkJCQkJCVwKCWZpCgojCiMgVGhlIGZvbGxvd2luZyBwcm9maWxlcyBhIHNlbGYtY29t
cGlsZS4KIwouUEhPTlk6IHByb2ZpbGUKcHJvZmlsZToKCUBlY2hvICdDb21waWxpbmcgbWx0b24u
c21sICh0YWtlcyBhIHdoaWxlKScKCS4uL2Jpbi9tbHRvbiAtYyAkKE1MVE9OX0ZMQUdTKSAtcCBt
bHRvbi5zbWwKCS4uL2Jpbi9tbHRvbiAtcCBtbHRvbi5vCgltdiBtbHRvbiAuLi9saWIKCWNkIC4u
L2xpYjsgLi9tbHRvbiAuLiB3b3JsZAoJLi4vYmluL21sdG9uICQoTUxUT05fRkxBR1MpIC1vIG1s
dG9uLmMubm8tcHJvZiAtQyBtbHRvbi5zbWwKCWZvciBzd2l0Y2hlcyBpbiAtZDsJCQkJCQlcCglk
bwkJCQkJCQkJXAoJCWVjaG8gIm1scHJvZiB3aXRoICQkc3dpdGNoZXMiOwkJCQlcCgkJLi4vYmlu
L21scHJvZiAkJHN3aXRjaGVzIG1sdG9uLmMgLi4vbGliL21sdG9uIGdtb24ub3V0CVwKCQkJPi90
bXAvc2VsZi1jb21waWxlLnByb2YuJCRzd2l0Y2hlczsJCVwKCWRvbmUKCi5QSE9OWTogY2xlYW4K
Y2xlYW46CglybSAtZiBtbHRvbi5jIG1sdG9uLmMub3JpZ2luYWwgbWx0b24ubyBtbHRvbi5zbWwK
CWNkIHJ1bnRpbWU7ICQoTUFLRSkgY2xlYW4KCkcyOgoJQGVjaG8gJ01ha2luZyBHMScKCSQoTUFL
RSkgbWx0b24KCUBlY2hvICdNYWtpbmcgRzInCglybSAtZiBtbHRvbi5jCgkkKE1BS0UpIG1sdG9u
LmMKCiMKIyBUaGUgZm9sbG93aW5nIHJlYnVpbGRzIHRoZSBoZWFwIGZpbGUgZm9yIHRoZSBTTUwv
TkogY29tcGlsZWQgdmVyc2lvbgojIG9mIE1MdG9uLiAKIyBJdCByZXF1aXJlcyB0aGF0IHlvdSBo
YXZlIFNNTC9OSiB3aXRoIHRoZSBDb21waWxhdGlvbgojIE1hbmFnZXIgKENNKSBpbnN0YWxsZWQu
ICBZb3UgbWF5IG5lZWQgdG8gcmVwbGFjZSB0aGUgZm9sbG93aW5nIHdpdGgKIyAnc21sLWNtJy4K
IwpTTUwJPSBzbWwKCi5QSE9OWTogbmotbWx0b24KbmotbWx0b246CgkoCQkJCQkJCQlcCgkJZWNo
byAnU01Mb2ZOSi5JbnRlcm5hbHMuR0MubWVzc2FnZXMgZmFsc2U7JzsJCVwKCQllY2hvICdDTS5t
YWtlKCk7JzsJCQkJCVwKCQllY2hvICdNYWluLmV4cG9ydE5KKERpci5mcm9tU3RyaW5nICIuLiIs
CQlcCgkJCUZpbGUuZnJvbVN0cmluZyAiLi4vbGliL21sdG9uIik7JwkJXAoJKSB8ICQoU01MKQoA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNyYy9ydW50aW1lLwAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgNDA3NTUgACAgMTc1MCAAICAxNzUwIAAgICAgICAg
ICAgMCAgNzAxMDE0NTE1NSAgMTE0MzAAIDUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFub3EA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3JjL3J1bnRpbWUvQ1ZTLwAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACA0MDc1NSAAICAxNzUwIAAgIDE3NTAgACAgICAgICAg
ICAwICA3MDEwMTQ1MTYzICAxMjA2MgAgNQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYW5vcQAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzcmMvcnVudGltZS9DVlMvUm9v
dAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgIDE3NTAgACAgMTc1MCAAICAgICAgICAg
NjIgIDcwMTAxNDQ3NjEgIDEyNzY2ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhbm9xAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC91c3IvbG9jYWwvcmVwb0NWUy9E
b05vdFRvdWNoUGVuYWx0eURlYXRoL2N2c2Fub3EKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAc3JjL3J1bnRpbWUvQ1ZTL1JlcG9z
aXRvcnkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAxNzUwIAAgIDE3NTAgACAgICAgICAgMTUz
ICA3MDEwMTQ0NzYxICAxNDI0MwAgMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAB1c3RhciAgAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYW5vcQAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvdXNyL2xvY2FsL3JlcG9DVlMvRG9O
b3RUb3VjaFBlbmFsdHlEZWF0aC9jdnNhbm9xL1Byb2plY3RzL0hhcmRjb3JlUHJvY2Vzc2luZy9N
TFNETC9zcmNDL01MVG9uL3NyYy9ydW50aW1lCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNyYy9ydW50aW1lL0NWUy9FbnRyaWVz
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAAICAxNzUwIAAgICAgICAgIDI1MiAg
NzAxMDE0NTE2MyAgMTM0NzIAIDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGFub3EAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL2djLmMvMS4xL1dlZCBOb3YgIDMgMjM6
NDk6MjAgMTk5OS8vCi9tbHRvbi1saWIuYy8xLjEvV2VkIE5vdiAgMyAyMzo0OTozMCAxOTk5Ly8K
L21sdG9uLXBvc2l4LmMvMS4xL1dlZCBOb3YgIDMgMjM6NDk6MzUgMTk5OS8vCi9NYWtlZmlsZS8x
LjEvV2VkIE5vdiAgMyAyMzo1MTowOSAxOTk5Ly8KRAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzcmMvcnVudGltZS9nYy5jAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAMTAwNjQ0IAAgIDE3NTAgACAgMTc1MCAAICAgICAxMDAyNjEgIDcw
MTAxNDUwMDAgIDEyMzA3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAHVzdGFyICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhbm9xAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5
IE5FQyBSZXNlYXJjaCBJbnN0aXR1dGUuCiAqIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBm
b3IgbGljZW5zZSBpbmZvcm1hdGlvbi4KICovCgojaW5jbHVkZSAiZ2MuaCIKCiNpZiBkZWZpbmVk
KF9XSU4zMikKI2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN5cy90aW1lYi5oPgoKI2Rl
ZmluZSBwYWdlc2l6ZSA0MDk2IC8vRklYTUU6IEkgZ3Vlc3MgdGhpcyBpcyBjb3JyZWN0IGZvciBu
b3csIGJ1dCB1Z2x5Li4uCgojZWxzZQojaW5jbHVkZSA8c3lzL21tYW4uaD4KI2luY2x1ZGUgPHN5
cy9yZXNvdXJjZS5oPgojZW5kaWYKCiNpbmNsdWRlIDxmY250bC5oPgojaW5jbHVkZSA8c3RyaW5n
Lmg+CiNpbmNsdWRlIDx2YWx1ZXMuaD4KCiNkZWZpbmUgR0NfRElTUExBWV9IRUFQIEZBTFNFCiNk
ZWZpbmUgR0NfREVCVUcgRkFMU0UKI2RlZmluZSBHQ19ERUJVR19BTExPQyBGQUxTRQojZGVmaW5l
IFNUUklOR19IRUFERVIgR0NfYXJyYXlIZWFkZXIoMSwgMCkKI2RlZmluZSBGT1JXQVJERUQgMHhG
RkZGRkZGRgojZGVmaW5lIE5VTV9QT0lOVEVSU19NQVNLIDB4MDAwMEZGRkYKI2RlZmluZSBJU19O
T1JNQUxfTUFTSyAweDgwMDAKI2RlZmluZSBOVU1fTk9OX1BPSU5URVJTX01BU0sgMHg3RkZGCgov
KiBDb250aW51YXRpb24gb2JqZWN0cyBhcmUgbGF5ZWQgb3V0IGFzIGZvbGxvd3MuCiAqIDEgd29y
ZCBoZWFkZXIgKENPTlRfSEVBREVSKQogKiAxIHVpbnQgc2l6ZQogKiAxIHVpbnQgZXhuU3RhY2sK
ICogc2l6ZSB3b3JkcyBvZiBzdGFjayBkYXRhCiAqLwojZGVmaW5lIENPTlRfSEVBREVSIDB4N0ZG
RkZGRkYKCiNkZWZpbmUgdG9CeXRlcyhuKSAoKG4pIDw8IDIpCgp0eXBlZGVmIHZvaWQgKCpwb2lu
dGVyRnVuKShHQ19zdGF0ZSAqcywgcG9pbnRlciAqcCk7CgojaWYgZGVmaW5lZChfV0lOMzIpCi8v
IFRoZXNlIHNlZW1zIHRvIGJlIGRlZmluZWQgYWxyZWFkeS4uLgovLyAjZGVmaW5lIG1pbih4LCB5
KSAoKCh1aW50KXggPCAodWludCl5KSA/ICh1aW50KXggOiAodWludCl5KQovLyAjZGVmaW5lIG1h
eCh4LCB5KSAoKCh1aW50KXggPiAodWludCl5KSA/ICh1aW50KXggOiAodWludCl5KQojZWxzZQpz
dGF0aWMgaW5saW5lIHVpbnQgbWluKHVpbnQgeCwgdWludCB5KSB7CglyZXR1cm4gKCh4IDwgeSkg
PyB4IDogeSk7Cn0KCnN0YXRpYyBpbmxpbmUgdWludCBtYXgodWludCB4LCB1aW50IHkpIHsKCXJl
dHVybiAoKHggPiB5KSA/IHggOiB5KTsKfQojZW5kaWYKCnN0YXRpYyB1c2hvcnQgZW1wdHlfR0Nf
b2Zmc2V0c1tdID0geyAwIH07CgpzdGF0aWMgdm9pZCBub0xvY2FscyhHQ19zdGF0ZSAqcykgewoJ
cy0+Ynl0ZXNSZXF1ZXN0ZWQgPSAwOwoJcy0+bG9jYWxPZmZzZXRzID0gZW1wdHlfR0Nfb2Zmc2V0
czsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwovKiAgICAgICAgICAgICAgIFNhZmUgbW1hcCBhbmQgbXVubWFwICAgICAgICAgICAgICAg
ICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KCiNpZiBkZWZpbmVkKF9XSU4zMikKLy8gVGhpcyBpcyBmcm9tIHRoZSBTTUwvTkogc291cmNl
Li4uCgp2b2lkICphbGxvY192bWVtKGludCBuYikKewogIHZvaWQgKnA7CiAgCiAgcCA9ICh2b2lk
ICopIFZpcnR1YWxBbGxvYyhOVUxMLAogICAgCQkJICAgIG5iLAogICAgCQkJICAgIE1FTV9DT01N
SVR8TUVNX1JFU0VSVkUsCiAgICAJCQkgICAgUEFHRV9FWEVDVVRFX1JFQURXUklURSk7CiAgaWYg
KHAgPT0gTlVMTCkgewogICAgIGRpZSgiVmlydHVhbEFsbG9jIGZhaWxlZCBvbiByZXF1ZXN0IG9m
IHNpemUgJWx4XG4iLCBuYik7CiAgfQogIHJldHVybiBwOwp9CiAgICAJCQkgICAgCQkJICAgIAkJ
CSAgICAgICAgICAgICAgCi8qIGZyZWVfdm1lbToKICogUmV0dXJuICBtZW1vcnkgdG8gT1MuCiov
CnZvaWQgZnJlZV92bWVtICh2b2lkICpwKQp7CiAgaWYgKCFWaXJ0dWFsRnJlZSgoTFBWT0lEKXAs
CiAgICAgICAgICAgICAgICAgICAwLAogICAgCSAgICAgICAgICAgTUVNX1JFTEVBU0UpKSB7CiAg
ICAgZGllKCJ1bmFibGUgdG8gVmlydHVhbEZyZWUgbWVtb3J5IGF0ICVseFxuIiwgcCk7CiAgfQp9
CiNlbmRpZgoKc3RhdGljIHZvaWQgKnNtbWFwKHNpemVfdCBsZW5ndGgpIHsKCXZvaWQgKnJlc3Vs
dDsKCQojaWYgZGVmaW5lZChfV0lOMzIpCiAgICAgICAgcmVzdWx0ID0gYWxsb2Nfdm1lbShsZW5n
dGgpOwojZWxzZQkKCXJlc3VsdCA9IG1tYXAoTlVMTCwgbGVuZ3RoLCBQUk9UX1JFQUQgfCBQUk9U
X1dSSVRFLCAKCQkJTUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwgLTEsIDApOwojZW5kaWYKCQoJaWYg
KHJlc3VsdCA9PSAodm9pZCopLTEpIGRpZSgibW1hcCBmYWlsZWQiKTsKCQoJcmV0dXJuIHJlc3Vs
dDsKfQoKc3RhdGljIHZvaWQgc211bm1hcChwb2ludGVyIGJhc2UsIHNpemVfdCBsZW5ndGgpIHsK
CWlmICgwID09IGxlbmd0aCkKCQlyZXR1cm47CiNpZiBkZWZpbmVkKF9XSU4zMikKCWZyZWVfdm1l
bShiYXNlKTsKI2Vsc2UKCWlmICgwICE9IG11bm1hcChiYXNlLCBsZW5ndGgpKQoJCWRpZSgibXVu
bWFwIGZhaWxlZCIpOwojZW5kaWYKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICBmcm9tU3BhY2UsIHRvU3Bh
Y2UgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gKi8KCnN0YXRpYyBpbmxpbmUgdm9pZCBzZXRMaW1pdChHQ19zdGF0
ZSAqcykgewoJcy0+bGltaXQgPSBzLT5iYXNlICsgcy0+ZnJvbVNpemU7Cn0KCnN0YXRpYyB2b2lk
IGZyb21TcGFjZShHQ19zdGF0ZSAqcykgewoJcy0+YmFzZSA9IHNtbWFwKHMtPmZyb21TaXplKTsK
CWlmIChzLT5mcm9tU2l6ZSA+IHMtPm1heEhlYXBTaXplU2VlbikKCQlzLT5tYXhIZWFwU2l6ZVNl
ZW4gPSBzLT5mcm9tU2l6ZTsKCXNldExpbWl0KHMpOwp9CgpzdGF0aWMgdm9pZCB0b1NwYWNlKEdD
X3N0YXRlICpzKSB7CglzLT50b0Jhc2UgPSBzbW1hcChzLT50b1NpemUpOwoJaWYgKHMtPnRvU2l6
ZSA+IHMtPm1heEhlYXBTaXplU2VlbikKCQlzLT5tYXhIZWFwU2l6ZVNlZW4gPSBzLT50b1NpemU7
Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KLyogICAgICAgICAgICAgICAgICAgIGN1cnJlbnRUaW1lICAgICAgICAgICAgICAgICAgICAq
LwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CgovKiByZXR1cm4gdGltZSBhcyBudW1iZXIgb2YgbWlsbGlzZWNvbmRzICovCnN0YXRpYyB1aW50
IGN1cnJlbnRUaW1lKCkgewoJdWludCByZXN1bHQ7CgkKI2lmIGRlZmluZWQoX1dJTjMyKQoJcmVz
dWx0ID0gR2V0VGlja0NvdW50KCk7CiNlbHNlCglzdHJ1Y3QgcnVzYWdlIHJ1OwoJZ2V0cnVzYWdl
KFJVU0FHRV9TRUxGLCAmcnUpOwoJCglyZXN1bHQgPSAwOwoJcmVzdWx0ICs9IDEwMDAgKiBydS5y
dV91dGltZS50dl9zZWM7CglyZXN1bHQgKz0gMTAwMCAqIHJ1LnJ1X3N0aW1lLnR2X3NlYzsKCXJl
c3VsdCArPSBydS5ydV91dGltZS50dl91c2VjIC8gMTAwMDsKCXJlc3VsdCArPSBydS5ydV9zdGlt
ZS50dl91c2VjIC8gMTAwMDsKI2VuZGlmCgoJcmV0dXJuIHJlc3VsdDsKfQoKLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAg
ICAgICAgICAgIHJvdW5kUGFnZSAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qCiAqIFJvdW5kIHNp
emUgdXAgdG8gYSBtdWx0aXBsZSBvZiB0aGUgc2l6ZSBvZiBhIHBhZ2UuCiAqLwpzaXplX3Qgcm91
bmRQYWdlKHNpemVfdCBzaXplKQp7CglzdGF0aWMgc2l6ZV90CXBzaXplOwoKI2lmIGRlZmluZWQo
X1dJTjMyKQoJcHNpemUgPSBwYWdlc2l6ZTsvL0ZJWE1FOiBJIGd1ZXNzIHRoaXMgaXMgY29ycmVj
dCBmb3Igbm93LCBidXQgbm90IG5pY2UuLi4KI2Vsc2UKCXBzaXplID0gZ2V0cGFnZXNpemUoKTsK
I2VuZGlmCglzaXplICs9IHBzaXplIC0gMTsKCXNpemUgLT0gc2l6ZSAlIHBzaXplOwoJcmV0dXJu
IChzaXplKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgIGNvbXB1dGVIZWFwU2l6ZSAgICAgICAgICAg
ICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KCi8qIHJldHVybnMgbWluKHMtPm1heEhlYXBTaXplLCBsaXZlICogcmF0aW8pLgog
KiBJdCBpcyBjYXJlZnVsIG5vdCB0byBvdmVyZmxvdyB3aGVuIGRvaW5nIHRoZSBtdWx0aXBseS4K
ICogSXQgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIHdoZW4gbm90IHMtPnVzZUZpeGVkSGVhcCwgc2lu
Y2Ugcy0+bWF4SGVhcFNpemUgaXMKICogb25seSBzZXQgaW4gdGhhdCBjYXNlLgogKi8Kc3RhdGlj
IHVpbnQgY29tcHV0ZUhlYXBTaXplKEdDX3N0YXRlICpzLCB1aW50IGxpdmUsIHVpbnQgcmF0aW8p
IHsKCXVsbG9uZyBuZWVkZWQ7CgoJYXNzZXJ0KG5vdCBzLT51c2VGaXhlZEhlYXApOwoKCW5lZWRl
ZCA9ICgodWxsb25nKWxpdmUpICogcmF0aW87CglyZXR1cm4gKChuZWVkZWQgPiBzLT5tYXhIZWFw
U2l6ZSkKCQk/IHMtPm1heEhlYXBTaXplCgkJOiByb3VuZFBhZ2UobmVlZGVkKSk7Cn0KCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAg
ICAgICAgICAgICBleHRyYWN0QXJyYXlOdW1CeXRlcyAgICAgICAgICAgICAgICAqLwovKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBUaGUg
bnVtYmVyIG9mIGJ5dGVzIGluIGFuIGFycmF5LCBub3QgaW5jbHVkaW5nIHRoZSBoZWFkZXIuICov
CnN0YXRpYyBpbmxpbmUgdWludCBleHRyYWN0QXJyYXlOdW1CeXRlcyhwb2ludGVyIHAsIAoJCQkJ
CSB1aW50IG51bVBvaW50ZXJzLAoJCQkJCSB1aW50IG51bU5vblBvaW50ZXJzKSB7Cgl1aW50IG51
bUVsZW1lbnRzLCBieXRlc1BlckVsZW1lbnQsIHJlc3VsdDsKCQoJbnVtRWxlbWVudHMgPSBHQ19h
cnJheU51bUVsZW1lbnRzKHApOwoJYnl0ZXNQZXJFbGVtZW50ID0gbnVtTm9uUG9pbnRlcnMgKyB0
b0J5dGVzKG51bVBvaW50ZXJzKTsKCXJlc3VsdCA9IHdvcmRBbGlnbihudW1FbGVtZW50cyAqIGJ5
dGVzUGVyRWxlbWVudCk7CgkKCXJldHVybiByZXN1bHQ7Cn0KCi8qIFdBUk5JTkc6CiAqIGZvcmVh
Y2hHbG9iYWwsIGZvcmVhY2hMb2NhbCwgZm9yZWFjaFBvaW50ZXJJblN0YWNrLCBmb3JlYWNoUG9p
bnRlckluSGVhcAogKiBtYXkgYXBwbHkgdGhlaXIgYXJndW1lbnQgZnVuY3Rpb24gZiB0byB2YWx1
ZXMgdGhhdCBhcmUgbm90IHBvaW50ZXJzLiAgVGhlc2UKICogdmFsdWVzIHdpbGwgYWx3YXlzIGJl
IG5vbnplcm8gbW9kIDQsIGFuZCBzaG91bGQgYmUgZmlyc3QgY2hlY2tlZCBieSBmIHVzaW5nIAog
KiBHQ19pc1BvaW50ZXIuCiAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgIGZvcmVhY2hHbG9iYWwgICAg
ICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwoKLyogQXBwbHkgZiB0byBlYWNoIGdsb2JhbCBwb2ludGVyIGludG8g
dGhlIGhlYXAuICovCnN0YXRpYyB2b2lkIGZvcmVhY2hHbG9iYWwoR0Nfc3RhdGUgKnMsIHBvaW50
ZXJGdW4gZikgewoJaW50IGk7CgogCWZvciAoaSA9IDAgOyBpIDwgcy0+bnVtR2xvYmFscyA7ICsr
aSkKCSAgICAgICAJZihzLCAmKHMtPmdsb2JhbHNbaV0pKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAg
ICBmb3JlYWNoTG9jYWwgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qIEFwcGx5IGYgdG8gZWFjaCBs
b2NhbCBwb2ludGVyIGludG8gdGhlIGhlYXAuICovCnN0YXRpYyB2b2lkIGZvcmVhY2hMb2NhbChH
Q19zdGF0ZSAqcywgcG9pbnRlckZ1biBmKSB7CglpbnQgaTsKCglmb3IgKGkgPSAwIDsgaSA8IHMt
PmxvY2FsT2Zmc2V0c1swXSA7ICsraSkKCQlmKHMsICYocy0+bG9jYWxzW3MtPmxvY2FsT2Zmc2V0
c1tpICsgMV1dKSk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICBmb3JlYWNoUG9pbnRlckluU3RhY2sgICAg
ICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCgovKiBBcHBseSBmIHRvIGVhY2ggcG9pbnRlciBmcm9tIHRoZSBzdGFjayB0
byB0aGUgaGVhcC4gKi8Kc3RhdGljIHZvaWQgZm9yZWFjaFBvaW50ZXJJblN0YWNrR2VuKEdDX3N0
YXRlICpzLCBwb2ludGVyIGJvdHRvbSwgcG9pbnRlciB0b3AsCgkJCQkJcG9pbnRlckZ1biBmKSB7
CglpbnQgaTsKCgl3aGlsZSAodG9wID49IGJvdHRvbSkgewoJCS8qIGludjogdG9wIHBvaW50cyBh
dCBhIGZyYW1lIGluZGV4ICovCgkJdWludCBmcmFtZUluZGV4OwoJCUdDX2ZyYW1lTGF5b3V0ICps
YXlvdXQ7CgkJR0Nfb2Zmc2V0cyBmcmFtZU9mZnNldHM7CgoJCWZyYW1lSW5kZXggPSAqKHVpbnQq
KSB0b3A7CiNpZiBHQ19ERUJVRwoJCWZwcmludGYoc3RkZXJyLCAiZnJhbWUgaW5kZXggJWQuXG4i
LCBmcmFtZUluZGV4KTsKI2VuZGlmCgkJYXNzZXJ0KGZyYW1lSW5kZXggPCBzLT5tYXhGcmFtZUlu
ZGV4KTsKCQlsYXlvdXQgPSAmKHMtPmZyYW1lTGF5b3V0c1tmcmFtZUluZGV4XSk7CgkJZnJhbWVP
ZmZzZXRzID0gbGF5b3V0LT5vZmZzZXRzOwoJCXRvcCAtPSBsYXlvdXQtPm51bUJ5dGVzOwoKCQlm
b3IgKGkgPSAwIDsgaSA8IGZyYW1lT2Zmc2V0c1swXSA7ICsraSkgewojaWYgR0NfREVCVUcKCQkJ
ZnByaW50ZihzdGRlcnIsICJmcmFtZSBvZmZzZXQgJWQuXG4iLCBmcmFtZU9mZnNldHNbaSArIDFd
KTsKI2VuZGlmCgkJCWYocywgKHBvaW50ZXIqKSh0b3AgKyBmcmFtZU9mZnNldHNbaSArIDFdKSk7
CgkJfQoJfQoKCWFzc2VydCh0b3AgPT0gYm90dG9tIC0gV09SRF9TSVpFKTsKfQoKc3RhdGljIHZv
aWQgZm9yZWFjaFBvaW50ZXJJblN0YWNrKEdDX3N0YXRlICpzLCBwb2ludGVyRnVuIGYpIHsKCWZv
cmVhY2hQb2ludGVySW5TdGFja0dlbihzLCBzLT5zdGFja0JvdHRvbSwgcy0+c3RhY2tUb3AsIGYp
Owp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCi8qICAgICAgICAgICAgICAgZm9yZWFjaFBvaW50ZXJJbkhlYXAgICAgICAgICAgICAgICAg
Ki8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwoKLyogQXBwbHkgZiB0byBlYWNoIHBvaW50ZXIgYmV0d2VlbiBzLT5mcm9udCBhbmQgcy0+YmFj
aywgd2hpY2ggc2hvdWxkIGJlIGEgCiAqIGNvbnRpZ3VvdXMgc2VxdWVuY2Ugb2Ygb2JqZWN0cywg
d2hlcmUgcy0+ZnJvbnQgcG9pbnRzIGF0IGEgaGVhZGVyIHdvcmQgCiAqIGFuZCBzLT5iYWNrIHBv
aW50cyBqdXN0IHBhc3QgdGhlIGVuZCBvZiB0aGUgbGFzdCBvYmplY3QuCiAqIGYgbWF5IGluY3Jl
YXNlIHMtPmJhY2sgKGZvciBleGFtcGxlLCB0aGlzIGlzIGRvbmUgYnkgZm9yd2FyZCkuCiAqLwpz
dGF0aWMgdm9pZCBmb3JlYWNoUG9pbnRlckluSGVhcChHQ19zdGF0ZSAqcywgcG9pbnRlckZ1biBm
KSB7Cglwb2ludGVyIGZyb250OwoKCWZyb250ID0gcy0+ZnJvbnQ7CgogCXdoaWxlIChmcm9udCA8
IHMtPmJhY2spIHsKCQkvKiBJbnZhcmlhbnQ6IGZyb250IGFsd2F5cyBwb2ludHMgYXQgdGhlIG5l
eHQgaGVhZGVyIHdvcmQuICovCgkJd29yZCBoZWFkZXI7CgkJdWludCBudW1Qb2ludGVyczsKCQl1
aW50IG51bU5vblBvaW50ZXJzOwoJCWJvb2wgaXNBcnJheSA9IEZBTFNFOwoJCQoJCWhlYWRlciA9
ICood29yZCopZnJvbnQ7CgoJCWZyb250ICs9IFdPUkRfU0laRTsKCQkKCQlpZiAobm90IChoZWFk
ZXIgJiBISUdIX0JJVCkpIHsgCgkJCWlzQXJyYXkgPSBUUlVFOwoJCQlpZiAoQ09OVF9IRUFERVIg
IT0gaGVhZGVyKSB7CgkJCQkvKiBMb29raW5nIGF0IGFuIGFycmF5LCB0aGUgaGVhZGVyIGlzIGhl
cmUuICovCgkJCQloZWFkZXIgPSAqKHdvcmQqKWZyb250OwoJCQkJZnJvbnQgKz0gV09SRF9TSVpF
OwoJCQl9CgkJfSAKCgkJLyogZnJvbnQgcG9pbnRzIGF0IGJlZ2lubmluZyBvZiBvYmplY3QgZGF0
YSAqLwogICAgCgkJLyogZXh0cmFjdCBoZWFkZXIgY29tcG9uZW50cyAqLwoJCW51bVBvaW50ZXJz
ID0gaGVhZGVyICYgTlVNX1BPSU5URVJTX01BU0s7CgkJbnVtTm9uUG9pbnRlcnMgPSAKCQkJKGhl
YWRlciA+PiBOT05fUE9JTlRFUlNfU0hJRlQpICYgTlVNX05PTl9QT0lOVEVSU19NQVNLOwoKCQlp
ZiAoaXNBcnJheSkgewoJCQlpZiAoQ09OVF9IRUFERVIgPT0gaGVhZGVyKSB7IC8qIEl0J3MgYSBj
b250aW51YXRpb24uICovCgkJCQl1aW50IHNpemU7CgkJCQkKCQkJCXNpemUgPSAqKHVpbnQqKWZy
b250OwoJCQkJZnJvbnQgKz0gMiAqIFdPUkRfU0laRTsKCQkJCWZvcmVhY2hQb2ludGVySW5TdGFj
a0dlbgoJCQkJCShzLCBmcm9udCwgZnJvbnQgKyBzaXplIC0gV09SRF9TSVpFLCBmKTsKCQkJCWZy
b250ICs9IHNpemU7CgkJCX0gZWxzZSB7IC8qIEl0J3MgcmVhbGx5IGFuIGFycmF5ICovCgkJCQl1
aW50IG51bUJ5dGVzOwoKCQkJCW51bUJ5dGVzID0gZXh0cmFjdEFycmF5TnVtQnl0ZXMoZnJvbnQs
IG51bVBvaW50ZXJzLCBudW1Ob25Qb2ludGVycyk7CgoJCQkJaWYgKG51bUJ5dGVzID09IDApIHsg
CgkJCQkJLyogQW4gZW1wdHkgYXJyYXkgLS0gc2tpcCB0aGUgUE9JTlRFUl9TSVpFIGJ5dGVzCgkJ
CQkJICogZm9yIHRoZSBmb3J3YXJkaW5nIHBvaW50ZXIuCgkJCQkJICovCgkJCQkJZnJvbnQgKz0g
UE9JTlRFUl9TSVpFOwoJCQkJfSBlbHNlIHsKCQkJCQlwb2ludGVyIG1heDsKCQoJCQkJCW1heCA9
IGZyb250ICsgbnVtQnl0ZXM7CgkJCgkJCQkJaWYgKG51bVBvaW50ZXJzID09IDApIHsKCQkJCQkv
KiBUaGVyZSBhcmUgbm8gcG9pbnRlcnMsIGp1c3QgdXBkYXRlIHRoZSBmcm9udAoJCQkJCSAqIG9m
IHRoZSBxdWV1ZS4KCQkJCQkgKi8KCQkJCQkJZnJvbnQgPSBtYXg7CgkJCQkJfSBlbHNlIGlmIChu
dW1Ob25Qb2ludGVycyA9PSAwKSB7IAoJCQkJCSAgCS8qIEl0J3MgYW4gYXJyYXkgd2l0aCBvbmx5
IHBvaW50ZXJzLiAqLwoJCQkJCQlmb3IgKDsgZnJvbnQgPCBtYXg7IGZyb250ICs9IFBPSU5URVJf
U0laRSkKCQkJCQkJCWYocywgKHBvaW50ZXIqKWZyb250KTsKCQkJCQl9IGVsc2UgewoJCQkJCQl1
aW50IG51bUJ5dGVzUG9pbnRlcnM7CgkJCQkJCQoJCQkJCQludW1CeXRlc1BvaW50ZXJzID0gdG9C
eXRlcyhudW1Qb2ludGVycyk7CgoJCQkJCQkvKiBmb3IgZWFjaCBhcnJheSBlbGVtZW50ICovCgkJ
CQkJCXdoaWxlIChmcm9udCA8IG1heCkgewoJCQkJCQkJcG9pbnRlciBtYXgyOwoJCQkJCQkJZnJv
bnQgKz0gbnVtTm9uUG9pbnRlcnM7CgkJCQkJCQltYXgyID0gZnJvbnQgKyBudW1CeXRlc1BvaW50
ZXJzOwoJCQkJCQkJLyogRm9yd2FyZCBhbGwgaW50ZXJuYWwgcG9pbnRlcnMuICovCgkJCQkJCQlm
b3IgKCA7IGZyb250IDwgbWF4MiA7IGZyb250ICs9IFBPSU5URVJfU0laRSkgCgkJCQkJCQkJZihz
LCAocG9pbnRlciopZnJvbnQpOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWFzc2VydChmcm9udCA9PSBt
YXgpOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJLyogbm9ybWFsIG9iamVjdCAqLwoJCQlwb2lu
dGVyIG1heDsKCgkJCWZyb250ICs9IHRvQnl0ZXMobnVtTm9uUG9pbnRlcnMpOwoJCQltYXggPSBm
cm9udCArIHRvQnl0ZXMobnVtUG9pbnRlcnMpOwogICAgICAKCQkJLyogRm9yd2FyZCBhbGwgaW50
ZXJuYWwgcG9pbnRlcnMuICovCgkJCWZvciAoIDsgZnJvbnQgPCBtYXggOyBmcm9udCArPSBQT0lO
VEVSX1NJWkUpIAoJCQkJZihzLCAocG9pbnRlciopZnJvbnQpOwoJCX0KCX0gLyogZW5kIHdoaWxl
IChmcm9udCA8IHMtPmJhY2spICovCgoJcy0+ZnJvbnQgPSBmcm9udDsKCWFzc2VydChzLT5iYWNr
ID09IHMtPmZyb250KTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgIGludmFyaWFudCAgICAgICAg
ICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KCiNpZm5kZWYgTk9ERUJVRwpzdGF0aWMgYm9vbCBpc0luRnJvbVNwYWNl
KEdDX3N0YXRlICpzLCBwb2ludGVyIHApIHsKCXJldHVybiAobm90KEdDX2lzUG9pbnRlcihwKSkg
CgkJb3IgKHMtPmJhc2UgPD0gcCBhbmQgcCA8IHMtPmJhc2UgKyBzLT5mcm9tU2l6ZSkpOwp9Cgpz
dGF0aWMgdm9pZCBhc3NlcnRJc0luRnJvbVNwYWNlKEdDX3N0YXRlICpzLCBwb2ludGVyICpwKSB7
Cglhc3NlcnQoaXNJbkZyb21TcGFjZShzLCAqcCkpOwp9CgpzdGF0aWMgYm9vbCBpc0luVG9TcGFj
ZShHQ19zdGF0ZSAqcywgcG9pbnRlciBwKSB7CglyZXR1cm4gKG5vdChHQ19pc1BvaW50ZXIocCkp
CgkJb3IgKHMtPnRvQmFzZSA8PSBwIGFuZCBwIDwgcy0+dG9CYXNlICsgcy0+dG9TaXplKSk7Cn0K
CnN0YXRpYyBib29sIGludmFyaWFudChHQ19zdGF0ZSAqcykgewoJLyogd291bGQgYmUgbmljZSB0
byBhZGQgZGl2aXNpYmxpdHkgYnkgcGFnZXNpemUgb2YgdmFyaW91cyB0aGluZ3MgKi8KCgkvKiBG
cmFtZSBsYXlvdXRzICovCgl7CgkJaW50IGk7CgkJZm9yIChpID0gMDsgaSA8IHMtPm1heEZyYW1l
SW5kZXg7ICsraSkgewoJCQlHQ19mcmFtZUxheW91dCAqbGF5b3V0OwoKIAkJCWxheW91dCA9ICYo
cy0+ZnJhbWVMYXlvdXRzW2ldKTsKCgkJCWlmIChsYXlvdXQtPm51bUJ5dGVzID4gMCkgewoJCQkJ
R0Nfb2Zmc2V0cyBvZmZzZXRzOwoJCQkJaW50IGo7CgoJCQkJYXNzZXJ0KGxheW91dC0+bnVtQnl0
ZXMgPD0gcy0+bWF4RnJhbWVTaXplKTsKCQkJCW9mZnNldHMgPSBsYXlvdXQtPm9mZnNldHM7CgkJ
CQlmb3IgKGogPSAwOyBqIDwgb2Zmc2V0c1swXTsgKytqKQoJCQkJCWFzc2VydChvZmZzZXRzW2og
KyAxXSA8IGxheW91dC0+bnVtQnl0ZXMpOwoJCQl9CgkJfQoJfQoKCS8qIEhlYXAgYW5kIHN0YWNr
LiAqLwoJYXNzZXJ0KHMtPmJhc2UgPD0gcy0+ZnJvbnRpZXIpOwoJYXNzZXJ0KDAgPT0gcy0+ZnJv
bVNpemUgb3Igcy0+ZnJvbnRpZXIgPCBzLT5saW1pdCk7Cglhc3NlcnQocy0+bGltaXQgPT0gcy0+
YmFzZSArIHMtPmZyb21TaXplKTsKCWFzc2VydChzLT51c2VGaXhlZEhlYXAgb3IgKHMtPmZyb21T
aXplIDw9IHMtPm1heEhlYXBTaXplCgkgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcy0+
dG9TaXplIDw9IHMtPm1heEhlYXBTaXplKSk7Cglhc3NlcnQocy0+dG9CYXNlID09IE5VTEwgb3Ig
cy0+dG9TaXplID09IHMtPmZyb21TaXplKTsKCWFzc2VydChzLT5zdGFja0JvdHRvbSAtIFdPUkRf
U0laRSA8PSBzLT5zdGFja1RvcAoJCWFuZCBzLT5zdGFja1RvcCA8IHMtPnN0YWNrQm90dG9tICsg
cy0+c3RhY2tTaXplKTsKCWFzc2VydChzLT5zdGFja0xpbWl0ID09IHMtPnN0YWNrQm90dG9tICsg
cy0+c3RhY2tTaXplIC0gcy0+bWF4RnJhbWVTaXplKTsKCgkvKiBDaGVjayB0aGF0IGFsbCBwb2lu
dGVycyBhcmUgaW50byBmcm9tIHNwYWNlLiAqLwoJZm9yZWFjaExvY2FsKHMsIGFzc2VydElzSW5G
cm9tU3BhY2UpOwoJZm9yZWFjaEdsb2JhbChzLCBhc3NlcnRJc0luRnJvbVNwYWNlKTsKCWZvcmVh
Y2hQb2ludGVySW5TdGFjayhzLCBhc3NlcnRJc0luRnJvbVNwYWNlKTsKCXMtPmZyb250ID0gcy0+
YmFzZTsKCXMtPmJhY2sgPSBzLT5mcm9udGllcjsKCWZvcmVhY2hQb2ludGVySW5IZWFwKHMsIGFz
c2VydElzSW5Gcm9tU3BhY2UpOwoKIAkvKiBjaGVjayB0aGUgZXhjZXB0aW9uIHN0YWNrICovCgl7
CgkJdWludCBvZmZzZXQ7CgoJCWZvciAob2Zmc2V0ID0gcy0+ZXhuU3RhY2s7IG9mZnNldCA+IDA7
ICkgewoJCQlhc3NlcnQocy0+c3RhY2tCb3R0b20gKyBvZmZzZXQgCgkJCQkJPD0gcy0+c3RhY2tU
b3AgKyBXT1JEX1NJWkUpOwoJCQlvZmZzZXQgPSAqKHVpbnQqKShzLT5zdGFja0JvdHRvbSArIG9m
ZnNldCArIFdPUkRfU0laRSk7CgkJfQoJfQoKCXJldHVybiBUUlVFOwp9CiNlbmRpZgoKLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAg
ICAgICAgICAgICAgICBhbGxvY2F0ZVN0YWNrICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnN0YXRpYyB2
b2lkIHNldFN0YWNrTGltaXQoR0Nfc3RhdGUgKnMpIHsKCXMtPnN0YWNrTGltaXQgPSBzLT5zdGFj
a0JvdHRvbSArIHMtPnN0YWNrU2l6ZSAtIHMtPm1heEZyYW1lU2l6ZTsKfQoKc3RhdGljIHZvaWQg
YWxsb2NhdGVTdGFjayhHQ19zdGF0ZSAqcykgewoJcy0+c3RhY2tCb3R0b20gPSBzbW1hcChzLT5z
dGFja1NpemUpOwoJc2V0U3RhY2tMaW1pdChzKTsKfQkKCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICB0cmFu
c2xhdGVTdGFjayAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBVcGRhdGUgc3RhY2tUb3AgZm9yIGEg
c3RhY2sgdGhhdCBoYXMgbW92ZWQgZnJvbSAKICogcy0+c3RhY2tCb3R0b20gPT0gb2xkIHRvIHRo
ZSBjdXJyZW50IHMtPnN0YWNrQm90dG9tLgogKiBUaGUgY29kZSBpcyBjYXJlZnVsIHRvIHVzZSBh
IHVpbnQgZm9yIHRoZSBkaWZmZXJlbmNlIGFuZCBub3QgYW4gaW50IHNvIHRoYXQgCiAqIG1vdmVz
IG92ZXIgYXJiaXRyYXJpbHkgbGFyZ2UgZGlmZmVyZW5jZXMgaW4gdGhlIGFkZHJlc3Mgc3BhY2Ug
YXJlIGFsbG93ZWQuCiAqLwpzdGF0aWMgdm9pZCB0cmFuc2xhdGVTdGFjayhHQ19zdGF0ZSAqcywg
cG9pbnRlciBvbGQpIHsKCWlmIChzLT5zdGFja0JvdHRvbSA+IG9sZCkKCQlzLT5zdGFja1RvcCAr
PSAocy0+c3RhY2tCb3R0b20gLSBvbGQpOwoJZWxzZQoJCXMtPnN0YWNrVG9wIC09IChvbGQgLSBz
LT5zdGFja0JvdHRvbSk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgIG1heWJlU2hyaW5rU3RhY2sgICAg
ICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tICovCgojZGVmaW5lIFNUQUNLX1NIUklOS19USFJFU0hPTEQgNAojZGVmaW5l
IFNUQUNLX1NIUklOS19GQUNUT1IgMgoKdm9pZCBtYXliZVNocmlua1N0YWNrKEdDX3N0YXRlICpz
KSB7Cgl1aW50IHNpemU7CgoJc2l6ZSA9IHMtPnN0YWNrVG9wICsgV09SRF9TSVpFIC0gcy0+c3Rh
Y2tCb3R0b207CgoJaWYgKHNpemUgKiBTVEFDS19TSFJJTktfVEhSRVNIT0xEIDwgcy0+c3RhY2tT
aXplCiNpZiBkZWZpbmVkKF9XSU4zMikKCQlhbmQgcy0+c3RhY2tTaXplID4gcGFnZXNpemUpIHsg
Ly9GSVhNRTogLi4uCiNlbHNlCgkJYW5kIHMtPnN0YWNrU2l6ZSA+IGdldHBhZ2VzaXplKCkpIHsK
I2VuZGlmCgkJdWludCBrZWVwOwoKCQlrZWVwID0gcm91bmRQYWdlKG1heChzaXplLCBzLT5zdGFj
a1NpemUgLyBTVEFDS19TSFJJTktfRkFDVE9SKSk7CgkJaWYgKGtlZXAgPCBzLT5zdGFja1NpemUp
IHsKCQkJaWYgKEdDX0RFQlVHIG9yIHMtPm1lc3NhZ2VzKQoJCQkJZnByaW50ZihzdGRlcnIsICJT
aHJpbmtpbmcgc3RhY2sgdG8gc2l6ZSAldS5cbiIsCgkJCQkJa2VlcCk7CgkJCWFzc2VydChzLT5z
dGFja1RvcCA8IHMtPnN0YWNrQm90dG9tICsga2VlcCk7CgkJCXNtdW5tYXAocy0+c3RhY2tCb3R0
b20gKyBrZWVwLCBzLT5zdGFja1NpemUgLSBrZWVwKTsKCQkJcy0+c3RhY2tTaXplID0ga2VlcDsK
CQkJc2V0U3RhY2tMaW1pdChzKTsKCQl9Cgl9Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgR0NfZ3Jv
d1N0YWNrICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgojZGVmaW5lIFNUQUNLX0dST1dfRkFDVE9SIDIK
dm9pZCBHQ19ncm93U3RhY2soR0Nfc3RhdGUgKnMpIHsKCXBvaW50ZXIgb2xkOwoJdWludCBvbGRT
aXplLCBzaXplOwoKCW5vTG9jYWxzKHMpOwoJYXNzZXJ0KGludmFyaWFudChzKSk7CglvbGQgPSBz
LT5zdGFja0JvdHRvbTsKCW9sZFNpemUgPSBzLT5zdGFja1NpemU7CglzaXplID0gcy0+c3RhY2tU
b3AgKyBXT1JEX1NJWkUgLSBzLT5zdGFja0JvdHRvbTsKCXMtPnN0YWNrU2l6ZSAqPSBTVEFDS19H
Uk9XX0ZBQ1RPUjsKCWlmIChHQ19ERUJVRyBvciBzLT5tZXNzYWdlcykKCQlmcHJpbnRmKHN0ZGVy
ciwgIkdyb3dpbmcgc3RhY2sgdG8gc2l6ZSAldS5cbiIsIHMtPnN0YWNrU2l6ZSk7CglhbGxvY2F0
ZVN0YWNrKHMpOwoJbWVtY3B5KHMtPnN0YWNrQm90dG9tLCBvbGQsIHNpemUpOwoJc211bm1hcChv
bGQsIG9sZFNpemUpOwoJdHJhbnNsYXRlU3RhY2socywgb2xkKTsKCglhc3NlcnQoaW52YXJpYW50
KHMpKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICBpbml0Q291bnRlcnMgICAgICAgICAgICAgICAg
ICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KCnN0YXRpYyB2b2lkIGluaXRDb3VudGVycyhHQ19zdGF0ZSAqcykgewogCS8qIFRoZSBu
ZXh0IDUgYXJlIGdjLXN1bW1hcnkgc3RhdGlzdGljcyAqLwoJcy0+c3RhcnRUaW1lID0gY3VycmVu
dFRpbWUoKTsKCXMtPmJ5dGVzQWxsb2NhdGVkID0gMDsKCXMtPmJ5dGVzQ29waWVkID0gMDsKCXMt
Pm51bUdDcyA9IDA7CglzLT5nY1RpbWUgPSAwOwoJcy0+bWF4SGVhcFNpemVTZWVuID0gMDsKCXMt
Pm1heEJ5dGVzTGl2ZSA9IDA7CgoJLyogVGhlIG5leHQgMyBhcmUgZm9yIGhlYXAgcmVzaXppbmcg
Ki8KCXMtPm1pbkxpdmUgPSAyMDsKCXMtPm1heExpdmUgPSAzOwoJLyogc2V0IGxpdmVSYXRpbyAo
Y2xvc2UpIHRvIHRoZSBnZW9tZXRyaWMgbWVhbiBvZiBtaW5MaXZlIGFuZCBtYXhMaXZlICovCgl7
IAoJCXVpbnQgaTsKCQlmb3IgKGkgPSBzLT5tYXhMaXZlOyBpICogaSA8PSBzLT5taW5MaXZlICog
cy0+bWF4TGl2ZTsgKytpKSA7CgkJcy0+bGl2ZVJhdGlvID0gaTsKCX0KfQoKLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAg
ICAgICAgICAgZ2V0UkFNc2l6ZSAgICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCi8qIFJBTSBzaXplIGlz
IG11bHRpcGxpZWQgYnkgdGhpcyBzbyB0aGF0IHdlIGRvbid0IHVzZSB1cCBhbGwgdGhlIG1lbW9y
eSAqLwojZGVmaW5lIFJBTXNsb3AgMC45NQoKLyogR2V0IFJBTSBzaXplIGZyb20gL3Byb2MvbWVt
aW5mby4gIFZlcnkgTGludXggc3BlY2lmaWMuIAogKgogKiAvcHJvYy9tZW1pbmZvIGxvb2tzIGxp
a2UgdGhlIGZvbGxvd2luZy4KICoKICogICAgICAgIHRvdGFsOiAgICB1c2VkOiAgICBmcmVlOiAg
c2hhcmVkOiBidWZmZXJzOiAgY2FjaGVkOgogKiBNZW06ICAyNjM0NjI5MTIgMjUxMTU0NDMyIDEy
MzA4NDgwIDE5ODYxNTA0IDUyNTg4NTQ0IDEyMjc2OTQwOAogKiBTd2FwOiAxMzE1Njc2MTYgICAg
NTMyNDggMTMxNTE0MzY4CiAqIE1lbVRvdGFsOiAgICAyNTcyODgga0IKICovCnN0YXRpYyB1aW50
IGdldFJBTXNpemUoKSB7CglGSUxFICpmaWxlOwoJY2hhciBjOwoJY2hhciBidWZbODBdOwoJdWlu
dCBuOwoKCWZpbGUgPSBzb3BlbigiL3Byb2MvbWVtaW5mbyIsICJyIik7Cgl3aGlsZSAoKGMgPSBm
Z2V0YyhmaWxlKSkgIT0gJ1xuJykgOwoJZmdldHMoYnVmLCBzaXplb2YoIk1lbToiKSwgZmlsZSk7
Cgl3aGlsZSAoKGMgPSBmZ2V0YyhmaWxlKSkgPT0gJyAnKSA7CgluID0gMDsKCWRvIG4gPSBuICog
MTAgKyAoaW50KShjIC0gJzAnKTsKCXdoaWxlICgoYyA9IGZnZXRjKGZpbGUpKSAhPSAnICcpOwoJ
ZmNsb3NlKGZpbGUpOwoJcmV0dXJuIHJvdW5kUGFnZSgodWludCkoKGRvdWJsZSluICogUkFNc2xv
cCkpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tICovCi8qICAgICAgICAgICAgICAgICAgIHNldEhlYXBQYXJhbXMgICAgICAgICAgICAgICAg
ICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSAqLwoKLyogc2V0IGZyb21TaXplIGFuZCBtYXliZSBtYXhIZWFwU2l6ZSwgZGVwZW5kaW5nIG9u
IHdoZXRoZXIgdXNlRml4ZWRIZWFwLgogKiBzaXplIG11c3Qgbm90IGJlIGFuIGFwcHJveGltYXRp
b24sIGJlY2F1c2Ugc2V0SGVhcFBhcmFtcyB3aWxsIGRpZSBpZiBpdAogKiBjYW4ndCBzZXQgZnJv
bVNpemUgYmlnIGVub3VnaC4KICovCnZvaWQgc2V0SGVhcFBhcmFtcyhHQ19zdGF0ZSAqcywgdWlu
dCBzaXplKSB7CglpZiAocy0+dXNlRml4ZWRIZWFwKSB7CgkJaWYgKDAgPT0gcy0+ZnJvbVNpemUp
CgkJCXMtPmZyb21TaXplID0gZ2V0UkFNc2l6ZSgpOwoJICAgICAgICBzLT5mcm9tU2l6ZSA9IHJv
dW5kUGFnZShzLT5mcm9tU2l6ZSAvIDIpOwoJfSBlbHNlIHsKCQlpZiAoMCA9PSBzLT5tYXhIZWFw
U2l6ZSkgCgkJCXMtPm1heEhlYXBTaXplID0gZ2V0UkFNc2l6ZSgpOwoJCXMtPm1heEhlYXBTaXpl
ID0gcm91bmRQYWdlKHMtPm1heEhlYXBTaXplIC8gMik7CgkJcy0+ZnJvbVNpemUgPSBjb21wdXRl
SGVhcFNpemUocywgc2l6ZSwgcy0+bGl2ZVJhdGlvKTsKCX0KCWlmIChzaXplID4gcy0+ZnJvbVNp
emUpCgkJZGllKCJPdXQgb2YgbWVtb3J5LiIpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgIEdD
X2luaXQgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKdm9pZCBHQ19pbml0KEdDX3N0YXRlICpzKSB7
Cglpbml0Q291bnRlcnMocyk7Cglub0xvY2FscyhzKTsKCXNldEhlYXBQYXJhbXMocywgcy0+Ynl0
ZXNMaXZlKTsKCXsKCQlpbnQgaTsKCgkJZm9yIChpID0gMDsgaSA8IHMtPm51bUdsb2JhbHM7ICsr
aSkKCQkJcy0+Z2xvYmFsc1tpXSA9IChwb2ludGVyKTB4MTsKCX0KCWZyb21TcGFjZShzKTsKCXMt
PmZyb250aWVyID0gcy0+YmFzZTsKCXMtPnRvU2l6ZSA9IHMtPmZyb21TaXplOwoJdG9TcGFjZShz
KTsKCS8qIFRoZXJlIGlzIGluaXRpYWxseSBubyBleGNlcHRpb24gc3RhY2ssIHNvIHdlIHN0b3Jl
IGEgdGVybWluYWwKICAgICAgICAgKiBib2d1cyBvZmZzZXQgb2YgMC4KCSAqLwoJcy0+ZXhuU3Rh
Y2sgPSAwOwoJLyogVGhlIGluaXRpYWwgc3RhY2sgc2l6ZSBtdXN0IGJlIGJpZyBlbm91Z2ggc28g
dGhhdCBkb3VibGluZyBpdCB3aWxsCgkgKiBhbHdheXMgbWFrZSBlbm91Z2ggc3BhY2UgZm9yIHRo
ZSBsYXJnZXN0IGZyYW1lIHRoYXQgbmVlZHMgcHVzaGVkLgogCSAqLwojaWYgZGVmaW5lZChfV0lO
MzIpCglzLT5zdGFja1NpemUgPSBtYXgocGFnZXNpemUsIHJvdW5kUGFnZShzLT5tYXhGcmFtZVNp
emUpKTsKI2Vsc2UKCXMtPnN0YWNrU2l6ZSA9IG1heChnZXRwYWdlc2l6ZSgpLCByb3VuZFBhZ2Uo
cy0+bWF4RnJhbWVTaXplKSk7CiNlbmRpZgoJYWxsb2NhdGVTdGFjayhzKTsKCS8qIHN0YWNrVG9w
IHBvaW50cyBhdCB0aGUgbGFzdCBzcG90IGluIHVzZSAqLwoJcy0+c3RhY2tUb3AgPSBzLT5zdGFj
a0JvdHRvbSAtIFdPUkRfU0laRSA7CgoJYXNzZXJ0KGludmFyaWFudChzKSk7Cn0KCi8qIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAg
ICAgICAgICAgICAgICAgZm9yd2FyZCAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBGb3J3YXJk
IHRoZSBvYmplY3QgcG9pbnRlZCB0byBieSAqcHAuCiAqIFVwZGF0ZSAqcHAgdG8gcG9pbnQgdG8g
dGhlIG5ldyBvYmplY3QuIAogKi8Kc3RhdGljIGlubGluZSB2b2lkIGZvcndhcmQoR0Nfc3RhdGUg
KnMsIHBvaW50ZXIgKnBwKSB7Cglwb2ludGVyIHA7CgoJcCA9ICpwcDsKCWFzc2VydChpc0luRnJv
bVNwYWNlKHMsIHApKTsKCiAJaWYgKEdDX2lzUG9pbnRlcihwKSkgewoJCXdvcmQgaGVhZGVyOwoK
CQkvKiBUaGUgaGVhZGVyIGlzIGFsd2F5cyBvbmUgd29yZCBiZWZvcmUgdGhlIG9iamVjdC4gKi8K
CQloZWFkZXIgPSAqKHdvcmQqKShwIC0gV09SRF9TSVpFKTsKCQlpZiAoaGVhZGVyID09IEZPUldB
UkRFRCkgCgkJCS8qIEFscmVhZHkgZm9yd2FyZGVkLCBqdXN0IGdldCB0aGUgZm9yd2FyZGluZyBw
b2ludGVyLiAqLwoJCQkqcHAgPSAqKHBvaW50ZXIqKXA7CgkJZWxzZSB7IAoJCQkvKiBmb3J3YXJk
IHRoZSBvYmplY3QgKi8KCSAJCXVpbnQgbnVtUG9pbnRlcnMsIG51bU5vblBvaW50ZXJzOwoJCQli
b29sIGlzTm9ybWFsOwoJCQlwb2ludGVyIG9iamVjdFN0YXJ0OwoJCQl1aW50IG9iamVjdEJ5dGVz
LCBoZWFkZXJCeXRlczsKCQkJCgkJCS8qIGV4dHJhY3QgaGVhZGVyIGNvbXBvbmVudHMgKi8KCQkJ
bnVtUG9pbnRlcnMgPSBoZWFkZXIgJiBOVU1fUE9JTlRFUlNfTUFTSzsKCQkJbnVtTm9uUG9pbnRl
cnMgPSBoZWFkZXIgPj4gTk9OX1BPSU5URVJTX1NISUZUOwoJCQlpc05vcm1hbCA9IG51bU5vblBv
aW50ZXJzICYgSVNfTk9STUFMX01BU0s7CgkJCW51bU5vblBvaW50ZXJzID0gbnVtTm9uUG9pbnRl
cnMgJiBOVU1fTk9OX1BPSU5URVJTX01BU0s7CgkKCQkJLyogc2V0IGhlYWRlckJ5dGVzIGFuZCBv
YmplY3RCeXRlcyAqLwoJCQlpZiAoaXNOb3JtYWwpIHsKCQkJCWhlYWRlckJ5dGVzID0gR0NfT0JK
RUNUX0hFQURFUl9TSVpFOwoJCQkJb2JqZWN0Qnl0ZXMgPSB0b0J5dGVzKG51bVBvaW50ZXJzICsg
bnVtTm9uUG9pbnRlcnMpOwoJCQl9IGVsc2UgaWYgKENPTlRfSEVBREVSID09IGhlYWRlcikgewoJ
CQkJaGVhZGVyQnl0ZXMgPSBXT1JEX1NJWkU7CgkJCQlvYmplY3RCeXRlcyA9IDIgKiBXT1JEX1NJ
WkUgKyAqKHVpbnQqKXA7CgkJCX0gZWxzZSB7IC8qIGFycmF5ICovCgkJCQloZWFkZXJCeXRlcyA9
IEdDX0FSUkFZX0hFQURFUl9TSVpFOwoJCQkJb2JqZWN0Qnl0ZXMgPSBleHRyYWN0QXJyYXlOdW1C
eXRlcyhwLCBudW1Qb2ludGVycywKCQkJCQkJCQkJIG51bU5vblBvaW50ZXJzKTsKCSAJCQkvKiBF
bXB0eSBhcnJheXMgaGF2ZSBQT0lOVEVSX1NJWkUgYnl0ZXMgZm9yIHRoZSAKCQkJCSAqIGZvcndh
cmRpbmcgcG9pbnRlci4KCQkJCSAqLwoJCQkJaWYgKG9iamVjdEJ5dGVzID09IDApIG9iamVjdEJ5
dGVzID0gUE9JTlRFUl9TSVpFOwoJCQl9IAoJCgkJCW9iamVjdFN0YXJ0ID0gcCAtIGhlYWRlckJ5
dGVzOwoJCgkJCS8qIGNvcHkgdGhlIG9iamVjdCAqLwoJCQltZW1jcHkocy0+YmFjaywgb2JqZWN0
U3RhcnQsIGhlYWRlckJ5dGVzICsgb2JqZWN0Qnl0ZXMpOwoJCgkgCQkvKiBzZXQgdGhlIGZvcndh
cmRpbmcgcG9pbnRlciBhbmQgdXBkYXRlIHMtPmJhY2sgKi8KCQkJKih3b3JkKikocCAtIFdPUkRf
U0laRSkgPSBGT1JXQVJERUQ7CgkJCXMtPmJhY2sgKz0gaGVhZGVyQnl0ZXM7CgkJCSpwcCA9IHMt
PmJhY2s7CgkJCSoocG9pbnRlciopcCA9IHMtPmJhY2s7CgkJCXMtPmJhY2sgKz0gb2JqZWN0Qnl0
ZXM7CgkJfQoJfQoKCWFzc2VydChpc0luVG9TcGFjZShzLCAqcHApKTsKfQoKLyogLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAg
ICAgICAgIHRyYW5zaXRpdmVDb3B5ICAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnN0YXRpYyB2b2lkIHRy
YW5zaXRpdmVDb3B5KEdDX3N0YXRlICpzKSB7CiNpZiBHQ19ERUJVRwoJZnByaW50ZihzdGRlcnIs
ICJUcmFuc2l0aXZlIGNvcHkuXG4iKTsKI2VuZGlmCglmb3JlYWNoUG9pbnRlckluSGVhcChzLCBm
b3J3YXJkKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0R0MgICAgICAgICAgICAgICAg
ICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0gKi8KCnN0YXRpYyB2b2lkIHN0YXJ0R0MoR0Nfc3RhdGUgKnMpIHsKIAlhc3NlcnQoaW52
YXJpYW50KHMpKTsKCglpZiAoR0NfREVCVUcgb3Igcy0+bWVzc2FnZXMpCgkJZnByaW50ZihzdGRl
cnIsICJTdGFydGluZyBnYy5cbiIpOwoKIAlzLT5yZWNlbnRTdGFydCA9IGN1cnJlbnRUaW1lKCk7
CgoJaWYgKG5vdCBzLT51c2VGaXhlZEhlYXApIHsKCQl1aW50IG5lZWRlZDsKCgkJbmVlZGVkID0g
Y29tcHV0ZUhlYXBTaXplKHMsIHMtPmJ5dGVzTGl2ZSArIHMtPmJ5dGVzUmVxdWVzdGVkLAoJCQkJ
CQlzLT5saXZlUmF0aW8pOwoKCQkvKiB0b1NwYWNlIG11c3QgYmUgYXQgbGVhc3QgYXMgYmlnIGFz
IGZyb21TcGFjZSAqLwoJCWlmIChuZWVkZWQgPCBzLT5mcm9tU2l6ZSkKCQkJbmVlZGVkID0gcy0+
ZnJvbVNpemU7CgoJCS8qIE1hc3NhZ2UgdG9TcGFjZSBzbyB0aGF0IGl0IGlzIG9mIG5lZWRlZCBz
aXplLiAqLwoJCWlmIChzLT50b0Jhc2UgIT0gTlVMTCkgewoJCQkgaWYgKHMtPnRvU2l6ZSA8IG5l
ZWRlZCkgewoJCQkJaWYgKEdDX0RFQlVHIG9yIHMtPm1lc3NhZ2VzKQoJCQkJCWZwcmludGYoc3Rk
ZXJyLCAiVW5tYXBwaW5nIHRvU3BhY2VcbiIpOwoJCQkJc211bm1hcChzLT50b0Jhc2UsIHMtPnRv
U2l6ZSk7CgkJCQlzLT50b0Jhc2UgPSBOVUxMOwoJCQkgfSBlbHNlIHsKCQkJCXVpbnQgZGVsZXRl
OwoKCQkJCWRlbGV0ZSA9IHMtPnRvU2l6ZSAtIG5lZWRlZDsKCQkJCWlmIChHQ19ERUJVRyBvciBz
LT5tZXNzYWdlcykKCQkJCQlmcHJpbnRmKHN0ZGVyciwgIlNocmlua2luZyB0b1NwYWNlIGJ5ICV1
XG4iLCBkZWxldGUpOwoJCQkJc211bm1hcChzLT50b0Jhc2UgKyBuZWVkZWQsIGRlbGV0ZSk7CgkJ
CSB9CgkJfQoJCXMtPnRvU2l6ZSA9IG5lZWRlZDsKCQlpZiAoTlVMTCA9PSBzLT50b0Jhc2UpCgkJ
CXRvU3BhY2Uocyk7Cgl9CgogCXMtPm51bUdDcysrOwogCXMtPmJ5dGVzQWxsb2NhdGVkICs9IHMt
PmZyb250aWVyIC0gcy0+YmFzZSAtIHMtPmJ5dGVzTGl2ZTsKCXMtPmZyb250ID0gcy0+dG9CYXNl
OwoJcy0+YmFjayA9IHMtPnRvQmFzZTsKCglpZiAoR0NfREVCVUcgb3Igcy0+bWVzc2FnZXMpCgkJ
ZnByaW50ZihzdGRlcnIsIAoJCQkidG9TcGFjZSBpcyAlcyBieXRlcy5cbiIsCgkJCXVpbnRUb0Nv
bW1hU3RyaW5nKHMtPnRvU2l6ZSkpOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAgZmluaXNoR0Mg
ICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKdm9pZCBmaW5pc2hHQyhHQ19zdGF0ZSAqcykgewoJdWlu
dCBnY1RpbWU7Cgl1aW50IHNpemU7CgoJbWF5YmVTaHJpbmtTdGFjayhzKTsKCiNpZiBHQ19ERUJV
RwoJZnByaW50ZihzdGRlcnIsICJGb3J3YXJkaW5nIGdsb2JhbHMuXG4iKTsKI2VuZGlmCglmb3Jl
YWNoR2xvYmFsKHMsIGZvcndhcmQpOwoKI2lmIEdDX0RFQlVHCglmcHJpbnRmKHN0ZGVyciwgIkZv
cndhcmRpbmcgc3RhY2tcbiIpOwojZW5kaWYKCWZvcmVhY2hQb2ludGVySW5TdGFjayhzLCBmb3J3
YXJkKTsKCiNpZiBHQ19ERUJVRwoJZnByaW50ZihzdGRlcnIsICJGb3J3YXJkaW5nICVkIGxvY2Fs
cy5cbiIsIHMtPmxvY2FsT2Zmc2V0c1swXSk7CiNlbmRpZgoJZm9yZWFjaExvY2FsKHMsIGZvcndh
cmQpOwoKCXRyYW5zaXRpdmVDb3B5KHMpOwoKCXNpemUgPSBzLT5mcm9tU2l6ZTsKCgkvKiBTd2Fw
IGZyb21TcGFjZSBhbmQgdG9TcGFjZS4gKi8KCXsKCQlwb2ludGVyIHRtcDsKCQl0bXAgPSBzLT5i
YXNlOwoJCXMtPmJhc2UgPSBzLT50b0Jhc2U7CgkJcy0+dG9CYXNlID0gdG1wOwoJfQoJewoJCXVp
bnQgdG1wOwoJCXRtcCA9IHMtPmZyb21TaXplOwoJCXMtPmZyb21TaXplID0gcy0+dG9TaXplOwoJ
CXMtPnRvU2l6ZSA9IHRtcDsKCX0KCglzLT5mcm9udGllciA9IHMtPmJhY2s7CglzLT5ieXRlc0xp
dmUgPSBzLT5mcm9udGllciAtIHMtPmJhc2U7CglpZiAocy0+Ynl0ZXNMaXZlID4gcy0+bWF4Qnl0
ZXNMaXZlKQoJCXMtPm1heEJ5dGVzTGl2ZSA9IHMtPmJ5dGVzTGl2ZTsKCgkvKiBSZXNpemUgaGVh
cCwgaWYgbmVjZXNzYXJ5LiAqLwoJaWYgKG5vdCBzLT51c2VGaXhlZEhlYXApIHsKCQl1aW50IG5l
ZWRlZDsKCgkJbmVlZGVkID0gcy0+Ynl0ZXNMaXZlICsgcy0+Ynl0ZXNSZXF1ZXN0ZWQ7CgkJaWYg
KGNvbXB1dGVIZWFwU2l6ZShzLCBuZWVkZWQsIHMtPm1pbkxpdmUpIDwgcy0+ZnJvbVNpemUpIHsK
CQkJLyogc2hyaW5rIGhlYXAgKi8KCQkJdWludCBrZWVwOwoKCQkJa2VlcCA9IGNvbXB1dGVIZWFw
U2l6ZShzLCBuZWVkZWQsIHMtPmxpdmVSYXRpbyk7CgkJCWlmIChHQ19ERUJVRyBvciBzLT5tZXNz
YWdlcykKCQkJCWZwcmludGYoc3RkZXJyLCAiU2hyaW5raW5nIGhlYXAgdG8gJXUgYnl0ZXMuXG4i
LCBrZWVwKTsKCQkJYXNzZXJ0KGtlZXAgPD0gcy0+ZnJvbVNpemUpOwoJCQlzbXVubWFwKHMtPmJh
c2UgKyBrZWVwLCBzLT5mcm9tU2l6ZSAtIGtlZXApOwoJCQlzLT5mcm9tU2l6ZSA9IGtlZXA7CgkJ
fQoJCgkJaWYgKChzLT50b1NpemUgPCBzLT5mcm9tU2l6ZSkKCQkgICAgb3IgKGNvbXB1dGVIZWFw
U2l6ZShzLCBuZWVkZWQsIHMtPm1heExpdmUpID4gcy0+ZnJvbVNpemUpKSB7CgkJCS8qIHByZXBh
cmUgdG8gYWxsb2NhdGUgbmV3IHRvU3BhY2UgYXQgbmV4dCBHQyAqLwoJCQlzbXVubWFwKHMtPnRv
QmFzZSwgcy0+dG9TaXplKTsKCQkJcy0+dG9CYXNlID0gTlVMTDsKCQl9IGVsc2UgewoJCSAgICAg
ICAgLyogc2hyaW5rIHRvU3BhY2Ugc28gdGhhdCBzLT50b1NpemUgPT0gcy0+ZnJvbVNpemUgKi8K
CQkJc211bm1hcChzLT50b0Jhc2UgKyBzLT5mcm9tU2l6ZSwgcy0+dG9TaXplIC0gcy0+ZnJvbVNp
emUpOwoJIAkJcy0+dG9TaXplID0gcy0+ZnJvbVNpemU7CgkJfQoJfQoKCXNldExpbWl0KHMpOwoK
CXMtPmJ5dGVzQ29waWVkICs9IHMtPmJ5dGVzTGl2ZTsKCWdjVGltZSA9IGN1cnJlbnRUaW1lKCkg
LSBzLT5yZWNlbnRTdGFydDsKCXMtPmdjVGltZSArPSBnY1RpbWU7CgoJaWYgKEdDX0RFQlVHIG9y
IHMtPm1lc3NhZ2VzKSB7CgkJZnByaW50ZihzdGRlcnIsICJGaW5pc2hlZCBnYy5cbiIpOwoJCWZw
cmludGYoc3RkZXJyLCAidGltZShtcyk6ICVzXG4iLCBpbnRUb0NvbW1hU3RyaW5nKGdjVGltZSkp
OwoJCWZwcmludGYoc3RkZXJyLCAibGl2ZShieXRlcyk6ICVzICglLjFmJSUpXG4iLCAKCQkJaW50
VG9Db21tYVN0cmluZyhzLT5ieXRlc0xpdmUpLAoJCQkxMDAuMCAqICgoZG91YmxlKSBzLT5ieXRl
c0xpdmUpIC8gc2l6ZSk7Cgl9CgoJYXNzZXJ0KGludmFyaWFudChzKSk7CgoJaWYgKHMtPmZyb250
aWVyICsgcy0+Ynl0ZXNSZXF1ZXN0ZWQgPj0gcy0+bGltaXQpIHsKCQlpZiAocy0+dXNlRml4ZWRI
ZWFwIG9yIHMtPmZyb21TaXplID09IHMtPm1heEhlYXBTaXplKSAKCQkJZGllKCJPdXQgb2YgbWVt
b3J5LiIpOwoJCWVsc2UgR0NfZ2Mocyk7Cgl9CgoJYXNzZXJ0KHMtPmZyb250aWVyICsgcy0+Ynl0
ZXNSZXF1ZXN0ZWQgPCBzLT5saW1pdCk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIEdDX2dj
ICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgp2b2lkIEdDX2djKEdDX3N0YXRlICpzKSB7CglzdGFy
dEdDKHMpOwoJZmluaXNoR0Mocyk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgR0Nfc2l6ZSAg
ICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCgp1aW50IEdDX3NpemUoR0Nfc3RhdGUgKnMsIHBvaW50ZXIg
cm9vdCkgewoJdWludCBzaXplOwoKCW5vTG9jYWxzKHMpOwoJc3RhcnRHQyhzKTsKCWZvcndhcmQo
cywgJnJvb3QpOwoJdHJhbnNpdGl2ZUNvcHkocyk7CglzaXplID0gcy0+YmFjayAtIHMtPnRvQmFz
ZTsKCWZpbmlzaEdDKHMpOwoJCglyZXR1cm4gc2l6ZTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgR0Nf
Y3JlYXRlU3RyaW5ncyAgICAgICAgICAgICAgICAgICovCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnZvaWQgR0NfY3JlYXRlU3RyaW5ncyhH
Q19zdGF0ZSAqcywgc3RydWN0IEdDX3N0cmluZ0luaXQgaW5pdHNbXSkgewoJcG9pbnRlciBmcm9u
dGllcjsKCWludCBpOwoKCWFzc2VydChpbnZhcmlhbnQocykpOwoJCglmcm9udGllciA9IHMtPmZy
b250aWVyOwoJCglmb3IoaSA9IDA7IGluaXRzW2ldLnN0ciAhPSBOVUxMOyArK2kpIHsKCQl1aW50
IG51bUVsZW1lbnRzLCBudW1CeXRlczsKCgkJbnVtRWxlbWVudHMgPSBpbml0c1tpXS5zaXplOwoJ
CW51bUJ5dGVzID0gR0NfQVJSQVlfSEVBREVSX1NJWkUKCQkJKyAoKDAgPT0gbnVtRWxlbWVudHMp
IAoJCQkJPyBQT0lOVEVSX1NJWkUgCgkJCQk6IHdvcmRBbGlnbihudW1FbGVtZW50cykpOwoKCQlp
ZiAoZnJvbnRpZXIgKyBudW1CeXRlcyA+PSBzLT5saW1pdCkKCQkJZGllKCJVbmFibGUgdG8gYWxs
b2NhdGUgc3RyaW5nIGNvbnN0YW50IFwiJXNcIi4iLCBpbml0c1tpXS5zdHIpOwoJCgkJKih3b3Jk
Kilmcm9udGllciA9IG51bUVsZW1lbnRzOwoJCSood29yZCopKGZyb250aWVyICsgV09SRF9TSVpF
KSA9IFNUUklOR19IRUFERVI7CgkJcy0+Z2xvYmFsc1tpbml0c1tpXS5nbG9iYWxJbmRleF0gPSBm
cm9udGllciArIEdDX0FSUkFZX0hFQURFUl9TSVpFOwoJCXsKCQkJaW50IGo7CgoJCQlmb3IgKGog
PSAwOyBqIDwgbnVtRWxlbWVudHM7ICsraikKCQkJCSooZnJvbnRpZXIgKyBHQ19BUlJBWV9IRUFE
RVJfU0laRSArIGopIAoJCQkJCT0gaW5pdHNbaV0uc3RyW2pdOwoJCX0KCQlmcm9udGllciArPSBu
dW1CeXRlczsKCX0KCXMtPmZyb250aWVyID0gZnJvbnRpZXI7CgoJYXNzZXJ0KGludmFyaWFudChz
KSk7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgR0NfZG9uZSAgICAgICAgICAgICAgICAgICAg
ICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
ICovCgpzdGF0aWMgdm9pZCBkaXNwbGF5VWludChzdHJpbmcgbmFtZSwgdWludCBuKSB7CglmcHJp
bnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgbmFtZSwgdWludFRvQ29tbWFTdHJpbmcobikpOwp9Cgpz
dGF0aWMgdm9pZCBkaXNwbGF5VWxsb25nKHN0cmluZyBuYW1lLCB1bGxvbmcgbikgewoJZnByaW50
ZihzdGRlcnIsICIlczogJXNcbiIsIG5hbWUsIHVsbG9uZ1RvQ29tbWFTdHJpbmcobikpOwp9Cgp2
b2lkIEdDX2RvbmUoR0Nfc3RhdGUgKnMpIHsKCW5vTG9jYWxzKHMpOwoJYXNzZXJ0KGludmFyaWFu
dChzKSk7CglzbXVubWFwKHMtPnN0YWNrQm90dG9tLCBzLT5zdGFja1NpemUpOwoJc211bm1hcChz
LT5iYXNlLCBzLT5mcm9tU2l6ZSk7CglpZiAocy0+dG9CYXNlICE9IE5VTEwpIHNtdW5tYXAocy0+
dG9CYXNlLCBzLT50b1NpemUpOwoKCWlmIChzLT5zdW1tYXJ5KSB7CgkJZG91YmxlIHRpbWU7CgoJ
CWRpc3BsYXlVaW50KCJzdGFjayBzaXplKGJ5dGVzKSIsIHMtPnN0YWNrU2l6ZSk7CgkJZGlzcGxh
eVVpbnQoIm1heCBzZW1pc3BhY2Ugc2l6ZShieXRlcykiLCBzLT5tYXhIZWFwU2l6ZVNlZW4pOwoJ
CXRpbWUgPSAoZG91YmxlKShjdXJyZW50VGltZSgpIC0gcy0+c3RhcnRUaW1lKTsKCQlmcHJpbnRm
KHN0ZGVyciwgIkdDIHRpbWUobXMpOiAlcyAoJS4xZiUlKVxuIiwKCQkJaW50VG9Db21tYVN0cmlu
ZyhzLT5nY1RpbWUpLCAKCQkJKDAuMCA9PSB0aW1lKSA/IDAuMCAKCQkJOiAxMDAuMCAqICgoZG91
YmxlKSBzLT5nY1RpbWUpIC8gdGltZSk7CgkJZGlzcGxheVVpbnQoIm51bWJlciBvZiBHQ3MiLCBz
LT5udW1HQ3MpOwoJCWRpc3BsYXlVbGxvbmcoImJ5dGVzIGFsbG9jYXRlZCIsCgkgCQkJcy0+Ynl0
ZXNBbGxvY2F0ZWQgCgkJCQkrIChzLT5mcm9udGllciAtIHMtPmJhc2UgLSBzLT5ieXRlc0xpdmUp
KTsKCQlkaXNwbGF5VWxsb25nKCJieXRlcyBjb3BpZWQiLCBzLT5ieXRlc0NvcGllZCk7CgkJZGlz
cGxheVVpbnQoIm1heCBieXRlcyBsaXZlIiwgcy0+bWF4Qnl0ZXNMaXZlKTsKCX0JCn0KCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAg
ICAgICAgICAgICAgICAgR0Nfc2F2ZVdvcmxkICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBURVJN
SU5BVE9SIGlzIHVzZWQgdG8gc2VwYXJhdGUgdGhlIGh1bWFuIHJlYWRhYmxlIG1lc3NhZ2VzIGF0
IHRoZSBiZWdpbm5pbmcKICogb2YgdGhlIHdvcmxkIGZpbGUgZnJvbSB0aGUgbWFjaGluZSByZWFk
YWJsZSBkYXRhLgogKi8KI2RlZmluZSBURVJNSU5BVE9SICdcMDAwJwoKdm9pZCBHQ19zYXZlV29y
bGQoR0Nfc3RhdGUgKnMsIAoJCQl1aW50IG1hZ2ljLAoJCQlwb2ludGVyIGZpbGVOYW1lLAoJCQl2
b2lkICgqc2F2ZUdsb2JhbHMpKEZJTEUgKmZpbGUpKSB7CglGSUxFICpmaWxlOwoKCWFzc2VydChp
bnZhcmlhbnQocykpOwoKCS8qIFRoZSBzb3BlbiBtdXN0IGhhcHBlbiBiZWZvcmUgdGhlIGdjLCBi
ZWNhdXNlIHRoZSBHQyB3aWxsIGludmFsaWRhdGUKIAkgKiB0aGUgZmlsZU5hbWUgcG9pbnRlci4g
CgkgKi8JCglmaWxlID0gc29wZW4oKGNoYXIqKWZpbGVOYW1lLCAidyIpOwoKCS8qIENvbXBhY3Qg
dGhlIGhlYXAgaW50byBmcm9tU3BhY2UgKi8KCW5vTG9jYWxzKHMpOwoJR0NfZ2Mocyk7CgoJZnBy
aW50ZihmaWxlLCAiSGVhcCBmaWxlIGNyZWF0ZWQgYnkgTUx0b24uXG5iYXNlID0gJXhcbmZyb250
aWVyID0gJXhcbnN0YWNrQm90dG9tID0gJXhcbnN0YWNrVG9wID0gJXhcbm1heEhlYXBTaXplID0g
JXVcbiIsIAoJCSh1aW50KXMtPmJhc2UsCgkJKHVpbnQpcy0+ZnJvbnRpZXIsCgkJKHVpbnQpcy0+
c3RhY2tCb3R0b20sCgkJKHVpbnQpcy0+c3RhY2tUb3AsCgkJcy0+bWF4SGVhcFNpemUpOwoKIAlm
cHV0YyhURVJNSU5BVE9SLCBmaWxlKTsKCglzd3JpdGVVaW50KG1hZ2ljLCBmaWxlKTsKCXN3cml0
ZVVpbnQoKHVpbnQpcy0+YmFzZSwgZmlsZSk7Cglzd3JpdGVVaW50KCh1aW50KXMtPmZyb250aWVy
LCBmaWxlKTsKCXN3cml0ZVVpbnQoKHVpbnQpcy0+c3RhY2tCb3R0b20sIGZpbGUpOwoJc3dyaXRl
VWludCgodWludClzLT5zdGFja1RvcCwgZmlsZSk7Cglzd3JpdGVVaW50KHMtPmV4blN0YWNrLCBm
aWxlKTsKCXN3cml0ZVVpbnQoKHVpbnQpcy0+dXNlRml4ZWRIZWFwLCBmaWxlKTsKCXN3cml0ZVVp
bnQocy0+ZnJvbVNpemUsIGZpbGUpOwoJc3dyaXRlVWludChzLT5tYXhIZWFwU2l6ZSwgZmlsZSk7
CgoJc3dyaXRlKHMtPnN0YWNrQm90dG9tLCAxLAoJCXMtPnN0YWNrVG9wIC0gcy0+c3RhY2tCb3R0
b20gKyBXT1JEX1NJWkUsCgkJZmlsZSk7CiAJc3dyaXRlKHMtPmJhc2UsIDEsIHMtPmZyb250aWVy
IC0gcy0+YmFzZSwgZmlsZSk7CgkoKnNhdmVHbG9iYWxzKShmaWxlKTsKCglmY2xvc2UoZmlsZSk7
Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0g
Ki8KLyogICAgICAgICAgICAgICAgICAgdHJhbnNsYXRlSGVhcCAgICAgICAgICAgICAgICAgICAq
LwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
CgpzdGF0aWMgaW50IHRyYW5zbGF0ZURpcmVjdGlvbjsKc3RhdGljIHVpbnQgdHJhbnNsYXRlRGlm
ZjsKCnZvaWQgdHJhbnNsYXRlUG9pbnRlcihHQ19zdGF0ZSAqcywgcG9pbnRlciAqcCkgewoJaWYg
KEdDX2lzUG9pbnRlcigqcCkpIHsKCQlpZiAoMSA9PSB0cmFuc2xhdGVEaXJlY3Rpb24pCgkJCSpw
ICs9IHRyYW5zbGF0ZURpZmY7CgkJZWxzZQoJCQkqcCAtPSB0cmFuc2xhdGVEaWZmOwoJfQp9Cgov
KiBUcmFuc2xhdGUgYWxsIHBvaW50ZXJzIHRvIHRoZSBoZWFwIGZyb20gd2l0aGluIHRoZSBzdGFj
ayBhbmQgdGhlIGhlYXAgZm9yCiAqIGEgaGVhcCB0aGF0IGhhcyBtb3ZlZCBmcm9tIHMtPmJhc2Ug
PT0gb2xkIHRvIHMtPmJhc2UuCiAqLwp2b2lkIHRyYW5zbGF0ZUhlYXAoR0Nfc3RhdGUgKnMsIHBv
aW50ZXIgb2xkKSB7CglpZiAocy0+YmFzZSA9PSBvbGQpCgkJcmV0dXJuOwoJZWxzZSBpZiAocy0+
YmFzZSA+IG9sZCkgewoJCXRyYW5zbGF0ZURpZmYgPSBzLT5iYXNlIC0gb2xkOwoJCXRyYW5zbGF0
ZURpcmVjdGlvbiA9IDE7Cgl9IGVsc2UgewoJCXRyYW5zbGF0ZURpZmYgPSBvbGQgLSBzLT5iYXNl
OwoJCXRyYW5zbGF0ZURpcmVjdGlvbiA9IC0xOwoJfQoKCS8qIFRyYW5zbGF0ZSBnbG9iYWxzLiAq
LwoJewoJCWludCBpOwoJCWZvciAoaSA9IDA7IGkgPCBzLT5udW1HbG9iYWxzOyArK2kpCgkJCXRy
YW5zbGF0ZVBvaW50ZXIocywgJihzLT5nbG9iYWxzW2ldKSk7Cgl9CgoJLyogVHJhbnNsYXRlIHN0
YWNrLiAqLwoJZm9yZWFjaFBvaW50ZXJJblN0YWNrKHMsIHRyYW5zbGF0ZVBvaW50ZXIpOwoKCS8q
IFRyYW5zbGF0ZSBoZWFwLiAqLwoJcy0+ZnJvbnQgPSBzLT5iYXNlOwoJcy0+YmFjayA9IHMtPmZy
b250aWVyOwoJZm9yZWFjaFBvaW50ZXJJbkhlYXAocywgdHJhbnNsYXRlUG9pbnRlcik7Cn0KCi8q
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyog
ICAgICAgICAgICAgICAgICAgR0NfbG9hZFdvcmxkICAgICAgICAgICAgICAgICAgICAqLwovKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgp2b2lk
IEdDX2xvYWRXb3JsZChHQ19zdGF0ZSAqcywgCgkJCXVpbnQgbWFnaWMsCgkJCWNoYXIgKmZpbGVO
YW1lLAoJCQlib29sIGhlYXBTaXplQ29tbWFuZExpbmUsCgkJCXZvaWQgKCpsb2FkR2xvYmFscyko
RklMRSAqZmlsZSkpIHsKCUZJTEUgKmZpbGU7Cgl1aW50IGhlYXBTaXplLCBmcm9tU2l6ZSwgbWF4
SGVhcFNpemUsIG1hZ2ljMjsKCXBvaW50ZXIgYmFzZSwgZnJvbnRpZXIsIHN0YWNrQm90dG9tOwog
CWJvb2wgdXNlRml4ZWRIZWFwOwoJY2hhciBjOwoJCglpbml0Q291bnRlcnMocyk7CgkKCWZpbGUg
PSBzb3BlbigoY2hhciopZmlsZU5hbWUsICJyIik7CgkKCXVudGlsICgoYyA9IGZnZXRjKGZpbGUp
KSA9PSBURVJNSU5BVE9SIG9yIEVPRiA9PSBjKTsKCQoJaWYgKEVPRiA9PSBjKSBkaWUoIkludmFs
aWQgd29ybGQuIik7CgkKCW1hZ2ljMiA9IHNyZWFkVWludChmaWxlKTsKCXVubGVzcyAobWFnaWMg
PT0gbWFnaWMyKQoJCWRpZSgiSW52YWxpZCB3b3JsZDogd3JvbmcgbWFnaWMgbnVtYmVyLiIpOwoJ
YmFzZSA9IChwb2ludGVyKXNyZWFkVWludChmaWxlKTsKCWZyb250aWVyID0gKHBvaW50ZXIpc3Jl
YWRVaW50KGZpbGUpOwoJaGVhcFNpemUgPSBmcm9udGllciAtIGJhc2U7CglzLT5ieXRlc0xpdmUg
PSBoZWFwU2l6ZTsKCXN0YWNrQm90dG9tID0gKHBvaW50ZXIpc3JlYWRVaW50KGZpbGUpOwoJcy0+
c3RhY2tUb3AgPSAocG9pbnRlcilzcmVhZFVpbnQoZmlsZSk7CglzLT5leG5TdGFjayA9IHNyZWFk
VWludChmaWxlKTsKCXVzZUZpeGVkSGVhcCA9IChib29sKXNyZWFkVWludChmaWxlKTsKCWZyb21T
aXplID0gc3JlYWRVaW50KGZpbGUpOwogCW1heEhlYXBTaXplID0gc3JlYWRVaW50KGZpbGUpOwoK
CS8qIHNldCBzLT51c2VGaXhlZEhlYXAsIHMtPm1heEhlYXBTaXplLCBzLT5mcm9tU2l6ZSAqLwoJ
aWYgKGhlYXBTaXplQ29tbWFuZExpbmUpCgkgICAgICAgCXNldEhlYXBQYXJhbXMocywgaGVhcFNp
emUpOwoJZWxzZSB7CgkJcy0+dXNlRml4ZWRIZWFwID0gdXNlRml4ZWRIZWFwOwoJCWlmICh1c2VG
aXhlZEhlYXApCgkJCXMtPmZyb21TaXplID0gZnJvbVNpemU7CgkJZWxzZSB7CgkJCXMtPm1heEhl
YXBTaXplID0gbWF4SGVhcFNpemU7CgkJCXMtPmZyb21TaXplID0gY29tcHV0ZUhlYXBTaXplKHMs
IGhlYXBTaXplLCBzLT5saXZlUmF0aW8pOwoJCX0KCX0KCglub0xvY2FscyhzKTsKCgkvKiBBbGxv
Y2F0ZSBzdGFjay4gKi8KCXMtPnN0YWNrU2l6ZSA9IHJvdW5kUGFnZShzLT5zdGFja1RvcCAtIHN0
YWNrQm90dG9tKTsKCWFsbG9jYXRlU3RhY2socyk7CglzcmVhZChzLT5zdGFja0JvdHRvbSwgMSwK
CQkocy0+c3RhY2tUb3AgKyBXT1JEX1NJWkUpIC0gc3RhY2tCb3R0b20sCiAJCWZpbGUpOwoJdHJh
bnNsYXRlU3RhY2socywgc3RhY2tCb3R0b20pOwoKCS8qIEFsbG9jYXRlIGZyb21TcGFjZS4gKi8K
CXVubGVzcyAoaGVhcFNpemUgPD0gcy0+ZnJvbVNpemUpIAoJCWRpZSgiTm90IGVub3VnaCBzcGFj
ZSB0byBsb2FkIHdvcmxkLiIpOwoJZnJvbVNwYWNlKHMpOwoJc3JlYWQocy0+YmFzZSwgMSwgaGVh
cFNpemUsIGZpbGUpOwoJcy0+ZnJvbnRpZXIgPSBzLT5iYXNlICsgaGVhcFNpemU7CgoJKCpsb2Fk
R2xvYmFscykoZmlsZSk7CgkKCXVubGVzcyAoRU9GID09IGZnZXRjKGZpbGUpKQoJZGllKCJJbnZh
bGlkIHdvcmxkOiBqdW5rIGF0IGVuZCBvZiBmaWxlLiIpOwoJCglmY2xvc2UoZmlsZSk7CgoJLyog
VGhpcyBtdXN0IG9jY3VyIGFmdGVyIGxvYWRpbmcgdGhlIGhlYXAsIHN0YWNrLCBhbmQgZ2xvYmFs
cywgc2luY2UgaXQKCSAqIGNoYW5nZXMgcG9pbnRlcnMgaW4gYWxsIG9mIHRoZW0uCgkgKi8KCXRy
YW5zbGF0ZUhlYXAocywgYmFzZSk7CgoJLyogQWxsb2NhdGUgdG9TcGFjZS4gIFdlIGF0IGxlYXNl
IG11c3QgZG8gdGhpcyBpZiBzLT51c2VGaXhlZEhlYXAuICovCglzLT50b1NpemUgPSBzLT5mcm9t
U2l6ZTsKCXRvU3BhY2Uocyk7CgoJYXNzZXJ0KGludmFyaWFudChzKSk7Cn0KCi8qIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAg
ICAgICAgICAgICBzYXZlU3RhY2sgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgovKiBSZXR1cm5zIGEg
cG9pbnRlciB0byB0aGUgY29udCBvYmplY3QuICovCnBvaW50ZXIgR0Nfc2F2ZVN0YWNrKEdDX3N0
YXRlICpzKSB7Cglwb2ludGVyIGZyb250LCByZXN1bHQ7Cgl1aW50IHNpemU7CgoJc2l6ZSA9IHMt
PnN0YWNrVG9wICsgV09SRF9TSVpFIC0gcy0+c3RhY2tCb3R0b207CgoJLyogRW5zdXJlIGVub3Vn
aCBzcGFjZSBpbiBoZWFwIHRvIHNhdmUgdGhlIHN0YWNrLiAqLwoJcy0+Ynl0ZXNSZXF1ZXN0ZWQg
PSAzICogV09SRF9TSVpFICsgc2l6ZTsKCWlmIChzLT5mcm9udGllciArIHMtPmJ5dGVzUmVxdWVz
dGVkID49IHMtPmxpbWl0KSB7CgkJcy0+bG9jYWxPZmZzZXRzID0gZW1wdHlfR0Nfb2Zmc2V0czsK
CQlHQ19nYyhzKTsKCX0KCglmcm9udCA9IHMtPmZyb250aWVyOwoJKih1aW50Kilmcm9udCA9IENP
TlRfSEVBREVSOwoJZnJvbnQgKz0gV09SRF9TSVpFOwoJcmVzdWx0ID0gZnJvbnQ7CgkqKHVpbnQq
KWZyb250ID0gc2l6ZTsKCWZyb250ICs9IFdPUkRfU0laRTsKCSoodWludCopZnJvbnQgPSBzLT5l
eG5TdGFjazsKCWZyb250ICs9IFdPUkRfU0laRTsKCW1lbWNweShmcm9udCwgcy0+c3RhY2tCb3R0
b20sIHNpemUpOwoJcy0+ZnJvbnRpZXIgPSBmcm9udCArIHNpemU7CgoJcmV0dXJuIHJlc3VsdDsK
fQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAq
LwovKiAgICAgICAgICAgICAgICAgICAgcmVzdG9yZVN0YWNrICAgICAgICAgICAgICAgICAgICov
Ci8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8K
CnZvaWQgR0NfcmVzdG9yZVN0YWNrKEdDX3N0YXRlICpzLCBwb2ludGVyIHApIHsKCXVpbnQgc2l6
ZTsKCglzaXplID0gKih1aW50KilwOwoJcy0+ZXhuU3RhY2sgPSAqKHVpbnQqKShwICsgV09SRF9T
SVpFKTsKCglzbXVubWFwKHMtPnN0YWNrQm90dG9tLCBzLT5zdGFja1NpemUpOwoJcy0+c3RhY2tT
aXplID0gcm91bmRQYWdlKHNpemUpOwoJYWxsb2NhdGVTdGFjayhzKTsKCXMtPnN0YWNrVG9wID0g
cy0+c3RhY2tCb3R0b20gKyBzaXplIC0gV09SRF9TSVpFOwoJbWVtY3B5KHMtPnN0YWNrQm90dG9t
LCBwICsgMiAqIFdPUkRfU0laRSwgc2l6ZSk7Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAABzcmMvcnVudGltZS9tbHRvbi1saWIuYwAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAMTAwNjQ0IAAgIDE3NTAgACAgMTc1MCAAICAgICAgMjQzNjQgIDcwMTAxNDUwMTIg
IDEzNjA3ACAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHVzdGFy
ICAAYW5vcQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABhbm9xAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAC8qIENvcHlyaWdodCAoQykgMTk5Ny0xOTk5IE5FQyBSZXNl
YXJjaCBJbnN0aXR1dGUuCiAqIFBsZWFzZSBzZWUgdGhlIGZpbGUgTElDRU5TRSBmb3IgbGljZW5z
ZSBpbmZvcm1hdGlvbi4KICovCiNpbmNsdWRlICJtbHRvbi1saWIuaCIKCi8qIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAg
ICAgICAgICBjb3VudGVycyAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgp1bGxvbmcgTUxUT05fbnVt
VHJhbXBvbGluZXM7CnVsbG9uZyBNTFRPTl9udW1MaW1pdENoZWNrczsKdWxsb25nIE1MVE9OX251
bUludGVyUmV0dXJuczsKdWxsb25nIE1MVE9OX251bVJldHVybnM7CnVsbG9uZyBNTFRPTl9YbWxL
bm93bjsKdWxsb25nIE1MVE9OX1htbFVua25vd247CnVsbG9uZyBNTFRPTl9TeG1sS25vd247CnVs
bG9uZyBNTFRPTl9TeG1sVW5rbm93bjsKdWxsb25nIE1MVE9OX0Nwc0tub3duOwp1bGxvbmcgTUxU
T05fQ3BzVW5rbm93bjsKdWxsb25nIE1MVE9OX0Nwc0NhbGw7CnVsbG9uZyBNTFRPTl9DcHNMb29w
Owp1bGxvbmcgTUxUT05fQ3BzRGlzcGF0Y2g7CnVsbG9uZyBNTFRPTl9DcHNDb2VyY2U7CgovKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAg
ICAgICAgICAgICAgICAgICAgTUxUT05fYnVnICAgICAgICAgICAgICAgICAgICAgICovCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCnZvaWQg
TUxUT05fYnVnKHN0cmluZyBtc2cpIHsKCWZwcmludGYoc3RkZXJyLCAiTUx0b24gYnVnOiAlcy5c
biVzXG4iLAoJCW1zZywKCQkiUGxlYXNlIHNlbmQgYSBidWcgcmVwb3J0IHRvIE1MdG9uQHJlc2Vh
cmNoLm5qLm5lYy5jb20uIik7CiAJZXhpdCgyKTsKfQoKLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwovKiAgICAgICAgICAgICAgICAgICAgIE1M
VE9OX2luaXQgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgp2b2lkIE1MVE9OX3VzYWdlKHN0cmluZyBz
KSB7CglkaWUoIlVzYWdlOiAlcyBbQE1MdG9uIFtsb2FkLXdvcmxkIGZpbGVdIFtmaXhlZC1oZWFw
IG5be2t8bX1dXSBbbWF4LWhlYXAgblt7a3xtfV1dIFtnYy1tZXNzYWdlc10gW2djLXN1bW1hcnld
IC0tXSBhcmdzIiwgCgkJcyk7Cn0KCnVpbnQgc3RyaW5nVG9CeXRlcyhzdHJpbmcgcykgewoJY2hh
ciBjOwoJdWludCByZXN1bHQ7CglpbnQgaSwgbTsKCQoJcmVzdWx0ID0gMDsKCWkgPSAwOwoKCXdo
aWxlICgoYyA9IHNbaSsrXSkgIT0gJ1wwMDAnKSB7CgkJc3dpdGNoIChjKSB7CgkJY2FzZSAnbSc6
CgkJCWlmIChzW2ldID09ICdcMDAwJykgCgkJCQlyZXN1bHQgPSByZXN1bHQgKiAxMDQ4NTc2OwoJ
CQllbHNlIHJldHVybiAwOwoJCQlicmVhazsKCQljYXNlICdrJzoKCQkJaWYgKHNbaV0gPT0gJ1ww
MDAnKSAKCQkJCXJlc3VsdCA9IHJlc3VsdCAqIDEwMjQ7CgkJCWVsc2UgcmV0dXJuIDA7CgkJCWJy
ZWFrOwoJCWRlZmF1bHQ6CgkJCW0gPSAoaW50KShjIC0gJzAnKTsKCQkJaWYgKDAgPD0gbSBhbmQg
bSA8PSA5KQoJCQkJcmVzdWx0ID0gcmVzdWx0ICogMTAgKyBtOwoJCQllbHNlIHJldHVybiAwOwoJ
CX0KCX0KCQoJcmV0dXJuIHJlc3VsdDsKfQoKdm9pZCBNTFRPTl9pbml0KGludCBhcmdjLCAKCSAg
ICAgICBjaGFyICoqYXJndiwKCSAgICAgICBNTFRPTl9zdGF0ZSAqc3RhdGUsCgkgICAgICAgdWlu
dCBtYWdpYywKCSAgICAgICB2b2lkICgqbG9hZEdsb2JhbHMpKEZJTEUgKmZpbGUpKSB7CglHQ19z
dGF0ZSAqZ2NTdGF0ZTsKCWNoYXIgKndvcmxkRmlsZTsKCWludCBpOwoJYm9vbCBkb25lLCBoZWFw
U2l6ZUNvbW1hbmRMaW5lOwoKCWdjU3RhdGUgPSBzdGF0ZS0+Z2NTdGF0ZTsKCQoJc3RhdGUtPmlz
T3JpZ2luYWwgPSBUUlVFOwoJc3RhdGUtPm1hZ2ljID0gbWFnaWM7CgkKCWdjU3RhdGUtPm1lc3Nh
Z2VzID0gRkFMU0U7CglnY1N0YXRlLT5zdW1tYXJ5ID0gRkFMU0U7CgloZWFwU2l6ZUNvbW1hbmRM
aW5lID0gRkFMU0U7CglnY1N0YXRlLT5tYXhIZWFwU2l6ZSA9IDA7CgkKCU1MVE9OX251bVRyYW1w
b2xpbmVzID0gMDsKCU1MVE9OX251bUxpbWl0Q2hlY2tzID0gMDsKCU1MVE9OX251bUludGVyUmV0
dXJucyA9IDA7CglNTFRPTl9udW1SZXR1cm5zID0gMDsKCU1MVE9OX1htbEtub3duID0gMDsKCU1M
VE9OX1htbFVua25vd24gPSAwOwoJTUxUT05fU3htbEtub3duID0gMDsKCU1MVE9OX1N4bWxVbmtu
b3duID0gMDsKCU1MVE9OX0Nwc0tub3duID0gMDsKCU1MVE9OX0Nwc1Vua25vd24gPSAwOwoJTUxU
T05fQ3BzQ2FsbCA9IDA7CglNTFRPTl9DcHNMb29wID0gMDsKCU1MVE9OX0Nwc0Rpc3BhdGNoID0g
MDsKCU1MVE9OX0Nwc0NvZXJjZSA9IDA7CgkKCWkgPSAxOwoJaWYgKGFyZ2MgPiAxIGFuZCAoMCA9
PSBzdHJjbXAoYXJndlsxXSwgIkBNTHRvbiIpKSkgewoJCS8qIHByb2Nlc3MgQE1MdG9uIGFyZ3Mg
Ki8KCQlpID0gMjsKCQlkb25lID0gRkFMU0U7CgkJd2hpbGUgKCFkb25lKSB7CgkJCWlmIChpID09
IGFyZ2MpCgkJCQlNTFRPTl91c2FnZShhcmd2WzBdKTsKCQkJZWxzZSB7CgkJCQlzdHJpbmcgYXJn
OwoKCQkJCWFyZyA9IGFyZ3ZbaV07CgkJCQlpZiAoMCA9PSBzdHJjbXAoYXJnLCAiZml4ZWQtaGVh
cCIpKSB7CgkJCQkJKytpOwoJCQkJCWlmIChpID09IGFyZ2MpCgkJCQkJCU1MVE9OX3VzYWdlKGFy
Z3ZbMF0pOwoJCQkJCWhlYXBTaXplQ29tbWFuZExpbmUgPSBUUlVFOwoJCQkJCWdjU3RhdGUtPnVz
ZUZpeGVkSGVhcCA9IFRSVUU7CgkJCQkJZ2NTdGF0ZS0+ZnJvbVNpemUgPQoJCQkJCQlzdHJpbmdU
b0J5dGVzKGFyZ3ZbaSsrXSk7CgkJCQl9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGFyZywgIm1heC1o
ZWFwIikpIHsKCQkJCQkrK2k7CgkJCQkJaWYgKGkgPT0gYXJnYykgCgkJCQkJCU1MVE9OX3VzYWdl
KGFyZ3ZbMF0pOwoJCQkJCWhlYXBTaXplQ29tbWFuZExpbmUgPSBUUlVFOwoJCQkJCWdjU3RhdGUt
PnVzZUZpeGVkSGVhcCA9IEZBTFNFOwoJCQkJCWdjU3RhdGUtPm1heEhlYXBTaXplID0KCQkJCQkJ
c3RyaW5nVG9CeXRlcyhhcmd2W2krK10pOwoJCQkJfSBlbHNlIGlmICgwID09IHN0cmNtcChhcmcs
ICJnYy1tZXNzYWdlcyIpKSB7CgkJCQkJKytpOwoJCQkJCWdjU3RhdGUtPm1lc3NhZ2VzID0gVFJV
RTsKCQkJCX0gZWxzZSBpZiAoMCA9PSBzdHJjbXAoYXJnLCAiZ2Mtc3VtbWFyeSIpKSB7CgkJCQkJ
KytpOwoJCQkJCWdjU3RhdGUtPnN1bW1hcnkgPSBUUlVFOwoJCQkJfSBlbHNlIGlmICgwID09IHN0
cmNtcChhcmcsICJsb2FkLXdvcmxkIikpIHsKCQkJCQkrK2k7CgkJCQkJaWYgKGkgPT0gYXJnYykg
CgkJCQkJCU1MVE9OX3VzYWdlKGFyZ3ZbMF0pOwoJCQkJCWlmIChOVUxMID09IGxvYWRHbG9iYWxz
KSAKCQkJCQkJZGllKCIlcyBjYW5ub3QgbG9hZCBhIHdvcmxkIGZpbGUuIiwgYXJndlswXSk7CgkJ
CQkJc3RhdGUtPmlzT3JpZ2luYWwgPSBGQUxTRTsKCQkJCQl3b3JsZEZpbGUgPSBhcmd2W2krK107
CgkJCQl9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGFyZywgIi0tIikpIHsKCQkJCQkrK2k7CgkJCQkJ
ZG9uZSA9IFRSVUU7CgkJCQl9IGVsc2UgaWYgKGkgPiAxKQoJCQkJCU1MVE9OX3VzYWdlKGFyZ3Zb
MF0pOwoJCQkgICAgICAgIGVsc2UgZG9uZSA9IFRSVUU7CgkJCX0KCQl9Cgl9CgkKCWlmIChzdGF0
ZS0+aXNPcmlnaW5hbCkgCgkJR0NfaW5pdChnY1N0YXRlKTsKCWVsc2UgCgkJR0NfbG9hZFdvcmxk
KGdjU3RhdGUsIG1hZ2ljLCB3b3JsZEZpbGUsIGhlYXBTaXplQ29tbWFuZExpbmUsCgkJCQlsb2Fk
R2xvYmFscyk7CgkKCS8qIFNldHVwIGFyZ3YgYW5kIGFyZ2MgdGhhdCBTTUwgc2Vlcy4gKi8KCS8q
IGkgaXMgbm93IHRoZSBpbmRleCBvZiB0aGUgZmlyc3QgcmVhbCBhcmcgKi8KCXN0YXRlLT5jb21t
YW5kTmFtZSA9ICh1aW50KShhcmd2WzBdKTsKCXN0YXRlLT5hcmdjID0gYXJnYyAtIGk7CglzdGF0
ZS0+YXJndiA9ICh1aW50KShhcmd2ICsgaSk7CgkKI2lmIGRlZmluZWQoX1dJTjMyKQojZWxzZQoJ
c3RhdGUtPmVudmlyb24gPSAodWludCkgZW52aXJvbjsKI2VuZGlmCn0KCnZvaWQgcHJpbnQocG9p
bnRlciBzKSB7Cglmd3JpdGUocywgMSwgR0NfYXJyYXlOdW1FbGVtZW50cyhzKSwgc3RkZXJyKTsK
fQoKaW50IHN0cmluZ0VxdWFsKHBvaW50ZXIgczEsIHBvaW50ZXIgczIpIHsKCWlmIChzMSA9PSBz
MikgcmV0dXJuIFRSVUU7CgllbHNlIHsKCQlpbnQgbjEsIG4yOwoKCQluMSA9IEdDX2FycmF5TnVt
RWxlbWVudHMoczEpOwoJCW4yID0gR0NfYXJyYXlOdW1FbGVtZW50cyhzMik7CgkJaWYgKG4xICE9
IG4yKSAKCQkJcmV0dXJuIEZBTFNFOwoJCWVsc2UgewoJCQlpbnQgaTsJCgkJCWZvcihpID0gMDsg
aSA8IG4xIDsgKytpKQoJCQkJaWYgKCooczEgKyBpKSAhPSAqKHMyICsgaSkpIAoJCQkJCXJldHVy
biBGQUxTRTsKCQl9Cgl9CgkKCXJldHVybiBUUlVFOwp9CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAgICAgICAgICAgICAgICAgICAg
ICAgSW50ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKdm9pZCBNTFRPTl9vdmVyZmxvdygpIHsK
CWRpZSgiTUx0b24gZG9lcyBub3QgaGFuZGxlIG92ZXJmbG93LiIpOwp9CgppbnQgTUxUT05fSW50
X2FkZENoZWNrKGludCBuMSwgaW50IG4yKSB7CglyZWdpc3RlciBpbnQgZWF4IGFzbSgiYXgiKTsK
CgllYXggPSBuMTsKCiAJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJhZGRsICUxLCAlMFxuXHRqbyBN
TFRPTl9vdmVyZmxvdyIKCQk6CgkJOiAiciIgKGVheCksICJtIiAobjIpCgkJOiAiZWF4Iik7CgoJ
cmV0dXJuIGVheDsKfQoKaW50IE1MVE9OX0ludF9zdWJDaGVjayhpbnQgbjEsIGludCBuMikgewoJ
cmVnaXN0ZXIgaW50IGVheCBhc20oImF4Iik7CgoJZWF4ID0gbjE7CgogCV9fYXNtX18gX192b2xh
dGlsZV9fICgic3VibCAlMSwgJTBcblx0am8gTUxUT05fb3ZlcmZsb3ciCgkJOgoJCTogInIiIChl
YXgpLCAibSIgKG4yKQoJCTogImVheCIpOwoKCXJldHVybiBlYXg7Cn0KCmludCBNTFRPTl9JbnRf
bXVsQ2hlY2soaW50IG4xLCBpbnQgbjIpIHsKCXJlZ2lzdGVyIGludCBlYXggYXNtKCJheCIpOwoK
CWVheCA9IG4xOwoKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImltdWxsICUxLCAlMFxuXHRqbyBN
TFRPTl9vdmVyZmxvdyIKCQk6CgkJOiAiciIgKGVheCksICJtIiAobjIpCgkJOiAiZWF4Iik7CgoJ
cmV0dXJuIGVheDsKfQoKaW50IGludFF1b3QoaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9y
KSB7CglyZWdpc3RlciBpbnQgZWF4IGFzbSgiYXgiKTsKCQoJZWF4ID0gbnVtZXJhdG9yIDsKCQoJ
X19hc21fXyBfX3ZvbGF0aWxlX18gKCJjZHFcbiAgICAgICAgaWRpdmwgJTEiCgkJOiAKCQk6ICJy
IiAoZWF4KSwgIm0iIChkZW5vbWluYXRvcikKCQk6ICJlYXgiLCAiZWR4Iik7CgkKCXJldHVybiBl
YXg7Cn0KCmludCBpbnRSZW0oaW50IG51bWVyYXRvciwgaW50IGRlbm9taW5hdG9yKSB7CglyZWdp
c3RlciBpbnQgZWF4IGFzbSgiYXgiKSwKCQkJZWR4IGFzbSgiZHgiKTsKCQoJZWF4ID0gbnVtZXJh
dG9yIDsKCQoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJjZHFcbiAgICAgICAgaWRpdmwgJTEiCgkJ
OiAKCQk6ICJyIiAoZWF4KSwgIm0iIChkZW5vbWluYXRvcikKCQk6ICJlYXgiLCAiZWR4Iik7CgkK
CXJldHVybiBlZHg7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIFJlYWwgICAgICAgICAgICAg
ICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tICovCgovKiBBbGwgdGhpcyBjb2RlIGFzc3VtZXMgSUVFRSA3NTQvODU0IGFuZCBs
aXR0bGUgZW5kaWFuLgogKgogKiBJbiBtZW1vcnksIHRoZSA2NCBiaXRzIGEgZG91YmxlIGFyZSBs
YXllZCBvdXQgYXMgZm9sbG93cy4KICoKICogYml0cyA3LTAgb2YgbWFudGlzc2EKICogYml0cyAx
NS04IG9mIG1hbnRpc3NhCiAqIGJpdHMgMjMtMTYgb2YgbWFudGlzc2EKICogYml0cyAzMS0yNCBv
ZiBtYW50aXNzYQogKiBiaXRzIDM5LTMyIG9mIG1hbnRpc3NhCiAqIGJpdHMgNDctNDAgb2YgbWFu
dGlzc2EKICogYml0cyAzLTAgb2YgZXhwb25lbnQKICogYml0cyA1MS00OCBvZiBtYW50aXNzYQog
KiBzaWduIGJpdAogKiBiaXRzIDEwLTQgb2YgZXhwb25lbnQKICovCgppbnQgc2lnbkJpdChkb3Vi
bGUgZCkgewoJcmV0dXJuICgoKHVuc2lnbmVkIGNoYXIgKikmZClbN10gJiAweDgwKSA+PiA3Owp9
CgovKiBtYXNrcyBmb3Igd29yZCAxICovCiNkZWZpbmUgRVhQT05FTlRfTUFTSyAweDdGRjAwMDAw
CiNkZWZpbmUgTUFOVElTU0FfTUFTSyAweDAwMEZGRkZGCiNkZWZpbmUgU0lHTkJJVF9NQVNLICAw
eDgwMDAwMDAwCiNkZWZpbmUgTUFOVElTU0FfSElHSEJJVF9NQVNLIDB4MDAwODAwMDAKCmludCBj
bGFzcyhkb3VibGUgZCkgewoJdWludCB3b3JkMCwgd29yZDE7CgoJd29yZDAgPSAoKHVpbnQgKikm
ZClbMF07Cgl3b3JkMSA9ICgodWludCAqKSZkKVsxXTsKCQoJaWYgKCh3b3JkMSAmIEVYUE9ORU5U
X01BU0spID09IEVYUE9ORU5UX01BU0spIHsKCQkvKiBOQU5fUVVJRVQsIE5BTl9TSUdOQUxMSU5H
LCBvciBJTkYgKi8KCQlpZiAod29yZDAgb3IgKHdvcmQxICYgTUFOVElTU0FfTUFTSykpIHsKCQkJ
LyogTkFOX1FVSUVUIG9yIE5BTl9TSUdOQUxMSU5HIC0tIGxvb2sgYXQgdGhlIGhpZ2hlc3QgYml0
IG9mIG1hbnRpc3NhICovCgkJCWlmICh3b3JkMSAmIE1BTlRJU1NBX0hJR0hCSVRfTUFTSykKCQkJ
CXJldHVybiBOQU5fUVVJRVQ7CgkJCWVsc2UKCQkJCXJldHVybiBOQU5fU0lHTkFMTElORzsKCQl9
IGVsc2UKCQkJcmV0dXJuIElORjsKCX0gZWxzZSB7CgkJLyogWkVSTywgTk9STUFMLCBvciBTVUJO
T1JNQUwgKi8KCQlpZiAod29yZDEgJiBFWFBPTkVOVF9NQVNLKQogICAgICAgCQkJcmV0dXJuIE5P
Uk1BTDsKCQllbHNlIGlmICh3b3JkMCBvciAod29yZDEgJiBNQU5USVNTQV9NQVNLKSkKCQkJcmV0
dXJuIFNVQk5PUk1BTDsKCQllbHNlCgkJCXJldHVybiBaRVJPOwoJfQp9CgppbnQgaXNGaW5pdGUo
ZG91YmxlIGQpIHsKCXVpbnQgd29yZDE7CgoJd29yZDEgPSAoKHVpbnQgKikmZClbMV07CgoJcmV0
dXJuICEoKHdvcmQxICYgRVhQT05FTlRfTUFTSykgPT0gRVhQT05FTlRfTUFTSyk7Cn0KCmludCBp
c05hbihkb3VibGUgZCkgewoJdWludCB3b3JkMCwgd29yZDE7CgoJd29yZDAgPSAoKHVpbnQgKikm
ZClbMF07CiAgCXdvcmQxID0gKCh1aW50ICopJmQpWzFdOwoKCXJldHVybiAoKCh3b3JkMSAmIEVY
UE9ORU5UX01BU0spID09IEVYUE9ORU5UX01BU0spCgkJYW5kICh3b3JkMCBvciAod29yZDEgJiBN
QU5USVNTQV9NQVNLKSkpOwp9CgppbnQgaXNOb3JtYWwoZG91YmxlIGQpIHsKCXVpbnQgd29yZDEs
IGV4cG9uZW50OwoKCXdvcmQxID0gKCh1aW50ICopJmQpWzFdOwogIAogIAlleHBvbmVudCA9IHdv
cmQxICYgRVhQT05FTlRfTUFTSzsKCglyZXR1cm4gbm90KGV4cG9uZW50ID09IDAgb3IgZXhwb25l
bnQgPT0gRVhQT05FTlRfTUFTSyk7Cn0KCiNkZWZpbmUgUk9VTkRJTkdfQ09OVFJPTF9NQVNLIDB4
MEMwMAojZGVmaW5lIFJPVU5ESU5HX0NPTlRST0xfU0hJRlQgMTAKCnZvaWQgc2V0Um91bmRpbmdN
b2RlKGludCBtb2RlKSB7Cgl1bnNpZ25lZCBzaG9ydCBjb250cm9sV29yZDsKCglfX2FzbV9fIF9f
dm9sYXRpbGVfXyAoImZzdGN3ICUwIgoJCQk6ICI9bSIgKGNvbnRyb2xXb3JkKQoJCQk6ICk7Cglj
b250cm9sV29yZCA9ICAKCQkobW9kZSA8PCBST1VORElOR19DT05UUk9MX1NISUZUKSAKCQl8IChj
b250cm9sV29yZCAmIH5ST1VORElOR19DT05UUk9MX01BU0spOwoKCV9fYXNtX18gX192b2xhdGls
ZV9fICgiZmxkY3cgJTAiCiAgICAgICAgICAgICAgICAgICAgICAgIDoKCQkJOiAibSIgKGNvbnRy
b2xXb3JkKSk7Cn0KCmludCBnZXRSb3VuZGluZ01vZGUoKSB7Cgl1bnNpZ25lZCBzaG9ydCBjb250
cm9sV29yZDsKCglfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZzdGN3ICUwIgoJCQk6ICI9bSIgKGNv
bnRyb2xXb3JkKQoJCQk6ICk7CgoJcmV0dXJuIChjb250cm9sV29yZCAmIFJPVU5ESU5HX0NPTlRS
T0xfTUFTSykgPj4gUk9VTkRJTkdfQ09OVFJPTF9TSElGVDsKfQoKZG91YmxlIHJvdW5kKGRvdWJs
ZSBkKSB7CglyZWdpc3RlciBkb3VibGUgZjA7CgoJZjAgPSBkOwoKCV9fYXNtX18gX192b2xhdGls
ZV9fICgiZnJuZGludCIKCQkJOgoJCQk6ICJ0IiAoZjApKTsKCglyZXR1cm4gZjA7Cn0KCi8qIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAg
ICAgICAgICAgICAgICAgICAgIE1MdG9uICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKLyogTGlu
dXggc3BlY2lmaWMuICBVc2VzIC9kZXYvcmFuZG9tIHRvIGdldCBhIHJhbmRvbSB3b3JkLiAqLwp1
aW50IE1MVE9OX01MdG9uX3JhbmRvbSgpIHsKCXVpbnQgcmVzdWx0OwojaWYgZGVmaW5lZChfV0lO
MzIpCglyZXN1bHQgPSByYW5kKCk7CiNlbHNlCglGSUxFICpmaWxlOwoKCWZpbGUgPSBzb3Blbigi
L2Rldi9yYW5kb20iLCAiciIpOwoJcmVzdWx0ID0gc3JlYWRVaW50KGZpbGUpOwoJZmNsb3NlKGZp
bGUpOwojZW5kaWYKCXJldHVybiByZXN1bHQ7Cn0KCi8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLyogICAgICAgICAgICAgICAgICAgICAgIERh
dGUgICAgICAgICAgICAgICAgICAgICAgICAqLwovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgpzdHJ1Y3QgdG0gTUxUT05fdG07CgovKiBCZWdp
biBtb2RpZmllZCBmcm9tIEtpdFYzIHNyYy9SdW50aW1lL1RpbWUuYyAqLwoKLyogU3VuT1MgNCBh
cHBlYXJzIG5vdCB0byBoYXZlIG1rdGltZTogKi8KI2lmIGRlZmluZWQoc3VuKSAmJiAhZGVmaW5l
ZChfX3N2cjRfXykKI2RlZmluZSB0bTJjYWwodHB0cikgICB0aW1lbG9jYWwodHB0cikKI2Vsc2UK
I2RlZmluZSB0bTJjYWwodHB0cikgICBta3RpbWUodHB0cikKI2VuZGlmCgppbnQgTUxUT05fbG9j
YWxvZmZzZXQgKCkgewoJc3RydWN0IHRtICpnbXQ7Cgl0aW1lX3QgdDEsIHQyLCB0ZDsKCgl0MSA9
IHRpbWUoKHRpbWVfdCopMCk7CglnbXQgPSBnbXRpbWUgKCZ0MSk7Cgl0MiA9IHRtMmNhbChnbXQp
OwogIAogIC8qIFN1bk9zIGFwcGVhcnMgdG8gbGFjayBkaWZmdGltZTogKi8KI2lmIGRlZmluZWQo
c3VuKSAmJiAhZGVmaW5lZChfX3N2cjRfXykKCXRkID0gKHRpbWVfdCkoKGxvbmcpdDIgLSAobG9u
Zyl0MSk7CiNlbHNlCgl0ZCA9IGRpZmZ0aW1lKHQyLCB0MSk7CiNlbmRpZgoKCXJldHVybiB0ZDsK
fQoKLyogRW5kIG1vZGlmaWVkIGZyb20gS2l0VjMgc3JjL1J1bnRpbWUvVGltZS5jICovCgovKiAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi8qICAg
ICAgICAgICAgICAgICAgICAgICBUaW1lICAgICAgICAgICAgICAgICAgICAgICAgKi8KLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKI2lmIGRl
ZmluZWQgKF9XSU4zMikKI2Vsc2UKc3RydWN0IHRpbWV2YWwgTUxUT05fdGltZXZhbDsKI2VuZGlm
CgovKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICov
Ci8qICAgICAgICAgICAgICAgICAgICAgICBXb3JkICAgICAgICAgICAgICAgICAgICAgICAgKi8K
LyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoK
dWludCBNTFRPTl9Xb3JkMzJfYXJzaGlmdEFzbSh1aW50IHcsIHVpbnQgcykgewoJcmVnaXN0ZXIg
dWNoYXIgY2wgYXNtKCJjbCIpOwoJCglpZiAocyA+IDMxKSBjbCA9IDMxOwoJZWxzZSBjbCA9IHM7
CgoJX19hc21fXyBfX3ZvbGF0aWxlX18gKCJzYXJsICUlY2wsICUwIgoJCQkgICAgICA6CgkJCSAg
ICAgIDogIm0iICh3KSwgInIiIChjbCkpOwoJcmV0dXJuIHc7Cn0KCnVjaGFyIE1MVE9OX1dvcmQ4
X2Fyc2hpZnQodWNoYXIgdywgdWludCBzKSB7CglyZWdpc3RlciB1Y2hhciBjbCBhc20oImNsIik7
CgkKCWlmIChzID4gNykgY2wgPSA3OwoJZWxzZSBjbCA9IHM7CgoJX19hc21fXyBfX3ZvbGF0aWxl
X18gKCJzYXJiICUlY2wsICUwIgoJCQkgICAgICA6CgkJCSAgICAgIDogIm0iICh3KSwgInIiIChj
bCkpOwoJcmV0dXJuIHc7Cn0KAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AHNyYy9ydW50aW1lL21sdG9uLXBvc2l4LmMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1
MCAAICAxNzUwIAAgICAgICAgNDE1NiAgNzAxMDE0NTAxNyAgMTQxNjUAIDAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
LyogQ29weXJpZ2h0IChDKSAxOTk3LTE5OTkgTkVDIFJlc2VhcmNoIEluc3RpdHV0ZS4KICogUGxl
YXNlIHNlZSB0aGUgZmlsZSBMSUNFTlNFIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uLgogKi8KI2lu
Y2x1ZGUgIm1sdG9uLWxpYi5oIgoKI2lmIGRlZmluZWQoX1dJTjMyKQojZWxzZQpzdHJ1Y3QgdG1z
IE1MVE9OX3RtczsKI2VuZGlmCgpzdHJ1Y3Qgc3RhdCBNTFRPTl9zdGF0OwoKc3RydWN0IHV0aW1i
dWYgTUxUT05fdXRpbWJ1ZjsKCiNpZiBkZWZpbmVkKF9XSU4zMikKI2Vsc2UKc3RydWN0IHV0c25h
bWUgTUxUT05fdXRzbmFtZTsKCnN0cnVjdCBmbG9jayBNTFRPTl9mbG9jazsKCnN0cnVjdCB0ZXJt
aW9zIE1MVE9OX3Rlcm1pb3M7CiNlbmRpZgoKLyogUmlnaHQgbm93IHRoaXMgaXMgbWVzc3kgYmVj
YXVzZSBtbHRvbiBoYXMgbm8gd2F5IG9mIGRlYWxpbmcgd2l0aCB1bnNpZ25lZCAKICogc2hvcnRz
IChpLmUuIGdpZF90KS4KICovCiNpZiBkZWZpbmVkKF9XSU4zMikKI2Vsc2UKaW50IE1MVE9OX2dl
dGdyb3Vwcyhwb2ludGVyIGdyb3VwcykgewoJaW50IGksIHJlc3VsdDsKCWdpZF90IGdyb3VwTGlz
dFtNTFRPTl9udW1ncm91cHNdOwoJCglyZXN1bHQgPSBnZXRncm91cHMoTUxUT05fbnVtZ3JvdXBz
LCBncm91cExpc3QpOwoJCglmb3IgKGkgPSAwOyBpIDwgcmVzdWx0OyBpKyspCgkJKCh1aW50Kiln
cm91cHMpW2ldID0gZ3JvdXBMaXN0W2ldOwoJCglyZXR1cm4gcmVzdWx0Owp9CiNlbmRpZgoKI2lm
IGRlZmluZWQoX1dJTjMyKQovL0ZJWE1FOiBJIGRvbid0IGtub3cgaG93IHRoaXMgaXMgc3VwcG9z
ZWQgdG8gd29yaywgYnV0Ci8vIHRoaXMgd2luZG93cyBmdW5jdGlvbiBtaWdodCBiZSB1c2VmdWw6
Ci8vIFdpbkV4ZWMobmFtZSwgU1dfU0hPV05PUk1BTCk7CgovLyBPciBmb3IgYSBsZXNzIHNpbXBs
ZSB2ZXJzaW9uLCB3aGljaCBJIGRvbid0IGtub3cgaG93IHJlYWxseSB3b3JrczoKLy9DcmVhdGVQ
cm9jZXNzKG5hbWUsIE5VTEwsIE5VTEwsIE5VTEwsIEZBTFNFLCAwLAovLyAgICAgICAgICAgICAg
TlVMTCwgTlVMTCwKLy8gICAgICAgICAgICAgIE5VTEwvKiBNYXkgbm90IGJlIE5VTEwgKi8sCi8v
ICAgICAgICAgICAgICBOVUxMLyogTWF5IG5vdCBiZSBOVUxMICovKTsKI2Vsc2UKaW50IE1MVE9O
X2V4ZWMocG9pbnRlciBwLCBwb2ludGVyIGEpIHsKCWNoYXIgKnBhdGgsICpzYXZlZCwgKiphcmdz
OwoJaW50IG4sIHJlc3VsdDsKCglwYXRoID0gKGNoYXIqKXA7CglhcmdzID0gKGNoYXIqKilhOwoJ
biA9IEdDX2FycmF5TnVtRWxlbWVudHMoYXJncykgLSAxOwoJc2F2ZWQgPSBhcmdzW25dOwoJYXJn
c1tuXSA9IChjaGFyKilOVUxMOwoJcmVzdWx0ID0gZXhlY3YocGF0aCwgYXJncyk7CgkvKiBleGVj
IGZhaWxlZCAqLwoJYXJnc1tuXSA9IHNhdmVkOwoJcmV0dXJuIHJlc3VsdDsKfQoKaW50IE1MVE9O
X2V4ZWNlKHBvaW50ZXIgcCwgcG9pbnRlciBhLCBwb2ludGVyIGUpIHsKCWNoYXIgKnBhdGgsICph
c2F2ZWQsICplc2F2ZWQsICoqYXJncywgKiplbnY7CglpbnQgYW4sIGVuLCByZXN1bHQ7CgoJcGF0
aCA9IChjaGFyKilwOwoJYXJncyA9IChjaGFyKiopYTsKCWVudiA9IChjaGFyKiopZTsKCWFuID0g
R0NfYXJyYXlOdW1FbGVtZW50cyhhcmdzKSAtIDE7Cglhc2F2ZWQgPSBhcmdzW2FuXTsKCWVuID0g
R0NfYXJyYXlOdW1FbGVtZW50cyhlbnYpIC0gMTsKCWVzYXZlZCA9IGVudltlbl07CglhcmdzW2Fu
XSA9IChjaGFyKilOVUxMOwoJZW52W2VuXSA9IChjaGFyKilOVUxMOwoJcmVzdWx0ID0gZXhlY3Zl
KHBhdGgsIGFyZ3MsIGVudik7CgkvKiBleGVjZSBmYWlsZWQgKi8KCWFyZ3NbYW5dID0gYXNhdmVk
OwoJZW52W2VuXSA9IGVzYXZlZDsKCXJldHVybiByZXN1bHQ7Cn0KCmludCBNTFRPTl9leGVjcChw
b2ludGVyIGYsIHBvaW50ZXIgYSkgewoJY2hhciAqZmlsZSwgKnNhdmVkLCAqKmFyZ3M7CglpbnQg
biwgcmVzdWx0OwoKCWZpbGUgPSAoY2hhciopZjsKCWFyZ3MgPSAoY2hhcioqKWE7CgluID0gR0Nf
YXJyYXlOdW1FbGVtZW50cyhhcmdzKSAtIDE7CglzYXZlZCA9IGFyZ3Nbbl07CglhcmdzW25dID0g
KGNoYXIqKU5VTEw7CglyZXN1bHQgPSBleGVjdnAoZmlsZSwgYXJncyk7CgkvKiBleGVjcCBmYWls
ZWQgKi8KCWFyZ3Nbbl0gPSBzYXZlZDsKCXJldHVybiByZXN1bHQ7Cn0KI2VuZGlmCgAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHNyYy9y
dW50aW1lL01ha2VmaWxlAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMDA2NDQgACAgMTc1MCAAICAx
NzUwIAAgICAgICAgMzMyMyAgNzAxMDE0NTE1NSAgMTMxNjYAIDAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdXN0YXIgIABhbm9xAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAGFub3EAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASU5DX0RJ
UiA9CS4uLy4uL2luY2x1ZGUKCkNDID0JCWdjYyAtSSQoSU5DX0RJUikgCgpDRkxBR1MgPQktV2Fs
bCAtTzIKCkFSID0JCWFyIHJjCgpMSUIgPQkJLi4vLi4vbGliCgpJTkNMVURFUyA9CSQoSU5DX0RJ
UikvaW50LWluZi5oCQlcCgkJJChJTkNfRElSKS9teS1saWIuaAkJXAoJCSQoSU5DX0RJUikvZ2Mu
aAkJCVwKCQkkKElOQ19ESVIpL21sdG9uLWxpYi5oCQlcCgkJJChJTkNfRElSKS9tbHRvbi1wb3Np
eC5oCgpPQkpTID0JCW15LWxpYi5vCVwKCQltbHRvbi1saWIubwlcCgkJbWx0b24tcG9zaXgubyAK
CmFsbDogZ21wIGxpYm1sdG9uLWdkYiBsaWJtbHRvbgoKLlBIT05ZOiBsaWJtbHRvbgpsaWJtbHRv
bjogJChMSUIpL2xpYm1sdG9uLmEKCQokKExJQikvbGlibWx0b24uYTogJChPQkpTKSBpbnQtaW5m
Lm8gZ2MubwoJL2Jpbi9ybSAtZiBsaWJtbHRvbi5hCgkkKEFSKSAkKExJQikvbGlibWx0b24uYSAk
KE9CSlMpIGludC1pbmYubyBnYy5vCgouUEhPTlk6IGxpYm1sdG9uLWdkYgpsaWJtbHRvbi1nZGI6
ICQoTElCKS9saWJtbHRvbi1nZGIuYQoKJChMSUIpL2xpYm1sdG9uLWdkYi5hOiAkKE9CSlMpIGlu
dC1pbmYtZ2RiLm8gZ2MtZ2RiLm8KCS9iaW4vcm0gLWYgbGlibWx0b24tZ2RiLmEKCSQoQVIpICQo
TElCKS9saWJtbHRvbi1nZGIuYSAkKE9CSlMpIGludC1pbmYtZ2RiLm8gZ2MtZ2RiLm8KCmdjLm86
ICQoSU5DTFVERVMpIGdjLmMKCSQoQ0MpICQoQ0ZMQUdTKSAtYyAtRE5PREVCVUcgZ2MuYwoKZ2Mt
Z2RiLm86ICQoSU5DTFVERVMpIGdjLmMKCSQoQ0MpIC1XYWxsIC1nIC1jIC1vIGdjLWdkYi5vIGdj
LmMKCmludC1pbmYubzogJChJTkNMVURFUykgaW50LWluZi5jCgkkKENDKSAkKENGTEFHUykgLWMg
LW8gaW50LWluZi5vIGludC1pbmYuYwoKaW50LWluZi1nZGIubzogJChJTkNMVURFUykgaW50LWlu
Zi5jCgkkKENDKSAtV2FsbCAtZyAtYyAtbyBpbnQtaW5mLWdkYi5vIGludC1pbmYuYwoKbWx0b24t
bGliLm86ICQoSU5DTFVERVMpCm1sdG9uLXBvc2l4Lm86ICQoSU5DTFVERVMpCgpnbXA6Cgl7IFsg
Z21wLmggLW50IGdtcC0yLjAuMi50Z3ogXQkJCQkJCVwKCQkmJiBbIC4uLy4uL2xpYi9saWJnbXAu
YSAtbnQgZ21wLTIuMC4yLnRneiBdOyB9IHx8IHsJCVwKCQkJcm0gLXJmIGdtcC5oIC4uL2xpYi9s
aWJnbXAuYSBnbXAtc3R1ZmYgJiYJCVwKCQkJbWtkaXIgZ21wLXN0dWZmIGdtcC1zdHVmZi9pbmZv
ICYmCQkJXAoJCQllY2hvICdhJyB8IHRyICdhJyAnXDAzNycgPmdtcC1zdHVmZi9pbmZvL2RpciAm
JgkJXAoJCQl7IFsgLWQgZ21wLTIuMC4yIF0gfHwJCQkJCVwKCQkJCXpjYXQgPGdtcC0yLjAuMi50
Z3ogfCB0YXIgeGYgLTsgfSAmJgkJXAoJCQkJY2QgZ21wLTIuMC4yICYmCQkJCQlcCgkJCQkuL2Nv
bmZpZ3VyZSAtLWhvc3Q9aTU4Ni11bmtub3duLWxpbnV4IC0tdGFyZ2V0PWkzODYtdW5rbm93bi13
aW4zMiAtLXByZWZpeD1gcHdkYC8uLi9nbXAtc3R1ZmYgJiYJXAoJCQkJbWFrZSBDRkxBR1M9LU8g
aW5zdGFsbCBkaXN0Y2xlYW4gJiYJCVwKCQkJCWNkIC4uICYmCQkJCQlcCgkJCQlybSAtcmYgZ21w
LTIuMC4yICYmCQkJCVwKCQkJCW12IGdtcC1zdHVmZi9pbmNsdWRlL2dtcC5oIC4gJiYJCQlcCgkJ
CQltdiBnbXAtc3R1ZmYvbGliL2xpYmdtcC5hIC4uLy4uL2xpYjsJCVwKCX0KCi5jLm86CQoJJChD
QykgJChDRkxBR1MpIC1jICQ8CgouUEhPTlk6IGNsZWFuCmNsZWFuOgoJL2Jpbi9ybSAtcmYgKi5v
ICouYSBnbXAuaCBnbXAtMi4wLjIgZ21wLXN0dWZmCgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==

--------------5AE90B11C4A127D854CFF0E9--