public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* optimization/8392: [-fnew-ra] SegFault in
@ 2002-10-29 13:06 bangerth
  0 siblings, 0 replies; only message in thread
From: bangerth @ 2002-10-29 13:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         8392
>Category:       optimization
>Synopsis:       [-fnew-ra] SegFault in
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Tue Oct 29 13:06:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Wolfgang Bangerth
>Release:        unknown-1.0
>Organization:
>Environment:
gcc CVS from 2002/10/28, Linux i686 unknown
>Description:
The attached code SegFaults with present CVS and when
using -fnew-ra, -O2, and -funroll-all-loops together.
The segfault trashes the stack so thoroughly, that I 
cannot get a backtrace beyond the lowest frame, which is
#0  0x0828efc6 in loop_invariant_p (loop=0x8850e88, x=0x4277400c)
    at ../../gcc-3.3/gcc/loop.c:3276

I am sorry, but I cannot seem to reduce the code much 
further.Even removing the line numbers the preprocessor 
introduced seem to make the bug go away... Hope this helps
somewhat anyway.

Regards
  Wolfgang
>How-To-Repeat:
2/deal.II> time c++ -fnew-ra -fpreprocessed -O2 -funroll-all-loops -c x.ii
source/data_out_base.cc: In static member function `static void
   DataOutBase::write_gnuplot(const std::vector<DataOutBase::Patch<dim,
   spacedim>, std::allocator<DataOutBase::Patch<dim, spacedim> > >&, const
   std::vector<std::string, std::allocator<std::string> >&, const
   DataOutBase::GnuplotFlags&, std::ostream&) [with int dim = 3, int spacedim =
   4]':
source/data_out_base.cc:3567:   instantiated from `void DataOutInterface<dim, spacedim>::write_gnuplot(std::ostream&) const [with int dim = 3, int spacedim = 4]'
source/data_out_base.cc:3952:   instantiated from here
source/data_out_base.cc:1261: internal compiler error: Speicherzugriffsfehler
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://www.gnu.org/software/gcc/bugs.html> for instructions.

>Fix:

>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="x.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="x.ii"

IyAxICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKIyAxICI8YnVpbHQtaW4+IgojIDEgIjxjb21t
YW5kIGxpbmU+IgojIDEgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgojIDE1ICJzb3VyY2UvZGF0
YV9vdXRfYmFzZS5jYyIKIyAxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh
c2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIgMQojIDE3ICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKIyAx
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2Nv
bmZpZy5oIiAxCiMgMjE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL2NvbmZpZy5oIgpuYW1lc3BhY2UgZGVhbF9JSV9udW1iZXJzIHsKCgoKICBz
dGF0aWMgY29uc3QgZG91YmxlIEUgPSAyLjcxODI4MTgyODQ1OTA0NTIzNTQ7CgoKCgogIHN0YXRp
YyBjb25zdCBkb3VibGUgTE9HMkUgPSAxLjQ0MjY5NTA0MDg4ODk2MzQwNzQ7CgoKCgogIHN0YXRp
YyBjb25zdCBkb3VibGUgTE9HMTBFID0gMC40MzQyOTQ0ODE5MDMyNTE4Mjc2NTsKCgoKCiAgc3Rh
dGljIGNvbnN0IGRvdWJsZSBMTjIgPSAwLjY5MzE0NzE4MDU1OTk0NTMwOTQyOwoKCgoKICBzdGF0
aWMgY29uc3QgZG91YmxlIExOMTAgPSAyLjMwMjU4NTA5Mjk5NDA0NTY4NDAyOwoKCgoKICBzdGF0
aWMgY29uc3QgZG91YmxlIFBJID0gMy4xNDE1OTI2NTM1ODk3OTMyMzg0NjsKCgoKCiAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBQSV8yID0gMS41NzA3OTYzMjY3OTQ4OTY2MTkyMzsKCgoKCiAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBQSV80ID0gMC43ODUzOTgxNjMzOTc0NDgzMDk2MjsKCgoKCiAgc3RhdGlj
IGNvbnN0IGRvdWJsZSBTUVJUMiA9IDEuNDE0MjEzNTYyMzczMDk1MDQ4ODA7CgoKCgogIHN0YXRp
YyBjb25zdCBkb3VibGUgU1FSVDFfMiA9IDAuNzA3MTA2NzgxMTg2NTQ3NTI0NDA7Cn07CiMgMTgg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0
YV9vdXRfYmFzZS5oIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS9wb2ludC5oIiAxCiMgMTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9pbnQuaCIKIyAxICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIgMQoj
IDE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L2V4Y2VwdGlvbnMuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2V4Y2VwdGlvbiIgMSAzCiMgNDAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvZXhjZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3Bh
Y2Ugc3RkCnsKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9leGNlcHRpb24iIDMKICBjbGFzcyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhj
ZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoK
ICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBj
bGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBi
YWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigp
IHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsK
CiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9o
YW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWluYXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lk
IHRlcm1pbmF0ZSgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgogIHVuZXhwZWN0
ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoK
ICB2b2lkIHVuZXhwZWN0ZWQoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CiMgMTAw
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlv
biIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNwYWNlIF9f
Z251X2N4eAp7CiMgMTEzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2V4Y2VwdGlvbiIgMwogIHZvaWQgX192ZXJib3NlX3Rlcm1pbmF0ZV9oYW5kbGVyICgp
Owp9Cgp9CiMgMjAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvZXhjZXB0aW9ucy5oIiAyCgoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMSAzCiMgNDQgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvb3N0cmVhbSIgMwoKIyAxICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMSAzCiMgNDMgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zIiAzCgojIDEg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAx
IDMKIyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9p
b3Nmd2QiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzNCAiL2hvbWUv
YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMSAz
CiMgMzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVh
dHVyZXMuaCIgMSAzIDQKIyAyODMgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIv
dXNyL2luY2x1ZGUvc3lzL2NkZWZzLmgiIDEgMyA0CiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVy
ZXMuaCIgMiAzIDQKIyAzMTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzIDQKIyAxICIvdXNy
L2luY2x1ZGUvZ251L3N0dWJzLmgiIDEgMyA0CiMgMzEzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu
aCIgMiAzIDQKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2RlZmluZXMuaCIgMiAzCiMgMzUgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1n
bnUvYml0cy9jKytjb25maWcuaCIgMiAzCiMgNDUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyaW5nZndkLmgiIDEgMwojIDQzICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyaW5n
ZndkLmgiIDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAg
c3RydWN0IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFy
PjsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAg
ICAgICAgdHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfc3RyaW5nOwoKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKICB0eXBl
ZGVmIGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwp9CiMgNDYgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnBvcy5oIiAxIDMK
IyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2Zwb3MuaCIgMwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAzCiMgMzUgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUv
Yml0cy9jKytpby5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9jc3RkaW8iIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAxIDMKIyA0NyAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAzCgojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAxNTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYu
aCIgMyA0CnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKIyAyMTMgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRk
ZWYuaCIgMyA0CnR5cGVkZWYgdW5zaWduZWQgaW50IHNpemVfdDsKIyA0OSAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkZGVmIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHVzaW5nIDo6cHRyZGlmZl90OwogIHVzaW5nIDo6c2l6ZV90Owp9CiMgNTEgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3N0ZGlvIiAyIDMK
CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgiIDEgMyA0CiMgMzkgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk
ZS9zdGRpby5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRl
Zi5oIiAxIDMgNAojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMiAzIDQKCiMgMSAiL3Vz
ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzIDQKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw
ZXMuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGli
L2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMwICIvdXNy
L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMgNAoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vf
Y2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3Vfc2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQg
aW50IF9fdV9pbnQ7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX3VfbG9uZzsKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdV9xdWFkX3Q7Cl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBsb25nIGxvbmcgaW50IF9fcXVhZF90OwojIDQ5ICIvdXNyL2luY2x1ZGUvYml0
cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNp
Z25lZCBjaGFyIF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsK
dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50
IF9faW50MzJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9u
X18gdHlwZWRlZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18g
dHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVh
ZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3Vf
aW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9f
aW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtf
dDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0
eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xv
bmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9p
bnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2Zz
aWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0
eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRz
X3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3
YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2Nr
aWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7
CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9u
ZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVk
ZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90
Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBf
X2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVm
IF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5
cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9f
dF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVk
IGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVz
LmgiIDEgMyA0CiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzIDQKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDY4ICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzIDQKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9w
cmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAz
IDQKCgpzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sKewogIGxvbmcgaW50IF9fc3RhdHVzOwogIGlu
dCBfX3NwaW5sb2NrOwoKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfZGVzY3Jfc3RydWN0
ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdCBfX3B0aHJlYWRfYXR0cl9zCnsK
ICBpbnQgX19kZXRhY2hzdGF0ZTsKICBpbnQgX19zY2hlZHBvbGljeTsKICBzdHJ1Y3QgX19zY2hl
ZF9wYXJhbSBfX3NjaGVkcGFyYW07CiAgaW50IF9faW5oZXJpdHNjaGVkOwogIGludCBfX3Njb3Bl
OwogIHNpemVfdCBfX2d1YXJkc2l6ZTsKICBpbnQgX19zdGFja2FkZHJfc2V0OwogIHZvaWQgKl9f
c3RhY2thZGRyOwogIHNpemVfdCBfX3N0YWNrc2l6ZTsKfSBwdGhyZWFkX2F0dHJfdDsKCgoKdHlw
ZWRlZiBzdHJ1Y3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX2NfbG9jazsKICBfcHRo
cmVhZF9kZXNjciBfX2Nfd2FpdGluZzsKfSBwdGhyZWFkX2NvbmRfdDsKCgoKdHlwZWRlZiBzdHJ1
Y3QKewogIGludCBfX2R1bW15Owp9IHB0aHJlYWRfY29uZGF0dHJfdDsKCgp0eXBlZGVmIHVuc2ln
bmVkIGludCBwdGhyZWFkX2tleV90OwoKCgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tX3Jl
c2VydmVkOwogIGludCBfX21fY291bnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19tX293bmVyOwogIGlu
dCBfX21fa2luZDsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19tX2xvY2s7Cn0gcHRocmVh
ZF9tdXRleF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbXV0ZXhraW5kOwp9IHB0aHJl
YWRfbXV0ZXhhdHRyX3Q7CgoKCnR5cGVkZWYgaW50IHB0aHJlYWRfb25jZV90OwoKCgoKdHlwZWRl
ZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBf
X3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRl
cjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2FpdGluZzsKICBfcHRocmVhZF9kZXNjciBf
X3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2luZDsKICBpbnQgX19yd19wc2hhcmVkOwp9
IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19sb2Nra2luZDsK
ICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrYXR0cl90OwoKCgoKdHlwZWRlZiB2b2xh
dGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3Qg
X3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGludCBfX2JhX3JlcXVpcmVkOwogIGludCBf
X2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19iYV93YWl0aW5nOwp9IHB0aHJlYWRfYmFy
cmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfYmFy
cmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAx
NDQgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMyA0CiMgNDYgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk
ZS9zdGRpby5oIiAyIDMgNAojIDU0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CnR5cGVk
ZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7CiMgNjQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAz
IDQKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDc0ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUv
c3RkaW8uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMyA0CiMgMzIgIi91c3Iv
aW5jbHVkZS9saWJpby5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMyA0
CiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMgNAojIDM1NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAzIDQKdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgi
IDIgMyA0CiMgMjQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL3djaGFyLmgiIDEgMyA0CiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5o
IiAyIDMgNAoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMgNAojIDUxICIvdXNy
L2luY2x1ZGUvd2NoYXIuaCIgMiAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp0
eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fY291bnQ7CiAgdW5pb24KICB7CiAgICB3aW50X3QgX193
Y2g7CiAgICBjaGFyIF9fd2NoYls0XTsKICB9IF9fdmFsdWU7Cn0gX19tYnN0YXRlX3Q7CiMgMjUg
Ii91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzIDQKCnR5cGVkZWYgc3RydWN0CnsKICBfX29m
Zl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0
cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBv
czY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMyA0CiMgMSAiL3Vzci9pbmNs
dWRlL2djb252LmgiIDEgMyA0CiMgMjggIi91c3IvaW5jbHVkZS9nY29udi5oIiAzIDQKIyAxICIv
dXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzIDQKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMg
NAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBj
LWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyA0OSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDIgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMgNAoKCiMgMSAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgt
Z251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDMyICIvdXNyL2luY2x1ZGUvZ2NvbnYu
aCIgMiAzIDQKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwK
ICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwK
ICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05W
X0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NP
TlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAx
LAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9z
dGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmpl
Y3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9m
Y3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2Nv
bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk
IGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2lu
aXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9l
bmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252
X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1
bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwg
X19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoK
dHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBf
X2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQg
KiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkg
KHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19m
Y3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRl
eHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAq
X19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0
IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9o
YW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNo
YXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7
CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9m
Y3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsK
ICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19z
dGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEK
ewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5k
OwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBp
bnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVf
dCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoK
CnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVj
dCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9z
dGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19j
b25maWcuaCIgMiAzIDQKdHlwZWRlZiB1bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2Nk
OwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBf
X2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0
eXBlZGVmIGludCBfR19pbnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkp
Owp0eXBlZGVmIGludCBfR19pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9f
KSkpOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19t
b2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAyIDMgNAojIDUzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs
dWRlL3N0ZGFyZy5oIiAxIDMgNAojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkYXJnLmgiIDMgNAp0
eXBlZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1
ZGUvbGliaW8uaCIgMiAzIDQKIyAxNjAgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKc3RydWN0
IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzIDQKdHlwZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewog
IHN0cnVjdCBfSU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgog
IGludCBfcG9zOwojIDE5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMgNAp9OwoKCmVudW0gX19j
b2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2RlY3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9f
Y29kZWN2dF9lcnJvciwKICBfX2NvZGVjdnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVj
dnQKewogIHZvaWQgKCpfX2NvZGVjdnRfZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAg
ZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29k
ZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21i
c3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCB3Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0
X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVf
dCAqLCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2
dF9kb19pbikgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJf
dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
Kiwgd2NoYXJfdCAqKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9J
T19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0
IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lP
X2NvZGVjdnQgKiwgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2Rv
X21heF9sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9p
bjsKICBfR19pY29udl90IF9fY2Rfb3V0Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3
Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAgd2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3Qg
Kl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lP
X3dyaXRlX3B0cjsKICB3Y2hhcl90ICpfSU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZf
YmFzZTsKICB3Y2hhcl90ICpfSU9fYnVmX2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsK
ICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jhc2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAg
X19tYnN0YXRlX3QgX0lPX3N0YXRlOwogIF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0
cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0
cnVjdCBfSU9fanVtcF90ICpfd2lkZV92dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBp
bnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5k
OwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciog
X0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFz
ZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpf
SU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtl
ciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsK
ICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9y
dCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9y
dGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAzMDUgIi91c3IvaW5jbHVkZS9saWJp
by5oIiAzIDQKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAqX2Nv
ZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBfbW9k
ZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZvaWQg
KildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lPX0ZJ
TEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJyXzsK
IyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzIDQKdHlwZWRlZiBfX3NzaXplX3QgX19pb19y
ZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVfdCBfX25ieXRlcyk7CgoK
CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lkICpfX2Nvb2tpZSwgX19j
b25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90
IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZvaWQgKl9fY29va2llLCBf
X29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICh2
b2lkICpfX2Nvb2tpZSk7CgoKCgp0eXBlZGVmIF9faW9fcmVhZF9mbiBjb29raWVfcmVhZF9mdW5j
dGlvbl90Owp0eXBlZGVmIF9faW9fd3JpdGVfZm4gY29va2llX3dyaXRlX2Z1bmN0aW9uX3Q7CnR5
cGVkZWYgX19pb19zZWVrX2ZuIGNvb2tpZV9zZWVrX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb19j
bG9zZV9mbiBjb29raWVfY2xvc2VfZnVuY3Rpb25fdDsKCgp0eXBlZGVmIHN0cnVjdAp7CiAgX19p
b19yZWFkX2ZuICpyZWFkOwogIF9faW9fd3JpdGVfZm4gKndyaXRlOwogIF9faW9fc2Vla19mbiAq
c2VlazsKICBfX2lvX2Nsb3NlX2ZuICpjbG9zZTsKfSBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190
Owp0eXBlZGVmIF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3QgY29va2llX2lvX2Z1bmN0aW9uc190
OwoKc3RydWN0IF9JT19jb29raWVfZmlsZTsKCgpleHRlcm4gdm9pZCBfSU9fY29va2llX2luaXQg
KHN0cnVjdCBfSU9fY29va2llX2ZpbGUgKl9fY2ZpbGUsIGludCBfX3JlYWRfd3JpdGUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19jb29raWUsIF9JT19jb29raWVfaW9fZnVu
Y3Rpb25zX3QgX19mbnMpOwoKCgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIGludCBfX3VuZGVyZmxv
dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAoX0lPX0ZJTEUgKiwgaW50KSB0aHJvdyAo
KTsKZXh0ZXJuIHdpbnRfdCBfX3d1bmRlcmZsb3cgKF9JT19GSUxFICopIHRocm93ICgpOwpleHRl
cm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBf
X3dvdmVyZmxvdyAoX0lPX0ZJTEUgKiwgd2ludF90KSB0aHJvdyAoKTsKIyA0MjYgIi91c3IvaW5j
bHVkZS9saWJpby5oIiAzIDQKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRo
cm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50
IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g
dm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lP
X2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxv
Y2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsKIyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5o
IiAzIDQKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25z
dCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp
c3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmIChf
SU9fRklMRSAqX19yZXN0cmljdCwgY29uc3QgY2hhciAqX19yZXN0cmljdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0KSB0aHJvdyAoKTsKZXh0ZXJuIF9fc3NpemVfdCBf
SU9fcGFkbiAoX0lPX0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIHRocm93ICgpOwpleHRlcm4gc2l6
ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIHRocm93ICgpOwoKZXh0
ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla29mZiAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQsIGlu
dCkgdGhyb3cgKCk7CmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtwb3MgKF9JT19GSUxFICosIF9f
b2ZmNjRfdCwgaW50KSB0aHJvdyAoKTsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVh
IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IF9JT19nZXR3YyAoX0lPX0ZJ
TEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3dj
LCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Z3aWRlIChfSU9fRklM
RSAqX19mcCwgaW50IF9fbW9kZSkgdGhyb3cgKCk7CiMgNTA1ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMyA0CmV4dGVybiBpbnQgX0lPX3Zmd3NjYW5mIChfSU9fRklMRSAqIF9fcmVzdHJpY3QsIGNv
bnN0IHdjaGFyX3QgKiBfX3Jlc3RyaWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVj
X3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX3Zmd3By
aW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIHRocm93ICgpOwpleHRlcm4g
X19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUgKiwgd2ludF90LCBfX3NzaXplX3QpIHRocm93
ICgpOwpleHRlcm4gdm9pZCBfSU9fZnJlZV93YmFja3VwX2FyZWEgKF9JT19GSUxFICopIHRocm93
ICgpOwoKCgp9CiMgNzUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxp
Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCgoKdHlwZWRl
ZiBfX2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODkgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9z
dGRpby5oIiAzIDQKdHlwZWRlZiBfR19mcG9zX3QgZnBvc190OwoKCgoKdHlwZWRlZiBfR19mcG9z
NjRfdCBmcG9zNjRfdDsKIyAxMzggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQKIyAxICIv
dXNyL2luY2x1ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzIDQKIyAxMzkgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVk
ZS9zdGRpby5oIiAyIDMgNAoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4dGVybiBGSUxFICpzdGRv
dXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBpbnQgcmVtb3ZlIChfX2NvbnN0
IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwoKZXh0ZXJuIGludCByZW5hbWUgKF9fY29uc3Qg
Y2hhciAqX19vbGQsIF9fY29uc3QgY2hhciAqX19uZXcpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ
TEUgKnRtcGZpbGUgKHZvaWQpIHRocm93ICgpOwojIDE2NyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlv
LmgiIDMgNApleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4g
Y2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5h
bV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGlvLmgi
IDMgNApleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBj
aGFyICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBp
bnQgZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNo
X3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9z
ZWFsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAo
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAg
IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMSAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs
dWRlL3N0ZGlvLmgiIDMgNApleHRlcm4gRklMRSAqZm9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jl
c3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CmV4dGVybiBGSUxFICpmcmVvcGVuNjQgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAg
RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqZmRv
cGVuIChpbnQgX19mZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgoKCgpleHRl
cm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKl9fcmVzdHJpY3QgX19tYWdpY19jb29raWUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbW9kZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2lv
X2Z1bmNzKSB0aHJvdyAoKTsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6
ZV90IF9fbGVuLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIEZJ
TEUgKm9wZW5fbWVtc3RyZWFtIChjaGFyICoqX19yZXN0cmljdCBfX2J1ZmxvYywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zaXplbG9jKSB0aHJvdyAo
KTsKCgoKCgpleHRlcm4gdm9pZCBzZXRidWYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNo
YXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJ
TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg
ICAgICAgICAgICAgaW50IF9fbW9kZXMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJu
IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry
aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIHRocm93ICgp
OwoKCmV4dGVybiB2b2lkIHNldGxpbmVidWYgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBpbnQgZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwKICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cg
KCk7CgpleHRlcm4gaW50IHByaW50ZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0
LCAuLi4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9f
cywKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs
IC4uLikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqX19yZXN0cmljdCBf
X3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAg
ICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKZXh0ZXJuIGludCB2cHJpbnRmIChf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCB2c3ByaW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3Ms
IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg
X19nbnVjX3ZhX2xpc3QgX19hcmcpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj
aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg
ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMywgNCkpKTsKCmV4dGVybiBp
bnQgdnNucHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAg
ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2du
dWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
XyAoX19wcmludGZfXywgMywgMCkpKTsKCgoKCgpleHRlcm4gaW50IHZhc3ByaW50ZiAoY2hhciAq
Kl9fcmVzdHJpY3QgX19wdHIsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2YsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMCkpKTsKZXh0ZXJuIGludCBfX2Fz
cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJvdyAoKSBfX2F0dHJp
YnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKZXh0ZXJuIGludCBhc3By
aW50ZiAoY2hhciAqKl9fcmVzdHJpY3QgX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCmV4dGVybiBpbnQgdmRwcmlu
dGYgKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsCiAgICAgICAgICAg
ICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IGRwcmludGYg
KGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIC4uLikKICAgICB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19wcmludGZfXywgMiwgMykpKTsKCgoK
CmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAg
ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIHRocm93ICgp
OwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAu
Li4pIHRocm93ICgpOwoKZXh0ZXJuIGludCBzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX3MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3Jt
YXQsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdmZzY2FuZiAoRklMRSAqX19yZXN0cmlj
dCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAg
ICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCmV4dGVybiBpbnQgdnNjYW5mIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDEsIDApKSk7
CgoKZXh0ZXJuIGludCB2c3NjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVj
X3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g
KF9fc2NhbmZfXywgMiwgMCkpKTsKCgoKCmV4dGVybiBpbnQgZmdldGMgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBnZXRjIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK
ZXh0ZXJuIGludCBnZXRjaGFyICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgZ2V0
Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGNoYXJf
dW5sb2NrZWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAo
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHV0YyAoaW50IF9fYywg
RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IHB1dGMgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdXRjX3VubG9ja2VkIChpbnQgX19jLCBG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50
IF9fYykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXR3IChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGludCBwdXR3IChpbnQgX193LCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19u
LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gY2hh
ciAqZmdldHNfdW5sb2NrZWQgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBpbnQgX19uLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgdGhyb3cgKCk7CiMgNDM1ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hh
ciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy
biBfX3NzaXplX3QgZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxp
bWl0ZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0
cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0
cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVz
dHJpY3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19zLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoK
CgpleHRlcm4gaW50IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7
CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7
CgoKCmV4dGVybiBzaXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBf
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg
X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAq
X19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCBmcmVhZF91bmxvY2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmlj
dCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2Nv
bnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBf
X29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklM
RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVh
bSkgdGhyb3cgKCk7CiMgNDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2dj
Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBp
bnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0
aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3Nf
dCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNldHBvcyAo
RklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMgNTMyICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4zL2luY2x1ZGUvc3RkaW8uaCIgMyA0CmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUgKl9f
c3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CmV4dGVybiBf
X29mZjY0X3QgZnRlbGxvNjQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBm
Z2V0cG9zNjQgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGZwb3M2NF90ICpfX3Jlc3RyaWN0
IF9fcG9zKQogICAgIHRocm93ICgpOwpleHRlcm4gaW50IGZzZXRwb3M2NCAoRklMRSAqX19zdHJl
YW0sIF9fY29uc3QgZnBvczY0X3QgKl9fcG9zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xl
YXJlcnIgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZmVvZiAoRklMRSAq
X19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZXJyb3IgKEZJTEUgKl9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgZmVycm9yX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKTsK
CgoKCmV4dGVybiBpbnQgc3lzX25lcnI7CmV4dGVybiBfX2NvbnN0IGNoYXIgKl9fY29uc3Qgc3lz
X2Vycmxpc3RbXTsKCgpleHRlcm4gaW50IF9zeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAq
X19jb25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19z
dHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmaWxlbm9fdW5sb2NrZWQgKEZJTEUgKl9f
c3RyZWFtKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIg
Kl9fY29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHBjbG9zZSAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdGVy
bWlkIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFy
ICpfX3MpIHRocm93ICgpOwoKCgoKc3RydWN0IG9ic3RhY2s7CgoKZXh0ZXJuIGludCBvYnN0YWNr
X3ByaW50ZiAoc3RydWN0IG9ic3RhY2sgKl9fcmVzdHJpY3QgX19vYnN0YWNrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikg
dGhyb3cgKCk7CmV4dGVybiBpbnQgb2JzdGFja192cHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqX19y
ZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo
YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2du
dWNfdmFfbGlzdCBfX2FyZ3MpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgZmxvY2tmaWxl
IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChG
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgZnVubG9ja2ZpbGUgKEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKIyA2MzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRpby5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpby5oIiAxIDMgNAojIDMzICIvdXNyL2luY2x1ZGUv
Yml0cy9zdGRpby5oIiAzIDQKaW5saW5lIGludAp2cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19mbXQsIF9fZ251Y192YV9saXN0IF9fYXJnKSB0aHJvdyAoKQp7CiAgcmV0dXJuIHZm
cHJpbnRmIChzdGRvdXQsIF9fZm10LCBfX2FyZyk7Cn0KCgppbmxpbmUgaW50CmdldGNoYXIgKHZv
aWQpIHRocm93ICgpCnsKICByZXR1cm4gX0lPX2dldGMgKHN0ZGluKTsKfQoKCgoKaW5saW5lIGlu
dApnZXRjX3VubG9ja2VkIChGSUxFICpfX2ZwKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoX19mcCkt
Pl9JT19yZWFkX3B0ciA+PSAoX19mcCktPl9JT19yZWFkX2VuZCA/IF9fdWZsb3cgKF9fZnApIDog
Kih1bnNpZ25lZCBjaGFyICopIChfX2ZwKS0+X0lPX3JlYWRfcHRyKyspOwp9CgoKaW5saW5lIGlu
dApnZXRjaGFyX3VubG9ja2VkICh2b2lkKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoc3RkaW4pLT5f
SU9fcmVhZF9wdHIgPj0gKHN0ZGluKS0+X0lPX3JlYWRfZW5kID8gX191ZmxvdyAoc3RkaW4pIDog
Kih1bnNpZ25lZCBjaGFyICopIChzdGRpbiktPl9JT19yZWFkX3B0cisrKTsKfQoKCgoKaW5saW5l
IGludApwdXRjaGFyIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9JT19wdXRjIChfX2Ms
IHN0ZG91dCk7Cn0KCgoKCmlubGluZSBpbnQKZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+X0lPX3dyaXRlX3B0
ciA+PSAoX19zdHJlYW0pLT5fSU9fd3JpdGVfZW5kKSA/IF9fb3ZlcmZsb3cgKF9fc3RyZWFtLCAo
dW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKF9fc3RyZWFtKS0+X0lP
X3dyaXRlX3B0cisrID0gKF9fYykpKTsKfQoKCgoKCmlubGluZSBpbnQKcHV0Y191bmxvY2tlZCAo
aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpCnsKICByZXR1cm4gKCgoX19zdHJlYW0p
LT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxv
dyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5zaWduZWQgY2hhcikgKCoo
X19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoKaW5saW5lIGludApwdXRj
aGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKQp7CiAgcmV0dXJuICgoKHN0ZG91dCktPl9J
T193cml0ZV9wdHIgPj0gKHN0ZG91dCktPl9JT193cml0ZV9lbmQpID8gX19vdmVyZmxvdyAoc3Rk
b3V0LCAodW5zaWduZWQgY2hhcikgKF9fYykpIDogKHVuc2lnbmVkIGNoYXIpICgqKHN0ZG91dCkt
Pl9JT193cml0ZV9wdHIrKyA9IChfX2MpKSk7Cn0KCgoKCgppbmxpbmUgX19zc2l6ZV90CmdldGxp
bmUgKGNoYXIgKipfX2xpbmVwdHIsIHNpemVfdCAqX19uLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkKewogIHJldHVybiBfX2dldGRlbGltIChfX2xpbmVwdHIsIF9fbiwgJ1xuJywgX19zdHJlYW0p
Owp9CgoKCgoKaW5saW5lIGludApmZW9mX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9mbGFncyAmIDB4MTApICE9IDApOwp9CgoKaW5s
aW5lIGludApmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKQp7CiAgcmV0
dXJuICgoKF9fc3RyZWFtKS0+X2ZsYWdzICYgMHgyMCkgIT0gMCk7Cn0KIyA2NDAgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMv
aW5jbHVkZS9zdGRpby5oIiAyIDMgNAoKCn0KIyA1MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkaW8iIDIgMwojIDk3ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAg
dXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwogIHVzaW5nIDo6ZmVycm9yOwogIHVzaW5n
IDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNpbmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6
ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0
YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJlYWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwog
IHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVz
aW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAgdXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6
Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcgOjpwZXJyb3I7CiAgdXNpbmcgOjpwcmlu
dGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAg
dXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNp
bmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1c2luZyA6OnNldHZidWY7CiAgdXNpbmcg
OjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVzaW5nIDo6dG1wZmlsZTsKICB1c2luZyA6
OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2luZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6
dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMgMTUzICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4
CnsKICB1c2luZyA6OnNucHJpbnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2Fu
ZjsKICB1c2luZyA6OnZzbnByaW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBz
dGQKewogIHVzaW5nIF9fZ251X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNj
YW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJp
bnRmOwogIHVzaW5nIF9fZ251X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysr
aW8uaCIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLmgiIDEgMwojIDk4ICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvZ3Roci5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAxIDMKIyAzNyAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxp
bnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJl
YWQuaCIgMSAzIDQKIyAyOSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2Mt
bGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CiMgMSAiL3Vz
ci9pbmNsdWRlL3NjaGVkLmgiIDEgMyA0CiMgMjkgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAzIDQK
IyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUu
aCIgMyA0CnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIGxvbmcg
aW50IHR2X25zZWM7CiAgfTsKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMyA0CgoKIyAx
ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMgNAojIDQ3ICIvdXNyL2luY2x1ZGUvYml0
cy9zY2hlZC5oIiAzIDQKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJp
b3JpdHk7CiAgfTsKCmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2Zu
KSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBp
bnQgX19mbGFncywgdm9pZCAqX19hcmcpIHRocm93ICgpOwoKCn0KIyAzMyAiL3Vzci9pbmNsdWRl
L3NjaGVkLmgiIDIgMyA0CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IHNjaGVkX3NldHBh
cmFtIChfX3BpZF90IF9fcGlkLCBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkK
ICAgICB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlk
LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2No
ZWRfc2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkLCBpbnQgX19wb2xpY3ksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfeWllbGQgKHZvaWQpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4gKGludCBfX2FsZ29yaXRobSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlkX3QgX19w
aWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSB0aHJvdyAoKTsKCn0KIyAzMCAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNs
dWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMgNAojIDMw
ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgoKCgojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAz
IDQKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMyA0CiMgNDMgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDIgMyA0CiMgNTkgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVm
IF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKdHlwZWRl
ZiBfX3RpbWVfdCB0aW1lX3Q7CiMgODIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNAp0eXBlZGVm
IF9fY2xvY2tpZF90IGNsb2NraWRfdDsKIyA5NCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMyA0CnR5
cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQK
c3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAg
aW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsK
ICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAg
X19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgoKCnN0cnVjdCBpdGltZXJzcGVjCiAgewog
ICAgc3RydWN0IHRpbWVzcGVjIGl0X2ludGVydmFsOwogICAgc3RydWN0IHRpbWVzcGVjIGl0X3Zh
bHVlOwogIH07CgoKc3RydWN0IHNpZ2V2ZW50OwoKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsK
CgoKCgoKCmV4dGVybiBjbG9ja190IGNsb2NrICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdGlt
ZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBkaWZm
dGltZSAodGltZV90IF9fdGltZTEsIHRpbWVfdCBfX3RpbWUwKQogICAgIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRt
ICpfX3RwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lIChjaGFyICpfX3Jl
c3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBj
aGFyICpzdHJwdGltZSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mbXQsIHN0cnVjdCB0bSAqX190
cCkKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUgKF9fY29uc3Qg
dGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1l
IChfX2NvbnN0IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgpleHRlcm4gc3RydWN0IHRt
ICpnbXRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3Ry
aWN0IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9f
cmVzdHJpY3QgX190cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqYXNjdGltZSAoX19jb25z
dCBzdHJ1Y3QgdG0gKl9fdHApIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGltZSAoX19jb25z
dCB0aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqYXNjdGltZV9y
IChfX2NvbnN0IHN0cnVjdCB0bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAg
ICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqY3Rp
bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg
ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIg
Kl9fdHpuYW1lWzJdOwpleHRlcm4gaW50IF9fZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCBfX3Rp
bWV6b25lOwoKCgoKZXh0ZXJuIGNoYXIgKnR6bmFtZVsyXTsKCgoKZXh0ZXJuIHZvaWQgdHpzZXQg
KHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQg
dGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoX19jb25zdCB0aW1lX3QgKl9fd2hlbikg
dGhyb3cgKCk7CiMgMjcxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIHRpbWVfdCB0
aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9j
YWwgKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBf
X3llYXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4g
aW50IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUs
CiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBz
dHJ1Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRp
bWUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgp
OwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29u
c3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNs
b2NrX25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7
CgoKZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90
ICpfX2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9j
a2lkX3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVu
dCAqX19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9f
cmVzdHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAo
dGltZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAo
dGltZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwg
c3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0
aW1lcl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNy
L2luY2x1ZGUvdGltZS5oIiAzIDQKZXh0ZXJuIGludCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4g
c3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKIyAz
NTcgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMgNApleHRlcm4gaW50IGdldGRhdGVfciAoX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0
IHRtICpfX3Jlc3RyaWN0IF9fcmVzYnVmcCkgdGhyb3cgKCk7CgoKCn0KIyAzMSAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9p
bmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAz
IDQKIyAzMSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzIDQKZXh0ZXJuICJDIiB7CgojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMgNAojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9z
aWdzZXQuaCIgMyA0CnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1
Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1
bnNpZ25lZCBsb25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUv
c2lnbmFsLmgiIDIgMyA0CiMgNDggIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0CnR5cGVkZWYg
X19zaWdzZXRfdCBzaWdzZXRfdDsKIyAzNzEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMyA0Cn0K
IyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wdGhyZWFkdHlwZXMuaCIgMSAzIDQKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQu
aCIgMiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5oIiAxIDMgNAojIDM2ICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n
bnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMgNAoKCmV4dGVybiAiQyIgewojIDY4ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9JTkFC
TEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9JTkhF
UklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVB
RF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0KewogIFBU
SFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI
UkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAKCiAg
LAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhS
RUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBUSFJF
QURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQVEhS
RUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVBRF9N
VVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0KewogIFBU
SFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoKCmVu
dW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xPQ0tf
UFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJFQ1VS
U0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tfUFJF
RkVSX1dSSVRFUl9OUAp9OwojIDE0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xp
Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CnN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQg
Kik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlwZTsKICBzdHJ1Y3QgX3B0aHJlYWRf
Y2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxfRU5B
QkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9OwplbnVtCnsKICBQVEhSRUFEX0NBTkNF
TF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNIUk9OT1VTCgp9OwojIDE3MiAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRocmVhZF9jcmVhdGUgKHB0
aHJlYWRfdCAqX19yZXN0cmljdCBfX3RociwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHZvaWQgKigqX19zdGFydF9yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAqX19yZXN0cmljdCBfX2FyZykgdGhyb3cgKCk7CgoKZXh0ZXJu
IHB0aHJlYWRfdCBwdGhyZWFkX3NlbGYgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9lcXVhbCAocHRocmVhZF90IF9fdGhyZWFkMSwgcHRocmVhZF90IF9fdGhyZWFkMikgdGhy
b3cgKCk7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gaW50IHB0
aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVhZF9yZXR1cm4pIHRocm93
ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9kZXRhY2ggKHB0aHJlYWRfdCBfX3RoKSB0aHJv
dyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2luaXQgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0
aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGRldGFjaHN0YXRlIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4
dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlIChfX2NvbnN0IHB0aHJlYWRfYXR0
cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fZGV0YWNoc3RhdGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj
aGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f
cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbSAoX19jb25z
dCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19yZXN0cmljdCBfX3BhcmFtKQogICAgIHRocm93ICgpOwoK
CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5IChwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLCBpbnQgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jl
c3RyaWN0IF9fcG9saWN5KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy
X3NldGluaGVyaXRzY2hlZCAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19pbmhlcml0KSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhlcml0c2NoZWQgKF9fY29uc3QgcHRocmVhZF9hdHRy
X3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2F0dHIsIGludCAqX19yZXN0cmljdCBfX2luaGVyaXQpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf
X3Njb3BlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjb3Bl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3Njb3BlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAq
X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1
YXJkc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXpl
IChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3QgX19ndWFyZHNpemUp
CiAgICAgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRk
ciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk
X2F0dHJfZ2V0c3RhY2thZGRyIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCB2b2lkICoqX19yZXN0
cmljdCBfX3N0YWNrYWRkcikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf
YXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIHRo
cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJl
YWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fc3RhY2tzaXplKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJlYWRfYXR0cl90
ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f
c3RhY2tzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja3Np
emUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBfX3N0YWNrc2l6
ZSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGF0dHJfbnAgKHB0aHJl
YWRfdCBfX3RoLCBwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu
IGludCBwdGhyZWFkX3NldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGlu
dCBfX3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3Ry
dWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRo
cmVhZF9nZXRzY2hlZHBhcmFtIChwdGhyZWFkX3QgX190YXJnZXRfdGhyZWFkLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0
IF9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJy
ZW5jeSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNvbmN1cnJlbmN5
IChpbnQgX19sZXZlbCkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfeWllbGQg
KHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRo
cmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fbXV0ZXhfYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X3RyeWxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAq
X19tdXRleCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xvY2sgKHB0aHJl
YWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl
eF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19y
ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRo
cm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4
X3QgKl9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRy
X2luaXQgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIp
IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0cHNoYXJlZCAoX19j
b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRl
cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfbXV0ZXhhdHRyX3Qg
Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19w
c2hhcmVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5
cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVh
ZF9tdXRleGF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgdGhyb3cgKCk7CgoKCgoKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZF9pbml0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBf
X2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9jb25k
YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9h
dHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFk
X2NvbmRfdCAqX19jb25kKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF9zaWdu
YWwgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKCmV4
dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9f
Y29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jl
c3RyaWN0IF9fbXV0ZXgpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3Rp
bWVkd2FpdCAocHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVz
cGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0
aW1lKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9pbml0IChwdGhy
ZWFkX2NvbmRhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2Nv
bmRhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpl
eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2Nv
bmRhdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
Kl9fcmVzdHJpY3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY29u
ZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSB0aHJvdyAoKTsKCgoK
CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19y
ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2Rl
c3Ryb3kgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50
IHB0aHJlYWRfcndsb2NrX3JkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9j
a190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdGlt
ZWRyZGxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVzdHJpY3QgX19yd2xvY2ssCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpf
X3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGlt
ZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfd3Jsb2NrIChwdGhyZWFk
X3J3bG9ja190ICpfX3J3bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j
a190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19y
ZXN0cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhy
ZWFkX3J3bG9ja191bmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0
dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9k
ZXN0cm95IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfcndsb2Nr
YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0
cmljdCBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
dCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y
d2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldGtpbmRfbnAgKF9fY29uc3Qg
cHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50ICpfX3ByZWYpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh
ZF9yd2xvY2thdHRyX3NldGtpbmRfbnAgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3ByZWYpIHRocm93
ICgpOwojIDUxOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2
ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiBpbnQgcHRo
cmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19wc2hhcmVk
KQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kgKHB0aHJl
YWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bp
bl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2spIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlubG9ja190
ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAo
cHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmlj
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBf
X2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0
aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBwdGhyZWFk
X2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0aHJvdyAo
KTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2JhcnJp
ZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0
dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19w
c2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9zZXRwc2hh
cmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgdGhy
b3cgKCk7CiMgNTY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0ZXJuIGludCBw
dGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5X3QgKl9fa2V5LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fZGVzdHJfZnVuY3Rpb24pICh2b2lkICopKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldHNwZWNpZmljIChwdGhyZWFkX2tleV90
IF9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19w
b2ludGVyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZpYyAocHRo
cmVhZF9rZXlfdCBfX2tleSkgdGhyb3cgKCk7CiMgNTg1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVh
ZC5oIiAzIDQKZXh0ZXJuIGludCBwdGhyZWFkX29uY2UgKHB0aHJlYWRfb25jZV90ICpfX29uY2Vf
Y29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2luaXRfcm91dGluZSkg
KHZvaWQpKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRl
IChpbnQgX19zdGF0ZSwgaW50ICpfX29sZHN0YXRlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw
dGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAqX19vbGR0eXBlKSB0aHJvdyAo
KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfY2FuY2VsIChwdGhyZWFkX3QgX190aHIpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2VsICh2b2lkKSB0aHJvdyAoKTsKIyA2
MTkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp
bnV4LWdudS8zLjMvaW5jbHVkZS9wdGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9j
bGVhbnVwX3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQg
KiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93
ICgpOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRo
cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2NDAgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9w
dGhyZWFkLmgiIDMgNApleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3B1c2hfZGVmZXIgKHN0
cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgp
OwojIDY1MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3B0aHJlYWQuaCIgMyA0CmV4dGVybiB2b2lkIF9wdGhy
ZWFkX2NsZWFudXBfcG9wX3Jlc3RvcmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAq
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf
X2V4ZWN1dGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjcHVjbG9ja2lk
IChwdGhyZWFkX3QgX190aHJlYWRfaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjbG9ja2lkX3QgKl9fY2xvY2tfaWQpIHRocm93ICgpOwoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0
aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1
ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzIDQKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2JpdHMvc2ln
dGhyZWFkLmgiIDMgNApleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9f
bmV3bWFzaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJp
Y3QgX19vbGRtYXNrKXRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9raWxsIChwdGhyZWFk
X3QgX190aHIsIGludCBfX3NpZ25vKSB0aHJvdyAoKTsKIyA2NjUgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9w
dGhyZWFkLmgiIDIgMyA0CiMgNjgwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGli
L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvcHRocmVhZC5oIiAzIDQKZXh0
ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRl
cm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9
CiMgMzggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4
Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRf
a2V5X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9v
bmNlX3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgoj
cHJhZ21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUK
I3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRz
cGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRo
cmVhZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFr
IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sK
IyA4MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2
LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAzCnN0YXRpYyBpbmxpbmUgaW50Cl9f
Z3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2b2lkICpjb25zdCBfX2d0aHJlYWRf
YWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0ZTsKICByZXR1cm4gX19ndGhyZWFk
X2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz
CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9vbmNlIChfX2d0aHJlYWRfb25jZV90ICpvbmNl
LCB2b2lkICgqZnVuYykgKHZvaWQpKQp7CiAgaWYgKF9fZ3RocmVhZF9hY3RpdmVfcCAoKSkKICAg
IHJldHVybiBwdGhyZWFkX29uY2UgKG9uY2UsIGZ1bmMpOwogIGVsc2UKICAgIHJldHVybiAtMTsK
fQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9jcmVhdGUgKF9fZ3RocmVhZF9rZXlf
dCAqa2V5LCB2b2lkICgqZHRvcikgKHZvaWQgKikpCnsKICByZXR1cm4gcHRocmVhZF9rZXlfY3Jl
YXRlIChrZXksIGR0b3IpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2R0b3Ig
KF9fZ3RocmVhZF9rZXlfdCBrZXksIHZvaWQgKnB0cikKewoKICBpZiAocHRyKQogICAgcmV0dXJu
IHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgMCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0
YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZGVsZXRlIChfX2d0aHJlYWRfa2V5X3Qga2V5
KQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2RlbGV0ZSAoa2V5KTsKfQoKc3RhdGljIGlubGluZSB2
b2lkICoKX19ndGhyZWFkX2dldHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5KQp7CiAgcmV0
dXJuIHB0aHJlYWRfZ2V0c3BlY2lmaWMgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9zZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQp7
CiAgcmV0dXJuIHB0aHJlYWRfc2V0c3BlY2lmaWMgKGtleSwgcHRyKTsKfQoKc3RhdGljIGlubGlu
ZSBpbnQKX19ndGhyZWFkX211dGV4X2xvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewog
IGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF9sb2Nr
IChtdXRleCk7CiAgZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3Ro
cmVhZF9tdXRleF90cnlsb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19n
dGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAobXV0
ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRf
bXV0ZXhfdW5sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsKICBpZiAoX19ndGhyZWFk
X2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXRleCk7CiAg
ZWxzZQogICAgcmV0dXJuIDA7Cn0KIyA5OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMiAzCiMgMzgg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1s
aW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKICB0eXBlZGVmIGxv
bmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVhbXNpemU7CgogIHR5cGVkZWYg
cHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3NfdCBfX2Nfc3RyZWFtcG9zOwoK
ICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoKCiAgdHlwZWRlZiBGSUxFIF9f
Y19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAgdHlwZWRlZiBzaG9ydCBfX2lu
dF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2Jvb2xhbHBoYSA9IDB4MDAw
MTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9IDB4MDAwMjsKICAgIHN0YXRp
YyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0OwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
aW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19sZWZ0ID0g
MHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb2N0ID0gMHgwMDQwOwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAwODA7CiAgICBzdGF0aWMgY29u
c3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwogICAgc3RhdGljIGNvbnN0IF9f
aW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlw
ZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19z
aG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2tpcHdzID0g
MHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdW5pdGJ1ZiA9IDB4MjAwMDsK
ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2FzZSA9IDB4NDAwMDsKICAgIHN0
YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0gMHgwMDIwIHwgMHgwMDgwIHwg
MHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYmFzZWZpZWxkID0gMHgwMDAy
IHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZmxvYXRm
aWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf
YmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2VvZmJpdCA9IDB4
MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWlsYml0ID0gMHgwNDsKCgogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19i
aW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaW4gPSAweDA4OwogICAg
c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsKICAgIHN0YXRpYyBjb25zdCBf
X2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mcG9zLmgiIDIgMwojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djaGFyIiAxIDMKIyA0
OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIi
IDMKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2N0aW1lIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9jdGltZSIgMwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6Y2xvY2tfdDsK
ICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNsb2NrOwogIHVzaW5n
IDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1lOwogIHVzaW5nIDo6
YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwogIHVzaW5nIDo6bG9j
YWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2NoYXIiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRl
L3djaGFyLmgiIDEgMyA0CiMgNDAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKIyAxICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4zL2luY2x1ZGUvc3RkYXJnLmgiIDEgMyA0CiMgNDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy
IDMgNAoKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1s
aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgNDkgIi91
c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMyA0
CnR5cGVkZWYgX19tYnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFy
LmgiIDMgNApzdHJ1Y3QgdG07CgoKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nw
eSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJf
dCAqd2NzbmNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAg
ICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2NhdCAod2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX3NyYykgdGhyb3cgKCk7CgpleHRlcm4gd2NoYXJfdCAqd2NzbmNhdCAod2NoYXJfdCAq
X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJu
IGludCB3Y3NjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My
KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCB3
Y3NuY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0
ZXJuIGludCB3Y3NjYXNlY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJf
dCAqX19zMikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3NuY2FzZWNtcCAoX19jb25zdCB3Y2hh
cl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAg
IHNpemVfdCBfX24pIHRocm93ICgpOwoKCgojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEg
MyA0CiMgMjggIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDMgNAp0eXBlZGVmIHN0cnVjdCBfX2xv
Y2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBj
b25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVf
dG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAx
NDQgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMgNAoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBf
bCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBfX3djc25jYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90
ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVf
dCBfX2xvYykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHdjc2NvbGwgKF9fY29uc3Qgd2NoYXJf
dCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVf
dCB3Y3N4ZnJtICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAg
ICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCgoKZXh0ZXJuIGludCBfX3djc2NvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBf
X2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg
X19sb2MpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpf
X3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp
emVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCmV4dGVybiB3Y2hhcl90ICp3
Y3NkdXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19t
YWxsb2NfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9f
d2NzLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f
KSk7CgpleHRlcm4gd2NoYXJfdCAqd2NzcmNociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2No
YXJfdCBfX3djKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoK
ZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3Qg
X193YykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biBzaXplX3Qgd2NzY3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90
ICpfX3JlamVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpl
eHRlcm4gc2l6ZV90IHdjc3NwbiAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hh
cl90ICpfX2FjY2VwdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsK
CmV4dGVybiB3Y2hhcl90ICp3Y3NwYnJrIChfX2NvbnN0IHdjaGFyX3QgKl9fd2NzLCBfX2NvbnN0
IHdjaGFyX3QgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3N0ciAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNr
LCBfX2NvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX3B1cmVfXykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2Nzd2NzIChfX2NvbnN0IHdjaGFyX3Qg
Kl9faGF5c3RhY2ssIF9fY29uc3Qgd2NoYXJfdCAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N0b2sgKHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAq
Kl9fcmVzdHJpY3QgX19wdHIpIHRocm93ICgpOwoKCmV4dGVybiBzaXplX3Qgd2NzbGVuIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK
CmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX21h
eGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVy
biB3Y2hhcl90ICp3bWVtY2hyIChfX2NvbnN0IHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNp
emVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0
ZXJuIGludCB3bWVtY21wIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zMiwgc2l6ZV90IF9f
bikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gd2No
YXJfdCAqd21lbWNweSAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pIHRo
cm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd21lbW1vdmUgKHdjaGFyX3QgKl9fczEsIF9fY29u
c3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgpleHRlcm4gd2No
YXJfdCAqd21lbXNldCAod2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fYywgc2l6ZV90IF9fbikgdGhy
b3cgKCk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbXBjcHkgKHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19zMiwgc2l6ZV90IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gd2ludF90IGJ0
b3djIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2ludF90IF9fYykg
dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgbWJzaW5pdCAoX19jb25zdCBtYnN0YXRlX3QgKl9fcHMp
IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IG1i
cnRvd2MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAg
ICAgICAgICBtYnN0YXRlX3QgKl9fcCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21i
IChjaGFyICpfX3Jlc3RyaWN0IF9fcywgd2NoYXJfdCBfX3djLAogICAgICAgICAgICAgICAgICAg
ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90
IF9fbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAg
ICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7
CmV4dGVybiBzaXplX3QgbWJybGVuIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXpl
X3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp
IHRocm93ICgpOwoKCgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKQp7IHJldHVybiAoX19wcyAh
PSBfX251bGwKICAgICAgICAgID8gbWJydG93YyAoX19udWxsLCBfX3MsIF9fbiwgX19wcykgOiBf
X21icmxlbiAoX19zLCBfX24sIF9fbnVsbCkpOyB9CgoKCgpleHRlcm4gc2l6ZV90IG1ic3J0b3dj
cyAod2NoYXJfdCAqX19yZXN0cmljdCBfX2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29uc3QgY2hhciAqKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg
ICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHNpemVfdCB3Y3NydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3Qg
X19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19w
cykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHNpemVfdCBtYnNucnRvd2NzICh3Y2hhcl90ICpfX3Jl
c3RyaWN0IF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqKl9f
cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBz
aXplX3QgX19sZW4sIG1ic3RhdGVfdCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19zcmMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbndjLCBzaXplX3QgX19sZW4sCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gaW50IHdjd2lkdGggKHdjaGFyX3QgX19jKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCB3Y3N3aWR0aCAoX19jb25zdCB3Y2hhcl90ICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgp
OwoKCgoKCmV4dGVybiBkb3VibGUgd2NzdG9kIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRw
dHIpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgd2NzdG9mIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB3Y3N0b2xkIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
d2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgoKCmV4dGVybiBsb25n
IGludCB3Y3N0b2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNl
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IHdjc3RvdWwgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJv
dyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgd2NzdG9xIChfX2Nv
bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93
ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3Rv
dXEgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKF9fY29uc3Qg
d2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgp
OwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHdjc3RvdWxs
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKTsK
IyA0MTAgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzIDQKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9s
X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0
ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKX19leHRlbnNp
b25fXwpleHRlcm4gbG9uZyBsb25nIGludCBfX3djc3RvbGxfbCAoX19jb25zdCB3Y2hhcl90ICpf
X3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFy
X3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9f
CmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fd2NzdG91bGxfbCAoX19jb25zdCB3Y2hh
cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j
KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBfX3djc3RvZF9sIChfX2NvbnN0IHdjaGFy
X3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0
ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBf
X3djc3RvbGRfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsK
CgoKCgpleHRlcm4gZG91YmxlIF9fd2NzdG9kX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVy
biBmbG9hdCBfX3djc3RvZl9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj
dCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs
ZSBfX3djc3RvbGRfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg
X19ncm91cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2ludGVybmFsIChf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9pbnRlcm5hbCAoX19jb25zdCB3
Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXAp
IHRocm93ICgpOwoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s
bF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNl
LCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVk
IGxvbmcgbG9uZyBpbnQgX193Y3N0b3VsbF9pbnRlcm5hbCAoX19jb25zdCB3Y2hhcl90ICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHdjaGFyX3QgKioKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoK
CgoKZXh0ZXJuIF9faW5saW5lIGRvdWJsZSB3Y3N0b2QgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19y
ZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2RfaW50ZXJuYWwgKF9f
bnB0ciwgX19lbmRwdHIsIDApOyB9CmV4dGVybiBfX2lubGluZSBsb25nIGludCB3Y3N0b2wgKF9f
Y29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbF9p
bnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsgfQpleHRlcm4gX19pbmxpbmUg
dW5zaWduZWQgbG9uZyBpbnQgd2NzdG91bCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
bnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b3VsX2ludGVybmFs
IChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKZXh0ZXJuIF9faW5saW5lIGZsb2F0
IHdjc3RvZiAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgp
CnsgcmV0dXJuIF9fd2NzdG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsgfQpleHRl
cm4gX19pbmxpbmUgbG9uZyBkb3VibGUgd2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvbGRfaW50ZXJu
YWwgKF9fbnB0ciwgX19lbmRwdHIsIDApOyB9CgoKX19leHRlbnNpb25fXwpleHRlcm4gX19pbmxp
bmUgbG9uZyBsb25nIGludCB3Y3N0b3EgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVz
dHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSkgdGhyb3cgKCkKeyByZXR1cm4gX193Y3N0b2xsX2ludGVybmFsIChfX25wdHIsIF9f
ZW5kcHRyLCBfX2Jhc2UsIDApOyB9Cl9fZXh0ZW5zaW9uX18KZXh0ZXJuIF9faW5saW5lIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgd2NzdG91cSAoX19jb25zdCB3Y2hhcl90ICoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX25wdHIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf
X3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7IHJldHVybiBfX3djc3RvdWxsX2ludGVy
bmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOyB9CgoKCgoKCgpleHRlcm4gd2NoYXJf
dCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19zcmMpIHRocm93
ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBfX2NvbnN0
IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJu
IGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsKCgoKZXh0ZXJu
IGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAg
ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0
aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dwcmludGYgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICBf
X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7
CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAg
ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSA7Cgpl
eHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQs
CiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgp
IDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBfX3MsIHNpemVf
dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9f
c3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBf
X2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5mIChfX2NvbnN0
IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAoKSA7CgpleHRl
cm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3MsCiAgICAgICAg
ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pCiAg
ICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpfX3Jlc3RyaWN0
IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9f
Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0
aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg
ICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVz
dHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJp
Y3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQog
ICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFt
KSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiB3
aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpl
eHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pIHRocm93
ICgpOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFyX3QgX193YykgdGhyb3cgKCk7CgoK
CgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fd3MsIGludCBf
X24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg
dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmlj
dCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpf
X3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19G
SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQg
KHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgZmdldHdjX3VubG9ja2VkIChfX0ZJTEUg
Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IGZwdXR3Y191bmxvY2tlZCAod2No
YXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdpbnRfdCBw
dXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK
ZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBf
X3dzLCBpbnQgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9f
cmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2Vk
IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVy
biBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhz
aXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg
X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jl
c3RyaWN0IF9fdHApIHRocm93ICgpOwojIDY4MCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMgNAp9
CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3dj
aGFyIiAyIDMKIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9jd2NoYXIiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptYnN0YXRlX3Q7Cn0KIyAx
MzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djaGFy
IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwog
IHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVz
aW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2lu
ZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5n
IDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcg
OjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5n
IDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2lu
ZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwog
IHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7
CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwog
IHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAg
dXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAg
dXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsK
ICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1
c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNp
bmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5n
IDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2lu
ZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxp
bmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVy
biB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2lu
ZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwg
d2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf
dCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90
KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hy
KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3Nz
dHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf
X3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwg
X19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hy
KHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNo
cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoK
bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9s
bDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9j
eHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4
eDo6d2NzdG91bGw7Cn0KIyA0NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Zwb3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgZnBvcwogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfU3RhdGVUIF9fc3RhdGVfdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJl
YW1vZmYgX01fb2ZmOwogICAgICBfX3N0YXRlX3R5cGUgX01fc3Q7CgogICAgcHVibGljOgogICAg
ICBfX3N0YXRlX3R5cGUKICAgICAgc3RhdGUoKSBjb25zdCB7IHJldHVybiBfTV9zdDsgfQoKICAg
ICAgdm9pZAogICAgICBzdGF0ZShfX3N0YXRlX3R5cGUgX19zdCkgeyBfTV9zdCA9IF9fc3Q7IH0K
CgoKICAgICAgZnBvcygpOiBfTV9vZmYoc3RyZWFtb2ZmKCkpLCBfTV9zdChfX3N0YXRlX3R5cGUo
KSkgeyB9CgogICAgICBmcG9zKHN0cmVhbW9mZiBfX29mZiwgX19zdGF0ZV90eXBlIF9fc3QgPSBf
X3N0YXRlX3R5cGUoKSkKICAgICAgOiBfTV9vZmYoX19vZmYpLCBfTV9zdChfX3N0KSB7IH0KCiAg
ICAgIG9wZXJhdG9yIHN0cmVhbW9mZigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAg
ZnBvcyYKICAgICAgb3BlcmF0b3IrPShzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmICs9IF9fb2Zm
OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9yLT0oc3RyZWFtb2Zm
IF9fb2ZmKSB7IF9NX29mZiAtPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zCiAg
ICAgIG9wZXJhdG9yKyhzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgq
dGhpcyk7CiAgICAgICAgX190ICs9IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0K
CiAgICAgIGZwb3MKICAgICAgb3BlcmF0b3ItKHN0cmVhbW9mZiBfX29mZikKICAgICAgewogICAg
ICAgIGZwb3MgX190KCp0aGlzKTsKICAgICAgICBfX3QgLT0gX19vZmY7CiAgICAgICAgcmV0dXJu
IF9fdDsKICAgICAgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcj09KGNvbnN0IGZwb3MmIF9f
cG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgPT0gX19wb3MuX01fb2ZmOyB9CgogICAg
ICBib29sCiAgICAgIG9wZXJhdG9yIT0oY29uc3QgZnBvcyYgX19wb3MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIF9NX29mZiAhPSBfX3Bvcy5fTV9vZmY7IH0KCiAgICAgIHN0cmVhbW9mZgogICAgICBf
TV9wb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIF9NX29mZjsgfQoKICAgICAgdm9pZAogICAgICBf
TV9wb3NpdGlvbihzdHJlYW1vZmYgX19vZmYpIHsgX01fb2ZmID0gX19vZmY7IH0KICAgIH07CgoK
ICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiBzdHJlYW1wb3M7CgogIHR5cGVkZWYgZnBvczxtYnN0
YXRlX3Q+IHdzdHJlYW1wb3M7Cgp9CiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvaW9zZndkIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4
Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2
b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Ro
cm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFp
bl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3Vt
ZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK
ICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg
X190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lv
c19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pb3Nmd2QiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8
X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pb3M7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz
aWNfc3RyZWFtYnVmOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9D
aGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBi
YXNpY19pb3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9jID0g
YWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+
LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs
YXNzIGJhc2ljX2lzdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUg
X0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVh
bTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90
cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xh
c3MgYmFzaWNfZmlsZWJ1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pZnN0cmVhbTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFp
dHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vZnN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBj
bGFzcyBiYXNpY19mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRl
cmF0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo
YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjsKCgoKICBj
bGFzcyBpb3NfYmFzZTsKCgogIHR5cGVkZWYgYmFzaWNfaW9zPGNoYXI+IGlvczsKICB0eXBlZGVm
IGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPiBzdHJlYW1idWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyZWFt
PGNoYXI+IGlzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXI+IG9zdHJlYW07CiAg
dHlwZWRlZiBiYXNpY19pb3N0cmVhbTxjaGFyPiBpb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX3N0
cmluZ2J1ZjxjaGFyPiBzdHJpbmdidWY7CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPGNo
YXI+IGlzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+IG9z
dHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj4gc3RyaW5nc3Ry
ZWFtOwogIHR5cGVkZWYgYmFzaWNfZmlsZWJ1ZjxjaGFyPiBmaWxlYnVmOwogIHR5cGVkZWYgYmFz
aWNfaWZzdHJlYW08Y2hhcj4gaWZzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vZnN0cmVhbTxjaGFy
PiBvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08Y2hhcj4gZnN0cmVhbTsKCiAgdHlw
ZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lvczsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3
Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0
cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJlYW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRl
ZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJp
bmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08
d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdj
aGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFy
X3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxl
YnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJlYW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVk
ZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4gd29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0
cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKfQojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0NCAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2NoYXJf
dHJhaXRzLmgiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9jc3RyaW5nIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9jc3RyaW5nIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5o
IiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMgNApleHRlcm4gIkMiIHsKCgoK
CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMt
bGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDIgMyA0CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z
cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpf
X2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0
IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBz
aXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAq
X19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAo
X19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNo
ciAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAo
X19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1
cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f
Yywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7
CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0
cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19j
b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl
cm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpf
X3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNo
YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAg
ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0
cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg
KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29u
c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19j
b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVz
dHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CiMgMTExICIvdXNyL2luY2x1ZGUvc3Ry
aW5nLmgiIDMgNApleHRlcm4gaW50IF9fc3RyY29sbF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f
Y29uc3QgY2hhciAqX19zMiwgX19sb2NhbGVfdCBfX2wpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rl
c3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpzdHJkdXAg
KF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp
OwoKCgoKCgpleHRlcm4gY2hhciAqc3RybmR1cCAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6
ZV90IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwojIDE1
NSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzIDQKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19jb25z
dCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp
OwoKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJjaHJu
dWwgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19wdXJlX18pKTsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoX19jb25zdCBjaGFyICpfX3Ms
IF9fY29uc3QgY2hhciAqX19yZWplY3QpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
cHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKF9fY29uc3QgY2hhciAqX19zLCBfX2Nv
bnN0IGNoYXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKZXh0ZXJuIGNoYXIgKnN0cnBicmsgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNo
YXIgKl9fYWNjZXB0KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2NvbnN0IGNo
YXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoX19jb25zdCBjaGFyICpfX2hheXN0YWNrLCBfX2Nv
bnN0IGNoYXIgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCgpleHRlcm4gY2hhciAqc3RydG9rIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVsaW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3N0cnRva19yIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgdGhyb3cgKCk7CgpleHRlcm4gY2hh
ciAqc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJp
Y3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3Nh
dmVfcHRyKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQgKm1lbW1lbSAoX19jb25zdCB2b2lk
ICpfX2hheXN0YWNrLCBzaXplX3QgX19oYXlzdGFja2xlbiwKICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX25lZWRsZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gdm9pZCAqX19tZW1wY3B5ICh2
b2lkICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB2
b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQg
Km1lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg
X19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoK
CmV4dGVybiBzaXplX3Qgc3RybGVuIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHN0cm5sZW4gKF9fY29uc3Qg
Y2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxlbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVt
KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hh
ciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBfX2J6
ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBiY29w
eSAoX19jb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3QgX19uKSB0aHJvdyAo
KTsKCgpleHRlcm4gdm9pZCBiemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK
CgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3My
LCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK
CmV4dGVybiBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29u
c3QgY2hhciAqX19zLCBpbnQgX19jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p
KTsKCgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBpbnQgX19sKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9fIGV4dGVybiBpbnQgZmZz
bGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwg
X19jb25zdCBjaGFyICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf
XykpOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X3B1cmVfXykpOwoKCgoKCmV4dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKF9fY29uc3QgY2hhciAq
X19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy
biBpbnQgX19zdHJuY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq
X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3Qg
X19sb2MpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0
ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKl9fcmVzdHJpY3QgX19zdHJpbmdwLAogICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gaW50IHN0cnZlcnNjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFy
ICpfX3MyKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy
biBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKl9f
c3RwY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fc3JjKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwY3B5IChjaGFyICpfX3Jlc3Ry
aWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgp
OwoKCgpleHRlcm4gY2hhciAqX19zdHBuY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXpl
X3QgX19uKSB0aHJvdyAoKTsKZXh0ZXJuIGNoYXIgKnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg
X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f
c3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyZnJ5IChjaGFyICpf
X3N0cmluZykgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKm1lbWZyb2IgKHZvaWQgKl9fcywgc2l6
ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25zdCBj
aGFyICpfX2ZpbGVuYW1lKSB0aHJvdyAoKTsKIyAzNjQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIg
MyA0Cn0KIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9jc3RyaW5nIiAyIDMKIyA3NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9jc3RyaW5nIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bWVtY3B5Owog
IHVzaW5nIDo6bWVtbW92ZTsKICB1c2luZyA6OnN0cmNweTsKICB1c2luZyA6OnN0cm5jcHk7CiAg
dXNpbmcgOjpzdHJjYXQ7CiAgdXNpbmcgOjpzdHJuY2F0OwogIHVzaW5nIDo6bWVtY21wOwogIHVz
aW5nIDo6c3RyY21wOwogIHVzaW5nIDo6c3RyY29sbDsKICB1c2luZyA6OnN0cm5jbXA7CiAgdXNp
bmcgOjpzdHJ4ZnJtOwogIHVzaW5nIDo6c3RyY3NwbjsKICB1c2luZyA6OnN0cnNwbjsKICB1c2lu
ZyA6OnN0cnRvazsKICB1c2luZyA6Om1lbXNldDsKICB1c2luZyA6OnN0cmVycm9yOwogIHVzaW5n
IDo6c3RybGVuOwoKICB1c2luZyA6Om1lbWNocjsKCiAgaW5saW5lIHZvaWQqCiAgbWVtY2hyKHZv
aWQqIF9fcCwgaW50IF9fYywgc2l6ZV90IF9fbikKICB7IHJldHVybiBtZW1jaHIoY29uc3RfY2Fz
dDxjb25zdCB2b2lkKj4oX19wKSwgX19jLCBfX24pOyB9CgogIHVzaW5nIDo6c3RyY2hyOwoKICBp
bmxpbmUgY2hhcioKICBzdHJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1
aWx0aW5fc3RyY2hyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVz
aW5nIDo6c3RycGJyazsKCiAgaW5saW5lIGNoYXIqCiAgc3RycGJyayhjaGFyKiBfX3MxLCBjb25z
dCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJwYnJrKGNvbnN0X2Nhc3Q8Y29u
c3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6OnN0cnJjaHI7CgogIGlubGluZSBj
aGFyKgogIHN0cnJjaHIoY2hhciogX19zMSwgaW50IF9fbikKICB7IHJldHVybiBfX2J1aWx0aW5f
c3RycmNocihjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6
OnN0cnN0cjsKCiAgaW5saW5lIGNoYXIqCiAgc3Ryc3RyKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIq
IF9fczIpCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnN0cihjb25zdF9jYXN0PGNvbnN0IGNoYXIq
PihfX3MxKSwgX19zMik7IH0KfQojIDQ2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7
CiMgNjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0
cy9jaGFyX3RyYWl0cy5oIiAzCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0IGNo
YXJfdHJhaXRzCiAgICB7CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAgICAgIHR5
cGVkZWYgdW5zaWduZWQgbG9uZyBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9z
X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIG1i
c3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgYXNzaWduKGNoYXJf
dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBib29sCiAg
ICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKTsKCiAg
ICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hh
cl90eXBlJiBfX2MyKTsKCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFy
X3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBz
dGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcyk7CgogICAgICBz
dGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBz
aXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSk7CgogICAgICBzdGF0aWMgY2hhcl90eXBl
KgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXpl
X3QgX19uKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBf
X3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pOwoKICAgICAgc3RhdGljIGNo
YXJfdHlwZSoKICAgICAgYXNzaWduKGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5
cGUgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hhcl90eXBlKGNvbnN0
IGludF90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBl
KGNvbnN0IGNoYXJfdHlwZSYgX19jKTsKCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90
eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMik7CgogICAgICBz
dGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
bm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAg
c3RydWN0IGNoYXJfdHJhaXRzPGNoYXI+CiAgICB7CiAgICAgIHR5cGVkZWYgY2hhciBjaGFyX3R5
cGU7CiAgICAgIHR5cGVkZWYgaW50IGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBw
b3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg
bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hh
cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7
IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29u
c3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAg
IHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90
eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGlu
dAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBf
X3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiBtZW1jbXAoX19zMSwgX19zMiwgX19uKTsg
fQoKICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3Mp
CiAgICAgIHsgcmV0dXJuIHN0cmxlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90
eXBlKgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBj
aGFyX3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgY2hhcl90eXBl
Kj4obWVtY2hyKF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAg
ICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9f
bikKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtbW92ZShfX3MxLCBf
X3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5
cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4obWVtY3B5KF9fczEsIF9fczIsIF9fbikpOyB9Cgog
ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVf
dCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlw
ZSo+KG1lbXNldChfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAg
ICAgdG9fY2hhcl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRp
Y19jYXN0PGNoYXJfdHlwZT4oX19jKTsgfQoKCgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg
dG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGludF90eXBlPihzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpKTsgfQoKICAgICAg
c3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0
IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0
YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o
KC0xKSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90
eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIChfX2MgPT0gZW9mKCkpID8gMCA6IF9fYzsgfQogIH07
CgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czx3Y2hhcl90PgogICAgewog
ICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHdpbnRfdCBpbnRf
dHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgd3N0
cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAg
ICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJf
dHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAg
ICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAg
IHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29u
c3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJu
IF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hh
cl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsg
cmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoKICAgICAgc3RhdGljIHNpemVfdAog
ICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAgICAgIHsgcmV0dXJuIHdjc2xlbihf
X3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBlKgogICAgICBmaW5kKGNvbnN0IGNo
YXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFyX3R5cGUmIF9fYSkKICAgICAgeyBy
ZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoK
ICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgaW50X3R5
cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3MxLCBfX3MyLCBfX24pOyB9CgogICAg
ICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hh
cl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiB3bWVtY3B5KF9fczEsIF9f
czIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5
cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gd21lbXNl
dChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFy
X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0KCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9f
YykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFf
aW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQogICAg
ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBl
b2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oKDB4ZmZmZmZmZmZ1KSk7IH0KCiAg
ICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpCiAg
ICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkpID8gMCA6IF9fYzsgfQogIH07CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3Qg
X0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFyVCBfTV9jOwogICAgICBfQ2hhcl90
cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01fYyhfX2MpIHsgfQoKICAgICAgYm9v
bAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19hKSB7IHJldHVybiBfVHJhaXRzOjpl
cShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvaW9zIiAyIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAxIDMKIyA0NCAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3
ZC5oIiAzCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEgMwojIDM2ICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251
L2JpdHMvYysrbG9jYWxlLmgiIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nsb2NhbGUiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2xv
Y2FsZS5oIiAxIDMgNAojIDI5ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNAojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z
LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAzMCAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAy
IDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMgNAojIDI3ICIvdXNyL2lu
Y2x1ZGUvYml0cy9sb2NhbGUuaCIgMyA0CmVudW0KewogIF9fTENfQ1RZUEUgPSAwLAogIF9fTENf
TlVNRVJJQyA9IDEsCiAgX19MQ19USU1FID0gMiwKICBfX0xDX0NPTExBVEUgPSAzLAogIF9fTENf
TU9ORVRBUlkgPSA0LAogIF9fTENfTUVTU0FHRVMgPSA1LAogIF9fTENfQUxMID0gNiwKICBfX0xD
X1BBUEVSID0gNywKICBfX0xDX05BTUUgPSA4LAogIF9fTENfQUREUkVTUyA9IDksCiAgX19MQ19U
RUxFUEhPTkUgPSAxMCwKICBfX0xDX01FQVNVUkVNRU5UID0gMTEsCiAgX19MQ19JREVOVElGSUNB
VElPTiA9IDEyCn07CiMgMzEgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzIDQKCmV4dGVybiAi
QyIgewojIDUyICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMgNApzdHJ1Y3QgbGNvbnYKewoKCiAg
Y2hhciAqZGVjaW1hbF9wb2ludDsKICBjaGFyICp0aG91c2FuZHNfc2VwOwoKCgoKCiAgY2hhciAq
Z3JvdXBpbmc7CgoKCgoKICBjaGFyICppbnRfY3Vycl9zeW1ib2w7CiAgY2hhciAqY3VycmVuY3lf
c3ltYm9sOwogIGNoYXIgKm1vbl9kZWNpbWFsX3BvaW50OwogIGNoYXIgKm1vbl90aG91c2FuZHNf
c2VwOwogIGNoYXIgKm1vbl9ncm91cGluZzsKICBjaGFyICpwb3NpdGl2ZV9zaWduOwogIGNoYXIg
Km5lZ2F0aXZlX3NpZ247CiAgY2hhciBpbnRfZnJhY19kaWdpdHM7CiAgY2hhciBmcmFjX2RpZ2l0
czsKCiAgY2hhciBwX2NzX3ByZWNlZGVzOwoKICBjaGFyIHBfc2VwX2J5X3NwYWNlOwoKICBjaGFy
IG5fY3NfcHJlY2VkZXM7CgogIGNoYXIgbl9zZXBfYnlfc3BhY2U7CgoKCgoKCiAgY2hhciBwX3Np
Z25fcG9zbjsKICBjaGFyIG5fc2lnbl9wb3NuOwoKCiAgY2hhciBpbnRfcF9jc19wcmVjZWRlczsK
CiAgY2hhciBpbnRfcF9zZXBfYnlfc3BhY2U7CgogIGNoYXIgaW50X25fY3NfcHJlY2VkZXM7Cgog
IGNoYXIgaW50X25fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgaW50X3Bfc2lnbl9wb3NuOwog
IGNoYXIgaW50X25fc2lnbl9wb3NuOwojIDExOSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQK
fTsKCgoKZXh0ZXJuIGNoYXIgKnNldGxvY2FsZSAoaW50IF9fY2F0ZWdvcnksIF9fY29uc3QgY2hh
ciAqX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBzdHJ1Y3QgbGNvbnYgKmxvY2FsZWNvbnYg
KHZvaWQpIHRocm93ICgpOwojIDE0OSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAzIDQKZXh0ZXJu
IF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ssIF9fY29uc3QgY2hh
ciAqX19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9f
YmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX2xvY2FsZV90IF9fZHVwbG9jYWxlIChfX2xvY2Fs
ZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19s
b2NhbGVfdCBfX2RhdGFzZXQpIHRocm93ICgpOwoKCn0KIyA1MCAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jbG9jYWxlIiAyIDMKCgoKCgpuYW1lc3BhY2Ug
c3RkCnsKICB1c2luZyA6Omxjb252OwogIHVzaW5nIDo6c2V0bG9jYWxlOwogIHVzaW5nIDo6bG9j
YWxlY29udjsKfQojIDM3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv
aW5jbHVkZS9sYW5naW5mby5oIiAxIDMgNAojIDI0ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg
MyA0CiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVk
ZS9ubF90eXBlcy5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICpubF9jYXRkOwoK
CnR5cGVkZWYgaW50IG5sX2l0ZW07CgoKZXh0ZXJuIG5sX2NhdGQgY2F0b3BlbiAoX19jb25zdCBj
aGFyICpfX2NhdF9uYW1lLCBpbnQgX19mbGFnKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmNh
dGdldHMgKG5sX2NhdGQgX19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAg
ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCmV4dGVy
biBpbnQgY2F0Y2xvc2UgKG5sX2NhdGQgX19jYXRhbG9nKSB0aHJvdyAoKTsKCn0KIyAyNSAiL3Vz
ci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMyA0CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs
ZS5oIiAxIDMgNAojIDI3ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzIDQKCgpleHRlcm4g
IkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMgNAplbnVtCnsKCgoKICBBQkRB
WV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBBQkRBWV8yLAoKICBBQkRBWV8z
LAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoKICBBQkRBWV83LAoKCgogIERB
WV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBEQVlfNSwKCiAgREFZXzYsCgog
IERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFCTU9OXzMsCgogIEFCTU9OXzQs
CgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgogIEFCTU9OXzgsCgogIEFCTU9O
XzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05fMTIsCgoKCiAgTU9OXzEsCgog
IE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoKICBNT05fNiwKCiAgTU9OXzcs
CgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05fMTEsCgogIE1PTl8xMiwKCgog
IEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9GTVQsCgogIFRfRk1ULAoKICBU
X0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgogIEVSQV9EX0ZNVCwKCiAgQUxU
X0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwKCgogIF9OTF9USU1FX0VSQV9O
VU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAgX05MX1dBQkRBWV8xLAogIF9O
TF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRBWV80LAogIF9OTF9XQUJEQVlf
NSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAgX05MX1dEQVlfMSwKICBfTkxf
V0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBfTkxfV0RBWV81LAogIF9OTF9X
REFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwKICBfTkxfV0FCTU9OXzIsCiAg
X05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FCTU9OXzUsCiAgX05MX1dBQk1P
Tl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAgX05MX1dBQk1PTl85LAogIF9O
TF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FCTU9OXzEyLAoKCiAgX05MX1dN
T05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05MX1dNT05fNCwKICBfTkxfV01P
Tl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxfV01PTl84LAogIF9OTF9XTU9O
XzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05MX1dNT05fMTIsCgogIF9OTF9X
QU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQsCiAgX05MX1dEX0ZNVCwKICBf
TkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dFUkFfWUVBUiwKICBfTkxfV0VS
QV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFfRF9UX0ZNVCwKICBfTkxfV0VS
QV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxfVElNRV9XRUVLXzFTVERBWSwK
ICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklSU1RfV0VFS0RBWSwKICBfTkxf
VElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJFQ1RJT04sCiAgX05MX1RJTUVf
VElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9GTVQsCgogIF9OTF9USU1FX0NP
REVTRVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgo
X19MQ19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9O
TF9DT0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVf
RVhUUkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAg
X05MX0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxF
V0MsCiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxf
Q09MTEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05M
X0NPTExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxf
Q09MTEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdDLAogIF9OTF9DT0xMQVRF
X0NPREVTRVQsCiAgX05MX05VTV9MQ19DT0xMQVRFLAoKCgoKICBfTkxfQ1RZUEVfQ0xBU1MgPSAo
KChfX0xDX0NUWVBFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DVFlQRV9UT1VQUEVSLAogIF9OTF9D
VFlQRV9HQVAxLAogIF9OTF9DVFlQRV9UT0xPV0VSLAogIF9OTF9DVFlQRV9HQVAyLAogIF9OTF9D
VFlQRV9DTEFTUzMyLAogIF9OTF9DVFlQRV9HQVAzLAogIF9OTF9DVFlQRV9HQVA0LAogIF9OTF9D
VFlQRV9HQVA1LAogIF9OTF9DVFlQRV9HQVA2LAogIF9OTF9DVFlQRV9DTEFTU19OQU1FUywKICBf
TkxfQ1RZUEVfTUFQX05BTUVTLAogIF9OTF9DVFlQRV9XSURUSCwKICBfTkxfQ1RZUEVfTUJfQ1VS
X01BWCwKICBfTkxfQ1RZUEVfQ09ERVNFVF9OQU1FLAogIENPREVTRVQgPSBfTkxfQ1RZUEVfQ09E
RVNFVF9OQU1FLAoKICBfTkxfQ1RZUEVfVE9VUFBFUjMyLAogIF9OTF9DVFlQRV9UT0xPV0VSMzIs
CiAgX05MX0NUWVBFX0NMQVNTX09GRlNFVCwKICBfTkxfQ1RZUEVfTUFQX09GRlNFVCwKICBfTkxf
Q1RZUEVfSU5ESUdJVFNfTUJfTEVOLAogIF9OTF9DVFlQRV9JTkRJR0lUUzBfTUIsCiAgX05MX0NU
WVBFX0lORElHSVRTMV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMyX01CLAogIF9OTF9DVFlQRV9J
TkRJR0lUUzNfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNF9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ
VFM1X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzZfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTN19N
QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM4X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzlfTUIsCiAg
X05MX0NUWVBFX0lORElHSVRTX1dDX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMwX1dDLAogIF9O
TF9DVFlQRV9JTkRJR0lUUzFfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTMl9XQywKICBfTkxfQ1RZ
UEVfSU5ESUdJVFMzX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfV0MsCiAgX05MX0NUWVBFX0lO
RElHSVRTNV9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU
UzdfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X1dD
LAogIF9OTF9DVFlQRV9PVVRESUdJVDBfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMV9NQiwKICBf
TkxfQ1RZUEVfT1VURElHSVQyX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfTUIsCiAgX05MX0NU
WVBFX09VVERJR0lUNF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ1X01CLAogIF9OTF9DVFlQRV9P
VVRESUdJVDZfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUN19NQiwKICBfTkxfQ1RZUEVfT1VURElH
SVQ4X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMF9X
QywKICBfTkxfQ1RZUEVfT1VURElHSVQxX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDJfV0MsCiAg
X05MX0NUWVBFX09VVERJR0lUM19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ0X1dDLAogIF9OTF9D
VFlQRV9PVVRESUdJVDVfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUNl9XQywKICBfTkxfQ1RZUEVf
T1VURElHSVQ3X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDhfV0MsCiAgX05MX0NUWVBFX09VVERJ
R0lUOV9XQywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVEFCX1NJWkUsCiAgX05MX0NUWVBFX1RSQU5T
TElUX0ZST01fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX1RCTCwKICBfTkxfQ1RZUEVf
VFJBTlNMSVRfVE9fSURYLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9UT19UQkwsCiAgX05MX0NUWVBF
X1RSQU5TTElUX0RFRkFVTFRfTUlTU0lOR19MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0RFRkFV
TFRfTUlTU0lORywKICBfTkxfQ1RZUEVfVFJBTlNMSVRfSUdOT1JFX0xFTiwKICBfTkxfQ1RZUEVf
VFJBTlNMSVRfSUdOT1JFLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMSwKICBfTkxfQ1RZUEVfRVhU
UkFfTUFQXzIsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8zLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf
NCwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzUsCiAgX05MX0NUWVBFX0VYVFJBX01BUF82LAogIF9O
TF9DVFlQRV9FWFRSQV9NQVBfNywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzgsCiAgX05MX0NUWVBF
X0VYVFJBX01BUF85LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTAsCiAgX05MX0NUWVBFX0VYVFJB
X01BUF8xMSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEyLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf
MTMsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xNCwKICBfTkxfTlVNX0xDX0NUWVBFLAoKCgoKICBf
X0lOVF9DVVJSX1NZTUJPTCA9ICgoKF9fTENfTU9ORVRBUlkpIDw8IDE2KSB8ICgwKSksCgoKCiAg
X19DVVJSRU5DWV9TWU1CT0wsCgoKCiAgX19NT05fREVDSU1BTF9QT0lOVCwKCgoKICBfX01PTl9U
SE9VU0FORFNfU0VQLAoKCgogIF9fTU9OX0dST1VQSU5HLAoKCgogIF9fUE9TSVRJVkVfU0lHTiwK
CgoKICBfX05FR0FUSVZFX1NJR04sCgoKCiAgX19JTlRfRlJBQ19ESUdJVFMsCgoKCiAgX19GUkFD
X0RJR0lUUywKCgoKICBfX1BfQ1NfUFJFQ0VERVMsCgoKCiAgX19QX1NFUF9CWV9TUEFDRSwKCgoK
ICBfX05fQ1NfUFJFQ0VERVMsCgoKCiAgX19OX1NFUF9CWV9TUEFDRSwKCgoKICBfX1BfU0lHTl9Q
T1NOLAoKCgogIF9fTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0NSTkNZU1RSLAoKICBf
X0lOVF9QX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX1BfU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5U
X05fQ1NfUFJFQ0VERVMsCgoKCiAgX19JTlRfTl9TRVBfQllfU1BBQ0UsCgoKCiAgX19JTlRfUF9T
SUdOX1BPU04sCgoKCiAgX19JTlRfTl9TSUdOX1BPU04sCgoKCiAgX05MX01PTkVUQVJZX0RVT19J
TlRfQ1VSUl9TWU1CT0wsCiAgX05MX01PTkVUQVJZX0RVT19DVVJSRU5DWV9TWU1CT0wsCiAgX05M
X01PTkVUQVJZX0RVT19JTlRfRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19GUkFDX0RJ
R0lUUywKICBfTkxfTU9ORVRBUllfRFVPX1BfQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RV
T19QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX05fQ1NfUFJFQ0VERVMsCiAgX05M
X01PTkVUQVJZX0RVT19OX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX0NT
X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0VQX0JZX1NQQUNFLAogIF9OTF9N
T05FVEFSWV9EVU9fSU5UX05fQ1NfUFJFQ0VERVMsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfTl9T
RVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRB
UllfRFVPX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX1BfU0lHTl9QT1NOLAog
IF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0lHTl9QT1NOLAogIF9OTF9NT05FVEFSWV9VTk9fVkFM
SURfRlJPTSwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9EVU9f
VkFMSURfRlJPTSwKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX1RPLAogIF9OTF9NT05FVEFSWV9D
T05WRVJTSU9OX1JBVEUsCiAgX05MX01PTkVUQVJZX0RFQ0lNQUxfUE9JTlRfV0MsCiAgX05MX01P
TkVUQVJZX1RIT1VTQU5EU19TRVBfV0MsCiAgX05MX01PTkVUQVJZX0NPREVTRVQsCiAgX05MX05V
TV9MQ19NT05FVEFSWSwKCgoKICBfX0RFQ0lNQUxfUE9JTlQgPSAoKChfX0xDX05VTUVSSUMpIDw8
IDE2KSB8ICgwKSksCgoKCiAgUkFESVhDSEFSID0gX19ERUNJTUFMX1BPSU5ULAoKICBfX1RIT1VT
QU5EU19TRVAsCgoKCiAgVEhPVVNFUCA9IF9fVEhPVVNBTkRTX1NFUCwKCiAgX19HUk9VUElORywK
CgoKICBfTkxfTlVNRVJJQ19ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9OVU1FUklDX1RIT1VTQU5E
U19TRVBfV0MsCiAgX05MX05VTUVSSUNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX05VTUVSSUMsCgog
IF9fWUVTRVhQUiA9ICgoKF9fTENfTUVTU0FHRVMpIDw8IDE2KSB8ICgwKSksCgogIF9fTk9FWFBS
LAoKICBfX1lFU1NUUiwKCgoKICBfX05PU1RSLAoKCgogIF9OTF9NRVNTQUdFU19DT0RFU0VULAog
IF9OTF9OVU1fTENfTUVTU0FHRVMsCgogIF9OTF9QQVBFUl9IRUlHSFQgPSAoKChfX0xDX1BBUEVS
KSA8PCAxNikgfCAoMCkpLAogIF9OTF9QQVBFUl9XSURUSCwKICBfTkxfUEFQRVJfQ09ERVNFVCwK
ICBfTkxfTlVNX0xDX1BBUEVSLAoKICBfTkxfTkFNRV9OQU1FX0ZNVCA9ICgoKF9fTENfTkFNRSkg
PDwgMTYpIHwgKDApKSwKICBfTkxfTkFNRV9OQU1FX0dFTiwKICBfTkxfTkFNRV9OQU1FX01SLAog
IF9OTF9OQU1FX05BTUVfTVJTLAogIF9OTF9OQU1FX05BTUVfTUlTUywKICBfTkxfTkFNRV9OQU1F
X01TLAogIF9OTF9OQU1FX0NPREVTRVQsCiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVT
U19QT1NUQUxfRk1UID0gKCgoX19MQ19BRERSRVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERS
RVNTX0NPVU5UUllfTkFNRSwKICBfTkxfQUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJF
U1NfQ09VTlRSWV9BQjIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1Nf
Q09VTlRSWV9DQVIsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09V
TlRSWV9JU0JOLAogIF9OTF9BRERSRVNTX0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FC
LAogIF9OTF9BRERSRVNTX0xBTkdfVEVSTSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxf
QUREUkVTU19DT0RFU0VULAogIF9OTF9OVU1fTENfQUREUkVTUywKCiAgX05MX1RFTEVQSE9ORV9U
RUxfSU5UX0ZNVCA9ICgoKF9fTENfVEVMRVBIT05FKSA8PCAxNikgfCAoMCkpLAogIF9OTF9URUxF
UEhPTkVfVEVMX0RPTV9GTVQsCiAgX05MX1RFTEVQSE9ORV9JTlRfU0VMRUNULAogIF9OTF9URUxF
UEhPTkVfSU5UX1BSRUZJWCwKICBfTkxfVEVMRVBIT05FX0NPREVTRVQsCiAgX05MX05VTV9MQ19U
RUxFUEhPTkUsCgogIF9OTF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VS
RU1FTlQpIDw8IDE2KSB8ICgwKSksCiAgX05MX01FQVNVUkVNRU5UX0NPREVTRVQsCiAgX05MX05V
TV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJVExFID0gKCgoX19MQ19J
REVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJRklDQVRJT05fU09VUkNF
LAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVOVElGSUNBVElPTl9DT05U
QUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURFTlRJRklDQVRJT05fVEVM
LAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJQ0FUSU9OX0xBTkdVQUdF
LAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lERU5USUZJQ0FUSU9OX0FV
RElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwKICBfTkxfSURFTlRJRklD
QVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9SRVZJU0lPTiwKICBfTkxf
SURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05fQ0FURUdPUlksCiAgX05M
X0lERU5USUZJQ0FUSU9OX0NPREVTRVQsCiAgX05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgog
IF9OTF9OVU0KfTsKIyA1NzUgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzIDQKZXh0ZXJuIGNo
YXIgKm5sX2xhbmdpbmZvIChubF9pdGVtIF9faXRlbSkgdGhyb3cgKCk7CiMgNTg2ICIvdXNyL2lu
Y2x1ZGUvbGFuZ2luZm8uaCIgMyA0CmV4dGVybiBjaGFyICpfX25sX2xhbmdpbmZvX2wgKG5sX2l0
ZW0gX19pdGVtLCBfX2xvY2FsZV90IGwpOwoKCn0KIyAzOCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2Fs
ZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMSAzIDQKIyAyNCAiL3Vzci9pbmNs
dWRlL2ljb252LmgiIDMgNAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIv
Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzIDQKIyAy
NSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMyA0CgoKZXh0ZXJuICJDIiB7CgoKdHlwZWRlZiB2
b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNvbnZfb3BlbiAoX19jb25zdCBjaGFy
ICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBjaGFyICoqX19yZXN0cmljdCBfX2lu
YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19pbmJ5dGVzbGVm
dCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19vdXRidWYsCiAgICAg
ICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX291dGJ5dGVzbGVmdCk7CgoKZXh0
ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0aHJvdyAoKTsKCn0KIyAzOSAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4
LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAx
IDMgNAojIDMwICIvdXNyL2luY2x1ZGUvbGliaW50bC5oIiAzIDQKZXh0ZXJuICJDIiB7CgoKCgpl
eHRlcm4gY2hhciAqZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwgX19jb25z
dCBjaGFyICpfX21zZ2lkKQogICAgIHRocm93ICgpOwpleHRlcm4gY2hhciAqX19kZ2V0dGV4dCAo
X19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19tc2dpZCkKICAgICB0
aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfYXJnX18gKDIpKSk7CgoKCmV4dGVybiBj
aGFyICpkY2dldHRleHQgKF9fY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAg
ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2NhdGVnb3J5KSB0aHJvdyAo
KTsKZXh0ZXJuIGNoYXIgKl9fZGNnZXR0ZXh0IChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fbXNnaWQsIGludCBfX2Nh
dGVnb3J5KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikp
KTsKCgoKCmV4dGVybiBjaGFyICpuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX21zZ2lkMSwgX19j
b25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n
IGludCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgx
KSkpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9hcmdfXyAoMikpKTsKCgoKZXh0ZXJuIGNoYXIg
KmRuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29uc3QgY2hhciAqX19t
c2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19tc2dpZDIsIHVu
c2lnbmVkIGxvbmcgaW50IF9fbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3Jt
YXRfYXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgpl
eHRlcm4gY2hhciAqZGNuZ2V0dGV4dCAoX19jb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIF9fY29u
c3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fbXNnaWQyLCB1bnNpZ25lZCBsb25nIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgX19jYXRlZ29yeSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRf
YXJnX18gKDIpKSkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X2FyZ19fICgzKSkpOwoKCgoKCmV4
dGVybiBjaGFyICp0ZXh0ZG9tYWluIChfX2NvbnN0IGNoYXIgKl9fZG9tYWlubmFtZSkgdGhyb3cg
KCk7CgoKCmV4dGVybiBjaGFyICpiaW5kdGV4dGRvbWFpbiAoX19jb25zdCBjaGFyICpfX2RvbWFp
bm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX2Rpcm5h
bWUpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqYmluZF90ZXh0ZG9tYWluX2NvZGVzZXQgKF9f
Y29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29uc3QgY2hhciAqX19jb2Rlc2V0KSB0aHJvdyAoKTsKCgoKCgoKCiMgMSAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251
LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMgNAojIDk1ICIvdXNyL2luY2x1ZGUvbGliaW50bC5o
IiAyIDMgNAojIDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMyA0Cn0KIyA0MCAiL2hvbWUv
YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdu
dS9iaXRzL2MrK2xvY2FsZS5oIiAyIDMKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAz
Cm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgX19sb2NhbGVfdCBfX2NfbG9jYWxlOwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3YoY2hhciogX19v
dXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAoKCgoKCiAgICAgICAgICAg
ICAgICAgICAgIF9UdiBfX3YsIGNvbnN0IF9fY19sb2NhbGUmLCBpbnQgX19wcmVjID0gLTEpCiAg
ICB7CiAgICAgIGNoYXIqIF9fb2xkID0gc2V0bG9jYWxlKF9fTENfQUxMLCBfX251bGwpOwogICAg
ICBjaGFyKiBfX3NhdiA9IHN0YXRpY19jYXN0PGNoYXIqPihtYWxsb2Moc3RybGVuKF9fb2xkKSAr
IDEpKTsKICAgICAgaWYgKF9fc2F2KQogICAgICAgIHN0cmNweShfX3NhdiwgX19vbGQpOwogICAg
ICBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CgoKICAgICAgaW50IF9fcmV0OwoKICAgICAgaWYg
KF9fcHJlYyA+PSAwKQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19vdXQsIF9fc2l6ZSwgX19m
bXQsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gc25wcmludGYoX19v
dXQsIF9fc2l6ZSwgX19mbXQsIF9fdik7CiMgODkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytsb2NhbGUuaCIg
MwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fc2F2KTsKICAgICAgZnJlZShfX3Nhdik7Cgog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9Cn0KIyA0NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMiIDEgMwojIDQ4
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMi
IDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYt
cGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMgNAojIDExICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2lu
Y2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9s
aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMSAz
IDQKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIv
aTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvbGltaXRzLmgiIDEgMyA0CiMgMTIyICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4zL2luY2x1ZGUvbGltaXRzLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAz
IDQKIyAxNDQgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2Jp
dHMvcG9zaXgxX2xpbS5oIiAxIDMgNAojIDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp
bS5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMSAzIDQKIyAzNiAi
L3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9saW51
eC9saW1pdHMuaCIgMSAzIDQKIyAzNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDIg
MyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMyA0CiMgMTQ1ICIv
dXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMyA0CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9z
aXgyX2xpbS5oIiAxIDMgNAojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAoKCgoj
IDEgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAxIDMgNAojIDM0ICIvdXNyL2luY2x1
ZGUvYml0cy94b3Blbl9saW0uaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGlt
LmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAyIDMgNAojIDE1
MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDEyMyAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL2xp
bWl0cy5oIiAyIDMgNAojIDggIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9saWIvZ2Nj
LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjMvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzIDQKIyAx
MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu
dXgtZ251LzMuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMgNAojIDUwICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NsaW1pdHMiIDIgMwojIDQ4ICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlZndkLmgi
IDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Y2N0eXBlIiAxIDMKIyA0NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9jY3R5cGUiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAxIDMgNAojIDI5
ICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiAiQyIgewojIDQwICIvdXNyL2luY2x1
ZGUvY3R5cGUuaCIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAxIDMgNAojIDM3ICIv
dXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5o
IiAxIDMgNAojIDM4ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIgMyA0CiMgNDEgIi91c3IvaW5j
bHVkZS9jdHlwZS5oIiAyIDMgNAoKCgoKCgplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8g
KCgxIDw8ICgwKSkgPDwgOCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEp
IDwgOCA/ICgoMSA8PCAoMSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhh
ID0gKCgyKSA8IDggPyAoKDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBf
SVNkaWdpdCA9ICgoMykgPCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4
KSksCiAgX0lTeGRpZ2l0ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAo
NCkpID4+IDgpKSwKICBfSVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAo
KDEgPDwgKDUpKSA+PiA4KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8
IDgpIDogKCgxIDw8ICg2KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwg
KDcpKSA8PCA4KSA6ICgoMSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8g
KCgxIDw8ICg4KSkgPDwgOCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkp
IDwgOCA/ICgoMSA8PCAoOSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0
ID0gKCgxMCkgPCA4ID8gKCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwK
ICBfSVNhbG51bSA9ICgoMTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEp
KSA+PiA4KSkKfTsKIyA3NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMgNApleHRlcm4gX19jb25z
dCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90
ICpfX2N0eXBlX3RvbG93ZXI7CmV4dGVybiBfX2NvbnN0IF9faW50MzJfdCAqX19jdHlwZV90b3Vw
cGVyOwojIDkxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4dGVybiBpbnQgaXNhbG51bSAo
aW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpleHRlcm4g
aW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzZ3Jh
cGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAoKTsKZXh0
ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2UgKGludCkg
dGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBp
c3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNhc2NpaSAo
aW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykgdGhyb3cg
KCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX3Rv
bG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjIzICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMyA0CmV4
dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBp
bnQgX19pc2FscGhhX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19p
c2NudHJsX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2RpZ2l0
X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2xvd2VyX2wgKGlu
dCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc2dyYXBoX2wgKGludCwgX19s
b2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwgX19sb2NhbGVf
dCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX19pc3B1bmN0X2wgKGludCwgX19sb2NhbGVfdCkgdGhy
b3cgKCk7CmV4dGVybiBpbnQgX19pc3NwYWNlX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7
CmV4dGVybiBpbnQgX19pc3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CmV4dGVy
biBpbnQgX19pc3hkaWdpdF9sIChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKZXh0ZXJuIGlu
dCBfX2lzYmxhbmtfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBf
X3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwoKCmV4dGVybiBp
bnQgX190b3VwcGVyX2wgKGludCBfX2MsIF9fbG9jYWxlX3QgX19sKSB0aHJvdyAoKTsKIyAyNzYg
Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzIDQKfQojIDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NjdHlwZSIgMiAzCiMgNjYgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQK
ewogIHVzaW5nIDo6aXNhbG51bTsKICB1c2luZyA6OmlzYWxwaGE7CiAgdXNpbmcgOjppc2NudHJs
OwogIHVzaW5nIDo6aXNkaWdpdDsKICB1c2luZyA6OmlzZ3JhcGg7CiAgdXNpbmcgOjppc2xvd2Vy
OwogIHVzaW5nIDo6aXNwcmludDsKICB1c2luZyA6OmlzcHVuY3Q7CiAgdXNpbmcgOjppc3NwYWNl
OwogIHVzaW5nIDo6aXN1cHBlcjsKICB1c2luZyA6OmlzeGRpZ2l0OwogIHVzaW5nIDo6dG9sb3dl
cjsKICB1c2luZyA6OnRvdXBwZXI7Cn0KIyA0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMSAzCiMgNDQgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvc3RyaW5nIiAzCgoK
CgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVt
b3J5IiAxIDMKIyA1MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9tZW1vcnkiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NyAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMg
MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkbGli
IiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9jc3RkbGliIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzIDQKIyAzMyAi
L3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4zL2luY2x1ZGUvc3RkZGVmLmgi
IDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCmV4dGVybiAiQyIgewoK
CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMgNAojIDQzICIvdXNy
L2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1
cy5oIiAxIDMgNAojIDY1ICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMgNAp1bmlv
biB3YWl0CiAgewogICAgaW50IHdfc3RhdHVzOwogICAgc3RydWN0CiAgICAgIHsKCiAgICAgICAg
dW5zaWduZWQgaW50IF9fd190ZXJtc2lnOjc7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19jb3Jl
ZHVtcDoxOwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfcmV0Y29kZTo4OwogICAgICAgIHVuc2ln
bmVkIGludDoxNjsKCgoKCgoKCiAgICAgIH0gX193YWl0X3Rlcm1pbmF0ZWQ7CiAgICBzdHJ1Y3QK
ICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3N0b3B2YWw6ODsKICAgICAgICB1bnNp
Z25lZCBpbnQgX193X3N0b3BzaWc6ODsKICAgICAgICB1bnNpZ25lZCBpbnQ6MTY7CgoKCgoKCiAg
ICAgIH0gX193YWl0X3N0b3BwZWQ7CiAgfTsKIyA0NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAy
IDMgNAojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNAp0eXBlZGVmIHN0cnVjdAogIHsK
ICAgIGludCBxdW90OwogICAgaW50IHJlbTsKICB9IGRpdl90OwoKCgp0eXBlZGVmIHN0cnVjdAog
IHsKICAgIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGludCByZW07CiAgfSBsZGl2X3Q7CgoKCgoK
X19leHRlbnNpb25fXyB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsK
ICAgIGxvbmcgbG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9z
dGRsaWIuaCIgMyA0CmV4dGVybiBzaXplX3QgX19jdHlwZV9nZXRfbWJfY3VyX21heCAodm9pZCkg
dGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUgYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBhdG9pIChfX2Nv
bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl
eHRlcm4gbG9uZyBpbnQgYXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpIF9fYXR0
cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpfX2V4dGVuc2lvbl9fIGV4dGVybiBsb25nIGxvbmcg
aW50IGF0b2xsIChfX2NvbnN0IGNoYXIgKl9fbnB0cikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKF9fY29uc3QgY2hhciAq
X19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmlj
dCBfX2VuZHB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzdHJ0b2YgKF9fY29uc3QgY2hh
ciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg
c3RydG9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAg
ICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7
CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgc3RydG91bCAoX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jl
c3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBf
X2VuZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiB1bnNp
Z25lZCBsb25nIGxvbmcgaW50IHN0cnRvdXEgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w
dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3Ry
aWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRocm93ICgpOwoKCgoKCgpfX2V4dGVuc2lv
bl9fCmV4dGVybiBsb25nIGxvbmcgaW50IHN0cnRvbGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0
IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVu
c2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91bGwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBf
X25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkKICAgICB0aHJvdyAoKTsKIyAyMTUgIi91c3Iv
aW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4dGVybiBsb25nIGludCBfX3N0cnRvbF9sIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh
ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25n
IGludCBfX3N0cnRvdWxfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv
Y2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBp
bnQgX19zdHJ0b2xsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50
IF9fYmFzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19s
b2MpIHRocm93ICgpOwoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBfX3N0cnRvdWxsX2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f
YmFzZSwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgX19z
dHJ0b2RfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChfX2NvbnN0IGNoYXIgKl9f
cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91
YmxlIF9fc3RydG9sZF9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK
CgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVz
dHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y
ZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBmbG9h
dCBfX3N0cnRvZl9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRf
aW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19ncm91cCkgdGhyb3cgKCk7
CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19yZXN0
cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50
IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp
bnQgX19zdHJ0b3VsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0
cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKX19leHRlbnNpb25fXwpl
eHRlcm4gbG9uZyBsb25nIGludCBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fY29uc3QgY2hhciAqX19y
ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpfX2V4dGVu
c2lvbl9fCmV4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fc3RydG91bGxfaW50ZXJuYWwg
KF9fY29uc3QgY2hhciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwg
aW50IF9fZ3JvdXApCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gX19pbmxpbmUgZG91Ymxl
CnN0cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJp
Y3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2RfaW50ZXJuYWwgKF9fbnB0
ciwgX19lbmRwdHIsIDApOwp9CmV4dGVybiBfX2lubGluZSBsb25nIGludApzdHJ0b2wgKF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAog
ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xfaW50ZXJuYWwg
KF9fbnB0ciwgX19lbmRwdHIsIF9fYmFzZSwgMCk7Cn0KZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVk
IGxvbmcgaW50CnN0cnRvdWwgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsIGNoYXIg
KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICBpbnQgX19iYXNlKSB0aHJvdyAoKQp7CiAg
cmV0dXJuIF9fc3RydG91bF9pbnRlcm5hbCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsK
fQoKCmV4dGVybiBfX2lubGluZSBmbG9hdApzdHJ0b2YgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKQp7CiAgcmV0dXJu
IF9fc3RydG9mX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQpleHRlcm4gX19pbmxp
bmUgbG9uZyBkb3VibGUKc3RydG9sZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwg
Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xk
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCAwKTsKfQoKCgpfX2V4dGVuc2lvbl9fIGV4dGVy
biBfX2lubGluZSBsb25nIGxvbmcgaW50CnN0cnRvcSAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgaW50IF9fYmFzZSkg
dGhyb3cgKCkKewogIHJldHVybiBfX3N0cnRvbGxfaW50ZXJuYWwgKF9fbnB0ciwgX19lbmRwdHIs
IF9fYmFzZSwgMCk7Cn0KX19leHRlbnNpb25fXyBleHRlcm4gX19pbmxpbmUgdW5zaWduZWQgbG9u
ZyBsb25nIGludApzdHJ0b3VxIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLCBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgaW50IF9fYmFzZSkgdGhyb3cgKCkKewog
IHJldHVybiBfX3N0cnRvdWxsX2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDAp
Owp9CgoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9faW5saW5lIGxvbmcgbG9uZyBpbnQKc3RydG9s
bCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwgY2hhciAqKl9fcmVzdHJpY3QgX19l
bmRwdHIsCiAgICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b2xs
X2ludGVybmFsIChfX25wdHIsIF9fZW5kcHRyLCBfX2Jhc2UsIDApOwp9Cl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIF9faW5saW5lIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQKc3RydG91bGwgKF9fY29uc3Qg
Y2hhciAqIF9fcmVzdHJpY3QgX19ucHRyLCBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAg
ICAgICAgIGludCBfX2Jhc2UpIHRocm93ICgpCnsKICByZXR1cm4gX19zdHJ0b3VsbF9pbnRlcm5h
bCAoX19ucHRyLCBfX2VuZHB0ciwgX19iYXNlLCAwKTsKfQoKCmV4dGVybiBfX2lubGluZSBkb3Vi
bGUKYXRvZiAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9k
IChfX25wdHIsIChjaGFyICoqKSBfX251bGwpOwp9CmV4dGVybiBfX2lubGluZSBpbnQKYXRvaSAo
X19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gKGludCkgc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQpleHRlcm4gX19pbmxpbmUgbG9uZyBpbnQK
YXRvbCAoX19jb25zdCBjaGFyICpfX25wdHIpIHRocm93ICgpCnsKICByZXR1cm4gc3RydG9sIChf
X25wdHIsIChjaGFyICoqKSBfX251bGwsIDEwKTsKfQoKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIF9f
aW5saW5lIGxvbmcgbG9uZyBpbnQKYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAo
KQp7CiAgcmV0dXJuIHN0cnRvbGwgKF9fbnB0ciwgKGNoYXIgKiopIF9fbnVsbCwgMTApOwp9CiMg
Mzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbDY0YSAobG9uZyBp
bnQgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgYTY0bCAoX19jb25zdCBjaGFyICpf
X3MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCiMgMSAiL3Vzci9pbmNs
dWRlL3N5cy90eXBlcy5oIiAxIDMgNAojIDI4ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMg
NApleHRlcm4gIkMiIHsKCgoKCgp0eXBlZGVmIF9fdV9jaGFyIHVfY2hhcjsKdHlwZWRlZiBfX3Vf
c2hvcnQgdV9zaG9ydDsKdHlwZWRlZiBfX3VfaW50IHVfaW50Owp0eXBlZGVmIF9fdV9sb25nIHVf
bG9uZzsKdHlwZWRlZiBfX3F1YWRfdCBxdWFkX3Q7CnR5cGVkZWYgX191X3F1YWRfdCB1X3F1YWRf
dDsKdHlwZWRlZiBfX2ZzaWRfdCBmc2lkX3Q7CgoKCgp0eXBlZGVmIF9fbG9mZl90IGxvZmZfdDsK
CgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgp0eXBlZGVmIF9faW5vNjRfdCBpbm82NF90
OwoKCgoKdHlwZWRlZiBfX2Rldl90IGRldl90OwoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoK
CgoKdHlwZWRlZiBfX21vZGVfdCBtb2RlX3Q7CgoKCgp0eXBlZGVmIF9fbmxpbmtfdCBubGlua190
OwoKCgoKdHlwZWRlZiBfX3VpZF90IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsK
CgoKCgoKdHlwZWRlZiBfX29mZjY0X3Qgb2ZmNjRfdDsKIyAxMDQgIi91c3IvaW5jbHVkZS9zeXMv
dHlwZXMuaCIgMyA0CnR5cGVkZWYgX19pZF90IGlkX3Q7CgoKCgp0eXBlZGVmIF9fc3NpemVfdCBz
c2l6ZV90OwoKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYgX19jYWRkcl90
IGNhZGRyX3Q7CgoKCgoKdHlwZWRlZiBfX2tleV90IGtleV90OwojIDEzNiAiL3Vzci9pbmNsdWRl
L3N5cy90eXBlcy5oIiAzIDQKdHlwZWRlZiBfX3VzZWNvbmRzX3QgdXNlY29uZHNfdDsKCgoKdHlw
ZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRl
L3N0ZGRlZi5oIiAxIDMgNAojIDE0NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMgNAoK
Cgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0
IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CiMgMTkwICIvdXNyL2luY2x1
ZGUvc3lzL3R5cGVzLmgiIDMgNAp0eXBlZGVmIGludCBpbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgaW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IGludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgaW50IGludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9f
bW9kZV9fIChfX0RJX18pKSk7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1FJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50
MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiB1bnNpZ25l
ZCBpbnQgdV9pbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBl
ZGVmIHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0RJ
X18pKSk7Cgp0eXBlZGVmIGludCByZWdpc3Rlcl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAo
X193b3JkX18pKSk7CiMgMjE1ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMyA0CiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NlbGVjdC5oIiAxIDMgNAojIDMyICIv
dXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMgNAoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv
c2lnc2V0LmgiIDEgMyA0CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMyA0CiMg
NDYgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRz
L3RpbWUuaCIgMSAzIDQKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzIDQKc3RydWN0
IHRpbWV2YWwKICB7CiAgICBfX3RpbWVfdCB0dl9zZWM7CiAgICBfX3N1c2Vjb25kc190IHR2X3Vz
ZWM7CiAgfTsKIyA0NyAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzIDQKIyA1NSAiL3Vz
ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoK
CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAv
ICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRl
ZiBfX2ZkX21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMyA0
CmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50IF9fbmZkcywgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqX19yZXN0
cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9f
ZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKl9fcmVzdHJpY3Qg
X190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxlY3QgKGludCBfX25mZHMs
IGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0
ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICpfX3Jl
c3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1l
c3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgX19z
aWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoKCn0KIyAyMTYgIi91c3Iv
aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzIDQKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFj
cm9zLmgiIDEgMyA0CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMyA0CgoKCgp0
eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJs
a2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9f
ZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAz
IDQKdHlwZWRlZiBfX2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRf
dCBmc2Jsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKCn0K
IyAzOTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMiAzIDQKCgoKCgoKZXh0ZXJuIGxvbmcgaW50
IHJhbmRvbSAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQg
aW50IF9fc2VlZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmluaXRzdGF0ZSAodW5zaWdu
ZWQgaW50IF9fc2VlZCwgY2hhciAqX19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90IF9fc3RhdGVsZW4pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc2V0c3RhdGUgKGNo
YXIgKl9fc3RhdGVidWYpIHRocm93ICgpOwoKCgoKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewog
ICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBpbnQzMl90ICpzdGF0ZTsK
ICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBpbnQgcmFuZF9zZXA7CiAg
ICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yIChzdHJ1Y3QgcmFu
ZG9tX2RhdGEgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIGludDMyX3Qg
Kl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgKHVu
c2lnbmVkIGludCBfX3NlZWQsIHN0cnVjdCByYW5kb21fZGF0YSAqX19idWYpIHRocm93ICgpOwoK
ZXh0ZXJuIGludCBpbml0c3RhdGVfciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqX19yZXN0
cmljdCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGF0ZWxl
biwKICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0
IF9fYnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2V0c3RhdGVfciAoY2hhciAqX19yZXN0cmlj
dCBfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCByYW5kb21fZGF0YSAq
X19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCByYW5kICh2b2lkKSB0
aHJvdyAoKTsKCmV4dGVybiB2b2lkIHNyYW5kICh1bnNpZ25lZCBpbnQgX19zZWVkKSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGludCAqX19zZWVkKSB0aHJvdyAoKTsK
CgoKCgoKCmV4dGVybiBkb3VibGUgZHJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgZXJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGludCBscmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IG5y
YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g
bG9uZyBpbnQgbXJhbmQ0OCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4
ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQg
c3JhbmQ0OCAobG9uZyBpbnQgX19zZWVkdmFsKSB0aHJvdyAoKTsKZXh0ZXJuIHVuc2lnbmVkIHNo
b3J0IGludCAqc2VlZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19zZWVkMTZ2WzNdKSB0aHJvdyAo
KTsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1bN10pIHRo
cm93ICgpOwoKCgoKCnN0cnVjdCBkcmFuZDQ4X2RhdGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBp
bnQgX194WzNdOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fb2xkX3hbM107CiAgICB1bnNpZ25l
ZCBzaG9ydCBpbnQgX19jOwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9faW5pdDsKICAgIHVuc2ln
bmVkIGxvbmcgbG9uZyBpbnQgX19hOwogIH07CgoKZXh0ZXJuIGludCBkcmFuZDQ4X3IgKHN0cnVj
dCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAg
ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGVyYW5k
NDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAg
ICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAg
ICAgICAgICAgZG91YmxlICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4g
aW50IGxyYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
ICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJv
dyAoKTsKZXh0ZXJuIGludCBucmFuZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNd
LAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBf
X2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVz
dWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50ICpf
X3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgKHVuc2ln
bmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRy
YW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxv
bmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNyYW5k
NDhfciAobG9uZyBpbnQgX19zZWVkdmFsLCBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX2J1ZmZlcikK
ICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgc2VlZDQ4X3IgKHVuc2lnbmVkIHNob3J0IGludCBf
X3NlZWQxNnZbM10sCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
YnVmZmVyKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEg
Kl9fYnVmZmVyKSB0aHJvdyAoKTsKIyA1MjcgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMyA0CmV4
dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoK
CgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUgKHZv
aWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSB0
aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMyA0CiMgMjUgIi91c3Iv
aW5jbHVkZS9hbGxvY2EuaCIgMyA0CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMg
NAojIDI2ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMyA0CgpleHRlcm4gIkMiIHsKCgoKCgpl
eHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSB0aHJvdyAoKTsKCgoKCgp9CiMgNTQ3
ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMyA0CgoKCgpleHRlcm4gdm9pZCAqdmFsbG9jIChz
aXplX3QgX19zaXplKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK
ZXh0ZXJuIGludCBwb3NpeF9tZW1hbGlnbiAodm9pZCAqKl9fbWVtcHRyLCBzaXplX3QgX19hbGln
bm1lbnQsIHNpemVfdCBfX3NpemUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFs
bG9jX18pKTsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRl
X18gKChfX25vcmV0dXJuX18pKTsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMp
ICh2b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IG9uX2V4aXQgKHZvaWQgKCpfX2Z1bmMp
IChpbnQgX19zdGF0dXMsIHZvaWQgKl9fYXJnKSwgdm9pZCAqX19hcmcpCiAgICAgdGhyb3cgKCk7
CgoKCgoKZXh0ZXJuIHZvaWQgZXhpdCAoaW50IF9fc3RhdHVzKSB0aHJvdyAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gdm9pZCBfRXhpdCAoaW50IF9fc3RhdHVz
KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgpleHRlcm4gY2hh
ciAqZ2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFy
ICpfX3NlY3VyZV9nZXRlbnYgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgpl
eHRlcm4gaW50IHB1dGVudiAoY2hhciAqX19zdHJpbmcpIHRocm93ICgpOwoKCgoKCmV4dGVybiBp
bnQgc2V0ZW52IChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgX19jb25zdCBjaGFyICpfX3ZhbHVlLCBp
bnQgX19yZXBsYWNlKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdW5zZXRlbnYgKF9fY29u
c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBjbGVhcmVudiAodm9p
ZCkgdGhyb3cgKCk7CiMgNjIzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hh
ciAqbWt0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg
bWtzdGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CiMgNjQwICIvdXNyL2luY2x1ZGUv
c3RkbGliLmgiIDMgNApleHRlcm4gaW50IG1rc3RlbXA2NCAoY2hhciAqX190ZW1wbGF0ZSkgdGhy
b3cgKCk7CiMgNjUwICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMgNApleHRlcm4gY2hhciAqbWtk
dGVtcCAoY2hhciAqX190ZW1wbGF0ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHN5c3RlbSAo
X19jb25zdCBjaGFyICpfX2NvbW1hbmQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gY2hhciAqY2Fu
b25pY2FsaXplX2ZpbGVfbmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwojIDY3
MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzIDQKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2Nv
bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIg
Kl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhyb3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19j
b21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBf
X2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAo
X19jb25zdCB2b2lkICpfX2tleSwgX19jb25zdCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2Nv
bXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1i
LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBh
cik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcg
bG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBpbnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoKZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIs
IGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsK
ZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGludCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQog
ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18g
ZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKIyA3MjggIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMyA0CmV4dGVybiBjaGFyICplY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0
LCBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0
cmljdCBfX3NpZ24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq
Z2N2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGln
aXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19y
ZXN0cmljdCBfX3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWZjdnQgKGxvbmcgZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp
Y3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbikgdGhyb3cgKCk7CmV4dGVybiBjaGFy
ICpxZ2N2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1Zikg
dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGVjdnRfciAoZG91YmxlIF9fdmFsdWUsIGludCBfX25k
aWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKl9f
cmVzdHJpY3QgX19zaWduLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAg
ICAgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJsZSBfX3Zh
bHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0LAogICAgICAgICAgICAg
ICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAg
ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHFlY3Z0
X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwKICAgICAgICAgICAgICAgICAg
ICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwKICAgICAg
ICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93
ICgpOwpleHRlcm4gaW50IHFmY3Z0X3IgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp
dCwKICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19kZWNwdCwgaW50ICpfX3Jl
c3RyaWN0IF9fc2lnbiwKICAgICAgICAgICAgICAgICAgICBjaGFyICpfX3Jlc3RyaWN0IF9fYnVm
LCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChfX2NvbnN0
IGNoYXIgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBtYnRvd2MgKHdj
aGFyX3QgKl9fcmVzdHJpY3QgX19wd2MsCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg
Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHdjdG9t
YiAoY2hhciAqX19zLCB3Y2hhcl90IF9fd2NoYXIpIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90
IG1ic3Rvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywKICAgICAgICAgICAgICAgICAg
ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7
CgpleHRlcm4gc2l6ZV90IHdjc3RvbWJzIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjcywgc2l6ZV90
IF9fbikKICAgICB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRjaCAoX19jb25zdCBj
aGFyICpfX3Jlc3BvbnNlKSB0aHJvdyAoKTsKIyA4MDggIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MyA0CmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqX19yZXN0cmljdCBfX29wdGlvbnAsCiAg
ICAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0ICpfX3Jlc3RyaWN0IF9fdG9rZW5zLAog
ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX192YWx1ZXApIHRocm93ICgp
OwoKCgoKCmV4dGVybiB2b2lkIHNldGtleSAoX19jb25zdCBjaGFyICpfX2tleSkgdGhyb3cgKCk7
CgoKCgoKCgpleHRlcm4gaW50IHBvc2l4X29wZW5wdCAoaW50IF9fb2ZsYWcpIHRocm93ICgpOwoK
CgoKCgoKZXh0ZXJuIGludCBncmFudHB0IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp
bnQgdW5sb2NrcHQgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpwdHNuYW1l
IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRzbmFtZV9yIChpbnQgX19m
ZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBn
ZXRwdCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgZ2V0bG9hZGF2ZyAoZG91Ymxl
IF9fbG9hZGF2Z1tdLCBpbnQgX19uZWxlbSkgdGhyb3cgKCk7CgoKCgoKfQojIDUzICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIiIDIgMwojIDg0
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NzdGRsaWIi
IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAg
dXNpbmcgOjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6
OmF0b2Y7CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7
CiAgdXNpbmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5n
IDo6ZnJlZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2
OwogIHVzaW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsK
ICB1c2luZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2lu
ZyA6OnJlYWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6
OnN0cnRvbDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3
Y3N0b21iczsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kp
IHsgcmV0dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBs
b25nIF9faikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEzNiAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jc3RkbGliIiAzCm5hbWVzcGFjZSBf
X2dudV9jeHgKewogIHVzaW5nIDo6bGxkaXZfdDsKICB1c2luZyA6Ol9FeGl0OwoKICBpbmxpbmUg
bG9uZyBsb25nCiAgYWJzKGxvbmcgbG9uZyBfX3gpIHsgcmV0dXJuIF9feCA+PSAwID8gX194IDog
LV9feDsgfQoKICBpbmxpbmUgbG9uZyBsb25nCiAgbGxhYnMobG9uZyBsb25nIF9feCkgeyByZXR1
cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsbGRpdl90CiAgZGl2KGxvbmcg
bG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24g
LyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgaW5saW5lIGxsZGl2
X3QKICBsbGRpdihsb25nIGxvbmcgX19uLCBsb25nIGxvbmcgX19kKQogIHsgbGxkaXZfdCBfX3E7
IF9fcS5xdW90ID0gX19uIC8gX19kOyBfX3EucmVtID0gX19uICUgX19kOyByZXR1cm4gX19xOyB9
CgogIHVzaW5nIDo6YXRvbGw7CiAgdXNpbmcgOjpzdHJ0b2Y7CiAgdXNpbmcgOjpzdHJ0b2xsOwog
IHVzaW5nIDo6c3RydG91bGw7CiAgdXNpbmcgOjpzdHJ0b2xkOwp9CgpuYW1lc3BhY2Ugc3RkCnsK
ICB1c2luZyBfX2dudV9jeHg6OmxsZGl2X3Q7CiAgdXNpbmcgX19nbnVfY3h4OjpfRXhpdDsKICB1
c2luZyBfX2dudV9jeHg6OmFiczsKICB1c2luZyBfX2dudV9jeHg6OmxsYWJzOwogIHVzaW5nIF9f
Z251X2N4eDo6ZGl2OwogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXY7CiAgdXNpbmcgX19nbnVfY3h4
OjphdG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvZjsKICB1c2luZyBfX2dudV9jeHg6OnN0
cnRvbGw7CiAgdXNpbmcgX19nbnVfY3h4OjpzdHJ0b3VsbDsKICB1c2luZyBfX2dudV9jeHg6OnN0
cnRvbGQ7Cn0KIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9uZXciIDEgMwojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL25ldyIgMwpleHRlcm4gIkMrKyIgewoKbmFt
ZXNwYWNlIHN0ZAp7CgoKCgoKICBjbGFzcyBiYWRfYWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uCiAg
ewogIHB1YmxpYzoKICAgIGJhZF9hbGxvYygpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJh
ZF9hbGxvYygpIHRocm93KCk7CiAgfTsKCiAgc3RydWN0IG5vdGhyb3dfdCB7IH07CiAgZXh0ZXJu
IGNvbnN0IG5vdGhyb3dfdCBub3Rocm93OwoKCiAgdHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIp
KCk7CgogIG5ld19oYW5kbGVyIHNldF9uZXdfaGFuZGxlcihuZXdfaGFuZGxlcikgdGhyb3coKTsK
fQojIDgyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL25l
dyIgMwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxv
Yyk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxs
b2MpOwp2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBk
ZWxldGVbXSh2b2lkKikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCBj
b25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6
c2l6ZV90LCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVs
ZXRlKHZvaWQqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3Ig
ZGVsZXRlW10odm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKCgppbmxpbmUg
dm9pZCogb3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90LCB2b2lkKiBfX3ApIHRocm93KCkgeyByZXR1
cm4gX19wOyB9CmlubGluZSB2b2lkKiBvcGVyYXRvciBuZXdbXShzdGQ6OnNpemVfdCwgdm9pZCog
X19wKSB0aHJvdygpIHsgcmV0dXJuIF9fcDsgfQoKCmlubGluZSB2b2lkIG9wZXJhdG9yIGRlbGV0
ZSAodm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKaW5saW5lIHZvaWQgb3BlcmF0b3IgZGVsZXRl
W10odm9pZCosIHZvaWQqKSB0aHJvdygpIHsgfTsKCn0KIyA3MCAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMg
MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9wYWlyLmgiIDEgMwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJzdF90
eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNlY29u
ZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihjb25zdCBf
VDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikge30KCgog
IHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBf
VTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cn07CgoK
dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCnsKICBy
ZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5zZWNvbmQ7
Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
PChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7
CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3kuZmlyc3Qg
PCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBwYWlyPF9U
MSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX194
ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29s
IG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1Qy
PiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNs
YXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194
LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoK
CnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShj
b25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAg
cmV0dXJuICEoX194IDwgX195KTsKfQojIDE0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U
MSwgY2xhc3MgX1QyPgoKCmlubGluZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwg
X1QyIF9feSkKCgoKewogIHJldHVybiBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA3
MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy90eXBlX3RyYWl0cy5oIiAzCiMg
OTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy90
eXBlX3RyYWl0cy5oIiAzCnN0cnVjdCBfX3RydWVfdHlwZSB7fTsKc3RydWN0IF9fZmFsc2VfdHlw
ZSB7fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX3R5cGVfdHJhaXRzIHsKICAgdHlw
ZWRlZiBfX3RydWVfdHlwZSB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwojIDExMyAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3R5cGVf
dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v
cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0
cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp
dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2
aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k
ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo
YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK
CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj
aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y
OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90
cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj
dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp
YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz
c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90
eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp
bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7
CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry
YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190
cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry
aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh
bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs
X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5
cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u
Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK
ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh
aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl
cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg
dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f
dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j
b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln
bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g
c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz
X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf
dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9
OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5
cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p
bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+
IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy
YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz
aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh
dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl
X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf
dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1
Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw
ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50
ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl
PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5
cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog
IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz
X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs
Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl
ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl
cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog
ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK
ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh
c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw
ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3Jf
YmFzZV90eXBlcy5oIiAxIDMKIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFj
ZSBzdGQKewojIDc5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwogIHN0cnVjdCBpbnB1dF9pdGVy
YXRvcl90YWcge307CgogIHN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg
Zm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBz
dHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2FyZF9pdGVyYXRv
cl90YWcge307CgogIHN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1YmxpYyBi
aWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKIyAxMDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NhdGVnb3J5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9EaXN0YW5jZSA9IHB0cmRpZmZfdCwKICAgICAgICAgICB0eXBlbmFtZSBfUG9pbnRlciA9IF9U
cCosIHR5cGVuYW1lIF9SZWZlcmVuY2UgPSBfVHAmPgogICAgc3RydWN0IGl0ZXJhdG9yCiAgICB7
CgogICAgICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKCiAgICAgIHR5cGVk
ZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5
cGU7CgogICAgICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CgogICAgICB0eXBlZGVmIF9SZWZl
cmVuY2UgcmVmZXJlbmNlOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJh
dG9yPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
X0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OmRpZmZlcmVuY2VfdHlwZSBkaWZmZXJlbmNlX3R5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50ZXI7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxfVHAq
PiB7CiAgICAgIHR5cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0
ZWdvcnk7CiAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlm
Zl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5
cGVkZWYgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg
ICBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsKICAgICAgdHlwZWRlZiByYW5k
b21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgICAgdHlwZWRlZiBf
VHAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwog
ICAgICB0eXBlZGVmIGNvbnN0IF9UcCogcG9pbnRlcjsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAm
IHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAg
aW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5
CiAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KGNvbnN0IF9JdGVyJikKICAgIHsgcmV0dXJuIHR5cGVu
YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5KCk7IH0KCn0KIyA3
NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRl
cmF0b3JfYmFzZV9mdW5jcy5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgMzkgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb25jZXB0X2NoZWNr
LmgiIDMKIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNzLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICBpbmxpbmUgdHlwZW5hbWUgaXRl
cmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3Rh
bmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAg
ICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCiAgICAgIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAw
OwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICArK19fZmlyc3Q7ICsr
X19uOwogICAgICB9CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBfX2Rpc3RhbmNl
KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s
YXN0LAogICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAg
ICAgCiAgICAgIHJldHVybiBfX2xhc3QgLSBfX2ZpcnN0OwogICAgfQojIDEwOSAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvcl9i
YXNlX2Z1bmNzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgIGlu
bGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNl
X3R5cGUKICAgIGRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkKICAgIHsKCiAgICAgIHJldHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwg
X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBfX2Fk
dmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcp
CiAgICB7CgogICAgIAogICAgICB3aGlsZSAoX19uLS0pICsrX19pOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAg
ICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwg
X0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykK
ICAgIHsKCiAgICAgCgogICAgICBpZiAoX19uID4gMCkKICAgICAgICB3aGlsZSAoX19uLS0pICsr
X19pOwogICAgICBlbHNlCiAgICAgICAgd2hpbGUgKF9fbisrKSAtLV9faTsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+
CiAgICBpbmxpbmUgdm9pZAogICAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19p
LCBfRGlzdGFuY2UgX19uLAogICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKICAgICAgX19pICs9IF9fbjsKICAgIH0KIyAxNjIgIi9ob21lL2Jhbmdl
cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3JfYmFz
ZV9mdW5jcy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3IsIHR5cGVuYW1l
IF9EaXN0YW5jZT4KICAgIGlubGluZSB2b2lkCiAgICBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBf
X2ksIF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICBfX2FkdmFuY2UoX19pLCBfX24sIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19pKSk7CiAgICB9Cn0KIyA3NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0
ZXJhdG9yLmgiIDEgMwojIDY4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgODkgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRl
cmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGNsYXNzIHJldmVy
c2VfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojp2YWx1ZV90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVu
Y2VfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZT4KICAgIHsKICAgIHByb3RlY3RlZDoKICAg
ICAgX0l0ZXJhdG9yIGN1cnJlbnQ7CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9JdGVyYXRv
ciBpdGVyYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UgcmVm
ZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+
Ojpwb2ludGVyIHBvaW50ZXI7CgogICAgcHVibGljOgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9y
KCkgeyB9CgoKCgogICAgICBleHBsaWNpdAogICAgICByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9y
X3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7IH0KCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3Io
Y29uc3QgcmV2ZXJzZV9pdGVyYXRvciYgX194KQogICAgICA6IGN1cnJlbnQoX194LmN1cnJlbnQp
IHsgfQoKCgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyPgogICAgICAgIHJldmVyc2Vf
aXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcj4mIF9feCkKICAgICAgICA6IGN1
cnJlbnQoX194LmJhc2UoKSkgeyB9CgoKCgogICAgICBpdGVyYXRvcl90eXBlCiAgICAgIGJhc2Uo
KSBjb25zdCB7IHJldHVybiBjdXJyZW50OyB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAgICBv
cGVyYXRvciooKSBjb25zdAogICAgICB7CiAgICAgICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVu
dDsKICAgICAgICByZXR1cm4gKi0tX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcG9pbnRlcgog
ICAgICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCgoKCgoK
ICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAg
ICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJl
dmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAgICAgIHsKICAgICAgICByZXZl
cnNlX2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICAgICAgLS1jdXJyZW50OwogICAgICAgIHJl
dHVybiBfX3RtcDsKICAgICAgfQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBv
cGVyYXRvci0tKCkKICAgICAgewogICAgICAgICsrY3VycmVudDsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciBvcGVyYXRvci0tKGludCkK
ICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgICAgICAr
K2N1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CgoKCgoKCiAgICAgIHJldmVy
c2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3VycmVudCAtIF9fbik7IH0KCgoKCgoKICAg
ICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19u
KQogICAgICB7CiAgICAgICAgY3VycmVudCAtPSBfX247CiAgICAgICAgcmV0dXJuICp0aGlzOwog
ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGRpZmZl
cmVuY2VfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoY3Vy
cmVudCArIF9fbik7IH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvciYKICAgICAgb3BlcmF0
b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY3VycmVudCArPSBfX247
CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKCgoKCiAgICAgIHJlZmVyZW5jZQogICAg
ICBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsgcmV0dXJuICooKnRoaXMg
KyBfX24pOyB9CiAgICB9OwojIDI2OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9p
dGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1cm4gX194LmJhc2UoKSA9PSBfX3kuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAg
ICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJl
dHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRl
cmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCByZXZlcnNlX2l0ZXJh
dG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRv
cjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u
c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3Qg
cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBfX3g7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg
ICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkKICAgIHsgcmV0
dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRv
cj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+
JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxf
SXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0
b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl
cmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3IKICAg
IDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQs
IHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNvbnRhaW5lcjsK
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CgoK
ICAgICAgZXhwbGljaXQKICAgICAgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194
KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyAzNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBiYWNrX2lu
c2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0
X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2JhY2so
X192YWx1ZSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgoKICAgICAgYmFja19pbnNl
cnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAg
YmFja19pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsg
fQoKCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJl
dHVybiAqdGhpczsgfQogICAgfTsKIyAzODYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l
cj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KQogICAgeyByZXR1cm4gYmFja19p
bnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQojIDQwMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGZyb250X2luc2VydF9pdGVy
YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p
ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwoKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJf
dHlwZTsKCgogICAgICBleHBsaWNpdCBmcm9udF9pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYg
X194KSA6IGNvbnRhaW5lcigmX194KSB7IH0KIyA0MjYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogICAgICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPSh0eXBlbmFtZSBfQ29udGFpbmVyOjpj
b25zdF9yZWZlcmVuY2UgX192YWx1ZSkKICAgICAgewogICAgICAgIGNvbnRhaW5lci0+cHVzaF9m
cm9udChfX3ZhbHVlKTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBmcm9u
dF9pbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoK
ICAgICAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4g
KnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhp
bnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDQ1NyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9udF9pbnNlcnRfaXRlcmF0b3I8
X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWluZXImIF9feCkKICAgIHsgcmV0
dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gpOyB9CiMgNDc2ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2l0ZXJh
dG9yLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ29udGFpbmVyPgogICAgY2xhc3MgaW5zZXJ0
X2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lk
LCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVy
KiBjb250YWluZXI7CiAgICAgIHR5cGVuYW1lIF9Db250YWluZXI6Oml0ZXJhdG9yIGl0ZXI7Cgog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBlOwoKCgoK
CiAgICAgIGluc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gsIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIF9faSkKICAgICAgOiBjb250YWluZXIoJl9feCksIGl0ZXIoX19pKSB7fQoj
IDUxOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9
KGNvbnN0IHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3ZhbHVlKQogICAg
ICB7CiAgICAgICAgaXRlciA9IGNvbnRhaW5lci0+aW5zZXJ0KGl0ZXIsIF9fdmFsdWUpOwogICAg
ICAgICsraXRlcjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBpbnNlcnRf
aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgaW5z
ZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAg
ICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsg
fQogICAgfTsKIyA1NTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWlu
ZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRfaXRlcmF0b3I8X0NvbnRh
aW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJhdG9yIF9faSkKICAgIHsK
ICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoKCgoKCgoKICB1c2luZyBz
dGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9yOwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIF9fbm9ybWFs
X2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpkaWZm
ZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry
YWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVj
dGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9pbnRlcjsKCiAgICAgIF9f
bm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAgICAgIGV4
cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVyYXRvciYgX19pKSA6IF9N
X2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcj4KICAgICAg
aW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBf
Q29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2kuYmFzZSgpKSB7IH0KCgog
ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJl
bnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIF9N
X2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkg
eyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IK
ICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJl
bnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAgb3BlcmF0b3ItLSgpIHsg
LS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yCiAg
ICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5j
ZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJlbnRbX19uXTsgfQoKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90
eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVybiAqdGhpczsgfQoKICAg
ICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlw
ZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50
ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLT0oY29u
c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCAtPSBfX247IHJldHVy
biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3ItKGNvbnN0
IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVy
YXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0ZXJhdG9yJgogICAgICBi
YXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsKIyA2NTEgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfaXRlcmF0b3Iu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs
IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj09KGNvbnN0IF9f
bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg
ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo
cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog
IG9wZXJhdG9yPT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy
PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPT0gX19yaHMuYmFz
ZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRv
clIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvciE9KGNvbnN0
IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg
ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf
X3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9v
bAogIG9wZXJhdG9yIT0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgIT0gX19yaHMu
YmFzZSgpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl
cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I8KGNv
bnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJv
b2wKICBvcGVyYXRvcjwoY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFp
bmVyPiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0
b3IsIF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPihjb25z
dCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAg
ICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBf
X3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3I+KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5l
cj4mIF9fbGhzLAogICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is
IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPiBfX3Jocy5iYXNl
KCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y
UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPD0oY29uc3Qg
X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAg
ICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9f
cmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29s
CiAgb3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWlu
ZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRv
ciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8PSBfX3Jocy5i
YXNlKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJh
dG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPj0oY29u
c3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAg
ICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4m
IF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jocy5iYXNlKCk7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBi
b29sCiAgb3BlcmF0b3I+PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250
YWluZXI+JiBfX2xocywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy
YXRvciwgX0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSA+PSBfX3Jo
cy5iYXNlKCk7IH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1l
IF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIHR5cGVuYW1lIF9fbm9y
bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+OjpkaWZmZXJlbmNlX3R5cGUKICBv
cGVyYXRvci0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4m
IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg
X0NvbnRhaW5lcj4mIF9fcmhzKQogIHsgcmV0dXJuIF9fbGhzLmJhc2UoKSAtIF9fcmhzLmJhc2Uo
KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+
CiAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4KICBvcGVy
YXRvcisodHlwZW5hbWUgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8
X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYgX19pKQogIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9y
PF9JdGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KfQojIDc2ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29i
YXNlLmgiIDIgMwoKCm5hbWVzcGFjZSBzdGQKewojIDkxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyPgogICAgaW5s
aW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBf
X2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlMjsKCgog
ICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190bXAgPSAqX19hOwog
ICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQojIDExOCAiL2hvbWUv
YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAo
X1RwJiBfX2EsIF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIF9UcCBfX3RtcCA9IF9fYTsK
ICAgICAgX19hID0gX19iOwogICAgICBfX2IgPSBfX3RtcDsKICAgIH0KIyAxNDYgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2Uu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBt
aW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKQogICAgewoKICAgICAKCiAgICAgIGlm
IChfX2IgPCBfX2EpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAgICB9CiMgMTY2ICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNl
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg
bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBp
ZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4NiAiL2hvbWUv
YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFz
ZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlu
bGluZSBjb25zdCBfVHAmCiAgICBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYiwgX19hKSkgcmV0dXJu
IF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMDQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3QgX1RwJgogICAg
bWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19jb21wKQogICAg
ewoKICAgICAgaWYgKF9fY29tcChfX2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7CiAg
ICB9CiMgMjIxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBm
b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAgICAgICAg
Kl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgog
ICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5jZSBfX24g
PSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0OwogICAgICB9
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog
ICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJzdCwgY29u
c3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUoX19yZXN1
bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAgICAgcmV0
dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0
SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlw
ZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9hdXgy
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBf
T3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19m
aXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV9hdXgy
KF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAq
CiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LAog
ICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBf
X2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0
cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3IK
ICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5X2F1eDIo
X19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y
ZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZp
YWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+OjpoYXNf
dHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAgICAgcmV0
dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
aW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX3Ry
dWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9y
PF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9uaTIo
X19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+
CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0
ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w
eV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CiMgMzM5
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf
T3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxf
SW5wdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgIHJldHVybiBfX2NvcHlfbmkxKF9f
Zmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fTm9ybWFsKCkpOwogICAgfQoKCgoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0
ZXIyPgogICAgaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlcjIKICAgIF9fY29weV9iYWNrd2FyZChf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAgICAg
ICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICAqLS1fX3Jlc3VsdCA9ICotLV9fbGFzdDsKICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgaW5saW5lIF9CaWRpcmVj
dGlvbmFsSXRlcgogICAgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX247CiAgICAgIGZvciAoX19uID0gX19sYXN0IC0g
X19maXJzdDsgX19uID4gMDsgLS1fX24pCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7
CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg
ICAgICB0eXBlbmFtZSBfQm9vbFR5cGU+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3Bh
dGNoCiAgICB7CiAgICAgIHN0YXRpYyBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICAgIGNvcHkoX0Jp
ZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgcmV0
dXJuIF9fY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9faXRl
cmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgICB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCos
IF9fdHJ1ZV90eXBlPgogICAgewogICAgICBzdGF0aWMgX1RwKgogICAgICBjb3B5KGNvbnN0IF9U
cCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICAgIHsKICAg
ICAgICBjb25zdCBwdHJkaWZmX3QgX051bSA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgICAgbWVt
bW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICAg
ICAgcmV0dXJuIF9fcmVzdWx0IC0gX051bTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1RwPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxjb25zdCBfVHAq
LCBfVHAqLCBfX3RydWVfdHlwZT4KICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShj
b25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAg
ICB7CiAgICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBf
X3RydWVfdHlwZT4KICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsK
ICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4K
ICAgIGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfYXV4KF9CSTEgX19maXJzdCwgX0JJ
MSBfX2xhc3QsIF9CSTIgX19yZXN1bHQpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX190
eXBlX3RyYWl0czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICA6Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0
b3IgX1RyaXZpYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X0JJMSwg
X0JJMiwgX1RyaXZpYWw+CiAgICAgICAgICAgICAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcmVzdWx0KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9C
STI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRl
cmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQogICAgeyByZXR1
cm4gX0JJMihfX2NvcHlfYmFja3dhcmRfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQuYmFz
ZSgpKSk7IH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBp
bmxpbmUgX0JJMgogICAgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ
MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29w
eV9iYWNrd2FyZF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7IH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJMgogICAgX19jb3B5
X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVzdWx0
LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0
ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwogICAgICByZXR1cm4gX19jb3B5X2JhY2t3
YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jl
c3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBl
bmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3Jt
YWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAg
ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3Jt
YWwgX19Ob3JtYWw7CiAgICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfb3V0cHV0X25vcm1hbF9p
dGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMgNDc3ICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Fs
Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg
IGlubGluZSBfQkkyCiAgICBjb3B5X2JhY2t3YXJkKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3Qs
IF9CSTIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICB0eXBlZGVm
IHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0JJMT46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg
ICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3Qs
IF9fbGFzdCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDUwOSAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBm
aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm
IF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwg
dHlwZW5hbWUgX1RwPgogICAgX091dHB1dEl0ZXIKICAgIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp
cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCgogICAgICBm
b3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX3Zh
bHVlOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKICBpbmxpbmUgdm9pZAogIGZpbGwo
dW5zaWduZWQgY2hhciogX19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LCBjb25zdCB1bnNp
Z25lZCBjaGFyJiBfX2MpCiAgewogICAgdW5zaWduZWQgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1l
bXNldChfX2ZpcnN0LCBfX3RtcCwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgdm9p
ZAogIGZpbGwoc2lnbmVkIGNoYXIqIF9fZmlyc3QsIHNpZ25lZCBjaGFyKiBfX2xhc3QsIGNvbnN0
IHNpZ25lZCBjaGFyJiBfX2MpCiAgewogICAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBt
ZW1zZXQoX19maXJzdCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oX190bXApLCBfX2xhc3Qg
LSBfX2ZpcnN0KTsKICB9CgogIGlubGluZSB2b2lkCiAgZmlsbChjaGFyKiBfX2ZpcnN0LCBjaGFy
KiBfX2xhc3QsIGNvbnN0IGNoYXImIF9fYykKICB7CiAgICBjaGFyIF9fdG1wID0gX19jOwogICAg
bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0
IC0gX19maXJzdCk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSB1
bnNpZ25lZCBjaGFyKgogICAgZmlsbF9uKHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QsIF9TaXplIF9f
biwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmlyc3QsIF9f
Zmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBzaWduZWQgY2hhcioKICAgIGZpbGxf
bihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7
CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAgcmV0dXJuIF9f
Zmlyc3QgKyBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5l
IGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBjaGFyJiBf
X2MpCiAgICB7CiAgICAgIGZpbGwoX19maXJzdCwgX19maXJzdCArIF9fbiwgX19jKTsKICAgICAg
cmV0dXJuIF9fZmlyc3QgKyBfX247CiAgICB9CiMgNjA2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBwYWlyPF9J
bnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4KICAgIG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3Qx
LCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEg
IT0gX19sYXN0MSAmJiAqX19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICArK19fZmlyc3QyOwogICAgICB9CiAgICAgIHJldHVybiBwYWlyPF9JbnB1dEl0
ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKICAgIH0KIyA2NDAgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jh
c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ
dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J
bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg
ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx
LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBpbmxpbmUgYm9vbAogICAg
ZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg
ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg
ICAgICBpZiAoISgqX19maXJzdDEgPT0gKl9fZmlyc3QyKSkKICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNjk5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9C
aW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUgYm9vbAogICAgZXF1YWwoX0lucHV0SXRlcjEgX19m
aXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0
MiwKICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAg
CiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsr
X19maXJzdDIpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy
KSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiMgNzMy
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg
X0lucHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoK
ICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19f
Zmlyc3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCiAgICAg
IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyCiAgICAg
ICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgICAgIGlmIChfX2NvbXAoKl9f
Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKF9f
Y29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
IH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MjsKICAgIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCB1
bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MSwgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0MiwgY29u
c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKICB7CiAgICBjb25zdCBzaXplX3QgX19sZW4xID0g
X19sYXN0MSAtIF9fZmlyc3QxOwogICAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
X2ZpcnN0MjsKICAgIGNvbnN0IGludCBfX3Jlc3VsdCA9IG1lbWNtcChfX2ZpcnN0MSwgX19maXJz
dDIsIG1pbihfX2xlbjEsIF9fbGVuMikpOwogICAgcmV0dXJuIF9fcmVzdWx0ICE9IDAgPyBfX3Jl
c3VsdCA8IDAgOiBfX2xlbjEgPCBfX2xlbjI7CiAgfQoKICBpbmxpbmUgYm9vbAogIGxleGljb2dy
YXBoaWNhbF9jb21wYXJlKGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBjaGFyKiBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBj
aGFyKiBfX2xhc3QyKQogIHsKCiAgICByZXR1cm4gbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoKGNv
bnN0IHNpZ25lZCBjaGFyKikgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QyKTsKCgoK
CgoKICB9Cgp9CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvbWVtb3J5IiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDEgMwojIDg4ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nhc3NlcnQiIDEg
MwojIDQ3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nh
c3NlcnQiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAxIDMgNAojIDY1ICIvdXNyL2lu
Y2x1ZGUvYXNzZXJ0LmgiIDMgNApleHRlcm4gIkMiIHsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9m
YWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFy
ICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p
KTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFpbCAoaW50IF9fZXJybnVtLCBfX2Nv
bnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln
bmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0
IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1
cm5fXykpOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9u
LCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xpbmUpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCn0KIyA0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jYXNzZXJ0IiAyIDMKIyA4OSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAx
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVu
Y3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAz
NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1
bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9l
eGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2
b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVp
ZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk
CiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf
X3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19v
dXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9l
cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25z
dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFy
KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19z
KTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA5
MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGxvYy5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMSAzCiMgNTQgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVz
cGFjZSBzdGQKewoKCgoKICBzdHJ1Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBz
aXplX3QgX1JDX3Q7CgoKICAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19n
dGhyZWFkX211dGV4X3QgX01fcmVmX2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JD
X3QgX19uKSA6IF9NX3JlZl9jb3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhf
dCBfX3RtcCA9IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAg
ICAgIF9NX3JlZl9jb3VudF9sb2NrID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBf
TV9pbmNyKCkKICAgIHsKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9s
b2NrKTsKICAgICAgKytfTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2so
Jl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7
CiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZv
bGF0aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRl
eF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQog
IH07CiMgMTA5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX3RocmVhZHMuaCIgMwogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgc3RydWN0
IF9Td2FwX2xvY2tfc3RydWN0CiAgICB7IHN0YXRpYyBfX2d0aHJlYWRfbXV0ZXhfdCBfU19zd2Fw
X2xvY2s7IH07CgogIHRlbXBsYXRlPGludCBfX2R1bW15PgogICAgX19ndGhyZWFkX211dGV4X3QK
ICAgIF9Td2FwX2xvY2tfc3RydWN0PF9fZHVtbXk+OjpfU19zd2FwX2xvY2sgPSB7MCwgMCwgMCwg
UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19OwoKCgogIGlubGluZSB1bnNpZ25lZCBs
b25nCiAgX0F0b21pY19zd2FwKHVuc2lnbmVkIGxvbmcgKiBfX3AsIHVuc2lnbmVkIGxvbmcgX19x
KQogIHsKICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfU3dhcF9sb2NrX3N0cnVjdDwwPjo6X1Nf
c3dhcF9sb2NrKTsKICAgIHVuc2lnbmVkIGxvbmcgX19yZXN1bHQgPSAqX19wOwogICAgKl9fcCA9
IF9fcTsKICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9Td2FwX2xvY2tfc3RydWN0PDA+Ojpf
U19zd2FwX2xvY2spOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCn0KIyAxNTUgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGhyZWFkcy5o
IiAzCm5hbWVzcGFjZSBzdGQKewogIHN0cnVjdCBfU1RMX211dGV4X2xvY2sKICB7CgoKCgoKICAg
IF9fZ3RocmVhZF9tdXRleF90IF9NX2xvY2s7CgogICAgdm9pZAogICAgX01faW5pdGlhbGl6ZSgp
CiAgICB7CiMgMTkyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX3RocmVhZHMuaCIgMwogICAgfQoKICAgIHZvaWQKICAgIF9NX2FjcXVpcmVf
bG9jaygpCiAgICB7CgoKCiAgICAgIF9fZ3RocmVhZF9tdXRleF9sb2NrKCZfTV9sb2NrKTsKICAg
IH0KCiAgICB2b2lkCiAgICBfTV9yZWxlYXNlX2xvY2soKQogICAgewoKCgogICAgICBfX2d0aHJl
YWRfbXV0ZXhfdW5sb2NrKCZfTV9sb2NrKTsKICAgIH0KICB9OwojIDIyOCAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90aHJlYWRzLmgiIDMK
ICBzdHJ1Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7
CgogICAgX1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhf
X2xvY2spCiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRv
X2xvY2soKSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZv
aWQgb3BlcmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhj
b25zdCBfU1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgOTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCgojIDEgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51
eC1nbnUvYml0cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9hdG9taWNpdHku
aCIgMwp0eXBlZGVmIGludCBfQXRvbWljX3dvcmQ7CgpzdGF0aWMgaW5saW5lIF9BdG9taWNfd29y
ZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRp
bGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193
b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gX192b2xhdGlsZV9fICgibG9jazsgeGFkZGwgJTAsJTIi
CiAgICAgICAgICAgICAgICAgICAgICAgIDogIj1yIiAoX19yZXN1bHQpCiAgICAgICAgICAgICAg
ICAgICAgICAgIDogIjAiIChfX3ZhbCksICJtIiAoKl9fbWVtKQogICAgICAgICAgICAgICAgICAg
ICAgICA6ICJtZW1vcnkiKTsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p
ZApfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpCl9fYXRvbWljX2FkZCAodm9sYXRpbGUgX0F0
b21pY193b3JkKiBfX21lbSwgaW50IF9fdmFsKQp7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJs
b2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAgICAgICA6IDogImlyIiAoX192YWwp
LCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA5MyAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKCm5hbWVzcGFj
ZSBzdGQKewojIDEwNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgY2xhc3MgX19uZXdfYWxsb2MKICB7CiAgcHVibGlj
OgogICAgc3RhdGljIHZvaWQqCiAgICBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgeyByZXR1cm4g
OjpvcGVyYXRvciBuZXcoX19uKTsgfQoKICAgIHN0YXRpYyB2b2lkCiAgICBkZWFsbG9jYXRlKHZv
aWQqIF9fcCwgc2l6ZV90KQogICAgeyA6Om9wZXJhdG9yIGRlbGV0ZShfX3ApOyB9CiAgfTsKIyAx
MjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPGludCBfX2luc3Q+CiAgICBjbGFzcyBfX21hbGxvY19h
bGxvY190ZW1wbGF0ZQogICAgewogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIHZvaWQqIF9TX29v
bV9tYWxsb2Moc2l6ZV90KTsKCgoKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nf
b29tX2hhbmRsZXIpKCk7CgogICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxs
b2NhdGUoc2l6ZV90IF9fbikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9j
KF9fbik7CiAgICAgICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxv
YyhfX24pOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZv
aWQKICAgICAgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3Ap
OyB9CiMgMTYxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2FsbG9jLmgiIDMKICAgICAgc3RhdGljIHZvaWQgKCogX19zZXRfbWFsbG9jX2hh
bmRsZXIodm9pZCAoKl9fZikoKSkpKCkKICAgICAgewogICAgICAgIHZvaWQgKCogX19vbGQpKCkg
PSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsKICAgICAgICBfX21hbGxvY19hbGxvY19vb21f
aGFuZGxlciA9IF9fZjsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KICAgIH07CgoKICB0
ZW1wbGF0ZTxpbnQgX19pbnN0PgogICAgdm9pZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxf
X2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlPGlu
dCBfX2luc3Q+CiAgICB2b2lkKgogICAgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6
CiAgICBfU19vb21fbWFsbG9jKHNpemVfdCBfX24pCiAgICB7CiAgICAgIHZvaWQgKCogX19teV9t
YWxsb2NfaGFuZGxlcikoKTsKICAgICAgdm9pZCogX19yZXN1bHQ7CgogICAgICBmb3IgKDs7KQog
ICAgICAgIHsKICAgICAgICAgIF9fbXlfbWFsbG9jX2hhbmRsZXIgPSBfX21hbGxvY19hbGxvY19v
b21faGFuZGxlcjsKICAgICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpCiAgICAg
ICAgICAgIHN0ZDo6X190aHJvd19iYWRfYWxsb2MoKTsKICAgICAgICAgICgqX19teV9tYWxsb2Nf
aGFuZGxlcikoKTsKICAgICAgICAgIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgICBp
ZiAoX19yZXN1bHQpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICB9
CiMgMjE2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsbG9jLmgiIDMKICB0eXBlZGVmIF9fbmV3X2FsbG9jIF9fbWVtX2ludGVyZmFjZTsK
IyAyMjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9j
PgogICAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICAgIHsKICAgIHB1YmxpYzoKICAgICAgc3RhdGlj
IF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gMCA9PSBfX24g
PyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAg
ICAgc3RhdGljIF9UcCoKICAgICAgYWxsb2NhdGUoKQogICAgICB7IHJldHVybiAoX1RwKikgX0Fs
bG9jOjphbGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBk
ZWFsbG9jYXRlKF9UcCogX19wLCBzaXplX3QgX19uKQogICAgICB7IGlmICgwICE9IF9fbikgX0Fs
bG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mIChfVHApKTsgfQoKICAgICAgc3RhdGlj
IHZvaWQKICAgICAgZGVhbGxvY2F0ZShfVHAqIF9fcCkKICAgICAgeyBfQWxsb2M6OmRlYWxsb2Nh
dGUoX19wLCBzaXplb2YgKF9UcCkpOyB9CiAgICB9OwojIDI2NSAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgX19kZWJ1Z19hbGxvYwogICAgewogICAgcHJp
dmF0ZToKCgogICAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKICAgIHB1YmxpYzoKICAgICAgc3Rh
dGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAgICAgIHsKICAgICAgICBjaGFy
KiBfX3Jlc3VsdCA9IChjaGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJh
KTsKICAgICAgICAqKHNpemVfdCopX19yZXN1bHQgPSBfX247CiAgICAgICAgcmV0dXJuIF9fcmVz
dWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgY2hhciogX19y
ZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICAgKHN0YXRpY19jYXN0
PHZvaWQ+ICgoKihzaXplX3QqKV9fcmVhbF9wID09IF9fbikgPyAwIDogKF9fYXNzZXJ0X2ZhaWwg
KCIqKHNpemVfdCopX19yZWFsX3AgPT0gX19uIiwgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIsIDI4NiwgX19QUkVUVFlfRlVO
Q1RJT05fXyksIDApKSk7CiAgICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24g
KyAoaW50KSBfU19leHRyYSk7CiAgICAgIH0KIyAzMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogICAgfTsKIyAzMzYg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
YWxsb2MuaCIgMwogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2xh
c3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlCiAgICB7CiAgICBwcml2YXRlOgogICAgICBlbnVt
IHtfQUxJR04gPSA4fTsKICAgICAgZW51bSB7X01BWF9CWVRFUyA9IDEyOH07CiAgICAgIGVudW0g
e19ORlJFRUxJU1RTID0gX01BWF9CWVRFUyAvIF9BTElHTn07CgogICAgICB1bmlvbiBfT2JqCiAg
ICAgIHsKICAgICAgICB1bmlvbiBfT2JqKiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICBjaGFy
IF9NX2NsaWVudF9kYXRhWzFdOwogICAgICB9OwoKICAgICAgc3RhdGljIF9PYmoqIHZvbGF0aWxl
IF9TX2ZyZWVfbGlzdFtfTkZSRUVMSVNUU107CgoKICAgICAgc3RhdGljIGNoYXIqIF9TX3N0YXJ0
X2ZyZWU7CiAgICAgIHN0YXRpYyBjaGFyKiBfU19lbmRfZnJlZTsKICAgICAgc3RhdGljIHNpemVf
dCBfU19oZWFwX3NpemU7CgogICAgICBzdGF0aWMgX1NUTF9tdXRleF9sb2NrIF9TX25vZGVfYWxs
b2NhdG9yX2xvY2s7CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIF9TX3JvdW5kX3VwKHNpemVf
dCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x
KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAg
IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKQogICAgICB7IHJldHVybiAoKChfX2J5
dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAgICAg
c3RhdGljIHZvaWQqCiAgICAgIF9TX3JlZmlsbChzaXplX3QgX19uKTsKCgoKICAgICAgc3RhdGlj
IGNoYXIqCiAgICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7
CgoKCiAgICAgIHN0cnVjdCBfTG9jawogICAgICB7CiAgICAgICAgX0xvY2soKSB7IGlmIChfX3Ro
cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg
ICB+X0xvY2soKSB7IGlmIChfX3RocmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fcmVs
ZWFzZV9sb2NrKCk7IH0KICAgICAgfSBfX2F0dHJpYnV0ZV9fICgoX191bnVzZWRfXykpOwogICAg
ICBmcmllbmQgc3RydWN0IF9Mb2NrOwoKICAgICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19mb3Jj
ZV9uZXc7CgogICAgcHVibGljOgoKICAgICAgc3RhdGljIHZvaWQqCiAgICAgIGFsbG9jYXRlKHNp
emVfdCBfX24pCiAgICAgIHsKICAgICAgICB2b2lkKiBfX3JldCA9IDA7CgoKCgogICAgICAgIGlm
IChfU19mb3JjZV9uZXcgPT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgaWYgKGdldGVudigi
R0xJQkNQUF9GT1JDRV9ORVciKSkKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9TX2ZvcmNl
X25ldywgMSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX2F0b21pY19hZGQoJl9T
X2ZvcmNlX25ldywgLTEpOwoKICAgICAgICAgICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoX1NfZm9y
Y2VfbmV3ICE9IDApID8gMCA6IChfX2Fzc2VydF9mYWlsICgiX1NfZm9yY2VfbmV3ICE9IDAiLCAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h
bGxvYy5oIiwgNDA1LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsKICAgICAgICAgIH0KCiAg
ICAgICAgaWYgKChfX24gPiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4g
MCkpCiAgICAgICAgICBfX3JldCA9IF9fbmV3X2FsbG9jOjphbGxvY2F0ZShfX24pOwogICAgICAg
IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s
aXN0ID0gX1NfZnJlZV9saXN0CiAgICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24p
OwoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICAgIF9PYmoq
IF9fcmVzdHJpY3RfXyBfX3Jlc3VsdCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgaWYg
KF9fcmVzdWx0ID09IDApCiAgICAgICAgICAgICAgX19yZXQgPSBfU19yZWZpbGwoX1Nfcm91bmRf
dXAoX19uKSk7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAg
ICAgICAgICAgIF9fcmV0ID0gX19yZXN1bHQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQog
ICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGRl
YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAgaWYgKChfX24g
PiAoc2l6ZV90KSBfTUFYX0JZVEVTKSB8fCAoX1NfZm9yY2VfbmV3ID4gMCkpCiAgICAgICAgICBf
X25ld19hbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAg
ewogICAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xp
c3QKICAgICAgICAgICAgICArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CiAgICAgICAgICAgIF9P
YmoqIF9fcSA9IChfT2JqKilfX3A7CgoKCgogICAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFu
Y2U7CiAgICAgICAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlz
dDsKICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwogICAgICAgICAgfQogICAgICB9
CgoKCgoKICAgIH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PiBfQXRv
bWljX3dvcmQKICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+Ojpf
U19mb3JjZV9uZXcgPSAwOwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4K
ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocmVhZHMsX19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9h
bGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9Cgog
IHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yIT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2lu
c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy
ZWFkcyxfX2luc3Q+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CgoKCgoKICB0ZW1wbGF0ZTxib29s
IF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIGNoYXIqCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjoKICAgIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3Np
emUsIGludCYgX19ub2JqcykKICAgIHsKICAgICAgY2hhciogX19yZXN1bHQ7CiAgICAgIHNpemVf
dCBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgc2l6ZV90IF9fYnl0ZXNf
bGVmdCA9IF9TX2VuZF9mcmVlIC0gX1Nfc3RhcnRfZnJlZTsKCiAgICAgIGlmIChfX2J5dGVzX2xl
ZnQgPj0gX190b3RhbF9ieXRlcykKICAgICAgICB7CiAgICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0
YXJ0X2ZyZWU7CiAgICAgICAgICBfU19zdGFydF9mcmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAg
ICAgICByZXR1cm4gX19yZXN1bHQgOwogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19s
ZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRl
c19sZWZ0L19fc2l6ZSk7CiAgICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2Jq
czsKICAgICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0
X2ZyZWUgKz0gX190b3RhbF9ieXRlczsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19ieXRlc190b19nZXQg
PQogICAgICAgICAgICAyICogX190b3RhbF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6
ZSA+PiA0KTsKCiAgICAgICAgICBpZiAoX19ieXRlc19sZWZ0ID4gMCkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9PYmoqIHZvbGF0aWxlKiBfX215X2ZyZWVfbGlzdCA9CiAgICAgICAgICAg
ICAgICBfU19mcmVlX2xpc3QgKyBfU19mcmVlbGlzdF9pbmRleChfX2J5dGVzX2xlZnQpOwoKICAg
ICAgICAgICAgICAoKF9PYmoqKV9TX3N0YXJ0X2ZyZWUpIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g
Kl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgICAgICpfX215X2ZyZWVfbGlzdCA9IChfT2JqKilf
U19zdGFydF9mcmVlOwogICAgICAgICAgICB9CiAgICAgICAgICBfU19zdGFydF9mcmVlID0gKGNo
YXIqKSBfX25ld19hbGxvYzo6YWxsb2NhdGUoX19ieXRlc190b19nZXQpOwogICAgICAgICAgaWYg
KDAgPT0gX1Nfc3RhcnRfZnJlZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBf
X2k7CiAgICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICAg
ICAgICAgIF9PYmoqIF9fcDsKCgoKICAgICAgICAgICAgICBfX2kgPSBfX3NpemU7CiAgICAgICAg
ICAgICAgZm9yICg7IF9faSA8PSAoc2l6ZV90KSBfTUFYX0JZVEVTOyBfX2kgKz0gKHNpemVfdCkg
X0FMSUdOKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX215X2ZyZWVfbGlz
dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9faSk7CiAgICAgICAgICAgICAg
ICAgIF9fcCA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gX19w
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX215X2ZyZWVf
bGlzdCA9IF9fcCAtPiBfTV9mcmVlX2xpc3RfbGluazsKICAgICAgICAgICAgICAgICAgICAgIF9T
X3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgICAgX1NfZW5kX2Zy
ZWUgPSBfU19zdGFydF9mcmVlICsgX19pOwogICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9T
X2NodW5rX2FsbG9jKF9fc2l6ZSwgX19ub2Jqcyk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAg
ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19uZXdfYWxsb2M6OmFsbG9jYXRlKF9fYnl0ZXNf
dG9fZ2V0KTsKCgogICAgICAgICAgICB9CiAgICAgICAgICBfU19oZWFwX3NpemUgKz0gX19ieXRl
c190b19nZXQ7CiAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVz
X3RvX2dldDsKICAgICAgICAgIHJldHVybiBfU19jaHVua19hbGxvYyhfX3NpemUsIF9fbm9ianMp
OwogICAgICAgIH0KICAgIH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19p
bnN0PgogICAgdm9pZCoKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9f
aW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQogICAgewogICAgICBpbnQgX19ub2JqcyA9IDIw
OwogICAgICBjaGFyKiBfX2NodW5rID0gX1NfY2h1bmtfYWxsb2MoX19uLCBfX25vYmpzKTsKICAg
ICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0OwogICAgICBfT2JqKiBfX3Jlc3VsdDsK
ICAgICAgX09iaiogX19jdXJyZW50X29iajsKICAgICAgX09iaiogX19uZXh0X29iajsKICAgICAg
aW50IF9faTsKCiAgICAgIGlmICgxID09IF9fbm9ianMpCiAgICAgICAgcmV0dXJuIF9fY2h1bms7
CiAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3RfaW5kZXgo
X19uKTsKCgogICAgICBfX3Jlc3VsdCA9IChfT2JqKilfX2NodW5rOwogICAgICAqX19teV9mcmVl
X2xpc3QgPSBfX25leHRfb2JqID0gKF9PYmoqKShfX2NodW5rICsgX19uKTsKICAgICAgZm9yIChf
X2kgPSAxOyA7IF9faSsrKQogICAgICAgIHsKICAgICAgICAgIF9fY3VycmVudF9vYmogPSBfX25l
eHRfb2JqOwogICAgICAgICAgX19uZXh0X29iaiA9IChfT2JqKikoKGNoYXIqKV9fbmV4dF9vYmog
KyBfX24pOwogICAgICAgICAgaWYgKF9fbm9ianMgLSAxID09IF9faSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSAwOwogICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg
IF9fY3VycmVudF9vYmogLT4gX01fZnJlZV9saXN0X2xpbmsgPSBfX25leHRfb2JqOwogICAgICAg
IH0KICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KIyA2MDcgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBs
YXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgX1NUTF9tdXRleF9sb2NrCiAgICBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX25vZGVfYWxsb2Nh
dG9yX2xvY2sKICAgID0geyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAw
IH19IH07CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogICAgY2hhciog
X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19zdGFydF9mcmVl
ID0gMDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBjaGFyKiBf
X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLF9faW5zdD46Ol9TX2VuZF9mcmVlID0g
MDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBzaXplX3QgX19k
ZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcyxfX2luc3Q+OjpfU19oZWFwX3NpemUgPSAw
OwoKICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHR5cGVuYW1lIF9f
ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X09iaiogdm9sYXRpbGUK
ICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsX19pbnN0Pjo6X1NfZnJlZV9s
aXN0W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1
ZSwwPiBfX2FsbG9jOwogIHR5cGVkZWYgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPGZhbHNlLDA+
IF9fc2luZ2xlX2NsaWVudF9hbGxvYzsKIyA2NDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2MuaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9UcD4KICAgIGNsYXNzIGFsbG9jYXRvcgogICAgewogICAgICB0eXBlZGVmIF9fYWxsb2Mg
X0FsbG9jOwogICAgcHVibGljOgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAg
IHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBv
aW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl
ZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJl
bmNlOwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRv
cjxfVHAxPiBvdGhlcjsgfTsKCiAgICAgIGFsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgYWxs
b2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30KICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwMT4KICAgICAgICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+JikgdGhyb3co
KSB7fQogICAgICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgogICAgICBh
ZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAgIGNvbnN0
X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy
biAmX194OyB9CgoKCiAgICAgIF9UcCoKICAgICAgYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29u
c3Qgdm9pZCogPSAwKQogICAgICB7CiAgICAgICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgICA/
IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKSA6
IDA7CiAgICAgIH0KCgogICAgICB2b2lkCiAgICAgIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNp
emVfdHlwZSBfX24pCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9m
KF9UcCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUoKSBjb25zdCB0aHJvdygp
IHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICAgICAgdm9pZCBjb25zdHJ1
Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFsKTsg
fQogICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KICAgIH07
CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGFsbG9jYXRvcjx2b2lkPgogICAgewogICAgcHVibGlj
OgogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90
IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBl
ZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90
eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5k
CiAgICAgICAgeyB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsgfTsKICAgIH07CgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9UMj4KICAgIGlubGluZSBib29sCiAgICBv
cGVyYXRvcj09KGNvbnN0IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQog
ICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9U
Mj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGFsbG9jYXRvcjxfVDE+Jiwg
Y29uc3QgYWxsb2NhdG9yPF9UMj4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KIyA3MzEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxsb2Mu
aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgc3RydWN0
IF9fYWxsb2NhdG9yCiAgICB7CiAgICAgIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogICAg
ICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZl
cmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgX1RwKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAg
ICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9UcCB2
YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBzdHJ1Y3Qg
cmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7
IH07CgogICAgICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICAgICAgX19hbGxvY2F0b3IoY29u
c3QgX19hbGxvY2F0b3ImIF9fYSkgdGhyb3coKQogICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhf
X2EuX191bmRlcmx5aW5nX2FsbG9jKSB7fQoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4K
ICAgICAgICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+JiBfX2Ep
IHRocm93KCkKICAgICAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5nX2Fs
bG9jKSB7fQoKICAgICAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICAgICAgcG9pbnRlcgog
ICAgICBhZGRyZXNzKHJlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCiAgICAg
IGNvbnN0X3BvaW50ZXIKICAgICAgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7
IHJldHVybiAmX194OyB9CgoKICAgIF9UcCoKICAgIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNv
bnN0IHZvaWQqID0gMCkKICAgIHsKICAgICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0
aWNfY2FzdDxfVHAqPihfX3VuZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9U
cCkpKQogICAgICAgIDogMDsKICAgIH0KCgogICAgdm9pZAogICAgZGVhbGxvY2F0ZShwb2ludGVy
IF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUo
X19wLCBfX24gKiBzaXplb2YoX1RwKSk7IH0KCiAgICBzaXplX3R5cGUKICAgIG1heF9zaXplKCkg
Y29uc3QgdGhyb3coKSB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgICB2
b2lkCiAgICBjb25zdHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9f
cCkgX1RwKF9fdmFsKTsgfQoKICAgIHZvaWQKICAgIGRlc3Ryb3kocG9pbnRlciBfX3ApIHsgX19w
LT5+X1RwKCk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQWxsb2M+CiAgICBzdHJ1Y3Qg
X19hbGxvY2F0b3I8dm9pZCwgX0FsbG9jPgogICAgewogICAgICB0eXBlZGVmIHNpemVfdCBzaXpl
X3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlw
ZWRlZiB2b2lkKiBwb2ludGVyOwogICAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50
ZXI7CiAgICAgIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwMT4KICAgICAgICBzdHJ1Y3QgcmViaW5kCiAgICAgICAgeyB0eXBlZGVmIF9fYWxsb2Nh
dG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7IH07CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0
IF9fYWxsb2NhdG9yPF9UcCxfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBfX2Fs
bG9jYXRvcjxfVHAsX0FsbG9jPiYgX19hMikKICAgIHsgcmV0dXJuIF9fYTEuX191bmRlcmx5aW5n
X2FsbG9jID09IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29u
c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICBjb25zdCBf
X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCiAgICB7IHJldHVybiBfX2ExLl9fdW5kZXJs
eWluZ19hbGxvYyAhPSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsgfQoKCgoKCgoKICB0ZW1wbGF0
ZTxpbnQgaW5zdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9j
X2FsbG9jX3RlbXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8aW5zdD4mKQogICAgeyByZXR1cm4gdHJ1ZTsgfQoKICB0ZW1wbGF0ZTxpbnQg
X19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxs
b2NfdGVtcGxhdGU8X19pbnN0PiYsCiAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4mKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0
dXJuIHRydWU7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK
ICAgIG9wZXJhdG9yIT0oY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JiwgY29uc3QgX19kZWJ1
Z19hbGxvYzxfQWxsb2M+JikKICAgIHsgcmV0dXJuIGZhbHNlOyB9CiMgODgyICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsbG9jLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBzdHJ1Y3Qg
X0FsbG9jX3RyYWl0cwogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSBmYWxzZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSBy
ZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvY2F0b3I+CiAgICBjb25zdCBib29sIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfVHAxPgogICAgc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBhbGxv
Y2F0b3I8X1RwMT4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxl
c3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19hbGxvYz4gX0Fs
bG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7CiAg
ICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGludCBfX2luc3Q+CiAgICBzdHJ1Y3Qg
X0FsbG9jX3RyYWl0czxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgogICAg
ewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0
eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0
PiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcCwgX19tYWxsb2Nf
YWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IGFsbG9jYXRvcl90eXBlOwogICAgfTsKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1RwLCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICAgIHN0cnVjdCBf
QWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19p
bnN0PiA+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRy
dWU7CiAgICAgIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVt
cGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBf
X2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19k
ZWJ1Z19hbGxvYzxfQWxsb2M+ID4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5z
dGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVi
dWdfYWxsb2M8X0FsbG9jPiA+IF9BbGxvY190eXBlOwogICAgICB0eXBlZGVmIF9fYWxsb2NhdG9y
PF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKCgoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfVHAxLCBpbnQgX19pbnN0PgogICAg
c3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAgICAgICAgX19hbGxv
Y2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+ID4KICAgIHsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICAgICAgdHlwZWRl
ZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBf
QWxsb2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9j
X3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9UcCwgdHlwZW5hbWUgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4KICAgIHN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWZhdWx0X2FsbG9j
X3RlbXBsYXRlPF9fdGhyLCBfX2luc3Q+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBfU19pbnN0YW5jZWxlc3MgPSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9U
cCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyLF9faW5zdD4gPgogICAgICBfQWxsb2Nf
dHlwZTsKICAgICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1w
bGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgICB9OwoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9UcDEsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0
cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1Z19hbGxvYzxf
QWxsb2M+ID4gPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3Mg
PSB0cnVlOwogICAgICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxf
QWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2Rl
YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKICAgIH07CgoKCgoKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBh
bGxvY2F0b3I8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fZGVmYXVsdF9hbGxv
Y190ZW1wbGF0ZTx0cnVlLDA+Owp9CiMgNTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9j
b25zdHJ1Y3QuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1Qx
LCBjbGFzcyBfVDI+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCwgY29u
c3QgX1QyJiBfX3ZhbHVlKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihfX3ApKSBfVDEo
X192YWx1ZSk7IH0KCgoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIF9UMT4KICAgIGlubGluZSB2b2lk
CiAgICBfQ29uc3RydWN0KF9UMSogX19wKQogICAgeyBuZXcgKHN0YXRpY19jYXN0PHZvaWQqPihf
X3ApKSBfVDEoKTsgfQojIDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0
ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUpCiAg
ICB7IGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgX0Rlc3Ryb3koJipfX2Zp
cnN0KTsgfQojIDExMiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRv
ciwgX0ZvcndhcmRJdGVyYXRvciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVy
KQogICAgeyBfX3BvaW50ZXItPn5fVHAoKTsgfQojIDEzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMwogIHRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIF9EZXN0cm95
KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QpCiAgICB7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcmF0b3I+
Ojp2YWx1ZV90eXBlCiAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlX3R5cGU7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVmFsdWVfdHlwZT46Omhhc190cml2aWFsX2Rl
c3RydWN0b3IKICAgICAgICAgICAgICAgICAgICAgICBfSGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK
CiAgICAgIF9fZGVzdHJveV9hdXgoX19maXJzdCwgX19sYXN0LCBfSGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcigpKTsKICAgIH0KfQojIDU3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAxIDMKIyA2NiAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF91
bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl
cgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9f
cmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAgeyBy
ZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIK
ICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpCiAgICB7CiAg
ICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAgICB0cnkgewogICAgICAgIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikKICAgICAgICAgIF9D
b25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJldHVybiBfX2N1cjsKICAgICAg
fQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1bHQs
IF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KIyAxMDYgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFs
aXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0Zvcndh
cmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9jb3B5KF9J
bnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9Gb3J3YXJkSXRlciBfX3Jlc3Vs
dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJ
dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlw
ZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0lzX1BP
RCgpKTsKICAgIH0KCiAgaW5saW5lIGNoYXIqCiAgdW5pbml0aWFsaXplZF9jb3B5KGNvbnN0IGNo
YXIqIF9fZmlyc3QsIGNvbnN0IGNoYXIqIF9fbGFzdCwgY2hhciogX19yZXN1bHQpCiAgewogICAg
bWVtbW92ZShfX3Jlc3VsdCwgX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7CiAgICByZXR1cm4g
X19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7CiAgfQoKICBpbmxpbmUgd2NoYXJfdCoKICB1
bmluaXRpYWxpemVkX2NvcHkoY29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCog
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICB3Y2hhcl90KiBfX3Jlc3VsdCkKICB7CiAgICBt
ZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19m
aXJzdCkpOwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs
IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
X1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgeyBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHZv
aWQKICAgIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zv
cndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9feCwgX19mYWxzZV90eXBlKQogICAgewogICAgICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2Zp
cnN0OwogICAgICB0cnkgewogICAgICAgIGZvciAoIDsgX19jdXIgIT0gX19sYXN0OyArK19fY3Vy
KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNo
KC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX2ZpcnN0LCBfX2N1cik7CiAgICAg
ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CiMgMTY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZv
aWQKICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlw
ZSBfSXNfUE9EOwogICAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX19maXJzdCwgX19sYXN0
LCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRl
cgogICAgX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9T
aXplIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBf
X3RydWVfdHlwZSkKICAgIHsKICAgICAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1NpemUs
IHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2ZpbGxf
bl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCiAgICB7CiAgICAgIF9G
b3J3YXJkSXRlciBfX2N1ciA9IF9fZmlyc3Q7CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICggOyBf
X24gPiAwOyAtLV9fbiwgKytfX2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194
KTsKICAgICAgICByZXR1cm4gX19jdXI7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAg
IHsKICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QsIF9fY3VyKTsKICAgICAgICAgIHRocm93Owog
ICAgICAgIH0KICAgIH0KIyAyMTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5l
IF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmly
c3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0Rf
dHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX19m
aXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwg
dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmlu
aXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19s
YXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs
IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX3Jlc3VsdCkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gdW5pbml0
aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgIHRyeSB7CiAg
ICAgICAgcmV0dXJuIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQp
OwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShf
X3Jlc3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0lu
cHV0SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9maWxs
X2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0KQogICAgewog
ICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gpOwogICAgICB0cnkg
ewogICAgICAgIHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX21p
ZCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsKICAgICAgICAgIF9EZXN0cm95
KF9fcmVzdWx0LCBfX21pZCk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlw
ZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2ZpbGwo
X0lucHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKICAgIHsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0MSwgX19s
YXN0MSwgX19maXJzdDIpOwogICAgICB0cnkgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbChf
X21pZDIsIF9fbGFzdDIsIF9feCk7CiAgICAgIH0KICAgICAgY2F0Y2goLi4uKQogICAgICAgIHsK
ICAgICAgICAgIF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOwogICAgICAgICAgdGhyb3c7CiAg
ICAgICAgfQogICAgfQoKfQojIDU5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL21lbW9yeSIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yYXdfc3RvcmFnZV9pdGVyLmgiIDEgMwojIDY0
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X3Jhd19zdG9yYWdlX2l0ZXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgdGVtcGxhdGUgPGNs
YXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KICBjbGFzcyByYXdfc3RvcmFnZV9pdGVy
YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p
ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0ZvcndhcmRJdGVyYXRv
ciBfTV9pdGVyOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgcmF3X3N0b3JhZ2Vf
aXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gpIDogX01faXRlcihfX3gpIHt9CgogICAgICBy
YXdfc3RvcmFnZV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0K
CiAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBf
X2VsZW1lbnQpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50
KTsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHJhd19zdG9yYWdlX2l0ZXJh
dG9yPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4mCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg
ICAgICAgKytfTV9pdGVyOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3
X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgogICAgICBvcGVyYXRvcisr
KGludCkKICAgICAgewogICAgICAgIHJhd19zdG9yYWdlX2l0ZXJhdG9yPF9Gb3J3YXJkSXRlcmF0
b3IsIF9UcD4gX190bXAgPSAqdGhpczsKICAgICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJu
IF9fdG1wOwogICAgICB9CiAgICB9Owp9CiMgNjAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDcxICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X1RwKiwgcHRyZGlmZl90PgogICAgX19n
ZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopCiAgICB7CiAgICAgIGlm
IChfX2xlbiA+IHB0cmRpZmZfdCgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICAgIF9f
bGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkK
ICAgICAgICB7CiAgICAgICAgICBfVHAqIF9fdG1wID0gKF9UcCopIHN0ZDo6bWFsbG9jKChzdGQ6
OnNpemVfdClfX2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgICAgIGlmIChfX3RtcCAhPSAwKQog
ICAgICAgICAgICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KF9fdG1wLCBfX2xlbik7CiAg
ICAgICAgICBfX2xlbiAvPSAyOwogICAgICAgIH0KICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy
ZGlmZl90PigoX1RwKikwLCAwKTsKICAgIH0KIyAxMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW5saW5lIHBhaXI8X1RwKixwdHJkaWZmX3Q+CiAgICBnZXRfdGVtcG9yYXJ5X2J1ZmZl
cihwdHJkaWZmX3QgX19sZW4pCiAgICB7IHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9f
bGVuLCAoX1RwKikgMCk7IH0KIyAxMTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdm9p
ZAogICAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAgICB7IHN0ZDo6ZnJlZShf
X3ApOyB9CiMgMTI3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL21lbW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBzdHJ1Y3QgYXV0b19w
dHJfcmVmCiAgICB7CiAgICAgIF9UcDEqIF9NX3B0cjsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGF1
dG9fcHRyX3JlZihfVHAxKiBfX3ApOiBfTV9wdHIoX19wKSB7IH0KICAgIH07CiMgMTY2ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogIHRl
bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNsYXNzIGF1dG9fcHRyCiAgICB7CiAgICBwcml2YXRl
OgogICAgICBfVHAqIF9NX3B0cjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9UcCBlbGVt
ZW50X3R5cGU7CgoKCgoKCgogICAgICBleHBsaWNpdAogICAgICBhdXRvX3B0cihlbGVtZW50X3R5
cGUqIF9fcCA9IDApIHRocm93KCkgOiBfTV9wdHIoX19wKSB7IH0KIyAxOTIgIi9ob21lL2Jhbmdl
cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIGF1dG9f
cHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMg
MjAzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9y
eSIgMwogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIGF1dG9fcHRyKGF1dG9f
cHRyPF9UcDE+JiBfX2EpIHRocm93KCkgOiBfTV9wdHIoX19hLnJlbGVhc2UoKSkgeyB9CiMgMjE0
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIg
MwogICAgICBhdXRvX3B0ciYKICAgICAgb3BlcmF0b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkK
ICAgICAgewogICAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICAgIHJldHVybiAqdGhp
czsKICAgICAgfQojIDIzMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9tZW1vcnkiIDMKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAgICAgICBh
dXRvX3B0ciYKICAgICAgICBvcGVyYXRvcj0oYXV0b19wdHI8X1RwMT4mIF9fYSkgdGhyb3coKQog
ICAgICAgIHsKICAgICAgICAgIHJlc2V0KF9fYS5yZWxlYXNlKCkpOwogICAgICAgICAgcmV0dXJu
ICp0aGlzOwogICAgICAgIH0KIyAyNTEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvbWVtb3J5IiAzCiAgICAgIH5hdXRvX3B0cigpIHsgZGVsZXRlIF9NX3B0
cjsgfQojIDI2MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9tZW1vcnkiIDMKICAgICAgZWxlbWVudF90eXBlJgogICAgICBvcGVyYXRvciooKSBjb25zdCB0
aHJvdygpIHsgcmV0dXJuICpfTV9wdHI7IH0KCgoKCgoKCiAgICAgIGVsZW1lbnRfdHlwZSoKICAg
ICAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01fcHRyOyB9CiMgMjgzICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwog
ICAgICBlbGVtZW50X3R5cGUqCiAgICAgIGdldCgpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gX01f
cHRyOyB9CiMgMjk3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL21lbW9yeSIgMwogICAgICBlbGVtZW50X3R5cGUqCiAgICAgIHJlbGVhc2UoKSB0aHJvdygp
CiAgICAgIHsKICAgICAgICBlbGVtZW50X3R5cGUqIF9fdG1wID0gX01fcHRyOwogICAgICAgIF9N
X3B0ciA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiMgMzEyICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21lbW9yeSIgMwogICAgICB2b2lk
CiAgICAgIHJlc2V0KGVsZW1lbnRfdHlwZSogX19wID0gMCkgdGhyb3coKQogICAgICB7CiAgICAg
ICAgaWYgKF9fcCAhPSBfTV9wdHIpCiAgICAgICAgICB7CiAgICAgICAgICAgIGRlbGV0ZSBfTV9w
dHI7CiAgICAgICAgICAgIF9NX3B0ciA9IF9fcDsKICAgICAgICAgIH0KICAgICAgfQojIDMzMyAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9tZW1vcnkiIDMK
ICAgICAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkK
ICAgICAgOiBfTV9wdHIoX19yZWYuX01fcHRyKSB7IH0KCiAgICAgIGF1dG9fcHRyJgogICAgICBv
cGVyYXRvcj0oYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYpIHRocm93KCkKICAgICAg
ewogICAgICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgICB7CiAg
ICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0
cjsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcDE+CiAgICAgICAgb3BlcmF0b3IgYXV0b19wdHJfcmVmPF9UcDE+KCkg
dGhyb3coKQogICAgICAgIHsgcmV0dXJuIGF1dG9fcHRyX3JlZjxfVHAxPih0aGlzLT5yZWxlYXNl
KCkpOyB9CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAxPgogICAgICAgIG9wZXJhdG9yIGF1
dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIGF1dG9fcHRyPF9UcDE+KHRo
aXMtPnJlbGVhc2UoKSk7IH0KCiAgfTsKfQojIDQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMK
IyA2NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRl
bXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVuY3Rpb24g
ewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRf
dHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9S
ZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3RfYXJn
dW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5cGVk
ZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKIyAxMjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgcGx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf
VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv
bnN0IHsgcmV0dXJuIF9feCArIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj
dCBtaW51cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3Bl
cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f
eCAtIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDog
cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv
bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGRpdmlkZXMgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gs
IGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLyBfX3k7IH0KfTsKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbW9kdWx1cyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1Rw
LF9UcCxfVHA+CnsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBf
X3kpIGNvbnN0IHsgcmV0dXJuIF9feCAlIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+
CnN0cnVjdCBuZWdhdGUgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07CiMgMTcz
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVxdWFsX3RvIDogcHVi
bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPT0gX195OyB9
Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90byA6IHB1YmxpYyBi
aW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9U
cCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9IF9feTsgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGljIGJpbmFyeV9mdW5j
dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv
bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry
dWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4K
ewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0
IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
bGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1
cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf
VHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg
Y29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsb2dpY2FsX29yIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK
ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7
IHJldHVybiBfX3ggfHwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxv
Z2ljYWxfbm90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVy
YXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07CiMgMjcxICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1
bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0
ZQogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50
X3R5cGUsIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgog
IGV4cGxpY2l0IHVuYXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChf
X3gpIHt9CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3Vt
ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoK
CnRlbXBsYXRlIDxjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgdW5hcnlfbmVnYXRlPF9QcmVkaWNh
dGU+Cm5vdDEoY29uc3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0
ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNs
YXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1By
ZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVi
bGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUoY29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9N
X3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRl
OjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVu
YW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAg
cmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVk
aWNhdGU+CmlubGluZSBiaW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+Cm5vdDIoY29uc3QgX1ByZWRp
Y2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVk
KTsKfQojIDM0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uPgpjbGFz
cyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9u
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsK
ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6
CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlw
ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9f
eCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9w
ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgogIHR5cGVuYW1l
IF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBfT3BlcmF0aW9u
OjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AodmFsdWUs
IF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1RwPgpp
bmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlvbiYgX19m
biwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0
X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVyYXRpb24+
KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbj4K
Y2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJh
dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBv
cDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsKcHVi
bGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNvbnN0
IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kpCiAgICAgIDog
b3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBl
CiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9CgoKICB0eXBl
bmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09wZXJh
dGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194
LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3MgX1Rw
PgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYg
X19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNl
Y29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0
aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxh
dGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVu
Y3Rpb24gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6
CiAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1
bmN0aW9uKCkge30KICBleHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQg
KCpfX3gpKF9BcmcpKSA6IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9Bcmcg
X194KSBjb25zdCB7IHJldHVybiBfTV9wdHIoX194KTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
QXJnLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxfQXJn
LCBfUmVzdWx0PiBwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcpKQp7CiAgcmV0dXJuIHBvaW50
ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9f
YmluYXJ5X2Z1bmN0aW9uIDoKICBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9S
ZXN1bHQ+IHsKcHJvdGVjdGVkOgogICAgX1Jlc3VsdCAoKl9NX3B0cikoX0FyZzEsIF9BcmcyKTsK
cHVibGljOgogICAgcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oKSB7fQogICAgZXhwbGljaXQg
cG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb24oX1Jlc3VsdCAoKl9feCkoX0FyZzEsIF9BcmcyKSkK
ICAgICAgOiBfTV9wdHIoX194KSB7fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwg
X0FyZzIgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9
OwoKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJf
ZnVuKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19i
aW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBfSWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9U
cD4gewogIF9UcCYgb3BlcmF0b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAg
Y29uc3QgX1RwJiBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7
IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4Kc3RydWN0IF9TZWxlY3Qxc3QgOiBwdWJsaWMg
dW5hcnlfZnVuY3Rpb248X1BhaXIsIHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlPiB7CiAgdHlw
ZW5hbWUgX1BhaXI6OmZpcnN0X3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkgY29uc3Qgewog
ICAgcmV0dXJuIF9feC5maXJzdDsKICB9CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OmZpcnN0X3R5
cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5m
aXJzdDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0Mm5kIDog
cHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGU+
CnsKICB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5cGUmIG9wZXJhdG9yKCkoX1BhaXImIF9feCkg
Y29uc3QgewogICAgcmV0dXJuIF9feC5zZWNvbmQ7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWly
OjpzZWNvbmRfdHlwZSYgb3BlcmF0b3IoKShjb25zdCBfUGFpciYgX194KSBjb25zdCB7CiAgICBy
ZXR1cm4gX194LnNlY29uZDsKICB9Cn07CiMgNTI4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0
aW9uPF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29u
c3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIGNvbnN0X21l
bV9mdW5fdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25zdCBfVHAqLF9SZXQ+IHsKcHVibGlj
OgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6
IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3ApIGNvbnN0IHsg
cmV0dXJuIChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoKSBj
b25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVu
X3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBleHBs
aWNpdCBtZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog
IF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyByZXR1cm4gKF9fci4qX01fZikoKTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9S
ZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZf
dChfUmV0IChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJp
dmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBf
UmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu
MV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJh
dG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194
KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Qg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoK
ICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV90KF9SZXQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0
KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwKiBfX3AsIF9Bcmcg
X194KSBjb25zdAogICAgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBf
UmV0IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg
Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5h
cnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFf
cmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3Bl
cmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9f
eCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9y
ZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAg
ZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29u
c3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0Fy
ZyBfX3gpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0
IChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz
cyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9N
X2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9N
X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPGNvbnN0IF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt
X2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQg
b3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2
YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4KY2xhc3MgbWVtX2Z1bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u
PF9UcCx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6
Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29u
c3QgeyAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9U
cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0
IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9f
cGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9N
X2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBs
YXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3Q8dm9pZCwgX1RwLCBf
QXJnPiA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgog
IGV4cGxpY2l0IG1lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3Bm
KSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZv
aWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJn
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoq
X19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25z
dCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0
ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxp
Y2l0IG1lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikg
e30KICB2b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9N
X2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKTsKfTsKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2
b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+
IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9f
cGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg
X1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToK
ICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsKfTsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQg
KF9UcDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRl
bXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1Jl
dCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0
X21lbV9mdW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNz
IF9UcD4KaW5saW5lIG1lbV9mdW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9U
cDo6Kl9fZikoKSkKICB7IHJldHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZf
dDxfUmV0LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0
dXJuIGNvbnN0X21lbV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFz
cyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1Rw
LF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVu
MV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1l
bV9mdW4oX1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1f
ZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBt
ZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Jl
Zl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBf
VHAsIGNsYXNzIF9Bcmc+CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJn
PgptZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNv
bnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCgoKfQojIDUzICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMg
MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jh
c2ljX3N0cmluZy5oIiAxIDMKIyA0NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCgoKCm5hbWVzcGFjZSBzdGQKewoj
IDEwOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19zdHJpbmcKICAgIHsKCiAg
ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBfVHJhaXRzOjpjaGFyX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBf
QWxsb2MgYWxsb2NhdG9yX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6ZGlmZmVyZW5j
ZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnJl
ZmVyZW5jZSByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpjb25zdF9y
ZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6
cG9pbnRlciBwb2ludGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcG9p
bnRlciBjb25zdF9wb2ludGVyOwogICAgICB0eXBlZGVmIF9fZ251X2N4eDo6X19ub3JtYWxfaXRl
cmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfX2du
dV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIGJhc2ljX3N0cmluZz4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGNvbnN0
X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0eXBlZGVmIHN0ZDo6cmV2
ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgoj
IDE0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsKCiAgICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6b3RoZXIgX1Jhd19i
eXRlc19hbGxvYzsKIyAxNjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl
L2MrKy8zLjMvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXpl
X3R5cGUgX1NfbWF4X3NpemU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5h
bDsKCiAgICAgICAgc2l6ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2Fw
YWNpdHk7CiAgICAgICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wK
ICAgICAgICBfTV9pc19sZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5j
ZXMgPCAwOyB9CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAg
ICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBf
TV9zZXRfbGVha2VkKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2
b2lkCiAgICAgICAgX01fc2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAw
OyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAg
IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4odGhpcyArIDEpOyB9CgogICAgICAg
IF9DaGFyVCYKICAgICAgICBvcGVyYXRvcltdKHNpemVfdCBfX3MpIHRocm93KCkKICAgICAgICB7
IHJldHVybiBfTV9yZWZkYXRhKCkgW19fc107IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9N
X2dyYWIoY29uc3QgX0FsbG9jJiBfX2FsbG9jMSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jMikKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gKCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBf
X2FsbG9jMikKICAgICAgICAgICAgICAgICAgPyBfTV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2Fs
bG9jMSk7CiAgICAgICAgfQoKCiAgICAgICAgc3RhdGljIF9SZXAqCiAgICAgICAgX1NfY3JlYXRl
KHNpemVfdCwgY29uc3QgX0FsbG9jJik7CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kaXNwb3Nl
KGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9NX3JlZmVyZW5jZXMsIC0xKSA8PSAwKQogICAgICAgICAgICBfTV9kZXN0cm95KF9f
YSk7CiAgICAgICAgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01fZGVzdHJveShjb25zdCBfQWxs
b2MmKSB0aHJvdygpOwoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fcmVmY29weSgpIHRocm93
KCkKICAgICAgICB7CiAgICAgICAgICBfX2F0b21pY19hZGQoJl9NX3JlZmVyZW5jZXMsIDEpOwog
ICAgICAgICAgcmV0dXJuIF9NX3JlZmRhdGEoKTsKICAgICAgICB9CgogICAgICAgIF9DaGFyVCoK
ICAgICAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmLCBzaXplX3R5cGUgX19yZXMgPSAwKTsKICAg
ICAgfTsKCgogICAgICBzdHJ1Y3QgX0FsbG9jX2hpZGVyIDogX0FsbG9jCiAgICAgIHsKICAgICAg
ICBfQWxsb2NfaGlkZXIoX0NoYXJUKiBfX2RhdCwgY29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAg
OiBfQWxsb2MoX19hKSwgX01fcChfX2RhdCkgeyB9CgogICAgICAgIF9DaGFyVCogX01fcDsKICAg
ICAgfTsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgbnBvcyA9
IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oLTEpOwoKICAgIHByaXZhdGU6CgogICAgICBtdXRhYmxl
IF9BbGxvY19oaWRlciBfTV9kYXRhcGx1czsKCgoKICAgICAgc3RhdGljIHNpemVfdHlwZSBfU19l
bXB0eV9yZXBfc3RvcmFnZVsoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yo
c2l6ZV90eXBlKSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCiAgICAgIF9DaGFyVCoKICAgICAg
X01fZGF0YSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGFwbHVzLl9NX3A7IH0KCiAgICAg
IF9DaGFyVCoKICAgICAgX01fZGF0YShfQ2hhclQqIF9fcCkKICAgICAgeyByZXR1cm4gKF9NX2Rh
dGFwbHVzLl9NX3AgPSBfX3ApOyB9CgogICAgICBfUmVwKgogICAgICBfTV9yZXAoKSBjb25zdAog
ICAgICB7IHJldHVybiAmKChyZWludGVycHJldF9jYXN0PF9SZXAqPiAoX01fZGF0YSgpKSlbLTFd
KTsgfQoKCgogICAgICBpdGVyYXRvcgogICAgICBfTV9pYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBfTV9pZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAg
dm9pZAogICAgICBfTV9sZWFrKCkKICAgICAgewogICAgICAgIGlmICghX01fcmVwKCktPl9NX2lz
X2xlYWtlZCgpKQogICAgICAgICAgX01fbGVha19oYXJkKCk7CiAgICAgIH0KCiAgICAgIGl0ZXJh
dG9yCiAgICAgIF9NX2NoZWNrKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgICAgewogICAgICAg
IGlmIChfX3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6Ol9NX2NoZWNrIik7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsg
X19wb3M7CiAgICAgIH0KCgogICAgICBpdGVyYXRvcgogICAgICBfTV9mb2xkKHNpemVfdHlwZSBf
X3Bvcywgc2l6ZV90eXBlIF9fb2ZmKSBjb25zdAogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3Rv
ZmYgPSBfX29mZiA8IHRoaXMtPnNpemUoKSAtIF9fcG9zOwogICAgICAgIHNpemVfdHlwZSBfX25l
d29mZiA9IF9fdGVzdG9mZiA/IF9fb2ZmIDogdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAg
cmV0dXJuIChfTV9pYmVnaW4oKSArIF9fcG9zICsgX19uZXdvZmYpOwogICAgICB9CgoKCiAgICAg
IHRlbXBsYXRlPGNsYXNzIF9JdGVyYXRvcj4KICAgICAgICBzdGF0aWMgdm9pZAogICAgICAgIF9T
X2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9JdGVyYXRvciBfX2sxLCBfSXRlcmF0b3IgX19rMikK
ICAgICAgICB7CiAgICAgICAgICBmb3IgKDsgX19rMSAhPSBfX2syOyArK19fazEsICsrX19wKQog
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKCpfX3AsICpfX2sxKTsKICAgICAgICB9Cgog
ICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBpdGVyYXRv
ciBfX2sxLCBpdGVyYXRvciBfX2syKQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJh
c2UoKSwgX19rMi5iYXNlKCkpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2No
YXJzKF9DaGFyVCogX19wLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9pdGVyYXRvciBfX2sy
KQogICAgICB7IF9TX2NvcHlfY2hhcnMoX19wLCBfX2sxLmJhc2UoKSwgX19rMi5iYXNlKCkpOyB9
CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBfQ2hh
clQqIF9fazEsIF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9f
azEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfY29weV9jaGFy
cyhfQ2hhclQqIF9fcCwgY29uc3QgX0NoYXJUKiBfX2sxLCBjb25zdCBfQ2hhclQqIF9fazIpCiAg
ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBfX2sxLCBfX2syIC0gX19rMSk7IH0KCiAgICAg
IHZvaWQKICAgICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwg
c2l6ZV90eXBlIF9fbGVuMik7CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWtfaGFyZCgpOwoKICAg
ICAgc3RhdGljIF9SZXAmCiAgICAgIF9TX2VtcHR5X3JlcCgpCiAgICAgIHsgcmV0dXJuICpyZWlu
dGVycHJldF9jYXN0PF9SZXAqPigmX1NfZW1wdHlfcmVwX3N0b3JhZ2UpOyB9CgogICAgcHVibGlj
OgoKCgoKICAgICAgaW5saW5lCiAgICAgIGJhc2ljX3N0cmluZygpOwoKICAgICAgZXhwbGljaXQK
ICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9BbGxvYyYgX19hKTsKCgogICAgICBiYXNpY19zdHJp
bmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cik7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBz
aXplX3R5cGUgX19uID0gbnBvcyk7CiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsCiAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUg
X19uLCBjb25zdCBfQWxsb2MmIF9fYSk7CgogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJU
KiBfX3MsIHNpemVfdHlwZSBfX24sCiAgICAgICAgICAgICAgICAgICBjb25zdCBfQWxsb2MmIF9f
YSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBjb25z
dCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKICAgICAgYmFzaWNfc3RyaW5nKHNpemVfdHlwZSBf
X24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoKICAgICAgdGVt
cGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nKF9JbnB1dEl0
ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB+YmFzaWNfc3RyaW5nKCkKICAg
ICAgeyBfTV9yZXAoKS0+X01fZGlzcG9zZSh0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOyB9CgogICAg
ICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yPShjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zdHIpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg
ICAgIG9wZXJhdG9yPShjb25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9f
cyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KF9DaGFyVCBfX2MpIHsg
cmV0dXJuIHRoaXMtPmFzc2lnbigxLCBfX2MpOyB9CgoKICAgICAgaXRlcmF0b3IKICAgICAgYmVn
aW4oKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBpdGVyYXRvcihf
TV9kYXRhKCkpOwogICAgICB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0
ZXJhdG9yCiAgICAgIGVuZCgpCiAgICAgIHsKICAgICAgICAgX01fbGVhaygpOwogICAgICAgICBy
ZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsKICAgICAgfQoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRl
cmF0b3IoX01fZGF0YSgpICsgdGhpcy0+c2l6ZSgpKTsgfQoKICAgICAgcmV2ZXJzZV9pdGVyYXRv
cgogICAgICByYmVnaW4oKQogICAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVu
ZCgpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgICByYmVnaW4oKSBjb25z
dAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKHRoaXMtPmVuZCgpKTsgfQoK
ICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICByZW5kKCkKICAgICAgeyByZXR1cm4gcmV2ZXJz
ZV9pdGVyYXRvcih0aGlzLT5iZWdpbigpKTsgfQoKICAgICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cgogICAgICByZW5kKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRv
cih0aGlzLT5iZWdpbigpKTsgfQoKICAgIHB1YmxpYzoKCiAgICAgIHNpemVfdHlwZQogICAgICBz
aXplKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9sZW5ndGg7IH0K
CiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9SZXA6Ol9T
X21heF9zaXplOyB9CgogICAgICB2b2lkCiAgICAgIHJlc2l6ZShzaXplX3R5cGUgX19uLCBfQ2hh
clQgX19jKTsKCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24pIHsgdGhpcy0+
cmVzaXplKF9fbiwgX0NoYXJUKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgY2FwYWNpdHko
KSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fY2FwYWNpdHk7IH0KCiAgICAgIHZvaWQKICAg
ICAgcmVzZXJ2ZShzaXplX3R5cGUgX19yZXNfYXJnID0gMCk7CgogICAgICB2b2lkCiAgICAgIGNs
ZWFyKCkgeyBfTV9tdXRhdGUoMCwgdGhpcy0+c2l6ZSgpLCAwKTsgfQoKICAgICAgYm9vbAogICAg
ICBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIHRoaXMtPnNpemUoKSA9PSAwOyB9CgoKICAgICAgY29u
c3RfcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10gKHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg
ICAgeyByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9w
ZXJhdG9yW10oc2l6ZV90eXBlIF9fcG9zKQogICAgICB7CiAgICAgICAgX01fbGVhaygpOwogICAg
ICAgIHJldHVybiBfTV9kYXRhKClbX19wb3NdOwogICAgICB9CgogICAgICBjb25zdF9yZWZlcmVu
Y2UKICAgICAgYXQoc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgewogICAgICAgIGlmIChfX24g
Pj0gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0
cmluZzo6YXQiKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07CiAgICAgIH0KCiAgICAg
IHJlZmVyZW5jZQogICAgICBhdChzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgaWYgKF9f
biA+PSBzaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
OjphdCIpOwogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fbl07
CiAgICAgIH0KCgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgYmFz
aWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fc3RyKTsgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcis9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVy
biB0aGlzLT5hcHBlbmQoX19zKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRv
cis9KF9DaGFyVCBfX2MpIHsgcmV0dXJuIHRoaXMtPmFwcGVuZChzaXplX3R5cGUoMSksIF9fYyk7
IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYg
X19zdHIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3Ry
aW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKTsKCiAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKTsK
CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKGNvbnN0IF9DaGFyVCogX19zKQogICAg
ICB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChzaXplX3R5cGUgX19uLCBfQ2hhclQg
X19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2lj
X3N0cmluZyYKICAgICAgICBhcHBlbmQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBf
TV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZvaWQKICAgICAgcHVzaF9iYWNr
KF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9NX2llbmQoKSwg
MSwgX19jKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNf
c3RyaW5nJiBfX3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICAg
IHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAg
ICAgIGlmIChfX3BvcyA+IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl
KCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9f
biA8IF9fc3Ryc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld3NpemUg
PSBfX3Rlc3RuID8gX19uIDogX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgcmV0dXJuIHRoaXMt
PmFzc2lnbihfX3N0ci5fTV9kYXRhKCkgKyBfX3BvcywgX19uZXdzaXplKTsKICAgICAgfQoKICAg
ICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19uID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAg
ICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OmFzc2lnbiIpOwogICAgICAg
IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9f
cywgX01fZGF0YSgpKQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0
YSgpICsgdGhpcy0+c2l6ZSgpLCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2Fm
ZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICAgICAgZWxzZQog
ICAgICAgICAgewoKICAgICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcG9zID0gX19zIC0gX01f
ZGF0YSgpOwogICAgICAgICAgICBpZiAoX19wb3MgPj0gX19uKQogICAgICAgICAgICAgIHRyYWl0
c190eXBlOjpjb3B5KF9NX2RhdGEoKSwgX19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChf
X3BvcykKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9kYXRhKCksIF9fcywgX19u
KTsKICAgICAgICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbjsKICAgICAgICAgICAgX01f
ZGF0YSgpW19fbl0gPSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwogICAgICAgICAgfQogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihj
b25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgdHJhaXRz
X3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24o
c2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf
TV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBsYXRlPGNsYXNz
IF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBhc3NpZ24oX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsgcmV0
dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19maXJzdCwgX19sYXN0
KTsgfQoKICAgICAgdm9pZAogICAgICBpbnNlcnQoaXRlcmF0b3IgX19wLCBzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fbiwgX19jKTsg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgdm9pZCBpbnNl
cnQoaXRlcmF0b3IgX19wLCBfSW5wdXRJdGVyYXRvciBfX2JlZywgX0lucHV0SXRlcmF0b3IgX19l
bmQpCiAgICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX2JlZywgX19lbmQpOyB9Cgog
ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MxLCBf
X3N0ciwgMCwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNl
cnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwKICAgICAgICAg
ICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICAgIGlmIChfX3BvczIg
PiBfX3N0cnNpemUpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5n
OjppbnNlcnQiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4gPSBfX24gPCBfX3N0cnNpemUg
LSBfX3BvczI7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9IF9fdGVzdG4gPyBf
X24gOiBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAgICAgcmV0dXJuIHRoaXMtPmluc2VydChfX3Bv
czEsIF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zMiwgX19uZXdzaXplKTsKICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcywgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3Np
emUgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAg
X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6aW5zZXJ0Iik7CiAgICAgICAgaWYg
KF9fc2l6ZSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24pCiAgICAgICAgICBfX3Rocm93X2xlbmd0
aF9lcnJvcigiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAoX01fcmVwKCktPl9N
X2lzX3NoYXJlZCgpIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfX3MsIF9NX2RhdGEoKSkKICAg
ICAgICAgICAgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9NX2RhdGEoKSArIF9fc2l6ZSwgX19z
KSkKICAgICAgICAgIHJldHVybiBfTV9yZXBsYWNlX3NhZmUoX01faWJlZ2luKCkgKyBfX3Bvcywg
X01faWJlZ2luKCkgKyBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z
LCBfX3MgKyBfX24pOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgY29u
c3Qgc2l6ZV90eXBlIF9fb2ZmID0gX19zIC0gX01fZGF0YSgpOwogICAgICAgICAgICBfTV9tdXRh
dGUoX19wb3MsIDAsIF9fbik7CiAgICAgICAgICAgIF9fcyA9IF9NX2RhdGEoKSArIF9fb2ZmOwog
ICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9NX2RhdGEoKSArIF9fcG9zOwogICAgICAgICAgICBp
ZiAoX19zICsgX19uIDw9IF9fcCkKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3As
IF9fcywgX19uKTsKICAgICAgICAgICAgZWxzZSBpZiAoX19zID49IF9fcCkKICAgICAgICAgICAg
ICB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fcyArIF9fbiwgX19uKTsKICAgICAgICAgICAgZWxz
ZQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwg
X19zLCBfX3AgLSBfX3MpOwogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wICsg
KF9fcCAtIF9fcyksIF9fcCArIF9fbiwgX19uIC0gKF9fcCAtIF9fcykpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICAgICAgfQogICAgICAgfQoKICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq
IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf
dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRo
aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRo
aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D
aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9f
cCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNp
emVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg
ICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNp
Y19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g
PSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w
b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N
X2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo
aXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bv
c2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBf
X3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f
TV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9
CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf
X2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdp
bigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9N
X2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVy
biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0cikKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uLCBfX3N0ci5f
TV9kYXRhKCksIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVw
bGFjZShzaXplX3R5cGUgX19wb3MxLCBzaXplX3R5cGUgX19uMSwgY29uc3QgYmFzaWNfc3RyaW5n
JiBfX3N0ciwKICAgICAgICAgICAgICBzaXplX3R5cGUgX19wb3MyLCBzaXplX3R5cGUgX19uMik7
CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9f
bjIpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgp
OwogICAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3Jh
bmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAgICAgICBjb25zdCBib29sIF9fdGVzdG4x
ID0gX19uMSA8IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRu
MSA9IF9fdGVzdG4xID8gX19uMSA6IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgIGlmIChfX3NpemUg
LSBfX2ZvbGRuMSA+IHRoaXMtPm1heF9zaXplKCkgLSBfX24yKQogICAgICAgICAgX190aHJvd19s
ZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGlmIChfTV9yZXAo
KS0+X01faXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgp
KQogICAgICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXpl
LCBfX3MpKQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9f
cG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9pYmVnaW4oKSArIF9fcG9z
ICsgX19mb2xkbjEsIF9fcywgX19zICsgX19uMik7CgogICAgICAgIGVsc2UgcmV0dXJuCiAgICAg
ICAgICAgICAgIF9NX3JlcGxhY2UoX01faWJlZ2luKCkgKyBfX3BvcywgX01faWJlZ2luKCkgKyBf
X3BvcyArIF9fZm9sZG4xLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywgX19zICsgX19u
MiwKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8Y29u
c3QgX0NoYXJUKj46Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOwogICAgICB9CgogICAgICBiYXNpY19z
dHJpbmcmCiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29u
c3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MsIF9fbjEs
IF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgog
ICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVfdHlwZSBf
X24yLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9f
cG9zKSwgX01fZm9sZChfX3BvcywgX19uMSksIF9fbjIsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0
cmluZyYKICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEsIF9f
aTIsIF9fc3RyLl9NX2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5n
JgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgICB7
IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19pMiAtIF9faTEsIF9f
cywgX19uKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9f
aTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlz
LT5yZXBsYWNlKF9faTEsIF9faTIsIF9fcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoK
ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y
IF9faTIsIHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg
X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIHJlcGxhY2UoaXRl
cmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y
IF9fazEsIF9JbnB1dEl0ZXJhdG9yIF9fazIpCiAgICAgICAgeyByZXR1cm4gX01fcmVwbGFjZShf
X2kxLCBfX2kyLCBfX2sxLCBfX2syLAogICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7IH0KCgoKICAgICAgYmFz
aWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9D
aGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2Uo
X19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy
ZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IF9DaGFyVCogX19rMSwg
Y29uc3QgX0NoYXJUKiBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAt
IF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNl
KGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9f
azIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0gX01faWJlZ2luKCksIF9f
aTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19rMS5iYXNlKCksIF9f
azIgLSBfX2sxKTsKICAgICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo
aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3RfaXRlcmF0b3IgX19rMSwgY29uc3Rf
aXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9p
YmVnaW4oKSwgX19pMiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sx
LmJhc2UoKSwgX19rMiAtIF9fazEpOwogICAgICAgIH0KCiAgICBwcml2YXRlOgogICAgICB0ZW1w
bGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAg
X01fcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBfSW5wdXRJdGVyYXRvciBf
X2sxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19rMiwgaW5wdXRfaXRlcmF0
b3JfdGFnKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICAgICAg
YmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxhY2Vfc2FmZShpdGVyYXRvciBfX2kxLCBpdGVy
YXRvciBfX2kyLCBfRm9yd2FyZEl0ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRm9y
d2FyZEl0ZXJhdG9yIF9fazIpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAg
ICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVn
LCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAg
IHJldHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAg
fQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgog
ICAgICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29u
c3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAg
ICAgICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlw
ZT4oX19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1
ZV90eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lu
SXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVy
IF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBf
X2EsIF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBf
X2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRl
cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBf
X2JlZywgX0Z3ZEl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBf
U19jb25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9f
YSk7CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3Ms
IHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAog
ICAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoK
ICAgICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAg
c2l6ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWdu
KF9NX2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2Rh
dGEoKTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAg
ICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24p
IGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf
X3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+Zmlu
ZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3Ro
KF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5
cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBi
YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9
CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw
ZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZp
bmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg
X19wb3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29m
KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAg
ICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19z
dHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAg
ICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90
eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihf
X3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUK
ICAgICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5
cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw
ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihf
X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg
ICAgZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVf
dHlwZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25z
dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19z
KSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6
ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19j
LCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z
dCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0
ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAg
c2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9u
b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg
IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBl
OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9v
ZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlw
ZQogICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u
b3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90
eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf
X3BvcywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAg
c2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9u
b3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6
ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9z
ID0gbnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlw
ZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAg
aWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo
ImJhc2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhp
cywgX19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJh
c2ljX3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgp
OwogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAg
ICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCks
IF9fbGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3Np
emU7CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3Ry
KSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVf
dHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21w
YXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUo
c2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0
OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u
MSwgY29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0
OwogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZygpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2VtcHR5X3Jl
cCgpLl9NX3JlZmNvcHkoKSwgX0FsbG9jKCkpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5n
PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBf
X3N0ci5hcHBlbmQoX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
YmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBf
Q2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsX1Ry
YWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh
aXRzLF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmlu
ZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3Jocyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgIGNv
bnN0IF9DaGFyVCogX19yaHMpCiAgICB7CiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4gX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAg
ICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywgX0NoYXJUIF9fcmhzKQogICAgewogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl
X3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHIoX19saHMpOwogICAgICBfX3N0ci5hcHBl
bmQoX19zaXplX3R5cGUoMSksIF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo
cy5jb21wYXJlKF9fcmhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5j
b21wYXJlKF9fbGhzKSA9PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9y
PT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg
ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w
YXJlKF9fcmhzKSA9PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg
ICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf
X3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3Jo
cykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpICE9IDA7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpICE9IDA7IH0KCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s
aW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19y
aHMpIDwgMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAg
Y29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDwg
MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgX0NoYXJUKiBf
X2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf
QWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID4gMDsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19s
aHMuY29tcGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh
dG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywK
ICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29t
cGFyZShfX3JocykgPiAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihj
b25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh
clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShf
X2xocykgPCAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAg
ICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykK
ICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAg
IHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpIDw9IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I8PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBj
b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICB7IHJl
dHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+PSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29s
CiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv
Yz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49
IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19z
dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICAgY29u
c3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBhcmUoX19yaHMpID49IDA7
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt
ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBfQ2hhclQqIF9f
bGhzLAogICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA8PSAwOyB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp
dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+JiBfX3JocykKICAgIHsgX19saHMuc3dhcChfX3Jocyk7IH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywKICAgICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08
X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+JiBfX29zLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBf
VHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p
cywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19z
dHIsIF9DaGFyVCBfX2RlbGltKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mCiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYg
X19pcywKICAgICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYg
X19zdHIpOwp9CiMgNTQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvc3RyaW5nIiAyIDMKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvYWxnb3JpdGhtIiAxIDMKIyA2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9hbGdvcml0aG0iIDMKCgoKCiMgMSAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDEg
MwojIDY0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX2FsZ28uaCIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MyAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNl
IHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBl
bmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9f
aG9sZUluZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAg
IF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUg
KF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3Zh
bHVlKSB7CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19w
YXJlbnQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQg
PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xl
SW5kZXgpID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vz
c0l0ZXJhdG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRl
cmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6
dmFsdWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAg
ICAgICAgICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hlYXAo
X19maXJzdCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNl
VHlwZSgwKSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUg
X0Rpc3RhbmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog
ICAgdm9pZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9E
aXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4
LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19w
YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+
IF9fdG9wSW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsK
ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7
CiAgICAgICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hv
bGVJbmRleCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkg
PSBfX3ZhbHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAg
ICAgICAgIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz
PF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3Rh
bmNlVHlwZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5
cGUoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAg
ICAgICAgIF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0
eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVy
YXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcElu
ZGV4ID0gX19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9f
aG9sZUluZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAg
ICAgIGlmICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29u
ZENoaWxkIC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJz
dCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9f
aG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChf
X3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19s
ZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z
ZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAx
OwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcElu
ZGV4LCBfX3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1
ZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBf
RGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hl
YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k
b21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAK
CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVl
VHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9U
cCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3Rh
bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19z
ZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3Nl
Y29uZENoaWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAgICAg
X19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19m
aXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGls
ZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAg
IH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3Qg
KyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAg
ICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9o
ZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1l
IF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChf
UmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192
YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh
dG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3Rh
bmNlOwogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChfX2Zp
cnN0LCBfRGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAg
ICAgICAgICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
UmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQK
ICAgIHBvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAg
ICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJz
dCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19j
b21wKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgog
ICAgdm9pZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAg
ICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5
cGU7CgoKICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVy
bjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9E
aXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUp
IHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVl
VHlwZSgqKF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkg
cmV0dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu
ZSB2b2lkCiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl
bmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAoX19s
YXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9f
bGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAy
KS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3Qs
IF9fcGFyZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2Zp
cnN0ICsgX19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0
dXJuOwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAg
ewoKICAgICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAg
ICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAg
IHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg
IAoKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChf
X2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDIgMwojIDEg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
dGVtcGJ1Zi5oIiAxIDMKIyA2NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdGVt
cGJ1Zi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCBjbGFzcyBfVHA+CiAg
Y2xhc3MgX1RlbXBvcmFyeV9idWZmZXIKewoKIAoKICBwdHJkaWZmX3QgX01fb3JpZ2luYWxfbGVu
OwogIHB0cmRpZmZfdCBfTV9sZW47CiAgX1RwKiBfTV9idWZmZXI7CgoKICB2b2lkIF9NX2FsbG9j
YXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9NX2J1ZmZl
ciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBzaXplb2Yo
X1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgICB3aGls
ZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAq
IHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAg
X01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0
IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3Qg
X1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVm
ZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgoKICBwdHJkaWZmX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIF9NX2xlbjsgfQoKICBwdHJkaWZmX3QgcmVxdWVzdGVkX3NpemUoKSBjb25zdCB7
IHJldHVybiBfTV9vcmlnaW5hbF9sZW47IH0KCiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1
ZmZlcjsgfQoKICBfVHAqIGVuZCgpIHsgcmV0dXJuIF9NX2J1ZmZlciArIF9NX2xlbjsgfQoKICBf
VGVtcG9yYXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0
b3IgX19sYXN0KSB7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46Omhh
c190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3IKICAgICAgICAgICAgX1RyaXZpYWw7CgogICAg
dHJ5IHsKICAgICAgX01fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX01f
YWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9NX2luaXRp
YWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNoKC4uLikK
ICAgICAgewogICAgICAgIGZyZWUoX01fYnVmZmVyKTsKICAgICAgICBfTV9idWZmZXIgPSAwOwog
ICAgICAgIF9NX2xlbiA9IDA7CiAgICAgICAgdGhyb3c7CiAgICAgIH0KICB9CgogIH5fVGVtcG9y
YXJ5X2J1ZmZlcigpIHsKICAgIF9EZXN0cm95KF9NX2J1ZmZlciwgX01fYnVmZmVyICsgX01fbGVu
KTsKICAgIGZyZWUoX01fYnVmZmVyKTsKICB9Cgpwcml2YXRlOgoKICBfVGVtcG9yYXJ5X2J1ZmZl
cihjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9CiAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1Rl
bXBvcmFyeV9idWZmZXImKSB7fQp9OwoKfQojIDY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVzcGFjZSBz
dGQKewojIDg0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29u
c3QgX1RwJgogICAgX19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25z
dCBfVHAmIF9fYykKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYg
KF9fYiA8IF9fYykKICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwg
X19jKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4g
X19hOwogICAgICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAg
ZWxzZSBpZiAoX19iIDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg
ICByZXR1cm4gX19iOwogICAgfQojIDExOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIF9fbWVkaWFu
KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2MsIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2NvbXAoX19hLCBfX2IpKQogICAgICAg
IGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYjsKICAgICAgICBlbHNl
IGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNl
CiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQog
ICAgICAgIHJldHVybiBfX2E7CiAgICAgIGVsc2UgaWYgKF9fY29tcChfX2IsIF9fYykpCiAgICAg
ICAgcmV0dXJuIF9fYzsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfX2I7CiAgICB9CiMgMTUw
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9GdW5j
dGlvbj4KICAgIF9GdW5jdGlvbgogICAgZm9yX2VhY2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwgX0Z1bmN0aW9uIF9fZikKICAgIHsKCiAgICAgCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBfX2YoKl9fZmlyc3QpOwogICAg
ICByZXR1cm4gX19mOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIs
IHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIg
X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAg
ICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g
X19sYXN0ICYmICEoKl9fZmlyc3QgPT0gX192YWwpKQogICAgICAgICsrX19maXJzdDsKICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAgICBmaW5kX2lm
KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLAogICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAr
K19fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNz
SXRlcgogICAgZmluZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgIHJhbmRvbV9hY2Nl
c3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAo
X19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7
IC0tX190cmlwX2NvdW50KSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4g
X19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3Zh
bCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAgICAgICBpZiAoKl9fZmly
c3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAg
aWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7
CiAgICAgIH0KCiAgICAgIHN3aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoK
ICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsr
X19maXJzdDsKICAgICAgY2FzZSAyOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0
dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYg
KCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIGNhc2UgMDoKICAgICAgZGVmYXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu
YW1lIF9QcmVkaWNhdGU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgZmluZF9pZihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAg
IF9QcmVkaWNhdGUgX19wcmVkLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh
ZykKICAgIHsKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3VudAogICAgICAgID0gKF9fbGFzdCAtIF9fZmly
c3QpID4+IDI7CgogICAgICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3Vu
dCkgewogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAg
ICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJz
dDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1
cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmIChfX3ByZWQoKl9fZmly
c3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KCiAgICAgIHN3
aXRjaChfX2xhc3QgLSBfX2ZpcnN0KSB7CiAgICAgIGNhc2UgMzoKICAgICAgICBpZiAoX19wcmVk
KCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNl
IDI6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAg
ICsrX19maXJzdDsKICAgICAgY2FzZSAxOgogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy
ZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMDoKICAgICAgZGVm
YXVsdDoKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICB9CiAgICB9CiMgMjg5ICIvaG9tZS9i
YW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIg
MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu
ZSBfSW5wdXRJdGVyCiAgICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh
c3QsCiAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAg
cmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShf
X2ZpcnN0KSk7CiAgICB9CiMgMzA5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0lucHV0SXRlcgogICAgZmlu
ZF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICBf
UHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICByZXR1cm4gZmluZF9p
ZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7
CiAgICB9CiMgMzI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgYWRqYWNlbnRfZmluZChfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fbGFzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9f
bmV4dCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgICAg
IGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
ICAgX19maXJzdCA9IF9fbmV4dDsKICAgICAgfQogICAgICByZXR1cm4gX19sYXN0OwogICAgfQoj
IDM1OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l
IF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAg
ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9G
b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xh
c3QpIHsKICAgICAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAg
ICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAg
ICAgIHJldHVybiBfX2xhc3Q7CiAgICB9CiMgMzg3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudChfSW5wdXRJdGVyIF9fZmly
c3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAog
ICAgIAoKICAgICAKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojpk
aWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsg
KytfX2ZpcnN0KQogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbHVlKQogICAgICAgICAgKytf
X247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5
cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291bnRfaWYoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCiAg
ICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0
ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9f
bGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAgICAg
KytfX247CiAgICAgIHJldHVybiBfX247CiAgICB9CiMgNDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9y
d2FyZEl0ZXIxCiAgICBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVy
MSBfX2xhc3QxLAogICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRl
cjIgX19sYXN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJz
dDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2Zp
cnN0MTsKCgogICAgICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3Rt
cDsKICAgICAgaWYgKF9fdG1wID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJz
dDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19w
OwoKICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9f
Y3VycmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsK
ICAgICAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAg
ICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsK
CiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAg
ICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoK
ICAgICAgICB3aGlsZSAoKl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3Ag
PT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsr
X19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAg
IH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAg
ICB9CiMgNTIyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5
cGVuYW1lIF9Gb3J3YXJkSXRlcjIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkPgogICAgX0ZvcndhcmRJ
dGVyMQogICAgc2VhcmNoKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19s
YXN0MSwKICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgX0JpbmFyeVByZWQgX19wcmVkaWNhdGUpCiAgICB7CgogICAgIAog
ICAgIAogICAgIAoKCgoKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEgfHwgX19maXJzdDIg
PT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CgoKICAgICAgX0ZvcndhcmRJdGVy
MiBfX3RtcChfX2ZpcnN0Mik7CiAgICAgICsrX190bXA7CiAgICAgIGlmIChfX3RtcCA9PSBfX2xh
c3QyKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRl
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgcmV0
dXJuIF9fZmlyc3QxOwogICAgICB9CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoK
ICAgICAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3Vy
cmVudCA9IF9fZmlyc3QxOwoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAg
ICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgICAgICAgaWYgKF9fcHJlZGlj
YXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAr
K19fZmlyc3QxOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAm
JiAhX19wcmVkaWNhdGUoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xh
c3QxOwoKICAgICAgICBfX3AgPSBfX3AxOwogICAgICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog
ICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICAg
ICAgd2hpbGUgKF9fcHJlZGljYXRlKCpfX2N1cnJlbnQsICpfX3ApKSB7CiAgICAgICAgICBpZiAo
KytfX3AgPT0gX19sYXN0MikKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAg
aWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwog
ICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJz
dDE7CiAgICB9CiMgNTk2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0ludGVnZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAg
c2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQogICAgewoKICAgICAK
ICAgICAKCiAgICAgCgogICAgICBpZiAoX19jb3VudCA8PSAwKQogICAgICAgIHJldHVybiBfX2Zp
cnN0OwogICAgICBlbHNlIHsKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsKTsKICAgICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICAgIF9J
bnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgICAgICArK19faTsKICAgICAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYm
IF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAg
ICAgIC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAg
ICByZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19maXJzdCA9IGZp
bmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fbGFzdDsK
ICAgICAgfQogICAgfQojIDY0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2VyLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5h
bWUgX0JpbmFyeVByZWQ+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19j
b3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5
X3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAg
ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9
IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkK
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAg
IHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19j
b3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAg
ICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19i
aW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkpIHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAg
IC0tX19uOwogICAgICAgICAgfQogICAgICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICBy
ZXR1cm4gX19maXJzdDsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9
IF9fbGFzdCkgewogICAgICAgICAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkK
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9
CiAgICAgICAgICAgIF9fZmlyc3QgPSBfX2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAg
IHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyA2OTcgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIF9Gb3J3
YXJkSXRlcjIKICAgIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJk
SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCiAg
ICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdDEg
IT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpdGVyX3N3YXAoX19m
aXJzdDEsIF9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fZmlyc3QyOwogICAgfQojIDczMiAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRl
ciwgdHlwZW5hbWUgX1VuYXJ5T3BlcmF0aW9uPgogICAgX091dHB1dEl0ZXIKICAgIHRyYW5zZm9y
bShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LCBfVW5hcnlPcGVyYXRpb24gX191bmFyeV9vcCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwg
KytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSBfX3VuYXJ5X29wKCpfX2ZpcnN0KTsKICAg
ICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJ
dGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRl
cgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICBfQmluYXJ5T3BlcmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAg
ICAKICAgICAKICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19f
Zmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmlu
YXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAg
fQojIDc5NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVu
YW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0
IF9UcCYgX19uZXdfdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09
IF9fb2xkX3ZhbHVlKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4
MjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf
UHJlZGljYXRlLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlX2lmKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfUHJlZGlj
YXRlIF9fcHJlZCwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgog
ICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAg
ICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7
CiAgICB9CiMgODU2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5
cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVw
bGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgY29uc3QgX1Rw
JiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAg
CgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytf
X3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9f
bmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODgg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
YWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1
dEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX1RwPgogICAg
X091dHB1dEl0ZXIKICAgIHJlcGxhY2VfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAog
ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAmIF9fbmV3X3Zh
bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9
IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fcHJl
ZCgqX19maXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1
bHQ7CiAgICB9CiMgOTE4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl
ciwgdHlwZW5hbWUgX0dlbmVyYXRvcj4KICAgIHZvaWQKICAgIGdlbmVyYXRlKF9Gb3J3YXJkSXRl
ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9yIF9fZ2VuKQogICAgewoK
ICAgICAKICAgICAKCgogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgfQojIDk0MiAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9HZW5l
cmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0
LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAoKCgogICAgICBmb3Ig
KCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAgICAgICAgKl9fZmlyc3QgPSBfX2dlbigp
OwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5NjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1
dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0
IF9UcCYgX192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsg
X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoISgqX19maXJzdCA9PSBf
X3ZhbHVlKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgICAgICArK19f
cmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDEwMDMgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxn
by5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0
ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHlf
aWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAg
CiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgICAgICBpZiAoIV9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9
ICpfX2ZpcnN0OwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBf
X3Jlc3VsdDsKICAgIH0KIyAxMDM5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3
YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICByZW1vdmUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgY29uc3QgX1Rw
JiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgX19maXJzdCA9IGZp
bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJz
dCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHJl
bW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAg
ICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgX19m
aXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQpOwogICAgICBfRm9yd2FyZEl0
ZXIgX19pID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJz
dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigrK19faSwg
X19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBf
X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBvdXRw
dXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J
bnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0
ID0gX192YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYg
KCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgICAgIF9fdmFsdWUgPSAqX19maXJzdDsK
ICAgICAgICAgICorK19fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgICB9CiAgICAgIHJldHVybiAr
K19fcmVzdWx0OwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykKICAgIHsKCiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICB3aGlsZSAoKytf
X2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoISgqX19yZXN1bHQgPT0gKl9fZmlyc3QpKQog
ICAgICAgICAgKisrX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7
CiAgICB9CiMgMTE0NSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0
eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2Nv
cHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
IF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X091dHB1dEl0ZXI+OjppdGVyYXRvcl9j
YXRlZ29yeSBfSXRlclR5cGU7CgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBf
X3Jlc3VsdDsKICAgICAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX0l0ZXJUeXBlKCkpOwogICAgfQojIDExNzAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQ
cmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f
Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
LAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoK
ICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9f
dmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICAgICAgd2hpbGUg
KCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2JpbmFyeV9wcmVkKF9fdmFsdWUs
ICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAgICAgKisr
X19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAg
ICB9CiMgMTE5OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl
bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfRm9yd2Fy
ZEl0ZXIKICAgIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAg
IGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgoKICAgICAgKl9fcmVzdWx0ID0g
Kl9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgh
X19iaW5hcnlfcHJlZCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgKisrX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgcmV0dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTIzMiAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUg
X0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2Jp
bmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK
CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1
cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsCl9fcmVzdWx0LCBfX2JpbmFyeV9wcmVk
LCBfSXRlclR5cGUoKSk7CiAgICB9CiMgMTI2MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1ZShfRm9yd2FyZEl0ZXIg
X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAogICAgICAgICAK
CgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwogICAg
fQojIDEyOTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBl
bmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1bmlxdWUoX0Zvcndh
cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgX0JpbmFyeVBy
ZWRpY2F0ZSBfX2JpbmFyeV9wcmVkKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgX19maXJz
dCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9wcmVkKTsKICAgICAg
cmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5hcnlfcHJl
ZCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K
ICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlv
bmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAg
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFzdCkKICAgICAgICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIGl0ZXJf
c3dhcChfX2ZpcnN0KyssIF9fbGFzdCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yZXZlcnNlKF9SYW5kb21BY2Nlc3NJ
dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgICAgIHdoaWxl
IChfX2ZpcnN0IDwgX19sYXN0KQogICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9f
bGFzdCk7CiAgICB9CiMgMTM0OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmV2ZXJzZShfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgICAgIAoK
ICAgICAgICAgIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnko
X19maXJzdCkpOwogICAgfQojIDEzNzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAg
ICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFs
SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y
ZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpfX2xhc3Q7CiAgICAg
ICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CiMgMTM5
OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRXVjbGlkZWFuUmluZ0VsZW1lbnQ+CiAg
ICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQKICAgIF9fZ2NkKF9FdWNsaWRlYW5SaW5nRWxlbWVudCBf
X20sIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCiAgICB7CiAgICAgIHdoaWxlIChfX24gIT0g
MCkgewogICAgICAgIF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICAg
ICAgX19tID0gX19uOwogICAgICAgIF9fbiA9IF9fdDsKICAgICAgfQogICAgICByZXR1cm4gX19t
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIHZvaWQK
ICAgIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKChfX2ZpcnN0ID09IF9f
bWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICBf
Rm9yd2FyZEl0ZXIgX19maXJzdDIgPSBfX21pZGRsZTsKICAgICAgZG8gewogICAgICAgIHN3YXAo
Kl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
KQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAgICAgfSB3aGlsZSAoX19maXJzdDIg
IT0gX19sYXN0KTsKCiAgICAgIF9fZmlyc3QyID0gX19taWRkbGU7CgogICAgICB3aGlsZSAoX19m
aXJzdDIgIT0gX19sYXN0KSB7CiAgICAgICAgc3dhcCgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7
CiAgICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgICAgICBfX21pZGRsZSA9IF9f
Zmlyc3QyOwogICAgICAgIGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgICAgIF9f
Zmlyc3QyID0gX19taWRkbGU7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfQmlkaXJlY3Rpb25h
bEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJz
dCA9PSBfX21pZGRsZSkgfHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoK
ICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
X3RhZygpKTsKICAgICAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOwoKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19taWRkbGUgJiYgX19t
aWRkbGUgIT0gX19sYXN0KQogICAgICAgIHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7Cgog
ICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgICAgIF9fcmV2ZXJzZShfX21pZGRs
ZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZygpKTsKICAgICAgfQogICAgICBl
bHNlIHsKICAgICAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9uYWxf
aXRlcmF0b3JfdGFnKCkpOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICByYW5kb21fYWNj
ZXNzX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKChfX2ZpcnN0ID09IF9f
bWlkZGxlKSB8fCAoX19sYXN0ID09IF9fbWlkZGxlKSkKICAgICAgICByZXR1cm47CgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZl
cmVuY2VfdHlwZSBfRGlzdGFuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKICAgICAgX0Rp
c3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2sgPSBfX21p
ZGRsZSAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZSBfX2wgPSBfX24gLSBfX2s7CgogICAgICBp
ZiAoX19rID09IF9fbCkgewogICAgICAgIHN3YXBfcmFuZ2VzKF9fZmlyc3QsIF9fbWlkZGxlLCBf
X21pZGRsZSk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBfRGlzdGFuY2UgX19kID0g
X19nY2QoX19uLCBfX2spOwoKICAgICAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19k
OyBfX2krKykgewogICAgICAgIF9WYWx1ZVR5cGUgX190bXAgPSAqX19maXJzdDsKICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoKICAgICAgICBpZiAoX19rIDwgX19sKSB7
CiAgICAgICAgICBmb3IgKF9EaXN0YW5jZSBfX2ogPSAwOyBfX2ogPCBfX2wvX19kOyBfX2orKykg
ewogICAgICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAgICAgICAgICAgICpf
X3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAgICAg
fQoKICAgICAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAgICAgICAgX19wICs9IF9f
azsKICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGVsc2UgewogICAgICAgICAgZm9yIChf
RGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgICAg
ICBpZiAoX19wIDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAgICAgKl9fcCA9ICooX19wICsg
X19rKTsKICAgICAgICAgICAgICBfX3AgKz0gX19rOwogICAgICAgICAgICB9CgogICAgICAgICAg
ICAqX19wID0gKiAoX19wIC0gX19sKTsKICAgICAgICAgICAgX19wIC09IF9fbDsKICAgICAgICAg
IH0KICAgICAgICB9CgogICAgICAgICpfX3AgPSBfX3RtcDsKICAgICAgICArK19fZmlyc3Q7CiAg
ICAgIH0KICAgIH0KIyAxNTYxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlcj4KICAgIGlubGluZSB2b2lkCiAgICByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX21pZGRsZSwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjppdGVy
YXRvcl9jYXRlZ29yeSBfSXRlclR5cGU7CiAgICAgIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9JdGVyVHlwZSgpKTsKICAgIH0KIyAxNTg5ICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0
SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9PdXRwdXRJdGVy
IF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29weShfX2ZpcnN0
LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwogICAgfQojIDE2
MTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgaW5saW5lIF9E
aXN0YW5jZQogICAgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5jZSBfX24pCiAgICB7CgogICAgICBy
ZXR1cm4gbHJhbmQ0OCgpICUgX19uOwoKCgogICAgfQojIDE2MzQgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICBpbmxpbmUgdm9pZAogICAgcmFuZG9t
X3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KQogICAgewoKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsK
ICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9f
bGFzdDsgKytfX2kpCiAgICAgICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCArIF9fcmFuZG9tX251
bWJlcigoX19pIC0gX19maXJzdCkgKyAxKSk7CiAgICB9CiMgMTY2MCAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51bWJlckdl
bmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIF9SYW5k
b21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYgKF9fZmly
c3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0g
X19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dhcChfX2ks
IF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoKCgoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBf
Rm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmlyc3QpKQog
ICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIF9G
b3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0ICE9IF9f
bGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2FwKCpfX2Zp
cnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAgICByZXR1
cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25h
bEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIKICAgIF9f
cGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAg
ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsK
ICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAg
ICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmly
c3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAgICAgaWYg
KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg
IGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0OwogICAgICAg
ICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19s
YXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAg
IGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHBhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKICAg
IHsKCiAgICAgCiAgICAgCgoKICAgICAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFz
dCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QpKTsKICAgIH0KCgoKCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLCB0eXBl
bmFtZSBfRGlzdGFuY2U+CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9faW5wbGFjZV9zdGFibGVfcGFy
dGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xl
bikKICAgIHsKICAgICAgaWYgKF9fbGVuID09IDEpCiAgICAgICAgcmV0dXJuIF9fcHJlZCgqX19m
aXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBf
X2ZpcnN0OwogICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2xlbiAvIDIpOwogICAgICBfRm9yd2Fy
ZEl0ZXIgX19iZWdpbiA9IF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3QsIF9fbWlk
ZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX2xlbiAvIDIpOwogICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBfX2lucGxh
Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAy
KTsKICAgICAgcm90YXRlKF9fYmVnaW4sIF9fbWlkZGxlLCBfX2VuZCk7CiAgICAgIGFkdmFuY2Uo
X19iZWdpbiwgZGlzdGFuY2UoX19taWRkbGUsIF9fZW5kKSk7CiAgICAgIHJldHVybiBfX2JlZ2lu
OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg
X1BvaW50ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3Rh
bmNlPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoX0Zv
cndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAg
aWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1
bHQxID0gX19maXJzdDsKICAgICAgICBfUG9pbnRlciBfX3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAg
ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQogICAgICAgICAgaWYg
KF9fcHJlZCgqX19maXJzdCkpIHsKICAgICAgICAgICAgKl9fcmVzdWx0MSA9ICpfX2ZpcnN0Owog
ICAgICAgICAgICArK19fcmVzdWx0MTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAg
ICAgICAgICAqX19yZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgICAgICsrX19yZXN1bHQyOwog
ICAgICAgICAgfQogICAgICAgIGNvcHkoX19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsK
ICAgICAgICByZXR1cm4gX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9G
b3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwg
X19sZW4gLyAyKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19iZWdpbiA9IF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19lbmQgPSBf
X3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUoIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbiAtIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICByb3Rh
dGUoX19iZWdpbiwgX19taWRkbGUsIF9fZW5kKTsKICAgICAgICBhZHZhbmNlKF9fYmVnaW4sIGRp
c3RhbmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICAgIHJldHVybiBfX2JlZ2luOwogICAgICB9
CiAgICB9CiMgMTg0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIs
IHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHN0YWJsZV9wYXJ0aXRp
b24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCgogICAgICBp
ZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UK
ICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlw
ZTsKCiAgICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyLCBfVmFsdWVUeXBlPiBf
X2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAg
ICAgICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs
IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19idWYuc2l6ZSgpKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX19m
aXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX0Rpc3RhbmNlVHlwZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSk7CiAgICAgIH0K
ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5h
bWUgX1RwPgogICAgX1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf
UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1RwIF9fcGl2b3QpCiAgICB7CiAgICAgIHdoaWxlICh0cnVl
KSB7CiAgICAgICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgICAgICsrX19maXJz
dDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAg
ICAgICAgICAtLV9fbGFzdDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAg
ICAgIHJldHVybiBfX2ZpcnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNz
SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgd2hpbGUg
KHRydWUpIHsKICAgICAgICB3aGlsZSAoX19jb21wKCpfX2ZpcnN0LCBfX3Bpdm90KSkKICAgICAg
ICAgICsrX19maXJzdDsKICAgICAgICAtLV9fbGFzdDsKICAgICAgICB3aGlsZSAoX19jb21wKF9f
cGl2b3QsICpfX2xhc3QpKQogICAgICAgICAgLS1fX2xhc3Q7CiAgICAgICAgaWYgKCEoX19maXJz
dCA8IF9fbGFzdCkpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICBpdGVyX3N3YXAo
X19maXJzdCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxOTI5
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICBf
X3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwIF9f
dmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAgICAg
IC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9fbGFz
dCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0Owog
ICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K
ICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUgKF9f
Y29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgICAg
ICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9fbGFz
dCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp
cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0ID09
IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBfX2Zp
cnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFtZSBp
dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0gKl9f
aTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNrd2Fy
ZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsKICAg
ICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChf
X2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5k
b21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0aW9u
X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlmIChf
X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBf
X2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9f
dmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAgICAg
ICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpfX2Zp
cnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFyZGVk
X2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQKICAg
IF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7Cgog
ICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7
ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVUeXBl
KCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl
ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRfaW5z
ZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1YXJk
ZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9CgoK
CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBf
X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfTV90
aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBf
TV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3Qg
KyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9faW5z
ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBf
X2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19j
b21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkgewog
ICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9sZCwg
X19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX01f
dGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXplIF9f
bikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAxOyBf
X24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQKICAg
IF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vz
c0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0KQog
ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2Zp
cnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewog
ICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgICAg
IHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2Zp
cnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShf
X21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkp
KSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xpbWl0
KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX0Nv
bXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1Np
emUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1Zh
bHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7
CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9zb3J0
KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwogICAg
ICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSksCiAg
ICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xhc3Qs
IF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAgIH0K
ICAgIH0KIyAyMTY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ
dGVyPgogICAgaW5saW5lIHZvaWQKICAgIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0
ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsK
CgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgIF9f
aW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICog
Mik7CiAgICAgICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAg
ICB9CiAgICB9CiMgMjE5NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNj
ZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc29ydChfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJl
IF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog
ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9f
Zmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsIF9fY29tcCk7CiAgICAg
ICAgX19maW5hbF9pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAg
IH0KICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAg
ICB2b2lkCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz
dCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19m
aXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9
IF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkgLyAyOwogICAgICBfX2lucGxhY2Vfc3RhYmxl
X3NvcnQoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19t
aWRkbGUsIF9fbGFzdCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t
aWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUpOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFt
ZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFuZG9tQWNj
ZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19m
aXJzdCA8IDE1KSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f
Y29tcCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgICAgIF9faW5wbGFj
ZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgICAgX19pbnBsYWNl
X3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0
aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21w
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAg
dm9pZAogICAgX19tZXJnZV9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9S
YW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj
ZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSkKICAgIHsKICAgICAgX0Rp
c3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAgICB3aGlsZSAoX19sYXN0
IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1bHQgPSBtZXJnZShfX2Zp
cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAgICAgICAgICAg
ICAgICAgICAgX19yZXN1bHQpOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAg
fQoKICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBf
X3N0ZXBfc2l6ZSk7CiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwg
X19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0KTsKICAg
IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIxLCB0eXBlbmFtZSBfUmFu
ZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFtZSBf
Q29tcGFyZT4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy
MSBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIF9EaXN0YW5j
ZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPj0gX190d29fc3RlcCkgewogICAgICAgIF9fcmVzdWx0ID0gbWVyZ2UoX19maXJzdCwg
X19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr
IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBf
X2ZpcnN0ICs9IF9fdHdvX3N0ZXA7CiAgICAgIH0KICAgICAgX19zdGVwX3NpemUgPSBtaW4oX0Rp
c3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogICAgICBtZXJnZShfX2Zp
cnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwgX19sYXN0LAogICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgX19jb21wKTsK
ICAgIH0KCiAgZW51bSB7IF9NX2NodW5rX3NpemUgPSA3IH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX2No
dW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1
bmtfc2l6ZSkKICAgIHsKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19z
aXplKSB7CiAgICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVu
a19zaXplKTsKICAgICAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICAgICAgfQogICAgICBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgdm9pZAogICAgX19jaHVua19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9EaXN0YW5jZSBfX2NodW5rX3NpemUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICAgICAgX19p
bnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19jaHVua19zaXplLCBfX2NvbXApOwog
ICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19zaXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBfX21l
cmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9f
YnVmZmVyKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu
ZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFu
Y2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0
ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2No
dW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBf
X3N0ZXBfc2l6ZSk7CgogICAgICB3aGlsZSAoX19zdGVwX3NpemUgPCBfX2xlbikgewogICAgICAg
IF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXpl
KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9f
YnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSk7CiAgICAgICAgX19z
dGVwX3NpemUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t
QWNjZXNzSXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p
ZAogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
UG9pbnRlciBfX2J1ZmZlciwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5
cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlw
ZSBfRGlzdGFuY2U7CgogICAgICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0Owog
ICAgICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsKCiAgICAgIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9NX2NodW5rX3NpemU7CiAgICAgIF9fY2h1bmtfaW5zZXJ0
aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAgICAgIHdo
aWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19m
aXJzdCwgX19sYXN0LCBfX2J1ZmZlciwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19z
dGVwX3NpemUgKj0gMjsKICAgICAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZm
ZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19zdGVwX3Np
emUgKj0gMjsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIHZvaWQKICAg
IF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf
X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBf
X2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX21pZGRsZSA9IF9fZmlyc3QgKyBfX2xlbjsKICAgICAgaWYgKF9fbGVuID4gX19idWZmZXJf
c2l6ZSkgewogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUs
IF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICBfX3N0YWJsZV9zb3J0X2FkYXB0aXZl
KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgfQogICAg
ICBlbHNlIHsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRk
bGUsIF9fYnVmZmVyKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUs
IF9fbGFzdCwgX19idWZmZXIpOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz
SXRlciwgdHlwZW5hbWUgX1BvaW50ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwKICAgICAgICAgICB0
eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVy
X3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsK
ICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgICAg
IF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBpZiAo
X19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShf
X2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUo
X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9f
bWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fY29t
cCk7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fbWlkZGxlLCBfX2xhc3QsIF9f
YnVmZmVyLCBfX2NvbXApOwogICAgICB9CiAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9f
YnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIH0KIyAyNDMw
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s
aW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9f
bGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFi
bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29y
dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1
Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9S
YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lkCiAgICBz
dGFibGVfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg
ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6
ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgX1Rl
bXBvcmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9WYWx1ZVR5cGU+IGJ1ZihfX2ZpcnN0
LCBfX2xhc3QpOwogICAgICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgICAgICBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICBlbHNlCiAgICAgICAg
X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlz
dGFuY2VUeXBlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIH0KIyAyNTAyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B
Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f
Zmlyc3QsCiAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQogICAgewogICAgICB0eXBlZGVm
IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg
X1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAgIG1ha2VfaGVhcChfX2ZpcnN0LCBfX21p
ZGRsZSk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8
IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKCpfX2kgPCAqX19maXJzdCkKICAgICAgICAgIF9f
cG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1ZhbHVlVHlwZSgqX19pKSk7CiAgICAg
IHNvcnRfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICB9CiMgMjU0MCAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAg
ICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj
ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBt
YWtlX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYg
KF9fY29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f
bWlkZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChf
X2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAg
X1JhbmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fcmVzdWx0X2xhc3QpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90
eXBlIF9PdXRwdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoK
ICAgICAKICAgICAKICAgICAKICAgICAKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jl
c3VsdF9sYXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3Qg
IT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAg
ICAgKl9fcmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVh
bF9sYXN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1
bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9maXJzdCkKICAgICAgICAg
IF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAg
ICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1
bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5cGUoKl9fZmly
c3QpKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0
X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QpOwogICAgICByZXR1cm4gX19yZXN1bHRfcmVhbF9s
YXN0OwogICAgfQojIDI2MzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl
ciwgdHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIKICAgIHBhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg
X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+Ojp2
YWx1ZV90eXBlIF9JbnB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9PdXRwdXRWYWx1ZVR5cGU7
CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKICAg
ICAKCgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9f
cmVzdWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9
IF9fcmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3Vs
dF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xh
c3QgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19f
Zmlyc3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9y
ZWFsX2xhc3QsIF9fY29tcCk7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAg
ICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdF9maXJzdCkpCiAgICAgICAgICBfX2Fk
anVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2Zp
cnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICArK19fZmlyc3Q7CiAgICAg
IH0KICAgICAgc29ydF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9f
Y29tcCk7CiAgICAgIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICB9CiMgMjY4NiAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAg
IG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBf
UmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh
bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAg
ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigq
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAg
ICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAg
IGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl
PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQK
ICAgIG50aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK
ICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz
c0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCgogICAgICB3aGls
ZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1
dCA9CiAgICAgICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoX19tZWRpYW4oKl9fZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f
Zmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKSksCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICBpZiAoX19jdXQgPD0gX19udGgp
CiAgICAgICAgICBfX2ZpcnN0ID0gX19jdXQ7CiAgICAgICAgZWxzZQogICAgICAgICAgX19sYXN0
ID0gX19jdXQ7CiAgICAgIH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs
IF9fY29tcCk7CiAgICB9CiMgMjc2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9y
d2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9Gb3J3YXJkSXRlcgogICAgbG93ZXJfYm91bmQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192
YWwpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJk
SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7
CgoKCgoKCiAgICAgCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlz
dGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAg
ICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg
ICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmICgqX19taWRkbGUgPCBfX3Zh
bCkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2ZpcnN0Owog
ICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAgICAgIGVs
c2UKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgfQojIDI4MTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy
LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBs
b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVf
dHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf
Rm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAg
IAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7
CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7
CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsK
ICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19o
YWxmKTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBf
X2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9
IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19s
ZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9h
bGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4K
ICAgIF9Gb3J3YXJkSXRlcgogICAgdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G
b3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CiAgICAgIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVl
VHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
Pjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKCiAgICAgCiAgICAgCiAgICAgCgog
ICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAg
ICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAg
ICAgIHdoaWxlIChfX2xlbiA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAg
ICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYp
OwogICAgICAgIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxm
OwogICAgICAgIGVsc2UgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAg
KytfX2ZpcnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAg
fQogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgfQojIDI5MDEgIi9ob21lL2Jhbmdl
cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19m
aXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192
YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv
cl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xl
biA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxm
OwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7
CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7
CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX19jb21wKF9f
dmFsLCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAg
ICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgIH0KICAgICAg
cmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjk0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y
d2FyZEl0ZXI+CiAgICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZm
ZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9E
aXN0YW5jZVR5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlz
dGFuY2VUeXBlIF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9f
cmlnaHQ7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4g
Pj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRs
ZSwgX19oYWxmKTsKICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9f
Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0g
X19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpf
X21pZGRsZSkKICAgICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAg
ICAgIGFkdmFuY2UoX19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2Jv
dW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAg
ICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJz
dCwgX19maXJzdCk7CiAgICB9CiMgMzAwMyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Rm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBwYWlyPF9G
b3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgogICAgZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6ZGlmZmVyZW5jZV90
eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5
cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBl
IF9faGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7Cgog
ICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAg
ICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxm
KTsKICAgICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2Zp
cnN0ID0gX19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9f
bGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fdmFs
LCAqX19taWRkbGUpKQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgICAgZWxzZSB7CiAg
ICAgICAgICBfX2xlZnQgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgX192YWwsIF9f
Y29tcCk7CiAgICAgICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsKICAgICAgICAgIF9fcmln
aHQgPSB1cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCwgX19jb21wKTsKICAg
ICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9f
cmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs
IF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7CiAgICB9CiMgMzA1MiAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdvLmgiIDMK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGJvb2wK
ICAgIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgoKICAgICAKICAg
ICAKCiAgICAgCgogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwg
X19sYXN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBfX2kgIT0gX19sYXN0ICYmICEoX192YWwgPCAq
X19pKTsKICAgIH0KIyAzMDgzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJk
SXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFy
eV9zZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAg
ICAgCiAgICAgCgogICAgIAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFz
dCAmJiAhX19jb21wKF9fdmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs
YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUg
X091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgbWVyZ2UoX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAg
ewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJz
dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAg
ICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19y
ZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0KICAgICAg
ICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3Qy
LCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQojIDMxNjYgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYWxnby5o
IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIy
LCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAg
IF9PdXRwdXRJdGVyCiAgICBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg
X19sYXN0MSwKICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xh
c3QyLAogICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAg
IHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2Zp
cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19j
b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAg
IH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3Qy
LCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKCgoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0Rpc3Rh
bmNlPgogICAgdm9pZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlz
dGFuY2UgX19sZW4yKQogICAgewogICAgICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDAp
CiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgICAg
ICBpZiAoKl9fbWlkZGxlIDwgKl9fZmlyc3QpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmly
c3QsIF9fbWlkZGxlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
c2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAg
ICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9f
bGVuMTEpOwogICAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xh
c3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf
X3NlY29uZF9jdXQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbGVuMjIgPSBfX2xl
bjIgLyAyOwogICAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICBf
X2ZpcnN0X2N1dCA9IHVwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0
KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg
ICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAg
YWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsK
ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf
bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIpOwog
ICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4xMSwgX19s
ZW4yIC0gX19sZW4yMik7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0
aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p
ZAogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4y
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAg
IGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGlm
IChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAgICAgIGlmIChfX2NvbXAoKl9fbWlkZGxlLCAq
X19maXJzdCkpCiAgICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAg
ICAgICByZXR1cm47CiAgICAgIH0KICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0
ID0gX19maXJzdDsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlk
ZGxlOwogICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjIy
ID0gMDsKICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewogICAgICAgIF9fbGVuMTEgPSBfX2xl
bjEgLyAyOwogICAgICAgIGFkdmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICAgIF9f
c2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwg
X19jb21wKTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1
dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAg
ICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgIF9fZmlyc3RfY3V0
ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7
CiAgICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAg
fQogICAgICByb3RhdGUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpOwogICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0gX19maXJzdF9jdXQ7CiAgICAgIGFk
dmFuY2UoX19uZXdfbWlkZGxlLCBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0KSk7CiAg
ICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21p
ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyLCBfX2Nv
bXApOwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRf
Y3V0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xIC0gX19sZW4x
MSwgX19sZW4yIC0gX19sZW4yMiwgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAog
ICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEKICAg
IF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19taWRkbGUsCiAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19i
dWZmZXJfZW5kOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yICYmIF9fbGVuMiA8PSBfX2J1ZmZl
cl9zaXplKSB7CiAgICAgICAgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0LCBf
X2J1ZmZlcik7CiAgICAgICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0
KTsKICAgICAgICByZXR1cm4gY29weShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2ZpcnN0KTsK
ICAgICAgfQogICAgICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAg
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAg
ICBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QpOwogICAgICAgIHJldHVybiBjb3B5X2Jh
Y2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxz
ZSB7CiAgICAgICAgcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QpOwogICAgICAgIGFk
dmFuY2UoX19maXJzdCwgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCkpOwogICAgICAgIHJldHVy
biBfX2ZpcnN0OwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly
ZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0
eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMwogICAg
X19tZXJnZV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rp
b25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkKICAgIHsKICAgICAgaWYgKF9fZmly
c3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9f
bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAg
LS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAg
aWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgICAgICotLV9fcmVzdWx0ID0gKl9fbGFz
dDE7CiAgICAgICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJu
IGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAgICAg
LS1fX2xhc3QxOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICotLV9fcmVzdWx0
ID0gKl9fbGFzdDI7CiAgICAgICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAgICAg
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog
ICAgICAgICAgLS1fX2xhc3QyOwogICAgICAgIH0KICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs
SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMywgdHlwZW5hbWUg
X0NvbXBhcmU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAgICBfX21lcmdlX2JhY2t3YXJkKF9C
aWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAg
ICB7CiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBjb3B5X2Jh
Y2t3YXJkKF9fZmlyc3QyLCBfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx
LCBfX3Jlc3VsdCk7CiAgICAgIC0tX19sYXN0MTsKICAgICAgLS1fX2xhc3QyOwogICAgICB3aGls
ZSAodHJ1ZSkgewogICAgICAgIGlmIChfX2NvbXAoKl9fbGFzdDIsICpfX2xhc3QxKSkgewogICAg
ICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBf
X2xhc3QxKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xh
c3QyLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVs
c2UgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2Zp
cnN0MiA9PSBfX2xhc3QyKQogICAgICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0
MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQog
ICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVy
LCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5cGVuYW1lIF9Qb2ludGVyPgogICAgdm9pZAogICAgX19t
ZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg
ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Ug
X19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9pbnRlciBf
X2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgICAgICBpZiAoX19s
ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBf
UG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7
CiAgICAgICAgICAgIG1lcmdlKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xh
c3QsIF9fZmlyc3QpOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9f
YnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShf
X21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQo
X19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9f
Zmlyc3RfY3V0ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vj
b25kX2N1dCA9IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAg
ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+
IF9fbGVuMikgewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAg
ICAgICAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAg
ICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0
X2N1dCk7CiAgICAgICAgICAgICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19z
ZWNvbmRfY3V0KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAg
ICAgICAgX19sZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgICAgICAgICAgICAgIGFkdmFuY2UoX19z
ZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgICAgICAgICAgICAgX19maXJzdF9jdXQgPSB1cHBl
cl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICAgICAgICAgICAg
ICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAgICAgICAgICAg
IH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgICAg
ICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNv
bmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl
bjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwg
X19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9f
bWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4x
IC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIy
LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICB9CiAgICB9CgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlzdGFuY2UsIHR5
cGVuYW1lIF9Qb2ludGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAog
ICAgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfUG9p
bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsCiAgICAgICAgICAgICAgICAg
ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgICAgIGlmIChfX2xlbjEgPD0gX19sZW4y
ICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm
ZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgICAgICAgICAg
bWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCwg
X19jb21wKTsKICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZl
cl9zaXplKSB7CiAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRk
bGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgICAgICAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgICB9CiAg
ICAgICAgICBlbHNlIHsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0
ID0gX19maXJzdDsKICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9
IF9fbWlkZGxlOwogICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xMSA9IDA7CiAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgICAgICAgICAgaWYgKF9fbGVuMSA+IF9fbGVuMikg
ewogICAgICAgICAgICAgICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgICAgICAgICAg
ICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAgICAgICAgICAgIF9fc2Vj
b25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3QsICpfX2ZpcnN0X2N1dCwgX19j
b21wKTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX3Nl
Y29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAg
ICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShfX3Nl
Y29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVwcGVy
X2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0LCBfX2NvbXApOwogICAgICAg
ICAgICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg
ICAgICAgICB9CiAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQog
ICAgICAgICAgICAgICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUs
IF9fc2Vjb25kX2N1dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4x
IC0gX19sZW4xMSwgX19sZW4yMiwgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fYnVmZmVyX3NpemUpOwogICAgICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9f
Zmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUsIF9fY29tcCk7
CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs
IF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgICAg
ICAgIH0KICAgIH0KIyAzNTA4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj
dGlvbmFsSXRlcj4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVy
IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwK
ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFs
dWVfdHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy
YXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg
ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19t
aWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0
YW5jZVR5cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlz
dGFuY2VUeXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1Rl
bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2Zp
cnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVy
Z2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl
bjIpOwogICAgICBlbHNlCiAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVm
LmJlZ2luKCksIF9EaXN0YW5jZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9hbGdv
LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9D
b21wYXJlPgogICAgdm9pZAogICAgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcj46OnZhbHVlX3R5cGUKICAgICAgICAgIF9WYWx1ZVR5
cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFs
SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAoK
ICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSB8fCBfX21pZGRsZSA9PSBfX2xh
c3QpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbjEgPSBkaXN0YW5j
ZShfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4yID0gZGlzdGFu
Y2UoX19taWRkbGUsIF9fbGFzdCk7CgogICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rp
b25hbEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIGlmIChf
X2J1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0
LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICAgICAgZWxzZQog
ICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4x
LCBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFu
Y2VUeXBlKF9fYnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwog
ICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w
dXRJdGVyMj4KICAgIGJvb2wKICAgIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1
dEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg
ICBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
ICAgIGVsc2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICAgICAgcmV0
dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s
CiAgICBpbmNsdWRlcyhfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLCBf
Q29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCiAgICAgCgoKCiAgICAg
IHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAg
ICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICBlbHNlCiAgICAgICAgICArK19fZmlyc3QxLCArK19fZmly
c3QyOwoKICAgICAgcmV0dXJuIF9fZmlyc3QyID09IF9fbGFzdDI7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVyMiwgdHlwZW5hbWUgX091
dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X3VuaW9uKF9JbnB1dEl0ZXIxIF9fZmly
c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly
c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz
dWx0KQogICAgewoKICAgICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICAgICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmly
c3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9f
Zmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAg
ICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICpf
X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19fcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVy
biBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3Vs
dCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu
cHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg
X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg
X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikgewogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIH0K
ICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAg
ICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0K
ICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAg
ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICArK19f
cmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5
KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy
PgogICAgX091dHB1dEl0ZXIKICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJz
dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy
IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0
cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICArK19f
Zmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwog
ICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19f
cmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9P
dXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIK
ICAgIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f
bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ
dGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwg
X0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAK
CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0
MikKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICAgICsr
X19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkK
ICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQg
PSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsK
ICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJdGVy
MiwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAgc2V0X2RpZmZlcmVu
Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg
ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKICAg
ICAKCiAgICAgCgoKICAgICAKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBf
X2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsK
ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg
ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmICgqX19maXJzdDIg
PCAqX19maXJzdDEpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAg
ICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1
cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRw
dXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAg
IHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3Qx
LAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f
bGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUg
X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg
ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0
ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7
CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp
CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0
MTsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp
cnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAg
X091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2Zp
cnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
SW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAg
ICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYg
X19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7
CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwog
ICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICAg
ICArK19fZmlyc3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAgZWxz
ZSB7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9
CiAgICAgIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xh
c3QxLCBfX3Jlc3VsdCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg
dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5
cGVuYW1lIF9Db21wYXJlPgogICAgX091dHB1dEl0ZXIKICAgIHNldF9zeW1tZXRyaWNfZGlmZmVy
ZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAg
IAogICAgIAogICAgIAoKCiAgICAgCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0g
X19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmly
c3QxLCAqX19maXJzdDIpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg
ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg
ZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1
bHQ7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAg
ICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19s
YXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxl
bWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAg
ICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsK
ICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19m
aXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAgICAg
ICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9y
d2FyZEl0ZXIKICAgIG1heF9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAK
ICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgd2hpbGUgKCsrX19maXJz
dCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKF9fY29tcCgqX19yZXN1bHQsICpfX2ZpcnN0KSkgX19y
ZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAog
ICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3Qg
IT0gX19sYXN0KQogICAgICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdCkKICAgICAgICAgIF9f
cmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJ
dGVyCiAgICBtaW5fZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAg
CgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9G
b3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0g
X19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jlc3VsdCkpCiAgICAgICAg
ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgogICAgYm9vbAogICAgbmV4dF9w
ZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVy
IF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9f
Zmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzsp
IHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsK
ICAgICAgICBpZiAoKl9faSA8ICpfX2lpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKl9faSA8ICotLV9faikpCiAgICAgICAg
ICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2ZXJzZShf
X2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIGlm
IChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwog
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9v
bAogICAgbmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7
CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7CgogICAgICBmb3IoOzspIHsKICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAgICAgICAtLV9faTsKICAgICAg
ICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVy
IF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21wKCpfX2ksICotLV9faikpCiAg
ICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICAgICAgcmV2
ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAg
ICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICBib29sCiAgICBwcmV2X3Bl
cm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19sYXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp
CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19m
aXJzdDsKICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7Oykg
ewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwog
ICAgICAgIGlmICgqX19paSA8ICpfX2kpIHsKICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICAg
ICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZlcnNlKF9f
aWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYg
KF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBib29s
CiAgICBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsK
ICAgICAgKytfX2k7CiAgICAgIGlmIChfX2kgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgX19pID0gX19sYXN0OwogICAgICAtLV9faTsKCiAgICAgIGZvcig7OykgewogICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgICAgIC0tX19pOwogICAgICAg
IGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCFfX2NvbXAoKi0tX19qLCAqX19pKSkKICAg
ICAgICAgICAge30KICAgICAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAgICAgICByZXZl
cnNlKF9faWksIF9fbGFzdCk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAg
ICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFz
dCk7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg
X0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2Fy
ZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAg
ICAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICAgICAgcmV0dXJuIF9fZmly
c3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
cHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgX0lucHV0SXRlcgogICAgZmluZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBf
SW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3Ig
KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpCiAgICAgICAgZm9yIChfRm9yd2Fy
ZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAg
ICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19pdGVyKSkKICAgICAgICAgICAgcmV0dXJu
IF9fZmlyc3QxOwogICAgICByZXR1cm4gX19sYXN0MTsKICAgIH0KIyA0MjAxICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2FsZ28uaCIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+
CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEs
IF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2Zp
cnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJh
dG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0MiA9
PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBf
Rm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsKICAgICAgICB3aGlsZSAoMSkgewogICAg
ICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICAgICAgPSBzZWFyY2goX19m
aXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKICAgICAgICAgIGlmIChfX25ld19y
ZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAg
ZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBf
X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg
IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ
dGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5
UHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyMQogICAgX19maW5kX2VuZChfRm9yd2FyZEl0ZXIx
IF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9Gb3J3YXJk
SXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgZm9y
d2FyZF9pdGVyYXRvcl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBf
QmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFz
dDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJk
SXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAgICAgICBf
Rm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwg
X19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgICAgICBpZiAoX19uZXdf
cmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAg
X19maXJzdDEgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAg
ICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl
Y3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyPgogICAgX0JpZGlyZWN0
aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBf
QmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg
ICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFn
KQogICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlk
aXJlY3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRv
cjxfQmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFz
dDEoX19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBf
UmV2SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBf
X3JsYXN0Mik7CgogICAgICBpZiAoX19ycmVzdWx0ID09IF9fcmxhc3QxKQogICAgICAgIHJldHVy
biBfX2xhc3QxOwogICAgICBlbHNlIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcmVz
dWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgICAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFu
Y2UoX19maXJzdDIsIF9fbGFzdDIpKTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0K
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUg
X0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRl
PgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQogICAgX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0
ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0
MiwKICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9u
YWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK
ICAgIHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGly
ZWN0aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8
X0JpZGlyZWN0aW9uYWxJdGVyMj4gX1Jldkl0ZXIyOwoKICAgICAgX1Jldkl0ZXIxIF9fcmxhc3Qx
KF9fZmlyc3QxKTsKICAgICAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICAgICAgX1Jl
dkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChfUmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19y
bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKCiAgICAg
IGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAg
IGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1bHQgPSBfX3JyZXN1bHQu
YmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5jZShfX2ZpcnN0MiwgX19s
YXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQogICAgfQoKCgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBp
bmxpbmUgX0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg
X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0
MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAg
ICAgcmV0dXJuIF9fZmluZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3Qy
LAogICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QxKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2Fy
ZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBpbmxpbmUg
X0ZvcndhcmRJdGVyMQogICAgZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0Zvcndh
cmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zv
cndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICByZXR1cm4gX19maW5kX2VuZChfX2Zp
cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAgICAgICBf
X2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSwKICAgICAgICAgICAgICAgICAgICAgICAgX19j
b21wKTsKICAgIH0KCn0KIyA3MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9hbGdvcml0aG0iIDIgMwojIDU3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmluZyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEgMwoj
IDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv
YmFzaWNfc3RyaW5nLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjb25zdCB0eXBl
bmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAg
IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfbWF4
X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0NoYXJUKSkgLSAxKSAvIDQ7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgY29uc3QgX0NoYXJUCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX3Rlcm1pbmFsID0gX0NoYXJUKCk7CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg
Y29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6
ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpf
U19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSAr
IHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgogICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRl
ciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAg
ICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAgIHsKICAgICAgICBpZiAoX19iZWcgPT0gX19l
bmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9N
X3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9fYnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBl
IF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihf
X2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgIHsKICAgICAgICAgICAgX19idWZbX19p
KytdID0gKl9fYmVnOwogICAgICAgICAgICArK19fYmVnOwogICAgICAgICAgfQogICAgICAgIF9S
ZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ksIF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6
OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVmLCBfX2kpOwogICAgICAgIF9fci0+X01fbGVu
Z3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAgICAgewoKCgogICAgICAgICAgICBmb3IgKDs7
KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9y
ZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAgICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0
ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2NhcGFjaXR5OwogICAgICAgICAgICAgICAg
Zm9yICg7OykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmIChfX2Jl
ZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg
ICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBfX2xhc3QpCiAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICAgICAqX19wKysgPSAqX19iZWc7CiAgICAgICAgICAg
ICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHNp
emVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAg
X1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3JlYXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAg
ICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fYW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsK
ICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJveShfX2EpOwogICAgICAgICAgICAgICAgX19y
ID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAg
ICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewog
ICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh
aXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg
X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVy
YXRvcl90YWcpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8
c2l6ZV90eXBlPihkaXN0YW5jZShfX2JlZywgX19lbmQpKTsKCiAgICAgICAgaWYgKF9fYmVnID09
IF9fZW5kICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAo
KS5fTV9yZWZjb3B5KCk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9PSBf
SW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0byBj
cmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgoKICAgICAgICBfUmVwKiBfX3IgPSBf
UmVwOjpfU19jcmVhdGUoX19kbmV3LCBfX2EpOwogICAgICAgIHRyeQogICAgICAgICAgeyBfU19j
b3B5X2NoYXJzKF9fci0+X01fcmVmZGF0YSgpLCBfX2JlZywgX19lbmQpOyB9CiAgICAgICAgY2F0
Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAg
ICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX2Ru
ZXc7CgogICAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fZG5ld10gPSBfUmVwOjpfU190ZXJtaW5h
bDsKICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBf
Q2hhclQqCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9T
X2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkK
ICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAgICByZXR1
cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9IF9SZXA6
Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIGlmIChf
X24pCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRhKCksIF9f
biwgX19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBf
X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgICAgX19y
LT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBfUmVwOjpf
U190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K
ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3Ry
aW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9fc3RyLl9N
X3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAogICAgICAg
ICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0
IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90eXBlKCks
IF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJp
bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9NX2RhdGFw
bHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSksIF9BbGxv
YygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs
bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90
eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYg
X19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2soX19wb3Mp
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3BvcywgX19u
KSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf
dHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1
Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9D
aGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3Ry
dWN0KF9fcywgX19zID8gX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fcyArIG5wb3MsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf
c3RyaW5nKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19hKQogICAg
OiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19uLCBfX2MsIF9fYSksIF9fYSkKICAgIHsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICBiYXNpY19zdHJpbmc8
X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhfSW5wdXRJdGVyIF9f
YmVnLCBfSW5wdXRJdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBs
dXMoX1NfY29uc3RydWN0KF9fYmVnLCBfX2VuZCwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmIF9f
c3RyKQogICAgewogICAgICBpZiAoX01fcmVwKCkgIT0gX19zdHIuX01fcmVwKCkpCiAgICAgICAg
ewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IHRoaXMtPmdldF9hbGxvY2F0b3IoKTsK
ICAgICAgICAgIF9DaGFyVCogX190bXAgPSBfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihfX2EsIF9f
c3RyLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2Ep
OwogICAgICAgICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6X1JlcDo6CiAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxvYyYgX19hKSB0aHJvdyAo
KQogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gc2l6ZW9mKF9SZXApICsgKF9NX2NhcGFj
aXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKTsKICAgICAgX1Jhd19ieXRlc19hbGxvYyhfX2EpLmRl
YWxsb2NhdGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odGhpcyksIF9fc2l6ZSk7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs
bG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
X01fbGVha19oYXJkKCkKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkK
ICAgICAgICBfTV9tdXRhdGUoMCwgMCwgMCk7CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2Vk
KCk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwg
X1RyYWl0cywgX0FsbG9jPjo6CiAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5
cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKQogICAgewogICAgICBzaXplX3R5cGUgX19vbGRf
c2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3X3NpemUgPSBf
X29sZF9zaXplICsgX19sZW4yIC0gX19sZW4xOwogICAgICBjb25zdCBfQ2hhclQqIF9fc3JjID0g
X01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjE7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2hvd19t
dWNoID0gX19vbGRfc2l6ZSAtIF9fcG9zIC0gX19sZW4xOwoKICAgICAgaWYgKF9NX3JlcCgpLT5f
TV9pc19zaGFyZWQoKSB8fCBfX25ld19zaXplID4gY2FwYWNpdHkoKSkKICAgICAgICB7CgogICAg
ICAgICAgYWxsb2NhdG9yX3R5cGUgX19hID0gZ2V0X2FsbG9jYXRvcigpOwoKCiAgICAgICAgICBj
b25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9IDQwOTY7CiAgICAgICAgICBjb25zdCBzaXplX3R5
cGUgX19tYWxsb2NfaGVhZGVyX3NpemUgPSA0ICogc2l6ZW9mICh2b2lkKik7CgogICAgICAgICAg
Y29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9jYXBhY2l0eSA9IChfX3BhZ2VzaXplIC0gX19tYWxsb2Nf
aGVhZGVyX3NpemUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
LSBzaXplb2YoX1JlcCkgLSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLyBzaXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9SZXAqIF9f
cjsKICAgICAgICAgIGlmIChfX25ld19zaXplID4gY2FwYWNpdHkoKSAmJiBfX25ld19zaXplID4g
X19wYWdlX2NhcGFjaXR5KQoKICAgICAgICAgICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3
X3NpemUgPiAyKmNhcGFjaXR5KCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X19uZXdfc2l6ZSA6IDIqY2FwYWNpdHkoKSwgX19hKTsKICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgX19yID0gX1JlcDo6X1NfY3JlYXRlKF9fbmV3X3NpemUsIF9fYSk7CiAgICAgICAgICB0cnkK
ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX3BvcykKICAgICAgICAgICAgICAgIHRy
YWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVmZGF0YSgpLCBfTV9kYXRhKCksIF9fcG9zKTsKICAg
ICAgICAgICAgICBpZiAoX19ob3dfbXVjaCkKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpj
b3B5KF9fci0+X01fcmVmZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3NyYywgX19ob3dfbXVjaCk7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fci0+X01fZGlzcG9z
ZShnZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAgICAgX01fZGF0YShfX3It
Pl9NX3JlZmRhdGEoKSk7CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ob3dfbXVjaCAmJiBfX2xl
bjEgIT0gX19sZW4yKQogICAgICAgIHsKCiAgICAgICAgICB0cmFpdHNfdHlwZTo6bW92ZShfTV9k
YXRhKCkgKyBfX3BvcyArIF9fbGVuMiwgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgIH0KICAg
ICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfTV9yZXAoKS0+X01fbGVuZ3Ro
ID0gX19uZXdfc2l6ZTsKICAgICAgX01fZGF0YSgpW19fbmV3X3NpemVdID0gX1JlcDo6X1NfdGVy
bWluYWw7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OnJlc2VydmUoc2l6ZV90eXBlIF9fcmVzKQogICAgewogICAgICBpZiAo
X19yZXMgPiB0aGlzLT5jYXBhY2l0eSgpIHx8IF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSkKICAg
ICAgICB7CiAgICAgICAgICBpZiAoX19yZXMgPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAgICAg
ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNlcnZlIik7CgogICAgICAg
ICAgaWYgKF9fcmVzIDwgdGhpcy0+c2l6ZSgpKQogICAgICAgICAgICBfX3JlcyA9IHRoaXMtPnNp
emUoKTsKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAg
ICAgICAgIF9DaGFyVCogX190bXAgPSBfTV9yZXAoKS0+X01fY2xvbmUoX19hLCBfX3JlcyAtIHRo
aXMtPnNpemUoKSk7CiAgICAgICAgICBfTV9yZXAoKS0+X01fZGlzcG9zZShfX2EpOwogICAgICAg
ICAgX01fZGF0YShfX3RtcCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c3dhcChiYXNpY19zdHJpbmcmIF9fcykK
ICAgIHsKICAgICAgaWYgKF9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfTV9yZXAo
KS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmIChfX3MuX01fcmVwKCktPl9NX2lzX2xlYWtl
ZCgpKQogICAgICAgIF9fcy5fTV9yZXAoKS0+X01fc2V0X3NoYXJhYmxlKCk7CiAgICAgIGlmICh0
aGlzLT5nZXRfYWxsb2NhdG9yKCkgPT0gX19zLmdldF9hbGxvY2F0b3IoKSkKICAgICAgICB7CiAg
ICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fZGF0YSgpOwogICAgICAgICAgX01fZGF0YShfX3Mu
X01fZGF0YSgpKTsKICAgICAgICAgIF9fcy5fTV9kYXRhKF9fdG1wKTsKICAgICAgICB9CgogICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgYmFzaWNfc3RyaW5nIF9fdG1wMShfTV9pYmVnaW4o
KSwgX01faWVuZCgpLCBfX3MuZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgIGJhc2ljX3N0cmlu
ZyBfX3RtcDIoX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLT5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgKnRoaXMgPSBf
X3RtcDI7CiAgICAgICAgICBfX3MgPSBfX3RtcDE7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXAqCiAg
ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwOjoKICAgIF9TX2Ny
ZWF0ZShzaXplX3QgX19jYXBhY2l0eSwgY29uc3QgX0FsbG9jJiBfX2FsbG9jKQogICAgewogICAg
ICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdf
dHlwZTsKCgogICAgICBpZiAoX19jYXBhY2l0eSA+IF9TX21heF9zaXplKQoKCgogICAgICAgIF9f
dGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6Ol9TX2NyZWF0ZSIpOwoKCgoKICAgICAg
c2l6ZV90IF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXplb2YoX0NoYXJUKSArIHNpemVv
ZihfUmVwKTsKIyA0MjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgICAgIGNvbnN0IHNpemVfdCBfX3BhZ2Vz
aXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90IF9fc3VicGFnZXNpemUgPSAxMjg7CiAgICAg
IGNvbnN0IHNpemVfdCBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBzaXplb2YgKHZvaWQqKTsK
ICAgICAgaWYgKChfX3NpemUgKyBfX21hbGxvY19oZWFkZXJfc2l6ZSkgPiBfX3BhZ2VzaXplKQog
ICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2V4dHJhID0KICAgICAgICAgICAgKF9fcGFnZXNp
emUgLSAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSAlIF9fcGFnZXNpemUpKQogICAg
ICAgICAgICAlIF9fcGFnZXNpemU7CiAgICAgICAgICBfX2NhcGFjaXR5ICs9IF9fZXh0cmEgLyBz
aXplb2YoX0NoYXJUKTsKICAgICAgICAgIF9fc2l6ZSA9IChfX2NhcGFjaXR5ICsgMSkgKiBzaXpl
b2YoX0NoYXJUKSArIHNpemVvZihfUmVwKTsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fc2l6
ZSA+IF9fc3VicGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQog
ICAgICAgICAgICAoX19zdWJwYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3Np
emUpICUgX19zdWJwYWdlc2l6ZSkpCiAgICAgICAgICAgICUgX19zdWJwYWdlc2l6ZTsKICAgICAg
ICAgIF9fY2FwYWNpdHkgKz0gX19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19z
aXplID0gKF9fY2FwYWNpdHkgKyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwog
ICAgICAgIH0KCgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxv
YykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw
OwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRf
c2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu
YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXpl
X3R5cGUgX19yZXMpCiAgICB7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19yZXF1ZXN0ZWRfY2Fw
ID0gX01fbGVuZ3RoICsgX19yZXM7CgogICAgICBjb25zdCBzaXplX3R5cGUgX19wYWdlc2l6ZSA9
IDQwOTY7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX21hbGxvY19oZWFkZXJfc2l6ZSA9IDQgKiBz
aXplb2YgKHZvaWQqKTsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2FwYWNpdHkgPQog
ICAgICAgIChfX3BhZ2VzaXplIC0gX19tYWxsb2NfaGVhZGVyX3NpemUgLSBzaXplb2YoX1JlcCkg
LSBzaXplb2YoX0NoYXJUKSkKICAgICAgICAvIHNpemVvZihfQ2hhclQpOwogICAgICBfUmVwKiBf
X3I7CiAgICAgIGlmIChfX3JlcXVlc3RlZF9jYXAgPiBfTV9jYXBhY2l0eSAmJiBfX3JlcXVlc3Rl
ZF9jYXAgPiBfX3BhZ2VfY2FwYWNpdHkpCgogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf
X3JlcXVlc3RlZF9jYXAgPiAyKl9NX2NhcGFjaXR5ID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX19yZXF1ZXN0ZWRfY2FwIDogMipfTV9jYXBhY2l0eSwgX19hbGxvYyk7CiAgICAgIGVs
c2UKICAgICAgICBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19yZXF1ZXN0ZWRfY2FwLCBfX2FsbG9j
KTsKCiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9NX3JlZmRhdGEoKSwg
X01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAgICAgICAgICAgIHRocm93OwogICAg
ICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xlbmd0aCA9IF9NX2xlbmd0aDsKICAg
ICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnJlc2l6ZShzaXplX3R5cGUgX19u
LCBfQ2hhclQgX19jKQogICAgewogICAgICBpZiAoX19uID4gbWF4X3NpemUoKSkKICAgICAgICBf
X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXNpemUiKTsKICAgICAgc2l6ZV90
eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSA8IF9fbikKICAgICAg
ICB0aGlzLT5hcHBlbmQoX19uIC0gX19zaXplLCBfX2MpOwogICAgICBlbHNlIGlmIChfX24gPCBf
X3NpemUpCiAgICAgICAgdGhpcy0+ZXJhc2UoX19uKTsKCiAgICB9CgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
Pjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0
SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwgaW5wdXRfaXRlcmF0
b3JfdGFnKQogICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19rMSwgX19rMik7CiAg
ICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3MuX01faWJlZ2luKCks
IF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgICAgX01f
cmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9Gb3J3YXJkSXRlciBf
X2sxLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIpCiAgICAgIHsKICAg
ICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihkaXN0YW5jZShf
X2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIgLSBfX2kxOwogICAg
ICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAgICAgICBpZiAoX19k
bWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJp
bmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBfX2kxIC0gX01faWJl
Z2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5ldyk7CgoKICAgICAg
ICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwg
X19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6
ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf
dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25zdCBzaXplX3R5cGUg
X19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4gX19zdHJzaXplKQog
ICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJlcGxhY2UiKTsKICAg
ICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBfX3BvczI7CiAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6IF9fc3Ryc2l6ZSAt
IF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBfX24xLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIsIF9fZm9sZG4yKTsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl
bmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Jgog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBhcHBlbmQoY29u
c3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9
IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsgdGhpcy0+c2l6
ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJl
c2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01f
aWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3Ms
IHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3N0
ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4g
dGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgcmV0
dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19zdHIuX01fY2hlY2so
X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3Ms
IF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B
bGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGFw
cGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsKICAgICAgc2l6ZV90
eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5j
YXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01f
cmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg
X0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJh
c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBwZW5kKHNpemVfdHlw
ZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fbiArIHRo
aXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0
aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQo
KSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMs
CiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j
PiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBf
VHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAgICBf
X3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19zdHIuYXBwZW5kKF9f
bGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0
dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U
cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CiAgICAg
IF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX19yaHMuc2l6
ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9fc3RyLmFwcGVuZChf
X3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19yaHMpOwogICAgICBy
ZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0
cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19uMiwg
X0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2kyIC0gX19pMTsKICAg
ICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAgICAgaWYgKG1heF9z
aXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAgICBfX3Rocm93X2xl
bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9NX211dGF0ZSAoX19v
ZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRyYWl0c190eXBlOjph
c3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs
b2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3Bv
cykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAgICAgIGlmIChfX24g
PiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5zaXplKCkgLSBfX3Bv
czsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsgX19wb3MsIF9fbik7
CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXpl
X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBf
X3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAg
Y29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAoOyBfX3hwb3MgKyBf
X24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmNvbXBhcmUo
X19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJldHVybiBfX3hwb3M7
CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmlu
ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9D
aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf
X3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsK
ICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9zIDwgX19zaXplKQog
ICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01fZGF0YSgpOwogICAg
ICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAgICAgY29uc3QgX0No
YXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3BvcywgX19uLCBfX2MpOwog
ICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBfX2RhdGE7CiAgICAg
ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj
X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry
aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25zdCBfQ2hhclQqIF9f
cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl
X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9IF9fc2l6ZSkKICAg
ICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9fbiwgX19wb3MpOwog
ICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgICAgICBkbwog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0
YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfX3BvczsK
ICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsKICAgICAgICB9CiAg
ICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxf
Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFy
VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w
b3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg
ICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9feHBvcyA9IF9fc2l6
ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAgICAgIF9feHBvcyA9
IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4gMDsgKQogICAgICAg
ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAg
ICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf
QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+
OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog
ICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXpl
X3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9fcG9zIDwgdGhpcy0+
c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0g
dHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10pOwogICAgICAgICAg
aWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0KICAgICAgcmV0dXJu
IG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry
YWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl
IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXpl
ID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAgICAg
ICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAg
ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpm
aW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAgICAgICByZXR1cm4g
X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0gIT0gMCk7CiAg
ICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNp
Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0
cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoY29u
c3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAg
IHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsgX194cG9zIDwgdGhp
cy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBlOjpmaW5kKF9fcywg
X19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICBy
ZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U
cmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90
eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAg
IGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAgICAgIGlmICghdHJh
aXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAgICAgcmV0dXJuIF9f
eHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf
c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3Qg
X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsK
ICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkK
ICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19z
aXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYg
KCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9f
c2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5
cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog
ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf
bm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6
ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7
CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19w
b3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf
dHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4g
X19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAg
IH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJp
bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9z
LCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewog
ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19v
c2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9f
dGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVf
dHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBf
X2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBl
Ojpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAg
aWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBf
X3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg
dHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz
LCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEs
IGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIs
IHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAg
aWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3df
b3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBf
X3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jv
c2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVu
ID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpj
b21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAg
ICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6
CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5
cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNv
bXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9f
ciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsK
ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw
ZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCwgX1RyYWl0cywg
X0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNv
bnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhp
cy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190aHJvd19vdXRf
b2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90eXBlIF9fb3Np
emUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0g
bWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9f
cnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01f
ZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3Ig
PSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBp
bnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBh
cmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MsCiAg
ICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z
aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgX190
aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6ZV90
eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX24yKTsKICAgICAg
c2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEpOwogICAgICBzaXpl
X3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGludCBfX3IgPSB0cmFp
dHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xlbik7CiAgICAgIGlm
ICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAgICByZXR1cm4gX19y
OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBf
QWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNpY19zdHJpbmc8X0No
YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAgICAgIF9DaGFyVCog
X19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQogICAgewogICAgICB0
eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgc2l6ZV90
eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fYnl0ZXMgPSBt
aW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpjb3B5KF9fYnVmLCBf
X3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9IF9DaGFyVCgpOwog
ICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5nPGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPj4oYmFz
aWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf
b3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyPiYsIGNvbnN0
IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAg
IGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIpOwogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVh
bTxjaGFyPiYsIHN0cmluZyYpOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5n
PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJpbmcmKTsKICBleHRl
cm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBvcGVyYXRvcjw8KGJh
c2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPHdj
aGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNf
aXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdz
dHJpbmcmKTsKfQojIDU4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL3N0cmluZyIgMiAzCiMgNTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDEgMwoj
IDM0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMK
Cm5hbWVzcGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoK
CiAgdm9pZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFk
X2Nhc3Qodm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lk
CiAgX190aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19kb21haW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxp
ZF9hcmd1bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJy
b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0
IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg
dm9pZAogIF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog
IF9fdGhyb3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190
aHJvd19pb3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNTEgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCgoK
bmFtZXNwYWNlIHN0ZAp7CgogIGNsYXNzIGxvY2FsZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3NwYWNlKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50
KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc2NudHJsKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCwg
Y29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBi
b29sCiAgICBpc2xvd2VyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCwgY29uc3QgbG9j
YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c2RpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChf
Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBp
bmxpbmUgYm9vbAogICAgaXNhbG51bShfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQsIGNv
bnN0IGxvY2FsZSYpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0No
YXJUCiAgICB0b3VwcGVyKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJULCBjb25zdCBs
b2NhbGUmKTsKCgoKICBjbGFzcyBjdHlwZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIGN0eXBlOwogIHRlbXBsYXRlPD4gY2xhc3MgY3R5cGU8Y2hhcj47CgogIHRl
bXBsYXRlPD4gY2xhc3MgY3R5cGU8d2NoYXJfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZTsKCgogIGNsYXNzIGNvZGVjdnRfYmFzZTsKICBjbGFz
cyBfX2VuY190cmFpdHM7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9F
eHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dDsKICB0ZW1wbGF0ZTw+
IGNsYXNzIGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PjsKCiAgdGVtcGxhdGU8PiBjbGFz
cyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNz
IGNvZGVjdnRfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9nZXQ7
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fcHV0OwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4gY2xhc3MgbnVtcHVuY3Q7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBj
bGFzcyBudW1wdW5jdF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBj
bGFzcyBjb2xsYXRlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MKICAgIGNvbGxh
dGVfYnluYW1lOwoKCiAgY2xhc3MgdGltZV9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj
bGFzcyB0aW1lX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0
ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9nZXRfYnlu
YW1lOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGltZV9wdXQ7CiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8
X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWU7CgoKICBjbGFzcyBtb25leV9iYXNl
OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1i
dWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBtb25leV9nZXQ7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0No
YXJUPiA+CiAgICBjbGFzcyBtb25leV9wdXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBi
b29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFzcyBtb25leXB1bmN0OwogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgYm9vbCBfSW50bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5h
bWU7CgoKICBjbGFzcyBtZXNzYWdlc19iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K
ICAgIGNsYXNzIG1lc3NhZ2VzOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz
IG1lc3NhZ2VzX2J5bmFtZTsKCgogIGNsYXNzIGxvY2FsZQogIHsKICBwdWJsaWM6CgogICAgdHlw
ZWRlZiB1bnNpZ25lZCBpbnQgY2F0ZWdvcnk7CgoKICAgIGNsYXNzIGZhY2V0OwogICAgY2xhc3Mg
aWQ7CiAgICBjbGFzcyBfSW1wbDsKCiAgICBmcmllbmQgY2xhc3MgZmFjZXQ7CiAgICBmcmllbmQg
Y2xhc3MgX0ltcGw7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQg
Y29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxh
dGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29u
c3QgbG9jYWxlJikgdGhyb3coKTsKCgoKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBub25lID0g
MDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBjdHlwZSA9IDFMIDw8IDA7CiAgICBzdGF0aWMg
Y29uc3QgY2F0ZWdvcnkgbnVtZXJpYyA9IDFMIDw8IDE7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv
cnkgY29sbGF0ZSA9IDFMIDw8IDI7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgdGltZSA9IDFM
IDw8IDM7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbW9uZXRhcnkgPSAxTCA8PCA0OwogICAg
c3RhdGljIGNvbnN0IGNhdGVnb3J5IG1lc3NhZ2VzID0gMUwgPDwgNTsKICAgIHN0YXRpYyBjb25z
dCBjYXRlZ29yeSBhbGwgPSAoY3R5cGUgfCBudW1lcmljIHwgY29sbGF0ZSB8CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lIHwgbW9uZXRhcnkgfCBtZXNzYWdl
cyk7CgoKICAgIGxvY2FsZSgpIHRocm93KCk7CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19v
dGhlcikgdGhyb3coKTsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKGNvbnN0IGNoYXIqIF9fcyk7
CgogICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19iYXNlLCBjb25zdCBjaGFyKiBfX3MsIGNhdGVn
b3J5IF9fY2F0KTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2Fs
ZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+
CiAgICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIsIF9GYWNldCogX19mKTsKCiAgICB+
bG9jYWxlKCkgdGhyb3coKTsKCiAgICBjb25zdCBsb2NhbGUmCiAgICBvcGVyYXRvcj0oY29uc3Qg
bG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K
ICAgICAgbG9jYWxlCiAgICAgIGNvbWJpbmUoY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdDsK
CgogICAgc3RyaW5nCiAgICBuYW1lKCkgY29uc3Q7CgogICAgYm9vbAogICAgb3BlcmF0b3I9PShj
b25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0IHRocm93ICgpOwoKICAgIGlubGluZSBib29sCiAg
ICBvcGVyYXRvciE9KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCkKICAgIHsg
cmV0dXJuICEodGhpcy0+b3BlcmF0b3I9PShfX290aGVyKSk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhciwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgICBib29s
CiAgICAgIG9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxs
b2M+JiBfX3MxLAogICAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhciwgX1Ry
YWl0cywgX0FsbG9jPiYgX19zMikgY29uc3Q7CgoKICAgIHN0YXRpYyBsb2NhbGUKICAgIGdsb2Jh
bChjb25zdCBsb2NhbGUmKTsKCiAgICBzdGF0aWMgY29uc3QgbG9jYWxlJgogICAgY2xhc3NpYygp
OwoKICBwcml2YXRlOgoKICAgIF9JbXBsKiBfTV9pbXBsOwoKCiAgICBzdGF0aWMgX0ltcGwqIF9T
X2NsYXNzaWM7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfZ2xvYmFsOwoKCgoKCgogICAgc3RhdGlj
IGNvbnN0IHNpemVfdCBfU19jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCgogICAgc3RhdGljIGNv
bnN0IHNpemVfdCBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgPSA2OwoKCgoKCiAgICBzdGF0aWMg
Y29uc3QgY2hhciogX1NfY2F0ZWdvcmllc1tfU19jYXRlZ29yaWVzX3NpemUKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07Cgog
ICAgZXhwbGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGlu
ZSB2b2lkCiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQog
ICAgICAgIGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1h
bGl6ZV9jYXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3Qg
bG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9
OwoKCgogIGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFz
cyBsb2NhbGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNl
dChjb25zdCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZy
aWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2
YXRlOgoKICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNl
dHM7CiAgICBzaXplX3QgX01fZmFjZXRzX3NpemU7CgogICAgY2hhciogX01fbmFtZXNbX1NfY2F0
ZWdvcmllc19zaXplCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArIF9TX2V4dHJhX2NhdGVnb3JpZXNfc2l6ZV07CiAgICBzdGF0aWMgY29uc3QgbG9jYWxl
OjppZCogY29uc3QgX1NfaWRfY3R5cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBj
b25zdCBfU19pZF9udW1lcmljW107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3Qg
X1NfaWRfY29sbGF0ZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lk
X3RpbWVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFy
eVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107
CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVn
b3JpZXNbXTsKCiAgICBpbmxpbmUgdm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkK
ICAgIHsgX19hdG9taWNfYWRkKCZfTV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lk
CiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNo
YW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgeyBkZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQog
ICAgICAgICAgICB7IH0KICAgICAgICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBz
aXplX3QpOwogICAgX0ltcGwoY29uc3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoq
LCBzaXplX3QsIGJvb2wpOwoKICAgfl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBf
SW1wbCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGlu
ZSBib29sCiAgICBfTV9jaGVja19zYW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0g
dHJ1ZTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX3JldCAmJiBfX2kg
PCBfU19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemUgLSAxOwogICAg
ICAgICAgICsrX19pKQogICAgICAgIF9fcmV0ICY9IChzdHJjbXAoX01fbmFtZXNbX19pXSwgX01f
bmFtZXNbX19pICsgMV0pID09IDApOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9p
ZAogICAgX01fcmVwbGFjZV9jYXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAg
IHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6
OmlkKiBjb25zdCopOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwq
LCBjb25zdCBsb2NhbGU6OmlkKik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25z
dCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAg
ICAgIGlubGluZSB2b2lkCiAgICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAg
ICB7IF9NX2luc3RhbGxfZmFjZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBf
X290aGVyLCBfRmFjZXQqIF9fZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19v
dGhlci5fTV9pbXBsLCAxKTsKICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0
OjppZCwgX19mKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsKICAgICAgICAgICBfX2kgPCBf
U19jYXRlZ29yaWVzX3NpemUgKyBfU19leHRyYV9jYXRlZ29yaWVzX3NpemU7ICsrX19pKQogICAg
ICAgIHsKICAgICAgICAgIGRlbGV0ZSBbXSBfTV9pbXBsLT5fTV9uYW1lc1tfX2ldOwogICAgICAg
ICAgY2hhciogX19uZXcgPSBuZXcgY2hhclsyXTsKICAgICAgICAgIHN0cmNweShfX25ldywgIioi
KTsKICAgICAgICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSBfX25ldzsKICAgICAgICB9CiAg
ICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xh
c3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193
b3JkIF9NX3JlZmVyZW5jZXM7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUg
X1NfY19sb2NhbGU7CgogICAgZXhwbGljaXQKICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0
aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5mYWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBf
U19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgX19jX2xvY2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBf
X2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xvY2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAg
IHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7
CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAg
ICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25z
dCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoK
CiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2Fs
ZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUg
X0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3Qg
bG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29s
CiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxl
IHNpemVfdCBfTV9pbmRleDsKCgogICAgc3RhdGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7
CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsK
CiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAgIGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29u
c3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRleCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4
Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRlciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAt
IDE7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0Zh
Y2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykg
dGhyb3coKTsKfQojIDQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2lvcyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2lvc19iYXNlLmgiIDEgMwojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3Bh
Y2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZsYWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9
IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10
ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0
YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5l
IF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3NfRm10Zmxh
Z3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwg
c3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJh
dG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lv
c19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikp
OyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBf
X2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBp
bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yJj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9z
X0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9J
b3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn
cyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs
YWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3MgX19hKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh
Z3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9N
X2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQog
IG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1
cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+
KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1v
ZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRp
Y19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J
b3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUg
X19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9y
fD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2Eg
PSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3Nf
T3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hICYg
X19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2Rl
JiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoK
ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7
IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNfY2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVt
IF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRlX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGlu
ZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lvc19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRl
IF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3Rh
dGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8
KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0
YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAg
aW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lv
c3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkg
XiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVy
YXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9f
YSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9z
X0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBf
X2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBf
X2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlu
bGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4oX0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVy
biBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1Nl
ZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAxTCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jh
c2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBmYWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgog
ICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3Ry
aW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRo
cm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJv
dygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAg
IGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10
ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZt
dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZs
YWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0
IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsK
ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz
OjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdz
KF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBm
bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBy
aWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29uc3Qg
Zm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmlj
KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2Zs
YWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0g
Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10
ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0
YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tp
cHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3Nf
ZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9
IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZt
dGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxk
KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19m
bGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxk
ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9J
b3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9z
dGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVv
ZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3Qg
aW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBz
dGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBf
SW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9w
ZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0
ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5t
b2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNv
bnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRp
YyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAg
IHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190
cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29u
c3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3Vy
ID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7
CiMgMjMwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBlcmFzZV9ldmVudCwK
ICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07CgogICAgdHlwZWRl
ZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBpbnQpOwoKICAgIHZv
aWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4
KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9uOwogICAgc3RyZWFt
c2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwogICAgaW9zdGF0ZSBfTV9leGNl
cHRpb247CiAgICBpb3N0YXRlIF9NX3N0cmVhbWJ1Zl9zdGF0ZTsKCgoKICAgIHN0cnVjdCBfQ2Fs
bGJhY2tfbGlzdAogICAgewoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9NX25leHQ7CiAgICAgIGlv
c19iYXNlOjpldmVudF9jYWxsYmFjayBfTV9mbjsKICAgICAgaW50IF9NX2luZGV4OwogICAgICBf
QXRvbWljX3dvcmQgX01fcmVmY291bnQ7CgogICAgICBfQ2FsbGJhY2tfbGlzdChpb3NfYmFzZTo6
ZXZlbnRfY2FsbGJhY2sgX19mbiwgaW50IF9faW5kZXgsCiAgICAgICAgICAgICAgICAgICAgIF9D
YWxsYmFja19saXN0KiBfX2NiKQogICAgICA6IF9NX25leHQoX19jYiksIF9NX2ZuKF9fZm4pLCBf
TV9pbmRleChfX2luZGV4KSwgX01fcmVmY291bnQoMCkgeyB9CgogICAgICB2b2lkCiAgICAgIF9N
X2FkZF9yZWZlcmVuY2UoKSB7IF9fYXRvbWljX2FkZCgmX01fcmVmY291bnQsIDEpOyB9CgoKICAg
ICAgaW50CiAgICAgIF9NX3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfX2V4Y2hhbmdlX2Fu
ZF9hZGQoJl9NX3JlZmNvdW50LCAtMSk7IH0KICAgIH07CgogICAgIF9DYWxsYmFja19saXN0KiBf
TV9jYWxsYmFja3M7CgogICAgdm9pZAogICAgX01fY2FsbF9jYWxsYmFja3MoZXZlbnQgX19ldikg
dGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9kaXNwb3NlX2NhbGxiYWNrcyh2b2lkKTsKCgogICAg
c3RydWN0IF9Xb3JkcwogICAgewogICAgICB2b2lkKiBfTV9wd29yZDsKICAgICAgbG9uZyBfTV9p
d29yZDsKICAgICAgX1dvcmRzKCkgOiBfTV9wd29yZCgwKSwgX01faXdvcmQoMCkgeyB9CiAgICB9
OwoKCiAgICBfV29yZHMgX01fd29yZF96ZXJvOwoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX2xv
Y2FsX3dvcmRfc2l6ZSA9IDg7CiAgICBfV29yZHMgX01fbG9jYWxfd29yZFtfU19sb2NhbF93b3Jk
X3NpemVdOwoKCiAgICBpbnQgX01fd29yZF9zaXplOwogICAgX1dvcmRzKiBfTV93b3JkOwoKICAg
IF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoKCiAgICBsb2NhbGUgX01f
aW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1YmxpYzoKCgoKCgogICAg
Y2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jhc2U7CiAgICBwdWJsaWM6
CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9T
X2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZvaWQKICAgICAgX1NfaW9z
X2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50IF9TX2lvc19iYXNlX2lu
aXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlvOwogICAgfTsKCgogICAg
aW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJuIF9NX2ZsYWdzOyB9Cgog
ICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2ZtdGZsKQogICAgewogICAg
ICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFncyA9IF9fZm10Zmw7CiAg
ICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10
ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAg
ICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlu
bGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBmbXRmbGFncyBfX21hc2sp
CiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAgICAgIF9NX2ZsYWdzICY9
IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19tYXNrKTsKICAgICAgcmV0
dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNldGYoZm10ZmxhZ3MgX19t
YXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAg
cHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9CgogICAgaW5saW5lIHN0
cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykKICAgIHsKICAgICAgc3Ry
ZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJlY2lzaW9uID0gX19wcmVj
OwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHdp
ZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxpbmUgc3RyZWFtc2l6ZQog
ICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19vbGQg
PSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAgIHJldHVybiBfX29sZDsK
ICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlvKGJvb2wgX19zeW5jID0g
dHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg
aW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4gX01faW9zX2xvY2FsZTsg
fQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoKICAgIGlubGluZSBsb25n
JgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYgX193b3JkID0gKF9faXgg
PCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAgID8gX01fd29yZFtfX2l4XSA6
IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dvcmQuX01faXdvcmQ7CiAgICB9
CgogICAgaW5saW5lIHZvaWQqJgogICAgcHdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3Jk
cyYgX193b3JkID0gKF9faXggPCBfTV93b3JkX3NpemUpCiAgICAgICAgICAgICAgICAgICAgICAg
ID8gX01fd29yZFtfX2l4XSA6IF9NX2dyb3dfd29yZHMoX19peCk7CiAgICAgIHJldHVybiBfX3dv
cmQuX01fcHdvcmQ7CiAgICB9CgoKICAgIH5pb3NfYmFzZSgpOwoKICBwcm90ZWN0ZWQ6CiAgICBp
b3NfYmFzZSgpOwoKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShjb25zdCBpb3NfYmFzZSYpOwoK
ICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19iYXNlJik7CgogIH07CgoKICBp
bmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19i
YXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAg
aW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAg
ICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9
CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAgcmV0dXJuIF9fYmFzZTsK
ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7
CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJldHVybiBfX2Jhc2U7
CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9pbnQpOwogICAgcmV0dXJuIF9f
YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9zKGlvc19iYXNlJiBfX2Jhc2Up
CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3MpOwogICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3MoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAgIHJldHVybiBfX2Jhc2U7CiAg
fQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAgewog
ICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1cm4gX19iYXNlOwog
IH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlvc19iYXNlJiBfX2Jhc2UpCiAg
ewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNlKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihpb3NfYmFzZSYgX19iYXNlKQog
IHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9fYmFz
ZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYoaW9zX2Jhc2UmIF9fYmFzZSkK
ICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7CiAgICAgcmV0dXJuIF9f
YmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJuYWwoaW9zX2Jhc2UmIF9fYmFz
ZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVybmFsLCBpb3NfYmFzZTo6YWRq
dXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAg
bGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpsZWZ0
LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGlu
ZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRm
KGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jh
c2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3NfYmFzZSYgX19iYXNlKQogIHsK
ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAg
cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBoZXgoaW9zX2Jhc2UmIF9f
YmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4LCBpb3NfYmFzZTo6YmFzZWZp
ZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgb2N0KGlv
c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6Om9jdCwgaW9zX2Jh
c2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFz
ZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNl
OjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9Cgog
IGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAg
X19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsK
ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2lvcyIgMiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDEgMwojIDQ0ICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3N0cmVhbWJ1ZiIgMwoKCgoKCgoK
bmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNfaW9zPF9DaGFy
VCwgX1RyYWl0cz4mIF9pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8
X0NoYXJULCBfVHJhaXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JvdXQpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw
ZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpv
ZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGN0eXBlPGNoYXJfdHlwZT4gX19jdHlw
ZV90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRyYWl0c190
eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBl
OjpzdGF0ZV90eXBlIF9fc3RhdGVfdHlwZTsKCiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pb3M8
Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBiYXNpY19pc3RyZWFt
PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfb3N0cmVh
bTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGlzdHJlYW1idWZf
aXRlcmF0b3I8Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBvc3Ry
ZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwoKICAgICAgZnJpZW5kIHN0
cmVhbXNpemUKICAgICAgX19jb3B5X3N0cmVhbWJ1ZnM8PihiYXNpY19pb3M8Y2hhcl90eXBlLCB0
cmFpdHNfdHlwZT4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVm
X3R5cGUqIF9fc2JpbixfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0KTsKCiAgICBwcm90ZWN0ZWQ6
CgoKCgoKICAgICAgY2hhcl90eXBlKiBfTV9idWY7CgoKICAgICAgc2l6ZV90IF9NX2J1Zl9zaXpl
OwoKCiAgICAgIHNpemVfdCBfTV9idWZfc2l6ZV9vcHQ7CgoKCiAgICAgIGJvb2wgX01fYnVmX3Vu
aWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01faW5fYmVnOwogICAgICBjaGFyX3R5cGUq
IF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9pbl9lbmQ7CiAgICAgIGNoYXJfdHlwZSog
X01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9vdXRfY3VyOwogICAgICBjaGFyX3R5cGUq
IF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9NX21vZGU7CgoKICAgICAg
bG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9vbCBfTV9idWZfbG9jYWxlX2luaXQ7CgoK
CgoKCiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgX1NfcGJhY2tfc2l6ZSA9IDE7CiAgICAgIGNo
YXJfdHlwZSBfTV9wYmFja1tfU19wYmFja19zaXplXTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFj
a19jdXJfc2F2ZTsKICAgICAgY2hhcl90eXBlKiBfTV9wYmFja19lbmRfc2F2ZTsKICAgICAgYm9v
bCBfTV9wYmFja19pbml0OwoKCiAgICAgIGZwb3M8X19zdGF0ZV90eXBlPiBfTV9wb3M7CgoKCgog
ICAgICB2b2lkCiAgICAgIF9NX3BiYWNrX2NyZWF0ZSgpCiAgICAgIHsKICAgICAgICBpZiAoIV9N
X3BiYWNrX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIHNpemVfdCBfX2Rpc3QgPSBfTV9p
bl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfU19wYmFj
a19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9wYmFjaywg
X01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX01faW5f
Y3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9NX2luX2VuZDsKICAgICAgICAg
ICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9NX3BiYWNrICsgX19sZW4pOwogICAg
ICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgfQoKCgoKICAg
ICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAgICAgewogICAgICAgIGlmIChfTV9w
YmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAgc2l6ZV90IF9fb2ZmX2N1ciA9IF9N
X2luX2N1ciAtIF9NX3BiYWNrOwoKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9lbmQgPSAwOwog
ICAgICAgICAgICBzaXplX3QgX19wYmFja19sZW4gPSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAg
ICAgICAgICAgc2l6ZV90IF9fc2F2ZV9sZW4gPSBfTV9wYmFja19lbmRfc2F2ZSAtIF9NX2J1ZjsK
ICAgICAgICAgICAgaWYgKF9fcGJhY2tfbGVuID4gX19zYXZlX2xlbikKICAgICAgICAgICAgICBf
X29mZl9lbmQgPSBfX3BiYWNrX2xlbiAtIF9fc2F2ZV9sZW47CgogICAgICAgICAgICB0aGlzLT5z
ZXRnKF9NX2J1ZiwgX01fcGJhY2tfY3VyX3NhdmUgKyBfX29mZl9jdXIsCiAgICAgICAgICAgICAg
ICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgKyBfX29mZl9lbmQpOwogICAgICAgICAgICBfTV9w
YmFja19jdXJfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBf
X251bGw7CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAg
ICAgfQoKCgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAg
ICAgewogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9j
dXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAg
ICAgICBfTV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9zdHJlYW1idWYiIDMKICAgICAgdm9pZAogICAg
ICBfTV9vdXRfY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rl
c3RpbiA9IF9NX2luX2N1cjsKCiAgICAgICAgX01fb3V0X2N1ciArPSBfX247CiAgICAgICAgaWYg
KF9fdGVzdGluICYmIF9NX2J1Zl91bmlmaWVkKQogICAgICAgICAgX01faW5fY3VyICs9IF9fbjsK
ICAgICAgICBpZiAoX01fb3V0X2N1ciA+IF9NX291dF9lbmQpCiAgICAgICAgICB7CiAgICAgICAg
ICAgIF9NX291dF9lbmQgPSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgaWYgKF9fdGVzdGluKQog
ICAgICAgICAgICAgIF9NX2luX2VuZCArPSBfX247CiAgICAgICAgICB9CiAgICAgIH0KCgoKCiAg
ICAgIG9mZl90eXBlCiAgICAgIF9NX291dF9idWZfc2l6ZSgpCiAgICAgIHsKICAgICAgICBvZmZf
dHlwZSBfX3JldCA9IDA7CiAgICAgICAgaWYgKF9NX291dF9jdXIpCiAgICAgICAgICB7CgogICAg
ICAgICAgICBpZiAoX01fb3V0X2JlZyA9PSBfTV9idWYpCiAgICAgICAgICAgICAgX19yZXQgPSBf
TV9vdXRfYmVnICsgX01fYnVmX3NpemUgLSBfTV9vdXRfY3VyOwoKICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2VuZCAtIF9NX291dF9jdXI7CiAgICAgICAgICB9
CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogIHB1YmxpYzoKICAgICAgdmlydHVhbAog
ICAgICB+YmFzaWNfc3RyZWFtYnVmKCkKICAgICAgewogICAgICAgIF9NX2J1Zl91bmlmaWVkID0g
ZmFsc2U7CiAgICAgICAgX01fYnVmX3NpemUgPSAwOwogICAgICAgIF9NX2J1Zl9zaXplX29wdCA9
IDA7CiAgICAgICAgX01fbW9kZSA9IGlvc19iYXNlOjpvcGVubW9kZSgwKTsKICAgICAgICBfTV9i
dWZfbG9jYWxlX2luaXQgPSBmYWxzZTsKICAgICAgfQoKCiAgICAgIGxvY2FsZQogICAgICBwdWJp
bWJ1ZShjb25zdCBsb2NhbGUgJl9fbG9jKQogICAgICB7CiAgICAgICAgbG9jYWxlIF9fdG1wKHRo
aXMtPmdldGxvYygpKTsKICAgICAgICB0aGlzLT5pbWJ1ZShfX2xvYyk7CiAgICAgICAgcmV0dXJu
IF9fdG1wOwogICAgICB9CgogICAgICBsb2NhbGUKICAgICAgZ2V0bG9jKCkgY29uc3QKICAgICAg
ewogICAgICAgIGlmIChfTV9idWZfbG9jYWxlX2luaXQpCiAgICAgICAgICByZXR1cm4gX01fYnVm
X2xvY2FsZTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gbG9jYWxlKCk7CiAgICAgIH0K
CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKgogICAgICBwdWJzZXRidWYoY2hhcl90eXBlKiBfX3Ms
IHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiB0aGlzLT5zZXRidWYoX19zLCBfX24pOyB9
CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrb2ZmKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFz
ZTo6c2Vla2RpciBfX3dheSwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgX19t
b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gdGhpcy0+
c2Vla29mZihfX29mZiwgX193YXksIF9fbW9kZSk7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1
YnNlZWtwb3MocG9zX3R5cGUgX19zcCwKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1v
ZGUgX19tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4g
dGhpcy0+c2Vla3BvcyhfX3NwLCBfX21vZGUpOyB9CgogICAgICBpbnQKICAgICAgcHVic3luYygp
IHsgcmV0dXJuIHRoaXMtPnN5bmMoKTsgfQoKCgogICAgICBzdHJlYW1zaXplCiAgICAgIGluX2F2
YWlsKCkKICAgICAgewogICAgICAgIHN0cmVhbXNpemUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2lu
X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm
IChfTV9wYmFja19pbml0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHNpemVfdCBf
X3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9wYmFja19jdXJfc2F2ZTsKICAgICAg
ICAgICAgICAgIHNpemVfdCBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9NX3BiYWNrOwogICAg
ICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47CiAgICAgICAgICAg
ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5lZ3B0cigp
IC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0
ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAg
ICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0cmFpdHNfdHlwZTo6ZXFfaW50
X3R5cGUodGhpcy0+c2J1bXBjKCksIF9fZW9mKQogICAgICAgICAgICAgICAgPyBfX2VvZiA6IHRo
aXMtPnNnZXRjKCkpOwogICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzYnVtcGMoKTsKCiAg
ICAgIGludF90eXBlCiAgICAgIHNnZXRjKCkKICAgICAgewogICAgICAgIGludF90eXBlIF9fcmV0
OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5fZW5kKQogICAgICAg
ICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKih0aGlzLT5ncHRyKCkpKTsKICAg
ICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnVuZGVyZmxvdygpOwogICAgICAgIHJl
dHVybiBfX3JldDsKICAgICAgfQoKICAgICAgc3RyZWFtc2l6ZQogICAgICBzZ2V0bihjaGFyX3R5
cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzZ2V0bihfX3Ms
IF9fbik7IH0KCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YmFja2MoY2hhcl90eXBlIF9fYyk7
CgogICAgICBpbnRfdHlwZQogICAgICBzdW5nZXRjKCk7CgoKICAgICAgaW50X3R5cGUKICAgICAg
c3B1dGMoY2hhcl90eXBlIF9fYyk7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHNwdXRuKGNvbnN0
IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+eHNw
dXRuKF9fcywgX19uKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfc3RyZWFtYnVmKCkK
ICAgICAgOiBfTV9idWYoX19udWxsKSwgX01fYnVmX3NpemUoMCksIF9NX2J1Zl9zaXplX29wdCg4
MTkyKSwKICAgICAgX01fYnVmX3VuaWZpZWQoZmFsc2UpLCBfTV9pbl9iZWcoMCksIF9NX2luX2N1
cigwKSwgX01faW5fZW5kKDApLAogICAgICBfTV9vdXRfYmVnKDApLCBfTV9vdXRfY3VyKDApLCBf
TV9vdXRfZW5kKDApLAogICAgICBfTV9tb2RlKGlvc19iYXNlOjpvcGVubW9kZSgwKSksIF9NX2J1
Zl9sb2NhbGUobG9jYWxlKCkpLAogICAgICBfTV9idWZfbG9jYWxlX2luaXQoZmFsc2UpLCBfTV9w
YmFja19jdXJfc2F2ZSgwKSwgX01fcGJhY2tfZW5kX3NhdmUoMCksCiAgICAgIF9NX3BiYWNrX2lu
aXQoZmFsc2UpCiAgICAgIHsgfQoKCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZWJhY2soKSBjb25z
dCB7IHJldHVybiBfTV9pbl9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZ3B0cigpIGNv
bnN0IHsgcmV0dXJuIF9NX2luX2N1cjsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBlZ3B0cigp
IGNvbnN0IHsgcmV0dXJuIF9NX2luX2VuZDsgfQoKICAgICAgdm9pZAogICAgICBnYnVtcChpbnQg
X19uKSB7IF9NX2luX2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0ZyhjaGFyX3R5
cGUqIF9fZ2JlZywgY2hhcl90eXBlKiBfX2duZXh0LCBjaGFyX3R5cGUqIF9fZ2VuZCkKICAgICAg
ewogICAgICAgIF9NX2luX2JlZyA9IF9fZ2JlZzsKICAgICAgICBfTV9pbl9jdXIgPSBfX2duZXh0
OwogICAgICAgIF9NX2luX2VuZCA9IF9fZ2VuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9z
X2Jhc2U6OmluKSAmJiBfX2diZWcgJiYgX19nbmV4dCAmJiBfX2dlbmQpCiAgICAgICAgICBfTV9t
b2RlID0gX01fbW9kZSB8IGlvc19iYXNlOjppbjsKICAgICAgfQoKCiAgICAgIGNoYXJfdHlwZSoK
ICAgICAgcGJhc2UoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfYmVnOyB9CgogICAgICBjaGFyX3R5
cGUqCiAgICAgIHBwdHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfY3VyOyB9CgogICAgICBjaGFy
X3R5cGUqCiAgICAgIGVwcHRyKCkgY29uc3QgeyByZXR1cm4gX01fb3V0X2VuZDsgfQoKICAgICAg
dm9pZAogICAgICBwYnVtcChpbnQgX19uKSB7IF9NX291dF9jdXIgKz0gX19uOyB9CgogICAgICB2
b2lkCiAgICAgIHNldHAoY2hhcl90eXBlKiBfX3BiZWcsIGNoYXJfdHlwZSogX19wZW5kKQogICAg
ICB7CiAgICAgICAgX01fb3V0X2JlZyA9IF9NX291dF9jdXIgPSBfX3BiZWc7CiAgICAgICAgX01f
b3V0X2VuZCA9IF9fcGVuZDsKICAgICAgICBpZiAoIShfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkg
JiYgX19wYmVnICYmIF9fcGVuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jh
c2U6Om91dDsKICAgICAgfQoKCgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgaW1idWUoY29uc3Qg
bG9jYWxlJiBfX2xvYykKICAgICAgewogICAgICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IHRydWU7
CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGUgIT0gX19sb2MpCiAgICAgICAgICBfTV9idWZfbG9j
YWxlID0gX19sb2M7CiAgICAgIH0KCgogICAgICB2aXJ0dWFsIGJhc2ljX3N0cmVhbWJ1ZjxjaGFy
X3R5cGUsX1RyYWl0cz4qCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqLCBzdHJlYW1zaXplKQogICAg
ICB7IHJldHVybiB0aGlzOyB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYo
b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu
bW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHBvc190
eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bv
cyhwb3NfdHlwZSwKICAgICAgICAgICAgICBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6
aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVybiBwb3NfdHlwZShvZmZfdHlwZSgtMSkp
OyB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBzeW5jKCkgeyByZXR1cm4gMDsgfQoKCiAgICAg
IHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICBzaG93bWFueWMoKSB7IHJldHVybiAwOyB9CgogICAg
ICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVuZGVyZmxvdygpCiAgICAg
IHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKICAgICAgdmlydHVhbCBpbnRfdHlwZQog
ICAgICB1ZmxvdygpCiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IHRyYWl0c190eXBl
Ojplb2YoKTsKICAgICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlw
ZSh0aGlzLT51bmRlcmZsb3coKSwgX19yZXQpOwogICAgICAgIGJvb2wgX190ZXN0cGVuZGluZyA9
IF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQ7CiAgICAgICAgaWYgKCFfX3Rlc3Rl
b2YgJiYgX190ZXN0cGVuZGluZykKICAgICAgICAgIHsKICAgICAgICAgICAgX19yZXQgPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAgICAgICAgICAgICsrX01faW5fY3Vy
OwogICAgICAgICAgICBpZiAoX01fYnVmX3VuaWZpZWQgJiYgX01fbW9kZSAmIGlvc19iYXNlOjpv
dXQpCiAgICAgICAgICAgICAgKytfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVy
biBfX3JldDsKICAgICAgfQoKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWls
KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJldHVybiB0cmFpdHNfdHlw
ZTo6ZW9mKCk7IH0KCgogICAgICB2aXJ0dWFsIHN0cmVhbXNpemUKICAgICAgeHNwdXRuKGNvbnN0
IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICB2aXJ0dWFsIGludF90eXBl
CiAgICAgIG92ZXJmbG93KGludF90eXBlID0gdHJhaXRzX3R5cGU6OmVvZigpKQogICAgICB7IHJl
dHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7IH0KIyA0ODcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAzCiAgICBwcml2YXRlOgogICAgICBi
YXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAgIF9fc3Ry
ZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJikgeyBy
ZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEgMwojIDM5ICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFt
YnVmLnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgY29uc3Qgc2l6ZV90CiAgICBiYXNpY19zdHJlYW1idWY8X0No
YXJULCBfVHJhaXRzPjo6X1NfcGJhY2tfc2l6ZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBzYnVtcGMoKQogICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2lu
X2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90
eXBlIF9fYyA9ICoodGhpcy0+Z3B0cigpKTsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKDEpOwog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAgICB9
CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPnVmbG93KCk7CiAgICAgIHJldHVybiBf
X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBl
CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YmFja2MoY2hh
cl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgIGJvb2wgX190ZXN0
cG9zID0gX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cjsKICAgICAgYm9vbCBfX3Rl
c3RuZSA9IF9NX2luX2N1ciAmJiAhdHJhaXRzX3R5cGU6OmVxKF9fYywgdGhpcy0+Z3B0cigpWy0x
XSk7CiAgICAgIGlmICghX190ZXN0cG9zIHx8IF9fdGVzdG5lKQogICAgICAgIF9fcmV0ID0gcGJh
Y2tmYWlsKHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgZWxzZQogICAgICAg
IHsKICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRz
X3R5cGU6OnRvX2ludF90eXBlKCp0aGlzLT5ncHRyKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJu
IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5
cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHN1bmdldGMoKQog
ICAgewogICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9i
ZWcgPCBfTV9pbl9jdXIpCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwog
ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKl9NX2luX2N1cik7CiAg
ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0aGlzLT5wYmFja2ZhaWwoKTsKICAg
ICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9U
cmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgc3B1dGMoY2hhcl90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAg
IGlmIChfTV9vdXRfYnVmX3NpemUoKSkKICAgICAgICB7CiAgICAgICAgICAqX01fb3V0X2N1ciA9
IF9fYzsKICAgICAgICAgIF9NX291dF9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJh
aXRzX3R5cGU6OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg
X19yZXQgPSB0aGlzLT5vdmVyZmxvdyh0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSk7CiAg
ICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgeHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg
IHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChfX3JldCA8IF9fbikK
ICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19idWZfbGVuID0gX01faW5fZW5kIC0gX01faW5f
Y3VyOwogICAgICAgICAgaWYgKF9fYnVmX2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBzaXplX3QgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAgICAgICAgICBzaXpl
X3QgX19sZW4gPSBtaW4oX19idWZfbGVuLCBfX3JlbWFpbmluZyk7CiAgICAgICAgICAgICAgdHJh
aXRzX3R5cGU6OmNvcHkoX19zLCBfTV9pbl9jdXIsIF9fbGVuKTsKICAgICAgICAgICAgICBfX3Jl
dCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAgICAgICAgICAgICAgX01f
aW5fY3VyX21vdmUoX19sZW4pOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwg
X19uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+dWZs
b3coKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRy
YWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIHRy
YWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykp
OwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVmPF9D
aGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1z
aXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxlIChf
X3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBfTV9v
dXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAgICAg
ICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsKICAg
ICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsKICAg
ICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47CiAg
ICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAgICAg
ICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90eXBl
IF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7CiAg
ICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCB0cmFpdHNfdHlw
ZTo6ZW9mKCkpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICArK19fcmV0Owog
ICAgICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAg
cmV0dXJuIF9fcmV0OwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgX19jb3B5X3N0cmVhbWJ1ZnMoYmFzaWNf
aW9zPF9DaGFyVCwgX1RyYWl0cz4mIF9faW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNf
c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAg
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KQogIHsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKCiAgICAgIHN0cmVhbXNp
emUgX19yZXQgPSAwOwogICAgICBzdHJlYW1zaXplIF9fYnVmc2l6ZSA9IF9fc2Jpbi0+aW5fYXZh
aWwoKTsKICAgICAgc3RyZWFtc2l6ZSBfX3h0cmN0OwogICAgICBib29sIF9fdGVzdHB1dCA9IF9f
c2JvdXQtPl9NX21vZGUgJiBpb3NfYmFzZTo6b3V0OwogICAgICB0cnkKICAgICAgICB7CiAgICAg
ICAgICB3aGlsZSAoX190ZXN0cHV0ICYmIF9fYnVmc2l6ZSAhPSAtMSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfX2J1ZnNpemUgIT0gMCAmJiBfX3NiaW4tPmdwdHIoKSAhPSBfX251
bGwpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0
LT5zcHV0bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgICAgICAgX19y
ZXQgKz0gX194dHJjdDsKICAgICAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShf
X3h0cmN0KTsKICAgICAgICAgICAgICAgICAgaWYgKF9feHRyY3QgIT0gX19idWZzaXplKQogICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX0NoYXJUIF9fYnVmWzI1Nl07
CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19jaGFyc3JlYWQgPSBfX3NiaW4tPnNnZXRu
KF9fYnVmLCBzaXplb2YoX19idWYpKTsKICAgICAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2Jv
dXQtPnNwdXRuKF9fYnVmLCBfX2NoYXJzcmVhZCk7CiAgICAgICAgICAgICAgICAgIF9fcmV0ICs9
IF9feHRyY3Q7CiAgICAgICAgICAgICAgICAgIGlmIChfX3h0cmN0ICE9IF9fY2hhcnNyZWFkKQog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
IGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCksIF9UcmFpdHM6OmVvZigp
KSkKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIF9fYnVmc2l6ZSA9IF9fc2Jp
bi0+aW5fYXZhaWwoKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgewogICAgICAgICAgX19pb3Muc2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4g
X19yZXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJlYW1idWY8
Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3RyZWFt
YnVmcyhiYXNpY19pb3M8Y2hhcj4mLCBiYXNpY19zdHJlYW1idWY8Y2hhcj4qLAogICAgICAgICAg
ICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPGNoYXI+Kik7CgogIGV4dGVybiB0ZW1wbGF0ZSBj
bGFzcyBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBzdHJl
YW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8d2NoYXJfdD4mLCBiYXNpY19z
dHJlYW1idWY8d2NoYXJfdD4qLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVm
PHdjaGFyX3Q+Kik7Cn0KIyA1MDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pb3MiIDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzkgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19p
b3MuaCIgMwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgiIDEgMwojIDQyICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtYnVmX2l0ZXJhdG9yLmgi
IDMKCm5hbWVzcGFjZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9UcmFpdHM+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVy
YXRvcjxpbnB1dF9pdGVyYXRvcl90YWcsIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5
cGUsCiAgICAgICAgICAgICAgICAgICAgICBfQ2hhclQqLCBfQ2hhclQmPgogICAgewogICAgcHVi
bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp
dHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUg
aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g
c3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgoKCgoKCgoKICAgICAgbXV0YWJsZSBzdHJl
YW1idWZfdHlwZSogX01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAg
ICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZigwKSwgX01f
Yyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcihpc3Ry
ZWFtX3R5cGUmIF9fcykgdGhyb3coKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9j
KHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVh
bWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVmKF9fcyksIF9NX2ModHJhaXRz
X3R5cGU6OmVvZigpKSB7IH0KCgogICAgICBjaGFyX3R5cGUKICAgICAgb3BlcmF0b3IqKCkgY29u
c3QKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfTV9nZXQoKSk7IH0K
CiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg
ICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAg
aWYgKF9NX3NidWYgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX3NidWYtPnNidW1wYygp
LCBfX2VvZikpCiAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICBlbHNlCiAgICAgICAgICBf
TV9jID0gX19lb2Y7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBpc3RyZWFt
YnVmX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50KQogICAgICB7CiAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgaXN0cmVhbWJ1Zl9p
dGVyYXRvciBfX29sZCA9ICp0aGlzOwogICAgICAgIGlmIChfTV9zYnVmCiAgICAgICAgICAgICYm
IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19vbGQuX01fYyA9IF9NX3NidWYtPnNidW1wYygp
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW9mKSkKICAgICAg
ICAgIF9NX3NidWYgPSAwOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAg
ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgoKCiAgICAgIGJvb2wKICAgICAgZXF1YWwoY29u
c3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciYgX19iKSBjb25zdAogICAgICB7CiAgICAgICAgY29uc3Qg
aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgYm9vbCBfX3RoaXNl
b2YgPSB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX01fZ2V0KCksIF9fZW9mKTsKICAgICAgICBi
b29sIF9fYmVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2IuX01fZ2V0KCksIF9fZW9m
KTsKICAgICAgICByZXR1cm4gKF9fdGhpc2VvZiAmJiBfX2Jlb2YgfHwgKCFfX3RoaXNlb2YgJiYg
IV9fYmVvZikpOwogICAgICB9CgoKICAgIHByaXZhdGU6CiAgICAgIGludF90eXBlCiAgICAgIF9N
X2dldCgpIGNvbnN0CiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICBpbnRfdHlwZSBfX3JldCA9IF9fZW9mOwogICAgICAgIGlm
IChfTV9zYnVmKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p
bnRfdHlwZShfTV9jLCBfX2VvZikpCiAgICAgICAgICAgICAgX19yZXQgPSBfTV9jOwogICAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZSgoX19y
ZXQgPSBfTV9zYnVmLT5zZ2V0YygpKSwgX19lb2YpKQogICAgICAgICAgICAgICAgX01fc2J1ZiA9
IDA7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0
cz4mIF9fYSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+JiBfX2IpCiAgICB7IHJldHVybiBfX2EuZXF1YWwoX19iKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYm9vbAogICAg
b3BlcmF0b3IhPShjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9f
YSwKICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFp
dHM+JiBfX2IpCiAgICB7IHJldHVybiAhX19hLmVxdWFsKF9fYik7IH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVy
YXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwgdm9p
ZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo
YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IHN0cmVhbWJ1Zl90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBvc3RyZWFtX3R5cGU7CgogICAg
cHJpdmF0ZToKICAgICAgc3RyZWFtYnVmX3R5cGUqIF9NX3NidWY7CiAgICAgIGJvb2wgX01fZmFp
bGVkOwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3Io
b3N0cmVhbV90eXBlJiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MucmRidWYoKSks
IF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKHN0cmVh
bWJ1Zl90eXBlKiBfX3MpIHRocm93ICgpCiAgICAgIDogX01fc2J1ZihfX3MpLCBfTV9mYWlsZWQo
IV9NX3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3I9
KF9DaGFyVCBfX2MpOwoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3BlcmF0b3Iq
KCkgdGhyb3coKQogICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVy
YXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7
IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB0aHJvdygp
CiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBib29sCiAgICAgIGZhaWxlZCgpIGNvbnN0
IHRocm93KCkKICAgICAgeyByZXR1cm4gX01fZmFpbGVkOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgb3N0cmVhbWJ1Zl9p
dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQs
IF9UcmFpdHM+OjpvcGVyYXRvcj0oX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYgKCFfTV9mYWls
ZWQgJiYKICAgICAgICAgIF9UcmFpdHM6OmVxX2ludF90eXBlKF9NX3NidWYtPnNwdXRjKF9fYyks
IF9UcmFpdHM6OmVvZigpKSkKICAgICAgICBfTV9mYWlsZWQgPSB0cnVlOwogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9Cn0KIyA0MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0
NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xv
Y2FsZV9mYWNldHMuaCIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9jd2N0eXBlIiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9jd2N0eXBlIiAzCgoKCgojIDEgIi91c3IvaW5jbHVkZS93
Y3R5cGUuaCIgMSAzIDQKIyAzNSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKIyAxICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUv
My4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMyA0CiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg
MiAzIDQKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIGludCB3Y3R5cGVfdDsKIyA3OSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKZW51bQp7
CiAgX19JU3d1cHBlciA9IDAsCiAgX19JU3dsb3dlciA9IDEsCiAgX19JU3dhbHBoYSA9IDIsCiAg
X19JU3dkaWdpdCA9IDMsCiAgX19JU3d4ZGlnaXQgPSA0LAogIF9fSVN3c3BhY2UgPSA1LAogIF9f
SVN3cHJpbnQgPSA2LAogIF9fSVN3Z3JhcGggPSA3LAogIF9fSVN3YmxhbmsgPSA4LAogIF9fSVN3
Y250cmwgPSA5LAogIF9fSVN3cHVuY3QgPSAxMCwKICBfX0lTd2FsbnVtID0gMTEsCgogIF9JU3d1
cHBlciA9ICgoX19JU3d1cHBlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA8
PCAyNCkgOiAoKF9fSVN3dXBwZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp
IDw8IDgpIDogKChfX0lTd3VwcGVyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIp
KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVyKSkgPj4gMjQpKSkpLAogIF9JU3ds
b3dlciA9ICgoX19JU3dsb3dlcikgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA8
PCAyNCkgOiAoKF9fSVN3bG93ZXIpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp
IDw8IDgpIDogKChfX0lTd2xvd2VyKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIp
KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2VyKSkgPj4gMjQpKSkpLAogIF9JU3dh
bHBoYSA9ICgoX19JU3dhbHBoYSkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA8
PCAyNCkgOiAoKF9fSVN3YWxwaGEpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp
IDw8IDgpIDogKChfX0lTd2FscGhhKSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEp
KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhhKSkgPj4gMjQpKSkpLAogIF9JU3dk
aWdpdCA9ICgoX19JU3dkaWdpdCkgPCA4ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA8
PCAyNCkgOiAoKF9fSVN3ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp
IDw8IDgpIDogKChfX0lTd2RpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQp
KSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0KSkgPj4gMjQpKSkpLAogIF9JU3d4
ZGlnaXQgPSAoKF9fSVN3eGRpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQp
KSA8PCAyNCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3eGRp
Z2l0KSkgPDwgOCkgOiAoKF9fSVN3eGRpZ2l0KSA8IDI0ID8gKGludCkgKCgxVUwgPDwgKF9fSVN3
eGRpZ2l0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3d4ZGlnaXQpKSA+PiAyNCkpKSks
CiAgX0lTd3NwYWNlID0gKChfX0lTd3NwYWNlKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dz
cGFjZSkpIDw8IDI0KSA6ICgoX19JU3dzcGFjZSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3NwYWNlKSkgPDwgOCkgOiAoKF9fSVN3c3BhY2UpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dzcGFjZSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3c3BhY2UpKSA+PiAyNCkpKSks
CiAgX0lTd3ByaW50ID0gKChfX0lTd3ByaW50KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw
cmludCkpIDw8IDI0KSA6ICgoX19JU3dwcmludCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3ByaW50KSkgPDwgOCkgOiAoKF9fSVN3cHJpbnQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dwcmludCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHJpbnQpKSA+PiAyNCkpKSks
CiAgX0lTd2dyYXBoID0gKChfX0lTd2dyYXBoKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dn
cmFwaCkpIDw8IDI0KSA6ICgoX19JU3dncmFwaCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2dyYXBoKSkgPDwgOCkgOiAoKF9fSVN3Z3JhcGgpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dncmFwaCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Z3JhcGgpKSA+PiAyNCkpKSks
CiAgX0lTd2JsYW5rID0gKChfX0lTd2JsYW5rKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3di
bGFuaykpIDw8IDI0KSA6ICgoX19JU3dibGFuaykgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2JsYW5rKSkgPDwgOCkgOiAoKF9fSVN3YmxhbmspIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dibGFuaykpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YmxhbmspKSA+PiAyNCkpKSks
CiAgX0lTd2NudHJsID0gKChfX0lTd2NudHJsKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dj
bnRybCkpIDw8IDI0KSA6ICgoX19JU3djbnRybCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2NudHJsKSkgPDwgOCkgOiAoKF9fSVN3Y250cmwpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3djbnRybCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3Y250cmwpKSA+PiAyNCkpKSks
CiAgX0lTd3B1bmN0ID0gKChfX0lTd3B1bmN0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dw
dW5jdCkpIDw8IDI0KSA6ICgoX19JU3dwdW5jdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d3B1bmN0KSkgPDwgOCkgOiAoKF9fSVN3cHVuY3QpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dwdW5jdCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3cHVuY3QpKSA+PiAyNCkpKSks
CiAgX0lTd2FsbnVtID0gKChfX0lTd2FsbnVtKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dh
bG51bSkpIDw8IDI0KSA6ICgoX19JU3dhbG51bSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lT
d2FsbnVtKSkgPDwgOCkgOiAoKF9fSVN3YWxudW0pIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J
U3dhbG51bSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxudW0pKSA+PiAyNCkpKSkK
fTsKCgoKZXh0ZXJuICJDIiB7CgoKCgoKCgpleHRlcm4gaW50IGlzd2FsbnVtICh3aW50X3QgX193
YykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIHRocm93
ICgpOwoKCmV4dGVybiBpbnQgaXN3Y250cmwgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBpc3dkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlz
d2dyYXBoICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd2xvd2VyICh3
aW50X3QgX193YykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBpc3dwcmludCAod2ludF90IF9fd2Mp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIHRocm93ICgp
OwoKCgoKZXh0ZXJuIGludCBpc3dzcGFjZSAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0
ZXJuIGludCBpc3d1cHBlciAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBp
c3d4ZGlnaXQgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2JsYW5r
ICh3aW50X3QgX193YykgdGhyb3cgKCk7CiMgMTc4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMg
NApleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93
ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj
KSB0aHJvdyAoKTsKCgoKCmV4dGVybiB1bnNpZ25lZCBpbnQgKl9fY3R5cGUzMl9iOwojIDI0OSAi
L3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzIDQKdHlwZWRlZiBfX2NvbnN0IF9faW50MzJfdCAqd2N0
cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsK
CgpleHRlcm4gd2ludF90IHRvd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRl
cm4gY29uc3Qgd2ludF90ICpfX2N0eXBlMzJfdG9sb3dlcjsKZXh0ZXJuIGNvbnN0IHdpbnRfdCAq
X19jdHlwZTMyX3RvdXBwZXI7CiMgMjc1ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNAp9CiMg
Mjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMgNApleHRlcm4gIkMiIHsKCgoKZXh0ZXJuIHdj
dHJhbnNfdCB3Y3RyYW5zIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93ICgpOwoKCmV4
dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFuc190IF9fZGVzYykgdGhy
b3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IF9faXN3YWxudW1fbCAod2ludF90IF9fd2MsIF9fbG9j
YWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgX19pc3dhbHBoYV9sICh3
aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBf
X2lzd2NudHJsX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGludCBfX2lzd2RpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j
YWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2dyYXBoX2wgKHdpbnRfdCBfX3djLCBf
X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dsb3dlcl9s
ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu
dCBfX2lzd3ByaW50X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBpbnQgX19pc3dwdW5jdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf
X2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9f
d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3Vw
cGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4
dGVybiBpbnQgX19pc3d4ZGlnaXRfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUp
IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xv
Y2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdjdHlwZV90IF9fd2N0eXBlX2wg
KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBfX3djLCB3Y3R5cGVfdCBf
X2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g
d2ludF90IF9fdG93bG93ZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRo
cm93ICgpOwoKCmV4dGVybiB3aW50X3QgX190b3d1cHBlcl9sICh3aW50X3QgX193YywgX19sb2Nh
bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5zX2wg
KF9fY29uc3QgY2hhciAqX19wcm9wZXJ0eSwgX19sb2NhbGVfdCBfX2xvY2FsZSkKICAgICB0aHJv
dyAoKTsKCgpleHRlcm4gd2ludF90IF9fdG93Y3RyYW5zX2wgKHdpbnRfdCBfX3djLCB3Y3RyYW5z
X3QgX19kZXNjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2Nh
bGUpIHRocm93ICgpOwoKCgp9CiMgNTMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvY3djdHlwZSIgMiAzCiMgNzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY3djdHlwZSIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu
ZyA6OndpbnRfdDsKCiAgdXNpbmcgOjp3Y3R5cGVfdDsKICB1c2luZyA6OndjdHJhbnNfdDsKCiAg
dXNpbmcgOjppc3dhbG51bTsKICB1c2luZyA6Omlzd2FscGhhOwogIHVzaW5nIDo6aXN3Ymxhbms7
CiAgdXNpbmcgOjppc3djbnRybDsKICB1c2luZyA6Omlzd2RpZ2l0OwogIHVzaW5nIDo6aXN3Z3Jh
cGg7CiAgdXNpbmcgOjppc3dsb3dlcjsKICB1c2luZyA6Omlzd3ByaW50OwogIHVzaW5nIDo6aXN3
cHJpbnQ7CiAgdXNpbmcgOjppc3dwdW5jdDsKICB1c2luZyA6Omlzd3NwYWNlOwogIHVzaW5nIDo6
aXN3dXBwZXI7CiAgdXNpbmcgOjppc3d4ZGlnaXQ7CiAgdXNpbmcgOjppc3djdHlwZTsKICB1c2lu
ZyA6OnRvd2xvd2VyOwogIHVzaW5nIDo6dG93dXBwZXI7CiAgdXNpbmcgOjp0b3djdHJhbnM7CiAg
dXNpbmcgOjp3Y3RyYW5zOwogIHVzaW5nIDo6d2N0eXBlOwp9CiMgNDcgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIg
MwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9z
IiAxIDMKIyA0OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9fcGFk
OwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
aTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNlLmgiIDEgMwojIDM2ICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2Jp
dHMvY3R5cGVfYmFzZS5oIiAzCiAgc3RydWN0IGN0eXBlX2Jhc2UKICB7CgogICAgdHlwZWRlZiBj
b25zdCBpbnQqIF9fdG9fdHlwZTsKCgoKICAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgbWFzazsK
ICAgIHN0YXRpYyBjb25zdCBtYXNrIHVwcGVyID0gX0lTdXBwZXI7CiAgICBzdGF0aWMgY29uc3Qg
bWFzayBsb3dlciA9IF9JU2xvd2VyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSBfSVNh
bHBoYTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGRpZ2l0ID0gX0lTZGlnaXQ7CiAgICBzdGF0aWMg
Y29uc3QgbWFzayB4ZGlnaXQgPSBfSVN4ZGlnaXQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBzcGFj
ZSA9IF9JU3NwYWNlOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSBfSVNwcmludDsKICAg
IHN0YXRpYyBjb25zdCBtYXNrIGdyYXBoID0gX0lTZ3JhcGg7CiAgICBzdGF0aWMgY29uc3QgbWFz
ayBjbnRybCA9IF9JU2NudHJsOwogICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSBfSVNwdW5j
dDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gX0lTYWxudW07CiAgfTsKIyA2NCAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9m
YWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBfX2N0
eXBlX2Fic3RyYWN0X2Jhc2UgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGN0eXBlX2Jh
c2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKCiAg
ICAgIGJvb2wKICAgICAgaXMobWFzayBfX20sIGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2lzKF9fbSwgX19jKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgog
ICAgICBpcyhjb25zdCBjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJfdHlwZSAqX19oaSwgbWFz
ayAqX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2lzKF9fbG8sIF9faGksIF9f
dmVjKTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBzY2FuX2lzKG1hc2sgX19tLCBj
b25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fc2Nhbl9pcyhfX20sIF9fbG8sIF9faGkpOyB9CgogICAgICBjb25z
dCBjaGFyX3R5cGUqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9f
bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f
c2Nhbl9ub3QoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvdXBw
ZXIoY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihf
X2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIHRvdXBwZXIoY2hhcl90eXBlICpf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv
X3RvdXBwZXIoX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b2xvd2VyKGNo
YXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19jKTsg
fQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b2xvd2VyKGNoYXJfdHlwZSogX19sbywg
Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xv
d2VyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgd2lkZW4oY2hhciBfX2Mp
IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fYyk7IH0KCiAgICAgIGNvbnN0
IGNoYXIqCiAgICAgIHdpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNo
YXJfdHlwZSogX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19sbywg
X19oaSwgX190byk7IH0KCiAgICAgIGNoYXIKICAgICAgbmFycm93KGNoYXJfdHlwZSBfX2MsIGNo
YXIgX19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhfX2MsIF9f
ZGZhdWx0KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICBuYXJyb3coY29uc3QgY2hh
cl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgY2hhciBf
X2RmYXVsdCwgY2hhciAqX190bykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93
KF9fbG8sIF9faGksIF9fZGZhdWx0LCBfX3RvKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw
bGljaXQKICAgICAgX19jdHlwZV9hYnN0cmFjdF9iYXNlKHNpemVfdCBfX3JlZnMgPSAwKTogbG9j
YWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jdHlwZV9hYnN0
cmFjdF9iYXNlKCkgeyB9CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20s
IGNoYXJfdHlwZSBfX2MpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwKICAgICAgICAgICAgbWFzayogX192ZWMpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29u
c3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUq
IF9fbG8sCiAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7
CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf
X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90
eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190
b3VwcGVyKGNoYXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5
cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f
aGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIo
Y2hhcl90eXBlKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAg
ICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u
c3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLAogICAgICAgICAgICAgICBjaGFyX3R5cGUqIF9f
ZGVzdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFy
X3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hh
cl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFy
X3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0
KSBjb25zdCA9IDA7CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xh
c3MgY3R5cGUgOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNlPF9DaGFyVD4KICAgIHsKICAg
IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBjdHlwZTo6bWFzayBtYXNrOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7Cgog
ICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3QgX19yZWZzID0gMCkgOiBfX2N0eXBlX2Fi
c3RyYWN0X2Jhc2U8X0NoYXJUPihfX3JlZnMpIHsgfQoKICAgcHJvdGVjdGVkOgogICAgICB2aXJ0
dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg
X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o
aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg
ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh
cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg
ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy
X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo
YXJfdHlwZSoKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlw
ZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihj
aGFyIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVu
KGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFy
IF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk
b19uYXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAg
ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBjdHlwZTxfQ2hhclQ+
OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPGNoYXI+IDogcHVibGljIF9fY3R5
cGVfYWJzdHJhY3RfYmFzZTxjaGFyPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBj
aGFyIGNoYXJfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9j
YWxlX2N0eXBlOwogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIF9NX3RvdXBwZXI7
CiAgICAgIF9fdG9fdHlwZSBfTV90b2xvd2VyOwogICAgICBjb25zdCBtYXNrKiBfTV90YWJsZTsK
CiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwogICAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IHRhYmxlX3NpemUgPSAxICsgc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oLTEp
OwoKICAgICAgZXhwbGljaXQKICAgICAgY3R5cGUoY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJv
b2wgX19kZWwgPSBmYWxzZSwgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAg
ICAgY3R5cGUoX19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IG1hc2sqIF9fdGFibGUgPSAwLCBib29s
IF9fZGVsID0gZmFsc2UsCiAgICAgICAgICAgIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGlu
bGluZSBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3Q7CgogICAgICBpbmxp
bmUgY29uc3QgY2hhcioKICAgICAgaXMoY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19o
aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNj
YW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGkpIGNvbnN0
OwoKICAgICAgaW5saW5lIGNvbnN0IGNoYXIqCiAgICAgIHNjYW5fbm90KG1hc2sgX19tLCBjb25z
dCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICBwcm90ZWN0ZWQ6CiAg
ICAgIGNvbnN0IG1hc2sqCiAgICAgIHRhYmxlKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVy
biBfTV90YWJsZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IG1hc2sqCiAgICAgIGNsYXNzaWNfdGFi
bGUoKSB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1
YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAg
ICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBf
X2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBj
aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNo
YXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVy
KGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19s
bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl
CiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgog
ICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5
cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNo
YXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90
eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBj
b25zdDsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IGN0eXBlPGNoYXI+JgogICAgdXNl
X2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJiBfX2xvYyk7CgoKCiAgdGVtcGxhdGU8
PgogICAgY2xhc3MgY3R5cGU8d2NoYXJfdD4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl
PHdjaGFyX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIHdjdHlwZV90IF9fd21hc2tfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6
CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CgogICAgcHVibGljOgoKICAgICAg
c3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShzaXplX3Qg
X19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9jYWxlIF9fY2xv
Yywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAgX193bWFza190eXBl
CiAgICAgIF9NX2NvbnZlcnRfdG9fd21hc2soY29uc3QgbWFzayBfX20pIGNvbnN0OwoKICAgICAg
dmlydHVhbAogICAgICB+Y3R5cGUoKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyht
YXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf
dHlwZSoKICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq
IF9faGksIG1hc2sqIF9fdmVjKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl
KgogICAgICBkb19zY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0
IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK
ICAgICAgZG9fc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAg
ICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg
Y2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1
YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29u
c3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAg
IGRvX3RvbG93ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90
eXBlKgogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBf
X2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIp
IGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBj
aGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVs
dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93
KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAg
ICAgICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1w
bGF0ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hh
cl90PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9p
bmxpbmUuaCIgMSAzCiMgMzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl
L2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wK
ICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJu
IF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYyldICYgX19tOyB9CgogIGNv
bnN0IGNoYXIqCiAgY3R5cGU8Y2hhcj46OgogIGlzKGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj
aGFyKiBfX2hpZ2gsIG1hc2sqIF9fdmVjKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9f
aGlnaCkKICAgICAgKl9fdmVjKysgPSBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy
PigqX19sb3crKyldOwogICAgcmV0dXJuIF9faGlnaDsKICB9CgogIGNvbnN0IGNoYXIqCiAgY3R5
cGU8Y2hhcj46OgogIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBjb25zdCBj
aGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAgICAgICAg
ICAgJiYgIShfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigqX19sb3cpXSAmIF9f
bSkpCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQoKICBjb25zdCBjaGFyKgog
IGN0eXBlPGNoYXI+OjoKICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciogX19sb3csIGNv
bnN0IGNoYXIqIF9faGlnaCkgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBfX2hpZ2gKICAg
ICAgICAgICAmJiAoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0g
JiBfX20pICE9IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDQwMSAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2Fs
ZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBj
dHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAg
ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZV9i
eW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZV9ieW5hbWUoKSB7IH07CiAgICB9OwoKCiAgdGVt
cGxhdGU8PgogICAgY3R5cGVfYnluYW1lPGNoYXI+OjpjdHlwZV9ieW5hbWUoY29uc3QgY2hhcios
IHNpemVfdCByZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY3R5cGVfYnluYW1lPHdjaGFyX3Q+Ojpj
dHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzKTsKCgojIDEgIi9ob21lL2Jhbmdl
cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0LmgiIDEgMwoj
IDQ1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv
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
dGF0ZV90eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9j
b2RlY3Z0OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBl
eHBsaWNpdAogICAgICBjb2RlY3Z0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IF9fY29kZWN2
dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4gKF9fcmVmcykgeyB9
CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3Qg
X19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0
KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19z
dGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVy
bl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAg
ICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAg
ICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVz
dWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9f
dG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSom
IF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0
ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBj
b25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21f
bmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVh
bCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmly
dHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5f
dHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBz
aXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0
aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg
dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVj
dnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBj
bGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2
dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoK
CiAgICAgIHR5cGVkZWYgY2hhciBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVy
bl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgIHByb3RlY3Rl
ZDoKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9jb2RlY3Z0OwoKICAgIHB1YmxpYzoKICAg
ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KHNp
emVfdCBfX3JlZnMgPSAwKTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoX19jX2xvY2Fs
ZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1
YWwKICAgICAgfmNvZGVjdnQoKTsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChz
dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg
ICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19m
cm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAg
ICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBl
eHRlcm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190b19lbmQs
IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg
ICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRlcm5f
dHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJu
X3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCk7
CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9fYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93
KCk7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYs
IGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5f
dHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAg
ICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICB9OwoKCgogIHRlbXBsYXRlPD4KICAg
IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgOiBwdWJsaWMgX19j
b2RlY3Z0X2Fic3RyYWN0X2Jhc2U8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PgogICAgewogICAg
cHVibGljOgoKICAgICAgdHlwZWRlZiB3Y2hhcl90IGludGVybl90eXBlOwogICAgICB0eXBlZGVm
IGNoYXIgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7Cgog
ICAgcHJvdGVjdGVkOgogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvZGVjdnQ7CgogICAg
cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg
IGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2
dChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoK
ICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAg
ICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20s
CiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJu
X3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRl
cm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkg
Y29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUm
IF9fc3RhdGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl
KiBfX3RvX2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u
c3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRl
LAogICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5
cGUqIF9fZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9u
ZXh0LAogICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2Vu
ZCwKICAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZp
cnR1YWwKICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1
YWwKICAgICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZp
cnR1YWwKICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJu
X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19l
bmQsIHNpemVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhf
bGVuZ3RoKCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu
dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29k
ZWN2dF9ieW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+
CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNv
bnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29kZWN2dDxfSW50ZXJu
VCwgX0V4dGVyblQsIF9TdGF0ZVQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGlmIChfTV9jX2xv
Y2FsZV9jb2RlY3Z0ICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2Fs
ZShfTV9jX2xvY2FsZV9jb2RlY3Z0KTsKICAgICAgICBfU19jcmVhdGVfY19sb2NhbGUoX01fY19s
b2NhbGVfY29kZWN2dCwgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh
bAogICAgICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKCgojIDEgIi9ob21lL2Jhbmdl
cnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0
cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAxIDMKIyA0NiAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2NvZGVj
dnRfc3BlY2lhbGl6YXRpb25zLmgiIDMKICBjbGFzcyBfX2VuY190cmFpdHMKICB7CiAgcHVibGlj
OgoKCgogICAgdHlwZWRlZiBpY29udl90IF9fZGVzY190eXBlOwoKICBwcm90ZWN0ZWQ6CgoKICAg
IHN0YXRpYyBjb25zdCBpbnQgX1NfbWF4X3NpemUgPSAzMjsKCiAgICBjaGFyIF9NX2ludF9lbmNb
X1NfbWF4X3NpemVdOwoKICAgIGNoYXIgX01fZXh0X2VuY1tfU19tYXhfc2l6ZV07CgoKICAgIF9f
ZGVzY190eXBlIF9NX2luX2Rlc2M7CgogICAgX19kZXNjX3R5cGUgX01fb3V0X2Rlc2M7CgoKICAg
IGludCBfTV9leHRfYm9tOwoKCiAgICBpbnQgX01faW50X2JvbTsKCiAgcHVibGljOgogICAgZXhw
bGljaXQgX19lbmNfdHJhaXRzKCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCks
IF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgbWVtc2V0KF9NX2ludF9l
bmMsIDAsIF9TX21heF9zaXplKTsKICAgICAgbWVtc2V0KF9NX2V4dF9lbmMsIDAsIF9TX21heF9z
aXplKTsKICAgIH0KCiAgICBleHBsaWNpdCBfX2VuY190cmFpdHMoY29uc3QgY2hhciogX19pbnQs
IGNvbnN0IGNoYXIqIF9fZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2lib20g
PSAwLCBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rlc2MoMCks
IF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRf
ZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fZXh0
LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3QgX19lbmNf
dHJhaXRzJiBfX29iaik6IF9NX2luX2Rlc2MoMCksIF9NX291dF9kZXNjKDApCiAgICB7CiAgICAg
IHN0cm5jcHkoX01faW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAg
ICBzdHJuY3B5KF9NX2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAg
ICAgX01fZXh0X2JvbSA9IF9fb2JqLl9NX2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29i
ai5fTV9pbnRfYm9tOwogICAgfQoKCiAgICBfX2VuY190cmFpdHMmCiAgICBvcGVyYXRvcj0oY29u
c3QgX19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBf
X29iai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywg
X19vYmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9pbl9kZXNjID0gMDsKICAg
ICAgX01fb3V0X2Rlc2MgPSAwOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01fZXh0X2JvbTsK
ICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICAgIHJldHVybiAqdGhpczsK
ICAgIH0KCiAgICB+X19lbmNfdHJhaXRzKCkKICAgIHsKICAgICAgX19kZXNjX3R5cGUgX19lcnIg
PSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgaWYgKF9NX2luX2Rlc2MgJiYg
X01faW5fZGVzYyAhPSBfX2VycikKICAgICAgICBpY29udl9jbG9zZShfTV9pbl9kZXNjKTsKICAg
ICAgaWYgKF9NX291dF9kZXNjICYmIF9NX291dF9kZXNjICE9IF9fZXJyKQogICAgICAgIGljb252
X2Nsb3NlKF9NX291dF9kZXNjKTsKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbml0KCkKICAgIHsK
ICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19lcnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+
KC0xKTsKICAgICAgaWYgKCFfTV9pbl9kZXNjKQogICAgICAgIHsKICAgICAgICAgIF9NX2luX2Rl
c2MgPSBpY29udl9vcGVuKF9NX2ludF9lbmMsIF9NX2V4dF9lbmMpOwogICAgICAgICAgaWYgKF9N
X2luX2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3Jl
YXRpbmcgaWNvbnYgaW5wdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgICBp
ZiAoIV9NX291dF9kZXNjKQogICAgICAgIHsKICAgICAgICAgIF9NX291dF9kZXNjID0gaWNvbnZf
b3BlbihfTV9leHRfZW5jLCBfTV9pbnRfZW5jKTsKICAgICAgICAgIGlmIChfTV9vdXRfZGVzYyA9
PSBfX2VycikKICAgICAgICAgICAgX190aHJvd19ydW50aW1lX2Vycm9yKCJjcmVhdGluZyBpY29u
diBvdXRwdXQgZGVzY3JpcHRvciBmYWlsZWQuIik7CiAgICAgICAgfQogICAgfQoKICAgIGJvb2wK
ICAgIF9NX2dvb2QoKQogICAgewogICAgICBjb25zdCBfX2Rlc2NfdHlwZSBfX2VyciA9IHJlaW50
ZXJwcmV0X2Nhc3Q8aWNvbnZfdD4oLTEpOwogICAgICBib29sIF9fdGVzdCA9IF9NX2luX2Rlc2Mg
JiYgX01faW5fZGVzYyAhPSBfX2VycjsKICAgICAgX190ZXN0ICY9IF9NX291dF9kZXNjICYmIF9N
X291dF9kZXNjICE9IF9fZXJyOwogICAgICByZXR1cm4gX190ZXN0OwogICAgfQoKICAgIGNvbnN0
IF9fZGVzY190eXBlKgogICAgX01fZ2V0X2luX2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9N
X2luX2Rlc2M7IH0KCiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9vdXRfZGVzY3Jp
cHRvcigpCiAgICB7IHJldHVybiAmX01fb3V0X2Rlc2M7IH0KCiAgICBpbnQKICAgIF9NX2dldF9l
eHRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01f
Z2V0X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CgogICAgY29uc3Qg
Y2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyByZXR1cm4gX01faW50X2VuYzsg
fQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJu
IF9NX2V4dF9lbmM7IH0KICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw
ZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19l
bmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQs
IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm
IGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAgdHlwZWRlZiBfSW50ZXJuVCBpbnRl
cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRl
ZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHM6Ol9f
ZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVmIF9fZW5jX3RyYWl0cyBfX2VuY190
eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAg
Y29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFz
ZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9
CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5jX3R5cGUqIF9fZW5jLCBzaXplX3Qg
X19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwg
ZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgcHJvdGVjdGVk
OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJlc3Vs
dAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9f
ZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBp
bnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8s
IGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u
ZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVf
dHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJu
X3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2
aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRl
cm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2Vu
ZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5
cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq
JiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rpbmco
KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2Nv
bnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNv
bnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9OwoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBsb2Nh
bGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6aWQ7
CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlubGluZSBzaXplX3QKICAgIF9faWNv
bnZfYWRhcHRvcihzaXplX3QoKl9fZnVuYykoaWNvbnZfdCwgX1QsIHNpemVfdCosIGNoYXIqKiwg
c2l6ZV90KiksCiAgICAgICAgICAgICAgICAgICAgaWNvbnZfdCBfX2NkLCBjaGFyKiogX19pbmJ1
Ziwgc2l6ZV90KiBfX2luYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgY2hhcioqIF9fb3V0YnVm
LCBzaXplX3QqIF9fb3V0Ynl0ZXMpCiAgICB7IHJldHVybiBfX2Z1bmMoX19jZCwgKF9UKV9faW5i
dWYsIF9faW5ieXRlcywgX19vdXRidWYsIF9fb3V0Ynl0ZXMpOyB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0
CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19v
dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg
ICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBf
X2Zyb21fbmV4dCwKICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f
dG9fZW5kLAogICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewog
ICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQog
ICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNj
X3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9n
ZXRfb3V0X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9
IHNpemVvZihpbnRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mYnl0ZXMgPSBfX2ZtdWx0
aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3Rt
dWx0aXBsZSA9IHNpemVvZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX190Ynl0ZXMg
PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19j
dG8gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX3RvKTsKICAgICAgICAgIGNoYXIqIF9fY2Zy
b207CiAgICAgICAgICBzaXplX3QgX19jb252OwoKCgoKCgogICAgICAgICAgaW50IF9faW50X2Jv
bSA9IF9fc3RhdGUuX01fZ2V0X2ludGVybmFsX2JvbSgpOwogICAgICAgICAgaWYgKF9faW50X2Jv
bSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3NpemUgPSBfX2Zyb21fZW5k
IC0gX19mcm9tOwogICAgICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IHN0YXRpY19j
YXN0PGludGVybl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoaW50ZXJuX3R5cGUpICog
KF9fc2l6ZSArIDEpKSk7CiAgICAgICAgICAgICAgX19jZml4ZWRbMF0gPSBzdGF0aWNfY2FzdDxp
bnRlcm5fdHlwZT4oX19pbnRfYm9tKTsKICAgICAgICAgICAgICBjaGFyX3RyYWl0czxpbnRlcm5f
dHlwZT46OmNvcHkoX19jZml4ZWQgKyAxLCBfX2Zyb20sIF9fc2l6ZSk7CiAgICAgICAgICAgICAg
X19jZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAg
ICBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmJ5dGVzLCAmX19jdG8sICZf
X3RieXRlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUq
PihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIq
PihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252
LCAqX19kZXNjLCAmX19jZnJvbSwgJl9fZmJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAmX19jdG8sICZfX3RieXRlcyk7CiAgICAgICAgICAgIH0KCiAgICAgICAg
ICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBf
X2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5cGUqPihfX2Nmcm9t
KTsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGV4dGVybl90eXBl
Kj4oX19jdG8pOwogICAgICAgICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfX2ZieXRlcyA8IF9fZm11
bHRpcGxlICogKF9fZnJvbV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgaW50ZXJuX3R5
cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRf
Y2FzdDxleHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0
aWFsOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
IF9fcmV0ID0gZXJyb3I7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jl
dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U
PgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U
LCBfX2VuY190cmFpdHM+OjoKICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0
ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0
ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVy
cm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlw
ZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0
IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9pbl9kZXNjcmlwdG9yKCk7CiAg
ICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwog
ICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRpcGxlICogKF9fdG9fZW5kIC0gX190byk7
CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8p
OwogICAgICAgICAgc2l6ZV90IF9fY29udiA9IF9faWNvbnZfYWRhcHRvcihpY29udiwqX19kZXNj
LCBfX251bGwsIF9fbnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkp
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0
PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIGlmIChfX3RsZW4gPT0gX190bXVs
dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gbm9jb252
OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y
ZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp
YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSBlcnJv
cjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQK
ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2lu
KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg
ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy
b21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l
bmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAg
cmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAg
ICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBl
OwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2lu
X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVv
ZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAo
X19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg
PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp
cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAg
ICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0
ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207
CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJu
X3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsg
MSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBl
PihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29w
eShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0g
cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9
IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVy
bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg
ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg
ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j
ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f
Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNp
emVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBf
X3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAg
ICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJv
bV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zy
b21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsK
ICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlw
ZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAg
ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNvZGlu
ZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYgKHNp
emVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNpemVv
ZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBib29s
CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19h
bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj
b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5ndGgo
Y29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg
ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7IHJl
dHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQoK
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGlu
dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f
bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzNTggIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9jb2RlY3Z0Lmgi
IDIgMwojIDQyNiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKCiAgY2xhc3MgX19udW1fYmFzZQogIHsKICBw
cm90ZWN0ZWQ6CgoKICAgIHN0YXRpYyBjb25zdCBjaGFyIF9TX2F0b21zW107CgogICAgZW51bQog
ICAgewogICAgICBfTV96ZXJvLAogICAgICBfTV9lID0gX01femVybyArIDEwLAogICAgICBfTV9F
ID0gX01femVybyArIDExLAogICAgICBfTV9zaXplID0gMjEgKyAxCiAgICB9OwoKCgogICAgc3Rh
dGljIGJvb2wKICAgIF9TX2Zvcm1hdF9mbG9hdChjb25zdCBpb3NfYmFzZSYgX19pbywgY2hhciog
X19mcHRyLCBjaGFyIF9fbW9kLAogICAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19wcmVj
KTsKCgogICAgc3RhdGljIHZvaWQKICAgIF9TX2Zvcm1hdF9pbnQoY29uc3QgaW9zX2Jhc2UmIF9f
aW8sIGNoYXIqIF9fZnB0ciwgY2hhciBfX21vZCwgY2hhciBfX21vZGwpOwogIH07CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdCA6IHB1YmxpYyBsb2NhbGU6
OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7
CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz
dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICBwcml2YXRlOgogICAgICBjaGFyX3R5cGUgX01fZGVj
aW1hbF9wb2ludDsKICAgICAgY2hhcl90eXBlIF9NX3Rob3VzYW5kc19zZXA7CiAgICAgIGNvbnN0
IGNoYXIqIF9NX2dyb3VwaW5nOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3RydWVuYW1lOwog
ICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX2ZhbHNlbmFtZTsKCiAgICBwdWJsaWM6CiAgICAgIGV4
cGxpY2l0CiAgICAgIG51bXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQo
X19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoKTsgfQoKICAgICAgZXhwbGlj
aXQKICAgICAgbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19j
bG9jKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQoKSBjb25zdAogICAg
ICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAgIGNoYXJfdHlwZQog
ICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdGhvdXNh
bmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICB0
cnVlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RydWVuYW1lKCk7IH0KCiAg
ICAgIHN0cmluZ190eXBlCiAgICAgIGZhbHNlbmFtZSgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX2ZhbHNlbmFtZSgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg
IH5udW1wdW5jdCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9w
b2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZp
cnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJl
dHVybiBfTV90aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19n
cm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0
dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX3RydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4g
X01fdHJ1ZW5hbWU7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZmFsc2Vu
YW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmFsc2VuYW1lOyB9CgoKICAgICAgdm9pZAog
ICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsK
ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbnVtcHVu
Y3Q8X0NoYXJUPjo6aWQ7CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PGNoYXI+Ojp+bnVtcHVu
Y3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8Y2hhcj46Ol9NX2luaXRp
YWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8PgogICAgbnVt
cHVuY3Q8d2NoYXJfdD46On5udW1wdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBu
dW1wdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlIF9fY2xv
Yyk7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBudW1wdW5jdF9ieW5h
bWUgOiBwdWJsaWMgbnVtcHVuY3Q8X0NoYXJUPgogICAgewoKICAgICAgX19jX2xvY2FsZSBfTV9j
X2xvY2FsZV9udW1wdW5jdDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJf
dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAg
ICAgIGV4cGxpY2l0CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVf
dCBfX3JlZnMgPSAwKQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAg
ICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAg
ICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9
CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQog
ICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9
OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz
cyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBfX251bV9iYXNlCiAgICB7
CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk
ZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg
IGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNl
dChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwg
aXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQo
X19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg
Z2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAg
ICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2ln
bmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRl
cl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAogICAgICB7
IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog
ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs
IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp
Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBf
X2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0
ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAgeyBy
ZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp
b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWdu
ZWQgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu
LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0
KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAg
ICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUm
IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv
LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p
biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp
b3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90
eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29u
c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg
X192KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbCB+bnVtX2dldCgpIHsgfQoKICAg
ICAgaXRlcl90eXBlCiAgICAgIF9NX2V4dHJhY3RfZmxvYXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICAgIHN0
cmluZyYgX194dHJjKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2lu
dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsCiAg
ICAgICAgICAgICAgICAgICAgIHN0cmluZyYgX194dHJjLCBpbnQmIF9fYmFzZSkgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikgY29uc3Q7CgoKICAgICAgdmly
dHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz
ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy
X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i
YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCYpIGNvbnN0
OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90
eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIHVu
c2lnbmVkIGludCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0
KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy
ciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBsb25nJikgY29uc3Q7Cgog
ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUs
IGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgdW5zaWdu
ZWQgbG9uZyBsb25nJikgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f
Z2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBf
X2VyciwKICAgICAgICAgICAgIGZsb2F0JikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw
ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNl
JiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAgbG9uZyBkb3VibGUmKSBj
b25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0
ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAg
ICB2b2lkKiYpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46Omlk
OwojIDcyMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i
aXRzL2xvY2FsZV9mYWNldHMuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBjbGFzcyBudW1fcHV0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1
YmxpYyBfX251bV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj
aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGlj
IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3Jl
ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg
ICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9v
bCBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxs
LCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i
YXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVy
biB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBl
CiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxs
LAogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMt
PmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAg
IHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25n
IGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f
ZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBp
b3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQgbG9uZyBs
b25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2Zp
bGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsg
cmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVy
X3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBf
X2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo
aXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAg
ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAg
ICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1
dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICAgIGl0ZXJfdHlwZQogICAgICAgIF9NX2NvbnZlcnRf
ZmxvYXQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIF9WYWx1ZVQgX192KSBjb25zdDsKCiAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01f
Y29udmVydF9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwK
ICAgICAgICAgICAgICAgICAgICAgICBjaGFyIF9fbW9kLCBjaGFyIF9fbW9kbCwgX1ZhbHVlVCBf
X3YpIGNvbnN0OwoKICAgICAgaXRlcl90eXBlCiAgICAgIF9NX3dpZGVuX2Zsb2F0KGl0ZXJfdHlw
ZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAg
ICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01f
d2lkZW5faW50KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGNo
YXIqIF9fY3MsCiAgICAgICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0OwoKICAgICAgaXRl
cl90eXBlCiAgICAgIF9NX2luc2VydChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5
cGUgX19maWxsLAogICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3dzLCBpbnQgX19s
ZW4pIGNvbnN0OwoKICAgICAgdmlydHVhbAogICAgICB+bnVtX3B1dCgpIHsgfTsKCiAgICAgIHZp
cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90
eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAg
ICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9f
dikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBl
LCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIHVuc2lnbmVkIGxvbmcpIGNvbnN0OwoKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwg
Y2hhcl90eXBlIF9fZmlsbCwgbG9uZyBsb25nIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0
ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2Zp
bGwsIHVuc2lnbmVkIGxvbmcgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK
ICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBkb3Vi
bGUgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVy
X3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX192KSBjb25z
dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19i
YXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgdm9pZCogX192KSBjb25zdDsKICAgIH07Cgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxl
OjppZCBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsKCgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGUgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewog
ICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVm
IGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoKICAgIHByb3RlY3RlZDoKCgogICAg
ICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX2NvbGxhdGU7CgogICAgcHVibGljOgogICAgICBzdGF0
aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9f
cmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01fY19sb2Nh
bGVfY29sbGF0ZSA9IF9TX2NfbG9jYWxlOyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2xsYXRl
KF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZh
Y2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19sb2Nh
bGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xv
MSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8y
LCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jb21w
YXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg
ICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25z
dAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAgICAg
IGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAgICAg
IGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNvbnN0
OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hhclQq
LCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNvbGxh
dGUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfY29sbGF0ZSk7IH0K
CiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2NvbXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwg
Y29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fbG8y
LCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUK
ICAgICAgZG9fdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hp
KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgbG9uZwogICAgICBkb19oYXNoKGNvbnN0IF9DaGFyVCog
X19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgY29sbGF0ZTxfQ2hhclQ+OjppZDsKCgogIHRlbXBs
YXRlPD4KICAgIGludAogICAgY29sbGF0ZTxjaGFyPjo6X01fY29tcGFyZShjb25zdCBjaGFyKiwg
Y29uc3QgY2hhciopIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBzaXplX3QKICAgIGNvbGxhdGU8
Y2hhcj46Ol9NX3RyYW5zZm9ybShjaGFyKiwgY29uc3QgY2hhciosIHNpemVfdCkgY29uc3Q7CgoK
ICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8d2NoYXJfdD46Ol9NX2NvbXBhcmUoY29u
c3Qgd2NoYXJfdCosIGNvbnN0IHdjaGFyX3QqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6
ZV90CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV90cmFuc2Zvcm0od2NoYXJfdCosIGNvbnN0IHdj
aGFyX3QqLCBzaXplX3QpIGNvbnN0OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
Y2xhc3MgY29sbGF0ZV9ieW5hbWUgOiBwdWJsaWMgY29sbGF0ZTxfQ2hhclQ+CiAgICB7CiAgICBw
dWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp
Y19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxh
dGVfYnluYW1lKGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogY29s
bGF0ZTxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUo
X01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2NfbG9j
YWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwK
ICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNlCiAg
ewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5bWQs
IHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fdGlt
ZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5
cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh
clQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAgICBz
dGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoKICAg
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNoYXIqIF9NX25hbWVf
dGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0OwogICAgICBjb25z
dCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1l
X2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9k
YXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsKICAgICAgY29u
c3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9mb3JtYXQ7CgoK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTI7
CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk0
OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5
NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01f
ZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAgICBjb25zdCBf
Q2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7CiAgICAgIGNv
bnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwMTsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v
bnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29uc3QgX0NoYXJU
KiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDA4OwogICAg
ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgx
MDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBfQ2hhclQqIF9N
X21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAgICAgIGNvbnN0
IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwMzsK
ICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9DaGFyVCogX01f
bW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTA4Owog
ICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9t
b250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAgICBjb25zdCBf
Q2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIF9f
dGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz
KQogICAgICB7CiAgICAgICAgX01fbmFtZV90aW1lcHVuY3QgPSBuZXcgY2hhclsyXTsKICAgICAg
ICBzdHJjcHkoX01fbmFtZV90aW1lcHVuY3QsICJDIik7CiAgICAgICAgX01faW5pdGlhbGl6ZV90
aW1lcHVuY3QoKTsKICAgICAgfQoKICAgICAgZXhwbGljaXQKICAgICAgX190aW1lcHVuY3QoX19j
X2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAg
IDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX3RpbWVwdW5j
dCA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfdGlt
ZXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7CiAg
ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9DaGFyVCogX19zLCBzaXplX3QgX19tYXhs
ZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAgICAgICAgICBjb25zdCB0bSogX190bSkg
Y29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBf
X2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19kYXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7
CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2
b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX3RpbWUpIGNvbnN0CiAg
ICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGltZV9mb3JtYXQ7CiAgICAgICAgX190aW1l
WzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2Ft
cG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAogICAgICB7CiAgICAgICAgX19hbXBtWzBd
ID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01fcG07CiAgICAgIH0KCiAgICAgIHZvaWQK
ICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3QgX0NoYXJUKiogX19kdCkgY29uc3QKICAg
ICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0
WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg
X01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNvbnN0CiAgICAgIHsKICAgICAgICBfX2Rh
eXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheTI7CiAgICAgICAgX19k
YXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNbM10gPSBfTV9kYXk0OwogICAgICAgIF9f
ZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlzWzVdID0gX01fZGF5NjsKICAgICAgICBf
X2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX2RheXNfYWJi
cmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBjb25zdAogICAgICB7CiAgICAgICAgX19k
YXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5c1sxXSA9IF9NX2RheV9hMjsKICAgICAg
ICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAgX19kYXlzWzNdID0gX01fZGF5X2E0Owog
ICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAgICAgICBfX2RheXNbNV0gPSBfTV9kYXlf
YTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3OwogICAgICB9CgogICAgICB2b2lkCiAg
ICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21vbnRocykgY29uc3QKICAgICAgewogICAg
ICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAgICAgICBfX21vbnRoc1sxXSA9IF9NX21v
bnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aDAzOwogICAgICAgIF9fbW9udGhz
WzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRoc1s0XSA9IF9NX21vbnRoMDU7CiAgICAg
ICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAgICAgIF9fbW9udGhzWzZdID0gX01fbW9u
dGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21vbnRoMDg7CiAgICAgICAgX19tb250aHNb
OF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhzWzldID0gX01fbW9udGgxMDsKICAgICAg
ICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21v
bnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fbW9udGhzX2FiYnJldmlhdGVkKGNv
bnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAgICB7CiAgICAgICAgX19tb250aHNbMF0g
PSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNbMV0gPSBfTV9tb250aF9hMDI7CiAgICAg
ICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAgICAgICAgX19tb250aHNbM10gPSBfTV9t
b250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBfTV9tb250aF9hMDU7CiAgICAgICAgX19t
b250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAgX19tb250aHNbNl0gPSBfTV9tb250aF9h
MDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250aF9hMDg7CiAgICAgICAgX19tb250aHNb
OF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250aHNbOV0gPSBfTV9tb250aF9hMTA7CiAg
ICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTExOwogICAgICAgIF9fbW9udGhzWzExXSA9
IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+X190aW1lcHVuY3QoKQogICAgICB7CiAgICAgICAgZGVsZXRlIFtdIF9NX25hbWVfdGltZXB1
bmN0OwogICAgICAgIF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfdGltZXB1bmN0KTsK
ICAgICAgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xv
Y2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgbG9jYWxlOjppZCBfX3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4K
ICAgIGNvbnN0IGNoYXIqCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X1NfdGltZXpvbmVzWzE0XTsK
CiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX2luaXRpYWxp
emVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAog
ICAgX190aW1lcHVuY3Q8Y2hhcj46Ol9NX3B1dChjaGFyKiwgc2l6ZV90LCBjb25zdCBjaGFyKiwg
Y29uc3QgdG0qKSBjb25zdDsKCgogIHRlbXBsYXRlPD4KICAgIGNvbnN0IHdjaGFyX3QqCiAgICBf
X3RpbWVwdW5jdDx3Y2hhcl90Pjo6X1NfdGltZXpvbmVzWzE0XTsKCiAgdGVtcGxhdGU8PgogICAg
dm9pZAogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9f
Y19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgX190aW1lcHVuY3Q8
d2NoYXJfdD46Ol9NX3B1dCh3Y2hhcl90Kiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90KiwKICAgICAg
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
b25zdCBjaGFyKiBfTV9ncm91cGluZzsKICAgICAgY2hhcl90eXBlIF9NX2RlY2ltYWxfcG9pbnQ7
CiAgICAgIGNoYXJfdHlwZSBfTV90aG91c2FuZHNfc2VwOwogICAgICBjb25zdCBjaGFyX3R5cGUq
IF9NX2N1cnJfc3ltYm9sOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9NX3Bvc2l0aXZlX3NpZ247
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fbmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2Zy
YWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9NX3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01f
bmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qo
c2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5p
dGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qo
X19jX2xvY2FsZSBfX2Nsb2MsIGNvbnN0IGNoYXIqIF9fcywgc2l6ZV90IF9fcmVmcyA9IDApCiAg
ICAgIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1
bmN0KF9fY2xvYywgX19zKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIGRlY2ltYWxfcG9pbnQo
KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19kZWNpbWFsX3BvaW50KCk7IH0KCiAgICAg
IGNoYXJfdHlwZQogICAgICB0aG91c2FuZHNfc2VwKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fdGhvdXNhbmRzX3NlcCgpOyB9CgogICAgICBzdHJpbmcKICAgICAgZ3JvdXBpbmcoKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19ncm91cGluZygpOyB9CgogICAgICBzdHJpbmdf
dHlwZQogICAgICBjdXJyX3N5bWJvbCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2N1
cnJfc3ltYm9sKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHBvc2l0aXZlX3NpZ24oKSBj
b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NpdGl2ZV9zaWduKCk7IH0KCiAgICAgIHN0
cmluZ190eXBlCiAgICAgIG5lZ2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz
LT5kb19uZWdhdGl2ZV9zaWduKCk7IH0KCiAgICAgIGludAogICAgICBmcmFjX2RpZ2l0cygpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2ZyYWNfZGlnaXRzKCk7IH0KCiAgICAgIHBhdHRl
cm4KICAgICAgcG9zX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc19m
b3JtYXQoKTsgfQoKICAgICAgcGF0dGVybgogICAgICBuZWdfZm9ybWF0KCkgY29uc3QKICAgICAg
eyByZXR1cm4gdGhpcy0+ZG9fbmVnX2Zvcm1hdCgpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAg
ICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9wb2lu
dDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgpIGNv
bnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwgc3Ry
aW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBpbmc7
IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fY3Vycl9zeW1ib2woKSBjb25z
dAogICAgICB7IHJldHVybiBfTV9jdXJyX3N5bWJvbDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdf
dHlwZQogICAgICBkb19wb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fcG9z
aXRpdmVfc2lnbjsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19uZWdhdGl2
ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fbmVnYXRpdmVfc2lnbjsgfQoKICAgICAg
dmlydHVhbCBpbnQKICAgICAgZG9fZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiBf
TV9mcmFjX2RpZ2l0czsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX3Bvc19mb3Jt
YXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9wb3NfZm9ybWF0OyB9CgogICAgICB2aXJ0dWFs
IHBhdHRlcm4KICAgICAgZG9fbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX25l
Z19mb3JtYXQ7IH0KCgogICAgICAgdm9pZAogICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0
KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIF9fbmFtZSA9IF9fbnVsbCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBsb2NhbGU6OmlkIG1vbmV5cHVuY3Q8X0NoYXJU
LCBfSW50bD46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAg
ICBjb25zdCBib29sIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD46OmludGw7CgogIHRlbXBsYXRl
PD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRl
PD4KICAgIG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0
ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PGNoYXIsIHRydWU+OjpfTV9pbml0aWFsaXplX21v
bmV5cHVuY3QoX19jX2xvY2FsZSwgY29uc3QgY2hhciopOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk
CiAgICBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9f
Y19sb2NhbGUsIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8d2No
YXJfdCwgdHJ1ZT46On5tb25leXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIG1vbmV5cHVuY3Q8
d2NoYXJfdCwgZmFsc2U+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAg
ICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19j
X2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBjaGFyKik7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG1vbmV5cHVu
Y3Q8d2NoYXJfdCwgZmFsc2U+OjpfTV9pbml0aWFsaXplX21vbmV5cHVuY3QoX19jX2xvY2FsZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciopOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgog
ICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdDxfQ2hhclQsIF9J
bnRsPgogICAgewogICAgICBfX2NfbG9jYWxlIF9NX2NfbG9jYWxlX21vbmV5cHVuY3Q7CgogICAg
cHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFz
aWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
bnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShjb25z
dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0NoYXJU
LCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf
bG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0
KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2
aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9jX2xv
Y2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFtZTxf
Q2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgY2xhc3MgbW9uZXlfZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAg
IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw
ZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJU
PiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGlj
aXQKICAgICAgbW9uZXlfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19y
ZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90
eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdAogICAgICB7IHJl
dHVybiB0aGlzLT5kb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2VyciwgX191bml0
cyk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBl
IF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgICAgeyByZXR1
cm4gdGhpcy0+ZG9fZ2V0KF9fcywgX19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fZGlnaXRz
KTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlfZ2V0KCkgeyB9
CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRl
cl90eXBlIF9fZW5kLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3VuaXRzKSBjb25zdDsKCiAg
ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUgX19zLCBpdGVyX3R5
cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgIGlvc19i
YXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2Fs
ZTo6aWQgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbW9uZXlfcHV0IDogcHVibGlj
IGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKICAgICAgdHlwZWRlZiBi
YXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6Omlk
IGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgbW9uZXlfcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6
IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl
cl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgY2hhcl90
eXBlIF9fZmlsbCwgbG9uZyBkb3VibGUgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhp
cy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lvLCBfX2ZpbGwsIF9fdW5pdHMpOyB9CgogICAgICBp
dGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg
X19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGNvbnN0IHN0cmluZ190eXBlJiBfX2Rp
Z2l0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19pbnRsLCBfX2lv
LCBfX2ZpbGwsIF9fZGlnaXRzKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg
ICB+bW9uZXlfcHV0KCkgeyB9CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQo
aXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19m
aWxsLAogICAgICAgICAgICAgbG9uZyBkb3VibGUgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0
dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgICAgY29uc3Qgc3RyaW5n
X3R5cGUmIF9fZGlnaXRzKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9P
dXRJdGVyPjo6aWQ7CgoKICBzdHJ1Y3QgbWVzc2FnZXNfYmFzZQogIHsKICAgIHR5cGVkZWYgaW50
IGNhdGFsb2c7CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVz
c2FnZXMgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIG1lc3NhZ2VzX2Jhc2UKICAgIHsK
ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRl
ZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgoKICAg
ICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tZXNzYWdlczsKCgogICAgICBjaGFyKiBfTV9uYW1l
X21lc3NhZ2VzOwoKCiAgICBwdWJsaWM6CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAg
ICAgZXhwbGljaXQKICAgICAgbWVzc2FnZXMoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9j
YWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsKICAgICAgICBfTV9uYW1lX21lc3NhZ2VzID0gbmV3
IGNoYXJbMl07CiAgICAgICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsICJDIik7CiAgICAgICAg
X01fY19sb2NhbGVfbWVzc2FnZXMgPSBfU19jX2xvY2FsZTsKICAgICAgfQoKCiAgICAgIGV4cGxp
Y2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNp
emVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAg
ICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IG5ldyBjaGFyW3N0cmxlbihfX3MpICsgMV07CiAgICAg
ICAgc3RyY3B5KF9NX25hbWVfbWVzc2FnZXMsIF9fcyk7CiAgICAgICAgX01fY19sb2NhbGVfbWVz
c2FnZXMgPSBfU19jbG9uZV9jX2xvY2FsZShfX2Nsb2MpOwogICAgICB9CgogICAgICBjYXRhbG9n
CiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiBfX3MsIGNvbnN0IGxvY2FsZSYg
X19sb2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX29wZW4oX19zLCBfX2xvYyk7IH0K
CgogICAgICBjYXRhbG9nCiAgICAgIG9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29u
c3QgbG9jYWxlJiwgY29uc3QgY2hhciopIGNvbnN0OwoKICAgICAgc3RyaW5nX3R5cGUKICAgICAg
Z2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBjb25zdCBzdHJpbmdfdHlw
ZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19jLCBfX3NldCwgX19t
c2dpZCwgX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykgY29uc3QK
ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAg
ICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKQogICAgICAgewogICAgICAgICBkZWxldGUgW10g
X01fbmFtZV9tZXNzYWdlczsKICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2FsZShfTV9jX2xvY2Fs
ZV9tZXNzYWdlcyk7CiAgICAgICB9CgogICAgICB2aXJ0dWFsIGNhdGFsb2cKICAgICAgZG9fb3Bl
bihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmKSBjb25zdDsKCiAgICAg
IHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fZ2V0KGNhdGFsb2csIGludCwgaW50LCBjb25z
dCBzdHJpbmdfdHlwZSYgX19kZmF1bHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCB2b2lkCiAgICAg
IGRvX2Nsb3NlKGNhdGFsb2cpIGNvbnN0OwoKCiAgICAgIGNoYXIqCiAgICAgIF9NX2NvbnZlcnRf
dG9fY2hhcihjb25zdCBzdHJpbmdfdHlwZSYgX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19tc2cu
Y19zdHIoKSkpOwogICAgICB9CgoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgX01fY29udmVydF9m
cm9tX2NoYXIoY2hhciogX19tc2cpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6ZV90IF9fbGVu
ID0gY2hhcl90cmFpdHM8Y2hhcj46Omxlbmd0aChfX21zZykgLSAxOwojIDE3MzYgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRz
LmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUoKTsKICAgICAgfQogICAgIH07CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2FsZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6
aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAgIG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQo
Y2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYpIGNvbnN0OwoKCiAgdGVtcGxhdGU8Pgog
ICAgd3N0cmluZwogICAgbWVzc2FnZXM8d2NoYXJfdD46OmRvX2dldChjYXRhbG9nLCBpbnQsIGlu
dCwgY29uc3Qgd3N0cmluZyYpIGNvbnN0OwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9tZXNzYWdlc19t
ZW1iZXJzLmgiIDEgMwojIDM3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2k2ODYtcGMtbGludXgtZ251L2JpdHMvbWVzc2FnZXNfbWVtYmVycy5oIiAzCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0NoYXJUPjo6
Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6b3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hh
cj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgY2hhciogX19kaXIpIGNvbnN0CiAgICB7CiAgICAgIGJpbmR0ZXh0ZG9tYWluKF9fcy5j
X3N0cigpLCBfX2Rpcik7CiAgICAgIHJldHVybiB0aGlzLT5kb19vcGVuKF9fcywgX19sb2MpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB0eXBlbmFtZSBtZXNzYWdlczxf
Q2hhclQ+OjpjYXRhbG9nCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19vcGVuKGNvbnN0IGJhc2lj
X3N0cmluZzxjaGFyPiYgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBs
b2NhbGUmKSBjb25zdAogICAgewoKCiAgICAgIHRleHRkb21haW4oX19zLmNfc3RyKCkpOwogICAg
ICByZXR1cm4gMDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAog
ICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fY2xvc2UoY2F0YWxvZykgY29uc3QKICAgIHsgfQojIDE3
NTYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9s
b2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz
cyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVi
bGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNf
c3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdl
c19ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNz
YWdlczxfQ2hhclQ+KF9fcmVmcykKICAgICAgewogICAgICAgIGRlbGV0ZSBbXSBfTV9uYW1lX21l
c3NhZ2VzOwogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBuZXcgY2hhcltzdHJsZW4oX19zKSAr
IDFdOwogICAgICAgIHN0cmNweShfTV9uYW1lX21lc3NhZ2VzLCBfX3MpOwogICAgICAgIF9TX2Rl
c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbWVzc2FnZXMpOwogICAgICAgIF9TX2NyZWF0ZV9j
X2xvY2FsZShfTV9jX2xvY2FsZV9tZXNzYWdlcywgX19zKTsKICAgICAgfQoKICAgIHByb3RlY3Rl
ZDoKICAgICAgdmlydHVhbAogICAgICB+bWVzc2FnZXNfYnluYW1lKCkKICAgICAgeyB9CiAgICB9
OwoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp
c3NwYWNlKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2Vf
ZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNwcmlu
dChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0
PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6cHJpbnQsIF9fYyk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0No
YXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmNudHJsLCBfX2MpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3VwcGVyKF9DaGFyVCBf
X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjp1cHBlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbCBpc2xvd2VyKF9DaGFyVCBfX2MsIGNvbnN0
IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f
bG9jKS5pcyhjdHlwZV9iYXNlOjpsb3dlciwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNhbHBoYShfQ2hhclQgX19jLCBjb25zdCBsb2Nh
bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku
aXMoY3R5cGVfYmFzZTo6YWxwaGEsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
PgogICAgaW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf
X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0
eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg
IGlubGluZSBib29sCiAgICBpc3B1bmN0KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp
CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i
YXNlOjpwdW5jdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp
bmUgYm9vbAogICAgaXN4ZGlnaXQoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAg
IHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6
OnhkaWdpdCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg
Ym9vbAogICAgaXNhbG51bShfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy
ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6YWxu
dW0sIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK
ICAgIGlzZ3JhcGgoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu
IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OmdyYXBoLCBf
X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAg
IHRvdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVz
ZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvdXBwZXIoX19jKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgX0NoYXJUCiAgICB0b2xvd2VyKF9DaGFyVCBf
X2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0No
YXJUPiA+KF9fbG9jKS50b2xvd2VyKF9fYyk7IH0KfQojIDQyICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvYmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNw
YWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3NfYmFzZQogICAgewogICAgcHVibGljOgoK
ICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9U
cmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6
OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90
eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg
dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBvc3RyZWFt
YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5
cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1Zl9pdGVyPiBfX251bXB1dF90eXBlOwog
ICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3RlZDoKICAgICAgYmFzaWNfb3N0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7
CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7CiAgICAgIGJhc2ljX3N0cmVhbWJ1Zjxf
Q2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoKICAgICAgY29uc3QgX19jdHlwZV90eXBl
KiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1dF90eXBlKiBfTV9mbnVtcHV0OwoKICAg
ICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdldDsKCiAgICBwdWJsaWM6CiAgICAgIG9w
ZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNv
bnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3Ih
KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFpbCgpOyB9CgogICAgICBpb3N0YXRlCiAg
ICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJlYW1idWZfc3RhdGU7IH0K
CiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBfX3N0YXRlID0gZ29vZGJpdCk7CgogICAg
ICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVh
cih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoKICAgICAgYm9vbAogICAgICBnb29kKCkg
Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0ZSgpID09IDA7IH0KCiAgICAgIGJvb2wK
ICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJp
dCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4g
KHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgYm9v
bAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgYmFk
Yml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAgIGV4Y2VwdGlvbnMoKSBjb25zdAogICAg
ICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAgIHZvaWQKICAgICAgZXhjZXB0aW9ucyhp
b3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhjZXB0aW9uID0gX19leGNlcHQ7
CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRlKTsKICAgICAgfQoKCiAgICAg
IGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAg
dmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90aWU7IH0K
CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIpCiAgICAgIHsKICAgICAgICBiYXNpY19v
c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fdGllOwogICAgICAgIF9NX3RpZSA9
IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry
ZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1
cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRz
PioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoK
ICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoK
ICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFf
TV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRl
bignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQgPSB0cnVlOwogICAgICAgICAgfQogICAg
ICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZmlsbChj
aGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNoYXJfdHlwZSBfX29sZCA9IHRoaXMtPmZp
bGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAgICAgICByZXR1cm4gX19vbGQ7CiAgICAg
IH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogICAg
ICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsK
CiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3Q7CgogICAgcHJvdGVj
dGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFzZSgpCiAgICAgIHsgfQoKICAgICAgdm9p
ZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKTsKCiAg
ICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29uc3QgbG9jYWxlOjpmYWNldCogX19mKSBj
b25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAgICAgICAgICBfX3Rocm93X2JhZF9jYXN0
KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fY2Fj
aGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwogICAgfTsKfQoKCgojIDEgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9iYXNpY19pb3MudGNj
IiAxIDMKIyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hh
clQsIF9UcmFpdHM+OjpjbGVhcihpb3N0YXRlIF9fc3RhdGUpCiAgICB7CiAgICAgIGlmICh0aGlz
LT5yZGJ1ZigpKQogICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGU7CiAgICAgIGVs
c2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAgICAg
IGlmICgodGhpcy0+cmRzdGF0ZSgpICYgdGhpcy0+ZXhjZXB0aW9ucygpKSkKICAgICAgICBfX3Ro
cm93X2lvc19mYWlsdXJlKCJiYXNpY19pb3M6OmNsZWFyKGlvc3RhdGUpIGNhdXNlZCBleGNlcHRp
b24iKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz
PgogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICBiYXNpY19pb3M8X0No
YXJULCBfVHJhaXRzPjo6cmRidWYoYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9f
c2IpCiAgICB7CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX29sZCA9
IF9NX3N0cmVhbWJ1ZjsKICAgICAgX01fc3RyZWFtYnVmID0gX19zYjsKICAgICAgdGhpcy0+Y2xl
YXIoKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19y
aHMpCiAgICB7CgoKCgogICAgICBfV29yZHMqIF9fd29yZHMgPSAoX19yaHMuX01fd29yZF9zaXpl
IDw9IF9TX2xvY2FsX3dvcmRfc2l6ZSkgPwogICAgICAgIF9NX2xvY2FsX3dvcmQgOiBuZXcgX1dv
cmRzW19fcmhzLl9NX3dvcmRfc2l6ZV07CgoKICAgICAgX0NhbGxiYWNrX2xpc3QqIF9fY2IgPSBf
X3Jocy5fTV9jYWxsYmFja3M7CiAgICAgIGlmIChfX2NiKQogICAgICAgIF9fY2ItPl9NX2FkZF9y
ZWZlcmVuY2UoKTsKICAgICAgX01fY2FsbF9jYWxsYmFja3MoZXJhc2VfZXZlbnQpOwogICAgICBp
ZiAoX01fd29yZCAhPSBfTV9sb2NhbF93b3JkKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBb
XSBfTV93b3JkOwogICAgICAgICAgX01fd29yZCA9IDA7CiAgICAgICAgfQogICAgICBfTV9kaXNw
b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp
bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9zaXplOyArK19faSkKICAgICAgICBfX3dv
cmRzW19faV0gPSBfX3Jocy5fTV93b3JkW19faV07CiAgICAgIGlmIChfTV93b3JkICE9IF9NX2xv
Y2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAgICAg
ICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX3dvcmQgPSBfX3dvcmRzOwogICAgICBf
TV93b3JkX3NpemUgPSBfX3Jocy5fTV93b3JkX3NpemU7CgogICAgICB0aGlzLT5mbGFncyhfX3Jo
cy5mbGFncygpKTsKICAgICAgdGhpcy0+d2lkdGgoX19yaHMud2lkdGgoKSk7CiAgICAgIHRoaXMt
PnByZWNpc2lvbihfX3Jocy5wcmVjaXNpb24oKSk7CiAgICAgIHRoaXMtPnRpZShfX3Jocy50aWUo
KSk7CiAgICAgIHRoaXMtPmZpbGwoX19yaHMuZmlsbCgpKTsKCiAgICAgIHRoaXMtPmV4Y2VwdGlv
bnMoX19yaHMuZXhjZXB0aW9ucygpKTsKCiAgICAgIF9NX2NhbGxfY2FsbGJhY2tzKGNvcHlmbXRf
ZXZlbnQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNoYXIKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9U
cmFpdHM+OjpuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29uc3QKICAgIHsK
ICAgICAgY2hhciBfX3JldCA9IF9fZGZhdWx0OwogICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01f
ZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlwZS0+bmFycm93KF9fYywgX19kZmF1bHQp
OwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIF9DaGFyVAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz46OndpZGVuKGNoYXIgX19jKSBjb25zdAogICAgewogICAgICBjaGFyX3R5cGUgX19yZXQgPSBj
aGFyX3R5cGUoKTsKICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZjdHlwZSkpCiAgICAgICAg
X19yZXQgPSBfTV9mY3R5cGUtPndpZGVuKF9fYyk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0K
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGxvY2Fs
ZQogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmltYnVlKGNvbnN0IGxvY2FsZSYgX19s
b2MpCiAgICB7CiAgICAgIGxvY2FsZSBfX29sZCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgIGlvc19i
YXNlOjppbWJ1ZShfX2xvYyk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfX2xvYyk7CiAgICAgIGlm
ICh0aGlzLT5yZGJ1ZigpICE9IDApCiAgICAgICAgdGhpcy0+cmRidWYoKS0+cHViaW1idWUoX19s
b2MpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHZvaWQKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFp
dHM+Ojppbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiKQogICAgewoK
ICAgICAgaW9zX2Jhc2U6Ol9NX2luaXQoKTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9NX2lvc19s
b2NhbGUpOwogICAgICBfTV90aWUgPSAwOwojIDE1OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy50Y2MiIDMKICAgICAgX01fZmls
bCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBmYWxzZTsKCiAgICAgIF9NX2V4Y2Vw
dGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAgIF9NX3N0cmVh
bWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8
X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg
ICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAgICAgICAgX01f
ZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9fbG9jKTsKICAgICAgZWxzZQogICAg
ICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9f
bG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xv
Yyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0gMDsKICAgICAgaWYgKGhhc19mYWNl
dDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01fZm51bWdldCA9ICZ1c2VfZmFjZXQ8
X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAgICAgICAgX01fZm51bWdldCA9IDA7
CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pb3M8Y2hhcj47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90PjsKfQojIDIwOCAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2Jhc2ljX2lvcy5oIiAy
IDMKIyA1MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9p
b3MiIDIgMwojIDQ2ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL29zdHJlYW0iIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX29zdHJlYW0gOiB2aXJ0dWFs
IHB1YmxpYyBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg
ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFp
dHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBv
c190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBl
IG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlw
ZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+IF9faW9zX3R5cGU7CiAgICAg
IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog
ICAgICB0eXBlZGVmIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJl
YW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0
ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAgIHR5cGVkZWYgY3R5cGU8X0NoYXJUPiBfX2N0eXBlX3R5
cGU7CgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmVhbShfX3N0cmVhbWJ1Zl90eXBl
KiBfX3NiKQogICAgICB7IHRoaXMtPmluaXQoX19zYik7IH0KCiAgICAgIHZpcnR1YWwKICAgICAg
fmJhc2ljX29zdHJlYW0oKSB7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBj
bGFzcyBzZW50cnk7CgoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KF9f
b3N0cmVhbV90eXBlJiAoKl9fcGYpKF9fb3N0cmVhbV90eXBlJikpOwoKICAgICAgX19vc3RyZWFt
X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikp
OwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW9zX2Jhc2UmICgqX19w
ZikgKGlvc19iYXNlJikpOwoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8
KGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln
bmVkIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGJv
b2wgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHNob3J0IF9f
bikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdz
KCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpv
Y3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJh
dG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX19uKSkpOwogICAgICAgIGVs
c2UKICAgICAgICAgIHJldHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGxvbmc+KF9f
bikpOwogICAgICB9CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PCh1bnNp
Z25lZCBzaG9ydCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nh
c3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KGludCBfX24pCiAgICAgIHsKICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19m
bXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICBpZiAoX19m
bXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgIHJl
dHVybiB0aGlzLT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PihfX24p
KSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGlj
X2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBv
cGVyYXRvcjw8KHVuc2lnbmVkIGludCBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9y
PDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKSk7IH0KCgogICAgICBfX29zdHJlYW1f
dHlwZSYKICAgICAgb3BlcmF0b3I8PChsb25nIGxvbmcgX19uKTsKCiAgICAgIF9fb3N0cmVhbV90
eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgbG9uZyBfX24pOwoKCiAgICAgIF9f
b3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGRvdWJsZSBfX2YpOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZmxvYXQgX19mKQogICAgICB7IHJldHVybiB0aGlz
LT5vcGVyYXRvcjw8KHN0YXRpY19jYXN0PGRvdWJsZT4oX19mKSk7IH0KCiAgICAgIF9fb3N0cmVh
bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fZik7CgogICAgICBfX29zdHJl
YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX3ApOwoKICAgICAgX19vc3Ry
ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19zdHJlYW1idWZfdHlwZSogX19zYik7CgoKICAg
ICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHB1dChjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9fb3N0
cmVhbV90eXBlJgogICAgICB3cml0ZShjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBf
X24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIGZsdXNoKCk7CgoKICAgICAgcG9zX3R5
cGUKICAgICAgdGVsbHAoKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChwb3Nf
dHlwZSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgc2Vla3Aob2ZmX3R5cGUsIGlvc19i
YXNlOjpzZWVrZGlyKTsKICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz
ZW50cnkKICAgIHsKCiAgICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LF9UcmFpdHM+JiBfTV9vczsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRy
eShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkK
ICAgICAgewoKICAgICAgICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYm
ICF1bmNhdWdodF9leGNlcHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9v
cy5yZGJ1ZigpICYmIF9NX29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAg
ICBfTV9vcy5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoK
ICAgICAgb3BlcmF0b3IgYm9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYgX19vdXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNo
YXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4m
CiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFy
IF9fYyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFy
LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYg
X19vdXQsIHNpZ25lZCBjaGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2Fz
dDxjaGFyPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0
cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf
VHJhaXRzPiYgX19vdXQsIHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8
IHN0YXRpY19jYXN0PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3Qg
X0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp
dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoK
CiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBj
b25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9f
b3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRl
PGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9w
ZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2ln
bmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNv
bnN0IGNoYXIqPihfX3MpKTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChf
X29zLnB1dChfX29zLndpZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgZW5kcyhiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVy
biBfX29zLnB1dChfQ2hhclQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1
c2goYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19v
cy5mbHVzaCgpOyB9Cgp9CgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvb3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvaG9tZS9iYW5nZXJ0
aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvb3N0cmVhbS50Y2MiIDMKCiMg
MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9sb2NhbGUi
IDEgMwojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2xvY2FsZSIgMwoKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl
L2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMSAzCiMgMzcgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIg
MwoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Nl
cnJubyIgMSAzCiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvY2Vycm5vIiAzCgojIDEgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAxIDMgNAojIDMyICIv
dXNyL2luY2x1ZGUvZXJybm8uaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2Vycm5vLmgiIDEgMyA0CiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMg
NAojIDEgIi91c3IvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxIDMgNAoKCgojIDEgIi91c3IvaW5j
bHVkZS9hc20vZXJybm8uaCIgMSAzIDQKIyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIg
MiAzIDQKIyAyNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMiAzIDQKIyAzNiAiL3Vzci9p
bmNsdWRlL2JpdHMvZXJybm8uaCIgMyA0CmV4dGVybiBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAq
X19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMiAzIDQKIyA1NSAiL3Vzci9pbmNsdWRl
L2Vycm5vLmgiIDMgNApleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9n
cmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8u
aCIgMyA0CnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgNDkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvY2Vycm5vIiAyIDMKIyAzOSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy
IDMKCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Y21hdGgiIDEgMwojIDQ4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2NtYXRoIiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMSAzIDQKIyAyOSAi
L3Vzci9pbmNsdWRlL21hdGguaCIgMyA0CmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVk
ZS9iaXRzL2h1Z2VfdmFsLmgiIDEgMyA0CiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbmFuLmgiIDEgMyA0CiMgMzggIi91c3IvaW5jbHVk
ZS9tYXRoLmgiIDIgMyA0CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMyA0
CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhkZWYuaCIgMyA0CnR5cGVkZWYgbG9uZyBkb3Vi
bGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBkb3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5j
bHVkZS9tYXRoLmgiIDIgMyA0CiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMgNAojIDU0ICIvdXNyL2luY2x1ZGUvYml0
cy9tYXRoY2FsbHMuaCIgMyA0CmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBk
b3VibGUgYXNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVy
biBkb3VibGUgYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZG91YmxlIF9fYXRhbjIgKGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy
biBkb3VibGUgY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSB0YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBk
b3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3Np
bmNvcyAoZG91YmxlIF9feCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAo
KTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5o
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gp
IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0
ZXJuIGRvdWJsZSBfX3RhbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91Ymxl
IGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3Vi
bGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGRvdWJsZSBhdGFuaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFu
aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgoKZXh0ZXJuIGRvdWJsZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi
bGUgX19leHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChk
b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0
aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9u
ZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9f
ZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGlu
dCBfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194
LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBf
X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZG91YmxlIGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX2xvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRv
dWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYg
KGRvdWJsZSBfX3gsIGRvdWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBl
eHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7IGV4dGVybiBkb3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGRvdWJsZSBsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2Ig
KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBkb3VibGUgbG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUg
X19sb2cyIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRv
dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3Vi
bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJs
ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBkb3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX2NicnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91Ymxl
IGNlaWwgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91Ymxl
IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAo
KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRv
dWJsZSBmbG9vciAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAo
ZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBk
b3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRv
dWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19m
aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1
ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBkb3VibGUg
ZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19k
cmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBz
aWduaWZpY2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zaWduaWZp
Y2FuZCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNvcHlzaWduIChk
b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19jb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGRvdWJsZSBuYW4g
KF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7IGV4dGVybiBkb3VibGUgX19uYW4gKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJs
ZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVy
biBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBqMCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2owIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91YmxlIGoxIChkb3VibGUpIHRo
cm93ICgpOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3Vi
bGUgam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2puIChpbnQsIGRv
dWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVy
biBkb3VibGUgX195MCAoZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MSAoZG91Ymxl
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
ZG91YmxlIHluIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX195biAoaW50
LCBkb3VibGUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZXJmIChkb3VibGUpIHRocm93ICgpOwpleHRlcm4gZG91Ymxl
IGVyZmMgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIHRo
cm93ICgpOwpleHRlcm4gZG91YmxlIGxnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRv
dWJsZSBfX2xnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSB0Z2FtbWEg
KGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX190Z2FtbWEgKGRvdWJsZSkgdGhyb3cg
KCk7CgoKCgpleHRlcm4gZG91YmxlIGdhbW1hIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91
YmxlIF9fZ2FtbWEgKGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBkb3VibGUgbGdhbW1h
X3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xn
YW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBk
b3VibGUgcmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19yaW50IChk
b3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG5leHRhZnRlciAoZG91YmxlIF9f
eCwgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRl
cm4gZG91YmxlIF9fbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gZG91YmxlIG5leHR0b3dhcmQgKGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u
c3RfXykpOyBleHRlcm4gZG91YmxlIF9fbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3Vi
bGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4dGVybiBk
b3VibGUgcmVtYWluZGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJu
IGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoK
CmV4dGVybiBkb3VibGUgc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fc2NhbGIgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX24pIHRocm93ICgpOwoK
CgoKZXh0ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBl
eHRlcm4gZG91YmxlIF9fc2NhbGJuIChkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGludCBpbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9n
YiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibG4gKGRvdWJs
ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYmxuIChk
b3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIG5lYXJi
eWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19uZWFyYnlpbnQgKGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHJvdW5kIChkb3VibGUgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3JvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK
ZXh0ZXJuIGRvdWJsZSB0cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOyBleHRlcm4gZG91YmxlIF9fdHJ1bmMgKGRvdWJsZSBfX3gpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBkb3VibGUgcmVtcXVvIChk
b3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs
ZSBfX3JlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7
CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGludCBfX2xyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9u
ZyBpbnQgbGxyaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg
X19sbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5k
IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kIChkb3VibGUg
X194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91YmxlIF9feCkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZCAoZG91YmxlIF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBkb3VibGUgZmRpbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhy
b3cgKCk7IGV4dGVybiBkb3VibGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv
dyAoKTsKCgpleHRlcm4gZG91YmxlIGZtYXggKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpOyBleHRlcm4gZG91YmxlIF9fZm1heCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGRvdWJsZSBfX2ZtaW4gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp
OwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAg
ICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0IChk
b3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7
CgoKCmV4dGVybiBkb3VibGUgZm1hIChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196
KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwg
ZG91YmxlIF9feikgdGhyb3cgKCk7CiMgNjQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMg
ODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMgNAojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj
YWxscy5oIiAxIDMgNAojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMyA0CmV4
dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv
c2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0
ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19hdGFu
ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYgKGZsb2F0IF9feSwg
ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChmbG9hdCBfX3ksIGZs
b2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0IF9feCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv
YXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2luZiAoZmxvYXQg
X194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBz
aW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nvc3gpIHRocm93ICgp
OyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9fc2lueCwgZmxvYXQg
Kl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl
cm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Npbmhm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChmbG9hdCBfX3gpIHRo
cm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYWNv
c2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5oZiAoZmxvYXQgX194
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoK
ZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f
YXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBleHBmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxv
YXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgcG93MTBmIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50
KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gsIGludCAqX19leHBv
bmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQgX194LCBpbnQgX19l
eHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194LCBpbnQg
X19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZsb2F0IF9feCkgdGhy
b3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu
IGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbG9nMTBm
IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAoZmxvYXQgX194LCBm
bG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYgKGZsb2F0IF9feCwg
ZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBtMWYgKGZsb2F0IF9f
eCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg
X19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2JmIChmbG9h
dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQgX194KSB0aHJvdyAo
KTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxvYXQgX194KSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp
OwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0
IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBoeXBvdGYgKGZs
b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9faHlwb3RmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgY2JydGYgKGZsb2F0
IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIHRocm93ICgp
OwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBmYWJzZiAo
ZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBm
bG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0
X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGZtb2Rm
IChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChm
bG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXNpbmZmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJv
dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBmaW5pdGVmIChm
bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0
ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBm
bG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBm
bG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3Np
Z25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBjb3B5c2ln
bmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z
dF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo
cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBmbG9hdCBuYW5m
IChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOyBleHRlcm4gZmxvYXQgX19uYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkg
X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFuZiAoZmxv
YXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f
Y29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs
b2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYgKGZsb2F0KSB0aHJv
dyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBq
bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQp
IHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChmbG9hdCkgdGhyb3cg
KCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeW5m
IChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSB0
aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g
ZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQp
IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4g
ZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmIChm
bG9hdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9h
dCBnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2FtbWFmIChmbG9hdCkg
dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9fc2ln
bmdhbXApIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZsb2F0LCBpbnQgKl9f
c2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYgKGZsb2F0IF9feCkg
dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0YWZ0ZXJmIChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK
ZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0dG93
YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g
KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAoZmxvYXQgX194LCBm
bG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChmbG9hdCBfX3gsIGZs
b2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9h
dCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZsb2F0IF9feCwgaW50
IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0IF9feCwgaW50IF9f
bikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0
IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9h
dCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVy
biBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19u
ZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChm
bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZsb2F0IF9feCkgdGhy
b3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRy
aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2YgKGZsb2F0IF9feCkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IHJl
bXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJu
IGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl
eHRlcm4gbG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n
IGxvbmcgaW50IGxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcg
aW50IF9fbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgaW50IGxy
b3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyb3VuZGYgKGZs
b2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91bmRmIChmbG9hdCBf
X3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRmIChmbG9hdCBfX3gp
IHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0
aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv
dyAoKTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAo
KTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsK
CgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0
ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0
ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0
cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGYgKGZsb2F0IF9f
dmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl
cm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgdGhyb3cgKCk7
IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBmbG9hdCBfX3opIHRo
cm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMgNAojIDk5ICIvdXNyL2luY2x1
ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzIDQK
IyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMgNApleHRlcm4gbG9uZyBkb3Vi
bGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2Fjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFz
aW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lu
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25n
IGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2F0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoK
CmV4dGVybiBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n
IGRvdWJsZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk
b3VibGUgdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl
IF9fdGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29z
bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19j
b3N4KSB0aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpl
eHRlcm4gbG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVy
biBsb25nIGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJu
IGxvbmcgZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u
ZyBkb3VibGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25n
IGRvdWJsZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91
YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRv
dWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs
ZSBfX2Fjb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs
ZSBhc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2FzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBh
dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0
YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUg
ZXhwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw
bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChs
b25nIGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw
b25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91Ymxl
IF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2ds
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxv
bmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcg
ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv
dWJsZSBfX21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK
CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4
dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4
dGVybiBsb25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4
dGVybiBsb25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9u
ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcg
ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRv
dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf
X2h5cG90bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoK
ZXh0ZXJuIGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl
cm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRl
cm4gbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1
dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3Vi
bGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxv
bmcgZG91YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25n
IGRvdWJsZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192
YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQg
X19maW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo
X19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRl
bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf
XykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv
dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3Vi
bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg
c2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19zaWduaWZpY2FuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4g
bG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg
dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUg
X19jb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf
X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFubCAo
X19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmFubCAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgX19pc25hbmwg
KGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKZXh0ZXJuIGludCBpc25hbmwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9f
YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgajBsIChsb25n
IGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2owbCAobG9uZyBkb3VibGUp
IHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX2oxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4g
bG9uZyBkb3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg
ZG91YmxlIF9fam5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91
YmxlIHkwbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHkxbCAobG9uZyBkb3Vi
bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195MWwgKGxvbmcgZG91YmxlKSB0aHJv
dyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7
IGV4dGVybiBsb25nIGRvdWJsZSBfX3lubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoK
CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu
IGxvbmcgZG91YmxlIF9fZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBk
b3VibGUgZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f
ZXJmY2wgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWwg
KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbCAobG9u
ZyBkb3VibGUpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdGdhbW1hbCAobG9uZyBk
b3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJs
ZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZ2FtbWFsIChsb25nIGRvdWJsZSkg
dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2dhbW1hbCAobG9uZyBkb3VibGUpIHRocm93
ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbF9yIChsb25nIGRvdWJsZSwgaW50
ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGdhbW1hbF9yIChs
b25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcg
ZG91YmxlIHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19yaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3Vi
bGUgbmV4dGFmdGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgp
IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dGFm
dGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmli
dXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0dG93YXJkbCAobG9u
ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf
X2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmV4dHRvd2FyZGwgKGxvbmcgZG91Ymxl
IF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f
KSk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1haW5kZXJsIChsb25nIGRvdWJsZSBfX3gsIGxv
bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JlbWFpbmRlcmwg
KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxv
bmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIHRocm93
ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk
b3VibGUgX19uKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYm5sIChsb25n
IGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2Fs
Ym5sIChsb25nIGRvdWJsZSBfX3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGls
b2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2dibCAobG9u
ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBzY2FsYmxubCAo
bG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi
bGUgX19zY2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIHRocm93ICgpOwoK
CgpleHRlcm4gbG9uZyBkb3VibGUgbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1
bmNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSwgaW50ICpfX3F1bykgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Jl
bXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBpbnQgKl9fcXVvKSB0aHJv
dyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv
dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCk7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp
OyBleHRlcm4gbG9uZyBpbnQgX19scm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwpl
eHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg
ZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo
KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZkaW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZkaW1sIChsb25nIGRvdWJs
ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZt
YXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBs
b25nIGRvdWJsZSBfX2ZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhy
b3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZtaW5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcg
ZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNs
YXNzaWZ5bCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9f
ICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3Zh
bHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJu
IGxvbmcgZG91YmxlIGZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25n
IGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWFsIChsb25nIGRv
dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsKIyAx
MDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMyA0CiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5o
IiAzIDQKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMyA0
CmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBfWkVSTywKCiAg
ICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNyL2luY2x1ZGUv
bWF0aC5oIiAzIDQKdHlwZWRlZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hP
UEVOXywKICBfUE9TSVhfLAogIF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJu
IF9MSUJfVkVSU0lPTl9UWVBFIF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDMgNApzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIg
Km5hbWU7CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZh
bDsKICB9OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4Yykg
dGhyb3cgKCk7CiMgMzUwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzIDQKIyAxICIvdXNyL2luY2x1
ZGUvYml0cy9tYXRoaW5saW5lLmgiIDEgMyA0CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRo
aW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQKX19zaWduYml0ZiAoZmxvYXQgX194KSB0aHJvdyAo
KQp7CiAgX19leHRlbnNpb25fXyB1bmlvbiB7IGZsb2F0IF9fZjsgaW50IF9faTsgfSBfX3UgPSB7
IF9fZjogX194IH07CiAgcmV0dXJuIF9fdS5fX2kgPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25i
aXQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgZG91Ymxl
IF9fZDsgaW50IF9faVsyXTsgfSBfX3UgPSB7IF9fZDogX194IH07CiAgcmV0dXJuIF9fdS5fX2lb
MV0gPCAwOwp9Cl9faW5saW5lIGludApfX3NpZ25iaXRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93
ICgpCnsKICBfX2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX19sOyBpbnQgX19pWzNd
OyB9IF9fdSA9IHsgX19sOiBfX3ggfTsKICByZXR1cm4gKF9fdS5fX2lbMl0gJiAweDgwMDApICE9
IDA7Cn0KIyAyOTEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5l
IGRvdWJsZSBfX3NnbiAoZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgZG91YmxlIF9fc2duIChk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX3ggPT0gMC4wID8gMC4wIDogKF9feCA+IDAu
MCA/IDEuMCA6IC0xLjApOyB9IF9faW5saW5lIGZsb2F0IF9fc2duZiAoZmxvYXQpIHRocm93ICgp
OyBfX2lubGluZSBmbG9hdCBfX3NnbmYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX194
ID09IDAuMCA/IDAuMCA6IChfX3ggPiAwLjAgPyAxLjAgOiAtMS4wKTsgfSBfX2lubGluZSBsb25n
IGRvdWJsZSBfX3NnbmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgX19pbmxpbmUgbG9uZyBkb3Vi
bGUgX19zZ25sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmV0dXJuIF9feCA9PSAwLjAg
PyAwLjAgOiAoX194ID4gMC4wID8gMS4wIDogLTEuMCk7IH0KIyA0MjUgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwg
ZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2Fz
bSBfX3ZvbGF0aWxlX18gKCJmcGF0YW4iIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1
IiAoX195KSA6ICJzdCgxKSIpOyByZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBhdGFu
MmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91Ymxl
IF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChfX3ZhbHVlKSA6
ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5s
aW5lIGxvbmcgZG91YmxlIGF0YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gp
IHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGls
ZV9fICgiZnBhdGFuIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAi
c3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgX19hdGFuMmwg
KGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZwYXRhbiIgOiAiPXQiIChf
X3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogInN0KDEpIik7IHJldHVybiBfX3ZhbHVl
OyB9CgoKX19pbmxpbmUgZG91YmxlIGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93
ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgi
MToJZnByZW1cblx0IiAiZm5zdHN3CSUlYXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQi
IChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImF4IiwgImNjIik7IHJldHVybiBf
X3ZhbHVlOyB9IF9faW5saW5lIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhy
b3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX2FzbSBfX3ZvbGF0aWxlX18g
KCIxOglmcHJlbVxuXHQiICJmbnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiYXgiLCAiY2MiKTsgcmV0dXJu
IF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwg
bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtXG5cdCIgImZuc3RzdwklJWF4XG5cdCIgInNh
aGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6
ICJheCIsICJjYyIpOyByZXR1cm4gX192YWx1ZTsgfQojIDQ0MCAiL3Vzci9pbmNsdWRlL2JpdHMv
bWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93
ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fcmVzdWx0OyBfX2FzbSBfX3ZvbGF0aWxlX18gKCJmc3Fy
dCIgOiAiPXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkpOyByZXR1cm4gX19yZXN1bHQ7IH0gX19p
bmxpbmUgZmxvYXQgc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBmbG9hdCBf
X3Jlc3VsdDsgX19hc20gX192b2xhdGlsZV9fICgiZnNxcnQiIDogIj10IiAoX19yZXN1bHQpIDog
IjAiIChfX3gpKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxvbmcgZG91YmxlIHNxcnRs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1
bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAo
X194KSk7IHJldHVybiBfX3Jlc3VsdDsgfQpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NxcnRsIChs
b25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX19yZXN1bHQ7
IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZzcXJ0IiA6ICI9dCIgKF9fcmVzdWx0KSA6ICIwIiAoX194
KSk7IHJldHVybiBfX3Jlc3VsdDsgfQoKCl9faW5saW5lIGRvdWJsZSBmYWJzIChkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFicyAoX194KTsgfQpfX2lubGluZSBmbG9h
dCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YgKF9f
eCk7IH0KX19pbmxpbmUgbG9uZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsIChfX3gpOyB9Cl9faW5saW5lIGxvbmcgZG91Ymxl
IF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNsIChfX3gpOyB9CiMgNDY2ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApf
X2lubGluZSBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3Vi
bGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChf
X3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5s
aW5lIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgZmxvYXQgX19y
ZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAiPXQiIChfX3Jlc3Vs
dCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9IF9faW5saW5lIGxv
bmcgZG91YmxlIGF0YW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9u
ZyBkb3VibGUgX19yZXN1bHQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZDE7IGZwYXRhbiIgOiAi
PXQiIChfX3Jlc3VsdCkgOiAiMCIgKF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fcmVzdWx0OyB9
CgpfX2lubGluZSBsb25nIGRvdWJsZSBfX3NnbjFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IF9f
aW5saW5lIGxvbmcgZG91YmxlIF9fc2duMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyBf
X2V4dGVuc2lvbl9fIHVuaW9uIHsgbG9uZyBkb3VibGUgX194bGQ7IHVuc2lnbmVkIGludCBfX3hp
WzNdOyB9IF9fbiA9IHsgX194bGQ6IF9feCB9OyBfX24uX194aVsyXSA9IChfX24uX194aVsyXSAm
IDB4ODAwMCkgfCAweDNmZmY7IF9fbi5fX3hpWzFdID0gMHg4MDAwMDAwMDsgX19uLl9feGlbMF0g
PSAwOyByZXR1cm4gX19uLl9feGxkOyB9CiMgNDkyICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5s
aW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUgZmxvb3IgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsg
cmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBp
bnQgX19jdzsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192
b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAiPW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4
ZjNmZikgfCAweDA0MDA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19j
d3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIw
IiAoX194KSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyBy
ZXR1cm4gX192YWx1ZTsgfSBfX2lubGluZSBmbG9hdCBmbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNo
b3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBfX2N3dG1wOyBfX2Fz
bSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19jd3RtcCA9IChfX2N3
ICYgMHhmM2ZmKSB8IDB4MDQwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0i
IChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9dCIgKF9fdmFsdWUp
IDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6IDogIm0iIChfX2N3
KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGZsb29ybCAobG9uZyBk
b3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9s
YXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQg
aW50IF9fY3d0bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykp
OyBfX2N3dG1wID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwNDAwOyBfX2FzbSBfX3ZvbGF0aWxlICgi
ZmxkY3cgJTAiIDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQi
IDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cg
JTAiIDogOiAibSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1MDMgIi91c3IvaW5jbHVk
ZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBjZWlsIChkb3VibGUgX194
KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fdm9sYXRpbGUgdW5z
aWduZWQgc2hvcnQgaW50IF9fY3c7IF9fdm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgaW50IF9fY3d0
bXA7IF9fYXNtIF9fdm9sYXRpbGUgKCJmbnN0Y3cgJTAiIDogIj1tIiAoX19jdykpOyBfX2N3dG1w
ID0gKF9fY3cgJiAweGYzZmYpIHwgMHgwODAwOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAi
IDogOiAibSIgKF9fY3d0bXApKTsgX19hc20gX192b2xhdGlsZSAoImZybmRpbnQiIDogIj10IiAo
X192YWx1ZSkgOiAiMCIgKF9feCkpOyBfX2FzbSBfX3ZvbGF0aWxlICgiZmxkY3cgJTAiIDogOiAi
bSIgKF9fY3cpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgY2VpbGYgKGZsb2F0
IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyBfX3ZvbGF0aWxl
IHVuc2lnbmVkIHNob3J0IGludCBfX2N3OyBfX3ZvbGF0aWxlIHVuc2lnbmVkIHNob3J0IGludCBf
X2N3dG1wOyBfX2FzbSBfX3ZvbGF0aWxlICgiZm5zdGN3ICUwIiA6ICI9bSIgKF9fY3cpKTsgX19j
d3RtcCA9IChfX2N3ICYgMHhmM2ZmKSB8IDB4MDgwMDsgX19hc20gX192b2xhdGlsZSAoImZsZGN3
ICUwIiA6IDogIm0iIChfX2N3dG1wKSk7IF9fYXNtIF9fdm9sYXRpbGUgKCJmcm5kaW50IiA6ICI9
dCIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgX19hc20gX192b2xhdGlsZSAoImZsZGN3ICUwIiA6
IDogIm0iIChfX2N3KSk7IHJldHVybiBfX3ZhbHVlOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGNl
aWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgX192b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCBpbnQgX19jdzsgX192b2xhdGlsZSB1bnNp
Z25lZCBzaG9ydCBpbnQgX19jd3RtcDsgX19hc20gX192b2xhdGlsZSAoImZuc3RjdyAlMCIgOiAi
PW0iIChfX2N3KSk7IF9fY3d0bXAgPSAoX19jdyAmIDB4ZjNmZikgfCAweDA4MDA7IF9fYXNtIF9f
dm9sYXRpbGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jd3RtcCkpOyBfX2FzbSBfX3ZvbGF0aWxl
ICgiZnJuZGludCIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSk7IF9fYXNtIF9fdm9sYXRp
bGUgKCJmbGRjdyAlMCIgOiA6ICJtIiAoX19jdykpOyByZXR1cm4gX192YWx1ZTsgfQojIDUyMSAi
L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlubGluZS5oIiAzIDQKX19pbmxpbmUgZG91YmxlCmxkZXhw
IChkb3VibGUgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUg
X192YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDog
IjAiIChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CiMg
NTM5ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBkb3VibGUg
bG9nMXAgKGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4
MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nMXBm
IChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1ZTsgaWYg
KF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4MEwpIF9f
dmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAoImZsZGxu
MlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIgKF9feCkg
OiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nMXBs
IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192YWx1
ZTsgaWYgKF9fZmFic2wgKF9feCkgPj0gMS4wIC0gMC41ICogMS40MTQyMTM1NjIzNzMwOTUwNDg4
MEwpIF9fdmFsdWUgPSBsb2dsICgxLjAgKyBfX3gpOyBlbHNlIF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZsZGxuMlxuXHQiICJmeGNoXG5cdCIgImZ5bDJ4cDEiIDogIj10IiAoX192YWx1ZSkgOiAiMCIg
KF9feCkgOiAic3QoMSkiKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9i
aXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGRvdWJsZSBhc2luaCAoZG91YmxlIF9feCkg
dGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3kgPSBfX2ZhYnNsIChfX3gpOyByZXR1
cm4gKGxvZzFwbCAoX195ICogX195IC8gKF9fc3FydGwgKF9feSAqIF9feSArIDEuMCkgKyAxLjAp
ICsgX195KSAqIF9fc2duMWwgKF9feCkpOyB9IF9faW5saW5lIGZsb2F0IGFzaW5oZiAoZmxvYXQg
X194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7
IHJldHVybiAobG9nMXBsIChfX3kgKiBfX3kgLyAoX19zcXJ0bCAoX195ICogX195ICsgMS4wKSAr
IDEuMCkgKyBfX3kpICogX19zZ24xbCAoX194KSk7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgYXNp
bmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIHsgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX195
ID0gX19mYWJzbCAoX194KTsgcmV0dXJuIChsb2cxcGwgKF9feSAqIF9feSAvIChfX3NxcnRsIChf
X3kgKiBfX3kgKyAxLjApICsgMS4wKSArIF9feSkgKiBfX3NnbjFsIChfX3gpKTsgfQoKCgoKX19p
bmxpbmUgZG91YmxlIGFjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJldHVybiBsb2dsIChf
X3ggKyBfX3NxcnRsIChfX3ggLSAxLjApICogX19zcXJ0bCAoX194ICsgMS4wKSk7IH0gX19pbmxp
bmUgZmxvYXQgYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpIHsgcmV0dXJuIGxvZ2wgKF9feCAr
IF9fc3FydGwgKF9feCAtIDEuMCkgKiBfX3NxcnRsIChfX3ggKyAxLjApKTsgfSBfX2lubGluZSBs
b25nIGRvdWJsZSBhY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZXR1cm4gbG9n
bCAoX194ICsgX19zcXJ0bCAoX194IC0gMS4wKSAqIF9fc3FydGwgKF9feCArIDEuMCkpOyB9CgoK
X19pbmxpbmUgZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxv
bmcgZG91YmxlIF9feSA9IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9f
eSArIF9feSkgLyAoMS4wICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGZsb2F0
IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9
IF9fZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4w
ICsgX195KSkgKiBfX3NnbjFsIChfX3gpOyB9IF9faW5saW5lIGxvbmcgZG91YmxlIGF0YW5obCAo
bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9feSA9IF9f
ZmFic2wgKF9feCk7IHJldHVybiAtMC41ICogbG9nMXBsICgtKF9feSArIF9feSkgLyAoMS4wICsg
X195KSkgKiBfX3NnbjFsIChfX3gpOyB9CgoKCgpfX2lubGluZSBkb3VibGUgaHlwb3QgKGRvdWJs
ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIHsgcmV0dXJuIF9fc3FydGwgKF9feCAqIF9feCAr
IF9feSAqIF9feSk7IH0gX19pbmxpbmUgZmxvYXQgaHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9f
eSkgdGhyb3cgKCkgeyByZXR1cm4gX19zcXJ0bCAoX194ICogX194ICsgX195ICogX195KTsgfSBf
X2lubGluZSBsb25nIGRvdWJsZSBoeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg
X195KSB0aHJvdyAoKSB7IHJldHVybiBfX3NxcnRsIChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOyB9
CgpfX2lubGluZSBkb3VibGUgbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBs
b25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9f
dm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUp
IDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgbG9nYmYgKGZs
b2F0IF9feCkgdGhyb3cgKCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3Rl
ciBsb25nIGRvdWJsZSBfX2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6
ICI9dCIgKF9fanVuayksICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFs
dWU7IH0gX19pbmxpbmUgbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg
KCkgeyByZWdpc3RlciBsb25nIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBsb25nIGRvdWJsZSBf
X2p1bms7IF9fYXNtIF9fdm9sYXRpbGVfXyAoImZ4dHJhY3Rcblx0IiA6ICI9dCIgKF9fanVuayks
ICI9dSIgKF9fdmFsdWUpIDogIjAiIChfX3gpKTsgcmV0dXJuIF9fdmFsdWU7IH0KIyA1ODMgIi91
c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5lIGZsb2F0CmxkZXhwZiAo
ZmxvYXQgX194LCBpbnQgX195KSB0aHJvdyAoKQp7CiAgcmVnaXN0ZXIgbG9uZyBkb3VibGUgX192
YWx1ZTsgX19hc20gX192b2xhdGlsZV9fICgiZnNjYWxlIiA6ICI9dCIgKF9fdmFsdWUpIDogIjAi
IChfX3gpLCAidSIgKChsb25nIGRvdWJsZSkgX195KSk7IHJldHVybiBfX3ZhbHVlOwp9CgpfX2lu
bGluZSBsb25nIGRvdWJsZQpsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9feSkgdGhyb3cg
KCkKewogIHJlZ2lzdGVyIGxvbmcgZG91YmxlIF9fdmFsdWU7IF9fYXNtIF9fdm9sYXRpbGVfXyAo
ImZzY2FsZSIgOiAiPXQiIChfX3ZhbHVlKSA6ICIwIiAoX194KSwgInUiICgobG9uZyBkb3VibGUp
IF9feSkpOyByZXR1cm4gX192YWx1ZTsKfQojIDYwNyAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGlu
bGluZS5oIiAzIDQKX19pbmxpbmUgbG9uZyBpbnQKbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgp
CnsKICBsb25nIGludCBfX2xyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3RwbCAl
MCIgOiAiPW0iIChfX2xyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19scmlu
dHJlczsKfQpfX2lubGluZSBsb25nIGludApscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCkKewog
IGxvbmcgaW50IF9fbHJpbnRyZXM7IF9fYXNtX18gX192b2xhdGlsZV9fICgiZmlzdHBsICUwIiA6
ICI9bSIgKF9fbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBfX2xyaW50cmVz
Owp9Cl9faW5saW5lIGxvbmcgaW50CmxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKQp7
CiAgbG9uZyBpbnQgX19scmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGwgJTAi
IDogIj1tIiAoX19scmludHJlcykgOiAidCIgKF9feCkgOiAic3QiKTsgcmV0dXJuIF9fbHJpbnRy
ZXM7Cn0KIyA2MzAgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhpbmxpbmUuaCIgMyA0Cl9faW5saW5l
IGxvbmcgbG9uZyBpbnQKbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKQp7CiAgbG9uZyBsb25n
IGludCBfX2xscmludHJlczsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJmaXN0cGxsICUwIiA6ICI9
bSIgKF9fbGxyaW50cmVzKSA6ICJ0IiAoX194KSA6ICJzdCIpOyByZXR1cm4gX19sbHJpbnRyZXM7
Cn0KX19pbmxpbmUgbG9uZyBsb25nIGludApsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsK
ICBsb25nIGxvbmcgaW50IF9fbGxyaW50cmVzOyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImZpc3Rw
bGwgJTAiIDogIj1tIiAoX19sbHJpbnRyZXMpIDogInQiIChfX3gpIDogInN0Iik7IHJldHVybiBf
X2xscmludHJlczsKfQpfX2lubGluZSBsb25nIGxvbmcgaW50CmxscmludGwgKGxvbmcgZG91Ymxl
IF9feCkgdGhyb3cgKCkKewogIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRyZXM7IF9fYXNtX18gX192
b2xhdGlsZV9fICgiZmlzdHBsbCAlMCIgOiAiPW0iIChfX2xscmludHJlcykgOiAidCIgKF9feCkg
OiAic3QiKTsgcmV0dXJuIF9fbGxyaW50cmVzOwp9CgoKCgoKCgpfX2lubGluZSBkb3VibGUgZHJl
bSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCkgeyByZWdpc3RlciBkb3VibGUgX192
YWx1ZTsgcmVnaXN0ZXIgaW50IF9fY2xvYmJlcmVkOyBfX2FzbSBfX3ZvbGF0aWxlX18gKCIxOglm
cHJlbTFcblx0IiAiZnN0c3cJJSVheFxuXHQiICJzYWhmXG5cdCIgImpwCTFiIiA6ICI9dCIgKF9f
dmFsdWUpLCAiPSZhIiAoX19jbG9iYmVyZWQpIDogIjAiIChfX3gpLCAidSIgKF9feSkgOiAiY2Mi
KTsgcmV0dXJuIF9fdmFsdWU7IH0gX19pbmxpbmUgZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxv
YXQgX195KSB0aHJvdyAoKSB7IHJlZ2lzdGVyIGRvdWJsZSBfX3ZhbHVlOyByZWdpc3RlciBpbnQg
X19jbG9iYmVyZWQ7IF9fYXNtIF9fdm9sYXRpbGVfXyAoIjE6CWZwcmVtMVxuXHQiICJmc3Rzdwkl
JWF4XG5cdCIgInNhaGZcblx0IiAianAJMWIiIDogIj10IiAoX192YWx1ZSksICI9JmEiIChfX2Ns
b2JiZXJlZCkgOiAiMCIgKF9feCksICJ1IiAoX195KSA6ICJjYyIpOyByZXR1cm4gX192YWx1ZTsg
fSBfX2lubGluZSBsb25nIGRvdWJsZSBkcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJs
ZSBfX3kpIHRocm93ICgpIHsgcmVnaXN0ZXIgZG91YmxlIF9fdmFsdWU7IHJlZ2lzdGVyIGludCBf
X2Nsb2JiZXJlZDsgX19hc20gX192b2xhdGlsZV9fICgiMToJZnByZW0xXG5cdCIgImZzdHN3CSUl
YXhcblx0IiAic2FoZlxuXHQiICJqcAkxYiIgOiAiPXQiIChfX3ZhbHVlKSwgIj0mYSIgKF9fY2xv
YmJlcmVkKSA6ICIwIiAoX194KSwgInUiIChfX3kpIDogImNjIik7IHJldHVybiBfX3ZhbHVlOyB9
CiMgNjY1ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoaW5saW5lLmgiIDMgNApfX2lubGluZSBpbnQK
X19maW5pdGUgKGRvdWJsZSBfX3gpIHRocm93ICgpCnsKICByZXR1cm4gKF9fZXh0ZW5zaW9uX18K
ICAgICAgICAgICgoKCgodW5pb24geyBkb3VibGUgX19kOyBpbnQgX19pWzJdOyB9KSB7X19kOiBf
X3h9KS5fX2lbMV0KICAgICAgICAgICAgIHwgMHg4MDBmZmZmZnUpICsgMSkgPj4gMzEpKTsKfQoj
IDM1MSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzIDQKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRo
LmgiIDMgNAp9CiMgNTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvY21hdGgiIDIgMwojIDc5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2NtYXRoIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBk
b3VibGUKICBhYnMoZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9
CgogIGlubGluZSBmbG9hdAogIGFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2Zh
YnNmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkK
ICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNv
cyhmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29z
OwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJu
IDo6YWNvc2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAg
YXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBs
b25nIGRvdWJsZQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6YXRhbjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194
KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBh
dGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2lu
ZyA6OmF0YW4yOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gp
IHsgcmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3Vi
bGUKICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjph
dGFuMmwoX195LCBfX3gpOyB9CgoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0
CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9f
eCk7IH0KCgoKCgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194
KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl
CiAgY29zKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9
CgogIHVzaW5nIDo6Y29zaDsKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJl
dHVybiA6OmNvc2hmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxv
bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4
cDsKCgogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gp
OyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyBy
ZXR1cm4gOjpleHBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0
CiAgZmFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19i
dWlsdGluX2ZhYnNsKF9feCk7IH0KCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAog
IGZsb29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9h
dCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAg
aW5saW5lIGxvbmcgZG91YmxlCiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f
eSkgeyByZXR1cm4gOjpmbW9kbChfX3gsIF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoK
CiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6
OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhw
KGxvbmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4
cCk7IH0KCgoKCgoKICB1c2luZyA6OmxkZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxv
YXQgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoK
CgogIGlubGluZSBsb25nIGRvdWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhw
KSB7IHJldHVybiA6OmxkZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoK
CiAgaW5saW5lIGZsb2F0CiAgbG9nKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0K
CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVy
biA6OmxvZ2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAog
IGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGlu
ZSBsb25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwo
X194KTsgfQoKCgoKCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9h
dCBfX3gsIGZsb2F0KiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMg
Mzc1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRo
IiAzCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91
YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194LCBfX2lwdHIpOyB9CiMgMzg4ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX19wb3dfaGVscGVyKF9UcCBf
X3gsIGludCBfX24pCiAgICB7CiAgICAgIHJldHVybiBfX24gPCAwCiAgICAgICAgPyBfVHAoMSkv
X19jbWF0aF9wb3dlcihfX3gsIC1fX24pCiAgICAgICAgOiBfX2NtYXRoX3Bvd2VyKF9feCwgX19u
KTsKICAgIH0KCiAgdXNpbmcgOjpwb3c7CgoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194
LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6cG93ZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgcG93KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB7IHJl
dHVybiA6OnBvd2woX194LCBfX3kpOyB9CgoKCgoKCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3Vi
bGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAg
aW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19o
ZWxwZXIoX194LCBfX24pOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHBvdyhsb25nIGRvdWJs
ZSBfX3gsIGludCBfX24pCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9feCwgX19uKTsgfQoKICB1
c2luZyA6OnNpbjsKCiAgaW5saW5lIGZsb2F0CiAgc2luKGZsb2F0IF9feCkKICB7IHJldHVybiBf
X2J1aWx0aW5fc2luZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNpbihsb25nIGRv
dWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX3NpbmwoX194KTsgfQoKICB1c2luZyA6OnNp
bmg7CgoKICBpbmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihf
X3gpOyB9CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2luaChsb25nIGRvdWJsZSBfX3gp
IHsgcmV0dXJuIDo6c2luaGwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpzcXJ0OwoKICBpbmxpbmUg
ZmxvYXQKICBzcXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsg
fQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzcXJ0KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVy
biBfX2J1aWx0aW5fc3FydGwoX194KTsgfQoKICB1c2luZyA6OnRhbjsKCgogIGlubGluZSBmbG9h
dAogIHRhbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuZihfX3gpOyB9CgoKCgoKCiAgaW5saW5l
IGxvbmcgZG91YmxlCiAgdGFuKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5sKF9feCk7
IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194
KSB7IHJldHVybiA6OnRhbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0
YW5oKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjp0YW5obChfX3gpOyB9CgoKCgp9CgoKCgoK
Cm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAog
ICAgX19jYXB0dXJlX2ZwY2xhc3NpZnkoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9
PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0g
c2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAoX19m
KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNm
aW5pdGUoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/
IF9fZmluaXRlZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zp
bml0ZSAoX19mKSA6IF9fZmluaXRlbCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
PgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNpbmYoX1RwIF9fZikgeyByZXR1cm4gKHNpemVvZiAo
X19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNpbmZmIChfX2YpIDogc2l6ZW9mIChfX2YpID09
IHNpemVvZiAoZG91YmxlKSA/IF9faXNpbmYgKF9fZikgOiBfX2lzaW5mbCAoX19mKSk7IH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfaXNuYW4oX1RwIF9f
ZikgeyByZXR1cm4gKHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9faXNuYW5mIChf
X2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91YmxlKSA/IF9faXNuYW4gKF9fZikgOiBf
X2lzbmFubCAoX19mKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBf
X2NhcHR1cmVfaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gKChzaXplb2YgKF9fZikgPT0gc2l6
ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv
ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX19mKSA6IF9fZnBjbGFzc2lmeWwgKF9fZikpID09
IEZQX05PUk1BTCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBfX2Nh
cHR1cmVfc2lnbmJpdChfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo
ZmxvYXQpID8gX19zaWduYml0ZiAoX19mKSA6IHNpemVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJs
ZSkgPyBfX3NpZ25iaXQgKF9fZikgOiBfX3NpZ25iaXRsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2dyZWF0ZXIoX1RwIF9fZjEsIF9U
cCBfX2YyKQogICAgeyByZXR1cm4gX19idWlsdGluX2lzZ3JlYXRlciAoX19mMSwgX19mMik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2dyZWF0
ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gX19idWlsdGluX2lzZ3Jl
YXRlcmVxdWFsIChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg
aW50CiAgICAgX19jYXB0dXJlX2lzbGVzcyhfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJuIF9f
YnVpbHRpbl9pc2xlc3MgKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K
ICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQog
ICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9pc2xlc3NlcXVhbCAoX19mMSwgX19mMik7IH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc2xlc3NncmVhdGVy
KF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJldHVybiBfX2J1aWx0aW5faXNsZXNzZ3JlYXRl
ciAoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAg
IF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4g
X19idWlsdGluX2lzdW5vcmRlcmVkIChfX2YxLCBfX2YyKTsgfQp9CiMgNTgwICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2NtYXRoIiAzCm5hbWVzcGFjZSBf
X2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lm
eShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g
X19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg
aW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0
dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg
IGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9f
Zik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBf
X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVy
biBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg
eyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikg
eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg
IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf
X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19m
MSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19m
Mik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5Owog
IHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1
c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNp
bmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVz
aW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7
CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVz
c2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvY21hdGgudGNj
IiAxIDMKIyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9iaXRzL2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
VHA+CiAgICBfVHAKICAgIF9fY21hdGhfcG93ZXIoX1RwIF9feCwgdW5zaWduZWQgaW50IF9fbikK
ICAgIHsKICAgICAgX1RwIF9feSA9IF9fbiAlIDIgPyBfX3ggOiAxOwoKICAgICAgd2hpbGUgKF9f
biA+Pj0gMSkKICAgICAgICB7CiAgICAgICAgICBfX3ggPSBfX3ggKiBfX3g7CiAgICAgICAgICBp
ZiAoX19uICUgMikKICAgICAgICAgICAgX195ID0gX195ICogX194OwogICAgICAgIH0KCiAgICAg
IHJldHVybiBfX3k7CiAgICB9Cn0KIyA2NTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvY21hdGgiIDIgMwojIDQyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2xpbWl0cyIg
MSAzCiMgNDcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
bGltaXRzIiAzCiMgMTUwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2xpbWl0cyIgMwpuYW1lc3BhY2Ugc3RkCnsKICBlbnVtIGZsb2F0X3JvdW5kX3N0eWxl
CiAgewogICAgcm91bmRfaW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgcm91bmRfdG93YXJkX3plcm8g
PSAwLAogICAgcm91bmRfdG9fbmVhcmVzdCA9IDEsCiAgICByb3VuZF90b3dhcmRfaW5maW5pdHkg
PSAyLAogICAgcm91bmRfdG93YXJkX25lZ19pbmZpbml0eSA9IDMKICB9OwoKICBlbnVtIGZsb2F0
X2Rlbm9ybV9zdHlsZQogIHsKICAgIGRlbm9ybV9pbmRldGVybWluYXRlID0gLTEsCiAgICBkZW5v
cm1fYWJzZW50ID0gMCwKICAgIGRlbm9ybV9wcmVzZW50ID0gMQogIH07CgoKCgogIHN0cnVjdCBf
X251bWVyaWNfbGltaXRzX2Jhc2UKICB7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFs
aXplZCA9IGZhbHNlOwoKICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMDsKICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk
ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gZmFsc2U7CiAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGludCBy
YWRpeCA9IDA7CgogICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1h
eF9leHBvbmVudCA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBib29sIGhh
c19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0
eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz
X2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g
ZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICBzdGF0
aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs
c2U7CiAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu
ZF90b3dhcmRfemVybzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3Qg
bnVtZXJpY19saW1pdHMgOiBwdWJsaWMgX19udW1lcmljX2xpbWl0c19iYXNlCiAgICB7CiAgICAg
IHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9
CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+
KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7
IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgaW5maW5pdHko
KSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAgICAgc3RhdGljIF9U
cCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0KICAg
ICAgc3RhdGljIF9UcCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz
dDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgZGVub3JtX21pbigpIHRocm93KCkgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1
Y3QgbnVtZXJpY19saW1pdHM8Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBtYXgoKSB0aHJvdygpCiAgICAg
IHsgcmV0dXJuIHRydWU7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMTsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0g
dHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0
aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGJvb2wgZXBzaWxvbigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcm91bmRfZXJyb3Io
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg
PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O
YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm
YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g
ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g
ZmFsc2U7CgogICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7
IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBzaWduYWxpbmdfTmFOKCkgdGhyb3co
KQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
aXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCgoKCiAgICAg
IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg
dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z
dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8
PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1pbigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gKCgoY2hhcikoLTEpIDwgMCkgPyAoY2hhcikxIDw8IChzaXpl
b2YoY2hhcikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSkgOiAoY2hhcikwKTsgfQogICAgICBzdGF0
aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKGNoYXIpKC0xKSA8IDApID8g
KChjaGFyKTEgPDwgKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSkgLSAxIDog
fihjaGFyKTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoY2hh
cikgKiA4IC0gKChjaGFyKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
MTAgPSAoKHNpemVvZihjaGFyKSAqIDggLSAoKGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYp
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSAoKGNoYXIpKC0xKSA8IDApOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g
MjsKICAgICAgc3RhdGljIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g
MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0
aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt
YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g
MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h
dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNoYXIgaW5m
aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0aWMgY2hh
ciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsgfQogICAgICBzdGF0
aWMgY2hhciBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBjaGFyKCk7IH0K
ICAgICAgc3RhdGljIGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl
ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls
ZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51
bWVyaWNfbGltaXRzPHNpZ25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWluKCkgdGhy
b3coKQogICAgICB7IHJldHVybiAtMTI3IC0gMTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIg
bWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgZGlnaXRzID0gKHNpemVvZihzaWduZWQgY2hhcikgKiA4IC0gKChzaWduZWQgY2hhcikoLTEp
IDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2Yoc2lnbmVk
IGNoYXIpICogOCAtICgoc2lnbmVkIGNoYXIpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAg
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
bzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25l
ZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy
dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0
dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAxMjcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g
KHNpemVvZih1bnNpZ25lZCBjaGFyKSAqIDggLSAoKHVuc2lnbmVkIGNoYXIpKC0xKSA8IDApKTsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6ZW9mKHVuc2lnbmVkIGNoYXIp
ICogOCAtICgodW5zaWduZWQgY2hhcikoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln
bmVkIGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0
aWMgdW5zaWduZWQgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg
fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg
Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k
ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGNo
YXIgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk
IGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHF1aWV0X05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAg
c3RhdGljIHVuc2lnbmVkIGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGNoYXIgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z
aWduZWQgY2hhcj4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gKCgod2NoYXJfdCkoLTEpIDwgMCkgPyAod2NoYXJfdCkxIDw8IChzaXplb2Yod2No
YXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSkgOiAod2NoYXJfdCkwKTsgfQogICAgICBz
dGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICgoKHdjaGFyX3QpKC0x
KSA8IDApID8gKCh3Y2hhcl90KTEgPDwgKHNpemVvZih3Y2hhcl90KSAqIDggLSAoKHdjaGFyX3Qp
KC0xKSA8IDApKSkgLSAxIDogfih3Y2hhcl90KTApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IChzaXplb2Yod2NoYXJfdCkgKiA4IC0gKCh3Y2hhcl90KSgtMSkgPCAwKSk7CiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih3Y2hhcl90KSAqIDggLSAo
KHdjaGFyX3QpKC0xKSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19zaWduZWQgPSAoKHdjaGFyX3QpKC0xKSA8IDApOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHdjaGFy
X3QgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgd2No
YXJfdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3Rh
dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1p
bl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWdu
YWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUg
aGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19k
ZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHdjaGFyX3QgaW5maW5pdHkoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBxdWll
dF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQogICAgICBzdGF0aWMg
d2NoYXJfdCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7
IH0KICAgICAgc3RhdGljIHdjaGFyX3QgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gd2NoYXJfdCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp
YyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0
cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b3dhcmRfemVybzsKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj
X2xpbWl0czxzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6
ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gLTMyNzY3IC0gMTsgfQogICAgICBzdGF0aWMgc2hvcnQgbWF4KCkgdGhyb3coKQogICAgICB7
IHJldHVybiAzMjc2NzsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAoc2l6ZW9m
KHNob3J0KSAqIDggLSAoKHNob3J0KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSAoKHNpemVvZihzaG9ydCkgKiA4IC0gKChzaG9ydCkoLTEpIDwgMCkpICogNjQz
IC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQog
ICAgICBzdGF0aWMgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7
IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4
X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7
CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf
ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaG9ydCBpbmZp
bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hv
cnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9CiAgICAgIHN0
YXRpYyBzaG9ydCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgp
OyB9CiAgICAgIHN0YXRpYyBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzaG9ydCgpOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBz
ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5k
X3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt
aXRzPHVuc2lnbmVkIHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVj
aWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDMyNzY3ICogMlUgKyAxOyB9CgogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgc2hvcnQpICogOCAtICgodW5zaWduZWQg
c2hvcnQpKC0xKSA8IDApKTsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9ICgoc2l6
ZW9mKHVuc2lnbmVkIHNob3J0KSAqIDggLSAoKHVuc2lnbmVkIHNob3J0KSgtMSkgPCAwKSkgKiA2
NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAy
OwogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l
ZCBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5n
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+
KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s
IGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0
cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZs
b2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoK
ICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8aW50PgogICAgewogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgaW50
IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gLTIxNDc0ODM2NDcgLSAxOyB9CiAgICAgIHN0
YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAyMTQ3NDgzNjQ3OyB9CgogICAg
ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YoaW50KSAqIDggLSAoKGludCkoLTEp
IDwgMCkpOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gKChzaXplb2YoaW50KSAq
IDggLSAoKGludCkoLTEpIDwgMCkpICogNjQzIC8gMjEzNik7CiAgICAgIHN0YXRpYyBjb25zdCBi
b29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgaW50IGVwc2lsb24oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGludCByb3VuZF9lcnJvcigpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw
b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg
ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs
c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg
ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h
YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK
ICAgICAgc3RhdGljIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHF1aWV0X05hTigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMgaW50IHNpZ25h
bGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0K
ICAgICAgc3RhdGljIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0
aWNfY2FzdDxpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0
cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29s
IHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9
IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy
aWNfbGltaXRzPHVuc2lnbmVkIGludD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf
c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtaW4oKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0
aHJvdygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDcgKiAyVSArIDE7IH0KCiAgICAgIHN0YXRp
YyBjb25zdCBpbnQgZGlnaXRzID0gKHNpemVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWdu
ZWQgaW50KSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNp
emVvZih1bnNpZ25lZCBpbnQpICogOCAtICgodW5zaWduZWQgaW50KSgtMSkgPCAwKSkgKiA2NDMg
LyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgdW5zaWduZWQgaW50IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw
OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj
IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l
eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp
YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh
dGljIHVuc2lnbmVkIGludCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHF1aWV0
X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50Pigw
KTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAg
ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGlj
IHVuc2lnbmVkIGludCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf
Y2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1
NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAg
ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25z
dCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVm
b3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9z
dHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0
IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3Nw
ZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gLTIxNDc0ODM2NDdMIC0gMTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50
IGRpZ2l0cyA9IChzaXplb2YobG9uZykgKiA4IC0gKChsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nKSAqIDggLSAoKGxvbmcpKC0x
KSA8IDApKSAqIDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQg
PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50
IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg
eyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwog
ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv
bmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0
YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj
b25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGlj
IGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+
KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIGxvbmcgc2lnbmFsaW5nX05h
TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oMCk7IH0KICAgICAg
c3RhdGljIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh
c3Q8bG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJh
cHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19s
aW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl
Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIG1heCgpIHRo
cm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0wgKiAyVUwgKyAxOyB9CgogICAgICBzdGF0
aWMgY29uc3QgaW50IGRpZ2l0cyA9IChzaXplb2YodW5zaWduZWQgbG9uZykgKiA4IC0gKCh1bnNp
Z25lZCBsb25nKSgtMSkgPCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAo
KHNpemVvZih1bnNpZ25lZCBsb25nKSAqIDggLSAoKHVuc2lnbmVkIGxvbmcpKC0xKSA8IDApKSAq
IDY0MyAvIDIxMzYpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBj
b25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9
IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJv
dygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9u
ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5p
dHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNl
OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAg
ICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJz
ZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAg
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVy
biBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQg
bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln
bmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNpZ25hbGluZ19OYU4o
KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9
CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29u
c3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3Vu
ZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAg
ICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu
ZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxh
dGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3Rh
dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGxvbmcg
bG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwg
LSAxOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVy
biA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRz
ID0gKHNpemVvZihsb25nIGxvbmcpICogOCAtICgobG9uZyBsb25nKSgtMSkgPCAwKSk7CiAgICAg
IHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZihsb25nIGxvbmcpICogOCAtICgo
bG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMgLyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3Rh
dGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5k
X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3Qg
aW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50
MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0
YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWll
dF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4g
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3Jt
ID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAg
ICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25n
IGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25n
IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93
KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0
aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j
YXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv
b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg
PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl
ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVt
ZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZyBsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBs
b25nIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9uZyBsb25nIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gOTIyMzM3MjAzNjg1NDc3
NTgwN0xMICogMlVMTCArIDE7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gKHNp
emVvZih1bnNpZ25lZCBsb25nIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyBsb25nKSgtMSkg
PCAwKSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAoKHNpemVvZih1bnNpZ25l
ZCBsb25nIGxvbmcpICogOCAtICgodW5zaWduZWQgbG9uZyBsb25nKSgtMSkgPCAwKSkgKiA2NDMg
LyAyMTM2KTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAg
IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwog
ICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsg
cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f
ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsK
ICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29u
c3QgaW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19p
bmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0g
ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7
CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9y
bV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNl
OwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAg
ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBz
dGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1
cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5z
aWduZWQgbG9uZyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0
YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk
IGxvbmcgbG9uZyBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBsb25nIGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19p
ZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBj
b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf
YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu
ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgc3Ry
dWN0IG51bWVyaWNfbGltaXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAxLjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgp
IHRocm93KCkKICAgICAgeyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMg
Y29uc3QgaW50IGRpZ2l0cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g
NjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp
c19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAg
c3RhdGljIGZsb2F0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBl
LTdGOyB9CiAgICAgIHN0YXRpYyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gMC41RjsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAoLTEy
NSk7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAoLTM3KTsKICAgICAg
c3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBp
bnQgbWF4X2V4cG9uZW50MTAgPSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp
bml0eQogICAgICAgID0gX19idWlsdGluX2h1Z2VfdmFsZiAoKSAvIDIgPT0gX19idWlsdGluX2h1
Z2VfdmFsZiAoKTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTgogICAgICAg
ID0gX19idWlsdGluX25hbmYgKCIiKSAhPSBfX2J1aWx0aW5fbmFuZiAoIiIpOwogICAgICBzdGF0
aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhhc19xdWlldF9OYU47CiAgICAgIHN0
YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybQogICAgICAgID0gMS40MDEy
OTg0NmUtNDVGID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBp
bmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsZiAoKTsg
fQogICAgICBzdGF0aWMgZmxvYXQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBf
X2J1aWx0aW5fbmFuZiAoIiIpOyB9CiAgICAgIHN0YXRpYyBmbG9hdCBzaWduYWxpbmdfTmFOKCkg
dGhyb3coKQogICAgICB7IHJldHVybiBfX2J1aWx0aW5fbmFuc2YgKCIiKTsgfQogICAgICBzdGF0
aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS40MDEyOTg0NmUt
NDVGOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkKICAgICAgICA9IGhhc19p
bmZpbml0eSAmJiBoYXNfcXVpZXRfTmFOICYmIGhhc19kZW5vcm0gPT0gZGVub3JtX3ByZXNlbnQ7
CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy
YXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZh
bHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSBy
b3VuZF90b19uZWFyZXN0OwogICAgfTsKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1l
cmljX2xpbWl0czxkb3VibGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp
YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7
IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIwMTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1h
eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg
ZGlnaXRzMTAgPSAxNTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsK
ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMg
Y29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4
ID0gMjsKICAgICAgc3RhdGljIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy
biAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJy
b3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuNTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGlu
dCBtaW5fZXhwb25lbnQgPSAoLTEwMjEpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBv
bmVudDEwID0gKC0zMDcpOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDEw
MjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAzMDg7CgogICAgICBz
dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkKICAgICAgICA9IF9fYnVpbHRpbl9odWdlX3Zh
bCAoKSAvIDIgPT0gX19idWlsdGluX2h1Z2VfdmFsICgpOwogICAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNfcXVpZXRfTmFOCiAgICAgICAgPSBfX2J1aWx0aW5fbmFuICgiIikgIT0gX19idWlsdGlu
X25hbiAoIiIpOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGhh
c19xdWlldF9OYU47CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rl
bm9ybQogICAgICAgID0gNC45NDA2NTY0NTg0MTI0NjU0ZS0zMjQgPyBkZW5vcm1fcHJlc2VudCA6
IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9
IGZhbHNlOwoKICAgICAgc3RhdGljIGRvdWJsZSBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyBy
ZXR1cm4gX19idWlsdGluX2h1Z2VfdmFsKCk7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW4gKCIiKTsgfQogICAgICBz
dGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVp
bHRpbl9uYW5zICgiIik7IH0KICAgICAgc3RhdGljIGRvdWJsZSBkZW5vcm1fbWluKCkgdGhyb3co
KQogICAgICB7IHJldHVybiA0Ljk0MDY1NjQ1ODQxMjQ2NTRlLTMyNDsgfQoKICAgICAgc3RhdGlj
IGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5maW5pdHkgJiYgaGFzX3F1aWV0
X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50OwogICAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxv
ID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZhbHNlOwogICAgICBz
dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv
bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG9fbmVhcmVzdDsKICAg
IH07CgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3Vi
bGU+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsK
CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMu
MzYyMTAzMTQzMTEyMDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBt
YXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJM
OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29u
c3QgaW50IGRpZ2l0czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9
IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAg
c3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGlu
dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQog
ICAgICB7IHJldHVybiAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGlj
IGxvbmcgZG91YmxlIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjVMOyB9
CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9ICgtMTYzODEpOwogICAgICBz
dGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gKC00OTMxKTsKICAgICAgc3RhdGljIGNv
bnN0IGludCBtYXhfZXhwb25lbnQgPSAxNjM4NDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf
ZXhwb25lbnQxMCA9IDQ5MzI7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkK
ICAgICAgICA9IF9fYnVpbHRpbl9odWdlX3ZhbGwgKCkgLyAyID09IF9fYnVpbHRpbl9odWdlX3Zh
bGwgKCk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4KICAgICAgICA9IF9f
YnVpbHRpbl9uYW5sICgiIikgIT0gX19idWlsdGluX25hbmwgKCIiKTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBoYXNfcXVpZXRfTmFOOwogICAgICBzdGF0aWMg
Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0KICAgICAgICA9IDMuNjQ1MTk5NTMx
ODgyNDc0NjAyNTNlLTQ5NTFMID8gZGVub3JtX3ByZXNlbnQgOiBkZW5vcm1fYWJzZW50OwogICAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MKICAgICAgICA9IGZhbHNlOwoKICAg
ICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBf
X2J1aWx0aW5faHVnZV92YWxsICgpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBxdWlldF9O
YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9fYnVpbHRpbl9uYW5sICgiIik7IH0KICAgICAg
c3RhdGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu
IF9fYnVpbHRpbl9uYW5zbCAoIiIpOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBkZW5vcm1f
bWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAzLjY0NTE5OTUzMTg4MjQ3NDYwMjUzZS00OTUx
TDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5CiAgICAgICAgPSBoYXNfaW5m
aW5pdHkgJiYgaGFzX3F1aWV0X05hTiAmJiBoYXNfZGVub3JtID09IGRlbm9ybV9wcmVzZW50Owog
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv
bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw
cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz
ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91
bmRfdG9fbmVhcmVzdDsKICAgIH07CgoKCgoKfQojIDQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKIyAx
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3R5cGVpbmZv
IiAxIDMKIyA0MCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My90eXBlaW5mbyIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNs
YXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4z
LXByZS9pbmNsdWRlL2MrKy8zLjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAg
Y2xhc3MgdHlwZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8o
KTsKCiAgcHJpdmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8m
KTsKICAgIHR5cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29u
c3QgY2hhciAqX19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29u
c3QgY2hhciAqX19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNo
YXIqIG5hbWUoKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgMTAxICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3R5cGVpbmZvIiAzCiAgICBib29s
IGJlZm9yZShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1l
IDwgX19hcmcuX19uYW1lOyB9CiAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgdHlwZV9pbmZvJiBf
X2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA9PSBfX2FyZy5fX25hbWU7IH0KCiAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgdHlwZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJu
ICFvcGVyYXRvcj09KF9fYXJnKTsgfQoKCiAgcHVibGljOgoKICAgIHZpcnR1YWwgYm9vbCBfX2lz
X3BvaW50ZXJfcCgpIGNvbnN0OwoKICAgIHZpcnR1YWwgYm9vbCBfX2lzX2Z1bmN0aW9uX3AoKSBj
b25zdDsKCgoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgX19kb19jYXRjaChjb25zdCB0eXBlX2luZm8g
Kl9fdGhyX3R5cGUsIHZvaWQgKipfX3Rocl9vYmosCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCBfX291dGVyKSBjb25zdDsKCgogICAgdmlydHVhbCBib29sIF9fZG9fdXBjYXN0
KGNvbnN0IF9fY3h4YWJpdjE6Ol9fY2xhc3NfdHlwZV9pbmZvICpfX3RhcmdldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2b2lkICoqX19vYmpfcHRyKSBjb25zdDsKICB9OwoKCgoKCgog
IGNsYXNzIGJhZF9jYXN0IDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRf
Y2FzdCgpIHRocm93KCkgeyB9CgoKICAgIHZpcnR1YWwgfmJhZF9jYXN0KCkgdGhyb3coKTsKICB9
OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgog
ICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfdHlwZWlkKCkg
dGhyb3coKTsKICB9Owp9Cgp9CiMgNDYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCgpuYW1lc3BhY2Ugc3Rk
CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxvY2FsZTo6Y29t
YmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIGNvbnN0CiAgICB7CiAgICAgIF9JbXBsKiBfX3Rt
cCA9IG5ldyBfSW1wbCgqX01faW1wbCwgMSk7CiAgICAgIF9fdG1wLT5fTV9yZXBsYWNlX2ZhY2V0
KF9fb3RoZXIuX01faW1wbCwgJl9GYWNldDo6aWQpOwogICAgICByZXR1cm4gbG9jYWxlKF9fdG1w
KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFz
aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3My
KSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0
ZV90eXBlOwogICAgICBjb25zdCBfX2NvbGxhdGVfdHlwZSYgX19jb2xsYXRlID0gdXNlX2ZhY2V0
PF9fY29sbGF0ZV90eXBlPigqdGhpcyk7CiAgICAgIHJldHVybiAoX19jb2xsYXRlLmNvbXBhcmUo
X19zMS5kYXRhKCksIF9fczEuZGF0YSgpICsgX19zMS5sZW5ndGgoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgp
KSA8IDApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFj
ZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgc2l6ZV90
IF9faSA9IF9GYWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRz
ID0gX19sb2MuX01faW1wbC0+X01fZmFjZXRzOwogICAgICBpZiAoIShfX2kgPCBfX2xvYy5fTV9p
bXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKSkKICAgICAgICBfX3Rocm93X2Jh
ZF9jYXN0KCk7CiAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBfRmFjZXQmPigqX19mYWNl
dHNbX19pXSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGJvb2wKICAg
IGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0aHJvdygpCiAgICB7CiAgICAgIHNpemVf
dCBfX2kgPSBfRmFjZXQ6OmlkLl9NX2lkKCk7CiAgICAgIGxvY2FsZTo6ZmFjZXQqKiBfX2ZhY2V0
cyA9IF9fbG9jLl9NX2ltcGwtPl9NX2ZhY2V0czsKICAgICAgcmV0dXJuIChfX2kgPCBfX2xvYy5f
TV9pbXBsLT5fTV9mYWNldHNfc2l6ZSAmJiBfX2ZhY2V0c1tfX2ldKTsKICAgIH0KCgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBu
dW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9mbG9hdChfSW5JdGVyIF9f
YmVnLCBfSW5JdGVyIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAg
aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmcmIF9feHRyYykgY29uc3QKICAgIHsKICAg
ICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CiAgICAgIGNvbnN0
IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4m
IF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3Qg
bnVtcHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19s
b2MpOwoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAg
ICBpbnQgX19wb3MgPSAwOwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBpZiAo
KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2Ms
IF9fbWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAg
ICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19w
b3M7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBj
aGFyX3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAg
IGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAgICAgIHdoaWxlIChfX3RyYWl0c190eXBlOjpl
cShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgIF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgfQog
ICAgICBpZiAoX19mb3VuZF96ZXJvKQogICAgICAgIHsKICAgICAgICAgIF9feHRyYyArPSBfU19h
dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICsrX19wb3M7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0
IHNpemVfdCBfX2xlbiA9IF9NX0UgLSBfTV96ZXJvICsgMTsKICAgICAgY2hhcl90eXBlIF9fd2F0
b21zW19fbGVuXTsKICAgICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xl
biwgX193YXRvbXMpOwogICAgICBib29sIF9fZm91bmRfZGVjID0gZmFsc2U7CiAgICAgIGJvb2wg
X19mb3VuZF9zY2kgPSBmYWxzZTsKICAgICAgY29uc3QgY2hhcl90eXBlIF9fZGVjID0gX19ucC5k
ZWNpbWFsX3BvaW50KCk7CgogICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29u
c3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVj
a19ncm91cGluZyA9IF9fZ3JvdXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsK
ICAgICAgY29uc3QgY2hhcl90eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CgogICAg
ICB3aGlsZSAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgewoKICAgICAgICAgIGNvbnN0IGNoYXJf
dHlwZSogX19wID0gX190cmFpdHNfdHlwZTo6ZmluZChfX3dhdG9tcywgMTAsIF9fYyk7CgoKICAg
ICAgICAgIGlmIChfX3AgJiYgIV9fdHJhaXRzX3R5cGU6OmVxKF9fYywgY2hhcl90eXBlKCkpKQog
ICAgICAgICAgICB7CgogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194dHJj
ICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsKICAgICAgICAgICAgICArK19fc2VwX3BvczsK
ICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICB9CiAgICAgICAgICBl
bHNlIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fc2VwKQogICAgICAgICAgICAgICAgICAg
JiYgX19jaGVja19ncm91cGluZyAmJiAhX19mb3VuZF9kZWMpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAg
ICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgX19jID0gKigr
K19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg
ICAgICAgZWxzZSBpZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX2RlYykgJiYgIV9fZm91bmRf
ZGVjKQogICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgaWYgKF9fZm91bmRfZ3JvdXBpbmcu
c2l6ZSgpKQogICAgICAgICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxj
aGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX194
dHJjICs9ICcuJzsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg
IF9fZm91bmRfZGVjID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoKF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX193YXRvbXNbX01fZV0pCiAgICAgICAgICAgICAgICAgICAg
fHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9FXSkpCiAgICAgICAgICAgICAg
ICAgICAmJiAhX19mb3VuZF9zY2kgJiYgX19wb3MpCiAgICAgICAgICAgIHsKCiAgICAgICAgICAg
ICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX19jdHlwZS5uYXJyb3coX19jLCBj
aGFyKCkpOwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CgoKICAgICAgICAgICAgICBp
ZiAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3BsdXMpCiAgICAgICAgICAgICAgICAgIHx8IF9f
dHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5h
cnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19mb3VuZF9zY2kgPSB0cnVlOwogICAgICAg
ICAgICB9CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAg
ICAgIGlmIChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAg
ICAgIHsKCiAgICAgICAgICBpZiAoIV9fZm91bmRfZGVjKQogICAgICAgICAgICBfX2ZvdW5kX2dy
b3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAgICAgICBpZiAoIV9f
dmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRfZ3JvdXBpbmcpKQogICAgICAgICAg
ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgX194dHJjICs9
IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19i
YXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No
YXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2ludChfSW5JdGVyIF9fYmVnLCBfSW5JdGVy
IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2Vyciwgc3RyaW5nJiBfX3h0cmMsIGludCYgX19iYXNlKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3Qg
bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg
X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBu
dW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xv
Yyk7CgoKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygp
ICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNl
OjpvY3QpCiAgICAgICAgX19iYXNlID0gODsKICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0g
aW9zX2Jhc2U6OmhleCkKICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgZWxzZQogICAgICAgIF9f
YmFzZSA9IDEwOwoKCiAgICAgIGludCBfX3BvcyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAq
X19iZWc7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX3BsdXMgPSBfX2N0eXBlLndpZGVuKCcrJyk7
CiAgICAgIGNvbnN0IGNoYXJfdHlwZSBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwoKICAg
ICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fcGx1cykgfHwgX190cmFpdHNfdHlwZTo6
ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsK
ICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAg
ICArK19fcG9zOwogICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICB9CgoKICAgICAg
Y29uc3QgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oX1NfYXRvbXNbX01femVyb10p
OwogICAgICBjb25zdCBjaGFyX3R5cGUgX194ID0gX19jdHlwZS53aWRlbigneCcpOwogICAgICBj
b25zdCBjaGFyX3R5cGUgX19YID0gX19jdHlwZS53aWRlbignWCcpOwogICAgICBpZiAoX19iYXNl
ID09IDEwKQogICAgICAgIHsKICAgICAgICAgIGJvb2wgX19mb3VuZF96ZXJvID0gZmFsc2U7CiAg
ICAgICAgICB3aGlsZSAoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3plcm8pICYmIF9fYmVnICE9
IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAg
ICAgICAgICAgICBfX2ZvdW5kX3plcm8gPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBp
ZiAoX19mb3VuZF96ZXJvKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjICs9IF9T
X2F0b21zW19NX3plcm9dOwogICAgICAgICAgICAgICsrX19wb3M7CiAgICAgICAgICAgICAgaWYg
KF9fYmFzZWZpZWxkID09IDApCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlm
ICgoX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3gpCiAgICAgICAgICAgICAgICAgICAgICAgfHwg
X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAgICAgJiYgX19i
ZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
X194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAg
ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAg
ICAgICAgICAgICAgICAgICAgX19iYXNlID0gMTY7CiAgICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iYXNlID0gODsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoX19iYXNl
ID09IDE2KQogICAgICAgIHsKICAgICAgICAgIGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f
emVybykgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0
cmMgKz0gX1NfYXRvbXNbX01femVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAg
ICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGlmICgoX190cmFpdHNfdHlwZTo6
ZXEoX19jLCBfX3gpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19YKSkKICAgICAgICAgICAg
ICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAgICAgICAgICAgICAg
ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgoKCiAgICAgIHNpemVfdCBfX2xlbjsK
ICAgICAgaWYgKF9fYmFzZSA9PSAxNikKICAgICAgICBfX2xlbiA9IF9NX3NpemU7CiAgICAgIGVs
c2UKICAgICAgICBfX2xlbiA9IF9fYmFzZTsKCgogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX01f
c2l6ZV07CiAgICAgIF9fY3R5cGUud2lkZW4oX1NfYXRvbXMsIF9TX2F0b21zICsgX19sZW4sIF9f
d2F0b21zKTsKICAgICAgc3RyaW5nIF9fZm91bmRfZ3JvdXBpbmc7CiAgICAgIGNvbnN0IHN0cmlu
ZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBib29sIF9fY2hlY2tfZ3JvdXBp
bmcgPSBfX2dyb3VwaW5nLnNpemUoKTsKICAgICAgaW50IF9fc2VwX3BvcyA9IDA7CiAgICAgIGNv
bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9fbnAudGhvdXNhbmRzX3NlcCgpOwogICAgICB3aGlsZSAo
X19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ag
PSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCBfX2xlbiwgX19jKTsKCgogICAgICAgICAg
aWYgKF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAg
ICAgIHsKCiAgICAgICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19fcCAtIF9fd2F0b21zXTsK
ICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAg
ICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYg
KF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApICYmIF9fY2hlY2tfZ3JvdXBpbmcpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIGlmIChfX3NlcF9wb3MpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4o
X19zZXBfcG9zKTsKICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAg
ICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNl
OjpmYWlsYml0OwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoK
CgogICAgICBpZiAoX19jaGVja19ncm91cGluZyAmJiBfX2ZvdW5kX2dyb3VwaW5nLnNpemUoKSkK
ICAgICAgICB7CgogICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFy
PihfX3NlcF9wb3MpOwogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGluZyhfX2dyb3VwaW5n
LCBfX2ZvdW5kX2dyb3VwaW5nKSkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxi
aXQ7CiAgICAgICAgfQoKCiAgICAgIF9feHRyYyArPSBjaGFyKCk7CiAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J
dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl
dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg
ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBib29sJiBfX3YpIGNvbnN0CiAgICB7Cgog
ICAgICBpZiAoIShfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSkKICAgICAgICB7
CgoKICAgICAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgICAgICBpbnQgX19iYXNlOwogICAgICAg
ICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0
cmMsIF9fYmFzZSk7CgogICAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICAgICAgX19j
b252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19i
YXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpICYmIF9fdWwg
PD0gMSkKICAgICAgICAgICAgX192ID0gX191bDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgfQoKCiAgICAgIGVsc2UKICAgICAg
ICB7CiAgICAgICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsK
ICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlwZTsKCiAg
ICAgICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICAgICAgY29uc3QgbnVt
cHVuY3Q8X0NoYXJUPiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2Mp
OwogICAgICAgICAgY29uc3QgX19zdHJpbmdfdHlwZSBfX3RydWUgPSBfX25wLnRydWVuYW1lKCk7
CiAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlIF9fZmFsc2UgPSBfX25wLmZhbHNlbmFtZSgp
OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWVzID0gX190cnVlLmNfc3RyKCk7CiAg
ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fZmFsc2VzID0gX19mYWxzZS5jX3N0cigpOwogICAg
ICAgICAgY29uc3Qgc2l6ZV90IF9fdHJ1ZW4gPSBfX3RydWUuc2l6ZSgpIC0gMTsKICAgICAgICAg
IGNvbnN0IHNpemVfdCBfX2ZhbHNlbiA9IF9fZmFsc2Uuc2l6ZSgpIC0gMTsKCiAgICAgICAgICBm
b3IgKHNpemVfdCBfX24gPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX24pCiAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnKys7CiAgICAgICAgICAgICAgYm9v
bCBfX3Rlc3RmID0gX19uIDw9IF9fZmFsc2VuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
PyBfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZmFsc2VzW19fbl0pIDogZmFsc2U7CiAgICAgICAg
ICAgICAgYm9vbCBfX3Rlc3R0ID0gX19uIDw9IF9fdHJ1ZW4KICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA/IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX190cnVlc1tfX25dKSA6IGZhbHNlOwog
ICAgICAgICAgICAgIGlmICghKF9fdGVzdGYgfHwgX190ZXN0dCkpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlIGlmIChf
X3Rlc3RmICYmIF9fbiA9PSBfX2ZhbHNlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX192ID0gMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190ZXN0dCAmJiBfX24gPT0gX190cnVlbikKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMTsKICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2Jl
ZyA9PSBfX2VuZCkKICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAg
ICB9CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i
YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyYgX192
KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAg
ICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRy
YywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19l
cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAg
IG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0
YXRlJiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5n
IF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIHVuc2lnbmVk
IGxvbmcgX191bDsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdWwsIF9f
ZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6
ZmFpbGJpdCkKICAgICAgICAgICYmIF9fdWwgPD0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQgc2hv
cnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191
bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg
cmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l
IF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg
ZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywK
ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBj
b25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQgX19iYXNlOwogICAgICBf
X2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywg
X19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihf
X3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBp
ZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX191bCA8PSBudW1l
cmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+OjptYXgoKSkKICAgICAgICBfX3YgPSBzdGF0aWNfY2Fz
dDx1bnNpZ25lZCBpbnQ+KF9fdWwpOwogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9zX2Jh
c2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg
IGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMu
Y19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBf
X2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo
aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg
ICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25nJiBfX3YpIGNvbnN0CiAgICB7
CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01f
ZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwog
ICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2Nh
bGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh
clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu
ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1
bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsK
ICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19l
bmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9f
eHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0
dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
SW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRv
X2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg
ICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBmbG9hdCYgX192KSBjb25zdAogICAg
ewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9f
YmVnID0gX01fZXh0cmFjdF9mbG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMp
OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19s
b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBf
SW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv
c19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZG91Ymxl
JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNl
cnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19p
bywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf
X3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAg
bnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0
ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh
dGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194
dHJjOwogICAgICBfX3h0cmMucmVzZXJ2ZSgzMik7CiAgICAgIF9fYmVnID0gX01fZXh0cmFjdF9m
bG9hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMpOwogICAgICBfX2NvbnZlcnRf
dG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19sb2NhbGUpOwogICAgICByZXR1
cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n
ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg
ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgdm9pZComIF9fdikgY29uc3QKICAgIHsK
CiAgICAgIHR5cGVkZWYgaW9zX2Jhc2U6OmZtdGZsYWdzIGZtdGZsYWdzOwogICAgICBmbXRmbGFn
cyBfX2ZtdCA9IF9faW8uZmxhZ3MoKTsKICAgICAgZm10ZmxhZ3MgX19mbXRtYXNrID0gfihpb3Nf
YmFzZTo6c2hvd3BvcyB8IGlvc19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGlvc19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAg
ICBfX2lvLmZsYWdzKF9fZm10ICYgX19mbXRtYXNrIHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFz
ZTo6c2hvd2Jhc2UpKTsKCiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAg
ICAgIF9fYmVnID0gX01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194
dHJjLCBfX2Jhc2UpOwoKCiAgICAgIF9faW8uZmxhZ3MoX19mbXQpOwoKICAgICAgdW5zaWduZWQg
bG9uZyBfX3VsOwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19l
cnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm
YWlsYml0KSkKICAgICAgICBfX3YgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihfX3VsKTsKICAg
ICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CiMgNjE4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4K
ICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9N
X2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmls
bCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUIF9fdikgY29uc3QK
ICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9fbWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRz
PF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lv
LnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19wcmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6
ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9fcHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNp
emU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBjaGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBp
bnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nfc2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAg
ICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9f
Y3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29sIF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19p
bywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAgICAgICBpZiAoX19mcCkKICAgICAgICAgIF9f
bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAg
ICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3Np
emUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19j
c19zaXplKQogICAgICAgICAgewogICAgICAgICAgICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAg
ICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2FsbG9jYShfX2Nz
X3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnApCiAgICAgICAgICAgICAgX19sZW4gPSBfX2Nv
bnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nf
c2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2ODEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwogICAgICAg
IHJldHVybiBfTV93aWRlbl9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19sZW4pOwog
ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsdWVUPgogICAgICBfT3V0SXRlcgogICAgICBudW1fcHV0
PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgICAgX01fY29udmVydF9pbnQoX091dEl0ZXIgX19zLCBp
b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAg
ICAgICAgY2hhciBfX21vZGwsIF9WYWx1ZVQgX192KSBjb25zdAogICAgICB7CgoKCiAgICAgICAg
Y2hhciBfX2ZidWZbMTZdOwogICAgICAgIF9TX2Zvcm1hdF9pbnQoX19pbywgX19mYnVmLCBfX21v
ZCwgX19tb2RsKTsKCgogICAgICAgIGludCBfX2NzX3NpemUgPSA2NDsKICAgICAgICBjaGFyKiBf
X2NzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAg
ICAgICAgaW50IF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1
ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUp
OwoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAg
ICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxj
aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgX19sZW4gPSBf
X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CiAgICAgICAgICB9CgoKCgoK
CiAgICAgICAgcmV0dXJuIF9NX3dpZGVuX2ludChfX3MsIF9faW8sIF9fZmlsbCwgX19jcywgX19s
ZW4pOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0
ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV93
aWRlbl9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBj
aGFyKiBfX2NzLAogICAgICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdAogICAgewogICAg
ICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKCgogICAgICBjb25z
dCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+
JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFy
VCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9D
aGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqIF9fbGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsK
ICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNv
bnN0IF9DaGFyVCogX19wOwogICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNl
X2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGlmIChfX3AgPSBfX3RyYWl0
c190eXBlOjpmaW5kKF9fd3MsIF9fbGVuLCBfX2N0eXBlLndpZGVuKCcuJykpKQogICAgICAgIF9f
d3NbX19wIC0gX193c10gPSBfX25wLmRlY2ltYWxfcG9pbnQoKTsKCgoKCiAgICAgIGNvbnN0IHN0
cmluZyBfX2dyb3VwaW5nID0gX19ucC5ncm91cGluZygpOwogICAgICBpb3NfYmFzZTo6Zm10Zmxh
Z3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAg
ICBpZiAoX19ncm91cGluZy5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3Ay
OwogICAgICAgICAgaW50IF9fZGVjbGVuID0gX19wID8gX19wIC0gX193cyA6IF9fbGVuOwogICAg
ICAgICAgX19wMiA9IF9fYWRkX2dyb3VwaW5nKF9fd3MyLCBfX25wLnRob3VzYW5kc19zZXAoKSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGlu
Zy5zaXplKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193cywgX193cyArIF9f
ZGVjbGVuKTsKICAgICAgICAgIGludCBfX25ld2xlbiA9IF9fcDIgLSBfX3dzMjsKCgogICAgICAg
ICAgaWYgKF9fcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdHJhaXRzX3R5cGU6OmNv
cHkoX19wMiwgX19wLCBfX2xlbiAtIF9fZGVjbGVuKTsKICAgICAgICAgICAgICBfX25ld2xlbiAr
PSBfX2xlbiAtIF9fZGVjbGVuOwogICAgICAgICAgICB9CgoKICAgICAgICAgIF9fd3MgPSBfX3dz
MjsKICAgICAgICAgIF9fbGVuID0gX19uZXdsZW47CiAgICAgICAgfQoKICAgICAgcmV0dXJuIF9N
X2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51
bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgX01fd2lkZW5faW50KF9PdXRJdGVyIF9fcywg
aW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIqIF9fY3MsCiAgICAgICAgICAgICAg
ICAgaW50IF9fbGVuKSBjb25zdAogICAgewoKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX0NoYXJUKiBfX3dzID0gc3RhdGljX2Nh
c3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4pKTsK
CgogICAgICBfQ2hhclQqIF9fd3MyID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2Fs
bG9jYShzaXplb2YoX0NoYXJUKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqIF9fbGVuICogMikpOwogICAgICBfX2N0eXBlLndpZGVu
KF9fY3MsIF9fY3MgKyBfX2xlbiwgX193cyk7CgoKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJU
PiYgX19ucCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25z
dCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgY29uc3QgaW9zX2Jh
c2U6OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2Vm
aWVsZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKCgoKCgogICAgICAg
ICAgc3RyZWFtc2l6ZSBfX29mZiA9IDA7CiAgICAgICAgICBpZiAoKF9faW8uZmxhZ3MoKSAmIGlv
c19iYXNlOjpzaG93YmFzZSkgJiYgX19sZW4gPiAxKQogICAgICAgICAgICBpZiAoX19iYXNlZmll
bGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX29m
ZiA9IDE7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsKICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgIGVsc2UgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgpCiAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgX19vZmYgPSAyOwogICAgICAgICAgICAgICAgKl9fd3My
ID0gKl9fd3M7CiAgICAgICAgICAgICAgICAqKF9fd3MyICsgMSkgPSAqKF9fd3MgKyAxKTsKICAg
ICAgICAgICAgICB9CiAgICAgICAgICBfQ2hhclQqIF9fcDsKICAgICAgICAgIF9fcCA9IF9fYWRk
X2dyb3VwaW5nKF9fd3MyICsgX19vZmYsIF9fbnAudGhvdXNhbmRzX3NlcCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigpICsgX19ncm91cGluZy5zaXplKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3dzICsgX19vZmYsIF9fd3MgKyBfX2xlbik7
CiAgICAgICAgICBfX2xlbiA9IF9fcCAtIF9fd3MyOwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsK
ICAgICAgICB9CiAgICAgIHJldHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3Ms
IF9fbGVuKTsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P
dXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAg
X01faW5zZXJ0KF9PdXRJdGVyIF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNv
bnN0IF9DaGFyVCogX193cywKICAgICAgICAgICAgICBpbnQgX19sZW4pIGNvbnN0CiAgICB7CiAg
ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwoKICAgICAgc3Ry
ZWFtc2l6ZSBfX3cgPSBfX2lvLndpZHRoKCk7CiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf
Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX193KSk7
CiAgICAgIGlmIChfX3cgPiBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2xlbikpCiAgICAgICAg
ewogICAgICAgICAgX19wYWQ8X0NoYXJULCBfX3RyYWl0c190eXBlPjo6X1NfcGFkKF9faW8sIF9f
ZmlsbCwgX193czIsIF9fd3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX193LCBfX2xlbiwgdHJ1ZSk7CiAgICAgICAgICBfX2xlbiA9IHN0YXRpY19jYXN0
PGludD4oX193KTsKCiAgICAgICAgICBfX3dzID0gX193czI7CiAgICAgICAgfQogICAgICBfX2lv
LndpZHRoKDApOwoKCgogICAgICBmb3IgKGludCBfX2ogPSAwOyBfX2ogPCBfX2xlbjsgKytfX2os
ICsrX19zKQogICAgICAgICpfX3MgPSBfX3dzW19fal07CiAgICAgIHJldHVybiBfX3M7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0
SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBl
IF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGJvb2wgX192KSBjb25zdAog
ICAgewogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsKICAg
ICAgaWYgKChfX2ZsYWdzICYgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCkKICAgICAgICB7CiAg
ICAgICAgICB1bnNpZ25lZCBsb25nIF9fdXYgPSBfX3Y7CiAgICAgICAgICBfX3MgPSBfTV9jb252
ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCBjaGFyKCksIF9fdXYpOwogICAgICAgIH0K
ICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFy
VD4gX19zdHJpbmdfdHlwZTsKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7
CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1
bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBfX3N0cmluZ190eXBlIF9fbmFtZTsKICAg
ICAgICAgIGlmIChfX3YpCiAgICAgICAgICAgIF9fbmFtZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgX19uYW1lID0gX19ucC5mYWxzZW5hbWUoKTsKICAgICAg
ICAgIF9fcyA9IF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX19uYW1lLmNfc3RyKCksIF9f
bmFtZS5zaXplKCkpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu
dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf
YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVy
biBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ2QnLCBjaGFyKCksIF9fdik7IH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJ
dGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUg
X19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25l
ZCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZlcnRfaW50KF9fcywgX19pbywg
X19maWxsLCAndScsIGNoYXIoKSwgX192KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091
dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19iLCBjaGFyX3R5
cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9p
bnQoX19zLCBfX2IsIF9fZmlsbCwgJ2QnLCAnbCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9D
aGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19p
bywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX192KSBj
b25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1Jywg
J2wnLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ
dGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9f
cHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBkb3Vi
bGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9mbG9hdChfX3MsIF9faW8sIF9f
ZmlsbCwgY2hhcigpLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6
CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2Zp
bGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192KSBjb25zdAogICAgeyByZXR1cm4gX01fY29u
dmVydF9mbG9hdChfX3MsIF9faW8sIF9fZmlsbCwgJ0wnLCBfX3YpOyB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVtX3B1
dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2Um
IF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qgdm9pZCogX192KSBjb25z
dAogICAgewogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbGFncyA9IF9faW8uZmxhZ3MoKTsK
ICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gfihpb3NfYmFzZTo6c2hvd3BvcyB8IGlv
c19iYXNlOjpiYXNlZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGlv
c19iYXNlOjp1cHBlcmNhc2UgfCBpb3NfYmFzZTo6aW50ZXJuYWwpOwogICAgICBfX2lvLmZsYWdz
KF9fZmxhZ3MgJiBfX2ZtdCB8IChpb3NfYmFzZTo6aGV4IHwgaW9zX2Jhc2U6OnNob3diYXNlKSk7
CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9fcywg
X19pbywgX19maWxsLCAndScsIGNoYXIoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgICBfX2lvLmZs
YWdzKF9fZmxhZ3MpOwogICAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikKICAgICAgICB7CiAgICAg
ICAgICBfX2lvLmZsYWdzKF9fZmxhZ3MpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19zOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbW9uZXlfZ2V0PF9DaGFyVCwgX0luSXRlcj46Ogog
ICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg
aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n
IGRvdWJsZSYgX191bml0cykgY29uc3QKICAgIHsKICAgICAgc3RyaW5nX3R5cGUgX19zdHI7CiAg
ICAgIF9fYmVnID0gdGhpcy0+ZG9fZ2V0KF9fYmVnLCBfX2VuZCwgX19pbnRsLCBfX2lvLCBfX2Vy
ciwgX19zdHIpOwoKICAgICAgY29uc3QgaW50IF9fbiA9IG51bWVyaWNfbGltaXRzPGxvbmcgZG91
YmxlPjo6ZGlnaXRzMTA7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19i
dWlsdGluX2FsbG9jYShfX24pKTsKICAgICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRs
b2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlw
ZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBfQ2hhclQqIF9fd2NzID0gX19zdHIuY19z
dHIoKTsKICAgICAgX19jdHlwZS5uYXJyb3coX193Y3MsIF9fd2NzICsgX19zdHIuc2l6ZSgpICsg
MSwgY2hhcigpLCBfX2NzKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX19jcywgX191bml0cywgX19l
cnIsIF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBtb25leV9n
ZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5
cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFz
ZTo6aW9zdGF0ZSYgX19lcnIsIHN0cmluZ190eXBlJiBfX3VuaXRzKSBjb25zdAogICAgewoKICAg
ICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgdHJ1ZT4gX19tb25leV90cnVlOwogICAgICB0
eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJULCBmYWxzZT4gX19tb25leV9mYWxzZTsKICAgICAgdHlw
ZWRlZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgc3RyaW5n
X3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBf
X2lvLmdldGxvYygpOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNlX2ZhY2V0
PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBfX21wZiA9
IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBlPF9DaGFy
VD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCiAgICAgIGNv
bnN0IG1vbmV5X2Jhc2U6OnBhdHRlcm4gX19wID0gX19pbnRsID8gX19tcHQubmVnX2Zvcm1hdCgp
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVn
X2Zvcm1hdCgpOwoKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19wb3Nfc2lnbiA9X19pbnRsID8g
X19tcHQucG9zaXRpdmVfc2lnbigpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA6IF9fbXBmLnBvc2l0aXZlX3NpZ24oKTsKICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg
X19uZWdfc2lnbiA9X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLm5lZ2F0aXZlX3NpZ24oKTsKICAg
ICAgY29uc3QgY2hhcl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9wb2ludCgp
OwogICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2ludGwgPyBfX21wdC50aG91c2FuZHNf
c2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNh
bmRzX3NlcCgpOwoKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21w
dC5ncm91cGluZygpIDogX19tcGYuZ3JvdXBpbmcoKTsKCgogICAgICBzdHJpbmdfdHlwZSBfX3Np
Z247CgogICAgICBzdHJpbmcgX19ncm91cGluZ190bXA7CgogICAgICBpbnQgX19zZXBfcG9zID0g
MDsKCiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwoKICAgICAgYm9vbCBfX3Rlc3RkZWNm
b3VuZCA9IGZhbHNlOwoKCiAgICAgIHN0cmluZ190eXBlIF9fdGVtcF91bml0czsKCiAgICAgIGNo
YXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGNoYXJfdHlwZSBfX2VvZiA9IHN0YXRpY19jYXN0
PGNoYXJfdHlwZT4oY2hhcl90cmFpdHM8Y2hhcl90eXBlPjo6ZW9mKCkpOwogICAgICBmb3IgKGlu
dCBfX2kgPSAwOyBfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCA0ICYmIF9fdGVzdHZhbGlkOyArK19f
aSkKICAgICAgICB7CiAgICAgICAgICBwYXJ0IF9fd2hpY2ggPSBzdGF0aWNfY2FzdDxwYXJ0Pihf
X3AuZmllbGRbX19pXSk7CiAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAg
ICAgICAgaWYgKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZQogICAgICAgICAgICAg
ICAgICAgICAgfHwgX19pIDwgMiB8fCBfX3NpZ24uc2l6ZSgpID4gMQogICAgICAgICAgICAgICAg
ICAgICAgfHwgKChzdGF0aWNfY2FzdDxwYXJ0PihfX3AuZmllbGRbM10pICE9IG1vbmV5X2Jhc2U6
Om5vbmUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19pID09IDIpKQogICAgICAgICAg
ICAgICAgICAgIHsKCgoKCgogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUg
X19zeW1ib2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuY3Vycl9zeW1i
b2woKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fc3ltYm9sLnNp
emUoKTsKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2ogPSAwOwogICAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgX19qIDwgX19sZW4gJiYgX19zeW1ib2xbX19qXSA9PSBfX2MpCiAgICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcp
OwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19qOwogICAgICAgICAgICAgICAgICAgICAg
ICB9CgoKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2ogIT0gX19sZW4gJiYgKF9faW8uZmxh
Z3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkpCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz
dHZhbGlkID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c2lnbjoKCiAgICAgICAgICAg
ICAgICAgIGlmIChfX3Bvc19zaWduLnNpemUoKSAmJiBfX25lZ19zaWduLnNpemUoKSkKICAgICAg
ICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoX19jID09IF9fcG9zX3NpZ25b
MF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fc2ln
biA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7
CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX19j
ID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICAgIF9f
YyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX3Bvc19zaWduLnNpemUo
KSAmJiBfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICBfX3NpZ24gPSBfX3Bvc19zaWduOwogICAgICAgICAgICAgICAgICAgICAg
X19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
IGVsc2UgaWYgKF9fbmVnX3NpZ24uc2l6ZSgpICYmIF9fYyA9PSBfX25lZ19zaWduWzBdKQogICAg
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2lnbiA9IF9fbmVnX3Np
Z247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1v
bmV5X2Jhc2U6OnZhbHVlOgoKCiAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2Vu
ZAogICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6ZGln
aXQsIF9fYykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAoX19jID09IF9fZCAmJiAh
X190ZXN0ZGVjZm91bmQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9f
c2VwKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX19j
ID09IF9fZCkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfX3Rlc3RkZWNmb3VuZCA9IHRydWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fYyA9PSBfX3NlcCkKICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo
KSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fZ3JvdXBpbmdfdG1wICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bvcyk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2VwX3BvcyA9IDA7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2
YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX190ZW1wX3VuaXRzICs9IF9fYzsKICAgICAgICAgICAgICAgICAgICAg
ICAgICArK19fc2VwX3BvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToK
ICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKCiAgICAgICAgICAgICAgICAg
IGlmIChfX2kgIT0gMykKICAgICAgICAgICAgICAgICAgICB3aGlsZSAoX19iZWcgIT0gX19lbmQK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFj
ZSwgX19jKSkKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KCgogICAgICBpZiAo
X19zaWduLnNpemUoKSA+IDEpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0g
X19zaWduLnNpemUoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX2kgPSAxOwogICAgICAgICAgZm9y
ICg7IF9fYyAhPSBfX2VvZiAmJiBfX2kgPCBfX2xlbjsgKytfX2kpCiAgICAgICAgICAgIHdoaWxl
IChfX2JlZyAhPSBfX2VuZCAmJiBfX2MgIT0gX19zaWduW19faV0pCiAgICAgICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKCiAgICAgICAgICBpZiAoX19pICE9IF9fbGVuKQogICAgICAgICAgICBf
X3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICB3aGlsZSAoX190ZW1wX3VuaXRz
WzBdID09IF9fY3R5cGUud2lkZW4oJzAnKSkKICAgICAgICBfX3RlbXBfdW5pdHMuZXJhc2UoX190
ZW1wX3VuaXRzLmJlZ2luKCkpOwoKICAgICAgaWYgKF9fc2lnbi5zaXplKCkgJiYgX19zaWduID09
IF9fbmVnX3NpZ24pCiAgICAgICAgX190ZW1wX3VuaXRzLmluc2VydChfX3RlbXBfdW5pdHMuYmVn
aW4oKSwgX19jdHlwZS53aWRlbignLScpKTsKCgogICAgICBpZiAoX19ncm91cGluZy5zaXplKCkg
JiYgX19ncm91cGluZ190bXAuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIGlmICghX192ZXJp
ZnlfZ3JvdXBpbmcoX19ncm91cGluZywgX19ncm91cGluZ190bXApKQogICAgICAgICAgICBfX3Rl
c3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KCgogICAgICBpZiAoX19jID09IF9fZW9mKQogICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CgoKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCB8
fCAhX190ZW1wX3VuaXRzLnNpemUoKSkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp
dDsKICAgICAgZWxzZQoKICAgICAgICBfX3RlbXBfdW5pdHMuc3dhcChfX3VuaXRzKTsKCiAgICAg
IHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt
ZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46
OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywg
Y2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICBsb25nIGRvdWJsZSBfX3VuaXRzKSBjb25zdAog
ICAgewogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25z
dCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xv
Yyk7CgoKICAgICAgaW50IF9fY3Nfc2l6ZSA9IDY0OwogICAgICBjaGFyKiBfX2NzID0gc3RhdGlj
X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgIGludCBfX2xl
biA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXplLCAiJS4wMUxmIiwgX191bml0cywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfU19jX2xvY2FsZSk7CgogICAgICBp
ZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgIHsKICAgICAgICAgIF9fY3Nfc2l6ZSA9IF9f
bGVuICsgMTsKICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2Nz
LCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICB9CgoKCgoKCgogICAgICBfQ2hhclQqIF9f
d3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQp
ICogX19jc19zaXplKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBf
X3dzKTsKICAgICAgc3RyaW5nX3R5cGUgX19kaWdpdHMoX193cyk7CiAgICAgIHJldHVybiB0aGlz
LT5kb19wdXQoX19zLCBfX2ludGwsIF9faW8sIF9fZmlsbCwgX19kaWdpdHMpOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK
ICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9f
cywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAg
ICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3QKICAgIHsKICAgICAgdHlwZWRl
ZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgICAgdHlwZWRl
ZiBtb25leV9iYXNlOjpwYXJ0IHBhcnQ7CgogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lv
LmdldGxvYygpOwogICAgICBjb25zdCBzaXplX3R5cGUgX193aWR0aCA9IHN0YXRpY19jYXN0PHNp
emVfdHlwZT4oX19pby53aWR0aCgpKTsKCgogICAgICB0eXBlZGVmIG1vbmV5cHVuY3Q8X0NoYXJU
LCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIGZh
bHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICBjb25zdCBfX21vbmV5X3RydWUmIF9fbXB0ID0gdXNl
X2ZhY2V0PF9fbW9uZXlfdHJ1ZT4oX19sb2MpOwogICAgICBjb25zdCBfX21vbmV5X2ZhbHNlJiBf
X21wZiA9IHVzZV9mYWNldDxfX21vbmV5X2ZhbHNlPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgoK
ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2JlZyA9IF9fZGlnaXRzLmRhdGEoKTsKICAgICAgY29u
c3QgY2hhcl90eXBlKiBfX2VuZCA9IF9fYmVnICsgX19kaWdpdHMuc2l6ZSgpOwogICAgICBtb25l
eV9iYXNlOjpwYXR0ZXJuIF9fcDsKICAgICAgc3RyaW5nX3R5cGUgX19zaWduOwogICAgICBpZiAo
Kl9fYmVnICE9IF9fY3R5cGUud2lkZW4oJy0nKSkKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBf
X2ludGwgPyBfX21wdC5wb3NfZm9ybWF0KCkgOiBfX21wZi5wb3NfZm9ybWF0KCk7CiAgICAgICAg
ICBfX3NpZ24gPV9faW50bCA/IF9fbXB0LnBvc2l0aXZlX3NpZ24oKSA6IF9fbXBmLnBvc2l0aXZl
X3NpZ24oKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX3AgPSBf
X2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkgOiBfX21wZi5uZWdfZm9ybWF0KCk7CiAgICAgICAg
ICBfX3NpZ24gPV9faW50bCA/IF9fbXB0Lm5lZ2F0aXZlX3NpZ24oKSA6IF9fbXBmLm5lZ2F0aXZl
X3NpZ24oKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgfQoKCiAgICAgIF9fZW5kID0gX19j
dHlwZS5zY2FuX25vdChjdHlwZV9iYXNlOjpkaWdpdCwgX19iZWcsIF9fZW5kKTsKICAgICAgaWYg
KF9fYmVnICE9IF9fZW5kKQogICAgICAgIHsKCgoKICAgICAgICAgIHN0cmluZ190eXBlIF9fcmVz
OwogICAgICAgICAgc3RyaW5nX3R5cGUgX192YWx1ZTsKICAgICAgICAgIGNvbnN0IHN0cmluZ190
eXBlIF9fc3ltYm9sID0gX19pbnRsID8gX19tcHQuY3Vycl9zeW1ib2woKQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwoK
CiAgICAgICAgICBjb25zdCBpbnQgX19mcmFjID0gX19pbnRsID8gX19tcHQuZnJhY19kaWdpdHMo
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmZyYWNfZGlnaXRz
KCk7CiAgICAgICAgICBpZiAoX19mcmFjID4gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGNoYXJfdHlwZSBfX2QgPSBfX2ludGwgPyBfX21wdC5kZWNpbWFsX3BvaW50KCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZGVjaW1hbF9w
b2ludCgpOwogICAgICAgICAgICAgIGlmIChfX2VuZCAtIF9fYmVnID49IF9fZnJhYykKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fZW5k
IC0gX19mcmFjLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFs
dWUuYmVnaW4oKSwgX19kKTsKICAgICAgICAgICAgICAgICAgX19lbmQgLT0gX19mcmFjOwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKCiAgICAg
ICAgICAgICAgICAgIF9fdmFsdWUgPSBzdHJpbmdfdHlwZShfX2JlZywgX19lbmQpOwogICAgICAg
ICAgICAgICAgICBpbnQgX19wYWRkZWMgPSBfX2ZyYWMgLSAoX19lbmQgLSBfX2JlZyk7CiAgICAg
ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX3plcm8gPSBfX2N0eXBlLndpZGVuKCcwJyk7CiAgICAg
ICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwgX19wYWRkZWMsIF9f
emVybyk7CiAgICAgICAgICAgICAgICAgIF9fdmFsdWUuaW5zZXJ0KF9fdmFsdWUuYmVnaW4oKSwg
X19kKTsKICAgICAgICAgICAgICAgICAgX19iZWcgPSBfX2VuZDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgfQoKCgogICAgICAgICAgaWYgKF9fYmVnICE9IF9fZW5kKQogICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX2ludGwgPyBfX21w
dC5ncm91cGluZygpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgOiBfX21wZi5ncm91cGluZygpOwogICAgICAgICAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUo
KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlIF9f
c2VwID0gX19pbnRsID8gX19tcHQudGhvdXNhbmRzX3NlcCgpCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLnRob3VzYW5kc19zZXAoKTsKICAg
ICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19nYmVnID0gX19ncm91cGluZy5jX3N0cigpOwog
ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2dlbmQgPSBfX2diZWcgKyBfX2dyb3VwaW5n
LnNpemUoKTsKICAgICAgICAgICAgICAgICAgY29uc3QgaW50IF9fbiA9IChfX2VuZCAtIF9fYmVn
KSAqIDI7CiAgICAgICAgICAgICAgICAgIF9DaGFyVCogX193czIgPQogICAgICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkg
KiBfX24pKTsKICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzX2VuZCA9IF9fYWRkX2dyb3Vw
aW5nKF9fd3MyLCBfX3NlcCwgX19nYmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2JlZywgX19lbmQpOwogICAgICAgICAgICAg
ICAgICBfX3ZhbHVlLmluc2VydCgwLCBfX3dzMiwgX193c19lbmQgLSBfX3dzMik7CiAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX192YWx1ZS5pbnNl
cnQoMCwgc3RyaW5nX3R5cGUoX19iZWcsIF9fZW5kKSk7CiAgICAgICAgICAgIH0KCgogICAgICAg
ICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZiA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1
c3RmaWVsZDsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fdmFsdWUuc2l6ZSgpICsgX19z
aWduLnNpemUoKTsKICAgICAgICAgIF9fbGVuICs9IChfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6
c2hvd2Jhc2UpID8gX19zeW1ib2wuc2l6ZSgpIDogMDsKICAgICAgICAgIGJvb2wgX190ZXN0aXBh
ZCA9IF9fZiA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19sZW4gPCBfX3dpZHRoOwoKCiAgICAg
ICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kgPCA0OyArK19faSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtfX2ld
KTsKICAgICAgICAgICAgICBzd2l0Y2ggKF9fd2hpY2gpCiAgICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnN5bWJvbDoKICAgICAgICAgICAgICAgICAgaWYg
KF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgICAgICAgICBf
X3JlcyArPSBfX3N5bWJvbDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAg
ICBjYXNlIG1vbmV5X2Jhc2U6OnNpZ246CgoKCiAgICAgICAgICAgICAgICAgIGlmIChfX3NpZ24u
c2l6ZSgpKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fc2lnblswXTsKICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnZhbHVlOgog
ICAgICAgICAgICAgICAgICBfX3JlcyArPSBfX3ZhbHVlOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3BhY2U6CgoKCiAgICAgICAgICAg
ICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IHN0cmlu
Z190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9fY3R5cGUud2lkZW4oX19maWxsKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6Om5vbmU6
CiAgICAgICAgICAgICAgICAgIGlmIChfX3Rlc3RpcGFkKQogICAgICAgICAgICAgICAgICAgIF9f
cmVzICs9IHN0cmluZ190eXBlKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCgogICAgICAgICAg
aWYgKF9fc2lnbi5zaXplKCkgPiAxKQogICAgICAgICAgICBfX3JlcyArPSBzdHJpbmdfdHlwZShf
X3NpZ24uYmVnaW4oKSArIDEsIF9fc2lnbi5lbmQoKSk7CgoKICAgICAgICAgIF9fbGVuID0gX19y
ZXMuc2l6ZSgpOwogICAgICAgICAgaWYgKF9fd2lkdGggPiBfX2xlbikKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfX2YgPT0gaW9zX2Jhc2U6OmxlZnQpCgogICAgICAgICAgICAgICAg
X19yZXMuYXBwZW5kKF9fd2lkdGggLSBfX2xlbiwgX19maWxsKTsKICAgICAgICAgICAgICBlbHNl
CgogICAgICAgICAgICAgICAgX19yZXMuaW5zZXJ0KDAsIHN0cmluZ190eXBlKF9fd2lkdGggLSBf
X2xlbiwgX19maWxsKSk7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3dpZHRoOwogICAgICAgICAg
ICB9CgoKICAgICAgICAgIGZvciAoc2l6ZV90eXBlIF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19f
aiwgKytfX3MpCiAgICAgICAgICAgICpfX3MgPSBfX3Jlc1tfX2pdOwogICAgICAgIH0KICAgICAg
X19pby53aWR0aCgwKTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIHRpbWVfYmFzZTo6ZGF0ZW9yZGVy
CiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+Ojpkb19kYXRlX29yZGVyKCkgY29uc3QKICAg
IHsgcmV0dXJuIHRpbWVfYmFzZTo6bm9fb3JkZXI7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5J
dGVyPjo6CiAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoaXRlcl90eXBlJiBfX2JlZywgaXRlcl90
eXBlJiBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9z
X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfQ2hhclQqIF9fZm9ybWF0KSBjb25zdAogICAgewogICAgICBsb2NhbGUgX19sb2Mg
PSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g
dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8X0NoYXJUPjo6bGVuZ3RoKF9fZm9ybWF0KTsK
CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVu
ICYmICFfX2VycjsgKytfX2kpCiAgICAgICAgewogICAgICAgICAgY2hhciBfX2MgPSBfX2Zvcm1h
dFtfX2ldOwogICAgICAgICAgaWYgKF9fYyA9PSAnJScpCiAgICAgICAgICAgIHsKCiAgICAgICAg
ICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgIGNoYXIgX19tb2QgPSAw
OwogICAgICAgICAgICAgIGludCBfX21lbSA9IDA7CiAgICAgICAgICAgICAgaWYgKF9fYyA9PSAn
RScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19t
b2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fZm9ybWF0WysrX19pXTsKICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICBzd2l0Y2ggKF9fYykKICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogX19jczsKICAgICAgICAgICAgICAgICAgX0No
YXJUIF9fd2NzWzEwXTsKICAgICAgICAgICAgICAgIGNhc2UgJ2EnOgoKICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXMxWzddOwogICAgICAgICAgICAgICAgICBfX3RwLl9N
X2RheXNfYWJicmV2aWF0ZWQoX19kYXlzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3Rf
bmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX3dkYXksIF9fZGF5czEsIDcsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAnQSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5
cGUqIF9fZGF5czJbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5cyhfX2RheXMyKTsK
ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1f
d2RheSwgX19kYXlzMiwgNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdoJzoKICAg
ICAgICAgICAgICAgIGNhc2UgJ2InOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBl
KiBfX21vbnRoczFbMTJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9NX21vbnRoc19hYmJyZXZp
YXRlZChfX21vbnRoczEpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcs
IF9fZW5kLCBfX3RtLT50bV9tb24sIF9fbW9udGhzMSwgMTIsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgICAgY2FzZSAnQic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9u
dGhzMlsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzKF9fbW9udGhzMik7CiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21v
biwgX19tb250aHMyLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZXJy
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdjJzoKCiAg
ICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kdFsyXTsKICAgICAgICAgICAgICAg
ICAgX190cC5fTV9kYXRlX3RpbWVfZm9ybWF0cyhfX2R0KTsKICAgICAgICAgICAgICAgICAgX01f
ZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2R0WzBdKTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdkJzoKCiAgICAgICAgICAgICAgICAg
IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWRheSwgMSwgMzEsIDIsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdEJzoKCiAgICAgICAgICAgICAg
ICAgIF9fY3MgPSAiJW0vJWQvJXkiOwogICAgICAgICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9f
Y3MsIF9fY3MgKyA5LCBfX3djcyk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zv
cm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgICAgIGNhc2UgJ0gnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0o
X19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAwLCAyMywgMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgIGNhc2UgJ0knOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9u
dW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9ob3VyLCAxLCAxMiwgMiwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgICAgIGNhc2UgJ20nOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj
dF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMSwgMTIsIDIsIF9fY3R5cGUsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgaWYgKCFfX2Vy
cikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV9tb24gPSBfX21lbSAtIDE7CiAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnTSc6CgogICAgICAgICAgICAg
ICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG0tPnRtX21pbiwgMCwgNTksIDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAg
ICAgICAgaWYgKF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkgPT0gJ1xuJykKICAgICAgICAgICAg
ICAgICAgICArK19fYmVnOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgY2FzZSAnUic6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVIOiVN
IjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgNiwgX193Y3Mp
OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdT
JzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+
dG1fc2VjLCAwLCA1OSwgMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlw
ZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2Ug
J3QnOgogICAgICAgICAgICAgICAgICBpZiAoX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAn
XHQnKQogICAgICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1QnOgoKICAgICAgICAgICAgICAgICAg
X19jcyA9ICIlSDolTTolUyI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg
X19jcyArIDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0
KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgY2FzZSAneCc6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
ZGF0ZXNbMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF0ZV9mb3JtYXRzKF9fZGF0ZXMp
OwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBf
X2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZGF0ZXNbMF0pOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh
c2UgJ1gnOgoKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RpbWVzWzJdOwog
ICAgICAgICAgICAgICAgICBfX3RwLl9NX3RpbWVfZm9ybWF0cyhfX3RpbWVzKTsKICAgICAgICAg
ICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs
IF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3RpbWVzWzBd
KTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICd5JzoKCiAg
ICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1feWVh
ciwgMCwgOTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9f
ZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdZJzoK
CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX19tZW0sIDAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpLCA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7
CiAgICAgICAgICAgICAgICAgIGlmICghX19lcnIpCiAgICAgICAgICAgICAgICAgICAgX190bS0+
dG1feWVhciA9IF9fbWVtIC0gMTkwMDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICBjYXNlICdaJzoKCiAgICAgICAgICAgICAgICAgIGlmIChfX2N0eXBlLmlzKGN0eXBl
X2Jhc2U6OnVwcGVyLCAqX19iZWcpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgICAgIGludCBfX3RtcDsKICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFt
ZShfX2JlZywgX19lbmQsIF9fdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9fdGltZXB1bmN0PF9DaGFyVD46Ol9TX3RpbWV6b25lcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAxNCwgX19lcnIpOwoKCiAgICAgICAgICAgICAgICAgICAgICBj
aGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKCFfX2VyciAm
JiBfX3RtcCA9PSAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgKF9fYyA9PSBfX2N0eXBl
LndpZGVuKCctJykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfHwgX19jID09IF9fY3R5
cGUud2lkZW4oJysnKSkpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19lbmQsIF9fdG1wLCAwLCAyMywgMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIp
OwogICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwg
X190bXAsIDAsIDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg
ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKCiAgICAgICAgICAgICAgICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAg
ICAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApKQogICAg
ICAgICAgICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu
SXRlcj4KICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0
cmFjdF9udW0oaXRlcl90eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJl
ciwKICAgICAgICAgICAgICAgICAgIGludCBfX21pbiwgaW50IF9fbWF4LCBzaXplX3QgX19sZW4s
CiAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlLAogICAgICAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAogICAgewogICAgICBz
aXplX3QgX19pID0gMDsKICAgICAgc3RyaW5nIF9fZGlnaXRzOwogICAgICBib29sIF9fdGVzdHZh
bGlkID0gdHJ1ZTsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgd2hpbGUgKF9f
YmVnICE9IF9fZW5kICYmIF9faSA8IF9fbGVuCiAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0
eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9fZGlnaXRzICs9IF9f
Y3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAg
ICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IF9fbGVuKQogICAgICAgIHsKICAg
ICAgICAgIGludCBfX3ZhbHVlID0gYXRvaShfX2RpZ2l0cy5jX3N0cigpKTsKICAgICAgICAgIGlm
IChfX21pbiA8PSBfX3ZhbHVlICYmIF9fdmFsdWUgPD0gX19tYXgpCiAgICAgICAgICAgIF9fbWVt
YmVyID0gX192YWx1ZTsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm
YWxzZTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwog
ICAgICBpZiAoIV9fdGVzdHZhbGlkKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0
OwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K
ICAgIHZvaWQKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgX01fZXh0cmFjdF9u
YW1lKGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19lbmQsIGludCYgX19tZW1iZXIsCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhs
ZW4sCiAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyKSBjb25zdAog
ICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAg
ICAgaW50KiBfX21hdGNoZXMgPSBzdGF0aWNfY2FzdDxpbnQqPihfX2J1aWx0aW5fYWxsb2NhKHNp
emVvZihpbnQpICogX19pbmRleGxlbikpOwogICAgICBzaXplX3QgX19ubWF0Y2hlcyA9IDA7CiAg
ICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVlOwogICAg
ICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZTsKCiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7
CgogICAgICBmb3IgKHNpemVfdCBfX2kxID0gMDsgX19pMSA8IF9faW5kZXhsZW47ICsrX19pMSkK
ICAgICAgICBpZiAoX19jID09IF9fbmFtZXNbX19pMV1bMF0pCiAgICAgICAgICBfX21hdGNoZXNb
X19ubWF0Y2hlcysrXSA9IF9faTE7CgogICAgICB3aGlsZShfX25tYXRjaGVzID4gMSkKICAgICAg
ICB7CgogICAgICAgICAgc2l6ZV90IF9fbWlubGVuID0gMTA7CiAgICAgICAgICBmb3IgKHNpemVf
dCBfX2kyID0gMDsgX19pMiA8IF9fbm1hdGNoZXM7ICsrX19pMikKICAgICAgICAgICAgX19taW5s
ZW4gPSBtaW4oX19taW5sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX25hbWVzW19fbWF0Y2hlc1tfX2kyXV0pKTsKCiAgICAgICAgICBpZiAoX19w
b3MgPCBfX21pbmxlbiAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAg
ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBfX2kzID0gMDsgX19pMyA8IF9fbm1hdGNoZXM7ICsrX19pMykKICAgICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNb
X19pM11dOwogICAgICAgICAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSAhPSBfX2MpCiAgICAg
ICAgICAgICAgICAgICAgX19tYXRjaGVzW19faTNdID0gX19tYXRjaGVzWy0tX19ubWF0Y2hlc107
CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgaWYgKF9fbm1hdGNoZXMgPT0gMSkKICAgICAgICB7
CgogICAgICAgICAgX19uYW1lID0gX19uYW1lc1tfX21hdGNoZXNbMF1dOwogICAgICAgICAgY29u
c3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbmFtZSk7CiAgICAgICAg
ICB3aGlsZSAoX19wb3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZCAmJiBfX25hbWVbX19wb3Nd
ID09ICpfX2JlZykKICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKCiAgICAgICAgICBpZiAo
X19sZW4gPT0gX19wb3MpCiAgICAgICAgICAgIF9fbWVtYmVyID0gX19tYXRjaGVzWzBdOwogICAg
ICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgIH0KICAg
ICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICghX190ZXN0dmFs
aWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVf
Z2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fYmVnLCBp
dGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6
Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAgX0NoYXJUIF9fd2Nz
WzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiVYIjsKICAgICAgbG9jYWxlIF9fbG9jID0g
X19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9m
YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9f
Y3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQs
IF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAg
ICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0
ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X2RhdGUoaXRlcl90
eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg
ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3QKICAgIHsKICAgICAg
X0NoYXJUIF9fd2NzWzNdOwogICAgICBjb25zdCBjaGFyKiBfX2NzID0gIiV4IjsKICAgICAgbG9j
YWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19j
dHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBfX2N0eXBlLndp
ZGVuKF9fY3MsIF9fY3MgKyAzLCBfX3djcyk7CiAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChf
X2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtLCBfX3djcyk7CiAgICAgIGlmIChfX2JlZyA9
PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4g
X19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRl
cj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0
X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lv
LAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5
cGU7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0
PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9f
bG9jKTsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2RheXNbN107CiAgICAgIF9fdHAuX01fZGF5
c19hYmJyZXZpYXRlZChfX2RheXMpOwogICAgICBpbnQgX190bXB3ZGF5OwogICAgICBfTV9leHRy
YWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtcHdkYXksIF9fZGF5cywgNywgX19lcnIpOwoKCgoK
CgoKICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBf
X3RyYWl0c190eXBlOjpsZW5ndGgoX19kYXlzW19fdG1wd2RheV0pOwogICAgICAgICAgX190cC5f
TV9kYXlzKF9fZGF5cyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbmFtZSA9IF9fZGF5
c1tfX3RtcHdkYXldOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQogICAg
ICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRzX3R5
cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVuICYm
IF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10gPT0g
Kl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAgICBp
ZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFp
bGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgX190
bS0+dG1fd2RheSA9IF9fdG1wd2RheTsKICAgICAgICB9CiAgICAgIGlmIChfX2JlZyA9PSBfX2Vu
ZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7
CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg
ICBfSW5JdGVyCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldF9tb250
aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsCiAgICAgICAgICAgICAgICAg
ICAgIGlvc19iYXNlJiBfX2lvLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBj
b25zdAogICAgewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlw
ZTsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8
X0NoYXJUPiBjb25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19s
b2MpOwogICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhzWzEyXTsKICAgICAgX190cC5fTV9t
b250aHNfYWJicmV2aWF0ZWQoX19tb250aHMpOwogICAgICBpbnQgX190bXBtb247CiAgICAgIF9N
X2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9fdG1wbW9uLCBfX21vbnRocywgMTIsIF9fZXJy
KTsKCgoKCgoKCiAgICAgIGlmICghX19lcnIpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f
cG9zID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fbW9udGhzW19fdG1wbW9uXSk7CiAgICAgICAg
ICBfX3RwLl9NX21vbnRocyhfX21vbnRocyk7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9f
bmFtZSA9IF9fbW9udGhzW19fdG1wbW9uXTsKICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdID09
ICpfX2JlZykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBjb25zdCBzaXplX3QgX19sZW4g
PSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgICAgICB3aGlsZSAoX19w
b3MgPCBfX2xlbiAmJiBfX2JlZyAhPSBfX2VuZAogICAgICAgICAgICAgICAgICAgICAmJiBfX25h
bWVbX19wb3NdID09ICpfX2JlZykKICAgICAgICAgICAgICAgICsrX19iZWcsICsrX19wb3M7CiAg
ICAgICAgICAgICAgaWYgKF9fbGVuICE9IF9fcG9zKQogICAgICAgICAgICAgICAgX19lcnIgfD0g
aW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX19lcnIpCiAg
ICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fdG1wbW9uOwogICAgICAgIH0KCiAgICAgIGlmIChf
X2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICBy
ZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg
X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAg
ZG9fZ2V0X3llYXIoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBf
X2lvLAogICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkg
Y29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29u
c3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19s
b2MpOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAgICAgc2l6ZV90IF9faSA9IDA7
CiAgICAgIHN0cmluZyBfX2RpZ2l0czsKICAgICAgd2hpbGUgKF9faSA8IDQgJiYgX19iZWcgIT0g
X19lbmQgJiYgX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKSkKICAgICAgICB7CiAg
ICAgICAgICBfX2RpZ2l0cyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIDApOwogICAgICAgICAgX19j
ID0gKigrK19fYmVnKTsKICAgICAgICAgICsrX19pOwogICAgICAgIH0KICAgICAgaWYgKF9faSA9
PSAyIHx8IF9faSA9PSA0KQogICAgICAgIHsKICAgICAgICAgIGxvbmcgX19sOwogICAgICAgICAg
X19jb252ZXJ0X3RvX3YoX19kaWdpdHMuY19zdHIoKSwgX19sLCBfX2VyciwgX1NfY19sb2NhbGUp
OwogICAgICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX19sIDw9IDIx
NDc0ODM2NDcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2wgPSBfX2kgPT0gMiA/IF9f
bCA6IF9fbCAtIDE5MDA7CiAgICAgICAgICAgICAgX190bS0+dG1feWVhciA9IHN0YXRpY19jYXN0
PGludD4oX19sKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f
ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg
ICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJpdDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0
ZXIKICAgIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIHB1dChpdGVyX3R5cGUgX19z
LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlLCBjb25zdCB0bSogX190bSwKICAgICAgICBjb25z
dCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdAogICAgewogICAgICBs
b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBf
X2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIHdoaWxlIChf
X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fY3R5cGUubmFy
cm93KCpfX2JlZywgMCk7CiAgICAgICAgICArK19fYmVnOwogICAgICAgICAgaWYgKF9fYyA9PSAn
JScpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0OwogICAgICAgICAg
ICAgIGNoYXIgX19tb2QgPSAwOwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IDE7CiAgICAg
ICAgICAgICAgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAr
K19fYmVnOwogICAgICAgICAgICAgIGlmIChfX2MgPT0gJ0UnIHx8IF9fYyA9PSAnTycpCiAgICAg
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbW9kID0gX19jOwogICAgICAgICAgICAg
ICAgICBfX2Zvcm1hdCA9IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCk7CiAgICAgICAgICAgICAg
ICAgICsrX19iZWc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgX19mb3JtYXQgPSBfX2M7CiAgICAgICAgICAgICAgX19zID0gdGhpcy0+ZG9fcHV0
KF9fcywgX19pbywgY2hhcl90eXBlKCksIF9fdG0sIF9fZm9ybWF0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgewogICAgICAgICAgICAgICpfX3MgPSBfX2M7CiAgICAgICAgICAgICAgKytfX3M7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAg
dGltZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv
c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgICAgIGNoYXIg
X19mb3JtYXQsIGNoYXIgX19tb2QpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9f
aW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1c2VfZmFj
ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBjb25z
dCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAg
ICBjb25zdCBzaXplX3QgX19tYXhsZW4gPSA2NDsKICAgICAgY2hhcl90eXBlKiBfX3JlcyA9CiAg
ICAgICAgc3RhdGljX2Nhc3Q8Y2hhcl90eXBlKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoY2hh
cl90eXBlKSAqIF9fbWF4bGVuKSk7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSBfX2ZtdFs0XTsKICAg
ICAgX19mbXRbMF0gPSBfX2N0eXBlLndpZGVuKCclJyk7CiAgICAgIGlmICghX19tb2QpCiAgICAg
ICAgewogICAgICAgICAgX19mbXRbMV0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzJdID0g
Y2hhcl90eXBlKCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX19m
bXRbMV0gPSBfX21vZDsKICAgICAgICAgIF9fZm10WzJdID0gX19mb3JtYXQ7CiAgICAgICAgICBf
X2ZtdFszXSA9IGNoYXJfdHlwZSgpOwogICAgICAgIH0KCiAgICAgIF9fdHAuX01fcHV0KF9fcmVz
LCBfX21heGxlbiwgX19mbXQsIF9fdG0pOwoKCiAgICAgIHNpemVfdCBfX2xlbiA9IGNoYXJfdHJh
aXRzPGNoYXJfdHlwZT46Omxlbmd0aChfX3Jlcyk7CiAgICAgIGZvciAoc2l6ZV90IF9faSA9IDA7
IF9faSA8IF9fbGVuOyArK19faSwgKytfX3MpCiAgICAgICAgKl9fcyA9IF9fcmVzW19faV07CiAg
ICAgIHJldHVybiBfX3M7CiAgICB9CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg
aW50CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX2NvbXBhcmUoY29uc3QgX0NoYXJUKiwgY29uc3Qg
X0NoYXJUKikgY29uc3QKICAgIHsgcmV0dXJuIDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVD4KICAgIHNpemVfdAogICAgY29sbGF0ZTxfQ2hhclQ+OjpfTV90cmFuc2Zvcm0oX0NoYXJU
KiwgY29uc3QgX0NoYXJUKiwgc2l6ZV90KSBjb25zdAogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBk
b19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19sbzIsIGNvbnN0IF9DaGFyVCogX19oaTIpIGNvbnN0
CiAgICB7CiAgICAgIGNvbnN0IHN0cmluZ190eXBlIF9fb25lKF9fbG8xLCBfX2hpMSk7CiAgICAg
IGNvbnN0IHN0cmluZ190eXBlIF9fdHdvKF9fbG8yLCBfX2hpMik7CiAgICAgIHJldHVybiBfTV9j
b21wYXJlKF9fb25lLmNfc3RyKCksIF9fdHdvLmNfc3RyKCkpOwogICAgfQoKIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIGNvbGxhdGU8X0NoYXJUPjo6c3RyaW5nX3R5cGUK
ICAgIGNvbGxhdGU8X0NoYXJUPjo6CiAgICBkb190cmFuc2Zvcm0oY29uc3QgX0NoYXJUKiBfX2xv
LCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2xlbiA9IChf
X2hpIC0gX19sbykgKiAyOwoKICAgICAgX0NoYXJUKiBfX2MgPQogICAgICAgIHN0YXRpY19jYXN0
PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2xlbikpOwogICAg
ICBzaXplX3QgX19yZXMgPSBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX2xlbik7CgogICAgICBp
ZiAoX19yZXMgPj0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgX19jID0KICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChf
X3JlcyArIDEpKSk7CiAgICAgICAgICBfTV90cmFuc2Zvcm0oX19jLCBfX2xvLCBfX3JlcyArIDEp
OwogICAgICAgIH0KICAgICAgcmV0dXJuIHN0cmluZ190eXBlKF9fYyk7CiAgICB9CgogdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9uZwogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRv
X2hhc2goY29uc3QgX0NoYXJUKiBfX2xvLCBjb25zdCBfQ2hhclQqIF9faGkpIGNvbnN0CiAgICB7
CiAgICAgIHVuc2lnbmVkIGxvbmcgX192YWwgPSAwOwogICAgICBmb3IgKDsgX19sbyA8IF9faGk7
ICsrX19sbykKICAgICAgICBfX3ZhbCA9ICpfX2xvICsgKChfX3ZhbCA8PCA3KSB8CiAgICAgICAg
ICAgICAgICAgICAgICAgKF9fdmFsID4+IChudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nPjo6
ZGlnaXRzIC0gNykpKTsKICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KF9fdmFsKTsKICAg
IH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1R2PgogICAgdm9pZAogICAgX19jb252ZXJ0X3Rv
X3YoY29uc3QgY2hhciogX19pbiwgX1R2JiBfX291dCwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy
LAogICAgICAgICAgICAgICAgICAgY29uc3QgX19jX2xvY2FsZSYgX19jbG9jLCBpbnQgX19iYXNl
ID0gMTApOwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVy
dF9mcm9tX3YoY2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10
LAogICAgICAgICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9f
cHJlYyA9IC0xKTsKIyAxOTkwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQKICAgIHsKICAgICAgc3Rh
dGljIHZvaWQKICAgICAgX1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBfQ2hh
clQqIF9fbmV3cywKICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19vbGRzLCBjb25zdCBzdHJl
YW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxlbiwg
Y29uc3QgYm9vbCBfX251bSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19w
YWQoaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0IF9DaGFyVCogX19vbGRzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cmVhbXNpemUgX19uZXdsZW4sCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX29sZGxl
biwgY29uc3QgYm9vbCBfX251bSkKICAgIHsKICAgICAgc2l6ZV90IF9fcGxlbiA9IHN0YXRpY19j
YXN0PHNpemVfdD4oX19uZXdsZW4gLSBfX29sZGxlbik7CiAgICAgIF9DaGFyVCogX19wYWRzID0g
c3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9f
cGxlbikpOwogICAgICBfVHJhaXRzOjphc3NpZ24oX19wYWRzLCBfX3BsZW4sIF9fZmlsbCk7Cgog
ICAgICBfQ2hhclQqIF9fYmVnOwogICAgICBfQ2hhclQqIF9fZW5kOwogICAgICBzaXplX3QgX19t
b2QgPSAwOwogICAgICBzaXplX3QgX19iZWdsZW47CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBf
X2FkanVzdCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlm
IChfX2FkanVzdCA9PSBpb3NfYmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcg
PSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xk
bGVuOwogICAgICAgICAgX19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChf
X2FkanVzdCA9PSBpb3NfYmFzZTo6aW50ZXJuYWwgJiYgX19udW0pCiAgICAgICAgewoKCgogICAg
ICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAgIGNvbnN0IGN0eXBl
PF9DaGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAg
ICAgICAgIGNvbnN0IF9DaGFyVCBfX21pbnVzID0gX19jdHlwZS53aWRlbignLScpOwogICAgICAg
ICAgY29uc3QgX0NoYXJUIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgICAgIGJv
b2wgX190ZXN0c2lnbiA9IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19taW51cykKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHx8IF9UcmFpdHM6OmVxKF9fb2xkc1swXSwgX19wbHVzKTsKCiAg
ICAgICAgICBib29sIF9fdGVzdGhleCA9IF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJzAnKSwg
X19vbGRzWzBdKQogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX1RyYWl0czo6ZXEoX19j
dHlwZS53aWRlbigneCcpLCBfX29sZHNbMV0pCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8fCBfVHJhaXRzOjplcShfX2N0eXBlLndpZGVuKCdYJyksIF9fb2xkc1sxXSkpOwogICAgICAg
ICAgaWYgKF9fdGVzdGhleCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3c1swXSA9
IF9fb2xkc1swXTsKICAgICAgICAgICAgICBfX25ld3NbMV0gPSBfX29sZHNbMV07CiAgICAgICAg
ICAgICAgX19tb2QgKz0gMjsKICAgICAgICAgICAgICBfX25ld3MgKz0gMjsKICAgICAgICAgICAg
ICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAg
ICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzICsgX19tb2QpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3RzaWduKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX1RyYWl0czo6ZXEoKF9fbmV3c1swXSA9IF9fb2xkc1swXSksIF9fcGx1cykg
PyBfX3BsdXMgOiBfX21pbnVzOwogICAgICAgICAgICAgICsrX19tb2Q7CiAgICAgICAgICAgICAg
KytfX25ld3M7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19i
ZWdsZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+
KF9fb2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg
ICB7CgogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgICAgIF9fYmVnbGVu
ID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29s
ZHMpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewoKICAgICAg
ICAgIF9fYmVnID0gX19wYWRzOwogICAgICAgICAgX19iZWdsZW4gPSBfX3BsZW47CiAgICAgICAg
ICBfX2VuZCA9IGNvbnN0X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICB9CiAgICAgIF9U
cmFpdHM6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICBfVHJhaXRzOjpjb3B5
KF9fbmV3cyArIF9fYmVnbGVuLCBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX25l
d2xlbiAtIF9fYmVnbGVuIC0gX19tb2QpOwogICAgfQojIDIwODUgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMwog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGJvb2wKICAgIF9fdmVyaWZ5X2dyb3VwaW5n
KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQ+JiBfX2dyb3VwaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmdfdG1wKQogICAgewogICAgICBp
bnQgX19pID0gMDsKICAgICAgaW50IF9faiA9IDA7CiAgICAgIGNvbnN0IGludCBfX2xlbiA9IF9f
Z3JvdXBpbmcuc2l6ZSgpOwogICAgICBjb25zdCBpbnQgX19uID0gX19ncm91cGluZ190bXAuc2l6
ZSgpOwogICAgICBib29sIF9fdGVzdCA9IHRydWU7CgoKCgogICAgICB3aGlsZSAoX190ZXN0ICYm
IF9faSA8IF9fbiAtIDEpCiAgICAgICAgZm9yIChfX2ogPSAwOyBfX3Rlc3QgJiYgX19qIDwgX19s
ZW4gJiYgX19pIDwgX19uIC0gMTsgKytfX2osKytfX2kpCiAgICAgICAgICBfX3Rlc3QgJj0gX19n
cm91cGluZ1tfX2pdID09IF9fZ3JvdXBpbmdfdG1wW19fbiAtIF9faSAtIDFdOwoKCiAgICAgIF9f
aiA9PSBfX2xlbiA/IF9faiA9IDAgOiBfX2o7CiAgICAgIF9fdGVzdCAmPSBfX2dyb3VwaW5nW19f
al0gPj0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CiAgICAgIHJldHVybiBfX3Rlc3Q7
CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0NoYXJUKgogICAg
X19hZGRfZ3JvdXBpbmcoX0NoYXJUKiBfX3MsIF9DaGFyVCBfX3NlcCwKICAgICAgICAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIF9fZ2JlZywgY29uc3QgY2hhciogX19nZW5kLAogICAgICAgICAgICAg
ICAgICAgY29uc3QgX0NoYXJUKiBfX2ZpcnN0LCBjb25zdCBfQ2hhclQqIF9fbGFzdCkKICAgIHsK
ICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiAqX19nYmVnKQogICAgICAgIHsKICAgICAgICAg
IF9fcyA9IF9fYWRkX2dyb3VwaW5nKF9fcywgX19zZXAsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAoX19nYmVnICsgMSA9PSBfX2dlbmQgPyBfX2diZWcgOiBfX2diZWcgKyAxKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ2VuZCwgX19maXJzdCwgX19sYXN0IC0gKl9f
Z2JlZyk7CiAgICAgICAgICBfX2ZpcnN0ID0gX19sYXN0IC0gKl9fZ2JlZzsKICAgICAgICAgICpf
X3MrKyA9IF9fc2VwOwogICAgICAgIH0KICAgICAgZG8KICAgICAgICAqX19zKysgPSAqX19maXJz
dCsrOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpOwogICAgICByZXR1cm4gX19zOwog
ICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCBmYWxzZT47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPGNoYXIsIGZhbHNlPjsKICBleHRlcm4g
dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgdHJ1ZT47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1vbmV5X2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9u
ZXlfcHV0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3Qs
IGZhbHNlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVl
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8d2NoYXJfdCwgZmFs
c2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCB0
cnVlPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlfZ2V0PHdjaGFyX3Q+OwogIGV4dGVy
biB0ZW1wbGF0ZSBjbGFzcyBtb25leV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIG51bXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5h
bWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8Y2hhcj47CiAgZXh0ZXJu
IHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51
bXB1bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBudW1wdW5jdF9ieW5hbWU8
d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9nZXQ8d2NoYXJfdD47CiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIG51bV9wdXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIF9fdGltZXB1bmN0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDxj
aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPGNoYXI+OwogIGV4
dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xh
c3MgdGltZV9nZXRfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX3RpbWVw
dW5jdDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXQ8d2NoYXJfdD47
CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRl
cm4gdGVtcGxhdGUgY2xhc3MgdGltZV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNs
YXNzIHRpbWVfZ2V0X2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVz
c2FnZXM8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTxjaGFy
PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXM8d2NoYXJfdD47CiAgZXh0ZXJuIHRl
bXBsYXRlIGNsYXNzIG1lc3NhZ2VzX2J5bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUg
Y2xhc3MgY3R5cGVfYnluYW1lPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjdHlwZV9i
eW5hbWU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnluYW1lPGNo
YXIsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvZGVjdnRfYnlu
YW1lPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNv
bGxhdGU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPGNoYXI+
OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBjb2xsYXRlPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1w
bGF0ZSBjbGFzcyBjb2xsYXRlX2J5bmFtZTx3Y2hhcl90PjsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCBjb2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4mCiAgICB1c2VfZmFjZXQ8Y29k
ZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTxjaGFyPiYKICAgIHVzZV9mYWNldDxjb2xsYXRlPGNo
YXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVu
Y3Q8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0
PG51bV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBj
b25zdCBudW1fZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8Y2hhcj4gPihjb25zdCBs
b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIHRy
dWU+JgogICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgdHJ1ZT4gPihjb25zdCBsb2NhbGUm
KTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PGNoYXIsIGZhbHNlPiYK
ICAgIHVzZV9mYWNldDxtb25leXB1bmN0PGNoYXIsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDxjaGFyPiYKICAgIHVzZV9mYWNl
dDxtb25leV9wdXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAg
ICBjb25zdCBtb25leV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PGNoYXI+ID4o
Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190aW1lcHVuY3Q8
Y2hhcj4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDxjaGFyPiYKICAgIHVzZV9mYWNl
dDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGNvbnN0IHRpbWVfZ2V0PGNoYXI+JgogICAgdXNlX2ZhY2V0PHRpbWVfZ2V0PGNoYXI+ID4oY29u
c3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbWVzc2FnZXM8Y2hhcj4m
CiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu
IHRlbXBsYXRlCiAgICBjb25zdCBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4mCiAg
ICB1c2VfZmFjZXQ8Y29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+ID4obG9jYWxlIGNv
bnN0Jik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgY29sbGF0ZTx3Y2hhcl90PiYKICAg
IHVzZV9mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgY29uc3QgbnVtcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtcHVu
Y3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25z
dCBudW1fcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1fZ2V0PHdjaGFyX3Q+
JgogICAgdXNlX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+JgogICAgdXNl
X2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiYKICAgIHVz
ZV9mYWNldDxtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBl
eHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5X3B1dDx3Y2hhcl90PiYKICAgIHVzZV9mYWNl
dDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl
CiAgICBjb25zdCBtb25leV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bW9uZXlfZ2V0PHdj
aGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgX190
aW1lcHVuY3Q8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihj
b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCB0aW1lX3B1dDx3Y2hh
cl90PiYKICAgIHVzZV9mYWNldDx0aW1lX3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK
ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfZ2V0PHdjaGFyX3Q+JgogICAgdXNlX2Zh
Y2V0PHRpbWVfZ2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgY29uc3QgbWVzc2FnZXM8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bWVzc2FnZXM8d2No
YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAg
aGFzX2ZhY2V0PGN0eXBlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0
ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiA+
KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNl
dDxjb2xsYXRlPGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg
Ym9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4
dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9wdXQ8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVt
X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxtb25leXB1bmN0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0
IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25l
eV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8X190aW1lcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0
ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8Y2hhcj4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGlt
ZV9nZXQ8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s
CiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiBleHRlcm4g
dGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjdHlwZTx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2RlY3Z0
PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl
bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29sbGF0ZTx3Y2hhcl90PiA+KGNvbnN0IGxv
Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1wdW5j
dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK
ICAgIGhhc19mYWNldDxudW1fcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVy
biB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bV9nZXQ8d2NoYXJfdD4gPihjb25z
dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9u
ZXlwdW5jdDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg
IGJvb2wKICAgIGhhc19mYWNldDxtb25leV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsK
CiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfZ2V0PHdjaGFy
X3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFz
X2ZhY2V0PF9fdGltZXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0
ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3Qg
bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PHRpbWVf
Z2V0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9v
bAogICAgaGFzX2ZhY2V0PG1lc3NhZ2VzPHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cn0KIyA0
NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9sb2NhbGUi
IDIgMwojIDM4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4z
L2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+
JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAg
ICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi
YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJl
YW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf
dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp
CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg
ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg
ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz
LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg
dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjpvcGVyYXRvcjw8KF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbikKICAgIHsKICAgICAgc2Vu
dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zYmluKQogICAgICAgIHsK
ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCFfX2NvcHlfc3Ry
ZWFtYnVmcygqdGhpcywgX19zYmluLCB0aGlzLT5yZGJ1ZigpKSkKICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAg
Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+
ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo
cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zYmluKQogICAg
ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gKnRoaXM7
CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg
IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6b3BlcmF0b3I8PChib29sIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+Zmls
bCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf
YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf
X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z
X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9
CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25n
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjaGFy
X3R5cGUgX19jID0gdGhpcy0+ZmlsbCgpOwogICAgICAgICAgICAgIGlvc19iYXNlOjpmbXRmbGFn
cyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgICAg
ICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgYm9vbCBfX2IgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgaWYgKChf
X2ZtdCAmIGlvc19iYXNlOjpvY3QpIHx8IChfX2ZtdCAmIGlvc19iYXNlOjpoZXgpKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX19sID0g
c3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9f
YiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg
ICAgICBfX2IgPSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVk
KCk7CiAgICAgICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
ICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAg
ICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0
aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+
CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pCiAgICB7CiAgICAg
IHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRo
aXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpv
cGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9fYyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAg
ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJh
c2VmaWVsZDsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgIGlmICgoX19mbXQgJiBpb3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3Nf
YmFzZTo6aGV4KSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1
bnNpZ25lZCBsb25nIGxvbmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19i
ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAg
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgIF9fYiA9IF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQo
KTsKICAgICAgICAgICAgICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl
dChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMs
ICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRo
aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj
YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp
cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l
eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy
b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6b3BlcmF0b3I8PChkb3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg
ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f
bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi
YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU
LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog
ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91Ymxl
IF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp
CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAo
X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1
dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAg
fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg
IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg
ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K
ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No
YXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMs
IHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnB1dChj
aGFyX3R5cGUgX19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg
KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBpbnRfdHlwZSBfX3B1dCA9IHJkYnVmKCktPnNw
dXRjKF9fYyk7CiAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fcHV0LCB0
cmFpdHNfdHlwZTo6ZW9mKCkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8
dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hh
clQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp3cml0ZShj
b25zdCBfQ2hhclQqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHN0cmVhbXNp
emUgX19wdXQgPSB0aGlzLT5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbik7CiAgICAgICAgICBpZiAo
IF9fcHV0ICE9IF9fbikKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf
VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6Zmx1c2goKQogICAg
ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICBpZiAodGhpcy0+cmRidWYoKSAmJiB0aGlzLT5yZGJ1ZigpLT5wdWJzeW5jKCkg
PT0gLTEpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg
ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh
clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnRl
bGxwKCkKICAgIHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIGlm
ICghdGhpcy0+ZmFpbCgpKQogICAgICAgIF9fcmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29m
ZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFzZTo6b3V0KTsKICAgICAgcmV0dXJuIF9fcmV0Owog
ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpzZWVrcChwb3NfdHlwZSBfX3BvcykKICAgIHsKICAgICAgaWYgKCF0aGlzLT5m
YWlsKCkpCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVm
KCktPnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19l
cnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo
aW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf
b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjoKICAgIHNlZWtwKG9mZl90eXBlIF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2QpCiAg
ICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQogICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5
cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91
dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBfQ2hhclQgX19j
KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29z
dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAg
ICAgICAgICAgIF9DaGFyVCogX19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGlu
X2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIChfX3cgKyAxKSkpOwogICAgICAgICAgICAgIF9fcGFk
c1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAg
ICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg
IF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3Bh
ZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19j
LCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywgX19sZW4pOwog
ICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQu
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRl
bXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg
X19jKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gX19v
c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi
KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAg
ICAgICAgICAgICBjaGFyKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxjaGFyKj4oX19idWlsdGluX2Fs
bG9jYShfX3cgKyAxKSk7CiAgICAgICAgICAgICAgX19wYWRzWzBdID0gX19jOwogICAgICAgICAg
ICAgIHN0cmVhbXNpemUgX19sZW4gPSAxOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikK
ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8Y2hhciwgX1RyYWl0cz46
Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBfX2xlbiwgZmFsc2UpOwogICAg
ICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgw
KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAg
ICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp
OwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJp
dCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQog
ICAgICByZXR1cm4gX19vdXQ7CiAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBv
cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IF9D
aGFyVCogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRy
eSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAgICB7CiAgICAg
ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19v
dXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9D
aGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAg
ICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX1RyYWl0czo6
bGVuZ3RoKF9fcykpOwogICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9f
b3V0LCBfX291dC5maWxsKCksIF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAg
ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNl
cHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25z
KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg
ICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFz
aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwoKCgogICAgICB0eXBl
ZGVmIGNoYXJfdHJhaXRzPGNoYXI+IF9fdHJhaXRzX3R5cGU7CgogICAgICB0eXBlbmFtZSBfX29z
dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19z
KQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2NsZW4gPSBfX3RyYWl0c190eXBlOjpsZW5n
dGgoX19zKTsKICAgICAgICAgIF9DaGFyVCogX193cyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9f
YnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiAoX19jbGVuICsgMSkpKTsKICAgICAgICAg
IGZvciAoc2l6ZV90IF9faSA9IDA7IF9faSA8IF9fY2xlbjsgKytfX2kpCiAgICAgICAgICAgIF9f
d3NbX19pXSA9IF9fb3V0LndpZGVuKF9fc1tfX2ldKTsKICAgICAgICAgIF9DaGFyVCogX19zdHIg
PSBfX3dzOwoKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFt
c2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fY2xlbik7CiAgICAgICAgICAg
ICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAgICAgIF9DaGFyVCog
X19wYWRzID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0No
YXJUKSAqIF9fdykpOwoKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChf
X291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3dzLCBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAg
ICAgICAgIF9fc3RyID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3N0ciwgX19sZW4pOwog
ICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQu
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19v
dXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0K
CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp
dHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwg
Y29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhciwg
X1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewog
ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9
IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8
Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBf
X2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKCiAg
ICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBfX3BhZDxjaGFyLCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5maWxsKCks
IF9fcGFkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fcywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7
CiAgICAgICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIF9fb3V0LndyaXRlKF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRo
KDApOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAg
ICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJp
dCk7CiAgICAgICAgICAgICAgaWYgKChfX291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFk
Yml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKCFfX3MpCiAgICAgICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgIHJldHVybiBfX291dDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D
aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mIF9fb3V0LAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU
LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3Ry
ZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0
cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg
ICB7CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcyA9IF9fc3RyLmRhdGEoKTsKICAgICAgICAg
IHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgIF9DaGFyVCogX19wYWRz
ID0gc3RhdGljX2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAq
IF9fdykpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNp
emU+KF9fc3RyLnNpemUoKSk7CgoKCiAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQs
IF9fb3V0LmZpbGwoKSwgX19wYWRzLCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICBfX3MgPSBf
X3BhZHM7CiAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAg
IHN0cmVhbXNpemUgX19yZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAg
ICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAg
ICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAg
ICByZXR1cm4gX19vdXQ7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19v
c3RyZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBlbmRsKG9zdHJlYW0mKTsK
ICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kcyhvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBs
YXRlIG9zdHJlYW0mIGZsdXNoKG9zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYg
b3BlcmF0b3I8PChvc3RyZWFtJiwgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9w
ZXJhdG9yPDwob3N0cmVhbSYsIHVuc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry
ZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBzaWduZWQgY2hhcik7CiAgZXh0ZXJuIHRlbXBsYXRl
IG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IGNoYXIqKTsKICBleHRlcm4gdGVt
cGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3QgdW5zaWduZWQgY2hhciop
OwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBz
aWduZWQgY2hhciopOwoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX29zdHJlYW08d2No
YXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRsKHdvc3RyZWFtJik7CiAgZXh0
ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBlbmRzKHdvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRl
IHdvc3RyZWFtJiBmbHVzaCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYg
b3BlcmF0b3I8PCh3b3N0cmVhbSYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh
bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh
bSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIGNvbnN0IHdjaGFyX3QqKTsKICBleHRlcm4gdGVtcGxh
dGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBjb25zdCBjaGFyKik7Cgp9CiMgMjc2
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL29zdHJlYW0i
IDIgMwojIDI1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL2V4Y2VwdGlvbnMuaCIgMgojIDMxMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCmNsYXNzIEV4Y2VwdGlvbkJh
c2UgOiBwdWJsaWMgc3RkOjpleGNlcHRpb24KewogIHB1YmxpYzoKCgoKICAgIEV4Y2VwdGlvbkJh
c2UgKCk7CgoKCgoKCgogICAgRXhjZXB0aW9uQmFzZSAoY29uc3QgY2hhciogZiwgY29uc3QgaW50
IGwsIGNvbnN0IGNoYXIgKmZ1bmMsCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjLCBj
b25zdCBjaGFyICplKTsKIyAzNDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdmlydHVhbCB+RXhjZXB0aW9uQmFz
ZSAoKSB0aHJvdygpOwoKCgoKCgoKICAgIHZvaWQgU2V0RmllbGRzIChjb25zdCBjaGFyICpmLAog
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCBsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIgKmZ1bmMsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqYywKICAgICAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyICplKTsKCgoKCgogICAgdm9pZCBQcmludEV4Y0RhdGEgKHN0
ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoKICAgIHZpcnR1YWwgdm9pZCBQcmludEluZm8g
KHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKIyAzODEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdmlydHVhbCBj
b25zdCBjaGFyICogd2hhdCAoKSBjb25zdCB0aHJvdyAoKTsKCiAgcHJvdGVjdGVkOgoKCgogICAg
Y29uc3QgY2hhciAqZmlsZTsKCgoKCiAgICB1bnNpZ25lZCBpbnQgbGluZTsKCgoKCiAgICBjb25z
dCBjaGFyICpmdW5jdGlvbjsKCgoKCiAgICBjb25zdCBjaGFyICpjb25kOwoKCgoKICAgIGNvbnN0
IGNoYXIgKmV4YzsKfTsKIyA0MTcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgpuYW1lc3BhY2UgZGVhbF9JSV9leGNlcHRp
b25zCnsKIyA0NTEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogIHZvaWQgc2V0X2FkZGl0aW9uYWxfYXNzZXJ0X291dHB1
dCAoY29uc3QgY2hhciAqIGNvbnN0IHApOwojIDQ2MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgbmFtZXNwYWNlIGlu
dGVybmFscwogIHsKIyA0NzAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz
ZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdm9pZCBpc3N1ZV9lcnJvcl9hc3NlcnQg
KGNvbnN0IGNoYXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxpbmUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBjaGFyICpleGNfbmFtZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBFeGNlcHRpb25CYXNlICZlKTsKIyA0ODUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5oIgogICAgdGVtcGxhdGUg
PGNsYXNzIGV4Yz4KICAgIHZvaWQgaXNzdWVfZXJyb3JfdGhyb3cgKGNvbnN0IGNoYXIgKmZpbGUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIgKmV4Y19uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjIGUpCiAgICB7CgoK
ICAgICAgZS5TZXRGaWVsZHMgKGZpbGUsIGxpbmUsIGZ1bmN0aW9uLCBjb25kLCBleGNfbmFtZSk7
CiAgICAgIHRocm93IGU7CiAgICB9CiMgNTEwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICAgIHRlbXBsYXRlIDxjbGFz
cyBleGM+CiAgICBpbmxpbmUKICAgIHZvaWQgaXNzdWVfZXJyb3JfYXNzZXJ0XzEgKGNvbnN0IGNo
YXIgKmZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGluZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29uZCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmV4Y19uYW1lLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZXhjIGUpCiAgICB7CiAgICAgIGlzc3VlX2Vycm9yX2Fzc2VydCAoZmlsZSxsaW5l
LGZ1bmN0aW9uLGNvbmQsZXhjX25hbWUsZSk7CiAgICB9CiMgNTMwICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICAgIHZv
aWQgYWJvcnQgKCk7CgogIH0KCn07CiMgNzUzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKbmFtZXNwYWNlIFN0YW5kYXJk
RXhjZXB0aW9ucwp7CgoKCgogIGNsYXNzIEV4Y0RpdmlkZUJ5WmVybyA6IHB1YmxpYyBFeGNlcHRp
b25CYXNlIHt9OwoKCgoKCgogIGNsYXNzIEV4Y091dE9mTWVtb3J5IDogcHVibGljIEV4Y2VwdGlv
bkJhc2Uge307CgoKCgoKICBjbGFzcyBFeGNJTyA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoK
CgoKICBjbGFzcyBFeGNGaWxlTm90T3BlbiA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGlj
OiBFeGNGaWxlTm90T3BlbiAoY29uc3QgY2hhciogYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFs
IH5FeGNGaWxlTm90T3BlbiAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAo
c3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJDb3VsZCBub3Qgb3BlbiBmaWxlICIg
PDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7IH07CiMg
Nzk2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L2V4Y2VwdGlvbnMuaCIKICBjbGFzcyBFeGNOb3RJbXBsZW1lbnRlZCA6IHB1YmxpYyBFeGNlcHRp
b25CYXNlIHt9OwojIDg0MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjSW50ZXJuYWxFcnJvciA6IHB1
YmxpYyBFeGNlcHRpb25CYXNlIHt9OwojIDg1NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjUHVyZUZ1
bmN0aW9uQ2FsbGVkIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKCgoKICBjbGFzcyBFeGNO
b3RJbml0aWFsaXplZCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoKCgoKCgoKICBjbGFzcyBF
eGNJbXBvc3NpYmxlSW5EaW0gOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW1w
b3NzaWJsZUluRGltIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNJ
bXBvc3NpYmxlSW5EaW0gKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0
ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiSW1wb3NzaWJsZSBpbiAiIDw8IGFyZzEg
PDwgImQuIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyB9OwojIDg3
OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9l
eGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjRGltZW5zaW9uTWlzbWF0Y2ggOiBwdWJsaWMgRXhjZXB0
aW9uQmFzZSB7IHB1YmxpYzogRXhjRGltZW5zaW9uTWlzbWF0Y2ggKGNvbnN0IGludCBhMSwgY29u
c3QgaW50IGEyKSA6IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0RpbWVuc2lv
bk1pc21hdGNoICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9z
dHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIkRpbWVuc2lvbiAiIDw8IGFyZzEgPDwgIiBub3Qg
ZXF1YWwgdG8gIiA8PCBhcmcyIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3QgaW50IGFy
ZzE7IGNvbnN0IGludCBhcmcyOyB9OwojIDg5MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9leGNlcHRpb25zLmgiCiAgY2xhc3MgRXhjSW5kZXhS
YW5nZSA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbmRleFJhbmdlIChjb25z
dCBpbnQgYTEsIGNvbnN0IGludCBhMiwgY29uc3QgaW50IGEzKSA6IGFyZzEgKGExKSwgYXJnMihh
MiksIGFyZzMoYTMpIHt9OyB2aXJ0dWFsIH5FeGNJbmRleFJhbmdlICgpIHRocm93ICgpIHt9OyB2
aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwg
IkluZGV4ICIgPDwgYXJnMSA8PCAiIGlzIG5vdCBpbiBbIiA8PCBhcmcyIDw8ICIsIiA8PCBhcmcz
IDw8ICJbIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyBjb25zdCBp
bnQgYXJnMjsgY29uc3QgaW50IGFyZzM7IH07CiMgOTAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2V4Y2VwdGlvbnMuaCIKICBjbGFzcyBFeGNJ
dGVyYXRvclBhc3RFbmQgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKIyA5MjEgIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZXhjZXB0aW9ucy5o
IgogIGNsYXNzIEV4Y01lc3NhZ2UgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhj
TWVzc2FnZSAoY29uc3QgY2hhciogYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNNZXNz
YWdlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0g
Jm91dCkgY29uc3QgeyBvdXQgPDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0
IGNoYXIqIGFyZzE7IH07CgoKCgoKCgogIGNsYXNzIEV4Y0NvbXBhdGliaWxpdHkgOiBwdWJsaWMg
RXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjQ29tcGF0aWJpbGl0eSAoY29uc3QgY2hhciogYTEp
IDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNDb21wYXRpYmlsaXR5ICgpIHRocm93ICgpIHt9
OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQg
PDwgIllvdSBhcmUgdXNpbmcgYSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGZlYXR1cmVcbiIgPDwg
InRoYXQgeW91IGhhdmUgZGlzYWJsZWQgZHVyaW5nIGNvbmZpZ3VyYXRpb24gb2ZcbiIgPDwgInRo
ZSBsaWJyYXJ5IGJ5IHRoZSAtLWRpc2FibGUtY29tcGF0PSIgPDwgYXJnMSA8PCAiIHN3aXRjaC4g
WW91IHNob3VsZCBlaXRoZXIgdXNlIGFuXG4iIDw8ICJhbHRlcm5hdGl2ZSBmdW5jdGlvbiwgb3Ig
Y29uZmlndXJlIGFnYWluIHdpdGhvdXRcbiIgPDwgInRoaXMgc3dpdGNoIGFuZCByZWNvbXBpbGUg
dGhlIGxpYnJhcnkuIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7
IH07CgoKCgoKCgp9OwoKCnVzaW5nIG5hbWVzcGFjZSBTdGFuZGFyZEV4Y2VwdGlvbnM7CiMgMTkg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9p
bnQuaCIgMgojIDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIgMQojIDI1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCiMgMSAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy92ZWN0b3IiIDEgMwojIDY1ICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3ZlY3RvciIgMwoK
IyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv
ZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMK
IyAzNSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2Jh
ZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoK
ICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5
cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9f
cyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2
b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQK
ICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv
d19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGlt
ZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihj
b25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBj
aGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciog
X19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0K
IyA2NyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy92ZWN0
b3IiIDIgMwoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAxIDMKIyA2NSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9mdW5jdGV4Y2Vw
dC5oIiAxIDMKIyAzNCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvZnVuY3RleGNl
cHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlv
bih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBf
X3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQp
OwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9p
ZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro
cm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3df
bGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9y
YW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNv
bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIq
IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7
CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAg
dm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY2ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KICAgIGNsYXNzIF9WZWN0b3Jf
YWxsb2NfYmFzZQogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp
dHM8X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgYWxsb2NhdG9y
X3R5cGU7CgogICAgYWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl
dHVybiBfTV9kYXRhX2FsbG9jYXRvcjsgfQoKICAgIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBh
bGxvY2F0b3JfdHlwZSYgX19hKQogICAgICA6IF9NX2RhdGFfYWxsb2NhdG9yKF9fYSksIF9NX3N0
YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAgICB7fQoKICBwcm90
ZWN0ZWQ6CiAgICBhbGxvY2F0b3JfdHlwZSBfTV9kYXRhX2FsbG9jYXRvcjsKICAgIF9UcCogX01f
c3RhcnQ7CiAgICBfVHAqIF9NX2ZpbmlzaDsKICAgIF9UcCogX01fZW5kX29mX3N0b3JhZ2U7Cgog
ICAgX1RwKgogICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX01fZGF0YV9hbGxv
Y2F0b3IuYWxsb2NhdGUoX19uKTsgfQoKICAgIHZvaWQKICAgIF9NX2RlYWxsb2NhdGUoX1RwKiBf
X3AsIHNpemVfdCBfX24pCiAgICB7IGlmIChfX3ApIF9NX2RhdGFfYWxsb2NhdG9yLmRlYWxsb2Nh
dGUoX19wLCBfX24pOyB9CiAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1l
IF9BbGxvY2F0b3I+CiAgICBjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9y
LCB0cnVlPgogIHsKICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgICAgYWxsb2NhdG9yX3R5
cGU7CgogICAgYWxsb2NhdG9yX3R5cGUKICAgIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVy
biBhbGxvY2F0b3JfdHlwZSgpOyB9CgogICAgX1ZlY3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9j
YXRvcl90eXBlJikKICAgICAgOiBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRfb2Zf
c3RvcmFnZSgwKQogICAge30KCiAgcHJvdGVjdGVkOgogICAgX1RwKiBfTV9zdGFydDsKICAgIF9U
cCogX01fZmluaXNoOwogICAgX1RwKiBfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgICB0eXBlZGVmIHR5
cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X0FsbG9jX3R5cGUgX0FsbG9j
X3R5cGU7CgogICAgX1RwKgogICAgX01fYWxsb2NhdGUoc2l6ZV90IF9fbikgeyByZXR1cm4gX0Fs
bG9jX3R5cGU6OmFsbG9jYXRlKF9fbik7IH0KCiAgICB2b2lkCiAgICBfTV9kZWFsbG9jYXRlKF9U
cCogX19wLCBzaXplX3QgX19uKSB7IF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9fcCwgX19uKTt9
CiAgfTsKCgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgc3RydWN0IF9WZWN0b3JfYmFzZQogICAgOiBwdWJsaWMgX1ZlY3Rvcl9hbGxvY19iYXNlPF9U
cCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8
X1RwLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgewogIHB1YmxpYzoKICAgIHR5cGVkZWYg
X1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAg
ICAgICAgX0Jhc2U7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBh
bGxvY2F0b3JfdHlwZTsKCiAgICBfVmVjdG9yX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSkKICAgICAgOiBfQmFzZShfX2EpIHt9CiAgICBfVmVjdG9yX2Jhc2Uoc2l6ZV90IF9fbiwgY29u
c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpCiAgICB7CiAgICAgIF9N
X3N0YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgX01fZmluaXNoID0gX01fc3RhcnQ7CiAg
ICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICB9CgogICAgfl9WZWN0
b3JfYmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBf
TV9zdGFydCk7IH0KICB9OwojIDE4MiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfVHA+ID4KICAgIGNsYXNzIHZlY3RvciA6
IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+CiAgewoKICAgCgogICAgdHlwZWRl
ZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwogICAgdHlwZWRlZiB2ZWN0b3I8X1Rw
LCBfQWxsb2M+IHZlY3Rvcl90eXBlOwoKICBwdWJsaWM6CiAgICB0eXBlZGVmIF9UcCB2YWx1ZV90
eXBlOwogICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogICAgdHlwZWRlZiBjb25zdCB2
YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFs
X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICAgIHR5cGVkZWYgX19n
bnVfY3h4OjpfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCB2ZWN0b3JfdHlwZT4KICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiBzdGQ6OnJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRl
cmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9p
dGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgdmFsdWVfdHlw
ZSYgcmVmZXJlbmNlOwogICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlJiBjb25zdF9yZWZlcmVu
Y2U7CiAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBk
aWZmZXJlbmNlX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw
ZSBhbGxvY2F0b3JfdHlwZTsKCiAgcHJvdGVjdGVkOgoKCgoKCgoKICAgIHVzaW5nIF9CYXNlOjpf
TV9hbGxvY2F0ZTsKICAgIHVzaW5nIF9CYXNlOjpfTV9kZWFsbG9jYXRlOwogICAgdXNpbmcgX0Jh
c2U6Ol9NX3N0YXJ0OwogICAgdXNpbmcgX0Jhc2U6Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CYXNl
OjpfTV9lbmRfb2Zfc3RvcmFnZTsKCiAgcHVibGljOgoKCgoKCiAgICBleHBsaWNpdAogICAgdmVj
dG9yKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6
IF9CYXNlKF9fYSkge30KIyAyMzcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZlY3RvcihzaXplX3R5cGUgX19u
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3ZhbHVlLAogICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90
eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9CYXNlKF9fbiwgX19hKQogICAg
ICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFs
dWUpOyB9CiMgMjQ5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysv
My4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBleHBsaWNpdAogICAgdmVjdG9yKHNpemVfdHlw
ZSBfX24pCiAgICAgIDogX0Jhc2UoX19uLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX2Zp
bmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIHZhbHVlX3R5cGUoKSk7
IH0KIyAyNjIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZlY3Rvcihjb25zdCB2ZWN0b3ImIF9feCkKICAgICAg
OiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigpKQogICAgICB7IF9NX2Zpbmlz
aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7
IH0KIyAyNzkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cj4KICAgICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgICAgIDogX0Jhc2UoX19hKQogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwog
ICAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo
KSk7CiAgICAgIH0KCgoKCgoKICAgIH52ZWN0b3IoKSB7IF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9m
aW5pc2gpOyB9CiMgMzA0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2ZWN0b3ImCiAgICBvcGVyYXRvcj0oY29u
c3QgdmVjdG9yJiBfX3gpOwojIDMxNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogICAgdm9pZAogICAgYXNzaWduKHNp
emVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9f
biwgX192YWwpOyB9CiMgMzMyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w
dXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz
dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5h
bWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAg
ICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAg
ICAgfQoKCiAgICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBiZWdp
bigpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9zdGFydCk7IH0KCgoKCgogICAgY29uc3RfaXRlcmF0
b3IKICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg
fQoKCgoKCiAgICBpdGVyYXRvcgogICAgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IgKF9NX2Zpbmlz
aCk7IH0KCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGNv
bnN0X2l0ZXJhdG9yIChfTV9maW5pc2gpOyB9CgoKCgoKICAgIHJldmVyc2VfaXRlcmF0b3IKICAg
IHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKICAgIGNv
bnN0X3JldmVyc2VfaXRlcmF0b3IKICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3Jl
dmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgoKCgoKCiAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICBy
ZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQoKCgoKCgogICAgY29u
c3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVy
c2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIHNpemVfdHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CgoKICAgIHNpemVfdHlwZQog
ICAgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoLTEpIC8gc2l6ZW9mKHZhbHVl
X3R5cGUpOyB9CiMgNDIzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2b2lkCiAgICByZXNpemUoc2l6ZV90eXBl
IF9fbmV3X3NpemUsIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgaWYgKF9fbmV3
X3NpemUgPCBzaXplKCkpCiAgICAgICAgZXJhc2UoYmVnaW4oKSArIF9fbmV3X3NpemUsIGVuZCgp
KTsKICAgICAgZWxzZQogICAgICAgIGluc2VydChlbmQoKSwgX19uZXdfc2l6ZSAtIHNpemUoKSwg
X194KTsKICAgIH0KIyA0NDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRl
L2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQKICAgIHJlc2l6ZShzaXplX3R5
cGUgX19uZXdfc2l6ZSkgeyByZXNpemUoX19uZXdfc2l6ZSwgdmFsdWVfdHlwZSgpKTsgfQoKCgoK
CiAgICBzaXplX3R5cGUKICAgIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlw
ZShjb25zdF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQoKCgoKICAg
IGJvb2wKICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQojIDQ3
MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0
bF92ZWN0b3IuaCIgMwogICAgdm9pZAogICAgcmVzZXJ2ZShzaXplX3R5cGUgX19uKTsKIyA0ODYg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
dmVjdG9yLmgiIDMKICAgIHJlZmVyZW5jZQogICAgb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKSB7
IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiMgNDk4ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBjb25zdF9y
ZWZlcmVuY2UKICAgIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi
ZWdpbigpICsgX19uKTsgfQoKICBwcm90ZWN0ZWQ6CgogICAgdm9pZAogICAgX01fcmFuZ2VfY2hl
Y2soc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgaWYgKF9fbiA+PSB0aGlzLT5zaXpl
KCkpCiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoInZlY3RvciBbXSBhY2Nlc3Mgb3V0IG9m
IHJhbmdlIik7CiAgICB9CgogIHB1YmxpYzoKIyA1MjEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHJlZmVyZW5j
ZQogICAgYXQoc2l6ZV90eXBlIF9fbikgeyBfTV9yYW5nZV9jaGVjayhfX24pOyByZXR1cm4gKCp0
aGlzKVtfX25dOyB9CiMgNTM0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGF0
KHNpemVfdHlwZSBfX24pIGNvbnN0IHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhp
cylbX19uXTsgfQoKCgoKCiAgICByZWZlcmVuY2UKICAgIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu
KCk7IH0KCgoKCgogICAgY29uc3RfcmVmZXJlbmNlCiAgICBmcm9udCgpIGNvbnN0IHsgcmV0dXJu
ICpiZWdpbigpOyB9CgoKCgoKICAgIHJlZmVyZW5jZQogICAgYmFjaygpIHsgcmV0dXJuICooZW5k
KCkgLSAxKTsgfQoKCgoKCiAgICBjb25zdF9yZWZlcmVuY2UKICAgIGJhY2soKSBjb25zdCB7IHJl
dHVybiAqKGVuZCgpIC0gMSk7IH0KIyA1NzUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQKICAgIHB1c2hf
YmFjayhjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7CiAgICAgIGlmIChfTV9maW5pc2ggIT0g
X01fZW5kX29mX3N0b3JhZ2UpCiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwg
X194KTsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX01f
aW5zZXJ0X2F1eChlbmQoKSwgX194KTsKICAgIH0KIyA1OTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHZvaWQK
ICAgIHBvcF9iYWNrKCkKICAgIHsKICAgICAgLS1fTV9maW5pc2g7CiAgICAgIF9EZXN0cm95KF9N
X2ZpbmlzaCk7CiAgICB9CiMgNjEzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CiMgNjQ5ICIvaG9t
ZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rv
ci5oIiAzCiAgICB2b2lkCiAgICBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBzaXplX3R5cGUgX19u
LCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9fcG9zLCBfX24s
IF9feCk7IH0KIyA2NjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0
ZXJhdG9yPgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0SXRl
cmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICAgIHsKCiAgICAgICAg
ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFs
IF9JbnRlZ3JhbDsKICAgICAgICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwg
X19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICAgICAgfQojIDY4OCAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwogICAgaXRl
cmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pOwojIDcwOCAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF92ZWN0b3IuaCIgMwog
ICAgaXRlcmF0b3IKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7
CiMgNzIwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAzCiAgICB2b2lkCiAgICBzd2FwKHZlY3RvciYgX194KQogICAgewog
ICAgICBzdGQ6OnN3YXAoX01fc3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChf
TV9maW5pc2gsIF9feC5fTV9maW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3Jh
Z2UsIF9feC5fTV9lbmRfb2Zfc3RvcmFnZSk7CiAgICB9CgoKCgoKCgogICAgdm9pZAogICAgY2xl
YXIoKSB7IGVyYXNlKGJlZ2luKCksIGVuZCgpKTsgfQoKICBwcm90ZWN0ZWQ6CgoKCgoKCiAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHBvaW50ZXIKICAgICAgX01f
YWxsb2NhdGVfYW5kX2NvcHkoc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkKICAg
IHsKICAgICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIHRyeQog
ICAgICAgIHsKICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f
cmVzdWx0KTsKICAgICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIGNhdGNo
KC4uLikKICAgICAgICB7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfX3Jlc3VsdCwgX19uKTsKICAg
ICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9J
bnRlZ2VyPgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIg
X19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3RydWVfdHlwZSkKICAgICAgewogICAgICAgIF9NX3N0
YXJ0ID0gX01fYWxsb2NhdGUoX19uKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0
YXJ0ICsgX19uOwogICAgICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0
YXJ0LCBfX24sIF9fdmFsdWUpOwogICAgICB9CgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1
dEl0ZXI+CiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9kaXNwYXRjaChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgICAgICAgICAgICAgICAg
ICAgICAgX0l0ZXJDYXRlZ29yeTsKICAgICAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3Qs
IF9fbGFzdCwgX0l0ZXJDYXRlZ29yeSgpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkCiAgICAgIF9NX3JhbmdlX2luaXRpYWxpemUoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy
YXRvciBfX2xhc3QsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2Zp
cnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7CiAg
ICB9CgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBf
TV9yYW5nZV9pbml0aWFsaXplKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwgZm9yd2FyZF9pdGVyYXRv
cl90YWcpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX24gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh
c3QpOwogICAgICBfTV9zdGFydCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCgoKCgoKICAgIHRlbXBsYXRl
PHR5cGVuYW1lIF9JbnRlZ2VyPgogICAgICB2b2lkCiAgICAgICBfTV9hc3NpZ25fZGlzcGF0Y2go
X0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwgX190cnVlX3R5cGUpCiAgICAgICB7CiAgICAg
ICAgIF9NX2ZpbGxfYXNzaWduKHN0YXRpY19jYXN0PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgIH0K
CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgdm9pZAogICAgICBfTV9h
c3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX19m
YWxzZV90eXBlKQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp
dHM8X0lucHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICAgICAgICAgICAgICAg
ICBfSXRlckNhdGVnb3J5OwogICAgICAgIF9NX2Fzc2lnbl9hdXgoX19maXJzdCwgX19sYXN0LCBf
SXRlckNhdGVnb3J5KCkpOwogICAgICB9CgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9f
Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgaW5wdXRfaXRl
cmF0b3JfdGFnKTsKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICAgIHZvaWQKICAgICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9G
b3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZyk7CgoKCiAgICB2b2lkCiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3R5cGUgX19uLCBjb25z
dCB2YWx1ZV90eXBlJiBfX3ZhbCk7CgoKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlZ2Vy
PgogICAgICB2b2lkCiAgICAgIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywgX0lu
dGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1
ZV90eXBlKQogICAgICB7CiAgICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIHN0YXRpY19jYXN0
PHNpemVfdHlwZT4oX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dmFsdWVfdHlwZT4oX192YWwpKTsKICAgICAgfQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
SW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0
b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgewogICAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6aXRlcmF0b3Jf
Y2F0ZWdvcnkKICAgICAgICAgICAgICAgICAgICAgICAgIF9JdGVyQ2F0ZWdvcnk7CiAgICAgICAg
X01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9JdGVyQ2F0ZWdvcnkoKSk7
CiAgICAgIH0KCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICB2
b2lkCiAgICAgIF9NX3JhbmdlX2luc2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKICAgIHRlbXBsYXRlIDx0
eXBlbmFtZSBfRm9yd2FyZEl0ZXJhdG9yPgogICAgICB2b2lkCiAgICAgIF9NX3JhbmdlX2luc2Vy
dChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBm
b3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgoKCiAgICB2b2lkCiAgICBfTV9maWxsX2luc2VydCAoaXRl
cmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgoKICAg
IHZvaWQKICAgIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgdmFsdWVf
dHlwZSYgX194KTsKCgoKCgogIH07CiMgOTExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0o
Y29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYg
X195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAg
ICAgICAgICBlcXVhbChfX3guYmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7CiAgICB9
CiMgOTMwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX3ZlY3Rvci5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0Fs
bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCB2ZWN0b3I8X1RwLF9BbGxv
Yz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVy
biBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAg
ICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp
bmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feCwgY29u
c3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUg
Ym9vbAogICAgb3BlcmF0b3I+KGNvbnN0IHZlY3RvcjxfVHAsX0FsbG9jPiYgX194LCBjb25zdCB2
ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feSA8IF9feDsgfQoKCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAg
IG9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCxfQWxsb2M+JiBfX3gsIGNvbnN0IHZlY3Rvcjxf
VHAsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl
cmF0b3I+PShjb25zdCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCxf
QWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKHZl
Y3RvcjxfVHAsX0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLF9BbGxvYz4mIF9feSkKICAgIHsgX194
LnN3YXAoX195KTsgfQp9CiMgNzIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNs
dWRlL2MrKy8zLjMvdmVjdG9yIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMSAzCiMgNjQgIi9ob21lL2Jh
bmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfYnZlY3Rvci5o
IiAzCm5hbWVzcGFjZSBzdGQKewogIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBfQml0X3R5cGU7CiAg
ZW51bSB7IF9NX3dvcmRfYml0ID0gaW50KDggKiBzaXplb2YoX0JpdF90eXBlKSkgfTsKCnN0cnVj
dCBfQml0X3JlZmVyZW5jZSB7CgogIF9CaXRfdHlwZSAqIF9NX3A7CiAgX0JpdF90eXBlIF9NX21h
c2s7CiAgX0JpdF9yZWZlcmVuY2UoX0JpdF90eXBlICogX194LCBfQml0X3R5cGUgX195KQogICAg
OiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVmZXJlbmNlKCkg
OiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICEhKCpfTV9wICYgX01fbWFzayk7IH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0b3I9KGJvb2wg
X194KQogIHsKICAgIGlmIChfX3gpICpfTV9wIHw9IF9NX21hc2s7CiAgICBlbHNlICpfTV9wICY9
IH5fTV9tYXNrOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfQml0X3JlZmVyZW5jZSYgb3BlcmF0
b3I9KGNvbnN0IF9CaXRfcmVmZXJlbmNlJiBfX3gpCiAgICB7IHJldHVybiAqdGhpcyA9IGJvb2wo
X194KTsgfQogIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25z
dAogICAgeyByZXR1cm4gYm9vbCgqdGhpcykgPT0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRv
cjwoY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuICFib29sKCp0
aGlzKSAmJiBib29sKF9feCk7IH0KICB2b2lkIGZsaXAoKSB7ICpfTV9wIF49IF9NX21hc2s7IH0K
fTsKCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgaXRlcmF0b3I8cmFuZG9tX2Fj
Y2Vzc19pdGVyYXRvcl90YWcsIGJvb2w+CnsKICBfQml0X3R5cGUgKiBfTV9wOwogIHVuc2lnbmVk
IGludCBfTV9vZmZzZXQ7CgogIF9CaXRfaXRlcmF0b3JfYmFzZShfQml0X3R5cGUgKiBfX3gsIHVu
c2lnbmVkIGludCBfX3kpCiAgICA6IF9NX3AoX194KSwgX01fb2Zmc2V0KF9feSkge30KCiAgdm9p
ZCBfTV9idW1wX3VwKCkgewogICAgaWYgKF9NX29mZnNldCsrID09IF9NX3dvcmRfYml0IC0gMSkg
ewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQogIHZvaWQgX01f
YnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAgX01fb2Zmc2V0
ID0gX01fd29yZF9iaXQgLSAxOwogICAgICAtLV9NX3A7CiAgICB9CiAgfQoKICB2b2lkIF9NX2lu
Y3IocHRyZGlmZl90IF9faSkgewogICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9faSArIF9NX29m
ZnNldDsKICAgIF9NX3AgKz0gX19uIC8gX01fd29yZF9iaXQ7CiAgICBfX24gPSBfX24gJSBfTV93
b3JkX2JpdDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNpZ25lZCBp
bnQpIF9fbiArIF9NX3dvcmRfYml0OwogICAgICAtLV9NX3A7CiAgICB9IGVsc2UKICAgICAgX01f
b2Zmc2V0ID0gKHVuc2lnbmVkIGludCkgX19uOwogIH0KCiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4gX01fcCA9PSBfX2ku
X01fcCAmJiBfTV9vZmZzZXQgPT0gX19pLl9NX29mZnNldDsKICB9CiAgYm9vbCBvcGVyYXRvcjwo
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wIDwg
X19pLl9NX3AgfHwgKF9NX3AgPT0gX19pLl9NX3AgJiYgX01fb2Zmc2V0IDwgX19pLl9NX29mZnNl
dCk7CiAgfQogIGJvb2wgb3BlcmF0b3IhPShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkg
Y29uc3QgewogICAgcmV0dXJuICEoKnRoaXMgPT0gX19pKTsKICB9CiAgYm9vbCBvcGVyYXRvcj4o
Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfX2kgPCAq
dGhpczsKICB9CiAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19p
KSBjb25zdCB7CiAgICByZXR1cm4gIShfX2kgPCAqdGhpcyk7CiAgfQogIGJvb2wgb3BlcmF0b3I+
PShjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuICEoKnRo
aXMgPCBfX2kpOwogIH0KfTsKCmlubGluZSBwdHJkaWZmX3QKb3BlcmF0b3ItKGNvbnN0IF9CaXRf
aXRlcmF0b3JfYmFzZSYgX194LCBjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9feSkgewogIHJl
dHVybiBfTV93b3JkX2JpdCAqIChfX3guX01fcCAtIF9feS5fTV9wKSArIF9feC5fTV9vZmZzZXQg
LSBfX3kuX01fb2Zmc2V0Owp9CgoKc3RydWN0IF9CaXRfaXRlcmF0b3IgOiBwdWJsaWMgX0JpdF9p
dGVyYXRvcl9iYXNlCnsKICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBl
ZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy
YXRvcjsKCiAgX0JpdF9pdGVyYXRvcigpIDogX0JpdF9pdGVyYXRvcl9iYXNlKDAsIDApIHt9CiAg
X0JpdF9pdGVyYXRvcihfQml0X3R5cGUgKiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAgICA6IF9C
aXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVUwgPDwgX01fb2Zmc2V0KTsgfQogIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuICp0aGlzOwog
IH0KICBpdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp
czsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9w
ZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAg
aXRlcmF0b3Igb3BlcmF0b3ItLShpbnQpIHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAg
ICBfTV9idW1wX2Rvd24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgaXRlcmF0b3ImIG9wZXJh
dG9yKz0oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBpdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7
CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBpdGVyYXRvciBvcGVy
YXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgaXRlcmF0b3IgX190bXAgPSAq
dGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yLShk
aWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3RtcCA9ICp0aGlzOwog
ICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CgogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZl
cmVuY2VfdHlwZSBfX2kpIHsgcmV0dXJuICooKnRoaXMgKyBfX2kpOyB9Cn07CgppbmxpbmUgX0Jp
dF9pdGVyYXRvcgpvcGVyYXRvcisocHRyZGlmZl90IF9fbiwgY29uc3QgX0JpdF9pdGVyYXRvciYg
X194KSB7IHJldHVybiBfX3ggKyBfX247IH0KCgpzdHJ1Y3QgX0JpdF9jb25zdF9pdGVyYXRvciA6
IHB1YmxpYyBfQml0X2l0ZXJhdG9yX2Jhc2UKewogIHR5cGVkZWYgYm9vbCByZWZlcmVuY2U7CiAg
dHlwZWRlZiBib29sIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IGJvb2wqIHBvaW50
ZXI7CiAgdHlwZWRlZiBfQml0X2NvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwoKICBfQml0
X2NvbnN0X2l0ZXJhdG9yKCkgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoMCwgMCkge30KICBfQml0X2Nv
bnN0X2l0ZXJhdG9yKF9CaXRfdHlwZSAqIF9feCwgdW5zaWduZWQgaW50IF9feSkKICAgIDogX0Jp
dF9pdGVyYXRvcl9iYXNlKF9feCwgX195KSB7fQogIF9CaXRfY29uc3RfaXRlcmF0b3IoY29uc3Qg
X0JpdF9pdGVyYXRvciYgX194KQogICAgOiBfQml0X2l0ZXJhdG9yX2Jhc2UoX194Ll9NX3AsIF9f
eC5fTV9vZmZzZXQpIHt9CgogIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7CiAg
ICByZXR1cm4gX0JpdF9yZWZlcmVuY2UoX01fcCwgMVVMIDw8IF9NX29mZnNldCk7CiAgfQogIGNv
bnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJu
ICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAgY29uc3Rf
aXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVybiBfX3Rt
cDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1wX2Rvd24o
KTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3ItLShpbnQp
IHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rvd24oKTsK
ICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0oZGlmZmVy
ZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlzOwogIH0K
ICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICAq
dGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVy
YXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0b3IgX190
bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0ZXJhdG9y
IG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9pdGVyYXRv
ciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29uc3RfcmVm
ZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJuICooKnRo
aXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJhdG9yKyhw
dHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0dXJuIF9f
eCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBfX2lzX3N0
YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVu
YW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBlCiAgICAg
ICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkgY29u
c3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2NfYmFzZShj
b25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihfX2EpLCBf
TV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnByb3RlY3Rl
ZDoKICBfQml0X3R5cGUgKiBfTV9iaXRfYWxsb2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9N
X2RhdGFfYWxsb2NhdG9yLmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRf
Yml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5fTV9wKQog
ICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydC5f
TV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X0JpdF90eXBlLCBfQWxsb2NhdG9y
Pjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwogIF9CaXRfaXRl
cmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgX0JpdF90eXBlICog
X01fZW5kX29mX3N0b3JhZ2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvY2F0b3I+CmNsYXNz
IF9CdmVjdG9yX2FsbG9jX2Jhc2U8X0FsbG9jYXRvciwgdHJ1ZT4gewpwdWJsaWM6CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvY2F0b3I+OjphbGxvY2F0b3JfdHlw
ZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIGFsbG9jYXRvcl90eXBlKCk7IH0KCiAgX0J2ZWN0b3JfYWxsb2Nf
YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0YXJ0KCksIF9NX2ZpbmlzaCgp
LCBfTV9lbmRfb2Zfc3RvcmFnZSgwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVkZWYgdHlwZW5hbWUg
X0FsbG9jX3RyYWl0czxfQml0X3R5cGUsIF9BbGxvY2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAg
ICAgX0FsbG9jX3R5cGU7CgogIF9CaXRfdHlwZSAqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQog
ICAgeyByZXR1cm4gX0FsbG9jX3R5cGU6OmFsbG9jYXRlKChfX24gKyBfTV93b3JkX2JpdCAtIDEp
L19NX3dvcmRfYml0KTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFy
dC5fTV9wKQogICAgICBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfTV9zdGFydC5fTV9wLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0Ll9N
X3ApOwogIH0KCiAgX0JpdF9pdGVyYXRvciBfTV9zdGFydDsKICBfQml0X2l0ZXJhdG9yIF9NX2Zp
bmlzaDsKICBfQml0X3R5cGUgKiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCnRlbXBsYXRlIDxjbGFz
cyBfQWxsb2M+CmNsYXNzIF9CdmVjdG9yX2Jhc2UKICA6IHB1YmxpYyBfQnZlY3Rvcl9hbGxvY19i
YXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8
Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgp7CiAgdHlwZWRlZiBfQnZlY3Rvcl9hbGxv
Y19iYXNlPF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0
czxib29sLCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKcHVibGlj
OgogIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBl
OwoKICBfQnZlY3Rvcl9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19h
KSB7fQogIH5fQnZlY3Rvcl9iYXNlKCkgeyBfQmFzZTo6X01fZGVhbGxvY2F0ZSgpOyB9Cn07Cgp9
CgoKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2
ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAg
cHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz
aXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBl
ZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZl
cmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj
b25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy
YXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAg
ICB0eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcjsKICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9y
PiByZXZlcnNlX2l0ZXJhdG9yOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0J2ZWN0b3JfYmFzZTxf
QWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIGFsbG9jYXRvcl90eXBl
IGdldF9hbGxvY2F0b3IoKSBjb25zdCB7CiAgICAgIHJldHVybiBfQnZlY3Rvcl9iYXNlPF9BbGxv
Yz46OmdldF9hbGxvY2F0b3IoKTsKICAgIH0KCiAgcHJvdGVjdGVkOgogICAgdXNpbmcgX0J2ZWN0
b3JfYmFzZTxfQWxsb2M+OjpfTV9iaXRfYWxsb2M7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B
bGxvYz46Ol9NX2RlYWxsb2NhdGU7CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9N
X3N0YXJ0OwogICAgdXNpbmcgX0J2ZWN0b3JfYmFzZTxfQWxsb2M+OjpfTV9maW5pc2g7CiAgICB1
c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2VuZF9vZl9zdG9yYWdlOwoKICBwcm90ZWN0
ZWQ6CiAgICB2b2lkIF9NX2luaXRpYWxpemUoc2l6ZV90eXBlIF9fbikgewogICAgICBfQml0X3R5
cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19uKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBf
X3EgKyAoX19uICsgX01fd29yZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgX01fc3RhcnQg
PSBpdGVyYXRvcihfX3EsIDApOwogICAgICBfTV9maW5pc2ggPSBfTV9zdGFydCArIGRpZmZlcmVu
Y2VfdHlwZShfX24pOwogICAgfQogICAgdm9pZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9z
aXRpb24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zf
c3RvcmFnZSkgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgX01fZmluaXNoLCBf
TV9maW5pc2ggKyAxKTsKICAgICAgICAqX19wb3NpdGlvbiA9IF9feDsKICAgICAgICArK19NX2Zp
bmlzaDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXpl
KCkKICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgKiBzaXplKCkgOiBzdGF0aWNfY2FzdDxz
aXplX3R5cGU+KF9NX3dvcmRfYml0KTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRf
YWxsb2MoX19sZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3Np
dGlvbiwgaXRlcmF0b3IoX19xLCAwKSk7CiAgICAgICAgKl9faSsrID0gX194OwogICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgX01fZGVhbGxv
Y2F0ZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9fbGVuICsgX01fd29y
ZF9iaXQgLSAxKS9fTV93b3JkX2JpdDsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9fcSwg
MCk7CiAgICAgIH0KICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg
ICB2b2lkIF9NX2luaXRpYWxpemVfcmFuZ2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJh
dG9yX3RhZykgewogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2ZpbmlzaCA9
IGl0ZXJhdG9yKCk7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gMDsKICAgICAgZm9yICggOyBf
X2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIHB1c2hfYmFjaygqX19maXJzdCk7
CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9N
X2luaXRpYWxpemVfcmFuZ2UoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJh
dG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9y
X3RhZykgewogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsK
ICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX01f
c3RhcnQpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv
aWQgX01faW5zZXJ0X3JhbmdlKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgICAgIGZvciAoIDsgX19m
aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkgewogICAgICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9z
LCAqX19maXJzdCk7CiAgICAgICAgKytfX3BvczsKICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbnNlcnRfcmFuZ2UoaXRlcmF0
b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3Ig
X19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAg
ICBpZiAoY2FwYWNpdHkoKSAtIHNpemUoKSA+PSBfX24pIHsKICAgICAgICAgIGNvcHlfYmFja3dh
cmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsK
ICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Bvc2l0aW9uKTsKICAgICAgICAgIF9N
X2ZpbmlzaCArPSBkaWZmZXJlbmNlX3R5cGUoX19uKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7
CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBzaXplKCkgKyBtYXgoc2l6ZSgpLCBfX24pOwog
ICAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0X2FsbG9jKF9fbGVuKTsKICAgICAgICAg
IGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRlcmF0b3IoX19xLCAw
KSk7CiAgICAgICAgICBfX2kgPSBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19pKTsKICAgICAgICAg
IF9NX2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSk7CiAgICAgICAgICBfTV9k
ZWFsbG9jYXRlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiAr
IF9NX3dvcmRfYml0IC0gMSkvX01fd29yZF9iaXQ7CiAgICAgICAgICBfTV9zdGFydCA9IGl0ZXJh
dG9yKF9fcSwgMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9CgogIHB1YmxpYzoKICAgIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gX01fc3RhcnQ7IH0KICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IF9NX2ZpbmlzaDsgfQogICAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f
ZmluaXNoOyB9CgogICAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJldHVybiByZXZlcnNl
X2l0ZXJhdG9yKGVuZCgpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj
b25zdCB7CiAgICAgIHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICAgIH0K
ICAgIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoYmVn
aW4oKSk7IH0KICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgICAg
cmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7CiAgICB9CgogICAgc2l6ZV90
eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBzaXplX3R5cGUoZW5kKCkgLSBiZWdpbigpKTsgfQog
ICAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90eXBlKC0xKTsgfQog
ICAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QgewogICAgICByZXR1cm4gc2l6ZV90eXBlKGNv
bnN0X2l0ZXJhdG9yKF9NX2VuZF9vZl9zdG9yYWdlLCAwKSAtIGJlZ2luKCkpOwogICAgfQogICAg
Ym9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIGJlZ2luKCkgPT0gZW5kKCk7IH0KCiAgICByZWZl
cmVuY2Ugb3BlcmF0b3JbXShzaXplX3R5cGUgX19uKQogICAgICB7IHJldHVybiAqKGJlZ2luKCkg
KyBkaWZmZXJlbmNlX3R5cGUoX19uKSk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBvcGVyYXRvcltd
KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVu
Y2VfdHlwZShfX24pKTsgfQoKICAgIHZvaWQgX01fcmFuZ2VfY2hlY2soc2l6ZV90eXBlIF9fbikg
Y29uc3QgewogICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291
dF9vZl9yYW5nZSgidmVjdG9yPGJvb2w+Iik7CiAgICB9CgogICAgcmVmZXJlbmNlIGF0KHNpemVf
dHlwZSBfX24pCiAgICAgIHsgX01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19u
XTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICAgIHsg
X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQoKICAgIGV4cGxpY2l0
IHZlY3Rvcihjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAg
ICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oX19hKSB7fQoKICAgIHZlY3RvcihzaXplX3R5cGUg
X19uLCBib29sIF9fdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkK
ICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3As
IF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ZhbHVlID8gfjAgOiAwKTsKICAgIH0KCiAgICBleHBsaWNp
dCB2ZWN0b3Ioc2l6ZV90eXBlIF9fbikKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4oYWxs
b2NhdG9yX3R5cGUoKSkKICAgIHsKICAgICAgX01faW5pdGlhbGl6ZShfX24pOwogICAgICBmaWxs
KF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCAwKTsKICAgIH0KCiAgICB2ZWN0b3Io
Y29uc3QgdmVjdG9yJiBfX3gpIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9feC5nZXRfYWxsb2Nh
dG9yKCkpIHsKICAgICAgX01faW5pdGlhbGl6ZShfX3guc2l6ZSgpKTsKICAgICAgY29weShfX3gu
YmVnaW4oKSwgX194LmVuZCgpLCBfTV9zdGFydCk7CiAgICB9CgoKCiAgICB0ZW1wbGF0ZSA8Y2xh
c3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2luaXRpYWxpemVfZGlzcGF0Y2goX0ludGVnZXIgX19u
LCBfSW50ZWdlciBfX3gsIF9fdHJ1ZV90eXBlKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsK
ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX194ID8gfjAgOiAw
KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9N
X2luaXRpYWxpemVfZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg
ewogICAgICBfTV9pbml0aWFsaXplX3JhbmdlKF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9j
YXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgogICAgdmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f
bGFzdCwKICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3Jf
dHlwZSgpKQogICAgICA6IF9CdmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0lu
dGVncmFsOwogICAgICBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0lu
dGVncmFsKCkpOwogICAgfQoKICAgIH52ZWN0b3IoKSB7IH0KCiAgICB2ZWN0b3ImIG9wZXJhdG9y
PShjb25zdCB2ZWN0b3ImIF9feCkgewogICAgICBpZiAoJl9feCA9PSB0aGlzKSByZXR1cm4gKnRo
aXM7CiAgICAgIGlmIChfX3guc2l6ZSgpID4gY2FwYWNpdHkoKSkgewogICAgICAgIF9NX2RlYWxs
b2NhdGUoKTsKICAgICAgICBfTV9pbml0aWFsaXplKF9feC5zaXplKCkpOwogICAgICB9CiAgICAg
IGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgYmVnaW4oKSk7CiAgICAgIF9NX2ZpbmlzaCA9
IGJlZ2luKCkgKyBkaWZmZXJlbmNlX3R5cGUoX194LnNpemUoKSk7CiAgICAgIHJldHVybiAqdGhp
czsKICAgIH0KCgoKCgoKICAgIHZvaWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBf
X3gpIHsKICAgICAgaWYgKF9fbiA+IHNpemUoKSkgewogICAgICAgIGZpbGwoX01fc3RhcnQuX01f
cCwgX01fZW5kX29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgICAgaW5zZXJ0KGVuZCgp
LCBfX24gLSBzaXplKCksIF9feCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgZXJhc2Uo
YmVnaW4oKSArIF9fbiwgZW5kKCkpOwogICAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k
X29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICAgIH0KICAgIH0KCiAgICB2b2lkIGFzc2ln
bihzaXplX3QgX19uLCBib29sIF9feCkgeyBfTV9maWxsX2Fzc2lnbihfX24sIF9feCk7IH0KCiAg
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIGFzc2lnbihfSW5wdXRJ
dGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfSXNfaW50ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7
CiAgICAgIF9NX2Fzc2lnbl9kaXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsK
ICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgICB2b2lkIF9NX2Fzc2lnbl9k
aXNwYXRjaChfSW50ZWdlciBfX24sIF9JbnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgICAg
eyBfTV9maWxsX2Fzc2lnbigoc2l6ZV90KSBfX24sIChib29sKSBfX3ZhbCk7IH0KCiAgICB0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4KICAgIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnB1
dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkKICAgICAgeyBf
TV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0
KSk7IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fz
c2lnbl9hdXgoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBpdGVyYXRv
ciBfX2N1ciA9IGJlZ2luKCk7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19j
dXIgIT0gZW5kKCk7ICsrX19jdXIsICsrX19maXJzdCkKICAgICAgICAqX19jdXIgPSAqX19maXJz
dDsKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIGVyYXNlKF9fY3VyLCBlbmQo
KSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7CiAg
ICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgICB2b2lkIF9NX2Fz
c2lnbl9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFz
dCwKICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICAgICBz
aXplX3R5cGUgX19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBpZiAoX19s
ZW4gPCBzaXplKCkpCiAgICAgICAgZXJhc2UoY29weShfX2ZpcnN0LCBfX2xhc3QsIGJlZ2luKCkp
LCBlbmQoKSk7CiAgICAgIGVsc2UgewogICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19taWQgPSBf
X2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICAgICAgY29weShfX2Zp
cnN0LCBfX21pZCwgYmVnaW4oKSk7CiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX21pZCwgX19sYXN0
KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUgX19uKSB7CiAgICAg
IGlmIChjYXBhY2l0eSgpIDwgX19uKSB7CiAgICAgICAgX0JpdF90eXBlICogX19xID0gX01fYml0
X2FsbG9jKF9fbik7CiAgICAgICAgX01fZmluaXNoID0gY29weShiZWdpbigpLCBlbmQoKSwgaXRl
cmF0b3IoX19xLCAwKSk7CiAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgIF9NX3N0YXJ0
ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChf
X24gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICB9CiAgICB9CgogICAgcmVm
ZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2luKCk7IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBm
cm9udCgpIGNvbnN0IHsgcmV0dXJuICpiZWdpbigpOyB9CiAgICByZWZlcmVuY2UgYmFjaygpIHsg
cmV0dXJuICooZW5kKCkgLSAxKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGJhY2soKSBjb25zdCB7
IHJldHVybiAqKGVuZCgpIC0gMSk7IH0KICAgIHZvaWQgcHVzaF9iYWNrKGJvb2wgX194KSB7CiAg
ICAgIGlmIChfTV9maW5pc2guX01fcCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgICAqX01f
ZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KGVuZCgpLCBf
X3gpOwogICAgfQogICAgdm9pZCBzd2FwKHZlY3Rvcjxib29sLCBfQWxsb2M+JiBfX3gpIHsKICAg
ICAgc3RkOjpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgICBzdGQ6OnN3YXAoX01f
ZmluaXNoLCBfX3guX01fZmluaXNoKTsKICAgICAgc3RkOjpzd2FwKF9NX2VuZF9vZl9zdG9yYWdl
LCBfX3guX01fZW5kX29mX3N0b3JhZ2UpOwogICAgfQoKCiAgICBzdGF0aWMgdm9pZCBzd2FwKHJl
ZmVyZW5jZSBfX3gsIHJlZmVyZW5jZSBfX3kpIHsKICAgICAgYm9vbCBfX3RtcCA9IF9feDsKICAg
ICAgX194ID0gX195OwogICAgICBfX3kgPSBfX3RtcDsKICAgIH0KCiAgICBpdGVyYXRvciBpbnNl
cnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVy
ZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNo
Ll9NX3AgIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAg
ICAqX01fZmluaXNoKysgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9f
cG9zaXRpb24sIF9feCk7CiAgICAgIHJldHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAg
dGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRl
cmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX190cnVlX3R5cGUpIHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9f
biwgX194KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2
b2lkIF9NX2luc2VydF9kaXNwYXRjaChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNl
cnRfcmFuZ2UoX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2Zp
cnN0KSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9p
ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVu
YW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAg
ICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9fcG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVn
cmFsKCkpOwogICAgfQoKICAgIHZvaWQgX01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv
biwgc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47
CiAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFj
a3dhcmQoX19wb3NpdGlvbiwgZW5kKCksIF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24p
KTsKICAgICAgICBmaWxsKF9fcG9zaXRpb24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUo
X19uKSwgX194KTsKICAgICAgICBfTV9maW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAg
ICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4
KHNpemUoKSwgX19uKTsKICAgICAgICBfQml0X3R5cGUgKiBfX3EgPSBfTV9iaXRfYWxsb2MoX19s
ZW4pOwogICAgICAgIGl0ZXJhdG9yIF9faSA9IGNvcHkoYmVnaW4oKSwgX19wb3NpdGlvbiwgaXRl
cmF0b3IoX19xLCAwKSk7CiAgICAgICAgZmlsbF9uKF9faSwgX19uLCBfX3gpOwogICAgICAgIF9N
X2ZpbmlzaCA9IGNvcHkoX19wb3NpdGlvbiwgZW5kKCksIF9faSArIGRpZmZlcmVuY2VfdHlwZShf
X24pKTsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2Ug
PSBfX3EgKyAoX19sZW4gKyBfTV93b3JkX2JpdCAtIDEpL19NX3dvcmRfYml0OwogICAgICAgIF9N
X3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0
KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9N
X2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24sIF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9i
YWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQogICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3Np
dGlvbikgewogICAgICBpZiAoX19wb3NpdGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShf
X3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwog
ICAgICByZXR1cm4gX19wb3NpdGlvbjsKICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9y
IF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFz
dCwgZW5kKCksIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQg
cmVzaXplKHNpemVfdHlwZSBfX25ld19zaXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBp
ZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkKICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5j
ZV90eXBlKF9fbmV3X3NpemUpLCBlbmQoKSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5k
KCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAg
ICAgIGZvciAoX0JpdF90eXBlICogX19wID0gX01fc3RhcnQuX01fcDsgX19wICE9IF9NX2VuZF9v
Zl9zdG9yYWdlOyArK19fcCkKICAgICAgICAqX19wID0gfipfX3A7CiAgICB9CgogICAgdm9pZCBj
bGVhcigpIHsgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOyB9CiAgfTsKCgp0eXBlZGVmIHZlY3Rvcjxi
b29sLCBfX2FsbG9jPiBiaXRfdmVjdG9yOwoKfQojIDczICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2Nj
LTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3ZlY3RvciIgMiAzCgoKIyAxICIvaG9tZS9iYW5nZXJ0
aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvdmVjdG9yLnRjYyIgMSAzCiMg
NjQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy92
ZWN0b3IudGNjIiAzCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICByZXNl
cnZlKHNpemVfdHlwZSBfX24pCiAgICB7CiAgICAgIGlmIChjYXBhY2l0eSgpIDwgX19uKQogICAg
ICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBzaXplKCk7CiAgICAgICAg
cG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2Zp
bmlzaCk7CiAgICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01f
ZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAg
ICAgX01fc3RhcnQgPSBfX3RtcDsKICAgICAgICBfTV9maW5pc2ggPSBfX3RtcCArIF9fb2xkX3Np
emU7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgICAgfQog
ICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBl
bmFtZSB2ZWN0b3I8X1RwLF9BbGxvYz46Oml0ZXJhdG9yCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46
OgogICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkK
ICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRpb24gLSBiZWdpbigpOwogICAgICBp
ZiAoX01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlICYmIF9fcG9zaXRpb24gPT0gZW5kKCkp
CiAgICAgIHsKICAgICAgICBfQ29uc3RydWN0KF9NX2ZpbmlzaCwgX194KTsKICAgICAgICArK19N
X2ZpbmlzaDsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX01faW5zZXJ0X2F1eChfX3Bvc2l0
aW9uLCBfX3gpOwogICAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxf
QWxsb2M+OjppdGVyYXRvcgogICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJh
dG9yIF9fcG9zaXRpb24pCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkK
ICAgICAgICBjb3B5KF9fcG9zaXRpb24gKyAxLCBlbmQoKSwgX19wb3NpdGlvbik7CiAgICAgIC0t
X01fZmluaXNoOwogICAgICBfRGVzdHJveShfTV9maW5pc2gpOwogICAgICByZXR1cm4gX19wb3Np
dGlvbjsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgog
ICAgdHlwZW5hbWUgdmVjdG9yPF9UcCxfQWxsb2M+OjppdGVyYXRvcgogICAgdmVjdG9yPF9UcCxf
QWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAg
IHsKICAgICAgaXRlcmF0b3IgX19pKGNvcHkoX19sYXN0LCBlbmQoKSwgX19maXJzdCkpOwogICAg
ICBfRGVzdHJveShfX2ksIGVuZCgpKTsKICAgICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9f
bGFzdCAtIF9fZmlyc3QpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdmVjdG9yPF9UcCxfQWxsb2M+Jgog
ICAgdmVjdG9yPF9UcCxfQWxsb2M+OjoKICAgIG9wZXJhdG9yPShjb25zdCB2ZWN0b3I8X1RwLF9B
bGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYgKCZfX3ggIT0gdGhpcykKICAgICAgewogICAgICAg
IGNvbnN0IHNpemVfdHlwZSBfX3hsZW4gPSBfX3guc2l6ZSgpOwogICAgICAgIGlmIChfX3hsZW4g
PiBjYXBhY2l0eSgpKQogICAgICAgIHsKICAgICAgICAgIHBvaW50ZXIgX190bXAgPSBfTV9hbGxv
Y2F0ZV9hbmRfY29weShfX3hsZW4sIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOwogICAgICAgICAg
X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9N
X3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAgICAgIF9NX3N0YXJ0
ID0gX190bXA7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX194bGVu
OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChzaXplKCkgPj0gX194bGVuKQogICAgICAgIHsK
ICAgICAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJlZ2lu
KCkpKTsKICAgICAgICAgIF9EZXN0cm95KF9faSwgZW5kKCkpOwogICAgICAgIH0KICAgICAgICBl
bHNlCiAgICAgICAgewogICAgICAgICAgY29weShfX3guYmVnaW4oKSwgX194LmJlZ2luKCkgKyBz
aXplKCksIF9NX3N0YXJ0KTsKICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3guYmVnaW4o
KSArIHNpemUoKSwgX194LmVuZCgpLCBfTV9maW5pc2gpOwogICAgICAgIH0KICAgICAgICBfTV9m
aW5pc2ggPSBfTV9zdGFydCArIF9feGxlbjsKICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAg
ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQK
ICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBj
b25zdCB2YWx1ZV90eXBlJiBfX3ZhbCkKICAgIHsKICAgICAgaWYgKF9fbiA+IGNhcGFjaXR5KCkp
CiAgICAgIHsKICAgICAgICB2ZWN0b3IgX190bXAoX19uLCBfX3ZhbCwgZ2V0X2FsbG9jYXRvcigp
KTsKICAgICAgICBfX3RtcC5zd2FwKCp0aGlzKTsKICAgICAgfQogICAgICBlbHNlIGlmIChfX24g
PiBzaXplKCkpCiAgICAgIHsKICAgICAgICBmaWxsKGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAg
ICAgICAgX01fZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX01fZmluaXNoLCBfX24gLSBz
aXplKCksIF9fdmFsKTsKICAgICAgfQogICAgICBlbHNlCiAgICAgICAgZXJhc2UoZmlsbF9uKGJl
Z2luKCksIF9fbiwgX192YWwpLCBlbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
VHAsIHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICB2
b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICB7CiAg
ICAgIGl0ZXJhdG9yIF9fY3VyKGJlZ2luKCkpOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s
YXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAgICAgICAgKl9fY3Vy
ID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICBlcmFzZShf
X2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVuZCgpLCBfX2ZpcnN0LCBf
X2xhc3QpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+
IHRlbXBsYXRlIDx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICB2ZWN0b3I8X1Rw
LF9BbGxvYz46OgogICAgX01fYXNzaWduX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCiAg
ICB7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7Cgog
ICAgICBpZiAoX19sZW4gPiBjYXBhY2l0eSgpKQogICAgICB7CiAgICAgICAgcG9pbnRlciBfX3Rt
cChfTV9hbGxvY2F0ZV9hbmRfY29weShfX2xlbiwgX19maXJzdCwgX19sYXN0KSk7CiAgICAgICAg
X0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZGVhbGxvY2F0ZShfTV9z
dGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgICAgX01fc3RhcnQgPSBf
X3RtcDsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsg
X19sZW47CiAgICAgIH0KICAgICAgZWxzZSBpZiAoc2l6ZSgpID49IF9fbGVuKQogICAgICB7CiAg
ICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFy
dCkpOwogICAgICAgIF9EZXN0cm95KF9fbmV3X2ZpbmlzaCwgZW5kKCkpOwogICAgICAgIF9NX2Zp
bmlzaCA9IF9fbmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICB7CiAg
ICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlk
LCBzaXplKCkpOwogICAgICAgIGNvcHkoX19maXJzdCwgX19taWQsIF9NX3N0YXJ0KTsKICAgICAg
ICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFzdCwgX01fZmluaXNo
KTsKICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01faW5zZXJ0X2F1eChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkKICAgIHsKICAgICAgaWYgKF9NX2Zp
bmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoX01f
ZmluaXNoLCAqKF9NX2ZpbmlzaCAtIDEpKTsKICAgICAgICArK19NX2ZpbmlzaDsKICAgICAgICBf
VHAgX194X2NvcHkgPSBfX3g7CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBpdGVy
YXRvcihfTV9maW5pc2gtMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0xKSk7CiAgICAgICAgKl9fcG9z
aXRpb24gPSBfX3hfY29weTsKICAgICAgfQogICAgICBlbHNlCiAgICAgIHsKICAgICAgICBjb25z
dCBzaXplX3R5cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgICBjb25zdCBzaXplX3R5cGUg
X19sZW4gPSBfX29sZF9zaXplICE9IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICAgICAgaXRl
cmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4pKTsKICAgICAgICBpdGVyYXRvciBf
X25ld19maW5pc2goX19uZXdfc3RhcnQpOwogICAgICAgIHRyeQogICAgICAgICAgewogICAgICAg
ICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoaXRlcmF0b3IoX01fc3RhcnQp
LCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19uZXdfc3RhcnQpOwogICAgICAgICAgICBfQ29uc3RydWN0KF9fbmV3X2ZpbmlzaC5iYXNl
KCksIF9feCk7CiAgICAgICAgICAgICsrX19uZXdfZmluaXNoOwogICAgICAgICAgICBfX25ld19m
aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2Zp
bmlzaCk7CiAgICAgICAgICB9CiAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAg
ICAgICBfRGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpOwogICAgICAgICAgICBfTV9k
ZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICAgIHRocm93Owog
ICAgICAgICAgfQogICAgICAgIF9EZXN0cm95KGJlZ2luKCksIGVuZCgpKTsKICAgICAgICBfTV9k
ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgICAg
ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICBfTV9maW5pc2ggPSBfX25l
d19maW5pc2guYmFzZSgpOwogICAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19uZXdfc3RhcnQu
YmFzZSgpICsgX19sZW47CiAgICAgIH0KICAgIH0KIyAzMDMgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy92ZWN0b3IudGNjIiAzCiAgdGVtcGxhdGUg
PHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdm9pZAogICAgdmVjdG9yPF9UcCxf
QWxsb2M+OjoKICAgIF9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNpemVfdHlw
ZSBfX24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsKICAgICAgaWYgKF9fbiAhPSAwKQog
ICAgICB7CiAgICAgICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2Zpbmlz
aCkgPj0gX19uKSB7CiAgICAgICAgICB2YWx1ZV90eXBlIF9feF9jb3B5ID0gX194OwogICAgICAg
ICAgY29uc3Qgc2l6ZV90eXBlIF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAg
ICAgICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmluaXNoKTsKICAgICAgICAgIGlmIChf
X2VsZW1zX2FmdGVyID4gX19uKQogICAgICAgICAgewogICAgICAgICAgICB1bmluaXRpYWxpemVk
X2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAgICAg
IF9NX2ZpbmlzaCArPSBfX247CiAgICAgICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwg
X19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgICAgICBmaWxsKF9fcG9z
aXRpb24sIF9fcG9zaXRpb24gKyBfX24sIF9feF9jb3B5KTsKICAgICAgICAgIH0KICAgICAgICAg
IGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fZmlu
aXNoLCBfX24gLSBfX2VsZW1zX2FmdGVyLCBfX3hfY29weSk7CiAgICAgICAgICAgIF9NX2Zpbmlz
aCArPSBfX24gLSBfX2VsZW1zX2FmdGVyOwogICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHko
X19wb3NpdGlvbiwgX19vbGRfZmluaXNoLCBfTV9maW5pc2gpOwogICAgICAgICAgICBfTV9maW5p
c2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAgZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9m
aW5pc2gsIF9feF9jb3B5KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg
ICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbGVuID0gX19vbGRfc2l6ZSArIG1heChfX29sZF9zaXpl
LCBfX24pOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfc3RhcnQoX01fYWxsb2NhdGUoX19sZW4p
KTsKICAgICAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgICAg
ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlh
bGl6ZWRfY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfX25ld19zdGFydCk7CiAgICAgICAgICAgICAgX19uZXdf
ZmluaXNoID0gdW5pbml0aWFsaXplZF9maWxsX24oX19uZXdfZmluaXNoLCBfX24sIF9feCk7CiAg
ICAgICAgICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX3Bvc2l0aW9uLCBlbmQoKSwgX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgfQogICAg
ICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0Rlc3Ryb3koX19u
ZXdfc3RhcnQsX19uZXdfZmluaXNoKTsKICAgICAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9fbmV3
X3N0YXJ0LmJhc2UoKSxfX2xlbik7CiAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIF9EZXN0cm95KF9NX3N0YXJ0LCBfTV9maW5pc2gpOwogICAgICAgICAgX01fZGVh
bGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgICAg
ICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgICAgIF9NX2ZpbmlzaCA9IF9f
bmV3X2ZpbmlzaC5iYXNlKCk7CiAgICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0
YXJ0LmJhc2UoKSArIF9fbGVuOwogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxsb2M+IHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJ
dGVyYXRvcj4KICAgIHZvaWQKICAgIHZlY3RvcjxfVHAsX0FsbG9jPjo6CiAgICBfTV9yYW5nZV9p
bnNlcnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig
X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGlucHV0
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytf
X2ZpcnN0KQogICAgICB7CiAgICAgICAgX19wb3MgPSBpbnNlcnQoX19wb3MsICpfX2ZpcnN0KTsK
ICAgICAgICArK19fcG9zOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9BbGxvYz4gdGVtcGxhdGUgPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcmF0b3I+CiAg
ICB2b2lkCiAgICB2ZWN0b3I8X1RwLF9BbGxvYz46OgogICAgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJh
dG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2Zp
cnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICB7
CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAg
ICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkgPj0gX19uKQog
ICAgICAgIHsKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVyID0gZW5kKCkg
LSBfX3Bvc2l0aW9uOwogICAgICAgICAgaXRlcmF0b3IgX19vbGRfZmluaXNoKF9NX2ZpbmlzaCk7
CiAgICAgICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikKICAgICAgICAgIHsKICAgICAgICAg
ICAgdW5pbml0aWFsaXplZF9jb3B5KF9NX2ZpbmlzaCAtIF9fbiwgX01fZmluaXNoLCBfTV9maW5p
c2gpOwogICAgICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgICAgICBjb3B5X2JhY2t3
YXJkKF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAg
ICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcG9zaXRpb24pOwogICAgICAgICAgfQogICAg
ICAgICAgZWxzZQogICAgICAgICAgewogICAgICAgICAgICBfRm9yd2FyZEl0ZXJhdG9yIF9fbWlk
ID0gX19maXJzdDsKICAgICAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRlcik7CiAg
ICAgICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX21pZCwgX19sYXN0LCBfTV9maW5pc2gpOwog
ICAgICAgICAgICBfTV9maW5pc2ggKz0gX19uIC0gX19lbGVtc19hZnRlcjsKICAgICAgICAgICAg
dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsK
ICAgICAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgICAgIGNvcHko
X19maXJzdCwgX19taWQsIF9fcG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAg
ICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSBz
aXplKCk7CiAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4
KF9fb2xkX3NpemUsIF9fbik7CiAgICAgICAgICBpdGVyYXRvciBfX25ld19zdGFydChfTV9hbGxv
Y2F0ZShfX2xlbikpOwogICAgICAgICAgaXRlcmF0b3IgX19uZXdfZmluaXNoKF9fbmV3X3N0YXJ0
KTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdfZmluaXNo
ID0gdW5pbml0aWFsaXplZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQp
OwogICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0
LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAgICAgX19uZXdfZmluaXNoID0gdW5p
bml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAg
ICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgICAgewogICAgICAgICAg
ICAgIF9EZXN0cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCk7CiAgICAgICAgICAgICAgX01f
ZGVhbGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksIF9fbGVuKTsKICAgICAgICAgICAgICB0aHJv
dzsKICAgICAgICAgICAgfQogICAgICAgICAgX0Rlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7
CiAgICAgICAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9N
X3N0YXJ0KTsKICAgICAgICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwogICAgICAg
ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgICAgIF9NX2VuZF9vZl9z
dG9yYWdlID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgICAgICAgfQogICAgICB9CiAg
ICB9Cn0KIyA3NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My92ZWN0b3IiIDIgMwojIDI2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh
c2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiIDIKIyAzNSAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgp0ZW1wbGF0
ZSA8dHlwZW5hbWUgbnVtYmVyPiBjbGFzcyBWZWN0b3I7CnRlbXBsYXRlIDxpbnQgZGltPiBjbGFz
cyBQb2ludDsKCgoKdGVtcGxhdGUgPGludCByYW5rLCBpbnQgZGltPiBjbGFzcyBUZW5zb3I7CnRl
bXBsYXRlIDxpbnQgZGltPiBjbGFzcyBUZW5zb3I8MSxkaW0+OwojIDUyICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCnRl
bXBsYXRlIDxpbnQgZGltPgpjbGFzcyBUZW5zb3I8MSxkaW0+CnsKICBwdWJsaWM6CiMgNzMgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29y
X2Jhc2UuaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltZW5zaW9uID0gZGltOwoK
CgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHJhbmsgPSAxOwoKCgoKCgogICAgdHlw
ZWRlZiBkb3VibGUgdmFsdWVfdHlwZTsKIyA5OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAgdHlwZWRlZiBkb3Vi
bGUgYXJyYXlfdHlwZVsoZGltIT0wKSA/IGRpbSA6IDEwMDAwMDAwMF07CgoKCgoKCiAgICBleHBs
aWNpdCBUZW5zb3IgKGNvbnN0IGJvb2wgaW5pdGlhbGl6ZSA9IHRydWUpOwoKCgoKCgogICAgVGVu
c29yIChjb25zdCBhcnJheV90eXBlICZpbml0aWFsaXplcik7CgoKCgogICAgVGVuc29yIChjb25z
dCBUZW5zb3I8MSxkaW0+ICYpOwojIDEzMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAgZG91YmxlIG9wZXJhdG9y
IFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwojIDE0MiAiL2hvbWUvYmFuZ2Vy
dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgog
ICAgZG91YmxlICYgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCk7CgoKCgog
ICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yID0gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJik7CgoK
CgogICAgYm9vbCBvcGVyYXRvciA9PSAoY29uc3QgVGVuc29yPDEsZGltPiAmKSBjb25zdDsKCgoK
CiAgICBib29sIG9wZXJhdG9yICE9IChjb25zdCBUZW5zb3I8MSxkaW0+ICYpIGNvbnN0OwoKCgoK
CgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yICs9IChjb25zdCBUZW5zb3I8MSxkaW0+ICYp
OwoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yIC09IChjb25zdCBUZW5zb3I8MSxkaW0+
ICYpOwoKCgoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yICo9IChjb25zdCBkb3VibGUg
JmZhY3Rvcik7CgoKCgogICAgVGVuc29yPDEsZGltPiAmIG9wZXJhdG9yIC89IChjb25zdCBkb3Vi
bGUgJmZhY3Rvcik7CgoKCgoKICAgIGRvdWJsZSBvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxk
aW0+ICYpIGNvbnN0OwoKCgoKCgoKICAgIFRlbnNvcjwxLGRpbT4gb3BlcmF0b3IgKyAoY29uc3Qg
VGVuc29yPDEsZGltPiAmKSBjb25zdDsKIyAyMDMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIFRlbnNvcjwxLGRp
bT4gb3BlcmF0b3IgLSAoY29uc3QgVGVuc29yPDEsZGltPiAmKSBjb25zdDsKCgoKCiAgICBUZW5z
b3I8MSxkaW0+IG9wZXJhdG9yIC0gKCkgY29uc3Q7CgoKCgogICAgdm9pZCBjbGVhciAoKTsKIyAy
MjQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv
dGVuc29yX2Jhc2UuaCIKICAgIHZvaWQgdW5yb2xsIChWZWN0b3I8ZG91YmxlPiAmcmVzdWx0KSBj
b25zdDsKCgoKCgoKCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAo
KTsKCgoKCiAgICBjbGFzcyBFeGNEaW1Ub29TbWFsbCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsg
cHVibGljOiBFeGNEaW1Ub29TbWFsbCAoY29uc3QgaW50IGExKSA6IGFyZzEgKGExKSB7fTsgdmly
dHVhbCB+RXhjRGltVG9vU21hbGwgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludElu
Zm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiR2l2ZW4gZGltZW5zaW9ucyBt
dXN0IGJlID49IDEsIGJ1dCB3YXMgIiA8PCBhcmcxIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTog
Y29uc3QgaW50IGFyZzE7IH07CgoKCiAgcHJpdmF0ZToKIyAyNTEgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIGRv
dWJsZSB2YWx1ZXNbKGRpbSE9MCkgPyAoZGltKSA6IDFdOwojIDI2NyAiL2hvbWUvYmFuZ2VydGgv
cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgogICAg
dm9pZCB1bnJvbGxfcmVjdXJzaW9uIChWZWN0b3I8ZG91YmxlPiAmcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgJnN0YXJ0X2luZGV4KSBjb25zdDsKCiAgcHJp
dmF0ZToKIyAyODQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGVuc29yX2Jhc2UuaCIKICAgIHRlbXBsYXRlPGludCBvdGhlcnJhbmssIGludCBv
dGhlcmRpbT4gZnJpZW5kIGNsYXNzIFRlbnNvcjsKCgoKCgoKICAgIGZyaWVuZCBjbGFzcyBQb2lu
dDxkaW0+Owp9OwoKCgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4Kc3RkOjpvc3RyZWFtICYgb3BlcmF0
b3IgPDwgKHN0ZDo6b3N0cmVhbSAmb3V0LCBjb25zdCBUZW5zb3I8MSxkaW0+ICZwKTsKCgoKCgp0
ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT46OlRlbnNvciAoY29uc3QgYm9v
bCBpbml0aWFsaXplKQp7CiAgeyB9OwoKICBpZiAoaW5pdGlhbGl6ZSkKICAgIGZvciAodW5zaWdu
ZWQgaW50IGk9MDsgaSE9ZGltOyArK2kpCiAgICAgIHZhbHVlc1tpXSA9IDA7Cn07CgoKCnRlbXBs
YXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGltPjo6VGVuc29yIChjb25zdCBhcnJheV90
eXBlICZpbml0aWFsaXplcikKewogIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkK
ICAgIHZhbHVlc1tpXSA9IGluaXRpYWxpemVyW2ldOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K
aW5saW5lClRlbnNvcjwxLGRpbT46OlRlbnNvciAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkKewog
IGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHZhbHVlc1tpXSA9IHAudmFs
dWVzW2ldOwp9OwoKCgp0ZW1wbGF0ZSA8PgppbmxpbmUKVGVuc29yPDEsMD46OlRlbnNvciAoY29u
c3QgVGVuc29yPDEsMD4gJikKewojIDM1MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90ZW5zb3JfYmFzZS5oIgp9OwoKCgp0ZW1wbGF0ZSA8aW50
IGRpbT4KaW5saW5lCmRvdWJsZSBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5z
aWduZWQgaW50IGluZGV4KSBjb25zdAp7CiAgeyB9OwogIHJldHVybiB2YWx1ZXNbaW5kZXhdOwp9
OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lCmRvdWJsZSAmIFRlbnNvcjwxLGRpbT46Om9w
ZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgpCnsKICB7IH07CiAgcmV0dXJuIHZh
bHVlc1tpbmRleF07Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGlt
PiAmIFRlbnNvcjwxLGRpbT46Om9wZXJhdG9yID0gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApCnsK
ICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICB2YWx1ZXNbaV0gPSBwLnZh
bHVlc1tpXTsKICByZXR1cm4gKnRoaXM7Cn07CgoKCnRlbXBsYXRlIDw+CmlubGluZQpUZW5zb3I8
MSwwPiAmIFRlbnNvcjwxLDA+OjpvcGVyYXRvciA9IChjb25zdCBUZW5zb3I8MSwwPiAmKQp7CiMg
NDAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L3RlbnNvcl9iYXNlLmgiCiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K
aW5saW5lCmJvb2wgVGVuc29yPDEsZGltPjo6b3BlcmF0b3IgPT0gKGNvbnN0IFRlbnNvcjwxLGRp
bT4gJnApIGNvbnN0CnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICBp
ZiAodmFsdWVzW2ldICE9IHAudmFsdWVzW2ldKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7
Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKYm9vbCBUZW5zb3I8MSxkaW0+OjpvcGVy
YXRvciAhPSAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAhKCgqdGhp
cykgPT0gcCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKVGVuc29yPDEsZGltPiAm
IFRlbnNvcjwxLGRpbT46Om9wZXJhdG9yICs9IChjb25zdCBUZW5zb3I8MSxkaW0+ICZwKQp7CiAg
Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQogICAgdmFsdWVzW2ldICs9IHAudmFs
dWVzW2ldOwogIHJldHVybiAqdGhpczsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpU
ZW5zb3I8MSxkaW0+ICYgVGVuc29yPDEsZGltPjo6b3BlcmF0b3IgLT0gKGNvbnN0IFRlbnNvcjwx
LGRpbT4gJnApCnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltOyArK2kpCiAgICB2YWx1
ZXNbaV0gLT0gcC52YWx1ZXNbaV07CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50
IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT4gJiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAqPSAo
Y29uc3QgZG91YmxlICZzKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQog
ICAgdmFsdWVzW2ldICo9IHM7CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRp
bT4KaW5saW5lClRlbnNvcjwxLGRpbT4gJiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAvPSAoY29u
c3QgZG91YmxlICZzKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPGRpbTsgKytpKQogICAg
dmFsdWVzW2ldIC89IHM7CiAgcmV0dXJuICp0aGlzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4K
aW5saW5lCmRvdWJsZSBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxk
aW0+ICZwKSBjb25zdAp7CiAgZG91YmxlIHE9MDsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8
ZGltOyArK2kpCiAgICBxICs9IHZhbHVlc1tpXSAqIHAudmFsdWVzW2ldOwogIHJldHVybiBxOwp9
OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwxLGRpbT4gVGVuc29yPDEsZGlt
Pjo6b3BlcmF0b3IgKyAoY29uc3QgVGVuc29yPDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAo
VGVuc29yPDEsZGltPigqdGhpcykgKz0gcCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp
bmUKVGVuc29yPDEsZGltPiBUZW5zb3I8MSxkaW0+OjpvcGVyYXRvciAtIChjb25zdCBUZW5zb3I8
MSxkaW0+ICZwKSBjb25zdAp7CiAgcmV0dXJuIChUZW5zb3I8MSxkaW0+KCp0aGlzKSAtPSBwKTsK
fTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpUZW5zb3I8MSxkaW0+IFRlbnNvcjwxLGRp
bT46Om9wZXJhdG9yIC0gKCkgY29uc3QKewogIFRlbnNvcjwxLGRpbT4gcmVzdWx0OwogIGZvciAo
dW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHJlc3VsdC52YWx1ZXNbaV0gPSAtdmFs
dWVzW2ldOwogIHJldHVybiByZXN1bHQ7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUK
dm9pZCBUZW5zb3I8MSxkaW0+OjpjbGVhciAoKQp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBp
PGRpbTsgKytpKQogICAgdmFsdWVzW2ldID0gMDsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+Cmlu
bGluZQp1bnNpZ25lZCBpbnQKVGVuc29yPDEsZGltPjo6bWVtb3J5X2NvbnN1bXB0aW9uICgpCnsK
ICByZXR1cm4gc2l6ZW9mKFRlbnNvcjwxLGRpbT4pOwp9OwoKCgoKCgoKdGVtcGxhdGUgPGludCBk
aW0+CmlubGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQs
IGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApCnsKICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGlt
LTE7ICsraSkKICAgIG91dCA8PCBwW2ldIDw8ICcgJzsKICBvdXQgPDwgcFtkaW0tMV07CgogIHJl
dHVybiBvdXQ7Cn07CiMgNTU1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh
c2UvaW5jbHVkZS9iYXNlL3RlbnNvcl9iYXNlLmgiCmlubGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVy
YXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0IFRlbnNvcjwxLDE+ICZwKQp7CiAgb3V0
IDw8IHBbMF07CgogIHJldHVybiBvdXQ7Cn07CgoKCgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp
bmUKVGVuc29yPDEsZGltPgpvcGVyYXRvciAqIChjb25zdCBUZW5zb3I8MSxkaW0+ICZ0LAogICAg
ICAgICAgICBjb25zdCBkb3VibGUgZmFjdG9yKQp7CiAgVGVuc29yPDEsZGltPiB0dDsKICBmb3Ig
KHVuc2lnbmVkIGludCBkPTA7IGQ8ZGltOyArK2QpCiAgICB0dFtkXSA9IHRbZF0gKiBmYWN0b3I7
CiAgcmV0dXJuIHR0Owp9OwoKCgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClRlbnNvcjwx
LGRpbT4Kb3BlcmF0b3IgKiAoY29uc3QgZG91YmxlIGZhY3RvciwKICAgICAgICAgICAgY29uc3Qg
VGVuc29yPDEsZGltPiAmdCkKewogIFRlbnNvcjwxLGRpbT4gdHQ7CiAgZm9yICh1bnNpZ25lZCBp
bnQgZD0wOyBkPGRpbTsgKytkKQogICAgdHRbZF0gPSB0W2RdICogZmFjdG9yOwogIHJldHVybiB0
dDsKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpUZW5zb3I8MSxkaW0+Cm9wZXJh
dG9yIC8gKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnQsCiAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBm
YWN0b3IpCnsKICBUZW5zb3I8MSxkaW0+IHR0OwogIGZvciAodW5zaWduZWQgaW50IGQ9MDsgZDxk
aW07ICsrZCkKICAgIHR0W2RdID0gdFtkXSAvIGZhY3RvcjsKICByZXR1cm4gdHQ7Cn07CiMgMjAg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcG9p
bnQuaCIgMgojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3BvaW50LmgiCnRlbXBsYXRlIDxpbnQgZGltPgpjbGFzcyBQb2ludCA6IHB1Ymxp
YyBUZW5zb3I8MSxkaW0+CnsKICBwdWJsaWM6CgoKCiAgICBQb2ludCAoKTsKCgoKCiAgICBleHBs
aWNpdCBQb2ludCAoY29uc3QgYm9vbCBpbml0aWFsaXplKTsKCgoKCgoKICAgIFBvaW50IChjb25z
dCBUZW5zb3I8MSxkaW0+ICYpOwoKCgoKCgoKICAgIGV4cGxpY2l0IFBvaW50IChjb25zdCBkb3Vi
bGUgeCk7CgoKCgoKCgogICAgUG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSk7
CgoKCgoKCgogICAgUG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwgY29uc3Qg
ZG91YmxlIHopOwoKCgoKICAgIGRvdWJsZSBvcGVyYXRvciAoKSAoY29uc3QgdW5zaWduZWQgaW50
IGluZGV4KSBjb25zdDsKCgoKCgogICAgZG91YmxlICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln
bmVkIGludCBpbmRleCk7CiMgMTExICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3BvaW50LmgiCiAgICBQb2ludDxkaW0+IG9wZXJhdG9yICsgKGNv
bnN0IFRlbnNvcjwxLGRpbT4mKSBjb25zdDsKCgoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0b3Ig
LSAoY29uc3QgVGVuc29yPDEsZGltPiYpIGNvbnN0OwoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0
b3IgLSAoKSBjb25zdDsKIyAxMzMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvcG9pbnQuaCIKICAgIFBvaW50PGRpbT4gb3BlcmF0b3IgKiAoY29u
c3QgZG91YmxlKSBjb25zdDsKCgoKCiAgICBkb3VibGUgb3BlcmF0b3IgKiAoY29uc3QgVGVuc29y
PDEsZGltPiAmKSBjb25zdDsKCgoKCgoKICAgIFBvaW50PGRpbT4gb3BlcmF0b3IgLyAoY29uc3Qg
ZG91YmxlKSBjb25zdDsKCgoKCgoKICAgIGRvdWJsZSBzcXVhcmUgKCkgY29uc3Q7CgoKCgoKICAg
IGRvdWJsZSBkaXN0YW5jZSAoY29uc3QgUG9pbnQ8ZGltPiAmcCkgY29uc3Q7CgoKCgoKICAgIGNs
YXNzIEV4Y0RpbVRvb1NtYWxsIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y0Rp
bVRvb1NtYWxsIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNEaW1U
b29TbWFsbCAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3Ry
ZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJHaXZlbiBkaW1lbnNpb25zIG11c3QgYmUgPj0gMSwg
YnV0IHdhcyAiIDw8IGFyZzEgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJn
MTsgfTsKCgoKCgogICAgY2xhc3MgRXhjSW52YWxpZENvbnN0cnVjdG9yQ2FsbGVkIDogcHVibGlj
IEV4Y2VwdGlvbkJhc2Uge307Cn07CgoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50
PGRpbT46OlBvaW50ICgpCnt9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50PGRp
bT46OlBvaW50IChjb25zdCBib29sIGluaXRpYWxpemUpIDoKICAgICAgICAgICAgICAgIFRlbnNv
cjwxLGRpbT4oaW5pdGlhbGl6ZSkKe307CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9p
bnQ8ZGltPjo6UG9pbnQgKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnQpIDoKICAgICAgICAgICAgICAg
IFRlbnNvcjwxLGRpbT4odCkKe307CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8
ZGltPjo6UG9pbnQgKGNvbnN0IGRvdWJsZSB4KQp7CiAgeyB9OwogIHRoaXMtPnZhbHVlc1swXSA9
IHg7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8ZGltPjo6UG9pbnQgKGNv
bnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSkKewogIHsgfTsKICB0aGlzLT52YWx1ZXNbMF0g
PSB4OwogIHRoaXMtPnZhbHVlc1sxXSA9IHk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxp
bmUKUG9pbnQ8ZGltPjo6UG9pbnQgKGNvbnN0IGRvdWJsZSB4LCBjb25zdCBkb3VibGUgeSwgY29u
c3QgZG91YmxlIHopCnsKICB7IH07CiAgdGhpcy0+dmFsdWVzWzBdID0geDsKICB0aGlzLT52YWx1
ZXNbMV0gPSB5OwogIHRoaXMtPnZhbHVlc1syXSA9IHo7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGlt
PgppbmxpbmUKZG91YmxlIFBvaW50PGRpbT46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBp
bnQgaW5kZXgpIGNvbnN0CnsKICB7IH07CiAgcmV0dXJuIHRoaXMtPnZhbHVlc1tpbmRleF07Cn07
CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKZG91YmxlICYgUG9pbnQ8ZGltPjo6b3BlcmF0
b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleCkKewogIHsgfTsKICByZXR1cm4gdGhpcy0+
dmFsdWVzW2luZGV4XTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpQb2ludDxkaW0+
IFBvaW50PGRpbT46Om9wZXJhdG9yICsgKGNvbnN0IFRlbnNvcjwxLGRpbT4gJnApIGNvbnN0CnsK
ICByZXR1cm4gKFBvaW50PGRpbT4oKnRoaXMpICs9IHApOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRp
bT4KaW5saW5lClBvaW50PGRpbT4gUG9pbnQ8ZGltPjo6b3BlcmF0b3IgLSAoY29uc3QgVGVuc29y
PDEsZGltPiAmcCkgY29uc3QKewogIHJldHVybiAoUG9pbnQ8ZGltPigqdGhpcykgLT0gcCk7Cn07
CgoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKUG9pbnQ8ZGltPiBQb2ludDxkaW0+OjpvcGVy
YXRvciAtICgpIGNvbnN0CnsKICBQb2ludDxkaW0+IHJlc3VsdDsKICBmb3IgKHVuc2lnbmVkIGlu
dCBpPTA7IGk8ZGltOyArK2kpCiAgICByZXN1bHQudmFsdWVzW2ldID0gLXRoaXMtPnZhbHVlc1tp
XTsKICByZXR1cm4gcmVzdWx0Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50
PGRpbT4gUG9pbnQ8ZGltPjo6b3BlcmF0b3IgKiAoY29uc3QgZG91YmxlIGZhY3RvcikgY29uc3QK
ewogIHJldHVybiAoUG9pbnQ8ZGltPigqdGhpcykgKj0gZmFjdG9yKTsKfTsKCgoKdGVtcGxhdGUg
PGludCBkaW0+CmlubGluZQpkb3VibGUgUG9pbnQ8ZGltPjo6b3BlcmF0b3IgKiAoY29uc3QgVGVu
c29yPDEsZGltPiAmcCkgY29uc3QKewoKICByZXR1cm4gVGVuc29yPDEsZGltPjo6b3BlcmF0b3Ig
KiAocCk7Cn07CgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpkb3VibGUgUG9pbnQ8ZGltPjo6
c3F1YXJlICgpIGNvbnN0CnsKICBkb3VibGUgcT0wOwogIGZvciAodW5zaWduZWQgaW50IGk9MDsg
aTxkaW07ICsraSkKICAgIHEgKz0gdGhpcy0+dmFsdWVzW2ldICogdGhpcy0+dmFsdWVzW2ldOwog
IHJldHVybiBxOwp9OwoKCnRlbXBsYXRlIDxpbnQgZGltPgppbmxpbmUKZG91YmxlIFBvaW50PGRp
bT46OmRpc3RhbmNlIChjb25zdCBQb2ludDxkaW0+ICZwKSBjb25zdAp7CiAgZG91YmxlIHN1bT0w
OwogIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkaW07ICsraSkKICAgIHsKICAgICAgY29uc3Qg
ZG91YmxlIGRpZmY9dGhpcy0+dmFsdWVzW2ldLXAoaSk7CiAgICAgIHN1bSArPSBkaWZmKmRpZmY7
CiAgICB9CgogIHJldHVybiBzdGQ6OnNxcnQoc3VtKTsKfQoKCnRlbXBsYXRlIDxpbnQgZGltPgpp
bmxpbmUKUG9pbnQ8ZGltPiBQb2ludDxkaW0+OjpvcGVyYXRvciAvIChjb25zdCBkb3VibGUgZmFj
dG9yKSBjb25zdAp7CiAgcmV0dXJuIChQb2ludDxkaW0+KCp0aGlzKSAvPSBmYWN0b3IpOwp9Owoj
IDM0MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS9wb2ludC5oIgp0ZW1wbGF0ZSA8aW50IGRpbT4KaW5saW5lClBvaW50PGRpbT4gb3BlcmF0b3Ig
KiAoY29uc3QgZG91YmxlIGZhY3RvciwgY29uc3QgUG9pbnQ8ZGltPiAmcCkKewogIHJldHVybiBw
KmZhY3RvcjsKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0+CmlubGluZQpzdGQ6Om9zdHJlYW0g
JiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0IFBvaW50PGRpbT4gJnApCnsK
ICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8ZGltLTE7ICsraSkKICAgIG91dCA8PCBwW2ldIDw8
ICcgJzsKICBvdXQgPDwgcFtkaW0tMV07CgogIHJldHVybiBvdXQ7Cn07CiMgMzcxICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BvaW50LmgiCmlu
bGluZQpzdGQ6Om9zdHJlYW0gJiBvcGVyYXRvciA8PCAoc3RkOjpvc3RyZWFtICZvdXQsIGNvbnN0
IFBvaW50PDE+ICZwKQp7CiAgb3V0IDw8IHBbMF07CgogIHJldHVybiBvdXQ7Cn07CiMgMTkgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS90YWJsZS5oIiAxCiMgMTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3N1YnNjcmlwdG9yLmgiIDEKIyAz
NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9z
dWJzY3JpcHRvci5oIgpjbGFzcyBTdWJzY3JpcHRvcgp7CiAgcHVibGljOgoKCgogICAgU3Vic2Ny
aXB0b3IoKTsKIyA1MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS9zdWJzY3JpcHRvci5oIgogICAgU3Vic2NyaXB0b3IoY29uc3QgU3Vic2NyaXB0
b3ImKTsKCgoKCgogICAgdmlydHVhbCB+U3Vic2NyaXB0b3IoKTsKIyA2NyAiL2hvbWUvYmFuZ2Vy
dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9zdWJzY3JpcHRvci5oIgog
ICAgU3Vic2NyaXB0b3ImIG9wZXJhdG9yID0gKGNvbnN0IFN1YnNjcmlwdG9yJik7CgoKCgogICAg
dm9pZCBzdWJzY3JpYmUgKCkgY29uc3Q7CgoKCgogICAgdm9pZCB1bnN1YnNjcmliZSAoKSBjb25z
dDsKIyA4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS9zdWJzY3JpcHRvci5oIgogICAgdW5zaWduZWQgaW50IG5fc3Vic2NyaXB0aW9ucyAoKSBj
b25zdDsKCgoKCgoKICAgIGNsYXNzIEV4Y0luVXNlIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBw
dWJsaWM6IEV4Y0luVXNlIChjb25zdCBpbnQgYTEsIGNvbnN0IGNoYXIgKiBhMikgOiBhcmcxIChh
MSksIGFyZzIoYTIpIHt9OyB2aXJ0dWFsIH5FeGNJblVzZSAoKSB0aHJvdyAoKSB7fTsgdmlydHVh
bCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJPYmpl
Y3Qgb2YgY2xhc3MgIiA8PCBhcmcyIDw8ICIgaXMgc3RpbGwgdXNlZCBieSAiIDw8IGFyZzEgPDwg
IiBvdGhlciBvYmplY3RzLiIgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJn
MTsgY29uc3QgY2hhciAqIGFyZzI7IH07CiMgMTA0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3N1YnNjcmlwdG9yLmgiCiAgICBjbGFzcyBFeGNO
b3RVc2VkIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKICBwcml2YXRlOgojIDEyMyAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9zdWJzY3Jp
cHRvci5oIgogICAgbXV0YWJsZSB1bnNpZ25lZCBpbnQgY291bnRlcjsKIyAxMzYgIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uvc3Vic2NyaXB0b3Iu
aCIKICAgIG11dGFibGUgY29uc3Qgc3RkOjp0eXBlX2luZm8gKiBvYmplY3RfaW5mbzsKfTsKIyAx
OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
YWJsZS5oIiAyCgoKCgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4gY2xhc3MgVGFibGVC
YXNlOwp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+IGNsYXNzIFRhYmxlOwp0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4gY2xhc3MgVGFibGU8MSxUPjsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IGNsYXNz
IFRhYmxlPDIsVD47CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUYWJsZTwzLFQ+Owp0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgVGFibGU8NCxUPjsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
IGNsYXNzIFRhYmxlPDUsVD47CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBjbGFzcyBUYWJsZTw2LFQ+
OwojIDQ1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3RhYmxlLmgiCnRlbXBsYXRlIDxpbnQgTj4KY2xhc3MgVGFibGVJbmRpY2VzQmFzZQp7CiAg
cHVibGljOgoKCgoKICAgIHVuc2lnbmVkIGludCBvcGVyYXRvcltdIChjb25zdCB1bnNpZ25lZCBp
bnQgaSkgY29uc3Q7CgogIHByb3RlY3RlZDoKCgoKICAgIHVuc2lnbmVkIGluZGljZXNbTl07Cn07
CiMgNzcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGFibGUuaCIKdGVtcGxhdGUgPGludCBOPgpjbGFzcyBUYWJsZUluZGljZXMKe307CiMgOTUg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFi
bGUuaCIKdGVtcGxhdGUgPD4KY2xhc3MgVGFibGVJbmRpY2VzPDE+IDogcHVibGljIFRhYmxlSW5k
aWNlc0Jhc2U8MT4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUluZGljZXMgKCk7CgoKCgoKICAg
IFRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGluZGV4MSk7Cn07CiMgMTI1ICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgi
CnRlbXBsYXRlIDw+CmNsYXNzIFRhYmxlSW5kaWNlczwyPiA6IHB1YmxpYyBUYWJsZUluZGljZXNC
YXNlPDI+CnsKICBwdWJsaWM6CgoKCgogICAgVGFibGVJbmRpY2VzICgpOwoKCgoKCiAgICBUYWJs
ZUluZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBpbmRleDIpOwp9OwojIDE1NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8PgpjbGFz
cyBUYWJsZUluZGljZXM8Mz4gOiBwdWJsaWMgVGFibGVJbmRpY2VzQmFzZTwzPgp7CiAgcHVibGlj
OgoKCgoKICAgIFRhYmxlSW5kaWNlcyAoKTsKCgoKCgogICAgVGFibGVJbmRpY2VzIChjb25zdCB1
bnNpZ25lZCBpbnQgaW5kZXgxLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
aW5kZXgyLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgzKTsKfTsK
IyAxODcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGFibGUuaCIKdGVtcGxhdGUgPD4KY2xhc3MgVGFibGVJbmRpY2VzPDQ+IDogcHVibGljIFRh
YmxlSW5kaWNlc0Jhc2U8ND4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUluZGljZXMgKCk7CgoK
CgoKICAgIFRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGluZGV4MSwKICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4MiwKICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IGluZGV4MywKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IGluZGV4NCk7Cn07CiMgMjE5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRlIDw+CmNsYXNzIFRhYmxlSW5kaWNl
czw1PiA6IHB1YmxpYyBUYWJsZUluZGljZXNCYXNlPDU+CnsKICBwdWJsaWM6CgoKCgogICAgVGFi
bGVJbmRpY2VzICgpOwoKCgoKCiAgICBUYWJsZUluZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBp
bmRleDEsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDIsCiAgICAg
ICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDMsCiAgICAgICAgICAgICAgICAg
IGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDQsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBpbmRleDUpOwp9OwojIDI1MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8PgpjbGFzcyBUYWJsZUlu
ZGljZXM8Nj4gOiBwdWJsaWMgVGFibGVJbmRpY2VzQmFzZTw2Pgp7CiAgcHVibGljOgoKCgoKICAg
IFRhYmxlSW5kaWNlcyAoKTsKCgoKCgogICAgVGFibGVJbmRpY2VzIChjb25zdCB1bnNpZ25lZCBp
bnQgaW5kZXgxLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgyLAog
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgzLAogICAgICAgICAgICAg
ICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXg0LAogICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaW5kZXg1LAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
aW5kZXg2KTsKfTsKIyAyOTIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz
ZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKbmFtZXNwYWNlIFRhYmxlQmFzZUFjY2Vzc29ycwp7CgoK
CgoKCgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwgYm9vbCBDb25zdG5lc3M+CiAgY2xh
c3MgVHlwZXMKICB7fTsKCgoKCgoKICB0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+IHN0cnVj
dCBUeXBlczxOLFQsdHJ1ZT4KICB7CiAgICAgIHR5cGVkZWYgY29uc3QgVCB2YWx1ZV90eXBlOwog
ICAgICB0eXBlZGVmIGNvbnN0IFRhYmxlQmFzZTxOLFQ+IFRhYmxlVHlwZTsKICB9OwoKCgoKCgog
IHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4gc3RydWN0IFR5cGVzPE4sVCxmYWxzZT4KICB7
CiAgICAgIHR5cGVkZWYgVCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIFRhYmxlQmFzZTxOLFQ+
IFRhYmxlVHlwZTsKICB9OwojIDM2NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUg
VCwgYm9vbCBDLCB1bnNpZ25lZCBpbnQgUD4KICBjbGFzcyBBY2Nlc3NvcgogIHsKICAgIHB1Ymxp
YzoKCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgVHlwZXM8TixULEM+Ojp2YWx1ZV90eXBlICog
cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBUeXBlczxOLFQsQz46OlRhYmxlVHlwZSBU
YWJsZVR5cGU7CgogICAgcHJpdmF0ZToKIyA0MDAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgQWNjZXNzb3IgKGNvbnN0
IFRhYmxlVHlwZSAmdGFibGUsCiAgICAgICAgICAgICAgICBjb25zdCBwb2ludGVyIGRhdGEpOwoK
CgoKCgogICAgICBBY2Nlc3NvciAoKTsKCgoKCgogICAgICBBY2Nlc3NvciAoY29uc3QgQWNjZXNz
b3IgJmEpOwoKICAgIHB1YmxpYzoKCgoKCgogICAgICBBY2Nlc3NvcjxOLFQsQyxQLTE+IG9wZXJh
dG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CiMgNDMxICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICAgIGNs
YXNzIEV4Y0luZGV4UmFuZ2UgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW5k
ZXhSYW5nZSAoY29uc3QgaW50IGExLCBjb25zdCBpbnQgYTIsIGNvbnN0IGludCBhMykgOiBhcmcx
IChhMSksIGFyZzIoYTIpLCBhcmczKGEzKSB7fTsgdmlydHVhbCB+RXhjSW5kZXhSYW5nZSAoKSB0
aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNv
bnN0IHsgb3V0IDw8ICJUaGUgIiA8PCBOLVArMSA8PCAidGggaW5kZXggaGFzIGEgdmFsdWUgb2Yg
IiA8PCBhcmcxIDw8ICIgYnV0IG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZSBbIiA8PCBhcmcyIDw8
ICIsIiA8PCBhcmczIDw8ICJbIiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBh
cmcxOyBjb25zdCBpbnQgYXJnMjsgY29uc3QgaW50IGFyZzM7IH07CgoKCiAgICBwcml2YXRlOgoj
IDQ0NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS90YWJsZS5oIgogICAgICBjb25zdCBUYWJsZVR5cGUgJnRhYmxlOwogICAgICBjb25zdCBwb2lu
dGVyIGRhdGE7CgoKCgoKCiAgICAgIHRlbXBsYXRlIDxpbnQgTjEsIHR5cGVuYW1lIFQxPiBmcmll
bmQgY2xhc3MgVGFibGU7CiAgICAgIHRlbXBsYXRlIDxpbnQgTjEsIHR5cGVuYW1lIFQxLCBib29s
IEMxLCB1bnNpZ25lZCBpbnQgUDE+CiAgICAgIGZyaWVuZCBjbGFzcyBBY2Nlc3NvcjsKIyA0NjMg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFi
bGUuaCIKICB9OwojIDQ3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS90YWJsZS5oIgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwgYm9v
bCBDPgogIGNsYXNzIEFjY2Vzc29yPE4sVCxDLDE+CiAgewogICAgcHVibGljOgojIDQ4OSAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5o
IgogICAgICB0eXBlZGVmIHR5cGVuYW1lIFR5cGVzPE4sVCxDPjo6dmFsdWVfdHlwZSB2YWx1ZV90
eXBlOwogICAgICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29u
c3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlKiBp
dGVyYXRvcjsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9pdGVyYXRvcjsK
ICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgY29uc3Qg
dmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHNpemVfdCBzaXplX3R5
cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKCgoKCgogICAgICB0
eXBlZGVmIHR5cGVuYW1lIFR5cGVzPE4sVCxDPjo6VGFibGVUeXBlIFRhYmxlVHlwZTsKCiAgICBw
cml2YXRlOgojIDUzMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS90YWJsZS5oIgogICAgICBBY2Nlc3NvciAoY29uc3QgVGFibGVUeXBlICZ0YWJs
ZSwKICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50ZXIgZGF0YSk7CgoKCgoKCiAgICAgIEFjY2Vz
c29yICgpOwoKCgoKCgogICAgICBBY2Nlc3NvciAoY29uc3QgQWNjZXNzb3IgJmEpOwoKICAgIHB1
YmxpYzoKCgoKCgogICAgICByZWZlcmVuY2Ugb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGlu
dCkgY29uc3Q7CgoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgc2l6ZSAoKSBjb25zdDsKCgoKCgoK
ICAgICAgaXRlcmF0b3IgYmVnaW4gKCkgY29uc3Q7CgoKCgoKCiAgICAgIGl0ZXJhdG9yIGVuZCAo
KSBjb25zdDsKIyA1ODUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgY2xhc3MgRXhjSW5kZXhSYW5nZSA6IHB1YmxpYyBF
eGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbmRleFJhbmdlIChjb25zdCBpbnQgYTEsIGNvbnN0
IGludCBhMiwgY29uc3QgaW50IGEzKSA6IGFyZzEgKGExKSwgYXJnMihhMiksIGFyZzMoYTMpIHt9
OyB2aXJ0dWFsIH5FeGNJbmRleFJhbmdlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJp
bnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIlRoZSAiIDw8IE4gPDwg
InRoIGluZGV4IGhhcyBhIHZhbHVlIG9mICIgPDwgYXJnMSA8PCAiIGJ1dCBuZWVkcyB0byBiZSBp
biB0aGUgcmFuZ2UgWyIgPDwgYXJnMiA8PCAiLCIgPDwgYXJnMyA8PCAiWyIgPDwgc3RkOjplbmRs
OyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IGNvbnN0IGludCBh
cmczOyB9OwoKCgogICAgcHJpdmF0ZToKIyA1OTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgICAgY29uc3QgVGFibGVUeXBl
ICZ0YWJsZTsKICAgICAgY29uc3QgcG9pbnRlciBkYXRhOwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8
aW50IE4xLCB0eXBlbmFtZSBUMT4gZnJpZW5kIGNsYXNzIFRhYmxlOwogICAgICB0ZW1wbGF0ZSA8
aW50IE4xLCB0eXBlbmFtZSBUMSwgYm9vbCBDMSwgdW5zaWduZWQgaW50IFAxPgogICAgICBmcmll
bmQgY2xhc3MgQWNjZXNzb3I7CiMgNjE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgfTsKfTsKIyA2OTcgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxh
dGUgPGludCBOLCB0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZUJhc2UgOiBwdWJsaWMgU3Vic2NyaXB0
b3IKewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZUJhc2UgKCk7CgoKCgoKCgogICAgVGFibGVCYXNl
IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJnNpemVzKTsKCgoKCgogICAgVGFibGVCYXNlIChjb25z
dCBUYWJsZUJhc2U8TixUPiAmc3JjKTsKCgoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUMj4K
ICAgIFRhYmxlQmFzZSAoY29uc3QgVGFibGVCYXNlPE4sVDI+ICZzcmMpOwoKCgoKICAgIH5UYWJs
ZUJhc2UgKCk7CiMgNzQ2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2U8TixUPiYgb3BlcmF0b3IgPSAoY29u
c3QgVGFibGVCYXNlPE4sVD4mIHNyYyk7CiMgNzU4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUMj4KICAgIFRhYmxlQmFzZTxOLFQ+JiBvcGVyYXRvciA9IChjb25zdCBUYWJsZUJhc2U8TixU
Mj4gJnNyYyk7CgoKCgoKCgogICAgdm9pZCBjbGVhciAoKTsKIyA3NzcgIi9ob21lL2JhbmdlcnRo
L3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIHZvaWQg
cmVpbml0IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJm5ld19zaXplKTsKCgoKCgogICAgY29uc3Qg
VGFibGVJbmRpY2VzPE4+ICYgc2l6ZSAoKSBjb25zdDsKCgoKCgoKCiAgICB1bnNpZ25lZCBpbnQg
bl9lbGVtZW50cyAoKSBjb25zdDsKIyA4MDAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGJvb2wgZW1wdHkgKCkgY29uc3Q7
CiMgODI2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3RhYmxlLmgiCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUMj4KICAgIHZvaWQgZmlsbCAoY29u
c3QgVDIgKmVudHJpZXMpOwoKCgoKCiAgICBUICYgb3BlcmF0b3IoKSAoY29uc3QgVGFibGVJbmRp
Y2VzPE4+ICZpbmRpY2VzKTsKIyA4NDggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQgJiBvcGVyYXRvcigpIChj
b25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0OwoKCgoKCgogICAgdW5zaWduZWQg
aW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCiAgcHJvdGVjdGVkOgoKCgoKCgoKICAg
IHVuc2lnbmVkIGludCBwb3NpdGlvbiAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRpY2VzKSBj
b25zdDsKIyA4NzYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBlbCAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRp
Y2VzKTsKIyA4OTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQgJiBlbCAoY29uc3QgVGFibGVJbmRpY2VzPE4+
ICZpbmRpY2VzKSBjb25zdDsKIyA5MDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIGNvbnN0IFQqIGRhdGEgKCkgY29uc3Q7
CgogIHByb3RlY3RlZDoKCgoKICAgIFQqIHZhbDsKIyA5MjEgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIHVuc2lnbmVkIGlu
dCB2YWxfc2l6ZTsKCgoKCgogICAgVGFibGVJbmRpY2VzPE4+IHRhYmxlX3NpemU7Cn07CiMgOTQ0
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Rh
YmxlLmgiCnRlbXBsYXRlIDxpbnQgTix0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZSA6IHB1YmxpYyBU
YWJsZUJhc2U8TixUPgp7fTsKIyA5NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNz
IFRhYmxlPDEsVD4gOiBwdWJsaWMgVGFibGVCYXNlPDEsVD4KewogIHB1YmxpYzoKCgoKCiAgICBU
YWJsZSAoKTsKCgoKCgoKICAgIFRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZSk7CiMgOTg1
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Rh
YmxlLmgiCiAgICBjb25zdCBUICYKICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQg
aSkgY29uc3Q7CiMgOTk1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUICYKICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNp
Z25lZCBpbnQgaSk7CiMgMTAwNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmCiAgICBvcGVyYXRvciAoKSAo
Y29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0OwojIDEwMTUgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJgogICAgb3Bl
cmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpKTsKfTsKIyAxMDMzICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRl
IDx0eXBlbmFtZSBUPgpjbGFzcyBUYWJsZTwyLFQ+IDogcHVibGljIFRhYmxlQmFzZTwyLFQ+CnsK
ICBwdWJsaWM6CgoKCgogICAgVGFibGUgKCk7CgoKCgoKCiAgICBUYWJsZSAoY29uc3QgdW5zaWdu
ZWQgaW50IHNpemUxLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMik7CiMgMTA2
MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
YWJsZS5oIgogICAgdm9pZCByZWluaXQgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAg
ICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIpOwojIDEwNzQgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFRh
YmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8MixULHRydWUsMT4KICAgIG9wZXJhdG9yIFtdIChj
b25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3Q7CiMgMTA4NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNlQWNj
ZXNzb3JzOjpBY2Nlc3NvcjwyLFQsZmFsc2UsMT4KICAgIG9wZXJhdG9yIFtdIChjb25zdCB1bnNp
Z25lZCBpbnQgaSk7CiMgMTA5OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmIG9wZXJhdG9yICgpIChjb25z
dCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGopIGNvbnN0OwojIDExMTIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBvcGVyYXRvciAoKSAoY29uc3Qg
dW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBq
KTsKIyAxMTIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL3RhYmxlLmgiCiAgICB1bnNpZ25lZCBpbnQgbl9yb3dzICgpIGNvbnN0OwoKCgoKCgoK
ICAgIHVuc2lnbmVkIGludCBuX2NvbHMgKCkgY29uc3Q7CgogIHByb3RlY3RlZDoKIyAxMTQ4ICIv
aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxl
LmgiCiAgICBUICYgZWwgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaik7CiMgMTE3NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgY29uc3QgVCAmIGVsIChjb25zdCB1bnNp
Z25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGopIGNvbnN0
Owp9OwojIDExOTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGFibGUuaCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFRhYmxlPDMsVD4g
OiBwdWJsaWMgVGFibGVCYXNlPDMsVD4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZSAoKTsKCgoK
CgoKICAgIFRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IHNpemUyLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMyk7
CiMgMTIyMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3NvcjwzLFQsdHJ1ZSwy
PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxMjM0ICIv
aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxl
LmgiCiAgICBUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgogICAgb3Bl
cmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKTsKIyAxMjQ2ICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBU
ICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IGspIGNvbnN0OwojIDEyNjAgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIKICAgIFQgJiBvcGVyYXRv
ciAoKSAoY29uc3QgdW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgayk7
Cn07CiMgMTI3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY2xhc3MgVGFibGU8NCxUPiA6
IHB1YmxpYyBUYWJsZUJhc2U8NCxUPgp7CiAgcHVibGljOgoKCgoKICAgIFRhYmxlICgpOwoKCgoK
CgogICAgVGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUzLAog
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNCk7CiMgMTMwNyAiL2hvbWUvYmFuZ2Vy
dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFi
bGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw0LFQsdHJ1ZSwzPgogICAgb3BlcmF0b3IgW10gKGNv
bnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxMzIxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VBY2Nl
c3NvcnM6OkFjY2Vzc29yPDQsVCxmYWxzZSwzPgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2ln
bmVkIGludCBpKTsKIyAxMzMzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh
c2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNvbnN0
IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGss
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsKSBjb25zdDsK
IyAxMzQ4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3RhYmxlLmgiCiAgICBUICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAog
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGssCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBsKTsKfTsKIyAxMzY1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpjbGFz
cyBUYWJsZTw1LFQ+IDogcHVibGljIFRhYmxlQmFzZTw1LFQ+CnsKICBwdWJsaWM6CgoKCgogICAg
VGFibGUgKCk7CgoKCgoKCiAgICBUYWJsZSAoY29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMiwKICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgc2l6ZTMsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU0LAogICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNSk7CiMgMTM5NyAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAgVGFibGVCYXNl
QWNjZXNzb3JzOjpBY2Nlc3Nvcjw1LFQsdHJ1ZSw0PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVu
c2lnbmVkIGludCBpKSBjb25zdDsKIyAxNDExICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VBY2Nlc3NvcnM6
OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVuc2lnbmVkIGlu
dCBpKTsKIyAxNDIzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln
bmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
aiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGssCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbSkgY29uc3Q7CiMgMTQzOSAiL2hvbWUv
YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgog
ICAgVCAmIG9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBrLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwK
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG0pOwp9OwojIDE0NTcgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUu
aCIKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmNsYXNzIFRhYmxlPDYsVD4gOiBwdWJsaWMgVGFibGVC
YXNlPDYsVD4KewogIHB1YmxpYzoKCgoKCiAgICBUYWJsZSAoKTsKCgoKCgoKICAgIFRhYmxlIChj
b25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNp
emUyLAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMywKICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgc2l6ZTQsCiAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU1
LAogICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplNik7CiMgMTQ5MCAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgogICAg
VGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw2LFQsdHJ1ZSw1PgogICAgb3BlcmF0b3IgW10g
KGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdDsKIyAxNTA0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBUYWJsZUJhc2VB
Y2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgogICAgb3BlcmF0b3IgW10gKGNvbnN0IHVu
c2lnbmVkIGludCBpKTsKIyAxNTE2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3RhYmxlLmgiCiAgICBjb25zdCBUICYgb3BlcmF0b3IgKCkgKGNv
bnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IGssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG4pIGNvbnN0OwojIDE1MzMgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGFibGUuaCIK
ICAgIFQgJiBvcGVyYXRvciAoKSAoY29uc3QgdW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGws
CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtLAogICAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbik7Cn07CiMgMTU0OCAiL2hvbWUvYmFuZ2VydGgv
cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90YWJsZS5oIgp0ZW1wbGF0ZSA8
aW50IE4+CmlubGluZQp1bnNpZ25lZCBpbnQKVGFibGVJbmRpY2VzQmFzZTxOPjo6b3BlcmF0b3Ig
W10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAp7CiAgeyB9OwogIHJldHVybiBpbmRpY2Vz
W2ldOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDE+OjpUYWJsZUluZGljZXMgKCkKewogIHRo
aXMtPmluZGljZXNbMF0gPSAwOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDE+OjpUYWJsZUlu
ZGljZXMgKGNvbnN0IHVuc2lnbmVkIGludCBpbmRleDEpCnsKICB0aGlzLT5pbmRpY2VzWzBdID0g
aW5kZXgxOwp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDI+OjpUYWJsZUluZGljZXMgKCkKewog
IHRoaXMtPmluZGljZXNbMF0gPSB0aGlzLT5pbmRpY2VzWzFdID0gMDsKfTsKCgoKaW5saW5lClRh
YmxlSW5kaWNlczwyPjo6VGFibGVJbmRpY2VzIChjb25zdCB1bnNpZ25lZCBpbnQgaW5kZXgxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGluZGV4MikK
ewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhpcy0+aW5kaWNlc1sxXSA9IGluZGV4
MjsKfTsKCgoKaW5saW5lClRhYmxlSW5kaWNlczwzPjo6VGFibGVJbmRpY2VzICgpCnsKICB0aGlz
LT5pbmRpY2VzWzBdID0gdGhpcy0+aW5kaWNlc1sxXSA9IHRoaXMtPmluZGljZXNbMl0gPSAwOwp9
OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDM+OjpUYWJsZUluZGljZXMgKGNvbnN0IHVuc2lnbmVk
IGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25l
ZCBpbnQgaW5kZXgyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGluZGV4MykKewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhpcy0+aW5k
aWNlc1sxXSA9IGluZGV4MjsKICB0aGlzLT5pbmRpY2VzWzJdID0gaW5kZXgzOwp9OwoKCmlubGlu
ZQpUYWJsZUluZGljZXM8ND46OlRhYmxlSW5kaWNlcyAoKQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9
IHRoaXMtPmluZGljZXNbMV0gPSB0aGlzLT5pbmRpY2VzWzJdID0gdGhpcy0+aW5kaWNlc1szXSA9
IDA7Cn07CgoKCmlubGluZQpUYWJsZUluZGljZXM8ND46OlRhYmxlSW5kaWNlcyAoY29uc3QgdW5z
aWduZWQgaW50IGluZGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBpbmRleDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaW5kZXgzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IGluZGV4NCkKewogIHRoaXMtPmluZGljZXNbMF0gPSBpbmRleDE7CiAgdGhp
cy0+aW5kaWNlc1sxXSA9IGluZGV4MjsKICB0aGlzLT5pbmRpY2VzWzJdID0gaW5kZXgzOwogIHRo
aXMtPmluZGljZXNbM10gPSBpbmRleDQ7Cn07CgoKCmlubGluZQpUYWJsZUluZGljZXM8NT46OlRh
YmxlSW5kaWNlcyAoKQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IHRoaXMtPmluZGljZXNbMV0gPSB0
aGlzLT5pbmRpY2VzWzJdID0gdGhpcy0+aW5kaWNlc1szXSA9IHRoaXMtPmluZGljZXNbNF0gPSAw
Owp9OwoKCgppbmxpbmUKVGFibGVJbmRpY2VzPDU+OjpUYWJsZUluZGljZXMgKGNvbnN0IHVuc2ln
bmVkIGludCBpbmRleDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgaW5kZXgyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5z
aWduZWQgaW50IGluZGV4MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBpbmRleDQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaW5kZXg1KQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IGluZGV4MTsKICB0aGlz
LT5pbmRpY2VzWzFdID0gaW5kZXgyOwogIHRoaXMtPmluZGljZXNbMl0gPSBpbmRleDM7CiAgdGhp
cy0+aW5kaWNlc1szXSA9IGluZGV4NDsKICB0aGlzLT5pbmRpY2VzWzRdID0gaW5kZXg1Owp9OwoK
CgppbmxpbmUKVGFibGVJbmRpY2VzPDY+OjpUYWJsZUluZGljZXMgKCkKewogIHRoaXMtPmluZGlj
ZXNbMF0gPSB0aGlzLT5pbmRpY2VzWzFdID0gdGhpcy0+aW5kaWNlc1syXQogICAgICAgICAgICAg
ICAgICAgPSB0aGlzLT5pbmRpY2VzWzNdID0gdGhpcy0+aW5kaWNlc1s0XSA9IDA7Cn07CgoKCmlu
bGluZQpUYWJsZUluZGljZXM8Nj46OlRhYmxlSW5kaWNlcyAoY29uc3QgdW5zaWduZWQgaW50IGlu
ZGV4MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBp
bmRleDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQg
aW5kZXgzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50
IGluZGV4NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBpbmRleDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgaW5kZXg2KQp7CiAgdGhpcy0+aW5kaWNlc1swXSA9IGluZGV4MTsKICB0aGlzLT5pbmRpY2Vz
WzFdID0gaW5kZXgyOwogIHRoaXMtPmluZGljZXNbMl0gPSBpbmRleDM7CiAgdGhpcy0+aW5kaWNl
c1szXSA9IGluZGV4NDsKICB0aGlzLT5pbmRpY2VzWzRdID0gaW5kZXg1OwogIHRoaXMtPmluZGlj
ZXNbNV0gPSBpbmRleDY7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KVGFibGVC
YXNlPE4sVD46OlRhYmxlQmFzZSAoKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAg
dmFsICgwKSwKICAgICAgICAgICAgICAgIHZhbF9zaXplICgwKQp7fTsKCgoKdGVtcGxhdGUgPGlu
dCBOLCB0eXBlbmFtZSBUPgpUYWJsZUJhc2U8TixUPjo6VGFibGVCYXNlIChjb25zdCBUYWJsZUlu
ZGljZXM8Tj4gJnNpemVzKQogICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgdmFsICgw
KSwKICAgICAgICAgICAgICAgIHZhbF9zaXplICgwKQp7CiAgcmVpbml0IChzaXplcyk7Cn07CgoK
CnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KVGFibGVCYXNlPE4sVD46OlRhYmxlQmFzZSAo
Y29uc3QgVGFibGVCYXNlPE4sVD4gJnNyYykKICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAg
ICAgIFN1YnNjcmlwdG9yICgpLAogICAgICAgICAgICAgICAgdmFsICgwKSwKICAgICAgICAgICAg
ICAgIHZhbF9zaXplICgwKQp7CiAgcmVpbml0IChzcmMudGFibGVfc2l6ZSk7CiAgZmlsbCAoc3Jj
LmRhdGEoKSk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KdGVtcGxhdGUgPHR5
cGVuYW1lIFQyPgpUYWJsZUJhc2U8TixUPjo6VGFibGVCYXNlIChjb25zdCBUYWJsZUJhc2U8TixU
Mj4gJnNyYykKICAgICAgICAgICAgICAgIDoKICAgICAgICAgICAgICAgIHZhbCAoMCksCiAgICAg
ICAgICAgICAgICB2YWxfc2l6ZSAoMCkKewogIHJlaW5pdCAoc3JjLnRhYmxlX3NpemUpOwogIGZp
bGwgKHNyYy5kYXRhKCkpOwp9OwoKCgpuYW1lc3BhY2UgVGFibGVCYXNlQWNjZXNzb3JzCnsKICB0
ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQywgdW5zaWduZWQgaW50IFA+CiAgaW5s
aW5lCiAgQWNjZXNzb3I8TixULEMsUD46OkFjY2Vzc29yIChjb25zdCBUYWJsZVR5cGUgJnRhYmxl
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9pbnRlciBkYXRhKQogICAg
ICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICAgIHRhYmxlICh0YWJsZSksCiAgICAgICAg
ICAgICAgICAgIGRhdGEgKGRhdGEpCiAge307CgoKCiAgdGVtcGxhdGUgPGludCBOLCB0eXBlbmFt
ZSBULCBib29sIEMsIHVuc2lnbmVkIGludCBQPgogIGlubGluZQogIEFjY2Vzc29yPE4sVCxDLFA+
OjpBY2Nlc3NvciAoY29uc3QgQWNjZXNzb3IgJikKICAgICAgICAgICAgICAgICAgOgogICAgICAg
ICAgICAgICAgICB0YWJsZSAoKnN0YXRpY19jYXN0PGNvbnN0IFRhYmxlVHlwZSo+KDApKSwKICAg
ICAgICAgICAgICAgICAgZGF0YSAoMCkKICB7CgoKCiAgICB7IH07CiAgfTsKCgoKICB0ZW1wbGF0
ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQywgdW5zaWduZWQgaW50IFA+CiAgaW5saW5lCiAg
QWNjZXNzb3I8TixULEMsUD46OkFjY2Vzc29yICgpCiAgICAgICAgICAgICAgICAgIDoKICAgICAg
ICAgICAgICAgICAgdGFibGUgKCpzdGF0aWNfY2FzdDxjb25zdCBUYWJsZVR5cGUqPigwKSksCiAg
ICAgICAgICAgICAgICAgIGRhdGEgKDApCiAgewoKCgogICAgeyB9OwogIH07CgoKCiAgdGVtcGxh
dGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEMsIHVuc2lnbmVkIGludCBQPgogIGlubGluZQog
IEFjY2Vzc29yPE4sVCxDLFAtMT4KICBBY2Nlc3NvcjxOLFQsQyxQPjo6b3BlcmF0b3IgW10gKGNv
bnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAogIHsKICAgIHsgfTsKCgoKCgogICAgaWYgKGk9PTAp
CiAgICAgIHJldHVybiBBY2Nlc3NvcjxOLFQsQyxQLTE+ICh0YWJsZSwgZGF0YSk7CiAgICBlbHNl
CiAgICAgIHsKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgc3Vib2JqZWN0X3NpemUgPSB0YWJsZS5z
aXplKClbTi0xXTsKICAgICAgICBmb3IgKGludCBwPVAtMTsgcD4xOyAtLXApCiAgICAgICAgICBz
dWJvYmplY3Rfc2l6ZSAqPSB0YWJsZS5zaXplKClbTi1wXTsKICAgICAgICBjb25zdCBwb2ludGVy
IG5ld19kYXRhID0gZGF0YSArIGkqc3Vib2JqZWN0X3NpemU7CiAgICAgICAgcmV0dXJuIEFjY2Vz
c29yPE4sVCxDLFAtMT4gKHRhYmxlLCBuZXdfZGF0YSk7CiAgICAgIH07CiAgfTsKCgoKICB0ZW1w
bGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICBBY2Nlc3NvcjxOLFQs
QywxPjo6QWNjZXNzb3IgKGNvbnN0IFRhYmxlVHlwZSAmdGFibGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBwb2ludGVyIGRhdGEpCiAgICAgICAgICAgICAgICAgIDoKICAg
ICAgICAgICAgICAgICAgdGFibGUgKHRhYmxlKSwKICAgICAgICAgICAgICAgICAgZGF0YSAoZGF0
YSkKICB7fTsKCgoKICB0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxp
bmUKICBBY2Nlc3NvcjxOLFQsQywxPjo6QWNjZXNzb3IgKCkKICAgICAgICAgICAgICAgICAgOgog
ICAgICAgICAgICAgICAgICB0YWJsZSAoKnN0YXRpY19jYXN0PGNvbnN0IFRhYmxlVHlwZSo+KDAp
KSwKICAgICAgICAgICAgICAgICAgZGF0YSAoMCkKICB7CgoKCiAgICB7IH07CiAgfTsKCgoKICB0
ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICBBY2Nlc3NvcjxO
LFQsQywxPjo6QWNjZXNzb3IgKGNvbnN0IEFjY2Vzc29yICYpCiAgICAgICAgICAgICAgICAgIDoK
ICAgICAgICAgICAgICAgICAgdGFibGUgKCpzdGF0aWNfY2FzdDxjb25zdCBUYWJsZVR5cGUqPigw
KSksCiAgICAgICAgICAgICAgICAgIGRhdGEgKDApCiAgewoKCgogICAgeyB9OwogIH07CgoKCiAg
dGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEM+CiAgaW5saW5lCiAgdHlwZW5hbWUg
QWNjZXNzb3I8TixULEMsMT46OnJlZmVyZW5jZQogIEFjY2Vzc29yPE4sVCxDLDE+OjpvcGVyYXRv
ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0CiAgewogICAgeyB9OwoKICAgIHJldHVy
biBkYXRhW2ldOwogIH07CgoKCiAgdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBULCBib29sIEM+
CiAgaW5saW5lCiAgdW5zaWduZWQgaW50CiAgQWNjZXNzb3I8TixULEMsMT46OnNpemUgKCkgY29u
c3QKICB7CiAgICByZXR1cm4gdGFibGUuc2l6ZSgpW04tMV07CiAgfTsKCgoKICB0ZW1wbGF0ZSA8
aW50IE4sIHR5cGVuYW1lIFQsIGJvb2wgQz4KICBpbmxpbmUKICB0eXBlbmFtZSBBY2Nlc3NvcjxO
LFQsQywxPjo6aXRlcmF0b3IKICBBY2Nlc3NvcjxOLFQsQywxPjo6YmVnaW4gKCkgY29uc3QKICB7
CiAgICByZXR1cm4gZGF0YTsKICB9OwoKCgogIHRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVCwg
Ym9vbCBDPgogIGlubGluZQogIHR5cGVuYW1lIEFjY2Vzc29yPE4sVCxDLDE+OjppdGVyYXRvcgog
IEFjY2Vzc29yPE4sVCxDLDE+OjplbmQgKCkgY29uc3QKICB7CiAgICByZXR1cm4gZGF0YSt0YWJs
ZS5zaXplKClbTi0xXTsKICB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+Cmlu
bGluZQpUYWJsZUJhc2U8TixUPjo6flRhYmxlQmFzZSAoKQp7CiAgaWYgKHZhbCAhPSAwKQogICAg
ZGVsZXRlW10gdmFsOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+ClRhYmxlQmFz
ZTxOLFQ+JgpUYWJsZUJhc2U8TixUPjo6b3BlcmF0b3IgPSAoY29uc3QgVGFibGVCYXNlPE4sVD4m
IG0pCnsKICByZWluaXQgKG0uc2l6ZSgpKTsKICBpZiAoIWVtcHR5KCkpCiAgICBzdGQ6OmNvcHkg
KCZtLnZhbFswXSwgJm0udmFsW25fZWxlbWVudHMoKV0sICZ2YWxbMF0pOwoKICByZXR1cm4gKnRo
aXM7Cn0KCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgp0ZW1wbGF0ZSA8dHlwZW5hbWUg
VDI+ClRhYmxlQmFzZTxOLFQ+JgpUYWJsZUJhc2U8TixUPjo6b3BlcmF0b3IgPSAoY29uc3QgVGFi
bGVCYXNlPE4sVDI+JiBtKQp7CiAgcmVpbml0IChtLnNpemUoKSk7CiAgaWYgKCFlbXB0eSgpKQog
ICAgc3RkOjpjb3B5ICgmbS52YWxbMF0sICZtLnZhbFtuX2VsZW1lbnRzKCldLCAmdmFsWzBdKTsK
CiAgcmV0dXJuICp0aGlzOwp9CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5l
CnZvaWQKVGFibGVCYXNlPE4sVD46OmNsZWFyICgpCnsKICB7IH07CgogIHN0ZDo6ZmlsbF9uICh2
YWwsIG5fZWxlbWVudHMoKSwgVCgpKTsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBU
Pgp2b2lkClRhYmxlQmFzZTxOLFQ+OjpyZWluaXQgKGNvbnN0IFRhYmxlSW5kaWNlczxOPiAmbmV3
X3NpemVzKQp7CiAgdGFibGVfc2l6ZSA9IG5ld19zaXplczsKCiAgY29uc3QgdW5zaWduZWQgaW50
IG5ld19zaXplID0gbl9lbGVtZW50cygpOwoKCgogIGlmIChuZXdfc2l6ZSA9PSAwKQogICAgewog
ICAgICBpZiAodmFsICE9IDApCiAgICAgICAgZGVsZXRlW10gdmFsOwoKICAgICAgdmFsID0gMDsK
ICAgICAgdmFsX3NpemUgPSAwOwoKCgoKCiAgICAgIHRhYmxlX3NpemUgPSBUYWJsZUluZGljZXM8
Tj4oKTsKCiAgICAgIHJldHVybjsKICAgIH07CgoKCgogIGlmICh2YWxfc2l6ZTxuZXdfc2l6ZSkK
ICAgIHsKICAgICAgaWYgKHZhbCAhPSAwKQogICAgICAgIGRlbGV0ZVtdIHZhbDsKCiAgICAgIHZh
bF9zaXplID0gbmV3X3NpemU7CiAgICAgIHZhbCA9IG5ldyBUW3ZhbF9zaXplXTsKICAgIH07CgoK
CiAgY2xlYXIgKCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KY29uc3QgVGFi
bGVJbmRpY2VzPE4+ICYKVGFibGVCYXNlPE4sVD46OnNpemUgKCkgY29uc3QKewogIHJldHVybiB0
YWJsZV9zaXplOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+CnVuc2lnbmVkIGlu
dApUYWJsZUJhc2U8TixUPjo6bl9lbGVtZW50cyAoKSBjb25zdAp7CiAgdW5zaWduZWQgcyA9IDE7
CiAgZm9yICh1bnNpZ25lZCBpbnQgbj0wOyBuPE47ICsrbikKICAgIHMgKj0gdGFibGVfc2l6ZVtu
XTsKICByZXR1cm4gczsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgpib29sClRh
YmxlQmFzZTxOLFQ+OjplbXB0eSAoKSBjb25zdAp7CiAgcmV0dXJuIChuX2VsZW1lbnRzKCkgPT0g
MCk7Cn07CgoKCnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KdGVtcGxhdGUgPHR5cGVuYW1l
IFQyPgppbmxpbmUKdm9pZApUYWJsZUJhc2U8TixUPjo6ZmlsbCAoY29uc3QgVDIqIGVudHJpZXMp
CnsKICBpZiAodmFsX3NpemUgIT0gMCkKICAgIHN0ZDo6Y29weSAoZW50cmllcywgZW50cmllcytu
X2VsZW1lbnRzKCksIHZhbCk7Cn0KCgoKdGVtcGxhdGUgPGludCBOLCB0eXBlbmFtZSBUPgp1bnNp
Z25lZCBpbnQKVGFibGVCYXNlPE4sVD46Om1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdAp7CiAg
cmV0dXJuIHNpemVvZigqdGhpcykgKyB2YWxfc2l6ZSpzaXplb2YoVCk7Cn0KCgp0ZW1wbGF0ZSA8
aW50IE4sIHR5cGVuYW1lIFQ+CmlubGluZQp1bnNpZ25lZCBpbnQKVGFibGVCYXNlPE4sVD46OnBv
c2l0aW9uIChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKCgoKCgogIHN3
aXRjaCAoTikKICAgIHsKICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gaW5kaWNlc1sw
XTsKICAgICAgY2FzZSAyOgogICAgICAgICAgICByZXR1cm4gaW5kaWNlc1swXSp0YWJsZV9zaXpl
WzFdICsgaW5kaWNlc1sxXTsKICAgICAgY2FzZSAzOgogICAgICAgICAgICByZXR1cm4gKChpbmRp
Y2VzWzBdKnRhYmxlX3NpemVbMV0gKyBpbmRpY2VzWzFdKSp0YWJsZV9zaXplWzJdCiAgICAgICAg
ICAgICAgICAgICAgKyBpbmRpY2VzWzJdKTsKICAgICAgZGVmYXVsdDoKICAgICAgewogICAgICAg
IHVuc2lnbmVkIGludCBzID0gaW5kaWNlc1swXTsKICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBu
PTE7IG48TjsgKytuKQogICAgICAgICAgcyA9IHMqdGFibGVfc2l6ZVtuXSArIGluZGljZXNbbl07
CiAgICAgICAgcmV0dXJuIHM7CiAgICAgIH07CiAgICB9Owp9OwoKCgoKdGVtcGxhdGUgPGludCBO
LCB0eXBlbmFtZSBUPgppbmxpbmUgY29uc3QgVCAmClRhYmxlQmFzZTxOLFQ+OjpvcGVyYXRvcigp
IChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKICBmb3IgKHVuc2lnbmVk
IGludCBuPTA7IG48TjsgKytuKQogICAgeyB9OwoKICByZXR1cm4gZWwoaW5kaWNlcyk7Cn07CgoK
CnRlbXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5lIFQgJgpUYWJsZUJhc2U8TixUPjo6
b3BlcmF0b3IoKSAoY29uc3QgVGFibGVJbmRpY2VzPE4+ICZpbmRpY2VzKQp7CiAgZm9yICh1bnNp
Z25lZCBpbnQgbj0wOyBuPE47ICsrbikKICAgIHsgfTsKCiAgcmV0dXJuIGVsKGluZGljZXMpOwp9
OwoKCgp0ZW1wbGF0ZSA8aW50IE4sIHR5cGVuYW1lIFQ+CmlubGluZSBjb25zdCBUICYKVGFibGVC
YXNlPE4sVD46OmVsIChjb25zdCBUYWJsZUluZGljZXM8Tj4gJmluZGljZXMpIGNvbnN0CnsKICBy
ZXR1cm4gdmFsW3Bvc2l0aW9uKGluZGljZXMpXTsKfTsKCgoKdGVtcGxhdGUgPGludCBOLCB0eXBl
bmFtZSBUPgppbmxpbmUgVCAmClRhYmxlQmFzZTxOLFQ+OjplbCAoY29uc3QgVGFibGVJbmRpY2Vz
PE4+ICZpbmRpY2VzKQp7CiAgcmV0dXJuIHZhbFtwb3NpdGlvbihpbmRpY2VzKV07Cn07CgoKCnRl
bXBsYXRlIDxpbnQgTiwgdHlwZW5hbWUgVD4KaW5saW5lCmNvbnN0IFQgKgpUYWJsZUJhc2U8TixU
Pjo6ZGF0YSAoKSBjb25zdAp7CiAgcmV0dXJuIHZhbDsKfQoKCgoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+ClRhYmxlPDEsVD46OlRhYmxlICgpCnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFi
bGU8MSxUPjo6VGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplKQogICAgICAgICAgICAgICAg
OgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDEsVD4gKFRhYmxlSW5kaWNlczwxPiAoc2l6ZSkp
Cnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KY29uc3QgVCAmClRhYmxlPDEsVD46Om9wZXJh
dG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsgfTsKCiAgcmV0dXJuIHRo
aXMtPnZhbFtpXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClQgJgpUYWJsZTwxLFQ+Ojpv
cGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIHJldHVybiB0aGlz
LT52YWxbaV07Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRh
YmxlPDEsVD46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsg
fTsKCiAgcmV0dXJuIHRoaXMtPnZhbFtpXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cmlu
bGluZQpUICYKVGFibGU8MSxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpKQp7
CiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsW2ldOwp9OwoKCgoKdGVtcGxhdGUgPHR5cGVuYW1l
IFQ+ClRhYmxlPDIsVD46OlRhYmxlICgpCnt9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFi
bGU8MixUPjo6VGFibGUgKGNvbnN0IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplMikKICAgICAgICAgICAgICAgIDoKICAgICAgICAg
ICAgICAgIFRhYmxlQmFzZTwyLFQ+IChUYWJsZUluZGljZXM8Mj4gKHNpemUxLCBzaXplMikpCnt9
OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kdm9pZApUYWJsZTwyLFQ+OjpyZWluaXQgKGNvbnN0
IHVuc2lnbmVkIGludCBzaXplMSwKICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgc2l6ZTIpCnsKICB0aGlzLT5UYWJsZUJhc2U8MixUPjo6cmVpbml0IChUYWJsZUluZGljZXM8
Mj4gKHNpemUxLCBzaXplMikpOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClRh
YmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8MixULHRydWUsMT4KVGFibGU8MixUPjo6b3BlcmF0
b3IgW10gKGNvbnN0IHVuc2lnbmVkIGludCBpKSBjb25zdAp7CiAgeyB9OwoKICByZXR1cm4gVGFi
bGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3NvcjwyLFQsdHJ1ZSwxPigqdGhpcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLT52YWwraSpuX2NvbHMo
KSk7Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3Jz
OjpBY2Nlc3NvcjwyLFQsZmFsc2UsMT4KVGFibGU8MixUPjo6b3BlcmF0b3IgW10gKGNvbnN0IHVu
c2lnbmVkIGludCBpKQp7CiAgeyB9OwoKICByZXR1cm4gVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nl
c3NvcjwyLFQsZmFsc2UsMT4oKnRoaXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoaXMtPnZhbCtpKm5fY29scygpKTsKfTsKCgoKdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CmlubGluZQpjb25zdCBUICYKVGFibGU8MixUPjo6b3BlcmF0b3IgKCkgKGNv
bnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IGopIGNvbnN0CnsKICB7IH07CgogIHsgfTsKCiAgcmV0dXJuIHRoaXMtPnZhbFtpKnRo
aXMtPnRhYmxlX3NpemVbMV0ral07Cn07CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUK
VCAmClRhYmxlPDIsVD46Om9wZXJhdG9yICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBqKQp7CiAgeyB9OwoKICB7IH07
CgogIHJldHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lCmNvbnN0IFQgJgpUYWJsZTwyLFQ+OjplbCAoY29uc3Qg
dW5zaWduZWQgaW50IGksCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaikgY29u
c3QKewogIHJldHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClQgJgpUYWJsZTwyLFQ+OjplbCAoY29uc3QgdW5z
aWduZWQgaW50IGksCiAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaikKewogIHJl
dHVybiB0aGlzLT52YWxbaSp0aGlzLT50YWJsZV9zaXplWzFdK2pdOwp9OwoKCgp0ZW1wbGF0ZSA8
dHlwZW5hbWUgVD4KaW5saW5lCnVuc2lnbmVkIGludApUYWJsZTwyLFQ+OjpuX3Jvd3MgKCkgY29u
c3QKewogIHJldHVybiB0aGlzLT50YWJsZV9zaXplWzBdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KaW5saW5lCnVuc2lnbmVkIGludApUYWJsZTwyLFQ+OjpuX2NvbHMgKCkgY29uc3QKewog
IHJldHVybiB0aGlzLT50YWJsZV9zaXplWzFdOwp9OwoKCgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
PgpUYWJsZTwzLFQ+OjpUYWJsZSAoKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ClRhYmxl
PDMsVD46OlRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAgICAgICAg
ICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgc2l6ZTMpCiAgICAgICAgICAgICAgICA6CiAgICAgICAgICAgICAgICBUYWJsZUJh
c2U8MyxUPiAoVGFibGVJbmRpY2VzPDM+IChzaXplMSwgc2l6ZTIsIHNpemUzKSkKe307CgoKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjwz
LFQsdHJ1ZSwyPgpUYWJsZTwzLFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkp
IGNvbnN0CnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRo
aXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPnRhYmxlX3NpemVbMl07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vz
c29yPDMsVCx0cnVlLDI+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFsK2kq
c3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUYWJs
ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgpUYWJsZTwzLFQ+OjpvcGVyYXRv
ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGlu
dCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl07CiAgcmV0dXJuIChUYWJs
ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDMsVCxmYWxzZSwyPgogICAgICAgICAgKCp0aGlzLAog
ICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDMsVD46Om9wZXJhdG9yICgpIChjb25z
dCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVk
IGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGspIGNv
bnN0CnsKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWyhpKnRoaXMt
PnRhYmxlX3NpemVbMV0raikKICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0g
KyBrXTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUICYKVGFibGU8MyxUPjo6
b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1
bnNpZ25lZCBpbnQgaykKewogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52
YWxbKGkqdGhpcy0+dGFibGVfc2l6ZVsxXStqKQogICAgICAgICAgICAgICAgICAqdGhpcy0+dGFi
bGVfc2l6ZVsyXSArIGtdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KVGFibGU8NCxUPjo6
VGFibGUgKCkKe307CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpUYWJsZTw0LFQ+OjpUYWJsZSAo
Y29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgaW50IHNpemUyLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUz
LAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU0KQogICAgICAgICAg
ICAgICAgOgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDQsVD4gKFRhYmxlSW5kaWNlczw0PiAo
c2l6ZTEsIHNpemUyLCBzaXplMywgc2l6ZTQpKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
CmlubGluZQpUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDQsVCx0cnVlLDM+ClRhYmxlPDQs
VD46Om9wZXJhdG9yIFtdIChjb25zdCB1bnNpZ25lZCBpbnQgaSkgY29uc3QKewogIHsgfTsKCiAg
Y29uc3QgdW5zaWduZWQgaW50IHN1Ym9iamVjdF9zaXplID0gdGhpcy0+dGFibGVfc2l6ZVsxXSAq
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dGFibGVfc2l6ZVsy
XSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+dGFibGVfc2l6
ZVszXTsKICByZXR1cm4gKFRhYmxlQmFzZUFjY2Vzc29yczo6QWNjZXNzb3I8NCxULHRydWUsMz4K
ICAgICAgICAgICgqdGhpcywKICAgICAgICAgICB0aGlzLT52YWwraSpzdWJvYmplY3Rfc2l6ZSkp
Owp9OwoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KaW5saW5lClRhYmxlQmFzZUFjY2Vzc29yczo6
QWNjZXNzb3I8NCxULGZhbHNlLDM+ClRhYmxlPDQsVD46Om9wZXJhdG9yIFtdIChjb25zdCB1bnNp
Z25lZCBpbnQgaSkKewogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IHN1Ym9iamVjdF9zaXpl
ID0gdGhpcy0+dGFibGVfc2l6ZVsxXSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdGhpcy0+dGFibGVfc2l6ZVsyXSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdGhpcy0+dGFibGVfc2l6ZVszXTsKICByZXR1cm4gKFRhYmxlQmFzZUFjY2Vzc29y
czo6QWNjZXNzb3I8NCxULGZhbHNlLDM+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhp
cy0+dmFsK2kqc3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Cmlu
bGluZQpjb25zdCBUICYKVGFibGU8NCxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2lnbmVkIGlu
dCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGosCiAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaywKICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsKSBjb25zdAp7CiAgeyB9OwoKICB7IH07Cgog
IHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWygoaSp0aGlzLT50YWJsZV9zaXplWzFd
K2opCiAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0gKyBrKQogICAgICAg
ICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGxdOwp9OwoKCgp0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KaW5saW5lClQgJgpUYWJsZTw0LFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgdW5zaWdu
ZWQgaW50IGksCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaiwK
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBrLAogICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGwpCnsKICB7IH07CgogIHsgfTsKCiAg
eyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKChpKnRoaXMtPnRhYmxlX3NpemVbMV0r
aikKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVsyXSArIGspCiAgICAgICAg
ICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzNdICsgbF07Cn07CgoKCgp0ZW1wbGF0ZSA8dHlw
ZW5hbWUgVD4KVGFibGU8NSxUPjo6VGFibGUgKCkKe307CgoKCnRlbXBsYXRlIDx0eXBlbmFtZSBU
PgpUYWJsZTw1LFQ+OjpUYWJsZSAoY29uc3QgdW5zaWduZWQgaW50IHNpemUxLAogICAgICAgICAg
ICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemUyLAogICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IHNpemUzLAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IHNpemU0LAogICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHNpemU1KQog
ICAgICAgICAgICAgICAgOgogICAgICAgICAgICAgICAgVGFibGVCYXNlPDUsVD4gKFRhYmxlSW5k
aWNlczw1PiAoc2l6ZTEsIHNpemUyLCBzaXplMywgc2l6ZTQsIHNpemU1KSkKe307CgoKCnRlbXBs
YXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw1LFQs
dHJ1ZSw0PgpUYWJsZTw1LFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNv
bnN0CnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMt
PnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHRoaXMtPnRhYmxlX3NpemVbNF07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFj
Y2Vzc29yPDUsVCx0cnVlLDQ+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFs
K2kqc3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpU
YWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgpUYWJsZTw1LFQ+OjpvcGVy
YXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVk
IGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNF07CiAgcmV0
dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDUsVCxmYWxzZSw0PgogICAgICAgICAg
KCp0aGlzLAogICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDUsVD46Om9wZXJhdG9y
ICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IGssCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtKSBjb25zdAp7CiAgeyB9
OwoKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgo
aSp0aGlzLT50YWJsZV9zaXplWzFdK2opCiAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJs
ZV9zaXplWzJdICsgaykKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSAr
IGwpCiAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbV07Cn07CgoKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKVCAmClRhYmxlPDUsVD46Om9wZXJhdG9yICgpIChj
b25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGss
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtKQp7CiAgeyB9OwoKICB7IH07Cgog
IHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgoaSp0aGlzLT50YWJs
ZV9zaXplWzFdK2opCiAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzJdICsg
aykKICAgICAgICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGwpCiAgICAgICAg
ICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbV07Cn07CgoKCnRlbXBsYXRlIDx0eXBl
bmFtZSBUPgpUYWJsZTw2LFQ+OjpUYWJsZSAoKQp7fTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+
ClRhYmxlPDYsVD46OlRhYmxlIChjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTEsCiAgICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTIsCiAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgc2l6ZTMsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBp
bnQgc2l6ZTQsCiAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTUsCiAg
ICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZTYpCiAgICAgICAgICAgICAg
ICA6CiAgICAgICAgICAgICAgICBUYWJsZUJhc2U8NixUPiAoVGFibGVJbmRpY2VzPDY+IChzaXpl
MSwgc2l6ZTIsIHNpemUzLCBzaXplNCwgc2l6ZTUsIHNpemU2KSkKe307CgoKCnRlbXBsYXRlIDx0
eXBlbmFtZSBUPgppbmxpbmUKVGFibGVCYXNlQWNjZXNzb3JzOjpBY2Nlc3Nvcjw2LFQsdHJ1ZSw1
PgpUYWJsZTw2LFQ+OjpvcGVyYXRvciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpIGNvbnN0CnsK
ICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxl
X3NpemVbMV0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRh
YmxlX3NpemVbMl0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMt
PnRhYmxlX3NpemVbM10gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
aXMtPnRhYmxlX3NpemVbNF0gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoaXMtPnRhYmxlX3NpemVbNV07CiAgcmV0dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vz
c29yPDYsVCx0cnVlLDU+CiAgICAgICAgICAoKnRoaXMsCiAgICAgICAgICAgdGhpcy0+dmFsK2kq
c3Vib2JqZWN0X3NpemUpKTsKfTsKCgoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CmlubGluZQpUYWJs
ZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgpUYWJsZTw2LFQ+OjpvcGVyYXRv
ciBbXSAoY29uc3QgdW5zaWduZWQgaW50IGkpCnsKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGlu
dCBzdWJvYmplY3Rfc2l6ZSA9IHRoaXMtPnRhYmxlX3NpemVbMV0gKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbMl0gKgogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbM10gKgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNF0gKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMtPnRhYmxlX3NpemVbNV07CiAgcmV0
dXJuIChUYWJsZUJhc2VBY2Nlc3NvcnM6OkFjY2Vzc29yPDYsVCxmYWxzZSw1PgogICAgICAgICAg
KCp0aGlzLAogICAgICAgICAgIHRoaXMtPnZhbCtpKnN1Ym9iamVjdF9zaXplKSk7Cn07CgoKCnRl
bXBsYXRlIDx0eXBlbmFtZSBUPgppbmxpbmUKY29uc3QgVCAmClRhYmxlPDYsVD46Om9wZXJhdG9y
ICgpIChjb25zdCB1bnNpZ25lZCBpbnQgaSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IHVuc2lnbmVkIGludCBqLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQg
aW50IGssCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbCwKICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBtLAogICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG4pIGNvbnN0CnsKICB7IH07CgogIHsgfTsK
CiAgeyB9OwoKICB7IH07CgogIHsgfTsKCiAgeyB9OwoKICByZXR1cm4gdGhpcy0+dmFsWygoKChp
KnRoaXMtPnRhYmxlX3NpemVbMV0raikKICAgICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJs
ZV9zaXplWzJdICsgaykKICAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbM10g
KyBsKQogICAgICAgICAgICAgICAgICAgICp0aGlzLT50YWJsZV9zaXplWzRdICsgbSkKICAgICAg
ICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbNV0gKyBuXTsKfTsKCgoKdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CmlubGluZQpUICYKVGFibGU8NixUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IHVuc2ln
bmVkIGludCBpLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IGos
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgaywKICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBsLAogICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgbikKewogIHsgfTsKCiAgeyB9OwoKICB7IH07CgogIHsgfTsKCiAgeyB9
OwoKICB7IH07CgogIHJldHVybiB0aGlzLT52YWxbKCgoKGkqdGhpcy0+dGFibGVfc2l6ZVsxXStq
KQogICAgICAgICAgICAgICAgICAgICAgKnRoaXMtPnRhYmxlX3NpemVbMl0gKyBrKQogICAgICAg
ICAgICAgICAgICAgICAqdGhpcy0+dGFibGVfc2l6ZVszXSArIGwpCiAgICAgICAgICAgICAgICAg
ICAgKnRoaXMtPnRhYmxlX3NpemVbNF0gKyBtKQogICAgICAgICAgICAgICAgICAqdGhpcy0+dGFi
bGVfc2l6ZVs1XSArIG5dOwp9OwojIDIwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIgMgojIDEgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5m
by5oIiAxCiMgMzIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9p
bmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8aW50IGRpbT4Kc3RydWN0IEdl
b21ldHJ5SW5mbwp7fTsKIyA1NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9k
ZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCnRlbXBsYXRlIDw+CnN0cnVjdCBH
ZW9tZXRyeUluZm88MD4KewoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltID0g
MDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGNoaWxkcmVuX3Blcl9jZWxsID0g
MTsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGZhY2VzX3Blcl9jZWxsID0gMDsK
CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBzdWJmYWNlc19wZXJfZmFjZSA9IDA7
CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0aWNlc19wZXJfY2VsbCA9IDE7
CiMgOTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5JSS9pbmNsdWRl
L2dyaWQvZ2VvbWV0cnlfaW5mby5oIgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0
aWNlc19wZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsaW5l
c19wZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19w
ZXJfZmFjZSA9IDA7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBsaW5lc19wZXJf
Y2VsbCA9IDA7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2Nl
bGwgPSAwOwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGhleGVzX3Blcl9jZWxs
ID0gMDsKfTsKIyAxNDMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvZGVhbC5J
SS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8PgpzdHJ1Y3QgR2VvbWV0
cnlJbmZvPDE+CnsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGRpbSA9IDE7CgoK
CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjaGlsZHJlbl9wZXJfY2VsbCA9IDI7CgoK
CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBmYWNlc19wZXJfY2VsbCA9IDI7CgoKCgoK
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc3ViZmFjZXNfcGVyX2ZhY2UgPSAwOwoKCgoK
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2NlbGwgPSAyOwojIDE4
MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3Jp
ZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZlcnRpY2Vz
X3Blcl9mYWNlID0gMTsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxpbmVzX3Bl
cl9mYWNlID0gMDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHF1YWRzX3Blcl9m
YWNlID0gMDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGxpbmVzX3Blcl9jZWxs
ID0gMTsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19wZXJfY2VsbCA9
IDA7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGV4ZXNfcGVyX2NlbGwgPSAw
OwojIDIxOCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1
ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9w
cG9zaXRlX2ZhY2VbZmFjZXNfcGVyX2NlbGxdOwojIDI0MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGR4X3RvX2RlYWxbdmVydGljZXNfcGVyX2NlbGxdOwoj
IDI4MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUv
Z3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IGNoaWxkX2NlbGxf
b25fZmFjZSAoY29uc3QgdW5zaWduZWQgaW50IGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2UpOwojIDI5NCAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9n
ZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgUG9pbnQ8MT4gdW5pdF9jZWxsX3ZlcnRleCAoY29u
c3QgdW5zaWduZWQgaW50IHZlcnRleCk7CiMgMzIxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgdmVydGljZXNfYWRqYWNlbnRfdG9fbGluZSAoY29uc3QgdW5zaWduZWQg
aW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpOwp9OwojIDM0MiAiL2hvbWUvYmFuZ2VydGgv
cC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgi
CnRlbXBsYXRlIDw+CnN0cnVjdCBHZW9tZXRyeUluZm88Mj4KewoKCgoKICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbnQgZGltID0gMjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGNoaWxkcmVuX3Blcl9jZWxsID0gNDsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGZhY2VzX3Blcl9jZWxsID0gNDsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBz
dWJmYWNlc19wZXJfZmFjZSA9IDI7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCB2
ZXJ0aWNlc19wZXJfY2VsbCA9IDQ7CiMgMzgxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2ZhY2UgPSAyOwoKCgoKICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSAxOwoKCgoKICAgIHN0YXRpYyBjb25z
dCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2ZhY2UgPSAwOwoKCgoKICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBpbnQgbGluZXNfcGVyX2NlbGwgPSA0OwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgaW50IHF1YWRzX3Blcl9jZWxsID0gMTsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIGludCBoZXhlc19wZXJfY2VsbCA9IDA7CiMgNDE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgb3Bwb3NpdGVfZmFjZVtmYWNlc19wZXJfY2VsbF07CiMg
NDM4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9n
cmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZHhfdG9f
ZGVhbFt2ZXJ0aWNlc19wZXJfY2VsbF07CiMgNDgwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRp
YyB1bnNpZ25lZCBpbnQgY2hpbGRfY2VsbF9vbl9mYWNlIChjb25zdCB1bnNpZ25lZCBpbnQgZmFj
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgc3ViZmFjZSk7CiMgNDkzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBQb2lu
dDwyPiB1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQgaSk7CiMgNTIwICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21l
dHJ5X2luZm8uaCIKICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmVydGljZXNfYWRqYWNlbnRfdG9f
bGluZSAoY29uc3QgdW5zaWduZWQgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpOwp9Owoj
IDU0MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUv
Z3JpZC9nZW9tZXRyeV9pbmZvLmgiCnRlbXBsYXRlIDw+CnN0cnVjdCBHZW9tZXRyeUluZm88Mz4K
ewoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZGltID0gMzsKCgoKCiAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IGNoaWxkcmVuX3Blcl9jZWxsID0gODsKCgoKCiAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgaW50IGZhY2VzX3Blcl9jZWxsID0gNjsKCgoKCgogICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGludCBzdWJmYWNlc19wZXJfZmFjZSA9IDQ7CgoKCgogICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0aWNlc19wZXJfY2VsbCA9IDg7CiMgNTgwICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwuSUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5
X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgdmVydGljZXNfcGVyX2ZhY2Ug
PSA0OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSA0
OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcXVhZHNfcGVyX2ZhY2UgPSAxOwoK
CgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbGluZXNfcGVyX2NlbGwgPSAxMjsKCgoK
CgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBxdWFkc19wZXJfY2VsbCA9IDY7CgoKCgoK
ICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgaGV4ZXNfcGVyX2NlbGwgPSAxOwojIDYxNiAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9n
ZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG9wcG9zaXRlX2Zh
Y2VbZmFjZXNfcGVyX2NlbGxdOwojIDYzNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgaW50IGR4X3RvX2RlYWxbdmVydGljZXNfcGVyX2NlbGxdOwojIDY3OSAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9t
ZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IGNoaWxkX2NlbGxfb25fZmFjZSAo
Y29uc3QgdW5zaWduZWQgaW50IGZhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2UpOwojIDY5MCAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFsLklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9p
bmZvLmgiCiAgICBzdGF0aWMgUG9pbnQ8Mz4gdW5pdF9jZWxsX3ZlcnRleCAoY29uc3QgdW5zaWdu
ZWQgaW50IGkpOwojIDcxNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9kZWFs
LklJL2luY2x1ZGUvZ3JpZC9nZW9tZXRyeV9pbmZvLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50
IHZlcnRpY2VzX2FkamFjZW50X3RvX2xpbmUgKGNvbnN0IHVuc2lnbmVkIGludCBsaW5lLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp
Z25lZCBpbnQgdmVydGV4KTsKfTsKIyA3NDIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvZGVhbC5JSS9pbmNsdWRlL2dyaWQvZ2VvbWV0cnlfaW5mby5oIgp0ZW1wbGF0ZSA8Pgpz
dHJ1Y3QgR2VvbWV0cnlJbmZvPDQ+CnsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGRpbSA9IDQ7CgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBjaGlsZHJlbl9wZXJf
Y2VsbCA9IDE2OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgZmFjZXNfcGVyX2Nl
bGwgPSA4OwoKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHN1YmZhY2VzX3Blcl9m
YWNlID0gODsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IHZlcnRpY2VzX3Blcl9j
ZWxsID0gMTY7CiMgNzgxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2RlYWwu
SUkvaW5jbHVkZS9ncmlkL2dlb21ldHJ5X2luZm8uaCIKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgdmVydGljZXNfcGVyX2ZhY2UgPSA4OwoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBpbnQgbGluZXNfcGVyX2ZhY2UgPSAxMjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQg
aW50IHF1YWRzX3Blcl9mYWNlID0gNjsKCgoKCiAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50
IGxpbmVzX3Blcl9jZWxsID0gMzI7CgoKCgoKICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQg
cXVhZHNfcGVyX2NlbGwgPSAyNDsKCgoKCgogICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBo
ZXhlc19wZXJfY2VsbCA9IDg7Cn07CgoKCgppbmxpbmUKUG9pbnQ8MT4KR2VvbWV0cnlJbmZvPDE+
Ojp1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQgdmVydGV4KQp7CiAgeyB9OwoK
CiAgY29uc3QgUG9pbnQ8ZGltPiB2ZXJ0aWNlc1t2ZXJ0aWNlc19wZXJfY2VsbF0gPQogICAgeyBQ
b2ludDxkaW0+KDAuKSwgUG9pbnQ8ZGltPigxLikgfTsKICByZXR1cm4gdmVydGljZXNbdmVydGV4
XTsKfTsKCgoKaW5saW5lClBvaW50PDI+Ckdlb21ldHJ5SW5mbzwyPjo6dW5pdF9jZWxsX3ZlcnRl
eCAoY29uc3QgdW5zaWduZWQgaW50IHZlcnRleCkKewogIHsgfTsKCgogIGNvbnN0IFBvaW50PGRp
bT4gdmVydGljZXNbdmVydGljZXNfcGVyX2NlbGxdID0KICAgIHsgUG9pbnQ8ZGltPigwLiwgMC4p
LCBQb2ludDxkaW0+KDEuLCAwLiksCiAgICAgIFBvaW50PGRpbT4oMS4sMS4pLCBQb2ludDxkaW0+
KDAuLDEuKSB9OwogIHJldHVybiB2ZXJ0aWNlc1t2ZXJ0ZXhdOwp9OwoKCgppbmxpbmUKUG9pbnQ8
Mz4KR2VvbWV0cnlJbmZvPDM+Ojp1bml0X2NlbGxfdmVydGV4IChjb25zdCB1bnNpZ25lZCBpbnQg
dmVydGV4KQp7CiAgeyB9OwoKCiAgY29uc3QgUG9pbnQ8ZGltPiB2ZXJ0aWNlc1t2ZXJ0aWNlc19w
ZXJfY2VsbF0gPQogICAgeyBQb2ludDxkaW0+KDAuLCAwLiwgMC4pLCBQb2ludDxkaW0+KDEuLCAw
LiwgMC4pLAogICAgICBQb2ludDxkaW0+KDEuLCAwLiwgMS4pLCBQb2ludDxkaW0+KDAuLCAwLiwg
MS4pLAogICAgICBQb2ludDxkaW0+KDAuLCAxLiwgMC4pLCBQb2ludDxkaW0+KDEuLCAxLiwgMC4p
LAogICAgICBQb2ludDxkaW0+KDEuLCAxLiwgMS4pLCBQb2ludDxkaW0+KDAuLCAxLiwgMS4pIH07
CiAgcmV0dXJuIHZlcnRpY2VzW3ZlcnRleF07Cn07CgoKCmlubGluZQp1bnNpZ25lZCBpbnQKR2Vv
bWV0cnlJbmZvPDE+Ojp2ZXJ0aWNlc19hZGphY2VudF90b19saW5lIChjb25zdCB1bnNpZ25lZCBp
bnQgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgdmVydGV4KQp7CiAgeyB9OwoKICB7IH07CgoKICByZXR1cm4gdmVydGV4
Owp9OwoKCgppbmxpbmUKdW5zaWduZWQgaW50Ckdlb21ldHJ5SW5mbzwyPjo6dmVydGljZXNfYWRq
YWNlbnRfdG9fbGluZSAoY29uc3QgdW5zaWduZWQgaW50IGxpbmUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHZlcnRleCkKewog
IHsgfTsKCiAgeyB9OwoKCiAgY29uc3QgdW5zaWduZWQgaW50IHZlcnRleF9pbmRpY2VzW2xpbmVz
X3Blcl9jZWxsXVsyXSA9CiAgICB7IHswLCAxfSwgezEsIDJ9LCB7MywgMn0sIHswLCAzfSB9OwoK
ICByZXR1cm4gdmVydGV4X2luZGljZXNbbGluZV1bdmVydGV4XTsKfTsKCgoKaW5saW5lCnVuc2ln
bmVkIGludApHZW9tZXRyeUluZm88Mz46OnZlcnRpY2VzX2FkamFjZW50X3RvX2xpbmUgKGNvbnN0
IHVuc2lnbmVkIGludCBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXgpCnsKICB7IH07CgogIHsgfTsKCgogIGNv
bnN0IHVuc2lnbmVkIGludCB2ZXJ0ZXhfaW5kaWNlc1tsaW5lc19wZXJfY2VsbF1bMl0gPQogICAg
eyB7MCwgMX0sIHsxLCAyfSwgezMsIDJ9LCB7MCwgM30sCiAgICAgIHs0LCA1fSwgezUsIDZ9LCB7
NywgNn0sIHs0LCA3fSwKICAgICAgezAsIDR9LCB7MSwgNX0sIHsyLCA2fSwgezMsIDd9IH07Cgog
IHJldHVybiB2ZXJ0ZXhfaW5kaWNlc1tsaW5lXVt2ZXJ0ZXhdOwp9OwojIDIxICIvaG9tZS9iYW5n
ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2Uu
aCIgMgojIDQxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKY2xhc3MgUGFyYW1ldGVySGFuZGxlcjsKIyAzNDIgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIgpjbGFzcyBEYXRhT3V0QmFzZQp7CiAgcHVibGljOgojIDM3MSAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNl
LmgiCiAgICB0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPWRpbT4KICAgIHN0cnVjdCBQ
YXRjaAogICAgewojIDM4NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgUG9pbnQ8c3BhY2VkaW0+IHZl
cnRpY2VzW0dlb21ldHJ5SW5mbzxkaW0+Ojp2ZXJ0aWNlc19wZXJfY2VsbF07CiMgMzk4ICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0
X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbmVpZ2hib3JzW0dlb21ldHJ5SW5mbzxkaW0+
OjpmYWNlc19wZXJfY2VsbF07CiMgNDA3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBp
bnQgcGF0Y2hfaW5kZXg7CiMgNDE3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQg
bl9zdWJkaXZpc2lvbnM7CiMgNDkwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBUYWJsZTwyLGZsb2F0
PiBkYXRhOwoKCgoKCiAgICAgICAgUGF0Y2ggKCk7CiMgNTE0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAg
ICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwoKCgoKICAgICAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG5vX25laWdoYm9yID0gc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQgaW50PigtMSk7CgoKCgogICAgICAgIGNsYXNzIEV4Y0ludmFsaWRDb21iaW5hdGlvbk9mRGlt
ZW5zaW9ucyA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNJbnZhbGlkQ29tYmlu
YXRpb25PZkRpbWVuc2lvbnMgKGNvbnN0IGludCBhMSwgY29uc3QgaW50IGEyKSA6IGFyZzEgKGEx
KSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0ludmFsaWRDb21iaW5hdGlvbk9mRGltZW5zaW9u
cyAoKSB0aHJvdyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZv
dXQpIGNvbnN0IHsgb3V0IDw8ICJJdCBpcyBub3QgcG9zc2libGUgdG8gaGF2ZSBhIHN0cnVjdHVy
YWwgZGltZW5zaW9uIG9mICIgPDwgYXJnMSA8PCAiIHRvIGJlIGxhcmdlciB0aGFuIHRoZSBzcGFj
ZSBkaW1lbnNpb24gb2YgdGhlIHN1cnJvdW5kaW5nIiA8PCAiIHNwYWNlICIgPDwgYXJnMiA8PCBz
dGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyBjb25zdCBpbnQgYXJnMjsgfTsK
CgoKCiAgICB9OwoKCgoKCgoKICAgIHN0cnVjdCBEWEZsYWdzCiAgICB7CgoKCgoKCiAgICAgICAg
Ym9vbCB3cml0ZV9tdWx0aWdyaWQ7CgoKCgogICAgICAgIGJvb2wgd3JpdGVfbmVpZ2hib3JzOwoK
CgoKICAgICAgICBEWEZsYWdzIChjb25zdCBib29sIHdyaXRlX211bHRpZ3JpZCA9IGZhbHNlLAog
ICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgd3JpdGVfbmVpZ2hib3JzID0gZmFsc2UpOwoKICAg
ICAgcHVibGljOgoKCgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQ
YXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDU3NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdm9pZCBw
YXJzZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwoKCgoKCgoKICAgICAgICB1
bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgogICAg
c3RydWN0IFVjZEZsYWdzCiAgICB7CiMgNjA0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBib29sIHdy
aXRlX3ByZWFtYmxlOwoKCgoKICAgICAgICBVY2RGbGFncyAoY29uc3QgYm9vbCB3cml0ZV9wcmVh
bWJsZSA9IHRydWUpOwoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlY2xhcmVfcGFyYW1ldGVy
cyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA2MjcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHZv
aWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA2NDUgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRf
YmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7
CiAgICB9OwoKCgoKCgogICAgc3RydWN0IEdudXBsb3RGbGFncwogICAgewogICAgICBwcml2YXRl
OgojIDY2NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgaW50IGR1bW15OwoKICAgICAgcHVibGljOgoK
CgoKCiAgICAgICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5k
bGVyICZwcm0pOwojIDY4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdm9pZCBwYXJzZV9wYXJhbWV0
ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDcwMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAg
dW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKICAgIH07CiMgNzExICIv
aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFf
b3V0X2Jhc2UuaCIKICAgIHN0cnVjdCBQb3ZyYXlGbGFncwogICAgewoKCgoKCgogICAgICAgIGJv
b2wgc21vb3RoOwoKCgoKCgoKICAgICAgICBib29sIGJpY3ViaWNfcGF0Y2g7CiMgNzM3ICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0
X2Jhc2UuaCIKICAgICAgICBib29sIGV4dGVybmFsX2RhdGE7CgoKCgogICAgICAgIFBvdnJheUZs
YWdzIChjb25zdCBib29sIHNtb290aCA9IGZhbHNlLAogICAgICAgICAgICAgICAgICAgICBjb25z
dCBib29sIGJpY3ViaWNfcGF0Y2ggPSBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
Ym9vbCBleHRlcm5hbF9kYXRhID0gZmFsc2UpOwoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRl
Y2xhcmVfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyA3NjIgIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFz
ZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJt
KTsKIyA3ODAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt
cHRpb24gKCkgY29uc3Q7CiAgICB9OwoKCgoKCgoKICAgIHN0cnVjdCBFcHNGbGFncwogICAgewoj
IDgwMiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdW5zaWduZWQgaW50IGhlaWdodF92ZWN0b3I7CgoK
CgoKCgogICAgICAgIHVuc2lnbmVkIGludCBjb2xvcl92ZWN0b3I7CiMgODE5ICIvaG9tZS9iYW5n
ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2Uu
aCIKICAgICAgICBlbnVtIFNpemVUeXBlIHsKICAgICAgICAgICAgICB3aWR0aCwgaGVpZ2h0CiAg
ICAgICAgfTsKCgoKCiAgICAgICAgU2l6ZVR5cGUgc2l6ZV90eXBlOwojIDg0MCAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNl
LmgiCiAgICAgICAgdW5zaWduZWQgaW50IHNpemU7CgoKCgoKICAgICAgICBkb3VibGUgbGluZV93
aWR0aDsKIyA4NTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGRvdWJsZSBhemltdXRfYW5nbGU7CiMg
ODg3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBkb3VibGUgdHVybl9hbmdsZTsKIyA5MDUgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRf
YmFzZS5oIgogICAgICAgIGRvdWJsZSB6X3NjYWxpbmc7CiMgOTE1ICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAg
ICAgICBib29sIGRyYXdfbWVzaDsKIyA5NDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGJvb2wgZHJh
d19jZWxsczsKIyA5NTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGJvb2wgc2hhZGVfY2VsbHM7CgoK
CgoKICAgICAgICBzdHJ1Y3QgUmdiVmFsdWVzCiAgICAgICAgewogICAgICAgICAgICBmbG9hdCBy
ZWQ7CiAgICAgICAgICAgIGZsb2F0IGdyZWVuOwogICAgICAgICAgICBmbG9hdCBibHVlOwojIDk3
NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9k
YXRhX291dF9iYXNlLmgiCiAgICAgICAgICAgIGJvb2wgaXNfZ3JleSAoKSBjb25zdDsKICAgICAg
ICB9OwojIDk4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgdHlwZWRlZiBSZ2JWYWx1ZXMgKCpDb2xv
ckZ1bmN0aW9uKSAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5fdmFsdWUsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1heF92YWx1ZSk7CiMg
OTk5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBDb2xvckZ1bmN0aW9uIGNvbG9yX2Z1bmN0aW9uOwoj
IDEwMTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0YXRpYyBSZ2JWYWx1ZXMgZGVmYXVsdF9jb2xv
cl9mdW5jdGlvbiAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1pbl92YWx1ZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtYXhf
dmFsdWUpOwojIDEwMjcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0YXRpYyBSZ2JWYWx1ZXMgZ3Jl
eV9zY2FsZV9jb2xvcl9mdW5jdGlvbiAoY29uc3QgZG91YmxlIHZhbHVlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIG1pbl92
YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGRvdWJsZSBtYXhfdmFsdWUpOwojIDEwNDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIHN0
YXRpYyBSZ2JWYWx1ZXMgcmV2ZXJzZV9ncmV5X3NjYWxlX2NvbG9yX2Z1bmN0aW9uIChjb25zdCBk
b3VibGUgdmFsdWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBtaW5fdmFsdWUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSBt
YXhfdmFsdWUpOwoKCgoKICAgICAgICBFcHNGbGFncyAoY29uc3QgdW5zaWduZWQgaW50IGhlaWdo
dF92ZWN0b3IgPSAwLAogICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgY29sb3Jf
dmVjdG9yID0gMCwKICAgICAgICAgICAgICAgICAgY29uc3QgU2l6ZVR5cGUgc2l6ZV90eXBlID0g
d2lkdGgsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBzaXplID0gMzAwLAog
ICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgbGluZV93aWR0aCA9IDAuNSwKICAgICAgICAg
ICAgICAgICAgY29uc3QgZG91YmxlIGF6aW11dF9hbmdsZSA9IDYwLAogICAgICAgICAgICAgICAg
ICBjb25zdCBkb3VibGUgdHVybl9hbmdsZSA9IDMwLAogICAgICAgICAgICAgICAgICBjb25zdCBk
b3VibGUgel9zY2FsaW5nID0gMS4wLAogICAgICAgICAgICAgICAgICBjb25zdCBib29sIGRyYXdf
bWVzaCA9IHRydWUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgZHJhd19jZWxscyA9IHRy
dWUsCiAgICAgICAgICAgICAgICAgIGNvbnN0IGJvb2wgc2hhZGVfY2VsbHMgPSB0cnVlLAogICAg
ICAgICAgICAgICAgICBjb25zdCBDb2xvckZ1bmN0aW9uIGNvbG9yX2Z1bmN0aW9uPSAmZGVmYXVs
dF9jb2xvcl9mdW5jdGlvbik7CiMgMTA3NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgc3RhdGljIHZv
aWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEwODUgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxl
ciAmcHJtKTsKIyAxMTAzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5
X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgoKICAgIHN0cnVjdCBHbXZGbGFncwog
ICAgewogICAgICBwcml2YXRlOgojIDExMjIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgICAgIGludCBkdW1t
eTsKCiAgICAgIHB1YmxpYzoKCgoKCgogICAgICAgIHN0YXRpYyB2b2lkIGRlY2xhcmVfcGFyYW1l
dGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKTsKIyAxMTQxICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAg
ICB2b2lkIHBhcnNlX3BhcmFtZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSk7CiMgMTE1OSAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRh
X291dF9iYXNlLmgiCiAgICAgICAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBj
b25zdDsKICAgIH07CgoKCgoKCiAgICBzdHJ1Y3QgVGVjcGxvdEZsYWdzCiAgICB7CgogICAgICBw
dWJsaWM6CiMgMTE4MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAgICAgY29uc3QgY2hhciogdGVjcGxvdF9i
aW5hcnlfZmlsZV9uYW1lOwoKCgoKICAgICAgICBUZWNwbG90RmxhZ3MgKGNvbnN0IGNoYXIqIHRl
Y3Bsb3RfYmluYXJ5X2ZpbGVfbmFtZSA9IF9fbnVsbCk7CgoKCgoKCiAgICAgICAgc3RhdGljIHZv
aWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEyMDQgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIgogICAgICAgIHZvaWQgcGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxl
ciAmcHJtKTsKIyAxMjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5
X2NvbnN1bXB0aW9uICgpIGNvbnN0OwogICAgfTsKCgoKCgoKCiAgICBzdHJ1Y3QgVnRrRmxhZ3MK
ICAgIHsKICAgICAgcHJpdmF0ZToKIyAxMjQyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgICAgICBpbnQgZHVt
bXk7CgogICAgICBwdWJsaWM6CgoKCgoKICAgICAgICBzdGF0aWMgdm9pZCBkZWNsYXJlX3BhcmFt
ZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSk7CiMgMTI2MSAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICAg
ICAgdm9pZCBwYXJzZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDEyNzkg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0
YV9vdXRfYmFzZS5oIgogICAgICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkg
Y29uc3Q7CiAgICB9OwojIDEyODkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGludCBkaW0s
IGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2R4IChjb25zdCBzdGQ6OnZlY3Rv
cjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVzLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IERYRmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KTsKIyAxMzAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHRlbXBs
YXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CiAgICBzdGF0aWMgdm9pZCB3cml0ZV91Y2QgKGNv
bnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25h
bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBVY2RGbGFncyAmZmxhZ3MsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KTsKIyAxMzE1ICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0
X2Jhc2UuaCIKICAgIHRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CiAgICBzdGF0aWMg
dm9pZCB3cml0ZV9nbnVwbG90IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+
ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBHbnVwbG90RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpvc3RyZWFtICZvdXQpOwojIDEzMjggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxh
dGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX3BvdnJheSAo
Y29uc3Qgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRh
dGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvdnJheUZsYWdz
ICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZvdXQp
OwojIDEzNDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRp
bT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2VwcyAoY29uc3Qgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGlt
LHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz
dGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEVwc0ZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RkOjpvc3RyZWFtICZvdXQpOwojIDEzNTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdGVtcGxhdGUgPGlu
dCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdyaXRlX2dtdiAoY29uc3Qgc3Rk
Ojp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdtdkZsYWdzICZmbGFncywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZvdXQpOwojIDEzNjcgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5o
IgogICAgdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KICAgIHN0YXRpYyB2b2lkIHdy
aXRlX3RlY3Bsb3QgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0
Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0
ZDo6c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFRlY3Bsb3RGbGFncyAmZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6Om9zdHJlYW0gJm91dCk7CiMgMTM4OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICB0ZW1wbGF0ZSA8aW50
IGRpbSwgaW50IHNwYWNlZGltPgogICAgc3RhdGljIHZvaWQgd3JpdGVfdGVjcGxvdF9iaW5hcnkg
KGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0
cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgVGVjcGxvdEZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCk7CiMgMTQwMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICB0ZW1w
bGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgogICAgc3RhdGljIHZvaWQgd3JpdGVfdnRrIChj
b25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiAmZGF0YV9u
YW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVnRrRmxhZ3MgJmZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCk7CiMgMTQyMyAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291
dF9iYXNlLmgiCiAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKTsK
CgoKCiAgICBjbGFzcyBFeGNVbmV4cGVjdGVkTnVtYmVyT2ZEYXRhc2V0cyA6IHB1YmxpYyBFeGNl
cHRpb25CYXNlIHsgcHVibGljOiBFeGNVbmV4cGVjdGVkTnVtYmVyT2ZEYXRhc2V0cyAoY29uc3Qg
aW50IGExLCBjb25zdCBpbnQgYTIpIDogYXJnMSAoYTEpLCBhcmcyKGEyKSB7fTsgdmlydHVhbCB+
RXhjVW5leHBlY3RlZE51bWJlck9mRGF0YXNldHMgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9p
ZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJl
ciBvZiBkYXRhIHNldHMgb24gdGhpcyBwYXRjaCBpcyAiIDw8IGFyZzEgPDwgIiwgYnV0IHdlIGV4
cGVjdGVkICIgPDwgYXJnMiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGludCBhcmcx
OyBjb25zdCBpbnQgYXJnMjsgfTsKCgoKCgoKCiAgICBjbGFzcyBFeGNJbnZhbGlkRGF0YXNldFNp
emUgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7IHB1YmxpYzogRXhjSW52YWxpZERhdGFzZXRTaXpl
IChjb25zdCBpbnQgYTEsIGNvbnN0IGludCBhMikgOiBhcmcxIChhMSksIGFyZzIoYTIpIHt9OyB2
aXJ0dWFsIH5FeGNJbnZhbGlkRGF0YXNldFNpemUgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9p
ZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJl
ciBvZiBwb2ludHMgaW4gdGhpcyBkYXRhIHNldCBpcyAiIDw8IGFyZzEgPDwgIiwgYnV0IHdlIGV4
cGVjdGVkICIgPDwgYXJnMiA8PCAiIGluIGVhY2ggc3BhY2UgZGlyZWN0aW9uLiIgPDwgc3RkOjpl
bmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoK
CiAgICBjbGFzcyBFeGNJbnZhbGlkVmVjdG9yTnVtYmVyIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ug
eyBwdWJsaWM6IEV4Y0ludmFsaWRWZWN0b3JOdW1iZXIgKGNvbnN0IGludCBhMSwgY29uc3QgaW50
IGEyKSA6IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y0ludmFsaWRWZWN0b3JO
dW1iZXIgKCkgdGhyb3cgKCkge307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVh
bSAmb3V0KSBjb25zdCB7IG91dCA8PCAiVGhlIG51bWJlciAiIDw8IGFyZzEgPDwgIiBvZiB0aGUg
dmVjdG9yIHRvIGJlIHVzZWQgZm9yICIgPDwgInRoaXMgaW5mb3JtYXRpb24gaXMgaW52YWxpZCwg
c2luY2UgdGhlcmUgYXJlIG9ubHkgIiA8PCBhcmcyIDw8ICIgZGF0YSBzZXRzLiIgPDwgc3RkOjpl
bmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoK
CgogICAgY2xhc3MgRXhjVW5leHBlY3RlZE51bWJlck9mU3ViZGl2aXNpb25zIDogcHVibGljIEV4
Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y1VuZXhwZWN0ZWROdW1iZXJPZlN1YmRpdmlzaW9ucyAo
Y29uc3QgaW50IGExLCBjb25zdCBpbnQgYTIpIDogYXJnMSAoYTEpLCBhcmcyKGEyKSB7fTsgdmly
dHVhbCB+RXhjVW5leHBlY3RlZE51bWJlck9mU3ViZGl2aXNpb25zICgpIHRocm93ICgpIHt9OyB2
aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwg
IlRoZSBudW1iZXIgb2Ygc3ViZGl2aXNpb25zIGlzICIgPDwgYXJnMSA8PCAiLCBidXQgd2UgZXhj
ZXB0ZWQgIiA8PCBhcmcyPDwgIiBmb3IgYmljdWJpYyBwYXRjaCIgPDwgc3RkOjplbmRsOyB9OyBw
cml2YXRlOiBjb25zdCBpbnQgYXJnMTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgoKCiAgICBjbGFz
cyBFeGNOb1BhdGNoZXMgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCgoKICAgIGNsYXNzIEV4
Y0lPIDogcHVibGljIEV4Y2VwdGlvbkJhc2Uge307CgoKCiAgICBjbGFzcyBFeGNUZWNwbG90QVBJ
RXJyb3IgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCgoKICAgIGNsYXNzIEV4Y0Vycm9yT3Bl
bmluZ1RlY3Bsb3RGaWxlIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBwdWJsaWM6IEV4Y0Vycm9y
T3BlbmluZ1RlY3Bsb3RGaWxlIChjb25zdCBjaGFyKiBhMSkgOiBhcmcxIChhMSkge307IHZpcnR1
YWwgfkV4Y0Vycm9yT3BlbmluZ1RlY3Bsb3RGaWxlICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZv
aWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIlRoZXJlIHdh
cyBhbiBlcnJvciBvcGVuaW5nIFRlY3Bsb3QgZmlsZSAiIDw8IGFyZzEgPDwgIiBmb3Igb3V0cHV0
IiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNvbnN0IGNoYXIqIGFyZzE7IH07CgoKCgoKICBw
cml2YXRlOgojIDE0ODYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgY2xhc3MgRXBzQ2VsbDJkCiAgICB7CiAg
ICAgIHB1YmxpYzoKCgoKCiAgICAgICAgUG9pbnQ8Mj4gdmVydGljZXNbNF07CgoKCgoKCgogICAg
ICAgIGZsb2F0IGNvbG9yX3ZhbHVlOwoKCgoKCgoKICAgICAgICBmbG9hdCBkZXB0aDsKCgoKCgog
ICAgICAgIGJvb2wgb3BlcmF0b3IgPCAoY29uc3QgRXBzQ2VsbDJkICYpIGNvbnN0OwogICAgfTsK
IyAxNTM5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+
CiAgICBzdGF0aWMgdm9pZAogICAgd3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzIChjb25z
dCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmZGF0YV92ZWN0b3JzKTsK
Cn07CiMgMTY2MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW09
ZGltPgpjbGFzcyBEYXRhT3V0SW50ZXJmYWNlIDogcHJpdmF0ZSBEYXRhT3V0QmFzZQp7CiAgcHVi
bGljOgoKCgoKCiAgICBlbnVtIE91dHB1dEZvcm1hdCB7IGRlZmF1bHRfZm9ybWF0LCBkeCwgdWNk
LCBnbnVwbG90LCBwb3ZyYXksIGVwcywgZ212LCB0ZWNwbG90LCB0ZWNwbG90X2JpbmFyeSwgdnRr
IH07CgoKCgoKCgogICAgdm9pZCB3cml0ZV9keCAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0OwoK
CgoKCgoKICAgIHZvaWQgd3JpdGVfdWNkIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CgoKCgoK
CgogICAgdm9pZCB3cml0ZV9nbnVwbG90IChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CgoKCgoK
CgogICAgdm9pZCB3cml0ZV9wb3ZyYXkgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoK
CiAgICB2b2lkIHdyaXRlX2VwcyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0OwoKCgoKCgoKICAg
IHZvaWQgd3JpdGVfZ212IChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3Q7CiMgMTcyNyAiL2hvbWUv
YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9i
YXNlLmgiCiAgICB2b2lkIHdyaXRlX3RlY3Bsb3QgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdDsK
IyAxNzM3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHZvaWQgd3JpdGVfdGVjcGxvdF9iaW5hcnkgKHN0ZDo6
b3N0cmVhbSAmb3V0KSBjb25zdDsKCgoKCgoKCiAgICB2b2lkIHdyaXRlX3Z0ayAoc3RkOjpvc3Ry
ZWFtICZvdXQpIGNvbnN0OwojIDE3NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdm9pZCB3cml0ZSAoc3Rk
Ojpvc3RyZWFtICZvdXQsCiAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRGb3JtYXQgb3V0cHV0
X2Zvcm1hdCA9IGRlZmF1bHRfZm9ybWF0KSBjb25zdDsKIyAxNzcxICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAg
IHZvaWQgc2V0X2RlZmF1bHRfZm9ybWF0IChjb25zdCBPdXRwdXRGb3JtYXQgZGVmYXVsdF9mb3Jt
YXQpOwoKCgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgRFhGbGFncyAmZHhfZmxhZ3MpOwoK
CgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgVWNkRmxhZ3MgJnVjZF9mbGFncyk7CgoKCgoK
ICAgIHZvaWQgc2V0X2ZsYWdzIChjb25zdCBHbnVwbG90RmxhZ3MgJmdudXBsb3RfZmxhZ3MpOwoK
CgoKCiAgICB2b2lkIHNldF9mbGFncyAoY29uc3QgUG92cmF5RmxhZ3MgJnBvdnJheV9mbGFncyk7
CgoKCgoKICAgIHZvaWQgc2V0X2ZsYWdzIChjb25zdCBFcHNGbGFncyAmZXBzX2ZsYWdzKTsKCgoK
CgogICAgdm9pZCBzZXRfZmxhZ3MgKGNvbnN0IEdtdkZsYWdzICZnbXZfZmxhZ3MpOwoKCgoKCiAg
ICB2b2lkIHNldF9mbGFncyAoY29uc3QgVGVjcGxvdEZsYWdzICZ0ZWNwbG90X2ZsYWdzKTsKCgoK
CgogICAgdm9pZCBzZXRfZmxhZ3MgKGNvbnN0IFZ0a0ZsYWdzICZ2dGtfZmxhZ3MpOwojIDE4NDMg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0
YV9vdXRfYmFzZS5oIgogICAgc3RkOjpzdHJpbmcgZGVmYXVsdF9zdWZmaXggKGNvbnN0IE91dHB1
dEZvcm1hdCBvdXRwdXRfZm9ybWF0ID0gZGVmYXVsdF9mb3JtYXQpIGNvbnN0OwojIDE4NzMgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIgogICAgc3RhdGljIE91dHB1dEZvcm1hdCBwYXJzZV9vdXRwdXRfZm9ybWF0IChj
b25zdCBzdGQ6OnN0cmluZyAmZm9ybWF0X25hbWUpOwojIDE4ODMgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAg
c3RhdGljIHN0ZDo6c3RyaW5nIGdldF9vdXRwdXRfZm9ybWF0X25hbWVzICgpOwojIDE5MTEgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9v
dXRfYmFzZS5oIgogICAgc3RhdGljIHZvaWQgZGVjbGFyZV9wYXJhbWV0ZXJzIChQYXJhbWV0ZXJI
YW5kbGVyICZwcm0pOwojIDE5MjUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdm9pZCBwYXJzZV9wYXJhbWV0
ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pOwojIDE5NDMgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvZGF0YV9vdXRfYmFzZS5oIgogICAgdW5z
aWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCgoKCiAgICBjbGFzcyBFeGNJ
bnZhbGlkU3RhdGUgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7fTsKCiAgcHJvdGVjdGVkOgojIDE5
NjQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv
ZGF0YV9vdXRfYmFzZS5oIgogICAgdmlydHVhbCBjb25zdCBzdGQ6OnZlY3Rvcjx0eXBlbmFtZSBE
YXRhT3V0QmFzZTo6UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICYKICAgIGdldF9wYXRjaGVzICgpIGNv
bnN0ID0gMDsKIyAxOTc0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jhc2UuaCIKICAgIHZpcnR1YWwgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+IGdldF9kYXRhc2V0X25hbWVzICgpIGNvbnN0ID0gMDsKCiAgcHJpdmF0ZToKIyAx
OTg1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L2RhdGFfb3V0X2Jhc2UuaCIKICAgIE91dHB1dEZvcm1hdCBkZWZhdWx0X2ZtdDsKCgoKCgoKCiAg
ICBEWEZsYWdzIGR4X2ZsYWdzOwoKCgoKCgoKICAgIFVjZEZsYWdzIHVjZF9mbGFnczsKCgoKCgoK
CiAgICBHbnVwbG90RmxhZ3MgZ251cGxvdF9mbGFnczsKCgoKCgoKCiAgICBQb3ZyYXlGbGFncyBw
b3ZyYXlfZmxhZ3M7CiMgMjAyNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICBFcHNGbGFncyBlcHNfZmxhZ3M7
CiMgMjAzNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS9kYXRhX291dF9iYXNlLmgiCiAgICBHbXZGbGFncyBnbXZfZmxhZ3M7CiMgMjA0NCAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9kYXRhX291
dF9iYXNlLmgiCiAgICBUZWNwbG90RmxhZ3MgdGVjcGxvdF9mbGFnczsKIyAyMDUzICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL2RhdGFfb3V0X2Jh
c2UuaCIKICAgIFZ0a0ZsYWdzIHZ0a19mbGFnczsKfTsKCgoKCgppbmxpbmUKYm9vbApEYXRhT3V0
QmFzZTo6RXBzRmxhZ3M6OlJnYlZhbHVlczo6aXNfZ3JleSAoKSBjb25zdAp7CiAgcmV0dXJuIChy
ZWQgPT0gZ3JlZW4pICYmIChyZWQgPT0gYmx1ZSk7Cn07CiMgMTYgInNvdXJjZS9kYXRhX291dF9i
YXNlLmNjIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIiAxCiMgMjAgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK
IyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL21hcCIg
MSAzCiMgNjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
bWFwIiAzCgojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfdHJlZS5oIiAxIDMKIyA5MSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMt
cHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF90cmVlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAg
ZW51bSBfUmJfdHJlZV9jb2xvciB7IF9NX3JlZCA9IGZhbHNlLCBfTV9ibGFjayA9IHRydWUgfTsK
CiAgc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9k
ZV9iYXNlKiBfQmFzZV9wdHI7CgogICAgX1JiX3RyZWVfY29sb3IgX01fY29sb3I7CiAgICBfQmFz
ZV9wdHIgX01fcGFyZW50OwogICAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgICBfQmFzZV9wdHIgX01f
cmlnaHQ7CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWluaW11bShfQmFzZV9wdHIgX194
KQogICAgewogICAgICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVm
dDsKICAgICAgcmV0dXJuIF9feDsKICAgIH0KCiAgICBzdGF0aWMgX0Jhc2VfcHRyCiAgICBfU19t
YXhpbXVtKF9CYXNlX3B0ciBfX3gpCiAgICB7CiAgICAgIHdoaWxlIChfX3gtPl9NX3JpZ2h0ICE9
IDApIF9feCA9IF9feC0+X01fcmlnaHQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9CiAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbD4KICAgIHN0cnVjdCBfUmJfdHJlZV9ub2RlIDogcHVibGlj
IF9SYl90cmVlX25vZGVfYmFzZQogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1Zh
bD4qIF9MaW5rX3R5cGU7CiAgICAgIF9WYWwgX01fdmFsdWVfZmllbGQ7CiAgICB9OwoKICBzdHJ1
Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogIHsKICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZV9i
YXNlOjpfQmFzZV9wdHIgX0Jhc2VfcHRyOwogICAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu
Y2VfdHlwZTsKCiAgICBfQmFzZV9wdHIgX01fbm9kZTsKCiAgICB2b2lkCiAgICBfTV9pbmNyZW1l
bnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkKICAgICAgICB7CiAg
ICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fcmlnaHQ7CiAgICAgICAgICB3aGlsZSAoX01f
bm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgICAgICBfTV9ub2RlID0gX01fbm9kZS0+X01fbGVm
dDsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfQmFzZV9wdHIgX195
ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5f
TV9yaWdodCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAg
ICAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlm
IChfTV9ub2RlLT5fTV9yaWdodCAhPSBfX3kpCiAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAg
ICAgICAgfQogICAgfQoKICAgIHZvaWQKICAgIF9NX2RlY3JlbWVudCgpCiAgICB7CiAgICAgIGlm
IChfTV9ub2RlLT5fTV9jb2xvciA9PSBfTV9yZWQKICAgICAgICAgICYmIF9NX25vZGUtPl9NX3Bh
cmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9N
X3JpZ2h0OwogICAgICBlbHNlIGlmIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgewog
ICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgICB3aGls
ZSAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0Owog
ICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg
ICAgICAgICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fcGFyZW50OwogICAgICAgICAgd2hp
bGUgKF9NX25vZGUgPT0gX195LT5fTV9sZWZ0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg
X01fbm9kZSA9IF9feTsKICAgICAgICAgICAgICBfX3kgPSBfX3ktPl9NX3BhcmVudDsKICAgICAg
ICAgICAgfQogICAgICAgICAgX01fbm9kZSA9IF9feTsKICAgICAgICB9CiAgICB9CiAgfTsKCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAg
IHN0cnVjdCBfUmJfdHJlZV9pdGVyYXRvciA6IHB1YmxpYyBfUmJfdHJlZV9iYXNlX2l0ZXJhdG9y
CiAgICB7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIF9SZWYg
cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIF9QdHIgcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfUmJf
dHJlZV9pdGVyYXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVm
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4KICAgICAg
Y29uc3RfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1Jl
ZiwgX1B0cj4gX1NlbGY7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFsPiogX0xpbmtf
dHlwZTsKCiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKCkge30KICAgICAgX1JiX3RyZWVfaXRlcmF0
b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9kZSA9IF9feDsgfQogICAgICBfUmJfdHJlZV9pdGVy
YXRvcihjb25zdCBpdGVyYXRvciYgX19pdCkgeyBfTV9ub2RlID0gX19pdC5fTV9ub2RlOyB9Cgog
ICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gX0xpbmtfdHlw
ZShfTV9ub2RlKS0+X01fdmFsdWVfZmllbGQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0
b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CgogICAgICBfU2VsZiYKICAg
ICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAgICAgICBfTV9pbmNyZW1lbnQoKTsKICAgICAgICBy
ZXR1cm4gKnRoaXM7CiAgICAgIH0KCiAgICAgIF9TZWxmCiAgICAgIG9wZXJhdG9yKysoaW50KQog
ICAgICB7CiAgICAgICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICAgICBfTV9pbmNyZW1lbnQo
KTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIF9TZWxmJgogICAgICBvcGVy
YXRvci0tKCkgeyBfTV9kZWNyZW1lbnQoKTsgcmV0dXJuICp0aGlzOyB9CgogICAgICBfU2VsZgog
ICAgICBvcGVyYXRvci0tKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7
CiAgICAgICAgX01fZGVjcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9CiAg
fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0
cj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y
PF9WYWwsIF9SZWYsIF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0
ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9
PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1Zh
bCYsIGNvbnN0IF9WYWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVy
YXRvcjxfVmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9
PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9W
YWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBj
b25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSA9
PSBfX3kuX01fbm9kZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfUmVm
LCB0eXBlbmFtZSBfUHRyPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1Ji
X3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feCwKICAgICAgICAgICAgICAgY29u
c3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1JlZiwgX1B0cj4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBjb25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+
CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf
VmFsLCBfVmFsJiwgX1ZhbCo+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0
ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feSkKICAgIHsgcmV0dXJu
IF9feC5fTV9ub2RlICE9IF9feS5fTV9ub2RlOyB9CgogIGlubGluZSB2b2lkCiAgX1JiX3RyZWVf
cm90YXRlX2xlZnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVlX25vZGVfYmFzZSom
IF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7
CiAgICBfX3gtPl9NX3JpZ2h0ID0gX195LT5fTV9sZWZ0OwogICAgaWYgKF9feS0+X01fbGVmdCAh
PTApCiAgICAgIF9feS0+X01fbGVmdC0+X01fcGFyZW50ID0gX194OwogICAgX195LT5fTV9wYXJl
bnQgPSBfX3gtPl9NX3BhcmVudDsKCiAgICBpZiAoX194ID09IF9fcm9vdCkKICAgICAgX19yb290
ID0gX195OwogICAgZWxzZSBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAg
ICBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9w
YXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195LT5fTV9sZWZ0ID0gX194OwogICAgX194LT5f
TV9wYXJlbnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9yaWdo
dChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQog
IHsKICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9sZWZ0OwogICAgX194LT5f
TV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICAgIGlmIChfX3ktPl9NX3JpZ2h0ICE9IDApCiAgICAg
IF9feS0+X01fcmlnaHQtPl9NX3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194
LT5fTV9wYXJlbnQ7CgogICAgaWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsK
ICAgIGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgIF9feC0+
X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAgIGVsc2UKICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX2xlZnQgPSBfX3k7CiAgICBfX3ktPl9NX3JpZ2h0ID0gX194OwogICAgX194LT5fTV9wYXJl
bnQgPSBfX3k7CiAgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JlYmFsYW5jZShfUmJfdHJl
ZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290KQogIHsKICAgIF9f
eC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdAogICAgICAgICAg
ICYmIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgIHsKICAgICAgICBp
ZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkK
ICAgICAgICAgIHsKICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9N
X3BhcmVudC0+X01fcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgaWYgKF9feSAmJiBfX3kt
Pl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBfX3gt
Pl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feS0+X01f
Y29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJl
bnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFyZW50LT5fTV9yaWdo
dCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01f
cGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feCwgX19y
b290KTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQt
Pl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01f
cGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0
ZV9yaWdodChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg
IH0KICAgICAgICAgIH0KICAgICAgICBlbHNlCiAgICAgICAgICB7CiAgICAgICAgICAgIF9SYl90
cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsK
ICAgICAgICAgICAgaWYgKF9feSAmJiBfX3ktPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFj
azsKICAgICAgICAgICAgICAgIF9feS0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAg
ICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAg
ICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICAgICAgICB9
CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZiAoX194
ID09IF9feC0+X01fcGFyZW50LT5fTV9sZWZ0KQogICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgICAgX1Ji
X3RyZWVfcm90YXRlX3JpZ2h0KF9feCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg
ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feC0+X01fcGFyZW50LT5fTV9wYXJl
bnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICB9CiAgICBfX3Jv
b3QtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgfQoKICBpbmxpbmUgX1JiX3RyZWVfbm9kZV9iYXNl
KgogIF9SYl90cmVlX3JlYmFsYW5jZV9mb3JfZXJhc2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3os
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jv
b3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBf
X2xlZnRtb3N0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9i
YXNlKiYgX19yaWdodG1vc3QpCiAgewogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3o7
CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCA9IDA7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2Uq
IF9feF9wYXJlbnQgPSAwOwogICAgaWYgKF9feS0+X01fbGVmdCA9PSAwKQogICAgICBfX3ggPSBf
X3ktPl9NX3JpZ2h0OwogICAgZWxzZQogICAgICBpZiAoX195LT5fTV9yaWdodCA9PSAwKQogICAg
ICAgIF9feCA9IF9feS0+X01fbGVmdDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBf
X3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fbGVmdCAhPSAwKQog
ICAgICAgICAgICBfX3kgPSBfX3ktPl9NX2xlZnQ7CiAgICAgICAgICBfX3ggPSBfX3ktPl9NX3Jp
Z2h0OwogICAgICAgIH0KICAgIGlmIChfX3kgIT0gX196KQogICAgICB7CgogICAgICAgIF9fei0+
X01fbGVmdC0+X01fcGFyZW50ID0gX195OwogICAgICAgIF9feS0+X01fbGVmdCA9IF9fei0+X01f
bGVmdDsKICAgICAgICBpZiAoX195ICE9IF9fei0+X01fcmlnaHQpCiAgICAgICAgICB7CiAgICAg
ICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgaWYgKF9feCkg
X194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICAgICAgX195LT5fTV9wYXJl
bnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgICAgICAgIF9feS0+X01fcmlnaHQgPSBfX3otPl9NX3Jp
Z2h0OwogICAgICAgICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJlbnQgPSBfX3k7CiAgICAgICAg
ICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX194X3BhcmVudCA9IF9feTsKICAgICAgICBpZiAo
X19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feTsKICAgICAgICBlbHNlIGlmIChf
X3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+
X01fbGVmdCA9IF9feTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01f
cmlnaHQgPSBfX3k7CiAgICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAg
ICAgICBzdGQ6OnN3YXAoX195LT5fTV9jb2xvciwgX196LT5fTV9jb2xvcik7CiAgICAgICAgX195
ID0gX196OwoKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICAgX194X3BhcmVudCA9IF9f
eS0+X01fcGFyZW50OwogICAgICAgIGlmIChfX3gpCiAgICAgICAgICBfX3gtPl9NX3BhcmVudCA9
IF9feS0+X01fcGFyZW50OwogICAgICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICAgICAgX19y
b290ID0gX194OwogICAgICAgIGVsc2UKICAgICAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01f
bGVmdCA9PSBfX3opCiAgICAgICAgICAgIF9fei0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194Owog
ICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3otPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3g7
CiAgICAgICAgaWYgKF9fbGVmdG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fcmln
aHQgPT0gMCkKICAgICAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAg
ICAgIGVsc2UKICAgICAgICAgICAgX19sZWZ0bW9zdCA9IF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf
bWluaW11bShfX3gpOwogICAgICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgICAgICBp
ZiAoX196LT5fTV9sZWZ0ID09IDApCiAgICAgICAgICAgIF9fcmlnaHRtb3N0ID0gX196LT5fTV9w
YXJlbnQ7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3JpZ2h0bW9zdCA9IF9SYl90cmVl
X25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOwogICAgICB9CiAgICBpZiAoX195LT5fTV9jb2xv
ciAhPSBfTV9yZWQpCiAgICAgIHsKICAgICAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194
ID09IDAgfHwgX194LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICBpZiAoX194ID09
IF9feF9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfUmJfdHJl
ZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAgICAgIGlm
IChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAg
ICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBfX3hfcGFy
ZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRl
X2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3Bh
cmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKChfX3ct
Pl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9sZWZ0LT5fTV9jb2xv
ciA9PSBfTV9ibGFjaykgJiYKICAgICAgICAgICAgICAgICAgKF9fdy0+X01fcmlnaHQgPT0gMCB8
fAogICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2sp
KQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01f
cmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAgICAgICAg
ICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYg
KF9fdy0+X01fcmlnaHQgPT0gMAogICAgICAgICAgICAgICAgICAgICAgfHwgX193LT5fTV9yaWdo
dC0+X01fY29sb3IgPT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9N
X2JsYWNrOwogICAgICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg
ICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3csIF9fcm9vdCk7CiAg
ICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdodDsKICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50
LT5fTV9jb2xvcjsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9i
bGFjazsKICAgICAgICAgICAgICAgICAgaWYgKF9fdy0+X01fcmlnaHQpCiAgICAgICAgICAgICAg
ICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAg
ICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9
IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0g
X01fcmVkKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9y
ID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01f
cmVkOwogICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194X3BhcmVudCwg
X19yb290KTsKICAgICAgICAgICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoKF9fdy0+X01fcmlnaHQgPT0gMCB8fAog
ICAgICAgICAgICAgICAgICAgX193LT5fTV9yaWdodC0+X01fY29sb3IgPT0gX01fYmxhY2spICYm
CiAgICAgICAgICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgICAg
ICAgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykpCiAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAg
ICAgIF9feCA9IF9feF9wYXJlbnQ7CiAgICAgICAgICAgICAgICAgIF9feF9wYXJlbnQgPSBfX3hf
cGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0ID09IDAg
fHwgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdo
dC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29s
b3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfbGVmdChf
X3csIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgICAgICBfX3cgPSBfX3hfcGFyZW50LT5fTV9s
ZWZ0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xv
ciA9IF9feF9wYXJlbnQtPl9NX2NvbG9yOwogICAgICAgICAgICAgICAgICBfX3hfcGFyZW50LT5f
TV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgICBpZiAoX193LT5fTV9sZWZ0KQog
ICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAg
ICAgICAgICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7
CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9
CiAgICAgICAgaWYgKF9feCkgX194LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICB9CiAgICBy
ZXR1cm4gX195OwogIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBf
QWxsb2MsIGJvb2wgX1NfaW5zdGFuY2VsZXNzPgogICAgY2xhc3MgX1JiX3RyZWVfYWxsb2NfYmFz
ZQogICAgewogICAgcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9U
cCwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgogICAgICBhbGxvY2F0
b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9hbGxv
Y2F0b3I7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUm
IF9fYSkKICAgICAgOiBfTV9ub2RlX2FsbG9jYXRvcihfX2EpLCBfTV9oZWFkZXIoMCkge30KCiAg
ICBwcm90ZWN0ZWQ6CiAgICAgIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9kZTxf
VHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICBfTV9ub2RlX2FsbG9jYXRvcjsKCiAg
ICAgIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICAgICAgX1JiX3RyZWVfbm9kZTxf
VHA+KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9j
YXRlKDEpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX3B1dF9ub2RlKF9SYl90cmVlX25vZGU8X1Rw
PiogX19wKQogICAgICB7IF9NX25vZGVfYWxsb2NhdG9yLmRlYWxsb2NhdGUoX19wLCAxKTsgfQog
ICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xh
c3MgX1JiX3RyZWVfYWxsb2NfYmFzZTxfVHAsIF9BbGxvYywgdHJ1ZT4KICAgIHsKICAgIHB1Ymxp
YzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9j
YXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh
dG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICAgICAgX1JiX3RyZWVf
YWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpIDogX01faGVhZGVyKDApIHt9CgogICAg
cHJvdGVjdGVkOgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgICAgIHR5
cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfUmJfdHJlZV9ub2RlPF9UcD4sIF9BbGxvYz46
Ol9BbGxvY190eXBlCiAgICAgIF9BbGxvY190eXBlOwoKICAgICAgX1JiX3RyZWVfbm9kZTxfVHA+
KgogICAgICBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsg
fQoKICAgICAgdm9pZAogICAgICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkg
eyBfQWxsb2NfdHlwZTo6ZGVhbGxvY2F0ZShfX3AsIDEpOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHN0cnVjdCBfUmJfdHJlZV9iYXNlIDog
cHVibGljIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2Vs
ZXNzPgogICAgewogICAgICB0eXBlZGVmIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1RwLAogICAgICAg
IF9BbGxvYywgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4gX0Jh
c2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRv
cl90eXBlOwoKICAgICAgX1JiX3RyZWVfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQog
ICAgICA6IF9CYXNlKF9fYSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgICAgIH5f
UmJfdHJlZV9iYXNlKCkgeyBfTV9wdXRfbm9kZShfTV9oZWFkZXIpOyB9CiAgICB9OwoKCiAgdGVt
cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs
CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRv
cjxfVmFsPiA+CiAgICBjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3RlZCBfUmJfdHJlZV9iYXNlPF9W
YWwsIF9BbGxvYz4KICAgIHsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9iYXNlPF9WYWwsIF9BbGxv
Yz4gX0Jhc2U7CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFz
ZSogX0Jhc2VfcHRyOwogICAgICB0eXBlZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4gX1JiX3RyZWVf
bm9kZTsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICAgICAgdHlw
ZWRlZiBfVmFsIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSogcG9pbnRlcjsK
ICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBlKiBjb25zdF9wb2ludGVyOwogICAgICB0eXBl
ZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl
JiBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfbm9kZSogX0xpbmtfdHlw
ZTsKICAgICAgdHlwZWRlZiBzaXplX3Qgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIHB0cmRpZmZf
dCBkaWZmZXJlbmNlX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0
b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRv
cigpIGNvbnN0IHsgcmV0dXJuIF9CYXNlOjpnZXRfYWxsb2NhdG9yKCk7IH0KCiAgICBwcm90ZWN0
ZWQ6CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICAgICAgdXNpbmcgX0Jhc2U6Ol9N
X3B1dF9ub2RlOwogICAgICB1c2luZyBfQmFzZTo6X01faGVhZGVyOwoKICAgICAgX0xpbmtfdHlw
ZQogICAgICBfTV9jcmVhdGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICAgIHsKICAg
ICAgICBfTGlua190eXBlIF9fdG1wID0gX01fZ2V0X25vZGUoKTsKICAgICAgICB0cnkKICAgICAg
ICAgIHsgX0NvbnN0cnVjdCgmX190bXAtPl9NX3ZhbHVlX2ZpZWxkLCBfX3gpOyB9CiAgICAgICAg
Y2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgX01fcHV0X25vZGUoX190bXApOwogICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog
ICAgICBfTGlua190eXBlCiAgICAgIF9NX2Nsb25lX25vZGUoX0xpbmtfdHlwZSBfX3gpCiAgICAg
IHsKICAgICAgICBfTGlua190eXBlIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194LT5fTV92YWx1
ZV9maWVsZCk7CiAgICAgICAgX190bXAtPl9NX2NvbG9yID0gX194LT5fTV9jb2xvcjsKICAgICAg
ICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICAgICAgX190bXAtPl9NX3JpZ2h0ID0gMDsKICAgICAg
ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgZGVzdHJveV9ub2RlKF9M
aW5rX3R5cGUgX19wKQogICAgICB7CiAgICAgICAgX0Rlc3Ryb3koJl9fcC0+X01fdmFsdWVfZmll
bGQpOwogICAgICAgIF9NX3B1dF9ub2RlKF9fcCk7CiAgICAgIH0KCiAgICAgIHNpemVfdHlwZSBf
TV9ub2RlX2NvdW50OwogICAgICBfQ29tcGFyZSBfTV9rZXlfY29tcGFyZTsKCiAgICAgIF9MaW5r
X3R5cGUmCiAgICAgIF9NX3Jvb3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlwZSYpIF9NX2hl
YWRlci0+X01fcGFyZW50OyB9CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9sZWZ0bW9zdCgp
IGNvbnN0IHsgcmV0dXJuIChfTGlua190eXBlJikgX01faGVhZGVyLT5fTV9sZWZ0OyB9CgogICAg
ICBfTGlua190eXBlJgogICAgICBfTV9yaWdodG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtf
dHlwZSYpIF9NX2hlYWRlci0+X01fcmlnaHQ7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgog
ICAgICBfU19sZWZ0KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYpKF9feC0+
X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBfU19yaWdodChfTGlu
a190eXBlIF9feCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQoKICAg
ICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3BhcmVudChfTGlua190eXBlIF9feCkgeyBy
ZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZl
cmVuY2UKICAgICAgX1NfdmFsdWUoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIF9feC0+X01fdmFs
dWVfZmllbGQ7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBfS2V5JgogICAgICBfU19rZXkoX0xpbmtf
dHlwZSBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KCiAgICAg
IHN0YXRpYyBfUmJfdHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0xpbmtfdHlwZSBfX3gpIHsg
cmV0dXJuIF9feC0+X01fY29sb3I7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAgICBf
U19sZWZ0KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0
KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUmCiAgICAgIF9TX3JpZ2h0KF9CYXNlX3B0ciBf
X3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRp
YyBfTGlua190eXBlJgogICAgICBfU19wYXJlbnQoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9M
aW5rX3R5cGUmKShfX3gtPl9NX3BhcmVudCk7IH0KCiAgICAgIHN0YXRpYyByZWZlcmVuY2UKICAg
ICAgX1NfdmFsdWUoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKChfTGlua190eXBlKV9feCktPl9N
X3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMgY29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9C
YXNlX3B0ciBfX3gpIHsgcmV0dXJuIF9LZXlPZlZhbHVlKCkoX1NfdmFsdWUoX0xpbmtfdHlwZShf
X3gpKSk7fQoKICAgICAgc3RhdGljIF9SYl90cmVlX2NvbG9yJgogICAgICBfU19jb2xvcihfQmFz
ZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7IH0KCiAgICAg
IHN0YXRpYyBfTGlua190eXBlCiAgICAgIF9TX21pbmltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAg
IHsgcmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194
KTsgfQoKICAgICAgc3RhdGljIF9MaW5rX3R5cGUKICAgICAgX1NfbWF4aW11bShfTGlua190eXBl
IF9feCkKICAgICAgeyByZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf
bWF4aW11bShfX3gpOyB9CgogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJh
dG9yPHZhbHVlX3R5cGUsIHJlZmVyZW5jZSwgcG9pbnRlcj4gaXRlcmF0b3I7CiAgICAgIHR5cGVk
ZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVfdHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9w
b2ludGVyPgogICAgICBjb25zdF9pdGVyYXRvcjsKCiAgICAgIHR5cGVkZWYgc3RkOjpyZXZlcnNl
X2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogICAgICB0
eXBlZGVmIHN0ZDo6cmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsK
CiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBfTV9pbnNlcnQoX0Jhc2VfcHRyIF9f
eCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYgX192KTsKCiAgICAgIF9MaW5rX3R5
cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwoKICAgICAg
dm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7CgogICAgcHVibGljOgoKICAgICAg
X1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9yX3R5cGUoKSksIF9NX25vZGVfY291
bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0K
CiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2NvbXApCiAgICAgICAgOiBfQmFzZShh
bGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21w
KQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICAgICAgX1JiX3RyZWUoY29uc3Qg
X0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgICA6IF9C
YXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKF9fY29tcCkKICAgICAg
eyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpCiAgICAgICAgOiBf
QmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9jb3VudCgwKSwKICAgICAgICAgICAg
ICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBhcmUpCiAgICAgIHsKICAgICAgICBp
ZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01fZW1wdHlfaW5pdGlhbGl6ZSgpOwog
ICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9
IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBf
TV9oZWFkZXIpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX1NfbWluaW11bShfTV9yb290
KCkpOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsK
ICAgICAgICAgIH0KICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAg
ICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsgfQoKICAgICAgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICAgIG9wZXJhdG9yPShjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KTsK
CiAgICBwcml2YXRlOgogICAgICB2b2lkIF9NX2VtcHR5X2luaXRpYWxpemUoKQogICAgICB7CiAg
ICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKCiAgICAgICAgX01fcm9vdCgpID0g
MDsKICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgIF9NX3JpZ2h0bW9z
dCgpID0gX01faGVhZGVyOwogICAgICB9CgogICAgcHVibGljOgoKICAgICAgX0NvbXBhcmUKICAg
ICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQoKICAgICAgaXRl
cmF0b3IKICAgICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0bW9zdCgpOyB9CgogICAgICBjb25z
dF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX2xlZnRtb3N0KCk7IH0K
CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJuIF9NX2hlYWRlcjsgfQoKICAgICAg
Y29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01faGVhZGVyOyB9Cgog
ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRl
cmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAg
ICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9y
KGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSBj
b25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBi
b29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fbm9kZV9jb3VudCA9PSAwOyB9Cgog
ICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfY291bnQ7
IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf
dHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChfUmJfdHJlZTxfS2V5LF9WYWwsX0tl
eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAgICB7CiAgICAgICAgc3RkOjpzd2Fw
KF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAgc3RkOjpzd2FwKF9NX25vZGVfY291
bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUs
IF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAgICBwYWlyPGl0ZXJhdG9yLGJvb2w+
CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlwZSYgX194KTsKCiAgICAgIGl0ZXJh
dG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRl
cmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1
ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X2VxdWFsKGl0ZXJhdG9y
IF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7CgogICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfdW5pcXVlKF9JbnB1
dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnRfZXF1YWwo
X0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KTsKCiAgICAgIHZv
aWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CgogICAgICBzaXplX3R5cGUKICAg
ICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNlKGl0
ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7CgogICAgICB2b2lkCiAgICAgIGVyYXNl
KGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlfdHlwZSogX19sYXN0KTsKCiAgICAg
IHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAgaWYgKF9NX25vZGVfY291bnQgIT0g
MCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2UoX01fcm9vdCgpKTsKICAgICAgICAg
ICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAgICAgICAgX01fcm9vdCgpID0gMDsK
ICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICAgICAgICAgIF9NX25v
ZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoKICAgICAgaXRlcmF0b3IKICAgICAg
ZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGZp
bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgY291
bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAgICBpdGVyYXRvcgogICAgICBsb3dl
cl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAg
IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKICAgICAgaXRlcmF0b3IK
ICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAgICBjb25zdF9pdGVy
YXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdDsKCiAgICAg
IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBl
JiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3I+CiAgICAg
IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0OwoKCiAgICAgIGJvb2wKICAg
ICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXks
IHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1l
IF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9
PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICByZXR1cm4gX194LnNpemUoKSA9PSBf
X3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX195LmJl
Z2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
IGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4o
KSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX195LmJl
Z2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0gX195KTsgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAg
ICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv
bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBfX3kgPCBf
X3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg
X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv
Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9SYl90cmVlPF9LZXksX1Zh
bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0
IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAg
eyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w
YXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25z
dCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAog
ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh
cmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg
ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIHZvaWQK
ICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl
bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRvcj0oY29uc3QgX1JiX3RyZWU8X0tl
eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkKICAgIHsKICAgICAgaWYg
KHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAgY2xlYXIoKTsKICAgICAgICAgIF9N
X25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2NvbXBhcmUgPSBfX3guX01fa2V5X2Nv
bXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgICBfTV9sZWZ0bW9zdCgpID0g
X01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAg
ICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9y
b290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hlYWRlcik7CiAgICAgICAgICAgICAg
X01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9y
aWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgICAgICBfTV9ub2Rl
X2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg
IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg
X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs
IHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW
YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L
ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01faW5zZXJ0KF9CYXNlX3B0ciBfX3hf
LCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBl
IF9feCA9IChfTGlua190eXBlKSBfX3hfOwogICAgICBfTGlua190eXBlIF9feSA9IChfTGlua190
eXBlKSBfX3lfOwogICAgICBfTGlua190eXBlIF9fejsKCiAgICAgIGlmIChfX3kgPT0gX01faGVh
ZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgICAgICBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgp
KF9fdiksIF9TX2tleShfX3kpKSkKICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVf
bm9kZShfX3YpOwogICAgICAgICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgICAgICAgIGlmIChf
X3kgPT0gX01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0g
X196OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogICAgICAgICAgICB9CiAg
ICAgICAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAgICAgICAgX01fbGVm
dG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBf
X3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfcmlnaHQoX195KSA9IF9fejsK
CiAgICAgICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgpKQogICAgICAgICAgICBfTV9yaWdo
dG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3BhcmVudChfX3opID0gX195OwogICAg
ICBfU19sZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChfX3opID0gMDsKICAgICAgX1JiX3Ry
ZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJlbnQpOwogICAgICArK19NX25vZGVf
Y291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAg
ICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3Ry
ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNl
cnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9N
X2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAgICAgIHdoaWxlIChf
X3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBfX3g7CiAgICAgICAgICBfX3ggPSBf
TV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAg
ICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAgICAgICAgfQogICAgICByZXR1cm4g
X01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5
LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt
ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IsCiAgICBib29s
PgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog
ICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIF9MaW5rX3R5cGUg
X195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKICAgICAg
Ym9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAg
ICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0gX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAgICBfX3ggPSBfX2NvbXAgPyBfU19s
ZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0KICAgICAgaXRlcmF0b3IgX19qID0g
aXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAgICAgICBpZiAoX19qID09IGJlZ2lu
KCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBf
X3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAgICAgIC0tX19qOwogICAgICBpZiAo
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkK
ICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9f
diksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfX2osIGZhbHNlKTsK
ICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBh
cmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5T2ZWYWx1
ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0
aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUg
PT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAgICAgICAgICBpZiAoc2l6ZSgpID4g
MCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nf
a2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9f
cG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgIGVs
c2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192KS5maXJzdDsKICAgICAgICB9
CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpCiAgICAgICAg
ewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBf
S2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3Jp
Z2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0
X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAg
ICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsKICAgICAgICAgIC0tX19iZWZvcmU7
CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fYmVmb3JlLl9NX25vZGUpLCBf
S2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAgJiYgX01fa2V5X2NvbXBhcmUoX0tleU9m
VmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpKSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAg
ICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9yZS5fTV9ub2RlLCBfX3YpOwogICAg
ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv
bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgICB9CiAgICAg
ICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAg
ICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0
eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5h
bWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9D
b21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoaXRlcmF0b3IgX19wb3NpdGlv
biwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09
IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7CgogICAgICAgICAgaWYgKHNpemUoKSA+IDAg
JiYKICAgICAgICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k
ZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19w
b3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgICAgICAgZWxz
ZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgICBl
bHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKQogICAgICAgIHsKCiAgICAg
ICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3Jp
Z2h0bW9zdCgpKSkpCiAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0
KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwo
X192KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBpdGVyYXRvciBf
X2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAgICAgICAtLV9fYmVmb3JlOwogICAgICAgICAgaWYg
KCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX2JlZm9yZS5fTV9u
b2RlKSkKICAgICAgICAgICAgICAmJiAhX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fcG9zaXRpb24u
X01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9LZXlPZlZhbHVlKCko
X192KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX1NfcmlnaHQoX19iZWZvcmUu
X01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZv
cmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICByZXR1
cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Yp
OwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0
X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0
eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9DbXAsIHR5
cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9JST4KICAgICAgdm9pZAogICAgICBf
UmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46OgogICAgICBpbnNlcnRfZXF1YWwo
X0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICAgIHsKICAgICAgICBmb3IgKCA7IF9fZmlyc3Qg
IT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNlcnRfZXF1YWwoKl9fZmlyc3QpOwog
ICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1l
IF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVt
cGxhdGU8Y2xhc3MgX0lJPgogICAgdm9pZAogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0Nt
cCxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAg
ICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBp
bnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg
dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg
X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBfUmJfdHJlZTxf
S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPQogICAgICAgIChfTGlua190eXBl
KSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9N
X3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7CiAgICAgIGRlc3Ryb3lfbm9kZShf
X3kpOwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9L
ZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVu
YW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZXJhc2UoY29uc3QgX0tl
eSYgX194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9y
YW5nZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gZGlzdGFuY2UoX19wLmZpcnN0LCBfX3Au
c2Vjb25kKTsKICAgICAgZXJhc2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgcmV0dXJu
IF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlw
ZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j
PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxv
Yz46Ol9MaW5rX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS29WLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApCiAgICB7Cgog
ICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogICAgICBfX3RvcC0+
X01fcGFyZW50ID0gX19wOwoKICAgICAgdHJ5CiAgICAgICAgewogICAgICAgICAgaWYgKF9feC0+
X01fcmlnaHQpCiAgICAgICAgICAgIF9fdG9wLT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQo
X194KSwgX190b3ApOwogICAgICAgICAgX19wID0gX190b3A7CiAgICAgICAgICBfX3ggPSBfU19s
ZWZ0KF9feCk7CgogICAgICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgICAgICAg
ICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICAgICAgICAgIF9feS0+X01fcGFyZW50ID0gX19w
OwogICAgICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgX195LT5f
TV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195KTsKICAgICAgICAgICAgICBfX3Ag
PSBfX3k7CiAgICAgICAgICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX190
b3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgICByZXR1cm4gX190b3A7CiAgICB9
CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlP
ZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j
Pjo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCiAgICB7CgogICAgICB3aGlsZSAoX194ICE9IDAp
CiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX1NfcmlnaHQoX194KSk7CiAgICAgICAgICBf
TGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgICAgICAgIGRlc3Ryb3lfbm9kZShfX3gp
OwogICAgICAgICAgX194ID0gX195OwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h
bWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAg
dHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGl0ZXJh
dG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fZmlyc3QgPT0g
YmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICAgICAgY2xlYXIoKTsKICAgICAgZWxzZQog
ICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsKICAgIH0K
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9m
VmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAg
IHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+
OjoKICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKICAg
IHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGVyYXNlKCpfX2ZpcnN0
KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl
bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21w
YXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs
X0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCiAgICB7CiAgICAgIF9MaW5r
X3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsK
CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tl
eShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAg
ICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIGl0ZXJhdG9y
IF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tl
eV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgICBlbmQoKSA6IF9f
ajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5h
bWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh
bHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZmluZChjb25zdCBfS2V5JiBfX2spIGNvbnN0CiAg
ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f
eCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgewogICAgICAgICBp
ZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgIF9feSA9IF9f
eCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgX194ID0gX1Nf
cmlnaHQoX194KTsKICAgICAgIH0KICAgICBjb25zdF9pdGVyYXRvciBfX2ogPSBjb25zdF9pdGVy
YXRvcihfX3kpOwogICAgIHJldHVybiAoX19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9f
aywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgIGVuZCgpIDogX19qOwogICAgfQoKICB0
ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1
ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw
ZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNp
emVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxv
Yz46OgogICAgY291bnQoY29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBwYWlyPGNv
bnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0gZXF1YWxfcmFuZ2UoX19rKTsKICAg
ICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29uZCk7CiAgICAg
IHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9W
YWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0
eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs
dWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5
T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9f
aykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5
cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICgh
X01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9f
eCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChf
X3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl
ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IK
ICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAg
IGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICAgIHsKICAgICAgX0xpbmtfdHlw
ZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAg
ICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9f
eCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAg
ICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGNvbnN0
X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l
IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m
VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxf
S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVwcGVyX2JvdW5kKGNvbnN0IF9LZXkm
IF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5r
X3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlm
IChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkKICAgICAgICAgIF9feSA9IF9feCwg
X194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9feCA9IF9TX3JpZ2h0
KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg
ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90
cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv
cgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Ogog
ICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25zdAogICAgewogICAgICBfTGlua190
eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7Cgog
ICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9NX2tleV9jb21wYXJlKF9faywgX1Nf
a2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICAg
ICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgICAgIHJldHVybiBjb25z
dF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lCiAgICBwYWlyPHR5cGVuYW1lIF9SYl90cmVl
PF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs
b2M+OjppdGVyYXRvcj4KICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFy
ZSxfQWxsb2M+OjoKICAgIGVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykKICAgIHsgcmV0dXJu
IHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dlcl9ib3VuZChfX2spLCB1cHBlcl9ib3VuZChf
X2spKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt
ZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
aW5saW5lCiAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFy
ZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5
LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3I+CiAgX1JiX3Ry
ZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxvYz4KICA6OmVxdWFsX3JhbmdlKGNv
bnN0IF9LZXkmIF9faykgY29uc3QKICB7CiAgICByZXR1cm4gcGFpcjxjb25zdF9pdGVyYXRvcixj
b25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChfX2spKTsKICB9CgogIGlubGluZSBp
bnQKICBfX2JsYWNrX2NvdW50KF9SYl90cmVlX25vZGVfYmFzZSogX19ub2RlLCBfUmJfdHJlZV9u
b2RlX2Jhc2UqIF9fcm9vdCkKICB7CiAgICBpZiAoX19ub2RlID09IDApCiAgICAgIHJldHVybiAw
OwogICAgaW50IF9fc3VtID0gMDsKICAgIGRvCiAgICAgIHsKICAgICAgICBpZiAoX19ub2RlLT5f
TV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICsrX19zdW07CiAgICAgICAgaWYgKF9fbm9k
ZSA9PSBfX3Jvb3QpCiAgICAgICAgICBicmVhazsKICAgICAgICBfX25vZGUgPSBfX25vZGUtPl9N
X3BhcmVudDsKICAgICAgfQogICAgd2hpbGUgKDEpOwogICAgcmV0dXJuIF9fc3VtOwogIH0KCiAg
dGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFs
dWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJv
b2wKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpf
X3JiX3ZlcmlmeSgpIGNvbnN0CiAgICB7CiAgICBpZiAoX01fbm9kZV9jb3VudCA9PSAwIHx8IGJl
Z2luKCkgPT0gZW5kKCkpCiAgICAgIHJldHVybiBfTV9ub2RlX2NvdW50ID09IDAgJiYgYmVnaW4o
KSA9PSBlbmQoKSAmJgogICAgICAgIF9NX2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYg
X01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7CgogICAgaW50IF9fbGVuID0gX19ibGFj
a19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwogICAgZm9yIChjb25zdF9pdGVyYXRv
ciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytfX2l0KQogICAgICB7CiAgICAgICAg
X0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5fTV9ub2RlOwogICAgICAgIF9MaW5r
X3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9MaW5rX3R5cGUgX19SID0gX1Nfcmln
aHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3IgPT0gX01fcmVkKQogICAgICAgICAg
aWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgfHwgKF9f
UiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
CiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX1Nfa2V5KF9f
TCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChfX1IgJiYgX01fa2V5X2Nv
bXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAgICAgICAgIHJldHVybiBmYWxzZTsK
CiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNrX2NvdW50KF9feCwgX01fcm9vdCgp
KSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQoKICAgIGlmIChfTV9s
ZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWluaW11bShfTV9yb290KCkpKQog
ICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9k
ZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJl
dHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9p
bmNsdWRlL2MrKy8zLjMvbWFwIiAyIDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAxIDMKIyA2NiAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwpuYW1l
c3BhY2Ugc3RkCnsKIyA4OSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBl
bmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlw
ZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICAgIGNs
YXNzIG1hcAogIHsKCiAgIAogICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBl
OwogICAgdHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tl
eSwgX1RwPiB2YWx1ZV90eXBlOwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAg
ICBjbGFzcyB2YWx1ZV9jb21wYXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1
ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG1h
cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgX0Nv
bXBhcmUgY29tcDsKICAgICAgICB2YWx1ZV9jb21wYXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9f
Yykge30KICAgICAgcHVibGljOgogICAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCB2YWx1ZV90
eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QKICAgICAgICB7IHJldHVybiBj
b21wKF9feC5maXJzdCwgX195LmZpcnN0KTsgfQogICAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5
cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAg
IF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlwZTsK
CiAgICBfUmVwX3R5cGUgX01fdDsKCiAgcHVibGljOgoKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICAgIHR5cGVk
ZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogICAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRvcjsKICAg
IHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbnN0
X3JldmVyc2VfaXRlcmF0b3I7CiMgMTQ0ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBtYXAoKSA6IF9NX3QoX0NvbXBh
cmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CgoKCgoKICAgIGV4cGxpY2l0CiAgICBtYXAoY29u
c3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv
cl90eXBlKCkpCiAgICAgIDogX01fdChfX2NvbXAsIF9fYSkgeyB9CiMgMTYxICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAg
ICBtYXAoY29uc3QgbWFwJiBfX3gpCiAgICAgIDogX01fdChfX3guX01fdCkgeyB9CiMgMTczICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21h
cC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG1hcChf
SW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgIDogX01f
dChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1
ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMTg5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgX0lucHV0SXRlcmF0b3I+CiAgICAgIG1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w
dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICBjb25zdCBfQ29tcGFyZSYgX19jb21wLCBjb25z
dCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfTV90KF9f
Y29tcCwgX19hKQogICAgICB7IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9
CiMgMjExICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX21hcC5oIiAzCiAgICBtYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbWFwJiBfX3gpCiAg
ICB7CiAgICAgIF9NX3QgPSBfX3guX01fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAg
ICBhbGxvY2F0b3JfdHlwZQogICAgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu
Z2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKCiAgICBpdGVyYXRvcgogICAgYmVnaW4oKSB7IHJldHVy
biBfTV90LmJlZ2luKCk7IH0KCgoKCgoKICAgIGNvbnN0X2l0ZXJhdG9yCiAgICBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCiAgICBpdGVyYXRvcgogICAgZW5kKCkg
eyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgog
ICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfcmV2
ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg
fQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVu
ZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICByZW5kKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAgbWF4X3NpemUoKSBjb25z
dCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIG1hcHBlZF90
eXBlJgogICAgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKQogICAgewoKICAgICAKCiAg
ICAgIGl0ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgICBpZiAoX19pID09IGVu
ZCgpIHx8IGtleV9jb21wKCkoX19rLCAoKl9faSkuZmlyc3QpKQogICAgICAgIF9faSA9IGluc2Vy
dChfX2ksIHZhbHVlX3R5cGUoX19rLCBtYXBwZWRfdHlwZSgpKSk7CiAgICAgIHJldHVybiAoKl9f
aSkuc2Vjb25kOwogICAgfQojIDMzOCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2lu
Y2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgcGFpcjxpdGVyYXRvcixib29sPgog
ICAgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0
X3VuaXF1ZShfX3gpOyB9CiMgMzYyICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgaW5zZXJ0KGl0
ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7IHJldHVybiBfTV90
Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KIyAzNzQgIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAgICBpbnNlcnQoX0lu
cHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KQogICAgICB7IF9NX3Qu
aW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgMzg4ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lk
CiAgICBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7
IH0KIyA0MDIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMv
Yml0cy9zdGxfbWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUm
IF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShfX3gpOyB9CiMgNDE1ICIvaG9tZS9iYW5nZXJ0aC9i
aW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lk
CiAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsgX01fdC5lcmFz
ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CiMgNDI5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICB2b2lkCiAgICBzd2FwKG1h
cCYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2b2lkCiAgICBjbGVh
cigpIHsgX01fdC5jbGVhcigpOyB9CgoKCgoKICAgIGtleV9jb21wYXJlCiAgICBrZXlfY29tcCgp
IGNvbnN0IHsgcmV0dXJuIF9NX3Qua2V5X2NvbXAoKTsgfQoKCgoKCiAgICB2YWx1ZV9jb21wYXJl
CiAgICB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9j
b21wKCkpOyB9CiMgNDY3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9j
KysvMy4zL2JpdHMvc3RsX21hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlf
dHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDQ4MSAiL2hvbWUvYmFuZ2Vy
dGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAg
Y29uc3RfaXRlcmF0b3IKICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QgeyByZXR1
cm4gX01fdC5maW5kKF9feCk7IH0KIyA0OTIgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXBy
ZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbWFwLmgiIDMKICAgIHNpemVfdHlwZQogICAgY291
bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX3QuZmluZChfX3gp
ID09IF9NX3QuZW5kKCkgPyAwIDogMTsgfQojIDUwNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0b3IKICAg
IGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91
bmQoX194KTsgfQojIDUyMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQo
X194KTsgfQojIDUzMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0
IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDU0MiAi
L2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9t
YXAuaCIgMwogICAgY29uc3RfaXRlcmF0b3IKICAgIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBl
JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7IH0KIyA1NjEg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxf
bWFwLmgiIDMKICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25z
dCBrZXlfdHlwZSYgX194KQogICAgeyByZXR1cm4gX01fdC5lcXVhbF9yYW5nZShfX3gpOyB9CiMg
NTgwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMv
c3RsX21hcC5oIiAzCiAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLGNvbnN0X2l0ZXJhdG9yPgogICAg
ZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIF9NX3Qu
ZXF1YWxfcmFuZ2UoX194KTsgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSzEsIHR5cGVuYW1l
IF9UMSwgdHlwZW5hbWUgX0MxLCB0eXBlbmFtZSBfQTE+CiAgICBmcmllbmQgYm9vbCBvcGVyYXRv
cj09IChjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogICAgdGVtcGxhdGUgPHR5cGVuYW1l
IF9LMSwgdHlwZW5hbWUgX1QxLCB0eXBlbmFtZSBfQzEsIHR5cGVuYW1lIF9BMT4KICAgIGZyaWVu
ZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbWFwPF9LMSxfVDEsX0MxLF9BMT4mLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNjAz
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3Rs
X21hcC5oIiAzCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj09KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVy
biBfX3guX01fdCA9PSBfX3kuX01fdDsgfQojIDYyMCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0z
LjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBl
bmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxs
b2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29t
cGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21w
YXJlLF9BbGxvYz4mIF9feSkKICAgIHsgcmV0dXJuIF9feC5fTV90IDwgX195Ll9NX3Q7IH0KCgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBt
YXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3ggPT0g
X195KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
cj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4g
X195IDwgX194OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0
eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9w
ZXJhdG9yPD0oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAg
ICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsg
cmV0dXJuICEoX195IDwgX194KTsgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVu
YW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi
b29sCiAgICBvcGVyYXRvcj49KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3gsCiAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf
X3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBf
S2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAg
ICBpbmxpbmUgdm9pZAogICAgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194
LCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyBfX3guc3dhcChfX3kp
OyB9Cn0KIyA2OCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMu
My9tYXAiIDIgMwojIDEgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjYgIi9ob21lL2JhbmdlcnRoL2Jpbi9n
Y2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwpuYW1lc3Bh
Y2Ugc3RkCnsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsCiAgICAg
ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlID0gbGVzczxfS2V5PiwKICAgICAgICAgICAgdHlwZW5h
bWUgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KICBjbGFzcyBt
dWx0aW1hcDsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5h
bWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f
eSk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9D
b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KTsKIyAx
MDQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9z
dGxfbXVsdGltYXAuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAs
IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBtdWx0aW1hcAog
IHsKCiAgIAogICAKCiAgcHVibGljOgogICAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogICAgdHlw
ZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2
YWx1ZV90eXBlOwogICAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgICBjbGFzcyB2
YWx1ZV9jb21wYXJlCiAgICAgIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2
YWx1ZV90eXBlLCBib29sPgogICAgICB7CiAgICAgICAgZnJpZW5kIGNsYXNzIG11bHRpbWFwPF9L
ZXksX1RwLF9Db21wYXJlLF9BbGxvYz47CiAgICAgIHByb3RlY3RlZDoKICAgICAgICBfQ29tcGFy
ZSBjb21wOwogICAgICAgIHZhbHVlX2NvbXBhcmUoX0NvbXBhcmUgX19jKSA6IGNvbXAoX19jKSB7
fQogICAgICBwdWJsaWM6CiAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUm
IF9feCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdAogICAgICAgIHsgcmV0dXJuIGNvbXAo
X194LmZpcnN0LCBfX3kuZmlyc3QpOyB9CiAgICB9OwoKICBwcml2YXRlOgoKICAgIHR5cGVkZWYg
X1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgX1NlbGVj
dDFzdDx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwoKICAgIF9S
ZXBfdHlwZSBfTV90OwoKICBwdWJsaWM6CgoKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6aXRlcmF0b3IgaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgdHlwZWRlZiB0eXBl
bmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICB0eXBlZGVmIHR5cGVuYW1l
IF9SZXBfdHlwZTo6cmV2ZXJzZV9pdGVyYXRvciByZXZlcnNlX2l0ZXJhdG9yOwogICAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKCgoKCgoKCiAgICBtdWx0aW1hcCgpIDogX01fdChfQ29tcGFyZSgpLCBhbGxv
Y2F0b3JfdHlwZSgpKSB7IH0KCgoKCgogICAgZXhwbGljaXQKICAgIG11bHRpbWFwKGNvbnN0IF9D
b21wYXJlJiBfX2NvbXAsIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlw
ZSgpKQogICAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgfQojIDE3NCAiL2hvbWUvYmFuZ2VydGgv
YmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAg
ICBtdWx0aW1hcChjb25zdCBtdWx0aW1hcCYgX194KQogICAgICA6IF9NX3QoX194Ll9NX3QpIHsg
fQojIDE4NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0lucHV0SXRlcmF0
b3I+CiAgICAgIG11bHRpbWFwKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9y
IF9fbGFzdCkKICAgICAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAg
ICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0KIyAyMDIgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGlt
YXAuaCIgMwogICAgdGVtcGxhdGUgPHR5cGVuYW1lIF9JbnB1dEl0ZXJhdG9yPgogICAgICBtdWx0
aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg
ICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFs
bG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICAgIDogX01fdChfX2Nv
bXAsIF9fYSkKICAgICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7IH0K
IyAyMjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogICAgbXVsdGltYXAmCiAgICBvcGVyYXRvcj0oY29uc3QgbXVs
dGltYXAmIF9feCkKICAgIHsKICAgICAgX01fdCA9IF9feC5fTV90OwogICAgICByZXR1cm4gKnRo
aXM7CiAgICB9CgoKICAgIGFsbG9jYXRvcl90eXBlCiAgICBnZXRfYWxsb2NhdG9yKCkgY29uc3Qg
eyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7IH0KCgoKCgoKICAgIGl0ZXJhdG9yCiAgICBi
ZWdpbigpIHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IK
ICAgIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICAgIGl0ZXJh
dG9yCiAgICBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9pdGVy
YXRvcgogICAgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQoKCgoKCgogICAgcmV2
ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoK
CgogICAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcgogICAgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4g
X01fdC5yYmVnaW4oKTsgfQoKCgoKCgogICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgcmVuZCgpIHsg
cmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAg
ICByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgoKICAgIGJvb2wKICAgIGVt
cHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Quc2l6ZSgpOyB9CgoKICAgIHNpemVfdHlwZQogICAg
bWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KIyAzMjUgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGlt
YXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsg
cmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7IH0KIyAzNDggIi9ob21lL2JhbmdlcnRoL2Jp
bi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAg
aXRlcmF0b3IKICAgIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBl
JiBfX3gpCiAgICB7IHJldHVybiBfTV90Lmluc2VydF9lcXVhbChfX3Bvc2l0aW9uLCBfX3gpOyB9
CiMgMzYwICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBfSW5wdXRJdGVyYXRv
cj4KICAgICAgdm9pZAogICAgICBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0
SXRlcmF0b3IgX19sYXN0KQogICAgICB7IF9NX3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFz
dCk7IH0KIyAzNzQgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z
LjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgZXJhc2UoaXRlcmF0b3IgX19w
b3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMzg4ICIvaG9tZS9iYW5nZXJ0
aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK
ICAgIHNpemVfdHlwZQogICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01f
dC5lcmFzZShfX3gpOyB9CiMgNDAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5j
bHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHZvaWQKICAgIGVyYXNlKGl0
ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9f
bGFzdCk7IH0KIyA0MTUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogICAgdm9pZAogICAgc3dhcChtdWx0aW1hcCYg
X194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgoKCgoKCiAgICB2b2lkCiAgICBjbGVhcigp
IHsgX01fdC5jbGVhcigpOyB9CgoKCgoKCiAgICBrZXlfY29tcGFyZQogICAga2V5X2NvbXAoKSBj
b25zdCB7IHJldHVybiBfTV90LmtleV9jb21wKCk7IH0KCgoKCgogICAgdmFsdWVfY29tcGFyZQog
ICAgdmFsdWVfY29tcCgpIGNvbnN0IHsgcmV0dXJuIHZhbHVlX2NvbXBhcmUoX01fdC5rZXlfY29t
cCgpKTsgfQojIDQ1NCAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysr
LzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBpdGVyYXRvcgogICAgZmluZChjb25zdCBr
ZXlfdHlwZSYgX194KSB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDQ2OCAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5o
IiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25z
dCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogICAgc2l6ZV90eXBlCiAgICBjb3Vu
dChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0K
IyA0OTAgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0
cy9zdGxfbXVsdGltYXAuaCIgMwogICAgaXRlcmF0b3IKICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtl
eV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsgfQojIDUwNCAiL2hv
bWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0
aW1hcC5oIiAzCiAgICBjb25zdF9pdGVyYXRvcgogICAgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5
cGUmIF9feCkgY29uc3QgeyByZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CgoKCgoKCiAg
ICBpdGVyYXRvcgogICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4g
X01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogICAgY29uc3RfaXRlcmF0b3IKICAgIHVw
cGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QudXBwZXJf
Ym91bmQoX194KTsgfQojIDUzNyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1
ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgICBwYWlyPGl0ZXJhdG9yLGl0ZXJh
dG9yPgogICAgZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5l
cXVhbF9yYW5nZShfX3gpOyB9CiMgNTUzICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUv
aW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICAgIHBhaXI8Y29uc3RfaXRl
cmF0b3IsY29uc3RfaXRlcmF0b3I+CiAgICBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSYgX194
KSBjb25zdCB7IHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7IH0KCiAgICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVuYW1lIF9DMSwgdHlwZW5hbWUgX0ExPgog
ICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0Ex
PiYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfSzEsX1QxLF9D
MSxfQTE+Jik7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0sxLCB0eXBlbmFtZSBfVDEsIHR5cGVu
YW1lIF9DMSwgdHlwZW5hbWUgX0ExPgogICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBt
dWx0aW1hcDxfSzEsX1QxLF9DMSxfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgbXVsdGltYXA8X0sxLF9UMSxfQzEsX0ExPiYpOwogIH07CiMgNTc1ICIvaG9tZS9iYW5nZXJ0
aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX211bHRpbWFwLmgiIDMK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy
ZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3Qg
bXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBj
b25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAg
IHJldHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKICAgIH0KIyA1OTQgIi9ob21lL2JhbmdlcnRo
L2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfbXVsdGltYXAuaCIgMwog
IHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJl
LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IG11
bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICBjb25z
dCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiBf
X3guX01fdCA8IF9feS5fTV90OyB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5h
bWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv
b2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX194LAogICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf
QWxsb2M+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA9PSBfX3kpOyB9CgoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg
X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5
LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8
X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gX195IDwgX194OyB9
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29t
cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29u
c3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7IHJl
dHVybiAhKF9feSA8IF9feCk7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfS2V5LCB0eXBlbmFt
ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v
bAogICAgb3BlcmF0b3I+PShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+
JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B
bGxvYz4mIF9feSkKICAgIHsgcmV0dXJuICEoX194IDwgX195KTsgfQoKCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9B
bGxvYz4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl
LF9BbGxvYz4mIF9feCwKICAgICAgICAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j
PiYgX195KQogICAgeyBfX3guc3dhcChfX3kpOyB9Cn0KIyA2OSAiL2hvbWUvYmFuZ2VydGgvYmlu
L2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9tYXAiIDIgMwojIDIxICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVy
LmgiIDIKCgoKCgpjbGFzcyBQYXJhbWV0ZXJIYW5kbGVyOwpjbGFzcyBNdWx0aXBsZVBhcmFtZXRl
ckxvb3A7CgoKCgpjbGFzcyBMb2dTdHJlYW07CgoKCgoKCgpuYW1lc3BhY2UgUGF0dGVybnMKewoK
CgoKICBjbGFzcyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCiAgICAgIHZpcnR1YWwg
flBhdHRlcm5CYXNlICgpOwoKCgoKCiAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCAoY29uc3Qgc3Rk
OjpzdHJpbmcgJnRlc3Rfc3RyaW5nKSBjb25zdCA9IDA7CgoKCgoKICAgICAgdmlydHVhbCBzdGQ6
OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBjb25zdCA9IDA7CiMgODUgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK
ICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0ID0gMDsKIyAxMjQgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1l
dGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0
aW9uICgpIGNvbnN0OwogIH07CiMgMTYxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgY2xhc3MgSW50ZWdl
ciA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKIyAxNzQgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRs
ZXIuaCIKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5faW50X3ZhbHVlOwojIDE4NiAiL2hvbWUv
YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJf
aGFuZGxlci5oIgogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9pbnRfdmFsdWU7CiMgMjAwICIv
aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFt
ZXRlcl9oYW5kbGVyLmgiCiAgICAgIEludGVnZXIgKGNvbnN0IGludCBsb3dlcl9ib3VuZCA9IG1p
bl9pbnRfdmFsdWUsCiAgICAgICAgICAgICAgIGNvbnN0IGludCB1cHBlcl9ib3VuZCA9IG1heF9p
bnRfdmFsdWUpOwoKCgoKCgoKICAgICAgdmlydHVhbCBib29sIG1hdGNoIChjb25zdCBzdGQ6OnN0
cmluZyAmdGVzdF9zdHJpbmcpIGNvbnN0OwojIDIyMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICB2
aXJ0dWFsIHN0ZDo6c3RyaW5nIGRlc2NyaXB0aW9uICgpIGNvbnN0OwojIDIzMiAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFu
ZGxlci5oIgogICAgICB2aXJ0dWFsIFBhdHRlcm5CYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAg
cHJpdmF0ZToKIyAyNDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgY29uc3QgaW50IGxvd2VyX2Jv
dW5kOwojIDI1NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBjb25zdCBpbnQgdXBwZXJfYm91bmQ7
CiAgfTsKIyAyOTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICBjbGFzcyBEb3VibGUgOiBwdWJsaWMgUGF0
dGVybkJhc2UKICB7CiAgICBwdWJsaWM6CiMgMzA4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIHN0
YXRpYyBjb25zdCBkb3VibGUgbWluX2RvdWJsZV92YWx1ZTsKIyAzMjAgIi9ob21lL2JhbmdlcnRo
L3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIu
aCIKICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhfZG91YmxlX3ZhbHVlOwojIDMzNCAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0
ZXJfaGFuZGxlci5oIgogICAgICBEb3VibGUgKGNvbnN0IGRvdWJsZSBsb3dlcl9ib3VuZCA9IG1p
bl9kb3VibGVfdmFsdWUsCiAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHVwcGVyX2JvdW5kID0g
bWF4X2RvdWJsZV92YWx1ZSk7CgoKCgoKCgogICAgICB2aXJ0dWFsIGJvb2wgbWF0Y2ggKGNvbnN0
IHN0ZDo6c3RyaW5nICZ0ZXN0X3N0cmluZykgY29uc3Q7CiMgMzU1ICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgi
CiAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24gKCkgY29uc3Q7CiMgMzY2ICIv
aG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFt
ZXRlcl9oYW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgUGF0dGVybkJhc2UgKiBjbG9uZSAoKSBjb25z
dDsKCiAgICBwcml2YXRlOgojIDM3OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBjb25zdCBkb3Vi
bGUgbG93ZXJfYm91bmQ7CiMgMzkxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIGNvbnN0IGRvdWJs
ZSB1cHBlcl9ib3VuZDsKICB9OwojIDQwOCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogIGNsYXNzIFNlbGVj
dGlvbiA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgoKICAgICAgU2Vs
ZWN0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmc2VxKTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgYm9v
bCBtYXRjaCAoY29uc3Qgc3RkOjpzdHJpbmcgJnRlc3Rfc3RyaW5nKSBjb25zdDsKIyA0MzUgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1l
dGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBzdGQ6OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBj
b25zdDsKIyA0NDYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAq
IGNsb25lICgpIGNvbnN0OwoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0
aW9uICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CiMgNDY0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAg
IHN0ZDo6c3RyaW5nIHNlcXVlbmNlOwogIH07CiMgNDg4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgY2xh
c3MgTXVsdGlwbGVTZWxlY3Rpb24gOiBwdWJsaWMgUGF0dGVybkJhc2UKICB7CiAgICBwdWJsaWM6
CgoKCgoKCiAgICAgIE11bHRpcGxlU2VsZWN0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmc2VxKTsK
CgoKCgoKCiAgICAgIHZpcnR1YWwgYm9vbCBtYXRjaCAoY29uc3Qgc3RkOjpzdHJpbmcgJnRlc3Rf
c3RyaW5nKSBjb25zdDsKIyA1MTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgICAgdmlydHVhbCBzdGQ6
OnN0cmluZyBkZXNjcmlwdGlvbiAoKSBjb25zdDsKIyA1MjYgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAg
ICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKCgoKCgogICAgICB1bnNp
Z25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0OwoKCgoKICAgICAgY2xhc3MgRXhj
Q29tbWFzTm90QWxsb3dlZCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHsgcHVibGljOiBFeGNDb21t
YXNOb3RBbGxvd2VkIChjb25zdCBpbnQgYTEpIDogYXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGND
b21tYXNOb3RBbGxvd2VkICgpIHRocm93ICgpIHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChz
dGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBvdXQgPDwgIkEgY29tbWEgd2FzIGZvdW5kIGF0IHBv
c2l0aW9uICIgPDwgYXJnMSA8PCAiIG9mIHlvdXIgaW5wdXQgc3RyaW5nLCBidXQgY29tbWFzIGFy
ZSBub3QgYWxsb3dlZCBoZXJlLiIgPDwgc3RkOjplbmRsOyB9OyBwcml2YXRlOiBjb25zdCBpbnQg
YXJnMTsgfTsKCgoKCiAgICBwcml2YXRlOgojIDU1MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAgICBz
dGQ6OnN0cmluZyBzZXF1ZW5jZTsKICB9OwoKCgoKCgoKICBjbGFzcyBCb29sIDogcHVibGljIFNl
bGVjdGlvbgogIHsKICAgIHB1YmxpYzoKCgoKICAgICAgQm9vbCAoKTsKIyA1NzggIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh
bmRsZXIuaCIKICAgICAgdmlydHVhbCBQYXR0ZXJuQmFzZSAqIGNsb25lICgpIGNvbnN0OwogIH07
CgoKCgoKICBjbGFzcyBBbnl0aGluZyA6IHB1YmxpYyBQYXR0ZXJuQmFzZQogIHsKICAgIHB1Ymxp
YzoKCgoKCgoKCiAgICAgIEFueXRoaW5nICgpOwoKCgoKCgogICAgICB2aXJ0dWFsIGJvb2wgbWF0
Y2ggKGNvbnN0IHN0ZDo6c3RyaW5nICZ0ZXN0X3N0cmluZykgY29uc3Q7CiMgNjExICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9o
YW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgc3RkOjpzdHJpbmcgZGVzY3JpcHRpb24gKCkgY29uc3Q7
CiMgNjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3BhcmFtZXRlcl9oYW5kbGVyLmgiCiAgICAgIHZpcnR1YWwgUGF0dGVybkJhc2UgKiBjbG9u
ZSAoKSBjb25zdDsKICB9Owp9OwojIDEwNTkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2Rl
YWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKY2xhc3MgUGFyYW1l
dGVySGFuZGxlcgp7CiAgcHJpdmF0ZToKCgoKCiAgICBQYXJhbWV0ZXJIYW5kbGVyKGNvbnN0IFBh
cmFtZXRlckhhbmRsZXImKTsKCgoKCgogICAgUGFyYW1ldGVySGFuZGxlciYgb3BlcmF0b3I9KGNv
bnN0IFBhcmFtZXRlckhhbmRsZXImKTsKCiAgcHVibGljOgoKCgoKICAgIGVudW0gT3V0cHV0U3R5
bGUgewogICAgICAgICAgVGV4dCwgTGFUZVgsIEhUTUwKICAgIH07CgoKCgoKCiAgICBQYXJhbWV0
ZXJIYW5kbGVyICgpOwoKCgoKCgoKICAgIHZpcnR1YWwgflBhcmFtZXRlckhhbmRsZXIgKCk7CgoK
CgoKCgogICAgdmlydHVhbCBib29sIHJlYWRfaW5wdXQgKHN0ZDo6aXN0cmVhbSAmaW5wdXQpOwoj
IDExMTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIHZpcnR1YWwgYm9vbCByZWFkX2lucHV0IChjb25z
dCBzdGQ6OnN0cmluZyAmZmlsZW5hbWUpOwojIDExMjUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIHZp
cnR1YWwgYm9vbCByZWFkX2lucHV0X2Zyb21fc3RyaW5nIChjb25zdCBjaGFyICpzKTsKCgoKCgog
ICAgYm9vbCBvayAoKSBjb25zdDsKCgoKCiAgICB2b2lkIGNsZWFyICgpOwojIDExNTAgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVy
X2hhbmRsZXIuaCIKICAgIGJvb2wgZGVjbGFyZV9lbnRyeSAoY29uc3Qgc3RkOjpzdHJpbmcgJmVu
dHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAmZGVmYXVs
dF92YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgUGF0dGVybnM6OlBhdHRl
cm5CYXNlICZwYXR0ZXJuID0gUGF0dGVybnM6OkFueXRoaW5nKCkpOwoKCgoKCiAgICB2b2lkIGVu
dGVyX3N1YnNlY3Rpb24gKGNvbnN0IHN0ZDo6c3RyaW5nICZzdWJzZWN0aW9uKTsKCgoKCgoKCiAg
ICBib29sIGxlYXZlX3N1YnNlY3Rpb24gKCk7CiMgMTE3OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgogICAg
Y29uc3Qgc3RkOjpzdHJpbmcgJiBnZXQgKGNvbnN0IHN0ZDo6c3RyaW5nICZlbnRyeV9zdHJpbmcp
IGNvbnN0OwoKCgoKCiAgICBsb25nIGludCBnZXRfaW50ZWdlciAoY29uc3Qgc3RkOjpzdHJpbmcg
JmVudHJ5X3N0cmluZykgY29uc3Q7CgoKCgoKICAgIGRvdWJsZSBnZXRfZG91YmxlIChjb25zdCBz
dGQ6OnN0cmluZyAmZW50cnlfc3RyaW5nKSBjb25zdDsKCgoKCgogICAgYm9vbCBnZXRfYm9vbCAo
Y29uc3Qgc3RkOjpzdHJpbmcgJmVudHJ5X3N0cmluZykgY29uc3Q7CiMgMTIxMyAiL2hvbWUvYmFu
Z2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFu
ZGxlci5oIgogICAgc3RkOjpvc3RyZWFtICYgcHJpbnRfcGFyYW1ldGVycyAoc3RkOjpvc3RyZWFt
ICZvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRT
dHlsZSBzdHlsZSk7CgoKCgoKCiAgICB2b2lkIHByaW50X3BhcmFtZXRlcnNfc2VjdGlvbiAoc3Rk
Ojpvc3RyZWFtICZvdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
T3V0cHV0U3R5bGUgc3R5bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgaW50IGluZGVudF9sZXZlbCk7CiMgMTIzMiAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS9wYXJhbWV0ZXJfaGFuZGxlci5oIgog
ICAgdm9pZCBsb2dfcGFyYW1ldGVycyAoTG9nU3RyZWFtJiBvdXQpOwojIDEyNDEgIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh
bmRsZXIuaCIKICAgIHZvaWQgbG9nX3BhcmFtZXRlcnNfc2VjdGlvbiAoTG9nU3RyZWFtJiBvdXQp
OwoKCgoKCgoKICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7CgoK
CgogICAgY2xhc3MgRXhjRW50cnlBbHJlYWR5RXhpc3RzIDogcHVibGljIEV4Y2VwdGlvbkJhc2Ug
eyBwdWJsaWM6IEV4Y0VudHJ5QWxyZWFkeUV4aXN0cyAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDog
YXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNFbnRyeUFscmVhZHlFeGlzdHMgKCkgdGhyb3cgKCkg
e307IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91
dCA8PCAiVGhlIGZvbGxvd2luZyBlbnRyeSBhbHJlYWR5IGV4aXN0czogIiA8PCBhcmcxIDw8IHN0
ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsgfTsKCgoKCgogICAg
Y2xhc3MgRXhjRGVmYXVsdERvZXNOb3RNYXRjaFBhdHRlcm4gOiBwdWJsaWMgRXhjZXB0aW9uQmFz
ZSB7IHB1YmxpYzogRXhjRGVmYXVsdERvZXNOb3RNYXRjaFBhdHRlcm4gKGNvbnN0IHN0ZDo6c3Ry
aW5nIGExLCBjb25zdCBzdGQ6OnN0cmluZyBhMikgOiBhcmcxIChhMSksIGFyZzIoYTIpIHt9OyB2
aXJ0dWFsIH5FeGNEZWZhdWx0RG9lc05vdE1hdGNoUGF0dGVybiAoKSB0aHJvdyAoKSB7fTsgdmly
dHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0IHsgb3V0IDw8ICJU
aGUgZGVmYXVsdCBzdHJpbmcgPCIgPDwgYXJnMSA8PCAiPiBkb2VzIG5vdCBtYXRjaCB0aGUgZ2l2
ZW4gcGF0dGVybiA8IiA8PCBhcmcyIDw8ICI+IiA8PCBzdGQ6OmVuZGw7IH07IHByaXZhdGU6IGNv
bnN0IHN0ZDo6c3RyaW5nIGFyZzE7IGNvbnN0IHN0ZDo6c3RyaW5nIGFyZzI7IH07CgoKCgoKCiAg
ICBjbGFzcyBFeGNBbHJlYWR5QXRUb3BMZXZlbCA6IHB1YmxpYyBFeGNlcHRpb25CYXNlIHt9OwoK
CgogICAgY2xhc3MgRXhjRW50cnlVbmRlY2xhcmVkIDogcHVibGljIEV4Y2VwdGlvbkJhc2UgeyBw
dWJsaWM6IEV4Y0VudHJ5VW5kZWNsYXJlZCAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDogYXJnMSAo
YTEpIHt9OyB2aXJ0dWFsIH5FeGNFbnRyeVVuZGVjbGFyZWQgKCkgdGhyb3cgKCkge307IHZpcnR1
YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8PCAiWW91
IGNhbnQgYXNrIGZvciBlbnRyeSA8IiA8PCBhcmcxIDw8ICI+IHlvdSBoYXZlIG5vdCB5ZXQgZGVj
bGFyZWQiIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsg
fTsKCgoKCgogICAgY2xhc3MgRXhjQ29udmVyc2lvbkVycm9yIDogcHVibGljIEV4Y2VwdGlvbkJh
c2UgeyBwdWJsaWM6IEV4Y0NvbnZlcnNpb25FcnJvciAoY29uc3Qgc3RkOjpzdHJpbmcgYTEpIDog
YXJnMSAoYTEpIHt9OyB2aXJ0dWFsIH5FeGNDb252ZXJzaW9uRXJyb3IgKCkgdGhyb3cgKCkge307
IHZpcnR1YWwgdm9pZCBQcmludEluZm8gKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdCB7IG91dCA8
PCAiRXJyb3Igd2hlbiB0cnlpbmcgdG8gY29udmVydCB0aGUgZm9sbG93aW5nIHN0cmluZzogIiA8
PCBhcmcxIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3Qgc3RkOjpzdHJpbmcgYXJnMTsg
fTsKCgoKICBwcml2YXRlOgoKCgogICAgYm9vbCBzdGF0dXM7CgoKCgoKCgogICAgc3RydWN0IFNl
Y3Rpb24KICAgIHsKICAgICAgICB+U2VjdGlvbiAoKTsKCiAgICAgICAgdHlwZWRlZiBzdGQ6Om1h
cDxzdGQ6OnN0cmluZywgc3RkOjpwYWlyPHN0ZDo6c3RyaW5nLFBhdHRlcm5zOjpQYXR0ZXJuQmFz
ZSo+ID4gRW50cnlUeXBlOwoKICAgICAgICBFbnRyeVR5cGUgZW50cmllczsKICAgICAgICBzdGQ6
Om1hcDxzdGQ6OnN0cmluZywgU2VjdGlvbio+IHN1YnNlY3Rpb25zOwojIDEzMTggIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh
bmRsZXIuaCIKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uICgpIGNvbnN0
OwogICAgfTsKCgoKCgoKICAgIHN0ZDo6dmVjdG9yPHN0ZDo6c3RyaW5nPiBzdWJzZWN0aW9uX3Bh
dGg7CgoKCgoKCiAgICBTZWN0aW9uIGRlZmF1bHRzOwojIDEzNDYgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIK
ICAgIFNlY3Rpb24gY2hhbmdlZF9lbnRyaWVzOwojIDEzNjkgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAg
IGJvb2wgc2Nhbl9saW5lIChzdGQ6OnN0cmluZyBsaW5lLAogICAgICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBsaW5lbm8pOwojIDEzNzkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hhbmRsZXIuaCIKICAgIFNl
Y3Rpb24qIGdldF9wcmVzZW50X2RlZmF1bHRzX3N1YnNlY3Rpb24gKCk7CgoKCgogICAgY29uc3Qg
U2VjdGlvbiogZ2V0X3ByZXNlbnRfZGVmYXVsdHNfc3Vic2VjdGlvbiAoKSBjb25zdDsKCgoKCgoK
ICAgIFNlY3Rpb24qIGdldF9wcmVzZW50X2NoYW5nZWRfc3Vic2VjdGlvbiAoKTsKCgoKCiAgICBj
b25zdCBTZWN0aW9uKiBnZXRfcHJlc2VudF9jaGFuZ2VkX3N1YnNlY3Rpb24gKCkgY29uc3Q7Cgog
ICAgZnJpZW5kIGNsYXNzIE11bHRpcGxlUGFyYW1ldGVyTG9vcDsKfTsKIyAxNjIwICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3BhcmFtZXRlcl9o
YW5kbGVyLmgiCmNsYXNzIE11bHRpcGxlUGFyYW1ldGVyTG9vcCA6IHB1YmxpYyBQYXJhbWV0ZXJI
YW5kbGVyCnsKICBwdWJsaWM6CgoKCgogICAgY2xhc3MgVXNlckNsYXNzCiAgICB7CiAgICAgIHB1
YmxpYzoKCgoKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjcmVhdGVfbmV3IChjb25zdCB1bnNpZ25l
ZCBpbnQgcnVuTm8pID0gMDsKCgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZV9wYXJh
bWV0ZXJzIChQYXJhbWV0ZXJIYW5kbGVyICZwcm0pID0gMDsKCgoKCgogICAgICAgIHZpcnR1YWwg
dm9pZCBydW4gKFBhcmFtZXRlckhhbmRsZXIgJnBybSkgPSAwOwogICAgfTsKCgoKCiAgICBNdWx0
aXBsZVBhcmFtZXRlckxvb3AgKCk7CgoKCgoKCgogICAgdmlydHVhbCB+TXVsdGlwbGVQYXJhbWV0
ZXJMb29wICgpOwoKCgoKCiAgICB2aXJ0dWFsIGJvb2wgcmVhZF9pbnB1dCAoc3RkOjppc3RyZWFt
ICZJbnB1dCk7CgoKCgoKICAgIHZpcnR1YWwgYm9vbCByZWFkX2lucHV0IChjb25zdCBzdGQ6OnN0
cmluZyAmRmlsZU5hbWUpOwoKCgoKCgogICAgdmlydHVhbCBib29sIHJlYWRfaW5wdXRfZnJvbV9z
dHJpbmcgKGNvbnN0IGNoYXIgKnMpOwoKCgoKICAgIHZvaWQgbG9vcCAoVXNlckNsYXNzICZ1Yyk7
CgoKCgoKCgogICAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoKSBjb25zdDsKCiAg
cHJpdmF0ZToKCgoKCgogICAgY2xhc3MgRW50cnkKICAgIHsKICAgICAgcHVibGljOgoKCgoKCgoK
ICAgICAgZW51bSBNdWx0aXBsZUVudHJ5VHlwZQogICAgICB7CiAgICAgICAgdmFyaWFudCwgYXJy
YXkKICAgICAgfTsKCgoKCiAgICAgICAgRW50cnkgKCkge307CgoKCgoKCgogICAgICAgIEVudHJ5
IChjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJlBhdGgsCiAgICAgICAgICAgICAgIGNv
bnN0IHN0ZDo6c3RyaW5nICZOYW1lLAogICAgICAgICAgICAgICBjb25zdCBzdGQ6OnN0cmluZyAm
VmFsdWUpOwoKCgoKCiAgICAgICAgdm9pZCBzcGxpdF9kaWZmZXJlbnRfdmFsdWVzICgpOwoKCgoK
ICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gc3Vic2VjdGlvbl9wYXRoOwoKCgoKICAg
ICAgICBzdGQ6OnN0cmluZyBlbnRyeV9uYW1lOwoKCgoKICAgICAgICBzdGQ6OnN0cmluZyBlbnRy
eV92YWx1ZTsKCgoKCgoKICAgICAgICBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gZGlmZmVyZW50
X3ZhbHVlczsKCgoKCgogICAgICAgIE11bHRpcGxlRW50cnlUeXBlIHR5cGU7CgoKCgoKCgogICAg
ICAgIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKCkgY29uc3Q7CiAgICB9OwoKCgoK
ICAgIHN0ZDo6dmVjdG9yPEVudHJ5PiBtdWx0aXBsZV9jaG9pY2VzOwojIDE3ODggIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvcGFyYW1ldGVyX2hh
bmRsZXIuaCIKICAgIHVuc2lnbmVkIGludCBuX2JyYW5jaGVzOwoKCgoKCgogICAgdm9pZCBpbml0
X2JyYW5jaGVzICgpOwoKCgoKCiAgICB2b2lkIGluaXRfYnJhbmNoZXNfc2VjdGlvbiAoY29uc3Qg
UGFyYW1ldGVySGFuZGxlcjo6U2VjdGlvbiAmc2VjKTsKCgoKCgogICAgdm9pZCBmaWxsX2VudHJ5
X3ZhbHVlcyAoY29uc3QgdW5zaWduZWQgaW50IHJ1bl9ubyk7Cn07CgoKCgppbmxpbmUKYm9vbApQ
YXJhbWV0ZXJIYW5kbGVyOjpvaygpIGNvbnN0CnsKICByZXR1cm4gc3RhdHVzOwp9CiMgMTcgInNv
dXJjZS9kYXRhX291dF9iYXNlLmNjIiAyCiMgMSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIiAxCiMgMjAgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk
X21hbmFnZW1lbnQuaCIKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVk
ZS9jKysvMy4zL3V0aWxpdHkiIDEgMwojIDY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL3V0aWxpdHkiIDMKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9yZWxvcHMuaCIgMSAzCiMgNzQgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcmVs
b3BzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgbmFtZXNwYWNlIHJlbF9vcHMKICB7CiMgOTAgIi9o
b21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfcmVs
b3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoj
IDEwMyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9yZWxvcHMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRv
cj4oY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsK
fQojIDExNiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9i
aXRzL3N0bF9yZWxvcHMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVy
YXRvcjw9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feSA8
IF9feCk7Cn0KIyAxMjkgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4g
IShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL3V0aWxpdHkiIDIgMwojIDIxICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiIDIK
CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9pdGVy
YXRvciIgMSAzCiMgNjUgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2Mr
Ky8zLjMvaXRlcmF0b3IiIDMKCgoKCgoKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDEgMwojIDQzICIvaG9tZS9iYW5nZXJ0aC9iaW4v
Z2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDMKCgoKCm5hbWVzcGFjZSBzdGQK
ewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz
cyBiYXNpY19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0
cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAg
ICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlw
ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0
eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRz
IHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry
YWl0cz4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBf
VHJhaXRzPiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf
VHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9y
PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dl
dDxfQ2hhclQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVm
IGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVh
bXNpemUgX01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2lj
X2lzdHJlYW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmlu
aXQoX19zYik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAg
ICAgdmlydHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3Ry
ZWFtc2l6ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNl
bnRyeTsKCgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFt
X3R5cGUmICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYK
ICAgICAgb3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAg
ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3Nf
YmFzZSYpKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBf
X24pOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7
CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYg
X19uKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsK
CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7Cgog
ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24p
OwoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19u
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcg
bG9uZyYgX19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9h
dCYgX19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYg
X19mKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91Ymxl
JiBfX2YpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9f
cCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90
eXBlKiBfX3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkg
Y29uc3QKICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBn
ZXQodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19j
KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVh
bXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5
cGUmCiAgICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0
dXJuIHRoaXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lz
dHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBf
X2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFt
YnVmX3R5cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRl
bignXG4nKSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlw
ZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5l
IF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl
IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4o
J1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUg
X19uID0gMSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBp
bnRfdHlwZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJl
YWQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAg
ICAgcmVhZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0
cmVhbV90eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFt
X3R5cGUmCiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7Cgog
ICAgICBwb3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgog
ICAgICBzZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2co
b2ZmX3R5cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1l
IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0
cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh
aXRzPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2Vu
dHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdz
ID0gZmFsc2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAg
cHJpdmF0ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwg
X0NoYXJUJiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh
bTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJh
aXRzPiYgX19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4K
ICAgIGJhc2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz
dHJlYW08Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVy
biAoX19pbiA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0
eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
PiYgX19pbiwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNo
YXIsX1RyYWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2lu
ID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9U
cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsg
cmV0dXJuIChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19p
b3N0cmVhbQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAg
ICBwdWJsaWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6
CgoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh
aXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpv
ZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgog
ICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlw
ZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFt
X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1i
dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwg
X19vc3RyZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNp
Y19pb3N0cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw
ZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdz
KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9pc3RyZWFtLnRj
YyIgMSAzCiMgMzYgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8z
LjMvYml0cy9pc3RyZWFtLnRjYyIgMwoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlw
ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5nb29kKCkp
CiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9faW4udGll
KCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxhZ3MoKSAm
IGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgX19p
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50X3R5cGUg
X19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hlY2tfZmFj
ZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2luLl9N
X2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkpCiAgICAg
ICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAgIGlmICh0
cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAgICBfX2lu
LnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgIH0KCiAg
ICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVsc2UKICAg
ICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRzdGF0ZShp
b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihf
X2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAgICBfX3Bm
KCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihf
X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2Um
ICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVh
bTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAgewogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAg
ewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z
dGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0
ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D
aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg
b3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBm
YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjpp
b3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsKICAgICAg
ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBf
TV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAgICAgICAg
ICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAgICAgICYm
IChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAgICAgICAg
ICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAgICAgICAg
ICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fZXJyIHw9
IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu
YW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNp
Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9y
dCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm
IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl
Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp
CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg
X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K
ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp
ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg
ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz
OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy
VCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5
IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l
cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg
bG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQog
ICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9f
bCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQogICAg
ICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19sCiAgICAg
ICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpKQog
ICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19m
YWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz
ZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19i
YXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQog
ICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1
bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up
OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7
CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0
ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N
X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp
cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg
ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg
ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg
ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw
KQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJl
dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAgewog
ICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg
ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6
aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAg
ICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAg
ICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAg
ICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNo
KGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5z
ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2Vw
dGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsK
ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1w
bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFt
PF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Ogog
ICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl
cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0
cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g
aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf
TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl
dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0
YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl
OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh
c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg
ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihs
b25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwog
ICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShp
b3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2Zu
dW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywg
X19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYgX19u
KQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2Nl
cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp
b3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29k
Yml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAg
ICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsK
ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAg
ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo
aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg
ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg
fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U
cmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9f
Y2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg
IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIg
PSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+
Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f
ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh
c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4o
ZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9z
X2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVt
Z2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9f
ZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAg
ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog
ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg
ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg
ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g
KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0
cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAgICB7
CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAg
ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNl
Ojppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwog
ICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAg
ICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0
Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt
PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj
ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93
OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl
bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6
CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo
aXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jh
c2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVj
a19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhp
cywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9f
ZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg
ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi
aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh
ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg
fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3RyZWFt
YnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxz
ZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAgICAgICAg
ICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgIF9f
c3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgICAg
ICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91dCk7CiAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9feHRyY3Qp
CiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAg
ICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAg
ICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
ICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFp
dHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIGdl
dCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjpl
b2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0gdGhpcy0+
cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmVxX2lu
dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m
Yml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChl
eGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRp
b25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAg
ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRl
PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No
YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBn
ZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRy
eSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg
ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2Yg
PSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2YWwgPSB0
aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6
ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5
cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8
IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0
aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl
KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp
ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg
ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5
cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQo
Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsK
ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg
ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRf
dHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0
c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp
cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK
ICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAgICAgICAg
ICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAg
ICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxpbSkpCiAg
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBlOjp0
b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7
CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAg
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgfQog
ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg
ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm
ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg
ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0gY2hhcl90
eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg
X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KF9f
c3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAgICBfTV9n
Y291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f
Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVs
aW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVv
ZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRoaXMtPnJk
YnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0YygpOwog
ICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShf
X2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2Ms
IF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl
KF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFf
aW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0gX190aGlz
X3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBlOjp0b19j
aGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRz
X3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0
c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4
Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz
dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv
bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg
ICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog
IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz
dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz
Pjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBl
IF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIo
KnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0gPSB0cmFp
dHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEgPCBfX24K
ICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9f
ZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
YywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysg
PSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywg
X19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7
CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBp
ZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAgICAgICAg
ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBjYXRj
aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+
c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNl
cHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7
CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKICAgICAg
aWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp
OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg
dHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAg
IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFtc2l6ZSBf
X24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl
bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+IDApCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBp
bnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVh
bWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBf
X2M7CgogICAgICAgICAgICAgIF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNp
emU+OjptYXgoKSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbgogICAgICAg
ICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYyA9IF9fc2ItPnNi
dW1wYygpLCBfX2VvZikpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01f
Z2NvdW50OwogICAgICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9f
YywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy
biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlw
ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAg
IHsKICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291
bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2Vy
YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1
ZigpLT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg
ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7
CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0
KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg
ICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h
bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj
X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl
YW1zaXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy
YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5
CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfTV9nY291bnQgPSB0aGlzLT5yZGJ1ZigpLT5z
Z2V0bihfX3MsIF9fbik7CiAgICAgICAgICAgICAgaWYgKF9NX2djb3VudCAhPSBfX24pCiAgICAg
ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZh
aWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK
ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6
YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg
ICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7
CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0
eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
IF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK
ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1
ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gdGhpcy0+cmRidWYoKS0+aW5fYXZh
aWwoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPiAwKQogICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICBfX251bSA9IG1pbihfX251bSwgX19uKTsKICAgICAgICAgICAgICAgICAg
aWYgKF9fbnVtKQogICAgICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IHRoaXMtPnJkYnVmKCkt
PnNnZXRuKF9fcywgX19udW0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAg
ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK
CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg
ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog
ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK
ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBf
TV9nY291bnQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry
YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl
YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAg
ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg
IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5
cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZf
dHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAg
ICAgICAgICAgICAgIHx8IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zcHV0YmFja2Mo
X19jKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh
ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog
ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk
Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi
YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg
IH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5
cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi
YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdW5nZXQodm9pZCkKICAgIHsKICAg
ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg
IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAg
ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAg
ICAgICBpZiAoIV9fc2IKICAgICAgICAgICAgICAgICAgfHwgdHJhaXRzX3R5cGU6OmVxX2ludF90
eXBlKF9fc2ItPnN1bmdldGMoKSwgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh
dGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2Vw
dGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0
ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMo
KSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAg
ICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbnQKICAgIGJhc2ljX2lzdHJlYW08
X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzeW5jKHZvaWQpCiAgICB7CiAgICAgIGludCBfX3JldCA9
IC0xOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVl
KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg
ewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwog
ICAgICAgICAgICAgIGlmIChfX3NiKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICBpZiAoX19zYi0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNl
dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgX19yZXQgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAg
ICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAg
ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYg
KCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAg
ICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsK
ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg
dHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz
aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHRlbGxnKHZvaWQpCiAgICB7CiAgICAg
IHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBfTV9nY291bnQgPSAwOwogICAg
ICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7
CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgX19yZXQgPSB0aGlzLT5y
ZGJ1ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjppbik7CiAgICAg
ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7
CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg
ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp
CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0
dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0
cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKHBvc190eXBlIF9fcG9zKQogICAgewog
ICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAg
ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewoKCiAg
ICAgICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJzZWVrcG9zKF9f
cG9zLCBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBl
KG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6
ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFp
bCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFz
ZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAg
ICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No
YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+
JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNlZWtnKG9mZl90eXBl
IF9fb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBfX2RpcikKICAgIHsKICAgICAgX01fZ2NvdW50ID0g
MDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg
ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190
eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kaXIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19i
YXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUo
LTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK
CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAg
ICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK
ICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQp
ICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAg
ICAgcmV0dXJuICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl
bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19j
KQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lz
dHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIo
X19pbiwgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQog
ICAgICAgICAgICB7IF9faW4uZ2V0KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg
X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3Nf
YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K
ICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls
Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK
ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh
clQqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0
cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6
Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt
ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90
eXBlOwogICAgICB0eXBlZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJl
YW1zaXplIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz
ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg
ICAgICAgICB0cnkKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVt
ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAg
ICAgICAgX19udW0gPSBudW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAg
ICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5
cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g
X1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9f
aW4ucmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoK
ICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX251bSAtIDEKICAgICAgICAgICAg
ICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNl
LCBfX2MpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSBfX2M7
CiAgICAgICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7CiAgICAgICAgICAgICAgICAgIF9fYyA9
IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChfX2Mg
PT0gX19lb2YpCiAgICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQp
OwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsKCiAgICAgICAgICAgICAgX19p
bi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh
aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6
OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2luLmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl
OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg
ICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19i
YXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl
bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxf
VHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2luKQogICAg
ewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1f
dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19zdHJlYW1idWZf
dHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90
eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f
aXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgY29uc3QgX19jdHlwZV90
eXBlJiBfX2N0eXBlID0gdXNlX2ZhY2V0PF9fY3R5cGVfdHlwZT4oX19pbi5nZXRsb2MoKSk7CiAg
ICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19zdHJl
YW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgX19pbnRfdHlwZSBfX2MgPSBf
X3NiLT5zZ2V0YygpOwoKICAgICAgd2hpbGUgKF9fYyAhPSBfX2VvZiAmJiBfX2N0eXBlLmlzKGN0
eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAg
ICBpZiAoX19jID09IF9fZW9mKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJp
dCk7CgogICAgICByZXR1cm4gX19pbjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxf
Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry
YWl0cz4mIF9faW4sCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs
IF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJU
LCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJl
YW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz
dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl
ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog
ICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJp
bmdfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUg
X19zaXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fZXh0cmFjdGVkID0gMDsKCiAgICAgIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAg
aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBfX3N0ci5lcmFzZSgpOwogICAgICAgICAg
c3RyZWFtc2l6ZSBfX3cgPSBfX2luLndpZHRoKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX247
CiAgICAgICAgICBfX24gPSBfX3cgPiAwID8gc3RhdGljX2Nhc3Q8X19zaXplX3R5cGU+KF9fdykg
OiBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSYgX19jdHlw
ZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4uZ2V0bG9jKCkpOwogICAgICAgICAgY29u
c3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX19zdHJlYW1i
dWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYoKTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0g
X19zYi0+c2dldGMoKTsKCiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBfX24KICAgICAg
ICAgICAgICAgICAmJiBfX2MgIT0gX19lb2YgJiYgIV9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6c3Bh
Y2UsIF9fYykpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0
b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAg
ICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19j
ID09IF9fZW9mKQogICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwog
ICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2V4dHJhY3Rl
ZCkKICAgICAgICBfX2luLnNldHN0YXRlIChpb3NfYmFzZTo6ZmFpbGJpdCk7CgogICAgICByZXR1
cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh
aXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m
CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zdHIsIF9DaGFy
VCBfX2RlbGltKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh
aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw
ZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1f
dHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIHR5
cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0
eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw
ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl
X3R5cGU7CgogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9IDA7CiAgICAgIGJvb2wgX190
ZXN0ZGVsaW0gPSBmYWxzZTsKICAgICAgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBf
X2NlcmIoX19pbiwgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg
X19zdHIuZXJhc2UoKTsKICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbiA9IF9fc3RyLm1heF9zaXpl
KCk7CgogICAgICAgICAgX19pbnRfdHlwZSBfX2lkZWxpbSA9IF9UcmFpdHM6OnRvX2ludF90eXBl
KF9fZGVsaW0pOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IF9faW4ucmRidWYo
KTsKICAgICAgICAgIF9faW50X3R5cGUgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICBj
b25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICBfX3Rlc3Rk
ZWxpbSA9IF9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwoKICAgICAgICAgIHdo
aWxlIChfX2V4dHJhY3RlZCA8PSBfX24KICAgICAgICAgICAgICAgICAmJiAhX1RyYWl0czo6ZXFf
aW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAmJiAhX190ZXN0ZGVsaW0pCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0ciArPSBfVHJhaXRzOjp0b19jaGFyX3R5cGUo
X19jKTsKICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAgICAgIF9fYyA9IF9f
c2ItPnNidW1wYygpOwogICAgICAgICAgICAgIF9fdGVzdGRlbGltID0gX1RyYWl0czo6ZXFfaW50
X3R5cGUoX19jLCBfX2lkZWxpbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfVHJhaXRz
OjplcV9pbnRfdHlwZShfX2MsIF9fZW9mKSkKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf
YmFzZTo6ZW9mYml0KTsKICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQgJiYgIV9fdGVz
dGRlbGltKQogICAgICAgIF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICBy
ZXR1cm4gX19pbjsKICAgIH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRz
LCBjbGFzcyBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4m
CiAgICBnZXRsaW5lKGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwKICAgICAg
ICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fc3RyKQogICAgeyBy
ZXR1cm4gZ2V0bGluZShfX2luLCBfX3N0ciwgX19pbi53aWRlbignXG4nKSk7IH0KCgoKCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRl
IGlzdHJlYW0mIHdzKGlzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0
b3I+Pihpc3RyZWFtJiwgY2hhciYpOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiBvcGVyYXRv
cj4+KGlzdHJlYW0mLCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9y
Pj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYg
b3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0
cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgdW5zaWduZWQgY2hhciopOwogIGV4dGVybiB0ZW1w
bGF0ZSBpc3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBzaWduZWQgY2hhciopOwoKCiAgZXh0
ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lzdHJlYW08d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs
YXRlIHdpc3RyZWFtJiB3cyh3aXN0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYg
b3BlcmF0b3I+Pih3aXN0cmVhbSYsIHdjaGFyX3QmKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJl
YW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Kik7Cgp9CiMgMjk4ICIvaG9tZS9iYW5n
ZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2lzdHJlYW0iIDIgMwojIDcyICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2l0ZXJhdG9yIiAy
IDMKIyAxICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2Jp
dHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDEgMwojIDM5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RyZWFtX2l0ZXJhdG9yLmgiIDMKCm5hbWVzcGFj
ZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NoYXJUID0gY2hhciwK
ICAgICAgICAgICB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwgdHlwZW5h
bWUgX0Rpc3QgPSBwdHJkaWZmX3Q+CiAgICBjbGFzcyBpc3RyZWFtX2l0ZXJhdG9yCiAgICAgIDog
cHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX1RwLCBfRGlzdCwgY29uc3QgX1Rw
KiwgY29uc3QgX1RwJj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hh
cl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYg
YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgICBwcml2YXRl
OgogICAgICBpc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICAgICAgX1RwIF9NX3ZhbHVlOwogICAg
ICBib29sIF9NX29rOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01f
c3RyZWFtKDApLCBfTV9vayhmYWxzZSkge30KCiAgICAgIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVh
bV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgpOyB9CgogICAgICBpc3Ry
ZWFtX2l0ZXJhdG9yKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImIF9fb2JqKQogICAgICA6IF9NX3N0
cmVhbShfX29iai5fTV9zdHJlYW0pLCBfTV92YWx1ZShfX29iai5fTV92YWx1ZSksCiAgICAgICAg
X01fb2soX19vYmouX01fb2spCiAgICAgIHsgfQoKICAgICAgY29uc3QgX1RwJgogICAgICBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICAgICAgY29uc3QgX1RwKgogICAg
ICBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgICAgIGlz
dHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7IF9NX3JlYWQoKTsgcmV0
dXJuICp0aGlzOyB9CgogICAgICBpc3RyZWFtX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yKysoaW50
KQogICAgICB7CiAgICAgICAgaXN0cmVhbV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAg
IF9NX3JlYWQoKTsKICAgICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGJvb2wKICAg
ICAgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBjb25zdAogICAgICB7IHJl
dHVybiAoX01fb2sgPT0gX194Ll9NX29rKSAmJiAoIV9NX29rIHx8IF9NX3N0cmVhbSA9PSBfX3gu
X01fc3RyZWFtKTt9CgogICAgcHJpdmF0ZToKICAgICAgdm9pZAogICAgICBfTV9yZWFkKCkKICAg
ICAgewogICAgICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBm
YWxzZTsKICAgICAgICBpZiAoX01fb2spCiAgICAgICAgICB7CiAgICAgICAgICAgICpfTV9zdHJl
YW0gPj4gX01fdmFsdWU7CiAgICAgICAgICAgIF9NX29rID0gKl9NX3N0cmVhbSA/IHRydWUgOiBm
YWxzZTsKICAgICAgICAgIH0KICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw
LCB0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9EaXN0PgogICAg
aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9D
aGFyVCwgX1RyYWl0cywgX0Rpc3Q+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IGlzdHJlYW1f
aXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYgX195KQogICAgeyByZXR1cm4g
X194Ll9NX2VxdWFsKF9feSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJU
LCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv
ciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfQ2hhclQsIF9UcmFpdHMsIF9EaXN0PiYg
X194LAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBf
VHJhaXRzLCBfRGlzdD4mIF9feSkKICAgIHsgcmV0dXJuICFfX3guX01fZXF1YWwoX195KTsgfQoK
CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ2hhclQgPSBjaGFyLAogICAgICAg
ICAgIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIG9z
dHJlYW1faXRlcmF0b3IKICAgICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3Rh
Zywgdm9pZCwgdm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRl
ZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAg
ICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IG9zdHJlYW1fdHlwZTsK
CiAgICBwcml2YXRlOgogICAgICBvc3RyZWFtX3R5cGUqIF9NX3N0cmVhbTsKICAgICAgY29uc3Qg
X0NoYXJUKiBfTV9zdHJpbmc7CgogICAgcHVibGljOgogICAgICBvc3RyZWFtX2l0ZXJhdG9yKG9z
dHJlYW1fdHlwZSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CgogICAg
ICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19zLCBjb25zdCBfQ2hhclQqIF9fYykK
ICAgICAgOiBfTV9zdHJlYW0oJl9fcyksIF9NX3N0cmluZyhfX2MpIHsgfQoKICAgICAgb3N0cmVh
bV9pdGVyYXRvcihjb25zdCBvc3RyZWFtX2l0ZXJhdG9yJiBfX29iaikKICAgICAgOiBfTV9zdHJl
YW0oX19vYmouX01fc3RyZWFtKSwgX01fc3RyaW5nKF9fb2JqLl9NX3N0cmluZykgeyB9CgogICAg
ICBvc3RyZWFtX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgX1RwJiBfX3ZhbHVlKQog
ICAgICB7CiAgICAgICAgKl9NX3N0cmVhbSA8PCBfX3ZhbHVlOwogICAgICAgIGlmIChfTV9zdHJp
bmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAg
fQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KCiAgICAgIG9zdHJlYW1faXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQoKICAgICAgb3N0cmVhbV9pdGVyYXRvciYKICAgICAgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9CiAgICB9Owp9CiMgNzMgIi9ob21lL2JhbmdlcnRoL2Jpbi9nY2Mt
My4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaXRlcmF0b3IiIDIgMwojIDIzICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiIDIKIyAzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgpuYW1lc3BhY2UgVGhyZWFkcwp7CgogIGNsYXNz
IEZ1bkRhdGFCYXNlOwojIDU0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jh
c2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgY2xhc3MgRHVtbXlUaHJlYWRN
dXRleAogIHsKICAgIHB1YmxpYzoKCgoKCgoKCiAgICAgIGlubGluZSB2b2lkIGFjcXVpcmUgKCkg
Y29uc3Qge307CiMgNzMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgaW5saW5lIHZvaWQgcmVsZWFz
ZSAoKSBjb25zdCB7fTsKICB9OwojIDkxICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgY2xhc3MgRHVtbXlU
aHJlYWRNYW5hZ2VyCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdm9pZCAqICgq
RnVuUHRyKSAodm9pZCAqKTsKIyAxMTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgdm9pZCBzcGF3
biAoY29uc3QgRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgIHZvaWQgKiBmdW5fZGF0
YSwKICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKSBjb25zdDsKIyAxMjIgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l
bnQuaCIKICAgICAgaW5saW5lIHZvaWQgd2FpdCAoKSBjb25zdCB7fTsKICB9OwojIDE0MiAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf
bWFuYWdlbWVudC5oIgogIGNsYXNzIER1bW15QmFycmllcgogIHsKICAgIHB1YmxpYzoKIyAxNTUg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgRHVtbXlCYXJyaWVyIChjb25zdCB1bnNpZ25lZCBpbnQg
Y291bnQsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSA9IDAsCiAgICAgICAg
ICAgICAgICAgICAgdm9pZCAqYXJnID0gMCk7CiMgMTY3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg
IGludCB3YWl0ICgpIHsgcmV0dXJuIDA7IH07CgoKCgoKICAgICAgdm9pZCBkdW1wICgpIHt9OwoK
CgoKICAgICAgY2xhc3MgRXhjQmFycmllclNpemVOb3RVc2VmdWwgOiBwdWJsaWMgRXhjZXB0aW9u
QmFzZSB7IHB1YmxpYzogRXhjQmFycmllclNpemVOb3RVc2VmdWwgKGNvbnN0IGludCBhMSkgOiBh
cmcxIChhMSkge307IHZpcnR1YWwgfkV4Y0JhcnJpZXJTaXplTm90VXNlZnVsICgpIHRocm93ICgp
IHt9OyB2aXJ0dWFsIHZvaWQgUHJpbnRJbmZvIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QgeyBv
dXQgPDwgIkluIHNpbmdsZS10aHJlYWQgbW9kZSwgb3RoZXIgYmFycmllciBzaXplcyB0aGFuIDEg
YXJlIG5vdCAiIDw8ICJ1c2VmdWwuIFlvdSBnYXZlICIgPDwgYXJnMSA8PCBzdGQ6OmVuZGw7IH07
IHByaXZhdGU6IGNvbnN0IGludCBhcmcxOyB9OwoKCgogIH07CiMgMzk2ICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiCiAgdHlwZWRlZiBEdW1teVRocmVhZE11dGV4IFRocmVhZE11dGV4OwogIHR5cGVkZWYgRHVt
bXlUaHJlYWRNYW5hZ2VyIFRocmVhZE1hbmFnZXI7CiAgdHlwZWRlZiBEdW1teUJhcnJpZXIgQmFy
cmllcjsKIyA0MDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIGNs
YXNzIFJldFR5cGU+CiAgc3RydWN0IE1lbUZ1blB0cjAKICB7CiAgICAgIHR5cGVkZWYgUmV0VHlw
ZSAoQ2xhc3M6Oip0eXBlKSAoKTsKICB9OwojIDQzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBs
YXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVt
RnVuUHRyMQogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxKTsK
ICB9OwojIDQ2MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xh
c3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyMgog
IHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyKTsKICB9
OwojIDQ5MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3Mg
QXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVt
RnVuUHRyMwogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBB
cmcyLCBBcmczKTsKICB9OwojIDUxOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFz
cyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwg
Y2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNAogIHsKICAgICAgdHlwZWRlZiBSZXRU
eXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0KTsKICB9OwojIDU0NyAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl
YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xh
c3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgUmV0VHlw
ZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNQogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6
KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KTsKICB9OwojIDU3NSAiL2hvbWUv
YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFu
YWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJn
MiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3Mg
UmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNgogIHsKICAgICAgdHlwZWRlZiBSZXRUeXBlIChD
bGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KTsKICB9Owoj
IDYwMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJn
MSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3Mg
QXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyNwogIHsK
ICAgICAgdHlwZWRlZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBB
cmc0LCBBcmc1LCBBcmc2LCBBcmc3KTsKICB9OwojIDYzMiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRl
bXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywg
Y2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJn
OCwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyOAogIHsKICAgICAgdHlwZWRlZiBS
ZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2
LCBBcmc3LCBBcmc4KTsKICB9OwojIDY2MiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxj
bGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywgY2xhc3MgQXJn
NCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJnOCwgY2xhc3Mg
QXJnOSwgY2xhc3MgUmV0VHlwZT4KICBzdHJ1Y3QgTWVtRnVuUHRyOQogIHsKICAgICAgdHlwZWRl
ZiBSZXRUeXBlIChDbGFzczo6KnR5cGUpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBB
cmc2LCBBcmc3LCBBcmc4LCBBcmc5KTsKICB9OwojIDY5MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFs
LklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRl
bXBsYXRlIDxjbGFzcyBDbGFzcywgY2xhc3MgQXJnMSwgY2xhc3MgQXJnMiwgY2xhc3MgQXJnMywg
Y2xhc3MgQXJnNCwgY2xhc3MgQXJnNSwgY2xhc3MgQXJnNiwgY2xhc3MgQXJnNywgY2xhc3MgQXJn
OCwgY2xhc3MgQXJnOSwgY2xhc3MgQXJnMTAsIGNsYXNzIFJldFR5cGU+CiAgc3RydWN0IE1lbUZ1
blB0cjEwCiAgewogICAgICB0eXBlZGVmIFJldFR5cGUgKENsYXNzOjoqdHlwZSkgKEFyZzEsIEFy
ZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFyZzksIEFyZzEwKTsKICB9
OwojIDcyNCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIGNsYXNzIEZ1bkVuY2Fwc3VsYXRpb24KICB7CiAg
ICBwcml2YXRlOgojIDczNSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNl
L2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBGdW5FbmNhcHN1bGF0aW9u
ICgpOwoKICAgIHB1YmxpYzoKCgoKCgogICAgICBGdW5FbmNhcHN1bGF0aW9uIChjb25zdCBGdW5F
bmNhcHN1bGF0aW9uICZmdW5fZW5jYXBzdWxhdGlvbik7CiMgNzUyICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50Lmgi
CiAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gKEZ1bkRhdGFCYXNlICpmdW5fZGF0YV9iYXNlKTsKCgoK
CgogICAgICB+RnVuRW5jYXBzdWxhdGlvbiAoKTsKCgoKCgoKICAgICAgY29uc3QgRnVuRW5jYXBz
dWxhdGlvbiAmIG9wZXJhdG9yID0gKGNvbnN0IEZ1bkVuY2Fwc3VsYXRpb24gJmZ1bl9lbmNhcHN1
bGF0aW9uKTsKCgoKCgogICAgICBjb25zdCBGdW5EYXRhQmFzZSAqIGZ1bl9kYXRhX2Jhc2U7CiAg
fTsKIyA3ODMgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICBjbGFzcyBGdW5EYXRhQmFzZQogIHsKICAgIHB1
YmxpYzoKCgoKCgoKICAgICAgdHlwZWRlZiB2b2lkICogKCpUaHJlYWRFbnRyeVBvaW50KSAodm9p
ZCAqKTsKCgoKCgoKCiAgICAgIEZ1bkRhdGFCYXNlIChjb25zdCBUaHJlYWRFbnRyeVBvaW50IHRo
cmVhZF9lbnRyeV9wb2ludCk7CgoKCgogICAgICBGdW5EYXRhQmFzZSAoY29uc3QgRnVuRGF0YUJh
c2UgJik7CgoKCgoKCgogICAgICB2aXJ0dWFsIH5GdW5EYXRhQmFzZSAoKTsKIyA4MjMgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h
bmFnZW1lbnQuaCIKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0ID0g
MDsKIyA4MzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgbXV0YWJsZSBUaHJlYWRNdXRleCBsb2Nr
OwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBUaHJlYWRFbnRyeVBvaW50IHRocmVhZF9lbnRy
eV9wb2ludDsKCgoKCgoKCiAgICAgIGZyaWVuZCB2b2lkIHNwYXduIChUaHJlYWRNYW5hZ2VyICZ0
aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZ1bkVuY2Fwc3Vs
YXRpb24gJmZ1bl9kYXRhKTsKICB9OwojIDg2NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1bkRhdGEwIDogcHVibGljIEZ1bkRhdGFCYXNl
CiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKCk7
CgoKCgoKCiAgICAgIEZ1bkRhdGEwIChGdW5QdHIgZnVuX3B0cik7CgoKCgogICAgICBGdW5EYXRh
MCAoY29uc3QgRnVuRGF0YTAgJmZ1bl9kYXRhMCk7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFC
YXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1
bl9wdHI7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQg
KmFyZyk7CgoKCiAgcHVibGljOgoKCgoKCgoKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAg
IHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bkRh
dGEwPFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9y
IChGdW5QdHIgZnVuX3B0cik7CiMgOTUyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5F
bmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAg
ICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKIyA5NzIgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB9
OwojIDk4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBl
bmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1bkRhdGExIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewog
ICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEpOwoK
CgoKCgogICAgICBGdW5EYXRhMSAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICBBcmcx
IGFyZzEpOwoKCgoKICAgICAgRnVuRGF0YTEgKGNvbnN0IEZ1bkRhdGExICZmdW5fZGF0YTEpOwoK
CgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZh
dGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKCgoK
CgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAx
MDQwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAg
ICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhMTxB
cmcxLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9y
IChGdW5QdHIgZnVuX3B0cik7CiMgMTA2NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVu
RW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSk7CgogICAgICAgIHByaXZhdGU6
CgoKCgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBBcmcxXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGEx
PEFyZzFfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5f
cHRyKShBcmcxXykpOwogIH07CiMgMTA5NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIEZ1
bkRhdGEyIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5
cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEsIEFyZzIpOwoKCgoKCgogICAgICBGdW5EYXRh
MiAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg
ICAgICBBcmcyIGFyZzIpOwoKCgoKICAgICAgRnVuRGF0YTIgKGNvbnN0IEZ1bkRhdGEyICZmdW5f
ZGF0YTIpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoK
ICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIEFyZzEg
YXJnMTsKICAgICAgQXJnMiBhcmcyOwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2Vu
dHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDExNTQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xh
c3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIEZ1bkRhdGEyPEFyZzEsQXJnMixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0
cjsKCgoKCgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDExNzkg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdz
IChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MiBhcmcyKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsK
ICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBB
cmcyXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGEyPEFyZzFfLEFyZzJfLHZv
aWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShBcmcx
XywgQXJnMl8pKTsKICB9OwojIDEyMDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlw
ZT4KICBjbGFzcyBGdW5EYXRhMyA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoK
CgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIpIChBcmcxLCBBcmcyLCBBcmczKTsK
CgoKCgoKICAgICAgRnVuRGF0YTMgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJn
MSBhcmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBh
cmczKTsKCgoKCiAgICAgIEZ1bkRhdGEzIChjb25zdCBGdW5EYXRhMyAmZnVuX2RhdGEzKTsKCgoK
CiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRl
OgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAg
IEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhy
ZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDEyNzAgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAg
ICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAg
ICAgICB0eXBlZGVmIHR5cGVuYW1lIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJldFR5cGU+OjpG
dW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0
cik7CiMgMTI5NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBj
b2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnMyBhcmczKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVu
X3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBl
bmFtZSBBcmcyXywgdHlwZW5hbWUgQXJnM18+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBG
dW5EYXRhMzxBcmcxXyxBcmcyXyxBcmczXyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fw
c3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sQXJnMl8sQXJnM18pKTsKICB9OwojIDEzMjYg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn
MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFz
cyBGdW5EYXRhNCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg
ICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0KTsKCgoK
CgoKICAgICAgRnVuRGF0YTQgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJnMSBh
cmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBhcmcz
LAogICAgICAgICAgICAgICAgQXJnNCBhcmc0KTsKCgoKCiAgICAgIEZ1bkRhdGE0IChjb25zdCBG
dW5EYXRhNCAmZnVuX2RhdGE0KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9u
ZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoK
CgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAg
ICBBcmc0IGFyZzQ7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg
KHZvaWQgKmFyZyk7CiMgMTM4OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs
ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0
cjsKCgoKCgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDE0MTQg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdz
IChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn
MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoK
ICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoK
CgoKCgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1lIEFyZzJfLCB0eXBl
bmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBG
dW5EYXRhNDxBcmcxXyxBcmcyXyxBcmczXyxBcmc0Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAg
IGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8p
KTsKICB9OwojIDE0NDcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg
QXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBGdW5EYXRhNSA6IHB1YmxpYyBGdW5EYXRh
QmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5QdHIp
IChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KTsKCgoKCgoKICAgICAgRnVuRGF0YTUgKEZ1
blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg
QXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgQXJn
NCBhcmc0LAogICAgICAgICAgICAgICAgQXJnNSBhcmc1KTsKCgoKCiAgICAgIEZ1bkRhdGE1IChj
b25zdCBGdW5EYXRhNSAmZnVuX2RhdGE1KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2Ug
KiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0
cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmcz
OwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKCgoKCgogICAgICBzdGF0aWMgdm9p
ZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAxNTEyICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoK
CgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0
LEFyZzUsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0
b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAxNTM3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9k
ZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBG
dW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzUgYXJnNSk7CgogICAgICAgIHByaXZhdGU6CgoKCgogICAgICAgICAgRnVu
UHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcx
XywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBBcmc0XywgdHlwZW5h
bWUgQXJnNV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBGdW5EYXRhNTxBcmcxXyxBcmcy
XyxBcmczXyxBcmc0XyxBcmc1Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRl
ICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8sIEFyZzVfKSk7CiAg
fTsKIyAxNTcwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs
IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgRnVuRGF0YTYgOiBwdWJs
aWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6CgoKCgoKICAgICAgdHlwZWRlZiBSZXRUeXBl
ICgqRnVuUHRyKSAoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNik7CgoKCgoKCiAg
ICAgIEZ1bkRhdGE2IChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK
ICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg
ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAg
ICAgICAgICAgIEFyZzYgYXJnNik7CgoKCgogICAgICBGdW5EYXRhNiAoY29uc3QgRnVuRGF0YTYg
JmZ1bl9kYXRhNik7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29u
c3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAg
QXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBh
cmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAgIEFyZzYgYXJnNjsKCgoKCgogICAgICBzdGF0aWMg
dm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAxNjM3ICIvaG9tZS9iYW5n
ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2Vt
ZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoK
CgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRhNjxBcmcxLEFyZzIsQXJnMyxB
cmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAgICAgICAgIEFy
Z0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDE2NjIgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAg
ICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzYgYXJnNik7CgogICAgICAgIHByaXZhdGU6CgoKCgogICAgICAgICAg
RnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBB
cmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBBcmc0XywgdHlw
ZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfPgogICAgICBmcmllbmQKICAgICAgdHlwZW5hbWUg
RnVuRGF0YTY8QXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sdm9pZD46OkFyZ0Nv
bGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywg
QXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNF8sIEFyZzVfLCBB
cmc2XykpOwogIH07CiMgMTY5NyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl
bmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBl
PgogIGNsYXNzIEZ1bkRhdGE3IDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoK
CgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1blB0cikgKEFyZzEsIEFyZzIsIEFyZzMsIEFy
ZzQsIEFyZzUsIEFyZzYsIEFyZzcpOwoKCgoKCgogICAgICBGdW5EYXRhNyAoRnVuUHRyIGZ1bl9w
dHIsCiAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICBBcmcyIGFyZzIs
CiAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAg
ICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAg
ICAgICAgICAgICBBcmc3IGFyZzcpOwoKCgoKICAgICAgRnVuRGF0YTcgKGNvbnN0IEZ1bkRhdGE3
ICZmdW5fZGF0YTcpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNv
bnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAg
IEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwogICAgICBBcmczIGFyZzM7CiAgICAgIEFyZzQg
YXJnNDsKICAgICAgQXJnNSBhcmc1OwogICAgICBBcmc2IGFyZzY7CiAgICAgIEFyZzcgYXJnNzsK
CgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsK
IyAxNzY2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7
CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBGdW5EYXRh
NzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpGdW5QdHIgRnVu
UHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMTc5
MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2Fy
Z3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBh
cmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNyk7CgogICAgICAgIHByaXZh
dGU6CgoKCgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRl
bXBsYXRlIDx0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0
eXBlbmFtZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfLCB0eXBlbmFtZSBB
cmc3Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1bkRhdGE3PEFyZzFfLEFyZzJfLEFy
ZzNfLEFyZzRfLEFyZzVfLEFyZzZfLEFyZzdfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5j
YXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShBcmcxXywgQXJnMl8sIEFyZzNfLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sIEFyZzdfKSk7CiAg
fTsKIyAxODI3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs
IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJl
dFR5cGU+CiAgY2xhc3MgRnVuRGF0YTggOiBwdWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJs
aWM6CgoKCgoKICAgICAgdHlwZWRlZiBSZXRUeXBlICgqRnVuUHRyKSAoQXJnMSwgQXJnMiwgQXJn
MywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCk7CgoKCgoKCiAgICAgIEZ1bkRhdGE4IChG
dW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAg
IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgIEFy
ZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgIEFyZzYg
YXJnNiwKICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgIEFyZzggYXJn
OCk7CgoKCgogICAgICBGdW5EYXRhOCAoY29uc3QgRnVuRGF0YTggJmZ1bl9kYXRhOCk7CgoKCgog
ICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToK
CgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBB
cmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFy
ZzU7CiAgICAgIEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4IGFyZzg7CgoK
CgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZyk7CiMg
MTg5OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xsZWN0b3IKICAgICAgewog
ICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgRnVuRGF0YTg8
QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjpGdW5QdHIg
RnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMg
MTkyMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFz
ZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0
X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn
NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgpOwoKICAgICAgICBwcml2YXRl
OgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1w
bGF0ZSA8dHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlw
ZW5hbWUgQXJnNF8sIHR5cGVuYW1lIEFyZzVfLCB0eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJn
N18sIHR5cGVuYW1lIEFyZzhfPgogICAgICBmcmllbmQKICAgICAgdHlwZW5hbWUgRnVuRGF0YTg8
QXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sdm9pZD46OkFy
Z0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzFfLCBBcmcy
XywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNF8sIEFyZzVf
LCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3XywgQXJnOF8p
KTsKICB9OwojIDE5NjEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg
QXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5h
bWUgQXJnOSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBGdW5EYXRhOSA6IHB1YmxpYyBGdW5E
YXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIFJldFR5cGUgKCpGdW5Q
dHIpIChBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5
KTsKCgoKCgoKICAgICAgRnVuRGF0YTkgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg
QXJnMSBhcmcxLAogICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgQXJn
MyBhcmczLAogICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgQXJnNSBh
cmc1LAogICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgQXJnNyBhcmc3
LAogICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAgQXJnOSBhcmc5KTsK
CgoKCiAgICAgIEZ1bkRhdGE5IChjb25zdCBGdW5EYXRhOSAmZnVuX2RhdGE5KTsKCgoKCiAgICAg
IHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBwcml2YXRlOgoKCgoK
CgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIg
YXJnMjsKICAgICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsK
ICAgICAgQXJnNiBhcmc2OwogICAgICBBcmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKICAgICAg
QXJnOSBhcmc5OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2
b2lkICphcmcpOwojIDIwMzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz
ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVj
dG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVu
YW1lIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5
LFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAgQXJnQ29sbGVjdG9yIChG
dW5QdHIgZnVuX3B0cik7CiMgMjA1OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5j
YXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcg
YXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOSBhcmc5KTsKCiAg
ICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoK
CgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBBcmcyXywgdHlwZW5h
bWUgQXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1XywgdHlwZW5hbWUgQXJnNl8s
IHR5cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5hbWUgQXJnOV8+CiAgICAgIGZy
aWVuZAogICAgICB0eXBlbmFtZSBGdW5EYXRhOTxBcmcxXyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1
XyxBcmc2XyxBcmc3XyxBcmc4XyxBcmc5Xyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fw
c3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzdfLCBBcmc4XywgQXJnOV8pKTsKICB9OwojIDIwOTgg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn
MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg
QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5h
bWUgQXJnMTAsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgRnVuRGF0YTEwIDogcHVibGljIEZ1
bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgUmV0VHlwZSAoKkZ1
blB0cikgKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFy
ZzksIEFyZzEwKTsKCgoKCgoKICAgICAgRnVuRGF0YTEwIChGdW5QdHIgZnVuX3B0ciwKICAgICAg
ICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAg
ICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAg
ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAg
ICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAg
ICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCk7CgoKCgogICAg
ICBGdW5EYXRhMTAgKGNvbnN0IEZ1bkRhdGExMCAmZnVuX2RhdGExMCk7CgoKCgogICAgICB2aXJ0
dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAg
ICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7
CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAg
IEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4IGFyZzg7CiAgICAgIEFyZzkg
YXJnOTsKICAgICAgQXJnMTAgYXJnMTA7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRf
ZW50cnlfcG9pbnQgKHZvaWQgKmFyZyk7CiMgMjE3MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBj
bGFzcyBBcmdDb2xsZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAg
IHR5cGVkZWYgdHlwZW5hbWUgRnVuRGF0YTEwPEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2
LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAg
ICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMjE5OCAiL2hvbWUvYmFuZ2Vy
dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVu
dC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcmc4IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnOSBhcmc5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzEwIGFyZzEwKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVu
X3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzFfLCB0eXBl
bmFtZSBBcmcyXywgdHlwZW5hbWUgQXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1
XywgdHlwZW5hbWUgQXJnNl8sIHR5cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5h
bWUgQXJnOV8sIHR5cGVuYW1lIEFyZzEwXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIEZ1
bkRhdGExMDxBcmcxXyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1XyxBcmc2XyxBcmc3XyxBcmc4XyxB
cmc5XyxBcmcxMF8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAo
KmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnNF8sIEFyZzVfLCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcmc3XywgQXJnOF8sIEFyZzlfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzEwXykpOwogIH07CiMgMjIzOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl
IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhMCA6IHB1
YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVu
YW1lIE1lbUZ1blB0cjA8Q2xhc3MsUmV0VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgogICAgICBN
ZW1GdW5EYXRhMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2Jq
ZWN0KTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEwIChjb25zdCBNZW1GdW5EYXRhMCAmZnVuX2RhdGEw
KTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25zdDsKCiAgICBw
cml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBDbGFzcyAqb2Jq
ZWN0OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICph
cmcpOwojIDIyOTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAg
ICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1l
bUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAgICAgICAg
QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMjMyMSAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog
ICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QpOwoj
IDIzMzUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVj
dF9hcmdzIChDbGFzcyAmb2JqZWN0KTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBG
dW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNz
Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGEwPENsYXNzXyx2b2lkPjo6
QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzc186OipmdW5fcHRyKSgp
KTsKCgoKCgoKCiAgfTsKIyAyMzcyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNz
IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRh
dGExIDogcHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVk
ZWYgdHlwZW5hbWUgTWVtRnVuUHRyMTxDbGFzcyxBcmcxLFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsK
CgoKCgoKICAgICAgTWVtRnVuRGF0YTEgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg
ICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSk7CgoKCgogICAg
ICBNZW1GdW5EYXRhMSAoY29uc3QgTWVtRnVuRGF0YTEgJmZ1bl9kYXRhMSk7CgoKCgogICAgICB2
aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoK
ICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoKCgogICAg
ICBBcmcxIGFyZzE7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg
KHZvaWQgKmFyZyk7CiMgMjQzNiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs
ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoK
CgoKICAgICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDI0NjEgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h
bmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFz
cyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEg
YXJnMSk7CiMgMjQ3NiAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlv
biBjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnMSBhcmcxKTsKCiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAg
ICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENs
YXNzXywgdHlwZW5hbWUgQXJnMV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5E
YXRhMTxDbGFzc18sQXJnMV8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAo
dm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8pKTsKCgoKCgoKCiAgfTsKIyAyNTE0ICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9t
YW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBl
bmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRhdGEyIDogcHVibGlj
IEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg
TWVtRnVuUHRyMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgog
ICAgICBNZW1GdW5EYXRhMiAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICBDbGFz
cyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAg
ICAgQXJnMiBhcmcyKTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEyIChjb25zdCBNZW1GdW5EYXRhMiAm
ZnVuX2RhdGEyKTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25z
dDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBD
bGFzcyAqb2JqZWN0OwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwoKCgoK
CiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDI1
ODAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2Uv
dGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAg
ICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGEy
PENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAgICAgICAg
IEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDI2MDUgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIK
ICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIpOwojIDI2MjEgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk
X21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChD
bGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFy
ZzIpOwoKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBmdW5fcHRyOwogICAg
ICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0eXBlbmFtZSBBcmcxXywg
dHlwZW5hbWUgQXJnMl8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhMjxD
bGFzc18sQXJnMV8sQXJnMl8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAo
dm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8sIEFyZzJfKSk7CgoKCgoKCgogIH07CiMgMjY1
OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFz
cyBNZW1GdW5EYXRhMyA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgog
ICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0
VHlwZT46OnR5cGUgRnVuUHRyOwoKCgoKCgogICAgICBNZW1GdW5EYXRhMyAoRnVuUHRyIGZ1bl9w
dHIsCiAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAg
QXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg
ICAgQXJnMyBhcmczKTsKCgoKCiAgICAgIE1lbUZ1bkRhdGEzIChjb25zdCBNZW1GdW5EYXRhMyAm
ZnVuX2RhdGEzKTsKCgoKCiAgICAgIHZpcnR1YWwgRnVuRGF0YUJhc2UgKiBjbG9uZSAoKSBjb25z
dDsKCiAgICBwcml2YXRlOgoKCgoKCgogICAgICBGdW5QdHIgZnVuX3B0cjsKCgoKCgogICAgICBD
bGFzcyAqb2JqZWN0OwoKCgoKCiAgICAgIEFyZzEgYXJnMTsKICAgICAgQXJnMiBhcmcyOwogICAg
ICBBcmczIGFyZzM7CgoKCgoKICAgICAgc3RhdGljIHZvaWQgKiB0aHJlYWRfZW50cnlfcG9pbnQg
KHZvaWQgKmFyZyk7CiMgMjcyNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICBjbGFzcyBBcmdDb2xs
ZWN0b3IKICAgICAgewogICAgICAgIHB1YmxpYzoKCgoKCgoKICAgICAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OkZ1blB0ciBG
dW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAy
NzUyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3Rf
YXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg
YXJnMyk7CiMgMjc2OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlv
biBjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmczIGFyZzMpOwoKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0ciBm
dW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0eXBl
bmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfPgogICAgICBmcmllbmQK
ICAgICAgdHlwZW5hbWUgTWVtRnVuRGF0YTM8Q2xhc3NfLEFyZzFfLEFyZzJfLEFyZzNfLHZvaWQ+
OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzXzo6KmZ1bl9wdHIp
KEFyZzFfLEFyZzJfLEFyZzNfKSk7CgoKCgoKCgogIH07CiMgMjgwOSAiL2hvbWUvYmFuZ2VydGgv
cC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5o
IgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg
dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBN
ZW1GdW5EYXRhNCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxS
ZXRUeXBlPjo6dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE0IChGdW5QdHIgZnVu
X3B0ciwKICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAg
ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAg
ICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoKCgoKICAgICAg
TWVtRnVuRGF0YTQgKGNvbnN0IE1lbUZ1bkRhdGE0ICZmdW5fZGF0YTQpOwoKCgoKICAgICAgdmly
dHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAg
ICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIENsYXNzICpvYmplY3Q7CgoKCgoKICAgICAg
QXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBh
cmc0OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICph
cmcpOwojIDI4NzkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAg
ICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1l
bUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsUmV0VHlwZT46OkZ1blB0ciBGdW5Q
dHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAyOTA0
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Ro
cmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJn
cyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn
MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQpOwoj
IDI5MjIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVj
dF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn
NCk7CiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAg
fTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8sIHR5
cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8+CiAgICAgIGZyaWVu
ZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhNDxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJn
NF8sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoq
ZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywgQXJnNF8pKTsKCgoKCgoKCn07CiMgMjk2MiAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl
YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwg
dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJn
NSwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhNSA6IHB1YmxpYyBGdW5EYXRh
QmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0
cjU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsK
CgoKCgoKICAgICAgTWVtRnVuRGF0YTUgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAg
ICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAg
ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAg
ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSk7CgoK
CgogICAgICBNZW1GdW5EYXRhNSAoY29uc3QgTWVtRnVuRGF0YTUgJmZ1bl9kYXRhNSk7CgoKCgog
ICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToK
CgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoK
CgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAg
ICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRo
cmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzMDM0ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg
ICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAg
ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB
cmc0LEFyZzUsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xs
ZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzMDU5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAg
ICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnNSBhcmc1KTsKIyAzMDc4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAg
ICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnNSBhcmc1KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1
blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Nf
LCB0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFt
ZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1G
dW5EYXRhNTxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sdm9pZD46OkFyZ0Nv
bGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8s
IEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzRfLCBBcmc1XykpOwojIDMxMTAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB9OwojIDMxMjEgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk
X21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs
IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgY2xhc3MgTWVtRnVuRGF0YTYgOiBw
dWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6CgoKCgoKICAgICAgdHlwZWRlZiB0eXBl
bmFtZSBNZW1GdW5QdHI2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5
cGU+Ojp0eXBlIEZ1blB0cjsKCgoKCgoKICAgICAgTWVtRnVuRGF0YTYgKEZ1blB0ciBmdW5fcHRy
LAogICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgIEFy
ZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAg
IEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg
ICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNik7CgoKCgogICAgICBN
ZW1GdW5EYXRhNiAoY29uc3QgTWVtRnVuRGF0YTYgJmZ1bl9kYXRhNik7CgoKCgogICAgICB2aXJ0
dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAg
ICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsKCgoKCgogICAgICBB
cmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFy
ZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJnNiBhcmc2OwoKCgoKCiAgICAgIHN0YXRpYyB2
b2lkICogdGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDMxOTUgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l
bnQuaCIKICAgICAgY2xhc3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoK
CgoKCiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJn
MixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpGdW5QdHIgRnVuUHRyOwoKCgoKCgogICAg
ICAgICAgQXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cik7CiMgMzIyMCAiL2hvbWUvYmFuZ2Vy
dGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVu
dC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmpl
Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYpOwojIDMyNDAgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIK
ICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnNiBhcmc2KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAg
IEZ1blB0ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh
c3NfLCB0eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBl
bmFtZSBBcmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfPgogICAgICBmcmllbmQK
ICAgICAgdHlwZW5hbWUgTWVtRnVuRGF0YTY8Q2xhc3NfLEFyZzFfLEFyZzJfLEFyZzNfLEFyZzRf
LEFyZzVfLEFyZzZfLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQg
KENsYXNzXzo6KmZ1bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfKSk7CiMgMzI3MyAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl
YWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzI4NCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl
IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg
QXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBNZW1GdW5EYXRhNyA6IHB1YmxpYyBGdW5E
YXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1
blB0cjc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6
dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE3IChGdW5QdHIgZnVuX3B0ciwKICAg
ICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICBBcmcxIGFy
ZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICBBcmcz
IGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICBB
cmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICAg
ICBBcmc3IGFyZzcpOwoKCgoKICAgICAgTWVtRnVuRGF0YTcgKGNvbnN0IE1lbUZ1bkRhdGE3ICZm
dW5fZGF0YTcpOwoKCgoKICAgICAgdmlydHVhbCBGdW5EYXRhQmFzZSAqIGNsb25lICgpIGNvbnN0
OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0ciBmdW5fcHRyOwoKCgoKCiAgICAgIENs
YXNzICpvYmplY3Q7CgoKCgoKICAgICAgQXJnMSBhcmcxOwogICAgICBBcmcyIGFyZzI7CiAgICAg
IEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAgICBBcmc1IGFyZzU7CiAgICAgIEFyZzYg
YXJnNjsKICAgICAgQXJnNyBhcmc3OwoKCgoKCiAgICAgIHN0YXRpYyB2b2lkICogdGhyZWFkX2Vu
dHJ5X3BvaW50ICh2b2lkICphcmcpOwojIDMzNjAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgY2xh
c3MgQXJnQ29sbGVjdG9yCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKCgoKCiAgICAgICAgICB0
eXBlZGVmIHR5cGVuYW1lIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJn
NSxBcmc2LEFyZzcsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdD
b2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzMzg1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg
ICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc3IGFyZzcpOwojIDM0MDYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgIEZ1bkVu
Y2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcg
YXJnNyk7CiAgICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAg
ICAgfTsKCgoKCgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8s
IHR5cGVuYW1lIEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8sIHR5cGVuYW1l
IEFyZzVfLCB0eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJnN18+CiAgICAgIGZyaWVuZAogICAg
ICB0eXBlbmFtZSBNZW1GdW5EYXRhNzxDbGFzc18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJn
NV8sQXJnNl8sQXJnN18sdm9pZD46OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9p
ZCAoQ2xhc3NfOjoqZnVuX3B0cikoQXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sIEFyZzdfKSk7
CiMgMzQ0MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzQ1MCAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog
IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg
dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBjbGFzcyBN
ZW1GdW5EYXRhOCA6IHB1YmxpYyBGdW5EYXRhQmFzZQogIHsKICAgIHB1YmxpYzoKCgoKCgogICAg
ICB0eXBlZGVmIHR5cGVuYW1lIE1lbUZ1blB0cjg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxB
cmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+Ojp0eXBlIEZ1blB0cjsKCgoKCgoKICAgICAgTWVt
RnVuRGF0YTggKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVj
dCwKICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgIEFyZzIg
YXJnMiwKICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgIEFy
ZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAg
IEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg
ICAgIEFyZzggYXJnOCk7CgoKCgogICAgICBNZW1GdW5EYXRhOCAoY29uc3QgTWVtRnVuRGF0YTgg
JmZ1bl9kYXRhOCk7CgoKCgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29u
c3Q7CgogICAgcHJpdmF0ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAg
Q2xhc3MgKm9iamVjdDsKCgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAg
ICAgQXJnMyBhcmczOwogICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJn
NiBhcmc2OwogICAgICBBcmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKCgoKCgogICAgICBzdGF0
aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzNTI4ICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h
Z2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGlj
OgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFzcyxBcmcx
LEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkZ1blB0ciBGdW5Q
dHI7CgoKCgoKCiAgICAgICAgICBBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzNTUz
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3Ro
cmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJn
cyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
MiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJn
MywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4KTsKIyAzNTc1ICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiCiAgICAgICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVj
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnOCBhcmc4KTsKICAgICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIEZ1blB0
ciBmdW5fcHRyOwogICAgICB9OwoKCgoKCgogICAgICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3NfLCB0
eXBlbmFtZSBBcmcxXywgdHlwZW5hbWUgQXJnMl8sIHR5cGVuYW1lIEFyZzNfLCB0eXBlbmFtZSBB
cmc0XywgdHlwZW5hbWUgQXJnNV8sIHR5cGVuYW1lIEFyZzZfLCB0eXBlbmFtZSBBcmc3XywgdHlw
ZW5hbWUgQXJnOF8+CiAgICAgIGZyaWVuZAogICAgICB0eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFz
c18sQXJnMV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sdm9pZD46
OkFyZ0NvbGxlY3RvcgogICAgICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3NfOjoqZnVuX3B0ciko
QXJnMV8sIEFyZzJfLCBBcmczXywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzRfLCBBcmc1XywgQXJnNl8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmc3XywgQXJnOF8pKTsKIyAzNjEyICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg
fTsKIyAzNjIyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0
eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4
LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIGNsYXNzIE1lbUZ1bkRhdGE5IDog
cHVibGljIEZ1bkRhdGFCYXNlCiAgewogICAgcHVibGljOgoKCgoKCiAgICAgIHR5cGVkZWYgdHlw
ZW5hbWUgTWVtRnVuUHRyOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3
LEFyZzgsQXJnOSxSZXRUeXBlPjo6dHlwZSBGdW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGE5
IChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAg
ICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAg
ICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQs
CiAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICBBcmc2IGFy
ZzYsCiAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICBBcmc4
IGFyZzgsCiAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzkpOwoKCgoKICAgICAgTWVtRnVuRGF0
YTkgKGNvbnN0IE1lbUZ1bkRhdGE5ICZmdW5fZGF0YTkpOwoKCgoKICAgICAgdmlydHVhbCBGdW5E
YXRhQmFzZSAqIGNsb25lICgpIGNvbnN0OwoKICAgIHByaXZhdGU6CgoKCgoKCiAgICAgIEZ1blB0
ciBmdW5fcHRyOwoKCgoKCiAgICAgIENsYXNzICpvYmplY3Q7CgoKCgoKICAgICAgQXJnMSBhcmcx
OwogICAgICBBcmcyIGFyZzI7CiAgICAgIEFyZzMgYXJnMzsKICAgICAgQXJnNCBhcmc0OwogICAg
ICBBcmc1IGFyZzU7CiAgICAgIEFyZzYgYXJnNjsKICAgICAgQXJnNyBhcmc3OwogICAgICBBcmc4
IGFyZzg7CiAgICAgIEFyZzkgYXJnOTsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9l
bnRyeV9wb2ludCAodm9pZCAqYXJnKTsKIyAzNzAyICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNs
YXNzIEFyZ0NvbGxlY3RvcgogICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAg
dHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFy
ZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxSZXRUeXBlPjo6RnVuUHRyIEZ1blB0cjsKCgoKCgoKICAg
ICAgICAgIEFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpOwojIDM3MjcgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l
bnQuaCIKICAgICAgICAgIEZ1bkVuY2Fwc3VsYXRpb24gY29sbGVjdF9hcmdzIChDbGFzcyAqb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcmc4IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnOSBhcmc5KTsKIyAzNzUwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgICAgICBGdW5F
bmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3
IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSk7CiAg
ICAgICAgcHJpdmF0ZToKCgoKCiAgICAgICAgICBGdW5QdHIgZnVuX3B0cjsKICAgICAgfTsKCgoK
CgoKICAgICAgdGVtcGxhdGUgPGNsYXNzIENsYXNzXywgdHlwZW5hbWUgQXJnMV8sIHR5cGVuYW1l
IEFyZzJfLCB0eXBlbmFtZSBBcmczXywgdHlwZW5hbWUgQXJnNF8sIHR5cGVuYW1lIEFyZzVfLCB0
eXBlbmFtZSBBcmc2XywgdHlwZW5hbWUgQXJnN18sIHR5cGVuYW1lIEFyZzhfLCB0eXBlbmFtZSBB
cmc5Xz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGE5PENsYXNzXyxBcmcx
XyxBcmcyXyxBcmczXyxBcmc0XyxBcmc1XyxBcmc2XyxBcmc3XyxBcmc4XyxBcmc5Xyx2b2lkPjo6
QXJnQ29sbGVjdG9yCiAgICAgIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzc186OipmdW5fcHRyKShB
cmcxXywgQXJnMl8sIEFyZzNfLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnNF8sIEFyZzVfLCBBcmc2XywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzdfLCBBcmc4XywgQXJnOV8pKTsKIyAzNzg4ICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiCiAgfTsKIyAzNzk4ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz
LCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBB
cmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFt
ZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4K
ICBjbGFzcyBNZW1GdW5EYXRhMTAgOiBwdWJsaWMgRnVuRGF0YUJhc2UKICB7CiAgICBwdWJsaWM6
CgoKCgoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBNZW1GdW5QdHIxMDxDbGFzcyxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dHlwZSBG
dW5QdHI7CgoKCgoKCiAgICAgIE1lbUZ1bkRhdGExMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAg
ICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs
CiAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgIEFyZzMg
YXJnMywKICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg
QXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAg
ICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAg
ICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCk7CgoK
CgogICAgICBNZW1GdW5EYXRhMTAgKGNvbnN0IE1lbUZ1bkRhdGExMCAmZnVuX2RhdGExMCk7CgoK
CgogICAgICB2aXJ0dWFsIEZ1bkRhdGFCYXNlICogY2xvbmUgKCkgY29uc3Q7CgogICAgcHJpdmF0
ZToKCgoKCgoKICAgICAgRnVuUHRyIGZ1bl9wdHI7CgoKCgoKICAgICAgQ2xhc3MgKm9iamVjdDsK
CgoKCgogICAgICBBcmcxIGFyZzE7CiAgICAgIEFyZzIgYXJnMjsKICAgICAgQXJnMyBhcmczOwog
ICAgICBBcmc0IGFyZzQ7CiAgICAgIEFyZzUgYXJnNTsKICAgICAgQXJnNiBhcmc2OwogICAgICBB
cmc3IGFyZzc7CiAgICAgIEFyZzggYXJnODsKICAgICAgQXJnOSBhcmc5OwogICAgICBBcmcxMCBh
cmcxMDsKCgoKCgogICAgICBzdGF0aWMgdm9pZCAqIHRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAq
YXJnKTsKIyAzODgwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAgIGNsYXNzIEFyZ0NvbGxlY3Rvcgog
ICAgICB7CiAgICAgICAgcHVibGljOgoKCgoKCgogICAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBN
ZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4
LEFyZzksQXJnMTAsUmV0VHlwZT46OkZ1blB0ciBGdW5QdHI7CgoKCgoKCiAgICAgICAgICBBcmdD
b2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKTsKIyAzOTA1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICAg
ICAgICBGdW5FbmNhcHN1bGF0aW9uIGNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOCBhcmc4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkg
YXJnOSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcx
MCk7CiMgMzkyOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgICAgICAgRnVuRW5jYXBzdWxhdGlvbiBj
b2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
NCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJn
NSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzggYXJnOCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnMTAgYXJnMTApOwogICAgICAgIHByaXZhdGU6CgoK
CgogICAgICAgICAgRnVuUHRyIGZ1bl9wdHI7CiAgICAgIH07CgoKCgoKCiAgICAgIHRlbXBsYXRl
IDxjbGFzcyBDbGFzc18sIHR5cGVuYW1lIEFyZzFfLCB0eXBlbmFtZSBBcmcyXywgdHlwZW5hbWUg
QXJnM18sIHR5cGVuYW1lIEFyZzRfLCB0eXBlbmFtZSBBcmc1XywgdHlwZW5hbWUgQXJnNl8sIHR5
cGVuYW1lIEFyZzdfLCB0eXBlbmFtZSBBcmc4XywgdHlwZW5hbWUgQXJnOV8sIHR5cGVuYW1lIEFy
ZzEwXz4KICAgICAgZnJpZW5kCiAgICAgIHR5cGVuYW1lIE1lbUZ1bkRhdGExMDxDbGFzc18sQXJn
MV8sQXJnMl8sQXJnM18sQXJnNF8sQXJnNV8sQXJnNl8sQXJnN18sQXJnOF8sQXJnOV8sQXJnMTBf
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICAgICAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzXzo6KmZ1
bl9wdHIpKEFyZzFfLCBBcmcyXywgQXJnM18sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmc0XywgQXJnNV8sIEFyZzZfLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnN18sIEFyZzhfLCBBcmc5XywgQXJnMTBfKSk7CiMgMzk2
OCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
aHJlYWRfbWFuYWdlbWVudC5oIgogIH07CiMgMzk4MyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJ
LzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIGlubGlu
ZQogIEZ1bkRhdGEwPHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1
bl9wdHIpKCkpOwojIDM5OTggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz
ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QXJnMT4KICBpbmxpbmUKICB0eXBlbmFtZSBGdW5EYXRhMTxBcmcxLHZvaWQ+OjpBcmdDb2xsZWN0
b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEpKTsKIyA0MDE1ICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h
Z2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzI+CiAgaW5s
aW5lCiAgdHlwZW5hbWUgRnVuRGF0YTI8QXJnMSxBcmcyLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBl
bmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIpKTsKIyA0MDMyICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h
Z2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVu
YW1lIEFyZzM+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsdm9p
ZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJn
MiwgQXJnMykpOwojIDQwNDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFz
ZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnND4KICBpbmxp
bmUKICB0eXBlbmFtZSBGdW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xs
ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFy
ZzQpKTsKIyA0MDY3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy
ZzU+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTU8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEs
IEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKTsKIyA0MDg0ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwu
SUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVu
YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzY+CiAgaW5saW5lCiAgdHlwZW5h
bWUgRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsdm9pZD46OkFyZ0NvbGxl
Y3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJn
NCwgQXJnNSwgQXJnNikpOwojIDQxMDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg
dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICBpbmxpbmUKICB0
eXBlbmFtZSBGdW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LHZvaWQ+
OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIs
IEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcpKTsKIyA0MTE4ICIvaG9tZS9iYW5nZXJ0aC9w
L2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50Lmgi
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs
IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFy
ZzcsIHR5cGVuYW1lIEFyZzg+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTg8QXJnMSxBcmcy
LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNh
cHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFy
ZzYsIEFyZzcsIEFyZzgpKTsKIyA0MTM1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQs
IHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFy
ZzgsIHR5cGVuYW1lIEFyZzk+CiAgaW5saW5lCiAgdHlwZW5hbWUgRnVuRGF0YTk8QXJnMSxBcmcy
LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksdm9pZD46OkFyZ0NvbGxlY3Rvcgog
IGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJn
NSwgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSkpOwojIDQxNTIgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlw
ZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywg
dHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgQXJnMTA+CiAgaW5saW5lCiAg
dHlwZW5hbWUgRnVuRGF0YTEwPEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn
OCxBcmc5LEFyZzEwLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1
bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgsIEFy
ZzksIEFyZzEwKSk7CiMgNDE3MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9i
YXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBD
bGFzcz4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMDxDbGFzcyx2b2lkPjo6QXJnQ29s
bGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoKSk7CiMgNDIwNSAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl
YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMT4K
ICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLHZvaWQ+OjpBcmdDb2xs
ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxKSk7CiMgNDI0
MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90
aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMj4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhMjxDbGFzcyxB
cmcxLEFyZzIsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6
KmZ1bl9wdHIpKEFyZzEsIEFyZzIpKTsKIyA0Mjc3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkv
Mi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxh
dGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBB
cmczPgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixBcmcz
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy
KShBcmcxLCBBcmcyLCBBcmczKSk7CiMgNDMxMyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl
IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnND4KICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhNDxDbGFzcyxB
cmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p
ZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBBcmczLCBBcmc0KSk7CiMgNDM0OSAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf
bWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw
ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNT4K
ICBpbmxpbmUKICB0eXBlbmFtZSBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0
LEFyZzUsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6KmZ1
bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUpKTsKIyA0Mzg1ICIvaG9tZS9iYW5n
ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2Vt
ZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBB
cmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFt
ZSBBcmc2PgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixB
cmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p
ZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2KSk7
CiMgNDQyMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h
bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw
ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICBpbmxpbmUKICB0eXBl
bmFtZSBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy
KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3KSk7CiMgNDQ1NSAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf
bWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw
ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwg
dHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOD4KICBpbmxpbmUKICB0
eXBlbmFtZSBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB
cmc3LEFyZzgsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6
KmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFyZzcsIEFyZzgp
KTsKIyA0NDkwICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVk
ZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0
eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4
LCB0eXBlbmFtZSBBcmc5PgogIGlubGluZQogIHR5cGVuYW1lIE1lbUZ1bkRhdGE5PENsYXNzLEFy
ZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LHZvaWQ+OjpBcmdDb2xs
ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBBcmcyLCBB
cmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5KSk7CiMgNDUyNSAiL2hvbWUv
YmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFu
YWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5h
bWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlw
ZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwg
dHlwZW5hbWUgQXJnMTA+CiAgaW5saW5lCiAgdHlwZW5hbWUgTWVtRnVuRGF0YTEwPENsYXNzLEFy
ZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLHZvaWQ+OjpB
cmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRyKShBcmcxLCBB
cmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4LCBBcmc5LCBBcmcxMCkpOwoj
IDQ1NTYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB2b2lkIHNwYXduIChUaHJlYWRNYW5hZ2VyICZ0aHJl
YWRfbWFuYWdlciwKICAgICAgICAgICAgICBjb25zdCBGdW5FbmNhcHN1bGF0aW9uICZmdW5fZGF0
YSk7CgoKCgoKCgogIHZvaWQgc3Bhd25fbiAoVGhyZWFkTWFuYWdlciAmdGhyZWFkX21hbmFnZXIs
CiAgICAgICAgICAgICAgICBjb25zdCBGdW5FbmNhcHN1bGF0aW9uICZmdW5fZW5jYXBzdWxhdGlv
biwKICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3RocmVhZHMpOwojIDQ2MTgg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICB1bnNpZ25lZCBpbnQgbl9leGlzdGluZ190aHJlYWRzICgpOwoj
IDQ2NDEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRm9yd2FyZEl0ZXJh
dG9yPgogIHN0ZDo6dmVjdG9yPHN0ZDo6cGFpcjxGb3J3YXJkSXRlcmF0b3IsRm9yd2FyZEl0ZXJh
dG9yPiA+CiAgc3BsaXRfcmFuZ2UgKGNvbnN0IEZvcndhcmRJdGVyYXRvciAmYmVnaW4sCiAgICAg
ICAgICAgICAgIGNvbnN0IEZvcndhcmRJdGVyYXRvciAmZW5kLAogICAgICAgICAgICAgICBjb25z
dCB1bnNpZ25lZCBpbnQgbl9pbnRlcnZhbHMpOwojIDQ2NTYgIi9ob21lL2JhbmdlcnRoL3AvZGVh
bC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICBz
dGQ6OnZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQgaW50LHVuc2lnbmVkIGludD4gPgogIHNwbGl0
X2ludGVydmFsIChjb25zdCB1bnNpZ25lZCBpbnQgYmVnaW4sCiAgICAgICAgICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBlbmQsCiAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGlu
dCBuX2ludGVydmFscyk7CiMgNDY4MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHN0cnVjdCBGdW5EYXRh
Q291bnRlcgogIHsKCgoKCiAgICAgIEZ1bkRhdGFDb3VudGVyICgpOwoKCgoKCgoKICAgICAgfkZ1
bkRhdGFDb3VudGVyICgpOwoKCgoKCgogICAgICB1bnNpZ25lZCBpbnQgbl9mdW5fZW5jYXBzdWxh
dGlvbl9vYmplY3RzOwogICAgICB1bnNpZ25lZCBpbnQgbl9mdW5fZGF0YV9iYXNlX29iamVjdHM7
CgoKCgogICAgICBjbGFzcyBFeGNPYmplY3RzRXhpc3QgOiBwdWJsaWMgRXhjZXB0aW9uQmFzZSB7
IHB1YmxpYzogRXhjT2JqZWN0c0V4aXN0IChjb25zdCBjaGFyKiBhMSwgY29uc3QgaW50IGEyKSA6
IGFyZzEgKGExKSwgYXJnMihhMikge307IHZpcnR1YWwgfkV4Y09iamVjdHNFeGlzdCAoKSB0aHJv
dyAoKSB7fTsgdmlydHVhbCB2b2lkIFByaW50SW5mbyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0
IHsgb3V0IDw8ICJUaGVyZSBhcmUgc3RpbGwgIiA8PCBhcmcyIDw8ICIgb2JqZWN0cyBvZiB0eXBl
ICIgPDwgYXJnMSA8PCAiIGFsaXZlLiBZb3UgcHJvYmFibHkgaGF2ZSBhIG1lbW9yeSAiIDw8ICJs
ZWFrIHNvbWV3aGVyZS4iIDw8IHN0ZDo6ZW5kbDsgfTsgcHJpdmF0ZTogY29uc3QgY2hhciogYXJn
MTsgY29uc3QgaW50IGFyZzI7IH07CgoKCgogIH07CiMgNDcyNSAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog
IHZvaWQgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKIyA0NzM2ICIvaG9tZS9iYW5nZXJ0aC9wL2Rl
YWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAg
dm9pZCBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiMgNDc2NSAiL2hvbWUvYmFuZ2VydGgvcC9k
ZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgog
IHZvaWQgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpOwoj
IDQ3NzQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB2b2lkIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAo
KTsKCn07CiMgNDc4NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2lu
Y2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgpuYW1lc3BhY2UgVGhyZWFkcwp7CgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTA8UmV0VHlwZT46OkZ1bkRhdGEw
IChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRh
dGEwPFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5f
cHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFJldFR5cGU+CiAgRnVu
RGF0YTA8UmV0VHlwZT46OkZ1bkRhdGEwIChjb25zdCBGdW5EYXRhMCAmZnVuX2RhdGEpIDoKICAg
ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAg
ZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBS
ZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5EYXRhMDxSZXRUeXBlPjo6Y2xvbmUgKCkgY29u
c3QKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEwICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGEwPFJldFR5cGU+Ojp0aHJlYWRf
ZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoKCiAgICB0eXBlZGVmIEZ1bkRhdGEwPFJldFR5
cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgog
ICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25z
dCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFz
cyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6
RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKCgoKCgogICAgZnVuX2RhdGEtPmxv
Y2sucmVsZWFzZSAoKTsKIyA0ODQ5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJ
L2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdf
dGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKCk7CiAgICAgIH0K
ICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFu
ZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsK
ICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lz
dGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBSZXRUeXBlPgogIEZ1bkRhdGEwPFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxl
Y3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0
cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp
b24KICBGdW5EYXRhMDxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKCkKICB7
CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEwPHZvaWQ+KGZ1bl9wdHIpOwogIH0KCgoKCgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGExPEFyZzEsUmV0
VHlwZT46OkZ1bkRhdGExIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMSBhcmcxKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgm
RnVuRGF0YTE8QXJnMSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAgICAg
ICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpCiAg
e30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E
YXRhMTxBcmcxLFJldFR5cGU+OjpGdW5EYXRhMSAoY29uc3QgRnVuRGF0YTEgJmZ1bl9kYXRhKSA6
CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAg
ICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChm
dW5fZGF0YS5hcmcxKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1l
IFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGExPEFyZzEsUmV0VHlwZT46OmNsb25l
ICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhMSAoKnRoaXMpOwogIH0KCgoKICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBGdW5E
YXRhMTxBcmcxLFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK
CiAgICB0eXBlZGVmIEZ1bkRhdGExPEFyZzEsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVu
Y2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxG
dW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAg
ICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5m
dW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRh
LT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CgoKCgoKICAgIGZ1bl9k
YXRhLT5sb2NrLnJlbGVhc2UgKCk7CiMgNDk1MCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0
ZXJfbmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKCpmdW5fcHRyKShhcmcx
KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsK
ICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4u
LikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsK
ICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVt
cGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTE8QXJnMSxS
ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAg
ICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpCiAge30KCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRh
MTxBcmcxLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQXJnMSBhcmcxKQog
IHsKICAgIHJldHVybiBuZXcgRnVuRGF0YTE8QXJnMSx2b2lkPihmdW5fcHRyLCBhcmcxKTsKICB9
CgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1l
IFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+OjpGdW5EYXRhMiAoRnVuUHRy
IGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBh
cmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMikg
OgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGEyPEFyZzEsQXJnMixSZXRU
eXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu
X3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBh
cmcyIChhcmcyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+OjpGdW5E
YXRhMiAoY29uc3QgRnVuRGF0YTIgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRh
dGFCYXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1
bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAg
ICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoK
ICBGdW5EYXRhMjxBcmcxLEFyZzIsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0
dXJuIG5ldyBGdW5EYXRhMiAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBGdW5EYXRhMjxB
cmcxLEFyZzIsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoK
ICAgIHR5cGVkZWYgRnVuRGF0YTI8QXJnMSxBcmcyLFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBG
dW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRh
CiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlv
bi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5f
ZGF0YS0+ZnVuX3B0cjsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBh
cmcyID0gZnVuX2RhdGEtPmFyZzI7CgoKCgoKICAgIGZ1bl9kYXRhLT5sb2NrLnJlbGVhc2UgKCk7
CiMgNTA1NSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUv
YmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKICAg
IHRyeQogICAgICB7CiAgICAgICAgKCpmdW5fcHRyKShhcmcxLCBhcmcyKTsKICAgICAgfQogICAg
Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf
c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg
ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf
bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l
IEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTI8QXJnMSxB
cmcyLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIp
IDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVu
Y2Fwc3VsYXRpb24KICBGdW5EYXRhMjxBcmcxLEFyZzIsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6
Y29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyKQogIHsKICAgIHJldHVybiBuZXcg
RnVuRGF0YTI8QXJnMSxBcmcyLHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIpOwogIH0KCgoKCgoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg
dHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMzxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6RnVu
RGF0YTMgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMyBhcmczKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgm
RnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAg
ICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcx
IChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAg
IGFyZzMgKGFyZzMpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMzxBcmcxLEFy
ZzIsQXJnMyxSZXRUeXBlPjo6RnVuRGF0YTMgKGNvbnN0IEZ1bkRhdGEzICZmdW5fZGF0YSkgOgog
ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAg
ICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu
X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg
ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIFJldFR5
cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJldFR5cGU+Ojpj
bG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgRnVuRGF0YTMgKCp0aGlzKTsKICB9CgoK
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs
IHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0
VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYg
RnVuRGF0YTM8QXJnMSxBcmcyLEFyZzMsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fw
c3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5F
bmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAg
PSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5f
ZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5m
dW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBm
dW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwoKCgoKCiAgICBm
dW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDUxNjYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJl
Z2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgICgqZnVuX3B0ciko
YXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlv
biAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAg
IH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRp
b24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJu
IDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBl
bmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLFJl
dFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAg
ICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBl
PgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRhMzxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6
QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzMgYXJnMykKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGEzPEFyZzEsQXJnMixB
cmczLHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIsIGFyZzMpOwogIH0KCgoKCgoKICB0ZW1wbGF0
ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg
QXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJl
dFR5cGU+OjpGdW5EYXRhNCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCkgOgog
ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGE0PEFyZzEsQXJnMixBcmczLEFy
ZzQsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9w
dHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAg
ICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAg
ICAgICAgICAgICBhcmc0IChhcmc0KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIFJl
dFR5cGU+CiAgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6RnVuRGF0YTQg
KGNvbnN0IEZ1bkRhdGE0ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFz
ZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRy
KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAg
ICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0
YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCkKICB7fQoKCgog
IHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0
eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5EYXRh
NDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJl
dHVybiBuZXcgRnVuRGF0YTQgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFy
ZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1l
IFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTQ8QXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBl
Pjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBGdW5E
YXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNh
cHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVu
RW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAg
ID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVu
X2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+
ZnVuX3B0cjsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBhcmcyID0g
ZnVuX2RhdGEtPmFyZzI7CiAgICBBcmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsKICAgIEFyZzQg
YXJnNCA9IGZ1bl9kYXRhLT5hcmc0OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgp
OwojIDUyODIgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAg
ICB0cnkKICAgICAgewogICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7
CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAg
ICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4p
CiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAg
ICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBs
YXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt
ZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGE0PEFyZzEsQXJnMixBcmczLEFyZzQs
UmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgog
ICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQs
IHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE0PEFyZzEsQXJn
MixBcmczLEFyZzQsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChBcmcxIGFy
ZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc0IGFyZzQpCiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhNDxBcmcxLEFyZzIsQXJn
MyxBcmc0LHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQpOwogIH0KCgoKCgoK
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg
dHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRh
NTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkZ1bkRhdGE1IChGdW5QdHIgZnVu
X3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1KSA6
CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgmRnVuRGF0YTU8QXJnMSxBcmcyLEFyZzMs
QXJnNCxBcmc1LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAg
ICBmdW5fcHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSksCiAgICAg
ICAgICAgICAgICAgIGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChhcmczKSwK
ICAgICAgICAgICAgICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGFy
ZzUpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlw
ZT4KICBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkZ1bkRhdGE1
IChjb25zdCBGdW5EYXRhNSAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJh
c2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0
ciksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAg
ICAgICBhcmcyIChmdW5fZGF0YS5hcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2Rh
dGEuYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAg
ICAgICAgICAgICBhcmc1IChmdW5fZGF0YS5hcmc1KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5
cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE1
PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAg
ICByZXR1cm4gbmV3IEZ1bkRhdGE1ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl
bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGE1PEFyZzEsQXJn
MixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp
CiAgewoKCgogICAgdHlwZWRlZiBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0
VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9u
CiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNv
bnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0Ns
YXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNz
OjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVu
X2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJn
MyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBB
cmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFz
ZSAoKTsKIyA1NDAzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgp
OwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMsIGFy
ZzQsIGFyZzUpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykK
ICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBj
YXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwog
ICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0K
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E
YXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJn
Q29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm
dW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIs
IHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJl
dFR5cGU+CiAgRnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE1PEFyZzEsQXJnMixBcmczLEFyZzQs
QXJnNSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUpCiAgewog
ICAgcmV0dXJuIG5ldyBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsdm9pZD4oZnVu
X3B0ciwgYXJnMSwgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUpOwogIH0KCgoKCgoKICB0ZW1wbGF0ZSA8
dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJn
NCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5E
YXRhNjxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuRGF0YTYgKEZ1
blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmcz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KSA6CiAgICAgICAg
ICAgICAgICAgIEZ1bkRhdGFCYXNlICgmRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LEFyZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1
bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAg
ICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAg
ICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoYXJnNSks
CiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw
ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNjxB
cmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6RnVuRGF0YTYgKGNvbnN0IEZ1
bkRhdGE2ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2Rh
dGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAg
ICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIg
KGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwK
ICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAg
IGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5h
cmc2KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5
cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs
IHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE2PEFyZzEsQXJnMixB
cmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVy
biBuZXcgRnVuRGF0YTYgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy
ZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTY8
QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2lu
dCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgRnVuRGF0YTY8QXJnMSxBcmcyLEFyZzMs
QXJnNCxBcmc1LEFyZzYsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24g
KmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0
aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWlj
X2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNl
KTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwog
ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+
YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu
X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn
NiA9IGZ1bl9kYXRhLT5hcmc2OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwoj
IDU1MzAgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jh
c2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0
cnkKICAgICAgewogICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJn
NSwgYXJnNik7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQog
ICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNh
dGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAg
ICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoK
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz
LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBS
ZXRUeXBlPgogIEZ1bkRhdGE2PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+
OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAg
ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBB
cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt
ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp
b24KICBGdW5EYXRhNjxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6QXJn
Q29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNikKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRhdGE2
PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+KGZ1bl9wdHIsIGFyZzEsIGFyZzIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYpOwogIH0KCgoKCgoKCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5
cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIFJldFR5
cGU+CiAgRnVuRGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBl
Pjo6RnVuRGF0YTcgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcpIDoK
ICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZGdW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxB
cmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAg
ICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJn
MSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmcz
IChhcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAg
IGFyZzUgKGFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2IChhcmc2KSwKICAgICAgICAgICAg
ICAgICAgYXJnNyAoYXJnNykKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBl
bmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0
eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGE3
PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46OkZ1bkRhdGE3IChj
b25zdCBGdW5EYXRhNyAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2Ug
KGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciks
CiAgICAgICAgICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAg
ICBhcmcyIChmdW5fZGF0YS5hcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2RhdGEu
YXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAgICAg
ICAgICAgICBhcmc1IChmdW5fZGF0YS5hcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoZnVu
X2RhdGEuYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGZ1bl9kYXRhLmFyZzcpCiAge30K
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg
QXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgRnVuRGF0YTc8QXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7
CiAgICByZXR1cm4gbmV3IEZ1bkRhdGE3ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0
eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRU
eXBlPgogIHZvaWQgKgogIEZ1bkRhdGE3PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFy
ZzcsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5
cGVkZWYgRnVuRGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBl
PiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24KICAg
ICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29uc3Qg
VGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xhc3Mq
PiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6OkZ1
blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBBcmcxIGFyZzEgPSBmdW5fZGF0
YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJnMyBhcmczID0g
ZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsKICAgIEFyZzUg
YXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwogICAgQXJnNiBhcmc2ID0gZnVuX2RhdGEtPmFyZzY7CiAg
ICBBcmc3IGFyZzcgPSBmdW5fZGF0YS0+YXJnNzsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVs
ZWFzZSAoKTsKIyA1NjYzICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2Uv
aW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFk
ICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMs
IGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpl
eGNlcHRpb24gJmV4YykKICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMp
OwogICAgICB9CiAgICBjYXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25f
ZXhjZXB0aW9uICgpOwogICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAg
IHJldHVybiAwOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn
MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg
QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhNzxBcmcxLEFy
ZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0Nv
bGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu
X3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0
eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2
LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBG
dW5EYXRhNzxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+OjpBcmdD
b2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3KQogIHsKICAgIHJldHVybiBuZXcgRnVu
RGF0YTc8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyx2b2lkPihmdW5fcHRyLCBh
cmcxLCBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcpOwogIH0KCgoK
CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFy
ZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1l
IEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YTg8QXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjoKICBGdW5EYXRhOCAo
RnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgQXJnMiBh
cmcyLAogICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAg
ICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgIEFyZzcg
YXJnNywKICAgICAgICAgICAgQXJnOCBhcmc4KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFC
YXNlICgmRnVuRGF0YTg8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJl
dFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm
dW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSksCiAgICAgICAgICAgICAgICAg
IGFyZzIgKGFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChhcmczKSwKICAgICAgICAgICAg
ICAgICAgYXJnNCAoYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGFyZzUpLAogICAgICAg
ICAgICAgICAgICBhcmc2IChhcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoYXJnNyksCiAg
ICAgICAgICAgICAgICAgIGFyZzggKGFyZzgpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h
bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlw
ZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB
cmc3LEFyZzgsUmV0VHlwZT46OgogIEZ1bkRhdGE4IChjb25zdCBGdW5EYXRhOCAmZnVuX2RhdGEp
IDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAg
ICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIGFyZzEg
KGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChmdW5fZGF0YS5hcmcyKSwK
ICAgICAgICAgICAgICAgICAgYXJnMyAoZnVuX2RhdGEuYXJnMyksCiAgICAgICAgICAgICAgICAg
IGFyZzQgKGZ1bl9kYXRhLmFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChmdW5fZGF0YS5h
cmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoZnVuX2RhdGEuYXJnNiksCiAgICAgICAgICAg
ICAgICAgIGFyZzcgKGZ1bl9kYXRhLmFyZzcpLAogICAgICAgICAgICAgICAgICBhcmc4IChmdW5f
ZGF0YS5hcmc4KQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l
IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAg
RnVuRGF0YUJhc2UgKgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFy
ZzcsQXJnOCxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IEZ1bkRh
dGE4ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBB
cmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFt
ZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBSZXRUeXBlPgog
IHZvaWQgKgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn
OCxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlw
ZWRlZiBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0
VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9u
CiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNv
bnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0Ns
YXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNz
OjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVu
X2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJn
MyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBB
cmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2
OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0
YS0+YXJnODsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsKIyA1ODAzICIvaG9t
ZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9t
YW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsK
ICAgICAgICAoKmZ1bl9wdHIpKGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFy
ZzcsIGFyZzgpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykK
ICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBj
YXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwog
ICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0K
CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg
QXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhODxBcmcxLEFy
ZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6
QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRy
IChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l
IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAg
RnVuRW5jYXBzdWxhdGlvbgogIEZ1bkRhdGE4PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2
LEFyZzcsQXJnOCxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKEFyZzEgYXJn
MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFy
ZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBBcmc4IGFyZzgpCiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhODxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsdm9pZD4oZnVuX3B0ciwgYXJnMSwgYXJnMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmc3LCBh
cmc4KTsKICB9CgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg
dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJn
NiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUg
UmV0VHlwZT4KICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFy
ZzgsQXJnOSxSZXRUeXBlPjo6CiAgRnVuRGF0YTkgKEZ1blB0ciBmdW5fcHRyLAogICAgICAgICAg
ICBBcmcxIGFyZzEsCiAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgQXJnMyBhcmcz
LAogICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAg
ICAgQXJnNiBhcmc2LAogICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgIEFyZzggYXJn
OCwKICAgICAgICAgICAgQXJnOSBhcmc5KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl
ICgmRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks
UmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIg
KGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAg
ICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAgICAg
ICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoYXJnNSksCiAgICAg
ICAgICAgICAgICAgIGFyZzYgKGFyZzYpLAogICAgICAgICAgICAgICAgICBhcmc3IChhcmc3KSwK
ICAgICAgICAgICAgICAgICAgYXJnOCAoYXJnOCksCiAgICAgICAgICAgICAgICAgIGFyZzkgKGFy
ZzkpCiAge30KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg
dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0
VHlwZT4KICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs
QXJnOSxSZXRUeXBlPjo6CiAgRnVuRGF0YTkgKGNvbnN0IEZ1bkRhdGE5ICZmdW5fZGF0YSkgOgog
ICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAg
ICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu
X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg
ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJn
NCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUp
LAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAg
ICAgYXJnNyAoZnVuX2RhdGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRh
LmFyZzgpLAogICAgICAgICAgICAgICAgICBhcmc5IChmdW5fZGF0YS5hcmc5KQogIHt9CgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5
cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcs
IHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0
YUJhc2UgKgogIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJn
OCxBcmc5LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgRnVuRGF0
YTkgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l
IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVu
YW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LEFyZzYsQXJnNyxBcmc4LEFyZzksUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAq
YXJnKQogIHsKCgoKICAgIHR5cGVkZWYgRnVuRGF0YTk8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LEFyZzYsQXJnNyxBcmc4LEFyZzksUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3Vs
YXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNh
cHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBk
eW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0
YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5f
cHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5f
ZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0
ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFy
ZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7
CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRh
LT5hcmc5OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDU5NDcgIi9ob21l
L2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21h
bmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewog
ICAgICAgICgqZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJn
NywgYXJnOCwgYXJnOSk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAm
ZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0K
ICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24g
KCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7
CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt
ZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBl
bmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBl
PgogIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5
LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoK
ICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDx0
eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0
LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBB
cmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24K
ICBGdW5EYXRhOTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxS
ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjoKICBjb2xsZWN0X2FyZ3MgKEFyZzEgYXJnMSwKICAgICAg
ICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAg
ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAg
ICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg
IEFyZzggYXJnOCwKICAgICAgICAgICAgICAgIEFyZzkgYXJnOSkKICB7CiAgICByZXR1cm4KICAg
ICAgbmV3IEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxB
cmc5LHZvaWQ+CiAgICAgIChmdW5fcHRyLCBhcmcxLCBhcmcyLAogICAgICAgYXJnMywgYXJnNCwg
YXJnNSwgYXJnNiwKICAgICAgIGFyZzcsIGFyZzgsIGFyZzkpOwogIH0KCgoKCgogIHRlbXBsYXRl
IDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBB
cmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFt
ZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4K
ICBGdW5EYXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks
QXJnMTAsUmV0VHlwZT46OgogIEZ1bkRhdGExMCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAg
ICBBcmcxIGFyZzEsCiAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICBBcmczIGFy
ZzMsCiAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg
ICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICBB
cmc4IGFyZzgsCiAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICBBcmcxMCBhcmcx
MCkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJkZ1bkRhdGExMDxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dGhyZWFk
X2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAg
ICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwK
ICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFy
ZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJn
NiAoYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAgICAg
ICBhcmc4IChhcmc4KSwKICAgICAgICAgICAgICAgICAgYXJnOSAoYXJnOSksCiAgICAgICAgICAg
ICAgICAgIGFyZzEwIChhcmcxMCkKICB7fQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0
eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1
LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBB
cmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMTA8QXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46Ogog
IEZ1bkRhdGExMCAoY29uc3QgRnVuRGF0YTEwICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAg
ICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5f
ZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAg
ICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBh
cmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJn
NCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAg
ICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2Rh
dGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpLAogICAgICAg
ICAgICAgICAgICBhcmc5IChmdW5fZGF0YS5hcmc5KSwKICAgICAgICAgICAgICAgICAgYXJnMTAg
KGZ1bl9kYXRhLmFyZzEwKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVu
YW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5
cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzks
IHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBGdW5E
YXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAs
UmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBGdW5EYXRhMTAgKCp0
aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5
cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs
IHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFy
ZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJn
MyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6dGhyZWFkX2Vu
dHJ5X3BvaW50ICh2b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBGdW5EYXRhMTA8QXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT4gVGhp
c0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0g
cmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXND
bGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1
bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIg
ZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFy
ZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9k
YXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUg
PSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJn
NyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsK
ICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5OwogICAgQXJnMTAgYXJnMTAgPSBmdW5fZGF0
YS0+YXJnMTA7CgoKCgoKICAgIGZ1bl9kYXRhLT5sb2NrLnJlbGVhc2UgKCk7CiMgNjA5OSAiL2hv
bWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRf
bWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7
CiAgICAgICAgKCpmdW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBh
cmc3LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgICAgIH0KICAgIGNhdGNoIChjb25zdCBzdGQ6OmV4
Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNlcHRpb24gKGV4Yyk7
CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5kbGVfdW5rbm93bl9l
eGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJlYWQgKCk7CgogICAg
cmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy
LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB
cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFt
ZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhMTA8QXJnMSxBcmcyLEFyZzMsQXJn
NCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6
QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRy
IChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1l
IEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVu
YW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRpb24KICBGdW5EYXRh
MTA8QXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0
VHlwZT46OkFyZ0NvbGxlY3Rvcjo6CiAgY29sbGVjdF9hcmdzIChBcmcxIGFyZzEsCiAgICAgICAg
ICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAg
ICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAg
ICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICBB
cmc4IGFyZzgsCiAgICAgICAgICAgICAgICBBcmc5IGFyZzksCiAgICAgICAgICAgICAgICBBcmcx
MCBhcmcxMCkKICB7CiAgICByZXR1cm4KICAgICAgbmV3IEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJn
MyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPgogICAgICAoZnVuX3B0
ciwgYXJnMSwgYXJnMiwKICAgICAgIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsCiAgICAgICBhcmc3
LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Ms
IHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlwZT46Ok1lbUZ1bkRh
dGEwIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENsYXNzICpvYmplY3QpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZN
ZW1GdW5EYXRhMDxDbGFzcyxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50KSwKICAgICAgICAg
ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAob2Jq
ZWN0KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBSZXRUeXBlPgog
IE1lbUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpNZW1GdW5EYXRhMCAoY29uc3QgTWVtRnVuRGF0
YTAgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlIChmdW5fZGF0YSks
CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIpLAogICAgICAgICAg
ICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCkKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFz
cyBDbGFzcywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTA8
Q2xhc3MsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBNZW1GdW5E
YXRhMCAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIFJl
dFR5cGU+CiAgdm9pZCAqCiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlwZT46OnRocmVhZF9lbnRy
eV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTA8Q2xhc3Ms
UmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24gKmZ1bl9lbmNhcHN1bGF0
aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0aW9uKj4oYXJnKTsKICAg
IGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWljX2Nhc3Q8Y29uc3QgVGhp
c0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNlKTsKCgogICAgVGhpc0Ns
YXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwogICAgQ2xhc3MgKm9iamVj
dCA9IGZ1bl9kYXRhLT5vYmplY3Q7CgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsK
IyA2MjE1ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9i
YXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAg
dHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0cikoKTsKICAgICAgfQogICAgY2F0
Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3Rk
X2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAg
IGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3
X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz
LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGEwPENsYXNzLFJldFR5cGU+OjpBcmdDb2xs
ZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAg
ZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h
bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTA8Q2xhc3MsUmV0VHlw
ZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0KQogIHsKICAgIHJl
dHVybiBuZXcgTWVtRnVuRGF0YTA8Q2xhc3Msdm9pZD4oZnVuX3B0ciwgb2JqZWN0KTsKICB9CgoK
CiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1
bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5EYXRhMDxDbGFzcyxSZXRUeXBlPjo6QXJnQ29sbGVjdG9y
Ojpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJn
cyAoJm9iamVjdCk7CiAgfQoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB
cmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsUmV0VHlwZT46
Ok1lbUZ1bkRhdGExIChGdW5QdHIgZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxKSA6CiAgICAgICAgICAgICAgICAg
IEZ1bkRhdGFCYXNlICgmTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6dGhyZWFkX2Vu
dHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAgICAg
ICAgICAgICAgIG9iamVjdCAob2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJnMSkK
ICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
UmV0VHlwZT4KICBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+OjpNZW1GdW5EYXRhMSAo
Y29uc3QgTWVtRnVuRGF0YTEgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFC
YXNlIChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9w
dHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCksCiAgICAgICAg
ICAgICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgog
IE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAg
cmV0dXJuIG5ldyBNZW1GdW5EYXRhMSAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+CiAgdm9pZCAqCiAgTWVtRnVu
RGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp
CiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+IFRoaXND
bGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJl
aW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xh
c3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5f
ZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1
bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+
b2JqZWN0OwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CgoKCgoKICAgIGZ1bl9kYXRh
LT5sb2NrLnJlbGVhc2UgKCk7CiMgNjMzMCAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJf
bmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIp
KGFyZzEpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4YykKICAg
ICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAgICBjYXRj
aCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgpOwogICAg
ICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwogIH0KCgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIFJldFR5cGU+
CiAgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xs
ZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9w
dHIpCiAge30KCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5h
bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSxS
ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzEgYXJnMSkKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGExPENsYXNzLEFyZzEsdm9p
ZD4oZnVuX3B0ciwgb2JqZWN0LCBhcmcxKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNz
LCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3Vs
YXRpb24KICBNZW1GdW5EYXRhMTxDbGFzcyxBcmcxLFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNv
bGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxKQogIHsKICAgIHJldHVy
biBjb2xsZWN0X2FyZ3MgKCZvYmplY3QsIGFyZzEpOwogIH0KCgoKCiAgdGVtcGxhdGUgPGNsYXNz
IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgog
IE1lbUZ1bkRhdGEyPENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6TWVtRnVuRGF0YTIgKEZ1blB0
ciBmdW5fcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMikgOgogICAgICAgICAgICAgICAgICBG
dW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGEyPENsYXNzLEFyZzEsQXJnMixSZXRUeXBlPjo6dGhyZWFk
X2VudHJ5X3BvaW50KSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0ciksCiAgICAg
ICAgICAgICAgICAgIG9iamVjdCAob2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoYXJn
MSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGFyZzIpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xh
c3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+
CiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+OjpNZW1GdW5EYXRhMiAoY29u
c3QgTWVtRnVuRGF0YTIgJmZ1bl9kYXRhKSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl
IChmdW5fZGF0YSksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9kYXRhLmZ1bl9wdHIp
LAogICAgICAgICAgICAgICAgICBvYmplY3QgKGZ1bl9kYXRhLm9iamVjdCksCiAgICAgICAgICAg
ICAgICAgIGFyZzEgKGZ1bl9kYXRhLmFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChmdW5f
ZGF0YS5hcmcyKQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx
LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBNZW1G
dW5EYXRhMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAg
cmV0dXJuIG5ldyBNZW1GdW5EYXRhMiAoKnRoaXMpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAg
dm9pZCAqCiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+Ojp0aHJlYWRfZW50
cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoKCiAgICB0eXBlZGVmIE1lbUZ1bkRhdGEyPENsYXNz
LEFyZzEsQXJnMixSZXRUeXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVu
X2VuY2Fwc3VsYXRpb24KICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24q
PihhcmcpOwogICAgY29uc3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2Fz
dDxjb25zdCBUaGlzQ2xhc3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoK
CiAgICBUaGlzQ2xhc3M6OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBD
bGFzcyAqb2JqZWN0ID0gZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRh
LT5hcmcxOwogICAgQXJnMiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CgoKCgoKICAgIGZ1bl9kYXRh
LT5sb2NrLnJlbGVhc2UgKCk7CiMgNjQ0OSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVh
bC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJf
bmV3X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIp
KGFyZzEsIGFyZzIpOwogICAgICB9CiAgICBjYXRjaCAoY29uc3Qgc3RkOjpleGNlcHRpb24gJmV4
YykKICAgICAgewogICAgICAgIGhhbmRsZV9zdGRfZXhjZXB0aW9uIChleGMpOwogICAgICB9CiAg
ICBjYXRjaCAoLi4uKQogICAgICB7CiAgICAgICAgaGFuZGxlX3Vua25vd25fZXhjZXB0aW9uICgp
OwogICAgICB9OwogICAgZGVyZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwoKICAgIHJldHVybiAwOwog
IH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFy
ZzIsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5
cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAg
ICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBD
bGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgUmV0VHlwZT4KICBG
dW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTI8Q2xhc3MsQXJnMSxBcmcyLFJldFR5cGU+OjpB
cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcx
IGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyKQogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0
YTI8Q2xhc3MsQXJnMSxBcmcyLHZvaWQ+KGZ1bl9wdHIsIG9iamVjdCwgYXJnMSwgYXJnMik7CiAg
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy
LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5E
YXRhMjxDbGFzcyxBcmcxLEFyZzIsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdz
IChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFy
ZzIpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMik7CiAg
fQoKCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhMzxDbGFz
cyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6TWVtRnVuRGF0YTMgKEZ1blB0ciBmdW5fcHRyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Q2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMykgOgogICAg
ICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixB
cmczLFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5f
cHRyIChmdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAg
ICAgICAgICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAg
ICAgICAgICAgICAgICAgIGFyZzMgKGFyZzMpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh
c3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1l
IFJldFR5cGU+CiAgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46Ok1l
bUZ1bkRhdGEzIChjb25zdCBNZW1GdW5EYXRhMyAmZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAg
ICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVu
X2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVuX2RhdGEub2JqZWN0
KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAgICAg
ICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5fZGF0
YS5hcmczKQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0
eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFC
YXNlICoKICBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6Y2xvbmUg
KCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGEzICgqdGhpcyk7CiAgfQoKCgog
IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhMzxDbGFz
cyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2b2lkICphcmcp
CiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRU
eXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBzdWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24K
ICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVuY2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29u
c3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xh
c3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9kYXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6
OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1bl9wdHI7CiAgICBDbGFzcyAqb2JqZWN0ID0g
ZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJnMSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJn
MiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CiAgICBBcmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsK
CgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFzZSAoKTsKIyA2NTc2ICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50
LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAo
b2JqZWN0LT4qZnVuX3B0cikoYXJnMSwgYXJnMiwgYXJnMyk7CiAgICAgIH0KICAgIGNhdGNoIChj
b25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNl
cHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5k
bGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJl
YWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlw
ZT4KICBNZW1GdW5EYXRhMzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxSZXRUeXBlPjo6QXJnQ29sbGVj
dG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6CiAgICAgICAgICAgICAgICAgIGZ1
bl9wdHIgKGZ1bl9wdHIpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1l
IEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIFJldFR5cGU+CiAg
RnVuRW5jYXBzdWxhdGlvbgogIE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEsQXJnMixBcmczLFJldFR5
cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzMgYXJnMykKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGEzPENsYXNzLEFyZzEs
QXJnMixBcmczLHZvaWQ+KGZ1bl9wdHIsIG9iamVjdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMyk7CiAgfQoKCgog
IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1bGF0aW9u
CiAgTWVtRnVuRGF0YTM8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsUmV0VHlwZT46OkFyZ0NvbGxlY3Rv
cjo6Y29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcx
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczKQog
IHsKICAgIHJldHVybiBjb2xsZWN0X2FyZ3MgKCZvYmplY3QsIGFyZzEsIGFyZzIsIGFyZzMpOwog
IH0KCgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBN
ZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpNZW1GdW5EYXRh
NCAoRnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCkgOgogICAg
ICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoJk1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixB
cmczLEFyZzQsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAg
IGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAg
ICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcy
KSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQg
KGFyZzQpCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIFJldFR5
cGU+CiAgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPjo6TWVt
RnVuRGF0YTQgKGNvbnN0IE1lbUZ1bkRhdGE0ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAg
ICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5f
ZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3Qp
LAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAg
ICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRh
LmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChmdW5fZGF0YS5hcmc0KQogIHt9CgoKCiAg
dGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBl
bmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNl
ICoKICBNZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpjbG9u
ZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTQgKCp0aGlzKTsKICB9CgoK
CiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0
eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgog
IE1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsUmV0VHlwZT46OnRocmVhZF9l
bnRyeV9wb2ludCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTQ8Q2xh
c3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRUeXBlPiBUaGlzQ2xhc3M7CgogICAgRnVuRW5jYXBz
dWxhdGlvbiAqZnVuX2VuY2Fwc3VsYXRpb24KICAgICAgPSByZWludGVycHJldF9jYXN0PEZ1bkVu
Y2Fwc3VsYXRpb24qPihhcmcpOwogICAgY29uc3QgVGhpc0NsYXNzICpmdW5fZGF0YQogICAgICA9
IGR5bmFtaWNfY2FzdDxjb25zdCBUaGlzQ2xhc3MqPiAoZnVuX2VuY2Fwc3VsYXRpb24tPmZ1bl9k
YXRhX2Jhc2UpOwoKCiAgICBUaGlzQ2xhc3M6OkZ1blB0ciBmdW5fcHRyID0gZnVuX2RhdGEtPmZ1
bl9wdHI7CiAgICBDbGFzcyAqb2JqZWN0ID0gZnVuX2RhdGEtPm9iamVjdDsKICAgIEFyZzEgYXJn
MSA9IGZ1bl9kYXRhLT5hcmcxOwogICAgQXJnMiBhcmcyID0gZnVuX2RhdGEtPmFyZzI7CiAgICBB
cmczIGFyZzMgPSBmdW5fZGF0YS0+YXJnMzsKICAgIEFyZzQgYXJnNCA9IGZ1bl9kYXRhLT5hcmc0
OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDY3MTAgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l
bnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAg
IChvYmplY3QtPipmdW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0KTsKICAgICAgfQogICAg
Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf
c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg
ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf
bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs
YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt
ZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE0PENsYXNzLEFyZzEsQXJnMixB
cmczLEFyZzQsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVu
X3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVt
cGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt
ZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkVuY2Fwc3VsYXRp
b24KICBNZW1GdW5EYXRhNDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LFJldFR5cGU+OjpBcmdD
b2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0KQogIHsK
ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCx2b2lk
PihmdW5fcHRyLCBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwgYXJnMywgYXJnNCk7CiAgfQoKCgogIHRl
bXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5h
bWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5F
bmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxSZXRU
eXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQg
YXJnNCkKICB7CiAgICByZXR1cm4gY29sbGVjdF9hcmdzICgmb2JqZWN0LCBhcmcxLCBhcmcyLCBh
cmczLCBhcmc0KTsKICB9CgoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJn
MSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUg
QXJnNSwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJn
MyxBcmc0LEFyZzUsUmV0VHlwZT46Ok1lbUZ1bkRhdGE1IChGdW5QdHIgZnVuX3B0ciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcy
IGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBcmc1IGFyZzUpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZNZW1GdW5E
YXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OnRocmVhZF9lbnRy
eV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAg
ICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAog
ICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJn
MyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1
IChhcmc1KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0
eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1
LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFy
ZzQsQXJnNSxSZXRUeXBlPjo6TWVtRnVuRGF0YTUgKGNvbnN0IE1lbUZ1bkRhdGE1ICZmdW5fZGF0
YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAgICAgICAg
ICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2Jq
ZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5fZGF0YS5h
cmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAgICAgICAg
ICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChmdW5f
ZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVuX2RhdGEuYXJnNSkKICB7fQoK
CgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwg
dHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgUmV0
VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMs
QXJnNCxBcmc1LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsKICAgIHJldHVybiBuZXcgTWVt
RnVuRGF0YTUgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl
bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQgKgogIE1lbUZ1bkRhdGE1PENsYXNz
LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxSZXRUeXBlPjo6dGhyZWFkX2VudHJ5X3BvaW50ICh2
b2lkICphcmcpCiAgewoKCgogICAgdHlwZWRlZiBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3VsYXRpb24g
KmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNhcHN1bGF0
aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBkeW5hbWlj
X2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0YV9iYXNl
KTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5fcHRyOwog
ICAgQ2xhc3MgKm9iamVjdCA9IGZ1bl9kYXRhLT5vYmplY3Q7CiAgICBBcmcxIGFyZzEgPSBmdW5f
ZGF0YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJnMyBhcmcz
ID0gZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsKICAgIEFy
ZzUgYXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwoKCgoKCiAgICBmdW5fZGF0YS0+bG9jay5yZWxlYXNl
ICgpOwojIDY4NDkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lzdGVyX25ld190aHJlYWQgKCk7
CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipmdW5fcHRyKShhcmcxLCBhcmcyLCBh
cmczLCBhcmc0LCBhcmc1KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9u
ICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAg
fQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlv
biAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4g
MDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFt
ZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBl
bmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJn
NSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpBcmdDb2xsZWN0b3IgKEZ1blB0ciBmdW5fcHRyKSA6
CiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpCiAge30KCgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs
IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRW5j
YXBzdWxhdGlvbgogIE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxS
ZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFy
ZzUgYXJnNSkKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGE1PENsYXNzLEFyZzEsQXJnMixB
cmczLEFyZzQsQXJnNSx2b2lkPihmdW5fcHRyLCBvYmplY3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBh
cmczLCBhcmc0LCBhcmc1KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl
bmFtZSBBcmc1LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24K
ICBNZW1GdW5EYXRhNTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsUmV0VHlwZT46OkFy
Z0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzQgYXJnNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUpCiAg
ewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwgYXJnMywgYXJn
NCwgYXJnNSk7CiAgfQoKCgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx
LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBB
cmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE2PENsYXNz
LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpNZW1GdW5EYXRhNiAoRnVu
UHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJn
NSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KSA6CiAgICAgICAgICAgICAgICAgIEZ1
bkRhdGFCYXNlICgmTWVtRnVuRGF0YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFy
ZzYsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9w
dHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAg
ICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAg
ICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQp
LAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAo
YXJnNikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlw
ZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwg
dHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNjxDbGFzcyxBcmcx
LEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6TWVtRnVuRGF0YTYgKGNvbnN0IE1l
bUZ1bkRhdGE2ICZmdW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVu
X2RhdGEpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAg
ICAgICAgICAgICAgICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAg
ICBhcmcxIChmdW5fZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEu
YXJnMiksCiAgICAgICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAg
ICAgICAgICBhcmc0IChmdW5fZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVu
X2RhdGEuYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGZ1bl9kYXRhLmFyZzYpCiAge30K
CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIs
IHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFy
ZzYsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0YUJhc2UgKgogIE1lbUZ1bkRhdGE2PENsYXNz
LEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAog
IHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTYgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUg
PGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz
LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBS
ZXRUeXBlPgogIHZvaWQgKgogIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQs
QXJnNSxBcmc2LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK
CiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB
cmc2LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBz
dWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7
CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0
IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRo
aXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpv
YmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0OwogICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7
CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRh
LT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBm
dW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5hcmc2OwoKCgoKCiAgICBm
dW5fZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDY5OTUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5J
SS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJl
Z2lzdGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipm
dW5fcHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsKICAgICAgfQogICAg
Y2F0Y2ggKGNvbnN0IHN0ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVf
c3RkX2V4Y2VwdGlvbiAoZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAg
ICAgIGhhbmRsZV91bmtub3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJf
bmV3X3RocmVhZCAoKTsKCiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs
YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt
ZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBSZXRUeXBlPgog
IE1lbUZ1bkRhdGE2PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LFJldFR5cGU+
OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAg
ICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFz
cywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg
QXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgUmV0VHlwZT4KICBG
dW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxB
cmc1LEFyZzYsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2KQogIHsKICAgIHJldHVybiBuZXcgTWVtRnVuRGF0
YTY8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsdm9pZD4oZnVuX3B0ciwgb2Jq
ZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2KTsKICB9
CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy
LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB
cmc2LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1G
dW5EYXRhNjxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixSZXRUeXBlPjo6QXJn
Q29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2
IGFyZzYpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNik7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xh
c3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1l
IEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVu
YW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LEFyZzYsQXJnNyxSZXRUeXBlPjo6TWVtRnVuRGF0YTcgKEZ1blB0ciBmdW5fcHRyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFy
ZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnMyBhcmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBBcmc3IGFyZzcpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2Ug
KCZNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LFJl
dFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChm
dW5fcHRyKSwKICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAgICAgICAg
ICAgICBhcmcxIChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAg
ICAgICAgICAgIGFyZzMgKGFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAg
ICAgICAgICAgICAgICAgYXJnNSAoYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYp
LAogICAgICAgICAgICAgICAgICBhcmc3IChhcmc3KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNz
IENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBl
bmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0
eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQs
QXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46Ok1lbUZ1bkRhdGE3IChjb25zdCBNZW1GdW5EYXRhNyAm
ZnVuX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAg
ICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAg
ICAgIG9iamVjdCAoZnVuX2RhdGEub2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVu
X2RhdGEuYXJnMSksCiAgICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAg
ICAgICAgICAgICAgICBhcmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJn
NCAoZnVuX2RhdGEuYXJnNCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUp
LAogICAgICAgICAgICAgICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAg
ICAgYXJnNyAoZnVuX2RhdGEuYXJnNykKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywg
dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJn
NCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUg
UmV0VHlwZT4KICBGdW5EYXRhQmFzZSAqCiAgTWVtRnVuRGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFy
ZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICBy
ZXR1cm4gbmV3IE1lbUZ1bkRhdGE3ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBD
bGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5h
bWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlw
ZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJn
MyxBcmc0LEFyZzUsQXJnNixBcmc3LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQg
KmFyZykKICB7CgoKCiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixBcmcz
LEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT4gVGhpc0NsYXNzOwoKICAgIEZ1bkVuY2Fwc3Vs
YXRpb24gKmZ1bl9lbmNhcHN1bGF0aW9uCiAgICAgID0gcmVpbnRlcnByZXRfY2FzdDxGdW5FbmNh
cHN1bGF0aW9uKj4oYXJnKTsKICAgIGNvbnN0IFRoaXNDbGFzcyAqZnVuX2RhdGEKICAgICAgPSBk
eW5hbWljX2Nhc3Q8Y29uc3QgVGhpc0NsYXNzKj4gKGZ1bl9lbmNhcHN1bGF0aW9uLT5mdW5fZGF0
YV9iYXNlKTsKCgogICAgVGhpc0NsYXNzOjpGdW5QdHIgZnVuX3B0ciA9IGZ1bl9kYXRhLT5mdW5f
cHRyOwogICAgQ2xhc3MgKm9iamVjdCA9IGZ1bl9kYXRhLT5vYmplY3Q7CiAgICBBcmcxIGFyZzEg
PSBmdW5fZGF0YS0+YXJnMTsKICAgIEFyZzIgYXJnMiA9IGZ1bl9kYXRhLT5hcmcyOwogICAgQXJn
MyBhcmczID0gZnVuX2RhdGEtPmFyZzM7CiAgICBBcmc0IGFyZzQgPSBmdW5fZGF0YS0+YXJnNDsK
ICAgIEFyZzUgYXJnNSA9IGZ1bl9kYXRhLT5hcmc1OwogICAgQXJnNiBhcmc2ID0gZnVuX2RhdGEt
PmFyZzY7CiAgICBBcmc3IGFyZzcgPSBmdW5fZGF0YS0+YXJnNzsKCgoKCgogICAgZnVuX2RhdGEt
PmxvY2sucmVsZWFzZSAoKTsKIyA3MTQ5ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFs
LklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9u
ZXdfdGhyZWFkICgpOwogICAgdHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0ciko
YXJnMSwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7CiAgICAgIH0KICAgIGNh
dGNoIChjb25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0
ZF9leGNlcHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAg
ICBoYW5kbGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25l
d190aHJlYWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFz
cywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUg
QXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5h
bWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhNzxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUs
QXJnNixBcmc3LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1
bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRl
bXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5h
bWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlw
ZW5hbWUgQXJnNywgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVu
RGF0YTc8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxSZXRUeXBlPjo6
QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICpvYmplY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmczIGFyZzMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJn
NCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNykKICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRh
dGE3PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsdm9pZD4oZnVuX3B0
ciwgb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUs
IGFyZzYsIGFyZzcpOwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFy
ZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1l
IEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIFJldFR5cGU+CiAg
aW5saW5lCiAgRnVuRW5jYXBzdWxhdGlvbgogIE1lbUZ1bkRhdGE3PENsYXNzLEFyZzEsQXJnMixB
cmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9h
cmdzIChDbGFzcyAmb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzIgYXJnMiwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzUgYXJnNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3
IGFyZzcpCiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNyk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg
Q2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVu
YW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5
cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+OjpNZW1GdW5EYXRhOCAo
RnVuUHRyIGZ1bl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9iamVjdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOCBhcmc4KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNlICgmTWVtRnVuRGF0YTg8
Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+Ojp0
aHJlYWRfZW50cnlfcG9pbnQpLAogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKSwK
ICAgICAgICAgICAgICAgICAgb2JqZWN0IChvYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcx
IChhcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoYXJnMiksCiAgICAgICAgICAgICAgICAg
IGFyZzMgKGFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0IChhcmc0KSwKICAgICAgICAgICAg
ICAgICAgYXJnNSAoYXJnNSksCiAgICAgICAgICAgICAgICAgIGFyZzYgKGFyZzYpLAogICAgICAg
ICAgICAgICAgICBhcmc3IChhcmc3KSwKICAgICAgICAgICAgICAgICAgYXJnOCAoYXJnOCkKICB7
fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJn
MiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUg
QXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBN
ZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs
UmV0VHlwZT46Ok1lbUZ1bkRhdGE4IChjb25zdCBNZW1GdW5EYXRhOCAmZnVuX2RhdGEpIDoKICAg
ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAg
ZnVuX3B0ciAoZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVu
X2RhdGEub2JqZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAg
ICAgICAgICAgICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBh
cmczIChmdW5fZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJn
NCksCiAgICAgICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAg
ICAgICBhcmc2IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2Rh
dGEuYXJnNyksCiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpCiAge30KCgoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5
cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYs
IHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIFJldFR5cGU+CiAgRnVuRGF0
YUJhc2UgKgogIE1lbUZ1bkRhdGE4PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2
LEFyZzcsQXJnOCxSZXRUeXBlPjo6Y2xvbmUgKCkgY29uc3QKICB7CiAgICByZXR1cm4gbmV3IE1l
bUZ1bkRhdGE4ICgqdGhpcyk7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5h
bWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlw
ZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwg
dHlwZW5hbWUgUmV0VHlwZT4KICB2b2lkICoKICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2lu
dCAodm9pZCAqYXJnKQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxB
cmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LFJldFR5cGU+IFRoaXNDbGFzczsKCiAg
ICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9k
YXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxh
dGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBm
dW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0Owog
ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+
YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu
X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn
NiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBB
cmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKCgoKCgogICAgZnVuX2RhdGEtPmxvY2sucmVsZWFz
ZSAoKTsKIyA3MzA2ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5j
bHVkZS9iYXNlL3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgICByZWdpc3Rlcl9uZXdfdGhyZWFkICgp
OwogICAgdHJ5CiAgICAgIHsKICAgICAgICAob2JqZWN0LT4qZnVuX3B0cikoYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7CiAgICAgIH0KICAgIGNhdGNoIChj
b25zdCBzdGQ6OmV4Y2VwdGlvbiAmZXhjKQogICAgICB7CiAgICAgICAgaGFuZGxlX3N0ZF9leGNl
cHRpb24gKGV4Yyk7CiAgICAgIH0KICAgIGNhdGNoICguLi4pCiAgICAgIHsKICAgICAgICBoYW5k
bGVfdW5rbm93bl9leGNlcHRpb24gKCk7CiAgICAgIH07CiAgICBkZXJlZ2lzdGVyX25ld190aHJl
YWQgKCk7CgogICAgcmV0dXJuIDA7CiAgfQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg
dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJn
OCwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB
cmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVj
dG9yIChGdW5QdHIgZnVuX3B0cikgOgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRy
KQogIHt9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFt
ZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBl
bmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBSZXRUeXBl
PgogIEZ1bkVuY2Fwc3VsYXRpb24KICBNZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxB
cmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9h
cmdzIChDbGFzcyAqb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIEFyZzEgYXJnMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmcyIGFyZzIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBh
cmczLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzQgYXJnNCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzcgYXJnNywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgpCiAgewogICAgcmV0dXJuIG5ldyBN
ZW1GdW5EYXRhODxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs
dm9pZD4oZnVuX3B0ciwgb2JqZWN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJnMSwgYXJnMiwg
YXJnMywgYXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCk7CiAgfQoKCgogIHRlbXBsYXRlIDxj
bGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywg
dHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJn
NywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgUmV0VHlwZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1
bGF0aW9uCiAgTWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYs
QXJnNyxBcmc4LFJldFR5cGU+OjpBcmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgJm9i
amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgQXJnOCBhcmc4KQogIHsKICAgIHJldHVybiBjb2xsZWN0X2FyZ3MgKCZvYmpl
Y3QsIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFyZzYsIGFyZzcsIGFyZzgpOwogIH0K
CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy
LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB
cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFt
ZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB
cmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpNZW1GdW5EYXRhOSAoRnVuUHRyIGZ1bl9wdHIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDbGFzcyAqb2JqZWN0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQXJnMiBhcmcyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmcz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnNiBhcmc2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnOSBhcmc5KSA6CiAgICAgICAgICAgICAgICAgIEZ1bkRhdGFCYXNl
ICgmTWVtRnVuRGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxB
cmc4LEFyZzksUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAg
IGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAgICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAg
ICAgICAgICAgICAgICAgIGFyZzEgKGFyZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcy
KSwKICAgICAgICAgICAgICAgICAgYXJnMyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQg
KGFyZzQpLAogICAgICAgICAgICAgICAgICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAg
YXJnNiAoYXJnNiksCiAgICAgICAgICAgICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAg
ICAgICBhcmc4IChhcmc4KSwKICAgICAgICAgICAgICAgICAgYXJnOSAoYXJnOSkKICB7fQoKCgog
IHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlw
ZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwg
dHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0
VHlwZT4KICBNZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB
cmc3LEFyZzgsQXJnOSxSZXRUeXBlPjo6TWVtRnVuRGF0YTkgKGNvbnN0IE1lbUZ1bkRhdGE5ICZm
dW5fZGF0YSkgOgogICAgICAgICAgICAgICAgICBGdW5EYXRhQmFzZSAoZnVuX2RhdGEpLAogICAg
ICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fZGF0YS5mdW5fcHRyKSwKICAgICAgICAgICAgICAg
ICAgb2JqZWN0IChmdW5fZGF0YS5vYmplY3QpLAogICAgICAgICAgICAgICAgICBhcmcxIChmdW5f
ZGF0YS5hcmcxKSwKICAgICAgICAgICAgICAgICAgYXJnMiAoZnVuX2RhdGEuYXJnMiksCiAgICAg
ICAgICAgICAgICAgIGFyZzMgKGZ1bl9kYXRhLmFyZzMpLAogICAgICAgICAgICAgICAgICBhcmc0
IChmdW5fZGF0YS5hcmc0KSwKICAgICAgICAgICAgICAgICAgYXJnNSAoZnVuX2RhdGEuYXJnNSks
CiAgICAgICAgICAgICAgICAgIGFyZzYgKGZ1bl9kYXRhLmFyZzYpLAogICAgICAgICAgICAgICAg
ICBhcmc3IChmdW5fZGF0YS5hcmc3KSwKICAgICAgICAgICAgICAgICAgYXJnOCAoZnVuX2RhdGEu
YXJnOCksCiAgICAgICAgICAgICAgICAgIGFyZzkgKGZ1bl9kYXRhLmFyZzkpCiAge30KCgoKICB0
ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVu
YW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5
cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIFJldFR5
cGU+CiAgRnVuRGF0YUJhc2UgKgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFy
ZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpjbG9uZSAoKSBjb25zdAogIHsK
ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTkgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNs
YXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0
eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3
LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIHZvaWQg
KgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcs
QXJnOCxBcmc5LFJldFR5cGU+Ojp0aHJlYWRfZW50cnlfcG9pbnQgKHZvaWQgKmFyZykKICB7CgoK
CiAgICB0eXBlZGVmIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxB
cmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+IFRoaXNDbGFzczsKCiAgICBGdW5FbmNhcHN1bGF0
aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0X2Nhc3Q8RnVuRW5jYXBz
dWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9kYXRhCiAgICAgID0gZHlu
YW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxhdGlvbi0+ZnVuX2RhdGFf
YmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBmdW5fZGF0YS0+ZnVuX3B0
cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0OwogICAgQXJnMSBhcmcxID0g
ZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+YXJnMjsKICAgIEFyZzMg
YXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVuX2RhdGEtPmFyZzQ7CiAg
ICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJnNiA9IGZ1bl9kYXRhLT5h
cmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBBcmc4IGFyZzggPSBmdW5f
ZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5OwoKCgoKCiAgICBmdW5f
ZGF0YS0+bG9jay5yZWxlYXNlICgpOwojIDc0NjkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgIHJlZ2lz
dGVyX25ld190aHJlYWQgKCk7CiAgICB0cnkKICAgICAgewogICAgICAgIChvYmplY3QtPipmdW5f
cHRyKShhcmcxLCBhcmcyLCBhcmczLCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmc1LCBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5KTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0
ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAo
ZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtu
b3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsK
CiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB
cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt
ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBl
bmFtZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGE5PENsYXNzLEFyZzEsQXJn
MixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LFJldFR5cGU+OjpBcmdDb2xsZWN0
b3I6OkFyZ0NvbGxlY3RvciAoRnVuUHRyIGZ1bl9wdHIpIDoKICAgICAgICAgICAgICAgICAgZnVu
X3B0ciAoZnVuX3B0cikKICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUg
QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h
bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlw
ZW5hbWUgQXJnOSwgdHlwZW5hbWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVu
RGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzks
UmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6Y29sbGVjdF9hcmdzIChDbGFzcyAqb2JqZWN0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMyBhcmczLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNSBhcmc1LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNiBhcmc2LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnNyBhcmc3LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOSBhcmc5KQogIHsK
ICAgIHJldHVybiBuZXcgTWVtRnVuRGF0YTk8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LEFyZzYsQXJnNyxBcmc4LEFyZzksdm9pZD4oZnVuX3B0ciwgb2JqZWN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBhcmcxLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBh
cmc4LCBhcmc5KTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcx
LCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBB
cmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFt
ZSBBcmc5LCB0eXBlbmFtZSBSZXRUeXBlPgogIGlubGluZQogIEZ1bkVuY2Fwc3VsYXRpb24KICBN
ZW1GdW5EYXRhOTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs
QXJnOSxSZXRUeXBlPjo6QXJnQ29sbGVjdG9yOjpjb2xsZWN0X2FyZ3MgKENsYXNzICZvYmplY3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmczIGFyZzMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc0IGFyZzQs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc1IGFyZzUs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc2IGFyZzYs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4IGFyZzgs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc5IGFyZzkp
CiAgewogICAgcmV0dXJuIGNvbGxlY3RfYXJncyAoJm9iamVjdCwgYXJnMSwgYXJnMiwgYXJnMywg
YXJnNCwgYXJnNSwgYXJnNiwgYXJnNywgYXJnOCwgYXJnOSk7CiAgfQoKCgoKICB0ZW1wbGF0ZSA8
Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMs
IHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFy
ZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFt
ZSBSZXRUeXBlPgogIE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUs
QXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCxSZXRUeXBlPjo6TWVtRnVuRGF0YTEwIChGdW5QdHIg
ZnVuX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3MgKm9i
amVjdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMSBhcmcxLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcyIGFyZzIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMgYXJnMywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQXJnNCBhcmc0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBBcmc1IGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnNyBhcmc3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmc4
IGFyZzgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMTAgYXJnMTApIDoKICAg
ICAgICAgICAgICAgICAgRnVuRGF0YUJhc2UgKCZNZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcy
LEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OnRocmVh
ZF9lbnRyeV9wb2ludCksCiAgICAgICAgICAgICAgICAgIGZ1bl9wdHIgKGZ1bl9wdHIpLAogICAg
ICAgICAgICAgICAgICBvYmplY3QgKG9iamVjdCksCiAgICAgICAgICAgICAgICAgIGFyZzEgKGFy
ZzEpLAogICAgICAgICAgICAgICAgICBhcmcyIChhcmcyKSwKICAgICAgICAgICAgICAgICAgYXJn
MyAoYXJnMyksCiAgICAgICAgICAgICAgICAgIGFyZzQgKGFyZzQpLAogICAgICAgICAgICAgICAg
ICBhcmc1IChhcmc1KSwKICAgICAgICAgICAgICAgICAgYXJnNiAoYXJnNiksCiAgICAgICAgICAg
ICAgICAgIGFyZzcgKGFyZzcpLAogICAgICAgICAgICAgICAgICBhcmc4IChhcmc4KSwKICAgICAg
ICAgICAgICAgICAgYXJnOSAoYXJnOSksCiAgICAgICAgICAgICAgICAgIGFyZzEwIChhcmcxMCkK
ICB7fQoKCgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5h
bWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOSwgdHlw
ZW5hbWUgQXJnMTAsIHR5cGVuYW1lIFJldFR5cGU+CiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs
QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpN
ZW1GdW5EYXRhMTAgKGNvbnN0IE1lbUZ1bkRhdGExMCAmZnVuX2RhdGEpIDoKICAgICAgICAgICAg
ICAgICAgRnVuRGF0YUJhc2UgKGZ1bl9kYXRhKSwKICAgICAgICAgICAgICAgICAgZnVuX3B0ciAo
ZnVuX2RhdGEuZnVuX3B0ciksCiAgICAgICAgICAgICAgICAgIG9iamVjdCAoZnVuX2RhdGEub2Jq
ZWN0KSwKICAgICAgICAgICAgICAgICAgYXJnMSAoZnVuX2RhdGEuYXJnMSksCiAgICAgICAgICAg
ICAgICAgIGFyZzIgKGZ1bl9kYXRhLmFyZzIpLAogICAgICAgICAgICAgICAgICBhcmczIChmdW5f
ZGF0YS5hcmczKSwKICAgICAgICAgICAgICAgICAgYXJnNCAoZnVuX2RhdGEuYXJnNCksCiAgICAg
ICAgICAgICAgICAgIGFyZzUgKGZ1bl9kYXRhLmFyZzUpLAogICAgICAgICAgICAgICAgICBhcmc2
IChmdW5fZGF0YS5hcmc2KSwKICAgICAgICAgICAgICAgICAgYXJnNyAoZnVuX2RhdGEuYXJnNyks
CiAgICAgICAgICAgICAgICAgIGFyZzggKGZ1bl9kYXRhLmFyZzgpLAogICAgICAgICAgICAgICAg
ICBhcmc5IChmdW5fZGF0YS5hcmc5KSwKICAgICAgICAgICAgICAgICAgYXJnMTAoZnVuX2RhdGEu
YXJnMTApCiAge30KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs
IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFy
ZzksIHR5cGVuYW1lIEFyZzEwLCB0eXBlbmFtZSBSZXRUeXBlPgogIEZ1bkRhdGFCYXNlICoKICBN
ZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4
LEFyZzksQXJnMTAsUmV0VHlwZT46OmNsb25lICgpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBN
ZW1GdW5EYXRhMTAgKCp0aGlzKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBl
bmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0
eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4
LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICB2b2lk
ICoKICBNZW1GdW5EYXRhMTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJn
NyxBcmc4LEFyZzksQXJnMTAsUmV0VHlwZT46OnRocmVhZF9lbnRyeV9wb2ludCAodm9pZCAqYXJn
KQogIHsKCgoKICAgIHR5cGVkZWYgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEsQXJnMixBcmczLEFy
ZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+IFRoaXNDbGFzczsKCiAg
ICBGdW5FbmNhcHN1bGF0aW9uICpmdW5fZW5jYXBzdWxhdGlvbgogICAgICA9IHJlaW50ZXJwcmV0
X2Nhc3Q8RnVuRW5jYXBzdWxhdGlvbio+KGFyZyk7CiAgICBjb25zdCBUaGlzQ2xhc3MgKmZ1bl9k
YXRhCiAgICAgID0gZHluYW1pY19jYXN0PGNvbnN0IFRoaXNDbGFzcyo+IChmdW5fZW5jYXBzdWxh
dGlvbi0+ZnVuX2RhdGFfYmFzZSk7CgoKICAgIFRoaXNDbGFzczo6RnVuUHRyIGZ1bl9wdHIgPSBm
dW5fZGF0YS0+ZnVuX3B0cjsKICAgIENsYXNzICpvYmplY3QgPSBmdW5fZGF0YS0+b2JqZWN0Owog
ICAgQXJnMSBhcmcxID0gZnVuX2RhdGEtPmFyZzE7CiAgICBBcmcyIGFyZzIgPSBmdW5fZGF0YS0+
YXJnMjsKICAgIEFyZzMgYXJnMyA9IGZ1bl9kYXRhLT5hcmczOwogICAgQXJnNCBhcmc0ID0gZnVu
X2RhdGEtPmFyZzQ7CiAgICBBcmc1IGFyZzUgPSBmdW5fZGF0YS0+YXJnNTsKICAgIEFyZzYgYXJn
NiA9IGZ1bl9kYXRhLT5hcmc2OwogICAgQXJnNyBhcmc3ID0gZnVuX2RhdGEtPmFyZzc7CiAgICBB
cmc4IGFyZzggPSBmdW5fZGF0YS0+YXJnODsKICAgIEFyZzkgYXJnOSA9IGZ1bl9kYXRhLT5hcmc5
OwogICAgQXJnMTAgYXJnMTAgPSBmdW5fZGF0YS0+YXJnMTA7CgoKCgoKICAgIGZ1bl9kYXRhLT5s
b2NrLnJlbGVhc2UgKCk7CiMgNzYzOSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5J
SS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogICAgcmVnaXN0ZXJfbmV3
X3RocmVhZCAoKTsKICAgIHRyeQogICAgICB7CiAgICAgICAgKG9iamVjdC0+KmZ1bl9wdHIpKGFy
ZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGFy
ZzYsIGFyZzcsIGFyZzgsIGFyZzksIGFyZzEwKTsKICAgICAgfQogICAgY2F0Y2ggKGNvbnN0IHN0
ZDo6ZXhjZXB0aW9uICZleGMpCiAgICAgIHsKICAgICAgICBoYW5kbGVfc3RkX2V4Y2VwdGlvbiAo
ZXhjKTsKICAgICAgfQogICAgY2F0Y2ggKC4uLikKICAgICAgewogICAgICAgIGhhbmRsZV91bmtu
b3duX2V4Y2VwdGlvbiAoKTsKICAgICAgfTsKICAgIGRlcmVnaXN0ZXJfbmV3X3RocmVhZCAoKTsK
CiAgICByZXR1cm4gMDsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENsYXNzLCB0eXBlbmFtZSBB
cmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFt
ZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBl
bmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlwZT4KICBNZW1GdW5EYXRh
MTA8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4LEFyZzksQXJn
MTAsUmV0VHlwZT46OkFyZ0NvbGxlY3Rvcjo6QXJnQ29sbGVjdG9yIChGdW5QdHIgZnVuX3B0cikg
OgogICAgICAgICAgICAgICAgICBmdW5fcHRyIChmdW5fcHRyKQogIHt9CgoKCiAgdGVtcGxhdGUg
PGNsYXNzIENsYXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmcz
LCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBB
cmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5h
bWUgUmV0VHlwZT4KICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs
QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpB
cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgKm9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg
YXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCkK
ICB7CiAgICByZXR1cm4gbmV3IE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0
LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPihmdW5fcHRyLCBvYmplY3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFyZzEsIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUsIGFy
ZzYsIGFyZzcsIGFyZzgsIGFyZzksIGFyZzEwKTsKICB9CgoKCiAgdGVtcGxhdGUgPGNsYXNzIENs
YXNzLCB0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFt
ZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBl
bmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5LCB0eXBlbmFtZSBBcmcxMCwgdHlwZW5hbWUgUmV0VHlw
ZT4KICBpbmxpbmUKICBGdW5FbmNhcHN1bGF0aW9uCiAgTWVtRnVuRGF0YTEwPENsYXNzLEFyZzEs
QXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5LEFyZzEwLFJldFR5cGU+OjpB
cmdDb2xsZWN0b3I6OmNvbGxlY3RfYXJncyAoQ2xhc3MgJm9iamVjdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxIGFyZzEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnMiBhcmcyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzMg
YXJnMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBBcmc0IGFyZzQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgQXJnNSBhcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIEFyZzYgYXJnNiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBBcmc3IGFyZzcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQXJnOCBhcmc4LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzkgYXJnOSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcmcxMCBhcmcxMCkK
ICB7CiAgICByZXR1cm4gY29sbGVjdF9hcmdzICgmb2JqZWN0LCBhcmcxLCBhcmcyLCBhcmczLCBh
cmc0LCBhcmc1LCBhcmc2LCBhcmc3LCBhcmc4LCBhcmc5LCBhcmcxMCk7CiAgfQoKCgoKICBpbmxp
bmUKICBGdW5EYXRhMDx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKCpm
dW5fcHRyKSgpKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlw
ZW5hbWUgQXJnMT4KICB0eXBlbmFtZSBGdW5EYXRhMTxBcmcxLHZvaWQ+OjpBcmdDb2xsZWN0b3IK
ICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEpKQogIHsKICAgIHJldHVybiBmdW5f
cHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMj4KICB0
eXBlbmFtZSBGdW5EYXRhMjxBcmcxLEFyZzIsdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3Vs
YXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMikpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7
CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFt
ZSBBcmczPgogIHR5cGVuYW1lIEZ1bkRhdGEzPEFyZzEsQXJnMixBcmczLHZvaWQ+OjpBcmdDb2xs
ZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMpKQog
IHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwg
dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnND4KICB0eXBlbmFtZSBG
dW5EYXRhNDxBcmcxLEFyZzIsQXJnMyxBcmc0LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1
bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQpKQogIHsKICAgIHJl
dHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUg
QXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNT4KICB0eXBl
bmFtZSBGdW5EYXRhNTxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsdm9pZD46OkFyZ0NvbGxlY3Rv
cgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg
QXJnNSkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFt
ZSBBcmcxLCB0eXBlbmFtZSBBcmcyLCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBl
bmFtZSBBcmc1LCB0eXBlbmFtZSBBcmc2PgogIHR5cGVuYW1lIEZ1bkRhdGE2PEFyZzEsQXJnMixB
cmczLEFyZzQsQXJnNSxBcmc2LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9p
ZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYpKQogIHsKICAg
IHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQXJnMSwgdHlwZW5h
bWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlw
ZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNz4KICB0eXBlbmFtZSBGdW5EYXRhNzxBcmcxLEFyZzIs
QXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0
ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEsIEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsIEFyZzYsIEFy
ZzcpKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
QXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwgdHlwZW5h
bWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUgQXJnNywgdHlwZW5hbWUgQXJnOD4KICB0
eXBlbmFtZSBGdW5EYXRhODxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgs
dm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkICgqZnVuX3B0cikoQXJnMSwg
QXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCkpCiAgewogICAgcmV0dXJu
IGZ1bl9wdHI7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBcmcxLCB0eXBlbmFtZSBBcmcy
LCB0eXBlbmFtZSBBcmczLCB0eXBlbmFtZSBBcmc0LCB0eXBlbmFtZSBBcmc1LCB0eXBlbmFtZSBB
cmc2LCB0eXBlbmFtZSBBcmc3LCB0eXBlbmFtZSBBcmc4LCB0eXBlbmFtZSBBcmc5PgogIHR5cGVu
YW1lIEZ1bkRhdGE5PEFyZzEsQXJnMixBcmczLEFyZzQsQXJnNSxBcmc2LEFyZzcsQXJnOCxBcmc5
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoKmZ1bl9wdHIpKEFyZzEs
IEFyZzIsIEFyZzMsIEFyZzQsIEFyZzUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBB
cmc2LCBBcmc3LCBBcmc4LCBBcmc5KSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsKICB9CgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5
cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcs
IHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwPgogIHR5cGVuYW1l
IEZ1bkRhdGExMDxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSxB
cmcxMCx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKCpmdW5fcHRyKShB
cmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSwgQXJnMTApKQogIHsKICAgIHJldHVybiBmdW5fcHRy
OwogIH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3M+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTA8
Q2xhc3Msdm9pZD46OkFyZ0NvbGxlY3RvcgogIGVuY2Fwc3VsYXRlICh2b2lkIChDbGFzczo6KmZ1
bl9wdHIpKCkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc4MjcgIi9ob21lL2Jhbmdl
cnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1l
bnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzE+CiAgdHlwZW5hbWUg
TWVtRnVuRGF0YTE8Q2xhc3MsQXJnMSx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUg
KHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAg
fQojIDc4NDUgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRl
L2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVu
YW1lIEFyZzEsIHR5cGVuYW1lIEFyZzI+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTI8Q2xhc3MsQXJn
MSxBcmcyLHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6Oipm
dW5fcHRyKShBcmcxLCBBcmcyKSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsKICB9CiMgNzg2MyAi
L2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJl
YWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwg
dHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMz4KICB0eXBlbmFtZSBNZW1GdW5EYXRhMzxDbGFz
cyxBcmcxLEFyZzIsQXJnMyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQg
KENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMykpCiAgewogICAgcmV0dXJuIGZ1bl9w
dHI7CiAgfQojIDc4ODEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3Ms
IHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFy
ZzQ+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTQ8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCx2b2lk
Pjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJn
MSwgQXJnMiwgQXJnMywgQXJnNCkpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc4OTkg
Ii9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhy
ZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEs
IHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFy
ZzU+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTU8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy
KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1KSkKICB7CiAgICByZXR1cm4gZnVuX3B0cjsK
ICB9CiMgNzkxNyAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIvZGVhbC5JSS9iYXNlL2luY2x1
ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRlIDxjbGFzcyBDbGFzcywgdHlw
ZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJnMywgdHlwZW5hbWUgQXJnNCwg
dHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNj4KICB0eXBlbmFtZSBNZW1GdW5EYXRhNjxDbGFz
cyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNix2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5j
YXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg
QXJnNSwgQXJnNikpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5MzUgIi9ob21lL2Jh
bmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFn
ZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1l
IEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVu
YW1lIEFyZzYsIHR5cGVuYW1lIEFyZzc+CiAgdHlwZW5hbWUgTWVtRnVuRGF0YTc8Q2xhc3MsQXJn
MSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5j
YXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwg
QXJnNSwgQXJnNiwgQXJnNykpCiAgewogICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5NTMgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFk
X21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5
cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFyZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUs
IHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1lIEFyZzcsIHR5cGVuYW1lIEFyZzg+CiAgdHlwZW5hbWUg
TWVtRnVuRGF0YTg8Q2xhc3MsQXJnMSxBcmcyLEFyZzMsQXJnNCxBcmc1LEFyZzYsQXJnNyxBcmc4
LHZvaWQ+OjpBcmdDb2xsZWN0b3IKICBlbmNhcHN1bGF0ZSAodm9pZCAoQ2xhc3M6OipmdW5fcHRy
KShBcmcxLCBBcmcyLCBBcmczLCBBcmc0LCBBcmc1LCBBcmc2LCBBcmc3LCBBcmc4KSkKICB7CiAg
ICByZXR1cm4gZnVuX3B0cjsKICB9CiMgNzk3MSAiL2hvbWUvYmFuZ2VydGgvcC9kZWFsLklJLzIv
ZGVhbC5JSS9iYXNlL2luY2x1ZGUvYmFzZS90aHJlYWRfbWFuYWdlbWVudC5oIgogIHRlbXBsYXRl
IDxjbGFzcyBDbGFzcywgdHlwZW5hbWUgQXJnMSwgdHlwZW5hbWUgQXJnMiwgdHlwZW5hbWUgQXJn
MywgdHlwZW5hbWUgQXJnNCwgdHlwZW5hbWUgQXJnNSwgdHlwZW5hbWUgQXJnNiwgdHlwZW5hbWUg
QXJnNywgdHlwZW5hbWUgQXJnOCwgdHlwZW5hbWUgQXJnOT4KICB0eXBlbmFtZSBNZW1GdW5EYXRh
OTxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixBcmc3LEFyZzgsQXJnOSx2b2lk
Pjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZvaWQgKENsYXNzOjoqZnVuX3B0cikoQXJn
MSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwgQXJnNywgQXJnOCwgQXJnOSkpCiAgewog
ICAgcmV0dXJuIGZ1bl9wdHI7CiAgfQojIDc5ODkgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8y
L2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICB0ZW1wbGF0
ZSA8Y2xhc3MgQ2xhc3MsIHR5cGVuYW1lIEFyZzEsIHR5cGVuYW1lIEFyZzIsIHR5cGVuYW1lIEFy
ZzMsIHR5cGVuYW1lIEFyZzQsIHR5cGVuYW1lIEFyZzUsIHR5cGVuYW1lIEFyZzYsIHR5cGVuYW1l
IEFyZzcsIHR5cGVuYW1lIEFyZzgsIHR5cGVuYW1lIEFyZzksIHR5cGVuYW1lIEFyZzEwPgogIHR5
cGVuYW1lIE1lbUZ1bkRhdGExMDxDbGFzcyxBcmcxLEFyZzIsQXJnMyxBcmc0LEFyZzUsQXJnNixB
cmc3LEFyZzgsQXJnOSxBcmcxMCx2b2lkPjo6QXJnQ29sbGVjdG9yCiAgZW5jYXBzdWxhdGUgKHZv
aWQgKENsYXNzOjoqZnVuX3B0cikoQXJnMSwgQXJnMiwgQXJnMywgQXJnNCwgQXJnNSwgQXJnNiwg
QXJnNywgQXJnOCwgQXJnOSwgQXJnMTApKQogIHsKICAgIHJldHVybiBmdW5fcHRyOwogIH0KIyA4
MDA3ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNl
L3RocmVhZF9tYW5hZ2VtZW50LmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIEZvcndhcmRJdGVyYXRv
cj4KICBzdGQ6OnZlY3RvcjxzdGQ6OnBhaXI8Rm9yd2FyZEl0ZXJhdG9yLEZvcndhcmRJdGVyYXRv
cj4gPgogIHNwbGl0X3JhbmdlIChjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmJlZ2luLAogICAgICAg
ICAgICAgICBjb25zdCBGb3J3YXJkSXRlcmF0b3IgJmVuZCwKICAgICAgICAgICAgICAgY29uc3Qg
dW5zaWduZWQgaW50IG5faW50ZXJ2YWxzKQogIHsKICAgIHR5cGVkZWYgc3RkOjpwYWlyPEZvcndh
cmRJdGVyYXRvcixGb3J3YXJkSXRlcmF0b3I+IEl0ZXJhdG9yUGFpcjsKIyA4MDIyICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL3RocmVhZF9tYW5h
Z2VtZW50LmgiCiAgICBpZiAobl9pbnRlcnZhbHM9PTEpCiAgICAgIHJldHVybiAoc3RkOjp2ZWN0
b3I8SXRlcmF0b3JQYWlyPgogICAgICAgICAgICAgICgxLCBJdGVyYXRvclBhaXIoYmVnaW4sIGVu
ZCkpKTsKCgoKICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX2VsZW1lbnRzID0gZGlzdGFuY2UgKGJl
Z2luLCBlbmQpOwogICAgY29uc3QgdW5zaWduZWQgaW50IG5fZWxlbWVudHNfcGVyX2ludGVydmFs
ID0gbl9lbGVtZW50cyAvIG5faW50ZXJ2YWxzOwogICAgY29uc3QgdW5zaWduZWQgaW50IHJlc2lk
dWFsID0gbl9lbGVtZW50cyAlIG5faW50ZXJ2YWxzOwoKICAgIHN0ZDo6dmVjdG9yPEl0ZXJhdG9y
UGFpcj4gcmV0dXJuX3ZhbHVlcyAobl9pbnRlcnZhbHMpOwoKICAgIHJldHVybl92YWx1ZXNbMF0u
Zmlyc3QgPSBiZWdpbjsKICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX2ludGVydmFsczsg
KytpKQogICAgICB7CiAgICAgICAgaWYgKGkgIT0gbl9pbnRlcnZhbHMtMSkKICAgICAgICAgIHsK
ICAgICAgICAgICAgcmV0dXJuX3ZhbHVlc1tpXS5zZWNvbmQgPSByZXR1cm5fdmFsdWVzW2ldLmZp
cnN0OwojIDgwNDggIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvdGhyZWFkX21hbmFnZW1lbnQuaCIKICAgICAgICAgICAgc3RkOjphZHZhbmNlIChy
ZXR1cm5fdmFsdWVzW2ldLnNlY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNf
Y2FzdDxzaWduZWQgaW50PihuX2VsZW1lbnRzX3Blcl9pbnRlcnZhbCkpOwoKCgoKICAgICAgICAg
ICAgaWYgKGkgPCByZXNpZHVhbCkKICAgICAgICAgICAgICArK3JldHVybl92YWx1ZXNbaV0uc2Vj
b25kOwoKICAgICAgICAgICAgcmV0dXJuX3ZhbHVlc1tpKzFdLmZpcnN0ID0gcmV0dXJuX3ZhbHVl
c1tpXS5zZWNvbmQ7CiAgICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuX3Zh
bHVlc1tpXS5zZWNvbmQgPSBlbmQ7CiAgICAgIH0KICAgIHJldHVybiByZXR1cm5fdmFsdWVzOwog
IH0KCgoKfTsKIyAxOCAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiIDIKIyAxICIvaG9tZS9iYW5n
ZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25zdW1w
dGlvbi5oIiAxCiMgODQgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9p
bmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCm5hbWVzcGFjZSBNZW1vcnlDb25zdW1w
dGlvbgp7CgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChj
b25zdCBib29sKTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0
aW9uIChjb25zdCBjaGFyKTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2Nv
bnN1bXB0aW9uIChjb25zdCBzaG9ydCBpbnQpOwoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGlu
dCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHNob3J0IHVuc2lnbmVkIGludCk7CgoKCgoKCiAg
aW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgaW50KTsKCgoK
CgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCB1bnNp
Z25lZCBpbnQpOwoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRp
b24gKGNvbnN0IGZsb2F0KTsKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2Nv
bnN1bXB0aW9uIChjb25zdCBkb3VibGUpOwoKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg
bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnN0cmluZyAmcyk7CiMgMjA2ICIvaG9tZS9i
YW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25z
dW1wdGlvbi5oIgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQogIHVuc2lnbmVkIGlu
dCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPFQ+ICZ2KTsKIyAyMjUgIi9o
b21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5
X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGludCBOPgogIGlubGluZQog
IHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IFQgKCZ2KVtOXSk7CiMgMjQw
ICIvaG9tZS9iYW5nZXJ0aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21l
bW9yeV9jb25zdW1wdGlvbi5oIgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt
cHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+ICZ2KTsKCgoKCgoKCiAgaW5saW5lCiAgdW5z
aWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8aW50PiAmdik7
CgoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0
IHN0ZDo6dmVjdG9yPGRvdWJsZT4gJnYpOwoKCgoKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg
bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxmbG9hdD4gJnYpOwoKCgoKCgoK
ICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZl
Y3RvcjxjaGFyPiAmdik7CgoKCgoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29u
c3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPHVuc2lnbmVkIGNoYXI+ICZ2KTsKCgoKCgoKCiAg
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25z
dW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8VCAqPiAmdik7CiMgMzExICIvaG9tZS9iYW5nZXJ0
aC9wL2RlYWwuSUkvMi9kZWFsLklJL2Jhc2UvaW5jbHVkZS9iYXNlL21lbW9yeV9jb25zdW1wdGlv
bi5oIgogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9y
PHN0ZDo6c3RyaW5nPiAmdik7CgoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFt
ZSBCPgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0
ZDo6cGFpcjxBLEI+ICZwKTsKIyAzMzEgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwu
SUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29u
c3QgVCAqIGNvbnN0KTsKIyAzNDcgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkv
YmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoVCAqIGNv
bnN0KTsKIyAzNjYgIi9ob21lL2JhbmdlcnRoL3AvZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNs
dWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgiCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1l
bW9yeV9jb25zdW1wdGlvbiAodm9pZCAqIGNvbnN0KTsKIyAzODEgIi9ob21lL2JhbmdlcnRoL3Av
ZGVhbC5JSS8yL2RlYWwuSUkvYmFzZS9pbmNsdWRlL2Jhc2UvbWVtb3J5X2NvbnN1bXB0aW9uLmgi
CiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9j
b25zdW1wdGlvbiAoY29uc3QgVCAmdCk7Cn0KCgoKCgpuYW1lc3BhY2UgTWVtb3J5Q29uc3VtcHRp
b24KewogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IGJv
b2wpCiAgewogICAgcmV0dXJuIHNpemVvZihib29sKTsKICB9OwoKCgogIGlubGluZQogIHVuc2ln
bmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IGNoYXIpCiAgewogICAgcmV0dXJuIHNp
emVvZihjaGFyKTsKICB9OwoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3Vt
cHRpb24gKGNvbnN0IHNob3J0IGludCkKICB7CiAgICByZXR1cm4gc2l6ZW9mKHNob3J0IGludCk7
CiAgfTsKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z
dCBzaG9ydCB1bnNpZ25lZCBpbnQpCiAgewogICAgcmV0dXJuIHNpemVvZihzaG9ydCB1bnNpZ25l
ZCBpbnQpOwogIH07CgoKCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlv
biAoY29uc3QgaW50KQogIHsKICAgIHJldHVybiBzaXplb2YoaW50KTsKICB9OwoKCgogIGlubGlu
ZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHVuc2lnbmVkIGludCkK
ICB7CiAgICByZXR1cm4gc2l6ZW9mKHVuc2lnbmVkIGludCk7CiAgfTsKCgoKICBpbmxpbmUKICB1
bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBmbG9hdCkKICB7CiAgICByZXR1
cm4gc2l6ZW9mKGZsb2F0KTsKICB9OwoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlf
Y29uc3VtcHRpb24gKGNvbnN0IGRvdWJsZSkKICB7CiAgICByZXR1cm4gc2l6ZW9mKGRvdWJsZSk7
CiAgfTsKCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z
dCBzdGQ6OnN0cmluZyAmcykKICB7CiAgICByZXR1cm4gc2l6ZW9mKHMpICsgcy5sZW5ndGgoKTsK
ICB9OwoKCgoKCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB1bnNpZ25lZCBpbnQgbWVtb3J5
X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxUPiAmdikKICB7CiAgICB1bnNpZ25lZCBp
bnQgbWVtID0gc2l6ZW9mKHN0ZDo6dmVjdG9yPFQ+KTsKICAgIGNvbnN0IHVuc2lnbmVkIGludCBu
ID0gdi5zaXplKCk7CiAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bjsgKytpKQogICAgICBt
ZW0gKz0gbWVtb3J5X2NvbnN1bXB0aW9uKHZbaV0pOwogICAgbWVtICs9ICh2LmNhcGFjaXR5KCkg
LSBuKSpzaXplb2YoVCk7CiAgICByZXR1cm4gbWVtOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVCwgaW50IE4+CiAgdW5zaWduZWQgaW50IG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAo
JnYpW05dKQogIHsKICAgIHVuc2lnbmVkIGludCBtZW0gPSAwOwogICAgZm9yICh1bnNpZ25lZCBp
bnQgaT0wOyBpPE47ICsraSkKICAgICAgbWVtICs9IG1lbW9yeV9jb25zdW1wdGlvbih2W2ldKTsK
ICAgIHJldHVybiBtZW07CiAgfQoKCgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlfY29u
c3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPGJvb2w+ICZ2KQogIHsKICAgIHJldHVybiB2LmNh
cGFjaXR5KCkgLyA4ICsgc2l6ZW9mKHYpOwogIH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQg
bWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxpbnQ+ICZ2KQogIHsKICAgIHJl
dHVybiAodi5jYXBhY2l0eSgpICogc2l6ZW9mKGludCkgKwogICAgICAgICAgICBzaXplb2Yodikp
OwogIH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25z
dCBzdGQ6OnZlY3Rvcjxkb3VibGU+ICZ2KQogIHsKICAgIHJldHVybiAodi5jYXBhY2l0eSgpICog
c2l6ZW9mKGRvdWJsZSkgKwogICAgICAgICAgICBzaXplb2YodikpOwogIH0KCgoKICBpbmxpbmUK
ICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBzdGQ6OnZlY3RvcjxmbG9h
dD4gJnYpCiAgewogICAgcmV0dXJuICh2LmNhcGFjaXR5KCkgKiBzaXplb2YoZmxvYXQpICsKICAg
ICAgICAgICAgc2l6ZW9mKHYpKTsKICB9CgoKCiAgaW5saW5lCiAgdW5zaWduZWQgaW50IG1lbW9y
eV9jb25zdW1wdGlvbiAoY29uc3Qgc3RkOjp2ZWN0b3I8Y2hhcj4gJnYpCiAgewogICAgcmV0dXJu
ICh2LmNhcGFjaXR5KCkgKiBzaXplb2YoY2hhcikgKwogICAgICAgICAgICBzaXplb2YodikpOwog
IH0KCgoKICBpbmxpbmUKICB1bnNpZ25lZCBpbnQgbWVtb3J5X2NvbnN1bXB0aW9uIChjb25zdCBz
dGQ6OnZlY3Rvcjx1bnNpZ25lZCBjaGFyPiAmdikKICB7CiAgICByZXR1cm4gKHYuY2FwYWNpdHko
KSAqIHNpemVvZih1bnNpZ25lZCBjaGFyKSArCiAgICAgICAgICAgIHNpemVvZih2KSk7CiAgfQoK
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQogIHVuc2lnbmVkIGludCBtZW1vcnlf
Y29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6dmVjdG9yPFQgKj4gJnYpCiAgewogICAgcmV0dXJuICh2
LmNhcGFjaXR5KCkgKiBzaXplb2YoVCAqKSArCiAgICAgICAgICAgIHNpemVvZih2KSk7CiAgfQoK
CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBBLCB0eXBlbmFtZSBCPgogIGlubGluZQogIHVuc2lnbmVk
IGludCBtZW1vcnlfY29uc3VtcHRpb24gKGNvbnN0IHN0ZDo6cGFpcjxBLEI+ICZwKQogIHsKICAg
IHJldHVybiAobWVtb3J5X2NvbnN1bXB0aW9uKHAuZmlyc3QpICsKICAgICAgICAgICAgbWVtb3J5
X2NvbnN1bXB0aW9uKHAuc2Vjb25kKSk7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog
IGlubGluZQogIHVuc2lnbmVkIGludAogIG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAqIGNv
bnN0KQogIHsKICAgIHJldHVybiBzaXplb2YoVCopOwogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KICBpbmxpbmUKICB1bnNpZ25lZCBpbnQKICBtZW1vcnlfY29uc3VtcHRpb24gKFQgKiBj
b25zdCkKICB7CiAgICByZXR1cm4gc2l6ZW9mKFQqKTsKICB9CgoKCiAgaW5saW5lCiAgdW5zaWdu
ZWQgaW50CiAgbWVtb3J5X2NvbnN1bXB0aW9uICh2b2lkICogY29uc3QpCiAgewogICAgcmV0dXJu
IHNpemVvZih2b2lkKik7CiAgfQoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZQog
IHVuc2lnbmVkIGludAogIG1lbW9yeV9jb25zdW1wdGlvbiAoY29uc3QgVCAmdCkKICB7CiAgICBy
ZXR1cm4gdC5tZW1vcnlfY29uc3VtcHRpb24oKTsKICB9Cn0KIyAxOSAic291cmNlL2RhdGFfb3V0
X2Jhc2UuY2MiIDIKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUv
YysrLzMuMy9pb21hbmlwIiAxIDMKIyA0MyAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9pb21hbmlwIiAzCgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9mdW5jdGlvbmFsIiAxIDMKIyA1MyAiL2hvbWUvYmFu
Z2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9mdW5jdGlvbmFsIiAzCiMgNDcg
Ii9ob21lL2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvaW9tYW5pcCIg
MiAzCgpuYW1lc3BhY2Ugc3RkCnsKICBzdHJ1Y3QgX1Jlc2V0aW9zZmxhZ3MgeyBpb3NfYmFzZTo6
Zm10ZmxhZ3MgX01fbWFzazsgfTsKCiAgaW5saW5lIF9SZXNldGlvc2ZsYWdzCiAgcmVzZXRpb3Nm
bGFncyhpb3NfYmFzZTo6Zm10ZmxhZ3MgX19tYXNrKQogIHsKICAgIF9SZXNldGlvc2ZsYWdzIF9f
eDsKICAgIF9feC5fTV9tYXNrID0gX19tYXNrOwogICAgcmV0dXJuIF9feDsKICB9CgogIHRlbXBs
YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19p
c3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hh
clQsX1RyYWl0cz4mIF9faXMsIF9SZXNldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5z
ZXRmKGlvc19iYXNlOjpmbXRmbGFncygwKSwgX19mLl9NX21hc2spOwogICAgICByZXR1cm4gX19p
czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChi
YXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1Jlc2V0aW9zZmxhZ3MgX19mKQog
ICAgewogICAgICBfX29zLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBfX2YuX01fbWFzayk7
CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRpb3NmbGFncyB7IGlvc19i
YXNlOjpmbXRmbGFncyBfTV9tYXNrOyB9OwoKICBpbmxpbmUgX1NldGlvc2ZsYWdzCiAgc2V0aW9z
ZmxhZ3MoaW9zX2Jhc2U6OmZtdGZsYWdzIF9fbWFzaykKICB7CiAgICBfU2V0aW9zZmxhZ3MgX194
OwogICAgX194Ll9NX21hc2sgPSBfX21hc2s7CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxh
dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lz
dHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFy
VCxfVHJhaXRzPiYgX19pcywgX1NldGlvc2ZsYWdzIF9fZikKICAgIHsKICAgICAgX19pcy5zZXRm
KF9fZi5fTV9tYXNrKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu
YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9D
aGFyVCxfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0
cz4mIF9fb3MsIF9TZXRpb3NmbGFncyBfX2YpCiAgICB7CiAgICAgIF9fb3Muc2V0ZihfX2YuX01f
bWFzayk7CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXRiYXNlIHsgaW50
IF9NX2Jhc2U7IH07CgogIGlubGluZSBfU2V0YmFzZQogIHNldGJhc2UoaW50IF9fYmFzZSkKICB7
CiAgICBfU2V0YmFzZSBfX3g7CiAgICBfX3guX01fYmFzZSA9IF9fYmFzZTsKICAgIHJldHVybiBf
X3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg
ICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJh
c2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX2lzLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAg
ICAgIF9faXMuc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAg
ICAgICAgX19mLl9NX2Jhc2UgPT0gMTAgPyBpb3NfYmFzZTo6ZGVjIDoKICAgICAgICAgICAgICBf
X2YuX01fYmFzZSA9PSAxNiA/IGlvc19iYXNlOjpoZXggOgogICAgICAgICAgICAgIGlvc19iYXNl
OjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX2lzOwog
ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBp
bmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2lj
X29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0YmFzZSBfX2YpCiAgICB7CiAgICAg
IF9fb3Muc2V0ZihfX2YuX01fYmFzZSA9PSA4ID8gaW9zX2Jhc2U6Om9jdCA6CiAgICAgICAgICAg
ICAgICBfX2YuX01fYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOgogICAgICAgICAgICAgICAg
X19mLl9NX2Jhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDoKICAgICAgICAgICAgICAgIGlvc19i
YXNlOjpmbXRmbGFncygwKSwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICAgIHJldHVybiBfX29z
OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgc3RydWN0IF9TZXRmaWxs
IHsgX0NoYXJUIF9NX2M7IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGlu
ZSBfU2V0ZmlsbDxfQ2hhclQ+CiAgICBzZXRmaWxsKF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIF9T
ZXRmaWxsPF9DaGFyVD4gX194OwogICAgICBfX3guX01fYyA9IF9fYzsKICAgICAgcmV0dXJuIF9f
eDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog
ICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3BlcmF0b3I+Pihi
YXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19pcywgX1NldGZpbGw8X0NoYXJUPiBfX2Yp
CiAgICB7CiAgICAgIF9faXMuZmlsbChfX2YuX01fYyk7CiAgICAgIHJldHVybiBfX2lzOwogICAg
fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxp
bmUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z
dHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zLCBfU2V0ZmlsbDxfQ2hhclQ+IF9fZikKICAgIHsK
ICAgICAgX19vcy5maWxsKF9fZi5fTV9jKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9CgoKICBz
dHJ1Y3QgX1NldHByZWNpc2lvbiB7IGludCBfTV9uOyB9OwoKICBpbmxpbmUgX1NldHByZWNpc2lv
bgogIHNldHByZWNpc2lvbihpbnQgX19uKQogIHsKICAgIF9TZXRwcmVjaXNpb24gX194OwogICAg
X194Ll9NX24gPSBfX247CiAgICByZXR1cm4gX194OwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg
X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJU
LF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYg
X19pcywgX1NldHByZWNpc2lvbiBfX2YpCiAgICB7CiAgICAgIF9faXMucHJlY2lzaW9uKF9fZi5f
TV9uKTsKICAgICAgcmV0dXJuIF9faXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy
VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGlubGluZSBiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJh
aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsX1RyYWl0cz4mIF9fb3Ms
IF9TZXRwcmVjaXNpb24gX19mKQogICAgewogICAgICBfX29zLnByZWNpc2lvbihfX2YuX01fbik7
CiAgICAgIHJldHVybiBfX29zOwogICAgfQoKCiAgc3RydWN0IF9TZXR3IHsgaW50IF9NX247IH07
CgogIGlubGluZSBfU2V0dwogIHNldHcoaW50IF9fbikKICB7CiAgICBfU2V0dyBfX3g7CiAgICBf
X3guX01fbiA9IF9fbjsKICAgIHJldHVybiBfX3g7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf
Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBpbmxpbmUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs
X1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULF9UcmFpdHM+JiBf
X2lzLCBfU2V0dyBfX2YpCiAgICB7CiAgICAgIF9faXMud2lkdGgoX19mLl9NX24pOwogICAgICBy
ZXR1cm4gX19pczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf
VHJhaXRzPgogICAgaW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JgogICAgb3Bl
cmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcywgX1NldHcgX19mKQog
ICAgewogICAgICBfX29zLndpZHRoKF9fZi5fTV9uKTsKICAgICAgcmV0dXJuIF9fb3M7CiAgICB9
CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0
ZmlsbDxjaGFyPik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwob3N0cmVh
bSYsIF9TZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9yPDwo
b3N0cmVhbSYsIF9SZXNldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl
cmF0b3I8PChvc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBv
cGVyYXRvcjw8KG9zdHJlYW0mLCBfU2V0cHJlY2lzaW9uKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0
cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgX1NldHcpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0
cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9TZXRmaWxsPHdjaGFyX3Q+KTsKICBleHRlcm4g
dGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOwog
IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgb3BlcmF0b3I8PCh3b3N0cmVhbSYsIF9SZXNldGlv
c2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9yPDwod29zdHJlYW0m
LCBfU2V0YmFzZSk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRvcjw8KHdvc3Ry
ZWFtJiwgX1NldHByZWNpc2lvbik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3RyZWFtJiBvcGVyYXRv
cjw8KHdvc3RyZWFtJiwgX1NldHcpOwoKICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0
b3I+Pihpc3RyZWFtJiwgX1NldGZpbGw8Y2hhcj4pOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3RyZWFt
JiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfU2V0aW9zZmxhZ3MpOwogIGV4dGVybiB0ZW1wbGF0ZSBp
c3RyZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRl
bXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXRiYXNlKTsKICBleHRlcm4g
dGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgX1NldHByZWNpc2lvbik7CiAg
ZXh0ZXJuIHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIF9TZXR3KTsKICBl
eHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCBfU2V0ZmlsbDx3
Y2hhcl90Pik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFt
JiwgX1NldGlvc2ZsYWdzKTsKICBleHRlcm4gdGVtcGxhdGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4o
d2lzdHJlYW0mLCBfUmVzZXRpb3NmbGFncyk7CiAgZXh0ZXJuIHRlbXBsYXRlIHdpc3RyZWFtJiBv
cGVyYXRvcj4+KHdpc3RyZWFtJiwgX1NldGJhc2UpOwogIGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVh
bSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXRwcmVjaXNpb24pOwogIGV4dGVybiB0ZW1wbGF0
ZSB3aXN0cmVhbSYgb3BlcmF0b3I+Pih3aXN0cmVhbSYsIF9TZXR3KTsKfQojIDIxICJzb3VyY2Uv
ZGF0YV9vdXRfYmFzZS5jYyIgMgoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9zZXQiIDEgMwojIDY1ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMu
My1wcmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMwoKCiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2dj
Yy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9zZXQuaCIgMSAzCiMgNjYgIi9ob21l
L2JhbmdlcnRoL2Jpbi9nY2MtMy4zLXByZS9pbmNsdWRlL2MrKy8zLjMvYml0cy9zdGxfc2V0Lmgi
IDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFy
ZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X0tleT4g
PgpjbGFzcyBzZXQ7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxf
QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3Qgc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0Nv
bXBhcmUsX0FsbG9jPiYgX195KTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBh
cmUsIGNsYXNzIF9BbGxvYz4KY2xhc3Mgc2V0CnsKCiAKICA7CgpwdWJsaWM6CgogIHR5cGVkZWYg
X0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9LZXkgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21w
YXJlIGtleV9jb21wYXJlOwogIHR5cGVkZWYgX0NvbXBhcmUgdmFsdWVfY29tcGFyZTsKcHJpdmF0
ZToKICB0eXBlZGVmIF9SYl90cmVlPGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAg
ICAgICBfSWRlbnRpdHk8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw
ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl
Ojpjb25zdF9wb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv
bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6
Y29uc3RfcmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBf
dHlwZTo6Y29uc3RfaXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5
cGU6OmNvbnN0X2l0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl
cF90eXBlOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRl
ZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJz
ZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVf
dHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZl
cmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUg
YWxsb2NhdG9yX3R5cGU7CgoKCiAgc2V0KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90
eXBlKCkpIHt9CiAgZXhwbGljaXQgc2V0KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAg
ICAgICAgIGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAg
OiBfTV90KF9fY29tcCwgX19hKSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+
CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAg
IDogX01fdChfQ29tcGFyZSgpLCBhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91
bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0
b3I+CiAgc2V0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg
Y29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9
IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRf
dW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgc2V0KGNvbnN0IHNldDxfS2V5LF9Db21wYXJl
LF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQogIHNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mIG9wZXJhdG9yPShjb25zdCBzZXQ8X0tleSwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkK
ICB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9j
b21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFs
dWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9
CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZ2V0
X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5i
ZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQog
IHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsg
fQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9
CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsgfQogIHNpemVfdHlw
ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXplX3R5cGUgbWF4X3Np
emUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lkIHN3YXAoc2V0PF9L
ZXksX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KCgogIHBh
aXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewogICAgcGFp
cjx0eXBlbmFtZSBfUmVwX3R5cGU6Oml0ZXJhdG9yLCBib29sPiBfX3AgPSBfTV90Lmluc2VydF91
bmlxdWUoX194KTsKICAgIHJldHVybiBwYWlyPGl0ZXJhdG9yLCBib29sPihfX3AuZmlyc3QsIF9f
cC5zZWNvbmQpOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29u
c3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl
cmF0b3IgX1JlcF9pdGVyYXRvcjsKICAgIHJldHVybiBfTV90Lmluc2VydF91bmlxdWUoKF9SZXBf
aXRlcmF0b3ImKV9fcG9zaXRpb24sIF9feCk7CiAgfQogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy
YXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOwog
IH0KICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIHR5cGVkZWYgdHlwZW5h
bWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgX01fdC5lcmFzZSgoX1Jl
cF9pdGVyYXRvciYpX19wb3NpdGlvbik7CiAgfQogIHNpemVfdHlwZSBlcmFzZShjb25zdCBrZXlf
dHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5lcmFzZShfX3gpOwogIH0KICB2b2lkIGVyYXNl
KGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6Oml0ZXJhdG9yIF9SZXBfaXRlcmF0b3I7CiAgICBfTV90LmVyYXNlKChfUmVw
X2l0ZXJhdG9yJilfX2ZpcnN0LCAoX1JlcF9pdGVyYXRvciYpX19sYXN0KTsKICB9CiAgdm9pZCBj
bGVhcigpIHsgX01fdC5jbGVhcigpOyB9CgoKCiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmZpbmQoX194KSA9PSBfTV90LmVuZCgp
ID8gMCA6IDE7CiAgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyBy
ZXR1cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgaXRlcmF0b3IgbG93
ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91
bmQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5X3R5cGUm
IF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9CiAgaXRl
cmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3Qu
dXBwZXJfYm91bmQoX194KTsKICB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qg
a2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsK
ICB9CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm
IF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25z
dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgMjIwICIv
aG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL2JpdHMvc3RsX3Nl
dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3Qgc2V0PF9LMSxfQzEsX0ExPiYsIGNvbnN0IHNldDxf
SzEsX0MxLF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9B
MT4KICBmcmllbmQgYm9vbCBvcGVyYXRvcjwgKGNvbnN0IHNldDxfSzEsX0MxLF9BMT4mLCBjb25z
dCBzZXQ8X0sxLF9DMSxfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzZXQ8X0tl
eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV90ID09IF9feS5f
TV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxv
Yz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4m
IF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxv
Yz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu
ICEoX194ID09IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qgc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2V0PF9LZXksX0Nv
bXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJh
dG9yPD0oY29uc3Qgc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IHNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVy
biAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwg
Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHNldDxfS2V5LF9Db21w
YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzZXQ8X0tleSxf
Q29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQg
c3dhcChzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgc2V0
PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY4
ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1wcmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMiAz
CiMgMSAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRz
L3N0bF9tdWx0aXNldC5oIiAxIDMKIyA2NiAiL2hvbWUvYmFuZ2VydGgvYmluL2djYy0zLjMtcHJl
L2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aXNldC5oIiAzCm5hbWVzcGFjZSBzdGQKewoK
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAg
ICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPF9LZXk+ID4KY2xhc3MgbXVsdGlzZXQ7Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5l
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9f
eCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9B
bGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0NvbXBhcmUsIGNsYXNz
IF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tl
eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9D
b21wYXJlLCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpc2V0CnsKCiAKICA7CgpwdWJsaWM6CgoK
CiAgdHlwZWRlZiBfS2V5IGtleV90eXBlOwogIHR5cGVkZWYgX0tleSB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CiAgdHlwZWRlZiBfQ29tcGFyZSB2YWx1ZV9jb21w
YXJlOwpwcml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAg
ICAgICAgICAgICAgICAgIF9JZGVudGl0eTx2YWx1ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxv
Yz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfUmVwX3R5cGU6OmNvbnN0X3BvaW50ZXIgcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9S
ZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlwZW5hbWUg
X1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgdHlw
ZW5hbWUgX1JlcF90eXBlOjpjb25zdF9pdGVyYXRvciBpdGVyYXRvcjsKICB0eXBlZGVmIHR5cGVu
YW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAgdHlwZWRlZiB0
eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVyYXRv
cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRvciBj
b25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpzaXpl
X3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJlbmNl
X3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjphbGxv
Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtdWx0aXNldCgpIDogX01fdChfQ29tcGFy
ZSgpLCBhbGxvY2F0b3JfdHlwZSgpKSB7fQogIGV4cGxpY2l0IG11bHRpc2V0KGNvbnN0IF9Db21w
YXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f
YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBs
YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBtdWx0aXNldChfSW5wdXRJdGVyYXRvciBfX2Zp
cnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2Nh
dG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoK
ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbXVsdGlzZXQoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21w
YXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9j
YXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwo
X19maXJzdCwgX19sYXN0KTsgfQoKICBtdWx0aXNldChjb25zdCBtdWx0aXNldDxfS2V5LF9Db21w
YXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9feC5fTV90KSB7fQoKICBtdWx0aXNldDxfS2V5LF9D
b21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUs
X0FsbG9jPiYgX194KSB7CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQoKCgogIGtleV9jb21wYXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29t
cCgpOyB9CiAgdmFsdWVfY29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5r
ZXlfY29tcCgpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0
dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gX01fdC5iZWdpbigpOyB9CiAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f
dC5lbmQoKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01f
dC5yYmVnaW4oKTsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsgcmV0dXJuIF9N
X3QucmVuZCgpOyB9CiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZW1wdHkoKTsg
fQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5zaXplKCk7IH0KICBzaXpl
X3R5cGUgbWF4X3NpemUoKSBjb25zdCB7IHJldHVybiBfTV90Lm1heF9zaXplKCk7IH0KICB2b2lk
IHN3YXAobXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9f
eC5fTV90KTsgfQoKCiAgaXRlcmF0b3IgaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUmIF9feCkgewog
ICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9feCk7CiAgfQogIGl0ZXJhdG9yIGluc2VydChp
dGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsKICAgIHR5cGVkZWYg
dHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9yOwogICAgcmV0dXJuIF9N
X3QuaW5zZXJ0X2VxdWFsKChfUmVwX2l0ZXJhdG9yJilfX3Bvc2l0aW9uLCBfX3gpOwogIH0KCiAg
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJh
dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgX01fdC5pbnNlcnRfZXF1
YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9u
KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0b3IgX1JlcF9pdGVyYXRv
cjsKICAgIF9NX3QuZXJhc2UoKF9SZXBfaXRlcmF0b3ImKV9fcG9zaXRpb24pOwogIH0KICBzaXpl
X3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuZXJhc2Uo
X194KTsKICB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3Qp
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBfUmVwX2l0ZXJhdG9y
OwogICAgX01fdC5lcmFzZSgoX1JlcF9pdGVyYXRvciYpX19maXJzdCwgKF9SZXBfaXRlcmF0b3Im
KV9fbGFzdCk7CiAgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3QuY2xlYXIoKTsgfQoKCgogIHNpemVf
dHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50
KF9feCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu
IF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYg
X194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQogIGl0ZXJhdG9yIGxvd2VyX2Jv
dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9f
eCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0ZXJhdG9y
IHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LnVwcGVy
X2JvdW5kKF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90
eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2JvdW5kKF9feCk7CiAgfQog
IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp
IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRl
cmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv
bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQojIDIyMSAiL2hvbWUv
YmFuZ2VydGgvYmluL2djYy0zLjMtcHJlL2luY2x1ZGUvYysrLzMuMy9iaXRzL3N0bF9tdWx0aXNl
dC5oIiAzCiAgdGVtcGxhdGUgPGNsYXNzIF9LMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJp
ZW5kIGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGlzZXQ8X0sxLF9DMSxfQTE+JiwKICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKICB0ZW1w
bGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfQzEsIGNsYXNzIF9BMT4KICBmcmllbmQgYm9vbCBvcGVy
YXRvcjwgKGNvbnN0IG11bHRpc2V0PF9LMSxfQzEsX0ExPiYsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdCBtdWx0aXNldDxfSzEsX0MxLF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf
S2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg
cmV0dXJuIF9feC5fTV90ID09IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh
c3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11
bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194
Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJl
LCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgbXVsdGlzZXQ8X0tl
eSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVs
dGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+
CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxv
Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpc2V0PF9LZXksX0NvbXBh
cmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9LZXksIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y
PD0oY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgbXVsdGlzZXQ8X0tleSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsK
ICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX0Nv
bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBtdWx0aXNl
dDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBtdWx0aXNldDxfS2V5LF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8
IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs
bG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX194
LAogICAgICAgICAgICAgICAgIG11bHRpc2V0PF9LZXksX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7
CiAgX194LnN3YXAoX195KTsKfQoKfQojIDY5ICIvaG9tZS9iYW5nZXJ0aC9iaW4vZ2NjLTMuMy1w
cmUvaW5jbHVkZS9jKysvMy4zL3NldCIgMiAzCiMgMjQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNj
IiAyCiMgMzMgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50
IHNwYWNlZGltPgpjb25zdCB1bnNpZ25lZCBpbnQgRGF0YU91dEJhc2U6OlBhdGNoPGRpbSxzcGFj
ZWRpbT46Om5vX25laWdoYm9yOwoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CkRh
dGFPdXRCYXNlOjpQYXRjaDxkaW0sc3BhY2VkaW0+OjpQYXRjaCAoKSA6CiAgICAgICAgICAgICAg
ICBwYXRjaF9pbmRleChub19uZWlnaGJvciksCiAgICAgICAgICAgICAgICBuX3N1YmRpdmlzaW9u
cyAoMSkKCgoKCgp7CiAgZm9yICh1bnNpZ25lZCBpbnQgaT0wO2k8R2VvbWV0cnlJbmZvPGRpbT46
OmZhY2VzX3Blcl9jZWxsOysraSkKICAgIG5laWdoYm9yc1tpXSA9IG5vX25laWdoYm9yOwoKICB7
IH07CiAgeyB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp1bnNpZ25l
ZCBpbnQKRGF0YU91dEJhc2U6OlBhdGNoPGRpbSxzcGFjZWRpbT46Om1lbW9yeV9jb25zdW1wdGlv
biAoKSBjb25zdAp7CiAgcmV0dXJuIChzaXplb2YodmVydGljZXMpIC8gc2l6ZW9mKHZlcnRpY2Vz
WzBdKSAqCiAgICAgICAgICBNZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1bXB0aW9uKHZl
cnRpY2VzWzBdKQogICAgICAgICAgKwogICAgICAgICAgTWVtb3J5Q29uc3VtcHRpb246Om1lbW9y
eV9jb25zdW1wdGlvbihuX3N1YmRpdmlzaW9ucykKICAgICAgICAgICsKICAgICAgICAgIE1lbW9y
eUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24oZGF0YSkpOwp9OwoKCgp0ZW1wbGF0ZSA8
aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV91Y2QgKGNvbnN0
IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFt
ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVWNkRmxhZ3MgJmZsYWdzLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAo
X19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRl
cm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgNzYs
IF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9OwoKICB7
IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IGRhdGFfbmFtZXMuc2l6ZSgp
OwoKCgogIHVuc2lnbmVkIGludCBuX2NlbGxzID0gMCwKICAgICAgICAgICAgICAgbl9ub2RlcyA9
IDA7CiAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNv
bnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgIHBhdGNoIT1wYXRjaGVz
LmVuZCgpOyArK3BhdGNoKQogICAgc3dpdGNoIChkaW0pCiAgICAgIHsKICAgICAgICBjYXNlIDE6
CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAg
ICAgICAgbl9ub2RlcyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMTsKICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9z
dWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2aXNp
b25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1YmRpdmlzaW9ucysxKSAq
CiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpOwogICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICBuX2NlbGxzICs9
IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+
bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2
aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1YmRpdmlzaW9ucysx
KSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoK
ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMSk7CiAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICB7IH07CiAgICAg
IH07CgoKCiAgaWYgKGZsYWdzLndyaXRlX3ByZWFtYmxlKQogICAgewogICAgICBzdGQ6OnRpbWVf
dCB0aW1lMT0gc3RkOjp0aW1lICgwKTsKICAgICAgc3RkOjp0bSAqdGltZSA9IHN0ZDo6bG9jYWx0
aW1lKCZ0aW1lMSk7CiAgICAgIG91dCA8PCAiIyBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0
aGUgZGVhbC5JSSBsaWJyYXJ5LiIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyBEYXRlID0g
ICIKICAgICAgICAgIDw8IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICAgIDw8IHRp
bWUtPnRtX21vbisxIDw8ICIvIgogICAgICAgICAgPDwgdGltZS0+dG1fbWRheSA8PCBzdGQ6OmVu
ZGwKICAgICAgICAgIDw8ICIjIFRpbWUgPSAgIgogICAgICAgICAgPDwgdGltZS0+dG1faG91ciA8
PCAiOiIKICAgICAgICAgIDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9taW4gPDwgIjoiCiAg
ICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fc2VjIDw8IHN0ZDo6ZW5kbAogICAg
ICAgICAgPDwgIiMiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMgRm9yIGEgZGVzY3JpcHRp
b24gb2YgdGhlIFVDRCBmb3JtYXQgc2VlIHRoZSBBVlMgRGV2ZWxvcGVyJ3MgZ3VpZGUuIgogICAg
ICAgICAgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyIgPDwgc3RkOjplbmRsOwogICAgfTsK
CgogIG91dCA8PCBuX25vZGVzIDw8ICcgJwogICAgICA8PCBuX2NlbGxzIDw8ICcgJwogICAgICA8
PCBuX2RhdGFfc2V0cyA8PCAnICcKICAgICAgPDwgMCA8PCAnICcKICAgICAgPDwgMAogICAgICA8
PCBzdGQ6OmVuZGw7CiMgMTQ5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICBpZiAodHJ1ZSkK
ICAgIHsKICAgICAgdW5zaWduZWQgaW50IHByZXNlbnRfbm9kZSA9IDE7CgogICAgICBmb3IgKHR5
cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3Ig
cGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgICAgIHBhdGNoIT1wYXRjaGVzLmVuZCgpOyAr
K3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3N1YmRpdmlz
aW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQog
ICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2ks
ICsrcHJlc2VudF9ub2RlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
b3V0IDw8IHByZXNlbnRfbm9kZQogICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIjsKCiAg
ICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnQ8c3BhY2VkaW0+CiAgICAgICAgICAgICAgICAg
ICAgICBub2RlID0gKChwYXRjaC0+dmVydGljZXNbMV0gKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqIChuX3N1
YmRpdmlzaW9ucy1pKSAvIG5fc3ViZGl2aXNpb25zKSk7CgoKICAgICAgICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBpPTA7IGk8c3BhY2VkaW07ICsraSkKICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaT1zcGFjZWRpbTsgaTwzOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgIjAgIjsKICAgICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAg
ICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAg
ICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMg
PSBpICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgeV9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoKICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBwcmVzZW50X25vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAgIjsK
CgoKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFBvaW50PHNwYWNlZGltPgogICAgICAgICAg
ICAgICAgICAgICAgICBub2RlID0gKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14
X2ZyYWMpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KHBhdGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjKTsKCgog
ICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPHNwYWNlZGltOyAr
K2kpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPXNwYWNlZGltOyBpPDM7ICsraSkK
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICIwICI7CiAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAgICAgICAgICAgICsrcHJlc2VudF9ub2Rl
OwogICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysx
OyArK2opCiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3Vi
ZGl2aXNpb25zKzE7ICsraykKICAgICAgICAgICAgICAgICAgICAgIHsKCgoKCgoKCiAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9zdWJkaXZpc2lv
bnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2ZyYWMgPSBrICogMS4v
bl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2Zy
YWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCBwcmVzZW50X25vZGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICIgICAiOwoK
CgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlID0gKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykg
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBd
ICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAq
IHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICgoKHBhdGNoLT52ZXJ0aWNlc1s1XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9m
cmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGlj
ZXNbNl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh
dGNoLT52ZXJ0aWNlc1s3XSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpOwoKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsg
KytpKQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICcgJzsKCiAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9c3BhY2VkaW07IGk8Mzsg
KytpKQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiMCAiOwogICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAgICAgICAgICAgICAgKytw
cmVzZW50X25vZGU7CiAgICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CgoKICAgICAgeyB9OwoKICAg
IH07CgoKCgogIGlmICh0cnVlKQogICAgewogICAgICB1bnNpZ25lZCBpbnQgcHJlc2VudF9jZWxs
ID0gMTsKICAgICAgdW5zaWduZWQgaW50IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCA9IDA7CgogICAg
ICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3Rf
aXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgICAgIHBhdGNoIT1wYXRjaGVz
LmVuZCgpOyArK3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBu
X3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgIHN3aXRj
aCAoZGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u
czsgKytpLCArK3ByZXNlbnRfY2VsbCkKICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRf
Y2VsbAogICAgICAgICAgICAgICAgICAgICAgPDwgIiAwICBsaW5lICAiCiAgICAgICAgICAgICAg
ICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSsxIDw8ICcgJwogICAgICAgICAgICAg
ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2krMSsxIDw8IHN0ZDo6ZW5kbDsKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2Ug
MjoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7
IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zOyArK2opCiAgICAgICAgICAgICAgICAgICAgewogICAg
ICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfY2VsbAogICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8ICIgMCAgcXVhZCAgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0
X3ZlcnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKzEpKihuX3N1YmRp
dmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3Rf
dmVydGV4X29mX3BhdGNoKyhpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzErMSA8PCAnICcKICAg
ICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJk
aXZpc2lvbnMrMSkraisxKzEKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7
CiAgICAgICAgICAgICAgICAgICAgICArK3ByZXNlbnRfY2VsbDsKICAgICAgICAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAg
ICAgY2FzZSAzOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7ICsraikKICAgICAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lvbnM7ICsraykKICAgICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfY2Vs
bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgIiAwICBoZXggICIKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNp
b25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNp
b25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNp
b25zKzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25z
KzEpK2orMSApKihuX3N1YmRpdmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysx
KStqICkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMr
MSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrKzErMSA8PCAnICcKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNpb25z
KzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8ICcgJwogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysx
KStqKzEgKSoobl9zdWJkaXZpc2lvbnMrMSkraysxKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgICsrcHJlc2Vu
dF9jZWxsOwogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAg
ICAgeyB9OwogICAgICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3Zl
cnRleF9vZl9wYXRjaCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0
ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBm
aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpICoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25z
KzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91
dCA8PCBzdGQ6OmVuZGw7CgoKICAgICAgeyB9OwoKICAgIH07CgoKCgogIGlmIChuX2RhdGFfc2V0
cyAhPSAwKQogICAgewogICAgICBvdXQgPDwgbl9kYXRhX3NldHMgPDwgIiAgICAiOwogICAgICBm
b3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bl9kYXRhX3NldHM7ICsraSkKICAgICAgICBvdXQgPDwg
MSA8PCAnICc7CgogICAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRhX3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAg
b3V0IDw8IGRhdGFfbmFtZXNbZGF0YV9zZXRdCiAgICAgICAgICAgIDw8ICIsZGltZW5zaW9ubGVz
cyIKICAgICAgICAgICAgPDwgc3RkOjplbmRsOwoKCgogICAgICB1bnNpZ25lZCBpbnQgcHJlc2Vu
dF9ub2RlID0gMTsKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3Bh
Y2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgICAg
ICBwYXRjaCAhPSBwYXRjaGVzLmVuZCgpOyArK3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGNv
bnN0IHVuc2lnbmVkIGludCBuX3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsK
CiAgICAgICAgICB7IH07CgogICAgICAgICAgeyB9OwojIDQxMCAic291cmNlL2RhdGFfb3V0X2Jh
c2UuY2MiCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAg
IGNhc2UgMToKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpLCArK3ByZXNlbnRfbm9kZSkKICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIG91dCA8PCBwcmVzZW50X25vZGUKICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgIiAgIjsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCxpKSA8PCAnICc7
CgogICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAg
ICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysxOyArK2opCiAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHByZXNlbnRfbm9kZQogICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8ICIgICI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkK
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5f
c3ViZGl2aXNpb25zKzEpICsgaikgPDwgJyAnOwoKICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCBzdGQ6OmVuZGw7CgogICAgICAgICAgICAgICAgICAgICAgKytwcmVzZW50X25vZGU7CiAgICAg
ICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9
OwoKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikK
ICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lv
bnMrMTsgKytrKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgcHJlc2VudF9ub2RlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiICAi
OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBk
YXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKStqKSoobl9zdWJkaXZpc2lv
bnMrMSkraykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgJyAnOwoKICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgICAgICAgICAgICAg
ICsrcHJlc2VudF9ub2RlOwogICAgICAgICAgICAgICAgICAgICAgfTsKCiAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgICAgIHsgfTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwogICAgfTsKCgoKCiAg
eyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25z
OjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNj
IiwgNDc1LCBfX1BSRVRUWV9GVU5DVElPTl9fLCAib3V0IiwgIkV4Y0lPKCkiLCBFeGNJTygpKTsg
fTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFz
ZTo6d3JpdGVfZHggKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0
Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IERY
RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpvc3RyZWFtICZv
dXQpCnsKICB7IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4
Y2VwdGlvbnM6OmludGVybmFsczo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0
X2Jhc2UuY2MiLCA0ODYsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4
Y0lPKCkpOyB9OwoKICB7IH07CgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IGRh
dGFfbmFtZXMuc2l6ZSgpOwoKCgogIHVuc2lnbmVkIGludCBuX2NlbGxzID0gMCwKICAgICAgICAg
ICAgICAgbl9ub2RlcyA9IDA7CiAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0s
c3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAg
IHBhdGNoIT1wYXRjaGVzLmVuZCgpOyArK3BhdGNoKQogICAgc3dpdGNoIChkaW0pCiAgICAgIHsK
ICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZp
c2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMrMTsK
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgbl9jZWxs
cyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAgcGF0
Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5uX3N1
YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3ViZGl2
aXNpb25zKzEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMzoKICAgICAgICAg
ICAgICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAgICAgICAgICAgICAgICAg
cGF0Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gKHBhdGNoLT5u
X3N1YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5fc3Vi
ZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9zdWJkaXZp
c2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAg
ICAgICB7IH07CiAgICAgIH07CgoKCgogIG91dCA8PCAib2JqZWN0IFwidmVydGljZXNcIiBjbGFz
cyBhcnJheSB0eXBlIGZsb2F0IHJhbmsgMSBzaGFwZSAiIDw8IHNwYWNlZGltIDw8ICIgaXRlbXMg
IiA8PCBuX25vZGVzIDw8ICIgZGF0YSBmb2xsb3dzIgogICAgICA8PCBzdGQ6OmVuZGw7CgoKCiAg
aWYgKHRydWUpCiAgICB7CiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGlt
LHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAgICAg
ICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAgICAgewogICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25z
OwoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj
YXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFBvaW50PHNwYWNlZGltPgogICAgICAgICAgICAgICAgICAgICAg
bm9kZSA9ICgocGF0Y2gtPnZlcnRpY2VzWzFdICogaSAvIG5fc3ViZGl2aXNpb25zKSArCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAobl9zdWJkaXZp
c2lvbnMtaSkgLyBuX3N1YmRpdmlzaW9ucykpOwoKCiAgICAgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaT0wOyBpPHNwYWNlZGltOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgbm9kZShpKSA8PCAnXHQnOwogICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVu
ZGw7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysx
OyArK2opCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
ZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB5X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZSA9ICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdICogKDEteF9mcmFjKSkp
ICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+
dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYyk7CgoKICAgICAgICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsgKytpKQogICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgbm9kZShpKSA8PCAnXHQnOwogICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2UgMzoK
ICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8
bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAgICAg
ICAgICAgICB7CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9m
cmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgel9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoKCgog
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4KICAgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlID0gKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdICog
KDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlf
ZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgo
KHBhdGNoLT52ZXJ0aWNlc1s1XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFj
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNb
Nl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo
LT52ZXJ0aWNlc1s3XSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpOwoKCiAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxzcGFjZWRpbTsgKytp
KQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBub2RlKGkpIDw8ICdcdCc7CiAgICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAg
ICB9OwoKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAg
ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAg
ICAgIH07CiAgICB9OwoKCgogIG91dCA8PCAib2JqZWN0IFwiY2VsbHNcIiBjbGFzcyBhcnJheSB0
eXBlIGludCByYW5rIDEgc2hhcGUgIiA8PCBHZW9tZXRyeUluZm88ZGltPjo6dmVydGljZXNfcGVy
X2NlbGwKICAgICAgPDwgIiBpdGVtcyAiIDw8IG5fY2VsbHMgPDwgIiBkYXRhIGZvbGxvd3MiCiAg
ICAgIDw8IHN0ZDo6ZW5kbDsKCiAgaWYgKHRydWUpCiAgICB7CiAgICAgIHVuc2lnbmVkIGludCBm
aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZlY3Rv
cjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMuYmVn
aW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgICAgICB7
CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+bl9z
dWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewogICAg
ICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3Vi
ZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgZmlyc3RfdmVydGV4
X29mX3BhdGNoK2kgPDwgJ1x0JwogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3Zl
cnRleF9vZl9wYXRjaCtpKzEgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9OwogICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAg
aWYgKHRydWUpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAgICAg
ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IGZpcnN0
X3ZlcnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqIDw8ICdcdCcKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3ViZGl2
aXNpb25zKzEpK2orMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZp
cnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiA8PCAnXHQnCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsx
KSoobl9zdWJkaXZpc2lvbnMrMSkraisxCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8
IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAg
ICAgICAgIGlmICh0cnVlKQogICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IG52dCA9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7
ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5f
c3ViZGl2aXNpb25zOyArK2spCiAgICAgICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBm
aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2ogKSpudnQrayA8PCAnXHQnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkgKSpudnQr
aiApKm52dCtrKzEgPDwgJ1x0JwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz
dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2orMSkqbnZ0K2sgPDwgJ1x0JwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKChpICkqbnZ0K2or
MSkqbnZ0K2srMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0
X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2ogKSpudnQrayA8PCAnXHQnCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2og
KSpudnQraysxIDw8ICdcdCcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3Rf
dmVydGV4X29mX3BhdGNoKygoaSsxKSpudnQraisxKSpudnQrayA8PCAnXHQnCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoKGkrMSkqbnZ0K2or
MSkqbnZ0K2srMSA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKIyA2OTYg
InNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAo
ZGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAg
ICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRjaCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAg
ICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwog
ICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAg
ICAgICAgICAgICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNp
b25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5f
c3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAg
IH07CiAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICB9OwoKICBvdXQgPDwgImF0dHJpYnV0ZSBc
ImVsZW1lbnQgdHlwZVwiIHN0cmluZyBcIiI7CiAgaWYgKGRpbT09MSkgb3V0IDw8ICJsaW5lcyI7
CiAgaWYgKGRpbT09Mikgb3V0IDw8ICJxdWFkcyI7CiAgaWYgKGRpbT09Mykgb3V0IDw8ICJjdWJl
cyI7CiAgb3V0IDw8ICJcIiIgPDwgc3RkOjplbmRsCiAgICAgIDw8ICJhdHRyaWJ1dGUgXCJyZWZc
IiBzdHJpbmcgXCJwb3NpdGlvbnNcIiIgPDwgc3RkOjplbmRsOwoKCgoKICBpZiAoZmxhZ3Mud3Jp
dGVfbmVpZ2hib3JzKQogICAgewogICAgICBvdXQgPDwgIm9iamVjdCBcIm5laWdoYm9yc1wiIGNs
YXNzIGFycmF5IHR5cGUgaW50IHJhbmsgMSBzaGFwZSAiCiAgICAgICAgICA8PCBHZW9tZXRyeUlu
Zm88ZGltPjo6ZmFjZXNfcGVyX2NlbGwKICAgICAgICAgIDw8ICIgaXRlbXMgIiA8PCBuX2NlbGxz
CiAgICAgICAgICA8PCAiIGRhdGEgZm9sbG93cyI7CgogICAgICBmb3IgKHR5cGVuYW1lIHN0ZDo6
dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IKICAgICAgICAgICAg
IHBhdGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsg
KytwYXRjaCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbiA9IHBhdGNo
LT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgIHVuc2lnbmVkIGludCBjZWxsc19wZXJfcGF0Y2gg
PSAxOwogICAgICAgICAgdW5zaWduZWQgaW50IGR4ID0gMTsKICAgICAgICAgIHVuc2lnbmVkIGlu
dCBkeSA9IDE7CiAgICAgICAgICB1bnNpZ25lZCBpbnQgZHogPSAxOwogICAgICAgICAgc3dpdGNo
KGRpbSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAg
IGR4ICo9IG47CiAgICAgICAgICAgICAgICBkeSAqPSBuOwogICAgICAgICAgICAgICAgY2VsbHNf
cGVyX3BhdGNoICo9IG47CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgZHgg
Kj0gbjsKICAgICAgICAgICAgICAgIGNlbGxzX3Blcl9wYXRjaCAqPSBuOwogICAgICAgICAgICAg
IGNhc2UgMToKICAgICAgICAgICAgICAgIGNlbGxzX3Blcl9wYXRjaCAqPSBuOwogICAgICAgICAg
ICB9CgogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IHBhdGNoX3N0YXJ0ID0gcGF0Y2gtPnBh
dGNoX2luZGV4ICogY2VsbHNfcGVyX3BhdGNoOwoKICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGl4PTA7aXg8bjsrK2l4KQogICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpeT0wO2l5PCgo
ZGltPjEpID8gbiA6IDEpOysraXkpCiAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaXo9
MDtpejwoKGRpbT4yKSA/IG4gOiAxKTsrK2l6KQogICAgICAgICAgICAgICAgewogICAgICAgICAg
ICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbnggPSBpeCpkeDsKICAgICAgICAgICAgICAgICAg
Y29uc3QgdW5zaWduZWQgaW50IG55ID0gaXkqZHk7CiAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBueiA9IGl6KmR6OwoKICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5k
bDsKCgoKICAgICAgICAgICAgICAgICAgaWYgKGl4PT0wKQogICAgICAgICAgICAgICAgICAgIHsK
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBubiA9IHBhdGNoLT5uZWln
aGJvcnNbMF07CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JzsKICAgICAgICAgICAg
ICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVpZ2hib3IpCiAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNoK255K256K2R4KihuLTEpKTsKICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICItMSI7
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2hfc3RhcnQrbngtZHgrbnkr
bno7CiAgICAgICAgICAgICAgICAgICAgfQoKCgogICAgICAgICAgICAgICAgICBpZiAoaXggPT0g
bi0xKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGludCBubiA9IHBhdGNoLT5uZWlnaGJvcnNbMV07CiAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9f
bmVpZ2hib3IpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3Bh
dGNoK255K256KTsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8ICItMSI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICAgICAgIG91dCA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0
Y2hfc3RhcnQrbngrZHgrbnkrbno7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICBpZiAoZGltPDIpCiAgICAgICAgICAgICAgICAgICAgY29udGludWU7CgogICAgICAgICAg
ICAgICAgICBpZiAoaXk9PTApCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5uID0gcGF0Y2gtPm5laWdoYm9yc1syXTsKICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAnXHQnOwogICAgICAgICAgICAgICAgICAgICAgaWYgKG5u
ICE9IHBhdGNoLT5ub19uZWlnaGJvcikKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IChu
bipjZWxsc19wZXJfcGF0Y2grbngrbnorZHkqKG4tMSkpOwogICAgICAgICAgICAgICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIi0xIjsKICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICdcdCcKICAgICAgICAg
ICAgICAgICAgICAgICAgICA8PCBwYXRjaF9zdGFydCtueCtueS1keStuejsKICAgICAgICAgICAg
ICAgICAgICB9CgogICAgICAgICAgICAgICAgICBpZiAoaXkgPT0gbi0xKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBubiA9IHBh
dGNoLT5uZWlnaGJvcnNbM107CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JzsKICAg
ICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVpZ2hib3IpCiAgICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNoK254K256KTsKICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICItMSI7
CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2hfc3RhcnQrbngrbnkrZHkr
bno7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBpZiAoZGltPDMpCiAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CgoKICAgICAgICAgICAgICAgICAgaWYgKGl6PT0w
KQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBubiA9IHBhdGNoLT5uZWlnaGJvcnNbNF07CiAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgIGlmIChubiAhPSBwYXRjaC0+bm9fbmVp
Z2hib3IpCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAobm4qY2VsbHNfcGVyX3BhdGNo
K254K255K2R6KihuLTEpKTsKICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8ICItMSI7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICAgICAgIG91dCA8PCAnXHQnCiAgICAgICAgICAgICAgICAgICAgICAgICAg
PDwgcGF0Y2hfc3RhcnQrbngrbnkrbnotZHo7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAg
ICAgICAgICAgICAgaWYgKGl6ID09IG4tMSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbm4gPSBwYXRjaC0+bmVpZ2hib3JzWzVd
OwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICdcdCc7CiAgICAgICAgICAgICAgICAgICAg
ICBpZiAobm4gIT0gcGF0Y2gtPm5vX25laWdoYm9yKQogICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgKG5uKmNlbGxzX3Blcl9wYXRjaCtueCtueSk7CiAgICAgICAgICAgICAgICAgICAgICBl
bHNlCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiLTEiOwogICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJ1x0JwogICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IHBhdGNoX3N0YXJ0K254K255K256K2R6OwogICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAg
ICAgICAgfQogICAgfQoKCiAgaWYgKG5fZGF0YV9zZXRzICE9IDApCiAgICB7CiAgICAgIG91dCA8
PCAib2JqZWN0IFwiZGF0YVwiIGNsYXNzIGFycmF5IHR5cGUgZmxvYXQgcmFuayAxIHNoYXBlICIK
ICAgICAgICAgIDw8IG5fZGF0YV9zZXRzCiAgICAgICAgICA8PCAiIGl0ZW1zICIgPDwgbl9ub2Rl
cyA8PCAiIGRhdGEgZm9sbG93cyIgPDwgc3RkOjplbmRsOwoKCiAgICAgIGZvciAodHlwZW5hbWUg
c3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1w
YXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5lbmQoKTsgKytwYXRj
aCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMg
PSBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CgogICAgICAgICAgeyB9OwoKICAgICAgICAgIHsgfTsK
IyA4OTQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICAgICAgc3dpdGNoIChkaW0pCiAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkK
ICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50
IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAg
ICAgICAgICAgICAgb3V0IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkpIDw8ICdcdCc7CiAgICAg
ICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgfTsKCiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNl
IDI6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0w
OyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRh
X3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAgb3V0
IDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5fc3ViZGl2aXNpb25zKzEpICsgaikgPDwgJ1x0
JzsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAg
ICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8bl9zdWJkaXZpc2lvbnMrMTsgKytr
KQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkK
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlz
aW9ucysxKStqKSoobl9zdWJkaXZpc2lvbnMrMSkraykKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgJ1x0JzsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsK
ICAgICAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgfTsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB7IH07
CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgb3V0IDw8ICJhdHRyaWJ1dGUgXCJkZXBc
IiBzdHJpbmcgXCJwb3NpdGlvbnNcIiIgPDwgc3RkOjplbmRsOwogICAgfSBlbHNlIHsKICAgICAg
b3V0IDw8ICJvYmplY3QgXCJkYXRhXCIgY2xhc3MgY29uc3RhbnRhcnJheSB0eXBlIGZsb2F0IHJh
bmsgMCBpdGVtcyAiIDw8IG5fbm9kZXMgPDwgIiBkYXRhIGZvbGxvd3MiCiAgICAgICAgICA8PCBz
dGQ6OmVuZGwgPDwgJzAnIDw8IHN0ZDo6ZW5kbDsKICAgIH0KCgoKICBvdXQgPDwgIm9iamVjdCBc
ImRlYWwgZGF0YVwiIGNsYXNzIGZpZWxkIiA8PCBzdGQ6OmVuZGwKICAgICAgPDwgImNvbXBvbmVu
dCBcInBvc2l0aW9uc1wiIHZhbHVlIFwidmVydGljZXNcIiIgPDwgc3RkOjplbmRsCiAgICAgIDw8
ICJjb21wb25lbnQgXCJjb25uZWN0aW9uc1wiIHZhbHVlIFwiY2VsbHNcIiIgPDwgc3RkOjplbmRs
CiAgICAgIDw8ICJjb21wb25lbnQgXCJkYXRhXCIgdmFsdWUgXCJkYXRhXCIiIDw8IHN0ZDo6ZW5k
bDsKCiAgaWYgKGZsYWdzLndyaXRlX25laWdoYm9ycykKICAgIG91dCA8PCAiY29tcG9uZW50IFwi
bmVpZ2hib3JzXCIgdmFsdWUgXCJuZWlnaGJvcnNcIiIgPDwgc3RkOjplbmRsOwoKICBpZiAodHJ1
ZSkKICAgIHsKICAgICAgc3RkOjp0aW1lX3QgdGltZTE9IHN0ZDo6dGltZSAoMCk7CiAgICAgIHN0
ZDo6dG0gKnRpbWUgPSBzdGQ6OmxvY2FsdGltZSgmdGltZTEpOwogICAgICBvdXQgPDwgImF0dHJp
YnV0ZSBcImNyZWF0ZWRcIiBzdHJpbmcgXCIiCiAgICAgICAgICA8PCB0aW1lLT50bV95ZWFyKzE5
MDAgPDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgIDw8
IHRpbWUtPnRtX21kYXkKICAgICAgICAgIDw8ICcgJwogICAgICAgICAgPDwgdGltZS0+dG1faG91
ciA8PCAiOiIKICAgICAgICAgIDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9taW4gPDwgIjoi
CiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fc2VjIDw8ICciJyA8PCBzdGQ6
OmVuZGw7CiAgICB9OwoKICBvdXQgPDwgImVuZCIgPDwgc3RkOjplbmRsOwoKICB7IGlmIChfX2J1
aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4Y2VwdGlvbnM6OmludGVybmFs
czo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiLCA5NzMsIF9f
UFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9Owp9OwoKCgp0
ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV9n
bnVwbG90IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6
c3RyaW5nPiAmZGF0YV9uYW1lcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgR251cGxvdEZsYWdzICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6
Om9zdHJlYW0gJm91dCkKewogIHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkp
IGRlYWxfSUlfZXhjZXB0aW9uczo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3Vy
Y2UvZGF0YV9vdXRfYmFzZS5jYyIsIDk4NCwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJF
eGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0
YV9zZXRzID0gZGF0YV9uYW1lcy5zaXplKCk7CgoKICBpZiAodHJ1ZSkKICAgIHsKCgoKICAgICAg
Y29uc3Qgc3RkOjp0aW1lX3QgdGltZTE9IHN0ZDo6dGltZSAoMCk7CiAgICAgIGNvbnN0IHN0ZDo6
dG0gKnRpbWUgPSBzdGQ6OmxvY2FsdGltZSgmdGltZTEpOwogICAgICBvdXQgPDwgIiMgVGhpcyBm
aWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGRlYWwuSUkgbGlicmFyeS4iIDw8IHN0ZDo6ZW5kbAog
ICAgICAgICAgPDwgIiMgRGF0ZSA9ICAiCiAgICAgICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAg
PDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgIDw8IHRp
bWUtPnRtX21kYXkgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiIyBUaW1lID0gICIKICAgICAg
ICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwg
dGltZS0+dG1fbWluIDw8ICI6IgogICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRt
X3NlYyA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIjIiA8PCBzdGQ6OmVuZGwKICAgICAgICAg
IDw8ICIjIEZvciBhIGRlc2NyaXB0aW9uIG9mIHRoZSBHTlVQTE9UIGZvcm1hdCBzZWUgdGhlIEdO
VVBMT1QgbWFudWFsLiIKICAgICAgICAgIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMiIDw8
IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiMgIjsKCiAgICAgIHN3aXRjaCAoc3BhY2VkaW0pCiAg
ICAgICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgb3V0IDw8ICI8eD4gIjsK
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAg
b3V0IDw8ICI8eD4gPHk+ICI7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2Ug
MzoKICAgICAgICAgICAgICAgIG91dCA8PCAiPHg+IDx5PiA8ej4gIjsKICAgICAgICAgICAgICAg
IGJyZWFrOwoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAg
fTsKCiAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxkYXRhX25hbWVzLnNpemUoKTsgKytp
KQogICAgICAgIG91dCA8PCAnPCcKICAgICAgICAgICAgPDwgZGF0YV9uYW1lc1tpXQogICAgICAg
ICAgICA8PCAiPiAiOwogICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgfTsKCgoKICBmb3IgKHR5
cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3Ig
cGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5lbmQoKTsgKytw
YXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0
Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAgeyB9OwojIDEwNTQgInNvdXJj
ZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7CiAgICAgICAg
ICBjYXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsg
aTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg
ICBvdXQgPDwgKChwYXRjaC0+dmVydGljZXNbMV0gKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsKICAg
ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqIChuX3N1YmRpdmlzaW9u
cy1pKSAvIG5fc3ViZGl2aXNpb25zKSkKICAgICAgICAgICAgICAgICAgICA8PCAnICc7CgogICAg
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRh
X3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgIG91dCA8PCBwYXRjaC0+ZGF0YShk
YXRhX3NldCxpKSA8PCAnICc7CgogICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKICAg
ICAgICAgICAgICB9OwoKCiAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg
ICAgIDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAg
ICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9
MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBp
ICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlf
ZnJhYyA9IGogKiAxLi9uX3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykg
KwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2Zy
YWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICog
KDEteF9mcmFjKSkpICogeV9mcmFjKQogICAgICAgICAgICAgICAgICAgICAgICA8PCAnICc7Cgog
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0
PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHBh
dGNoLT5kYXRhKGRhdGFfc2V0LGkqKG5fc3ViZGl2aXNpb25zKzEpICsgaikgPDwgJyAnOwoKICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9OwoK
CiAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgIH07CgoKICAg
ICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
fTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICB7CgoKCgoKICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3ViZGl2aXNpb25zKzE7ICsraykKICAg
ICAgICAgICAgICAgICAgewoKCgoKCgoKICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg
eF9mcmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB5X2ZyYWMgPSBrICogMS4vbl9zdWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHpfZnJhYyA9IGogKiAxLi9uX3N1YmRpdmlzaW9uczsKCgoKICAgICAg
ICAgICAgICAgICAgICBjb25zdCBQb2ludDxzcGFjZWRpbT4gdGhpc19wb2ludAogICAgICAgICAg
ICAgICAgICAgICAgPSAoKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMpKSkgKiAo
MS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1sy
XSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2Vz
WzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqICgxLXpfZnJhYykgKwogICAgICAgICAgICAg
ICAgICAgICAgICAgKCgocGF0Y2gtPnZlcnRpY2VzWzVdICogeF9mcmFjKSArCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbNF0gKiAoMS14X2ZyYWMpKSkgKiAoMS15
X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1s2XSAq
IHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzdd
ICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqIHpfZnJhYyk7CgoKCiAgICAgICAgICAgICAgICAg
ICAgaWYgKGkgPCBuX3N1YmRpdmlzaW9ucykKICAgICAgICAgICAgICAgICAgICAgIHsKCgogICAg
ICAgICAgICAgICAgICAgICAgICBvdXQgPDwgdGhpc19wb2ludDsKICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsgZGF0YV9zZXQ8bl9kYXRhX3NldHM7
ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICcgJwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoZGF0YV9zZXQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaSoobl9zdWJkaXZpc2lvbnMr
MSkgKyBqKSoobl9zdWJkaXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCBzdGQ6OmVuZGw7CgoKCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4
X2ZyYWNfbmV3ID0geF9mcmFjICsgMS4vbl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAoKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjX25ldykgKwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhf
ZnJhY19uZXcpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjX25ldykpKSAq
IHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjX25ldykpKSAqICgx
LXlfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0
aWNlc1s2XSAqIHhfZnJhY19uZXcpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IChwYXRjaC0+dmVydGljZXNbN10gKiAoMS14X2ZyYWNfbmV3KSkpICogeV9mcmFjKSAqIHpfZnJh
Yyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7
IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dCA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5k
YXRhKGRhdGFfc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRpdmlzaW9ucysxKStrKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCgogICAgICAgICAgICAg
ICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICB9OwoKCgogICAgICAgICAgICAgICAg
ICAgIGlmIChqIDwgbl9zdWJkaXZpc2lvbnMpCiAgICAgICAgICAgICAgICAgICAgICB7CgoKICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHRoaXNfcG9pbnQ7CiAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRz
OyArK2RhdGFfc2V0KQogICAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAnICcKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKGRhdGFfc2V0LAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGkqKG5fc3ViZGl2aXNpb25z
KzEpICsgaikqKG5fc3ViZGl2aXNpb25zKzEpK2spOwogICAgICAgICAgICAgICAgICAgICAgICBv
dXQgPDwgc3RkOjplbmRsOwoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg
el9mcmFjX25ldyA9IHpfZnJhYyArIDEuL25fc3ViZGl2aXNpb25zOwogICAgICAgICAgICAgICAg
ICAgICAgICBvdXQgPDwgKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJh
YykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBh
dGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiAoMS16
X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0Y2gtPnZl
cnRpY2VzWzVdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
cGF0Y2gtPnZlcnRpY2VzWzRdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFjKSAr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzddICog
KDEteF9mcmFjKSkpICogeV9mcmFjKSAqIHpfZnJhY19uZXcpOwogICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsg
KytkYXRhX3NldCkKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysx
KSArIChqKzEpKSoobl9zdWJkaXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgICAg
IG91dCA8PCBzdGQ6OmVuZGw7CgoKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6
ZW5kbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAg
ICAgICAgICAgICAgfTsKCgoKICAgICAgICAgICAgICAgICAgICBpZiAoayA8IG5fc3ViZGl2aXNp
b25zKQogICAgICAgICAgICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91
dCA8PCB0aGlzX3BvaW50OwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRpdmlzaW9u
cysxKStrKTsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5kbDsKCgoKICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHlfZnJhY19uZXcgPSB5X2ZyYWMgKyAx
Li9uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRj
aC0+dmVydGljZXNbMV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMpKSkgKiAoMS15X2ZyYWNfbmV3KSAr
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdICog
eF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRp
Y2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFjX25ldykgKiAoMS16X2ZyYWMpICsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWMp
ICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbNF0g
KiAoMS14X2ZyYWMpKSkgKiAoMS15X2ZyYWNfbmV3KSArCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFjKSArCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzddICogKDEteF9mcmFjKSkpICog
eV9mcmFjX25ldykgKiB6X2ZyYWMpOwogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCBwYXRjaC0+ZGF0YShkYXRhX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKSArIGopKihuX3N1YmRp
dmlzaW9ucysxKStrKzEpOwogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgc3RkOjplbmRs
OwoKCiAgICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIH07Cgog
ICAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9OwoKICAg
ICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKICAgIH07Cgog
IHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9u
czo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j
YyIsIDEyNjEsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkp
OyB9Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRC
YXNlOjp3cml0ZV9wb3ZyYXkgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4g
PiAmcGF0Y2hlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZl
Y3RvcjxzdGQ6OnN0cmluZz4gJmRhdGFfbmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgUG92cmF5RmxhZ3MgJmZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91
dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90
aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMTI3MiwgX19QUkVUVFlfRlVOQ1RJT05f
XywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsgfTsKICB7IH07CiAgeyB9OwoK
ICBjb25zdCB1bnNpZ25lZCBpbnQgbl9kYXRhX3NldHMgPSBkYXRhX25hbWVzLnNpemUoKTsKCgog
IGlmICh0cnVlKQogICAgewoKCiAgICAgIGNvbnN0IHN0ZDo6dGltZV90IHRpbWUxPSBzdGQ6OnRp
bWUgKDApOwogICAgICBjb25zdCBzdGQ6OnRtICp0aW1lID0gc3RkOjpsb2NhbHRpbWUoJnRpbWUx
KTsKICAgICAgb3V0IDw8ICIvKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZGVhbC5J
SSBsaWJyYXJ5LiIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAgRGF0ZSA9ICAiCiAgICAg
ICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAgPDwgIi8iCiAgICAgICAgICA8PCB0aW1lLT50bV9t
b24rMSA8PCAiLyIKICAgICAgICAgIDw8IHRpbWUtPnRtX21kYXkgPDwgc3RkOjplbmRsCiAgICAg
ICAgICA8PCAiICAgVGltZSA9ICAiCiAgICAgICAgICA8PCB0aW1lLT50bV9ob3VyIDw8ICI6Igog
ICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX21pbiA8PCAiOiIKICAgICAgICAg
IDw8IHN0ZDo6c2V0dygyKSA8PCB0aW1lLT50bV9zZWMgPDwgc3RkOjplbmRsCiAgICAgICAgICA8
PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIgICBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgUE9W
UkFZIGZvcm1hdCBzZWUgdGhlIFBPVlJBWSBtYW51YWwuIgogICAgICAgICAgPDwgc3RkOjplbmRs
CiAgICAgICAgICA8PCAiKi8gIiA8PCBzdGQ6OmVuZGw7CgoKICAgICAgb3V0IDw8ICIjaW5jbHVk
ZSBcImNvbG9ycy5pbmNcIiAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiNpbmNsdWRlIFwi
dGV4dHVyZXMuaW5jXCIgIiA8PCBzdGQ6OmVuZGw7CgoKCgogICAgICBpZiAoZmxhZ3MuZXh0ZXJu
YWxfZGF0YSkKICAgICAgICBvdXQgPDwgIiNpbmNsdWRlIFwiZGF0YS5pbmNcIiAiIDw8IHN0ZDo6
ZW5kbDsKICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBvdXQgPDwgc3RkOjplbmRsIDw8
IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJjYW1lcmEgeyIgPDwgc3RkOjplbmRsCiAgICAg
ICAgICAgICAgPDwgIiAgbG9jYXRpb24gPDEsNCwtNz4iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAg
ICAgIDw8ICIgIGxvb2tfYXQgPDAsMCwwPiIgPDwgc3RkOjplbmRsCiAgICAgICAgICAgICAgPDwg
IiAgYW5nbGUgMzAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJ9IiA8PCBzdGQ6OmVu
ZGw7CgoKICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAibGlnaHRf
c291cmNlIHsiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIDwxLDQsLTc+IiA8PCBz
dGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAiICBjb2xvciBHcmV5IiA8PCBzdGQ6OmVuZGwKICAg
ICAgICAgICAgICA8PCAifSIgPDwgc3RkOjplbmRsOwogICAgICAgICAgb3V0IDw8IHN0ZDo6ZW5k
bAogICAgICAgICAgICAgIDw8ICJsaWdodF9zb3VyY2UgeyIgPDwgc3RkOjplbmRsCiAgICAgICAg
ICAgICAgPDwgIiAgPDAsMjAsMD4iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIGNv
bG9yIFdoaXRlIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAifSIgPDwgc3RkOjplbmRs
OwogICAgICAgIH0KICAgIH07CgoKICBkb3VibGUgaG1pbj0wLCBobWF4PTA7CgogIGZvciAodHlw
ZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBw
YXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAgICAgICBwYXRjaCAhPSBwYXRjaGVzLmVuZCgpOyArK3Bh
dGNoKQogICAgewogICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRj
aC0+bl9zdWJkaXZpc2lvbnM7CgogICAgICB7IH07CgogICAgICB7IH07CiMgMTM1MyAic291cmNl
L2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRp
dmlzaW9uczsgKytpKQogICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz
aW9uczsgKytqKQogICAgICAgICAgewogICAgICAgICAgICBjb25zdCBpbnQgZGwgPSBpKihuX3N1
YmRpdmlzaW9ucysxKStqOwogICAgICAgICAgICBpZiAoKGhtaW49PTApfHwocGF0Y2gtPmRhdGEo
MCxkbCk8aG1pbikpIGhtaW49cGF0Y2gtPmRhdGEoMCxkbCk7CiAgICAgICAgICAgIGlmICgoaG1h
eD09MCl8fChwYXRjaC0+ZGF0YSgwLGRsKT5obWF4KSkgaG1heD1wYXRjaC0+ZGF0YSgwLGRsKTsK
ICAgICAgICAgIH0KICAgIH0KCiAgb3V0IDw8ICIjZGVjbGFyZSBITUlOPSIgPDwgaG1pbiA8PCAi
OyIgPDwgc3RkOjplbmRsCiAgICAgIDw8ICIjZGVjbGFyZSBITUFYPSIgPDwgaG1heCA8PCAiOyIg
PDwgc3RkOjplbmRsIDw8IHN0ZDo6ZW5kbDsKCiAgaWYgKCFmbGFncy5leHRlcm5hbF9kYXRhKQog
ICAgewoKCiAgICAgIG91dCA8PCAiI2RlY2xhcmUgVGV4PXRleHR1cmV7IiA8PCBzdGQ6OmVuZGwK
ICAgICAgICAgIDw8ICIgIHBpZ21lbnQgeyIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAg
IGdyYWRpZW50IHkiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICBzY2FsZSB5KihITUFY
LUhNSU4pKiIgPDwgMC4xIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICBjb2xvcl9tYXAg
eyIgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiICAgICAgWzAuMDAgY29sb3IgTGlnaHRfUHVy
cGxlXSAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgIiAgICAgIFswLjk1IGNvbG9yIExpZ2h0
X1B1cnBsZV0gIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICIgICAgICBbMS4wMCBjb2xvciBX
aGl0ZV0gICAgIiA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICJ9IH0gfSIgPDwgc3RkOjplbmRs
IDw8IHN0ZDo6ZW5kbDsKICAgIH0KCiAgaWYgKCFmbGFncy5iaWN1YmljX3BhdGNoKQogICAgewog
ICAgICBvdXQgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAibWVzaCB7IiA8PCBzdGQ6OmVuZGw7
CiAgICB9CgoKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4g
Pjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0g
cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5f
c3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAg
eyB9OwojIDE0MDQgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzdGQ6OnZlY3RvcjxQ
b2ludDxzcGFjZWRpbT4gPiB2ZXIoKG5fc3ViZGl2aXNpb25zKzEpKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpKTsKCiAgICAgIGZvciAo
dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgewogICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAg
ICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9z
dWJkaXZpc2lvbnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9u
X3N1YmRpdmlzaW9uczsKCgogICAgICAgICAgICAgIHZlcltpKihuX3N1YmRpdmlzaW9ucysxKStq
XT0gKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2ZyYWMp
KSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAoKHBhdGNoLT52ZXJ0aWNlc1syXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFj
KSkpICogeV9mcmFjKTsKICAgICAgICAgICAgfTsKICAgICAgICB9OwoKICAgICAgaWYgKCFmbGFn
cy5iaWN1YmljX3BhdGNoKQogICAgICAgIHsKICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9
MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zOyArK2opCiAgICAgICAgICAgICAg
ICB7CgogICAgICAgICAgICAgICAgICBjb25zdCBpbnQgZGwgPSBpKihuX3N1YmRpdmlzaW9ucysx
KStqOwogICAgICAgICAgICAgICAgICBpZiAoZmxhZ3Muc21vb3RoKQogICAgICAgICAgICAgICAg
ICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgc3RkOjp2ZWN0b3I8UG9pbnQ8Mz4gPiBucm1s
KChuX3N1YmRpdmlzaW9ucysxKSoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSkpOwogICAgICAgICAgICAgICAgICAgICAg
UG9pbnQ8Mz4gaDEsaDI7CiAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBp
PTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsrK2kpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZp
c2lvbnMrMTsrK2opCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChpPT0wKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgxKDApPXZlclsoaSsxKSoobl9z
dWJkaXZpc2lvbnMrMSkral0oMCktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB2ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBoMSgxKT1wYXRjaC0+ZGF0YSgwLChpKzEpKihuX3N1YmRpdmlzaW9ucysx
KStqKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRh
KDAsaSoobl9zdWJkaXZpc2lvbnMrMSkraik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBoMSgyKT12ZXJbKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpLQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pd
KDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpPT1u
X3N1YmRpdmlzaW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEoMCk9dmVyW2kqKG5fc3ViZGl2aXNpb25z
KzEpK2pdKDApLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJb
KGktMSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDApOwogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBoMSgxKT1wYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2opLQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+ZGF0YSgwLChp
LTEpKihuX3N1YmRpdmlzaW9ucysxKStqKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaDEoMik9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpLQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbKGktMSkqKG5fc3ViZGl2aXNpb25zKzEp
K2pdKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaDEoMCk9dmVyWyhpKzEpKihu
X3N1YmRpdmlzaW9ucysxKStqXSgwKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgdmVyWyhpLTEpKihuX3N1YmRpdmlzaW9ucysxKStqXSgwKTsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaDEoMSk9cGF0Y2gtPmRhdGEoMCwoaSsxKSoobl9zdWJk
aXZpc2lvbnMrMSkraiktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhdGNoLT5kYXRhKDAsKGktMSkqKG5fc3ViZGl2aXNpb25zKzEpK2opOwogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoMSgyKT12ZXJbKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEp
K2pdKDEpLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbKGkt
MSkqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGo9PTApCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaDIoMCk9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2orMV0oMCktCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCk7
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigxKT1wYXRjaC0+ZGF0YSgwLGkq
KG5fc3ViZGl2aXNpb25zKzEpK2orMSktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2opOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaDIoMik9dmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2or
MV0oMSktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJbaSoobl9z
dWJkaXZpc2lvbnMrMSkral0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgKGo9PW5fc3ViZGl2aXNpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigwKT12ZXJb
aSoobl9zdWJkaXZpc2lvbnMrMSkral0oMCktCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHZlcltpKihuX3N1YmRpdmlzaW9ucysxKStqLTFdKDApOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoMigxKT1wYXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2
aXNpb25zKzEpK2opLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXRjaC0+ZGF0YSgwLGkqKG5fc3ViZGl2aXNpb25zKzEpK2otMSk7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGgyKDIpPXZlcltpKihuX3N1YmRpdmlzaW9ucysxKStqXSgxKS0K
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2
aXNpb25zKzEpK2otMV0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoMigwKT12
ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkraisxXSgwKS0KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmVyW2kqKG5fc3ViZGl2aXNpb25zKzEpK2otMV0oMCk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGgyKDEpPXBhdGNoLT5kYXRhKDAsaSoobl9z
dWJkaXZpc2lvbnMrMSkraisxKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGF0Y2gtPmRhdGEoMCxpKihuX3N1YmRpdmlzaW9ucysxKStqLTEpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBoMigyKT12ZXJbaSoobl9zdWJkaXZpc2lvbnMrMSkr
aisxXSgxKS0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVyW2kq
KG5fc3ViZGl2aXNpb25zKzEpK2otMV0oMSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2aXNp
b25zKzEpK2pdKDApPWgxKDEpKmgyKDIpLWgxKDIpKmgyKDEpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDEpPWgxKDIpKmgyKDApLWgx
KDApKmgyKDIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucm1sW2kqKG5fc3ViZGl2
aXNpb25zKzEpK2pdKDIpPWgxKDApKmgyKDEpLWgxKDEpKmgyKDApOwoKCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGRvdWJsZSBub3JtPXN0ZDo6c3FydCgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzdGQ6OnBvdyhucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDApLDIu
KSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnBvdyhucm1sW2kqKG5fc3Vi
ZGl2aXNpb25zKzEpK2pdKDEpLDIuKSsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnBvdyhucm1sW2kqKG5fc3ViZGl2aXNpb25zKzEpK2pdKDIpLDIuKSk7CgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAobnJtbFtpKihuX3N1YmRpdmlzaW9ucysxKStqXSgxKTww
KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm0qPS0xLjsKCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDtrPDM7KytrKQogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5ybWxbaSoobl9zdWJkaXZpc2lvbnMrMSkral0oaykv
PW5vcm07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgIH0KCgoKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAic21vb3RoX3RyaWFuZ2xlIHsi
IDw8IHN0ZDo6ZW5kbCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltk
bF0oMCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoMCxk
bCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsXSgxKSA8PCAiPiwg
PCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBucm1sW2RsXSgwKSA8PCAiLCAiIDw8IG5y
bWxbZGxdKDEpIDw8ICIsICIgPDwgbnJtbFtkbF0oMikKICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCAiIFx0
PCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGwrbl9zdWJkaXZpc2lvbnMrMV0o
MCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgcGF0Y2gtPmRhdGEoMCxkbCtu
X3N1YmRpdmlzaW9ucysxKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJb
ZGwrbl9zdWJkaXZpc2lvbnMrMV0oMSkgPDwgIj4sIDwiCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgwKSA8PCAiLCAiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgxKSA8PCAiLCAiCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgbnJtbFtkbCtuX3N1YmRpdmlzaW9ucysxXSgyKQogICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs
K25fc3ViZGl2aXNpb25zKzJdKDApIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8
IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMikgPDwgIiwiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDEpIDw8ICI+LCA8IgogICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMCkgPDwg
IiwgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMr
Ml0oMSkgPDwgIiwgIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJk
aXZpc2lvbnMrMl0oMikKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCAiPn0iIDw8IHN0ZDo6
ZW5kbDsKCgogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJzbW9vdGhfdHJpYW5nbGUgeyIg
PDwgc3RkOjplbmRsIDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs
XSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRs
KSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGxdKDEpIDw8ICI+LCA8
IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGxdKDApIDw8ICIsICIgPDwgbnJt
bFtkbF0oMSkgPDwgIiwgIiA8PCBucm1sW2RsXSgyKQogICAgICAgICAgICAgICAgICAgICAgICAg
IDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJcdDwi
CiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDAp
IDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKDAsZGwrbl9z
dWJkaXZpc2lvbnMrMikgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs
K25fc3ViZGl2aXNpb25zKzJdKDEpIDw8ICI+LCA8IgogICAgICAgICAgICAgICAgICAgICAgICAg
IDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMCkgPDwgIiwgIgogICAgICAgICAgICAgICAg
ICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMSkgPDwgIiwgIgogICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IG5ybWxbZGwrbl9zdWJkaXZpc2lvbnMrMl0oMikKICAgICAg
ICAgICAgICAgICAgICAgICAgICA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAg
ICAgICAgIG91dCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCsx
XSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRs
KzEpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCsxXSgxKSA8PCAi
PiwgPCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBucm1sW2RsKzFdKDApIDw8ICIsICIg
PDwgbnJtbFtkbCsxXSgxKSA8PCAiLCAiIDw8IG5ybWxbZGwrMV0oMikKICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCAiPn0iIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg
ICAgICAgICAgIG91dCA8PCAidHJpYW5nbGUgeyIgPDwgc3RkOjplbmRsIDw8ICJcdDwiCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAg
ICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgwLGRsKSA8PCAiLCIKICAgICAgICAgICAgICAgICAg
ICAgICAgICA8PCB2ZXJbZGxdKDEpIDw8ICI+LCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2Rs
K25fc3ViZGl2aXNpb25zKzFdKDApIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8
IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMSkgPDwgIiwiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzFdKDEpIDw8ICI+LCIgPDwgc3Rk
OjplbmRsOwogICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICJcdDwiCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25zKzJdKDApIDw8ICIsIgogICAgICAg
ICAgICAgICAgICAgICAgICAgIDw8IHBhdGNoLT5kYXRhKDAsZGwrbl9zdWJkaXZpc2lvbnMrMikg
PDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVyW2RsK25fc3ViZGl2aXNpb25z
KzJdKDEpIDw8ICI+fSIgPDwgc3RkOjplbmRsOwoKCiAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgInRyaWFuZ2xlIHsiIDw8IHN0ZDo6ZW5kbCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAg
ICAgICAgIDw8IHZlcltkbF0oMCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwg
cGF0Y2gtPmRhdGEoMCxkbCkgPDwgIiwiCiAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgdmVy
W2RsXSgxKSA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgICAgICAgIG91dCA8
PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8IHZlcltkbCtuX3N1YmRpdmlzaW9u
cysyXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+ZGF0YSgw
LGRsK25fc3ViZGl2aXNpb25zKzIpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8
IHZlcltkbCtuX3N1YmRpdmlzaW9ucysyXSgxKSA8PCAiPiwiIDw8IHN0ZDo6ZW5kbDsKICAgICAg
ICAgICAgICAgICAgICAgIG91dCA8PCAiXHQ8IgogICAgICAgICAgICAgICAgICAgICAgICAgIDw8
IHZlcltkbCsxXSgwKSA8PCAiLCIKICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBwYXRjaC0+
ZGF0YSgwLGRsKzEpIDw8ICIsIgogICAgICAgICAgICAgICAgICAgICAgICAgICA8PCB2ZXJbZGwr
MV0oMSkgPDwgIj59IiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgICAgICAgIH07CiAg
ICAgICAgICAgICAgICB9OwogICAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgZWxzZQogICAg
ICAgIHsKICAgICAgICAgIHsgfTsKICAgICAgICAgIG91dCA8PCBzdGQ6OmVuZGwKICAgICAgICAg
ICAgICA8PCAiYmljdWJpY19wYXRjaCB7IiA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAgICA8PCAi
ICB0eXBlIDAiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIGZsYXRuZXNzIDAiIDw8
IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICIgIHVfc3RlcHMgMCIgPDwgc3RkOjplbmRsCiAg
ICAgICAgICAgICAgPDwgIiAgdl9zdGVwcyAwIiA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICBmb3Ig
KGludCBpPTA7aTwxNjsrK2kpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvdXQgPDwgIlx0
PCIgPDwgdmVyW2ldKDApIDw8ICIsIiA8PCBwYXRjaC0+ZGF0YSgwLGkpIDw8ICIsIiA8PCB2ZXJb
aV0oMSkgPDwgIj4iOwogICAgICAgICAgICAgIGlmIChpIT0xNSkgb3V0IDw8ICIsIjsKICAgICAg
ICAgICAgICBvdXQgPDwgc3RkOjplbmRsOwogICAgICAgICAgICB9OwogICAgICAgICAgb3V0IDw8
ICIgIHRleHR1cmUge1RleH0iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgIDw8ICJ9IiA8PCBz
dGQ6OmVuZGw7CiAgICAgICAgfTsKICAgIH07CgogIGlmICghZmxhZ3MuYmljdWJpY19wYXRjaCkK
ICAgIHsKICAgICAgb3V0IDw8ICIgIHRleHR1cmUge1RleH0iIDw8IHN0ZDo6ZW5kbAogICAgICAg
ICAgPDwgIn0iIDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgfQoKICB7
IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEob3V0KSwgZmFsc2UpKSBkZWFsX0lJX2V4Y2VwdGlvbnM6
OmludGVybmFsczo6IGlzc3VlX2Vycm9yX3Rocm93ICgic291cmNlL2RhdGFfb3V0X2Jhc2UuY2Mi
LCAxNjIzLCBfX1BSRVRUWV9GVU5DVElPTl9fLCAib3V0IiwgIkV4Y0lPKCkiLCBFeGNJTygpKTsg
fTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFz
ZTo6d3JpdGVfZXBzIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBh
dGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3Rk
OjpzdHJpbmc+ICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEVwc0ZsYWdz
ICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6Om9zdHJlYW0gJm91dCkK
ewogIHsgfTsKCiAgeyB9OwoKCiAgeyB9OwoKICBzd2l0Y2ggKGRpbSkKICAgIHsKICAgICAgY2Fz
ZSAyOgogICAgICB7CiMgMTY1NiAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgICAgc3Rk
OjptdWx0aXNldDxFcHNDZWxsMmQ+IGNlbGxzOwojIDE2NjUgInNvdXJjZS9kYXRhX291dF9iYXNl
LmNjIgogICAgICAgIGRvdWJsZSBtaW5fY29sb3JfdmFsdWU9MCwgbWF4X2NvbG9yX3ZhbHVlPTA7
CgoKCgogICAgICAgIGRvdWJsZSBoZWlnaHRzWzRdOwoKCgoKCgogICAgICAgIGZvciAodHlwZW5h
bWUgc3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRj
aD1wYXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytw
YXRjaCkKICAgICAgICAgIHsKICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2
aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwogICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7ICsraikKICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9u
cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9uX3N1YmRp
dmlzaW9ucywKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhfZnJhYzEgPSAoaSsxKSAq
IDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5X2ZyYWMx
ID0gKGorMSkgKiAxLi9uX3N1YmRpdmlzaW9uczsKCiAgICAgICAgICAgICAgICAgIGNvbnN0IFBv
aW50PHNwYWNlZGltPiBwb2ludHNbNF0KICAgICAgICAgICAgICAgICAgICA9IHsgKCgocGF0Y2gt
PnZlcnRpY2VzWzFdICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo
LT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAgICAg
ICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjKSkpICogeV9mcmFj
KSwKCiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgocGF0Y2gtPnZlcnRpY2VzWzFdICogeF9m
cmFjMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAq
ICgxLXhfZnJhYzEpKSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
KChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMxKSArCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAocGF0Y2gtPnZlcnRpY2VzWzNdICogKDEteF9mcmFjMSkpKSAqIHlfZnJhYyksCgogICAg
ICAgICAgICAgICAgICAgICAgICAgICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYzEpICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0gKiAoMS14X2Zy
YWMxKSkpICogKDEteV9mcmFjMSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNo
LT52ZXJ0aWNlc1syXSAqIHhfZnJhYzEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
YXRjaC0+dmVydGljZXNbM10gKiAoMS14X2ZyYWMxKSkpICogeV9mcmFjMSksCgogICAgICAgICAg
ICAgICAgICAgICAgICAgICgoKHBhdGNoLT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAq
ICgxLXlfZnJhYzEpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGlj
ZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVy
dGljZXNbM10gKiAoMS14X2ZyYWMpKSkgKiB5X2ZyYWMxKQogICAgICAgICAgICAgICAgICAgICAg
ICAgIH07CgogICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNwYWNlZGltKQogICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgICAg
ICB7IH07CgoKCiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRzWzBdID0gcGF0Y2gtPmRhdGEu
bl9yb3dzKCkgIT0gMCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdz
LmhlaWdodF92ZWN0b3IsaSoobl9zdWJkaXZpc2lvbnMrMSkgKyBqKSAqIGZsYWdzLnpfc2NhbGlu
ZwogICAgICAgICAgICAgICAgICAgICAgICA6IDA7CgogICAgICAgICAgICAgICAgICAgICAgaGVp
Z2h0c1sxXSA9IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaC0+ZGF0YShmbGFncy5oZWlnaHRfdmVjdG9yLChpKzEpKihuX3N1YmRpdmlzaW9u
cysxKSArIGopICogZmxhZ3Muel9zY2FsaW5nCiAgICAgICAgICAgICAgICAgICAgICAgIDogMDsK
CiAgICAgICAgICAgICAgICAgICAgICBoZWlnaHRzWzJdID0gcGF0Y2gtPmRhdGEubl9yb3dzKCkg
IT0gMCA/CiAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdzLmhlaWdodF92
ZWN0b3IsKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpICsgaisxKSAqIGZsYWdzLnpfc2NhbGluZwog
ICAgICAgICAgICAgICAgICAgICAgICA6IDA7CgogICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0
c1szXSA9IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAgICAg
ICBwYXRjaC0+ZGF0YShmbGFncy5oZWlnaHRfdmVjdG9yLGkqKG5fc3ViZGl2aXNpb25zKzEpICsg
aisxKSAqIGZsYWdzLnpfc2NhbGluZwogICAgICAgICAgICAgICAgICAgICAgICA6IDA7CiAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDM6CgogICAg
ICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wO2k8NDsrK2kpCiAgICAgICAg
ICAgICAgICAgICAgICAgIGhlaWdodHNbaV0gPSBwb2ludHNbaV0oMik7CiAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg
ICAgICAgICAgeyB9OwogICAgICAgICAgICAgICAgICAgIH0KIyAxNzY0ICJzb3VyY2UvZGF0YV9v
dXRfYmFzZS5jYyIKICAgICAgICAgICAgICAgICAgRXBzQ2VsbDJkIGVwc19jZWxsOwogICAgICAg
ICAgICAgICAgICBjb25zdCBkb3VibGUgcGkgPSBkZWFsX0lJX251bWJlcnM6OlBJOwogICAgICAg
ICAgICAgICAgICBjb25zdCBkb3VibGUgY3ggPSAtc3RkOjpjb3MocGktZmxhZ3MuYXppbXV0X2Fu
Z2xlICogMipwaSAvIDM2MC4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3ogPSAt
c3RkOjpjb3MoZmxhZ3MudHVybl9hbmdsZSAqIDIqcGkgLyAzNjAuKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHN4ID0gc3RkOjpzaW4ocGktZmxhZ3MuYXppbXV0X2FuZ2xlICogMipw
aSAvIDM2MC4pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ogPSBzdGQ6OnNpbihm
bGFncy50dXJuX2FuZ2xlICogMipwaSAvIDM2MC4pOwogICAgICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCB2ZXJ0ZXg9MDsgdmVydGV4PDQ7ICsrdmVydGV4KQogICAgICAgICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4ID0gcG9pbnRzW3ZlcnRl
eF0oMCksCiAgICAgICAgICAgICAgICAgICAgICAgIHkgPSBwb2ludHNbdmVydGV4XSgxKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgeiA9IC1oZWlnaHRzW3ZlcnRleF07CgogICAgICAgICAgICAg
ICAgICAgICAgZXBzX2NlbGwudmVydGljZXNbdmVydGV4XSgwKSA9IC0gY3oqeCsgc3oqeTsKICAg
ICAgICAgICAgICAgICAgICAgIGVwc19jZWxsLnZlcnRpY2VzW3ZlcnRleF0oMSkgPSAtY3gqc3oq
eC1jeCpjeip5LXN4Kno7CiMgMTc5NCAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgICAgICAg
ICAgICAgICAgICAgfTsKCgoKICAgICAgICAgICAgICAgICAgY29uc3QgUG9pbnQ8c3BhY2VkaW0+
IGNlbnRlcl9wb2ludAogICAgICAgICAgICAgICAgICAgID0gKHBvaW50c1swXSArIHBvaW50c1sx
XSArIHBvaW50c1syXSArIHBvaW50c1szXSkgLyA0OwogICAgICAgICAgICAgICAgICBjb25zdCBk
b3VibGUgY2VudGVyX2hlaWdodAogICAgICAgICAgICAgICAgICAgID0gLShoZWlnaHRzWzBdICsg
aGVpZ2h0c1sxXSArIGhlaWdodHNbMl0gKyBoZWlnaHRzWzNdKSAvIDQ7CgoKCiAgICAgICAgICAg
ICAgICAgIGVwc19jZWxsLmRlcHRoID0gLXN4KnN6KmNlbnRlcl9wb2ludCgwKQogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIC1zeCpjeipjZW50ZXJfcG9pbnQoMSkKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICArY3gqY2VudGVyX2hlaWdodDsKCiAgICAgICAgICAg
ICAgICAgIGlmIChmbGFncy5kcmF3X2NlbGxzICYmIGZsYWdzLnNoYWRlX2NlbGxzKQogICAgICAg
ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIHsgfTsKCgoKICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IGRvdWJsZSBjb2xvcl92YWx1ZXNbNF0KICAgICAgICAgICAgICAgICAg
ICAgICAgPSB7IHBhdGNoLT5kYXRhLm5fcm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGF0Y2gtPmRhdGEoZmxhZ3MuY29sb3JfdmVjdG9yLGkqKG5fc3ViZGl2aXNpb25z
KzEpICsgaikgOiAxLAoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhLm5f
cm93cygpICE9IDAgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0Y2gtPmRhdGEoZmxh
Z3MuY29sb3JfdmVjdG9yLChpKzEpKihuX3N1YmRpdmlzaW9ucysxKSArIGopIDogMSwKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXRjaC0+ZGF0YS5uX3Jvd3MoKSAhPSAwID8KICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhdGNoLT5kYXRhKGZsYWdzLmNvbG9yX3ZlY3RvciwoaSsx
KSoobl9zdWJkaXZpc2lvbnMrMSkgKyBqKzEpIDogMSwKCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaC0+ZGF0YS5uX3Jvd3MoKSAhPSAwID8KICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdGNoLT5kYXRhKGZsYWdzLmNvbG9yX3ZlY3RvcixpKihuX3N1YmRpdmlzaW9ucysxKSAr
IGorMSkgOiAxfTsKCgoKICAgICAgICAgICAgICAgICAgICAgIGVwc19jZWxsLmNvbG9yX3ZhbHVl
ID0gKGNvbG9yX3ZhbHVlc1swXSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvcl92YWx1ZXNbMV0gKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JfdmFsdWVzWzJdICsKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yX3ZhbHVlc1szXSkgLyA0OwoKCgogICAgICAg
ICAgICAgICAgICAgICAgaWYgKHBhdGNoID09IHBhdGNoZXMuYmVnaW4oKSkKICAgICAgICAgICAg
ICAgICAgICAgICAgbWluX2NvbG9yX3ZhbHVlID0gbWF4X2NvbG9yX3ZhbHVlID0gZXBzX2NlbGwu
Y29sb3JfdmFsdWU7CiAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fY29sb3JfdmFsdWUgPSAobWlu
X2NvbG9yX3ZhbHVlIDwgZXBzX2NlbGwuY29sb3JfdmFsdWUgPwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBtaW5fY29sb3JfdmFsdWUgOiBlcHNfY2VsbC5jb2xv
cl92YWx1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlID0gKG1h
eF9jb2xvcl92YWx1ZSA+IGVwc19jZWxsLmNvbG9yX3ZhbHVlID8KICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlIDogZXBzX2NlbGwuY29s
b3JfdmFsdWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAg
IH07CgoKICAgICAgICAgICAgICAgICAgY2VsbHMuaW5zZXJ0IChlcHNfY2VsbCk7CiAgICAgICAg
ICAgICAgICB9OwogICAgICAgICAgfTsKCgoKCiAgICAgICAgZG91YmxlIHhfbWluID0gY2VsbHMu
YmVnaW4oKS0+dmVydGljZXNbMF0oMCk7CiAgICAgICAgZG91YmxlIHhfbWF4ID0geF9taW47CiAg
ICAgICAgZG91YmxlIHlfbWluID0gY2VsbHMuYmVnaW4oKS0+dmVydGljZXNbMF0oMSk7CiAgICAg
ICAgZG91YmxlIHlfbWF4ID0geV9taW47CgogICAgICAgIGZvciAodHlwZW5hbWUgc3RkOjptdWx0
aXNldDxFcHNDZWxsMmQ+Ojpjb25zdF9pdGVyYXRvcgogICAgICAgICAgICAgICBjZWxsPWNlbGxz
LmJlZ2luKCk7CiAgICAgICAgICAgICBjZWxsIT1jZWxscy5lbmQoKTsgKytjZWxsKQogICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgdmVydGV4PTA7IHZlcnRleDw0OyArK3ZlcnRleCkKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIHhfbWluID0gc3RkOjptaW4gKHhfbWluLCBjZWxsLT52ZXJ0
aWNlc1t2ZXJ0ZXhdKDApKTsKICAgICAgICAgICAgICB4X21heCA9IHN0ZDo6bWF4ICh4X21heCwg
Y2VsbC0+dmVydGljZXNbdmVydGV4XSgwKSk7CiAgICAgICAgICAgICAgeV9taW4gPSBzdGQ6Om1p
biAoeV9taW4sIGNlbGwtPnZlcnRpY2VzW3ZlcnRleF0oMSkpOwogICAgICAgICAgICAgIHlfbWF4
ID0gc3RkOjptYXggKHlfbWF4LCBjZWxsLT52ZXJ0aWNlc1t2ZXJ0ZXhdKDEpKTsKICAgICAgICAg
ICAgfTsKCgoKCgoKICAgICAgICBjb25zdCBkb3VibGUgc2NhbGUgPSAoZmxhZ3Muc2l6ZSAvCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmbGFncy5zaXplX3R5cGU9PUVwc0ZsYWdzOjp3
aWR0aCA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4X21heCAtIHhfbWluIDoKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfbWluIC0geV9tYXgpKTsKCiAgICAgICAgY29u
c3QgUG9pbnQ8Mj4gb2Zmc2V0KHhfbWluLCB5X21pbik7CgoKCiAgICAgICAgaWYgKHRydWUpCiAg
ICAgICAgICB7CgoKCiAgICAgICAgICAgIHN0ZDo6dGltZV90IHRpbWUxPSBzdGQ6OnRpbWUgKDAp
OwogICAgICAgICAgICBzdGQ6OnRtICp0aW1lID0gc3RkOjpsb2NhbHRpbWUoJnRpbWUxKTsKICAg
ICAgICAgICAgb3V0IDw8ICIlIVBTLUFkb2JlLTIuMCBFUFNGLTEuMiIgPDwgc3RkOjplbmRsCiAg
ICAgICAgICAgICAgICA8PCAiJSVUaXRsZTogZGVhbC5JSSBPdXRwdXQiIDw8IHN0ZDo6ZW5kbAog
ICAgICAgICAgICAgICAgPDwgIiUlQ3JlYXRvcjogdGhlIGRlYWwuSUkgbGlicmFyeSIgPDwgc3Rk
OjplbmRsCiAgICAgICAgICAgICAgICA8PCAiJSVDcmVhdGlvbiBEYXRlOiAiCiAgICAgICAgICAg
ICAgICA8PCB0aW1lLT50bV95ZWFyKzE5MDAgPDwgIi8iCiAgICAgICAgICAgICAgICA8PCB0aW1l
LT50bV9tb24rMSA8PCAiLyIKICAgICAgICAgICAgICAgIDw8IHRpbWUtPnRtX21kYXkgPDwgIiAt
ICIKICAgICAgICAgICAgICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICAgICAg
ICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1fbWluIDw8ICI6IgogICAgICAgICAgICAgICAg
PDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX3NlYyA8PCBzdGQ6OmVuZGwKICAgICAgICAgICAg
ICAgIDw8ICIlJUJvdW5kaW5nQm94OiAiCgogICAgICAgICAgICAgICAgPDwgIjAgMCAiCgogICAg
ICAgICAgICAgICAgPDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PiggKHhfbWF4LXhfbWluKSAq
IHNjYWxlICkKICAgICAgICAgICAgICAgIDw8ICcgJwogICAgICAgICAgICAgICAgPDwgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgaW50PiggKHlfbWF4LXlfbWluKSAqIHNjYWxlICkKICAgICAgICAgICAg
ICAgIDw8IHN0ZDo6ZW5kbDsKIyAxOTIwICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICAgICAg
ICAgICAgb3V0IDw8ICIvbSB7bW92ZXRvfSBiaW5kIGRlZiIgPDwgc3RkOjplbmRsCiAgICAgICAg
ICAgICAgICA8PCAiL2wge2xpbmV0b30gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAgICAg
ICAgICAgPDwgIi9zIHtzZXRyZ2Jjb2xvcn0gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAg
ICAgICAgICAgPDwgIi9zZyB7c2V0Z3JheX0gYmluZCBkZWYiIDw8IHN0ZDo6ZW5kbAogICAgICAg
ICAgICAgICAgPDwgIi9seCB7bGluZXRvIGNsb3NlcGF0aCBzdHJva2V9IGJpbmQgZGVmIiA8PCBz
dGQ6OmVuZGwKICAgICAgICAgICAgICAgIDw8ICIvbGYge2xpbmV0byBjbG9zZXBhdGggZmlsbH0g
YmluZCBkZWYiIDw8IHN0ZDo6ZW5kbDsKCiAgICAgICAgICAgIG91dCA8PCAiJSVFbmRQcm9sb2ci
IDw8IHN0ZDo6ZW5kbAogICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwoKICAgICAgICAgICAg
b3V0IDw8IGZsYWdzLmxpbmVfd2lkdGggPDwgIiBzZXRsaW5ld2lkdGgiIDw8IHN0ZDo6ZW5kbDsK
CgoKCgogICAgICAgICAgICBvdXQgPDwgc3RkOjpzZXRwcmVjaXNpb24gKDUpOwogICAgICAgICAg
fTsKIyAxOTUzICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICAgICAgICBpZiAobWF4X2NvbG9y
X3ZhbHVlID09IG1pbl9jb2xvcl92YWx1ZSkKICAgICAgICAgIG1heF9jb2xvcl92YWx1ZSA9IG1p
bl9jb2xvcl92YWx1ZSsxOwoKCgoKCgogICAgICAgIGZvciAodHlwZW5hbWUgc3RkOjptdWx0aXNl
dDxFcHNDZWxsMmQ+Ojpjb25zdF9pdGVyYXRvcgogICAgICAgICAgICAgICBjZWxsPWNlbGxzLmJl
Z2luKCk7CiAgICAgICAgICAgICBjZWxsIT1jZWxscy5lbmQoKTsgKytjZWxsKQogICAgICAgICAg
ewogICAgICAgICAgICBpZiAoZmxhZ3MuZHJhd19jZWxscykKICAgICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgICBpZiAoZmxhZ3Muc2hhZGVfY2VsbHMpCiAgICAgICAgICAgICAgICAgIHsKICAg
ICAgICAgICAgICAgICAgICBjb25zdCBFcHNGbGFnczo6UmdiVmFsdWVzIHJnYl92YWx1ZXMKICAg
ICAgICAgICAgICAgICAgICAgID0gKCpmbGFncy5jb2xvcl9mdW5jdGlvbikgKGNlbGwtPmNvbG9y
X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWluX2NvbG9yX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbWF4X2NvbG9yX3ZhbHVlKTsKCgogICAgICAgICAgICAgICAgICAgIGlmIChyZ2Jf
dmFsdWVzLmlzX2dyZXkoKSkKICAgICAgICAgICAgICAgICAgICAgIG91dCA8PCByZ2JfdmFsdWVz
LnJlZCA8PCAiIHNnICI7CiAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg
ICAgICAgb3V0IDw8IHJnYl92YWx1ZXMucmVkIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IHJnYl92YWx1ZXMuZ3JlZW4gPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAg
PDwgcmdiX3ZhbHVlcy5ibHVlIDw8ICIgcyAiOwogICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgIG91dCA8PCAiMSBzZyAiOwoKICAgICAgICAg
ICAgICAgIG91dCA8PCAoY2VsbC0+dmVydGljZXNbMF0tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbSAi
CiAgICAgICAgICAgICAgICAgICAgPDwgKGNlbGwtPnZlcnRpY2VzWzFdLW9mZnNldCkgKiBzY2Fs
ZSA8PCAiIGwgIgogICAgICAgICAgICAgICAgICAgIDw8IChjZWxsLT52ZXJ0aWNlc1syXS1vZmZz
ZXQpICogc2NhbGUgPDwgIiBsICIKICAgICAgICAgICAgICAgICAgICA8PCAoY2VsbC0+dmVydGlj
ZXNbM10tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbGYiCiAgICAgICAgICAgICAgICAgICAgPDwgc3Rk
OjplbmRsOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICBpZiAoZmxhZ3MuZHJhd19tZXNo
KQogICAgICAgICAgICAgIG91dCA8PCAiMCBzZyAiCiAgICAgICAgICAgICAgICAgIDw8IChjZWxs
LT52ZXJ0aWNlc1swXS1vZmZzZXQpICogc2NhbGUgPDwgIiBtICIKICAgICAgICAgICAgICAgICAg
PDwgKGNlbGwtPnZlcnRpY2VzWzFdLW9mZnNldCkgKiBzY2FsZSA8PCAiIGwgIgogICAgICAgICAg
ICAgICAgICA8PCAoY2VsbC0+dmVydGljZXNbMl0tb2Zmc2V0KSAqIHNjYWxlIDw8ICIgbCAiCiAg
ICAgICAgICAgICAgICAgIDw8IChjZWxsLT52ZXJ0aWNlc1szXS1vZmZzZXQpICogc2NhbGUgPDwg
IiBseCIKICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgfTsKICAgICAg
ICBvdXQgPDwgInNob3dwYWdlIiA8PCBzdGQ6OmVuZGw7CgogICAgICAgIGJyZWFrOwogICAgICB9
OwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgeyB9OwogICAgfTsKfTsKCgoKdGVtcGxhdGUg
PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0QmFzZTo6d3JpdGVfZ212IChjb25z
dCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25h
bWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEdtdkZsYWdzICYgLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAgeyBpZiAoX19i
dWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5h
bHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMjAxOCwg
X19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07CgogIHsg
fTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRzID0gZGF0YV9uYW1lcy5zaXplKCk7
CgoKCgogIHsgfTsKCgoKCgogIG91dCA8PCAiZ212aW5wdXQgYXNjaWkiCiAgICAgIDw8IHN0ZDo6
ZW5kbAogICAgICA8PCBzdGQ6OmVuZGw7CgoKCiAgdW5zaWduZWQgaW50IG5fY2VsbHMgPSAwLAog
ICAgICAgICAgICAgICBuX25vZGVzID0gMDsKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBh
dGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigp
OwogICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICBzd2l0Y2ggKGRpbSkK
ICAgICAgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBuX2NlbGxzICs9IHBhdGNoLT5u
X3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IHBhdGNoLT5uX3N1YmRpdmlz
aW9ucysxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAg
ICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0
Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+
bl9zdWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgog
ICAgICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAo
cGF0Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRj
aC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5u
X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgIHsgfTsKICAgICAgfTsKIyAyMDg5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j
YyIKICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFfc2V0cywgbl9ub2Rlcyk7
CiAgVGhyZWFkczo6VGhyZWFkTWFuYWdlciB0aHJlYWRfbWFuYWdlcjsKICB2b2lkICgqZnVuX3B0
cikgKGNvbnN0IHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmLAogICAgICAgICAg
ICAgICAgICAgVGFibGU8Mixkb3VibGU+ICYpCiAgICA9ICZEYXRhT3V0QmFzZTo6dGVtcGxhdGUg
d3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzPGRpbSxzcGFjZWRpbT47CiAgVGhyZWFkczo6
c3Bhd24gKHRocmVhZF9tYW5hZ2VyLAogICAgICAgICAgICAgICAgICBUaHJlYWRzOjplbmNhcHN1
bGF0ZSAoZnVuX3B0cikKICAgICAgICAgICAgICAgICAgLmNvbGxlY3RfYXJncyhwYXRjaGVzLCBk
YXRhX3ZlY3RvcnMpKTsKIyAyMTA1ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIKICBvdXQgPDwg
Im5vZGVzICIgPDwgbl9ub2RlcyA8PCBzdGQ6OmVuZGw7CiAgZm9yICh1bnNpZ25lZCBpbnQgZD0x
OyBkPD0zOyArK2QpCiAgICB7CiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0Y2g8
ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7CiAg
ICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAgICAgewogICAgICAg
ICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gtPm5fc3ViZGl2aXNp
b25zOwoKCgogICAgICAgICAgaWYgKGQ8PXNwYWNlZGltKQogICAgICAgICAgICB7CiAgICAgICAg
ICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGNh
c2UgMToKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgICAg
ICBvdXQgPDwgKChwYXRjaC0+dmVydGljZXNbMV0oMCkgKiBpIC8gbl9zdWJkaXZpc2lvbnMpICsK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1swXSgwKSAqIChu
X3N1YmRpdmlzaW9ucy1pKSAvIG5fc3ViZGl2aXNpb25zKSkKICAgICAgICAgICAgICAgICAgICAg
ICAgICA8PCAnICc7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnMrMTsg
KytpKQogICAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3Vi
ZGl2aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IGRvdWJsZSB4X2ZyYWMgPSBpICogMS4vbl9zdWJkaXZpc2lvbnMs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHlfZnJhYyA9IGogKiAxLi9u
X3N1YmRpdmlzaW9uczsKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgKCgocGF0
Y2gtPnZlcnRpY2VzWzFdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdKGQtMSkgKiAoMS14X2ZyYWMpKSkgKiAoMS15
X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRp
Y2VzWzJdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAocGF0Y2gtPnZlcnRpY2VzWzNdKGQtMSkgKiAoMS14X2ZyYWMpKSkgKiB5X2ZyYWMpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIDw8ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAg
fTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgfTsKCiAgICAg
ICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMr
MTsgKytqKQogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBrPTA7IGs8
bl9zdWJkaXZpc2lvbnMrMTsgKytrKQogICAgICAgICAgICAgICAgICAgICAgICAgIHsKCgoKCgoK
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9mcmFjID0gaSAqIDEu
L25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHlfZnJhYyA9IGsgKiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB6X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgKCgoKHBhdGNoLT52ZXJ0aWNlc1sxXShkLTEp
ICogeF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo
LT52ZXJ0aWNlc1swXShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhdGNoLT52ZXJ0aWNlc1syXShkLTEpICog
eF9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52
ZXJ0aWNlc1szXShkLTEpICogKDEteF9mcmFjKSkpICogeV9mcmFjKSAqICgxLXpfZnJhYykgKwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0o
ZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChw
YXRjaC0+dmVydGljZXNbNF0oZC0xKSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbNl0oZC0x
KSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRj
aC0+dmVydGljZXNbN10oZC0xKSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgJyAnOwogICAgICAgICAgICAgICAgICAg
ICAgICAgIH07CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICB9
OwoKICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgeyB9
OwogICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQoKICAgICAg
ICAgICAgewogICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGludCBuX3BvaW50cwogICAgICAg
ICAgICAgICAgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KHN0ZDo6cG93IChzdGF0aWNfY2Fz
dDxkb3VibGU+KG5fc3ViZGl2aXNpb25zKzEpLCBkaW0pKTsKICAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpPTA7IGk8bl9wb2ludHM7ICsraSkKICAgICAgICAgICAgICAgIG91dCA8PCAi
MCAiOwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAg
ICB9OwoKICBvdXQgPDwgc3RkOjplbmRsOwoKCgoKICBpZiAodHJ1ZSkKICAgIHsKICAgICAgb3V0
IDw8ICJjZWxscyAiIDw8IG5fY2VsbHMgPDwgc3RkOjplbmRsOwoKCiAgICAgIHVuc2lnbmVkIGlu
dCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICAgICAgZm9yICh0eXBlbmFtZSBzdGQ6OnZl
Y3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBhdGNoPXBhdGNoZXMu
YmVnaW4oKTsKICAgICAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgICAg
ICB7CiAgICAgICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+
bl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICAgICAgewog
ICAgICAgICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpPTA7IGk8bl9zdWJkaXZpc2lvbnM7ICsraSkKICAgICAgICAgICAgICAg
ICAgb3V0IDw8ICJsaW5lIDJcbiAgIgogICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVy
dGV4X29mX3BhdGNoK2krMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3Zl
cnRleF9vZl9wYXRjaCtpKzErMSA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgICAgewog
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyAr
K2kpCiAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz
aW9uczsgKytqKQogICAgICAgICAgICAgICAgICAgIG91dCA8PCAicXVhZCA0XG4gICIKICAgICAg
ICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3ViZGl2aXNp
b25zKzEpK2orMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4
X29mX3BhdGNoKyhpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAg
ICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSsxKSoobl9zdWJkaXZpc2lv
bnMrMSkraisxKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRl
eF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzErMQogICAgICAgICAgICAgICAgICAg
ICAgICA8PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9
OwoKICAgICAgICAgICAgICBjYXNlIDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9uczsg
KytrKQogICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQg
PDwgImhleCA4XG4gICAiCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVy
dGV4X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysxKStqICkqKG5fc3ViZGl2aXNpb25zKzEp
K2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf
b2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqICkqKG5fc3ViZGl2aXNpb25zKzEp
K2sgKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf
b2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRpdmlzaW9ucysx
KStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4
X29mX3BhdGNoKyhpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgKSoobl9zdWJkaXZpc2lvbnMrMSkr
ayArMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9v
Zl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrKzEr
MSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9w
YXRjaCsoKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysx
KzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2Zf
cGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRpdmlzaW9ucysxKStr
KzErMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9v
Zl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraisxICkqKG5fc3ViZGl2aXNpb25zKzEpK2sr
MSsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAg
ICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
IH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgeyB9OwogICAg
ICAgICAgICB9OwoKCgoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAgICAgICB7CiAgICAg
ICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRj
aCArPSBuX3N1YmRpdmlzaW9ucysxOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2gg
Kz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICBmaXJzdF92ZXJ0ZXhf
b2ZfcGF0Y2ggKz0gKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2aXNpb25zKzEpOwogICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVu
ZGw7CiAgICB9OwoKCgogIG91dCA8PCAidmFyaWFibGUiIDw8IHN0ZDo6ZW5kbDsKCgoKCiAgdGhy
ZWFkX21hbmFnZXIud2FpdCAoKTsKCgoKCgogIGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7
IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAgewogICAgICBvdXQgPDwgZGF0
YV9uYW1lc1tkYXRhX3NldF0gPDwgIiAxIiA8PCBzdGQ6OmVuZGw7CiAgICAgIGNvcHkoZGF0YV92
ZWN0b3JzW2RhdGFfc2V0XS5iZWdpbigpLAogICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3Nl
dF0uZW5kKCksCiAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGRvdWJsZT4ob3V0LCAi
ICIpKTsKICAgICAgb3V0IDw8IHN0ZDo6ZW5kbAogICAgICAgICAgPDwgc3RkOjplbmRsOwogICAg
fTsKCgoKCiAgb3V0IDw8ICJlbmR2YXJzIiA8PCBzdGQ6OmVuZGw7CgoKICBvdXQgPDwgImVuZGdt
diIKICAgICAgPDwgc3RkOjplbmRsOwoKCiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCks
IGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJv
dyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIiwgMjMyMSwgX19QUkVUVFlfRlVOQ1RJT05fXywg
Im91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7IH07Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBp
bnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEJhc2U6OndyaXRlX3RlY3Bsb3QgKGNvbnN0IHN0ZDo6
dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPiAmcGF0Y2hlcywKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVz
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBUZWNwbG90RmxhZ3MgJiAs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVhbSAmb3V0KQp7CiAg
eyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9JSV9leGNlcHRpb25z
OjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRhX291dF9iYXNlLmNj
IiwgMjMzMiwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygpIiwgRXhjSU8oKSk7
IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRzID0gZGF0YV9uYW1l
cy5zaXplKCk7CgoKCgogIHsgfTsKCgoKCgoKICB1bnNpZ25lZCBpbnQgbl9jZWxscyA9IDAsCiAg
ICAgICAgICAgICAgIG5fbm9kZXMgPSAwOwogIGZvciAodHlwZW5hbWUgc3RkOjp2ZWN0b3I8UGF0
Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVzLmJlZ2luKCk7
CiAgICAgICBwYXRjaCE9cGF0Y2hlcy5lbmQoKTsgKytwYXRjaCkKICAgIHN3aXRjaCAoZGltKQog
ICAgICB7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5f
c3ViZGl2aXNpb25zOwogICAgICAgICAgICAgIG5fbm9kZXMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNp
b25zKzE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAg
IG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IChwYXRj
aC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5u
X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6CiAg
ICAgICAgICAgICAgbl9jZWxscyArPSBwYXRjaC0+bl9zdWJkaXZpc2lvbnMgKgogICAgICAgICAg
ICAgICAgICAgICAgICAgcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IChw
YXRjaC0+bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo
LT5uX3N1YmRpdmlzaW9ucysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPm5f
c3ViZGl2aXNpb25zKzEpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAg
ICAgICAgICAgICAgeyB9OwogICAgICB9OwoKCgoKCgogIHsKICAgIHN0ZDo6dGltZV90IHRpbWUx
PSBzdGQ6OnRpbWUgKDApOwogICAgc3RkOjp0bSAqdGltZSA9IHN0ZDo6bG9jYWx0aW1lKCZ0aW1l
MSk7CiAgICBvdXQgPDwgIiMgVGhpcyBmaWxlIHdhcyBnZW5lcmF0ZWQgYnkgdGhlIGRlYWwuSUkg
bGlicmFyeS4iIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIERhdGUgPSAgIgogICAgICAgIDw8
IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICA8PCB0aW1lLT50bV9tb24rMSA8PCAi
LyIKICAgICAgICA8PCB0aW1lLT50bV9tZGF5IDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIFRp
bWUgPSAgIgogICAgICAgIDw8IHRpbWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgPDwgc3RkOjpz
ZXR3KDIpIDw8IHRpbWUtPnRtX21pbiA8PCAiOiIKICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwg
dGltZS0+dG1fc2VjIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8ICIjIiA8PCBzdGQ6OmVuZGwKICAg
ICAgICA8PCAiIyBGb3IgYSBkZXNjcmlwdGlvbiBvZiB0aGUgVGVjcGxvdCBmb3JtYXQgc2VlIHRo
ZSBUZWNwbG90IGRvY3VtZW50YXRpb24uIgogICAgICAgIDw8IHN0ZDo6ZW5kbAogICAgICAgIDw8
ICIjIiA8PCBzdGQ6OmVuZGw7CgoKICAgIG91dCA8PCAiVmFyaWFibGVzPSI7CgogICAgc3dpdGNo
IChkaW0pCiAgICAgIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgb3V0IDw8ICJcInhc
IiI7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIG91
dCA8PCAiXCJ4XCIsIFwieVwiIjsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDM6
CiAgICAgICAgICAgICAgb3V0IDw8ICJcInhcIiwgXCJ5XCIsIFwielwiIjsKICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgIHsgfTsKICAgICAgfTsKCiAg
ICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsgKytk
YXRhX3NldCkKICAgICAgewogICAgICAgIG91dCA8PCAiLCBcIiIgPDwgZGF0YV9uYW1lc1tkYXRh
X3NldF0gPDwgIlwiIjsKICAgICAgfTsKCiAgICBvdXQgPDwgc3RkOjplbmRsOwoKICAgIGlmIChk
aW0gPiAxKQogICAgICB7CiAgICAgICAgb3V0IDw8ICJ6b25lIGY9ZmVibG9jaywgbj0iIDw8IG5f
bm9kZXMgPDwgIiwgZT0iIDw8IG5fY2VsbHMgPDwgIiwgZXQ9IjsKCiAgICAgICAgc3dpdGNoIChk
aW0pCiAgICAgICAgICB7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIG91dCA8PCAicXVh
ZHJpbGF0ZXJhbCIgPDwgc3RkOjplbmRsOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNh
c2UgMzoKICAgICAgICAgICAgb3V0IDw8ICJicmljayIgPDwgc3RkOjplbmRsOwogICAgICAgICAg
ICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHsgfTsKICAgICAgICAgIH07
CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgIG91dCA8PCAiem9uZSBmPWJsb2NrLCBu
PSIgPDwgbl9ub2RlcyA8PCBzdGQ6OmVuZGw7CiAgICAgIH07CiAgfTsKIyAyNDY4ICJzb3VyY2Uv
ZGF0YV9vdXRfYmFzZS5jYyIKICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFf
c2V0cywgbl9ub2Rlcyk7CgogIFRocmVhZHM6OlRocmVhZE1hbmFnZXIgdGhyZWFkX21hbmFnZXI7
CiAgdm9pZCAoKmZ1bl9wdHIpIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+
ID4gJiwKICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmKQogICAgPSAmRGF0YU91
dEJhc2U6OnRlbXBsYXRlIHdyaXRlX2dtdl9yZW9yZGVyX2RhdGFfdmVjdG9yczxkaW0sc3BhY2Vk
aW0+OwogIFRocmVhZHM6OnNwYXduICh0aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAg
VGhyZWFkczo6ZW5jYXBzdWxhdGUgKGZ1bl9wdHIpCiAgICAgICAgICAgICAgICAgIC5jb2xsZWN0
X2FyZ3MocGF0Y2hlcywgZGF0YV92ZWN0b3JzKSk7CgoKCgoKCgogIGZvciAodW5zaWduZWQgaW50
IGQ9MTsgZDw9c3BhY2VkaW07ICsrZCkKICAgIHsKCiAgICAgIGZvciAodHlwZW5hbWUgc3RkOjp2
ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1wYXRjaGVz
LmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICAg
ICAgewogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0gcGF0Y2gt
Pm5fc3ViZGl2aXNpb25zOwoKICAgICAgICAgIHN3aXRjaCAoZGltKQogICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAg
ICAgIG91dCA8PCAoKHBhdGNoLT52ZXJ0aWNlc1sxXSgwKSAqIGkgLyBuX3N1YmRpdmlzaW9ucykg
KwogICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbMF0oMCkgKiAobl9z
dWJkaXZpc2lvbnMtaSkgLyBuX3N1YmRpdmlzaW9ucykpCiAgICAgICAgICAgICAgICAgICAgICA8
PCAnXG4nOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfTsKCiAgICAgICAg
ICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9ucysxOyArK2opCiAgICAgICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkg
KiAxLi9uX3N1YmRpdmlzaW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5
X2ZyYWMgPSBqICogMS4vbl9zdWJkaXZpc2lvbnM7CgoKCgogICAgICAgICAgICAgICAgICAgICAg
b3V0IDw8ICgoKHBhdGNoLT52ZXJ0aWNlc1sxXShkLTEpICogeF9mcmFjKSArCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAocGF0Y2gtPnZlcnRpY2VzWzBdKGQtMSkgKiAoMS14X2ZyYWMp
KSkgKiAoMS15X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChwYXRjaC0+
dmVydGljZXNbMl0oZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKHBhdGNoLT52ZXJ0aWNlc1szXShkLTEpICogKDEteF9mcmFjKSkpICogeV9mcmFjKQogICAg
ICAgICAgICAgICAgICAgICAgICAgIDw8ICdcbic7CiAgICAgICAgICAgICAgICAgICAgfTsKICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGNhc2Ug
MzoKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7
IGk8bl9zdWJkaXZpc2lvbnMrMTsgKytpKQogICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAg
ICAgICAgICAgICB7CgoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUg
eF9mcmFjID0gaSAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgel9mcmFjID0gaiAqIDEuL25fc3ViZGl2aXNpb25zOwoK
CgoKICAgICAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRjaC0+dmVydGljZXNbMV0o
ZC0xKSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNo
LT52ZXJ0aWNlc1swXShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdKGQtMSkgKiB4X2Zy
YWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNb
M10oZC0xKSAqICgxLXhfZnJhYykpKSAqIHlfZnJhYykgKiAoMS16X2ZyYWMpICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAoKChwYXRjaC0+dmVydGljZXNbNV0oZC0xKSAqIHhfZnJh
YykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1s0
XShkLTEpICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdKGQtMSkgKiB4X2ZyYWMpICsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbN10oZC0xKSAqICgx
LXhfZnJhYykpKSAqIHlfZnJhYykgKiB6X2ZyYWMpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICA8PCAnXG4nOwogICAgICAgICAgICAgICAgICAgICAgfTsKICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgIH07CgogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgICAgeyB9OwogICAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIG91dCA8PCBzdGQ6OmVu
ZGw7CiAgICB9OwojIDI1NzAgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogIHRocmVhZF9tYW5h
Z2VyLndhaXQgKCk7CgoKICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxu
X2RhdGFfc2V0czsgKytkYXRhX3NldCkKICAgIHsKCiAgICAgIGNvcHkoZGF0YV92ZWN0b3JzW2Rh
dGFfc2V0XS5iZWdpbigpLAogICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3NldF0uZW5kKCks
CiAgICAgICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPGRvdWJsZT4ob3V0LCAiXG4iKSk7CiAg
ICAgIG91dCA8PCBzdGQ6OmVuZGw7CiAgICB9OwoKCgoKCgogIHVuc2lnbmVkIGludCBmaXJzdF92
ZXJ0ZXhfb2ZfcGF0Y2ggPSAwOwoKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRp
bSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAg
ICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICB7CiAgICAgIGNvbnN0IHVuc2ln
bmVkIGludCBuX3N1YmRpdmlzaW9ucyA9IHBhdGNoLT5uX3N1YmRpdmlzaW9uczsKCgoKICAgICAg
c3dpdGNoIChkaW0pCiAgICAgICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgewogICAg
ICAgICAgICBicmVhazsKICAgICAgICAgIH07CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7
CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytp
KQogICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsg
KytqKQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgb3V0IDw8IGZpcnN0X3Zl
cnRleF9vZl9wYXRjaCtpKihuX3N1YmRpdmlzaW9ucysxKStqKzEgPDwgJyAnCiAgICAgICAgICAg
ICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkrMSkqKG5fc3ViZGl2aXNpb25z
KzEpK2orMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9w
YXRjaCsoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraisxKzEgPDwgJyAnCiAgICAgICAgICAgICAg
ICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJkaXZpc2lvbnMrMSkraisx
KzEKICAgICAgICAgICAgICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAg
ICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u
czsgKytpKQogICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGo9MDsgajxuX3N1YmRpdmlz
aW9uczsgKytqKQogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3Vi
ZGl2aXNpb25zOyArK2spCiAgICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAg
IG91dCA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoo
bl9zdWJkaXZpc2lvbnMrMSkrayArMSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwg
Zmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1
YmRpdmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz
dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRp
dmlzaW9ucysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92
ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlzaW9u
cysxKStrICsxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhf
b2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysx
KzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRj
aCsoKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJkaXZpc2lvbnMrMSkraysxKzEg
PDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCso
KGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSkqKG5fc3ViZGl2aXNpb25zKzEpK2srMSsxIDw8
ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkq
KG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlzaW9ucysxKStrKzErMSA8PCAnICcK
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgICB9
OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH07CgogICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgIHsgfTsKICAgICAgICB9OwoKCgoKICAgICAgc3dpdGNoIChkaW0pCiAgICAg
ICAgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4X29mX3Bh
dGNoICs9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
IGNhc2UgMjoKICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9vZl9wYXRjaCArPSAobl9zdWJk
aXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChu
X3N1YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAz
OgogICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4X29mX3BhdGNoICs9IChuX3N1YmRpdmlzaW9u
cysxKSAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5fc3ViZGl2
aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9z
dWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgIGRlZmF1bHQ6
CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKCiAgICB9OwoKCgogIHsgaWYgKF9fYnVp
bHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9uczo6aW50ZXJuYWxz
OjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIsIDI2NjcsIF9f
UFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIsIEV4Y0lPKCkpOyB9Owp9OwojIDI3
NDMgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNl
ZGltPgp2b2lkIERhdGFPdXRCYXNlOjp3cml0ZV90ZWNwbG90X2JpbmFyeSAoY29uc3Qgc3RkOjp2
ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+ICZwYXRjaGVzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+ICZkYXRh
X25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVGVj
cGxvdEZsYWdzICZmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHN0ZDo6b3N0cmVhbSAmb3V0KQp7CgoKCgogIHdyaXRlX3RlY3Bsb3QgKHBhdGNoZXMsIGRhdGFf
bmFtZXMsIGZsYWdzLCBvdXQpOwogIHJldHVybjsKIyAzMTIxICJzb3VyY2UvZGF0YV9vdXRfYmFz
ZS5jYyIKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0
QmFzZTo6d3JpdGVfdnRrIChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4g
JnBhdGNoZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8
c3RkOjpzdHJpbmc+ICZkYXRhX25hbWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFZ0a0ZsYWdzICYgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmVh
bSAmb3V0KQp7CiAgeyBpZiAoX19idWlsdGluX2V4cGVjdCghKG91dCksIGZhbHNlKSkgZGVhbF9J
SV9leGNlcHRpb25zOjppbnRlcm5hbHM6OiBpc3N1ZV9lcnJvcl90aHJvdyAoInNvdXJjZS9kYXRh
X291dF9iYXNlLmNjIiwgMzEzMSwgX19QUkVUVFlfRlVOQ1RJT05fXywgIm91dCIsICJFeGNJTygp
IiwgRXhjSU8oKSk7IH07CgogIHsgfTsKCiAgY29uc3QgdW5zaWduZWQgaW50IG5fZGF0YV9zZXRz
ID0gZGF0YV9uYW1lcy5zaXplKCk7CgoKCgogIHsgfTsKCgoKCgogIGlmICh0cnVlKQogICAgewog
ICAgICBzdGQ6OnRpbWVfdCB0aW1lMT0gc3RkOjp0aW1lICgwKTsKICAgICAgc3RkOjp0bSAqdGlt
ZSA9IHN0ZDo6bG9jYWx0aW1lKCZ0aW1lMSk7CiAgICAgIG91dCA8PCAiIyB2dGsgRGF0YUZpbGUg
VmVyc2lvbiAzLjAiCiAgICAgICAgICA8PCBzdGQ6OmVuZGwKICAgICAgICAgIDw8ICJUaGlzIGZp
bGUgd2FzIGdlbmVyYXRlZCBieSB0aGUgZGVhbC5JSSBsaWJyYXJ5IG9uICIKICAgICAgICAgIDw8
IHRpbWUtPnRtX3llYXIrMTkwMCA8PCAiLyIKICAgICAgICAgIDw8IHRpbWUtPnRtX21vbisxIDw8
ICIvIgogICAgICAgICAgPDwgdGltZS0+dG1fbWRheSA8PCAiIGF0ICIKICAgICAgICAgIDw8IHRp
bWUtPnRtX2hvdXIgPDwgIjoiCiAgICAgICAgICA8PCBzdGQ6OnNldHcoMikgPDwgdGltZS0+dG1f
bWluIDw8ICI6IgogICAgICAgICAgPDwgc3RkOjpzZXR3KDIpIDw8IHRpbWUtPnRtX3NlYwogICAg
ICAgICAgPDwgc3RkOjplbmRsCiAgICAgICAgICA8PCAiQVNDSUkiCiAgICAgICAgICA8PCBzdGQ6
OmVuZGwKICAgICAgICAgIDw8ICJEQVRBU0VUIFVOU1RSVUNUVVJFRF9HUklEIgogICAgICAgICAg
PDwgc3RkOjplbmRsOwogICAgfTsKCgoKCiAgdW5zaWduZWQgaW50IG5fY2VsbHMgPSAwLAogICAg
ICAgICAgICAgICBuX25vZGVzID0gMDsKICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNo
PGRpbSxzcGFjZWRpbT4gPjo6Y29uc3RfaXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwog
ICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gpCiAgICBzd2l0Y2ggKGRpbSkKICAg
ICAgewogICAgICAgIGNhc2UgMToKICAgICAgICAgICAgICBuX2NlbGxzICs9IHBhdGNoLT5uX3N1
YmRpdmlzaW9uczsKICAgICAgICAgICAgICBuX25vZGVzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9u
cysxOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjoKICAgICAgICAgICAgICBu
X2NlbGxzICs9IHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0Y2gt
Pm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+bl9z
dWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAg
ICAgICAgICAgIG5fY2VsbHMgKz0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zICoKICAgICAgICAgICAg
ICAgICAgICAgICAgIHBhdGNoLT5uX3N1YmRpdmlzaW9ucyAqCiAgICAgICAgICAgICAgICAgICAg
ICAgICBwYXRjaC0+bl9zdWJkaXZpc2lvbnM7CiAgICAgICAgICAgICAgbl9ub2RlcyArPSAocGF0
Y2gtPm5fc3ViZGl2aXNpb25zKzEpICoKICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+
bl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgKHBhdGNoLT5uX3N1
YmRpdmlzaW9ucysxKTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgIHsgfTsKICAgICAgfTsKIyAzMjE5ICJzb3VyY2UvZGF0YV9vdXRfYmFzZS5jYyIK
ICBUYWJsZTwyLGRvdWJsZT4gZGF0YV92ZWN0b3JzIChuX2RhdGFfc2V0cywgbl9ub2Rlcyk7Cgog
IFRocmVhZHM6OlRocmVhZE1hbmFnZXIgdGhyZWFkX21hbmFnZXI7CiAgdm9pZCAoKmZ1bl9wdHIp
IChjb25zdCBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJiwKICAgICAgICAgICAg
ICAgICAgIFRhYmxlPDIsZG91YmxlPiAmKQogICAgPSAmRGF0YU91dEJhc2U6OnRlbXBsYXRlIHdy
aXRlX2dtdl9yZW9yZGVyX2RhdGFfdmVjdG9yczxkaW0sc3BhY2VkaW0+OwogIFRocmVhZHM6OnNw
YXduICh0aHJlYWRfbWFuYWdlciwKICAgICAgICAgICAgICAgICAgVGhyZWFkczo6ZW5jYXBzdWxh
dGUgKGZ1bl9wdHIpCiAgICAgICAgICAgICAgICAgIC5jb2xsZWN0X2FyZ3MocGF0Y2hlcywgZGF0
YV92ZWN0b3JzKSk7CiMgMzIzNiAic291cmNlL2RhdGFfb3V0X2Jhc2UuY2MiCiAgb3V0IDw8ICJQ
T0lOVFMgIiA8PCBuX25vZGVzIDw8ICIgZG91YmxlIiA8PCBzdGQ6OmVuZGw7CiAgZm9yICh0eXBl
bmFtZSBzdGQ6OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID46OmNvbnN0X2l0ZXJhdG9yIHBh
dGNoPXBhdGNoZXMuYmVnaW4oKTsKICAgICAgIHBhdGNoIT1wYXRjaGVzLmVuZCgpOyArK3BhdGNo
KQogICAgewogICAgICBjb25zdCB1bnNpZ25lZCBpbnQgbl9zdWJkaXZpc2lvbnMgPSBwYXRjaC0+
bl9zdWJkaXZpc2lvbnM7CgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7CiAgICAgICAgICBj
YXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxu
X3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAgb3V0IDw8ICgocGF0Y2gtPnZlcnRp
Y2VzWzFdKDApICogaSAvIG5fc3ViZGl2aXNpb25zKSArCiAgICAgICAgICAgICAgICAgICAgICAo
cGF0Y2gtPnZlcnRpY2VzWzBdKDApICogKG5fc3ViZGl2aXNpb25zLWkpIC8gbl9zdWJkaXZpc2lv
bnMpKQogICAgICAgICAgICAgICAgICA8PCAiIDAgMFxuIjsKICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICB9OwoKICAgICAgICAgIGNhc2UgMjoKICAgICAgICAgIHsKICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQogICAgICAg
ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBkb3VibGUgeF9mcmFjID0gaSAqIDEu
L25fc3ViZGl2aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9mcmFjID0g
aiAqIDEuL25fc3ViZGl2aXNpb25zOwoKICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKHBhdGNo
LT52ZXJ0aWNlc1sxXSAqIHhfZnJhYykgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAocGF0
Y2gtPnZlcnRpY2VzWzBdICogKDEteF9mcmFjKSkpICogKDEteV9mcmFjKSArCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgKChwYXRjaC0+dmVydGljZXNbMl0gKiB4X2ZyYWMpICsKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgKHBhdGNoLT52ZXJ0aWNlc1szXSAqICgxLXhfZnJhYykpKSAqIHlf
ZnJhYykKICAgICAgICAgICAgICAgICAgICAgIDw8ICIgMFxuIjsKICAgICAgICAgICAgICAgIH07
CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfTsKCiAgICAgICAgICBjYXNlIDM6CiAgICAg
ICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9u
cysxOyArK2kpCiAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2
aXNpb25zKzE7ICsraikKICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGs9MDsgazxu
X3N1YmRpdmlzaW9ucysxOyArK2spCiAgICAgICAgICAgICAgICAgIHsKCgoKCgoKCiAgICAgICAg
ICAgICAgICAgICAgY29uc3QgZG91YmxlIHhfZnJhYyA9IGkgKiAxLi9uX3N1YmRpdmlzaW9ucywK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeV9mcmFjID0gayAqIDEuL25fc3ViZGl2
aXNpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6X2ZyYWMgPSBqICogMS4v
bl9zdWJkaXZpc2lvbnM7CgoKCiAgICAgICAgICAgICAgICAgICAgb3V0IDw8ICgoKChwYXRjaC0+
dmVydGljZXNbMV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBh
dGNoLT52ZXJ0aWNlc1swXSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzJdICogeF9mcmFjKSArCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbM10gKiAoMS14X2ZyYWMp
KSkgKiB5X2ZyYWMpICogKDEtel9mcmFjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAo
KChwYXRjaC0+dmVydGljZXNbNV0gKiB4X2ZyYWMpICsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHBhdGNoLT52ZXJ0aWNlc1s0XSAqICgxLXhfZnJhYykpKSAqICgxLXlfZnJhYykgKwog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICgocGF0Y2gtPnZlcnRpY2VzWzZdICogeF9mcmFj
KSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYXRjaC0+dmVydGljZXNbN10gKiAo
MS14X2ZyYWMpKSkgKiB5X2ZyYWMpICogel9mcmFjKQogICAgICAgICAgICAgICAgICAgICAgICA8
PCBzdGQ6OmVuZGw7CiAgICAgICAgICAgICAgICAgIH07CgogICAgICAgICAgICBicmVhazsKICAg
ICAgICAgIH07CgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHsgfTsKICAgICAg
ICB9OwogICAgfTsKCgoKICBpZiAodHJ1ZSkKICAgIHsKICAgICAgb3V0IDw8ICJDRUxMUyAiIDw8
IG5fY2VsbHMgPDwgJyAnCiAgICAgICAgICA8PCBuX2NlbGxzKihHZW9tZXRyeUluZm88ZGltPjo6
dmVydGljZXNfcGVyX2NlbGwrMSkKICAgICAgICAgIDw8IHN0ZDo6ZW5kbDsKCgogICAgICB1bnNp
Z25lZCBpbnQgZmlyc3RfdmVydGV4X29mX3BhdGNoID0gMDsKCiAgICAgIGZvciAodHlwZW5hbWUg
c3RkOjp2ZWN0b3I8UGF0Y2g8ZGltLHNwYWNlZGltPiA+Ojpjb25zdF9pdGVyYXRvciBwYXRjaD1w
YXRjaGVzLmJlZ2luKCk7CiAgICAgICAgICAgcGF0Y2ghPXBhdGNoZXMuZW5kKCk7ICsrcGF0Y2gp
CiAgICAgICAgewogICAgICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNpb25zID0g
cGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAg
ICAgIHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAg
ICAgICAgICAgIG91dCA8PCAiMiAiCiAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJzdF92ZXJ0
ZXhfb2ZfcGF0Y2graSA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRl
eF9vZl9wYXRjaCtpKzEgPDwgc3RkOjplbmRsOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgIHsKICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9uczsgKytpKQog
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnM7
ICsraikKICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjQgIgogICAgICAgICAgICAgICAgICAg
ICAgICA8PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2graSoobl9zdWJkaXZpc2lvbnMrMSkraiA8PCAn
ICcKICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKyhpKzEp
KihuX3N1YmRpdmlzaW9ucysxKStqIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICA8PCBm
aXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkrMSkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSA8PCAnICcK
ICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoK2kqKG5fc3Vi
ZGl2aXNpb25zKzEpK2orMQogICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVuZGw7CiAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgICBjYXNl
IDM6CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0w
OyBpPG5fc3ViZGl2aXNpb25zOyArK2kpCiAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGo9MDsgajxuX3N1YmRpdmlzaW9uczsgKytqKQogICAgICAgICAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGs9MDsgazxuX3N1YmRpdmlzaW9uczsgKytrKQogICAgICAgICAgICAgICAg
ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBvdXQgPDwgIjggIgoKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSoobl9zdWJkaXZpc2lv
bnMrMSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrIDw8ICcgJwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMr
MSkraiApKihuX3N1YmRpdmlzaW9ucysxKStrIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPDwgZmlyc3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkr
aisxKSoobl9zdWJkaXZpc2lvbnMrMSkrayA8PCAnICcKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIDw8IGZpcnN0X3ZlcnRleF9vZl9wYXRjaCsoaSoobl9zdWJkaXZpc2lvbnMrMSkraisxICkq
KG5fc3ViZGl2aXNpb25zKzEpK2sgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8
PCBmaXJzdF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2ogKSoobl9zdWJk
aXZpc2lvbnMrMSkraysxIDw8ICcgJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgPDwgZmly
c3RfdmVydGV4X29mX3BhdGNoKygoaSsxKSoobl9zdWJkaXZpc2lvbnMrMSkraiApKihuX3N1YmRp
dmlzaW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz
dF92ZXJ0ZXhfb2ZfcGF0Y2grKChpKzEpKihuX3N1YmRpdmlzaW9ucysxKStqKzEpKihuX3N1YmRp
dmlzaW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBmaXJz
dF92ZXJ0ZXhfb2ZfcGF0Y2grKGkqKG5fc3ViZGl2aXNpb25zKzEpK2orMSApKihuX3N1YmRpdmlz
aW9ucysxKStrKzEgPDwgJyAnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8PCBzdGQ6OmVu
ZGw7CiAgICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgfTsKCiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICB7
IH07CiAgICAgICAgICAgIH07CgoKCgogICAgICAgICAgc3dpdGNoIChkaW0pCiAgICAgICAgICAg
IHsKICAgICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgICAgZmlyc3RfdmVydGV4
X29mX3BhdGNoICs9IG5fc3ViZGl2aXNpb25zKzE7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgY2FzZSAyOgogICAgICAgICAgICAgICAgICAgIGZpcnN0X3ZlcnRleF9v
Zl9wYXRjaCArPSAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSk7CiAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICAgIGZpcnN0
X3ZlcnRleF9vZl9wYXRjaCArPSAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSkgKgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobl9zdWJkaXZpc2lvbnMrMSk7
CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAg
ICAgICAgICAgICAgICB7IH07CiAgICAgICAgICAgIH07CiAgICAgICAgfTsKCgoKCiAgICAgIG91
dCA8PCAiQ0VMTF9UWVBFUyAiIDw8IG5fY2VsbHMgPDwgc3RkOjplbmRsOwogICAgICBmb3IgKHVu
c2lnbmVkIGludCBpPTA7IGk8bl9jZWxsczsgKytpKQogICAgICAgIHN3aXRjaCAoZGltKQogICAg
ICAgICAgewogICAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICAgIG91dCA8PCAiM1xu
IjsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgMjoKICAgICAgICAg
ICAgICAgICAgb3V0IDw8ICI5XG4iOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgY2FzZSAzOgogICAgICAgICAgICAgICAgICBvdXQgPDwgIjEyXG4iOwogICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgeyB9Owog
ICAgICAgICAgfTsKICAgIH07CgoKCgoKCgogIHRocmVhZF9tYW5hZ2VyLndhaXQgKCk7CgoKCgoK
CgogIG91dCA8PCAiUE9JTlRfREFUQSAiIDw8IG5fbm9kZXMKICAgICAgPDwgc3RkOjplbmRsOwog
IGZvciAodW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2Rh
dGFfc2V0KQogICAgewogICAgICBvdXQgPDwgIlNDQUxBUlMgIgogICAgICAgICAgPDwgZGF0YV9u
YW1lc1tkYXRhX3NldF0KICAgICAgICAgIDw8ICIgZG91YmxlIDEiCiAgICAgICAgICA8PCBzdGQ6
OmVuZGwKICAgICAgICAgIDw8ICJMT09LVVBfVEFCTEUgZGVmYXVsdCIKICAgICAgICAgIDw8IHN0
ZDo6ZW5kbDsKICAgICAgY29weShkYXRhX3ZlY3RvcnNbZGF0YV9zZXRdLmJlZ2luKCksCiAgICAg
ICAgICAgZGF0YV92ZWN0b3JzW2RhdGFfc2V0XS5lbmQoKSwKICAgICAgICAgICBzdGQ6Om9zdHJl
YW1faXRlcmF0b3I8ZG91YmxlPihvdXQsICIgIikpOwogICAgICBvdXQgPDwgc3RkOjplbmRsOwog
ICAgfTsKCgogIHsgaWYgKF9fYnVpbHRpbl9leHBlY3QoIShvdXQpLCBmYWxzZSkpIGRlYWxfSUlf
ZXhjZXB0aW9uczo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9v
dXRfYmFzZS5jYyIsIDM0NDksIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJvdXQiLCAiRXhjSU8oKSIs
IEV4Y0lPKCkpOyB9Owp9OwoKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9p
ZApEYXRhT3V0QmFzZTo6d3JpdGVfZ212X3Jlb3JkZXJfZGF0YV92ZWN0b3JzIChjb25zdCBzdGQ6
OnZlY3RvcjxQYXRjaDxkaW0sc3BhY2VkaW0+ID4gJnBhdGNoZXMsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlPDIsZG91YmxlPiAmZGF0YV92ZWN0b3Jz
KQp7CgoKCgoKCgogIGNvbnN0IHVuc2lnbmVkIGludCBuX2RhdGFfc2V0cyA9IHBhdGNoZXNbMF0u
ZGF0YS5uX3Jvd3MoKTsKCiAgeyB9OwoKCgogIHVuc2lnbmVkIGludCBuZXh0X3ZhbHVlID0gMDsK
ICBmb3IgKHR5cGVuYW1lIHN0ZDo6dmVjdG9yPFBhdGNoPGRpbSxzcGFjZWRpbT4gPjo6Y29uc3Rf
aXRlcmF0b3IgcGF0Y2g9cGF0Y2hlcy5iZWdpbigpOwogICAgICAgcGF0Y2ggIT0gcGF0Y2hlcy5l
bmQoKTsgKytwYXRjaCkKICAgIHsKICAgICAgY29uc3QgdW5zaWduZWQgaW50IG5fc3ViZGl2aXNp
b25zID0gcGF0Y2gtPm5fc3ViZGl2aXNpb25zOwoKICAgICAgeyB9OwoKICAgICAgeyB9OwojIDM0
OTAgInNvdXJjZS9kYXRhX291dF9iYXNlLmNjIgogICAgICBzd2l0Y2ggKGRpbSkKICAgICAgICB7
CiAgICAgICAgICBjYXNlIDE6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAodW5zaWduZWQg
aW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2ksICsrbmV4dF92YWx1ZSkKICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGludCBkYXRhX3NldD0wOyBkYXRhX3NldDxuX2RhdGFfc2V0czsg
KytkYXRhX3NldCkKICAgICAgICAgICAgICAgIGRhdGFfdmVjdG9yc1tkYXRhX3NldF1bbmV4dF92
YWx1ZV0gPSBwYXRjaC0+ZGF0YShkYXRhX3NldCxpKTsKCiAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgfTsKCiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGk9MDsgaTxuX3N1YmRpdmlzaW9ucysxOyArK2kpCiAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnQgaj0wOyBqPG5fc3ViZGl2aXNpb25zKzE7ICsraikKICAgICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgZGF0YV9zZXQ9MDsg
ZGF0YV9zZXQ8bl9kYXRhX3NldHM7ICsrZGF0YV9zZXQpCiAgICAgICAgICAgICAgICAgICAgZGF0
YV92ZWN0b3JzW2RhdGFfc2V0XVtuZXh0X3ZhbHVlXQogICAgICAgICAgICAgICAgICAgICAgPSBw
YXRjaC0+ZGF0YShkYXRhX3NldCxpKihuX3N1YmRpdmlzaW9ucysxKSArIGopOwogICAgICAgICAg
ICAgICAgICArK25leHRfdmFsdWU7CiAgICAgICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICB9OwoKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgIHsKICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpPG5fc3ViZGl2aXNpb25zKzE7ICsraSkKICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBqPTA7IGo8bl9zdWJkaXZpc2lvbnMrMTsgKytqKQog
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaz0wOyBrPG5fc3ViZGl2aXNpb25zKzE7
ICsraykKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0KQogICAg
ICAgICAgICAgICAgICAgICAgZGF0YV92ZWN0b3JzW2RhdGFfc2V0XVtuZXh0X3ZhbHVlXQogICAg
ICAgICAgICAgICAgICAgICAgICA9IHBhdGNoLT5kYXRhKGRhdGFfc2V0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChpKihuX3N1YmRpdmlzaW9ucysxKStqKSoobl9zdWJk
aXZpc2lvbnMrMSkrayk7CiAgICAgICAgICAgICAgICAgICAgKytuZXh0X3ZhbHVlOwogICAgICAg
ICAgICAgICAgICB9OwoKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9OwoKICAgICAgICAg
IGRlZmF1bHQ6CiAgICAgICAgICAgICAgICB7IH07CiAgICAgICAgfTsKICAgIH07CgogIGZvciAo
dW5zaWduZWQgaW50IGRhdGFfc2V0PTA7IGRhdGFfc2V0PG5fZGF0YV9zZXRzOyArK2RhdGFfc2V0
KQogICAgeyB9OwoKfTsKCgoKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9p
ZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX2R4IChzdGQ6Om9zdHJlYW0g
Jm91dCkgY29uc3QKewogIERhdGFPdXRCYXNlOjp3cml0ZV9keCAoZ2V0X3BhdGNoZXMoKSwgZ2V0
X2RhdGFzZXRfbmFtZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgIGR4X2ZsYWdzLCBvdXQp
Owp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRl
cmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGVfdWNkIChzdGQ6Om9zdHJlYW0gJm91dCkgY29uc3QK
ewogIERhdGFPdXRCYXNlOjp3cml0ZV91Y2QgKGdldF9wYXRjaGVzKCksIGdldF9kYXRhc2V0X25h
bWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdWNkX2ZsYWdzLCBvdXQpOwp9OwoKCgp0
ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGlt
LHNwYWNlZGltPjo6d3JpdGVfZ251cGxvdCAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0CnsKICBE
YXRhT3V0QmFzZTo6d3JpdGVfZ251cGxvdCAoZ2V0X3BhdGNoZXMoKSwgZ2V0X2RhdGFzZXRfbmFt
ZXMoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ251cGxvdF9mbGFncywgb3V0KTsK
fTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJm
YWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX3BvdnJheSAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0
CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfcG92cmF5IChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNl
dF9uYW1lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvdnJheV9mbGFncywgb3V0
KTsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50
ZXJmYWNlPGRpbSxzcGFjZWRpbT46OndyaXRlX2VwcyAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0
CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfZXBzIChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNldF9u
YW1lcygpLAogICAgICAgICAgICAgICAgICAgICAgICAgIGVwc19mbGFncywgb3V0KTsKfTsKCgoK
dGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRp
bSxzcGFjZWRpbT46OndyaXRlX2dtdiAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0CnsKICBEYXRh
T3V0QmFzZTo6d3JpdGVfZ212IChnZXRfcGF0Y2hlcygpLCBnZXRfZGF0YXNldF9uYW1lcygpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgIGdtdl9mbGFncywgb3V0KTsKfTsKCgoKdGVtcGxhdGUg
PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRp
bT46OndyaXRlX3RlY3Bsb3QgKHN0ZDo6b3N0cmVhbSAmb3V0KSBjb25zdAp7CiAgRGF0YU91dEJh
c2U6OndyaXRlX3RlY3Bsb3QgKGdldF9wYXRjaGVzKCksIGdldF9kYXRhc2V0X25hbWVzKCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlY3Bsb3RfZmxhZ3MsIG91dCk7Cn07CgoKCnRl
bXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0s
c3BhY2VkaW0+Ojp3cml0ZV90ZWNwbG90X2JpbmFyeSAoc3RkOjpvc3RyZWFtICZvdXQpIGNvbnN0
CnsKICBEYXRhT3V0QmFzZTo6d3JpdGVfdGVjcGxvdF9iaW5hcnkgKGdldF9wYXRjaGVzKCksIGdl
dF9kYXRhc2V0X25hbWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
ZWNwbG90X2ZsYWdzLCBvdXQpOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGlt
Pgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGVfdnRrIChzdGQ6Om9z
dHJlYW0gJm91dCkgY29uc3QKewogIERhdGFPdXRCYXNlOjp3cml0ZV92dGsgKGdldF9wYXRjaGVz
KCksIGdldF9kYXRhc2V0X25hbWVzKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdnRrX2Zs
YWdzLCBvdXQpOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkCkRh
dGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6d3JpdGUgKHN0ZDo6b3N0cmVhbSAmb3V0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBPdXRwdXRGb3JtYXQg
b3V0cHV0X2Zvcm1hdF8pIGNvbnN0CnsKICBPdXRwdXRGb3JtYXQgb3V0cHV0X2Zvcm1hdCA9IG91
dHB1dF9mb3JtYXRfOwogIGlmIChvdXRwdXRfZm9ybWF0ID09IGRlZmF1bHRfZm9ybWF0KQogICAg
b3V0cHV0X2Zvcm1hdCA9IGRlZmF1bHRfZm10OwoKICBzd2l0Y2ggKG91dHB1dF9mb3JtYXQpCiAg
ICB7CiAgICAgIGNhc2UgZHg6CiAgICAgICAgICAgIHdyaXRlX2R4IChvdXQpOwogICAgICAgICAg
ICBicmVhazsKCiAgICAgIGNhc2UgdWNkOgogICAgICAgICAgICB3cml0ZV91Y2QgKG91dCk7CiAg
ICAgICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSBnbnVwbG90OgogICAgICAgICAgICB3cml0ZV9n
bnVwbG90IChvdXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgcG92cmF5OgogICAg
ICAgICAgICB3cml0ZV9wb3ZyYXkgKG91dCk7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgY2Fz
ZSBlcHM6CiAgICAgICAgICAgIHdyaXRlX2VwcyhvdXQpOwogICAgICAgICAgICBicmVhazsKCiAg
ICAgIGNhc2UgZ212OgogICAgICAgICAgICB3cml0ZV9nbXYgKG91dCk7CiAgICAgICAgICAgIGJy
ZWFrOwoKICAgICAgY2FzZSB0ZWNwbG90OgogICAgICAgICAgICB3cml0ZV90ZWNwbG90IChvdXQp
OwogICAgICAgICAgICBicmVhazsKCiAgICAgIGNhc2UgdGVjcGxvdF9iaW5hcnk6CiAgICAgICAg
ICAgIHdyaXRlX3RlY3Bsb3RfYmluYXJ5IChvdXQpOwogICAgICAgICAgICBicmVhazsKCiAgICAg
IGNhc2UgdnRrOgogICAgICAgICAgICB3cml0ZV92dGsgKG91dCk7CiAgICAgICAgICAgIGJyZWFr
OwoKICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgeyB9OwogICAgfTsKfTsKCgoKdGVtcGxhdGUg
PGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRp
bT46OnNldF9kZWZhdWx0X2Zvcm1hdChjb25zdCBPdXRwdXRGb3JtYXQgZm10KQp7CiAgeyB9Owog
IGRlZmF1bHRfZm10ID0gZm10Owp9CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+
CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IERY
RmxhZ3MgJmZsYWdzKQp7CiAgZHhfZmxhZ3MgPSBmbGFnczsKfTsKCgoKdGVtcGxhdGUgPGludCBk
aW0sIGludCBzcGFjZWRpbT4Kdm9pZCBEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OnNl
dF9mbGFncyAoY29uc3QgVWNkRmxhZ3MgJmZsYWdzKQp7CiAgdWNkX2ZsYWdzID0gZmxhZ3M7Cn07
CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFj
ZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IEdudXBsb3RGbGFncyAmZmxhZ3MpCnsK
ICBnbnVwbG90X2ZsYWdzID0gZmxhZ3M7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3Bh
Y2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNv
bnN0IFBvdnJheUZsYWdzICZmbGFncykKewogIHBvdnJheV9mbGFncyA9IGZsYWdzOwp9OwoKCgp0
ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGlt
LHNwYWNlZGltPjo6c2V0X2ZsYWdzIChjb25zdCBFcHNGbGFncyAmZmxhZ3MpCnsKICBlcHNfZmxh
Z3MgPSBmbGFnczsKfTsKCgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4Kdm9pZCBE
YXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OnNldF9mbGFncyAoY29uc3QgR212RmxhZ3Mg
JmZsYWdzKQp7CiAgZ212X2ZsYWdzID0gZmxhZ3M7Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBp
bnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxh
Z3MgKGNvbnN0IFRlY3Bsb3RGbGFncyAmZmxhZ3MpCnsKICB0ZWNwbG90X2ZsYWdzID0gZmxhZ3M7
Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVy
ZmFjZTxkaW0sc3BhY2VkaW0+OjpzZXRfZmxhZ3MgKGNvbnN0IFZ0a0ZsYWdzICZmbGFncykKewog
IHZ0a19mbGFncyA9IGZsYWdzOwp9OwoKCgp0ZW1wbGF0ZSA8aW50IGRpbSwgaW50IHNwYWNlZGlt
PgpzdGQ6OnN0cmluZwpEYXRhT3V0SW50ZXJmYWNlPGRpbSxzcGFjZWRpbT46OmRlZmF1bHRfc3Vm
Zml4IChjb25zdCBPdXRwdXRGb3JtYXQgb3V0cHV0X2Zvcm1hdF8pIGNvbnN0CnsKICBPdXRwdXRG
b3JtYXQgb3V0cHV0X2Zvcm1hdCA9IG91dHB1dF9mb3JtYXRfOwogIGlmIChvdXRwdXRfZm9ybWF0
ID09IGRlZmF1bHRfZm9ybWF0KQogICAgb3V0cHV0X2Zvcm1hdCA9IGRlZmF1bHRfZm10OwoKICBz
d2l0Y2ggKG91dHB1dF9mb3JtYXQpCiAgICB7CiAgICAgIGNhc2UgZHg6CiAgICAgICAgICAgIHJl
dHVybiAiLmR4IjsKCiAgICAgIGNhc2UgdWNkOgogICAgICAgICAgICByZXR1cm4gIi5pbnAiOwoK
ICAgICAgY2FzZSBnbnVwbG90OgogICAgICAgICAgICByZXR1cm4gIi5nbnVwbG90IjsKCiAgICAg
IGNhc2UgcG92cmF5OgogICAgICAgICAgICByZXR1cm4gIi5wb3YiOwoKICAgICAgY2FzZSBlcHM6
CiAgICAgICAgICAgIHJldHVybiAiLmVwcyI7CgogICAgICBjYXNlIGdtdjoKICAgICAgICAgICAg
cmV0dXJuICIuZ212IjsKCiAgICAgIGNhc2UgdGVjcGxvdDoKICAgICAgICAgICAgcmV0dXJuICIu
ZGF0IjsKCiAgICAgIGNhc2UgdGVjcGxvdF9iaW5hcnk6CiAgICAgICAgICAgIHJldHVybiAiLnBs
dCI7CgogICAgICBjYXNlIHZ0azoKICAgICAgICAgICAgcmV0dXJuICIudnRrIjsKCiAgICAgIGRl
ZmF1bHQ6CiAgICAgICAgICAgIHsgfTsKICAgICAgICAgICAgcmV0dXJuICIiOwogICAgfTsKfTsK
CgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KdHlwZW5hbWUgRGF0YU91dEludGVy
ZmFjZTxkaW0sc3BhY2VkaW0+OjpPdXRwdXRGb3JtYXQKRGF0YU91dEludGVyZmFjZTxkaW0sc3Bh
Y2VkaW0+OjpwYXJzZV9vdXRwdXRfZm9ybWF0IChjb25zdCBzdGQ6OnN0cmluZyAmZm9ybWF0X25h
bWUpCnsKICBpZiAoZm9ybWF0X25hbWUgPT0gImR4IikKICAgIHJldHVybiBkeDsKCiAgaWYgKGZv
cm1hdF9uYW1lID09ICJ1Y2QiKQogICAgcmV0dXJuIHVjZDsKCiAgaWYgKGZvcm1hdF9uYW1lID09
ICJnbnVwbG90IikKICAgIHJldHVybiBnbnVwbG90OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInBv
dnJheSIpCiAgICByZXR1cm4gcG92cmF5OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gImVwcyIpCiAg
ICByZXR1cm4gZXBzOwoKICBpZiAoZm9ybWF0X25hbWUgPT0gImdtdiIpCiAgICByZXR1cm4gZ212
OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInRlY3Bsb3QiKQogICAgcmV0dXJuIHRlY3Bsb3Q7Cgog
IGlmIChmb3JtYXRfbmFtZSA9PSAidGVjcGxvdF9iaW5hcnkiKQogICAgcmV0dXJuIHRlY3Bsb3Rf
YmluYXJ5OwoKICBpZiAoZm9ybWF0X25hbWUgPT0gInZ0ayIpCiAgICByZXR1cm4gdnRrOwoKICB7
IGlmIChfX2J1aWx0aW5fZXhwZWN0KCEoZmFsc2UpLCBmYWxzZSkpIGRlYWxfSUlfZXhjZXB0aW9u
czo6aW50ZXJuYWxzOjogaXNzdWVfZXJyb3JfdGhyb3cgKCJzb3VyY2UvZGF0YV9vdXRfYmFzZS5j
YyIsIDM4MzAsIF9fUFJFVFRZX0ZVTkNUSU9OX18sICJmYWxzZSIsICJFeGNJbnZhbGlkU3RhdGUg
KCkiLCBFeGNJbnZhbGlkU3RhdGUgKCkpOyB9OwoKCiAgcmV0dXJuIE91dHB1dEZvcm1hdCgtMSk7
Cn07CgoKCnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnN0ZDo6c3RyaW5nIERhdGFP
dXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6Z2V0X291dHB1dF9mb3JtYXRfbmFtZXMgKCkKewog
IHJldHVybiAiZHh8dWNkfGdudXBsb3R8cG92cmF5fGVwc3xnbXZ8dGVjcGxvdHx2dGsiOwp9CgoK
CnRlbXBsYXRlIDxpbnQgZGltLCBpbnQgc3BhY2VkaW0+CnZvaWQgRGF0YU91dEludGVyZmFjZTxk
aW0sc3BhY2VkaW0+OjpkZWNsYXJlX3BhcmFtZXRlcnMgKFBhcmFtZXRlckhhbmRsZXIgJnBybSkK
ewogIHBybS5kZWNsYXJlX2VudHJ5ICgiT3V0cHV0IGZvcm1hdCIsICJnbnVwbG90IiwKICAgICAg
ICAgICAgICAgICAgICAgUGF0dGVybnM6OlNlbGVjdGlvbiAoZ2V0X291dHB1dF9mb3JtYXRfbmFt
ZXMgKCkpKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJEWCBvdXRwdXQgcGFyYW1ldGVycyIp
OwogIERYRmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2Vj
dGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJVQ0Qgb3V0cHV0IHBhcmFtZXRlcnMi
KTsKICBVY2RGbGFnczo6ZGVjbGFyZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz
ZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIkdudXBsb3Qgb3V0cHV0IHBhcmFt
ZXRlcnMiKTsKICBHbnVwbG90RmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAocHJtKTsKICBwcm0u
bGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJQb3ZyYXkgb3V0
cHV0IHBhcmFtZXRlcnMiKTsKICBQb3ZyYXlGbGFnczo6ZGVjbGFyZV9wYXJhbWV0ZXJzIChwcm0p
OwogIHBybS5sZWF2ZV9zdWJzZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIkVw
cyBvdXRwdXQgcGFyYW1ldGVycyIpOwogIEVwc0ZsYWdzOjpkZWNsYXJlX3BhcmFtZXRlcnMgKHBy
bSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRlcl9zdWJzZWN0aW9uICgi
R212IG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgR212RmxhZ3M6OmRlY2xhcmVfcGFyYW1ldGVycyAo
cHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24g
KCJUZWNwbG90IG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgVGVjcGxvdEZsYWdzOjpkZWNsYXJlX3Bh
cmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRlcl9z
dWJzZWN0aW9uICgiVnRrIG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgVnRrRmxhZ3M6OmRlY2xhcmVf
cGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKfQoKCgp0ZW1wbGF0
ZSA8aW50IGRpbSwgaW50IHNwYWNlZGltPgp2b2lkIERhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNl
ZGltPjo6cGFyc2VfcGFyYW1ldGVycyAoUGFyYW1ldGVySGFuZGxlciAmcHJtKQp7CiAgY29uc3Qg
c3RkOjpzdHJpbmcmIG91dHB1dF9uYW1lID0gcHJtLmdldCAoIk91dHB1dCBmb3JtYXQiKTsKICBk
ZWZhdWx0X2ZtdCA9IHBhcnNlX291dHB1dF9mb3JtYXQgKG91dHB1dF9uYW1lKTsKCiAgcHJtLmVu
dGVyX3N1YnNlY3Rpb24gKCJEWCBvdXRwdXQgcGFyYW1ldGVycyIpOwogIGR4X2ZsYWdzLnBhcnNl
X3BhcmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRl
cl9zdWJzZWN0aW9uICgiVUNEIG91dHB1dCBwYXJhbWV0ZXJzIik7CiAgdWNkX2ZsYWdzLnBhcnNl
X3BhcmFtZXRlcnMgKHBybSk7CiAgcHJtLmxlYXZlX3N1YnNlY3Rpb24gKCk7CgogIHBybS5lbnRl
cl9zdWJzZWN0aW9uICgiR251cGxvdCBvdXRwdXQgcGFyYW1ldGVycyIpOwogIGdudXBsb3RfZmxh
Z3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAoKTsKCiAg
cHJtLmVudGVyX3N1YnNlY3Rpb24gKCJQb3ZyYXkgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBwb3Zy
YXlfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo
KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJFcHMgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBl
cHNfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo
KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJHbXYgb3V0cHV0IHBhcmFtZXRlcnMiKTsKICBn
bXZfZmxhZ3MucGFyc2VfcGFyYW1ldGVycyAocHJtKTsKICBwcm0ubGVhdmVfc3Vic2VjdGlvbiAo
KTsKCiAgcHJtLmVudGVyX3N1YnNlY3Rpb24gKCJUZWNwbG90IG91dHB1dCBwYXJhbWV0ZXJzIik7
CiAgdGVjcGxvdF9mbGFncy5wYXJzZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz
ZWN0aW9uICgpOwoKICBwcm0uZW50ZXJfc3Vic2VjdGlvbiAoIlZ0ayBvdXRwdXQgcGFyYW1ldGVy
cyIpOwogIHZ0a19mbGFncy5wYXJzZV9wYXJhbWV0ZXJzIChwcm0pOwogIHBybS5sZWF2ZV9zdWJz
ZWN0aW9uICgpOwp9CgoKdGVtcGxhdGUgPGludCBkaW0sIGludCBzcGFjZWRpbT4KdW5zaWduZWQg
aW50CkRhdGFPdXRJbnRlcmZhY2U8ZGltLHNwYWNlZGltPjo6bWVtb3J5X2NvbnN1bXB0aW9uICgp
IGNvbnN0CnsKICByZXR1cm4gKHNpemVvZiAoZGVmYXVsdF9mbXQpICsKICAgICAgICAgIE1lbW9y
eUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKGR4X2ZsYWdzKSArCiAgICAgICAgICBN
ZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1bXB0aW9uICh1Y2RfZmxhZ3MpICsKICAgICAg
ICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKGdudXBsb3RfZmxhZ3Mp
ICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlfY29uc3VtcHRpb24gKHBvdnJh
eV9mbGFncykgKwogICAgICAgICAgTWVtb3J5Q29uc3VtcHRpb246Om1lbW9yeV9jb25zdW1wdGlv
biAoZXBzX2ZsYWdzKSArCiAgICAgICAgICBNZW1vcnlDb25zdW1wdGlvbjo6bWVtb3J5X2NvbnN1
bXB0aW9uIChnbXZfZmxhZ3MpICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9uOjptZW1vcnlf
Y29uc3VtcHRpb24gKHRlY3Bsb3RfZmxhZ3MpICsKICAgICAgICAgIE1lbW9yeUNvbnN1bXB0aW9u
OjptZW1vcnlfY29uc3VtcHRpb24gKHZ0a19mbGFncykpOwp9OwoKCgoKCgp0ZW1wbGF0ZSBjbGFz
cyBEYXRhT3V0SW50ZXJmYWNlPDQsND47CnRlbXBsYXRlIGNsYXNzIERhdGFPdXRCYXNlOjpQYXRj
aDw0LCA0PjsKCgoKdGVtcGxhdGUgY2xhc3MgRGF0YU91dEludGVyZmFjZTw0IC0xLDQ+Owp0ZW1w
bGF0ZSBjbGFzcyBEYXRhT3V0QmFzZTo6UGF0Y2g8NCAtMSwgND47Cg==


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2002-10-29 21:06 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-10-29 13:06 optimization/8392: [-fnew-ra] SegFault in bangerth

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).