public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* c++/5007: binderfirst<> not constructable if second arg is const reference + ice
@ 2001-12-04  3:36 a.metselaar
  0 siblings, 0 replies; 3+ messages in thread
From: a.metselaar @ 2001-12-04  3:36 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5007
>Category:       c++
>Synopsis:       binderfirst<> not constructable if second arg is const reference + ice
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          ice-on-illegal-code
>Submitter-Id:   net
>Arrival-Date:   Tue Dec 04 03:36:00 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Arnold Metselaar
>Release:        unknown-1.0
>Organization:
>Environment:
Linux 2.2.14 #1 Sat Mar 25 00:45:35 GMT 2000 i686 unknown 
>Description:
instantiation of `binder1st<mem_fun1_t<void,
unary_functor<const int &,void>,const int &> >' fails and
provokes internal compiler error.

transcript:

metselaa@utmws217:~/klad > g++ -Wall testun.ii
/usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >':
../include/sf_mult/sf_func.h:15:   instantiated from `unary_functor<const int &,void>::func()'
testun.cpp:13:   instantiated from here
/usr/include/g++/stl_function.h:198: forming reference to reference type `const
int &const'
/usr/include/g++/stl_function.h:198: `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)' must be a nonstatic member function
/usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)':
/usr/include/g++/stl_algo.h:83:   instantiated from `for_each<int *, binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> > >(int *, int *, binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >)'
testun.cpp:13:   instantiated from here
/usr/include/g++/stl_function.h:198: `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)' must be a nonstatic member function
/usr/include/g++/stl_function.h: In function `{error} binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >::operator ()(...)':
/usr/include/g++/stl_function.h:198: Internal compiler error in `layout_decl', at stor-layout.c:274 
>How-To-Repeat:
g++ testun.ii
>Fix:
unknown
>Release-Note:
>Audit-Trail:
>Unformatted:
----gnatsweb-attachment----
Content-Type: application/octet-stream; name="testun.ii"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="testun.ii"

IyAxICJ0ZXN0dW4uY3BwIgojIDEgIi4uL2luY2x1ZGUvc2ZfbXVsdC9zZl9mdW5jLmgiIDEKIAog
CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAxIDMKIAoKCgoKCgoKCgoKCgoK
CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMSAzCiAKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAog
CiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCiAKIAogCgoKIAogCiAK
IAogCiAKIAogCiAKIAogCgoKIAoKIAogCiAKIAogCiAKIAoKCgoKCgoKCiMgMTQ4ICIvdXNyL2lu
Y2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcu
aCIgMSAzCiAKCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKIAoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK
IAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKIAoK
CgogCgoKCgoKCgogCiMgMTM4ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwoKCiAKCgoKCgoK
CgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAxOTYgIi91c3IvaW5jbHVk
ZS9mZWF0dXJlcy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCiAK
CgoKCgoKCgogCgoKCgogCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgogCgoKCgogCgoKCgoKIAoKCgoKCgoKCiAKCgoKCiMgNzEgIi91c3Iv
aW5jbHVkZS9zeXMvY2RlZnMuaCIgMwoKCiAKCgoKCgoKCiAKCgoKIyAxMDMgIi91c3IvaW5jbHVk
ZS9zeXMvY2RlZnMuaCIgMwoKCgogCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCgoK
IAoKCgoKCgoKCiAKCgoKCgoKCgoKIAoKCgoKCgoKIyAyNTAgIi91c3IvaW5jbHVkZS9mZWF0dXJl
cy5oIiAyIDMKCgogCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgoKCgoKCgojIDEgIi91c3IvaW5jbHVk
ZS9nbnUvc3R1YnMuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgojIDI3OCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwoKCgoKIyAyNiAiL3Vzci9pbmNs
dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKIyAxOSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
IAoKCiAKCgoKCgogCgoKIyA2MSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKIAoKIAoKIyAxMzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoK
CgoKIAoKIyAyNzEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKIyAyODMgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4
LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCiAK
dHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9f
dV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBs
b25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBp
bnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFk
X3Q7CiMgNDggIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKCnR5cGVkZWYgc2lnbmVkIGNo
YXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2ln
bmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWlu
dDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50
IF9fdWludDMyX3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQg
X19pbnQ2NF90OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBf
X3VpbnQ2NF90OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVh
ZF90IF9fZGV2X3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX3VpZF90OwkJIAp0eXBlZGVmIF9fdV9p
bnQgX19naWRfdDsJCSAKdHlwZWRlZiBfX3VfbG9uZyBfX2lub190OwkJIAp0eXBlZGVmIF9fdV9p
bnQgX19tb2RlX3Q7CQkgCnR5cGVkZWYgX191X2ludCBfX25saW5rX3Q7IAkJIAp0eXBlZGVmIGxv
bmcgaW50IF9fb2ZmX3Q7CQkgCnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CQkgCnR5cGVkZWYg
aW50IF9fcGlkX3Q7CQkJIAp0eXBlZGVmIGludCBfX3NzaXplX3Q7CQkJIAp0eXBlZGVmIF9fdV9s
b25nIF9fcmxpbV90OwkJIAp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRfdDsJCSAKdHlwZWRl
ZiBfX3VfaW50IF9faWRfdDsJCQkgCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsy
XTsKICB9IF9fZnNpZF90OwkJCQkgCgogCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsJCQkgCnR5cGVk
ZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxv
bmcgaW50IF9fc3dibGtfdDsJCSAKDAp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCiAKdHlw
ZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX2ZkX21hc2s7CgogCgoKIAoKCgoKIAp0eXBlZGVmIHN0
cnVjdAogIHsKICAgICAKCgoKCgogICAgX19mZF9tYXNrIF9fZmRzX2JpdHNbMTAyNCAgLyAoOCAq
IHNpemVvZiAoX19mZF9tYXNrKSkgXTsKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19r
ZXlfdDsKCiAKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKIAoKIAp0
eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90
OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9f
ZnNibGtjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBf
X3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKIAp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsK
CiAKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgogCnR5cGVkZWYgbG9uZyBpbnQgX190X3Nj
YWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgogCnR5cGVk
ZWYgaW50IF9faW50cHRyX3Q7CgoKIAoKCgoKCiMgOSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5o
IiAyIDMKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9p
bmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoK
CiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCiMgMTMx
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYu
aCIgMwoKCiAKCiAKCgojIDE4OCAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45
NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoKCgogCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgp0eXBlZGVmIHVuc2lnbmVkIGludCAgd2ludF90OwoKCgoKIAoKIAoKIyAzMTcgIi91c3Iv
bGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoK
CgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMTQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIg
MiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IF9HX2ludDE2X3QgX19hdHRyaWJ1
dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgaW50IF9HX2ludDMyX3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3Vp
bnQxNl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2ln
bmVkIGludCBfR191aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoKCiMgMTUxICIvdXNy
L2luY2x1ZGUvZysrL3N0bF9jb25maWcuaCIgMiAzCgoKCgoKCgoKCgoKCgoKCgoKCiAgICAgIAoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIyAyMzQgIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2NvbmZpZy5oIiAzCgoKIyAyNDggIi91c3IvaW5jbHVkZS9nKysvc3RsX2NvbmZp
Zy5oIiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIAoKCgoKCgoK
CgoKCgoKCgoKCgogCiAKIyAzMTYgIi91c3IvaW5jbHVkZS9nKysvc3RsX2NvbmZpZy5oIiAzCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAogCiAKIyAxOCAiL3Vzci9pbmNs
dWRlL2crKy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwoKCgoKCgogCgoKCgoKCgogCgogCgoK
CgogCgoKIAoKCgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAK
CgoKCgogCgogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKCgoK
CgoKCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2OSAiL3Vzci9s
aWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgoK
CgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51
eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoKIAoKCgoKCgoK
IyAxOSAiL3Vzci9pbmNsdWRlL2crKy9mdW5jdGlvbmFsIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRl
L2crKy9zdGxfZnVuY3Rpb24uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoK
CgoKIAoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+CnN0cnVjdCB1bmFyeV9m
dW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnIGFyZ3VtZW50X3R5cGU7CiAgdHlwZWRlZiBfUmVzdWx0
IHJlc3VsdF90eXBlOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMiwgY2xh
c3MgX1Jlc3VsdD4Kc3RydWN0IGJpbmFyeV9mdW5jdGlvbiB7CiAgdHlwZWRlZiBfQXJnMSBmaXJz
dF9hcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX0FyZzIgc2Vjb25kX2FyZ3VtZW50X3R5cGU7CiAg
dHlwZWRlZiBfUmVzdWx0IHJlc3VsdF90eXBlOwp9OyAgICAgIAoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IHBsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAg
X1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJl
dHVybiBfX3ggKyBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtaW51cyA6
IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsKICBfVHAgb3BlcmF0b3IoKShj
b25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCAtIF9feTsg
fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmlu
YXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBf
X3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCnRlbXBs
YXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBkaXZpZGVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAm
IF9feSkgY29uc3QgeyByZXR1cm4gX194IC8gX195OyB9Cn07CgogCgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0dXJuIF9U
cCgwKTsKfQp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQo
bXVsdGlwbGllczxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiAK
ewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3Qg
eyByZXR1cm4gX194ICUgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbmVn
YXRlIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IAp7CiAgX1RwIG9wZXJhdG9yKCko
Y29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKCnRlbXBsYXRlIDxjbGFz
cyBfVHA+CnN0cnVjdCBlcXVhbF90byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi
b29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBub3RfZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4g
CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25z
dCB7IHJldHVybiBfX3ggIT0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3Qg
Z3JlYXRlciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wg
b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJu
IF9feCA+IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxlc3MgOiBwdWJs
aWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4gCnsKICBib29sIG9wZXJhdG9yKCkoY29u
c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0K
fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJp
bmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1Rw
JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVu
Y3Rpb248X1RwLF9UcCxib29sPiAKewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwg
Y29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA8PSBfX3k7IH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX2FuZCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248
X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBf
VHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYmIF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9UcD4Kc3RydWN0IGxvZ2ljYWxfb3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAs
Ym9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp
IGNvbnN0IHsgcmV0dXJuIF9feCB8fCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0
cnVjdCBsb2dpY2FsX25vdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJv
b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwoK
dGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIHVuYXJ5X25lZ2F0ZQogIDogcHVibGlj
IHVuYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUsIGJvb2w+
IHsKcHJvdGVjdGVkOgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IHVu
YXJ5X25lZ2F0ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9v
bCBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmFyZ3VtZW50X3R5cGUmIF9f
eCkgY29uc3QgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNs
YXNzIF9QcmVkaWNhdGU+CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDEoY29u
c3QgX1ByZWRpY2F0ZSYgX19wcmVkKQp7CiAgcmV0dXJuIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRl
PihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gCmNsYXNzIGJpbmFyeV9u
ZWdhdGUgCiAgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZp
cnN0X2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9Q
cmVkaWNhdGU6OnNlY29uZF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICBib29sPiB7CnByb3RlY3RlZDoKICBfUHJlZGljYXRlIF9NX3ByZWQ7CnB1YmxpYzoKICBleHBs
aWNpdCBiaW5hcnlfbmVnYXRlKGNvbnN0IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkg
e30KICBib29sIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX194LCAKICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRp
Y2F0ZTo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9N
X3ByZWQoX194LCBfX3kpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5s
aW5lIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4gCm5vdDIoY29uc3QgX1ByZWRpY2F0ZSYgX19w
cmVkKQp7CiAgcmV0dXJuIGJpbmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9PcGVyYXRpb24+IApjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4g
ewpwcm90ZWN0ZWQ6CiAgX09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJz
dF9hcmd1bWVudF90eXBlIHZhbHVlOwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRp
b24mIF9feCwKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJn
dW1lbnRfdHlwZSYgX195KQogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFt
ZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09w
ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w
KHZhbHVlLCBfX3gpOyAKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3Mg
X1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+IApiaW5kMXN0KGNvbnN0IF9PcGVyYXRp
b24mIF9fb3BlciwgY29uc3QgX1RwJiBfX3gpIAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0
aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIF9BcmcxX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjFzdDxf
T3BlcmF0aW9uPihfX29wZXIsIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
T3BlcmF0aW9uPiAKY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlw
ZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAg
X09wZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlw
ZSB2YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAg
ICAgICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBf
X3kpIAogICAgICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9u
OjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmly
c3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gb3AoX194LCB2YWx1ZSk7
IAogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uLCBjbGFzcyBfVHA+CmlubGluZSBi
aW5kZXIybmQ8X09wZXJhdGlvbj4gCmJpbmQybmQoY29uc3QgX09wZXJhdGlvbiYgX19vcGVyLCBj
b25zdCBfVHAmIF9feCkgCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9h
cmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJuZDxfT3BlcmF0aW9uPihf
X29wZXIsIF9BcmcyX3R5cGUoX194KSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9u
MSwgY2xhc3MgX09wZXJhdGlvbjI+CmNsYXNzIHVuYXJ5X2NvbXBvc2UKICA6IHB1YmxpYyB1bmFy
eV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGU+IAp7CnBy
b3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfX29wMTsKICBfT3BlcmF0aW9uMiBfX29wMjsKcHVibGlj
OgogIHVuYXJ5X2NvbXBvc2UoY29uc3QgX09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlv
bjImIF9feSkgCiAgICA6IF9fb3AxKF9feCksIF9fb3AyKF9feSkge30KICB0eXBlbmFtZSBfT3Bl
cmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRp
b24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX29wMShfX29wMihf
X3gpKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRp
b24yPgppbmxpbmUgdW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMj4gCmNvbXBv
c2UxKGNvbnN0IF9PcGVyYXRpb24xJiBfX29wMSwgY29uc3QgX09wZXJhdGlvbjImIF9fb3AyKQp7
CiAgcmV0dXJuIHVuYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsX09wZXJhdGlvbjI+KF9fb3AxLCBf
X29wMik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIs
IGNsYXNzIF9PcGVyYXRpb24zPgpjbGFzcyBiaW5hcnlfY29tcG9zZQogIDogcHVibGljIHVuYXJ5
X2Z1bmN0aW9uPHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZT4gewpwcm90
ZWN0ZWQ6CiAgX09wZXJhdGlvbjEgX01fb3AxOwogIF9PcGVyYXRpb24yIF9NX29wMjsKICBfT3Bl
cmF0aW9uMyBfTV9vcDM7CnB1YmxpYzoKICBiaW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9u
MSYgX194LCBjb25zdCBfT3BlcmF0aW9uMiYgX195LCAKICAgICAgICAgICAgICAgICBjb25zdCBf
T3BlcmF0aW9uMyYgX196KSAKICAgIDogX01fb3AxKF9feCksIF9NX29wMihfX3kpLCBfTV9vcDMo
X196KSB7IH0KICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigp
KGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsK
ICAgIHJldHVybiBfTV9vcDEoX01fb3AyKF9feCksIF9NX29wMyhfX3gpKTsKICB9Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0
aW9uMz4KaW5saW5lIGJpbmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLCBfT3BlcmF0aW9uMiwgX09w
ZXJhdGlvbjM+IApjb21wb3NlMihjb25zdCBfT3BlcmF0aW9uMSYgX19vcDEsIGNvbnN0IF9PcGVy
YXRpb24yJiBfX29wMiwgCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX29wMykKewogIHJl
dHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0aW9uMz4K
ICAgIChfX29wMSwgX19vcDIsIF9fb3AzKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNz
IF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9NX3B0ciko
X0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBleHBsaWNp
dCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6IF9NX3B0
cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJldHVybiBf
TV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1bHQ+Cmlu
bGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9mdW4oX1Jl
c3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbjxf
QXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9Bcmcy
LCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6IAogIHB1
YmxpYyBiaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAg
ICBfUmVzdWx0ICgqX01fcHRyKShfQXJnMSwgX0FyZzIpOwpwdWJsaWM6CiAgICBwb2ludGVyX3Rv
X2JpbmFyeV9mdW5jdGlvbigpIHt9CiAgICBleHBsaWNpdCBwb2ludGVyX3RvX2JpbmFyeV9mdW5j
dGlvbihfUmVzdWx0ICgqX194KShfQXJnMSwgX0FyZzIpKSAKICAgICAgOiBfTV9wdHIoX194KSB7
fQogICAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcxIF9feCwgX0FyZzIgX195KSBjb25zdCB7CiAg
ICAgIHJldHVybiBfTV9wdHIoX194LCBfX3kpOwogICAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9B
cmcxLCBjbGFzcyBfQXJnMiwgY2xhc3MgX1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fYmluYXJ5
X2Z1bmN0aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+IApwdHJfZnVuKF9SZXN1bHQgKCpfX3gpKF9B
cmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEs
X0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0lk
ZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBjb25zdCBfVHAmIG9w
ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4gc3RydWN0IGlkZW50aXR5IDogcHVibGljIF9JZGVudGl0eTxfVHA+IHt9
OwoKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVu
YXJ5X2Z1bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIGNvbnN0
IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gp
IGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9Q
YWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlw
ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgY29uc3QgdHlwZW5hbWUgX1BhaXI6OnNlY29u
ZF90eXBlJiBvcGVyYXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf
X3guc2Vjb25kOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUGFpcj4gc3RydWN0IHNlbGVjdDFz
dCA6IHB1YmxpYyBfU2VsZWN0MXN0PF9QYWlyPiB7fTsKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBz
dHJ1Y3Qgc2VsZWN0Mm5kIDogcHVibGljIF9TZWxlY3QybmQ8X1BhaXI+IHt9OwoKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3Qxc3QgOiBwdWJsaWMg
YmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzE+IHsKICBfQXJnMSBvcGVyYXRvcigp
KGNvbnN0IF9BcmcxJiBfX3gsIGNvbnN0IF9BcmcyJikgY29uc3QgeyByZXR1cm4gX194OyB9Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPgpzdHJ1Y3QgX1Byb2plY3QybmQg
OiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX0FyZzI+IHsKICBfQXJnMiBv
cGVyYXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImIF9feSkgY29uc3QgeyByZXR1cm4g
X195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyPiAKc3RydWN0IHBy
b2plY3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRl
IDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Q
cm9qZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3Vs
dD4Kc3RydWN0IGNvbnN0YW50X3ZvaWRfZnVuCnsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5
cGU7CiAgcmVzdWx0X3R5cGUgX192YWw7CiAgY29uc3RhbnRfdm9pZF9mdW4oY29uc3QgcmVzdWx0
X3R5cGUmIF9fdikgOiBfX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9y
KCkoKSBjb25zdCB7IHJldHVybiBfX3ZhbDsgfQp9OyAgCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1
bHQsIGNsYXNzIF9Bcmd1bWVudCA9IF9SZXN1bHQ+CgoKCnN0cnVjdCBjb25zdGFudF91bmFyeV9m
dW4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X0FyZ3VtZW50LCBfUmVzdWx0PiB7CiAgX1Jlc3Vs
dCBfTV92YWw7CiAgY29uc3RhbnRfdW5hcnlfZnVuKGNvbnN0IF9SZXN1bHQmIF9fdikgOiBfTV92
YWwoX192KSB7fQogIGNvbnN0IF9SZXN1bHQmIG9wZXJhdG9yKCkoY29uc3QgX0FyZ3VtZW50Jikg
Y29uc3QgeyByZXR1cm4gX01fdmFsOyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQsIGNs
YXNzIF9BcmcxID0gX1Jlc3VsdCwgY2xhc3MgX0FyZzIgPSBfQXJnMT4KCgoKc3RydWN0IGNvbnN0
YW50X2JpbmFyeV9mdW4gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9BcmcxLCBfQXJnMiwgX1Jl
c3VsdD4gewogIF9SZXN1bHQgX01fdmFsOwogIGNvbnN0YW50X2JpbmFyeV9mdW4oY29uc3QgX1Jl
c3VsdCYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgX1Jlc3VsdCYgb3BlcmF0b3IoKShj
b25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJikgY29uc3QgewogICAgcmV0dXJuIF9NX3ZhbDsKICB9
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50X3ZvaWRfZnVuPF9S
ZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJldHVybiBjb25zdGFu
dF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0Pgpp
bmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29uc3RhbnQxKGNvbnN0
IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LF9S
ZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CmlubGluZSBjb25zdGFu
dF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0PiAKY29uc3RhbnQyKGNvbnN0IF9S
ZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCxfUmVz
dWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKIAogCmNsYXNzIHN1YnRyYWN0aXZlX3JuZyA6IHB1Ymxp
YyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpwcml2YXRlOgog
IHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsKICBzaXplX3Qg
X01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5zaWduZWQgaW50
IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1OwogICAgX01f
aW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9pbmRleDFdID0g
X01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICByZXR1cm4gX01f
dGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemUodW5z
aWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsKICAgIF9NX3Rh
YmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9IDA7IF9faSA8
IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSArIDEpICUgNTUp
IC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sgPSBfX3NlZWQg
LSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAgICBmb3IgKGlu
dCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZvciAoX19pID0g
MDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0gX01fdGFibGVb
X19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAgX01faW5kZXgx
ID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5nKHVuc2lnbmVk
IGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJhY3RpdmVfcm5n
KCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CgoKIAoKIAogCiAKIAogCiAKIAoK
IAogCiAKIAogCgogCiAKIAogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpj
bGFzcyBtZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1Ymxp
YzoKICBleHBsaWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYp
IHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01f
ZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1fZnVuX3QgOiBwdWJsaWMgdW5hcnlf
ZnVuY3Rpb248Y29uc3QgX1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1f
ZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsg
fQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNs
YXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9m
dW5jdGlvbjxfVHAsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl9yZWZfdChfUmV0
IChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1RwJiBf
X3IpIGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29u
c3RfbWVtX2Z1bl9yZWZfdCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsX1JldD4gewpwdWJs
aWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdChfUmV0IChfVHA6OipfX3BmKSgpIGNv
bnN0KSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNv
bnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m
KSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy
Zz4KY2xhc3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9S
ZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1Rw
OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFz
cyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxj
b25zdCBfVHAqLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bjFf
dChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QKICAgIHsgcmV0dXJuIChf
X3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZykgY29u
c3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBtZW1fZnVuMV9yZWZfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4g
ewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0Fy
ZykpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAmIF9fciwgX0FyZyBfX3gp
IGNvbnN0IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6
OipfTV9mKShfQXJnKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNz
IF9Bcmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlv
bjxfVHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZf
dChfUmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv
cGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4q
X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9
OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1
YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9m
dW5fdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9y
KCkoX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf
VHA6OipfTV9mKSgpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1
bl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7
CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBj
b25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBj
b25zdCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBj
b25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Q8dm9pZCwg
X1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGlj
aXQgbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpKSA6IF9NX2YoX19wZikge30KICB2
b2lkIG9wZXJhdG9yKCkoX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRl
OgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBj
b25zdF9tZW1fZnVuX3JlZl90PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1Rw
LHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3Qodm9pZCAoX1Rw
OjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0
IF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6
OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh
c3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf
VHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6
OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19w
LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg
KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K
Y2xhc3MgY29uc3RfbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IAogIDogcHVibGljIGJpbmFy
eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u
c3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp
IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAo
X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv
bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFf
cmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0Fy
Zyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6Oipf
X3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCYgX19yLCBf
QXJnIF9feCkgY29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1Rw
OjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFz
cyBjb25zdF9tZW1fZnVuMV9yZWZfdDx2b2lkLCBfVHAsIF9Bcmc+CiAgOiBwdWJsaWMgYmluYXJ5
X2Z1bmN0aW9uPF9UcCxfQXJnLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9m
dW4xX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpIGNvbnN0KSA6IF9NX2YoX19wZikge30K
ICB2b2lkIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IsIF9BcmcgX194KSBjb25zdCB7IChfX3Iu
Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6OipfTV9mKShfQXJnKSBjb25zdDsK
fTsKCgoKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1l
bV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKCkpCiAgeyByZXR1cm4g
bWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3Mg
X1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6
Kl9fZikoKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVuX3JlZl90
PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChfVHA6OipfX2YpKCkpIAogIHsgcmV0dXJuIG1l
bV9mdW5fcmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz
cyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihf
UmV0IChfVHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxf
UmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6
OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv
bnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9B
cmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19m
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5l
IG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9f
ZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsg
fQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNv
bnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxf
VHAsX0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3Mg
X0FyZz4KaW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjEoX1JldCAoX1Rw
OjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+KF9fZik7
IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmlubGluZSBj
b25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9SZXQgKF9UcDo6Kl9fZiko
X0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPihf
X2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgppbmxp
bmUgbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bjFfcmVmKF9SZXQgKF9UcDo6
Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19m
KTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5l
IGNvbnN0X21lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW4xX3JlZihfUmV0IChf
VHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90PF9S
ZXQsX1RwLF9Bcmc+KF9fZik7IH0KCiAKCgoKIAogCiAKIyAyMCAiL3Vzci9pbmNsdWRlL2crKy9m
dW5jdGlvbmFsIiAyIDMKCgoKCiAKIAogCiMgNiAiLi4vaW5jbHVkZS9zZl9tdWx0L3NmX2Z1bmMu
aCIgMgoKCnRlbXBsYXRlIDxjbGFzcyBBcmcsIGNsYXNzIFJlcz4gCnN0cnVjdCB1bmFyeV9mdW5j
dG9yIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPEFyZyxSZXM+CnsKICB2aXJ0dWFsIH51bmFyeV9m
dW5jdG9yKCkge30KICB2aXJ0dWFsIFJlcyBvcGVyYXRvcigpIChBcmcgeCkgPTA7CiAgYmluZGVy
MXN0PG1lbV9mdW4xX3Q8UmVzLCB1bmFyeV9mdW5jdG9yPEFyZyxSZXM+LCBBcmc+ID4gCiAgZnVu
YygpCiAgeyByZXR1cm4gYmluZDFzdChtZW1fZnVuKCZ1bmFyeV9mdW5jdG9yPEFyZyxSZXM+Ojpv
cGVyYXRvcigpKSx0aGlzKTsgfQp9IDsKCnRlbXBsYXRlIDxjbGFzcyBBcmcxLCBjbGFzcyBBcmcy
LCBjbGFzcyBSZXM+IApzdHJ1Y3QgYmluYXJ5X2Z1bmN0b3IgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0
aW9uPEFyZzEsQXJnMixSZXM+CnsKICB2aXJ0dWFsIH5iaW5hcnlfZnVuY3RvcigpIHt9CiAgdmly
dHVhbCBSZXMgb3BlcmF0b3IoKSAoQXJnMSB4LCBBcmcyIHkpID0wOwp9IDsKCgoKCiAKIAogCiMg
MSAidGVzdHVuLmNwcCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrL2FsZ29yaXRobSIgMSAzCiAK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxn
b2Jhc2UuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgojIDEg
Ii91c3IvaW5jbHVkZS9nKysvc3RsX3JlbG9wcy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiAhKF9feCA9PSBf
X3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3Qg
X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBfVHAmIF9feCwgY29u
c3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1RwPgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9f
eSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCiAKCgoKIAogCiAKIyAzOSAiL3Vzci9pbmNs
dWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdGxf
cGFpci5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBmaXJz
dF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1QyIHNl
Y29uZDsKICBwYWlyKCkgOiBmaXJzdChfVDEoKSksIHNlY29uZChfVDIoKSkge30KICBwYWlyKGNv
bnN0IF9UMSYgX19hLCBjb25zdCBfVDImIF9fYikgOiBmaXJzdChfX2EpLCBzZWNvbmQoX19iKSB7
fQoKCiAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgogIHBhaXIoY29uc3QgcGFpcjxf
VTEsIF9VMj4mIF9fcCkgOiBmaXJzdChfX3AuZmlyc3QpLCBzZWNvbmQoX19wLnNlY29uZCkge30K
Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9y
PT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkK
eyAKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z
ZWNvbmQ7IAp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg
X195KQp7IAogIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwgCiAgICAgICAgICghKF9f
eS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOyAKfQoKdGVt
cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgcGFpcjxfVDEsIF9UMj4gbWFrZV9w
YWlyKGNvbnN0IF9UMSYgX194LCBjb25zdCBfVDImIF9feSkKewogIHJldHVybiBwYWlyPF9UMSwg
X1QyPihfX3gsIF9feSk7Cn0KCiAKCgoKIAogCiAKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy9zdGxf
YWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy90eXBlX3RyYWl0cy5oIiAx
IDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgpzdHJ1Y3QgX190cnVlX3R5cGUgewp9OwoKc3RydWN0IF9fZmFsc2VfdHlwZSB7Cn07Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190eXBlX3RyYWl0cyB7IAogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgICB0aGlzX2R1bW15X21lbWJlcl9tdXN0X2JlX2ZpcnN0OwogICAgICAgICAgICAg
ICAgICAgIAoKCgoKCiAgICAKCgoKCgoKCgogCgogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBo
YXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAg
ICBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAg
ICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSAgICBp
c19QT0RfdHlwZTsKfTsKCgoKIAogCiAKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFp
dHM8Ym9vbD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25t
ZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3Ry
dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBs
YXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVk
IGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVu
dF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVj
dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8
PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRlPD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRz
PHdjaGFyX3Q+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBzaG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1
bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29w
eV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3Np
Z25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rl
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5
cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAg
IGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWdu
ZWQgaW50PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVmYXVsdF9j
b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9jb3B5X2Nv
bnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Fzc2lnbm1l
bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfZGVzdHJ1
Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAg
ICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl
ICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw
ZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlz
X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQg
bG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29u
c3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25z
dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50
X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0
b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07CgoKCnRlbXBsYXRl
PD4gIHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf
dHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1
ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg
ICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNp
Z25lZCBsb25nIGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoK
Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0czxmbG9hdD4gewogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYg
X190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm
IF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl
X3R5cGUgICAgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX190eXBlX3RyYWl0
czxkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0
X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlf
Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdu
bWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0
cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh
dGU8PiAgc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f
dHJ1ZV90eXBlICAgIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190
cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBf
X3RydWVfdHlwZSAgICBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90
eXBlICAgIGlzX1BPRF90eXBlOwp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190
eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZpYWxf
ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBoYXNfdHJpdmlh
bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlICAgIGhhc190cml2aWFs
X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgICAgaGFzX3RyaXZp
YWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSAgICBpc19QT0RfdHlwZTsKfTsK
CiMgMjk1ICIvdXNyL2luY2x1ZGUvZysrL3R5cGVfdHJhaXRzLmgiIDMKCgoKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsK
ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0
IF9Jc19pbnRlZ2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsK
CnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxzaWduZWQgY2hhcj4gewogIHR5cGVkZWYg
X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2Vy
PHVuc2lnbmVkIGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoK
dGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHdjaGFyX3Q+IHsKICB0eXBlZGVmIF9fdHJ1
ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCgoKdGVtcGxhdGU8PiAgc3RydWN0IF9Jc19pbnRlZ2VyPHNo
b3J0PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBz
dHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBl
IF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxpbnQ+IHsKICB0
eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNf
aW50ZWdlcjx1bnNpZ25lZCBpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK
fTsKCnRlbXBsYXRlPD4gIHN0cnVjdCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3Ry
dWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5z
aWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKCgp0ZW1w
bGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVf
dHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ICBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWdu
ZWQgbG9uZyBsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07CgoKCgoK
IAogCiAKIyA0NSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKCiMgMSAi
L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgpl
eHRlcm4gIkMiIHsgCgogCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCgoKCgoKCiAKCgojIDE5ICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgogCgoKIAoK
CgoKCiAKCgojIDYxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9zdGRkZWYuaCIgMwoKCiAKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCgog
CgoKIyAxMjYgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRl
L3N0ZGRlZi5oIiAzCgoKIAoKCgoKIAoKIAoKCiMgMTg4ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCiAKCgoKCiAKCgojIDI2
OSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVm
LmgiIDMKCgoKCgoKCgoKCgoKCgoKCiAKCiAKCiMgMzE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYt
c3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKIAoKCgoKCgoKCgoKCgoK
IAoKCgoKCgoKIyAzMyAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAyIDMKCgoKIApleHRlcm4gdm9p
ZCAqICBtZW1jcHkgICh2b2lkICogIF9fcmVzdHJpY3QgX19kZXN0LAoJCQkgICAgX19jb25zdCB2
b2lkICogIF9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCgpleHRl
cm4gdm9pZCAqICBtZW1tb3ZlICAodm9pZCAqICBfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqICBfX3Ny
YywKCQkJICAgICBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKCgoKZXh0ZXJuIHZvaWQgKiAg
bWVtY2NweSAgKHZvaWQgKiAgX19kZXN0LCBfX2NvbnN0IHZvaWQgKiAgX19zcmMsCgkJCSAgICAg
aW50IF9fYywgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIHZvaWQgKiAgbWVt
c2V0ICAodm9pZCAqICBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApl
eHRlcm4gaW50IG1lbWNtcCAgKF9fY29uc3Qgdm9pZCAqICBfX3MxLCBfX2NvbnN0IHZvaWQgKiAg
X19zMiwKCQkJc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2b2lkICogIG1lbWNo
ciAgKF9fY29uc3Qgdm9pZCAqICBfX3MsIGludCBfX2MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAg
OwoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmNweSAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0
LAoJCQkgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0
ZXJuIGNoYXIgKnN0cm5jcHkgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25z
dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGNoYXIgKnN0cmNhdCAgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAoJCQkgIF9fY29uc3Qg
Y2hhciAqX19yZXN0cmljdCBfX3NyYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cm5j
YXQgIChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwKCQkJICAgX19jb25zdCBjaGFyICpfX3Jlc3Ry
aWN0IF9fc3JjLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCiAKZXh0ZXJuIGludCBzdHJjbXAg
IChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAK
ZXh0ZXJuIGludCBzdHJuY21wICAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f
czIsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IHN0cmNvbGwgIChfX2Nv
bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CiAKZXh0ZXJu
IHNpemVfdCBzdHJ4ZnJtICAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCgkJCSAgICBfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIyAxMDcg
Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgogCmV4dGVybiBjaGFyICpfX3N0cmR1cCAgKF9f
Y29uc3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGNoYXIgKnN0cmR1cCAgKF9fY29u
c3QgY2hhciAqX19zKSAgdGhyb3cgKCkgIDsKCgogCgoKCgoKCiMgMTQzICIvdXNyL2luY2x1ZGUv
c3RyaW5nLmgiIDMKCgogCmV4dGVybiBjaGFyICpzdHJjaHIgIChfX2NvbnN0IGNoYXIgKl9fcywg
aW50IF9fYykgIHRocm93ICgpICA7CiAKZXh0ZXJuIGNoYXIgKnN0cnJjaHIgIChfX2NvbnN0IGNo
YXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgoKCgoKCgogCgpleHRlcm4gc2l6ZV90IHN0
cmNzcG4gIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkgIHRocm93
ICgpICA7CiAKCmV4dGVybiBzaXplX3Qgc3Ryc3BuICAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u
c3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwogCmV4dGVybiBjaGFyICpzdHJwYnJrICAo
X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpICB0aHJvdyAoKSAgOwog
CmV4dGVybiBjaGFyICpzdHJzdHIgIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3Qg
Y2hhciAqX19uZWVkbGUpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgogCmV4dGVybiBjaGFyICpzdHJ0
b2sgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg
X19kZWxpbSkgIHRocm93ICgpICA7CgogCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAgKGNoYXIg
Kl9fcmVzdHJpY3QgX19zLAoJCQkgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxp
bSwKCQkJICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19zYXZlX3B0cikgIHRocm93ICgpICA7Cgpl
eHRlcm4gY2hhciAqc3RydG9rX3IgIChjaGFyICpfX3Jlc3RyaWN0IF9fcywKCQkJICAgIF9fY29u
c3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAoJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19z
YXZlX3B0cikgIHRocm93ICgpICA7CgoKIyAyMDMgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoK
CgogCmV4dGVybiBzaXplX3Qgc3RybGVuICAoX19jb25zdCBjaGFyICpfX3MpICB0aHJvdyAoKSAg
OwoKCgoKCgoKCiAKZXh0ZXJuIGNoYXIgKnN0cmVycm9yICAoaW50IF9fZXJybnVtKSAgdGhyb3cg
KCkgIDsKCiAKCmV4dGVybiBjaGFyICpfX3N0cmVycm9yX3IgIChpbnQgX19lcnJudW0sIGNoYXIg
Kl9fYnVmLCBzaXplX3QgX19idWZsZW4pICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqc3RyZXJy
b3JfciAgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgIHRocm93
ICgpICA7CgoKIAoKZXh0ZXJuIHZvaWQgX19iemVybyAgKHZvaWQgKiAgX19zLCBzaXplX3QgX19u
KSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiB2b2lkIGJjb3B5ICAoX19jb25zdCB2b2lkICogIF9f
c3JjLCB2b2lkICogIF9fZGVzdCwgc2l6ZV90IF9fbikgIHRocm93ICgpICA7CgogCmV4dGVybiB2
b2lkIGJ6ZXJvICAodm9pZCAqICBfX3MsIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IGJjbXAgIChfX2NvbnN0IHZvaWQgKiAgX19zMSwgX19jb25zdCB2b2lkICogIF9fczIs
IHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKIApleHRlcm4gY2hhciAqaW5kZXggIChfX2NvbnN0
IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgogCmV4dGVybiBjaGFyICpyaW5kZXgg
IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgIHRocm93ICgpICA7CgogCgpleHRlcm4gaW50
IF9fZmZzICAoaW50IF9faSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CmV4
dGVybiBpbnQgZmZzICAoaW50IF9faSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAoKGNvbnN0
KSk7CgogCgoKCgoKCgoKCiAKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXAgIChfX2NvbnN0IGNoYXIg
Kl9fczEsIF9fY29uc3QgY2hhciAqX19zMikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc3RyY2Fz
ZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25z
dCBjaGFyICpfX3MyLAoJCQkgICAgIHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwoKCiMgMjc3ICIv
dXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKCgoKIAoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAgKGNoYXIg
KipfX3Jlc3RyaWN0IF9fc3RyaW5ncCwKCQkJICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k
ZWxpbSkgIHRocm93ICgpICA7CgoKIyAzMTkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgoK
IyAzNDcgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwoKCgp9IAoKCiMgNDggIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3Vz
ZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiAKCgogCgoKCgoKIAojIDEgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5o
IiAxIDMKIAoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4y
L2luY2x1ZGUvbGltaXRzLmgiIDEgMwogCgoKIAoKIyAxMTQgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCiMgMSAiL3Vzci9pbmNs
dWRlL2xpbWl0cy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDEgIi91
c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgogCgoK
CgoKCgoKCiAKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKCiAKCgogCgoKIAoKCiAK
CgogCgoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCiAKCgogCgoKIAoKCgog
CgoKIAoKCiAKCgogCgoKIAoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgi
IDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4
L2xpbWl0cy5oIiAxIDMKCgoKCgoKCgoKCgoKCgoKCgoKCiMgMjcgIi91c3IvaW5jbHVkZS9iaXRz
L2xvY2FsX2xpbS5oIiAyIDMKCgogCgoKCgoKIAoKIAoKCiAKCiAKCgogCgogCgoKIAoKCgogCgoj
IDEyNiAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAyIDMKCgoKCgoKCgogCgoKCgoK
CgojIDMwICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUv
Yml0cy9wb3NpeDJfbGltLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKCiAK
CgogCgoKIAoKCiAKCgoKCiAKCgoKCiAKCgoKIAoKCiAKCgoKIAoKCgoKIAoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKIAoKCgojIDM0ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwoK
CgoKCgoKCiAKCgoKCgogCgojIDEyMSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCgoKCgogIAoK
CgoKCgoKCiMgMTE3ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5j
bHVkZS9saW1pdHMuaCIgMiAzCgoKCgojIDcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKCgojIDExICIvdXNyL2xpYi9nY2Mt
bGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCgoKCgoKIAoK
CgogCgoKCiAKCgoKCiAKCgoKCgogCgoKCiAKCgoKCgoKCgoKCgoKIAoKIAoKCgoKIAoKCgogCgoK
CgoKCgoKIAoKCgogCgoKCgoKCgoKCgoKCgogCgoKCiMgMTA3ICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9saW1pdHMuaCIgMwoKCgoKIAoKCgoKCgoKCgoj
IDQ5ICIvdXNyL2luY2x1ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNs
dWRlL3N0ZGxpYi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCiAKCgoKCgojIDEg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAxIDMKCgoKCgoKIAoKCiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIu
OTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoK
CgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgog
CgogCgoKIyAxODggIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0
ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoK
IAoKIAoKIyAzMTcgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNs
dWRlL3N0ZGRlZi5oIiAzCgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDMzICIvdXNyL2lu
Y2x1ZGUvc3RkbGliLmgiIDIgMwoKCmV4dGVybiAiQyIgeyAKCgoKCiAKdHlwZWRlZiBzdHJ1Y3QK
ICB7CiAgICBpbnQgcXVvdDsJCQkgCiAgICBpbnQgcmVtOwkJCSAKICB9IGRpdl90OwoKIAoKdHlw
ZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwkJIAogICAgbG9uZyBpbnQgcmVtOwkJ
IAogIH0gbGRpdl90OwoKCgojIDY1ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoKIAoKCgog
CgoKCgoKIAoKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dldF9tYl9jdXJfbWF4ICAodm9pZCkgIHRo
cm93ICgpICA7CgoKIApleHRlcm4gZG91YmxlIGF0b2YgIChfX2NvbnN0IGNoYXIgKl9fbnB0cikg
IHRocm93ICgpICA7CiAKZXh0ZXJuIGludCBhdG9pICAoX19jb25zdCBjaGFyICpfX25wdHIpICB0
aHJvdyAoKSAgOwogCmV4dGVybiBsb25nIGludCBhdG9sICAoX19jb25zdCBjaGFyICpfX25wdHIp
ICB0aHJvdyAoKSAgOwoKCiAKX19leHRlbnNpb25fXyBleHRlcm4gbG9uZyBsb25nIGludCBhdG9s
bCAgKF9fY29uc3QgY2hhciAqX19ucHRyKSAgdGhyb3cgKCkgIDsKCgogCmV4dGVybiBkb3VibGUg
c3RydG9kICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgY2hhciAqKl9f
cmVzdHJpY3QgX19lbmRwdHIpICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKIApleHRlcm4gbG9uZyBp
bnQgc3RydG9sICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJICAgICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKZXh0ZXJu
IHVuc2lnbmVkIGxvbmcgaW50IHN0cnRvdWwgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19u
cHRyLAoJCQkJICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgIGlu
dCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCiAKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25n
IGludCBzdHJ0b3EgIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICBjaGFy
ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkgIHRocm93ICgpICA7CiAKX19leHRl
bnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VxICAoX19jb25zdCBj
aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRw
dHIsCgkJCQkJICAgIGludCBfX2Jhc2UpICB0aHJvdyAoKSAgOwoKCgogCgogCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj
dCBfX25wdHIsCgkJCQkgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFzZSkg
IHRocm93ICgpICA7CiAKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGlu
dCBzdHJ0b3VsbCAgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCgkJCQkJICAgICBj
aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkgICAgIGludCBfX2Jhc2UpICB0aHJvdyAo
KSAgOwoKCgojIDE5MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiAKCgpleHRlcm4gZG91
YmxlIF9fc3RydG9kX2ludGVybmFsICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK
CQkJCSAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJICAgICAgaW50IF9fZ3Jv
dXApICB0aHJvdyAoKSAgOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgIChfX2NvbnN0
IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAoJCQkJICAgICBjaGFyICoqX19yZXN0cmljdCBfX2Vu
ZHB0ciwgaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwpleHRlcm4gbG9uZyBkb3VibGUgIF9fc3Ry
dG9sZF9pbnRlcm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCV9fcmVzdHJpY3QgX19ucHRyLAoJ
CQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJCQkJaW50IF9fZ3JvdXApICB0aHJv
dyAoKSAgOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9sX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQljaGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKCQkJ
CQlpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCmV4dGVybiB1bnNpZ25l
ZCBsb25nIGludCBfX3N0cnRvdWxfaW50ZXJuYWwgIChfX2NvbnN0IGNoYXIgKgoJCQkJCQkgIF9f
cmVzdHJpY3QgX19ucHRyLAoJCQkJCQkgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAoJCQkJ
CQkgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSAgdGhyb3cgKCkgIDsKCgoKCl9fZXh0ZW5zaW9u
X18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0b2xsX2ludGVybmFsICAoX19jb25zdCBjaGFy
ICpfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0
ciwKCQkJCQkgICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgIHRocm93ICgpICA7CgoKCl9f
ZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9pbnRl
cm5hbCAgKF9fY29uc3QgY2hhciAqCgkJCQkJCQlfX3Jlc3RyaWN0IF9fbnB0ciwKCQkJCQkJCWNo
YXIgKioKCQkJCQkJCV9fcmVzdHJpY3QgX19lbmRwdHIsCgkJCQkJCQlpbnQgX19iYXNlLAoJCQkJ
CQkJaW50IF9fZ3JvdXApICB0aHJvdyAoKSAgOwoKCgoKIyAzMjYgIi91c3IvaW5jbHVkZS9zdGRs
aWIuaCIgMwoKCgoKIAoKCmV4dGVybiBjaGFyICpsNjRhICAobG9uZyBpbnQgX19uKSAgdGhyb3cg
KCkgIDsKCiAKZXh0ZXJuIGxvbmcgaW50IGE2NGwgIChfX2NvbnN0IGNoYXIgKl9fcykgIHRocm93
ICgpICA7CgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwogCgoKCgoKCgoKCgoK
CgoKCgoKIAoKCgoKCgoKCmV4dGVybiAiQyIgeyAKCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFy
Owp0eXBlZGVmIF9fdV9zaG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVk
ZWYgX191X2xvbmcgdV9sb25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3Vf
cXVhZF90IHVfcXVhZF90Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgp0eXBlZGVmIF9fbG9m
Zl90IGxvZmZfdDsKCgoKdHlwZWRlZiBfX2lub190IGlub190OwoKCgoKCgoKCgoKCnR5cGVkZWYg
X19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoKCnR5cGVkZWYgX19t
b2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3QgbmxpbmtfdDsKCgoKCnR5cGVkZWYg
X191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoKCgoKCgoKdHlw
ZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKdHlwZWRlZiBf
X3NzaXplX3Qgc3NpemVfdDsKCgoKCnR5cGVkZWYgX19kYWRkcl90IGRhZGRyX3Q7CnR5cGVkZWYg
X19jYWRkcl90IGNhZGRyX3Q7CgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgoKCgoKIyAxICIv
dXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoK
CgojIDUxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNjIgIi91c3IvaW5jbHVkZS90aW1l
LmgiIDMKCgoKCgoKCgogCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwoKCgoKCiMgODkgIi91c3Iv
aW5jbHVkZS90aW1lLmgiIDMKCgoKCiMgMjc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMg
MTIyICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoKCgojIDEgIi91c3IvbGliL2djYy1s
aWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoK
CiMgMTkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0
ZGRlZi5oIiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoK
CgoKCgoKCgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2Ut
bGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgoKIAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8y
Ljk1LjIvaW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAz
CgoKCgogCgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDEyNSAiL3Vzci9pbmNsdWRlL3N5cy90eXBl
cy5oIiAyIDMKCgoKIAp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHVsb25nOwp0eXBlZGVmIHVu
c2lnbmVkIHNob3J0IGludCB1c2hvcnQ7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQ7CgoKIAoK
IyAxNTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwoKCiAKCgoKCgoKCnR5cGVkZWYgaW50
IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19RSV9fICkpKSA7CnR5cGVkZWYg
aW50IGludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBl
ZGVmIGludCBpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoICBfX1NJX18gKSkpIDsK
dHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKCAgX19ESV9fICkp
KSA7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ4X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9k
ZV9fICggIF9fUUlfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRy
aWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fSElfXyApKSkgOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1
X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fU0lfXyApKSkgOwp0eXBlZGVm
IHVuc2lnbmVkIGludCB1X2ludDY0X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fICggIF9fRElf
XyApKSkgOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g
KF9fd29yZF9fKSkpOwoKCiAKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAz
CiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKIAojIDEgIi91c3IvaW5jbHVkZS9i
aXRzL2VuZGlhbi5oIiAxIDMKIAoKCgoKCgojIDM1ICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDIg
MwoKCiAKCgoKCgoKCgoKCgoKCiMgMTkxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK
CiAKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgogCgoKCgoKCiAKCgogCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwogCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIg
MwoKCgoKCgoKCgoKCgojIDU2ICIvdXNyL2luY2x1ZGUvYml0cy9zZWxlY3QuaCIgMwoKIyA3MiAi
L3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDMKCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvc2Vs
ZWN0LmgiIDIgMwoKCiAKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgogCgoKdHlwZWRl
ZiBzdHJ1Y3QKICB7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6
ZW9mICh1bnNpZ25lZCBsb25nIGludCkpKSBdOwogIH0gX19zaWdzZXRfdDsKCgoKCiAKCgoKCgoj
IDEyNSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMKCiMgMzQgIi91c3IvaW5jbHVkZS9z
eXMvc2VsZWN0LmgiIDIgMwoKCiAKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKIyA1MSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg
MwoKCgojIDYyICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCgoKCiMgNzMgIi91c3IvaW5jbHVkZS90
aW1lLmgiIDMKCgoKCgoKCgogCgpzdHJ1Y3QgdGltZXNwZWMKICB7CiAgICBsb25nIGludCB0dl9z
ZWM7CQkgCiAgICBsb25nIGludCB0dl9uc2VjOwkJIAogIH07CgoKCgoKIyAyNzkgIi91c3IvaW5j
bHVkZS90aW1lLmgiIDMKCgoKIyAzOCAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCgoK
ZXh0ZXJuICJDIiB7IAoKIAoKCgpzdHJ1Y3QgdGltZXZhbDsKCnR5cGVkZWYgX19mZF9tYXNrIGZk
X21hc2s7CgogCnR5cGVkZWYgX19mZF9zZXQgZmRfc2V0OwoKIAoKCgogCgoKCgogCgoKCgoKCiAK
CgoKCmV4dGVybiBpbnQgX19zZWxlY3QgIChpbnQgX19uZmRzLCBfX2ZkX3NldCAqX19yZWFkZmRz
LAoJCQkgIF9fZmRfc2V0ICpfX3dyaXRlZmRzLCBfX2ZkX3NldCAqX19leGNlcHRmZHMsCgkJCSAg
c3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkgIHRocm93ICgpICA7CmV4dGVybiBpbnQgc2VsZWN0
ICAoaW50IF9fbmZkcywgX19mZF9zZXQgKl9fcmVhZGZkcywKCQkJX19mZF9zZXQgKl9fd3JpdGVm
ZHMsIF9fZmRfc2V0ICpfX2V4Y2VwdGZkcywKCQkJc3RydWN0IHRpbWV2YWwgKl9fdGltZW91dCkg
IHRocm93ICgpICA7CgojIDkxICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAzCgoKfSAKCgoj
IDE5NCAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgogCiMgMSAiL3Vzci9pbmNsdWRl
L3N5cy9zeXNtYWNyb3MuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiMg
NDcgIi91c3IvaW5jbHVkZS9zeXMvc3lzbWFjcm9zLmgiIDMKCgoKIyAxOTcgIi91c3IvaW5jbHVk
ZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgogCgp0eXBlZGVmIF9fYmxrY250X3QgYmxrY250X3Q7CSAg
CnR5cGVkZWYgX19mc2Jsa2NudF90IGZzYmxrY250X3Q7ICAKdHlwZWRlZiBfX2ZzZmlsY250X3Qg
ZnNmaWxjbnRfdDsgIAoKCgoKCgoKCgoKCgp9IAoKCiMgMzM5ICIvdXNyL2luY2x1ZGUvc3RkbGli
LmgiIDIgMwoKCiAKCgoKIApleHRlcm4gaW50MzJfdCByYW5kb20gICh2b2lkKSAgdGhyb3cgKCkg
IDsKCiAKZXh0ZXJuIHZvaWQgc3JhbmRvbSAgKHVuc2lnbmVkIGludCBfX3NlZWQpICB0aHJvdyAo
KSAgOwoKIAoKCgpleHRlcm4gdm9pZCAqICBpbml0c3RhdGUgICh1bnNpZ25lZCBpbnQgX19zZWVk
LCB2b2lkICogIF9fc3RhdGVidWYsCgkJCSAgICAgICBzaXplX3QgX19zdGF0ZWxlbikgIHRocm93
ICgpICA7CgogCgpleHRlcm4gdm9pZCAqICBzZXRzdGF0ZSAgKHZvaWQgKiAgX19zdGF0ZWJ1Zikg
IHRocm93ICgpICA7CgoKCiAKCgoKc3RydWN0IHJhbmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAq
ZnB0cjsJCSAKICAgIGludDMyX3QgKnJwdHI7CQkgCiAgICBpbnQzMl90ICpzdGF0ZTsJCSAKICAg
IGludCByYW5kX3R5cGU7CQkgCiAgICBpbnQgcmFuZF9kZWc7CQkgCiAgICBpbnQgcmFuZF9zZXA7
CQkgCiAgICBpbnQzMl90ICplbmRfcHRyOwkJIAogIH07CgpleHRlcm4gaW50IHJhbmRvbV9yICAo
c3RydWN0IHJhbmRvbV9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmLAoJCQkgIGludDMyX3QgKl9fcmVz
dHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzcmFuZG9tX3IgICh1bnNp
Z25lZCBpbnQgX19zZWVkLCBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fYnVmKSAgdGhyb3cgKCkgIDsK
CmV4dGVybiBpbnQgaW5pdHN0YXRlX3IgICh1bnNpZ25lZCBpbnQgX19zZWVkLAoJCQkgICAgIHZv
aWQgKiAgX19yZXN0cmljdCBfX3N0YXRlYnVmLAoJCQkgICAgIHNpemVfdCBfX3N0YXRlbGVuLAoJ
CQkgICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7
CgpleHRlcm4gaW50IHNldHN0YXRlX3IgICh2b2lkICogIF9fcmVzdHJpY3QgX19zdGF0ZWJ1ZiwK
CQkJICAgIHN0cnVjdCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZikgIHRocm93ICgpICA7
CgoKCgogCmV4dGVybiBpbnQgcmFuZCAgKHZvaWQpICB0aHJvdyAoKSAgOwogCmV4dGVybiB2b2lk
IHNyYW5kICAodW5zaWduZWQgaW50IF9fc2VlZCkgIHRocm93ICgpICA7CgoKIApleHRlcm4gaW50
IHJhbmRfciAgKHVuc2lnbmVkIGludCAqX19zZWVkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCiAKZXh0
ZXJuIGRvdWJsZSBkcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBkb3VibGUgZXJh
bmQ0OCAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSAgdGhyb3cgKCkgIDsKCiAKZXh0
ZXJuIGxvbmcgaW50IGxyYW5kNDggICh2b2lkKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGxvbmcgaW50
IG5yYW5kNDggICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgIHRocm93ICgpICA7Cgog
CmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICAodm9pZCkgIHRocm93ICgpICA7CmV4dGVybiBsb25n
IGludCBqcmFuZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pICB0aHJvdyAoKSAg
OwoKIApleHRlcm4gdm9pZCBzcmFuZDQ4ICAobG9uZyBpbnQgX19zZWVkdmFsKSAgdGhyb3cgKCkg
IDsKZXh0ZXJuIHVuc2lnbmVkIHNob3J0IGludCAqc2VlZDQ4ICAodW5zaWduZWQgc2hvcnQgaW50
IF9fc2VlZDE2dlszXSkgIHRocm93ICgpICA7CmV4dGVybiB2b2lkIGxjb25nNDggICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX19wYXJhbVs3XSkgIHRocm93ICgpICA7CgogCnN0cnVjdCBkcmFuZDQ4X2Rh
dGEKICB7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgeFszXTsJIAogICAgdW5zaWduZWQgc2hvcnQg
aW50IGFbM107CSAKICAgIHVuc2lnbmVkIHNob3J0IGludCBjOwkgCiAgICB1bnNpZ25lZCBzaG9y
dCBpbnQgb2xkX3hbM107ICAKICAgIGludCBpbml0OwkJCSAKICB9OwoKCiAKZXh0ZXJuIGludCBk
cmFuZDQ4X3IgIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkg
ICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IGVy
YW5kNDhfciAgKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdLAoJCQkgICBzdHJ1Y3QgZHJh
bmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAoJCQkgICBkb3VibGUgKl9fcmVzdHJpY3Qg
X19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gaW50IGxyYW5kNDhfciAgKHN0cnVjdCBk
cmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3Ry
aWN0IF9fcmVzdWx0KSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBucmFuZDQ4X3IgICh1bnNpZ25l
ZCBzaG9ydCBpbnQgX194c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0
cmljdCBfX2J1ZmZlciwKCQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJv
dyAoKSAgOwoKIApleHRlcm4gaW50IG1yYW5kNDhfciAgKHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9f
cmVzdHJpY3QgX19idWZmZXIsCgkJCSAgIGxvbmcgaW50ICpfX3Jlc3RyaWN0IF9fcmVzdWx0KSAg
dGhyb3cgKCkgIDsKZXh0ZXJuIGludCBqcmFuZDQ4X3IgICh1bnNpZ25lZCBzaG9ydCBpbnQgX194
c3ViaVszXSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwK
CQkJICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gaW50IHNyYW5kNDhfciAgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0
YSAqX19idWZmZXIpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAgKHVuc2lnbmVk
IHNob3J0IGludCBfX3NlZWQxNnZbM10sCgkJCSAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZm
ZXIpICB0aHJvdyAoKSAgOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgICh1bnNpZ25lZCBzaG9ydCBp
bnQgX19wYXJhbVs3XSwKCQkJICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIpICB0aHJv
dyAoKSAgOwoKCgoKCgoKIApleHRlcm4gdm9pZCAqICBtYWxsb2MgIChzaXplX3QgX19zaXplKSAg
dGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCAqICBjYWxsb2MgIChzaXplX3QgX19ubWVtYiwgc2l6
ZV90IF9fc2l6ZSkgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiB2b2lkICogIHJlYWxsb2MgICh2
b2lkICogIF9fcHRyLCBzaXplX3QgX19zaXplKSAgdGhyb3cgKCkgIDsKIApleHRlcm4gdm9pZCBm
cmVlICAodm9pZCAqICBfX3B0cikgIHRocm93ICgpICA7CgoKIApleHRlcm4gdm9pZCBjZnJlZSAg
KHZvaWQgKiAgX19wdHIpICB0aHJvdyAoKSAgOwoKCgojIDEgIi91c3IvaW5jbHVkZS9hbGxvY2Eu
aCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4
Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKCgoKCgoKIAoKCiMgMTkg
Ii91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5o
IiAzCgoKCiAKCgogCgoKCgoKIAoKCiMgNjEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxp
bnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKIAoKCgoKCiAKCgoKCgoKCgoKCgoKCgoK
CgoKIAoKCgoKCiAKCiAKCgojIDEyNiAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgv
Mi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCgogCgoKCgogCgogCgoKIyAxODggIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgoK
IAoKCgoKIAoKCiMgMjY5ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIv
aW5jbHVkZS9zdGRkZWYuaCIgMwoKCgoKCgoKCgoKCgoKCgoKIAoKIAoKIyAzMTcgIi91c3IvbGli
L2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgoKCgog
CgoKCgoKCgoKCgoKCgogCgoKCgoKCgojIDI1ICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDIgMwoK
CmV4dGVybiAiQyIgeyAKCiAKCgogCmV4dGVybiB2b2lkICogIGFsbG9jYSAgKHNpemVfdCBfX3Np
emUpICB0aHJvdyAoKSAgOwoKCgoKCn0gCgoKIyA0OTIgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg
MiAzCgoKCgogCmV4dGVybiB2b2lkICogIHZhbGxvYyAgKHNpemVfdCBfX3NpemUpICB0aHJvdyAo
KSAgOwoKCgogCmV4dGVybiB2b2lkIGFib3J0ICAodm9pZCkgIHRocm93ICgpICAgX19hdHRyaWJ1
dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCiAKZXh0ZXJuIGludCBhdGV4aXQgICh2b2lkICgqX19m
dW5jKSAodm9pZCkpICB0aHJvdyAoKSAgOwoKCiAKCmV4dGVybiBpbnQgX19vbl9leGl0ICAodm9p
ZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9pZCAqICBfX2FyZyksCgkJCSAgIHZvaWQgKiAg
X19hcmcpICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IG9uX2V4aXQgICh2b2lkICgqX19mdW5jKSAo
aW50IF9fc3RhdHVzLCB2b2lkICogIF9fYXJnKSwKCQkJIHZvaWQgKiAgX19hcmcpICB0aHJvdyAo
KSAgOwoKCiAKCgpleHRlcm4gdm9pZCBleGl0ICAoaW50IF9fc3RhdHVzKSAgdGhyb3cgKCkgICBf
X2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9fKSk7CgoKCgoKCgoKIApleHRlcm4gY2hhciAqZ2V0
ZW52ICAoX19jb25zdCBjaGFyICpfX25hbWUpICB0aHJvdyAoKSAgOwoKIAoKZXh0ZXJuIGNoYXIg
Kl9fc2VjdXJlX2dldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgog
CiAKCmV4dGVybiBpbnQgcHV0ZW52ICAoY2hhciAqX19zdHJpbmcpICB0aHJvdyAoKSAgOwoKCgog
CgpleHRlcm4gaW50IHNldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIg
Kl9fdmFsdWUsCgkJCWludCBfX3JlcGxhY2UpICB0aHJvdyAoKSAgOwoKIApleHRlcm4gdm9pZCB1
bnNldGVudiAgKF9fY29uc3QgY2hhciAqX19uYW1lKSAgdGhyb3cgKCkgIDsKCgoKIAoKCmV4dGVy
biBpbnQgY2xlYXJlbnYgICh2b2lkKSAgdGhyb3cgKCkgIDsKCgoKCiAKCgoKZXh0ZXJuIGNoYXIg
Km1rdGVtcCAgKGNoYXIgKl9fdGVtcGxhdGUpICB0aHJvdyAoKSAgOwoKIAoKCgoKZXh0ZXJuIGlu
dCBta3N0ZW1wICAoY2hhciAqX190ZW1wbGF0ZSkgIHRocm93ICgpICA7CgoKCiAKZXh0ZXJuIGlu
dCBzeXN0ZW0gIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkgIHRocm93ICgpICA7CgoKCgoKCgoK
CgogCgoKCgoKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoICAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0
IF9fbmFtZSwKCQkJICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgIHRocm93ICgpICA7
CgoKCiAKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpICAoX19jb25zdCB2b2lkICogLCBf
X2NvbnN0IHZvaWQgKiApICA7CgoKCgoKCiAKCmV4dGVybiB2b2lkICogIGJzZWFyY2ggIChfX2Nv
bnN0IHZvaWQgKiAgX19rZXksIF9fY29uc3Qgdm9pZCAqICBfX2Jhc2UsCgkJCSAgICAgICBzaXpl
X3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICAgICAgIF9fY29tcGFyX2ZuX3QgX19jb21w
YXIpICA7CgogCgpleHRlcm4gdm9pZCBxc29ydCAgKHZvaWQgKiAgX19iYXNlLCBzaXplX3QgX19u
bWVtYiwgc2l6ZV90IF9fc2l6ZSwKCQkJICBfX2NvbXBhcl9mbl90IF9fY29tcGFyKSAgOwoKCiAK
ZXh0ZXJuIGludCBhYnMgIChpbnQgX194KSAgdGhyb3cgKCkgICBfX2F0dHJpYnV0ZV9fICgoX19j
b25zdF9fKSk7CmV4dGVybiBsb25nIGludCBsYWJzICAobG9uZyBpbnQgX194KSAgdGhyb3cgKCkg
ICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgoKCiAKCiAKZXh0ZXJuIGRpdl90IGRp
diAgKGludCBfX251bWVyLCBpbnQgX19kZW5vbSkgIHRocm93ICgpICAgX19hdHRyaWJ1dGVfXyAo
KF9fY29uc3RfXykpOwpleHRlcm4gbGRpdl90IGxkaXYgIChsb25nIGludCBfX251bWVyLCBsb25n
IGludCBfX2Rlbm9tKSAgdGhyb3cgKCkgIAogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p
KTsKCgoKCgoKCgogCgoKIAoKCmV4dGVybiBjaGFyICplY3Z0ICAoZG91YmxlIF9fdmFsdWUsIGlu
dCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAqX19yZXN0cmljdCBf
X3NpZ24pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBjaGFyICpmY3Z0ICAoZG91YmxlIF9fdmFs
dWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAqX19yZXN0
cmljdCBfX3NpZ24pICB0aHJvdyAoKSAgOwoKIAoKCmV4dGVybiBjaGFyICpnY3Z0ICAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpICB0aHJvdyAoKSAgOwoKIApleHRl
cm4gY2hhciAqcWVjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAoJCQkg
aW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24pICB0aHJvdyAo
KSAgOwpleHRlcm4gY2hhciAqcWZjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50IF9fbmRp
Z2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24p
ICB0aHJvdyAoKSAgOwpleHRlcm4gY2hhciAqcWdjdnQgIChsb25nIGRvdWJsZSAgX192YWx1ZSwg
aW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgIHRocm93ICgpICA7CgoKCiAKCmV4dGVybiBpbnQg
ZWN2dF9yICAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9f
ZGVjcHQsCgkJCWludCAqX19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs
CgkJCXNpemVfdCBfX2xlbikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgZmN2dF9yICAoZG91Ymxl
IF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCgkJCWludCAq
X19yZXN0cmljdCBfX3NpZ24sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCgkJCXNpemVfdCBfX2xl
bikgIHRocm93ICgpICA7CgpleHRlcm4gaW50IHFlY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1
ZSwgaW50IF9fbmRpZ2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0
cmljdCBfX3NpZ24sCgkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pICB0
aHJvdyAoKSAgOwpleHRlcm4gaW50IHFmY3Z0X3IgIChsb25nIGRvdWJsZSAgX192YWx1ZSwgaW50
IF9fbmRpZ2l0LAoJCQkgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf
X3NpZ24sCgkJCSBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLCBzaXplX3QgX19sZW4pICB0aHJvdyAo
KSAgOwoKCgoKIAoKZXh0ZXJuIGludCBtYmxlbiAgKF9fY29uc3QgY2hhciAqX19zLCBzaXplX3Qg
X19uKSAgdGhyb3cgKCkgIDsKIAoKZXh0ZXJuIGludCBtYnRvd2MgICh3Y2hhcl90ICpfX3Jlc3Ry
aWN0IF9fcHdjLAoJCQlfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uKSAg
dGhyb3cgKCkgIDsKIAoKZXh0ZXJuIGludCB3Y3RvbWIgIChjaGFyICpfX3MsIHdjaGFyX3QgX193
Y2hhcikgIHRocm93ICgpICA7CgoKIApleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICAod2NoYXJfdCAq
X19yZXN0cmljdCAgX19wd2NzLAoJCQkgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Ms
IHNpemVfdCBfX24pICB0aHJvdyAoKSAgOwogCmV4dGVybiBzaXplX3Qgd2NzdG9tYnMgIChjaGFy
ICpfX3Jlc3RyaWN0IF9fcywKCQkJICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19w
d2NzLCBzaXplX3QgX19uKSAgdGhyb3cgKCkgIDsKCgoKIAoKCgpleHRlcm4gaW50IHJwbWF0Y2gg
IChfX2NvbnN0IGNoYXIgKl9fcmVzcG9uc2UpICB0aHJvdyAoKSAgOwoKCgojIDczMiAiL3Vzci9p
bmNsdWRlL3N0ZGxpYi5oIiAzCgoKCiMgNzU2ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKCgoj
IDc2NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgoKCgoKfSAKCgojIDUwICIvdXNyL2luY2x1
ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1
c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0MiAiL3Vzci9saWIvZ2Nj
LWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKCiMgNTEgIi91
c3IvaW5jbHVkZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGli
L2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMSAzCiAKCgoKCiMgMSAiL3Vz
ci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvbmV3IiAxIDMKIAog
CgoKCgojcHJhZ21hIGludGVyZmFjZSAibmV3IgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNDIgIi91c3IvbGliL2dj
Yy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCgojIDggIi91
c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL25ldyIgMiAzCgoj
IDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL2V4Y2Vw
dGlvbiIgMSAzCiAKIAoKCgoKI3ByYWdtYSBpbnRlcmZhY2UgImV4Y2VwdGlvbiIKCmV4dGVybiAi
QysrIiB7CgpuYW1lc3BhY2Ugc3RkIHsKCmNsYXNzIGV4Y2VwdGlvbiB7CnB1YmxpYzoKICBleGNl
cHRpb24gKCkgeyB9CiAgdmlydHVhbCB+ZXhjZXB0aW9uICgpIHsgfQogIHZpcnR1YWwgY29uc3Qg
Y2hhciogd2hhdCAoKSBjb25zdDsKfTsKCmNsYXNzIGJhZF9leGNlcHRpb24gOiBwdWJsaWMgZXhj
ZXB0aW9uIHsKcHVibGljOgogIGJhZF9leGNlcHRpb24gKCkgeyB9CiAgdmlydHVhbCB+YmFkX2V4
Y2VwdGlvbiAoKSB7IH0KfTsKCnR5cGVkZWYgdm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsK
dHlwZWRlZiB2b2lkICgqdW5leHBlY3RlZF9oYW5kbGVyKSAoKTsKCnRlcm1pbmF0ZV9oYW5kbGVy
IHNldF90ZXJtaW5hdGUgKHRlcm1pbmF0ZV9oYW5kbGVyKTsKdm9pZCB0ZXJtaW5hdGUgKCkgX19h
dHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwp1bmV4cGVjdGVkX2hhbmRsZXIgc2V0X3VuZXhw
ZWN0ZWQgKHVuZXhwZWN0ZWRfaGFuZGxlcik7CnZvaWQgdW5leHBlY3RlZCAoKSBfX2F0dHJpYnV0
ZV9fICgoX19ub3JldHVybl9fKSk7CmJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uICgpOwoKfSAgCgp9
ICAKCgojIDkgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1zdXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRl
L25ldyIgMiAzCgoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQgewoKICBjbGFzcyBiYWRf
YWxsb2MgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICBwdWJsaWM6CiAgICB2aXJ0dWFsIGNvbnN0IGNo
YXIqIHdoYXQoKSBjb25zdCB0aHJvdygpIHsgcmV0dXJuICJiYWRfYWxsb2MiOyB9CiAgfTsKCiAg
c3RydWN0IG5vdGhyb3dfdCB7fTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CiAg
dHlwZWRlZiB2b2lkICgqbmV3X2hhbmRsZXIpKCk7CiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5k
bGVyIChuZXdfaGFuZGxlcik7Cgp9ICAKCiAKdm9pZCAqb3BlcmF0b3IgbmV3IChzaXplX3QpIHRo
cm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgKm9wZXJhdG9yIG5ld1tdIChzaXplX3QpIHRocm93
IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlICh2b2lkICopIHRocm93KCk7
CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3Ig
bmV3IChzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0
b3IgbmV3W10gKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwp2b2lkIG9w
ZXJhdG9yIGRlbGV0ZSAodm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZv
aWQgb3BlcmF0b3IgZGVsZXRlW10gKHZvaWQgKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJv
dygpOwoKIAppbmxpbmUgdm9pZCAqb3BlcmF0b3IgbmV3KHNpemVfdCwgdm9pZCAqcGxhY2UpIHRo
cm93KCkgeyByZXR1cm4gcGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHNpemVf
dCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4gcGxhY2U7IH0KfSAgCgoKIyA2ICIvdXNy
L2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9uZXcuaCIgMiAzCgoK
dXNpbmcgc3RkOjpuZXdfaGFuZGxlcjsKdXNpbmcgc3RkOjpzZXRfbmV3X2hhbmRsZXI7CgoKIyA1
MiAiL3Vzci9pbmNsdWRlL2crKy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvaW9zdHJlYW0uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiNwcmFnbWEg
aW50ZXJmYWNlCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIgMSAzCiAKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgojcHJhZ21hIGludGVyZmFjZQoKCiAgIAoKCgpleHRlcm4g
IkMiIHsKIyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgojIDEgIi91c3IvbGliL2djYy1saWIvaTQ4Ni1z
dXNlLWxpbnV4LzIuOTUuMi9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgp0
eXBlZGVmIHZvaWQgKl9fZ251Y192YV9saXN0OwoKCgogCgojIDEyMiAiL3Vzci9saWIvZ2NjLWxp
Yi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2luY2x1ZGUvc3RkYXJnLmgiIDMKCgoKCgoKCgoKCgoK
CgoKCgoKCgojIDIwOSAiL3Vzci9saWIvZ2NjLWxpYi9pNDg2LXN1c2UtbGludXgvMi45NS4yL2lu
Y2x1ZGUvc3RkYXJnLmgiIDMKCgoKCiMgNDggIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKCgoK
CgoKCiMgNjcgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKIAoKCgoKCgoKCgoKCgoKCgoKCiMg
OTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCgoKCgoKCgoKCgoKIAoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgogCgoKCgoKCgoKCgoKCgoKCgoKCgpzdHJ1Y3QgX0lPX2p1bXBfdDsgIHN0cnVjdCBf
SU9fRklMRTsKCiAKCgoKCgoKCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgogCgpzdHJ1Y3Qg
X0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9uZXh0OwogIHN0cnVjdCBfSU9fRklM
RSAqX3NidWY7CiAgIAoKICAgCiAgaW50IF9wb3M7CiMgMTg2ICIvdXNyL2luY2x1ZGUvbGliaW8u
aCIgMwoKfTsKCnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsJCSAKCgogICAKICAgCiAg
Y2hhciogX0lPX3JlYWRfcHRyOwkgCiAgY2hhciogX0lPX3JlYWRfZW5kOwkgCiAgY2hhciogX0lP
X3JlYWRfYmFzZTsJIAogIGNoYXIqIF9JT193cml0ZV9iYXNlOwkgCiAgY2hhciogX0lPX3dyaXRl
X3B0cjsJIAogIGNoYXIqIF9JT193cml0ZV9lbmQ7CSAKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CSAK
ICBjaGFyKiBfSU9fYnVmX2VuZDsJIAogICAKICBjaGFyICpfSU9fc2F2ZV9iYXNlOyAgCiAgY2hh
ciAqX0lPX2JhY2t1cF9iYXNlOyAgIAogIGNoYXIgKl9JT19zYXZlX2VuZDsgIAoKICBzdHJ1Y3Qg
X0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2NoYWluOwoKICBpbnQg
X2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCAgIF9vbGRfb2Zmc2V0OyAgCgoKICAg
CiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJsZV9vZmZz
ZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgogICAKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CgoKCgoK
CgoKICBfX29mZjY0X3QgICBfb2Zmc2V0OwogICAKICBpbnQgX3VudXNlZDJbMTZdOwoKfTsKCgoK
CgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18y
XzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpl
eHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRlcnJfOwoKCgoKCgoKCgoKCiAK
CiAKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9fcmVhZF9mbiAgKHZvaWQgKiAgX19jb29raWUsIGNo
YXIgKl9fYnVmLAoJCQkJICAgICAgIHNpemVfdCBfX25ieXRlcykgIDsKCiAKCgoKCgp0eXBlZGVm
IF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19jb25zdCBjaGFy
ICpfX2J1ZiwKCQkJCSAgICAgIHNpemVfdCBfX24pICA7CgogCgoKCgoKdHlwZWRlZiBpbnQgX19p
b19zZWVrX2ZuICAodm9pZCAqICBfX2Nvb2tpZSwgX19vZmZfdCAgIF9fcG9zLCBpbnQgX193KSAg
OwoKIAp0eXBlZGVmIGludCBfX2lvX2Nsb3NlX2ZuICAodm9pZCAqICBfX2Nvb2tpZSkgIDsKCgoj
IDMxMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4dGVybiBp
bnQgX191bmRlcmZsb3cgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIGludCBfX3Vm
bG93ICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX19vdmVyZmxvdyAgKF9J
T19GSUxFICosIGludCkgIHRocm93ICgpICA7CgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T19nZXRjICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19wdXRj
ICAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19m
ZW9mICAoX0lPX0ZJTEUgKl9fZnApICB0aHJvdyAoKSAgOwpleHRlcm4gaW50IF9JT19mZXJyb3Ig
IChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2Nr
ZWQgIChfSU9fRklMRSAqX19mcCkgIHRocm93ICgpICA7CgogCgoKCmV4dGVybiB2b2lkIF9JT19m
bG9ja2ZpbGUgIChfSU9fRklMRSAqKSAgdGhyb3cgKCkgIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxv
Y2tmaWxlICAoX0lPX0ZJTEUgKikgIHRocm93ICgpICA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2Nr
ZmlsZSAgKF9JT19GSUxFICopICB0aHJvdyAoKSAgOwoKCgoKCgoKCgoKCgpleHRlcm4gaW50IF9J
T192ZnNjYW5mICAoX0lPX0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmlj
dCwKCQkJICAgICBfX2dudWNfdmFfbGlzdCAsIGludCAqX19yZXN0cmljdCkgIHRocm93ICgpICA7
CmV4dGVybiBpbnQgX0lPX3ZmcHJpbnRmICAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNo
YXIgKl9fcmVzdHJpY3QsCgkJCSAgICAgIF9fZ251Y192YV9saXN0ICkgIHRocm93ICgpICA7CmV4
dGVybiBfX3NzaXplX3QgICBfSU9fcGFkbiAgKF9JT19GSUxFICosIGludCwgX19zc2l6ZV90ICAp
ICB0aHJvdyAoKSAgOwpleHRlcm4gc2l6ZV90ICAgX0lPX3NnZXRuICAoX0lPX0ZJTEUgKiwgdm9p
ZCAqLCBzaXplX3QgICkgIHRocm93ICgpICA7CgpleHRlcm4gX19vZmY2NF90ICAgX0lPX3NlZWtv
ZmYgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50LCBpbnQpICB0aHJvdyAoKSAgOwpleHRl
cm4gX19vZmY2NF90ICAgX0lPX3NlZWtwb3MgIChfSU9fRklMRSAqLCBfX29mZjY0X3QgICwgaW50
KSAgdGhyb3cgKCkgIDsKCmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhICAoX0lPX0ZJ
TEUgKikgIHRocm93ICgpICA7CgoKfQoKCgojIDM2ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1
Zi5oIiAyIDMKCn0KIAoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1
LjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoKCgoKCiAKCgoKIAoKCgoK
CgoKCgoKCgoKCgoKCnZvaWQgdmFfZW5kIChfX2dudWNfdmFfbGlzdCk7CQkgCgoKIAoKCgogCgoK
CgoKCgoKCgoKCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCiAKCgoKCgoKCgoKCgoKCiMgMTc1
ICIvdXNyL2xpYi9nY2MtbGliL2k0ODYtc3VzZS1saW51eC8yLjk1LjIvaW5jbHVkZS9zdGRhcmcu
aCIgMwoKCiAKCgoKCiAKCiAKCiAKCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKCgoK
CgoKCgoKCgoKCgoKCgoKCgoKCgoKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy9zdHJlYW1idWYuaCIg
MiAzCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpleHRlcm4gIkMrKyIgewpjbGFzcyBpc3RyZWFt
OyAgCmNsYXNzIG9zdHJlYW07IGNsYXNzIHN0cmVhbWJ1ZjsKCiAKCgoKCnR5cGVkZWYgX19vZmY2
NF90ICAgc3RyZWFtb2ZmOwp0eXBlZGVmIF9fb2ZmNjRfdCAgIHN0cmVhbXBvczsKCgoKCnR5cGVk
ZWYgX19zc2l6ZV90ICAgc3RyZWFtc2l6ZTsKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBfX2ZtdGZs
YWdzOwp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX19pb3N0YXRlOwoKc3RydWN0IF9pb3NfZmllbGRz
CnsgIAogICAgc3RyZWFtYnVmICpfc3RyYnVmOwogICAgb3N0cmVhbSogX3RpZTsKICAgIGludCBf
d2lkdGg7CiAgICBfX2ZtdGZsYWdzIF9mbGFnczsKICAgIHdjaGFyX3QgICBfZmlsbDsKICAgIF9f
aW9zdGF0ZSBfc3RhdGU7CiAgICBfX2lvc3RhdGUgX2V4Y2VwdGlvbnM7CiAgICBpbnQgX3ByZWNp
c2lvbjsKCiAgICB2b2lkICpfYXJyYXlzOyAgCn07CgoKCgoKCgoKCgoKCgoKCiMgMTI0ICIvdXNy
L2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoKY2xhc3MgaW9zIDogcHVibGljIF9pb3NfZmll
bGRzIHsKICBpb3MmIG9wZXJhdG9yPShpb3MmKTsgICAKICBpb3MgKGNvbnN0IGlvcyYpOyAgCiAg
cHVibGljOgogICAgdHlwZWRlZiBfX2ZtdGZsYWdzIGZtdGZsYWdzOwogICAgdHlwZWRlZiBpbnQg
aW9zdGF0ZTsKICAgIHR5cGVkZWYgaW50IG9wZW5tb2RlOwogICAgdHlwZWRlZiBfX3NzaXplX3Qg
ICBzdHJlYW1zaXplOwogICAgZW51bSBpb19zdGF0ZSB7Cglnb29kYml0ID0gMCAsCgllb2ZiaXQg
PSAxICwKCWZhaWxiaXQgPSAyICwKCWJhZGJpdCA9IDQgIH07CiAgICBlbnVtIG9wZW5fbW9kZSB7
CglpbiA9IDEgLAoJb3V0ID0gMiAsCglhdGUgPSA0ICwKCWFwcCA9IDggLAoJdHJ1bmMgPSAxNiAs
Cglub2NyZWF0ZSA9IDMyICwKCW5vcmVwbGFjZSA9IDY0ICwKCWJpbiA9IDEyOCAsICAKCWJpbmFy
eSA9IDEyOCAgfTsKICAgIGVudW0gc2Vla19kaXIgeyBiZWcsIGN1ciwgZW5kfTsKICAgIHR5cGVk
ZWYgZW51bSBzZWVrX2RpciBzZWVrZGlyOwogICAgIAogICAgZW51bSB7IHNraXB3cz0gMDEgLAoJ
ICAgbGVmdD0gMDIgLCByaWdodD0gMDQgLCBpbnRlcm5hbD0gMDEwICwKCSAgIGRlYz0gMDIwICwg
b2N0PSAwNDAgLCBoZXg9IDAxMDAgLAoJICAgc2hvd2Jhc2U9IDAyMDAgLCBzaG93cG9pbnQ9IDA0
MDAgLAoJICAgdXBwZXJjYXNlPSAwMTAwMCAsIHNob3dwb3M9IDAyMDAwICwKCSAgIHNjaWVudGlm
aWM9IDA0MDAwICwgZml4ZWQ9IDAxMDAwMCAsCgkgICB1bml0YnVmPSAwMjAwMDAgLCBzdGRpbz0g
MDQwMDAwIAoKCgoJICAgfTsKICAgIGVudW0geyAgCgliYXNlZmllbGQ9ZGVjK29jdCtoZXgsCglm
bG9hdGZpZWxkID0gc2NpZW50aWZpYytmaXhlZCwKCWFkanVzdGZpZWxkID0gbGVmdCtyaWdodCtp
bnRlcm5hbAogICAgfTsKCiMgMTc3ICIvdXNyL2luY2x1ZGUvZysrL3N0cmVhbWJ1Zi5oIiAzCgoK
ICAgIG9zdHJlYW0qIHRpZSgpIGNvbnN0IHsgcmV0dXJuIF90aWU7IH0KICAgIG9zdHJlYW0qIHRp
ZShvc3RyZWFtKiB2YWwpIHsgb3N0cmVhbSogc2F2ZT1fdGllOyBfdGllPXZhbDsgcmV0dXJuIHNh
dmU7IH0KCiAgICAgCiAgICB3Y2hhcl90ICAgZmlsbCgpIGNvbnN0IHsgcmV0dXJuIF9maWxsOyB9
CiAgICB3Y2hhcl90ICAgZmlsbCh3Y2hhcl90ICAgbmV3ZikKCXt3Y2hhcl90ICAgb2xkZiA9IF9m
aWxsOyBfZmlsbCA9IG5ld2Y7IHJldHVybiBvbGRmO30KICAgIGZtdGZsYWdzIGZsYWdzKCkgY29u
c3QgeyByZXR1cm4gX2ZsYWdzOyB9CiAgICBmbXRmbGFncyBmbGFncyhmbXRmbGFncyBuZXdfdmFs
KSB7CglmbXRmbGFncyBvbGRfdmFsID0gX2ZsYWdzOyBfZmxhZ3MgPSBuZXdfdmFsOyByZXR1cm4g
b2xkX3ZhbDsgfQogICAgaW50IHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9wcmVjaXNpb247
IH0KICAgIGludCBwcmVjaXNpb24oaW50IG5ld3ApIHsKCXVuc2lnbmVkIHNob3J0IG9sZHAgPSBf
cHJlY2lzaW9uOyBfcHJlY2lzaW9uID0gKHVuc2lnbmVkIHNob3J0KW5ld3A7CglyZXR1cm4gb2xk
cDsgfQogICAgZm10ZmxhZ3Mgc2V0ZihmbXRmbGFncyB2YWwpIHsKCWZtdGZsYWdzIG9sZGJpdHMg
PSBfZmxhZ3M7CglfZmxhZ3MgfD0gdmFsOyByZXR1cm4gb2xkYml0czsgfQogICAgZm10ZmxhZ3Mg
c2V0ZihmbXRmbGFncyB2YWwsIGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdzIG9sZGJpdHMgPSBf
ZmxhZ3M7CglfZmxhZ3MgPSAoX2ZsYWdzICYgfm1hc2spIHwgKHZhbCAmIG1hc2spOyByZXR1cm4g
b2xkYml0czsgfQogICAgZm10ZmxhZ3MgdW5zZXRmKGZtdGZsYWdzIG1hc2spIHsKCWZtdGZsYWdz
IG9sZGJpdHMgPSBfZmxhZ3M7CglfZmxhZ3MgJj0gfm1hc2s7IHJldHVybiBvbGRiaXRzOyB9CiAg
ICBpbnQgd2lkdGgoKSBjb25zdCB7IHJldHVybiBfd2lkdGg7IH0KICAgIGludCB3aWR0aChpbnQg
dmFsKSB7IGludCBzYXZlID0gX3dpZHRoOyBfd2lkdGggPSB2YWw7IHJldHVybiBzYXZlOyB9CgoK
CgogICAgdm9pZCBfdGhyb3dfZmFpbHVyZSgpIGNvbnN0IHsgfQoKICAgIHZvaWQgY2xlYXIoaW9z
dGF0ZSBzdGF0ZSA9IDApIHsKCV9zdGF0ZSA9IF9zdHJidWYgPyBzdGF0ZSA6IHN0YXRlfGJhZGJp
dDsKCWlmIChfc3RhdGUgJiBfZXhjZXB0aW9ucykgX3Rocm93X2ZhaWx1cmUoKTsgfQogICAgdm9p
ZCBzZXQoaW9zdGF0ZSBmbGFnKSB7IF9zdGF0ZSB8PSBmbGFnOwoJaWYgKF9zdGF0ZSAmIF9leGNl
cHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CiAgICB2b2lkIHNldHN0YXRlKGlvc3RhdGUgZmxh
ZykgeyBfc3RhdGUgfD0gZmxhZzsgIAoJaWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3df
ZmFpbHVyZSgpOyB9CiAgICBpbnQgZ29vZCgpIGNvbnN0IHsgcmV0dXJuIF9zdGF0ZSA9PSAwOyB9
CiAgICBpbnQgZW9mKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgaW9zOjplb2ZiaXQ7IH0KICAg
IGludCBmYWlsKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlICYgKGlvczo6YmFkYml0fGlvczo6ZmFp
bGJpdCk7IH0KICAgIGludCBiYWQoKSBjb25zdCB7IHJldHVybiBfc3RhdGUgJiBpb3M6OmJhZGJp
dDsgfQogICAgaW9zdGF0ZSByZHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX3N0YXRlOyB9CiAgICBv
cGVyYXRvciB2b2lkKigpIGNvbnN0IHsgcmV0dXJuIGZhaWwoKSA/ICh2b2lkKikwIDogKHZvaWQq
KSgtMSk7IH0KICAgIGludCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiBmYWlsKCk7IH0KICAg
IGlvc3RhdGUgZXhjZXB0aW9ucygpIGNvbnN0IHsgcmV0dXJuIF9leGNlcHRpb25zOyB9CiAgICB2
b2lkIGV4Y2VwdGlvbnMoaW9zdGF0ZSBlbmFibGUpIHsKCV9leGNlcHRpb25zID0gZW5hYmxlOwoJ
aWYgKF9zdGF0ZSAmIF9leGNlcHRpb25zKSBfdGhyb3dfZmFpbHVyZSgpOyB9CgogICAgc3RyZWFt
YnVmKiByZGJ1ZigpIGNvbnN0IHsgcmV0dXJuIF9zdHJidWY7IH0KICAgIHN0cmVhbWJ1ZiogcmRi
dWYoc3RyZWFtYnVmICpfcykgewogICAgICBzdHJlYW1idWYgKl9vbGQgPSBfc3RyYnVmOyBfc3Ry
YnVmID0gX3M7IGNsZWFyICgpOyByZXR1cm4gX29sZDsgfQoKICAgIHN0YXRpYyBpbnQgc3luY193
aXRoX3N0ZGlvKGludCBvbik7CiAgICBzdGF0aWMgdm9pZCBzeW5jX3dpdGhfc3RkaW8oKSB7IHN5
bmNfd2l0aF9zdGRpbygxKTsgfQogICAgc3RhdGljIGZtdGZsYWdzIGJpdGFsbG9jKCk7CiAgICBz
dGF0aWMgaW50IHhhbGxvYygpOwogICAgdm9pZComIHB3b3JkKGludCk7CiAgICB2b2lkKiBwd29y
ZChpbnQpIGNvbnN0OwogICAgbG9uZyYgaXdvcmQoaW50KTsKICAgIGxvbmcgaXdvcmQoaW50KSBj
b25zdDsKCgoKCgoKCgoKICAgICAKICAgIGNsYXNzIEluaXQgewogICAgcHVibGljOgogICAgICBJ
bml0ICgpIHsgfQogICAgfTsKCiAgcHJvdGVjdGVkOgogICAgaW5saW5lIGlvcyhzdHJlYW1idWYq
IHNiID0gMCwgb3N0cmVhbSogdGllX3RvID0gMCk7CiAgICBpbmxpbmUgdmlydHVhbCB+aW9zKCk7
CiAgICBpbmxpbmUgdm9pZCBpbml0KHN0cmVhbWJ1Ziogc2IsIG9zdHJlYW0qIHRpZSA9IDApOwp9
OwoKCgoKdHlwZWRlZiBpb3M6OnNlZWtfZGlyIF9zZWVrX2RpcjsKCgogCiAKIAogCiAKCiAKIApj
bGFzcyBzdHJlYW1tYXJrZXIgOiBwcml2YXRlIF9JT19tYXJrZXIgewogICAgZnJpZW5kIGNsYXNz
IHN0cmVhbWJ1ZjsKICAgIHZvaWQgc2V0X29mZnNldChpbnQgb2Zmc2V0KSB7IF9wb3MgPSBvZmZz
ZXQ7IH0KICBwdWJsaWM6CiAgICBzdHJlYW1tYXJrZXIoc3RyZWFtYnVmICpzYik7CiAgICB+c3Ry
ZWFtbWFya2VyKCk7CiAgICBpbnQgc2F2aW5nKCkgeyByZXR1cm4gIDE7IH0KICAgIGludCBkZWx0
YShzdHJlYW1tYXJrZXImKTsKICAgIGludCBkZWx0YSgpOwp9OwoKc3RydWN0IHN0cmVhbWJ1ZiA6
IHB1YmxpYyBfSU9fRklMRSB7ICAKICAgIGZyaWVuZCBjbGFzcyBpb3M7CiAgICBmcmllbmQgY2xh
c3MgaXN0cmVhbTsKICAgIGZyaWVuZCBjbGFzcyBvc3RyZWFtOwogICAgZnJpZW5kIGNsYXNzIHN0
cmVhbW1hcmtlcjsKICAgIGNvbnN0IHZvaWQgKiZfdnRhYmxlKCkgeyByZXR1cm4gKihjb25zdCB2
b2lkKiopKChfSU9fRklMRSopdGhpcyArIDEpOyB9CiAgcHJvdGVjdGVkOgogICAgc3RhdGljIHN0
cmVhbWJ1ZiogX2xpc3RfYWxsOyAgCiAgICBfSU9fRklMRSomIHhjaGFpbigpIHsgcmV0dXJuIF9j
aGFpbjsgfQogICAgdm9pZCBfdW5fbGluaygpOwogICAgdm9pZCBfbGlua19pbigpOwogICAgY2hh
ciogZ3B0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9mbGFncyAgJiAweDEwMCAgPyBfSU9fc2F2
ZV9iYXNlIDogX0lPX3JlYWRfcHRyOyB9CiAgICBjaGFyKiBwcHRyKCkgY29uc3QgeyByZXR1cm4g
X0lPX3dyaXRlX3B0cjsgfQogICAgY2hhciogZWdwdHIoKSBjb25zdAogICAgICB7IHJldHVybiBf
ZmxhZ3MgICYgMHgxMDAgID8gX0lPX3NhdmVfZW5kIDogX0lPX3JlYWRfZW5kOyB9CiAgICBjaGFy
KiBlcHB0cigpIGNvbnN0IHsgcmV0dXJuIF9JT193cml0ZV9lbmQ7IH0KICAgIGNoYXIqIHBiYXNl
KCkgY29uc3QgeyByZXR1cm4gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIGNoYXIqIGViYWNrKCkgY29u
c3QKICAgICAgeyByZXR1cm4gX2ZsYWdzICAmIDB4MTAwICA/IF9JT19zYXZlX2Jhc2UgOiBfSU9f
cmVhZF9iYXNlO30KICAgIGNoYXIqIGJhc2UoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2Jhc2U7
IH0KICAgIGNoYXIqIGVidWYoKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZDsgfQogICAgaW50
IGJsZW4oKSBjb25zdCB7IHJldHVybiBfSU9fYnVmX2VuZCAtIF9JT19idWZfYmFzZTsgfQogICAg
dm9pZCB4cHV0X2NoYXIoY2hhciBjKSB7ICpfSU9fd3JpdGVfcHRyKysgPSBjOyB9CiAgICBpbnQg
eGZsYWdzKCkgeyByZXR1cm4gX2ZsYWdzIDsgfQogICAgaW50IHhmbGFncyhpbnQgZikge2ludCBm
bCA9IF9mbGFncyA7IF9mbGFncyAgPSBmOyByZXR1cm4gZmw7fQogICAgdm9pZCB4c2V0ZmxhZ3Mo
aW50IGYpIHsgX2ZsYWdzICB8PSBmOyB9CiAgICB2b2lkIHhzZXRmbGFncyhpbnQgZiwgaW50IG1h
c2spCiAgICAgIHsgX2ZsYWdzICA9IChfZmxhZ3MgICYgfm1hc2spIHwgKGYgJiBtYXNrKTsgfQog
ICAgdm9pZCBnYnVtcChpbnQgbikKICAgICAgeyBfZmxhZ3MgICYgMHgxMDAgID8gKF9JT19zYXZl
X2Jhc2UrPW4pOihfSU9fcmVhZF9wdHIrPW4pO30KICAgIHZvaWQgcGJ1bXAoaW50IG4pIHsgX0lP
X3dyaXRlX3B0ciArPSBuOyB9CiAgICB2b2lkIHNldGIoY2hhciogYiwgY2hhciogZWIsIGludCBh
PTApOwogICAgdm9pZCBzZXRwKGNoYXIqIHAsIGNoYXIqIGVwKQogICAgICB7IF9JT193cml0ZV9i
YXNlPV9JT193cml0ZV9wdHI9cDsgX0lPX3dyaXRlX2VuZD1lcDsgfQogICAgdm9pZCBzZXRnKGNo
YXIqIGViLCBjaGFyKiBnLCBjaGFyICplZykgewogICAgICBpZiAoX2ZsYWdzICAmIDB4MTAwICkg
X0lPX2ZyZWVfYmFja3VwX2FyZWEodGhpcyk7IAogICAgICBfSU9fcmVhZF9iYXNlID0gZWI7IF9J
T19yZWFkX3B0ciA9IGc7IF9JT19yZWFkX2VuZCA9IGVnOyB9CiAgICBjaGFyICpzaG9ydGJ1Zigp
IHsgcmV0dXJuIF9zaG9ydGJ1ZjsgfQoKICAgIGludCBpbl9iYWNrdXAoKSB7IHJldHVybiBfZmxh
Z3MgJiAweDEwMCA7IH0KICAgICAKICAgIGNoYXIgKkdiYXNlKCkgeyByZXR1cm4gaW5fYmFja3Vw
KCkgPyBfSU9fc2F2ZV9iYXNlIDogX0lPX3JlYWRfYmFzZTsgfQogICAgIAogICAgY2hhciAqZUdw
dHIoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19zYXZlX2VuZCA6IF9JT19yZWFkX2VuZDsg
fQogICAgIAogICAgY2hhciAqQmJhc2UoKSB7IHJldHVybiBpbl9iYWNrdXAoKSA/IF9JT19yZWFk
X2Jhc2UgOiBfSU9fc2F2ZV9iYXNlOyB9CiAgICBjaGFyICpCcHRyKCkgeyByZXR1cm4gX0lPX2Jh
Y2t1cF9iYXNlOyB9CiAgICAgCiAgICBjaGFyICplQnB0cigpIHsgcmV0dXJuIGluX2JhY2t1cCgp
ID8gX0lPX3JlYWRfZW5kIDogX0lPX3NhdmVfZW5kOyB9CiAgICBjaGFyICpOYmFzZSgpIHsgcmV0
dXJuIF9JT19zYXZlX2Jhc2U7IH0KICAgIGNoYXIgKmVOcHRyKCkgeyByZXR1cm4gX0lPX3NhdmVf
ZW5kOyB9CiAgICBpbnQgaGF2ZV9iYWNrdXAoKSB7IHJldHVybiBfSU9fc2F2ZV9iYXNlICE9IF9f
bnVsbCA7IH0KICAgIGludCBoYXZlX21hcmtlcnMoKSB7IHJldHVybiBfbWFya2VycyAhPSBfX251
bGwgOyB9CiAgICB2b2lkIGZyZWVfYmFja3VwX2FyZWEoKTsKICAgIHZvaWQgdW5zYXZlX21hcmtl
cnMoKTsgIAogICAgaW50IHB1dF9tb2RlKCkgeyByZXR1cm4gX2ZsYWdzICYgMHg4MDAgOyB9CiAg
ICBpbnQgc3dpdGNoX3RvX2dldF9tb2RlKCk7CiAgICAKICAgIHN0cmVhbWJ1ZihpbnQgZmxhZ3M9
MCk7CiAgcHVibGljOgogICAgc3RhdGljIGludCBmbHVzaF9hbGwoKTsKICAgIHN0YXRpYyB2b2lk
IGZsdXNoX2FsbF9saW5lYnVmZmVyZWQoKTsgIAogICAgdmlydHVhbCB+c3RyZWFtYnVmKCk7CiAg
ICB2aXJ0dWFsIGludCBvdmVyZmxvdyhpbnQgYyA9ICgtMSkgKTsgIAogICAgdmlydHVhbCBpbnQg
dW5kZXJmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50IHVmbG93KCk7ICAKICAgIHZpcnR1YWwgaW50
IHBiYWNrZmFpbChpbnQgYyk7CiAKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3Qg
Y2hhciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSB4c2dldG4oY2hh
ciogcywgc3RyZWFtc2l6ZSBuKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHNlZWtvZmYoc3RyZWFt
b2ZmLCBfc2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgdmlydHVhbCBz
dHJlYW1wb3Mgc2Vla3BvcyhzdHJlYW1wb3MgcG9zLCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpv
dXQpOwoKICAgIHN0cmVhbXBvcyBwdWJzZWVrb2ZmKHN0cmVhbW9mZiBvLCBfc2Vla19kaXIgZCwg
aW50IG1vZGU9aW9zOjppbnxpb3M6Om91dCkKICAgICAgeyByZXR1cm4gX0lPX3NlZWtvZmYgKHRo
aXMsIG8sIGQsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3MgcHVic2Vla3BvcyhzdHJlYW1wb3MgcG9z
LCBpbnQgbW9kZSA9IGlvczo6aW58aW9zOjpvdXQpCiAgICAgIHsgcmV0dXJuIF9JT19zZWVrcG9z
ICh0aGlzLCBwb3MsIG1vZGUpOyB9CiAgICBzdHJlYW1wb3Mgc3NlZWtvZmYoc3RyZWFtb2ZmLCBf
c2Vla19kaXIsIGludCBtb2RlPWlvczo6aW58aW9zOjpvdXQpOwogICAgc3RyZWFtcG9zIHNzZWVr
cG9zKHN0cmVhbXBvcyBwb3MsIGludCBtb2RlID0gaW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0
dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIqIHAsIGludCBsZW4pOwogICAgdmlydHVhbCBpbnQg
c3luYygpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwoKICAgIGludCBzZWVrbWFyayhz
dHJlYW1tYXJrZXImIG1hcmssIGludCBkZWx0YSA9IDApOwogICAgaW50IHNwdXRiYWNrYyhjaGFy
IGMpOwogICAgaW50IHN1bmdldGMoKTsKICAgIGludCB1bmJ1ZmZlcmVkKCkgeyByZXR1cm4gX2Zs
YWdzICYgMiAgPyAxIDogMDsgfQogICAgaW50IGxpbmVidWZmZXJlZCgpIHsgcmV0dXJuIF9mbGFn
cyAmIDB4MjAwICA/IDEgOiAwOyB9CiAgICB2b2lkIHVuYnVmZmVyZWQoaW50IGkpCgl7IGlmIChp
KSBfZmxhZ3MgfD0gMiA7IGVsc2UgX2ZsYWdzICY9IH4yIDsgfQogICAgdm9pZCBsaW5lYnVmZmVy
ZWQoaW50IGkpCgl7IGlmIChpKSBfZmxhZ3MgfD0gMHgyMDAgOyBlbHNlIF9mbGFncyAmPSB+MHgy
MDAgOyB9CiAgICBpbnQgYWxsb2NhdGUoKSB7ICAKCWlmIChiYXNlKCkgfHwgdW5idWZmZXJlZCgp
KSByZXR1cm4gMDsKCWVsc2UgcmV0dXJuIGRvYWxsb2NhdGUoKTsgfQogICAgIAogICAgdm9pZCBh
bGxvY2J1ZigpIHsgaWYgKGJhc2UoKSA9PSBfX251bGwgKSBkb2FsbG9jYnVmKCk7IH0KICAgIHZv
aWQgZG9hbGxvY2J1ZigpOwogICAgaW50IGluX2F2YWlsKCkgeyByZXR1cm4gX0lPX3JlYWRfZW5k
IC0gX0lPX3JlYWRfcHRyOyB9CiAgICBpbnQgb3V0X3dhaXRpbmcoKSB7IHJldHVybiBfSU9fd3Jp
dGVfcHRyIC0gX0lPX3dyaXRlX2Jhc2U7IH0KICAgIHN0cmVhbXNpemUgc3B1dG4oY29uc3QgY2hh
ciogcywgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiB4c3B1dG4ocywgbik7IH0KICAgIHN0cmVhbXNp
emUgcGFkbihjaGFyIHBhZCwgc3RyZWFtc2l6ZSBuKSB7IHJldHVybiBfSU9fcGFkbih0aGlzLCBw
YWQsIG4pOyB9CiAgICBzdHJlYW1zaXplIHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbikgeyBy
ZXR1cm4gX0lPX3NnZXRuKHRoaXMsIHMsIG4pOyB9CiAgICBpbnQgaWdub3JlKGludCk7CiAgICBp
bnQgZ2V0X2NvbHVtbigpOwogICAgaW50IHNldF9jb2x1bW4oaW50KTsKICAgIGxvbmcgc2dldGxp
bmUoY2hhciogYnVmLCBzaXplX3QgICBuLCBjaGFyIGRlbGltLCBpbnQgcHV0YmFja19kZWxpbSk7
CiAgICBpbnQgc3B1dGMoaW50IGMpIHsgcmV0dXJuIF9JT19wdXRjKGMsIHRoaXMpOyB9CiAgICBp
bnQgc2J1bXBjKCkgeyByZXR1cm4gX0lPX2dldGModGhpcyk7IH0KICAgIGludCBzZ2V0YygpIHsg
cmV0dXJuICgoICB0aGlzICApLT5fSU9fcmVhZF9wdHIgPj0gKCAgdGhpcyAgKS0+X0lPX3JlYWRf
ZW5kICYmIF9fdW5kZXJmbG93ICggIHRoaXMgICkgPT0gKC0xKSAgPyAoLTEpICA6ICoodW5zaWdu
ZWQgY2hhciAqKSAoICB0aGlzICApLT5fSU9fcmVhZF9wdHIpICA7IH0KICAgIGludCBzbmV4dGMo
KSB7CglpZiAoX0lPX3JlYWRfcHRyID49IF9JT19yZWFkX2VuZCAmJiBfX3VuZGVyZmxvdyh0aGlz
KSA9PSAoLTEpICkKCSAgcmV0dXJuICgtMSkgOwoJZWxzZSByZXR1cm4gX0lPX3JlYWRfcHRyKyss
IHNnZXRjKCk7IH0KICAgIHZvaWQgc3Rvc3NjKCkgeyBpZiAoX0lPX3JlYWRfcHRyIDwgX0lPX3Jl
YWRfZW5kKSBfSU9fcmVhZF9wdHIrKzsgfQogICAgaW50IHZzY2FuKGNoYXIgY29uc3QgKmZtdDAs
IF9fZ251Y192YV9saXN0ICBhcCwgaW9zKiBzdHJlYW0gPSBfX251bGwgKTsKICAgIGludCBzY2Fu
KGNoYXIgY29uc3QgKmZtdDAgLi4uKTsKICAgIGludCB2Zm9ybShjaGFyIGNvbnN0ICpmbXQwLCBf
X2dudWNfdmFfbGlzdCAgYXApOwogICAgaW50IGZvcm0oY2hhciBjb25zdCAqZm10MCAuLi4pOwoK
CgoKICAgIHZpcnR1YWwgc3RyZWFtc2l6ZSBzeXNfcmVhZChjaGFyKiBidWYsIHN0cmVhbXNpemUg
c2l6ZSk7CiAgICB2aXJ0dWFsIHN0cmVhbXNpemUgc3lzX3dyaXRlKGNvbnN0IGNoYXIqLCBzdHJl
YW1zaXplKTsKICAgIHZpcnR1YWwgc3RyZWFtcG9zIHN5c19zZWVrKHN0cmVhbW9mZiwgX3NlZWtf
ZGlyKTsKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwogICAgdmlydHVhbCBpbnQgc3lzX3N0
YXQodm9pZCopOyAgCgogICAgdmlydHVhbCBpbnQgc2hvd21hbnljKCk7CiAgICB2aXJ0dWFsIHZv
aWQgaW1idWUodm9pZCAqKTsKCn07CgogCiAKCmNsYXNzIGZpbGVidWYgOiBwdWJsaWMgc3RyZWFt
YnVmIHsKICBwcm90ZWN0ZWQ6CiAgICB2b2lkIGluaXQoKTsKICBwdWJsaWM6CiAgICBzdGF0aWMg
Y29uc3QgaW50IG9wZW5wcm90OyAgCiAgICBmaWxlYnVmKCk7CiAgICBmaWxlYnVmKGludCBmZCk7
CiAgICBmaWxlYnVmKGludCBmZCwgY2hhciogcCwgaW50IGxlbik7CgoKCiAgICB+ZmlsZWJ1Zigp
OwogICAgZmlsZWJ1ZiogYXR0YWNoKGludCBmZCk7CiAgICBmaWxlYnVmKiBvcGVuKGNvbnN0IGNo
YXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICptb2RlKTsKICAgIGZpbGVidWYqIG9wZW4oY29uc3Qg
Y2hhciAqZmlsZW5hbWUsIGlvczo6b3Blbm1vZGUgbW9kZSwgaW50IHByb3QgPSAwNjY0KTsKICAg
IHZpcnR1YWwgaW50IHVuZGVyZmxvdygpOwogICAgdmlydHVhbCBpbnQgb3ZlcmZsb3coaW50IGMg
PSAoLTEpICk7CiAgICBpbnQgaXNfb3BlbigpIGNvbnN0IHsgcmV0dXJuIF9maWxlbm8gPj0gMDsg
fQogICAgaW50IGZkKCkgY29uc3QgeyByZXR1cm4gaXNfb3BlbigpID8gX2ZpbGVubyA6ICgtMSkg
OyB9CiAgICBmaWxlYnVmKiBjbG9zZSgpOwogICAgdmlydHVhbCBpbnQgZG9hbGxvY2F0ZSgpOwog
ICAgdmlydHVhbCBzdHJlYW1wb3Mgc2Vla29mZihzdHJlYW1vZmYsIF9zZWVrX2RpciwgaW50IG1v
ZGU9aW9zOjppbnxpb3M6Om91dCk7CiAgICB2aXJ0dWFsIHN0cmVhbWJ1Ziogc2V0YnVmKGNoYXIq
IHAsIGludCBsZW4pOwogICAgc3RyZWFtc2l6ZSB4c3B1dG4oY29uc3QgY2hhciogcywgc3RyZWFt
c2l6ZSBuKTsKICAgIHN0cmVhbXNpemUgeHNnZXRuKGNoYXIqIHMsIHN0cmVhbXNpemUgbik7CiAg
ICB2aXJ0dWFsIGludCBzeW5jKCk7CiAgcHJvdGVjdGVkOiAgCiAKICAgIGludCBpc19yZWFkaW5n
KCkgeyByZXR1cm4gZWJhY2soKSAhPSBlZ3B0cigpOyB9CiAgICBjaGFyKiBjdXJfcHRyKCkgeyBy
ZXR1cm4gaXNfcmVhZGluZygpID8gIGdwdHIoKSA6IHBwdHIoKTsgfQogICAgIAogICAgY2hhciog
ZmlsZV9wdHIoKSB7IHJldHVybiBlR3B0cigpOyB9CiAgICAgCiAgICB2aXJ0dWFsIHN0cmVhbXNp
emUgc3lzX3JlYWQoY2hhciogYnVmLCBzdHJlYW1zaXplIHNpemUpOwogICAgdmlydHVhbCBzdHJl
YW1wb3Mgc3lzX3NlZWsoc3RyZWFtb2ZmLCBfc2Vla19kaXIpOwogICAgdmlydHVhbCBzdHJlYW1z
aXplIHN5c193cml0ZShjb25zdCBjaGFyKiwgc3RyZWFtc2l6ZSk7CiAgICB2aXJ0dWFsIGludCBz
eXNfc3RhdCh2b2lkKik7ICAKICAgIHZpcnR1YWwgaW50IHN5c19jbG9zZSgpOwoKCgoKfTsKCmlu
bGluZSB2b2lkIGlvczo6aW5pdChzdHJlYW1idWYqIHNiLCBvc3RyZWFtKiB0aWVfdG8pIHsKCQlf
c3RhdGUgPSBzYiA/IGlvczo6Z29vZGJpdCA6IGlvczo6YmFkYml0OyBfZXhjZXB0aW9ucz0wOwoJ
CV9zdHJidWY9c2I7IF90aWUgPSB0aWVfdG87IF93aWR0aD0wOyBfZmlsbD0nICc7CgoJCV9mbGFn
cz1pb3M6OnNraXB3c3xpb3M6OmRlYzsKCgoKCQlfcHJlY2lzaW9uPTY7IF9hcnJheXMgPSAwOyB9
CgppbmxpbmUgaW9zOjppb3Moc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllX3RvKSB7IGluaXQo
c2IsIHRpZV90byk7IH0KCmlubGluZSBpb3M6On5pb3MoKSB7CgoKCiAgICAgCiAgICAgCiAgICBv
cGVyYXRvciBkZWxldGVbXSAoX2FycmF5cyk7Cn0KfSAgCgojIDMxICIvdXNyL2luY2x1ZGUvZysr
L2lvc3RyZWFtLmgiIDIgMwoKCmV4dGVybiAiQysrIiB7CmNsYXNzIGlzdHJlYW07IGNsYXNzIG9z
dHJlYW07CnR5cGVkZWYgaW9zJiAoKl9fbWFuaXApKGlvcyYpOwp0eXBlZGVmIGlzdHJlYW0mICgq
X19pbWFuaXApKGlzdHJlYW0mKTsKdHlwZWRlZiBvc3RyZWFtJiAoKl9fb21hbmlwKShvc3RyZWFt
Jik7CgpleHRlcm4gaXN0cmVhbSYgd3MoaXN0cmVhbSYgaW5zKTsKZXh0ZXJuIG9zdHJlYW0mIGZs
dXNoKG9zdHJlYW0mIG91dHMpOwpleHRlcm4gb3N0cmVhbSYgZW5kbChvc3RyZWFtJiBvdXRzKTsK
ZXh0ZXJuIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYgb3V0cyk7CgpjbGFzcyBvc3RyZWFtIDogdmly
dHVhbCBwdWJsaWMgaW9zCnsKICAgICAKICAgIHZvaWQgZG9fb3NmeCgpOwogIHB1YmxpYzoKICAg
IG9zdHJlYW0oKSB7IH0KICAgIG9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSogdGllZD0g
X19udWxsICk7CiAgICBpbnQgb3BmeCgpIHsKCWlmICghZ29vZCgpKSByZXR1cm4gMDsKCWVsc2Ug
eyBpZiAoX3RpZSkgX3RpZS0+Zmx1c2goKTsgIDsgcmV0dXJuIDE7fSB9CiAgICB2b2lkIG9zZngo
KSB7ICA7CgkJICBpZiAoZmxhZ3MoKSAmIChpb3M6OnVuaXRidWZ8aW9zOjpzdGRpbykpCgkJICAg
ICAgZG9fb3NmeCgpOyB9CiAgICBvc3RyZWFtJiBmbHVzaCgpOwogICAgb3N0cmVhbSYgcHV0KGNo
YXIgYykgeyBfc3RyYnVmLT5zcHV0YyhjKTsgcmV0dXJuICp0aGlzOyB9CgoKCgoKICAgIG9zdHJl
YW0mIHdyaXRlKGNvbnN0IGNoYXIgKnMsIHN0cmVhbXNpemUgbik7CiAgICBvc3RyZWFtJiB3cml0
ZShjb25zdCB1bnNpZ25lZCBjaGFyICpzLCBzdHJlYW1zaXplIG4pCiAgICAgIHsgcmV0dXJuIHdy
aXRlKChjb25zdCBjaGFyKilzLCBuKTt9CiAgICBvc3RyZWFtJiB3cml0ZShjb25zdCBzaWduZWQg
Y2hhciAqcywgc3RyZWFtc2l6ZSBuKQogICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciop
cywgbik7fQogICAgb3N0cmVhbSYgd3JpdGUoY29uc3Qgdm9pZCAqcywgc3RyZWFtc2l6ZSBuKQog
ICAgICB7IHJldHVybiB3cml0ZSgoY29uc3QgY2hhciopcywgbik7fQogICAgb3N0cmVhbSYgc2Vl
a3Aoc3RyZWFtcG9zKTsKICAgIG9zdHJlYW0mIHNlZWtwKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsK
ICAgIHN0cmVhbXBvcyB0ZWxscCgpOwogICAgb3N0cmVhbSYgZm9ybShjb25zdCBjaGFyICpmb3Jt
YXQgLi4uKTsKICAgIG9zdHJlYW0mIHZmb3JtKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3Zh
X2xpc3QgIGFyZ3MpOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY2hhciBjKTsKICAgIG9zdHJl
YW0mIG9wZXJhdG9yPDwodW5zaWduZWQgY2hhciBjKSB7IHJldHVybiAoKnRoaXMpIDw8IChjaGFy
KWM7IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2lnbmVkIGNoYXIgYykgeyByZXR1cm4gKCp0
aGlzKSA8PCAoY2hhciljOyB9CiAgICBvc3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IGNoYXIgKnMp
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoJeyByZXR1
cm4gKCp0aGlzKSA8PCAoY29uc3QgY2hhciopczsgfQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChj
b25zdCBzaWduZWQgY2hhciAqcykKCXsgcmV0dXJuICgqdGhpcykgPDwgKGNvbnN0IGNoYXIqKXM7
IH0KICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoY29uc3Qgdm9pZCAqcCk7CiAgICBvc3RyZWFtJiBv
cGVyYXRvcjw8KGludCBuKTsKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IG4p
OwogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChsb25nIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PCh1bnNpZ25lZCBsb25nIG4pOwoKICAgIF9fZXh0ZW5zaW9uX18gb3N0cmVhbSYgb3BlcmF0b3I8
PChsb25nIGxvbmcgbik7CiAgICBfX2V4dGVuc2lvbl9fIG9zdHJlYW0mIG9wZXJhdG9yPDwodW5z
aWduZWQgbG9uZyBsb25nIG4pOwoKICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoc2hvcnQgbikge3Jl
dHVybiBvcGVyYXRvcjw8KChpbnQpbik7fQogICAgb3N0cmVhbSYgb3BlcmF0b3I8PCh1bnNpZ25l
ZCBzaG9ydCBuKSB7cmV0dXJuIG9wZXJhdG9yPDwoKHVuc2lnbmVkIGludCluKTt9CgogICAgb3N0
cmVhbSYgb3BlcmF0b3I8PChib29sIGIpIHsgcmV0dXJuIG9wZXJhdG9yPDwoKGludCliKTsgfQoK
ICAgIG9zdHJlYW0mIG9wZXJhdG9yPDwoZG91YmxlIG4pOwogICAgb3N0cmVhbSYgb3BlcmF0b3I8
PChmbG9hdCBuKSB7IHJldHVybiBvcGVyYXRvcjw8KChkb3VibGUpbik7IH0KCiAgICBvc3RyZWFt
JiBvcGVyYXRvcjw8KGxvbmcgZG91YmxlIG4pOwoKCgogICAgb3N0cmVhbSYgb3BlcmF0b3I8PChf
X29tYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgb3N0cmVhbSYgb3Bl
cmF0b3I8PChfX21hbmlwIGZ1bmMpIHsoKmZ1bmMpKCp0aGlzKTsgcmV0dXJuICp0aGlzO30KICAg
IG9zdHJlYW0mIG9wZXJhdG9yPDwoc3RyZWFtYnVmKik7CgoKCn07CgpjbGFzcyBpc3RyZWFtIDog
dmlydHVhbCBwdWJsaWMgaW9zCnsKICAgICAKcHJvdGVjdGVkOgogICAgc2l6ZV90ICAgX2djb3Vu
dDsKCiAgICBpbnQgX3NraXBfd3MoKTsKICBwdWJsaWM6CiAgICBpc3RyZWFtKCk6IF9nY291bnQg
KDApIHsgfQogICAgaXN0cmVhbShzdHJlYW1idWYqIHNiLCBvc3RyZWFtKnRpZWQ9IF9fbnVsbCAp
OwogICAgaXN0cmVhbSYgZ2V0KGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicp
OwogICAgaXN0cmVhbSYgZ2V0KHVuc2lnbmVkIGNoYXIqIHB0ciwgaW50IGxlbiwgY2hhciBkZWxp
bSA9ICdcbicpCgl7IHJldHVybiBnZXQoKGNoYXIqKXB0ciwgbGVuLCBkZWxpbSk7IH0KICAgIGlz
dHJlYW0mIGdldChjaGFyJiBjKTsKICAgIGlzdHJlYW0mIGdldCh1bnNpZ25lZCBjaGFyJiBjKSB7
IHJldHVybiBnZXQoKGNoYXImKWMpOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKGNoYXIqIHB0ciwg
aW50IGxlbiwgY2hhciBkZWxpbSA9ICdcbicpOwogICAgaXN0cmVhbSYgZ2V0bGluZSh1bnNpZ25l
ZCBjaGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGlu
ZSgoY2hhciopcHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBjaGFy
JiBjKSAgeyByZXR1cm4gZ2V0KChjaGFyJiljKTsgfQogICAgaXN0cmVhbSYgZ2V0KHNpZ25lZCBj
aGFyKiBwdHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0KChjaGFy
KilwdHIsIGxlbiwgZGVsaW0pOyB9CiAgICBpc3RyZWFtJiBnZXRsaW5lKHNpZ25lZCBjaGFyKiBw
dHIsIGludCBsZW4sIGNoYXIgZGVsaW0gPSAnXG4nKQoJeyByZXR1cm4gZ2V0bGluZSgoY2hhciop
cHRyLCBsZW4sIGRlbGltKTsgfQogICAgaXN0cmVhbSYgcmVhZChjaGFyICpwdHIsIHN0cmVhbXNp
emUgbik7CiAgICBpc3RyZWFtJiByZWFkKHVuc2lnbmVkIGNoYXIgKnB0ciwgc3RyZWFtc2l6ZSBu
KQogICAgICB7IHJldHVybiByZWFkKChjaGFyKilwdHIsIG4pOyB9CiAgICBpc3RyZWFtJiByZWFk
KHNpZ25lZCBjaGFyICpwdHIsIHN0cmVhbXNpemUgbikKICAgICAgeyByZXR1cm4gcmVhZCgoY2hh
ciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgcmVhZCh2b2lkICpwdHIsIHN0cmVhbXNpemUgbikK
ICAgICAgeyByZXR1cm4gcmVhZCgoY2hhciopcHRyLCBuKTsgfQogICAgaXN0cmVhbSYgZ2V0KHN0
cmVhbWJ1ZiYgc2IsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGlzdHJlYW0mIGdldHMoY2hhciAq
KnMsIGNoYXIgZGVsaW0gPSAnXG4nKTsKICAgIGludCBpcGZ4KGludCBuZWVkID0gMCkgewoJaWYg
KCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsK
CSAgaWYgKF90aWUgJiYgKG5lZWQgPT0gMCB8fCByZGJ1ZigpLT5pbl9hdmFpbCgpIDwgbmVlZCkp
IF90aWUtPmZsdXNoKCk7CgkgIGlmICghbmVlZCAmJiAoZmxhZ3MoKSAmIGlvczo6c2tpcHdzKSkg
cmV0dXJuIF9za2lwX3dzKCk7CgkgIGVsc2UgcmV0dXJuIDE7Cgl9CiAgICB9CiAgICBpbnQgaXBm
eDAoKSB7ICAKCWlmICghZ29vZCgpKSB7IHNldChpb3M6OmZhaWxiaXQpOyByZXR1cm4gMDsgfQoJ
ZWxzZSB7CgkgICA7CgkgIGlmIChfdGllKSBfdGllLT5mbHVzaCgpOwoJICBpZiAoZmxhZ3MoKSAm
IGlvczo6c2tpcHdzKSByZXR1cm4gX3NraXBfd3MoKTsKCSAgZWxzZSByZXR1cm4gMTsKCX0KICAg
IH0KICAgIGludCBpcGZ4MSgpIHsgIAoJaWYgKCFnb29kKCkpIHsgc2V0KGlvczo6ZmFpbGJpdCk7
IHJldHVybiAwOyB9CgllbHNlIHsKCSAgIDsKCSAgaWYgKF90aWUgJiYgcmRidWYoKS0+aW5fYXZh
aWwoKSA9PSAwKSBfdGllLT5mbHVzaCgpOwoJICByZXR1cm4gMTsKCX0KICAgIH0KICAgIHZvaWQg
aXNmeCgpIHsgIDsgfQogICAgaW50IGdldCgpIHsgaWYgKCFpcGZ4MSgpKSByZXR1cm4gKC0xKSA7
CgkJZWxzZSB7IGludCBjaCA9IF9zdHJidWYtPnNidW1wYygpOwoJCSAgICAgICBpZiAoY2ggPT0g
KC0xKSApIHNldChpb3M6OmVvZmJpdCk7CgkJICAgICAgIGlzZngoKTsKCQkgICAgICAgcmV0dXJu
IGNoOwoJCSAgICAgfSB9CiAgICBpbnQgcGVlaygpOwogICAgc2l6ZV90ICAgZ2NvdW50KCkgeyBy
ZXR1cm4gX2djb3VudDsgfQogICAgaXN0cmVhbSYgaWdub3JlKGludCBuPTEsIGludCBkZWxpbSA9
ICgtMSkgKTsKICAgIGludCBzeW5jICgpOwogICAgaXN0cmVhbSYgc2Vla2coc3RyZWFtcG9zKTsK
ICAgIGlzdHJlYW0mIHNlZWtnKHN0cmVhbW9mZiwgX3NlZWtfZGlyKTsKICAgIHN0cmVhbXBvcyB0
ZWxsZygpOwogICAgaXN0cmVhbSYgcHV0YmFjayhjaGFyIGNoKSB7CglpZiAoZ29vZCgpICYmIF9z
dHJidWYtPnNwdXRiYWNrYyhjaCkgPT0gKC0xKSApIGNsZWFyKGlvczo6YmFkYml0KTsKCXJldHVy
biAqdGhpczt9CiAgICBpc3RyZWFtJiB1bmdldCgpIHsKCWlmIChnb29kKCkgJiYgX3N0cmJ1Zi0+
c3VuZ2V0YygpID09ICgtMSkgKSBjbGVhcihpb3M6OmJhZGJpdCk7CglyZXR1cm4gKnRoaXM7fQog
ICAgaXN0cmVhbSYgc2Nhbihjb25zdCBjaGFyICpmb3JtYXQgLi4uKTsKICAgIGlzdHJlYW0mIHZz
Y2FuKGNvbnN0IGNoYXIgKmZvcm1hdCwgX19nbnVjX3ZhX2xpc3QgIGFyZ3MpOwoKCgoKCgogICAg
aXN0cmVhbSYgb3BlcmF0b3I+PihjaGFyKik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2ln
bmVkIGNoYXIqIHApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXApOyB9CiAgICBpc3RyZWFt
JiBvcGVyYXRvcj4+KHNpZ25lZCBjaGFyKnApIHsgcmV0dXJuIG9wZXJhdG9yPj4oKGNoYXIqKXAp
OyB9CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KGNoYXImIGMpOwogICAgaXN0cmVhbSYgb3BlcmF0
b3I+Pih1bnNpZ25lZCBjaGFyJiBjKSB7cmV0dXJuIG9wZXJhdG9yPj4oKGNoYXImKWMpO30KICAg
IGlzdHJlYW0mIG9wZXJhdG9yPj4oc2lnbmVkIGNoYXImIGMpIHtyZXR1cm4gb3BlcmF0b3I+Pigo
Y2hhciYpYyk7fQogICAgaXN0cmVhbSYgb3BlcmF0b3I+PihpbnQmKTsKICAgIGlzdHJlYW0mIG9w
ZXJhdG9yPj4obG9uZyYpOwoKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pihs
b25nIGxvbmcmKTsKICAgIF9fZXh0ZW5zaW9uX18gaXN0cmVhbSYgb3BlcmF0b3I+Pih1bnNpZ25l
ZCBsb25nIGxvbmcmKTsKCiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHNob3J0Jik7CiAgICBpc3Ry
ZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pih1
bnNpZ25lZCBsb25nJik7CiAgICBpc3RyZWFtJiBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0Jik7
CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihib29sJik7CgogICAgaXN0cmVhbSYgb3BlcmF0b3I+
PihmbG9hdCYpOwogICAgaXN0cmVhbSYgb3BlcmF0b3I+Pihkb3VibGUmKTsKICAgIGlzdHJlYW0m
IG9wZXJhdG9yPj4obG9uZyBkb3VibGUmKTsKICAgIGlzdHJlYW0mIG9wZXJhdG9yPj4oIF9fbWFu
aXAgZnVuYykgeygqZnVuYykoKnRoaXMpOyByZXR1cm4gKnRoaXM7fQogICAgaXN0cmVhbSYgb3Bl
cmF0b3I+PihfX2ltYW5pcCBmdW5jKSB7IHJldHVybiAoKmZ1bmMpKCp0aGlzKTsgfQogICAgaXN0
cmVhbSYgb3BlcmF0b3I+PihzdHJlYW1idWYqKTsKfTsKCmNsYXNzIGlvc3RyZWFtIDogcHVibGlj
IGlzdHJlYW0sIHB1YmxpYyBvc3RyZWFtCnsKICBwdWJsaWM6CiAgICBpb3N0cmVhbSgpIHsgfQog
ICAgaW9zdHJlYW0oc3RyZWFtYnVmKiBzYiwgb3N0cmVhbSp0aWVkPSBfX251bGwgKTsKfTsKCmNs
YXNzIF9JT19pc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgaXN0cmVhbSB7CnB1YmxpYzoKICBf
SU9faXN0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0oaXN0cmVhbSYpOwogIF9JT19pc3RyZWFt
X3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9faXN0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7
IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PGlzdHJlYW0mPiAocmhzKSk7IH0KfTsKCmNs
YXNzIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gOiBwdWJsaWMgb3N0cmVhbSB7CnB1YmxpYzoKICBf
SU9fb3N0cmVhbV93aXRoYXNzaWduJiBvcGVyYXRvcj0ob3N0cmVhbSYpOwogIF9JT19vc3RyZWFt
X3dpdGhhc3NpZ24mIG9wZXJhdG9yPShfSU9fb3N0cmVhbV93aXRoYXNzaWduJiByaHMpCiAgICB7
IHJldHVybiBvcGVyYXRvcj0gKHN0YXRpY19jYXN0PG9zdHJlYW0mPiAocmhzKSk7IH0KfTsKCmV4
dGVybiBfSU9faXN0cmVhbV93aXRoYXNzaWduIGNpbjsKIApleHRlcm4gX0lPX29zdHJlYW1fd2l0
aGFzc2lnbiBjb3V0LCBjZXJyOwoKZXh0ZXJuIF9JT19vc3RyZWFtX3dpdGhhc3NpZ24gY2xvZwoK
Cgo7CgpleHRlcm4gaXN0cmVhbSYgbG9jayhpc3RyZWFtJiBpbnMpOwpleHRlcm4gaXN0cmVhbSYg
dW5sb2NrKGlzdHJlYW0mIGlucyk7CmV4dGVybiBvc3RyZWFtJiBsb2NrKG9zdHJlYW0mIG91dHMp
OwpleHRlcm4gb3N0cmVhbSYgdW5sb2NrKG9zdHJlYW0mIG91dHMpOwoKc3RydWN0IElvc3RyZWFt
X2luaXQgeyB9IDsgICAKCmlubGluZSBpb3MmIGRlYyhpb3MmIGkpCnsgaS5zZXRmKGlvczo6ZGVj
LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9CmlubGluZSBpb3MmIGhl
eChpb3MmIGkpCnsgaS5zZXRmKGlvczo6aGV4LCBpb3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7
IHJldHVybiBpOyB9CmlubGluZSBpb3MmIG9jdChpb3MmIGkpCnsgaS5zZXRmKGlvczo6b2N0LCBp
b3M6OmRlY3xpb3M6OmhleHxpb3M6Om9jdCk7IHJldHVybiBpOyB9Cn0gIAoKCiMgNTMgIi91c3Iv
aW5jbHVkZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKysv
c3RsX2l0ZXJhdG9yLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAK
CnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0b3JfdGFn
IHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRlcmF0b3Jf
dGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgZm9yd2Fy
ZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyA6IHB1
YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCiAKIAogCiAKCnRlbXBsYXRlIDxj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGlucHV0X2l0ZXJhdG9yIHsKICB0eXBl
ZGVmIGlucHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAg
ICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlICAgICAgICAgIGRp
ZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAgICAgICAgICBwb2ludGVyOwogIHR5
cGVkZWYgX1RwJiAgICAgICAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnN0cnVjdCBvdXRwdXRfaXRl
cmF0b3IgewogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK
ICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQg
ICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAg
ICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7Cn07
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+IHN0cnVjdCBmb3J3YXJkX2l0
ZXJhdG9yIHsKICB0eXBlZGVmIGZvcndhcmRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5
OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIF9E
aXN0YW5jZSAgICAgICAgICAgIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogICAgICAg
ICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmICAgICAgICAgICAgICAgICByZWZlcmVu
Y2U7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgYmlk
aXJlY3Rpb25hbF9pdGVyYXRvciB7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3Rh
ZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJl
bmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwog
IHR5cGVkZWYgX1RwJiAgICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKdGVtcGxh
dGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgcmFuZG9tX2FjY2Vzc19pdGVy
YXRvciB7CiAgdHlwZWRlZiByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl
Z29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAg
dHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlw
ZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiAg
ICAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIyA5OCAiL3Vzci9pbmNsdWRlL2cr
Ky9zdGxfaXRlcmF0b3IuaCIgMwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4Kc3RydWN0
IGl0ZXJhdG9yX3RyYWl0cyB7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6Oml0ZXJhdG9y
X2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9y
Ojp2YWx1ZV90eXBlICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJh
dG9yOjpkaWZmZXJlbmNlX3R5cGUgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OnBvaW50ZXIgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFt
ZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSAgICAgICAgIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxj
bGFzcyBfVHA+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHM8X1RwKj4gewogIHR5cGVkZWYgcmFuZG9t
X2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCAgICAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAg
ICAgICAgICAgICAgcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgICAgICAgICAgICAgICAgICAgICAg
ICByZWZlcmVuY2U7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJh
aXRzPGNvbnN0IF9UcCo+IHsKICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0
ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICAgICAgICAgIHZh
bHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgICAgICAgICAgICAgICAgICAgZGlmZmVyZW5j
ZV90eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiAgICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAg
dHlwZWRlZiBjb25zdCBfVHAmICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwp9OwoKIAogCiAK
IAoKIAoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJh
aXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBf
SXRlciYpCnsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJh
dG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICByZXR1cm4gX0NhdGVnb3J5KCk7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp
ZmZlcmVuY2VfdHlwZSoKX19kaXN0YW5jZV90eXBlKGNvbnN0IF9JdGVyJikKewogIHJldHVybiBz
dGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjpkaWZmZXJlbmNlX3R5
cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKX192YWx1ZV90eXBlKGNvbnN0IF9JdGVyJikK
ewogIHJldHVybiBzdGF0aWNfY2FzdDx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2
YWx1ZV90eXBlKj4oMCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1l
IGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5Cml0ZXJhdG9yX2NhdGVn
b3J5KGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19pKTsg
fQoKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0
czxfSXRlcj46OmRpZmZlcmVuY2VfdHlwZSoKZGlzdGFuY2VfdHlwZShjb25zdCBfSXRlciYgX19p
KSB7IHJldHVybiBfX2Rpc3RhbmNlX3R5cGUoX19pKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
PgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6dmFsdWVfdHlwZSoKdmFs
dWVfdHlwZShjb25zdCBfSXRlciYgX19pKSB7IHJldHVybiBfX3ZhbHVlX3R5cGUoX19pKTsgfQoK
CgoKCiMgMjU5ICIvdXNyL2luY2x1ZGUvZysrL3N0bF9pdGVyYXRvci5oIiAzCgoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fZGlz
dGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAg
ICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsK
ICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsgKytfX2ZpcnN0OyArK19fbjsgfQp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIAogICAgICAgICAg
ICAgICAgICAgICAgIF9EaXN0YW5jZSYgX19uLCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykK
ewogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0
b3IgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwg
X0Rpc3RhbmNlJiBfX24pCnsKICBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uLCBpdGVy
YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJh
dG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlm
ZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl
cmF0b3IgX19sYXN0LCBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0lucHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAo
X19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBf
X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBl
bmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90
eXBlCl9fZGlzdGFuY2UoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcp
IHsKICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXJhdG9yPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6
ZGlmZmVyZW5jZV90eXBlCmRpc3RhbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0
ZXJhdG9yIF9fbGFzdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1
dEl0ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnkgCiAgICBfQ2F0ZWdvcnk7CiAgcmV0dXJuIF9f
ZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfQ2F0ZWdvcnkoKSk7Cn0KCgoKdGVtcGxhdGUgPGNs
YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNlKF9J
bnB1dEl0ZXImIF9faSwgX0Rpc3RhbmNlIF9fbiwgaW5wdXRfaXRlcmF0b3JfdGFnKSB7CiAgd2hp
bGUgKF9fbi0tKSArK19faTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfQmlkaXJlY3Rp
b25hbEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sIAogICAgICAgICAgICAgICAgICAgICAg
YmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19uID49IDApCiAgICB3aGlsZSAo
X19uLS0pICsrX19pOwogIGVsc2UKICAgIHdoaWxlIChfX24rKykgLS1fX2k7Cn0KCgoKCgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu
ZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9tQWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9f
biwgCiAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykgewog
IF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX0Rp
c3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5j
ZSBfX24pIHsKICBfX2FkdmFuY2UoX19pLCBfX24sIGl0ZXJhdG9yX2NhdGVnb3J5KF9faSkpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KY2xhc3MgYmFja19pbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBf
Q29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAg
dmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBl
OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAg
ICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4cGxpY2l0IGJhY2tfaW5zZXJ0X2l0ZXJhdG9y
KF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30KICBiYWNrX2luc2VydF9pdGVy
YXRvcjxfQ29udGFpbmVyPiYKICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRhaW5lcjo6
dmFsdWVfdHlwZSYgX192YWx1ZSkgeyAKICAgIGNvbnRhaW5lci0+cHVzaF9iYWNrKF9fdmFsdWUp
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVy
PiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBiYWNrX2luc2VydF9pdGVyYXRvcjxf
Q29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRf
aXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9
OwoKIyAzNzggIi91c3IvaW5jbHVkZS9nKysvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5lIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+
IGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194KSB7CiAgcmV0dXJuIGJhY2tfaW5zZXJ0X2l0
ZXJhdG9yPF9Db250YWluZXI+KF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpj
bGFzcyBmcm9udF9pbnNlcnRfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29u
dGFpbmVyOwpwdWJsaWM6CiAgdHlwZWRlZiBfQ29udGFpbmVyICAgICAgICAgIGNvbnRhaW5lcl90
eXBlOwogIHR5cGVkZWYgb3V0cHV0X2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0
eXBlZGVmIHZvaWQgICAgICAgICAgICAgICAgdmFsdWVfdHlwZTsKICB0eXBlZGVmIHZvaWQgICAg
ICAgICAgICAgICAgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAg
ICBwb2ludGVyOwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICByZWZlcmVuY2U7CgogIGV4
cGxpY2l0IGZyb250X2luc2VydF9pdGVyYXRvcihfQ29udGFpbmVyJiBfX3gpIDogY29udGFpbmVy
KCZfX3gpIHt9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9y
PShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7IAogICAg
Y29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBm
cm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0
aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKCkg
eyByZXR1cm4gKnRoaXM7IH0KICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9w
ZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQp9OwoKIyA0MTcgIi91c3IvaW5jbHVkZS9n
Kysvc3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lcj4KaW5saW5l
IGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiBmcm9udF9pbnNlcnRlcihfQ29udGFp
bmVyJiBfX3gpIHsKICByZXR1cm4gZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+KF9f
eCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBpbnNlcnRfaXRlcmF0b3Ig
ewpwcm90ZWN0ZWQ6CiAgX0NvbnRhaW5lciogY29udGFpbmVyOwogIHR5cGVuYW1lIF9Db250YWlu
ZXI6Oml0ZXJhdG9yIGl0ZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgICAgICAgICAg
Y29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh
dGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5cGVk
ZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkICAg
ICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJlZmVy
ZW5jZTsKCiAgaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCwgdHlwZW5hbWUgX0NvbnRh
aW5lcjo6aXRlcmF0b3IgX19pKSAKICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30K
ICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5cGVuYW1l
IF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsgCiAgICBpdGVyID0gY29udGFpbmVy
LT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAg
fQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRo
aXM7IH0KICBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVy
biAqdGhpczsgfQogIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQp
IHsgcmV0dXJuICp0aGlzOyB9Cn07CgojIDQ1OSAiL3Vzci9pbmNsdWRlL2crKy9zdGxfaXRlcmF0
b3IuaCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyLCBjbGFzcyBfSXRlcmF0b3I+Cmlu
bGluZSAKaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9f
eCwgX0l0ZXJhdG9yIF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0
b3IgX19pdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0
ZXIoX19pKSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciwgY2xh
c3MgX1RwLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJiwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFu
Y2UgPSBwdHJkaWZmX3Q+IAoKCgoKY2xhc3MgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9y
IHsKICB0eXBlZGVmIHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcjxfQmlkaXJlY3Rpb25h
bEl0ZXJhdG9yLCBfVHAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9SZWZlcmVuY2UsIF9EaXN0YW5jZT4gIF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9u
YWxJdGVyYXRvciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgICAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqICAgICAgICAgICAgICAgICAgICAgICBwb2lu
dGVyOwogIHR5cGVkZWYgX1JlZmVyZW5jZSAgICAgICAgICAgICAgICAgcmVmZXJlbmNlOwoKICBy
ZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IoKSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlk
aXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3Vy
cmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1
cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3QgewogICAgX0JpZGly
ZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJlbnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAg
fQoKICBwb2ludGVyIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsg
fQoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJldHVybiAqdGhp
czsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7
CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBvcGVyYXRvci0t
KCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRv
ci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVudDsKICAgIHJl
dHVybiBfX3RtcDsKICB9Cn07CgojIDU1MCAiL3Vzci9pbmNsdWRlL2crKy9zdGxfaXRlcmF0b3Iu
aCIgMwoKCnRlbXBsYXRlIDxjbGFzcyBfQmlJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9SZWYsCiAg
ICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBib29sIG9wZXJhdG9yPT0oCiAgICBjb25z
dCByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3I8X0JpSXRlciwgX1RwLCBfUmVmLCBfRGlz
dGFuY2U+JiBfX3gsIAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9C
aUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkg
PT0gX195LmJhc2UoKTsKfQoKCgogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+
CmNsYXNzIHJldmVyc2VfaXRlcmF0b3IgCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50
OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6
aXRlcmF0b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg
dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg
IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9y
Pjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0
eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9p
bnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZl
cmVuY2UKICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3Jf
dHlwZTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1Ymxp
YzoKICByZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0
ZXJhdG9yX3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNv
bnN0IF9TZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KCiAgdGVtcGxhdGUgPGNs
YXNzIF9JdGVyPgogIHJldmVyc2VfaXRlcmF0b3IoY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRl
cj4mIF9feCkKICAgIDogY3VycmVudChfX3guYmFzZSgpKSB7fQoKICAgIAogIGl0ZXJhdG9yX3R5
cGUgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3Iq
KCkgY29uc3QgewogICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1f
X3RtcDsKICB9CgogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0
b3IqKCkpOyB9CgoKICBfU2VsZiYgb3BlcmF0b3IrKygpIHsKICAgIC0tY3VycmVudDsKICAgIHJl
dHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3IrKyhpbnQpIHsKICAgIF9TZWxmIF9fdG1w
ID0gKnRoaXM7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQogIF9TZWxmJiBv
cGVyYXRvci0tKCkgewogICAgKytjdXJyZW50OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2Vs
ZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgICsrY3VycmVu
dDsKICAgIHJldHVybiBfX3RtcDsKICB9CgogIF9TZWxmIG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5
cGUgX19uKSBjb25zdCB7CiAgICByZXR1cm4gX1NlbGYoY3VycmVudCAtIF9fbik7CiAgfQogIF9T
ZWxmJiBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pIHsKICAgIGN1cnJlbnQgLT0gX19u
OwogICAgcmV0dXJuICp0aGlzOwogIH0KICBfU2VsZiBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBl
IF9fbikgY29uc3QgewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgKyBfX24pOwogIH0KICBfU2Vs
ZiYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50ICs9IF9fbjsK
ICAgIHJldHVybiAqdGhpczsKICB9CiAgcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90
eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0gIAp9OyAKIAp0ZW1wbGF0
ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2Vf
aXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LCAKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBy
ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewogIHJldHVybiBfX3guYmFzZSgpID09
IF9feS5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9w
ZXJhdG9yPChjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwgCiAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVy
ZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f
eCwgCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feSkgewog
IHJldHVybiBfX3kuYmFzZSgpIC0gX194LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVy
YXRvcj4KaW5saW5lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiAKb3BlcmF0b3IrKHR5cGVu
YW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiwKICAg
ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KSB7CiAgcmV0dXJu
IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPihfX3guYmFzZSgpIC0gX19uKTsKfQoKIyA4MDUg
Ii91c3IvaW5jbHVkZS9nKysvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCiAKCnRlbXBsYXRlIDxjbGFz
cyBfVHAsIGNsYXNzIF9EaXN0ID0gcHRyZGlmZl90PiAKY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7
CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I9PSA8PiAgKGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlzdHJl
YW1faXRlcmF0b3ImKTsKcHJvdGVjdGVkOgogIGlzdHJlYW0qIF9NX3N0cmVhbTsKICBfVHAgX01f
dmFsdWU7CiAgYm9vbCBfTV9lbmRfbWFya2VyOwogIHZvaWQgX01fcmVhZCgpIHsKICAgIF9NX2Vu
ZF9tYXJrZXIgPSAoKl9NX3N0cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgICBpZiAoX01fZW5kX21h
cmtlcikgKl9NX3N0cmVhbSA+PiBfTV92YWx1ZTsKICAgIF9NX2VuZF9tYXJrZXIgPSAoKl9NX3N0
cmVhbSkgPyB0cnVlIDogZmFsc2U7CiAgfQpwdWJsaWM6CiAgdHlwZWRlZiBpbnB1dF9pdGVyYXRv
cl90YWcgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1RwICAgICAgICAgICAgICAgICB2
YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3QgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7
CiAgdHlwZWRlZiBjb25zdCBfVHAqICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBf
VHAmICAgICAgICAgIHJlZmVyZW5jZTsKCiAgaXN0cmVhbV9pdGVyYXRvcigpIDogX01fc3RyZWFt
KCZjaW4pLCBfTV9lbmRfbWFya2VyKGZhbHNlKSB7fQogIGlzdHJlYW1faXRlcmF0b3IoaXN0cmVh
bSYgX19zKSA6IF9NX3N0cmVhbSgmX19zKSB7IF9NX3JlYWQoKTsgfQogIHJlZmVyZW5jZSBvcGVy
YXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQoKICBwb2ludGVyIG9wZXJhdG9yLT4o
KSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKICBpc3RyZWFtX2l0ZXJhdG9yPF9U
cCwgX0Rpc3Q+JiBvcGVyYXRvcisrKCkgeyAKICAgIF9NX3JlYWQoKTsgCiAgICByZXR1cm4gKnRo
aXM7CiAgfQogIGlzdHJlYW1faXRlcmF0b3I8X1RwLCBfRGlzdD4gb3BlcmF0b3IrKyhpbnQpICB7
CiAgICBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0Rpc3Q+IF9fdG1wID0gKnRoaXM7CiAgICBfTV9y
ZWFkKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKIyA4NjQgIi91c3IvaW5jbHVkZS9nKysv
c3RsX2l0ZXJhdG9yLmgiIDMKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvcjxfVHAsIF9EaXN0
YW5jZT4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9y
PF9UcCwgX0Rpc3RhbmNlPiYgX195KSB7CiAgcmV0dXJuIChfX3guX01fc3RyZWFtID09IF9feS5f
TV9zdHJlYW0gJiYKICAgICAgICAgIF9feC5fTV9lbmRfbWFya2VyID09IF9feS5fTV9lbmRfbWFy
a2VyKSB8fAogICAgICAgICBfX3guX01fZW5kX21hcmtlciA9PSBmYWxzZSAmJiBfX3kuX01fZW5k
X21hcmtlciA9PSBmYWxzZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3Mgb3N0cmVhbV9p
dGVyYXRvciB7CnByb3RlY3RlZDoKICBvc3RyZWFtKiBfTV9zdHJlYW07CiAgY29uc3QgY2hhciog
X01fc3RyaW5nOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9y
X2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCAgICAgICAgICAgICAgICB2YWx1ZV90eXBlOwogIHR5
cGVkZWYgdm9pZCAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lk
ICAgICAgICAgICAgICAgIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkICAgICAgICAgICAgICAgIHJl
ZmVyZW5jZTsKCiAgb3N0cmVhbV9pdGVyYXRvcihvc3RyZWFtJiBfX3MpIDogX01fc3RyZWFtKCZf
X3MpLCBfTV9zdHJpbmcoMCkge30KICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW0mIF9fcywgY29u
c3QgY2hhciogX19jKSAKICAgIDogX01fc3RyZWFtKCZfX3MpLCBfTV9zdHJpbmcoX19jKSAge30K
ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShjb25zdCBfVHAmIF9fdmFsdWUpIHsg
CiAgICAqX01fc3RyZWFtIDw8IF9fdmFsdWU7CiAgICBpZiAoX01fc3RyaW5nKSAqX01fc3RyZWFt
IDw8IF9NX3N0cmluZzsKICAgIHJldHVybiAqdGhpczsKICB9CiAgb3N0cmVhbV9pdGVyYXRvcjxf
VHA+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIG9zdHJlYW1faXRlcmF0b3I8X1Rw
PiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9IAogIG9zdHJlYW1faXRlcmF0b3I8X1Rw
PiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9IAp9OwoKIyA5MDcgIi91c3IvaW5j
bHVkZS9nKysvc3RsX2l0ZXJhdG9yLmgiIDMKCgogCgoKCiAKIAogCiMgNTYgIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2FsZ29iYXNlLmgiIDIgMwoKCgogCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh
cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBfX2l0
ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IsIF9UcCopIHsKICBf
VHAgX190bXAgPSAqX19hOwogICpfX2EgPSAqX19iOwogICpfX2IgPSBfX3RtcDsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSB2b2lk
IGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0ZvcndhcmRJdGVyMiBfX2IpIHsKICBfX2l0
ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1ZV90eXBlKCBfX2EgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9UcCYgX19hLCBfVHAmIF9fYikgewogIF9UcCBfX3Rt
cCA9IF9fYTsKICBfX2EgPSBfX2I7CiAgX19iID0gX190bXA7Cn0KCiAKIAoKCgoKCgp0ZW1wbGF0
ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0
IF9UcCYgX19iKSB7CiAgcmV0dXJuIF9fYiA8IF9fYSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBf
VHAmIF9fYikgewogIHJldHVybiAgX19hIDwgX19iID8gX19iIDogX19hOwp9CgoKCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4oY29uc3Qg
X1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX19j
b21wKF9fYiwgX19hKSA/IF9fYiA6IF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3Mg
X0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAmIG1heChjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw
JiBfX2IsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBfX2NvbXAoX19hLCBfX2IpID8gX19i
IDogX19hOwp9CgogCiAKCiAKIAogCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIg
X19jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yICggOyBfX2ZpcnN0
ICE9IF9fbGFzdDsgKytfX3Jlc3VsdCwgKytfX2ZpcnN0KQogICAgKl9fcmVzdWx0ID0gKl9fZmly
c3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0
ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfT3V0cHV0SXRl
cgpfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0LAogICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3Jf
dGFnLCBfRGlzdGFuY2UqKQp7CiAgZm9yIChfRGlzdGFuY2UgX19uID0gX19sYXN0IC0gX19maXJz
dDsgX19uID4gMDsgLS1fX24pIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp
cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1RwPgppbmxpbmUgX1RwKgpfX2NvcHlfdHJpdmlhbChjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgbWVtbW92ZShfX3Jlc3VsdCwg
X19maXJzdCwgc2l6ZW9mKF9UcCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jl
c3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9kaXNw
YXRjaCB7CiAgc3RhdGljIF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl
c3VsdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46
Oml0ZXJhdG9yX2NhdGVnb3J5IF9DYXRlZ29yeTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0
b3JfdHJhaXRzPF9JbnB1dEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwogICAgcmV0
dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfQ2F0ZWdvcnkoKSwgKF9EaXN0
YW5jZSopIDApOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfZGlz
cGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0
IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJl
dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX19jb3B5X2Rpc3BhdGNoPGNvbnN0IF9UcCosIF9U
cCosIF9fdHJ1ZV90eXBlPgp7CiAgc3RhdGljIF9UcCogY29weShjb25zdCBfVHAqIF9fZmlyc3Qs
IGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KSB7CiAgICByZXR1cm4gX19jb3B5X3Ry
aXZpYWwoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgY29weShf
SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf
dHJhaXRzPF9JbnB1dEl0ZXI+Ojp2YWx1ZV90eXBlIF9UcDsKICB0eXBlZGVmIHR5cGVuYW1lIF9f
dHlwZV90cmFpdHM8X1RwPjo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAg
ICAgX1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9kaXNwYXRjaDxfSW5wdXRJdGVyLCBfT3V0cHV0
SXRlciwgX1RyaXZpYWw+CiAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0K
CiMgMjEzICIvdXNyL2luY2x1ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwg
CiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9f
Y29weV9iYWNrd2FyZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QsIAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u
YWxJdGVyMiBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz
dCkKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIs
IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9CaWRpcmVjdGlvbmFsSXRlciBfX2NvcHlfYmFja3dh
cmQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3Jlc3VsdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19p
dGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSopCnsKICBmb3IgKF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24g
PiAwOyAtLV9fbikKICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogIHJldHVybiBfX3Jlc3Vs
dDsKfQoKCgogCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0
IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90
cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0ZXJhdG9yX2NhdGVnb3J5IAogICAgICAgICAg
X0NhdDsKICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0
ZXIxPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2U7CgogIHN0YXRpYyBfQmlk
aXJlY3Rpb25hbEl0ZXIyIGNvcHkoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LCAKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19y
ZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmQoX19maXJzdCwgX19sYXN0LCBfX3Jl
c3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9U
cD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlw
ZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1RwKiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9f
bGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3QgcHRyZGlmZl90IF9OdW0gPSBfX2xhc3Qg
LSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAtIF9OdW0sIF9fZmlyc3QsIHNpemVvZihf
VHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQgLSBfTnVtOwogIH0KfTsKCnRlbXBsYXRl
IDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwg
X1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1RwKiBjb3B5KGNvbnN0IF9UcCogX19maXJz
dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpIHsKICAgIHJldHVybiAgX19jb3B5
X2JhY2t3YXJkX2Rpc3BhdGNoPF9UcCosIF9UcCosIF9fdHJ1ZV90eXBlPgogICAgICA6OmNvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9CSTEs
IGNsYXNzIF9CSTI+CmlubGluZSBfQkkyIGNvcHlfYmFja3dhcmQoX0JJMSBfX2ZpcnN0LCBfQkkx
IF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkgewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0
czx0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JJMj46OnZhbHVlX3R5cGU+CiAgICAgICAgICAg
ICAgICAgICAgICAgIDo6aGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcgogICAgICAgICAg
X1RyaXZpYWw7CiAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfQkkxLCBfQkkyLCBf
VHJpdmlhbD4KICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7
Cn0KCiMgMzAzICIvdXNyL2luY2x1ZGUvZysrL3N0bF9hbGdvYmFzZS5oIiAzCgoKIAogCgp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgpw
YWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihfSW5wdXRJdGVyIF9fZmlyc3Qs
IF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9P
dXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291bnQgPiAwOyAtLV9fY291bnQp
IHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogICAgKytfX3Jlc3Vs
dDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+KF9fZmlyc3QsIF9f
cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf
T3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9S
QUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JBSXRlciBfX2xh
c3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxfUkFJdGVyLCBfT3V0cHV0SXRl
cj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l
IHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9uKF9JbnB1dEl0ZXIgX19maXJz
dCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5
X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgIF9faXRlcmF0
b3JfY2F0ZWdvcnkoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg
Y2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBf
T3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091
dHB1dEl0ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwg
X19yZXN1bHQpOwp9CgogCiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CnZvaWQgZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg
Y29uc3QgX1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkgewogIGZvciAoIDsgX19u
ID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICByZXR1cm4g
X19maXJzdDsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1
dEl0ZXIyPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4gbWlzbWF0Y2goX0lucHV0SXRl
cjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiAq
X19maXJzdDEgPT0gKl9fZmlyc3QyKSB7CiAgICArK19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsK
ICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19m
aXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIy
LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4g
bWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsK
ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg
Kl9fZmlyc3QyKSkgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19maXJzdDI7CiAgfQogIHJldHVy
biBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJzdDEsIF9fZmlyc3QyKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMj4KaW5saW5lIGJv
b2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAh
PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCpfX2ZpcnN0MSAhPSAq
X19maXJzdDIpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRp
Y2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx
IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmluYXJ5
UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7
ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fZmlyc3Qx
LCAqX19maXJzdDIpKQogICAgICByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KCiAKIAog
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGxl
eGljb2dyYXBoaWNhbF9jb21wYXJlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf
X2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy
LCBfSW5wdXRJdGVyMiBfX2xhc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYm
IF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsK
ICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg
KCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4g
X19maXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9v
bCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRl
cjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2Zp
cnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
Q29tcGFyZSBfX2NvbXApIHsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MgogICAgICAgIDsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikgewogICAgaWYg
KF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYg
KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CiAg
cmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MjsKfQoKaW5s
aW5lIGJvb2wgCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0
MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikK
ewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3Qgc2l6
ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBt
ZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4g
X19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8IF9fbGVuMjsKfQoKaW5saW5l
IGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0
IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7CgogIHJldHVybiBsZXhpY29n
cmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0MSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBjaGFyKikgX19maXJz
dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciop
IF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9J
bnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KF9JbnB1dEl0ZXIx
IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CiAg
d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAg
aWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJuIC0xOwogICAgaWYgKCpfX2Zp
cnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICArK19fZmlyc3QxOwogICAgKytf
X2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpIHsKICAgIHJldHVybiAhKF9f
Zmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJldHVybiAtMTsKICB9Cn0KCmlu
bGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IHVuc2lnbmVkIGNo
YXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu
ZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVu
c2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0cmRpZmZfdCBfX2xlbjEgPSBf
X2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9fbGVuMiA9IF9fbGFzdDIgLSBf
X2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3Qy
LCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0
IAogICAgICAgICAgICAgICAgICAgICAgIDogKF9fbGVuMSA9PSBfX2xlbjIgPyAwIDogKF9fbGVu
MSA8IF9fbGVuMiA/IC0xIDogMSkpOwp9CgppbmxpbmUgaW50IApfX2xleGljb2dyYXBoaWNhbF9j
b21wYXJlXzN3YXkoY29uc3QgY2hhciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3Qg
Y2hhciogX19sYXN0MikKewoKICByZXR1cm4gX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5
KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9f
Zmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh
ciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25l
ZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0
IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmludCBsZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5
KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19s
YXN0MikKewogIHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEs
IF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKIAoKCgogCiAKIAojIDMwICIvdXNyL2lu
Y2x1ZGUvZysrL2FsZ29yaXRobSIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKysvc3RsX2NvbnN0
cnVjdC5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKCiAKCiAKIAoK
dGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgZGVzdHJveShfVHAqIF9fcG9pbnRlcikg
ewogIF9fcG9pbnRlci0+fl9UcCgpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+
CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAg
bmV3IChfX3ApIF9UMShfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UMT4KaW5saW5lIHZv
aWQgY29uc3RydWN0KF9UMSogX19wKSB7CiAgbmV3IChfX3ApIF9UMSgpOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5saW5lIHZvaWQKX19kZXN0cm95X2F1eChfRm9yd2Fy
ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfX2ZhbHNlX3R5cGUp
CnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBkZXN0cm95KCYq
X19maXJzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxpbmUgdm9p
ZCBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJkSXRlcmF0b3IsIF9Gb3J3YXJkSXRlcmF0b3IsIF9fdHJ1
ZV90eXBlKSB7fQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4K
aW5saW5lIHZvaWQKX19kZXN0cm95KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJ
dGVyYXRvciBfX2xhc3QsIF9UcCopCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8
X1RwPjo6aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcgogICAgICAgICAgX1RyaXZpYWxfZGVzdHJ1Y3Rv
cjsKICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX1RyaXZpYWxfZGVzdHJ1Y3Rvcigp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CmlubGluZSB2b2lkIGRlc3Ry
b3koX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewog
IF9fZGVzdHJveShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0K
CmlubGluZSB2b2lkIGRlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUgdm9pZCBkZXN0cm95
KHdjaGFyX3QqLCB3Y2hhcl90Kikge30KCiAKCgoKIAogCiAKIyAzMSAiL3Vzci9pbmNsdWRlL2cr
Ky9hbGdvcml0aG0iIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrL3N0bF91bmluaXRpYWxpemVk
LmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgogCgoKCgoKCiAKCiAKCiAKIAp0ZW1w
bGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0Zvcndh
cmRJdGVyIApfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNv
cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciAKX191bmluaXRpYWxpemVkX2Nv
cHlfYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX3Jlc3VsdDsKICB0
cnkgIHsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX2N1cikK
ICAgICAgY29uc3RydWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBfX2N1cjsKICB9
CiAgY2F0Y2goLi4uKSB7ICBkZXN0cm95KF9fcmVzdWx0LCBfX2N1cikgOyB0aHJvdzsgfSA7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
VHA+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBf
X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cD46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1
eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAg
dW5pbml0aWFsaXplZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBf
X3VuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fcmVzdWx0ICkgKTsKfQoKaW5saW5l
IGNoYXIqIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFy
KiBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQp
IHsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1
cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90KiAKdW5p
bml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgIHdjaGFyX3QqIF9fcmVzdWx0KQp7CiAgbWVtbW92ZShf
X3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmlyc3QpKTsK
ICByZXR1cm4gX19yZXN1bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCiAKCnRlbXBsYXRlIDxj
bGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgpwYWlyPF9J
bnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfSW5wdXRJdGVy
IF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykK
ewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSAgewogICAgZm9yICggOyBf
X2NvdW50ID4gMCA7IC0tX19jb3VudCwgKytfX2ZpcnN0LCArK19fY3VyKSAKICAgICAgY29uc3Ry
dWN0KCYqX19jdXIsICpfX2ZpcnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19maXJzdCwgX19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19y
ZXN1bHQsIF9fY3VyKSA7IHRocm93OyB9IDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxfUmFu
ZG9tQWNjZXNzSXRlciwgX0ZvcndhcmRJdGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9SYW5k
b21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9h
Y2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0ID0gX19maXJz
dCArIF9fY291bnQ7CiAgcmV0dXJuIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3YXJkSXRl
cj4oCiAgICAgICAgICAgICAgICAgX19sYXN0LAogICAgICAgICAgICAgICAgIHVuaW5pdGlhbGl6
ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgcGFpcjxf
SW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRl
ciBfX2ZpcnN0LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0
ZXIgX19yZXN1bHQpIHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBf
X2NvdW50LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJh
dG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIs
IGNsYXNzIF9TaXplLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBwYWlyPF9JbnB1dEl0ZXIs
IF9Gb3J3YXJkSXRlcj4KdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBf
U2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp
IHsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2NvcHlfbihfX2ZpcnN0LCBfX2NvdW50LCBfX3Jl
c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KCBfX2ZpcnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IF9UcCYgX194LCBfX3RydWVfdHlwZSkKewogIGZpbGwoX19maXJzdCwgX19sYXN0LCBfX3gp
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CnZvaWQKX191bmlu
aXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s
YXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5
cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSAgewogICAgZm9yICgg
OyBfX2N1ciAhPSBfX2xhc3Q7ICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gp
OwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19jdXIpIDsgdGhyb3c7IH0g
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9UcDE+
CmlubGluZSB2b2lkIF9fdW5pbml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCAK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u
c3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9U
cDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfX2Zp
cnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAgICAgICAgICAgICAgICAgIAp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSB2b2lkIHVuaW5pdGlh
bGl6ZWRfZmlsbChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgX1RwJiBfX3gpCnsKICBfX3VuaW5pdGlhbGl6ZWRfZmlsbChfX2ZpcnN0LCBfX2xh
c3QsIF9feCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKIAogCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0
ZXIKX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXpl
IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90
eXBlKQp7CiAgcmV0dXJuIGZpbGxfbihfX2ZpcnN0LCBfX24sIF9feCk7Cn0KCnRlbXBsYXRlIDxj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlcgpf
X3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19u
LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX19mYWxzZV90eXBl
KQp7CiAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJzdDsKICB0cnkgIHsKICAgIGZvciAoIDsg
X19uID4gMDsgLS1fX24sICsrX19jdXIpCiAgICAgIGNvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwog
ICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCguLi4pIHsgIGRlc3Ryb3koX19maXJzdCwgX19j
dXIpIDsgdGhyb3c7IH0gOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
U2l6ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyIApfX3VuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9U
cCYgX194LCBfVHAxKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHAxPjo6
aXNfUE9EX3R5cGUgX0lzX1BPRDsKICByZXR1cm4gX191bmluaXRpYWxpemVkX2ZpbGxfbl9hdXgo
X19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy
ZEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgCnVuaW5p
dGlhbGl6ZWRfZmlsbF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9U
cCYgX194KQp7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9maWxsX24oX19maXJzdCwgX19uLCBf
X3gsIF9fdmFsdWVfdHlwZSggX19maXJzdCApICk7Cn0KCiAKIAoKIAogCiAKIAoKdGVtcGxhdGUg
PGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0ZvcndhcmRJdGVy
PgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFsaXplZF9jb3B5X2NvcHkoX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KQp7CiAgX0ZvcndhcmRJdGVyIF9f
bWlkID0gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAg
dHJ5ICB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBf
X21pZCk7CiAgfQogIGNhdGNoKC4uLikgeyAgZGVzdHJveShfX3Jlc3VsdCwgX19taWQpIDsgdGhy
b3c7IH0gOwp9CgogCiAKIAp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9JbnB1dEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgCl9fdW5pbml0aWFsaXplZF9m
aWxsX2NvcHkoX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBfRm9yd2FyZEl0ZXIgX19taWQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKewogIHVuaW5pdGlh
bGl6ZWRfZmlsbChfX3Jlc3VsdCwgX19taWQsIF9feCk7CiAgdHJ5ICB7CiAgICByZXR1cm4gdW5p
bml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwogIH0KICBjYXRjaCguLi4p
IHsgIGRlc3Ryb3koX19yZXN1bHQsIF9fbWlkKSA7IHRocm93OyB9IDsKfQoKIAogCiAKdGVtcGxh
dGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxp
bmUgdm9pZApfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9J
bnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIg
X19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IF9UcCYgX194KQp7CiAgX0ZvcndhcmRJdGVyIF9fbWlkMiA9IHVuaW5pdGlhbGl6ZWRf
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIpOwogIHRyeSAgewogICAgdW5pbml0aWFs
aXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAgY2F0Y2goLi4uKSB7ICBkZXN0
cm95KF9fZmlyc3QyLCBfX21pZDIpIDsgdGhyb3c7IH0gOwp9CgogCgoKCiAKIAogCiMgMzIgIi91
c3IvaW5jbHVkZS9nKysvYWxnb3JpdGhtIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy9zdGxf
dGVtcGJ1Zi5oIiAxIDMKIAoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKIAoKCgoKCgoKIAoKdGVt
cGxhdGUgPGNsYXNzIF9UcD4KcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IApfX2dldF90ZW1wb3Jhcnlf
YnVmZmVyKHB0cmRpZmZfdCBfX2xlbiwgX1RwKikKewogIGlmIChfX2xlbiA+IHB0cmRpZmZfdCgy
MTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xlbiA9IDIxNDc0ODM2NDcgICAvIHNp
emVvZihfVHApOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCop
IG1hbGxvYygoc2l6ZV90KV9fbGVuICogc2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDAp
CiAgICAgIHJldHVybiBwYWlyPF9UcCosIHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9f
bGVuIC89IDI7CiAgfQoKICByZXR1cm4gcGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDAp
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9UcCosIHB0cmRpZmZfdD4g
Z2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKSB7CiAgcmV0dXJuIF9fZ2V0X3Rl
bXBvcmFyeV9idWZmZXIoX19sZW4sIChfVHAqKSAwKTsKfQoKCgogCiAKIAogCiAKdGVtcGxhdGUg
PGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRyZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1
ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICByZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1
ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVy
bl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAgZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZl
ciB7CnByaXZhdGU6CiAgcHRyZGlmZl90ICBfTV9vcmlnaW5hbF9sZW47CiAgcHRyZGlmZl90ICBf
TV9sZW47CiAgX1RwKiAgICAgICBfTV9idWZmZXI7CgogIHZvaWQgX01fYWxsb2NhdGVfYnVmZmVy
KCkgewogICAgX01fb3JpZ2luYWxfbGVuID0gX01fbGVuOwogICAgX01fYnVmZmVyID0gMDsKCiAg
ICBpZiAoX01fbGVuID4gKHB0cmRpZmZfdCkoMjE0NzQ4MzY0NyAgIC8gc2l6ZW9mKF9UcCkpKQog
ICAgICBfTV9sZW4gPSAyMTQ3NDgzNjQ3ICAgLyBzaXplb2YoX1RwKTsKCiAgICB3aGlsZSAoX01f
bGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9NX2xlbiAqIHNpemVv
ZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsKICAgICAgX01fbGVu
IC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYs
IF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIoY29uc3QgX1RwJiB2
YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24oX01fYnVmZmVyLCBf
TV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4g
X01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9NX2J1ZmZlcjsgfQog
IF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9CgogIF9UZW1wb3Jhcnlf
YnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp
IHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9k
ZWZhdWx0X2NvbnN0cnVjdG9yCiAgICAgICAgICAgIF9Ucml2aWFsOwogICAgdHJ5ICB7CiAgICAg
IF9NX2xlbiA9IDA7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX01fbGVuKTsKICAg
ICAgX01fYWxsb2NhdGVfYnVmZmVyKCk7CiAgICAgIGlmIChfTV9sZW4gPiAwKQogICAgICAgIF9N
X2luaXRpYWxpemVfYnVmZmVyKCpfX2ZpcnN0LCBfVHJpdmlhbCgpKTsKICAgIH0KICAgIGNhdGNo
KC4uLikgeyAgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9sZW4gPSAwIDsgdGhy
b3c7IH0gOwogIH0KIAogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsgIAogICAgZGVzdHJveShfTV9i
dWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoKcHJp
dmF0ZToKICAgCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7
fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCiAKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLCAKICAgICAgICAgIGNsYXNzIF9UcCAKCiAg
ICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy
YXRvcj46OnZhbHVlX3R5cGUKCiAgICAgICAgID4Kc3RydWN0IHRlbXBvcmFyeV9idWZmZXIgOiBw
dWJsaWMgX1RlbXBvcmFyeV9idWZmZXI8X0ZvcndhcmRJdGVyYXRvciwgX1RwPgp7CiAgdGVtcG9y
YXJ5X2J1ZmZlcihfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19s
YXN0KQogICAgOiBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+KF9fZmly
c3QsIF9fbGFzdCkge30KICB+dGVtcG9yYXJ5X2J1ZmZlcigpIHt9Cn07CiAgICAKIAoKCgogCiAK
IAojIDMzICIvdXNyL2luY2x1ZGUvZysrL2FsZ29yaXRobSIgMiAzCgojIDEgIi91c3IvaW5jbHVk
ZS9nKysvc3RsX2FsZ28uaCIgMSAzCiAKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCiAKCgoKCgoK
IyAxICIvdXNyL2luY2x1ZGUvZysrL3N0bF9oZWFwLmgiIDEgMwogCgoKCgoKCgoKCgoKCgoKCgoK
CgoKCgoKCiAKCgoKCgoKIAoKCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
cmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkIApfX3B1c2hfaGVhcChfUmFu
ZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUlu
ZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX19w
YXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190
b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7CiAgICAqKF9fZmly
c3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICBfX2hvbGVJbmRl
eCA9IF9fcGFyZW50OwogICAgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgfSAg
ICAKICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9UcD4KaW5s
aW5lIHZvaWQgCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwK
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5jZSos
IF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmly
c3QpIC0gMSksIF9EaXN0YW5jZSgwKSwgCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQg
CnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0
ZXJhdG9yIF9fbGFzdCkKewogIF9fcHVzaF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwgX192YWx1ZV90eXBlKCBf
X2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHAsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQK
X19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hv
bGVJbmRleCwKICAgICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBf
Q29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAx
KSAvIDI7CiAgd2hpbGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2Zp
cnN0ICsgX19wYXJlbnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp
ID0gKihfX2ZpcnN0ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAg
IF9fcGFyZW50ID0gKF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hv
bGVJbmRleCkgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJh
dG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1Rw
PgppbmxpbmUgdm9pZCAKX19wdXNoX2hlYXBfYXV4KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBh
cmUgX19jb21wLAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlKiwgX1RwKikgCnsKICBfX3B1c2hf
aGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5j
ZSgwKSwgCiAgICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1w
bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5l
IHZvaWQgCnB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9fcHVz
aF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAgICAgICAgICAgICAgICAgX19k
aXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2UsIGNs
YXNzIF9UcD4Kdm9pZCAKX19hZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz
dCwgX0Rpc3RhbmNlIF9faG9sZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwg
X1RwIF9fdmFsdWUpCnsKICBfRGlzdGFuY2UgX190b3BJbmRleCA9IF9faG9sZUluZGV4OwogIF9E
aXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUluZGV4ICsgMjsKICB3aGlsZSAoX19z
ZWNvbmRDaGlsZCA8IF9fbGVuKSB7CiAgICBpZiAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGlsZCkg
PCAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKSkKICAgICAgX19zZWNvbmRDaGlsZC0t
OwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls
ZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxkID0g
MiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9fbGVu
KSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRD
aGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQogIF9f
cHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBf
RGlzdGFuY2U+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5jZSopCnsKICAqX19y
ZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZSgwKSwg
X0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCAKX19wb3BfaGVh
cF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRv
ciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9UcCopCnsKICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9f
bGFzdCAtIDEsIF9fbGFzdCAtIDEsIAogICAgICAgICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBf
X2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCBwb3BfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xh
c3QpCnsKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZSggX19m
aXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz
IF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19h
ZGp1c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9s
ZUluZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21w
YXJlIF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rp
c3RhbmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3Nl
Y29uZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRD
aGlsZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRD
aGlsZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNv
bmRDaGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENo
aWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09
IF9fbGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19z
ZWNvbmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAg
fQogIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVl
LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz
cyBfVHAsIGNsYXNzIF9Db21wYXJlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5l
IHZvaWQgCl9fcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9f
cmVzdWx0LCBfVHAgX192YWx1ZSwgX0NvbXBhcmUgX19jb21wLAogICAgICAgICAgIF9EaXN0YW5j
ZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9E
aXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCAKICAgICAgICAgICAgICAg
IF9fdmFsdWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0
b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIApfX3BvcF9oZWFwX2F1
eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19wb3BfaGVh
cChfX2ZpcnN0LCBfX2xhc3QgLSAxLCBfX2xhc3QgLSAxLCBfVHAoKihfX2xhc3QgLSAxKSksIF9f
Y29tcCwKICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUg
dm9pZCAKcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogICAgX19wb3Bf
aGVhcF9hdXgoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fY29t
cCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9UcCwg
Y2xhc3MgX0Rpc3RhbmNlPgp2b2lkIApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwKICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX1RwKiwg
X0Rpc3RhbmNlKikKewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMikgcmV0dXJuOwogIF9EaXN0
YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fcGFyZW50ID0gKF9f
bGVuIC0gMikvMjsKICAgIAogIHdoaWxlICh0cnVlKSB7CiAgICBfX2FkanVzdF9oZWFwKF9fZmly
c3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFyZW50KSkpOwogICAgaWYg
KF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAgfQp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZCAKbWFrZV9oZWFwKF9SYW5k
b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQp7
CiAgX19tYWtlX2hlYXAoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZSggX19maXJzdCApICwgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBj
bGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZApfX21ha2VfaGVhcChfUmFuZG9tQWNjZXNz
SXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAg
ICAgX0NvbXBhcmUgX19jb21wLCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgaWYgKF9fbGFzdCAtIF9f
Zmlyc3QgPCAyKSByZXR1cm47CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0IC0gX19maXJzdDsK
ICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwogICAgCiAgd2hpbGUgKHRydWUp
IHsKICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX19wYXJlbnQsIF9fbGVuLCBfVHAoKihfX2Zp
cnN0ICsgX19wYXJlbnQpKSwKICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgIGlmIChfX3Bh
cmVudCA9PSAwKSByZXR1cm47CiAgICBfX3BhcmVudC0tOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIAptYWtl
X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIAogICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgX19tYWtlX2hlYXAoX19m
aXJzdCwgX19sYXN0LCBfX2NvbXAsCiAgICAgICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0
ICkgLCBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh
bmRvbUFjY2Vzc0l0ZXJhdG9yPgp2b2lkIHNvcnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig
X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgCnNv
cnRfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgIF9SYW5kb21B
Y2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIHdoaWxlIChfX2xhc3Qg
LSBfX2ZpcnN0ID4gMSkKICAgIHBvcF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tLCBfX2NvbXApOwp9
CgoKCgoKIAoKCgogCiAKIAojIDM0ICIvdXNyL2luY2x1ZGUvZysrL3N0bF9hbGdvLmgiIDIgMwoK
CiAKCgoKCgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21lZGlh
bihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKSB7CiAgaWYg
KF9fYSA8IF9fYikKICAgIGlmIChfX2IgPCBfX2MpCiAgICAgIHJldHVybiBfX2I7CiAgICBlbHNl
IGlmIChfX2EgPCBfX2MpCiAgICAgIHJldHVybiBfX2M7CiAgICBlbHNlCiAgICAgIHJldHVybiBf
X2E7CiAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2Ig
PCBfX2MpCiAgICByZXR1cm4gX19jOwogIGVsc2UKICAgIHJldHVybiBfX2I7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJgpfX21lZGlhbihj
b25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBf
X2NvbXApIHsKICBpZiAoX19jb21wKF9fYSwgX19iKSkKICAgIGlmIChfX2NvbXAoX19iLCBfX2Mp
KQogICAgICByZXR1cm4gX19iOwogICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAg
cmV0dXJuIF9fYzsKICAgIGVsc2UKICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAo
X19hLCBfX2MpKQogICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQog
ICAgcmV0dXJuIF9fYzsKICBlbHNlCiAgICByZXR1cm4gX19iOwp9CgogCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfRnVuY3Rpb24+Cl9GdW5jdGlvbiBmb3JfZWFjaChfSW5wdXRJ
dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKSB7CiAgZm9yICgg
OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1
cm4gX19mOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgppbmxp
bmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAg
ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3Qg
JiYgKl9fZmlyc3QgIT0gX192YWwpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lu
cHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQp7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19s
YXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAgKytfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0
Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFu
ZG9tQWNjZXNzSXRlciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAog
ICAgICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlw
ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBl
IF9fdHJpcF9jb3VudAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBf
X3RyaXBfY291bnQgPiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBf
X3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09
IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3Qg
PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJz
dCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2go
X19sYXN0IC0gX19maXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg
cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0
ID09IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBp
ZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNh
c2UgMDoKICBkZWZhdWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIg
ZmluZF9pZihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xh
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFt
ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190
cmlwX2NvdW50CiAgICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJp
cF9jb3VudCA+IDAgOyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3Qp
KSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0
KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJz
dCkpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAt
IF9fZmlyc3QpIHsKICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f
Zmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkp
IHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQo
Kl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVm
YXVsdDoKICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVyIGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0
LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9f
dmFsKQp7CiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9j
YXRlZ29yeSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz
cyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIgX19maXJz
dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQpIHsKICByZXR1cm4gZmluZF9pZihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p
dGVyYXRvcl9jYXRlZ29yeSggX19maXJzdCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0
dXJuIF9fbGFzdDsKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKICB3aGlsZSgrK19f
bmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA9PSAqX19uZXh0KQogICAgICByZXR1
cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7Cn0K
CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9G
b3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9f
YmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0
OwogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9f
bGFzdCkgewogICAgaWYgKF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICBy
ZXR1cm4gX19maXJzdDsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQogIHJldHVybiBfX2xhc3Q7
Cn0KCiAKIAogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xh
c3MgX1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFz
dCwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pIHsKICBmb3IgKCA7
IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1
ZSkKICAgICAgKytfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJl
ZGljYXRlLCBjbGFzcyBfU2l6ZT4Kdm9pZCBjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J
bnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICBfU2l6ZSYg
X19uKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9f
cHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfVHA+CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlCmNvdW50KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWx1ZSkgewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJ
dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz
dDsgKytfX2ZpcnN0KQogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwog
IHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUHJlZGlj
YXRlPgp0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlw
ZQpjb3VudF9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGlj
YXRlIF9fcHJlZCkgewogIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlm
ZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2Zp
cnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsrX19uOwogIHJldHVybiBfX247
Cn0KCgoKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyPgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy
ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJz
dDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikgCnsKICAgCiAgaWYgKF9fZmlyc3QxID09IF9fbGFz
dDEgfHwgX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBfX2ZpcnN0MTsKCiAgIAogIF9G
b3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICsrX190bXA7CiAgaWYgKF9fdG1wID09IF9f
bGFzdDIpCiAgICByZXR1cm4gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKCiAg
IAoKICBfRm9yd2FyZEl0ZXIyIF9fcDEsIF9fcDsKCiAgX19wMSA9IF9fZmlyc3QyOyArK19fcDE7
CgogIF9Gb3J3YXJkSXRlcjEgX19jdXJyZW50ID0gX19maXJzdDE7CgogIHdoaWxlIChfX2ZpcnN0
MSAhPSBfX2xhc3QxKSB7CiAgICBfX2ZpcnN0MSA9IGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpf
X2ZpcnN0Mik7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFz
dDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOyAKICAgIGlmICgr
K19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAo
Kl9fY3VycmVudCA9PSAqX19wKSB7CiAgICAgIGlmICgrK19fcCA9PSBfX2xhc3QyKQogICAgICAg
IHJldHVybiBfX2ZpcnN0MTsKICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpCiAgICAg
ICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogICAgKytfX2ZpcnN0MTsKICB9CiAgcmV0dXJuIF9f
Zmlyc3QxOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJ
dGVyMiwgY2xhc3MgX0JpbmFyeVByZWQ+Cl9Gb3J3YXJkSXRlcjEgc2VhcmNoKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
X0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZCAgX19wcmVkaWNhdGUpIAp7CiAgIAogIGlmIChfX2ZpcnN0
MSA9PSBfX2xhc3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19maXJzdDE7
CgogICAKICBfRm9yd2FyZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICArK19fdG1wOwogIGlmIChf
X3RtcCA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2Zp
cnN0Mik7CgogICAKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7CgogIF9fcDEgPSBfX2ZpcnN0
MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoKICB3aGls
ZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEp
IHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgICBi
cmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xh
c3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJz
dDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0dXJuIF9fbGFzdDE7Cgog
ICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOyAKICAgIGlmICgrK19fY3Vy
cmVudCA9PSBfX2xhc3QxKSByZXR1cm4gX19sYXN0MTsKCiAgICB3aGlsZSAoX19wcmVkaWNhdGUo
Kl9fY3VycmVudCwgKl9fcCkpIHsKICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAg
cmV0dXJuIF9fZmlyc3QxOwogICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkKICAgICAg
ICByZXR1cm4gX19sYXN0MTsKICAgIH0KCiAgICArK19fZmlyc3QxOwogIH0KICByZXR1cm4gX19m
aXJzdDE7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2Vy
LCBjbGFzcyBfVHA+Cl9Gb3J3YXJkSXRlciBzZWFyY2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9JbnRlZ2VyIF9fY291
bnQsIGNvbnN0IF9UcCYgX192YWwpIHsKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgZWxzZSB7CiAgICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFs
KTsKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICBfSW50ZWdlciBfX24gPSBf
X2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19p
OwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24gIT0gMCAmJiAqX19pID09IF9fdmFs
KSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247CiAgICAgIH0KICAgICAgaWYgKF9fbiA9
PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgX19maXJzdCA9
IGZpbmQoX19pLCBfX2xhc3QsIF9fdmFsKTsKICAgIH0KICAgIHJldHVybiBfX2xhc3Q7CiAgfQp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfSW50ZWdlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQmluYXJ5UHJlZD4KX0ZvcndhcmRJdGVyIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0ludGVn
ZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5h
cnlQcmVkIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19jb3VudCA8PSAwKQogICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgZWxzZSB7CiAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgaWYg
KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICBicmVhazsKICAgICAgKytf
X2ZpcnN0OwogICAgfQogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRl
Z2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsK
ICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChfX2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmIF9f
YmluYXJ5X3ByZWQoKl9faSwgX192YWwpKSB7CiAgICAgICAgKytfX2k7CiAgICAgICAgLS1fX247
CiAgICAgIH0KICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAg
ICBlbHNlIHsKICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgaWYgKF9f
YmluYXJ5X3ByZWQoKl9faSwgX192YWwpKQogICAgICAgICAgICBicmVhazsKICAgICAgICAgICsr
X19pOwogICAgICAgIH0KICAgICAgICBfX2ZpcnN0ID0gX19pOwogICAgICB9CiAgICB9CiAgICBy
ZXR1cm4gX19sYXN0OwogIH0KfSAKCiAKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBj
bGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIyIHN3YXBfcmFuZ2VzKF9Gb3J3YXJkSXRl
cjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyKSB7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xh
c3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaXRlcl9zd2FwKF9fZmlyc3QxLCBfX2Zp
cnN0Mik7CiAgcmV0dXJuIF9fZmlyc3QyOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlvbj4KX091dHB1dEl0ZXIg
dHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3BlcmF0aW9uIF9fb3Bl
cikgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkK
ICAgICpfX3Jlc3VsdCA9IF9fb3BlcigqX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0
cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRy
YW5zZm9ybShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAg
ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3Vs
dCwKICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApIHsK
ICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIsICsr
X19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpfX2ZpcnN0
Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy
LCBjbGFzcyBfVHA+CnZvaWQgcmVwbGFjZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgIGNvbnN0IF9UcCYgX19vbGRfdmFsdWUsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdf
dmFsdWU7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUs
IGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9U
cCYgX19uZXdfdmFsdWUpIHsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3Qp
CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkKICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsK
fQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBf
VHA+Cl9PdXRwdXRJdGVyIHJlcGxhY2VfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0
ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3ZhbHVlLCBjb25zdCBf
VHAmIF9fbmV3X3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0
LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QgPT0gX19vbGRfdmFsdWUgPyBf
X25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs
YXNzIEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3Mg
X1RwPgpfT3V0cHV0SXRlciByZXBsYWNlX2NvcHlfaWYoSXRlcmF0b3IgX19maXJzdCwgSXRlcmF0
b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1
bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3Qg
X1RwJiBfX25ld192YWx1ZSkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19maXJzdCkgPyBfX25ld192
YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKIAoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0dlbmVyYXRvcj4Kdm9pZCBnZW5lcmF0ZShfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgX0dlbmVyYXRvciBfX2dlbikgewogIGZv
ciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICpfX2ZpcnN0ID0gX19nZW4o
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0dl
bmVyYXRvcj4KX091dHB1dEl0ZXIgZ2VuZXJhdGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6
ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pIHsKICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19f
Zmlyc3QpCiAgICAqX19maXJzdCA9IF9fZ2VuKCk7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCiAKCnRl
bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpf
T3V0cHV0SXRlciByZW1vdmVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgY29uc3Qg
X1RwJiBfX3ZhbHVlKSB7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog
ICAgaWYgKCpfX2ZpcnN0ICE9IF9fdmFsdWUpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7
CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9P
dXRwdXRJdGVyIHJlbW92ZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
UHJlZGljYXRlIF9fcHJlZCkgewogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJz
dCkKICAgIGlmICghX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJz
dDsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyIHJlbW92ZShfRm9y
d2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICBjb25zdCBfVHAmIF9fdmFsdWUpIHsKICBfX2ZpcnN0ID0gZmluZChfX2ZpcnN0LCBfX2xhc3Qs
IF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0
ID09IF9fbGFzdCA/IF9fZmlyc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3Zl
X2NvcHkoKytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlciByZW1vdmVfaWYo
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpIHsKICBfX2ZpcnN0ID0gZmluZF9pZihfX2ZpcnN0
LCBfX2xhc3QsIF9fcHJlZCk7CiAgX0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgcmV0dXJu
IF9fZmlyc3QgPT0gX19sYXN0ID8gX19maXJzdCAKICAgICAgICAgICAgICAgICAgICAgICAgICAg
OiByZW1vdmVfY29weV9pZigrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgogCgp0
ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4K
X091dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIg
X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBf
VHAqKSB7CiAgX1RwIF9fdmFsdWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwog
IHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKF9fdmFsdWUgIT0gKl9fZmlyc3Qp
IHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7
CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
LCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lu
cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFnKSB7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHko
X19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJ
dGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJk
X2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmly
c3QgIT0gX19sYXN0KQogICAgaWYgKCpfX3Jlc3VsdCAhPSAqX19maXJzdCkgKisrX19yZXN1bHQg
PSAqX19maXJzdDsKICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgdW5pcXVlX2NvcHko
X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19s
YXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19s
YXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5
KCBfX3Jlc3VsdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0
cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX091
dHB1dEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19s
YXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAg
ICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCwgX1Rw
KikgewogIF9UcCBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgKl9fcmVzdWx0ID0gX192YWx1ZTsKICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgIGlmICghX19iaW5hcnlfcHJlZChfX3ZhbHVl
LCAqX19maXJzdCkpIHsKICAgICAgX192YWx1ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3Vs
dCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4K
aW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w
dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0
ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk
aWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cHV0X2l0ZXJhdG9yX3RhZykgewogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFz
dCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgX192YWx1
ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNz
IF9Gb3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fdW5p
cXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCAKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykgewogICpfX3Jlc3VsdCA9ICpfX2Zp
cnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgaWYgKCFfX2JpbmFyeV9wcmVk
KCpfX3Jlc3VsdCwgKl9fZmlyc3QpKSAqKytfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiAr
K19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0
ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciB1bmlxdWVfY29w
eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpIHsKICBpZiAoX19maXJz
dCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShfX2Zp
cnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fcmVzdWx0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg
X0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3Qs
IF9fbGFzdCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCk7
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+
Cl9Gb3J3YXJkSXRlciB1bmlxdWUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf
X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVk
KSB7CiAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJzdCwgX19sYXN0LCBfX2JpbmFyeV9w
cmVkKTsKICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0LCBfX2Jp
bmFyeV9wcmVkKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9p
ZCBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRl
ciBfX2xhc3QsIAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewog
IHdoaWxlICh0cnVlKQogICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1f
X2xhc3QpCiAgICAgIHJldHVybjsKICAgIGVsc2UKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywg
X19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgp2b2lkIF9fcmV2
ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKSB7CiAgd2hpbGUgKF9f
Zmlyc3QgPCBfX2xhc3QpCiAgICBpdGVyX3N3YXAoX19maXJzdCsrLCAtLV9fbGFzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXI+CmlubGluZSB2b2lkIHJldmVyc2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpIHsKICBf
X3JldmVyc2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkg
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX091dHB1dEl0
ZXI+Cl9PdXRwdXRJdGVyIHJldmVyc2VfY29weShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxl
IChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgLS1fX2xhc3Q7CiAgICAqX19yZXN1bHQgPSAqX19s
YXN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19n
Y2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9F
dWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBf
X24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAg
ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg
ICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh
ZykgewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAo
X19sYXN0ICA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2ZpcnN0OwoKICBfRm9yd2FyZEl0ZXIg
X19maXJzdDIgPSBfX21pZGRsZTsKICBkbyB7CiAgICBzd2FwKCpfX2ZpcnN0KyssICpfX2ZpcnN0
MisrKTsKICAgIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmly
c3QyOwogIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFzdCk7CgogIF9Gb3J3YXJkSXRlciBfX25l
d19taWRkbGUgPSBfX2ZpcnN0OwoKICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICB3aGlsZSAoX19m
aXJzdDIgIT0gX19sYXN0KSB7CiAgICBzd2FwICgqX19maXJzdCsrLCAqX19maXJzdDIrKyk7CiAg
ICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsKICAg
IGVsc2UgaWYgKF9fZmlyc3QyID09IF9fbGFzdCkKICAgICAgX19maXJzdDIgPSBfX21pZGRsZTsK
ICB9CgogIHJldHVybiBfX25ld19taWRkbGU7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+Cl9CaWRpcmVjdGlvbmFsSXRlciBfX3JvdGF0ZShf
QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C
aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRv
cl90YWcpIHsKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgIHJldHVybiBfX2xhc3Q7CiAg
aWYgKF9fbGFzdCAgPT0gX19taWRkbGUpCiAgICByZXR1cm4gX19maXJzdDsKCiAgX19yZXZlcnNl
KF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgX19y
ZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7
CgogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9IF9fbGFzdCkKICAg
IHN3YXAgKCpfX2ZpcnN0KyssICotLV9fbGFzdCk7CgogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxl
KSB7CiAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFzdCwgICBiaWRpcmVjdGlvbmFsX2l0ZXJh
dG9yX3RhZygpKTsKICAgIHJldHVybiBfX2xhc3Q7CiAgfQogIGVsc2UgewogICAgX19yZXZlcnNl
KF9fZmlyc3QsICBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICBy
ZXR1cm4gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcm90YXRlKF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSAq
LCBfVHAgKikgewoKICBfRGlzdGFuY2UgX19uID0gX19sYXN0ICAgLSBfX2ZpcnN0OwogIF9EaXN0
YW5jZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9f
azsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19t
aWRkbGUpOwoKICBpZiAoX19rID09IF9fbCkgewogICAgc3dhcF9yYW5nZXMoX19maXJzdCwgX19t
aWRkbGUsIF9fbWlkZGxlKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CgogIF9EaXN0YW5jZSBf
X2QgPSBfX2djZChfX24sIF9fayk7CgogIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9f
ZDsgX19pKyspIHsKICAgIF9UcCBfX3RtcCA9ICpfX2ZpcnN0OwogICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19wID0gX19maXJzdDsKCiAgICBpZiAoX19rIDwgX19sKSB7CiAgICAgIGZvciAoX0Rpc3Rh
bmNlIF9faiA9IDA7IF9faiA8IF9fbC9fX2Q7IF9faisrKSB7CiAgICAgICAgaWYgKF9fcCA+IF9f
Zmlyc3QgKyBfX2wpIHsKICAgICAgICAgICpfX3AgPSAqKF9fcCAtIF9fbCk7CiAgICAgICAgICBf
X3AgLT0gX19sOwogICAgICAgIH0KCiAgICAgICAgKl9fcCA9ICooX19wICsgX19rKTsKICAgICAg
ICBfX3AgKz0gX19rOwogICAgICB9CiAgICB9CgogICAgZWxzZSB7CiAgICAgIGZvciAoX0Rpc3Rh
bmNlIF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICBpZiAoX19w
IDwgX19sYXN0IC0gX19rKSB7CiAgICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAg
ICAgX19wICs9IF9fazsKICAgICAgICB9CgogICAgICAgICpfX3AgPSAqIChfX3AgLSBfX2wpOwog
ICAgICAgIF9fcCAtPSBfX2w7CiAgICAgIH0KICAgIH0KCiAgICAqX19wID0gX190bXA7CiAgICAr
K19fZmlyc3Q7CiAgfQoKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y
d2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIgcm90YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0
LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3
YXJkSXRlciBfX2xhc3QpIHsKICByZXR1cm4gX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgLAogICAg
ICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxh
dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHJv
dGF0ZV9jb3B5KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19taWRkbGUsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRl
ciBfX3Jlc3VsdCkgewogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBjb3B5KF9fbWlk
ZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0Rpc3Rh
bmNlPgppbmxpbmUgX0Rpc3RhbmNlIF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKSB7CgoK
CiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgcmFuZG9tX3NodWZmbGUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s
YXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNj
ZXNzSXRlciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVy
X3N3YXAoX19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEp
KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVt
YmVyR2VuZXJhdG9yPgp2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
TnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy
bjsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19s
YXN0OyArK19faSkKICAgIGl0ZXJfc3dhcChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9f
Zmlyc3QpICsgMSkpOwp9CgogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf
T3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24o
X0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbikKewog
IF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf
X3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNlIF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAg
d2hpbGUgKF9fbSA+IDApIHsKICAgIGlmIChfX3JhbmRvbV9udW1iZXIoX19yZW1haW5pbmcpIDwg
X19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0OwogICAgICArK19fb3V0OwogICAgICAtLV9f
bTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAgKytfX2ZpcnN0OwogIH0KICByZXR1cm4g
X19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVy
LCBjbGFzcyBfRGlzdGFuY2UsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y
PgpfT3V0cHV0SXRlciByYW5kb21fc2FtcGxlX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3
YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf
X291dCwgY29uc3QgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewogIF9EaXN0YW5jZSBfX3JlbWFpbmluZyA9
IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX3JlbWFpbmluZyk7CiAgX0Rpc3RhbmNl
IF9fbSA9IG1pbihfX24sIF9fcmVtYWluaW5nKTsKCiAgd2hpbGUgKF9fbSA+IDApIHsKICAgIGlm
IChfX3JhbmQoX19yZW1haW5pbmcpIDwgX19tKSB7CiAgICAgICpfX291dCA9ICpfX2ZpcnN0Owog
ICAgICArK19fb3V0OwogICAgICAtLV9fbTsKICAgIH0KCiAgICAtLV9fcmVtYWluaW5nOwogICAg
KytfX2ZpcnN0OwogIH0KICByZXR1cm4gX19vdXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJ
dGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgpfUmFuZG9tQWNj
ZXNzSXRlciBfX3JhbmRvbV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy
IF9fb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0Rpc3RhbmNl
IF9fbikKewogIF9EaXN0YW5jZSBfX20gPSAwOwogIF9EaXN0YW5jZSBfX3QgPSBfX247CiAgZm9y
ICggOyBfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX20gPCBfX247ICsrX19tLCArK19fZmlyc3QpIAog
ICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK
ICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAg
aWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0
OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl
ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy
R2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3Nh
bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7CiAg
X0Rpc3RhbmNlIF9fbSA9IDA7CiAgX0Rpc3RhbmNlIF9fdCA9IF9fbjsKICBmb3IgKCA7IF9fZmly
c3QgIT0gX19sYXN0ICYmIF9fbSA8IF9fbjsgKytfX20sICsrX19maXJzdCkKICAgIF9fb3V0W19f
bV0gPSAqX19maXJzdDsKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICArK19fdDsK
ICAgIF9EaXN0YW5jZSBfX00gPSBfX3JhbmQoX190KTsKICAgIGlmIChfX00gPCBfX24pCiAgICAg
IF9fb3V0W19fTV0gPSAqX19maXJzdDsKICAgICsrX19maXJzdDsKICB9CgogIHJldHVybiBfX291
dCArIF9fbTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nl
c3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJdGVy
IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0KSAKewogIHJldHVy
biBfX3JhbmRvbV9zYW1wbGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgX19vdXRfZmlyc3QsIF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8
Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIAogICAgICAgICAgY2xh
c3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnJhbmRv
bV9zYW1wbGUoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAg
ICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19v
dXRfbGFzdCwKICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQpIAp7
CiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAogICAgICAgICAgICAgICAgICAgICAgICAg
X19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk
SXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIF9fcGFydGl0aW9uKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LAoJCSAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCgkJCSBfUHJlZGlj
YXRlICAgX19wcmVkLAoJCQkgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBpZiAoX19maXJzdCA9
PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwoKICB3aGlsZSAoX19wcmVkKCpfX2ZpcnN0KSkKICAg
IGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgX0ZvcndhcmRJdGVy
IF9fbmV4dCA9IF9fZmlyc3Q7CgogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpCiAgICBpZiAo
X19wcmVkKCpfX25leHQpKSB7CiAgICAgIHN3YXAoKl9fZmlyc3QsICpfX25leHQpOwogICAgICAr
K19fZmlyc3Q7CiAgICB9CgogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0ZXIgX19w
YXJ0aXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAoJCQkgICAgICAgX1ByZWRpY2F0
ZSBfX3ByZWQsCgkJCSAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykgewogIHdoaWxl
ICh0cnVlKSB7CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQog
ICAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmIChfX3ByZWQoKl9fZmlyc3QpKQog
ICAgICAgICsrX19maXJzdDsKICAgICAgZWxzZQogICAgICAgIGJyZWFrOwogICAgLS1fX2xhc3Q7
CiAgICB3aGlsZSAodHJ1ZSkKICAgICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJl
dHVybiBfX2ZpcnN0OwogICAgICBlbHNlIGlmICghX19wcmVkKCpfX2xhc3QpKQogICAgICAgIC0t
X19sYXN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICBpdGVyX3N3YXAoX19maXJzdCwg
X19sYXN0KTsKICAgICsrX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0
ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIgcGFydGl0aW9uKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LAogICAJCQkgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAoJCQkgICAg
ICBfUHJlZGljYXRlICAgX19wcmVkKSB7CiAgcmV0dXJuIF9fcGFydGl0aW9uKF9fZmlyc3QsIF9f
bGFzdCwgX19wcmVkLCBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0ICkgKTsKfQoKCnRlbXBs
YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9EaXN0YW5j
ZT4KX0ZvcndhcmRJdGVyIF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBf
X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVk
aWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pIHsKICBpZiAoX19sZW4gPT0gMSkKICAgIHJl
dHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0IDogX19maXJzdDsKICBfRm9yd2FyZEl0ZXIg
X19taWRkbGUgPSBfX2ZpcnN0OwogIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgcmV0
dXJuIHJvdGF0ZShfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwg
X19wcmVkLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVu
IC8gMiksCiAgICAgICAgICAgICAgICBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9faW5wbGFj
ZV9zdGFibGVfcGFydGl0aW9uKF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC0gX19sZW4gLyAyKSk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfUHJlZGlj
YXRlLCAKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fc3RhYmxlX3Bh
cnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2Ug
X19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1BvaW50ZXIg
X19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3Rh
bmNlIF9fYnVmZmVyX3NpemUpIAp7CiAgaWYgKF9fbGVuIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdDEgPSBfX2ZpcnN0OwogICAgX1BvaW50ZXIgX19yZXN1bHQy
ID0gX19idWZmZXI7CiAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0IDsgKytfX2ZpcnN0KQog
ICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJz
dDsKICAgICAgICArK19fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICAqX19y
ZXN1bHQyID0gKl9fZmlyc3Q7CiAgICAgICAgKytfX3Jlc3VsdDI7CiAgICAgIH0KICAgIGNvcHko
X19idWZmZXIsIF9fcmVzdWx0MiwgX19yZXN1bHQxKTsKICAgIHJldHVybiBfX3Jlc3VsdDE7CiAg
fQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFu
Y2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAgICByZXR1cm4gcm90YXRlKF9fc3RhYmxlX3BhcnRp
dGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZpcnN0LCBfX21pZGRs
ZSwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwgX19idWZmZXIs
IF9fYnVmZmVyX3NpemUpLAogICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlLAogICAgICAgICAg
ICAgICAgICAgIF9fc3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZSgKICAgICAgICAgICAgICAgICAg
ICAgICAgICBfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgX19sZW4gLSBfX2xlbiAvIDIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKSk7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlLCBjbGFzcyBfVHAs
IGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9Gb3J3YXJkSXRlcgpfX3N0YWJsZV9wYXJ0aXRpb25f
YXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCAKICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9U
ZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3Qp
OwogIGlmIChfX2J1Zi5zaXplKCkgPiAwKQogICAgcmV0dXJuIF9fc3RhYmxlX3BhcnRpdGlvbl9h
ZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdpbigpLCBfX2J1Zi5zaXpl
KCkpOwogIGVsc2UKICAgIHJldHVybiBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0
LCBfX2xhc3QsIF9fcHJlZCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBzdGFibGVf
cGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkKICAgIHJldHVybiBfX2ZpcnN0OwogIGVsc2UKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0aXRp
b25fYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fdW5n
dWFyZGVkX3BhcnRpdGlvbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkgCnsKICB3
aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKCpfX2ZpcnN0IDwgX19waXZvdCkKICAgICAgKytfX2Zp
cnN0OwogICAgLS1fX2xhc3Q7CiAgICB3aGlsZSAoX19waXZvdCA8ICpfX2xhc3QpCiAgICAgIC0t
X19sYXN0OwogICAgaWYgKCEoX19maXJzdCA8IF9fbGFzdCkpCiAgICAgIHJldHVybiBfX2ZpcnN0
OwogICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICArK19fZmlyc3Q7CiAgfQp9ICAg
IAoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9D
b21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1RwIF9fcGl2b3QsIF9Db21wYXJlIF9fY29tcCkgCnsKICB3aGlsZSAodHJ1
ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZvdCkpCiAgICAgICsrX19maXJz
dDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bpdm90LCAqX19sYXN0KSkKICAg
ICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgcmV0dXJuIF9f
Zmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsKICAgICsrX19maXJzdDsKICB9
Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCiAKCnRlbXBsYXRlIDxjbGFzcyBf
UmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgp2b2lkIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNl
cnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAgX192YWwpIHsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7CiAgd2hpbGUgKF9fdmFsIDwgKl9fbmV4
dCkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAtLV9f
bmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX191bmd1YXJkZWRfbGlu
ZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCwgCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfUmFuZG9tQWNjZXNz
SXRlciBfX25leHQgPSBfX2xhc3Q7CiAgLS1fX25leHQ7ICAKICB3aGlsZSAoX19jb21wKF9fdmFs
LCAqX19uZXh0KSkgewogICAgKl9fbGFzdCA9ICpfX25leHQ7CiAgICBfX2xhc3QgPSBfX25leHQ7
CiAgICAtLV9fbmV4dDsKICB9CiAgKl9fbGFzdCA9IF9fdmFsOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0
KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgX1RwIF9fdmFsID0gKl9fbGFzdDsK
ICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgY29weV9iYWNrd2FyZChfX2ZpcnN0LCBfX2xh
c3QsIF9fbGFzdCArIDEpOwogICAgKl9fZmlyc3QgPSBfX3ZhbDsKICB9CiAgZWxzZQogICAgX191
bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2xhc3QsIF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9p
ZCBfX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosIF9Db21wYXJl
IF9fY29tcCkgewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fY29tcChfX3ZhbCwgKl9f
Zmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0ICsgMSk7
CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJf
aW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t
QWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly
c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg
cmV0dXJuOyAKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kg
IT0gX19sYXN0OyArK19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFs
dWVfdHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRl
ciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRl
ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBm
b3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyAr
K19faSkKICAgIF9fbGluZWFyX2luc2VydChfX2ZpcnN0LCBfX2ksIF9fdmFsdWVfdHlwZSggX19m
aXJzdCApICwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfVHA+CnZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9SYW5kb21BY2Nl
c3NJdGVyIF9fZmlyc3QsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCopIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f
aSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFy
X2luc2VydChfX2ksIF9UcCgqX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlcj4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9fZmly
c3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5n
dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAqLCBfQ29tcGFyZSBfX2Nv
bXApIHsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xh
c3Q7ICsrX19pKQogICAgX191bmd1YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9UcCgqX19pKSwg
X19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29t
cGFyZT4KaW5saW5lIHZvaWQgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vz
c0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4
KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj
Y2Vzc0l0ZXI+CnZvaWQgX19maW5hbF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBf
X2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAg
X191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19s
YXN0KTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lk
IF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9Db21wYXJl
IF9fY29tcCkgewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAg
ICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQsIF9f
Y29tcCk7CiAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsgX19zdGxfdGhy
ZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgfQogIGVsc2UKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGlu
ZSBfU2l6ZSBfX2xnKF9TaXplIF9fbikgewogIF9TaXplIF9fazsKICBmb3IgKF9fayA9IDA7IF9f
biAhPSAxOyBfX24gPj49IDEpICsrX19rOwogIHJldHVybiBfX2s7Cn0KCnRlbXBsYXRlIDxjbGFz
cyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfU2l6ZT4Kdm9pZCBfX2ludHJv
c29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBf
U2l6ZSBfX2RlcHRoX2xpbWl0KQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90
aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAgICAgcGFydGlhbF9z
b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgLS1f
X2RlcHRoX2xpbWl0OwogICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICBfX3VuZ3Vh
cmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fbGFzdCAtIDEpKSkpOwogICAgX19pbnRy
b3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCk7CiAgICBf
X2xhc3QgPSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg
Y2xhc3MgX1RwLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnRyb3NvcnRf
bG9vcChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLAogICAgICAgICAgICAgICAgICAgICAgX1NpemUg
X19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmly
c3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIGlmIChfX2RlcHRoX2xpbWl0ID09IDApIHsKICAg
ICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICBy
ZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmly
c3QpLzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0
IC0gMSksIF9fY29tcCkpLAogICAgICAgX19jb21wKTsKICAgIF9faW50cm9zb3J0X2xvb3AoX19j
dXQsIF9fbGFzdCwgKF9UcCopIDAsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICBfX2xhc3Qg
PSBfX2N1dDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5l
IHZvaWQgc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QpIHsKICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3Ao
X19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmly
c3QgKSAsCiAgICAgICAgICAgICAgICAgICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsK
ICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lk
IHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0
LAogICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ICE9IF9f
bGFzdCkgewogICAgX19pbnRyb3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAg
ICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwKICAgICAgICAgICAgICAgICAgICAg
X19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICB9
Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2lucGxhY2Vf
c3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgaWYgKF9fbGFzdCAtIF9fZmly
c3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgcmV0
dXJuOwogIH0KICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyAoX19sYXN0
IC0gX19maXJzdCkgLyAyOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRs
ZSk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QpOwogIF9fbWVyZ2Vf
d2l0aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAg
ICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9f
bGFzdCAtIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj
bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDE1KSB7
CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgIHJldHVy
bjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAt
IF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJzdCwgX19taWRkbGUs
IF9fY29tcCk7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fbWlkZGxlLCBfX2xhc3QsIF9fY29t
cCk7CiAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgX19taWRkbGUgLSBfX2ZpcnN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgX19sYXN0IC0gX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2U+CnZvaWQgX19tZXJnZV9z
b3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgX1Jh
bmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUpIHsKICBfRGlz
dGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hpbGUgKF9fbGFzdCAtIF9f
Zmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2Zp
cnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBf
c2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0
KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3RlcF9zaXplID0gbWluKF9E
aXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwogIG1lcmdlKF9fZmlyc3Qs
IF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAg
ICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIxLCBj
bGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2Zp
cnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsIAog
ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3Rh
bmNlIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkg
ewogIF9EaXN0YW5jZSBfX3R3b19zdGVwID0gMiAqIF9fc3RlcF9zaXplOwoKICB3aGlsZSAoX19s
YXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICBfX3Jlc3VsdCA9IG1lcmdlKF9fZmly
c3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgX19maXJzdCAr
IF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX190d29fc3RlcCwKICAgICAgICAgICAgICAgICAgICAg
X19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBfX2ZpcnN0ICs9IF9f
dHdvX3N0ZXA7CiAgfQogIF9fc3RlcF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2Zp
cnN0KSwgX19zdGVwX3NpemUpOwoKICBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3Np
emUsCiAgICAgICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1
bHQsCiAgICAgICAgX19jb21wKTsKfQoKY29uc3QgaW50IF9fc3RsX2NodW5rX3NpemUgPSA3Owog
ICAgICAgIAp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5j
ZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs
IAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBf
RGlzdGFuY2UgX19jaHVua19zaXplKQp7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19j
aHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No
dW5rX3NpemUpOwogICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgfQogIF9faW5zZXJ0aW9u
X3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ
dGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fY2h1bmtfaW5zZXJ0
aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAo
X19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQo
X19maXJzdCwgX19maXJzdCArIF9fY2h1bmtfc2l6ZSwgX19jb21wKTsKICAgIF9fZmlyc3QgKz0g
X19jaHVua19zaXplOwogIH0KICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19j
b21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRl
ciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9t
QWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv
bUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9pbnRl
ciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikgewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9f
Zmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47CgogIF9E
aXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNlcnRp
b25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3RlcF9z
aXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwgX19i
dWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdlX3Nv
cnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUpOwog
ICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz
SXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9D
b21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg
X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0Rpc3RhbmNlKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgX0Rpc3RhbmNlIF9fbGVuID0gX19sYXN0
IC0gX19maXJzdDsKICBfUG9pbnRlciBfX2J1ZmZlcl9sYXN0ID0gX19idWZmZXIgKyBfX2xlbjsK
CiAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX19zdGxfY2h1bmtfc2l6ZTsKICBfX2NodW5rX2lu
c2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CgogIHdo
aWxlIChfX3N0ZXBfc2l6ZSA8IF9fbGVuKSB7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0
LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXpl
ICo9IDI7CiAgICBfX21lcmdlX3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19m
aXJzdCwgX19zdGVwX3NpemUsIF9fY29tcCk7CiAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogIH0KfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xhc3Mg
X0Rpc3RhbmNlPgp2b2lkIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX1JhbmRvbUFjY2Vzc0l0ZXIg
X19maXJzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBf
X2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m
aXJzdCArIDEpIC8gMjsKICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSA9IF9fZmlyc3QgKyBf
X2xlbjsKICBpZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICBfX3N0YWJsZV9zb3J0X2Fk
YXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICBf
X3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyLCBfX2J1ZmZl
cl9zaXplKTsKICB9CiAgZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJz
dCwgX19taWRkbGUsIF9fYnVmZmVyLCAoX0Rpc3RhbmNlKikwKTsKICAgIF9fbWVyZ2Vfc29ydF93
aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAg
fQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rpc3RhbmNl
KF9fbWlkZGxlIC0gX19maXJzdCksIAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFz
dCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsIAog
ICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFu
ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwgX0NvbXBhcmUgX19jb21wKSB7CiAg
X0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFj
Y2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgX19sZW47CiAgaWYgKF9fbGVuID4gX19idWZm
ZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv
bXApOwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAg
fQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IF9fY29tcCk7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwg
X19idWZmZXIsIChfRGlzdGFuY2UqKTAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf
X2NvbXApOwogIH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs
IF9EaXN0YW5jZShfX21pZGRsZSAtIF9fZmlyc3QpLCAKICAgICAgICAgICAgICAgICAgIF9EaXN0
YW5jZShfX2xhc3QgLSBfX21pZGRsZSksIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAg
ICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy
LCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29ydF9h
dXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKSB7CiAgX1RlbXBv
cmFyeV9idWZmZXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9UcD4gYnVmKF9fZmlyc3QsIF9fbGFzdCk7
CiAgaWYgKGJ1Zi5iZWdpbigpID09IDApCiAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19maXJz
dCwgX19sYXN0KTsKICBlbHNlIAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBf
X2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo
YnVmLnNpemUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFi
bGVfc29ydF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBfVGVtcG9y
YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsK
ICBpZiAoYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0
LCBfX2xhc3QsIF9fY29tcCk7CiAgZWxzZSAKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19m
aXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rp
c3RhbmNlKGJ1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHN0YWJsZV9z
b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkgewogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9f
bGFzdCwKICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsCiAgICAg
ICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUg
PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc3Rh
YmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApIHsKICBfX3N0YWJs
ZV9zb3J0X2F1eChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90
eXBlKCBfX2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19m
aXJzdCApICwgCiAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKIAoKdGVtcGxhdGUgPGNs
YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFsX3NvcnQoX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKSB7CiAgbWFrZV9o
ZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9f
bWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kgPCAqX19maXJzdCkgCiAg
ICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9faSwgX1RwKCpfX2kpLAogICAgICAg
ICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICk7CiAgc29ydF9oZWFwKF9fZmly
c3QsIF9fbWlkZGxlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxp
bmUgdm9pZCBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg
ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX19wYXJ0aWFsX3NvcnQo
X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoK
dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w
YXJlPgp2b2lkIF9fcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k
b21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ
dGVyIF9fbGFzdCwgX1RwKiwgX0NvbXBhcmUgX19jb21wKSB7CiAgbWFrZV9oZWFwKF9fZmlyc3Qs
IF9fbWlkZGxlLCBfX2NvbXApOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRk
bGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkK
ICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29t
cCwKICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwogIHNvcnRf
aGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9S
YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t
QWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl
c3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKSB7CiAgX19wYXJ0aWFsX3NvcnQoX19maXJz
dCwgX19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNs
YXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19w
YXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0
ZXIgX19yZXN1bHRfbGFzdCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0Rpc3RhbmNlKiwgX1RwKikgewogIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9s
YXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9y
ZWFsX2xhc3QgPSBfX3Jlc3VsdF9maXJzdDsKICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBf
X3Jlc3VsdF9yZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgKl9fcmVzdWx0X3JlYWxf
bGFzdCA9ICpfX2ZpcnN0OwogICAgKytfX3Jlc3VsdF9yZWFsX2xhc3Q7CiAgICArK19fZmlyc3Q7
CiAgfQogIG1ha2VfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9sYXN0KTsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmICgqX19maXJzdCA8ICpfX3Jlc3VsdF9m
aXJzdCkgCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZSgwKSwK
ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0gX19yZXN1
bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkpOwogICAgKytfX2Zp
cnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCk7
CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0
ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcGFy
dGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAg
ICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAg
ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpIHsKICByZXR1cm4gX19w
YXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3Vs
dF9sYXN0LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9f
cmVzdWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlw
ZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFu
ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2Us
IGNsYXNzIF9UcD4KX1JhbmRvbUFjY2Vzc0l0ZXIgX19wYXJ0aWFsX3NvcnRfY29weShfSW5wdXRJ
dGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lu
cHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0
YW5jZSosIF9UcCopIHsKICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0
dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfcmVhbF9sYXN0
ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAhPSBfX2xhc3QgJiYgX19yZXN1bHRf
cmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpfX3Jlc3VsdF9yZWFsX2xhc3QgPSAq
X19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0OwogICAgKytfX2ZpcnN0OwogIH0KICBt
YWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICB3
aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QsICpfX3Jl
c3VsdF9maXJzdCkpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5j
ZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9sYXN0IC0g
X19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCksCiAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKICAgICsrX19maXJzdDsKICB9CiAgc29ydF9oZWFwKF9f
cmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgcmV0dXJuIF9fcmVz
dWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIF9SYW5kb21BY2Nlc3NJdGVyCnBh
cnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAg
ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAg
ICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LCBfQ29tcGFyZSBfX2Nv
bXApIHsKICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz
dWx0X2ZpcnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f
Y29tcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fcmVz
dWx0X2ZpcnN0ICkgLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSgg
X19maXJzdCApICk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh
c3MgX1RwPgp2b2lkIF9fbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl
ciBfX2xhc3QsIF9UcCopIHsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IDMpIHsKICAgIF9S
YW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmly
c3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19m
aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3Qg
KyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKihfX2xhc3QgLSAxKSkpKTsKICAgIGlmIChfX2N1dCA8PSBfX250aCkKICAgICAg
X19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9f
aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k
b21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBf
X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICAgICAgICAg
X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX19udGhfZWxlbWVudChfX2ZpcnN0LCBfX250
aCwgX19sYXN0LCBfX3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19udGhf
ZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250
aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Nv
bXBhcmUgX19jb21wKSB7CiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7CiAgICBfUmFu
ZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0
LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAoX19tZWRpYW4oKl9fZmly
c3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsg
KF9fbGFzdCAtIF9fZmlyc3QpLzIpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAqKF9fbGFzdCAtIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg
IGlmIChfX2N1dCA8PSBfX250aCkKICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgZWxzZSAKICAg
ICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0
LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9D
b21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0
LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz
SXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIF9fbnRoX2VsZW1lbnQoX19maXJzdCwg
X19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKCBfX2ZpcnN0ICkgLCBfX2NvbXApOwp9CgoKIAoK
dGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+
Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2Fy
ZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFs
LCBfRGlzdGFuY2UqKSAKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAg
ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAg
aWYgKCpfX21pZGRsZSA8IF9fdmFsKSB7CiAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAg
KytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgIH0KICAgIGVs
c2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJldHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfRm9yd2FyZEl0ZXIgbG93
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVy
biBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAg
ICAgICAgX19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G
b3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpf
Rm9yd2FyZEl0ZXIgX19sb3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ
dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3Zh
bCwgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsK
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwog
IF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxm
ID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRk
bGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9f
Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgfQogIHJl
dHVybiBfX2ZpcnN0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs
IGNsYXNzIF9Db21wYXJlPgppbmxpbmUgX0ZvcndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJk
SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkgewogIHJldHVybiBf
X2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAgICAg
ICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoIF9fZmlyc3QgKSApOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVy
IF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSop
CnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19s
ZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGls
ZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBf
X2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX3ZhbCA8ICpf
X21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19maXJzdCA9
IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYg
LSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3
YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVwcGVyX2JvdW5kKF9Gb3J3
YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICByZXR1cm4gX191cHBlcl9ib3VuZChf
X2ZpcnN0LCBfX2xhc3QsIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2Vf
dHlwZSggX19maXJzdCApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNz
IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fdXBw
ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCwg
X0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwg
X19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRk
bGU7CgogIHdoaWxlIChfX2xlbiA+IDApIHsKICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICBf
X21pZGRsZSA9IF9fZmlyc3Q7CiAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgaWYg
KF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNl
IHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVu
ID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVt
cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4KaW5s
aW5lIF9Gb3J3YXJkSXRlciB1cHBlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm
IF9fdmFsLCBfQ29tcGFyZSBfX2NvbXApIHsKICByZXR1cm4gX191cHBlcl9ib3VuZChfX2ZpcnN0
LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j
ZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh
c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+
Cl9fZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs
IGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5j
ZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3Rh
bmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAg
d2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxl
ID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICBpZiAoKl9fbWlk
ZGxlIDwgX192YWwpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7
CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAgZWxzZSBpZiAoX192
YWwgPCAqX19taWRkbGUpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9f
bGVmdCA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCBfX3ZhbCk7CiAgICAgIGFkdmFu
Y2UoX19maXJzdCwgX19sZW4pOwogICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRs
ZSwgX19maXJzdCwgX192YWwpOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy
IF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCkgewogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmly
c3QsIF9fbGFzdCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBl
KCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1Rw
LCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0Zv
cndhcmRJdGVyPgpfX2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0
ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29t
cCwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJz
dCwgX19sYXN0LCBfX2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19t
aWRkbGUsIF9fbGVmdCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxm
ID0gX19sZW4gPj4gMTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRk
bGUsIF9faGFsZik7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9f
Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0g
X19oYWxmIC0gMTsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkK
ICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91
bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmly
c3QsIF9fbGVuKTsKICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmly
c3QsIF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3
YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0Zvcndh
cmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9ICAgICAgICAgICAKCnRl
bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+Cmlu
bGluZSBwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgplcXVhbF9yYW5nZShfRm9yd2Fy
ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAg
ICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgcmV0dXJuIF9fZXF1YWxfcmFuZ2UoX19maXJz
dCwgX19sYXN0LCBfX3ZhbCwgX19jb21wLAogICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFu
Y2VfdHlwZSggX19maXJzdCApICk7Cn0gCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj
bGFzcyBfVHA+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0Zvcndh
cmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpIHsKICBf
Rm9yd2FyZEl0ZXIgX19pID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCk7CiAg
cmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3ZhbCA8ICpfX2kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpib29sIGJpbmFyeV9z
ZWFyY2goX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg
X19jb21wKSB7CiAgX0ZvcndhcmRJdGVyIF9faSA9IGxvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFz
dCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIV9fY29tcChfX3Zh
bCwgKl9faSk7Cn0KCiAKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0
SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBf
X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRl
cjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRw
dXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJz
dDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAq
X19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsK
ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAg
KytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19m
aXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy
MSwgY2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3Mg
X0NvbXBhcmU+Cl9PdXRwdXRJdGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJ
dGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs
IF9Db21wYXJlIF9fY29tcCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmly
c3QyICE9IF9fbGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7
CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAg
IGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAg
ICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAoKdGVtcGxhdGUgPGNsYXNz
IF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91
dF9idWZmZXIoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikgewogIGlmIChfX2xlbjEg
PT0gMCB8fCBfX2xlbjIgPT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09
IDIpIHsKICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmly
c3QsIF9fbWlkZGxlKTsKICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmly
c3RfY3V0ID0gX19maXJzdDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t
aWRkbGU7CiAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsK
ICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91
bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxl
LCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xl
bjIgLyAyOwogICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9j
dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBk
aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlv
bmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwg
X19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX25ld19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xl
bjIyKTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0
LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl
bjIgLSBfX2xlbjIyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xh
c3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVy
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDAp
CiAgICByZXR1cm47CiAgaWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21w
KCpfX21pZGRsZSwgKl9fZmlyc3QpKQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUp
OwogICAgcmV0dXJuOwogIH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2Zp
cnN0OwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlz
dGFuY2UgX19sZW4xMSA9IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEg
PiBfX2xlbjIpIHsKICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0
X2N1dCwgX19sZW4xMSk7CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwg
X19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19z
ZWNvbmRfY3V0LCBfX2xlbjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8g
MjsKICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0g
dXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAg
ICBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVj
dGlvbmFsSXRlciBfX25ld19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRs
ZSwgX19zZWNvbmRfY3V0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmly
c3RfY3V0LCBfX25ld19taWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBf
X3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAg
ICAgICAgIF9fbGVuMiAtIF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlk
aXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xh
c3MgX0Rpc3RhbmNlPgpfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRp
cmVjdGlvbmFsSXRlcjEgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xl
bjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ
dGVyMiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlz
dGFuY2UgX19idWZmZXJfc2l6ZSkgewogIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5k
OwogIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAg
IF9fYnVmZmVyX2VuZCA9IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29w
eV9iYWNrd2FyZChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9f
YnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0g
X19idWZmZXJfc2l6ZSkgewogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRs
ZSwgX19idWZmZXIpOwogICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJl
dHVybiBjb3B5X2JhY2t3YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQog
IGVsc2UKICAgIHJldHVybiByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRl
bXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0
ZXIyLAogICAgICAgICAgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJ
dGVyMyBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFz
dDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIyIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyMyBfX3Jlc3VsdCkgewogIGlmIChfX2ZpcnN0MSA9PSBfX2xh
c3QxKQogICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0
KTsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9f
Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3
aGlsZSAodHJ1ZSkgewogICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19y
ZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAg
cmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAg
ICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0
MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj
a3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAg
ICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0Jp
ZGlyZWN0aW9uYWxJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNs
YXNzIF9Db21wYXJlPgpfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGly
ZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVz
dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w
KSB7CiAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChf
X2ZpcnN0MiwgX19sYXN0MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQog
ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAt
LV9fbGFzdDE7CiAgLS1fX2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpf
X2xhc3QyLCAqX19sYXN0MSkpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAg
aWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19m
aXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBl
bHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09
IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0
MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2
b2lkIF9fbWVyZ2VfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAg
ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsIAogICAgICAgICAgICAg
ICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg
IF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAg
ICBfUG9pbnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpIHsKICBpZiAoX19s
ZW4xIDw9IF9fbGVuMiAmJiBfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkgewogICAgX1BvaW50ZXIg
X19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgbWVy
Z2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAg
fQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1
ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9fbWVyZ2Vf
YmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFz
dCk7CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19m
aXJzdDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAg
IF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlm
IChfX2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFk
dmFuY2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9i
b3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQpOwogICAgICBkaXN0YW5jZShfX21p
ZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsgCiAgICB9CiAgICBlbHNlIHsKICAgICAgX19s
ZW4yMiA9IF9fbGVuMiAvIDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsK
ICAgICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vj
b25kX2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX2xlbjExKTsK
ICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPQogICAgICBfX3JvdGF0
ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sZW4xIC0g
X19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19u
ZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZl
ciwgX19idWZmZXJfc2l6ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fbmV3X21pZGRsZSwgX19z
ZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAg
IF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICB9Cn0KCnRlbXBs
YXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1Bv
aW50ZXIsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX2FkYXB0aXZlKF9C
aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCAKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX21pZGRsZSwgCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25h
bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rp
c3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBf
RGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f
Y29tcCkgewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXpl
KSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBf
X2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19s
YXN0LCBfX2ZpcnN0LCBfX2NvbXApOwogIH0KICBlbHNlIGlmIChfX2xlbjIgPD0gX19idWZmZXJf
c2l6ZSkgewogICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21pZGRsZSwgX19sYXN0
LCBfX2J1ZmZlcik7CiAgICBfX21lcmdlX2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1
ZmZlciwgX19idWZmZXJfZW5kLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7
CiAgfQogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz
dDsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICAgIF9E
aXN0YW5jZSBfX2xlbjExID0gMDsKICAgIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICAgIGlmIChf
X2xlbjEgPiBfX2xlbjIpIHsKICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgIGFkdmFu
Y2UoX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3Vu
ZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJzdF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNl
KF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMjIpOyAgIAogICAgfQogICAgZWxzZSB7CiAg
ICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19s
ZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs
ICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAgIGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3Rf
Y3V0LCBfX2xlbjExKTsKICAgIH0KICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUg
PQogICAgICBfX3JvdGF0ZV9hZGFwdGl2ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25k
X2N1dCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwg
X19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBf
X2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBf
X2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICAgIF9fbWVyZ2VfYWRh
cHRpdmUoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGFzdCwgX19sZW4xIC0gX19sZW4x
MSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yIC0gX19sZW4yMiwgX19idWZmZXIsIF9fYnVm
ZmVyX3NpemUsIF9fY29tcCk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19pbnBsYWNlX21l
cmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNl
KikgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIgPSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBf
X2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3JhcnlfYnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwg
X1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAg
ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVu
MSwgX19sZW4yKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxl
LCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp
bigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJl
Y3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgCiAgICAgICAgICBjbGFzcyBfRGlzdGFuY2UsIGNsYXNz
IF9Db21wYXJlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFs
SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv
bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl
Y3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkgewogIF9EaXN0YW5jZSBfX2xlbjEgPSAwOwog
IGRpc3RhbmNlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xlbjEpOwogIF9EaXN0YW5jZSBfX2xlbjIg
PSAwOwogIGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMik7CgogIF9UZW1wb3Jhcnlf
YnVmZmVyPF9CaWRpcmVjdGlvbmFsSXRlciwgX1RwPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwog
IGlmIChfX2J1Zi5iZWdpbigpID09IDApCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmly
c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLCBfX2NvbXApOwogIGVsc2UKICAg
IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl
bjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5z
aXplKCkpLAogICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyPgppbmxpbmUgdm9pZCBpbnBsYWNlX21lcmdlKF9CaWRpcmVjdGlv
bmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs
SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19s
YXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFjZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUs
IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZSggX19maXJzdCApICwg
X19kaXN0YW5jZV90eXBlKCBfX2ZpcnN0ICkgKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVj
dGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIGlucGxhY2VfbWVyZ2UoX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGly
ZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVj
dGlvbmFsSXRlciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkgewogIGlmIChfX2ZpcnN0ID09IF9f
bWlkZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVy
Z2VfYXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBf
X3ZhbHVlX3R5cGUoIF9fZmlyc3QgKSAsIF9fZGlzdGFuY2VfdHlwZSggX19maXJzdCApICwKICAg
ICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCiAKIAogCiAKCnRlbXBsYXRlIDxjbGFzcyBf
SW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIg
X19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIpIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0
MSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgZWxzZSBpZigqX19maXJzdDEgPCAqX19maXJzdDIp
IAogICAgICArK19fZmlyc3QxOwogICAgZWxzZQogICAgICArK19fZmlyc3QxLCArK19fZmlyc3Qy
OwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1
dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgaW5jbHVkZXMo
X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg
X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29t
cCkgewogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIp
CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgcmV0dXJuIGZhbHNl
OwogICAgZWxzZSBpZihfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSAKICAgICAgKytfX2Zp
cnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJuIF9f
Zmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3Mg
X0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lu
cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAg
ICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAg
ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmlyc3QxICE9
IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpf
X2ZpcnN0MikgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7
CiAgICB9CiAgICBlbHNlIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgKl9fcmVz
dWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAg
ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0
MjsKICAgIH0KICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xh
c3QyLCBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAg
ICAgICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfdW5pb24oX0lucHV0SXRlcjEg
X19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICBfSW5w
dXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAg
ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoX19jb21w
KCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDE7CiAgICB9CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19m
aXJzdDEpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsK
ICAgIH0KICAgIGVsc2UgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19m
aXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICArK19fcmVzdWx0OwogIH0KICByZXR1
cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1
bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwg
Y2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJdGVyIHNldF9pbnRlcnNlY3Rpb24oX0lucHV0SXRl
cjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpIHsKICB3aGlsZSAoX19m
aXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKSAKICAgIGlmICgqX19maXJz
dDEgPCAqX19maXJzdDIpIAogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoKl9fZmlyc3Qy
IDwgKl9fZmlyc3QxKSAKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICAqX19yZXN1
bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICAg
ICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAg
ICAgIGNsYXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0
ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfQ29tcGFyZSBfX2Nv
bXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy
KQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICsrX19maXJzdDE7
CiAgICBlbHNlIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICArK19fZmly
c3QyOwogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2Zp
cnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICByZXR1cm4g
X19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfZGlmZmVyZW5jZShfSW5wdXRJ
dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KSB7CiAgd2hpbGUgKF9fZmly
c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEg
PCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmly
c3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9f
Zmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7CiAgICAgICsrX19maXJzdDE7CiAg
ICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9f
cmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVy
MiwgY2xhc3MgX091dHB1dEl0ZXIsIAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+Cl9PdXRwdXRJ
dGVyIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xh
c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu
cHV0SXRlcjIgX19sYXN0MiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVy
IF9fcmVzdWx0LCBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0
MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp
cnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f
Zmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwog
ICAgICArK19fZmlyc3QyOwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QxLCBfX2xhc3QxLCBf
X3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRl
cjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciAKc2V0X3N5bW1ldHJpY19kaWZmZXJl
bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg
ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkgewogIHdoaWxl
IChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9f
Zmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAg
KytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKCpfX2ZpcnN0
MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19m
aXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0
MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0
MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNz
IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAg
ICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgCnNldF9zeW1tZXRyaWNfZGlmZmVyZW5j
ZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg
ICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICB3aGlsZSAoX19maXJzdDEgIT0gX19s
YXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpf
X2ZpcnN0MikpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3Qx
OwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0Miwg
Kl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJz
dDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsK
ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg
Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKfQoKIAogCgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9f
Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl
dHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUg
KCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKCpfX3Jlc3VsdCA8ICpfX2ZpcnN0KQogICAg
ICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xh
c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfQ29tcGFyZT4KX0ZvcndhcmRJdGVyIG1heF9lbGVtZW50
KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0
KSByZXR1cm4gX19maXJzdDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdo
aWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSAKICAgIGlmIChfX2NvbXAoKl9fcmVzdWx0LCAqX19m
aXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtaW5fZWxlbWVudChfRm9yd2FyZEl0
ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogIGlmIChfX2ZpcnN0ID09IF9fbGFz
dCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3
aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkgCiAgICBpZiAoKl9fZmlyc3QgPCAqX19yZXN1bHQp
CiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRl
IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpfRm9yd2FyZEl0ZXIgbWluX2Vs
ZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApIHsKICBpZiAoX19maXJzdCA9PSBf
X2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7
CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpIAogICAgaWYgKF9fY29tcCgqX19maXJzdCwg
Kl9fcmVzdWx0KSkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsK
fQoKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyPgpib29sIG5leHRfcGVy
bXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf
X2xhc3QpIHsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0Jp
ZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xh
c3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzsp
IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAo
Kl9faSA8ICpfX2lpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg
ICAgIHdoaWxlICghKCpfX2kgPCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChf
X2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7
CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf
X2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBuZXh0X3Blcm11dGF0aW9u
KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog
ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKSB7CiAgaWYgKF9fZmlyc3QgPT0g
X19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2Zp
cnN0OwogICsrX19pOwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9f
aSA9IF9fbGFzdDsKICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg
X19paSA9IF9faTsKICAgIC0tX19pOwogICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAg
ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgd2hpbGUgKCFfX2NvbXAo
Kl9faSwgKi0tX19qKSkKICAgICAgICB7fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAg
ICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYg
KF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAg
cmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs
SXRlcj4KYm9vbCBwcmV2X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBf
QmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KSB7CiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAg
cmV0dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19p
OwogIGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsK
ICAtLV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsK
ICAgIC0tX19pOwogICAgaWYgKCpfX2lpIDwgKl9faSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0
ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqLS1fX2ogPCAqX19pKSkKICAgICAgICB7
fQogICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7
CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAg
IHJldmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0K
fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJv
b2wgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0
aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkg
ewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfQmlkaXJlY3Rp
b25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBpZiAoX19pID09IF9fbGFzdCkKICAg
IHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1fX2k7CgogIGZvcig7OykgewogICAg
X0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAtLV9faTsKICAgIGlmIChfX2NvbXAo
Kl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg
ICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAgICAgICAge30KICAgICAgaXRlcl9z
d2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICByZXR1cm4g
dHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICByZXZlcnNlKF9fZmly
c3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KCiAKCnRlbXBsYXRl
IDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9JbnB1dEl0ZXIgZmluZF9m
aXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAg
ICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xh
c3QyKQp7CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKSAKICAgIGZv
ciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19sYXN0MjsgKytf
X2l0ZXIpCiAgICAgIGlmICgqX19maXJzdDEgPT0gKl9faXRlcikKICAgICAgICByZXR1cm4gX19m
aXJzdDE7CiAgcmV0dXJuIF9fbGFzdDE7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj
bGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9JbnB1dEl0ZXIgZmlu
ZF9maXJzdF9vZihfSW5wdXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBf
X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2NvbXAp
CnsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEpIAogICAgZm9yIChf
Rm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRl
cikKICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2l0ZXIpKQogICAgICAgIHJldHVybiBf
X2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsKfQoKCiAKIAogCiAKCiAKdGVtcGxhdGUgPGNsYXNz
IF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjEgX19maW5k
X2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAg
ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIy
IF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZywg
Zm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIHJl
dHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyMSBfX3Jlc3VsdCA9IF9fbGFz
dDE7CiAgICB3aGlsZSAoMSkgewogICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAg
ICAgID0gc2VhcmNoKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0Mik7CiAgICAg
IGlmIChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAg
ICAgIGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgIF9fZmly
c3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgIH0KICB9
Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyLAog
ICAgICAgICAgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyMSBfX2ZpbmRfZW5k
KF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAg
ICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19s
YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnLCBmb3J3
YXJkX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNh
dGUgX19jb21wKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICByZXR1cm4gX19sYXN0
MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgd2hp
bGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1bHQKICAgICAgICA9IHNlYXJj
aChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsIF9fY29tcCk7CiAgICAgIGlm
IChfX25ld19yZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAg
IGVsc2UgewogICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgIF9fZmlyc3Qx
ID0gX19uZXdfcmVzdWx0OwogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAgIH0KICB9Cn0K
CiAKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0
aW9uYWxJdGVyMj4KX0JpZGlyZWN0aW9uYWxJdGVyMQpfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFs
SXRlcjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICBf
QmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIs
CiAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnKQp7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRl
cjE+IF9SZXZJdGVyMTsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9uYWxJ
dGVyMj4gX1Jldkl0ZXIyOwoKICBfUmV2SXRlcjEgX19ybGFzdDEoX19maXJzdDEpOwogIF9SZXZJ
dGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgX1Jldkl0ZXIxIF9fcnJlc3VsdCA9IHNlYXJjaChf
UmV2SXRlcjEoX19sYXN0MSksIF9fcmxhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3JsYXN0Mik7CgogIGlmIChfX3JyZXN1bHQgPT0gX19y
bGFzdDEpCiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRl
cjEgX19yZXN1bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRp
c3RhbmNlKF9fZmlyc3QyLCBfX2xhc3QyKSk7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAgfQp9Cgp0
ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJ
dGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9CaWRpcmVjdGlvbmFsSXRl
cjEKX19maW5kX2VuZChfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25h
bEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0Miwg
X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRl
cmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgCiAgICAgICAgICAgX0JpbmFy
eVByZWRpY2F0ZSBfX2NvbXApCnsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0
aW9uYWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJl
Y3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7
CiAgX1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0g
c2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAg
IHJldHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3Vs
dCA9IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19m
aXJzdDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgogCgp0ZW1wbGF0
ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMj4KaW5saW5lIF9Gb3J3
YXJkSXRlcjEgCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEg
X19sYXN0MSwgCiAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIg
X19sYXN0MikKewogIHJldHVybiBfX2ZpbmRfZW5kKF9fZmlyc3QxLCBfX2xhc3QxLCBfX2ZpcnN0
MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2Zp
cnN0MSApICwKICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KCBfX2ZpcnN0
MiApICk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0
ZXIyLCAKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfRm9yd2FyZEl0
ZXIxIApmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFz
dDEsIAogICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFz
dDIsCiAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQp7CiAgcmV0dXJuIF9fZmluZF9l
bmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAgICAg
ICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QxICkgLAogICAgICAgICAgICAgICAgICAg
IF9faXRlcmF0b3JfY2F0ZWdvcnkoIF9fZmlyc3QyICkgLAogICAgICAgICAgICAgICAgICAgIF9f
Y29tcCk7Cn0KCiAKIAogCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNz
IF9EaXN0YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rp
c3RhbmNlIF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2Ug
X19jaGlsZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3Rb
X19wYXJlbnRdIDwgX19maXJzdFtfX2NoaWxkXSkgCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlm
ICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVl
Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwg
Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0
ZXIgX19maXJzdCwgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXAsCiAgICAgICAgICAgICAgIF9E
aXN0YW5jZSBfX24pCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAwOwogIGZvciAoX0Rpc3RhbmNl
IF9fY2hpbGQgPSAxOyBfX2NoaWxkIDwgX19uOyArK19fY2hpbGQpIHsKICAgIGlmIChfX2NvbXAo
X19maXJzdFtfX3BhcmVudF0sIF9fZmlyc3RbX19jaGlsZF0pKQogICAgICByZXR1cm4gZmFsc2U7
CiAgICBpZiAoKF9fY2hpbGQgJiAxKSA9PSAwKQogICAgICArK19fcGFyZW50OwogIH0KICByZXR1
cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgYm9v
bCBpc19oZWFwKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f
bGFzdCkKewogIHJldHVybiBfX2lzX2hlYXAoX19maXJzdCwgX19sYXN0IC0gX19maXJzdCk7Cn0K
Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9TdHJpY3RXZWFrT3Jk
ZXJpbmc+CmlubGluZSBib29sIGlzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1Jh
bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3Jk
ZXJpbmcgX19jb21wKQp7CiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2NvbXAsIF9fbGFz
dCAtIF9fZmlyc3QpOwp9CgogCiAKIAoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KYm9v
bCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsK
ICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVy
IF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19m
aXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAgIGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAg
ICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg
X0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChf
Rm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAg
X1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAg
ICByZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgr
K19fbmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsK
ICAgIGlmIChfX2NvbXAoKl9fbmV4dCwgKl9fZmlyc3QpKQogICAgICByZXR1cm4gZmFsc2U7CiAg
fQoKICByZXR1cm4gdHJ1ZTsKfQoKCgoKCiAKCgoKIAogCiAKIyAzNCAiL3Vzci9pbmNsdWRlL2cr
Ky9hbGdvcml0aG0iIDIgMwoKCgoKIAogCiAKIyAyICJ0ZXN0dW4uY3BwIiAyCgoKY2xhc3MgRiA6
IHB1YmxpYyB1bmFyeV9mdW5jdG9yPGNvbnN0IGludCAmLHZvaWQ+CnsKcHVibGljOgogIHZvaWQg
b3BlcmF0b3IoKShjb25zdCBpbnQgJiBpKSAKICB7IHJldHVybiA7IH0KfSA7Cgp2b2lkIHByb2Mg
KGludCAqIGIsIGludCBuLCB1bmFyeV9mdW5jdG9yPGNvbnN0IGludCAmLHZvaWQ+ICYgZnVuY3Rv
cikKewogIGZvcl9lYWNoKGIsIGIrbiwgZnVuY3Rvci5mdW5jKCkpOwp9CgppbnQgbWFpbigpCnsK
ICBGIGZ1bmN0aWU7CiAgaW50IEFbNF09ezQyLDE3LCAweDQyLCAweDE3fTsKICBwcm9jKEEsNCwg
ZnVuY3RpZSk7Cn0KCg==


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

* Re: c++/5007: binderfirst<> not constructable if second arg is const reference + ice
@ 2001-12-11 16:46 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-11 16:46 UTC (permalink / raw)
  To: nobody; +Cc: gcc-prs

The following reply was made to PR c++/5007; it has been noted by GNATS.

From: rodrigc@gcc.gnu.org
To: a.metselaar@math.utwente.nl, gcc-bugs@gcc.gnu.org, gcc-gnats@gcc.gnu.org,
  gcc-prs@gcc.gnu.org, nobody@gcc.gnu.org
Cc:  
Subject: Re: c++/5007: binderfirst<> not constructable if second arg is const reference + ice
Date: 12 Dec 2001 00:35:12 -0000

 Synopsis: binderfirst<> not constructable if second arg is const reference + ice
 
 State-Changed-From-To: open->closed
 State-Changed-By: rodrigc
 State-Changed-When: Tue Dec 11 16:35:11 2001
 State-Changed-Why:
     ICE does not occur with gcc 2.95.3.
     Error occurs:
     /usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >':
     ../include/sf_mult/sf_func.h:15:   instantiated from `unary_functor<const int &,void>::func()'
     testun.cpp:13:   instantiated from here
     /usr/include/g++/stl_function.h:198: forming reference to reference type `const int &const'
     /usr/include/g++/stl_function.h:198: method.c:1755: Expect 't', have 'error_mark'
     
     ICE does not occur in gcc 3.0 and gcc 3.1.
     Error occurs instead:
     
     /usr/include/g++/stl_function.h:198: forming reference to reference type `const
        int& const'
     /usr/include/g++/stl_algo.h: In function `_Function for_each(_InputIter,
        _InputIter, _Function) [with _InputIter = int*, _Function =
        binder1st<mem_fun1_t<void, unary_functor<const int&, void>, const int&> >]':
     testun.cpp:13:   instantiated from here
     /usr/include/g++/stl_algo.h:83: no match for call to
        `(binder1st<mem_fun1_t<void, unary_functor<const int&, void>, const int&> >)
        (int&)'
 
 http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&pr=5007&database=gcc


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

* Re: c++/5007: binderfirst<> not constructable if second arg is const reference + ice
@ 2001-12-11 16:35 rodrigc
  0 siblings, 0 replies; 3+ messages in thread
From: rodrigc @ 2001-12-11 16:35 UTC (permalink / raw)
  To: a.metselaar, gcc-bugs, gcc-gnats, gcc-prs, nobody

Synopsis: binderfirst<> not constructable if second arg is const reference + ice

State-Changed-From-To: open->closed
State-Changed-By: rodrigc
State-Changed-When: Tue Dec 11 16:35:11 2001
State-Changed-Why:
    ICE does not occur with gcc 2.95.3.
    Error occurs:
    /usr/include/g++/stl_function.h: In instantiation of `binder1st<mem_fun1_t<void,unary_functor<const int &,void>,const int &> >':
    ../include/sf_mult/sf_func.h:15:   instantiated from `unary_functor<const int &,void>::func()'
    testun.cpp:13:   instantiated from here
    /usr/include/g++/stl_function.h:198: forming reference to reference type `const int &const'
    /usr/include/g++/stl_function.h:198: method.c:1755: Expect 't', have 'error_mark'
    
    ICE does not occur in gcc 3.0 and gcc 3.1.
    Error occurs instead:
    
    /usr/include/g++/stl_function.h:198: forming reference to reference type `const
       int& const'
    /usr/include/g++/stl_algo.h: In function `_Function for_each(_InputIter,
       _InputIter, _Function) [with _InputIter = int*, _Function =
       binder1st<mem_fun1_t<void, unary_functor<const int&, void>, const int&> >]':
    testun.cpp:13:   instantiated from here
    /usr/include/g++/stl_algo.h:83: no match for call to
       `(binder1st<mem_fun1_t<void, unary_functor<const int&, void>, const int&> >)
       (int&)'

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


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

end of thread, other threads:[~2001-12-12  0:46 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2001-12-04  3:36 c++/5007: binderfirst<> not constructable if second arg is const reference + ice a.metselaar
2001-12-11 16:35 rodrigc
2001-12-11 16:46 rodrigc

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