public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: target/6137: ia64 -O3 generates bad overlapping memory accesses
@ 2002-04-12 17:37 rth
  0 siblings, 0 replies; 3+ messages in thread
From: rth @ 2002-04-12 17:37 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, janis187, nobody

Synopsis: ia64 -O3 generates bad overlapping memory accesses

State-Changed-From-To: open->analyzed
State-Changed-By: rth
State-Changed-When: Fri Apr 12 17:37:44 2002
State-Changed-Why:
    It's another damned RTX_UNCHANGING_P bug.
    
    (insn 85 84 88 (set (reg/v/f:DI 361)
            (plus:DI (reg/f:DI 328 sfp)
                (const_int 48 [0x30]))) 90 {adddi3} (nil)
        (nil))
    (insn 98 97 99 (set (mem/s:DI (reg/v/f:DI 361) [0 S8 A64])
            (reg:DI 365)) 6 {*movdi_internal} (nil)
        (nil))
    (insn 133 131 134 (set (reg:DI 375)
            (mem/s/u:DI (reg/v/f:DI 361) [0 S8 A128])) 6 {*movdi_internal} (nil)
        (nil))
    
    The load doesn't conflict with the store.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6137


^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: target/6137: ia64 -O3 generates bad overlapping memory accesses
@ 2002-10-10  9:41 janis
  0 siblings, 0 replies; 3+ messages in thread
From: janis @ 2002-10-10  9:41 UTC (permalink / raw)
  To: gcc-bugs, gcc-prs, janis187, nobody

Synopsis: ia64 -O3 generates bad overlapping memory accesses

State-Changed-From-To: analyzed->closed
State-Changed-By: janis
State-Changed-When: Thu Oct 10 09:41:14 2002
State-Changed-Why:
    The test case passes with the mainline and 3.2 branch as of
    20021008.  I don't know what fixed it.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=6137


^ permalink raw reply	[flat|nested] 3+ messages in thread

* target/6137: ia64 -O3 generates bad overlapping memory accesses
@ 2002-04-02 10:46 janis187
  0 siblings, 0 replies; 3+ messages in thread
From: janis187 @ 2002-04-02 10:46 UTC (permalink / raw)
  To: gcc-gnats


>Number:         6137
>Category:       target
>Synopsis:       ia64 -O3 generates bad overlapping memory accesses
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          wrong-code
>Submitter-Id:   net
>Arrival-Date:   Tue Apr 02 10:46:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Janis Johnson
>Release:        gcc version 3.1 20020402 (prerelease)
>Organization:
>Environment:
Itanium; Red Hat Linux release 7.2 (Enigma
>Description:
The code generated for this test case with -O3 on ia64
interleaves two memory copies, causing some of the values
on the stack to be loaded before they are first stored to.
This happens in the following function, for which copies
of 4 8-byte values from r12+64 to r12+16 are interleaved
with copies from the second argument to r12+64:

  void test_T2a(Tensor1<double,2> &t1_1,
                Tensor2<double,2,2> &t2_1)
  {
    Index<'i',2> i;

    t1_1(i)=t2_1(i,0);
    dump2(t1_1,t2_1);
  }

This happens with GCC 3.0.4 as well.

The test case is taken from the FTensor package, which is
covered by the GPL.
>How-To-Repeat:
Compile the attached test case with
"-w -ftemplate-depth-100 -Drestrict= -DFTENSOR_DEBUG -O3".
When run, it should print "10 10".  Examine the generated
code for function test_T2a.
>Fix:
Unknown.
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="bug7.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="bug7.ii"

IyAxICJUMi9idWc3LkMiCiMgMSAiPGJ1aWx0LWluPiIKIyAxICI8Y29tbWFuZCBsaW5lPiIKIyAx
ICJUMi9idWc3LkMiCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvaW9zdHJlYW0iIDEgMwojIDQzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMwoKIyAxICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgv
Yml0cy9jKytjb25maWcuaCIgMSAzCiMgMzQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2MrK2NvbmZpZy5o
IiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAxIDMKIyAzOSAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaWE2NC11bmtub3du
LWxpbnV4L2JpdHMvb3NfZGVmaW5lcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgi
IDEgMwojIDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv
c3lzL2NkZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMx
MiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJz
LmgiIDEgMwojIDMxMyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDQwICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24t
bGludXgvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9jKytj
b25maWcuaCIgMiAzCiMgNDUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAyIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9vc3RyZWFtIiAxIDMKIyA0NCAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMwoKIyAxICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3MiIDEg
MwojIDQzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9pb3MiIDMKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvaW9zZndkIiAxIDMKIyA0MyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvaW9zZndkIiAzCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3ZC5oIiAxIDMKIyA0
MyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0
cy9zdHJpbmdmd2QuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hh
clQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM7CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJh
aXRzPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PjsKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGFsbG9jYXRvcjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19zdHJpbmc7CgogIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXI+IHN0cmluZzsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lvc2Z3ZCIgMiAzCiMg
MSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0
cy9mcG9zLmgiIDEgMwojIDQzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9jKytp
by5oIiAxIDMKIyAzNSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvYysraW8uaCIgMwojIDEgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NzdGRpbyIgMSAzCiMg
NDggIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Nz
dGRpbyIgMwoKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvY3N0ZGRlZiIgMSAzCiMgNDcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2NzdGRkZWYiIDMKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNs
dWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0
YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIg
Mwp0eXBlZGVmIGxvbmcgaW50IHB0cmRpZmZfdDsKIyAyMDEgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVk
ZS9zdGRkZWYuaCIgMwp0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY3N0ZGRlZiIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZfdDsKICB1c2luZyA6OnNpemVf
dDsKfQojIDUxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9jc3RkaW8iIDIgMwoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMSAz
CiMgMzkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lh
NjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiAiQyIgewoKCgoj
IDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQt
dW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDQgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8z
LjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg
MSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4x
L2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAy
IDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hv
cnQgaW50IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1
bnNpZ25lZCBsb25nIGludCBfX3VfbG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3Vf
cXVhZF90Owp0eXBlZGVmIGxvbmcgaW50IF9fcXVhZF90Owp0eXBlZGVmIHNpZ25lZCBjaGFyIF9f
aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBz
aG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90
Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Vp
bnQzMl90Owp0eXBlZGVmIHNpZ25lZCBsb25nIGludCBfX2ludDY0X3Q7CnR5cGVkZWYgdW5zaWdu
ZWQgbG9uZyBpbnQgX191aW50NjRfdDsKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlw
ZWRlZiBfX3VpbnQ2NF90IF9fZGV2X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX3VpZF90Owp0eXBl
ZGVmIF9fdWludDMyX3QgX19naWRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vX3Q7CnR5cGVk
ZWYgX191aW50NjRfdCBfX2lubzY0X3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX21vZGVfdDsKdHlw
ZWRlZiBfX3VpbnQ2NF90IF9fbmxpbmtfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19vZmZfdDsKdHlw
ZWRlZiBfX2ludDY0X3QgX19vZmY2NF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2xvZmZfdDsKdHlw
ZWRlZiBfX2ludDMyX3QgX19waWRfdDsKdHlwZWRlZiBfX2ludDY0X3QgX19zc2l6ZV90Owp0eXBl
ZGVmIF9fdWludDY0X3QgX19ybGltX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3JsaW02NF90Owp0
eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudF90Owp0eXBlZGVmIF9faW50NjRfdCBfX2Jsa2NudDY0
X3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX2ZzYmxrY250X3Q7CnR5cGVkZWYgX191aW50NjRfdCBf
X2ZzYmxrY250NjRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf
X3VpbnQ2NF90IF9fZnNmaWxjbnQ2NF90Owp0eXBlZGVmIF9fdWludDMyX3QgX19pZF90OwoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVm
IGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50
IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9u
ZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7CnR5cGVkZWYg
bG9uZyBpbnQgX19jbG9ja190Owp0eXBlZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgaW50IF9f
Y2xvY2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgp0eXBlZGVmIGludCBfX2lwY19w
aWRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKCgp0eXBlZGVmIGludCBf
X3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRl
ZiBsb25nIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IF9fc29ja2xlbl90
OwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vz
ci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z
Y2hlZC5oIiAxIDMKIyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19z
Y2hlZF9wYXJhbQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CiMgMjQgIi91c3Iv
aW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAyIDMKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxv
Y2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGludCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBl
ZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsKICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQg
X19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hlZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50
IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3BlOwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBp
bnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9fc3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNr
c2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRo
cmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRocmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBw
dGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJl
YWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoK
CnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jlc2VydmVkOwogIGludCBfX21fY291bnQ7CiAg
X3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGludCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJl
YWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVhZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVj
dAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJlYWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYg
aW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QK
ewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVy
czsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3Jl
YWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9f
cndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVk
ZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRf
cndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190
OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2Nr
OwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVz
Y3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsK
ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVu
c2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxMTQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz
LmgiIDIgMwojIDQ2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2Nj
LWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTQgIi9i
dWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93
bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJ
TEU7CiMgNjQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGli
L2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0
IF9JT19GSUxFIF9fRklMRTsKIyA3NCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMK
IyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRl
L19HX2NvbmZpZy5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
bGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzMjEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lh
NjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVuc2lnbmVk
IGludCB3aW50X3Q7CiMgMTUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCiMgMjQgIi91
c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMK
IyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUv
c3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3Iv
aW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAz
CiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19j
b3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwog
IH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9f
c3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwog
IF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9f
R19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9p
bmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUv
Z2NvbnYuaCIgMiAzCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9s
aWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoj
IDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKCgoKZW51bQp7CiAgX19HQ09OVl9PSyA9
IDAsCiAgX19HQ09OVl9OT0NPTlYsCiAgX19HQ09OVl9OT0RCLAogIF9fR0NPTlZfTk9NRU0sCgog
IF9fR0NPTlZfRU1QVFlfSU5QVVQsCiAgX19HQ09OVl9GVUxMX09VVFBVVCwKICBfX0dDT05WX0lM
TEVHQUxfSU5QVVQsCiAgX19HQ09OVl9JTkNPTVBMRVRFX0lOUFVULAoKICBfX0dDT05WX0lMTEVH
QUxfREVTQ1JJUFRPUiwKICBfX0dDT05WX0lOVEVSTkFMX0VSUk9SCn07CgoKCmVudW0KewogIF9f
R0NPTlZfSVNfTEFTVCA9IDB4MDAwMSwKICBfX0dDT05WX0lHTk9SRV9FUlJPUlMgPSAweDAwMDIK
fTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcDsKc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhOwpzdHJ1
Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0OwpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhOwoKCgp0
eXBlZGVmIGludCAoKl9fZ2NvbnZfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqLCBzdHJ1Y3Qg
X19nY29udl9zdGVwX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg
dW5zaWduZWQgY2hhciAqKiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5
cGVkZWYgaW50ICgqX19nY29udl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5
cGVkZWYgdm9pZCAoKl9fZ2NvbnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoK
CnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICos
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2Rh
dGEgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1
bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHVuc2lnbmVkIGNoYXIgKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNf
Y29udGV4dF9mY3QpICh2b2lkICosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAq
LCB1bnNpZ25lZCBjaGFyICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19xdWVyeV9m
Y3QpIChfX2NvbnN0IGNoYXIgKiwgX19jb25zdCBjaGFyICoqKiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf
dHJhbnNfaW5pdF9mY3QpICh2b2lkICoqLCBjb25zdCBjaGFyICopOwp0eXBlZGVmIHZvaWQgKCpf
X2djb252X3RyYW5zX2VuZF9mY3QpICh2b2lkICopOwoKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0
YQp7CgogIF9fZ2NvbnZfdHJhbnNfZmN0IF9fdHJhbnNfZmN0OwogIF9fZ2NvbnZfdHJhbnNfY29u
dGV4dF9mY3QgX190cmFuc19jb250ZXh0X2ZjdDsKICBfX2djb252X3RyYW5zX2VuZF9mY3QgX190
cmFuc19lbmRfZmN0OwogIHZvaWQgKl9fZGF0YTsKICBzdHJ1Y3QgX19nY29udl90cmFuc19kYXRh
ICpfX25leHQ7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXAKewogIHN0cnVjdCBfX2djb252X2xv
YWRlZF9vYmplY3QgKl9fc2hsaWJfaGFuZGxlOwogIF9fY29uc3QgY2hhciAqX19tb2RuYW1lOwoK
ICBpbnQgX19jb3VudGVyOwoKICBjaGFyICpfX2Zyb21fbmFtZTsKICBjaGFyICpfX3RvX25hbWU7
CgogIF9fZ2NvbnZfZmN0IF9fZmN0OwogIF9fZ2NvbnZfaW5pdF9mY3QgX19pbml0X2ZjdDsKICBf
X2djb252X2VuZF9mY3QgX19lbmRfZmN0OwoKCgogIGludCBfX21pbl9uZWVkZWRfZnJvbTsKICBp
bnQgX19tYXhfbmVlZGVkX2Zyb207CiAgaW50IF9fbWluX25lZWRlZF90bzsKICBpbnQgX19tYXhf
bmVlZGVkX3RvOwoKCiAgaW50IF9fc3RhdGVmdWw7CgogIHZvaWQgKl9fZGF0YTsKfTsKCgoKc3Ry
dWN0IF9fZ2NvbnZfc3RlcF9kYXRhCnsKICB1bnNpZ25lZCBjaGFyICpfX291dGJ1ZjsKICB1bnNp
Z25lZCBjaGFyICpfX291dGJ1ZmVuZDsKCgoKICBpbnQgX19mbGFnczsKCgoKICBpbnQgX19pbnZv
Y2F0aW9uX2NvdW50ZXI7CgoKCiAgaW50IF9faW50ZXJuYWxfdXNlOwoKICBfX21ic3RhdGVfdCAq
X19zdGF0ZXA7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKCgoKICBzdHJ1Y3QgX19nY29udl90cmFu
c19kYXRhICpfX3RyYW5zOwp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfX2djb252X2luZm8KewogIHNp
emVfdCBfX25zdGVwczsKICBzdHJ1Y3QgX19nY29udl9zdGVwICpfX3N0ZXBzOwogIF9fZXh0ZW5z
aW9uX18gc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbXTsKfSAqX19nY29udl90Owoj
IDQ1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwp0eXBlZGVmIHVuaW9uCnsKICBzdHJ1
Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgc3RydWN0CiAgewogICAgc3RydWN0IF9fZ2NvbnZfaW5m
byBfX2NkOwogICAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YTsKICB9IF9fY29tYmlu
ZWQ7Cn0gX0dfaWNvbnZfdDsKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1dGVfXyAo
KF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRyaWJ1dGVf
XyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90
IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu
dCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKIyAzMyAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwoj
IDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQt
dW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8z
LjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192
YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgMTYwICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE3MCAi
L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3Ry
dWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lP
X0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi
IDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVj
dnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJyb3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwoKCgoK
c3RydWN0IF9JT19jb2RlY3Z0CnsKICB2b2lkICgqX19jb2RlY3Z0X2Rlc3RyKSAoc3RydWN0IF9J
T19jb2RlY3Z0ICopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19vdXQp
IChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiosIGNoYXIgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsK
ICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fdW5zaGlmdCkgKHN0cnVjdCBf
SU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19tYnN0YXRlX3QgKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqLCBjaGFyICoqKTsKICBlbnVtIF9fY29kZWN2dF9y
ZXN1bHQgKCpfX2NvZGVjdnRfZG9faW4pIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3Qg
Y2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKiosIHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB3Y2hhcl90ICosIHdjaGFyX3QgKiopOwogIGludCAoKl9fY29kZWN2dF9kb19lbmNv
ZGluZykgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fYWx3YXlz
X25vY29udikgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fbGVu
Z3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOwogIGlu
dCAoKl9fY29kZWN2dF9kb19tYXhfbGVuZ3RoKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwoKICBf
R19pY29udl90IF9fY2RfaW47CiAgX0dfaWNvbnZfdCBfX2NkX291dDsKfTsKCgpzdHJ1Y3QgX0lP
X3dpZGVfZGF0YQp7CiAgd2NoYXJfdCAqX0lPX3JlYWRfcHRyOwogIHdjaGFyX3QgKl9JT19yZWFk
X2VuZDsKICB3Y2hhcl90ICpfSU9fcmVhZF9iYXNlOwogIHdjaGFyX3QgKl9JT193cml0ZV9iYXNl
OwogIHdjaGFyX3QgKl9JT193cml0ZV9wdHI7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2VuZDsKICB3
Y2hhcl90ICpfSU9fYnVmX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2J1Zl9lbmQ7CgogIHdjaGFyX3Qg
Kl9JT19zYXZlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX2JhY2t1cF9iYXNlOwoKICB3Y2hhcl90ICpf
SU9fc2F2ZV9lbmQ7CgogIF9fbWJzdGF0ZV90IF9JT19zdGF0ZTsKICBfX21ic3RhdGVfdCBfSU9f
bGFzdF9zdGF0ZTsKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgX2NvZGVjdnQ7CgogIHdjaGFyX3QgX3No
b3J0YnVmWzFdOwoKICBzdHJ1Y3QgX0lPX2p1bXBfdCAqX3dpZGVfdnRhYmxlOwp9OwoKCnN0cnVj
dCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRyOwogIGNo
YXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9JT193cml0
ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2VuZDsKICBj
aGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9JT19zYXZl
X2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2VuZDsKCiAg
c3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9jaGFpbjsK
CiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZzZXQ7CgoK
CiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZz
ZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMgMzA1ICIv
dXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCiAgc3RydWN0IF9J
T19jb2RlY3Z0ICpfY29kZWN2dDsKICBzdHJ1Y3QgX0lPX3dpZGVfZGF0YSAqX3dpZGVfZGF0YTsK
CgoKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVzZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAq
IHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCgoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0ZXJu
IHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19G
SUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lP
XzJfMV9zdGRlcnJfOwojIDM0NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBfX3Nz
aXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBf
X25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpf
X2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQg
Kl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lv
X2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29r
aWVfcmVhZF9mdW5jdGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1
bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5
cGVkZWYgX19pb19jbG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0
cnVjdAp7CiAgX19pb19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9f
aW9fc2Vla19mbiAqc2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lv
X2Z1bmN0aW9uc190Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lv
X2Z1bmN0aW9uc190OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9f
Y29va2llX2luaXQgKHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRf
d3JpdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19j
b29raWVfaW9fZnVuY3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGlu
dCBfX3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAo
X0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwg
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRo
cm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0
ZXJuIHdpbnRfdCBfX3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0
MjYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX2dldGMgKF9JT19GSUxF
ICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUg
Kl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19mZW9mIChfSU9fRklMRSAqX19mcCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX0lPX2ZlcnJvciAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgX0lPX2Zsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVy
biB2b2lkIF9JT19mdW5sb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQg
X0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CiMgNDU2ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMwpleHRlcm4gaW50IF9JT192ZnNjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IGNoYXIgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fdmZw
cmludGYgKF9JT19GSUxFICpfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICpfX3Jlc3RyaWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4gX19z
c2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4
dGVybiBzaXplX3QgX0lPX3NnZXRuIChfSU9fRklMRSAqLCB2b2lkICosIHNpemVfdCkgdGhyb3cg
KCk7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChfSU9fRklMRSAqLCBfX29mZjY0X3Qs
IGludCwgaW50KSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJ
TEUgKiwgX19vZmY2NF90LCBpbnQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfYmFj
a3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdj
IChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX0lPX3B1dHdjICh3Y2hh
cl90IF9fd2MsIF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZndpZGUg
KF9JT19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKIyA1MDUgIi91c3IvaW5jbHVk
ZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJp
Y3QsIGNvbnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP
X3Zmd3ByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpl
eHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3Qp
IHRocm93ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICop
IHRocm93ICgpOwoKCgp9CiMgNzUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMK
CgoKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgX19ub3RfdmFfbGlzdF9fOwojIDg5ICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGlu
dXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0
eXBlZGVmIF9HX2Zwb3M2NF90IGZwb3M2NF90OwojIDEzOCAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRl
L3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM5
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVu
a25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoKCmV4dGVybiBGSUxFICpzdGRp
bjsKZXh0ZXJuIEZJTEUgKnN0ZG91dDsKZXh0ZXJuIEZJTEUgKnN0ZGVycjsKIyAxNTMgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1s
aW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0IGNo
YXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3QgY2hh
ciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJTEUg
KnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICp0bXBu
YW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxODkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9z
dGRpby5oIiAzCmV4dGVybiBjaGFyICp0ZW1wbmFtIChfX2NvbnN0IGNoYXIgKl9fZGlyLCBfX2Nv
bnN0IGNoYXIgKl9fcGZ4KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19f
KSk7CgoKCgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0
ZXJuIGludCBmZmx1c2ggKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm
Zmx1c2hfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQg
ZmNsb3NlYWxsICh2b2lkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKCmV4dGVybiBGSUxFICpmcmVv
cGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAg
ICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CiMgMjMzICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGlu
dXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVu
NjQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAg
ICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
RklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19j
b29raWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlv
bnNfdCBfX2lvX2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQg
Kl9fcywgc2l6ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIEZJTEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9j
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19z
dHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNl
dHZidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CiAgICAgICAgICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUp
IHRocm93ICgpOwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwK
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u
LikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fZm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19y
ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2
cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0
IF9fYXJnKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0
cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAg
ICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNu
cHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsK
CmV4dGVybiBpbnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4
bGVuLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50
ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Ys
CiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJu
IGludCBfX2FzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJu
IGludCBhc3ByaW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBp
bnQgdmRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAg
ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50
IGRwcmludGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikK
ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwg
MykpKTsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAog
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4p
IHRocm93ICgpOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAq
X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNj
YW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9f
YXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18s
IDEsIDApKSk7CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h
dCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Zm9ybWF0X18gKF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVy
biBpbnQgZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50
IGdldGNoYXJfdW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191
bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBf
X2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBf
X2MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChp
bnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxv
Y2tlZCAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpl
eHRlcm4gY2hhciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0p
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMg
NDM3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0
LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19zc2l6ZV90IF9f
Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGltaXRlciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0cmljdCBfX2xp
bmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9f
biwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3QgZ2V0bGluZSAo
Y2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUg
Kl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0cyAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkKICAg
ICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklMRSAqX19zdHJl
YW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9f
cHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxF
ICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3QgZndyaXRlIChf
X2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAg
ICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhyb3cgKCk7CgoK
CmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNp
emVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90IGZ3cml0ZV91
bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxFICpfX3N0cmVh
bSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBp
bnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIHJld2luZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDUwMCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0
ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla28gKEZJTEUgKl9fc3RyZWFtLCBfX29mZl90IF9fb2Zm
LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmdldHBvcyAoRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSwgZnBvc190ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwoKZXh0
ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSB0
aHJvdyAoKTsKIyA1MzQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9n
Y2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBp
bnQgZnNlZWtvNjQgKEZJTEUgKl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5j
ZSkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBmZ2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s
IGZwb3M2NF90ICpfX3Jlc3RyaWN0IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZz
ZXRwb3M2NCAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgZmVvZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJy
b3IgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5s
b2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2Vk
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3Qg
Y2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2Nv
bnN0IGNoYXIgKl9fY29uc3Qgc3lzX2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsK
ZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4g
aW50IGZpbGVubyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxl
bm9fdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUg
KnBvcGVuIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0
aHJvdyAoKTsKCgpleHRlcm4gaW50IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK
CgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBjaGFyICpjdXNlcmlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7
CgoKZXh0ZXJuIGludCBvYnN0YWNrX3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3Qg
X19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRm
IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoK
ZXh0ZXJuIHZvaWQgZmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZv
aWQgZnVubG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2NDEgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51
eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIg
MSAzCiMgMzMgIi91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvLmgiIDMKaW5saW5lIGludAp2cHJpbnRm
IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0
aHJvdyAoKQp7CiAgcmV0dXJuIHZmcHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgpp
bmxpbmUgaW50CmdldGNoYXIgKHZvaWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0
ZGluKTsKfQoKCgoKaW5saW5lIGludApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAo
KQp7CiAgcmV0dXJuICgoX19mcCktPl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2Vu
ZCA/IF9fdWZsb3cgKF9fZnApIDogKih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRf
cHRyKyspOwp9CgoKaW5saW5lIGludApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7
CiAgcmV0dXJuICgoc3RkaW4pLT5fSU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5k
ID8gX191ZmxvdyAoc3RkaW4pIDogKih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFk
X3B0cisrKTsKfQoKCgoKaW5saW5lIGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9JT19wdXRjIChfX2MsIHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5s
b2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9f
c3RyZWFtKS0+X0lPX3dyaXRlX3B0ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9f
b3ZlcmZsb3cgKF9fc3RyZWFtLCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNo
YXIpICgqKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGlu
ZSBpbnQKcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsK
ICByZXR1cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193
cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkg
OiAodW5zaWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkp
Owp9CgoKaW5saW5lIGludApwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAg
cmV0dXJuICgoKHN0ZG91dCktPl9JT193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9l
bmQpID8gX19vdmVyZmxvdyAoc3Rkb3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2ln
bmVkIGNoYXIpICgqKHN0ZG91dCktPl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgpp
bmxpbmUgX19zc2l6ZV90CmdldGxpbmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIs
IF9fbiwgJ1xuJywgX19zdHJlYW0pOwp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAm
IDB4MTApICE9IDApOwp9CgoKaW5saW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0g
MCk7Cn0KIyA2NDIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2Mt
bGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgp9CiMgNTMg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NzdGRp
byIgMiAzCiMgOTcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcg
OjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcg
OjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6Zmdl
dGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsK
ICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVz
aW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5n
IDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpm
d3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7
CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVz
aW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcg
OjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNl
dGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3Nj
YW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0
YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJp
bnRmOwp9CiMgMTUzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9jc3RkaW8iIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpzbnByaW50
ZjsKICB1c2luZyA6OnZmc2NhbmY7CiAgdXNpbmcgOjp2c2NhbmY7CiAgdXNpbmcgOjp2c25wcmlu
dGY7CiAgdXNpbmcgOjp2c3NjYW5mOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9j
eHg6OnNucHJpbnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dmZzY2FuZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzY2FuZjsKICB1c2luZyBfX2dudV9jeHg6OnZzbnByaW50ZjsKICB1c2luZyBfX2dudV9j
eHg6OnZzc2NhbmY7Cn0KIyAzNiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgojIDEg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lhNjQt
dW5rbm93bi1saW51eC9iaXRzL2d0aHIuaCIgMSAzCiMgMTAyICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9n
dGhyLmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9ndGhyLXNpbmdsZS5oIiAxIDMKIyAzNCAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaWE2NC11
bmtub3duLWxpbnV4L2JpdHMvZ3Roci1zaW5nbGUuaCIgMwp0eXBlZGVmIGludCBfX2d0aHJlYWRf
bXV0ZXhfdDsKIyAyMTEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2d0aHItc2luZ2xlLmgiIDMKc3RhdGlj
IGlubGluZSBpbnQKX19ndGhyZWFkX2FjdGl2ZV9wICh2b2lkKQp7CiAgcmV0dXJuIDA7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAq
ICkKewogIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfbXV0ZXhfdHJ5
bG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKiApCnsKICBy
ZXR1cm4gMDsKfQojIDEwMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaWE2NC11bmtu
b3duLWxpbnV4L2JpdHMvYysraW8uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdHlwZWRlZiBs
b25nIHN0cmVhbW9mZjsKICB0eXBlZGVmIHB0cmRpZmZfdCBzdHJlYW1zaXplOwoKICB0eXBlZGVm
IHB0cmRpZmZfdCB3c3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBmcG9zX3QgX19jX3N0cmVhbXBvczsK
CiAgdHlwZWRlZiBfX2d0aHJlYWRfbXV0ZXhfdCBfX2NfbG9jazsKCgogIHR5cGVkZWYgRklMRSBf
X2NfZmlsZV90eXBlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9y
dCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9
IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAg
IHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19s
ZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQw
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0
aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNv
bnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19p
bnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tp
cHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4
MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgw
MDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0g
MHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
ZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5
cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJp
dCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsK
CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4
OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBj
b25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnBvcy5oIiAyIDMK
IyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9j
d2NoYXIiIDEgMwojIDQ4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNs
dWRlL2crKy12My9jd2NoYXIiIDMKCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9jdGltZSIgMSAzCiMgNDggIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2N0aW1lIiAzCgoKCiMgMSAiL3Vzci9p
bmNsdWRlL3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuICJD
IiB7CgoKCgoKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9n
Y2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzkg
Ii91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUu
aCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwojIDU5ICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCnR5cGVkZWYgX19jbG9ja190IGNsb2NrX3Q7CiMgNzAgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKdHlwZWRlZiBfX2Nsb2NraWRfdCBjbG9ja2lkX3Q7CiMgOTQgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKIyAxMDYgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKc3RydWN0IHRpbWVzcGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9u
ZyBpbnQgdHZfbnNlYzsKICB9OwoKCgoKCgoKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGlu
dCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBp
bnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7
CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsK
CgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewogICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFs
OwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3ZhbHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoK
CgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2
b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZmdGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBf
X3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRl
cm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBf
X3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
c3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9f
cmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAq
X19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
X3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25zdCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoK
CmV4dGVybiBjaGFyICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9yIChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmlj
dCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0
aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3RpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJp
Y3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5
bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3RpbWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFt
ZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGlt
ZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikgdGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUv
dGltZS5oIiAzCmV4dGVybiB0aW1lX3QgdGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgp
OwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgZHlzaXplIChpbnQgX195ZWFyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgoKZXh0ZXJuIGludCBuYW5vc2xlZXAgKF9fY29uc3Qgc3RydWN0IHRp
bWVzcGVjICpfX3JlcXVlc3RlZF90aW1lLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRp
bWVzcGVjICpfX3JlbWFpbmluZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVz
IChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0
IHRpbWVzcGVjICpfX3RwKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX3NldHRpbWUgKGNs
b2NraWRfdCBfX2Nsb2NrX2lkLCBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190cCkKICAgICB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2Nr
X2lkLCBpbnQgX19mbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHRpbWVzcGVjICpfX3JlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0
aW1lc3BlYyAqX19yZW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tp
ZCAocGlkX3QgX19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gaW50IHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBzdHJ1Y3Qgc2lnZXZlbnQgKl9fcmVzdHJpY3QgX19ldnAsCiAgICAgICAgICAg
ICAgICAgICAgICAgICB0aW1lcl90ICpfX3Jlc3RyaWN0IF9fdGltZXJpZCkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHRpbWVyX3NldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBpbnQgX19mbGFncywK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBpdGltZXJzcGVjICpfX3Jl
c3RyaWN0IF9fdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGl0aW1lcnNw
ZWMgKl9fcmVzdHJpY3QgX19vdmFsdWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0
dGltZSAodGltZXJfdCBfX3RpbWVyaWQsIHN0cnVjdCBpdGltZXJzcGVjICpfX3ZhbHVlKQogICAg
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVy
aWQpIHRocm93ICgpOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4gaW50IGdl
dGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUgKF9fY29uc3QgY2hhciAq
X19zdHJpbmcpIHRocm93ICgpOwojIDM1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpleHRlcm4g
aW50IGdldGRhdGVfciAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAg
ICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7
CgoKCn0KIyA1MiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvY3RpbWUiIDIgMwojIDY0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My9jdGltZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2Nr
X3Q7CiAgdXNpbmcgOjp0aW1lX3Q7CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1
c2luZyA6OmRpZmZ0aW1lOwogIHVzaW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2lu
ZyA6OmFzY3RpbWU7CiAgdXNpbmcgOjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6
OmxvY2FsdGltZTsKICB1c2luZyA6OnN0cmZ0aW1lOwp9CiMgNTIgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2N3Y2hhciIgMiAzCgoKIyAxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtu
b3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3dj
aGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkZGVmLmgiIDEg
MwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hh
ci5oIiAzCnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDMKc3RydWN0IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3
Y3NjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdj
aGFyX3QgKndjc25jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19u
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgd2NzY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBp
bnQgd2NzbmNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIs
IHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBpbnQgd2NzY2FzZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdj
aGFyX3QgKl9fczIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qg
d2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAg
ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5o
IiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xv
Y2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVf
dG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAx
NDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wg
KF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg
X193Y3NuY2FzZWNtcF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qg
d2NzeGZybSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBpbnQgX193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j
b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
bG9jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19z
MSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2Nz
ZHVwIChfX2NvbnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3dj
cywgd2NoYXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFy
X3QgX193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4
dGVybiB3Y2hhcl90ICp3Y3NjaHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9f
d2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g
c2l6ZV90IHdjc2NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAq
X19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIHNpemVfdCB3Y3NzcG4gKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJf
dCAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gd2NoYXJfdCAqd2NzcGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3
Y2hhcl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCmV4dGVybiB3Y2hhcl90ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywg
X19jb25zdCB3Y2hhcl90ICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpf
X2hheXN0YWNrLCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90
ICpfX3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fcHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25z
dCB3Y2hhcl90ICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpl
eHRlcm4gc2l6ZV90IHdjc25sZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhs
ZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4g
d2NoYXJfdCAqd21lbWNociAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXpl
X3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBpbnQgd21lbWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p
CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFy
X3QgKndtZW1jcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0
IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFy
X3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
czEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93
YyAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnJ0
b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg
ICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NydG9tYiAo
Y2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAgICAgICAgICAgICAg
ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCBf
X21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwpl
eHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBtYnJsZW4gKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCkKeyByZXR1cm4gKF9fcHMgIT0g
X19udWxsCiAgICAgICAgICA/IG1icnRvd2MgKF9fbnVsbCwgX19zLCBfX24sIF9fcHMpIDogX19t
YnJsZW4gKF9fcywgX19uLCBfX251bGwpKTsgfQoKCgoKZXh0ZXJuIHNpemVfdCBtYnNydG93Y3Mg
KHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAg
ICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3Qgd2NzcnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAqX19yZXN0
cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKipfX3Jl
c3RyaWN0IF9fc3JjLCBzaXplX3QgX19ubWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6
ZV90IF9fbGVuLCBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKCmV4dGVy
biBzaXplX3Qgd2NzbnJ0b21icyAoY2hhciAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX253Yywgc2l6ZV90IF9fbGVuLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoK
CgoKZXh0ZXJuIGludCB3Y3dpZHRoICh3Y2hhcl90IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdj
aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBp
bnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
dGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg
KCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAo
KTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3Vx
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3Y3N0b2xsIChfX2NvbnN0IHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3
Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsK
CgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCB3Y3N0b3VsbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCk7CiMg
NDEwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAo
X19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4g
dW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f
CmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3Qg
Kl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAg
ICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBf
X2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2Nz
dG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoK
CmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9f
ZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9f
d2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3Qg
X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dy
b3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpl
eHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhy
b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2lu
dGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u
ZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gX19pbmxpbmUgZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvZF9pbnRlcm5hbCAoX19ucHRy
LCBfX2VuZHB0ciwgMCk7IH0KZXh0ZXJuIF9faW5saW5lIGxvbmcgaW50IHdjc3RvbCAoX19jb25z
dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sX2ludGVy
bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CmV4dGVybiBfX2lubGluZSB1bnNp
Z25lZCBsb25nIGludCB3Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxfaW50ZXJuYWwgKF9f
bnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgpleHRlcm4gX19pbmxpbmUgZmxvYXQgd2Nz
dG9mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyBy
ZXR1cm4gX193Y3N0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBf
X2lubGluZSBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG9sZF9pbnRlcm5hbCAo
X19ucHRyLCBfX2VuZHB0ciwgMCk7IH0KCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBfX2lubGluZSBs
b25nIGxvbmcgaW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i
YXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRw
dHIsIF9fYmFzZSwgMCk7IH0KX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxpbmUgdW5zaWduZWQg
bG9uZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsgcmV0dXJuIF9fd2NzdG91bGxfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7IH0KCgoKCgoKCmV4dGVybiB3Y2hhcl90ICp3
Y3BjcHkgKHdjaGFyX3QgKl9fZGVzdCwgX19jb25zdCB3Y2hhcl90ICpfX3NyYykgdGhyb3cgKCk7
CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3BuY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2No
YXJfdCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50
IGZ3aWRlIChfX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50
IGZ3cHJpbnRmIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93
ICgpIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJf
dCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCgpl
eHRlcm4gaW50IHZmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIDsKCmV4dGVy
biBpbnQgdndwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAg
ICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgOwoK
CmV4dGVybiBpbnQgdnN3cHJpbnRmICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9f
biwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIDsKCgoKZXh0ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJl
YW0sCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9y
bWF0LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKZXh0ZXJuIGludCB3c2NhbmYgKF9fY29uc3Qgd2No
YXJfdCAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBp
bnQgc3dzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSA7CgoKCgpleHRlcm4gaW50IHZmd3NjYW5mIChfX0ZJTEUgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93
ICgpIDsKCmV4dGVybiBpbnQgdndzY2FuZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo
cm93ICgpIDsKCmV4dGVybiBpbnQgdnN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAg
dGhyb3cgKCkgOwoKCgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIHRo
cm93ICgpOwpleHRlcm4gd2ludF90IGdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
CgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRf
dCBmcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biB3aW50X3QgcHV0d2MgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiB3Y2hhcl90ICpmZ2V0d3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywgaW50IF9fbiwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJv
dyAoKTsKCgpleHRlcm4gaW50IGZwdXR3cyAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
d3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93
ICgpOwoKCgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3Ry
ZWFtKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGdldHdjX3VubG9ja2VkIChfX0ZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhcl91bmxvY2tlZCAodm9p
ZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCBmZ2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZnB1dHdjX3VubG9ja2VkICh3Y2hhcl90
IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gd2ludF90IHB1dHdj
X3VubG9ja2VkICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRl
cm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIHRocm93ICgpOwoKCgpl
eHRlcm4gd2NoYXJfdCAqZmdldHdzX3VubG9ja2VkICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3Ms
IGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0
cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3NfdW5sb2NrZWQgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHNp
emVfdCB3Y3NmdGltZSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX21heHNpemUs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX2Zv
cm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdG0gKl9fcmVzdHJp
Y3QgX190cCkgdGhyb3cgKCk7CiMgNjgwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp9CiMgNTUg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2N3Y2hh
ciIgMiAzCiMgNjkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQoj
IDEzMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Y3djaGFyIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0
b3djOwogIHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdj
OwogIHVzaW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsK
ICB1c2luZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwog
IHVzaW5nIDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAg
dXNpbmcgOjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwog
IHVzaW5nIDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsK
ICB1c2luZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJp
bnRmOwogIHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3
c2NhbmY7CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2Nz
Y21wOwogIHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2Nz
cG47CiAgdXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25j
YXQ7CiAgdXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0
b21iczsKICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3Rv
ZjsKICB1c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7
CiAgdXNpbmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwog
IHVzaW5nIDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsK
ICB1c2luZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoK
ICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7
IHJldHVybiB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoK
ICB1c2luZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCog
X19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qg
d2NoYXJfdCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3
Y2hhcl90KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3
Y3NyY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcg
Ojp3Y3NzdHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hh
cl90KiBfX3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihf
X3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3
bWVtY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4g
d21lbWNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoK
CgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6
d2NzdG9sbDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBf
X2dudV9jeHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9f
Z251X2N4eDo6d2NzdG91bGw7Cn0KIyA0NiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToK
ICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1
YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01f
c3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3Qg
PSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19z
dGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlw
ZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19z
dCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7
IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29m
ZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09
KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAg
ICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAg
ZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190
OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAg
ICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAg
ICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25z
dCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29m
ZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1v
ZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZv
aWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9
CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVm
IGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQ3ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3Nmd2QiIDIgMwojIDEgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl
cHQuaCIgMSAzCiMgMzQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj
IDM1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93
X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7
CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVu
dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJv
cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh
ciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7
Cn0KIyA0OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvaW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfaW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBj
aGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJU
PiA+CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj
X29zdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9
IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy
VD4sCiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAg
IGNsYXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBf
QWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFt
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3Ry
YWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hh
clQ+ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAg
ICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf
c3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mg
YmFzaWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAg
IGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBl
ZGVmIGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4g
c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08
Y2hhcj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVm
OwogIHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYg
YmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2Zp
bGVidWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBi
YXNpY19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+
IHdpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0
eXBlZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJf
dD4gd2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdi
dWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFt
OwogIHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsK
ICB0eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5
cGVkZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lm
c3RyZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFy
X3Q+IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07
Cn0KIyA0NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvaW9zIiAyIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNs
dWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDQwICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDMKZXh0ZXJuICJDKysiIHsKCm5h
bWVzcGFjZSBzdGQKewoKCgoKCgogIGNsYXNzIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBl
eGNlcHRpb24oKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ZXhjZXB0aW9uKCkgdGhyb3coKTsK
CgogICAgdmlydHVhbCBjb25zdCBjaGFyKiB3aGF0KCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgog
IGNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg
IGJhZF9leGNlcHRpb24oKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9u
KCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgp
OwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVkX2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRl
X2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5hdGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZv
aWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBl
Y3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVuZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsK
CgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5
OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvZXhj
ZXB0aW9uIiAzCiAgYm9vbCB1bmNhdWdodF9leGNlcHRpb24oKSB0aHJvdygpOwp9CgpuYW1lc3Bh
Y2UgX19nbnVfY3h4CnsKCgoKCgoKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAo
KTsKfQoKfQojIDQ2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9pb3MiIDIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMuaCIgMSAzCiMgNDMgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvY2hhcl90cmFpdHMu
aCIgMwoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9jc3RyaW5nIiAxIDMKIyA0OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvY3N0cmluZyIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcu
aCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMg
MSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11
bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl
L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqX19yZXN0cmljdCBf
X2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3Ny
Yywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9f
ZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoK
CgpleHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qg
dm9pZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCAqbWVtc2V0ICh2b2lkICpf
X3MsIGludCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbWVtY21wIChf
X2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hy
IChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gdm9pZCAqcmF3bWVtY2hyIChf
X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19j
LCBzaXplX3QgX19uKQogICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3Ry
bmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVy
biBjaGFyICpzdHJjYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gY2hhciAqc3RybmNhdCAoY2hh
ciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywKICAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc3Ry
Y21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgc3RybmNtcCAoX19jb25z
dCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19yZXN0
cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKIyAxMTEgIi91c3IvaW5jbHVkZS9zdHJp
bmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3Qs
IF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAgKF9f
Y29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1NSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCmV4dGVybiBjaGFyICpzdHJjaHIgKF9fY29uc3QgY2hh
ciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4
dGVybiBjaGFyICpzdHJyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChf
X2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy
ZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cmNzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fcmVqZWN0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBzaXplX3Qgc3Ryc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBj
aGFyICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBjaGFyICpzdHJwYnJrIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpf
X2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBjaGFyICpzdHJzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpf
X25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGNoYXIgKnN0cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBj
aGFyICpfX25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgoKZXh0ZXJuIGNoYXIgKnN0cnRvayAoY2hhciAqX19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX2RlbGltKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqX19z
dHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAg
IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
ZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0
cikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19o
YXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2tsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBfX25lZWRsZWxlbikKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAodm9pZCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CmV4dGVybiB2b2lkICptZW1w
Y3B5ICh2b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRl
cm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJubGVuIChfX2NvbnN0IGNoYXIg
Kl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyZXJyb3IgKGludCBfX2Vycm51bSkgdGhy
b3cgKCk7CgoKCmV4dGVybiBjaGFyICpzdHJlcnJvcl9yIChpbnQgX19lcnJudW0sIGNoYXIgKl9f
YnVmLCBzaXplX3QgX19idWZsZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAo
dm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9f
Y29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoK
ZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBiY21wIChfX2NvbnN0IHZvaWQgKl9fczEsIF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRl
cm4gY2hhciAqaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hhciAqcmluZGV4IChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBpbnQgZmZzIChpbnQgX19pKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcgaW50IF9fbCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKX19leHRlbnNpb25fXyBleHRlcm4gaW50IGZmc2xsIChs
b25nIGxvbmcgaW50IF9fbGwpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgoKZXh0ZXJuIGludCBzdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29u
c3QgY2hhciAqX19zMikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CgpleHRlcm4gaW50IHN0cm5jYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hh
ciAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJl
X18pKTsKCgoKCgpleHRlcm4gaW50IF9fc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEs
IF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50
IF9fc3RybmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9j
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBj
aGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBzdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19z
MikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gY2hh
ciAqc3Ryc2lnbmFsIChpbnQgX19zaWcpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpfX3N0cGNw
eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ny
YykKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBf
X2Rlc3QsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f
bikgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz
dCwKICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywg
c2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJp
bmcpIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1mcm9iICh2b2lkICpfX3MsIHNpemVfdCBf
X24pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYmFzZW5hbWUgKF9fY29uc3QgY2hhciAq
X19maWxlbmFtZSkgdGhyb3cgKCk7CiMgMzY0ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKfQoj
IDUyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9j
c3RyaW5nIiAyIDMKIyA3NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvY3N0cmluZyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsK
ICB1c2luZyA6Om1lbW1vdmU7CiAgdXNpbmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5Owog
IHVzaW5nIDo6c3RyY2F0OwogIHVzaW5nIDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1
c2luZyA6OnN0cmNtcDsKICB1c2luZyA6OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVz
aW5nIDo6c3RyeGZybTsKICB1c2luZyA6OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNp
bmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjptZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2lu
ZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjptZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2
b2lkKiBfX3AsIGludCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nh
c3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9fYywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAg
aW5saW5lIGNoYXIqCiAgc3RyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19i
dWlsdGluX3N0cmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1
c2luZyA6OnN0cnBicms7CgogIGlubGluZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29u
c3QgY2hhciogX19zMikKICB7IHJldHVybiBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUg
Y2hhcioKICBzdHJyY2hyKGNoYXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGlu
X3N0cnJjaHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcg
OjpzdHJzdHI7CgogIGlubGluZSBjaGFyKgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFy
KiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFy
Kj4oX19zMSksIF9fczIpOyB9Cn0KIyA0NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAyIDMKCgpuYW1lc3BhY2Ug
c3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMK
ICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNp
Z25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAg
ICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0
YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2Mx
LCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0
YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBl
JiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29s
CiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQog
ICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21w
YXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg
X19uKQogICAgICB7CiAgICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19f
aSkKICAgICAgICAgIGlmICghZXEoX19zMVtfX2ldLCBfX3MyW19faV0pKQogICAgICAgICAgICBy
ZXR1cm4gbHQoX19zMVtfX2ldLCBfX3MyW19faV0pID8gLTEgOiAxOwogICAgICAgIHJldHVybiAw
OwogICAgICB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5
cGUqIF9fcykKICAgICAgewogICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOwogICAg
ICAgIHdoaWxlICgqX19wKSArK19fcDsKICAgICAgICByZXR1cm4gKF9fcCAtIF9fcyk7CiAgICAg
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90
eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7CiAgICAg
ICAgZm9yIChjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fczsgc2l6ZV90KF9fcCAtIF9fcykgPCBf
X247ICsrX19wKQogICAgICAgICAgaWYgKCpfX3AgPT0gX19hKSByZXR1cm4gX19wOwogICAgICAg
IHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNo
YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7
IHJldHVybiAoY2hhcl90eXBlKikgbWVtbW92ZShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hh
cl90eXBlKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBl
KiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJu
IChjaGFyX3R5cGUqKSBtZW1jcHkoX19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkp
OyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3Ms
IHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNoYXJfdHlw
ZSogX19wID0gX19zOyBfX3AgPCBfX3MgKyBfX247ICsrX19wKQogICAgICAgICAgYXNzaWduKCpf
X3AsIF9fYSk7CiAgICAgICAgcmV0dXJuIF9fczsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJf
dHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1
cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRf
dHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAg
ICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNv
bnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlw
ZT4oLTEpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRf
dHlwZSYgX19jKQogICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90
eXBlKDApIDogX19jOyB9CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3Ry
YWl0czxjaGFyPgogICAgewogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGludCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0
ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwg
Y29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0
aWMgYm9vbAogICAgICBlcShjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYg
X19jMikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAog
ICAgICBsdChjb25zdCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyByZXR1cm4gX19jMSA8IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFy
ZShjb25zdCBjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gbWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRp
YyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVy
biBzdHJsZW4oX19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmlu
ZChjb25zdCBjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2Ep
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3Ms
IF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90
eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0
dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0K
CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25z
dCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0
PGNoYXJfdHlwZSo+KG1lbWNweShfX3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5
cGUgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19z
LCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlw
ZShjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5
cGU+KF9fYyk7IH0KCgoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNv
bnN0IGNoYXJfdHlwZSYgX19jKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
c3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAg
ICAgIGVxX2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19j
MikKICAgICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUK
ICAgICAgZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAg
ICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAg
ICB7IHJldHVybiAoX19jID09IGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCgogIHRlbXBsYXRl
PD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PgogICAgewogICAgICB0eXBlZGVmIHdj
aGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlw
ZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lk
CiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAg
ICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEg
PT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBf
X2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9
CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBj
b25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAo
X19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29u
c3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBz
dGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gd21lbWNocihf
X3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFy
X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgaW50X3R5cGUgX19uKQogICAgICB7
IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90
eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBz
aXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAg
ICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90
IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19u
KTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50
X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRf
dHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50
X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3Qg
aW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2Mx
ID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBz
dGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRf
dHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVx
X2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21h
dGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0No
YXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv
cigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9
CiAgICB9Owp9CiMgNDcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2lvcyIgMiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0
YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5o
IiAzCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9pYTY0LXVua25vd24tbGludXgvYml0cy9jKytsb2NhbGUuaCIgMSAzCiMgMzYgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93
bi1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY2xvY2FsZSIgMSAzCiMgNDggIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Nsb2NhbGUiIDMKCiMgMSAi
L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAz
CiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2
NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs
dWRlL2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMg
MjcgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAzCmVudW0KewogIF9fTENfQ1RZUEUgPSAw
LAogIF9fTENfTlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAz
LAogIF9fTENfTU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0g
NiwKICBfX0xDX1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDks
CiAgX19MQ19URUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19J
REVOVElGSUNBVElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgpl
eHRlcm4gIkMiIHsKIyA1MiAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCnN0cnVjdCBsY29udgp7
CgoKICBjaGFyICpkZWNpbWFsX3BvaW50OwogIGNoYXIgKnRob3VzYW5kc19zZXA7CgoKCgoKICBj
aGFyICpncm91cGluZzsKCgoKCgogIGNoYXIgKmludF9jdXJyX3N5bWJvbDsKICBjaGFyICpjdXJy
ZW5jeV9zeW1ib2w7CiAgY2hhciAqbW9uX2RlY2ltYWxfcG9pbnQ7CiAgY2hhciAqbW9uX3Rob3Vz
YW5kc19zZXA7CiAgY2hhciAqbW9uX2dyb3VwaW5nOwogIGNoYXIgKnBvc2l0aXZlX3NpZ247CiAg
Y2hhciAqbmVnYXRpdmVfc2lnbjsKICBjaGFyIGludF9mcmFjX2RpZ2l0czsKICBjaGFyIGZyYWNf
ZGlnaXRzOwoKICBjaGFyIHBfY3NfcHJlY2VkZXM7CgogIGNoYXIgcF9zZXBfYnlfc3BhY2U7Cgog
IGNoYXIgbl9jc19wcmVjZWRlczsKCiAgY2hhciBuX3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFy
IHBfc2lnbl9wb3NuOwogIGNoYXIgbl9zaWduX3Bvc247CgoKICBjaGFyIGludF9wX2NzX3ByZWNl
ZGVzOwoKICBjaGFyIGludF9wX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBpbnRfbl9jc19wcmVjZWRl
czsKCiAgY2hhciBpbnRfbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBpbnRfcF9zaWduX3Bv
c247CiAgY2hhciBpbnRfbl9zaWduX3Bvc247CiMgMTE5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgi
IDMKfTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3Qg
Y2hhciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNv
bnYgKHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzCmV4dGVy
biBfX2xvY2FsZV90IF9fbmV3bG9jYWxlIChpbnQgX19jYXRlZ29yeV9tYXNrLCBfX2NvbnN0IGNo
YXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBf
X2Jhc2UpIHRocm93ICgpOwoKCgpleHRlcm4gX19sb2NhbGVfdCBfX2R1cGxvY2FsZSAoX19sb2Nh
bGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBfX2ZyZWVsb2NhbGUgKF9f
bG9jYWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgp9CiMgNTAgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Nsb2NhbGUiIDIgMwoKCgoKCm5hbWVz
cGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpzZXRsb2NhbGU7CiAgdXNpbmcg
Ojpsb2NhbGVjb252Owp9CiMgMzcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2MrK2xvY2FsZS5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMgMjQgIi91c3IvaW5jbHVkZS9sYW5n
aW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDEgMwojIDMxICIvdXNyL2lu
Y2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7
CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0
IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq
Y2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0
ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIv
dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs
ZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKCmV4dGVybiAiQyIg
ewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwplbnVtCnsKCgoKICBBQkRBWV8xID0g
KCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRBWV8yLAoKICBBQkRBWV8zLAoKICBB
QkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBBQkRBWV83LAoKCgogIERBWV8xLAoK
ICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlfNSwKCiAgREFZXzYsCgogIERBWV83
LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9OXzMsCgogIEFCTU9OXzQsCgogIEFC
TU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFCTU9OXzgsCgogIEFCTU9OXzksCgog
IEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIsCgoKCiAgTU9OXzEsCgogIE1PTl8y
LAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBNT05fNiwKCiAgTU9OXzcsCgogIE1P
Tl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEsCgogIE1PTl8xMiwKCgogIEFNX1NU
UiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQsCgogIFRfRk1ULAoKICBUX0ZNVF9B
TVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVSQV9EX0ZNVCwKCiAgQUxUX0RJR0lU
UywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgogIF9OTF9USU1FX0VSQV9OVU1fRU5U
UklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05MX1dBQkRBWV8xLAogIF9OTF9XQUJE
QVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80LAogIF9OTF9XQUJEQVlfNSwKICBf
TkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05MX1dEQVlfMSwKICBfTkxfV0RBWV8y
LAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxfV0RBWV81LAogIF9OTF9XREFZXzYs
CiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBfTkxfV0FCTU9OXzIsCiAgX05MX1dB
Qk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9OXzUsCiAgX05MX1dBQk1PTl82LAog
IF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05MX1dBQk1PTl85LAogIF9OTF9XQUJN
T05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9OXzEyLAoKCiAgX05MX1dNT05fMSwK
ICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dNT05fNCwKICBfTkxfV01PTl81LAog
IF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01PTl84LAogIF9OTF9XTU9OXzksCiAg
X05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dNT05fMTIsCgogIF9OTF9XQU1fU1RS
LAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAgX05MX1dEX0ZNVCwKICBfTkxfV1Rf
Rk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFfWUVBUiwKICBfTkxfV0VSQV9EX0ZN
VCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9UX0ZNVCwKICBfTkxfV0VSQV9UX0ZN
VCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElNRV9XRUVLXzFTVERBWSwKICBfTkxf
VElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1RfV0VFS0RBWSwKICBfTkxfVElNRV9G
SVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJT04sCiAgX05MX1RJTUVfVElNRVpP
TkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQsCgogIF9OTF9USU1FX0NPREVTRVQs
CgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgoX19MQ19D
T0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9OTF9DT0xM
QVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVfRVhUUkFN
QiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAgX05MX0NP
TExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxFV0MsCiAg
X05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxfQ09MTEFU
RV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05MX0NPTExB
VEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxfQ09MTEFU
RV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdDLAogIF9OTF9DT0xMQVRFX0NPREVT
RVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xBU1MgPSAoKChfX0xD
X0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9UT1VQUEVSLAogIF9OTF9DVFlQRV9H
QVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQRV9HQVAyLAogIF9OTF9DVFlQRV9D
TEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQRV9HQVA0LAogIF9OTF9DVFlQRV9H
QVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9DTEFTU19OQU1FUywKICBfTkxfQ1RZ
UEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBfTkxfQ1RZUEVfTUJfQ1VSX01BWCwK
ICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQgPSBfTkxfQ1RZUEVfQ09ERVNFVF9O
QU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9DVFlQRV9UT0xPV0VSMzIsCiAgX05M
X0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwKICBfTkxfQ1RZUEVf
SU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAgX05MX0NUWVBFX0lO
RElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01CLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM1X01C
LAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTN19NQiwKICBf
TkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfTUIsCiAgX05MX0NU
WVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dDLAogIF9OTF9DVFlQ
RV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMl9XQywKICBfTkxfQ1RZUEVfSU5E
SUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCiAgX05MX0NUWVBFX0lORElHSVRT
NV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfV0Ms
CiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X1dDLAogIF9O
TF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMV9NQiwKICBfTkxfQ1RZ
UEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCiAgX05MX0NUWVBFX09V
VERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01CLAogIF9OTF9DVFlQRV9PVVRESUdJ
VDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ4X01C
LAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMF9XQywKICBf
TkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfV0MsCiAgX05MX0NU
WVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ0X1dDLAogIF9OTF9DVFlQRV9P
VVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9XQywKICBfTkxfQ1RZUEVfT1VURElH
SVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUOV9X
QywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAgX05MX0NUWVBFX1RSQU5TTElUX0ZS
T01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwKICBfTkxfQ1RZUEVfVFJBTlNM
SVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCiAgX05MX0NUWVBFX1RSQU5T
TElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFVTFRfTUlT
U0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKICBfTkxfQ1RZUEVfVFJBTlNM
SVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQ
XzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNCwKICBf
TkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF82LAogIF9OTF9DVFlQ
RV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCiAgX05MX0NUWVBFX0VYVFJB
X01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8x
MSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTMsCiAg
X05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xDX0NUWVBFLAoKCgoKICBfX0lOVF9D
VVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2KSB8ICgwKSksCgoKCiAgX19DVVJS
RU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lOVCwKCgoKICBfX01PTl9USE9VU0FO
RFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9fUE9TSVRJVkVfU0lHTiwKCgoKICBf
X05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJVFMsCgoKCiAgX19GUkFDX0RJR0lU
UywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NFUF9CWV9TUEFDRSwKCgoKICBfX05f
Q1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwKCgoKICBfX1BfU0lHTl9QT1NOLAoK
CgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0NSTkNZU1RSLAoKICBfX0lOVF9Q
X0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX05fQ1Nf
UFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfUF9TSUdOX1BP
U04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0RVT19JTlRfQ1VS
Ul9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5DWV9TWU1CT0wsCiAgX05MX01PTkVU
QVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19GUkFDX0RJR0lUUywK
ICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19QX1NF
UF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVU
QVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NTX1BSRUNF
REVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFS
WV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9TRVBfQllf
U1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVP
X05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLAogIF9OTF9N
T05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9VTk9fVkFMSURfRlJP
TSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9EVU9fVkFMSURf
RlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9DT05WRVJT
SU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX01PTkVUQVJZ
X1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NPREVTRVQsCiAgX05MX05VTV9MQ19N
T05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8IDE2KSB8
ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VTQU5EU19T
RVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywKCgoKICBf
TkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5EU19TRVBf
V0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05VTUVSSUMsCgogIF9fWUVT
RVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgwKSksCgogIF9fTk9FWFBSLAoKICBf
X1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNTQUdFU19DT0RFU0VULAogIF9OTF9O
VU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQgPSAoKChfX0xDX1BBUEVSKSA8PCAx
NikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxfUEFQRVJfQ09ERVNFVCwKICBfTkxf
TlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9ICgoKF9fTENfTkFNRSkgPDwgMTYp
IHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxfTkFNRV9OQU1FX01SLAogIF9OTF9O
QU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywKICBfTkxfTkFNRV9OQU1FX01TLAog
IF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVTU19QT1NU
QUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERSRVNTX0NP
VU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJFU1NfQ09V
TlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1NfQ09VTlRS
WV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09VTlRSWV9J
U0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FCLAogIF9O
TF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxfQUREUkVT
U19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9URUxfSU5U
X0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxFUEhPTkVf
VEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxFUEhPTkVf
SU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQsCiAgX05MX05VTV9MQ19URUxFUEhP
TkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VSRU1FTlQp
IDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NPREVTRVQsCiAgX05MX05VTV9MQ19N
RUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19JREVOVElG
SUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJRklDQVRJT05fU09VUkNFLAogIF9O
TF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVOVElGSUNBVElPTl9DT05UQUNULAog
IF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURFTlRJRklDQVRJT05fVEVMLAogIF9O
TF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJQ0FUSU9OX0xBTkdVQUdFLAogIF9O
TF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0FVRElFTkNF
LAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05f
QUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwKICBfTkxfSURFTlRJ
RklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05fQ0FURUdPUlksCiAgX05MX0lERU5U
SUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgogIF9OTF9O
VU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpubF9s
YW5naW5mbyAobmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwojIDU4NiAiL3Vzci9pbmNsdWRlL2xh
bmdpbmZvLmgiIDMKZXh0ZXJuIGNoYXIgKl9fbmxfbGFuZ2luZm9fbCAobmxfaXRlbSBfX2l0ZW0s
IF9fbG9jYWxlX3QgbCk7CgoKfQojIDM4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9jKytsb2NhbGUuaCIg
MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvaWNv
bnYuaCIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2Mt
bGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjUgIi91
c3IvaW5jbHVkZS9pY29udi5oIiAyIDMKCgpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKmlj
b252X3Q7CgoKCgpleHRlcm4gaWNvbnZfdCBpY29udl9vcGVuIChfX2NvbnN0IGNoYXIgKl9fdG9j
b2RlLCBfX2NvbnN0IGNoYXIgKl9fZnJvbWNvZGUpCiAgICAgdGhyb3cgKCk7CgoKCgpleHRlcm4g
c2l6ZV90IGljb252IChpY29udl90IF9fY2QsIGNoYXIgKipfX3Jlc3RyaWN0IF9faW5idWYsCiAg
ICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX2luYnl0ZXNsZWZ0LAogICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX291dGJ1ZiwKICAgICAgICAgICAg
ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fb3V0Ynl0ZXNsZWZ0KTsKCgpleHRlcm4gaW50
IGljb252X2Nsb3NlIChpY29udl90IF9fY2QpIHRocm93ICgpOwoKfQojIDM5ICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGlu
dXgvYml0cy9jKytsb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMSAz
CiMgMzAgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDMKZXh0ZXJuICJDIiB7CgoKCgpleHRlcm4g
Y2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25zdCBjaGFy
ICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAoX19jb25z
dCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBjaGFyICpk
Y2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAg
ICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAoKTsKZXh0
ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoK
CmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19jb25zdCBj
aGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludCBf
X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgxKSkpIF9f
YXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIgKmRuZ2V0
dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZDEs
CiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVuc2lnbmVk
IGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJn
X18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpleHRlcm4g
Y2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hh
ciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNn
aWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18g
KDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4dGVybiBj
aGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5hbWUpIHRo
cm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9fY29uc3Qg
Y2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL2J1aWxkcy9n
Y2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4
LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA5NSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIg
MiAzCiMgMTE1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCn0KIyA0MCAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4
L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9fbG9j
YWxlX3QgX19jX2xvY2FsZTsKfQojIDQ3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jbGltaXRzIiAxIDMKIyA0
OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY2xp
bWl0cyIgMwoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2Nj
LWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDExICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25v
d24tbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1
ZGUvc3lzbGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9saW1p
dHMuaCIgMSAzCiMgMTMyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIv
Z2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDMKIyAxICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5j
bHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xp
bS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNy
L2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2Nh
bF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwoj
IDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0
cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVk
ZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgi
IDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNy
L2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDEzMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0
L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL2xpbWl0
cy5oIiAyIDMKIyA4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2Nj
LWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3lzbGltaXRzLmgiIDIgMwojIDEy
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVu
a25vd24tbGludXgvMy4xL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDUwICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jbGltaXRzIiAyIDMKIyA0OCAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVmd2QuaCIgMiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvY2N0eXBlIiAxIDMKIyA0NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY2N0eXBlIiAzCgojIDEgIi91c3IvaW5jbHVkZS9j
dHlwZS5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CiMg
NDAgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAx
IDMKIyAzNyAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
ZW5kaWFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMwojIDQxICIvdXNy
L2luY2x1ZGUvY3R5cGUuaCIgMiAzCgoKCgoKCmVudW0KewogIF9JU3VwcGVyID0gKCgwKSA8IDgg
PyAoKDEgPDwgKDApKSA8PCA4KSA6ICgoMSA8PCAoMCkpID4+IDgpKSwKICBfSVNsb3dlciA9ICgo
MSkgPCA4ID8gKCgxIDw8ICgxKSkgPDwgOCkgOiAoKDEgPDwgKDEpKSA+PiA4KSksCiAgX0lTYWxw
aGEgPSAoKDIpIDwgOCA/ICgoMSA8PCAoMikpIDw8IDgpIDogKCgxIDw8ICgyKSkgPj4gOCkpLAog
IF9JU2RpZ2l0ID0gKCgzKSA8IDggPyAoKDEgPDwgKDMpKSA8PCA4KSA6ICgoMSA8PCAoMykpID4+
IDgpKSwKICBfSVN4ZGlnaXQgPSAoKDQpIDwgOCA/ICgoMSA8PCAoNCkpIDw8IDgpIDogKCgxIDw8
ICg0KSkgPj4gOCkpLAogIF9JU3NwYWNlID0gKCg1KSA8IDggPyAoKDEgPDwgKDUpKSA8PCA4KSA6
ICgoMSA8PCAoNSkpID4+IDgpKSwKICBfSVNwcmludCA9ICgoNikgPCA4ID8gKCgxIDw8ICg2KSkg
PDwgOCkgOiAoKDEgPDwgKDYpKSA+PiA4KSksCiAgX0lTZ3JhcGggPSAoKDcpIDwgOCA/ICgoMSA8
PCAoNykpIDw8IDgpIDogKCgxIDw8ICg3KSkgPj4gOCkpLAogIF9JU2JsYW5rID0gKCg4KSA8IDgg
PyAoKDEgPDwgKDgpKSA8PCA4KSA6ICgoMSA8PCAoOCkpID4+IDgpKSwKICBfSVNjbnRybCA9ICgo
OSkgPCA4ID8gKCgxIDw8ICg5KSkgPDwgOCkgOiAoKDEgPDwgKDkpKSA+PiA4KSksCiAgX0lTcHVu
Y3QgPSAoKDEwKSA8IDggPyAoKDEgPDwgKDEwKSkgPDwgOCkgOiAoKDEgPDwgKDEwKSkgPj4gOCkp
LAogIF9JU2FsbnVtID0gKCgxMSkgPCA4ID8gKCgxIDw8ICgxMSkpIDw8IDgpIDogKCgxIDw8ICgx
MSkpID4+IDgpKQp9OwojIDc1ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gX19jb25z
dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90
ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3Vw
cGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMwpleHRlcm4gaW50IGlzYWxudW0gKGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNhbHBoYSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBpc2NudHJsIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZGlnaXQgKGludCkgdGhyb3cg
KCk7CmV4dGVybiBpbnQgaXNsb3dlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2dyYXBo
IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzcHJpbnQgKGludCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgaXNwdW5jdCAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIHRo
cm93ICgpOwpleHRlcm4gaW50IGlzdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN4
ZGlnaXQgKGludCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCB0b2xvd2VyIChpbnQgX19jKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHRvdXBwZXIgKGludCBfX2MpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGlu
dCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHRvYXNjaWkgKGludCBfX2MpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IF90b3VwcGVyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IF90b2xv
d2VyIChpbnQpIHRocm93ICgpOwojIDIyMyAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJu
IGludCBfX2lzYWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf
X2lzYWxwaGFfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250
cmxfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAo
aW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBf
X2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2Fs
ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0
aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAo
KTsKZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfX2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGlu
dCBfX2lzeGRpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9f
aXNibGFua19sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9s
b3dlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf
X3RvdXBwZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NiAiL3Vz
ci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDQ5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9jY3R5cGUiIDIgMwojIDY1ICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jY3R5cGUiIDMKbmFtZXNwYWNlIHN0
ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsKICB1c2luZyA6OmlzY250
cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsKICB1c2luZyA6OmlzbG93
ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsKICB1c2luZyA6Omlzc3Bh
Y2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7CiAgdXNpbmcgOjp0b2xv
d2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zdHJpbmciIDEg
MwojIDQ0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9zdHJpbmciIDMKCgoKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvbWVtb3J5IiAxIDMKIyA1MyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAzCgojIDEgIi9idWlsZHMvZ2NjLTNf
MS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgi
IDEgMwojIDY3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMSAzCiMgNDggIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NzdGRsaWIiIDMKCgoKCiMg
MSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o
IiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIv
aWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDY1ICIvdXNyL2luY2x1
ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKdW5pb24gd2FpdAogIHsKICAgIGludCB3X3N0YXR1czsK
ICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfdGVybXNpZzo3Owog
ICAgICAgIHVuc2lnbmVkIGludCBfX3dfY29yZWR1bXA6MTsKICAgICAgICB1bnNpZ25lZCBpbnQg
X193X3JldGNvZGU6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCgogICAgICB9IF9f
d2FpdF90ZXJtaW5hdGVkOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAgdW5zaWduZWQgaW50
IF9fd19zdG9wdmFsOjg7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19zdG9wc2lnOjg7CiAgICAg
ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgogICAgICB9IF9fd2FpdF9zdG9wcGVkOwogIH07CiMg
NDQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzCiMgOTQgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRp
dl90OwoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGlu
dCByZW07CiAgfSBsZGl2X3Q7CgoKCgoKX19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZf
dDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gc2l6ZV90IF9fY3R5cGVf
Z2V0X21iX2N1cl9tYXggKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGF0b2YgKF9f
Y29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiBpbnQgYXRvaSAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGxvbmcgaW50IGF0b2wgKF9fY29uc3QgY2hhciAq
X19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKX19leHRlbnNp
b25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoX19jb25zdCBjaGFyICpfX25wdHIpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBkb3VibGUg
c3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv
YXQgc3RydG9mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7CgpleHRlcm4gbG9u
ZyBkb3VibGUgc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGxvbmcgaW50IHN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIs
IGludCBfX2Jhc2UpIHRocm93ICgpOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0
aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b3EgKF9f
Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l
eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv
dyAoKTsKCgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0b2xsIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7Cgpf
X2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHN0cnRvdWxsIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAg
dGhyb3cgKCk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGxvbmcgaW50
IF9fc3RydG9sX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9sIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNpb25f
XwpleHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1
bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgp
OwoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRvZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy
LCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IF9fc3RydG9m
X2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cg
KCk7CgpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2wgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0
aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fc3RydG9mX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGxv
bmcgZG91YmxlIF9fc3RydG9sZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCBfX2dyb3VwKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9pbnRlcm5hbCAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCmV4
dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5h
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkg
dGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19zdHJ0b3VsbF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4
dGVybiBfX2lubGluZSBkb3VibGUKc3RydG9kIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKewogIHJldHVybiBfX3N0
cnRvZF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIGxv
bmcgaW50CnN0cnRvbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVy
biBfX3N0cnRvbF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpleHRl
cm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBpbnQKc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgIGludCBf
X2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0CnN0cnRvZiAoX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIp
IHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2ZfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGRvdWJsZQpzdHJ0b2xkIChfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvbGRfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOwp9CgoK
Cl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9xIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwK
ICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG9sbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQpfX2V4dGVuc2lvbl9fIGV4dGVybiBf
X2lubGluZSB1bnNpZ25lZCBsb25nIGxvbmcgaW50CnN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQg
X19iYXNlKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fc3RydG91bGxfaW50ZXJuYWwgKF9fbnB0ciwg
X19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KCgoKX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUg
bG9uZyBsb25nIGludApzdHJ0b2xsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkK
ewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwg
MCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9uZyBsb25nIGlu
dApzdHJ0b3VsbCAoX19jb25zdCBjaGFyICogX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewogIHJldHVy
biBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9CgoK
ZXh0ZXJuIF9faW5saW5lIGRvdWJsZQphdG9mIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cg
KCkKewogIHJldHVybiBzdHJ0b2QgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCk7Cn0KZXh0ZXJu
IF9faW5saW5lIGludAphdG9pIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkKewogIHJl
dHVybiAoaW50KSBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CmV4dGVy
biBfX2lubGluZSBsb25nIGludAphdG9sIChfX2NvbnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkK
ewogIHJldHVybiBzdHJ0b2wgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CgoKX19l
eHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgbG9uZyBsb25nIGludAphdG9sbCAoX19jb25zdCBj
aGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sbCAoX19ucHRyLCAoY2hhciAq
KikgX19udWxsLCAxMCk7Cn0KIyAzODQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4g
Y2hhciAqbDY0YSAobG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0
bCAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFy
Owp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVk
ZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19s
b2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19p
bm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9f
Z2lkX3QgZ2lkX3Q7CgoKCgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19u
bGlua190IG5saW5rX3Q7CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBf
X29mZl90IG9mZl90OwoKCgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwojIDEwNCAiL3Vz
ci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVm
IF9fc3NpemVfdCBzc2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVk
ZWYgX19jYWRkcl90IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzNiAi
L3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgX191c2Vjb25kc190IHVzZWNvbmRz
X3Q7CgoKCnR5cGVkZWYgX19zdXNlY29uZHNfdCBzdXNlY29uZHNfdDsKCgoKCgojIDEgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1s
aW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvdXNyL2luY2x1ZGUvc3lzL3R5
cGVzLmgiIDIgMwoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkw
ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMKdHlwZWRlZiBpbnQgaW50OF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9fYXR0cmli
dXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVk
IGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVk
ZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf
XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18gKChfX21v
ZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgo
X19tb2RlX18gKF9fd29yZF9fKSkpOwojIDIxNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMSAzCiMgMzIg
Ii91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMwp0eXBlZGVm
IGludCBfX3NpZ19hdG9taWNfdDsKCgoKCnR5cGVkZWYgc3RydWN0CiAgewogICAgdW5zaWduZWQg
bG9uZyBpbnQgX192YWxbKDEwMjQgLyAoOCAqIHNpemVvZiAodW5zaWduZWQgbG9uZyBpbnQpKSld
OwogIH0gX19zaWdzZXRfdDsKIyAzNSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0
aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2Vj
OwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2lu
Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoK
dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog
c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk
X21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g
IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0
cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9fcmVzdHJpY3QgX193
cml0ZWZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZk
cywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICpfX3Jlc3RyaWN0IF9fdGltZW91
dCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRzLCBmZF9zZXQg
Kl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0cmljdCBf
X2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9f
cmVzdHJpY3QgX190aW1lb3V0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fc2lnc2V0X3Qg
Kl9fcmVzdHJpY3QgX19zaWdtYXNrKSB0aHJvdyAoKTsKCgp9CiMgMjE2ICIvdXNyL2luY2x1ZGUv
c3lzL3R5cGVzLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaCIgMSAz
CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgoKdHlwZWRlZiBfX2Jsa3Np
emVfdCBibGtzaXplX3Q7CgoKCgoKCnR5cGVkZWYgX19ibGtjbnRfdCBibGtjbnRfdDsKCgoKdHlw
ZWRlZiBfX2ZzYmxrY250X3QgZnNibGtjbnRfdDsKCgoKdHlwZWRlZiBfX2ZzZmlsY250X3QgZnNm
aWxjbnRfdDsKIyAyNTcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fYmxr
Y250NjRfdCBibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNibGtjbnQ2NF90IGZzYmxrY250NjRfdDsK
dHlwZWRlZiBfX2ZzZmlsY250NjRfdCBmc2ZpbGNudDY0X3Q7CgoKfQojIDM5MSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IHJhbmRvbSAodm9pZCkgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgdGhyb3cg
KCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hh
ciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhdGVsZW4p
IHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNoYXIgKl9fc3RhdGVidWYpIHRo
cm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsK
ICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7
CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRy
OwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVzdHJp
Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3QgKl9fcmVzdHJpY3QgX19yZXN1
bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVuc2lnbmVkIGludCBfX3NlZWQs
IHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBpbml0c3Rh
dGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAog
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxlbiwKICAgICAgICAgICAgICAg
ICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmljdCBfX3N0YXRlYnVmLAogICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1Zikg
dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0aHJvdyAoKTsKCmV4dGVybiB2
b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBy
YW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBkb3Vi
bGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJhbmQ0OCAodW5zaWdu
ZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBscmFu
ZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5yYW5kNDggKHVuc2lnbmVkIHNo
b3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgbXJhbmQ0OCAo
dm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBp
bnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmQ0OCAobG9uZyBpbnQg
X19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICh1
bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgbGNv
bmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRocm93ICgpOwoKCgoKCnN0cnVj
dCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX194WzNdOwogICAgdW5z
aWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19jOwog
ICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJp
Y3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hv
cnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9k
YXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGxyYW5kNDhfciAoc3Ry
dWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBu
cmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAg
ICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAg
ICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hz
dWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0
IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5kNDhfciAobG9uZyBpbnQgX19z
ZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikKICAgICB0aHJvdyAoKTsKCmV4
dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10sCiAgICAg
ICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAoKTsK
CmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwKICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSB0aHJvdyAo
KTsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gdm9pZCAqbWFsbG9jIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKZXh0
ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUpCiAgICAgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgpleHRlcm4gdm9pZCAqcmVh
bGxvYyAodm9pZCAqX19wdHIsIHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCBmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7
CgoKCmV4dGVybiB2b2lkIGNmcmVlICh2b2lkICpfX3B0cikgdGhyb3cgKCk7CgoKCiMgMSAiL3Vz
ci9pbmNsdWRlL2FsbG9jYS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMg
MSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvbGliL2djYy1saWIvaWE2NC11
bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl
L2FsbG9jYS5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCmV4dGVybiB2b2lkICphbGxvY2EgKHNp
emVfdCBfX3NpemUpIHRocm93ICgpOwoKCgoKCn0KIyA1NDcgIi91c3IvaW5jbHVkZS9zdGRsaWIu
aCIgMiAzCgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChzaXplX3QgX19zaXplKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoKZXh0ZXJuIGludCBwb3NpeF9tZW1hbGln
biAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGlnbm1lbnQsIHNpemVfdCBfX3NpemUpCiAg
ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQg
YWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoK
ZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpl
eHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMpIChpbnQgX19zdGF0dXMsIHZvaWQgKl9f
YXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAo
aW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoK
CgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f
ICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hhciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3NlY3VyZV9nZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAoY2hhciAq
X19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgc2V0ZW52IChfX2NvbnN0IGNoYXIg
Kl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9pZCkgdGhyb3cgKCk7CiMgNjIzICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqX190ZW1wbGF0
ZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IG1rc3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUp
IHRocm93ICgpOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgbWtz
dGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKIyA2NTAgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWtkdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAoX19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fub25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBj
aGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4
dGVybiBjaGFyICpyZWFscGF0aCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbmFtZSwKICAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fcmVzb2x2ZWQpIHRocm93ICgp
OwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChfX2NvbnN0IHZvaWQgKiwgX19j
b25zdCB2b2lkICopOwoKCnR5cGVkZWYgX19jb21wYXJfZm5fdCBjb21wYXJpc29uX2ZuX3Q7CgoK
CgoKZXh0ZXJuIHZvaWQgKmJzZWFyY2ggKF9fY29uc3Qgdm9pZCAqX19rZXksIF9fY29uc3Qgdm9p
ZCAqX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf
X3NpemUsIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gdm9pZCBxc29ydCAodm9p
ZCAqX19iYXNlLCBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAg
ICAgIF9fY29tcGFyX2ZuX3QgX19jb21wYXIpOwoKCgpleHRlcm4gaW50IGFicyAoaW50IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gbG9uZyBpbnQgbGFi
cyAobG9uZyBpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7Cgpf
X2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcgaW50IGxsYWJzIChsb25nIGxvbmcgaW50IF9f
eCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCmV4dGVy
biBkaXZfdCBkaXYgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0
dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBpbnQgX19u
dW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsbGRpdl90IGxsZGl2IChsb25nIGxvbmcg
aW50IF9fbnVtZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9u
ZyBpbnQgX19kZW5vbSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CiMgNzI4ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKmVjdnQgKGRvdWJs
ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAg
ICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4g
Y2hhciAqZmN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBjaGFyICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqcWVjdnQgKGxvbmcgZG91
YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVz
dHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBj
aGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg
ICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWdu
KSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnFnY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg
X19uZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZWN2dF9yIChk
b3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAg
ICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3Qg
X19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIHRocm93ICgpOwpleHRlcm4g
aW50IGZjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0
IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduLCBjaGFy
ICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuKSB0aHJv
dyAoKTsKCmV4dGVybiBpbnQgcWVjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19i
dWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgcWZjdnRfciAobG9uZyBkb3Vi
bGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduLAogICAgICAgICAgICAgICAgICAg
IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBpbnQgbWJsZW4gKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IG1idG93YyAod2NoYXJfdCAqX19yZXN0cmljdCBfX3B3YywKICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24pIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgdGhy
b3cgKCk7CgoKCmV4dGVybiBzaXplX3QgbWJzdG93Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w
d2NzLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgKGNoYXIgKl9f
cmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19wd2NzLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBycG1hdGNoIChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpIHRocm93ICgpOwojIDgwOCAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19y
ZXN0cmljdCBfX29wdGlvbnAsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpf
X3Jlc3RyaWN0IF9fdG9rZW5zLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX192YWx1ZXApIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBj
aGFyICpfX2tleSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50
IF9fb2ZsYWcpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBjaGFyICpwdHNuYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgcHRzbmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBp
bnQgZ2V0bG9hZGF2ZyAoZG91YmxlIF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7
CgoKCgoKfQojIDUzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9jc3RkbGliIiAyIDMKIyA4NCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvY3N0ZGxpYiIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6
OmRpdl90OwogIHVzaW5nIDo6bGRpdl90OwoKICB1c2luZyA6OmFib3J0OwogIHVzaW5nIDo6YWJz
OwogIHVzaW5nIDo6YXRleGl0OwogIHVzaW5nIDo6YXRvZjsKICB1c2luZyA6OmF0b2k7CiAgdXNp
bmcgOjphdG9sOwogIHVzaW5nIDo6YnNlYXJjaDsKICB1c2luZyA6OmNhbGxvYzsKICB1c2luZyA6
OmRpdjsKICB1c2luZyA6OmV4aXQ7CiAgdXNpbmcgOjpmcmVlOwogIHVzaW5nIDo6Z2V0ZW52Owog
IHVzaW5nIDo6bGFiczsKICB1c2luZyA6OmxkaXY7CiAgdXNpbmcgOjptYWxsb2M7CiAgdXNpbmcg
OjptYmxlbjsKICB1c2luZyA6Om1ic3Rvd2NzOwogIHVzaW5nIDo6bWJ0b3djOwogIHVzaW5nIDo6
cXNvcnQ7CiAgdXNpbmcgOjpyYW5kOwogIHVzaW5nIDo6cmVhbGxvYzsKICB1c2luZyA6OnNyYW5k
OwogIHVzaW5nIDo6c3RydG9kOwogIHVzaW5nIDo6c3RydG9sOwogIHVzaW5nIDo6c3RydG91bDsK
ICB1c2luZyA6OnN5c3RlbTsKICB1c2luZyA6Ondjc3RvbWJzOwogIHVzaW5nIDo6d2N0b21iOwoK
ICBpbmxpbmUgbG9uZwogIGFicyhsb25nIF9faSkgeyByZXR1cm4gbGFicyhfX2kpOyB9CgogIGlu
bGluZSBsZGl2X3QKICBkaXYobG9uZyBfX2ksIGxvbmcgX19qKSB7IHJldHVybiBsZGl2KF9faSwg
X19qKTsgfQp9CiMgMTM2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNs
dWRlL2crKy12My9jc3RkbGliIiAzCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6bGxk
aXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUgbG9uZyBsb25nCiAgYWJzKGxvbmcgbG9u
ZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDogLV9feDsgfQoKICBpbmxpbmUgbG9uZyBs
b25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194
OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2Qp
CiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBf
X2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBsbGRpdihsb25nIGxvbmcgX19u
LCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7IF9fcS5xdW90ID0gX19uIC8gX19kOyBf
X3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNp
bmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwogIHVzaW5nIDo6c3RydG91bGw7CiAgdXNp
bmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmxsZGl2
X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1c2luZyBfX2dudV9jeHg6OmFiczsKICB1
c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9fZ251X2N4eDo6ZGl2OwogIHVzaW5nIF9f
Z251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjphdG9sbDsKICB1c2luZyBfX2dudV9j
eHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4
OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvbGQ7Cn0KIyA2OCAiL2J1aWxkcy9n
Y2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL25ldyIgMSAzCiMgNDQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0
YWxsL2luY2x1ZGUvZysrLXYzL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7
CgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAg
IGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9hbGxvYygpIHRocm93
KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJuIGNvbnN0IG5vdGhyb3df
dCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CgogIG5ld19oYW5k
bGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcik7Cn0KIyA3OSAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvbmV3IiAzCnZvaWQgKm9wZXJhdG9y
IG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFkX2FsbG9jKTsKdm9pZCAqb3BlcmF0b3Ig
bmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlKHZvaWQgKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICopIHRo
cm93KCk7CnZvaWQgKm9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93
X3QmKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgY29uc3Qgc3Rk
Ojpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkICosIGNvbnN0
IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGVbXSh2b2lkICos
IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUgdm9pZCAqb3BlcmF0b3Ig
bmV3KHN0ZDo6c2l6ZV90LCB2b2lkICpwbGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQpp
bmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIHZvaWQgKnBsYWNlKSB0aHJv
dygpIHsgcmV0dXJuIHBsYWNlOyB9Cgp9CiMgNzAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9wYWlyLmgiIDEgMwojIDY0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxh
dGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmly
c3RfdHlwZTsKICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBz
ZWNvbmQ7CgoKCgogIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29u
c3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9V
MSwgX1UyPiYgX19wKSA6IGZpcnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7
CiAgcmV0dXJuIF9feC5maXJzdCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vj
b25kOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjwoY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9f
eSkKewogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZp
cnN0IDwgX194LmZpcnN0KSAmJiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFp
cjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAh
KF9feCA9PSBfX3kpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUg
Ym9vbCBvcGVyYXRvcj4oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEs
IF9UMj4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4m
IF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
Pj0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkg
ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KIyAxNDAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihf
VDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBfVDI+KF9feCwgX195KTsK
fQoKfQojIDcyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVfdHJhaXRzLmgiIDEgMwojIDUz
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3R5cGVfdHJhaXRzLmgiIDMKIyA5MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlw
ZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlwZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX3R5cGVfdHJhaXRzIHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJl
cl9tdXN0X2JlX2ZpcnN0OwojIDExMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxz
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90
eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKCgoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxib29sPiB7CiAg
IHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Y2hh
cj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPHNpZ25lZCBjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07
Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP
RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2ln
bmVkIHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8aW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm
YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry
dWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmc+IHsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxs
b25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVy
YXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190
eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhh
c190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGRvdWJsZT4gewogICB0eXBl
ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk
ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgZG91
YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBfX3R5cGVfdHJhaXRzPF9UcCo+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNz
aWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKCgoKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+IHN0cnVjdCBfSXNfaW50ZWdlciB7CiAgdHlwZWRlZiBfX2ZhbHNlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8Ym9vbD4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8Y2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVt
cGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8c2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2ln
bmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9J
bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjx1bnNpZ25lZCBzaG9ydD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9
OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8aW50PiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25l
ZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9Jc19pbnRlZ2VyPGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3Jh
bDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmc+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19p
bnRlZ2VyPGxvbmcgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoK
dGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHN0
cnVjdCBfSXNfbm9ybWFsX2l0ZXJhdG9yIHsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgX05vcm1h
bDsKfTsKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5
cGVuYW1lIF9Db250YWluZXI+IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yOwp9Cgp0ZW1wbGF0ZTx0
eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFs
X2l0ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4g
PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MyAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL2J1aWxkcy9n
Y2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0
b3JfYmFzZV90eXBlcy5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA4MCAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV90eXBlcy5oIiAzCiAgc3RydWN0IGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IG91
dHB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBmb3J3YXJkX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBpbnB1dF9pdGVyYXRvcl90YWcge307CgogIHN0cnVjdCBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyA6IHB1YmxpYyBmb3J3YXJkX2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IHJhbmRv
bV9hY2Nlc3NfaXRlcmF0b3JfdGFnIDogcHVibGljIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
IHt9OwojIDEwMCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9EaXN0YW5jZSA9IHB0cmRpZmZf
dCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9UcCosIHR5cGVuYW1lIF9SZWZlcmVu
Y2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yIHsKCiAgICAgIHR5cGVkZWYgX0NhdGVnb3J5
IGl0ZXJhdG9yX2NhdGVnb3J5OwoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAg
IHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKCiAgICAgIHR5cGVkZWYgX1BvaW50
ZXIgcG9pbnRlcjsKCiAgICAgIHR5cGVkZWYgX1JlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBzdHJ1Y3QgaXRlcmF0b3Jf
dHJhaXRzIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9yX2NhdGVn
b3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6
dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6
ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXRlcmF0b3I6OnBvaW50ZXIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0
b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5kb21f
YWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBfVHAg
dmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogICAg
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHM8
Y29uc3QgX1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBl
ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBw
b2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
Y29uc3QgX0l0ZXImKQogICAgeyByZXR1cm4gdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
Pjo6aXRlcmF0b3JfY2F0ZWdvcnkoKTsgfQoKfQojIDc0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAx
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDEgMwojIDY4ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1
bmNzLmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz
CiMgNjkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMiAzCgoKCgpuYW1lc3BhY2Ugc3RkCnsK
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIF9fZGlzdGFuY2Uo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9pdGVy
YXRvcl90YWcpCiAgewoKICAgCgogICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICB3aGlsZSAoX19maXJzdCAhPSBf
X2xhc3QpIHsKICAgICAgKytfX2ZpcnN0OyArK19fbjsKICAgIH0KICAgIHJldHVybiBfX247CiAg
fQoKdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogIGlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCiAgX19kaXN0YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnKQogIHsKCiAgIAogICAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7CiAgfQojIDExMSAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
aXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9y
PgogIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKICBkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpCiAgewoKICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9J
bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKQogIHsKCiAg
IAogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2Fk
dmFuY2UoX0JpZGlyZWN0aW9uYWxJdGVyYXRvciYgX19pLCBfRGlzdGFuY2UgX19uLAogICAgICAg
ICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICBpZiAoX19uID4g
MCkKICAgICAgd2hpbGUgKF9fbi0tKSArK19faTsKICAgIGVsc2UKICAgICAgd2hpbGUgKF9fbisr
KSAtLV9faTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5
cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNz
SXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcpCiAgewoKICAgCiAgICBfX2kgKz0gX19uOwogIH0KIyAxNjQgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJh
dG9yX2Jhc2VfZnVuY3MuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogIGlubGluZSB2b2lkCiAgYWR2YW5jZShfSW5wdXRJdGVyYXRvciYg
X19pLCBfRGlzdGFuY2UgX19uKQogIHsKCiAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRlcmF0
b3JfY2F0ZWdvcnkoX19pKSk7CiAgfQoKfQojIDc1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9pdGVyYXRvci5oIiAxIDMKIyA2OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsK
IyA4OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAg
IGNsYXNzIHJldmVyc2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAg
ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBl
LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRv
cj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHBy
b3RlY3RlZDoKICAgICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBl
ZGVmIF9JdGVyYXRvciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90
eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpy
ZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZl
cnNlX2l0ZXJhdG9yKCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJh
dG9yKGl0ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQo
X194LmN1cnJlbnQpIHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg
ICAgIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkK
ICAgICAgICA6IGN1cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBl
CiAgICAgIGJhc2UoKSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVy
ZW5jZQogICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9f
dG1wID0gY3VycmVudDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAg
ICAgcG9pbnRlcgogICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvcioo
KSk7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAg
ICAgIHsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoK
CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsK
ICAgICAgICByZXZlcnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50
OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVy
YXRvci0tKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhp
czsKICAgICAgICArK2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoK
CiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBf
X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7
IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJl
bmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0
dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2Vf
aXRlcmF0b3IoY3VycmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYK
ICAgICAgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3Vy
cmVudCArPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJl
ZmVyZW5jZQogICAgICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0
dXJuICooKnRoaXMgKyBfX24pOyB9CiAgICB9OwojIDI2OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09
KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5i
YXNlKCkgPT0gX195LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh
dG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSA8IF9feC5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0g
X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAog
ICAgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAg
ICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyBy
ZXR1cm4gX195IDwgX194OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlu
bGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
PiYgX194LAogICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpCiAgICB7IHJldHVybiAhKF9feSA8IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPCBfX3kpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSByZXZlcnNlX2l0
ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgb3BlcmF0b3ItKGNvbnN0IHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX195LmJhc2UoKSAtIF9f
eC5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHJl
dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPgogICAgb3BlcmF0b3IrKHR5cGVuYW1lIHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgICBj
b25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCkKICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsgfQojIDMyNyAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBiYWNr
X2luc2VydF9pdGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh
Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0Nv
bnRhaW5lciogY29udGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5l
ciBjb250YWluZXJfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYWNrX2luc2VydF9pdGVy
YXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsgfQojIDM1MyAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5
cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAg
ICAgY29udGFpbmVyLT5wdXNoX2JhY2soX192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsg
cmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJh
dG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsKIyAzODQgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgaW5saW5lIGJh
Y2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBiYWNrX2luc2VydGVyKF9Db250YWlu
ZXImIF9feCkKICAgIHsgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7IH0KIyAzOTcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFp
bmVyPgogICAgY2xhc3MgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRv
cjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAg
cHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWluZXI7CgogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCiAgICAgIGV4cGxpY2l0IGZy
b250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVyKCZfX3gpIHsg
fQojIDQyMiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpjb25zdF9yZWZlcmVuY2UgX192YWx1
ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgICAg
ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3ImCiAg
ICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgZnJvbnRfaW5zZXJ0X2l0
ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9
CiAgICB9OwojIDQ1MyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250
YWluZXI+CiAgICBpbmxpbmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+CiAgICBm
cm9udF9pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpCiAgICB7IHJldHVybiBmcm9udF9pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQ3MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBpbnNlcnRfaXRlcmF0b3IKICAg
IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs
IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK
ICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3IgaXRlcjsKCiAgICBwdWJsaWM6Cgog
ICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoKCgoKICAgICAgaW5zZXJ0
X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0b3Ig
X19pKQogICAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiMgNTEyICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVy
YXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IHR5
cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAg
ICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAgICAgICsraXRl
cjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3Im
CiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5zZXJ0X2l0ZXJh
dG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQogICAgfTsK
IyA1NDQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyLCB0
eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
CiAgICBpbnNlcnRlcihfQ29udGFpbmVyJiBfX3gsIF9JdGVyYXRvciBfX2kpCiAgICB7CiAgICAg
IHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yKF9f
aSkpOwogICAgfQojIDU1OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9J
dGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9y
CiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0
b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRl
cmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAg
ICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZm
ZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVy
YXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0
ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4cGxpY2l0CiAg
ICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9NX2N1cnJlbnQo
X19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAgaW5saW5lIF9f
bm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVy
PiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgogICAgICByZWZl
cmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAg
ICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7
IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyArK19NX2N1
cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3Bl
cmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0K
CgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJy
ZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJh
dG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50LS0pOyB9CgoK
ICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBf
X24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAgICAgX19ub3Jt
YWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24p
CiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3Jt
YWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBj
b25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50ICsgX19uKTsg
fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVy
ZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVybiAqdGhpczsg
fQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVu
Y2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9j
dXJyZW50IC0gX19uKTsgfQoKICAgICAgZGlmZmVyZW5jZV90eXBlCiAgICAgIG9wZXJhdG9yLShj
b25zdCBfX25vcm1hbF9pdGVyYXRvciYgX19pKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJy
ZW50IC0gX19pLl9NX2N1cnJlbnQ7IH0KCiAgICAgIGNvbnN0IF9JdGVyYXRvciYKICAgICAgYmFz
ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVy
PgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRl
cmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p
dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMu
YmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JM
LCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3IhPShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gIShfX2xocyA9PSBfX3Jocyk7IH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5
cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3Jt
YWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBj
b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg
eyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJh
dG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMgPCBf
X2xoczsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0
b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8PShjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg
ICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYg
X19yaHMpCiAgeyByZXR1cm4gIShfX3JocyA8IF9fbGhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgog
IGlubGluZSBib29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVy
YXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gIShfX2xocyA8
IF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250
YWluZXI+CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4K
ICBvcGVyYXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRl
cmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0
ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvYmFzZS5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKIyA5MSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcjI+CiAgICBpbmxpbmUgdm9pZAogICAgaXRlcl9zd2FwKF9Gb3J3YXJkSXRlcjEgX19hLCBf
Rm9yd2FyZEl0ZXIyIF9fYikKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0ZvcndhcmRJdGVyMT46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTE7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcjI+Ojp2YWx1ZV90eXBlIF9W
YWx1ZVR5cGUyOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfVmFsdWVUeXBlMSBf
X3RtcCA9ICpfX2E7CiAgICAgICpfX2EgPSAqX19iOwogICAgICAqX19iID0gX190bXA7CiAgICB9
CiMgMTE4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s
aW5lIHZvaWQKICAgIHN3YXAoX1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAg
IF9UcCBfX3RtcCA9IF9fYTsKICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAg
IH0KIyAxNDYgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29uc3QgX1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikK
ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19iIDwgX19hKSByZXR1cm4gX19iOyByZXR1cm4gX19h
OwogICAgfQojIDE2NiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg
X19iKQogICAgewoKICAgICAKCiAgICAgIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVy
biBfX2E7CiAgICB9CiMgMTg2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29u
c3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg
ICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAy
MDQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1heChjb25zdCBfVHAmIF9fYSwgY29u
c3QgX1RwJiBfX2IsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgIGlmIChfX2NvbXAoX19h
LCBfX2IpKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDIyMSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBf
X2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0
ZXIKICAgIF9fY29weShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgcmFu
ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICBfRGlzdGFuY2U7CiAgICAgIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
IF9fbiA+IDA7IC0tX19uKSB7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAg
KytfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAg
X19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1Rw
KiBfX3Jlc3VsdCkKICAgIHsKICAgICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9m
KF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoX19s
YXN0IC0gX19maXJzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfYXV4
MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShf
X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4K
ICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgX1RwKgogICAgX19jb3B5X2F1eDIoX1RwKiBfX2ZpcnN0LCBfVHAq
IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9UcCogX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAg
eyByZXR1cm4gX19jb3B5X3RyaXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgyKGNv
bnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAq
IF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmly
c3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlf
bmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVU
eXBlPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAgX1RyaXZpYWw7
CiAgICAgIHJldHVybiBfT3V0cHV0SXRlcihfX2NvcHlfYXV4MihfX2ZpcnN0LCBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdC5iYXNlKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgaW5s
aW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNl
X3R5cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRf
b3BlcmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX19jb3B5X2F1eDIoX19m
aXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfVHJpdmlhbCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIK
ICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9y
bWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LmJhc2UoKSwgX19s
YXN0LmJhc2UoKSwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0
SXRlcgogICAgX19jb3B5X25pMShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+
OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X25pMihfX2ZpcnN0LCBfX2xh
c3QsIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KIyAzMzkgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAg
IGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfSW5wdXRJdGVyPjo6X05v
cm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9fZmlyc3QsIF9fbGFzdCwg
X19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgaW5saW5l
IF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAgICAgcmV0dXJuIF9fcmVz
dWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcgogICAg
X19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7
CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0gX19maXJzdDsgX19uID4g
MDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBf
Qm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoCiAgICB7CiAgICAg
IHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVy
MSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNr
d2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBz
dHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgog
ICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAgICAgICBjb25zdCBwdHJk
aWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVtbW92ZShfX3Jlc3VsdCAt
IF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAgICAgcmV0dXJuIF9fcmVz
dWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
c3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAqLCBfVHAqLCBfX3RydWVf
dHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmly
c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0
dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KICAg
ICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAgICAgfQogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAgIGlubGluZSBfQkky
CiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsIF9CSTIg
X19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czx0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IgX1RyaXZpYWw7CiAg
ICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwgX0JJMiwgX1RyaXZpYWw+
CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICAg
IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUg
X0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2Zp
cnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1cm4gX0JJMihfX2NvcHlf
YmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFzZSgpKSk7IH0KCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAg
X19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIg
X19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9hdXgo
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs
IHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX2lucHV0
X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+Ojpf
Tm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3Jt
YWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCwgX19Ob3JtYWwo
KSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAg
aW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
ICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0
LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ
MgogICAgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
SXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTE+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4g
X19jb3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX05vcm1hbCgpKTsKICAgIH0KIyA1MDkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIGZpbGwoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1
ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmly
c3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwogICAgfQojIDUzMSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlw
ZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBmb3Ig
KCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbHVl
OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwodW5z
aWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNpZ25l
ZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNl
dChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9pZAog
IGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0IHNp
Z25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1z
ZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3QgLSBf
X2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFyKiBf
X2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAgbWVt
c2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0g
X19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1bnNp
Z25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwg
Y29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9fZmly
c3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxfbihj
aGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7CiAg
ICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9fZmly
c3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIGNo
YXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBfX2Mp
CiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0
dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyPgogICAgcGFpcjxf
SW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0
MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3Qx
ICE9IF9fbGFzdDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgICAgICsrX19maXJz
dDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJ
dGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICB9CiMgNjQwICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9J
bnB1dEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgcGFpcjxfSW5wdXRJdGVy
MSwgX0lucHV0SXRlcjI+CiAgICBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAK
CiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fYmluYXJ5X3ByZWQoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICArK19fZmlyc3Qy
OwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19m
aXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NjggIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUg
Ym9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAg
CgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2Zp
cnN0MikKICAgICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy
LCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9J
bnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0
SXRlcjIgX19maXJzdDIsCiAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQp
CiAgICB7CgogICAgIAogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyAr
K19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19maXJz
dDEsICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVl
OwogICAgfQojIDczMiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGxleGljb2dyYXBoaWNh
bF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIy
IF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7
IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7
ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmly
c3QyKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2Zp
cnN0MSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwogICAgfQojIDc2NyAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxf
Y29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAg
ewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyCiAgICAgICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0Mikgewog
ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEg
JiYgX19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFw
aGljYWxfY29tcGFyZShjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBj
b25zdCBzaXplX3QgX19sZW4xID0gX19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90
IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1l
bWNtcChfX2ZpcnN0MSwgX19maXJzdDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJu
IF9fcmVzdWx0ICE9IDAgPyBfX3Jlc3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBp
bmxpbmUgYm9vbAogIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3Qx
LCBjb25zdCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNv
Z3JhcGhpY2FsX2NvbXBhcmUoKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBf
X2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVk
IGNoYXIqKSBfX2xhc3QyKTsKCgoKCgoKICB9Cgp9CiMgNTUgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMiAzCiMgMSAiL2J1aWxkcy9n
Y2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2Mu
aCIgMSAzCiMgODQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jYXNzZXJ0IiAxIDMKIyA0NyAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY2Fzc2VydCIgMwoKIyAxICIv
dXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMK
ZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpf
X2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19h
c3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vycm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2
b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxl
LCBpbnQgX19saW5lKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCgp9CiMgNDkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2Nhc3NlcnQiIDIgMwojIDg1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDEgMwojIDM0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz
NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0
cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19i
YWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90
eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy
b3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRp
bWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3Io
Y29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3Qg
Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9
CiMgODYgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Ro
cmVhZHMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgc3RydWN0IF9SZWZjb3VudF9CYXNlCiAg
ewoKICAgIHR5cGVkZWYgc2l6ZV90IF9SQ190OwoKCiAgICB2b2xhdGlsZSBfUkNfdCBfTV9yZWZf
Y291bnQ7CgoKICAgIF9fZ3RocmVhZF9tdXRleF90IF9NX3JlZl9jb3VudF9sb2NrOwoKICAgIF9S
ZWZjb3VudF9CYXNlKF9SQ190IF9fbikgOiBfTV9yZWZfY291bnQoX19uKQogICAgewoKICAgICAg
X19ndGhyZWFkX211dGV4X3QgX190bXAgPSAwOwogICAgICBfTV9yZWZfY291bnRfbG9jayA9IF9f
dG1wOwoKCgoKCiAgICB9CgogICAgdm9pZAogICAgX01faW5jcigpCiAgICB7CiAgICAgIF9fZ3Ro
cmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgICsrX01fcmVmX2NvdW50
OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICB9
CgogICAgX1JDX3QKICAgIF9NX2RlY3IoKQogICAgewogICAgICBfX2d0aHJlYWRfbXV0ZXhfbG9j
aygmX01fcmVmX2NvdW50X2xvY2spOwogICAgICB2b2xhdGlsZSBfUkNfdCBfX3RtcCA9IC0tX01f
cmVmX2NvdW50OwogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfTV9yZWZfY291bnRfbG9j
ayk7CiAgICAgIHJldHVybiBfX3RtcDsKICAgIH0KICB9OwojIDEwOSAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAz
CiAgdGVtcGxhdGU8aW50IF9fZHVtbXk+CiAgICBzdHJ1Y3QgX1N3YXBfbG9ja19zdHJ1Y3QKICAg
IHsgc3RhdGljIF9fZ3RocmVhZF9tdXRleF90IF9TX3N3YXBfbG9jazsgfTsKCiAgdGVtcGxhdGU8
aW50IF9fZHVtbXk+CiAgICBfX2d0aHJlYWRfbXV0ZXhfdAogICAgX1N3YXBfbG9ja19zdHJ1Y3Q8
X19kdW1teT46Ol9TX3N3YXBfbG9jayA9IDA7CgoKCiAgaW5saW5lIHVuc2lnbmVkIGxvbmcKICBf
QXRvbWljX3N3YXAodW5zaWduZWQgbG9uZyAqIF9fcCwgdW5zaWduZWQgbG9uZyBfX3EpCiAgewog
ICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+OjpfU19zd2FwX2xv
Y2spOwogICAgdW5zaWduZWQgbG9uZyBfX3Jlc3VsdCA9ICpfX3A7CiAgICAqX19wID0gX19xOwog
ICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX1N3YXBfbG9ja19zdHJ1Y3Q8MD46Ol9TX3N3YXBf
bG9jayk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQojIDE1MSAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAg
c3RydWN0IF9TVExfbXV0ZXhfbG9jawogIHsKCgoKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01f
bG9jazsKCiAgICB2b2lkCiAgICBfTV9pbml0aWFsaXplKCkKICAgIHsKIyAxODQgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVh
ZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVfbG9jaygpCiAgICB7CgoKCiAg
ICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAgIH0KCiAgICB2b2lkCiAgICBf
TV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZf
TV9sb2NrKTsKICAgIH0KICB9OwojIDIyMCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgc3RydWN0IF9TVExf
YXV0b19sb2NrCiAgewogICAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICAgIF9TVExfYXV0
b19sb2NrKF9TVExfbXV0ZXhfbG9jayYgX19sb2NrKSA6IF9NX2xvY2soX19sb2NrKQogICAgeyBf
TV9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CgogICAgfl9TVExfYXV0b19sb2NrKCkgeyBfTV9s
b2NrLl9NX3JlbGVhc2VfbG9jaygpOyB9CgogIHByaXZhdGU6CiAgICB2b2lkIG9wZXJhdG9yPShj
b25zdCBfU1RMX2F1dG9fbG9jayYpOwogICAgX1NUTF9hdXRvX2xvY2soY29uc3QgX1NUTF9hdXRv
X2xvY2smKTsKICB9OwoKfQojIDg3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoj
IDk4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGljOgogICAg
c3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4gOjpvcGVy
YXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZvaWQqIF9f
cCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAxMjEgIi9i
dWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs
X2FsbG9jLmgiIDMKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIGNsYXNzIF9fbWFsbG9jX2Fs
bG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgdm9pZCogX1Nfb29t
X21hbGxvYyhzaXplX3QpOwogICAgICBzdGF0aWMgdm9pZCogX1Nfb29tX3JlYWxsb2Modm9pZCos
IHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy
KSgpOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVf
dCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAg
ICAgIGlmICgwID09IF9fcmVzdWx0KSBfX3Jlc3VsdCA9IF9TX29vbV9tYWxsb2MoX19uKTsKICAg
ICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgKQogICAgICB7IGZyZWUoX19wKTsgfQoKICAgICAg
c3RhdGljIHZvaWQqCiAgICAgIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgLCBzaXplX3Qg
X19uZXdfc3opCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3Jlc3VsdCA9IHJlYWxsb2MoX19wLCBf
X25ld19zeik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX3Jl
YWxsb2MoX19wLCBfX25ld19zeik7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9Cgog
ICAgICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSko
KQogICAgICB7CiAgICAgICAgdm9pZCAoKiBfX29sZCkoKSA9IF9fbWFsbG9jX2FsbG9jX29vbV9o
YW5kbGVyOwogICAgICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgICAg
IHJldHVybihfX29sZCk7CiAgICAgIH0KICAgIH07CgoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4K
ICAgIHZvaWQgKCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6X19tYWxsb2NfYWxs
b2Nfb29tX2hhbmRsZXIpKCkgPSAwOwoKICB0ZW1wbGF0ZSA8aW50IF9faW5zdD4KICAgIHZvaWQq
CiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21fbWFsbG9jKHNpemVf
dCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAg
dm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQogICAgICAgIHsKICAgICAgICAgIF9fbXlf
bWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICAgIGlm
ICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAgICAgICAgIHN0ZDo6X190aHJvd19iYWRf
YWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2NfaGFuZGxlcikoKTsKICAgICAgICAgIF9f
cmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAg
IHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8aW50IF9faW5z
dD4KICAgIHZvaWQqCiAgICBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfU19vb21f
cmVhbGxvYyh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQog
ICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19v
b21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAg
ICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAg
ICAgICBpZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAg
fQogICAgfQoKCgoKCgogIHR5cGVkZWYgX19uZXdfYWxsb2MgX19tZW1faW50ZXJmYWNlOwojIDIx
OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0
cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgogIGNs
YXNzIF9fc2ltcGxlX2FsbG9jCiAgewogIHB1YmxpYzoKICAgIHN0YXRpYyBfVHAqIGFsbG9jYXRl
KHNpemVfdCBfX24pCiAgICB7IHJldHVybiAwID09IF9fbiA/IDAgOiAoX1RwKikgX0FsbG9jOjph
bGxvY2F0ZShfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUo
KQogICAgeyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQoK
ICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3AsIHNpemVfdCBfX24pCiAgICB7IGlm
ICgwICE9IF9fbikgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsg
fQoKICAgIHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICB7IF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3AsIHNpemVvZiAoX1RwKSk7IH0KICB9OwojIDI1MSAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwog
IHRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19kZWJ1Z19hbGxvYwogIHsKICBwcml2
YXRlOgogICAgZW51bSB7X1NfZXh0cmEgPSA4fTsKCgogIHB1YmxpYzoKCiAgICBzdGF0aWMgdm9p
ZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQgPSAoY2hh
ciopX0FsbG9jOjphbGxvY2F0ZShfX24gKyAoaW50KSBfU19leHRyYSk7CiAgICAgICooc2l6ZV90
KilfX3Jlc3VsdCA9IF9fbjsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7
CiAgICB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24p
CiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJh
OwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/
IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxs
b2MuaCIsIDI3MCwgX19QUkVUVFlfRlVOQ1RJT05fXyksIDApKSk7CiAgICAgIF9BbGxvYzo6ZGVh
bGxvY2F0ZShfX3JlYWxfcCwgX19uICsgKGludCkgX1NfZXh0cmEpOwogICAgfQoKICAgIHN0YXRp
YyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19u
ZXdfc3opCiAgICB7CiAgICAgIGNoYXIqIF9fcmVhbF9wID0gKGNoYXIqKV9fcCAtIChpbnQpIF9T
X2V4dHJhOwogICAgICAoc3RhdGljX2Nhc3Q8dm9pZD4gKCgqKHNpemVfdCopX19yZWFsX3AgPT0g
X19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9f
b2xkX3N6IiwgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyNzcsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwog
ICAgICBjaGFyKiBfX3Jlc3VsdCA9IChjaGFyKikKICAgICAgICBfQWxsb2M6OnJlYWxsb2NhdGUo
X19yZWFsX3AsIF9fb2xkX3N6ICsgKGludCkgX1NfZXh0cmEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihzaXpl
X3QqKV9fcmVzdWx0ID0gX19uZXdfc3o7CiAgICAgIHJldHVybiBfX3Jlc3VsdCArIChpbnQpIF9T
X2V4dHJhOwogICAgfQogIH07CiMgMzI0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlPGJvb2wgX190
aHJlYWRzLCBpbnQgX19pbnN0PgogIGNsYXNzIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZQogIHsK
ICBwcml2YXRlOgogICAgZW51bSB7X0FMSUdOID0gOH07CiAgICBlbnVtIHtfTUFYX0JZVEVTID0g
MTI4fTsKICAgIGVudW0ge19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAg
dW5pb24gX09iagogICAgewogICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAg
ICAgY2hhciBfTV9jbGllbnRfZGF0YVsxXTsKICAgIH07CgogICAgc3RhdGljIF9PYmoqIHZvbGF0
aWxlIF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgIHN0YXRpYyBjaGFyKiBfU19zdGFy
dF9mcmVlOwogICAgc3RhdGljIGNoYXIqIF9TX2VuZF9mcmVlOwogICAgc3RhdGljIHNpemVfdCBf
U19oZWFwX3NpemU7CgogICAgc3RhdGljIF9TVExfbXV0ZXhfbG9jayBfU19ub2RlX2FsbG9jYXRv
cl9sb2NrOwoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX3JvdW5kX3VwKHNpemVfdCBfX2J5dGVz
KQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KSBfQUxJR04tMSkgJiB+KChzaXpl
X3QpIF9BTElHTiAtIDEpKTsgfQoKICAgIHN0YXRpYyBzaXplX3QKICAgIF9TX2ZyZWVsaXN0X2lu
ZGV4KHNpemVfdCBfX2J5dGVzKQogICAgeyByZXR1cm4gKCgoX19ieXRlcykgKyAoc2l6ZV90KV9B
TElHTi0xKS8oc2l6ZV90KV9BTElHTiAtIDEpOyB9CgoKCiAgICBzdGF0aWMgdm9pZCoKICAgIF9T
X3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgIHN0YXRpYyBjaGFyKgogICAgX1NfY2h1bmtfYWxs
b2Moc2l6ZV90IF9fc2l6ZSwgaW50JiBfX25vYmpzKTsKCgoKICAgIGNsYXNzIF9Mb2NrCiAgICB7
CiAgICBwdWJsaWM6CiAgICAgIF9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9j
YXRvcl9sb2NrLl9NX2FjcXVpcmVfbG9jaygpOyB9CiAgICAgIH5fTG9jaygpIHsgaWYgKF9fdGhy
ZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9yZWxlYXNlX2xvY2soKTsgfQogICAgfSBf
X2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAgZnJpZW5kIGNsYXNzIF9Mb2NrOwoKICBw
dWJsaWM6CgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewog
ICAgICB2b2lkKiBfX3JldCA9IDA7CgogICAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRF
UykKICAgICAgICBfX3JldCA9IF9fbWVtX2ludGVyZmFjZTo6YWxsb2NhdGUoX19uKTsKICAgICAg
ZWxzZQogICAgICAgIHsKICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9
IF9TX2ZyZWVfbGlzdAogICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCiAg
ICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfT2JqKiBfX3Jlc3RyaWN0
X18gX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICBpZiAoX19yZXN1bHQgPT0g
MCkKICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRfdXAoX19uKSk7CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBf
X3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICBfX3JldCA9IF9fcmVz
dWx0OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9OwoK
CiAgICBzdGF0aWMgdm9pZAogICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCBfX24pCiAg
ICB7CiAgICAgIGlmIChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKQogICAgICAgIF9fbWVtX2lu
dGVyZmFjZTo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAg
ICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgICAgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwogICAgICAgICAgX09iaiogX19xID0gKF9P
YmoqKV9fcDsKCgoKICAgICAgICAgIF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKICAgICAgICAgIF9f
cSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICpfX215
X2ZyZWVfbGlzdCA9IF9fcTsKICAgICAgICB9CiAgICB9CgogICAgc3RhdGljIHZvaWQqCiAgICBy
ZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBzaXplX3QgX19uZXdfc3opOwog
IH07CgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh
ZHMsIF9faW5zdD4mLAogICAgICAgICAgICAgICBjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh
dGU8X190aHJlYWRzLCBfX2luc3Q+JikKICAgIHsgcmV0dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8
Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3Ih
PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+JiwKICAg
ICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiYpCiAgICB7IHJldHVybiBmYWxzZTsgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVh
ZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9f
dGhyZWFkcywgX19pbnN0Pjo6X1NfY2h1bmtfYWxsb2Moc2l6ZV90IF9fc2l6ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVfdCBfX3Rv
dGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNfbGVmdCA9
IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xlZnQgPj0g
X190b3RhbF9ieXRlcykKICAgICAgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsK
ICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9f
cmVzdWx0KTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX2J5dGVzX2xlZnQgPj0gX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIF9fbm9ianMgPSAoaW50KShfX2J5dGVzX2xlZnQvX19zaXplKTsK
ICAgICAgICAgIF9fdG90YWxfYnl0ZXMgPSBfX3NpemUgKiBfX25vYmpzOwogICAgICAgICAgX19y
ZXN1bHQgPSBfU19zdGFydF9mcmVlOwogICAgICAgICAgX1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFs
X2J5dGVzOwogICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQgPQogICAgICAgICAgICAy
ICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAg
ICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAgICAgICBfU19mcmVlX2xp
c3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAgICAgICAgICAgICAoKF9P
YmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gKl9fbXlfZnJlZV9saXN0
OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwog
ICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNoYXIqKSBfX21lbV9pbnRl
cmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0KTsKICAgICAgICAgIGlmICgwID09IF9TX3N0
YXJ0X2ZyZWUpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAg
ICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICBfT2Jq
KiBfX3A7CgoKCiAgICAgICAgICAgICAgX19pID0gX19zaXplOwogICAgICAgICAgICAgIGZvciAo
OyBfX2kgPD0gKHNpemVfdCkgX01BWF9CWVRFUzsgX19pICs9IChzaXplX3QpIF9BTElHTikKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVl
X2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgICBfX3AgPSAq
X19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgICAgIGlmICgwICE9IF9fcCkKICAgICAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Ag
LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgICAgICAgICBfU19zdGFydF9mcmVl
ID0gKGNoYXIqKV9fcDsKICAgICAgICAgICAgICAgICAgICAgIF9TX2VuZF9mcmVlID0gX1Nfc3Rh
cnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxv
YyhfX3NpemUsIF9fbm9ianMpKTsKCgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgICAgX1Nfc3Rh
cnRfZnJlZSA9IChjaGFyKilfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fYnl0ZXNfdG9fZ2V0
KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRlc190b19n
ZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dl
dDsKICAgICAgICAgIHJldHVybihfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMpKTsKICAg
ICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+
OjpfU19yZWZpbGwoc2l6ZV90IF9fbikKICAgIHsKICAgICAgaW50IF9fbm9ianMgPSAyMDsKICAg
ICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9fbiwgX19ub2Jqcyk7CiAgICAgIF9P
YmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdDsKICAgICAgX09iaiogX19yZXN1bHQ7CiAgICAg
IF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICAgIF9PYmoqIF9fbmV4dF9vYmo7CiAgICAgIGludCBf
X2k7CgogICAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAgICAgIF9fbXlf
ZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKCgogICAg
ICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVlX2xpc3QgPSBfX25l
eHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChfX2kgPSAxOyA7IF9f
aSsrKSB7CiAgICAgICAgX19jdXJyZW50X29iaiA9IF9fbmV4dF9vYmo7CiAgICAgICAgX19uZXh0
X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmogKyBfX24pOwogICAgICAgIGlmIChfX25v
YmpzIC0gMSA9PSBfX2kpIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0
X2xpbmsgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9f
Y3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAgIH0K
ICAgICAgfQogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoKCiAgdGVtcGxhdGU8Ym9vbCB0
aHJlYWRzLCBpbnQgaW5zdD4KICAgIHZvaWQqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8
dGhyZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29sZF9zeiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl
X3QgX19uZXdfc3opCiAgICB7CiAgICAgIHZvaWQqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX19j
b3B5X3N6OwoKICAgICAgaWYgKF9fb2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25l
d19zeiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3As
IF9fbmV3X3N6KSk7CiAgICAgIH0KICAgICAgaWYgKF9TX3JvdW5kX3VwKF9fb2xkX3N6KSA9PSBf
U19yb3VuZF91cChfX25ld19zeikpIHJldHVybihfX3ApOwogICAgICBfX3Jlc3VsdCA9IGFsbG9j
YXRlKF9fbmV3X3N6KTsKICAgICAgX19jb3B5X3N6ID0gX19uZXdfc3ogPiBfX29sZF9zej8gX19v
bGRfc3ogOiBfX25ld19zejsKICAgICAgbWVtY3B5KF9fcmVzdWx0LCBfX3AsIF9fY29weV9zeik7
CiAgICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7CiAgICAgIHJldHVybihfX3Jlc3VsdCk7
CiAgICB9CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIF9TVExfbXV0
ZXhfbG9jawogIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9T
X25vZGVfYWxsb2NhdG9yX2xvY2sKICA9IHsgMCB9OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFk
cywgaW50IF9faW5zdD4KICBjaGFyKiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19zdGFydF9mcmVlID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMs
IGludCBfX2luc3Q+CiAgY2hhciogX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywg
X19pbnN0Pjo6X1NfZW5kX2ZyZWUgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50
IF9faW5zdD4KICBzaXplX3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0Pjo6X1NfaGVhcF9zaXplID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBf
X2luc3Q+CiAgdHlwZW5hbWUgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0Pjo6X09iaiogdm9sYXRpbGUKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRz
LCBfX2luc3Q+OjpfU19mcmVlX2xpc3RbX05GUkVFTElTVFNdOwoKICB0eXBlZGVmIF9fZGVmYXVs
dF9hbGxvY190ZW1wbGF0ZTx0cnVlLCAwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2Fs
bG9jX3RlbXBsYXRlPGZhbHNlLCAwPiBfX3NpbmdsZV9jbGllbnRfYWxsb2M7CiMgNjEzICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h
bGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGFsbG9jYXRvcgp7CiAgdHlwZWRl
ZiBfX2FsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0
eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7
CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVy
ZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1Rw
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9jYXRvcigpIHRocm93
KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7fQogIHRlbXBsYXRl
IDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3coKSB7
fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2Ug
X194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0
X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBfVHAqIGFsbG9jYXRl
KHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJuIF9fbiAhPSAwID8g
c3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAg
ICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9f
cCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6
ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsg
cmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2lu
dGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9p
ZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZTw+CmNs
YXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7
CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCogcG9p
bnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2b2lk
IHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsKICAg
IHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxf
VDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBhbGxv
Y2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiBmYWxzZTsKfQoj
IDY5NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnN0
cnVjdCBfX2FsbG9jYXRvcgp7CiAgX0FsbG9jIF9fdW5kZXJseWluZ19hbGxvYzsKCiAgdHlwZWRl
ZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsK
ICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCogY29uc3RfcG9pbnRl
cjsKICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgX1RwJiBjb25zdF9y
ZWZlcmVuY2U7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cDE+IHN0cnVjdCByZWJpbmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+
IG90aGVyOwogIH07CgogIF9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQogIF9fYWxsb2NhdG9yKGNv
bnN0IF9fYWxsb2NhdG9yJiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9jKF9f
YS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+CiAgX19hbGxv
Y2F0b3IoY29uc3QgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiYgX19hKSB0aHJvdygpCiAgICA6
IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQogIH5fX2FsbG9j
YXRvcigpIHRocm93KCkge30KCiAgcG9pbnRlciBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0
IHsgcmV0dXJuICZfX3g7IH0KICBjb25zdF9wb2ludGVyIGFkZHJlc3MoY29uc3RfcmVmZXJlbmNl
IF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQoKCiAgX1RwKiBhbGxvY2F0ZShzaXplX3R5cGUg
X19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBfX24gIT0gMAogICAgICAgID8gc3Rh
dGljX2Nhc3Q8X1RwKj4oX191bmRlcmx5aW5nX2FsbG9jLmFsbG9jYXRlKF9fbiAqIHNpemVvZihf
VHApKSkKICAgICAgICA6IDA7CiAgfQoKCiAgdm9pZCBkZWFsbG9jYXRlKHBvaW50ZXIgX19wLCBz
aXplX3R5cGUgX19uKQogICAgeyBfX3VuZGVybHlpbmdfYWxsb2MuZGVhbGxvY2F0ZShfX3AsIF9f
biAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp
CiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25zdHJ1
Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg
fQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9BbGxvYz4KY2xhc3MgX19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPiB7CiAgdHlw
ZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlw
ZTsKICB0eXBlZGVmIHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9w
b2ludGVyOwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Rw
MT4gc3RydWN0IHJlYmluZCB7CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4g
b3RoZXI7CiAgfTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2Ey
KQp7CiAgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5nX2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5n
X2FsbG9jOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s
IG9wZXJhdG9yIT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewog
IHJldHVybiBfX2ExLl9fdW5kZXJseWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxv
YzsKfQoKCgoKCgoKdGVtcGxhdGUgPGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK
fQoKdGVtcGxhdGUgPGludCBfX2luc3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19t
YWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVn
X2FsbG9jPF9BbGxvYz4mKSB7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwK
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4mKSB7CiAg
cmV0dXJuIGZhbHNlOwp9CiMgODQwICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3Qg
Ym9vbCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0
b3I6OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX1RwMT4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxvY2F0b3I8X1RwMT4g
Pgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVm
IF9fc2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxv
Y2F0b3I8X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGlu
dCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxh
dGU8X19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVl
OwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFp
dHM8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4Kewog
IHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBfX3Np
bXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5z
dD4gPgogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4gPgogICAgICAgICAgYWxs
b2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1
Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+CnsKICBzdGF0aWMg
Y29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxs
b2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsKICB0eXBlZGVmIF9f
YWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7Cn07
CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgIF9fYWxsb2NhdG9yPF9UcDEs
IF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiA+CnsKICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBf
X21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBf
X2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0
b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhy
LCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAg
ICAgICBfX2FsbG9jYXRvcjxfVHAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNv
bnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9j
PF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICAgICAg
X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190
ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDEsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxv
Y190cmFpdHM8X1RwLCBfX2FsbG9jYXRvcjxfVHAxLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiA+
CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogIHR5cGVkZWYg
X19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlYnVnX2FsbG9jPF9BbGxvYz4gPiBfQWxsb2NfdHlwZTsK
ICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2Nh
dG9yX3R5cGU7Cn07CgoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBhbGxvY2F0b3I8d2NoYXJfdD47Cn0KIyA1NiAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAy
IDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KICAgIGlu
bGluZSB2b2lkCiAgICBfQ29uc3RydWN0KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpCiAg
ICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMShfX3ZhbHVlKTsgfQoKCgoKCgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgogICAgaW5saW5lIHZvaWQKICAgIF9Db25zdHJ1Y3QoX1Qx
KiBfX3ApCiAgICB7IG5ldyAoc3RhdGljX2Nhc3Q8dm9pZCo+KF9fcCkpIF9UMSgpOyB9CiMgOTgg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2ZpcnN0KTsgfQojIDExMiAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAg
IGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJk
SXRlcmF0b3IsIF9fdHJ1ZV90eXBlKQogICAgeyB9CgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9U
cD4KICAgIGlubGluZSB2b2lkCiAgICBfRGVzdHJveShfVHAqIF9fcG9pbnRlcikKICAgIHsgX19w
b2ludGVyLT5+X1RwKCk7IH0KIyAxMzQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0
YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX0Rlc3Ryb3koX0Zvcndh
cmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyYXRvcj46OnZhbHVl
X3R5cGUKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZV90eXBlPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv
cgogICAgICAgICAgICAgICAgICAgICAgIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwoKICAgICAg
X19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9IYXNfdHJpdmlhbF9kZXN0cnVjdG9yKCkp
OwogICAgfQp9CiMgNTcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL21lbW9yeSIgMiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjYg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBpbmxpbmUgX0Zvcndh
cmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBf
SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAg
ICB7IHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJk
SXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVy
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19yZXN1bHQ7CiAgICAgIHRyeSB7CiAgICAg
ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICAg
ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCAqX19maXJzdCk7CiAgICAgICAgcmV0dXJuIF9fY3VyOwog
ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl
c3VsdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDEwNiAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
dW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXpl
ZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRl
ciBfX3Jlc3VsdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICBy
ZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQs
IF9Jc19QT0QoKSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShj
b25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQog
IHsKICAgIG1lbW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAg
cmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFy
X3QqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdj
aGFyX3QqIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAg
ewogICAgbWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFz
dCAtIF9fZmlyc3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsK
ICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgdm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3Qs
IF9feCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+
CiAgICB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3Vy
ID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsg
KytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAg
ICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIp
OwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXpl
ZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs
dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46
OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAgICByZXR1cm4gZmlsbF9uKF9fZmlyc3Qs
IF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlh
bGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fZmFsc2VfdHlwZSkKICAg
IHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICAgICAgdHJ5IHsKICAgICAg
ICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICAgICAgX0NvbnN0cnVjdCgm
Kl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCgu
Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAg
ICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5
cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1
ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk
X2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF91bmluaXRpYWxpemVkLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlw
ZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9y
d2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpOwogICAgICB0cnkgewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dDIsIF9fbGFzdDIsIF9fbWlkKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewog
ICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAg
ICAgIH0KICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJ
dGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ
dGVyIF9fbGFzdCkKICAgIHsKICAgICAgdW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21p
ZCwgX194KTsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19taWQpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7
CiAgICAgICAgICBfRGVzdHJveShfX3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAg
ICAgICAgfQogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5p
dGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBf
Rm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVk
X2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1
bmluaXRpYWxpemVkX2ZpbGwoX19taWQyLCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNh
dGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsK
ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCn0KIyA1OSAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvbWVtb3J5IiAyIDMKIyAxICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9y
YXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDMKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFz
cyBfVHA+CiAgY2xhc3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9y
PG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBw
cm90ZWN0ZWQ6CiAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX01faXRlcjsKCiAgICBwdWJsaWM6CiAg
ICAgIGV4cGxpY2l0CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yKF9Gb3J3YXJkSXRlcmF0b3Ig
X194KSA6IF9NX2l0ZXIoX194KSB7fQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAg
IG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRv
ciYKICAgICAgb3BlcmF0b3I9KGNvbnN0IF9UcCYgX19lbGVtZW50KQogICAgICB7CiAgICAgICAg
X0NvbnN0cnVjdCgmKl9NX2l0ZXIsIF9fZWxlbWVudCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgogICAgICByYXdfc3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+
JgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgICsrX01faXRlcjsKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJk
SXRlcmF0b3IsIF9UcD4KICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByYXdf
c3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+IF9fdG1wID0gKnRoaXM7CiAg
ICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogICAgfTsKfQoj
IDYwICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9t
ZW1vcnkiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBfVHA+
CiAgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+CiAgX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZm
X3QgX19sZW4sIF9UcCopCiAgewogICAgaWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcg
LyBzaXplb2YoX1RwKSkpCiAgICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoK
ICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgX1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1h
bGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfX3RtcCAh
PSAwKQogICAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsK
ICAgICAgX19sZW4gLz0gMjsKICAgIH0KCiAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+
KChfVHAqKTAsIDApOwogIH0KIyAxMDIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0
YWxsL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+CiAgaW5s
aW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3Qg
X19sZW4pIHsKICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikg
MCk7CiAgfQojIDExNCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvbWVtb3J5IiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICB2b2lkIHJldHVybl90
ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgICBzdGQ6OmZyZWUoX19wKTsKICB9CgoKdGVt
cGxhdGUgPGNsYXNzIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3JlZgp7CiAgIF9UcDEqIF9NX3B0
cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19wKSB7fQp9OwoKCgoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KICBjbGFzcyBhdXRvX3B0cgp7CnByaXZhdGU6CiAgX1RwKiBfTV9w
dHI7CgpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgZWxlbWVudF90eXBlOwoKICBleHBsaWNpdCBhdXRv
X3B0cihfVHAqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7fQogIGF1dG9fcHRyKGF1
dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkge30KCiAgdGVtcGxh
dGUgPGNsYXNzIF9UcDE+IGF1dG9fcHRyKGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAg
IDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19w
dHImIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsKICAgIHJldHVybiAq
dGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIGF1dG9fcHRyJiBvcGVyYXRvcj0o
YXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKSB7CiAgICByZXNldChfX2EucmVsZWFzZSgpKTsK
ICAgIHJldHVybiAqdGhpczsKICB9CgoKCgoKICB+YXV0b19wdHIoKSB7IGRlbGV0ZSBfTV9wdHI7
IH0KCiAgX1RwJiBvcGVyYXRvciooKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiAqX01fcHRy
OwogIH0KICBfVHAqIG9wZXJhdG9yLT4oKSBjb25zdCB0aHJvdygpIHsKICAgIHJldHVybiBfTV9w
dHI7CiAgfQogIF9UcCogZ2V0KCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1cm4gX01fcHRyOwog
IH0KICBfVHAqIHJlbGVhc2UoKSB0aHJvdygpIHsKICAgIF9UcCogX190bXAgPSBfTV9wdHI7CiAg
ICBfTV9wdHIgPSAwOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICB2b2lkIHJlc2V0KF9UcCogX19w
ID0gMCkgdGhyb3coKSB7CiAgICBpZiAoX19wICE9IF9NX3B0cikgewogICAgICBkZWxldGUgX01f
cHRyOwogICAgICBfTV9wdHIgPSBfX3A7CiAgICB9CiAgfQoKcHVibGljOgogIGF1dG9fcHRyKGF1
dG9fcHRyX3JlZjxfVHA+IF9fcmVmKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX3JlZi5fTV9wdHIp
IHt9CgogIGF1dG9fcHRyJiBvcGVyYXRvcj0oYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93
KCkgewogICAgaWYgKF9fcmVmLl9NX3B0ciAhPSB0aGlzLT5nZXQoKSkgewogICAgICBkZWxldGUg
X01fcHRyOwogICAgICBfTV9wdHIgPSBfX3JlZi5fTV9wdHI7CiAgICB9CiAgICByZXR1cm4gKnRo
aXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9U
cDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHJfcmVmPF9UcD4odGhpcy0+cmVsZWFz
ZSgpKTsgfQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBhdXRvX3B0cjxfVHAxPigp
IHRocm93KCkKICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0K
fTsKCn0KIyA0OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvc3RyaW5nIiAyIDMKCgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMKIyA2NCAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVu
Y3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyAxMDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9mdW5jdGlvbiB7CiAg
dHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBl
Owp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3Vs
dD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJzdF9hcmd1bWVu
dF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBf
UmVzdWx0IHJlc3VsdF90eXBlOwp9OwojIDEyNyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0
L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07CiMgMTcz
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBlcXVhbF90byA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigp
KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID09IF9f
eTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAhPSBfX3k7IH0K
fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgZ3JlYXRlciA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194
LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ID4gX195OyB9Cn07CgoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxf
VHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJv
b2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBj
b25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGxlc3NfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog
IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg
cmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKIyAyMjIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUg
PGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U
cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggJiYgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz
dHJ1Y3QgbG9naWNhbF9ub3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLGJvb2w+CnsKICBi
b29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuICFfX3g7IH0KfTsK
IyAyNzEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNz
IHVuYXJ5X25lZ2F0ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNh
dGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJl
ZDsKcHVibGljOgogIGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gp
IDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVk
aWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9f
eCk7CiAgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVn
YXRlPF9QcmVkaWNhdGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJu
IHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Q
cmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUg
X01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0
ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFt
ZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNv
bnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUg
PGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIo
Y29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRp
Y2F0ZT4oX19wcmVkKTsKfQojIDM0OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg
X09wZXJhdGlvbj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgog
IF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlw
ZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAg
ICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9f
eSkKICAgICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6
cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29u
ZF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsK
ICB9CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlw
ZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAg
cmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRp
b24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjFzdDxfT3BlcmF0aW9uPgpiaW5kMXN0KGNvbnN0
IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf
T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRl
cjFzdDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMV90eXBlKF9feCkpOwp9CgoKdGVtcGxhdGUgPGNs
YXNzIF9PcGVyYXRpb24+CmNsYXNzIGJpbmRlcjJuZAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVk
OgogIF9PcGVyYXRpb24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50
X3R5cGUgdmFsdWU7CnB1YmxpYzoKICBiaW5kZXIybmQoY29uc3QgX09wZXJhdGlvbiYgX194LAog
ICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6
Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1
ZSk7CiAgfQoKCiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9PcGVy
YXRpb24sIGNsYXNzIF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNv
bnN0IF9PcGVyYXRpb24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBi
aW5kZXIybmQ8X09wZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQojIDQzOCAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4KY2xhc3Mg
cG9pbnRlcl90b191bmFyeV9mdW5jdGlvbiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfQXJnLCBf
UmVzdWx0PiB7CnByb3RlY3RlZDoKICBfUmVzdWx0ICgqX01fcHRyKShfQXJnKTsKcHVibGljOgog
IHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24oKSB7fQogIGV4cGxpY2l0IHBvaW50ZXJfdG9fdW5h
cnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZykpIDogX01fcHRyKF9feCkge30KICBfUmVz
dWx0IG9wZXJhdG9yKCkoX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3B0cihfX3gpOyB9Cn07
CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3Rv
X3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0Fy
ZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJnLCBfUmVzdWx0Pihf
X3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3Vs
dD4KY2xhc3MgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24gOgogIHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgICBfUmVzdWx0ICgqX01f
cHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlv
bigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbihfUmVzdWx0ICgq
X194KShfQXJnMSwgX0FyZzIpKQogICAgICA6IF9NX3B0cihfX3gpIHt9CiAgICBfUmVzdWx0IG9w
ZXJhdG9yKCkoX0FyZzEgX194LCBfQXJnMiBfX3kpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9NX3B0
cihfX3gsIF9feSk7CiAgICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJn
MiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uPF9Bcmcx
LF9BcmcyLF9SZXN1bHQ+CnB0cl9mdW4oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkgewog
IHJldHVybiBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0Pihf
X3gpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9JZGVudGl0eSA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAsX1RwPiB7CiAgX1RwJiBvcGVyYXRvcigpKF9UcCYgX194KSBjb25z
dCB7IHJldHVybiBfX3g7IH0KICBjb25zdCBfVHAmIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp
IGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3Qg
X1NlbGVjdDFzdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6
OmZpcnN0X3R5cGU+IHsKICB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShf
UGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KICBjb25zdCB0eXBl
bmFtZSBfUGFpcjo6Zmlyc3RfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25z
dCB7CiAgICByZXR1cm4gX194LmZpcnN0OwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4K
c3RydWN0IF9TZWxlY3QybmQgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1l
IF9QYWlyOjpzZWNvbmRfdHlwZT4KewogIHR5cGVuYW1lIF9QYWlyOjpzZWNvbmRfdHlwZSYgb3Bl
cmF0b3IoKShfUGFpciYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX194LnNlY29uZDsKICB9CiAg
Y29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWly
JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KfTsKIyA1MjggIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1
bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1
bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQg
b3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxj
b25zdCBfVHAqLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0
IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCko
Y29uc3QgX1RwKiBfX3ApIGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6
CiAgX1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U
cCxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9f
cGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3Qg
eyByZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhw
bGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0
dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0
Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1
YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9N
X2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7
IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2Yp
KF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+
CmNsYXNzIGNvbnN0X21lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9U
cCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQg
KF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9y
KCkoY29uc3QgX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1f
ZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDog
X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0
IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJn
PgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1Jl
dCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0
b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2Yp
KF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1
bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2
b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1Rw
KiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2
b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3Qp
IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3Qg
eyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+
IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBt
ZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg
dm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25z
dF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZv
aWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoq
X19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf
TV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNz
IG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
KixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwg
X0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpj
bGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlf
ZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0
X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7
fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f
cC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25z
dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9y
ZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9B
cmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90
PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVu
X3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+Cmlu
bGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgp
IGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVt
cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxf
VHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Jl
Zl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp
bmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1Rw
OjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+
KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu
bGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShf
QXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25z
dCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVu
MV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9Bcmcp
KQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBs
YXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1f
ZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9B
cmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+
KF9fZik7IH0KCgoKfQojIDUzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9zdHJpbmciIDIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDQ0ICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Jh
c2ljX3N0cmluZy5oIiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2F0b21pY2l0eS5oIiAxIDMK
IyAzMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
aWE2NC11bmtub3duLWxpbnV4L2JpdHMvYXRvbWljaXR5LmgiIDMKIyAxICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4x
L2luY2x1ZGUvaWE2NGludHJpbi5oIiAxIDMKCgoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZv
aWQgX19zeW5jX3N5bmNocm9uaXplICh2b2lkKTsKCmV4dGVybiBpbnQgX19zeW5jX3ZhbF9jb21w
YXJlX2FuZF9zd2FwX3NpIChpbnQgKiwgaW50LCBpbnQpOwpleHRlcm4gbG9uZyBfX3N5bmNfdmFs
X2NvbXBhcmVfYW5kX3N3YXBfZGkgKGxvbmcgKiwgbG9uZywgbG9uZyk7CgoKCgoKCgpleHRlcm4g
aW50IF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfc2kgKGludCAqLCBpbnQsIGludCk7CmV4
dGVybiBsb25nIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfZGkgKGxvbmcgKiwgbG9uZywg
bG9uZyk7CgoKCgoKCgpleHRlcm4gdm9pZCBfX3N5bmNfbG9ja19yZWxlYXNlX3NpIChpbnQgKik7
CmV4dGVybiB2b2lkIF9fc3luY19sb2NrX3JlbGVhc2VfZGkgKGxvbmcgKik7CgoKCgoKZXh0ZXJu
IGludCBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXRfc2kgKGludCAqLCBpbnQpOwpleHRlcm4gbG9u
ZyBfX3N5bmNfbG9ja190ZXN0X2FuZF9zZXRfZGkgKGxvbmcgKiwgbG9uZyk7CgoKCgoKZXh0ZXJu
IGludCBfX3N5bmNfZmV0Y2hfYW5kX2FkZF9zaSAoaW50ICosIGludCk7CmV4dGVybiBsb25nIF9f
c3luY19mZXRjaF9hbmRfYWRkX2RpIChsb25nICosIGxvbmcpOwoKCgoKCmV4dGVybiBpbnQgX19z
eW5jX2ZldGNoX2FuZF9zdWJfc2kgKGludCAqLCBpbnQpOwpleHRlcm4gbG9uZyBfX3N5bmNfZmV0
Y2hfYW5kX3N1Yl9kaSAobG9uZyAqLCBsb25nKTsKCgoKCgpleHRlcm4gaW50IF9fc3luY19mZXRj
aF9hbmRfYW5kX3NpIChpbnQgKiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX2ZldGNoX2FuZF9h
bmRfZGkgKGxvbmcgKiwgbG9uZyk7CgoKCgoKZXh0ZXJuIGludCBfX3N5bmNfZmV0Y2hfYW5kX29y
X3NpIChpbnQgKiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX2ZldGNoX2FuZF9vcl9kaSAobG9u
ZyAqLCBsb25nKTsKCgoKCgpleHRlcm4gaW50IF9fc3luY19mZXRjaF9hbmRfeG9yX3NpIChpbnQg
KiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX2ZldGNoX2FuZF94b3JfZGkgKGxvbmcgKiwgbG9u
Zyk7CgoKCgoKZXh0ZXJuIGludCBfX3N5bmNfZmV0Y2hfYW5kX25hbmRfc2kgKGludCAqLCBpbnQp
OwpleHRlcm4gbG9uZyBfX3N5bmNfZmV0Y2hfYW5kX25hbmRfZGkgKGxvbmcgKiwgbG9uZyk7CgoK
CgoKZXh0ZXJuIGludCBfX3N5bmNfYWRkX2FuZF9mZXRjaF9zaSAoaW50ICosIGludCk7CmV4dGVy
biBsb25nIF9fc3luY19hZGRfYW5kX2ZldGNoX2RpIChsb25nICosIGxvbmcpOwoKCgoKCmV4dGVy
biBpbnQgX19zeW5jX3N1Yl9hbmRfZmV0Y2hfc2kgKGludCAqLCBpbnQpOwpleHRlcm4gbG9uZyBf
X3N5bmNfc3ViX2FuZF9mZXRjaF9kaSAobG9uZyAqLCBsb25nKTsKCgoKCgpleHRlcm4gaW50IF9f
c3luY19hbmRfYW5kX2ZldGNoX3NpIChpbnQgKiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX2Fu
ZF9hbmRfZmV0Y2hfZGkgKGxvbmcgKiwgbG9uZyk7CgoKCgoKZXh0ZXJuIGludCBfX3N5bmNfb3Jf
YW5kX2ZldGNoX3NpIChpbnQgKiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX29yX2FuZF9mZXRj
aF9kaSAobG9uZyAqLCBsb25nKTsKCgoKCgpleHRlcm4gaW50IF9fc3luY194b3JfYW5kX2ZldGNo
X3NpIChpbnQgKiwgaW50KTsKZXh0ZXJuIGxvbmcgX19zeW5jX3hvcl9hbmRfZmV0Y2hfZGkgKGxv
bmcgKiwgbG9uZyk7CgoKCgoKZXh0ZXJuIGludCBfX3N5bmNfbmFuZF9hbmRfZmV0Y2hfc2kgKGlu
dCAqLCBpbnQpOwpleHRlcm4gbG9uZyBfX3N5bmNfbmFuZF9hbmRfZmV0Y2hfZGkgKGxvbmcgKiwg
bG9uZyk7CgoKCgoKCn0KIyAzNCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvYXRvbWljaXR5LmgiIDIgMwoK
dHlwZWRlZiBpbnQgX0F0b21pY193b3JkOwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKX19h
dHRyaWJ1dGVfXyAoKF9fdW51c2VkX18pKQpfX2V4Y2hhbmdlX2FuZF9hZGQgKHZvbGF0aWxlIF9B
dG9taWNfd29yZCAqX19tZW0sIGludCBfX3ZhbCkKewogIHJldHVybiAoKHNpemVvZiAoKihfX21l
bSkpID09IHNpemVvZihpbnQpKSA/IChfX3R5cGVvZl9fKCooX19tZW0pKSkgX19zeW5jX2ZldGNo
X2FuZF9hZGRfc2koKGludCAqKShfX21lbSksKGludCkoX192YWwpKSA6IChfX3R5cGVvZl9fKCoo
X19tZW0pKSkgX19zeW5jX2ZldGNoX2FuZF9hZGRfZGkoKGxvbmcgKikoX19tZW0pLChsb25nKShf
X3ZhbCkpKTsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9f
KSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192YWwp
CnsKICAoKHNpemVvZiAoKihfX21lbSkpID09IHNpemVvZihpbnQpKSA/IChfX3R5cGVvZl9fKCoo
X19tZW0pKSkgX19zeW5jX2ZldGNoX2FuZF9hZGRfc2koKGludCAqKShfX21lbSksKGludCkoX192
YWwpKSA6IChfX3R5cGVvZl9fKCooX19tZW0pKSkgX19zeW5jX2ZldGNoX2FuZF9hZGRfZGkoKGxv
bmcgKikoX19tZW0pLChsb25nKShfX3ZhbCkpKTsKfQojIDQ2ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewojIDg4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBi
YXNpY19zdHJpbmcKICAgIHsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp
dHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVf
dHlwZTsKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2M6OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9BbGxvYzo6cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9f
bm9ybWFsX2l0ZXJhdG9yPHBvaW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5
cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3RfcG9pbnRlciwgYmFzaWNfc3RyaW5nPiBjb25z
dF9pdGVyYXRvcjsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9y
PiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7CgogICAgcHJpdmF0ZToKIyAxMjIgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3Ry
aW5nLmgiIDMKICAgICAgc3RydWN0IF9SZXAKICAgICAgewoKICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvYzo6dGVtcGxhdGUgcmViaW5kPGNoYXI+OjpvdGhlciBfUmF3X2J5dGVzX2FsbG9j
OwojIDE0MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUg
X1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAg
ICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7
CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAg
ICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAw
OyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsg
cmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRf
bGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAg
ICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9Cgog
ICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hh
clQmCiAgICAgICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1
cm4gX01fcmVmZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFi
KGNvbnN0IF9BbGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAg
eyByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikgPwogICAg
ICAgICAgICBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0KCgogICAgICAgIHN0
YXRpYyBfUmVwKgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAg
ICAgICB2b2lkCiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0g
MCkKICAgICAgICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAog
ICAgICAgIF9NX2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJU
KgogICAgICAgIF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9t
aWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7
CiAgICAgICAgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9j
Jiwgc2l6ZV90eXBlIF9fcmVzID0gMCk7CiAgICAgIH07CgoKICAgICAgc3RydWN0IF9BbGxvY19o
aWRlciA6IF9BbGxvYwogICAgICB7CiAgICAgICAgX0FsbG9jX2hpZGVyKF9DaGFyVCogX19kYXQs
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIDogX0FsbG9jKF9fYSksIF9NX3AoX19kYXQpIHsg
fQoKICAgICAgICBfQ2hhclQqIF9NX3A7CiAgICAgIH07CgogICAgcHVibGljOgoKCgogICAgICBz
dGF0aWMgY29uc3Qgc2l6ZV90eXBlIG5wb3MgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KC0xKTsK
CiAgICBwcml2YXRlOgoKICAgICAgbXV0YWJsZSBfQWxsb2NfaGlkZXIgX01fZGF0YXBsdXM7CgoK
CiAgICAgIHN0YXRpYyBzaXplX3R5cGUgX1NfZW1wdHlfcmVwX3N0b3JhZ2VbKHNpemVvZihfUmVw
KSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9zaXplb2Yoc2l6ZV90
eXBlKV07CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoKSBjb25zdAogICAgICB7IHJldHVy
biBfTV9kYXRhcGx1cy5fTV9wOyB9CgogICAgICBfQ2hhclQqCiAgICAgIF9NX2RhdGEoX0NoYXJU
KiBfX3ApCiAgICAgIHsgcmV0dXJuIChfTV9kYXRhcGx1cy5fTV9wID0gX19wKTsgfQoKICAgICAg
X1JlcCoKICAgICAgX01fcmVwKCkgY29uc3QKICAgICAgeyByZXR1cm4gJigocmVpbnRlcnByZXRf
Y2FzdDxfUmVwKj4gKF9NX2RhdGEoKSkpWy0xXSk7IH0KCgoKICAgICAgaXRlcmF0b3IKICAgICAg
X01faWJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAg
aXRlcmF0b3IKICAgICAgX01faWVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEo
KSArIHRoaXMtPnNpemUoKSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fbGVhaygpCiAgICAgIHsK
ICAgICAgICBpZiAoIV9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICAgIF9NX2xlYWtf
aGFyZCgpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9jaGVjayhzaXplX3R5cGUg
X19wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAg
ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpfTV9jaGVjayIpOwog
ICAgICAgIHJldHVybiBfTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgoKICAgICAgaXRlcmF0
b3IKICAgICAgX01fZm9sZChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX29mZikgY29uc3QK
ICAgICAgewogICAgICAgIGJvb2wgX190ZXN0b2ZmID0gX19vZmYgPCB0aGlzLT5zaXplKCkgLSBf
X3BvczsKICAgICAgICBzaXplX3R5cGUgX19uZXdvZmYgPSBfX3Rlc3RvZmYgPyBfX29mZiA6IHRo
aXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHJldHVybiAoX01faWJlZ2luKCkgKyBfX3BvcyAr
IF9fbmV3b2ZmKTsKICAgICAgfQoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSXRlcmF0b3I+CiAg
ICAgICAgc3RhdGljIHZvaWQKICAgICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfSXRl
cmF0b3IgX19rMSwgX0l0ZXJhdG9yIF9fazIpCiAgICAgICAgewogICAgICAgICAgZm9yICg7IF9f
azEgIT0gX19rMjsgKytfX2sxLCArK19fcCkKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2ln
bigqX19wLCAqX19rMSk7CiAgICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29w
eV9jaGFycyhfQ2hhclQqIF9fcCwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19rMikKICAgICAg
eyBfU19jb3B5X2NoYXJzKF9fcCwgX19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAg
c3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgY29uc3RfaXRlcmF0
b3IgX19rMSwgY29uc3RfaXRlcmF0b3IgX19rMikKICAgICAgeyBfU19jb3B5X2NoYXJzKF9fcCwg
X19rMS5iYXNlKCksIF9fazIuYmFzZSgpKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1Nf
Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0NoYXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAg
IHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAgIHN0
YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0IF9DaGFyVCog
X19rMSwgY29uc3QgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwg
X19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX211dGF0ZShzaXplX3R5
cGUgX19wb3MsIHNpemVfdHlwZSBfX2xlbjEsIHNpemVfdHlwZSBfX2xlbjIpOwoKICAgICAgdm9p
ZAogICAgICBfTV9sZWFrX2hhcmQoKTsKCiAgICAgIHN0YXRpYyBfUmVwJgogICAgICBfU19lbXB0
eV9yZXAoKQogICAgICB7IHJldHVybiAqcmVpbnRlcnByZXRfY2FzdDxfUmVwKj4oJl9TX2VtcHR5
X3JlcF9zdG9yYWdlKTsgfQoKICAgIHB1YmxpYzoKCgoKCiAgICAgIGlubGluZQogICAgICBiYXNp
Y19zdHJpbmcoKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxs
b2MmIF9fYSk7CgoKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp
OwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IG5wb3MpOwogICAgICBi
YXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAog
ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbiwgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAg
ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLAogICAgICAg
ICAgICAgICAgICAgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAgICAgIGJhc2ljX3N0
cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CiAg
ICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm
IF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog
ICAgICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3Ig
X19lbmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkp
OwoKICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhp
cy0+Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv
cj0oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3Ry
KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBf
X3MpIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsg
fQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xlYWso
KTsKICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29u
c3RfaXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVy
YXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7CiAg
ICAgICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRo
aXMtPnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUo
KSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1
cm4gcmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2Vf
aXRlcmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAg
cmVuZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0K
CiAgICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJs
aWM6CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgp
LT5fTV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3Np
emUoKSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAg
ICByZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJl
c2l6ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9N
X2NhcGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2Fy
ZyA9IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNp
emUoKSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlz
LT5zaXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltd
IChzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107
IH0KCiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAg
ICAgewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsK
ICAgICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNv
bnN0CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9N
X2RhdGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBl
IF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAg
ICAgICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRo
aXMtPmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3Ir
PShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlz
LT5hcHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg
IGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywg
c2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFw
cGVuZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywg
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBh
cHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf
SW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVy
biB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9
CgogICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJl
cGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmlu
ZyYKICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNf
c3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9f
c3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3N0cnNpemUpCiAg
ICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjphc3NpZ24iKTsKICAg
ICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUgLSBfX3BvczsKICAgICAg
ICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9fbiA6IF9fc3Ryc2l6ZSAt
IF9fcG9zOwogICAgICAgIHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIuX01fZGF0YSgpICsgX19w
b3MsIF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWdu
KGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9f
biA+IHRoaXMtPm1heF9zaXplKCkpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFz
aWNfc3RyaW5nOjphc3NpZ24iKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9NX2lzX3NoYXJlZCgp
IHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAgICAgICAgICAgfHwg
bGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSwgX19zKSkKICAg
ICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19z
LCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCiAgICAgICAgICAgIGNvbnN0
IHNpemVfdHlwZSBfX3BvcyA9IF9fcyAtIF9NX2RhdGEoKTsKICAgICAgICAgICAgaWYgKF9fcG9z
ID49IF9fbikKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9kYXRhKCksIF9fcywg
X19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19wb3MpCiAgICAgICAgICAgICAgdHJhaXRzX3R5
cGU6Om1vdmUoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlcCgpLT5fTV9s
ZW5ndGggPSBfX247CiAgICAgICAgICAgIF9NX2RhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWlu
YWw7CiAgICAgICAgICAgIHJldHVybiAqdGhpczsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmFzc2lnbihfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAg
IGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAg
ICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19uLCBf
X2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2liZWdpbigp
LCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgaW5zZXJ0
KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5y
ZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1
dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0lucHV0SXRlcmF0
b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsgdGhpcy0+cmVwbGFjZShf
X3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAgeyBy
ZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zMSwgX19zdHIsIDAsIF9fc3RyLnNpemUoKSk7IH0KCiAg
ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5
cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3Ry
LnNpemUoKTsKICAgICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQogICAgICAgICAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgY29uc3QgYm9v
bCBfX3Rlc3RuID0gX19uIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICAgIGNvbnN0IHNpemVf
dHlwZSBfX25ld3NpemUgPSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3MyOwogICAg
ICAgIHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIs
IF9fbmV3c2l6ZSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNp
emVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsK
ICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIGlm
IChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19z
dHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfX3NpemUgPiB0aGlzLT5tYXhfc2l6ZSgpIC0g
X19uKQogICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6aW5zZXJ0
Iik7CiAgICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9D
aGFyVCo+KCkoX19zLCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJU
Kj4oKShfTV9kYXRhKCkgKyBfX3NpemUsIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFj
ZV9zYWZlKF9NX2liZWdpbigpICsgX19wb3MsIF9NX2liZWdpbigpICsgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAg
ICAgICAgICB7CgoKCiAgICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29mZiA9IF9fcyAtIF9N
X2RhdGEoKTsKICAgICAgICAgICAgX01fbXV0YXRlKF9fcG9zLCAwLCBfX24pOwogICAgICAgICAg
ICBfX3MgPSBfTV9kYXRhKCkgKyBfX29mZjsKICAgICAgICAgICAgX0NoYXJUKiBfX3AgPSBfTV9k
YXRhKCkgKyBfX3BvczsKICAgICAgICAgICAgaWYgKF9fcyArIF9fbiA8PSBfX3ApCiAgICAgICAg
ICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2Ug
aWYgKF9fcyA+PSBfX3ApCiAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX3Mg
KyBfX24sIF9fbik7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcywgX19wIC0gX19zKTsKICAgICAgICAgICAg
ICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCArIChfX3AgLSBfX3MpLCBfX3AgKyBfX24sIF9fbiAt
IChfX3AgLSBfX3MpKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiAqdGhpczsK
ICAgICAgICAgIH0KICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNp
emVfdHlwZSBfX3BvcywgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmlu
c2VydChfX3BvcywgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIF9D
aGFyVCBfX2MpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBf
X24sIF9fYyk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpdGVyYXRvcgog
ICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBfQ2hhclQgX19jID0gX0NoYXJUKCkpCiAgICAgIHsK
ICAgICAgICBzaXplX3R5cGUgX19wb3MgPSBfX3AgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlz
LT5pbnNlcnQoX01fY2hlY2soX19wb3MpLCBzaXplX3R5cGUoMSksIF9fYyk7CiAgICAgICAgX01f
cmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gdGhpcy0+X01faWJlZ2luKCkg
KyBfX3BvczsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBlcmFzZShzaXplX3R5
cGUgX19wb3MgPSAwLCBzaXplX3R5cGUgX19uID0gbnBvcykKICAgICAgewogICAgICAgIHJldHVy
biB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9fcG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgIH0K
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pCiAgICAgIHsK
ICAgICAgICBzaXplX3R5cGUgX19pID0gX19wb3NpdGlvbiAtIF9NX2liZWdpbigpOwogICAgICAg
IHRoaXMtPnJlcGxhY2UoX19wb3NpdGlvbiwgX19wb3NpdGlvbiArIDEsIF9NX2RhdGEoKSwgX01f
ZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgIHJldHVy
biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo
aXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgICB7CiAgICAgICAgc2l6ZV90
eXBlIF9faSA9IF9fZmlyc3QgLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9f
Zmlyc3QsIF9fbGFzdCwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfbGVha2VkKCk7CiAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0K
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMt
PnJlcGxhY2UoX19wb3MsIF9fbiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90
eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90
eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19z
LAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUp
CiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7
CiAgICAgICAgaWYgKF9fc2l6ZSAtIF9fbjEgPiB0aGlzLT5tYXhfc2l6ZSgpIC0gX19uMikKICAg
ICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgICBjb25zdCBib29sIF9fdGVzdG4xID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9f
cG9zOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBf
Q2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFy
VCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxh
Y2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfTV9pYmVnaW4oKSArIF9fcG9zICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CiAg
ICAgICAgZWxzZSByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQo
X19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3Mg
KyBfX24yKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJl
dHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24xLCBfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgo
X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24xLCBzaXplX3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgICAgeyBy
ZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvcyksIF9NX2ZvbGQoX19wb3MsIF9fbjEp
LCBfX24yLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0
b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgICAg
eyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3N0ci5fTV9kYXRhKCksIF9fc3Ry
LnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBf
X2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hh
clQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kx
IC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLCBfX3MsIF9fbik7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBf
Q2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxLCBfX2kyLCBfX3Ms
IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAg
cmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJh
c2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIs
CiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRvciBfX2sy
KQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19rMiwKICAg
ICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46Oml0ZXJh
dG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
cHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgogICAg
ICB0ZW1wbGF0ZTxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYK
ICAgICAgICBfTV9yZXBsYWNlX3NhZmUoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Zv
cndhcmRJdGVyYXRvciBfX2sxLAogICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBf
X2syKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0No
YXJUKgogICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2Vu
ZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5
cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8
X0luSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9UYWc7CiAgICAgICAgICByZXR1cm4gX1NfY29u
c3RydWN0KF9fYmVnLCBfX2VuZCwgX19hLCBfVGFnKCkpOwogICAgICAgIH0KCiAgICAgIHRlbXBs
YXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25z
dHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19h
LAogICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICAgICAgewogICAgICAg
ICAgcmV0dXJuIF9TX2NvbnN0cnVjdChzdGF0aWNfY2FzdDxzaXplX3R5cGU+KF9fYmVnKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX19lbmQp
LCBfX2EpOwogICAgICAgIH0KCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAg
c3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRl
ciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5JdGVyPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAg
ICAgIHJldHVybiBfU19jb25zdHJ1Y3RfYXV4KF9fYmVnLCBfX2VuZCwgX19hLCBfSW50ZWdyYWwo
KSk7CiAgICAgICAgfQoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAgICAgc3Rh
dGljIF9DaGFyVCoKICAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg
X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKTsKCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Z3ZEl0ZXI+CiAgICAgICAgc3Rh
dGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3QoX0Z3ZEl0ZXIgX19iZWcsIF9Gd2RJdGVy
IF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p
dGVyYXRvcl90YWcpOwoKICAgICAgc3RhdGljIF9DaGFyVCoKICAgICAgX1NfY29uc3RydWN0KHNp
emVfdHlwZSBfX3JlcSwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpOwoKICAgIHB1Ymxp
YzoKCiAgICAgIHNpemVfdHlwZQogICAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19u
LCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHZvaWQKICAgICAgc3dhcChiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MpOwoKCiAgICAgIGNvbnN0IF9D
aGFyVCoKICAgICAgY19zdHIoKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdHlwZSBfX24g
PSB0aGlzLT5zaXplKCk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbihfTV9kYXRhKClbX19u
XSwgX1JlcDo6X1NfdGVybWluYWwpOwogICAgICAgIHJldHVybiBfTV9kYXRhKCk7CiAgICAgIH0K
CiAgICAgIGNvbnN0IF9DaGFyVCoKICAgICAgZGF0YSgpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGEo
KTsgfQoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsg
cmV0dXJuIF9NX2RhdGFwbHVzOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBf
Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg
IHNpemVfdHlwZQogICAgICBmaW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19zdHIuZGF0YSgp
LCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAg
ICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
cmZpbmQoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5yZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykg
Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBiYXNpY19z
dHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0
aGlzLT5maW5kX2ZpcnN0X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBz
aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAg
ICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDAp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zLCBfX3BvcywgdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmly
c3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZChfX2MsIF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRf
bGFzdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9z
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfb2YoX19zdHIuZGF0YSgpLCBf
X3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9v
Zihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25z
dDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRf
bGFzdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBz
aXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9
IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fYywgX19wb3MpOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+
ZmluZF9maXJzdF9ub3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoK
ICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19z
LCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24p
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5maW5kX2ZpcnN0X25vdF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykp
OyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywg
c2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9s
YXN0X25vdF9vZihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBu
cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fc3RyLmRh
dGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5k
X2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbikgY29uc3Q7CiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBu
cG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2xhc3Rfbm90X29mKF9fcywgX19w
b3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm
aW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0
OwoKICAgICAgYmFzaWNfc3RyaW5nCiAgICAgIHN1YnN0cihzaXplX3R5cGUgX19wb3MgPSAwLCBz
aXplX3R5cGUgX19uID0gbnBvcykgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX3BvcyA+IHRo
aXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6
OnN1YnN0ciIpOwogICAgICAgIHJldHVybiBiYXNpY19zdHJpbmcoKnRoaXMsIF9fcG9zLCBfX24p
OwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKSBjb25zdAogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo
KTsKICAgICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgICBzaXpl
X3R5cGUgX19sZW4gPSBtaW4oX19zaXplLCBfX29zaXplKTsKCiAgICAgICAgaW50IF9fciA9IHRy
YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSwgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAg
ICAgaWYgKCFfX3IpCiAgICAgICAgICBfX3IgPSBfX3NpemUgLSBfX29zaXplOwogICAgICAgIHJl
dHVybiBfX3I7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3Q7CgogICAg
ICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBz
aXplX3R5cGUgX19uMikgY29uc3Q7CgogICAgICBpbnQKICAgICAgY29tcGFyZShjb25zdCBfQ2hh
clQqIF9fcykgY29uc3Q7CgoKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCiAgICAgIGludAog
ICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFy
VCogX19zLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdDsKICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBi
YXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5
KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9f
cmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0NoYXJUKiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYg
X19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAg
ICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp
dHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f
cmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9f
c3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3Ry
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBf
X3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fc2l6ZV90eXBl
KDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l
IGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo
cykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9D
aGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykg
PT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPT0g
MDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3Qg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVy
biBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg
ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp
CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID4g
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgX0NoYXJUKiBf
X2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDwgMDsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBf
X2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19s
aHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1cm4gX19yaHMuY29t
cGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+
PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg
ICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19y
aHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog
ICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y
aHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcywK
ICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAg
Z2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19k
ZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+Jgog
ICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAg
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKfQojIDU0
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zdHJp
bmciIDIgMwoKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0
L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYWxnb3JpdGhtIiAzCgoKCgojIDEgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg
MSAzCiMgNjQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAuaCIgMSAzCiMgNjMgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2hlYXAu
aCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAg
X19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICBfRGlzdGFuY2UgX19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1
ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAy
OwogICAgICB3aGlsZSAoX19ob2xlSW5kZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9f
cGFyZW50KSA8IF9fdmFsdWUpIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAq
KF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAg
ICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9f
Zmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcHVzaF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAg
ICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2VUeXBlKChfX2xhc3QgLSBfX2ZpcnN0KSAt
IDEpLCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKCooX19s
YXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcCwKICAgICAgICAgICAgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX3B1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0
b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUg
KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJlbnQp
LCBfX3ZhbHVlKSkgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJz
dCArIF9fcGFyZW50KTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fcGFyZW50OwogICAgICAgIF9f
cGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogICAgICB9CiAgICAgICooX19maXJzdCAr
IF9faG9sZUluZGV4KSA9IF9fdmFsdWU7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAg
cHVzaF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg
ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgoKICAgICAgX19wdXNoX2hlYXAoX19maXJz
dCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgw
KSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFt
ZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fYWRqdXN0X2hlYXAoX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAg
ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSkKICAgIHsKICAgICAgX0Rp
c3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9fc2Vjb25k
Q2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRDaGlsZCA8
IF9fbGVuKSB7CiAgICAgICAgaWYgKCooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpIDwgKihfX2Zp
cnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAg
ICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCk7CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25k
Q2hpbGQgPSAyICogKF9fc2Vjb25kQ2hpbGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNv
bmRDaGlsZCA9PSBfX2xlbikgewogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICoo
X19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19z
ZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0KICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xl
SW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBf
X3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19yZXN1
bHQsIF9UcCBfX3ZhbHVlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf
RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX192YWx1ZSk7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB2
b2lkCiAgICBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoK
CiAgICAgCgogICAgIAoKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xh
c3QgLSAxLCBfVmFsdWVUeXBlKCooX19sYXN0IC0gMSkpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2UsCiAgICAgICAg
ICAgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fYWRqdXN0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRl
eCwKICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuLCBfVHAgX192YWx1ZSwgX0NvbXBh
cmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4
OwogICAgICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7CiAg
ICAgIHdoaWxlIChfX3NlY29uZENoaWxkIDwgX19sZW4pIHsKICAgICAgICBpZiAoX19jb21wKCoo
X19maXJzdCArIF9fc2Vjb25kQ2hpbGQpLCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEp
KSkpCiAgICAgICAgICBfX3NlY29uZENoaWxkLS07CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCk7CiAgICAgICAgX19ob2xlSW5kZXgg
PSBfX3NlY29uZENoaWxkOwogICAgICAgIF9fc2Vjb25kQ2hpbGQgPSAyICogKF9fc2Vjb25kQ2hp
bGQgKyAxKTsKICAgICAgfQogICAgICBpZiAoX19zZWNvbmRDaGlsZCA9PSBfX2xlbikgewogICAg
ICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIChfX3NlY29uZENoaWxk
IC0gMSkpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgICAgIH0K
ICAgICAgX19wdXNoX2hlYXAoX19maXJzdCwgX19ob2xlSW5kZXgsIF9fdG9wSW5kZXgsIF9fdmFs
dWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
YXRvciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAg
ICBfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19y
ZXN1bHQsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICBfX2Fk
anVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmly
c3QpLAogICAgICAgICAgICAgICAgICAgIF9fdmFsdWUsIF9fY29tcCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgX19w
b3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVmFsdWVUeXBlKCooX19s
YXN0IC0gMSkpLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y
IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVl
X3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAg
ICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2xhc3QgLSBfX2Zp
cnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gX19sYXN0IC0gX19m
aXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogICAg
ICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQs
IF9fbGVuLCBfVmFsdWVUeXBlKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgICAgIGlmIChf
X3BhcmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgaW5saW5lIHZvaWQKICAgIG1ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
YXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoK
CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogICAgICBfRGlzdGFuY2VU
eXBlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX3BhcmVu
dCA9IChfX2xlbiAtIDIpLzI7CgogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIF9fYWRqdXN0
X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgX1Zh
bHVlVHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpLCBfX2NvbXApOwogICAgICAgIGlmIChfX3Bh
cmVudCA9PSAwKSByZXR1cm47CiAgICAgICAgX19wYXJlbnQtLTsKICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICB2b2lkCiAgICBzb3J0
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QpCiAgICB7CgogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19sYXN0IC0gX19m
aXJzdCA+IDEpCiAgICAgICAgcG9wX2hlYXAoX19maXJzdCwgX19sYXN0LS0pOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJl
PgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCkKICAgIHsKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAg
ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwogICAgfQoKfQojIDY1ICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIgMSAzCiMgNjQgIi9idWlsZHMvZ2NjLTNf
MS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RlbXBidWYuaCIg
MwpuYW1lc3BhY2Ugc3RkCnsKIyA3NCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
Rm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAgY2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoK
IAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVuOwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1Rw
KiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdp
bmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChw
dHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0
ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9i
dWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9N
X2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2
b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZv
aWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewog
ICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVi
bGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJk
aWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0K
CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0
dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBfVGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0
eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAgdHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFu
Y2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlm
IChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJp
dmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikKICAgICAgewogICAgICAgIGZyZWUoX01fYnVm
ZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwogICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAg
dGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95
KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVuKTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9
Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZlcihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYp
IHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQoj
IDY2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvLmgiIDIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKIyA4NCAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgICBfX21lZGlh
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQogICAgewoK
ICAgICAKICAgICAgaWYgKF9fYSA8IF9fYikKICAgICAgICBpZiAoX19iIDwgX19jKQogICAgICAg
ICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgICByZXR1
cm4gX19jOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYg
KF9fYSA8IF9fYykKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2IgPCBfX2Mp
CiAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9
CiMgMTE4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFuKGNvbnN0IF9UcCYgX19h
LCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAgIGlmIChfX2NvbXAoX19i
LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNlIGlmIChfX2NvbXAoX19h
LCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1
cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgIHJldHVybiBf
X2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAgICAgcmV0dXJuIF9fYzsK
ICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUwICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRnVuY3Rpb24+CiAgICBf
RnVuY3Rpb24KICAgIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsIF9GdW5jdGlvbiBfX2YpCiAgICB7CgogICAgIAogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgX19mKCpfX2ZpcnN0KTsKICAgICAgcmV0dXJuIF9f
ZjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZChfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICBpbnB1
dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAh
KCpfX2ZpcnN0ID09IF9fdmFsKSkKICAgICAgICArK19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l
IF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9pZihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJl
ZCwKICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19m
aXJzdCAhPSBfX2xhc3QgJiYgIV9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgKytfX2ZpcnN0Owog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZp
bmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9y
X3RhZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9f
Zmlyc3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9j
b3VudCkgewogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAg
ICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBf
X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFs
KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9Cgog
ICAgICBzd2l0Y2goX19sYXN0IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMjoKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0
OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmICgqX19maXJzdCA9
PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6
CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUHJlZGlj
YXRlPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIGZpbmRfaWYoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJlZGljYXRl
IF9fcHJlZCwKICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVu
Y2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoK
ICAgICAgZm9yICggOyBfX3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0
OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAg
KytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7
CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJu
IF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CgogICAgICBzd2l0Y2goX19sYXN0
IC0gX19maXJzdCkgewogICAgICBjYXNlIDM6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAg
IGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7
CiAgICAgIGNhc2UgMToKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDA6CiAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAgfQojIDI4OSAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1
dEl0ZXIKICAgIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4g
ZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3Qp
KTsKICAgIH0KIyAzMDkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmluZF9p
ZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBfUHJl
ZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9pZihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg
ICB9CiMgMzI5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBf
X25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAg
ICBpZiAoKl9fZmlyc3QgPT0gKl9fbmV4dCkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
ICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0K
IyAzNTggIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmlu
ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAK
CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9
IF9fbGFzdCkgewogICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCAqX19uZXh0KSkK
ICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgICAg
IH0KICAgICAgcmV0dXJuIF9fbGFzdDsKICAgIH0KIyAzODcgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7
CgogICAgIAogICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAg
ICAgICAgKytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDExICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAg
IGNvdW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNh
dGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQ1MCAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmly
c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoK
CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJz
dDIpOwogICAgICArK19fdG1wOwogICAgICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgICAgICBy
ZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCgoKICAgICAgX0Zvcndh
cmRJdGVyMiBfX3AxLCBfX3A7CgogICAgICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgICAg
IF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSkgewogICAgICAgIF9fZmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0
MSwgKl9fZmlyc3QyKTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAg
IHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9
IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAg
cmV0dXJuIF9fbGFzdDE7CgogICAgICAgIHdoaWxlICgqX19jdXJyZW50ID09ICpfX3ApIHsKICAg
ICAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDE7
CiAgICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu
IF9fbGFzdDE7CiAgICAgICAgfQoKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICAgIHJl
dHVybiBfX2ZpcnN0MTsKICAgIH0KIyA1MjIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5h
cnlQcmVkPgogICAgX0ZvcndhcmRJdGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJz
dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly
c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVk
aWNhdGUpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09
IF9fbGFzdDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7
CgoKICAgICAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAg
ICAgIGlmIChfX3RtcCA9PSBfX2xhc3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9f
bGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3
YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAg
ICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEpIHsKICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewog
ICAgICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIp
KQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkK
ICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9f
Y3VycmVudCA9IF9fZmlyc3QxOwogICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSBy
ZXR1cm4gX19sYXN0MTsKCiAgICAgICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpf
X3ApKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJu
IF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAg
ICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
fQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTk2ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBf
VHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf
Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3Qg
X1RwJiBfX3ZhbCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fY291bnQg
PD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgX19maXJz
dCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAgd2hpbGUgKF9fZmlyc3Qg
IT0gX19sYXN0KSB7CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAg
ICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAg
ICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFsKSB7CiAg
ICAgICAgICAgICsrX19pOwogICAgICAgICAgICAtLV9fbjsKICAgICAgICAgIH0KICAgICAgICAg
IGlmIChfX24gPT0gMCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNl
CiAgICAgICAgICAgIF9fZmlyc3QgPSBmaW5kKF9faSwgX19sYXN0LCBfX3ZhbCk7CiAgICAgICAg
fQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2NDMgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5
cGVuYW1lIF9UcCwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZD4KICAgIF9Gb3J3YXJk
SXRlcgogICAgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsLAogICAg
ICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoK
ICAgICAgaWYgKF9fY291bnQgPD0gMCkKICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgZWxz
ZSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAgICBpZiAoX19i
aW5hcnlfcHJlZCgqX19maXJzdCwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICsrX19maXJzdDsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICAgICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICAgICAgKytfX2k7CiAgICAgICAgICB3aGlsZSAoX19p
ICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewog
ICAgICAgICAgICArK19faTsKICAgICAgICAgICAgLS1fX247CiAgICAgICAgICB9CiAgICAgICAg
ICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0KSB7CiAgICAgICAgICAgICAgaWYg
KF9fYmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgX19maXJzdCA9IF9faTsK
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgfQogICAg
fQojIDY5NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2Vz
KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwg
KytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19maXJzdDEsIF9fZmlyc3QyKTsKICAgICAg
cmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0
L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9VbmFyeU9w
ZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0oX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X1VuYXJ5T3BlcmF0aW9uIF9fdW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1bHQpCiAgICAgICAg
Kl9fcmVzdWx0ID0gX191bmFyeV9vcCgqX19maXJzdCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KIyA3NjUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIx
LCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0JpbmFyeU9wZXJhdGlvbj4KICAgIF9PdXRwdXRJdGVyCiAgICB0cmFuc2Zvcm0o
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAg
IF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz
dDIsICsrX19yZXN1bHQpCiAgICAgICAgKl9fcmVzdWx0ID0gX19iaW5hcnlfb3AoKl9fZmlyc3Qx
LCAqX19maXJzdDIpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgNzk2ICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAg
IHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdf
dmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVl
KQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4MjUgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28u
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0
ZSwgdHlwZW5hbWUgX1RwPgogICAgdm9pZAogICAgcmVwbGFjZV9pZihfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3By
ZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgog
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpCiAgICAgICAgICAqX19maXJzdCA9IF9fbmV3X3ZhbHVlOwogICAgfQoj
IDg1NiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h
bWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNl
X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
b2xkX3ZhbHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAg
ICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVz
dWx0KQogICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0ID09IF9fb2xkX3ZhbHVlID8gX19uZXdf
dmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDg4OCAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl
ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgOTE4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNs
dWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICB2b2lkCiAgICBnZW5lcmF0ZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikKICAg
IHsKCiAgICAgCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgICAgICpfX2ZpcnN0ID0gX19nZW4oKTsKICAgIH0KIyA5NDIgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5h
bWUgX0dlbmVyYXRvcj4KICAgIF9PdXRwdXRJdGVyCiAgICBnZW5lcmF0ZV9uKF9PdXRwdXRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dlbikKICAgIHsKCiAgICAgCgoKCiAg
ICAgIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICAgICAqX19maXJzdCA9
IF9fZ2VuKCk7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDk2OSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAz
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5
cGVuYW1lIF9UcD4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAg
ICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgq
X19maXJzdCA9PSBfX3ZhbHVlKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQojIDEwMDMgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX091dHB1dEl0ZXIK
ICAgIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3By
ZWQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCFfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAg
fQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTAzOSAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0
ZXIKICAgIHJlbW92ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAK
CgogICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogICAgICBf
Rm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0
ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weSgr
K19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKICAgIH0KIyAxMDczICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+
CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBf
X3ByZWQpOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f
Zmlyc3QgPT0gX19sYXN0ID8gX19maXJzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
cj4KICAgIF9PdXRwdXRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0
LAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAq
X19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAg
ICAgIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsK
ICAgICAgICB9CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpf
X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgq
X19yZXN1bHQgPT0gKl9fZmlyc3QpKQogICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsK
ICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE0MyAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxp
bmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsK
CiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9PdXRwdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1
ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAx
MTY4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFt
ZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVy
CiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAg
ICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIG91dHB1
dF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAq
X19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg
ICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAgICAgICBf
X3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAg
ICAgfQogICAgICByZXR1cm4gKytfX3Jlc3VsdDsKICAgIH0KIyAxMTk3ICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5
cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGlj
YXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICghX19iaW5hcnlfcHJlZCgqX19yZXN1
bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19y
ZXN1bHQ7CiAgICB9CiMgMTIzMCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsK
CiAgICAgCiAgICAgCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091
dHB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHko
X19maXJzdCwgX19sYXN0LApfX3Jlc3VsdCwgX19iaW5hcnlfcHJlZCwgX0l0ZXJUeXBlKCkpOwog
ICAgfQojIDEyNjEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
cj4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y
d2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCiAgICAgICAgIAoKCiAgICAgICAgICBf
X2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJu
IHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7CiAgICB9CiMgMTI4OCAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBf
X2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJzdCA9IGFkamFj
ZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAgcmV0dXJuIHVu
aXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJlZCk7CiAgICB9
CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZvaWQK
ICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgICBpZiAoX19m
aXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJfc3dhcChfX2Zp
cnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlIChfX2ZpcnN0
IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7CiAg
ICB9CiMgMTM0NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u
YWxJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgICAgICAKCiAgICAg
ICAgICBfX3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmly
c3QpKTsKICAgIH0KIyAxMzcyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAg
IHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0
KSB7CiAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgKl9fcmVzdWx0ID0gKl9fbGFzdDsKICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xpZGVh
blJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVjbGlk
ZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAgICAg
ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9IF9f
bjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0KCgoK
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0
ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRs
ZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg
KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJdGVy
IF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0Kyss
ICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgICAg
IF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7
CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9IF9f
bGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlm
IChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg
ICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9IF9f
bWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19taWRk
bGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9fcmV2
ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAg
ICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9f
bGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl
c3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRv
cl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkgfHwg
KF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg
X0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9t
QWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBfX24g
PSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBfX2Zp
cnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9PSBf
X2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog
ICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwg
X19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKyspIHsK
ICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAgICAg
Zm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAgICAg
ICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihfX3Ag
LSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAgICAg
ICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNlIF9f
aiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9fcCA8
IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAg
ICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9ICog
KF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAgICAg
fQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9
CiMgMTU0OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgog
ICAgaW5saW5lIHZvaWQKICAgIHJvdGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbWlkZGxlLCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2Nh
dGVnb3J5IF9JdGVyVHlwZTsKICAgICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFz
dCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDE1NzAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRl
cgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVyIF9f
cmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0LCBf
X21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE1OTMg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBf
RGlzdGFuY2UKICAgIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAg
cmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjEzICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBy
YW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0
dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg
IT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5k
b21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAgIH0KIyAxNjM1ICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRv
bU51bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAg
aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJf
c3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoK
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNh
dGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQs
CiAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9f
Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9f
Zmlyc3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK
CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19u
ZXh0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBz
d2FwKCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9Cgog
ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIKICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAg
ICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9f
bGFzdCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3By
ZWQoKl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAg
ICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsK
ICAgICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0
OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzE4ICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Q
cmVkaWNhdGU+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAg
ICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1By
ZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBf
RGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAgIGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVy
biBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVy
IF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihf
X2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9f
ZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
biAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwog
ICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICBy
ZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0
ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5
cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9u
X2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2Ug
X19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUp
CiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0Zvcndh
cmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0g
X19idWZmZXI7CiAgICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkK
ICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEg
PSAqX19maXJzdDsKICAgICAgICAgICAgKytfX3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVzdWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICAr
K19fcmVzdWx0MjsKICAgICAgICAgIH0KICAgICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIs
IF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNl
IHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBf
X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAvIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7
CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5j
ZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRsZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19i
ZWdpbjsKICAgICAgfQogICAgfQojIDE4MTEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgog
ICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAg
IAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19m
aXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0
ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYgKF9fYnVm
LnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZl
KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBf
X2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lucGxhY2Vfc3Rh
YmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9z
aXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1
YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkKICAgIHsK
ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bpdm90KQog
ICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlIChfX3Bp
dm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9fZmlyc3Qg
PCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9zd2FwKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRfcGFydGl0
aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAoKl9fZmlyc3Qs
IF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAg
IHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9fbGFzdDsKICAg
ICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2ZpcnN0Owog
ICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJzdDsKICAg
ICAgfQogICAgfQojIDE4OTIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAx
NiB9OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfVHA+CiAgICB2b2lkCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX1RwIF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X25leHQgPSBfX2xhc3Q7CiAgICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19u
ZXh0KSB7CiAgICAgICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0
OwogICAgICAgIC0tX19uZXh0OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9f
bmV4dDsKICAgICAgd2hpbGUgKF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19s
YXN0ID0gKl9fbmV4dDsKICAgICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7
CiAgICAgIH0KICAgICAgKl9fbGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9t
QWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAg
IHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2
YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewog
ICAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAg
Kl9fZmlyc3QgPSBfX3ZhbDsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1
YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IHZvaWQKICAgIF9faW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9y
IChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytf
X2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFs
LCAqX19maXJzdCkpIHsKICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kg
KyAxKTsKICAgICAgICAgICpfX2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UK
ICAgICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsK
ICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVy
PgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21B
Y2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1
ZV90eXBlIF9WYWx1ZVR5cGU7CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
Zmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9p
bnNlcnQoX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9p
ZAogICAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAg
IGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytf
X2kpCiAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9f
aSksIF9fY29tcCk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXI+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9f
bGFzdCAtIF9fZmlyc3QgPiBfTV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0
KF9fZmlyc3QsIF9fZmlyc3QgKyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0K
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICB2b2lkCiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJz
dCA+IF9NX3RocmVzaG9sZCkgewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19m
aXJzdCArIF9NX3RocmVzaG9sZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRp
b25fc29ydChfX2ZpcnN0ICsgX01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2Nv
bXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9T
aXplCiAgICBfX2xnKF9TaXplIF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3Ig
KF9fayA9IDA7IF9fbiAhPSAxOyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfU2l6ZT4KICAgIHZvaWQKICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBf
U2l6ZSBfX2RlcHRoX2xpbWl0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y
X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAg
IHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9f
ZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFz
dCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRo
X2xpbWl0OwogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5n
dWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBf
X2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwg
X19sYXN0LCBfX2RlcHRoX2xpbWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfU2l6ZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29w
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgX1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewog
ICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwog
ICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0
aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFs
dWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xh
c3QgLSAxKSwgX19jb21wKSksCiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29y
dF9sb29wKF9fY3V0LCBfX2xhc3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19s
YXN0ID0gX19jdXQ7CiAgICAgIH0KICAgIH0KIyAyMTI0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+
Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19maXJz
dCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg
X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv
cnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxNTAgIi9idWlsZHMvZ2NjLTNf
MS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIGlubGluZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkg
ewogICAgICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAt
IF9fZmlyc3QpICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9f
Zmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVf
c29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qp
CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0
KSAvIDI7CiAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAg
ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJn
ZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19p
bnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2Vy
dGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAg
IH0KICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAt
IF9fZmlyc3QpIC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlk
ZGxlLCBfX2NvbXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFz
dCwgX19jb21wKTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJz
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAg
ICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChf
UmFuZG9tQWNjZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNl
IF9fc3RlcF9zaXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0
ZXBfc2l6ZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsK
ICAgICAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCAr
IF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAg
X19maXJzdCArPSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihf
RGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19m
aXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFz
dCwKICAgICAgICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0
eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJn
ZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1
bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3Np
emU7CgogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAg
ICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3
b19zdGVwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAg
fQogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9f
c3RlcF9zaXplKTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwK
ICAgICAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9f
cmVzdWx0LAogICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6
ZSA9IDcgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9z
b3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0g
X19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2lu
c2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6
ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+
PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmly
c3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3Np
emU7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29t
cCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7
CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAg
X0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNl
cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChf
X3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwg
X19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7
CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmly
c3QsIF9fc3RlcF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZm
ZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBf
X2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5j
ZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3Qg
PSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1
bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
c3RlcF9zaXplLCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsK
ICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0
ZXBfc2l6ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVy
Z2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6
ZSwgX19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJf
c2l6ZSkKICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAx
KSAvIDI7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVu
OwogICAgICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwog
ICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29y
dF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVy
Z2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0K
ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFu
Y2UoX19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo
X19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlw
ZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy
IF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19s
YXN0IC0gX19maXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUg
PSBfX2ZpcnN0ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwg
X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0
aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAg
ICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2Uo
X19taWRkbGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19s
YXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogICAgfQojIDIzNzUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAg
IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0
ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNz
SXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChidWYuYmVn
aW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xhc3Qp
OwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xh
c3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1Zi5zaXplKCkpKTsKICAgIH0KIyAyNDAz
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw
ZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz
dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k
b21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYg
KGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3Qs
IF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp
dmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjQzMyAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2
b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAg
ICAgCgogICAgIAoKICAgICAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9y
IChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkK
ICAgICAgICBpZiAoKl9faSA8ICpfX2ZpcnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0
LCBfX21pZGRsZSwgX19pLCBfVmFsdWVUeXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmly
c3QsIF9fbWlkZGxlKTsKICAgIH0KIyAyNDYzICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBw
YXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtlX2hlYXAoX19m
aXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19p
ID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9fY29tcCgqX19p
LCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2ks
IF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2ZpcnN0LCBfX21p
ZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNDk1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21B
Y2Nlc3NJdGVyCiAgICBwYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jl
c3VsdF9sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0
cHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAg
ICAgCiAgICAgCiAgICAgCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFz
dCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0
X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFz
dCAmJiBfX3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jl
c3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsK
ICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0
LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVz
dF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0
KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAg
ICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwg
X19yZXN1bHRfcmVhbF9sYXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAg
IH0KIyAyNTQxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9t
QWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
cmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19y
ZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OnZhbHVl
X3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091dHB1dFZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAogICAgIAogICAgIAoK
CiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9sYXN0KSByZXR1cm4gX19yZXN1
bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19y
ZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3Jl
YWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9
ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgICAgICsrX19maXJz
dDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxf
bGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgICAg
aWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkKICAgICAgICAgIF9fYWRqdXN0
X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1bHRfZmlyc3Qp
LAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmlyc3QpLAogICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsrX19maXJzdDsKICAgICAgfQog
ICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21w
KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNTg4ICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAg
ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigq
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAg
ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAg
IGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNjI0ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2
b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAg
ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2Nv
bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B
Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAg
d2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9f
bnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UKICAgICAgICAgIF9f
bGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s
YXN0LCBfX2NvbXApOwogICAgfQoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQoX0ZvcndhcmRJ
dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZh
bHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCgoKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19m
aXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJk
SXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYg
PSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNl
KF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAg
ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAg
X19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAg
ICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf
X3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2Vf
dHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9f
bGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hh
bGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDAp
IHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJz
dDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChfX2NvbXAo
Kl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
ICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAg
ICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgfQogICAg
ICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2
YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCgogICAg
IAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0
ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0g
X19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShf
X21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRkbGUpCiAgICAgICAg
ICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p
ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh
bGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9f
dmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAg
ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwg
dHlwZW5hbWUgX1RwPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx
dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz
dGFuY2VUeXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgICAgIHdo
aWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9f
bWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
ICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxl
OwogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAt
IDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fdmFsIDwgKl9fbWlkZGxlKQogICAgICAg
ICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBfX2xlZnQgPSBsb3dl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwpOwogICAgICAgICAgYWR2YW5jZShfX2Zp
cnN0LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwg
X19maXJzdCwgX192YWwpOwogICAgICAgICAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+KF9fbGVmdCwgX19yaWdodCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVy
biBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2ZpcnN0LCBfX2ZpcnN0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu
YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx
dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z
dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90
eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G
b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg
CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s
YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p
ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg
IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg
IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs
IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp
cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg
ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g
X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m
aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0
LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m
aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoK
ICAgICAKICAgICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQo
X19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEo
X192YWwgPCAqX19pKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgYmluYXJ5X3NlYXJj
aChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3Qs
IF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICFf
X2NvbXAoX192YWwsICpfX2kpOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0
cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK
ICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAK
CiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp
cnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewog
ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz
dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAg
cmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0g
MCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xl
bjIgPT0gMikgewogICAgICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAg
ICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQog
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlk
aXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBf
X2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4x
ID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5j
ZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91
bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlz
dGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg
ICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9f
bGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRk
bGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBf
X2ZpcnN0X2N1dCk7CiAgICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg
X19zZWNvbmRfY3V0KTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9f
Zmlyc3RfY3V0OwogICAgICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCkpOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
Zmlyc3RfY3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4xMSwgX19sZW4yMik7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjEgLSBfX2xlbjExLCBfX2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlz
dGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1
cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChfX2NvbXAo
Kl9fbWlkZGxlLCAqX19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9f
bWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25k
X2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0
YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9f
bGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEp
OwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpf
X2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUs
IF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9f
bGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAg
IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j
dXQsIF9fY29tcCk7CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0KTsKICAgICAgfQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29u
ZF9jdXQpOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9j
dXQ7CiAgICAgIGFkdmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNv
bmRfY3V0KSk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9j
dXQsIF9fbmV3X21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBf
X2xlbjIyLCBfX2NvbXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRs
ZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s
ZW4xIC0gX19sZW4xMSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIxCiAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAg
ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fYnVmZmVyX2VuZDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMiAmJiBfX2xlbjIgPD0g
X19idWZmZXJfc2l6ZSkgewogICAgICAgIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9f
bGFzdCwgX19idWZmZXIpOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCk7CiAgICAgICAgcmV0dXJuIGNvcHkoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19m
aXJzdCk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsK
ICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7
CiAgICAgICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgICAgICByZXR1cm4g
Y29weV9iYWNrd2FyZChfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICB9CiAg
ICAgIGVsc2UgewogICAgICAgIHJvdGF0ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAg
ICAgICBhZHZhbmNlKF9fZmlyc3QsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpKTsKICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg
IHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAg
ICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVj
dGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19m
aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0Miwg
X19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg
ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg
ICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg
ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s
YXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1
cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAg
ICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1
bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg
ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7
CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRl
cjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0
aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7
CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3
YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9PSBf
X2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3QxLCBf
X3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGlsZSAo
dHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAgICAg
ICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3Qy
LCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2Ug
ewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0
MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwg
KytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAg
ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5h
bWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBfUG9pbnRlcj4KICAgIHZvaWQKICAgIF9fbWVyZ2VfYWRh
cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwg
X0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIs
IF9EaXN0YW5jZSBfX2J1ZmZlcl9zaXplKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBf
X2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIg
X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAg
ICAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2Zp
cnN0KTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9z
aXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUs
IF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QpOwogICAgICAgICAgfQog
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0X2N1
dCA9IF9fZmlyc3Q7CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQg
PSBfX21pZGRsZTsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogICAgICAgICAg
ICBfRGlzdGFuY2UgX19sZW4yMiA9IDA7CiAgICAgICAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIp
IHsKICAgICAgICAgICAgICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgICAgICAgICAgICBfX3Nl
Y29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwog
ICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1
dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQo
X19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICAgICAgICAgICAgICBfX2xl
bjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAgICAgICAgICB9CiAgICAg
ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICAgICAgICAgICAg
ICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19s
ZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVm
ZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2Fk
YXB0aXZlKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVu
MTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZm
ZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50
ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX2Fk
YXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs
IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy
LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9
IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29w
eShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAgICBtZXJnZShfX2J1ZmZl
ciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogICAg
ICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0Owog
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
bGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgICAg
ICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9f
Zmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93
ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBfX2NvbXApOwogICAgICAg
ICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIg
PSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJz
dCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgICAgICAgICAgICAgIF9f
bGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAgIH0KICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAgICAgICAg
ICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf
X2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19i
dWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJz
dF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAgICAgICAg
X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl
bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVu
MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAgICAgICAgfQogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBpbnBs
YWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRl
cj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoKICAg
ICAKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm47CgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMSA9IGRpc3RhbmNlKF9f
Zmlyc3QsIF9fbWlkZGxlKTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjIgPSBkaXN0YW5jZShf
X21pZGRsZSwgX19sYXN0KTsKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFs
SXRlciwgX1ZhbHVlVHlwZT4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYgKF9fYnVm
LmJlZ2luKCkgPT0gMCkKICAgICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yKTsKICAgICAgZWxzZQogICAgICAgIF9fbWVy
Z2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKF9fYnVm
LnNpemUoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIs
IHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rp
b25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
bWlkZGxlLAogICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAg
ICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9C
aWRpcmVjdGlvbmFsSXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw
ZTsKCgogICAgIAoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21p
ZGRsZSA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
bjEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19s
ZW4yID0gZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZl
cjxfQmlkaXJlY3Rpb25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1
ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsK
ICAgICAgZWxzZQogICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwgX19sZW4xLCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0
eXBlbmFtZSBfSW5wdXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9f
Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m
aXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAg
KytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3Qy
OwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVy
MiBfX2xhc3QyLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAg
ICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f
bGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJz
dDIpKQogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmly
c3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1
dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1
dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAK
CgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq
X19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVy
MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVy
MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgog
ICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3Qx
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEp
KSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3Qy
OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBf
X2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l
IF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0
SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgog
ICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIs
IHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
X091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9J
bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgog
ICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkK
ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg
KytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFt
ZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg
c2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs
CiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAg
ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAq
X19maXJzdDIpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlm
ICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVs
c2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAg
fQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091
dHB1dEl0ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9J
bnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAg
ICAKCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19s
YXN0MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAg
ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIs
ICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1
cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5w
dXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg
ICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwg
Kl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBp
ZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9
CiAgICAgICAgZWxzZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0
MjsKICAgICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1t
ZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAo
X19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChf
X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m
aXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAg
ICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAg
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAg
ICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2Zp
cnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShf
X2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVy
CiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFz
dCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1
cm4gX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAg
d2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2Zp
cnN0KQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4g
X19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hp
bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpf
X2ZpcnN0KSkgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAg
bWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAg
ICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxl
ICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkK
ICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgX0ZvcndhcmRJdGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
CiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmly
c3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgr
K19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3Vs
dCkpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsK
ICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9v
bAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkK
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7Cgog
ICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg
ICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9f
aikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAg
ICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
fQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgYm9vbAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0Nv
bXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
aSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBm
b3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAt
LV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ks
ICotLV9faikpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog
ICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShf
X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAg
fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29s
CiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQog
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAg
ICAgIGZvcig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAg
ICAgIC0tX19pOwogICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19p
KSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9
CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBh
cmU+CiAgICBib29sCiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2Zp
cnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29t
cGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19p
ID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZv
cig7OykgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0t
X19pOwogICAgICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19q
LCAqX19pKSkKICAgICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAg
ICAgICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICB9CiAgICAgICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9f
Zmlyc3QsIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9
CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmly
c3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBf
X2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAg
Zm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyAr
K19faXRlcikKICAgICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAg
cmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmlu
YXJ5UHJlZGljYXRlPgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVy
IF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9C
aW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoK
CgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAg
Zm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyAr
K19faXRlcikKICAgICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAg
ICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyAzODkx
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIyPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2Fy
ZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9G
b3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgZm9yd2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewogICAg
ICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg
ZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAg
d2hpbGUgKDEpIHsKICAgICAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAg
ICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAg
ICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jl
c3VsdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3Vs
dDsKICAgICAgICAgICAgX19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19m
aXJzdDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjIsCiAgICAgICAgICAg
dHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9l
bmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAg
ICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAg
ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZywK
ICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsK
ICAgICAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAo
MSkgewogICAgICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBz
ZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwogICAg
ICAgICAgaWYgKF9fbmV3X3Jlc3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19y
ZXN1bHQ7CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1
bHQ7CiAgICAgICAgICAgIF9fZmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19f
Zmlyc3QxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
Mj4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJ
dGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVy
c2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVm
IHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAg
X1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9f
Zmlyc3QyKTsKICAgICAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19s
YXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJ
dGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICAgICAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0
MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0
aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICAgICAgYWR2YW5jZShf
X3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICAgICAgcmV0dXJuIF9f
cmVzdWx0OwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAgIF9fZmluZF9lbmQo
X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rp
b25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3Jf
dGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNl
X2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiBy
ZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9S
ZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2Zp
cnN0Mik7CiAgICAgIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFz
dDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRl
cjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVy
biBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz
dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFu
Y2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJk
SXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAg
ICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBf
X2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRl
Z29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdv
cnkoX19maXJzdDIpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGlj
YXRlPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcjEKICAgIGZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEg
X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRl
cjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgIF9CaW5hcnlQ
cmVkaWNhdGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgcmV0dXJu
IF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MiksCiAgICAgICAgICAg
ICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9Cgp9CiMgNzAgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2FsZ29yaXRobSIgMiAzCiMgNTcgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL3N0cmluZyIgMiAz
CiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Yml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCgpuYW1l
c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBfUmVwOjpfU19tYXhfc2l6ZSA9ICgoKG5wb3MgLSBzaXplb2Yo
X1JlcCkpL3NpemVvZihfQ2hhclQpKSAtIDEpIC8gNDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQK
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1Nf
dGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Om5wb3M7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9TX2VtcHR5X3JlcF9zdG9yYWdlWwogICAg
KHNpemVvZihfUmVwKSArIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKHNpemVfdHlwZSkgLSAxKS9z
aXplb2Yoc2l6ZV90eXBlKV07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICAgIF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBj
b25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK
ICAgICAgewogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAg
ICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKICAgICAgICBfQ2hh
clQgX19idWZbMTAwXTsKICAgICAgICBzaXplX3R5cGUgX19pID0gMDsKICAgICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQgJiYgX19pIDwgc2l6ZW9mKF9fYnVmKSAvIHNpemVvZihfQ2hhclQpKQog
ICAgICAgICAgewogICAgICAgICAgICBfX2J1ZltfX2krK10gPSAqX19iZWc7CiAgICAgICAgICAg
ICsrX19iZWc7CiAgICAgICAgICB9CiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRl
KF9faSwgX19hKTsKICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwg
X19idWYsIF9faSk7CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2k7CiAgICAgICAgdHJ5CiAg
ICAgICAgICB7CgoKCiAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgX0NoYXJUKiBfX3AgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9fci0+X01fbGVuZ3Ro
OwogICAgICAgICAgICAgICAgX0NoYXJUKiBfX2xhc3QgPSBfX3ItPl9NX3JlZmRhdGEoKSArIF9f
ci0+X01fY2FwYWNpdHk7CiAgICAgICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fcCAt
IF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgICAqX19wID0gX1JlcDo6
X1NfdGVybWluYWw7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRh
dGEoKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBpZiAoX19w
ID09IF9fbGFzdCkKICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICpfX3ArKyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAg
ICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19wIC0gX19y
LT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICBfUmVwKiBfX2Fub3RoZXIgPSBfUmVwOjpf
U19jcmVhdGUoX19sZW4gKyAxLCBfX2EpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNv
cHkoX19hbm90aGVyLT5fTV9yZWZkYXRhKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3ItPl9NX3JlZmRhdGEoKSwgX19sZW4pOwogICAgICAgICAgICAgICAgX19yLT5fTV9k
ZXN0cm95KF9fYSk7CiAgICAgICAgICAgICAgICBfX3IgPSBfX2Fub3RoZXI7CiAgICAgICAgICAg
ICAgICBfX3ItPl9NX2xlbmd0aCA9IF9fbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0K
ICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fci0+X01fZGVzdHJv
eShfX2EpOwogICAgICAgICAgICB0aHJvdzsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gMDsK
ICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5JdGVyPgogICAgICBfQ2hhclQq
CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19j
b25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2Es
CiAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAg
IHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNlKF9fYmVn
LCBfX2VuZCkpOwoKCiAgICAgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoX19iZWcgPT0gX0luSXRl
cigwKSwgMCkpCiAgICAgICAgICBfX3Rocm93X2xvZ2ljX2Vycm9yKCJhdHRlbXB0IHRvIGNyZWF0
ZSBzdHJpbmcgd2l0aCBudWxsIHBvaW50ZXIiKTsKCiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5k
ICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9y
ZWZjb3B5KCk7CgoKICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19kbmV3LCBf
X2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19jb3B5X2NoYXJzKF9fci0+X01fcmVmZGF0
YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAg
ICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2RuZXc7CgogICAgICAgIF9fci0+X01fcmVm
ZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICByZXR1cm4gX19yLT5f
TV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAw
ICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVm
Y29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAg
ICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChfX24pCiAgICAgICAgICAgIHRyYWl0c190
eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9fbiwgX19jKTsKICAgICAgICB9CiAgICAg
IGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg
ICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAg
IF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJu
IF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygp
LCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxv
Y2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9k
YXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAg
ICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK
ICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19w
b3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5f
TV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9m
b2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxvYygpKQogICAgeyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco
Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhf
U19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19uKSwgX19hKSwgX19hKQogICAgeyB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNp
Y19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYg
X19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zLCBfX3MgKyBfX24sIF9fYSks
IF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2Mm
IF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zID8gX19zICsgdHJh
aXRzX3R5cGU6Omxlbmd0aChfX3MpIDogMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2Ms
IGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBf
X2MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJh
c2ljX3N0cmluZyhfSW5wdXRJdGVyIF9fYmVnLCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxs
b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19h
KSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2ln
bihjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0g
X19zdHIuX01fcmVwKCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9
IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5f
TV9yZXAoKS0+X01fZ3JhYihfX2EsIF9fc3RyLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBf
TV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNv
bnN0IF9BbGxvYyYgX19hKSB0aHJvdyAoKQogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g
c2l6ZW9mKF9SZXApICsgKF9NX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAg
X1Jhd19ieXRlc19hbGxvYyhfX2EpLmRlYWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dGhpcyksIF9fc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X01fbGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9N
X3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAg
IF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfTV9tdXRhdGUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQogICAg
ewogICAgICBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgY29uc3Qg
c2l6ZV90eXBlIF9fbmV3X3NpemUgPSBfX29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOwogICAg
ICBjb25zdCBfQ2hhclQqIF9fc3JjID0gX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjE7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2hvd19tdWNoID0gX19vbGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4x
OwoKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBfX25ld19zaXplID4gY2Fw
YWNpdHkoKSkKICAgICAgICB7CgogICAgICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2Fs
bG9jYXRvcigpOwoKCiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7
CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6
ZW9mICh2b2lkKik7CgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9
IChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJUKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2YoX0No
YXJUKTsKICAgICAgICAgIF9SZXAqIF9fcjsKICAgICAgICAgIGlmIChfX25ld19zaXplID4gY2Fw
YWNpdHkoKSAmJiBfX25ld19zaXplID4gX19wYWdlX2NhcGFjaXR5KQoKICAgICAgICAgICAgX19y
ID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUgPiAyKmNhcGFjaXR5KCkgPwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfc2l6ZSA6IDIqY2FwYWNpdHkoKSwgX19hKTsK
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3Np
emUsIF9fYSk7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChf
X3BvcykKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgp
LCBfTV9kYXRhKCksIF9fcG9zKTsKICAgICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBf
X2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVj
aCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIF9fci0+X01fZGlzcG9zZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAg
IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2Ep
OwogICAgICAgICAgX01fZGF0YShfX3ItPl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxz
ZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xlbjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAg
ICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9f
aG93X211Y2gpOwogICAgICAgIH0KICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwog
ICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19f
bmV3X3NpemVdID0gX1JlcDo6X1NfdGVybWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBl
IF9fcmVzKQogICAgewogICAgICBpZiAoX19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3Jl
cCgpLT5fTV9pc19zaGFyZWQoKSkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlz
LT5tYXhfc2l6ZSgpKQogICAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3Ry
aW5nOjpyZXNlcnZlIik7CgogICAgICAgICAgaWYgKF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQogICAg
ICAgICAgICBfX3JlcyA9IHRoaXMtPnNpemUoKTsKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9f
YSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+
X01fY2xvbmUoX19hLCBfX3JlcyAtIHRoaXMtPnNpemUoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+
X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHZvaWQgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
c3dhcChiYXNpY19zdHJpbmcmIF9fcykKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19s
ZWFrZWQoKSkKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChf
X3MuX01fcmVwKCktPl9NX2lzX2xlYWtlZCgpKQogICAgICAgIF9fcy5fTV9yZXAoKS0+X01fc2V0
X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9h
bGxvY2F0b3IoKSkKICAgICAgICB7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fZGF0YSgp
OwogICAgICAgICAgX01fZGF0YShfX3MuX01fZGF0YSgpKTsKICAgICAgICAgIF9fcy5fTV9kYXRh
KF9fdG1wKTsKICAgICAgICB9CgogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgYmFzaWNf
c3RyaW5nIF9fdG1wMShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigp
KTsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01f
aWVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT5nZXRfYWxsb2NhdG9y
KCkpOwogICAgICAgICAgKnRoaXMgPSBfX3RtcDI7CiAgICAgICAgICBfX3MgPSBfX3RtcDE7CiAg
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpfUmVwOjoKICAgIF9TX2NyZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0Fs
bG9jJiBfX2FsbG9jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0eSA+IF9T
X21heF9zaXplKQoKCgogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6
Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAgc2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkg
KiBzaXplb2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKIyA0MjEgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLnRjYyIg
MwogICAgICBjb25zdCBzaXplX3QgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgIGNvbnN0IHNpemVf
dCBfX3N1YnBhZ2VzaXplID0gMTI4OwogICAgICBjb25zdCBzaXplX3QgX19tYWxsb2NfaGVhZGVy
X3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CiAgICAgIGlmICgoX19zaXplICsgX19tYWxsb2Nf
aGVhZGVyX3NpemUpID4gX19wYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19l
eHRyYSA9CiAgICAgICAgICAgIChfX3BhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxvY19oZWFk
ZXJfc2l6ZSkgJSBfX3BhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3BhZ2VzaXplOwogICAgICAg
ICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfX3Np
emUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiAg
ICAgICAgfQogICAgICBlbHNlIGlmIChfX3NpemUgPiBfX3N1YnBhZ2VzaXplKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fc3VicGFnZXNpemUgLSAo
KF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fc3VicGFnZXNpemUpKQogICAgICAg
ICAgICAlIF9fc3VicGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz
aXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CgoKCiAgICAgIHZvaWQqIF9fcGxh
Y2UgPSBfUmF3X2J5dGVzX2FsbG9jKF9fYWxsb2MpLmFsbG9jYXRlKF9fc2l6ZSk7CiAgICAgIF9S
ZXAgKl9fcCA9IG5ldyAoX19wbGFjZSkgX1JlcDsKICAgICAgX19wLT5fTV9jYXBhY2l0eSA9IF9f
Y2FwYWNpdHk7CiAgICAgIF9fcC0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIF9fcC0+X01fbGVu
Z3RoID0gMDsKICAgICAgcmV0dXJuIF9fcDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBfQ2hhclQqCiAgICBi
YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9NX2Nsb25l
KGNvbnN0IF9BbGxvYyYgX19hbGxvYywgc2l6ZV90eXBlIF9fcmVzKQogICAgewoKICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fcmVxdWVzdGVkX2NhcCA9IF9NX2xlbmd0aCArIF9fcmVzOwoKICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3R5cGUg
X19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICBjb25zdCBz
aXplX3R5cGUgX19wYWdlX2NhcGFjaXR5ID0KICAgICAgICAoX19wYWdlc2l6ZSAtIF9fbWFsbG9j
X2hlYWRlcl9zaXplIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9DaGFyVCkpCiAgICAgICAgLyBz
aXplb2YoX0NoYXJUKTsKICAgICAgX1JlcCogX19yOwogICAgICBpZiAoX19yZXF1ZXN0ZWRfY2Fw
ID4gX01fY2FwYWNpdHkgJiYgX19yZXF1ZXN0ZWRfY2FwID4gX19wYWdlX2NhcGFjaXR5KQoKICAg
ICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwID4gMipfTV9jYXBhY2l0
eSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVxdWVzdGVkX2NhcCA6IDIqX01f
Y2FwYWNpdHksIF9fYWxsb2MpOwogICAgICBlbHNlCiAgICAgICAgX19yID0gX1JlcDo6X1NfY3Jl
YXRlKF9fcmVxdWVzdGVkX2NhcCwgX19hbGxvYyk7CgogICAgICBpZiAoX01fbGVuZ3RoKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fci0+
X01fcmVmZGF0YSgpLCBfTV9yZWZkYXRhKCksIF9NX2xlbmd0aCk7IH0KICAgICAgICAgIGNhdGNo
KC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2FsbG9j
KTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgX19y
LT5fTV9sZW5ndGggPSBfTV9sZW5ndGg7CiAgICAgIHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYg
KF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0
cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwg
X19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9f
bik7CgogICAgfQojIDUwOCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg
ICAgX01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyIF9f
azEsCiAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2syLCBpbnB1dF9pdGVyYXRvcl90YWcp
CiAgICAgIHsKCiAgICAgICAgYmFzaWNfc3RyaW5nIF9fcyhfX2sxLCBfX2syKTsKICAgICAgICBy
ZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9faTEsIF9faTIsIF9fcy5fTV9pYmVnaW4oKSwgX19zLl9N
X2llbmQoKSk7CiAgICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxh
Y2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfRm9yd2FyZEl0ZXIgX19rMSwK
ICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2syKQogICAgICB7CiAgICAgICAg
c2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19rMSwg
X19rMikpOwogICAgICAgIHNpemVfdHlwZSBfX2RvbGQgPSBfX2kyIC0gX19pMTsKICAgICAgICBz
aXplX3R5cGUgX19kbWF4ID0gdGhpcy0+bWF4X3NpemUoKTsKCiAgICAgICAgaWYgKF9fZG1heCA8
PSBfX2RuZXcpCiAgICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpf
TV9yZXBsYWNlIik7CiAgICAgICAgc2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigp
OwogICAgICAgIF9NX211dGF0ZShfX29mZiwgX19kb2xkLCBfX2RuZXcpOwoKCiAgICAgICAgaWYg
KF9fZG5ldykKICAgICAgICAgIF9TX2NvcHlfY2hhcnMoX01fZGF0YSgpICsgX19vZmYsIF9fazEs
IF9fazIpOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICByZXBsYWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw
ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUg
X19wb3MyLCBzaXplX3R5cGUgX19uMikKICAgIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc3Ry
c2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMiA+IF9fc3Ryc2l6ZSkKICAgICAg
ICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIGNv
bnN0IGJvb2wgX190ZXN0bjIgPSBfX24yIDwgX19zdHJzaXplIC0gX19wb3MyOwogICAgICBjb25z
dCBzaXplX3R5cGUgX19mb2xkbjIgPSBfX3Rlc3RuMiA/IF9fbjIgOiBfX3N0cnNpemUgLSBfX3Bv
czI7CiAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zMSwgX19uMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX2ZvbGRuMik7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSBfX3N0
ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc2l6ZSArIHRoaXMtPnNpemUoKTsK
ICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZl
KF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQo
KSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIu
X01faWVuZCgpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg
ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19zdHIuc2l6
ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMt
PmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiBf
TV9yZXBsYWNlX3NhZmUoX01faWVuZCgpLCBfTV9pZW5kKCksIF9fc3RyLl9NX2NoZWNrKF9fcG9z
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24p
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQo
Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNp
dHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0dXJuIF9NX3JlcGxh
Y2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zLCBfX3MgKyBfX24pOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgewogICAgICBzaXplX3R5cGUgX19sZW4gPSBfX24gKyB0aGlzLT5z
aXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+
cmVzZXJ2ZShfX2xlbik7CiAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N
X2llbmQoKSwgX19uLCBfX2MpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBfQ2hhclQqIF9fbGhzLAogICAg
ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f
cmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBl
OjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0
czo6bGVuZ3RoKF9fbGhzKTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIu
cmVzZXJ2ZShfX2xlbiArIF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywg
X19saHMgKyBfX2xlbik7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBf
X3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0
cmluZ190eXBlIF9fc3RyOwogICAgICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsK
ICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXpl
X3R5cGUoMSksIF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJu
IF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJl
cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFy
VCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNp
emVfdHlwZSBfX29mZjEgPSBfX2kxIC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgp
IC0gKHRoaXMtPnNpemUoKSAtIF9fbjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhf
ZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwg
X19uMSwgX19uMik7CgogICAgICBpZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu
KF9NX2RhdGEoKSArIF9fb2ZmMSwgX19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBjb3B5KF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNv
bnN0CiAgICB7CiAgICAgIGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhp
cy0+c2l6ZSgpIC0gX19wb3MpCiAgICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7Cgog
ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAg
ICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0
IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9
IF9fc2l6ZTsgKytfX3hwb3MpCiAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0
YSArIF9feHBvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAg
ICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mp
IGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg
IHNpemVfdHlwZSBfX3JldCA9IG5wb3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAg
ICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAg
IHNpemVfdHlwZSBfX24gPSBfX3NpemUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCog
X19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAg
ICAgIGlmIChfX3ApCiAgICAgICAgICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBl
IF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAg
ewogICAgICAgICAgX19wb3MgPSBzdGQ6Om1pbihfX3NpemUgLSBfX24sIF9fcG9zKTsKICAgICAg
ICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBf
X3BvcywgX19zLCBfX24pID09IDApCiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgcmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBj
b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBp
ZiAoX19zaXplKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAx
OwogICAgICAgICAgaWYgKF9feHBvcyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3Bv
czsKCiAgICAgICAgICBmb3IgKCsrX194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAg
aWYgKHRyYWl0c190eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAg
ICByZXR1cm4gX194cG9zOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6
ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZp
bmRfZmlyc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBl
IF9fbikgY29uc3QKICAgIHsKICAgICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUo
KTsgKytfX3BvcykKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0
c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChf
X3ApCiAgICAgICAgICAgIHJldHVybiBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9z
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv
cywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAg
aWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAg
ICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChf
X3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAg
IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9D
aGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAg
ICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRoaXMtPnNp
emUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwg
X01fZGF0YSgpW19feHBvc10pKQogICAgICAgICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf
X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3Ig
KDsgX194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190
eXBlOjplcShfTV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7
CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IF9DaGFy
VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg
IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAg
ICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9
IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJh
aXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3NpemVdKSkKICAgICAgICAgICAg
ICAgIHJldHVybiBfX3NpemU7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdoaWxlIChfX3NpemUt
LSk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFt
ZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlw
ZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAg
ICAgICAgaWYgKC0tX19zaXplID4gX19wb3MpCiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwog
ICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6
OmVxKF9NX2RhdGEoKVtfX3NpemVdLCBfX2MpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6
ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6
ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgIHsKICAgICAg
c2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUg
PSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93
X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUg
X19yc2l6ZT0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24pOwogICAgICBzaXplX3R5cGUgX19sZW4g
PSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29t
cGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zdHIuZGF0YSgpLCBfX2xlbik7CiAgICAgIGlmICgh
X19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19yOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXpl
X3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIGlmIChf
X3BvczEgPiBfX3NpemUgfHwgX19wb3MyID4gX19vc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9v
Zl9yYW5nZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19yc2l6
ZSA9IG1pbihfX3NpemUgLSBfX3BvczEsIF9fbjEpOwogICAgICBzaXplX3R5cGUgX19yb3NpemUg
PSBtaW4oX19vc2l6ZSAtIF9fcG9zMiwgX19uMik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p
bihfX3JzaXplLCBfX3Jvc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFy
ZShfTV9kYXRhKCkgKyBfX3BvczEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3N0ci5kYXRhKCkgKyBfX3BvczIsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAg
X19yID0gX19yc2l6ZSAtIF9fcm9zaXplOwogICAgICByZXR1cm4gX19yOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+
CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg
Y29tcGFyZShjb25zdCBfQ2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJl
KF9NX2RhdGEoKSwgX19zLCBfX3NpemUpOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf
X3NpemUgLSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHJldHVybiBfX3I7CiAgICB9
CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l
IF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nIDxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBf
Q2hhclQqIF9fcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNp
emUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0g
dHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihf
X3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXpl
LCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEo
KSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19y
c2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg
ICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNp
emVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAg
ICAgICBzaXplX3R5cGUgX19uMikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBf
X29zaXplID0gbWluKHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSwgX19uMik7CiAgICAgIHNpemVf
dHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBl
IF9fbGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5
cGU6OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9f
cikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAg
IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9j
PgogICAgdm9pZAogICAgX1Nfc3RyaW5nX2NvcHkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19zdHIsCiAgICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fYnVm
LCB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBfX2J1ZnNpeikKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHNpemVfdHlwZSBf
X3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX2J5dGVzID0gbWluKF9f
c3Ryc2l6ZSwgX19idWZzaXogLSAxKTsKICAgICAgX1RyYWl0czo6Y29weShfX2J1ZiwgX19zdHIu
ZGF0YSgpLCBfX2J5dGVzKTsKICAgICAgX19idWZbX19ieXRlc10gPSBfQ2hhclQoKTsKICAgIH0K
CgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhcj4mLCBzdHJpbmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJl
YW08Y2hhcj4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhcj4mLCBjb25zdCBzdHJp
bmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRs
aW5lKGJhc2ljX2lzdHJlYW08Y2hhcj4mLCBzdHJpbmcmLCBjaGFyKTsKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJhc2ljX2lzdHJlYW08Y2hhcj4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08Y2hh
cj4mLCBzdHJpbmcmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZzx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mCiAgICBv
cGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+JgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPHdjaGFyX3Q+JiwgY29uc3Qgd3N0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAg
YmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90
PiYsIHdzdHJpbmcmLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX2lzdHJl
YW08d2NoYXJfdD4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08d2NoYXJfdD4mLCB3c3RyaW5n
Jik7Cn0KIyA1OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvc3RyaW5nIiAyIDMKIyA1MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5o
IiAxIDMKIyAzNCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgog
IHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlw
ZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv
aWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93
X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1l
X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNo
YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQoj
IDUxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiMgNjQgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgi
IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIHZl
Y3RvcjsKICBjbGFzcyBsb2NhbGU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNzcGFjZShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmludChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNjbnRybChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN1cHBlcihfQ2hhclQsIGNvbnN0IGxvY2Fs
ZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNs
b3dlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hh
clQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXNwdW5jdChfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJULCBjb25z
dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzYWxudW0oX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzZ3JhcGgoX0NoYXJULCBjb25zdCBsb2NhbGUm
KTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91
cHBlcihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgoK
CiAgY2xhc3MgY3R5cGVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBjdHlwZTsKICB0ZW1wbGF0ZTw+IGNsYXNzIGN0eXBlPGNoYXI+OwoKICB0ZW1wbGF0ZTw+IGNs
YXNzIGN0eXBlPHdjaGFyX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBjdHlwZV9ieW5hbWU7CgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2U7CiAgY2xhc3MgX19lbmNfdHJh
aXRzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlw
ZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb2Rl
Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDx3
Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5
bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlz
dHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVu
Y3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0
ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFtZTsK
CgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9n
ZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVh
bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVy
YXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog
ICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAg
Y2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9
IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAgY2xh
c3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBt
ZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19i
eW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5zaWdu
ZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAgY2xh
c3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9JbXBs
OwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9GYWNl
dCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYp
IHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBzdGF0
aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVn
b3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxhdGUg
PSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkg
YWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAgICBs
b2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93
KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3N0ZF9uYW1lKTsKCiAg
ICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdvcnkg
X19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBf
X2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAg
ICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5sb2Nh
bGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBsb2Nh
bGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAg
ICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0OwoKCiAg
ICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0
IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1
cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAg
ICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4m
IF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNv
bnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7Cgog
IHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xh
c3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNp
emVfdCBfU19udW1fY2F0ZWdvcmllcyA9IDY7CiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251
bV9mYWNldHMgPSAyODsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsK
CiAgICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgewogICAgICBp
ZiAoIV9TX2NsYXNzaWMpCiAgICAgICAgY2xhc3NpYygpOwogICAgfQoKICAgIHN0YXRpYyBjYXRl
Z29yeQogICAgX1Nfbm9ybWFsaXplX2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBf
TV9jb2FsZXNjZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0
ZWdvcnkgX19jYXQpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6
CgogICAgdHlwZWRlZiB2ZWN0b3I8ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+IF9fdmVjX2Zh
Y2V0OwoKCiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6
ZmFjZXQ7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3Qg
X0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9j
YWxlJikgdGhyb3coKTsKCiAgcHJpdmF0ZToKCiAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNl
czsKICAgIF9fdmVjX2ZhY2V0KiBfTV9mYWNldHM7CiAgICBzdHJpbmcgX01fbmFtZXNbX1NfbnVt
X2NhdGVnb3JpZXNdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2N0
eXBlW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbnVtZXJpY1td
OwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX2NvbGxhdGVbXTsKICAg
IHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF90aW1lW107CiAgICBzdGF0aWMg
Y29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbW9uZXRhcnlbXTsKICAgIHN0YXRpYyBjb25z
dCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tZXNzYWdlc1tdOwogICAgc3RhdGljIGNvbnN0IGxv
Y2FsZTo6aWQqIGNvbnN0KiBjb25zdCBfU19mYWNldF9jYXRlZ29yaWVzW107CgogICAgaW5saW5l
IHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0aHJvdygpCiAgICB7IF9fYXRvbWljX2FkZCgm
X01fcmVmZXJlbmNlcywgMSk7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVy
ZW5jZSgpIHRocm93KCkKICAgIHsKICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5kX2FkZCgmX01fcmVm
ZXJlbmNlcywgLTEpID09IDEpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsg
ZGVsZXRlIHRoaXM7IH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgeyB9CiAgICAg
ICAgfQogICAgfQoKICAgIF9JbXBsKGNvbnN0IF9JbXBsJiwgc2l6ZV90KTsKICAgIF9JbXBsKHN0
cmluZyBfX25hbWUsIHNpemVfdCk7CiAgIH5fSW1wbCgpIHRocm93KCk7CgogICAgaW5saW5lIGJv
b2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wgX19yZXQgPSB0cnVl
OwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9TX251bV9jYXRlZ29yaWVzIC0gMTsgKytp
KQogICAgICAgIF9fcmV0ICY9IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kgKyAxXTsKICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcmllcyhj
b25zdCBfSW1wbCosIGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9yZXBsYWNlX2NhdGVnb3J5
KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCogY29uc3QqKTsKCiAgICB2b2lkCiAgICBf
TV9yZXBsYWNlX2ZhY2V0KGNvbnN0IF9JbXBsKiwgY29uc3QgbG9jYWxlOjppZCopOwoKICAgIHZv
aWQKICAgIF9NX2luc3RhbGxfZmFjZXQoY29uc3QgbG9jYWxlOjppZCosIGZhY2V0Kik7CgogICAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBpbmxpbmUgdm9pZAogICAgICBfTV9pbml0
X2ZhY2V0KF9GYWNldCogX19mYWNldCkKICAgICAgeyBfTV9pbnN0YWxsX2ZhY2V0KCZfRmFjZXQ6
OmlkLCBfX2ZhY2V0KTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxv
Y2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpCiAgICB7CiAg
ICAgIF9NX2ltcGwgPSBuZXcgX0ltcGwoKl9fb3RoZXIuX01faW1wbCwgMSk7CiAgICAgIF9NX2lt
cGwtPl9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZik7CiAgICAgIGZvciAoc2l6ZV90
IF9faSA9IDA7IF9faSA8IF9TX251bV9jYXRlZ29yaWVzOyArK19faSkKICAgICAgICBfTV9pbXBs
LT5fTV9uYW1lc1tfX2ldID0gIioiOwogICAgfQoKCiAgY2xhc3MgbG9jYWxlOjpmYWNldAogIHsK
ICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpfSW1wbDsK
ICAgIGZyaWVuZCBjbGFzcyBfX2VuY190cmFpdHM7CgogIHByaXZhdGU6CiAgICBfQXRvbWljX3dv
cmQgX01fcmVmZXJlbmNlczsKCiAgcHJvdGVjdGVkOgoKCiAgICBzdGF0aWMgX19jX2xvY2FsZSBf
U19jX2xvY2FsZTsKCiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9fcmVmcyA9IDApIHRo
cm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCk7CgogICAgc3RhdGljIHZvaWQKICAgIF9T
X2NyZWF0ZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcyk7Cgog
ICAgc3RhdGljIF9fY19sb2NhbGUKICAgIF9TX2Nsb25lX2NfbG9jYWxlKF9fY19sb2NhbGUmIF9f
Y2xvYyk7CgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jX2xvY2Fs
ZSYgX19jbG9jKTsKCiAgcHJpdmF0ZToKICAgIHZvaWQKICAgIF9NX2FkZF9yZWZlcmVuY2UoKSB0
aHJvdygpOwoKICAgIHZvaWQKICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB0aHJvdygpOwoKICAg
IGZhY2V0KGNvbnN0IGZhY2V0Jik7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGZhY2V0
Jik7CiAgfTsKCgoKICBjbGFzcyBsb2NhbGU6OmlkCiAgewogIHByaXZhdGU6CiAgICBmcmllbmQg
Y2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9m
YWNldChjb25zdCBsb2NhbGUmKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAg
ZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2FsZSYpIHRocm93ICgpOwoKCgoK
ICAgIG11dGFibGUgc2l6ZV90IF9NX2luZGV4OwoKCiAgICBzdGF0aWMgX0F0b21pY193b3JkIF9T
X2hpZ2h3YXRlcjsKCiAgICB2b2lkCiAgICBvcGVyYXRvcj0oY29uc3QgaWQmKTsKCiAgICBpZChj
b25zdCBpZCYpOwoKICBwdWJsaWM6CgoKICAgIGlkKCk7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYg
X19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFj
ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ5ICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3MiIDIgMwojIDEgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2Uu
aCIgMSAzCiMgNDQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBf
SW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGlu
ZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZs
YWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAm
IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVy
YXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9J
b3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2Ip
KTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9f
YSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2Fz
dDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0Zt
dGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19i
KQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog
IG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJl
dHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRv
cl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19h
ID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3Nf
Rm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4o
X19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAx
TCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5t
b2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0
aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBf
SW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2Rl
IF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0
YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRv
cl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3Nf
T3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg
fQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19h
LCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5s
aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19P
cGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9z
X09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUg
X19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9k
ZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl
KH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lv
c19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVy
YXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9z
X0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsg
fQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9J
b3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4o
X19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog
IG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu
IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f
YikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYg
X19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp
bmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19J
b3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf
SW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2Ip
CiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBv
cGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRp
Y19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rp
cl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAg
ICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsK
CiAgICAgIHZpcnR1YWwKICAgICAgfmZhaWx1cmUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbCBj
b25zdCBjaGFyKgogICAgICB3aGF0KCkgY29uc3QgdGhyb3coKTsKCiAgICBwcml2YXRlOgogICAg
ICBlbnVtIHsgX01fYnVmc2l6ZSA9IDI1NiB9OwogICAgICBjaGFyIF9NX25hbWVbX01fYnVmc2l6
ZV07CgogICAgfTsKCgogICAgdHlwZWRlZiBfSW9zX0ZtdGZsYWdzIGZtdGZsYWdzOwoKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBib29sYWxwaGEgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nf
Ym9vbGFscGhhKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBkZWMgPSBmbXRmbGFncyhfX2lv
c19mbGFnczo6X1NfZGVjKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmaXhlZCA9IGZtdGZs
YWdzKF9faW9zX2ZsYWdzOjpfU19maXhlZCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgaGV4
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2hleCk7CiAgICBzdGF0aWMgY29uc3QgZm10Zmxh
Z3MgaW50ZXJuYWwgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaW50ZXJuYWwpOwogICAgc3Rh
dGljIGNvbnN0IGZtdGZsYWdzIGxlZnQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfbGVmdCk7
CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgb2N0ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9T
X29jdCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgcmlnaHQgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfcmlnaHQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNjaWVudGlmaWMgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2NpZW50aWZpYyk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3Mgc2hvd2Jhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2hvd2Jhc2UpOwogICAg
c3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb2ludCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf
U19zaG93cG9pbnQpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHNob3dwb3MgPSBmbXRmbGFn
cyhfX2lvc19mbGFnczo6X1Nfc2hvd3Bvcyk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2tp
cHdzID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3NraXB3cyk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3MgdW5pdGJ1ZiA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191bml0YnVmKTsKICAg
IHN0YXRpYyBjb25zdCBmbXRmbGFncyB1cHBlcmNhc2UgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6
X1NfdXBwZXJjYXNlKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBhZGp1c3RmaWVsZCA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19hZGp1c3RmaWVsZCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3MgYmFzZWZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Jhc2VmaWVsZCk7CiAg
ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgZmxvYXRmaWVsZCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19mbG9hdGZpZWxkKTsKCgogICAgdHlwZWRlZiBfSW9zX0lvc3RhdGUgaW9zdGF0ZTsKICAg
IHN0YXRpYyBjb25zdCBpb3N0YXRlIGJhZGJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2Jh
ZGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBlb2ZiaXQgPSBpb3N0YXRlKF9faW9zX2Zs
YWdzOjpfU19lb2ZiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZmFpbGJpdCA9IGlvc3Rh
dGUoX19pb3NfZmxhZ3M6Ol9TX2ZhaWxiaXQpOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgZ29v
ZGJpdCA9IGlvc3RhdGUoMCk7CgoKICAgIHR5cGVkZWYgX0lvc19PcGVubW9kZSBvcGVubW9kZTsK
ICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhcHAgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nf
YXBwKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBhdGUgPSBvcGVubW9kZShfX2lvc19mbGFn
czo6X1NfYXRlKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBiaW5hcnkgPSBvcGVubW9kZShf
X2lvc19mbGFnczo6X1NfYmluKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBpbiA9IG9wZW5t
b2RlKF9faW9zX2ZsYWdzOjpfU19pbik7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUgb3V0ID0g
b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX291dCk7CiAgICBzdGF0aWMgY29uc3Qgb3Blbm1vZGUg
dHJ1bmMgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1NfdHJ1bmMpOwoKCiAgICB0eXBlZGVmIF9J
b3NfU2Vla2RpciBzZWVrZGlyOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgYmVnID0gc2Vla2Rp
cigwKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGN1ciA9IHNlZWtkaXIoMSk7CiAgICBzdGF0
aWMgY29uc3Qgc2Vla2RpciBlbmQgPSBzZWVrZGlyKDIpOwojIDIyNCAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAzCiAg
ICBlbnVtIGV2ZW50CiAgICB7CiAgICAgIGVyYXNlX2V2ZW50LAogICAgICBpbWJ1ZV9ldmVudCwK
ICAgICAgY29weWZtdF9ldmVudAogICAgfTsKCiAgICB0eXBlZGVmIHZvaWQgKCpldmVudF9jYWxs
YmFjaykgKGV2ZW50LCBpb3NfYmFzZSYsIGludCk7CgogICAgdm9pZAogICAgcmVnaXN0ZXJfY2Fs
bGJhY2soZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgpOwoKICBwcm90ZWN0ZWQ6Cgog
ICAgc3RyZWFtc2l6ZSBfTV9wcmVjaXNpb247CiAgICBzdHJlYW1zaXplIF9NX3dpZHRoOwogICAg
Zm10ZmxhZ3MgX01fZmxhZ3M7CgoKCiAgICBzdHJ1Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAg
ICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0OwogICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJh
Y2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsKICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNv
dW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4s
IGludCBfX2luZGV4LAogICAgICAgICAgICAgICAgICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikK
ICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihfX2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9N
X3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAogICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBf
X2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsgfQoKICAgICAgaW50CiAgICAgIF9NX3JlbW92
ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9NX3JlZmNvdW50LCAt
MSk7IH0KCiAgICB9OwoKICAgICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZv
aWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAog
ICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsK
ICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICB9OwoKICAgIHN0
YXRpYyBjb25zdCBpbnQgX1NfbG9jYWxfd29yZHMgPSA4OwogICAgX1dvcmRzIF9NX3dvcmRfYXJy
YXlbX1NfbG9jYWxfd29yZHNdOwogICAgX1dvcmRzIF9NX2R1bW15OwogICAgX1dvcmRzKiBfTV93
b3JkczsKICAgIGludCBfTV93b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29y
ZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAg
ICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBm
cmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfklu
aXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMp
OwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRl
OgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9T
X3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFn
cygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBm
bGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2Zs
YWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K
CiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAg
ICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsK
ICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0Zihm
bXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9f
b2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdz
IHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlu
bGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21h
c2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1
cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihz
dHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNp
c2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAg
ICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01f
d2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dp
ZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lk
dGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAog
ICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAg
aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9j
KCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4
YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAg
ICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAg
ICAgICAgICAgICAgICAgICA/IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsK
ICAgICAgcmV0dXJuIF9fd29yZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAg
ICBwd29yZChpbnQgX19peCkKICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9N
X3dvcmRfbGltaXQpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBf
TV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoK
CiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgoKICBwcml2
YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jhc2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9w
ZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9OwoKCiAgaW5saW5lIGlvc19iYXNlJgogIGJv
b2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpi
b29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBu
b2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jh
c2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jh
c2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2Um
CiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9z
X2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jh
c2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z
X2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i
YXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg
aW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0
Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlv
c19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9z
X2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNl
JgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19i
YXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFz
ZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYo
aW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlv
c19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYo
aW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9z
X2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS51bnNl
dGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5l
IGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5z
ZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1
cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZp
ZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQo
aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlv
c19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBp
b3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3Nf
YmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK
ICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNl
LnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19i
YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG9jdChpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3QsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2Um
IF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpm
bG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
c2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl
OjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCn0KIyA1MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvaW9zIiAyIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9zdHJlYW1idWYiIDEgMwojIDQ0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zdHJlYW1idWYiIDMKCgoKCgoKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OmludF90
eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpwb3NfdHlw
ZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2ZmX3R5cGUg
b2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9fY3R5cGVfdHlwZTsK
ICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19z
dHJlYW1idWZfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwg
dHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUs
IHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0b3I8Y2hh
cl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtYnVmX2l0ZXJh
dG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0cmVhbXNpemUKICAg
ICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4m
IF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Jp
bixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6CgoKCgoKICAgICAg
Y2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgaW50X3R5cGUgX01fYnVmX3NpemU7CgoKICAgICAg
aW50X3R5cGUgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1Zl91bmlmaWVkOwoK
CgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9j
dXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9i
ZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRf
ZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAgICAgIGxvY2FsZSBf
TV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0OwoKCgoKCgogICAg
ICBpbnRfdHlwZSBfTV9wYmFja19zaXplOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNrOwogICAg
ICBjaGFyX3R5cGUqIF9NX3BiYWNrX2N1cl9zYXZlOwogICAgICBjaGFyX3R5cGUqIF9NX3BiYWNr
X2VuZF9zYXZlOwogICAgICBib29sIF9NX3BiYWNrX2luaXQ7CgoKCgogICAgICB2b2lkCiAgICAg
IF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9NX3BiYWNrX2luaXQpCiAg
ICAgICAgICB7CiAgICAgICAgICAgIGludF90eXBlIF9fZGlzdCA9IF9NX2luX2VuZCAtIF9NX2lu
X2N1cjsKICAgICAgICAgICAgaW50X3R5cGUgX19sZW4gPSBtaW4oX01fcGJhY2tfc2l6ZSwgX19k
aXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJhY2ssIF9NX2luX2N1ciwg
X19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9NX2luX2N1cjsKICAgICAg
ICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAgICAgICAgIHRoaXMtPnNl
dGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsKICAgICAgICAgICAgX01f
cGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAgICAgIHZvaWQKICAg
ICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkK
ICAgICAgICAgIHsKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2N1ciA9IF9NX2luX2N1ciAt
IF9NX3BiYWNrOwoKCiAgICAgICAgICAgIGludF90eXBlIF9fb2ZmX2VuZCA9IDA7CiAgICAgICAg
ICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7CiAgICAgICAg
ICAgIGludF90eXBlIF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsKICAg
ICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBfX29m
Zl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5zZXRn
KF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9wYmFj
a19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfX251
bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAg
fQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAg
ewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIg
Kz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAg
ICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDE5OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAg
ICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190
ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAgICAgIGlm
IChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBfX247
CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAgICAgewogICAgICAg
ICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikK
ICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQogICAgICB9CgoKCgog
ICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7CiAgICAgICAgb2Zm
X3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAgICAgICAgewoKICAg
ICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAgICAgIF9fcmV0ID0g
X01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAg
fQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDI0MSAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQK
ICAgICAgX01fc2V0X2luZGV0ZXJtaW5hdGUodm9pZCkKICAgICAgewogICAgICAgIGlmIChfTV9t
b2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgdGhpcy0+c2V0ZyhfTV9idWYsIF9NX2J1Ziwg
X01fYnVmKTsKICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICB0
aGlzLT5zZXRwKF9NX2J1ZiwgX01fYnVmKTsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9z
ZXRfZGV0ZXJtaW5hdGUob2ZmX3R5cGUgX19vZmYpCiAgICAgIHsKICAgICAgICBib29sIF9fdGVz
dGluID0gX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9N
X21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgIHRo
aXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAgICAgICBpZiAoX190
ZXN0b3V0KQogICAgICAgICAgdGhpcy0+c2V0cChfTV9idWYsIF9NX2J1ZiArIF9fb2ZmKTsKICAg
ICAgfQoKICAgICAgYm9vbAogICAgICBfTV9pc19pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsK
ICAgICAgICBib29sIF9fcmV0ID0gZmFsc2U7CgogICAgICAgIGlmIChfTV9idWYpCiAgICAgICAg
ICB7CiAgICAgICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6OmluKQogICAgICAgICAgICAg
IF9fcmV0ID0gX01faW5fYmVnID09IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPT0gX01faW5fZW5k
OwogICAgICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICAgICAg
X19yZXQgPSBfTV9vdXRfYmVnID09IF9NX291dF9jdXIgJiYgX01fb3V0X2N1ciA9PSBfTV9vdXRf
ZW5kOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICBwdWJsaWM6
CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIHsKICAgICAgICBf
TV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXplID0gMDsKICAgICAgICBf
TV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3NfYmFzZTo6b3Blbm1vZGUo
MCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAgICAgIH0KCgogICAgICBs
b2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykKICAgICAgewogICAgICAg
IGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhpcy0+aW1idWUoX19sb2Mp
OwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgbG9jYWxlCiAgICAgIGdldGxv
YygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZV9pbml0KQogICAgICAg
ICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIGxv
Y2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoKICAgICAgcHVic2V0YnVm
KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+c2V0
YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVic2Vla29mZihvZmZfdHlw
ZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAgICAgICAgICAgaW9zX2Jh
c2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAg
IHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21vZGUpOyB9CgogICAgICBw
b3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQp
CiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2RlKTsgfQoKICAgICAgaW50
CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0KCgoKICAgICAgc3RyZWFt
c2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJlYW1zaXplIF9fcmV0Owog
ICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAg
ewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICBpbnRfdHlwZSBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFj
a19jdXJfc2F2ZTsKICAgICAgICAgICAgICAgIGludF90eXBlIF9fcGJhY2tfbGVuID0gX01faW5f
Y3VyIC0gX01fcGJhY2s7CiAgICAgICAgICAgICAgICBfX3JldCA9IF9fc2F2ZV9sZW4gLSBfX3Bi
YWNrX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBf
X3JldCA9IHRoaXMtPmVncHRyKCkgLSB0aGlzLT5ncHRyKCk7CiAgICAgICAgICB9CiAgICAgICAg
ZWxzZQogICAgICAgICAgX19yZXQgPSB0aGlzLT5zaG93bWFueWMoKTsKICAgICAgICByZXR1cm4g
X19yZXQ7CiAgICAgIH0KCiAgICAgIGludF90eXBlCiAgICAgIHNuZXh0YygpCiAgICAgIHsKICAg
ICAgICBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICByZXR1cm4g
KHRoaXMtPnNidW1wYygpID09IF9fZW9mID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAg
fQoKICAgICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBz
Z2V0YygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5f
Y3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5
cGU6OnRvX2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAgICAgZWxzZQogICAgICAgICAg
X19yZXQgPSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0K
CiAgICAgIHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50
X3R5cGUKICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAg
ICAgc3VuZ2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2Mp
OwoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3Ry
ZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKF9fbnVs
bCksIF9NX2J1Zl9zaXplKDApLAogICAgICBfTV9idWZfc2l6ZV9vcHQoc3RhdGljX2Nhc3Q8aW50
X3R5cGU+KDgxOTIpKSwgX01fYnVmX3VuaWZpZWQoZmFsc2UpLAogICAgICBfTV9pbl9iZWcoMCks
IF9NX2luX2N1cigwKSwgX01faW5fZW5kKDApLCBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDAp
LAogICAgICBfTV9vdXRfZW5kKDApLCBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9N
X2J1Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBf
TV9wYmFja19zaXplKDEpLCBfTV9wYmFjayhfX251bGwpLAogICAgICBfTV9wYmFja19jdXJfc2F2
ZShfX251bGwpLCBfTV9wYmFja19lbmRfc2F2ZShfX251bGwpLCBfTV9wYmFja19pbml0KGZhbHNl
KQogICAgICB7IH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIGViYWNrKCkgY29uc3QgeyByZXR1
cm4gX01faW5fYmVnOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGdwdHIoKSBjb25zdCB7IHJl
dHVybiBfTV9pbl9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWdwdHIoKSBjb25zdCB7
IHJldHVybiBfTV9pbl9lbmQ7IH0KCiAgICAgIHZvaWQKICAgICAgZ2J1bXAoaW50IF9fbikgeyBf
TV9pbl9jdXIgKz0gX19uOyB9CgogICAgICB2b2lkCiAgICAgIHNldGcoY2hhcl90eXBlKiBfX2di
ZWcsIGNoYXJfdHlwZSogX19nbmV4dCwgY2hhcl90eXBlKiBfX2dlbmQpCiAgICAgIHsKICAgICAg
ICBfTV9pbl9iZWcgPSBfX2diZWc7CiAgICAgICAgX01faW5fY3VyID0gX19nbmV4dDsKICAgICAg
ICBfTV9pbl9lbmQgPSBfX2dlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpp
bikgJiYgX19nYmVnICYmIF9fZ25leHQgJiYgX19nZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9N
X21vZGUgfCBpb3NfYmFzZTo6aW47CiAgICAgIH0KCgogICAgICBjaGFyX3R5cGUqCiAgICAgIHBi
YXNlKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAg
ICBwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgog
ICAgICBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9NX291dF9lbmQ7IH0KCiAgICAgIHZvaWQKICAg
ICAgcGJ1bXAoaW50IF9fbikgeyBfTV9vdXRfY3VyICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAg
ICBzZXRwKGNoYXJfdHlwZSogX19wYmVnLCBjaGFyX3R5cGUqIF9fcGVuZCkKICAgICAgewogICAg
ICAgIF9NX291dF9iZWcgPSBfTV9vdXRfY3VyID0gX19wYmVnOwogICAgICAgIF9NX291dF9lbmQg
PSBfX3BlbmQ7CiAgICAgICAgaWYgKCEoX01fbW9kZSAmIGlvc19iYXNlOjpvdXQpICYmIF9fcGJl
ZyAmJiBfX3BlbmQpCiAgICAgICAgICBfTV9tb2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjpvdXQ7
CiAgICAgIH0KCgoKICAgICAgdmlydHVhbCB2b2lkCiAgICAgIGltYnVlKGNvbnN0IGxvY2FsZSYg
X19sb2MpCiAgICAgIHsKICAgICAgICBfTV9idWZfbG9jYWxlX2luaXQgPSB0cnVlOwogICAgICAg
IGlmIChfTV9idWZfbG9jYWxlICE9IF9fbG9jKQogICAgICAgICAgX01fYnVmX2xvY2FsZSA9IF9f
bG9jOwogICAgICB9CgoKICAgICAgdmlydHVhbCBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLF9U
cmFpdHM+KgogICAgICBzZXRidWYoY2hhcl90eXBlKiwgc3RyZWFtc2l6ZSkKICAgICAgeyByZXR1
cm4gdGhpczsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrb2ZmKG9mZl90eXBl
LCBpb3NfYmFzZTo6c2Vla2RpciwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBp
b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZf
dHlwZSgtMSkpOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5
cGUsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAg
ICAgdmlydHVhbCBpbnQKICAgICAgc3luYygpIHsgcmV0dXJuIDA7IH0KCgogICAgICB2aXJ0dWFs
IHN0cmVhbXNpemUKICAgICAgc2hvd21hbnljKCkgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVh
bCBzdHJlYW1zaXplCiAgICAgIHhzZ2V0bihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
OwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7IHJldHVy
biB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdWZs
b3coKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7
CiAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0aGlzLT51bmRlcmZsb3coKSA9PSBfX3JldDsKICAg
ICAgICBib29sIF9fdGVzdHBlbmRpbmcgPSBfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f
ZW5kOwogICAgICAgIGlmICghX190ZXN0ZW9mICYmIF9fdGVzdHBlbmRpbmcpCiAgICAgICAgICB7
CiAgICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpfTV9pbl9jdXIp
OwogICAgICAgICAgICArK19NX2luX2N1cjsKICAgICAgICAgICAgaWYgKF9NX2J1Zl91bmlmaWVk
ICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgICsrX01fb3V0X2N1cjsK
ICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCgogICAgICB2aXJ0dWFs
IGludF90eXBlCiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSA9IHRyYWl0c190eXBlOjplb2YoKSkK
ICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CgoKICAgICAgdmlydHVhbCBzdHJl
YW1zaXplCiAgICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24p
OwoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSA9IHRyYWl0
c190eXBlOjplb2YoKSkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9CiMgNTIy
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zdHJl
YW1idWYiIDMKICAgIHByaXZhdGU6CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zihjb25zdCBfX3N0cmVh
bWJ1Zl90eXBlJikgeyB9OwoKICAgICAgX19zdHJlYW1idWZfdHlwZSYKICAgICAgb3BlcmF0b3I9
KGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKSB7IHJldHVybiAqdGhpczsgfTsKCiAgICB9Owp9CgoK
CgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2J1bXBjKCkKICAgIHsKICAg
ICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01f
aW5fZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqZ3B0cigpOwogICAg
ICAgICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhp
cy0+dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlw
ZSBfX3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwg
X01faW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlw
ZTo6ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190
ZXN0bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBl
KF9fYykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEp
OwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIo
KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1
ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAg
ICBpZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cikKICAgICAgICB7CiAgICAg
ICAgICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0
b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Jl
dCA9IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUg
YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJl
YW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5cGUgX19jKQogICAgewog
ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZfc2l6ZSgpKQogICAgICAg
IHsKICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAgX01fb3V0X2N1cl9tb3Zl
KDEpOwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAg
ICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190
eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAg
ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c2dldG4oY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsK
ICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J1
Zl9sZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4g
MCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAt
IF9fcmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVt
YWluaW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2luX2N1ciwg
X19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyAr
PSBfX2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAg
IH0KCiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBpbnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAgICAgIGlmIChfX2MgIT0g
dHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICB0
cmFpdHNfdHlwZTo6YXNzaWduKCpfX3MrKywgdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2Mp
KTsKICAgICAgICAgICAgICAgICAgKytfX3JldDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIHhzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICB3aGlsZSAo
X19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgb2ZmX3R5cGUgX19idWZfbGVuID0gX01f
b3V0X2J1Zl9zaXplKCk7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4gMCkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIG9mZl90eXBlIF9fcmVtYWluaW5nID0gX19uIC0gX19yZXQ7CiAgICAg
ICAgICAgICAgb2ZmX3R5cGUgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAg
ICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fb3V0X2N1ciwgX19zLCBfX2xlbik7CiAg
ICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19zICs9IF9fbGVuOwog
ICAgICAgICAgICAgIF9NX291dF9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAgIH0KCiAgICAg
ICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRfdHlw
ZSBfX2MgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9fcykpOwog
ICAgICAgICAgICAgIGlmIChfX2MgIT0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgICArK19fczsK
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFt
c2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9f
aW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0
cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpp
bnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAwOwogICAgICBzdHJl
YW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZhaWwoKTsKICAgICAgc3RyZWFtc2l6ZSBf
X3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9fc2JvdXQtPl9NX21vZGUgJiBpb3NfYmFz
ZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICB3aGlsZSAoX190ZXN0cHV0ICYm
IF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyY3QgPSBf
X3Nib3V0LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgICBf
X3JldCArPSBfX3h0cmN0OwogICAgICAgICAgICAgIF9fc2Jpbi0+X01faW5fY3VyX21vdmUoX194
dHJjdCk7CiAgICAgICAgICAgICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX19zYmluLT5zZ2V0YygpID09IF9UcmFpdHM6
OmVvZigpKQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICBfX2J1
ZnNpemUgPSBfX3NiaW4tPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgIHsKICAgICAgICAgIF9faW9zLnNl
dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgIGlmICgoX19pb3MuZXhjZXB0aW9u
cygpICYgaW9zX2Jhc2U6OmZhaWxiaXQpICE9IDApCiAgICAgICAgICAgIHRocm93OwogICAgICAg
IH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
YmFzaWNfc3RyZWFtYnVmPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQog
ICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPGNoYXI+JiwgYmFzaWNfc3RyZWFtYnVmPGNo
YXI+KiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiopOwoKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZQogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPHdj
aGFyX3Q+JiwgYmFzaWNfc3RyZWFtYnVmPHdjaGFyX3Q+KiwKICAgICAgICAgICAgICAgICAgICAg
IGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiopOwp9CiMgNTM2ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zdHJlYW1idWYiIDIgMwojIDUxICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3MiIDIgMwoj
IDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvYmFzaWNfaW9zLmgiIDEgMwojIDM5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAzCgojIDEgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmX2l0
ZXJhdG9yLmgiIDEgMwojIDQxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zl9pdGVyYXRvci5oIiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0
b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3RyZWFt
YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9z
dHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1ZjsK
ICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAgb3N0
cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z
YnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJlYW1i
dWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9zYnVm
KF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y
JgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAg
ICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl
cmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wKICAg
ICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0KICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlu
bGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFtYnVm
X2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAgewog
ICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUoX01f
c2J1Zi0+c3B1dGMoX19jKSxfVHJhaXRzOjplb2YoKSkpCiAgICAgIF9NX2ZhaWxlZCA9IHRydWU7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs
IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1
YmxpYyBpdGVyYXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
czo6b2ZmX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6
aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4gc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgc3Ry
ZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGludF90eXBlIF9NX2M7CgogICAgcHVibGljOgog
ICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKCkgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19udWxs
KSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYg
X19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSksIF9NX2MoLTIpIHsgfQoK
ICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19zKSB0aHJvdygpCiAg
ICAgIDogX01fc2J1ZihfX3MpLCBfTV9jKC0yKSB7IH0KCgoKCiAgICAgIGNoYXJfdHlwZQogICAg
ICBvcGVyYXRvciooKSBjb25zdAogICAgICB7CgogICAgICAgIGNoYXJfdHlwZSBfX3JldDsKICAg
ICAgICBpZiAoX01fc2J1ZiAmJiBfTV9jICE9IHN0YXRpY19jYXN0PGludF90eXBlPigtMikpCiAg
ICAgICAgICBfX3JldCA9IF9NX2M7CiAgICAgICAgZWxzZSBpZiAoX01fc2J1ZikKICAgICAgICAg
IF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9zYnVmLT5zZ2V0YygpKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZT4odHJhaXRz
X3R5cGU6OmVvZigpKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAgIGlzdHJl
YW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAgICAgICAgaWYgKF9N
X3NidWYpCiAgICAgICAgICBfTV9zYnVmLT5zYnVtcGMoKTsKICAgICAgICBfTV9jID0gLTI7CiAg
ICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciBf
X29sZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmKQogICAgICAgICAgX19vbGQuX01fYyA9
IF9NX3NidWYtPnNidW1wYygpOwogICAgICAgIF9NX2MgPSAtMjsKICAgICAgICByZXR1cm4gX19v
bGQ7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVy
YXRvciYgX19iKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6
ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNlb2YgPSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0
YygpID09IF9fZW9mOwogICAgICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmIHx8IF9fYi5f
TV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9f
YmVvZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wK
ICAgICAgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7
CiAgICAgICAgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9v
bCBfX3RoaXNlb2YgPSAhX01fc2J1ZiB8fCBfTV9zYnVmLT5zZ2V0YygpID09IF9fZW9mOwogICAg
ICAgIGJvb2wgX19iZW9mID0gIV9fYi5fTV9zYnVmIHx8IF9fYi5fTV9zYnVmLT5zZ2V0YygpID09
IF9fZW9mOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVvZiB8fCAoIV9fdGhpc2Vv
ZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25z
dCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAg
ICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7
IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBpc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYSwKICAgICAgICAgICAgICAgY29u
c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVy
biAhX19hLmVxdWFsKF9fYik7IH0KfQojIDQxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMSAzCiMgNDQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKCiMgMSAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY3djdHlwZSIgMSAzCiMgNDgg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2N3Y3R5
cGUiIDMKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAxIDMKIyAzNSAiL3Vzci9pbmNs
dWRlL3djdHlwZS5oIiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
bGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK
IyAzNiAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlw
ZS5oIiAzCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CiMgNzkgIi91c3IvaW5j
bHVkZS93Y3R5cGUuaCIgMwplbnVtCnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0g
MSwKICBfX0lTd2FscGhhID0gMiwKICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQs
CiAgX19JU3dzcGFjZSA9IDUsCiAgX19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAg
X19JU3dibGFuayA9IDgsCiAgX19JU3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9f
SVN3YWxudW0gPSAxMSwKCiAgX0lTd3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3d1cHBlcikpIDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3d1cHBlcikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBw
ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dsb3dlcikpIDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dsb3dlcikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93
ZXIpKSA+PiAyNCkpKSksCiAgX0lTd2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dhbHBoYSkpIDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxw
aGEpKSA+PiAyNCkpKSksCiAgX0lTd2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAo
KDFVTCA8PCAoX19JU3dkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50
KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGln
aXQpKSA+PiAyNCkpKSksCiAgX0lTd3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQp
ICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAo
aW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQg
PyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChf
X0lTd3hkaWdpdCkpID4+IDI0KSkpKSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dzcGFjZSkpID4+IDI0KSkpKSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dwcmludCkpID4+IDI0KSkpKSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dncmFwaCkpID4+IDI0KSkpKSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dibGFuaykpID4+IDI0KSkpKSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3djbnRybCkpID4+IDI0KSkpKSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dwdW5jdCkpID4+IDI0KSkpKSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/
IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2
ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAy
NCA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAo
X19JU3dhbG51bSkpID4+IDI0KSkpKQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBp
bnQgaXN3YWxudW0gKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2Fs
cGhhICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90
IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKCmV4dGVybiBpbnQgaXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgaXN3bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IGlzd3ByaW50ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3Qg
X193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhy
b3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoK
CgoKCmV4dGVybiBpbnQgaXN3YmxhbmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNzggIi91
c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNo
YXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3Qg
X193Yywgd2N0eXBlX3QgX19kZXNjKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQg
Kl9fY3R5cGUzMl9iOwojIDI0OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgX19j
b25zdCBfX2ludDMyX3QgKndjdHJhbnNfdDsKCgpleHRlcm4gd2ludF90IHRvd2xvd2VyICh3aW50
X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2Mp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNvbnN0IHdpbnRfdCAqX19jdHlwZTMyX3RvbG93ZXI7CmV4
dGVybiBjb25zdCB3aW50X3QgKl9fY3R5cGUzMl90b3VwcGVyOwojIDI3NSAiL3Vzci9pbmNsdWRl
L3djdHlwZS5oIiAzCn0KIyAyODggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gIkMi
IHsKCgoKZXh0ZXJuIHdjdHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkp
IHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFu
c190IF9fZGVzYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2lu
dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQg
X19pc3dhbHBoYV9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBfX2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wg
KHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBp
bnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9f
bG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193
YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3Bh
Y2VfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX2lzd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdp
bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlw
ZV90IF9fd2N0eXBlX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xv
Y2FsZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBf
X3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gd2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxl
X3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50
X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5z
X3QgX193Y3RyYW5zX2wgKF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xv
Y2FsZSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRf
dCBfX3djLCB3Y3RyYW5zX3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2N3Y3R5cGUiIDIgMwojIDc3ICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jd2N0eXBlIiAz
Cm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90Owog
IHVzaW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxw
aGE7CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3
ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6
aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5n
IDo6aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1
c2luZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsK
ICB1c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7
Cn0KIyA0OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKyst
djMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pb3MiIDEgMwojIDUwICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2
NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2N0eXBlX2Jh
c2UuaCIgMSAzCiMgNTAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVj
dCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAg
ICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBl
ciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAg
IHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRp
Z2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBj
b25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9
IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0
YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBh
bG51bSA9IF9JU2FsbnVtOwogIH07CiMgNTYgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFzZSA6IHB1
YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBpcyhtYXNr
IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19t
LCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNoYXJfdHlw
ZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBjb25zdCBj
aGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2Fu
X2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nh
bl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9fbG8sIF9f
aGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBfX2hpKTsg
fQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7IH0KCiAg
ICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lkZW4oY29u
c3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBjb25zdAog
ICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoKICAgICAg
Y2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAg
ICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAgICBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNo
YXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpfX3RvKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19kZmF1bHQs
IF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9
CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAg
IHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Qg
PSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBtYXNrKiBf
X3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv
X3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg
Y2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf
X2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25z
dCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91cHBlcihj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAg
dmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsK
CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlw
ZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7CgogICAg
ICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkg
Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJv
dyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAg
ICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAgIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1YmxpYyBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjptYXNrIG1h
c2s7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgICAgc3RhdGljIGxvY2Fs
ZTo6aWQgaWQ7CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlKCk7Cgog
ICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNvbnN0IGNo
YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9f
bSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t
LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUg
X19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xv
d2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19sbywgY29u
c3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
aGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBjaGFyX3R5
cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNoYXIgX19k
ZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8Pgog
ICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPGNoYXI+
CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoKICAgIHBy
b3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAgIGJvb2wg
X01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBlIF9NX3Rv
bG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAgICAgc3Rh
dGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVfc2l6ZSA9
IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNpdAogICAg
ICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNlLCBzaXpl
X3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9f
Y2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwKICAgICAg
ICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAgaXMobWFz
ayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBp
cyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykgY29uc3Q7
CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3Qg
Y2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUgY29uc3Qg
Y2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNo
YXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoKICAgICAg
dGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBz
dGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7CgogICAgICB2
aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1h
c2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSog
X19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq
CiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3Qg
Y2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgog
ICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj
aGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVh
bCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25z
dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNo
YXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3co
Y29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAg
ICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihj
b25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlwZTx3Y2hh
cl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsKICAgIHB1
YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgd2N0
eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9j
X2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4
cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCk7
CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVydF90b193
bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgp
OwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19j
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25z
dCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFz
ayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNr
IF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
X3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91
cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv
bnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIo
Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIq
IF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAg
ICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xv
LCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBj
aGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBl
PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJiBf
X2xvYyk7CgoKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMvY3R5cGVfaW5saW5lLmgiIDEgMwojIDM3
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0
LXVua25vd24tbGludXgvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wKICBjdHlwZTxjaGFy
Pjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJuIF9NX3RhYmxlW3N0
YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNvbnN0IGNoYXIqCiAg
Y3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gs
IG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCkKICAgICAg
Kl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3crKyld
OwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46Ogog
IHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gp
IGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgIShfTV90
YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9fbSkpCiAgICAgICsr
X19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0eXBlPGNoYXI+
OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9f
aGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAgICAgICAgICAmJiAo
X01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBfX20pICE9IDAp
CiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDM5MyAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnlu
YW1lIDogcHVibGljIGN0eXBlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGVfYnluYW1lKGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAg
dmlydHVhbAogICAgICB+Y3R5cGVfYnluYW1lKCkgeyB9OwogICAgfTsKCgogIHRlbXBsYXRlPD4K
ICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg
cmVmcyk7CgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTx3Y2hhcl90Pjo6Y3R5cGVfYnlu
YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDUg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
Y29kZWN2dC5oIiAzCgoKICBjbGFzcyBjb2RlY3Z0X2Jhc2UKICB7CiAgcHVibGljOgogICAgZW51
bSByZXN1bHQKICAgIHsKICAgICAgb2ssCiAgICAgIHBhcnRpYWwsCiAgICAgIGVycm9yLAogICAg
ICBub2NvbnYKICAgIH07CiAgfTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIF9fY29kZWN2dF9h
YnN0cmFjdF9iYXNlCiAgICA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY29kZWN2dF9i
YXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0
IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRl
ZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfU3RhdGVUIHN0YXRlX3R5cGU7
CgoKICAgICAgcmVzdWx0CiAgICAgIG91dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQs
IGNvbnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBleHRlcm5fdHlwZSog
X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv
X25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9fb3V0KF9fc3RhdGUs
IF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3RvLCBfX3RvX2VuZCwgX190b19uZXh0KTsKICAgICAgfQoKICAgICAgcmVzdWx0CiAg
ICAgIHVuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy
bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdW5zaGlmdChfX3N0YXRlLCBfX3RvLF9fdG9f
ZW5kLF9fdG9fbmV4dCk7IH0KCiAgICAgIHJlc3VsdAogICAgICBpbihzdGF0ZV90eXBlJiBfX3N0
YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
aW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgaW50ZXJu
X3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+ZG9f
aW4oX19zdGF0ZSwgX19mcm9tLCBfX2Zyb21fZW5kLCBfX2Zyb21fbmV4dCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAg
IGludAogICAgICBlbmNvZGluZygpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+
ZG9fZW5jb2RpbmcoKTsgfQoKICAgICAgYm9vbAogICAgICBhbHdheXNfbm9jb252KCkgY29uc3Qg
dGhyb3coKQogICAgICB7IHJldHVybiB0aGlzLT5kb19hbHdheXNfbm9jb252KCk7IH0KCiAgICAg
IGludAogICAgICBsZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6
ZV90IF9fbWF4KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19sZW5ndGgoX19zdGF0ZSwg
X19mcm9tLCBfX2VuZCwgX19tYXgpOyB9CgogICAgICBpbnQKICAgICAgbWF4X2xlbmd0aCgpIGNv
bnN0IHRocm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbWF4X2xlbmd0aCgpOyB9CgogICAg
cHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZShz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICB2aXJ0
dWFsCiAgICAgIH5fX2NvZGVjdnRfYWJzdHJhY3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBy
ZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29u
c3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBf
X3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9f
dG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlm
dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAg
ICBleHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9
IDA7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl
LCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAg
ICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg
aW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAg
ICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKSA9IDA7CgogICAgICB2aXJ0dWFsIGJvb2wK
ICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVh
bCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl
X3QgX19tYXgpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5n
dGgoKSBjb25zdCB0aHJvdygpID0gMDsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k
ZWN2dAogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRl
cm5ULCBfU3RhdGVUPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jh
c2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAg
ICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBz
dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK
ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJh
Y3RfYmFzZTxfSW50ZXJuVCxfRXh0ZXJuVCxfU3RhdGVUPiAoX19yZWZzKSB7IH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKSB7IH0KCiAgICAgIHZpcnR1YWwg
cmVzdWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlw
ZSogX19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNv
bnN0IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSog
X190bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBf
X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBl
eHRlcm5fdHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zy
b21fZW5kLCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRl
cm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5f
dHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNv
ZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlz
X25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5n
dGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAg
IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlw
ZW5hbWUgX1N0YXRlVD4KICAgIGxvY2FsZTo6aWQgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs
IF9TdGF0ZVQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hh
ciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8Y2hhciwg
Y2hhciwgbWJzdGF0ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjaGFyIGlu
dGVybl90eXBlOwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg
bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAg
ICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0
CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGlu
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywg
ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25l
eHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90
eXBlJiBfX3N0YXRlLCBleHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5f
dHlwZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVy
bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5k
LCBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlw
ZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSom
IF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygp
IGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29u
digpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29u
c3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgog
IHRlbXBsYXRlPD4KICAgIGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Pgog
ICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0
ZV90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBl
OwogICAgICB0eXBlZGVmIGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90
IHN0YXRlX3R5cGU7CgoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNp
dAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAg
IHZpcnR1YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRv
X291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAg
ICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBl
KiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5
cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0
OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0
YXRlLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190
b19lbmQsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoK
ICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwKICAg
ICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sIGNvbnN0IGV4dGVybl90eXBlKiBf
X2Zyb21fZW5kLAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK
ICAgICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAg
ICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFs
CiAgICAgIGludCBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFsCiAg
ICAgIGJvb2wgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCk7CgogICAgICB2aXJ0dWFs
CiAgICAgIGludCBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBl
KiBfX2Zyb20sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBz
aXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0
aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5U
LCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnRf
YnluYW1lIDogcHVibGljIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPgogICAg
ewogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0X2J5bmFtZShjb25zdCBj
aGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVy
blQsIF9TdGF0ZVQ+KF9fcmVmcykgeyB9CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg
ICAgfmNvZGVjdnRfYnluYW1lKCkgeyB9CiAgICB9OwoKCgoKIyAxICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0
cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA1MCAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaWE2NC11bmtub3duLWxpbnV4L2JpdHMv
Y29kZWN2dF9zcGVjaWFsaXphdGlvbnMuaCIgMwogIGNsYXNzIF9fZW5jX3RyYWl0cwogIHsKICBw
dWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19kZXNjX3R5cGU7CgogIHByb3RlY3RlZDoK
CgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6ZSA9IDMyOwoKICAgIGNoYXIgX01faW50
X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9leHRfZW5jW19TX21heF9zaXplXTsKCgog
ICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBfX2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsK
CgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBfTV9pbnRfYm9tOwoKICBwdWJsaWM6CiAg
ICBleHBsaWNpdCBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVz
YygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewogICAgICBtZW1zZXQoX01f
aW50X2VuYywgMCwgX1NfbWF4X3NpemUpOwogICAgICBtZW1zZXQoX01fZXh0X2VuYywgMCwgX1Nf
bWF4X3NpemUpOwogICAgfQoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cyhjb25zdCBsb2NhbGUm
IF9fbG9jKQogICAgOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgw
KSwgX01faW50X2JvbSgwKQogICAgewoKCgoKICAgICAgc3RyY3B5KF9NX2ludF9lbmMsICJVQ1M0
Iik7CgoKCiAgICAgIF9fY19sb2NhbGUgX19jbG9jOwogICAgICBsb2NhbGU6OmZhY2V0OjpfU19j
cmVhdGVfY19sb2NhbGUoX19jbG9jLCBfX2xvYy5uYW1lKCkuY19zdHIoKSk7CiAgICAgIHN0cmNw
eShfTV9leHRfZW5jLCBfX25sX2xhbmdpbmZvX2woQ09ERVNFVCwgX19jbG9jKSk7CiAgICAgIGxv
Y2FsZTo6ZmFjZXQ6Ol9TX2Rlc3Ryb3lfY19sb2NhbGUoX19jbG9jKTsKICAgIH0KCiAgICBleHBs
aWNpdCBfX2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2lib20gPSAwLCBpbnQgX19lYm9tID0gMCkK
ICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2lu
dF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3Np
emUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9
CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNfdHJhaXRzJiBfX29iaik6IF9NX2lu
X2Rlc2MoMCksIF9NX291dF9kZXNjKDApCiAgICB7CiAgICAgIHN0cm5jcHkoX01faW50X2VuYywg
X19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMs
IF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01fZXh0X2JvbSA9IF9fb2Jq
Ll9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgfQoK
CiAgICBfX2VuY190cmFpdHMmCiAgICBvcGVyYXRvcj0oY29uc3QgX19lbmNfdHJhaXRzJiBfX29i
aikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29iai5fTV9pbnRfZW5jLCBfU19t
YXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19vYmouX01fZXh0X2VuYywgX1Nf
bWF4X3NpemUpOwogICAgICBfTV9pbl9kZXNjID0gMDsKICAgICAgX01fb3V0X2Rlc2MgPSAwOwog
ICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9f
b2JqLl9NX2ludF9ib207CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9f
ZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlm
IChfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2Uo
X01faW5fZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2Vy
cikKICAgICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAg
X01faW5pdCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnBy
ZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAg
ICAgICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsK
ICAgICAgICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1
bnRpbWVfZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwog
ICAgICAgIH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9v
dXRfZGVzYyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBp
ZiAoX01fb3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJv
cigiY3JlYXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0K
ICAgIH0KCiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5
cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rl
c3QgPSBfTV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBf
TV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsK
ICAgIH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkK
ICAgIHsgcmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBf
TV9nZXRfb3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAg
aW50CiAgICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0K
CiAgICBpbnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2Jv
bTsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0
dXJuIF9NX2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2Vu
YygpCiAgICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFj
dF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVk
ZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5
cGU7CiAgICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYg
X19lbmNfdHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2Vu
Y190cmFpdHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2Rl
Y3Z0X2Fic3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihf
X3JlZnMpCiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBl
KiBfX2VuYywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jh
c2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAg
ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0
IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19m
cm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4
dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRl
cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBk
b191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAg
ICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQp
IGNvbnN0OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAg
ICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAg
ICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAg
ICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAg
ICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAg
ICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJv
bSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0
aHJvdygpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5UPgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9f
ZW5jX3RyYWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUg
c2l6ZV90CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBz
aXplX3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19j
ZCwgY2hhcioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAg
IGNoYXIqKiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5j
KF9fY2QsIChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2Rl
Y3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3Ry
YWl0cz46OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBl
KiBfX2Zyb20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0
IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8s
IGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4
dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0
YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9f
ZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVz
YyA9IF9fc3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXpl
X3QgX19mbXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9f
ZmJ5dGVzID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBj
b25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAg
c2l6ZV90IF9fdGJ5dGVzID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAg
ICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAg
ICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAg
ICAgIGludCBfX2ludF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAg
ICAgIGlmIChfX2ludF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19z
aXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19j
Zml4ZWQgPSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9m
KGludGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBd
ID0gc3RhdGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hh
cl90cmFpdHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUp
OwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhl
ZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNj
LCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2Zi
eXRlcywgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9j
YXN0PGludGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRl
cnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNv
bnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAg
ICAgICB9CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVy
bl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRf
Y2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo
X19mYnl0ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0
PGNvbnN0IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAg
ICAgIF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0
eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9J
bnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5
cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlw
ZSogX190b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICBy
ZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAg
IHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7
CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5f
ZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9m
KGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChf
X3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0
b3IoaWNvbnYsKl9fZGVzYywgX19udWxsLCBfX251bGwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICZfX2N0bywgJl9fdGxlbik7CgogICAgICAgICAgaWYgKF9fY29u
diAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX190b19uZXh0ID0g
cmVpbnRlcnByZXRfY2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBpZiAo
X190bGVuID09IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190bykpCiAgICAgICAgICAgICAg
ICBfX3JldCA9IG5vY29udjsKICAgICAgICAgICAgICBlbHNlIGlmIChfX3RsZW4gPT0gMCkKICAg
ICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgIF9fcmV0ID0gZXJyb3I7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVj
dnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJh
aXRzPjo6CiAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSog
X19mcm9tLAogICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGV4
dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50
ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv
bnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVycm9yOwogICAgICBpZiAoX19zdGF0ZS5f
TV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2Nf
dHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBf
X3N0YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19m
bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmxlbiA9
IF9fZm11bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pOwogICAgICAgICAgY29uc3Qgc2l6
ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKTsKICAgICAgICAgIHNpemVfdCBf
X3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hh
ciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIq
IF9fY2Zyb207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9f
ZXh0X2JvbSA9IF9fc3RhdGUuX01fZ2V0X2V4dGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9f
ZXh0X2JvbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zy
b21fZW5kIC0gX19mcm9tOwogICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX2NmaXhlZCA9IHN0
YXRpY19jYXN0PGV4dGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoZXh0ZXJuX3R5
cGUpICogKF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNf
Y2FzdDxleHRlcm5fdHlwZT4oX19leHRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxl
eHRlcm5fdHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAg
ICAgICAgX19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAg
ICAgICAgICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9t
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8s
ICZfX3RsZW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGV4dGVybl90eXBl
Kj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29u
diwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAgICAgICAgIH0KCgogICAgICAgICAg
aWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19m
cm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90eXBlKj4oX19jZnJvbSk7
CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlwZSo+
KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mbGVuIDwgc3RhdGljX2Nh
c3Q8c2l6ZV90PihfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGV4dGVybl90
eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ID0gcGFy
dGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46
OgogICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICB7CiAgICAgIGludCBfX3JldCA9
IDA7CiAgICAgIGlmIChzaXplb2YoX0V4dGVyblQpIDw9IHNpemVvZihfSW50ZXJuVCkpCiAgICAg
ICAgX19yZXQgPSBzaXplb2YoX0ludGVyblQpL3NpemVvZihfRXh0ZXJuVCk7CiAgICAgIHJldHVy
biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5UPgogICAgYm9vbAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3Ry
YWl0cz46OgogICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJu
IGZhbHNlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJu
VD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46
OgogICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19m
cm9tLAogICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4
KSBjb25zdAogICAgeyByZXR1cm4gbWluKF9fbWF4LCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZW5k
IC0gX19mcm9tKSk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUg
X0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190
cmFpdHM+OjoKICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICB7IHJldHVybiAx
OyB9CiMgMzM0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9iaXRzL2NvZGVjdnQuaCIgMiAzCiMgNDE4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAg
Y2xhc3MgX19udW1fYmFzZQogIHsKICBwcm90ZWN0ZWQ6CgogICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBfU19zY2FsZV9oZXg7CgoKICAgIHN0YXRpYyBjb25zdCBkb3VibGUgX1Nfc2NhbGVfb2N0OwoK
CgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRvbXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAg
IF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJvICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJv
ICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEKICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAog
ICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19iYXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNo
YXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBz
dGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciog
X19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2Nh
bGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50
OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAgICAgc3RyaW5nIF9NX2dyb3Vw
aW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV90cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01f
ZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6
ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlh
bGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9j
YWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAg
ICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUK
ICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2lt
YWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmlu
ZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5n
KCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFs
c2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAgICB2
aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg
ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg
ZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAg
dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVt
cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVt
cGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxpemVfbnVtcHVu
Y3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVu
Y3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDog
cHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2Nh
bGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBl
eHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAg
IF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBf
TV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9jYWxlX251bXB1bmN0KTsKICAgICAgfQoKICAg
IHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAg
eyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVt
X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J
bkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBs
aWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg
X19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4s
IF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChp
dGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBz
aG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw
ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAg
aXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf
YmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQg
bG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5
cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxv
bmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVy
X3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRl
cl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz
ZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3Yp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19l
cnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog
ICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7
IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0
ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcm
IF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRl
cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAg
ICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3Nf
YmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9vbCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlv
c19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp
b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVuc2lnbmVk
IGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf
dHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAg
ICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7CgogICAgICB2
aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19i
YXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWduZWQgbG9u
ZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0
ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwK
ICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmKSBjb25zdDsK
CiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB2b2lk
KiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVt
X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgX19udW1fYmFzZQogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9P
dXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhw
bGljaXQKICAgICAgbnVtX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs
LCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBf
X2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg
aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcg
X192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwg
X192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh
c2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJf
dHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9f
ZmlsbCwKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90
eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19m
aWxsLCBkb3VibGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBf
X2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgbG9uZyBkb3Vi
bGUgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmls
bCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3Qgdm9pZCogX192KSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsg
fQoKICAgIHByb3RlY3RlZDoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAg
ICBpdGVyX3R5cGUKICAgICAgICBfTV9jb252ZXJ0X2Zsb2F0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9f
bW9kLCBfVmFsdWVUIF9fdikgY29uc3Q7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVU
PgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRfaW50KGl0ZXJfdHlwZSwgaW9z
X2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciBfX21vZCwgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAgIGl0ZXJfdHlw
ZQogICAgICBfTV93aWRlbl9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNv
bnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2ludChpdGVyX3R5cGUsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAgICAgICAgICAg
ICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9pbnNlcnQoaXRl
cl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSogX193cywgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIHZpcnR1YWwK
ICAgICAgfm51bV9wdXQoKSB7IH07CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19w
dXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp
dGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19m
aWxsLCB1bnNpZ25lZCBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg
ICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9u
ZyBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJf
dHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcpIGNv
bnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlv
c19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlw
ZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGNv
bnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9PdXRJ
dGVyPjo6aWQ7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRl
IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg
X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp
bmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9j
b2xsYXRlOwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBjb2xsYXRlKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6
ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2NfbG9jYWxlX2NvbGxhdGUgPSBfU19jbG9uZV9jX2xv
Y2FsZShfU19jX2xvY2FsZSk7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRlKF9fY19s
b2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9f
cmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2NhbGUoX19j
bG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29u
c3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25z
dCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9f
bG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJh
bnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcK
ICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAgIGludAog
ICAgICBfTV9jb21wYXJlX2hlbHBlcihjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBjb25z
dDsKCiAgICAgIHNpemVfdAogICAgICBfTV90cmFuc2Zvcm1faGVscGVyKF9DaGFyVCosIGNvbnN0
IF9DaGFyVCosIHNpemVfdCkgY29uc3Q7CgogIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+Y29sbGF0ZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9jb2xs
YXRlKTsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fY29tcGFyZShjb25zdCBfQ2hhclQq
IF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFy
VCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp
bmdfdHlwZQogICAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hh
clQqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBsb25nCiAgICAgIGRvX2hhc2goY29uc3Qg
X0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjb2xsYXRlPF9DaGFyVD46OmlkOwoK
CiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPGNoYXI+OjpfTV9jb21wYXJlX2hlbHBl
cihjb25zdCBjaGFyKiwgY29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXpl
X3QKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX3RyYW5zZm9ybV9oZWxwZXIoY2hhciosIGNvbnN0IGNo
YXIqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdj
aGFyX3Q+OjpfTV9jb21wYXJlX2hlbHBlcihjb25zdCB3Y2hhcl90KiwgY29uc3Qgd2NoYXJfdCop
IGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9N
X3RyYW5zZm9ybV9oZWxwZXIod2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0
ZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9f
cmVmcyA9IDApCiAgICAgIDogY29sbGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAg
IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3Jl
YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90
ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoK
CiAgY2xhc3MgdGltZV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9f
b3JkZXIsIGRteSwgbWR5LCB5bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGNsYXNzIF9fdGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j
YWxlOjppZCBpZDsKCgogICAgICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRd
OwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7
CiAgICAgIGNvbnN0IGNoYXIqIF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBf
TV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1h
dDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwog
ICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3
OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9N
X2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFy
VCogX01fZGF5X2E0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAg
IGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAy
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hh
clQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAg
ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250
aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBj
b25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9h
MDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQq
IF9NX21vbnRoX2EwNjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fbW9udGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2Ew
OTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCog
X01fbW9udGhfYTExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJs
aWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQog
ICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoIkMiKQogICAg
ICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9f
dGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3Jl
ZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3Qo
X19zKQogICAgICB7IF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIHZv
aWQKICAgICAgX01fcHV0X2hlbHBlcihfQ2hhclQqIF9fcywgc2l6ZV90IF9fbWF4bGVuLCBjb25z
dCBfQ2hhclQqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKiBfX3RtKSBj
b25zdDsKCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9f
ZGF0ZSkgY29uc3QKICAgICAgewoKICAgICAgICBfX2RhdGVbMF0gPSBfTV9kYXRlX2Zvcm1hdDsK
ICAgICAgICBfX2RhdGVbMV0gPSBfTV9kYXRlX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZv
aWQKICAgICAgX01fdGltZV9mb3JtYXRzKGNvbnN0IF9DaGFyVCoqIF9fdGltZSkgY29uc3QKICAg
ICAgewoKICAgICAgICBfX3RpbWVbMF0gPSBfTV90aW1lX2Zvcm1hdDsKICAgICAgICBfX3RpbWVb
MV0gPSBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fYW1w
bShjb25zdCBfQ2hhclQqKiBfX2FtcG0pIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2FtcG1bMF0g
PSBfTV9hbTsKICAgICAgICBfX2FtcG1bMV0gPSBfTV9wbTsKICAgICAgfQoKICAgICAgdm9pZAog
ICAgICBfTV9kYXRlX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2R0KSBjb25zdAogICAg
ICB7CgogICAgICAgIF9fZHRbMF0gPSBfTV9kYXRlX3RpbWVfZm9ybWF0OwogICAgICAgIF9fZHRb
MV0gPSBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBf
TV9kYXlzKGNvbnN0IF9DaGFyVCoqIF9fZGF5cykgY29uc3QKICAgICAgewogICAgICAgIF9fZGF5
c1swXSA9IF9NX2RheTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5MjsKICAgICAgICBfX2Rh
eXNbMl0gPSBfTV9kYXkzOwogICAgICAgIF9fZGF5c1szXSA9IF9NX2RheTQ7CiAgICAgICAgX19k
YXlzWzRdID0gX01fZGF5NTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXk2OwogICAgICAgIF9f
ZGF5c1s2XSA9IF9NX2RheTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5c19hYmJy
ZXZpYXRlZChjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2Rh
eXNbMF0gPSBfTV9kYXlfYTE7CiAgICAgICAgX19kYXlzWzFdID0gX01fZGF5X2EyOwogICAgICAg
IF9fZGF5c1syXSA9IF9NX2RheV9hMzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXlfYTQ7CiAg
ICAgICAgX19kYXlzWzRdID0gX01fZGF5X2E1OwogICAgICAgIF9fZGF5c1s1XSA9IF9NX2RheV9h
NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXlfYTc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAg
ICAgX01fbW9udGhzKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAg
ICAgX19tb250aHNbMF0gPSBfTV9tb250aDAxOwogICAgICAgIF9fbW9udGhzWzFdID0gX01fbW9u
dGgwMjsKICAgICAgICBfX21vbnRoc1syXSA9IF9NX21vbnRoMDM7CiAgICAgICAgX19tb250aHNb
M10gPSBfTV9tb250aDA0OwogICAgICAgIF9fbW9udGhzWzRdID0gX01fbW9udGgwNTsKICAgICAg
ICBfX21vbnRoc1s1XSA9IF9NX21vbnRoMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250
aDA3OwogICAgICAgIF9fbW9udGhzWzddID0gX01fbW9udGgwODsKICAgICAgICBfX21vbnRoc1s4
XSA9IF9NX21vbnRoMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aDEwOwogICAgICAg
IF9fbW9udGhzWzEwXSA9IF9NX21vbnRoMTE7CiAgICAgICAgX19tb250aHNbMTFdID0gX01fbW9u
dGgxMjsKICAgICAgfQoKICAgICAgdm9pZAogICAgICBfTV9tb250aHNfYWJicmV2aWF0ZWQoY29u
c3QgX0NoYXJUKiogX19tb250aHMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX21vbnRoc1swXSA9
IF9NX21vbnRoX2EwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoX2EwMjsKICAgICAg
ICBfX21vbnRoc1syXSA9IF9NX21vbnRoX2EwMzsKICAgICAgICBfX21vbnRoc1szXSA9IF9NX21v
bnRoX2EwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoX2EwNTsKICAgICAgICBfX21v
bnRoc1s1XSA9IF9NX21vbnRoX2EwNjsKICAgICAgICBfX21vbnRoc1s2XSA9IF9NX21vbnRoX2Ew
NzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoX2EwODsKICAgICAgICBfX21vbnRoc1s4
XSA9IF9NX21vbnRoX2EwOTsKICAgICAgICBfX21vbnRoc1s5XSA9IF9NX21vbnRoX2ExMDsKICAg
ICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aF9hMTE7CiAgICAgICAgX19tb250aHNbMTFdID0g
X01fbW9udGhfYTEyOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5fX3RpbWVwdW5jdCgpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19sb2NhbGVfdGltZXB1bmN0
KQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV90aW1lcHVuY3QpOwog
ICAgICB9CgoKICAgICAgdm9pZAogICAgICBfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9j
YWxlIF9fY2xvYyA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBsb2NhbGU6OmlkIF9fdGltZXB1bmN0PF9DaGFyVD46OmlkOwoKCiAgdGVtcGxhdGU8Pgog
ICAgY29uc3QgY2hhcioKICAgIF9fdGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoK
ICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6
ZV90aW1lcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg
ICBfX3RpbWVwdW5jdDxjaGFyPjo6X01fcHV0X2hlbHBlcihjaGFyKiwgc2l6ZV90LCBjb25zdCBj
aGFyKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtKikgY29u
c3Q7CgoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2No
YXJfdD46Ol9TX3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGlt
ZXB1bmN0PHdjaGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xv
Yyk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9w
dXRfaGVscGVyKHdjaGFyX3QqLCBzaXplX3QsIGNvbnN0IHdjaGFyX3QqLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG0qKSBjb25zdDsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjb25zdCBfQ2hhclQqIF9fdGltZXB1bmN0PF9DaGFyVD46
Ol9TX3RpbWV6b25lc1sxNF07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJs
aWMgdGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy
X3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApCiAg
ICAgIDogbG9jYWxlOjpmYWNldCAoX19yZWZzKSB7IH0KCiAgICAgIGRhdGVvcmRlcgogICAgICBk
YXRlX29yZGVyKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZGF0ZV9vcmRlcigpOyB9
CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0
ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfdGlt
ZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBlCiAg
ICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X2RhdGUoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfd2Vla2RheShpdGVy
X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldF93ZWVrZGF5KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9f
dG0pOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19i
ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4g
dGhpcy0+ZG9fZ2V0X21vbnRobmFtZShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsg
fQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90
eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3ll
YXIoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfnRpbWVfZ2V0KCkgeyB9CgogICAgICB2aXJ0dWFsIGRhdGVvcmRl
cgogICAgICBkb19kYXRlX29yZGVyKCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jh
c2UmIF9faW8sCiAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0q
IF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X2RhdGUo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2Jl
ZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0X21vbnRobmFtZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf
X2VuZCwgaW9zX2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg
ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3Rt
KSBjb25zdDsKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19i
ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICAg
IGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VycikgY29uc3Q7CgoKCiAgICAgIHZvaWQKICAgICAgX01fZXh0cmFj
dF9uYW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIs
CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19p
bmRleGxlbiwKICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vycikg
Y29uc3Q7CgoKICAgICAgdm9pZAogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBl
JiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3Q7CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2Nh
bGU6OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBw
dWJsaWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgoKICAgICAg
dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBl
OwoKICAgICAgZXhwbGljaXQKICAgICAgdGltZV9nZXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXpl
X3QgX19yZWZzID0gMCkKICAgICAgOiB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+KF9fcmVmcykg
eyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldF9ieW5hbWUo
KSB7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBjbGFzcyB0aW1lX3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgdGlt
ZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6
aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkK
ICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25z
dCB0bSogX190bSwKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19iZWcsIGNvbnN0IF9DaGFyVCog
X19lbmQpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgIGNvbnN0IHRtKiBfX3Rt
LCBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19pbywgX19maWxsLCBfX3RtLCBfX2Zvcm1hdCwgX19tb2QpOyB9Cgog
ICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dCgpCiAgICAgIHsgfQoK
ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB0bSogX190bSwKICAgICAgICAgICAg
IGNoYXIgX19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgdGltZV9wdXQ8
X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lIDogcHVibGljIHRpbWVfcHV0
PF9DaGFyVCwgX091dEl0ZXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgZXhw
bGljaXQKICAgICAgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqICwgc2l6ZV90IF9fcmVmcyA9
IDApCiAgICAgIDogdGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4oX19yZWZzKQogICAgICB7IH07
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7
IH0KICAgIH07CgoKICBjbGFzcyBtb25leV9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcGFy
dCB7IG5vbmUsIHNwYWNlLCBzeW1ib2wsIHNpZ24sIHZhbHVlIH07CiAgICBzdHJ1Y3QgcGF0dGVy
biB7IGNoYXIgZmllbGRbNF07IH07CgogICAgc3RhdGljIGNvbnN0IHBhdHRlcm4gX1NfZGVmYXVs
dF9wYXR0ZXJuOwoKCgogICAgc3RhdGljIHBhdHRlcm4KICAgIF9TX2NvbnN0cnVjdF9wYXR0ZXJu
KGNoYXIgX19wcmVjZWRlcywgY2hhciBfX3NwYWNlLCBjaGFyIF9fcG9zbik7CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY2xhc3MgbW9uZXlwdW5jdCA6
IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbW9uZXlfYmFzZQogICAgewogICAgcHVibGlj
OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0
cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9
IF9JbnRsOwogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBj
aGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19z
ZXA7CiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKICAgICAgc3RyaW5nX3R5cGUgX01fY3Vycl9z
eW1ib2w7CiAgICAgIHN0cmluZ190eXBlIF9NX3Bvc2l0aXZlX3NpZ247CiAgICAgIHN0cmluZ190
eXBlIF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0
dGVybiBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVi
bGljOgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgp
OyB9CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBz
aXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9pbml0
aWFsaXplX21vbmV5cHVuY3QoX19jbG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2lt
YWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7
IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3Jv
dXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAg
ICBzdHJpbmdfdHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2N1cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZl
X3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0K
CiAgICAgIHN0cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBmcmFjX2Rp
Z2l0cygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAg
ICAgIHBhdHRlcm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3Bvc19mb3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCkgeyB9CgogICAgICB2aXJ0dWFsIGNo
YXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f
ZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNh
bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAg
IHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vycl9z
eW1ib2woKSBjb25zdAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAgdmly
dHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gX01fcG9zaXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg
ICBkb19uZWdhdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2ln
bjsgfQoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAg
IGRvX3Bvc19mb3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9Cgog
ICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX25lZ19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5pdGlhbGl6
ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5j
dDxfQ2hhclQsIF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBf
SW50bD4KICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAg
dGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlh
bGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9p
ZAogICAgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChf
X2NfbG9jYWxlIF9fY2xvYyk7CgoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0
PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Ns
b2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNl
Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnlu
YW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xv
Y2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf
Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu
Z190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhw
bGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAg
ewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3Mp
OwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0
KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5j
dF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlw
dW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K
ICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1v
bmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXpl
X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5
cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
IGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg
X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUK
ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdf
dHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9f
ZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5
cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2lu
dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog
ICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0
cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0
SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry
aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg
ICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg
eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs
LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91Ymxl
IF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwg
X19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy
X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5
cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0
dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0K
CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAg
ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p
bnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcg
ZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl
IF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7
CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog
ICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0
IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6
ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl
ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g
c3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2Nh
bGVfbWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAg
cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KSwgX01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBf
U19jbG9uZV9jX2xvY2FsZShfU19jX2xvY2FsZSk7IH0KCgogICAgICBleHBsaWNpdAogICAgICBt
ZXNzYWdlcyhfX2NfbG9jYWxlIF9fY2xvYywgY29uc3QgY2hhciogX19uYW1lLCBzaXplX3QgX19y
ZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgewogICAgICAgIF9N
X25hbWVfbWVzc2FnZXMgPSBfX25hbWU7CiAgICAgICAgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBf
U19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgICB9CgogICAgICBjYXRhbG9nCiAgICAgIG9w
ZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IH0KCgogICAgICBj
YXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxl
JiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZ2V0KGNhdGFs
b2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlwZSYgX19zKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBfX3NldCwgX19tc2dpZCwgX19z
KTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+bWVzc2FnZXMoKQogICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9j
YWxlX21lc3NhZ2VzKTsgfQoKICAgICAgdmlydHVhbCBjYXRhbG9nCiAgICAgIGRvX29wZW4oY29u
c3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX2dldChjYXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3Ry
aW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBkb19j
bG9zZShjYXRhbG9nKSBjb25zdDsKCgogICAgICBjaGFyKgogICAgICBfTV9jb252ZXJ0X3RvX2No
YXIoY29uc3Qgc3RyaW5nX3R5cGUmIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPihjb25zdF9jYXN0PF9DaGFyVCo+KF9fbXNnLmNfc3Ry
KCkpKTsKICAgICAgfQoKCiAgICAgIHN0cmluZ190eXBlCiAgICAgIF9NX2NvbnZlcnRfZnJvbV9j
aGFyKGNoYXIqIF9fbXNnKSBjb25zdAogICAgICB7CgogICAgICAgIHNpemVfdCBfX2xlbiA9IGNo
YXJfdHJhaXRzPGNoYXI+OjpsZW5ndGgoX19tc2cpIC0gMTsKIyAxNjgxICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
aCIgMwogICAgICAgIHJldHVybiBzdHJpbmdfdHlwZSgpOwogICAgICB9CiAgICAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBtZXNzYWdlczxfQ2hhclQ+Ojpp
ZDsKCgogIHRlbXBsYXRlPD4KICAgIHN0cmluZwogICAgbWVzc2FnZXM8Y2hhcj46OmRvX2dldChj
YXRhbG9nLCBpbnQsIGludCwgY29uc3Qgc3RyaW5nJikgY29uc3Q7CgoKIyAxICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGlu
dXgvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9pYTY0LXVua25vd24tbGludXgvYml0cy9t
ZXNzYWdlc19tZW1iZXJzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBl
bmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+OjpvcGVu
KGNvbnN0IGJhc2ljX3N0cmluZzxjaGFyPiYgX19zLCBjb25zdCBsb2NhbGUmIF9fbG9jLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2RpcikgY29uc3QKICAgIHsKICAg
ICAgYmluZHRleHRkb21haW4oX19zLmNfc3RyKCksIF9fZGlyKTsKICAgICAgcmV0dXJuIHRoaXMt
PmRvX29wZW4oX19zLCBfX2xvYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNhdGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFy
VD46OmRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGxvY2FsZSYpIGNvbnN0CiAgICB7CgoKICAgICAgdGV4dGRv
bWFpbihfX3MuY19zdHIoKSk7CiAgICAgIHJldHVybiAwOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxfQ2hhclQ+OjpzdHJpbmdfdHlwZQog
ICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RmYXVsdCkgY29uc3QKICAg
IHsKCgoKCgoKICAgICAgY29uc3QgY2hhciogX19vbGQgPSBzZXRsb2NhbGUoX19MQ19BTEwsIF9N
X25hbWVfbWVzc2FnZXMpOwogICAgICBjaGFyKiBfX21zZyA9IGRjZ2V0dGV4dCAoX19udWxsLCBf
TV9jb252ZXJ0X3RvX2NoYXIoX19kZmF1bHQpLCBfX0xDX01FU1NBR0VTKTsKICAgICAgc2V0bG9j
YWxlKF9fTENfQUxMLCBfX29sZCk7CiAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihf
X21zZyk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBt
ZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAogICAgeyB9CiMgMTY5NSAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNz
YWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBf
X3M7CiAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAg
ICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAg
ICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUo
KQogICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykK
ICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jh
c2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7
IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpw
cmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9v
bAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1
cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmws
IF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg
IGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2Mp
OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlzbG93ZXIo
X0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxj
dHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFy
VCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8
X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hhclQgX19j
LCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFy
VD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29u
c3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4o
X19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBs
b2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
YykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2Fs
ZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5p
cyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+
CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9f
bG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5
cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9j
KQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91cHBlcihf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAg
IHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi9i
dWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFz
ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsK
ICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3Ry
ZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9p
dGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9D
aGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoK
ICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFi
bGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAg
ICAgIGlvc3RhdGUgX01fZXhjZXB0aW9uOwoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz4qIF9NX3N0cmVhbWJ1ZjsKICAgICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7
CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9pb3NfZmN0eXBlOwoKICAgICAgY29uc3Qg
X19udW1wdXRfdHlwZSogX01fZm51bXB1dDsKCiAgICAgIGNvbnN0IF9fbnVtZ2V0X3R5cGUqIF9N
X2ZudW1nZXQ7CgogICAgcHVibGljOgogICAgICBjb25zdCBfX2N0eXBlX3R5cGUqCiAgICAgIF9N
X2dldF9mY3R5cGVfaW9zKHZvaWQpCiAgICAgIHsgcmV0dXJuIF9NX2lvc19mY3R5cGU7IH0KCiAg
ICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8g
MCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3Bl
cmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0
YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3Rh
dGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7
CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlz
LT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBn
b29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAg
IGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAm
IGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyBy
ZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAg
ICAgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgp
ICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0
aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19l
eGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoK
CiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoK
ICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90
aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9N
X3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFz
aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAg
eyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBf
VHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19y
aHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAg
aWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlz
LT53aWRlbignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAg
fQogICAgICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAg
ZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRo
aXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7
CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7
CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBj
b25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAg
cHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAg
ICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Ni
KTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCog
X19mKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2Jh
ZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg
X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi9i
dWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFz
aWNfaW9zLnRjYyIgMSAzCiMgMzQgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAg
YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNsZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsK
ICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19z
dGF0ZTsKICAgICAgZWxzZQogICAgICAgICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8
IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkp
KQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUoImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkg
Y2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJU
LCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwog
ICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQs
IF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3Qg
YmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jo
cy5fTV93b3JkX2xpbWl0IDw9IF9TX2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJh
eSA6IG5ldyBfV29yZHNbX19yaHMuX01fd29yZF9saW1pdF07CiMgNzcgIi9idWlsZHMvZ2NjLTNf
MS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIg
MwogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNrczsKICAgICAg
aWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAgICBfTV9jYWxs
X2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2Fy
cmF5KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fZGlzcG9zZV9jYWxsYmFj
a3MoKTsKCiAgICAgIF9NX2NhbGxiYWNrcyA9IF9fY2I7CiAgICAgIGZvciAoaW50IF9faSA9IDA7
IF9faSA8IF9fcmhzLl9NX3dvcmRfbGltaXQ7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9
IF9fcmhzLl9NX3dvcmRzW19faV07CiAgICAgIGlmIChfTV93b3JkcyAhPSBfTV93b3JkX2FycmF5
KQogICAgICAgIGRlbGV0ZSBbXSBfTV93b3JkczsKICAgICAgX01fd29yZHMgPSBfX3dvcmRzOwog
ICAgICBfTV93b3JkX2xpbWl0ID0gX19yaHMuX01fd29yZF9saW1pdDsKCiAgICAgIHRoaXMtPmZs
YWdzKF9fcmhzLmZsYWdzKCkpOwogICAgICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAg
ICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhzLnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9f
cmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+
ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRpb25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3Mo
Y29weWZtdF9ldmVudCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9D
aGFyVCwgX1RyYWl0cz46Om5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25z
dAogICAgewogICAgICBjaGFyIF9fcmV0ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9pb3NfZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2lvc19mY3R5cGUtPm5hcnJv
dyhfX2MsIF9fZGZhdWx0KTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBfQ2hhclQKICAgIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+Ojp3aWRlbihjaGFyIF9fYykgY29uc3QKICAgIHsKICAgICAgY2hh
cl90eXBlIF9fcmV0ID0gY2hhcl90eXBlKCk7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9p
b3NfZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2lvc19mY3R5cGUtPndpZGVuKF9fYyk7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGxvY2FsZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46
OmltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlz
LT5nZXRsb2MoKSk7CiAgICAgIGlvc19iYXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hl
X2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlmICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhp
cy0+cmRidWYoKS0+cHViaW1idWUoX19sb2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs
IF9UcmFpdHM+KiBfX3NiKQogICAgewoKICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAg
X01fY2FjaGVfZmFjZXRzKF9NX2lvc19sb2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9i
YXNpY19pb3MudGNjIiAzCiAgICAgIF9NX2ZpbGwgPSAwOwogICAgICBfTV9maWxsX2luaXQgPSBm
YWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9
IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNv
bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBl
PihfX2xvYykpCiAgICAgICAgX01faW9zX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBl
PihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9pb3NfZmN0eXBlID0gMDsKCiAgICAgIGlm
IChoYXNfZmFjZXQ8X19udW1wdXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1wdXQgPSAm
dXNlX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2Zu
dW1wdXQgPSAwOwogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKSkKICAg
ICAgICBfTV9mbnVtZ2V0ID0gJnVzZV9mYWNldDxfX251bWdldF90eXBlPihfX2xvYyk7CiAgICAg
IGVsc2UKICAgICAgICBfTV9mbnVtZ2V0ID0gMDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIGJhc2ljX2lvczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaW9z
PHdjaGFyX3Q+Owp9CiMgMjE1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA1MiAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaW9zIiAyIDMKIyA0NiAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMiAz
CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lv
czxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFy
VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50
X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAg
IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0
cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAg
ICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlw
ZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBs
aWNpdAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsg
dGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgp
IHsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgq
X19wZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3Bl
cmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7
CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoK
ICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAg
X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpi
YXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlv
c19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0
dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAg
ICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikK
ICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25n
PihfX24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9f
bikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpv
Y3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNl
CiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24p
KTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu
ZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVy
YXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh
dG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAg
ICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh
dGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w
ZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg
b3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlw
ZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAg
IHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29z
dHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgp
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwog
ICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlbnRyeQogICAgewoKICAg
ICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9NX29z
OwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJhc2ljX29zdHJlYW08
X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQogICAgICB7CgogICAgICAg
IGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYgIXVuY2F1Z2h0X2V4Y2Vw
dGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29zLnJkYnVmKCkgJiYgX01f
b3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgIF9NX29zLnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9CgogICAgICBvcGVyYXRvciBi
b29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291
dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hhciBfX2MpCiAgICB7IHJl
dHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRlbXBsYXRlIDxjbGFzcyBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo
YmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKTsKCgogIHRlbXBs
YXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAg
b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgc2lnbmVkIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
dW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgc3RhdGljX2Nhc3Q8Y2hh
cj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9fcyk7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFz
cyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y
PDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7
CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs
IGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19v
c3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWduZWQgY2hhciogX19zKQog
ICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykp
OyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9fb3MucHV0KF9fb3Mud2lk
ZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRzKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIF9fb3MucHV0KF9DaGFy
VCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVzaChiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLmZsdXNoKCk7IH0KCn0K
CgoKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL29zdHJlYW0udGNjIiAzCgojIDEgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2xvY2FsZSIgMSAz
CiMgNDMgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2xvY2FsZSIgMwoKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDEgMwojIDM3ICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNl
dHMudGNjIiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2NlcnJubyIgMSAzCiMgNDcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9p
bnN0YWxsL2luY2x1ZGUvZysrLXYzL2NlcnJubyIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEg
Ii91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvYml0cy9l
cnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgiIDEgMwoKCgojIDEgIi91
c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5v
LmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAyIDMKIyAzNiAiL3Vzci9p
bmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoKCmV4dGVybiBpbnQgKl9f
ZXJybm9fbG9jYXRpb24gKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKIyAzNyAiL3Vzci9pbmNsdWRlL2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJy
bm8uaCIgMwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2lu
dm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0
eXBlZGVmIGludCBlcnJvcl90OwojIDQ5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9jZXJybm8iIDIgMwojIDM5ICIvYnVpbGRzL2djYy0zXzEtYnJh
bmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
IDMKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysr
LXYzL2NtYXRoIiAxIDMKIyA0OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwv
aW5jbHVkZS9nKystdjMvY21hdGgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMK
IyAyOSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2lu
Y2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAz
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMSAzCiMgMjgg
Ii91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMwp0eXBlZGVmIGZsb2F0IGZsb2F0X3Q7Cgp0
eXBlZGVmIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMg
NjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2Fs
bHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4dGVybiBk
b3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hY29zIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFu
IChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ks
IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ks
IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4g
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nv
c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpf
X3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3No
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0
YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBf
X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmgg
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBm
cmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVy
biBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl
IF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRy
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMiAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3Qg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRv
dWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0
ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4
dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9f
eSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19kcmVtIChkb3VibGUgX194LCBkb3VibGUgX195
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2ln
biAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9f
Y29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVl
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBq
MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2owIChkb3VibGUpIHRocm93ICgp
OwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEg
KGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195MCAoZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4
dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChk
b3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4
dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1t
YSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBk
b3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1h
IChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1w
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWdu
Z2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4
dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgcmVtYWluZGVyIChkb3VibGUgX194
LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91Ymxl
IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRv
dWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3Vi
bGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIHRo
cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7
IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Jv
dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91Ymxl
IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZG91Ymxl
IF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQg
Kl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91
YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmlu
dCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50IChkb3VibGUg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcg
aW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRp
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGlt
IChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXgg
KGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAo
ZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lm
eSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3Vi
bGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBf
X2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQg
Ii91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDgyICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMg
MSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUv
Yml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZmxvYXQgYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZs
b2F0IGFzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hc2luZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgYXRhbjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf
X2F0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBj
b3NmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jb3NmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgdGFuZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBm
bG9hdCAqX19jb3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NmIChmbG9hdCBfX3gs
IGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxv
YXQgY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9h
dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgp
OyBleHRlcm4gZmxvYXQgX19zaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9h
dCB0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fdGFuaGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBhY29zaGYgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2Fjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBm
bG9hdCBhc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5oZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuaGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2F0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gZmxvYXQgZXhwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhw
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGV4cDEwZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
cG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZnJleHBmIChmbG9h
dCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAo
ZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsZGV4
cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19s
ZGV4cGYgKGZsb2F0IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBmbG9h
dCBsb2dmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2dmIChmbG9hdCBf
X3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBsb2cxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxv
YXQgbW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX21vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIHRocm93ICgpOwoKCgpleHRlcm4g
ZmxvYXQgZXhwbTFmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBtMWYg
KGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzFwZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBsb2diZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9n
YmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cDJmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBmbG9hdCBsb2cyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
bG9nMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBwb3dmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Bvd2YgKGZsb2F0IF9f
eCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NxcnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpl
eHRlcm4gZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy
biBmbG9hdCBfX2h5cG90ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGZsb2F0IGNicnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jYnJ0
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNlaWxmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19jZWlsZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgZmFic2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19mYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGZsb29yZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBmbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX19mbW9kZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5m
ZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
CmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBf
X3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19kcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gZmxvYXQgY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19jb3B5c2lnbmYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCgpleHRlcm4gZmxvYXQgbmFuZiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fbmFuZiAoX19jb25zdCBj
aGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4
dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgajBmIChmbG9h
dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2owZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgajFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIHRo
cm93ICgpOwpleHRlcm4gZmxvYXQgam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fam5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IHkwZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZs
b2F0IHkxZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSB0aHJv
dyAoKTsKZXh0ZXJuIGZsb2F0IHluZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3luZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZs
b2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmZiAoZmxvYXQpIHRocm93ICgpOwpleHRl
cm4gZmxvYXQgZXJmY2YgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXJmY2YgKGZs
b2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGxnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdGdh
bW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190Z2FtbWFmIChmbG9hdCkgdGhy
b3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2dhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgbGdhbW1h
Zl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbGdh
bW1hZl9yIChmbG9hdCwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZs
b2F0IHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yaW50ZiAoZmxv
YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbmV4dGFmdGVyZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZs
b2F0IF9fbmV4dGFmdGVyZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBmbG9hdCBuZXh0dG93YXJkZiAoZmxvYXQgX194
LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsg
ZXh0ZXJuIGZsb2F0IF9fbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBmbG9hdCByZW1h
aW5kZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Jl
bWFpbmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0
IHNjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19z
Y2FsYmYgKGZsb2F0IF9feCwgZmxvYXQgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBz
Y2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2Fs
Ym5mIChmbG9hdCBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBfX24p
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19zY2FsYmxuZiAoZmxvYXQgX194LCBsb25nIGludCBf
X24pIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fbmVhcmJ5aW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGZsb2F0IHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
cm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgdHJ1bmNmIChmbG9h
dCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0
IF9fdHJ1bmNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBmbG9hdCByZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpf
X3F1bykgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQg
X195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAo
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRmIChmbG9hdCBfX3gp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRmIChmbG9hdCBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7
CgoKCmV4dGVybiBsb25nIGludCBscm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBpbnQgX19scm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25n
IGludCBsbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGZkaW1mIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZkaW1mIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtYXhmIChmbG9hdCBf
X3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYXhmIChmbG9hdCBfX3gs
IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZs
b2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtaW5mIChmbG9hdCBfX3gsIGZsb2F0
IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5ZiAoZmxvYXQgX192YWx1
ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu
dCBfX3NpZ25iaXRmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IGZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195
LCBmbG9hdCBfX3opIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBfX3gsIGZs
b2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAoKTsKIyA4MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg
MiAzCiMgOTkgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9t
YXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAzCmV4
dGVybiBsb25nIGRvdWJsZSBhY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g
bG9uZyBkb3VibGUgYXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX2FzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg
ZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSBhdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Nvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK
CmV4dGVybiBsb25nIGRvdWJsZSB0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX190YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl
cm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxv
bmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2wgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUgKl9fY29zeCkgdGhy
b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3NobCAobG9uZyBkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhy
b3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBkb3VibGUgX190YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGFjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGxvbmcgZG91YmxlIF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGxvbmcgZG91YmxlIGFzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy
biBsb25nIGRvdWJsZSBleHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u
ZyBkb3VibGUgZXhwMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19leHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19wb3cxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBmcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19leHBv
bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxkZXhwbCAobG9uZyBkb3VibGUg
X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xkZXhw
bCAobG9uZyBkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGxvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2xvZ2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91
YmxlIGxvZzEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBtb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
Kl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cG0xbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMXBsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxcGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2JsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dibCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMmwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93bCAobG9uZyBk
b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs
ZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
c3FydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBo
eXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9faHlwb3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2JydGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NicnRsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxvbmcgZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRo
cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmYWJzbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Zh
YnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19mbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtb2RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ztb2RsIChsb25nIGRvdWJsZSBf
X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZsIChs
b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRv
dWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Ry
ZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy
biBsb25nIGRvdWJsZSBzaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2NvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf
X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25n
IGRvdWJsZSBuYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIg
Kl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJu
IGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRv
dWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBs
IChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhy
b3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19qbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3kwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg
eTFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91
YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91Ymxl
KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
CmV4dGVybiBsb25nIGRvdWJsZSBlcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g
bG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgbGdhbW1hbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0
Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1t
YWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxv
bmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19sZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3JpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91Ymxl
IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBk
b3VibGUgX19uZXh0YWZ0ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5l
eHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJk
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91Ymxl
IHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoK
CmV4dGVybiBpbnQgaWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50
IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91
YmxlIHNjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91
YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX190cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf
XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxv
bmcgZG91YmxlIF9fcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGlu
dCAqX19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9f
eCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJs
ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRp
bWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBkb3VibGUgZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91
YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
Zm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAg
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxv
bmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3op
IHRocm93ICgpOwojIDEwMCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2lu
Y2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBpbnQgc2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9t
YXRoLmgiIDMKZW51bQogIHsKICAgIEZQX05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9a
RVJPLAoKICAgIEZQX1NVQk5PUk1BTCwKCiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3Iv
aW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8s
CiAgX1hPUEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoK
ZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhjZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBj
aGFyICpuYW1lOwogICAgZG91YmxlIGFyZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSBy
ZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19l
eGMpIHRocm93ICgpOwojIDM1MCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5j
bHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMSAzCiMgMzUxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAy
IDMKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jbWF0aCIgMiAzCiMgNzkgIi9idWls
ZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NtYXRoIiAzCm5h
bWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgX19jbWF0aF9wb3dl
cihfVHAsIHVuc2lnbmVkIGludCk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUg
X1RwCiAgICBfX2NtYXRoX2FicyhfVHAgX194KQogICAgewogICAgICByZXR1cm4gX194IDwgX1Rw
KCkgPyAtX194IDogX194OwogICAgfQoKICBpbmxpbmUgZG91YmxlCiAgYWJzKGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxpbmUgZmxvYXQKICBhYnMo
ZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBs
b25nIGRvdWJsZQogIGFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAogIGFjb3MoZmxvYXQgX194KSB7IHJldHVybiA6
OmFjb3NmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6YWNvczsKCgogIGlubGluZSBsb25nIGRvdWJs
ZQogIGFjb3MobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFjb3NsKF9feCk7IH0KCgoKCgog
IHVzaW5nIDo6YXNpbjsKCgogIGlubGluZSBmbG9hdAogIGFzaW4oZmxvYXQgX194KSB7IHJldHVy
biA6OmFzaW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhc2luKGxvbmcg
ZG91YmxlIF9feCkgeyByZXR1cm4gOjphc2lubChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmF0YW47
CgoKICBpbmxpbmUgZmxvYXQKICBhdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuZihfX3gp
OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbihsb25nIGRvdWJsZSBfX3gpIHsg
cmV0dXJuIDo6YXRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBm
bG9hdAogIGF0YW4yKGZsb2F0IF9feSwgZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW4yZihfX3ks
IF9feCk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXRhbjIobG9uZyBkb3VibGUg
X195LCBsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXRhbjJsKF9feSwgX194KTsgfQoKCgoK
CgogIHVzaW5nIDo6Y2VpbDsKCgogIGlubGluZSBmbG9hdAogIGNlaWwoZmxvYXQgX194KSB7IHJl
dHVybiA6OmNlaWxmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjZWlsKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjZWlsbChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmNv
czsKCiAgaW5saW5lIGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5f
Y29zZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvcyhsb25nIGRvdWJsZSBfX3gp
CiAgeyByZXR1cm4gX19idWlsdGluX2Nvc2woX194KTsgfQoKICB1c2luZyA6OmNvc2g7CgoKICBp
bmxpbmUgZmxvYXQKICBjb3NoKGZsb2F0IF9feCkgeyByZXR1cm4gOjpjb3NoZihfX3gpOyB9CgoK
CgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29zaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6Y29zaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpleHA7CgoKICBpbmxpbmUgZmxvYXQKICBl
eHAoZmxvYXQgX194KSB7IHJldHVybiA6OmV4cGYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25n
IGRvdWJsZQogIGV4cChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6ZXhwbChfX3gpOyB9CgoK
CgoKICB1c2luZyA6OmZhYnM7CgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsg
cmV0dXJuIF9fYnVpbHRpbl9mYWJzZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIGZh
YnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9mYWJzbChfX3gpOyB9Cgog
IHVzaW5nIDo6Zmxvb3I7CgoKICBpbmxpbmUgZmxvYXQKICBmbG9vcihmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6Zmxvb3JmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmbG9vcihs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Zmxvb3JsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6
Zm1vZDsKCgogIGlubGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0
dXJuIDo6Zm1vZGYoX194LCBfX3kpOyB9CgoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZt
b2QobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHsgcmV0dXJuIDo6Zm1vZGwoX194
LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmcmV4cDsKCgogIGlubGluZSBmbG9hdAogIGZyZXhw
KGZsb2F0IF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGYoX194LCBfX2V4cCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBmcmV4cChsb25nIGRvdWJsZSBfX3gsIGludCog
X19leHApIHsgcmV0dXJuIDo6ZnJleHBsKF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjps
ZGV4cDsKCgogIGlubGluZSBmbG9hdAogIGxkZXhwKGZsb2F0IF9feCwgaW50IF9fZXhwKSB7IHJl
dHVybiA6OmxkZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK
ICBsZGV4cChsb25nIGRvdWJsZSBfX3gsIGludCBfX2V4cCkgeyByZXR1cm4gOjpsZGV4cGwoX194
LCBfX2V4cCk7IH0KCgoKCgoKICB1c2luZyA6OmxvZzsKCgogIGlubGluZSBmbG9hdAogIGxvZyhm
bG9hdCBfX3gpIHsgcmV0dXJuIDo6bG9nZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91
YmxlCiAgbG9nKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2dsKF9feCk7IH0KCgoKCgog
IHVzaW5nIDo6bG9nMTA7CgoKICBpbmxpbmUgZmxvYXQKICBsb2cxMChmbG9hdCBfX3gpIHsgcmV0
dXJuIDo6bG9nMTBmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cxMChs
b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6bG9nMTBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6
bW9kZjsKCgogIGlubGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7
IHJldHVybiA6Om1vZGZmKF9feCwgX19pcHRyKTsgfQojIDM4MiAiL2J1aWxkcy9nY2MtM18xLWJy
YW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY21hdGgiIDMKICBpbmxpbmUgbG9uZyBk
b3VibGUKICBtb2RmKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUqIF9faXB0cikgeyByZXR1
cm4gOjptb2RmbChfX3gsIF9faXB0cik7IH0KIyAzOTUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NtYXRoIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBfX3gsIGludCBfX24pCiAg
ICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkvX19jbWF0aF9wb3dlcihf
X3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19uKTsKICAgIH0KCiAgdXNp
bmcgOjpwb3c7CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBmbG9hdCBfX3kpIHsg
cmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
cG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJldHVybiA6OnBvd2woX194
LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19p
KQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGZsb2F0CiAg
cG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24p
OyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJsZSBfX3gsIGludCBfX24p
CiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1c2luZyA6OnNpbjsKCiAg
aW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2luZihf
X3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRvdWJsZSBfX3gpCiAgeyBy
ZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUg
ZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6c2lu
aGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUgZmxvYXQKICBzcXJ0KGZs
b2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICBpbmxpbmUgbG9u
ZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3Fy
dGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9hdAogIHRhbihmbG9hdCBf
X3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg
dGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7IH0KCgoKCgogIHVzaW5n
IDo6dGFuaDsKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVybiA6OnRh
bmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW5oKGxvbmcgZG91Ymxl
IF9feCkgeyByZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoKCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2Zw
Y2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0
KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUp
ID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19mKSk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNmaW5pdGUoX1RwIF9fZikg
eyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZmluaXRlZiAoX19m
KSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zpbml0ZSAoX19mKSA6IF9f
ZmluaXRlbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf
X2NhcHR1cmVfaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2Yg
KGZsb2F0KSA/IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl
KSA/IF9faXNpbmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9fZikgeyByZXR1cm4gKHNp
emVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChfX2YpIDogc2l6ZW9mIChf
X2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBfX2lzbmFubCAoX19mKSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNub3Jt
YWwoX1RwIF9fZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBf
X2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9f
ZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09IEZQX05PUk1BTCk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfc2lnbmJpdChf
VHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19zaWdu
Yml0ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX3NpZ25iaXQg
KF9fZikgOiBfX3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyBy
ZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9f
dHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2Zf
XyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2Yg
KF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChf
X3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lm
eWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8g
X19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBf
X2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAm
JiBfX3ggPiBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAg
ICAgX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJl
dHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190
eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9f
KF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAo
X191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9f
dSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5
bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBf
X2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9f
ZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYm
IF9feCA+PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50CiAg
ICAgX19jYXB0dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIChfX2V4dGVu
c2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIp
IF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAo
X194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVv
ZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2Yg
KGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBG
UF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYg
KF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChf
X3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194IDwgX195OyB9
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9p
c2xlc3NlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9u
X18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX195
ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gp
OyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChm
bG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91
YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05B
TiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192
KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikg
OiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0pKSAmJiBfX3ggPD0gX195OyB9KSk7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xl
c3NncmVhdGVyKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiAoX19leHRlbnNpb25f
XyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kg
PSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7
IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZs
b2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3Vi
bGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFO
IHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3Yp
IDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6
IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIChfX3ggPCBfX3kgfHwgX195
IDwgX194KTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBf
X2NhcHR1cmVfaXN1bm9yZGVyZWQoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChf
X2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX191ID0gKF9fZjEpOyBfX3R5cGVvZl9f
KF9fZjIpIF9fdiA9IChfX2YyKTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f
ZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m
cGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXpl
b2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9m
IChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFz
c2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpOyB9Cn0KIyA1ODcgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2NtYXRoIiAzCm5hbWVzcGFjZSBfX2du
dV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lmeShf
VHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4gX19j
YXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50
CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0dXJu
IF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
dAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9fZik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBfX2Yp
IHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVybiBf
X2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgeyBy
ZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyBy
ZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgIHsg
cmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2Yy
KQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19mMSwg
X1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19mMik7
IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5OwogIHVz
aW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1c2lu
ZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNpbmcg
X19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVzaW5n
IF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7CiAg
dXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2dy
ZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2NtYXRoLnRj
YyIgMSAzCiMgMzUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvY21hdGgudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIF9UcAogICAgX19jbWF0aF9wb3dlcihfVHAgX194LCB1bnNpZ25lZCBpbnQg
X19uKQogICAgewogICAgICBfVHAgX195ID0gX19uICUgMiA/IF9feCA6IDE7CgogICAgICB3aGls
ZSAoX19uID4+PSAxKQogICAgICAgIHsKICAgICAgICAgIF9feCA9IF9feCAqIF9feDsKICAgICAg
ICAgIGlmIChfX24gJSAyKQogICAgICAgICAgICBfX3kgPSBfX3kgKiBfX3g7CiAgICAgICAgfQoK
ICAgICAgcmV0dXJuIF9feTsKICAgIH0KfQojIDY2MiAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvY21hdGgiIDIgMwojIDQyICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu
dGNjIiAyIDMKCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvbGltaXRzIiAxIDMKIyA0NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvbGltaXRzIiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lhNjQtdW5rbm93bi1saW51eC9iaXRzL2Nw
dV9saW1pdHMuaCIgMSAzCiMgNDkgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2xpbWl0cyIgMiAzCiMgODkwICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
ZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwK
ICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAg
cm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkg
PSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRl
cm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9
IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19iYXNlCiAgewogICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsKICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
aW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsK
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu
X2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwog
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgc3RhdGlj
IGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7Cgog
ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29s
IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0
eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDogcHVibGljIF9fbnVtZXJpY19s
aW1pdHNfYmFzZQogICAgewogICAgICBzdGF0aWMgX1RwIG1pbigpIHRocm93KCkgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIG1heCgpIHRocm93KCkgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGVwc2lsb24oKSB0
aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9UcCBy
b3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg
ICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0
aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2lnbmFsaW5nX05hTigpIHRocm93
KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGRlbm9y
bV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgIH07CgoK
CiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGJvb2w+CiAgICB7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBi
b29sIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBi
b29sIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19l
eGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0
aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBz
dGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0K
CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4
cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVu
b3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBib29sIGluZmluaXR5
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBxdWll
dF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29s
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgIHN0
YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCgoKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZQogICAg
ICAgICAgICAgICB8fCB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZv
cmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0
eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVj
dCBudW1lcmljX2xpbWl0czxjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z
cGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgY2hhciBtaW4oKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIChjaGFyKSgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIGNoYXIgbWF4KCkgdGhy
b3coKQogICAgICB7IHJldHVybiAoY2hhcikxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDc7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy
dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgY2hhciBl
cHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGljIGNo
YXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19z
aWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5
bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBxdWlldF9OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBzaWdu
YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0KICAgICAgc3RhdGlj
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hh
cj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rv
d2FyZF96ZXJvOwogICAgfTsKIyAxMDc0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICgtMTI3IC0gMSk7IH0KICAgICAgc3RhdGljIHNpZ25lZCBjaGFy
IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMTI3OyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IGRpZ2l0cyA9IDc7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAyOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNp
Z25lZCBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3Rh
dGljIHNpZ25lZCBjaGFyIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rl
bm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg
aW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFy
PigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHNp
Z25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgZGVub3JtX21p
bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDApOyB9
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVy
bzsKICAgIH07CiMgMTEzMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuICgxMjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gODsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVu
c2lnbmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8
dW5zaWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8d2NoYXJfdD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAod2NoYXJfdCkoLTIxNDc0ODM2NDdMIC0gMSk7IH0KICAgICAgc3Rh
dGljIHdjaGFyX3QgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAod2NoYXJfdCkyMTQ3NDgz
NjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25l
ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgd2NoYXJfdCBlcHNpbG9uKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHJvdW5kX2Vycm9yKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVu
dCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
bWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2Vu
dDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAg
ICBzdGF0aWMgd2NoYXJfdCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf
dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IHNpZ25hbGluZ19OYU4oKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBk
ZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g
dHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm
bG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsK
IyAxMjQ0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8c2hvcnQ+
CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgtMzI3NjcgLSAx
KTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzMjc2
NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxNTsKICAgICAgc3RhdGljIGNv
bnN0IGludCBkaWdpdHMxMCA9IDQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cmFkaXggPSAyOwogICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw
b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp
YyBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAg
ICBzdGF0aWMgc2hvcnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgp
OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJl
dHVybiBzaG9ydCgpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMzAxICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNp
Z25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiAr
IDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRf
ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx
MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0
X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g
PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg
PSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0
YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hv
cnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWlu
KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3pl
cm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxp
bnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KSgtMjE0
NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgaW50IG1heCgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMg
PSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu
dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJv
cigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBt
aW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0g
MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFO
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRl
bm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh
bHNlOwoKICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50
IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o
MCk7IH0KICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNDEzICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+
CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgaW50PgogICAgewogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWdu
ZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICAgICAgc3RhdGlj
IHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0
NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMy
OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVn
ZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVw
c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQog
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
aW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k
dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog
ICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZz4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAobG9uZykoLTkyMjMz
NzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIG1heCgpIHRocm93KCkK
ICAgICAgeyByZXR1cm4gKGxvbmcpOTIyMzM3MjAzNjg1NDc3NTgwN0xMOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IDYzOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw
ID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAg
ICBzdGF0aWMgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAg
IHN0YXRpYyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y
bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBpbmZpbml0eSgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3Rh
dGljIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxs
b25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBkZW5v
cm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CiMgMTUyNSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz
PHVuc2lnbmVkIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxp
emVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1pbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtYXgoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuICh1bnNpZ25lZCBsb25nKSg5MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAy
VUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBlcHNpbG9uKCkg
dGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJv
dW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19x
dWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVu
b3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9s
b3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBpbmZpbml0eSgpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz
dGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u
ZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v
ZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK
ICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcg
bG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl
OwoKICAgICAgc3RhdGljIGxvbmcgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgt
OTIyMzM3MjAzNjg1NDc3NTgwN0xMIC0gMSk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBtYXgo
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTDsgfQoKICAgICAg
c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA2MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdp
dHMxMCA9IDE4OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsK
ICAgICAgc3RhdGljIGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw
OyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25l
bnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBs
b25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv
bmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgbG9uZyBxdWlldF9OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGlj
IGxvbmcgbG9uZyBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGVub3JtX21pbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQoKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs
byA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u
c3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAg
IH07CiMgMTYzNyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9n
KystdjMvbGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lh
bGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0Nzc1ODA3TEwgKiAyVUxM
ICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln
bmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg
bG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBs
b25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsg
fQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAg
ICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoK
CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8ZmxvYXQ+CiAgICB7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp
YyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1NDk0MzVlLTM4RjsgfQog
ICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjQwMjgyMzQ3
ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMjQ7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWdu
ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxvbigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9l
cnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAgICAgc3RhdGljIGNvbnN0
IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEyODsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4OwoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h
bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo
YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl
bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5maW5pdHkoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0IHF1aWV0X05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMgZmxvYXQg
ZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz
X2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxz
ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv
YXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMg
MTc2OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
bGltaXRzIiAzCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGRvdWJsZT4K
ICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAg
ICAgc3RhdGljIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjI1MDczODU4
NTA3MjAxNGUtMzA4OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxLjc5NzY5MzEzNDg2MjMxNTdlKzMwODsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBkaWdpdHMgPSA1MzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDE1OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMg
ZG91YmxlIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDIuMjIwNDQ2MDQ5MjUwMzEz
MWUtMTY7IH0KICAgICAgc3RhdGljIGRvdWJsZSByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMS4wOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0x
MDIxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTMwNzsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMDI0OwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMzA4OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0KICAgICAg
ICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3Jt
X2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91
bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0
IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y
b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87
CiAgICB9OwojIDE4NDcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0
czxsb25nIGRvdWJsZT4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMy4zNjIxMDMxNDMxMTIwOTM1MDYyNmUtNDkzMkw7IH0KICAgICAgc3RhdGljIGxv
bmcgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xODk3MzE0OTUzNTcyMzE3
NjUwMmUrNDkzMkw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjQ7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGVwc2lsb24o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMDg0MjAyMTcyNDg1NTA0NDM0MDFlLTE5TDsgfQog
ICAgICBzdGF0aWMgbG9uZyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDEuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTE2Mzgx
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gLTQ5MzE7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTYzODQ7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSA0OTMyOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2lu
ZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPQogICAgICAg
ICAgICAgICAgZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFz
X2Rlbm9ybSA9CiAgICAgICAgICAgICAgICBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPQogICAgICAgICAgICAgICAgZmFsc2U7CgogICAgICBz
dGF0aWMgbG9uZyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7
IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgc2lnbmFsaW5nX05hTigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQogICAgICBzdGF0aWMgbG9uZyBkb3VibGUgZGVu
b3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wTDsgfQoKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv
dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg
fTsKIyAxOTI3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2cr
Ky12My9saW1pdHMiIDMKfQojIDQ0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCiMgMSAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAxIDMK
IyA2NSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
dmVjdG9yIiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1
ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj
IDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2V4
Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQv
aW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNl
IHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAg
X190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lk
KTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93
X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50
KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19z
KTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190
aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191
bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19m
YWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvdmVjdG9yIiAyIDMKCgoKCiMgMSAiL2J1aWxkcy9n
Y2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9y
LmgiIDEgMwojIDY1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMwojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvYnVpbGRzL2dj
Yy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0
LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24o
dm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190
aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsK
CgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xl
bmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFu
Z2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBf
X3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZv
aWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA2NiAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVj
dG9yLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDc4ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1Zl
Y3Rvcl9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0
czxfVHAsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2Rh
dGFfYWxsb2NhdG9yOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmlu
aXNoKDApLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9y
X3R5cGUgX01fZGF0YV9hbGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2Zpbmlz
aDsKICBfVHAqIF9NX2VuZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBf
X24pCiAgICB7IHJldHVybiBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9p
ZCBfTV9kZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9k
YXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBf
QWxsb2NhdG9yLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90
eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxv
Y2F0b3JfdHlwZSgpOyB9CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlw
ZSYpCiAgICA6IF9NX3N0YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDAp
CiAge30KCnByb3RlY3RlZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9U
cCogX01fZW5kX29mX3N0b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxf
VHAsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9j
YXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsg
fQogIHZvaWQgX01fZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9j
X3R5cGU6OmRlYWxsb2NhdGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs
YXNzIF9BbGxvYz4Kc3RydWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2Nf
YmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry
YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9h
bGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxv
Y190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsK
ICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK
CiAgX1ZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7
fQogIF9WZWN0b3JfYmFzZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6
IF9CYXNlKF9fYSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmlu
aXNoID0gX01fc3RhcnQ7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwog
IH0KCiAgfl9WZWN0b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29m
X3N0b3JhZ2UgLSBfTV9zdGFydCk7IH0KfTsKIyAxNjUgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KY2xhc3MgdmVjdG9y
IDogcHJvdGVjdGVkIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4KewoKIAoKcHJpdmF0ZToKICB0
eXBlZGVmIF9WZWN0b3JfYmFzZTxfVHAsIF9BbGxvYz4gX0Jhc2U7CiAgdHlwZWRlZiB2ZWN0b3I8
X1RwLCBfQWxsb2M+IHZlY3Rvcl90eXBlOwpwdWJsaWM6CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlw
ZTsKICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90
eXBlKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8cG9pbnRlciwg
dmVjdG9yX3R5cGU+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX19ub3JtYWxfaXRlcmF0b3I8Y29uc3Rf
cG9pbnRlciwgdmVjdG9yX3R5cGU+IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNl
OwogIHR5cGVkZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJl
bmNlX3R5cGU7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9j
YXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBfQmFzZTo6Z2V0X2FsbG9jYXRvcigpOyB9CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxj
b25zdF9pdGVyYXRvcj4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2Vf
aXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2VfaXRlcmF0b3I7Cgpwcm90ZWN0ZWQ6CiAgdXNpbmcg
X0Jhc2U6Ol9NX2FsbG9jYXRlOwogIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogIHVzaW5n
IF9CYXNlOjpfTV9zdGFydDsKICB1c2luZyBfQmFzZTo6X01fZmluaXNoOwogIHVzaW5nIF9CYXNl
OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCnByb3RlY3RlZDoKICB2b2lkIF9NX2luc2VydF9hdXgoaXRl
cmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gpOwogIHZvaWQgX01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uKTsKCnB1YmxpYzoKCgoKCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBjb25zdF9pdGVyYXRvciBiZWdpbigp
IGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9pdGVyYXRvciAoX01fc3RhcnQpOyB9CgoKCgoKICBp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvciAoX01fZmluaXNoKTsgfQoKCgoKCiAgY29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz
aCk7IH0KCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkKICAgIHsgcmV0dXJuIHJldmVy
c2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdp
bigpIGNvbnN0CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQoK
CgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJh
dG9yKGJlZ2luKCkpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29u
c3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgogIHNp
emVfdHlwZSBzaXplKCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2lu
KCkpOyB9CgoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90
eXBlKC0xKSAvIHNpemVvZihfVHApOyB9CgoKCgoKICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25z
dAogICAgeyByZXR1cm4gc2l6ZV90eXBlKGNvbnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdl
KSAtIGJlZ2luKCkpOyB9CgoKCgogIGJvb2wgZW1wdHkoKSBjb25zdAogICAgeyByZXR1cm4gYmVn
aW4oKSA9PSBlbmQoKTsgfQojIDI4OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICByZWZlcmVuY2Ugb3BlcmF0
b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiMgMjk5ICIv
YnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0
bF92ZWN0b3IuaCIgMwogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p
IGNvbnN0IHsgcmV0dXJuICooYmVnaW4oKSArIF9fbik7IH0KCiAgdm9pZCBfTV9yYW5nZV9jaGVj
ayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAg
ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciIpOwogIH0KIyAzMTUgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5o
IiAzCiAgcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pCiAgICB7IF9NX3JhbmdlX2NoZWNrKF9f
bik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KIyAzMjcgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gv
aWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgY29uc3Rf
cmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7IF9NX3JhbmdlX2NoZWNrKF9f
bik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KCgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxv
Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoK
ICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19u
LCBfX2EpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBf
X24sIF9fdmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBf
QmFzZShfX24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9y
PF9UcCwgX0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9j
YXRvcigpKQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCks
IF9feC5lbmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgICAgIDogX0Jhc2UoX19hKQogICAgICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICAg
IF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfYXV4KF9J
bnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWx1ZSwgX190cnVlX3R5cGUpCiAgICAgICAgewogICAg
ICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0g
X01fc3RhcnQgKyBfX247CiAgICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9N
X3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVy
YXRvcj4KICAgIHZvaWQKICAgICAgICBfTV9pbml0aWFsaXplX2F1eChfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAg
ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyQ2F0ZWdvcnk7CiAgICAgICAgICBfTV9yYW5nZV9pbml0
aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgICAgICB9CgogIH52
ZWN0b3IoKQogIHsgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7IH0KCiAgdmVjdG9yPF9U
cCwgX0FsbG9jPiYgb3BlcmF0b3I9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCk7CiMg
MzkyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9i
aXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICBp
ZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9
IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwg
X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gp
OwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZmluaXNoID0gX190bXAgKyBf
X29sZF9zaXplOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAg
fQogIH0KIyA0MjAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUv
ZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIF9fbiwg
Y29uc3QgX1RwJiBfX3ZhbCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9fdmFsKTsgfQogIHZvaWQg
X01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRlbXBs
YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIGFzc2lnbihfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9J
bnRlZ3JhbDsKICAgICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn
cmFsKCkpOwogICAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQKICAgICAg
ICBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVl
X3R5cGUpCiAgICB7IF9NX2ZpbGxfYXNzaWduKChzaXplX3R5cGUpIF9fbiwgKF9UcCkgX192YWwp
OyB9CgogIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2b2lkCiAgICAgICAgX01fYXNz
aWduX2Rpc3BhdGNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFs
c2VfdHlwZSkKICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfSXRlckNhdGVnb3J5OwogICAgICAgICAg
X01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7CiAgICAgICAg
fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4
KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz
dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRf
aXRlcmF0b3JfdGFnKTsKCgoKCgogIHJlZmVyZW5jZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigp
OyB9CgoKCgoKICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4o
KTsgfQoKCgoKCiAgcmVmZXJlbmNlIGJhY2soKSB7IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KCgoK
CgogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihlbmQoKSAtIDEpOyB9
CiMgNDg1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12
My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQKICBwdXNoX2JhY2soY29uc3QgX1RwJiBfX3gp
CiAgewogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkgewogICAgICBfQ29u
c3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgKytfTV9maW5pc2g7CiAgICB9CiAgICBlbHNl
CiAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgfQojIDUxNiAiL2J1aWxkcy9nY2Mt
M18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgi
IDMKICB2b2lkCiAgc3dhcCh2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpCiAgewogICAgc3RkOjpz
d2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwgX194
Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRf
b2Zfc3RvcmFnZSk7CiAgfQojIDUzNSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3Rh
bGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2Vy
dChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICB7CiAgICBzaXplX3R5cGUg
X19uID0gX19wb3NpdGlvbiAtIGJlZ2luKCk7CiAgICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9v
Zl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkpIHsKICAgICAgX0NvbnN0cnVjdChfTV9m
aW5pc2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9p
bnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRpb24pLCBfX3gpOwogICAgcmV0dXJuIGJlZ2luKCkg
KyBfX247CiAgfQojIDU1OSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5j
bHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICBpdGVyYXRvcgogIGluc2VydChpdGVy
YXRvciBfX3Bvc2l0aW9uKQogIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn
aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv
biA9PSBlbmQoKSkgewogICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCk7CiAgICAgICsrX01fZmlu
aXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yKF9fcG9zaXRp
b24pKTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9J
bnB1dEl0ZXJhdG9yPgogICAgdm9pZAogICAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3Jh
bCBfSW50ZWdyYWw7CiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19s
YXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAg
IHZvaWQKICAgICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2Vy
IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2luc2VydChf
X3Bvcywgc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihfX24pLCBzdGF0aWNfY2FzdDxfVHA+KF9fdmFs
KSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgICAg
X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29y
eSBfSXRlckNhdGVnb3J5OwogICAgICBfTV9yYW5nZV9pbnNlcnQoX19wb3MsIF9fZmlyc3QsIF9f
bGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgIH0KIyA2MDkgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdm9p
ZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkK
ICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxf
aW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoj
IDYyMyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1fTV9maW5pc2g7
CiAgICBfRGVzdHJveShfTV9maW5pc2gpOwogIH0KIyA2NDIgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgaXRl
cmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgaWYgKF9fcG9zaXRpb24gKyAx
ICE9IGVuZCgpKQogICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7
CiAgICAtLV9NX2ZpbmlzaDsKICAgIF9EZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19w
b3NpdGlvbjsKICB9CiMgNjY1ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIGl0ZXJhdG9yIGVyYXNlKGl0ZXJh
dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaXRlcmF0b3IgX19pKGNvcHkoX19s
YXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAgX0Rlc3Ryb3koX19pLCBlbmQoKSk7CiAgICBfTV9m
aW5pc2ggPSBfTV9maW5pc2ggLSAoX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4gX19maXJz
dDsKICB9CiMgNjgyICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRl
L2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25l
d19zaXplLCBjb25zdCBfVHAmIF9feCkgewogICAgaWYgKF9fbmV3X3NpemUgPCBzaXplKCkpCiAg
ICAgIGVyYXNlKGJlZ2luKCkgKyBfX25ld19zaXplLCBlbmQoKSk7CiAgICBlbHNlCiAgICAgIGlu
c2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwgX194KTsKICB9CiMgNjk4ICIvYnVpbGRz
L2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0
b3IuaCIgMwogIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25l
d19zaXplLCBfVHAoKSk7IH0KCgoKCgoKCiAgdm9pZCBjbGVhcigpIHsgZXJhc2UoYmVnaW4oKSwg
ZW5kKCkpOyB9Cgpwcm90ZWN0ZWQ6CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y
PgogIHBvaW50ZXIgX01fYWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwgX0ZvcndhcmRJ
dGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0KQogIHsKICAgIHBvaW50ZXIgX19yZXN1bHQg
PSBfTV9hbGxvY2F0ZShfX24pOwogICAgdHJ5IHsKICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiAg
ICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKF9fcmVzdWx0LCBfX24p
OwogICAgICAgIHRocm93OwogICAgICB9CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbml0aWFsaXplKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRf
aXRlcmF0b3JfdGFnKQogIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv
cndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0ZvcndhcmRJdGVyYXRv
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9f
bGFzdCwgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgewogICAgc2l6ZV90eXBlIF9fbiA9IGRpc3Rh
bmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAg
ICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogICAgX01fZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpOwogIH0KCiAgdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9y
IF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9J
bnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICB2b2lkIF9NX3Jh
bmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAs
IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCB2ZWN0b3I8X1RwLCBf
QWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBf
X3guc2l6ZSgpID09IF9feS5zaXplKCkgJiYKICAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9f
eC5lbmQoKSwgX195LmJlZ2luKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxs
b2M+CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gs
IGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhpY29ncmFwaGlj
YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9f
eCwgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvciE9KGNvbnN0
IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195
KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4m
IF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9f
eDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVy
YXRvcjw9KGNvbnN0IHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwg
X0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IHZlY3Rvcjxf
VHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KSB7CiAgcmV0
dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2
ZWN0b3I8X1RwLF9BbGxvYz4mCnZlY3RvcjxfVHAsX0FsbG9jPjo6b3BlcmF0b3I9KGNvbnN0IHZl
Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCkKewogIGlmICgmX194ICE9IHRoaXMpIHsKICAgIGNvbnN0
IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgaWYgKF9feGxlbiA+IGNhcGFjaXR5
KCkpIHsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9feGxlbiwg
X194LmJlZ2luKCksIF9feC5lbmQoKSk7CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5p
c2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfTV9zdGFydCArIF9feGxlbjsKICAgIH0KICAgIGVsc2UgaWYgKHNpemUoKSA+PSBfX3hsZW4p
IHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4o
KSkpOwogICAgICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2UgewogICAgICBj
b3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQpOwogICAgICB1
bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQoKSwgX01fZmlu
aXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwogIH0KICByZXR1
cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0
b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25zdCB2YWx1ZV90
eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0b3I8X1RwLCBf
QWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBfX3RtcC5zd2Fw
KCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxsKGJlZ2luKCks
IGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihfTV9m
aW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFzZShmaWxsX24o
YmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh
c3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0b3I8X1RwLCBf
QWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRv
cl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9fZmlyc3QgIT0g
X19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAqX19jdXIg
PSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShfX2N1ciwgZW5k
KCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
Pgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4gPSBkaXN0YW5j
ZShfX2ZpcnN0LCBfX2xhc3QpOwoKICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKSB7CiAgICBwb2lu
dGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVuLCBfX2ZpcnN0LCBfX2xhc3QpKTsK
ICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgX01fZGVhbGxvY2F0ZShfTV9z
dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICBfTV9zdGFydCA9IF9fdG1w
OwogICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9maW5pc2ggPSBfTV9zdGFydCArIF9fbGVuOwog
IH0KICBlbHNlIGlmIChzaXplKCkgPj0gX19sZW4pIHsKICAgIGl0ZXJhdG9yIF9fbmV3X2Zpbmlz
aChjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01fc3RhcnQpKTsKICAgIF9EZXN0cm95KF9fbmV3X2Zp
bmlzaCwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICB9CiAg
ZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWQgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21p
ZCwgc2l6ZSgpKTsKICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgIF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkCnZlY3RvcjxfVHAsIF9B
bGxvYz46Ol9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1RwJiBfX3gp
CnsKICBpZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBfQ29uc3RydWN0
KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIF9UcCBf
X3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01f
ZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwogICAgKl9fcG9zaXRpb24gPSBf
X3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNp
emUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgIT0gMCA/IDIgKiBf
X29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVu
KSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgdHJ5IHsKICAg
ICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwg
X19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3
X3N0YXJ0KTsKICAgICAgX0NvbnN0cnVjdChfX25ld19maW5pc2guYmFzZSgpLCBfX3gpOwogICAg
ICArK19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5
KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKQogICAg
ICB7CiAgICAgICAgX0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICBf
TV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgdGhyb3c7CiAg
ICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxsb2NhdGUoX01f
c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3RhcnQgPSBfX25l
d19zdGFydC5iYXNlKCk7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2guYmFzZSgpOwogICAg
X01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+
OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24pCnsKICBpZiAoX01fZmluaXNoICE9
IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5p
c2ggLSAxKSk7CiAgICArK19NX2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
aXRlcmF0b3IoX01fZmluaXNoIC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2Zp
bmlzaCAtIDEpKTsKICAgICpfX3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19s
ZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9f
bmV3X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2gg
PSBfX25ld19zdGFydDsKICAgIHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6
ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgIF9Db25zdHJ1Y3QoX19u
ZXdfZmluaXNoKTsKICAgICAgKytfX25ld19maW5pc2g7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVu
aW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdfZmluaXNoKTsKICAgIH0KICAg
IGNhdGNoKC4uLikKICAgICAgewogICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2Zp
bmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX25ld19zdGFydCxfX2xlbik7CiAgICAgICAg
dGhyb3c7CiAgICAgIH0KICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgIF9NX2RlYWxs
b2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgX01fc3Rh
cnQgPSBfX25ld19zdGFydDsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaDsKICAgIF9NX2Vu
ZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQgKyBfX2xlbjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2lu
c2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBzaXplX3R5cGUgX19uLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9fbiAhPSAw
KSB7CiAgICBpZiAoc2l6ZV90eXBlKF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fZmluaXNoKSA+PSBf
X24pIHsKICAgICAgX1RwIF9feF9jb3B5ID0gX194OwogICAgICBjb25zdCBzaXplX3R5cGUgX19l
bGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAgaXRlcmF0b3IgX19vbGRfZmlu
aXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVyID4gX19uKSB7CiAgICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5pc2gp
OwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0
aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7CiAgICAgICAgZmlsbChfX3Bv
c2l0aW9uLCBfX3Bvc2l0aW9uICsgX19uLCBfX3hfY29weSk7CiAgICAgIH0KICAgICAgZWxzZSB7
CiAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBfX2VsZW1zX2Fm
dGVyLCBfX3hfY29weSk7CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7
CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01f
ZmluaXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBmaWxs
KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX194X2NvcHkpOwogICAgICB9CiAgICB9CiAgICBl
bHNlIHsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgIGNv
bnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xkX3NpemUgKyBtYXgoX19vbGRfc2l6ZSwgX19uKTsK
ICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgaXRl
cmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0KTsKICAgICAgdHJ5IHsKICAgICAgICBfX25l
d19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgX19uZXdf
c3RhcnQpOwogICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fbmV3
X2ZpbmlzaCwgX19uLCBfX3gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAgPSB1bmlu
aXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9fbmV3X2ZpbmlzaCk7CiAgICAgIH0K
ICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0
LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2Uo
KSxfX2xlbik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9EZXN0cm95KF9NX3N0
YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf
c3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQgPSBfX25ld19zdGFydC5iYXNlKCk7
CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICB9CiAgfQp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+IHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRv
cj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9yYW5nZV9pbnNlcnQoaXRlcmF0b3IgX19w
b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAg
ICBfX3BvcyA9IGluc2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgKytfX3BvczsKICB9Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlcmF0b3I+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fcmFuZ2VfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7
CiAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgIGlmIChz
aXplX3R5cGUoX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9maW5pc2gpID49IF9fbikgewogICAgICBj
b25zdCBzaXplX3R5cGUgX19lbGVtc19hZnRlciA9IGVuZCgpIC0gX19wb3NpdGlvbjsKICAgICAg
aXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7CiAgICAgIGlmIChfX2VsZW1zX2FmdGVy
ID4gX19uKSB7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01f
ZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgY29w
eV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2ggLSBfX24sIF9fb2xkX2ZpbmlzaCk7
CiAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICB9CiAgICAg
IGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBfX2ZpcnN0OwogICAgICAg
IGFkdmFuY2UoX19taWQsIF9fZWxlbXNfYWZ0ZXIpOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29w
eShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBf
X2VsZW1zX2FmdGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29s
ZF9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7
CiAgICAgICAgY29weShfX2ZpcnN0LCBfX21pZCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgIH0K
ICAgIGVsc2UgewogICAgICBjb25zdCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXplLCBf
X24pOwogICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxvY2F0ZShfX2xlbikpOwogICAg
ICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICB0cnkgewogICAgICAg
IF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihfTV9zdGFydCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcG9zaXRpb24sIF9fbmV3
X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJz
dCwgX19sYXN0LCBfX25ld19maW5pc2gpOwogICAgICAgIF9fbmV3X2ZpbmlzaAogICAgICAgICAg
PSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwgX19u
ZXdfZmluaXNoKTsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg
X0Rlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgIF9NX2RlYWxsb2Nh
dGUoX19uZXdfc3RhcnQuYmFzZSgpLCBfX2xlbik7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9
CiAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICBfTV9kZWFsbG9jYXRl
KF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgX01fc3RhcnQg
PSBfX25ld19zdGFydC5iYXNlKCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNl
KCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47
CiAgICB9CiAgfQp9Cgp9CiMgNzIgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMiAzCiMgMSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYnZlY3Rvci5oIiAxIDMKIyA2NCAi
L2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9z
dGxfYnZlY3Rvci5oIiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBf
Qml0X3R5cGU7CiAgZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90eXBl
KSkgfTsKCnN0cnVjdCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAgX0Jp
dF90eXBlIF9NX21hc2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5
cGUgX195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRf
cmVmZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYgb3Bl
cmF0b3I9KGJvb2wgX194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAgICBl
bHNlICpfTV9wICY9IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfQml0X3JlZmVy
ZW5jZSYgb3BlcmF0b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVybiAq
dGhpcyA9IGJvb2woX194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5j
ZSYgX194KSBjb25zdAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAg
Ym9vbCBvcGVyYXRvcjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0
dXJuICFib29sKCp0aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49
IF9NX21hc2s7IH0KfTsKCmlubGluZSB2b2lkIHN3YXAoX0JpdF9yZWZlcmVuY2UgX194LCBfQml0
X3JlZmVyZW5jZSBfX3kpCnsKICBib29sIF9fdG1wID0gX194OwogIF9feCA9IF9feTsKICBfX3kg
PSBfX3RtcDsKfQoKc3RydWN0IF9CaXRfaXRlcmF0b3JfYmFzZSA6IHB1YmxpYyBpdGVyYXRvcjxy
YW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywgYm9vbD4KewogIF9CaXRfdHlwZSAqIF9NX3A7CiAg
dW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKF9CaXRfdHlwZSAq
IF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX01fcChfX3gpLCBfTV9vZmZzZXQoX195KSB7
fQoKICB2b2lkIF9NX2J1bXBfdXAoKSB7CiAgICBpZiAoX01fb2Zmc2V0KysgPT0gX01fd29yZF9i
aXQgLSAxKSB7CiAgICAgIF9NX29mZnNldCA9IDA7CiAgICAgICsrX01fcDsKICAgIH0KICB9CiAg
dm9pZCBfTV9idW1wX2Rvd24oKSB7CiAgICBpZiAoX01fb2Zmc2V0LS0gPT0gMCkgewogICAgICBf
TV9vZmZzZXQgPSBfTV93b3JkX2JpdCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZv
aWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19p
ICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfTV93b3JkX2JpdDsKICAgIF9fbiA9IF9f
biAlIF9NX3dvcmRfYml0OwogICAgaWYgKF9fbiA8IDApIHsKICAgICAgX01fb2Zmc2V0ID0gKHVu
c2lnbmVkIGludCkgX19uICsgX01fd29yZF9iaXQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQog
ICAgICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9y
PT0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9w
ID09IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9w
ZXJhdG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJu
IF9NX3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2ku
X01fb2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFz
ZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9w
ZXJhdG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJu
IF9faSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9i
YXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBv
cGVyYXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1
cm4gISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29u
c3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195
KSB7CiAgcmV0dXJuIF9NX3dvcmRfYml0ICogKF9feC5fTV9wIC0gX195Ll9NX3ApICsgX194Ll9N
X29mZnNldCAtIF9feS5fTV9vZmZzZXQ7Cn0KCgpzdHJ1Y3QgX0JpdF9pdGVyYXRvciA6IHB1Ymxp
YyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UgcmVmZXJlbmNl
OwogIHR5cGVkZWYgX0JpdF9yZWZlcmVuY2UqIHBvaW50ZXI7CiAgdHlwZWRlZiBfQml0X2l0ZXJh
dG9yIGl0ZXJhdG9yOwoKICBfQml0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwg
MCkge30KICBfQml0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkK
ICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0
b3IqKCkgY29uc3QgeyByZXR1cm4gcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7IH0K
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpIHsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiAq
dGhpczsKICB9CiAgaXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1w
ID0gKnRoaXM7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvci0tKCkgewogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gKnRoaXM7
CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0
aGlzOwogICAgX01fYnVtcF9kb3duKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQogIGl0ZXJhdG9y
JiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX2kpIHsKICAgIF9NX2luY3IoX19pKTsKICAg
IHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0b3ImIG9wZXJhdG9yLT0oZGlmZmVyZW5jZV90eXBl
IF9faSkgewogICAgKnRoaXMgKz0gLV9faTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgaXRlcmF0
b3Igb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9f
dG1wID0gKnRoaXM7CiAgICByZXR1cm4gX190bXAgKz0gX19pOwogIH0KICBpdGVyYXRvciBvcGVy
YXRvci0oZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIHJldHVybiBfX3RtcCAtPSBfX2k7CiAgfQoKICByZWZlcmVuY2Ugb3BlcmF0b3Jb
XShkaWZmZXJlbmNlX3R5cGUgX19pKSB7IHJldHVybiAqKCp0aGlzICsgX19pKTsgfQp9OwoKaW5s
aW5lIF9CaXRfaXRlcmF0b3IKb3BlcmF0b3IrKHB0cmRpZmZfdCBfX24sIGNvbnN0IF9CaXRfaXRl
cmF0b3ImIF9feCkgeyByZXR1cm4gX194ICsgX19uOyB9CgoKc3RydWN0IF9CaXRfY29uc3RfaXRl
cmF0b3IgOiBwdWJsaWMgX0JpdF9pdGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIGJvb2wgcmVmZXJl
bmNlOwogIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBib29s
KiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsK
CiAgX0JpdF9jb25zdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAg
X0JpdF9jb25zdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg
ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9y
KGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5f
TV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u
c3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAg
fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAg
cmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAg
Y29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVy
biBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1w
X2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3It
LShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rv
d24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0o
ZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlz
OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv
ciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0
b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0
ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9p
dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29u
c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJu
ICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJh
dG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0
dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBf
X2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm
IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl
CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y
KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2Nf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf
X2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnBy
b3RlY3RlZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0
dXJuIF9NX2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19N
X3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5f
TV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z
dGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxs
b2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9C
aXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90
eXBlICogX01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+
CmNsYXNzIF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAg
dHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0
b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2Fs
bG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3Jf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2Zp
bmlzaCgpLCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlw
ZW5hbWUgX0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQog
ICAgICAgICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlwZSAqIF9NX2JpdF9hbGxvYyhzaXplX3Qg
X19uKQogICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2Jp
dCAtIDEpL19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChf
TV9zdGFydC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9w
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0
YXJ0Ll9NX3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9y
IF9NX2ZpbmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRl
IDxjbGFzcyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9h
bGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190
cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rv
cl9hbGxvY19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j
X3RyYWl0czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsK
cHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jh
c2UoX19hKSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9
Cn07Cgp9CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBj
bGFzcyB2ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4K
ICB7CiAgcHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNp
emVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAg
ICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25z
dF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlw
ZWRlZiBjb25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRv
ciBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRv
cjsKCiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl
dmVyc2VfaXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxv
Yz46OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0
X2FsbG9jYXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6
Z2V0X2FsbG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9i
YXNlPF9BbGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9j
Pjo6X01fZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3Rh
cnQ7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5n
IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoK
ICAgIHZvaWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIF9CaXRfdHlwZSAq
IF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwogICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSAr
IChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICBfTV9zdGFydCA9IGl0
ZXJhdG9yKF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90
eXBlKF9fbik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlv
biwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9y
YWdlKSB7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2Zp
bmlzaCArIDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmluaXNo
OwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAqIHNpemUoKSA6IHN0YXRpY19jYXN0PHNpemVf
dHlwZT4oX01fd29yZF9iaXQpOwogICAgICAgIF9CaXRfdHlwZSAqIF9fcSA9IF9NX2JpdF9hbGxv
YyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9u
LCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAgICAqX19pKysgPSBfX3g7CiAgICAgICAgX01fZmlu
aXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICBfTV9kZWFsbG9jYXRl
KCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2Jp
dCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK
ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv
aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf
dGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRl
cmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn
KSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFy
dCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBf
TV9pbnNlcnRfcmFuZ2UoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICAgICAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpf
X2ZpcnN0KTsKICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9CgogICAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBf
X3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlm
IChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgICAgY29weV9iYWNrd2FyZChf
X3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNoICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAg
ICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgX01fZmlu
aXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg
ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAg
ICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAgICAgaXRl
cmF0b3IgX19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsK
ICAgICAgICAgIF9faSA9IGNvcHkoX19maXJzdCwgX19sYXN0LCBfX2kpOwogICAgICAgICAgX01f
ZmluaXNoID0gY29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19pKTsKICAgICAgICAgIF9NX2RlYWxs
b2NhdGUoKTsKICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01f
d29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3Io
X19xLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0b3Ig
YmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsgfQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBfTV9zdGFydDsgfQogICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01f
ZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5p
c2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0
IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAg
cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigp
KTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgewogICAgICByZXR1
cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBz
aXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBz
aXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29uc3Rf
aXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2UsIDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29s
IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5j
ZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24pCiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRp
ZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6
ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90
eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9yYW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25z
dCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfb3V0X29m
X3JhbmdlKCJ2ZWN0b3I8Ym9vbD4iKTsKICAgIH0KCiAgICByZWZlcmVuY2UgYXQoc2l6ZV90eXBl
IF9fbikKICAgICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9
CiAgICBjb25zdF9yZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBfTV9y
YW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogICAgZXhwbGljaXQgdmVj
dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6
IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpIHt9CgogICAgdmVjdG9yKHNpemVfdHlwZSBfX24s
IGJvb2wgX192YWx1ZSwKICAgICAgICAgICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0g
YWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKQogICAg
ewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01f
ZW5kX29mX3N0b3JhZ2UsIF9fdmFsdWUgPyB+MCA6IDApOwogICAgfQoKICAgIGV4cGxpY2l0IHZl
Y3RvcihzaXplX3R5cGUgX19uKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihhbGxvY2F0
b3JfdHlwZSgpKQogICAgewogICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01f
c3RhcnQuX01fcCwgX01fZW5kX29mX3N0b3JhZ2UsIDApOwogICAgfQoKICAgIHZlY3Rvcihjb25z
dCB2ZWN0b3ImIF9feCkgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX194LmdldF9hbGxvY2F0b3Io
KSkgewogICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICBjb3B5KF9feC5iZWdp
bigpLCBfX3guZW5kKCksIF9NX3N0YXJ0KTsKICAgIH0KCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBf
SW50ZWdlcj4KICAgIHZvaWQgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J
bnRlZ2VyIF9feCwgX190cnVlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAg
ICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwog
ICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p
dGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBlKSB7CiAg
ICAgIF9NX2luaXRpYWxpemVfcmFuZ2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVn
b3J5KF9fZmlyc3QpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgICB2ZWN0b3IoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0
LAogICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBl
KCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdy
YWw7CiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdy
YWwoKSk7CiAgICB9CgogICAgfnZlY3RvcigpIHsgfQoKICAgIHZlY3RvciYgb3BlcmF0b3I9KGNv
bnN0IHZlY3RvciYgX194KSB7CiAgICAgIGlmICgmX194ID09IHRoaXMpIHJldHVybiAqdGhpczsK
ICAgICAgaWYgKF9feC5zaXplKCkgPiBjYXBhY2l0eSgpKSB7CiAgICAgICAgX01fZGVhbGxvY2F0
ZSgpOwogICAgICAgIF9NX2luaXRpYWxpemUoX194LnNpemUoKSk7CiAgICAgIH0KICAgICAgY29w
eShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBiZWdpbigpKTsKICAgICAgX01fZmluaXNoID0gYmVn
aW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX3guc2l6ZSgpKTsKICAgICAgcmV0dXJuICp0aGlzOwog
ICAgfQoKCgoKCgogICAgdm9pZCBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBib29sIF9feCkg
ewogICAgICBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBf
TV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9f
biAtIHNpemUoKSwgX194KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBlcmFzZShiZWdp
bigpICsgX19uLCBlbmQoKSk7CiAgICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zf
c3RvcmFnZSwgX194ID8gfjAgOiAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgYXNzaWduKHNp
emVfdCBfX24sIGJvb2wgX194KSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX194KTsgfQoKICAgIHRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgYXNzaWduKF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
ICAgX01fYXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW50ZWdlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3Bh
dGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgICB7IF9N
X2ZpbGxfYXNzaWduKChzaXplX3QpIF9fbiwgKGJvb2wpIF9fdmFsKTsgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRl
ciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19mYWxzZV90eXBlKQogICAgICB7IF9NX2Fz
c2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsg
fQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWdu
X2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGl0ZXJhdG9yIF9f
Y3VyID0gYmVnaW4oKTsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX2N1ciAh
PSBlbmQoKTsgKytfX2N1ciwgKytfX2ZpcnN0KQogICAgICAgICpfX2N1ciA9ICpfX2ZpcnN0Owog
ICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgZXJhc2UoX19jdXIsIGVuZCgpKTsK
ICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsKICAgIH0K
CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01fYXNzaWdu
X2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChfX2xlbiA8
IHNpemUoKSkKICAgICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVu
ZCgpKTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmly
c3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3Qs
IF9fbWlkLCBiZWdpbigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwog
ICAgICB9CiAgICB9CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYg
KGNhcGFjaXR5KCkgPCBfX24pIHsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxs
b2MoX19uKTsKICAgICAgICBfTV9maW5pc2ggPSBjb3B5KGJlZ2luKCksIGVuZCgpLCBpdGVyYXRv
cihfX3EsIDApKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fc3RhcnQgPSBp
dGVyYXRvcihfX3EsIDApOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbiAr
IF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZlcmVu
Y2UgZnJvbnQoKSB7IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250
KCkgY29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1
cm4gKihlbmQoKSAtIDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0
dXJuICooZW5kKCkgLSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgICAg
aWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9maW5p
c2grKyA9IF9feDsKICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7
CiAgICB9CiAgICB2b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgICBz
dGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9maW5p
c2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9f
eC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3Ig
X19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9f
biA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01f
ZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01fZmluaXNo
KysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9f
eCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNs
YXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms
IF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsKICAg
IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2Vy
dF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9J
bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2UoX19w
b3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9
CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRl
cmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs
IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl
Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0
X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAg
fQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBl
IF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlmIChj
YXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3Np
dGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBm
aWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsK
ICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAg
ZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19u
KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19sZW4pOwogICAgICAg
IGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAw
KSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9NX2ZpbmlzaCA9IGNv
cHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAg
ICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19s
ZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9NX3N0YXJ0ID0gaXRl
cmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f
cG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0
KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9N
X2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAg
ICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9uICsg
MSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICByZXR1cm4g
X19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0
ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9f
Zmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNpemVf
dHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19uZXdfc2l6
ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3
X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3Np
emUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAoX0Jp
dF90eXBlICogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9vZl9zdG9yYWdlOyAr
K19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBjbGVhcigpIHsgZXJh
c2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxib29sLCBfX2FsbG9j
PiBiaXRfdmVjdG9yOwoKfQojIDczICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFs
bC9pbmNsdWRlL2crKy12My92ZWN0b3IiIDIgMwojIDQ2ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNo
L2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMK
IyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My90
eXBlaW5mbyIgMSAzCiMgNDAgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2UgX19jeHhh
Yml2MQp7CiAgY2xhc3MgX19jbGFzc190eXBlX2luZm87Cn0KIyA1NSAiL2J1aWxkcy9nY2MtM18x
LWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNl
IHN0ZAp7CgoKCiAgY2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFs
IH50eXBlX2luZm8oKTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25z
dCB0eXBlX2luZm8mKTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVj
dGVkOgogICAgY29uc3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0
eXBlX2luZm8oY29uc3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoK
ICAgIGNvbnN0IGNoYXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTgg
Ii9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL3R5cGVp
bmZvIiAzCiAgICBib29sIGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAg
eyByZXR1cm4gX19uYW1lIDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5f
X25hbWU7IH0KCiAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29u
c3QKICAgIHsgcmV0dXJuICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZp
cnR1YWwgYm9vbCBfX2lzX3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lz
X2Z1bmN0aW9uX3AoKSBjb25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChj
b25zdCB0eXBlX2luZm8gKl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBi
b29sIF9fZG9fdXBjYXN0KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3Rh
cmdldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25z
dDsKICB9OwoKCgogIGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJs
aWM6CiAgICBiYWRfY2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkg
dGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7
CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5i
YWRfdHlwZWlkKCkgdGhyb3coKTsKICB9Owp9Cgp9CiMgNDcgIi9idWlsZHMvZ2NjLTNfMS1icmFu
Y2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIg
MwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxl
CiAgICBsb2NhbGU6OmNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdAogICAgewog
ICAgICBfSW1wbCogX190bXAgPSBuZXcgX0ltcGwoKl9NX2ltcGwsIDEpOwogICAgICBfX3RtcC0+
X01fcmVwbGFjZV9mYWNldChfX290aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0
dXJuIGxvY2FsZShfX3RtcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYm9vbAogICAgbG9jYWxlOjpvcGVy
YXRvcigpKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYgX19zMikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBzdGQ6OmNvbGxhdGU8
X0NoYXJUPiBfX2NvbGxhdGVfdHlwZTsKICAgICAgY29uc3QgX19jb2xsYXRlX3R5cGUmIF9fY29s
bGF0ZSA9IHVzZV9mYWNldDxfX2NvbGxhdGVfdHlwZT4oKnRoaXMpOwogICAgICByZXR1cm4gKF9f
Y29sbGF0ZS5jb21wYXJlKF9fczEuZGF0YSgpLCBfX3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zMi5kYXRhKCksIF9fczIuZGF0YSgp
ICsgX19zMi5sZW5ndGgoKSkgPCAwKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0
PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7CiAgICAgIHNpemVfdCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2luZGV4OwogICAgICBsb2NhbGU6
Ol9JbXBsOjpfX3ZlY19mYWNldCogX19mYWNldCA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsK
ICAgICAgY29uc3QgbG9jYWxlOjpmYWNldCogX19mcCA9ICgqX19mYWNldClbX19pXTsKICAgICAg
aWYgKF9fZnAgPT0gMCB8fCBfX2kgPj0gX19mYWNldC0+c2l6ZSgpKQogICAgICAgIF9fdGhyb3df
YmFkX2Nhc3QoKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2Zw
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2Zh
Y2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9
IF9GYWNldDo6aWQuX01faW5kZXg7CiAgICAgIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0KiBf
X2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9f
ZmFjZXQtPnNpemUoKSAmJiAoKl9fZmFjZXQpW19faV0gIT0gMCk7CiAgICB9CgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9NX2V4dHJhY3RfZmxvYXQoX0luSXRlciBfX2Jl
ZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgIGlv
c19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMpIGNvbnN0CiAgICB7CiAgICAg
IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D
aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
Y29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+
ID4oX19sb2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVu
KCcrJyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScp
OwogICAgICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAg
ICBpZiAoKF9fYyA9PSBfX3BsdXMgfHwgX19jID09IF9fbWludXMpICYmIF9fYmVnICE9IF9fZW5k
KQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIo
KSk7CiAgICAgICAgICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAg
ICB9CgoKICAgICAgY29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRv
bXNbX01femVyb10pOwogICAgICBib29sIF9fZm91bmRfemVybyA9IGZhbHNlOwogICAgICB3aGls
ZSAoX19jID09IF9femVybyAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICB9
CiAgICAgIGlmIChfX2ZvdW5kX3plcm8pCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9T
X2F0b21zW19NX3plcm9dOwogICAgICAgICAgKytfX3BvczsKICAgICAgICB9CgoKICAgICAgY29u
c3Qgc2l6ZV90IF9fbGVuID0gX01fRSAtIF9NX3plcm8gKyAxOwogICAgICBjaGFyX3R5cGUgX193
YXRvbXNbX19sZW5dOwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9f
bGVuLCBfX3dhdG9tcyk7CiAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKICAgICAgYm9v
bCBfX2ZvdW5kX3NjaSA9IGZhbHNlOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kZWMgPSBfX25w
LmRlY2ltYWxfcG9pbnQoKTsKCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBj
b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2No
ZWNrX2dyb3VwaW5nID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAw
OwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKCiAg
ICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgogICAgICAgICAgdHlwZWRlZiBj
aGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fcCA9IF9fdHJhaXRzX3R5cGU6OmZpbmQoX193YXRvbXMsIDEwLCBfX2MpOwoKCiAgICAg
ICAgICBpZiAoX19wICYmIF9fYykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9z
OwogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBfX3dhdG9tc107CiAgICAg
ICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwICYmIF9fY2hlY2tfZ3Jv
dXBpbmcgJiYgIV9fZm91bmRfZGVjKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBpZiAo
X19zZXBfcG9zKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2ZvdW5kX2dy
b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAgICAg
IF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg
KF9fYyA9PSBfX2RlYyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgoKICAgICAgICAg
ICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICBfX2ZvdW5k
X2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICAgICAg
KytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4nOwogICAgICAgICAgICAgIF9fYyA9
ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9kZWMgPSB0cnVlOwogICAgICAgICAg
ICB9CiAgICAgICAgICBlbHNlIGlmICgoX19jID09IF9fd2F0b21zW19NX2VdIHx8IF9fYyA9PSBf
X3dhdG9tc1tfTV9FXSkKICAgICAgICAgICAgICAgICAgICYmICFfX2ZvdW5kX3NjaSAmJiBfX3Bv
cykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9f
eHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgX19jID0g
KigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wbHVzIHx8IF9fYyA9PSBf
X21pbnVzKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcG9zOwogICAg
ICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAg
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIF9fZm91bmRfc2NpID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoK
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKCgogICAgICBpZiAoX19jaGVja19ncm91cGlu
ZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgogICAgICAgICAgaWYgKCFf
X2ZvdW5kX2RlYykKICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxj
aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3Vw
aW5nLCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZh
aWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2Jl
ZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01f
ZXh0cmFjdF9pbnQoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s
CiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194
dHJjLCBpbnQmIF9fYmFzZSkgY29uc3QKICAgIHsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+
JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAgICAgaW9z
X2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJh
c2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpvY3QpCiAgICAgICAg
X19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkK
ICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAgICAgIF9fYmFzZSA9IDEwOwoKCiAg
ICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGlm
ICgoX19jID09IF9fY3R5cGUud2lkZW4oJysnKSB8fCBfX2MgPT0gX19jdHlwZS53aWRlbignLScp
KQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX194dHJj
ICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7CiAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFyX3R5cGUg
X196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBf
X1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAgICAgICAg
ewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdoaWxlIChf
X2MgPT0gX196ZXJvICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwog
ICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsr
X19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgIGlmICgoX19jID09IF9feCB8fCBfX2MgPT0gX19YKSAmJiBf
X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgKytfX3BvczsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg
ICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSA4OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jh
c2UgPT0gMTYpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fYyA9PSBfX3plcm8gJiYgX19iZWcg
IT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNb
X01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX2MgPSAqKCsr
X19iZWcpOwogICAgICAgICAgICAgIGlmICgoX19jID09IF9feCB8fCBfX2MgPT0gX19YKSAmJiBf
X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJj
ICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3Bv
czsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAo
X19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAg
IF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAg
ICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwog
ICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBp
bmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3Jv
dXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90
eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBf
X2VuZCkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190
cmFpdHNfdHlwZTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX190cmFpdHNfdHlw
ZTo6ZmluZChfX3dhdG9tcywgX19sZW4sIF9fYyk7CgoKICAgICAgICAgIGlmIChfX3AgJiYgX19j
KQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9feHRyYyArPSBfU19hdG9tc1tfX3AgLSBf
X3dhdG9tc107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICArK19fc2VwX3Bv
czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBlbHNlIGlmIChfX2MgPT0gX19zZXAgJiYgX19jaGVja19ncm91cGluZykKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9w
b3MpOwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBf
X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAg
IGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg
IHsKCiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2Vw
X3Bvcyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91
bmRfZ3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg
ICAgICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5k
KQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsK
ICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlm
ICghKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAg
ICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2Jl
ZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
YXNlKTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwog
ICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQog
ICAgICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8
PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAg
ICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBudW1w
dW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7
CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKS5jX3N0
cigpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2ZhbHNlID0gX19ucC5mYWxzZW5hbWUo
KS5jX3N0cigpOwoKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVuID0gX19ucC50cnVlbmFt
ZSgpLnNpemUoKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19mYWxzZW4gPSBfX25wLmZh
bHNlbmFtZSgpLnNpemUoKSAtIDE7CgogICAgICAgICAgZm9yIChzaXplX3QgX19uID0gMDsgX19i
ZWcgIT0gX19lbmQ7ICsrX19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBl
IF9fYyA9ICpfX2JlZysrOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZiA9IF9fbiA8PSBfX2Zh
bHNlbiA/IF9fYyA9PSBfX2ZhbHNlW19fbl0gOiBmYWxzZTsKICAgICAgICAgICAgICBib29sIF9f
dGVzdHQgPSBfX24gPD0gX190cnVlbiA/IF9fYyA9PSBfX3RydWVbX19uXSA6IGZhbHNlOwogICAg
ICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChfX3Rl
c3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgICB9
CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVy
Pjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl
JiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192KSBj
b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBf
X2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywg
X19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIs
IF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51
bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy
X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9f
eHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2Jl
ZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVkIGxv
bmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJy
LCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFp
bGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hvcnQ+
OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7
CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgcmV0
dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J
bkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9f
Z2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAg
ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25z
dAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBfX2Jl
ZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i
YXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0
cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAo
IShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1lcmlj
X2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1
bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6
OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGlu
dCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lv
LCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19z
dHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2Jl
ZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl
cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAg
ICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0
cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAg
ICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUs
IF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQs
IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAg
ICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy
Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJu
IF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgewog
ICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVn
ID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwog
ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2Nh
bGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91YmxlJiBf
X3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZl
KDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywg
X19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3Ys
IF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVt
X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJf
dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUm
IF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJj
OwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9mbG9h
dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRfdG9f
dihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsKCiAg
ICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFncyBf
X2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3NfYmFz
ZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBf
X2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6
c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAg
IF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJj
LCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQgbG9u
ZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIs
IF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWls
Yml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAgICAg
ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i
ZWc7CiAgICB9CiMgNjA0ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNs
dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+
CiAgICAgIF9PdXRJdGVyCiAgICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgICBf
TV9jb252ZXJ0X2Zsb2F0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2Zp
bGwsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVCBfX3YpIGNvbnN0
CiAgICAgIHsKCgogICAgICAgIGNvbnN0IGludCBfX21heF9kaWdpdHMgPSBudW1lcmljX2xpbWl0
czxfVmFsdWVUPjo6ZGlnaXRzMTAgKyAxOwogICAgICAgIHN0cmVhbXNpemUgX19wcmVjID0gX19p
by5wcmVjaXNpb24oKTsKCiAgICAgICAgaWYgKF9fcHJlYyA+IHN0YXRpY19jYXN0PHN0cmVhbXNp
emU+KF9fbWF4X2RpZ2l0cykpCiAgICAgICAgICBfX3ByZWMgPSBzdGF0aWNfY2FzdDxzdHJlYW1z
aXplPihfX21heF9kaWdpdHMpOwoKCiAgICAgICAgY2hhciBfX2ZidWZbMTZdOwoKCiAgICAgICAg
aW50IF9fbGVuOwoKCgogICAgICAgIGludCBfX2NzX3NpemUgPSBfX21heF9kaWdpdHMgKiAzOwog
ICAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShf
X2NzX3NpemUpKTsKCiAgICAgICAgY29uc3QgYm9vbCBfX2ZwID0gX1NfZm9ybWF0X2Zsb2F0KF9f
aW8sIF9fZmJ1ZiwgX19tb2QsIF9fcHJlYyk7CiAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICBf
X2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9fdiwgX1Nf
Y19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2NvbnZl
cnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsIF9TX2NfbG9jYWxlKTsKCgog
ICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3NpemUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9f
Y3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIq
PihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwogICAgICAgICAgICBpZiAoX19mcCkKICAg
ICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2Zi
dWYsIF9fdiwgX1NfY19sb2NhbGUsIF9fcHJlYyk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCBfX2ZidWYsIF9f
diwgX1NfY19sb2NhbGUpOwogICAgICAgICAgfQojIDY2NCAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwog
ICAgICAgIHJldHVybiBfTV93aWRlbl9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19s
ZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIg
X19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAg
ICAgICAgICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAg
ICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVm
LCBfX21vZCwgX19tb2RsKTsKCgogICAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBj
aGFyKiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXpl
KSk7CiAgICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUs
IF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgogICAgICAgIGlmIChfX2xlbiA+PSBfX2NzX3Np
emUpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAgICAg
ICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6
ZSkpOwogICAgICAgICAgICBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXpl
LCBfX2ZidWYsIF9fdiwgX1NfY19sb2NhbGUpOwogICAgICAgICAgfQoKCgoKCgogICAgICAgIHJl
dHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9fbGVuKTsKICAgICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5fZmxvYXQo
X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciogX19jcywK
ICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCog
X193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFy
VCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy
VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAg
ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0
IF9DaGFyVCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2Zh
Y2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlmIChfX3AgPSBjaGFyX3RyYWl0
czxfQ2hhclQ+OjpmaW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQogICAgICAg
IF9fd3NbX19wIC0gX193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoKCiAgICAgIGNvbnN0
IHN0cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBpb3NfYmFzZTo6Zm10
ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwog
ICAgICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBf
X3AyOwogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6IF9fbGVuOwog
ICAgICAgICAgX19wMiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5kc19zZXAo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91
cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193cyAr
IF9fZGVjbGVuKTsKICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBfX3dzMjsKCgogICAg
ICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPF9D
aGFyVD46OmNvcHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAgICAgICBf
X25ld2xlbiArPSBfX2xlbiAtIF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIF9f
d3MgPSBfX3dzMjsKICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoKICAgICAg
cmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50KF9PdXRJ
dGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAg
ICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBf
X2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUg
PSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICog
X19sZW4pKTsKCgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19i
dWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0
eXBlLndpZGVuKF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgbnVtcHVu
Y3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwog
ICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgY29u
c3QgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jh
c2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCgoK
ICAgICAgICAgIHN0cmVhbXNpemUgX19vZmYgPSAwOwogICAgICAgICAgaWYgKF9faW8uZmxhZ3Mo
KSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlv
c19iYXNlOjpvY3QpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX19vZmYgPSAxOwog
ICAgICAgICAgICAgICAgKl9fd3MyID0gKl9fd3M7CiAgICAgICAgICAgICAgfQogICAgICAgICAg
ICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgIF9fb2ZmID0gMjsKICAgICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dz
OwogICAgICAgICAgICAgICAgKihfX3dzMiArIDEpID0gKihfX3dzICsgMSk7CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgX0NoYXJUKiBfX3A7CiAgICAgICAgICBfX3AgPSBfX2FkZF9ncm91cGlu
ZyhfX3dzMiArIF9fb2ZmLCBfX25wLnRob3VzYW5kc19zZXAoKSwgX19ncm91cGluZy5jX3N0cigp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19n
cm91cGluZy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzICsgX19v
ZmYsIF9fd3MgKyBfX2xlbik7CiAgICAgICAgICBfX2xlbiA9IF9fcCAtIF9fd3MyOwoKICAgICAg
ICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBf
X2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJU
LCBfT3V0SXRlcj46OgogICAgX01faW5zZXJ0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8s
IF9DaGFyVCBfX2ZpbGwsIGNvbnN0IF9DaGFyVCogX193cywKICAgICAgICAgICAgICBpbnQgX19s
ZW4pIGNvbnN0CiAgICB7CgogICAgICBzdHJlYW1zaXplIF9fdyA9IF9faW8ud2lkdGgoKTsKICAg
ICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo
c2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYgKF9fdyA+IHN0YXRpY19jYXN0PHN0
cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAgICBfX3BhZChfX2lvLCBfX2ZpbGws
IF9fd3MyLCBfX3dzLCBfX3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGlj
X2Nhc3Q8aW50PihfX3cpOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAg
IF9faW8ud2lkdGgoMCk7CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyAr
K19faiwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVy
X3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNv
bnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygp
OwogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAg
IHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9N
X2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAndScsIGNoYXJfdHlwZSgpLCBfX3V2KTsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVz
ZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX3dzOwogICAgICAgICAgaW50IF9fbGVuOwogICAgICAgICAgaWYgKF9fdikKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIF9fd3MgPSBfX25wLnRydWVuYW1lKCkuY19zdHIoKTsKICAg
ICAgICAgICAgICBfX2xlbiA9IF9fbnAudHJ1ZW5hbWUoKS5zaXplKCk7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fd3MgPSBfX25wLmZh
bHNlbmFtZSgpLmNfc3RyKCk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX25wLmZhbHNlbmFtZSgp
LnNpemUoKTsKICAgICAgICAgICAgfQogICAgICAgICAgX19zID0gX01faW5zZXJ0KF9fcywgX19p
bywgX19maWxsLCBfX3dzLCBfX2xlbik7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091
dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlw
ZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QK
ICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXJf
dHlwZSgpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091
dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBk
b19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0
X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyX3R5cGUoKSwgX192KTsgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg
ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19iLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAg
eyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2IsIF9fZmlsbCwgJ2QnLCAnbCcsIF9fdik7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P
dXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5
cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNp
Z25lZCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19z
LCBfX2lvLCBfX2ZpbGwsICd1JywgJ2wnLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJU
LCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBj
aGFyX3R5cGUgX19maWxsLCBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVy
dF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgY2hhcl90eXBlKCksIF9fdik7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3Yp
IGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCAn
TCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl
cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg
PSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjpp
bnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAmIF9fZm10IHwgKGlvc19iYXNlOjpo
ZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAg
X19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1JywgY2hhcl90eXBlKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHVuc2lnbmVk
IGxvbmc+KF9fdikpOwogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsKICAgICAgICB9CiAg
ICAgIGNhdGNoICguLi4pCiAgICAgICAgewogICAgICAgICAgX19pby5mbGFncyhfX2ZsYWdzKTsK
ICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG1vbmV5X2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcs
IGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdW5pdHMpIGNvbnN0CiAg
ICB7CiAgICAgIHN0cmluZ190eXBlIF9fc3RyOwogICAgICBfX2JlZyA9IHRoaXMtPmRvX2dldChf
X2JlZywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fc3RyKTsKCiAgICAgIGNvbnN0IGlu
dCBfX24gPSBudW1lcmljX2xpbWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwOwogICAgICBjaGFy
KiBfX2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19uKSk7CiAgICAg
IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D
aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAg
Y29uc3QgX0NoYXJUKiBfX3djcyA9IF9fc3RyLmNfc3RyKCk7CiAgICAgIF9fY3R5cGUubmFycm93
KF9fd2NzLCBfX3djcyArIF9fc3RyLnNpemUoKSArIDEsIGNoYXIoKSwgX19jcyk7CiAgICAgIF9f
Y29udmVydF90b192KF9fY3MsIF9fdW5pdHMsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9z
X2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdf
dHlwZSYgX191bml0cykgY29uc3QKICAgIHsKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hh
clQsIHRydWU+IF9fbW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwg
ZmFsc2U+IF9fbW9uZXlfZmFsc2U7CiAgICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0
OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBl
OwoKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qg
X19tb25leV90cnVlJiBfX21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAg
ICAgY29uc3QgX19tb25leV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4o
X19sb2MpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0
eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAgICBjb25zdCBtb25leV9iYXNlOjpwYXR0ZXJuIF9f
cCA9IF9faW50bCA/IF9fbXB0Lm5lZ19mb3JtYXQoKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKCiAgICAgIGNvbnN0IHN0
cmluZ190eXBlIF9fcG9zX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5wb3NpdGl2ZV9z
aWduKCk7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fbmVnX3NpZ24gPV9faW50bCA/IF9fbXB0
Lm5lZ2F0aXZlX3NpZ24oKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBfX21wZi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBf
X2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IF9fbXBmLmRlY2ltYWxfcG9pbnQoKTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9f
c2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIGNvbnN0IHN0
cmluZyBfX2dyb3VwaW5nID0gX19pbnRsID8gX19tcHQuZ3JvdXBpbmcoKSA6IF9fbXBmLmdyb3Vw
aW5nKCk7CgoKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwoKICAgICAgc3RyaW5nIF9fZ3JvdXBp
bmdfdG1wOwoKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CgogICAgICBib29sIF9fdGVzdHZhbGlk
ID0gdHJ1ZTsKCiAgICAgIGJvb2wgX190ZXN0ZGVjZm91bmQgPSBmYWxzZTsKCgogICAgICBzdHJp
bmdfdHlwZSBfX3RlbXBfdW5pdHM7CgogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAg
ICBjaGFyX3R5cGUgX19lb2YgPSBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KGNoYXJfdHJhaXRzPGNo
YXJfdHlwZT46OmVvZigpKTsKICAgICAgZm9yIChpbnQgX19pID0gMDsgX19iZWcgIT0gX19lbmQg
JiYgX19pIDwgNCAmJiBfX3Rlc3R2YWxpZDsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgcGFy
dCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAgICAg
c3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgY2FzZSBt
b25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBp
b3NfYmFzZTo6c2hvd2Jhc2UKICAgICAgICAgICAgICAgICAgICAgIHx8IF9faSA8IDIKICAgICAg
ICAgICAgICAgICAgICAgIHx8IChfX2kgPT0gMiAmJiBzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmll
bGRbM10pICE9IG1vbmV5X2Jhc2U6Om5vbmUpCiAgICAgICAgICAgICAgICAgICAgICB8fCBfX3Np
Z24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgICAgICAgICB7CgoKCgogICAgICAgICAgICAgICAg
ICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5
bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIDogX19tcGYuY3Vycl9zeW1ib2woKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNpemUoKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVf
dHlwZSBfX2ogPSAwOwogICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5k
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xb
X19qXSA9PSBfX2MpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19q
OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgaWYgKF9f
aiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlKSkKICAgICAg
ICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9i
YXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9f
bmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg
IGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nfc2lnbjsKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdfc2lnblswXSkKICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICBfX3Rl
c3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX3Bvc19zaWduWzBdKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247
CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19uZWdfc2lnbi5zaXplKCkgJiYgX19j
ID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICoo
KytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CgoKICAgICAgICAgICAgICAg
ICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19j
dHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNmb3VuZCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQogICAgICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8
Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAw
OwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19jID09
IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgewoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZ190bXAgKz0gc3RhdGljX2Nh
c3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zZXBf
cG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RlbXBfdW5pdHMgKz0gX19j
OwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj
YXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpu
b25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAhPSAzKQogICAgICAgICAgICAgICAgICAg
IHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2N0
eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICB7CiAgICAg
ICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6ZSgpOwogICAgICAgICAgc2l6ZV90eXBl
IF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9IF9fZW9mICYmIF9faSA8IF9fbGVuOyAr
K19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25b
X19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwoKICAgICAgICAgIGlmIChfX2kg
IT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAg
ICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19jdHlwZS53aWRlbignMCcpKQogICAgICAg
IF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMuYmVnaW4oKSk7CgogICAgICBpZiAoX19z
aWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2lnbikKICAgICAgICBfX3RlbXBfdW5pdHMu
aW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0eXBlLndpZGVuKCctJykpOwoKCiAgICAg
IGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3VwaW5nX3RtcC5zaXplKCkpCiAgICAgICAg
ewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5n
X3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAg
IGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgog
ICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBfdW5pdHMuc2l6ZSgpKQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBlbHNlCgogICAgICAgIF9fdGVtcF91bml0
cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG1vbmV5
X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBf
X2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIGxvbmcg
ZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAg
ICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2Nz
X3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3Np
emUsICIlLjAxTGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7CgogICAgICBpZiAoX19sZW4gPj0g
X19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9fbGVuICsgMTsKICAg
ICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3Np
emUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUs
ICIlLjAxTGYiLCBfX3VuaXRzLCBfU19jX2xvY2FsZSk7CiAgICAgICAgfQoKCgoKCgoKICAgICAg
X0NoYXJUKiBfX3dzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKSAqIF9fY3Nfc2l6ZSkpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3Mg
KyBfX2xlbiwgX193cyk7CiAgICAgIHN0cmluZ190eXBlIF9fZGlnaXRzKF9fd3MpOwogICAgICBy
ZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fZGlnaXRzKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAg
IF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0
ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmls
bCwKICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICB7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAg
ICAgIHR5cGVkZWYgbW9uZXlfYmFzZTo6cGFydCBwYXJ0OwoKICAgICAgY29uc3QgbG9jYWxlIF9f
bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fd2lkdGggPSBzdGF0
aWNfY2FzdDxzaXplX3R5cGU+KF9faW8ud2lkdGgoKSk7CgoKICAgICAgdHlwZWRlZiBtb25leXB1
bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8
X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgY29uc3QgX19tb25leV90cnVlJiBf
X21wdCA9IHVzZV9mYWNldDxfX21vbmV5X3RydWU+KF9fbG9jKTsKICAgICAgY29uc3QgX19tb25l
eV9mYWxzZSYgX19tcGYgPSB1c2VfZmFjZXQ8X19tb25leV9mYWxzZT4oX19sb2MpOwogICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CgoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19iZWcgPSBfX2RpZ2l0cy5kYXRhKCk7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19lbmQgPSBfX2JlZyArIF9fZGlnaXRzLnNpemUoKTsK
ICAgICAgbW9uZXlfYmFzZTo6cGF0dGVybiBfX3A7CiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsK
ICAgICAgaWYgKCpfX2JlZyAhPSBfX2N0eXBlLndpZGVuKCctJykpCiAgICAgICAgewogICAgICAg
ICAgX19wID0gX19pbnRsID8gX19tcHQucG9zX2Zvcm1hdCgpIDogX19tcGYucG9zX2Zvcm1hdCgp
OwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5wb3NpdGl2ZV9zaWduKCkgOiBfX21w
Zi5wb3NpdGl2ZV9zaWduKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAg
ICAgX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgpIDogX19tcGYubmVnX2Zvcm1hdCgp
OwogICAgICAgICAgX19zaWduID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkgOiBfX21w
Zi5uZWdhdGl2ZV9zaWduKCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgIH0KCgogICAgICBf
X2VuZCA9IF9fY3R5cGUuc2Nhbl9ub3QoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYmVnLCBfX2VuZCk7
CiAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgoKCiAgICAgICAgICBzdHJpbmdf
dHlwZSBfX3JlczsKICAgICAgICAgIHN0cmluZ190eXBlIF9fdmFsdWU7CiAgICAgICAgICBjb25z
dCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9z
eW1ib2woKTsKCgogICAgICAgICAgY29uc3QgaW50IF9fZnJhYyA9IF9faW50bCA/IF9fbXB0LmZy
YWNfZGlnaXRzKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5m
cmFjX2RpZ2l0cygpOwogICAgICAgICAgaWYgKF9fZnJhYyA+IDApCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9w
b2ludCgpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm
LmRlY2ltYWxfcG9pbnQoKTsKICAgICAgICAgICAgICBpZiAoX19lbmQgLSBfX2JlZyA+PSBfX2Zy
YWMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdf
dHlwZShfX2VuZCAtIF9fZnJhYywgX19lbmQpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmlu
c2VydChfX3ZhbHVlLmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fZW5kIC09IF9f
ZnJhYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5k
KTsKICAgICAgICAgICAgICAgICAgaW50IF9fcGFkZGVjID0gX19mcmFjIC0gKF9fZW5kIC0gX19i
ZWcpOwogICAgICAgICAgICAgICAgICBjaGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbign
MCcpOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVlLmJlZ2luKCksIF9f
cGFkZGVjLCBfX3plcm8pOwogICAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydChfX3ZhbHVl
LmJlZ2luKCksIF9fZCk7CiAgICAgICAgICAgICAgICAgIF9fYmVnID0gX19lbmQ7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KCgoKICAgICAgICAgIGlmIChfX2JlZyAhPSBfX2VuZCkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHN0cmluZyBfX2dyb3VwaW5nID0gX19p
bnRsID8gX19tcHQuZ3JvdXBpbmcoKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDogX19tcGYuZ3JvdXBpbmcoKTsKICAgICAgICAgICAgICBpZiAoX19ncm91
cGluZy5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNf
c2VwKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZ2JlZyA9IF9fZ3JvdXBpbmcu
Y19zdHIoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nZW5kID0gX19nYmVnICsg
X19ncm91cGluZy5zaXplKCk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBfX24gPSAoX19l
bmQgLSBfX2JlZykgKiAyOwogICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3MyID0KICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv
ZihfQ2hhclQpICogX19uKSk7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193c19lbmQgPSBf
X2FkZF9ncm91cGluZyhfX3dzMiwgX19zZXAsIF9fZ2JlZywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19iZWcsIF9fZW5kKTsKICAg
ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoMCwgX193czIsIF9fd3NfZW5kIC0gX193czIp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f
dmFsdWUuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCkpOwogICAgICAgICAgICB9
CgoKICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2YgPSBfX2lvLmZsYWdzKCkgJiBpb3Nf
YmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3ZhbHVlLnNp
emUoKSArIF9fc2lnbi5zaXplKCk7CiAgICAgICAgICBfX2xlbiArPSAoX19pby5mbGFncygpICYg
aW9zX2Jhc2U6OnNob3diYXNlKSA/IF9fc3ltYm9sLnNpemUoKSA6IDA7CiAgICAgICAgICBib29s
IF9fdGVzdGlwYWQgPSBfX2YgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbGVuIDwgX193aWR0
aDsKCgogICAgICAgICAgZm9yIChpbnQgX19pID0gMDsgX19pIDwgNDsgKytfX2kpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0PihfX3Au
ZmllbGRbX19pXSk7CiAgICAgICAgICAgICAgc3dpdGNoIChfX3doaWNoKQogICAgICAgICAgICAg
ICAgewogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzeW1ib2w6CiAgICAgICAgICAg
ICAgICAgIGlmIChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAg
ICAgICAgICAgX19yZXMgKz0gX19zeW1ib2w7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKCgogICAgICAgICAgICAgICAgICBp
ZiAoX19zaWduLnNpemUoKSkKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3NpZ25bMF07
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNl
Ojp2YWx1ZToKICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX192YWx1ZTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgoKCgog
ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAgICAgICAgICBfX3Jl
cyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX2N0eXBlLndpZGVuKF9fZmls
bCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9i
YXNlOjpub25lOgogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0aXBhZCkKICAgICAgICAgICAg
ICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgoK
ICAgICAgICAgIGlmIChfX3NpZ24uc2l6ZSgpID4gMSkKICAgICAgICAgICAgX19yZXMgKz0gc3Ry
aW5nX3R5cGUoX19zaWduLmJlZ2luKCkgKyAxLCBfX3NpZ24uZW5kKCkpOwoKCiAgICAgICAgICBf
X2xlbiA9IF9fcmVzLnNpemUoKTsKICAgICAgICAgIGlmIChfX3dpZHRoID4gX19sZW4pCiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mID09IGlvc19iYXNlOjpsZWZ0KQoKICAgICAg
ICAgICAgICAgIF9fcmVzLmFwcGVuZChfX3dpZHRoIC0gX19sZW4sIF9fZmlsbCk7CiAgICAgICAg
ICAgICAgZWxzZQoKICAgICAgICAgICAgICAgIF9fcmVzLmluc2VydCgwLCBzdHJpbmdfdHlwZShf
X3dpZHRoIC0gX19sZW4sIF9fZmlsbCkpOwogICAgICAgICAgICAgIF9fbGVuID0gX193aWR0aDsK
ICAgICAgICAgICAgfQoKCiAgICAgICAgICBmb3IgKHNpemVfdHlwZSBfX2ogPSAwOyBfX2ogPCBf
X2xlbjsgKytfX2osICsrX19zKQogICAgICAgICAgICAqX19zID0gX19yZXNbX19qXTsKICAgICAg
ICB9CiAgICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB0aW1lX2Jhc2U6
OmRhdGVvcmRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6ZG9fZGF0ZV9vcmRlcigp
IGNvbnN0CiAgICB7IHJldHVybiB0aW1lX2Jhc2U6Om5vX29yZGVyOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9D
aGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19i
ZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2Zvcm1hdCkgY29uc3QKICAgIHsKICAgICAgbG9j
YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25z
dCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBj
b25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf
X2xvYyk7CiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJhaXRzPF9DaGFyVD46Omxlbmd0aChf
X2Zvcm1hdCk7CgogICAgICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBf
X2kgPCBfX2xlbiAmJiAhX19lcnI7ICsrX19pKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19j
ID0gX19mb3JtYXRbX19pXTsKICAgICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7
CgogICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAgICAgICAgICBjaGFy
IF9fbW9kID0gMDsKICAgICAgICAgICAgICBpbnQgX19tZW0gPSAwOwogICAgICAgICAgICAgIGlm
IChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAgICAgICBfX2MgPSBfX2Zvcm1hdFsrK19f
aV07CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgc3dpdGNoIChfX2MpCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fY3M7CiAgICAgICAgICAg
ICAgICAgIF9DaGFyVCBfX3djc1sxMF07CiAgICAgICAgICAgICAgICBjYXNlICdhJzoKCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzMVs3XTsKICAgICAgICAgICAgICAg
ICAgX190cC5fTV9kYXlzX2FiYnJldmlhdGVkKF9fZGF5czEpOwogICAgICAgICAgICAgICAgICBf
TV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2RheXMxLCA3LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0EnOgoKICAgICAgICAgICAgICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2RheXMyWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RheXMo
X19kYXlzMik7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQs
IF9fdG0tPnRtX3dkYXksIF9fZGF5czIsIDcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAnaCc6CiAgICAgICAgICAgICAgICBjYXNlICdiJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXJfdHlwZSogX19tb250aHMxWzEyXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250
aHNfYWJicmV2aWF0ZWQoX19tb250aHMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
YW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRoczEsIDEyLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ0InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX21vbnRoczJbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRocyhfX21v
bnRoczIpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBf
X3RtLT50bV9tb24sIF9fbW9udGhzMiwgMTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAnYyc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZHRbMl07CiAgICAg
ICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV90aW1lX2Zvcm1hdHMoX19kdCk7CiAgICAgICAgICAg
ICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBf
X3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kdFswXSk7CiAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnZCc6CgogICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21kYXksIDEs
IDMxLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnRCc6CgogICAg
ICAgICAgICAgICAgICBfX2NzID0gIiVtLyVkLyV5IjsKICAgICAgICAgICAgICAgICAgX19jdHlw
ZS53aWRlbihfX2NzLCBfX2NzICsgOSwgX193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRy
YWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdIJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4
dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMCwgMjMsIDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdJJzoKCiAgICAgICAgICAgICAgICAgIF9N
X2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1faG91ciwgMSwgMTIsIDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtJzoKCiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDEsIDEyLCAyLCBfX2N0eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAg
IGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+dG1fbW9uID0gX19tZW0gLSAx
OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ00nOgoKICAg
ICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9taW4s
IDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vy
cik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbic6CiAg
ICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcbicpCiAg
ICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1InOgoKICAgICAgICAgICAgICAgICAgX19j
cyA9ICIlSDolTSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr
IDYsIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgY2FzZSAnUyc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l
bmQsIF9fdG0tPnRtX3NlYywgMCwgNTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICBjYXNlICd0JzoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2Jl
ZywgMCkgPT0gJ1x0JykKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAg
ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdUJzoKCiAgICAgICAg
ICAgICAgICAgIF9fY3MgPSAiJUg6JU06JVMiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndp
ZGVuKF9fY3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf
dmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hh
cl90eXBlKiBfX2RhdGVzWzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX2RhdGVfZm9ybWF0
cyhfX2RhdGVzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2RhdGVzWzBdKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdYJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX190
aW1lc1syXTsKICAgICAgICAgICAgICAgICAgX190cC5fTV90aW1lX2Zvcm1hdHMoX190aW1lcyk7
CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9f
aW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X190aW1lc1swXSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2Fz
ZSAneSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9f
dG0tPnRtX3llYXIsIDAsIDk5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
Y2FzZSAnWSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQs
IF9fbWVtLCAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmljX2xpbWl0
czxpbnQ+OjptYXgoKSwgNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw
ZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICAgICAg
ICAgIF9fdG0tPnRtX3llYXIgPSBfX21lbSAtIDE5MDA7CiAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgY2FzZSAnWic6CgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlw
ZS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgKl9fYmVnKSkKICAgICAgICAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgICAgICBpbnQgX190bXA7CiAgICAgICAgICAgICAgICAgICAgICBfTV9l
eHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMTQsIF9fZXJyKTsKCgogICAgICAgICAgICAg
ICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgICAgICAgICAgICAgICAgIGlm
ICghX19lcnIgJiYgX190bXAgPT0gMAogICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2Mg
PT0gX19jdHlwZS53aWRlbignLScpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IF9f
YyA9PSBfX2N0eXBlLndpZGVuKCcrJykpKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwg
MCwgMjMsIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5
cGUsIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl
ZywgX19lbmQsIF9fdG1wLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAg
ICAgICAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAg
ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19jdHlwZS5uYXJyb3coKl9fYmVn
LCAwKSkKICAgICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNl
CiAgICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK
ICAgIF9NX2V4dHJhY3RfbnVtKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGlu
dCYgX19tZW1iZXIsCiAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwgc2l6
ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw
ZSwKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VycikgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90IF9faSA9IDA7CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgYm9v
bCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAg
IHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBfX2xlbgogICAgICAgICAgICAgJiYgX19j
dHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAgICAgICAgICBfX2Rp
Z2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19jID0gKigrK19fYmVn
KTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9PSBfX2xlbikKICAg
ICAgICB7CiAgICAgICAgICBpbnQgX192YWx1ZSA9IGF0b2koX19kaWdpdHMuY19zdHIoKSk7CiAg
ICAgICAgICBpZiAoX19taW4gPD0gX192YWx1ZSAmJiBfX3ZhbHVlIDw9IF9fbWF4KQogICAgICAg
ICAgICBfX21lbWJlciA9IF9fdmFsdWU7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fdGVz
dHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX190ZXN0dmFsaWQg
PSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFz
ZTo6ZmFpbGJpdDsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIF9N
X2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9f
bWVtYmVyLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCoqIF9fbmFtZXMsIHNpemVf
dCBfX2luZGV4bGVuLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
cikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFyX3R5cGU+IF9fdHJh
aXRzX3R5cGU7CiAgICAgIGludCogX19tYXRjaGVzID0gc3RhdGljX2Nhc3Q8aW50Kj4oX19idWls
dGluX2FsbG9jYShzaXplb2YoaW50KSAqIF9faW5kZXhsZW4pKTsKICAgICAgc2l6ZV90IF9fbm1h
dGNoZXMgPSAwOwogICAgICBzaXplX3QgX19wb3MgPSAwOwogICAgICBib29sIF9fdGVzdHZhbGlk
ID0gdHJ1ZTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX25hbWU7CgogICAgICBjaGFyX3R5cGUg
X19jID0gKl9fYmVnOwoKICAgICAgZm9yIChzaXplX3QgX19pMSA9IDA7IF9faTEgPCBfX2luZGV4
bGVuOyArK19faTEpCiAgICAgICAgaWYgKF9fYyA9PSBfX25hbWVzW19faTFdWzBdKQogICAgICAg
ICAgX19tYXRjaGVzW19fbm1hdGNoZXMrK10gPSBfX2kxOwoKICAgICAgd2hpbGUoX19ubWF0Y2hl
cyA+IDEpCiAgICAgICAgewoKICAgICAgICAgIHNpemVfdCBfX21pbmxlbiA9IDEwOwogICAgICAg
ICAgZm9yIChzaXplX3QgX19pMiA9IDA7IF9faTIgPCBfX25tYXRjaGVzOyArK19faTIpCiAgICAg
ICAgICAgIF9fbWlubGVuID0gbWluKF9fbWlubGVuLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lc1tfX21hdGNoZXNbX19pMl1dKSk7CgogICAg
ICAgICAgaWYgKF9fcG9zIDwgX19taW5sZW4gJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgZm9yIChzaXplX3QgX19pMyA9IDA7IF9faTMgPCBfX25tYXRjaGVzOyAr
K19faTMpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbmFtZSA9IF9fbmFt
ZXNbX19tYXRjaGVzW19faTNdXTsKICAgICAgICAgICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10g
IT0gX19jKQogICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlc1tfX2kzXSA9IF9fbWF0Y2hlc1st
LV9fbm1hdGNoZXNdOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCiAgICAgIGlmIChfX25tYXRjaGVzID09
IDEpCiAgICAgICAgewoKICAgICAgICAgIF9fbmFtZSA9IF9fbmFtZXNbX19tYXRjaGVzWzBdXTsK
ICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX25h
bWUpOwogICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQgJiYg
X19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7Cgog
ICAgICAgICAgaWYgKF9fbGVuID09IF9fcG9zKQogICAgICAgICAgICBfX21lbWJlciA9IF9fbWF0
Y2hlc1swXTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsK
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICBp
ZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5J
dGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF90aW1lKGl0ZXJf
dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAg
IF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIlWCI7CiAgICAgIGxv
Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9f
Y3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX19jdHlwZS53
aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQo
X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAgICBpZiAoX19iZWcg
PT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJu
IF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0
CiAgICB7CiAgICAgIF9DaGFyVCBfX3djc1szXTsKICAgICAgY29uc3QgY2hhciogX19jcyA9ICIl
eCI7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFy
VD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgMywgX193Y3MpOwogICAgICBfTV9leHRyYWN0
X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwgX193Y3MpOwogICAg
ICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsK
ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+
OjoKICAgIGRvX2dldF93ZWVrZGF5KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8Y2hhcl90
eXBlPiBfX3RyYWl0c190eXBlOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwog
ICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1
bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlzWzddOwog
ICAgICBfX3RwLl9NX2RheXNfYWJicmV2aWF0ZWQoX19kYXlzKTsKICAgICAgaW50IF9fdG1wd2Rh
eTsKICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bXB3ZGF5LCBfX2RheXMs
IDcsIF9fZXJyKTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAg
c2l6ZV90IF9fcG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fZGF5c1tfX3RtcHdkYXldKTsK
ICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX25hbWUgPSBfX2RheXNbX190bXB3ZGF5XTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3Nd
ID09ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19s
ZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAo
X19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBf
X25hbWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7
CiAgICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIg
fD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIp
CiAgICAgICAgICAgIF9fdG0tPnRtX3dkYXkgPSBfX3RtcHdkYXk7CiAgICAgICAgfQogICAgICBp
ZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAg
ICAgcmV0dXJuIF9fYmVnOwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6
CiAgICBkb19nZXRfbW9udGhuYW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLAog
ICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f
ZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxjaGFy
X3R5cGU+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1l
cHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX21vbnRoc1sx
Ml07CiAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9udGhzKTsKICAgICAgaW50
IF9fdG1wbW9uOwogICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcG1vbiwg
X19tb250aHMsIDEyLCBfX2Vycik7CgoKCgoKCgogICAgICBpZiAoIV9fZXJyKQogICAgICAgIHsK
ICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX21vbnRoc1tf
X3RtcG1vbl0pOwogICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMpOwogICAgICAgICAg
Y29uc3QgY2hhcl90eXBlKiBfX25hbWUgPSBfX21vbnRoc1tfX3RtcG1vbl07CiAgICAgICAgICBp
ZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAg
Y29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAg
ICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0gX19lbmQKICAgICAgICAg
ICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgICAgICAr
K19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAhPSBfX3BvcykKICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICB9CiAgICAg
ICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX3RtcG1vbjsKICAg
ICAgICB9CgogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBl
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
JiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8u
Z2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8
Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAg
ICAgIHNpemVfdCBfX2kgPSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIHdoaWxlIChf
X2kgPCA0ICYmIF9fYmVnICE9IF9fZW5kICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGlnaXQs
IF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJyb3coX19j
LCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsKICAgICAg
ICB9CiAgICAgIGlmIChfX2kgPT0gMiB8fCBfX2kgPT0gNCkKICAgICAgICB7CiAgICAgICAgICBs
b25nIF9fbDsKICAgICAgICAgIF9fY29udmVydF90b192KF9fZGlnaXRzLmNfc3RyKCksIF9fbCwg
X19lcnIsIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZh
aWxiaXQpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X19sID0gX19pID09IDIgPyBfX2wgOiBfX2wgLSAxOTAwOwogICAgICAgICAgICAgIF9fdG0tPnRt
X3llYXIgPSBzdGF0aWNfY2FzdDxpbnQ+KF9fbCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgaWYgKF9f
YmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJl
dHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
T3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSwgY29uc3QgdG0q
IF9fdG0sCiAgICAgICAgY29uc3QgX0NoYXJUKiBfX2JlZywgY29uc3QgX0NoYXJUKiBfX2VuZCkg
Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5
cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY2hh
ciBfX2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgKytfX2JlZzsKICAg
ICAgICAgIGlmIChfX2MgPT0gJyUnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhciBf
X2Zvcm1hdDsKICAgICAgICAgICAgICBjaGFyIF9fbW9kID0gMDsKICAgICAgICAgICAgICBzaXpl
X3QgX19sZW4gPSAxOwogICAgICAgICAgICAgIF9fYyA9IF9fY3R5cGUubmFycm93KCpfX2JlZywg
MCk7CiAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8
fCBfX2MgPT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9
IF9fYzsKICAgICAgICAgICAgICAgICAgX19mb3JtYXQgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcs
IDApOwogICAgICAgICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZm9ybWF0ID0gX19jOwogICAgICAgICAgICAg
IF9fcyA9IHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIGNoYXJfdHlwZSgpLCBfX3RtLCBfX2Zvcm1h
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tb2QpOwogICAgICAgICAgICB9
CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAqX19zID0gX19jOwog
ICAgICAgICAgICAgICsrX19zOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
X19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy
PgogICAgX091dEl0ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1
dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190
bSwKICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kKSBjb25zdAogICAgewogICAg
ICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fdGlt
ZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJU
PiA+KF9fbG9jKTsKCgoKICAgICAgY29uc3Qgc2l6ZV90IF9fbWF4bGVuID0gNjQ7CiAgICAgIGNo
YXJfdHlwZSogX19yZXMgPQogICAgICAgIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRp
bl9hbGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX21heGxlbikpOwoKCgoKCgogICAgICBjaGFy
X3R5cGUgX19mbXRbNF07CiAgICAgIF9fZm10WzBdID0gX19jdHlwZS53aWRlbignJScpOwogICAg
ICBpZiAoIV9fbW9kKQogICAgICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19mb3JtYXQ7CiAg
ICAgICAgICBfX2ZtdFsyXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIF9fZm10WzFdID0gX19tb2Q7CiAgICAgICAgICBfX2ZtdFsyXSA9IF9f
Zm9ybWF0OwogICAgICAgICAgX19mbXRbM10gPSBjaGFyX3R5cGUoKTsKICAgICAgICB9CgogICAg
ICBfX3RwLl9NX3B1dF9oZWxwZXIoX19yZXMsIF9fbWF4bGVuLCBfX2ZtdCwgX190bSk7CgoKICAg
ICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6bGVuZ3RoKF9fcmVzKTsK
ICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19sZW47ICsrX19pLCArK19fcykKICAg
ICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6X01fY29t
cGFyZV9oZWxwZXIoY29uc3QgX0NoYXJUKiwgY29uc3QgX0NoYXJUKikgY29uc3QKICAgIHsgcmV0
dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHNpemVfdAogICAgY29s
bGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm1faGVscGVyKF9DaGFyVCosIGNvbnN0IF9DaGFyVCos
IHNpemVfdCkgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgaW50CiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9fY29tcGFyZShjb25zdCBf
Q2hhclQqIF9fbG8xLCBjb25zdCBfQ2hhclQqIF9faGkxLAogICAgICAgICAgICAgICBjb25zdCBf
Q2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgewogICAgICBjb25z
dCBzdHJpbmdfdHlwZSBfX29uZShfX2xvMSwgX19oaTEpOwogICAgICBjb25zdCBzdHJpbmdfdHlw
ZSBfX3R3byhfX2xvMiwgX19oaTIpOwogICAgICByZXR1cm4gX01fY29tcGFyZV9oZWxwZXIoX19v
bmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0
ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D
aGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xv
KSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBf
X3JlcyA9IF9NX3RyYW5zZm9ybV9oZWxwZXIoX19jLCBfX2xvLCBfX2xlbik7CgogICAgICBpZiAo
X19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3Jl
cyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm1faGVscGVyKF9fYywgX19sbywgX19yZXMg
KyAxKTsKICAgICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdfdHlwZShfX2MpOwogICAgfQoKIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvbmcKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAg
ICBkb19oYXNoKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAog
ICAgewogICAgICB1bnNpZ25lZCBsb25nIF9fdmFsID0gMDsKICAgICAgZm9yICg7IF9fbG8gPCBf
X2hpOyArK19fbG8pCiAgICAgICAgX192YWwgPSAqX19sbyArICgoX192YWwgPDwgNykgfAogICAg
ICAgICAgICAgICAgICAgICAgIChfX3ZhbCA+PiAobnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9u
Zz46OmRpZ2l0cyAtIDcpKSk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxsb25nPihfX3ZhbCk7
CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIHZvaWQKICAgIF9fY29udmVy
dF90b192KGNvbnN0IGNoYXIqIF9faW4sIF9UdiYgX19vdXQsIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fY19sb2NhbGUmIF9fY2xvYywgaW50IF9f
YmFzZSA9IDEwKTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Udj4KICAgIGludAogICAgX19j
b252ZXJ0X2Zyb21fdihjaGFyKiBfX291dCwgY29uc3QgaW50IF9fc2l6ZSwgY29uc3QgY2hhciog
X19mbXQsCiAgICAgICAgICAgICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBp
bnQgX19wcmVjID0gLTEpCiAgICB7CiAgICAgIGludCBfX3JldDsKICAgICAgY29uc3QgY2hhciog
X19vbGQgPSBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CiAgICAgIGlmIChfX3ByZWMgPj0gMCkK
ICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3ByZWMsIF9f
dik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUsIF9f
Zm10LCBfX3YpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fb2xkKTsKICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQojIDE5OTEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxs
L2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZChpb3NfYmFz
ZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19v
bGRzLAogICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFtc2l6
ZSBfX29sZGxlbiwKICAgICAgICAgIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHR5cGVk
ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAg
ICAgIGludF90eXBlIF9fcGxlbiA9IHN0YXRpY19jYXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29s
ZGxlbik7CiAgICAgIGNoYXJfdHlwZSogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4o
X19idWlsdGluX2FsbG9jYShzaXplb2YoY2hhcl90eXBlKSAqIF9fcGxlbikpOwogICAgICB0cmFp
dHNfdHlwZTo6YXNzaWduKF9fcGFkcywgX19wbGVuLCBfX2ZpbGwpOwoKICAgICAgY2hhcl90eXBl
KiBfX2JlZzsKICAgICAgY2hhcl90eXBlKiBfX2VuZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsK
ICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3Qg
PSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRqdXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1
c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gY29uc3Rf
Y2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbjsK
ICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19hZGp1
c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVtKQogICAgICAgIHsKCgoKICAgICAgICAg
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hh
clQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAg
ICBjb25zdCBjaGFyX3R5cGUgX19taW51cyA9IF9fY3R5cGUud2lkZW4oJy0nKTsKICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7CiAgICAgICAgICBi
b29sIF9fdGVzdHNpZ24gPSBfX29sZHNbMF0gPT0gX19taW51cyB8fCBfX29sZHNbMF0gPT0gX19w
bHVzOwogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfX2N0eXBlLndpZGVuKCcwJykgPT0gX19v
bGRzWzBdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIChfX2N0eXBlLndpZGVuKCd4Jykg
PT0gX19vbGRzWzFdCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2N0eXBlLndp
ZGVuKCdYJykgPT0gX19vbGRzWzFdKTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAg
X19uZXdzWzFdID0gX19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAg
ICAgICAgX19uZXdzICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAg
ICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0
PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxz
ZSBpZiAoX190ZXN0c2lnbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9
IF9fb2xkc1swXSA9PSBfX3BsdXMgPyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsr
X19tb2Q7CiAgICAgICAgICAgICAgKytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3Bh
ZHM7CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQg
PSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgZWxzZQogICAgICAgICAgICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRz
OwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0g
Y29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgewoKICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAg
X19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBl
Kj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cywgX19i
ZWcsIF9fYmVnbGVuKTsKICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19uZXdzICsgX19iZWdsZW4s
IF9fZW5kLCBfX25ld2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfX3BhZChpb3NfYmFzZSYgX19pbywgX0No
YXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAg
ICAgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwK
ICAgICAgICAgIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHJldHVybiBfX3BhZDxfQ2hh
clQsIGNoYXJfdHJhaXRzPF9DaGFyVD4gPihfX2lvLCBfX2ZpbGwsIF9fbmV3cywgX19vbGRzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19uZXdsZW4s
IF9fb2xkbGVuLCBfX251bSk7CiAgICB9CiMgMjA5MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5nKGNv
bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBpbnQg
X19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9fZ3Jv
dXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6ZSgp
OwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYmIF9f
aSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19sZW4g
JiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19ncm91
cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9faiA9
PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19fal0g
Pj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7CiAg
ICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAgX19h
ZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAgICAg
ICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsKICAg
ICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAgIF9f
cyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ2Jl
Zyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpfX3Mr
KyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJzdCsr
OwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwogICAg
fQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdmVjdG9yPGxvY2FsZTo6ZmFjZXQqPjsKCiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCBmYWxzZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIHRydWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtb25leV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT47CiAg
ZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIGZhbHNlPjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgdHJ1ZT47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5X2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgbW9uZXlfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5j
dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPGNoYXI+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBudW1fcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdDx3Y2hh
cl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtcHVuY3RfYnluYW1lPHdjaGFyX3Q+Owog
IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1fZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0
ZSBjbGFzcyBudW1fcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVw
dW5jdDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgdGltZV9nZXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0
X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgX190aW1lcHVuY3Q8d2NoYXJf
dD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PHdjaGFyX3Q+OwogIGV4dGVybiB0
ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRl
IGNsYXNzIHRpbWVfZ2V0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dl
dF9ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlc19ieW5hbWU8Y2hhcj47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBl
X2J5bmFtZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY3R5cGVfYnluYW1lPHdjaGFy
X3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTxjaGFyLCBjaGFyLCBt
YnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2RlY3Z0X2J5bmFtZTx3Y2hhcl90
LCBjaGFyLCBtYnN0YXRlX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTxjaGFyPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgY29sbGF0ZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg
Y29sbGF0ZV9ieW5hbWU8d2NoYXJfdD47CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29k
ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0PGNvZGVjdnQ8Y2hhciwg
Y2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IGNvbGxhdGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y29sbGF0ZTxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bXB1bmN0PGNoYXI+Jgog
ICAgdXNlX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fcHV0PGNo
YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dl
dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1fZ2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7Cgog
IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPiYKICAgIHVz
ZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4mCiAgICB1c2VfZmFj
ZXQ8bW9uZXlwdW5jdDxjaGFyLCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCBtb25leV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0
PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9u
ZXlfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDxjaGFyPiA+KGNvbnN0IGxvY2Fs
ZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PGNoYXI+JgogICAg
dXNlX2ZhY2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9wdXQ8
Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1l
X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDx0aW1lX2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYp
OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1lc3NhZ2VzPGNoYXI+JgogICAgdXNlX2Zh
Y2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQog
ICAgY29uc3QgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+JgogICAgdXNlX2ZhY2V0
PGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGxvY2FsZSBjb25zdCYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IGNvbGxhdGU8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8
Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IG51bXB1bmN0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bXB1bmN0PHdjaGFyX3Q+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX3B1dDx3
Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtX2dldDx3Y2hhcl90PiYKICAgIHVzZV9m
YWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiYKICAgIHVzZV9mYWNldDxtb25l
eXB1bmN0PHdjaGFyX3QsIHRydWU+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgbW9uZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4mCiAgICB1c2VfZmFjZXQ8bW9u
ZXlwdW5jdDx3Y2hhcl90LCBmYWxzZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBs
YXRlCiAgICBjb25zdCBtb25leV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfcHV0
PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3Qg
bW9uZXlfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNv
bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IF9fdGltZXB1bmN0PHdj
aGFyX3Q+JgogICAgdXNlX2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxl
Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9wdXQ8d2NoYXJfdD4mCiAgICB1
c2VfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBjb25zdCB0aW1lX2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDx0aW1lX2dl
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0
IG1lc3NhZ2VzPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29u
c3QgbG9jYWxlJik7CgoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxj
dHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2Nh
bGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTxj
aGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhh
c19mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxh
dGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8Y2hhcj4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8bW9uZXlwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PF9fdGltZXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+
ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2Zh
Y2V0PG1lc3NhZ2VzPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogZXh0ZXJuIHRlbXBsYXRlCiAg
ICBib29sCiAgICBoYXNfZmFjZXQ8Y3R5cGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBj
aGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAg
ZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8d2NoYXJfdD4g
Pihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFj
ZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK
ICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1fZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7
CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo
YXNfZmFjZXQ8bW9uZXlfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X2dldDx3Y2hhcl90PiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxfX3Rp
bWVwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX2dldDx3Y2hhcl90
PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19m
YWNldDxtZXNzYWdlczx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwp9CiMgNDcgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2xvY2FsZSIgMiAzCiMg
MzggIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBf
X29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAgICBp
ZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJlYW1f
dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlw
ZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh
c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikpCiAg
ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAg
ICAgICAgICAgIGlmIChfX3NiaW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg
ICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCFfX3h0cmN0
KQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBz
ZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m
bnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlz
LCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVy
YXRvcjw8KGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg
ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAg
ICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkK
ICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IF9fbCA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAg
ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVk
KCk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24p
LmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJi
KCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19i
YXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1w
dXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNl
OwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYg
aW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3Rh
dGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAg
X19iID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwog
ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWls
ZWQoKTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19m
YWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRo
aXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAg
IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0
aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAg
ICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCks
IF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91
YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51
bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAg
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo
aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1
dChjaGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCkt
PnNwdXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0
LCB0cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0
ZShjb25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf
X2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVh
bXNpemUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBp
ZiAoIF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5j
KCkgPT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OnRlbGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAg
IGJvb2wgX190ZXN0b2sgPSB0aGlzLT5mYWlsKCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3Rv
aykKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6
OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2Vl
a3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGJvb2wgX190ZXN0b2sgPSB0aGlzLT5mYWls
KCkgIT0gdHJ1ZTsKCiAgICAgIGlmIChfX3Rlc3RvaykKICAgICAgICB7CgoKICAgICAgICAgIHBv
c190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6
Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQog
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0K
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla3Aob2ZmX3R5cGUgX19vZmYs
IGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9vbCBfX3Rlc3RvayA9IHRoaXMt
PmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQogICAgICAgIHsKCgogICAgICAg
ICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgt
MSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBf
Q2hhclQgX19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy
eSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0
aCgpOwogICAgICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4o
X19idWlsdGluX2FsbG9jYSgoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpICsgMSkpOwogICAgICAgICAg
ICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsK
ICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9fcGFkcywgJl9fYywgX193LCBf
X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAg
ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy
YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAg
IHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90
eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7
CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg
ICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193
ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkKF9fb3V0LCBfX291dC5maWxsKCksIF9f
cGFkcywgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9
IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMs
IF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg
ICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo
X19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg
ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAg
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9DaGFyVCogX19zKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsK
ICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9D
aGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXpl
b2YoX0NoYXJUKSAqIF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0
aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAgICAgICAg
aWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Bh
ZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwog
ICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g
X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19s
ZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291
dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVk
ZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5h
bWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJi
KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX2N0cmFpdHNfdHlwZTo6bGVu
Z3RoKF9fcyk7CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf
X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAg
ICBmb3IgKHNpemVfdCBfX2kgPSAwOyBfX2kgPD0gX19jbGVuOyArK19faSkKICAgICAgICAgICAg
X193c1tfX2ldID0gX19vdXQud2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0
ciA9IF9fd3M7CgogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJl
YW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJU
KiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihf
Q2hhclQpICogX193KSk7CgogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19w
YWRzLCBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fc3RyID0g
X19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwogICAgICAgICAgICAgIF9f
b3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPGNsYXNzIF9U
cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19vc3RyZWFtX3R5
cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg
ICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX3cp
KTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX1RyYWl0czo6bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZp
bGwoKSwgX19wYWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAg
X19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAg
ICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u
JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv
c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFt
ZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAg
ICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQq
IF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkgKiBfX3cpKTsKICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxz
dHJlYW1zaXplPihfX3N0ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19w
YWRzLCBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7
CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIHN0cmVh
bXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAgICAgICAg
IF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAgICAgICAg
ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgICByZXR1
cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFt
PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mKTsKICBleHRl
cm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z
dHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0
b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y
PDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJl
YW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gdGVtcGxhdGUg
b3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciopOwogIGV4
dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBzaWduZWQg
Y2hhciopOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTx3Y2hhcl90PjsK
ICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIGVuZGwod29zdHJlYW0mKTsKICBleHRlcm4gdGVt
cGxhdGUgd29zdHJlYW0mIGVuZHMod29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJl
YW0mIGZsdXNoKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRv
cjw8KHdvc3RyZWFtJiwgd2NoYXJfdCk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy
YXRvcjw8KHdvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVy
YXRvcjw8KHdvc3RyZWFtJiwgY29uc3Qgd2NoYXJfdCopOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0
cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKfQojIDI3NiAiL2J1aWxk
cy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvb3N0cmVhbSIgMiAz
CiMgNDYgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYz
L2lvc3RyZWFtIiAyIDMKIyAxICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9p
bmNsdWRlL2crKy12My9pc3RyZWFtIiAxIDMKIyA0MyAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9p
YTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaXN0cmVhbSIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNz
IGJhc2ljX2lzdHJlYW0gOiB2aXJ0dWFsIHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz
PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMg
dHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+IF9faW9zX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0
PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CiAgICAgIHR5cGVkZWYg
Y3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKICAgICAgc3RyZWFt
c2l6ZSBfTV9nY291bnQ7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNf
aXN0cmVhbShfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKQogICAgICB7CiAgICAgICAgdGhpcy0+aW5p
dChfX3NiKTsKICAgICAgICBfTV9nY291bnQgPSBzdHJlYW1zaXplKDApOwogICAgICB9CgogICAg
ICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pc3RyZWFtKCkKICAgICAgeyBfTV9nY291bnQgPSBzdHJl
YW1zaXplKDApOyB9CgoKICAgICAgY2xhc3Mgc2VudHJ5OwogICAgICBmcmllbmQgY2xhc3Mgc2Vu
dHJ5OwoKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX2lzdHJlYW1f
dHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKTsKCiAgICAg
IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGlvc19iYXNlJiAoKl9fcGYpKGlvc19i
YXNlJikpOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGJvb2wmIF9f
bik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBf
X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW50JiBfX24pOwoK
ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgaW50JiBfX24p
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKTsKCiAg
ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcmIF9fbik7
CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBsb25nJiBfX24p
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBs
b25nJiBfX24pOwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGZsb2F0
JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZG91YmxlJiBf
X2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUm
IF9fZik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih2b2lkKiYgX19w
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IpOwoKCiAgICAgIGlubGluZSBzdHJlYW1zaXplCiAgICAgIGdjb3VudCh2b2lkKSBj
b25zdAogICAgICB7IHJldHVybiBfTV9nY291bnQ7IH0KCiAgICAgIGludF90eXBlCiAgICAgIGdl
dCh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlJiBfX2Mp
OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFt
c2l6ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlw
ZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1
cm4gdGhpcy0+Z2V0KF9fcywgX19uLCB0aGlzLT53aWRlbignXG4nKSk7IH0KCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1idWZfdHlwZSYgX19zYiwgY2hhcl90eXBlIF9f
ZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoX19zdHJlYW1i
dWZfdHlwZSYgX19zYikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0KF9fc2IsIHRoaXMtPndpZGVu
KCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUg
X19pc3RyZWFtX3R5cGUmCiAgICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg
X19uKQogICAgICB7IHJldHVybiB0aGlzLT5nZXRsaW5lKF9fcywgX19uLCB0aGlzLT53aWRlbign
XG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBpZ25vcmUoc3RyZWFtc2l6ZSBf
X24gPSAxLCBpbnRfdHlwZSBfX2RlbGltID0gdHJhaXRzX3R5cGU6OmVvZigpKTsKCiAgICAgIGlu
dF90eXBlCiAgICAgIHBlZWsodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcmVh
ZChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgc3RyZWFtc2l6ZQogICAg
ICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pOwoKICAgICAgX19pc3Ry
ZWFtX3R5cGUmCiAgICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYyk7CgogICAgICBfX2lzdHJlYW1f
dHlwZSYKICAgICAgdW5nZXQodm9pZCk7CgogICAgICBpbnQKICAgICAgc3luYyh2b2lkKTsKCiAg
ICAgIHBvc190eXBlCiAgICAgIHRlbGxnKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAg
ICAgIHNlZWtnKHBvc190eXBlKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBzZWVrZyhv
ZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpzZW50cnkKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp
dHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVh
bV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l
IF9UcmFpdHM6OmludF90eXBlIF9faW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50
cnkoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3Mg
PSBmYWxzZSk7CgogICAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBw
cml2YXRlOgogICAgICBib29sIF9NX29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBf
Q2hhclQmIF9fYyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JiBfX2luLCB1bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWlu
dGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgog
ICAgYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0
cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJu
IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JiBfX2luLCBfQ2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hh
cixfVHJhaXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4g
Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyBy
ZXR1cm4gKF9faW4gPj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lv
c3RyZWFtCiAgICA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAg
IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl
YW1fdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVh
bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2Ip
LCBfX29zdHJlYW1fdHlwZShfX3NiKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJh
c2ljX2lvc3RyZWFtKCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
d3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsKfQoKCgoKCiMgMSAiL2J1
aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvYml0cy9pc3Ry
ZWFtLnRjYyIgMSAzCiMgMzYgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2JpdHMvaXN0cmVhbS50Y2MiIDMKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAgIHsKICAgICAgaWYgKF9f
aW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRpZSgpKQogICAgICAgICAg
ICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25vc2tpcHdzICYmIChfX2lu
LmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAg
ICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygp
OwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAg
ICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAg
ICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBf
X2MpKQogICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7CgoKCiAgICAgICAgICAg
ICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jh
c2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgaWYgKF9faW4uZ29v
ZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0
KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBlJiAo
Kl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYoKnRoaXMpOwogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9faW9zX3R5cGUmICgqX19w
ZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFz
ZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z
X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp
CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg
ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHNob3J0
JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6
Omdvb2RiaXQpOwogICAgICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAgICAgIGlmIChfTV9j
aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq
dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX2wpOwoKCiAgICAgICAgICAgICAgaWYgKCEoX19lcnIg
JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICAgICAgICAgJiYgKG51bWVyaWNfbGltaXRz
PHNob3J0Pjo6bWluKCkgPD0gX19sCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVt
ZXJpY19saW1pdHM8c2hvcnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBfX24gPSBfX2w7CiAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0JiBfX24pCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAg
ICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAg
IF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAg
ICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go
ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0
aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg
ICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYm
IChudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSA8PSBfX2wKICAgICAgICAgICAgICAgICAgICAg
ICYmIF9fbCA8PSBudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkpCiAgICAgICAgICAgICAgICBf
X24gPSBfX2w7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19lcnIgfD0gaW9z
X2Jhc2U6OmZhaWxiaXQ7CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg
ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g
MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy
ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz46OgogICAgb3BlcmF0b3I+Pihsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVu
c2lnbmVkIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0
ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKQog
ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf
YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0
KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg
ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg
IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt
PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyBsb25nJiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl
IF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2Zu
dW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3Bl
cmF0b3I+PihmbG9hdCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0
YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo
X01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0
aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAg
ICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9
IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19p
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fbikKICAg
IHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jh
c2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAg
ICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAg
ICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIG9wZXJhdG9yPj4obG9uZyBkb3VibGUmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
dm9pZComIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAg
ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3Nf
YmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n
ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l
cnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAg
ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg
ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg
ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSogX19zYm91
dCkKICAgIHsKICAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgIHsKICAgICAgICAgICB0cnkKICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0ID0gMDsKICAgICAgICAgICAgICAgaWYgKF9fc2JvdXQp
CiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X19zYmluID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX2Nv
cHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgIGlmICghX19zYm91dCB8fCAhX194dHJjdCkKICAgICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICB7CgoKICAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRf
dHlwZSBfX2MgPSBfX2VvZjsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMo
KTsKCiAgICAgICAgICAgICAgaWYgKF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2dj
b3VudCA9IDE7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgZ2V0KGNoYXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQg
PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK
ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0
IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYnVmdmFsID0gdGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlm
IChfX2J1ZnZhbCAhPSBfX2VvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
X01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2No
YXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNl
OjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIgJiYgX19uID4gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2lu
dF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh
aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0
aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp
OwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAg
ICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdo
aWxlIChfTV9nY291bnQgPCBfX24gLSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6
dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAg
ICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0
ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9
PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVs
aW0gfHwgX01fZ2NvdW50ID09IF9fbiAtIDEpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFj
a2MoX19jKTsKICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAg
ICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90
eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgaW50X3R5cGUgX19jOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSog
X190aGlzX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50
X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFp
dHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsK
ICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIGJvb2wg
X190ZXN0cHV0ID0gdHJ1ZTsKCiAgICAgICAgICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgIV9f
dGVzdGRlbGltCiAgICAgICAgICAgICAgICAgICAgJiYgKF9fdGVzdHB1dCA9IF9fc2Iuc3B1dGMo
dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpKQogICAgICAgICAgICAgICAgICAgICAgICAg
IT0gX19lb2YpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3Vu
dDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAg
ICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rl
c3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBpZiAoX190ZXN0ZGVsaW0gfHwgIV9fdGVzdHB1dCkKICAgICAgICAgICAgICAgIF9fdGhpc19z
Yi0+c3B1dGJhY2tjKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAg
ICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
Ojplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFp
dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg
ICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJp
dCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBl
KiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01f
Z2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChf
X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBp
bnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICArK19NX2djb3VudDsK
ICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19p
bnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRy
YWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09
IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoK
ICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9f
dGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0
cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg
ICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3Rk
ZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAg
aWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9n
Y291bnQ7CiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp
OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3RkZWxpbSkK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAg
ICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp
OwogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv
c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg
fQogICAgICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3Vu
dCkKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUg
X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRl
bGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNv
bnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90
eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0g
PSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0g
X19lb2Y7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVh
bXNpemU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEg
JiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVt
cGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAg
ICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICBpZiAoKF9NX2djb3VudCA9PSBfX24gLSAxICYmICFfX3Rlc3Rlb2Yp
IHx8IF9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAg
ICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
Ojplb2ZiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK
ICAgIHBlZWsodm9pZCkKICAgIHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
eyBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg
JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg
ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNo
YXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsK
ICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgaWYgKF9fbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0
cnkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19l
b2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2Mg
PSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2Mg
PT0gX19lb2Y7CgogICAgICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAm
JiAhX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICpfX3MrKyA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAg
ICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1
bXBjKCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAg
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFz
ZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7
CgogICAgICAgICAgICAgICAgICAgICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlw
ZShfX2MpOwogICAgICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAg
IHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgY29u
c3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9
IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog
ICAgICAgIHsKICAgICAgICAgIGlmIChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19u
dW0gPSB0aGlzLT5yZGJ1ZigpLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19u
dW0gIT0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAg
ICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251
bSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6
OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0
YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
OjoKICAgIHB1dGJhY2soY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigq
dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190
eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+
cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9fYykg
PT0gX19lb2YpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBf
TV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAg
ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAg
IGlmICghX19zYiB8fCBfX2VvZiA9PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAgICB0
aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAg
aW50IF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5
cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3Jl
dCA9PSBfX3NiLT5wdWJzeW5jKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9
IDA7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg
ICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0
KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRi
aXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0K
ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz46OnBvc190eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVs
bGcodm9pZCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAg
IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp
ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwg
aW9zX2Jhc2U6OmluKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9z
X3R5cGUgX19wb3MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy
eQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJk
YnVmKCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBp
ZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAgICAgIGNh
dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz
LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4
Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46
OgogICAgc2Vla2cob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZGlyKQogICAg
ewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2Zm
KF9fb2ZmLCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2VyciA9
PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUJiBfX2MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19pbi5nZXQoX19jKTsgfQogICAgICAg
ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg
IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2lu
LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0
aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0
c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9faW4sIF9DaGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0
eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0
eXBlX3R5cGU7CiAgICAgIHN0cmVhbXNpemUgX19leHRyYWN0ZWQgPSAwOwoKICAgICAgdHlwZW5h
bWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBpZiAo
X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19udW0gPSBfX2luLndpZHRoKCk7CiAgICAgICAgICAgICAgaWYgKF9f
bnVtID09IDApCiAgICAgICAgICAgICAgICBfX251bSA9IG51bWVyaWNfbGltaXRzPHN0cmVhbXNp
emU+OjptYXgoKTsKCiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4u
cmRidWYoKTsKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2lu
Ll9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19zYi0+
c2J1bXBjKCk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjpl
b2YoKTsKICAgICAgICAgICAgICBib29sIF9fdGVzdHNwID0gX19jdHlwZS0+aXMoY3R5cGVfYmFz
ZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19l
b2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbnVtIC0gMSAmJiAhX190
ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg
Kl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAg
ICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9m
ID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlz
KGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAg
ICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CgoKCiAgICAgICAgICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwoKICAgICAgICAg
ICAgICBfX2luLndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp
b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0aW9ucygpICYg
aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkKQogICAgICAgIF9faW4uc2V0c3Rh
dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9f
aW4pCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f
aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX3N0
cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19p
c3RyZWFtX3R5cGU6Ol9fY3R5cGVfdHlwZSBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmNoYXJfdHlwZSBfX2NoYXJfdHlwZTsKCiAgICAgIF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIGNvbnN0IF9fY3R5cGVf
dHlwZSogX19jdHlwZSA9IF9faW4uX01fZ2V0X2ZjdHlwZV9pb3MoKTsKICAgICAgY29uc3QgX19p
bnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICBfX2ludF90eXBlIF9fYzsKICAg
ICAgYm9vbCBfX3Rlc3Rlb2Y7CiAgICAgIGJvb2wgX190ZXN0c3A7CgogICAgICBkbwogICAgICAg
IHsKICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgX190ZXN0ZW9mID0g
X19jID09IF9fZW9mOwogICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNl
OjpzcGFjZSwgX19jKTsKICAgICAgICB9CiAgICAgIHdoaWxlICghX190ZXN0ZW9mICYmIF9fdGVz
dHNwKTsKCiAgICAgIGlmICghX190ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICBfX3NiLT5z
cHV0YmFja2MoX19jKTsKICAgICAgZWxzZQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmVvZmJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90
eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4g
X19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXpl
X3R5cGUgX19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAg
ICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsK
ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAg
ICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlw
ZSBfX247CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+
KF9fdykgOiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9f
c2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUg
PSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6
OmVvZigpOwogICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5cGUtPmlzKGN0eXBlX2Jhc2U6
OnNwYWNlLCBfX2MpOwogICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7Cgog
ICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz
dHNwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9fY2hh
cl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAgICBf
X2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19l
b2Y7CiAgICAgICAgICAgICAgX190ZXN0c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFj
ZSwgX19jKTsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAg
ICAgIF9fc2ItPnNwdXRiYWNrYyhfX2MpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgX19pbi53aWR0aCgwKTsKICAg
ICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlIChp
b3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFyVCBfX2RlbGltKQogICAgewogICAgICB0eXBl
ZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0
cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0
eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQs
IF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf
X3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBf
X2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlw
ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9f
c2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXplKCk7CgogICAgICAgICAgX19pbnRfdHlwZSBf
X2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19j
ID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1Ry
YWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAg
ICAgICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChf
X2V4dHJhY3RlZCA8PSBfX24gJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0ZGVsaW0pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUoX19jKTsK
ICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNi
dW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAg
ICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgfQogICAgICAg
ICAgaWYgKF9fdGVzdGVvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVzdGRlbGltKQog
ICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gX19p
bjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
QWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBnZXRs
aW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAgICAgICAgYmFz
aWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyByZXR1cm4gZ2V0
bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0ZXJuIHRlbXBs
YXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0m
IHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3Ry
ZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJl
YW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVh
bSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+
Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3Bl
cmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJl
YW0mIHdzKHdpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+
KHdpc3RyZWFtJiwgd2NoYXJfdCYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgb3BlcmF0
b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QqKTsKfQojIDI4OCAiL2J1aWxkcy9nY2MtM18xLWJyYW5j
aC9pYTY0L2luc3RhbGwvaW5jbHVkZS9nKystdjMvaXN0cmVhbSIgMiAzCiMgNDcgIi9idWlsZHMv
Z2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBj
b3V0OwogIGV4dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0
ZXJuIHdpc3RyZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0
cmVhbSB3Y2VycjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNl
OjpJbml0IF9faW9pbml0Owp9CiMgMiAiVDIvYnVnNy5DIiAyCgojIDEgIi4uLy4uL0ZUZW5zb3Iu
cGFydC5oIiAxCgoKCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2lu
Y2x1ZGUvZysrLXYzL2NvbXBsZXgiIDEgMwojIDQ3ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lh
NjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jb21wbGV4IiAzCgoKIyAxICIvYnVpbGRzL2djYy0z
XzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0
cy5oIiAxIDMKIyA0MSAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2luc3RhbGwvaW5jbHVk
ZS9nKystdjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaCIgMwojIDY3ICIvYnVpbGRzL2djYy0zXzEt
YnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0cy5o
IiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBf
X2lzX3ZvaWQKICAgIHsKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX01fdHlwZSA9IDAKICAg
ICAgfTsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBfX2lzX3ZvaWQ8dm9pZD4KICAg
IHsKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX01fdHlwZSA9IDEKICAgICAgfTsKICAgIH07
CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfX2lzX2ludGVnZXIKICAg
IHsKICAgICAgZW51bQogICAgICB7CiAgICAgICAgX01fdHlwZSA9IDAKICAgICAgfTsKICAgIH07
CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Ym9vbD4KICAgIHsKICAg
ICAgZW51bQogICAgICB7CiAgICAgICAgX01fdHlwZSA9IDEKICAgICAgfTsKICAgIH07CgogIHRl
bXBsYXRlPD4KICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8Y2hhcj4KICAgIHsKICAgICAgZW51bQog
ICAgICB7CiAgICAgICAgX01fdHlwZSA9IDEKICAgICAgfTsKICAgIH07CgogIHRlbXBsYXRlPD4K
ICAgIHN0cnVjdCBfX2lzX2ludGVnZXI8c2lnbmVkIGNoYXI+CiAgICB7CiAgICAgIGVudW0KICAg
ICAgewogICAgICAgIF9NX3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAg
c3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBjaGFyPgogIHsKICAgIGVudW0KICAgIHsKICAg
ICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCgogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgX19pc19p
bnRlZ2VyPHdjaGFyX3Q+CiAgewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0gMQogICAg
fTsKICB9OwoKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVnZXI8c2hvcnQ+CiAgewog
ICAgZW51bQogICAgewogICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+
CiAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBzaG9ydD4KICB7CiAgICBlbnVtCiAgICB7
CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgX19p
c19pbnRlZ2VyPGludD4KICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9
OwogIH07CgogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHVuc2lnbmVkIGludD4K
ICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBs
YXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGxvbmc+CiAgewogICAgZW51bQogICAgewogICAg
ICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNfaW50
ZWdlcjx1bnNpZ25lZCBsb25nPgogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEK
ICAgIH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVnZXI8bG9uZyBsb25n
PgogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCiAgdGVt
cGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9uZyBsb25nPgogIHsKICAg
IGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCgoKCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogIHN0cnVjdCBfX2lzX2Zsb2F0aW5nCiAgewogICAgZW51bQogICAgewog
ICAgICBfTV90eXBlID0gMAogICAgfTsKICB9OwoKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lz
X2Zsb2F0aW5nPGZsb2F0PgogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAg
IH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2Zsb2F0aW5nPGRvdWJsZT4KICB7
CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBsYXRl
PD4KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxsb25nIGRvdWJsZT4KICB7CiAgICBlbnVtCiAgICB7
CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U
cD4KICBzdHJ1Y3QgX19pc19hcml0aG1ldGljCiAgewogICAgZW51bQogICAgewogICAgICBfTV90
eXBlID0gX19pc19pbnRlZ2VyPF9UcD46Ol9NX3R5cGUgfHwgX19pc19mbG9hdGluZzxfVHA+Ojpf
TV90eXBlCiAgICB9OwogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBzdHJ1Y3Qg
X19pc19mdW5kYW1lbnRhbAogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IF9faXNf
dm9pZDxfVHA+OjpfTV90eXBlIHx8IF9faXNfYXJpdGhtZXRpYzxfVHA+OjpfTV90eXBlCiAgICB9
OwogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBzdHJ1Y3QgX19pc19wb2QKICB7
CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSBfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9N
X3R5cGUKICAgIH07CiAgfTsKCn0KIyA1MCAiL2J1aWxkcy9nY2MtM18xLWJyYW5jaC9pYTY0L2lu
c3RhbGwvaW5jbHVkZS9nKystdjMvY29tcGxleCIgMiAzCgojIDEgIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL3NzdHJlYW0iIDEgMwojIDQzICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9zc3RyZWFtIiAz
CgoKCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX3N0cmluZ2J1ZiA6IHB1
YmxpYyBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJh
aXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVk
ZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5
cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPGNoYXJfdHlwZSwgX1RyYWl0cywgX0FsbG9j
PiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNp
emVfdHlwZSBfX3NpemVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX3N0cmluZ190eXBl
IF9NX3N0cmluZzsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJp
bmdidWYoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNl
OjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9zdHJpbmcoKQogICAgICB7IF9N
X3N0cmluZ2J1Zl9pbml0KF9fbW9kZSk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0
cmluZ2J1Zihjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAg
IGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0
KQogICAgICA6IF9fc3RyZWFtYnVmX3R5cGUoKSwgX01fc3RyaW5nKF9fc3RyLmRhdGEoKSwgX19z
dHIuc2l6ZSgpKQogICAgICB7IF9NX3N0cmluZ2J1Zl9pbml0KF9fbW9kZSk7IH0KCgogICAgICBf
X3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fbW9k
ZSAmIGlvc19iYXNlOjpvdXQpCiAgICAgICAgICB7CgoKCgogICAgICAgICAgICBfX3NpemVfdHlw
ZSBfX2xlbiA9IF9NX3N0cmluZy5zaXplKCk7CiAgICAgICAgICAgIGlmIChfTV9vdXRfY3VyID4g
X01fb3V0X2JlZykKICAgICAgICAgICAgICBfX2xlbiA9IG1heChfX3NpemVfdHlwZShfTV9vdXRf
ZW5kIC0gX01fb3V0X2JlZyksIF9fbGVuKTsKICAgICAgICAgICAgcmV0dXJuIF9fc3RyaW5nX3R5
cGUoX01fb3V0X2JlZywgX01fb3V0X2JlZyArIF9fbGVuKTsKICAgICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgICByZXR1cm4gX01fc3RyaW5nOwogICAgICB9CgogICAgICB2b2lkCiAgICAg
IHN0cihjb25zdCBfX3N0cmluZ190eXBlJiBfX3MpCiAgICAgIHsKICAgICAgICBfTV9zdHJpbmcg
PSBfX3M7CiAgICAgICAgX01fc3RyaW5nYnVmX2luaXQoX01fbW9kZSk7CiAgICAgIH0KCiAgICBw
cm90ZWN0ZWQ6CgogICAgICB2b2lkCiAgICAgIF9NX3N0cmluZ2J1Zl9pbml0KGlvc19iYXNlOjpv
cGVubW9kZSBfX21vZGUpCiAgICAgIHsKCgoKCgogICAgICAgIF9NX2J1Zl9zaXplID0gX01fc3Ry
aW5nLnNpemUoKTsKCgoKCgogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9IDUxMjsKICAgICAgICBf
TV9tb2RlID0gX19tb2RlOwogICAgICAgIGlmIChfTV9tb2RlICYgKGlvc19iYXNlOjphdGUgfCBp
b3NfYmFzZTo6YXBwKSkKICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIF9NX2J1Zl9zaXplKTsK
ICAgICAgICBlbHNlCiAgICAgICAgICBfTV9yZWFsbHlfc3luYygwLCAwKTsKICAgICAgfQoKCiAg
ICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgewogICAgICAgIGlm
IChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAgICAgcmV0dXJuIHRy
YWl0c190eXBlOjp0b19pbnRfdHlwZSgqZ3B0cigpKTsKICAgICAgICBlbHNlCiAgICAgICAgICBy
ZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICB9CgogICAgICB2aXJ0dWFsIGludF90eXBl
CiAgICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2MgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAg
ICAgdmlydHVhbCBpbnRfdHlwZQogICAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MgPSB0cmFpdHNf
dHlwZTo6ZW9mKCkpOwoKICAgICAgdmlydHVhbCBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBzZXRi
dWYoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9f
cyAmJiBfX24pCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX3N0cmluZyA9IF9fc3RyaW5nX3R5
cGUoX19zLCBfX24pOwogICAgICAgICAgICBfTV9yZWFsbHlfc3luYygwLCAwKTsKICAgICAgICAg
IH0KICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQog
ICAgICBzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX3dheSwKICAg
ICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9z
X2Jhc2U6Om91dCk7CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtwb3MocG9zX3R5
cGUgX19zcCwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jh
c2U6OmluIHwgaW9zX2Jhc2U6Om91dCk7CgoKCgoKCgogICAgICB2aXJ0dWFsIGludAogICAgICBf
TV9yZWFsbHlfc3luYyhfX3NpemVfdHlwZSBfX2ksIF9fc2l6ZV90eXBlIF9fbykKICAgICAgewog
ICAgICAgIGNoYXJfdHlwZSogX19iYXNlID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfTV9zdHJp
bmcuZGF0YSgpKTsKICAgICAgICBib29sIF9fdGVzdGluID0gX01fbW9kZSAmIGlvc19iYXNlOjpp
bjsKICAgICAgICBib29sIF9fdGVzdG91dCA9IF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAg
ICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKCiAgICAgICAgX01fYnVm
ID0gX19iYXNlOwogICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgdGhpcy0+c2V0Zyhf
X2Jhc2UsIF9fYmFzZSArIF9faSwgX19iYXNlICsgX19sZW4pOwogICAgICAgIGlmIChfX3Rlc3Rv
dXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHRoaXMtPnNldHAoX19iYXNlLCBfX2Jhc2UgKyBf
X2xlbik7CiAgICAgICAgICAgIF9NX291dF9jdXIgKz0gX19vOwogICAgICAgICAgfQogICAgICAg
IHJldHVybiAwOwogICAgICB9CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfaXN0cmlu
Z3N0cmVhbSA6IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf
VHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBl
OwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFy
X3R5cGUsIHRyYWl0c190eXBlPiBfX2lzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBf
X3N0cmluZ2J1Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNp
dAogICAgICBiYXNpY19pc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp
b3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVm
KF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYp
OyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3Ry
aW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu
bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAgIDogX19pc3RyZWFtX3R5cGUoX19udWxs
KSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX21vZGUgfCBpb3NfYmFzZTo6aW4pCiAgICAgIHsgdGhp
cy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX2lzdHJpbmdzdHJlYW0oKQog
ICAgICB7IH0KCgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYp
OyB9CgogICAgICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJu
IF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJp
bmdfdHlwZSYgX19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKCgoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX29zdHJl
YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh
clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRy
YWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp
dHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz
X3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAg
ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fb3N0cmVh
bV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVm
OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX29zdHJpbmdzdHJlYW0o
aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19vc3Ry
ZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpCiAg
ICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgZXhwbGljaXQKICAgICAg
YmFzaWNfb3N0cmluZ3N0cmVhbShjb25zdCBfX3N0cmluZ190eXBlJiBfX3N0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91
dCkKICAgICAgOiBfX29zdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19zdHIsIF9f
bW9kZSB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3RyaW5nYnVmKTsg
fQoKICAgICAgfmJhc2ljX29zdHJpbmdzdHJlYW0oKQogICAgICB7IH0KCgogICAgICBfX3N0cmlu
Z2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2Nhc3Q8
X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBfX3N0cmluZ190eXBl
CiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5zdHIoKTsgfQoK
ICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQogICAgICB7IF9N
X3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19z
dHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAg
ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl
ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9y
X3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBl
OwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf
X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3N0cmVh
bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToK
ICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGljOgoKICAgICAg
ZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX20g
PSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJlYW1fdHlwZShf
X251bGwpLCBfTV9zdHJpbmdidWYoX19tKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1
Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShjb25zdCBfX3N0
cmluZ190eXBlJiBfX3N0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu
bW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJl
YW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19zdHIsIF9fbSkKICAgICAgeyB0aGlzLT5p
bml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICB+YmFzaWNfc3RyaW5nc3RyZWFtKCkKICAgICAg
eyB9CgoKICAgICAgX19zdHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7
IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoK
ICAgICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9z
dHJpbmdidWYuc3RyKCk7IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5
cGUmIF9fcykKICAgICAgeyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07Cn0KCgoKCgoj
IDEgIi9idWlsZHMvZ2NjLTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL2Jp
dHMvc3N0cmVhbS50Y2MiIDEgMwojIDM5ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5z
dGFsbC9pbmNsdWRlL2crKy12My9iaXRzL3NzdHJlYW0udGNjIiAzCgojIDEgIi9idWlsZHMvZ2Nj
LTNfMS1icmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL3NzdHJlYW0iIDEgMwojIDQx
ICIvYnVpbGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9iaXRz
L3NzdHJlYW0udGNjIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlIDxjbGFzcyBfQ2hh
clQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
Z2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBlCiAgICBiYXNpY19zdHJpbmdi
dWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHBiYWNrZmFpbChpbnRfdHlwZSBfX2Mp
CiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBi
b29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0c190eXBl
Ojplb2YoKSk7CiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8
IF9NX2luX2N1cjsKCgoKICAgICAgaWYgKF9fdGVzdHBvcykKICAgICAgICB7CiAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmVxKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSwgdGhpcy0+
Z3B0cigpWy0xXSkKICAgICAgICAgICAgICAmJiAhX190ZXN0ZW9mKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAqX01faW5fY3VyID0gdHJhaXRz
X3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9fcmV0ID0gX19jOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBl
Ojpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3Mg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz46OgogICAgb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBfX3Jl
dCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFpdHNfdHlw
ZTo6ZXFfaW50X3R5cGUoX19jLCBfX3JldCk7CiAgICAgIGJvb2wgX190ZXN0d3JpdGUgPSBfTV9v
dXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01f
bW9kZSAmIGlvc19iYXNlOjpvdXQ7CgoKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAgICAgewog
ICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3Np
emVfdHlwZSBfX2xlbiA9IG1heChfTV9idWZfc2l6ZSwgX01fYnVmX3NpemVfb3B0KTsKICAgICAg
ICAgICAgICBfX2xlbiAqPSAyOwoKICAgICAgICAgICAgICBpZiAoX190ZXN0d3JpdGUpCiAgICAg
ICAgICAgICAgICBfX3JldCA9IHRoaXMtPnNwdXRjKF9fYyk7CiAgICAgICAgICAgICAgZWxzZSBp
ZiAoX19sZW4gPD0gX01fc3RyaW5nLm1heF9zaXplKCkpCiAgICAgICAgICAgICAgICB7CgogICAg
ICAgICAgICAgICAgICBfTV9zdHJpbmcgPSB0aGlzLT5zdHIoKTsKICAgICAgICAgICAgICAgICAg
X01fc3RyaW5nLnJlc2VydmUoX19sZW4pOwogICAgICAgICAgICAgICAgICBfTV9idWZfc2l6ZSA9
IHN0YXRpY19jYXN0PGludF90eXBlPihfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9NX3JlYWxs
eV9zeW5jKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX01fb3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAgICAgICAgICAgICAgICAqX01fb3V0
X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAg
X01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9fYzsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Jl
dCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19y
ZXQ7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNz
IF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz46OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5
LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9
IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21vZGUgJiBp
b3NfYmFzZTo6aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgYm9vbCBfX3Rlc3Rv
dXQgPSBfX21vZGUgJiBpb3NfYmFzZTo6b3V0ICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0Owog
ICAgICBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQgJiYgX193YXkgIT0g
aW9zX2Jhc2U6OmN1cjsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSAmJiAoKF9fdGVzdGluICE9IF9f
dGVzdG91dCkgfHwgX190ZXN0Ym90aCkpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlKiBf
X2JlZyA9IF9NX2J1ZjsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJpID0gX19udWxsOwogICAg
ICAgICAgY2hhcl90eXBlKiBfX2N1cm8gPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5cGUqIF9f
ZW5kaSA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRvID0gX19udWxsOwoKICAg
ICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fY3VyaSA9
IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBfX2VuZGkgPSB0aGlzLT5lZ3B0cigpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19jdXJvID0gdGhpcy0+cHB0cigpOwogICAgICAgICAgICAgIF9fZW5kbyA9IHRoaXMt
PmVwcHRyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBvZmZfdHlwZSBfX25ld29mZmkgPSAw
OwogICAgICAgICAgb2ZmX3R5cGUgX19uZXdvZmZvID0gMDsKICAgICAgICAgIGlmIChfX3dheSA9
PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdvZmZpID0g
X19jdXJpIC0gX19iZWc7CiAgICAgICAgICAgICAgX19uZXdvZmZvID0gX19jdXJvIC0gX19iZWc7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fd2F5ID09IGlvc19iYXNlOjplbmQp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2VuZGkgLSBfX2JlZzsK
ICAgICAgICAgICAgICBfX25ld29mZm8gPSBfX2VuZG8gLSBfX2JlZzsKICAgICAgICAgICAgfQoK
ICAgICAgICAgIGlmIChfX3Rlc3RpbgogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSArIF9fb2Zm
ID49IDAgJiYgX19lbmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9fb2ZmOwog
ICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAgICAgfQog
ICAgICAgICAgaWYgKF9fdGVzdG91dAogICAgICAgICAgICAgICYmIF9fbmV3b2ZmbyArIF9fb2Zm
ID49IDAgJiYgX19lbmRvIC0gX19iZWcgPj0gX19uZXdvZmZvICsgX19vZmYpCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19uZXdvZmZvICsgX19vZmYgLSAoX01f
b3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAgX19yZXQgPSBwb3NfdHlwZShfX25ld29m
Zm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cgog
IHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnBvc190
eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHNl
ZWtwb3MocG9zX3R5cGUgX19zcCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgIHsKICAg
ICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwogICAgICBvZmZfdHlw
ZSBfX3BvcyA9IF9fc3AuX01fcG9zaXRpb24oKTsKICAgICAgY2hhcl90eXBlKiBfX2JlZyA9IF9f
bnVsbDsKICAgICAgY2hhcl90eXBlKiBfX2VuZCA9IF9fbnVsbDsKICAgICAgYm9vbCBfX3Rlc3Rp
biA9IF9fbW9kZSAmIGlvc19iYXNlOjppbiAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAg
ICBib29sIF9fdGVzdG91dCA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQgJiYgX01fbW9kZSAmIGlv
c19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewogICAgICAgICAgX19i
ZWcgPSB0aGlzLT5lYmFjaygpOwogICAgICAgICAgX19lbmQgPSB0aGlzLT5lZ3B0cigpOwogICAg
ICAgIH0KICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICB7CiAgICAgICAgICBfX2JlZyA9IHRo
aXMtPnBiYXNlKCk7CiAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwogICAg
ICAgIH0KCiAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAg
ICAgICAgewoKICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgX01faW5fY3VyID0g
X01faW5fYmVnICsgX19wb3M7CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICBf
TV9vdXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAg
IF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoX19wb3MpKTsKICAgICAgICB9CgogICAgICByZXR1
cm4gX19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdi
dWY8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ2J1Zjx3Y2hhcl90
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPjsKICBl
eHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPjsKICBleHRlcm4gdGVt
cGxhdGUgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxh
dGUgY2xhc3MgYmFzaWNfc3RyaW5nc3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz
cyBiYXNpY19zdHJpbmdzdHJlYW08d2NoYXJfdD47Cn0KIyAzNjggIi9idWlsZHMvZ2NjLTNfMS1i
cmFuY2gvaWE2NC9pbnN0YWxsL2luY2x1ZGUvZysrLXYzL3NzdHJlYW0iIDIgMwojIDUyICIvYnVp
bGRzL2djYy0zXzEtYnJhbmNoL2lhNjQvaW5zdGFsbC9pbmNsdWRlL2crKy12My9jb21wbGV4IiAy
IDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIGNvbXBs
ZXg7CiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PjsKICB0ZW1wbGF0ZTw+IGNsYXNz
IGNvbXBsZXg8ZG91YmxlPjsKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8bG9uZyBkb3VibGU+
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBhYnMoY29uc3QgY29tcGxleDxfVHA+Jik7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYXJnKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIG5vcm0oY29uc3QgY29tcGxleDxfVHA+Jik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGNvbmooY29uc3QgY29tcGxleDxf
VHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gcG9sYXIoY29uc3Qg
X1RwJiwgY29uc3QgX1RwJiA9IDApOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4
PF9UcD4gY29zKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g
Y29tcGxleDxfVHA+IGNvc2goY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBjb21wbGV4PF9UcD4gZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IGxvZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBsb2cxMChjb25zdCBjb21wbGV4PF9U
cD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29t
cGxleDxfVHA+JiwgaW50KTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBw
b3coY29uc3QgY29tcGxleDxfVHA+JiwgY29uc3QgX1RwJik7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPiBjb21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgX1RwJiwgY29uc3QgY29t
cGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gc2luKGNv
bnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+
IHNpbmgoY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21w
bGV4PF9UcD4gc3FydChjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+IGNvbXBsZXg8X1RwPiB0YW4oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gdGFuaChjb25zdCBjb21wbGV4PF9UcD4mKTsKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBjb21wbGV4CiAgICB7CiAgICBwdWJsaWM6
CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICBjb21wbGV4KGNvbnN0IF9UcCYg
PSBfVHAoKSwgY29uc3QgX1RwICYgPSBfVHAoKSk7CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9VcD4KICAgICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwoKICAgICAgX1RwIHJl
YWwoKSBjb25zdDsKICAgICAgX1RwIGltYWcoKSBjb25zdDsKCiAgICAgIGNvbXBsZXg8X1RwPiYg
b3BlcmF0b3I9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29u
c3QgX1RwJik7CiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKICAg
ICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9U
cD4mIG9wZXJhdG9yLz0oY29uc3QgX1RwJik7CgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VXA+CiAgICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7
CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJh
dG9yKz0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4K
ICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9y
Kj0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAg
ICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CgogICAg
cHJpdmF0ZToKICAgICAgX1RwIF9NX3JlYWwsIF9NX2ltYWc7CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBjb21wbGV4PF9UcD46OnJlYWwoKSBjb25z
dCB7IHJldHVybiBfTV9yZWFsOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfVHAKICAgIGNvbXBsZXg8X1RwPjo6aW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNv
bXBsZXgoY29uc3QgX1RwJiBfX3IsIGNvbnN0IF9UcCYgX19pKQogICAgOiBfTV9yZWFsKF9fciks
IF9NX2ltYWcoX19pKSB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8
dHlwZW5hbWUgX1VwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3Qg
Y29tcGxleDxfVXA+JiBfX3opCiAgICA6IF9NX3JlYWwoX196LnJlYWwoKSksIF9NX2ltYWcoX196
LmltYWcoKSkgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYK
ICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgIF9N
X3JlYWwgPSBfX3Q7CiAgICAgX01faW1hZyA9IF9UcCgpOwogICAgIHJldHVybiAqdGhpczsKICAg
IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4mCiAg
ICBjb21wbGV4PF9UcD46Om9wZXJhdG9yKz0oY29uc3QgX1RwJiBfX3QpCiAgICB7CiAgICAgIF9N
X3JlYWwgKz0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVy
YXRvci09KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFsIC09IF9fdDsKICAgICAg
cmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxl
eDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQogICAg
ewogICAgICBfTV9yZWFsICo9IF9fdDsKICAgICAgX01faW1hZyAqPSBfX3Q7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1Rw
PiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBfVHAmIF9fdCkKICAgIHsKICAg
ICAgX01fcmVhbCAvPSBfX3Q7CiAgICAgIF9NX2ltYWcgLz0gX190OwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1l
IF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0
IGNvbXBsZXg8X1VwPiYgX196KQogICAgewogICAgICBfTV9yZWFsID0gX196LnJlYWwoKTsKICAg
ICAgX01faW1hZyA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBs
ZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9VcD4m
IF9feikKICAgIHsKICAgICAgX01fcmVhbCArPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnICs9
IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAg
IGNvbXBsZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKICAgIHsK
ICAgICAgX01fcmVhbCAtPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAgICBjb21wbGV4PF9UcD4mCiAgICBjb21wbGV4PF9U
cD46Om9wZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICB7CiAgICAgIGNvbnN0
IF9UcCBfX3IgPSBfTV9yZWFsICogX196LnJlYWwoKSAtIF9NX2ltYWcgKiBfX3ouaW1hZygpOwog
ICAgICBfTV9pbWFnID0gX01fcmVhbCAqIF9fei5pbWFnKCkgKyBfTV9pbWFnICogX196LnJlYWwo
KTsKICAgICAgX01fcmVhbCA9IF9fcjsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBs
ZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9VcD4m
IF9feikKICAgIHsKICAgICAgY29uc3QgX1RwIF9fciA9IF9NX3JlYWwgKiBfX3oucmVhbCgpICsg
X01faW1hZyAqIF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBfX24gPSBub3JtKF9feik7CiAg
ICAgIF9NX2ltYWcgPSAoX01faW1hZyAqIF9fei5yZWFsKCkgLSBfTV9yZWFsICogX196LmltYWco
KSkgLyBfX247CiAgICAgIF9NX3JlYWwgPSBfX3IgLyBfX247CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIG9wZXJhdG9yKyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+
JiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhj
b25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21w
bGV4PF9UcD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu
bGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29t
cGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKz0gX194OyB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9w
ZXJhdG9yLShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kp
CiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBj
b21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9U
cD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj
b21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxf
VHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9y
Kihjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7
IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKj0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4
PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9f
eCkgKj0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4
PF9UcD4KICAgIG9wZXJhdG9yKihjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBf
X3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKj0gX194OyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25z
dCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVy
biBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4PF9UcD4m
IF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0g
X195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K
ICAgIG9wZXJhdG9yLyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAg
ICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBjb21w
bGV4PF9UcD4mIF9feCkKICAgIHsgcmV0dXJuIF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxf
VHA+JiBfX3gpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4oLV9feC5yZWFsKCksIC1fX3guaW1h
ZygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I9PShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kp
CiAgICB7IHJldHVybiBfX3gucmVhbCgpID09IF9feS5yZWFsKCkgJiYgX194LmltYWcoKSA9PSBf
X3kuaW1hZygpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcj09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKICAg
IHsgcmV0dXJuIF9feC5yZWFsKCkgPT0gX195ICYmIF9feC5pbWFnKCkgPT0gX1RwKCk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29u
c3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gX194ID09
IF9feS5yZWFsKCkgJiYgX1RwKCkgPT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4m
IF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpICE9
IF9feS5yZWFsKCkgfHwgX194LmltYWcoKSAhPSBfX3kuaW1hZygpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGNvbXBsZXg8
X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgIT0gX195
IHx8IF9feC5pbWFnKCkgIT0gX1RwKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8
X1RwPiYgX195KQogICAgeyByZXR1cm4gX194ICE9IF9feS5yZWFsKCkgfHwgX1RwKCkgIT0gX195
LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xh
c3MgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh
dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBjb21wbGV4PF9UcD4m
IF9feCkKICAgIHsKICAgICAgX1RwIF9fcmVfeCwgX19pbV94OwogICAgICBfQ2hhclQgX19jaDsK
ICAgICAgX19pcyA+PiBfX2NoOwogICAgICBpZiAoX19jaCA9PSAnKCcpCiAgICAgICAgewogICAg
ICAgICAgX19pcyA+PiBfX3JlX3ggPj4gX19jaDsKICAgICAgICAgIGlmIChfX2NoID09ICcsJykK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9faXMgPj4gX19pbV94ID4+IF9fY2g7CiAgICAg
ICAgICAgICAgaWYgKF9fY2ggPT0gJyknKQogICAgICAgICAgICAgICAgX194ID0gY29tcGxleDxf
VHA+KF9fcmVfeCwgX19pbV94KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf
X2lzLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
ZWxzZSBpZiAoX19jaCA9PSAnKScpCiAgICAgICAgICAgIF9feCA9IGNvbXBsZXg8X1RwPihfX3Jl
X3gsIF9UcCgwKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9faXMuc2V0c3RhdGUoaW9z
X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg
IF9faXMucHV0YmFjayhfX2NoKTsKICAgICAgICAgIF9faXMgPj4gX19yZV94OwogICAgICAgICAg
X194ID0gY29tcGxleDxfVHA+KF9fcmVfeCwgX1RwKDApKTsKICAgICAgICB9CiAgICAgIHJldHVy
biBfX2lzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwg
Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBjb21w
bGV4PF9UcD4mIF9feCkKICAgIHsKICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+IF9fczsKICAgICAgX19zLmZsYWdzKF9fb3MuZmxhZ3MoKSk7CiAgICAgIF9fcy5pbWJ1
ZShfX29zLmdldGxvYygpKTsKICAgICAgX19zLnByZWNpc2lvbihfX29zLnByZWNpc2lvbigpKTsK
ICAgICAgX19zIDw8ICcoJyA8PCBfX3gucmVhbCgpIDw8ICIsIiA8PCBfX3guaW1hZygpIDw8ICcp
JzsKICAgICAgcmV0dXJuIF9fb3MgPDwgX19zLnN0cigpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgcmVhbChjb25zdCBjb21wbGV4PF9UcD4mIF9f
eikKICAgIHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIF9UcAogICAgaW1hZyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsgcmV0
dXJuIF9fei5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9U
cAogICAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfVHAgX194ID0g
X196LnJlYWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBf
X3MgPSBtYXgoYWJzKF9feCksIGFicyhfX3kpKTsKICAgICAgaWYgKF9fcyA9PSBfVHAoKSkKICAg
ICAgICByZXR1cm4gX19zOwogICAgICBfX3ggLz0gX19zOwogICAgICBfX3kgLz0gX19zOwogICAg
ICByZXR1cm4gX19zICogc3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBhcmcoY29uc3QgY29tcGxleDxf
VHA+JiBfX3opCiAgICB7IHJldHVybiBhdGFuMihfX3ouaW1hZygpLCBfX3oucmVhbCgpKTsgfQoK
CgoKCgogIHRlbXBsYXRlPGJvb2w+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyCiAgICB7CiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19p
dChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfVHAg
X194ID0gX196LnJlYWwoKTsKICAgICAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwog
ICAgICAgICAgcmV0dXJuIF9feCAqIF9feCArIF9feSAqIF9feTsKICAgICAgICB9CiAgICB9OwoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyPHRydWU+CiAgICB7CiAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19pdChj
b25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBfVHAgX19yZXMgPSBh
YnMoX196KTsKICAgICAgICAgIHJldHVybiBfX3JlcyAqIF9fcmVzOwogICAgICAgIH0KICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIG5vcm0oY29uc3Qg
Y29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIHJldHVybiBfTm9ybV9oZWxwZXI8X19pc19m
bG9hdGluZzxfVHA+OjpfTV90eXBlPjo6X1NfZG9faXQoX196KTsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG9sYXIoY29uc3QgX1Rw
JiBfX3JobywgY29uc3QgX1RwJiBfX3RoZXRhKQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+KF9f
cmhvICogY29zKF9fdGhldGEpLCBfX3JobyAqIHNpbihfX3RoZXRhKSk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgY29uaihjb25zdCBjb21w
bGV4PF9UcD4mIF9feikKICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196
LmltYWcoKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4
PF9UcD4KICAgIGNvcyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgY29uc3Qg
X1RwIF9feCA9IF9fei5yZWFsKCk7CiAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwog
ICAgICByZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29zaChfX3kpLCAtc2luKF9feCkg
KiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg
Y29tcGxleDxfVHA+CiAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAg
ICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5p
bWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChfX3gpICogY29zKF9feSksIHNp
bmgoX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW5saW5lIGNvbXBsZXg8X1RwPgogICAgZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg
eyByZXR1cm4gcG9sYXIoZXhwKF9fei5yZWFsKCkpLCBfX3ouaW1hZygpKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBsb2coY29uc3QgY29t
cGxleDxfVHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4obG9nKGFicyhfX3opKSwg
YXJnKF9feikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4
PF9UcD4KICAgIGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgeyByZXR1cm4gbG9n
KF9feikgLyBsb2coX1RwKDEwLjApKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp
bmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7
CiAgICAgIGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOwogICAgICBjb25zdCBfVHAgX195ID0g
X196LmltYWcoKTsKICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihzaW4oX194KSAqIGNvc2goX195
KSwgY29zKF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196
KQogICAgewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1Rw
IF9feSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oc2luaChfX3gpICog
Y29zKF9feSksIGNvc2goX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgY29tcGxleDxfVHA+CiAgICBzcXJ0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196
KQogICAgewogICAgICBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5p
bWFnKCk7CgogICAgICBpZiAoX194ID09IF9UcCgpKQogICAgICAgIHsKICAgICAgICAgIF9UcCBf
X3QgPSBzcXJ0KGFicyhfX3kpIC8gMik7CiAgICAgICAgICByZXR1cm4gY29tcGxleDxfVHA+KF9f
dCwgX195IDwgX1RwKCkgPyAtX190IDogX190KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICBfVHAgX190ID0gc3FydCgyICogKGFicyhfX3opICsgYWJzKF9feCkpKTsK
ICAgICAgICAgIF9UcCBfX3UgPSBfX3QgLyAyOwogICAgICAgICAgcmV0dXJuIF9feCA+IF9UcCgp
CiAgICAgICAgICAgID8gY29tcGxleDxfVHA+KF9fdSwgX195IC8gX190KQogICAgICAgICAgICA6
IGNvbXBsZXg8X1RwPihhYnMoX195KSAvIF9fdCwgX195IDwgX1RwKCkgPyAtX191IDogX191KTsK
ICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21w
bGV4PF9UcD4KICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgcmV0
dXJuIHNpbihfX3opIC8gY29zKF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHRhbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3op
CiAgICB7CiAgICAgIHJldHVybiBzaW5oKF9feikgLyBjb3NoKF9feik7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBj
b21wbGV4PF9UcD4mIF9feiwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fcG93X2hlbHBl
cihfX3osIF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj
b21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBf
X3kpCiAgICB7CiAgICAgIHJldHVybiBleHAoX195ICogbG9nKF9feCkpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBwb3coY29uc3Qg
Y29tcGxleDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgewogICAgICBy
ZXR1cm4gZXhwKF9feSAqIGxvZyhfX3gpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBj
b21wbGV4PF9UcD4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGV4cChfX3kgKiBsb2coX194KSk7
CiAgICB9CgoKCiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PgogIHsKICBwdWJsaWM6
CiAgICB0eXBlZGVmIGZsb2F0IHZhbHVlX3R5cGU7CgogICAgY29tcGxleChmbG9hdCA9IDAuMGYs
IGZsb2F0ID0gMC4wZik7CgoKCiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91
YmxlPiYpOwogICAgZXhwbGljaXQgY29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYp
OwoKICAgIGZsb2F0IHJlYWwoKSBjb25zdDsKICAgIGZsb2F0IGltYWcoKSBjb25zdDsKCiAgICBj
b21wbGV4PGZsb2F0PiYgb3BlcmF0b3I9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVy
YXRvcis9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvci09KGZsb2F0KTsKICAg
IGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcio9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBv
cGVyYXRvci89KGZsb2F0KTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNv
bXBsZXg8ZmxvYXQ+Jm9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9yKz0oY29uc3QgY29t
cGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgICAgIGNvbXBsZXg8ZmxvYXQ+
JiBvcGVyYXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8Y2xhc3MgX1Rw
PgogICAgICBjb21wbGV4PGZsb2F0PiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsK
ICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mb3BlcmF0b3IvPShj
b25zdCBjb21wbGV4PF9UcD4mKTsKCiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4X18g
ZmxvYXQgX0NvbXBsZXhUOwogICAgX0NvbXBsZXhUIF9NX3ZhbHVlOwoKICAgIGNvbXBsZXgoX0Nv
bXBsZXhUIF9feikgOiBfTV92YWx1ZShfX3opIHsgfQoKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4
PGRvdWJsZT47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CiAgfTsKCiAg
aW5saW5lIGZsb2F0CiAgY29tcGxleDxmbG9hdD46OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9f
cmVhbF9fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBmbG9hdAogIGNvbXBsZXg8ZmxvYXQ+OjppbWFn
KCkgY29uc3QKICB7IHJldHVybiBfX2ltYWdfXyBfTV92YWx1ZTsgfQoKICBpbmxpbmUKICBjb21w
bGV4PGZsb2F0Pjo6Y29tcGxleChmbG9hdCByLCBmbG9hdCBpKQogIHsKICAgIF9fcmVhbF9fIF9N
X3ZhbHVlID0gcjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gaTsKICB9CgogIGlubGluZSBjb21w
bGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9KGZsb2F0IF9fZikKICB7CiAg
ICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fZjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gMC4wZjsK
ICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4
PGZsb2F0Pjo6b3BlcmF0b3IrPShmbG9hdCBfX2YpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUg
Kz0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+Jgog
IGNvbXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci09KGZsb2F0IF9fZikKICB7CiAgICBfX3JlYWxfXyBf
TV92YWx1ZSAtPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxm
bG9hdD4mCiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yKj0oZmxvYXQgX19mKQogIHsKICAgIF9N
X3ZhbHVlICo9IF9fZjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZs
b2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IvPShmbG9hdCBfX2YpCiAgewogICAgX01f
dmFsdWUgLz0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1RwPgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9
KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196
LnJlYWwoKTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICAgIHJldHVybiAq
dGhpczsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29tcGxleDxmbG9h
dD4mCiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3op
CiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX196LnJlYWwoKTsKICAgIF9faW1hZ19fIF9N
X3ZhbHVlICs9IF9fei5pbWFnKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0
Pjo6b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICBfX3JlYWxf
XyBfTV92YWx1ZSAtPSBfX3oucmVhbCgpOwogICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5p
bWFnKCk7CiAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3Iq
PShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAg
ICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196Lmlt
YWcoKTsKICAgICAgX01fdmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNv
bXBsZXg8ZmxvYXQ+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewog
ICAgICBfQ29tcGxleFQgX190OwogICAgICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwogICAg
ICBfX2ltYWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAgICBfTV92YWx1ZSAvPSBfX3Q7CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8ZG91Ymxl
PgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBs
ZXgoZG91YmxlID0wLjAsIGRvdWJsZSA9MC4wKTsKCgoKICAgIGNvbXBsZXgoY29uc3QgY29tcGxl
eDxmbG9hdD4mKTsKICAgIGV4cGxpY2l0IGNvbXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJs
ZT4mKTsKCiAgICBkb3VibGUgcmVhbCgpIGNvbnN0OwogICAgZG91YmxlIGltYWcoKSBjb25zdDsK
CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yPShkb3VibGUpOwogICAgY29tcGxleDxkb3Vi
bGU+JiBvcGVyYXRvcis9KGRvdWJsZSk7CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yLT0o
ZG91YmxlKTsKICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IqPShkb3VibGUpOwogICAgY29t
cGxleDxkb3VibGU+JiBvcGVyYXRvci89KGRvdWJsZSk7CgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHA+CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1Rw
PiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGRvdWJsZT4mIG9w
ZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+
CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mKTsK
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRv
cio9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
ICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHBy
aXZhdGU6CiAgICB0eXBlZGVmIF9fY29tcGxleF9fIGRvdWJsZSBfQ29tcGxleFQ7CiAgICBfQ29t
cGxleFQgX01fdmFsdWU7CgogICAgY29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9f
eikgeyB9CgogICAgZnJpZW5kIGNsYXNzIGNvbXBsZXg8ZmxvYXQ+OwogICAgZnJpZW5kIGNsYXNz
IGNvbXBsZXg8bG9uZyBkb3VibGU+OwogIH07CgogIGlubGluZSBkb3VibGUKICBjb21wbGV4PGRv
dWJsZT46OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CgogIGlu
bGluZSBkb3VibGUKICBjb21wbGV4PGRvdWJsZT46OmltYWcoKSBjb25zdAogIHsgcmV0dXJuIF9f
aW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChk
b3VibGUgX19yLCBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwog
ICAgX19pbWFnX18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+
JgogIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3I9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFs
X18gX01fdmFsdWUgPSBfX2Q7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IDAuMDsKICAgIHJldHVy
biAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgY29tcGxleDxkb3VibGU+
OjpvcGVyYXRvcis9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19k
OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICBjb21w
bGV4PGRvdWJsZT46Om9wZXJhdG9yLT0oZG91YmxlIF9fZCkKICB7CiAgICBfX3JlYWxfXyBfTV92
YWx1ZSAtPSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3Vi
bGU+JgogIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShkb3VibGUgX19kKQogIHsKICAgIF9N
X3ZhbHVlICo9IF9fZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGRv
dWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvci89KGRvdWJsZSBfX2QpCiAgewogICAg
X01fdmFsdWUgLz0gX19kOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6
b3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBf
TV92YWx1ZSA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWco
KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBpbmxpbmUgY29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcis9
KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92YWx1ZSAr
PSBfX3oucmVhbCgpOwogICAgICBfX2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOwogICAg
ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3Qg
Y29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5y
ZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBs
ZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4
PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190
ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01f
dmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46
Om9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4
VCBfX3Q7CiAgICAgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9f
dCA9IF9fei5pbWFnKCk7CiAgICAgIF9NX3ZhbHVlIC89IF9fdDsKICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKCgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT4KICB7CiAg
cHVibGljOgogICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBsZXgo
bG9uZyBkb3VibGUgPSAwLjBMLCBsb25nIGRvdWJsZSA9IDAuMEwpOwoKCgogICAgY29tcGxleChj
b25zdCBjb21wbGV4PGZsb2F0PiYpOwogICAgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4m
KTsKCiAgICBsb25nIGRvdWJsZSByZWFsKCkgY29uc3Q7CiAgICBsb25nIGRvdWJsZSBpbWFnKCkg
Y29uc3Q7CgogICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPSAobG9uZyBkb3VibGUp
OwogICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yKz0gKGxvbmcgZG91YmxlKTsKICAg
IGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09IChsb25nIGRvdWJsZSk7CiAgICBjb21w
bGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3IqPSAobG9uZyBkb3VibGUpOwogICAgY29tcGxleDxs
b25nIGRvdWJsZT4mIG9wZXJhdG9yLz0gKGxvbmcgZG91YmxlKTsKCgoKICAgIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPShjb25zdCBj
b21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxs
b25nIGRvdWJsZT4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09KGNv
bnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21w
bGV4PGxvbmcgZG91YmxlPiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9y
Lz0oY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHByaXZhdGU6CiAgICB0eXBlZGVmIF9fY29tcGxl
eF9fIGxvbmcgZG91YmxlIF9Db21wbGV4VDsKICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKCiAgICBj
b21wbGV4KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KCiAgICBmcmllbmQgY2xh
c3MgY29tcGxleDxmbG9hdD47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxkb3VibGU+OwogIH07
CgogIGlubGluZQogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGxvbmcgZG91YmxlIF9f
ciwgbG9uZyBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAg
X19pbWFnX18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb21w
bGV4PGxvbmcgZG91YmxlPjo6cmVhbCgpIGNvbnN0CiAgeyByZXR1cm4gX19yZWFsX18gX01fdmFs
dWU7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29tcGxleDxsb25nIGRvdWJsZT46OmltYWco
KSBjb25zdAogIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBjb21wbGV4
PGxvbmcgZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3I9KGxvbmcgZG91
YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fcjsKICAgIF9faW1hZ19fIF9N
X3ZhbHVlID0gMC4wTDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGxv
bmcgZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IrPShsb25nIGRvdWJs
ZSBfX3IpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19yOwogICAgcmV0dXJuICp0aGlz
OwogIH0KCiAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3Vi
bGU+OjpvcGVyYXRvci09KGxvbmcgZG91YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1
ZSAtPSBfX3I7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxsb25nIGRv
dWJsZT4mCiAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0obG9uZyBkb3VibGUgX19y
KQogIHsKICAgIF9NX3ZhbHVlICo9IF9fcjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGlu
ZSBjb21wbGV4PGxvbmcgZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3Iv
PShsb25nIGRvdWJsZSBfX3IpCiAgewogICAgX01fdmFsdWUgLz0gX19yOwogICAgcmV0dXJuICp0
aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9u
ZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yPShjb25zdCBjb21w
bGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVhbCgp
OwogICAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9u
ZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKz0oY29uc3QgY29t
cGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFs
KCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAq
dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8
bG9uZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3Qg
Y29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5y
ZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBs
ZXg8bG9uZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0oY29u
c3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7CiAgICAgIF9f
cmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7
CiAgICAgIF9NX3ZhbHVlICo9IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBj
b21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikK
ICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwo
KTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgLz0gX190
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKICBpbmxpbmUKICBjb21wbGV4PGZsb2F0
Pjo6Y29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21w
bGV4VChfX3ouX01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxmbG9hdD46OmNvbXBs
ZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4
VChfX3ouX01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxkb3VibGU+Ojpjb21wbGV4
KGNvbnN0IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCiAgOiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9N
X3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChjb25zdCBj
b21wbGV4PGxvbmcgZG91YmxlPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196
LnJlYWwoKTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICB9CgogIGlubGlu
ZQogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZmxvYXQ+JiBf
X3opCiAgOiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQog
IGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYgX196
KQogIDogX01fdmFsdWUoX0NvbXBsZXhUKF9fei5fTV92YWx1ZSkpIHsgfQp9CiMgNiAiLi4vLi4v
RlRlbnNvci5wYXJ0LmgiIDIKCgoKbmFtZXNwYWNlIEZUZW5zb3IgewogIHRlbXBsYXRlIDxjbGFz
cyBUPiBjbGFzcyBUZW5zb3IwOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgaW50IERpbT4gY2xhc3Mg
VGVuc29yMTsKICB0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltLCBjaGFyIGk+IGNs
YXNzIFRlbnNvcjFfRXhwcjsKCiAgdGVtcGxhdGUgPGNsYXNzIFQsIGludCBEaW0xLCBpbnQgRGlt
Mj4gY2xhc3MgVGVuc29yMjsKICB0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwg
aW50IERpbTIsIGNoYXIgaSwgY2hhciBqPgogIGNsYXNzIFRlbnNvcjJfRXhwcjsKICB0ZW1wbGF0
ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgTj4KICBjbGFzcyBUZW5zb3IyX251bWJlcl9yaHNfMDsK
ICB0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgTj4KICBjbGFzcyBUZW5zb3IyX251bWJl
cl9yaHNfMTsKCiAgdGVtcGxhdGUgPGNsYXNzIFQsIGludCBEaW0+IGNsYXNzIFRlbnNvcjJfc3lt
bWV0cmljOwogIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0sIGNoYXIgaSwgY2hh
ciBqPgogIGNsYXNzIFRlbnNvcjJfc3ltbWV0cmljX0V4cHI7CgogIHRlbXBsYXRlIDxjbGFzcyBB
LCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGludCBEaW0yLAogICAgY2hhciBpLCBjaGFy
IGosIGNoYXIgaz4gY2xhc3MgVGVuc29yM19FeHByOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgVCwgaW50
IERpbTAxLCBpbnQgRGltMj4gY2xhc3MgVGVuc29yM19kZzsKICB0ZW1wbGF0ZSA8Y2xhc3MgQSwg
Y2xhc3MgVCwgaW50IERpbTAxLCBpbnQgRGltMiwgY2hhciBpLCBjaGFyIGosIGNoYXIgaz4KICBj
bGFzcyBUZW5zb3IzX2RnX0V4cHI7CiAgdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IE4+
IGNsYXNzIFRlbnNvcjNfZGdfbnVtYmVyX3Joc18wOwogIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IFQsIGludCBOPiBjbGFzcyBUZW5zb3IzX2RnX251bWJlcl9yaHNfMjsKICB0ZW1wbGF0ZTxjbGFz
cyBBLCBjbGFzcyBULCBpbnQgTjEsIGludCBOMj4gY2xhc3MgVGVuc29yM19kZ19udW1iZXJfcmhz
XzAxOwogIHRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBOMSwgaW50IE4yPiBjbGFzcyBU
ZW5zb3IzX2RnX251bWJlcl9yaHNfMTI7CgogIHRlbXBsYXRlIDxjbGFzcyBULCBpbnQgRGltMCwg
aW50IERpbTEyPiBjbGFzcyBUZW5zb3IzX2NocmlzdG9mOwogIHRlbXBsYXRlIDxjbGFzcyBBLCBj
bGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEyLCBjaGFyIGksIGNoYXIgaiwgY2hhciBrPgogIGNs
YXNzIFRlbnNvcjNfY2hyaXN0b2ZfRXhwcjsKCiAgdGVtcGxhdGUgPGNsYXNzIFQsIGludCBEaW0w
LCBpbnQgRGltMTI+IGNsYXNzIFRlbnNvcjNfYW50aXN5bW1ldHJpYzsKICB0ZW1wbGF0ZSA8Y2xh
c3MgQSwgY2xhc3MgVCwgaW50IERpbTAsIGludCBEaW0xMiwgY2hhciBpLCBjaGFyIGosIGNoYXIg
az4KICBjbGFzcyBUZW5zb3IzX2FudGlzeW1tZXRyaWNfRXhwcjsKCiAgdGVtcGxhdGUgPGNsYXNz
IEEsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwgaW50IERpbTIsIGludCBEaW0zLAogICAg
Y2hhciBpLCBjaGFyIGosIGNoYXIgaywgY2hhciBsPiBjbGFzcyBUZW5zb3I0X0V4cHI7CgojIDEg
Ii4uLy4uL0luZGV4LmgiIDEKIyAxOSAiLi4vLi4vSW5kZXguaCIKdGVtcGxhdGU8Y2hhciBpLCBp
bnQgRGltPgpjbGFzcyBJbmRleAp7CnB1YmxpYzoKICBJbmRleCgpIHt9Owp9OwojIDUwICIuLi8u
Li9GVGVuc29yLnBhcnQuaCIgMgojIDEgIi4uLy4uL051bWJlci5oIiAxCgoKCgoKCnRlbXBsYXRl
PGNvbnN0IGludCBOPgpjbGFzcyBOdW1iZXIKewpwdWJsaWM6CiAgTnVtYmVyKCkge307CiAgb3Bl
cmF0b3IgaW50KCkgY29uc3QKICB7CiAgICByZXR1cm4gTjsKICB9Cn07CiMgNTEgIi4uLy4uL0ZU
ZW5zb3IucGFydC5oIiAyCiMgMSAiLi4vLi4vcHJvbW90ZS5oIiAxCiMgMTAgIi4uLy4uL3Byb21v
dGUuaCIKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPgpjbGFzcyBwcm9tb3RlIHsKcHVibGlj
OgogIHR5cGVkZWYgVDEgVjsKfTsKCgoKCnRlbXBsYXRlPD4gY2xhc3MgcHJvbW90ZTxpbnQsZG91
YmxlID4geyBwdWJsaWM6IHR5cGVkZWYgZG91YmxlIFY7IH07CnRlbXBsYXRlPD4gY2xhc3MgcHJv
bW90ZTxkb3VibGUsaW50ID4geyBwdWJsaWM6IHR5cGVkZWYgZG91YmxlIFY7IH07CnRlbXBsYXRl
PD4gY2xhc3MgcHJvbW90ZTxpbnQsc3RkOjpjb21wbGV4PGRvdWJsZT4gPiB7IHB1YmxpYzogdHlw
ZWRlZiBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBWOyB9Owp0ZW1wbGF0ZTw+IGNsYXNzIHByb21vdGU8
c3RkOjpjb21wbGV4PGRvdWJsZT4saW50ID4geyBwdWJsaWM6IHR5cGVkZWYgc3RkOjpjb21wbGV4
PGRvdWJsZT4gVjsgfTsKdGVtcGxhdGU8PiBjbGFzcyBwcm9tb3RlPGRvdWJsZSxzdGQ6OmNvbXBs
ZXg8ZG91YmxlPiA+IHsgcHVibGljOiB0eXBlZGVmIHN0ZDo6Y29tcGxleDxkb3VibGU+IFY7IH07
CnRlbXBsYXRlPD4gY2xhc3MgcHJvbW90ZTxzdGQ6OmNvbXBsZXg8ZG91YmxlPixkb3VibGUgPiB7
IHB1YmxpYzogdHlwZWRlZiBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBWOyB9OwojIDUyICIuLi8uLi9G
VGVuc29yLnBhcnQuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEuaCIgMQoKCiMgMSAiLi4vLi4vVGVu
c29yMS9UZW5zb3IxX2NvbnN0cnVjdG9yLmgiIDEKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50IFRl
bnNvcl9EaW0+CmNsYXNzIFRlbnNvcjFfY29uc3RydWN0b3I7Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpj
bGFzcyBUZW5zb3IxX2NvbnN0cnVjdG9yPFQsMj4KewpwdWJsaWM6CiAgVGVuc29yMV9jb25zdHJ1
Y3RvcihUIGRhdGFbXSwgVCBkMCwgVCBkMSkKICB7CiAgICBkYXRhWzBdPWQwOwogICAgZGF0YVsx
XT1kMTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBUZW5zb3IxX2NvbnN0cnVjdG9y
PFQsMz4KewpwdWJsaWM6CiAgVGVuc29yMV9jb25zdHJ1Y3RvcihUIGRhdGFbXSwgVCBkMCwgVCBk
MSwgVCBkMikKICB7CiAgICBkYXRhWzBdPWQwOwogICAgZGF0YVsxXT1kMTsKICAgIGRhdGFbMl09
ZDI7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xhc3MgVGVuc29yMV9jb25zdHJ1Y3RvcjxU
LDQ+CnsKcHVibGljOgogIFRlbnNvcjFfY29uc3RydWN0b3IoVCBkYXRhW10sIFQgZDAsIFQgZDEs
IFQgZDIsIFQgZDMpCiAgewogICAgZGF0YVswXT1kMDsKICAgIGRhdGFbMV09ZDE7CiAgICBkYXRh
WzJdPWQyOwogICAgZGF0YVszXT1kMzsKICB9Cn07CiMgNCAiLi4vLi4vVGVuc29yMS5oIiAyCiMg
MSAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX3ZhbHVlLmgiIDEKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwg
aW50IFRlbnNvcl9EaW0+CmNsYXNzIFRlbnNvcjEKewogIFQgZGF0YVtUZW5zb3JfRGltXTsKcHVi
bGljOgoKCgoKICBUZW5zb3IxKFQgZDAsIFQgZDEpCiAgewogICAgVGVuc29yMV9jb25zdHJ1Y3Rv
cjxULFRlbnNvcl9EaW0+KGRhdGEsZDAsZDEpOwogIH0KICBUZW5zb3IxKFQgZDAsIFQgZDEsIFQg
ZDIpCiAgewogICAgVGVuc29yMV9jb25zdHJ1Y3RvcjxULFRlbnNvcl9EaW0+KGRhdGEsZDAsZDEs
ZDIpOwogIH0KICBUZW5zb3IxKFQgZDAsIFQgZDEsIFQgZDIsIFQgZDMpCiAgewogICAgVGVuc29y
MV9jb25zdHJ1Y3RvcjxULFRlbnNvcl9EaW0+KGRhdGEsZDAsZDEsZDIsZDMpOwogIH0KCiAgVGVu
c29yMSgpIHt9CgoKCgogIFQgJiBvcGVyYXRvcigpKGNvbnN0IGludCBOKQogIHsKCiAgICBpZihO
Pj1UZW5zb3JfRGltIHx8IE48MCkKICAgICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQmFkIGlu
ZGV4IGluIFRlbnNvcjE8VCwiIDw8IFRlbnNvcl9EaW0KICAgICAgICAgICAgICAgICAgPDwgIj4u
b3BlcmF0b3IoIiA8PCBOIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgYWJvcnQoKTsKICAg
ICAgfQoKICAgIHJldHVybiBkYXRhW05dOwogIH0KICBUIG9wZXJhdG9yKCkoY29uc3QgaW50IE4p
IGNvbnN0CiAgewoKICAgIGlmKE4+PVRlbnNvcl9EaW0gfHwgTjwwKQogICAgICB7CiAgICAgICAg
c3RkOjpjZXJyIDw8ICJCYWQgaW5kZXggaW4gVGVuc29yMTxULCIgPDwgVGVuc29yX0RpbQogICAg
ICAgICAgICAgICAgICA8PCAiPi5vcGVyYXRvcigiIDw8IE4gPDwgIikgY29uc3QiIDw8IHN0ZDo6
ZW5kbDsKICAgICAgICBhYm9ydCgpOwogICAgICB9CgogICAgcmV0dXJuIGRhdGFbTl07CiAgfQoK
CgoKCgogIHRlbXBsYXRlPGNoYXIgaSwgaW50IERpbT4KICBUZW5zb3IxX0V4cHI8VGVuc29yMTxU
LFRlbnNvcl9EaW0+LFQsRGltLGk+CiAgb3BlcmF0b3IoKShjb25zdCBJbmRleDxpLERpbT4gJmlu
ZGV4KQogIHsKICAgIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yMTxULFRlbnNvcl9EaW0+LFQs
RGltLGk+KCp0aGlzKTsKICB9CgogIHRlbXBsYXRlPGNoYXIgaSwgaW50IERpbT4KICBUZW5zb3Ix
X0V4cHI8Y29uc3QgVGVuc29yMTxULFRlbnNvcl9EaW0+LFQsRGltLGk+CiAgb3BlcmF0b3IoKShj
b25zdCBJbmRleDxpLERpbT4gJmluZGV4KSBjb25zdAogIHsKICAgIHJldHVybiBUZW5zb3IxX0V4
cHI8Y29uc3QgVGVuc29yMTxULFRlbnNvcl9EaW0+LFQsRGltLGk+KCp0aGlzKTsKICB9Cn07CiMg
NSAiLi4vLi4vVGVuc29yMS5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX3BvaW50ZXIu
aCIgMQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgVCwgaW50IFRlbnNvcl9EaW0+CmNsYXNzIFRlbnNvcjE8
VCosVGVuc29yX0RpbT4KewoKCgogIG11dGFibGUgVCAqIGRhdGFbVGVuc29yX0RpbV07CnB1Ymxp
YzoKCgoKCiAgVGVuc29yMShUICpkMCwgVCAqZDEpCiAgewogICAgVGVuc29yMV9jb25zdHJ1Y3Rv
cjxUKiAsVGVuc29yX0RpbT4oZGF0YSxkMCxkMSk7CiAgfQogIFRlbnNvcjEoVCAqZDAsIFQgKmQx
LCBUICpkMikKICB7CiAgICBUZW5zb3IxX2NvbnN0cnVjdG9yPFQqICxUZW5zb3JfRGltPihkYXRh
LGQwLGQxLGQyKTsKICB9CiAgVGVuc29yMShUICpkMCwgVCAqZDEsIFQgKmQyLCBUICpkMykKICB7
CiAgICBUZW5zb3IxX2NvbnN0cnVjdG9yPFQqICxUZW5zb3JfRGltPihkYXRhLGQwLGQxLGQyLGQz
KTsKICB9CgoKCgogIFQgJiBvcGVyYXRvcigpKGNvbnN0IGludCBOKQogIHsKCiAgICBpZihOPj1U
ZW5zb3JfRGltIHx8IE48MCkKICAgICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQmFkIGluZGV4
IGluIFRlbnNvcjE8VCosIiA8PCBUZW5zb3JfRGltCiAgICAgICAgICAgICAgICAgIDw8ICI+Lm9w
ZXJhdG9yKCIgPDwgTiA8PCAiKSIgPDwgc3RkOjplbmRsOwogICAgICAgIGFib3J0KCk7CiAgICAg
IH0KCiAgICByZXR1cm4gKmRhdGFbTl07CiAgfQogIFQgb3BlcmF0b3IoKShjb25zdCBpbnQgTikg
Y29uc3QKICB7CgogICAgaWYoTj49VGVuc29yX0RpbSB8fCBOPDApCiAgICAgIHsKICAgICAgICBz
dGQ6OmNlcnIgPDwgIkJhZCBpbmRleCBpbiBUZW5zb3IxPFQqLCIgPDwgVGVuc29yX0RpbQogICAg
ICAgICAgICAgICAgICA8PCAiPi5vcGVyYXRvcigiIDw8IE4gPDwgIikgY29uc3QiIDw8IHN0ZDo6
ZW5kbDsKICAgICAgICBhYm9ydCgpOwogICAgICB9CgogICAgcmV0dXJuICpkYXRhW05dOwogIH0K
ICBUICogcHRyKGNvbnN0IGludCBOKSBjb25zdAogIHsKCiAgICBpZihOPj1UZW5zb3JfRGltIHx8
IE48MCkKICAgICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQmFkIGluZGV4IGluIFRlbnNvcjE8
VCosIiA8PCBUZW5zb3JfRGltCiAgICAgICAgICAgICAgICAgIDw8ICI+LnB0cigiIDw8IE4gPDwg
IikiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBhYm9ydCgpOwogICAgICB9CgogICAgcmV0dXJuIGRh
dGFbTl07CiAgfQoKCgoKCgogIHRlbXBsYXRlPGNoYXIgaSwgaW50IERpbT4KICBUZW5zb3IxX0V4
cHI8VGVuc29yMTxUKixUZW5zb3JfRGltPixULERpbSxpPgogIG9wZXJhdG9yKCkoY29uc3QgSW5k
ZXg8aSxEaW0+ICZpbmRleCkKICB7CiAgICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvcjE8VCos
VGVuc29yX0RpbT4sVCxEaW0saT4oKnRoaXMpOwogIH0KCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQg
RGltPgogIFRlbnNvcjFfRXhwcjxjb25zdCBUZW5zb3IxPFQqLFRlbnNvcl9EaW0+LFQsRGltLGk+
CiAgb3BlcmF0b3IoKShjb25zdCBJbmRleDxpLERpbT4gJmluZGV4KSBjb25zdAogIHsKICAgIHJl
dHVybiBUZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMTxUKixUZW5zb3JfRGltPixULERpbSxpPigq
dGhpcyk7CiAgfQoKCgoKICBjb25zdCBUZW5zb3IxICYgb3BlcmF0b3IrKygpIGNvbnN0CiAgewog
ICAgZm9yKGludCBpPTA7aTxUZW5zb3JfRGltOysraSkKICAgICAgKytkYXRhW2ldOwogICAgcmV0
dXJuICp0aGlzOwogIH0KfTsKIyA2ICIuLi8uLi9UZW5zb3IxLmgiIDIKCiMgMSAiLi4vLi4vVGVu
c29yMS9UZW5zb3IxX0V4cHIuaCIgMQoKCgoKIyAxICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfcGx1
c19UZW5zb3IxLmgiIDEKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFz
cyBVLCBpbnQgRGltLCBjaGFyIGk+CmNsYXNzIFRlbnNvcjFfcGx1c19UZW5zb3IxCnsKICBjb25z
dCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsKICBjb25zdCBUZW5zb3IxX0V4cHI8QixV
LERpbSxpPiBpdGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0
IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOKStpdGVyQihOKTsKICB9CgogIFRl
bnNvcjFfcGx1c19UZW5zb3IxKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLAogICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGk+ICZiKToKICAg
IGl0ZXJBKGEpLCBpdGVyQihiKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xh
c3MgVCwgY2xhc3MgVSwgY2hhciBpLCBpbnQgRGltPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHBy
PGNvbnN0IFRlbnNvcjFfcGx1c19UZW5zb3IxPEEsQixULFUsRGltLGk+LAogIHByb21vdGU8VCxV
Pjo6VixEaW0saT4Kb3BlcmF0b3IrKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLCBj
b25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29y
MV9wbHVzX1RlbnNvcjE8QSxCLFQsVSxEaW0saT4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29y
MV9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbSxpPgogICAgKFRlbnNvckV4cHIo
YSxiKSk7Cn0KIyA2ICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfRXhwci5oIiAyCiMgMSAiLi4vLi4v
VGVuc29yMS9UZW5zb3IxX21pbnVzX1RlbnNvcjEuaCIgMQoKCnRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaT4KY2xhc3MgVGVuc29yMV9t
aW51c19UZW5zb3IxCnsKICBjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsKICBj
b25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiBpdGVyQjsKcHVibGljOgogIHByb21vdGU8VCxV
Pjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShO
KS1pdGVyQihOKTsKICB9CgogIFRlbnNvcjFfbWludXNfVGVuc29yMShjb25zdCBUZW5zb3IxX0V4
cHI8QSxULERpbSxpPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMV9F
eHByPEIsVSxEaW0saT4gJmIpOgogICAgaXRlckEoYSksIGl0ZXJCKGIpIHt9Cn07Cgp0ZW1wbGF0
ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBjaGFyIGksIGludCBEaW0+Cmlu
bGluZSBjb25zdCBUZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMV9taW51c19UZW5zb3IxPEEsQixU
LFUsRGltLGk+LAogIHByb21vdGU8VCxVPjo6VixEaW0saT4Kb3BlcmF0b3ItKGNvbnN0IFRlbnNv
cjFfRXhwcjxBLFQsRGltLGk+ICZhLCBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmYikK
ewogIHR5cGVkZWYgY29uc3QgVGVuc29yMV9taW51c19UZW5zb3IxPEEsQixULFUsRGltLGk+IFRl
bnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxVPjo6
VixEaW0saT4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9CiMgNyAiLi4vLi4vVGVuc29yMS9UZW5z
b3IxX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV90aW1lc19UZW5zb3IxLmgi
IDEKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQg
RGltLCBjaGFyIGksIGludCBDdXJyZW50X0RpbT4KaW5saW5lIGNvbnN0IHByb21vdGU8VCxVPjo6
ViBUMV90aW1lc19UMShjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiAmYSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxp
PiAmYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8
Q3VycmVudF9EaW0+ICZOKQp7CiAgcmV0dXJuIGEoQ3VycmVudF9EaW0tMSkqYihDdXJyZW50X0Rp
bS0xKSArCiAgICBUMV90aW1lc19UMShhLGIsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFy
IGk+CmlubGluZSBjb25zdCBwcm9tb3RlPFQsVT46OlYgVDFfdGltZXNfVDEoY29uc3QgVGVuc29y
MV9FeHByPEEsVCxEaW0saT4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gJmIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOKQp7CiAgcmV0dXJuIGEoMCkqYigw
KTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERp
bSwgY2hhciBpPgppbmxpbmUgY29uc3QgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKihjb25zdCBU
ZW5zb3IxX0V4cHI8QSxULERpbSxpPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gJmIpCnsKICByZXR1cm4gVDFfdGltZXNf
VDEoYSxiLE51bWJlcjxEaW0+KCkpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNs
YXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4KY2xhc3Mg
VGVuc29yMV90aW1lc19UZW5zb3IxCnsKICBjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbTAsaT4g
aXRlckE7CiAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0xLGo+IGl0ZXJCOwpwdWJsaWM6CiAg
VGVuc29yMV90aW1lc19UZW5zb3IxKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltMCxpPiAmYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0xLGo+ICZi
KToKICAgIGl0ZXJBKGEpLCBpdGVyQihiKSB7fQogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigp
KGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShO
MSkqaXRlckIoTjIpOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQs
IGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4KaW5saW5lIGNvbnN0
IFRlbnNvcjJfRXhwcjxjb25zdCBUZW5zb3IxX3RpbWVzX1RlbnNvcjE8QSxCLFQsVSxEaW0wLERp
bTEsaSxqPiwKICBwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4Kb3BlcmF0b3IqKGNvbnN0
IFRlbnNvcjFfRXhwcjxBLFQsRGltMCxpPiAmYSwgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0x
LGo+ICZiKQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IxX3RpbWVzX1RlbnNvcjE8QSxCLFQsVSxE
aW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29yRXhw
cixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9
CiMgOCAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEv
VGVuc29yMV9vcl9UZW5zb3IxLmgiIDEKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFz
cyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGNoYXIgaj4KY2xhc3MgVGVuc29yMV9vcl9U
ZW5zb3IxCnsKICBjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsKICBjb25zdCBU
ZW5zb3IxX0V4cHI8QixVLERpbSxqPiBpdGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBv
cGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVy
biBpdGVyQShOMSkraXRlckIoTjIpOwogIH0KCiAgVGVuc29yMV9vcl9UZW5zb3IxKGNvbnN0IFRl
bnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBU
ZW5zb3IxX0V4cHI8QixVLERpbSxqPiAmYikKICAgIDogaXRlckEoYSksIGl0ZXJCKGIpIHt9Cn07
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBj
aGFyIGksIGNoYXIgaj4KaW5saW5lIGNvbnN0IFRlbnNvcjJfc3ltbWV0cmljX0V4cHI8Y29uc3Qg
VGVuc29yMV9vcl9UZW5zb3IxPEEsQixULFUsRGltLGksaj4sCiAgcHJvbW90ZTxULFU+OjpWLERp
bSxpLGo+Cm9wZXJhdG9yfHwoY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEsIGNvbnN0
IFRlbnNvcjFfRXhwcjxCLFUsRGltLGo+ICZiKQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IxX29y
X1RlbnNvcjE8QSxCLFQsVSxEaW0saSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX3N5
bW1ldHJpY19FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbSxpLGo+CiAgICAoVGVu
c29yRXhwcihhLGIpKTsKfQojIDkgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV9FeHByLmgiIDIKIyAx
ICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfY2FyYXRfVGVuc29yMS5oIiAxCgoKdGVtcGxhdGU8Y2xh
c3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbSwgY2hhciBpLCBjaGFyIGo+
CmNsYXNzIFRlbnNvcjFfY2FyYXRfVGVuc29yMQp7CiAgY29uc3QgVGVuc29yMV9FeHByPEEsVCxE
aW0saT4gaXRlckE7CiAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saj4gaXRlckI7CnB1Ymxp
YzoKICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBO
MikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoTjEpKml0ZXJCKE4yKTsKICB9CgogIFRlbnNv
cjFfY2FyYXRfVGVuc29yMShjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiAmYSwKICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saj4gJmIpCiAgICA6
IGl0ZXJBKGEpLCBpdGVyQihiKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xh
c3MgVCwgY2xhc3MgVSwgaW50IERpbSwgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5z
b3IyX3N5bW1ldHJpY19FeHByPGNvbnN0IFRlbnNvcjFfY2FyYXRfVGVuc29yMTxBLEIsVCxVLERp
bSxpLGo+LAogIHByb21vdGU8VCxVPjo6VixEaW0saSxqPgpvcGVyYXRvcl4oY29uc3QgVGVuc29y
MV9FeHByPEEsVCxEaW0saT4gJmEsIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGo+ICZiKQp7
CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IxX2NhcmF0X1RlbnNvcjE8QSxCLFQsVSxEaW0saSxqPiBU
ZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX3N5bW1ldHJpY19FeHByPFRlbnNvckV4cHIscHJv
bW90ZTxULFU+OjpWLERpbSxpLGo+CiAgICAoVGVuc29yRXhwcihhLGIpKTsKfQojIDEwICIuLi8u
Li9UZW5zb3IxL1RlbnNvcjFfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX2Fu
ZF9UZW5zb3IxLmgiIDEKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xh
c3MgVSwgaW50IERpbSwgY2hhciBpPgpjbGFzcyBUZW5zb3IxX2FuZF9UZW5zb3IxCnsKICBjb25z
dCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsKICBjb25zdCBUZW5zb3IxX0V4cHI8QixV
LERpbSxpPiBpdGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0
IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOKSppdGVyQihOKTsKICB9CgogIFRl
bnNvcjFfYW5kX1RlbnNvcjEoY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEsCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmYik6CiAgICBp
dGVyQShhKSwgaXRlckIoYikge30KfTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNz
IFQsIGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaT4KaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxj
b25zdCBUZW5zb3IxX2FuZF9UZW5zb3IxPEEsQixULFUsRGltLGk+LAogIHByb21vdGU8VCxVPjo6
VixEaW0saT4Kb3BlcmF0b3ImKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLCBjb25z
dCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMV9h
bmRfVGVuc29yMTxBLEIsVCxVLERpbSxpPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IxX0V4
cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGk+KFRlbnNvckV4cHIoYSxiKSk7Cn0K
IyAxMSAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEv
VGVuc29yMV9wbHVzX2dlbmVyaWMuaCIgMQoKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3Mg
VCwgY2xhc3MgVSwgaW50IERpbSwgY2hhciBpPgpjbGFzcyBUZW5zb3IxX3BsdXNfZ2VuZXJpYwp7
CiAgY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gaXRlckE7CiAgY29uc3QgVSBkOwpwdWJs
aWM6CiAgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29uc3QgaW50IE4pIGNvbnN0CiAgewog
ICAgcmV0dXJuIGl0ZXJBKE4pK2Q7CiAgfQoKICBUZW5zb3IxX3BsdXNfZ2VuZXJpYyhjb25zdCBU
ZW5zb3IxX0V4cHI8QSxULERpbSxpPiAmYSwgY29uc3QgVSAmZDApOgogICAgaXRlckEoYSksIGQo
ZDApIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBj
aGFyIGk+CmlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMV9wbHVzX2dlbmVy
aWM8QSxULFUsRGltLGk+LAogIHByb21vdGU8VCxVPjo6VixEaW0saT4Kb3BlcmF0b3IrKGNvbnN0
IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLCBjb25zdCBVICZkMCkKewogIHR5cGVkZWYgY29u
c3QgVGVuc29yMV9wbHVzX2dlbmVyaWM8QSxULFUsRGltLGk+IFRlbnNvckV4cHI7CiAgcmV0dXJu
IFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxVPjo6VixEaW0saT4oVGVuc29yRXhw
cihhLGQwKSk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERp
bSwgY2hhciBpPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPGNvbnN0IFRlbnNvcjFfcGx1c19n
ZW5lcmljPEEsVCxVLERpbSxpPiwKICBwcm9tb3RlPFQsVT46OlYsRGltLGk+Cm9wZXJhdG9yKyhj
b25zdCBVICZkMCwgY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEpCnsKICB0eXBlZGVm
IGNvbnN0IFRlbnNvcjFfcGx1c19nZW5lcmljPEEsVCxVLERpbSxpPiBUZW5zb3JFeHByOwogIHJl
dHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGk+KFRlbnNv
ckV4cHIoYSxkMCkpOwp9CiMgMTIgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV9FeHByLmgiIDIKIyAx
ICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfbWludXNfZ2VuZXJpYy5oIiAxCgoKCgoKCgp0ZW1wbGF0
ZTxjbGFzcyBBLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGk+CmNsYXNzIFRlbnNv
cjFfbWludXNfZ2VuZXJpYwp7CiAgY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gaXRlckE7
CiAgY29uc3QgVSBkOwpwdWJsaWM6CiAgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29uc3Qg
aW50IE4pIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4pLWQ7CiAgfQoKICBUZW5zb3IxX21p
bnVzX2dlbmVyaWMoY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEsIGNvbnN0IFUgJmQw
KToKICAgIGl0ZXJBKGEpLCBkKGQwKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwg
Y2xhc3MgVSwgaW50IERpbSwgY2hhciBpPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPGNvbnN0
IFRlbnNvcjFfbWludXNfZ2VuZXJpYzxBLFQsVSxEaW0saT4sCiAgcHJvbW90ZTxULFU+OjpWLERp
bSxpPgpvcGVyYXRvci0oY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEsIGNvbnN0IFUg
JmQwKQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IxX21pbnVzX2dlbmVyaWM8QSxULFUsRGltLGk+
IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxV
Pjo6VixEaW0saT4oVGVuc29yRXhwcihhLGQwKSk7Cn0KIyAxMyAiLi4vLi4vVGVuc29yMS9UZW5z
b3IxX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV90aW1lc19nZW5lcmljLmgi
IDEKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGNo
YXIgaT4KY2xhc3MgVGVuc29yMV90aW1lc19nZW5lcmljCnsKICBjb25zdCBUZW5zb3IxX0V4cHI8
QSxULERpbSxpPiBpdGVyQTsKICBjb25zdCBVIGQ7CnB1YmxpYzoKICBwcm9tb3RlPFQsVT46OlYg
b3BlcmF0b3IoKShjb25zdCBpbnQgTikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoTikqZDsK
ICB9CgogIFRlbnNvcjFfdGltZXNfZ2VuZXJpYyhjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxp
PiAmYSwgY29uc3QgVSAmZDApOgogICAgaXRlckEoYSksIGQoZDApIHt9Cn07Cgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGk+CmlubGluZSBjb25zdCBU
ZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMV90aW1lc19nZW5lcmljPEEsVCxVLERpbSxpPiwKICBw
cm9tb3RlPFQsVT46OlYsRGltLGk+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IxX0V4cHI8QSxULERp
bSxpPiAmYSwgY29uc3QgVSAmZDApCnsKICB0eXBlZGVmIGNvbnN0IFRlbnNvcjFfdGltZXNfZ2Vu
ZXJpYzxBLFQsVSxEaW0saT4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNv
ckV4cHIscHJvbW90ZTxULFU+OjpWLERpbSxpPihUZW5zb3JFeHByKGEsZDApKTsKfQoKCgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGk+CmlubGluZSBj
b25zdCBUZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMV90aW1lc19nZW5lcmljPEEsVCxVLERpbSxp
PiwKICBwcm9tb3RlPFQsVT46OlYsRGltLGk+Cm9wZXJhdG9yKihjb25zdCBVICZkMCwgY29uc3Qg
VGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEpCnsKICB0eXBlZGVmIGNvbnN0IFRlbnNvcjFfdGlt
ZXNfZ2VuZXJpYzxBLFQsVSxEaW0saT4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMV9FeHBy
PFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbSxpPihUZW5zb3JFeHByKGEsZDApKTsKfQoj
IDE0ICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9U
ZW5zb3IxX2RpdmlkZV9nZW5lcmljLmgiIDEKCgoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3Mg
VCwgY2xhc3MgVSwgaW50IERpbSwgY2hhciBpPgpjbGFzcyBUZW5zb3IxX2RpdmlkZV9nZW5lcmlj
CnsKICBjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsKICBjb25zdCBVIGQ7CnB1
YmxpYzoKICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTikgY29uc3QKICB7
CiAgICByZXR1cm4gaXRlckEoTikvZDsKICB9CgogIFRlbnNvcjFfZGl2aWRlX2dlbmVyaWMoY29u
c3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4gJmEsIGNvbnN0IFUgJmQwKToKICAgIGl0ZXJBKGEp
LCBkKGQwKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERp
bSwgY2hhciBpPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPGNvbnN0IFRlbnNvcjFfZGl2aWRl
X2dlbmVyaWM8QSxULFUsRGltLGk+LAogIHByb21vdGU8VCxVPjo6VixEaW0saT4Kb3BlcmF0b3Iv
KGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhLCBjb25zdCBVICZkMCkKewogIHR5cGVk
ZWYgY29uc3QgVGVuc29yMV9kaXZpZGVfZ2VuZXJpYzxBLFQsVSxEaW0saT4gVGVuc29yRXhwcjsK
ICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbSxpPihU
ZW5zb3JFeHByKGEsZDApKTsKfQojIDE1ICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfRXhwci5oIiAy
CiMgMSAiLi4vLi4vVGVuc29yMS9nZW5lcmljX21pbnVzX1RlbnNvcjEuaCIgMQoKCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaT4KY2xhc3MgZ2VuZXJp
Y19taW51c19UZW5zb3IxCnsKICBjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiBpdGVyQTsK
ICBjb25zdCBVIGQ7CnB1YmxpYzoKICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBp
bnQgTikgY29uc3QKICB7CiAgICByZXR1cm4gZC1pdGVyQShOKTsKICB9CgogIGdlbmVyaWNfbWlu
dXNfVGVuc29yMShjb25zdCBUZW5zb3IxX0V4cHI8QSxULERpbSxpPiAmYSwgY29uc3QgVSAmZDAp
OgogICAgaXRlckEoYSksIGQoZDApIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBj
bGFzcyBVLCBpbnQgRGltLCBjaGFyIGk+CmlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8Y29uc3Qg
Z2VuZXJpY19taW51c19UZW5zb3IxPEEsVCxVLERpbSxpPiwKICBwcm9tb3RlPFQsVT46OlYsRGlt
LGk+Cm9wZXJhdG9yLShjb25zdCBVICZkMCwgY29uc3QgVGVuc29yMV9FeHByPEEsVCxEaW0saT4g
JmEpCnsKICB0eXBlZGVmIGNvbnN0IGdlbmVyaWNfbWludXNfVGVuc29yMTxBLFQsVSxEaW0saT4g
VGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+
OjpWLERpbSxpPihUZW5zb3JFeHByKGEsZDApKTsKfQojIDE2ICIuLi8uLi9UZW5zb3IxL1RlbnNv
cjFfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9taW51c19UZW5zb3IxLmgiIDEKCgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltLCBjaGFyIGk+CmNsYXNzIG1pbnVzX1RlbnNv
cjEKewogIGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+IGl0ZXJBOwpwdWJsaWM6CiAgVCBv
cGVyYXRvcigpKGNvbnN0IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiAtaXRlckEoTik7CiAg
fQoKICBtaW51c19UZW5zb3IxKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhKTogaXRl
ckEoYSkge30KfTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0sIGNoYXIgaT4K
aW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxjb25zdCBtaW51c19UZW5zb3IxPEEsVCxEaW0saT4s
VCxEaW0saT4Kb3BlcmF0b3ItKGNvbnN0IFRlbnNvcjFfRXhwcjxBLFQsRGltLGk+ICZhKQp7CiAg
ICB0eXBlZGVmIGNvbnN0IG1pbnVzX1RlbnNvcjE8QSxULERpbSxpPiBUZW5zb3JFeHByOwogICAg
cmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLFQsRGltLGk+KFRlbnNvckV4cHIoYSkpOwp9
CiMgMTcgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV9FeHByLmgiIDIKIyAxICIuLi8uLi9UZW5zb3Ix
L2RUZW5zb3IxLmgiIDEKIyAzNSAiLi4vLi4vVGVuc29yMS9kVGVuc29yMS5oIgp0ZW1wbGF0ZTxj
bGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqPgpjbGFzcyBkVGVuc29y
MQp7CiAgY29uc3QgVGVuc29yMTxUKixEaW0wPiAmYTsKICBjb25zdCBUZW5zb3IxPGludCxEaW0x
PiAmZF9pams7CiAgY29uc3QgVGVuc29yMTxkb3VibGUsRGltMT4gJmRfeHl6OwpwdWJsaWM6CiAg
cHJvbW90ZTxULGRvdWJsZT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBO
MikgY29uc3QKICB7CiAgICByZXR1cm4gKCooYS5wdHIoTjEpK2RfaWprKE4yKSktKihhLnB0cihO
MSktZF9pamsoTjIpKSkqZF94eXooTjIpKjAuNTsKICB9CiAgZFRlbnNvcjEoY29uc3QgVGVuc29y
MTxUKixEaW0wPiAmQSwKICAgICAgICAgICBjb25zdCBUZW5zb3IxPGludCxEaW0xPiAmRF9pamss
CiAgICAgICAgICAgY29uc3QgVGVuc29yMTxkb3VibGUsRGltMT4gJkRfeHl6KQogICAgOiBhKEEp
LCBkX2lqayhEX2lqayksIGRfeHl6KERfeHl6KSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50
IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KaW5saW5lIGNvbnN0IFRlbnNvcjJfRXhw
cjxjb25zdCBkVGVuc29yMTxULERpbTAsRGltMSxpLGo+LAogIHByb21vdGU8VCxkb3VibGU+OjpW
LERpbTAsRGltMSxpLGo+CmQoY29uc3QgVGVuc29yMTxUKixEaW0wPiAmYSwgY29uc3QgSW5kZXg8
aSxEaW0wPiBpbmRleDEsCiAgY29uc3QgSW5kZXg8aixEaW0xPiBpbmRleDIsCiAgY29uc3QgVGVu
c29yMTxpbnQsRGltMT4gJmRfaWprLAogIGNvbnN0IFRlbnNvcjE8ZG91YmxlLERpbTE+ICZkX3h5
eikKewogIHR5cGVkZWYgY29uc3QgZFRlbnNvcjE8VCxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHBy
OwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsZG91YmxlPjo6VixE
aW0wLERpbTEsaSxqPgogICAgKFRlbnNvckV4cHIoYSxkX2lqayxkX3h5eikpOwp9CiMgMTggIi4u
Ly4uL1RlbnNvcjEvVGVuc29yMV9FeHByLmgiIDIKIyAxICIuLi8uLi9UZW5zb3IxL2RkVGVuc29y
MS5oIiAxCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEyLCBjaGFyIGks
IGNoYXIgaiwgY2hhciBrPgpjbGFzcyBkZFRlbnNvcjEKewogIGNvbnN0IFRlbnNvcjE8VCosRGlt
MD4gJmE7CiAgY29uc3QgVGVuc29yMTxpbnQsRGltMTI+ICZkX2lqazsKICBjb25zdCBUZW5zb3Ix
PGRvdWJsZSxEaW0xMj4gJmRfeHl6OwpwdWJsaWM6CgoKCiAgcHJvbW90ZTxULGRvdWJsZT46OlYg
b3BlcmF0b3IoKShjb25zdCBpbnQgTjIsIGNvbnN0IGludCBOMywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGludCBOMSkgY29uc3QKICB7CiAgICByZXR1cm4KICAgICAg
TjI9PU4zID8gKCooYS5wdHIoTjEpK2RfaWprKE4yKSktMiphKE4xKSsqKGEucHRyKE4xKS1kX2lq
ayhOMikpKQogICAgICAqZF94eXooTjIpKmRfeHl6KE4yKSA6CiAgICAgICgqKGEucHRyKE4xKStk
X2lqayhOMikrZF9pamsoTjMpKQogICAgICAgLSAqKGEucHRyKE4xKS1kX2lqayhOMikrZF9pamso
TjMpKQogICAgICAgLSAqKGEucHRyKE4xKStkX2lqayhOMiktZF9pamsoTjMpKQogICAgICAgKyAq
KGEucHRyKE4xKS1kX2lqayhOMiktZF9pamsoTjMpKSkqZF94eXooTjIpKmRfeHl6KE4zKSowLjI1
OwogIH0KICBkZFRlbnNvcjEoY29uc3QgVGVuc29yMTxUKixEaW0wPiAmQSwKICAgICAgICAgICAg
Y29uc3QgVGVuc29yMTxpbnQsRGltMTI+ICZEX2lqaywKICAgICAgICAgICAgY29uc3QgVGVuc29y
MTxkb3VibGUsRGltMTI+ICZEX3h5eikKICAgIDogYShBKSwgZF9pamsoRF9pamspLCBkX3h5eihE
X3h5eikge30KfTsKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEyLCBj
aGFyIGksIGNoYXIgaiwgY2hhciBrPgppbmxpbmUgY29uc3QgVGVuc29yM19kZ19FeHByPGNvbnN0
IGRkVGVuc29yMTxULERpbTAsRGltMTIsaSxqLGs+LAogIHByb21vdGU8VCxkb3VibGU+OjpWLERp
bTAsRGltMTIsaSxqLGs+CmRkKGNvbnN0IFRlbnNvcjE8VCosRGltMD4gJmEsIGNvbnN0IEluZGV4
PGssRGltMD4gaW5kZXgwLAogICBjb25zdCBJbmRleDxpLERpbTEyPiBpbmRleDEsIGNvbnN0IElu
ZGV4PGosRGltMTI+IGluZGV4MiwKICAgY29uc3QgVGVuc29yMTxpbnQsRGltMTI+ICZkX2lqaywg
Y29uc3QgVGVuc29yMTxkb3VibGUsRGltMTI+ICZkX3h5eikKewogIHR5cGVkZWYgY29uc3QgZGRU
ZW5zb3IxPFQsRGltMCxEaW0xMixpLGosaz4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yM19k
Z19FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULGRvdWJsZT46OlYsRGltMCxEaW0xMixpLGosaz4K
ICAgIChUZW5zb3JFeHByKGEsZF9pamssZF94eXopKTsKfQojIDE5ICIuLi8uLi9UZW5zb3IxL1Rl
bnNvcjFfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9kX29uZV9zaWRlZF9UZW5zb3IxLmgi
IDEKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50IERpbSwgY2hhciBpLCBpbnQgYXhpcz4KY2xhc3Mg
ZF9vbmVfc2lkZWRfVGVuc29yMQp7CiAgY29uc3QgVGVuc29yMTxUKixEaW0+ICZhOwogIGNvbnN0
IGludCBkaSxkaixkazsKICBjb25zdCBkb3VibGUgZHgsZHksZHo7CnB1YmxpYzoKICBwcm9tb3Rl
PFQsZG91YmxlPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSkgY29uc3QKICB7CiAgICByZXR1
cm4gYXhpcz09MCA/IChhKE4xKS0qKGEucHRyKE4xKS1kaSkpKmR4CiAgICAgIDogKGF4aXM9PTEg
PyAoYShOMSktKihhLnB0cihOMSktZGopKSpkeQogICAgICAgICA6IChhKE4xKS0qKGEucHRyKE4x
KS1kaykpKmR6KTsKICB9CiAgZF9vbmVfc2lkZWRfVGVuc29yMShjb25zdCBUZW5zb3IxPFQqLERp
bT4gJkEsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgRGksIGNvbnN0IGludCBEaiwg
Y29uc3QgaW50IERrLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIER4LCBjb25z
dCBkb3VibGUgRHksIGNvbnN0IGRvdWJsZSBEeik6CiAgICBhKEEpLCBkaShEaSksIGRqKERqKSwg
ZGsoRGspLCBkeChEeCksIGR5KER5KSwgZHooRHopIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBp
bnQgRGltLCBjaGFyIGksIGludCBheGlzPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPGNvbnN0
IGRfb25lX3NpZGVkX1RlbnNvcjE8VCxEaW0saSxheGlzPiwKICBwcm9tb3RlPFQsZG91YmxlPjo6
VixEaW0saT4KZF9vbmVfc2lkZWQoY29uc3QgVGVuc29yMTxUKixEaW0+ICZhLCBjb25zdCBOdW1i
ZXI8YXhpcz4gbjEsCiAgICAgICAgICAgIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDEsCiAgICAg
ICAgICAgIGNvbnN0IGludCAmZGksIGNvbnN0IGludCAmZGosIGNvbnN0IGludCAmZGssCiAgICAg
ICAgICAgIGNvbnN0IGRvdWJsZSAmZHgsIGNvbnN0IGRvdWJsZSAmZHksIGNvbnN0IGRvdWJsZSAm
ZHopCnsKICB0eXBlZGVmIGNvbnN0IGRfb25lX3NpZGVkX1RlbnNvcjE8VCxEaW0saSxheGlzPiBU
ZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsZG91
YmxlPjo6VixEaW0saT4KICAgIChUZW5zb3JFeHByKGEsZGksZGosZGssZHgsZHksZHopKTsKfQoj
IDIwICIuLi8uLi9UZW5zb3IxL1RlbnNvcjFfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMS9k
aWZmdXNpb25fVGVuc29yMS5oIiAxCgoKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBEaW0sIGNoYXIg
aT4KY2xhc3MgZGlmZnVzaW9uX1RlbnNvcjEKewogIGNvbnN0IFRlbnNvcjE8VCosRGltPiAmYTsK
ICBjb25zdCBpbnQgZGksZGosZGs7CiAgY29uc3QgZG91YmxlIGR4OwpwdWJsaWM6CiAgcHJvbW90
ZTxULGRvdWJsZT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEpIGNvbnN0CiAgewogICAgcmV0
dXJuCiAgICAgICgoKihhLnB0cihOMSkrZGkpIC0gMiphKE4xKSArICooYS5wdHIoTjEpLWRpKSkK
ICAgICAgICsgKCooYS5wdHIoTjEpK2RqKSAtIDIqYShOMSkgKyAqKGEucHRyKE4xKS1kaikpCiAg
ICAgICArICgqKGEucHRyKE4xKStkaykgLSAyKmEoTjEpICsgKihhLnB0cihOMSktZGspKQogICAg
ICAgKyAoKCooYS5wdHIoTjEpK2RpK2RqKSArICooYS5wdHIoTjEpK2RpLWRqKQogICAgICAgICAg
ICsgKihhLnB0cihOMSktZGkrZGopICsgKihhLnB0cihOMSktZGktZGopCiAgICAgICAgICAgLSA0
KmEoTjEpKQogICAgICAgICAgKyAoKihhLnB0cihOMSkrZGkrZGspICsgKihhLnB0cihOMSkrZGkt
ZGspCiAgICAgICAgICAgICArICooYS5wdHIoTjEpLWRpK2RrKSArICooYS5wdHIoTjEpLWRpLWRr
KQogICAgICAgICAgICAgLSA0KmEoTjEpKQogICAgICAgICAgKyAoKihhLnB0cihOMSkrZGorZGsp
ICsgKihhLnB0cihOMSkrZGotZGspCiAgICAgICAgICAgICArICooYS5wdHIoTjEpLWRqK2RrKSAr
ICooYS5wdHIoTjEpLWRqLWRrKQogICAgICAgICAgICAgLSA0KmEoTjEpKSkvKHN0ZDo6c3FydCgy
LjApKSkqZHgqZHg7CiAgfQogIGRpZmZ1c2lvbl9UZW5zb3IxKGNvbnN0IFRlbnNvcjE8VCosRGlt
PiAmQSwgY29uc3QgaW50IERpLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBEaiwgY29u
c3QgaW50IERrLCBjb25zdCBkb3VibGUgRHgpOgogICAgYShBKSwgZGkoRGkpLCBkaihEaiksIGRr
KERrKSwgZHgoRHgpIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgRGltLCBjaGFyIGk+Cmlu
bGluZSBjb25zdCBUZW5zb3IxX0V4cHI8Y29uc3QgZGlmZnVzaW9uX1RlbnNvcjE8VCxEaW0saT4s
CiAgcHJvbW90ZTxULGRvdWJsZT46OlYsRGltLGk+CmRpZmZ1c2lvbihjb25zdCBUZW5zb3IxPFQq
LERpbT4gJmEsIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDEsCiAgICAgICAgICBjb25zdCBpbnQg
JmRpLCBjb25zdCBpbnQgJmRqLCBjb25zdCBpbnQgJmRrLAogICAgICAgICAgY29uc3QgZG91Ymxl
ICZkeCkKewogIHR5cGVkZWYgY29uc3QgZGlmZnVzaW9uX1RlbnNvcjE8VCxEaW0saT4gVGVuc29y
X0V4cHI7CiAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JfRXhwcixwcm9tb3RlPFQsZG91Ymxl
Pjo6VixEaW0saT4KICAgIChUZW5zb3JfRXhwcihhLGRpLGRqLGRrLGR4KSk7Cn0KIyAyMSAiLi4v
Li4vVGVuc29yMS9UZW5zb3IxX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjEvaW50ZXJwb2xh
dGVfVGVuc29yMS5oIiAxCgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBEaW0sIGNoYXIgaT4K
Y2xhc3MgaW50ZXJwb2xhdGVfVGVuc29yMQp7CiAgY29uc3QgVGVuc29yMTxUKixEaW0+ICZhOwog
IGNvbnN0IGludCBkaSxkaixkayxpMCxqMCxrMDsKICBjb25zdCBkb3VibGUgKmRpc3RhbmNlLCAq
Y29uanVnYXRlOwpwdWJsaWM6CiAgcHJvbW90ZTxULGRvdWJsZT46OlYgb3BlcmF0b3IoKShjb25z
dCBpbnQgTjEpIGNvbnN0CiAgewogIHJldHVybgogICAgY29uanVnYXRlWzBdKmNvbmp1Z2F0ZVsx
XSpjb25qdWdhdGVbMl0KICAgICogKCooYS5wdHIoTjEpICsgZGkqaTAgKyBkaipqMCArIGRrKmsw
KSkKICAgICsgZGlzdGFuY2VbMF0qY29uanVnYXRlWzFdKmNvbmp1Z2F0ZVsyXQogICAgKiAoKihh
LnB0cihOMSkgKyBkaSooaTArMSkgKyBkaiooajApICsgZGsqKGswKSkpCiAgICArIGNvbmp1Z2F0
ZVswXSpkaXN0YW5jZVsxXSpjb25qdWdhdGVbMl0KICAgICogKCooYS5wdHIoTjEpICsgZGkqKGkw
KSArIGRqKihqMCsxKSArIGRrKihrMCkpKQogICAgKyBkaXN0YW5jZVswXSpkaXN0YW5jZVsxXSpj
b25qdWdhdGVbMl0KICAgICogKCooYS5wdHIoTjEpICsgZGkqKGkwKzEpICsgZGoqKGowKzEpICsg
ZGsqKGswKSkpCiAgICArIGNvbmp1Z2F0ZVswXSpjb25qdWdhdGVbMV0qZGlzdGFuY2VbMl0KICAg
ICogKCooYS5wdHIoTjEpICsgZGkqKGkwKSArIGRqKihqMCkgKyBkayooazArMSkpKQogICAgKyBk
aXN0YW5jZVswXSpjb25qdWdhdGVbMV0qZGlzdGFuY2VbMl0KICAgICogKCooYS5wdHIoTjEpICsg
ZGkqKGkwKzEpICsgZGoqKGowKSArIGRrKihrMCsxKSkpCiAgICArIGNvbmp1Z2F0ZVswXSpkaXN0
YW5jZVsxXSpkaXN0YW5jZVsyXQogICAgKiAoKihhLnB0cihOMSkgKyBkaSooaTApICsgZGoqKGow
KzEpICsgZGsqKGswKzEpKSkKICAgICsgZGlzdGFuY2VbMF0qZGlzdGFuY2VbMV0qZGlzdGFuY2Vb
Ml0KICAgICogKCooYS5wdHIoTjEpICsgZGkqKGkwKzEpICsgZGoqKGowKzEpICsgZGsqKGswKzEp
KSk7CiAgfQogIGludGVycG9sYXRlX1RlbnNvcjEoY29uc3QgVGVuc29yMTxUKixEaW0+ICZBLCBj
b25zdCBpbnQgRGksCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgRGosIGNvbnN0IGlu
dCBEaywgY29uc3QgaW50IEkwLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IEowLCBj
b25zdCBpbnQgSzAsIGNvbnN0IGRvdWJsZSBEaXN0YW5jZVszXSwKICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGRvdWJsZSBDb25qdWdhdGVbM10pOgogICAgYShBKSwgZGkoRGkpLCBkaihEaiks
IGRrKERrKSwgaTAoSTApLCBqMChKMCksIGswKEswKSwKICAgIGRpc3RhbmNlKERpc3RhbmNlKSwg
Y29uanVnYXRlKENvbmp1Z2F0ZSkge30KfTsKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBEaW0sIGNo
YXIgaT4KaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxjb25zdCBpbnRlcnBvbGF0ZV9UZW5zb3Ix
PFQsRGltLGk+LAogIHByb21vdGU8VCxkb3VibGU+OjpWLERpbSxpPgppbnRlcnBvbGF0ZShjb25z
dCBUZW5zb3IxPFQqLERpbT4gJmEsIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDEsCiAgICAgICAg
ICAgIGNvbnN0IGludCAmZGksIGNvbnN0IGludCAmZGosIGNvbnN0IGludCAmZGssCiAgICAgICAg
ICAgIGNvbnN0IGludCAmaTAsIGNvbnN0IGludCAmajAsIGNvbnN0IGludCAmazAsCiAgICAgICAg
ICAgIGNvbnN0IGRvdWJsZSBkaXN0YW5jZVszXSwgY29uc3QgZG91YmxlIGNvbmp1Z2F0ZVszXSkK
ewogIHR5cGVkZWYgY29uc3QgaW50ZXJwb2xhdGVfVGVuc29yMTxULERpbSxpPiBUZW5zb3JfRXhw
cjsKICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvcl9FeHByLHByb21vdGU8VCxkb3VibGU+OjpW
LERpbSxpPgogICAgKFRlbnNvcl9FeHByKGEsZGksZGosZGssaTAsajAsazAsZGlzdGFuY2UsY29u
anVnYXRlKSk7Cn0KIyAyMiAiLi4vLi4vVGVuc29yMS9UZW5zb3IxX0V4cHIuaCIgMgoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbSwgY2hhciBpPgpjbGFzcyBUZW5zb3IxX0V4cHIK
ewogIEEgaXRlcjsKcHVibGljOgogIFRlbnNvcjFfRXhwcihBICZhKTogaXRlcihhKSB7fQogIFQg
b3BlcmF0b3IoKShjb25zdCBpbnQgTikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlcihOKTsKICB9
Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgVGVuc29yX0RpbSwgaW50IERpbSwg
Y2hhciBpPgpjbGFzcyBUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+
CnsKICBUZW5zb3IxPEEsVGVuc29yX0RpbT4gJml0ZXI7CnB1YmxpYzoKICBUZW5zb3IxX0V4cHIo
VGVuc29yMTxBLFRlbnNvcl9EaW0+ICZhKTogaXRlcihhKSB7fQoKICBUICYgb3BlcmF0b3IoKShj
b25zdCBpbnQgTikKICB7CiAgICByZXR1cm4gaXRlcihOKTsKICB9CiAgVCBvcGVyYXRvcigpKGNv
bnN0IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyKE4pOwogIH0KCgoKCgogIHRlbXBs
YXRlPGNsYXNzIEIsIGNsYXNzIFU+CiAgaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3Ix
PEEsVGVuc29yX0RpbT4sVCxEaW0saT4gJgogIG9wZXJhdG9yPShjb25zdCBUZW5zb3IxX0V4cHI8
QixVLERpbSxpPiAmcmVzdWx0KTsKCiAgY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5z
b3JfRGltPixULERpbSxpPiAmCiAgb3BlcmF0b3I9KGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3Ix
PEEsVGVuc29yX0RpbT4sVCxEaW0saT4gJnJlc3VsdCk7CgogIHRlbXBsYXRlPGNsYXNzIEIsIGNs
YXNzIFU+IGlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQs
RGltLGk+ICYKICBvcGVyYXRvcis9KGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGk+ICZyZXN1
bHQpOwoKICB0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPiBpbmxpbmUgY29uc3QgVGVuc29yMV9F
eHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPiAmCiAgb3BlcmF0b3ItPShjb25zdCBU
ZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmcmVzdWx0KTsKCgoKCgoKICB0ZW1wbGF0ZTxjbGFzcyBC
PiBpbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxp
PiAmCiAgb3BlcmF0b3I9KGNvbnN0IEIgJmQpOwogIHRlbXBsYXRlPGNsYXNzIEI+IGlubGluZSBj
b25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+ICYKICBvcGVy
YXRvcis9KGNvbnN0IEIgJmQpOwogIHRlbXBsYXRlPGNsYXNzIEI+IGlubGluZSBjb25zdCBUZW5z
b3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+ICYKICBvcGVyYXRvci09KGNv
bnN0IEIgJmQpOwogIHRlbXBsYXRlPGNsYXNzIEI+IGlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8
VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+ICYKICBvcGVyYXRvcio9KGNvbnN0IEIgJmQp
OwogIHRlbXBsYXRlPGNsYXNzIEI+IGlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMTxB
LFRlbnNvcl9EaW0+LFQsRGltLGk+ICYKICBvcGVyYXRvci89KGNvbnN0IEIgJmQpOwp9OwoKCgoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTEsIGNoYXIgaSwgaW50IE4+CmNsYXNz
IFRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+CnsKICBB
ICZpdGVyOwpwdWJsaWM6CiAgVGVuc29yMV9FeHByKEEgJmEpOiBpdGVyKGEpIHt9CiAgVCAmIG9w
ZXJhdG9yKCkoY29uc3QgaW50IE4xKQogIHsKICAgIHJldHVybiBpdGVyKE4sTjEpOwogIH0KICBU
IG9wZXJhdG9yKCkoY29uc3QgaW50IE4xKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyKE4sTjEp
OwogIH0KCgoKCgogIHRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIFU+CiAgY29uc3QgVGVuc29yMV9F
eHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4gJgogIG9wZXJhdG9yPShj
b25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTEsaT4gJnJlc3VsdCk7CgogIGNvbnN0IFRlbnNvcjFf
RXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+ICYKICBvcGVyYXRvcj0o
Y29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4g
JnJlc3VsdCk7CgogIHRlbXBsYXRlPGNsYXNzIEI+IGlubGluZQogIGNvbnN0IFRlbnNvcjFfRXhw
cjxUZW5zb3IyX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+ICYKICBvcGVyYXRvcj0oY29u
c3QgQiAmcmVzdWx0KTsKCiAgdGVtcGxhdGU8Y2xhc3MgQj4gaW5saW5lCiAgY29uc3QgVGVuc29y
MV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4gJgogIG9wZXJhdG9y
Kz0oY29uc3QgQiAmcmVzdWx0KTsKCiAgdGVtcGxhdGU8Y2xhc3MgQj4gaW5saW5lCiAgY29uc3Qg
VGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4gJgogIG9w
ZXJhdG9yLT0oY29uc3QgQiAmcmVzdWx0KTsKCiAgdGVtcGxhdGU8Y2xhc3MgQj4gaW5saW5lCiAg
Y29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4g
JgogIG9wZXJhdG9yKj0oY29uc3QgQiAmcmVzdWx0KTsKCiAgdGVtcGxhdGU8Y2xhc3MgQj4gaW5s
aW5lCiAgY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERp
bTEsaT4gJgogIG9wZXJhdG9yLz0oY29uc3QgQiAmcmVzdWx0KTsKfTsKCgoKCgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4KY2xhc3MgVGVuc29yMV9F
eHByPFRlbnNvcjJfbnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT4KewogIEEgJml0ZXI7CnB1
YmxpYzoKICBUZW5zb3IxX0V4cHIoQSAmYSk6IGl0ZXIoYSkge30KICBUICYgb3BlcmF0b3IoKShj
b25zdCBpbnQgTjEpCiAgewogICAgcmV0dXJuIGl0ZXIoTjEsTik7CiAgfQogIFQgb3BlcmF0b3Io
KShjb25zdCBpbnQgTjEpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXIoTjEsTik7CiAgfQoKCgoK
CiAgdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4KICBjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29y
Ml9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmCiAgb3BlcmF0b3I9KGNvbnN0IFRlbnNv
cjFfRXhwcjxCLFUsRGltMSxpPiAmcmVzdWx0KTsKCiAgY29uc3QgVGVuc29yMV9FeHByPFRlbnNv
cjJfbnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT4gJgogIG9wZXJhdG9yPShjb25zdCBUZW5z
b3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmcmVzdWx0KTsK
CiAgdGVtcGxhdGU8Y2xhc3MgQj4gaW5saW5lCiAgY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJf
bnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT4gJgogIG9wZXJhdG9yPShjb25zdCBCICZyZXN1
bHQpOwoKICB0ZW1wbGF0ZTxjbGFzcyBCPiBpbmxpbmUKICBjb25zdCBUZW5zb3IxX0V4cHI8VGVu
c29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmCiAgb3BlcmF0b3IrPShjb25zdCBC
ICZyZXN1bHQpOwoKICB0ZW1wbGF0ZTxjbGFzcyBCPiBpbmxpbmUKICBjb25zdCBUZW5zb3IxX0V4
cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmCiAgb3BlcmF0b3ItPShj
b25zdCBCICZyZXN1bHQpOwoKICB0ZW1wbGF0ZTxjbGFzcyBCPiBpbmxpbmUKICBjb25zdCBUZW5z
b3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmCiAgb3BlcmF0
b3IqPShjb25zdCBCICZyZXN1bHQpOwoKICB0ZW1wbGF0ZTxjbGFzcyBCPiBpbmxpbmUKICBjb25z
dCBUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxpPiAmCiAg
b3BlcmF0b3IvPShjb25zdCBCICZyZXN1bHQpOwp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xh
c3MgVCwgaW50IERpbSwgY2hhciBpLCBpbnQgTjEsIGludCBOMj4KY2xhc3MgVGVuc29yMV9FeHBy
PFRlbnNvcjNfZGdfbnVtYmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+CnsKICBBICZpdGVy
OwpwdWJsaWM6CiAgVGVuc29yMV9FeHByKEEgJmEpOml0ZXIoYSkge30KICBUICYgb3BlcmF0b3Io
KShjb25zdCBpbnQgTikKICB7CiAgICByZXR1cm4gaXRlcihOLE4xLE4yKTsKICB9CiAgVCBvcGVy
YXRvcigpKGNvbnN0IGludCBOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyKE4sTjEsTjIpOwog
IH0KCgoKCgogIHRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIFU+CiAgY29uc3QgVGVuc29yMV9FeHBy
PFRlbnNvcjNfZGdfbnVtYmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+ICYKICBvcGVyYXRv
cj0oY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gJnJlc3VsdCk7CgogIGNvbnN0IFRlbnNv
cjFfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMTI8QSxULE4xLE4yPixULERpbSxpPiAmCiAg
b3BlcmF0b3I9KGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMTI8QSxU
LE4xLE4yPixULERpbSxpPgogICAgICAgICAgICAmcmVzdWx0KTsKfTsKCgoKCnRlbXBsYXRlPGNs
YXNzIEEsIGNsYXNzIFQsIGludCBEaW0sIGNoYXIgaSwgaW50IE4xLCBpbnQgTjI+CmNsYXNzIFRl
bnNvcjFfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPgp7
CiAgQSAmaXRlcjsKcHVibGljOgogIFRlbnNvcjFfRXhwcihBICZhKTppdGVyKGEpIHt9CiAgVCAm
IG9wZXJhdG9yKCkoY29uc3QgaW50IE4pCiAgewogICAgcmV0dXJuIGl0ZXIoTjEsTjIsTik7CiAg
fQogIFQgb3BlcmF0b3IoKShjb25zdCBpbnQgTikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlcihO
MSxOMixOKTsKICB9CgoKCgoKICB0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPgogIGNvbnN0IFRl
bnNvcjFfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPiAm
CiAgb3BlcmF0b3I9KGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGk+ICZyZXN1bHQpOwoKICBj
b25zdCBUZW5zb3IxX0V4cHI8VGVuc29yM19kZ19udW1iZXJfcmhzXzAxPEEsVCxOMSxOMj4sVCxE
aW0saT4gJgogIG9wZXJhdG9yPShjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yM19kZ19udW1iZXJf
cmhzXzAxPEEsVCxOMSxOMj4sVCxEaW0saT4KICAgICAgICAgICAgJnJlc3VsdCk7Cn07CgojIDEg
Ii4uLy4uL1RlbnNvcjEvVGVuc29yMV9FeHByX2VxdWFscy5oIiAxCgoKCgoKCgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGludCBDdXJyZW50X0Rp
bT4KaW5saW5lIHZvaWQgVDFfZXF1YWxzX1QxKEEgJml0ZXIsIGNvbnN0IFRlbnNvcjFfRXhwcjxC
LFUsRGltLGk+IHJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxD
dXJyZW50X0RpbT4gJk4pCnsKICBpdGVyKEN1cnJlbnRfRGltLTEpPXJlc3VsdChDdXJyZW50X0Rp
bS0xKTsKICBUMV9lcXVhbHNfVDEoaXRlcixyZXN1bHQsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkp
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGk+
CmlubGluZSB2b2lkIFQxX2VxdWFsc19UMShBICZpdGVyLCBjb25zdCBUZW5zb3IxX0V4cHI8QixV
LERpbSxpPiByZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4g
Jk4pCnsKICBpdGVyKDApPXJlc3VsdCgwKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwg
aW50IFRlbnNvcl9EaW0sIGludCBEaW0sIGNoYXIgaT4KdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3Mg
VT4KaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVCxEaW0s
aT4gJgpUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+OjpvcGVyYXRv
cj0oY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gJnJlc3VsdCkKewogIFQxX2VxdWFsc19U
MShpdGVyLHJlc3VsdCxOdW1iZXI8RGltPigpKTsKICByZXR1cm4gKnRoaXM7Cn0KCgoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IFRlbnNvcl9EaW0sIGludCBEaW0sIGNoYXIgaT4KaW5s
aW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVCxEaW0saT4gJgpU
ZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+OjpvcGVyYXRvcj0oY29u
c3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPiAmcmVzdWx0KQp7
CiAgcmV0dXJuIG9wZXJhdG9yPTxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVD4ocmVzdWx0KTsKfQoK
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGlu
dCBDdXJyZW50X0RpbT4KaW5saW5lIHZvaWQgVDFfcGx1c19lcXVhbHNfVDEoQSAmaXRlciwgY29u
c3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGltPiAmTikKewogIGl0ZXIoQ3VycmVudF9EaW0tMSkr
PXJlc3VsdChDdXJyZW50X0RpbS0xKTsKICBUMV9wbHVzX2VxdWFsc19UMShpdGVyLHJlc3VsdCxO
dW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNs
YXNzIFUsIGludCBEaW0sIGNoYXIgaT4KaW5saW5lIHZvaWQgVDFfcGx1c19lcXVhbHNfVDEoQSAm
aXRlciwgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gcmVzdWx0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOKQp7CiAgaXRlcigwKSs9cmVzdWx0KDApOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgVGVuc29yX0RpbSwgaW50IERpbSwgY2hh
ciBpPgp0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHBy
PFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPiAmClRlbnNvcjFfRXhwcjxUZW5zb3IxPEEs
VGVuc29yX0RpbT4sVCxEaW0saT46Om9wZXJhdG9yKz0oY29uc3QgVGVuc29yMV9FeHByPEIsVSxE
aW0saT4gJnJlc3VsdCkKewogIFQxX3BsdXNfZXF1YWxzX1QxKGl0ZXIscmVzdWx0LE51bWJlcjxE
aW0+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBj
bGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGludCBDdXJyZW50X0RpbT4KaW5saW5lIHZvaWQgVDFf
bWludXNfZXF1YWxzX1QxKEEgJml0ZXIsIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGk+IHJl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4g
Jk4pCnsKICBpdGVyKEN1cnJlbnRfRGltLTEpLT1yZXN1bHQoQ3VycmVudF9EaW0tMSk7CiAgVDFf
bWludXNfZXF1YWxzX1QxKGl0ZXIscmVzdWx0LE51bWJlcjxDdXJyZW50X0RpbS0xPigpKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVSwgaW50IERpbSwgY2hhciBpPgppbmxp
bmUgdm9pZCBUMV9taW51c19lcXVhbHNfVDEoQSAmaXRlciwgY29uc3QgVGVuc29yMV9FeHByPEIs
VSxEaW0saT4gcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+
ICZOKQp7CiAgaXRlcigwKS09cmVzdWx0KDApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBU
LCBpbnQgVGVuc29yX0RpbSwgaW50IERpbSwgY2hhciBpPgp0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFz
cyBVPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERp
bSxpPiAmClRlbnNvcjFfRXhwcjxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVCxEaW0saT46Om9wZXJh
dG9yLT0oY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0saT4gJnJlc3VsdCkKewogIFQxX21pbnVz
X2VxdWFsc19UMShpdGVyLHJlc3VsdCxOdW1iZXI8RGltPigpKTsKICByZXR1cm4gKnRoaXM7Cn0K
IyAxMDAgIi4uLy4uL1RlbnNvcjEvVGVuc29yMV9FeHByX2VxdWFscy5oIgp0ZW1wbGF0ZTxjbGFz
cyBBLCBjbGFzcyBVLCBpbnQgQ3VycmVudF9EaW0+CmlubGluZSB2b2lkIFQxX2VxdWFsc19nZW5l
cmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4pCnsKICBpdGVyKEN1cnJlbnRfRGltLTEpPXU7CiAg
VDFfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxDdXJyZW50X0RpbS0xPigpKTsKfQoKdGVt
cGxhdGU8Y2xhc3MgQSwgY2xhc3MgVT4KaW5saW5lIHZvaWQgVDFfZXF1YWxzX2dlbmVyaWMoQSAm
aXRlciwgY29uc3QgVSAmdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVt
YmVyPDE+ICZOKQp7CiAgaXRlcigwKT11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBp
bnQgVGVuc29yX0RpbSwgaW50IERpbSwgY2hhciBpPgp0ZW1wbGF0ZTxjbGFzcyBVPgppbmxpbmUg
Y29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPiAmClRlbnNv
cjFfRXhwcjxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVCxEaW0saT46Om9wZXJhdG9yPShjb25zdCBV
ICZ1KQp7CiAgVDFfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxEaW0+KCkpOwogIHJldHVy
biAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgQ3VycmVudF9EaW0+
CmlubGluZSB2b2lkIFQxX3BsdXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3QgVSAmdSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0+ICZOKQp7CiAgaXRlcihDdXJyZW50X0RpbS0xKSs9dTsKICBUMV9wbHVzX2VxdWFsc19nZW5l
cmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIFU+CmlubGluZSB2b2lkIFQxX3BsdXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29u
c3QgVSAmdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8
MT4gJk4pCnsKICBpdGVyKDApKz11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQg
VGVuc29yX0RpbSwgaW50IERpbSwgY2hhciBpPgp0ZW1wbGF0ZTxjbGFzcyBVPgppbmxpbmUgY29u
c3QgVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPiAmClRlbnNvcjFf
RXhwcjxUZW5zb3IxPEEsVGVuc29yX0RpbT4sVCxEaW0saT46Om9wZXJhdG9yKz0oY29uc3QgVSAm
dSkKewogIFQxX3BsdXNfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxEaW0+KCkpOwogIHJl
dHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgQ3VycmVudF9E
aW0+CmlubGluZSB2b2lkIFQxX21pbnVzX2VxdWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUg
JnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJy
ZW50X0RpbT4gJk4pCnsKICBpdGVyKEN1cnJlbnRfRGltLTEpLT11OwogIFQxX21pbnVzX2VxdWFs
c19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNs
YXNzIEEsIGNsYXNzIFU+CmlubGluZSB2b2lkIFQxX21pbnVzX2VxdWFsc19nZW5lcmljKEEgJml0
ZXIsIGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE51bWJlcjwxPiAmTikKewogIGl0ZXIoMCktPXU7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IFQsIGludCBUZW5zb3JfRGltLCBpbnQgRGltLCBjaGFyIGk+CnRlbXBsYXRlPGNsYXNzIFU+Cmlu
bGluZSBjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQsRGltLGk+ICYK
VGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPjo6b3BlcmF0b3ItPShj
b25zdCBVICZ1KQp7CiAgVDFfbWludXNfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxEaW0+
KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQg
Q3VycmVudF9EaW0+CmlubGluZSB2b2lkIFQxX3RpbWVzX2VxdWFsc19nZW5lcmljKEEgJml0ZXIs
IGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51
bWJlcjxDdXJyZW50X0RpbT4gJk4pCnsKICBpdGVyKEN1cnJlbnRfRGltLTEpKj11OwogIFQxX3Rp
bWVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRl
bXBsYXRlPGNsYXNzIEEsIGNsYXNzIFU+CmlubGluZSB2b2lkIFQxX3RpbWVzX2VxdWFsc19nZW5l
cmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE51bWJlcjwxPiAmTikKewogIGl0ZXIoMCkqPXU7Cn0KCnRlbXBsYXRlPGNsYXNz
IEEsIGNsYXNzIFQsIGludCBUZW5zb3JfRGltLCBpbnQgRGltLCBjaGFyIGk+CnRlbXBsYXRlPGNs
YXNzIFU+CmlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+LFQs
RGltLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjE8QSxUZW5zb3JfRGltPixULERpbSxpPjo6b3Bl
cmF0b3IqPShjb25zdCBVICZ1KQp7CiAgVDFfdGltZXNfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51
bWJlcjxEaW0+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFz
cyBVLCBpbnQgQ3VycmVudF9EaW0+CmlubGluZSB2b2lkIFQxX2RpdmlkZV9lcXVhbHNfZ2VuZXJp
YyhBICZpdGVyLCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGltPiAmTikKewogIGl0ZXIoQ3VycmVudF9EaW0tMSkv
PXU7CiAgVDFfZGl2aWRlX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9EaW0t
MT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFU+CmlubGluZSB2b2lkIFQxX2Rpdmlk
ZV9lcXVhbHNfZ2VuZXJpYyhBICZpdGVyLCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOKQp7CiAgaXRlcigwKS89dTsKfQoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IFRlbnNvcl9EaW0sIGludCBEaW0sIGNoYXIg
aT4KdGVtcGxhdGU8Y2xhc3MgVT4KaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IxPEEs
VGVuc29yX0RpbT4sVCxEaW0saT4gJgpUZW5zb3IxX0V4cHI8VGVuc29yMTxBLFRlbnNvcl9EaW0+
LFQsRGltLGk+OjpvcGVyYXRvci89KGNvbnN0IFUgJnUpCnsKICBUMV9kaXZpZGVfZXF1YWxzX2dl
bmVyaWMoaXRlcix1LE51bWJlcjxEaW0+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgoKCnRlbXBs
YXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBEaW0xLCBjaGFyIGksIGludCBOLCBp
bnQgQ3VycmVudF9EaW0+CmlubGluZSB2b2lkIFQycmhzMF9lcXVhbHNfVDEoQSAmaXRlciwgY29u
c3QgVGVuc29yMV9FeHByPEIsVSxEaW0xLGk+ICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTnVtYmVyPE4+ICZOMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOMikKewogIGl0ZXIoTixDdXJyZW50X0RpbS0x
KT1yZXN1bHQoQ3VycmVudF9EaW0tMSk7CiAgVDJyaHMwX2VxdWFsc19UMShpdGVyLHJlc3VsdCxO
MSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIs
IGNsYXNzIFUsIGludCBEaW0xLCBjaGFyIGksIGludCBOPgppbmxpbmUgdm9pZCBUMnJoczBfZXF1
YWxzX1QxKEEgJml0ZXIsIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMSxpPiAmcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOMikKewogIGl0ZXIoTiwwKT1y
ZXN1bHQoMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0xLCBjaGFyIGks
IGludCBOPgp0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVuc29yMV9F
eHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT4gJgpUZW5zb3IxX0V4cHI8
VGVuc29yMl9udW1iZXJfcmhzXzA8QSxULE4+LFQsRGltMSxpPjo6b3BlcmF0b3I9KGNvbnN0IFRl
bnNvcjFfRXhwcjxCLFUsRGltMSxpPiAmcmVzdWx0KQp7CiAgVDJyaHMwX2VxdWFsc19UMShpdGVy
LHJlc3VsdCxOdW1iZXI8Tj4oKSxOdW1iZXI8RGltMT4oKSk7CiAgcmV0dXJuICp0aGlzOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4gaW5saW5l
CmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+
ICYKVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEsaT46Om9w
ZXJhdG9yPShjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzA8QSxULE4+LFQs
RGltMSxpPiAmcmVzdWx0KQp7CiAgcmV0dXJuIG9wZXJhdG9yPTxUZW5zb3IyX251bWJlcl9yaHNf
MDxBLFQsTj4sVD4ocmVzdWx0KTsKfQoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVSwgaW50
IE4sIGludCBDdXJyZW50X0RpbT4KaW5saW5lIHZvaWQgVDJyaHMwX2VxdWFsc19nZW5lcmljKEEg
Jml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOMikKewogIGl0ZXIo
TixDdXJyZW50X0RpbS0xKT11OwogIFQycmhzMF9lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTjEsTnVt
YmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQg
Tj4KaW5saW5lIHZvaWQgVDJyaHMwX2VxdWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUs
IGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRlcihOLDApPXU7Cn0KCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIFQsIGludCBEaW0xLCBjaGFyIGksIGludCBOPgp0ZW1wbGF0ZTxjbGFzcyBVPiBpbmxp
bmUKY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTEs
aT4gJgpUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzA8QSxULE4+LFQsRGltMSxpPjo6
b3BlcmF0b3I9KGNvbnN0IFUgJnUpCnsKICBUMnJoczBfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51
bWJlcjxOPigpLE51bWJlcjxEaW0xPigpKTsKICByZXR1cm4gKnRoaXM7Cn0KCgoKdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgVSwgaW50IE4sIGludCBDdXJyZW50X0RpbT4KaW5saW5lIHZvaWQgVDJy
aHMwX3BsdXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3QgVSAmdSwgY29uc3QgTnVtYmVy
PE4+ICZOMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxD
dXJyZW50X0RpbT4gJk4yKQp7CiAgaXRlcihOLEN1cnJlbnRfRGltLTEpKz11OwogIFQycmhzMF9w
bHVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOMSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0K
CnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUsIGludCBOPgppbmxpbmUgdm9pZCBUMnJoczBfcGx1
c19lcXVhbHNfZ2VuZXJpYyhBICZpdGVyLCBjb25zdCBVICZ1LCBjb25zdCBOdW1iZXI8Tj4gJk4x
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOMikK
ewogIGl0ZXIoTiwwKSs9dTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTEs
IGNoYXIgaSwgaW50IE4+CnRlbXBsYXRlPGNsYXNzIFU+IGlubGluZQpjb25zdCBUZW5zb3IxX0V4
cHI8VGVuc29yMl9udW1iZXJfcmhzXzA8QSxULE4+LFQsRGltMSxpPiAmClRlbnNvcjFfRXhwcjxU
ZW5zb3IyX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+OjpvcGVyYXRvcis9KGNvbnN0IFUg
JnUpCnsKICBUMnJoczBfcGx1c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPE4+KCksTnVt
YmVyPERpbTE+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFz
cyBVLCBpbnQgTiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczBfbWludXNfZXF1
YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3QgVSAmdSwgY29uc3QgTnVtYmVyPE4+ICZOMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4g
Jk4yKQp7CiAgaXRlcihOLEN1cnJlbnRfRGltLTEpLT11OwogIFQycmhzMF9taW51c19lcXVhbHNf
Z2VuZXJpYyhpdGVyLHUsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBVLCBpbnQgTj4KaW5saW5lIHZvaWQgVDJyaHMwX21pbnVzX2VxdWFsc19n
ZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRlcihO
LDApLT11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBpLCBp
bnQgTj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3Iy
X251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0xLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjJfbnVt
YmVyX3Joc18wPEEsVCxOPixULERpbTEsaT46Om9wZXJhdG9yLT0oY29uc3QgVSAmdSkKewogIFQy
cmhzMF9taW51c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPE4+KCksTnVtYmVyPERpbTE+
KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQg
TiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczBfdGltZXNfZXF1YWxzX2dlbmVy
aWMoQSAmaXRlciwgY29uc3QgVSAmdSwgY29uc3QgTnVtYmVyPE4+ICZOMSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4yKQp7CiAg
aXRlcihOLEN1cnJlbnRfRGltLTEpKj11OwogIFQycmhzMF90aW1lc19lcXVhbHNfZ2VuZXJpYyhp
dGVyLHUsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBj
bGFzcyBVLCBpbnQgTj4KaW5saW5lIHZvaWQgVDJyaHMwX3RpbWVzX2VxdWFsc19nZW5lcmljKEEg
Jml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRlcihOLDApKj11Owp9
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4KdGVt
cGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9y
aHNfMDxBLFQsTj4sVCxEaW0xLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18w
PEEsVCxOPixULERpbTEsaT46Om9wZXJhdG9yKj0oY29uc3QgVSAmdSkKewogIFQycmhzMF90aW1l
c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPE4+KCksTnVtYmVyPERpbTE+KCkpOwogIHJl
dHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgTiwgaW50IEN1
cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczBfZGl2aWRlX2VxdWFsc19nZW5lcmljKEEgJml0
ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOMikKewogIGl0ZXIoTixD
dXJyZW50X0RpbS0xKS89dTsKICBUMnJoczBfZGl2aWRlX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxO
MSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUs
IGludCBOPgppbmxpbmUgdm9pZCBUMnJoczBfZGl2aWRlX2VxdWFsc19nZW5lcmljKEEgJml0ZXIs
IGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRlcihOLDApLz11Owp9Cgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4KdGVtcGxhdGU8
Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMDxB
LFQsTj4sVCxEaW0xLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18wPEEsVCxO
PixULERpbTEsaT46Om9wZXJhdG9yLz0oY29uc3QgVSAmdSkKewogIFQycmhzMF9kaXZpZGVfZXF1
YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxOPigpLE51bWJlcjxEaW0xPigpKTsKICByZXR1cm4g
KnRoaXM7Cn0KCgoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGlt
MSwgY2hhciBpLCBpbnQgTiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczFfZXF1
YWxzX1QxKEEgJml0ZXIsIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMSxpPiAmcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGltPiAmTjIpCnsKICBp
dGVyKEN1cnJlbnRfRGltLTEsTik9cmVzdWx0KEN1cnJlbnRfRGltLTEpOwogIFQycmhzMV9lcXVh
bHNfVDEoaXRlcixyZXN1bHQsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0
ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4KaW5s
aW5lIHZvaWQgVDJyaHMxX2VxdWFsc19UMShBICZpdGVyLCBjb25zdCBUZW5zb3IxX0V4cHI8QixV
LERpbTEsaT4gJnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1i
ZXI8Tj4gJk4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjwxPiAm
TjIpCnsKICBpdGVyKDAsTik9cmVzdWx0KDApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBU
LCBpbnQgRGltMSwgY2hhciBpLCBpbnQgTj4KdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4gaW5s
aW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMTxBLFQsTj4sVCxEaW0x
LGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT46
Om9wZXJhdG9yPShjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTEsaT4gJnJlc3VsdCkKewogIFQy
cmhzMV9lcXVhbHNfVDEoaXRlcixyZXN1bHQsTnVtYmVyPE4+KCksTnVtYmVyPERpbTE+KCkpOwog
IHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTEsIGNo
YXIgaSwgaW50IE4+IGlubGluZQpjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhz
XzE8QSxULE4+LFQsRGltMSxpPiAmClRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMTxB
LFQsTj4sVCxEaW0xLGk+OjpvcGVyYXRvcj0oY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVt
YmVyX3Joc18xPEEsVCxOPixULERpbTEsaT4gJnJlc3VsdCkKewogIHJldHVybiBvcGVyYXRvcj08
VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQ+KHJlc3VsdCk7Cn0KCgoKdGVtcGxhdGU8Y2xh
c3MgQSwgY2xhc3MgVSwgaW50IE4sIGludCBDdXJyZW50X0RpbT4KaW5saW5lIHZvaWQgVDJyaHMx
X2VxdWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0+ICZOMikKewogIGl0ZXIoQ3VycmVudF9EaW0tMSxOKT11OwogIFQycmhzMV9lcXVhbHNfZ2Vu
ZXJpYyhpdGVyLHUsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFz
cyBBLCBjbGFzcyBVLCBpbnQgTj4KaW5saW5lIHZvaWQgVDJyaHMxX2VxdWFsc19nZW5lcmljKEEg
Jml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRlcigwLE4pPXU7Cn0K
CnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0xLCBjaGFyIGksIGludCBOPgp0ZW1w
bGF0ZTxjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjJfbnVtYmVyX3Jo
c18xPEEsVCxOPixULERpbTEsaT4gJgpUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8
QSxULE4+LFQsRGltMSxpPjo6b3BlcmF0b3I9KGNvbnN0IFUgJnUpCnsKICBUMnJoczFfZXF1YWxz
X2dlbmVyaWMoaXRlcix1LE51bWJlcjxOPigpLE51bWJlcjxEaW0xPigpKTsKICByZXR1cm4gKnRo
aXM7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVSwgaW50IE4sIGludCBDdXJyZW50X0Rp
bT4KaW5saW5lIHZvaWQgVDJyaHMxX3BsdXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3Qg
VSAmdSwgY29uc3QgTnVtYmVyPE4+ICZOMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4yKQp7CiAgaXRlcihDdXJyZW50X0RpbS0x
LE4pKz11OwogIFQycmhzMV9wbHVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOMSxOdW1iZXI8Q3Vy
cmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUsIGludCBOPgppbmxp
bmUgdm9pZCBUMnJoczFfcGx1c19lcXVhbHNfZ2VuZXJpYyhBICZpdGVyLCBjb25zdCBVICZ1LCBj
b25zdCBOdW1iZXI8Tj4gJk4xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgTnVtYmVyPDE+ICZOMikKewogIGl0ZXIoMCxOKSs9dTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwg
Y2xhc3MgVCwgaW50IERpbTEsIGNoYXIgaSwgaW50IE4+CnRlbXBsYXRlPGNsYXNzIFU+IGlubGlu
ZQpjb25zdCBUZW5zb3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8QSxULE4+LFQsRGltMSxp
PiAmClRlbnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMTxBLFQsTj4sVCxEaW0xLGk+Ojpv
cGVyYXRvcis9KGNvbnN0IFUgJnUpCnsKICBUMnJoczFfcGx1c19lcXVhbHNfZ2VuZXJpYyhpdGVy
LHUsTnVtYmVyPE4+KCksTnVtYmVyPERpbTE+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgTiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9p
ZCBUMnJoczFfbWludXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3QgVSAmdSwgY29uc3Qg
TnVtYmVyPE4+ICZOMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51
bWJlcjxDdXJyZW50X0RpbT4gJk4yKQp7CiAgaXRlcihDdXJyZW50X0RpbS0xLE4pLT11OwogIFQy
cmhzMV9taW51c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+
KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgTj4KaW5saW5lIHZvaWQgVDJy
aHMxX21pbnVzX2VxdWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJl
cjxOPiAmTjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8
MT4gJk4yKQp7CiAgaXRlcigwLE4pLT11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBp
bnQgRGltMSwgY2hhciBpLCBpbnQgTj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRl
bnNvcjFfRXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMTxBLFQsTj4sVCxEaW0xLGk+ICYKVGVuc29y
MV9FeHByPFRlbnNvcjJfbnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT46Om9wZXJhdG9yLT0o
Y29uc3QgVSAmdSkKewogIFQycmhzMV9taW51c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVy
PE4+KCksTnVtYmVyPERpbTE+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFz
cyBBLCBjbGFzcyBVLCBpbnQgTiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczFf
dGltZXNfZXF1YWxzX2dlbmVyaWMoQSAmaXRlciwgY29uc3QgVSAmdSwgY29uc3QgTnVtYmVyPE4+
ICZOMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJy
ZW50X0RpbT4gJk4yKQp7CiAgaXRlcihDdXJyZW50X0RpbS0xLE4pKj11OwogIFQycmhzMV90aW1l
c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgTj4KaW5saW5lIHZvaWQgVDJyaHMxX3RpbWVz
X2VxdWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7
CiAgaXRlcigwLE4pKj11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwg
Y2hhciBpLCBpbnQgTj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhw
cjxUZW5zb3IyX251bWJlcl9yaHNfMTxBLFQsTj4sVCxEaW0xLGk+ICYKVGVuc29yMV9FeHByPFRl
bnNvcjJfbnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT46Om9wZXJhdG9yKj0oY29uc3QgVSAm
dSkKewogIFQycmhzMV90aW1lc19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPE4+KCksTnVt
YmVyPERpbTE+KCkpOwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFz
cyBVLCBpbnQgTiwgaW50IEN1cnJlbnRfRGltPgppbmxpbmUgdm9pZCBUMnJoczFfZGl2aWRlX2Vx
dWFsc19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+
ICZOMikKewogIGl0ZXIoQ3VycmVudF9EaW0tMSxOKS89dTsKICBUMnJoczFfZGl2aWRlX2VxdWFs
c19nZW5lcmljKGl0ZXIsdSxOMSxOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7Cn0KCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIFUsIGludCBOPgppbmxpbmUgdm9pZCBUMnJoczFfZGl2aWRlX2VxdWFs
c19nZW5lcmljKEEgJml0ZXIsIGNvbnN0IFUgJnUsIGNvbnN0IE51bWJlcjxOPiAmTjEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4yKQp7CiAgaXRl
cigwLE4pLz11Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMSwgY2hhciBp
LCBpbnQgTj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5z
b3IyX251bWJlcl9yaHNfMTxBLFQsTj4sVCxEaW0xLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjJf
bnVtYmVyX3Joc18xPEEsVCxOPixULERpbTEsaT46Om9wZXJhdG9yLz0oY29uc3QgVSAmdSkKewog
IFQycmhzMV9kaXZpZGVfZXF1YWxzX2dlbmVyaWMoaXRlcix1LE51bWJlcjxOPigpLE51bWJlcjxE
aW0xPigpKTsKICByZXR1cm4gKnRoaXM7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIs
IGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaSwgaW50IE4xLCBpbnQgTjIsIGludCBDdXJyZW50X0Rp
bT4KaW5saW5lIHZvaWQgVDNkZ3JoczEyX2VxdWFsc19UMShBICZpdGVyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltLGk+ICZyZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPE4xPiAmTk4xLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxOMj4gJk5OMiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZO
RCkKewogIGl0ZXIoQ3VycmVudF9EaW0tMSxOMSxOMik9cmVzdWx0KEN1cnJlbnRfRGltLTEpOwog
IFQzZGdyaHMxMl9lcXVhbHNfVDEoaXRlcixyZXN1bHQsTk4xLE5OMixOdW1iZXI8Q3VycmVudF9E
aW0tMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBEaW0s
IGNoYXIgaSwgaW50IE4xLCBpbnQgTjI+CmlubGluZSB2b2lkIFQzZGdyaHMxMl9lcXVhbHNfVDEo
QSAmaXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4
cHI8QixVLERpbSxpPiAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE51bWJlcjxOMT4gJk5OMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBOdW1iZXI8TjI+ICZOTjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TnVtYmVyPDE+ICZORCkKewogIGl0ZXIoMCxOMSxOMik9cmVzdWx0KDApOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBULCBpbnQgRGltLCBjaGFyIGksIGludCBOMSwgaW50IE4yPgp0ZW1wbGF0
ZTxjbGFzcyBCLCBjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjNfZGdf
bnVtYmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjNf
ZGdfbnVtYmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+Cjo6b3BlcmF0b3I9KGNvbnN0IFRl
bnNvcjFfRXhwcjxCLFUsRGltLGk+ICZyZXN1bHQpCnsKICBUM2RncmhzMTJfZXF1YWxzX1QxKGl0
ZXIscmVzdWx0LE51bWJlcjxOMT4oKSxOdW1iZXI8TjI+KCksTnVtYmVyPERpbT4oKSk7CiAgcmV0
dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltLCBjaGFyIGks
IGludCBOMSwgaW50IE4yPiBpbmxpbmUKY29uc3QgVGVuc29yMV9FeHByPFRlbnNvcjNfZGdfbnVt
YmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+ICYKVGVuc29yMV9FeHByPFRlbnNvcjNfZGdf
bnVtYmVyX3Joc18xMjxBLFQsTjEsTjI+LFQsRGltLGk+Cjo6b3BlcmF0b3I9KGNvbnN0IFRlbnNv
cjFfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMTI8QSxULE4xLE4yPixULERpbSxpPgogICAg
ICAgICAgICAmcmVzdWx0KQp7CiAgcmV0dXJuIG9wZXJhdG9yPTxUZW5zb3IzX2RnX251bWJlcl9y
aHNfMTI8QSxULE4xLE4yPixUPihyZXN1bHQpOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFz
cyBCLCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGludCBOMSwgaW50IE4yLCBpbnQgQ3VycmVu
dF9EaW0+CmlubGluZSB2b2lkIFQzZGdyaHMwMV9lcXVhbHNfVDEoQSAmaXRlciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxOMT4gJk5O
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8TjI+ICZOTjIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGlt
PiAmTkQpCnsKICBpdGVyKE4xLE4yLEN1cnJlbnRfRGltLTEpPXJlc3VsdChDdXJyZW50X0RpbS0x
KTsKICBUM2RncmhzMDFfZXF1YWxzX1QxKGl0ZXIscmVzdWx0LE5OMSxOTjIsTnVtYmVyPEN1cnJl
bnRfRGltLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQg
RGltLCBjaGFyIGksIGludCBOMSwgaW50IE4yPgppbmxpbmUgdm9pZCBUM2RncmhzMDFfZXF1YWxz
X1QxKEEgJml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29y
MV9FeHByPEIsVSxEaW0saT4gJnJlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOdW1iZXI8TjE+ICZOTjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTnVtYmVyPE4yPiAmTk4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE51bWJlcjwxPiAmTkQpCnsKICBpdGVyKE4xLE4yLDApPXJlc3VsdCgwKTsKfQoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbSwgY2hhciBpLCBpbnQgTjEsIGludCBOMj4KdGVt
cGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3Iz
X2RnX251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPiAmClRlbnNvcjFfRXhwcjxUZW5z
b3IzX2RnX251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPgo6Om9wZXJhdG9yPShjb25z
dCBUZW5zb3IxX0V4cHI8QixVLERpbSxpPiAmcmVzdWx0KQp7CiAgVDNkZ3JoczAxX2VxdWFsc19U
MShpdGVyLHJlc3VsdCxOdW1iZXI8TjE+KCksTnVtYmVyPE4yPigpLE51bWJlcjxEaW0+KCkpOwog
IHJldHVybiAqdGhpczsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbSwgY2hh
ciBpLCBpbnQgTjEsIGludCBOMj4gaW5saW5lCmNvbnN0IFRlbnNvcjFfRXhwcjxUZW5zb3IzX2Rn
X251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPiAmClRlbnNvcjFfRXhwcjxUZW5zb3Iz
X2RnX251bWJlcl9yaHNfMDE8QSxULE4xLE4yPixULERpbSxpPgo6Om9wZXJhdG9yPShjb25zdCBU
ZW5zb3IxX0V4cHI8VGVuc29yM19kZ19udW1iZXJfcmhzXzAxPEEsVCxOMSxOMj4sVCxEaW0saT4K
ICAgICAgICAgICAgJnJlc3VsdCkKewogIHJldHVybiBvcGVyYXRvcj08VGVuc29yM19kZ19udW1i
ZXJfcmhzXzAxPEEsVCxOMSxOMj4sVD4ocmVzdWx0KTsKfQojIDI0OSAiLi4vLi4vVGVuc29yMS9U
ZW5zb3IxX0V4cHIuaCIgMgojIDggIi4uLy4uL1RlbnNvcjEuaCIgMgojIDUzICIuLi8uLi9GVGVu
c29yLnBhcnQuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjIuaCIgMQoKCiMgMSAiLi4vLi4vVGVuc29y
Mi9UZW5zb3IyX251bWJlci5oIiAxCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBO
PgpjbGFzcyBUZW5zb3IyX251bWJlcl8xCnsKICBBIGl0ZXJBOwpwdWJsaWM6CiAgVCBvcGVyYXRv
cigpKGNvbnN0IGludCBOMSkgY29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoTjEsTik7CiAgfQog
IFRlbnNvcjJfbnVtYmVyXzEoQSAmYSk6IGl0ZXJBKGEpIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBB
LCBjbGFzcyBULCBpbnQgTj4KY2xhc3MgVGVuc29yMl9udW1iZXJfMAp7CiAgQSBpdGVyQTsKcHVi
bGljOgogIFQgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0
ZXJBKE4sTjEpOwogIH0KICBUZW5zb3IyX251bWJlcl8wKEEgJmEpOiBpdGVyQShhKSB7fQp9OwoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IE4+CmNsYXNzIFRlbnNvcjJfbnVtYmVyX3Jo
c18wCnt9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IE4+CmNsYXNzIFRlbnNvcjJf
bnVtYmVyX3Joc18xCnt9OwojIDQgIi4uLy4uL1RlbnNvcjIuaCIgMgojIDEgIi4uLy4uL1RlbnNv
cjIvVGVuc29yMl9udW1lcmFsLmgiIDEKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVD4KY2xh
c3MgVGVuc29yMl9udW1lcmFsXzEKewogIEEgaXRlckE7CiAgY29uc3QgaW50IE47CnB1YmxpYzoK
ICBUIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShO
MSxOKTsKICB9CiAgVGVuc29yMl9udW1lcmFsXzEoQSAmYSwgY29uc3QgaW50IE5OKTogaXRlckEo
YSksIE4oTk4pIHt9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBUPgpjbGFzcyBUZW5zb3Iy
X251bWVyYWxfMAp7CiAgQSBpdGVyQTsKICBjb25zdCBpbnQgTjsKcHVibGljOgogIFQgb3BlcmF0
b3IoKShjb25zdCBpbnQgTjEpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4sTjEpOwogIH0K
ICBUZW5zb3IyX251bWVyYWxfMChBICZhLCBjb25zdCBpbnQgTk4pOiBpdGVyQShhKSwgTihOTikg
e30KfTsKIyA1ICIuLi8uLi9UZW5zb3IyLmgiIDIKCiMgMSAiLi4vLi4vVGVuc29yMi9UZW5zb3Iy
X2NvbnN0cnVjdG9yLmgiIDEKCgoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50IFRlbnNvcl9EaW0wLCBp
bnQgVGVuc29yX0RpbTE+CmNsYXNzIFRlbnNvcjJfY29uc3RydWN0b3I7Cgp0ZW1wbGF0ZTxjbGFz
cyBUPgpjbGFzcyBUZW5zb3IyX2NvbnN0cnVjdG9yPFQsMiwyPgp7CnB1YmxpYzoKICBUZW5zb3Iy
X2NvbnN0cnVjdG9yKFQgZGF0YVsyXVsyXSxUIGQwMCxUIGQwMSxUIGQxMCxUIGQxMSkKICB7CiAg
ICBkYXRhWzBdWzBdPWQwMDsKICAgIGRhdGFbMF1bMV09ZDAxOwogICAgZGF0YVsxXVswXT1kMTA7
CiAgICBkYXRhWzFdWzFdPWQxMTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBUZW5z
b3IyX2NvbnN0cnVjdG9yPFQsMywyPgp7CnB1YmxpYzoKICBUZW5zb3IyX2NvbnN0cnVjdG9yKFQg
ZGF0YVszXVsyXSxUIGQwMCwgVCBkMDEsIFQgZDEwLCBUIGQxMSwKICAgICAgICAgICAgICAgICAg
ICAgIFQgZDIwLCBUIGQyMSkKICB7CiAgICBkYXRhWzBdWzBdPWQwMDsKICAgIGRhdGFbMF1bMV09
ZDAxOwogICAgZGF0YVsxXVswXT1kMTA7CiAgICBkYXRhWzFdWzFdPWQxMTsKICAgIGRhdGFbMl1b
MF09ZDIwOwogICAgZGF0YVsyXVsxXT1kMjE7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4KY2xh
c3MgVGVuc29yMl9jb25zdHJ1Y3RvcjxULDMsMz4KewpwdWJsaWM6CiAgVGVuc29yMl9jb25zdHJ1
Y3RvcihUIGRhdGFbM11bM10sVCBkMDAsIFQgZDAxLCBUIGQwMiwgVCBkMTAsIFQgZDExLCBUIGQx
MiwKICAgICAgICAgICAgICAgICAgICAgIFQgZDIwLCBUIGQyMSwgVCBkMjIpCiAgewogICAgZGF0
YVswXVswXT1kMDA7CiAgICBkYXRhWzBdWzFdPWQwMTsKICAgIGRhdGFbMF1bMl09ZDAyOwogICAg
ZGF0YVsxXVswXT1kMTA7CiAgICBkYXRhWzFdWzFdPWQxMTsKICAgIGRhdGFbMV1bMl09ZDEyOwog
ICAgZGF0YVsyXVswXT1kMjA7CiAgICBkYXRhWzJdWzFdPWQyMTsKICAgIGRhdGFbMl1bMl09ZDIy
OwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFQ+CmNsYXNzIFRlbnNvcjJfY29uc3RydWN0b3I8VCw0
LDQ+CnsKcHVibGljOgogIFRlbnNvcjJfY29uc3RydWN0b3IoVCBkYXRhWzRdWzRdLCBUIGQwMCwg
VCBkMDEsIFQgZDAyLCBUIGQwMywgVCBkMTAsIFQgZDExLAogICAgICAgICAgICAgICAgICAgICAg
VCBkMTIsIFQgZDEzLCBUIGQyMCwgVCBkMjEsIFQgZDIyLCBUIGQyMywgVCBkMzAsIFQgZDMxLAog
ICAgICAgICAgICAgICAgICAgICAgVCBkMzIsIFQgZDMzKQogIHsKICAgIGRhdGFbMF1bMF09ZDAw
OwogICAgZGF0YVswXVsxXT1kMDE7CiAgICBkYXRhWzBdWzJdPWQwMjsKICAgIGRhdGFbMF1bM109
ZDAzOwogICAgZGF0YVsxXVswXT1kMTA7CiAgICBkYXRhWzFdWzFdPWQxMTsKICAgIGRhdGFbMV1b
Ml09ZDEyOwogICAgZGF0YVsxXVszXT1kMTM7CiAgICBkYXRhWzJdWzBdPWQyMDsKICAgIGRhdGFb
Ml1bMV09ZDIxOwogICAgZGF0YVsyXVsyXT1kMjI7CiAgICBkYXRhWzJdWzNdPWQyMzsKICAgIGRh
dGFbM11bMF09ZDMwOwogICAgZGF0YVszXVsxXT1kMzE7CiAgICBkYXRhWzNdWzJdPWQzMjsKICAg
IGRhdGFbM11bM109ZDMzOwogIH0KfTsKIyA3ICIuLi8uLi9UZW5zb3IyLmgiIDIKIyAxICIuLi8u
Li9UZW5zb3IyL1RlbnNvcjJfdmFsdWUuaCIgMQoKCnRlbXBsYXRlIDxjbGFzcyBULCBpbnQgVGVu
c29yX0RpbTAsIGludCBUZW5zb3JfRGltMT4KY2xhc3MgVGVuc29yMgp7CiAgVCBkYXRhW1RlbnNv
cl9EaW0wXVtUZW5zb3JfRGltMV07CnB1YmxpYzoKCgoKCiAgVGVuc29yMihUIGQwMCwgVCBkMDEs
VCBkMTAsIFQgZDExKQogIHsKICAgIFRlbnNvcjJfY29uc3RydWN0b3I8VCxUZW5zb3JfRGltMCxU
ZW5zb3JfRGltMT4oZGF0YSxkMDAsZDAxLGQxMCxkMTEpOwogIH0KICBUZW5zb3IyKFQgZDAwLCBU
IGQwMSwgVCBkMDIsIFQgZDEwLCBUIGQxMSwgVCBkMTIsIFQgZDIwLCBUIGQyMSwgVCBkMjIpCiAg
ewogICAgVGVuc29yMl9jb25zdHJ1Y3RvcjxULFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPgogICAg
ICAoZGF0YSxkMDAsZDAxLGQwMixkMTAsZDExLGQxMixkMjAsZDIxLGQyMik7CiAgfQogIFRlbnNv
cjIoVCBkMDAsIFQgZDAxLCBUIGQxMCwgVCBkMTEsIFQgZDIwLCBUIGQyMSkKICB7CiAgICBUZW5z
b3IyX2NvbnN0cnVjdG9yPFQsVGVuc29yX0RpbTAsVGVuc29yX0RpbTE+CiAgICAgIChkYXRhLGQw
MCxkMDEsZDEwLGQxMSxkMjAsZDIxKTsKICB9CiAgVGVuc29yMihUIGQwMCwgVCBkMDEsIFQgZDAy
LCBUIGQwMywgVCBkMTAsIFQgZDExLCBUIGQxMiwgVCBkMTMsCiAgICAgICAgICBUIGQyMCwgVCBk
MjEsIFQgZDIyLCBUIGQyMywgVCBkMzAsIFQgZDMxLCBUIGQzMiwgVCBkMzMpCiAgewogICAgVGVu
c29yMl9jb25zdHJ1Y3RvcjxULFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPgogICAgICAoZGF0YSxk
MDAsZDAxLGQwMixkMDMsZDEwLGQxMSxkMTIsZDEzLGQyMCxkMjEsZDIyLGQyMyxkMzAsZDMxLGQz
MixkMzMpOwogIH0KICBUZW5zb3IyKCkge30KCgoKCiAgVCAmIG9wZXJhdG9yKCkoY29uc3QgaW50
IE4xLCBjb25zdCBpbnQgTjIpCiAgewoKICAgIGlmKE4xPj1UZW5zb3JfRGltMCB8fCBOMTwwIHx8
IE4yPj1UZW5zb3JfRGltMSB8fCBOMjwwKQogICAgICB7CiAgICAgICAgc3RkOjpjZXJyIDw8ICJC
YWQgaW5kZXggaW4gVGVuc29yMjxULCIKICAgICAgICAgICAgICAgICAgPDwgVGVuc29yX0RpbTAg
PDwgIiwiIDw8IFRlbnNvcl9EaW0xCiAgICAgICAgICAgICAgICAgIDw8ICI+Lm9wZXJhdG9yKCIg
PDwgTjEgPDwgIiwiIDw8IE4yIDw8ICIpIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgYWJvcnQoKTsK
ICAgICAgfQoKICAgIHJldHVybiBkYXRhW04xXVtOMl07CiAgfQoKICBUIG9wZXJhdG9yKCkoY29u
c3QgaW50IE4xLCBjb25zdCBpbnQgTjIpIGNvbnN0CiAgewoKICAgIGlmKE4xPj1UZW5zb3JfRGlt
MCB8fCBOMTwwIHx8IE4yPj1UZW5zb3JfRGltMSB8fCBOMjwwKQogICAgICB7CiAgICAgICAgc3Rk
OjpjZXJyIDw8ICJCYWQgaW5kZXggaW4gVGVuc29yMjxULCIKICAgICAgICAgICAgICAgICAgPDwg
VGVuc29yX0RpbTAgPDwgIiwiIDw8IFRlbnNvcl9EaW0xCiAgICAgICAgICAgICAgICAgIDw8ICI+
Lm9wZXJhdG9yKCIgPDwgTjEgPDwgIiwiIDw8IE4yIDw8ICIpIGNvbnN0IgogICAgICAgICAgICAg
ICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgYWJvcnQoKTsKICAgICAgfQoKICAgIHJldHVybiBk
YXRhW04xXVtOMl07CiAgfQoKCgoKCgogIHRlbXBsYXRlPGNoYXIgaSwgY2hhciBqLCBpbnQgRGlt
MCwgaW50IERpbTE+CiAgVGVuc29yMl9FeHByPFRlbnNvcjI8VCxUZW5zb3JfRGltMCxUZW5zb3Jf
RGltMT4sVCxEaW0wLERpbTEsaSxqPgogIG9wZXJhdG9yKCkoY29uc3QgSW5kZXg8aSxEaW0wPiBp
bmRleDEsIGNvbnN0IEluZGV4PGosRGltMT4gaW5kZXgyKQogIHsKICAgIHJldHVybiBUZW5zb3Iy
X0V4cHI8VGVuc29yMjxULFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixULERpbTAsRGltMSxpLGo+
CiAgICAgICgqdGhpcyk7CiAgfQoKICB0ZW1wbGF0ZTxjaGFyIGksIGNoYXIgaiwgaW50IERpbTAs
IGludCBEaW0xPgogIFRlbnNvcjJfRXhwcjxjb25zdCBUZW5zb3IyPFQsVGVuc29yX0RpbTAsVGVu
c29yX0RpbTE+LFQsRGltMCxEaW0xLGksaj4KICBvcGVyYXRvcigpKGNvbnN0IEluZGV4PGksRGlt
MD4gaW5kZXgxLCBjb25zdCBJbmRleDxqLERpbTE+IGluZGV4MikgY29uc3QKICB7CiAgICByZXR1
cm4gVGVuc29yMl9FeHByPGNvbnN0IFRlbnNvcjI8VCxUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4s
CiAgICAgIFQsRGltMCxEaW0xLGksaj4oKnRoaXMpOwogIH0KIyA5NCAiLi4vLi4vVGVuc29yMi9U
ZW5zb3IyX3ZhbHVlLmgiCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQgRGltLCBpbnQgTj4KICBUZW5z
b3IxX0V4cHI8VGVuc29yMl9udW1iZXJfcmhzXzE8VGVuc29yMjxULFRlbnNvcl9EaW0wLFRlbnNv
cl9EaW0xPiwKICAgIFQsTj4sVCxEaW0saT4KICBvcGVyYXRvcigpKGNvbnN0IEluZGV4PGksRGlt
PiBpbmRleDEsIGNvbnN0IE51bWJlcjxOPiBuMSkKICB7CiAgICB0eXBlZGVmIFRlbnNvcjJfbnVt
YmVyX3Joc18xPFRlbnNvcjI8VCxUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4sCiAgICAgIFQsTj4g
VGVuc29yRXhwcjsKICAgIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhwcixULERpbSxpPigq
dGhpcyk7CiAgfQoKICB0ZW1wbGF0ZTxjaGFyIGksIGludCBEaW0sIGludCBOPgogIFRlbnNvcjFf
RXhwcjxUZW5zb3IyX251bWJlcl9yaHNfMDxUZW5zb3IyPFQsVGVuc29yX0RpbTAsVGVuc29yX0Rp
bTE+LAogICAgVCxOPixULERpbSxpPgogIG9wZXJhdG9yKCkoY29uc3QgTnVtYmVyPE4+IG4xLCBj
b25zdCBJbmRleDxpLERpbT4gaW5kZXgxKQogIHsKICAgIHR5cGVkZWYgVGVuc29yMl9udW1iZXJf
cmhzXzA8VGVuc29yMjxULFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixULE4+CiAgICAgIFRlbnNv
ckV4cHI7CiAgICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIsVCxEaW0saT4oKnRoaXMp
OwogIH0KCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQgRGltLCBpbnQgTj4KICBUZW5zb3IxX0V4cHI8
Y29uc3QgVGVuc29yMl9udW1iZXJfMTxjb25zdCBUZW5zb3IyPFQsVGVuc29yX0RpbTAsVGVuc29y
X0RpbTE+LAogICAgVCxOPixULERpbSxpPgogIG9wZXJhdG9yKCkoY29uc3QgSW5kZXg8aSxEaW0+
IGluZGV4MSwgY29uc3QgTnVtYmVyPE4+IG4xKSBjb25zdAogIHsKICAgIHR5cGVkZWYgY29uc3Qg
VGVuc29yMl9udW1iZXJfMTxjb25zdCBUZW5zb3IyPFQsVGVuc29yX0RpbTAsVGVuc29yX0RpbTE+
LFQsTj4KICAgICAgVGVuc29yRXhwcjsKICAgIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhw
cixULERpbSxpPihUZW5zb3JFeHByKCp0aGlzKSk7CiAgfQoKICB0ZW1wbGF0ZTxjaGFyIGksIGlu
dCBEaW0sIGludCBOPgogIFRlbnNvcjFfRXhwcjxjb25zdCBUZW5zb3IyX251bWJlcl8wPGNvbnN0
IFRlbnNvcjI8VCxUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4sCiAgICBULE4+LFQsRGltLGk+CiAg
b3BlcmF0b3IoKShjb25zdCBOdW1iZXI8Tj4gbjEsIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDEp
IGNvbnN0CiAgewogICAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX251bWJlcl8wPGNvbnN0IFRlbnNv
cjI8VCxUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4sVCxOPgogICAgICBUZW5zb3JFeHByOwogICAg
cmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLFQsRGltLGk+KFRlbnNvckV4cHIoKnRoaXMp
KTsKICB9CgoKCgoKICB0ZW1wbGF0ZTxjaGFyIGksIGludCBEaW0+CiAgVGVuc29yMV9FeHByPGNv
bnN0IFRlbnNvcjJfbnVtZXJhbF8xPGNvbnN0IFRlbnNvcjIKICA8VCxUZW5zb3JfRGltMCxUZW5z
b3JfRGltMT4sVD4sVCxEaW0saT4KICBvcGVyYXRvcigpKGNvbnN0IEluZGV4PGksRGltPiBpbmRl
eDEsIGNvbnN0IGludCBOKSBjb25zdAogIHsKICAgIHR5cGVkZWYgY29uc3QgVGVuc29yMl9udW1l
cmFsXzE8Y29uc3QgVGVuc29yMjxULFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixUPgogICAgICBU
ZW5zb3JFeHByOwogICAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHByLFQsRGltLGk+KFRl
bnNvckV4cHIoKnRoaXMsTikpOwogIH0KCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQgRGltPgogIFRl
bnNvcjFfRXhwcjxjb25zdCBUZW5zb3IyX251bWVyYWxfMDxjb25zdCBUZW5zb3IyCiAgPFQsVGVu
c29yX0RpbTAsVGVuc29yX0RpbTE+LFQ+LFQsRGltLGk+CiAgb3BlcmF0b3IoKShjb25zdCBpbnQg
TiwgY29uc3QgSW5kZXg8aSxEaW0+IGluZGV4MSkgY29uc3QKICB7CiAgICB0eXBlZGVmIGNvbnN0
IFRlbnNvcjJfbnVtZXJhbF8wPGNvbnN0IFRlbnNvcjI8VCxUZW5zb3JfRGltMCxUZW5zb3JfRGlt
MT4sVD4KICAgICAgVGVuc29yRXhwcjsKICAgIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhw
cixULERpbSxpPihUZW5zb3JFeHByKCp0aGlzLE4pKTsKICB9CgoKCgoKCiAgdGVtcGxhdGU8Y2hh
ciBpLCBpbnQgRGltPgogIFQgb3BlcmF0b3IoKShjb25zdCBJbmRleDxpLERpbT4gaW5kZXgxLCBj
b25zdCBJbmRleDxpLERpbT4gaW5kZXgyKQogIHsKICAgIHJldHVybiBpbnRlcm5hbF9jb250cmFj
dChOdW1iZXI8RGltPigpKTsKICB9CgogIHRlbXBsYXRlPGNoYXIgaSwgaW50IERpbT4KICBUIG9w
ZXJhdG9yKCkoY29uc3QgSW5kZXg8aSxEaW0+IGluZGV4MSwgY29uc3QgSW5kZXg8aSxEaW0+IGlu
ZGV4MikgY29uc3QKICB7CiAgICByZXR1cm4gaW50ZXJuYWxfY29udHJhY3QoTnVtYmVyPERpbT4o
KSk7CiAgfQpwcml2YXRlOgogIHRlbXBsYXRlPGludCBOPgogIFQgaW50ZXJuYWxfY29udHJhY3Qo
TnVtYmVyPE4+KQogIHsKICAgIHJldHVybiBkYXRhW04tMV1bTi0xXSArIGludGVybmFsX2NvbnRy
YWN0KE51bWJlcjxOLTE+KCkpOwogIH0KCiAgVCBpbnRlcm5hbF9jb250cmFjdChOdW1iZXI8MT4p
CiAgewogICAgcmV0dXJuIGRhdGFbMF1bMF07CiAgfQp9OwojIDggIi4uLy4uL1RlbnNvcjIuaCIg
MgojIDEgIi4uLy4uL1RlbnNvcjIvVGVuc29yMl9wb2ludGVyLmgiIDEKCgp0ZW1wbGF0ZSA8Y2xh
c3MgVCwgaW50IFRlbnNvcl9EaW0wLCBpbnQgVGVuc29yX0RpbTE+CmNsYXNzIFRlbnNvcjI8VCos
VGVuc29yX0RpbTAsVGVuc29yX0RpbTE+CnsKICBtdXRhYmxlIFQgKiBkYXRhW1RlbnNvcl9EaW0w
XVtUZW5zb3JfRGltMV07CnB1YmxpYzoKCgoKCiAgVGVuc29yMihUKiBkMDAsIFQqIGQwMSxUKiBk
MTAsIFQqIGQxMSkKICB7CiAgICBUZW5zb3IyX2NvbnN0cnVjdG9yPFQqICxUZW5zb3JfRGltMCxU
ZW5zb3JfRGltMT4oZGF0YSxkMDAsZDAxLGQxMCxkMTEpOwogIH0KICBUZW5zb3IyKFQqIGQwMCwg
VCogZDAxLCBUKiBkMTAsIFQqIGQxMSwgVCogZDIwLCBUKiBkMjEpCiAgewogICAgVGVuc29yMl9j
b25zdHJ1Y3RvcjxUKiAsVGVuc29yX0RpbTAsVGVuc29yX0RpbTE+CiAgICAgIChkYXRhLGQwMCxk
MDEsZDEwLGQxMSxkMjAsZDIxKTsKICB9CiAgVGVuc29yMihUKiBkMDAsIFQqIGQwMSwgVCogZDAy
LCBUKiBkMTAsIFQqIGQxMSwgVCogZDEyLCBUKiBkMjAsIFQqIGQyMSwgVCogZDIyKQogIHsKICAg
IFRlbnNvcjJfY29uc3RydWN0b3I8VCogLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPgogICAgICAo
ZGF0YSxkMDAsZDAxLGQwMixkMTAsZDExLGQxMixkMjAsZDIxLGQyMik7CiAgfQogIFRlbnNvcjIo
VCogZDAwLCBUKiBkMDEsIFQqIGQwMiwgVCogZDAzLCBUKiBkMTAsIFQqIGQxMSwgVCogZDEyLCBU
KiBkMTMsCiAgICAgICAgICBUKiBkMjAsIFQqIGQyMSwgVCogZDIyLCBUKiBkMjMsIFQqIGQzMCwg
VCogZDMxLCBUKiBkMzIsIFQqIGQzMykKICB7CiAgICBUZW5zb3IyX2NvbnN0cnVjdG9yPFQqICxU
ZW5zb3JfRGltMCxUZW5zb3JfRGltMT4KICAgICAgKGRhdGEsZDAwLGQwMSxkMDIsZDAzLGQxMCxk
MTEsZDEyLGQxMyxkMjAsZDIxLGQyMixkMjMsZDMwLGQzMSxkMzIsZDMzKTsKICB9CiAgVGVuc29y
MigpIHt9CgoKCgogIFQgJiBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yKQog
IHsKCiAgICBpZihOMT49VGVuc29yX0RpbTAgfHwgTjE8MCB8fCBOMj49VGVuc29yX0RpbTEgfHwg
TjI8MCkKICAgICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQmFkIGluZGV4IGluIFRlbnNvcjI8
VCosIgogICAgICAgICAgICAgICAgICA8PCBUZW5zb3JfRGltMCA8PCAiLCIgPDwgVGVuc29yX0Rp
bTEKICAgICAgICAgICAgICAgICAgPDwgIj4ub3BlcmF0b3IoIiA8PCBOMSA8PCAiLCIgPDwgTjIg
PDwgIikiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICBhYm9ydCgpOwogICAgICB9CgogICAgcmV0dXJu
ICpkYXRhW04xXVtOMl07CiAgfQoKICBUIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25zdCBp
bnQgTjIpIGNvbnN0CiAgewoKICAgIGlmKE4xPj1UZW5zb3JfRGltMCB8fCBOMTwwIHx8IE4yPj1U
ZW5zb3JfRGltMSB8fCBOMjwwKQogICAgICB7CiAgICAgICAgc3RkOjpjZXJyIDw8ICJCYWQgaW5k
ZXggaW4gVGVuc29yMjxUKiwiCiAgICAgICAgICAgICAgICAgIDw8IFRlbnNvcl9EaW0wIDw8ICIs
IiA8PCBUZW5zb3JfRGltMQogICAgICAgICAgICAgICAgICA8PCAiPi5vcGVyYXRvcigiIDw8IE4x
IDw8ICIsIiA8PCBOMiA8PCAiKSBjb25zdCIKICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRs
OwogICAgICAgIGFib3J0KCk7CiAgICAgIH0KCiAgICByZXR1cm4gKmRhdGFbTjFdW04yXTsKICB9
CgogIFQqIHB0cihjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CgogICAgaWYo
TjE+PVRlbnNvcl9EaW0wIHx8IE4xPDAgfHwgTjI+PVRlbnNvcl9EaW0xIHx8IE4yPDApCiAgICAg
IHsKICAgICAgICBzdGQ6OmNlcnIgPDwgIkJhZCBpbmRleCBpbiBUZW5zb3IyPFQqLCIKICAgICAg
ICAgICAgICAgICAgPDwgVGVuc29yX0RpbTAgPDwgIiwiIDw8IFRlbnNvcl9EaW0xCiAgICAgICAg
ICAgICAgICAgIDw8ICI+LnB0cigiIDw8IE4xIDw8ICIsIiA8PCBOMiA8PCAiKSIgPDwgc3RkOjpl
bmRsOwogICAgICAgIGFib3J0KCk7CiAgICAgIH0KCiAgICByZXR1cm4gZGF0YVtOMV1bTjJdOwog
IH0KCgoKCgoKICB0ZW1wbGF0ZTxjaGFyIGksIGNoYXIgaiwgaW50IERpbTAsIGludCBEaW0xPgog
IFRlbnNvcjJfRXhwcjxUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixULERpbTAs
RGltMSxpLGo+CiAgb3BlcmF0b3IoKShjb25zdCBJbmRleDxpLERpbTA+IGluZGV4MSwgY29uc3Qg
SW5kZXg8aixEaW0xPiBpbmRleDIpCiAgewogICAgcmV0dXJuIFRlbnNvcjJfRXhwcjxUZW5zb3Iy
PFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixULERpbTAsRGltMSxpLGo+CiAgICAgICgqdGhp
cyk7CiAgfQoKICB0ZW1wbGF0ZTxjaGFyIGksIGNoYXIgaiwgaW50IERpbTAsIGludCBEaW0xPgog
IFRlbnNvcjJfRXhwcjxjb25zdCBUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixU
LERpbTAsRGltMSxpLGo+CiAgb3BlcmF0b3IoKShjb25zdCBJbmRleDxpLERpbTA+IGluZGV4MSwg
Y29uc3QgSW5kZXg8aixEaW0xPiBpbmRleDIpIGNvbnN0CiAgewogICAgcmV0dXJuIFRlbnNvcjJf
RXhwcjxjb25zdCBUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPiwKICAgICAgVCxE
aW0wLERpbTEsaSxqPigqdGhpcyk7CiAgfQojIDEwOCAiLi4vLi4vVGVuc29yMi9UZW5zb3IyX3Bv
aW50ZXIuaCIKICB0ZW1wbGF0ZTxjaGFyIGksIGludCBEaW0sIGludCBOPgogIFRlbnNvcjFfRXhw
cjxUZW5zb3IyX251bWJlcl9yaHNfMTxUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0x
PiwKICAgIFQsTj4sVCxEaW0saT4KICBvcGVyYXRvcigpKGNvbnN0IEluZGV4PGksRGltPiBpbmRl
eDEsIGNvbnN0IE51bWJlcjxOPiBuMSkKICB7CiAgICB0eXBlZGVmIFRlbnNvcjJfbnVtYmVyX3Jo
c18xPFRlbnNvcjI8VCosVGVuc29yX0RpbTAsVGVuc29yX0RpbTE+LAogICAgICBULE4+IFRlbnNv
ckV4cHI7CiAgICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIsVCxEaW0saT4oKnRoaXMp
OwogIH0KCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQgRGltLCBpbnQgTj4KICBUZW5zb3IxX0V4cHI8
VGVuc29yMl9udW1iZXJfcmhzXzA8VGVuc29yMjxUKixUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4s
CiAgICBULE4+LFQsRGltLGk+CiAgb3BlcmF0b3IoKShjb25zdCBOdW1iZXI8Tj4gbjEsIGNvbnN0
IEluZGV4PGksRGltPiBpbmRleDEpCiAgewogICAgdHlwZWRlZiBUZW5zb3IyX251bWJlcl9yaHNf
MDxUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPixULE4+CiAgICAgIFRlbnNvckV4
cHI7CiAgICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIsVCxEaW0saT4oKnRoaXMpOwog
IH0KCiAgdGVtcGxhdGU8Y2hhciBpLCBpbnQgRGltLCBpbnQgTj4KICBUZW5zb3IxX0V4cHI8Y29u
c3QgVGVuc29yMl9udW1iZXJfMTxjb25zdCBUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9E
aW0xPiwKICAgIFQsTj4sVCxEaW0saT4KICBvcGVyYXRvcigpKGNvbnN0IEluZGV4PGksRGltPiBp
bmRleDEsIGNvbnN0IE51bWJlcjxOPiBuMSkgY29uc3QKICB7CiAgICB0eXBlZGVmIGNvbnN0IFRl
bnNvcjJfbnVtYmVyXzE8Y29uc3QgVGVuc29yMjxUKixUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4s
VCxOPgogICAgICBUZW5zb3JFeHByOwogICAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHBy
LFQsRGltLGk+KFRlbnNvckV4cHIoKnRoaXMpKTsKICB9CgogIHRlbXBsYXRlPGNoYXIgaSwgaW50
IERpbSwgaW50IE4+CiAgVGVuc29yMV9FeHByPGNvbnN0IFRlbnNvcjJfbnVtYmVyXzA8Y29uc3Qg
VGVuc29yMjxUKixUZW5zb3JfRGltMCxUZW5zb3JfRGltMT4sCiAgICBULE4+LFQsRGltLGk+CiAg
b3BlcmF0b3IoKShjb25zdCBOdW1iZXI8Tj4gbjEsIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDEp
IGNvbnN0CiAgewogICAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX251bWJlcl8wPGNvbnN0IFRlbnNv
cjI8VCosVGVuc29yX0RpbTAsVGVuc29yX0RpbTE+LFQsTj4KICAgICAgVGVuc29yRXhwcjsKICAg
IHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhwcixULERpbSxpPihUZW5zb3JFeHByKCp0aGlz
KSk7CiAgfQoKCgoKICBjb25zdCBUZW5zb3IyPFQqLFRlbnNvcl9EaW0wLFRlbnNvcl9EaW0xPiAm
IG9wZXJhdG9yKysoKSBjb25zdAogIHsKICAgIGZvcihpbnQgaT0wO2k8VGVuc29yX0RpbTA7Kytp
KQogICAgICBmb3IoaW50IGo9MDtqPFRlbnNvcl9EaW0xOysraikKICAgICAgICArK2RhdGFbaV1b
al07CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCgogIHRlbXBsYXRlPGNoYXIgaSwgaW50IERp
bT4KICBUIG9wZXJhdG9yKCkoY29uc3QgSW5kZXg8aSxEaW0+IGluZGV4MSwgY29uc3QgSW5kZXg8
aSxEaW0+IGluZGV4MikKICB7CiAgICByZXR1cm4gaW50ZXJuYWxfY29udHJhY3QoTnVtYmVyPERp
bT4oKSk7CiAgfQoKICB0ZW1wbGF0ZTxjaGFyIGksIGludCBEaW0+CiAgVCBvcGVyYXRvcigpKGNv
bnN0IEluZGV4PGksRGltPiBpbmRleDEsIGNvbnN0IEluZGV4PGksRGltPiBpbmRleDIpIGNvbnN0
CiAgewogICAgcmV0dXJuIGludGVybmFsX2NvbnRyYWN0KE51bWJlcjxEaW0+KCkpOwogIH0KcHJp
dmF0ZToKICB0ZW1wbGF0ZTxpbnQgTj4KICBUIGludGVybmFsX2NvbnRyYWN0KE51bWJlcjxOPikK
ICB7CiAgICByZXR1cm4gKmRhdGFbTi0xXVtOLTFdICsgaW50ZXJuYWxfY29udHJhY3QoTnVtYmVy
PE4tMT4oKSk7CiAgfQoKICBUIGludGVybmFsX2NvbnRyYWN0KE51bWJlcjwxPikKICB7CiAgICBy
ZXR1cm4gKmRhdGFbMF1bMF07CiAgfQp9OwojIDkgIi4uLy4uL1RlbnNvcjIuaCIgMgoKIyAxICIu
Li8uLi9UZW5zb3IyL1RlbnNvcjJfRXhwci5oIiAxCgoKCgoKIyAxICIuLi8uLi9UZW5zb3IyL1Rl
bnNvcjJfcGx1c19UZW5zb3IyLmgiIDEKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNs
YXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4KY2xhc3Mg
VGVuc29yMl9wbHVzX1RlbnNvcjJfMDEKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxE
aW0xLGksaj4gaXRlckE7CiAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaSxqPiBp
dGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwg
Y29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxOMikraXRlckIoTjEs
TjIpOwogIH0KCiAgVGVuc29yMl9wbHVzX1RlbnNvcjJfMDEoY29uc3QgVGVuc29yMl9FeHByPEEs
VCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5z
b3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZiKToKICAgIGl0ZXJBKGEpLCBpdGVyQihiKSB7
fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERp
bTAsIGludCBEaW0xLCBjaGFyIGksY2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNv
bnN0IFRlbnNvcjJfcGx1c19UZW5zb3IyXzAxPEEsQixULFUsRGltMCxEaW0xLGksaj4sCiAgcHJv
bW90ZTxULFU+OjpWLERpbTAsRGltMSxpLGo+Cm9wZXJhdG9yKyhjb25zdCBUZW5zb3IyX0V4cHI8
QSxULERpbTAsRGltMSxpLGo+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxE
aW0wLERpbTEsaSxqPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9wbHVzX1RlbnNvcjJf
MDE8QSxCLFQsVSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4
cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JF
eHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNz
IFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4KY2xhc3MgVGVuc29yMl9wbHVz
X1RlbnNvcjJfMTAKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxEaW0xLGksaj4gaXRl
ckE7CiAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaixpPiBpdGVyQjsKcHVibGlj
OgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4y
KSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxOMikraXRlckIoTjIsTjEpOwogIH0KCiAg
VGVuc29yMl9wbHVzX1RlbnNvcjJfMTAoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEs
aSxqPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixV
LERpbTAsRGltMSxqLGk+ICZiKToKICAgIGl0ZXJBKGEpLCBpdGVyQihiKSB7fQp9OwoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0x
LAogIGNoYXIgaSwgY2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0IFRlbnNv
cjJfcGx1c19UZW5zb3IyXzEwPEEsQixULFUsRGltMCxEaW0xLGksaj4sCiAgcHJvbW90ZTxULFU+
OjpWLERpbTAsRGltMSxpLGo+Cm9wZXJhdG9yKyhjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAs
RGltMSxpLGo+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEs
aixpPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9wbHVzX1RlbnNvcjJfMTA8QSxCLFQs
VSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29y
RXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JFeHByKGEsYikp
Owp9CiMgNyAiLi4vLi4vVGVuc29yMi9UZW5zb3IyX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNv
cjIvVGVuc29yMl9taW51c19UZW5zb3IyLmgiIDEKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4K
Y2xhc3MgVGVuc29yMl9taW51c19UZW5zb3IyXzAxCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxU
LERpbTAsRGltMSxpLGo+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMCxEaW0x
LGksaj4gaXRlckI7CnB1YmxpYzoKICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBp
bnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoTjEsTjIpLWl0
ZXJCKE4xLE4yKTsKICB9CgogIFRlbnNvcjJfbWludXNfVGVuc29yMl8wMShjb25zdCBUZW5zb3Iy
X0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhLAogICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZiKToKICAgIGl0ZXJBKGEpLCBp
dGVyQihiKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3Mg
VSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksY2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29y
Ml9FeHByPGNvbnN0IFRlbnNvcjJfbWludXNfVGVuc29yMl8wMTxBLEIsVCxVLERpbTAsRGltMSxp
LGo+LAogIHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEsaSxqPgpvcGVyYXRvci0oY29uc3QgVGVu
c29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjJf
RXhwcjxCLFUsRGltMCxEaW0xLGksaj4gJmIpCnsKICB0eXBlZGVmIGNvbnN0IFRlbnNvcjJfbWlu
dXNfVGVuc29yMl8wMTxBLEIsVCxVLERpbTAsRGltMSxpLGo+IFRlbnNvckV4cHI7CiAgcmV0dXJu
IFRlbnNvcjJfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEsaSxqPgog
ICAgKFRlbnNvckV4cHIoYSxiKSk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xh
c3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksY2hhciBqPgpjbGFzcyBU
ZW5zb3IyX21pbnVzX1RlbnNvcjJfMTAKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxE
aW0xLGksaj4gaXRlckE7CiAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaixpPiBp
dGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwg
Y29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxOMiktaXRlckIoTjIs
TjEpOwogIH0KCiAgVGVuc29yMl9taW51c19UZW5zb3IyXzEwKGNvbnN0IFRlbnNvcjJfRXhwcjxB
LFQsRGltMCxEaW0xLGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVu
c29yMl9FeHByPEIsVSxEaW0wLERpbTEsaixpPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikg
e30KfTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwKICBjaGFyIGksIGNoYXIgaj4KaW5saW5lIGNvbnN0IFRlbnNvcjJfRXhw
cjxjb25zdCBUZW5zb3IyX21pbnVzX1RlbnNvcjJfMTA8QSxCLFQsVSxEaW0wLERpbTEsaSxqPiwK
ICBwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4Kb3BlcmF0b3ItKGNvbnN0IFRlbnNvcjJf
RXhwcjxBLFQsRGltMCxEaW0xLGksaj4gJmEsCiAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8
QixVLERpbTAsRGltMSxqLGk+ICZiKQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX21pbnVzX1Rl
bnNvcjJfMTA8QSxCLFQsVSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5z
b3IyX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChU
ZW5zb3JFeHByKGEsYikpOwp9CiMgOCAiLi4vLi4vVGVuc29yMi9UZW5zb3IyX0V4cHIuaCIgMgoj
IDEgIi4uLy4uL1RlbnNvcjIvVGVuc29yMl9vcl9UZW5zb3IyLmgiIDEKCgoKCgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltLCBjaGFyIGksIGNoYXIg
aj4KY2xhc3MgVGVuc29yMl9vcl9UZW5zb3IyCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERp
bSxEaW0saSxqPiBpdGVyQTsKICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbSxEaW0saSxqPiBp
dGVyQjsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwg
Y29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxOMikraXRlckIoTjEs
TjIpOwogIH0KCiAgVGVuc29yMl9vcl9UZW5zb3IyKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGlt
LERpbSxpLGo+ICZhLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixV
LERpbSxEaW0saSxqPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KfTsKCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaSwgY2hh
ciBqPgppbmxpbmUgY29uc3QgVGVuc29yMl9zeW1tZXRyaWNfRXhwcjxjb25zdCBUZW5zb3IyX29y
X1RlbnNvcjI8QSxCLFQsVSxEaW0saSxqPiwKICBwcm9tb3RlPFQsVT46OlYsRGltLGksaj4Kb3Bl
cmF0b3J8fChjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbSxEaW0saSxqPiAmYSwKICAgICAgICAg
ICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbSxEaW0saSxqPiAmYikKewogIHR5cGVkZWYgY29u
c3QgVGVuc29yMl9vcl9UZW5zb3IyPEEsQixULFUsRGltLGksaj4gVGVuc29yRXhwcjsKICByZXR1
cm4gVGVuc29yMl9zeW1tZXRyaWNfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxVPjo6VixEaW0s
aSxqPgogICAgKFRlbnNvckV4cHIoYSxiKSk7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGNoYXIgaSwgY2hhciBqPgpjbGFzcyBUZW5z
b3IyX29yX1RlbnNvcjJfc3dpdGNoZWQKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltLERp
bSxpLGo+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltLERpbSxqLGk+IGl0ZXJC
OwpwdWJsaWM6CiAgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25z
dCBpbnQgTjIpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLE4yKStpdGVyQihOMixOMSk7
CiAgfQoKICBUZW5zb3IyX29yX1RlbnNvcjJfc3dpdGNoZWQoY29uc3QgVGVuc29yMl9FeHByPEEs
VCxEaW0sRGltLGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRl
bnNvcjJfRXhwcjxCLFUsRGltLERpbSxqLGk+ICZiKToKICAgIGl0ZXJBKGEpLCBpdGVyQihiKSB7
fQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERp
bSwgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX3N5bW1ldHJpY19FeHByCjxj
b25zdCBUZW5zb3IyX29yX1RlbnNvcjJfc3dpdGNoZWQ8QSxCLFQsVSxEaW0saSxqPixwcm9tb3Rl
PFQsVT46OlYsRGltLGksaj4Kb3BlcmF0b3J8fChjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbSxE
aW0saSxqPiAmYSwKICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbSxEaW0saixp
PiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9vcl9UZW5zb3IyX3N3aXRjaGVkPEEsQixU
LFUsRGltLGksaj4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMl9zeW1tZXRyaWNfRXhwcjxU
ZW5zb3JFeHByLHByb21vdGU8VCxVPjo6VixEaW0saSxqPgogICAgKFRlbnNvckV4cHIoYSxiKSk7
Cn0KIyA5ICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29y
Mi9UZW5zb3IyX3RpbWVzX1RlbnNvcjIuaCIgMQojIDExICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJf
dGltZXNfVGVuc29yMi5oIgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFz
cyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwKICBjaGFyIGosIGludCBDdXJyZW50X0Rp
bTAsIGludCBDdXJyZW50X0RpbTE+CmlubGluZSBjb25zdCBwcm9tb3RlPFQsVT46OlYgVDJfdGlt
ZXNfVDIoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGlt
MSxpLGo+ICZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJl
cjxDdXJyZW50X0RpbTA+ICZOMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAmTjEpCnsKICByZXR1cm4gYShDdXJyZW50X0RpbTAt
MSxDdXJyZW50X0RpbTEtMSkqYihDdXJyZW50X0RpbTAtMSxDdXJyZW50X0RpbTEtMSkKICAgICsg
VDJfdGltZXNfVDIoYSxiLE51bWJlcjxDdXJyZW50X0RpbTAtMT4oKSxOdW1iZXI8Q3VycmVudF9E
aW0xPigpKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwg
aW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksCiAgY2hhciBqLCBpbnQgQ3VycmVudF9EaW0xPgpp
bmxpbmUgY29uc3QgcHJvbW90ZTxULFU+OjpWIFQyX3RpbWVzX1QyKGNvbnN0IFRlbnNvcjJfRXhw
cjxBLFQsRGltMCxEaW0xLGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaSxqPiAmYiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTE+ICZOMSkKewog
IHJldHVybiBhKDAsQ3VycmVudF9EaW0xLTEpKmIoMCxDdXJyZW50X0RpbTEtMSkKICAgICsgVDJf
dGltZXNfVDIoYSxiLE51bWJlcjxEaW0wPigpLE51bWJlcjxDdXJyZW50X0RpbTEtMT4oKSk7Cn0K
CnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBp
bnQgRGltMSwgY2hhciBpLAogIGNoYXIgaj4KaW5saW5lIGNvbnN0IHByb21vdGU8VCxVPjo6ViBU
Ml90aW1lc19UMihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGlt
MCxEaW0xLGksaj4gJmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TnVtYmVyPDE+ICZOMCwgY29uc3QgTnVtYmVyPDE+ICZOMSkKewogIHJldHVybiBhKDAsMCkqYigw
LDApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQg
RGltMCwgaW50IERpbTEsIGNoYXIgaSxjaGFyIGo+CmlubGluZSBjb25zdCBwcm9tb3RlPFQsVT46
OlYgb3BlcmF0b3IqKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxEaW0xLGksaj4gJmEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGlt
MCxEaW0xLGksaj4gJmIpCnsKICByZXR1cm4gVDJfdGltZXNfVDIoYSxiLE51bWJlcjxEaW0wPigp
LE51bWJlcjxEaW0xPigpKTsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBU
LCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwKICBjaGFyIGosIGludCBDdXJy
ZW50X0RpbTAsIGludCBDdXJyZW50X0RpbTE+CmlubGluZSBjb25zdCBwcm9tb3RlPFQsVT46OlYK
VDJfdGltZXNfc3dpdGNoZWRfVDIoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxq
PiAmYSwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERp
bTEsaixpPiAmYiwKICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGlt
MD4gJk4wLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAm
TjEpCnsKICByZXR1cm4gYShDdXJyZW50X0RpbTAtMSxDdXJyZW50X0RpbTEtMSkqYihDdXJyZW50
X0RpbTEtMSxDdXJyZW50X0RpbTAtMSkKICAgICsgVDJfdGltZXNfc3dpdGNoZWRfVDIoYSxiLE51
bWJlcjxDdXJyZW50X0RpbTAtMT4oKSxOdW1iZXI8Q3VycmVudF9EaW0xPigpKTsKfQoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0x
LCBjaGFyIGksCiAgY2hhciBqLCBpbnQgQ3VycmVudF9EaW0xPgppbmxpbmUgY29uc3QgcHJvbW90
ZTxULFU+OjpWClQyX3RpbWVzX3N3aXRjaGVkX1QyKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGlt
MCxEaW0xLGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxC
LFUsRGltMCxEaW0xLGosaT4gJmIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjwx
PiAmTjAsIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTE+ICZOMSkKewogIHJldHVybiBhKDAsQ3Vy
cmVudF9EaW0xLTEpKmIoQ3VycmVudF9EaW0xLTEsMCkKICAgICsgVDJfdGltZXNfc3dpdGNoZWRf
VDIoYSxiLE51bWJlcjxEaW0wPigpLE51bWJlcjxDdXJyZW50X0RpbTEtMT4oKSk7Cn0KCnRlbXBs
YXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGlt
MSwgY2hhciBpLAogIGNoYXIgaj4KaW5saW5lIGNvbnN0IHByb21vdGU8VCxVPjo6VgpUMl90aW1l
c19zd2l0Y2hlZF9UMihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhLAog
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+
ICZiLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLCBjb25zdCBOdW1i
ZXI8MT4gJk4xKQp7CiAgcmV0dXJuIGEoMCwwKSpiKDAsMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNo
YXIgaj4KaW5saW5lIGNvbnN0IHByb21vdGU8VCxVPjo6ViBvcGVyYXRvciooY29uc3QgVGVuc29y
Ml9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0xLERpbTAsaixpPiAmYikKewogIHJldHVy
biBUMl90aW1lc19zd2l0Y2hlZF9UMihhLGIsTnVtYmVyPERpbTA+KCksTnVtYmVyPERpbTE+KCkp
Owp9CiMgOTggIi4uLy4uL1RlbnNvcjIvVGVuc29yMl90aW1lc19UZW5zb3IyLmgiCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwg
aW50IERpbTIsCiAgY2hhciBpLCBjaGFyIGosIGNoYXIgaz4KY2xhc3MgVGVuc29yMl90aW1lc19U
ZW5zb3IyXzEwCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+IGl0ZXJB
OwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMSxEaW0yLGosaz4gaXRlckI7CgogIHRlbXBs
YXRlPGludCBDdXJyZW50X0RpbT4KICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25zdCBpbnQgTjEs
IGNvbnN0IGludCBOMiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVu
dF9EaW0+ICZOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxDdXJyZW50X0RpbS0xKSpp
dGVyQihDdXJyZW50X0RpbS0xLE4yKQogICAgICArIGV2YWwoTjEsTjIsTnVtYmVyPEN1cnJlbnRf
RGltLTE+KCkpOwogIH0KICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0
IGludCBOMiwgY29uc3QgTnVtYmVyPDE+ICZOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShO
MSwwKSppdGVyQigwLE4yKTsKICB9CnB1YmxpYzoKICBUZW5zb3IyX3RpbWVzX1RlbnNvcjJfMTAo
Y29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0xLERpbTIsaixrPiAmYik6CiAg
ICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25z
dCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gZXZhbChOMSxOMixO
dW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3Mg
VCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgRGltMiwKICBjaGFyIGksIGNoYXIg
aiwgY2hhciBrPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0IFRlbnNvcjJfdGltZXNf
VGVuc29yMl8xMAo8QSxCLFQsVSxEaW0wLERpbTEsRGltMixpLGosaz4scHJvbW90ZTxULFU+OjpW
LERpbTAsRGltMixpLGs+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGlt
MSxpLGo+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0xLERpbTIsaixr
PiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IyXzEwPEEsQixULFUs
RGltMCxEaW0xLERpbTIsaSxqLGs+CiAgICBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4
cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0yLGksaz4KICAgIChUZW5zb3JF
eHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNz
IFUsIGludCBEaW0wLCBpbnQgRGltMSwgaW50IERpbTIsCiAgY2hhciBpLCBjaGFyIGosIGNoYXIg
az4KY2xhc3MgVGVuc29yMl90aW1lc19UZW5zb3IyXzExCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8
QSxULERpbTAsRGltMSxpLGo+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMixE
aW0xLGssaj4gaXRlckI7CgogIHRlbXBsYXRlPGludCBDdXJyZW50X0RpbT4KICBwcm9tb3RlPFQs
VT46OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMiwKICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOKSBjb25zdAogIHsKICAgIHJldHVybiBp
dGVyQShOMSxDdXJyZW50X0RpbS0xKSppdGVyQihOMixDdXJyZW50X0RpbS0xKQogICAgICArIGV2
YWwoTjEsTjIsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwogIH0KICBwcm9tb3RlPFQsVT46OlYg
ZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMiwgY29uc3QgTnVtYmVyPDE+ICZOKSBjb25z
dAogIHsKICAgIHJldHVybiBpdGVyQShOMSwwKSppdGVyQihOMiwwKTsKICB9CnB1YmxpYzoKICBU
ZW5zb3IyX3RpbWVzX1RlbnNvcjJfMTEoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEs
aSxqPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIs
VSxEaW0yLERpbTEsayxqPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3Rl
PFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7
CiAgICByZXR1cm4gZXZhbChOMSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBp
bnQgRGltMiwKICBjaGFyIGksIGNoYXIgaiwgY2hhciBrPgppbmxpbmUgY29uc3QgVGVuc29yMl9F
eHByPGNvbnN0IFRlbnNvcjJfdGltZXNfVGVuc29yMl8xMQo8QSxCLFQsVSxEaW0wLERpbTEsRGlt
MixpLGosaz4scHJvbW90ZTxULFU+OjpWLERpbTAsRGltMixpLGs+Cm9wZXJhdG9yKihjb25zdCBU
ZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29y
Ml9FeHByPEIsVSxEaW0yLERpbTEsayxqPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90
aW1lc19UZW5zb3IyXzExPEEsQixULFUsRGltMCxEaW0xLERpbTIsaSxqLGs+CiAgICBUZW5zb3JF
eHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGlt
MCxEaW0yLGksaz4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgaW50IERpbTIs
CiAgY2hhciBpLCBjaGFyIGosIGNoYXIgaz4KY2xhc3MgVGVuc29yMl90aW1lc19UZW5zb3IyXzAw
CnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTEsRGltMCxqLGk+IGl0ZXJBOwogIGNvbnN0
IFRlbnNvcjJfRXhwcjxCLFUsRGltMSxEaW0yLGosaz4gaXRlckI7CgogIHRlbXBsYXRlPGludCBD
dXJyZW50X0RpbT4KICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IGlu
dCBOMiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZO
KSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShDdXJyZW50X0RpbS0xLE4xKSppdGVyQihDdXJy
ZW50X0RpbS0xLE4yKQogICAgICArIGV2YWwoTjEsTjIsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkp
OwogIH0KICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMiwg
Y29uc3QgTnVtYmVyPDE+ICZOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQSgwLE4xKSppdGVy
QigwLE4yKTsKICB9CnB1YmxpYzoKICBUZW5zb3IyX3RpbWVzX1RlbnNvcjJfMDAoY29uc3QgVGVu
c29yMl9FeHByPEEsVCxEaW0xLERpbTAsaixpPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0xLERpbTIsaixrPiAmYik6CiAgICBpdGVyQShh
KSwgaXRlckIoYikge30KICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEs
IGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gZXZhbChOMSxOMixOdW1iZXI8RGlt
MT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3Mg
VSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgRGltMiwKICBjaGFyIGksIGNoYXIgaiwgY2hhciBr
PgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0IFRlbnNvcjJfdGltZXNfVGVuc29yMl8w
MAo8QSxCLFQsVSxEaW0wLERpbTEsRGltMixpLGosaz4scHJvbW90ZTxULFU+OjpWLERpbTAsRGlt
MixpLGs+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTEsRGltMCxqLGk+ICZh
LAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0xLERpbTIsaixrPiAmYikKewog
IHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IyXzAwPEEsQixULFUsRGltMCxEaW0x
LERpbTIsaSxqLGs+CiAgICBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29y
RXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0yLGksaz4KICAgIChUZW5zb3JFeHByKGEsYikp
Owp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwgaW50IERpbTIsCiAgY2hhciBpLCBjaGFyIGosIGNoYXIgaz4KY2xhc3Mg
VGVuc29yMl90aW1lc19UZW5zb3IyXzAxCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTEs
RGltMCxqLGk+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMixEaW0xLGssaj4g
aXRlckI7CgogIHRlbXBsYXRlPGludCBDdXJyZW50X0RpbT4KICBwcm9tb3RlPFQsVT46OlYgZXZh
bChjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShDdXJy
ZW50X0RpbS0xLE4xKSppdGVyQihOMixDdXJyZW50X0RpbS0xKQogICAgICArIGV2YWwoTjEsTjIs
TnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwogIH0KICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25z
dCBpbnQgTjEsIGNvbnN0IGludCBOMiwgY29uc3QgTnVtYmVyPDE+ICZOKSBjb25zdAogIHsKICAg
IHJldHVybiBpdGVyQSgwLE4xKSppdGVyQihOMiwwKTsKICB9CnB1YmxpYzoKICBUZW5zb3IyX3Rp
bWVzX1RlbnNvcjJfMDEoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0xLERpbTAsaixpPiAmYSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0yLERp
bTEsayxqPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3RlPFQsVT46OlYg
b3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1
cm4gZXZhbChOMSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwg
Y2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgRGltMiwK
ICBjaGFyIGksIGNoYXIgaiwgY2hhciBrPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0
IFRlbnNvcjJfdGltZXNfVGVuc29yMl8wMQo8QSxCLFQsVSxEaW0wLERpbTEsRGltMixpLGosaz4s
cHJvbW90ZTxULFU+OjpWLERpbTAsRGltMixpLGs+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IyX0V4
cHI8QSxULERpbTEsRGltMCxqLGk+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIs
VSxEaW0yLERpbTEsayxqPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5z
b3IyXzAxPEEsQixULFUsRGltMCxEaW0xLERpbTIsaSxqLGs+CiAgICBUZW5zb3JFeHByOwogIHJl
dHVybiBUZW5zb3IyX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0yLGks
az4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIs
IGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgaW50IERpbTIsCiAgaW50IERp
bTMsIGNoYXIgaSwgY2hhciBqLCBjaGFyIGssIGNoYXIgbD4KY2xhc3MgVGVuc29yMl90aW1lc19U
ZW5zb3IyCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+IGl0ZXJBOwog
IGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMixEaW0zLGssbD4gaXRlckI7CnB1YmxpYzoKICBU
ZW5zb3IyX3RpbWVzX1RlbnNvcjIoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxq
PiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0y
LERpbTMsayxsPiAmYikKICAgIDogaXRlckEoYSksIGl0ZXJCKGIpIHt9CiAgcHJvbW90ZTxULFU+
OjpWIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25zdCBpbnQgTjIsIGNvbnN0IGludCBOMywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgTjQpIGNvbnN0CiAgewogICAg
cmV0dXJuIGl0ZXJBKE4xLE4yKSppdGVyQihOMyxONCk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3Mg
QSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgRGlt
MiwKICBpbnQgRGltMywgY2hhciBpLCBjaGFyIGosIGNoYXIgaywgY2hhciBsPgppbmxpbmUgVGVu
c29yNF9FeHByCjxjb25zdCBUZW5zb3IyX3RpbWVzX1RlbnNvcjI8QSxCLFQsVSxEaW0wLERpbTEs
RGltMixEaW0zLGksaixrLGw+LAogIHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEsRGltMixEaW0z
LGksaixrLGw+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+
ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0yLERpbTMsayxsPiAmYikK
ewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IyPEEsQixULFUsRGltMCxEaW0x
LERpbTIsRGltMyxpLGosayxsPgogICAgVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yNF9FeHBy
PFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbTAsRGltMSxEaW0yLERpbTMsaSxqLGssbD4K
ICAgIChUZW5zb3JFeHByKGEsYikpOwp9CiMgMTAgIi4uLy4uL1RlbnNvcjIvVGVuc29yMl9FeHBy
LmgiIDIKIyAxICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfY2FyYXRfVGVuc29yMi5oIiAxCiMgMTAg
Ii4uLy4uL1RlbnNvcjIvVGVuc29yMl9jYXJhdF9UZW5zb3IyLmgiCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGludCBEaW0xLAogIGNoYXIgaSwg
Y2hhciBqLCBjaGFyIGs+CmNsYXNzIFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMAp7CiAgY29uc3Qg
VGVuc29yMl9FeHByPEEsVCxEaW0sRGltMSxpLGo+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhw
cjxCLFUsRGltMSxEaW0saixrPiBpdGVyQjsKCiAgdGVtcGxhdGU8aW50IEN1cnJlbnRfRGltPgog
IHByb21vdGU8VCxVPjo6ViBldmFsKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yLAogICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4pIGNvbnN0CiAgewog
ICAgcmV0dXJuIGl0ZXJBKE4xLEN1cnJlbnRfRGltLTEpKml0ZXJCKEN1cnJlbnRfRGltLTEsTjIp
CiAgICAgICsgZXZhbChOMSxOMixOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7CiAgfQogIHByb21v
dGU8VCxVPjo6ViBldmFsKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yLCBjb25zdCBOdW1iZXI8
MT4gJk4pIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLDApKml0ZXJCKDAsTjIpOwogIH0K
cHVibGljOgogIFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMChjb25zdCBUZW5zb3IyX0V4cHI8QSxU
LERpbSxEaW0xLGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNv
cjJfRXhwcjxCLFUsRGltMSxEaW0saixrPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30K
ICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikg
Y29uc3QKICB7CiAgICByZXR1cm4gZXZhbChOMSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbSwgaW50
IERpbTEsCiAgY2hhciBpLCBjaGFyIGosIGNoYXIgaz4KaW5saW5lIGNvbnN0IFRlbnNvcjJfc3lt
bWV0cmljX0V4cHIKPGNvbnN0IFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMDxBLEIsVCxVLERpbSxE
aW0xLGksaixrPiwKICBwcm9tb3RlPFQsVT46OlYsRGltLGksaz4Kb3BlcmF0b3JeKGNvbnN0IFRl
bnNvcjJfRXhwcjxBLFQsRGltLERpbTEsaSxqPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjJf
RXhwcjxCLFUsRGltMSxEaW0saixrPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9jYXJh
dF9UZW5zb3IyXzEwPEEsQixULFUsRGltLERpbTEsaSxqLGs+IFRlbnNvckV4cHI7CiAgcmV0dXJu
IFRlbnNvcjJfc3ltbWV0cmljX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGks
az4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIs
IGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0sIGludCBEaW0xLAogIGNoYXIgaSwgY2hhciBqLCBj
aGFyIGs+CmNsYXNzIFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMQp7CiAgY29uc3QgVGVuc29yMl9F
eHByPEEsVCxEaW0sRGltMSxpLGo+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGlt
LERpbTEsayxqPiBpdGVyQjsKCiAgdGVtcGxhdGU8aW50IEN1cnJlbnRfRGltPgogIHByb21vdGU8
VCxVPjo6ViBldmFsKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yLAogICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4pIGNvbnN0CiAgewogICAgcmV0dXJu
IGl0ZXJBKE4xLEN1cnJlbnRfRGltLTEpKml0ZXJCKE4yLEN1cnJlbnRfRGltLTEpCiAgICAgICsg
ZXZhbChOMSxOMixOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7CiAgfQogIHByb21vdGU8VCxVPjo6
ViBldmFsKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yLCBjb25zdCBOdW1iZXI8MT4gJk4pIGNv
bnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLDApKml0ZXJCKE4yLDApOwogIH0KcHVibGljOgog
IFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMShjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbSxEaW0x
LGksaj4gJmEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxC
LFUsRGltLERpbTEsayxqPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3Rl
PFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7
CiAgICByZXR1cm4gZXZhbChOMSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbSwgaW50IERpbTEsCiAg
Y2hhciBpLCBjaGFyIGosIGNoYXIgaz4KaW5saW5lIGNvbnN0IFRlbnNvcjJfc3ltbWV0cmljX0V4
cHIKPGNvbnN0IFRlbnNvcjJfY2FyYXRfVGVuc29yMl8xMTxBLEIsVCxVLERpbSxEaW0xLGksaixr
PiwKICBwcm9tb3RlPFQsVT46OlYsRGltLGksaz4Kb3BlcmF0b3JeKGNvbnN0IFRlbnNvcjJfRXhw
cjxBLFQsRGltLERpbTEsaSxqPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUs
RGltLERpbTEsayxqPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9jYXJhdF9UZW5zb3Iy
XzExPEEsQixULFUsRGltLERpbTEsaSxqLGs+IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjJf
c3ltbWV0cmljX0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGksaz4KICAgIChU
ZW5zb3JFeHByKGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQs
IGNsYXNzIFUsIGludCBEaW0sIGludCBEaW0xLAogIGNoYXIgaSwgY2hhciBqLCBjaGFyIGs+CmNs
YXNzIFRlbnNvcjJfY2FyYXRfVGVuc29yMl8wMAp7CiAgY29uc3QgVGVuc29yMl9FeHByPEEsVCxE
aW0xLERpbSxqLGk+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMSxEaW0saixr
PiBpdGVyQjsKCiAgdGVtcGxhdGU8aW50IEN1cnJlbnRfRGltPgogIHByb21vdGU8VCxVPjo6ViBl
dmFsKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yLAogICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IE51bWJlcjxDdXJyZW50X0RpbT4gJk4pIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKEN1
cnJlbnRfRGltLTEsTjEpKml0ZXJCKEN1cnJlbnRfRGltLTEsTjIpCiAgICAgICsgZXZhbChOMSxO
MixOdW1iZXI8Q3VycmVudF9EaW0tMT4oKSk7CiAgfQogIHByb21vdGU8VCxVPjo6ViBldmFsKGNv
bnN0IGludCBOMSwgY29uc3QgaW50IE4yLCBjb25zdCBOdW1iZXI8MT4gJk4pIGNvbnN0CiAgewog
ICAgcmV0dXJuIGl0ZXJBKDAsTjEpKml0ZXJCKDAsTjIpOwogIH0KcHVibGljOgogIFRlbnNvcjJf
Y2FyYXRfVGVuc29yMl8wMChjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTEsRGltLGosaT4gJmEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMSxE
aW0saixrPiAmYik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3RlPFQsVT46OlYg
b3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1
cm4gZXZhbChOMSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwg
Y2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbSwgaW50IERpbTEsCiAgY2hhciBpLCBj
aGFyIGosIGNoYXIgaz4KaW5saW5lIGNvbnN0IFRlbnNvcjJfc3ltbWV0cmljX0V4cHIKPGNvbnN0
IFRlbnNvcjJfY2FyYXRfVGVuc29yMl8wMDxBLEIsVCxVLERpbSxEaW0xLGksaixrPiwKICBwcm9t
b3RlPFQsVT46OlYsRGltLGksaz4Kb3BlcmF0b3JeKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGlt
MSxEaW0saixpPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMSxEaW0s
aixrPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9jYXJhdF9UZW5zb3IyXzAwPEEsQixU
LFUsRGltLERpbTEsaSxqLGs+IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjJfc3ltbWV0cmlj
X0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGksaz4KICAgIChUZW5zb3JFeHBy
KGEsYikpOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUs
IGludCBEaW0sIGludCBEaW0xLAogIGNoYXIgaSwgY2hhciBqLCBjaGFyIGs+CmNsYXNzIFRlbnNv
cjJfY2FyYXRfVGVuc29yMl8wMQp7CiAgY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0xLERpbSxq
LGk+IGl0ZXJBOwogIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltLERpbTEsayxqPiBpdGVyQjsK
CiAgdGVtcGxhdGU8aW50IEN1cnJlbnRfRGltPgogIHByb21vdGU8VCxVPjo6ViBldmFsKGNvbnN0
IGludCBOMSwgY29uc3QgaW50IE4yLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJl
cjxDdXJyZW50X0RpbT4gJk4pIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKEN1cnJlbnRfRGlt
LTEsTjEpKml0ZXJCKE4yLEN1cnJlbnRfRGltLTEpCiAgICAgICsgZXZhbChOMSxOMixOdW1iZXI8
Q3VycmVudF9EaW0tMT4oKSk7CiAgfQogIHByb21vdGU8VCxVPjo6ViBldmFsKGNvbnN0IGludCBO
MSwgY29uc3QgaW50IE4yLCBjb25zdCBOdW1iZXI8MT4gJk4pIGNvbnN0CiAgewogICAgcmV0dXJu
IGl0ZXJBKDAsTjEpKml0ZXJCKE4yLDApOwogIH0KcHVibGljOgogIFRlbnNvcjJfY2FyYXRfVGVu
c29yMl8wMShjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTEsRGltLGosaT4gJmEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltLERpbTEsayxqPiAm
Yik6CiAgICBpdGVyQShhKSwgaXRlckIoYikge30KICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3Io
KShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gZXZhbChO
MSxOMixOdW1iZXI8RGltMT4oKSk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwg
Y2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbSwgaW50IERpbTEsCiAgY2hhciBpLCBjaGFyIGosIGNo
YXIgaz4KaW5saW5lIGNvbnN0IFRlbnNvcjJfc3ltbWV0cmljX0V4cHIKPGNvbnN0IFRlbnNvcjJf
Y2FyYXRfVGVuc29yMl8wMTxBLEIsVCxVLERpbSxEaW0xLGksaixrPiwKICBwcm9tb3RlPFQsVT46
OlYsRGltLGksaz4Kb3BlcmF0b3JeKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMSxEaW0saixp
PiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltLERpbTEsayxqPiAmYikK
ewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9jYXJhdF9UZW5zb3IyXzAxPEEsQixULFUsRGltLERp
bTEsaSxqLGs+IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjJfc3ltbWV0cmljX0V4cHI8VGVu
c29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltLGksaz4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9
CiMgMTEgIi4uLy4uL1RlbnNvcjIvVGVuc29yMl9FeHByLmgiIDIKIyAxICIuLi8uLi9UZW5zb3Iy
L1RlbnNvcjJfdGltZXNfVGVuc29yMS5oIiAxCgoKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4K
Y2xhc3MgVGVuc29yMl90aW1lc19UZW5zb3IxXzEKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQs
RGltMCxEaW0xLGksaj4gaXRlckE7CiAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0xLGo+IGl0
ZXJCOwoKICB0ZW1wbGF0ZTxpbnQgQ3VycmVudF9EaW0+CiAgcHJvbW90ZTxULFU+OjpWIGV2YWwo
Y29uc3QgaW50IE4xLCBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZOKSBjb25zdAogIHsKICAg
IHJldHVybiBpdGVyQShOMSxDdXJyZW50X0RpbS0xKSppdGVyQihDdXJyZW50X0RpbS0xKQogICAg
ICArIGV2YWwoTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwogIH0KICBwcm9tb3RlPFQsVT46
OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IE51bWJlcjwxPiAmTikgY29uc3QKICB7CiAgICBy
ZXR1cm4gaXRlckEoTjEsMCkqaXRlckIoMCk7CiAgfQpwdWJsaWM6CiAgVGVuc29yMl90aW1lc19U
ZW5zb3IxXzEoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTEsaj4gJmIpOgog
ICAgaXRlckEoYSksIGl0ZXJCKGIpIHt9CiAgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29u
c3QgaW50IE4xKSBjb25zdAogIHsKICAgIHJldHVybiBldmFsKE4xLE51bWJlcjxEaW0xPigpKTsK
ICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQg
RGltMCwgaW50IERpbTEsIGNoYXIgaSxjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IxX0V4cHI8
Y29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IxXzE8QSxCLFQsVSxEaW0wLERpbTEsaSxqPiwKICBw
cm9tb3RlPFQsVT46OlYsRGltMCxpPgpvcGVyYXRvciooY29uc3QgVGVuc29yMl9FeHByPEEsVCxE
aW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMSxq
PiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IxXzE8QSxCLFQsVSxE
aW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IxX0V4cHI8VGVuc29yRXhw
cixwcm9tb3RlPFQsVT46OlYsRGltMCxpPihUZW5zb3JFeHByKGEsYikpOwp9CgoKCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwg
Y2hhciBpLGNoYXIgaj4KY2xhc3MgVGVuc29yMl90aW1lc19UZW5zb3IxXzAKewogIGNvbnN0IFRl
bnNvcjJfRXhwcjxBLFQsRGltMSxEaW0wLGosaT4gaXRlckE7CiAgY29uc3QgVGVuc29yMV9FeHBy
PEIsVSxEaW0xLGo+IGl0ZXJCOwoKICB0ZW1wbGF0ZTxpbnQgQ3VycmVudF9EaW0+CiAgcHJvbW90
ZTxULFU+OjpWIGV2YWwoY29uc3QgaW50IE4xLCBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0+ICZO
KSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShDdXJyZW50X0RpbS0xLE4xKSppdGVyQihDdXJy
ZW50X0RpbS0xKQogICAgICArIGV2YWwoTjEsTnVtYmVyPEN1cnJlbnRfRGltLTE+KCkpOwogIH0K
ICBwcm9tb3RlPFQsVT46OlYgZXZhbChjb25zdCBpbnQgTjEsIGNvbnN0IE51bWJlcjwxPiAmTikg
Y29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoMCxOMSkqaXRlckIoMCk7CiAgfQpwdWJsaWM6CiAg
VGVuc29yMl90aW1lc19UZW5zb3IxXzAoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0xLERpbTAs
aixpPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IxX0V4cHI8QixV
LERpbTEsaj4gJmIpOgogICAgaXRlckEoYSksIGl0ZXJCKGIpIHt9CiAgcHJvbW90ZTxULFU+OjpW
IG9wZXJhdG9yKCkoY29uc3QgaW50IE4xKSBjb25zdAogIHsKICAgIHJldHVybiBldmFsKE4xLE51
bWJlcjxEaW0xPigpKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBU
LCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSxjaGFyIGo+CmlubGluZSBjb25z
dCBUZW5zb3IxX0V4cHI8Y29uc3QgVGVuc29yMl90aW1lc19UZW5zb3IxXzA8QSxCLFQsVSxEaW0w
LERpbTEsaSxqPiwKICBwcm9tb3RlPFQsVT46OlYsRGltMCxpPgpvcGVyYXRvciooY29uc3QgVGVu
c29yMl9FeHByPEEsVCxEaW0xLERpbTAsaixpPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjFf
RXhwcjxCLFUsRGltMSxqPiAmYikKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90aW1lc19UZW5z
b3IxXzA8QSxCLFQsVSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3Ix
X0V4cHI8VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxpPihUZW5zb3JFeHByKGEsYikp
Owp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwgY2hhciBpLGNoYXIgaj4KaW5saW5lIGNvbnN0IFRlbnNvcjFfRXhwcjxj
b25zdCBUZW5zb3IyX3RpbWVzX1RlbnNvcjFfMTxBLEIsVCxVLERpbTAsRGltMSxpLGo+LAogIHBy
b21vdGU8VCxVPjo6VixEaW0wLGk+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IxX0V4cHI8QixVLERp
bTEsaj4gJmIsCiAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+
ICZhKQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX3RpbWVzX1RlbnNvcjFfMTxBLEIsVCxVLERp
bTAsRGltMSxpLGo+IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRlbnNvcjFfRXhwcjxUZW5zb3JFeHBy
LHByb21vdGU8VCxVPjo6VixEaW0wLGk+KFRlbnNvckV4cHIoYSxiKSk7Cn0KCgoKdGVtcGxhdGU8
Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBj
aGFyIGksY2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29yMV9FeHByPGNvbnN0IFRlbnNvcjJfdGlt
ZXNfVGVuc29yMV8wPEEsQixULFUsRGltMCxEaW0xLGksaj4sCiAgcHJvbW90ZTxULFU+OjpWLERp
bTAsaT4Kb3BlcmF0b3IqKGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMSxqPiAmYiwKICAgICAg
ICAgIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMSxEaW0wLGosaT4gJmEpCnsKICB0eXBlZGVm
IGNvbnN0IFRlbnNvcjJfdGltZXNfVGVuc29yMV8wPEEsQixULFUsRGltMCxEaW0xLGksaj4gVGVu
c29yRXhwcjsKICByZXR1cm4gVGVuc29yMV9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpW
LERpbTAsaT4oVGVuc29yRXhwcihhLGIpKTsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBC
LCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGludCBEaW0yLAogIGNoYXIg
aSwgY2hhciBqLCBjaGFyIGs+CmNsYXNzIFRlbnNvcjJfdGltZXNfVGVuc29yMQp7CiAgY29uc3Qg
VGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiBpdGVyQTsKICBjb25zdCBUZW5zb3IxX0V4
cHI8QixVLERpbTIsaz4gaXRlckI7CnB1YmxpYzoKICBUZW5zb3IyX3RpbWVzX1RlbnNvcjEoY29u
c3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0yLGs+ICZiKToKICAgIGl0ZXJBKGEpLCBp
dGVyQihiKSB7fQogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29u
c3QgaW50IE4yLCBjb25zdCBpbnQgTjMpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLE4y
KSppdGVyQihOMyk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwg
Y2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgRGltMiwKICBjaGFyIGksIGNoYXIgaiwg
Y2hhciBrPgppbmxpbmUgY29uc3QgVGVuc29yM19FeHByPGNvbnN0IFRlbnNvcjJfdGltZXNfVGVu
c29yMTxBLEIsVCxVLERpbTAsRGltMSxEaW0yLGksaixrPiwKICBwcm9tb3RlPFQsVT46OlYsRGlt
MCxEaW0xLERpbTIsaSxqLGs+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAs
RGltMSxpLGo+ICZhLAogICAgICAgICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0yLGs+ICZi
KQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX3RpbWVzX1RlbnNvcjE8QSxCLFQsVSxEaW0wLERp
bTEsRGltMixpLGosaz4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yM19FeHByPFRlbnNvckV4
cHIscHJvbW90ZTxULFU+OjpWLERpbTAsRGltMSxEaW0yLGksaixrPgogICAgKFRlbnNvckV4cHIo
YSxiKSk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwg
aW50IERpbTAsIGludCBEaW0xLCBpbnQgRGltMiwKICBjaGFyIGksIGNoYXIgaiwgY2hhciBrPgpp
bmxpbmUgY29uc3QgVGVuc29yM19FeHByPGNvbnN0IFRlbnNvcjJfdGltZXNfVGVuc29yMTxBLEIs
VCxVLERpbTAsRGltMSxEaW0yLGksaixrPiwKICBwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLERp
bTIsaSxqLGs+Cm9wZXJhdG9yKihjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTIsaz4gJmIsCiAg
ICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhKQp7CiAgdHlw
ZWRlZiBjb25zdCBUZW5zb3IyX3RpbWVzX1RlbnNvcjE8QSxCLFQsVSxEaW0wLERpbTEsRGltMixp
LGosaz4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yM19FeHByPFRlbnNvckV4cHIscHJvbW90
ZTxULFU+OjpWLERpbTAsRGltMSxEaW0yLGksaixrPgogICAgKFRlbnNvckV4cHIoYSxiKSk7Cn0K
IyAxMiAiLi4vLi4vVGVuc29yMi9UZW5zb3IyX0V4cHIuaCIgMgojIDEgIi4uLy4uL1RlbnNvcjIv
VGVuc29yMl9hbmRfVGVuc29yMS5oIiAxCgoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwg
Y2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksY2hhciBqPgpjbGFz
cyBUZW5zb3IyX2FuZF9UZW5zb3IxXzAKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxE
aW0xLGksaj4gaXRlckE7CiAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0wLGk+IGl0ZXJCOwpw
dWJsaWM6CiAgcHJvbW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25zdCBp
bnQgTjIpIGNvbnN0CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLE4yKSppdGVyQihOMSk7CiAgfQoK
ICBUZW5zb3IyX2FuZF9UZW5zb3IxXzAoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEs
aSxqPiAmYSwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMV9FeHByPEIsVSxE
aW0wLGk+ICZiKToKICAgIGl0ZXJBKGEpLCBpdGVyQihiKSB7fQp9OwoKdGVtcGxhdGU8Y2xhc3Mg
QSwgY2xhc3MgQiwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGks
Y2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0IFRlbnNvcjJfYW5kX1RlbnNv
cjFfMDxBLEIsVCxVLERpbTAsRGltMSxpLGo+LAogIHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEs
aSxqPgpvcGVyYXRvciYoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwK
ICAgICAgICAgIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMCxpPiAmYikKewogIHR5cGVkZWYg
Y29uc3QgVGVuc29yMl9hbmRfVGVuc29yMV8wPEEsQixULFUsRGltMCxEaW0xLGksaj4gVGVuc29y
RXhwcjsKICByZXR1cm4gVGVuc29yMl9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERp
bTAsRGltMSxpLGo+CiAgICAoVGVuc29yRXhwcihhLGIpKTsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBB
LCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSxj
aGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgVGVuc29yMl9hbmRfVGVuc29y
MV8wCjxBLEIsVCxVLERpbTAsRGltMSxpLGo+LHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEsaSxq
PgpvcGVyYXRvciYoY29uc3QgVGVuc29yMV9FeHByPEIsVSxEaW0wLGk+ICZiLAogICAgICAgICAg
Y29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSkKewogIHR5cGVkZWYgY29u
c3QgVGVuc29yMl9hbmRfVGVuc29yMV8wPEEsQixULFUsRGltMCxEaW0xLGksaj4gVGVuc29yRXhw
cjsKICByZXR1cm4gVGVuc29yMl9FeHByPFRlbnNvckV4cHIscHJvbW90ZTxULFU+OjpWLERpbTAs
RGltMSxpLGo+CiAgICAoVGVuc29yRXhwcihhLGIpKTsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBj
bGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsCiAgY2hhciBpLCBj
aGFyIGo+CmNsYXNzIFRlbnNvcjJfYW5kX1RlbnNvcjFfMQp7CiAgY29uc3QgVGVuc29yMl9FeHBy
PEEsVCxEaW0wLERpbTEsaSxqPiBpdGVyQTsKICBjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTEs
aj4gaXRlckI7CnB1YmxpYzoKICBwcm9tb3RlPFQsVT46OlYgb3BlcmF0b3IoKShjb25zdCBpbnQg
TjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gaXRlckEoTjEsTjIpKml0ZXJC
KE4yKTsKICB9CgogIFRlbnNvcjJfYW5kX1RlbnNvcjFfMShjb25zdCBUZW5zb3IyX0V4cHI8QSxU
LERpbTAsRGltMSxpLGo+ICZhLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3Ix
X0V4cHI8QixVLERpbTEsaj4gJmIpOgogICAgaXRlckEoYSksIGl0ZXJCKGIpIHt9Cn07Cgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERp
bTEsCiAgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgVGVu
c29yMl9hbmRfVGVuc29yMV8xCjxBLEIsVCxVLERpbTAsRGltMSxpLGo+LHByb21vdGU8VCxVPjo6
VixEaW0wLERpbTEsaSxqPgpvcGVyYXRvciYoY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERp
bTEsaSxqPiAmYSwKICAgICAgICAgIGNvbnN0IFRlbnNvcjFfRXhwcjxCLFUsRGltMSxqPiAmYikK
ewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9hbmRfVGVuc29yMV8xPEEsQixULFUsRGltMCxEaW0x
LGksaj4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMl9FeHByPFRlbnNvckV4cHIscHJvbW90
ZTxULFU+OjpWLERpbTAsRGltMSxpLGo+CiAgICAoVGVuc29yRXhwcihhLGIpKTsKfQoKCgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERp
bTEsCiAgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgVGVu
c29yMl9hbmRfVGVuc29yMV8xPEEsQixULFUsRGltMCxEaW0xLGksaj4sCiAgcHJvbW90ZTxULFU+
OjpWLERpbTAsRGltMSxpLGo+Cm9wZXJhdG9yJihjb25zdCBUZW5zb3IxX0V4cHI8QixVLERpbTEs
aj4gJmIsCiAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZh
KQp7CiAgdHlwZWRlZiBjb25zdCBUZW5zb3IyX2FuZF9UZW5zb3IxXzE8QSxCLFQsVSxEaW0wLERp
bTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8VGVuc29yRXhwcixwcm9t
b3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JFeHByKGEsYikpOwp9CiMgMTMg
Ii4uLy4uL1RlbnNvcjIvVGVuc29yMl9FeHByLmgiIDIKIyAxICIuLi8uLi9UZW5zb3IyL1RlbnNv
cjJfdGltZXNfZ2VuZXJpYy5oIiAxCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgY2xhc3Mg
VSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KY2xhc3MgVGVuc29yMl90aW1l
c19nZW5lcmljCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+IGl0ZXJB
OwogIGNvbnN0IFUgZDsKcHVibGljOgogIHByb21vdGU8VCxVPjo6ViBvcGVyYXRvcigpKGNvbnN0
IGludCBOMSwgY29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyQShOMSxOMikq
ZDsKICB9CgogIFRlbnNvcjJfdGltZXNfZ2VuZXJpYyhjb25zdCBUZW5zb3IyX0V4cHI8QSxULERp
bTAsRGltMSxpLGo+ICZhLCBjb25zdCBVICZkMCk6CiAgICBpdGVyQShhKSwgZChkMCkge30KfTsK
CnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwg
Y2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgVGVuc29yMl90
aW1lc19nZW5lcmljPEEsVCxVLERpbTAsRGltMSxpLGo+LAogIHByb21vdGU8VCxVPjo6VixEaW0w
LERpbTEsaSxqPgpvcGVyYXRvciooY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxq
PiAmYSwgY29uc3QgVSAmZDApCnsKICB0eXBlZGVmIGNvbnN0IFRlbnNvcjJfdGltZXNfZ2VuZXJp
YzxBLFQsVSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8
VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JFeHBy
KGEsZDApKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgY2xhc3MgVSwgaW50IERpbTAs
IGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KaW5saW5lIGNvbnN0IFRlbnNvcjJfRXhwcjxjb25z
dCBUZW5zb3IyX3RpbWVzX2dlbmVyaWM8QSxULFUsRGltMCxEaW0xLGksaj4sCiAgcHJvbW90ZTxU
LFU+OjpWLERpbTAsRGltMSxpLGo+Cm9wZXJhdG9yKihjb25zdCBVICZkMCwgY29uc3QgVGVuc29y
Ml9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSkKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl90
aW1lc19nZW5lcmljPEEsVCxVLERpbTAsRGltMSxpLGo+IFRlbnNvckV4cHI7CiAgcmV0dXJuIFRl
bnNvcjJfRXhwcjxUZW5zb3JFeHByLHByb21vdGU8VCxVPjo6VixEaW0wLERpbTEsaSxqPgogICAg
KFRlbnNvckV4cHIoYSxkMCkpOwp9CiMgMTQgIi4uLy4uL1RlbnNvcjIvVGVuc29yMl9FeHByLmgi
IDIKIyAxICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfZGl2aWRlX2dlbmVyaWMuaCIgMQoKCnRlbXBs
YXRlPGNsYXNzIEEsIGNsYXNzIFQsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBp
LCBjaGFyIGo+CmNsYXNzIFRlbnNvcjJfZGl2aWRlX2dlbmVyaWMKewogIGNvbnN0IFRlbnNvcjJf
RXhwcjxBLFQsRGltMCxEaW0xLGksaj4gaXRlckE7CiAgY29uc3QgVSBkOwpwdWJsaWM6CiAgcHJv
bW90ZTxULFU+OjpWIG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25zdCBpbnQgTjIpIGNvbnN0
CiAgewogICAgcmV0dXJuIGl0ZXJBKE4xLE4yKS9kOwogIH0KCiAgVGVuc29yMl9kaXZpZGVfZ2Vu
ZXJpYyhjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgVSAmZDApOgogICAgaXRlckEoYSksIGQoZDApIHt9Cn07Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNo
YXIgaSwgY2hhciBqPgppbmxpbmUgY29uc3QgVGVuc29yMl9FeHByPGNvbnN0IFRlbnNvcjJfZGl2
aWRlX2dlbmVyaWM8QSxULFUsRGltMCxEaW0xLGksaj4sCiAgcHJvbW90ZTxULFU+OjpWLERpbTAs
RGltMSxpLGo+Cm9wZXJhdG9yLyhjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+
ICZhLCBjb25zdCBVICZkMCkKewogIHR5cGVkZWYgY29uc3QgVGVuc29yMl9kaXZpZGVfZ2VuZXJp
YzxBLFQsVSxEaW0wLERpbTEsaSxqPiBUZW5zb3JFeHByOwogIHJldHVybiBUZW5zb3IyX0V4cHI8
VGVuc29yRXhwcixwcm9tb3RlPFQsVT46OlYsRGltMCxEaW0xLGksaj4KICAgIChUZW5zb3JFeHBy
KGEsZDApKTsKfQojIDE1ICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfRXhwci5oIiAyCiMgMSAiLi4v
Li4vVGVuc29yMi9UZW5zb3IyX3RyYW5zZm9ybS5oIiAxCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xh
c3MgQiwgY2xhc3MgVCwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KY2xhc3Mg
dHJhbnNmb3JtX1RlbnNvcjIKewogIGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGltMCxEaW0xLGks
aj4gaXRlckE7CiAgQiBmdW5jdGlvbjsKcHVibGljOgogIFQgb3BlcmF0b3IoKShjb25zdCBpbnQg
TjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICByZXR1cm4gZnVuY3Rpb24oaXRlckEoTjEs
TjIpKTsKICB9CgogIHRyYW5zZm9ybV9UZW5zb3IyKGNvbnN0IFRlbnNvcjJfRXhwcjxBLFQsRGlt
MCxEaW0xLGksaj4gJmEsIEIgZnVuYyk6CiAgICBpdGVyQShhKSwgZnVuY3Rpb24oZnVuYykge30K
fTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGlt
MSwgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgdHJhbnNm
b3JtX1RlbnNvcjI8QSxCLFQsRGltMCxEaW0xLGksaj4sVCxEaW0wLERpbTEsaSxqPgp0cmFuc2Zv
cm0oY29uc3QgVGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSwgQiBmdW5jdGlvbikK
ewogIHR5cGVkZWYgY29uc3QgdHJhbnNmb3JtX1RlbnNvcjI8QSxCLFQsRGltMCxEaW0xLGksaj4g
VGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29yMl9FeHByPFRlbnNvckV4cHIsVCxEaW0wLERpbTEs
aSxqPihUZW5zb3JFeHByKGEsZnVuY3Rpb24pKTsKfQojIDE2ICIuLi8uLi9UZW5zb3IyL1RlbnNv
cjJfRXhwci5oIiAyCiMgMSAiLi4vLi4vVGVuc29yMi9taW51c19UZW5zb3IyLmgiIDEKCgp0ZW1w
bGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBq
PgpjbGFzcyBtaW51c19UZW5zb3IyCnsKICBjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGlt
MSxpLGo+IGl0ZXJBOwpwdWJsaWM6CiAgVCBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29uc3Qg
aW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiAtaXRlckEoTjEsTjIpOwogIH0KCiAgbWludXNf
VGVuc29yMihjb25zdCBUZW5zb3IyX0V4cHI8QSxULERpbTAsRGltMSxpLGo+ICZhKTogaXRlckEo
YSkge30KfTsKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwg
Y2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25zdCBUZW5zb3IyX0V4cHI8Y29uc3QgbWludXNfVGVu
c29yMjxBLFQsRGltMCxEaW0xLGksaj4sVCxEaW0wLERpbTEsaSxqPgpvcGVyYXRvci0oY29uc3Qg
VGVuc29yMl9FeHByPEEsVCxEaW0wLERpbTEsaSxqPiAmYSkKewogIHR5cGVkZWYgY29uc3QgbWlu
dXNfVGVuc29yMjxBLFQsRGltMCxEaW0xLGksaj4gVGVuc29yRXhwcjsKICByZXR1cm4gVGVuc29y
Ml9FeHByPFRlbnNvckV4cHIsVCxEaW0wLERpbTEsaSxqPihUZW5zb3JFeHByKGEpKTsKfQojIDE3
ICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfRXhwci5oIiAyCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFz
cyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqPgpjbGFzcyBUZW5zb3IyX0V4
cHIKewogIEEgaXRlcjsKcHVibGljOgogIFRlbnNvcjJfRXhwcihBICZhKTogaXRlcihhKSB7fQog
IFQgb3BlcmF0b3IoKShjb25zdCBpbnQgTjEsIGNvbnN0IGludCBOMikgY29uc3QKICB7CiAgICBy
ZXR1cm4gaXRlcihOMSxOMik7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50
IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KY2xhc3MgVGVuc29yMl9FeHByPFRlbnNv
cjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4KewogIFRlbnNvcjI8QSxEaW0wLERpbTE+
ICZpdGVyOwpwdWJsaWM6CiAgVGVuc29yMl9FeHByKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZhKTog
aXRlcihhKSB7fQogIFQgJiBvcGVyYXRvcigpKGNvbnN0IGludCBOMSwgY29uc3QgaW50IE4yKQog
IHsKICAgIHJldHVybiBpdGVyKE4xLE4yKTsKICB9CiAgVCBvcGVyYXRvcigpKGNvbnN0IGludCBO
MSwgY29uc3QgaW50IE4yKSBjb25zdAogIHsKICAgIHJldHVybiBpdGVyKE4xLE4yKTsKICB9CgoK
CgoKICB0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPgogIGNvbnN0IFRlbnNvcjJfRXhwcjxUZW5z
b3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+ICYKICBvcGVyYXRvcj0oY29uc3QgVGVu
c29yMl9FeHByPEIsVSxEaW0wLERpbTEsaSxqPiAmcmVzdWx0KTsKCiAgY29uc3QgVGVuc29yMl9F
eHByPFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgogIG9wZXJhdG9yPShj
b25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAm
cmVzdWx0KTsKCiAgdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4KICBjb25zdCBUZW5zb3IyX0V4
cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAmCiAgb3BlcmF0b3IrPShj
b25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQpOwoKICB0ZW1wbGF0
ZTxjbGFzcyBCLCBjbGFzcyBVPgogIGNvbnN0IFRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxE
aW0xPixULERpbTAsRGltMSxpLGo+ICYKICBvcGVyYXRvci09KGNvbnN0IFRlbnNvcjJfRXhwcjxC
LFUsRGltMCxEaW0xLGksaj4gJnJlc3VsdCk7CgoKCiAgdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3Mg
VT4KICBjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEs
aSxqPiAmCiAgb3BlcmF0b3I9KGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMCxEaW0xLGosaT4g
JnJlc3VsdCk7CgogIHRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIFU+CiAgY29uc3QgVGVuc29yMl9F
eHByPFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgogIG9wZXJhdG9yKz0o
Y29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaixpPiAmcmVzdWx0KTsKCiAgdGVtcGxh
dGU8Y2xhc3MgQiwgY2xhc3MgVT4KICBjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAs
RGltMT4sVCxEaW0wLERpbTEsaSxqPiAmCiAgb3BlcmF0b3ItPShjb25zdCBUZW5zb3IyX0V4cHI8
QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQpOwoKCgogIHRlbXBsYXRlIDxjbGFzcyBCPgogIGNv
bnN0IFRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+ICYK
ICBvcGVyYXRvcj0oY29uc3QgQiAmZCk7CgogIHRlbXBsYXRlIDxjbGFzcyBCPgogIGNvbnN0IFRl
bnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+ICYKICBvcGVy
YXRvcis9KGNvbnN0IEIgJmQpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgQj4KICBjb25zdCBUZW5zb3Iy
X0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAmCiAgb3BlcmF0b3It
PShjb25zdCBCICZkKTsKCiAgdGVtcGxhdGUgPGNsYXNzIEI+CiAgY29uc3QgVGVuc29yMl9FeHBy
PFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgogIG9wZXJhdG9yKj0oY29u
c3QgQiAmZCk7CgogIHRlbXBsYXRlIDxjbGFzcyBCPgogIGNvbnN0IFRlbnNvcjJfRXhwcjxUZW5z
b3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+ICYKICBvcGVyYXRvci89KGNvbnN0IEIg
JmQpOwp9OwoKCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTAsIGludCBEaW0x
LCBjaGFyIGksIGNoYXIgaiwgaW50IE4+CmNsYXNzIFRlbnNvcjJfRXhwcjxUZW5zb3IzX2RnX251
bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0wLERpbTEsaSxqPgp7CiAgQSAmaXRlcjsKcHVibGljOgog
IFRlbnNvcjJfRXhwcihBICZhKTogaXRlcihhKSB7fQogIFQgJiBvcGVyYXRvcigpKGNvbnN0IGlu
dCBOMSwgY29uc3QgaW50IE4yKQogIHsKICAgIHJldHVybiBpdGVyKE4sTjEsTjIpOwogIH0KICBU
IG9wZXJhdG9yKCkoY29uc3QgaW50IE4xLCBjb25zdCBpbnQgTjIpIGNvbnN0CiAgewogICAgcmV0
dXJuIGl0ZXIoTixOMSxOMik7CiAgfQoKCgoKCiAgdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4K
ICBjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yM19kZ19udW1iZXJfcmhzXzA8QSxULE4+LFQsRGlt
MCxEaW0xLGksaj4gJgogIG9wZXJhdG9yPShjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGlt
MSxpLGo+ICZyZXN1bHQpOwoKICBjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yM19kZ19udW1iZXJf
cmhzXzA8QSxULE4+LFQsRGltMCxEaW0xLGksaj4gJgogIG9wZXJhdG9yPShjb25zdCBUZW5zb3Iy
X0V4cHI8VGVuc29yM19kZ19udW1iZXJfcmhzXzAKICAgICAgICAgICAgPEEsVCxOPixULERpbTAs
RGltMSxpLGo+ICZyZXN1bHQpOwoKfTsKCiMgMSAiLi4vLi4vVGVuc29yMi9UZW5zb3IyX0V4cHJf
ZXF1YWxzLmgiIDEKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosCiAgaW50IEN1cnJlbnRfRGltMCwgaW50IEN1
cnJlbnRfRGltMT4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0wPiAm
TjAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAm
TjEpCnsKICBpdGVyKEN1cnJlbnRfRGltMC0xLEN1cnJlbnRfRGltMS0xKT1yZXN1bHQoQ3VycmVu
dF9EaW0wLTEsQ3VycmVudF9EaW0xLTEpOwogIFQyX2VxdWFsc19UMihpdGVyLHJlc3VsdCxOdW1i
ZXI8Q3VycmVudF9EaW0wLTE+KCksTnVtYmVyPEN1cnJlbnRfRGltMT4oKSk7Cn0KCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBj
aGFyIGosCiAgaW50IEN1cnJlbnRfRGltMT4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX1QyKEEgJml0
ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAs
RGltMSxpLGo+ICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8
MT4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGlt
MT4gJk4xKQp7CiAgaXRlcigwLEN1cnJlbnRfRGltMS0xKT1yZXN1bHQoMCxDdXJyZW50X0RpbTEt
MSk7CiAgVDJfZXF1YWxzX1QyKGl0ZXIscmVzdWx0LE51bWJlcjxEaW0wPigpLE51bWJlcjxDdXJy
ZW50X0RpbTEtMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGlu
dCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+CmlubGluZSB2b2lkIFQyX2VxdWFsc19U
MihBICZpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIs
VSxEaW0wLERpbTEsaSxqPiAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TnVtYmVyPDE+ICZOMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjwxPiAm
TjEpCnsKICBpdGVyKDAsMCk9cmVzdWx0KDAsMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IFQsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+CnRlbXBsYXRlPGNsYXNzIEIs
IGNsYXNzIFU+IGlubGluZQpjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4s
VCxEaW0wLERpbTEsaSxqPiAmClRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERp
bTAsRGltMSxpLGo+OjoKb3BlcmF0b3I9KGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMCxEaW0x
LGksaj4gJnJlc3VsdCkKewogIFQyX2VxdWFsc19UMihpdGVyLHJlc3VsdCxOdW1iZXI8RGltMD4o
KSxOdW1iZXI8RGltMT4oKSk7CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+CmlubGluZSBjb25z
dCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAmClRl
bnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+OjoKb3BlcmF0
b3I9KGNvbnN0IFRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxp
LGo+ICZyZXN1bHQpCnsKICByZXR1cm4gb3BlcmF0b3I9PFRlbnNvcjI8QSxEaW0wLERpbTE+LFQ+
KHJlc3VsdCk7Cn0KCgoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVSwgaW50IERp
bTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaiwKICBpbnQgQ3VycmVudF9EaW0wLCBpbnQgQ3Vy
cmVudF9EaW0xPgppbmxpbmUgdm9pZCBUMl9wbHVzX2VxdWFsc19UMihBICZpdGVyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaSxqPiAm
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGlt
MD4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPEN1cnJlbnRfRGlt
MT4gJk4xKQp7CiAgaXRlcihDdXJyZW50X0RpbTAtMSxDdXJyZW50X0RpbTEtMSkrPXJlc3VsdChD
dXJyZW50X0RpbTAtMSxDdXJyZW50X0RpbTEtMSk7CiAgVDJfcGx1c19lcXVhbHNfVDIoaXRlcixy
ZXN1bHQsTnVtYmVyPEN1cnJlbnRfRGltMC0xPigpLE51bWJlcjxDdXJyZW50X0RpbTE+KCkpOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEs
IGNoYXIgaSwgY2hhciBqLAogIGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2b2lkIFQyX3BsdXNf
ZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3Iy
X0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBOdW1iZXI8MT4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVt
YmVyPEN1cnJlbnRfRGltMT4gJk4xKQp7CiAgaXRlcigwLEN1cnJlbnRfRGltMS0xKSs9cmVzdWx0
KDAsQ3VycmVudF9EaW0xLTEpOwogIFQyX3BsdXNfZXF1YWxzX1QyKGl0ZXIscmVzdWx0LE51bWJl
cjxEaW0wPigpLE51bWJlcjxDdXJyZW50X0RpbTEtMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEs
IGNsYXNzIEIsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+Cmlu
bGluZSB2b2lkIFQyX3BsdXNfZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLAogICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOMSkKewogIGl0ZXIoMCwwKSs9cmVzdWx0KDAsMCk7
Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBp
LCBjaGFyIGo+CnRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIFU+IGlubGluZQpjb25zdCBUZW5zb3Iy
X0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAmClRlbnNvcjJfRXhw
cjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+OjoKb3BlcmF0b3IrPShjb25z
dCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQpCnsKICBUMl9wbHVzX2Vx
dWFsc19UMihpdGVyLHJlc3VsdCxOdW1iZXI8RGltMD4oKSxOdW1iZXI8RGltMT4oKSk7CiAgcmV0
dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosCiAgaW50IEN1cnJlbnRfRGltMCwgaW50IEN1
cnJlbnRfRGltMT4KaW5saW5lIHZvaWQgVDJfbWludXNfZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+
ICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0wPiAmTjAsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0xPiAmTjEpCnsKICBpdGVyKEN1cnJlbnRfRGltMC0xLEN1cnJlbnRfRGltMS0xKS09cmVzdWx0
KEN1cnJlbnRfRGltMC0xLEN1cnJlbnRfRGltMS0xKTsKICBUMl9taW51c19lcXVhbHNfVDIoaXRl
cixyZXN1bHQsTnVtYmVyPEN1cnJlbnRfRGltMC0xPigpLE51bWJlcjxDdXJyZW50X0RpbTE+KCkp
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERp
bTEsIGNoYXIgaSwgY2hhciBqLAogIGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2b2lkIFQyX21p
bnVzX2VxdWFsc19UMihBICZpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVu
c29yMl9FeHByPEIsVSxEaW0wLERpbTEsaSxqPiAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTnVtYmVyPDE+ICZOMCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE51bWJlcjxDdXJyZW50X0RpbTE+ICZOMSkKewogIGl0ZXIoMCxDdXJyZW50X0RpbTEtMSktPXJl
c3VsdCgwLEN1cnJlbnRfRGltMS0xKTsKICBUMl9taW51c19lcXVhbHNfVDIoaXRlcixyZXN1bHQs
TnVtYmVyPERpbTA+KCksTnVtYmVyPEN1cnJlbnRfRGltMS0xPigpKTsKfQoKdGVtcGxhdGU8Y2xh
c3MgQSwgY2xhc3MgQiwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIg
aj4KaW5saW5lIHZvaWQgVDJfbWludXNfZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgTnVtYmVyPDE+ICZOMSkKewogIGl0ZXIoMCwwKS09cmVzdWx0
KDAsMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwg
Y2hhciBpLCBjaGFyIGo+CnRlbXBsYXRlPGNsYXNzIEIsIGNsYXNzIFU+IGlubGluZQpjb25zdCBU
ZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPiAmClRlbnNv
cjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+OjoKb3BlcmF0b3It
PShjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQpCnsKICBUMl9t
aW51c19lcXVhbHNfVDIoaXRlcixyZXN1bHQsTnVtYmVyPERpbTA+KCksTnVtYmVyPERpbTE+KCkp
OwogIHJldHVybiAqdGhpczsKfQoKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNz
IFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosCiAgaW50IEN1cnJlbnRfRGlt
MCwgaW50IEN1cnJlbnRfRGltMT4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX3N3aXRjaGVkX1QyCihB
ICZpdGVyLCBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQsCiBj
b25zdCBOdW1iZXI8Q3VycmVudF9EaW0wPiAmTjAsIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTE+
ICZOMSkKewogIGl0ZXIoQ3VycmVudF9EaW0wLTEsQ3VycmVudF9EaW0xLTEpPXJlc3VsdChDdXJy
ZW50X0RpbTEtMSxDdXJyZW50X0RpbTAtMSk7CiAgVDJfZXF1YWxzX3N3aXRjaGVkX1QyKGl0ZXIs
cmVzdWx0LE51bWJlcjxDdXJyZW50X0RpbTAtMT4oKSwKICAgICAgICAgICAgICAgICAgICAgICAg
TnVtYmVyPEN1cnJlbnRfRGltMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNs
YXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosCiAgaW50IEN1cnJlbnRf
RGltMT4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX3N3aXRjaGVkX1QyCihBICZpdGVyLCBjb25zdCBU
ZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQsCiBjb25zdCBOdW1iZXI8MT4g
Jk4wLCBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAmTjEpCnsKICBpdGVyKDAsQ3VycmVudF9E
aW0xLTEpPXJlc3VsdChDdXJyZW50X0RpbTEtMSwwKTsKICBUMl9lcXVhbHNfc3dpdGNoZWRfVDIo
aXRlcixyZXN1bHQsTnVtYmVyPERpbTA+KCksTnVtYmVyPEN1cnJlbnRfRGltMS0xPigpKTsKfQoK
dGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBj
aGFyIGksIGNoYXIgaj4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX3N3aXRjaGVkX1QyCihBICZpdGVy
LCBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQsCiBjb25zdCBO
dW1iZXI8MT4gJk4wLCBjb25zdCBOdW1iZXI8MT4gJk4xKQp7CiAgaXRlcigwLDApPXJlc3VsdCgw
LDApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNo
YXIgaSwgY2hhciBqPgp0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVu
c29yMl9FeHByPFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgpUZW5zb3Iy
X0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPjo6Cm9wZXJhdG9yPShj
b25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQpCnsKICBUMl9lcXVh
bHNfc3dpdGNoZWRfVDIoaXRlcixyZXN1bHQsTnVtYmVyPERpbTA+KCksTnVtYmVyPERpbTE+KCkp
OwogIHJldHVybiAqdGhpczsKfQoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBV
LCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqLAogIGludCBDdXJyZW50X0RpbTAs
IGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2b2lkIFQyX3BsdXNfZXF1YWxzX3N3aXRjaGVkX1Qy
CihBICZpdGVyLCBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQs
CiBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0wPiAmTjAsIGNvbnN0IE51bWJlcjxDdXJyZW50X0Rp
bTE+ICZOMSkKewogIGl0ZXIoQ3VycmVudF9EaW0wLTEsQ3VycmVudF9EaW0xLTEpKz1yZXN1bHQo
Q3VycmVudF9EaW0xLTEsQ3VycmVudF9EaW0wLTEpOwogIFQyX3BsdXNfZXF1YWxzX3N3aXRjaGVk
X1QyKGl0ZXIscmVzdWx0LE51bWJlcjxDdXJyZW50X0RpbTAtMT4oKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgTnVtYmVyPEN1cnJlbnRfRGltMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIEIsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosCiAgaW50
IEN1cnJlbnRfRGltMT4KaW5saW5lIHZvaWQgVDJfcGx1c19lcXVhbHNfc3dpdGNoZWRfVDIKKEEg
Jml0ZXIsIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMCxEaW0xLGosaT4gJnJlc3VsdCwKIGNv
bnN0IE51bWJlcjwxPiAmTjAsIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTE+ICZOMSkKewogIGl0
ZXIoMCxDdXJyZW50X0RpbTEtMSkrPXJlc3VsdChDdXJyZW50X0RpbTEtMSwwKTsKICBUMl9wbHVz
X2VxdWFsc19zd2l0Y2hlZF9UMihpdGVyLHJlc3VsdCxOdW1iZXI8RGltMD4oKSxOdW1iZXI8Q3Vy
cmVudF9EaW0xLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBp
bnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqPgppbmxpbmUgdm9pZCBUMl9wbHVzX2Vx
dWFsc19zd2l0Y2hlZF9UMgooQSAmaXRlciwgY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERp
bTEsaixpPiAmcmVzdWx0LAogY29uc3QgTnVtYmVyPDE+ICZOMCwgY29uc3QgTnVtYmVyPDE+ICZO
MSkKewogIGl0ZXIoMCwwKSs9cmVzdWx0KDAsMCk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNz
IFQsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+CnRlbXBsYXRlPGNsYXNzIEIs
IGNsYXNzIFU+IGlubGluZQpjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4s
VCxEaW0wLERpbTEsaSxqPiAmClRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERp
bTAsRGltMSxpLGo+OjoKb3BlcmF0b3IrPShjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGlt
MSxqLGk+ICZyZXN1bHQpCnsKICBUMl9wbHVzX2VxdWFsc19zd2l0Y2hlZF9UMihpdGVyLHJlc3Vs
dCxOdW1iZXI8RGltMD4oKSxOdW1iZXI8RGltMT4oKSk7CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRl
bXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgY2hh
ciBpLCBjaGFyIGosCiAgaW50IEN1cnJlbnRfRGltMCwgaW50IEN1cnJlbnRfRGltMT4KaW5saW5l
IHZvaWQgVDJfbWludXNfZXF1YWxzX3N3aXRjaGVkX1QyCihBICZpdGVyLCBjb25zdCBUZW5zb3Iy
X0V4cHI8QixVLERpbTAsRGltMSxqLGk+ICZyZXN1bHQsCiBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0wPiAmTjAsIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTE+ICZOMSkKewogIGl0ZXIoQ3VycmVu
dF9EaW0wLTEsQ3VycmVudF9EaW0xLTEpLT1yZXN1bHQoQ3VycmVudF9EaW0xLTEsQ3VycmVudF9E
aW0wLTEpOwogIFQyX21pbnVzX2VxdWFsc19zd2l0Y2hlZF9UMihpdGVyLHJlc3VsdCxOdW1iZXI8
Q3VycmVudF9EaW0wLTE+KCksCiAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlcjxDdXJyZW50
X0RpbTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGlt
MCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqLAogIGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2
b2lkIFQyX21pbnVzX2VxdWFsc19zd2l0Y2hlZF9UMgooQSAmaXRlciwgY29uc3QgVGVuc29yMl9F
eHByPEIsVSxEaW0wLERpbTEsaixpPiAmcmVzdWx0LAogY29uc3QgTnVtYmVyPDE+ICZOMCwgY29u
c3QgTnVtYmVyPEN1cnJlbnRfRGltMT4gJk4xKQp7CiAgaXRlcigwLEN1cnJlbnRfRGltMS0xKS09
cmVzdWx0KEN1cnJlbnRfRGltMS0xLDApOwogIFQyX21pbnVzX2VxdWFsc19zd2l0Y2hlZF9UMihp
dGVyLHJlc3VsdCxOdW1iZXI8RGltMD4oKSxOdW1iZXI8Q3VycmVudF9EaW0xLTE+KCkpOwp9Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGNo
YXIgaSwgY2hhciBqPgppbmxpbmUgdm9pZCBUMl9taW51c19lcXVhbHNfc3dpdGNoZWRfVDIKKEEg
Jml0ZXIsIGNvbnN0IFRlbnNvcjJfRXhwcjxCLFUsRGltMCxEaW0xLGosaT4gJnJlc3VsdCwKIGNv
bnN0IE51bWJlcjwxPiAmTjAsIGNvbnN0IE51bWJlcjwxPiAmTjEpCnsKICBpdGVyKDAsMCktPXJl
c3VsdCgwLDApOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERp
bTEsIGNoYXIgaSwgY2hhciBqPgp0ZW1wbGF0ZTxjbGFzcyBCLCBjbGFzcyBVPiBpbmxpbmUKY29u
c3QgVGVuc29yMl9FeHByPFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgpU
ZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPjo6Cm9wZXJh
dG9yLT0oY29uc3QgVGVuc29yMl9FeHByPEIsVSxEaW0wLERpbTEsaixpPiAmcmVzdWx0KQp7CiAg
VDJfbWludXNfZXF1YWxzX3N3aXRjaGVkX1QyKGl0ZXIscmVzdWx0LE51bWJlcjxEaW0wPigpLE51
bWJlcjxEaW0xPigpKTsKICByZXR1cm4gKnRoaXM7Cn0KCgoKCgp0ZW1wbGF0ZTxjbGFzcyBBLCBj
bGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsCiAgaW50IEN1cnJlbnRfRGltMCwgaW50IEN1cnJl
bnRfRGltMT4KaW5saW5lIHZvaWQgVDJfZXF1YWxzX2dlbmVyaWMoVGVuc29yMjxBLERpbTAsRGlt
MT4gJml0ZXIsIGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IE51bWJlcjxDdXJyZW50X0RpbTA+ICZOMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTnVtYmVyPEN1cnJlbnRfRGltMT4gJk4xKQp7CiAgaXRlcihDdXJyZW50X0RpbTAtMSxD
dXJyZW50X0RpbTEtMSk9dTsKICBUMl9lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPEN1cnJl
bnRfRGltMC0xPigpLE51bWJlcjxDdXJyZW50X0RpbTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBB
LCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2
b2lkIFQyX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZpdGVyLCBjb25zdCBV
ICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAm
TjEpCnsKICBpdGVyKDAsQ3VycmVudF9EaW0xLTEpPXU7CiAgVDJfZXF1YWxzX2dlbmVyaWMoaXRl
cix1LE51bWJlcjxEaW0wPigpLE51bWJlcjxDdXJyZW50X0RpbTEtMT4oKSk7Cn0KCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMT4KaW5saW5lIHZvaWQgVDJfZXF1
YWxzX2dlbmVyaWMoVGVuc29yMjxBLERpbTAsRGltMT4gJml0ZXIsIGNvbnN0IFUgJnUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjwxPiAmTjAsIGNvbnN0IE51bWJl
cjwxPiAmTjEpCnsKICBpdGVyKDAsMCk9dTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwg
aW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5s
aW5lCmNvbnN0IFRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxp
LGo+ICYKVGVuc29yMl9FeHByPFRlbnNvcjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj46
OgpvcGVyYXRvcj0oY29uc3QgVSAmdSkKewogIFQyX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1i
ZXI8RGltMD4oKSxOdW1iZXI8RGltMT4oKSk7CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwKICBpbnQgQ3VycmVudF9EaW0w
LCBpbnQgQ3VycmVudF9EaW0xPgppbmxpbmUgdm9pZCBUMl9wbHVzX2VxdWFsc19nZW5lcmljKFRl
bnNvcjI8QSxEaW0wLERpbTE+ICZpdGVyLCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJyZW50X0RpbTA+ICZOMCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAmTjEp
CnsKICBpdGVyKEN1cnJlbnRfRGltMC0xLEN1cnJlbnRfRGltMS0xKSs9dTsKICBUMl9wbHVzX2Vx
dWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9EaW0wLTE+KCksCiAgICAgICAgICAg
ICAgICAgICAgICAgICBOdW1iZXI8Q3VycmVudF9EaW0xPigpKTsKfQoKdGVtcGxhdGU8Y2xhc3Mg
QSwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xLCBpbnQgQ3VycmVudF9EaW0xPgppbmxpbmUg
dm9pZCBUMl9wbHVzX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZpdGVyLCBj
b25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJl
cjwxPiAmTjAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVy
PEN1cnJlbnRfRGltMT4gJk4xKQp7CiAgaXRlcigwLEN1cnJlbnRfRGltMS0xKSs9dTsKICBUMl9w
bHVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8Q3VycmVudF9E
aW0xLTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERp
bTE+CmlubGluZSB2b2lkIFQyX3BsdXNfZXF1YWxzX2dlbmVyaWMoVGVuc29yMjxBLERpbTAsRGlt
MT4gJml0ZXIsIGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgTnVtYmVyPDE+ICZOMCwgY29uc3QgTnVtYmVyPDE+ICZOMSkKewogIGl0ZXIoMCwwKSs9
dTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTAsIGludCBEaW0xLCBjaGFy
IGksIGNoYXIgaj4KdGVtcGxhdGU8Y2xhc3MgVT4gaW5saW5lCmNvbnN0IFRlbnNvcjJfRXhwcjxU
ZW5zb3IyPEEsRGltMCxEaW0xPixULERpbTAsRGltMSxpLGo+ICYKVGVuc29yMl9FeHByPFRlbnNv
cjI8QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj46OgpvcGVyYXRvcis9KGNvbnN0IFUgJnUp
CnsKICBUMl9wbHVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8
RGltMT4oKSk7CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUs
IGludCBEaW0wLCBpbnQgRGltMSwKICBpbnQgQ3VycmVudF9EaW0wLCBpbnQgQ3VycmVudF9EaW0x
PgppbmxpbmUgdm9pZCBUMl9taW51c19lcXVhbHNfZ2VuZXJpYyhUZW5zb3IyPEEsRGltMCxEaW0x
PiAmaXRlciwgY29uc3QgVSAmdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
TnVtYmVyPEN1cnJlbnRfRGltMD4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBOdW1iZXI8Q3VycmVudF9EaW0xPiAmTjEpCnsKICBpdGVyKEN1cnJlbnRfRGltMC0xLEN1
cnJlbnRfRGltMS0xKS09dTsKICBUMl9taW51c19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVy
PEN1cnJlbnRfRGltMC0xPigpLE51bWJlcjxDdXJyZW50X0RpbTE+KCkpOwp9Cgp0ZW1wbGF0ZTxj
bGFzcyBBLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGludCBDdXJyZW50X0RpbTE+Cmlu
bGluZSB2b2lkIFQyX21pbnVzX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZp
dGVyLCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1i
ZXI8MT4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3Vy
cmVudF9EaW0xPiAmTjEpCnsKICBpdGVyKDAsQ3VycmVudF9EaW0xLTEpLT11OwogIFQyX21pbnVz
X2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8Q3VycmVudF9EaW0x
LTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTE+
CmlubGluZSB2b2lkIFQyX21pbnVzX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+
ICZpdGVyLCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBO
dW1iZXI8MT4gJk4wLCBjb25zdCBOdW1iZXI8MT4gJk4xKQp7CiAgaXRlcigwLDApLT11Owp9Cgp0
ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hh
ciBqPgp0ZW1wbGF0ZTxjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVuc29yMl9FeHByPFRlbnNvcjI8
QSxEaW0wLERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgpUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERp
bTAsRGltMT4sVCxEaW0wLERpbTEsaSxqPjo6Cm9wZXJhdG9yLT0oY29uc3QgVSAmdSkKewogIFQy
X21pbnVzX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8RGltMT4o
KSk7CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUsIGludCBE
aW0wLCBpbnQgRGltMSwKICBpbnQgQ3VycmVudF9EaW0wLCBpbnQgQ3VycmVudF9EaW0xPgppbmxp
bmUgdm9pZCBUMl90aW1lc19lcXVhbHNfZ2VuZXJpYyhUZW5zb3IyPEEsRGltMCxEaW0xPiAmaXRl
ciwgY29uc3QgVSAmdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVy
PEN1cnJlbnRfRGltMD4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBO
dW1iZXI8Q3VycmVudF9EaW0xPiAmTjEpCnsKICBpdGVyKEN1cnJlbnRfRGltMC0xLEN1cnJlbnRf
RGltMS0xKSo9dTsKICBUMl90aW1lc19lcXVhbHNfZ2VuZXJpYyhpdGVyLHUsTnVtYmVyPEN1cnJl
bnRfRGltMC0xPigpLE51bWJlcjxDdXJyZW50X0RpbTE+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBB
LCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTEsIGludCBDdXJyZW50X0RpbTE+CmlubGluZSB2
b2lkIFQyX3RpbWVzX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZpdGVyLCBj
b25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4g
Jk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9E
aW0xPiAmTjEpCnsKICBpdGVyKDAsQ3VycmVudF9EaW0xLTEpKj11OwogIFQyX3RpbWVzX2VxdWFs
c19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8Q3VycmVudF9EaW0xLTE+KCkp
Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50IERpbTE+CmlubGlu
ZSB2b2lkIFQyX3RpbWVzX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZpdGVy
LCBjb25zdCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8
MT4gJk4wLCBjb25zdCBOdW1iZXI8MT4gJk4xKQp7CiAgaXRlcigwLDApKj11Owp9Cgp0ZW1wbGF0
ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwgY2hhciBqPgp0
ZW1wbGF0ZTxjbGFzcyBVPiBpbmxpbmUKY29uc3QgVGVuc29yMl9FeHByPFRlbnNvcjI8QSxEaW0w
LERpbTE+LFQsRGltMCxEaW0xLGksaj4gJgpUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAsRGlt
MT4sVCxEaW0wLERpbTEsaSxqPjo6Cm9wZXJhdG9yKj0oY29uc3QgVSAmdSkKewogIFQyX3RpbWVz
X2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8RGltMT4oKSk7CiAg
cmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIFUsIGludCBEaW0wLCBp
bnQgRGltMSwKICBpbnQgQ3VycmVudF9EaW0wLCBpbnQgQ3VycmVudF9EaW0xPgppbmxpbmUgdm9p
ZCBUMl9kaXZpZGVfZXF1YWxzX2dlbmVyaWMoVGVuc29yMjxBLERpbTAsRGltMT4gJml0ZXIsIGNv
bnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjxDdXJy
ZW50X0RpbTA+ICZOMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVtYmVy
PEN1cnJlbnRfRGltMT4gJk4xKQp7CiAgaXRlcihDdXJyZW50X0RpbTAtMSxDdXJyZW50X0RpbTEt
MSkvPXU7CiAgVDJfZGl2aWRlX2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8Q3VycmVudF9E
aW0wLTE+KCksTnVtYmVyPEN1cnJlbnRfRGltMT4oKSk7Cn0KCnRlbXBsYXRlPGNsYXNzIEEsIGNs
YXNzIFUsIGludCBEaW0wLCBpbnQgRGltMSwgaW50IEN1cnJlbnRfRGltMT4KaW5saW5lIHZvaWQg
VDJfZGl2aWRlX2VxdWFsc19nZW5lcmljKFRlbnNvcjI8QSxEaW0wLERpbTE+ICZpdGVyLCBjb25z
dCBVICZ1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4w
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8Q3VycmVudF9EaW0x
PiAmTjEpCnsKICBpdGVyKDAsQ3VycmVudF9EaW0xLTEpLz11OwogIFQyX2RpdmlkZV9lcXVhbHNf
Z2VuZXJpYyhpdGVyLHUsTnVtYmVyPERpbTA+KCksTnVtYmVyPEN1cnJlbnRfRGltMS0xPigpKTsK
fQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgVSwgaW50IERpbTAsIGludCBEaW0xPgppbmxpbmUg
dm9pZCBUMl9kaXZpZGVfZXF1YWxzX2dlbmVyaWMoVGVuc29yMjxBLERpbTAsRGltMT4gJml0ZXIs
IGNvbnN0IFUgJnUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IE51bWJlcjwx
PiAmTjAsIGNvbnN0IE51bWJlcjwxPiAmTjEpCnsKICBpdGVyKDAsMCkvPXU7Cn0KCnRlbXBsYXRl
PGNsYXNzIEEsIGNsYXNzIFQsIGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGo+CnRl
bXBsYXRlPGNsYXNzIFU+IGlubGluZQpjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yMjxBLERpbTAs
RGltMT4sVCxEaW0wLERpbTEsaSxqPiAmClRlbnNvcjJfRXhwcjxUZW5zb3IyPEEsRGltMCxEaW0x
PixULERpbTAsRGltMSxpLGo+OjoKb3BlcmF0b3IvPShjb25zdCBVICZ1KQp7CiAgVDJfZGl2aWRl
X2VxdWFsc19nZW5lcmljKGl0ZXIsdSxOdW1iZXI8RGltMD4oKSxOdW1iZXI8RGltMT4oKSk7CiAg
cmV0dXJuICp0aGlzOwp9CgoKCgoKCnRlbXBsYXRlPGNsYXNzIEEsIGNsYXNzIEIsIGNsYXNzIFUs
IGludCBEaW0wLCBpbnQgRGltMSwgY2hhciBpLCBjaGFyIGosIGludCBOLAogIGludCBDdXJyZW50
X0RpbTAsIGludCBDdXJyZW50X0RpbTE+IGlubGluZQp2b2lkIFQzZGdyaHMwX2VxdWFsc19UMihB
ICZpdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVuc29yMl9FeHByPEIsVSxE
aW0wLERpbTEsaSxqPiAmcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVt
YmVyPEN1cnJlbnRfRGltMD4gJk4wLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgTnVt
YmVyPEN1cnJlbnRfRGltMT4gJk4xLCBjb25zdCBOdW1iZXI8Tj4gJk5OKQp7CiAgaXRlcihOLEN1
cnJlbnRfRGltMC0xLEN1cnJlbnRfRGltMS0xKT1yZXN1bHQoQ3VycmVudF9EaW0wLTEsQ3VycmVu
dF9EaW0xLTEpOwogIFQzZGdyaHMwX2VxdWFsc19UMihpdGVyLHJlc3VsdCxOdW1iZXI8Q3VycmVu
dF9EaW0wLTE+KCksCiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXI8Q3VycmVudF9EaW0xPigp
LE51bWJlcjxOPigpKTsKfQoKdGVtcGxhdGU8Y2xhc3MgQSwgY2xhc3MgQiwgY2xhc3MgVSwgaW50
IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaiwgaW50IE4sCiAgaW50IEN1cnJlbnRfRGlt
MT4gaW5saW5lCnZvaWQgVDNkZ3JoczBfZXF1YWxzX1QyKEEgJml0ZXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1iZXI8MT4gJk4wLCBjb25zdCBOdW1i
ZXI8Q3VycmVudF9EaW0xPiAmTjEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBOdW1i
ZXI8Tj4gJk5OKQp7CiAgaXRlcihOLDAsQ3VycmVudF9EaW0xLTEpPXJlc3VsdCgwLEN1cnJlbnRf
RGltMS0xKTsKICBUM2RncmhzMF9lcXVhbHNfVDIoaXRlcixyZXN1bHQsTnVtYmVyPERpbTA+KCks
CiAgICAgICAgICAgICAgICAgICAgICBOdW1iZXI8Q3VycmVudF9EaW0xLTE+KCksTnVtYmVyPE4+
KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBCLCBjbGFzcyBVLCBpbnQgRGltMCwgaW50
IERpbTEsIGNoYXIgaSwgY2hhciBqLCBpbnQgTj4KaW5saW5lCnZvaWQgVDNkZ3JoczBfZXF1YWxz
X1QyKEEgJml0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZW5zb3IyX0V4cHI8
QixVLERpbTAsRGltMSxpLGo+ICZyZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBOdW1iZXI8MT4gJk4wLCBjb25zdCBOdW1iZXI8MT4gJk4xLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgTnVtYmVyPE4+ICZOTikKewogIGl0ZXIoTiwwLDApPXJlc3VsdCgwLDApOwp9
Cgp0ZW1wbGF0ZTxjbGFzcyBBLCBjbGFzcyBULCBpbnQgRGltMCwgaW50IERpbTEsIGNoYXIgaSwg
Y2hhciBqLCBpbnQgTj4KdGVtcGxhdGU8Y2xhc3MgQiwgY2xhc3MgVT4gaW5saW5lCmNvbnN0IFRl
bnNvcjJfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0wLERpbTEsaSxq
PiAmClRlbnNvcjJfRXhwcjxUZW5zb3IzX2RnX251bWJlcl9yaHNfMDxBLFQsTj4sVCxEaW0wLERp
bTEsaSxqPgo6Om9wZXJhdG9yPShjb25zdCBUZW5zb3IyX0V4cHI8QixVLERpbTAsRGltMSxpLGo+
ICZyZXN1bHQpCnsKICBUM2RncmhzMF9lcXVhbHNfVDIoaXRlcixyZXN1bHQsTnVtYmVyPERpbTA+
KCksTnVtYmVyPERpbTE+KCksTnVtYmVyPE4+KCkpOwogIHJldHVybiAqdGhpczsKfQoKdGVtcGxh
dGU8Y2xhc3MgQSwgY2xhc3MgVCwgaW50IERpbTAsIGludCBEaW0xLCBjaGFyIGksIGNoYXIgaiwg
aW50IE4+IGlubGluZQpjb25zdCBUZW5zb3IyX0V4cHI8VGVuc29yM19kZ19udW1iZXJfcmhzXzA8
QSxULE4+LFQsRGltMCxEaW0xLGksaj4gJgpUZW5zb3IyX0V4cHI8VGVuc29yM19kZ19udW1iZXJf
cmhzXzA8QSxULE4+LFQsRGltMCxEaW0xLGksaj4KOjpvcGVyYXRvcj0oY29uc3QgVGVuc29yMl9F
eHByPFRlbnNvcjNfZGdfbnVtYmVyX3Joc18wPEEsVCxOPixULERpbTAsRGltMSxpLGo+CiAgICAg
ICAgICAgICZyZXN1bHQpCnsKICByZXR1cm4gb3BlcmF0b3I9PFRlbnNvcjNfZGdfbnVtYmVyX3Jo
c18wPEEsVCxOPixUPihyZXN1bHQpOwp9CiMgMTM0ICIuLi8uLi9UZW5zb3IyL1RlbnNvcjJfRXhw
ci5oIiAyCiMgMTEgIi4uLy4uL1RlbnNvcjIuaCIgMgojIDU0ICIuLi8uLi9GVGVuc29yLnBhcnQu
aCIgMgp9CiMgNCAiVDIvYnVnNy5DIiAyCnVzaW5nIG5hbWVzcGFjZSBGVGVuc29yOwp1c2luZyBu
YW1lc3BhY2Ugc3RkOwoKdm9pZCBkdW1wMihUZW5zb3IxPGRvdWJsZSwyPiAmdDFfMSwgVGVuc29y
Mjxkb3VibGUsMiwyPiAmdDJfMSkKewogIGNvdXQgPDwgdDFfMSgwKSA8PCAiICIgPDwgdDJfMSgw
LDApIDw8IGVuZGw7Cn0KCnZvaWQgdGVzdF9UMmEoVGVuc29yMTxkb3VibGUsMj4gJnQxXzEsIFRl
bnNvcjI8ZG91YmxlLDIsMj4gJnQyXzEpCnsKICBJbmRleDwnaScsMj4gaTsKCiAgdDFfMShpKT10
Ml8xKGksMCk7CiAgZHVtcDIodDFfMSx0Ml8xKTsKfQoKaW50IG1haW4oKQp7CiAgZG91YmxlIHQw
MSgxMiksIHQwMigxNCk7CgogIFRlbnNvcjE8ZG91YmxlLDI+IHQxXzEoMSwyKTsKICBUZW5zb3Iy
PGRvdWJsZSwyLDI+IHQyXzEoMTAsMjAsMzAsNDApOwoKICB0ZXN0X1QyYSh0MV8xLHQyXzEpOwp9
Cg==


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2002-10-10 16:41 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-12 17:37 target/6137: ia64 -O3 generates bad overlapping memory accesses rth
  -- strict thread matches above, loose matches on Subject: below --
2002-10-10  9:41 janis
2002-04-02 10:46 janis187

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).