[5392] in linux-scsi channel archive

home help back first fref pref prev next nref lref last post

FW: Probable Tar bug.

daemon@ATHENA.MIT.EDU (Peter Waltenberg)
Fri Dec 11 20:06:50 1998

Date: 	Fri, 11 Dec 1998 08:42:47 +1000 (EST)
Reply-To: peterw@dascom.com
From: Peter Waltenberg <peterw@dascom.com>
To: linux-scsi@vger.rutgers.edu

This message is in MIME format
--_=XFMail.1.3.p0.Linux:981211084246:3722=_
Content-Type: text/plain; charset=us-ascii

The reason I've forwarded this to linux-scsi  is that reading the 
"other" tar format from a tape locks the scsi-tape subsystem, locks
the scsi-subsystem and with the right combination. (Trying to ls
a target scsi filesystem) will crash my 2.1.131 kernel.

I'm not 100% sure that this is the cause of the crashes, the tape drive
is back where it belongs now so I can't test further at this time.
Lets say I've found a smoking gun though :).

The problem should be repeatable if you dd the unixware format archive
to a tape and try reading it back with tar. I havn't been able to check this yet, 
so testing with a "normal" tar file first would be wise.

(I've removed the test3 (gnu-tar)  attachment) to cut down the size of this post.

I think it's fair to say that tar shouldn't be able to take out the entire scsi sub-system 
when reading from a tape.

The lock up was repeatable on 2.0.32 and 2.1.132 for me.

Peter

-----FW: Probable Tar bug.-----

Date: Fri, 11 Dec 1998 08:04:01 +1000 (EST)
From: Peter Waltenberg <peterw@dascom.com>
To: tar-bugs@gnu.ai.mit.edu
Subject: Probable Tar bug.

Attached are two tar'd files.

One generated by tar on Unixware and readable (correctly) on
Unixware, Solaris, and AD. When read by Gnu tar the file is extracted
to the current working directory. (Or worse).

The problem involves the handling of archives with members having
pathnames > 110? characters.

Both Gnu Tar and the "other" tar's use some sort of extended header
to handle these cases.

As far as I can tell Gnu-tars approach is the better since it also handles
the case of a single filename being > 110 ? characters correctly.

However what gnu-tar doesn't handle correctly is extracting files from
the "other" tar format. Instead of interpreting the path component correctly
it simply extracts the file into the current working directory.

At least, when unarchiving from a file it does that. On Linux (and this isn't
a gnu-tar problem ) it locks the SCSI subsystem if I try to untar
one of these archives from tape.

I'm interested (in a morbid sort of way) in the results of doing this on
other OS's as well.

Attached are samples of the archives concerned. I've cut and pasted
the headers below as it's the easiest way to pick the problem up.

It'd be nice if this were fixed, I'd even consider doing it myself if it's
considered to be worth fixing. However in either case a note should
be added to the distribution explaining the difference in handling
of long paths.
(Gnu tar being so easy to compile, this may be all thats needed).

Note: I personally consider the format Gnu-tar GENERATES as being
superior. However it should still unarchive the other format correctly.

BTW: Minor bug. The configure script doesn't detect that Unixware 7
has only a <sys/signal.h>.

Unixware tar header. (test2.tar)

abbr_general_i.tcl^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@0000444^@0000764^@0000144^@00000006125^@06137746320^@00356
44^@0^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ustar^@00devsrc^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ode^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@0016777^@0001401^@./proj/dcelite/src/DCE1.2.2/dce/src/test/funct
ional/directory/gds/ts/gdscp/lib/x500abbr/invalid/^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@# @OSF_COPYRIGHT@

Gnu tar on Unixware header. (test3.tar)

././@LongLink^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@     0 ^@     0 ^@     0 ^@        161           0  
10563^@ L^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@ustar  ^@root^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@root^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@proj/dcelite/s
rc/DCE1.2.2/dce/src/test/functional/directory/gds/ts/gdscp/lib/x500abbr/invalid/
abbr_general_i.tcl^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@
^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@

The files are part of OSF DCE1.2.2 and are publically available.

Thanks
Peter

----------------------------------
E-Mail: Peter Waltenberg <peterw@dascom.com>
Date: 11-Dec-98
Time: 08:04:01

This message was sent by XFMail
----------------------------------

--------------End of forwarded message-------------------------

----------------------------------
E-Mail: Peter Waltenberg <peterw@dascom.com>
Date: 11-Dec-98
Time: 08:26:03

This message was sent by XFMail
----------------------------------

--_=XFMail.1.3.p0.Linux:981211084246:3722=_
Content-Disposition: attachment; filename="test2.tar"
Content-Transfer-Encoding: base64
Content-Type: application/octet-stream; name=test2.tar; SizeOnDisk=51200

dXNyL3NyYy9saW51eC9kcml2ZXJzL3Njc2kvYWhhMTU0Mi5jAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADEwMDY0NCAAICAgICAw
IAAgICAgIDAgACAgICAgMTM0MDAyICA2NjMzNjMwMjU2ICAxNTU3NQAgMAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB1c3RhciAgAHJvb3QAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAcm9vdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv
KiAkSWQ6IGFoYTE1NDIuYyx2IDEuMSAxOTkyLzA3LzI0IDA2OjI3OjM4IHJvb3QgRXhwIHJvb3Qg
JAogKiAgbGludXgva2VybmVsL2FoYTE1NDIuYwogKgogKiAgQ29weXJpZ2h0IChDKSAxOTkyICBU
b21teSBUaG9ybgogKiAgQ29weXJpZ2h0IChDKSAxOTkzLCAxOTk0LCAxOTk1IEVyaWMgWW91bmdk
YWxlCiAqCiAqICBNb2RpZmllZCBieSBFcmljIFlvdW5nZGFsZQogKiAgICAgICAgVXNlIHJlcXVl
c3RfaXJxIGFuZCByZXF1ZXN0X2RtYSB0byBoZWxwIHByZXZlbnQgdW5leHBlY3RlZCBjb25mbGlj
dHMKICogICAgICAgIFNldCB1cCBvbi1ib2FyZCBETUEgY29udHJvbGxlciwgc3VjaCB0aGF0IHdl
IGRvIG5vdCBoYXZlIHRvCiAqICAgICAgICBoYXZlIHRoZSBiaW9zIGVuYWJsZWQgdG8gdXNlIHRo
ZSBhaGExNTQyLgogKiAgTW9kaWZpZWQgYnkgRGF2aWQgR2VudHplbAogKgkgIERvbid0IGNhbGwg
cmVxdWVzdF9kbWEgaWYgZG1hIG1hc2sgaXMgMCAoZm9yIEJ1c0xvZ2ljIEJULTQ0NVMgVkwtQnVz
CiAqICAgICAgICBjb250cm9sbGVyKS4KICogIE1vZGlmaWVkIGJ5IE1hdHRpIEFhcm5pbwogKiAg
ICAgICAgQWNjZXB0IHBhcmFtZXRlcnMgZnJvbSBMSUxPIGNtZC1saW5lLiAtLSAxLU9jdC05NAog
KiAgTW9kaWZpZWQgYnkgTWlrZSBNY0xhZ2FuIDxtaWtlLm1jbGFnYW5AbGludXgub3JnPgogKiAg
ICAgICAgUmVjb2duaXNlIGV4dGVuZGVkIG1vZGUgb24gQUhBMTU0MkNQLCBkaWZmZXJlbnQgYml0
IHRoYW4gMTU0MkNGCiAqICAgICAgICAxLUphbi05NwogKiAgTW9kaWZpZWQgYnkgQmpvcm4gTC4g
VGhvcmRhcnNvbiBhbmQgRWluYXIgVGhvciBFaW5hcnNzb24KICogICAgICAgIFJlY29nbml6ZSB0
aGF0IERNQTAgaXMgdmFsaWQgRE1BIGNoYW5uZWwgLS0gMTMtSnVsLTk4CiAqLwoKI2luY2x1ZGUg
PGxpbnV4L21vZHVsZS5oPgoKI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgojaW5jbHVkZSA8bGlu
dXgvdHlwZXMuaD4KI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgojaW5jbHVkZSA8bGludXgvaW9w
b3J0Lmg+CiNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgojaW5jbHVkZSA8bGludXgvc2NoZWQuaD4K
I2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KI2luY2x1
ZGUgPGFzbS9kbWEuaD4KI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KI2luY2x1ZGUgPGFzbS9zcGlu
bG9jay5oPgojaW5jbHVkZSA8YXNtL2lvLmg+CiNpbmNsdWRlIDxsaW51eC9ibGsuaD4KI2luY2x1
ZGUgInNjc2kuaCIKI2luY2x1ZGUgImhvc3RzLmgiCgoKI2luY2x1ZGUgImFoYTE1NDIuaCIKCiNk
ZWZpbmUgU0NTSV9QQShhZGRyZXNzKSB2aXJ0X3RvX2J1cyhhZGRyZXNzKQoKI2RlZmluZSBCQURf
RE1BKG1zZywgYWRkcmVzcywgbGVuZ3RoKSBcCiAgeyBcCiAgICBwcmludGsoS0VSTl9DUklUICIl
cyBhZGRyZXNzICVwIGxlbmd0aCAlZFxuIiwgbXNnLCBhZGRyZXNzLCBsZW5ndGgpOyBcCiAgICBw
YW5pYygiQnVmZmVyIGF0IHBoeXNpY2FsIGFkZHJlc3MgPiAxNk1iIHVzZWQgZm9yIGFoYTE1NDIi
KTsgXAogIH0KCiNpbmNsdWRlPGxpbnV4L3N0YXQuaD4KCnN0cnVjdCBwcm9jX2Rpcl9lbnRyeSBw
cm9jX3Njc2lfYWhhMTU0MiA9IHsKICAgIFBST0NfU0NTSV9BSEExNTQyLCA3LCAiYWhhMTU0MiIs
CiAgICBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08sIDIKfTsKCiNpZmRlZiBERUJVRzEKI2Rl
ZmluZSBERUIoeCkgeAojZWxzZQojZGVmaW5lIERFQih4KQojZW5kaWYKLyoKc3RhdGljIGNvbnN0
IGNoYXIgUkNTaWRbXSA9ICIkSGVhZGVyOiAvdXNyL3NyYy9saW51eC9rZXJuZWwvYmxrX2Rydi9z
Y3NpL1JDUy9haGExNTQyLmMsdiAxLjEgMTk5Mi8wNy8yNCAwNjoyNzozOCByb290IEV4cCByb290
ICQiOwoqLwoKLyogVGhlIGFkYXB0ZWMgY2FuIGJlIGNvbmZpZ3VyZWQgZm9yIHF1aXRlIGEgbnVt
YmVyIG9mIGFkZHJlc3NlcywgYnV0CkkgZ2VuZXJhbGx5IGRvIG5vdCB3YW50IHRoZSBjYXJkIHBv
a2luZyBhcm91bmQgYXQgcmFuZG9tLiAgV2UgYWxsb3cKdHdvIGFkZHJlc3NlcyAtIHRoaXMgYWxs
b3dzIHBlb3BsZSB0byB1c2UgdGhlIEFkYXB0ZWMgd2l0aCBhIE1pZGkKY2FyZCwgd2hpY2ggYWxz
byB1c2VkIDB4MzMwIC0tIGNhbiBiZSBvdmVycmlkZGVuIHdpdGggTElMTyEgKi8KCiNkZWZpbmUg
TUFYQk9BUkRTIDIJLyogSW5jcmVhc2UgdGhpcyBhbmQgdGhlIHNpemVzIG9mIHRoZQoJCQkgICBh
cnJheXMgYmVsb3csIGlmIHlvdSBuZWVkIG1vcmUuLiAqLwoKc3RhdGljIHVuc2lnbmVkIGludCBi
YXNlc1tNQVhCT0FSRFNdPXsweDMzMCwgMHgzMzR9OwoKLyogc2V0IGJ5IGFoYTE1NDJfc2V0dXAg
YWNjb3JkaW5nIHRvIHRoZSBjb21tYW5kIGxpbmUgKi8Kc3RhdGljIGludCBzZXR1cF9jYWxsZWRb
TUFYQk9BUkRTXSAgID0gezAsMH07CnN0YXRpYyBpbnQgc2V0dXBfYnVzb25bTUFYQk9BUkRTXSAg
ICA9IHswLDB9OwpzdGF0aWMgaW50IHNldHVwX2J1c29mZltNQVhCT0FSRFNdICAgPSB7MCwwfTsK
c3RhdGljIGludCBzZXR1cF9kbWFzcGVlZFtNQVhCT0FSRFNdID0gey0xLC0xfTsKCnN0YXRpYyBj
aGFyICpzZXR1cF9zdHJbTUFYQk9BUkRTXSA9IHsoY2hhciAqKU5VTEwsKGNoYXIgKilOVUxMfTsK
Ci8qCiAqIExJTE8gcGFyYW1zOiAgYWhhMTU0Mj08UE9SVEJBU0U+Wyw8QlVTT04+LDxCVVNPRkY+
Wyw8RE1BU1BFRUQ+XV0KICoKICogV2hlcmU6ICA8UE9SVEJBU0U+IGlzIGFueSBvZiB0aGUgdmFs
aWQgQUhBIGFkZHJlc3NlczoKICoJCQkweDEzMCwgMHgxMzQsIDB4MjMwLCAweDIzNCwgMHgzMzAs
IDB4MzM0CiAqCSAgIDxCVVNPTj4gIGlzIHRoZSB0aW1lIChpbiBtaWNyb3NlY3MpIHRoYXQgQUhB
IHNwZW5kcyBvbiB0aGUgQVQtYnVzCiAqCQkgICAgd2hlbiB0cmFuc2ZlcnJpbmcgZGF0YS4gIDE1
NDJBIHBvd2VyLW9uIGRlZmF1bHQgaXMgMTF1cywKICoJCSAgICB2YWxpZCB2YWx1ZXMgYXJlIGlu
IHJhbmdlOiAyLi4xNSAoZGVjaW1hbCkKICoJICAgPEJVU09GRj4gaXMgdGhlIHRpbWUgdGhhdCBB
SEEgc3BlbmRzIE9GRiBUSEUgQlVTIGFmdGVyIHdoaWxlCiAqCQkgICAgaXQgaXMgdHJhbnNmZXJy
aW5nIGRhdGEgKG5vdCB0byBtb25vcG9saXplIHRoZSBidXMpLgogKgkJICAgIFBvd2VyLW9uIGRl
ZmF1bHQgaXMgNHVzLCB2YWxpZCByYW5nZTogMS4uNjQgbWljcm9zZWNvbmRzLgogKgkgICA8RE1B
U1BFRUQ+IERlZmF1bHQgaXMganVtcGVyIHNlbGVjdGVkICgxNTQyQTogb24gdGhlIEoxKSwKICoJ
CSAgICBidXQgZXhwZXJpbWVudGVyIGNhbiBhbHRlciBpdCB3aXRoIHRoaXMuCiAqCQkgICAgVmFs
aWQgdmFsdWVzOiA1LCA2LCA3LCA4LCAxMCAoTUIvcykKICoJCSAgICBGYWN0b3J5IGRlZmF1bHQg
aXMgNSBNQi9zLgogKi8KCiNkZWZpbmUgQklPU19UUkFOU0xBVElPTl8xNjMyIDAgIC8qIFVzZWQg
Ynkgc29tZSBvbGQgMTU0MkEgYm9hcmRzICovCiNkZWZpbmUgQklPU19UUkFOU0xBVElPTl82NDMy
IDEgLyogRGVmYXVsdCBjYXNlIHRoZXNlIGRheXMgKi8KI2RlZmluZSBCSU9TX1RSQU5TTEFUSU9O
XzI1NTYzIDIgLyogQmlnIGRpc2sgY2FzZSAqLwoKc3RydWN0IGFoYTE1NDJfaG9zdGRhdGF7Cgkv
KiBUaGlzIHdpbGwgZWZmZWN0aXZlbHkgc3RhcnQgYm90aCBvZiB0aGVtIGF0IHRoZSBmaXJzdCBt
YWlsYm94ICovCglpbnQgYmlvc190cmFuc2xhdGlvbjsgICAvKiBNYXBwaW5nIGJpb3MgdXNlcyAt
IGZvciBjb21wYXRpYmlsaXR5ICovCglpbnQgYWhhMTU0Ml9sYXN0X21iaV91c2VkOwoJaW50IGFo
YTE1NDJfbGFzdF9tYm9fdXNlZDsKCVNjc2lfQ21uZCAqIFNDaW50W0FIQTE1NDJfTUFJTEJPWEVT
XTsKCXN0cnVjdCBtYWlsYm94IG1iWzIqQUhBMTU0Ml9NQUlMQk9YRVNdOwoJc3RydWN0IGNjYiBj
Y2JbQUhBMTU0Ml9NQUlMQk9YRVNdOwp9OwoKI2RlZmluZSBIT1NUREFUQShob3N0KSAoKHN0cnVj
dCBhaGExNTQyX2hvc3RkYXRhICopICZob3N0LT5ob3N0ZGF0YSkKCnN0YXRpYyBzdHJ1Y3QgU2Nz
aV9Ib3N0ICogYWhhX2hvc3RbN10gPSB7TlVMTCx9OyAgLyogT25lIGZvciBlYWNoIElSUSBsZXZl
bCAoOS0xNSkgKi8KCgoKCiNkZWZpbmUgV0FJVG5leHR0aW1lb3V0IDMwMDAwMDAKCnN0YXRpYyB2
b2lkIHNldHVwX21haWxib3hlcyhpbnQgYmFzZV9pbywgc3RydWN0IFNjc2lfSG9zdCAqIHNocG50
KTsKc3RhdGljIGludCBhaGExNTQyX3Jlc3RhcnQoc3RydWN0IFNjc2lfSG9zdCAqIHNob3N0KTsK
c3RhdGljIHZvaWQgYWhhMTU0Ml9pbnRyX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0
cnVjdCBwdF9yZWdzICpyZWdzKTsKc3RhdGljIHZvaWQgZG9fYWhhMTU0Ml9pbnRyX2hhbmRsZShp
bnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKCiNkZWZpbmUgYWhh
MTU0Ml9pbnRyX3Jlc2V0KGJhc2UpICBvdXRiKElSU1QsIENPTlRST0woYmFzZSkpCgojZGVmaW5l
IFdBSVQocG9ydCwgbWFzaywgYWxsb2YsIG5vbmVvZikJCQkJCVwKIHsgcmVnaXN0ZXIgaW50IFdB
SVRiaXRzOwkJCQkJCVwKICAgcmVnaXN0ZXIgaW50IFdBSVR0aW1lb3V0ID0gV0FJVG5leHR0aW1l
b3V0OwkJCQlcCiAgIHdoaWxlICgxKSB7CQkJCQkJCQlcCiAgICAgV0FJVGJpdHMgPSBpbmIocG9y
dCkgJiAobWFzayk7CQkJCQlcCiAgICAgaWYgKChXQUlUYml0cyAmIChhbGxvZikpID09IChhbGxv
ZikgJiYgKChXQUlUYml0cyAmIChub25lb2YpKSA9PSAwKSkgXAogICAgICAgYnJlYWs7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCVwKICAg
ICBpZiAoLS1XQUlUdGltZW91dCA9PSAwKSBnb3RvIGZhaWw7CQkJCQlcCiAgIH0JCQkJCQkJCQlc
CiB9CgovKiBTaW1pbGFyIHRvIFdBSVQsIGV4Y2VwdCB3ZSB1c2UgdGhlIHVkZWxheSBjYWxsIHRv
IHJlZ3VsYXRlIHRoZQogICBhbW91bnQgb2YgdGltZSB3ZSB3YWl0LiAgKi8KI2RlZmluZSBXQUlU
ZChwb3J0LCBtYXNrLCBhbGxvZiwgbm9uZW9mLCB0aW1lb3V0KQkJCVwKIHsgcmVnaXN0ZXIgaW50
IFdBSVRiaXRzOwkJCQkJCVwKICAgcmVnaXN0ZXIgaW50IFdBSVR0aW1lb3V0ID0gdGltZW91dDsJ
CQkJCVwKICAgd2hpbGUgKDEpIHsJCQkJCQkJCVwKICAgICBXQUlUYml0cyA9IGluYihwb3J0KSAm
IChtYXNrKTsJCQkJCVwKICAgICBpZiAoKFdBSVRiaXRzICYgKGFsbG9mKSkgPT0gKGFsbG9mKSAm
JiAoKFdBSVRiaXRzICYgKG5vbmVvZikpID09IDApKSBcCiAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAogICAgIG1k
ZWxheSgxKTsJCQkJCQkJXAogICAgIGlmICgtLVdBSVR0aW1lb3V0ID09IDApIGdvdG8gZmFpbDsJ
CQkJCVwKICAgfQkJCQkJCQkJCVwKIH0KCnN0YXRpYyB2b2lkIGFoYTE1NDJfc3RhdCh2b2lkKQp7
Ci8qICAgIGludCBzID0gaW5iKFNUQVRVUyksIGkgPSBpbmIoSU5UUkZMQUdTKTsKICBwcmludGso
InN0YXR1cz0leCBpbnRyZmxhZ3M9JXhcbiIsIHMsIGksIFdBSVRuZXh0dGltZW91dC1XQUlUdGlt
ZW91dCk7ICovCn0KCi8qIFRoaXMgaXMgYSBiaXQgY29tcGxpY2F0ZWQsIGJ1dCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IGFuIGludGVycnVwdAogICByb3V0aW5lIGRvZXMgbm90IHNlbmQgc29t
ZXRoaW5nIG91dCB3aGlsZSB3ZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGlzLgogICBGb3J0dW5h
dGVseSwgaXQgaXMgb25seSBhdCBib290IHRpbWUgdGhhdCBtdWx0aS1ieXRlIG1lc3NhZ2VzCiAg
IGFyZSBldmVyIHNlbnQuICovCnN0YXRpYyBpbnQgYWhhMTU0Ml9vdXQodW5zaWduZWQgaW50IGJh
c2UsIHVuY2hhciAqY21kcCwgaW50IGxlbikKewogIHVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOwog
IAogIHNhdmVfZmxhZ3MoZmxhZ3MpOwogIGlmKGxlbiA9PSAxKSB7CiAgICB3aGlsZSgxPT0xKXsK
CVdBSVQoU1RBVFVTKGJhc2UpLCBDREYsIDAsIENERik7CgljbGkoKTsKCWlmKGluYihTVEFUVVMo
YmFzZSkpICYgQ0RGKSB7cmVzdG9yZV9mbGFncyhmbGFncyk7IGNvbnRpbnVlO30KCW91dGIoKmNt
ZHAsIERBVEEoYmFzZSkpOwoJcmVzdG9yZV9mbGFncyhmbGFncyk7CglyZXR1cm4gMDsKICAgICAg
fQogIH0gZWxzZSB7CiAgICBjbGkoKTsKICAgIHdoaWxlIChsZW4tLSkKICAgICAgewoJV0FJVChT
VEFUVVMoYmFzZSksIENERiwgMCwgQ0RGKTsKCW91dGIoKmNtZHArKywgREFUQShiYXNlKSk7CiAg
ICAgIH0KICAgIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogIH0KICAgIHJldHVybiAwOwogIGZhaWw6
CiAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKICAgIHByaW50aygiYWhhMTU0Ml9vdXQgZmFpbGVk
KCVkKTogIiwgbGVuKzEpOyBhaGExNTQyX3N0YXQoKTsKICAgIHJldHVybiAxOwp9CgovKiBPbmx5
IHVzZWQgYXQgYm9vdCB0aW1lLCBzbyB3ZSBkbyBub3QgbmVlZCB0byB3b3JyeSBhYm91dCBsYXRl
bmN5IGFzIG11Y2gKICAgaGVyZSAqLwpzdGF0aWMgaW50IGFoYTE1NDJfaW4odW5zaWduZWQgaW50
IGJhc2UsIHVuY2hhciAqY21kcCwgaW50IGxlbikKewogICAgdW5zaWduZWQgbG9uZyBmbGFnczsK
CiAgICBzYXZlX2ZsYWdzKGZsYWdzKTsKICAgIGNsaSgpOwogICAgd2hpbGUgKGxlbi0tKQogICAg
ICB7CgkgIFdBSVQoU1RBVFVTKGJhc2UpLCBERiwgREYsIDApOwoJICAqY21kcCsrID0gaW5iKERB
VEEoYmFzZSkpOwogICAgICB9CiAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKICAgIHJldHVybiAw
OwogIGZhaWw6CiAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKICAgIHByaW50aygiYWhhMTU0Ml9p
biBmYWlsZWQoJWQpOiAiLCBsZW4rMSk7IGFoYTE1NDJfc3RhdCgpOwogICAgcmV0dXJuIDE7Cn0K
Ci8qIFNpbWlsYXIgdG8gYWhhMTU0Ml9pbiwgZXhjZXB0IHRoYXQgd2Ugd2FpdCBhIHZlcnkgc2hv
cnQgcGVyaW9kIG9mIHRpbWUuCiAgIFdlIHVzZSB0aGlzIGlmIHdlIGtub3cgdGhlIGJvYXJkIGlz
IGFsaXZlIGFuZCBhd2FrZSwgYnV0IHdlIGFyZSBub3Qgc3VyZQogICBpZiB0aGUgYm9hcmQgd2ls
bCByZXNwb25kIHRvIHRoZSBjb21tYW5kIHdlIGFyZSBhYm91dCB0byBzZW5kIG9yIG5vdCAqLwpz
dGF0aWMgaW50IGFoYTE1NDJfaW4xKHVuc2lnbmVkIGludCBiYXNlLCB1bmNoYXIgKmNtZHAsIGlu
dCBsZW4pCnsKICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAKICAgIHNhdmVfZmxhZ3MoZmxh
Z3MpOwogICAgY2xpKCk7CiAgICB3aGlsZSAobGVuLS0pCiAgICAgIHsKCSAgV0FJVGQoU1RBVFVT
KGJhc2UpLCBERiwgREYsIDAsIDEwMCk7CgkgICpjbWRwKysgPSBpbmIoREFUQShiYXNlKSk7CiAg
ICAgIH0KICAgIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogICAgcmV0dXJuIDA7CiAgZmFpbDoKICAg
IHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogICAgcmV0dXJuIDE7Cn0KCnN0YXRpYyBpbnQgbWFrZWNv
ZGUodW5zaWduZWQgaG9zdGVyciwgdW5zaWduZWQgc2NzaWVycikKewogICAgc3dpdGNoIChob3N0
ZXJyKSB7CiAgICAgIGNhc2UgMHgwOgogICAgICBjYXNlIDB4YTogLyogTGlua2VkIGNvbW1hbmQg
Y29tcGxldGUgd2l0aG91dCBlcnJvciBhbmQgbGlua2VkIG5vcm1hbGx5ICovCiAgICAgIGNhc2Ug
MHhiOiAvKiBMaW5rZWQgY29tbWFuZCBjb21wbGV0ZSB3aXRob3V0IGVycm9yLCBpbnRlcnJ1cHQg
Z2VuZXJhdGVkICovCglob3N0ZXJyID0gMDsKCWJyZWFrOwoKICAgICAgY2FzZSAweDExOiAvKiBT
ZWxlY3Rpb24gdGltZSBvdXQtVGhlIGluaXRpYXRvciBzZWxlY3Rpb24gb3IgdGFyZ2V0CgkJICAg
IHJlc2VsZWN0aW9uIHdhcyBub3QgY29tcGxldGUgd2l0aGluIHRoZSBTQ1NJIFRpbWUgb3V0IHBl
cmlvZCAqLwoJaG9zdGVyciA9IERJRF9USU1FX09VVDsKCWJyZWFrOwoKICAgICAgY2FzZSAweDEy
OiAvKiBEYXRhIG92ZXJydW4vdW5kZXJydW4tVGhlIHRhcmdldCBhdHRlbXB0ZWQgdG8gdHJhbnNm
ZXIgbW9yZSBkYXRhCgkJICAgIHRoYW4gd2FzIGFsbG9jYXRlZCBieSB0aGUgRGF0YSBMZW5ndGgg
ZmllbGQgb3IgdGhlIHN1bSBvZiB0aGUKCQkgICAgU2NhdHRlciAvIEdhdGhlciBEYXRhIExlbmd0
aCBmaWVsZHMuICovCgogICAgICBjYXNlIDB4MTM6IC8qIFVuZXhwZWN0ZWQgYnVzIGZyZWUtVGhl
IHRhcmdldCBkcm9wcGVkIHRoZSBTQ1NJIEJTWSBhdCBhbiB1bmV4cGVjdGVkIHRpbWUuICovCgog
ICAgICBjYXNlIDB4MTU6IC8qIE1CTyBjb21tYW5kIHdhcyBub3QgMDAsIDAxIG9yIDAyLVRoZSBm
aXJzdCBieXRlIG9mIHRoZSBDQiB3YXMKCQkgICAgaW52YWxpZC4gVGhpcyB1c3VhbGx5IGluZGlj
YXRlcyBhIHNvZnR3YXJlIGZhaWx1cmUuICovCgogICAgICBjYXNlIDB4MTY6IC8qIEludmFsaWQg
Q0NCIE9wZXJhdGlvbiBDb2RlLVRoZSBmaXJzdCBieXRlIG9mIHRoZSBDQ0Igd2FzIGludmFsaWQu
CgkJICAgIFRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBzb2Z0d2FyZSBmYWlsdXJlLiAqLwoKICAg
ICAgY2FzZSAweDE3OiAvKiBMaW5rZWQgQ0NCIGRvZXMgbm90IGhhdmUgdGhlIHNhbWUgTFVOLUEg
c3Vic2VxdWVudCBDQ0Igb2YgYSBzZXQKCQkgICAgb2YgbGlua2VkIENDQidzIGRvZXMgbm90IHNw
ZWNpZnkgdGhlIHNhbWUgbG9naWNhbCB1bml0IG51bWJlciBhcwoJCSAgICB0aGUgZmlyc3QuICov
CiAgICAgIGNhc2UgMHgxODogLyogSW52YWxpZCBUYXJnZXQgRGlyZWN0aW9uIHJlY2VpdmVkIGZy
b20gSG9zdC1UaGUgZGlyZWN0aW9uIG9mIGEKCQkgICAgVGFyZ2V0IE1vZGUgQ0NCIHdhcyBpbnZh
bGlkLiAqLwoKICAgICAgY2FzZSAweDE5OiAvKiBEdXBsaWNhdGUgQ0NCIFJlY2VpdmVkIGluIFRh
cmdldCBNb2RlLU1vcmUgdGhhbiBvbmNlIENDQiB3YXMKCQkgICAgcmVjZWl2ZWQgdG8gc2Vydmlj
ZSBkYXRhIHRyYW5zZmVyIGJldHdlZW4gdGhlIHNhbWUgdGFyZ2V0IExVTgoJCSAgICBhbmQgaW5p
dGlhdG9yIFNDU0kgSUQgaW4gdGhlIHNhbWUgZGlyZWN0aW9uLiAqLwoKICAgICAgY2FzZSAweDFh
OiAvKiBJbnZhbGlkIENDQiBvciBTZWdtZW50IExpc3QgUGFyYW1ldGVyLUEgc2VnbWVudCBsaXN0
IHdpdGggYSB6ZXJvCgkJICAgIGxlbmd0aCBzZWdtZW50IG9yIGludmFsaWQgc2VnbWVudCBsaXN0
IGJvdW5kYXJpZXMgd2FzIHJlY2VpdmVkLgoJCSAgICBBIENDQiBwYXJhbWV0ZXIgd2FzIGludmFs
aWQuICovCglERUIocHJpbnRrKCJBaGExNTQyOiAleCAleFxuIiwgaG9zdGVyciwgc2NzaWVycikp
OwoJaG9zdGVyciA9IERJRF9FUlJPUjsgLyogQ291bGRuJ3QgZmluZCBhbnkgYmV0dGVyICovCgli
cmVhazsKCiAgICAgIGNhc2UgMHgxNDogLyogVGFyZ2V0IGJ1cyBwaGFzZSBzZXF1ZW5jZSBmYWls
dXJlLUFuIGludmFsaWQgYnVzIHBoYXNlIG9yIGJ1cwoJCSAgICBwaGFzZSBzZXF1ZW5jZSB3YXMg
cmVxdWVzdGVkIGJ5IHRoZSB0YXJnZXQuIFRoZSBob3N0IGFkYXB0ZXIKCQkgICAgd2lsbCBnZW5l
cmF0ZSBhIFNDU0kgUmVzZXQgQ29uZGl0aW9uLCBub3RpZnlpbmcgdGhlIGhvc3Qgd2l0aAoJCSAg
ICBhIFNDUkQgaW50ZXJydXB0ICovCglob3N0ZXJyID0gRElEX1JFU0VUOwoJYnJlYWs7CiAgICAg
IGRlZmF1bHQ6CglwcmludGsoIm1ha2Vjb2RlOiB1bmtub3duIGhvc3RzdGF0dXMgJXhcbiIsIGhv
c3RlcnIpOwoJYnJlYWs7CiAgICB9CiAgICByZXR1cm4gc2NzaWVycnwoaG9zdGVyciA8PCAxNik7
Cn0KCnN0YXRpYyBpbnQgYWhhMTU0Ml90ZXN0X3BvcnQoaW50IGJzZSwgc3RydWN0IFNjc2lfSG9z
dCAqIHNocG50KQp7CiAgICB1bmNoYXIgaW5xdWlyeV9jbWRbXSA9IHtDTURfSU5RVUlSWSB9Owog
ICAgdW5jaGFyIGlucXVpcnlfcmVzdWx0WzRdOwogICAgdW5jaGFyICpjbWRwOwogICAgaW50IGxl
bjsKICAgIHZvbGF0aWxlIGludCBkZWJ1ZyA9IDA7CiAgICAKICAgIC8qIFF1aWNrIGFuZCBkaXJ0
eSB0ZXN0IGZvciBwcmVzZW5jZSBvZiB0aGUgY2FyZC4gKi8KICAgIGlmKGluYihTVEFUVVMoYnNl
KSkgPT0gMHhmZikgcmV0dXJuIDA7CgogICAgLyogUmVzZXQgdGhlIGFkYXB0ZXIuIEkgb3VnaHQg
dG8gbWFrZSBhIGhhcmQgcmVzZXQsIGJ1dCBpdCdzIG5vdCByZWFsbHkgbmVjZXNzYXJ5ICovCiAg
ICAKICAgIC8qICBERUIocHJpbnRrKCJhaGExNTQyX3Rlc3RfcG9ydCBjYWxsZWQgXG4iKSk7ICov
CgogICAgLyogSW4gY2FzZSBzb21lIG90aGVyIGNhcmQgd2FzIHByb2JpbmcgaGVyZSwgcmVzZXQg
aW50ZXJydXB0cyAqLwogICAgYWhhMTU0Ml9pbnRyX3Jlc2V0KGJzZSk7ICAgICAvKiByZXNldCBp
bnRlcnJ1cHRzLCBzbyB0aGV5IGRvbid0IGJsb2NrICovCQoKICAgIG91dGIoU1JTVHxJUlNULyp8
U0NSU1QqLywgQ09OVFJPTChic2UpKTsKCiAgICBtZGVsYXkoMjApOwkvKiBXYWl0IGEgbGl0dGxl
IGJpdCBmb3IgdGhpbmdzIHRvIHNldHRsZSBkb3duLiAqLwogICAgCiAgICBkZWJ1ZyA9IDE7CiAg
ICAvKiBFeHBlY3QgSU5JVCBhbmQgSURMRSwgYW55IG9mIHRoZSBvdGhlcnMgYXJlIGJhZCAqLwog
ICAgV0FJVChTVEFUVVMoYnNlKSwgU1RBVE1BU0ssIElOSVR8SURMRSwgU1RTVHxESUFHRnxJTlZE
Q01EfERGfENERik7CiAgICAKICAgIGRlYnVnID0gMjsKICAgIC8qIFNob3VsZG4ndCBoYXZlIGdl
bmVyYXRlZCBhbnkgaW50ZXJydXB0cyBkdXJpbmcgcmVzZXQgKi8KICAgIGlmIChpbmIoSU5UUkZM
QUdTKGJzZSkpJklOVFJNQVNLKSBnb3RvIGZhaWw7CgoKICAgIC8qIFBlcmZvcm0gYSBob3N0IGFk
YXB0ZXIgaW5xdWlyeSBpbnN0ZWFkIHNvIHdlIGRvIG5vdCBuZWVkIHRvIHNldAogICAgICAgdXAg
dGhlIG1haWxib3hlcyBhaGVhZCBvZiB0aW1lICovCgogICAgYWhhMTU0Ml9vdXQoYnNlLCBpbnF1
aXJ5X2NtZCwgMSk7CgogICAgZGVidWcgPSAzOwogICAgbGVuID0gNDsKICAgIGNtZHAgPSAmaW5x
dWlyeV9yZXN1bHRbMF07CgogICAgd2hpbGUgKGxlbi0tKQogICAgICB7CgkgIFdBSVQoU1RBVFVT
KGJzZSksIERGLCBERiwgMCk7CgkgICpjbWRwKysgPSBpbmIoREFUQShic2UpKTsKICAgICAgfQog
ICAgCiAgICBkZWJ1ZyA9IDg7CiAgICAvKiBSZWFkaW5nIHBvcnQgc2hvdWxkIHJlc2V0IERGICov
CiAgICBpZiAoaW5iKFNUQVRVUyhic2UpKSAmIERGKSBnb3RvIGZhaWw7CiAgICAKICAgIGRlYnVn
ID0gOTsKICAgIC8qIFdoZW4gSEFDQywgY29tbWFuZCBpcyBjb21wbGV0ZWQsIGFuZCB3ZSdyZSB0
aG91Z2ggdGVzdGluZyAqLwogICAgV0FJVChJTlRSRkxBR1MoYnNlKSwgSEFDQywgSEFDQywgMCk7
CiAgICAvKiBub3cgaW5pdGlhbGl6ZSBhZGFwdGVyICovCiAgICAKICAgIGRlYnVnID0gMTA7CiAg
ICAvKiBDbGVhciBpbnRlcnJ1cHRzICovCiAgICBvdXRiKElSU1QsIENPTlRST0woYnNlKSk7CiAg
ICAKICAgIGRlYnVnID0gMTE7CgogICAgcmV0dXJuIGRlYnVnOwkJCQkvKiAxID0gb2sgKi8KICBm
YWlsOgogICAgcmV0dXJuIDA7CQkJCQkvKiAwID0gbm90IG9rICovCn0KCi8qIEEgcXVpY2sgd3Jh
cHBlciBmb3IgZG9fYWhhMTU0Ml9pbnRyX2hhbmRsZSB0byBncmFiIHRoZSBzcGluIGxvY2sgKi8K
c3RhdGljIHZvaWQgZG9fYWhhMTU0Ml9pbnRyX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQs
IHN0cnVjdCBwdF9yZWdzICpyZWdzKQp7CiAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgIHNw
aW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKICAgIGFoYTE1NDJfaW50
cl9oYW5kbGUoaXJxLCBkZXZfaWQsIHJlZ3MpOwogICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm
aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7Cn0KCi8qIEEgImhpZ2giIGxldmVsIGludGVycnVwdCBo
YW5kbGVyICovCnN0YXRpYyB2b2lkIGFoYTE1NDJfaW50cl9oYW5kbGUoaW50IGlycSwgdm9pZCAq
ZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKewogICAgdm9pZCAoKm15X2RvbmUpKFNjc2lf
Q21uZCAqKSA9IE5VTEw7CiAgICBpbnQgZXJyc3RhdHVzLCBtYmksIG1ibywgbWJpc3RhdHVzOwog
ICAgaW50IG51bWJlcl9zZXJ2aWNlZDsKICAgIHVuc2lnbmVkIGludCBmbGFnczsKICAgIHN0cnVj
dCBTY3NpX0hvc3QgKiBzaG9zdDsKICAgIFNjc2lfQ21uZCAqIFNDdG1wOwogICAgaW50IGZsYWc7
CiAgICBpbnQgbmVlZHNfcmVzdGFydDsKICAgIHN0cnVjdCBtYWlsYm94ICogbWI7CiAgICBzdHJ1
Y3QgY2NiICAqY2NiOwoKICAgIHNob3N0ID0gYWhhX2hvc3RbaXJxIC0gOV07CiAgICBpZighc2hv
c3QpIHBhbmljKCJTcGx1bmdlISIpOwoKICAgIG1iID0gSE9TVERBVEEoc2hvc3QpLT5tYjsKICAg
IGNjYiA9IEhPU1REQVRBKHNob3N0KS0+Y2NiOwoKI2lmZGVmIERFQlVHMQogICAgewogICAgZmxh
ZyA9IGluYihJTlRSRkxBR1Moc2hvc3QtPmlvX3BvcnQpKTsKICAgIHByaW50aygiYWhhMTU0Ml9p
bnRyX2hhbmRsZTogIik7CiAgICBpZiAoIShmbGFnJkFOWUlOVFIpKSBwcmludGsoIm5vIGludGVy
cnVwdD8iKTsKICAgIGlmIChmbGFnJk1CSUYpIHByaW50aygiTUJJRiAiKTsKICAgIGlmIChmbGFn
Jk1CT0EpIHByaW50aygiTUJPRiAiKTsKICAgIGlmIChmbGFnJkhBQ0MpIHByaW50aygiSEFDQyAi
KTsKICAgIGlmIChmbGFnJlNDUkQpIHByaW50aygiU0NSRCAiKTsKICAgIHByaW50aygic3RhdHVz
ICUwMnhcbiIsIGluYihTVEFUVVMoc2hvc3QtPmlvX3BvcnQpKSk7CiAgfTsKI2VuZGlmCiAgICBu
dW1iZXJfc2VydmljZWQgPSAwOwogICAgbmVlZHNfcmVzdGFydCA9IDA7CgogICAgd2hpbGUoMT09
MSl7CiAgICAgIGZsYWcgPSBpbmIoSU5UUkZMQUdTKHNob3N0LT5pb19wb3J0KSk7CgogICAgICAv
KiBDaGVjayBmb3IgdW51c3VhbCBpbnRlcnJ1cHRzLiAgSWYgYW55IG9mIHRoZXNlIGhhcHBlbiwg
d2Ugc2hvdWxkCgkgcHJvYmFibHkgZG8gc29tZXRoaW5nIHNwZWNpYWwsIGJ1dCBmb3Igbm93IGp1
c3QgcHJpbnRpbmcgYSBtZXNzYWdlCgkgaXMgc3VmZmljaWVudC4gIEEgU0NTSSByZXNldCBkZXRl
Y3RlZCBpcyBzb21ldGhpbmcgdGhhdCB3ZSByZWFsbHkKCSBuZWVkIHRvIGRlYWwgd2l0aCBpbiBz
b21lIHdheS4gKi8KICAgICAgaWYgKGZsYWcgJiB+TUJJRikgewoJaWYgKGZsYWcmTUJPQSkgcHJp
bnRrKCJNQk9GICIpOwoJaWYgKGZsYWcmSEFDQykgcHJpbnRrKCJIQUNDICIpOwoJaWYgKGZsYWcm
U0NSRCkgewoJICBuZWVkc19yZXN0YXJ0ID0gMTsKCSAgcHJpbnRrKCJTQ1JEICIpOwoJfQogICAg
ICB9CgogICAgICBhaGExNTQyX2ludHJfcmVzZXQoc2hvc3QtPmlvX3BvcnQpOwoKICAgICAgc2F2
ZV9mbGFncyhmbGFncyk7CiAgICAgIGNsaSgpOwogICAgICBtYmkgPSBIT1NUREFUQShzaG9zdCkt
PmFoYTE1NDJfbGFzdF9tYmlfdXNlZCArIDE7CiAgICAgIGlmIChtYmkgPj0gMipBSEExNTQyX01B
SUxCT1hFUykgbWJpID0gQUhBMTU0Ml9NQUlMQk9YRVM7CiAgICAgIAogICAgICBkb3sKCWlmKG1i
W21iaV0uc3RhdHVzICE9IDApIGJyZWFrOwoJbWJpKys7CglpZiAobWJpID49IDIqQUhBMTU0Ml9N
QUlMQk9YRVMpIG1iaSA9IEFIQTE1NDJfTUFJTEJPWEVTOwogICAgICB9IHdoaWxlIChtYmkgIT0g
SE9TVERBVEEoc2hvc3QpLT5haGExNTQyX2xhc3RfbWJpX3VzZWQpOwogICAgICAKICAgICAgaWYo
bWJbbWJpXS5zdGF0dXMgPT0gMCl7CglyZXN0b3JlX2ZsYWdzKGZsYWdzKTsKCS8qIEhtbSwgbm8g
bWFpbC4gIE11c3QgaGF2ZSByZWFkIGl0IHRoZSBsYXN0IHRpbWUgYXJvdW5kICovCglpZiAoIW51
bWJlcl9zZXJ2aWNlZCAmJiAhbmVlZHNfcmVzdGFydCkKCSAgcHJpbnRrKCJhaGExNTQyLmM6IGlu
dGVycnVwdCByZWNlaXZlZCwgYnV0IG5vIG1haWwuXG4iKTsKCS8qIFdlIGRldGVjdGVkIGEgcmVz
ZXQuICBSZXN0YXJ0IGFsbCBwZW5kaW5nIGNvbW1hbmRzIGZvcgoJICAgZGV2aWNlcyB0aGF0IHVz
ZSB0aGUgaGFyZCByZXNldCBvcHRpb24gKi8KCWlmKG5lZWRzX3Jlc3RhcnQpIGFoYTE1NDJfcmVz
dGFydChzaG9zdCk7CglyZXR1cm47CiAgICAgIH07CgogICAgICBtYm8gPSAoc2NzaTJpbnQobWJb
bWJpXS5jY2JwdHIpIC0gKFNDU0lfUEEoJmNjYlswXSkpKSAvIHNpemVvZihzdHJ1Y3QgY2NiKTsK
ICAgICAgbWJpc3RhdHVzID0gbWJbbWJpXS5zdGF0dXM7CiAgICAgIG1iW21iaV0uc3RhdHVzID0g
MDsKICAgICAgSE9TVERBVEEoc2hvc3QpLT5haGExNTQyX2xhc3RfbWJpX3VzZWQgPSBtYmk7CiAg
ICAgIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogICAgICAKI2lmZGVmIERFQlVHMQogICAgICB7Cglp
ZiAoY2NiW21ib10udGFyc3RhdHxjY2JbbWJvXS5oYXN0YXQpCgkgIHByaW50aygiYWhhMTU0Ml9j
b21tYW5kOiByZXR1cm5pbmcgJXggKHN0YXR1cyAlZClcbiIsIAoJCSBjY2JbbWJvXS50YXJzdGF0
ICsgKChpbnQpIGNjYlttYm9dLmhhc3RhdCA8PCAxNiksIG1iW21iaV0uc3RhdHVzKTsKICAgICAg
fTsKI2VuZGlmCgogICAgICBpZihtYmlzdGF0dXMgPT0gMykgY29udGludWU7IC8qIEFib3J0ZWQg
Y29tbWFuZCBub3QgZm91bmQgKi8KCiNpZmRlZiBERUJVRzEKICAgICAgcHJpbnRrKCIuLi5kb25l
ICVkICVkXG4iLG1ibywgbWJpKTsKI2VuZGlmCiAgICAgIAogICAgICBTQ3RtcCA9IEhPU1REQVRB
KHNob3N0KS0+U0NpbnRbbWJvXTsKCiAgICAgIGlmICghU0N0bXAgfHwgIVNDdG1wLT5zY3NpX2Rv
bmUpIHsKCXByaW50aygiYWhhMTU0Ml9pbnRyX2hhbmRsZTogVW5leHBlY3RlZCBpbnRlcnJ1cHRc
biIpOwoJcHJpbnRrKCJ0YXJzdGF0PSV4LCBoYXN0YXQ9JXggaWRsdW49JXggY2NiIz0lZCBcbiIs
IGNjYlttYm9dLnRhcnN0YXQsIAoJICAgICAgIGNjYlttYm9dLmhhc3RhdCwgY2NiW21ib10uaWRs
dW4sIG1ibyk7CglyZXR1cm47CiAgICAgIH0KICAgICAgCiAgICAgIG15X2RvbmUgPSBTQ3RtcC0+
c2NzaV9kb25lOwogICAgICBpZiAoU0N0bXAtPmhvc3Rfc2NyaWJibGUpIHNjc2lfZnJlZShTQ3Rt
cC0+aG9zdF9zY3JpYmJsZSwgNTEyKTsKICAgICAgCiAgICAgIC8qIEZldGNoIHRoZSBzZW5zZSBk
YXRhLCBhbmQgdHVjayBpdCBhd2F5LCBpbiB0aGUgcmVxdWlyZWQgc2xvdC4gIFRoZQoJIEFkYXB0
ZWMgYXV0b21hdGljYWxseSBmZXRjaGVzIGl0LCBhbmQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRo
YXQKCSB3ZSB3aWxsIHN0aWxsIGhhdmUgaXQgaW4gdGhlIGNkYiB3aGVuIHdlIGNvbWUgYmFjayAq
LwogICAgICBpZiAoY2NiW21ib10udGFyc3RhdCA9PSAyKQoJbWVtY3B5KFNDdG1wLT5zZW5zZV9i
dWZmZXIsICZjY2JbbWJvXS5jZGJbY2NiW21ib10uY2RibGVuXSwgCgkgICAgICAgc2l6ZW9mKFND
dG1wLT5zZW5zZV9idWZmZXIpKTsKICAgICAgCiAgICAgIAogICAgICAvKiBpcyB0aGVyZSBtYWls
IDotKSAqLwogICAgICAKICAgICAgLyogbW9yZSBlcnJvciBjaGVja2luZyBsZWZ0IG91dCBoZXJl
ICovCiAgICAgIGlmIChtYmlzdGF0dXMgIT0gMSkKCS8qIFRoaXMgaXMgc3VyZWx5IHdyb25nLCBi
dXQgSSBkb24ndCBrbm93IHdoYXQncyByaWdodCAqLwoJZXJyc3RhdHVzID0gbWFrZWNvZGUoY2Ni
W21ib10uaGFzdGF0LCBjY2JbbWJvXS50YXJzdGF0KTsKICAgICAgZWxzZQoJZXJyc3RhdHVzID0g
MDsKICAgICAgCiNpZmRlZiBERUJVRzEKICAgICAgaWYoZXJyc3RhdHVzKSBwcmludGsoIihhaGEx
NTQyIGVycm9yOiV4ICV4ICV4KSAiLGVycnN0YXR1cywgCgkJCSAgIGNjYlttYm9dLmhhc3RhdCwg
Y2NiW21ib10udGFyc3RhdCk7CiNlbmRpZgoKICAgICAgaWYgKGNjYlttYm9dLnRhcnN0YXQgPT0g
MikgewojaWZkZWYgREVCVUcxCglpbnQgaTsKI2VuZGlmCglERUIocHJpbnRrKCJhaGExNTQyX2lu
dHJfaGFuZGxlOiBzZW5zZToiKSk7CiNpZmRlZiBERUJVRzEKCWZvciAoaSA9IDA7IGkgPCAxMjsg
aSsrKQoJICBwcmludGsoIiUwMnggIiwgY2NiW21ib10uY2RiW2NjYlttYm9dLmNkYmxlbitpXSk7
CglwcmludGsoIlxuIik7CiNlbmRpZgoJLyoKCSAgREVCKHByaW50aygiYWhhMTU0Ml9pbnRyX2hh
bmRsZTogYnVmOiIpKTsKCSAgZm9yIChpID0gMDsgaSA8IGJ1ZmZsZW47IGkrKykKCSAgcHJpbnRr
KCIlMDJ4ICIsICgodW5jaGFyICopYnVmZilbaV0pOwoJICBwcmludGsoIlxuIik7CgkgICovCiAg
ICAgIH0KICAgICAgREVCKGlmIChlcnJzdGF0dXMpIHByaW50aygiYWhhMTU0Ml9pbnRyX2hhbmRs
ZTogcmV0dXJuaW5nICU2eFxuIiwgZXJyc3RhdHVzKSk7CiAgICAgIFNDdG1wLT5yZXN1bHQgPSBl
cnJzdGF0dXM7CiAgICAgIEhPU1REQVRBKHNob3N0KS0+U0NpbnRbbWJvXSA9IE5VTEw7ICAvKiBU
aGlzIGVmZmVjdGl2ZWx5IGZyZWVzIHVwIHRoZSBtYWlsYm94IHNsb3QsIGFzCgkJCSAgICAgZmFy
IGFzIHF1ZXVlY29tbWFuZCBpcyBjb25jZXJuZWQgKi8KICAgICAgbXlfZG9uZShTQ3RtcCk7CiAg
ICAgIG51bWJlcl9zZXJ2aWNlZCsrOwogICAgfTsKfQoKaW50IGFoYTE1NDJfcXVldWVjb21tYW5k
KFNjc2lfQ21uZCAqIFNDcG50LCB2b2lkICgqZG9uZSkoU2NzaV9DbW5kICopKQp7CiAgICB1bmNo
YXIgYWhhY21kID0gQ01EX1NUQVJUX1NDU0k7CiAgICB1bmNoYXIgZGlyZWN0aW9uOwogICAgdW5j
aGFyICpjbWQgPSAodW5jaGFyICopIFNDcG50LT5jbW5kOwogICAgdW5jaGFyIHRhcmdldCA9IFND
cG50LT50YXJnZXQ7CiAgICB1bmNoYXIgbHVuID0gU0NwbnQtPmx1bjsKICAgIHVuc2lnbmVkIGxv
bmcgZmxhZ3M7CiAgICB2b2lkICpidWZmID0gU0NwbnQtPnJlcXVlc3RfYnVmZmVyOwogICAgaW50
IGJ1ZmZsZW4gPSBTQ3BudC0+cmVxdWVzdF9idWZmbGVuOwogICAgaW50IG1ibzsKICAgIHN0cnVj
dCBtYWlsYm94ICogbWI7CiAgICBzdHJ1Y3QgY2NiICAqY2NiOwoKICAgIERFQihpbnQgaSk7Cgog
ICAgbWIgPSBIT1NUREFUQShTQ3BudC0+aG9zdCktPm1iOwogICAgY2NiID0gSE9TVERBVEEoU0Nw
bnQtPmhvc3QpLT5jY2I7CgogICAgREVCKGlmICh0YXJnZXQgPiAxKSB7CiAgICAgIFNDcG50LT5y
ZXN1bHQgPSBESURfVElNRV9PVVQgPDwgMTY7CiAgICAgIGRvbmUoU0NwbnQpOyByZXR1cm4gMDt9
KTsKICAgIAogICAgaWYoKmNtZCA9PSBSRVFVRVNUX1NFTlNFKXsKI2lmbmRlZiBERUJVRzEKICAg
ICAgaWYgKGJ1ZmZsZW4gIT0gc2l6ZW9mKFNDcG50LT5zZW5zZV9idWZmZXIpKSB7CglwcmludGso
Ildyb25nIGJ1ZmZlciBsZW5ndGggc3VwcGxpZWQgZm9yIHJlcXVlc3Qgc2Vuc2UgKCVkKVxuIixi
dWZmbGVuKTsKICAgICAgfTsKI2VuZGlmCiAgICAgIFNDcG50LT5yZXN1bHQgPSAwOwogICAgICBk
b25lKFNDcG50KTsgCiAgICAgIHJldHVybiAwOwogICAgfTsKCiNpZmRlZiBERUJVRzEKICAgIGlm
ICgqY21kID09IFJFQURfMTAgfHwgKmNtZCA9PSBXUklURV8xMCkKICAgICAgaSA9IHhzY3NpMmlu
dChjbWQrMik7CiAgICBlbHNlIGlmICgqY21kID09IFJFQURfNiB8fCAqY21kID09IFdSSVRFXzYp
CiAgICAgIGkgPSBzY3NpMmludChjbWQrMik7CiAgICBlbHNlCiAgICAgIGkgPSAtMTsKICAgIGlm
IChkb25lKQogICAgICBwcmludGsoImFoYTE1NDJfcXVldWVjb21tYW5kOiBkZXYgJWQgY21kICUw
MnggcG9zICVkIGxlbiAlZCAiLCB0YXJnZXQsICpjbWQsIGksIGJ1ZmZsZW4pOwogICAgZWxzZQog
ICAgICBwcmludGsoImFoYTE1NDJfY29tbWFuZDogZGV2ICVkIGNtZCAlMDJ4IHBvcyAlZCBsZW4g
JWQgIiwgdGFyZ2V0LCAqY21kLCBpLCBidWZmbGVuKTsKICAgIGFoYTE1NDJfc3RhdCgpOwogICAg
cHJpbnRrKCJhaGExNTQyX3F1ZXVlY29tbWFuZDogZHVtcGluZyBzY3NpIGNtZDoiKTsKICAgIGZv
ciAoaSA9IDA7IGkgPCBTQ3BudC0+Y21kX2xlbjsgaSsrKSBwcmludGsoIiUwMnggIiwgY21kW2ld
KTsKICAgIHByaW50aygiXG4iKTsKICAgIGlmICgqY21kID09IFdSSVRFXzEwIHx8ICpjbWQgPT0g
V1JJVEVfNikKICAgICAgcmV0dXJuIDA7IC8qIHdlIGFyZSBzdGlsbCB0ZXN0aW5nLCBzbyAqZG9u
J3QqIHdyaXRlICovCiNlbmRpZgovKiBVc2UgdGhlIG91dGdvaW5nIG1haWxib3hlcyBpbiBhIHJv
dW5kLXJvYmluIGZhc2hpb24sIGJlY2F1c2UgdGhpcwogICBpcyBob3cgdGhlIGhvc3QgYWRhcHRl
ciB3aWxsIHNjYW4gZm9yIHRoZW0gKi8KCiAgICBzYXZlX2ZsYWdzKGZsYWdzKTsKICAgIGNsaSgp
OwogICAgbWJvID0gSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5haGExNTQyX2xhc3RfbWJvX3VzZWQg
KyAxOwogICAgaWYgKG1ibyA+PSBBSEExNTQyX01BSUxCT1hFUykgbWJvID0gMDsKCiAgICBkb3sK
ICAgICAgaWYobWJbbWJvXS5zdGF0dXMgPT0gMCAmJiBIT1NUREFUQShTQ3BudC0+aG9zdCktPlND
aW50W21ib10gPT0gTlVMTCkKCWJyZWFrOwogICAgICBtYm8rKzsKICAgICAgaWYgKG1ibyA+PSBB
SEExNTQyX01BSUxCT1hFUykgbWJvID0gMDsKICAgIH0gd2hpbGUgKG1ibyAhPSBIT1NUREFUQShT
Q3BudC0+aG9zdCktPmFoYTE1NDJfbGFzdF9tYm9fdXNlZCk7CgogICAgaWYobWJbbWJvXS5zdGF0
dXMgfHwgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFttYm9dKQogICAgICBwYW5pYygiVW5h
YmxlIHRvIGZpbmQgZW1wdHkgbWFpbGJveCBmb3IgYWhhMTU0Mi5cbiIpOwoKICAgIEhPU1REQVRB
KFNDcG50LT5ob3N0KS0+U0NpbnRbbWJvXSA9IFNDcG50OyAgLyogVGhpcyB3aWxsIGVmZmVjdGl2
ZWx5IHByZXZlbnQgc29tZW9uZSBlbHNlIGZyb20KCQkJICAgIHNjcmV3aW5nIHdpdGggdGhpcyBj
ZGIuICovCgogICAgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5haGExNTQyX2xhc3RfbWJvX3VzZWQg
PSBtYm87ICAgIAogICAgcmVzdG9yZV9mbGFncyhmbGFncyk7CgojaWZkZWYgREVCVUcxCiAgICBw
cmludGsoIlNlbmRpbmcgY29tbWFuZCAoJWQgJWx4KS4uLiIsbWJvLCAodW5zaWduZWQgbG9uZylk
b25lKTsKI2VuZGlmCgogICAgYW55MnNjc2kobWJbbWJvXS5jY2JwdHIsIFNDU0lfUEEoJmNjYltt
Ym9dKSk7IC8qIFRoaXMgZ2V0cyB0cmFzaGVkIGZvciBzb21lIHJlYXNvbiovCgogICAgbWVtc2V0
KCZjY2JbbWJvXSwgMCwgc2l6ZW9mKHN0cnVjdCBjY2IpKTsKCiAgICBjY2JbbWJvXS5jZGJsZW4g
PSBTQ3BudC0+Y21kX2xlbjsKCiAgICBkaXJlY3Rpb24gPSAwOwogICAgaWYgKCpjbWQgPT0gUkVB
RF8xMCB8fCAqY21kID09IFJFQURfNikKCWRpcmVjdGlvbiA9IDg7CiAgICBlbHNlIGlmICgqY21k
ID09IFdSSVRFXzEwIHx8ICpjbWQgPT0gV1JJVEVfNikKCWRpcmVjdGlvbiA9IDE2OwoKICAgIG1l
bWNweShjY2JbbWJvXS5jZGIsIGNtZCwgY2NiW21ib10uY2RibGVuKTsKCiAgICBpZiAoU0NwbnQt
PnVzZV9zZykgewogICAgICBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiBzZ3BudDsKICAgICAgc3RydWN0
IGNoYWluICogY3B0cjsKI2lmZGVmIERFQlVHMQogICAgICB1bnNpZ25lZCBjaGFyICogcHRyOwoj
ZW5kaWYKICAgICAgaW50IGk7CiAgICAgIGNjYlttYm9dLm9wID0gMjsJICAgICAgLyogU0NTSSBJ
bml0aWF0b3IgQ29tbWFuZCAgdy9zY2F0dGVyLWdhdGhlciovCiAgICAgIFNDcG50LT5ob3N0X3Nj
cmliYmxlID0gKHVuc2lnbmVkIGNoYXIgKikgc2NzaV9tYWxsb2MoNTEyKTsKICAgICAgc2dwbnQg
PSAoc3RydWN0IHNjYXR0ZXJsaXN0ICopIFNDcG50LT5yZXF1ZXN0X2J1ZmZlcjsKICAgICAgY3B0
ciA9IChzdHJ1Y3QgY2hhaW4gKikgU0NwbnQtPmhvc3Rfc2NyaWJibGU7IAogICAgICBpZiAoY3B0
ciA9PSBOVUxMKSBwYW5pYygiYWhhMTU0Mi5jOiB1bmFibGUgdG8gYWxsb2NhdGUgRE1BIG1lbW9y
eVxuIik7CiAgICAgIGZvcihpPTA7IGk8U0NwbnQtPnVzZV9zZzsgaSsrKSB7CglpZihzZ3BudFtp
XS5sZW5ndGggPT0gMCB8fCBTQ3BudC0+dXNlX3NnID4gMTYgfHwgCgkgICAoKChpbnQpc2dwbnRb
aV0uYWRkcmVzcykgJiAxKSB8fCAoc2dwbnRbaV0ubGVuZ3RoICYgMSkpewoJICB1bnNpZ25lZCBj
aGFyICogcHRyOwoJICBwcmludGsoIkJhZCBzZWdtZW50IGxpc3Qgc3VwcGxpZWQgdG8gYWhhMTU0
Mi5jICglZCwgJWQpXG4iLFNDcG50LT51c2Vfc2csaSk7CgkgIGZvcihpPTA7aTxTQ3BudC0+dXNl
X3NnO2krKyl7CgkgICAgcHJpbnRrKCIlZDogJXggJXggJWRcbiIsaSwodW5zaWduZWQgaW50KSBz
Z3BudFtpXS5hZGRyZXNzLCAodW5zaWduZWQgaW50KSBzZ3BudFtpXS5hbHRfYWRkcmVzcywKCQkg
ICBzZ3BudFtpXS5sZW5ndGgpOwoJICB9OwoJICBwcmludGsoImNwdHIgJXg6ICIsKHVuc2lnbmVk
IGludCkgY3B0cik7CgkgIHB0ciA9ICh1bnNpZ25lZCBjaGFyICopICZjcHRyW2ldOwoJICBmb3Io
aT0wO2k8MTg7aSsrKSBwcmludGsoIiUwMnggIiwgcHRyW2ldKTsKCSAgcGFuaWMoIkZvb29vb29v
b29kIGZpZ2h0ISIpOwoJfTsKCWFueTJzY3NpKGNwdHJbaV0uZGF0YXB0ciwgU0NTSV9QQShzZ3Bu
dFtpXS5hZGRyZXNzKSk7CglpZihTQ1NJX1BBKHNncG50W2ldLmFkZHJlc3Mrc2dwbnRbaV0ubGVu
Z3RoLTEpID4gSVNBX0RNQV9USFJFU0hPTEQpCgkgIEJBRF9ETUEoInNncG50Iiwgc2dwbnRbaV0u
YWRkcmVzcywgc2dwbnRbaV0ubGVuZ3RoKTsKCWFueTJzY3NpKGNwdHJbaV0uZGF0YWxlbiwgc2dw
bnRbaV0ubGVuZ3RoKTsKICAgICAgfTsKICAgICAgYW55MnNjc2koY2NiW21ib10uZGF0YWxlbiwg
U0NwbnQtPnVzZV9zZyAqIHNpemVvZihzdHJ1Y3QgY2hhaW4pKTsKICAgICAgYW55MnNjc2koY2Ni
W21ib10uZGF0YXB0ciwgU0NTSV9QQShjcHRyKSk7CiNpZmRlZiBERUJVRzEKICAgICAgcHJpbnRr
KCJjcHRyICVseDogIiwodW5zaWduZWQgbG9uZyljcHRyKTsKICAgICAgcHRyID0gKHVuc2lnbmVk
IGNoYXIgKikgY3B0cjsKICAgICAgZm9yKGk9MDtpPDE4O2krKykgcHJpbnRrKCIlMDJ4ICIsIHB0
cltpXSk7CiNlbmRpZgogICAgfSBlbHNlIHsKICAgICAgY2NiW21ib10ub3AgPSAwOwkgICAgICAv
KiBTQ1NJIEluaXRpYXRvciBDb21tYW5kICovCiAgICAgIFNDcG50LT5ob3N0X3NjcmliYmxlID0g
TlVMTDsKICAgICAgYW55MnNjc2koY2NiW21ib10uZGF0YWxlbiwgYnVmZmxlbik7CiAgICAgIGlm
KGJ1ZmYgJiYgU0NTSV9QQShidWZmK2J1ZmZsZW4tMSkgPiBJU0FfRE1BX1RIUkVTSE9MRCkKICAg
ICAgICBCQURfRE1BKCJidWZmIiwgYnVmZiwgYnVmZmxlbik7CiAgICAgIGFueTJzY3NpKGNjYltt
Ym9dLmRhdGFwdHIsIFNDU0lfUEEoYnVmZikpOwogICAgfTsKICAgIGNjYlttYm9dLmlkbHVuID0g
KHRhcmdldCY3KTw8NSB8IGRpcmVjdGlvbiB8IChsdW4gJiA3KTsgLypTQ1NJIFRhcmdldCBJZCov
CiAgICBjY2JbbWJvXS5yc2FsZW4gPSAxNjsKICAgIGNjYlttYm9dLmxpbmtwdHJbMF0gPSBjY2Jb
bWJvXS5saW5rcHRyWzFdID0gY2NiW21ib10ubGlua3B0clsyXSA9IDA7CiAgICBjY2JbbWJvXS5j
b21tbGlua2lkID0gMDsKCiNpZmRlZiBERUJVRzEKICAgIHsgaW50IGk7CiAgICBwcmludGsoImFo
YTE1NDJfY29tbWFuZDogc2VuZGluZy4uICIpOwogICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihj
Y2JbbWJvXSktMTA7IGkrKykKICAgICAgcHJpbnRrKCIlMDJ4ICIsICgodW5jaGFyICopJmNjYltt
Ym9dKVtpXSk7CiAgICB9OwojZW5kaWYKICAgIAogICAgaWYgKGRvbmUpIHsKCURFQihwcmludGso
ImFoYTE1NDJfcXVldWVjb21tYW5kOiBub3cgd2FpdGluZyBmb3IgaW50ZXJydXB0ICIpOyBhaGEx
NTQyX3N0YXQoKSk7CglTQ3BudC0+c2NzaV9kb25lID0gZG9uZTsKCW1iW21ib10uc3RhdHVzID0g
MTsKCWFoYTE1NDJfb3V0KFNDcG50LT5ob3N0LT5pb19wb3J0LCAmYWhhY21kLCAxKTsJCS8qIHN0
YXJ0IHNjc2kgY29tbWFuZCAqLwoJREVCKGFoYTE1NDJfc3RhdCgpKTsKICAgIH0KICAgIGVsc2UK
ICAgICAgcHJpbnRrKCJhaGExNTQyX3F1ZXVlY29tbWFuZDogZG9uZSBjYW4ndCBiZSBOVUxMXG4i
KTsKICAgIAogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyB2b2lkIGludGVybmFsX2RvbmUoU2NzaV9D
bW5kICogU0NwbnQpCnsKCVNDcG50LT5TQ3AuU3RhdHVzKys7Cn0KCmludCBhaGExNTQyX2NvbW1h
bmQoU2NzaV9DbW5kICogU0NwbnQpCnsKICAgIERFQihwcmludGsoImFoYTE1NDJfY29tbWFuZDog
Li5jYWxsaW5nIGFoYTE1NDJfcXVldWVjb21tYW5kXG4iKSk7CgogICAgYWhhMTU0Ml9xdWV1ZWNv
bW1hbmQoU0NwbnQsIGludGVybmFsX2RvbmUpOwoKICAgIFNDcG50LT5TQ3AuU3RhdHVzID0gMDsK
ICAgIHdoaWxlICghU0NwbnQtPlNDcC5TdGF0dXMpCiAgICAJYmFycmllcigpOwogICAgcmV0dXJu
IFNDcG50LT5yZXN1bHQ7Cn0KCi8qIEluaXRpYWxpemUgbWFpbGJveGVzICovCnN0YXRpYyB2b2lk
IHNldHVwX21haWxib3hlcyhpbnQgYnNlLCBzdHJ1Y3QgU2NzaV9Ib3N0ICogc2hwbnQpCnsKICAg
IGludCBpOwogICAgc3RydWN0IG1haWxib3ggKiBtYjsKICAgIHN0cnVjdCBjY2IgICpjY2I7Cgog
ICAgdW5jaGFyIGNtZFs1XSA9IHtDTURfTUJJTklULCBBSEExNTQyX01BSUxCT1hFUywgMCwgMCwg
MH07CgogICAgbWIgPSBIT1NUREFUQShzaHBudCktPm1iOwogICAgY2NiID0gSE9TVERBVEEoc2hw
bnQpLT5jY2I7CgogICAgZm9yKGk9MDsgaTxBSEExNTQyX01BSUxCT1hFUzsgaSsrKXsKICAgICAg
bWJbaV0uc3RhdHVzID0gbWJbQUhBMTU0Ml9NQUlMQk9YRVMraV0uc3RhdHVzID0gMDsKICAgICAg
YW55MnNjc2kobWJbaV0uY2NicHRyLCBTQ1NJX1BBKCZjY2JbaV0pKTsKICAgIH07CiAgICBhaGEx
NTQyX2ludHJfcmVzZXQoYnNlKTsgICAgIC8qIHJlc2V0IGludGVycnVwdHMsIHNvIHRoZXkgZG9u
J3QgYmxvY2sgKi8JCiAgICBhbnkyc2NzaSgoY21kKzIpLCBTQ1NJX1BBKG1iKSk7CiAgICBhaGEx
NTQyX291dChic2UsIGNtZCwgNSk7CiAgICBXQUlUKElOVFJGTEFHUyhic2UpLCBJTlRSTUFTSywg
SEFDQywgMCk7CiAgICB3aGlsZSAoMCkgewogICAgICBmYWlsOgoJcHJpbnRrKCJhaGExNTQyX2Rl
dGVjdDogZmFpbGVkIHNldHRpbmcgdXAgbWFpbGJveGVzXG4iKTsKICAgIH0KICAgIGFoYTE1NDJf
aW50cl9yZXNldChic2UpOwp9CgpzdGF0aWMgaW50IGFoYTE1NDJfZ2V0Y29uZmlnKGludCBiYXNl
X2lvLCB1bnNpZ25lZCBjaGFyICogaXJxX2xldmVsLCB1bnNpZ25lZCBjaGFyICogZG1hX2NoYW4s
IHVuc2lnbmVkIGNoYXIgKiBzY3NpX2lkKQp7CiAgdW5jaGFyIGlucXVpcnlfY21kW10gPSB7Q01E
X1JFVENPTkYgfTsKICB1bmNoYXIgaW5xdWlyeV9yZXN1bHRbM107CiAgaW50IGk7CiAgaSA9IGlu
YihTVEFUVVMoYmFzZV9pbykpOwogIGlmIChpICYgREYpIHsKICAgIGkgPSBpbmIoREFUQShiYXNl
X2lvKSk7CiAgfTsKICBhaGExNTQyX291dChiYXNlX2lvLCBpbnF1aXJ5X2NtZCwgMSk7CiAgYWhh
MTU0Ml9pbihiYXNlX2lvLCBpbnF1aXJ5X3Jlc3VsdCwgMyk7CiAgV0FJVChJTlRSRkxBR1MoYmFz
ZV9pbyksIElOVFJNQVNLLCBIQUNDLCAwKTsKICB3aGlsZSAoMCkgewogIGZhaWw6CiAgICBwcmlu
dGsoImFoYTE1NDJfZGV0ZWN0OiBxdWVyeSBib2FyZCBzZXR0aW5nc1xuIik7CiAgfQogIGFoYTE1
NDJfaW50cl9yZXNldChiYXNlX2lvKTsKICBzd2l0Y2goaW5xdWlyeV9yZXN1bHRbMF0pewogIGNh
c2UgMHg4MDoKICAgICpkbWFfY2hhbiA9IDc7CiAgICBicmVhazsKICBjYXNlIDB4NDA6CiAgICAq
ZG1hX2NoYW4gPSA2OwogICAgYnJlYWs7CiAgY2FzZSAweDIwOgogICAgKmRtYV9jaGFuID0gNTsK
ICAgIGJyZWFrOwogIGNhc2UgMHgwMToKICAgICpkbWFfY2hhbiA9IDA7CiAgICBicmVhazsKICBj
YXNlIDA6CiAgICAvKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGFkYXB0ZXIsIGFsdGhvdWdoIEFkYXB0
ZWMgMTU0MiBjb21wYXRpYmxlLCBkb2Vzbid0IHVzZSBhIERNQSBjaGFubmVsLgogICAgICAgQ3Vy
cmVudGx5IG9ubHkgYXdhcmUgb2YgdGhlIEJ1c0xvZ2ljIEJULTQ0NVMgVkwtQnVzIGFkYXB0ZXIg
d2hpY2ggbmVlZHMgdGhpcy4gKi8KICAgICpkbWFfY2hhbiA9IDB4RkY7CiAgICBicmVhazsKICBk
ZWZhdWx0OgogICAgcHJpbnRrKCJVbmFibGUgdG8gZGV0ZXJtaW5lIEFkYXB0ZWMgRE1BIHByaW9y
aXR5LiAgRGlzYWJsaW5nIGJvYXJkXG4iKTsKICAgIHJldHVybiAtMTsKICB9OwogIHN3aXRjaChp
bnF1aXJ5X3Jlc3VsdFsxXSl7CiAgY2FzZSAweDQwOgogICAgKmlycV9sZXZlbCA9IDE1OwogICAg
YnJlYWs7CiAgY2FzZSAweDIwOgogICAgKmlycV9sZXZlbCA9IDE0OwogICAgYnJlYWs7CiAgY2Fz
ZSAweDg6CiAgICAqaXJxX2xldmVsID0gMTI7CiAgICBicmVhazsKICBjYXNlIDB4NDoKICAgICpp
cnFfbGV2ZWwgPSAxMTsKICAgIGJyZWFrOwogIGNhc2UgMHgyOgogICAgKmlycV9sZXZlbCA9IDEw
OwogICAgYnJlYWs7CiAgY2FzZSAweDE6CiAgICAqaXJxX2xldmVsID0gOTsKICAgIGJyZWFrOwog
IGRlZmF1bHQ6CiAgICBwcmludGsoIlVuYWJsZSB0byBkZXRlcm1pbmUgQWRhcHRlYyBJUlEgbGV2
ZWwuICBEaXNhYmxpbmcgYm9hcmRcbiIpOwogICAgcmV0dXJuIC0xOwogIH07CiAgKnNjc2lfaWQ9
aW5xdWlyeV9yZXN1bHRbMl0gJiA3OwogIHJldHVybiAwOwp9CgovKiBUaGlzIGZ1bmN0aW9uIHNo
b3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgMTU0MkMgYm9hcmRzIC0gd2UgY2FuIGRldGVjdAogICB0
aGUgc3BlY2lhbCBmaXJtd2FyZSBzZXR0aW5ncyBhbmQgdW5sb2NrIHRoZSBib2FyZCAqLwoKc3Rh
dGljIGludCBhaGExNTQyX21iZW5hYmxlKGludCBiYXNlKQp7CiAgc3RhdGljIHVuY2hhciBtYmVu
YWJsZV9jbWRbM107CiAgc3RhdGljIHVuY2hhciBtYmVuYWJsZV9yZXN1bHRbMl07CiAgaW50IHJl
dHZhbDsKICAKICByZXR2YWwgPSBCSU9TX1RSQU5TTEFUSU9OXzY0MzI7CgogIG1iZW5hYmxlX2Nt
ZFswXT1DTURfRVhUQklPUzsKICBhaGExNTQyX291dChiYXNlLG1iZW5hYmxlX2NtZCwxKTsKICBp
ZihhaGExNTQyX2luMShiYXNlLG1iZW5hYmxlX3Jlc3VsdCwyKSkKICAgIHJldHVybiByZXR2YWw7
CiAgV0FJVGQoSU5UUkZMQUdTKGJhc2UpLElOVFJNQVNLLEhBQ0MsMCwxMDApOwogIGFoYTE1NDJf
aW50cl9yZXNldChiYXNlKTsKICAKICBpZiAoKG1iZW5hYmxlX3Jlc3VsdFswXSAmIDB4MDgpIHx8
IG1iZW5hYmxlX3Jlc3VsdFsxXSkgewogICAgIG1iZW5hYmxlX2NtZFswXT1DTURfTUJFTkFCTEU7
CiAgICAgbWJlbmFibGVfY21kWzFdPTA7CiAgICAgbWJlbmFibGVfY21kWzJdPW1iZW5hYmxlX3Jl
c3VsdFsxXTsKCiAgICAgaWYobWJlbmFibGVfcmVzdWx0WzFdICYgMHgwMykgcmV0dmFsID0gQklP
U19UUkFOU0xBVElPTl8yNTU2MzsKCiAgICAgYWhhMTU0Ml9vdXQoYmFzZSxtYmVuYWJsZV9jbWQs
Myk7CiAgICAgV0FJVChJTlRSRkxBR1MoYmFzZSksSU5UUk1BU0ssSEFDQywwKTsKICB9OwogIHdo
aWxlKDApIHsKZmFpbDoKICAgIHByaW50aygiYWhhMTU0Ml9tYmVuYWJsZTogTWFpbGJveCBpbml0
IGZhaWxlZFxuIik7CiAgfQphaGExNTQyX2ludHJfcmVzZXQoYmFzZSk7CnJldHVybiByZXR2YWw7
Cn0KCi8qIFF1ZXJ5IHRoZSBib2FyZCB0byBmaW5kIG91dCBpZiBpdCBpcyBhIDE1NDIgb3IgYSAx
NzQwLCBvciB3aGF0ZXZlci4gKi8Kc3RhdGljIGludCBhaGExNTQyX3F1ZXJ5KGludCBiYXNlX2lv
LCBpbnQgKiB0cmFuc2wpCnsKICB1bmNoYXIgaW5xdWlyeV9jbWRbXSA9IHtDTURfSU5RVUlSWSB9
OwogIHVuY2hhciBpbnF1aXJ5X3Jlc3VsdFs0XTsKICBpbnQgaTsKICBpID0gaW5iKFNUQVRVUyhi
YXNlX2lvKSk7CiAgaWYgKGkgJiBERikgewogICAgaSA9IGluYihEQVRBKGJhc2VfaW8pKTsKICB9
OwogIGFoYTE1NDJfb3V0KGJhc2VfaW8sIGlucXVpcnlfY21kLCAxKTsKICBhaGExNTQyX2luKGJh
c2VfaW8sIGlucXVpcnlfcmVzdWx0LCA0KTsKICBXQUlUKElOVFJGTEFHUyhiYXNlX2lvKSwgSU5U
Uk1BU0ssIEhBQ0MsIDApOwogIHdoaWxlICgwKSB7CiAgZmFpbDoKICAgIHByaW50aygiYWhhMTU0
Ml9kZXRlY3Q6IHF1ZXJ5IGNhcmQgdHlwZVxuIik7CiAgfQogIGFoYTE1NDJfaW50cl9yZXNldChi
YXNlX2lvKTsKCiAgKnRyYW5zbCA9IEJJT1NfVFJBTlNMQVRJT05fNjQzMjsgLyogRGVmYXVsdCBj
YXNlICovCgovKiBGb3IgYW4gQUhBMTc0MCBzZXJpZXMgYm9hcmQsIHdlIGlnbm9yZSB0aGUgYm9h
cmQgc2luY2UgdGhlcmUgaXMgYQogICBoYXJkd2FyZSBidWcgd2hpY2ggY2FuIGxlYWQgdG8gd3Jv
bmcgYmxvY2tzIGJlaW5nIHJldHVybmVkIGlmIHRoZSBib2FyZAogICBpcyBvcGVyYXRpbmcgaW4g
dGhlIDE1NDIgZW11bGF0aW9uIG1vZGUuICBTaW5jZSB0aGVyZSBpcyBhbiBleHRlbmRlZCBtb2Rl
CiAgIGRyaXZlciwgd2Ugc2ltcGx5IGlnbm9yZSB0aGUgYm9hcmQgYW5kIGxldCB0aGUgMTc0MCBk
cml2ZXIgcGljayBpdCB1cC4KKi8KCiAgaWYgKGlucXVpcnlfcmVzdWx0WzBdID09IDB4NDMpIHsK
ICAgIHByaW50aygiYWhhMTU0Mi5jOiBFbXVsYXRpb24gbW9kZSBub3Qgc3VwcG9ydGVkIGZvciBB
SEEgMTc0TiBoYXJkd2FyZS5cbiIpOwogICAgcmV0dXJuIDE7CiAgfTsKCiAgLyogQWx3YXlzIGNh
bGwgdGhpcyAtIGJvYXJkcyB0aGF0IGRvIG5vdCBzdXBwb3J0IGV4dGVuZGVkIGJpb3MgdHJhbnNs
YXRpb24KICAgICB3aWxsIGlnbm9yZSB0aGUgY29tbWFuZCwgYW5kIHdlIHdpbGwgc2V0IHRoZSBw
cm9wZXIgZGVmYXVsdCAqLwoKICAqdHJhbnNsID0gYWhhMTU0Ml9tYmVuYWJsZShiYXNlX2lvKTsK
CiAgcmV0dXJuIDA7Cn0KCi8qIGNhbGxlZCBmcm9tIGluaXQvbWFpbi5jICovCl9faW5pdGZ1bmMo
dm9pZCBhaGExNTQyX3NldHVwKCBjaGFyICpzdHIsIGludCAqaW50cykpCnsKICAgIGNvbnN0IGNo
YXIgKmFoYXVzYWdlID0gImFoYTE1NDI6IHVzYWdlOiBhaGExNTQyPTxQT1JUQkFTRT5bLDxCVVNP
Tj4sPEJVU09GRj5bLDxETUFTUEVFRD5dXVxuIjsKICAgIHN0YXRpYyBpbnQgc2V0dXBfaWR4ID0g
MDsKICAgIGludCBzZXR1cF9wb3J0YmFzZTsKCiAgICBpZihzZXR1cF9pZHggPj0gTUFYQk9BUkRT
KQogICAgICB7CglwcmludGsoImFoYTE1NDI6IGFoYTE1NDJfc2V0dXAgY2FsbGVkIHRvbyBtYW55
IHRpbWVzISBCYWQgTElMTyBwYXJhbXMgP1xuIik7CglwcmludGsoIiAgIEVudHJ5bGluZSAxOiAl
c1xuIixzZXR1cF9zdHJbMF0pOwoJcHJpbnRrKCIgICBFbnRyeWxpbmUgMjogJXNcbiIsc2V0dXBf
c3RyWzFdKTsKCXByaW50aygiICAgVGhpcyBsaW5lOiAgICVzXG4iLHN0cik7CglyZXR1cm47CiAg
ICAgIH0KICAgIGlmIChpbnRzWzBdIDwgMSB8fCBpbnRzWzBdID4gNCkKICAgICAgewoJcHJpbnRr
KCJhaGExNTQyOiAlc1xuIiwgc3RyICk7CglwcmludGsoYWhhdXNhZ2UpOwoJcHJpbnRrKCJhaGEx
NTQyOiBXcm9uZyBwYXJhbWV0ZXJzIG1heSBjYXVzZSBzeXN0ZW0gbWFsZnVuY3Rpb24uLiBXZSB0
cnkgYW55d2F5Li5cbiIpOwogICAgICB9CgogICAgc2V0dXBfY2FsbGVkW3NldHVwX2lkeF09aW50
c1swXTsKICAgIHNldHVwX3N0cltzZXR1cF9pZHhdPXN0cjsKCiAgICBzZXR1cF9wb3J0YmFzZSAg
ICAgICAgICAgICA9IGludHNbMF0gPj0gMSA/IGludHNbMV0gOiAwOyAvKiBQcmVzZXJ2ZSB0aGUg
ZGVmYXVsdCB2YWx1ZS4uICovCiAgICBzZXR1cF9idXNvbiAgIFtzZXR1cF9pZHhdICA9IGludHNb
MF0gPj0gMiA/IGludHNbMl0gOiA3OwogICAgc2V0dXBfYnVzb2ZmICBbc2V0dXBfaWR4XSAgPSBp
bnRzWzBdID49IDMgPyBpbnRzWzNdIDogNTsKICAgIGlmIChpbnRzWzBdID49IDQpIHsKICAgICAg
aW50IGF0YnQgPSAtMTsKICAgICAgc3dpdGNoIChpbnRzWzRdKSB7CgljYXNlIDU6CgkgICAgYXRi
dCA9IDB4MDA7CgkgICAgYnJlYWs7CgljYXNlIDY6CgkgICAgYXRidCA9IDB4MDQ7CgkgICAgYnJl
YWs7CgljYXNlIDc6CgkgICAgYXRidCA9IDB4MDE7CgkgICAgYnJlYWs7CgljYXNlIDg6CgkgICAg
YXRidCA9IDB4MDI7CgkgICAgYnJlYWs7CgljYXNlIDEwOgoJICAgIGF0YnQgPSAweDAzOwoJICAg
IGJyZWFrOwoJZGVmYXVsdDoKCSAgICBwcmludGsoImFoYTE1NDI6ICVzXG4iLCBzdHIgKTsKCSAg
ICBwcmludGsoYWhhdXNhZ2UpOwoJICAgIHByaW50aygiYWhhMTU0MjogVmFsaWQgdmFsdWVzIGZv
ciBETUFTUEVFRCBhcmUgNS04LCAxMCBNQi9zLiAgVXNpbmcganVtcGVyIGRlZmF1bHRzLlxuIik7
CgkgICAgYnJlYWs7CiAgICAgIH0KICAgICAgc2V0dXBfZG1hc3BlZWRbc2V0dXBfaWR4XSAgPSBh
dGJ0OwogICAgfQoKICAgIGlmIChzZXR1cF9wb3J0YmFzZSAhPSAwKQogICAgICBiYXNlc1tzZXR1
cF9pZHhdID0gc2V0dXBfcG9ydGJhc2U7CgogICAgKytzZXR1cF9pZHg7Cn0KCi8qIHJldHVybiBu
b24temVybyBvbiBkZXRlY3Rpb24gKi8KaW50IGFoYTE1NDJfZGV0ZWN0KFNjc2lfSG9zdF9UZW1w
bGF0ZSAqIHRwbnQpCnsKICAgIHVuc2lnbmVkIGNoYXIgZG1hX2NoYW47CiAgICB1bnNpZ25lZCBj
aGFyIGlycV9sZXZlbDsKICAgIHVuc2lnbmVkIGNoYXIgc2NzaV9pZDsKICAgIHVuc2lnbmVkIGxv
bmcgZmxhZ3M7CiAgICB1bnNpZ25lZCBpbnQgYmFzZV9pbzsKICAgIGludCB0cmFuczsKICAgIHN0
cnVjdCBTY3NpX0hvc3QgKiBzaHBudCA9IE5VTEw7CiAgICBpbnQgY291bnQgPSAwOwogICAgaW50
IGluZHg7CgogICAgREVCKHByaW50aygiYWhhMTU0Ml9kZXRlY3Q6IFxuIikpOwoKICAgIHRwbnQt
PnByb2NfZGlyID0gJnByb2Nfc2NzaV9haGExNTQyOwoKICAgIGZvcihpbmR4ID0gMDsgaW5keCA8
IHNpemVvZihiYXNlcykvc2l6ZW9mKGJhc2VzWzBdKTsgaW5keCsrKQoJICAgIGlmKGJhc2VzW2lu
ZHhdICE9IDAgJiYgIWNoZWNrX3JlZ2lvbihiYXNlc1tpbmR4XSwgNCkpIHsgCgkJICAgIHNocG50
ID0gc2NzaV9yZWdpc3Rlcih0cG50LAoJCQkJCSAgc2l6ZW9mKHN0cnVjdCBhaGExNTQyX2hvc3Rk
YXRhKSk7CgoJCSAgICAvKiBGb3Igbm93IHdlIGRvIHRoaXMgLSB1bnRpbCBrbWFsbG9jIGlzIG1v
cmUgaW50ZWxsaWdlbnQKCQkgICAgICAgd2UgYXJlIHJlc2lnbmVkIHRvIHN0dXBpZCBoYWNrcyBs
aWtlIHRoaXMgKi8KCQkgICAgaWYgKFNDU0lfUEEoc2hwbnQpID49IElTQV9ETUFfVEhSRVNIT0xE
KSB7CgkJICAgICAgcHJpbnRrKCJJbnZhbGlkIGFkZHJlc3MgZm9yIHNocG50IHdpdGggMTU0Mi5c
biIpOwoJCSAgICAgIGdvdG8gdW5yZWdpc3RlcjsKCQkgICAgfQoKCQkgICAgaWYoIWFoYTE1NDJf
dGVzdF9wb3J0KGJhc2VzW2luZHhdLCBzaHBudCkpIGdvdG8gdW5yZWdpc3RlcjsKCgoJCSAgICBi
YXNlX2lvID0gYmFzZXNbaW5keF07CgkJICAgIAoJCSAgICAvKiBTZXQgdGhlIEJ1cyBvbi9vZmYt
dGltZXMgYXMgbm90IHRvIHJ1aW4gZmxvcHB5IHBlcmZvcm1hbmNlICovCgkgICAgewoJCSAgICB1
bmNoYXIgb25jbWRbXSA9IHtDTURfQlVTT05fVElNRSwgN307CgkJICAgIHVuY2hhciBvZmZjbWRb
XSA9IHtDTURfQlVTT0ZGX1RJTUUsIDV9OwoKCQkgICAgaWYoc2V0dXBfY2FsbGVkW2luZHhdKQoJ
CSAgICAgIHsKCQkJb25jbWRbMV0gID0gc2V0dXBfYnVzb25baW5keF07CgkJCW9mZmNtZFsxXSA9
IHNldHVwX2J1c29mZltpbmR4XTsKCQkgICAgICB9CgkJICAgIAoJCSAgICBhaGExNTQyX2ludHJf
cmVzZXQoYmFzZV9pbyk7CgkJICAgIGFoYTE1NDJfb3V0KGJhc2VfaW8sIG9uY21kLCAyKTsKCQkg
ICAgV0FJVChJTlRSRkxBR1MoYmFzZV9pbyksIElOVFJNQVNLLCBIQUNDLCAwKTsKCQkgICAgYWhh
MTU0Ml9pbnRyX3Jlc2V0KGJhc2VfaW8pOwoJCSAgICBhaGExNTQyX291dChiYXNlX2lvLCBvZmZj
bWQsIDIpOwoJCSAgICBXQUlUKElOVFJGTEFHUyhiYXNlX2lvKSwgSU5UUk1BU0ssIEhBQ0MsIDAp
OwoJCSAgICBpZiAoc2V0dXBfZG1hc3BlZWRbaW5keF0gPj0gMCkKCQkgICAgICB7CgkJCXVuY2hh
ciBkbWFjbWRbXSA9IHtDTURfRE1BU1BFRUQsIDB9OwoJCQlkbWFjbWRbMV0gPSBzZXR1cF9kbWFz
cGVlZFtpbmR4XTsKCQkJYWhhMTU0Ml9pbnRyX3Jlc2V0KGJhc2VfaW8pOwoJCQlhaGExNTQyX291
dChiYXNlX2lvLCBkbWFjbWQsIDIpOwoJCQlXQUlUKElOVFJGTEFHUyhiYXNlX2lvKSwgSU5UUk1B
U0ssIEhBQ0MsIDApOwoJCSAgICAgIH0KCQkgICAgd2hpbGUgKDApIHsKCQkgICAgZmFpbDoKCQkJ
ICAgIHByaW50aygiYWhhMTU0Ml9kZXRlY3Q6IHNldHRpbmcgYnVzIG9uL29mZi10aW1lIGZhaWxl
ZFxuIik7CgkJICAgIH0KCQkgICAgYWhhMTU0Ml9pbnRyX3Jlc2V0KGJhc2VfaW8pOwoJICAgIH0K
CQkgICAgaWYoYWhhMTU0Ml9xdWVyeShiYXNlX2lvLCAmdHJhbnMpKSAgZ290byB1bnJlZ2lzdGVy
OwoJCSAgICAKCQkgICAgaWYgKGFoYTE1NDJfZ2V0Y29uZmlnKGJhc2VfaW8sICZpcnFfbGV2ZWws
ICZkbWFfY2hhbiwgJnNjc2lfaWQpID09IC0xKSAgZ290byB1bnJlZ2lzdGVyOwoJCSAgICAKCQkg
ICAgcHJpbnRrKCJDb25maWd1cmluZyBBZGFwdGVjIChTQ1NJLUlEICVkKSBhdCBJTzoleCwgSVJR
ICVkIiwgc2NzaV9pZCwgYmFzZV9pbywgaXJxX2xldmVsKTsKCQkgICAgaWYgKGRtYV9jaGFuICE9
IDB4RkYpCgkJCSAgICBwcmludGsoIiwgRE1BIHByaW9yaXR5ICVkIiwgZG1hX2NoYW4pOwoJCSAg
ICBwcmludGsoIlxuIik7CgkJICAgIAoJCSAgICBERUIoYWhhMTU0Ml9zdGF0KCkpOwoJCSAgICBz
ZXR1cF9tYWlsYm94ZXMoYmFzZV9pbywgc2hwbnQpOwoJCSAgICAKCQkgICAgREVCKGFoYTE1NDJf
c3RhdCgpKTsKCQkgICAgCgkJICAgIERFQihwcmludGsoImFoYTE1NDJfZGV0ZWN0OiBlbmFibGUg
aW50ZXJydXB0IGNoYW5uZWwgJWRcbiIsIGlycV9sZXZlbCkpOwoJCSAgICBzYXZlX2ZsYWdzKGZs
YWdzKTsKCQkgICAgY2xpKCk7CgkJICAgIGlmIChyZXF1ZXN0X2lycShpcnFfbGV2ZWwsZG9fYWhh
MTU0Ml9pbnRyX2hhbmRsZSwgMCwgImFoYTE1NDIiLCBOVUxMKSkgewoJCQkgICAgcHJpbnRrKCJV
bmFibGUgdG8gYWxsb2NhdGUgSVJRIGZvciBhZGFwdGVjIGNvbnRyb2xsZXIuXG4iKTsKCQkJICAg
IHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwoJCQkgICAgZ290byB1bnJlZ2lzdGVyOwoJCSAgICB9CgkJ
ICAgIAoJCSAgICBpZiAoZG1hX2NoYW4gIT0gMHhGRikgewoJCQkgICAgaWYgKHJlcXVlc3RfZG1h
KGRtYV9jaGFuLCJhaGExNTQyIikpIHsKCQkJCSAgICBwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0
ZSBETUEgY2hhbm5lbCBmb3IgQWRhcHRlYy5cbiIpOwoJCQkJICAgIGZyZWVfaXJxKGlycV9sZXZl
bCwgTlVMTCk7CgkJCQkgICAgcmVzdG9yZV9mbGFncyhmbGFncyk7CgkJCQkgICAgZ290byB1bnJl
Z2lzdGVyOwoJCQkgICAgfQoJCQkgICAgCgkJCSAgICBpZiAoZG1hX2NoYW4gPT0gMCB8fCBkbWFf
Y2hhbiA+PSA1KSB7CgkJCQkgICAgc2V0X2RtYV9tb2RlKGRtYV9jaGFuLCBETUFfTU9ERV9DQVND
QURFKTsKCQkJCSAgICBlbmFibGVfZG1hKGRtYV9jaGFuKTsKCQkJICAgIH0KCQkgICAgfQoJCSAg
ICBhaGFfaG9zdFtpcnFfbGV2ZWwgLSA5XSA9IHNocG50OwogCQkgICAgc2hwbnQtPnRoaXNfaWQg
PSBzY3NpX2lkOwogCQkgICAgc2hwbnQtPnVuaXF1ZV9pZCA9IGJhc2VfaW87CgkJICAgIHNocG50
LT5pb19wb3J0ID0gYmFzZV9pbzsKCQkgICAgc2hwbnQtPm5faW9fcG9ydCA9IDQ7ICAvKiBOdW1i
ZXIgb2YgYnl0ZXMgb2YgSS9PIHNwYWNlIHVzZWQgKi8KCQkgICAgc2hwbnQtPmRtYV9jaGFubmVs
ID0gZG1hX2NoYW47CgkJICAgIHNocG50LT5pcnEgPSBpcnFfbGV2ZWw7CgkJICAgIEhPU1REQVRB
KHNocG50KS0+Ymlvc190cmFuc2xhdGlvbiAgPSB0cmFuczsKCQkgICAgaWYodHJhbnMgPT0gQklP
U19UUkFOU0xBVElPTl8yNTU2MykgCgkJICAgICAgcHJpbnRrKCJhaGExNTQyLmM6IFVzaW5nIGV4
dGVuZGVkIGJpb3MgdHJhbnNsYXRpb25cbiIpOwoJCSAgICBIT1NUREFUQShzaHBudCktPmFoYTE1
NDJfbGFzdF9tYmlfdXNlZCAgPSAoMipBSEExNTQyX01BSUxCT1hFUyAtIDEpOwoJCSAgICBIT1NU
REFUQShzaHBudCktPmFoYTE1NDJfbGFzdF9tYm9fdXNlZCAgPSAoQUhBMTU0Ml9NQUlMQk9YRVMg
LSAxKTsKCQkgICAgbWVtc2V0KEhPU1REQVRBKHNocG50KS0+U0NpbnQsIDAsIHNpemVvZihIT1NU
REFUQShzaHBudCktPlNDaW50KSk7CgkJICAgIHJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwojaWYgMAoJ
CSAgICBERUIocHJpbnRrKCIgKioqIFJFQUQgQ0FQQUNJVFkgKioqXG4iKSk7CgkJICAgIAoJICAg
IHsKCQkgICAgdW5jaGFyIGJ1Zls4XTsKCQkgICAgc3RhdGljIHVuY2hhciBjbWRbXSA9IHsJUkVB
RF9DQVBBQ0lUWSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMH07CgkJICAgIGludCBpOwoJCSAg
ICAKCQkgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihidWYpOyArK2kpIGJ1ZltpXSA9IDB4ODc7
CgkJICAgIGZvciAoaSA9IDA7IGkgPCAyOyArK2kpCgkJCSAgICBpZiAoIWFoYTE1NDJfY29tbWFu
ZChpLCBjbWQsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSB7CgkJCQkgICAgcHJpbnRrKCJhaGFfZGV0ZWN0
OiBMVSAlZCBzZWN0b3Jfc2l6ZSAlZCBkZXZpY2Vfc2l6ZSAlZFxuIiwKCQkJCQkgICBpLCB4c2Nz
aTJpbnQoYnVmKzQpLCB4c2NzaTJpbnQoYnVmKSk7CgkJCSAgICB9CgkgICAgfQoJCSAgICAKCQkg
ICAgREVCKHByaW50aygiICoqKiBOT1cgUlVOTklORyBNWSBPV04gVEVTVCAqKiogXG4iKSk7CgkJ
ICAgIAoJCSAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQoJCSAgICB7CgkJCSAgICB1bnNpZ25l
ZCBjaGFyIGNtZFsxMF07CgkJCSAgICBzdGF0aWMgYnVmZmVyWzUxMl07CgkJCSAgICAKCQkJICAg
IGNtZFswXSA9IFJFQURfMTA7CgkJCSAgICBjbWRbMV0gPSAwOwoJCQkgICAgeGFueTJzY3NpKGNt
ZCsyLCBpKTsKCQkJICAgIGNtZFs2XSA9IDA7CgkJCSAgICBjbWRbN10gPSAwOwoJCQkgICAgY21k
WzhdID0gMTsKCQkJICAgIGNtZFs5XSA9IDA7CgkJCSAgICBhaGExNTQyX2NvbW1hbmQoMCwgY21k
LCBidWZmZXIsIDUxMik7CgkJICAgIH0KI2VuZGlmICAgIAoJCSAgICByZXF1ZXN0X3JlZ2lvbihi
YXNlc1tpbmR4XSwgNCwiYWhhMTU0MiIpOyAgLyogUmVnaXN0ZXIgdGhlIElPIHBvcnRzIHRoYXQg
d2UgdXNlICovCgkJICAgIGNvdW50Kys7CgkJICAgIGNvbnRpbnVlOwoJICAgIHVucmVnaXN0ZXI6
CgkJICAgIHNjc2lfdW5yZWdpc3RlcihzaHBudCk7CgkJICAgIGNvbnRpbnVlOwoJCSAgICAKCSAg
ICB9OwoJCiAgICByZXR1cm4gY291bnQ7Cn0KCnN0YXRpYyBpbnQgYWhhMTU0Ml9yZXN0YXJ0KHN0
cnVjdCBTY3NpX0hvc3QgKiBzaG9zdCkKewogIGludCBpOwogIGludCBjb3VudCA9IDA7CiNpZiAw
CiAgdW5jaGFyIGFoYWNtZCA9IENNRF9TVEFSVF9TQ1NJOwojZW5kaWYKCiAgZm9yKGk9MDsgaTwg
QUhBMTU0Ml9NQUlMQk9YRVM7IGkrKykKICAgaWYoSE9TVERBVEEoc2hvc3QpLT5TQ2ludFtpXSAm
JiAKICAgICAgIShIT1NUREFUQShzaG9zdCktPlNDaW50W2ldLT5kZXZpY2UtPnNvZnRfcmVzZXQp
KQogICAgIHsKI2lmIDAKCUhPU1REQVRBKHNob3N0KS0+bWJbaV0uc3RhdHVzID0gMTsgLyogSW5k
aWNhdGUgcmVhZHkgdG8gcmVzdGFydC4uLiAqLwojZW5kaWYKCWNvdW50Kys7CiAgICAgfSAgICAg
CgogIHByaW50aygiUG90ZW50aWFsIHRvIHJlc3RhcnQgJWQgc3RhbGxlZCBjb21tYW5kcy4uLlxu
IiwgY291bnQpOwojaWYgMAogIC8qIHN0YXJ0IHNjc2kgY29tbWFuZCAqLwogIGlmIChjb3VudCkg
YWhhMTU0Ml9vdXQoc2hvc3QtPmlvX3BvcnQsICZhaGFjbWQsIDEpOwojZW5kaWYKICByZXR1cm4g
MDsKfQoKaW50IGFoYTE1NDJfYWJvcnQoU2NzaV9DbW5kICogU0NwbnQpCnsKICAgIAogICAgLyoK
ICAgICAqIFRoZSBhYm9ydCBjb21tYW5kIGRvZXMgbm90IGxlYXZlIHRoZSBkZXZpY2UgaW4gYSBj
bGVhbiBzdGF0ZSB3aGVyZQogICAgICogIGl0IGlzIGF2YWlsYWJsZSB0byBiZSB1c2VkIGFnYWlu
LiAgVW50aWwgdGhpcyBnZXRzIHdvcmtlZCBvdXQsIHdlCiAgICAgKiB3aWxsIGxlYXZlIGl0IGNv
bW1lbnRlZCBvdXQuICAKICAgICAqLwoKICAgIHByaW50aygiYWhhMTU0Mi5jOiBVbmFibGUgdG8g
YWJvcnQgY29tbWFuZCBmb3IgdGFyZ2V0ICVkXG4iLCAKCSAgIFNDcG50LT50YXJnZXQpOwogICAg
cmV0dXJuIEZBSUxFRDsKfQoKLyoKICogVGhpcyBpcyBhIGRldmljZSByZXNldC4gIFRoaXMgaXMg
aGFuZGxlZCBieSBzZW5kaW5nIGEgc3BlY2lhbCBjb21tYW5kCiAqIHRvIHRoZSBkZXZpY2UuCiAq
LwppbnQgYWhhMTU0Ml9kZXZfcmVzZXQoU2NzaV9DbW5kICogU0NwbnQpCnsKICAgIHVuc2lnbmVk
IGxvbmcgZmxhZ3M7CiAgICBzdHJ1Y3QgbWFpbGJveCAqIG1iOwogICAgdW5jaGFyIHRhcmdldCA9
IFNDcG50LT50YXJnZXQ7CiAgICB1bmNoYXIgbHVuID0gU0NwbnQtPmx1bjsKICAgIGludCBtYm87
CiAgICBzdHJ1Y3QgY2NiICAqY2NiOwogICAgdW5jaGFyIGFoYWNtZCA9IENNRF9TVEFSVF9TQ1NJ
OwoKICAgIGNjYiA9IEhPU1REQVRBKFNDcG50LT5ob3N0KS0+Y2NiOwogICAgbWIgPSBIT1NUREFU
QShTQ3BudC0+aG9zdCktPm1iOwoKICAgIHNhdmVfZmxhZ3MoZmxhZ3MpOwogICAgY2xpKCk7CiAg
ICBtYm8gPSBIT1NUREFUQShTQ3BudC0+aG9zdCktPmFoYTE1NDJfbGFzdF9tYm9fdXNlZCArIDE7
CiAgICBpZiAobWJvID49IEFIQTE1NDJfTUFJTEJPWEVTKSBtYm8gPSAwOwogICAgCiAgICBkb3sK
CWlmKG1iW21ib10uc3RhdHVzID09IDAgJiYgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFtt
Ym9dID09IE5VTEwpCgkgICAgYnJlYWs7CgltYm8rKzsKCWlmIChtYm8gPj0gQUhBMTU0Ml9NQUlM
Qk9YRVMpIG1ibyA9IDA7CiAgICB9IHdoaWxlIChtYm8gIT0gSE9TVERBVEEoU0NwbnQtPmhvc3Qp
LT5haGExNTQyX2xhc3RfbWJvX3VzZWQpOwogICAgCiAgICBpZihtYlttYm9dLnN0YXR1cyB8fCBI
T1NUREFUQShTQ3BudC0+aG9zdCktPlNDaW50W21ib10pCglwYW5pYygiVW5hYmxlIHRvIGZpbmQg
ZW1wdHkgbWFpbGJveCBmb3IgYWhhMTU0Mi5cbiIpOwogICAgCiAgICBIT1NUREFUQShTQ3BudC0+
aG9zdCktPlNDaW50W21ib10gPSBTQ3BudDsgIC8qIFRoaXMgd2lsbCBlZmZlY3RpdmVseQoJCQkJ
CQkgICBwcmV2ZW50IHNvbWVvbmUgZWxzZSBmcm9tCgkJCQkJCSAgIHNjcmV3aW5nIHdpdGggdGhp
cyBjZGIuICovCgkgICAgCiAgICBIT1NUREFUQShTQ3BudC0+aG9zdCktPmFoYTE1NDJfbGFzdF9t
Ym9fdXNlZCA9IG1ibzsgICAgCiAgICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKICAgIAogICAgYW55
MnNjc2kobWJbbWJvXS5jY2JwdHIsIFNDU0lfUEEoJmNjYlttYm9dKSk7IC8qIFRoaXMgZ2V0cyB0
cmFzaGVkIGZvciBzb21lIHJlYXNvbiovCgogICAgbWVtc2V0KCZjY2JbbWJvXSwgMCwgc2l6ZW9m
KHN0cnVjdCBjY2IpKTsKICAgIAogICAgY2NiW21ib10ub3AgPSAweDgxOyAvKiBCVVMgREVWSUNF
IFJFU0VUICovCgogICAgY2NiW21ib10uaWRsdW4gPSAodGFyZ2V0JjcpPDw1IHwgKGx1biAmIDcp
OyAvKlNDU0kgVGFyZ2V0IElkKi8KCiAgICBjY2JbbWJvXS5saW5rcHRyWzBdID0gY2NiW21ib10u
bGlua3B0clsxXSA9IGNjYlttYm9dLmxpbmtwdHJbMl0gPSAwOwogICAgY2NiW21ib10uY29tbWxp
bmtpZCA9IDA7CiAgICAKICAgIC8qIAogICAgICogTm93IHRlbGwgdGhlIDE1NDIgdG8gZmx1c2gg
YWxsIHBlbmRpbmcgY29tbWFuZHMgZm9yIHRoaXMgCiAgICAgKiB0YXJnZXQgCiAgICAgKi8KICAg
IGFoYTE1NDJfb3V0KFNDcG50LT5ob3N0LT5pb19wb3J0LCAmYWhhY21kLCAxKTsKCiAgICBwcmlu
dGsoImFoYTE1NDIuYzogVHJ5aW5nIGRldmljZSByZXNldCBmb3IgdGFyZ2V0ICVkXG4iLCBTQ3Bu
dC0+dGFyZ2V0KTsKCiAgICByZXR1cm4gU1VDQ0VTUzsKCSAgICAKCiNpZmRlZiBFUklDX25ldmVy
ZGVmCiAgICAvKiAKICAgICAqIFdpdGggdGhlIDE1NDIgd2UgYXBwYXJlbnRseSBuZXZlciBnZXQg
YW4gaW50ZXJydXB0IHRvCiAgICAgKiBhY2tub3dsZWRnZSBhIGRldmljZSByZXNldCBiZWluZyBz
ZW50LiAgVGhlbiBhZ2FpbiwgTGVvbmFyZAogICAgICogc2F5cyB3ZSBhcmUgZG9pbmcgdGhpcyB3
cm9uZyBpbiB0aGUgZmlyc3QgcGxhY2UuLi4KICAgICAqCiAgICAgKiBUYWtlIGEgd2FpdCBhbmQg
c2VlIGF0dGl0dWRlLiAgSWYgd2UgZ2V0IHNwdXJpb3VzIGludGVycnVwdHMsCiAgICAgKiB0aGVu
IHRoZSBkZXZpY2UgcmVzZXQgaXMgZG9pbmcgc29tZXRoaW5nIHNhbmUgYW5kIHVzZWZ1bCwgYW5k
CiAgICAgKiB3ZSB3aWxsIHdhaXQgZm9yIHRoZSBpbnRlcnJ1cHQgdG8gcG9zdCBjb21wbGV0aW9u
LgogICAgICovCiAgICBwcmludGsoIlNlbnQgQlVTIERFVklDRSBSRVNFVCB0byB0YXJnZXQgJWRc
biIsIFNDcG50LT50YXJnZXQpOwogICAgCiAgICAvKgogICAgICogRnJlZSB0aGUgY29tbWFuZCBi
bG9jayBmb3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcgb24gdGhpcyAKICAgICAqIHRhcmdldC4uLiAK
ICAgICAqLwogICAgZm9yKGk9MDsgaTwgQUhBMTU0Ml9NQUlMQk9YRVM7IGkrKykKICAgIHsKCWlm
KEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV0gJiYKCSAgIEhPU1REQVRBKFNDcG50LT5o
b3N0KS0+U0NpbnRbaV0tPnRhcmdldCA9PSBTQ3BudC0+dGFyZ2V0KQoJewoJICAgIFNjc2lfQ21u
ZCAqIFNDdG1wOwoJICAgIFNDdG1wID0gSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFtpXTsK
CSAgICBpZiAoU0N0bXAtPmhvc3Rfc2NyaWJibGUpIAoJICAgIHsKCQlzY3NpX2ZyZWUoU0N0bXAt
Pmhvc3Rfc2NyaWJibGUsIDUxMik7CgkgICAgfQoJICAgIAoJICAgIEhPU1REQVRBKFNDcG50LT5o
b3N0KS0+U0NpbnRbaV0gPSBOVUxMOwoJICAgIEhPU1REQVRBKFNDcG50LT5ob3N0KS0+bWJbaV0u
c3RhdHVzID0gMDsKCX0KICAgIH0KICAgIHJldHVybiBTVUNDRVNTOwoKICAgIHJldHVybiBGQUlM
RUQ7CiNlbmRpZiAvKiBFUklDX25ldmVyZGVmICovCn0KCmludCBhaGExNTQyX2J1c19yZXNldChT
Y3NpX0NtbmQgKiBTQ3BudCkKewogICAgaW50IGk7CgogICAgLyogCiAgICAgKiBUaGlzIGRvZXMg
YSBzY3NpIHJlc2V0IGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgYnVzLgogICAgICogSW4gcHJpbmNp
cGxlLCB3ZSBjb3VsZCBhbHNvIHJlc2V0IHRoZSAxNTQyIC0gc2hvdWxkCiAgICAgKiB3ZSBkbyB0
aGlzPyAgVHJ5IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gYWRkIHRoYXQgbGF0ZXIKICAgICAqIGlm
IGl0IHR1cm5zIG91dCB0byBiZSB1c2VmdWwuCiAgICAgKi8KICAgIG91dGIoU0NSU1QsIENPTlRS
T0woU0NwbnQtPmhvc3QtPmlvX3BvcnQpKTsKCiAgICAvKgogICAgICogV2FpdCBmb3IgdGhlIHRo
aW5nIHRvIHNldHRsZSBkb3duIGEgYml0LiAgVW5mb3J0dW5hdGVseQogICAgICogdGhpcyBpcyBn
b2luZyB0byBiYXNpY2FsbHkgbG9jayB1cCB0aGUgbWFjaGluZSB3aGlsZSB3ZQogICAgICogd2Fp
dCBmb3IgdGhpcyB0byBjb21wbGV0ZS4gIFRvIGJlIDEwMCUgY29ycmVjdCwgd2UgbmVlZCB0bwog
ICAgICogY2hlY2sgZm9yIHRpbWVvdXQsIGFuZCBpZiB3ZSBhcmUgZG9pbmcgc29tZXRoaW5nIGxp
a2UgdGhpcwogICAgICogd2UgYXJlIHByZXR0eSBkZXNwZXJhdGUgYW55d2F5cy4KICAgICAqLwog
ICAgc2NzaV9zbGVlcCg0KkhaKTsKCiAgICBXQUlUKFNUQVRVUyhTQ3BudC0+aG9zdC0+aW9fcG9y
dCksIAoJIFNUQVRNQVNLLCBJTklUfElETEUsIFNUU1R8RElBR0Z8SU5WRENNRHxERnxDREYpOwog
ICAgCiAgICAvKgogICAgICogTm93IHRyeSB0byBwaWNrIHVwIHRoZSBwaWVjZXMuICBGb3IgYWxs
IHBlbmRpbmcgY29tbWFuZHMsCiAgICAgKiBmcmVlIGFueSBpbnRlcm5hbCBkYXRhIHN0cnVjdHVy
ZXMsIGFuZCBiYXNpY2FsbHkgY2xlYXIgdGhpbmdzCiAgICAgKiBvdXQuICBXZSBkbyBub3QgdHJ5
IGFuZCByZXN0YXJ0IGFueSBjb21tYW5kcyBvciBhbnl0aGluZyAtIAogICAgICogdGhlIHN0cmF0
ZWd5IGhhbmRsZXIgdGFrZXMgY2FyZSBvZiB0aGF0IGNyYXAuCiAgICAgKi8KICAgIHByaW50aygi
U2VudCBCVVMgUkVTRVQgdG8gc2NzaSBob3N0ICVkXG4iLCBTQ3BudC0+aG9zdC0+aG9zdF9ubyk7
CgogICAgZm9yKGk9MDsgaTwgQUhBMTU0Ml9NQUlMQk9YRVM7IGkrKykKICAgIHsKCWlmKEhPU1RE
QVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV0gIT0gTlVMTCkKCXsKCSAgICBTY3NpX0NtbmQgKiBT
Q3RtcDsKCSAgICBTQ3RtcCA9IEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV07CgogICAg
CgkgICAgaWYoIFNDdG1wLT5kZXZpY2UtPnNvZnRfcmVzZXQgKQoJICAgIHsKCQkvKgoJCSAqIElm
IHRoaXMgZGV2aWNlIGltcGxlbWVudHMgdGhlIHNvZnQgcmVzZXQgb3B0aW9uLAoJCSAqIHRoZW4g
aXQgaXMgc3RpbGwgaG9sZGluZyBvbnRvIHRoZSBjb21tYW5kLCBhbmQKCQkgKiBtYXkgeWV0IGNv
bXBsZXRlIGl0LiAgSW4gdGhpcyBjYXNlLCB3ZSBkb24ndAoJCSAqIGZsdXNoIHRoZSBkYXRhLgoJ
CSAqLwoJCWNvbnRpbnVlOwoJICAgIH0KCgkgICAgaWYgKFNDdG1wLT5ob3N0X3NjcmliYmxlKSAK
CSAgICB7CgkJc2NzaV9mcmVlKFNDdG1wLT5ob3N0X3NjcmliYmxlLCA1MTIpOwoJICAgIH0KCSAg
ICAKCSAgICBIT1NUREFUQShTQ3BudC0+aG9zdCktPlNDaW50W2ldID0gTlVMTDsKCSAgICBIT1NU
REFUQShTQ3BudC0+aG9zdCktPm1iW2ldLnN0YXR1cyA9IDA7Cgl9CiAgICB9CgogICAgcmV0dXJu
IFNVQ0NFU1M7CgpmYWlsOgogICAgcmV0dXJuIEZBSUxFRDsKfQoKaW50IGFoYTE1NDJfaG9zdF9y
ZXNldChTY3NpX0NtbmQgKiBTQ3BudCkKewogICAgaW50IGk7CgogICAgLyogCiAgICAgKiBUaGlz
IGRvZXMgYSBzY3NpIHJlc2V0IGZvciBhbGwgZGV2aWNlcyBvbiB0aGUgYnVzLgogICAgICogSW4g
cHJpbmNpcGxlLCB3ZSBjb3VsZCBhbHNvIHJlc2V0IHRoZSAxNTQyIC0gc2hvdWxkCiAgICAgKiB3
ZSBkbyB0aGlzPyAgVHJ5IHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gYWRkIHRoYXQgbGF0ZXIKICAg
ICAqIGlmIGl0IHR1cm5zIG91dCB0byBiZSB1c2VmdWwuCiAgICAgKi8KICAgIG91dGIoSFJTVCB8
IFNDUlNULCBDT05UUk9MKFNDcG50LT5ob3N0LT5pb19wb3J0KSk7CgogICAgLyoKICAgICAqIFdh
aXQgZm9yIHRoZSB0aGluZyB0byBzZXR0bGUgZG93biBhIGJpdC4gIFVuZm9ydHVuYXRlbHkKICAg
ICAqIHRoaXMgaXMgZ29pbmcgdG8gYmFzaWNhbGx5IGxvY2sgdXAgdGhlIG1hY2hpbmUgd2hpbGUg
d2UKICAgICAqIHdhaXQgZm9yIHRoaXMgdG8gY29tcGxldGUuICBUbyBiZSAxMDAlIGNvcnJlY3Qs
IHdlIG5lZWQgdG8KICAgICAqIGNoZWNrIGZvciB0aW1lb3V0LCBhbmQgaWYgd2UgYXJlIGRvaW5n
IHNvbWV0aGluZyBsaWtlIHRoaXMKICAgICAqIHdlIGFyZSBwcmV0dHkgZGVzcGVyYXRlIGFueXdh
eXMuCiAgICAgKi8KICAgIHNjc2lfc2xlZXAoNCpIWik7CgogICAgV0FJVChTVEFUVVMoU0NwbnQt
Pmhvc3QtPmlvX3BvcnQpLCAKCSBTVEFUTUFTSywgSU5JVHxJRExFLCBTVFNUfERJQUdGfElOVkRD
TUR8REZ8Q0RGKTsKICAgIAogICAgLyoKICAgICAqIFdlIG5lZWQgdG8gZG8gdGhpcyB0b28gYmVm
b3JlIHRoZSAxNTQyIGNhbiBpbnRlcmFjdCB3aXRoCiAgICAgKiB1cyBhZ2Fpbi4KICAgICAqLwog
ICAgc2V0dXBfbWFpbGJveGVzKFNDcG50LT5ob3N0LT5pb19wb3J0LCBTQ3BudC0+aG9zdCk7CiAg
ICAKICAgIC8qCiAgICAgKiBOb3cgdHJ5IHRvIHBpY2sgdXAgdGhlIHBpZWNlcy4gIEZvciBhbGwg
cGVuZGluZyBjb21tYW5kcywKICAgICAqIGZyZWUgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJl
cywgYW5kIGJhc2ljYWxseSBjbGVhciB0aGluZ3MKICAgICAqIG91dC4gIFdlIGRvIG5vdCB0cnkg
YW5kIHJlc3RhcnQgYW55IGNvbW1hbmRzIG9yIGFueXRoaW5nIC0gCiAgICAgKiB0aGUgc3RyYXRl
Z3kgaGFuZGxlciB0YWtlcyBjYXJlIG9mIHRoYXQgY3JhcC4KICAgICAqLwogICAgcHJpbnRrKCJT
ZW50IEJVUyBSRVNFVCB0byBzY3NpIGhvc3QgJWRcbiIsIFNDcG50LT5ob3N0LT5ob3N0X25vKTsK
ICAgIAogICAgZm9yKGk9MDsgaTwgQUhBMTU0Ml9NQUlMQk9YRVM7IGkrKykKICAgIHsKCWlmKEhP
U1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV0gIT0gTlVMTCkKCXsKCSAgICBTY3NpX0NtbmQg
KiBTQ3RtcDsKCSAgICBTQ3RtcCA9IEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV07CgoJ
ICAgIGlmKCBTQ3RtcC0+ZGV2aWNlLT5zb2Z0X3Jlc2V0ICkKCSAgICB7CgkJLyoKCQkgKiBJZiB0
aGlzIGRldmljZSBpbXBsZW1lbnRzIHRoZSBzb2Z0IHJlc2V0IG9wdGlvbiwKCQkgKiB0aGVuIGl0
IGlzIHN0aWxsIGhvbGRpbmcgb250byB0aGUgY29tbWFuZCwgYW5kCgkJICogbWF5IHlldCBjb21w
bGV0ZSBpdC4gIEluIHRoaXMgY2FzZSwgd2UgZG9uJ3QKCQkgKiBmbHVzaCB0aGUgZGF0YS4KCQkg
Ki8KCQljb250aW51ZTsKCSAgICB9CgoJICAgIGlmIChTQ3RtcC0+aG9zdF9zY3JpYmJsZSkgCgkg
ICAgewoJCXNjc2lfZnJlZShTQ3RtcC0+aG9zdF9zY3JpYmJsZSwgNTEyKTsKCSAgICB9CgkgICAg
CgkgICAgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFtpXSA9IE5VTEw7CgkgICAgSE9TVERB
VEEoU0NwbnQtPmhvc3QpLT5tYltpXS5zdGF0dXMgPSAwOwoJfQogICAgfQoKICAgIHJldHVybiBT
VUNDRVNTOwoKZmFpbDoKICAgIHJldHVybiBGQUlMRUQ7Cn0KCi8qCiAqIFRoZXNlIGFyZSB0aGUg
b2xkIGVycm9yIGhhbmRsaW5nIHJvdXRpbmVzLiAgVGhleSBhcmUgb25seSB0ZW1wb3JhcmlseQog
KiBoZXJlIHdoaWxlIHdlIHBsYXkgd2l0aCB0aGUgbmV3IGVycm9yIGhhbmRsaW5nIGNvZGUuCiAq
LwppbnQgYWhhMTU0Ml9vbGRfYWJvcnQoU2NzaV9DbW5kICogU0NwbnQpCnsKI2lmIDAKICB1bmNo
YXIgYWhhY21kID0gQ01EX1NUQVJUX1NDU0k7CiAgdW5zaWduZWQgbG9uZyBmbGFnczsKICBzdHJ1
Y3QgbWFpbGJveCAqIG1iOwogIGludCBtYmksIG1ibywgaTsKCiAgcHJpbnRrKCJJbiBhaGExNTQy
X2Fib3J0OiAleCAleFxuIiwKCSBpbmIoU1RBVFVTKFNDcG50LT5ob3N0LT5pb19wb3J0KSksCgkg
aW5iKElOVFJGTEFHUyhTQ3BudC0+aG9zdC0+aW9fcG9ydCkpKTsKCiAgc2F2ZV9mbGFncyhmbGFn
cyk7CiAgY2xpKCk7CiAgbWIgPSBIT1NUREFUQShTQ3BudC0+aG9zdCktPm1iOwogIG1iaSA9IEhP
U1REQVRBKFNDcG50LT5ob3N0KS0+YWhhMTU0Ml9sYXN0X21iaV91c2VkICsgMTsKICBpZiAobWJp
ID49IDIqQUhBMTU0Ml9NQUlMQk9YRVMpIG1iaSA9IEFIQTE1NDJfTUFJTEJPWEVTOwogIAogIGRv
ewogICAgaWYobWJbbWJpXS5zdGF0dXMgIT0gMCkgYnJlYWs7CiAgICBtYmkrKzsKICAgIGlmICht
YmkgPj0gMipBSEExNTQyX01BSUxCT1hFUykgbWJpID0gQUhBMTU0Ml9NQUlMQk9YRVM7CiAgfSB3
aGlsZSAobWJpICE9IEhPU1REQVRBKFNDcG50LT5ob3N0KS0+YWhhMTU0Ml9sYXN0X21iaV91c2Vk
KTsKICByZXN0b3JlX2ZsYWdzKGZsYWdzKTsKCiAgaWYobWJbbWJpXS5zdGF0dXMpIHsKICAgIHBy
aW50aygiTG9zdCBpbnRlcnJ1cHQgZGlzY292ZXJlZCBvbiBpcnEgJWQgLSBhdHRlbXB0aW5nIHRv
IHJlY292ZXJcbiIsIAoJICAgU0NwbnQtPmhvc3QtPmlycSk7CiAgICBhaGExNTQyX2ludHJfaGFu
ZGxlKFNDcG50LT5ob3N0LT5pcnEsIE5VTEwpOwogICAgcmV0dXJuIDA7CiAgfQoKICAvKiBPSywg
bm8gbG9zdCBpbnRlcnJ1cHQuICBUcnkgbG9va2luZyB0byBzZWUgaG93IG1hbnkgcGVuZGluZyBj
b21tYW5kcwogICAgIHdlIHRoaW5rIHdlIGhhdmUuICovCgogIGZvcihpPTA7IGk8IEFIQTE1NDJf
TUFJTEJPWEVTOyBpKyspCiAgIGlmKEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV0pCiAg
ICAgewogICAgICAgaWYoSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFtpXSA9PSBTQ3BudCkg
ewoJIHByaW50aygiVGltZWQgb3V0IGNvbW1hbmQgcGVuZGluZyBmb3IgJXNcbiIsCgkJa2Rldm5h
bWUoU0NwbnQtPnJlcXVlc3QucnFfZGV2KSk7CgkgaWYgKEhPU1REQVRBKFNDcG50LT5ob3N0KS0+
bWJbaV0uc3RhdHVzKSB7CgkgICBwcmludGsoIk9HTUIgc3RpbGwgZnVsbCAtIHJlc3RhcnRpbmdc
biIpOwoJICAgYWhhMTU0Ml9vdXQoU0NwbnQtPmhvc3QtPmlvX3BvcnQsICZhaGFjbWQsIDEpOwoJ
IH07CiAgICAgICB9IGVsc2UKCSBwcmludGsoIk90aGVyIHBlbmRpbmcgY29tbWFuZCAlc1xuIiwK
CQlrZGV2bmFtZShTQ3BudC0+cmVxdWVzdC5ycV9kZXYpKTsKICAgICB9CgojZW5kaWYKCiAgICBE
RUIocHJpbnRrKCJhaGExNTQyX2Fib3J0XG4iKSk7CiNpZiAwCiAgICBzYXZlX2ZsYWdzKGZsYWdz
KTsKICAgIGNsaSgpOwogICAgZm9yKG1ibyA9IDA7IG1ibyA8IEFIQTE1NDJfTUFJTEJPWEVTOyBt
Ym8rKykKICAgICAgaWYgKFNDcG50ID09IEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbbWJv
XSl7CgltYlttYm9dLnN0YXR1cyA9IDI7ICAvKiBBYm9ydCBjb21tYW5kICovCglhaGExNTQyX291
dChTQ3BudC0+aG9zdC0+aW9fcG9ydCwgJmFoYWNtZCwgMSk7IC8qIHN0YXJ0IHNjc2kgY29tbWFu
ZCAqLwoJcmVzdG9yZV9mbGFncyhmbGFncyk7CglicmVhazsKICAgICAgfTsKI2VuZGlmCiAgICBy
ZXR1cm4gU0NTSV9BQk9SVF9TTk9PWkU7Cn0KCi8qIFdlIGRvIG5vdCBpbXBsZW1lbnQgYSByZXNl
dCBmdW5jdGlvbiBoZXJlLCBidXQgdGhlIHVwcGVyIGxldmVsIGNvZGUKICAgYXNzdW1lcyB0aGF0
IGl0IHdpbGwgZ2V0IHNvbWUga2luZCBvZiByZXNwb25zZSBmb3IgdGhlIGNvbW1hbmQgaW4KICAg
U0NwbnQuICBXZSBtdXN0IG9ibGlnZSwgb3IgdGhlIGNvbW1hbmQgd2lsbCBoYW5nIHRoZSBzY3Np
IHN5c3RlbS4KICAgRm9yIGEgZmlyc3QgZ28sIHdlIGFzc3VtZSB0aGF0IHRoZSAxNTQyIG5vdGlm
aWVzIHVzIHdpdGggYWxsIG9mIHRoZQogICBwZW5kaW5nIGNvbW1hbmRzIChpdCBkb2VzIGltcGxl
bWVudCBzb2Z0IHJlc2V0LCBhZnRlciBhbGwpLiAqLwoKaW50IGFoYTE1NDJfb2xkX3Jlc2V0KFNj
c2lfQ21uZCAqIFNDcG50LCB1bnNpZ25lZCBpbnQgcmVzZXRfZmxhZ3MpCnsKICAgIHVuY2hhciBh
aGFjbWQgPSBDTURfU1RBUlRfU0NTSTsKICAgIGludCBpOwoKICAgIC8qCiAgICAgKiBTZWUgaWYg
YSBidXMgcmVzZXQgd2FzIHN1Z2dlc3RlZC4KICAgICAqLwogICAgaWYoIHJlc2V0X2ZsYWdzICYg
U0NTSV9SRVNFVF9TVUdHRVNUX0JVU19SRVNFVCApCiAgICAgIHsKCS8qIAoJICogVGhpcyBkb2Vz
IGEgc2NzaSByZXNldCBmb3IgYWxsIGRldmljZXMgb24gdGhlIGJ1cy4KCSAqIEluIHByaW5jaXBs
ZSwgd2UgY291bGQgYWxzbyByZXNldCB0aGUgMTU0MiAtIHNob3VsZAoJICogd2UgZG8gdGhpcz8g
IFRyeSB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIGFkZCB0aGF0IGxhdGVyCgkgKiBpZiBpdCB0dXJu
cyBvdXQgdG8gYmUgdXNlZnVsLgoJICovCglvdXRiKEhSU1QgfCBTQ1JTVCwgQ09OVFJPTChTQ3Bu
dC0+aG9zdC0+aW9fcG9ydCkpOwoKCS8qCgkgKiBXYWl0IGZvciB0aGUgdGhpbmcgdG8gc2V0dGxl
IGRvd24gYSBiaXQuICBVbmZvcnR1bmF0ZWx5CgkgKiB0aGlzIGlzIGdvaW5nIHRvIGJhc2ljYWxs
eSBsb2NrIHVwIHRoZSBtYWNoaW5lIHdoaWxlIHdlCgkgKiB3YWl0IGZvciB0aGlzIHRvIGNvbXBs
ZXRlLiAgVG8gYmUgMTAwJSBjb3JyZWN0LCB3ZSBuZWVkIHRvCgkgKiBjaGVjayBmb3IgdGltZW91
dCwgYW5kIGlmIHdlIGFyZSBkb2luZyBzb21ldGhpbmcgbGlrZSB0aGlzCgkgKiB3ZSBhcmUgcHJl
dHR5IGRlc3BlcmF0ZSBhbnl3YXlzLgoJICovCglXQUlUKFNUQVRVUyhTQ3BudC0+aG9zdC0+aW9f
cG9ydCksIAoJICAgICBTVEFUTUFTSywgSU5JVHxJRExFLCBTVFNUfERJQUdGfElOVkRDTUR8REZ8
Q0RGKTsKCgkvKgoJICogV2UgbmVlZCB0byBkbyB0aGlzIHRvbyBiZWZvcmUgdGhlIDE1NDIgY2Fu
IGludGVyYWN0IHdpdGgKCSAqIHVzIGFnYWluLgoJICovCglzZXR1cF9tYWlsYm94ZXMoU0NwbnQt
Pmhvc3QtPmlvX3BvcnQsIFNDcG50LT5ob3N0KTsKCgkvKgoJICogTm93IHRyeSB0byBwaWNrIHVw
IHRoZSBwaWVjZXMuICBSZXN0YXJ0IGFsbCBjb21tYW5kcwoJICogdGhhdCBhcmUgY3VycmVudGx5
IGFjdGl2ZSBvbiB0aGUgYnVzLCBhbmQgcmVzZXQgYWxsIG9mCgkgKiB0aGUgZGF0YXN0cnVjdHVy
ZXMuICBXZSBoYXZlIHNvbWUgdGltZSB0byBraWxsIHdoaWxlCgkgKiB0aGluZ3Mgc2V0dGxlIGRv
d24sIHNvIHByaW50IGEgbmljZSBtZXNzYWdlLgoJICovCglwcmludGsoIlNlbnQgQlVTIFJFU0VU
IHRvIHNjc2kgaG9zdCAlZFxuIiwgU0NwbnQtPmhvc3QtPmhvc3Rfbm8pOwoKCWZvcihpPTA7IGk8
IEFIQTE1NDJfTUFJTEJPWEVTOyBpKyspCgkgIGlmKEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0Np
bnRbaV0gIT0gTlVMTCkKCSAgICB7CgkgICAgICBTY3NpX0NtbmQgKiBTQ3RtcDsKCSAgICAgIFND
dG1wID0gSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5TQ2ludFtpXTsKCSAgICAgIFNDdG1wLT5yZXN1
bHQgPSBESURfUkVTRVQgPDwgMTY7CgkgICAgICBpZiAoU0N0bXAtPmhvc3Rfc2NyaWJibGUpIHNj
c2lfZnJlZShTQ3RtcC0+aG9zdF9zY3JpYmJsZSwgNTEyKTsKCSAgICAgIHByaW50aygiU2VuZGlu
ZyBESURfUkVTRVQgZm9yIHRhcmdldCAlZFxuIiwgU0NwbnQtPnRhcmdldCk7CgkgICAgICBTQ3Rt
cC0+c2NzaV9kb25lKFNDcG50KTsKCSAgICAgIAoJICAgICAgSE9TVERBVEEoU0NwbnQtPmhvc3Qp
LT5TQ2ludFtpXSA9IE5VTEw7CgkgICAgICBIT1NUREFUQShTQ3BudC0+aG9zdCktPm1iW2ldLnN0
YXR1cyA9IDA7CgkgICAgfQoJLyoKCSAqIE5vdyB0ZWxsIHRoZSBtaWQtbGV2ZWwgY29kZSB3aGF0
IHdlIGRpZCBoZXJlLiAgU2luY2UKCSAqIHdlIGhhdmUgcmVzdGFydGVkIGFsbCBvZiB0aGUgb3V0
c3RhbmRpbmcgY29tbWFuZHMsCgkgKiB0aGVuIHJlcG9ydCBTVUNDRVNTLgoJICovCglyZXR1cm4g
KFNDU0lfUkVTRVRfU1VDQ0VTUyB8IFNDU0lfUkVTRVRfQlVTX1JFU0VUKTsKZmFpbDoKCXByaW50
aygiYWhhMTU0Mi5jOiBVbmFibGUgdG8gcGVyZm9ybSBoYXJkIHJlc2V0LlxuIik7CglwcmludGso
IlBvd2VyIGN5Y2xlIG1hY2hpbmUgdG8gcmVzZXRcbiIpOwoJcmV0dXJuIChTQ1NJX1JFU0VUX0VS
Uk9SIHwgU0NTSV9SRVNFVF9CVVNfUkVTRVQpOwoKCiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJ
LyogVGhpcyBkb2VzIGEgc2VsZWN0aXZlIHJlc2V0IG9mIGp1c3QgdGhlIG9uZSBkZXZpY2UgKi8K
CS8qIEZpcnN0IGxvY2F0ZSB0aGUgY2NiIGZvciB0aGlzIGNvbW1hbmQgKi8KCWZvcihpPTA7IGk8
IEFIQTE1NDJfTUFJTEJPWEVTOyBpKyspCgkgIGlmKEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0Np
bnRbaV0gPT0gU0NwbnQpCgkgICAgewoJICAgICAgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5jY2Jb
aV0ub3AgPSAweDgxOyAgLyogQlVTIERFVklDRSBSRVNFVCAqLwoJICAgICAgLyogTm93IHRlbGwg
dGhlIDE1NDIgdG8gZmx1c2ggYWxsIHBlbmRpbmcgY29tbWFuZHMgZm9yIHRoaXMgdGFyZ2V0ICov
CgkgICAgICBhaGExNTQyX291dChTQ3BudC0+aG9zdC0+aW9fcG9ydCwgJmFoYWNtZCwgMSk7Cgkg
ICAgICAKCSAgICAgIC8qIEhlcmUgaXMgdGhlIHRyaWNreSBwYXJ0LiAgV2hhdCB0byBkbyBuZXh0
LiAgRG8gd2UgZ2V0IGFuIGludGVycnVwdAoJCSBmb3IgdGhlIGNvbW1hbmRzIHRoYXQgd2UgYWJv
cnRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgdGFyZ2V0LCBvcgoJCSBkbyB3ZSBnZW5lcmF0ZSB0aGlz
IG9uIG91ciBvd24/ICBUcnkgaXQgd2l0aG91dCBmaXJzdCBhbmQgc2VlCgkJIHdoYXQgaGFwcGVu
cyAqLwoJICAgICAgcHJpbnRrKCJTZW50IEJVUyBERVZJQ0UgUkVTRVQgdG8gdGFyZ2V0ICVkXG4i
LCBTQ3BudC0+dGFyZ2V0KTsKCSAgICAgIAoJICAgICAgLyogSWYgdGhlIGZpcnN0IGRvZXMgbm90
IHdvcmssIHRoZW4gdHJ5IHRoZSBzZWNvbmQuICBJIHRoaW5rIHRoZQoJCSBmaXJzdCBvcHRpb24g
aXMgbW9yZSBsaWtlbHkgdG8gYmUgY29ycmVjdC4gRnJlZSB0aGUgY29tbWFuZAoJCSBibG9jayBm
b3IgYWxsIGNvbW1hbmRzIHJ1bm5pbmcgb24gdGhpcyB0YXJnZXQuLi4gKi8KCSAgICAgIGZvcihp
PTA7IGk8IEFIQTE1NDJfTUFJTEJPWEVTOyBpKyspCgkJaWYoSE9TVERBVEEoU0NwbnQtPmhvc3Qp
LT5TQ2ludFtpXSAmJgoJCSAgIEhPU1REQVRBKFNDcG50LT5ob3N0KS0+U0NpbnRbaV0tPnRhcmdl
dCA9PSBTQ3BudC0+dGFyZ2V0KQoJCSAgewoJCSAgICBTY3NpX0NtbmQgKiBTQ3RtcDsKCQkgICAg
U0N0bXAgPSBIT1NUREFUQShTQ3BudC0+aG9zdCktPlNDaW50W2ldOwoJCSAgICBTQ3RtcC0+cmVz
dWx0ID0gRElEX1JFU0VUIDw8IDE2OwoJCSAgICBpZiAoU0N0bXAtPmhvc3Rfc2NyaWJibGUpIHNj
c2lfZnJlZShTQ3RtcC0+aG9zdF9zY3JpYmJsZSwgNTEyKTsKCQkgICAgcHJpbnRrKCJTZW5kaW5n
IERJRF9SRVNFVCBmb3IgdGFyZ2V0ICVkXG4iLCBTQ3BudC0+dGFyZ2V0KTsKCQkgICAgU0N0bXAt
PnNjc2lfZG9uZShTQ3BudCk7CgkJICAgIAoJCSAgICBIT1NUREFUQShTQ3BudC0+aG9zdCktPlND
aW50W2ldID0gTlVMTDsKCQkgICAgSE9TVERBVEEoU0NwbnQtPmhvc3QpLT5tYltpXS5zdGF0dXMg
PSAwOwoJCSAgfQoJICAgICAgcmV0dXJuIFNDU0lfUkVTRVRfU1VDQ0VTUzsKCSAgICB9CiAgICAg
IH0KICAgIC8qIE5vIGFjdGl2ZSBjb21tYW5kIGF0IHRoaXMgdGltZSwgc28gdGhpcyBtZWFucyB0
aGF0IGVhY2ggdGltZSB3ZSBnb3QKICAgICAgIHNvbWUga2luZCBvZiByZXNwb25zZSB0aGUgbGFz
dCB0aW1lIHRocm91Z2guICBUZWxsIHRoZSBtaWQtbGV2ZWwgY29kZQogICAgICAgdG8gcmVxdWVz
dCBzZW5zZSBpbmZvcm1hdGlvbiBpbiBvcmRlciB0byBkZWNpZGUgd2hhdCB0byBkbyBuZXh0LiAq
LwogICAgcmV0dXJuIFNDU0lfUkVTRVRfUFVOVDsKfQoKI2luY2x1ZGUgInNkLmgiCgppbnQgYWhh
MTU0Ml9iaW9zcGFyYW0oU2NzaV9EaXNrICogZGlzaywga2Rldl90IGRldiwgaW50ICogaXApCnsK
ICBpbnQgdHJhbnNsYXRpb25fYWxnb3JpdGhtOwogIGludCBzaXplID0gZGlzay0+Y2FwYWNpdHk7
CgogIHRyYW5zbGF0aW9uX2FsZ29yaXRobSA9IEhPU1REQVRBKGRpc2stPmRldmljZS0+aG9zdCkt
PmJpb3NfdHJhbnNsYXRpb247CgogIGlmKChzaXplPj4xMSkgPiAxMDI0ICYmIHRyYW5zbGF0aW9u
X2FsZ29yaXRobSA9PSBCSU9TX1RSQU5TTEFUSU9OXzI1NTYzKSB7CiAgICAvKiBQbGVhc2UgdmVy
aWZ5IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyB3aGF0IERPUyByZXR1cm5zICovCiAgICBpcFsw
XSA9IDI1NTsKICAgIGlwWzFdID0gNjM7CiAgICBpcFsyXSA9IHNpemUgLzI1NS82MzsKICB9IGVs
c2UgewogICAgaXBbMF0gPSA2NDsKICAgIGlwWzFdID0gMzI7CiAgICBpcFsyXSA9IHNpemUgPj4g
MTE7CiAgfQoKICByZXR1cm4gMDsKfQoKCiNpZmRlZiBNT0RVTEUKLyogRXZlbnR1YWxseSB0aGlz
IHdpbGwgZ28gaW50byBhbiBpbmNsdWRlIGZpbGUsIGJ1dCB0aGlzIHdpbGwgYmUgbGF0ZXIgKi8K
U2NzaV9Ib3N0X1RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IEFIQTE1NDI7CgojaW5jbHVkZSAi
c2NzaV9tb2R1bGUuYyIKI2VuZGlmCgoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
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
AAAAAAAAAAAAAAAAAAA=

--_=XFMail.1.3.p0.Linux:981211084246:3722=_--
End of MIME message

-
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@vger.rutgers.edu

home help back first fref pref prev next nref lref last post